Image-ExifTool-10.10/000755 000765 000024 00000000000 12650447263 014374 5ustar00philstaff000000 000000 Image-ExifTool-10.10/arg_files/000755 000765 000024 00000000000 12650447263 016327 5ustar00philstaff000000 000000 Image-ExifTool-10.10/Changes000644 000765 000024 00001215104 12650447104 015665 0ustar00philstaff000000 000000 DO NOT EDIT THIS FILE -- it is generated from the html history files. ExifTool Version History RSS feed: http://owl.phy.queensu.ca/~phil/exiftool/rss.xml Note: The most recent production release is Version 10.10. (Other versions are considered development releases, and are not uploaded to CPAN.) Jan. 22, 2016 - Version 10.10 (production release) - Added a new Olympus LensType (thanks Niels Kristian Bech Jensen) - Added a couple of new Olympus FlashModel values - Added a new Nikon LensID - Added a new Pentax LensType - Decode a number of new Sony tags (thanks Jos Roost) - Decode H264:DateTimeOriginal DST flag, and add " DST" to time string if set - Decode a few more CanonCustom settings - Fixed problem creating user-defined XMP structure elements with names containing characters which are illegal in tag names - Improved mechanism for generating tags which must be specifically requested when copying or used in -if or -p expressions - Improved warning in Windows if help documentation file can't be created - Patched Composite:FileNumber to handle case where Canon:FileNumber is 10000 - Patched reading FujiFilm RawImageWidth/Height for new X-Pro2 RAF images - Fixed problem reading PDF objects which begin with a comment line - Fixed problem which could result in ExifTool corrupting a PDF file when writing - API Changes: - Added RequestTags option - No longer generate MDItem tags when RequestAll option is set Jan. 4, 2016 - Version 10.09 - Added ability to extract OS X system metadata ("MDItem" tags) - Added a value conversion for GoogleTrackDuration - Enchanced the -i option to allow full path names to be specified - Fixed a potential runtime error when writing corrupted JPEG images - API Changes: - Added MDItemTags option Dec. 22, 2015 - Version 10.08 - Added ability to write empty XMP structures - Added write support for PhaseOne MakerNotes tags in IIQ files - Added a new Nikon LensID (thanks David Puschel) - Decode a new Olympus tag and improved decoding of DriveMode - Minor improvements to HtmlDump of PhaseOne IIQ and PDF files - Patched to allow overwriting of empty XMP written by some PhaseOne cameras - Fixed bug in HtmlDump feature that could cause a "substr outside of string" error - API Changes: - Changed QuickTimeUTC API option to also enforce proper time zero Nov. 26, 2015 - Version 10.07 - Fixed problem with warnings on some systems about unimplemented functions for FileGroupID and FileUserID when -p or -if were used Nov. 26, 2015 - Version 10.06 - Added a new Canon LensType (thanks LibRaw) - Added a new Pentax LensType (thanks Louis Granboulan) - Added a couple of new XMP-digiKam tags - Added a new CanonModelID - Added a new ACDSee XMP tag (thanks Malus) - Decode a new Canon tag - Improved a few lens names (thanks Jos Roost) - Patched to remove trailing null when reading improperly written QuickTime strings - Fixed bug where SystemTags weren't available for use with the -p and -if options Nov. 6, 2015 - Version 10.05 - Added new Canon and Sony LensType values - Added some new Nikon LensID's (thanks Robert Rottmerhusen) - Added a new PentaxModelID - Added preliminary support for Motorola maker notes - Changed format of XMP-photoshop:DocumentAncestors to write a simple Bag of strings rather than structures (since this is what the Adobe software writes, contrary to their own XMP specification) - Fixed problem where HASH references may be exposed when copying a list of structures to a non-list-type tag - API Changes: - Added Filter option - Changed GetNewValues method name to GetNewValue (GetNewValues still works for backward compatibility) Oct. 28, 2015 - Version 10.04 - Added a few new Microsoft XMP tags - Enhanced -r option to allow processing of directory names beginning with "." - Avoid writing XMP-microsoft:LensModel unless specified explicitly - Limit precision of area size in picasa_faces config file (thanks StarGeek) - Moved Nikon NCDT GPS tags into the GPS group so they work with the Composite GPS tags - Fixed problem reading Ricoh RMETA information from some cameras Oct. 21, 2015 - Version 10.03 - Added support for JPEG 2000 extended-length boxes - Added a few new Canon LensType and CanonModelID values - Added a new Nikon LensID (thanks LibRaw) - Added ExifTool version number as a comment in -listx output - Added support for Leica SL (Typ 601) maker notes - Added a new Sony LensType (thanks Jos Roost) - Decode more Sony tags for some new models (thanks Jos Roost) - Decode a new Pentax tag - Patched for invalid makernote entry written by Sony ILCE-7M2 v1.21 - Patched problem reading EXE resources with a missing null terminator - Updated Windows distribution package to use latest version of PAR Sept. 17, 2015 - Version 10.02 - Added ability to read PNG chunks after the normal PNG end of file (IEND) - Added ability to delete a PNG trailer (with -trailer:all=) - Added some new Nikon LensID's (thanks Robert Rottmerhusen and LibRaw) - Added a few new Canon LensType's (thanks Jos Roost and LibRaw) - Added a new Pentax LensType (thanks Niels Kristian Bech Jensen) - Decode some new PanasonicRaw tags (thanks Andrew) - Decode a new Pentax tag - Enhanced -m option to allow IPTC values which are too short to be written Sept. 3, 2015 - Version 10.01 - Added a new Olympus CameraType - Added a new Canon LensType (thanks Norbert Wasser) - Added a few new QuickTime GenreID values (thanks Francois Bonzon) - Decode a new Pentax tag - Leica programmers should all be ashamed of the complete shambles of metadata they have created - Minor change to the name of a Sigma lens for Canon - Improved recognition of Pentax lens adapter - Implemented NoPDFList for -b option of Windows version too - Renamed a few Sony tags and improved decoding of others (thanks Jos Roost) - Renamed a few Pentax tags - Fixed problem importing structured information from -X option output - Fixed round-off errors in value and typo in name of CanonVRD:GammaWhitePoint - Fixed test failures if Encode, POSIX or Time::Local modules are missing Aug. 18, 2015 - Version 10.00 (production release) - Added a few new CanonModelID's - Added a few new Nikon LensID's (thanks Jaap Voets and Robert Rottmerhusen) - Added a new Canon LensType (thanks Jos Roost) - Decode a number of new Sony tags (thanks Jos Roost) - Decode a couple more RIFF tags and extract Unknown RIFF tags - Changed -b option to avoid splitting PDF List-type tag values - API Changes: - Added NoPDFList option July 23, 2015 - Version 9.99 - Added support for the Leica Q (Typ 116) maker notes - Added two new SonyModelID's (thanks Jos Roost for one) - Added two new Sony LensType2 values (thanks Jos Roost) - Added a new Pentax LensType - Extract a number of new File System tags when SystemTags API option is set - Decode a new FujiFilm tag (thanks TonyB) - Decode a number of new Sony tags (thanks Jos Roost) - Disabled writing of XMP to PostScript-format Adobe Illustrator files - SourceFile values in -csv and -json input/output are now converted to/from filename character set (set by -charset filename option) when reading/writing - Renamed Flash:FileAttributes to FlashAttributes - Renamed FujiFilm:AFPointSet to AFMode and improved decoding - Fixed problem where a partial command could be executed if the -stay_open option was used and the command is aborted due to an error in arguments - Fixed problem with OS X installer on El Capitan (now installs in /usr/local/bin instead of /usr/bin) - API Changes: - Added SystemTags option June 26, 2015 - Version 9.98 - Added read support for DSS and DS2 file formats - Added write support for XMP-mwg-rs:Rotation (seen in XMP from LR6) - Added a new Sigma LensType (thanks Niels Kristian Bech Jensen) - Decode Pentax DiffractionCorrection - Decode Olympus ID3 XOLY frame - Decode a few more Sony tags - Improved reliability of decoding Nikon D810 ShotInfo and custom settings - Changed name of Pentax VignettingCorrection to PeripheralIlluminationCorr - Fixed problem with user parameters in tag name expressions when copying June 2, 2015 - Version 9.97 - Added a new Pentax Quality value - Added a new Panasonic AdvancedSceneMode (thanks Horst Wandres) - Minor improvement to lens identification logic based on XMP information - Changed a few DR4 tag names - Fixed improper scoping of XMP namespace prefixes (so conflicting prefixes are now properly resolved) May 20, 2015 - Version 9.96 - Added support for CanonVRD version 4 information and DR4 files - Added two new Canon LensType values (thanks Norbert Wasser) - Added two new Olympus LensType values (thanks Niels Kristian Bech Jensen) - Added a new Minolta/Sony LensType and fixed another one (thanks Jos Roost) - Added a new Nikon LensID (thanks John Helour) - Added a few new QuickTime tags - Added a new PentaxModelID and a new Pentax PictureMode - Added a few new XMP-aux tags - Decode a couple more DPX tags - Decode NikonCustom tags for D810 firmware version 1.02 - Improved -htmlDump output for extended XMP and some other JPEG segments - Improved a Canon lens name - Documented the -userParam command-line option (which has existed since 9.90) - Changed default behaviour to ignore extended XMP with an incorrect GUID (as per the XMP specification) - Changed the case of a few tag names for consistency - Patched problem with Sony cameras giving incorrect LensInfo for some third party lenses, leading to an incorrect LensID by ExifTool (thanks Jos Roost) - Patched problem where GPS minutes or seconds could round up to 60 - Fixed picasa_faces.config to rotate regions if necessary for RAW file types (thanks Stargeek) - API Changes: - Added ExtendedXMP option May 9, 2015 - Version 9.95 - Added a few new Minolta/Sony lenses (thanks Jos Roost) - Added config_files/photoshop_paths.config to the full distribution - Avoid rebuilding maker notes when using -tagsFromFile with -fast2 option - Validate tag names when redirecting (ie. "-DSTTAG 1) - Avoid writing a few XMP-crs tags which have XMP-exifEX equivalents unless specified explicitly - Patched POD documentation in MIE.pm to remove non-ASCII characters - Fixed bug adding back XMP tags in PDF files after deleting all in the same command (also made XMP the preferred group when writing PDF files) - Fixed bug extracting some font information from QuickTime videos - Fixed inconsistencies in behaviour when extracting XML as a block from JPEG2000 images - Fixed problem where FileName was changed when using -srcfile option and writing only the Directory - API Changes: - Added the PNGEarlyXMP option - Internal Changes: - Changed all "$exifTool" variable names to "$et" throughout -- my apologies to the diff engines Oct. 19, 2013 - Version 9.39 - Added a new PentaxCameraID and some new LensTypes (thanks Louis Granboulan) - Added a new Nikon LensID - Added a new Panasonic ShutterType - Additions and improvements to Pentax makernote decoding for K-3 - Decode a number of new tags including purchase information from MP4 videos - Decode FLIR information acquired by Extech MeterLink meters (thanks Tomas) - Decode more Sony tags (thanks Jos Roost) - Patched to suppress the run-time "No such file or directory" error that has been seen when using the -csv option on Windows systems Oct. 7, 2013 - Version 9.38 - Added read support for DPX images - Added a new Pentax LensType - Added a few new CanonModelID values - Added a new XMP-apple-fi tag - Decode a few more Canon tags (thanks Tomasz Kawecki) - Decode a few more Sony tags (thanks Jos Roost) - Improved the names of a few Apple tags (thanks Neal Krawetz) and added new Composite tag - Tolerate NMEA sentences with missing degrees written by some crappy software - Changed Duration conversion to print number of days if more than 24 hours Sept. 14, 2013 - Version 9.37 - Added support for maker notes from Apple iPhone5 iOS 7 - Added two more Torrent tags - Added a new Pentax DigitalFilter - Added new Olympus CameraType and LensType values - Decode a couple more Olympus tags - More improvements to Sony decoding (thanks Jos Roost) - Improved decoding of Scalado JPEG APP4 information - Fixed problem where a PreviewImage could be reported in either the File or Composite group, depending on the details of the command Sept. 7, 2013 - Version 9.36 - Added read support for BitTorrent description files (bencode format) - Added a couple of new Nikon LensID's (thanks Jurgen Sahlberg) - Added support for PNG 8bim raw profile - Added or fixed a few Pentax LensType values (thanks Louis Granboulan) - Added ability to delete DNGAdobeData and DNGPrivateData - Decode more Sony tags and improved decoding of others (thanks Jos Roost) - Decode a number of new FujiFilm tags and fixed 2 incorrect Saturation values - Decode a number of Canon CameraInfo tags for the 70D (thanks Tomasz Kawecki) - Patched to issue minor warning and extract only the first 1000 values from XMP list-type tags containing more than 1000 items (all values may be extracted by ignoring this warning with the -m option) - Patched decoding of PNG IPTC raw profile to allow either IIM or IRB data - Flagged ImageSourceData as "unsafe" (avoids excessive memory usage when copying all tags because this data may be larger than the image itself for Photoshop TIFF images) - Disabled feature introduced in version 9.14 which allowed multiple tags (specified by wildcards) to be copied into a single list. This feature had the unintended side-effect of generating duplicate list items when copying list-type tags if there were multiple source tags with the same name. If necessary, -addTagsFromFile may still be used to copy the values of multiple tags into a single list. Aug. 17, 2013 - Version 9.35 - Added a new Canon LensType (thanks Oliver) - Added two new Olympus CameraType values - Added some new Pentax LensType values (thanks Louis Granboulan) - Added a new RIFF StreamType value - Decode a number of new Sony tags (thanks Jos Roost) - Decode CameraTemperature from more Canon models - Extract thumbnail information from Leica X VARIO MP4 videos - Improved decoding of Pentax LensData (thanks Louis Granboulan) - Patched to avoid a warning for the messed-up Leica M maker notes - Changed a few Pentax Samsung/Schneider lens names for consistency - Changed "Can't delete" message to indicate if the tag is Permanent - Fixed the case of a few tag names (thanks Romain) July 27, 2013 - Version 9.34 - Added support for Ricoh GR maker notes (in MOV videos too) - Added a new Olympus LensType (thanks Niels Kristian Bech Jensen) - Added a new Canon LensType (thanks Norbert Wasser) - Added support for Sony DSC-TF1 maker notes (thanks Jos Roost) - Added patch for messed up Leica M (Typ 240) MakerNote trailer - Added a few new CanonModelID's and a few new PentaxModelID's - Added some new XMP-crs tags written by LR5 - Added a few new Nikon LensID's - Decode a number of new Ricoh GR tags (thanks Tim Gray) - Recognize the Nikon SB-700 external flash - Updated MWG location tags to conform with the MWG 2.0 specification (but continue writing legacy IPTC Core location tags) - Removed "[Minor]" designation from "excessive count" warning if count is greater than 2M - Avoid processing multiple EXIF IFD's if only one should exist July 13, 2013 - Version 9.33 - Added support for EXIF UTF-16 Unicode text (previously treated as UCS-2) - Added support for Leica X Vario maker notes - Added a couple of new SonyModelID values (thanks Jos Roost) - Added a new CanonModelID and a new Olympus CameraType - Added a new Canon LensType - Added a new Olympus LensType (thanks Niels Kristian Bech Jensen) - Decode some new Panasonic tags and added values for others (thanks Thomas) - Improved decoding of Olympus RawDevArtFilter - Improved decoding of some Sony tags for the RX100M2 - Changed application to always return an error status when exiting if an error was encountered when extracting information June 22, 2013 - Version 9.32 - Added support for "Exif 2.3 for XMP" tags - Added a few new Olympus LensTypes (thanks Niels Kristian Bech Jensen) - Added a few new PentaxModelID's - Added two new Samsung LensType values (thanks Pascal de Bruijn) - Decode a new Olympus tag - Fixed problem extracting audio comments from Ricoh G700SE images - Fixed a non-conforming CanonModelID string June 8, 2013 - Version 9.31 - Added a number of new Photoshop tags (but marked as Unknown) - Added a few new values for some Olympus tags - Added conversion for Olympus SensorTemperature - Added two new CanonModelID's - Added support for Reconyx firmware 4.0.0 - Decode a number of new QuickTime and FLIR tags in MP4 videos - Decode more Sony tags (thanks Jos Roost) - Decode a new Olympus tag - The API List option may now be used in the config file for the same effect as -sep when combined with the -X, -j or -php option on the command line - Fixed problem where some QuickTime string values could have terminating NULL characters, which caused problems when renaming files using these tags May 25, 2013 - Version 9.30 - Added a new Canon LensType - Decode many Canon 700D CameraInfo tags - Also delete null characters with the default advanced formatting filter - Tolerate leading whitespace in HTML files - Fixed decoding of Canon 650D CameraInfo FocalLength - Fixed bug in new advanced formatting feature which gave incorrect output when used in the -p option for processing multiple files May 18, 2013 - Version 9.29 - Added another H264 Model value (thanks Rob Lewis) - Added support for Canon 5DmkIII firmware version 1.2.1 - Added recognition of IBM AVC video files - Added a new CanonModelID - Decode more FLIR tags (thanks Tomas) - Decode H264 MDPM TimeCode - More improvements to Sony LensType decoding (thanks Jos Roost) - Extract information from the ASF Metadata Library in WMV files - Extract ColorBalanceVersion for unknown Nikon ColorBalance information - Updated some ID3 Genre names (thanks Mats Peterson) - Fixed warning when using -p with a string containing a newline - Fixed some incorrect Pentax Q LensType values Apr. 21, 2013 - Version 9.28 - Added the ability to delete unknown JPEG APP segments by segment name - Added a bunch of new ID3 Genre values (thanks Mats Peterson) - Decode a few more Sony tags (thanks Jos Roost) - Decode a few more tricky FLIR tags (thanks Tomas) - Improved Dutch language translation (thanks Peter van der Laan) - Patched to avoid warning in images where the AFMicroAdj data has been truncated by Canon DPP - Fixed -tagsFromFile and -v so they may now be used when writing via pipes - Fixed writing of Panasonic LensType tags that were broken in the 9.15 update - Fixed incorrect case for list type of XMP DocumentAncestors and TextLayers - API Changes: - Allow a File::RandomAccess reference as an input to WriteInfo() Apr. 15, 2013 - Version 9.27 (production release) - Fixed "ARRAY ref" runtime error introduced in 9.25 that could occur when using the -X option - Fixed runtime warning which could occur when conditionally deleting XMP structure Apr. 13, 2013 - Version 9.26 - Added read support for FLIR FFF and FPF images and decode more FLIR tags - Added some new Pentax LensType's and Nikon LensID's - Added a few new Panasonic ContrastMode values - Decode a number of Canon 6D tags - Allow CanonRaw tags to be written using "CIFF" as a group name - Improved decoding of Canon ColorData information for newer EOS models - Improved decoding of a number of Sony tags (thanks Jos Roost) - Removed index number from duplicate Composite TagID's in XML output - Fixed byte-order problem for a few Nikon D5200 and D7100 tags - Fixed incompatibility with old-style (pre-8.46) XMP user-defined structure definitions Apr. 6, 2013 - Version 9.25 (production release) - Added read support for FLIR thermal image metadata in JPEG images - Added write support for DNG version 1.4 images - Added a new Pentax DriveMode value and a new Pentax LensType - Added two new Olympus CameraType values - Added print conversion for XMP Flash tags to provide alternate language support - Decode a few more Nikon and Pentax tags - Decode more Sony tags (thanks Jos Roost) - Decode more Panasonic tags and changed decoding of others - Enhanced -j and -php options to work with -D, -H and -l - Improved German translations (thanks Herbert Kauer) - Patched decoding of QuickTime date/time tags to accommodate Samsung and Sony cameras that use an incorrect time zero of 1970 instead of 1904. This patch will only work for videos produced before 2036, so hopefully Samsung and Sony will fix this problem at their end before then (care to place a wager?) - Fixed issues when using "-wm cg" and writing metadata as a block - Fixed possible "division by zero" error when reading undefined XMP rational Mar. 23, 2013 - Version 9.24 - Added ability to overwrite plus append output files (-w+!) - Added support for Sigma X3F version 3.0 images - Added a few new values for some Pentax tags - Added a few new CanonModelID's - Decode Nikon D5100 and D5200 custom settings plus a few other Nikon tags - Allow the value for missing tags extracted with the -f option to be configured via the API MissingTagValue setting (default is still "-") - Improved decoding of Sony LensSpec (again, thanks Jos Roost) - Fixed bug reading QuickTime extended-size atoms Mar. 10, 2013 - Version 9.23 - Added -W (-tagOut) and -Wext (-tagOutExt) options to allow multiple tags to be extracted to separate output files from a single source file - Added append feature to -w (-w+) - Added ability to extract SoundFile from Ricoh RMETA - Added more SonyModelID and Sony LensType values and improved Sony LensType decoding (thanks Jos Roost) - Added a new Olympus LensType (thanks Niels Kristian Bech Jensen) - Added another Pentax LensType - Decode more Nikon flash information (thanks Alyda Gilmore for the samples) - Decode Pentax Kelvin white balance tags (thanks Klaus Homeister) - Extract PDF embedded image color space - Improved Spanish translations (thanks Emilio Sancha) - More patches to avoid "APP1 segment too large" errors when copying all tags from some RAW images Mar. 2, 2013 - Version 9.22 - Fixed problem extracting metadata from encrypted embedded JPEG images in PDF files and added the ability to extract JPEG 2000 information too Mar. 2, 2013 - Version 9.21 - Added ability to extract embedded images and their metadata from PDF files - Added read support for binary-format PLIST files - Added support for Sigma DP3 Merrill maker notes - Added a few new Sigma LensType values - Added a new FujiFilm PictureMode value - Decode a number of new Pentax tags (thanks Klaus Homeister) - Decode more Sony tags (thanks Jos Roost) - Decode some new Nikon D800 tags (thanks Alyda Gilmore for the samples) - Decode a number of new tags in 3GP videos - Decode Pentax CameraType - Made a few more DNG tags writable (but protected) - Fixed problem reading XREF table of some PDF files - API Changes: - The CombineInfo() routine is now deprecated because it is likely that nobody ever used it. If anyone actually uses this, please let me know Feb. 20, 2013 - Version 9.20 - NOTICE: This release fixes a problem in the 9.19 Windows version that could cause ExifTool to crash when writing metadata to some files (it seems that one of the files in the 9.19 Windows package was corrupted) - Added a new PentaxModelID - Added write support for a few Getty Images XMP tags - Decode Sony AFAreaModeSetting (thanks Jos Roost) Feb. 20, 2013 - Version 9.19 - Added read support for Phase One IIQ maker notes - Added a couple of new Minolta Teleconverter values - Patched problem which could result in runtime warning when extracting information from a file with an incorrectly formatted PreviewImage pointer - Improved handling of unknown maker notes when writing to reduce the chance of corruption (fixes problem of corrupted SilverFast maker notes) - Fixed bug in HtmlDump where unused bytes at end of MakerNotes were not shown if they came at the end of a TIFF-format file Feb. 16, 2013 - Version 9.18 - Decode more AF information for Sony SLT models (thanks Andy Johnson for the samples) - Recognize CameraInfo and ColorData information from newer Canon 1DX firmware - Organized support files in full Perl distribution into separate directories - Improved German and Spanish translations (thanks Herbert Kauer and Emilio Sancha) - Fixed inconsistency where a priority tag could be hidden by a same-named tag in the same group when using the -j or -X option combined with -g or -G - Fixed problem in standard tests that could cause ExifTool test 25 to fail Feb. 9, 2013 - Version 9.17 - Added PLIST and MODD to the list of supported file extensions - Added track name to UserData tags within QuickTime tracks - Added a new Pentax LensType (thanks Pietu Pohjalainen) - Added a new Canon LensType - Decode binary data in PLIST and MODD files - Decode new Canon 1DX CustomFunctions - Issue a minor warning and ignore duplicate PDF Info dictionaries unless the -m option is used - Improved date/time parsing when writing to allow single-digit fields - Improved decoding/naming of a few Sony tags (thanks Jos Roost) - Improved German translations (thanks Herbert Kauer) - Changed a few PLIST tag names - Fixed decoding of Olympus CameraType for some models - Fixed problem calculating AvgBitrate for some video files - Fixed problem writing Canon:LensSerialNumber Feb. 2, 2013 - Version 9.16 - Added support for DarwinCore XMP tags - Added support for CinemaDNG tags - Added basic support for parsing XML PLIST information, and use this to extract tags from QuickTime iTunesInfo Data - Added a new Pentax lens (thanks Niels Kristian Bech Jensen) - Added some new Sony E-mount lenses (thanks Jos Roost) - Added a new NEFBitDepth value (thanks Jos Roost) - Added a new CanonModelID - Decode a few more Sony tags (thanks Jos Roost) - Improved decoding of QuickTime iTunesInfo tags - Improved Spanish translations (thanks Emilio Sancha) - Improved handling of errors in Perl expression of new formatting feature - Improved -p option to also handle structures - Changed a number of Sigma lens names for Olympus to conform with official Sigma model names (thanks Niels Kristian Bech Jensen) - Moved the MWG XMP tags documentation to the MWG page - Patched to allow reading GPX track logs with no version number - Fixed problem reading an ID3 POPM frame with a missing counter - Fixed bug which could cause "uninitialized value" runtime warning when reading Nikon maker notes with an empty RetouchHistory - API Changes: - Compatibility Notice: The MWG Composite tags are no longer automatically loaded just by using the MWG module. Image::ExifTool::MWG::Load() must now be called explicitly to load these tags Jan. 27, 2013 - Version 9.15 - Added advanced formatting feature to -p and -tagsFromFile options - Added -echo3 and -echo4 options - Added a few more Olympus LensType values, removed one, changed some lens names for consistency (all thanks Niels Kristian Bech Jensen), and use hexadecimal instead of decimal for numerical LensType values - Added a number of new Sony E-mount lenses - Added a new Tamron lens for Sony (thanks Marcin Krol) - Trim trailing spaces from Panasonic LensType strings - Fixed bug which could cause "Can't call method GetMarkerPointers" runtime warning when writing certain types of corrupted images - Fixed problem copying PrevewImage from some corrupted files - Fixed problem identifying a Sigma lens for Nikon at some focal lengths - API Changes: - Added AddUserDefinedTags() method - Added formatting feature for tag values in SetNewValuesFromFile() Jan. 18, 2013 - Version 9.14 - Added -wm (-writeMode) option to provide control over tag write/create mode - Added ability to use wildcards in target tag names when writing - Added ability to read/write Jpeg2000 XML tag as a block - Added ability to delete MPF segment (with -MPF:All=) - Added a number of new Olympus lenses (thanks Niels Kristian Bech Jensen) - Added a new Nikon LensID (thanks Robert Rottmerhusen) - Added a number of new Pentax LensType's (thanks Alan Robinson for one) - Added a few new CanonModelID's and Canon LensType's - Decode ID3v2 POPM and OWNE frames - Decode new Canon 6D CustomFunctions - Improved calculation of ScaleFactor35efl for Canon cameras - Changed priority of PDF Info tags so tags from most recent Info dictionary take precedence (to partially accomodate the questionable Acrobat Pro incremental update technique) - Changed some verbose warnings when attempting to write "unsafe" tags - Changed behaviour so that "unsafe" tags are not copied for any tag specified using a wildcard (previously this was the behaviour for a tag name of 'all' or '*', but not names like 'gps*') - Fixed bug where a Composite tag could sometimes not be generated when the -struct option was used if the tag was derived from an XMP List-type tag - Fixed problem conditionally deleting GIF Comment and MIE tags - Fixed decoding of RawImageWidth/Height from FujiFilm X-E1 RAF images - API Changes: - Added WriteMode option Jan. 10, 2013 - Version 9.13 (production release) - Added basic validation of ExifVersion and FlashpixVersion tags when writing - Fixed problem where MPF PreviewImage was lost when editing metadata in JPEG images from the Nikon D4, D600 or D800 Jan. 2, 2013 - Version 9.12 (production release) - Fixed problem introduced in 9.10 preserving file modification date/time when some options are used Jan. 2, 2013 - Version 9.11 (production release) - Improved decoding of some Sony tags - Changed 3 tag names to avoid a leading digit to fix XML validation problem - Fixed bug introduced in 9.04 that could double-encipher some Sony MakerNote information when writing (affected files are fixed by writing any tag with ExifTool 9.11) Dec. 29, 2012 - Version 9.10 - Added write support for a few new XMP-crs and XMP-photomech tags - Added a new Samsung LensType (thanks Jaroslav Stepanek) - Added a new Pentax LensType (thanks Helmut Schutz) - Added a new Canon LensType - Decode Sony A99 FocusMode (thanks Michael Tapes for the samples) - Tolerate (but warn about) up to 4 bytes of garbage at start of EXIF segment - Changed -P option to also preserve FileCreateDate on Windows (requires Win32API::File::Time) - Changed "[minor]" warning messages to capitalize the "M" (ie. "[Minor]") if processing is affected when the warning is ignored - Patched to avoid problem of slow processing with some corrupted EXIF Dec. 15, 2012 - Version 9.09 - Added a few new Google XMP GPano tags - Added a new Olympus CameraType - Added a couple of new Minolta LensTypes - Added two new Nikon LensID's (thanks David Puschel and Robert Rottmerhusen) - Decode Nikon D7000 AFPointsUsed and make this tag writable - Decode a new Olympus tag (thanks Christoph Anton Mitterer) - Renamed one of the FujiFilm RAF RawImageWidth/Height pairs to RawImageFullWidth/Height - Changed -stay_open when combined with -q to flush output after each command (as already done without -q) (requires IO::Handle) - Fixed problem shifting FileCreateDate when writing other "real" tags in the same command Nov. 26, 2012 - Version 9.08 - Fixed bug introduced in 9.07 that broke writing of FileModifyDate Nov. 24, 2012 - Version 9.07 - Added ability to read/write FileCreateDate (Windows only) - Added ability to read FileInodeChangeDate (non-Windows only) - Added support for new tags in DNG 1.4 specification - Added support for Google Photosphere GPano XMP tags - Added a couple of new Olympus filter effects - Changed a Panasonic LensType (thanks Olaf Ulrich) - API Changes: - Enhanced SetFileModifyDate() to write FileCreateDate (Windows only) Nov. 17, 2012 - Version 9.06 - Added support for Nikon maker notes in images from any camera make (as written by Capture NX2) - Added support for FujiFilm X-E1 RAF images - Added a new Olympus CameraType - Added a new PentaxModelID and a new Pentax LensType - Extract FileCreateDate (Windows) and FileInodeChangeDate (other systems) - Fixed bug decoding UTF-16 ID3 synchronized lyrics Nov. 10, 2012 - Version 9.05 - Added ability to read APE metadata from MP3 audio files - Decode ID3 synchronized lyrics/text information - Decode maker notes in Leica V-LUX40 MP4 videos - Decode Sony A99 AFPointSelected (thanks Michael Tapes for the samples) - Improved decoding of some Sony tags (thanks Jos Roost) - API Changes: - Removed GeoNoInterpolate option (just set GeoMaxIntSecs to 0 instead) Nov. 3, 2012 - Version 9.04 (production release) - Added two new Sony LensType values (thanks Matthias Paul) - Added a few new Canon LensType values - Added a couple of new PentaxModelID's and decode some new K-5 II values - Added support for some new XMP tags written by the Apple iPhone 5 - Added a new Olympus CameraType - Decode more Sony tags/values (thanks Jos Roost) - Decode Nikon HDRInfo (thanks Stefan) - Decode some FlashInfo tags for new Nikon models - Decode a few WM ID3 tags (some documentation on these would be nice) - Fixed bug which could cause truncated/garbage ID3v2 strings to be returned - Fixed -globalTimeShift option to also work when copying tags - Fixed decoding of Nikon AFFineTuneAdj for FirmwareVersion 1.10B (thanks Michael Tapes for the samples for this and the A77) - Fixed problem where a few tags (FileSequence, NewGUID and Now) were not available for use with the -p option - API Changes: - Added RequestAll and GeoNoInterpolate options - Fixed problem in SetNewValue when setting the Raw value of some tags Oct. 13, 2012 - Version 9.03 - Added new feature to provide control over directory levels in %d strings - Added ability to write OtherImage in NEF images - Added a new Pentax LensType - Added a few new CanonModelID's (thanks Laurent Clevy) - Added a new Nikon LensID (thanks Geert De Soete) - Added a few new Olympus CameraType values - Decode some new CameraInfo tags for the Canon EOS 650D - Decode a number of new Sony tags (thanks Jos Roost) - Improved decoding of some Sigma tags for the DP1/DP2 Merrill - Give priority to EXIF tags over SigmaRaw tags X3F images - Changed Samsung lens names to include "NX" (thanks Jaroslav Stepanek) - Fixed misleading verbose "TAG is not writable" messages when copying list-type tags - API Changes: - Enhanced GetValue() to allow return of 'Rational' value Sept. 6, 2012 - Version 9.02 - Added a new Nikon LensID (thanks Joseph Heled) - Added a new EXIF SubFileType value used in DNG images - Added write support for Apple Adjustment Settings XMP tags (XMP-aas) - Added a couple of new Samsung LensType values (thanks Jaroslav Stepanek) - Added a couple of new Canon LensType values and a new CanonModelID - Decode a number of new Sony tags (thanks Jos Roost) - Enhanced "-o -" feature to allow output file type to be specified - Extract last file access time as FileAccessDate - Allow tags to be set from files which are zero bytes in size - Made ProfileHueSatMap tags Binary if they are too long - Changed names of some PanasonicRaw DistortionInfo tags - Changed decoding for a Sony ExposureMode value - Fixed hang/crash that could occur when writing to an image with corrupted Sony MoreInfo data (eg. SLT-A55V JPEG corrupted by GIMP) Aug. 25, 2012 - Version 9.01 (production release) - Added a couple of new CanonModelID values - Added a couple of new Canon LensType values (thanks Pascal de Bruijn) - Added a new PentaxModelID and a few new Pentax PictureMode values - Decode a new Pentax ISO tag - Improved -listx output for XMP structure tags - Fixed "unexpected end of file" problems with some compressed MIE files Aug. 18, 2012 - Version 9.00 - Added support for PDF encryption V5.6 (new in Adobe Reader X) - Added a few new XMP-cc tags and changed a few others to rdf:resource type - Added a new Sony LensType and values for other Sony tags (thanks Jos Roost) - Added a new Nikon LensID - Added a new Panasonic LensType (thanks Olaf Ulrich) - Added patch to fix simple XMP tags written incorrectly as lang-alt type - Decode some Panasonic RW2 lens distortion correction tags - Decode some WEBP image characteristics from the VP8 bitstream - Decode more Leica MakerNote information - Calculate CurrentIPTCDigest for IPTC in PostScript files - Changed the names of a couple of WBShift tags - Improved parsing of -if expressions to interpret a dash after a tag name as a minus sign instead of part of the tag name - Patched problem with conditional deletion of an incorrectly null-terminated JPEG Comment - Fixed hang bug when reading unsupported Microsoft Xtra information in MOV videos Aug. 3, 2012 - Version 8.99 - Added patch to avoid "Error renaming temporary file" errors in Windows - Decode some new Sony tags and values (thanks Mike Reit and Jos Roost) - Improved Italian translation (thanks Michele Locati) - Improved decoding of H264 ImageStabilization - Changed names of PanasonicRaw ImageWidth/Height tags, and added new Composite tags to calculate actual size of RW2 images - Fixed "Corrupted Ricoh RMETA data" warning for images from some Ricoh models - Fixed problem writing information to some EPS images July 28, 2012 - Version 8.98 - Added a new Pentax LensType and two new PentaxModelID's - Added a new CanonModelID and a new Olympus CameraType - Added a new Composite Duration tag for Vorbis audio files - Added more elements to Microsoft Regions XMP structure and fixed tag name documentation for this - Decode a number of new Sony tags (thanks Jos Roost) - Changed name of Minolta BatteryLevel tag to BatteryState - Patched problem with conditional deletion of IPTC string-type tags which are incorrectly null terminated (eg. written by Picasa 2.0) - Fixed problem copying Canon 5DmkIII MakerNotes from CR2 to JPEG images - Fixed runtime error when writing some images with corrupted EXIF July 6, 2012 - Version 8.97 - Added a new Canon LensType - Added support for GPX attitude information as written by Arduino - Added write support for XMP-expressionmedia:CatalogSets - Made CFARepeatPatternDim and CFAPattern2 writable but protected - Minor improvement to decoding of Sony FaceInfo - Fixed problem reading some GPX track logs June 30, 2012 - Version 8.96 - Added -globalTimeShift option - Added new values for a couple of Nikon tags (thanks Michael Relt) - Added a few new Sony PictureEffect values - Added a new Olympus LensType - Decode a new Sony A100 tag and improved/renamed some others (thanks Igal Milchtaich) - Changed -restore_original and -delete_original options to scan directories only for writable file types - Enhanced -srcfile option to allow multiple source files to be specified - Patched possible round-off problem when extracting rational values - Fixed bug which could cause runtime error when reading some HTML files and improved reliability when extracting HTML "meta" tags - API Changes: - Added GlobalTimeShift option June 16, 2012 - Version 8.95 - Added a few new Sony PictureEffect values - Added a new Olympus lens type (thanks Niels Kristian Bech Jensen) - Improved decoding of Canon IntelligentContrast - Improved user-defined lens logic to attempt to choose the best matching user-defined lens if more than one is possible June 9, 2012 - Version 8.94 - Added ability to read/write IPTC as a block - Added a few Nikon LensID's (thanks Mike Pollock and Robert Rottmerhusen) - Added a new Olympus LensType (thanks Brad Grier) - Added new values for a few Olympus tags - Decode more Sony tags (thanks Jos Roost and Igal Milchtaich) - Decode Canon IntelligentContrast and add a new CanonModelID - Changed names of Canon Sort/LongFocal tags to Min/MaxFocalLength May 26, 2012 - Version 8.93 - Added some new Nikon RetouchHistory values - Added a couple of new Pentax LensType values - Added some new Olympus MagicFilter and LensType values - Added a new CanonModelID - Decode more Sony tags (thanks Jos Roost) - Decode some MakerNote information in Olympus E-M5 MOV videos - Decode a couple more Canon tags - Patched to overcome formatting problems in Samsung NX200 JPEG maker notes May 12, 2012 - Version 8.92 - Added read support for PCD (Kodak Photo CD Image Pac) files - Added Geotag support for Winplus Beacon text-format GPS log files - Added support for Leica X2 MakeNotes - Added NewGUID tag - Decode Panasonic ManometerPressure tag (thanks Christoph Mitterer) - Decode more Sony tags (thanks Jos Roost) - Changed a few Canon-mount Tokina lens model names for consistency May 5, 2012 - Version 8.91 - Added -progress option - Added support for XMP fpv namespace - Added a new Canon EasyMode value and fixed an incorrect one - Added a couple of new Canon LensTypes - Decode a number of new tags for the Canon 1DX and 5DmkIII - Improved the names of a few Sony tags (thanks Jos Roost) - Fixed -sep option to apply to interpolated tag values in a string when copying Apr. 28, 2012 - Version 8.90 (production release) - Added ability to fix double-UTF-encoded embedded XMP - Added a warning for invalid XMP - Added a new Minolta/Sony LensType (thanks Matthias) - Added a new values for some Canon tags - Decode ColorBalance information for a few more Nikon models - Ignore trailing whitespace when writing converted values - Enhanced the -z option to avoid writing the 2424 bytes of padding in XMP - Improved decoding of some Sony MakerNotes tags (thanks Jos Roost) - Improved "best guess" for fixing corrupted makernote offsets of some Sony models Apr. 21, 2012 - Version 8.89 - Added new Nikon and Ricoh LensID's - Added a new Olympus CameraType - Added new Canon LensType, EasyMode and CanonModelID values - Added new Pentax PictureMode and PentaxModelID values - Added support for IDimager XMP tags - Added a number of new XMP-crs tags used by LR4 - Decode a few more QuickTime tags - More improvements decoding Minolta/Sony CameraSettings (thanks Jos Roost) - Enhanced -ext option to allow files with any extension to be processed - Increased maximum number of SubIFD's to accommodate some DNG 1.4 images - Lowered priority of JPEG APP12 PictureInfo tags when reading - Created mechanism to allow self-referential XMP structures Apr. 15, 2012 - Version 8.88 - Added a new Canon LensType (thanks Gerald Erdmann) - Decode a number of new Olympus tags and values - Decode a few more QuickTime tags - Many more improvements and additions to Sony decoding (thanks Jos Roost) - Changed Ricoh InternalSerialNumber to also convert numerical value - Removed the ability to create IFD1 in TIFF-format images (you shouldn't really do this anyway) - Fixed incorrect IFD number in some error messages when writing Apr. 9, 2012 - Version 8.87 - Added a new PentaxModelID - Added new values for some Panasonic tags - Added a couple of new Canon LensTypes - Decode a few more Sony tags and values (thanks Jos Roost) - Decode more CanonVRD tags - Decode makernotes from Pentax WG-2 GPS MOV videos - Changed Panasonic AdvancedSceneMode to a Composite tag - Fixed problem introduced in 8.70 where excluding groups from deletion didn't work when copying back tags in the same command - Fixed problem repairing incorrect makernotes offsets in JPEG images from Sony SLT and NEX cameras Apr. 3, 2012 - Version 8.86 - Added a few new values for some Panasonic tags - Added a new CanonModelID and a new Canon LensType - Added a new Nikon LensID - Decode more Sony CameraSettings3 information (thanks Jos Roost) - Decode another Canon 5D tag - Decode some new CanonVRD DLO tags - Changed decoding of CanonVRD VRDVersion tag - Changed formatting of a Pentax LensType for consistency with other lenses - Patched decoding of Reconyx:DateTimeOriginal to accomodate values written with an incorrect byte order by some models Mar. 25, 2012 - Version 8.85 (production release) - Added a couple more Olympus CameraType values - Added two new Pentax LensType's and a PentaxModelID - Decode a number of new Sony CameraSettings3 tags (thanks Jos Roost) - Decode a few new Pentax K-01 tags - Decode new custom functions of the Canon 5D Mark III - Recognize another non-standard APP1 XMP header - Increased unrolled depth of XMP-mwg-kw:HierarchicalKeywords from 4 to 6 - Extended "-charset exif=CHARSET" to also apply to EXIF UserComment when stored as ASCII - Changed name of Olympus MaxApertureAtCurrentFocal to to MaxAperture - Patched to avoid possibility of unnecessary "references previous directory" warning when the length of one directory is zero Mar. 17, 2012 - Version 8.84 - Added a few more SonyModelID's (thanks Jos Roost) - Added a new CanonModelID and a number of new Canon LensType values - Added a new Minolta/Sony LensType - Decode CameraTemperature for a number of new Canon PowerShot models - Decode information from PANA atom of Panasonic DMC-FT20 MP4 videos - Decode a bit more of the Casio MakerNotes - Improved Polish translations for EXIF information (thanks Kacper Perschke) - Changed some warning messages for invalid IFD entries - Patched to allow writing of Sony MakerNotes containing invalid IFD entries Mar. 13, 2012 - Version 8.83 - Added a new SonyModelID and a new Nikon LensID (thanks Gregg Lee and Jos Roost) - Added Finnish translations (thanks Jens Duttke and Jarkko Makineva) - Fixed the Composite:LensID problem properly this time (with any luck) Mar. 13, 2012 - Version 8.82 - Added ability to extract information from PostScript-type DFONT files - Added a new Minolta/Sony LensType (thanks Jos Roost) - Improved geotagging of orientation information when extrapolating past end of track - Changed behaviour while copying information to allow flattened tags to be specified without the need to use the --struct option - Removed unnecessary warning when writing PreviewImage to Ricoh DNG file - Fixed problem introduced in 8.81 which prevented generation of the Composite LensID for Nikon images when duplicate tags were disabled - API Changes: - Added NoFlat option to SetNewValues() - Changed Struct option to allow copying of both structured and flattened tags at the same time Mar. 9, 2012 - Version 8.81 - Added some new Canon, Pentax and Sony/Minolta LensType's - Added a few new FujiFilm PictureMode values (thanks Kai Lappalainen) - Added some new FujiFilm FilmMode values - Added a couple of new CanonModelID values - Added local timezone message to -v2 geotagging output - Made all Pentax LensType tags writable - Improved Composite LensID logic to use Sony LensSpec value if available - Fixed problem opening files with path names that begin with "&" Feb. 25, 2012 - Version 8.80 - Added a new Olympus CameraType - Improved geotagging to tolerate out-of-sequence and missing NMEA sentences - Increased the maximum XMP tag ID length to 250 characters to allow very deep user-defined structure hierarchies Feb. 20, 2012 - Version 8.79 - Avoid deleting the JPEG APP14 Adobe segment when deleting all metadata - Added ability to read/write/create JPEG APP14 Adobe segment as a block - Added some new CanonModelID values - Added another Panasonic WhiteBalance value (thanks PeterK) - Decode Panasonic ColorTempKelvin tag - Decode information from Qualcomm APP7 JPEG segment - Extract PreviewImage for a few more uncommon camera models - Strengthened MP3 file recognition to avoid mis-identification of some files - Fixed problems reading "sfnt" resource in some DFONT files - Fixed problems writing some LensType values for 3rd-party lenses Feb. 11, 2012 - Version 8.78 - Added basic read support for a few obscure audio formats (LA, OFR, PAC, WV) - Added a couple more Canon LensType values - Decode some new Kodak tags in MP4 videos - Patched timezone problem on MirBSD due to leap-second "feature" of this OS - Fixed problem converting Adobe XMP LensID's for Pentax lenses - Fixed runtime warning due to conflict with some Vorbis tag ID's - Fixed problem which could result in duplicate columns in -csv output when used with -f and the "#" suffix on a tag name - API Changes: - Added XMPAutoConv option Jan. 27, 2012 - Version 8.77 (production release) - Added some new and updated some existing Sony/Minolta LensType values - Added two missing Minolta Teleconverter values - Added a new Canon LensType - Decode Olympus ArtFilterEffect - Enhanced -c (CoordFormat) option to allow signed coordinate output - Changed -sort option to always sort -json and -X outputs by tag name - Minor change to an Olympus LensType name (thanks Niels Kristian Bech Jensen) - Fixed problem geotagging orientation information from PTNTHPR sentence - Fixed decoding of negative Pentax EffectiveLV values - Fixed typo in an Olympus LensType Jan. 18, 2012 - Version 8.76 - Added -sort option to sort output by tag name or description - Added support for FujiFilm RAF version 1.03 images and downgraded RAF version error to a warning - Added a number of new Minolta/Sony LensType's - Added a new CanonModelID - Decode FocusPosition for Sony A850 and calculate Composite FocusDistance - Decode IFD found in some Samsung Type1 maker notes - Patched Olympus test to fix failure on some platforms - Patched -json output to filter out invalid UTF-8 characters - API Changes: - Added Sort2 option and 'Descr' setting for Sort option - Added secondary sort option to GetFoundTags() and GetTagList() - Changed name of Sort 'Alpha' setting to 'Tag' (but 'Alpha' still works for backward compatibility) Jan. 8, 2012 - Version 8.75 (production release) - Added -php output option (thanks Marcel) - Decode another AIFF tag and handle character encoding in AIFF text values - Recognize PHP files - Enhanced Geotag feature to write speed/track from NMEA GPRMC sentence, and orientation information from Honeywell NMEA PTNTHPR sentence - Changed verbose XMP output to print raw values - Lowered default priority of "avoided" tags so they don't override other same-named tags when reading with duplicate tags disabled - Patched tests to ignore MirBSD leap-second unconformity - Patched ZIP module to avoid failed tests with Perl 5.6.2 on GNU/Linux 2.6 - Fixed problem reading xref table of some PDF files created by PScript5.dll - Fixed problem reading RicohSubdir from AVI videos of the GR Digital 4 Dec. 28, 2011 - Version 8.74 - Added read/write support for Hasselblad FFF images - Added iptcCore.args convenience file to the distribution package - Catch CONT signal to allow calling applications to trigger an immediate response (avoiding a delay of up to 0.01 sec) after writing arguments to a -stay_open ARGFILE - Protect against some infinite loops that could be created when using some of the advanced exiftool options - Improved decoding of Samsung PictureWizard (thanks Pascal de Bruijn) - Improved handling of bad IFD entries in -htmlDump output - Changed print conversion of EXIF:FNumber and XMP:FNumber to use 2 decimal digits for values less than 1.0, and disable conversion for invalid values - Tightened up the -stay_open feature to fix a few potential problems - Fixed bug using -csv+= or -json+= for non-list-type tags - Fixed problem deleting unknown makernotes as a block - API Changes: - Enhanced SetNewValue() AddValue option to allow this option to be ignored for non-list tags Dec. 16, 2011 - Version 8.73 - Added read support for OpenEXR and Radiance RGBE images - Added a couple of new Nikon LensID's (thanks Robert Rottmerhusen) - Added a new PentaxModelID - Added a new Olympus CameraType - Created new FileSequence tag for use in batch processing - Decode maker notes from Pentax Optio RZ18 AVI videos - Tolerate unrecognized IPTC records (but still issue warning) - Changed ScaleFactor35efl calculation to also use Pentax SensorSize - Minor changes to two Samsung lens names (thanks Pascal de Bruijn) Dec. 8, 2011 - Version 8.72 - Added support for reading XMP from INX files - Added PDF HasXFA tag - Added a new XMP Colorants field (not in 2010 XMP specification) - Decode Casio BestShotMode for yet more cameras - Decode a few more Casio ImageStabilization values - Decode a few more Olympus tags and added conversion for CameraType - Protect against reading insanely large XMP (> 300 MB) in INDD files - Extract large (> 64 kB) unknown XMP tags as binary data - Reduced memory requirements for XMP processing (by 1/10) - Fixed another place where empty XMP structures could hide (in lists) Nov. 19, 2011 - Version 8.71 - Added two new Olympus LensType values (thanks Martin Hilbers) - Avoid recreating duplicate groups when deleting whole groups and adding back tags in the same step - Fixed problem where the QuickTime -charset option didn't work for some tags - Fixed bug introduced in 8.69 which could cause excessive memory usage when reading QuickTime videos with the -u option - Fixed problem where existing empty XMP structure couldn't be deleted or overwritten as a structured tag Nov. 15, 2011 - Version 8.70 - Compatibility Notice: Changed order of operations when batch processing with -tagsFromFile option to be consistent with non-batch mode - Added -listItem option - Added read support for IDML files - Added a new Canon LensType (thanks Jon Charnas) - Added a couple of new Samsung LensType's (thanks Tae-Sun Park) - Added support for another DigiKam XMP tag - Decode a couple more ID3 tags - Decode Casio BestShotMode for more cameras - Improved decoding of Casio AFMode - Extract unknown FLAC blocks as binary data - Changed ITC:ImageType to make "numerical" value more friendly - Changed priority of two unreliable Samsung tags - Fixed bug where ExifTool could produce improperly formatted XMP when writing structure elements to a previously empty XMP structure (the empty XMP structure was not being properly deleted). Affected XMP may be repaired by re-writing any element of the structure with this version of ExifTool - API Changes: - Added ProtectSaved option to SetNewValue() and return save count from SaveNewValues() Nov. 9, 2011 - Version 8.69 - IMPORTANT: Fixed bug which could corrupt GIF images when writing a Comment to a GIF image containing XMP metadata - Added ability to read/write ICC_Profile in GIF images - Added ability to specify internal encoding of EXIF "ASCII" strings and QuickTime strings - Added a new DigiKam XMP tag - Documented -echo option (has been an undocumented feature since 6.86) - Decode a number of new Sony tags - Decode a few new Pentax tags and added a few new values - Decode a few new QuickTime and ID3 tags - Decode Casio BestShotMode for a number of models - Improved validity checking of ICC_Profile segments in JPEG image - Tolerate UTF-8 byte order mark (BOM) in input CSV and JSON files - No longer trim trailing spaces from arguments in -@ argfiles - Upgraded Windows executable version to use PAR 1.002 - Changed priority of the Sony DynamicRangeOptimizer tags - Changed MWG feature to use UTF8 encoding for EXIF strings by default - Changed the -b option to avoid loading large binary values for tags that have been excluded with the -x option or --TAG - Changed Canon AFMicroAdjActive to AFMicroAdjMode and improved decoding - Fixed problem where the PreviewImage could be lost when writing to images from some newer Sony cameras - Fixed problem reporting duplicate information when -if used with -TAG# - Fixed incorrectly written XMP-tiff:YCbCrSubSampling tag - Fixed problem opening files with names beginning and/or ending with some characters such as SPACE, '>', '<' and '|'; however file names ending with '|' are still not allowed - API Changes: - Added CharsetEXIF and CharsetQuickTime options Oct. 21, 2011 - Version 8.68 - Added a new CanonModelID and a new SonyModelID - Added new Canon and Pentax LensType's - Decode more makernote information from Nikon MOV videos - Improved decoding of Sony LensSpec and enabled writing of this tag - Overhauled Minolta/Sony LensType list for consistency with official Sony lens names and removed a couple of anomalous entries (thanks Jos Roost) - Fixed problem with negative temperatures in Reconyx makernotes - Fixed bug which could cause runtime warnings when -f used with -X and -l - Fixed some minor problems when using -X with MWG option - Fixed issue where some missing tags could be printed when -f option was used in combination with wildcard tag names Oct. 13, 2011 - Version 8.67 - Added a new Canon LensType (thanks Norbert Wasser) - Decode tags from FujiIFD in HS10 and X100 RAF images - Decode LocationInfo tags from Nikon maker notes - Decode GPS tags from Nikon MOV videos - Decode information from Microsoft "Xtra" atom in QuickTime files - Decode Sony LensSpec information (thanks Jos Roost) - Use more specific MakerNotes names in warning messages and verbose output - Updated Canon CustomFunctions for the EOS 600D and 1100D - Improved handling of some corrupted RIFF files - Improved decoding of Samsung manual lens types (thanks Pascal de Bruijn) - Changed "No writable tags found" warning to "No writable tags set from" - Fixed problem handling resource forks in newer versions of OS X - Fixed problem writing XMP as a block to Jpeg2000 images - Fixed problem which could cause XMP and IPTC to be ignored when using MWG feature with TIFF images and performing multiple operations in a single command Oct. 3, 2011 - Version 8.66 - Added the ability to use "$GROUP:all" in -if and -p expressions (evaluates to "1" if any tag exists in the specified group, or "0" otherwise) - Added a new Sony/Minolta LensType (thanks Florian Knorn) - Added list of recommended modules to Perl installation - Decode ColorBalance information for a few new Nikon models - Updated Canon CustomFunctions for the EOS 600D and 1100D - Fixed problem writing "now" to MWG date/time tags Sept. 24, 2011 - Version 8.65 (production release) - Added a few new CanonModelID's - Added a new Sony/Minolta LensType - Added a new Canon LensType (thanks Klaus Reinfeld) - Added a number of new Olympus ArtFilter/MagicFilter values - Included new .args files in distribution: exif2iptc.args and iptc2exif.args - Enhanced writing of date/time tags to recognize "now" for the current time - Improved decoding of H264 Gain - Minor improvement to -htmlDump for some invalid IFD entries - Allow PostScript date/time tags to be written without the -n option - Allow NikonCapture:ExposureAdj2 to be written without the -n option - Fixed problem introduced in version 8.62 where DateTimeOriginal in IFD0 of NEF images was no longer updated when shifting times - Fixed problem where keywords could be duplicated when exporting to XMP while using the MWG module - Fixed problem reading PDF images with extra whitespace before xref table - Fixed format problem in CSV output for filenames containing a comma or quote - Fixed problem reading concatenated AVI videos Sept. 10, 2011 - Version 8.64 - Added 2 new ACDSee XMP tags (thanks Hannes Leubbers) - Added a new Sony FileFormat value - Added a new CanonModelID - Added a few new Pentax DigitalFilter and ImageTone values - Enhanced -execute option to allow a command ID number to be added - Enhanced -csv and -json import features to also key on canonical SourceFile path (requires Cwd module) - Improved Composite LensID logic for some Sony cameras - Fixed misleading error message when using -if option on file that doesn't exist - Fixed problems decoding a number of inconsistent tags in the Sigma SD1 maker notes Aug. 27, 2011 - Version 8.63 - Added support for a number of new Open Document file extensions - Added a few new CanonModelID and SonyModelID values - Added a new Ricoh GXR LensID - Added a new Sony/Minolta LensType (thanks Mladen Sever) - Added patch to read the improperly formatted DateTimeOriginal in AVI videos written by the Kodak Easyshare Sport camera - API Changes: - Added QuickTimeUTC option Aug. 21, 2011 - Version 8.62 - "JPEG2000 Update" - Added read support for JPEG2000 codestream format (J2C) - Added a few new Nikon LensID's (thanks Robert Rottmerhusen) - Added a few new Pentax LensType's - Added a few new Sony/Minolta LensType's (thanks Wolfram for 2 of these) - Added two new Sony Teleconverter values (thanks Wolfram) - Decode a few more JPEG2000 UUID's written by Adobe JPEG2000 plugin - Decode additional JPEG2000 ColorSpecification information - Recognize a few more JPEG2000 file extensions - Updated some CanonModelID's - Tolerate extra comma at end of line in imported -csv files - Changed name of Kodak Type9 SerialNumber tag to UnknownNumber - Fixed bug which in rare situations could result in an erroneous "IFD pointer references previous IFD" warning - Fixed another memory leak when writing and removed circular references from ExifTool object to prevent future bugs like this - Fixed problem in Windows where values in the -X (XML) output containing CR+LF were converted to CR+CR+LF - Fixed superfluous warning which could occur when using += to decrement a numerical tag - Fixed an incorrectly spelt Pentax city name (thanks John Francis) July 16, 2011 - Version 8.61 - Added the ability to increment/decrement tags with numerical values using += - Added support for Extensis Portfolio XMP tags plus a number of non-standard and/or undocumented XMP-xmp and XMP-xmpMM tags - Added read support for Microsoft Compiled HTML (CHM) format - Added read support for Ogg Video (OGV) files - Added new LensType values for Pentax (thanks Heike Herrmann), Sony/Minolta (thanks Fabio Suprani and Florian Knorn), Nikon (thanks Jens Kriese), Olympus and Sigma cameras - Added a new QuickTime VendorID - Recognize DEX (Dalvik Executable) files - Identify Windows 64-bit EXE/DLL files and relax EXE validation - Validate date/time values when reading NMEA GPS log files - Changed decoding of CFAPattern to return a string of numbers with -n option - Extract all unknown makernote blocks as undef, regardless of actual format - Improved print conversion of Pentax ShakeReduction - Fixed problem processing some Ogg files with multiple streams - Fixed incorrect namespace URI for stArea (used by MWG 2.0 regions) - Fixed problem with spaces in -geotag path when using wildcards - Fixed problem writing PDF:Keywords list items individually if they contain special characters - API Changes: - Enhanced SetNewValue() to allow increment/decrement of numerical tags June 25, 2011 - Version 8.60 (production release) - Added Composite Flash tag to facilitate copying of flash information between XMP and EXIF - Added new Pentax and Canon LensType values and fixed a Pentax lens name - Added a few new Leica LensType's (thanks Olaf Ulrich) - Added a new PentaxModelID - Enhanced GPSDateStamp conversion to tolerate null separators (Casio EX-H20G) - Made DNG LinearizationCurve and Nikon ContrastCurve writable but protected - Renamed Nikon LinearizationTable to NEFLinearizationTable and made writable but protected - Removed Leica M8 FrameSelector tag since it seems to have evolved into an extension of the LensType tag for newer lenses - Fixed problem with order of operations when using multiple -if options June 11, 2011 - Version 8.59 - Added new Composite:LensID derived from XMP-aux:LensID - Added new PentaxModelID and CanonModelID values - Added a new Pentax LensType (thanks Artur) - Decode maker notes in Pentax Optio S1 AVI videos - Extract PreviewWMF from DOCX files - Recognize WMF images - Fixed decoding of CanonVRD WBAdjRGBLevels and renamed to WBAdjRGGBLevels June 2, 2011 - Version 8.58 - Decode a number of CameraInfo tags for the Canon EOS 600D and 1100D - Improved speed by a factor of 2 when reading M2TS videos - Fixed memory leak with -stay_open feature when writing May 26, 2011 - Version 8.57 - Added a couple of new Canon LensType values - Added a few new Nikon LensID's (thanks Robert Rottmerhusen) - Added format string to -v2 output for IPTC tags - Added extra logic to avoid misidentifying unknown IFD-style maker notes - Decode custom settings for Nikon D700 and D7000 - Fixed problem recognizing NikonCaptureData for ViewNX version 2.1.1 Apr. 16, 2011 - Version 8.56 - Added a new Canon LensType (thanks Rodolfo Borges) - Decode EXIF information in FujiFilm HS20EXR MOV videos - Decode NikonCaptureEditVersions when ExtractEmbedded option is used (previously called NikonCaptureHistory) - Decode another Samsung tag (thanks Tae-Sun Park) - Recognize CaptureOne ".newer" COS files - Reverted JSON output to pre-8.51 behaviour by removing '#' suffix from tag names when print conversion is disabled on a per-tag basis - Fixed bug introduced in 8.32 interpreting some expressions when copying tags Apr. 11, 2011 - Version 8.55 - Added write support for FujiFilm RAF version 0716 images - Added support for a number of new LR3 XMP tags (thanks Wolfgang Guelcker) - Decode some more Samsung tags (thanks Tae-Sun Park) - Improved handling of incorrectly formatted XMP - Recognize a few alternate PS and EPS file extensions (thanks Jeff Harmon) - Reverted a few Pentax macro lens names (less consistent, but at least they match the official Pentax names) - Fixed problem reading some XMP custom properties - Fixed minor problem in HtmlDump output for Canon MakerNotes footer Apr. 2, 2011 - Version 8.54 - Added a number of new values for various tags - Added a new Nikon LensID - Decode a number of encrypted Samsung SRW tags (thanks Tae-Sun Park) - Enhanced -s option so allow a number to be specified - Fixed problem reading some Casio EX-Z35 MakerNote values Mar. 27, 2011 - Version 8.53 - Added a new Olympus LensType - Added a new Nikon LensID - Added a new PentaxModelID value - Decode new Pentax MakerNotes format of Optio WG-1 GPS - Decode Casio, Ricoh and Sanyo face detection information (thanks Jeffrey Friedl and Emilio for samples) - Decode FujiFilm face recognition information (thanks Jeffrey Friedl) - Decode a new FujiFilm tag for GE models - Allow writing GPSLatitudeRef/GPSLongitudeRef with a signed number - Return proper FileType for M4P audio files - Combined Canon FaceDetectFrameWidth/FaceDetectFrameHeight tags into FaceDetectFrameSize for consistency with other makes - API Changes: - Fixed problem when specifying family 1 group in call to SetNewValue() when tags were previously extracted with ExtractInfo() Mar. 20, 2011 - Version 8.52 - Added -listr option and mechanism to recognize some unsupported file types - Added read support for VSD (Microsoft Visio Drawing) files - Added a new Pentax LensType and improved consistency of macro lens names - Added another CanonModelID - Calculate Duration for M2TS (AVCHD) videos - Decode a new FujiFilm tag - Recognize .TS extension - Recognize FotoStation IPTC record 240 - Attempt to better identify FPX-format MSOffice documents with incorrect file extensions - Fixed bug applying time shift to Nikon PowerUpTime - API Changes: - Enhanced GetNewValues() to allow group name to be specified - Allow description flag to be set to '0' when calling GetFileType() to return types of recognized-yet-unsupported files Mar. 12, 2011 - Version 8.51 - Added -csv option for import/export of CSV database files - Added ability to import JSON files - Added read support for APP1 "Ocad" segment - Added a new Nikon LensID (thanks Robert Rottmerhusen) - Decode more Reconyx MakerNotes tags (thanks Robert Hass of Reconyx!) - Report the number of encryption bits in the PDF:Encryption tag value - Allow empty group name when specifying a tag - Improved decoding of Olympus ArtFilter and MagicFilter tags - Improved exception handling to continue with next -execute command after aborting a command due to a serious error - Fixed problem reading indexed PGF images Mar. 1, 2011 - Version 8.50 (production release) - Added Composite tags to convert QuickTime GPS information - Added a couple new Sony PMP Orientation values (thanks Mike Battilana) - Added a couple of new Nikon LensID's (thanks Rolando Ruzic) - Added a new Canon LensType (thanks Gerald Kapounek) - Decode new Nikon, Olympus, Pentax and Sony face detection tags (thanks Jeffrey Friedl) - Decode Ricoh FirmwareRevision tags - Allow GPSLatitudeRef and GPSLongitudeRef to be written with a GPS coordinate containing a N/S/E/W designator - Removed Canon20D shortcut and changed Canon shortcut - Removed LEGRIA/VIXIA/iVIS from CanonModelID names - Renumbered Canon FacePosition tags to start at Face1Position Feb. 12, 2011 - Version 8.49 - Added a number of new values for various Canon tags - Added a new Pentax LensType - Added ability to write Nikon PowerUpTime tag - Added a number of MachO CPUSubtype's and improved handling of 64-bit flag - Decode ColorData for the Canon EOS 600D and 1100D - Decode a few new Sony tags - Set document number for FlashPix tags extracted from embedded documents - Attempted to patch OS X 10.6 quirk where FileModifyDate may not be preserved for some files when -P is combined with -overwrite_original_in_place Feb. 3, 2011 - Version 8.48 - Added a new Canon LensType value - Changed order of stored information when rewriting existing IPTC tags (to make the order of items in list-type tags consistent with XMP when deleting and adding back values in the same command) - Fixed problems with format of binary data in lists for some output options Jan. 29, 2011 - Version 8.47 - Added -args option - Added read support for PGF (Progressive Graphics File) images - Added write support for Phase One IIQ images - Added ability to write XMP-xmpMM:Pantry - Added print conversions for a number of closed-choice XMP properties - Added some new CanonModelID's - Included new argument files in distribution: pdf2xmp.args and xmp2pdf.args - Avoid copying TIFF trailers containing nothing but zeros when rewriting - Handle binary data in serialized structure output - Moved BMP tags to the File group - Fixed bug reading/writing some IPTC binary data tags - Fixed problem copying XMP:Thumbnails structure - Fixed conversion of MXF:ByteOrder value - Fixed potential "Undefined subroutine ConvertStruct" crash bug - API Changes: - Fixed bug introduced in 8.46 when calling GetValue(xxx,'Raw') Jan. 22, 2011 - Version 8.46 - Simpified definition of user-defined XMP structures: flattened tags are now automatically generated, and UserDefined::xmpStruct is no longer needed (but backward compatibility is maintained with the old-style definitions) - Added ability to handle multi-dimensional arrays in structured output - Added a new Canon LensType (thanks Jean-Michel Dubois) - Added some new XMP-xmpMM tags - Enabled writing of a number of XMP-crs tags - Decode Reconyx TriggerMode tag - Relaxed structure validation to allow a structure to be written even if there were errors with some fields - Patched problem with formatting of very large numbers in JSON (-j) output - Fixed a few problems reading and writing structured information - Fixed bug which could cause hang with some user-defined tag definitions Jan. 12, 2011 - Version 8.45 - Fixed a couple of minor bugs with the new -struct option Jan. 12, 2011 - Version 8.44 - "Structured XMP" - Added ability to specify XMP structures when writing (yet another Christmas vacation spent adding a significant new feature to ExifTool) - Added support for new XMP tags in the MWG 2.0 specification - Added read support for DV video files - Added support for Reconyx maker notes - Added option to overwrite existing text output files (-w!) - Added ability to ignore symbolic directory links with "-i SYMLINKS" - Added support for Sony Ericsson XMP cell phone location tags - Added a few new CanonModelID's - Added a new Minolta/Sony LensType (thanks Jean-Michel Dubois) - Added a new Olympus LensType - Added print conversion for all Bitrate tags - Decode a couple new RIFF tags - Decode CameraTemperature for a few new Canon PowerShot models - Improved -struct option to work with all text output formats - Changed behaviour of XMP lang-alt lists to conform to the July 2010 specification (x-default item is no longer mandatory) - Renamed AudioSampleBits tags to AudioBitsPerSample - Renamed XMP-crs:Temperature tag to ColorTemperature - Minor change to behaviour when replacing values in XMP lists: new list items are now all inserted in place of the first deleted item (previously new items were inserted one-by-one into the holes left by deleted items) - Fixed bug writing alternate languages for XMP-iptcExt:ArtworkTitle tag - Fixed problem where console echo was disabled when using -k option from a bash script - Attempted to patch problem of -b option affecting newline sequence for subsequent -execute commands in Windows - API Changes: - SetNewValue() now accepts structured values (as HASH references or serialized strings) - Struct option now has 3 settings (undef, 0 and 1) Dec. 21, 2010 - Version 8.43 - Added read support for MXF (Material Exchange Format) files - Added support for GE (General Imaging) maker notes - Added a couple of new Pentax LensType's - Added a couple of new CanonModelID's - Added a few more values to Casio UnknownMode - Recognize 3GPP and 3GP2 file extensions - Improved handling of character encoding errors - Changed Duration format to always include hours for times > 1 minute - Fixed minor quirk in HtmlDump output - Fixed race condition with -stay_open when reading options requiring additional arguments from the argfile Dec. 11, 2010 - Version 8.42 - Added a couple more Samsung LensType values - Added a few new Canon EasyMode values and a Canon LensType value - Added a new PentaxModelID - Decode some new H264 tags (thanks Dave Nicholson) - Decode JUNK chunk in Pentax RS1000 AVI videos - Flush console output before "{ready}" message when using -stay_open - Improved decoding of some Canon and Pentax tags (thanks Dave Nicholson) - Fixed problem copying makernotes from Nikon NRW image to JPEG - Fixed incorrect decoding of some AEInfo tags for newer Pentax DSLR's Dec. 3, 2010 - Version 8.41 - Added a new PentaxModelID - Added a few new values for some Canon tags - Added some non-standard values to a few XMP-exif tags - Decode a new Ricoh tag and added a LensID - Decode more Pentax K-5 tags and values - Improved decoding of Battery tags for various Pentax DSLR models - Fixed bug where time could be wrong by up to 2 seconds when shifting multiple date/time values containing fractional seconds Nov. 21, 2010 - Version 8.40 (production release) - Added -restore_original and -delete_original options - Added new Canon, Pentax and Sony LensType values - Decode more Pentax K-5 tags - Decode a number of new tags in Nikon D7000 MOV videos - Decode FocusDistance tags for the Canon EOS 60D - Decode a few new Panasonic tags - Decode a few maker note tags from Flip Video MP4 files - Extract PDF PageMode and PageLayout tags - Changed family 2 group names for a number of PDF tags - Changed Canon LensType strings for a few lenses with updated models - Patched problem reading GPX files which contain no newlines Nov. 12, 2010 - Version 8.39 - Added read support for RAR archive files - Added warning for non-standard XMP APP1 header in JPEG images - Added a new Canon LensType (thanks Rolando Ruzic) - Decode more Olympus WAV tags - Decode a few more PDF document property tags - Decode a new Canon tag - Extract firmware revision letter with Nikon FirmwareVersion - Improved decoding of some Pentax tags - Changed names of a couple of Pentax tags - Changed name of ASF:FileSize to FileLength to avoid conflict - Fixed problem creating output files on network drives in Windows - Fixed bug where MWG module wasn't loaded automatically when -execute was used Nov. 7, 2010 - Version 8.38 - Added support for Nikon D3 firmware 2.02 - Decode many new Pentax K-5 tags and improved decoding of others - Decode a few more Nikon D3 and D3S settings (thanks Warren Hatch) - Decode some new Olympus WAV tags (thanks Tomasz Kawecki) - Decode a few new Canon DPP 3.9.2 tags - Decode PDF digital signature permission information - Improved recognition of Adobe Illustrator PS-format AI files - Disable writing XMP to Adobe Illustrator version 8 and older EPS files Oct. 31, 2010 - Version 8.37 - Added ability to switch ARGFILE while -stay_open is active - Fixed a couple of bugs with the new -stay_open option - Fixed problem with -E option that caused double-escaping of Composite tags Oct. 30, 2010 - Version 8.36 - Added ability to read/write metadata in Sigma X3F images containing a JpgFromRaw (eg. all Sigma models except the SD9 and SD10) - Added -stay_open option to avoid startup delay when called from other applications - Added a new Pentax LensType (thanks Hubert Meier) - Decode a couple of new tags written by Sigma Photo Pro - Changed family 0 group name for SonyIDC tags to "MakerNotes" - Improved Composite:LensID to use LensModel if available when LensType is "Unknown" - Fixed problem extracting ThumbnailImage from some FujiFilm RAF images - Fixed problem calculating Red/BlueBalance for some newer Nikon models Oct. 23, 2010 - Version 8.35 - "PDF Encryption" - Added support for PDF AES-128 and AES-256 encryption (requires Digest::SHA for AES-256 support) - Added -password option for processing password-protected PDF documents - Added write support for a couple more FujiFilm RAF versions - Added a number of new Olympus SceneMode values - Added a few new SonyModelID's - Added a new Nikon LensID (thanks marten) - Added a Canon LensType and fixed an incorrect one (thanks Andreas Huggel) - Decode a number of new Canon tags - Decode a few new Nikon D3S settings (thanks Warren Hatch) - Extract PDF UserAccess - Extract Olympus ZoomedPreviewImage - Updated decoding of Olympus AFPoint for recent E-models - Avoid writing mandatory IPTC tags unless another IPTC tag actually changes (eg. trying to delete a non-existent IPTC tag will no longer have the side effect of generating mandatory IPTC tags) - Improved language translations - Improved error message when trying to write a file with the wrong extension - Renamed a couple of Olympus tags - Fixed problem reading/writing PDF tags from some encrypted stream objects - API Changes: - Added Password option Oct. 7, 2010 - Version 8.34 - Added read support for XCF and WebP images and WebM videos - Added a couple of new PentaxModelID's - Decode a number of new Canon 60D MakerNotes tags (thanks Bogdan for LensSerialNumber) - Decode FrameCount from MakerNotes in Nikon MOV videos - Decode Ambience and some video tags from Canon - Decode more Canon EOS 1D Mark IV CameraInfo tags - Updated decoding of Pentax HighISONoiseReduction for newer models - Changed description of Canon SerialNumber tags - Fixed problem with extra comma in JSON output when -w option was used Oct. 3, 2010 - Version 8.33 - Added ability to specify numerator and denominator of rational values - Decode more Canon custom picture style settings (thanks Tom Kawecki) - Decode Samsung MP4 "TAGS" information from WP10 videos - Decode thumbnail image and maker notes from Canon S95 MOV videos - Decode Microsoft Photo 1.1 EXIF and XMP information - Fixed problem copying tags dynamically from files with read errors - Fixed problem setting FileName with a Windows UNC path (leading "\\") Sept. 25, 2010 - Version 8.32 - Added the ability to use wildcards ('?' and '*') in tag names when extracting or copying information - Added a number of new CanonModelID's - Decode a few more QuickTime tags and improved decoding of others - Decode UserDefPictureStyle tags for more Canon cameras (thanks Tom Kawecki) - Extract unknown text-based maker notes under new MakerNoteUnknownText tag - Tested writing of PDF 1.7 files and removed warning for this version - Identify Canon MakerNote footer in HtmlDump of DNG images - Updated MimeType for PSD, AVI, AIFF plus a number of raw file formats - Changed FileType for Adobe Illustrator (AI) files - Fixed "Can't handle XMP attribute 'rdf:xmlns'" error when writing some XMP Sept. 17, 2010 - Version 8.31 - "CRW+XMP" - Added ability to read/write XMP inside CanonVRD, which finally provides a technique to write XMP in CRW images! (thanks Mike Kobzar for help testing) - Added a couple of new Canon LensType's and CanonModelID's - Added a number of new Nikon LensID's (thanks Robert Rottmerhusen) - Added a new Sony LensType (thanks Mladen Sever) - Treat 'eng' as a default language in ID3v2 information - Recognize AIT file extension (AI file) - Fixed problem where ExifTool could refuse to write PDF files containing XMP-pdf:PDFVersion information Sept. 11, 2010 - Version 8.30 - Added a couple of new Nikon LensID's (thanks Robert Rottmerhusen) - Added a couple more Sigma LensType values - Added a few more tag values for the new Sony SLT-A33, SLT-A55V and DSLR-A560 - Added a few more values for various Casio tags - Added a new Canon LensType (thanks Guido) - Decode Panasonic ContrastMode for the TZ10/ZS7 - Decode some Canon CameraInfo tags for the 60D - Updated Canon custom functions for the 60D - Updated Flash video to add some new values and decode some new tags - Updated QuickTime decoding for new track and movie header formats - Named a couple of unknown Canon tags - Made Nikon PictureControl and NikonCaptureOutput directories block writable - Fixed problem geotagging when any coordinate was exactly zero - Fixed typo in Canon AFAssistBeam converted value - Fixed problem displaying exiftool documentation on OS/2 (thanks Ilya Zakharevich) Aug. 22, 2010 - Version 8.29 - Added a few new CanonModelID's - Added verbose messages for "unsafe" and "protected" tags which are not copied - Decode CameraTemperature for a few new Canon models - Decode a few new Panasonic tags (thanks Zdenek Mihula) - Decode a number of new 3rd party RIFF tags - Recognize Casio-type maker notes in Concord cameras - Handle "CDATA" sections in XML/XMP - Fixed problem that could cause value to be added twice when writing MWG list-type tags without specifying a group - Fixed bug extracting altitude from GPX files containing "rtept" nodes which could result in an altitude being associated with the next GPS fix - Fixed problem deleting PreviewImage from MIE files Aug. 14, 2010 - Version 8.28 - Added ability to specify Photoshop encoding (-charset Photoshop=CHARSET) - Added support for maker notes of some Sony Ericsson phones - Improved conversion for SigmaRaw:FocalLengthIn35mmFormat (thanks Niels Kristian Bech Jensen) - Fixed bug in calculation of AvgBitrate for QuickTime videos (thanks Mats Peterson) - Improved error handling when reading Matroska files - Fixed -GROUP:geotag= to allow multiple geotag groups to be deleted separately July 31, 2010 - Version 8.27 - Added support for QuickTime localized languages and character encodings - Added support for alternate language ICC_Profile tags - Added a new XMP-swf tag - Added a new Sony LensType (thanks Mladen Sever) - Added ability to specify any group (not only family 0 and 1) for source tag when copying - Decode a number of new QuickTime tags - Decode MakerNoteKodak9 maker notes in a few non-Kodak cameras - Extract NikonCaptureHistory and drop when copying Nikon MakerNotes - Calculate AvgBitrate for QuickTime movies - Fixed names of a few recently added ICC_Profile tags (thanks Jeff Harmon) - Fixed bug calculating duration of AVI videos for which FrameCount is zero - Fixed tag ID for XMP-iptcExt:AdditionalModelInformation - Fixed decoding of ShiftJIS character set July 20, 2010 - Version 8.26 - Decode a number of new ICC_Profile tags added in approved revisions to the specification - Drop NikonCaptureData when copying Nikon MakerNotes (it may be too large for a JPEG APP1 segment when copying from an NEF image) - Made NikonCaptureData writable as a block and NikonCapture a deletable group - Minor addition to tooltip for HtmlDump of offset values - Fixed problem writing to an incorrectly-typed XMP list (patch for LR3 bug) - Fixed problem setting file ownership on OS/2 systems when writing (thanks Ilya Zakharevich) - Fixed incorrect ICC_Profile tag name (thanks Jeff Harmon) July 13, 2010 - Version 8.25 (production release) - Added CommonIFD0 shortcut tag to help when deleting metata from TIFF images - Added a new Pentax LensType and fixed an incorrect one - Added a new Panasonic ColorMode - Decode FLAC picture metadata - Changed ASF Preview tags to be consistent with ID3 and FLAC Picture tags - Patched problem with funny dash character in cut-n-paste from documentation on some systems (by allowing the funny dash in command-line arguments) - Fixed misleading warning message which could appear when writing MWG tags - Fixed typo in an ID3 tag name (thanks Mats Peterson) - Fixed an incorrect Sony lens name (thanks Stephen Bishop) - Fixed problem misidentifying some other RAW files as Epson ERF June 30, 2010 - Version 8.24 - Added ability to write some Kodak APP3 Meta tags - Added a few new Olympus LensType's and new values for a couple of other tags - Added support for yet another Kodak MakerNote variation (M580) - Added conversion for OOXML DocSecurity tag (thanks Jeff Harmon) - Added another Nikon ExternalFlashFlags value (thanks Warren Hatch) - Decode more Canon VRD tags (thanks Gert Kello) and changed some tag names - Decode a couple of new Canon 7D tags (thanks Vesa Kivisto) - Decode a few more Sigma tags - Decode HTML tags written by Microsoft Office - Decode some MakerNotes tags from Samsung MP4 videos - Allow RFC 8601 date/time values to be written without seconds - Fixed conversion for Kodak Meta:SerialNumber - Changed conversion of Canon FocusDistanceUpper/Lower tags to add units (m) - Changed the names of some Nikon FlashExposureComp tags - Changed name of RTF CharactersNoWhiteSpace tag to CharactersWithSpaces to conform with what Microsoft does with their software as opposed to what they say in their RTF specification - Changed a few FlashPix tags for better consistency with OOXML and RTF - Properly convert OOXML Unicode character entities - Fixed problem writing some Sigma MakerNote tags - Fixed problem writing incorrect value for "Uncalibrated" XMP:ColorSpace - Fixed bug where some unknown Canon values were extracted twice with -U June 20, 2010 - Version 8.23 - Added write support for FujiFilm RAF images from the HS10 and S100FS - Added read support for RTF files - Added read support for FPXR in JPEG APP4 as written by some HP cameras - Added ability to copy files of any type (now does a straight copy instead of processing the file if no new values are set for any "real" tag) - Added new values for CanonModelID, PentaxModelID and SonyModelID - Added a new Ricoh LensID - Added conversion for "Off" and "On" values when writing EXIF:Flash - Added a new Canon LensType and changed the name of one Sigma lens - Decode more Canon VRD tags and update to DPP 3.8 (thanks Gert Kello) - Decode FujiFilm AutoDynamicRange - Changed some DNG tags to make them writable (but "unsafe") June 9, 2010 - Version 8.22 - Implemented PNG alternate language tags and special character translations - Added print conversion for XMP-photoshop:ColorMode - Decode some new Pentax 645D tags/values and added more PentaxModelID's - Changed family 1 group names for Matroska Chapters - Changed frame rate conversions to round to 3 decimal points - Enable summary messages when -b is combined with -w - Assume local system timezone on specified date (instead of current local timezone) when writing an IPTC time tag with a date/time value which doesn't include a timezone - Fixed conversion of Matroska:ChapterTimeStart/End values - Fixed an incorrect Panasonic Lens name (thanks Michael Byczkowski) June 2, 2010 - Version 8.21 - Added read support for Matroska multimedia files (MKA, MKV and MKS) - Added a new PentaxModelID (Optio E80) - Decode some information from Casio EX-7000SX APP1 "QVCI", HP Photosmart R837 APP6 "TDHD" JPEG segments - Extract more Samsung and HP PreviewImages hidden in other JPEG APP segments - Extract unknown tags with numerical ID's by default when -v option is used - Updated default GPSVersionID to 2.3.0.0 when writing - Fixed bug geotagging from KML file (lat/long were swapped) May 26, 2010 - Version 8.20 - Added read support for Open Document files (ODP, ODS, ODT) - Added Composite:AudioBitrate tag for VBR MPEG audio - Added support for IPTC:CatalogSets written by iView MediaPro - Decode Olympus MagicFilter tag and add a two new SceneMode values - Decode a few new Sony tags written by NEX models - Decode a number of new Sony A100 tags (thanks Igal Milchtaich) - Decode some information from MPEG audio LAME header - Updated to Exif 2.3 specification (!!) - Allow date/time tags to be shifted by the values of other tags when using the -tagsFromFile feature - Fixed formatting of QuickTime:CreateDate as written by iPhone - Fixed problem conditionally replacing some blank EXIF tags and alternate language tags in XMP May 11, 2010 - Version 8.19 - Added ability to read/write Samsung PreviewImage trailer - Added two new PentaxModelID's (Optio H90 and W90) - Added a new Canon LensType - Added a new CanonModelID - Decode more Sony tags/values (thanks Michael Reitinger) - Decode more Leica M9 tags (thanks Michael Byczkowski and Carl Bretteville) - Updated to XMP April 2010 specification - Avoid extracting Sony DSLR-A100 tags which have "n/a" values - Improved German language translations (thanks Herbert Kauer) - Improved efficiency of Composite tag calculations - Made RSRC a deletable group - Tolerate extra white space at the start of an XMP file - Changed MWG logic to ignore blank EXIF tags - Changed a few print conversion strings to improve interoperability - Changed XMP namespace prefix 'prismusagerights' to 'pur' as per most recent PRISM specification - Patched memory problem in Windows when processing very large EPS files - Fixed a couple of incorrectly named Sony Panorama tags - Fixed bug which could prevent file from being updated when deleting mandatory tags and adding back tags in other locations Apr. 16, 2010 - Version 8.18 - Added read support for Sony DSC-F1 PMP images - Added a new Nikon LensID (thanks Jeffrey Friedl) - Decode a number of new Sony tags (thanks Michael Reitinger) - Decode a few more Leica M9 tags (thanks Michael Byczkowski) - Preserve original file permissions and ownership when writing - Made Canon DustRemovalData writable - Changed some Pentax WhiteBalance strings for consistency - Patched potential security problem when writing values - Fixed bug extracting unsynchronized ID3v2.4 information Apr. 9, 2010 - Version 8.17 - Added a new Sony ExposureMode (thanks Michael Reitinger) - Decode Casio DriveMode (thanks Robert Chi) - Decode CameraTemperature for more Canon EOS models (thanks Vesa Kivisto) - Updated to the DICOM 2009 specification (Note: Changed some DICOM tag names) - Improved conversions for XMP:LensInfo, EXIF:DNGLensInfo and Nikon:Lens - Changed case of some Canon DriveMode strings - Fixed divide-by-zero error when Geotagging from a track with only one point - Fixed incorrect ImageHeight reported for top-to-bottom BMP images - API Changes: - Fixed a problem passing options to Image::ExifTool::TagInfoXML::Write() Mar. 31, 2010 - Version 8.16 - Preserve Mac OS resource fork when writing (OS X only) - Added a number of new Nikon LensID's (thanks Robert Rottmerhusen) - Decode a couple more Mac OS resources - Decode Olympus LensModel tag (thanks Martin Hilbers) - Extract PrintIMVersion tag from PrintIM information - Separate extraction of Leica FrameSelector information from LensType tag - Recognize Bitstream PFA/PFB font files - Patched ActivePerl 5.10 bug which could cause Perl crash during Geotag tests - Fixed another Geotag test that fails due to round-off errors on some systems Mar. 18, 2010 - Version 8.15 (production release) - Added read support for Macintosh resource files: - Generate ResourceForkSize tag if data exists in a file's resource fork - Enhanced -ee option to process resource fork as a sub-document - Added a new PentaxModelID (Optio I-10) - Decode Panasonic DMC-ZS7 landmark tags - Fixed decoding of Pentax Optio 555 PictureMode and added a number of new values (thanks Ralf Medow) Mar. 16, 2010 - Version 8.14 - Added some new Canon AFMode values for the EOS 7D (thanks Dieter Steiner) and renamed tag to AFAreaMode - Decode ColorData and some new MOV tags for the production Canon EOS 550D - Decode Panasonic IntelligentResolution tag - Allow times with timezones in GPX track logs - Improved handling of maker notes in Olympus MP4 videos - Changed H264 GPS tags to the GPS group - Fixed date/time format error in reverse geotagging GPX example - Fixed problem introduced in version 8.09 where XMP:GPSLatitude/GPSLongitude require the -a option to be extracted - API Changes: - Fixed bug where some options (Charset, Escape, Exclude and Lang) weren't activated properly when set via options hash in calls to some functions - Fixed some potential problems when used with mod_perl Mar. 5, 2010 - Version 8.13 - Added read/write support for Samsung SRW images and decode some NX10 maker note tags (thanks Tae-Sun Park) - Added new values for some Sony tags (thanks Michael Reitinger) - Added a new Canon LensType - Decode maker notes in Nikon Coolpix S8000 MOV videos - Decode a number of obscure TIFF FX tags - Implemented list-type behaviour for MWG:Creator tag - More improvements to German translations (thanks Herbert Kauer) - Changed name of NikonPreview group to PreviewIFD - Fixed problem which prevented ThumbnailImage from being written to ARW, SR2 and PEF images Feb. 26, 2010 - Version 8.12 - Added a number of missing ProgramMode values for the Sony DSLR-A330 - Added XMP-iptcCore:DigitalSourceType (IPTC Extension version 1.1) - Added a couple more Nikon LensID's (thanks Jens Kriese and Robert Rottmerhusen) - Improved German language tag descriptions (thanks Herbert Kauer) - Improved identification of some RAW file types - Moved MPF PreviewImage into the Composite group - Fixed some problems in HtmlDump output - Fixed problem copying makernotes as a block into DNGAdobeData Feb. 20, 2010 - Version 8.11 - Added support for Leica S2 maker notes - Added a bunch of new CanonModelID's - Decode MacroMagnification for more Canon models (MP-E 65mm only) - Decode a number of Canon CameraInfo tags for the 1DmkIV and 550D - Updated CanonCustom tags for the 550D - Improved parsing of Canon OriginalDecisionData - Improved decoding of Canon CameraInfo LensType - Improved decoding of some Sigma tags - Recognize a number of new Paint Shop Pro file extensions - Prevent a directory from being recreated in the wrong location when deleting a group and adding back information in the same step - Changed -fileOrder option to sort numbers numerically - Fixed bug in -fileOrder option when directory names are specified - Fixed problem extracting information from some Panasonic AVCHD videos - Fixed some minor compatibility problems with Perl 5.11 - Fixed problem which could result in runtime error when using MWG feature - Fixed an inconsistency in the way duplicate tags were handled in the grouped JSON (-j -g) and short XML (-X -s) output formats Feb. 8, 2010 - Version 8.10 (production release) - Added read/write support for Photoshop PSB file format - Added -fileOrder option to provide control over file processing order - Added a few new Sony/Minolta LensTypes (thanks Marcin Krol) - Added more Nikon LensID's (thanks Robert Rottmerhusen) - Decode metadata from all frames in AVCHD H.264 video with -ee option - Decode more H.264 tags and improved decoding of others - Improved decoding of some Olympus E-P1 tags - Improved handling of some types of unknown maker notes - Enhanced -p option to support output file headers and footers, and to parse embedded documents as separate input files when combined with -ee - Relaxed validation of PFM files to accommodate incorrect device type string written by FontForge software - API Changes: - Enhanced GetFileType() to return descriptions for more file types Jan. 29, 2010 - Version 8.09 - Added a number of new Nikon LensID's (thanks Robert Rottmerhusen) - Decode GPS position and some camera settings from AVCHD (.M2TS) video - Decode a few new PhotoMechanic tags - Decode MacroMagnification for the Canon MP-E 65mm f/2.8 1-5x Macro Photo lens in EOS 5DmkII and 40D images - Delete multiple Photoshop segments in JPEG images when deleting all Photoshop information and adding some back in one step - Print warning message in Windows when there are no matching files to process - Changed print conversion for PSP CreatorAppVersion - Fixed problem rewriting NikonCapture information written by NX2 Jan. 25, 2010 - Version 8.08 - Added read support for Paint Shop Pro images (PSP and PSPIMAGE) - Added ability to decode a number of new character sets including JIS, and completely overhauled character encoding routines - Fixed problem reading old OS/2-format BMP images Jan. 19, 2010 - Version 8.07 - Added read support for a number of font file formats (OTF, TTF, TTC, PFA, PFB, PFM, DFONT, AFM, ACFM and AMFM) - Added (experimental) read support for FLA files - Added a few new Sony LensType's (thanks Sander Stols) - Added a new Canon LensType (thanks Mark Berger) - Set BigTIFF MIME type to "image/x-tiff-big" (unofficial) - Fixed bug in GPS time drift correction when dates are specified for both GPS and image times - Fixed problem reading some IGC GPS logs Jan. 12, 2010 - Version 8.06 - Added a few new CanonModelID's - Fixed a bug introduced in 8.05 which broke rewriting of XMP in MWG mode Jan. 10, 2010 - Version 8.05 - "Strict MWG" - Improved MWG conformance by ignoring non-standard EXIF, IPTC and XMP when the MWG module is loaded - CurrentIPTCDigest tag is now only generated for IPTC in the standard location (as specified by the MWG recommendation) - Added support for 3rd party trailers on ARW images - Changed names of Sony IDC date/time tags and decode the last unknown IDC tag - Fixed "-TAG-= -TAG=VALUE" syntax to work with shiftable (date/time) tags and tags with conversions - Fixed incorrect tag format when writing some PhotoMechanic tags - Fixed problem where some tags couldn't be written in Olympus ORF images Jan. 7, 2010 - Version 8.04 - "Write ARW" - Added write support for Sony ARW and SR2 images (at long last!) - WARNING: Some Adobe utilities (Photoshop Camera Raw 5.6, DNG Converter 5.6, LightRoom 2.6) have a bug which causes the tone curve to be incorrect for edited ARW images from some Sony cameras (A500, A550, A700, A850, A900 and maybe others) - Compatibility Notice: Embedded JPEG in ARW and SR2 images is now extracted as PreviewImage instead of JpgFromRaw - Added read/write support for Sony IDC tags - Added support for Leica X1 maker notes and decode a few tags - Added support for DigiKam XMP schema - Added a new Minolta/Sony LensType (thanks Jean-Michel Dubois) - Decode Nikon D90 AFAreaModeSetting - Decode Nikon NEFBitDepth (thanks Warren Hatch) - Decode a few new Sony SRF, Casio AVI and MSOffice TIFF tags - Enhanced Geosync tag to allow GPS time-drift correction - Fixed Nikon D3 FlashSyncSpeed values (thanks Warren Hatch) Dec. 19, 2009 - Version 8.03 - Added a new Nikon ExternalFlashFlags value (thanks Warren Hatch) - Implemented -charset id3=CHARSET option in Windows version too (oops!) - Improved heuristic for guessing EXIF "Unicode" string byte order - Improved decoding of some obscure QuickTime tags - Renamed Casio SelfTimer tag to ReleaseMode and added new values - Fixed problem converting numerical M4P Genre values Dec. 15, 2009 - Version 8.02 - Added MIME types for Apple iWork file formats - Added bitmask to -v2 output for applicable tags - Added a new Canon LensType and fixed an incorrect one (thanks Hugh Griffiths) - Added a few new Ricoh Saturation values (written by GXR) - Added ability to specify character set for ID3v1 information - Added French translations for some Nikon tags (thanks Harry Nizard) - Extract FilePermissions information - Decode Nikon D90 custom settings - Decode a few more Nikon tags and removed AutoBracketRelease (thanks Warren Hatch) - Decode a few more GIF tags (and changed groups of some others) - Decode some information from JPEG APP4 "SCALADO" segment - Updated DICOM decoding to latest (2008) specification - Enhanced -fast option to allow MakerNote information to be skipped - Changed -v0 to enable output autoflushing for STDERR as well as STDOUT - Improved decoding of some QuickTime tags (fixes M4P Genre problem) - API Changes: - Added CharsetID3 option - Changed name of IPTCCharset option to CharsetIPTC (but IPTCCharset may still be used for backward compatibility) Dec. 1, 2009 - Version 8.01 - Compatibility Notice: Extract full-sized preview from X3F images as JpgFromRaw instead of PreviewImage - Added support for the new X3F version 2.3 files written by the Sigma DP2 - Added support for a few more XMP-acdsee tags - Decode Nikon D3 custom settings (thanks Warren Hatch) and extrapolate to D3S, D3X and D300S - Decode the few remaining Nikon D300 custom settings (thanks Stuart Solomon for providing sample images) - Decode Nikon D5000 custom settings - Decode Nikon FlashColorFilter tag (thanks Warren Hatch) - Decode a few more PNG tags - Created a new family 1 group for Nikon custom settings - Improved write conversions for EXIF Contrast, Saturation and Sharpness - Fixed problem with %f and %e when the source file has no extension - Fixed problem decoding Nikon D3 flash group B and C intensities - Fixed missing MIME type for XLT files Nov. 20, 2009 - Version 8.00 (production release) - Added read support for Apple iWork '09 files (Keynote, Pages and Numbers) - Added ability to write Nikon SerialNumber and ShutterCount tags - Added a few new Nikon LensID's and changed Tamron lens names to include model number (thanks Robert Rottmerhusen) - Decode a number of new Nikon tags (thanks Warren Hatch for much of this) - Decode a few new Sony tags and improved others (thanks Igal Milchtaich) - Decode a few new Ricoh tags, renamed RicohDateTime1/2, Revision and MakerNoteVersion tags, and added some print conversions - Decode Parallax in FujiFilm MPO MPImage2 images (thanks John Goodman) - Decode Canon EOS 1D Mark IV custom functions - Decode a number of new tags in MPEG-4 videos - Decode a large number of private GE DICOM tags - Decode a few more tags in AVI videos and attempt to fix problem calculating duration when multiple video streams exist - Enhanced -ee option to extract information from embedded MPF images - Improved Nikon LensID conversion to recognize user-defined lenses - Improved decoding of a few Olympus tags (ArtFilter, FaceDetect and FocusProcess) - Improved handling of warnings when processing corrupted ZIP files - Improved recognition of Canon teleconverters in Composite LensID tag - Added patch for Leica M8 bug which writes incorrect format for EXIF ExposureCompensation and ShutterSpeedValue - Changed prefix of unknown Leica M9 tags from LeicaSubdir to Leica_Subdir - Fixed problem writing encrypted Nikon WB Levels - Fixed problems reading PDF tags written by OS X 10.6 utilities - Fixed problem where the -charset option didn't work properly for some XML character entities when reading XMP Nov. 6, 2009 - Version 7.99 - Added read support for Office Open XML files and improved recognition of many MS Office file types - Added read support for Phase One IIQ and Capture One COS and EIP files - Added read support for GZIP information (first archived file only) - Added a new Canon LensType (thanks Karsten Sote) - Added a new Nikon LensID (thanks Geert De Soete) - Decode a few new Sony tags - Decode MakerNotes in Pentax AVI videos - Decode SerialNumber for newer Pentax cameras - Decode Canon FlashMeteringMode for most EOS models - Disabled some Sony A230 CameraInfo tags which weren't valid for this model - Give names to a number of unknown QuickTime atoms - Recognize VOB file extension (but audio information in MPEG private stream is not yet decoded) - Tolerate extra white space in GPX attributes when geotagging (fixes problem reading GlobalSat GPX files) - Minor improvements to FlashPix decoding - Changed names of all ZIP tags to avoid name conflicts with other tags - Changed Composite ImageSize to use ExifImageWidth/Height for CR2 images - Changed names of QuickTime image and video track description ImageWidth/Height tags to SourceImageWidth/Height - Fixed problems when -if option was combined with -v or -htmlDump - Fixed problem parsing NMEA track logs where coordinates have the wrong number of digits due to missing leading zeros (Holux M-241) - Fixed an incorrect Pentax LensType Oct. 28, 2009 - Version 7.98 - Implemented MWG support via a plug-in module ("-use MWG") - Added -config and -use options - Added ability to read Sony Vegas tags in AVI videos - Added a couple of new Canon LensType's - Added a new Panasonic ShootingMode (thanks Joerg) - Added a new PentaxModelID (Optio P80) - Added a new CanonModelID - Added a few new Canon 1D Mark IV custom functions values - Added warning for superfluous tag names on the command line when writing - Decode a few more tags for the Canon EOS 5D and 7D - Decode a number of new tags in Quicktime-based files (including MP4 and JP2) - Impose length limit on IPTC values when writing as per spec. (for backward compatibility, the length check may be disabled with the -m option) - Improved checks for invalid EXIF offsets and changed some warning messages - Improved decoding for a few Canon tags (and renamed NoiseReduction tag) - Improved date/time formatting to accept date-only values - Implemented print conversion for ID3 date/time tags - Enhanced writing of Photoshop:IPTCDigest to allow a special value of 'old' to represent the digest of the IPTC from the original file - Updated iptc2xmp.args and xmp2iptc.args to handle IPTC DigitalCreationDate/Time - Recognize a number of Sigma LensType's in X3F images - Recognize a large number of additional audio/video file extensions - Minor improvements to -htmldump output - Minor changes to some application warning messages - Fixed problem writing Canon CameraTemperature tags - Fixed "Error reading Info object" warning when reading a PDF file after deleting all PDF tags - API Changes: - Added ability to specify config file via $Image::ExifTool::configFile - Added EditGroup option for SetNewValue() Oct. 13, 2009 - Version 7.97 - Added ability to disable print conversion on a per-tag basis by suffixing the tag name with a '#' character - Added a new PentaxModelID (Optio WS80) - Decode a few more Sony tags - Decode a number of new Casio tags and values - Decode CameraTemperature for Canon PowerShot models (thanks Vesa Kivisto) - Improved warning messages for the -ext option - Improved DOF calculation to use ObjectDistance if SubjectDistance and FocusDistance are not available - Improved -X output to support more of the new -charset encodings - Made Composite:FileNumber writable - Use more detailed makernote directory names in EXIF warning messages - Decreased priority of tags in IFD1 of JPEG images to avoid taking precedence over tags from IFD0 or ExifIFD - Changed print conversion strings for TIFF SampleFormat tag - Renamed Casio ObjectDistance tag to FocusDistance - Fixed invalid character in a Minolta/Sony LensType string - Fixed bug decoding NITFVersion tag - Fixed bug where binary data was returned without the -b option when using an expression involving tag names for some tags such as ThumbnailImage - Fixed two problems which could result in runtime warnings when: - reading truncated ICC_Profile information - using -htmldump on an image containing invalid EXIF offsets - API Changes: - Added ability to disable print conversion by suffixing tag name with '#' - Changed name of BigTIFF 'ifd8' format to 'ifd64' for consistency Oct. 2, 2009 - Version 7.96 - Added new Geosync tag to allow geotagging of images with timestamps which are not pre-synchronized to GPS time - Added patch to avoid crash bug in Canon DPP software when OwnerName is set to a value that is exactly 3 characters long (doh!) - Added a few new Olympus LensType's (thanks Godfrey DiGiorgi) - Added a couple more Nikon LensID's (thanks Robert Rottmerhusen) - Added minor warning when fixing invalid counts in Kodak MakerNotes - Decode a few new tags and values for the Panasonic GF1 - Improved parsing of command-line arguments to remove order dependencies of certain options - Minor improvement to decoding of Olympus FaceDetect tag - Changed "Error reading PreviewImage from file" to a minor warning - Changed conversion of Canon MeasuredEV to correspond more closely to LightValue (by adding 5 to the MeasuredEV value, which seems to be good for all EOS models, but it may be high by up to 1 EV for some PowerShot models) - Fixed problems decoding some CameraInfo tags for the Canon 7D with the new production firmware (1.0.7) - Fixed problems writing some CameraInfo tags for the Canon 50D and 5DmkII Sept. 24, 2009 - Version 7.95 - Added read support for LNK (Windows shortcut) file metadata - Added patch to fix incorrect count written by a number of recent Kodak cameras to some tags in SubIFD3 of the MakerNotes - Added a few more Sony/Minolta LensType's - Added a couple more Canon LensType's (thanks Norbert Wasser) - Added a PentaxModelID for the new K-x - Decode a couple more Canon VignettingCorr tags - Improved Canon FocusDistance conversions to indicate "inf" for maximum value - Improved DOF calculation to use SubjectDistance if FocusDistance is not available - Changed -fast, -scanForXMP and -unknown options to also apply when copying tags with -tagsFromFile Sept. 11, 2009 - Version 7.94 - Added support for Leica M9 makernote format and decode a few new tags - Added a few new Leica LensType's - Added support for IGC GPS track logs (thanks Lionel Genet) - Added a number of alternate Macintosh character sets and changed a couple of character set names for -charset option - Decode even more Sony A100 tags (thanks Igal Milchtaich!) - Improved handling of FlashPix character translations - Changed a couple of Sony and Minolta AF tag names to be more consistent Sept. 5, 2009 - Version 7.93 - Added a new CanonModelID - Added a couple of new Nikon LensType's (thanks Robert Rottmerhusen) - Added a few new Pentax LensType's - Decode a number of new tags for the Canon EOS 7D - Calculate Duration for WAV audio files - Allow exponents when writing GPS coordinates (eg. "-gpslatitude=7.657e+01") - Print available character sets if no CHARSET is given for -charset option - Improved -v3 and -htmldump output to show MPF image data - Fixed -E option to work with tag descriptions when -lang option used - Fixed problem reading large FlashPix-format documents - API Changes: - Added LargeFileSupport option Aug. 29, 2009 - Version 7.92 - Fixed new "-charset iptc=CHARSET" feature to work with -tagsFromFile Aug. 29, 2009 - Version 7.91 - Added -charset option and support for additional Windows and Mac character sets. Character sets now supported are: UTF-8, Latin1, Latin2, Cyrillic, Greek, Turkish, Hebrew, Arabic, Baltic, Vietnam, Thai and MacRoman - Fixed problem with some duplicate Nikon LensID's - Fixed incorrect Duration calculation for multi-channel FLAC audio files - Compatibility Notice: Removed "CreatorContactInfo" shortcuts which were added to ease the transition when some Iptc4xmpCore tag names were changed in version 7.45 - API Changes: - Added IPTCCharset option and support for additional character sets Aug. 24, 2009 - Version 7.90 - Added -ex (-escapeXML) option - Added a few more Minolta M42-type lenses (thanks Lukasz Stelmach) - Added a number of new CanonModelID's - Decode more Sony A100 tags (thanks Igal Milchtaich) - Decode a few more Kodak WhiteBalance tags - Decode a couple more JPEG APP segments - Internal changes to Composite tag calculation algorithm - Patched problem with renaming files on OS/2 that caused failed tests Aug. 18, 2009 - Version 7.89 (production release) - IMPORTANT: Not quite done with NRW fixes -- fixed similar bug which could corrupt NRW images when writing new values larger than 10 MB Aug. 17, 2009 - Version 7.88 (production release) - IMPORTANT: Fixed bug introduced in version 7.77 which causes Nikon NRW images to be corrupted when writing - Decode a number of Sony A100 Camera Settings tags (thanks Igal Milchtaich) - Improved accuracy of some CameraInfo values for Canon PowerShot models - Tolerate blank lines in PDF xref tables - Fixed problem where -E didn't escape values when copying with -tagsFromFile - Fixed bug identifying AF Micro-Nikkor 105mm f/2.8D lens Aug. 14, 2009 - Version 7.87 - Added a new Sony lens (thanks Lukasz Stelmach) - Added a few new Pentax City and PictureMode values (thanks Niels Kristian Bech Jensen) - Added lookup for XMP-photoshop:Urgency - Added a few new Nikon RetouchHistory values - Decode a number of new Sony tags for the A700 (thanks Rudiger Lange) - Decode Canon PeripheralLighting tags - Decode Olympus AFFineTuneAdj (thanks Yrjo Rauste) - Extract System tags from unknown file types - Enhanced -E option to work when writing, and when used in combination with other options such as -p - Tolerate white space around "=" in XMP attributes (allowed by XML spec) - Improved error handling when parsing bad EXIF IFD entries - API Changes: - Added Escape option July 25, 2009 - Version 7.86 - Added support for reading Garmin TCX track logs with the -geotag option - Added a number of new Canon, Olympus and Pentax LensType's - Enabled writing of .AI (Adobe Illustrator) files - Minor changes to DICOM decoding July 21, 2009 - Version 7.85 - Added a new Sony LensType - Added a new Pentax LensType (thanks Albert Bogner) - Added a new PentaxModelID value (Optio W80) - Added a few new JPEGDigest values (thanks Franz Buchinger) - Added check for proper support of IFD-format value types - Decode Nikon D300 firmware 1.10 camera settings (thanks Stuart Solomon) - Improved handling of Olympus makernotes for recent models and fixed error messages resulting from makernote format changes in Stylus 550WP images - Improved geotagging by allowing different NMEA sentences with slightly different timestamps (within 10 seconds) in the same fix - Fixed decoding of some CameraSettings tags for the new Sony A330 and A380 - API Changes: - Added GeoMinSats option July 16, 2009 - Version 7.84 (Windows only) - Fixed bug in -geotag option of Windows version when using wildcards in the GPS track filename July 13, 2009 - Version 7.83 - Added preliminary read support for M2TS/AVCHD video files (much pain for little gain) - Added family 4 group names (instance number) to provide a technique for differentiating same-named tags extracted from the same location via the command-line application - Added a new family 1 group ("System") to differentiate tags obtained from the file system - Added a couple of new Canon LensType values - Decode ID3 Picture attributes - Decode ICC_Profile ColorantTableOut - Changed application to return a value of 1 if all files fail condition - Made the IPTC CodedCharacterSet tag "unsafe" to copy by default (since this could result in incorrect encoding for existing IPTC in the destination image) - Fixed bug handing some non-standard offset formats when writing EXIF - Fixed problem with MakerNote warnings for Samsung WB500 - Fixed problem reading Leica M8 makernotes when copied between JPEG and DNG images - Fixed problem extracting ThumbnailImage from Sanyo VPC-FH1 MP4 videos - Fixed problem extracting ThumbnailImage from some Sony DSLR-A100 ARW images (due to a bug in some A100 firmware versions which results in incorrect ThumbnailOffset values) July 2, 2009 - Version 7.82 (production release) - Added a new Canon LensType (thanks Norbert Wasser) - Decode another Nikon AVI tag - A number of improvements, bug fixes and additions to ID3 decoding June 28, 2009 - Version 7.81 - Added a few missing print conversions to Nikon, Kyocera and FlashPix date/time tags June 26, 2009 - Version 7.80 - IMPORTANT: Fixed bug introduced in 7.77 which had the potential to corrupt TIFF-format images when writing to an image containing a SubIFD tag larger than 10 MB (not that I've ever seen one of these in the wild) - Added support for DNG version 1.3 - Decode makernotes in Nikon AVI videos - Decode QuickTime MatrixStructure tag and added Composite Rotation tag to calculate the rotation of the QuickTime video track - Updated CanonCustom tags for the EOS 500D - The -fast option now stops parsing of WAV and AVI files at audio/video data - API Changes: - Improved handling of $/ by localizing internally June 20, 2009 - Version 7.79 - Added read/write support for Adobe InDesign files (.IND, .INDD, .INDT) - Added ability to geotag with KML files (Note: each Placemark must contain a TimeStamp for this to work) - Added undocumented XMP-xmp PagInfo tags written by Adobe InDesign - Added conversion for MPF:PanOrientation - Many improvements and additions to Olympus and Panasonic makernote decoding - Improved logic of -scanForXMP option - Recognize MPO file extension (Extended Multi-Picture format) - Distinguish between infinite (inf) and undefined (undef) rational values - Changed namespace prefixes for xapG and xapGImg to match current XMP spec - Changed print conversion for Casio AFPointPosition - Made "Error reading value" warning minor when reading makernotes values - Allow all tags to be deleted from an XMP file - Fixed group names for a few Panasonic and Sony makernote tags June 13, 2009 - Version 7.78 - Added read support for the new CIPA standards: Multi Picture Format (MPF) and Stereo Still Image format (Stim) - Added support for Kodak type 10 makernotes (Z980) - Added a new Pentax LensType and a new Nikon LensID (thanks Jens Duttke) - Added %C format code for output file names - Decode a number of camera settings from Sony DSLR images June 7, 2009 - Version 7.77 - Added -struct option for JSON (-j) and XML (-X) outputs - Added 2 new Pentax LensType's and a PentaxModelID (thanks Jens Duttke) - Decode large preview in APP2 of images from newer Samsung models - Extract FujiFilm PreviewImage from improperly written FPXR segment - Improved decoding of Nikon WB levels for some models - Reduced memory useage when writing DNG and some other RAW image files - Changed format of Canon D30 SerialNumber to remove the hyphen and add leading 0's if less than 9 characters (now same format as printed on camera) - Changed writing of GPSTimeStamp and GPSDateStamp to adjust date/time to UTC if it contains a timezone, and added timezone ("Z") to Composite:GPSDateTime - Suppress "Unlisted FPXR segment (index 255)" warning from some Kodak images - Suppress "Unrecognized MakerNotes" warning for Samsung STMN-type maker notes - Made "Unrecognized MakerNotes" a minor warning - Fixed problems reading/writing large PreviewImage in some Sony JPEG images - Fixed problem decoding some base64 values in XML files - API Changes: - Added Struct option (considered experimental) May 20, 2009 - Version 7.76 - Added support for Leica RWL raw images (just RW2 with a different name -- Panasonic is pulling the same dumb stunt as Nikon with NRW) - Added ability to specify geotagging parameters via config file - Added two new Canon LensType's (thanks Jose Oliver-Didier) - Added a couple more Panasonic FilmMode values - Added bitmapped value lookups to -listx output - Decode Panasonic face recognition information (DMC-TZ7) - Decode some new FujiFilm face detection tags - Implemented language translations for bitmapped values - Enhanced -geotag option to allow wildcards in track file name - Minor changes to Nikon AF point decoding - Allow empty string when writing unknown values (ie. "Unknown ()") - Pad numerical IPTC values with zeros if necessary when writing - Fixed problem with -geotag feature interpolating in some NMEA logs - API Changes: - Added GeoMaxHDOP, GeoMaxPDOP, GeoMaxIntSecs and GeoMaxExtSecs options May 9, 2009 - Version 7.75 - Added a few new translations (thanks Jens Duttke et al) - Added warning when stream mode data is encountered in a ZIP file (this is currently not supported) - Added a couple of new Nikon ActiveD-Lighting values (thanks Werner Kober) - Added and changed some Nikon LensID's (thanks Robert Rottmerhusen) - Added ability to specify user-defined option defaults in config file - Added write support for FujiFilm S5Pro firmware 1.11 RAF images - Decode AF point information for more Nikon models (thanks Werner Kober) - Improvements to new geotagging feature - Changed language code for simplified Chinese from "zh_s" to "zh_cn" - Changed user-defined shortcuts to Image::ExifTool::UserDefined::Shortcuts - Limit PrintConv precision of Composite GPSAltitude to 1 decimal place - API Changes: - Changed WriteInfo() to use a temporary file instead of a memory buffer when a source file name is given with no destination file - Attempt (yet again) to fix problems when UTF-8 encoded strings are passed to exiftool functions Apr. 10, 2009 - Version 7.74 - Added geotagging feature and new -geotag option (guess who finally bought a hand-held GPS!) - Added a few new Casio RecordMode values - Decode FujiFilm EXRAuto and EXRMode tags (FinePix F200EXR) - Decode Olympus ArtFilter tag - Allow EXIF ISO to have multiple values as per EXIF spec - Improved XMP-exif and XMP-tiff list-type tags to allow copying from EXIF - Changed handling of ComponentsConfiguration to facilitate copying between EXIF and XMP - Changed name of EXIF tag 0x9214 from SubjectLocation to SubjectArea to match EXIF specification - Changed behaviour when writing pre-existing EXIF tags to use the standard EXIF field type instead of preserving the existing type (fixes problem rewriting some incorrectly typed EXIF tags) - Fixed error if a shift value is not given when shifting a date/time tag - Fixed makernote offsets error message when writing Pentax Optio WP images - API Changes: - Added EditOnly option to SetNewValue() Mar. 31, 2009 - Version 7.73 - Added write support for Panasonic RW2 images (including IPTC and XMP) - Added ability to write IPTC and XMP to Panasonic/Leica RAW images and fixed bug introduced in version 7.64 which disabled write support for these images - Added a new Canon EasyMode value (thanks Irwin Poche) - Added a number of new Nikon LensID's (thanks Robert Rottmerhusen) - Added CanonModelID for the new 500D - Decode many CameraInfo and ColorData tags for the Canon EOS 500D - Decode track-level 'meta' atom in MOV videos - Enhanced Canon Composite:ShootingMode logic to distinguish Bulb mode - Improved decoding of Canon TargetExposureTime - Changed name of Panasonic RW2 PreviewImage to JpgFromRaw - Fixed bug where JPEGDigest wasn't generated for some images - Fixed problem where -F didn't permanently fix makernote offsets for some images when writing - Fixed bug decoding Canon RawMeasuredRGGB and MeasuredRGGBData which resulted in a failed test on 64-bit systems Mar. 20, 2009 - Version 7.72 - Added a new Minolta/Sony LensType (thanks Jens Duttke) - Added support for localized language descriptions of "lang-alt" tags - Added support for Nikon NRW files (please just kill me now) - Added two new PentaxModelID's and a new PentaxImageSize - Decode Pentax PEF HuffmanTable as Unknown Binary tag - Decode Leaf and Kodak records in DNGAdobeData information - Made "Empty PrintIM data" a minor warning - Minor improvement to Canon lens recognition logic - Changed Composite:LensID to also return a value for Olympus lenses - Changed copying behaviour to preserve the specific location (family 1 group) when source group is specified and destination group is "all" or "*" (eg. "-exif:all>all:all" now preserves the IFD of each tag) - Fixed a number of incorrect Minolta/Sony lens names (thanks Olaf Ulrich) - Fixed bug rewriting MIE trailers on TIFF images Mar. 12, 2009 - Version 7.71 - Added a new Pentax LensType (thanks Akos Szalkai) - Added a new Canon LensType (thanks Kurt Garloff) - Added new PentaxModelID for the Optio P70 - Added XMP list-type flag (Alt, Bag or Seq) to "-f -listx" output - Decode a number of new Canon tags (thanks Vesa Kivisto) - Removed unreliable Canon Composite FlashOn tag (use Flash instead) - Removed Nikon FlashModel tag and replaced it with ExternalFlashFirmware - Changed tags in Canon "ColorBalance" tables to signed integer and renamed the tables to "ColorData" - Changed formatting for Canon FocalUnits - Changes to -X output: - Now uses 'rdf:datatype' instead of 'et:encoding' (thanks Alexander Vonk) - Improved long (-l) output to produce valid RDF/XML, and added 'et:val' - Improved handling of unknown XMP lang-alt tags - Fixed family 2 group names for a few tags Feb. 26, 2009 - Version 7.70 - Added a few new Nikon LensID's (thanks Robert Rottmerhusen) - Added a number of new CanonModelID's - Added ability to use -f before -listx to output 'flags' attribute - Added xml:lang attribute to -X output (when used with -t, -H or -D) to identify alternate language entries for XMP lang-alt tags - Decode Canon ImageUniqueID and added a new EasyMode value - Created "Unsafe" shortcut used when rebuilding JPEG EXIF metadata from scratch - Changed Olympus lens "pre-release" designation to "release 1" - Changed exiftool to continue after encountering "Error opening directory" - Enhanced makernote-offset-fix logic to account for problems like those caused by bugs in Picasa and ACDSee - API Changes: - Enhanced GetTagID() to also return language code in list context Feb. 17, 2009 - Version 7.69 - Added a new Nikon LensID (thanks Jens Kriese) - Added a new Pentax LensType (thanks Jens Duttke) - Added Extra JPEGDigest tag - Recognize new Panasonic APP2 MPF information written by FX40 - Improved -@ option to allow a UTF-8 BOM at the start of the input file - Augmented -listx output to include indexed value conversions - Changed Japanese and Chinese language codes to 'ja' and 'zh' (ISO 639-1) - Fixed a few problems with some CanonCustom tags Feb. 13, 2009 - Version 7.68 - Added French translations for XMP and Composite tags (thanks Jean Piquemal) - Decode Panasonic AdvancedSceneMode, added a few more SceneMode values, and fixed incorrect format for TextStamp - Decode a missing Canon 1DmkII custom function - Changed Czech language code to 'cs' (as per ISO 639-1) - Relaxed XMP date/time validation to allow writing year-only and year-month values (YYYY and YYYY:MM) without requiring the -n option - More work on language translations (this will be ongoing) - Fixed problem shifting XMP date/time values with missing seconds - Fixed some family 1 group names in -listx output Feb. 9, 2009 - Version 7.67 (production release) - IMPORTANT: Fixed bug introduced in version 7.01 which could cause corruption of TIFF-format images in very rare situations when adding tags to an image containing very large (> 10 MB) binary data blocks Feb. 7, 2009 - Version 7.66 - Improved language support - Changed conversion for a couple of the EXIF Flash values - Removed trailing white space from Make and Model values - Removed null terminators that may be left on some string values - Fixed problem with family 1 group names for QuickTime Date tags - Fixed problem with invalid names being generated for some unknown tags - Fixed decoding of ASF PreviewMimeType and PreviewDescription - Fixed formatting problems with -j output when combined with some options Feb. 5, 2009 - Version 7.65 - Added -j option for JSON (JavaScript Object Notation) output format - Improved French language translation for File group (thanks Jean Piquemal) - Enhanced -listx option to give short output when used after -s - Renamed "tagid" attribute to "id" in -X output to match -listx output - Fixed bug introduced in 7.64 which resulted in runtime warning when extracting non-existent tags with the -f option - Fixed problem which could cause runtime error with -listx option on some systems Feb. 3, 2009 - Version 7.64 - "Babel fish" - Added -listx and -lang options - Added preliminary support for the following languages (thanks Jens!): - en [default] - ch_s (thanks Haibing Zhong) [renamed 'zh_cn' in 7.75] - cz (thanks Petr Michalek) [renamed 'cs' in 7.68] - de (thanks Jens Duttke) - en_ca (for those of us who like to see "colour" spelled properly) - en_gb (correct "colour" plus a few other quirks) - es (thanks Santiago del Brio Gonzalez) - fr (thanks Bernard Guillotin) - it (thanks Emilio Dati) - jp (thanks Kazunari Nishina) [renamed 'ja' in 7.69] - nl (thanks Peter Moonen and Herman Beld) - pl (thanks Przemyslaw Sulek) - Added support for new XMP Windows Live Photo Gallery tags - Decode two new Panasonic tags and improved decoding of some others - Decode a few new 3rd party EXIF and IPTC tags - Enhanced -X output by adding -t feature for tag table information - Improved decoding of Photoshop ClippingPathName and remove Unknown flag - Renamed Panasonic EXIF "Title" tag to "PanasonicTitle" and improved decoding - Fixed problem which could cause crash if reading corrupted images on Windows - Fixed inconsistencies rewriting XMP which uses extra rdf:Description elements instead of rdf:parseType='Resource' attribute - Fixed decoding of Nikon D40 RemoteOnDuration - API Changes: - Added Lang option Jan. 23, 2009 - Version 7.63 - Added new Composite tags: SubSecCreateDate and SubSecModifyDate - Decode Sony DSLR WB_RGBLevels tags (thanks Andrey Tverdokhleb) - Decode a few more NikonScan tags (thanks Brendt Wohlberg) - Included new argument files in distribution: xmp2exif.args and exif2xmp.args - Improved decoding of PentaxModelID for K-m and K2000 - Minor change to decoding of Canon 1DmkIII ISOSpeedRange - Downgrade "MRW format error" to a warning when reading ARW images containing MRW information that has been corrupted by the Sony IDC utility - Renamed Kodak SubSecTime tag to Time - Changed Composite DateTimeCreated tag to use only IPTC tags - Changed name of Sony/Minolta MRW WBLevels tag to reflect ordering of color components - Fixed problems recognizing some MP3 files Jan. 16, 2009 - Version 7.62 - Decode a number of new tags for recent Canon EOS models - Decode ID3v2.3 Compilation tag (written by iTunes) - Added a number of new ID3 genre's and improved ID3v2 genre conversion - Avoid converting MIE ISO 8859-1 string values - Enhanced XML output (-X) to work with binary data (-b) option and encode values in base64 if necessary - Fixed problem with invalid UTF-8 when writing XMP or using -X (XML) option Jan. 10, 2009 - Version 7.61 - Added a new Pentax LensType and a new PentaxModelID (thanks Denis Bourez) - Added ability to copy makernotes from Pentax or Samsung native DNG image - Decode makernotes in Samsung GX model DNG images - Decode CameraTemperature for Canon EOS cameras with Live View (thanks Karl-Heinz Klotz) - Decode a number of Canon 5DmkII CameraInfo tags - Included 2 new argument files in distribution: xmp2gps.args and gps2xmp.args - Prevent writing of TIFF images containing the obsolete (and unsupported) TIFF 6.0 JPEG extensions - Fixed bug which could result in runtime warning when writing makernotes as a block Jan. 6, 2009 - Version 7.60 (production release) - Decode a few more Nikon D700 FlashInfo tags (thanks Jens Duttke) - Defined (empty) XMP-pdfx tag table, mainly for documentation purposes - Fixed problem where the behaviour of -tagsFromFile changed to that of -addTagsFromFile if the first specified tag was an exclusion - Fixed XMP writer to allow a namespace to be deleted after a mass copy - Fixed bug introduced in 7.58 which could cause hang when using -tagsFromFile Dec. 23, 2008 - Version 7.59 - Removed file size limit when setting tag value from contents of a file Dec. 22, 2008 - Version 7.58 - Added new Canon, Nikon and Olympus lenses (thanks Jan Boelsma and Geert De Soete) - Added write support for FujiFilm S5000 Ver3.00 and S9500 Ver1.01 RAF images - Extract RAFVersion tag from FujiFilm RAF images - Decode ColorBalance information for PowerShot G10 - Decode Sharpness for Canon EOS 50D - More improvements to Canon 50D and 5DmkII makernote decoding - Attempt to identify unknown Nikon lenses which exist in LensID list with a different LensIDNumber (to patch Sigma lens renumbering debacle) - Removed limit of 1000 items in an XMP list-type tag when writing - Increased maximum size of file from 16MB to 100MB when setting tag value from the contents of a file - Improved performance when extracting a large number of same-named tags - Fixed bug which resulted in "segment too large" error message when rewriting multi-segment XMP if XMP was edited but nothing was actually changed Dec. 11, 2008 - Version 7.57 - Added read support for Panasonic RW2 raw images (and extract meta information from embedded PreviewImage as Doc1) - Added new Pentax K-m PictureModes and new PentaxModelID for the Optio S12 - Decode ColorBalance information for Canon 50D and 5DmkII - Decode Panasonic RAW/RW2 information from DNG images - Decode Canon SRAWQuality tag - Recognize DCP (DNG Camera Profile) files - Updated Canon CustomFunctions for the EOS 5D Mark II - Changed name of "OtherImage" tags to "JpgFromRaw" in IFD0 of SR2 and ARW images, and to "ThumbnailImage" in IFD0 of MRW images - Changed EXIF DeviceSettingDescription and ProfileLookTableData to binary data tags - Fixed problem reading/writing ThumbnailImage in Minolta A200 MRW images - Fixed ColorBalance2 tags for AsShot and Auto modes of Canon 1DmkII/1DSmkII Dec. 2, 2008 - Version 7.56 - Decode CompressorVersion from Canon 5D Mark II videos - Fixed family 1 group classifications for tags in QuickTime video tracks - Fixed problem with new -sep feature when separator contained spaces Dec. 2, 2008 - Version 7.55 - Added a number of new CanonVRD tags for DPP 3.4/3.5 (thanks Bogdan) - Added a new FocusMode for the Pentax K-m - Added a new Nikon LensID (thanks Niels Kristian) - Decode some tags from Kodak C1013 maker notes (type 9) - Enhanced -sep option to allow list-type tag values to be split when writing - API Changes: - Added ListSplit option Nov. 26, 2008 - Version 7.54 - Added a few old XMP-crs tags that were missed - Show numerator and denominator for rational EXIF values in verbose mode - Changed htmldump tooltip font - Fixed bugs in HTML reader that could cause runtime error or hang Nov. 19, 2008 - Version 7.53 - Added read/write support for EXIF files - Added ability to write EXIF as a block (finally!) - Added ability to write CanonVRD information to MIE files - Added timezone to "Now" tag value - Added a new CanonModelID (FS100) - Added write support for ACDSee XMP tags (XMP-acdsee:RPP) - Added a few new XMP-cc tags - Decode CameraOrientation for a number of Canon EOS models (thanks Bogdan) - Allow XMP to be copied as a block with -tagsFromFile option - Highlight odd value offsets in -htmldump output - Improved htmldump tooltip display - Minor improvements to MIE reader - API Changes: - The full XMP block is now extracted with the Binary option, so the XMP block is marked as "unsafe" and the Protected flag must be set (as with other writable blocks) when calling SetNewValue() Nov. 4, 2008 - Version 7.52 - Added ability to extract AI private data from PDF files - Added extract embedded option (-ee, -extractEmbedded) - Added new group family 3 and ability to specify multiple group names for a single tag when extracting information - Added a new Sony lens and decode two new Sony tags (thanks Jens Duttke) - Added a few new Nikon LensID's (thanks Robert Rottmerhusen) - Added a new Olympus LensType (thanks Michael Meissner) - Decode a few new Nikon tags (thanks Jens Duttke) - Enhanced command line parsing to allow long names for most options - Improved verbose output when writing makernotes - Allow writing of empty string values in EXIF information - Fixed problem rewriting XMP lists that contained no entries - Fixed bug writing JpgFromRaw and ThumbnailImage to CRW files that could make the image unreadable by Canon utilities (affected images may be repaired by rewriting the same tag with this version of exiftool) - Fixed bug where some Canon MakerNote values could not be written - Fixed bug introduced in version 7.49 that broke the use of wildcards in filenames for the Windows version - API Changes: - Enhanced a number of functions to accept multiple group names separated by colons Oct. 27, 2008 - Version 7.51 (production release) - Fixed problems which caused failed test or warning with Perl 5.6 or older (does do not affect Mac or Windows versions) - Fixed Windows application so help is displayed when run with no options Oct. 26, 2008 - Version 7.50 (production release) "XMP 2008" - Added a number of new XMP tags from new XMP specification released Oct. 17 - Added support for extended XMP segment in JPEG images (as per new XMP spec) - Added a number of new Minolta/Sony lenses (thanks Jens Duttke) - Added a new Canon LensType (thanks Andreas Huggel and Pascal de Bruijn) - Added new PRISM 2.1 XMP tags - Added ability to read/write x:xmptk attribute (via XMP-x:XMPToolkit tag) - Added ability to specify user-defined Lenses - Decode XMP in ASF (WMA/WMV), FLV, SWF and MP4 audio and video files - Preserve byte order of EXIF information when copying to MIE file - Allow byte order for newly created MIE files to be set by ExifByteOrder tag (and API ByteOrder option) - Allow backslashes in filenames on non-Windows-like systems - Removed 's' from XMP-xmp:Thumbnails tag names and set Avoid flag for XMP-xmp:ThumbnailImage - Fixed definitions of some XMP-xmpDM tags - Fixed some PDF reader bugs (thanks Leonhard Zachl for one patch) - API Changes: - Added ExtractEmbedded option Oct. 16, 2008 - Version 7.49 - Added new PentaxModelID for K-m/K2000 plus a new LensID used by K-m - Added --a option and made -a the default behaviour for the -X option - Added ability to read/write XMP-rdf:about attribute - Added new "Resource" flag which may be set in user-defined XMP tags to write a value as an rdf:resource instead of a normal string - Allow decimal (real) values to be written to XMP-xmp:Rating (contrary to current XMP specification, but as per MWG recommendation) - Fixed file renaming bug in Windows that caused the file to be moved into the current directory instead of leaving it in the original directory when the source file was specified using backslashes as directory separators Oct. 14, 2008 - Version 7.48 - Added support for XMP PRISM 2.0 schema tags - Added two more ZIP compression types - Added conversions for XMP-plus date tags - Changed conversion of all Digest tags to make the -n value readable - Changed some error handling to avoid generating console warnings Oct. 11, 2008 - Version 7.47 - "Jumbo" - Added -X option to output extracted information in XML format - Added -listwf option to list extensions of writable files - Added a number of new Nikon and Pentax LensTypes (thanks Robert Rottmerhusen, Jens Duttke and Bozi) - Decode Canon 1000D custom functions - Decode a number of new tags written by Nikon Capture NX 2 - Decode many FlashInfo tags for the Nikon D90 and D700 - Implemented character set translation for MIE information (-L option) - Improved speed when scanning unknown file to determine FileType - Fixed bug where some writable EXIF tags gave a "not writable" message when reading tag value from a dynamic file (eg. "-TAG<=%f.txt") - Fixed problem double-escaping characters when -h and -S were used together - Fixed decoding of Nikon FlashModel for SU-800 Remote Commander - Fixed swapped Nikon FlashGroupBControlMode/FlashGroupCControlMode tags - Fixed bug reading PDF files that could cause "Argument isn't numeric in subtraction" warning (note that writing PDF files with this problem could cause format errors which may be fixed by reverting with "-pdf-update:all=") - API Changes: - Fixed CanWrite() to be consistent with documentation Oct. 2, 2008 - Version 7.46 - Fixed bug which could cause a runtime warning when writing images in a directory containing an unrecognized file type - Fixed an IPTC-XMP test that failed in other time zones (this was a test problem, not an exiftool bug) Oct. 1, 2008 - Version 7.45 - Added support for new XMP IPTC Extension 1.0 tags (rev 2) - Added a few more TIFF Compression values (for MDI files) - Decode a few new Nikon Flash tags - Decode Canon 50D custom functions - Calculate CurrentIPTCDigest tag (if Digest::MD5 is available) - Renamed Photoshop CaptionDigest tag back to IPTCDigest again - Avoid touching IPTC data block when only Photoshop information is changed - Allow IPTCDigest to be set to the special value of 'new', representing the new IPTC digest of the output file - Updated iptc2xmp.args and xmp2iptc.args to write IPTCDigest as per MWG recommendation - Allow zone-less date/time values in XMP (as per MWG and upcoming XMP spec) - Allow brackets in $$ and $/ expressions (eg. ${$} and ${/} now work) - Changed decoding of EXIF:Copyright to allow two separate strings as per spec - Changed a number of XMP Iptc4xmpCore tag names and added a corresponding set of aliases (shortcuts) for backward compatibility - Changed some XMP xmpTPg tag names - Fixed problem extracting lists from other information types in MIE files Sept. 26, 2008 - Version 7.44 - Added read support for DjVu images - Added two new Sony LensType's (thanks Mladen Sever) - Added a new Pentax LensType (thanks Jens Duttke) - Decode a few new Canon 450D and 1000D tags (thanks Bogdan) Sept. 17, 2008 - Version 7.43 - Added two new Pentax LensTypes (thanks Jens Duttke and Anton Bondar) - Added PentaxModelID's for the Optio E60 and M60 - Added a number of new CanonModelID's - Extract XMP from MOV and AVI videos (as written by Adobe CS3 Bridge) - Decode information from QuickTime HintInfo atoms (hinf and hnti) - Decode Canon 50D/5DmkII AutoLightingOptimizer - Enable writing of ThumbnailImage in CR2 images - Avoid extracting invalid Canon FocusDistance tags - Improved handling of timezones in date/time values (fixes failed EXE test) Sept. 11, 2008 - Version 7.42 - Added read support for Windows, MacOS and Unix executable and library files - Added read support for ZIP and RWZ (Rawzor) compressed files - Added a number of new XMP tags written by PS Elements 4.0 (thanks Drew Holland) and LightRoom 2.0 - Added new Sony, Canon and Nikon LensTypes (thanks Jens Duttke and Werner Kober) - Decode a few new Canon CameraInfo tags for the 40D, 50D, 450D and 1000D (thanks D.J. Cristi) - Decode Nikon D90 LensData - Define version number etc. in properties of exiftool Windows executable - Improved handling of corrupted makernote offsets when writing - Fixed problem where FileType could be incorrect for a TIFF-based file with the wrong extension Aug. 28, 2008 - Version 7.41 - Added new Composite LensID tag and changed a number of LensType values in an attempt to disambiguate Canon, Pentax, Minolta and Sony 3rd party lenses - Added -sep option to specify separator for values in list-type tags - Added a new Nikon LensID (thanks Jens Duttke) - Added CanonModelID values for new models (SX110, A1000, A2000, E1, 50D) - Decode some CameraInfo tags of the Canon EOS 450D and 1000D (thanks Bogdan) - Decode a few new tags in Kodak MOV videos - Updated CanonVRD decoding for version 3.40 (DPP 3.4.1, thanks Bogdan) - Allow writable EXIF properties to be overridden by user-defined tags - Relaxed PDF parsing to allow xref tables with zero entries - Renamed Sigma LensID tag to LensType - Changed PDF update structure to better conform with PDF specification - Changed conversion of Olympus ManometerReading values - Reverted back to Perl 5.8 for Windows EXE version (fixes problem running exiftool.exe using a non-standard TEMP directory) - Patched DST problem in Windows when "Automatically adjust clock for daylight savings time" is used in Windows Date and Time settings - Fixed problems in the QuickTime parser that could cause exiftool to hang - Fixed bug which could cause an error to be reported when writing a DNG image containing ProfileIFD information - API Changes: - Added ListSep option Aug. 17, 2008 - Version 7.40 - Fixed -p option in Windows executable version (caused by packaging problem with Perl 5.10 release) July 30, 2008 - Version 7.39 - Added a number of new Canon LensType values (thanks Rich Taylor) - Added a new Pentax LensType (thanks Jens Duttke) - Added a new Sony LensType (thanks Mladen Sever) - Added support for writing invalid IFD entries used by some Kodak Z cameras - Updated Canon CustomFunctions for EOS 450D - Made a few more DNG tags writable - Renamed CIFF TvValue and AvValue tags to ShutterSpeedValue and ApertureValue and added conversions (to seconds and F-number) as with EXIF tags July 18, 2008 - Version 7.38 - Same as version 7.37 except that Windows executable is packaged with Perl 5.10.0 instead of 5.8.7 -- this fixes a problem with FileModifyDate and DST July 16, 2008 - Version 7.37 - Added -addTagsFromFile option (variant of -tagsFromFile which allows copying multiple tags into the values of a single list-type tag) - Added a new Sony LensID (thanks Jens Duttke) - Added PentaxModelID for the Optio W60 - Added a couple of new YCbCrSubSampling values (thanks Jens Duttke) and made values consistent across different types of meta information - Decoded Canon Categories tag (thanks Darryl Zurn) - Reduced priority of XMP-xmp date/time tags so the EXIF tags are preferred - Fixed problem where time may be duplicated in Composite:DateTimeCreated - API Changes: - Added ability to pass options to SetNewValuesFromFile July 8, 2008 - Version 7.36 - Added a new Nikon LensID (thanks Jens Duttke) - Fixed bug introduced in 7.33 where a SubIFD error was erroneously reported when writing an already edited NEF image July 6, 2008 - Version 7.35 - Added two new Nikon LensIDs (thanks Geert De Soete and Jens Duttke) - Added XMP-pdf:Trapped tag - Added Composite:GPSAltitude tag (like Composite:GPSLatitude/GPSLongitude) - Added a couple of new PentaxModelID values - Decode Canon 450D Sharpness tag (thanks Bogdan) - Decode Nikon D300 AFAreaMode and AutoFocus tags (thanks Jens Duttke) - Extract Pentax SaturationInfo as an Unknown tag (thanks Dave Nicholson) - Renamed Canon LensType string tag (ID 0x0095) to LensModel - Changed JFIFVersion print conversion to match the formatting used in the JFIF specification - Fixed a Minolta LensID entry for Tamron lenses - Fixed problem excluding XMP family 1 groups from deletion in some file types June 28, 2008 - Version 7.34 - Added names for a few more of the Unknown Photoshop tags - Added support for XMP files with leading XML comments - Added support for older XMP "x:xapmeta", and XMP without "x:xmpmeta" element - Changed priority of XMP:Source tags when writing so XMP-photoshop:Source is now preferred over XMP-dc:Source - Renamed Photoshop IPTCDigest to CaptionDigest and removed Unknown status - Improved parsing of IPTC time values when writing, and assume the local timezone (if available) instead of UTC when a timezone is not specified - Improved handling of lists that exist in multiple groups in the same file - Disabled shifting of list-type date/time tags (allows += to add list items) - Reduced priority of XMP-exif and XMP-tiff tags so these values don't override more reliable EXIF and TIFF tags when extracting information without specifying a group - Fixed quirk where exiftool could add an extra padding byte to the makernotes - Fixed incorrect tag ID that prevented ImageStabilization from being decoded in Sony DSLR-A100 images (thanks Ger Vermeulen) - Fixed problem where error/warning messages could be duplicated for subsequent files when copying tags from multiple files June 21, 2008 - Version 7.33 - WARNING: Older ExifTool versions will not properly rewrite DNG 1.2 images which contain multiple color profiles - Added DNGVersion check to avoid future problems with major DNG revisions - Added support for new DNG version 1.2.0.0 tags - Added support for XMP PLUS License Data Format 1.2.0 tags - Added a new Pentax LensType (thanks Peter) - Added a new Canon LensType - Added support for user-defined XMP structures - Decode a few new Sony tags (thanks Marcus Holland-Moritz) - Decode Nikon Capture NX 2 NikonICCProfile information (thanks Jens Duttke) - Extract MP3 VBR and ID3Size tags - Improved accuracy of MP3 Duration calculation (account for VBR and ID3Size) June 12, 2008 - Version 7.32 - Added a new Pentax LensType (thanks yeryry) - Decode ColorBalance information for Canon 450D and 1000D - Fixed names of a few NikonCapture D-LightingHQ tags (thanks Jens Duttke) - Fixed bug where a list-type tag was not created when simultaneously adding and deleting values from the list June 10, 2008 - Version 7.31 - Added proper support for special characters in PDF text strings - Added support for a number of new XMP tags written by Adobe Lightroom 1.4 - Added ability to write XMP-xmp:ThumbnailsImage - Added Photoshop IPTCDigest tag - Added two new Nikon LensID's (thanks Jens Duttke) - Added a new Pentax LensType (thanks Bogdan) - Added a new CanonModelID for the EOS 1000D - Decode a few new Pentax tags (thanks Dave Nicholson) - Increased precision of GPS coordinates when copying with -tagsFromFile - Fixed problem which could result in "Argument isn't numeric" runtime warning when attempting to write an Unknown value to a bitmapped tag May 31, 2008 - Version 7.30 (production release) - Adjusted MakerNote error checks to be a compromise between 7.28 and 7.29 - Fixed various htmlDump problems - Fixed bug which could cause runtime warnings when attempting to write certain types of unsupported images May 28, 2008 - Version 7.29 - Renamed Pentax ModelRevision tag to ProductionCode and improved print conversion to indicate if camera has been serviced - Added check to prevent EXIF tags from being written to JPEG images if they would obviously exceed the maximimum JPEG segment size limit - Relaxed error checks when writing JPEG images to allow MakerNotes to be rebuilt if the MakerNote IFD is not contained within the MakerNotes data - Fixed decoding of Pentax ExternalFlashGuideNumber when AF360 is used with the wide angle panel - Fixed unnecessary "Multiple new values for IFD0 tag 0x927c" warning which could occur when copying MakerNotes from some images May 26, 2008 - Version 7.28 - Added new Canon CustomFunctions values from the EOS 1DmkIII firmware update, and a new CanonExposureMode value (thanks David Pitcher) - Added a new Olympus LensType (thanks Viktor Lushnikov) - Decode Pentax ExternalFlashBounce tag (thanks Cvetan Ivanov) - Renamed Pentax ExternalFlashZoom tag to ExternalFlashGuideNumber and improved decoding (thanks Cvetan Ivanov) - Fixed bug which could prevent maker notes from being copied when copying all tags from a file containing a PreviewImage - Fixed problems decoding some Sony ARW images - Fixed problem writing some makernote values in sub-IFD's - Fixed "APP1 segment too large" problem where PreviewImage was not dropped as it should have been when copying all tags from some RAW images May 24, 2008 - Version 7.27 - "GIF+XMP" - Added ability to read/write XMP in GIF images - Added ability to write to GIF87a images (by upgrading them to GIF89a) - Added GIFVersion tag - Improved decoding of Canon 1DmkIII/1DSmkIII TimeStamp tags - Changed print conversion of EXIF/XMP GPSStatus tags to make more sense - Fixed bug introduced in version 7.22 that could cause exiftool to abort with an "'x' outside string" error when processing some DNG images - API Changes: - Extract FileSize information from images passed as a scalar reference May 21, 2008 - Version 7.26 - Added write support for FujiFilm FinePix S5 Pro V1.04 RAF images - Added support for new Kodak TIFF-format maker notes used by the Z1085 - Added new Pentax and Nikon LensType's (thanks Jens Duttke, Dave Nicholson and Robert Rottmerhusen) - Added some new Minolta LensID's (thanks Thomas Kassner) - Added new CanonModelID's and a 1DmkIII TimeStamp (thanks Ger Vermeulen) - Decode a number of new Pentax K10D tags (thanks Dave Nicholson) - Decode Panasonic Title tag (thanks Jens Duttke) - Recognize a few more uncommon top-level QuickTime atoms - Changed decoding of some Olympus tags for new E-520 - Changed warning when empty PrintIM data is encountered (eg. as written in Sony A700 ARW files when Adobe RGB color mode is used) - Dropped Canon PreviewFocalPlaneX/YResolution tags since they never really existed (thanks Ger Vermeulen for pointing out the Canon bug which lead to this false assumption) - Fixed duplicate tag problem with Pentax LensData when -U option used - Fixed bug which could cause a runtime warning when copying Nikon maker notes - Fixed bug in exiftool application which could cause all tags to be copied instead of just the specified tags when creating an output XMP or MIE file and using the -tagsFromFile option Apr. 18, 2008 - Version 7.25 (production release) - Added read support for DIVX video files - Added a new Nikon LensID (thanks Tanel Kuusk) - Decode a number of new Pentax K10D tags and values (thanks Dave Nicholson) - Decode a few new Nikon tags (thanks Jens Duttke) - Decode Nikon VignetteControl tag found in D3 images with new 1.10 firmware (thanks Alexandre Naaman) - Improved formatting of video duration times - Improved print conversion for video Compression values - Apply print conversion for XMP:FocalLengthIn35mmFormat to add "mm" - Fixed MIME type of JPEG 2000 images - Fixed problem decoding new Nikon D300 AFPrioritySelection tags - API Changes: - Fixed CanWrite so it returns false for non-writable TIFF-based files Apr. 10, 2008 - Version 7.24 - Added read support for SVG (Scalable Vector Graphics) images - Added support for non-standard Apple iPhone PNG images - Added support for ISL maker note format - Added a couple of new Olympus LensType's - Added a few new Nikon LensID's (thanks Robert Rottmerhusen) - Added values for various Sony tags (thanks Jens Duttke) - Decode Nikon D300 custom settings (thanks Jens Duttke) - Decode Nikon D300 AFFineTuneAdj (thanks Neil Nappe) - Decode a number of new Pentax tags and values (thanks Jens Duttke) - Decode a number of new QuickTime tags, including 'mdta' information - Decode a missing Custom Function for Canon 450D - Avoid extracting any unknown tag in binary data tables when -u option used - Avoid writing Canon 1D/1DS RAW images masquerading as TIF (writing 1D RAW images is not yet supported) - Improved parsing of AFCP ThumbnailImage and PreviewImage - Downgraded errors in the NikonScan and NikonPreview IFD's to allow writing of images with these problems without requiring the -m option Mar. 27, 2008 - Version 7.23 - Decode a number of new Pentax K20D/K200D tags and values - Fixed bug introduced in 7.18 which caused "Error parsing XMP" warning when deleting all XMP and writing new XMP tags in the same step Mar. 25, 2008 - Version 7.22 - Added support for Olympus-style Sony makernotes (DSC-S45/500/650/700/750) - Added %c 'n' modifier to number output files from 1 instead of 0 - Added Extra "Now" tag used for setting a tag value to the current date/time - Added a new Nikon LensID (thanks Jens Duttke) - Added ability to specify byte order for EXIF Unicode text and fixed problem where text wasn't always written in EXIF byte order by default - Added a new Canon LensType (thanks Hal Williamson) - Added a few new CanonModelID values - Decode a new Pentax K20D tag and add a few new values to other tags (thanks Jens Duttke) - Recognize non-standard Nikon ICC Profile files - Improved error checking when writing a JPEG image with a bad IFD - Fixed bug where IFD0 could be deleted when writing JPEG with a bad IFD1 - Fixed some Olympus LensType names for Leica lenses - Fixed problem extracting some writable directories as a block - Fixed bug which could cause "Not an ARRAY" error when reading PDF files Mar. 12, 2008 - Version 7.21 (production release) - Added support for Leica M8 maker notes (in both DNG and JPEG images) - Added ability to write encrypted Nikon makernote information (!!) - Added a new Olympus Leica lens (thanks Chris Shaw) - Decode a couple of new Canon 40D and 1DmkIII tags (thanks Chris Huebsch) - Decode Adobe RAF data in DNG images - Decode a few new Nikon D3 and D300 tags (thanks Jens Duttke) - Calculate VideoFrameRate for QuickTime MOV videos - Marked DNG OriginalRawFileName and OriginalRawFileData as "unsafe" to copy - Changed decoding of Casio BestShotMode - Renamed Nikon NEFCurve tags (thanks Jens Duttke) - Patched problem parsing OriginalDecisionData for the Canon EOS 5D Mar. 7, 2008 - Version 7.20 - Added a few new Minolta LensID's - Added two more TIFF-IT tags to the EXIF table - Added a number of new RIFF and ASF Audio Encoding values - Added a new new values for some Canon tags (thanks Dave Nicholson) - Decode a number of new Pentax K10D tags (thanks Dave Nicholson) - Decode a number of new MP4/QuickTime tags - Decode makernotes in Casio, Kodak, Minolta, Olympus and Ricoh AVI and MOV videos - Improved decoding of Casio maker notes and decode a few new tags (thanks Jens Duttke) - Removed incorrect CanonD30 ColorTemperature and ColorMatrix tags - Fixed Location translation in iptc2xmp.args and xmp2iptc.args - Fixed problem decoding some Nikon tags in images edited by Capture NX - Fixed decoding of InternalSerialNumber for Canon 5D - Fixed decoding of Nikon D3 color balance information - Fixed decoding of Minolta 7D FocusMode (thanks Jens Duttke) Feb. 25, 2008 - Version 7.19 - Added a new Pentax LensType and some new Panasonic NoiseReduction values (thanks Jens Duttke) - Decode Nikon D40 and D40X custom settings plus a couple of other tags - Decode a couple of new Pentax K10D tags (thanks Dave Nicholson) - Improved reliability of Canon FocalPlaneXSize and FocalPlaneYSize tags - Recognize HP Type2 maker notes in images from other makes - Write TIFF ApplicationNotes in 'int8u' format as per XMP specification - Made TIFF ApplicationNotes writable as a block - Changed HtmlDump to show actual IFD format if different than read format - Changed some MeteringMode strings to be more consistent - Fixed problem adding back JFIF information after deleting JFIF group Feb. 21, 2008 - Version 7.18 - Added ability to exclude XMP family 1 groups from deletion - Added patch to recognize new Ricoh R50 maker notes - Added a new Minolta LensID (thanks Jens Duttke) - Decode AFPointsUsed for Nikon D3 and D300 (thanks Jens Duttke) - Decode a couple of new Pentax K10D tags (thanks Dave Nicholson) - Improved decoding of Nikon FlashInfo tags (thanks Jens Duttke) - Renamed Olympus FlashExposureCompensation tag to FlashExposureComp - Patched problem with Perl 5.10.x which broke conversion of UTF8 strings - Fixed problem where an ExposureTime of 1 second was ignored in CRW images - Fixed problem where special characters were not handled properly when using the -L option while copying IPTC tags - Fixed bug which could cause a runtime error when attempting to write JFIF information after deleting JFIF:all in the same step Feb. 16, 2008 - Version 7.17 - Extract duplicate tags when -p option is used - Fixed bug introduced in 7.00 which broke the use of group family numbers and groups ending with a digit in tag format strings (eg. "$IFD0:Model") Feb. 14, 2008 - Version 7.16 - Added a couple of new Pentax LensTypes (thanks Jens Duttke) - Added a few more EXIF:Compression values - Decode color balance levels in Leaf MOS images - Decode a number of new tags from JPEG, TIFF, KDC and DCR images of older Kodak models - Improved decoding of TIFF SampleFormat tag - Made a number of DNG tags "unsafe" so they aren't copied by default - Allow JPEG EXIF segment to be deleted and a new EXIF segment to be created with a different byte order in a single command - Attempted to improve reliability of ScaleFactor35efl calculation for newer Canon models - Fixed a couple more places where we still needed a space before "mm" - Fixed problem with LightValue calculation which caused failed tests for Perl 5.6.2 on Darwin Feb. 5, 2008 - Version 7.15 (production release) - Added a few new CanonModelID's and PentaxModelID's - Added support for new Pentax K20D/K200D values for some tags - Added a few new Nikon LensID's (thanks Robert Rottmerhusen) - Decode a few new Sigma tags, including PreviewImage - Decode a few more tags in Canon CRW images (thanks Dave Nicholson) - Improved Sony ARW parsing (fix some problems and extract more tags) - Improved handling of timezone when writing EXIF and XMP information (the timezone is now added to XMP date/time values and removed from EXIF date/time values if necessary unless the -n option is used) - Recognize a few more FLV AudioEncoding and VideoEncoding values - Allow "pseudo" tags to be copied from unrecognized file types - Made FileModifyDate an "unsafe" tag so it isn't copied unless specified - Changed all "sec" units to "s" with a leading space for consistency - Fixed bug introduced in version 6.91 that could prevent some XMP date/time tags from being written when copying with "-all:all" Jan. 25, 2008 - Version 7.14 - Added read support for Kodak KDC raw images - Added ability to read/write Canon OriginalDecisionData in JPEG, CR2 and DNG images - Added ValueConv translations for some of the new Nikon PictureControl tags - Decode a number of new Nikon tags (thanks Jens Duttke and Gregor Dorlars) - Decode Canon CR2Segmentation tag - Decode a new Canon CustomFunction of the EOS 450D - Improved handling of mandatory tags in EXIF information - Changed all FocalLength print conversions to add a space before "mm" - Renamed Canon Self-timer tags to SelfTimer for consistency - Fixed some problem with -htmlDump for some types of trailer information - Fixed problem which could give a runtime warning when attempting to delete a permanent tag Jan. 17, 2008 - Version 7.13 - Decode a couple more Nikon and Sony tags - Decode Windows HD Photo "Padding" tag - Recognize HDP (Windows HD Photo) file extension - Designated EXIF CompressedBitsPerPixel and ComponentsConfiguration as "unsafe" tags so they aren't copied by -tagsFromFile by default - Changed priority of new Nikon D3/D300 ISO tag - Changed Canon LensType for a Tamron lens (thanks Monica Wallek) - Fixed incorrect TagID for new Panasonic Sharpness tag Jan. 15, 2008 - Version 7.12 - Added read support for ITC (iTunes Cover Flow) files - Added ability to deal with corrupted IPTC written by Nikon Capture NX - Added a few new Canon LensType's (thanks Steve Balcombe) - Decode a number of new Nikon D3/D300 tags (thanks Gregor Dorlars) - Decode a number of new FujiFilm and Panasonic tags and values - Decode ColorBalance information for the Canon 40D, 1DmkIII and 1DSmkIII - Improved decoding of Nikon D80 VibrationReduction tag (thanks Jens Duttke) - Renamed Pentax WBShiftBA and WBShiftGM tags to WBShiftAB and WBShiftMG (now more consistent with Pentax software, but inconsistent with Canon naming) - Fixed a CanonImageHeight tag which was incorrectly named CanonImageWidth Jan. 10, 2008 - Version 7.11 - Decode a number of new Canon tags and improved decoding of many old tags - Renamed EXIF:RelatedImageLength to RelatedImageHeight (hopefully all ImageWidth/Height tag names are now consistent) Jan. 7, 2008 - Version 7.10 - Added support for escape sequences and continuation comments in EPS files - Added ability to read/write Sony A700 PreviewImage (tag 0x2001) - Added a new Sony ColorMode value (thanks Philippe Devaux) - Decode a number of new Minolta tags - Improved handling of newlines when writing PDF information - Improved decoding of Canon 40D and 1DmkIII FocusDistance tags (thanks Wolfgang Hoffmann) - Fixed problem creating multiple output meta files with some commands - Fixed problem deleting XMP by value for strings with escaped characters - Fixed bug when trying to write output image to console with "-o -" - Fixed problem where %c (copy number) was changed when the new file name should have been the same as the source file Jan. 3, 2008 - Version 7.09 - Decode Canon ThumbnailImageValidArea - Improved decoding of some Olympus tags (thanks Frank Ledwon) - Improved decoding of some Pentax tags (thanks Dave Nicholson) - Improved error messages when writing PDF files - Changed XMP-cc namespace URI (spec apparently changed for some reason) - Changed Photoshop XMLData to a binary data tag - Changed conversion strings for Canon ModifiedSharpnessFrequency values - Changed Olympus NoiseReduction "ISO Boost" value back to "Noise Filter (ISO Boost)" - Fixed minor problem writing PDF cross-reference stream after multiple edits - Fixed problem redirecting some verbose output to an output text file Dec. 21, 2007 - Version 7.08 - Added write support for PDF files which use only cross-reference streams - Added a number of new Olympus tags, and changed names of some existing tags - Fixed problem decoding some PDF cross-reference streams - Fixed bug introduced in 7.07 which broke copying between two list-type tags Dec. 18, 2007 - Version 7.07 - Added ability to write XMP and PDF information to PDF files, with revert capability! (use "-PDF-update:all=" to undo all exiftool edits) - Added PDF:AppleKeywords tag (written by Apple Preview) - Added Composite FOV (Field Of View) tag - Added a few more Minolta/Sony LensID's - Added new Canon and Pentax LensType's (thanks Magne Nilsen and Jens Duttke) - Added "Nothing changed" message in verbose mode for files that weren't changed when writing - Added minor warning when invalid IFD entries are removed during writing (you will get this, for instance, when ExifTool fixes the entry count problem in Canon EOS 40D firmware 1.0.4 maker notes) - Patched Canon 40D firmware 1.0.4 problem for JPEG images too - Decode specified "unknown" zero values for four EXIF tags (ExposureProgram, LightSource, MeteringMode and SubjectDistanceRange) instead of handling as a truly unknown value (if this makes sense) - Extract PreviewImage from newer Panasonic RAW images (thanks Jens Duttke) - Recognize Pentax-type Kodak maker notes (eg. Easyshare 883) - Made "Entries out of sequence" a minor warning since this problem is fixed - Allow decimal seconds to be written in time values without needing to use -n - Improved parsing of PDF files - Improved behaviour when copying list-type tags to to non-List tags - Improved exiftool summary message for files that were copied without changes - Adjusted Pentax K10D battery percentage calibration - Changed names of Pentax FirmwareID tags - Fixed runtime warning that could occur with some invalid tag names - Fixed problem decoding Pentax:LensCodes for some images (thanks Jens Duttke) - API Changes: - Also allow File::RandomAccess reference as argument to ImageInfo() Dec. 7, 2007 - Version 7.06 - Permanently fix MakerNote offsets with -F option when writing - A few more Pentax tag improvements (thanks Dave and Jens) Dec. 6, 2007 - Version 7.05 - Patched problem rewriting Canon 40D CR2 images caused by bug in the 40D firmware 1.0.4 which writes an improperly formatted MakerNote IFD - More improvements in decoding Pentax K10D tags (thanks Dave Nicholson) - Translate non-standard XMP namespace prefixes - Changed a couple of Kodak Meta tags to Binary data type - Renamed Pentax MeasuredLV to EffectiveLV (thanks Jens Duttke) Dec. 3, 2007 - Version 7.04 - COMPATIBILITY WARNING: Renamed EXIF:ExifImageLength to ExifImageHeight and XMP:GPSTimeStamp to GPSDateTime - Added write support Minolta A200 MRW images - Added read support for Hasselblad 3FR raw images - Added a few new Nikon LensID's (thanks Robert Rottmerhusen) - Added a new Canon LensType (thanks Bogdan) - Added ability to insert a newline using "$/" in a print format string - Decode some new FujiFilm and Pentax tags (thanks Jens Duttke) - Decode some new Pentax and Canon tags (thanks Dave Nicholson) - Recognize a few new Olympus lenses (thanks Michael Meissner) - Improved decoding of Sony ARW images and added support for A700 - Improved warnings for HtmlDump option - Improved string parsing when writing date/time tags - Fixed problem extracting Canon CRW RGGB values from DNG images Nov. 17, 2007 - Version 7.03 - Fixed problem deleting XMP family 1 groups from JPEG images Nov. 16, 2007 - Version 7.02 - Added ability to delete XMP family 1 groups (eg. "-XMP-crss:all=") - Fixed problem writing XMP as a block to XMP file Nov. 15, 2007 - Version 7.01 - Added ability to write FujiFilm RAF images (thanks Jens Duttke) - Added -T option (equivalent to -t -S -q -f) - Decode a number of new Pentax tags and values (thanks Dave Nicholson) - Decode a new Canon LensType value (thanks Bogdan) - Decode the not-so-accurate FocusDistanceUpper and FocusDistanceLower in Canon EOS 1DmkIII and 40D images (thanks Heiko Hinrichs) - Allow FileSource tag to be assigned values outside the EXIF standard - Made ImageSourceData a protected tag - Avoid loading huge binary data blocks into memory unless necessary (avoids out-of-memory problem when processing huge, layered Photoshop TIFF images) - Improved HtmlDump speed and memory usage by not loading "snipped" data - Improved decoding of Nikon ShootingMode - Various improvements and bug fixes when reading FujiFilm RAF information - Fixed problem decoding CRW images where ImageWidth wasn't extracted with -U Oct. 23, 2007 - Version 7.00 (production release) - IMPORTANT: Fixed problem writing ORF images from newer Olympus cameras which could lead to errors when the image is opened by another utility (affected images may be repaired by rewriting with this version of ExifTool) - Added -ScanForXMP option - Added ability to extract ID3v2 PRIV tags (including XMP) and the ID3:MCDI tag (plus unknown ID3v2 tags with the -u option) - Added new PentaxModelID's for Optio V10 and A40 - Added support for Casio-like and HP-like Pentax maker notes - Added ICC_Profile WCSProfiles tag (thanks Jens Duttke) - Added ability to write and create CanonVRD as a block - Added ability to shift GPSTimeStamp tag - Added ability to write DNG AsShotICCProfile and CurrentICCProfile tags - Decode VRDOffset tag in Canon MakerNotes - Shortcuts may now be used in redirections and expressions, and with group names - Improved decoding of CanonVRD information (also decode new DPP 3.0 tags and fixed a problem which could give a "Possibly corrupt CanonVRD" warning) - Improved decoding of FujiFilm RAF images, and extract JPEG Preview - Improved handling of Pentax Casio-style maker notes - Improved conversion for Pentax K10D AFPointsInFocus - Enhanced Composite tag syntax to simplify user-defined tag definitions - Changed decoding of Nikon VibrationReduction 0x0075 tag - Changed a number of Pentax and Casio tags to improve consistency - Dump unsupported files with -htmlDump only if -u option is used - Fixed problem which could cause a virtual hang when writing large EPS files - Fixed problem of misleading error messages when attempting to write unsupported file formats - Fixed problem outputting list-type tags with -b option - Fixed bug where the "image files created" count could miss some files - Fixed problem where "Error rebuilding maker notes" warning could be issued in cases where the maker notes do not need rebuilding Oct. 6, 2007 - Version 6.99 - Added support for IView MediaPro XMP tags - Added ability to read multiple comments from GIF89a images - Added some new PentaxModelID's (Optio L20, T20, Z10) - Added minor warning for unknown JPEG APP segments when -u option is used - Extract information from JPEG APP13 "Adobe_CM" segment - Improved -htmlDump output to show TIFF image data and trailer (the TIFF dump is now complete) - Improved decoding of Minolta WhiteBalance for some DiMAGE models - Improved decoding of Panasonic FirmwareVersion when -n option is used - Increased precision of 64-bit rational conversion from 7 to 10 digits - Fixed problem which caused failed tests with Perl 5.005_05 - Fixed problem where some groups could not easily be excluded when deleting all other information (eg. "-all= --exif:all" now behaves as expected) - Fixed problem decoding ICC Profile "dtim" format values - Fixed typo in a Minolta FlashMetering value (thanks Jens Duttke) - Fixed problem in API which could result in a UTF-8 encoded file not being properly identified if it was passed as a scalar reference to WriteInfo() Sept. 23, 2007 - Version 6.98 - Added ExifByteOrder tag (writable to set byte order for new Exif segments) - Added CanonModelID for new EOS-1Ds Mark III - Added value conversions for Pentax AEFlashTv, AEXv and AEBXv tags - Decode Pentax ShutterCount (with help from Jens Duttke) - Decode Pentax AFPointsInFocus for newer DSLR models (thanks Jens Duttke) - Improved decoding of a Pentax LensType (thanks Jens Duttke) - Renamed Pentax AutoAFPoint to AFPointsInFocus and improved conversion - Renamed Pentax AEDump to AEMeteringSegments and converted values to approximate LV equivalent units - Fixed problem where some warnings were not being properly handled when attempting to write an invalid value to some tags Sept. 14, 2007 - Version 6.97 - Added support for Canon EOS 40D Custom Functions - Added ability to decode new Nikon D3 and D300 LensData - Added a few new Nikon LensID's (thanks Robert Rottmerhusen) - Decode Olympus NoiseFilter tag (thanks Ioannis Panagiotopoulos) - Decode a few new Nikon ShotInfo tags (thanks Jens Duttke) - Improved decoding of Canon AF point information - Improved decoding of Nikon HighISONoiseReduction - Renamed Nikon VRState to VibrationReduction - Fixed typo which prevented some Olympus MakerNote tags from being written Sept. 5, 2007 - Version 6.96 - Added ability to read/write XMP alternate languages - Added ability to create new GPS information in Panasonic RAW images - Added a few new PentaxModelID's (Optio E40, M40 and S10) - Added a couple of new Pentax LensType's (thanks Jens Duttke) - Added a new Olympus Sigma LensType (thanks Jens Duttke) - Added EOS 40D CanonModelID and prepared for new 40D custom functions - Decode a large number of new Canon tags - Decode SerialNumber from previously unknown maker notes of some Kodak models - Decode Olympus ImageStabilization tag (thanks Jens Birch) - Improved decoding of Canon Self-timer and AFPoint values - Improved decoding of some tags for high end Canon EOS models - Renamed Pentax LensCoefficients to LensCodes and print 16 values - Renamed Panasonic ImageStabilizer to ImageStabilization - Renamed all AFPointsUsed tags to AFPointsInFocus - Fixed decoding of ICC_Profile DeviceAttributes Aug. 21, 2007 - Version 6.95 - Added support for new Kodak IFD-format makernotes used by the P712, P850, P880, Z612 and Z712 - Added a few new Nikon LensID's (thanks Robert Rottmerhusen) - Added LensType's for 2 new Pentax DA* lenses (thanks Jens Duttke) - Added 2 new FujiFilm S5 WhiteBalance values (thanks Paul Samuelson) - Added a number of new CanonModelID's - Extract TIFFPreview from DOS EPS images - Decode a number of new Panasonic tags, and added a number of new SceneMode's - Decode FujiFilm S5 ColorTemperature tag (thanks Paul Samuelson) - Improved handling of unknown XMP list-type tags - Suppress EPS 'unterminated Document data' warning - Fixed decoding of ASCII-type Panasonic FirmwareVersion - Fixed bug calculating leap years for years outside the range 1601-2399 - API Changes: - Changed WriteInfo() behaviour to be more consistent when editing file in place and a new FileName is specified (original file is now deleted) - Improved warning message when trying to write an 'unsafe' tag July 26, 2007 - Version 6.94 - Added a few new XMP-crs tags - Added ability to create a new Photoshop IRB record in TIFF-format images - Added a few new EXIF:Compression values (thanks Jens Duttke) - Added a number of new Panasonic/Leica tags, and changed the names of some Panasonic tags, including reverting FirmwareVersion (thanks Jens Duttke) - Added test for Unknown (Bulb) Pentax ExposureTime value (thanks Jens Duttke) - Added a new Nikon LensID (thanks Vladimir Sauta) - Avoid extracting information from documents embedded in EPS images (this is temporary; eventually I want to figure out a way to allow this information to be extracted separately) - Decode Red/BlueBalance from Leica Digilux 2 RAW images (thanks Jens Duttke) - Changed conversion for Sony A100 Rotation tag to conform to EXIF:Rotation - Changed decoding of one of the Pentax ExternalFlashBounce tags (thanks Michael Meissner) - Extract EncodingProcess, BitsPerSample, ColorComponents and YCbCrSubSampling from JPEG SOF segment - Show raw horizontal/vertical widths in the converted YCbCrSubSampling value - Improved conversion of some Pentax tags (thanks Jens Duttke) - Avoid loading data blocks larger than 16MB from QuickTime images - Allow PDF:Keywords to be comma-delimited - Fixed problem where a tag would be removed from both IFD0 and ExifIFD even if only IFD0 or ExifIFD was specified - Fixed problem with byte order mark showing up in output when decoding hex-encoded Unicode values from PDF images - Fixed problem where ExifTool could hang when reading corrupted ASF files - Fixed possible problem with infinite recursion in FlashPix-format files July 6, 2007 - Version 6.93 - Added read support for BigTIFF images (with extensions BTF, TIF and TIFF) - Added a number of new Olympus tags and fixed decoding of a few others (thanks Jens Duttke) - Added a number of new SigmaRaw tags (found in SD14 X3F images) - Changed conversion for Canon LensType 152 (used by various Sigma models) - Fixed problem editing XMP containing new "Camera Raw Saved Settings" properties (written by Adobe Lightroom) June 29, 2007 - Version 6.92 - Added read support for FLV (Flash Video) files - Added read support for EXIF and IPTC and write support for EXIF, IPTC and XMP in JPEG 2000 images - Added read/write support for Sinar CS1 raw images - Added read support for Kodak DCR and K25 raw images - Added ability to read/write improperly byte-swapped IPTC information - Added check for infinity value of Casio ObjectDistance - Added a new Nikon LensID (thanks Bruce Stevens) - Improved decoding of APP12 "Ducky" segment (thanks Heinrich Giesen) and added write/create support - Improved handling of warning messages when setting new values - Changed print conversion for Olympus PictureModeSaturation, PictureModeContrast and PictureModeSharpness to label min and max values - Fixed problem introduced in 6.91 when writing some EPS images - Fixed group names for Pentax CameraInfo tags - Fixed bug which could result in negative Canon SerialNumber values - Fixed decoding of some Canon EOS 1DmkIII custom function values - Fixed problem copying subdirectories in new-style Olympus maker notes - Fixed problem of missing last character when decoding ID3 Unicode strings - Fixed problems decoding some ID3 URL values - Fixed inconsistency where the -if option may have used a different tag than the one normally extracted when a group name was specified and multiple matching tags existed in the group June 5, 2007 - Version 6.91 - Added support for new XMP-lr, XMP-photoshop and XMP-DICOM tags of PS CS3 - Added new Sigma lens to Pentax LensID list - Added a few new Nikon and Canon LensID's (thanks Jens Duttke) - Added Canon IXY Digital 810 IS to CanonModelID - Recognize Photoshop "AgHg" resource type - Removed "warnings" dependency in exiftool application - Updated XMP:FileSource values to match EXIF:FileSource - Greatly improved processing speed for some large EPS images - Improved handling of XMP date/time formatting - Officially support writing of MEF images - Applied patch to convert Pentax LensType for changes in K10D firmware 1.2 - Fixed decoding of Pentax BatteryBodyGripStates (thanks Jens Duttke) May 10, 2007 - Version 6.90 (production release) - Added CanonModelID values for new PowerShot S5 IS and SD850 IS - Encode IPTC values in default CodedCharacterSet when writing new values at the same time as deleting the existing CodedCharacterSet - Renamed Nikon FirmwareVersion to MakerNoteVersion and Panasonic FirmwareVersion to ProductionVersion (thanks Jens Duttke) - Allow EXIF GPS coordinates to be negative when writing (take absolute value) - Revert "$evalWarning" fix (false alarm) May 7, 2007 - Version 6.89 - Added support for maker notes of some Hewlett-Packard models - Decode Pentax ImageProcessing tag - Fixed problem which gave "$evalWarning" errors on some systems May 2, 2007 - Version 6.88 - Added read support for Mamiya MEF images - Implement long overdue change to standardize FocalPlaneResolutionUnit values - Decode Panasonic BabyAge + some new ShootingMode values (thanks Jens Duttke) - Improved recognition of maker notes for some camera models - Fixed bug that could cause an incorrect "tag is not writable" warning - Fixed problems converting WDP PixelFormat values - Fixed decoding of Canon 350D AFPointsUsed (thanks Bogdan) - API Changes: - Added option to allow makernote block to be extracted without rebuilding Apr. 26, 2007 - Version 6.87 - Added read/write/delete support for recognized trailers in PSD images - Added PhotoMechanic IPTC:Prefs tag - Added ability to decode double-UTF-encoded XMP files - Added a few more Canon, Pentax and Nikon lens types (thanks Hayo Baan and Robert Rottmerhusen for Nikon entries) - Added ability to create new user-defined MIE groups - Decode a new Nikon lens tag: ExitPupilPosition (thanks Robert Rottmerhusen) - Increased precision (from 20m to 2mm) when writing XMP GPS coordinates - Renamed Panasonic SpotMode tag to AFMode and improved decoding - The -e (Composite) option now also applies when copying tags - Minor changes to IPTC verbose output and error handling - Minor changes to a few warning messages - Avoid converting XMP values as rational or date if tag is known and not specified with these formats - Identify CR2 header and Canon MakerNote footer in -htmlDump output - Reverted change from version 6.85 to once again allow JPEG thumbnails to be written to TIFF-type images (perfectly valid for many TIFF-based RAW formats even though it isn't technically correct in a proper TIFF) - Added test to check for invalid encoding when Image::ExifTool is loaded - Fixed problem shifting Canon:TimeStamp tag - Fixed failed FlashPix test on Cygwin Perl 5.8.2 (roundoff errors again) - Fixed problem where some types of write errors could result in exiftool reporting that a file was updated when it wasn't Apr. 10, 2007 - Version 6.86 - Added -execute, -srcfile and -common_args options to allow complex processing with multiple commands in a single invocation - Added ability to write Panasonic RAW files - Added Panasonic ConversionLens tag - Improved decoding of Panasonic/Leica Contrast and SpotMode tags - Changed -@ to insert arguments at the current position in the command line (rather than at the end) - Once again automatically fix Canon maker note offsets (this feature was removed in 6.84 due to a bug bug report that turned out to be a false alarm) - Fixed bug in -if option which could incorrectly cause a failed condition when using expressions containing multiple tags with proper-case names - Fixed problem extracting binary data when -if option was used - Fixed bug which caused error when setting CodedCharacterSet to "UTF8" - Fixed decoding of InternalSerialNumber for FujiFilm FinePix F40fd - Fixed problem using "-TAG+<=FMT" or "-TAG-<=FMT" on command line Apr. 3, 2007 - Version 6.85 - Prevent JPEG thumbnail image from being written to TIFF-type images - Fixed a couple of problems decoding Canon EOS 1D Mark III tags - Fixed bug which generated an error message when rewriting maker notes in Adobe-edited Pentax K10D native DNG images Mar. 30, 2007 - Version 6.84 - Added a number of new XMP-crs tags, plus new XMP-lr (Adobe Lightroom) group - No longer automatically fix Canon makernote offsets (but still use makernote footer if present to calculate recommended fix) - Fixed problem where some errors were not properly counted in the summary statistics with the -overwrite_original_in_place option - Fixed problem parsing XMP shorthand format for values containing '=' symbol Mar. 24, 2007 - Version 6.83 - Automatically fix corrupted makernote offsets when reading images from Canon models which include a makernote offset footer - Added CanonModelID and CameraType values for 2 new Canon DV cameras - Renamed SPIFF ResolutionUnits tag to ResolutionUnit - Fixed formatting of GPSTimeStamp value Mar. 20, 2007 - Version 6.82 - Added read/write support for new Canon EOS-1D Mark III custom functions - Made a few makernotes warnings minor when writing - Append "mm" to FocalLengthIn25mmFormat value - Fixed problem which could cause "uninitialized value" warning when writing - Fixed problem writing Canon EOS D60 custom functions Mar. 17, 2007 - Version 6.81 - Added l/u modifiers for lower/uppercase in filename format codes (eg. "%le") - Added equivalent IXY names to CanonModelID for PowerShot SD750 and SD1000 - Added a few new Pentax ModelID's (Optio E30, T30, W30, A30) - Allow non-encrypted Nikon ColorBalance values to be written - Fixed problem where some encrypted Nikon information was not properly protected against writing Mar. 14, 2007 - Version 6.80 - Added Olympus ManometerReading tag - Added ability to edit private IPTC and XMP information found inside PhotoshopSettings record of TIFF images - Renamed NikonShotInfoVers tag to ShotInfoVersion and added MultiExposureVersion tag - Search further in MPEG file to look for first audio/video frame headers - Use default resolution information from JPEG JFIF segment for mandatory EXIF resolution tags when creating new EXIF segment - Enhanced %c format code so %+c adds an underline before the copy number Mar. 7, 2007 - Version 6.79 - Translate special characters in ID3 information when reading - Improved conversions for GPSTimeStamp and GPSDateStamp when writing so they can be set from a normal date/time tag (eg. "-gpstimestampDSTTAG") - Added a few more Canon EasyMode values (thanks Samson Tai) - Added CanonModelID values for new A450, A460 and A550 - Changed the -if option so the condition automatically fails if the expression generates a warning (use -v to show the warning) - Specified LF character (0x0a) for MIE text newline sequence - Catch warnings if perldoc doesn't exist when running with no arguments - Minor tweaks/fixes to htmldump output Jan. 19, 2007 - Version 6.70 - "IPTC Character Coding" - Translate coded characters in IPTC string values (UTF8 and Latin only), and assume Latin encoding if no CodedCharacterSet (see FAQ #10 for details) - Enhanced IPTC:CodedCharacterSet print conversion so "ESC % G" is now printed as "UTF8" (either may be used when writing) - Specified ISO 8859-1 character set for MIE ASCII string values - Added warnings for UTF-8 conversion errors - Decode a few new Pentax tags - Decode maker notes in Pentax DNG images Jan. 8, 2007 - Version 6.69 - Decode information in NikonScanIFD - Enhanced -p option to allow expressions to be used - The -p option no longer suppresses error and warning messages - Made ImageSourceData writable - Reduced font size of htmldump output - Fixed "Argument isn't numeric" error when reading an image with a missing IFD offset Jan. 3, 2007 - Version 6.68 - Added mechanism to allow Composite tags to be writable - Recognize XMP sidecar files that begin with a UTF BOM (byte order mark) - Changed TIFF ImageSourceData tag to a Binary data type - Fixed problem which could cause warning when writing XMP in PNG images - Fixed bug when shifting times in an XMP sidecar file that caused an invalid date/time to be written if the tag didn't previously exist - Fixed problem where writing to a JPEG image containing a PreviewImage could report that the file was updated even if nothing was changed Dec. 30, 2006 - Version 6.67 - "Adobe DNGPrivateData" - Added ability to write MakerNote information written by Adobe DNG Converter - Added ability to copy Adobe MakerNote and CRW information from DNG images - Added ability to read/write Adobe CRW and MRW information in DNG images - Added ability to read Adobe SR2 information in DNG images - Added a few more Nikon LensID's (thanks Robert Rottmerhusen) - Added ability to delete a specific MIE document in multi-document files - Improved handling of tags in multi-document MIE files - Improved verbose and htmlDump output for unknown JPEG trailers - Improved handling of ignored minor errors when writing MakerNotes - Decode Panasonic LensType tag - Changed description for Canon:OwnerName tag - Minor changes to HtmlDump output - Fixed parsing of XMP date/time values with no seconds Dec. 20, 2006 - Version 6.66 (production release) - Added a few more Pentax K10D PictureMode's (thanks Axel Kellner) - Added a few new Nikon LensID's and Olympus LensType's - Added Canon 1D PictureStyle's - Updated CanonModelID strings for a few new models - Changed tagID for MIE:GPSDifferential - Minor change to MIE specification for unknown data formats (MIE 1.1) Dec. 15, 2006 - Version 6.65 - "MIE 1.0" - Added ability to read/write MIE trailers in JPEG and TIFF images - Added a number of new MIE tags and changed some existing tags - Added support for units in MIE values - Added new Pentax K10D PictureMode's (thanks Axel Kellner) - Avoid creating non-native groups in MIE, PNG and EPS images unless necessary - Fixed problem with -P option so it now works when -o option is used - Fixed bug where 'all' was replaced with '*' in redirection expressions - Fixed "APP1 segment too large" error when copying all tags from some Canon CR2 images to a JPEG (fixed initially in 6.08, but broken again in 6.47) Dec. 8, 2006 - Version 6.64 - Added Nikon ImageAuthentication tag (thanks Jeffrey Friedl) - Added Canon RecordMode and OpticalZoomCode and Composite DigitalZoom tag - Applied FocalUnits scaling to Canon ShortFocal, LongFocal and ScaledFocalLength tags, and renamed ScaledFocalLength to FocalLength - Allow (but ignore) leading family number on tag group when writing - Fixed calculation of 35mm scaling factor when Canon digital zoom is applied - Fixed bug which could cause "'x' outside of string" error when reading Nikon images with the -U option Dec. 6, 2006 - Version 6.63 - Changed the sense of the '-' modifier for the new '%c' format code Dec. 6, 2006 - Version 6.62 - Added '%c' format code to add copy number if output file exists - Added a couple of new Nikon LensID's (Werner Kober, Robert Rottmerhusen) - Made -htmlDump tag names purple if actual offset differs from stored offset Dec. 4, 2006 - Version 6.61 - MakerNotes offsets are now permanently fixed when the makernotes are copied using -tagsFromFile with the -F option - Fixed typo in MakerNoteSanyoC4 tag name of MakerNotes shortcut - Minor improvements to htmldump style Dec. 2, 2006 - Version 6.60 - Added -k option of stand-alone version to regular distribution - Fixed bug adding/deleting XMP tags in a list (introduced in 6.50) - Fixed decoding of Canon 5D LongExposureNoiseReduction - Fixed problem writing AFCP where incorrect offset could be written - Fixed bug in -p option which caused it to abort if all tag names were contained in braces (thanks Joel Becker) - Stand-alone Windows executable: - Print application documentation after "No file specified" warning Nov. 30, 2006 - Version 6.59 - Do not delete IFD1 when deleting all meta information from a TIFF image - Added a couple of new CanonImageSize values: "Postcard" and "Widescreen" - Added a few new Olympus LensType's (thanks Lilo Huang for one) - Improved handling of invalid date values - Fixed "divide by zero" warning if FocalPlaneXYResolution is "inf" - Fixed incorrect "unknown trailer" verbose message when writing JPEG images - Stand-alone Windows executable: - Allow quoting of options embedded in executable name Nov. 25, 2006 - Version 6.58 - Added a few more Nikon LensID's (thanks Robert Rottmerhusen) - Added missing print conversion for RIFF DateTimeOriginal - Improved HTML 4.01 compliance of -htmlDump output - Lowered priority of ID3v1 tags so ID3v2 takes precedence if both exist - Minor change to names of some Vorbis and APE tags - Made Ogg file type all capitals - Patched problem which could cause ExifTool to die if input file is corrupt - Fixed GPSDOP description (GPS Dilution of Precision, thanks Greg Troxel) - Fixed problem which could generate a run-time error when attempting to write to a corrupted JPEG image - API Changes: - GetFileType() may now also be used to return a file description Nov. 19, 2006 - Version 6.57 (production release) - Missing tags in -p and redirection expressions are now set to an empty string ('') by default, or a dash ('-') if the -f option is used - Added ability to use %f,%d,%e tokens in "-TAG<=FILE" argument - Added new Nikon LensID (thanks Werner Kober) - Set missing tags to '' instead of '-' in redirected expressions if -m used - Renamed LV tag to LightValue - Improved decoding of Sony DSLR-A100 maker notes - Attempted to clarify date/time shift documentation in Shift.pl - Fixed bug which could result in CanonVRD information not being recognized - Fixed bug in new SetResourceName feature of user-defined Photoshop tags - First release of stand-alone Windows executable - API Changes: - Added MissingTagValue option Nov. 15, 2006 - Version 6.56 - "Audio Update" - Added read support for a number of audio file formats: Ogg Vorbis, Ogg FLAC, FLAC, APE (Monkey's Audio) and MPC (Musepack) - Improved parsing of ID3 v2.3 and v2.4 information - Added a number of new Pentax *istD tags (thanks Douglas O'Brien) - Added ability to print processed file names when writing (-v0 option) - Patched problem with makernotes offsets in Sanyo C4 images - Fixed problem that prevented some Olympus RAW files from being written - Fixed bug where XMP values could be improperly converted as a rational Nov. 8, 2006 - Version 6.55 - Added read/write support for Canon VRD (Recipe Data) files and trailers - Changed name of CanonDPP module and group to CanonVRD Nov. 3, 2006 - Version 6.54 - Added write support for ORF (Olympus RAW) images - Added Panasonic TravelDay tag (thanks Marcel Coenen) - Show Photoshop resource block names in verbose output, and preserve these names when copying tags from file - Changed write format of Nikon WhiteBalanceFineTune from int16u to int16s (thanks Giridhar Appaji Nag) - Allow Flags to be used in UserDefined tags - Added trailer signature to MIE format specification - Fixed problem with the -list and -listw options (dynamically loaded tags weren't appearing in the list) Nov. 1, 2006 - Version 6.53 - IMPORTANT: Fixed bug introduced in 6.51 which could result in a corrupted image (!!) when rewriting TIFF-format files containing an unknown trailer (this includes all TIFF-based RAW formats except CR2). The good news is that unknown trailers should be very uncommon, and nobody has reported any problems yet, so with any luck I caught this before it affected anyone. But please update immediately to 6.53 if you downloaded 6.51 or 6.52. Nov. 1, 2006 - Version 6.52 - Added read/write support for trailers in CRW images - Dropped historic support for obsolete -group# option Oct. 31, 2006 - Version 6.51 - "Trailer Update" - Improved handling of trailers in JPEG and TIFF-format images: - Added read/write support for PhotoMechanic and FotoStation trailers - Recognize and handle Canon DPP trailers - Added AFCP trailer read/write support for TIFF (previously JPEG only) - Added ability to read/write multiple trailers in the same image - Trailers are now dumped with verbose and htmlDump options - Trailers are now deleted when deleting all tags - Added ability to delete trailers individually by group or altogether with "-Trailer:all=" - Changed reading/writing XMP in PNG images to conform with XMP specification (but continue to support the XMP profile format used previously) - Avoid writing duplicate XMP tags in less common namespaces - More consistent handling of unknown IPTC tags - Added -listd option to list deletable groups - IPTC time-only tags may now be set from date/time values (this already worked for date-only tags) - Fixed problem rewriting international text (iTXt) chunks in PNG images - API Changes: - Added GetDeleteGroups() routine Oct. 26, 2006 - Version 6.50 - Changed name of new "-eval" option to "-if" - Added read support for PhotoStudio Unicode comment (thanks Dec Anisimov) - Recognize the "PHUT" Photoshop IRB resource type (thanks Dec Anisimov) - Extract PhotoshopBGRThumbnail image from Photoshop information - Write PNG compressed text for new tags when -z option is used - Added ability to write PNG:ModifyDate - Don't print Olympus LensType "release" if used to differentiate lenses - Changed TagName documentation to show actual format written instead of format used to interpret the data (which differs only for a few odd tags) - Fixed bug in PNG writer which could cause duplicate tags to be written - Fixed minor problem in HtmlDump output - Fixed logic bug when writing XMP using += or -= Oct. 21, 2006 - Version 6.49 - Added -eval option for conditional batch processing [changed to -if in 6.50] - Allow .ExifTool_config file to be placed in application directory - Decode copyright information from JPEG APP12 "Ducky" segment - Decode Casio FirmwareDate - Added IFD0 ProcessingSoftware tag (0x000b, written by ACD Systems) - Added print conversion for InteropIndex - Write InteropVersion automatically when creating a new InteropIFD - Made RelatedImageFileFormat writable - Protect all InteropIFD tags from being copied by default with -TagsFromFile - Renamed XMP ExifImageHeight to ExifImageLength (to correspond with EXIF tag) Oct. 19, 2006 - Version 6.48 - Decode Minolta 7D FlashExposureComp (thanks Jeffery Small) - Decode InternalSerialNumber from newer FujiFilm models - Improved decoding of new Pentax PictureMode tag (thanks Doug O'Brien) - Updated CustomFunctions in Canon CRW images and recognize CIFF extension - Added a couple new Pentax LensType's (thanks Barney Garrett) - Changed "AdobeRGB" to "Adobe RGB" in all ColorSpace values for consistency - Fixed bug in recent update to extract large preview from Epson JPEG images - Fixed problem in -htmldump output introduced in 6.46 - Various documentation improvements and updates Oct. 15, 2006 - Version 6.47 - Decode JPEG APP6 "EPPIM" segment used in Toshiba images - Process PICT images to extract JPEG preview when -u option is used - Added OtherImage composite tag - Added PentaxModelID for K110D and a new K110D PictureMode tag - Fixed problem extracting CoverArt from some MP4 audio files - Fixed problem decoding Canon BulbDuration (affects Composite ShutterSpeed) - Fixed problem reading/writing large Epson preview image in R-D1 JPEG images and allow large (>64kB) preview images for all make/models Oct. 11, 2006 - Version 6.46 - The "-ext" option now overrides internal file selection rules - Expand filename wildcards on Windows command line (thanks Marjolein Katsma) - Enhanced warnings when copying information to a specific tag - Changed family 0 group name: GPS->EXIF - Changed family 1 group names: APP12->PictureInfo,GraphicConverter->GraphConv - Added a couple of new Pentax LensType's - Added JPEG.pm module (mainly for documentation purposes) - Fixed bug when re-writing NEF files which caused new preview image written by Nikon Capture 4.4.0 to be lost - Fixed bug which could cause problems if a user-defined composite tag is created with the same name as an existing tag Oct. 6, 2006 - Version 6.45 - Added ability to create JFIF segment - Decode information in JPEG APP8 "SPIFF", APP12 "Ducky", and APP15 GraphicConverter segments - Improved html dump feature to dump all JPEG APP segments - Decode maker notes in FujiFilm AVI videos - Renamed Nikon AFMode tag to AFAreaMode (thanks Tobias Briseno) - Changed "Image Quality" description to "Quality" - Added option to allow the htmlDump base offset to be specified - Changed EV tag name to LV since this is technically more correct - Print warnings if syntax problems are found in .ExifTool_config file - Use HOMEDRIVE and HOMEPATH (Windows cmd shell environment variables) for .ExifTool_config path if neither EXIFTOOL_HOME nor HOME are available - Fixed some problems which were causing failed tests when using ActivePerl - User-defined Composite tags now override composite tags of the same name - Added a few more PentaxModelID's (K10D, A20, M20, W20) Oct. 2, 2006 - Version 6.44 - Now deletes all JPEG APP segments when deleting all information - Decode Ricoh APP5 RMETA information (custom fields in Caplio Pro G3 images) - Decode AVI Audio/Video stream headers - Recognize and preserve PhotoMechanic trailer when editing TIFF-based images - Added ability to delete JFIF, CIFF, Meta and FlashPix groups - Added ability to exclude groups when deleting all information - Added a number of new Canon, Nikon, Pentax, Sony and Minolta tags - Added description for GPSDOP tag (GPS Degree Of Precision) Sept. 26, 2006 - Version 6.43 - Added read support for M4A audio files - Simplified and documented technique for adding user-defined Composite tags - Issue minor warning when a tag used in an expression doesn't exist, instead of silently inserting a '-' (use -m option for previous behaviour) Sept. 21, 2006 - Version 6.42 (production release) - Re-worked Sony and Minolta LensID lists and added a number of new lenses - Extract maker note information from Sanyo MOV and MP4 videos - Recognize ARW extension of Sony Alpha-100 RAW images - Improved extraction of PreviewImage from damaged Minolta images Sept. 18, 2006 - Version 6.41 - Fixed calculation of Canon ISO in some images and renamed ShotISO to BaseISO - Minor improvment to order of operations when deleting multiple groups and adding back information in batch mode Sept. 14, 2006 - Version 6.40 - Added ability to delete a group and write back information in one step - Compatibility Warning: This changes previous behaviour when adding and deleting information in the same operation if new tag values are set after a group has been flagged for deletion - Fixed problem writing to specific MIE groups - Minor improvements to verbose output while writing - Added a few new CanonModelID's (PowerShot G7, SD900, SD800IS, SD40) Sept. 12, 2006 - Version 6.37 - Decode Sony LensID's (thanks Thomas Bodenmann) - Added another Canon LensType - Added shortcut MakerNotes tag to represent the maker notes tags from all manufacturers (useful when copying tags between files) - Improved MPEG decoding and calculate approx. Duration based on avg. bitrate - Issue a minor error when rewriting an empty IFD (previously this was fatal) - Print 2 decimal points of MeasuredEV (avoids round-off errors resulting in failed tests on some systems) Sept. 6, 2006 - Version 6.36 (production release) - Added a few more Canon LensType's - Improved decoding of Canon 400D ExposureTime and FileNumber - Decode AFPointsUsed for PowerShot models with 9 AF points - Fixed decoding of Canon 5D PictureStyle Sept. 5, 2006 - Version 6.35 - Added Canon NumAFPoints tag - Added support for Canon 400D custom functions - Renamed Canon AFPointsUsed20D to AFPointsUsed and decode for 30D and 400D - Changed phrasing in a text string to bypass bug in rpm build causing it to obtain incorrect dependencies Sept. 3, 2006 - Version 6.34 - Removed empirical offset from Canon:MeasuredEV Sept. 1, 2006 - Version 6.33 - Added Composite:EV and Canon:MeasuredEV tags [comments welcome] Sept. 1, 2006 - Version 6.32 - Decode a new value of "Auto High" for Canon CameraISO - Added new Canon AutoISO tag, renamed Canon:ISO tag to ShotISO, and added a new composite ISO tag to give the ISO that was actually used - Decode CanonModelID's for recently announced Canon cameras (400D, etc) - Decode PentaxModelID for Optio S7 - XMP Changes: - Added support for rdf:nodeID attribute in XMP information - Changed XMP file MIME type from application/xmp to application/rdf+xml to correspond with XMP specification - Write 'rdf:about' instead of 'about' (unqualified use now deprecated) - Don't write blank-line padding (as per XMP spec) for .XMP files - Fixed problem extracting XMP information from some EPS files - Fixed typos in some (not commonly used) XMP namespace URI's - Fixed FocalLength conversion for some Pentax-built BenQ and Samsung models Aug. 23, 2006 - Version 6.31 - Decode a number of new values for FujiFilm PictureMode (thanks Michael Meissner) - Properly parse AVI DateTimeOriginal tag when month name is all capitals - Improved compatibility when running "exiftool" with no arguments (thanks Jesse Zhang) - Added support for Nikon D80 lens information and recognize a new lens (thanks Robert Rottmerhusen) - Improvements to Pentax maker note decoding (thanks Ger Vermeulen) - Fixed problem when extracting information from image in memory when the UTF-8 flag is set for the image data (fixes install on RHEL 3) July 28, 2006 - Version 6.30 - Added ability to read/write APP0 CIFF segment (found in Canon PowerShot A5 and PowerShot Pro 70 images) - Improved decoding of Canon 30D FileNumber (was ShutterCount) - Made EXIF tags ImageNumber and ImageHistory writable - Fixed decoding of TargetExposureTime for Canon 20D/250D and ExposureTime for Kiss Digital N - Fixed problem processing GIF images which don't contain a color table - Fixed bug in EXIF tag name documentation introduced in 6.12 where ExifIFD group was not properly shown - Fixed typo in exiftool pod documentation ("GROUP:TAG" was reversed) July 24, 2006 - Version 6.29 (production release) - Added XMP-xmpMM:PreservedFileName tag (used by Photoshop CS) - Fixed problem reading TIFF images which don't start at the beginning of the file July 12, 2006 - Version 6.28 - Fixed bug introduced in 6.04 which prevented PNG tags from being deleted - Improved decoding of Canon PictureStyle information July 7, 2006 - Version 6.27 - Decode a number of new tags in Canon, Casio, FujiFilm, Minolta, Nikon, Panasonic, Pentax, Ricoh and Sony and maker notes - Improved recognition of various Minolta maker note formats - Added a number of new Nikon Capture tags - Added support for XML-formatted XMP files - Properly handle mixed linefeed characters in PostScript images - Improved formatting of DICOM date/time values - Added "Actual Offset" entry to HtmlDump tooltip information June 27, 2006 - Version 6.26 - Avoid creating new SubIFD when copying all tags with "-all:all" from a RAW or TIFF image (this gave problems if image was subsequently edited by PSCS2) - Fixed decoding of a few Nikon LensID strings - Minor fixes and changes to htmlDump and verbose output - Added a new Pentax LensType (thanks Kazumichi Kawabata) June 19, 2006 - Version 6.25 - Added read/write support for WDP (Windows Media Photo) images - Improved algorithm to recognize maker notes offsets which need fixing - Properly handle maker notes which have value offsets relative to the individial IFD entries (Kyocera, Rollei and some Konica and Toshiba models) - Decode a couple of new Sigma lens values in Canon LensType - Decreased block size for buffered files to improve performance over slow pipes June 9, 2006 - Version 6.24 - Added -fast option to avoid scanning to the end of JPEG images to check for an AFCP or PreviewImage trailer - Recognize PS files which start with %!Adobe-PS instead of %!PS - Improved FlashPix verbose output - API Changes: - Added FastScan option June 7, 2006 - Version 6.23 - Added new feature allowing tag-name expressions to be used with the -TagsFromFile option June 5, 2006 - Version 6.22 - Added read support for FPX (FlashPix) images and FPXR (FlashPix Ready) JPEG APP2 meta information - Added AllDates shortcut tag to allow DateTimeOriginal, CreateDate and ModifyDate to all be written via a single tag - Added shortcuts to tag name documentation - Return "0000:00:00 00:00:00" instead of "1970:01:01 00:00:00" as the string representation of numerical times with a value of zero May 26, 2006 - Version 6.21 - Changed CR2 identification logic to properly identify CR2 images which have been edited by PhotoMechanic May 24, 2006 - Version 6.20 - Added read support for Real audio/video (RA, RM, RV, RMVB, RAM, RPM) files - Downgraded "Error reading value..." message from an error to a warning - Fixed bug where IgnoreMinorErrors option could get set when writing images with NikonCapture information - Fixed two ID3 tag names which contained spaces - Fixed problem parsing DateTimeOriginal in Casio EX-Z30 AVI files - Fixed problem with apostrophes in HTML documentation for some browsers - API Changes: - Can now call Options() with undefined value to set option value to undef May 16, 2006 - Version 6.19 - Added read support for SWF (Shockwave Flash) files May 15, 2006 - Version 6.18 - Added read support for MPEG audio/video files - Decode audio information in MP3 files - Print Nikon:LensPosition in hex May 12, 2006 - Version 6.17 (production release) - Fixed problem with rpmbuild on Mandriva 2006.0 (thanks Niels Kristian) - Fixed typo in iptc2xmp.args and xmp2iptc.args which prevented the XMP Instructions from being copied properly (thanks Mark Tate) - Handle byte order mark in unicode EXIF strings May 8, 2006 - Version 6.16 - Write %ADO_ContainsXMP comment when adding XMP to EPS images - Don't issue DSC warning when writing Adobe version 3.1 EPS images - Added separate table for decoding tags in IFD0 of Panasonic RAW images - Improvements to Nikon AF point decoding (thanks Roger Larsson) - Allow .ExifTool_config directory to be specified by setting the EXIFTOOL_HOME environment variable - Made all maker note write errors minor so they can be ignored if necessary, allowing information to be written to images with corrupted maker notes - Minor change to perl-Image-ExifTool.spec to fix problem with rpmbuild (thanks Volker Kuhlmann) - Fixed bug which could cause incorrect date to be calculated when shifting date/time values Apr. 20, 2006 - Version 6.15 - Changes to MIE specification involving string lists and alternate languages Apr. 18, 2006 - Version 6.14 - Fixed some problems with EPS writer and removed beta testing status (thanks to Tim Kordick for help with testing) - Created new MIE meta information format [Note: The MIE module is fully functional but the MIE format specification is still in development] - Added print conversion for SpatialFrequencyResponse - Extended meaning of -z option when writing to allow compressed information to be written to MIE files - Added Minolta FlashMetering tag - API Changes: - Added 'Compress' option Apr. 9, 2006 - Version 6.13 - Fixed problem with writing FileName that caused format codes not to be properly expanded if the specified filename already existed - Standardized reported FileType for ACR, AIFC, CRW, JP2, PS and PSD files - Allow 2 values to be written for EXIF TimeZoneOffset and make EXIF SecurityClassification writable Apr. 5, 2006 - Version 6.12 - Avoid printing garbage for DNG maker note information that was not copied properly by the Adobe DNG converter (affects converted ORF images) - Disabled "Possibly incorrect maker notes offsets" warning for a number of Olympus models - Fixed bug introduced in 6.04 which could cause endless loop (eeek!) when writing tags with PostScript equivalents - Fixed error reading some DICOM images Apr. 3, 2006 - Version 6.11 - Added a few new Pentax LensType's - Fixed bug rewriting MOS images (this bug introduced in version 5.95 caused an error message and prevented the file from being rewritten) Mar. 31, 2006 - Version 6.10 - Added ability to use filename format codes %d, %f and %e in values written to FileName and Directory tags - Fixed problem of odd filenames being generated when setting FileName from an invalid date/time tag - Removed debugging print statement forgotten in Olympus code of 6.07 (oops) - API Changes: - Added StrictDate option Mar. 30, 2006 - Version 6.09 - Made FileName and Directory writable (enabling a whole new functionality!) - Added ability to write DOS-style EPS images [Note: still in beta testing] - Increased precision of Composite Red/BlueBalance print conversion - When combining the -o and -overwrite_original options, the original file is now erased if the new file is written successfully - Added a new Nikon lens (thanks Werner Kober) - API Changes: - Added SetFileName() routine - In list context, CountNewValues() now also returns a "pseudo" tag count Mar. 25, 2006 - Version 6.08 - Made YCbCrCoefficients and YCbCrPositioning protected when writing - Decode some new Nikon-specific tags in QuickTime videos from Nikon cameras - Calculate Red/BlueBalance for Olympus images - Fixed "APP1 segment too large" problem when copying all tags from Canon EOS-5D or EOS-30D CR2 image to JPEG image - Fixed problem running "exiftool" with no arguments in Windows cmd shell Mar. 22, 2006 - Version 6.07 - Added a number of new Olympus tags (thanks Frank Ledwon) - Decode Adobe JPEG APP14 segment (thanks Didier Giet) - Made Rotation writable in CRW images - Changed some FujiFilm WhiteBalance strings - No longer return multiple tags when a group is specified unless the duplicates option is enabled or the group name is 'all' or '*' Mar. 20, 2006 - Version 6.06 - Added validity check for Canon FocalPlaneX/YSize which resulted in incorrect values of FocalLength35efl being calculated for some PowerShot models - Made Opto-ElectricConvFactor value binary Mar. 18, 2006 - Version 6.05 - Improved JPEG writer to tolerate any segment ordering - Fixed Olympus ExtenderStatus to work with E-330 (thanks Mark Dapoz) Mar. 15, 2006 - Version 6.04 - Added write support for EPS and PS images [Note: still in beta testing -- must currently use the -m option to enable writing to EPS images] - Added ability to write ICC_Profile data as a block - Added read/write support for ICC and ICM color profile files - Added read/write support for ERF (Epson Raw Format) images - Added a couple of new Olympus tags and LensType's (thanks Mark Dapoz) - Added ability to scan past unknown header to find JPEG or TIFF image - Added Canon EOS 30D custom functions - Renamed Panasonic SerialNumber tag to InternalSerialNumber - Renamed Canon 5D PictureNumber tag to ImageNumber - Improved MRW reading and writing - Decode a number of new Minolta tags and changed names of some existing tags - Decode some type-specific data in ASF StreamProperties, including video ImageWidth and ImageHeight - Extract a few more PostScript tags and derive ImageWidth and ImageHeight for PostScript documents - Some improvements to Panasonic decoding (thanks Tels) - API Changes: - 'Unsafe' tags are now copied by SetNewValuesFromFile() if specified explicitly - Internal Changes: - SubDirectory tags are no longer Writable by default in WRITABLE tables Mar. 2, 2006 - Version 6.03 - Added print conversion for CFAPlaneColor - Decode CFAPattern as written incorrectly in ASCII by some Panasonic cameras - Added recently announced Canon cameras to CanonModelID list - API Changes: - Added ability to prefix tag name with group in arguments to ImageInfo() (read/write symmetry is now improved since this feature already existed in the write routines, and now group names can be used in shortcuts) - Changed order of filtering for Group# option and tag exclusions to be applied after extracting tags specified in calls to ImageInfo() Feb. 26, 2006 - Version 6.02 - Fixed problem rewriting Photoshop IRB resources as written by some applications (eg. PixVue) - Improved decoding of AVI files to increase speed and extract more tags - Added -overwrite_original_in_place option - Added a number of new XMP tags and bring XMP support up to new specification, plus a few undocumented XMP-aux tags (thanks Lou Salkind) - Added support for large DNG preview image (with JpgFromRaw tag) - Added ability to decode DNG Adobe MakerNotes - Added SEMInfo tag (thanks Robert Mucke) - Decode (but don't rewrite) old PS APP13 "Adobe_Photoshop2.5:" segment Feb. 20, 2006 - Version 6.01 - Added back RedBalance and BlueBalance as composite tags - Fixed potential problem in File::RandomAccess which could cause a "substr outside of string" warning Feb. 19, 2006 - Version 6.00 (production release) - Added read support for Sony SR2 raw images (but most tags still unknown) - Added read support for Kyocera Contax N Digital RAW images - Added ability to write or delete shortcuts which reference multiple tags (previously only shortcuts referencing a single tag were writable) - Changed descriptions of FNumber, ExposureTime, ISO, DateTimeOriginal, CreateDate and ModifyDate to more closely match their tag names - Separated Canon and Nikon Red/BlueBalance information into individual components with tag names like WB_RGGBLevels - Decoded a number of new Canon tags for EOS models, including ColorBalance tables, 20D AF points and SensorInfo (thanks Rainer Honle) - Fixed incorrect decoding of EOS 10D/300D color balance modes - More additions and minor fixes to Canon decoding - Made EOS-1D personal functions writable - Added ability to write bitmasks at the PrintConv level - Set MIME type for all RAW image formats to "image/x-raw" - The -f option is no longer implied when -S and -s are combined - Fixed bug introduced in 5.99 which broke the "-tagsFromFile @" feature - Fixed problem with offsets in verbose dump of CRW images - Fixed problem with some tags in Canon images not printing without -a option - Fixed problem with validation of Canon PictureInfo for images rotated by Canon ZoomBrowser EX (thanks Joshua Bixby) Feb. 1, 2006 - Version 5.99 - Major additions to Canon maker note decoding, including EOS-1D personal functions (thanks Rainer Honle for decoding many 5D tags) - Added Canon maker note footer when rewriting Canon maker notes - Attempt to fix problem where ScaleFactor35efl was calculated incorrectly for some Canon images - Reduce memory useage and speed up writing of large TIFF images - Fixed problem with binary data offsets in verbose dump - Fixed problem writing Comment if 'File' group specified - Fixed bug which could cause formatting error in htmlDump output Jan. 22, 2006 - Version 5.98 - Enhanced FMT syntax for -o, -w and -tagsFromFile options - Decode maker notes of Samsung DX-1S - Added ability to list tags in a specific group - Recognize maker notes of a few more Kodak models - Added a few more Canon LensType's - Added missing semicolons in HtmlDump JavaScript output Jan. 16, 2006 - Version 5.97 - Added support for Canon 5D custom functions (thanks Rainer Honle) - Added support for Canon 1DmkII and 350D custom functions - General fixes and improvements to Canon custom functions - Renamed ICC_Profile Copyright to ProfileCopyright - Report all extraction errors when copying only specified tags from file - Avoid issuing "Error rebuilding maker notes" warning when copying maker notes that don't require rebuilding Jan. 14, 2006 - Version 5.96 - Fixed problem where XMP information could be lost when writing PSD images Jan. 12, 2006 - Version 5.95 - Decode AIFF SampleRate - Fixed problem where FileType was being set twice for AIFF files - Patched problem reading some file types through Windows cmd shell pipeline - Properly identify CR2 images read via pipes (previously identified as TIFF) - Improved formatting of printed values for some DNG tags - Fixed problem with EXIF format of some tags when writing - Changed 'rational' format names to match full bit size of value Jan. 10, 2006 - Version 5.94 - Fixed problem extracting OriginalRawImage from little-endian DNG images - Fixed problem where "unreferenced bytes" error could be incorrectly issued when deleting all EXIF from a TIFF image Jan. 9, 2006 - Version 5.93 - Added ability to write JFIF information Jan. 9, 2006 - Version 5.92 - Added ability to extract and decompress original raw image from DNG - Fixed problem extracting information from some image types in pipelines - Decode more information in PSD images Jan. 7, 2006 - Version 5.91 - Added write support for PSD images - Made a couple more Photoshop tags writable Jan. 6, 2006 - Version 5.90 - Added read support for AIFF audio files - Made Photoshop:XResolution and Photoshop:YResolution writable - Fixed problem with processing some RIFF files - Added a new Canon LensType - API changes: - SetNewValue() now accepts an ARRAY reference for setting list-type tags such as Keywords, or a SCALAR reference for binary data, so it may now be called directly with any value returned by GetValue(). Jan. 3, 2006 - Version 5.89 - Recognize Panasonic Type 2 maker notes - Changed Nikon LensID to a composite tag to allow better decoding of non-Nikon lenses, and added a bunch of new lenses to the list Jan. 1, 2006 - Version 5.88 - Added ability to read and write AFCP information in JPEG images - Added read support for WMV video and WMA audio files (ASF format files) - Added EXIF tags 0x82a5-0x82ac - Fixed TagID of IntergraphPacketData tag - Fixed problem in rewriting some types of JVC maker notes - Renamed WAV module to RIFF Dec. 22, 2005 - Version 5.87 (production release) - Added support for JVC maker notes - Extract a number of new DNG tags plus DNG JPEG preview image - Renamed DNGCameraSerialNumber tag to CameraSerialNumber Dec. 20, 2005 - Version 5.86 - Added support for AVI and MP4 videos - Improved decoding of Olympus maker notes - Improved APP12 decoding - Improved CanonPictureInfo validation to work with more PowerShot models - Display Canon 1D serial numbers with 6 digits - Decode maker notes of Nikon D1 - Combining -t with -S now gives a single-line tab-delimited list of values - Extract preview image for Samsung Digimax i5 Dec. 13, 2005 - Version 5.85 - Added ability to read and write XMP files which don't have an xpacket header - Fixed problem deleting entire XMP data block using '-xmp=' syntax - More minor HtmlDump improvements Dec. 12, 2005 - Version 5.84 - Minor improvements to HtmlDump output Dec. 12, 2005 - Version 5.83 - Added -F option to allow maker notes offsets to be fixed - Added -htmlDump option to generate a verbose HTML-based hex dump of EXIF and/or TIFF information (cool new diagnostic tool) - Attempt to validate maker notes offsets and issue warning if they look wrong - Fixed problem rewriting PreviewImage in some Olympus and Pentax images - Increased speed for extracting large preview images - Improved synthetic maker notes when coping tags from CRW file - Display absolute offsets for EXIF values in very very verbose mode - Verbose option output is now written to file if -w option used - Speed up rewriting of some TIFF images when using ActivePerl 5.8.x for Windows (image strips are now copied in a single block if they are contiguous in the file to avoid ActivePerl bug which causes extremely poor performance when concatenating a large number of memory blocks) - Added a couple of new Nikon and Pentax lens ID's (thanks Robert Rottmerhusen and David Buret) - Decode PrintIM information in Casio QV-4000 - Fixed Decoding of Canon EOS D60 serial numbers to agree with Canon utilities - API changes: - Added HtmlDump and TextOut options Nov. 26, 2005 - Version 5.82 - Fixed bug which caused error rewriting Minolta MRW images - Added MRW write test - Improved MRW verbose output Nov. 24, 2005 - Version 5.81 - Changed writing of TIFF so that existing IPTC will be rewritten as int32u whenever IPTC is edited, regardless of original format type. This allows files to be 'fixed' even if IPTC was previously another format (now we get to see if there is any software out there that barfs on int32u's...) - Changed the -s option so tag names are displayed instead of descriptions (now similar to the -S option, but values are aligned in a column) - Remove padding at the end of IPTC record when writing - Fixed problem which was generating a warning with ActivePerl 5.6.1 Nov. 22, 2005 - Version 5.80 - Changed writing of new TIFF IPTC information to make it visible in Nikon Capture (for some reason requires int32u format) - Installed patch for building of ExifTool RPMS on Mandriva Linux (thanks Niels Kristian) Nov. 22, 2005 - Version 5.79 - Fixed problem which could render XMP information unreadable by Photoshop when editing some XMP written by Photoshop CS2 Nov. 21, 2005 - Version 5.78 - Fixed problem which could generate an error when adding IFD1 to an image Nov. 18, 2005 - Version 5.77 (production release) - Allow integer tag values to be specified in hex (with leading '0x') - Fixed problem which generated warnings about symbol "@indent" in Nikon.pm when using older versions of Perl (observed with 5.6.1) Nov. 16, 2005 - Version 5.76 - Tolerate extra null padding at end of TIFF images (as written by Photoshop CS) when rewriting TIFF images - Minor improvements to DICOM image processing - Updated FAQ Nov. 14, 2005 - Version 5.75 - Fixed problem decompressing deflated DICOM images Nov. 14, 2005 - Version 5.74 - Added read support for DICOM (DCM, DC3, DIC, DICM) and ACR-NEMA (ACR) medical image files - Decode a lot more Nikon Capture information and add write ability - Updated Nikon makernote decoding for D200 and new AF-S Nikkor 18-200 lens (thanks Werner Kober) - Added a number of new Canon LensType's (thanks Volker Gering) - Recognize file types even if they have the wrong extension Nov. 7, 2005 - Version 5.73 - Added ability to shift date/time tag values - Extract Red/BlueBalance tags for Nikon D2Hs, D50 and D2X - Decode Nikon Capture Data to extract IPTC information and Rotation - Added a new Olympus LensType (thanks Michael Meissner) Oct. 28, 2005 - Version 5.72 - Added ability to create XMP data files. This is more significant than it sounds: The -o option may now be used to generate XMP files from information in any other format, or even to create an XMP file from nothing more than tags defined on the command line. - Added printout of number of directories created with -w and -o options - Improved error handling - Effectively set preferred group to 'XMP' when writing XMP data files - Fixed problem rewriting maker notes of some Pentax cameras - API Changes: - Added CanWrite() and CanCreate() functions - Allow WriteInfo() source file to be undefined to create new file - Allow WriteInfo() output file to be undefined to edit file in place - Added extra argument to WriteInfo() to specify output file type Oct. 24, 2005 - Version 5.71 - Added ability to read/write .XMP data files - Added -listf option to print list of recognized file types - Changed "-group#" option to "-listg#" (but still support old -group#) - Moved Kodak APP3 "Meta" tags from EXIF to a new Kodak "Meta" group Oct. 23, 2005 - Version 5.70 - Significant internal changes to improve speed and reduce memory useage - Fixed a bug introduced in version 5.63 which caused incorrect XMP GPS coordinates to be returned - Changed handling of Kodak date records - API Changes: - Added ability to access original 'Raw' values via GetValue() - GetValue() now returns empty array in list context if value is undefined - Values are now converted as they are requested, so the PrintConv option now applies to GetInfo() and GetValue() instead of ExtractInfo() Oct. 19, 2005 - Version 5.69 - Changed UTF-8 bug fix introduced in 5.67 to improve portability and allow it to work with Perl versions back to 5.6 - Changed some offsets in verbose output from relative to absolute addressing - Improved APP12 decoding - Changed technique for rounding off extracted rational values - API Changes: - Changed handling of floating point numbers to tolerate locales where a comma is used instead of a decimal point Oct. 17, 2005 - Version 5.68 - Added support for reading Sigma RAW (X3F) images Oct. 13, 2005 - Version 5.67 (production release) - Added support for reading PICT images - Fixed a problem when writing information via the ExifTool API if using Perl 5.8 or later and passing a UTF-8 encoded string to SetNewValue(). The problem generated an error which prevented the file from being written - Fixed timezone problem in timestamps of QuickTime images which was causing a failed test Oct. 10, 2005 - Version 5.66 - Enhanced -tagsFromFile option to allow %d, %f and %e in filenames - Extract a few more tags from Canon EOS 5D images - Allow multiple ICC_Profiles to be extracted from same image and add a number to the group1 name for subsequent profiles to make the tag locations unique - Changed Photoshop PixelsPerInchX/Y and QuickTime DotsPerInchX/Y tag names to X/YResolution. Neither has a corresponding ResolutionUnit tag, so inches should be assumed if no resolution unit is present - Added tests of Nikon, Sony and PDF decryption algorithms Oct. 7, 2005 - Version 5.65 - Added read support for QuickTime MOV videos (and QTIF images if anyone cares) - Extract maker note information from Sony SRF raw images - Improved Jpeg2000 decoding - Decode a few more Photoshop tags - Issue an error if there is extra data after the normal end of file when rewriting TIFF images (avoids possible data loss if attempting to write an unsuported RAW image with a TIFF-like data structure) - Added ability to replace existing tags with user defined tags - Denote minor errors/warnings by adding '[minor]' to the message (these are the errors which can be ignored with the -m option) - Fixed problem of missing LeafSubIFD when rewriting MOS images - Removed hack to write Leaf maker note information at start of image Sept. 30, 2005 - Version 5.64 - Improved writing of Canon CR2 images to preserve CR2 header and editing information written by Canon Digital Photo Professional software - Extract information from JPEG APP0 JFIF segments - Added support for extracting Creo Leaf meta information from MOS images - Added ability to define new tags in .ExifTool_config file and added a sample ExifTool_config file to the distribution - Extended the -w option to allow an expression to be specified - Allow tag aliases to be used when writing - Changed print conversion of FileSize tag - Internal changes to tag lookup to improve speed when writing information - Decode Photoshop resolution information Sept. 21, 2005 - Version 5.63 - Added read support for MP3 and WAV audio files (Oops... ExifTool has expanded beyond its "Image" roots!) - Added write support for PNG and MRW (Minolta RAW) images - Improved decoding of PNG profile information and added a few new PNG tags - Changes to handling of GPS coordinates: - Added -c (CoordFormat) option to format output of GPS coordinates - Added GPSPosition composite tag - GPS coordinates now show as decimal degrees with the -n option - Much more flexible about the input coordinate format when writing - Enforce proper formatting of XMP GPS coordinates - Added XMP-xmp Rating and Label tags, and a few missing XMP-exif GPS tags - Added new XMP-dex group - Added two new lenses to the Minolta LensID list (thanks Pedro Corte-Real) - Added a new lens to the Olympus list (thanks Shingo Noguchi) Sept. 7, 2005 - Version 5.62 - Fixed problem reading FujiFilm maker notes from RAF images - Extract comments from PPM/PGM/PBM images and add write support - Extract maker notes from Nikon Coolscan scanner images Sept. 3, 2005 - Version 5.61 - Added read support for PBM, PGM and PPM file formats - Added read support for RAF (FujiFilm RAW) file format Sept. 2, 2005 - Version 5.60 - Fixed bug where tag was deleted if TAG+=VALUE used for a non-list type tag - Fixed problem where reading some CRW files could generate a "Use of uninitialized value in concatenation" warning - Restructured XMP to separate tags by namespace - Added XMP-xmpTPg, XMP-cc, XMP-xmpPLUS and XMP-PixelLive groups - Improved logic for editing XMP list-type tags - Removed SubDirectory tags from -list option output - More updates to Pentax LensType list - Changed Nikon FileSystemVersion tag name to FirmwareVersion - Added NikonCaptureData and NikonCaptureVersion tags Aug. 24, 2005 - Version 5.55 (production release) - Added patch to fix word ordering when unpacking doubles on ARM systems with little-endian byte order but big-endian word order (thanks Riku Voipio) - Added another lens to the Pentax LensType list Aug. 22, 2005 - Version 5.54 - Fixed problem introduced in version 5.50 which broke ability to delete groups of information - Added a couple of new Pentax LensType's - Renamed Olympus Lens tag to LensType July 29, 2005 - Version 5.53 - Added -ext option to allow files to be processed or excluded from processing based on their extension - Added MimeType tag - Convert PDF UTF-16 character strings to UTF-8 (or Windows Latin1 if '-L' option used) July 28, 2005 - Version 5.52 - Removed warning message when writing CR2 files that was intended only for Canon 1D TIFF files July 27, 2005 - Version 5.51 - Assume '-TagsFromFile @' for any redirected tags (eg. '-SRCTAG>DSTTAG' or '-DSTTAGTAG' - Recognize some more Nikon lenses - API Changes: - Added ByteOrder option to specify byte ordering when creating new EXIF segment in a JPEG file June 3, 2005 - Version 5.25 (production release) - Fixed problem with writing IPTC Time tags - Changed Composite ShutterSpeed to ignore bulb duration if it is negative - API Changes: - Allow tag name to be prefixed by group in calls to SetNewValue() June 1, 2005 - Version 5.24 - Added new "XMP" tag to allow read/write of XMP data as a block - Added numbers to subsequent SubIFD group names to allow tags in various SubIFD's to be accessed individually - Give priority to tags in full resolution image (whichever TIFF directory this is in) - Renamed ExifData tag to EXIF (but didn't make it writable as a block like XMP) - Recognize maker notes from more Konica Minolta cameras - Extract PreviewImage for Samsung Digimax V700, Kenox V10 and Digimax V10 - Changed validation of CanonPictureInfo to work with more PowerShot cameras (Note: for these cameras, CanonImageHeightAsShot may not be meaningful) - Added a number of new IPTC ApplicationRecord tags - Added Nikon ExposureDifference tag - Removed trailing white space in values printed by exiftool May 27, 2005 - Version 5.23 - Changed behaviour of -tagsfromfile slightly so that '-GROUP:TAG>DSTTAG' now commutes information between different groups unless a destination group is specified - Improved reliability of calculating offsets in Pentax maker notes May 26, 2005 - Version 5.22 - Fixed problem with new '-tagsFromFile @' feature which occurred when simultaneously copying tags and writing new values to multiple target files (the new values were only getting written to the first file) May 25, 2005 - Version 5.21 - Allow target file to be specified by '@' with -TagsFromFile option - Fixed bug which caused internal error when using -TagsFromFile option to copy PrintIM information to a file that already contained PrintIM data - Fixed problem which broke the (now deprecated) -allTagsFromFile=FILE syntax - Fixed problem decoding Pentax Date for some Optio cameras - Fixed problem in GeoTiff decoding which could cause some tags to be missed - Decode a number of new Pentax tags (using my new Optio WP!) - Made Photoshop URL writable - Limit length of JPEG segment dump at Verbose=4, and add Verbose=5 level - API Changes: - Added SaveNewValues() and RestoreNewValues() May 20, 2005 - Version 5.20 - Give names to many Photoshop tags, but leave them marked as 'Unknown' so they aren't extracted under normal circumstances (must use the -u option) - Read/write Kyocera maker notes properly (although Kyocera information remains unknown) - Changed installation tests to tolerate rounding-off errors or format differences in floating point numbers May 17, 2005 - Version 5.19 - Added -overwrite_original option May 16, 2005 - Version 5.18 (production release) - Added -@ option and two utility files (iptc2xmp.args and xmp2iptc.args) to use with this option for translating between IPTC and XMP tag names - Disable normal console output if -v option used and no tags specified - Repair incorrect first byte of MRW preview images when extracting - More tweaking of -TagsFromFile order of operations May 14, 2005 - Version 5.17 - Allow 'All' to be used as a group name with '-TagsFromFile' option to preserve original tag groups (eg. '-all:all') - PrintIM information is now copied with -TagsFromFile - Decode EXIF:Gamma tag - Decode Canon 350D FileNumber - Made a few more tags writable - Don't rewrite TIFF files which could be Canon 1D RAW files since this format currently isn't supported (can use the -m option to write anyway, which will remove the RAW image data if this is a 1D file) - Don't add null terminator to UserComment, GPSProcessingMethod or GPSAreaInformation - Improved logic for handling command line tag names and exclusions, especially when associated with the -TagsFromFile option May 10, 2005 - Version 5.16 - Decode a number of new Nikon lens-related tags (thanks again Robert Rottmerhusen) - Various other improvements May 7, 2005 - Version 5.15 - Added powerful new information redirection feature to -TagsFromFile option - Added writable File:FileModifyDate tag which represents the filesystem date/time of last modification - Allow '*' to also be used as well as 'all' to represent all tags, although this feature is not documented for the command-line options because 'all' is more convenient since '*' must be quoted to prevent shell globbing May 5, 2005 - Version 5.11 - Fixed problem where the proper tags weren't excluded from being extracted if -GROUP:All and --TAG options are used together on the command line May 5, 2005 - Version 5.10 - Changed -AllTagsFromFile option to -TagsFromFile and allow copied tags to be specified on the command line. (-AllTagsFromFile is preserved as an alias to -TagsFromFile for backward compatibility.) - Allow -GROUP:All and --GROUP:All on command line to extract or exclude all tags in specified group - Allow family 1 group names to be used when deleting groups with -GROUP:All= - Added composite CFAPattern derived from CFARepeatPatternDim and CFAPattern2 - Fixed problem where tags which can exist in both IFD0 and ExifIFD weren't being properly removed from one IFD when written to the other - Added FAQ May 2, 2005 - Version 5.06 - Made a few more EXIF tags writable - No longer add null-terminator to JPEG comment (was confusing xv) Apr. 20, 2005 - Version 5.05 (production release) - Added Nikon LensFStops tag (thanks to Robert Rottmerhusen) - Reliability improvements for writing maker notes information - exiftool now returns error status if there were errors reading/writing files Apr. 18, 2005 - Version 5.04 - Fixed problem where maker notes of Olympus C2500L could get corrupted when writing Apr. 18, 2005 - Version 5.03 - ExifTool now requires Perl version 5.004 or higher (previously 5.002 was OK) - Restrict the size of preview images where data is referenced directly as the value data of an IFD entry (only affects Casio images) - Fixed problems rewriting some Casio maker notes - Change priority of orientation (and a number of other tags which may appear in IFD1) so value in IFD0 takes precedence of value in IFD1 if it exists - API Changes: - Allow any file reference, not only GLOB references, to be used in function calls Apr. 16, 2005 - Version 5.02 - Fixed problem rewriting Pentax *istD preview image Apr. 15, 2005 - Version 5.01 - Major speed improvements for writing large JPEG files with preview images - Fixed problem rewriting preview in Olympus E-1 and E-300 images - Old large preview is now properly removed when writing new small preview - Allow PreviewImage to be deleted (ie. set length to zero) - Don't extract images that have zero length - Deleting MakerNotes group now works in conjunction with -allTagsFromFile - Change image validation again to only validate images for tags that were specifically requested - Separate lookups by manufacturer for Olympus lens information Apr. 14, 2005 - Version 5.00 - ALL MAJOR PLANNED WRITING FEATURES NOW IMPLEMENTED! - Finally solved problem of writing large preview images in JPEG files - -AllTagsFromFile now sets PreviewImage to 'dummy' if it exists in the maker notes to avoid writing a large preview to the destination file (now you have to do this manually afterwards if this is what you want) - Fixed problem rewriting Olympus E1 maker note subdirectories - Only validate extracted images when Binary (-b) option is used - Rename Olympus PreviewImageAvailable to PreviewImageValid, and check/set this tag when reading/writing the preview image - Change priority of X/YResolution tags so IFD0 value takes precedence - Changes to Olympus Lens decoding Apr. 11, 2005 - Version 4.95 - Added ability to delete all meta information, or all information in a group - Create some mandatory IPTC tags automatically when writing IPTC information - Decoded a bunch more Olympus tags (thanks to Frank Ledwon) - Decoded a couple more Canon 1D MkII tags (thanks to Denny Priebe) - Fixed problem where Sony maker notes could be corrupted when rewriting file - Fixed problem that could cause wrong tag description to be printed for missing tags when the -f option is used - Account for different encoding of Canon ExposureTime in 20D and 350D, and lower priority of Canon ExposureTime and FNumber so regular EXIF values take precedence because it appears these values may be model dependent (I hate it when that happens) Apr. 6, 2005 - Version 4.94 - Added support for Kodak DX3215 and DX3700 - Improved Kodak decoding and changed some Kodak tag names - Improved logic to guard against cyclical recursion in EXIF directories - Allow tags to be edited in IFD2, IFD3, etc... - Patched problem when writing Canon 350D images due to probable bug in 350D firmware (version 1.0.1) that writes an incorrect ThumbnailLength in IFD1 Apr. 2, 2005 - Version 4.93 (production release) - Added IPTC XMP Core support - Added support for Kodak CX4200 plus other minor Kodak changes - Made Kodak maker notes writable - Minor changes to Olympus tag names and decoding - Split HTML TagNames documentation into separate files Mar. 31, 2005 - Version 4.92 - Added support for Kodak and Ricoh cameras - Decode still more Olympus E-1/E-300 tags - Added 'Directory' tag - Decode a few more Pentax tags (thanks to John Francis) - Allow newlines in tag values on command line when writing - Fixed problem rewriting makernotes with sub directories (eg. Olympus) Mar. 28, 2005 - Version 4.91 - Decode yet more Olympus E-1/E-300 tags - Changed decoding of Olympus E-300 Quality tag - Patched bug in Olympus maker notes that was causing ExifTool to report an error when reading ORF files - Fixed problem where strings weren't being properly truncated at the null terminator if there was a newline after the terminator - Improved decoding for some Nikon tags (credit Tom Christiansen) - Added Nikon shortcut - Added composite SubSecDateTimeOriginal tag - Fixed problem where CRW file without file extension wasn't being identified properly - Fixed problem extracting thumbnail from some (specifically Olympus) images - Changed verbose output to always show original EXIF format - Skip over EXIF entries with unknown format instead of aborting (while reading only) - Recognize TIFF field type 13 Mar. 24, 2005 - Version 4.90 - Extract Olympus PreviewImage, and decode a bunch more Olympus tags - Improvements to documentation Mar. 23, 2005 - Version 4.89 - Decode subdirectories in Olympus maker notes (now much more information is extracted for E-1 and E-300 cameras, although most is still unknown) Mar. 22, 2005 - Version 4.88 - Convert exiftool help to POD format Mar. 15, 2005 - Version 4.87 (production release) - Added notes to TagNames documentation Mar. 11, 2005 - Version 4.86 - Extract PreviewImage from CR2 files - Create mandatory GPS tags when adding new GPS directory - Bring IPTC newsphoto support up to spec (as if anyone uses this crap) - Fixed problem when setting 8-bit integer IPTC values Mar. 10, 2005 - Version 4.85 - Create most mandatory EXIF entries automatically when a new EXIF directory is created - Fixed problem which caused an error when adding XMP information to a TIFF file which didn't previously contain XMP - Made '=' optional with -AllTagsFromFile option - Fixed problem with verbose dump of zero-length directory (eg. Sony F717 maker notes) Mar. 9, 2005 - Version 4.84 - Interpret Olympus ImageQuality of 6 as RAW - Remove validation of TIFF identifier to allow forward compatibility with untested RAW file formats (ORF files in particular seem to fiddle with this identifier) Mar. 8, 2005 - Version 4.83 - Extract ThumbnailImage from Canon CRW files written by some cameras - Recognize ORF files from Olympus C5060WZ (and hopefully some others too!) Mar. 7, 2005 - Version 4.82 - Made a number of new EXIF tags writable, but classify them as 'unsafe' so they aren't copied over with the -AllTagsFromFile option - Recognize a number of new and very uncommon EXIF tags - Remove copy number from tag name when using the -S option - Interpret Photoshop XMP:ColorSpace value of 4294967295 as 'Uncalibrated' Mar. 4, 2005 - Version 4.81 - Added user-definable shortcuts - Fixed problem with XMP:Identifier (should have existed in both XMP-dc and XMP-xmp) Mar. 2, 2005 - Version 4.80 - The -n option now prints binary data values as "Binary data #### bytes" - API Changes: (NOTE: Change in API behaviour for binary data values) - Changed returned ValueConv values so that binary data is now returned as a SCALAR reference, the same as with PrintConv values Mar. 1, 2005 - Version 4.73 (production release) - Minor changes to XMP parsing to increase speed and improve validation Feb. 28, 2005 - Version 4.72 - Extract info from UTF-16 and UTF-32 encoded XMP - Convert EXIF text fields if encoded in Unicode - Fixed a few incorrect XP character translation codes - Fixed name of Nikon ColorBalanceD2H tag Feb. 25, 2005 - Version 4.71 - Fixed bug introduced in 4.70 which caused error when transferring information using -AllTagsFromFile from a RAW file to a JPEG file Feb. 24, 2005 - Version 4.70 - Allow family 1 group name to be specified for any tag while writing - Fixed problem with writing Nikon PreviewImage to NEF files Feb. 23, 2005 - Version 4.67 - Added -L option to allow XP characters to be converted to Latin character set instead of UTF-8. (Now XP characters can be displayed properly in terminal windows which use either the UTF-8 or WinLatin1 character set.) - Make JpgFromRaw image writable in Nikon NEF files Feb. 21, 2005 - Version 4.66 - Recognize JPEG 2000 XMP UUID information - Extract Meta information from JPEG APP3 - Yet more playing with XP characters (this has been a learning process for me). Now special characters show up properly in my OSX terminal window, and the reverse translation works so now they get written properly as well (for Perl 5.6.1 or greater anyway... Earlier versions don't have the required UTF-8 support to handle these special characters) - Improvements to TagNames documentation (including changing format names to make them more consistent across different types of meta information) Feb. 18, 2005 - Version 4.65 - Fixed problem in translating XP characters Feb. 17, 2005 - Version 4.64 (production release) - Added new tag name documentation (replaces old tag lists) - Made a few more DNG tags writable Feb. 15, 2005 - Version 4.63 - Remove null terminators in ICC_Profile 'desc' strings - Treat Olympus CameraID as a string (why wasn't it written this way?) - Added print conversion for EXIF:CFAPattern Feb. 14, 2005 - Version 4.62 - Convert XPTitle, XPComment, XPKeywords etc from XP character codes and add write support for these tags - Decode JPEG 2000 Resolution, Label and URL information - Another try at patching 3 digit exponent situation which causes failed tests on MSWin32-x86 - Removed .J2K from recognized extensions (since apparently this is a raw JP2 codestream, and doesn't contain any metadata that ExifTool can extract) Feb. 14, 2005 - Version 4.61 - Don't print filename line when -p option used - JPEG 2000 improvements - Also recognize .JPX and .J2K extensions Feb. 11, 2005 - Version 4.60 - Added support for reading the JPEG 2000 (.JP2) files - Improved warnings on errors while setting tag values Feb. 10, 2005 - Version 4.54 - Added ColorTemperature tag for many Canon models - Added AutoRotate for Canon 10D and 300D - Lowered priority of Nikon ISO so that EXIF ISO is used instead if both exist - Changed names of PentaxISO and Casio ISOSetting to ISO, and lowered priority as with Nikon ISO - Made Photoshop EXIF Camera RAW tags writable Feb. 7, 2005 - Version 4.53 (production release) - Added FileNumber for Canon 20D (decoded by Juha Eskelinen) - Removed CanonA0Tag Feb. 4, 2005 - Version 4.52 - Added another CanonRaw test - Changes to Canon CRW documentation Feb. 4, 2005 - Version 4.51 - Finally found documentation for Canon CRW files (CIFF format)!! - Changed CanonRaw to bring code up to CIFF specification - Added a bunch more CanonRaw tags - Updated Canon CRW documentation Feb. 2, 2005 - Version 4.50 - Allow writing to specific IFD - Allow permanent tags (eg. MakerNotes tags) 'deleted' by setting them to an empty string if '' is a valid value for the tag - Added test for rewriting Nikon D70 information - Added missing inverse conversion routines for GPS tags (now they are all writable) - Decoded a few more Canon and CanonRaw tags - Added -z option to extract information from images in compressed files - Improved CanonRaw verbose output - Remove garbage after null terminator in CanonRaw string-type tags Jan. 30, 2005 - Version 4.45 - Added a few more Canon tags - Fixed bug with divide by zero error (in Perl, '0.0' is a true value -- doh!) Jan. 30, 2005 - Version 4.44 - Sort entries in synthesized Canon MakerNotes directory - Interpret Canon custom functions for models other than 10D in CRW files Jan. 29, 2005 - Version 4.43 - Synthesize Canon MakerNotes information when using -allTagsFromFile for a CRW file - Decode WhiteBalance table in Canon maker notes - Rename CanonRaw CanonFileType tag to CanonImageType Jan. 28, 2005 - Version 4.42 - Fixed problem where multiple IPTC tags could be created if replacing specific IPTC tag values with 'TAG-=VALUE' - Made EXIF SceneType writable - Renamed Nikon ISOUsed tag to ISO - Added documention of Canon RAW (CRW) file format Jan. 27, 2005 - Version 4.41 - Added write support for Canon exposure parameters - Change validation of CanonPictureInfo to get it working for Canon 20D Jan. 26, 2005 - Version 4.40 - Added ability to write Canon RAW (CRW) files. With this format you aren't allowed to add or delete any new tags (just as with the MakerNotes), except for JpgFromRaw, which I like to be able to delete to save disk space - Added validation of JpgFromRaw images - Relax filtering on non-ASCII characters by exiftool script to allow high-ASCII characters to be printed - Changed the tense of Orientation values to try to make the meaning more clear. This tag can be a bit confusing. It gives the rotation that must be applied to the image to view it properly (hence the rotation of the camera when the picture was taken). - Patched problem which was causing failed tests on some platforms (floating point format has 3 digits in exponent on Perl 5.8.5 MSWin32-x86, grrrr...) - API Changes: - Added 'Compact' option to not write blank padding as per XMP and IPTC specs Jan. 24, 2005 - Version 4.36 (production release) - Added support for reading Olympus Raw Format (ORF) Jan. 23, 2005 - Version 4.35 - Moved a couple of the informational warnings to verbose mode - Suppress warnings an non-critical errors with -m option - Made a few more of the EXIF tags writable - Made model-dependent tags Pentax FocalLength and Olympus Quality writable - Added ability to write CanonCustom tags - Added range check for integer values Jan. 21, 2005 - Version 4.34 - Fixed problem when writing Canon maker notes with -allTagsFromFile - Added -o option to write to different file or directory - Added handler to clean up temporary file on Ctrl-C - Re-wrote routine to rationalize floating point values (it is slower now, but produces much prettier fractions) - Other minor improvements to writer code Jan. 19, 2005 - Version 4.33 - Added check at higher level and return warning if trying to delete information from maker notes - Make GPS latitude and longitude a bit more flexible about the format they accept when writing - Updates to documentation Jan. 19, 2005 - Version 4.32 - Now rewrites Casio EX-Z3 maker notes properly (well, not actually 'properly', but the way they were written in the first place, which is wrong) - Added warning when writing information if original IFD entries were not in the proper sequence, which is a violation of EXIF specs. (And surprise, you'll never guess who does this too... Yup, the EX-Z3.) - Fixed parsing problem with GPSProcessingMethod and GPSAreaInformation - No longer truncates 'undef' values at first null character - Changed all DataDump tags to binary data types - Changed some warning messages - Documented the -m option (it's now official, even though it's been there since version 4.10) - Added some more writer tests Jan. 18, 2005 - Version 4.31 - Now also copies over preview image in Nikon NEF files Jan. 18, 2005 - Version 4.30 - Now copies over preview images in EXIF data (large, external previews still not copied) - Account for funny offsets in Casio EX-Z3 maker notes while extracting data (but haven't figured out how to handle them when writing) - Fixed bug introduced in 4.20 that broke extraction of Canon PreviewImage Jan. 17, 2005 - Version 4.23 - Improve handling of unrecognized maker notes when writing Jan. 17, 2005 - Version 4.22 - Added check in -AllTagsFromFile to test for pointers in the maker notes directory running outside the maker notes data. If they do, a warning is issued and the maker notes are rebuilt properly before copying. - Fixed problem which could corrupt some values when editing maker notes Jan. 17, 2005 - Version 4.21 - Added Olympus Red/BlueBalance Jan. 17, 2005 - Version 4.20 - Added ability to edit MakerNotes! - Added more validation when writing IPTC information - Fixed display of Nikon FlashExposureComp for negative values - Fixed problem where the large JPEG image in Nikon and Pentax raw files was misidentified as the ThumbnailImage. It is now extracted as JpgFromRaw. This allows all 3 JPEG images contained in Pentax PEF files to be extracted: ThumbnailImage, PreviewImage and JpgFromRaw. - Fixed problem on systems that use backslashes in directory names that prevented exiftool from finding its libraries if not installed - Changed many Pentax tag names to remove "Pentax" prefix and conform more to the other tag names (moving information between files of different formats is much easier if tags have standardized names): - PentaxPictureMode => PictureMode - PentaxFocusMode => FocusMode - PentaxWhiteBalance => WhiteBalance - PentaxAEMetering => MeteringMode - PentaxFocalLength => FocalLength - PentaxZoom => DigitalZoom - PentaxSaturation => Saturation - PentaxContrast => Contrast - PentaxSharpness => Sharpness - Fixed FocalLength conversion for Pentax Optio S - Fixed printout of Nikon FileSystemVersion for older Nikon models - More improvements to reliabilty of preview image extraction - Fixed Quality for Olympus E-1 Jan. 12, 2005 - Version 4.15 - Added Pentax LensType and RawImageSize tags - Change printing of some unknown values to hexadecimal - Now recognizes Nikon PEF files - More reliable extraction of preview and thumbnail images, particularly for the various models of Pentax cameras - Added decoding of the Canon 20D custom functions and a new Canon20D shortcut (thanks to Christian Koller) - Improved write logic for EXIF information - Improved logic in determining byte ordering of maker notes Jan. 10, 2005 - Version 4.14 - Fixed problem introduced in 4.13 that messed up new 4.12 features. doh. (and added test to keep this from happening again!). - No longer store bad directory data as a tag (dump in verbose output instead) Jan. 9, 2005 - Version 4.13 - Added check on size of new ThumbnailImage so ExifTool doesn't try to write an image that is too large (>60k) into the JPEG EXIF APP1 segment Jan. 9, 2005 - Version 4.12 - -AllTagsFromFile option now copies over the maker notes - Changed some misleading warning messages Jan. 8, 2005 - Version 4.11 - Improved validation of tag values with -AllTagsFromFile option Jan. 7, 2005 - Version 4.10 - Added ability to write EXIF, IPTC and XMP tags in JPEG and TIFF files! - Allow Photoshop APP13 data to span multiple segments (read and write) - Added -TAG+=VALUE, -TAG-=VALUE and -TAG<=VALUE syntaxes - Added -GROUP:TAG syntax to allow tag group to be specified - Added powerful -AllTagsFromFile=SRCFILE option to copy all tags from file - Added -listw option to list all writable tags - Added -E option to escape output values for HTML - Fixed -w option to only replace extension after last '.' in filename if more than one '.' - Unescape XMP character codes when extracting values (and escape again when writing) - Now processes all IFD's of TIFF imags (not just IFD0) - Added data length check in hex dump of verbose option - Allow group name to be specified as prefix to tag name on command line - Renamed a few Nikon tags: FlashExposureComp to FlashExposureBracketValue, FEC to FlashExposureComp, and ShutterReleaseMode to ShootingMode - Extract Nikon preview image - Changed descriptions for Aperture and Shutter Speed to drop the Av/Tv Canonism - Improved logic to recognize more types of unknown maker notes - Recognize a couple more values of the Canon WhiteBalance tag - Renamed IPTC 'SupplementalCategory' to 'SupplementalCategories' - Handle timezone in times - API Changes: - Fixed problem where first tag name passed to GetInfo() was ignored - The values returned by ImageInfo() and GetInfo() may contain array references to indicate lists of values if PrintConv is disabled - Added a bunch of new stuff... Dec. 15, 2004 - Version 4.05 - Added a couple of Nikon tags - Now preserves original file by renaming to "NAME_original" when writing information - Don't preserve file time by default when writing. Added -P option to do this. - Changes to spec file Dec. 11, 2004 - Version 4.04 - Fixed problem which could corrupt JPEG images when adding comments (Note: if done, the damage can reversed by removing the comments with the same version of ExifTool that added them.) Dec. 6, 2004 - Version 4.03 - Major overhaul of verbose message output - Change -v option to allow verbose level to be specified (eg. -v3 = very very verbose) - Added a new Nikon tag (SceneMode) - Count images which were unchanged when writing tags - Changed FileType 'JPG' to 'JPEG' Dec. 2, 2004 - Version 4.02 - Fixed problem with rewriting some JPEG images - Preserve original file modification time when updating tags in a file - Report of number of files updated - API Changes: - Changed arguments of WriteInfo() and allow scalar and file references to be used Dec. 1, 2004 - Version 4.01 - Changed -o option to -w to avoid confusion since we now write image files too - Added warning if specified image file doesn't exist Dec. 1, 2004 - Version 4.00 - Started down the road of adding write support: - Allow writing of Comment tag to JPEG and GIF files - API for write functions still under development and is likely to change - Clean up formatting of Nikon string tags (fix case and remove trailing spaces) Nov. 30, 2004 - Version 3.96 - Changed JPEG read routine to speed things up a bit - Added a few more ICC_Profile tags Nov. 25, 2004 - Version 3.95 - Improved compatibility with old Perl versions (now runs, albeit with warnings, on 5.003) Nov. 25, 2004 - Version 3.94 (production release) - Patched problem with reading XMP data using Perl 5.6.x (Perl bug) - Put lib directory first in exiftool include list to take precedence over installed versions - Continue trying to parse JPEG image after an unrecognized APP1 segment Nov. 24, 2004 - Version 3.93 (production release) - Final round of ICC_Profile updates - Increase precision of extracted rational values - Internal Changes: - Build in better support for all data formats - Standardize data format names - Clean up and streamline data read routine Nov. 22, 2004 - Version 3.92 - Fixed problem with -p option when multiple files are specified - Enhancements to ICC_Profile information, including extracting information from profile header - Subdivide ICC_Profile group in family 1 - Added Minolta ImageStabilization tag Nov. 20, 2004 - Version 3.91 - Fixed problem where some tags were not extracted properly from Canon CR2 files - Internal Changes: - Cleaned up and simplified pointer calculations and dirInfo members Nov. 20, 2004 - Version 3.90 - Extract information from ICC Profiles - Extract undocumented IFD0 Photoshop tags - Added support for Minolta RAW (MRW) file format - Added support for Konica-Minolta cameras - Improved decoding for Minolta maker notes - Extract (the sometimes misleading) EXIF WhiteBalance tag even if WhiteBalance was extracted from the maker notes if the Duplicates option is set. (Previously it was only extracted as an Unknown tag in this case.) - API Changes: - Return list of all tags in image if GetFoundTags() or GetTagList() are called before ImageInfo() or GetInfo() Nov. 15, 2004 - Version 3.85 - Extract a couple more Photoshop tags (including PhotoshopQuality) - All XMP lists now comma separated (previously, 'alt' lists were separated by '|') - API Changes: - GetValue() now returns reference to array if values form a list and ValueConv is specified Nov. 12, 2004 - Version 3.84 - Added test of GetTagID() - Fixed bug in GetTagID() which was causing special tags to get overwritten Nov. 12, 2004 - Version 3.83 - Added -D and -H command line options - API Changes: - Added GetTagID() Nov. 11, 2004 - Version 3.82 (production release) - Improved diagnostic output for failed tests in installation Nov. 11, 2004 - Version 3.81 - Updated Olympus module to also support Epson cameras - Moved MakerNotes code into separate module - Added tests for Sony and Unknown maker notes Nov. 10, 2004 - Version 3.80 - Added support for Panasonic/Leica cameras - Updated Pentax module to also support Asahi cameras - Decode a couple more Minolta camera model types Nov. 4, 2004 - Version 3.74 (production release) - Properly localize $_ in public Image::ExifTool subroutines Nov. 3, 2004 - Version 3.73 - Changes to tests to avoid false failures on MSWin32-x86-multi-thread 4.0 Nov. 1, 2004 - Version 3.72 (production release) - Fixed minor bug in generation of family 1 XMP group names - Changes to Photoshop family 2 groups Oct. 30, 2004 - Version 3.71 - Switched group families 0 and 1 so the general location is now the default - Fixed bug when sorting by order of group for any family other than 0 - Added test 17 to ExifTool.t Oct. 29, 2004 - Version 3.70 - Major improvements to XMP parsing - Divided XMP group in family 0 based on the XMP namespace prefix - Changed a few long tables to binary type - Recognize some new YCbCrSubSampling values - Display DNG LocalizedCameraModel in plain text - Patched problem in FileSource reported by Sigma cameras - Added information about tag format to verbose hex dump Oct. 22, 2004 - Version 3.61 - Added support for DNG file format - Added and updated a number of EXIF tags for FAX and other uncommon images - Added Photoshop URL tag - Attempt to extract image from files with unrecognized extensions assuming TIFF format - Added "Image format error" if the image type is recognized but the format is bad - Changed "Unknown file type" error to "Unknown image type" - Moved POD documentation into separate .pod files - Started referencing sources for tag definitions in the source code Oct. 1, 2004 - Version 3.60 (production release) - initial CPAN release! - Changed group family 0 to divide EXIF group into individual IFD groups - Fixed typos in some Casio tag names - API Changes: - Changed name of File::RandomAccessFile to File::RandomAccess - Changed default setting of Duplicates to 1 Sept. 21, 2004 - Version 3.51 - Improvements to interpretation of Nikon D70 ISO settings Sept. 16, 2004 - Version 3.50 - Fixed problem with duplicate tags showing up without the -a option - Changed Nikon DataDump to a binary type - Added D70Boring shortcut Sept. 14, 2004 - Version 3.49 - Changed installation to also install the 'exiftool' script Sept. 13, 2004 - Version 3.48 - Changed UserComment to skip first 8 bytes since the comments come after an 8 byte character code Sept. 10, 2004 - Version 3.47 - Added support for second type of Casio maker notes (MakerNoteCasio2) Sept. 1, 2004 - Version 3.46 - Fixed minor bug in PrintConv of FileNumber for CanonRaw files June 3, 2004 - Version 3.45 - Recognize Canon 1D Mk II raw files (.CR2) (Note: Not properly decoding maker notes from these files yet) May 28, 2004 - Version 3.44 - Improved validity check of Sony maker notes May 18, 2004 - Version 3.43 - A couple more changes to the Nikon maker notes May 17, 2004 - Version 3.42 - Additions to Nikon maker notes for values derived from D70 Apr. 28, 2004 - Version 3.41 - Fixed some errors when running on older Perl versions Apr. 7, 2004 - Version 3.40 - Try to extract data from unrecognized maker notes (assuming standard EXIF format) - Added tests for different maker notes Apr. 6, 2004 - Version 3.37 - Added support for Sigma maker notes - Remember to add new files to MANIFEST so they get included in release. Doh Apr. 6, 2004 - Version 3.36 - Added support for Sanyo and Minolta maker notes - Added skeleton for interpeting Sony maker notes - Interpret Pentax PrintIM Apr. 6, 2004 - Version 3.35 - Added support for Nikon PrintIM - Changed names of duplicate EXIF tags Apr. 5, 2004 - Version 3.34 - Added all missing tag definitions from TIFF 6 standard - Added a few more EXIF tag definitions - Interpret PrintIM IFD - Fixed interpretation of Interoperability IFD - Fixed potential endless loop bug introduced in version 3.33 Apr. 5, 2004 - Version 3.33 - Parse SubIFD of Nikon NEF file (now extracts raw image size and thumbnail image) Apr. 2, 2004 - Version 3.32 - Changes to some Nikon tag names - Added Nikon Saturation - Documentation improvements Mar. 31, 2004 - Version 3.31 - Now recognizes NEF (Nikon Electronic image Format) files Mar. 29, 2004 - Version 3.30 - Removed -w option - Fixed problem with some XMP tags being put in the EXIF group - More minor speed improvements - API Changes: - GetDescription() now requires an ExifTool object reference - Removed WarnDuplicateDescriptions() Mar. 26, 2004 - Version 3.27 - Optimized a few routines to speed things up a bit - API Changes: - Changed GetDescription() documention to indicate it is called with an ExifTool object (this is still optional, but will be mandatory with the next version) Mar. 25, 2004 - Version 3.26 - Don't generate warning if end of IPTC block is padded with nulls Mar. 19, 2004 - Version 3.25 - Fixed problem with 'Input' sort order Mar. 19, 2004 - Version 3.24 - Only return PreviewImage if it is a valid JPG (otherwise set 'Warning') Mar. 16, 2004 - Version 3.23 - API Changes: - Added GetGroups() - GetGroup() now returns group names for all families if used in list context and family not specified Mar. 12, 2004 - Version 3.22 - API Changes: - Changed GetInfo() to return list of tags like ImageInfo() if list reference provided - Fixed bug that caused GetInfo() to ignore specified tags Mar. 11, 2004 - Version 3.21 - Fixed problem with Composite group in family 1 - Changed case of Exif to EXIF in family 1 - -group option now lists Composite group as it should - Internal Changes: - Cleaned up handling of function arguments Mar. 10, 2004 - Version 3.20 - Added -group option - Added group families 1 and 2 - Can now specify excluded tags with leading '-' (replaces -x option) - API Changes: - Added ClearOptions(), ExtractInfo(), GetInfo(), CombineInfo(), GetTagList() and GetAllGroups() - Removed IsVerbose() function (use Options('Verbose') instead) - Allow groups to be excluded by specifying leading '-' on group name - ImageInfo() and GetInfo() now use specified group order to set tag precedence if Duplicates option is not set - Change default value of Duplicates option back to 0 Mar. 1, 2004 - Version 3.15 - Changed format of all date and time tags to EXIF standard - Added some composite date/time tags - Fixed date formatting so -d option should now work with all combined date/time tags - Other minor changes to GPS information - Improvements to TIFF processing - Set value to "Undefined" if PrintConv evaluates to undefined value - Added -G option - API changes: - Changed all option names: shortened and changed to mixed case (sorry!) - Internal changes: - Standardized arguments to all processing procedures - Made call to processing procedure more automatic - Removed TABLE_TYPE tag and added PROCESS_PROC - Added ProcessTagTable() member function Feb. 27, 2004 - Version 3.14 - Added GPS tag conversions and GPS test - Values that can't be converted now show up simply as "Unknown (X)" Feb. 26, 2004 - Version 3.13 - Print out errors from exiftool script (since Image::ExifTool no longer prints them) - Added more tests - Failed tests now leave ".failed" file in "t" directory for post mortem Feb. 25, 2004 - Version 3.12 - Moved all image-related warnings to new Warning tag Feb. 25, 2004 - Version 3.11 - Added GeoTiff support - Added -x option - Improvements to documentation - Improve XMP parsing for 'Bag' elements - Capitalize first letter of XMP tag descriptions - Patch problem with APP13 resource written by older Photoshop versions - API changes: - Added EXCLUDE and GROUP# options - Change default value of SAVE_DUPLICATES option to 1 Feb. 20, 2004 - Version 3.10 - Restructuring only -- the behaviour of the exiftool script was not changed - Moved html documentation to new html directory - API changes: - Conform to standard Perl module mechanics: - Changed ExifTool package name to Image::ExifTool - Added Makefile.PL and other standard files - Added Perl pod documentation - Added standard test files - Moved modules into lib directory - Changed "TagTables" directory name to "ExifTool" - Added extra parameter in new RandomAccessFile Feb. 20, 2004 - Version 3.05 - Fixed problem where output files (-o) weren't written if -p option used Feb. 19, 2004 - Version 3.04 - Added -U option to allow display of unknown values in Canon binary data blocks - Made unknown tag names more specific when -u or -U option used - Added RawData and DecoderTable tags (for Canon RAW file) Feb. 17, 2004 - Version 3.03 - Fixed RandomAccessFile package name (should have been File::RandomAccessFile) - Added IxusAFPoint tag to Canon maker notes - Avoid scanning past end of Canon binary data blocks - API changes: - GetFoundTags() and GetRequestedTags() now return list instead of list reference Feb. 16, 2004 - Version 3.02 - Improved handling of Pentax maker notes Feb. 15, 2004 - Version 3.01 - API changes: - Added GetValue() function - Completed API documentation Feb. 13, 2004 - Version 3.00 - Removed -all option (it is now the default -- specify -common for previous default behaviour) - Added -a option to allow printout of duplicate tag values - API changes: - I am finally happy with the API, so future major changes are less likely (hence the major version number) - No longer return ARRAY reference for list of tags (Instead, tag values are joined in a comma separated list if tag 'List' flag is set) - Added SAVE_DUPLICATES option - Added BuildCompositeTags() to EXPORT_OK list - GetFoundTags() now sorts tags in specified order - GetDescriptions() longer returns undef if the description doesn't exist Feb. 12, 2004 - Version 2.71 - Still more playing with Pentax maker notes - More API changes: - Added RandomAccessFile.pm - All image file i/o now done through a RandomAccessFile object --> allows proper piping and use of string i/o - Allow scalar reference to be passed to ImageInfo() (for string i/o) Feb. 11, 2004 - Version 2.70 - More tweaking of Pentax maker notes - Changed API to be more object oriented: - Removed SetVerbose(), ExtractUnknown(), SetDateFormat(), EnablePrintConversion(), EnableCompositeTags() - Added Options() to replace above functions - Changed WarnDuplicateTags() to WarnDuplicateDescriptions() - Added GetFoundTags() and GetRequestedTags() - Many functions now take ExifTool object reference as first argument - ImageInfo() no longer returns reference to ExifTool object when used in list context (you have to use "new ExifTool" and the OO form of ImageInfo() if you want the object) Feb. 10, 2004 - Version 2.62 - Added -u option to allow display of unknown tags - Major changes to Pentax maker notes (still needs work) Feb. 09, 2004 - Version 2.61 - Allow file reference to be passed to ImageInfo() - Allow file to be read from standard input by specifying "-" as file name - Added FileType tag Feb. 07, 2004 - Version 2.60 - Improve IPTC parsing and add support for more IPTC data types - Read Photoshop APP13 records properly - Added -g option - Move shortcuts into separate module - Changes to API: - Removed LoadAllTables() and added GetAllTags() - Removed GetDescriptions() and added GetDescription() - Changed GetShortcuts() to return a list - Added tag groups and GetGroup() function - Return object data from ImageInfo() for use in GetGroup() Jan. 30, 2004 - Version 2.51 - Speed up JPG reading code - API no longer returns references to image-specific static data - Added ExifToolVersion tag Jan. 29, 2004 - Version 2.50 - Changed API to return binary data as SCALAR reference and list of values as ARRAY reference - Attempt to make case of tag descriptions more consistent Jan. 28, 2004 - Version 2.41 - Scan photoshop JPG 0xe1 garbage for possible XMP information Jan. 27, 2004 - Version 2.40 - Improved handling of XMP data - Changed output format and added -l option Jan. 21, 2004 - Version 2.36 - Don't output trailing linefeed when -b option used Jan. 19, 2004 - Version 2.35 - Changes to verbose output - Added TagTables::CanonRaw::CleanRaw() as an API utility function Jan. 16, 2004 - Version 2.34 - Added 'Validate' check for Canon data fields - Changed ScaleFactor35efl to use FocalLengthIn35mmFormat if available Jan. 15, 2004 - Version 2.33 - Added ScaleFactor35efl, FocalLength35efl, Lens35efl - Allow Composite tags to Require/Desire each other - Changed FlashType to use FlashBits instead of CanonFlashMode Jan. 13, 2004 - Version 2.32 - Added -d (date format) option - Added -p (print format file) option Jan. 9, 2004 - Version 2.31 - Exif WhiteBalance no longer overrides maker-specific WhiteBalance Jan. 8, 2004 - Version 2.30 - Added support for IPTC format information Jan. 6, 2004 - Version 2.25 - Fixed problem with ImageInfo() function prototype - Fixed printout of JpgFromRaw message (doesn't affect JPG extraction) - Set output files to binmode (including STDOUT) if -b option used Jan. 1, 2004 - Version 2.24 - Fixed -list option to show all available tag names Dec. 18, 2003 - Version 2.23 - Changed "Disable" routines to "Enable" Dec. 17, 2003 - Version 2.22 - Fixed make/model tags which I broke with a recent change - Removed null terminator from returned strings Dec. 16, 2003 - Version 2.21 - Fixed problem with decoding some Nikon maker notes - General improvements and tweaks to the code Dec. 14, 2003 - Version 2.20 - Now extracts preview image from 300D JPG files (PreviewImage) - Changed ThumbnailData tag name to ThumbnailImage Dec. 12, 2003 - Version 2.10 - ExifTool::ImageInfo now returns reference to hash instead of hash Dec. 10, 2003 - Version 2.01 - Minor fixes for reading of RAW files Dec. 09, 2003 - Version 2.00 - Added support for Olympus, Casio and Nikon cameras - Now recognizes GPS information - Moved config information to TagTables modules - Restructured API Dec. 05, 2003 - Version 1.72 - Changes to composite Aperture and ShutterSpeed decisions Dec. 05, 2003 - Version 1.71 - Read 10D Custom functions from CRW file too (thanks dpophyte) Dec. 05, 2003 - Version 1.70 - Added custom functions for 10D and 1D Dec. 04, 2003 - Version 1.62 - Decode known flash bits Dec. 04, 2003 - Version 1.61 - Override ShutterSpeed with BulbDuration if available - Change -s option to add tab-separated list Dec. 03, 2003 - Version 1.60 - Big improvements in reading Canon RAW files Nov. 29, 2003 - Version 1.50 - Added ability to extract JPG from RAW - Added ExifData tag to allow entire EXIF block to be dumped Nov. 26, 2003 - Version 1.40 - Split up config files to speed things up - Added ability to extract binary data - Added ThumbnailData tag (to allow extracting JPG thumbnails) Nov. 25, 2003 - Version 1.30 - Added experimental Canon RAW (CRW) file support Nov. 22, 2003 - Version 1.20 - Now reads TIFF files too Nov. 20, 2003 - Version 1.12 - Don't translate Photoshop Brightness, etc Nov. 20, 2003 - Version 1.11 - Attempt to fix problem on hp - Clean up code a bit - Added '-ver' command-line option Nov. 20, 2003 - Version 1.10 - Added support for XMP format Nov. 19, 2003 - Version 1.00 - Initial release (extracts information from JPEG and GIF images, with Canon, FujiFilm and Pentax makernote support) Image-ExifTool-10.10/config_files/000755 000765 000024 00000000000 12650447263 017023 5ustar00philstaff000000 000000 Image-ExifTool-10.10/exiftool000755 000765 000024 00000777503 12643773701 016177 0ustar00philstaff000000 000000 #!/usr/bin/perl -w #------------------------------------------------------------------------------ # File: exiftool # # Description: Read/write meta information # # Revisions: Nov. 12/03 - P. Harvey Created # (See html/history.html for revision history) # # References: ATV - Alexander Vonk, private communication #------------------------------------------------------------------------------ use strict; require 5.004; my $version = '10.10'; # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool' my $exeDir; BEGIN { # get exe directory $exeDir = ($0 =~ /(.*)[\\\/]/) ? $1 : '.'; # add lib directory at start of include path unshift @INC, "$exeDir/lib"; # load or disable config file if specified if (@ARGV and lc($ARGV[0]) eq '-config') { shift; $Image::ExifTool::configFile = shift; } } use Image::ExifTool qw{:Public}; # function prototypes sub SigInt(); sub SigCont(); sub Cleanup(); sub GetImageInfo($$); sub SetImageInfo($$$); sub DoHardLink($$$$); sub CleanXML($); sub EncodeXML($); sub FormatXML($$$); sub EscapeJSON($;$); sub FormatJSON($$$); sub PrintCSV(); sub AddGroups($$$$); sub ConvertBinary($); sub IsEqual($$); sub Infile($;$); sub AddSetTagsFile($;$); sub DoSetFromFile($$$); sub CleanFilename($); sub ProcessFiles($;$); sub ScanDir($$;$); sub FindFileWindows($$); sub FileNotFound($); sub PreserveTime(); sub AbsPath($); sub SuggestedExtension($$$); sub LoadPrintFormat($); sub FilenameSPrintf($;$@); sub NextUnusedFilename($;$$); sub CreateDirectory($); sub OpenOutputFile($;@); sub AcceptFile($); sub SlurpFile($$); sub ReadStayOpen($); sub PrintTagList($@); sub PrintErrors($$$); $SIG{INT} = 'SigInt'; # do cleanup on Ctrl-C $SIG{CONT} = 'SigCont'; # (allows break-out of delays) END { Cleanup(); } # declare all static file-scope variables my @commonArgs; # arguments common to all commands my @csvFiles; # list of files when reading with CSV option my @csvTags; # order of tags for first file with CSV option (lower case) my @delFiles; # list of files to delete my @dynamicFiles; # list of -tagsFromFile files with dynamic names and -TAG<=FMT pairs my @exclude; # list of excluded tags my (@echo3, @echo4);# stdout and stderr echo after processing is complete my @files; # list of files and directories to scan my @moreArgs; # more arguments to process after -stay_open -@ my @newValues; # list of new tag values to set my @requestTags; # tags to request (for -p or -if option arguments) my @srcFmt; # source file name format strings my @tags; # list of tags to extract my %appended; # list of files appended to my %created; # list of files we created my %csvTags; # lookup for all found tags with CSV option (lower case keys) my %database; # lookup for database information based on file name my %filterExt; # lookup for filtered extensions my %ignore; # directory names to ignore my %preserveTime; # preserved timestamps for files my %printFmt; # the contents of the print format file my %setTags; # hash of list references for tags to set from files my %setTagsList; # list of other tag lists for multiple -tagsFromFile from the same file my %usedFileName; # lookup for file names we already used in TestName feature my %utf8FileName; # lookup for file names that are UTF-8 encoded my %warnedOnce; # lookup for once-only warnings my %wext; # -W extensions to write my $allGroup; # show group name for all tags my $argFormat; # use exiftool argument-format output my $binaryOutput; # flag for binary output (undef or 1, or 0 for binary XML/PHP) my $binaryStdout; # flag set if we output binary to stdout my $comma; # flag set if we need a comma in JSON output my $condition; # conditional processing of files my $count; # count of files scanned my $countBad; # count of files with errors my $countBadCr; # count files not created due to errors my $countBadLink; # count bad links my $countBadWr; # count write errors my $countCopyWr; # count of files copied without being changed my $countDir; # count of directories scanned my $countFailed; # count files that failed condition my $countGoodCr; # count files created OK my $countGoodWr; # count files written OK my $countLink; # count number of links created my $countNewDir; # count of directories created my $countSameWr; # count files written OK but not changed my $critical; # flag for critical operations (disable CTRL-C) my $csv; # flag for CSV option (set to "CSV", or maybe "JSON" when writing) my $csvAdd; # flag to add CSV information to existing lists my $csvSaveCount; # save counter for last CSV file loaded my $deleteOrig; # 0=restore original files, 1=delete originals, 2=delete w/o asking my $disableOutput; # flag to disable normal output my $doSetFileName; # flag set if FileName may be written my $doUnzip; # flag to extract info from .gz and .bz2 files my $escapeHTML; # flag to escape printed values for html my $evalWarning; # warning from eval my $executeID; # -execute ID number my $fileHeader; # header to print to output file (or console, once) my $fileTrailer; # trailer for output file my $filtered; # flag indicating file was filtered by name my $filterFlag; # file filter flag (0x01=deny extensions, 0x02=allow extensions) my $fixLen; # flag to fix description lengths when writing alternate languages my $forcePrint; # string to use for missing tag values (undef to not print them) my $helped; # flag to avoid printing help if no tags specified my $html; # flag for html-formatted output (2=html dump) my $interrupted; # flag set if CTRL-C is pressed during a critical process my $isWriting; # flag set if we are writing tags my $joinLists; # flag set to join list values into a single string my $json; # flag for JSON/PHP output format (1=JSON, 2=PHP) my $langOpt; # language option my $listItem; # item number for extracting single item from a list my $listSep; # list item separator (', ' by default) my $mt; # main ExifTool object my $multiFile; # non-zero if we are scanning multiple files my $outFormat; # -1=Canon format, 0=same-line, 1=tag names, 2=values only my $outOpt; # output file or directory name my $overwriteOrig; # flag to overwrite original file (1=overwrite, 2=in place) my $pause; # pause before returning my $preserveTime; # flag to preserve times of updated files (2=preserve FileCreateDate only) my $progress; # progress count my $progressMax; # total number of files to process my $progStr; # progress message string my $quiet; # flag to disable printing of informational messages / warnings my $rafStdin; # File::RandomAccess for stdin (if necessary to rewind) my $recurse; # recurse into subdirectories (2=also hidden directories) my $rtnVal; # command return value (0=success) my $saveCount; # count the number of times we will/did call SaveNewValues() my $scanWritable; # flag to process only writable file types my $seqFileNum; # sequential file number used for %C my $showGroup; # number of group to show (may be zero or '') my $showTagID; # non-zero to show tag ID's my $stayOpenBuff='';# buffer for -stay_open file my $stayOpenFile; # name of the current -stay_open argfile my $structOpt; # output structured XMP information (JSON and XML output only) my $tabFormat; # non-zero for tab output format my $tagOut; # flag for separate text output file for each tag my $textOut; # extension for text output file (or undef for no output) my $textOverwrite; # flag to overwrite existing text output file (2=append, 3=over+append) my $tmpFile; # temporary file to delete on exit my $tmpText; # temporary text file my $utf8; # flag set if we are using UTF-8 encoding my $validFile; # flag indicating we processed a valid file my $verbose; # verbose setting my $vout; # verbose output file reference (\*STDOUT or \*STDERR) my $xml; # flag for XML-formatted output # flag to keep the input -@ argfile open: # 0 = normal behaviour # 1 = received "-stay_open true" and waiting for argfile to keep open # 2 = currently reading from STAYOPEN argfile # 3 = waiting for -@ to switch to a new STAYOPEN argfile my $stayOpen = 0; # lookup for O/S names which may use a backslash as a directory separator # (ref File::Spec of PathTools-3.2701) my %hasBackslash = ( MSWin32 => 1, os2 => 1, dos => 1, NetWare => 1, symbian => 1, cygwin => 1 ); # lookup for O/S names which use CR/LF newlines my $isCRLF = { MSWin32 => 1, os2 => 1, dos => 1 }->{$^O}; # lookup for JSON characters that we escape specially my %jsonChar = ( '"'=>'"', '\\'=>'\\', "\t"=>'t', "\n"=>'n', "\r"=>'r' ); # options requiring additional arguments # (used only to skip over these arguments when reading -stay_open ARGFILE) my %optArgs = ( '-tagsfromfile' => 1, '-addtagsfromfile' => 1, '-alltagsfromfile' => 1, '-@' => 1, '-api' => 1, '-c' => 1, '-coordformat' => 1, '-charset' => 0, # (optional arg; OK because arg cannot begin with "-") '-config' => 1, '-d' => 1, '-dateformat' => 1, '-D' => 0, # necessary to avoid matching lower-case equivalent '-echo' => 1, '-echo1' => 1, '-echo2' => 1, '-echo3' => 1, '-echo4' => 1, '-ext' => 1, '--ext' => 1, '-extension' => 1, '--extension' => 1, '-fileorder' => 1, '-geotag' => 1, '-globaltimeshift' => 1, '-i' => 1, '-ignore' => 1, '-if' => 1, '-lang' => 0, # (optional arg; cannot begin with "-") '-listitem' => 1, '-o' => 1, '-out' => 1, '-p' => 1, '-printformat' => 1, '-P' => 0, '-password' => 1, '-require' => 1, '-sep' => 1, '-separator' => 1, '-srcfile' => 1, '-stay_open' => 1, '-use' => 1, '-userparam' => 1, '-w' => 1, '-w!' => 1, '-w+' => 1, '-w+!' => 1, '-w!+' => 1, '-textout' => 1, '-textout!' => 1, '-textout+' => 1, '-textout+!' => 1, '-textout!+' => 1, '-tagout' => 1, '-tagout!' => 1, '-tagout+' => 1, '-tagout+!' => 1, '-tagout!+' => 1, '-wext' => 1, '-wm' => 1, '-x' => 1, '-exclude' => 1, '-X' => 0, ); # exit routine sub Exit { if ($pause) { if (eval { require Term::ReadKey }) { print STDERR "-- press any key --"; Term::ReadKey::ReadMode('cbreak'); Term::ReadKey::ReadKey(0); Term::ReadKey::ReadMode(0); print STDERR "\b \b" x 20; } else { print STDERR "-- press RETURN --\n"; ; } } exit shift; } # my warning and error routines (NEVER say "die"!) sub Warn { if ($quiet < 2 or $_[0] =~ /^Error/) { my $oldWarn = $SIG{'__WARN__'}; delete $SIG{'__WARN__'}; warn(@_); $SIG{'__WARN__'} = $oldWarn if defined $oldWarn; } } sub Error { Warn @_; $rtnVal = 1; } sub WarnOnce($) { Warn(@_) and $warnedOnce{$_[0]} = 1 unless $warnedOnce{$_[0]}; } # define signal handlers and cleanup routine sub SigInt() { $critical and $interrupted = 1, return; Cleanup(); exit 1; } sub SigCont() { } sub Cleanup() { $mt->Unlink($tmpFile) if defined $tmpFile; $mt->Unlink($tmpText) if defined $tmpText; undef $tmpFile; undef $tmpText; PreserveTime() if %preserveTime; } #------------------------------------------------------------------------------ # main script # # isolate arguments common to all commands if (grep /^-common_args$/i, @ARGV) { my (@newArgs, $common); foreach (@ARGV) { if (/^-common_args$/i) { $common = 1; } elsif ($common) { push @commonArgs, $_; } else { push @newArgs, $_; } } @ARGV = @newArgs if $common; } #.............................................................................. # loop over sets of command-line arguments separated by "-execute" Command: for (;;) { @echo3 and print STDOUT join("\n", @echo3), "\n"; @echo4 and print STDERR join("\n", @echo4), "\n"; $rafStdin->Close() if $rafStdin; undef $rafStdin; # exit Command loop now if we are all done processing commands last unless @ARGV or not defined $rtnVal or $stayOpen >= 2 or @commonArgs; # attempt to restore text mode for STDOUT if necessary if ($binaryStdout) { binmode(STDOUT,':crlf') if $] >= 5.006 and $isCRLF; $binaryStdout = 0; } # flush console and print "{ready}" message if -stay_open is in effect if ($stayOpen >= 2) { if ($quiet) { # flush output if possible eval { require IO::Handle } and STDERR->flush(), STDOUT->flush(); } else { eval { require IO::Handle } and STDERR->flush(); my $id = defined $executeID ? $executeID : ''; my $save = $|; $| = 1; # turn on output autoflush for stdout print "{ready$id}\n"; $| = $save; # restore original autoflush setting } } $rtnVal = 0 unless defined $rtnVal; # initialize necessary static file-scope variables # (not done: @commonArgs, @moreArgs, $critical, $binaryStdout, $helped, # $interrupted, $mt, $pause, $rtnVal, $stayOpen, $stayOpenBuff, $stayOpenFile) undef @csvFiles; undef @csvTags; undef @delFiles; undef @dynamicFiles; undef @echo3; undef @echo4; undef @exclude; undef @files; undef @newValues; undef @srcFmt; undef @tags; undef %appended; undef %created; undef %csvTags; undef %database; undef %filterExt; undef %ignore; undef %printFmt; undef %preserveTime; undef %setTags; undef %setTagsList; undef %usedFileName; undef %utf8FileName; undef %warnedOnce; undef %wext; undef $allGroup; undef $argFormat; undef $binaryOutput; undef $comma; undef $condition; undef $csv; undef $csvAdd; undef $deleteOrig; undef $disableOutput; undef $doSetFileName; undef $doUnzip; undef $escapeHTML; undef $evalWarning; undef $executeID; undef $fileHeader; undef $fileTrailer; undef $filtered; undef $fixLen; undef $forcePrint; undef $joinLists; undef $langOpt; undef $listItem; undef $multiFile; undef $outOpt; undef $preserveTime; undef $progress; undef $progressMax; undef $recurse; undef $scanWritable; undef $showGroup; undef $showTagID; undef $structOpt; undef $tagOut; undef $textOut; undef $textOverwrite; undef $tmpFile; undef $tmpText; undef $validFile; undef $verbose; $count = 0; $countBad = 0; $countBadCr = 0; $countBadLink = 0; $countBadWr = 0; $countCopyWr = 0; $countDir = 0; $countFailed = 0; $countGoodCr = 0; $countGoodWr = 0; $countLink = 0; $countNewDir = 0; $countSameWr = 0; $csvSaveCount = 0; $filterFlag = 0; $html = 0; $isWriting = 0; $json = 0; $listSep = ', '; $outFormat = 0; $overwriteOrig = 0; $progStr = ''; $quiet = 0; $saveCount = 0; $seqFileNum = 0; $tabFormat = 0; $utf8 = 1; $vout = \*STDOUT; $xml = 0; # define local variables used only in this command loop my @fileOrder; # tags to use for ordering of input files my %excludeGrp; # hash of tags excluded by group my $addGeotime; # automatically added geotime argument my $allInGroup; # flag to show all tags in a group my $doGlob; # flag set to do filename wildcard expansion my $escapeXML; # flag to escape printed values for xml my $setTagsFile; # filename for last TagsFromFile option my $sortOpt; # sort option is used my $srcStdin; # one of the source files is STDIN my $useMWG; # flag set if we are using any MWG tag my ($argsLeft, @nextPass, $badCmd); my $pass = 0; # for Windows, use globbing for wildcard expansion if available - MK/20061010 if ($^O eq 'MSWin32' and eval { require File::Glob }) { # override the core glob forcing case insensitivity import File::Glob qw(:globally :nocase); $doGlob = 1; } $mt = new Image::ExifTool; # create ExifTool object # don't extract duplicates by default unless set by UserDefined::Options $mt->Options(Duplicates => 0) unless %Image::ExifTool::UserDefined::Options and defined $Image::ExifTool::UserDefined::Options{Duplicates}; # default is to join lists if the List option was set in the config file $joinLists = 1 if defined $mt->Options('List') and not $mt->Options('List'); # preserve FileCreateDate if possible if (not $preserveTime and $^O eq 'MSWin32') { $preserveTime = 2 if eval { require Win32::API } and eval { require Win32API::File }; } # parse command-line options in 2 passes... # pass 1: set all of our ExifTool options # pass 2: print all of our help and informational output (-list, -ver, etc) for (;;) { # execute the command now if no more arguments or -execute is used if (not @ARGV or $ARGV[0] =~ /^-execute(\d*)$/i) { if (@ARGV) { $executeID = $1; # save -execute number for "{ready}" response $helped = 1; # don't show help if we used -execute $badCmd and shift, next Command; } elsif ($stayOpen >= 2) { ReadStayOpen(\@ARGV); # read more arguments from -stay_open file next; } elsif ($badCmd) { next Command; } if ($pass == 0) { # insert common arguments now if not done already if (@commonArgs and not defined $argsLeft) { # count the number of arguments remaining for subsequent commands $argsLeft = scalar(@ARGV) + scalar(@moreArgs); unshift @ARGV, @commonArgs; # all done with commonArgs if this is the end of the command undef @commonArgs unless $argsLeft; next; } # check if we have more arguments now than we did before we processed # the common arguments. If so, then we have an infinite processing loop if (defined $argsLeft and $argsLeft < scalar(@ARGV) + scalar(@moreArgs)) { Warn "Ignoring -common_args from $ARGV[0] onwards to avoid infinite recursion\n"; while ($argsLeft < scalar(@ARGV) + scalar(@moreArgs)) { @ARGV and shift(@ARGV), next; shift @moreArgs; } } # require MWG module if used in any argument # (note: this also covers the -p option because these tags were added to @tags) $useMWG = 1 if not $useMWG and grep /^mwg:/i, @tags; if ($useMWG) { require Image::ExifTool::MWG; Image::ExifTool::MWG::Load(); } } if (@nextPass) { # process arguments which were deferred to the next pass unshift @ARGV, @nextPass; undef @nextPass; ++$pass; next; } @ARGV and shift; # remove -execute from argument list last; # process the command now } $_ = shift; next if $badCmd; # flush remaining arguments if aborting this command if (s/^(-|\xe2\x88\x92)//) { # allow funny dashes (nroff dash bug for cut-n-paste from pod) s/^\xe2\x88\x92/-/; # translate double-dash too my $a = lc $_; if (/^list([wfrdx]|wf|g(\d*))?$/i) { $pass or push @nextPass, "-$_"; my $type = lc($1 || ''); if (not $type or $type eq 'w' or $type eq 'x') { my $group; if ($ARGV[0] and $ARGV[0] =~ /^(-|\xe2\x88\x92)(.+):(all|\*)$/i) { if ($pass == 0) { $useMWG = 1 if lc($2) eq 'mwg'; push @nextPass, shift; next; } $group = $2; shift; $group =~ /IFD/i and Warn("Can't list tags for specific IFD\n"), next; $group =~ /^(all|\*)$/ and undef $group; } else { $pass or next; } $helped = 1; if ($type eq 'x') { require Image::ExifTool::TagInfoXML; my %opts; $opts{Flags} = 1 if defined $forcePrint; $opts{NoDesc} = 1 if $outFormat > 0; $opts{Lang} = $langOpt; Image::ExifTool::TagInfoXML::Write(undef, $group, %opts); next; } my $wr = ($type eq 'w'); my $msg = ($wr ? 'Writable' : 'Available') . ($group ? " $group" : '') . ' tags'; PrintTagList($msg, $wr ? GetWritableTags($group) : GetAllTags($group)); # also print shortcuts if listing all tags next if $group or $wr; my @tagList = GetShortcuts(); PrintTagList('Command-line shortcuts', @tagList) if @tagList; next; } $pass or next; $helped = 1; if ($type eq 'wf') { my @wf; CanWrite($_) and push @wf, $_ foreach GetFileType(); PrintTagList('Writable file extensions', @wf); } elsif ($type eq 'f') { PrintTagList('Supported file extensions', GetFileType()); } elsif ($type eq 'r') { PrintTagList('Recognized file extensions', GetFileType(undef, 0)); } elsif ($type eq 'd') { PrintTagList('Deletable groups', GetDeleteGroups()); } else { # 'g(\d*)' # list all groups in specified family my $family = $2 || 0; PrintTagList("Groups in family $family", GetAllGroups($family)); } next; } if ($a eq 'ver') { $pass or push(@nextPass,'-ver'), next; my $libVer = $Image::ExifTool::VERSION; my $str = $libVer eq $version ? '' : " [Warning: Library version is $libVer]"; print("$version$str$Image::ExifTool::RELEASE\n"); $helped = 1; next; } if (/^(all|add)?tagsfromfile(=.*)?$/i) { $setTagsFile = $2 ? substr($2,1) : (@ARGV ? shift : ''); if ($setTagsFile eq '') { Error("File must be specified for -tagsFromFile option\n"); $badCmd = 1; next; } # create necessary lists, etc for this new -tagsFromFile file AddSetTagsFile($setTagsFile, { Replace => ($1 and lc($1) eq 'add') ? 0 : 1 } ); next; } if ($a eq '@') { my $argFile = shift or Error("Expecting filename for -\@ option\n"), $badCmd=1, next; # switch to new ARGFILE if using chained -stay_open options if ($stayOpen == 1) { # defer remaining arguments until we close this argfile @moreArgs = @ARGV; undef @ARGV; } elsif ($stayOpen == 3) { if ($stayOpenFile and $stayOpenFile ne '-' and $argFile eq $stayOpenFile) { # don't allow user to switch to the same -stay_open argfile # because it will result in endless recursion $stayOpen = 2; Warn "Ignoring request to switch to the same -stay_open ARGFILE ($argFile)\n"; next; } close STAYOPEN; $stayOpen = 1; # switch to this -stay_open file } my $fp = ($stayOpen == 1 ? \*STAYOPEN : \*ARGFILE); unless ($mt->Open($fp, $argFile)) { unless ($argFile !~ /^\// and $mt->Open($fp, "$exeDir/$argFile")) { Error "Error opening arg file $argFile\n"; $badCmd = 1; next } } if ($stayOpen == 1) { $stayOpenFile = $argFile; # remember the name of the file we have open $stayOpenBuff = ''; # initialize buffer for reading this file $stayOpen = 2; $helped = 1; ReadStayOpen(\@ARGV); next; } my (@newArgs, $didBOM); foreach () { # filter Byte Order Mark if it exists from start of UTF-8 text file unless ($didBOM) { s/^\xef\xbb\xbf//; $didBOM = 1; } s/^\s+//; s/[\x0d\x0a]+$//s; # remove leading white space and trailing newline # remove white space before, and single space after '=', '+=', '-=' or '<=' s/^(-[-:\w]+#?)\s*([-+<]?=) ?/$1$2/; push @newArgs, $_ unless $_ eq '' or /^#/; } close ARGFILE; unshift @ARGV, @newArgs; next; } /^(-?)(a|duplicates)$/i and $mt->Options(Duplicates => ($1 ? 0 : 1)), next; if ($a eq 'api') { my $opt = shift; defined $opt or Error("Expected OPT[=VAL] argument for -api option\n"), $badCmd=1, next; my $val = ($opt =~ s/=(.*)//s) ? $1 : 1; $mt->Options($opt => (length($val) ? $val : undef)); # update $forcePrint in case MissingTagValue was changed $forcePrint = $mt->Options('MissingTagValue') if defined $forcePrint; next; } /^arg(s|format)$/i and $argFormat = 1, next; /^b(inary)?$/i and $mt->Options(Binary => 1, NoPDFList => 1), $binaryOutput = 1, next; if (/^c(oordFormat)?$/i) { my $fmt = shift; $fmt or Error("Expecting coordinate format for -c option\n"), $badCmd=1, next; $mt->Options('CoordFormat', $fmt); next; } if ($a eq 'charset') { my $charset = (@ARGV and $ARGV[0] !~ /^(-|\xe2\x88\x92)/) ? shift : undef; if (not $charset) { $pass or push(@nextPass, '-charset'), next; my %charsets; $charsets{$_} = 1 foreach values %Image::ExifTool::charsetName; PrintTagList('Available character sets', sort keys %charsets); $helped = 1; } elsif ($charset !~ s/^(\w+)=// or lc($1) eq 'exiftool') { $mt->Options(Charset => $charset); $utf8 = ($mt->Options('Charset') eq 'UTF8'); } else { # set internal encoding of specified metadata type my $type = { id3 => 'ID3', iptc => 'IPTC', exif => 'EXIF', filename => 'FileName', photoshop => 'Photoshop', quicktime => 'QuickTime' }->{lc $1}; $type or Warn("Unknown type for -charset option: $1\n"), next; $mt->Options("Charset$type" => $charset); } next; } /^config$/i and Warn("Ignored -config option (not first on command line)\n"), shift, next; if (/^csv(\+?=.*)?/i) { my $csvFile = $1; # must process on 2nd pass so -f and -charset options are available unless ($pass) { push @nextPass, "-$_"; if ($csvFile) { push @newValues, { SaveCount => ++$saveCount }; # marker to save new values now $csvSaveCount = $saveCount; } next; } if ($csvFile) { $csvFile =~ s/^(\+?=)//; $csvAdd = 2 if $1 eq '+='; $vout = \*STDERR if $srcStdin; $verbose and print $vout "Reading CSV file $csvFile\n"; my $msg; if ($mt->Open(\*CSVFILE, $csvFile)) { binmode CSVFILE; require Image::ExifTool::Import; $msg = Image::ExifTool::Import::ReadCSV(\*CSVFILE, \%database, $forcePrint); close(CSVFILE); } else { $msg = "Error opening CSV file '$csvFile'"; } $msg and Warn("$msg\n"); $isWriting = 1; } $csv = 'CSV'; next; } if (/^d$/ or $a eq 'dateformat') { my $fmt = shift; $fmt or Error("Expecting date format for -d option\n"), $badCmd=1, next; $mt->Options('DateFormat', $fmt); next; } (/^D$/ or $a eq 'decimal') and $showTagID = 'D', next; /^delete_original(!?)$/i and $deleteOrig = ($1 ? 2 : 1), next; (/^e$/ or $a eq '-composite') and $mt->Options(Composite => 0), next; (/^-e$/ or $a eq 'composite') and $mt->Options(Composite => 1), next; (/^E$/ or $a eq 'escapehtml') and require Image::ExifTool::HTML and $escapeHTML = 1, next; ($a eq 'ex' or $a eq 'escapexml') and $escapeXML = 1, next; if (/^echo(\d)?$/i) { my $n = $1 || 1; my $arg = shift; next unless defined $arg; $n > 4 and Warn("Invalid -echo number\n"), next; if ($n > 2) { $n == 3 ? push(@echo3, $arg) : push(@echo4, $arg); } else { print {$n==2 ? \*STDERR : \*STDOUT} $arg, "\n"; } $helped = 1; next; } if (/^(ee|extractembedded)$/i) { $mt->Options(ExtractEmbedded => 1); $mt->Options(Duplicates => 1); next; } # (-execute handled at top of loop) if (/^-?ext(ension)?$/i) { my $ext = shift; defined $ext or Error("Expecting extension for -ext option\n"), $badCmd=1, next; $ext =~ s/^\.//; # remove leading '.' if it exists my $flag = /^-/ ? 0 : 1; $filterFlag |= (0x01 << $flag); $filterExt{uc($ext)} = $flag; next; } if (/^f$/ or $a eq 'forceprint') { $forcePrint = $mt->Options('MissingTagValue'); unless (defined $forcePrint) { $forcePrint = '-'; $mt->Options(MissingTagValue => '-'); } next; } if (/^F([-+]?\d*)$/ or /^fixbase([-+]?\d*)$/i) { $mt->Options(FixBase => $1); next; } if (/^fast(\d*)$/i) { $mt->Options(FastScan => (length $1 ? $1 : 1)); next; } if ($a eq 'fileorder') { push @fileOrder, shift if @ARGV; next; } $a eq 'globaltimeshift' and $mt->Options(GlobalTimeShift => shift), next; if (/^(g)(roupHeadings|roupNames)?([\d:]*)$/i) { $showGroup = $3 || 0; $allGroup = ($2 ? lc($2) eq 'roupnames' : $1 eq 'G'); $mt->Options(SavePath => 1) if $showGroup =~ /\b5\b/; next; } if ($a eq 'geotag') { my $trkfile = shift; unless ($pass) { # defer to next pass so the filename charset is available push @nextPass, '-geotag', $trkfile; next; } $trkfile or Error("Expecting file name for -geotag option\n"), $badCmd=1, next; # allow wildcards in filename if ($trkfile =~ /[*?]/) { # CORE::glob() splits on white space, so use File::Glob if possible my @trks; if ($^O eq 'MSWin32' and eval { require Win32::FindFile }) { # ("-charset filename=UTF8" must be set for this to work with Unicode file names) @trks = FindFileWindows($mt, $trkfile); } elsif (eval { require File::Glob }) { @trks = File::Glob::bsd_glob($trkfile); } else { @trks = glob($trkfile); } @trks or Error("No matching file found for -geotag option\n"), $badCmd=1, next; push @newValues, 'geotag='.shift(@trks) while @trks > 1; $trkfile = pop(@trks); } $_ = "geotag=$trkfile"; # (fall through!) } if (/^h$/ or $a eq 'htmlformat') { require Image::ExifTool::HTML; $html = $escapeHTML = 1; $json = $xml = 0; next; } (/^H$/ or $a eq 'hex') and $showTagID = 'H', next; if (/^htmldump([-+]?\d+)?$/i) { $verbose = ($verbose || 0) + 1; $html = 2; $mt->Options(HtmlDumpBase => $1) if defined $1; next; } if (/^i(gnore)?$/i) { my $dir = shift; defined $dir or Error("Expecting directory name for -i option\n"), $badCmd=1, next; $ignore{$dir} = 1; next; } if ($a eq 'if') { my $cond = shift; defined $cond or Error("Expecting expression for -if option\n"), $badCmd=1, next; $useMWG = 1 if $cond =~ /\$\{?mwg:/i; # add to list of requested tags push @requestTags, $cond =~ /\$\{?((?:[-\w]+:)*[-\w?*]+)/g; if (defined $condition) { $condition .= " and ($cond)"; } else { $condition = "($cond)"; } next; } if (/^j(son)?(\+?=.*)?$/i) { if ($2) { # must process on 2nd pass because we need -f and -charset options unless ($pass) { push @nextPass, "-$_"; push @newValues, { SaveCount => ++$saveCount }; # marker to save new values now $csvSaveCount = $saveCount; next; } my $jsonFile = $2; $jsonFile =~ s/^(\+?=)//; $csvAdd = 2 if $1 eq '+='; $vout = \*STDERR if $srcStdin; $verbose and print $vout "Reading JSON file $jsonFile\n"; my $chset = $mt->Options('Charset'); my $msg; if ($mt->Open(\*JSONFILE, $jsonFile)) { binmode JSONFILE; require Image::ExifTool::Import; $msg = Image::ExifTool::Import::ReadJSON(\*JSONFILE, \%database, $forcePrint, $chset); close(JSONFILE); } else { $msg = "Error opening JSON file '$jsonFile'"; } $msg and Warn("$msg\n"); $isWriting = 1; $csv = 'JSON'; } else { $json = 1; $html = $xml = 0; $mt->Options(Duplicates => 1); require Image::ExifTool::XMP; # for FixUTF8() } next; } /^(k|pause)$/i and $pause = 1, next; (/^l$/ or $a eq 'long') and --$outFormat, next; (/^L$/ or $a eq 'latin') and $utf8 = 0, $mt->Options(Charset => 'Latin'), next; if ($a eq 'lang') { $langOpt = (@ARGV and $ARGV[0] !~ /^-/) ? shift : undef; if ($langOpt) { # make lower case and use underline as a separator (eg. 'en_ca') $langOpt =~ tr/-A-Z/_a-z/; $mt->Options(Lang => $langOpt); next if $langOpt eq $mt->Options('Lang'); } else { $pass or push(@nextPass, '-lang'), next; } my $langs = "Available languages:\n"; $langs .= " $_ - $Image::ExifTool::langName{$_}\n" foreach @Image::ExifTool::langs; $langs =~ tr/_/-/; # display dashes instead of underlines in language codes $langs = $mt->Decode($langs, 'UTF8'); $langs = Image::ExifTool::HTML::EscapeHTML($langs) if $escapeHTML; $langOpt and Error("Invalid or unsupported language '$langOpt'.\n$langs"), $badCmd=1, next; print $langs; $helped = 1; next; } if ($a eq 'listitem') { my $li = shift; defined $li and Image::ExifTool::IsInt($li) or Warn("Expecting integer for -listItem option\n"), next; $mt->Options(ListItem => $li); $listItem = $li; next; } /^(m|ignoreminorerrors)$/i and $mt->Options(IgnoreMinorErrors => 1), next; /^(n|-printconv)$/i and $mt->Options(PrintConv => 0), next; /^(-n|printconv)$/i and $mt->Options(PrintConv => 1), next; if (/^o(ut)?$/i) { $outOpt = shift; defined $outOpt or Error("Expected output file or directory name for -o option\n"), $badCmd=1, next; CleanFilename($outOpt); # verbose messages go to STDERR of output is to console $vout = \*STDERR if $vout =~ /^-(\.\w+)?$/; next; } /^overwrite_original$/i and $overwriteOrig = 1, next; /^overwrite_original_in_place$/i and $overwriteOrig = 2, next; if (/^p$/ or $a eq 'printformat') { my $fmt = shift; if ($pass) { LoadPrintFormat($fmt); } else { # defer to next pass so the filename charset is available push @nextPass, '-p', $fmt; } next; } (/^P$/ or $a eq 'preserve') and $preserveTime = 1, next; /^password$/i and $mt->Options(Password => shift), next; if ($a eq 'progress') { $progress = 0; $verbose = 0 unless defined $verbose; next; } /^q(uiet)?$/i and ++$quiet, next; /^r(ecurse)?(\.?)$/i and $recurse = ($2 ? 2 : 1), next; if ($a eq 'require') { # undocumented, added in version 8.65 my $ver = shift; unless (defined $ver and Image::ExifTool::IsFloat($ver)) { Error("Expecting version number for -require option\n"); $badCmd = 1; next; } unless ($Image::ExifTool::VERSION >= $ver) { Error("Requires ExifTool version $ver or later\n"); $badCmd = 1; } next; } /^restore_original$/i and $deleteOrig = 0, next; (/^S$/ or $a eq 'veryshort') and $outFormat+=2, next; /^s(hort)?(\d*)$/i and $outFormat = $2 eq '' ? $outFormat + 1 : $2, next; /^scanforxmp$/i and $mt->Options(ScanForXMP => 1), next; if (/^sep(arator)?$/i) { $listSep = shift; defined $listSep or Error("Expecting list item separator for -sep option\n"), $badCmd=1, next; $mt->Options(ListSep => $listSep); $joinLists = 1; # also split when writing values my $listSplit = quotemeta $listSep; # a space in the string matches zero or more whitespace characters $listSplit =~ s/(\\ )+/\\s\*/g; # but a single space alone matches one or more whitespace characters $listSplit = '\\s+' if $listSplit eq '\\s*'; $mt->Options(ListSplit => $listSplit); next; } /^(-)?sort$/i and $sortOpt = $1 ? 0 : 1, next; if ($a eq 'srcfile') { @ARGV or Warn("Expecting FMT for -srcfile option\n"), next; push @srcFmt, shift; next; } if ($a eq 'stay_open') { my $arg = shift; defined $arg or Warn("Expecting argument for -stay_open option\n"), next; if ($arg =~ /^(1|true)$/i) { if (not $stayOpen) { $stayOpen = 1; } elsif ($stayOpen == 2) { $stayOpen = 3; # chained -stay_open options } else { Warn "-stay_open already active\n"; } } elsif ($arg =~ /^(0|false)$/i) { if ($stayOpen >= 2) { # close -stay_open argfile and process arguments up to this point close STAYOPEN; push @ARGV, @moreArgs; undef @moreArgs; } elsif (not $stayOpen) { Warn("-stay_open wasn't active\n"); } $stayOpen = 0; } else { Warn "Invalid argument for -stay_open\n"; } next; } if (/^(-)?struct$/i) { $structOpt = $1 ? 0 : 1; $mt->Options(Struct => $structOpt); # require XMPStruct in case we need to serialize a structure require 'Image/ExifTool/XMPStruct.pl' if $structOpt; next; } /^t(ab)?$/ and $tabFormat = 1, next; if (/^T$/ or $a eq 'table') { $tabFormat = 1; $outFormat+=2; ++$quiet; $forcePrint = $mt->Options('MissingTagValue'); unless (defined $forcePrint) { $forcePrint = '-'; $mt->Options(MissingTagValue => '-'); } next; } if (/^(u)(nknown(2)?)?$/i) { my $inc = ($3 or (not $2 and $1 eq 'U')) ? 2 : 1; $mt->Options(Unknown => $mt->Options('Unknown') + $inc); next; } if ($a eq 'use') { my $module = shift; $module or Error("Expecting module name for -use option\n"), $badCmd=1, next; lc $module eq 'mwg' and $useMWG = 1, next; local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] }; unless (eval "require Image::ExifTool::$module" or eval "require $module" or eval "require '$module'") { Error("Error using module $module\n"); $badCmd = 1; } next; } if ($a eq 'userparam') { my $opt = shift; defined $opt or Error("Expected parameter for -userParam option\n"), $badCmd=1, next; $opt =~ /=/ or $opt .= '=1'; $mt->Options(UserParam => $opt); next; } if (/^v(erbose)?(\d*)$/i) { $verbose = ($2 eq '') ? ($verbose || 0) + 1 : $2; next; } if (/^(w|textout|tagout)([!+]*)$/i) { $textOut = shift || Warn("Expecting output extension for -$_ option\n"); my ($t1, $t2) = ($1, $2); $textOverwrite = 0; $textOverwrite += 1 if $t2 =~ /!/; # overwrite $textOverwrite += 2 if $t2 =~ /\+/; # append if ($t1 ne 'W' and lc($t1) ne 'tagout') { undef $tagOut; } elsif ($textOverwrite >= 2 and $textOut !~ /%[-+]?\d*[.:]?\d*[lu]?[tgs]/) { $tagOut = 0; # append tags to one file } else { $tagOut = 1; # separate file for each tag } next; } if (/^(-?)(wext|tagoutext)$/i) { my $ext = shift; defined $ext or Error("Expecting extension for -wext option\n"), $badCmd=1, next; my $flag = 1; $1 and $wext{'*'} = 1, $flag = -1; $ext =~ s/^\.//; $wext{lc $ext} = $flag; next; } if ($a eq 'wm' or $a eq 'writemode') { my $wm = shift; defined $wm or Error("Expecting argument for -$_ option\n"), $badCmd=1, next; $wm =~ /^[wcg]*$/i or Error("Invalid argument for -$_ option\n"), $badCmd=1, next; $mt->Options(WriteMode => $wm); next; } if (/^x$/ or $a eq 'exclude') { my $tag = shift; defined $tag or Error("Expecting tag name for -x option\n"), $badCmd=1, next; $tag =~ s/\ball\b/\*/ig; # replace 'all' with '*' in tag names if ($setTagsFile) { push @{$setTags{$setTagsFile}}, "-$tag"; } else { push @exclude, $tag; } next; } (/^X$/ or $a eq 'xmlformat') and $xml = 1, $html = $json = 0, $mt->Options(Duplicates => 1), next; if (/^php$/i) { $json = 2; $html = $xml = 0; $mt->Options(Duplicates=>1); next; } /^z(ip)?$/i and $doUnzip = 1, $mt->Options(Compress => 1, Compact => 1), next; $_ eq '' and push(@files, '-'), $srcStdin = 1, next; # read STDIN length $_ eq 1 and $_ ne '*' and Error("Unknown option -$_\n"), $badCmd=1, next; if (/^[^<]+( ++$saveCount }; } push @newValues, $_; if (/^mwg:/i) { $useMWG = 1; } elsif (/^([-\w]+:)*(filename|directory)\b/i) { $doSetFileName = 1; } elsif (/^([-\w]+:)*(geotag|geotime)\b/i) { if (lc $2 eq 'geotag') { if ((not defined $addGeotime or $addGeotime) and length $val) { $addGeotime = ($1 || '') . 'Geotime)/; if ($setTagsFile) { push @{$setTags{$setTagsFile}}, $_; if (/>/) { $useMWG = 1 if /^(.*>\s*)?mwg:/si; if (/\b(filename|directory)#?$/i) { $doSetFileName = 1; } elsif (/\bgeotime#?$/i) { $addGeotime = ''; } } else { $useMWG = 1 if /^([^<]+<\s*(.*\$\{?)?)?mwg:/si; if (/^([-\w]+:)*(filename|directory)\b/i) { $doSetFileName = 1; } elsif (/^([-\w]+:)*geotime\b/i) { $addGeotime = ''; } } } elsif (/^-(.*)/) { push @exclude, $1; } else { push @tags, $_; } } } else { unless ($pass) { # defer to next pass so the filename charset is available push @nextPass, $_; next; } if ($doGlob and /[*?]/) { if ($^O eq 'MSWin32' and eval { require Win32::FindFile }) { push @files, FindFileWindows($mt, $_); } else { # glob each filespec if necessary - MK/20061010 push @files, File::Glob::bsd_glob($_); } $doGlob = 2; } else { push @files, $_; $srcStdin = 1 if $_ eq '-'; } } } # set verbose output to STDERR if output could be to console $vout = \*STDERR if $srcStdin and ($isWriting or @newValues); $mt->Options(TextOut => $vout) if $vout eq \*STDERR; # change default EXIF string encoding if MWG used if ($useMWG and not defined $mt->Options('CharsetEXIF')) { $mt->Options(CharsetEXIF => 'UTF8'); } # print help unless ((@tags and not $outOpt) or @files or @newValues) { if ($doGlob and $doGlob == 2) { Warn "No matching files\n"; $rtnVal = 1; next; } if ($outOpt) { Warn "Nothing to write\n"; $rtnVal = 1; next; } unless ($helped) { # catch warnings if we have problems running perldoc local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] }; my $dummy = \*SAVEERR; # avoid "used only once" warning unless ($^O eq 'os2') { open SAVEERR, ">&STDERR"; open STDERR, '>/dev/null'; } if (system('perldoc',$0)) { print "Syntax: exiftool [OPTIONS] FILE\n\n"; print "Consult the exiftool documentation for a full list of options.\n"; } unless ($^O eq 'os2') { close STDERR; open STDERR, '>&SAVEERR'; } } next; } # do sanity check on -delete_original and -restore_original if (defined $deleteOrig and (@newValues or @tags)) { if (not @newValues) { my $verb = $deleteOrig ? 'deleting' : 'restoring from'; Warn "Can't specify tags when $verb originals\n"; } elsif ($deleteOrig) { Warn "Can't use -delete_original when writing.\n"; Warn "Maybe you meant -overwrite_original ?\n"; } else { Warn "It makes no sense to use -restore_original when writing\n"; } $rtnVal = 1; next; } if ($overwriteOrig > 1 and $outOpt) { Warn "Can't overwrite in place when -o option is used\n"; $rtnVal = 1; next; } if ($tagOut and ($csv or %printFmt or $tabFormat or $xml or ($verbose and $html))) { Warn "Sorry, -W may not be combined with -csv, -htmlDump, -j, -p, -t or -X\n"; $rtnVal = 1; next; } if ($textOut and $csv and $csv eq 'CSV' and not $isWriting) { Warn "Sorry, -w may not be combined with -csv\n"; $rtnVal = 1; next; } if ($escapeHTML or $json) { # must be UTF8 for HTML conversion and JSON output $mt->Options(Charset => 'UTF8'); # use Escape option to do our HTML escaping unless XML output $mt->Options(Escape => 'HTML') if $escapeHTML and not $xml; } elsif ($escapeXML and not $xml) { $mt->Options(Escape => 'XML'); } # set sort option if ($sortOpt) { # (note that -csv sorts alphabetically by default anyway if more than 1 file) my $sort = ($outFormat > 0 or $xml or $json or $csv) ? 'Tag' : 'Descr'; $mt->Options(Sort => $sort, Sort2 => $sort); } # set up for RDF/XML, JSON and PHP output formats if ($xml) { require Image::ExifTool::XMP; # for EscapeXML() my $charset = $mt->Options('Charset'); # standard XML encoding names for supported Charset settings # (ref http://www.iana.org/assignments/character-sets) my %encoding = ( UTF8 => 'UTF-8', Latin => 'windows-1252', Latin2 => 'windows-1250', Cyrillic => 'windows-1251', Greek => 'windows-1253', Turkish => 'windows-1254', Hebrew => 'windows-1255', Arabic => 'windows-1256', Baltic => 'windows-1257', Vietnam => 'windows-1258', MacRoman => 'macintosh', ); # switch to UTF-8 if we don't have a standard encoding name unless ($encoding{$charset}) { $charset = 'UTF8'; $mt->Options(Charset => $charset); } # set file header/trailer for XML output $fileHeader = "\n" . "\n"; $fileTrailer = "\n"; # extract as a list unless short output format $joinLists = 1 if $outFormat > 0; $mt->Options(List => 1) unless $joinLists; $showGroup = $allGroup = 1; # always show group 1 # set binaryOutput flag to 0 or undef (0 = output encoded binary in XML) $binaryOutput = ($outFormat > 0 ? undef : 0) if $binaryOutput; $showTagID = 'D' if $tabFormat and not $showTagID; } elsif ($json) { if ($json == 1) { # JSON $fileHeader = '['; $fileTrailer = "]\n"; } else { # PHP $fileHeader = 'Array('; $fileTrailer = ");\n"; } # allow binary output in a text-mode file when -php/-json and -b used together # (this works because PHP strings are simple arrays of bytes, and CR/LF # won't be messed up in the text mode output because they are converted # to escape sequences in the strings) if ($binaryOutput) { $binaryOutput = 0; require Image::ExifTool::XMP if $json == 1; # (for EncodeBase64) } $mt->Options(List => 1) unless $joinLists; $mt->Options(Duplicates => 0) unless defined $showGroup; } elsif ($structOpt) { $mt->Options(List => 1); } else { $joinLists = 1; # join lists for all other unstructured output formats } if ($argFormat) { $outFormat = 3; $allGroup = 1 if defined $showGroup; } # change to forward slashes if necessary in all filenames (like CleanFilename) if ($hasBackslash{$^O}) { tr/\\/\// foreach @files; } # can't do anything if no file specified unless (@files) { unless ($outOpt) { if ($doGlob and $doGlob == 2) { Warn "No matching files\n"; } else { Warn "No file specified\n"; } $rtnVal = 1; next; } push @files, ''; # create file from nothing } # set Verbose and HtmlDump options if ($verbose) { $disableOutput = 1 unless @tags or @exclude or $tagOut; undef $binaryOutput unless $tagOut; # disable conflicting option if ($html) { $html = 2; # flag for html dump $mt->Options(HtmlDump => $verbose); } else { $mt->Options(Verbose => $verbose) unless $tagOut; } } elsif (defined $verbose) { # auto-flush output when -v0 is used require FileHandle; STDOUT->autoflush(1); STDERR->autoflush(1); } # validate all tags we're writing my $needSave = 1; if (@newValues) { # assume -geotime value if -geotag specified without -geotime if ($addGeotime) { AddSetTagsFile($setTagsFile = '@') unless $setTagsFile and $setTagsFile eq '@'; push @{$setTags{$setTagsFile}}, $addGeotime; $verbose and print $vout qq{Argument "-$addGeotime" is assumed\n}; } my %setTagsIndex; # add/delete option lookup my %addDelOpt = ( '+' => 'AddValue', '-' => 'DelValue', "\xe2\x88\x92" => 'DelValue' ); $saveCount = 0; foreach (@newValues) { if (ref $_ eq 'HASH') { # save new values now if we stored a "SaveCount" marker if ($$_{SaveCount}) { $saveCount = $mt->SaveNewValues(); $needSave = 0; # insert marker to load values from CSV file now if this was the CSV file push @dynamicFiles, \$csv if $$_{SaveCount} == $csvSaveCount; } next; } /(.*?)=(.*)/s or next; my ($tag, $newVal) = ($1, $2); $tag =~ s/\ball\b/\*/ig; # replace 'all' with '*' in tag names $newVal eq '' and undef $newVal; # undefined to delete tag if ($tag =~ /^(All)?TagsFromFile$/i) { defined $newVal or Error("Need file name for -tagsFromFile\n"), next Command; ++$isWriting; if ($newVal eq '@' or not defined FilenameSPrintf($newVal)) { push @dynamicFiles, $newVal; next; # set tags from dynamic file later } unless ($mt->Exists($newVal) or $newVal eq '-') { Warn "File '$newVal' does not exist for -tagsFromFile option\n"; $rtnVal = 1; next Command; } my $setTags = $setTags{$newVal}; # do we have multiple -tagsFromFile options with this file? if ($setTagsList{$newVal}) { # use the tags set in the i-th occurrence my $i = $setTagsIndex{$newVal} || 0; $setTagsIndex{$newVal} = $i + 1; $setTags = $setTagsList{$newVal}[$i] if $setTagsList{$newVal}[$i]; } # set specified tags from this file unless (DoSetFromFile($mt, $newVal, $setTags)) { $rtnVal = 1; next Command; } $needSave = 1; next; } my %opts = ( Shift => 0 ); # shift values if possible instead of adding/deleting # allow writing of 'unsafe' tags unless specified by wildcard $opts{Protected} = 1 unless $tag =~ /[?*]/; if ($tag =~ s/SetNewValue($tag, $newVal, %opts); $needSave = 1; ++$isWriting if $rtn; $wrn and Warn "Warning: $wrn\n"; } # exclude specified tags foreach (@exclude) { $mt->SetNewValue($_, undef, Replace => 2); $needSave = 1; } unless ($isWriting or $outOpt or @tags) { Warn "Nothing to do.\n"; $rtnVal = 1; next; } } elsif (grep /^(\*:)?\*$/, @exclude) { Warn "All tags excluded -- nothing to do.\n"; $rtnVal = 1; next; } if ($isWriting and @tags and not $outOpt) { my ($tg, $s) = @tags > 1 ? ("$tags[0] ...", 's') : ($tags[0], ''); Warn "Ignored superfluous tag name$s or invalid option$s: -$tg\n"; } # save current state of new values if setting values from target file # or if we may be translating to a different format $mt->SaveNewValues() if $outOpt or (@dynamicFiles and $needSave); $multiFile = 1 if @files > 1; @exclude and $mt->Options(Exclude => \@exclude); undef $binaryOutput if $html; if ($binaryOutput) { $outFormat = 99; # shortest possible output format $mt->Options(PrintConv => 0); unless ($textOut or $binaryStdout) { binmode(STDOUT); $binaryStdout = 1; $mt->Options(TextOut => ($vout = \*STDERR)); } # disable conflicting options undef $showGroup; } # sort by groups to look nicer depending on options if (defined $showGroup and not (@tags and $allGroup) and ($sortOpt or not defined $sortOpt)) { $mt->Options(Sort => "Group$showGroup"); } if (defined $textOut) { CleanFilename($textOut); # make all forward slashes # add '.' before output extension if necessary $textOut = ".$textOut" unless $textOut =~ /[.%]/ or defined $tagOut; } # determine if we should scan for only writable files if ($outOpt) { my $type = GetFileType($outOpt); if ($type) { unless (CanWrite($type)) { Warn "Can't write $type files\n"; $rtnVal = 1; next; } $scanWritable = $type unless CanCreate($type); } else { $scanWritable = 1; } $isWriting = 1; # set writing flag } elsif ($isWriting or defined $deleteOrig) { $scanWritable = 1; } # set flag to fix description lengths if necessary $fixLen = ($utf8 and $mt->Options('Lang') ne 'en' and eval { require Encode }); # sort input files if specified if (@fileOrder) { my @allFiles; ProcessFiles($mt, \@allFiles); my $sortTool = new Image::ExifTool; $sortTool->Options(PrintConv => $mt->Options('PrintConv')); $sortTool->Options(Duplicates => 0); my (%sortBy, %isFloat, @rev, $file); # save reverse sort flags push @rev, (s/^-// ? 1 : 0) foreach @fileOrder; foreach $file (@allFiles) { my @tags; my $info = $sortTool->ImageInfo(Infile($file,1), @fileOrder, \@tags); # get values of all tags (or '~' to sort last if not defined) foreach (@tags) { $_ = $$info{$_}; defined $_ or $_ = '~', next; $isFloat{$_} = Image::ExifTool::IsFloat($_); } $sortBy{$file} = \@tags; # save tag values for each file } # sort in specified order @files = sort { my ($i, $cmp); for ($i=0; $i<@rev; ++$i) { my $u = $sortBy{$a}[$i]; my $v = $sortBy{$b}[$i]; if (not $isFloat{$u} and not $isFloat{$v}) { $cmp = $u cmp $v; # alphabetically } elsif ($isFloat{$u} and $isFloat{$v}) { $cmp = $u <=> $v; # numerically } else { $cmp = $isFloat{$u} ? -1 : 1; # numbers first } return $rev[$i] ? -$cmp : $cmp if $cmp; } return $a cmp $b; # default to sort by name } @allFiles; } elsif (defined $progress) { # expand FILE argument to count the number of files to process my @allFiles; ProcessFiles($mt, \@allFiles); @files = @allFiles; } # set file count for progress message $progressMax = scalar @files if defined $progress; # store duplicate database information under absolute path, # and translate the filename character set if necessary my @dbKeys = keys %database; if (@dbKeys) { my $enc = $mt->Options('CharsetFileName'); if ($enc) { foreach (@dbKeys) { my $f = $mt->InverseFileName($_); next if $f eq $_; $database{$f} = $database{$_}; delete $database{$_}; $_ = $f; } } if (eval { require Cwd }) { undef $evalWarning; local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] }; foreach (@dbKeys) { my $absPath = AbsPath($_); if (defined $absPath) { $database{$absPath} = $database{$_} unless $database{$absPath}; if ($verbose and $verbose > 1) { print $vout "Imported entry for '$_' (full path: '$absPath')\n"; } } } } } # process all specified files ProcessFiles($mt); if ($filtered and not $validFile) { Warn "No file with specified extension\n"; $rtnVal = 1; } # print CSV information if necessary PrintCSV() if $csv and not $isWriting; # print file trailer if necessary print $fileTrailer if $fileTrailer and not $textOut and not $fileHeader; if (defined $deleteOrig) { # print summary and delete requested files unless ($quiet) { printf "%5d directories scanned\n", $countDir if $countDir; printf "%5d directories created\n", $countNewDir if $countNewDir; printf "%5d files failed condition\n", $countFailed if $countFailed; printf "%5d image files found\n", $count; } if (@delFiles) { # verify deletion unless "-delete_original!" was specified if ($deleteOrig == 1) { printf '%5d originals will be deleted! Are you sure [y/n]? ', scalar(@delFiles); my $response = ; unless ($response =~ /^(y|yes)\s*$/i) { Warn "Originals not deleted.\n"; next; } } $countGoodWr = $mt->Unlink(@delFiles); $countBad = scalar(@delFiles) - $countGoodWr; } if ($quiet) { # no more messages } elsif ($count and not $countGoodWr and not $countBad) { printf "%5d original files found\n", $countGoodWr; } elsif ($deleteOrig) { printf "%5d original files deleted\n", $countGoodWr if $count; printf "%5d originals not deleted due to errors\n", $countBad if $countBad; } else { printf "%5d image files restored from original\n", $countGoodWr if $count; printf "%5d files not restored due to errors\n", $countBad if $countBad; } } elsif ((not $binaryStdout or $verbose) and not $quiet) { # print summary my $tot = $count + $countBad; my $totWr = $countGoodWr + $countBadWr + $countSameWr + $countCopyWr + $countGoodCr + $countBadCr; if ($countDir or $totWr or $countFailed or $tot > 1 or $textOut or $countLink or $countBadLink) { my $o = (($html or $json or $xml or %printFmt or $csv) and not $textOut) ? \*STDERR : $vout; printf($o "%5d directories scanned\n", $countDir) if $countDir; printf($o "%5d directories created\n", $countNewDir) if $countNewDir; printf($o "%5d files failed condition\n", $countFailed) if $countFailed; printf($o "%5d image files created\n", $countGoodCr) if $countGoodCr; printf($o "%5d image files updated\n", $countGoodWr) if $totWr - $countGoodCr - $countBadCr - $countCopyWr; printf($o "%5d image files unchanged\n", $countSameWr) if $countSameWr; printf($o "%5d image files %s\n", $countCopyWr, $overwriteOrig ? 'moved' : 'copied') if $countCopyWr; printf($o "%5d files weren't updated due to errors\n", $countBadWr) if $countBadWr; printf($o "%5d files weren't created due to errors\n", $countBadCr) if $countBadCr; printf($o "%5d image files read\n", $count) if $tot>1 or ($countDir and not $totWr); printf($o "%5d files could not be read\n", $countBad) if $countBad; printf($o "%5d output files created\n", scalar(keys %created)) if $textOut; printf($o "%5d output files appended\n", scalar(keys %appended)) if %appended; printf($o "%5d hard links created\n", $countLink) if $countLink or $countBadLink; printf($o "%5d hard links could not be created\n", $countBadLink) if $countBadLink; } } # set error status if we had any errors or if all files failed the "-if" condition $rtnVal = 1 if $countBadWr or $countBadCr or $countBad or ($countFailed and not $count); # last ditch effort to preserve filemodifydate PreserveTime() if %preserveTime; } # end "Command" loop ........................................................ close STAYOPEN if $stayOpen >= 2; Exit $rtnVal; # all done #------------------------------------------------------------------------------ # Get image information from EXIF data in file (or write file if writing) # Inputs: 0) ExifTool object reference, 1) file name sub GetImageInfo($$) { my ($et, $orig) = @_; my (@foundTags, $info, $file, $ind); # determine the name of the source file based on the original input file name if (@srcFmt) { my ($fmt, $first); foreach $fmt (@srcFmt) { $file = $fmt eq '@' ? $orig : FilenameSPrintf($fmt, $orig); # use this file if it exists $et->Exists($file) and undef($first), last; $verbose and print $vout "Source file $file does not exist\n"; $first = $file unless defined $first; } $file = $first if defined $first; } else { $file = $orig; } my $pipe = $file; if ($doUnzip) { # pipe through gzip or bzip2 if necessary if ($file =~ /\.gz$/i) { $pipe = qq{gzip -dc "$file" |}; } elsif ($file =~ /\.bz2$/i) { $pipe = qq{bzip2 -dc "$file" |}; } } # evaluate -if expression for conditional processing if (defined $condition) { unless ($file eq '-' or $et->Exists($file)) { Warn "File not found: $file\n"; FileNotFound($file); ++$countBad; return; } # catch run time errors as well as compile errors undef $evalWarning; local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] }; my %info; # extract information and build expression for evaluation my $opts = { Duplicates => 1, RequestTags => \@requestTags, Verbose => 0, HtmlDump => 0 }; # return all tags but explicitly mention tags on command line so # requested images will generate the appropriate warnings @foundTags = ('*', @tags) if @tags; $info = $et->ImageInfo(Infile($pipe,$isWriting), \@foundTags, $opts); my $cond = $et->InsertTagValues(\@foundTags, $condition, \%info); #### eval "-if" condition (%info) my $result = eval $cond; $@ and $evalWarning = $@; if ($evalWarning) { # fail condition if warning is issued undef $result; if ($verbose) { chomp $evalWarning; $evalWarning =~ s/ at \(eval .*//s; Warn "Condition: $evalWarning - $file\n"; } } unless ($result) { $verbose and print $vout "-------- $file (failed condition)$progStr\n"; ++$countFailed; return; } # can't make use of $info if verbose because we must reprocess # the file anyway to generate the verbose output undef $info if $verbose; } if (defined $deleteOrig) { print $vout "======== $file$progStr\n" if defined $verbose; ++$count; my $original = "${file}_original"; $et->Exists($original) or return; if ($deleteOrig) { $verbose and print $vout "Scheduled for deletion: $original\n"; push @delFiles, $original; } elsif ($et->Rename($original, $file)) { $verbose and print $vout "Restored from $original\n"; ++$countGoodWr; } else { Warn "Error renaming $original\n"; ++$countBad; } return; } my $lineCount = 0; my ($fp, $outfile, $append); if ($textOut and $verbose and not $tagOut) { ($fp, $outfile, $append) = OpenOutputFile($orig); $fp or ++$countBad, return; # delete file if we exit prematurely (unless appending) $tmpText = $outfile unless $append; $et->Options(TextOut => $fp); } if ($isWriting) { print $vout "======== $file$progStr\n" if defined $verbose; SetImageInfo($et, $file, $orig); $info = $et->GetInfo('Warning', 'Error'); PrintErrors($et, $info, $file); # close output text file if necessary if ($outfile) { undef $tmpText; close($fp); $et->Options(TextOut => $vout); if ($info->{Error}) { $et->Unlink($outfile); # erase bad file } elsif ($append) { $appended{$outfile} = 1 unless $created{$outfile}; } else { $created{$outfile} = 1; } } return; } # extract information from this file unless ($file eq '-' or $et->Exists($file)) { Warn "File not found: $file\n"; FileNotFound($file); $outfile and close($fp), undef($tmpText), $et->Unlink($outfile); ++$countBad; return; } # print file/progress message my $o; unless ($binaryOutput or $textOut or %printFmt or $html > 1 or $csv) { if ($html) { require Image::ExifTool::HTML; my $f = Image::ExifTool::HTML::EscapeHTML($file); print "\n"; } elsif (not ($json or $xml)) { $o = \*STDOUT if ($multiFile and not $quiet) or $progress; } } $o = \*STDERR if $progress and not $o; $o and print $o "======== $file$progStr\n"; if ($info) { # get the information we wanted if (@tags and not %printFmt) { @foundTags = @tags; $info = $et->GetInfo(\@foundTags); } } else { # request specified tags unless using print format option my $oldDups = $et->Options('Duplicates'); if (%printFmt) { $et->Options(Duplicates => 1); $et->Options(RequestTags => \@requestTags); } else { @foundTags = @tags; } # extract the information $info = $et->ImageInfo(Infile($pipe), \@foundTags); $et->Options(Duplicates => $oldDups); } # all done now if we already wrote output text file (eg. verbose option) if ($fp) { if ($outfile) { $et->Options(TextOut => \*STDOUT); undef $tmpText; if ($info->{Error}) { close($fp); $et->Unlink($outfile); # erase bad file } else { ++$lineCount; # output text file (likely) is not empty } } if ($info->{Error}) { Warn "Error: $info->{Error} - $file\n"; ++$countBad; return; } } # print warnings to stderr if using binary output # (because we are likely ignoring them and piping stdout to file) # or if there is none of the requested information available if ($binaryOutput or not %$info) { my $errs = $et->GetInfo('Warning', 'Error'); PrintErrors($et, $errs, $file) and $rtnVal = 1; } elsif ($et->GetValue('Error')) { $rtnVal = 1; } # open output file (or stdout if no output file) if not done already unless ($outfile or $tagOut) { ($fp, $outfile, $append) = OpenOutputFile($orig); $fp or ++$countBad, return; $tmpText = $outfile unless $append; } # print the results for this file if (%printFmt) { # output using print format file (-p) option my ($type, $doc, $grp); undef $fileTrailer; # repeat for each embedded document if necessary my $lastDoc = $et->Options('ExtractEmbedded') ? $$et{DOC_COUNT} : 0; foreach $type ('HEAD', 'BODY', 'TAIL') { my $prf = $printFmt{$type} or next; for ($doc=0; $doc<=$lastDoc; ++$doc) { if ($lastDoc) { if ($doc) { last unless $type eq 'BODY'; # only repeat BODY lines $grp = "Doc$doc:"; } else { $grp = 'Main:'; } # change tag groups to print next document by adding "Main:" or "Doc#:" # to all tags which don't already start with a family 3 group name $prf = [ @{$printFmt{$type}} ]; s/((^|[^\$])(\$\$)*\$\{?)((?!(Main|Doc\d+):)[\w])/$1$grp$4/ig foreach @$prf; } my @lines; foreach (@$prf) { my $line = $et->InsertTagValues(\@foundTags, $_, 'Warn'); push @lines, $line if defined $line; } $lineCount += scalar @lines; if ($type eq 'TAIL') { $fileTrailer = '' unless defined $fileTrailer; $fileTrailer .= join '', @lines; } elsif (@lines) { print $fp @lines; } } } delete $printFmt{HEAD} unless $outfile; # print header only once per output file my $errs = $et->GetInfo('Warning', 'Error'); PrintErrors($et, $errs, $file); } elsif (not $disableOutput) { my ($tag, $line, %noDups, %csvInfo, $bra, $ket, $sep); if ($fp) { # print file header (only once) if ($fileHeader) { print $fp $fileHeader; undef $fileHeader unless $textOut; } if ($html) { print $fp "\n"; } elsif ($xml) { my $f = $file; CleanXML(\$f); print $fp "\nGetGroup($tag); unless ($grp1) { next unless defined $forcePrint; $grp0 = $grp1 = 'Unknown'; } next if $groups{$grp1}; # include family 0 and 1 groups in URI except for internal tags # (this will put internal tags in the "XML" group on readback) $groups{$grp1} = $grp0; push @groups, $grp1; AddGroups($$info{$tag}, $grp0, \%groups, \@groups) if ref $$info{$tag}; } foreach $grp1 (@groups) { my $grp = $groups{$grp1}; unless ($grp eq $grp1 and $grp =~ /^(ExifTool|File|Composite|Unknown)$/) { $grp .= "/$grp1"; } print $fp "\n xmlns:$grp1='http://ns.exiftool.ca/$grp/1.0/'"; } print $fp '>' if $outFormat < 1; # finish rdf:Description token unless short format $ind = $outFormat >= 0 ? ' ' : ' '; } elsif ($json) { # set delimiters for JSON or PHP output ($bra, $ket, $sep) = $json == 1 ? ('{','}',':') : ('Array(',')',' =>'); print $fp ",\n" if $comma; print $fp qq($bra\n "SourceFile"$sep ), EscapeJSON($mt->ConvertFileName($file, 1)); $comma = 1; $ind = (defined $showGroup and not $allGroup) ? ' ' : ' '; } elsif ($csv) { $database{$file} = \%csvInfo; push @csvFiles, $file; } } # suppress duplicates manually in JSON and short XML output my $noDups = ($json or ($xml and $outFormat > 0)); my $printConv = $mt->Options('PrintConv'); my $lastGroup = ''; TAG: foreach $tag (@foundTags) { my $tagName = GetTagName($tag); my ($group, $valList); # make sure this tag has a value my $val = $$info{$tag}; if (ref $val) { if (defined $binaryOutput and not $binaryOutput) { # happens with -X -b or -php -b # avoid extracting Protected binary tags (eg. data blocks) [insider information] next if $$et{TAG_INFO}{$tag}{Protected}; } $val = ConvertBinary($val); # convert SCALAR references if ($structOpt) { # serialize structure if necessary $val = Image::ExifTool::XMP::SerializeStruct($val) unless $xml or $json; } elsif (ref $val eq 'ARRAY') { if (defined $listItem) { # take only the specified item $val = $$val[$listItem]; # join arrays of simple values (with newlines for binary output) } elsif ($binaryOutput) { if ($tagOut) { $valList = $val; $val = shift @$valList; } else { $val = join "\n", @$val; } } elsif ($joinLists) { $val = join $listSep, @$val; } } } if (not defined $val) { # ignore tags that weren't found unless necessary next if $binaryOutput; if (defined $forcePrint) { $val = $forcePrint; # forced to print all tag values } elsif (not $csv) { next; } } if (defined $showGroup) { $group = $et->GetGroup($tag, $showGroup); # look ahead to see if this tag may suppress a priority tag in # the same group, and if so suppress this tag instead next if $noDups and $tag =~ /^(.*?) ?\(/ and defined $$info{$1} and $group eq $et->GetGroup($1, $showGroup); $group = 'Unknown' if not $group and ($xml or $json); if ($fp and not ($allGroup or $csv)) { if ($lastGroup ne $group) { if ($html) { my $cols = 1; ++$cols if $outFormat==0 or $outFormat==1; ++$cols if $showTagID; print $fp "\n"; } elsif ($json) { print $fp "\n $ket" if $lastGroup; print $fp ',' if $lastGroup or $comma; print $fp qq(\n "$group"$sep $bra); undef $comma; undef %noDups; # allow duplicate names in different groups } else { print $fp "---- $group ----\n"; } $lastGroup = $group; } undef $group; # undefine so we don't print it below } } ++$lineCount; # we are printing something meaningful # loop through list values when -b -W used for (;;) { if ($tagOut) { # determine suggested extension for output file my $ext = SuggestedExtension($et, \$val, $tagName); if (%wext and ($wext{$ext} || $wext{'*'} || -1) < 0) { if ($verbose and $verbose > 1) { print $vout "Not writing $ext output file for $tagName\n"; } next TAG; } my @groups = $mt->GetGroup($tag); $outfile and close($fp), undef($tmpText); # (shouldn't happen) ($fp, $outfile, $append) = OpenOutputFile($orig, $tagName, \@groups, $ext); $fp or ++$countBad, next TAG; $tmpText = $outfile unless $append; } # write binary output if ($binaryOutput) { print $fp $val; if ($tagOut) { if ($append) { $appended{$outfile} = 1 unless $created{$outfile}; } else { $created{$outfile} = 1; } close($fp); undef $tmpText; $verbose and print $vout "Wrote $tagName to $outfile\n"; undef $outfile; undef $fp; next TAG unless $valList and @$valList; $val = shift @$valList; next; # loop over values of List tag } next TAG; } last; } # save information for CSV output if ($csv) { my $t = $group ? "$group:$tagName" : $tagName; $t .= '#' if $tag =~ /#/; # add ValueConv "#" suffix if used # (tag-name case may be different if some tags don't exist # in a file, so all logic must use lower-case tag names) my $lcTag = lc $t; # override existing entry only if top priority next if defined $csvInfo{$lcTag} and $tag =~ /\(/; $csvInfo{$lcTag} = $val; if (defined $csvTags{$lcTag}) { # overwrite with actual extracted tag name # (note: can't check "if defined $val" here because -f may be used) $csvTags{$lcTag} = $t if defined $$info{$tag}; } else { # (don't save unextracted tag name unless -f was used) $csvTags{$lcTag} = defined($val) ? $t : ''; if (@csvFiles == 1) { push @csvTags, $lcTag; # save order of tags for first file } elsif (@csvTags) { undef @csvTags; } } next; } # get description if we need it (use tag name if $outFormat > 0) my $desc = $outFormat > 0 ? $tagName : $et->GetDescription($tag); if ($xml) { # RDF/XML output format my $tok = "$group:$tagName"; # manually un-do CR/LF conversion in Windows because output # is in text mode, which will re-convert newlines to CR/LF $isCRLF and $val =~ s/\x0d\x0a/\x0a/g; if ($outFormat > 0) { if ($structOpt and ref $val) { $val = Image::ExifTool::XMP::SerializeStruct($val); } if ($escapeHTML) { $val =~ tr/\0-\x08\x0b\x0c\x0e-\x1f/./; Image::ExifTool::XMP::FixUTF8(\$val) if $utf8; $val = Image::ExifTool::HTML::EscapeHTML($val); } else { CleanXML(\$val); } unless ($noDups{$tok}) { print $fp "\n $tok='$val'"; # XML does not allow duplicate attributes $noDups{$tok} = 1; } next; } my ($xtra, $valNum, $descClose); if ($showTagID) { my ($id, $lang) = $et->GetTagID($tag); if ($id =~ /^\d+$/) { $id = sprintf("0x%.4x", $id) if $showTagID eq 'H'; } else { $id = Image::ExifTool::XMP::FullEscapeXML($id); } $xtra = " et:id='$id'"; $xtra .= " xml:lang='$lang'" if $lang; } else { $xtra = ''; } if ($tabFormat) { my $table = $et->GetTableName($tag); my $index = $et->GetTagIndex($tag); $xtra .= " et:table='$table'"; $xtra .= " et:index='$index'" if defined $index; } my $lastVal = $val; for ($valNum=0; $valNum<2; ++$valNum) { $val = FormatXML($val, $ind, $group); if ($outFormat >= 0) { # normal output format (note: this will give # non-standard RDF/XML if there are any attributes) print $fp "\n <$tok$xtra$val"; last; } elsif ($valNum == 0) { CleanXML(\$desc); if ($xtra) { print $fp "\n <$tok>"; print $fp "\n "; $descClose = "\n "; } else { print $fp "\n <$tok rdf:parseType='Resource'>"; $descClose = ''; } # print tag Description print $fp "\n $desc"; if ($printConv) { # print PrintConv value print $fp "\n "; $val = $et->GetValue($tag, 'ValueConv'); $val = '' unless defined $val; # go back to print ValueConv value only if different next unless IsEqual($val, $lastVal); print $fp "$descClose\n "; last; } } # print ValueConv value print $fp "\n "; print $fp "$descClose\n "; last; } next; } elsif ($json) { # JSON or PHP output format my $tok = $allGroup ? "$group:$tagName" : $tagName; # (removed due to backward incompatibility) # $tok .= '#' if $tag =~ /#/; # add back '#' suffix if used next if $noDups{$tok}; $noDups{$tok} = 1; print $fp ',' if $comma; print $fp qq(\n$ind"$tok"$sep ); if ($showTagID or $outFormat < 0) { $val = { val => $val }; if ($showTagID) { my $id = $et->GetTagID($tag); $id = sprintf('0x%.4x', $id) if $showTagID eq 'H' and $id =~ /^\d+$/; $$val{id} = $id; } if ($outFormat < 0) { $$val{desc} = $desc; if ($printConv) { my $num = $et->GetValue($tag, 'ValueConv'); $$val{num} = $num if defined $num and not IsEqual($num, $$val{val}); } } } FormatJSON($fp, $val, $ind); $comma = 1; next; } my $id; if ($showTagID) { $id = $et->GetTagID($tag); if ($id =~ /^(\d+)(\.\d+)?$/) { # only print numeric ID's $id = sprintf("0x%.4x", $1) if $showTagID eq 'H'; } else { $id = '-'; } } # translate unprintable chars in value and remove trailing spaces $val =~ tr/\x01-\x1f\x7f/./; $val =~ s/\x00//g; $val =~ s/\s+$//; if ($html) { print $fp ""; print $fp "" if defined $group; print $fp "" if $showTagID; print $fp "" if $outFormat <= 1; print $fp "\n"; } else { my $buff = ''; if ($tabFormat) { $buff = "$group\t" if defined $group; $buff .= "$id\t" if $showTagID; if ($outFormat <= 1) { $buff .= "$desc\t$val\n"; } elsif (defined $line) { $line .= "\t$val"; } else { $line = $val; } } elsif ($outFormat < 0) { # long format $buff = "[$group] " if defined $group; $buff .= "$id " if $showTagID; $buff .= "$desc\n $val\n"; } elsif ($outFormat == 0 or $outFormat == 1) { my $wid; my $len = 0; if (defined $group) { $buff = sprintf("%-15s ", "[$group]"); $len = 16; } if ($showTagID) { $wid = ($showTagID eq 'D') ? 5 : 6; $len += $wid + 1; ($wid = $len - length($buff) - 1) < 1 and $wid = 1; $buff .= sprintf "%${wid}s ", $id; } $wid = 32 - (length($buff) - $len); # pad description to a constant length # (get actual character length when using alternate languages # because these descriptions may contain UTF8-encoded characters) my $padLen = $wid - length($fixLen ? Encode::decode_utf8($desc) : $desc); $padLen = 0 if $padLen < 0; $buff .= $desc . (' ' x $padLen) . ": $val\n"; } elsif ($outFormat == 2) { $buff = "[$group] " if defined $group; $buff .= "$id " if $showTagID; $buff .= "$tagName: $val\n"; } elsif ($argFormat) { $buff = '-'; $buff .= "$group:" if defined $group; $tagName .= '#' if $tag =~ /#/; # add '#' suffix if used $buff .= "$tagName=$val\n"; } else { $buff = "$group " if defined $group; $buff .= "$id " if $showTagID; $buff .= "$val\n"; } print $fp $buff; } if ($tagOut) { if ($append) { $appended{$outfile} = 1 unless $created{$outfile}; } else { $created{$outfile} = 1; } close($fp); undef $tmpText; $verbose and print $vout "Wrote $tagName to $outfile\n"; undef $outfile; undef $fp; } } if ($fp) { if ($html) { print $fp "
$group
$group$id$desc$val
\n"; } elsif ($xml) { # close rdf:Description element print $fp $outFormat < 1 ? "\n\n" : "/>\n"; } elsif ($json) { print $fp "\n $ket" if $lastGroup; print $fp "\n$ket"; $comma = 1; } elsif ($tabFormat and $outFormat > 1) { print $fp "$line\n" if defined $line; } } } if ($outfile) { print $fp $fileTrailer if $fileTrailer; # write file trailer close($fp); undef $tmpText; if ($lineCount) { if ($append) { $appended{$outfile} = 1 unless $created{$outfile}; } else { $created{$outfile} = 1; } } else { $et->Unlink($outfile) unless $append; # don't keep empty output files } undef $comma; } ++$count; } #------------------------------------------------------------------------------ # Set information in file # Inputs: 0) ExifTool object reference, 1) source file name # 2) original source file name ('' to create from scratch) # Returns: true on success sub SetImageInfo($$$) { my ($et, $file, $orig) = @_; my ($outfile, $restored, $isTemporary, $isStdout, $outType, $tagsFromSrc, $hardLink, $testName); my $infile = $file; # save infile in case we change it again undef $tmpFile; # make sure this isn't defined # clear any existing errors or warnings since we check these on return delete $$et{VALUE}{Error}; delete $$et{VALUE}{Warning}; # first, try to determine our output file name so we can return quickly # if it already exists (note: this test must be delayed until after we # set tags from dynamic files if writing FileName or Directory) if (defined $outOpt) { if ($outOpt =~ /^-(\.\w+)?$/) { # allow output file type to be specified with "-o -.EXT" $outType = GetFileType($outOpt) if $1; $outfile = '-'; $isStdout = 1; } else { $outfile = FilenameSPrintf($outOpt, $orig); if ($outfile eq '') { Warn "Can't create file with zero-length name from $orig\n"; ++$countBadCr; return 0; } } if (not $isStdout and ($et->IsDirectory($outfile) or $outfile =~ /\/$/)) { $outfile .= '/' unless $outfile =~ /\/$/; my $name = $file; $name =~ s/^.*\///s; # remove directory name $outfile .= $name; } else { my $srcType = GetFileType($file) || ''; $outType or $outType = GetFileType($outfile); if ($outType and ($srcType ne $outType or $outType eq 'ICC')) { unless (CanCreate($outType)) { my $what = $srcType ? 'other types' : 'scratch'; WarnOnce "Error: Can't create $outType files from $what\n"; ++$countBadCr; return 0; } if ($file ne '') { # restore previous new values unless done already $et->RestoreNewValues() unless $restored; $restored = 1; # translate to this type by setting specified tags from file my @setTags = @tags; foreach (@exclude) { push @setTags, "-$_"; } # force some tags to be copied for certain file types my %forceCopy = ( ICC => 'ICC_Profile', VRD => 'CanonVRD', DR4 => 'CanonDR4', ); push @setTags, $forceCopy{$outType} if $forceCopy{$outType}; # assume "-tagsFromFile @" unless -tagsFromFile already specified # (%setTags won't be empty if -tagsFromFile used) if (not %setTags or (@setTags and not $setTags{'@'})) { return 0 unless DoSetFromFile($et, $file, \@setTags); } elsif (@setTags) { # add orphaned tags to existing "-tagsFromFile @" for this file only push @setTags, @{$setTags{'@'}}; $tagsFromSrc = \@setTags; } # all done with source file -- create from meta information alone $file = ''; } } } unless ($isStdout) { $outfile = NextUnusedFilename($outfile); if ($et->Exists($outfile) and not $doSetFileName) { Warn "Error: '$outfile' already exists - $infile\n"; ++$countBadWr; return 0; } } } elsif ($file eq '-') { $isStdout = 1; } # set tags from destination file if required if (@dynamicFiles) { # restore previous values if necessary $et->RestoreNewValues() unless $restored; my ($dyFile, %setTagsIndex); foreach $dyFile (@dynamicFiles) { if (not ref $dyFile) { my ($fromFile, $setTags); if ($dyFile eq '@') { $fromFile = $orig; $setTags = $tagsFromSrc || $setTags{$dyFile}; } else { $fromFile = FilenameSPrintf($dyFile, $orig); ++$countBadWr, return 0 unless defined $fromFile; $setTags = $setTags{$dyFile}; } # do we have multiple -tagsFromFile options with this file? if ($setTagsList{$dyFile}) { # use the tags set in the i-th occurrence my $i = $setTagsIndex{$dyFile} || 0; $setTagsIndex{$dyFile} = $i + 1; $setTags = $setTagsList{$dyFile}[$i] if $setTagsList{$dyFile}[$i]; } # set new values values from file return 0 unless DoSetFromFile($et, $fromFile, $setTags); } elsif (ref $dyFile eq 'ARRAY') { # a dynamic file containing a simple tag value my $fname = FilenameSPrintf($$dyFile[1], $orig); my ($buff, $rtn, $wrn); my $opts = $$dyFile[2]; if (defined $fname and SlurpFile($fname, \$buff)) { $verbose and print $vout "Reading $$dyFile[0] from $fname\n"; ($rtn, $wrn) = $mt->SetNewValue($$dyFile[0], $buff, %$opts); $wrn and Warn "$wrn\n"; } # remove this tag if we couldn't set it properly $rtn or $mt->SetNewValue($$dyFile[0], undef, Replace => 2, ProtectSaved => $$opts{ProtectSaved}); next; } elsif (ref $dyFile eq 'SCALAR') { # set new values from CSV database my ($f, $found, $tag); undef $evalWarning; local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] }; # read tags for SourceFile '*' plus the specific file foreach $f ('*', $file) { my $csvInfo = $database{$f}; unless ($csvInfo) { next if $f eq '*'; # check absolute path my $absPath = AbsPath($f); next unless defined $absPath and $csvInfo = $database{$absPath}; } $found = 1; $verbose and print $vout "Setting new values from $csv database\n"; foreach $tag (sort keys %$csvInfo) { next if $tag =~ /\b(SourceFile|Directory|FileName)$/i; # don't write these my ($rtn, $wrn) = $mt->SetNewValue($tag, $$csvInfo{$tag}, Protected => 1, AddValue => $csvAdd, ProtectSaved => $csvSaveCount); $wrn and Warn "$wrn\n" if $verbose; } } unless ($found) { Warn("No SourceFile '$file' in imported $csv database\n"); my $absPath = AbsPath($file); Warn("(full path: '$absPath')\n") if defined $absPath and $absPath ne $file; return 0; } } } } if ($isStdout) { # write to STDOUT $outfile = \*STDOUT; unless ($binaryStdout) { binmode(STDOUT); $binaryStdout = 1; } } else { # get name of hard link if we are creating one $hardLink = $et->GetNewValues('HardLink'); $testName = $et->GetNewValues('TestName'); $hardLink = FilenameSPrintf($hardLink, $orig) if defined $hardLink; if (defined $testName) { $testName = FilenameSPrintf($testName, $orig); $testName = Image::ExifTool::GetNewFileName($file, $testName) if $file ne ''; } # determine what our output file name should be my $newFileName = $et->GetNewValues('FileName'); my $newDir = $et->GetNewValues('Directory'); if (defined $newFileName or defined $newDir or ($doSetFileName and defined $outfile)) { if ($newFileName) { $newFileName = FilenameSPrintf($newFileName, $orig); if (defined $outfile) { $outfile = Image::ExifTool::GetNewFileName($file, $outfile) if $file ne ''; $outfile = Image::ExifTool::GetNewFileName($outfile, $newFileName); } elsif ($file ne '') { $outfile = Image::ExifTool::GetNewFileName($file, $newFileName); } } if ($newDir) { $newDir = FilenameSPrintf($newDir, $orig); $outfile = Image::ExifTool::GetNewFileName(defined $outfile ? $outfile : $file, $newDir); } $outfile = NextUnusedFilename($outfile, $infile); if ($et->Exists($outfile)) { if ($infile ne $outfile) { Warn "Error: '$outfile' already exists - $infile\n"; ++$countBadWr; return 0; } undef $outfile; # not changing the file name after all } } if (defined $outfile) { $verbose and print $vout "'$infile' --> '$outfile'\n"; # create output directory if necessary CreateDirectory($outfile); # set temporary file (automatically erased on abnormal exit) $tmpFile = $outfile if defined $outOpt; } unless (defined $tmpFile) { # count the number of tags and pseudo-tags we are writing my ($numSet, $numPseudo) = $et->CountNewValues(); if ($et->Exists($file)) { unless ($numSet) { # no need to write if no tags set print $vout "Nothing changed in $file\n" if defined $verbose; ++$countSameWr; return 1; } } elsif (CanCreate($file)) { if ($numSet == $numPseudo) { # no need to write if no real tags Warn("Error: Nothing to write - $file\n"); ++$countBadWr; return 0; } unless (defined $outfile) { # create file from scratch $outfile = $file; $file = ''; } } else { # file doesn't exist, and we can't create it Warn("Error: File not found - $file\n"); FileNotFound($file); ++$countBadWr; return 0; } # quickly rename file and/or set file date if this is all we are doing if ($numSet == $numPseudo) { my $r1 = $et->SetFileModifyDate($file,undef,'FileCreateDate'); my $r2 = $et->SetFileModifyDate($file); my $r3 = 0; $r3 = $et->SetFileName($file, $outfile) if defined $outfile; if ($r1 > 0 or $r2 > 0 or $r3 > 0) { ++$countGoodWr; } elsif ($r1 < 0 or $r2 < 0 or $r3 < 0) { ++$countBadWr; return 0; } else { ++$countSameWr; } if (defined $hardLink or defined $testName) { my $src = (defined $outfile and $r3 > 0) ? $outfile : $file; DoHardLink($et, $src, $hardLink, $testName); } return 1; } unless (defined $outfile) { # write to a truly temporary file $outfile = "${file}_exiftool_tmp"; if ($et->Exists($outfile)) { Warn("Error: Temporary file already exists: $outfile\n"); ++$countBadWr; return 0; } $isTemporary = 1; } # new output file is temporary until we know it has been written properly $tmpFile = $outfile; } } # rewrite the file my $success = $et->WriteInfo(Infile($file), $outfile, $outType); # create hard link if specified if ($success and (defined $hardLink or defined $testName)) { my $src = defined $outfile ? $outfile : $file; DoHardLink($et, $src, $hardLink, $testName); } # get file time if preserving it my ($aTime, $mTime, $cTime, $doPreserve); $doPreserve = $preserveTime unless $file eq ''; if ($doPreserve and $success) { ($aTime, $mTime, $cTime) = $et->GetFileTime($file); # don't override date/time values written by the user undef $cTime if $$et{WRITTEN}{FileCreateDate}; if ($$et{WRITTEN}{FileModifyDate} or $doPreserve == 2) { if (defined $cTime) { undef $aTime; # only preserve FileCreateDate undef $mTime; } else { undef $doPreserve; # (nothing to preserve) } } } if ($success == 1) { # preserve the original file times if (defined $tmpFile) { if ($et->Exists($file)) { $et->SetFileTime($tmpFile, $aTime, $mTime, $cTime) if $doPreserve; if ($isTemporary) { # preserve original file attributes if possible Image::ExifTool::CopyFileAttrs($file, $outfile); # move original out of the way my $original = "${file}_original"; if (not $overwriteOrig and not $et->Exists($original)) { # rename the file and check again to be sure the file doesn't exist # (in case, say, the filesystem truncated the file extension) if (not $et->Rename($file, $original) or $et->Exists($file)) { Error "Error renaming $file\n"; return 0; } } if ($overwriteOrig > 1) { # copy temporary file over top of original to preserve attributes my ($err, $buff); my $newFile = $tmpFile; $et->Open(\*NEW_FILE, $newFile) or Error("Error opening $newFile\n"), return 0; binmode(NEW_FILE); #.......................................................... # temporarily disable CTRL-C during this critical operation $critical = 1; undef $tmpFile; # handle deletion of temporary file ourself if ($et->Open(\*ORIG_FILE, $file, '>')) { binmode(ORIG_FILE); while (read(NEW_FILE, $buff, 65536)) { print ORIG_FILE $buff or $err = 1; } close(NEW_FILE); close(ORIG_FILE) or $err = 1; if ($err) { Warn "Couldn't overwrite in place - $file\n"; unless ($et->Rename($newFile, $file) or ($et->Unlink($file) and $et->Rename($newFile, $file))) { Error("Error renaming $newFile to $file\n"), return 0; } } else { $et->SetFileModifyDate($file, $cTime, 'FileCreateDate', 1); $et->SetFileModifyDate($file, $mTime, 'FileModifyDate', 1); $et->Unlink($newFile); if ($doPreserve) { $et->SetFileTime($file, $aTime, $mTime, $cTime); # save time to set it later again to patch OS X 10.6 bug $preserveTime{$file} = [ $aTime, $mTime, $cTime ]; } } ++$countGoodWr; } else { close(NEW_FILE); Warn "Error opening $file for writing\n"; $et->Unlink($newFile); ++$countBadWr; } undef $critical; # end critical section SigInt() if $interrupted; # issue delayed SIGINT if necessary #.......................................................... # simply rename temporary file to replace original # (if we didn't already rename it to add "_original") } elsif ($et->Rename($tmpFile, $file)) { ++$countGoodWr; } else { my $newFile = $tmpFile; undef $tmpFile; # (avoid deleting file if we get interrupted) # unlink may fail if already renamed or no permission if (not $et->Unlink($file)) { Warn "Error renaming temporary file to $file\n"; $et->Unlink($newFile); ++$countBadWr; # try renaming again now that the target has been deleted } elsif (not $et->Rename($newFile, $file)) { Warn "Error renaming temporary file to $file\n"; # (don't delete tmp file now because it is all we have left) ++$countBadWr; } else { ++$countGoodWr; } } } elsif ($overwriteOrig) { # erase original file $et->Unlink($file) or Warn "Error erasing original $file\n"; ++$countGoodWr; } else { ++$countGoodCr; } } else { # this file was created from scratch, not edited ++$countGoodCr; } } else { ++$countGoodWr; } } elsif ($success) { if ($isTemporary) { # just erase the temporary file since no changes were made $et->Unlink($tmpFile); ++$countSameWr; } else { $et->SetFileTime($outfile, $aTime, $mTime, $cTime) if $doPreserve; if ($overwriteOrig) { $et->Unlink($file) or Warn "Error erasing original $file\n"; } ++$countCopyWr; } print $vout "Nothing changed in $file\n" if defined $verbose; } else { $et->Unlink($tmpFile) if defined $tmpFile; ++$countBadWr; } undef $tmpFile; return $success; } #------------------------------------------------------------------------------ # Make hard link and handle TestName if specified # Inputs: 0) ExifTool ref, 1) source file name, 2) HardLink name, 3) TestFile name sub DoHardLink($$$$) { my ($et, $src, $hardLink, $testName) = @_; if (defined $hardLink) { $hardLink = NextUnusedFilename($hardLink); if ($et->SetFileName($src, $hardLink, 'Link') > 0) { ++$countLink; } else { ++$countBadLink; } } if (defined $testName) { $testName = NextUnusedFilename($testName, undef, 1); if ($usedFileName{$testName}) { $et->Warn("File '$testName' would exist"); } elsif ($et->SetFileName($src, $testName, 'Test') == 1) { $usedFileName{$testName} = 1; } } } #------------------------------------------------------------------------------ # Clean string for XML (also removes invalid control chars and malformed UTF-8) # Inputs: 0) string ref # Returns: nothing, but input string is escaped sub CleanXML($) { my $strPt = shift; # translate control characters that are invalid in XML $$strPt =~ tr/\0-\x08\x0b\x0c\x0e-\x1f/./; # fix malformed UTF-8 characters Image::ExifTool::XMP::FixUTF8($strPt) if $utf8; # escape necessary characters for XML $$strPt = Image::ExifTool::XMP::EscapeXML($$strPt); } #------------------------------------------------------------------------------ # Encode string for XML # Inputs: 0) string ref # Returns: encoding used (and input string is translated) sub EncodeXML($) { my $strPt = shift; if ($$strPt =~ /[\0-\x08\x0b\x0c\x0e-\x1f]/ or ($utf8 and Image::ExifTool::XMP::IsUTF8($strPt) < 0)) { # encode binary data and non-UTF8 with special characters as base64 $$strPt = Image::ExifTool::XMP::EncodeBase64($$strPt); return 'http://www.w3.org/2001/XMLSchema#base64Binary'; #ATV } elsif ($escapeHTML) { $$strPt = Image::ExifTool::HTML::EscapeHTML($$strPt); } else { $$strPt = Image::ExifTool::XMP::EscapeXML($$strPt); } return ''; # not encoded } #------------------------------------------------------------------------------ # Format value for XML output # Inputs: 0) value, 1) indentation, 2) group # Returns: formatted value sub FormatXML($$$) { local $_; my ($val, $ind, $grp) = @_; my $gt = '>'; if (ref $val eq 'ARRAY') { # convert ARRAY into an rdf:Bag my $val2 = "\n$ind "; foreach (@$val) { $val2 .= "\n$ind "; } $val = "$val2\n$ind \n$ind"; } elsif (ref $val eq 'HASH') { $gt = " rdf:parseType='Resource'>"; my $val2 = ''; foreach (sort keys %$val) { # (some variable-namespace XML structure fields may have a different group) my $tok = /:/ ? $_ : ($grp . ':' . $_); $val2 .= "\n$ind <$tok" . FormatXML($$val{$_}, "$ind ", $grp) . ""; } $val = "$val2\n$ind"; } else { # (note: SCALAR reference should have already been converted) my $enc = EncodeXML(\$val); $gt = " rdf:datatype='$enc'>\n" if $enc; #ATV } return $gt . $val; } #------------------------------------------------------------------------------ # Escape string for JSON or PHP # Inputs: 0) string, 1) flag to force numbers to be quoted too # Returns: Escaped string (quoted if necessary) sub EscapeJSON($;$) { my ($str, $quote) = @_; unless ($quote) { # JSON boolean (true or false) return lc($str) if $str =~ /^(true|false)$/i and $json < 2; # JSON/PHP number (see json.org for numerical format) # return $str if $str =~ /^-?(\d|[1-9]\d+)(\.\d+)?(e[-+]?\d+)?$/i; # (these big numbers caused problems for some JSON parsers, so be more conservative) return $str if $str =~ /^-?(\d|[1-9]\d{1,14})(\.\d{1,16})?(e[-+]?\d{1,3})?$/i; } # encode JSON string as Base64 if necessary if ($json < 2 and defined $binaryOutput and Image::ExifTool::XMP::IsUTF8(\$str) < 0) { return '"base64:' . Image::ExifTool::XMP::EncodeBase64($str, 1) . '"'; } # escape special characters $str =~ s/(["\t\n\r\\])/\\$jsonChar{$1}/sg; if ($json < 2) { # JSON # escape other control characters with \u $str =~ s/([\0-\x1f])/sprintf("\\u%.4X",ord $1)/sge; # JSON strings must be valid UTF8 Image::ExifTool::XMP::FixUTF8(\$str) if $utf8; } else { # PHP # must escape "$" too for PHP $str =~ s/\$/\\\$/sg; # escape other control characters with \x $str =~ s/([\0-\x1f])/sprintf("\\x%.2X",ord $1)/sge; } return '"' . $str . '"'; # return the quoted string } #------------------------------------------------------------------------------ # Print JSON or PHP value # Inputs: 0) file reference, 1) value, 2) indentation sub FormatJSON($$$) { local $_; my ($fp, $val, $ind) = @_; my $comma; if (not ref $val) { print $fp EscapeJSON($val); } elsif (ref $val eq 'ARRAY') { if ($joinLists and not ref $$val[0]) { print $fp EscapeJSON(join $listSep, @$val); } else { my ($bra, $ket) = $json == 1 ? ('[',']') : ('Array(',')'); print $fp $bra; foreach (@$val) { print $fp ',' if $comma; FormatJSON($fp, $_, $ind); $comma = 1, } print $fp $ket, } } elsif (ref $val eq 'HASH') { my ($bra, $ket, $sep) = $json == 1 ? ('{','}',':') : ('Array(',')',' =>'); print $fp $bra; foreach (sort keys %$val) { print $fp ',' if $comma; print $fp qq(\n$ind "$_"$sep ); # hack to force decimal id's to be printed as strings with -H if ($showTagID and $_ eq 'id' and $showTagID eq 'H' and $$val{$_} =~ /^\d+\.\d+$/) { print $fp qq{"$$val{$_}"}; } else { FormatJSON($fp, $$val{$_}, "$ind "); } $comma = 1, } print $fp "\n$ind$ket", } else { # (note: SCALAR reference should have already been converted) print $fp '""'; } } #------------------------------------------------------------------------------ # Format value for CSV file # Inputs: value # Returns: value quoted if necessary sub FormatCSV($) { my $val = shift; # currently, the value may contain NULL characters. It is unclear # whether or not this is valid CSV, but some readers may not like it. # (if this becomes a problem, in the future values may need to be truncated at # the first NULL character, but this would disable the use of CSV for binary data) $val = qq{"$val"} if $val =~ s/"/""/g or $val =~ /(^\s+|\s+$)/ or $val =~ /[,\n\r]/; return $val; } #------------------------------------------------------------------------------ # Print accumulated CSV information sub PrintCSV() { my ($file, $lcTag, @tags); @csvTags or @csvTags = sort keys %csvTags; # make a list of tags actually found foreach $lcTag (@csvTags) { push @tags, $csvTags{$lcTag} if $csvTags{$lcTag}; } print join(',', 'SourceFile', @tags), "\n"; my $empty = defined($forcePrint) ? $forcePrint : ''; foreach $file (@csvFiles) { my @vals = (FormatCSV($mt->ConvertFileName($file))); # start with full file name my $csvInfo = $database{$file}; foreach $lcTag (@csvTags) { next unless $csvTags{$lcTag}; my $val = $$csvInfo{$lcTag}; defined $val or push(@vals,$empty), next; push @vals, FormatCSV($val); } print join(',', @vals), "\n"; } } #------------------------------------------------------------------------------ # Add tag groups from structure fields to a list # Inputs: 0) tag value, 1) parent group, 2) group hash ref, 3) group list ref sub AddGroups($$$$) { my ($val, $grp, $groupHash, $groupList) = @_; my ($key, $val2); if (ref $val eq 'HASH') { foreach $key (sort keys %$val) { if ($key =~ /(.*?):/ and not $$groupHash{$1}) { $$groupHash{$1} = $grp; push @$groupList, $1; } AddGroups($$val{$key}, $grp, $groupHash, $groupList) if ref $$val{$key}; } } elsif (ref $val eq 'ARRAY') { foreach $val2 (@$val) { AddGroups($val2, $grp, $groupHash, $groupList) if ref $val2; } } } #------------------------------------------------------------------------------ # Convert binary data (SCALAR references) for printing # Inputs: 0) object reference # Returns: converted object sub ConvertBinary($) { my $obj = shift; my ($key, $val); if (ref $obj eq 'HASH') { foreach $key (keys %$obj) { $$obj{$key} = ConvertBinary($$obj{$key}) if ref $$obj{$key}; } } elsif (ref $obj eq 'ARRAY') { foreach $val (@$obj) { $val = ConvertBinary($val) if ref $val; } } elsif (ref $obj eq 'SCALAR') { # (binaryOutput flag is set to 0 for binary mode of XML/PHP/JSON output formats) if (defined $binaryOutput) { $obj = $$obj; # encode in base64 if necessary if ($json == 1 and ($obj =~ /[^\x09\x0a\x0d\x20-\x7e\x80-\xf7]/ or Image::ExifTool::XMP::IsUTF8(\$obj) < 0)) { $obj = 'base64:' . Image::ExifTool::XMP::EncodeBase64($obj, 1); } } else { # (-b is not valid for HTML output) my $bOpt = $html ? '' : ', use -b option to extract'; if ($$obj =~ /^Binary data \d+ bytes$/) { $obj = "($$obj$bOpt)"; } else { $obj = '(Binary data ' . length($$obj) . " bytes$bOpt)"; } } } return $obj; } #------------------------------------------------------------------------------ # Compare two tag values to see if they are equal # Inputs: 0) value1, 1) value2 # Returns: true if they are equal sub IsEqual($$) { return 1 if ref $_[0] eq 'SCALAR' or $_[0] eq $_[1]; return 0 if ref $_[0] ne 'ARRAY' or ref $_[1] ne 'ARRAY' or @{$_[0]} ne @{$_[1]}; # test all elements of an array my $i = 0; for ($i=0; $i ++$saveCount }, "TagsFromFile=$setFile"; # add option to protect the tags which are assigned after this # (this is the mechanism by which the command-line order-of-operations is preserved) $opts or $opts = { }; $$opts{ProtectSaved} = $saveCount; push @{$setTags{$setFile}}, $opts; } #------------------------------------------------------------------------------ # Get input file name or reference for calls to the ExifTool API # Inputs: 0) file name ('-' for STDIN), 1) flag to buffer STDIN # Returns: file name, or RAF reference for buffering STDIN sub Infile($;$) { my ($file, $bufferStdin) = @_; if ($file eq '-' and ($bufferStdin or $rafStdin)) { if ($rafStdin) { $rafStdin->Seek(0); # rewind } elsif (open RAF_STDIN, '-') { $rafStdin = new File::RandomAccess(\*RAF_STDIN); $rafStdin->BinMode(); } return $rafStdin if $rafStdin; } return $file; } #------------------------------------------------------------------------------ # Set new values from file # Inputs: 0) exiftool ref, 1) filename, 2) reference to list of values to set # Returns: 0 on error (and increments $countBadWr) sub DoSetFromFile($$$) { local $_; my ($et, $file, $setTags) = @_; $verbose and print $vout "Setting new values from $file\n"; my $info = $et->SetNewValuesFromFile(Infile($file,1), @$setTags); my $numSet = scalar(keys %$info); if ($$info{Error}) { # delete all error and warning tags my @warns = grep /^(Error|Warning)\b/, keys %$info; $numSet -= scalar(@warns); # issue a warning for the main error only if we were able to set some tags if (keys(%$info) > @warns) { my $err = $$info{Error}; delete $$info{$_} foreach @warns; $$info{Warning} = $err; } } elsif ($$info{Warning}) { my $warns = 1; ++$warns while $$info{"Warning ($warns)"}; $numSet -= $warns; } PrintErrors($et, $info, $file) and ++$countBadWr, return 0; Warn "Warning: No writable tags set from $file\n" unless $numSet; return 1; } #------------------------------------------------------------------------------ # Translate backslashes to forward slashes in filename if necessary # Inputs: 0) Filename # Returns: nothing, but changes filename if necessary sub CleanFilename($) { $_[0] =~ tr/\\/\// if $hasBackslash{$^O}; } #------------------------------------------------------------------------------ # Check for valid UTF-8 of a file name # Inputs: 0) string, 1) original encoding # Returns: 0=plain ASCII, 1=valid UTF-8, -1=invalid UTF-8 (and print warning) sub CheckUTF8($$) { my ($file, $enc) = @_; my $isUTF8 = 0; if ($file =~ /[\x80-\xff]/) { require Image::ExifTool::XMP; $isUTF8 = Image::ExifTool::XMP::IsUTF8(\$file); if ($isUTF8 < 0) { if ($enc) { Warn("Invalid filename encoding for $file\n"); } else { WarnOnce(qq{FileName encoding not specified. Use "-charset FileName=CHARSET"\n}); } } } return $isUTF8; } #------------------------------------------------------------------------------ # Process files in our @files list # Inputs: 0) ExifTool ref, 1) list ref to just return full file names sub ProcessFiles($;$) { my ($et, $list) = @_; my $enc = $et->Options('CharsetFileName'); my $file; foreach $file (@files) { $et->Options(CharsetFileName => 'UTF8') if $utf8FileName{$file}; if (defined $progressMax) { ++$progress; $progStr = " [$progress/$progressMax]"; } if ($mt->IsDirectory($file)) { $multiFile = $validFile = 1; ScanDir($mt, $file, $list); } elsif ($filterFlag and not AcceptFile($file)) { if ($mt->Exists($file)) { $filtered = 1; $verbose and print $vout "-------- $file (wrong extension)$progStr\n"; } else { Warn "File not found: $file\n"; FileNotFound($file); $rtnVal = 1; } } else { $validFile = 1; if ($list) { push(@$list, $file); } else { GetImageInfo($et, $file); } } $et->Options(CharsetFileName => $enc) if $utf8FileName{$file}; } } #------------------------------------------------------------------------------ # Scan directory for image files # Inputs: 0) ExifTool ref, 1) directory name, 2) list ref to return file names sub ScanDir($$;$) { local $_; my ($et, $dir, $list) = @_; my (@fileList, $done, $file, $utf8Name); my $enc = $et->Options('CharsetFileName'); # recode as UTF-8 if necessary if ($enc) { unless ($enc eq 'UTF8') { $dir = $et->Decode($dir, $enc, undef, 'UTF8'); $et->Options(CharsetFileName => 'UTF8'); # now using UTF8 } $utf8Name = 1; } return if $ignore{$dir}; # use Win32::FindFile on Windows if available # (ReadDir will croak if there is a wildcard, so check for this) if ($^O eq 'MSWin32' and $dir !~ /[*?]/) { local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] };; if (CheckUTF8($dir, $enc) >= 0) { if (eval { require Win32::FindFile }) { @fileList = Win32::FindFile::ReadDir($dir); $_ = $_->cFileName foreach @fileList; $et->Options(CharsetFileName => 'UTF8'); # now using UTF8 $utf8Name = 1; # ReadDir returns UTF-8 file names $done = 1; } else { $done = 0; } } } unless ($done) { # use standard perl library routines to read directory opendir(DIR_HANDLE, $dir) or Warn("Error opening directory $dir\n"), return; @fileList = readdir(DIR_HANDLE); closedir(DIR_HANDLE); if (defined $done) { # issue warning if some names would have required Win32::FindFile foreach $file ($dir, @fileList) { next unless $file =~ /[\?\x80-\xff]/; WarnOnce("Install Win32::FindFile to support Windows Unicode file names in directories\n"); last; } } } $dir =~ /\/$/ or $dir .= '/'; # make sure directory name ends with '/' foreach $file (@fileList) { my $path = "$dir$file"; if ($et->IsDirectory($path)) { next unless $recurse; # ignore directories starting with "." by default next if $file =~ /^\./ and ($recurse == 1 or $file eq '.' or $file eq '..'); next if $ignore{$file} or ($ignore{SYMLINKS} and -l $path); ScanDir($et, $path, $list); next; } # apply rules from -ext options my $accepted; if ($filterFlag) { $accepted = AcceptFile($file) or next; # must be specifically accepted to bypass selection logic $accepted &= 0x01; } unless ($accepted) { # read/write this file if it is a supported type if ($scanWritable) { if ($scanWritable eq '1') { next unless CanWrite($file); } else { my $type = GetFileType($file); next unless defined $type and $type eq $scanWritable; } } elsif (not GetFileType($file)) { next unless $doUnzip; next unless $file =~ /\.(gz|bz2)$/i; } } if ($list) { push(@$list, $path); $utf8FileName{$path} = 1 if $utf8Name; } else { GetImageInfo($et, $path); } } ++$countDir; $et->Options(CharsetFileName => $enc); # restore original setting } #------------------------------------------------------------------------------ # Find files with wildcard expression on Windows # Inputs: 0) ExifTool ref, 1) file name with wildcards # Returns: list of matching file names # Notes: # 1) Win32::FindFile must already be loaded # 2) Sets flag in %utf8FileName for each file found sub FindFileWindows($$) { my ($et, $wildfile) = @_; # recode file name as UTF-8 if necessary my $enc = $et->Options('CharsetFileName'); $wildfile = $et->Decode($wildfile, $enc, undef, 'UTF8') if $enc and $enc ne 'UTF8'; $wildfile =~ tr/\\/\//; # use forward slashes my ($dir, $wildname) = ($wildfile =~ m{(.*/)(.*)}) ? ($1, $2) : ('', $wildfile); if ($dir =~ /[*?]/) { Warn "Wildcards don't work in the directory specification\n"; return (); } CheckUTF8($wildfile, $enc) >= 0 or return (); local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] };; my @names = Win32::FindFile::FindFile($wildfile) or return (); # (apparently this isn't always sorted, so do a case-insensitive sort here) @names = sort { uc($a) cmp uc($b) } @names; my ($rname, $nm, @files); # replace "\?" with ".", and "\*" with ".*" for regular expression ($rname = quotemeta $wildname) =~ s/\\\?/./g; $rname =~ s/\\\*/.*/g; foreach $nm (@names) { $nm = $nm->cFileName; # make sure that FindFile behaves # (otherwise "*.jpg" matches things like "a.jpg_original"!) next unless $nm =~ /^$rname$/i; next if $nm eq '.' or $nm eq '..'; # don't match "." and ".." my $file = "$dir$nm"; # add back directory name push @files, $file; $utf8FileName{$file} = 1; # flag this file name as UTF-8 encoded } return @files; } #------------------------------------------------------------------------------ # Handle missing file on the command line # Inputs: 0) file name sub FileNotFound($) { my $file = shift; if ($file =~ /^(DIR|FILE)$/) { my $type = { DIR => 'directory', FILE => 'file' }->{$file}; Warn qq{You were meant to enter any valid $type name, not "$file" literally.\n}; } } #------------------------------------------------------------------------------ # Patch for OS X 10.6 to preserve file modify date # (this probably isn't a 100% fix, but it may solve a majority of the cases) sub PreserveTime() { local $_; $mt->SetFileTime($_, @{$preserveTime{$_}}) foreach keys %preserveTime; undef %preserveTime; } #------------------------------------------------------------------------------ # Return absolute path for a file # Inputs: 0) file name # Returns: absolute path string, or undef if path could not be determined # Note: Warnings should be suppressed when calling this routine sub AbsPath($) { my $file = shift; my $path; if (defined $file and eval { require Cwd }) { $path = eval { Cwd::abs_path($file) }; # make the delimiters and case consistent # (abs_path is very inconsistent about what it returns in Windows) if (defined $path and $hasBackslash{$^O}) { $path =~ tr/\\/\//; $path = lc $path; } } return $path; } #------------------------------------------------------------------------------ # Add print format entry # Inputs: 0) expression string sub AddPrintFormat($) { my $expr = shift; my $type; if ($expr =~ /^#/) { $expr =~ s/^#\[(HEAD|BODY|TAIL)\]// or return; # ignore comments $type = $1; } else { $type = 'BODY'; } $printFmt{$type} or $printFmt{$type} = [ ]; push @{$printFmt{$type}}, $expr; # add to list of requested tags push @requestTags, $expr =~ /\$\{?((?:[-\w]+:)*[-\w?*]+)/g; } #------------------------------------------------------------------------------ # Get suggested file extension based on tag value for binary output # Inputs: 0) data ref # Returns: file extension (lower case), or 'dat' if unknown sub SuggestedExtension($$$) { my ($et, $valPt, $tag) = @_; my $ext; if (not $binaryOutput) { $ext = 'txt'; } elsif ($$valPt =~ /^\xff\xd8\xff/) { $ext = 'jpg'; } elsif ($$valPt =~ /^(\0\0\0\x0cjP( |\x1a\x1a)\x0d\x0a\x87\x0a|\xff\x4f\xff\x51\0)/) { $ext = 'jp2'; } elsif ($$valPt =~ /^(\x89P|\x8aM|\x8bJ)NG\r\n\x1a\n/) { $ext = 'png'; } elsif ($$valPt =~ /^GIF8[79]a/) { $ext = 'gif'; } elsif ($$valPt =~ /^<\?xpacket/ or $tag eq 'XMP') { $ext = 'xmp'; } elsif ($$valPt =~ /^<\?xml/ or $tag eq 'XML') { $ext = 'xml'; } elsif ($$valPt =~ /^RIFF....WAVE/s) { $ext = 'wav'; } elsif ($tag eq 'OriginalRawFileData' and defined($ext = $et->GetValue('OriginalRawFileName'))) { $ext =~ s/^.*\.//s; $ext = $ext ? lc($ext) : 'raw'; } elsif ($tag eq 'EXIF') { $ext = 'exif'; } elsif ($$valPt =~ /^(MM\0\x2a|II\x2a\0)/) { $ext = 'tiff'; } elsif ($$valPt !~ /^.{0,4096}\0/s) { $ext = 'txt'; } elsif ($$valPt =~ /^BM/) { $ext = 'bmp'; } else { $ext = 'dat'; } return $ext; } #------------------------------------------------------------------------------ # Load print format file # Inputs: 0) file name # - saves lines of file to %printFmt list # - adds tag names to @tags list sub LoadPrintFormat($) { my $arg = shift; if (not defined $arg) { Error "Must specify file or expression for -p option\n"; } elsif ($arg !~ /\n/ and -f $arg and $mt->Open(\*FMT_FILE, $arg)) { foreach () { AddPrintFormat($_); } close(FMT_FILE); } else { AddPrintFormat($arg . "\n"); } } #------------------------------------------------------------------------------ # A sort of sprintf for filenames # Inputs: 0) format string (%d=dir, %f=file name, %e=ext), # 1) source filename or undef to test format string # 2-4) [%t %g %s only] tag name, ref to array of group names, suggested extension # Returns: new filename or undef on error (or if no file and fmt contains token) sub FilenameSPrintf($;$@) { my ($fmt, $file, @extra) = @_; local $_; # return format string straight away if no tokens return $fmt unless $fmt =~ /%[-+]?\d*[.:]?\d*[lu]?[dfetgs]/; return undef unless defined $file; CleanFilename($file); # make sure we are using forward slashes # split filename into directory, file, extension my %part; @part{qw(d f e)} = ($file =~ /^(.*?)([^\/]*?)(\.[^.\/]*)?$/); defined $part{f} or Warn("Error: Bad pattern match for file $file\n"), return undef; $part{e} = $part{e} ? substr($part{e}, 1) : ''; @part{qw(t g s)} = @extra; my ($filename, $pos) = ('', 0); while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lu]?)([dfetgs]))/g) { $filename .= substr($fmt, $pos, pos($fmt) - $pos - length($1)); $pos = pos($fmt); my ($sign, $wid, $dot, $skip, $mod, $code) = ($2, $3, $4, $5 || 0, $6, $7); my (@path, $part, $len, $groups); if ($code eq 'd' and $dot and $dot eq ':') { # field width applies to directory levels instead of characters @path = split '/', $part{d}; $len = scalar @path; } else { if ($code eq 'g') { $groups = $part{g} || [ ] unless defined $groups; $fmt =~ /\G(\d?)/g; # look for %g1, %g2, etc $part{g} = $$groups[$1 || 0]; $pos = pos($fmt); } $part{$code} = '' unless defined $part{$code}; $len = length $part{$code}; } next unless $skip < $len; $wid = $len - $skip if $wid eq '' or $wid + $skip > $len; $skip = $len - $wid - $skip if $sign eq '-'; if (@path) { $part = join('/', @path[$skip..($skip+$wid-1)]) . '/'; } else { $part = substr($part{$code}, $skip, $wid); } $part = ($mod eq 'u') ? uc($part) : lc($part) if $mod; $filename .= $part; } $filename .= substr($fmt, $pos); # add rest of file name # remove double slashes (except at beginning to allow Windows UNC paths) $filename =~ s{(?!^)//}{/}g; return $filename; } #------------------------------------------------------------------------------ # Convert number to alphabetical index: a, b, c, ... z, aa, ab ... # Inputs: 0) number # Returns: alphabetical index string sub Num2Alpha($) { my $num = shift; my $alpha = chr(97 + ($num % 26)); while ($num >= 26) { $num = int($num / 26) - 1; $alpha = chr(97 + ($num % 26)) . $alpha; } return $alpha; } #------------------------------------------------------------------------------ # Expand '%c' and '%C' codes if filename to get next unused file name # Inputs: 0) file name format string, 1) filename ok to use even if it exists # 2) dry run (won't really be renaming file) # Returns: new file name sub NextUnusedFilename($;$$) { my ($fmt, $okfile, $dryRun) = @_; return $fmt unless $fmt =~ /%[-+]?\d*\.?\d*[lun]?[cC]/; my %sep = ( '-' => '-', '+' => '_' ); my ($copy, $alpha) = (0, 'a'); for (;;) { my ($filename, $pos) = ('', 0); while ($fmt =~ /(%([-+]?)(\d*)(\.?)(\d*)([lun]?)([cC]))/g) { $filename .= substr($fmt, $pos, pos($fmt) - $pos - length($1)); $pos = pos($fmt); my ($sign, $wid, $dec, $wid2, $mod, $tok) = ($2, $3 || 0, $4, $5 || 0, $6, $7); if ($tok eq 'C') { $seqFileNum = $wid if $wid and not $seqFileNum; $wid = $wid2; } else { next unless $dec or $copy; $wid = $wid2 if $wid < $wid2; } # add dash or underline separator if '-' or '+' specified $filename .= $sep{$sign} if $sign; if ($mod and $mod ne 'n') { my $a = $tok eq 'C' ? Num2Alpha($seqFileNum++) : $alpha; my $str = ($wid and $wid > length $a) ? 'a' x ($wid - length($a)) : ''; $str .= $a; $str = uc $str if $mod eq 'u'; $filename .= $str; } else { my $c = $tok eq 'C' ? $seqFileNum++ : $copy; my $num = $c + ($mod ? 1 : 0); $filename .= $wid ? sprintf("%.${wid}d",$num) : $num; } } $filename .= substr($fmt, $pos); # add rest of file name # return now with filename unless file exists return $filename unless $mt->Exists($filename) or $usedFileName{$filename}; return $filename if defined $okfile and $filename eq $okfile; ++$copy; ++$alpha; } } #------------------------------------------------------------------------------ # Create directory for specified file # Inputs: 0) complete file name including path # Returns: true if a directory was created my $k32CreateDir; sub CreateDirectory($) { my $file = shift; my ($dir, $created); ($dir = $file) =~ s/[^\/]*$//; # remove filename from path specification if ($dir and not $mt->IsDirectory($dir)) { my @parts = split /\//, $dir; $dir = ''; foreach (@parts) { $dir .= $_; if (length $dir and not $mt->IsDirectory($dir) and # don't try to create a network drive root directory not ($hasBackslash{$^O} and $dir =~ m{^//[^/]*$})) { my $success; # create directory since it doesn't exist my $d2 = $dir; # (must make a copy in case EncodeFileName recodes it) if ($mt->EncodeFileName($d2)) { # handle Windows Unicode directory names unless (eval { require Win32::API }) { Error('Install Win32::API to create directories with Unicode names'); return 0; } unless ($k32CreateDir) { $k32CreateDir = new Win32::API('KERNEL32', 'CreateDirectoryW', 'PP', 'I'); } $success = $k32CreateDir->Call($d2, 0) if $k32CreateDir; } else { $success = mkdir($d2, 0777); } $success or Error("Error creating directory $dir\n"), return 0; $verbose and print $vout "Created directory $dir\n"; $created = 1; } $dir .= '/'; } } ++$countNewDir if $created; return $created; } #------------------------------------------------------------------------------ # Open output text file # Inputs: 0) file name format string, 1-N) extra arguments for FilenameSPrintf # Returns: 0) file reference (or undef on error), 1) file name if opened, 2) append flag # Notes: returns reference to STDOUT and no file name if no textOut file needed sub OpenOutputFile($;@) { my ($file, @args) = @_; my ($fp, $outfile, $append); if ($textOut) { $outfile = $file; CleanFilename($outfile); if ($textOut =~ /%[-+]?\d*[.:]?\d*[lun]?[dfetgscC]/ or defined $tagOut) { # make filename from printf-like $textOut $outfile = FilenameSPrintf($textOut, $file, @args); return () unless defined $outfile; $outfile = NextUnusedFilename($outfile); CreateDirectory($outfile); # create directory if necessary } else { $outfile =~ s/\.[^.\/]*$//; # remove extension if it exists $outfile .= $textOut; } my $mode = '>'; if ($mt->Exists($outfile)) { unless ($textOverwrite) { Warn "Output file $outfile already exists for $file\n"; return (); } if ($textOverwrite == 2 or ($textOverwrite == 3 and $created{$outfile})) { $mode = '>>'; $append = 1; } } unless ($mt->Open(\*OUTFILE, $outfile, $mode)) { my $what = $mode eq '>' ? 'creating' : 'appending to'; Error("Error $what $outfile\n"); return (); } binmode(OUTFILE) if $binaryOutput; $fp = \*OUTFILE; } else { $fp = \*STDOUT; } return($fp, $outfile, $append); } #------------------------------------------------------------------------------ # Filter files based on extension # Inputs: 0) file name # Returns: 0 = rejected, 1 = specifically accepted, 2 = accepted by default # Notes: This routine should only be called if $filterFlag is set sub AcceptFile($) { my $file = shift; my $ext = ($file =~ /^.*\.(.+)$/s) ? uc($1) : ''; return $filterExt{$ext} if defined $filterExt{$ext}; return $filterExt{'*'} if defined $filterExt{'*'}; return 0 if $filterFlag & 0x02; # reject if accepting specific extensions return 2; # accept by default } #------------------------------------------------------------------------------ # Slurp file into buffer # Inputs: 0) file name, 1) buffer reference # Returns: 1 on success sub SlurpFile($$) { my ($file, $buffPt) = @_; $mt->Open(\*INFILE, $file) or Warn("Error opening file $file\n"), return 0; binmode(INFILE); my $bsize = 1024 * 1024; my $num = read(INFILE, $$buffPt, $bsize); unless (defined $num) { close(INFILE); Warn("Error reading $file\n"); return 0; } my $bmax = 64 * $bsize; while ($num == $bsize) { $bsize *= 2 if $bsize < $bmax; my $buff; $num = read(INFILE, $buff, $bsize); last unless $num; $$buffPt .= $buff; } close(INFILE); return 1; } #------------------------------------------------------------------------------ # Read arguments from -stay_open argfile # Inputs: 0) argument list ref # Notes: blocks until -execute, -stay_open or -@ option is available # (or until there was an error reading from the file) sub ReadStayOpen($) { my $args = shift; my (@newArgs, $processArgs, $result, $optArgs); my $lastOpt = ''; my $unparsed = length $stayOpenBuff; for (;;) { if ($unparsed) { # parse data already read from argfile $result = $unparsed; undef $unparsed; } else { # read more data from argfile # - this read may block (which is good) if reading from a pipe $result = sysread(STAYOPEN, $stayOpenBuff, 65536, length($stayOpenBuff)); } if ($result) { my $pos = 0; while ($stayOpenBuff =~ /\n/g) { my $len = pos($stayOpenBuff) - $pos; my $arg = substr($stayOpenBuff, $pos, $len); $pos += $len; $arg =~ s/^\s+//; # remove leading white space $arg =~ s/[\x0d\x0a]+$//s; # remove trailing newline # remove white space before, and single space after '=', '+=', '-=' or '<=' $arg =~ s/^(-[-:\w]+#?)\s*([-+<]?=) ?/$1$2/; next if $arg eq '' or $arg =~ /^#/; # ignore empty/comment lines push @newArgs, $arg; if ($optArgs) { # this is an argument for the last option undef $optArgs; next unless $lastOpt eq '-stay_open' or $lastOpt eq '-@'; } else { $optArgs = $optArgs{$arg}; $lastOpt = lc $arg; $optArgs = $optArgs{$lastOpt} unless defined $optArgs; next unless $lastOpt =~ /^-execute\d*$/; } $processArgs = 1; last; # process arguments up to this point } next unless $pos; # nothing to do if we didn't read any arguments # keep unprocessed data in buffer $stayOpenBuff = substr($stayOpenBuff, $pos); if ($processArgs) { # process new arguments after -execute or -stay_open option unshift @$args, @newArgs; last; } } elsif ($result == 0) { # sysread() didn't block (eg. when reading from a file), # so wait for a short time (1/100 sec) then try again # Note: may break out of this early if SIGCONT is received select(undef,undef,undef,0.01); } else { Warn "Error reading from ARGFILE\n"; close STAYOPEN; $stayOpen = 0; last; } } } #------------------------------------------------------------------------------ # Print list of tags # Inputs: 0) message, 1-N) list of tag names sub PrintTagList($@) { my $msg = shift; print $msg, ":\n" unless $quiet; my $tag; if ($outFormat < 0 and $msg =~ /file extensions$/ and @_) { foreach $tag (@_) { printf(" %-11s %s\n", $tag, GetFileType($tag, 1)); } return; } print ' '; my $len = 1; foreach $tag (@_) { my $taglen = length($tag); if ($len + $taglen > 78) { print "\n "; $len = 1; } print " $tag"; $len += $taglen + 1; } @_ or print ' [empty list]'; print "\n"; } #------------------------------------------------------------------------------ # Print warnings and errors from info hash # Inputs: 0) ExifTool object ref, 1) info hash, 2) file name # Returns: true if there was an Error sub PrintErrors($$$) { my ($et, $info, $file) = @_; my ($tag, $key); foreach $tag (qw(Warning Error)) { next unless $$info{$tag}; my @keys = ( $tag ); push @keys, sort(grep /^$tag /, keys %$info) if $et->Options('Duplicates'); foreach $key (@keys) { Warn "$tag: $info->{$key} - $file\n"; } } return $$info{Error}; } __END__ =head1 NAME exiftool - Read and write meta information in files =head1 SYNOPSIS =over 4 =item B [I] [-I...] [--I...] I... =item B [I] -I[+-E]=[I]... I... =item B [I] B<-tagsFromFile> I [-I[EI]...] I... =item B [ B<-ver> | B<-list>[B|B|B|B|B[I]|B|B] ] =back For specific examples, see the L sections below. This documentation is displayed if exiftool is run without an input I when one is expected. =head1 DESCRIPTION A command-line interface to L, used for reading and writing meta information in a variety of file types. I is one or more source file names, directory names, or C<-> for the standard input. Metadata is read from source files and printed in readable form to the console (or written to output text files with B<-w>). To write or delete metadata, tag values are assigned using the -I=[I] syntax, or the B<-geotag> option. To copy or move metadata, the B<-tagsFromFile> feature is used. By default the original files are preserved with C<_original> appended to their names -- be sure to verify that the new files are OK before erasing the originals. Once in write mode, exiftool will ignore any read-specific options. Note: If I is a directory name then only supported file types in the directory are processed (in write mode only writable types are processed). However, files may be specified by name, or the B<-ext> option may be used to force processing of files with any extension. Hidden files in the directory are also processed. Adding the B<-r> option causes subdirectories to be processed recursively, but those with names beginning with "." are skipped unless B<-r.> is used. Below is a list of file types and meta information formats currently supported by ExifTool (r = read, w = write, c = create): File Types ------------+-------------+-------------+-------------+------------ 3FR r | DVB r/w | KEY r | ORF r/w | RWL r/w 3G2 r/w | DYLIB r | LA r | OTF r | RWZ r 3GP r/w | EIP r | LFP r | PAC r | RM r AA r | EPS r/w | LNK r | PAGES r | SEQ r AAX r/w | EPUB r | M2TS r | PBM r/w | SO r ACR r | ERF r/w | M4A/V r/w | PCD r | SR2 r/w AFM r | EXE r | MEF r/w | PDB r | SRF r AI r/w | EXIF r/w/c | MIE r/w/c | PDF r/w | SRW r/w AIFF r | EXR r | MIFF r | PEF r/w | SVG r APE r | EXV r/w/c | MKA r | PFA r | SWF r ARW r/w | F4A/V r/w | MKS r | PFB r | THM r/w ASF r | FFF r/w | MKV r | PFM r | TIFF r/w AVI r | FLA r | MNG r/w | PGF r | TORRENT r AZW r | FLAC r | MOBI r | PGM r/w | TTC r BMP r | FLV r | MODD r | PLIST r | TTF r BTF r | FPF r | MOI r | PICT r | VCF r CHM r | FPX r | MOS r/w | PMP r | VRD r/w/c COS r | GIF r/w | MOV r/w | PNG r/w | VSD r CR2 r/w | GZ r | MP3 r | PPM r/w | WAV r CRW r/w | HDP r/w | MP4 r/w | PPT r | WDP r/w CS1 r/w | HDR r | MPC r | PPTX r | WEBP r DCM r | HTML r | MPG r | PS r/w | WEBM r DCP r/w | ICC r/w/c | MPO r/w | PSB r/w | WMA r DCR r | ICS r | MQV r/w | PSD r/w | WMV r DFONT r | IDML r | MRW r/w | PSP r | WV r DIVX r | IIQ r/w | MXF r | QTIF r/w | X3F r/w DJVU r | IND r/w | NEF r/w | RA r | XCF r DLL r | INX r | NRW r/w | RAF r/w | XLS r DNG r/w | ITC r | NUMBERS r | RAM r | XLSX r DOC r | J2C r | ODP r | RAR r | XMP r/w/c DOCX r | JNG r/w | ODS r | RAW r/w | ZIP r DPX r | JP2 r/w | ODT r | RIFF r | DR4 r/w/c | JPEG r/w | OFR r | RSRC r | DSS r | K25 r | OGG r | RTF r | DV r | KDC r | OGV r | RW2 r/w | Meta Information ----------------------+----------------------+--------------------- EXIF r/w/c | CIFF r/w | Ricoh RMETA r GPS r/w/c | AFCP r/w | Picture Info r IPTC r/w/c | Kodak Meta r/w | Adobe APP14 r XMP r/w/c | FotoStation r/w | MPF r MakerNotes r/w/c | PhotoMechanic r/w | Stim r Photoshop IRB r/w/c | JPEG 2000 r | DPX r ICC Profile r/w/c | DICOM r | APE r MIE r/w/c | Flash r | Vorbis r JFIF r/w/c | FlashPix r | SPIFF r Ducky APP12 r/w/c | QuickTime r | DjVu r PDF r/w/c | Matroska r | M2TS r PNG r/w/c | MXF r | PE/COFF r Canon VRD r/w/c | PrintIM r | AVCHD r Nikon Capture r/w/c | FLAC r | ZIP r GeoTIFF r/w/c | ID3 r | (and more) =head1 OPTIONS Case is not significant for any command-line option (including tag and group names), except for single-character options when the corresponding upper-case option exists. Many single-character options have equivalent long-name versions (shown in brackets), and some options have inverses which are invoked with a leading double-dash. Unrecognized options are interpreted as tag names (for this reason, multiple single-character options may NOT be combined into one argument). Contrary to standard practice, options may appear after source file names on the exiftool command line. =head2 Option Summary L -TAG or --TAG Extract or exclude specified tag -TAG[+-]=[VALUE] Write new value for tag -TAG[+-]<=DATFILE Write tag value from contents of file -TAG[+-] -args (-argFormat) Format metadata as exiftool arguments -b (-binary) Output metadata in binary format -c FMT (-coordFormat) Set format for GPS coordinates -charset [[TYPE=]CHARSET] Specify encoding for special characters -csv[=CSVFILE] Export/import tags in CSV format -d FMT (-dateFormat) Set format for date/time values -D (-decimal) Show tag ID numbers in decimal -E, -ex (-escape(HTML|XML)) Escape values for HTML (-E) or XML (-ex) -f (-forcePrint) Force printing of all specified tags -g[NUM...] (-groupHeadings) Organize output by tag group -G[NUM...] (-groupNames) Print group name for each tag -h (-htmlFormat) Use HMTL formatting for output -H (-hex) Show tag ID number in hexadecimal -htmlDump[OFFSET] Generate HTML-format binary dump -j[=JSONFILE] (-json) Export/import tags in JSON format -l (-long) Use long 2-line output format -L (-latin) Use Windows Latin1 encoding -lang [LANG] Set current language -listItem INDEX Extract specific item from a list -n (--printConv) Read/write numerical tag values -p FMTFILE (-printFormat) Print output in specified format -php Export tags as a PHP Array -s[NUM] (-short) Short output format -S (-veryShort) Very short output format -sep STR (-separator) Set separator string for list items -sort Sort output alphabetically -struct Enable output of structured information -t (-tab) Output in tab-delimited list format -T (-table) Output in tabular format -v[NUM] (-verbose) Print verbose messages -w[+|!] EXT (-textOut) Write (or overwrite!) output text files -W[+|!] FMT (-tagOut) Write output text file for each tag -Wext EXT (-tagOutExt) Write only specified file types with -W -X (-xmlFormat) Use RDF/XML output format L -a (-duplicates) Allow duplicate tags to be extracted -e (--composite) Do not calculate composite tags -ee (-extractEmbedded) Extract information from embedded files -ext EXT (-extension) Process files with specified extension -F[OFFSET] (-fixBase) Fix the base for maker notes offsets -fast[NUM] Increase speed for slow devices -fileOrder [-]TAG Set file processing order -i DIR (-ignore) Ignore specified directory name -if EXPR Conditionally process files -m (-ignoreMinorErrors) Ignore minor errors and warnings -o OUTFILE (-out) Set output file or directory name -overwrite_original Overwrite original by renaming tmp file -overwrite_original_in_place Overwrite original by copying tmp file -P (-preserve) Preserve date/time of original file -password PASSWD Password for processing protected files -progress Show file progress count -q (-quiet) Quiet processing -r[.] (-recurse) Recursively process subdirectories -scanForXMP Brute force XMP scan -u (-unknown) Extract unknown tags -U (-unknown2) Extract unknown binary tags too -wm MODE (-writeMode) Set mode for writing/creating tags -z (-zip) Read/write compressed information L -@ ARGFILE Read command-line arguments from file -k (-pause) Pause before terminating -list[w|f|wf|g[NUM]|d|x] List various exiftool capabilities -ver Print exiftool version number L -geotag TRKFILE Geotag images from specified GPS log -globalTimeShift SHIFT Shift all formatted date/time values -use MODULE Add features from plug-in module L -delete_original[!] Delete "_original" backups -restore_original Restore from "_original" backups L -api OPT[=VAL] Set ExifTool API option -common_args Define common arguments -config CFGFILE Specify configuration file name -echo[NUM] TEXT Echo text to stdout or stderr -execute[NUM] Execute multiple commands on one line -srcfile FMT Set different source file name -stay_open FLAG Keep reading -@ argfile even after EOF -userParam PARAM[=VAL] Set user parameter (API UserParam opt) =head2 Option Details =head3 Tag operations =over 5 =item B<->I Extract information for the specified tag (eg. C<-CreateDate>). Multiple tags may be specified in a single command. A tag name is the handle by which a piece of information is referenced. See L for documentation on available tag names. A tag name may include leading group names separated by colons (eg. C<-EXIF:CreateDate>, or C<-Doc1:XMP:Creator>), and each group name may be prefixed by a digit to specify family number (eg. C<-1IPTC:City>). Use the B<-listg> option to list available group names by family. A special tag name of C may be used to indicate all meta information. This is particularly useful when a group name is specified to extract all information in a group (but beware that unless the B<-a> option is also used, some tags in the group may be suppressed by same-named tags in other groups). The wildcard characters C and C<*> may be used in a tag name to match any single character and zero or more characters respectively. These may not be used in a group name, with the exception that a group name of C<*> (or C) may be used to extract all instances of a tag (as if B<-a> was used). Note that arguments containing wildcards must be quoted on the command line of most systems to prevent shell globbing. A C<#> may be appended to the tag name to disable the print conversion on a per-tag basis (see the B<-n> option). This may also be used when writing or copying tags. If no tags are specified, all available information is extracted (as if C<-All> had been specified). Note: Descriptions, not tag names, are shown by default when extracting information. Use the B<-s> option to see the tag names instead. =item B<-->I Exclude specified tag from extracted information. Same as the B<-x> option. Group names and wildcards are permitted as described above for B<-TAG>. Once excluded from the output, a tag may not be re-included by a subsequent option. May also be used following a B<-tagsFromFile> option to exclude tags from being copied (when redirecting to another tag, it is the source tag that should be excluded), or to exclude groups from being deleted when deleting all information (eg. C<-all= --exif:all> deletes all but EXIF information). But note that this will not exclude individual tags from a group delete (unless a family 2 group is specified, see note 4 below). Instead, individual tags may be recovered using the B<-tagsFromFile> option (eg. C<-all= -tagsfromfile @ -artist>). =item B<->I[+-]B<=>[I] Write a new value for the specified tag (eg. C<-comment=wow>), or delete the tag if no I is given (eg. C<-comment=>). C<+=> and C<-=> are used to add or remove existing entries from a list, or to shift date/time values (see L for details). C<+=> may also be used to increment numerical values, and C<-=> may be used to conditionally delete or replace a tag (see L for examples). I may contain one or more leading family 0, 1 or 2 group names, prefixed by optional family numbers, and separated colons. If no group name is specified, the tag is created in the preferred group, and updated in any other location where a same-named tag already exists. The preferred group is the first group in the following list where I is valid: 1) EXIF, 2) IPTC, 3) XMP. The wildcards C<*> and C may be used in tag names to assign the same value to multiple tags. When specified with wildcards, "unsafe" tags are not written. A tag name of C is eqivalent to C<*> (except that it doesn't require quoting, while arguments with wildcards do on systems with shell globbing), and is often used when deleting all metadata (ie. C<-All=>) or an entire group (eg. C<-GROUP:All=>, see note 4 below). Note that not all groups are deletable, and that the JPEG APP14 "Adobe" group is not removed by default with C<-All=> because it may affect the appearance of the image. However, this will remove color space information, so the colors may be affected (but this may be avoided by copying back the tags defined by the ColorSpaceTags shortcut). Use the B<-listd> option for a complete list of deletable groups, and see note 5 below regarding the "APP" groups. Also, within an image some groups may be contained within others, and these groups are removed if the containing group is deleted: JPEG Image: - Deleting EXIF or IFD0 also deletes ExifIFD, GlobParamIFD, GPS, IFD1, InteropIFD, MakerNotes, PrintIM and SubIFD. - Deleting ExifIFD also deletes InteropIFD and MakerNotes. - Deleting Photoshop also deletes IPTC. TIFF Image: - Deleting EXIF only removes ExifIFD which also deletes InteropIFD and MakerNotes. Notes: 1) B. If two assignments affect the same tag, the latter takes precedence (except for list-type tags, for which both values are written). 2) In general, MakerNotes tags are considered "Permanent", and may be edited but not created or deleted individually. This avoids many potential problems, including the inevitable compatibility problems with OEM software which may be very inflexible about the information it expects to find in the maker notes. 3) Changes to PDF files are reversible because the original information is never actually deleted from the file. So ExifTool alone may not be used to securely edit metadata in PDF files. 4) Specifying C<-GROUP:all=> deletes the entire group as a block only if a single family 0 or 1 group is specified. Otherwise all deletable tags in the specified group(s) are removed individually, and in this case is it possible to exclude individual tags from a mass delete. For example, C<-time:all --Exif:Time:All> removes all deletable Time tags except those in the EXIF. This difference also applies if family 2 is specified when deleting all groups. For example, C<-2all:all=> deletes tags individually, while C<-all:all=> deletes entire blocks. 5) The "APP" group names ("APP0" through "APP15") are used to delete JPEG application segments which are not associated with another deletable group. For example, specifying C<-APP14:All=> will NOT delete the APP14 "Adobe" segment because this is accomplished with C<-Adobe:All>. Special feature: Integer values may be specified in hexadecimal with a leading C<0x>, and simple rational values may be specified as fractions. =item B<->IE=I or B<->IE=I Set the value of a tag from the contents of file I. The file name may also be given by a I string where %d, %f and %e represent the directory, file name and extension of the original I (see the B<-w> option for more details). Note that quotes are required around this argument to prevent shell redirection since it contains a C> symbol. If I/I is not provided, the effect is the same as C<-TAG=>, and the tag is simply deleted. C<+E=> or C<-E=> may also be used to add or delete specific list entries, or to shift date/time values. =item B<-tagsFromFile> I or I Copy tag values from I to I. Tag names on the command line after this option specify the tags to be copied, or excluded from the copy. Wildcards are permitted in these tag names. If no tags are specified, then all possible tags (see note 1 below) from the source file are copied to same-named tags in the preferred location of the output file (the same as specifying C<-all>). More than one B<-tagsFromFile> option may be used to copy tags from multiple files. By default, this option will update any existing and writable same-named tags in the output I, but will create new tags only in their preferred groups. This allows some information to be automatically transferred to the appropriate group when copying between images of different formats. However, if a group name is specified for a tag then the information is written only to this group (unless redirected to another group, see below). If C is used as a group name, then the specified tag(s) are written to the same family 1 group they had in the source file (ie. the same specific location, like ExifIFD or XMP-dc). For example, the common operation of copying all writable tags to the same specific locations in the output I is achieved by adding C<-all:all>. A different family may be specified by adding a leading family number to the group name (eg. C<-0all:all> preserves the same general location, like EXIF or XMP). I may be the same as I to move information around within a single file. In this case, C<@> may be used to represent the source file (ie. C<-tagsFromFile @>), permitting this feature to be used for batch processing multiple files. Specified tags are then copied from each file in turn as it is rewritten. For advanced batch use, the source file name may also be specified using a I string in which %d, %f and %e represent the directory, file name and extension of I. See B<-w> option for I string examples. A powerful redirection feature allows a destination tag to be specified for each copied tag. With this feature, information may be written to a tag with a different name or group. This is done using E'-IEI'E or E'-IEI'E on the command line after B<-tagsFromFile>, and causes the value of I to be copied from I and written to I in I. Note that this argument must be quoted to prevent shell redirection, and there is no C<=> sign as when assigning new values. Source and/or destination tags may be prefixed by a group name and/or suffixed by C<#>. Wildcards are allowed in both the source and destination tag names. A destination group and/or tag name of C or C<*> writes to the same family 1 group and/or tag name as the source. If no destination group is specified, the information is written to the preferred group. Whitespace around the C> or C> is ignored. As a convenience, C<-tagsFromFile @> is assumed for any redirected tags which are specified without a prior B<-tagsFromFile> option. Copied tags may also be added or deleted from a list with arguments of the form E'-I+EI'E or E'-I-EI'E. An extension of the redirection feature allows strings involving tag names to be used on the right hand side of the C> symbol with the syntax E'-IEI'E, where tag names in I are prefixed with a C<$> symbol. See the B<-p> option for more details about this syntax. Strings starting with a C<=> sign must insert a single space after the C> to avoid confusion with the C=> operator which sets the tag value from the contents of a file. A single space at the start of the string is removed if it exists, but all other whitespace in the string is preserved. See note 8 below about using shortcuts or wildcards with the redirection feature. See L for examples using B<-tagsFromFile>. Notes: 1) Some tags (generally tags which may affect the appearance of the image) are considered "unsafe" to write, and are only copied if specified explicitly (ie. no wildcards). See the L for more details about "unsafe" tags. 2) Be aware of the difference between excluding a tag from being copied (--I), and deleting a tag (-I=). Excluding a tag prevents it from being copied to the destination image, but deleting will remove a pre-existing tag from the image. 3) The maker note information is copied as a block, so it isn't affected like other information by subsequent tag assignments on the command line. Also, since the PreviewImage referenced from the maker notes may be rather large, it is not copied, and must be transferred separately if desired. 4) The order of operations is to copy all specified tags at the point of the B<-tagsFromFile> option in the command line. Any tag assignment to the right of the B<-tagsFromFile> option is made after all tags are copied. For example, new tag values are set in the order One, Two, Three then Four with this command: exiftool -One=1 -tagsFromFile s.jpg -Two -Four=4 -Three d.jpg This is significant in the case where an overlap exists between the copied and assigned tags because later operations may override earlier ones. 5) The normal behaviour of copied tags differs subtly from that of assigned tags for list-type tags. When copying to a list, each copied tag overrides any previous operations on the list. While this avoids duplicate list items when copying groups of tags from a file containing redundant information, it also prevents values of different tags from being copied into the same list when this is the intent. So a B<-addTagsFromFile> option is provided which allows copying of multiple tags into the same list. eg) exiftool -addtagsfromfile @ '-subject and B<-addTagsFromFile> options are equivalent. 6) The B<-a> option (allow duplicate tags) is always in effect when copying tags from I. 7) Structured tags are copied by default when copying tags. See the B<-struct> option for details. 8) With the redirection feature, copying a tag directly (ie. E'-IEI'E) is not the same as interpolating its value inside a string (ie. E'-IE$I'E) for L or tag names containing wildcards. When copying directly, the values of each matching source tag are copied individually to the destination tag (as if multiple redirection arguments were used). However, when interpolated inside a string, the values of shortcut tags are concatenated, and wildcards are not allowed. =item B<-x> I (B<-exclude>) Exclude the specified tag. There may be multiple B<-x> options. This has the same effect as --I on the command line. See the --I documentation above for a complete description. =back =head3 Input-output text formatting Note that trailing spaces are removed from extracted values for most output text formats. The exceptions are C<-b>, C<-csv>, C<-j> and C<-X>. =over 5 =item B<-args> (B<-argFormat>) Output information in the form of exiftool arguments, suitable for use with the B<-@> option when writing. May be combined with the B<-G> option to include group names. This feature may be used to effectively copy tags between images, but allows the metadata to be altered by editing the intermediate file (C in this example): exiftool -args -G1 --filename --directory src.jpg > out.args exiftool -@ out.args dst.jpg Note: Be careful when copying information with this technique since it is easy to write tags which are normally considered "unsafe". For instance, the FileName and Directory tags are excluded in the example above to avoid renaming and moving the destination file. Also note that the second command above will produce warning messages for any tags which are not writable. As well, the B<-sep> option should be used when reading back to maintain separate list items, and the B<-struct> option may be used when extracting to preserve structured XMP information. =item B<-b> (B<-binary>) Output requested metadata in binary format without tag names or descriptions. This option is mainly used for extracting embedded images or other binary data, but it may also be useful for some text strings since control characters (such as newlines) are not replaced by '.' as they are in the default output. List items are separated by a newline when extracted with the B<-b> option. May be combined with C<-j>, C<-php> or C<-X> to extract binary data in JSON, PHP or XML format. =item B<-c> I (B<-coordFormat>) Set the print format for GPS coordinates. I uses the same syntax as the C format string. The specifiers correspond to degrees, minutes and seconds in that order, but minutes and seconds are optional. For example, the following table gives the output for the same coordinate using various formats: FMT Output ------------------- ------------------ "%d deg %d' %.2f"\" 54 deg 59' 22.80" (default for reading) "%d %d %.8f" 54 59 22.80000000 (default for copying) "%d deg %.4f min" 54 deg 59.3800 min "%.6f degrees" 54.989667 degrees Notes: 1) To avoid loss of precision, the default coordinate format is different when copying tags using the B<-tagsFromFile> option. 2) If the hemisphere is known, a reference direction (N, S, E or W) is appended to each printed coordinate, but adding a C<+> to the format specifier (eg. C<%+.6f>) prints a signed coordinate instead. 3) This print formatting may be disabled with the B<-n> option to extract coordinates as signed decimal degrees. =item B<-charset> [[I=]I] If I is C or not specified, this option sets the ExifTool character encoding for output tag values when reading and input values when writing. The default ExifTool encoding is C. If no I is given, a list of available character sets is returned. Valid I values are: CHARSET Alias(es) Description ---------- --------------- ---------------------------------- UTF8 cp65001, UTF-8 UTF-8 characters (default) Latin cp1252, Latin1 Windows Latin1 (West European) Latin2 cp1250 Windows Latin2 (Central European) Cyrillic cp1251, Russian Windows Cyrillic Greek cp1253 Windows Greek Turkish cp1254 Windows Turkish Hebrew cp1255 Windows Hebrew Arabic cp1256 Windows Arabic Baltic cp1257 Windows Baltic Vietnam cp1258 Windows Vietnamese Thai cp874 Windows Thai MacRoman cp10000, Roman Macintosh Roman MacLatin2 cp10029 Macintosh Latin2 (Central Europe) MacCyrillic cp10007 Macintosh Cyrillic MacGreek cp10006 Macintosh Greek MacTurkish cp10081 Macintosh Turkish MacRomanian cp10010 Macintosh Romanian MacIceland cp10079 Macintosh Icelandic MacCroatian cp10082 Macintosh Croatian I may be C to specify the encoding of file names on the command line (ie. I arguments). In Windows, this triggers use of wide-character i/o routines, thus providing support for Unicode file names. See the L section below for details. Other values of I listed below are used to specify the internal encoding of various meta information formats. TYPE Description Default --------- ------------------------------------------- ------- EXIF Internal encoding of EXIF "ASCII" strings (none) ID3 Internal encoding of ID3v1 information Latin IPTC Internal IPTC encoding to assume when Latin IPTC:CodedCharacterSet is not defined Photoshop Internal encoding of Photoshop IRB strings Latin QuickTime Internal encoding of QuickTime strings MacRoman See L for more information about coded character sets. =item B<-csv>[=I] Export information in CSV format, or import information if I is specified. When importing, the CSV file must be in exactly the same format as the exported file. The first row of the I must be the ExifTool tag names (with optional group names) for each column of the file, and values must be separated by commas. A special "SourceFile" column specifies the files associated with each row of information (and a SourceFile of "*" may be used to define default tags to be imported for all files). The following examples demonstrate basic use of this option: # generate CSV file with common tags from all images in a directory exiftool -common -csv dir > out.csv # update metadata for all images in a directory from CSV file exiftool -csv=a.csv dir Empty values are ignored when importing. Also, FileName and Directory columns are ignored if they exist (ie. ExifTool will not attempt to write these tags with a CSV import). To force a tag to be deleted, use the B<-f> option and set the value to "-" in the CSV file (or to the MissingTagValue if this API option was used). Multiple databases may be imported in a single command. When exporting a CSV file, the B<-g> or B<-G> option to add group names to the tag headings. If the B<-a> option is used to allow duplicate tag names, the duplicate tags are only included in the CSV output if the column headings are unique. Adding the B<-G4> option ensures a unique column heading for each tag. When exporting specific tags, the CSV columns are arranged in the same order as the specified tags provided the column headings exactly match the specified tag names, otherwise the columns are sorted in alphabetical order. When importing from a CSV file, only files specified on the command line are processed. Any extra entries in the CSV file are ignored. List-type tags are stored as simple strings in a CSV file, but the B<-sep> option may be used to split them back into separate items when importing. Special feature: B<-csv>+=I may be used to add items to existing lists. This affects only list-type tags. Also applies to the B<-j> option. Note that this option is fundamentally different than all other output format options because it requires information from all input files to be buffered in memory before the output is written. This may result in excessive memory usage when processing a very large number of files with a single command. Also, it makes this option incompatible with the B<-w> option. =item B<-d> I (B<-dateFormat>) Set the format for date/time tag values. The specifics of the I syntax are system dependent -- consult the C man page on your system for details. The default format is equivalent to "%Y:%m:%d %H:%M:%S". This option has no effect on date-only or time-only tags and ignores timezone information if present. Only one B<-d> option may be used per command. The inverse operation (ie. un-formatting a date/time value) is currently not applied when writing a date/time tag. =item B<-D> (B<-decimal>) Show tag ID number in decimal when extracting information. =item B<-E>, B<-ex> (B<-escapeHTML>, B<-escapeXML>) Escape characters in output values for HTML (B<-E>) or XML (B<-ex>). For HTML, all characters with Unicode code points above U+007F are escaped as well as the following 5 characters: & (&) E<39> (') E (") E (>) and E (<). For XML, only these 5 characters are escaped. The B<-E> option is implied with B<-h>, and B<-ex> is implied with B<-X>. The inverse conversion is applied when writing tags. =item B<-f> (B<-forcePrint>) Force printing of tags even if their values are not found. This option only applies when specific tags are requested on the command line (ie. not with wildcards or by C<-all>). With this option, a dash (C<->) is printed for the value of any missing tag, but the dash may be changed via the API MissingTagValue option. May also be used to add a 'flags' attribute to the B<-listx> output, or to allow tags to be deleted when writing with the B<-csv>=I feature. =item B<-g>[I][:I...] (B<-groupHeadings>) Organize output by tag group. I specifies a group family number, and may be 0 (general location), 1 (specific location), 2 (category), 3 (document number) or 4 (instance number). Multiple families may be specified by separating them with colons. By default the resulting group name is simplified by removing any leading C and collapsing adjacent identical group names, but this can be avoided by placing a colon before the first family number (eg. B<-g:3:1>). If I is not specified, B<-g0> is assumed. Use the B<-listg> option to list group names for a specified family. =item B<-G>[I][:I...] (B<-groupNames>) Same as B<-g> but print group name for each tag. =item B<-h> (B<-htmlFormat>) Use HTML table formatting for output. Implies the B<-E> option. The formatting options B<-D>, B<-H>, B<-g>, B<-G>, B<-l> and B<-s> may be used in combination with B<-h> to influence the HTML format. =item B<-H> (B<-hex>) Show tag ID number in hexadecimal when extracting information. =item B<-htmlDump>[I] Generate a dynamic web page containing a hex dump of the EXIF information. This can be a very powerful tool for low-level analysis of EXIF information. The B<-htmlDump> option is also invoked if the B<-v> and B<-h> options are used together. The verbose level controls the maximum length of the blocks dumped. An I may be given to specify the base for displayed offsets. If not provided, the EXIF/TIFF base offset is used. Use B<-htmlDump0> for absolute offsets. Currently only EXIF/TIFF and JPEG information is dumped, but the -u option can be used to give a raw hex dump of other file formats. =item B<-j>[=I] (B<-json>) Use JSON (JavaScript Object Notation) formatting for console output, or import JSON file if I is specified. This option may be combined with B<-g> to organize the output into objects by group, or B<-G> to add group names to each tag. List-type tags with multiple items are output as JSON arrays unless B<-sep> is used. By default XMP structures are flattened into individual tags in the JSON output, but the original structure may be preserved with the B<-struct> option (this also causes all list-type XMP tags to be output as JSON arrays, otherwise single-item lists are output as simple strings). The B<-a> option is implied if the B<-g> or B<-G> options are used, otherwise it is ignored and duplicate tags are suppressed. Adding the B<-D> or B<-H> option changes tag values to JSON objects with "val" and "id" fields, and adding B<-l> adds a "desc" field, and a "num" field if the numerical value is different from the converted "val". The B<-b> option may be added to output binary data, encoded in base64 if necessary (indicated by "base64:" as the first 7 bytes of the value). The JSON output is UTF-8 regardless of any B<-L> or B<-charset> option setting, but the UTF-8 validation is disabled if a character set other than UTF-8 is specified. If I is specified, the file is imported and the tag definitions from the file are used to set tag values on a per-file basis. The special "SourceFile" entry in each JSON object associates the information with a specific target file. An object with a missing SourceFile or a SourceFile of "*" defines default tags for all target files. The imported JSON file must have the same format as the exported JSON files with the exception that the B<-g> option is not compatible with the import file format (use B<-G> instead). Additionally, tag names in the input JSON file may be suffixed with a C<#> to disable print conversion. Unlike CSV import, empty values are not ignored, and will cause an empty value to be written if supported by the specific metadata type. Tags are deleted by using the B<-f> option and setting the tag value to "-" (or to the MissingTagValue setting if this API option was used). Importing with B<-j>+=I causes new values to be added to existing lists. =item B<-l> (B<-long>) Use long 2-line Canon-style output format. Adds a description and unconverted value (if it is different from the converted value) to the XML, JSON or PHP output when B<-X>, B<-j> or B<-php> is used. May also be combined with B<-listf>, B<-listr> or B<-listwf> to add descriptions of the file types. =item B<-L> (B<-latin>) Use Windows Latin1 encoding (cp1252) for output tag values instead of the default UTF-8. When writing, B<-L> specifies that input text values are Latin1 instead of UTF-8. Equivalent to C<-charset latin>. =item B<-lang> [I] Set current language for tag descriptions and converted values. I is C, C, C, etc. Use B<-lang> with no other arguments to get a list of available languages. The default language is C if B<-lang> is not specified. Note that tag/group names are always English, independent of the B<-lang> setting, and translation of warning/error messages has not yet been implemented. May also be combined with B<-listx> to output descriptions in one language only. By default, ExifTool uses UTF-8 encoding for special characters, but the the B<-L> or B<-charset> option may be used to invoke other encodings. Currently, the language support is not complete, but users are welcome to help improve this by submitting their own translations. To submit a set of translations, first use the B<-listx> option and redirect the output to a file to generate an XML tag database, then add entries for other languages, zip this file, and email it to phil at owl.phy.queensu.ca for inclusion in ExifTool. =item B<-listItem> I For list-type tags, this causes only the item with the specified index to be extracted. I is 0 for the first item in the list. Negative indices may also be used to reference items from the end of the list. Has no effect on single-valued tags. Also applies to tag values when copying, and in B<-if> conditions. =item B<-n> (B<--printConv>) Read and write values as numbers instead of words. By default, extracted values are converted to a more human-readable format for printing, but the B<-n> option disables this print conversion for all tags. For example: > exiftool -Orientation -S a.jpg Orientation: Rotate 90 CW > exiftool -Orientation -S -n a.jpg Orientation: 6 The print conversion may also be disabled on a per-tag basis by suffixing the tag name with a C<#> character: > exiftool -Orientation# -Orientation -S a.jpg Orientation: 6 Orientation: Rotate 90 CW These techniques may also be used to disable the inverse print conversion when writing. For example, the following commands all have the same effect: > exiftool -Orientation='Rotate 90 CW' a.jpg > exiftool -Orientation=6 -n a.jpg > exiftool -Orientation#=6 a.jpg =item B<-p> I or I (B<-printFormat>) Print output in the format specified by the given file or string (and ignore other format options). Tag names in the format file or string begin with a C<$> symbol and may contain a leading group names and/or a trailing C<#>. Case is not significant. Braces C<{}> may be used around the tag name to separate it from subsequent text. Use C<$$> to represent a C<$> symbol, and C<$/> for a newline. Multiple B<-p> options may be used, each contributing a line of text to the output. Lines beginning with C<#[HEAD]> and C<#[TAIL]> are output only for the first and last processed files respectively. Lines beginning with C<#[BODY]> and lines not beginning with C<#> are output for each processed file. Other lines beginning with C<#> are ignored. For example, this format file: # this is a comment line #[HEAD]-- Generated by ExifTool $exifToolVersion -- File: $FileName - $DateTimeOriginal (f/$Aperture, ${ShutterSpeed}s, ISO $EXIF:ISO) #[TAIL]-- end -- with this command: exiftool -p test.fmt a.jpg b.jpg produces output like this: -- Generated by ExifTool 10.10 -- File: a.jpg - 2003:10:31 15:44:19 (f/5.6, 1/60s, ISO 100) File: b.jpg - 2006:05:23 11:57:38 (f/8.0, 1/13s, ISO 100) -- end -- When B<-ee> (B<-extractEmbedded>) is combined with B<-p>, embedded documents are effectively processed as separate input files. If a specified tag does not exist, a minor warning is issued and the line with the missing tag is not printed. However, the B<-f> option may be used to set the value of missing tags to '-' (but this may be configured via the MissingTagValue API option), or the B<-m> option may be used to ignore minor warnings and leave the missing values empty. An advanced formatting feature allows an arbitrary Perl expression to be applied to the value of any tag by placing it inside the braces after a semicolon following the tag name. The expression has access to the value of this tag through the default input variable (C<$_>), and the full API through the current ExifTool object (C<$self>). It may contain any valid Perl code, including translation (C) and substitution (C) operations, but note that braces within the expression must be balanced. The example below prints the camera Make with spaces translated to underlines, and multiple consecutive underlines replaced by a single underline: exiftool -p '${make;tr/ /_/;s/__+/_/g}' image.jpg A default expression of CE\0)()d> is assumed if the expression is empty. This removes the characters / \ ? * : | E E and null from the printed value. (These characters are illegal in Windows file names, so this feature is useful if tag values are used in file names.) =item B<-php> Format output as a PHP Array. The B<-g>, B<-G>, B<-D>, B<-H>, B<-l>, B<-sep> and B<-struct> options combine with B<-php>, and duplicate tags are handled in the same way as with the B<-json> option. As well, the B<-b> option may be added to output binary data. Here is a simple example showing how this could be used in a PHP script: =item B<-s>[I] (B<-short>) Short output format. Prints tag names instead of descriptions. Add I or up to 3 B<-s> options for even shorter formats: -s1 or -s - print tag names instead of descriptions -s2 or -s -s - no extra spaces to column-align values -s3 or -s -s -s - print values only (no tag names) Also effective when combined with B<-t>, B<-h>, B<-X> or B<-listx> options. =item B<-S> (B<-veryShort>) Very short format. The same as B<-s2> or two B<-s> options. Tag names are printed instead of descriptions, and no extra spaces are added to column-align values. =item B<-sep> I (B<-separator>) Specify separator string for items in list-type tags. When reading, the default is to join list items with ", ". When writing, this option causes values assigned to list-type tags to be split into individual items at each substring matching I (otherwise they are not split by default). Space characters in I match zero or more whitespace characters in the value. Note that an empty separator ("") is allowed, and will join items with no separator when reading, or split the value into individual characters when writing. =item B<-sort>, B<--sort> Sort output by tag description, or by tag name if the B<-s> option is used. When sorting by description, the sort order will depend on the B<-lang> option setting. Without the B<-sort> option, tags appear in the order they were specified on the command line, or if not specified, the order they were extracted from the file. By default, tags are organized by groups when combined with the B<-g> or B<-G> option, but this grouping may be disabled with B<--sort>. =item B<-struct>, B<--struct> Output structured XMP information instead of flattening to individual tags. This option works well when combined with the XML (B<-X>) and JSON (B<-j>) output formats. For other output formats, the structures are serialized into the same format as when writing structured information (see L for details). When copying, structured tags are copied by default unless B<--struct> is used to disable this feature (although flattened tags may still be copied by specifying them individually unless B<-struct> is used). These options have no effect when assigning new values since both flattened and structured tags may always be used when writing. =item B<-t> (B<-tab>) Output a tab-delimited list of description/values (useful for database import). May be combined with B<-s> to print tag names instead of descriptions, or B<-S> to print tag values only, tab-delimited on a single line. The B<-t> option may also be used to add tag table information to the B<-X> option output. =item B<-T> (B<-table>) Output tag values in table form. Equivalent to B<-t -S -q -f>. =item B<-v>[I] (B<-verbose>) Print verbose messages. I specifies the level of verbosity in the range 0-5, with higher numbers being more verbose. If I is not given, then each B<-v> option increases the level of verbosity by 1. With any level greater than 0, most other options are ignored and normal console output is suppressed unless specific tags are extracted. Using B<-v0> causes the console output buffer to be flushed after each line (which may be useful to avoid delays when piping exiftool output), and prints the name of each processed file when writing. Also see the B<-progress> option. =item B<-w>[+|!] I or I (B<-textOut>) Write console output to files with names ending in I, one for each source file. The output file name is obtained by replacing the source file extension (including the '.') with the specified extension (and a '.' is added to the start of I if it doesn't already contain one). Alternatively, a I string may be used to give more control over the output file name and directory. In the format string, %d, %f and %e represent the directory, filename and extension of the source file, and %c represents a copy number which is automatically incremented if the file already exists. %d includes the trailing '/' if necessary, but %e does not include the leading '.'. For example: -w %d%f.txt # same effect as "-w txt" -w dir/%f_%e.out # write files to "dir" as "FILE_EXT.out" -w dir2/%d%f.txt # write to "dir2", keeping dir structure -w a%c.txt # write to "a.txt" or "a1.txt" or "a2.txt"... Existing files will not be overwritten unless an exclamation point is added to the option name (ie. B<-w!> or B<-textOut!>), or a plus sign to append to the existing file (ie. B<-w+> or B<-textOut+>). Both may be used (ie. B<-w+!> or B<-textOut+!>) to overwrite output files that didn't exist before the command was run, and append the output from multiple source files. For example, to write one output file for all source files in each directory: exiftool -filename -createdate -T -w+! %d/out.txt -r DIR Notes: 1) In a Windows BAT file the C<%> character is represented by C<%%>, so an argument like C<%d%f.txt> is written as C<%%d%%f.txt>. 2) If the argument for B<-w> does not contain a format code (%d, %f or %e), then it is interpreted as a file extension. Therefore it is not possible to specify a simple filename as an argument, so creating a single output file from multiple source files is typically done by shell redirection, ie) exiftool FILE1 FILE2 ... > out.txt But if necessary, an empty format code may be used to force the argument to be interpreted as a format string, and the same result may be obtained without the use of shell redirection: exiftool -w+! %0fout.txt FILE1 FILE2 ... Advanced features: A substring of the original file name, directory or extension may be taken by specifying a field width immediately following the '%' character. If the width is negative, the substring is taken from the end. The substring position (characters to ignore at the start or end of the string) may be given by a second optional value after a decimal point. For example: Input File Name Format Specifier Output File Name ---------------- ---------------- ---------------- Picture-123.jpg %7f.txt Picture.txt Picture-123.jpg %-.4f.out Picture.out Picture-123.jpg %7f.%-3f Picture.123 Picture-123a.jpg Meta%-3.1f.txt Meta123.txt For %d, the field width/position specifiers may be applied to the directory levels instead of substring position by using a colon instead of a decimal point in the format specifier. For example: Source Dir Format Result Notes ------------ ------ ---------- ------------------ pics/2012/02 %2:d pics/2012/ take top 2 levels pics/2012/02 %-:1d pics/2012/ up one directory level pics/2012/02 %:1d 2012/02/ ignore top level pics/2012/02 %1:1d 2012/ take 1 level after top /Users/phil %:2d phil/ ignore top 2 levels (Note that the root directory counts as one level when an absolute path is used as in the last example above.) For %c, these modifiers have a different effects. If a field width is given, the copy number is padded with zeros to the specified width. A leading '-' adds a dash before the copy number, and a '+' adds an underline. By default, the copy number is omitted from the first file of a given name, but this can be changed by adding a decimal point to the modifier. For example: -w A%-cZ.txt # AZ.txt, A-1Z.txt, A-2Z.txt ... -w B%5c.txt # B.txt, B00001.txt, B00002.txt ... -w C%.c.txt # C0.txt, C1.txt, C2.txt ... -w D%-.c.txt # D-0.txt, D-1.txt, D-2.txt ... -w E%-.4c.txt # E-0000.txt, E-0001.txt, E-0002.txt ... -w F%-.4nc.txt # F-0001.txt, F-0002.txt, F-0003.txt ... -w G%+c.txt # G.txt, G_1.txt G_2.txt ... -w H%-lc.txt # H.txt, H-b.txt, H-c.txt ... -w I.%.3uc.txt # I.AAA.txt, I.AAB.txt, I.AAC.txt ... A special feature allows the copy number to be incremented for each processed file by using %C (upper case) instead of %c. This allows a sequential number to be added to output file names, even if the names are different. For %C, a copy number of zero is not omitted as it is with %c. The number before the decimal place gives the starting index, the number after the decimal place gives the field width. The following examples show the output filenames when used with the command C: -w %C%f.txt # 0rose.txt, 1star.txt, 2jet.txt -w %f-%10C.txt # rose-10.txt, star-11.txt, jet-12.txt -w %.3C-%f.txt # 000-rose.txt, 001-star.txt, 002-jet.txt -w %57.4C%f.txt # 0057rose.txt, 0058star.txt, 0059jet.txt All format codes may be modified by 'l' or 'u' to specify lower or upper case respectively (ie. C<%le> for a lower case file extension). When used to modify %c or %C, the numbers are changed to an alphabetical base (see example H above). Also, %c may be modified by 'n' to count using natural numbers starting from 1, instead of 0 (see example F above). This same I syntax is used with the B<-o> and B<-tagsFromFile> options, although %c is only valid for output file names. =item B<-W>[!|+] I (B<-tagOut>) This enhanced version of the B<-w> option allows a separate output file to be created for each extracted tag. The differences between B<-W> and B<-w> are as follows: 1) With B<-W>, a new output file is created for each extracted tag. 2) B<-W> supports three additional format codes: %t, %g and %s represent the tag name, group name, and suggested extension for the output file (based on the format of the data). The %g code may be followed by a single digit to specify the group family number (eg. %g1), otherwise family 0 is assumed. The substring width/position/case specifiers may be used with these format codes in exactly the same way as with %f and %e. 3) The argument for B<-W> is interpreted as a file name if it contains no format codes. (For B<-w>, this would be a file extension.) This change allows a simple file name to be specified, which, when combined with the append feature, provides a method to write metadata from multiple source files to a single output file without the need for shell redirection. 4) Adding the B<-v> option to B<-W> generates a list of the tags and output file names instead of giving a verbose dump of the entire file. (Unless appending all output to one file for each source file by using B<-W+> with an output file I that does not contain %t, $g or %s.) 5) Individual list items are stored in separate files when B<-W> is combined with B<-b>, but note that for separate files to be created %c must be used in I to give the files unique names. =item B<-Wext> I, B<--Wext> I (B<-tagOutExt>) This option is used to specify the type of output file(s) written by the B<-W> option. An output file is written only if the suggested extension matches I. Multiple B<-Wext> options may be used to write more than one type of file. Use B<--Wext> to write all but the specified type(s). =item B<-X> (B<-xmlFormat>) Use ExifTool-specific RDF/XML formatting for console output. Implies the B<-a> option, so duplicate tags are extracted. The formatting options B<-b>, B<-D>, B<-H>, B<-l>, B<-s>, B<-sep>, B<-struct> and B<-t> may be used in combination with B<-X> to affect the output, but note that the tag ID (B<-D>, B<-H> and B<-t>), binary data (B<-b>) and structured output (B<-struct>) options are not effective for the short output (B<-s>). Another restriction of B<-s> is that only one tag with a given group and name may appear in the output. Note that the tag ID options (B<-D>, B<-H> and B<-t>) will produce non-standard RDF/XML unless the B<-l> option is also used. By default, B<-X> outputs flattened tags, so B<-struct> should be added if required to preserve XMP structures. List-type tags with multiple values are formatted as an RDF Bag, but they are combined into a single string when B<-s> or B<-sep> is used. Using B<-L> changes the XML encoding from "UTF-8" to "windows-1252". Other B<-charset> settings change the encoding only if there is a corresponding standard XML character set. The B<-b> option causes binary data values to be written, encoded in base64 if necessary. The B<-t> option adds tag table information to the output (table C, decimal tag C, and C for cases where multiple conditional tags exist with the same ID). Note: This output is NOT the same as XMP because it uses dynamically-generated property names corresponding to the ExifTool tag names, and not the standard XMP properties. To write XMP instead, use the B<-o> option with an XMP extension for the output file. =back =head3 Processing control =over 5 =item B<-a>, B<--a> (B<-duplicates>, B<--duplicates>) Allow (B<-a>) or suppress (B<--a>) duplicate tag names to be extracted. By default, duplicate tags are suppressed unless the B<-ee> or B<-X> options are used or the Duplicates option is enabled in the configuration file. =item B<-e> (B<--composite>) Extract existing tags only -- don't calculate composite tags. =item B<-ee> (B<-extractEmbedded>) Extract information from embedded documents in EPS files, embedded EPS information and JPEG and Jpeg2000 images in PDF files, embedded MPF images in JPEG and MPO files, streaming metadata in AVCHD videos, and the resource fork of Mac OS files. Implies the B<-a> option. Use B<-g3> or B<-G3> to identify the originating document for extracted information. Embedded documents containing sub-documents are indicated with dashes in the family 3 group name. (eg. C is the 3rd sub-document of the 2nd embedded document.) Note that this option may increase processing time substantially, especially for PDF files with many embedded images. =item B<-ext> I, B<--ext> I (B<-extension>) Process only files with (B<-ext>) or without (B<--ext>) a specified extension. There may be multiple B<-ext> and B<--ext> options. Extensions may begin with a leading '.', and case is not significant. For example: exiftool -ext .JPG DIR # process only JPG files exiftool --ext cr2 --ext dng DIR # supported files but CR2/DNG exiftool --ext . DIR # ignore if no extension exiftool -ext "*" DIR # process all files exiftool -ext "*" --ext xml DIR # process all but XML files The extension may be C<"*"> as in the last two examples above to force processing files with any extension (not just supported files). Using this option has two main advantages over specifying C<*.I> on the command line: 1) It applies to files in subdirectories when combined with the B<-r> option. 2) The B<-ext> option is case-insensitive, which is useful when processing files on case-sensitive filesystems. =item B<-F>[I] (B<-fixBase>) Fix the base for maker notes offsets. A common problem with some image editors is that offsets in the maker notes are not adjusted properly when the file is modified. This may cause the wrong values to be extracted for some maker note entries when reading the edited file. This option allows an integer I to be specified for adjusting the maker notes base offset. If no I is given, ExifTool takes its best guess at the correct base. Note that exiftool will automatically fix the offsets for images which store original offset information (eg. newer Canon models). Offsets are fixed permanently if B<-F> is used when writing EXIF to an image. eg) exiftool -F -exif:resolutionunit=inches image.jpg =item B<-fast>[I] Increase speed of extracting information from JPEG images. With this option, ExifTool will not scan to the end of a JPEG image to check for an AFCP or PreviewImage trailer, or past the first comment in GIF images or the audio/video data in WAV/AVI files to search for additional metadata. These speed benefits are small when reading images directly from disk, but can be substantial if piping images through a network connection. For more substantial speed benefits, B<-fast2> also causes exiftool to avoid extracting any EXIF MakerNote information. B<-fast3> avoids processing the file entirely, and returns only an initial guess at FileType and the pseudo System tags. =item B<-fileOrder> [-]I Set file processing order according to the sorted value of the specified I. For example, to process files in order of date: exiftool -fileOrder DateTimeOriginal DIR Additional B<-fileOrder> options may be added for secondary sort keys. Numbers are sorted numerically, and all other values are sorted alphabetically. The sort order may be reversed by prefixing the tag name with a C<-> (eg. C<-fileOrder -createdate>). Print conversion of the sorted values is disabled with the B<-n> option, or a C<#> appended to the tag name. Other formatting options (eg. B<-d>) have no effect on the sorted values. Note that the B<-fileOrder> option has a large performance impact since it involves an additional processing pass of each file. =item B<-i> I (B<-ignore>) Ignore specified directory name. I may be either an individual folder name, or a full path. If a full path is specified, it must match the Directory tag exactly to be ignored. Use multiple B<-i> options to ignore more than one directory name. A special I value of C (case sensitive) may be specified to ignore symbolic links when the B<-r> option is used. =item B<-if> I Specify a condition to be evaluated before processing each I. I is a Perl-like logic expression containing tag names prefixed by C<$> symbols. It is evaluated with the tags from each I in turn, and the file is processed only if the expression returns true. Unlike Perl variable names, tag names are not case sensitive and may contain a hyphen. As well, tag names may have a leading group names separated by colons, and/or a trailing C<#> character to disable print conversion. The expression C<$GROUP:all> evaluates to 1 if any tag exists in the specified C, or 0 otherwise (see note 2 below). When multiple B<-if> options are used, all conditions must be satisfied to process the file. Returns an exit status of 1 if all files fail the condition. Below are a few examples: # extract shutterspeed from all Canon images in a directory exiftool -shutterspeed -if '$make eq "Canon"' dir # add one hour to all images created on or after Apr. 2, 2006 exiftool -alldates+=1 -if '$CreateDate ge "2006:04:02"' dir # set EXIF ISO value if possible, unless it is set already exiftool '-exif:iso and B<-b> options also apply to tags used in I. 2) Some binary data blocks are not extracted unless specified explicitly. These tags are not available for use in the B<-if> condition unless they are also specified on the command line. The alternative is to use the C<$GROUP:all> syntax. (eg. Use C<$exif:all> instead of C<$exif> in I to test for the existence of EXIF tags.) 3) Tags in the string are interpolated the same way as with B<-p> before the expression is evaluated. In this interpolation, C<$/> is converted to a newline and C<$$> represents a single C<$> symbol (so Perl variables, if used, require a double C<$>). 4) The condition may only test tags from the file being processed. To process one file based on tags from another, two steps are required. For example, to process XMP sidecar files in directory C based on tags from the associated NEF: exiftool -if EXPR -p '$directory/$filename' -ext nef DIR > nef.txt exiftool -@ nef.txt -srcfile %d%f.xmp ... 5) The B<-a> option has no effect on the evaluation of the expression, and the values of duplicate tags are accessible only by specifying a group name (such as a family 4 instance number, eg. C<$Copy1:TAG>, C<$Copy2:TAG>, etc). =item B<-m> (B<-ignoreMinorErrors>) Ignore minor errors and warnings. This enables writing to files with minor errors and disables some validation checks which could result in minor warnings. Generally, minor errors/warnings indicate a problem which usually won't result in loss of metadata if ignored. However, there are exceptions, so ExifTool leaves it up to you to make the final decision. Minor errors and warnings are indicated by "[minor]" at the start of the message. Warnings which affect processing when ignored are indicated by "[Minor]" (with a capital "M"). =item B<-o> I or I (B<-out>) Set the output file or directory name when writing information. Without this option, when any "real" tags are written the original file is renamed to C and output is written to I. When writing only FileName and/or Directory "pseudo" tags, B<-o> causes the file to be copied instead of moved, but directories specified for either of these tags take precedence over that specified by the B<-o> option. I may be C<-> to write to stdout. The output file name may also be specified using a I string in which %d, %f and %e represent the directory, file name and extension of I. Also, %c may be used to add a copy number. See the B<-w> option for I string examples. The output file is taken to be a directory name if it already exists as a directory or if the name ends with '/'. Output directories are created if necessary. Existing files will not be overwritten. Combining the B<-overwrite_original> option with B<-o> causes the original source file to be erased after the output file is successfully written. A special feature of this option allows the creation of certain types of files from scratch, or with the metadata from another type of file. The following file types may be created using this technique: XMP, ICC/ICM, MIE, VRD, DR4, EXIF, EXV The output file type is determined by the extension of I (specified as C<-.EXT> when writing to stdout). The output file is then created from a combination of information in I (as if the B<-tagsFromFile> option was used), and tag values assigned on the command line. If no I is specified, the output file may be created from scratch using only tags assigned on the command line. =item B<-overwrite_original> Overwrite the original I (instead of preserving it by adding C<_original> to the file name) when writing information to an image. Caution: This option should only be used if you already have separate backup copies of your image files. The overwrite is implemented by renaming a temporary file to replace the original. This deletes the original file and replaces it with the edited version in a single operation. When combined with B<-o>, this option causes the original file to be deleted if the output file was successfully written (ie. the file is moved instead of copied). =item B<-overwrite_original_in_place> Similar to B<-overwrite_original> except that an extra step is added to allow the original file attributes to be preserved. For example, on a Mac this causes the original file creation date, type, creator, label color, icon, Finder tags and hard links to the file to be preserved (but note that the Mac OS resource fork is always preserved unless specifically deleted with C<-rsrc:all=>). This is implemented by opening the original file in update mode and replacing its data with a copy of a temporary file before deleting the temporary. The extra step results in slower performance, so the B<-overwrite_original> option should be used instead unless necessary. =item B<-P> (B<-preserve>) Preserve the filesystem modification date/time of the original file (C) when writing. Note that some filesystems store a creation date (C) which is not affected by this option. This creation date is preserved only on Windows systems where Win32API::File and Win32::API are available. For other systems, the B<-overwrite_original_in_place> option may be used if necessary to preserve the creation date. This option is superseded by writing FileModifyDate (and FileCreateDate) manually. =item B<-password> I Specify password to allow processing of password-protected PDF documents. If a password is required but not given, a warning is issued and the document is not processed. Ignored if a password is not required. =item B<-progress> Show file progress count in messages. The progress count appears in brackets after the name of each processed file, and gives the current file number and the total number of files to be processed. Implies the B<-v0> option, which prints the name of each processed file when writing. When combined with the B<-if> option, the total count includes all files before the condition is applied, but files that fail the condition will not have their names printed. =item B<-q> (B<-quiet>) Quiet processing. One B<-q> suppresses normal informational messages, and a second B<-q> suppresses warnings as well. Error messages can not be suppressed, although minor errors may be downgraded to warnings with the B<-m> option, which may then be suppressed with C<-q -q>. =item B<-r>[.] (B<-recurse>) Recursively process files in subdirectories. Only meaningful if I is a directory name. Subdirectories with names beginning with "." are not processed unless "." is added to the option name (ie. B<-r.> or B<-recurse.>). By default, exiftool will also follow symbolic links to directories if supported by the system, but this may be disabled with C<-i SYMLINKS> (see the B<-i> option for details). =item B<-scanForXMP> Scan all files (even unsupported formats) for XMP information unless found already. When combined with the B<-fast> option, only unsupported file types are scanned. Warning: It can be time consuming to scan large files. =item B<-u> (B<-unknown>) Extract values of unknown tags. Add another B<-u> to also extract unknown information from binary data blocks. This option applies to tags with numerical tag ID's, and causes tag names like "Exif_0xc5d9" to be generated for unknown information. It has no effect on information types which have human-readable tag ID's (such as XMP), since unknown tags are extracted automatically from these formats. =item B<-U> (B<-unknown2>) Extract values of unknown tags as well as unknown information from some binary data blocks. This is the same as two B<-u> options. =item B<-wm> I (B<-writeMode>) Set mode for writing/creating tags. I is a string of one or more characters from the list below. Write mode is C unless otherwise specified. w - Write existing tags c - Create new tags g - create new Groups as necessary For example, use C<-wm cg> to only create new tags (and avoid editing existing ones). The level of the group is the SubDirectory level in the metadata structure. For XMP or IPTC this is the full XMP/IPTC block (the family 0 group), but for EXIF this is the individual IFD (the family 1 group). =item B<-z> (B<-zip>) When reading, causes information to be extracted from .gz and .bz2 compressed images. (Only one image per archive. Requires gzip and bzip2 to be installed on the system.) When writing, causes compressed information to be written if supported by the metadata format. (eg. PNG supports compressed textual metadata.) This option also disables the recommended padding in embedded XMP, saving 2424 bytes when writing XMP in a file. =back =head3 Other options =over 5 =item B<-@> I Read command-line arguments from the specified file. The file contains one argument per line (NOT one option per line -- some options require additional arguments, and all arguments must be placed on separate lines). Blank lines and lines beginning with C<#> and are ignored. Normal shell processing of arguments is not performed, which among other things means that arguments should not be quoted and spaces are treated as any other character. I may exist relative to either the current directory or the exiftool directory unless an absolute pathname is given. For example, the following I will set the value of Copyright to "Copyright YYYY, Phil Harvey", where "YYYY" is the year of CreateDate: -d %Y -copyright (B<-pause>) Pause with the message C<-- press any key --> or C<-- press RETURN --> (depending on your system) before terminating. This option is used to prevent the command window from closing when run as a Windows drag and drop application. =item B<-list>, B<-listw>, B<-listf>, B<-listr>, B<-listwf>, B<-listg>[I], B<-listd>, B<-listx> Print a list of all valid tag names (B<-list>), all writable tag names (B<-listw>), all supported file extensions (B<-listf>), all recognized file extensions (B<-listr>), all writable file extensions (B<-listwf>), all tag groups [in a specified family] (B<-listg>[I]), all deletable tag groups (B<-listd>), or an XML database of tag details including language translations (B<-listx>). The B<-list>, B<-listw> and B<-listx> options may be followed by an additional argument of the form C<-GROUP:All> to list only tags in a specific group, where C is one or more family 0-2 group names (excepting EXIF IFD groups) separated by colons. With B<-listg>, I may be given to specify the group family, otherwise family 0 is assumed. The B<-l> option may be combined with B<-listf>, B<-listr> or B<-listwf> to add file descriptions to the list. The B<-lang> option may be combined with B<-listx> to output descriptions in a single language. Here are some examples: -list # list all tag names -list -EXIF:All # list all EXIF tags -list -xmp:time:all # list all XMP tags relating to time -listw -XMP-dc:All # list all writable XMP-dc tags -listf # list all supported file extensions -listr # list all recognized file extensions -listwf # list all writable file extensions -listg1 # list all groups in family 1 -listd # list all deletable groups -listx -EXIF:All # list database of EXIF tags in XML format -listx -XMP:All -s # list short XML database of XMP tags When combined with B<-listx>, the B<-s> option shortens the output by omitting the descriptions and values (as in the last example above), and B<-f> adds a 'flags' attribute if applicable. The flags are formatted as a comma-separated list of the following possible values: Avoid, Binary, List, Mandatory, Permanent, Protected, Unknown and Unsafe (see the L). For XMP List tags, the list type (Alt, Bag or Seq) is added to the flags, and flattened structure tags are indicated by a Flattened flag. Note that none of the B<-list> options require an input I. =item B<-ver> Print exiftool version number. =back =head3 Special features =over 5 =item B<-geotag> I Geotag images from the specified GPS track log file. Using the B<-geotag> option is equivalent to writing a value to the C tag. After the B<-geotag> option has been specified, the value of the C tag is written to define a date/time for the position interpolation. If C is not specified, the value is copied from C. For example, the following two commands are equivalent: exiftool -geotag track.log image.jpg exiftool -geotag "-Geotime value is converted to UTC, the local system timezone is assumed unless the date/time value contains a timezone. Writing C causes the following tags to be written (provided they can be calculated from the track log, and they are supported by the destination metadata format): GPSLatitude, GPSLatitudeRef, GPSLongitude, GPSLongitudeRef, GPSAltitude, GPSAltitudeRef, GPSDateStamp, GPSTimeStamp, GPSDateTime, GPSTrack, GPSTrackRef, GPSSpeed, GPSSpeedRef, GPSImgDirection, GPSImgDirectionRef, GPSPitch and GPSRoll. By default, tags are created in EXIF, and updated in XMP only if they already exist. However, C or C may be specified to write only EXIF or XMP tags respectively. Note that GPSPitch and GPSRoll are non-standard, and require user-defined tags in order to be written. The C tag may be used to specify a time correction which is applied to each C value for synchronization with GPS time. For example, the following command compensates for image times which are 1 minute and 20 seconds behind GPS: exiftool -geosync=+1:20 -geotag a.log DIR C must be set before C (if specified) to be effective. Advanced C features allow a linear time drift correction and synchronization from previously geotagged images. See "geotag.html" in the full ExifTool distribution for more information. Multiple B<-geotag> options may be used to concatinate GPS track log data. Also, a single B<-geotag> option may be used to load multiple track log files by using wildcards in the I name, but note that in this case I must be quoted on most systems (with the notable exception of Windows) to prevent filename expansion. For example: exiftool -geotag "TRACKDIR/*.log" IMAGEDIR Currently supported track file formats are GPX, NMEA RMC/GGA/GLL, KML, IGC, Garmin XML and TCX, Magellan PMGNTRK, Honeywell PTNTHPR, Winplus Beacon text, and Bramor gEO log files. See L for examples. Also see "geotag.html" in the full ExifTool distribution and the L for more details and for information about geotag configuration options. =item B<-globalTimeShift> I Shift all formatted date/time values by the specified amount when reading. Does not apply to unformatted (B<-n>) output. I takes the same form as the date/time shift when writing (see L for details), with a negative shift being indicated with a minus sign (C<->) at the start of the I string. For example: # return all date/times, shifted back by 1 hour exiftool -globalTimeShift -1 -time:all a.jpg # set the file name from the shifted CreateDate (-1 day) for # all images in a directory exiftool "-filename I Add features from specified plug-in I. Currently, the MWG module is the only plug-in module distributed with exiftool. This module adds read/write support for tags as recommended by the Metadata Working Group. To save typing, C<-use MWG> is assumed if the C group is specified for any tag on the command line. See the L for more details. Note that this option is not reversible, and remains in effect until the application terminates, even across the C<-execute> option. =back =head3 Utilities =over 5 =item B<-restore_original> =item B<-delete_original>[!] These utility options automate the maintenance of the C<_original> files created by exiftool. They have no effect on files without an C<_original> copy. The B<-restore_original> option restores the specified files from their original copies by renaming the C<_original> files to replace the edited versions. For example, the following command restores the originals of all JPG images in directory C: exiftool -restore_original -ext jpg DIR The B<-delete_original> option deletes the C<_original> copies of all files specified on the command line. Without a trailing C this option prompts for confirmation before continuing. For example, the following command deletes C if it exists, after asking "Are you sure?": exiftool -delete_original a.jpg These options may not be used with other options to read or write tag values in the same command, but may be combined with options such B<-ext>, B<-if>, B<-r>, B<-q> and B<-v>. =back =head3 Advanced options Among other things, the advanced options allow complex processing to be performed from a single command without the need for additional scripting. This may be particularly useful for implementations such as Windows drag-and-drop applications. These options may also be used to improve performance in multi-pass processing by reducing the overhead required to load exiftool for each invocation. =over 5 =item B<-api> I Set ExifTool API option. I is an API option name. The option value is set to 1 if I<=VAL> is omitted, or undef if just I is omitted. An option may not be set to an empty string ("") via the command line, but the config file may be used to accomplish this if necessary. See L for a list of available API options. This overrides API options set via the config file. =item B<-common_args> Specifies that all arguments following this option are common to all executed commands when B<-execute> is used. This and the B<-config> option are the only options that may not be used inside a B<-@> I. Note that by definition this option and its arguments MUST come after all other options on the command line. =item B<-config> I Load specified configuration file instead of the default ".ExifTool_config". If used, this option must come before all other arguments on the command line. The I name may contain a directory specification (otherwise the file must exist in the current directory), or may be set to an empty string ("") to disable loading of the config file. See the sample configuration file and "config.html" in the full ExifTool distribution for more information about the ExifTool configuration file. =item B<-echo>[I] I Echo text to stdout (B<-echo> or B<-echo1>) or stderr (B<-echo2>). Text is output as the command line is parsed, before the processing of any input files. I may also be 3 or 4 to output text (to stdout or stderr respectively) after processing is complete. =item B<-execute>[I] Execute command for all arguments up to this point on the command line (plus any arguments specified by B<-common_args>). Allows multiple commands to be executed from a single command line. I is an optional number that is echoed in the "{ready}" message when using the B<-stay_open> feature. =item B<-srcfile> I Specify a different source file to be processed based on the name of the original I. This may be useful in some special situations for processing related preview images or sidecar files. See the B<-w> option for a description of the I syntax. Note that file name I strings for all options are based on the original I specified from the command line, not the name of the source file specified by B<-srcfile>. For example, to copy metadata from NEF files to the corresponding JPG previews in a directory where other JPG images may exist: exiftool -ext nef -tagsfromfile @ -srcfile %d%f.jpg dir If than one B<-srcfile> option is specified, the files are tested in order and the first existing source file is processed. If none of the source files already exist, then exiftool uses the first B<-srcfile> specified. A I of C<@> may be used to represent the original I, which may be useful when specifying multiple B<-srcfile> options (eg. to fall back to processing the original I if no sidecar exists). =item B<-stay_open> I If I is C<1> or C, causes exiftool keep reading from the B<-@> I even after reaching the end of file. This feature allows calling applications to pre-load exiftool, thus avoiding the overhead of loading exiftool for each command. The procedure is as follows: 1) Execute C>, where I is the name of an existing (possibly empty) argument file or C<-> to pipe arguments from the standard input. 2) Write exiftool command-line arguments to I, one argument per line (see the B<-@> option for details). 3) Write C<-execute\n> to I, where C<\n> represents a newline sequence. (Note: You may need to flush your write buffers here if using buffered output.) Exiftool will then execute the command with the arguments received up to this point, send a "{ready}" message to stdout when done (unless the B<-q> or B<-T> option is used), and continue trying to read arguments for the next command from I. To aid in command/response synchronization, any number appended to the C<-execute> option is echoed in the "{ready}" message. For example, C<-execute613> results in "{ready613}". 4) Repeat steps 2 and 3 for each command. 5) Write C<-stay_open\nFalse\n> to I when done. This will cause exiftool to process any remaining command-line arguments then exit normally. The input I may be changed at any time before step 5 above by writing the following lines to the currently open I: -stay_open True -@ NEWARGFILE This causes I to be closed, and I to be kept open. (Without the B<-stay_open> here, exiftool would have returned to reading arguments from I after reaching the end of I.) Note: When writing arguments to a disk file there is a delay of up to 0.01 seconds after writing C<-execute\n> before exiftool starts processing the command. This delay may be avoided by sending a CONT signal to the exiftool process immediately after writing C<-execute\n>. (There is no associated delay when writing arguments via a pipe with C<-@ ->, so the signal is not necessary when using this technique.) =item B<-userParam> I Set user parameter. I is an arbitrary user parameter name. This is an interface to the API UserParam option (see the L documentation), and provides a method to access user-defined parameters from inside tag name expressions (as if it were any other tag, see example below), and from PrintConv/ValueConv logic (via the ExifTool Options function). Similar to the B<-api> option, the parameter value is set to 1 if I<=VAL> is omitted, or undef if just I is omitted. exiftool -p '$test from $filename' -userparam test=Hello FILE =back =head1 WINDOWS UNICODE FILE NAMES In Windows, by default, file and directory names are specified on the command line (or in arg files) using the system code page, which varies with the system settings. Unfortunately, these code pages are not complete character sets, so not all file names may be represented. ExifTool 9.79 and later allow the file name encoding to be specified with C<-charset filename=CHARSET>, where C is the name of a valid ExifTool character set, preferably C (see the B<-charset> option for a complete list). Setting this triggers the use of Windows wide-character i/o routines, thus providing support for all Unicode file names. But note that it is not trivial to pass properly encoded file names on the Windows command line (see L for details), so placing them in a UTF-8 encoded B<-@> argfile is recommended if possible. When a directory name is provided, the file name encoding need not be specified (unless the directory name contains special characters), and ExifTool will automatically use wide-character routines to scan the directory. The filename character set applies to the I arguments as well as filename arguments of B<-@>, B<-geotag>, B<-o>, B<-p>, B<-srcfile>, B<-tagsFromFile>, B<-csv>=, B<-j>= and B<->IE=. However, it does not apply to the B<-config> filename, which always uses the system character set. The C<-charset filename=> option must come before the B<-@> option to be effective, but the order doesn't matter with respect to other options. Notes: 1) FileName and Directory tag values still use the same encoding as other tag values, and are converted to/from the filename character set when writing/reading if specified. 2) Unicode support is not yet implemented for other Windows-based systems like Cygwin. 3) See L below for a note about editing read-only files with Unicode names. =head1 WRITING READ-ONLY FILES In general, ExifTool may be used to write metadata to read-only files provided that the user has write permission in the directory. However, there are two cases where file write permission is also required: 1) When using the B<-overwrite_original_in_place> option. 2) On Windows if the file has Unicode characters in its name, and a) the B<-overwrite_original> option is used, or b) the C<_original> backup already exists. =head1 READING EXAMPLES B: Beware when cutting and pasting these examples into your terminal! Some characters such as single and double quotes and hyphens may have been changed into similar-looking yet functionally-different characters by the text formatter used to display this documentation. Also note that Windows users must use double quotes instead of single quotes as below around arguments containing special characters. =over 5 =item exiftool -a -u -g1 a.jpg Print all meta information in an image, including duplicate and unknown tags, sorted by group (for family 1). =item exiftool -common dir Print common meta information for all images in C. C<-common> is a L representing common EXIF meta information. =item exiftool -T -createdate -aperture -shutterspeed -iso dir > out.txt List specified meta information in tab-delimited column form for all images in C to an output text file named "out.txt". =item exiftool -s -ImageSize -ExposureTime b.jpg Print ImageSize and ExposureTime tag names and values. =item exiftool -l -canon c.jpg d.jpg Print standard Canon information from two image files. =item exiftool -r -w .txt -common pictures Recursively extract common meta information from files in C directory, writing text output to C<.txt> files with the same names. =item exiftool -b -ThumbnailImage image.jpg > thumbnail.jpg Save thumbnail image from C to a file called C. =item exiftool -b -JpgFromRaw -w _JFR.JPG -ext NEF -r . Recursively extract JPG image from all Nikon NEF files in the current directory, adding C<_JFR.JPG> for the name of the output JPG files. =item exiftool -a -b -W %d%f_%t%-c.%s -preview:all dir Extract all types of preview images (ThumbnailImage, PreviewImage, JpgFromRaw, etc.) from files in directory "dir", adding the tag name to the output preview image file names. =item exiftool -d '%r %a, %B %e, %Y' -DateTimeOriginal -S -s -ext jpg . Print formatted date/time for all JPG files in the current directory. =item exiftool -IFD1:XResolution -IFD1:YResolution image.jpg Extract image resolution from EXIF IFD1 information (thumbnail image IFD). =item exiftool '-*resolution*' image.jpg Extract all tags with names containing the word "Resolution" from an image. =item exiftool -xmp:author:all -a image.jpg Extract all author-related XMP information from an image. =item exiftool -xmp -b a.jpg > out.xmp Extract complete XMP data record intact from C and write it to C using the special C tag (see the Extra tags in L<Image::ExifTool::TagNames|Image::ExifTool::TagNames>). =item exiftool -p '$filename has date $dateTimeOriginal' -q -f dir Print one line of output containing the file name and DateTimeOriginal for each image in directory C<dir>. =item exiftool -ee -p '$gpslatitude, $gpslongitude, $gpstimestamp' a.m2ts Extract all GPS positions from an AVCHD video. =item exiftool -icc_profile -b -w icc image.jpg Save complete ICC_Profile from an image to an output file with the same name and an extension of C<.icc>. =item exiftool -htmldump -w tmp/%f_%e.html t/images Generate HTML pages from a hex dump of EXIF information in all images from the C<t/images> directory. The output HTML files are written to the C<tmp> directory (which is created if it didn't exist), with names of the form 'FILENAME_EXT.html'. =item exiftool -a -b -ee -embeddedimage -W Image_%.3g3.%s file.pdf Extract embedded JPG and JP2 images from a PDF file. The output images will have file names like "Image_#.jpg" or "Image_#.jp2", where "#" is the ExifTool family 3 embedded document number for the image. =back =head1 WRITING EXAMPLES Note that quotes are necessary around arguments which contain certain special characters such as C<E<gt>>, C<E<lt>> or any white space. These quoting techniques are shell dependent, but the examples below will work for most Unix shells. With the Windows cmd shell however, double quotes should be used (eg. -Comment=E<34>This is a new commentE<34>). =over 5 =item exiftool -Comment='This is a new comment' dst.jpg Write new comment to a JPG image (replaces any existing comment). =item exiftool -comment= -o newdir -ext jpg . Remove comment from all JPG images in the current directory, writing the modified images to a new directory. =item exiftool -keywords=EXIF -keywords=editor dst.jpg Replace existing keyword list with two new keywords (C<EXIF> and C<editor>). =item exiftool -Keywords+=word -o newfile.jpg src.jpg Copy a source image to a new file, and add a keyword (C<word>) to the current list of keywords. =item exiftool -exposurecompensation+=-0.5 a.jpg Decrement the value of ExposureCompensation by 0.5 EV. Note that += with a negative value is used for decrementing because the -= operator is used for conditional deletion (see next example). =item exiftool -credit-=xxx dir Delete Credit information from all files in a directory where the Credit value was C<xxx>. =item exiftool -xmp:description-de='k&uuml;hl' -E dst.jpg Write alternate language for XMP:Description, using HTML character escaping to input special characters. =item exiftool -all= dst.jpg Delete all meta information from an image. Note: You should NOT do this to RAW images (except DNG) since proprietary RAW image formats often contain information in the makernotes that is necessary for converting the image. =item exiftool -all= -comment='lonely' dst.jpg Delete all meta information from an image and add a comment back in. (Note that the order is important: C<-comment='lonely' -all=> would also delete the new comment.) =item exiftool -all= --jfif:all dst.jpg Delete all meta information except JFIF group from an image. =item exiftool -Photoshop:All= dst.jpg Delete Photoshop meta information from an image (note that the Photoshop information also includes IPTC). =item exiftool -r -XMP-crss:all= DIR Recursively delete all XMP-crss information from images in a directory. =item exiftool '-ThumbnailImageE<lt>=thumb.jpg' dst.jpg Set the thumbnail image from specified file (Note: The quotes are necessary to prevent shell redirection). =item exiftool '-JpgFromRawE<lt>=%d%f_JFR.JPG' -ext NEF -r . Recursively write JPEG images with filenames ending in C<_JFR.JPG> to the JpgFromRaw tag of like-named files with extension C<.NEF> in the current directory. (This is the inverse of the C<-JpgFromRaw> command of the L</READING EXAMPLES> section above.) =item exiftool -DateTimeOriginal-='0:0:0 1:30:0' dir Adjust original date/time of all images in directory C<dir> by subtracting one hour and 30 minutes. (This is equivalent to C<-DateTimeOriginal-=1.5>. See L<Image::ExifTool::Shift.pl|Image::ExifTool::Shift.pl> for details.) =item exiftool -createdate+=3 -modifydate+=3 a.jpg b.jpg Add 3 hours to the CreateDate and ModifyDate timestamps of two images. =item exiftool -AllDates+=1:30 -if '$make eq E<34>CanonE<34>' dir Shift the values of DateTimeOriginal, CreateDate and ModifyDate forward by 1 hour and 30 minutes for all Canon images in a directory. (The AllDates tag is provided as a shortcut for these three tags, allowing them to be accessed via a single tag.) =item exiftool -xmp:city=Kingston image1.jpg image2.nef Write a tag to the XMP group of two images. (Without the C<xmp:> this tag would get written to the IPTC group since C<City> exists in both, and IPTC is preferred by default.) =item exiftool -LightSource-='Unknown (0)' dst.tiff Delete C<LightSource> tag only if it is unknown with a value of 0. =item exiftool -whitebalance-=auto -WhiteBalance=tung dst.jpg Set C<WhiteBalance> to C<Tungsten> only if it was previously C<Auto>. =item exiftool -comment-= -comment='new comment' a.jpg Write a new comment only if the image doesn't have one already. =item exiftool -o %d%f.xmp dir Create XMP meta information data files for all images in C<dir>. =item exiftool -o test.xmp -owner=Phil -title='XMP File' Create an XMP data file only from tags defined on the command line. =item exiftool '-ICC_Profile<=%d%f.icc' image.jpg Write ICC_Profile to an image from a C<.icc> file of the same name. =item exiftool -hierarchicalkeywords='{keyword=one,children={keyword=B}}' Write structured XMP information. See L<http://owl.phy.queensu.ca/~phil/exiftool/struct.html> for more details. =item exiftool -trailer:all= image.jpg Delete any trailer found after the end of image (EOI) in a JPEG file. A number of digital cameras store a large PreviewImage after the JPEG EOI, and the file size may be reduced significantly by deleting this trailer. See the L<JPEG Tags documentation|Image::ExifTool::TagNames/JPEG Tags> for a list of recognized JPEG trailers. =back =head1 COPYING EXAMPLES These examples demonstrate the ability to copy tag values between files. =over 5 =item exiftool -tagsFromFile src.cr2 dst.jpg Copy the values of all writable tags from C<src.cr2> to C<dst.jpg>, writing the information to same-named tags in the preferred groups. =item exiftool -TagsFromFile src.jpg -all:all dst.jpg Copy the values of all writable tags from C<src.jpg> to C<dst.jpg>, preserving the original tag groups. =item exiftool -all= -tagsfromfile src.jpg -exif:all dst.jpg Erase all meta information from C<dst.jpg> image, then copy EXIF tags from C<src.jpg>. =item exiftool -exif:all= -tagsfromfile @ -all:all -unsafe bad.jpg Rebuild all EXIF meta information from scratch in an image. This technique can be used in JPEG images to repair corrupted EXIF information which otherwise could not be written due to errors. The C<Unsafe> tag is a shortcut for unsafe EXIF tags in JPEG images which are not normally copied. See the L<tag name documentation|Image::ExifTool::TagNames> for more details about unsafe tags. =item exiftool -Tagsfromfile a.jpg out.xmp Copy meta information from C<a.jpg> to an XMP data file. If the XMP data file C<out.xmp> already exists, it will be updated with the new information. Otherwise the XMP data file will be created. Only XMP, ICC and MIE files may be created like this (other file types may be edited but not created). See L</WRITING EXAMPLES> above for another technique to generate XMP files. =item exiftool -tagsFromFile a.jpg -XMP:All= -ThumbnailImage= -m b.jpg Copy all meta information from C<a.jpg> to C<b.jpg>, deleting all XMP information and the thumbnail image from the destination. =item exiftool -TagsFromFile src.jpg -title -author=Phil dst.jpg Copy title from one image to another and set a new author name. =item exiftool -TagsFromFile a.jpg -ISO -TagsFromFile b.jpg -comment dst.jpg Copy ISO from one image and Comment from another image to a destination image. =item exiftool -tagsfromfile src.jpg -exif:all --subifd:all dst.jpg Copy only the EXIF information from one image to another, excluding SubIFD tags. =item exiftool '-FileModifyDateE<lt>DateTimeOriginal' dir Use the original date from the meta information to set the same file's filesystem modification date for all images in a directory. (Note that C<-TagsFromFile @> is assumed if no other B<-TagsFromFile> is specified when redirecting information as in this example.) =item exiftool -TagsFromFile src.jpg '-xmp:allE<lt>all' dst.jpg Copy all possible information from C<src.jpg> and write in XMP format to C<dst.jpg>. =item exiftool -@ iptc2xmp.args -iptc:all= a.jpg Translate IPTC information to XMP with appropriate tag name conversions, and delete the original IPTC information from an image. This example uses iptc2xmp.args, which is a file included with the ExifTool distribution that contains the required arguments to convert IPTC information to XMP format. Also included with the distribution are xmp2iptc.args (which performs the inverse conversion) and a few more .args files for other conversions between EXIF, IPTC and XMP. =item exiftool -tagsfromfile %d%f.CR2 -r -ext JPG dir Recursively rewrite all C<JPG> images in C<dir> with information copied from the corresponding C<CR2> images in the same directories. =item exiftool '-keywords+E<lt>make' image.jpg Add camera make to list of keywords. =item exiftool '-commentE<lt>ISO=$exif:iso Exposure=${shutterspeed}' dir Set the Comment tag of all images in C<dir> from the values of the EXIF:ISO and ShutterSpeed tags. The resulting comment will be in the form "ISO=100 Exposure=1/60". =item exiftool -TagsFromFile src.jpg -icc_profile dst.jpg Copy ICC_Profile from one image to another. =item exiftool -TagsFromFile src.jpg -all:all dst.mie Copy all meta information in its original form from a JPEG image to a MIE file. The MIE file will be created if it doesn't exist. This technique can be used to store the metadata of an image so it can be inserted back into the image (with the inverse command) later in a workflow. =item exiftool -o dst.mie -all:all src.jpg This command performs exactly the same task as the command above, except that the B<-o> option will not write to an output file that already exists. =item exiftool -if '$jpgfromraw' -b -jpgfromraw -w %d%f_%ue.jpg -execute -if '$previewimage' -b -previewimage -w %d%f_%ue.jpg -execute -tagsfromfile @ -srcfile %d%f_%ue.jpg -overwrite_original -common_args --ext jpg DIR [Advanced] Extract JpgFromRaw or PreviewImage from all but JPG files in DIR, saving them with file names like C<image_EXT.jpg>, then add all meta information from the original files to the extracted images. Here, the command line is broken into three sections (separated by B<-execute> options), and each is executed as if it were a separate command. The B<-common_args> option causes the C<--ext jpg DIR> arguments to be applied to all three commands, and the B<-srcfile> option allows the extracted JPG image to be the source file for the third command (whereas the RAW files are the source files for the other two commands). =back =head1 RENAMING EXAMPLES By writing the C<FileName> and C<Directory> tags, files are renamed and/or moved to new directories. This can be particularly useful and powerful for organizing files by date when combined with the B<-d> option. New directories are created as necessary, but existing files will not be overwritten. The format codes %d, %f and %e may be used in the new file name to represent the directory, name and extension of the original file, and %c may be used to add a copy number if the file already exists (see the B<-w> option for details). Note that if used within a date format string, an extra '%' must be added to pass these codes through the date/time parser. (And further note that in a Windows batch file, all '%' characters must also be escaped, so in this extreme case '%%%%f' is necessary to pass a simple '%f' through the two levels of parsing.) See L<http://owl.phy.queensu.ca/~phil/exiftool/filename.html> for additional documentation and examples. =over 5 =item exiftool -filename=new.jpg dir/old.jpg Rename C<old.jpg> to C<new.jpg> in directory C<dir>. =item exiftool -directory=%e dir Move all files from directory C<dir> into directories named by the original file extensions. =item exiftool '-Directory<DateTimeOriginal' -d %Y/%m/%d dir Move all files in C<dir> into a directory hierarchy based on year, month and day of C<DateTimeOriginal>. eg) This command would move the file C<dir/image.jpg> with a C<DateTimeOriginal> of C<2005:10:12 16:05:56> to C<2005/10/12/image.jpg>. =item exiftool -o . '-Directory<DateTimeOriginal' -d %Y/%m/%d dir Same effect as above except files are copied instead of moved. =item exiftool '-filename<%f_${model;}.%e' dir Rename all files in C<dir> by adding the camera model name to the file name. The semicolon after the tag name inside the braces causes characters which are invalid in Windows file names to be deleted from the tag value (see the B<-p> option documentation for an explanation). =item exiftool '-FileName<CreateDate' -d %Y%m%d_%H%M%S%%-c.%%e dir Rename all images in C<dir> according to the C<CreateDate> date and time, adding a copy number with leading '-' if the file already exists (C<%-c>), and preserving the original file extension (C<%e>). Note the extra '%' necessary to escape the filename codes (C<%c> and C<%e>) in the date format string. =item exiftool -r '-FileName<CreateDate' -d %Y-%m-%d/%H%M_%%f.%%e dir Both the directory and the filename may be changed together via the C<FileName> tag if the new C<FileName> contains a '/'. The example above recursively renames all images in a directory by adding a C<CreateDate> timestamp to the start of the filename, then moves them into new directories named by date. =item exiftool '-FileName<${CreateDate}_$filenumber.jpg' -d %Y%m%d -ext jpg . Set the filename of all JPG images in the current directory from the CreateDate and FileNumber tags, in the form "20060507_118-1861.jpg". =back =head1 GEOTAGGING EXAMPLES ExifTool implements geotagging via 3 special tags: Geotag (which for convenience is also implemented as an exiftool option), Geosync and Geotime. The examples below highlight some geotagging features. See L<http://owl.phy.queensu.ca/~phil/exiftool/geotag.html> for additional documentation. =over 5 =item exiftool -geotag track.log a.jpg Geotag an image (C<a.jpg>) from position information in a GPS track log (C<track.log>). Since the C<Geotime> tag is not specified, the value of DateTimeOriginal is used for geotagging. Local system time is assumed unless DateTimeOriginal contains a timezone. =item exiftool -geotag t.log -geotime='2009:04:02 13:41:12-05:00' a.jpg Geotag an image with the GPS position for a specific time. (Note that the C<Geotag> tag must be assigned before C<Geotime> for the GPS data to be available when C<Geotime> is set.) =item exiftool -geotag log.gpx '-xmp:geotimeE<lt>createdate' dir Geotag all images in directory C<dir> with XMP tags instead of EXIF tags, based on the image CreateDate. (In this case, the order of the arguments doesn't matter because tags with values copied from other tags are always set after constant values.) =item exiftool -geotag a.log -geosync=-20 dir Geotag images in directory C<dir>, accounting for image timestamps which were 20 seconds ahead of GPS. =item exiftool -geotag a.log -geosync=1.jpg -geosync=2.jpg dir Geotag images using time synchronization from two previously geotagged images (1.jpg and 2.jpg), synchronizing the image and GPS times using a linear time drift correction. =item exiftool -geotag a.log '-geotimeE<lt>${createdate}+01:00' dir Geotag images in C<dir> using CreateDate with the specified timezone. If CreateDate already contained a timezone, then the timezone specified on the command line is ignored. =item exiftool -geotag= a.jpg Delete GPS tags which may have been added by the geotag feature. Note that this does not remove all GPS tags -- to do this instead use C<-gps:all=>. =item exiftool -xmp:geotag= a.jpg Delete XMP GPS tags which were added by the geotag feature. =item exiftool -xmp:geotag=track.log a.jpg Geotag an image with XMP tags, using the time from DateTimeOriginal. =item exiftool -geotag a.log -geotag b.log -r dir Combine multiple track logs and geotag an entire directory tree of images. =item exiftool -geotag 'tracks/*.log' -r dir Read all track logs from the C<tracks> directory. =item exiftool -p gpx.fmt -d %Y-%m-%dT%H:%M:%SZ dir > out.gpx Generate a GPX track log from all images in directory C<dir>. This example uses the C<gpx.fmt> file included in the full ExifTool distribution package and assumes that the images in C<dir> have all been previously geotagged. =back =head1 PIPING EXAMPLES =over 5 =item cat a.jpg | exiftool - Extract information from stdin. =item exiftool image.jpg -thumbnailimage -b | exiftool - Extract information from an embedded thumbnail image. =item cat a.jpg | exiftool -iptc:keywords+=fantastic - > b.jpg Add an IPTC keyword in a pipeline, saving output to a new file. =item curl -s http://a.domain.com/bigfile.jpg | exiftool -fast - Extract information from an image over the internet using the cURL utility. The B<-fast> option prevents exiftool from scanning for trailer information, so only the meta information header is transferred. =item exiftool a.jpg -thumbnailimage -b | exiftool -comment=wow - | exiftool a.jpg -thumbnailimage'<=-' Add a comment to an embedded thumbnail image. (Why anyone would want to do this I don't know, but I've included this as an example to illustrate the flexibility of ExifTool.) =back =head1 DIAGNOSTICS The exiftool application exits with a status of 0 on success, or 1 if an error occurred or if all files failed the B<-if> condition (for any of the commands if B<-execute> was used). =head1 AUTHOR Copyright 2003-2016, Phil Harvey This is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagNames(3pm)|Image::ExifTool::TagNames>, L<Image::ExifTool::Shortcuts(3pm)|Image::ExifTool::Shortcuts>, L<Image::ExifTool::Shift.pl|Image::ExifTool::Shift.pl> =cut #------------------------------------------------------------------------------ # end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/fmt_files/���������������������������������������������������������������������000755 �000765 �000024 �00000000000 12650447263 016344� 5����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/��������������������������������������������������������������������������000755 �000765 �000024 �00000000000 12650447263 015340� 5����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/���������������������������������������������������������������������������000755 �000765 �000024 �00000000000 12650447262 015141� 5����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/Makefile.PL��������������������������������������������������������������������000644 �000765 �000024 �00000002705 12155657173 016355� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������use ExtUtils::MakeMaker; use File::Spec; my $ExifTool_pm = File::Spec->catfile('lib', 'Image', 'ExifTool.pm'); my $ExifTool_pod = File::Spec->catfile('lib', 'Image', 'ExifTool.pod'); WriteMakefile( NAME => 'Image::ExifTool', VERSION_FROM => $ExifTool_pm, PREREQ_PM => { }, (($ExtUtils::MakeMaker::VERSION gt '6.31' and $ExtUtils::MakeMaker::VERSION lt '6.46') ? (EXTRA_META => "recommends:\n" . " Archive::Zip: 0\n" . " Compress::Zlib: 0\n" . " Digest::MD5: 0\n" . " Digest::SHA: 0\n", # (not worth recommending -- only for Rawzor files) # " IO::Compress::Bzip2: 0\n", ) : ()), ($ExtUtils::MakeMaker::VERSION ge '6.46' ? (META_MERGE => { recommends => { 'Archive::Zip' => 0, 'Compress::Zlib' => 0, 'Digest::MD5' => 0, 'Digest::SHA' => 0, # 'IO::Compress::Bzip2' => 0, }, } ) : ()), clean => { FILES => 't/*.tmp' }, EXE_FILES => [ 'exiftool' ], ($] >= 5.005 ? (ABSTRACT_FROM => $ExifTool_pod, AUTHOR => 'Phil Harvey (phil@owl.phy.queensu.ca)', ) : ()), (($ExtUtils::MakeMaker::VERSION gt '6.30') ? (LICENSE => 'perl') : ()), (($ExtUtils::MakeMaker::VERSION ge '6.47') ? (MIN_PERL_VERSION => '5.004') : ()), ); �����������������������������������������������������������Image-ExifTool-10.10/MANIFEST�����������������������������������������������������������������������000644 �000765 �000024 �00000045041 12643001176 015520� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Changes MANIFEST META.yml Makefile.PL README arg_files/exif2iptc.args arg_files/exif2xmp.args arg_files/gps2xmp.args arg_files/iptc2exif.args arg_files/iptc2xmp.args arg_files/iptcCore.args arg_files/pdf2xmp.args arg_files/xmp2exif.args arg_files/xmp2gps.args arg_files/xmp2iptc.args arg_files/xmp2pdf.args config_files/convert_regions.config config_files/example.config config_files/photoshop_paths.config config_files/picasa_faces.config exiftool fmt_files/gpx.fmt fmt_files/gpx_wpt.fmt fmt_files/kml.fmt html/ExifTool.html html/MIE1.1-20070121.pdf html/Shift.html html/TagNames/AFCP.html html/TagNames/AIFF.html html/TagNames/APE.html html/TagNames/APP12.html html/TagNames/ASF.html html/TagNames/Apple.html html/TagNames/Audible.html html/TagNames/BMP.html html/TagNames/Canon.html html/TagNames/CanonCustom.html html/TagNames/CanonRaw.html html/TagNames/CanonVRD.html html/TagNames/Casio.html html/TagNames/Composite.html html/TagNames/DICOM.html html/TagNames/DNG.html html/TagNames/DPX.html html/TagNames/DV.html html/TagNames/DarwinCore.html html/TagNames/DjVu.html html/TagNames/EXE.html html/TagNames/EXIF.html html/TagNames/Extra.html html/TagNames/FLAC.html html/TagNames/FLIR.html html/TagNames/Flash.html html/TagNames/FlashPix.html html/TagNames/Font.html html/TagNames/FotoStation.html html/TagNames/FujiFilm.html html/TagNames/GE.html html/TagNames/GIF.html html/TagNames/GIMP.html html/TagNames/GPS.html html/TagNames/GeoTiff.html html/TagNames/H264.html html/TagNames/HP.html html/TagNames/HTML.html html/TagNames/ICC_Profile.html html/TagNames/ID3.html html/TagNames/IPTC.html html/TagNames/ITC.html html/TagNames/JFIF.html html/TagNames/JPEG.html html/TagNames/JVC.html html/TagNames/Jpeg2000.html html/TagNames/Kodak.html html/TagNames/KyoceraRaw.html html/TagNames/LNK.html html/TagNames/Leaf.html html/TagNames/Lytro.html html/TagNames/M2TS.html html/TagNames/MIE.html html/TagNames/MIFF.html html/TagNames/MNG.html html/TagNames/MOI.html html/TagNames/MPC.html html/TagNames/MPEG.html html/TagNames/MPF.html html/TagNames/MWG.html html/TagNames/MXF.html html/TagNames/Matroska.html html/TagNames/Microsoft.html html/TagNames/Minolta.html html/TagNames/MinoltaRaw.html html/TagNames/Motorola.html html/TagNames/Nikon.html html/TagNames/NikonCapture.html html/TagNames/NikonCustom.html html/TagNames/Nintendo.html html/TagNames/OOXML.html html/TagNames/Ogg.html html/TagNames/Olympus.html html/TagNames/OpenEXR.html html/TagNames/PDF.html html/TagNames/PGF.html html/TagNames/PICT.html html/TagNames/PLIST.html html/TagNames/PNG.html html/TagNames/PSP.html html/TagNames/Palm.html html/TagNames/Panasonic.html html/TagNames/PanasonicRaw.html html/TagNames/Pentax.html html/TagNames/PhaseOne.html html/TagNames/PhotoCD.html html/TagNames/PhotoMechanic.html html/TagNames/Photoshop.html html/TagNames/PostScript.html html/TagNames/PrintIM.html html/TagNames/Qualcomm.html html/TagNames/QuickTime.html html/TagNames/RIFF.html html/TagNames/RSRC.html html/TagNames/RTF.html html/TagNames/Radiance.html html/TagNames/Rawzor.html html/TagNames/Real.html html/TagNames/Reconyx.html html/TagNames/Ricoh.html html/TagNames/Samsung.html html/TagNames/Sanyo.html html/TagNames/Scalado.html html/TagNames/Shortcuts.html html/TagNames/Sigma.html html/TagNames/SigmaRaw.html html/TagNames/Sony.html html/TagNames/SonyIDC.html html/TagNames/Stim.html html/TagNames/Theora.html html/TagNames/Torrent.html html/TagNames/Unknown.html html/TagNames/VCard.html html/TagNames/Vorbis.html html/TagNames/XMP.html html/TagNames/ZIP.html html/TagNames/iWork.html html/TagNames/index.html html/TagNames/style.css html/ancient_history.html html/canon_raw.html html/commentary.html html/config.html html/data_members.html html/exiftool_pod.html html/faq.html html/filename.html html/geotag.html html/history.html html/htmldump.html html/idiosyncracies.html html/index.html html/install.html html/metafiles.html html/overview.png html/standards.html html/struct.html html/style.css html/under.html html/verbose.html html/writing.html lib/File/RandomAccess.pm lib/File/RandomAccess.pod lib/Image/ExifTool.pm lib/Image/ExifTool.pod lib/Image/ExifTool/AES.pm lib/Image/ExifTool/AFCP.pm lib/Image/ExifTool/AIFF.pm lib/Image/ExifTool/APE.pm lib/Image/ExifTool/APP12.pm lib/Image/ExifTool/ASF.pm lib/Image/ExifTool/Apple.pm lib/Image/ExifTool/Audible.pm lib/Image/ExifTool/BMP.pm lib/Image/ExifTool/BZZ.pm lib/Image/ExifTool/BigTIFF.pm lib/Image/ExifTool/BuildTagLookup.pm lib/Image/ExifTool/Canon.pm lib/Image/ExifTool/CanonCustom.pm lib/Image/ExifTool/CanonRaw.pm lib/Image/ExifTool/CanonVRD.pm lib/Image/ExifTool/CaptureOne.pm lib/Image/ExifTool/Casio.pm lib/Image/ExifTool/Charset.pm lib/Image/ExifTool/Charset/Arabic.pm lib/Image/ExifTool/Charset/Baltic.pm lib/Image/ExifTool/Charset/Cyrillic.pm lib/Image/ExifTool/Charset/Greek.pm lib/Image/ExifTool/Charset/Hebrew.pm lib/Image/ExifTool/Charset/JIS.pm lib/Image/ExifTool/Charset/Latin.pm lib/Image/ExifTool/Charset/Latin2.pm lib/Image/ExifTool/Charset/MacArabic.pm lib/Image/ExifTool/Charset/MacChineseCN.pm lib/Image/ExifTool/Charset/MacChineseTW.pm lib/Image/ExifTool/Charset/MacCroatian.pm lib/Image/ExifTool/Charset/MacCyrillic.pm lib/Image/ExifTool/Charset/MacGreek.pm lib/Image/ExifTool/Charset/MacHebrew.pm lib/Image/ExifTool/Charset/MacIceland.pm lib/Image/ExifTool/Charset/MacJapanese.pm lib/Image/ExifTool/Charset/MacKorean.pm lib/Image/ExifTool/Charset/MacLatin2.pm lib/Image/ExifTool/Charset/MacRSymbol.pm lib/Image/ExifTool/Charset/MacRoman.pm lib/Image/ExifTool/Charset/MacRomanian.pm lib/Image/ExifTool/Charset/MacThai.pm lib/Image/ExifTool/Charset/MacTurkish.pm lib/Image/ExifTool/Charset/PDFDoc.pm lib/Image/ExifTool/Charset/ShiftJIS.pm lib/Image/ExifTool/Charset/Symbol.pm lib/Image/ExifTool/Charset/Thai.pm lib/Image/ExifTool/Charset/Turkish.pm lib/Image/ExifTool/Charset/Vietnam.pm lib/Image/ExifTool/DICOM.pm lib/Image/ExifTool/DNG.pm lib/Image/ExifTool/DPX.pm lib/Image/ExifTool/DV.pm lib/Image/ExifTool/DarwinCore.pm lib/Image/ExifTool/DjVu.pm lib/Image/ExifTool/EXE.pm lib/Image/ExifTool/Exif.pm lib/Image/ExifTool/FLAC.pm lib/Image/ExifTool/FLIR.pm lib/Image/ExifTool/Fixup.pm lib/Image/ExifTool/Flash.pm lib/Image/ExifTool/FlashPix.pm lib/Image/ExifTool/Font.pm lib/Image/ExifTool/FotoStation.pm lib/Image/ExifTool/FujiFilm.pm lib/Image/ExifTool/GE.pm lib/Image/ExifTool/GIF.pm lib/Image/ExifTool/GIMP.pm lib/Image/ExifTool/GPS.pm lib/Image/ExifTool/GeoTiff.pm lib/Image/ExifTool/Geotag.pm lib/Image/ExifTool/H264.pm lib/Image/ExifTool/HP.pm lib/Image/ExifTool/HTML.pm lib/Image/ExifTool/HtmlDump.pm lib/Image/ExifTool/ICC_Profile.pm lib/Image/ExifTool/ID3.pm lib/Image/ExifTool/IPTC.pm lib/Image/ExifTool/ITC.pm lib/Image/ExifTool/Import.pm lib/Image/ExifTool/InDesign.pm lib/Image/ExifTool/JPEG.pm lib/Image/ExifTool/JPEGDigest.pm lib/Image/ExifTool/JVC.pm lib/Image/ExifTool/Jpeg2000.pm lib/Image/ExifTool/Kodak.pm lib/Image/ExifTool/KyoceraRaw.pm lib/Image/ExifTool/LNK.pm lib/Image/ExifTool/Lang/cs.pm lib/Image/ExifTool/Lang/de.pm lib/Image/ExifTool/Lang/en_ca.pm lib/Image/ExifTool/Lang/en_gb.pm lib/Image/ExifTool/Lang/es.pm lib/Image/ExifTool/Lang/fi.pm lib/Image/ExifTool/Lang/fr.pm lib/Image/ExifTool/Lang/it.pm lib/Image/ExifTool/Lang/ja.pm lib/Image/ExifTool/Lang/ko.pm lib/Image/ExifTool/Lang/nl.pm lib/Image/ExifTool/Lang/pl.pm lib/Image/ExifTool/Lang/ru.pm lib/Image/ExifTool/Lang/sv.pm lib/Image/ExifTool/Lang/tr.pm lib/Image/ExifTool/Lang/zh_cn.pm lib/Image/ExifTool/Lang/zh_tw.pm lib/Image/ExifTool/Leaf.pm lib/Image/ExifTool/Lytro.pm lib/Image/ExifTool/M2TS.pm lib/Image/ExifTool/MIE.pm lib/Image/ExifTool/MIEUnits.pod lib/Image/ExifTool/MIFF.pm lib/Image/ExifTool/MNG.pm lib/Image/ExifTool/MOI.pm lib/Image/ExifTool/MPC.pm lib/Image/ExifTool/MPEG.pm lib/Image/ExifTool/MPF.pm lib/Image/ExifTool/MWG.pm lib/Image/ExifTool/MXF.pm lib/Image/ExifTool/MakerNotes.pm lib/Image/ExifTool/Matroska.pm lib/Image/ExifTool/Microsoft.pm lib/Image/ExifTool/Minolta.pm lib/Image/ExifTool/MinoltaRaw.pm lib/Image/ExifTool/Motorola.pm lib/Image/ExifTool/Nikon.pm lib/Image/ExifTool/NikonCapture.pm lib/Image/ExifTool/NikonCustom.pm lib/Image/ExifTool/Nintendo.pm lib/Image/ExifTool/OOXML.pm lib/Image/ExifTool/Ogg.pm lib/Image/ExifTool/Olympus.pm lib/Image/ExifTool/OpenEXR.pm lib/Image/ExifTool/PDF.pm lib/Image/ExifTool/PGF.pm lib/Image/ExifTool/PICT.pm lib/Image/ExifTool/PLIST.pm lib/Image/ExifTool/PNG.pm lib/Image/ExifTool/PPM.pm lib/Image/ExifTool/PSP.pm lib/Image/ExifTool/Palm.pm lib/Image/ExifTool/Panasonic.pm lib/Image/ExifTool/PanasonicRaw.pm lib/Image/ExifTool/Pentax.pm lib/Image/ExifTool/PhaseOne.pm lib/Image/ExifTool/PhotoCD.pm lib/Image/ExifTool/PhotoMechanic.pm lib/Image/ExifTool/Photoshop.pm lib/Image/ExifTool/PostScript.pm lib/Image/ExifTool/PrintIM.pm lib/Image/ExifTool/Qualcomm.pm lib/Image/ExifTool/QuickTime.pm lib/Image/ExifTool/README lib/Image/ExifTool/RIFF.pm lib/Image/ExifTool/RSRC.pm lib/Image/ExifTool/RTF.pm lib/Image/ExifTool/Radiance.pm lib/Image/ExifTool/Rawzor.pm lib/Image/ExifTool/Real.pm lib/Image/ExifTool/Reconyx.pm lib/Image/ExifTool/Ricoh.pm lib/Image/ExifTool/Samsung.pm lib/Image/ExifTool/Sanyo.pm lib/Image/ExifTool/Scalado.pm lib/Image/ExifTool/Shift.pl lib/Image/ExifTool/Shortcuts.pm lib/Image/ExifTool/Sigma.pm lib/Image/ExifTool/SigmaRaw.pm lib/Image/ExifTool/Sony.pm lib/Image/ExifTool/SonyIDC.pm lib/Image/ExifTool/Stim.pm lib/Image/ExifTool/TagInfoXML.pm lib/Image/ExifTool/TagLookup.pm lib/Image/ExifTool/TagNames.pod lib/Image/ExifTool/Theora.pm lib/Image/ExifTool/Torrent.pm lib/Image/ExifTool/Unknown.pm lib/Image/ExifTool/VCard.pm lib/Image/ExifTool/Vorbis.pm lib/Image/ExifTool/WriteCanonRaw.pl lib/Image/ExifTool/WriteExif.pl lib/Image/ExifTool/WriteIPTC.pl lib/Image/ExifTool/WritePDF.pl lib/Image/ExifTool/WritePNG.pl lib/Image/ExifTool/WritePhotoshop.pl lib/Image/ExifTool/WritePostScript.pl lib/Image/ExifTool/WriteQuickTime.pl lib/Image/ExifTool/WriteXMP.pl lib/Image/ExifTool/Writer.pl lib/Image/ExifTool/XMP.pm lib/Image/ExifTool/XMP2.pl lib/Image/ExifTool/XMPStruct.pl lib/Image/ExifTool/ZIP.pm lib/Image/ExifTool/iWork.pm perl-Image-ExifTool.spec t/AFCP.t t/AFCP_2.out t/AFCP_3.out t/AIFF.t t/AIFF_2.out t/APE.t t/APE_2.out t/APE_3.out t/ASF.t t/ASF_2.out t/Audible.t t/Audible_2.out t/BMP.t t/BMP_2.out t/BigTIFF.t t/BigTIFF_2.out t/Canon.t t/CanonRaw.t t/CanonRaw_2.out t/CanonRaw_4.out t/CanonRaw_5.out t/CanonRaw_6.out t/CanonRaw_7.out t/CanonVRD.t t/CanonVRD_11.out t/CanonVRD_12.out t/CanonVRD_13.out t/CanonVRD_14.out t/CanonVRD_15.out t/CanonVRD_16.out t/CanonVRD_17.out t/CanonVRD_18.out t/CanonVRD_19.out t/CanonVRD_2.out t/CanonVRD_20.out t/CanonVRD_21.out t/CanonVRD_3.out t/CanonVRD_4.out t/CanonVRD_5.out t/CanonVRD_6.out t/CanonVRD_7.out t/CanonVRD_8.out t/CanonVRD_9.out t/Canon_2.out t/Canon_3.out t/Casio.t t/Casio_2.out t/Casio_3.out t/Casio_4.out t/Casio_5.out t/Casio_6.out t/DICOM.t t/DICOM_2.out t/DNG.t t/DNG_2.out t/DNG_3.out t/DPX.t t/DPX_2.out t/DV.t t/DV_2.out t/DjVu.t t/DjVu_2.out t/EXE.t t/EXE_2.out t/EXE_3.out t/EXE_4.out t/ExifTool.t t/ExifTool_16.out t/ExifTool_17.out t/ExifTool_2.out t/ExifTool_20.out t/ExifTool_21.out t/ExifTool_22.out t/ExifTool_23.out t/ExifTool_24.out t/ExifTool_25.out t/ExifTool_26.out t/ExifTool_27.out t/ExifTool_28.out t/ExifTool_29.out t/ExifTool_3.out t/ExifTool_30.out t/ExifTool_4.out t/ExifTool_5.out t/ExifTool_6.out t/ExifTool_7.out t/ExifTool_8.out t/ExifTool_9.out t/FLAC.t t/FLAC_2.out t/FLAC_3.out t/FLIR.t t/FLIR_2.out t/FLIR_3.out t/Flash.t t/FlashPix.t t/FlashPix_2.out t/Flash_2.out t/Flash_3.out t/Font.t t/Font_2.out t/Font_3.out t/Font_4.out t/Font_5.out t/Font_6.out t/Font_7.out t/FotoStation.t t/FotoStation_2.out t/FotoStation_3.out t/FujiFilm.t t/FujiFilm_2.out t/FujiFilm_3.out t/FujiFilm_4.out t/FujiFilm_5.out t/GE.t t/GE_2.out t/GE_3.out t/GIF.t t/GIF_2.out t/GIF_3.out t/GIF_4.out t/GIMP.t t/GIMP_2.out t/GPS.t t/GPS_2.out t/GPS_3.out t/GeoTiff.t t/GeoTiff_2.out t/GeoTiff_3.out t/GeoTiff_4.out t/Geotag.t t/Geotag_10.out t/Geotag_2.out t/Geotag_3.out t/Geotag_5.out t/Geotag_6.out t/Geotag_7.out t/Geotag_8.out t/Geotag_9.out t/HTML.t t/HTML_2.out t/IPTC.t t/IPTC_2.out t/IPTC_4.out t/IPTC_5.out t/IPTC_6.out t/IPTC_7.out t/IPTC_8.out t/ITC.t t/ITC_2.out t/InDesign.t t/InDesign_2.out t/InDesign_3.out t/InDesign_4.out t/JVC.t t/JVC_2.out t/JVC_3.out t/Jpeg2000.t t/Jpeg2000_2.out t/Jpeg2000_3.out t/Jpeg2000_4.out t/Kodak.t t/Kodak_2.out t/Kodak_3.out t/KyoceraRaw.t t/KyoceraRaw_2.out t/LNK.t t/LNK_2.out t/Lang.t t/Lang_1.out t/Lang_10.out t/Lang_11.out t/Lang_12.out t/Lang_13.out t/Lang_14.out t/Lang_15.out t/Lang_16.out t/Lang_17.out t/Lang_18.out t/Lang_2.out t/Lang_3.out t/Lang_4.out t/Lang_5.out t/Lang_6.out t/Lang_7.out t/Lang_8.out t/Lang_9.out t/Lytro.t t/Lytro_2.out t/M2TS.t t/M2TS_2.out t/MIE.t t/MIE_2.out t/MIE_3.out t/MIE_5.out t/MIE_6.out t/MIFF.t t/MIFF_2.out t/MOI.t t/MOI_2.out t/MP3.t t/MP3_2.out t/MWG.t t/MWG_2.out t/MWG_3.out t/MWG_4.out t/MWG_5.out t/MWG_6.out t/MXF.t t/MXF_2.out t/Matroska.t t/Matroska_2.out t/Minolta.t t/Minolta_2.out t/Minolta_3.out t/Minolta_4.out t/Motorola.t t/Motorola_2.out t/Nikon.t t/Nikon_2.out t/Nikon_3.out t/Nikon_4.out t/Nikon_5.out t/Nikon_7.out t/Nikon_8.out t/Olympus.t t/Olympus_2.out t/Olympus_3.out t/Olympus_4.out t/Olympus_5.out t/Olympus_6.out t/Olympus_7.out t/Olympus_8.out t/OpenEXR.t t/OpenEXR_2.out t/PDF.t t/PDF_10.out t/PDF_11.out t/PDF_12.out t/PDF_14.out t/PDF_15.out t/PDF_16.out t/PDF_17.out t/PDF_18.out t/PDF_19.out t/PDF_2.out t/PDF_20.out t/PDF_22.out t/PDF_4.out t/PDF_5.out t/PDF_6.out t/PDF_7.out t/PDF_8.out t/PDF_9.out t/PGF.t t/PGF_2.out t/PICT.t t/PICT_2.out t/PLIST.t t/PLIST_2.out t/PLIST_3.out t/PNG.t t/PNG_2.out t/PNG_3.out t/PNG_4.out t/PNG_5.out t/PPM.t t/PPM_2.out t/PPM_3.out t/PSP.t t/PSP_2.out t/Palm.t t/Palm_2.out t/Panasonic.t t/Panasonic_2.out t/Panasonic_3.out t/Panasonic_4.out t/Panasonic_5.out t/Pentax.t t/Pentax_2.out t/Pentax_3.out t/Pentax_4.out t/PhaseOne.t t/PhaseOne_2.out t/PhaseOne_3.out t/PhotoCD.t t/PhotoCD_2.out t/PhotoMechanic.t t/PhotoMechanic_2.out t/PhotoMechanic_3.out t/Photoshop.t t/Photoshop_2.out t/Photoshop_3.out t/PostScript.t t/PostScript_2.out t/PostScript_3.out t/QuickTime.t t/QuickTime_2.out t/QuickTime_3.out t/QuickTime_4.out t/QuickTime_5.out t/RIFF.t t/RIFF_2.out t/RIFF_3.out t/RIFF_4.out t/RTF.t t/RTF_2.out t/Radiance.t t/Radiance_2.out t/Real.t t/Real_2.out t/Real_3.out t/Real_4.out t/Ricoh.t t/Ricoh_2.out t/Ricoh_3.out t/Ricoh_4.out t/Sanyo.t t/Sanyo_2.out t/Sanyo_3.out t/Sigma.t t/Sigma_2.out t/Sigma_3.out t/Sigma_4.out t/Sigma_5.out t/Sony.t t/Sony_2.out t/Sony_3.out t/Sony_5.out t/TestLib.pm t/Torrent.t t/Torrent_2.out t/Unknown.t t/Unknown_2.out t/Unknown_3.out t/VCard.t t/VCard_2.out t/VCard_3.out t/Vorbis.t t/Vorbis_2.out t/Writer.t t/Writer_10.out t/Writer_11.out t/Writer_13.out t/Writer_14.out t/Writer_15.out t/Writer_16.out t/Writer_17.out t/Writer_18.out t/Writer_19.out t/Writer_2.out t/Writer_22.out t/Writer_24.out t/Writer_25.out t/Writer_26.out t/Writer_27.out t/Writer_28.out t/Writer_29.out t/Writer_30.out t/Writer_31.out t/Writer_32.out t/Writer_33.out t/Writer_34.out t/Writer_35.out t/Writer_36.out t/Writer_37.out t/Writer_38.out t/Writer_39.out t/Writer_4.out t/Writer_40.out t/Writer_41.out t/Writer_42.out t/Writer_43.out t/Writer_44.out t/Writer_45.out t/Writer_46.out t/Writer_47.out t/Writer_48.out t/Writer_50.out t/Writer_51.out t/Writer_52.out t/Writer_53.out t/Writer_54.out t/Writer_55.out t/Writer_56.out t/Writer_6.out t/Writer_7.out t/Writer_9.out t/XMP.t t/XMP_10.out t/XMP_11.out t/XMP_12.out t/XMP_13.out t/XMP_14.out t/XMP_15.out t/XMP_16.out t/XMP_17.out t/XMP_18.out t/XMP_19.out t/XMP_2.out t/XMP_20.out t/XMP_21.out t/XMP_22.out t/XMP_23.out t/XMP_24.out t/XMP_25.out t/XMP_26.out t/XMP_27.out t/XMP_28.out t/XMP_29.out t/XMP_3.out t/XMP_30.out t/XMP_31.out t/XMP_32.out t/XMP_34.out t/XMP_36.out t/XMP_37.out t/XMP_39.out t/XMP_40.out t/XMP_41.out t/XMP_42.out t/XMP_43.out t/XMP_44.out t/XMP_45.out t/XMP_5.out t/XMP_6.out t/XMP_7.out t/XMP_8.out t/XMP_9.out t/ZIP.t t/ZIP_2.out t/ZIP_3.out t/ZIP_4.out t/ZIP_5.out t/ZIP_6.out t/ZIP_7.out t/images/AFCP.jpg t/images/AIFF.aif t/images/APE.ape t/images/APE.mpc t/images/ASF.wmv t/images/Audible.aa t/images/BMP.bmp t/images/BigTIFF.btf t/images/Canon.jpg t/images/Canon1DmkIII.jpg t/images/CanonRaw.cr2 t/images/CanonRaw.crw t/images/CanonVRD.dr4 t/images/CanonVRD.vrd t/images/CaptureOne.eip t/images/Casio.jpg t/images/Casio2.jpg t/images/CasioQVCI.jpg t/images/DICOM.dcm t/images/DNG.dng t/images/DPX.dpx t/images/DV.dv t/images/DjVu.djvu t/images/EXE.elf t/images/EXE.exe t/images/EXE.macho t/images/ExifTool.jpg t/images/ExifTool.tif t/images/ExtendedXMP.jpg t/images/FLAC.flac t/images/FLAC.ogg t/images/FLIR.fpf t/images/FLIR.jpg t/images/Flash.flv t/images/Flash.swf t/images/FlashPix.ppt t/images/Font.afm t/images/Font.dfont t/images/Font.pfa t/images/Font.pfb t/images/Font.pfm t/images/Font.ttf t/images/FotoStation.jpg t/images/FujiFilm.jpg t/images/FujiFilm.raf t/images/GE.jpg t/images/GIF.gif t/images/GIMP.xcf t/images/GPS.jpg t/images/GeoTiff.tif t/images/Geotag.gpx t/images/Geotag.igc t/images/Geotag.kml t/images/Geotag.log t/images/Geotag.xml t/images/Geotag2.log t/images/Geotag3.log t/images/HTML.html t/images/IPTC.jpg t/images/ITC.itc t/images/InDesign.indd t/images/JVC.jpg t/images/JVC2.jpg t/images/Jpeg2000.j2c t/images/Jpeg2000.jp2 t/images/Kodak.jpg t/images/KyoceraRaw.raw t/images/LNK.lnk t/images/Lytro.lfp t/images/M2TS.mts t/images/MIE.mie t/images/MIFF.miff t/images/MOI.moi t/images/MP3.mp3 t/images/MWG.jpg t/images/MXF.mxf t/images/Matroska.mkv t/images/Minolta.jpg t/images/Minolta.mrw t/images/Motorola.jpg t/images/Nikon.jpg t/images/Nikon.nef t/images/NikonD2Hs.jpg t/images/NikonD70.jpg t/images/OOXML.docx t/images/Olympus.dss t/images/Olympus.jpg t/images/Olympus2.jpg t/images/OlympusE1.jpg t/images/OpenDoc.ods t/images/OpenEXR.exr t/images/PDF.pdf t/images/PDF2.pdf t/images/PGF.pgf t/images/PICT.pict t/images/PLIST-bin.plist t/images/PLIST-xml.plist t/images/PNG.png t/images/PPM.ppm t/images/PSP.psp t/images/Palm.mobi t/images/Panasonic.jpg t/images/Panasonic.rw2 t/images/Pentax.avi t/images/Pentax.jpg t/images/PhaseOne.iiq t/images/PhotoCD.pcd t/images/PhotoMechanic.jpg t/images/Photoshop.psd t/images/PostScript.eps t/images/QuickTime.m4a t/images/QuickTime.mov t/images/RIFF.avi t/images/RIFF.wav t/images/RIFF.webp t/images/RTF.rtf t/images/Radiance.hdr t/images/Real.ra t/images/Real.ram t/images/Real.rm t/images/Ricoh.jpg t/images/Ricoh2.jpg t/images/Sanyo.jpg t/images/Sigma.jpg t/images/Sigma.x3f t/images/SigmaDP2.x3f t/images/Sony.jpg t/images/Sony.pmp t/images/Torrent.torrent t/images/Unknown.jpg t/images/VCard.ics t/images/VCard.vcf t/images/Vorbis.ogg t/images/Writer.jpg t/images/XMP.inx t/images/XMP.jpg t/images/XMP.svg t/images/XMP.xml t/images/XMP.xmp t/images/XMP2.xmp t/images/XMP3.xmp t/images/XMP4.xmp t/images/XMP5.xmp t/images/XMP6.xmp t/images/ZIP.gz t/images/ZIP.zip t/images/iWork.numbers �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/META.yml�����������������������������������������������������������������������000644 �000765 �000024 �00000001221 12650447263 015641� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- #YAML:1.0 name: Image-ExifTool version: 10.10 abstract: Read and write meta information author: - Phil Harvey (phil@owl.phy.queensu.ca) license: perl distribution_type: module configure_requires: ExtUtils::MakeMaker: 0 build_requires: ExtUtils::MakeMaker: 0 requires: perl: 5.004 no_index: directory: - t - inc generated_by: ExtUtils::MakeMaker version 6.56 meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 recommends: Archive::Zip: 0 Compress::Zlib: 0 Digest::MD5: 0 Digest::SHA: 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/perl-Image-ExifTool.spec�������������������������������������������������������000644 �000765 �000024 �00000012165 12642476101 020760� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Summary: perl module for image data extraction Name: perl-Image-ExifTool Version: 10.10 Release: 1 License: Artistic/GPL Group: Development/Libraries/Perl URL: http://owl.phy.queensu.ca/~phil/exiftool/ Source0: Image-ExifTool-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root %description ExifTool is a customizable set of Perl modules plus a full-featured application for reading and writing meta information in a wide variety of files, including the maker note information of many digital cameras by various manufacturers such as Canon, Casio, FLIR, FujiFilm, GE, HP, JVC/Victor, Kodak, Leaf, Minolta/Konica-Minolta, Nikon, Olympus/Epson, Panasonic/Leica, Pentax/Asahi, Phase One, Reconyx, Ricoh, Samsung, Sanyo, Sigma/Foveon and Sony. Below is a list of file types and meta information formats currently supported by ExifTool (r = read, w = write, c = create): File Types ------------+-------------+-------------+-------------+------------ 3FR r | DVB r/w | KEY r | ORF r/w | RWL r/w 3G2 r/w | DYLIB r | LA r | OTF r | RWZ r 3GP r/w | EIP r | LFP r | PAC r | RM r AA r | EPS r/w | LNK r | PAGES r | SEQ r AAX r/w | EPUB r | M2TS r | PBM r/w | SO r ACR r | ERF r/w | M4A/V r/w | PCD r | SR2 r/w AFM r | EXE r | MEF r/w | PDB r | SRF r AI r/w | EXIF r/w/c | MIE r/w/c | PDF r/w | SRW r/w AIFF r | EXR r | MIFF r | PEF r/w | SVG r APE r | EXV r/w/c | MKA r | PFA r | SWF r ARW r/w | F4A/V r/w | MKS r | PFB r | THM r/w ASF r | FFF r/w | MKV r | PFM r | TIFF r/w AVI r | FLA r | MNG r/w | PGF r | TORRENT r AZW r | FLAC r | MOBI r | PGM r/w | TTC r BMP r | FLV r | MODD r | PLIST r | TTF r BTF r | FPF r | MOI r | PICT r | VCF r CHM r | FPX r | MOS r/w | PMP r | VRD r/w/c COS r | GIF r/w | MOV r/w | PNG r/w | VSD r CR2 r/w | GZ r | MP3 r | PPM r/w | WAV r CRW r/w | HDP r/w | MP4 r/w | PPT r | WDP r/w CS1 r/w | HDR r | MPC r | PPTX r | WEBP r DCM r | HTML r | MPG r | PS r/w | WEBM r DCP r/w | ICC r/w/c | MPO r/w | PSB r/w | WMA r DCR r | ICS r | MQV r/w | PSD r/w | WMV r DFONT r | IDML r | MRW r/w | PSP r | WV r DIVX r | IIQ r/w | MXF r | QTIF r/w | X3F r/w DJVU r | IND r/w | NEF r/w | RA r | XCF r DLL r | INX r | NRW r/w | RAF r/w | XLS r DNG r/w | ITC r | NUMBERS r | RAM r | XLSX r DOC r | J2C r | ODP r | RAR r | XMP r/w/c DOCX r | JNG r/w | ODS r | RAW r/w | ZIP r DPX r | JP2 r/w | ODT r | RIFF r | DR4 r/w/c | JPEG r/w | OFR r | RSRC r | DSS r | K25 r | OGG r | RTF r | DV r | KDC r | OGV r | RW2 r/w | Meta Information ----------------------+----------------------+--------------------- EXIF r/w/c | CIFF r/w | Ricoh RMETA r GPS r/w/c | AFCP r/w | Picture Info r IPTC r/w/c | Kodak Meta r/w | Adobe APP14 r XMP r/w/c | FotoStation r/w | MPF r MakerNotes r/w/c | PhotoMechanic r/w | Stim r Photoshop IRB r/w/c | JPEG 2000 r | DPX r ICC Profile r/w/c | DICOM r | APE r MIE r/w/c | Flash r | Vorbis r JFIF r/w/c | FlashPix r | SPIFF r Ducky APP12 r/w/c | QuickTime r | DjVu r PDF r/w/c | Matroska r | M2TS r PNG r/w/c | MXF r | PE/COFF r Canon VRD r/w/c | PrintIM r | AVCHD r Nikon Capture r/w/c | FLAC r | ZIP r GeoTIFF r/w/c | ID3 r | (and more) See html/index.html for more details about ExifTool features. %prep %setup -n Image-ExifTool-%{version} %build perl Makefile.PL INSTALLDIRS=vendor %install rm -rf $RPM_BUILD_ROOT %makeinstall DESTDIR=%{?buildroot:%{buildroot}} find $RPM_BUILD_ROOT -name perllocal.pod | xargs rm %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) %doc Changes html %{_libdir}/perl5/* /usr/share/*/* %{_mandir}/*/* %{_bindir}/* %changelog * Tue May 06 2014 - Norbert de Rooy <nsrderooy@gmail.com> - Spec file fixed for Redhat 6 * Tue May 09 2006 - Niels Kristian Bech Jensen <nkbj@mail.tele.dk> - Spec file fixed for Mandriva Linux 2006. * Mon May 08 2006 - Volker Kuhlmann <VolkerKuhlmann@gmx.de> - Spec file fixed for SUSE. - Package available from: http://volker.dnsalias.net/soft/ * Sat Jun 19 2004 Kayvan Sylvan <kayvan@sylvan.com> - Image-ExifTool - Initial build. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/README�������������������������������������������������������������������������000644 �000765 �000024 �00000026056 12642461231 015255� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ExifTool by Phil Harvey (phil at owl.phy.queensu.ca) ---------------------------------------------------------------------------- ExifTool is a customizable set of Perl modules plus a full-featured application for reading and writing meta information in a wide variety of files, including the maker note information of many digital cameras by various manufacturers such as Canon, Casio, FLIR, FujiFilm, GE, HP, JVC/Victor, Kodak, Leaf, Minolta/Konica-Minolta, Nikon, Nintendo, Olympus/Epson, Panasonic/Leica, Pentax/Asahi, Phase One, Reconyx, Ricoh, Samsung, Sanyo, Sigma/Foveon and Sony. Below is a list of file types and meta information formats currently supported by ExifTool (r = read, w = write, c = create): File Types ------------+-------------+-------------+-------------+------------ 3FR r | DVB r/w | KEY r | ORF r/w | RWL r/w 3G2 r/w | DYLIB r | LA r | OTF r | RWZ r 3GP r/w | EIP r | LFP r | PAC r | RM r AA r | EPS r/w | LNK r | PAGES r | SEQ r AAX r/w | EPUB r | M2TS r | PBM r/w | SO r ACR r | ERF r/w | M4A/V r/w | PCD r | SR2 r/w AFM r | EXE r | MEF r/w | PDB r | SRF r AI r/w | EXIF r/w/c | MIE r/w/c | PDF r/w | SRW r/w AIFF r | EXR r | MIFF r | PEF r/w | SVG r APE r | EXV r/w/c | MKA r | PFA r | SWF r ARW r/w | F4A/V r/w | MKS r | PFB r | THM r/w ASF r | FFF r/w | MKV r | PFM r | TIFF r/w AVI r | FLA r | MNG r/w | PGF r | TORRENT r AZW r | FLAC r | MOBI r | PGM r/w | TTC r BMP r | FLV r | MODD r | PLIST r | TTF r BTF r | FPF r | MOI r | PICT r | VCF r CHM r | FPX r | MOS r/w | PMP r | VRD r/w/c COS r | GIF r/w | MOV r/w | PNG r/w | VSD r CR2 r/w | GZ r | MP3 r | PPM r/w | WAV r CRW r/w | HDP r/w | MP4 r/w | PPT r | WDP r/w CS1 r/w | HDR r | MPC r | PPTX r | WEBP r DCM r | HTML r | MPG r | PS r/w | WEBM r DCP r/w | ICC r/w/c | MPO r/w | PSB r/w | WMA r DCR r | ICS r | MQV r/w | PSD r/w | WMV r DFONT r | IDML r | MRW r/w | PSP r | WV r DIVX r | IIQ r/w | MXF r | QTIF r/w | X3F r/w DJVU r | IND r/w | NEF r/w | RA r | XCF r DLL r | INX r | NRW r/w | RAF r/w | XLS r DNG r/w | ITC r | NUMBERS r | RAM r | XLSX r DOC r | J2C r | ODP r | RAR r | XMP r/w/c DOCX r | JNG r/w | ODS r | RAW r/w | ZIP r DPX r | JP2 r/w | ODT r | RIFF r | DR4 r/w/c | JPEG r/w | OFR r | RSRC r | DSS r | K25 r | OGG r | RTF r | DV r | KDC r | OGV r | RW2 r/w | Meta Information ----------------------+----------------------+--------------------- EXIF r/w/c | CIFF r/w | Ricoh RMETA r GPS r/w/c | AFCP r/w | Picture Info r IPTC r/w/c | Kodak Meta r/w | Adobe APP14 r XMP r/w/c | FotoStation r/w | MPF r MakerNotes r/w/c | PhotoMechanic r/w | Stim r Photoshop IRB r/w/c | JPEG 2000 r | DPX r ICC Profile r/w/c | DICOM r | APE r MIE r/w/c | Flash r | Vorbis r JFIF r/w/c | FlashPix r | SPIFF r Ducky APP12 r/w/c | QuickTime r | DjVu r PDF r/w/c | Matroska r | M2TS r PNG r/w/c | MXF r | PE/COFF r Canon VRD r/w/c | PrintIM r | AVCHD r Nikon Capture r/w/c | FLAC r | ZIP r GeoTIFF r/w/c | ID3 r | (and more) See html/index.html for more details about ExifTool features. ExifTool can be downloaded from http://owl.phy.queensu.ca/~phil/exiftool/ RUNNING The exiftool script can be run right away without the need to install Image::ExifTool. For example, from within the exiftool directory you can extract the information from one of the included test files by typing: ./exiftool t/images/ExifTool.jpg If you move the exiftool script to a different directory, you must also either move the contents of the lib directory or install the Image::ExifTool package so the script can find the necessary libraries. Note: If you are using the Windows cmd shell, you may need to rename 'exiftool' to 'exiftool.pl' to run it directly from the command line. Alternatively, you can run exiftool with the command 'perl exiftool'. IF YOU ARE STILL CONFUSED The exiftool script is a command line application. You run it by typing commands in a terminal window. The first step is to determine the name of the directory where you downloaded the ExifTool distribution package. Assuming, for example, you downloaded it to a folder called "Desktop" in your home directory, then you would type the following commands in a terminal window to extract and run ExifTool: cd ~/Desktop gzip -dc Image-ExifTool-##.##.tar.gz | tar -xf - cd Image-ExifTool-##.## ./exiftool t/images/ExifTool.jpg Note: You must replace "##.##" in the above commands with the actual version number of ExifTool that you downloaded. These commands extract meta information from one of the test images. To use one of your images instead, enter the full path name of your file in place of "t/images/ExifTool.jpg". INSTALLATION You can install the Image::ExifTool package to make it available for use by other Perl scripts by typing the following: perl Makefile.PL make make test make install Notes: i) You need root access for the last step above. ii) Some Perl installations (like the standard OSX installation) may not contain the necessary files to complete the first step above. But no worries: You can install ExifTool manually by moving 'exiftool' and the 'lib' directory to any directory in your current PATH (ie. /usr/bin). iii) In Windows, "dmake" or "nmake" may be used if "make" is not available. The "nmake" utility may be downloaded from Microsoft at http://support.microsoft.com/default.aspx?scid=kb;en-us;Q132084 but note that is utility is very old, and may not work with Makefiles generated by newer Perl versions. (Also see html/install.html for more help with installation.) DEPENDENCIES Requires Perl version 5.004 or later. No other special libraries are required, however the following modules are recommended for decoding compressed and/or encrypted information from the indicated file types, and for calculating digest values for some information types: Archive::Zip (ZIP, DOCX, PPTX, XLSX, ODP, ODS, ODT, EIP, iWork) Compress::Zlib (DNG, PNG, PDF, DCM, MIE and SWF files) Digest::MD5 (PDF files, IPTC information, and JPG Extended XMP) Digest::SHA (PDF with AES-256 encryption) IO::Compress::Bzip2 (RWZ files) Win32::API (for proper handling of Windows file times) Win32API::File (for Windows Unicode file names and file times) Win32::FindFile (for Windows Unicode directory support, app only) Time::HiRes (allows generation of ProcessingTime tag) COPYRIGHT AND LICENSE Copyright 2003-2016, Phil Harvey This is free software; you can redistribute it and/or modify it under the same terms as Perl itself. DISTRIBUTION FILES Below is a list of the files/directories included in the full ExifTool distribution package: Changes - Revision history MANIFEST - Full list of distribution files META.yml - Standard CPAN dependency file Makefile.PL - Makefile for installation README - This file arg_files/ - Argument files to convert metadata formats: exif2iptc.args - Arguments for converting EXIF to IPTC exif2xmp.args - Arguments for converting EXIF to XMP gps2xmp.args - Arguments for converting GPS to XMP iptc2exif.args - Arguments for converting IPTC to EXIF iptc2xmp.args - Arguments for converting IPTC to XMP iptcCore.args - Complete list of IPTC Core XMP tags pdf2xmp.args - Arguments for converting PDF to XMP xmp2exif.args - Arguments for converting XMP to EXIF xmp2gps.args - Arguments for converting XMP to GPS xmp2iptc.args - Arguments for converting XMP to IPTC xmp2pdf.args - Arguments for converting XMP to PDF config_files/ - Sample ExifTool configuration files: ExifTool_config - General example showing basic features convert_regions.config - Convert between MWG and MP face regions photoshop_paths.config - For extracting or copying Photoshop paths picasa_faces.config - Convert from Picasa to MWG/MP face regions exiftool - The exiftool application (Perl script) fmt_files/ - Output formatting example files: gpx.fmt - Format file for creating GPX track gpx_wpt.fmt - Format file for creating GPX waypoints kml.fmt - Format file for creating KML output files html/ - HTML documentation html/TagNames/ - HTML tag name documentation lib/ - ExifTool Perl library modules perl-Image-ExifTool.spec - Red Hat Packaging Manager specification file t/ - Verification test code t/images/ - Verification test images ADDITIONAL INFORMATION Read the following files included in the full distribution for more information: html/index.html - Main ExifTool documentation html/install.html - Installation instructions html/history.html - Revision history html/ExifTool.html - API documentation html/TagNames/index.html - Tag name documentation html/geotag.html - Geotag feature html/faq.html - Frequently asked questions html/filename.html - Renaming/moving files html/metafiles.html - Working with metadata sidecar files html/struct.html - Working with structured XMP information lib/Image/ExifTool/README - ExifTool library modules documentation and if you have installed Image::ExifTool, you can also consult perldoc or the man pages: perldoc exiftool perldoc Image::ExifTool perldoc Image::ExifTool::TagNames man exiftool man Image::ExifTool man Image::ExifTool::TagNames Note: If the man pages don't work, it is probably because your man path is not set to include the installed documentation. See "man man" for information about how to set the man path. ---------------------------------------------------------------------------- ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/�����������������������������������������������������������������������������000755 �000765 �000024 �00000000000 12650447263 014637� 5����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/AFCP.t�����������������������������������������������������������������������000644 �000765 �000024 �00000002310 11510412077 015516� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/AFCP.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::AFCP; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'AFCP'; my $testnum = 1; # test 2: Extract information from AFCP.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/AFCP.jpg', {Duplicates => 1}); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Test writing a bunch of information { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/IPTC.jpg'); my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->WriteInfo('t/images/AFCP.jpg',$testfile); my $info = $exifTool->ImageInfo($testfile, {Group1 => 'IPTC2'}); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/AFCP_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000004362 12546457274 016336� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: AFCP.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1110 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:04 14:02:27-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:05-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:02-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [IPTC, IPTC2, Other] 0 - Application Record Version: 2 [IPTC, IPTC2, Other] 15 - Category: p [IPTC, IPTC2, Time] 55 - Date Created: 2005:12:23 [IPTC, IPTC2, Other] 5 - Object Name: object name [IPTC, IPTC2, Other] 10 - Urgency: 2 [IPTC, IPTC2, Other] 20 - Supplemental Categories: supp cat [IPTC, IPTC2, Other] 25 - Keywords: keyword [IPTC, IPTC2, Other] 40 - Special Instructions: special instructions [IPTC, IPTC2, Author] 80 - By-line: byline [IPTC, IPTC2, Author] 85 - By-line Title: byline title [IPTC, IPTC2, Location] 90 - City: city [IPTC, IPTC2, Location] 101 - Country-Primary Location Name: country name [IPTC, IPTC2, Other] 103 - Original Transmission Reference: otr [IPTC, IPTC2, Other] 105 - Headline: headline [IPTC, IPTC2, Author] 110 - Credit: credit [IPTC, IPTC2, Author] 115 - Source: source [IPTC, IPTC2, Author] 116 - Copyright Notice: copy freely [IPTC, IPTC2, Other] 120 - Caption-Abstract: ExifTool AFCP test [IPTC, IPTC2, Author] 122 - Writer-Editor: caption writer [IPTC, IPTC2, Location] 95 - Province-State: state [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/AFCP_3.out�������������������������������������������������������������������000644 �000765 �000024 �00000002165 11521301644 016313� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[IPTC, IPTC2, Other] 0 - Application Record Version: 2 [IPTC, IPTC2, Other] 15 - Category: 1 [IPTC, IPTC2, Time] 55 - Date Created: 2004:02:26 [IPTC, IPTC2, Other] 5 - Object Name: Test IPTC picture [IPTC, IPTC2, Other] 10 - Urgency: 8 (least urgent) [IPTC, IPTC2, Other] 20 - Supplemental Categories: amazing, image, utilities [IPTC, IPTC2, Other] 25 - Keywords: ExifTool, Test, IPTC [IPTC, IPTC2, Other] 40 - Special Instructions: What instructions [IPTC, IPTC2, Author] 80 - By-line: Phil Harvey [IPTC, IPTC2, Author] 85 - By-line Title: My Position [IPTC, IPTC2, Location] 90 - City: Kingston [IPTC, IPTC2, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC2, Other] 103 - Original Transmission Reference: What is a transmission reference [IPTC, IPTC2, Other] 105 - Headline: No headline [IPTC, IPTC2, Author] 110 - Credit: My Credit [IPTC, IPTC2, Author] 115 - Source: I'm the source [IPTC, IPTC2, Author] 116 - Copyright Notice: Copyright 2004 Phil Harvey [IPTC, IPTC2, Other] 120 - Caption-Abstract: A witty caption [IPTC, IPTC2, Author] 122 - Writer-Editor: I wrote it [IPTC, IPTC2, Location] 95 - Province-State: Ont �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/AIFF.t�����������������������������������������������������������������������000644 �000765 �000024 �00000001255 11327642463 015533� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/AIFF.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::AIFF; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'AIFF'; my $testnum = 1; # test 2: Extract information from AIFF.aif { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/AIFF.aif'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/AIFF_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000003371 12546457274 016331� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: AIFF.aif [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 290 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:06 15:05:23-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:02-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: AIFF [File, File, Image] FileTypeExtension - File Type Extension: aiff [File, File, Image] MIMEType - MIME Type: audio/x-aiff [File, File, Image] ID3Size - ID3 Size: 172 [AIFF, AIFF, Time] 0 - Comment Time: 2004:03:08 05:28:46 [AIFF, AIFF, Audio] 2 - Comment: ding.wav [AIFF, AIFF, Audio] 0 - Num Channels: 1 [AIFF, AIFF, Audio] 1 - Num Sample Frames: 11554 [AIFF, AIFF, Audio] 3 - Sample Size: 8 [AIFF, AIFF, Audio] 4 - Sample Rate: 22050 [AIFF, AIFF, Audio] NAME - Name: ExifTool test AIFF [AIFF, AIFF, Author] AUTH - Author: Phil Harvey [ID3, ID3v2_2, Audio] ULT - Lyrics: my lyrics [ID3, ID3v2_2, Audio] TCM - Composer: Composer [ID3, ID3v2_2, Audio] COM - Comment: comments [ID3, ID3v2_2, Author] TP1 - Artist: the artist [ID3, ID3v2_2, Audio] TAL - Album: the album [ID3, ID3v2_2, Audio] TT1 - Grouping: grouping [ID3, ID3v2_2, Audio] TRK - Track: 1 [ID3, ID3v2_2, Audio] TPA - Part Of Set: 1/1 [ID3, ID3v2_2, Time] TYE - Year: 2006 [ID3, ID3v2_2, Audio] TCO - Genre: Techno [ID3, ID3v2_2, Audio] TCP - Compilation: Yes [Composite, Composite, Time] DateTimeOriginal - Date/Time Original: 2006 [Composite, Composite, Other] Duration - Duration: 0.52 s �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/APE.t������������������������������������������������������������������������000644 �000765 �000024 �00000002007 11327642463 015427� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/APE.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::APE; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'APE'; my $testnum = 1; # test 2: Extract information from APE test file { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/APE.ape'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Extract information from MCP test file containing 3 different # types of meta information: ID3v1, ID3v2 and APE { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/APE.mpc'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/APE_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000003213 12546457274 016224� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: APE.ape [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 2.1 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:11:14 11:04:22-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:38-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: APE [File, File, Image] FileTypeExtension - File Type Extension: ape [File, File, Image] MIMEType - MIME Type: audio/x-monkeys-audio [APE, MAC, Audio] 0 - Compression Level: 3000 [APE, MAC, Audio] 2 - Blocks Per Frame: 73728 [APE, MAC, Audio] 4 - Final Frame Blocks: 42662 [APE, MAC, Audio] 6 - Total Frames: 2 [APE, MAC, Audio] 8 - Bits Per Sample: 16 [APE, MAC, Audio] 9 - Channels: 2 [APE, MAC, Audio] 10 - Sample Rate: 44100 [APE, APE, Audio] Track - Track: 4 [APE, APE, Audio] Year - Year: 2005 [APE, APE, Audio] Genre - Genre: Electronic [APE, APE, Audio] Artist - Artist: Kraftwerk [APE, APE, Audio] Album - Album: Cover Art Test [APE, APE, Audio] Tool Version - Tool Version: 11.1.102 [APE, APE, Audio] Tool Name - Tool Name: Media Center [APE, APE, Audio] Title - Title: Men Machine Live [APE, APE, Audio] Media Jukebox: Date - Media Jukebox Date: 38353 [APE, APE, Audio] Cover Art (front) Desc - Cover Art Front Desc: X:\_kuvat\Kraftwerk - Cover Art Test.jpg [APE, APE, Preview] Cover Art (front) - Cover Art Front: (Binary data 1761 bytes) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/APE_3.out��������������������������������������������������������������������000644 �000765 �000024 �00000006155 12546457274 016235� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: APE.mpc [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 2.5 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:11:14 15:06:40-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:38-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: MPC [File, File, Image] FileTypeExtension - File Type Extension: mpc [File, File, Image] MIMEType - MIME Type: audio/x-musepack [File, File, Image] ID3Size - ID3 Size: 391 [MPC, MPC, Audio] Bit032-063 - Total Frames: 102 [MPC, MPC, Audio] Bit080-081 - Sample Rate: 44100 [MPC, MPC, Audio] Bit084-087 - Quality: 5 (Standard) [MPC, MPC, Audio] Bit088-093 - Max Band: 28 [MPC, MPC, Audio] Bit096-111 - Replay Gain Track Peak: 0 [MPC, MPC, Audio] Bit112-127 - Replay Gain Track Gain: 0 [MPC, MPC, Audio] Bit128-143 - Replay Gain Album Peak: 0 [MPC, MPC, Audio] Bit144-159 - Replay Gain Album Gain: 0 [MPC, MPC, Audio] Bit179 - Fast Seek: No [MPC, MPC, Audio] Bit191 - Gapless: Yes [MPC, MPC, Audio] Bit216-223 - Encoder Version: 1.1.5 [APE, APE, Audio] Track - Track: 4 [APE, APE, Audio] Year - Year: 2005 [APE, APE, Audio] Genre - Genre: Electronic [APE, APE, Audio] Artist - Artist: Kraftwerk [APE, APE, Audio] Album - Album: Cover Art Test [APE, APE, Audio] Tool Version - Tool Version: 11.1.102 [APE, APE, Audio] Tool Name - Tool Name: Media Center [APE, APE, Audio] Title - Title: Men Machine Live [APE, APE, Audio] Media Jukebox: Date - Media Jukebox Date: 38353 [APE, APE, Audio] Cover Art (front) Desc - Cover Art Front Desc: X:\_kuvat\Kraftwerk - Cover Art Test.jpg [APE, APE, Preview] Cover Art (front) - Cover Art Front: (Binary data 1761 bytes) [ID3, ID3v2_2, Audio] TRK - Track: 1/5 [ID3, ID3v2_2, Audio] TPA - Part Of Set: 1/2 [ID3, ID3v2_2, Audio] RVA - Relative Volume Adjustment: +18.0% Right, +18.0% Left [ID3, ID3v2_2, Audio] ULT - Lyrics: Do-wap she-bang [ID3, ID3v2_2, Image] PIC-1 - Picture Format: JPG [ID3, ID3v2_2, Image] PIC-2 - Picture Type: Other [ID3, ID3v2_2, Image] PIC-3 - Picture Description: comment [ID3, ID3v2_2, Preview] PIC - Picture: (Binary data 15 bytes) [ID3, ID3v2_2, Audio] TT2 - Title: ExifTool Test [ID3, ID3v2_2, Author] TP1 - Artist: Phil Harvey [ID3, ID3v2_2, Audio] TCM - Composer: A Composer [ID3, ID3v2_2, Audio] TAL - Album: Phil's Greatest Hits [ID3, ID3v2_2, Audio] TT1 - Grouping: This group [ID3, ID3v2_2, Time] TYE - Year: 2005 [ID3, ID3v2_2, Audio] TCO - Genre: Testing [ID3, ID3v2_2, Audio] COM - Comment: My Comments [ID3, ID3v1, Audio] 3 - Title: A 4s sample for testing embedd [ID3, ID3v1, Author] 33 - Artist: Who Knows [ID3, ID3v1, Audio] 63 - Album: The Test Album [ID3, ID3v1, Time] 93 - Year: 2006 [ID3, ID3v1, Audio] 97 - Comment: a nice comment [ID3, ID3v1, Audio] 125 - Track: 1 [ID3, ID3v1, Audio] 127 - Genre: Funk [Composite, Composite, Time] DateTimeOriginal - Date/Time Original: 2005 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ASF.t������������������������������������������������������������������������000644 �000765 �000024 �00000001250 11327642463 015432� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/ASF.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::ASF; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'ASF'; my $testnum = 1; # test 2: Extract information from ASF.wmv { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/ASF.wmv'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ASF_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000006350 12546457274 016235� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.96 [File, System, Image] FileName - File Name: ASF.wmv [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 12 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2005:12:27 07:29:29-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:05:13 13:33:45-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:02-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: WMV [File, File, Image] FileTypeExtension - File Type Extension: wmv [File, File, Image] MIMEType - MIME Type: video/x-ms-wmv [ASF, ASF, Video] ToolName - Tool Name: Photo Story 3 for Windows [ASF, ASF, Video] Publisher - Publisher: Photo Story 3 for Windows [ASF, ASF, Video] ToolVersion - Tool Version: 3.0.1115.0 [ASF, ASF, Video] Genre - Genre: Photo Story [ASF, ASF, Image] 0 - Picture Type: Front Cover [ASF, ASF, Image] 1 - Picture MIME Type: image/jpeg [ASF, ASF, Preview] 3 - Picture: (Binary data 6587 bytes) [ASF, ASF, Video] IsVBR - Is VBR: True [ASF, ASF, Video] ASFLeakyBucketPairs - ASF Leaky Bucket Pairs: (Binary data 114 bytes) [ASF, ASF, Video] 0 - File ID: 5F69B0C4-04F7-4B21-9842-46CCA542D8D3 [ASF, ASF, Video] 16 - File Length: 414891 [ASF, ASF, Time] 24 - Creation Date: 2004:10:28 17:23:34Z [ASF, ASF, Video] 32 - Data Packets: 287 [ASF, ASF, Video] 40 - Play Duration: 0:01:39 [ASF, ASF, Video] 48 - Send Duration: 0:01:37 [ASF, ASF, Video] 56 - Preroll: 5000 [ASF, ASF, Video] 64 - Flags: 2 [ASF, ASF, Video] 68 - Min Packet Size: 1400 [ASF, ASF, Video] 72 - Max Packet Size: 1400 [ASF, ASF, Video] 76 - Max Bitrate: 30.6 kbps [ASF, ASF, Video] MediaClassPrimaryID - Media Class Primary ID: DB9830BD-3AB3-4FAB-8A37-1A995F7FF74B [ASF, ASF, Video] MediaClassSecondaryID - Media Class Secondary ID: 0B710218-8C0C-475E-AF73-4C41C0C8F8CE [ASF, ASF, Video] IsVBR - Is VBR: False [ASF, ASF, Video] IsVBR - Is VBR: False [ASF, ASF, Video] WMADRCPeakReference - WMADRC Peak Reference: 23311 [ASF, ASF, Video] WMADRCAverageReference - WMADRC Average Reference: 5966 [ASF, ASF, Other] AudioCodecName - Audio Codec Name: Windows Media Audio 9.1 [ASF, ASF, Other] AudioCodecDescription - Audio Codec Description: 20 kbps, 22 kHz, stereo 1-pass CBR [ASF, ASF, Other] VideoCodecName - Video Codec Name: Windows Media Video 9 Image v2 [ASF, ASF, Other] VideoCodecDescription - Video Codec Description: [ASF, ASF, Video] 0 - Stream Type: Audio [ASF, ASF, Video] 16 - Error Correction Type: Audio Spread [ASF, ASF, Video] 32 - Time Offset: 0 s [ASF, ASF, Video] 48 - Stream Number: 1 [ASF, ASF, Video] 54 - Audio Codec ID: Windows Media Audio V2 V7 V8 V9 / DivX audio (WMA) / Alex AC3 Audio [ASF, ASF, Video] 56 - Audio Channels: 2 [ASF, ASF, Video] 58 - Audio Sample Rate: 22050 [ASF, ASF, Video] 0 - Stream Type: Video [ASF, ASF, Video] 16 - Error Correction Type: No Error Correction [ASF, ASF, Video] 32 - Time Offset: 0 s [ASF, ASF, Video] 48 - Stream Number: 2 [ASF, ASF, Video] 54 - Image Width: 160 [ASF, ASF, Video] 58 - Image Height: 120 [Composite, Composite, Image] ImageSize - Image Size: 160x120 [Composite, Composite, Image] Megapixels - Megapixels: 0.019 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Audible.t��������������������������������������������������������������������000644 �000765 �000024 �00000001271 12511224775 016367� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Audible.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Audible; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Audible'; my $testnum = 1; # test 2: Extract information from test file { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Audible.aa'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Audible_2.out����������������������������������������������������������������000644 �000765 �000024 �00000005513 12546457274 017171� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Audible.aa [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1322 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:10 06:46:11-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:38-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: AA [File, File, Image] FileTypeExtension - File Type Extension: aa [File, File, Image] MIMEType - MIME Type: audio/audible [Audible, Audible, Audio] product_id - Product Id: BK_ADBL_123456a_mp332 [Audible, Audible, Audio] parent_id - Parent Id: BK_ADBL_123456 [Audible, Audible, Audio] title - Title: Test: This is the title of the big book (Unabridged) [Audible, Audible, Author] author - Author: Philip J Harvey [Audible, Audible, Audio] provider - Provider: ExifTool Test Lib [Audible, Audible, Audio] narrator - Narrator: Nobody that I know [Audible, Audible, Audio] price - Price: 98.95 [Audible, Audible, Time] pubdate - Publish Date: 08-APR-2015 [Audible, Audible, Audio] description - Description: This is the book description [Audible, Audible, Audio] long_description - Long Description: This is the long book description [Audible, Audible, Author] copyright - Copyright: ©2015, Philip J Harvey; (P)2015 ExifTool Publisher [Audible, Audible, Audio] short_title - Short Title: Short Titley (Unabridged) [Audible, Audible, Audio] is_aggregation - Is Aggregation: collection [Audible, Audible, Audio] title_id - Title Id: BK_ADBL_123456a [Audible, Audible, Audio] codec - Codec: mp332 [Audible, Audible, Audio] HeaderSeed - Header Seed: 1234567890 [Audible, Audible, Audio] EncryptedBlocks - Encrypted Blocks: 23421 [Audible, Audible, Audio] HeaderKey - Header Key: 1234569717 192057361 0712658018 4878930500 [Audible, Audible, Audio] license_list - License List: 12345678 [Audible, Audible, Audio] CPUType - CPU Type: 1 [Audible, Audible, Audio] license_count - License Count: 1 [Audible, Audible, Audio] 7eb298ac1328 - Tag 7eb 298ac 1328: 64863450EA7B67906FE619AC697E60D13630E760 [Audible, Audible, Audio] parent_short_title - Parent Short Title: Test2 (Unabridged) [Audible, Audible, Audio] parent_title - Parent Title: This is the title of the parent (Unabridged) [Audible, Audible, Audio] aggregation_id - Aggregation Id: BK_ADBL_123456 [Audible, Audible, Time] pub_date_start - Publish Date Start: 08-APR-2015 [Audible, Audible, Audio] short_description - Short Description: This is the short description [Audible, Audible, Audio] user_alias - User Alias: LKJ4HDY872HSVJ [Audible, Audible, Preview] _cover_art - Cover Art: (Binary data 18 bytes) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/BigTIFF.t��������������������������������������������������������������������000644 �000765 �000024 �00000001274 11347742267 016206� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/BigTIFF.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::BigTIFF; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'BigTIFF'; my $testnum = 1; # test 2: Extract information from BigTIFF.btf { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/BigTIFF.btf'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/BigTIFF_2.out����������������������������������������������������������������000644 �000765 �000024 �00000002350 12546457274 016772� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: BigTIFF.btf [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 384 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:03:16 13:49:45-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:02-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: BTF [File, File, Image] FileTypeExtension - File Type Extension: btf [File, File, Image] MIMEType - MIME Type: image/x-tiff-big [EXIF, IFD0, Image] 256 - Image Width: 8 [EXIF, IFD0, Image] 257 - Image Height: 8 [EXIF, IFD0, Image] 258 - Bits Per Sample: 8 8 8 [EXIF, IFD0, Image] 262 - Photometric Interpretation: RGB [EXIF, IFD0, Image] 273 - Strip Offsets: 192 [EXIF, IFD0, Image] 277 - Samples Per Pixel: 3 [EXIF, IFD0, Image] 278 - Rows Per Strip: 8 [EXIF, IFD0, Image] 279 - Strip Byte Counts: 192 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/BMP.t������������������������������������������������������������������������000644 �000765 �000024 �00000001250 11327642463 015437� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/BMP.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::BMP; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'BMP'; my $testnum = 1; # test 2: Extract information from BMP.bmp { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/BMP.bmp'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/BMP_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000002424 12546457274 016240� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: BMP.bmp [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1142 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2005:11:14 14:47:21-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:02-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: BMP [File, File, Image] FileTypeExtension - File Type Extension: bmp [File, File, Image] MIMEType - MIME Type: image/bmp [File, File, Image] 4 - Image Width: 8 [File, File, Image] 8 - Image Height: 8 [File, File, Image] 12 - Planes: 1 [File, File, Image] 14 - Bit Depth: 8 [File, File, Image] 16 - Compression: None [File, File, Image] 20 - Image Length: 64 [File, File, Image] 24 - Pixels Per Meter X: 2835 [File, File, Image] 28 - Pixels Per Meter Y: 2835 [File, File, Image] 32 - Num Colors: 256 [File, File, Image] 36 - Num Important Colors: 256 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Canon.t����������������������������������������������������������������������000644 �000765 �000024 �00000002214 12642471675 016066� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Canon.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Canon; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Canon'; my $testnum = 1; # test 2: Extract information from Canon1DmkIII.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Canon1DmkIII.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write CanonCustom2 information { ++$testnum; my @writeInfo = ( [ISOSpeedRange => 'Enable; 1600; 200'], [TimerLength => 'Enable; 6 sec: 5; 16 sec: 20; After release: 6'], ); my @check = qw(ISOSpeedRange TimerLength OriginalDecisionData Warning); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/Canon1DmkIII.jpg', \@check); print "ok $testnum\n"; } # end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Canon_2.out������������������������������������������������������������������000644 �000765 �000024 �00000054700 12546457274 016664� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Canon1DmkIII.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 8.1 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2008:01:18 14:10:05-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:20-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS-1D Mark III [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2007:02:22 17:02:42 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/125 [EXIF, ExifIFD, Image] 33437 - F Number: 5.6 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 3200 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2007:02:22 17:02:42 [EXIF, ExifIFD, Time] 36868 - Create Date: 2007:02:22 17:02:42 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/128 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 5.7 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: On, Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 35.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Time] 37520 - Sub Sec Time: 81 [EXIF, ExifIFD, Time] 37521 - Sub Sec Time Original: 81 [EXIF, ExifIFD, Time] 37522 - Sub Sec Time Digitized: 81 [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 3888 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 2592 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3512.195122 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3521.73913 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, GPS, Location] 0 - GPS Version ID: 2.2.0.0 [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 8060 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Canon, Camera] 1 - Macro Mode: Normal [MakerNotes, Canon, Camera] 2 - Self Timer: Off [MakerNotes, Canon, Camera] 3 - Quality: Fine [MakerNotes, Canon, Camera] 4 - Canon Flash Mode: External flash [MakerNotes, Canon, Camera] 5 - Continuous Drive: Continuous, High [MakerNotes, Canon, Camera] 7 - Focus Mode: AI Servo AF [MakerNotes, Canon, Camera] 9 - Record Mode: CR2+JPEG [MakerNotes, Canon, Camera] 10 - Canon Image Size: Large [MakerNotes, Canon, Camera] 11 - Easy Mode: Manual [MakerNotes, Canon, Camera] 12 - Digital Zoom: None [MakerNotes, Canon, Camera] 13 - Contrast: Normal [MakerNotes, Canon, Camera] 14 - Saturation: Normal [MakerNotes, Canon, Camera] 17 - Metering Mode: Evaluative [MakerNotes, Canon, Camera] 18 - Focus Range: Not Known [MakerNotes, Canon, Camera] 20 - Canon Exposure Mode: Program AE [MakerNotes, Canon, Camera] 23 - Max Focal Length: 35 mm [MakerNotes, Canon, Camera] 24 - Min Focal Length: 16 mm [MakerNotes, Canon, Camera] 25 - Focal Units: 1/mm [MakerNotes, Canon, Camera] 26 - Max Aperture: 2.8 [MakerNotes, Canon, Camera] 27 - Min Aperture: 23 [MakerNotes, Canon, Camera] 28 - Flash Activity: 145 [MakerNotes, Canon, Camera] 29 - Flash Bits: (none) [MakerNotes, Canon, Camera] 36 - Zoom Source Width: 0 [MakerNotes, Canon, Camera] 37 - Zoom Target Width: 0 [MakerNotes, Canon, Camera] 41 - Manual Flash Output: n/a [MakerNotes, Canon, Camera] 42 - Color Tone: Normal [MakerNotes, Canon, Camera] 46 - SRAW Quality: n/a [MakerNotes, Canon, Image] 1 - Focal Length: 35 mm [MakerNotes, Canon, Image] 1 - Auto ISO: 100 [MakerNotes, Canon, Image] 2 - Base ISO: 3200 [MakerNotes, Canon, Image] 3 - Measured EV: 3.62 [MakerNotes, Canon, Image] 4 - Target Aperture: 5.7 [MakerNotes, Canon, Image] 5 - Target Exposure Time: 1/128 [MakerNotes, Canon, Image] 6 - Exposure Compensation: 0 [MakerNotes, Canon, Image] 7 - White Balance: Auto [MakerNotes, Canon, Image] 8 - Slow Shutter: None [MakerNotes, Canon, Image] 9 - Shot Number In Continuous Burst: 0 [MakerNotes, Canon, Camera] 10 - Optical Zoom Code: n/a [MakerNotes, Canon, Camera] 12 - Camera Temperature: 26 C [MakerNotes, Canon, Image] 15 - Flash Exposure Compensation: 0 [MakerNotes, Canon, Image] 16 - Auto Exposure Bracketing: Off [MakerNotes, Canon, Image] 17 - AEB Bracket Value: 0 [MakerNotes, Canon, Image] 18 - Control Mode: Camera Local Control [MakerNotes, Canon, Image] 21 - F Number: 5.7 [MakerNotes, Canon, Image] 22 - Exposure Time: 1/128 [MakerNotes, Canon, Image] 23 - Measured EV 2: 3.75 [MakerNotes, Canon, Image] 24 - Bulb Duration: 0 [MakerNotes, Canon, Camera] 26 - Camera Type: EOS High-end [MakerNotes, Canon, Image] 28 - ND Filter: n/a [MakerNotes, Canon, Image] 6 - Canon Image Type: Canon EOS-1D Mark III [MakerNotes, Canon, Camera] 7 - Canon Firmware Version: Firmware Version 5.3.1 [MakerNotes, Canon, Camera] 9 - Owner Name: [MakerNotes, Canon, Camera] 12 - Serial Number: 500292 [MakerNotes, Canon, Image] 3 - F Number: 5.7 [MakerNotes, Canon, Image] 4 - Exposure Time: 1/128 [MakerNotes, Canon, Image] 6 - ISO: 3200 [MakerNotes, Canon, Camera] 24 - Camera Temperature: 26 C [MakerNotes, Canon, Camera] 29 - Focal Length: 35 mm [MakerNotes, Canon, Camera] 48 - Camera Orientation: Horizontal (normal) [MakerNotes, Canon, Camera] 67 - Focus Distance Upper: 2.19 m [MakerNotes, Canon, Camera] 69 - Focus Distance Lower: 1.13 m [MakerNotes, Canon, Camera] 94 - White Balance: Auto [MakerNotes, Canon, Camera] 98 - Color Temperature: 5200 [MakerNotes, Canon, Camera] 134 - Picture Style: Neutral [MakerNotes, Canon, Camera] 273 - Lens Type: Canon EF 16-35mm f/2.8L II [MakerNotes, Canon, Camera] 275 - Min Focal Length: 16 mm [MakerNotes, Canon, Camera] 277 - Max Focal Length: 35 mm [MakerNotes, Canon, Camera] 310 - Firmware Version: 5.3.1 [MakerNotes, Canon, Image] 370 - File Index: 232 [MakerNotes, Canon, Camera] 374 - Shutter Count: 1 [MakerNotes, Canon, Image] 382 - Directory Index: 108 [MakerNotes, Canon, Camera] 0 - Contrast Standard: 0 [MakerNotes, Canon, Camera] 4 - Sharpness Standard: 3 [MakerNotes, Canon, Camera] 8 - Saturation Standard: 0 [MakerNotes, Canon, Camera] 12 - Color Tone Standard: 0 [MakerNotes, Canon, Camera] 24 - Contrast Portrait: 0 [MakerNotes, Canon, Camera] 28 - Sharpness Portrait: 2 [MakerNotes, Canon, Camera] 32 - Saturation Portrait: 0 [MakerNotes, Canon, Camera] 36 - Color Tone Portrait: 0 [MakerNotes, Canon, Camera] 48 - Contrast Landscape: 0 [MakerNotes, Canon, Camera] 52 - Sharpness Landscape: 4 [MakerNotes, Canon, Camera] 56 - Saturation Landscape: 0 [MakerNotes, Canon, Camera] 60 - Color Tone Landscape: 0 [MakerNotes, Canon, Camera] 72 - Contrast Neutral: 0 [MakerNotes, Canon, Camera] 76 - Sharpness Neutral: 0 [MakerNotes, Canon, Camera] 80 - Saturation Neutral: 0 [MakerNotes, Canon, Camera] 84 - Color Tone Neutral: 0 [MakerNotes, Canon, Camera] 96 - Contrast Faithful: 0 [MakerNotes, Canon, Camera] 100 - Sharpness Faithful: 0 [MakerNotes, Canon, Camera] 104 - Saturation Faithful: 0 [MakerNotes, Canon, Camera] 108 - Color Tone Faithful: 0 [MakerNotes, Canon, Camera] 120 - Contrast Monochrome: 0 [MakerNotes, Canon, Camera] 124 - Sharpness Monochrome: 3 [MakerNotes, Canon, Camera] 136 - Filter Effect Monochrome: None [MakerNotes, Canon, Camera] 140 - Toning Effect Monochrome: None [MakerNotes, Canon, Camera] 144 - Contrast User Def 1: 0 [MakerNotes, Canon, Camera] 148 - Sharpness User Def 1: 3 [MakerNotes, Canon, Camera] 152 - Saturation User Def 1: 0 [MakerNotes, Canon, Camera] 156 - Color Tone User Def 1: 0 [MakerNotes, Canon, Camera] 160 - Filter Effect User Def 1: None [MakerNotes, Canon, Camera] 164 - Toning Effect User Def 1: None [MakerNotes, Canon, Camera] 168 - Contrast User Def 2: 0 [MakerNotes, Canon, Camera] 172 - Sharpness User Def 2: 3 [MakerNotes, Canon, Camera] 176 - Saturation User Def 2: 0 [MakerNotes, Canon, Camera] 180 - Color Tone User Def 2: 0 [MakerNotes, Canon, Camera] 184 - Filter Effect User Def 2: None [MakerNotes, Canon, Camera] 188 - Toning Effect User Def 2: None [MakerNotes, Canon, Camera] 192 - Contrast User Def 3: 0 [MakerNotes, Canon, Camera] 196 - Sharpness User Def 3: 3 [MakerNotes, Canon, Camera] 200 - Saturation User Def 3: 0 [MakerNotes, Canon, Camera] 204 - Color Tone User Def 3: 0 [MakerNotes, Canon, Camera] 208 - Filter Effect User Def 3: None [MakerNotes, Canon, Camera] 212 - Toning Effect User Def 3: None [MakerNotes, Canon, Camera] 216 - User Def 1 Picture Style: Standard [MakerNotes, Canon, Camera] 218 - User Def 2 Picture Style: Standard [MakerNotes, Canon, Camera] 220 - User Def 3 Picture Style: Standard [MakerNotes, Canon, Time] 1114 - Time Stamp 1: 2007:02:22 17:02:42 [MakerNotes, Canon, Time] 1118 - Time Stamp: 1970:01:02 01:30:10 [MakerNotes, Canon, Camera] 16 - Canon Model ID: EOS-1D Mark III [MakerNotes, Canon, Camera] 19 - Thumbnail Image Valid Area: 0 159 7 112 [MakerNotes, Canon, Camera] 21 - Serial Number Format: Format 2 [MakerNotes, Canon, Camera] 1 - AF Area Mode: Single-point AF [MakerNotes, Canon, Camera] 2 - Num AF Points: 45 [MakerNotes, Canon, Camera] 3 - Valid AF Points: 45 [MakerNotes, Canon, Image] 4 - Canon Image Width: 3888 [MakerNotes, Canon, Image] 5 - Canon Image Height: 2592 [MakerNotes, Canon, Camera] 6 - AF Image Width: 3888 [MakerNotes, Canon, Camera] 7 - AF Image Height: 2592 [MakerNotes, Canon, Camera] 8 - AF Area Widths: 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 112 [MakerNotes, Canon, Camera] 9 - AF Area Heights: 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 [MakerNotes, Canon, Camera] 10 - AF Area X Positions: -625 -416 -209 0 209 416 625 -917 -723 -520 -311 -104 104 311 520 723 917 -1041 -832 -625 -416 -206 0 206 416 625 832 1041 -917 -723 -520 -311 -104 104 311 520 723 917 -625 -416 -209 0 209 416 625 [MakerNotes, Canon, Camera] 11 - AF Area Y Positions: -554 -554 -554 -554 -554 -554 -554 -277 -277 -277 -277 -277 -277 -277 -277 -277 -277 0 0 0 0 0 0 0 0 0 0 0 277 277 277 277 277 277 277 277 277 277 554 554 554 554 554 554 554 [MakerNotes, Canon, Camera] 12 - AF Points In Focus: 13 [MakerNotes, Canon, Camera] 13 - AF Points Selected: 13 [MakerNotes, Canon, Camera] 131 - Original Decision Data Offset: 3326 [MakerNotes, Canon, Image] 3 - Bracket Mode: Off [MakerNotes, Canon, Image] 4 - Bracket Value: 0 [MakerNotes, Canon, Image] 5 - Bracket Shot Number: 0 [MakerNotes, Canon, Image] 7 - Raw Jpg Size: Large [MakerNotes, Canon, Image] 8 - Long Exposure Noise Reduction 2: Off [MakerNotes, Canon, Image] 9 - WB Bracket Mode: Off [MakerNotes, Canon, Image] 12 - WB Bracket Value AB: 0 [MakerNotes, Canon, Image] 13 - WB Bracket Value GM: 0 [MakerNotes, Canon, Image] 19 - Live View Shooting: Off [MakerNotes, Canon, Image] 20 - Focus Distance Upper: 2.19 m [MakerNotes, Canon, Image] 21 - Focus Distance Lower: 1.13 m [MakerNotes, Canon, Camera] 149 - Lens Model: EF16-35mm f/2.8L II USM [MakerNotes, Canon, Camera] 150 - Internal Serial Number: G002669 [MakerNotes, Canon, Camera] 151 - Dust Removal Data: (Binary data 1024 bytes) [MakerNotes, Canon, Camera] 0 - Crop Left Margin: 0 [MakerNotes, Canon, Camera] 1 - Crop Right Margin: 0 [MakerNotes, Canon, Camera] 2 - Crop Top Margin: 0 [MakerNotes, Canon, Camera] 3 - Crop Bottom Margin: 0 [MakerNotes, CanonCustom, Camera] 257 - Exposure Level Increments: 1/3-stop set, 1/3-stop comp. [MakerNotes, CanonCustom, Camera] 258 - ISO Speed Increments: 1/3 Stop [MakerNotes, CanonCustom, Camera] 259 - ISO Speed Range: Disable; Max 3200; Min 100 [MakerNotes, CanonCustom, Camera] 260 - AEB Auto Cancel: On [MakerNotes, CanonCustom, Camera] 261 - AEB Sequence: 0,-,+ [MakerNotes, CanonCustom, Camera] 262 - AEB Shot Count: 7 shots [MakerNotes, CanonCustom, Camera] 263 - Spot Meter Link To AF Point: Disable (use center AF point) [MakerNotes, CanonCustom, Camera] 264 - Safety Shift: Disable [MakerNotes, CanonCustom, Camera] 265 - Usable Shooting Modes: Disable; Flags 0xfc [MakerNotes, CanonCustom, Camera] 266 - Usable Metering Modes: Disable; Flags 0xf0 [MakerNotes, CanonCustom, Camera] 267 - Exposure Mode In Manual: Specified metering mode [MakerNotes, CanonCustom, Camera] 268 - Shutter Speed Range: Disable; Hi 1/8192; Lo 32 [MakerNotes, CanonCustom, Camera] 269 - Aperture Range: Disable; Closed 91; Open 1 [MakerNotes, CanonCustom, Camera] 270 - Apply Shooting Metering Mode: Disable; 0; 0; 3; 112; 48; 0; 0 [MakerNotes, CanonCustom, Camera] 271 - Flash Sync Speed Av: Auto [MakerNotes, CanonCustom, Camera] 513 - Long Exposure Noise Reduction: Off [MakerNotes, CanonCustom, Camera] 514 - High ISO Noise Reduction: Off [MakerNotes, CanonCustom, Camera] 515 - Highlight Tone Priority: Disable [MakerNotes, CanonCustom, Camera] 772 - E-TTL II: Evaluative [MakerNotes, CanonCustom, Camera] 773 - Shutter Curtain Sync: 1st-curtain sync [MakerNotes, CanonCustom, Camera] 774 - Flash Firing: Fires [MakerNotes, CanonCustom, Camera] 1031 - View Info During Exposure: Disable [MakerNotes, CanonCustom, Camera] 1032 - LCD Illumination During Bulb: Off [MakerNotes, CanonCustom, Camera] 1033 - Info Button When Shooting: Displays camera settings [MakerNotes, CanonCustom, Camera] 1281 - USM Lens Electronic MF: Enable after one-shot AF [MakerNotes, CanonCustom, Camera] 1282 - AI Servo Tracking Sensitivity: Standard [MakerNotes, CanonCustom, Camera] 1283 - AI Servo Image Priority: 1: AF, 2: Tracking [MakerNotes, CanonCustom, Camera] 1284 - AI Servo Tracking Method: Main focus point priority [MakerNotes, CanonCustom, Camera] 1285 - Lens Drive No AF: Focus search on [MakerNotes, CanonCustom, Camera] 1286 - Lens AF Stop Button: AF stop [MakerNotes, CanonCustom, Camera] 1287 - AF Microadjustment: Disable; 0; 0; 0; 0 [MakerNotes, CanonCustom, Camera] 1288 - AF Point Area Expansion: Disable [MakerNotes, CanonCustom, Camera] 1289 - Selectable AF Point: 19 points [MakerNotes, CanonCustom, Camera] 1290 - Switch To Registered AF Point: Disable [MakerNotes, CanonCustom, Camera] 1291 - AF Point Auto Selection: Control-direct:disable/Main:enable [MakerNotes, CanonCustom, Camera] 1292 - AF Point Display During Focus: On [MakerNotes, CanonCustom, Camera] 1293 - AF Point Brightness: Normal [MakerNotes, CanonCustom, Camera] 1294 - AF Assist Beam: Emits [MakerNotes, CanonCustom, Camera] 1551 - Mirror Lockup: Disable [MakerNotes, CanonCustom, Camera] 1552 - Continuous Shooting Speed: Disable; Hi 10; Lo 3 [MakerNotes, CanonCustom, Camera] 1553 - Continuous Shot Limit: Disable; 99 shots [MakerNotes, CanonCustom, Camera] 1793 - Shutter Button AF On Button: Metering + AF start [MakerNotes, CanonCustom, Camera] 1794 - AF On AE Lock Button Switch: Disable [MakerNotes, CanonCustom, Camera] 1795 - Quick Control Dial In Meter: Exposure comp/Aperture [MakerNotes, CanonCustom, Camera] 1796 - Set Button When Shooting: Normal (disabled) [MakerNotes, CanonCustom, Camera] 1797 - Manual Tv/Av For M: Tv=Main/Av=Control [MakerNotes, CanonCustom, Camera] 1798 - Dial Direction Tv Av: Normal [MakerNotes, CanonCustom, Camera] 1799 - Av Setting Without Lens: Disable [MakerNotes, CanonCustom, Camera] 1800 - WB Media Image Size Setting: Rear LCD panel [MakerNotes, CanonCustom, Camera] 1801 - Lock Microphone Button: Protect (hold:record memo) [MakerNotes, CanonCustom, Camera] 1802 - Button Function Control Off: Normal (enable) [MakerNotes, CanonCustom, Camera] 2059 - Focusing Screen: Ec-CIV [MakerNotes, CanonCustom, Camera] 2060 - Timer Length: Disable; 6 s: 6; 16 s: 16; After release: 2 [MakerNotes, CanonCustom, Camera] 2061 - Short Release Time Lag: Disable [MakerNotes, CanonCustom, Camera] 2062 - Add Aspect Ratio Info: Off [MakerNotes, CanonCustom, Camera] 2063 - Add Original Decision Data: Off [MakerNotes, CanonCustom, Camera] 2064 - Live View Exposure Simulation: Disable (LCD auto adjust) [MakerNotes, Canon, Camera] 0 - Aspect Ratio: 3:2 [MakerNotes, Canon, Camera] 1 - Cropped Image Width: 3888 [MakerNotes, Canon, Camera] 2 - Cropped Image Height: 2592 [MakerNotes, Canon, Camera] 3 - Cropped Image Left: 0 [MakerNotes, Canon, Camera] 4 - Cropped Image Top: 0 [MakerNotes, Canon, Image] 1 - Tone Curve: Standard [MakerNotes, Canon, Image] 2 - Sharpness: 0 [MakerNotes, Canon, Image] 3 - Sharpness Frequency: n/a [MakerNotes, Canon, Image] 4 - Sensor Red Level: 0 [MakerNotes, Canon, Image] 5 - Sensor Blue Level: 0 [MakerNotes, Canon, Image] 6 - White Balance Red: 0 [MakerNotes, Canon, Image] 7 - White Balance Blue: 0 [MakerNotes, Canon, Image] 9 - Color Temperature: 5200 [MakerNotes, Canon, Image] 10 - Picture Style: Neutral [MakerNotes, Canon, Image] 11 - Digital Gain: 0 [MakerNotes, Canon, Image] 12 - WB Shift AB: 0 [MakerNotes, Canon, Image] 13 - WB Shift GM: 0 [MakerNotes, Canon, Camera] 1 - Measured RGGB: 663 1024 1024 611 [MakerNotes, Canon, Camera] 180 - Color Space: sRGB [MakerNotes, Canon, Camera] 208 - VRD Offset: 0 [MakerNotes, Canon, Image] 1 - Sensor Width: 3984 [MakerNotes, Canon, Image] 2 - Sensor Height: 2622 [MakerNotes, Canon, Image] 5 - Sensor Left Border: 88 [MakerNotes, Canon, Image] 6 - Sensor Top Border: 25 [MakerNotes, Canon, Image] 7 - Sensor Right Border: 3975 [MakerNotes, Canon, Image] 8 - Sensor Bottom Border: 2616 [MakerNotes, Canon, Image] 9 - Black Mask Left Border: 0 [MakerNotes, Canon, Image] 10 - Black Mask Top Border: 0 [MakerNotes, Canon, Image] 11 - Black Mask Right Border: 0 [MakerNotes, Canon, Image] 12 - Black Mask Bottom Border: 0 [MakerNotes, Canon, Camera] 0 - Color Data Version: 2 (1DmkIII) [MakerNotes, Canon, Camera] 0 - WB RGGB Levels As Shot: 2275 1024 1024 1357 [MakerNotes, Canon, Camera] 4 - Color Temp As Shot: 6142 [MakerNotes, Canon, Camera] 5 - WB RGGB Levels Auto: 2275 1024 1024 1357 [MakerNotes, Canon, Camera] 9 - Color Temp Auto: 6142 [MakerNotes, Canon, Camera] 10 - WB RGGB Levels Measured: 2272 1026 1021 1355 [MakerNotes, Canon, Camera] 14 - Color Temp Measured: 6142 [MakerNotes, Canon, Camera] 20 - WB RGGB Levels Daylight: 2101 1024 1024 1535 [MakerNotes, Canon, Camera] 24 - Color Temp Daylight: 5200 [MakerNotes, Canon, Camera] 25 - WB RGGB Levels Shade: 2433 1024 1024 1259 [MakerNotes, Canon, Camera] 29 - Color Temp Shade: 7000 [MakerNotes, Canon, Camera] 30 - WB RGGB Levels Cloudy: 2270 1024 1024 1382 [MakerNotes, Canon, Camera] 34 - Color Temp Cloudy: 6000 [MakerNotes, Canon, Camera] 35 - WB RGGB Levels Tungsten: 1603 1134 1134 2760 [MakerNotes, Canon, Camera] 39 - Color Temp Tungsten: 3200 [MakerNotes, Canon, Camera] 40 - WB RGGB Levels Fluorescent: 1938 1073 1073 2419 [MakerNotes, Canon, Camera] 44 - Color Temp Fluorescent: 3768 [MakerNotes, Canon, Camera] 45 - WB RGGB Levels Kelvin: 2101 1024 1024 1535 [MakerNotes, Canon, Camera] 49 - Color Temp Kelvin: 5210 [MakerNotes, Canon, Camera] 50 - WB RGGB Levels Flash: 2422 1024 1024 1295 [MakerNotes, Canon, Camera] 54 - Color Temp Flash: 6777 [MakerNotes, Canon, Camera] 231 - Average Black Level: 1024 1024 1024 1024 [MakerNotes, Canon, Camera] 640 - Raw Measured RGGB: 294111 455756 464315 279659 [MakerNotes, Canon, Camera] 16400 - Custom Picture Style File Name: [MakerNotes, Canon, Camera] 1 - AF Micro Adj Mode: Disable [MakerNotes, Canon, Camera] 2 - AF Micro Adj Value: 0 [Composite, Composite, Image] Aperture - Aperture: 5.6 [Composite, Composite, Camera] DriveMode - Drive Mode: Continuous Shooting [Composite, Composite, Image] FileNumber - File Number: 108-0232 [Composite, Composite, Camera] ISO - ISO: 3200 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Camera] Lens - Lens: 16.0 - 35.0 mm [Composite, Composite, Camera] LensID - Lens ID: Canon EF 16-35mm f/2.8L II [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] OriginalDecisionData - Original Decision Data: (Binary data 512 bytes) [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.3 [Composite, Composite, Camera] ShootingMode - Shooting Mode: Program AE [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/125 [Composite, Composite, Time] SubSecCreateDate - Create Date: 2007:02:22 17:02:42.81 [Composite, Composite, Time] SubSecDateTimeOriginal - Date/Time Original: 2007:02:22 17:02:42.81 [Composite, Composite, Time] SubSecModifyDate - Modify Date: 2007:02:22 17:02:42.81 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] WB_RGGBLevels - WB RGGB Levels: 2275 1024 1024 1357 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.325195 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.023 mm [Composite, Composite, Image] DOF - Depth Of Field: 0.60 m (1.41 - 2.01 m) [Composite, Composite, Image] FOV - Field Of View: 43.7 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 35.0 mm (35 mm equivalent: 44.8 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 9.33 m [Composite, Composite, Camera] Lens35efl - Lens: 16.0 - 35.0 mm (35 mm equivalent: 20.5 - 44.8 mm) [Composite, Composite, Image] LightValue - Light Value: 6.9 [Composite, Composite, Camera] RedBalance - Red Balance: 2.22168 ����������������������������������������������������������������Image-ExifTool-10.10/t/Canon_3.out������������������������������������������������������������������000644 �000765 �000024 �00000000433 11141337010 016626� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[MakerNotes, CanonCustom, Camera] 259 - ISO Speed Range: Enable; Max 1600; Min 200 [MakerNotes, CanonCustom, Camera] 2060 - Timer Length: Enable; 6 s: 5; 16 s: 20; After release: 6 [Composite, Composite, Camera] OriginalDecisionData - Original Decision Data: (Binary data 512 bytes) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonRaw.t�������������������������������������������������������������������000644 �000765 �000024 �00000010103 11327642463 016526� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/CanonRaw.t". BEGIN { $| = 1; print "1..7\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::CanonRaw; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'CanonRaw'; my $testnum = 1; # test 2: Extract information from CRW { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/CanonRaw.crw'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Extract JpgFromRaw from CRW { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(PrintConv => 0, IgnoreMinorErrors => 1); my $info = $exifTool->ImageInfo('t/images/CanonRaw.crw','JpgFromRaw'); print 'not ' unless ${$info->{JpgFromRaw}} eq '<Dummy JpgFromRaw image data>'; print "ok $testnum\n"; } # test 4: Write a whole pile of tags to a CRW { ++$testnum; my $exifTool = new Image::ExifTool; # set IgnoreMinorErrors option to allow invalid JpgFromRaw to be written $exifTool->Options(IgnoreMinorErrors => 1); $exifTool->SetNewValuesFromFile('t/images/Canon.jpg'); $exifTool->SetNewValue(SerialNumber => 1234); $exifTool->SetNewValue(OwnerName => 'Phil Harvey'); $exifTool->SetNewValue(JpgFromRaw => 'not a real image'); $exifTool->SetNewValue(ROMOperationMode => 'CDN'); $exifTool->SetNewValue(FocalPlaneXSize => '35 mm'); $exifTool->SetNewValue(FocalPlaneYSize => '24 mm'); my $testfile = "t/${testname}_${testnum}_failed.crw"; unlink $testfile; $exifTool->WriteInfo('t/images/CanonRaw.crw', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 5: Test verbose output { ++$testnum; print 'not ' unless testVerbose($testname, $testnum, 't/images/CanonRaw.crw', 1); print "ok $testnum\n"; } # test 6: Write to CR2 file { ++$testnum; my $exifTool = new Image::ExifTool; # set IgnoreMinorErrors option to allow invalid JpgFromRaw to be written $exifTool->SetNewValue(Keywords => 'CR2 test'); $exifTool->SetNewValue(OwnerName => 'Phil Harvey'); $exifTool->SetNewValue(FocalPlaneXSize => '35mm'); my $testfile = "t/${testname}_${testnum}_failed.cr2"; unlink $testfile; $exifTool->WriteInfo('t/images/CanonRaw.cr2', $testfile); my $info = $exifTool->ImageInfo($testfile); my $success = check($exifTool, $info, $testname, $testnum); # make sure file suffix was copied properly while ($success) { open(TESTFILE, $testfile) or last; binmode(TESTFILE); my $endStr = '<Dummy preview image data>Non-TIFF data test'; my $len = length $endStr; seek(TESTFILE, -$len, 2) or last; my $buff; read(TESTFILE, $buff, $len) == $len or last; close(TESTFILE); if ($buff eq $endStr) { unlink $testfile; $success = 2; } else { warn "\n Test $testnum failed to copy file suffix:\n"; warn " Test gave: '$buff'\n"; warn " Should be: '$endStr'\n"; $success = 0; } last; } warn "\n Test $testnum: Error reading file suffix\n" if $success == 1; print 'not ' unless $success == 2; print "ok $testnum\n"; } # test 7: Test copying all information from a CR2 image to a JPEG { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/CanonRaw.cr2'); $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->WriteInfo('t/images/Writer.jpg', $testfile); $exifTool->Options(Unknown => 1); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonRaw_2.out���������������������������������������������������������������000644 �000765 �000024 �00000024167 12546457274 017342� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: CanonRaw.crw [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 6.7 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2012:01:22 13:31:59-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:21-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: CRW [File, File, Image] FileTypeExtension - File Type Extension: crw [File, File, Image] MIMEType - MIME Type: image/x-canon-crw [MakerNotes, CanonRaw, Camera] 8197 - Raw Data: (Binary data 22 bytes) [MakerNotes, CanonRaw, Preview] 8199 - Jpg From Raw: (Binary data 29 bytes) [MakerNotes, CanonRaw, Image] 0 - File Format: CRW [MakerNotes, CanonRaw, Image] 1 - Target Compression Ratio: 10 [MakerNotes, CanonRaw, Image] 0 - Image Width: 3072 [MakerNotes, CanonRaw, Image] 1 - Image Height: 2048 [MakerNotes, CanonRaw, Image] 2 - Pixel Aspect Ratio: 1 [MakerNotes, CanonRaw, Image] 3 - Rotation: 0 [MakerNotes, CanonRaw, Image] 4 - Component Bit Depth: 8 [MakerNotes, CanonRaw, Image] 5 - Color Bit Depth: 24 [MakerNotes, CanonRaw, Image] 6 - Color BW: 257 [MakerNotes, CanonRaw, Camera] 4106 - Target Image Type: Real-world Subject [MakerNotes, CanonRaw, Camera] 6148 - Record ID: 0 [MakerNotes, CanonRaw, Image] 6167 - File Number: 116-1602 [MakerNotes, CanonRaw, Time] 0 - Date/Time Original: 2003:11:10 17:39:26 [MakerNotes, CanonRaw, Time] 1 - Time Zone Code: 0 [MakerNotes, CanonRaw, Time] 2 - Time Zone Info: 0 [MakerNotes, CanonRaw, Camera] 2070 - Original File Name: CRW_1602.CRW [MakerNotes, CanonRaw, Camera] 2071 - Thumbnail File Name: CRW_1602.THM [MakerNotes, CanonRaw, Camera] 2053 - User Comment: [MakerNotes, CanonRaw, Camera] 6164 - Measured EV: 4.625 [MakerNotes, CanonRaw, Camera] 2053 - Canon File Description: EOS DIGITAL REBEL CMOS RAW [MakerNotes, CanonRaw, Camera] 2069 - Canon Image Type: CRW:EOS DIGITAL REBEL CMOS RAW [MakerNotes, CanonRaw, Camera] 2064 - Owner Name: Phil Harvey [MakerNotes, CanonRaw, Camera] 0 - Make: Canon [MakerNotes, CanonRaw, Camera] 6 - Camera Model Name: Canon EOS DIGITAL REBEL [MakerNotes, CanonRaw, Camera] 6155 - Serial Number: 0560018150 [MakerNotes, CanonRaw, Camera] 4124 - Base ISO: 100 [MakerNotes, CanonRaw, Camera] 2061 - ROM Operation Mode: USA [MakerNotes, CanonRaw, Camera] 2059 - Canon Firmware Version: Firmware Version 1.1.1 [MakerNotes, Canon, Image] 1 - Focal Length: 24 mm [MakerNotes, Canon, Image] 2 - Focal Plane X Size: 23.22 mm [MakerNotes, Canon, Image] 3 - Focal Plane Y Size: 15.49 mm [MakerNotes, Canon, Image] 1 - Auto ISO: 100 [MakerNotes, Canon, Image] 2 - Base ISO: 100 [MakerNotes, Canon, Image] 3 - Measured EV: 0.00 [MakerNotes, Canon, Image] 4 - Target Aperture: 3.6 [MakerNotes, Canon, Image] 5 - Target Exposure Time: 1/60 [MakerNotes, Canon, Image] 6 - Exposure Compensation: 0 [MakerNotes, Canon, Image] 7 - White Balance: Auto [MakerNotes, Canon, Image] 8 - Slow Shutter: None [MakerNotes, Canon, Image] 9 - Shot Number In Continuous Burst: 0 [MakerNotes, Canon, Camera] 10 - Optical Zoom Code: n/a [MakerNotes, Canon, Image] 15 - Flash Exposure Compensation: +2/3 [MakerNotes, Canon, Image] 16 - Auto Exposure Bracketing: Off [MakerNotes, Canon, Image] 17 - AEB Bracket Value: 0 [MakerNotes, Canon, Image] 18 - Control Mode: Camera Local Control [MakerNotes, Canon, Image] 19 - Focus Distance Upper: 1.42 m [MakerNotes, Canon, Image] 20 - Focus Distance Lower: 1.19 m [MakerNotes, Canon, Image] 21 - F Number: 3.6 [MakerNotes, Canon, Image] 22 - Exposure Time: 1/64 [MakerNotes, Canon, Image] 23 - Measured EV 2: -0.125 [MakerNotes, Canon, Image] 24 - Bulb Duration: 0 [MakerNotes, Canon, Camera] 26 - Camera Type: EOS Mid-range [MakerNotes, Canon, Image] 27 - Auto Rotate: None [MakerNotes, Canon, Image] 28 - ND Filter: n/a [MakerNotes, Canon, Image] 29 - Self Timer 2: 0 [MakerNotes, Canon, Image] 3 - Bracket Mode: Off [MakerNotes, Canon, Image] 4 - Bracket Value: 0 [MakerNotes, Canon, Image] 5 - Bracket Shot Number: 0 [MakerNotes, Canon, Camera] 1 - Macro Mode: Unknown (0) [MakerNotes, Canon, Camera] 2 - Self Timer: Off [MakerNotes, Canon, Camera] 3 - Quality: RAW [MakerNotes, Canon, Camera] 4 - Canon Flash Mode: On [MakerNotes, Canon, Camera] 5 - Continuous Drive: Continuous [MakerNotes, Canon, Camera] 7 - Focus Mode: AI Focus AF [MakerNotes, Canon, Camera] 9 - Record Mode: CRW+THM [MakerNotes, Canon, Camera] 10 - Canon Image Size: Large [MakerNotes, Canon, Camera] 11 - Easy Mode: Manual [MakerNotes, Canon, Camera] 12 - Digital Zoom: Unknown (-1) [MakerNotes, Canon, Camera] 13 - Contrast: +1 [MakerNotes, Canon, Camera] 14 - Saturation: +1 [MakerNotes, Canon, Camera] 15 - Sharpness: +1 [MakerNotes, Canon, Camera] 16 - Camera ISO: n/a [MakerNotes, Canon, Camera] 17 - Metering Mode: Evaluative [MakerNotes, Canon, Camera] 18 - Focus Range: Not Known [MakerNotes, Canon, Camera] 19 - AF Point: Manual AF point selection [MakerNotes, Canon, Camera] 20 - Canon Exposure Mode: Program AE [MakerNotes, Canon, Camera] 22 - Lens Type: n/a [MakerNotes, Canon, Camera] 23 - Max Focal Length: 55 mm [MakerNotes, Canon, Camera] 24 - Min Focal Length: 18 mm [MakerNotes, Canon, Camera] 25 - Focal Units: 1/mm [MakerNotes, Canon, Camera] 26 - Max Aperture: 3.6 [MakerNotes, Canon, Camera] 27 - Min Aperture: 22 [MakerNotes, Canon, Camera] 28 - Flash Activity: 0 [MakerNotes, Canon, Camera] 29 - Flash Bits: E-TTL, Built-in [MakerNotes, Canon, Camera] 36 - Zoom Source Width: 3072 [MakerNotes, Canon, Camera] 37 - Zoom Target Width: 3072 [MakerNotes, Canon, Camera] 41 - Manual Flash Output: n/a [MakerNotes, Canon, Camera] 42 - Color Tone: Normal [MakerNotes, CanonRaw, Camera] 6196 - Canon Model ID: EOS Digital Rebel / 300D / Kiss Digital [MakerNotes, Canon, Image] 1 - Sensor Width: 3152 [MakerNotes, Canon, Image] 2 - Sensor Height: 2068 [MakerNotes, Canon, Image] 5 - Sensor Left Border: 72 [MakerNotes, Canon, Image] 6 - Sensor Top Border: 16 [MakerNotes, Canon, Image] 7 - Sensor Right Border: 3143 [MakerNotes, Canon, Image] 8 - Sensor Bottom Border: 2063 [MakerNotes, Canon, Image] 9 - Black Mask Left Border: 24 [MakerNotes, Canon, Image] 10 - Black Mask Top Border: 224 [MakerNotes, Canon, Image] 11 - Black Mask Right Border: 40 [MakerNotes, Canon, Image] 12 - Black Mask Bottom Border: 1856 [MakerNotes, CanonRaw, Camera] 0 - Decoder Table Number: 1 [MakerNotes, CanonRaw, Camera] 2 - Compressed Data Offset: 514 [MakerNotes, CanonRaw, Camera] 3 - Compressed Data Length: 4120111 [MakerNotes, Canon, Camera] 0 - Num AF Points: 7 [MakerNotes, Canon, Camera] 1 - Valid AF Points: 7 [MakerNotes, Canon, Image] 2 - Canon Image Width: 3072 [MakerNotes, Canon, Image] 3 - Canon Image Height: 2048 [MakerNotes, Canon, Camera] 4 - AF Image Width: 3072 [MakerNotes, Canon, Camera] 5 - AF Image Height: 2048 [MakerNotes, Canon, Camera] 6 - AF Area Width: 151 [MakerNotes, Canon, Camera] 7 - AF Area Height: 151 [MakerNotes, Canon, Camera] 8 - AF Area X Positions: 1014 608 0 0 0 -608 -1014 [MakerNotes, Canon, Camera] 9 - AF Area Y Positions: 0 0 -506 0 506 0 0 [MakerNotes, Canon, Camera] 10 - AF Points In Focus: 3 [MakerNotes, CanonRaw, Camera] 4270 - Color Temperature: 5200 [MakerNotes, Canon, Camera] 1 - WB RGGB Levels Auto: 1740 832 831 931 [MakerNotes, Canon, Camera] 5 - WB RGGB Levels Daylight: 1722 832 831 989 [MakerNotes, Canon, Camera] 9 - WB RGGB Levels Shade: 2035 832 831 839 [MakerNotes, Canon, Camera] 13 - WB RGGB Levels Cloudy: 1878 832 831 903 [MakerNotes, Canon, Camera] 17 - WB RGGB Levels Tungsten: 1228 913 912 1668 [MakerNotes, Canon, Camera] 21 - WB RGGB Levels Fluorescent: 1506 842 841 1381 [MakerNotes, Canon, Camera] 25 - WB RGGB Levels Flash: 1964 832 831 877 [MakerNotes, Canon, Camera] 29 - WB RGGB Levels Custom: 1722 832 831 989 [MakerNotes, Canon, Camera] 33 - WB RGGB Levels Kelvin: 1722 832 831 988 [MakerNotes, Canon, Camera] 37 - WB RGGB Black Levels: 125 124 125 124 [MakerNotes, CanonRaw, Camera] 4276 - Color Space: sRGB [MakerNotes, CanonRaw, Image] 1 - Raw Jpg Quality: Fine [MakerNotes, CanonRaw, Image] 2 - Raw Jpg Size: Medium [MakerNotes, CanonRaw, Image] 3 - Raw Jpg Width: 2048 [MakerNotes, CanonRaw, Image] 4 - Raw Jpg Height: 1360 [MakerNotes, CanonRaw, Camera] 6203 - Serial Number Format: Format 1 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 8.31 [XMP, XMP-dc, Image] description - Description: CRW with embedded XMP [Composite, Composite, Image] Aperture - Aperture: 3.6 [Composite, Composite, Camera] ConditionalFEC - Flash Exposure Compensation: +2/3 [Composite, Composite, Camera] DriveMode - Drive Mode: Continuous Shooting [Composite, Composite, Camera] FlashType - Flash Type: Built-In Flash [Composite, Composite, Camera] ISO - ISO: 100 [Composite, Composite, Image] ImageSize - Image Size: 3072x2048 [Composite, Composite, Camera] Lens - Lens: 18.0 - 55.0 mm [Composite, Composite, Camera] LensID - Lens ID: Unknown 18-55mm [Composite, Composite, Image] Megapixels - Megapixels: 6.3 [Composite, Composite, Camera] RedEyeReduction - Red Eye Reduction: Off [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.6 [Composite, Composite, Camera] ShootingMode - Shooting Mode: Program AE [Composite, Composite, Camera] ShutterCurtainHack - Shutter Curtain Sync: 1st-curtain sync [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/64 [Composite, Composite, Camera] WB_RGGBLevels - WB RGGB Levels: 1740 832 831 931 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.119663 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.019 mm [Composite, Composite, Image] DOF - Depth Of Field: 0.41 m (1.13 - 1.54 m) [Composite, Composite, Image] FOV - Field Of View: 51.6 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 24.0 mm (35 mm equivalent: 37.2 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 8.34 m [Composite, Composite, Camera] Lens35efl - Lens: 18.0 - 55.0 mm (35 mm equivalent: 27.9 - 85.3 mm) [Composite, Composite, Image] LightValue - Light Value: 9.7 [Composite, Composite, Camera] RedBalance - Red Balance: 2.092604 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonRaw_4.out���������������������������������������������������������������000644 �000765 �000024 �00000032401 12546457274 017332� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: CanonRaw_4_failed.crw [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 12 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:35-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:35-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: CRW [File, File, Image] FileTypeExtension - File Type Extension: crw [File, File, Image] MIMEType - MIME Type: image/x-canon-crw [MakerNotes, CanonRaw, Camera] 8197 - Raw Data: (Binary data 22 bytes) [MakerNotes, CanonRaw, Preview] 8199 - Jpg From Raw: (Binary data 16 bytes) [MakerNotes, CanonRaw, Image] 0 - File Format: CRW [MakerNotes, CanonRaw, Image] 1 - Target Compression Ratio: 10 [MakerNotes, CanonRaw, Image] 0 - Image Width: 3072 [MakerNotes, CanonRaw, Image] 1 - Image Height: 2048 [MakerNotes, CanonRaw, Image] 2 - Pixel Aspect Ratio: 1 [MakerNotes, CanonRaw, Image] 3 - Rotation: 0 [MakerNotes, CanonRaw, Image] 4 - Component Bit Depth: 8 [MakerNotes, CanonRaw, Image] 5 - Color Bit Depth: 24 [MakerNotes, CanonRaw, Image] 6 - Color BW: 257 [MakerNotes, CanonRaw, Camera] 4106 - Target Image Type: Real-world Subject [MakerNotes, CanonRaw, Camera] 6148 - Record ID: 0 [MakerNotes, CanonRaw, Image] 6167 - File Number: 118-1861 [MakerNotes, CanonRaw, Time] 0 - Date/Time Original: 2003:12:04 06:46:52 [MakerNotes, CanonRaw, Time] 1 - Time Zone Code: 0 [MakerNotes, CanonRaw, Time] 2 - Time Zone Info: 0 [MakerNotes, CanonRaw, Camera] 2070 - Original File Name: CRW_1602.CRW [MakerNotes, CanonRaw, Camera] 2071 - Thumbnail File Name: CRW_1602.THM [MakerNotes, CanonRaw, Camera] 2053 - User Comment: [MakerNotes, CanonRaw, Camera] 6164 - Measured EV: -1.25 [MakerNotes, CanonRaw, Camera] 2053 - Canon File Description: EOS DIGITAL REBEL CMOS RAW [MakerNotes, CanonRaw, Camera] 2069 - Canon Image Type: CRW:EOS DIGITAL REBEL CMOS RAW [MakerNotes, CanonRaw, Camera] 2064 - Owner Name: Phil Harvey [MakerNotes, CanonRaw, Camera] 0 - Make: Canon [MakerNotes, CanonRaw, Camera] 6 - Camera Model Name: Canon EOS DIGITAL REBEL [MakerNotes, CanonRaw, Camera] 6155 - Serial Number: 0000001234 [MakerNotes, CanonRaw, Camera] 4124 - Base ISO: 100 [MakerNotes, CanonRaw, Camera] 2061 - ROM Operation Mode: CDN [MakerNotes, CanonRaw, Camera] 2059 - Canon Firmware Version: Firmware Version 1.1.1 [MakerNotes, Canon, Image] 1 - Focal Length: 34 mm [MakerNotes, Canon, Image] 2 - Focal Plane X Size: 35.00 mm [MakerNotes, Canon, Image] 3 - Focal Plane Y Size: 24.00 mm [MakerNotes, Canon, Image] 1 - Auto ISO: 100 [MakerNotes, Canon, Image] 2 - Base ISO: 100 [MakerNotes, Canon, Image] 3 - Measured EV: -1.25 [MakerNotes, Canon, Image] 4 - Target Aperture: 14 [MakerNotes, Canon, Image] 5 - Target Exposure Time: 1/60 [MakerNotes, Canon, Image] 6 - Exposure Compensation: 0 [MakerNotes, Canon, Image] 7 - White Balance: Auto [MakerNotes, Canon, Image] 8 - Slow Shutter: None [MakerNotes, Canon, Image] 9 - Shot Number In Continuous Burst: 0 [MakerNotes, Canon, Camera] 10 - Optical Zoom Code: n/a [MakerNotes, Canon, Image] 13 - Flash Guide Number: 0 [MakerNotes, Canon, Image] 15 - Flash Exposure Compensation: 0 [MakerNotes, Canon, Image] 16 - Auto Exposure Bracketing: Off [MakerNotes, Canon, Image] 17 - AEB Bracket Value: 0 [MakerNotes, Canon, Image] 18 - Control Mode: Camera Local Control [MakerNotes, Canon, Image] 19 - Focus Distance Upper: inf [MakerNotes, Canon, Image] 20 - Focus Distance Lower: 5.46 m [MakerNotes, Canon, Image] 21 - F Number: 14 [MakerNotes, Canon, Image] 22 - Exposure Time: 4 [MakerNotes, Canon, Image] 23 - Measured EV 2: -1.25 [MakerNotes, Canon, Image] 24 - Bulb Duration: 4 [MakerNotes, Canon, Camera] 26 - Camera Type: EOS Mid-range [MakerNotes, Canon, Image] 27 - Auto Rotate: None [MakerNotes, Canon, Image] 28 - ND Filter: n/a [MakerNotes, Canon, Image] 29 - Self Timer 2: 0 [MakerNotes, Canon, Image] 3 - Bracket Mode: Off [MakerNotes, Canon, Image] 4 - Bracket Value: 0 [MakerNotes, Canon, Image] 5 - Bracket Shot Number: 0 [MakerNotes, Canon, Camera] 1 - Macro Mode: Unknown (0) [MakerNotes, Canon, Camera] 2 - Self Timer: Off [MakerNotes, Canon, Camera] 3 - Quality: RAW [MakerNotes, Canon, Camera] 4 - Canon Flash Mode: Off [MakerNotes, Canon, Camera] 5 - Continuous Drive: Continuous [MakerNotes, Canon, Camera] 7 - Focus Mode: Manual Focus (3) [MakerNotes, Canon, Camera] 9 - Record Mode: CRW+THM [MakerNotes, Canon, Camera] 10 - Canon Image Size: Large [MakerNotes, Canon, Camera] 11 - Easy Mode: Manual [MakerNotes, Canon, Camera] 12 - Digital Zoom: Unknown (-1) [MakerNotes, Canon, Camera] 13 - Contrast: +1 [MakerNotes, Canon, Camera] 14 - Saturation: +1 [MakerNotes, Canon, Camera] 15 - Sharpness: +1 [MakerNotes, Canon, Camera] 16 - Camera ISO: n/a [MakerNotes, Canon, Camera] 17 - Metering Mode: Center-weighted average [MakerNotes, Canon, Camera] 18 - Focus Range: Not Known [MakerNotes, Canon, Camera] 19 - AF Point: Manual AF point selection [MakerNotes, Canon, Camera] 20 - Canon Exposure Mode: Manual [MakerNotes, Canon, Camera] 22 - Lens Type: n/a [MakerNotes, Canon, Camera] 23 - Max Focal Length: 55 mm [MakerNotes, Canon, Camera] 24 - Min Focal Length: 18 mm [MakerNotes, Canon, Camera] 25 - Focal Units: 1/mm [MakerNotes, Canon, Camera] 26 - Max Aperture: 4 [MakerNotes, Canon, Camera] 27 - Min Aperture: 27 [MakerNotes, Canon, Camera] 28 - Flash Activity: 0 [MakerNotes, Canon, Camera] 29 - Flash Bits: (none) [MakerNotes, Canon, Camera] 36 - Zoom Source Width: 3072 [MakerNotes, Canon, Camera] 37 - Zoom Target Width: 3072 [MakerNotes, Canon, Camera] 41 - Manual Flash Output: n/a [MakerNotes, Canon, Camera] 42 - Color Tone: Normal [MakerNotes, CanonRaw, Camera] 6196 - Canon Model ID: EOS Digital Rebel / 300D / Kiss Digital [MakerNotes, Canon, Image] 1 - Sensor Width: 3152 [MakerNotes, Canon, Image] 2 - Sensor Height: 2068 [MakerNotes, Canon, Image] 5 - Sensor Left Border: 72 [MakerNotes, Canon, Image] 6 - Sensor Top Border: 16 [MakerNotes, Canon, Image] 7 - Sensor Right Border: 3143 [MakerNotes, Canon, Image] 8 - Sensor Bottom Border: 2063 [MakerNotes, Canon, Image] 9 - Black Mask Left Border: 24 [MakerNotes, Canon, Image] 10 - Black Mask Top Border: 224 [MakerNotes, Canon, Image] 11 - Black Mask Right Border: 40 [MakerNotes, Canon, Image] 12 - Black Mask Bottom Border: 1856 [MakerNotes, CanonRaw, Camera] 0 - Decoder Table Number: 1 [MakerNotes, CanonRaw, Camera] 2 - Compressed Data Offset: 514 [MakerNotes, CanonRaw, Camera] 3 - Compressed Data Length: 4120111 [MakerNotes, Canon, Camera] 0 - Num AF Points: 7 [MakerNotes, Canon, Camera] 1 - Valid AF Points: 7 [MakerNotes, Canon, Image] 2 - Canon Image Width: 3072 [MakerNotes, Canon, Image] 3 - Canon Image Height: 2048 [MakerNotes, Canon, Camera] 4 - AF Image Width: 3072 [MakerNotes, Canon, Camera] 5 - AF Image Height: 2048 [MakerNotes, Canon, Camera] 6 - AF Area Width: 151 [MakerNotes, Canon, Camera] 7 - AF Area Height: 151 [MakerNotes, Canon, Camera] 8 - AF Area X Positions: 1014 608 0 0 0 -608 -1014 [MakerNotes, Canon, Camera] 9 - AF Area Y Positions: 0 0 -506 0 506 0 0 [MakerNotes, Canon, Camera] 10 - AF Points In Focus: 3 [MakerNotes, CanonRaw, Camera] 4270 - Color Temperature: 5200 [MakerNotes, Canon, Camera] 1 - WB RGGB Levels Auto: 1719 832 831 990 [MakerNotes, Canon, Camera] 5 - WB RGGB Levels Daylight: 1722 832 831 989 [MakerNotes, Canon, Camera] 9 - WB RGGB Levels Shade: 2035 832 831 839 [MakerNotes, Canon, Camera] 13 - WB RGGB Levels Cloudy: 1878 832 831 903 [MakerNotes, Canon, Camera] 17 - WB RGGB Levels Tungsten: 1228 913 912 1668 [MakerNotes, Canon, Camera] 21 - WB RGGB Levels Fluorescent: 1506 842 841 1381 [MakerNotes, Canon, Camera] 25 - WB RGGB Levels Flash: 1933 832 831 895 [MakerNotes, Canon, Camera] 29 - WB RGGB Levels Custom: 1722 832 831 989 [MakerNotes, Canon, Camera] 33 - WB RGGB Levels Kelvin: 1722 832 831 988 [MakerNotes, Canon, Camera] 37 - WB RGGB Black Levels: 124 123 124 123 [MakerNotes, CanonRaw, Camera] 4276 - Color Space: sRGB [MakerNotes, CanonRaw, Image] 1 - Raw Jpg Quality: Fine [MakerNotes, CanonRaw, Image] 2 - Raw Jpg Size: Medium [MakerNotes, CanonRaw, Image] 3 - Raw Jpg Width: 2048 [MakerNotes, CanonRaw, Image] 4 - Raw Jpg Height: 1360 [MakerNotes, CanonRaw, Camera] 6203 - Serial Number Format: Format 1 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.94 [XMP, XMP-aux, Camera] Lens - Lens: 18.0 - 55.0 mm [XMP, XMP-dc, Image] description - Description: CRW with embedded XMP [XMP, XMP-exif, Image] ApertureValue - Aperture Value: 14.0 [XMP, XMP-exif, Image] ColorSpace - Color Space: sRGB [XMP, XMP-exif, Image] ComponentsConfiguration - Components Configuration: Y, Cb, Cr, - [XMP, XMP-exif, Image] CompressedBitsPerPixel - Compressed Bits Per Pixel: 9 [XMP, XMP-exif, Camera] Contrast - Contrast: High [XMP, XMP-exif, Image] CustomRendered - Custom Rendered: Normal [XMP, XMP-exif, Time] DateTimeOriginal - Date/Time Original: 2003:12:04 06:46:52 [XMP, XMP-exif, Image] ExifVersion - Exif Version: 0221 [XMP, XMP-exif, Image] ExposureBiasValue - Exposure Compensation: 0 [XMP, XMP-exif, Camera] ExposureMode - Exposure Mode: Manual [XMP, XMP-exif, Image] ExposureTime - Exposure Time: 4 [XMP, XMP-exif, Image] FNumber - F Number: 14.0 [XMP, XMP-exif, Image] FileSource - File Source: Digital Camera [XMP, XMP-exif, Camera] FlashFired - Flash Fired: False [XMP, XMP-exif, Camera] FlashFunction - Flash Function: False [XMP, XMP-exif, Camera] FlashMode - Flash Mode: Unknown [XMP, XMP-exif, Camera] FlashRedEyeMode - Flash Red Eye Mode: False [XMP, XMP-exif, Camera] FlashReturn - Flash Return: No return detection [XMP, XMP-exif, Image] FlashpixVersion - Flashpix Version: 0100 [XMP, XMP-exif, Camera] FocalLength - Focal Length: 34.0 mm [XMP, XMP-exif, Camera] FocalPlaneResolutionUnit - Focal Plane Resolution Unit: inches [XMP, XMP-exif, Camera] FocalPlaneXResolution - Focal Plane X Resolution: 3443.94615384615 [XMP, XMP-exif, Camera] FocalPlaneYResolution - Focal Plane Y Resolution: 3442.01680672269 [XMP, XMP-exif, Image] ISOSpeedRatings - ISO: 100 [XMP, XMP-exif, Camera] MaxApertureValue - Max Aperture Value: 4.5 [XMP, XMP-exif, Camera] MeteringMode - Metering Mode: Center-weighted average [XMP, XMP-exif, Image] PixelXDimension - Exif Image Width: 160 [XMP, XMP-exif, Image] PixelYDimension - Exif Image Height: 120 [XMP, XMP-exif, Camera] Saturation - Saturation: High [XMP, XMP-exif, Camera] SceneCaptureType - Scene Capture Type: Standard [XMP, XMP-exif, Camera] SensingMethod - Sensing Method: One-chip color area [XMP, XMP-exif, Camera] Sharpness - Sharpness: Hard [XMP, XMP-exif, Image] ShutterSpeedValue - Shutter Speed Value: 1 [XMP, XMP-exif, Image] UserComment - User Comment: [XMP, XMP-exif, Camera] WhiteBalance - White Balance: Auto [XMP, XMP-exifEX, Image] BodySerialNumber - Serial Number: 1234 [XMP, XMP-exifEX, Image] CameraOwnerName - Owner Name: Phil Harvey [XMP, XMP-exifEX, Image] InteroperabilityIndex - Interoperability Index: THM - DCF thumbnail file [XMP, XMP-pmi, Image] sequenceNumber - Sequence Number: 0 [XMP, XMP-tiff, Image] BitsPerSample - Bits Per Sample: 8 [XMP, XMP-tiff, Image] ImageLength - Image Height: 8 [XMP, XMP-tiff, Image] ImageWidth - Image Width: 8 [XMP, XMP-tiff, Camera] Make - Make: Canon [XMP, XMP-tiff, Camera] Model - Camera Model Name: Canon EOS DIGITAL REBEL [XMP, XMP-tiff, Image] Orientation - Orientation: Horizontal (normal) [XMP, XMP-tiff, Image] ResolutionUnit - Resolution Unit: inches [XMP, XMP-tiff, Image] XResolution - X Resolution: 180 [XMP, XMP-tiff, Image] YCbCrPositioning - Y Cb Cr Positioning: Centered [XMP, XMP-tiff, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [XMP, XMP-tiff, Image] YResolution - Y Resolution: 180 [XMP, XMP-xmp, Time] CreateDate - Create Date: 2003:12:04 06:46:52 [XMP, XMP-xmp, Time] ModifyDate - Modify Date: 2003:12:04 06:46:52 [Composite, Composite, Image] Aperture - Aperture: 14.3 [Composite, Composite, Camera] DriveMode - Drive Mode: Continuous Shooting [Composite, Composite, Other] Flash - Flash: No Flash [Composite, Composite, Camera] ISO - ISO: 100 [Composite, Composite, Camera] Lens - Lens: 18.0 - 55.0 mm [Composite, Composite, Camera] ShootingMode - Shooting Mode: Bulb [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 4 [Composite, Composite, Camera] WB_RGGBLevels - WB RGGB Levels: 1719 832 831 990 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.190619 [Composite, Composite, Image] ImageSize - Image Size: 3072x2048 [Composite, Composite, Camera] LensID - Lens ID: Unknown 18-55mm [Composite, Composite, Image] LightValue - Light Value: 5.7 [Composite, Composite, Image] Megapixels - Megapixels: 6.3 [Composite, Composite, Camera] RedBalance - Red Balance: 2.067348 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.0 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.029 mm [Composite, Composite, Image] DOF - Depth Of Field: inf (2.73 m - inf) [Composite, Composite, Image] FOV - Field Of View: 54.9 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 34.0 mm (35 mm equivalent: 34.7 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 2.75 m [Composite, Composite, Camera] Lens35efl - Lens: 18.0 - 55.0 mm (35 mm equivalent: 18.4 - 56.1 mm) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonRaw_5.out���������������������������������������������������������������000644 �000765 �000024 �00000016537 12546457274 017347� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ExifToolVersion = 9.94 FileName = CanonRaw.crw Directory = t/images FileSize = 6816 FileModifyDate = 1327257119 FileAccessDate = 1430317237 FileInodeChangeDate = 1429973820 FilePermissions = 33188 FileType = CRW FileTypeExtension = CRW MIMEType = image/x-canon-crw + [CIFF directory with 3 entries] | 0) RawData = <Dummy raw image data> | 1) JpgFromRaw = <Dummy JpgFromRaw image data> | 2) ImageProps (SubDirectory) --> | + [CIFF directory with 13 entries] | | 0) ImageFormat (SubDirectory) --> | | + [BinaryData directory, 8 bytes] | | | FileFormat = 131073 | | | TargetCompressionRatio = 10 | | 1) ImageInfo (SubDirectory) --> | | + [BinaryData directory, 28 bytes] | | | ImageWidth = 3072 | | | ImageHeight = 2048 | | | PixelAspectRatio = 1 | | | Rotation = 0 | | | ComponentBitDepth = 8 | | | ColorBitDepth = 24 | | | ColorBW = 257 | | 2) TargetImageType = 0 | | 3) RecordID = 0 | | 4) FileNumber = 1161602 | | 5) TimeStamp (SubDirectory) --> | | + [BinaryData directory, 12 bytes] | | | DateTimeOriginal = 1068485966 | | | TimeZoneCode = 0 | | | TimeZoneInfo = 0 | | 6) OriginalFileName = CRW_1602.CRW | | 7) ThumbnailFileName = CRW_1602.THM | | 8) UserComment = | | 9) MeasuredInfo (SubDirectory) --> | | + [CIFF directory with 1 entries] | | | 0) MeasuredEV = -0.375 | | 10) ImageDescription (SubDirectory) --> | | + [CIFF directory with 2 entries] | | | 0) CanonFileDescription = EOS DIGITAL REBEL CMOS RAW | | | 1) CanonImageType = CRW:EOS DIGITAL REBEL CMOS RAW | | 11) CameraObject (SubDirectory) --> | | + [CIFF directory with 3 entries] | | | 0) OwnerName = Phil Harvey | | | 1) CanonRawMakeModel (SubDirectory) --> | | | + [BinaryData directory, 32 bytes] | | | | Make = Canon | | | | Model = Canon EOS DIGITAL REBEL | | | 2) CameraSpecification (SubDirectory) --> | | | + [CIFF directory with 4 entries] | | | | 0) SerialNumber = 560018150 | | | | 1) BaseISO = 100 | | | | 2) ROMOperationMode = USA | | | | 3) CanonFirmwareVersion = Firmware Version 1.1.1 | | 12) ExifInformation (SubDirectory) --> | | + [CIFF directory with 23 entries] | | | 0) CanonFlashInfo = 0 100 0 0 | | | 1) CanonFocalLength (SubDirectory) --> | | | + [BinaryData directory, 8 bytes] | | | | FocalType = 0 | | | | FocalLength = 24 | | | | FocalPlaneXSize = 914 | | | | FocalPlaneYSize = 610 | | | 2) CanonShotInfo (SubDirectory) --> | | | + [BinaryData directory, 66 bytes] | | | | AutoISO = 0 | | | | BaseISO = 160 | | | | MeasuredEV = -160 | | | | TargetAperture = 116 | | | | TargetExposureTime = 189 | | | | ExposureCompensation = 0 | | | | WhiteBalance = 0 | | | | SlowShutter = 3 | | | | SequenceNumber = 0 | | | | OpticalZoomCode = 8 | | | | CameraTemperature = 0 | | | | FlashGuideNumber = -1 | | | | AFPointsInFocus = 0 | | | | FlashExposureComp = 20 | | | | AutoExposureBracketing = 0 | | | | AEBBracketValue = 0 | | | | ControlMode = 1 | | | | FocusDistanceUpper = 142 | | | | FocusDistanceLower = 119 | | | | FNumber = 116 | | | | ExposureTime = 192 | | | | MeasuredEV2 = 47 | | | | BulbDuration = 0 | | | | CameraType = 252 | | | | AutoRotate = 0 | | | | NDFilter = -1 | | | | SelfTimer2 = 0 | | | 3) CanonFileInfo (SubDirectory) --> | | | + [BinaryData directory, 18 bytes] | | | | BracketMode = 0 | | | | BracketValue = 0 | | | | BracketShotNumber = 0 | | | | RawJpgQuality = -1 | | | | RawJpgSize = -1 | | | | LongExposureNoiseReduction2 = -1 | | | 4) CanonCameraSettings (SubDirectory) --> | | | + [BinaryData directory, 92 bytes] | | | | MacroMode = 0 | | | | SelfTimer = 0 | | | | Quality = 4 | | | | CanonFlashMode = 2 | | | | ContinuousDrive = 1 | | | | FocusMode = 2 | | | | RecordMode = 2 | | | | CanonImageSize = 0 | | | | EasyMode = 1 | | | | DigitalZoom = -1 | | | | Contrast = 1 | | | | Saturation = 1 | | | | Sharpness = 1 | | | | CameraISO = 0 | | | | MeteringMode = 3 | | | | FocusRange = 2 | | | | AFPoint = 8197 | | | | CanonExposureMode = 1 | | | | LensType = -1 | | | | MaxFocalLength = 55 | | | | MinFocalLength = 18 | | | | FocalUnits = 1 | | | | MaxAperture = 116 | | | | MinAperture = 285 | | | | FlashActivity = 0 | | | | FlashBits = 8200 | | | | FocusContinuous = -1 | | | | AESetting = -1 | | | | ImageStabilization = -1 | | | | DisplayAperture = 0 | | | | ZoomSourceWidth = 3072 | | | | ZoomTargetWidth = 3072 | | | | SpotMeteringMode = -1 | | | | PhotoEffect = -1 | | | | ManualFlashOutput = 0 | | | | ColorTone = 0 | | | 5) CanonRaw_0x0036 = ...........................1..:..........1..:.........1..[snip] | | | 6) CanonModelID = 2147484016 | | | 7) SensorInfo (SubDirectory) --> | | | + [BinaryData directory, 34 bytes] | | | | SensorWidth = 3152 | | | | SensorHeight = 2068 | | | | SensorLeftBorder = 72 | | | | SensorTopBorder = 16 | | | | SensorRightBorder = 3143 | | | | SensorBottomBorder = 2063 | | | | BlackMaskLeftBorder = 24 | | | | BlackMaskTopBorder = 224 | | | | BlackMaskRightBorder = 40 | | | | BlackMaskBottomBorder = 1856 | | | 8) DecoderTable (SubDirectory) --> | | | + [BinaryData directory, 16 bytes] | | | | DecoderTableNumber = 1 | | | | CompressedDataOffset = 514 | | | | CompressedDataLength = 4120111 | | | 9) CanonAFInfo (SubDirectory) --> | | | + [SerialData directory, 48 bytes] | | | | 0) NumAFPoints = 7 | | | | 1) ValidAFPoints = 7 | | | | 2) CanonImageWidth = 3072 | | | | 3) CanonImageHeight = 2048 | | | | 4) AFImageWidth = 3072 | | | | 5) AFImageHeight = 2048 | | | | 6) AFAreaWidth = 151 | | | | 7) AFAreaHeight = 151 | | | | 8) AFAreaXPositions = 1014 608 0 0 0 -608 -1014 | | | | 9) AFAreaYPositions = 0 0 -506 0 506 0 0 | | | | 10) AFPointsInFocus = 8 | | | 10) CanonRaw_0x10c0 = 26 331 372 372 177 240 428 429 277 186 510 511 442 | | | 11) CanonRaw_0x10c1 = 26 299 375 375 170 202 394 395 240 153 453 454 375 | | | 12) CanonRaw_0x10c2 = t......a.................c...............c.X.............[snip] | | | 13) CanonRaw_0x10aa = 10 554 1022 1026 754 | | | 14) CanonRaw_0x10a8 = 20 5528 5190 7000 5987 3214 3897 6457 5190 5200 | | | 15) CanonRaw_0x10ad = 62 20127 8480 7000 6000 5600 5200 4724 4200 3266 1446 648[snip] | | | 16) ColorTemperature = 5200 | | | 17) CanonRaw_0x10af = 1024 | | | 18) ColorBalance (SubDirectory) --> | | | + [BinaryData directory, 82 bytes] | | | | WB_RGGBLevelsAuto = 1740 832 831 931 | | | | WB_RGGBLevelsDaylight = 1722 832 831 989 | | | | WB_RGGBLevelsShade = 2035 832 831 839 | | | | WB_RGGBLevelsCloudy = 1878 832 831 903 | | | | WB_RGGBLevelsTungsten = 1228 913 912 1668 | | | | WB_RGGBLevelsFluorescent = 1506 842 841 1381 | | | | WB_RGGBLevelsFlash = 1964 832 831 877 | | | | WB_RGGBLevelsCustom = 1722 832 831 989 | | | | WB_RGGBLevelsKelvin = 1722 832 831 988 | | | | WB_RGGBBlackLevels = 125 124 125 124 | | | 19) ColorSpace = 1 | | | 20) RawJpgInfo (SubDirectory) --> | | | + [BinaryData directory, 10 bytes] | | | | RawJpgQuality = 3 | | | | RawJpgSize = 1 | | | | RawJpgWidth = 2048 | | | | RawJpgHeight = 1360 | | | 21) CanonRaw_0x1039 = 0 159 7 112 | | | 22) SerialNumberFormat = 2415919104 CanonVRD trailer (560 bytes at offset 0x1870): + [XMP directory, 460 bytes] | XMPToolkit = Image::ExifTool 8.31 | Description = CRW with embedded XMP �����������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonRaw_6.out���������������������������������������������������������������000644 �000765 �000024 �00000032623 12546457274 017342� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: CanonRaw_6_failed.cr2 [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 8.6 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:35-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:35-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: CR2 [File, File, Image] FileTypeExtension - File Type Extension: cr2 [File, File, Image] MIMEType - MIME Type: image/x-canon-cr2 [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 74386a2844191f61317ffa999148834a [EXIF, IFD0, Image] 256 - Image Width: 1536 [EXIF, IFD0, Image] 257 - Image Height: 1024 [EXIF, IFD0, Image] 258 - Bits Per Sample: 8 8 8 [EXIF, IFD0, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS 350D DIGITAL [EXIF, IFD0, Image] 273 - Preview Image Start: 8738 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 279 - Preview Image Length: 26 [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2005:08:03 18:59:18 [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/15 [EXIF, ExifIFD, Image] 33437 - F Number: 8.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Aperture-priority AE [EXIF, ExifIFD, Image] 34855 - ISO: 400 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2005:08:03 18:59:18 [EXIF, ExifIFD, Time] 36868 - Create Date: 2005:08:03 18:59:18 [EXIF, ExifIFD, Image] 37121 - Components Configuration: -, -, -, - [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/15 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 8.0 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Average [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 55.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 3456 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 2304 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3954.23341 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3958.762887 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Image] 42032 - Owner Name: Phil Harvey [EXIF, IFD1, Image] 513 - Thumbnail Offset: 8678 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD2, Image] 256 - Image Width: 384 [EXIF, IFD2, Image] 257 - Image Height: 256 [EXIF, IFD2, Image] 258 - Bits Per Sample: 8 8 8 [EXIF, IFD2, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD2, Image] 262 - Photometric Interpretation: RGB [EXIF, IFD2, Image] 273 - Strip Offsets: 8722 [EXIF, IFD2, Image] 277 - Samples Per Pixel: 3 [EXIF, IFD2, Image] 278 - Rows Per Strip: 256 [EXIF, IFD2, Image] 279 - Strip Byte Counts: 16 [EXIF, IFD2, Image] 284 - Planar Configuration: Chunky [EXIF, IFD3, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD3, Image] 273 - Strip Offsets: 8706 [EXIF, IFD3, Image] 279 - Strip Byte Counts: 16 [EXIF, IFD3, Image] 50752 - Raw Image Segmentation: 1 1758 1758 [IPTC, IPTC, Other] 25 - Keywords: CR2 test [IPTC, IPTC, Other] 0 - Application Record Version: 4 [MakerNotes, Canon, Camera] 1 - Macro Mode: Normal [MakerNotes, Canon, Camera] 2 - Self Timer: Off [MakerNotes, Canon, Camera] 3 - Quality: RAW [MakerNotes, Canon, Camera] 4 - Canon Flash Mode: Off [MakerNotes, Canon, Camera] 5 - Continuous Drive: Single [MakerNotes, Canon, Camera] 7 - Focus Mode: One-shot AF [MakerNotes, Canon, Camera] 9 - Record Mode: CR2 [MakerNotes, Canon, Camera] 10 - Canon Image Size: n/a [MakerNotes, Canon, Camera] 11 - Easy Mode: Manual [MakerNotes, Canon, Camera] 12 - Digital Zoom: None [MakerNotes, Canon, Camera] 13 - Contrast: Normal [MakerNotes, Canon, Camera] 14 - Saturation: Normal [MakerNotes, Canon, Camera] 15 - Sharpness: 0 [MakerNotes, Canon, Camera] 17 - Metering Mode: Center-weighted average [MakerNotes, Canon, Camera] 18 - Focus Range: Not Known [MakerNotes, Canon, Camera] 20 - Canon Exposure Mode: Aperture-priority AE [MakerNotes, Canon, Camera] 22 - Lens Type: n/a [MakerNotes, Canon, Camera] 23 - Max Focal Length: 55 mm [MakerNotes, Canon, Camera] 24 - Min Focal Length: 18 mm [MakerNotes, Canon, Camera] 25 - Focal Units: 1/mm [MakerNotes, Canon, Camera] 26 - Max Aperture: 4 [MakerNotes, Canon, Camera] 27 - Min Aperture: 27 [MakerNotes, Canon, Camera] 28 - Flash Activity: 0 [MakerNotes, Canon, Camera] 29 - Flash Bits: (none) [MakerNotes, Canon, Camera] 32 - Focus Continuous: Single [MakerNotes, Canon, Camera] 36 - Zoom Source Width: 0 [MakerNotes, Canon, Camera] 37 - Zoom Target Width: 0 [MakerNotes, Canon, Camera] 40 - Photo Effect: Off [MakerNotes, Canon, Camera] 41 - Manual Flash Output: n/a [MakerNotes, Canon, Camera] 42 - Color Tone: Normal [MakerNotes, Canon, Image] 0 - Focal Type: Zoom [MakerNotes, Canon, Image] 1 - Focal Length: 55 mm [MakerNotes, Canon, Image] 2 - Focal Plane X Size: 35.00 mm [MakerNotes, Canon, Image] 3 - Focal Plane Y Size: 15.37 mm [MakerNotes, Canon, Image] 1 - Auto ISO: 100 [MakerNotes, Canon, Image] 2 - Base ISO: 400 [MakerNotes, Canon, Image] 3 - Measured EV: 8.00 [MakerNotes, Canon, Image] 4 - Target Aperture: 8 [MakerNotes, Canon, Image] 5 - Target Exposure Time: 1/15 [MakerNotes, Canon, Image] 6 - Exposure Compensation: 0 [MakerNotes, Canon, Image] 7 - White Balance: Auto [MakerNotes, Canon, Image] 8 - Slow Shutter: None [MakerNotes, Canon, Image] 9 - Shot Number In Continuous Burst: 0 [MakerNotes, Canon, Camera] 10 - Optical Zoom Code: n/a [MakerNotes, Canon, Image] 13 - Flash Guide Number: 0 [MakerNotes, Canon, Image] 15 - Flash Exposure Compensation: 0 [MakerNotes, Canon, Image] 16 - Auto Exposure Bracketing: Off [MakerNotes, Canon, Image] 17 - AEB Bracket Value: 0 [MakerNotes, Canon, Image] 18 - Control Mode: Camera Local Control [MakerNotes, Canon, Image] 21 - F Number: 8 [MakerNotes, Canon, Image] 22 - Exposure Time: 1/16 [MakerNotes, Canon, Image] 23 - Measured EV 2: 8.125 [MakerNotes, Canon, Image] 24 - Bulb Duration: 0 [MakerNotes, Canon, Camera] 26 - Camera Type: EOS Mid-range [MakerNotes, Canon, Image] 27 - Auto Rotate: None [MakerNotes, Canon, Image] 28 - ND Filter: n/a [MakerNotes, Canon, Image] 29 - Self Timer 2: 0 [MakerNotes, Canon, Image] 6 - Canon Image Type: Canon EOS 350D DIGITAL [MakerNotes, Canon, Camera] 7 - Canon Firmware Version: Firmware 1.0.2 [MakerNotes, Canon, Camera] 9 - Owner Name: Phil Harvey [MakerNotes, Canon, Camera] 12 - Serial Number: 0123456789 [MakerNotes, CanonCustom, Camera] 0 - Set Button Cross Keys Func: Normal [MakerNotes, CanonCustom, Camera] 1 - Long Exposure Noise Reduction: Off [MakerNotes, CanonCustom, Camera] 2 - Flash Sync Speed Av: Auto [MakerNotes, CanonCustom, Camera] 3 - Shutter-AE Lock: AF/AE lock [MakerNotes, CanonCustom, Camera] 4 - AF Assist Beam: Emits [MakerNotes, CanonCustom, Camera] 5 - Exposure Level Increments: 1/3 Stop [MakerNotes, CanonCustom, Camera] 6 - Mirror Lockup: Disable [MakerNotes, CanonCustom, Camera] 7 - E-TTL II: Evaluative [MakerNotes, CanonCustom, Camera] 8 - Shutter Curtain Sync: 1st-curtain sync [MakerNotes, Canon, Camera] 16 - Canon Model ID: EOS Digital Rebel XT / 350D / Kiss Digital N [MakerNotes, Canon, Camera] 0 - Num AF Points: 7 [MakerNotes, Canon, Camera] 1 - Valid AF Points: 7 [MakerNotes, Canon, Image] 2 - Canon Image Width: 3456 [MakerNotes, Canon, Image] 3 - Canon Image Height: 2304 [MakerNotes, Canon, Camera] 4 - AF Image Width: 3456 [MakerNotes, Canon, Camera] 5 - AF Image Height: 2304 [MakerNotes, Canon, Camera] 6 - AF Area Width: 189 [MakerNotes, Canon, Camera] 7 - AF Area Height: 188 [MakerNotes, Canon, Camera] 8 - AF Area X Positions: 0 -1237 -742 0 742 1237 0 [MakerNotes, Canon, Camera] 9 - AF Area Y Positions: -617 0 0 0 0 0 617 [MakerNotes, Canon, Camera] 10 - AF Points In Focus: 3 [MakerNotes, Canon, Camera] 19 - Thumbnail Image Valid Area: 0 159 7 112 [MakerNotes, Canon, Camera] 21 - Serial Number Format: Format 2 [MakerNotes, Canon, Camera] 131 - Original Decision Data Offset: 0 [MakerNotes, Canon, Image] 1 - File Number: 100-0024 [MakerNotes, Canon, Image] 3 - Bracket Mode: Off [MakerNotes, Canon, Image] 4 - Bracket Value: 0 [MakerNotes, Canon, Image] 5 - Bracket Shot Number: 0 [MakerNotes, Canon, Image] 8 - Long Exposure Noise Reduction 2: Off [MakerNotes, Canon, Image] 9 - WB Bracket Mode: Off [MakerNotes, Canon, Image] 12 - WB Bracket Value AB: 0 [MakerNotes, Canon, Image] 13 - WB Bracket Value GM: 0 [MakerNotes, Canon, Image] 14 - Filter Effect: None [MakerNotes, Canon, Image] 15 - Toning Effect: None [MakerNotes, Canon, Image] 1 - Tone Curve: Standard [MakerNotes, Canon, Image] 3 - Sharpness Frequency: n/a [MakerNotes, Canon, Image] 4 - Sensor Red Level: 0 [MakerNotes, Canon, Image] 5 - Sensor Blue Level: 0 [MakerNotes, Canon, Image] 6 - White Balance Red: 0 [MakerNotes, Canon, Image] 7 - White Balance Blue: 0 [MakerNotes, Canon, Image] 9 - Color Temperature: 5200 [MakerNotes, Canon, Image] 10 - Picture Style: None [MakerNotes, Canon, Image] 11 - Digital Gain: 0 [MakerNotes, Canon, Image] 12 - WB Shift AB: 0 [MakerNotes, Canon, Image] 13 - WB Shift GM: 0 [MakerNotes, Canon, Camera] 1 - Measured RGGB: 580 1024 1024 500 [MakerNotes, Canon, Camera] 208 - VRD Offset: 0 [MakerNotes, Canon, Image] 1 - Sensor Width: 3516 [MakerNotes, Canon, Image] 2 - Sensor Height: 2328 [MakerNotes, Canon, Image] 5 - Sensor Left Border: 52 [MakerNotes, Canon, Image] 6 - Sensor Top Border: 19 [MakerNotes, Canon, Image] 7 - Sensor Right Border: 3507 [MakerNotes, Canon, Image] 8 - Sensor Bottom Border: 2322 [MakerNotes, Canon, Image] 9 - Black Mask Left Border: 0 [MakerNotes, Canon, Image] 10 - Black Mask Top Border: 0 [MakerNotes, Canon, Image] 11 - Black Mask Right Border: 0 [MakerNotes, Canon, Image] 12 - Black Mask Bottom Border: 0 [MakerNotes, Canon, Camera] 25 - WB RGGB Levels As Shot: 2002 1185 1187 2364 [MakerNotes, Canon, Camera] 29 - Color Temp As Shot: 3064 [MakerNotes, Canon, Camera] 30 - WB RGGB Levels Auto: 1720 1022 1024 2031 [MakerNotes, Canon, Camera] 34 - Color Temp Auto: 3064 [MakerNotes, Canon, Camera] 35 - WB RGGB Levels Daylight: 2312 1022 1024 1501 [MakerNotes, Canon, Camera] 39 - Color Temp Daylight: 5200 [MakerNotes, Canon, Camera] 40 - WB RGGB Levels Shade: 2714 1022 1024 1246 [MakerNotes, Canon, Camera] 44 - Color Temp Shade: 7000 [MakerNotes, Canon, Camera] 45 - WB RGGB Levels Cloudy: 2512 1022 1024 1355 [MakerNotes, Canon, Camera] 49 - Color Temp Cloudy: 6000 [MakerNotes, Canon, Camera] 50 - WB RGGB Levels Tungsten: 1523 1022 1024 2397 [MakerNotes, Canon, Camera] 54 - Color Temp Tungsten: 3201 [MakerNotes, Canon, Camera] 55 - WB RGGB Levels Fluorescent: 1944 1022 1024 2015 [MakerNotes, Canon, Camera] 59 - Color Temp Fluorescent: 3905 [MakerNotes, Canon, Camera] 60 - WB RGGB Levels Flash: 2606 1022 1024 1308 [MakerNotes, Canon, Camera] 64 - Color Temp Flash: 6440 [MakerNotes, Canon, Camera] 65 - WB RGGB Levels Custom 1: 2312 1022 1024 1501 [MakerNotes, Canon, Camera] 69 - Color Temp Custom 1: 5200 [MakerNotes, Canon, Camera] 70 - WB RGGB Levels Custom 2: 2312 1022 1024 1501 [MakerNotes, Canon, Camera] 74 - Color Temp Custom 2: 5200 [MakerNotes, Canon, Camera] 2 - Color Tone: Normal [Composite, Composite, Image] Aperture - Aperture: 8.0 [Composite, Composite, Camera] DriveMode - Drive Mode: Single-frame Shooting [Composite, Composite, Camera] ISO - ISO: 400 [Composite, Composite, Camera] Lens - Lens: 18.0 - 55.0 mm [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 26 bytes) [Composite, Composite, Camera] ShootingMode - Shooting Mode: Aperture-priority AE [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/15 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] WB_RGGBLevels - WB RGGB Levels: 2002 1185 1187 2364 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.993255 [Composite, Composite, Image] ImageSize - Image Size: 3456x2304 [Composite, Composite, Camera] LensID - Lens ID: Unknown 18-55mm [Composite, Composite, Image] LightValue - Light Value: 7.9 [Composite, Composite, Image] Megapixels - Megapixels: 8.0 [Composite, Composite, Camera] RedBalance - Red Balance: 1.688027 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.6 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.019 mm [Composite, Composite, Image] FOV - Field Of View: 22.8 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 55.0 mm (35 mm equivalent: 89.2 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 20.42 m [Composite, Composite, Camera] Lens35efl - Lens: 18.0 - 55.0 mm (35 mm equivalent: 29.2 - 89.2 mm) �������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonRaw_7.out���������������������������������������������������������������000644 �000765 �000024 �00000035731 12546457274 017346� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: CanonRaw_7_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 7.2 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:37-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:37-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:37-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS 350D DIGITAL [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2005:08:03 18:59:18 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/15 [EXIF, ExifIFD, Image] 33437 - F Number: 8.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Aperture-priority AE [EXIF, ExifIFD, Image] 34855 - ISO: 400 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2005:08:03 18:59:18 [EXIF, ExifIFD, Time] 36868 - Create Date: 2005:08:03 18:59:18 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/15 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 8.0 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Center-weighted average [EXIF, ExifIFD, Camera] 37386 - Focal Length: 55.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 3456 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 2304 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3954.23341 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3958.762887 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, ExifIFD, Image] 42032 - Owner Name: unknown [EXIF, ExifIFD, Image] 42033 - Serial Number: 0123456789 [MakerNotes, Canon, Camera] 1 - Macro Mode: Normal [MakerNotes, Canon, Camera] 2 - Self Timer: Off [MakerNotes, Canon, Camera] 3 - Quality: RAW [MakerNotes, Canon, Camera] 4 - Canon Flash Mode: Off [MakerNotes, Canon, Camera] 5 - Continuous Drive: Single [MakerNotes, Canon, Camera] 7 - Focus Mode: One-shot AF [MakerNotes, Canon, Camera] 9 - Record Mode: CR2 [MakerNotes, Canon, Camera] 10 - Canon Image Size: n/a [MakerNotes, Canon, Camera] 11 - Easy Mode: Manual [MakerNotes, Canon, Camera] 12 - Digital Zoom: None [MakerNotes, Canon, Camera] 13 - Contrast: Normal [MakerNotes, Canon, Camera] 14 - Saturation: Normal [MakerNotes, Canon, Camera] 15 - Sharpness: 0 [MakerNotes, Canon, Camera] 17 - Metering Mode: Center-weighted average [MakerNotes, Canon, Camera] 18 - Focus Range: Not Known [MakerNotes, Canon, Camera] 20 - Canon Exposure Mode: Aperture-priority AE [MakerNotes, Canon, Camera] 22 - Lens Type: n/a [MakerNotes, Canon, Camera] 23 - Max Focal Length: 55 mm [MakerNotes, Canon, Camera] 24 - Min Focal Length: 18 mm [MakerNotes, Canon, Camera] 25 - Focal Units: 1/mm [MakerNotes, Canon, Camera] 26 - Max Aperture: 4 [MakerNotes, Canon, Camera] 27 - Min Aperture: 27 [MakerNotes, Canon, Camera] 28 - Flash Activity: 0 [MakerNotes, Canon, Camera] 29 - Flash Bits: (none) [MakerNotes, Canon, Camera] 32 - Focus Continuous: Single [MakerNotes, Canon, Camera] 36 - Zoom Source Width: 0 [MakerNotes, Canon, Camera] 37 - Zoom Target Width: 0 [MakerNotes, Canon, Camera] 40 - Photo Effect: Off [MakerNotes, Canon, Camera] 41 - Manual Flash Output: n/a [MakerNotes, Canon, Camera] 42 - Color Tone: Normal [MakerNotes, Canon, Image] 0 - Focal Type: Zoom [MakerNotes, Canon, Image] 1 - Focal Length: 55 mm [MakerNotes, Canon, Image] 2 - Focal Plane X Size: 23.04 mm [MakerNotes, Canon, Image] 3 - Focal Plane Y Size: 15.37 mm [MakerNotes, Canon, Camera] 3 - Canon Flash Info: 100 0 0 0 [MakerNotes, Canon, Image] 1 - Auto ISO: 100 [MakerNotes, Canon, Image] 2 - Base ISO: 400 [MakerNotes, Canon, Image] 3 - Measured EV: 8.00 [MakerNotes, Canon, Image] 4 - Target Aperture: 8 [MakerNotes, Canon, Image] 5 - Target Exposure Time: 1/15 [MakerNotes, Canon, Image] 6 - Exposure Compensation: 0 [MakerNotes, Canon, Image] 7 - White Balance: Auto [MakerNotes, Canon, Image] 8 - Slow Shutter: None [MakerNotes, Canon, Image] 9 - Shot Number In Continuous Burst: 0 [MakerNotes, Canon, Camera] 10 - Optical Zoom Code: n/a [MakerNotes, Canon, Image] 13 - Flash Guide Number: 0 [MakerNotes, Canon, Image] 15 - Flash Exposure Compensation: 0 [MakerNotes, Canon, Image] 16 - Auto Exposure Bracketing: Off [MakerNotes, Canon, Image] 17 - AEB Bracket Value: 0 [MakerNotes, Canon, Image] 18 - Control Mode: Camera Local Control [MakerNotes, Canon, Image] 21 - F Number: 8 [MakerNotes, Canon, Image] 22 - Exposure Time: 1/16 [MakerNotes, Canon, Image] 23 - Measured EV 2: 8.125 [MakerNotes, Canon, Image] 24 - Bulb Duration: 0 [MakerNotes, Canon, Camera] 26 - Camera Type: EOS Mid-range [MakerNotes, Canon, Image] 27 - Auto Rotate: None [MakerNotes, Canon, Image] 28 - ND Filter: n/a [MakerNotes, Canon, Image] 29 - Self Timer 2: 0 [MakerNotes, Canon, Image] 6 - Canon Image Type: Canon EOS 350D DIGITAL [MakerNotes, Canon, Camera] 7 - Canon Firmware Version: Firmware 1.0.2 [MakerNotes, Canon, Camera] 9 - Owner Name: unknown [MakerNotes, Canon, Camera] 12 - Serial Number: 0123456789 [MakerNotes, CanonCustom, Camera] 0 - Set Button Cross Keys Func: Normal [MakerNotes, CanonCustom, Camera] 1 - Long Exposure Noise Reduction: Off [MakerNotes, CanonCustom, Camera] 2 - Flash Sync Speed Av: Auto [MakerNotes, CanonCustom, Camera] 3 - Shutter-AE Lock: AF/AE lock [MakerNotes, CanonCustom, Camera] 4 - AF Assist Beam: Emits [MakerNotes, CanonCustom, Camera] 5 - Exposure Level Increments: 1/3 Stop [MakerNotes, CanonCustom, Camera] 6 - Mirror Lockup: Disable [MakerNotes, CanonCustom, Camera] 7 - E-TTL II: Evaluative [MakerNotes, CanonCustom, Camera] 8 - Shutter Curtain Sync: 1st-curtain sync [MakerNotes, Canon, Camera] 16 - Canon Model ID: EOS Digital Rebel XT / 350D / Kiss Digital N [MakerNotes, Canon, Camera] 0 - Num AF Points: 7 [MakerNotes, Canon, Camera] 1 - Valid AF Points: 7 [MakerNotes, Canon, Image] 2 - Canon Image Width: 3456 [MakerNotes, Canon, Image] 3 - Canon Image Height: 2304 [MakerNotes, Canon, Camera] 4 - AF Image Width: 3456 [MakerNotes, Canon, Camera] 5 - AF Image Height: 2304 [MakerNotes, Canon, Camera] 6 - AF Area Width: 189 [MakerNotes, Canon, Camera] 7 - AF Area Height: 188 [MakerNotes, Canon, Camera] 8 - AF Area X Positions: 0 -1237 -742 0 742 1237 0 [MakerNotes, Canon, Camera] 9 - AF Area Y Positions: -617 0 0 0 0 0 617 [MakerNotes, Canon, Camera] 10 - AF Points In Focus: 3 [MakerNotes, Canon, Camera] 19 - Thumbnail Image Valid Area: 0 159 7 112 [MakerNotes, Canon, Camera] 21 - Serial Number Format: Format 2 [MakerNotes, Canon, Camera] 25 - Canon 0x0019: 1 [MakerNotes, Canon, Camera] 131 - Original Decision Data Offset: 0 [MakerNotes, Canon, Image] 1 - File Number: 100-0024 [MakerNotes, Canon, Image] 3 - Bracket Mode: Off [MakerNotes, Canon, Image] 4 - Bracket Value: 0 [MakerNotes, Canon, Image] 5 - Bracket Shot Number: 0 [MakerNotes, Canon, Image] 8 - Long Exposure Noise Reduction 2: Off [MakerNotes, Canon, Image] 9 - WB Bracket Mode: Off [MakerNotes, Canon, Image] 12 - WB Bracket Value AB: 0 [MakerNotes, Canon, Image] 13 - WB Bracket Value GM: 0 [MakerNotes, Canon, Image] 14 - Filter Effect: None [MakerNotes, Canon, Image] 15 - Toning Effect: None [MakerNotes, Canon, Image] 1 - Tone Curve: Standard [MakerNotes, Canon, Image] 3 - Sharpness Frequency: n/a [MakerNotes, Canon, Image] 4 - Sensor Red Level: 0 [MakerNotes, Canon, Image] 5 - Sensor Blue Level: 0 [MakerNotes, Canon, Image] 6 - White Balance Red: 0 [MakerNotes, Canon, Image] 7 - White Balance Blue: 0 [MakerNotes, Canon, Image] 9 - Color Temperature: 5200 [MakerNotes, Canon, Image] 10 - Picture Style: None [MakerNotes, Canon, Image] 11 - Digital Gain: 0 [MakerNotes, Canon, Image] 12 - WB Shift AB: 0 [MakerNotes, Canon, Image] 13 - WB Shift GM: 0 [MakerNotes, Canon, Camera] 1 - Measured RGGB: 580 1024 1024 500 [MakerNotes, Canon, Camera] 208 - VRD Offset: 0 [MakerNotes, Canon, Image] 1 - Sensor Width: 3516 [MakerNotes, Canon, Image] 2 - Sensor Height: 2328 [MakerNotes, Canon, Image] 5 - Sensor Left Border: 52 [MakerNotes, Canon, Image] 6 - Sensor Top Border: 19 [MakerNotes, Canon, Image] 7 - Sensor Right Border: 3507 [MakerNotes, Canon, Image] 8 - Sensor Bottom Border: 2322 [MakerNotes, Canon, Image] 9 - Black Mask Left Border: 0 [MakerNotes, Canon, Image] 10 - Black Mask Top Border: 0 [MakerNotes, Canon, Image] 11 - Black Mask Right Border: 0 [MakerNotes, Canon, Image] 12 - Black Mask Bottom Border: 0 [MakerNotes, Canon, Camera] 25 - WB RGGB Levels As Shot: 2002 1185 1187 2364 [MakerNotes, Canon, Camera] 29 - Color Temp As Shot: 3064 [MakerNotes, Canon, Camera] 30 - WB RGGB Levels Auto: 1720 1022 1024 2031 [MakerNotes, Canon, Camera] 34 - Color Temp Auto: 3064 [MakerNotes, Canon, Camera] 35 - WB RGGB Levels Daylight: 2312 1022 1024 1501 [MakerNotes, Canon, Camera] 39 - Color Temp Daylight: 5200 [MakerNotes, Canon, Camera] 40 - WB RGGB Levels Shade: 2714 1022 1024 1246 [MakerNotes, Canon, Camera] 44 - Color Temp Shade: 7000 [MakerNotes, Canon, Camera] 45 - WB RGGB Levels Cloudy: 2512 1022 1024 1355 [MakerNotes, Canon, Camera] 49 - Color Temp Cloudy: 6000 [MakerNotes, Canon, Camera] 50 - WB RGGB Levels Tungsten: 1523 1022 1024 2397 [MakerNotes, Canon, Camera] 54 - Color Temp Tungsten: 3201 [MakerNotes, Canon, Camera] 55 - WB RGGB Levels Fluorescent: 1944 1022 1024 2015 [MakerNotes, Canon, Camera] 59 - Color Temp Fluorescent: 3905 [MakerNotes, Canon, Camera] 60 - WB RGGB Levels Flash: 2606 1022 1024 1308 [MakerNotes, Canon, Camera] 64 - Color Temp Flash: 6440 [MakerNotes, Canon, Camera] 65 - WB RGGB Levels Custom 1: 2312 1022 1024 1501 [MakerNotes, Canon, Camera] 69 - Color Temp Custom 1: 5200 [MakerNotes, Canon, Camera] 70 - WB RGGB Levels Custom 2: 2312 1022 1024 1501 [MakerNotes, Canon, Camera] 74 - Color Temp Custom 2: 5200 [MakerNotes, Canon, Camera] 0 - Camera Color Calibration 01: 333 1013 -410 (11109K) [MakerNotes, Canon, Camera] 4 - Camera Color Calibration 02: 346 963 -376 (9523K) [MakerNotes, Canon, Camera] 8 - Camera Color Calibration 03: 364 897 -329 (8000K) [MakerNotes, Canon, Camera] 12 - Camera Color Calibration 04: 386 841 -284 (7000K) [MakerNotes, Canon, Camera] 16 - Camera Color Calibration 05: 417 773 -225 (6000K) [MakerNotes, Canon, Camera] 20 - Camera Color Calibration 06: 433 738 -194 (5600K) [MakerNotes, Canon, Camera] 24 - Camera Color Calibration 07: 453 698 -156 (5200K) [MakerNotes, Canon, Camera] 28 - Camera Color Calibration 08: 482 650 -108 (4749K) [MakerNotes, Canon, Camera] 32 - Camera Color Calibration 09: 518 600 -53 (4312K) [MakerNotes, Canon, Camera] 36 - Camera Color Calibration 10: 549 565 -10 (4023K) [MakerNotes, Canon, Camera] 40 - Camera Color Calibration 11: 596 516 51 (3696K) [MakerNotes, Canon, Camera] 44 - Camera Color Calibration 12: 677 443 151 (3250K) [MakerNotes, Canon, Camera] 48 - Camera Color Calibration 13: 720 415 196 (3051K) [MakerNotes, Canon, Camera] 52 - Camera Color Calibration 14: 770 382 248 (2871K) [MakerNotes, Canon, Camera] 56 - Camera Color Calibration 15: 949 307 397 (2413K) [MakerNotes, Canon, Camera] 2 - Color Tone: Normal [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-aux, Camera] Lens - Lens: 18.0 - 55.0 mm [XMP, XMP-exif, Image] ComponentsConfiguration - Components Configuration: -, -, -, - [XMP, XMP-exif, Camera] FlashFired - Flash Fired: False [XMP, XMP-exif, Camera] FlashFunction - Flash Function: False [XMP, XMP-exif, Camera] FlashMode - Flash Mode: Off [XMP, XMP-exif, Camera] FlashRedEyeMode - Flash Red Eye Mode: False [XMP, XMP-exif, Camera] FlashReturn - Flash Return: No return detection [XMP, XMP-exifEX, Image] InteroperabilityIndex - Interoperability Index: R98 - DCF basic file (sRGB) [XMP, XMP-pmi, Image] sequenceNumber - Sequence Number: 0 [XMP, XMP-tiff, Image] BitsPerSample - Bits Per Sample: 8, 8, 8 [XMP, XMP-tiff, Image] Compression - Compression: JPEG (old-style) [XMP, XMP-tiff, Image] ImageLength - Image Height: 1024 [XMP, XMP-tiff, Image] ImageWidth - Image Width: 1536 [XMP, XMP-tiff, Image] PhotometricInterpretation - Photometric Interpretation: RGB [XMP, XMP-tiff, Image] PlanarConfiguration - Planar Configuration: Chunky [XMP, XMP-tiff, Image] SamplesPerPixel - Samples Per Pixel: 3 [XMP, XMP-crs, Image] ToneCurve - Tone Curve: Standard [Composite, Composite, Image] Aperture - Aperture: 8.0 [Composite, Composite, Camera] DriveMode - Drive Mode: Single-frame Shooting [Composite, Composite, Other] Flash - Flash: Off, Did not fire [Composite, Composite, Camera] ISO - ISO: 400 [Composite, Composite, Camera] Lens - Lens: 18.0 - 55.0 mm [Composite, Composite, Camera] ShootingMode - Shooting Mode: Aperture-priority AE [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/15 [Composite, Composite, Camera] WB_RGGBLevels - WB RGGB Levels: 2002 1185 1187 2364 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.993255 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Camera] LensID - Lens ID: Unknown 18-55mm [Composite, Composite, Image] LightValue - Light Value: 7.9 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] RedBalance - Red Balance: 1.688027 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.6 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.019 mm [Composite, Composite, Image] FOV - Field Of View: 23.7 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 55.0 mm (35 mm equivalent: 85.9 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 19.66 m [Composite, Composite, Camera] Lens35efl - Lens: 18.0 - 55.0 mm (35 mm equivalent: 28.1 - 85.9 mm) ���������������������������������������Image-ExifTool-10.10/t/CanonVRD.t�������������������������������������������������������������������000644 �000765 �000024 �00000015661 12527073770 016450� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/CanonVRD.t". BEGIN { $| = 1; print "1..22\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::CanonVRD; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'CanonVRD'; my $testnum = 1; # short list of tags to check in tests my @checkTags = qw(FileSize Warning VRDVersion VRDOffset); my @checkDR4 = qw(FileSize Warning GammaBlackPoint RedHSL GreenHSL SharpnessAdjOn); # test 2: Extract information from CanonVRD.vrd { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/CanonVRD.vrd'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Test writing some information { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/ExifTool.jpg'); $exifTool->SetNewValue('xmp:*'); my $testfile = "t/${testname}_${testnum}_failed.vrd"; unlink $testfile; $exifTool->WriteInfo('t/images/CanonVRD.vrd', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # tests 4-8: Write CanonVRD as a block to various images { my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/CanonVRD.vrd', 'CanonVRD'); $exifTool->Options(PrintConv => 0); my ($file, $ext); foreach $file (qw(Writer.jpg ExifTool.jpg CanonRaw.cr2 CanonRaw.crw CanonVRD.vrd)) { ++$testnum; if ($file eq 'CanonVRD.vrd') { $exifTool->SetNewValuesFromFile('t/images/ExifTool.jpg', 'CanonVRD'); } ($ext = $file) =~ s/^\w+//; my $testfile = "t/${testname}_${testnum}_failed$ext"; unlink $testfile; $exifTool->WriteInfo("t/images/$file", $testfile); my $info = $exifTool->ImageInfo($testfile, @checkTags); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } } # test 9: Delete VRD as a block { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValue(CanonVRD => undef, Protected => 1); my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->WriteInfo('t/images/ExifTool.jpg', $testfile); $exifTool->Options(PrintConv => 0); my $info = $exifTool->ImageInfo($testfile, @checkTags); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 10: Create a VRD file from scratch { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/ExifTool.jpg', 'CanonVRD'); $exifTool->Options(PrintConv => 0); my $testfile = "t/${testname}_${testnum}_failed.vrd"; unlink $testfile; $exifTool->WriteInfo(undef, $testfile); my $info = $exifTool->ImageInfo($testfile, @checkTags); if (check($exifTool, $info, $testname, $testnum, 8)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 11-12: Add XMP to a VRD file { my $exifTool = new Image::ExifTool; $exifTool->SetNewValue('XMP:Title', 'XMP in VRD test'); my $srcfile; foreach $srcfile ('t/images/CanonVRD.vrd', undef) { ++$testnum; my $testfile = "t/${testname}_${testnum}_failed.vrd"; unlink $testfile; $exifTool->WriteInfo($srcfile, $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } } # test 13: Extract information from CanonVRD.dr4 { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/CanonVRD.dr4'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 14: Test writing to DR4 { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(PrintConv => 0); $exifTool->SetNewValue(CropX => 123); $exifTool->SetNewValue(SharpnessAdjOn => 0); $exifTool->SetNewValue(RedHSL => '-4.3 1.2 3.8'); $exifTool->SetNewValue('CanonVRD:GammaBlackPoint' => '1.234'); my $testfile = "t/${testname}_${testnum}_failed.dr4"; unlink $testfile; $exifTool->WriteInfo('t/images/CanonVRD.dr4', $testfile); my $info = $exifTool->ImageInfo($testfile, '-filename'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # tests 15-20: Write CanonDR4 as a block to various images { my $exifTool = new Image::ExifTool; my $srcfile = "t/${testname}_14_failed.dr4"; $exifTool->SetNewValuesFromFile($srcfile, 'CanonDR4'); $exifTool->Options(PrintConv => 0); my ($file, $ext); foreach $file (qw(Writer.jpg ExifTool.jpg CanonRaw.cr2 CanonRaw.crw CanonVRD.vrd CanonVRD.dr4)) { ++$testnum; ($ext = $file) =~ s/^\w+//; my $testfile = "t/${testname}_${testnum}_failed$ext"; unlink $testfile; $exifTool->WriteInfo("t/images/$file", $testfile); my $info = $exifTool->ImageInfo($testfile, @checkDR4); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile unless $testnum == 15 or $testnum == 17; unlink $srcfile if $testnum == 20; } else { print 'not '; } print "ok $testnum\n"; } } # test 21: Delete DR4(VRD) as a block { ++$testnum; my $exifTool = new Image::ExifTool; my $srcfile = "t/${testname}_15_failed.jpg"; $exifTool->SetNewValue(CanonDR4 => undef, Protected => 1); my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->WriteInfo($srcfile, $testfile); $exifTool->Options(PrintConv => 0); my $info = $exifTool->ImageInfo($testfile, @checkDR4); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; unlink $srcfile; } else { print 'not '; } print "ok $testnum\n"; } # test 22: Create a DR4 file from scratch { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(PrintConv => 0); my $srcfile = "t/${testname}_17_failed.cr2"; $exifTool->SetNewValuesFromFile($srcfile, 'CanonDR4'); my $testfile = "t/${testname}_${testnum}_failed.dr4"; unlink $testfile; $exifTool->WriteInfo(undef, $testfile); my $info = $exifTool->ImageInfo($testfile, '-filename'); if (check($exifTool, $info, $testname, $testnum, 14)) { unlink $testfile; unlink $srcfile; } else { print 'not '; } print "ok $testnum\n"; } # end �������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_11.out��������������������������������������������������������������000644 �000765 �000024 �00000016711 12546457274 017320� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.96 [File, System, Image] FileName - File Name: CanonVRD_11_failed.vrd [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 4.5 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:05:19 10:17:08-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:05:19 10:17:08-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:05:19 10:17:08-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: VRD [File, File, Image] FileTypeExtension - File Type Extension: vrd [File, File, Image] MIMEType - MIME Type: application/unknown [CanonVRD, CanonVRD, Image] 2 - VRD Version: 2.0.0 [CanonVRD, CanonVRD, Image] 6 - WB Adj RGGB Levels: 1856 832 832 928 [CanonVRD, CanonVRD, Image] 24 - White Balance Adj: Manual (Click) [CanonVRD, CanonVRD, Image] 26 - WB Adj Color Temp: 5600 [CanonVRD, CanonVRD, Image] 36 - WB Fine Tune Active: Yes [CanonVRD, CanonVRD, Image] 40 - WB Fine Tune Saturation: 0 [CanonVRD, CanonVRD, Image] 44 - WB Fine Tune Tone: 358 [CanonVRD, CanonVRD, Image] 46 - Raw Color Adj: Shot Settings [CanonVRD, CanonVRD, Image] 48 - Raw Custom Saturation: 0 [CanonVRD, CanonVRD, Image] 52 - Raw Custom Tone: 0 [CanonVRD, CanonVRD, Image] 56 - Raw Brightness Adj: -0.83 [CanonVRD, CanonVRD, Image] 60 - Tone Curve Property: Shot Settings [CanonVRD, CanonVRD, Image] 122 - Dynamic Range Min: 0 [CanonVRD, CanonVRD, Image] 124 - Dynamic Range Max: 4095 [CanonVRD, CanonVRD, Image] 272 - Tone Curve Active: Yes [CanonVRD, CanonVRD, Image] 275 - Tone Curve Mode: RGB [CanonVRD, CanonVRD, Image] 276 - Brightness Adj: 0 [CanonVRD, CanonVRD, Image] 277 - Contrast Adj: 0 [CanonVRD, CanonVRD, Image] 278 - Saturation Adj: 119 [CanonVRD, CanonVRD, Image] 286 - Color Tone Adj: 0 [CanonVRD, CanonVRD, Image] 294 - Luminance Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 336 - Luminance Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 345 - Tone Curve Interpolation: Curve [CanonVRD, CanonVRD, Image] 352 - Red Curve Points: (0,0) (5,16) (11,30) (58,101) (106,154) (154,198) (202,233) (228,246) (255,255) [CanonVRD, CanonVRD, Image] 394 - Red Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 410 - Green Curve Points: (7,4) (11,23) (16,34) (59,100) (104,147) (149,187) (196,219) (221,232) (248,240) [CanonVRD, CanonVRD, Image] 452 - Green Curve Limits: 248 7 240 4 [CanonVRD, CanonVRD, Image] 468 - Blue Curve Points: (0,0) (5,19) (10,32) (57,104) (104,156) (152,199) (200,233) (227,247) (255,255) [CanonVRD, CanonVRD, Image] 510 - Blue Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 526 - RGB Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 568 - RGB Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 580 - Crop Active: Yes [CanonVRD, CanonVRD, Image] 582 - Crop Left: 1164 [CanonVRD, CanonVRD, Image] 584 - Crop Top: 608 [CanonVRD, CanonVRD, Image] 586 - Crop Width: 564 [CanonVRD, CanonVRD, Image] 588 - Crop Height: 123 [CanonVRD, CanonVRD, Image] 602 - Sharpness Adj: 0 [CanonVRD, CanonVRD, Image] 608 - Crop Aspect Ratio: Free [CanonVRD, CanonVRD, Image] 610 - Constrained Crop Width: 5.5 [CanonVRD, CanonVRD, Image] 614 - Constrained Crop Height: 1.2 [CanonVRD, CanonVRD, Image] 618 - Check Mark: 3 [CanonVRD, CanonVRD, Image] 622 - Rotation: 0 [CanonVRD, CanonVRD, Image] 624 - Work Color Space: ColorMatch RGB [CanonVRD, CanonVRD, Image] 2 - Picture Style: Standard [CanonVRD, CanonVRD, Image] 3 - Is Custom Picture Style: No [CanonVRD, CanonVRD, Image] 13 - Standard Raw Color Tone: -4 [CanonVRD, CanonVRD, Image] 14 - Standard Raw Saturation: 0 [CanonVRD, CanonVRD, Image] 15 - Standard Raw Contrast: 0 [CanonVRD, CanonVRD, Image] 16 - Standard Raw Linear: No [CanonVRD, CanonVRD, Image] 17 - Standard Raw Sharpness: 1 [CanonVRD, CanonVRD, Image] 18 - Standard Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 19 - Standard Raw Shadow Point: 0 [CanonVRD, CanonVRD, Image] 20 - Standard Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 21 - Standard Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 22 - Portrait Raw Color Tone: 4 [CanonVRD, CanonVRD, Image] 23 - Portrait Raw Saturation: 2 [CanonVRD, CanonVRD, Image] 24 - Portrait Raw Contrast: 0 [CanonVRD, CanonVRD, Image] 25 - Portrait Raw Linear: No [CanonVRD, CanonVRD, Image] 26 - Portrait Raw Sharpness: 7 [CanonVRD, CanonVRD, Image] 27 - Portrait Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 28 - Portrait Raw Shadow Point: 6 [CanonVRD, CanonVRD, Image] 29 - Portrait Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 30 - Portrait Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 31 - Landscape Raw Color Tone: 4 [CanonVRD, CanonVRD, Image] 32 - Landscape Raw Saturation: 2 [CanonVRD, CanonVRD, Image] 33 - Landscape Raw Contrast: 0 [CanonVRD, CanonVRD, Image] 34 - Landscape Raw Linear: No [CanonVRD, CanonVRD, Image] 35 - Landscape Raw Sharpness: 7 [CanonVRD, CanonVRD, Image] 36 - Landscape Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 37 - Landscape Raw Shadow Point: 6 [CanonVRD, CanonVRD, Image] 38 - Landscape Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 39 - Landscape Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 40 - Neutral Raw Color Tone: 4 [CanonVRD, CanonVRD, Image] 41 - Neutral Raw Saturation: 2 [CanonVRD, CanonVRD, Image] 42 - Neutral Raw Contrast: 0 [CanonVRD, CanonVRD, Image] 43 - Neutral Raw Linear: No [CanonVRD, CanonVRD, Image] 44 - Neutral Raw Sharpness: 7 [CanonVRD, CanonVRD, Image] 45 - Neutral Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 46 - Neutral Raw Shadow Point: 6 [CanonVRD, CanonVRD, Image] 47 - Neutral Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 48 - Neutral Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 49 - Faithful Raw Color Tone: 4 [CanonVRD, CanonVRD, Image] 50 - Faithful Raw Saturation: 2 [CanonVRD, CanonVRD, Image] 51 - Faithful Raw Contrast: 0 [CanonVRD, CanonVRD, Image] 52 - Faithful Raw Linear: No [CanonVRD, CanonVRD, Image] 53 - Faithful Raw Sharpness: 7 [CanonVRD, CanonVRD, Image] 54 - Faithful Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 55 - Faithful Raw Shadow Point: 6 [CanonVRD, CanonVRD, Image] 56 - Faithful Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 57 - Faithful Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 58 - Monochrome Filter Effect: Yellow [CanonVRD, CanonVRD, Image] 59 - Monochrome Toning Effect: Purple [CanonVRD, CanonVRD, Image] 60 - Monochrome Contrast: 3 [CanonVRD, CanonVRD, Image] 61 - Monochrome Linear: No [CanonVRD, CanonVRD, Image] 62 - Monochrome Sharpness: 4 [CanonVRD, CanonVRD, Image] 63 - Monochrome Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 64 - Monochrome Raw Shadow Point: 0 [CanonVRD, CanonVRD, Image] 65 - Monochrome Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 66 - Monochrome Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 76 - Custom Color Tone: 4 [CanonVRD, CanonVRD, Image] 77 - Custom Saturation: 2 [CanonVRD, CanonVRD, Image] 78 - Custom Contrast: 0 [CanonVRD, CanonVRD, Image] 79 - Custom Linear: No [CanonVRD, CanonVRD, Image] 80 - Custom Sharpness: 7 [CanonVRD, CanonVRD, Image] 81 - Custom Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 82 - Custom Raw Shadow Point: 6 [CanonVRD, CanonVRD, Image] 83 - Custom Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 84 - Custom Output Shadow Point: 0 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.96 [XMP, XMP-dc, Image] title - Title: XMP in VRD test �������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_12.out��������������������������������������������������������������000644 �000765 �000024 �00000001560 12546457274 017315� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: CanonVRD_12_failed.vrd [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 2.9 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:37-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:37-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:37-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: VRD [File, File, Image] FileTypeExtension - File Type Extension: vrd [File, File, Image] MIMEType - MIME Type: application/unknown [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-dc, Image] title - Title: XMP in VRD test ������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_13.out��������������������������������������������������������������000644 �000765 �000024 �00000014205 12566603310 017300� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.01 [File, System, Image] FileName - File Name: CanonVRD.dr4 [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 5.3 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:05:18 15:47:02-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:08:24 07:54:12-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:08:18 09:11:12-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: DR4 [File, File, Image] FileTypeExtension - File Type Extension: dr4 [File, File, Image] MIMEType - MIME Type: application/unknown [CanonVRD, CanonVRD, Image] 3 - DR4 Camera Model: EOS 7D Mark II [CanonVRD, CanonVRD, Image] 65538 - Rotation: 0 [CanonVRD, CanonVRD, Image] 65539 - Angle Adj: 13.08 [CanonVRD, CanonVRD, Image] 65793 - Check Mark: Clear [CanonVRD, CanonVRD, Image] 66048 - Work Color Space: Wide Gamut RGB [CanonVRD, CanonVRD, Image] 131073 - Raw Brightness Adj: 0 [CanonVRD, CanonVRD, Image] 131329 - White Balance Adj: Cloudy [CanonVRD, CanonVRD, Image] 131330 - WB Adj Color Temp: 5200 [CanonVRD, CanonVRD, Image] 131333 - WB Adj Magenta Green: -5 [CanonVRD, CanonVRD, Image] 131334 - WB Adj Blue Amber: 3 [CanonVRD, CanonVRD, Image] 131584 - Gamma Linear: No [CanonVRD, CanonVRD, Image] 131841 - Picture Style: Neutral [CanonVRD, CanonVRD, Image] 131843 - Contrast Adj: -1 [CanonVRD, CanonVRD, Image] 131844 - Color Tone Adj: 0.7 [CanonVRD, CanonVRD, Image] 131845 - Color Saturation Adj: 1.6 [CanonVRD, CanonVRD, Image] 131846 - Monochrome Toning Effect: None [CanonVRD, CanonVRD, Image] 131847 - Monochrome Filter Effect: None [CanonVRD, CanonVRD, Image] 131848 - Unsharp Mask Strength: 3 [CanonVRD, CanonVRD, Image] 131849 - Unsharp Mask Fineness: 2 [CanonVRD, CanonVRD, Image] 131850 - Unsharp Mask Threshold: 7.2 [CanonVRD, CanonVRD, Image] 131851 - Shadow Adj: -0.1 [CanonVRD, CanonVRD, Image] 131852 - Highlight Adj: 0.5 [CanonVRD, CanonVRD, Image] 0 - Tone Curve Color Space: Luminance [CanonVRD, CanonVRD, Image] 1 - Tone Curve Shape: Straight [CanonVRD, CanonVRD, Image] 3 - Tone Curve Input Range: 0 242 [CanonVRD, CanonVRD, Image] 5 - Tone Curve Output Range: 79 255 [CanonVRD, CanonVRD, Image] 7 - RGB Curve Points: (0,79) (117,172) (242,255) [CanonVRD, CanonVRD, Image] 10 - Tone Curve X: 117 [CanonVRD, CanonVRD, Image] 11 - Tone Curve Y: 172 [CanonVRD, CanonVRD, Image] 45 - Red Curve Points: (2,3) (126,116) (254,253) [CanonVRD, CanonVRD, Image] 83 - Green Curve Points: (1,2) (125,139) (254,253) [CanonVRD, CanonVRD, Image] 121 - Blue Curve Points: (3,4) (132,113) (255,255) [CanonVRD, CanonVRD, Image] 0x20400.1 - Tone Curve Original: No [CanonVRD, CanonVRD, Image] 132112 - Tone Curve Brightness: 34 [CanonVRD, CanonVRD, Image] 132113 - Tone Curve Contrast: -20 [CanonVRD, CanonVRD, Image] 132352 - Auto Lighting Optimizer: Strong [CanonVRD, CanonVRD, Image] 0x20500.0 - Auto Lighting Optimizer On: Yes [CanonVRD, CanonVRD, Image] 131856 - Sharpness Adj: Unsharp Mask [CanonVRD, CanonVRD, Image] 0x20310.0 - Sharpness Adj On: Yes [CanonVRD, CanonVRD, Image] 131857 - Sharpness Strength: 0 [CanonVRD, CanonVRD, Image] 133376 - Color Hue: -10 [CanonVRD, CanonVRD, Image] 133377 - Saturation Adj: 98 [CanonVRD, CanonVRD, Image] 133392 - Red HSL: -1 -0.9 -0.8 [CanonVRD, CanonVRD, Image] 133393 - Orange HSL: -0.7 -0.6 -0.5 [CanonVRD, CanonVRD, Image] 133394 - Green HSL: -0.4 -0.3 -0.2 [CanonVRD, CanonVRD, Image] 133395 - Aqua HSL: -0.1 0 0.1 [CanonVRD, CanonVRD, Image] 133396 - Blue HSL: 0.2 0.3 0.4 [CanonVRD, CanonVRD, Image] 133397 - Blue HSL: 0.5 0.6 0.7 [CanonVRD, CanonVRD, Image] 133398 - Purple HSL: 0.8 0.9 1 [CanonVRD, CanonVRD, Image] 133399 - Magenta HSL: 1.1 1.2 1.3 [CanonVRD, CanonVRD, Image] 132608 - Luminance Noise Reduction: 4.4 [CanonVRD, CanonVRD, Image] 132609 - Chrominance Noise Reduction: 2.7 [CanonVRD, CanonVRD, Image] 132865 - Shooting Distance: 100% [CanonVRD, CanonVRD, Image] 132866 - Peripheral Illumination: 34 [CanonVRD, CanonVRD, Image] 0x20702.0 - Peripheral Illumination On: Yes [CanonVRD, CanonVRD, Image] 132867 - Chromatic Aberration: 121 [CanonVRD, CanonVRD, Image] 0x20703.0 - Chromatic Aberration On: Yes [CanonVRD, CanonVRD, Image] 132868 - Color Blur On: Yes [CanonVRD, CanonVRD, Image] 132869 - Distortion Correction: 48 [CanonVRD, CanonVRD, Image] 0x20705.0 - Distortion Correction On: Yes [CanonVRD, CanonVRD, Image] 132870 - DLO Setting: 50 [CanonVRD, CanonVRD, Image] 0x20706.0 - DLO On: No [CanonVRD, CanonVRD, Image] 132871 - Chromatic Aberration Red: -0.1 [CanonVRD, CanonVRD, Image] 132872 - Chromatic Aberration Blue: -0.5 [CanonVRD, CanonVRD, Image] 2 - Gamma Contrast: 0 [CanonVRD, CanonVRD, Image] 3 - Gamma Color Tone: 0 [CanonVRD, CanonVRD, Image] 4 - Gamma Saturation: 0 [CanonVRD, CanonVRD, Image] 5 - Gamma Unsharp Mask Strength: 3 [CanonVRD, CanonVRD, Image] 6 - Gamma Unsharp Mask Fineness: 4 [CanonVRD, CanonVRD, Image] 7 - Gamma Unsharp Mask Threshold: 4 [CanonVRD, CanonVRD, Image] 8 - Gamma Sharpness Strength: 3 [CanonVRD, CanonVRD, Image] 9 - Gamma Shadow: 0 [CanonVRD, CanonVRD, Image] 10 - Gamma Highlight: 0 [CanonVRD, CanonVRD, Image] 12 - Gamma Black Point: +0.000 [CanonVRD, CanonVRD, Image] 13 - Gamma White Point: +0.000 [CanonVRD, CanonVRD, Image] 14 - Gamma Mid Point: +0.000 [CanonVRD, CanonVRD, Image] 15 - Gamma Curve Output Range: 0 16383 [CanonVRD, CanonVRD, Image] 0 - Crop Active: Yes [CanonVRD, CanonVRD, Image] 1 - Crop Rotated Original Width: 6089 [CanonVRD, CanonVRD, Image] 2 - Crop Rotated Original Height: 4740 [CanonVRD, CanonVRD, Image] 3 - Crop X: 2060 [CanonVRD, CanonVRD, Image] 4 - Crop Y: 1291 [CanonVRD, CanonVRD, Image] 5 - Crop Width: 2952 [CanonVRD, CanonVRD, Image] 6 - Crop Height: 1476 [CanonVRD, CanonVRD, Image] 8 - Crop Rotation: 13.08 [CanonVRD, CanonVRD, Image] 10 - Crop Original Width: 5472 [CanonVRD, CanonVRD, Image] 11 - Crop Original Height: 3648 [CanonVRD, CanonVRD, Image] 2 - Stamp Tool Count: 0 [CanonVRD, CanonVRD, Image] 196865 - Crop Aspect Ratio: Custom [CanonVRD, CanonVRD, Image] 196866 - Crop Aspect Ratio Custom: 2 1 [CanonVRD, CanonVRD, Image] 984338 - Lens Focal Length: 135 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_14.out��������������������������������������������������������������000644 �000765 �000024 �00000014100 12566603310 017273� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.01 [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 5472 [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:08:24 07:56:06-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:08:24 07:56:06-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:08:24 07:56:06-04:00 [File, System, Image] FilePermissions - File Permissions: 644 [File, File, Image] FileType - File Type: DR4 [File, File, Image] FileTypeExtension - File Type Extension: DR4 [File, File, Image] MIMEType - MIME Type: application/unknown [CanonVRD, CanonVRD, Image] 3 - DR4 Camera Model: 2147484297 [CanonVRD, CanonVRD, Image] 65538 - Rotation: 0 [CanonVRD, CanonVRD, Image] 65539 - Angle Adj: 13.08 [CanonVRD, CanonVRD, Image] 65793 - Check Mark: 0 [CanonVRD, CanonVRD, Image] 66048 - Work Color Space: 3 [CanonVRD, CanonVRD, Image] 131073 - Raw Brightness Adj: 0 [CanonVRD, CanonVRD, Image] 131329 - White Balance Adj: 2 [CanonVRD, CanonVRD, Image] 131330 - WB Adj Color Temp: 5200 [CanonVRD, CanonVRD, Image] 131333 - WB Adj Magenta Green: -5 [CanonVRD, CanonVRD, Image] 131334 - WB Adj Blue Amber: 3 [CanonVRD, CanonVRD, Image] 131584 - Gamma Linear: 0 [CanonVRD, CanonVRD, Image] 131841 - Picture Style: 132 [CanonVRD, CanonVRD, Image] 131843 - Contrast Adj: -1 [CanonVRD, CanonVRD, Image] 131844 - Color Tone Adj: 0.7 [CanonVRD, CanonVRD, Image] 131845 - Color Saturation Adj: 1.6 [CanonVRD, CanonVRD, Image] 131846 - Monochrome Toning Effect: 0 [CanonVRD, CanonVRD, Image] 131847 - Monochrome Filter Effect: 0 [CanonVRD, CanonVRD, Image] 131848 - Unsharp Mask Strength: 3 [CanonVRD, CanonVRD, Image] 131849 - Unsharp Mask Fineness: 2 [CanonVRD, CanonVRD, Image] 131850 - Unsharp Mask Threshold: 7.2 [CanonVRD, CanonVRD, Image] 131851 - Shadow Adj: -0.1 [CanonVRD, CanonVRD, Image] 131852 - Highlight Adj: 0.5 [CanonVRD, CanonVRD, Image] 0 - Tone Curve Color Space: 1 [CanonVRD, CanonVRD, Image] 1 - Tone Curve Shape: 1 [CanonVRD, CanonVRD, Image] 3 - Tone Curve Input Range: 0 242 [CanonVRD, CanonVRD, Image] 5 - Tone Curve Output Range: 79 255 [CanonVRD, CanonVRD, Image] 7 - RGB Curve Points: 3 0 79 117 172 242 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [CanonVRD, CanonVRD, Image] 10 - Tone Curve X: 117 [CanonVRD, CanonVRD, Image] 11 - Tone Curve Y: 172 [CanonVRD, CanonVRD, Image] 45 - Red Curve Points: 3 2 3 126 116 254 253 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [CanonVRD, CanonVRD, Image] 83 - Green Curve Points: 3 1 2 125 139 254 253 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [CanonVRD, CanonVRD, Image] 121 - Blue Curve Points: 3 3 4 132 113 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [CanonVRD, CanonVRD, Image] 0x20400.1 - Tone Curve Original: 0 [CanonVRD, CanonVRD, Image] 132112 - Tone Curve Brightness: 34 [CanonVRD, CanonVRD, Image] 132113 - Tone Curve Contrast: -20 [CanonVRD, CanonVRD, Image] 132352 - Auto Lighting Optimizer: 2 [CanonVRD, CanonVRD, Image] 0x20500.0 - Auto Lighting Optimizer On: 1 [CanonVRD, CanonVRD, Image] 131856 - Sharpness Adj: 1 [CanonVRD, CanonVRD, Image] 0x20310.0 - Sharpness Adj On: 0 [CanonVRD, CanonVRD, Image] 131857 - Sharpness Strength: 0 [CanonVRD, CanonVRD, Image] 133376 - Color Hue: -10 [CanonVRD, CanonVRD, Image] 133377 - Saturation Adj: 98 [CanonVRD, CanonVRD, Image] 133392 - Red HSL: -4.3 1.2 3.8 [CanonVRD, CanonVRD, Image] 133393 - Orange HSL: -0.7 -0.6 -0.5 [CanonVRD, CanonVRD, Image] 133394 - Green HSL: -0.4 -0.3 -0.2 [CanonVRD, CanonVRD, Image] 133395 - Aqua HSL: -0.1 0 0.1 [CanonVRD, CanonVRD, Image] 133396 - Blue HSL: 0.2 0.3 0.4 [CanonVRD, CanonVRD, Image] 133397 - Blue HSL: 0.5 0.6 0.7 [CanonVRD, CanonVRD, Image] 133398 - Purple HSL: 0.8 0.9 1 [CanonVRD, CanonVRD, Image] 133399 - Magenta HSL: 1.1 1.2 1.3 [CanonVRD, CanonVRD, Image] 132608 - Luminance Noise Reduction: 4.4 [CanonVRD, CanonVRD, Image] 132609 - Chrominance Noise Reduction: 2.7 [CanonVRD, CanonVRD, Image] 132865 - Shooting Distance: 1 [CanonVRD, CanonVRD, Image] 132866 - Peripheral Illumination: 34 [CanonVRD, CanonVRD, Image] 0x20702.0 - Peripheral Illumination On: 1 [CanonVRD, CanonVRD, Image] 132867 - Chromatic Aberration: 121 [CanonVRD, CanonVRD, Image] 0x20703.0 - Chromatic Aberration On: 1 [CanonVRD, CanonVRD, Image] 132868 - Color Blur On: 1 [CanonVRD, CanonVRD, Image] 132869 - Distortion Correction: 48 [CanonVRD, CanonVRD, Image] 0x20705.0 - Distortion Correction On: 1 [CanonVRD, CanonVRD, Image] 132870 - DLO Setting: 50 [CanonVRD, CanonVRD, Image] 0x20706.0 - DLO On: 0 [CanonVRD, CanonVRD, Image] 132871 - Chromatic Aberration Red: -0.1 [CanonVRD, CanonVRD, Image] 132872 - Chromatic Aberration Blue: -0.5 [CanonVRD, CanonVRD, Image] 2 - Gamma Contrast: 0 [CanonVRD, CanonVRD, Image] 3 - Gamma Color Tone: 0 [CanonVRD, CanonVRD, Image] 4 - Gamma Saturation: 0 [CanonVRD, CanonVRD, Image] 5 - Gamma Unsharp Mask Strength: 3 [CanonVRD, CanonVRD, Image] 6 - Gamma Unsharp Mask Fineness: 4 [CanonVRD, CanonVRD, Image] 7 - Gamma Unsharp Mask Threshold: 4 [CanonVRD, CanonVRD, Image] 8 - Gamma Sharpness Strength: 3 [CanonVRD, CanonVRD, Image] 9 - Gamma Shadow: 0 [CanonVRD, CanonVRD, Image] 10 - Gamma Highlight: 0 [CanonVRD, CanonVRD, Image] 12 - Gamma Black Point: 1.23403077716592 [CanonVRD, CanonVRD, Image] 13 - Gamma White Point: 0 [CanonVRD, CanonVRD, Image] 14 - Gamma Mid Point: 0 [CanonVRD, CanonVRD, Image] 15 - Gamma Curve Output Range: 0 16383 [CanonVRD, CanonVRD, Image] 0 - Crop Active: 1 [CanonVRD, CanonVRD, Image] 1 - Crop Rotated Original Width: 6089 [CanonVRD, CanonVRD, Image] 2 - Crop Rotated Original Height: 4740 [CanonVRD, CanonVRD, Image] 3 - Crop X: 123 [CanonVRD, CanonVRD, Image] 4 - Crop Y: 1291 [CanonVRD, CanonVRD, Image] 5 - Crop Width: 2952 [CanonVRD, CanonVRD, Image] 6 - Crop Height: 1476 [CanonVRD, CanonVRD, Image] 8 - Crop Rotation: 13.08 [CanonVRD, CanonVRD, Image] 10 - Crop Original Width: 5472 [CanonVRD, CanonVRD, Image] 11 - Crop Original Height: 3648 [CanonVRD, CanonVRD, Image] 2 - Stamp Tool Count: 0 [CanonVRD, CanonVRD, Image] 196865 - Crop Aspect Ratio: 1 [CanonVRD, CanonVRD, Image] 196866 - Crop Aspect Ratio Custom: 2 1 [CanonVRD, CanonVRD, Image] 984338 - Lens Focal Length: 135 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_15.out��������������������������������������������������������������000644 �000765 �000024 �00000000454 12527073772 017315� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 5831 [CanonVRD, CanonVRD, Image] 0x20310.0 - Sharpness Adj On: 0 [CanonVRD, CanonVRD, Image] 133392 - Red HSL: -4.3 1.2 3.8 [CanonVRD, CanonVRD, Image] 133394 - Green HSL: -0.4 -0.3 -0.2 [CanonVRD, CanonVRD, Image] 12 - Gamma Black Point: 1.23403077716592 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_16.out��������������������������������������������������������������000644 �000765 �000024 �00000000455 12527073772 017317� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 34205 [CanonVRD, CanonVRD, Image] 0x20310.0 - Sharpness Adj On: 0 [CanonVRD, CanonVRD, Image] 133392 - Red HSL: -4.3 1.2 3.8 [CanonVRD, CanonVRD, Image] 133394 - Green HSL: -0.4 -0.3 -0.2 [CanonVRD, CanonVRD, Image] 12 - Gamma Black Point: 1.23403077716592 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_17.out��������������������������������������������������������������000644 �000765 �000024 �00000000455 12527073772 017320� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 14306 [CanonVRD, CanonVRD, Image] 0x20310.0 - Sharpness Adj On: 0 [CanonVRD, CanonVRD, Image] 133392 - Red HSL: -4.3 1.2 3.8 [CanonVRD, CanonVRD, Image] 133394 - Green HSL: -0.4 -0.3 -0.2 [CanonVRD, CanonVRD, Image] 12 - Gamma Black Point: 1.23403077716592 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_18.out��������������������������������������������������������������000644 �000765 �000024 �00000000455 12527073772 017321� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 11836 [CanonVRD, CanonVRD, Image] 0x20310.0 - Sharpness Adj On: 0 [CanonVRD, CanonVRD, Image] 133392 - Red HSL: -4.3 1.2 3.8 [CanonVRD, CanonVRD, Image] 133394 - Green HSL: -0.4 -0.3 -0.2 [CanonVRD, CanonVRD, Image] 12 - Gamma Black Point: 1.23403077716592 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_19.out��������������������������������������������������������������000644 �000765 �000024 �00000000454 12527073772 017321� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 5580 [CanonVRD, CanonVRD, Image] 0x20310.0 - Sharpness Adj On: 0 [CanonVRD, CanonVRD, Image] 133392 - Red HSL: -4.3 1.2 3.8 [CanonVRD, CanonVRD, Image] 133394 - Green HSL: -0.4 -0.3 -0.2 [CanonVRD, CanonVRD, Image] 12 - Gamma Black Point: 1.23403077716592 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_2.out���������������������������������������������������������������000644 �000765 �000024 �00000016525 12546457274 017243� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.96 [File, System, Image] FileName - File Name: CanonVRD.vrd [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1768 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:11:07 22:13:23-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:05:18 16:16:03-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:02-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: VRD [File, File, Image] FileTypeExtension - File Type Extension: vrd [File, File, Image] MIMEType - MIME Type: application/unknown [CanonVRD, CanonVRD, Image] 2 - VRD Version: 2.0.0 [CanonVRD, CanonVRD, Image] 6 - WB Adj RGGB Levels: 1856 832 832 928 [CanonVRD, CanonVRD, Image] 24 - White Balance Adj: Manual (Click) [CanonVRD, CanonVRD, Image] 26 - WB Adj Color Temp: 5600 [CanonVRD, CanonVRD, Image] 36 - WB Fine Tune Active: Yes [CanonVRD, CanonVRD, Image] 40 - WB Fine Tune Saturation: 0 [CanonVRD, CanonVRD, Image] 44 - WB Fine Tune Tone: 358 [CanonVRD, CanonVRD, Image] 46 - Raw Color Adj: Shot Settings [CanonVRD, CanonVRD, Image] 48 - Raw Custom Saturation: 0 [CanonVRD, CanonVRD, Image] 52 - Raw Custom Tone: 0 [CanonVRD, CanonVRD, Image] 56 - Raw Brightness Adj: -0.83 [CanonVRD, CanonVRD, Image] 60 - Tone Curve Property: Shot Settings [CanonVRD, CanonVRD, Image] 122 - Dynamic Range Min: 0 [CanonVRD, CanonVRD, Image] 124 - Dynamic Range Max: 4095 [CanonVRD, CanonVRD, Image] 272 - Tone Curve Active: Yes [CanonVRD, CanonVRD, Image] 275 - Tone Curve Mode: RGB [CanonVRD, CanonVRD, Image] 276 - Brightness Adj: 0 [CanonVRD, CanonVRD, Image] 277 - Contrast Adj: 0 [CanonVRD, CanonVRD, Image] 278 - Saturation Adj: 119 [CanonVRD, CanonVRD, Image] 286 - Color Tone Adj: 0 [CanonVRD, CanonVRD, Image] 294 - Luminance Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 336 - Luminance Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 345 - Tone Curve Interpolation: Curve [CanonVRD, CanonVRD, Image] 352 - Red Curve Points: (0,0) (5,16) (11,30) (58,101) (106,154) (154,198) (202,233) (228,246) (255,255) [CanonVRD, CanonVRD, Image] 394 - Red Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 410 - Green Curve Points: (7,4) (11,23) (16,34) (59,100) (104,147) (149,187) (196,219) (221,232) (248,240) [CanonVRD, CanonVRD, Image] 452 - Green Curve Limits: 248 7 240 4 [CanonVRD, CanonVRD, Image] 468 - Blue Curve Points: (0,0) (5,19) (10,32) (57,104) (104,156) (152,199) (200,233) (227,247) (255,255) [CanonVRD, CanonVRD, Image] 510 - Blue Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 526 - RGB Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 568 - RGB Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 580 - Crop Active: Yes [CanonVRD, CanonVRD, Image] 582 - Crop Left: 1164 [CanonVRD, CanonVRD, Image] 584 - Crop Top: 608 [CanonVRD, CanonVRD, Image] 586 - Crop Width: 564 [CanonVRD, CanonVRD, Image] 588 - Crop Height: 123 [CanonVRD, CanonVRD, Image] 602 - Sharpness Adj: 0 [CanonVRD, CanonVRD, Image] 608 - Crop Aspect Ratio: Free [CanonVRD, CanonVRD, Image] 610 - Constrained Crop Width: 5.5 [CanonVRD, CanonVRD, Image] 614 - Constrained Crop Height: 1.2 [CanonVRD, CanonVRD, Image] 618 - Check Mark: 3 [CanonVRD, CanonVRD, Image] 622 - Rotation: 0 [CanonVRD, CanonVRD, Image] 624 - Work Color Space: ColorMatch RGB [CanonVRD, CanonVRD, Image] 2 - Picture Style: Standard [CanonVRD, CanonVRD, Image] 3 - Is Custom Picture Style: No [CanonVRD, CanonVRD, Image] 13 - Standard Raw Color Tone: -4 [CanonVRD, CanonVRD, Image] 14 - Standard Raw Saturation: 0 [CanonVRD, CanonVRD, Image] 15 - Standard Raw Contrast: 0 [CanonVRD, CanonVRD, Image] 16 - Standard Raw Linear: No [CanonVRD, CanonVRD, Image] 17 - Standard Raw Sharpness: 1 [CanonVRD, CanonVRD, Image] 18 - Standard Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 19 - Standard Raw Shadow Point: 0 [CanonVRD, CanonVRD, Image] 20 - Standard Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 21 - Standard Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 22 - Portrait Raw Color Tone: 4 [CanonVRD, CanonVRD, Image] 23 - Portrait Raw Saturation: 2 [CanonVRD, CanonVRD, Image] 24 - Portrait Raw Contrast: 0 [CanonVRD, CanonVRD, Image] 25 - Portrait Raw Linear: No [CanonVRD, CanonVRD, Image] 26 - Portrait Raw Sharpness: 7 [CanonVRD, CanonVRD, Image] 27 - Portrait Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 28 - Portrait Raw Shadow Point: 6 [CanonVRD, CanonVRD, Image] 29 - Portrait Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 30 - Portrait Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 31 - Landscape Raw Color Tone: 4 [CanonVRD, CanonVRD, Image] 32 - Landscape Raw Saturation: 2 [CanonVRD, CanonVRD, Image] 33 - Landscape Raw Contrast: 0 [CanonVRD, CanonVRD, Image] 34 - Landscape Raw Linear: No [CanonVRD, CanonVRD, Image] 35 - Landscape Raw Sharpness: 7 [CanonVRD, CanonVRD, Image] 36 - Landscape Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 37 - Landscape Raw Shadow Point: 6 [CanonVRD, CanonVRD, Image] 38 - Landscape Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 39 - Landscape Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 40 - Neutral Raw Color Tone: 4 [CanonVRD, CanonVRD, Image] 41 - Neutral Raw Saturation: 2 [CanonVRD, CanonVRD, Image] 42 - Neutral Raw Contrast: 0 [CanonVRD, CanonVRD, Image] 43 - Neutral Raw Linear: No [CanonVRD, CanonVRD, Image] 44 - Neutral Raw Sharpness: 7 [CanonVRD, CanonVRD, Image] 45 - Neutral Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 46 - Neutral Raw Shadow Point: 6 [CanonVRD, CanonVRD, Image] 47 - Neutral Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 48 - Neutral Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 49 - Faithful Raw Color Tone: 4 [CanonVRD, CanonVRD, Image] 50 - Faithful Raw Saturation: 2 [CanonVRD, CanonVRD, Image] 51 - Faithful Raw Contrast: 0 [CanonVRD, CanonVRD, Image] 52 - Faithful Raw Linear: No [CanonVRD, CanonVRD, Image] 53 - Faithful Raw Sharpness: 7 [CanonVRD, CanonVRD, Image] 54 - Faithful Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 55 - Faithful Raw Shadow Point: 6 [CanonVRD, CanonVRD, Image] 56 - Faithful Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 57 - Faithful Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 58 - Monochrome Filter Effect: Yellow [CanonVRD, CanonVRD, Image] 59 - Monochrome Toning Effect: Purple [CanonVRD, CanonVRD, Image] 60 - Monochrome Contrast: 3 [CanonVRD, CanonVRD, Image] 61 - Monochrome Linear: No [CanonVRD, CanonVRD, Image] 62 - Monochrome Sharpness: 4 [CanonVRD, CanonVRD, Image] 63 - Monochrome Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 64 - Monochrome Raw Shadow Point: 0 [CanonVRD, CanonVRD, Image] 65 - Monochrome Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 66 - Monochrome Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 76 - Custom Color Tone: 4 [CanonVRD, CanonVRD, Image] 77 - Custom Saturation: 2 [CanonVRD, CanonVRD, Image] 78 - Custom Contrast: 0 [CanonVRD, CanonVRD, Image] 79 - Custom Linear: No [CanonVRD, CanonVRD, Image] 80 - Custom Sharpness: 7 [CanonVRD, CanonVRD, Image] 81 - Custom Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 82 - Custom Raw Shadow Point: 6 [CanonVRD, CanonVRD, Image] 83 - Custom Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 84 - Custom Output Shadow Point: 0 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_20.out��������������������������������������������������������������000644 �000765 �000024 �00000000454 12527073772 017311� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 5472 [CanonVRD, CanonVRD, Image] 0x20310.0 - Sharpness Adj On: 0 [CanonVRD, CanonVRD, Image] 133392 - Red HSL: -4.3 1.2 3.8 [CanonVRD, CanonVRD, Image] 133394 - Green HSL: -0.4 -0.3 -0.2 [CanonVRD, CanonVRD, Image] 12 - Gamma Black Point: 1.23403077716592 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_21.out��������������������������������������������������������������000644 �000765 �000024 �00000000060 12526347567 017310� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 251 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_3.out���������������������������������������������������������������000644 �000765 �000024 �00000016167 12546457274 017246� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.96 [File, System, Image] FileName - File Name: CanonVRD_3_failed.vrd [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 1768 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:05:19 10:17:08-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:05:19 10:17:08-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:05:19 10:17:08-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: VRD [File, File, Image] FileTypeExtension - File Type Extension: vrd [File, File, Image] MIMEType - MIME Type: application/unknown [CanonVRD, CanonVRD, Image] 2 - VRD Version: 2.0.0 [CanonVRD, CanonVRD, Image] 6 - WB Adj RGGB Levels: 0 0 0 0 [CanonVRD, CanonVRD, Image] 24 - White Balance Adj: Shot Settings [CanonVRD, CanonVRD, Image] 26 - WB Adj Color Temp: 5600 [CanonVRD, CanonVRD, Image] 36 - WB Fine Tune Active: No [CanonVRD, CanonVRD, Image] 40 - WB Fine Tune Saturation: 0 [CanonVRD, CanonVRD, Image] 44 - WB Fine Tune Tone: 0 [CanonVRD, CanonVRD, Image] 46 - Raw Color Adj: Shot Settings [CanonVRD, CanonVRD, Image] 48 - Raw Custom Saturation: 0 [CanonVRD, CanonVRD, Image] 52 - Raw Custom Tone: 0 [CanonVRD, CanonVRD, Image] 56 - Raw Brightness Adj: 0.00 [CanonVRD, CanonVRD, Image] 60 - Tone Curve Property: Shot Settings [CanonVRD, CanonVRD, Image] 122 - Dynamic Range Min: 0 [CanonVRD, CanonVRD, Image] 124 - Dynamic Range Max: 4095 [CanonVRD, CanonVRD, Image] 272 - Tone Curve Active: No [CanonVRD, CanonVRD, Image] 275 - Tone Curve Mode: RGB [CanonVRD, CanonVRD, Image] 276 - Brightness Adj: 0 [CanonVRD, CanonVRD, Image] 277 - Contrast Adj: 0 [CanonVRD, CanonVRD, Image] 278 - Saturation Adj: 100 [CanonVRD, CanonVRD, Image] 286 - Color Tone Adj: 0 [CanonVRD, CanonVRD, Image] 294 - Luminance Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 336 - Luminance Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 345 - Tone Curve Interpolation: Curve [CanonVRD, CanonVRD, Image] 352 - Red Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 394 - Red Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 410 - Green Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 452 - Green Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 468 - Blue Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 510 - Blue Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 526 - RGB Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 568 - RGB Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 580 - Crop Active: No [CanonVRD, CanonVRD, Image] 582 - Crop Left: 438 [CanonVRD, CanonVRD, Image] 584 - Crop Top: 618 [CanonVRD, CanonVRD, Image] 586 - Crop Width: 0 [CanonVRD, CanonVRD, Image] 588 - Crop Height: 0 [CanonVRD, CanonVRD, Image] 602 - Sharpness Adj: 0 [CanonVRD, CanonVRD, Image] 608 - Crop Aspect Ratio: Free [CanonVRD, CanonVRD, Image] 610 - Constrained Crop Width: 0 [CanonVRD, CanonVRD, Image] 614 - Constrained Crop Height: 0 [CanonVRD, CanonVRD, Image] 618 - Check Mark: Clear [CanonVRD, CanonVRD, Image] 622 - Rotation: 0 [CanonVRD, CanonVRD, Image] 624 - Work Color Space: sRGB [CanonVRD, CanonVRD, Image] 2 - Picture Style: Standard [CanonVRD, CanonVRD, Image] 3 - Is Custom Picture Style: No [CanonVRD, CanonVRD, Image] 13 - Standard Raw Color Tone: -4 [CanonVRD, CanonVRD, Image] 14 - Standard Raw Saturation: 0 [CanonVRD, CanonVRD, Image] 15 - Standard Raw Contrast: 0 [CanonVRD, CanonVRD, Image] 16 - Standard Raw Linear: No [CanonVRD, CanonVRD, Image] 17 - Standard Raw Sharpness: 1 [CanonVRD, CanonVRD, Image] 18 - Standard Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 19 - Standard Raw Shadow Point: 0 [CanonVRD, CanonVRD, Image] 20 - Standard Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 21 - Standard Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 22 - Portrait Raw Color Tone: 4 [CanonVRD, CanonVRD, Image] 23 - Portrait Raw Saturation: 2 [CanonVRD, CanonVRD, Image] 24 - Portrait Raw Contrast: 0 [CanonVRD, CanonVRD, Image] 25 - Portrait Raw Linear: No [CanonVRD, CanonVRD, Image] 26 - Portrait Raw Sharpness: 7 [CanonVRD, CanonVRD, Image] 27 - Portrait Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 28 - Portrait Raw Shadow Point: 6 [CanonVRD, CanonVRD, Image] 29 - Portrait Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 30 - Portrait Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 31 - Landscape Raw Color Tone: 4 [CanonVRD, CanonVRD, Image] 32 - Landscape Raw Saturation: 2 [CanonVRD, CanonVRD, Image] 33 - Landscape Raw Contrast: 0 [CanonVRD, CanonVRD, Image] 34 - Landscape Raw Linear: No [CanonVRD, CanonVRD, Image] 35 - Landscape Raw Sharpness: 7 [CanonVRD, CanonVRD, Image] 36 - Landscape Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 37 - Landscape Raw Shadow Point: 6 [CanonVRD, CanonVRD, Image] 38 - Landscape Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 39 - Landscape Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 40 - Neutral Raw Color Tone: 4 [CanonVRD, CanonVRD, Image] 41 - Neutral Raw Saturation: 2 [CanonVRD, CanonVRD, Image] 42 - Neutral Raw Contrast: 0 [CanonVRD, CanonVRD, Image] 43 - Neutral Raw Linear: No [CanonVRD, CanonVRD, Image] 44 - Neutral Raw Sharpness: 7 [CanonVRD, CanonVRD, Image] 45 - Neutral Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 46 - Neutral Raw Shadow Point: 6 [CanonVRD, CanonVRD, Image] 47 - Neutral Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 48 - Neutral Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 49 - Faithful Raw Color Tone: 4 [CanonVRD, CanonVRD, Image] 50 - Faithful Raw Saturation: 2 [CanonVRD, CanonVRD, Image] 51 - Faithful Raw Contrast: 0 [CanonVRD, CanonVRD, Image] 52 - Faithful Raw Linear: No [CanonVRD, CanonVRD, Image] 53 - Faithful Raw Sharpness: 7 [CanonVRD, CanonVRD, Image] 54 - Faithful Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 55 - Faithful Raw Shadow Point: 6 [CanonVRD, CanonVRD, Image] 56 - Faithful Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 57 - Faithful Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 58 - Monochrome Filter Effect: Yellow [CanonVRD, CanonVRD, Image] 59 - Monochrome Toning Effect: Purple [CanonVRD, CanonVRD, Image] 60 - Monochrome Contrast: 3 [CanonVRD, CanonVRD, Image] 61 - Monochrome Linear: No [CanonVRD, CanonVRD, Image] 62 - Monochrome Sharpness: 4 [CanonVRD, CanonVRD, Image] 63 - Monochrome Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 64 - Monochrome Raw Shadow Point: 0 [CanonVRD, CanonVRD, Image] 65 - Monochrome Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 66 - Monochrome Output Shadow Point: 0 [CanonVRD, CanonVRD, Image] 76 - Custom Color Tone: 4 [CanonVRD, CanonVRD, Image] 77 - Custom Saturation: 2 [CanonVRD, CanonVRD, Image] 78 - Custom Contrast: 0 [CanonVRD, CanonVRD, Image] 79 - Custom Linear: No [CanonVRD, CanonVRD, Image] 80 - Custom Sharpness: 7 [CanonVRD, CanonVRD, Image] 81 - Custom Raw Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 82 - Custom Raw Shadow Point: 6 [CanonVRD, CanonVRD, Image] 83 - Custom Output Highlight Point: 4095 [CanonVRD, CanonVRD, Image] 84 - Custom Output Shadow Point: 0 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_4.out���������������������������������������������������������������000644 �000765 �000024 �00000000142 11226667020 017213� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 2019 [CanonVRD, CanonVRD, Image] 2 - VRD Version: 200 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_5.out���������������������������������������������������������������000644 �000765 �000024 �00000000143 12526612716 017223� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 26621 [CanonVRD, CanonVRD, Image] 2 - VRD Version: 200 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_6.out���������������������������������������������������������������000644 �000765 �000024 �00000000226 12442343564 017225� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 10494 [MakerNotes, Canon, Camera] 208 - VRD Offset: 8708 [CanonVRD, CanonVRD, Image] 2 - VRD Version: 200 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_7.out���������������������������������������������������������������000644 �000765 �000024 �00000000142 11226667020 017216� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 8024 [CanonVRD, CanonVRD, Image] 2 - VRD Version: 200 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_8.out���������������������������������������������������������������000644 �000765 �000024 �00000000142 11226667020 017217� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 2296 [CanonVRD, CanonVRD, Image] 2 - VRD Version: 100 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/CanonVRD_9.out���������������������������������������������������������������000644 �000765 �000024 �00000000062 12407251211 017212� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 23045 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Casio.t����������������������������������������������������������������������000644 �000765 �000024 �00000002513 11400733416 016051� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Casio.t". BEGIN { $| = 1; print "1..6\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Casio; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Casio'; my $testnum = 1; # test 2-4: Extract information from Casio images { my $file; my $exifTool = new Image::ExifTool; foreach $file ('Casio.jpg', 'Casio2.jpg', 'CasioQVCI.jpg') { ++$testnum; my $info = $exifTool->ImageInfo("t/images/$file"); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } } # test 5: Write some new information { ++$testnum; my @writeInfo = ( [MaxApertureValue => 4], [FocusMode => 'Macro'], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum); print "ok $testnum\n"; } # test 6: Write some new information in type 2 file { ++$testnum; my @writeInfo = ( ['XResolution',300], ['YResolution',300], ['ObjectDistance','3.5'], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/Casio2.jpg'); print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Casio_2.out������������������������������������������������������������������000644 �000765 �000024 �00000010154 12546457274 016657� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Casio.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1203 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:04 14:02:27-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:22-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: CASIO [EXIF, IFD0, Camera] 272 - Camera Model Name: QV-3000EX [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Ver1.000 [EXIF, IFD0, Time] 306 - Modify Date: 2000:03:31 10:44:15 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/114 [EXIF, ExifIFD, Image] 33437 - F Number: 2.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2000:03:31 10:44:15 [EXIF, ExifIFD, Time] 36868 - Create Date: 2000:03:31 10:44:15 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 3.645833333 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.0 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 13.3 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2048 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1536 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 926 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Casio, Camera] 1 - Recording Mode: Single Shutter [MakerNotes, Casio, Camera] 2 - Quality: Fine [MakerNotes, Casio, Camera] 3 - Focus Mode: Auto [MakerNotes, Casio, Camera] 4 - Flash Mode: Red-eye Reduction [MakerNotes, Casio, Camera] 5 - Flash Intensity: Normal [MakerNotes, Casio, Camera] 6 - Object Distance: 2.5 m [MakerNotes, Casio, Camera] 7 - White Balance: Auto [MakerNotes, Casio, Camera] 10 - Digital Zoom: Off [MakerNotes, Casio, Camera] 11 - Sharpness: Normal [MakerNotes, Casio, Camera] 12 - Contrast: Normal [MakerNotes, Casio, Camera] 13 - Saturation: Normal [MakerNotes, Casio, Camera] 20 - ISO: 64 [Composite, Composite, Image] Aperture - Aperture: 2.0 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/114 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 13.3 mm [Composite, Composite, Image] LightValue - Light Value: 9.5 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Casio_3.out������������������������������������������������������������������000644 �000765 �000024 �00000013757 12546457274 016674� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Casio2.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1699 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:04 14:02:27-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:22-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: CASIO COMPUTER CO.,LTD [EXIF, IFD0, Camera] 272 - Camera Model Name: EX-Z3 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: 1.00 [EXIF, IFD0, Time] 306 - Modify Date: 2003:06:18 16:54:37 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/80 [EXIF, ExifIFD, Image] 33437 - F Number: 3.9 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:06:18 16:54:37 [EXIF, ExifIFD, Time] 36868 - Create Date: 2003:06:18 16:54:37 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 0.533203125 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.6 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 12.2 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2048 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1536 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Manual [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: undef [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 74 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: None [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1396 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Casio, Image] 2 - Preview Image Size: 320x240 [MakerNotes, Casio, Image] 3 - Preview Image Length: 26 [MakerNotes, Casio, Image] 4 - Preview Image Start: 1424 [MakerNotes, Casio, Preview] 8192 - Preview Image: (Binary data 26 bytes) [MakerNotes, Casio, Camera] 8193 - Firmware Date: 2003:02:28 09:45 [MakerNotes, Casio, Camera] 8209 - White Balance Bias: 87 93 [MakerNotes, Casio, Camera] 8210 - White Balance: Unknown (13) [MakerNotes, Casio, Camera] 8225 - AF Point Position: 0.5 0.5 [MakerNotes, Casio, Camera] 8226 - Object Distance: 1 m [MakerNotes, Casio, Camera] 8244 - Flash Distance: 0 [MakerNotes, Casio, Camera] 12288 - Record Mode: Program AE [MakerNotes, Casio, Camera] 12289 - Release Mode: Normal [MakerNotes, Casio, Camera] 12290 - Quality: Fine [MakerNotes, Casio, Camera] 12291 - Focus Mode: Single-Area Auto Focus [MakerNotes, Casio, Camera] 12294 - Hometown City: New York [MakerNotes, Casio, Camera] 12295 - Best Shot Mode: Off [MakerNotes, Casio, Camera] 12305 - Sharpness: 0 [MakerNotes, Casio, Camera] 12306 - Contrast: 0 [MakerNotes, Casio, Camera] 12307 - Saturation: 0 [MakerNotes, Casio, Camera] 12308 - ISO: 50 [MakerNotes, Casio, Camera] 12309 - Color Mode: Off [MakerNotes, Casio, Camera] 12310 - Enhancement: Off [MakerNotes, Casio, Camera] 12311 - Color Filter: Off [MakerNotes, Casio, Camera] 12315 - Art Mode: Normal [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [Composite, Composite, Image] Aperture - Aperture: 3.9 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 26 bytes) [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 6.1 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/80 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.005 mm [Composite, Composite, Image] DOF - Depth Of Field: 0.26 m (0.89 - 1.15 m) [Composite, Composite, Image] FOV - Field Of View: 27.3 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 12.2 mm (35 mm equivalent: 74.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 7.70 m [Composite, Composite, Image] LightValue - Light Value: 11.2 �����������������Image-ExifTool-10.10/t/Casio_4.out������������������������������������������������������������������000644 �000765 �000024 �00000003273 12546457274 016665� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: CasioQVCI.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 407 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:05:31 09:18:08-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:02-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [JFIF, JFIF, Image] 0 - JFIF Version: 1.02 [JFIF, JFIF, Image] 2 - Resolution Unit: None [JFIF, JFIF, Image] 3 - X Resolution: 1 [JFIF, JFIF, Image] 5 - Y Resolution: 1 [MakerNotes, Casio, Camera] 44 - Casio Quality: Economy [MakerNotes, Casio, Time] 77 - Date/Time Original: 1998:10:24 12:08:57 [MakerNotes, Casio, Camera] 98 - Model Type: KX-778 [MakerNotes, Casio, Camera] 114 - Manufacture Index: 98082901 [MakerNotes, Casio, Camera] 124 - Manufacture Code: 98000829 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Casio_5.out������������������������������������������������������������������000644 �000765 �000024 �00000010775 12546457274 016673� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Casio_5_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 1203 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:37-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:37-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:37-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: CASIO [EXIF, IFD0, Camera] 272 - Camera Model Name: QV-3000EX [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Ver1.000 [EXIF, IFD0, Time] 306 - Modify Date: 2000:03:31 10:44:15 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/114 [EXIF, ExifIFD, Image] 33437 - F Number: 2.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2000:03:31 10:44:15 [EXIF, ExifIFD, Time] 36868 - Create Date: 2000:03:31 10:44:15 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 3.645833333 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 4.0 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 13.3 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2048 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1536 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 926 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Casio, Camera] 1 - Recording Mode: Single Shutter [MakerNotes, Casio, Camera] 2 - Quality: Fine [MakerNotes, Casio, Camera] 3 - Focus Mode: Macro [MakerNotes, Casio, Camera] 4 - Flash Mode: Red-eye Reduction [MakerNotes, Casio, Camera] 5 - Flash Intensity: Normal [MakerNotes, Casio, Camera] 6 - Object Distance: 2.5 m [MakerNotes, Casio, Camera] 7 - White Balance: Auto [MakerNotes, Casio, Camera] 8 - Casio 0x0008: 1 [MakerNotes, Casio, Camera] 9 - Casio 0x0009: 1 [MakerNotes, Casio, Camera] 10 - Digital Zoom: Off [MakerNotes, Casio, Camera] 11 - Sharpness: Normal [MakerNotes, Casio, Camera] 12 - Contrast: Normal [MakerNotes, Casio, Camera] 13 - Saturation: Normal [MakerNotes, Casio, Camera] 14 - Casio 0x000e: 0 [MakerNotes, Casio, Camera] 15 - Casio 0x000f: 0 [MakerNotes, Casio, Camera] 16 - Casio 0x0010: 0 [MakerNotes, Casio, Camera] 17 - Casio 0x0011: 8126553 [MakerNotes, Casio, Camera] 18 - Casio 0x0012: 16 [MakerNotes, Casio, Camera] 19 - Casio 0x0013: 16 [MakerNotes, Casio, Camera] 20 - ISO: 64 [Composite, Composite, Image] Aperture - Aperture: 2.0 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/114 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Image] LightValue - Light Value: 9.5 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 13.3 mm ���Image-ExifTool-10.10/t/Casio_6.out������������������������������������������������������������������000644 �000765 �000024 �00000015555 12546457274 016675� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Casio_6_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 1699 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:37-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:37-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:37-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: CASIO COMPUTER CO.,LTD [EXIF, IFD0, Camera] 272 - Camera Model Name: EX-Z3 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 300 [EXIF, IFD0, Image] 283 - Y Resolution: 300 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: 1.00 [EXIF, IFD0, Time] 306 - Modify Date: 2003:06:18 16:54:37 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/80 [EXIF, ExifIFD, Image] 33437 - F Number: 3.9 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:06:18 16:54:37 [EXIF, ExifIFD, Time] 36868 - Create Date: 2003:06:18 16:54:37 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 0.533203125 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.6 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 12.2 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2048 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1536 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Manual [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: undef [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 74 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: None [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1396 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Casio, Image] 2 - Preview Image Size: 320x240 [MakerNotes, Casio, Image] 3 - Preview Image Length: 26 [MakerNotes, Casio, Image] 4 - Preview Image Start: 1424 [MakerNotes, Casio, Preview] 8192 - Preview Image: (Binary data 26 bytes) [MakerNotes, Casio, Camera] 8193 - Firmware Date: 2003:02:28 09:45 [MakerNotes, Casio, Camera] 8194 - Casio Type 2 0x2002: [MakerNotes, Casio, Camera] 8195 - Casio Type 2 0x2003: [MakerNotes, Casio, Camera] 8209 - White Balance Bias: 87 93 [MakerNotes, Casio, Camera] 8210 - White Balance: Unknown (13) [MakerNotes, Casio, Camera] 8211 - Casio Type 2 0x2013: 2 [MakerNotes, Casio, Camera] 8225 - AF Point Position: 0.5 0.5 [MakerNotes, Casio, Camera] 8226 - Object Distance: 3.5 m [MakerNotes, Casio, Camera] 8227 - Casio Type 2 0x2023: 1 [MakerNotes, Casio, Camera] 8241 - Casio Type 2 0x2031: [MakerNotes, Casio, Camera] 8242 - Casio Type 2 0x2032: d [MakerNotes, Casio, Camera] 8243 - Casio Type 2 0x2033: 1 [MakerNotes, Casio, Camera] 8244 - Flash Distance: 0 [MakerNotes, Casio, Camera] 12288 - Record Mode: Program AE [MakerNotes, Casio, Camera] 12289 - Release Mode: Normal [MakerNotes, Casio, Camera] 12290 - Quality: Fine [MakerNotes, Casio, Camera] 12291 - Focus Mode: Single-Area Auto Focus [MakerNotes, Casio, Camera] 12293 - Casio Type 2 0x3005: 0 1 [MakerNotes, Casio, Camera] 12294 - Hometown City: New York [MakerNotes, Casio, Camera] 12295 - Best Shot Mode: Off [MakerNotes, Casio, Camera] 12305 - Sharpness: 0 [MakerNotes, Casio, Camera] 12306 - Contrast: 0 [MakerNotes, Casio, Camera] 12307 - Saturation: 0 [MakerNotes, Casio, Camera] 12308 - ISO: 50 [MakerNotes, Casio, Camera] 12309 - Color Mode: Off [MakerNotes, Casio, Camera] 12310 - Enhancement: Off [MakerNotes, Casio, Camera] 12311 - Color Filter: Off [MakerNotes, Casio, Camera] 12312 - Casio Type 2 0x3018: 0 [MakerNotes, Casio, Camera] 12313 - Casio Type 2 0x3019: 1 [MakerNotes, Casio, Camera] 12314 - Casio Type 2 0x301a: 0 [MakerNotes, Casio, Camera] 12315 - Art Mode: Normal [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [PrintIM, PrintIM, Printing] 1 - Print IM 0x0001: 0x00140014 [PrintIM, PrintIM, Printing] 2 - Print IM 0x0002: 0x01000000 [PrintIM, PrintIM, Printing] 256 - Print IM 0x0100: 0x05000000 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0x01000000 [Composite, Composite, Image] Aperture - Aperture: 3.9 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 26 bytes) [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/80 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Image] LightValue - Light Value: 11.2 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 6.1 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.005 mm [Composite, Composite, Image] DOF - Depth Of Field: 3.99 m (2.41 - 6.40 m) [Composite, Composite, Image] FOV - Field Of View: 27.3 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 12.2 mm (35 mm equivalent: 74.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 7.70 m ���������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/DICOM.t����������������������������������������������������������������������000644 �000765 �000024 �00000001262 11327642463 015657� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/DICOM.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::DICOM; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'DICOM'; my $testnum = 1; # test 2: Extract information from DICOM.dcm { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/DICOM.dcm'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/DICOM_2.out������������������������������������������������������������������000644 �000765 �000024 �00000015471 12546457274 016463� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: DICOM.dcm [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1860 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2005:11:14 14:47:21-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:17 10:56:34-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:11 08:47:16-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: DICOM [File, File, Image] FileTypeExtension - File Type Extension: dcm [File, File, Image] MIMEType - MIME Type: application/dicom [DICOM, DICOM, Image] 0002,0000 - File Meta Info Group Length: 180 [DICOM, DICOM, Image] 0002,0001 - File Meta Info Version: 0 1 [DICOM, DICOM, Image] 0002,0002 - Media Storage SOP Class UID: MR Image Storage [DICOM, DICOM, Image] 0002,0003 - Media Storage SOP Instance UID: 0.0.0.0.1.8811.2.20.20010413115754.12432 [DICOM, DICOM, Image] 0002,0010 - Transfer Syntax UID: Explicit VR Little Endian [DICOM, DICOM, Image] 0002,0012 - Implementation Class UID: 0.0.0.0 [DICOM, DICOM, Image] 0002,0013 - Implementation Version Name: NOTSPECIFIED [DICOM, DICOM, Image] 0002,0016 - Source Application Entity Title: NOTSPECIFIED [DICOM, DICOM, Image] 0008,0008 - Image Type: ORIGINAL\PRIMARY\MPR [DICOM, DICOM, Image] 0008,0016 - SOP Class UID: MR Image Storage [DICOM, DICOM, Image] 0008,0018 - SOP Instance UID: 0.0.0.0.1.8811.2.20.20010413115754.12432 [DICOM, DICOM, Image] 0008,0020 - Study Date: 2001:03:16 [DICOM, DICOM, Image] 0008,0021 - Series Date: 2001:03:16 [DICOM, DICOM, Image] 0008,0022 - Acquisition Date: 2001:03:16 [DICOM, DICOM, Image] 0008,0023 - Content Date: 2001:03:23 [DICOM, DICOM, Image] 0008,0030 - Study Time: 14:30:08 [DICOM, DICOM, Image] 0008,0031 - Series Time: 14:34:14 [DICOM, DICOM, Image] 0008,0032 - Acquisition Time: 14:34:15 [DICOM, DICOM, Image] 0008,0033 - Content Time: 14:30:22 [DICOM, DICOM, Image] 0008,0050 - Accession Number: [DICOM, DICOM, Image] 0008,0060 - Modality: MR [DICOM, DICOM, Image] 0008,0070 - Manufacturer: GE Medical Systems [DICOM, DICOM, Image] 0008,0080 - Institution Name: [DICOM, DICOM, Image] 0008,0090 - Referring Physician Name: [DICOM, DICOM, Image] 0008,1010 - Station Name: MRS1 [DICOM, DICOM, Image] 0008,1030 - Study Description: BRAIN [DICOM, DICOM, Image] 0008,103E - Series Description: FSE PD AXIAL OBL [DICOM, DICOM, Image] 0008,1050 - Performing Physician Name: [DICOM, DICOM, Image] 0008,1070 - Operators Name: EC [DICOM, DICOM, Image] 0008,1090 - Manufacturers Model Name: SIGNA [DICOM, DICOM, Image] 0010,0010 - Patient Name: [DICOM, DICOM, Image] 0010,0020 - Patient ID: 123456 [DICOM, DICOM, Image] 0010,0030 - Patient Birth Date: [DICOM, DICOM, Image] 0010,0040 - Patient Sex: F [DICOM, DICOM, Image] 0010,1010 - Patient Age: 028Y [DICOM, DICOM, Image] 0010,1030 - Patient Weight: 61.2350 [DICOM, DICOM, Image] 0010,21B0 - Additional Patient History: [DICOM, DICOM, Image] 0018,0020 - Scanning Sequence: SE [DICOM, DICOM, Image] 0018,0021 - Sequence Variant: SK [DICOM, DICOM, Image] 0018,0022 - Scan Options: SP [DICOM, DICOM, Image] 0018,0023 - MR Acquisition Type: 2D [DICOM, DICOM, Image] 0018,0024 - Sequence Name: fse [DICOM, DICOM, Image] 0018,0050 - Slice Thickness: 5.00000 [DICOM, DICOM, Image] 0018,0080 - Repetition Time: 2300.00 [DICOM, DICOM, Image] 0018,0081 - Echo Time: 22.0000 [DICOM, DICOM, Image] 0018,0083 - Number Of Averages: 1.00000 [DICOM, DICOM, Image] 0018,0084 - Imaging Frequency: 63.8615 [DICOM, DICOM, Image] 0018,0086 - Echo Number: 1 [DICOM, DICOM, Image] 0018,0087 - Magnetic Field Strength: 1.50000 [DICOM, DICOM, Image] 0018,0088 - Spacing Between Slices: 2.00000 [DICOM, DICOM, Image] 0018,0089 - Number Of Phase Encoding Steps: 256 [DICOM, DICOM, Image] 0018,0091 - Echo Train Length: 8 [DICOM, DICOM, Image] 0018,0095 - Pixel Bandwidth: 31.2500 [DICOM, DICOM, Image] 0018,1020 - Software Version: 3 [DICOM, DICOM, Image] 0018,1030 - Protocol Name: CLINICAL BRAIN [DICOM, DICOM, Image] 0018,1088 - Heart Rate: 0 [DICOM, DICOM, Image] 0018,1090 - Cardiac Number Of Images: 0 [DICOM, DICOM, Image] 0018,1094 - Trigger Window: 0 [DICOM, DICOM, Image] 0018,1100 - Reconstruction Diameter: 220.000 [DICOM, DICOM, Image] 0018,1250 - Receive Coil Name: HEAD [DICOM, DICOM, Image] 0018,1310 - Acquisition Matrix: 0 256 256 0 [DICOM, DICOM, Image] 0018,1312 - In Plane Phase Encoding Direction: ROW [DICOM, DICOM, Image] 0018,1314 - Flip Angle: 90 [DICOM, DICOM, Image] 0018,1316 - SAR: 0.0313309 [DICOM, DICOM, Image] 0018,5100 - Patient Position: HFS [DICOM, DICOM, Image] 0020,000D - Study Instance UID: 0.0.0.0.2.8811.20010413115754.12432 [DICOM, DICOM, Image] 0020,000E - Series Instance UID: 0.0.0.0.3.8811.2.20010413115754.12432 [DICOM, DICOM, Image] 0020,0010 - Study ID: 8811 [DICOM, DICOM, Image] 0020,0011 - Series Number: 2 [DICOM, DICOM, Image] 0020,0012 - Acquisition Number: 31763 [DICOM, DICOM, Image] 0020,0013 - Instance Number: 20 [DICOM, DICOM, Image] 0020,0020 - Patient Orientation: L\PH [DICOM, DICOM, Image] 0020,0030 - Image Position: -110.500\-96.2063\59.0425 [DICOM, DICOM, Image] 0020,0032 - Image Position Patient: -110.500\-96.2063\59.0425 [DICOM, DICOM, Image] 0020,0035 - Image Orientation: 1.00000\0.00000\0.00000\0.00000\0.990960\0.134158 [DICOM, DICOM, Image] 0020,0037 - Image Orientation Patient: 1.00000\0.00000\0.00000\0.00000\0.990960\0.134158 [DICOM, DICOM, Image] 0020,0052 - Frame Of Reference UID: 0.0.0.0.4.8811.2.20010413115754.12432 [DICOM, DICOM, Image] 0020,1002 - Images In Acquisition: 1 [DICOM, DICOM, Image] 0020,1040 - Position Reference Indicator: NA [DICOM, DICOM, Image] 0020,1041 - Slice Location: 73.8000 [DICOM, DICOM, Image] 0028,0002 - Samples Per Pixel: 1 [DICOM, DICOM, Image] 0028,0004 - Photometric Interpretation: MONOCHROME2 [DICOM, DICOM, Image] 0028,0010 - Rows: 256 [DICOM, DICOM, Image] 0028,0011 - Columns: 256 [DICOM, DICOM, Image] 0028,0030 - Pixel Spacing: 0.859375\0.859375 [DICOM, DICOM, Image] 0028,0100 - Bits Allocated: 16 [DICOM, DICOM, Image] 0028,0101 - Bits Stored: 16 [DICOM, DICOM, Image] 0028,0102 - High Bit: 15 [DICOM, DICOM, Image] 0028,0103 - Pixel Representation: Signed [DICOM, DICOM, Image] 0028,0106 - Smallest Image Pixel Value: 0 [DICOM, DICOM, Image] 0028,0107 - Largest Image Pixel Value: 784 [DICOM, DICOM, Image] 0028,0120 - Pixel Padding Value: 0 [DICOM, DICOM, Image] 0028,1050 - Window Center: 0 [DICOM, DICOM, Image] 0028,1051 - Window Width: 0 [DICOM, DICOM, Image] 0028,1052 - Rescale Intercept: 0 [DICOM, DICOM, Image] 0028,1053 - Rescale Slope: 1 [DICOM, DICOM, Image] 0028,1054 - Rescale Type: SIGNAL INTENSITY (UNITLESS) [DICOM, DICOM, Image] 7Fxx,0010 - Pixel Data: (Binary data 53 bytes) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/DjVu.t�����������������������������������������������������������������������000644 �000765 �000024 �00000001257 11327642463 015700� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/DjVu.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::DjVu; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'DjVu'; my $testnum = 1; # test 2: Extract information from DjVu.djvu { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/DjVu.djvu'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/DjVu_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000005516 12546457274 016477� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: DjVu.djvu [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 955 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2008:11:11 11:15:11-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:09-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: DJVU (multi-page) [File, File, Image] FileTypeExtension - File Type Extension: djvu [File, File, Image] MIMEType - MIME Type: image/vnd.djvu [DjVu, DjVu, Image] 0 - Subfile Type: Single-page image [DjVu, DjVu, Image] 0 - Image Width: 8 [DjVu, DjVu, Image] 2 - Image Height: 8 [DjVu, DjVu, Image] 4 - DjVu Version: 0.24 [DjVu, DjVu, Image] 6 - Spatial Resolution: 100 [DjVu, DjVu, Image] 8 - Gamma: 2.2 [DjVu, DjVu, Image] 9 - Orientation: Unknown (0) [DjVu, DjVu, Image] INCL - Included File ID: shared_anno.iff [DjVu, DjVu, Image] 0 - Subfile Type: Shared component [DjVu, DjVu-Meta, Author] Author - Author: Phil Harvey [DjVu, DjVu-Meta, Image] Title - Title: DjVu Metadata Sample [DjVu, DjVu-Meta, Image] Subject - Subject: ExifTool DjVu test image [DjVu, DjVu-Meta, Time] CreationDate - Create Date: 2008:09:23 12:31:34-04:00 [DjVu, DjVu-Meta, Time] ModDate - Modify Date: 2008:11:11 09:17:10-05:00 [DjVu, DjVu-Meta, Image] Keywords - Keywords: ExifTool, Test, DjVu, XMP [DjVu, DjVu-Meta, Image] Producer - Producer: djvused [DjVu, DjVu-Meta, Image] Trapped - Trapped: Unknown [DjVu, DjVu-Meta, Image] Creator - Creator: ExifTool [DjVu, DjVu-Meta, Image] url - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [DjVu, DjVu-Meta, Image] note - Note: Must escape double quotes (") and backslashes (\) [DjVu, DjVu-Meta, Image] annote - Annotation: Did you get this? [XMP, XMP-album, Image] Notes - Notes: Must escape double quotes (") and backslashes (\) [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: ExifTool DjVu test image [XMP, XMP-dc, Author] rights - Rights: Copyright 2008 Phil Harvey [XMP, XMP-dc, Image] subject - Subject: ExifTool, Test, DjVu, XMP [XMP, XMP-dc, Image] title - Title: DjVu Metadata Sample [XMP, XMP-pdf, Image] Keywords - Keywords: ExifTool, Test, DjVu, XMP [XMP, XMP-pdf, Author] Producer - Producer: djvused [XMP, XMP-pdf, Image] Trapped - Trapped: Unknown [XMP, XMP-xmp, Time] CreateDate - Create Date: 2008:09:23 12:31:34-04:00 [XMP, XMP-xmp, Image] CreatorTool - Creator Tool: ExifTool [XMP, XMP-xmp, Time] ModifyDate - Modify Date: 2008:11:11 09:17:10-05:00 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/DNG.t������������������������������������������������������������������������000644 �000765 �000024 �00000002132 11334350050 015413� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/DNG.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::DNG; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'DNG'; my $testnum = 1; # test 2: Extract information from DNG.dng { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/DNG.dng'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Test writing maker notes information { ++$testnum; my @writeInfo = ( [ OwnerName => 'Just Me' ], [ OriginalDecisionData => "\xff\xff\xff\xff\x03\0\0\0\0\0\0\0\0\0\0\0\x08\0\0\0Test", Protected => 1 ], ); my @tags = qw(OwnerName OriginalDecisionData Warning Error); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/DNG.dng', \@tags); print "ok $testnum\n"; } # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/DNG_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000046203 12546457274 016235� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: DNG.dng [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 13 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:02:26 09:30:53-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:23-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: DNG [File, File, Image] FileTypeExtension - File Type Extension: dng [File, File, Image] MIMEType - MIME Type: image/x-adobe-dng [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [EXIF, IFD0, Image] 254 - Subfile Type: Reduced-resolution image [EXIF, IFD0, Image] 256 - Image Width: 8 [EXIF, IFD0, Image] 257 - Image Height: 8 [EXIF, IFD0, Image] 258 - Bits Per Sample: 8 8 8 [EXIF, IFD0, Image] 259 - Compression: Uncompressed [EXIF, IFD0, Image] 262 - Photometric Interpretation: RGB [EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS 350D DIGITAL [EXIF, IFD0, Image] 273 - Strip Offsets: 13470 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 277 - Samples Per Pixel: 3 [EXIF, IFD0, Image] 278 - Rows Per Strip: 8 [EXIF, IFD0, Image] 279 - Strip Byte Counts: 192 [EXIF, IFD0, Image] 284 - Planar Configuration: Chunky [EXIF, IFD0, Time] 306 - Modify Date: 2005:08:03 18:59:18 [EXIF, IFD0, Author] 315 - Artist: unknown [EXIF, SubIFD, Image] 254 - Subfile Type: Full-resolution Image [EXIF, SubIFD, Image] 256 - Image Width: 3516 [EXIF, SubIFD, Image] 257 - Image Height: 2328 [EXIF, SubIFD, Image] 258 - Bits Per Sample: 16 [EXIF, SubIFD, Image] 259 - Compression: JPEG [EXIF, SubIFD, Image] 262 - Photometric Interpretation: Color Filter Array [EXIF, SubIFD, Image] 277 - Samples Per Pixel: 1 [EXIF, SubIFD, Image] 284 - Planar Configuration: Chunky [EXIF, SubIFD, Image] 322 - Tile Width: 256 [EXIF, SubIFD, Image] 323 - Tile Length: 240 [EXIF, SubIFD, Image] 324 - Tile Offsets: 12494 [EXIF, SubIFD, Image] 325 - Tile Byte Counts: 22 [EXIF, SubIFD, Image] 33421 - CFA Repeat Pattern Dim: 2 2 [EXIF, SubIFD, Image] 33422 - CFA Pattern 2: 0 1 1 2 [EXIF, SubIFD, Image] 50710 - CFA Plane Color: Red,Green,Blue [EXIF, SubIFD, Image] 50711 - CFA Layout: Rectangular [EXIF, SubIFD, Image] 50713 - Black Level Repeat Dim: 1 1 [EXIF, SubIFD, Image] 50714 - Black Level: 0 [EXIF, SubIFD, Image] 50717 - White Level: 4095 [EXIF, SubIFD, Image] 50718 - Default Scale: 1 1 [EXIF, SubIFD, Image] 50719 - Default Crop Origin: 10 5 [EXIF, SubIFD, Image] 50720 - Default Crop Size: 3456 2304 [EXIF, SubIFD, Image] 50733 - Bayer Green Split: 0 [EXIF, SubIFD, Image] 50738 - Anti Alias Strength: 1 [EXIF, SubIFD, Image] 50780 - Best Quality Scale: 1 [EXIF, SubIFD, Image] 50829 - Active Area: 14 42 2328 3516 [EXIF, SubIFD, Image] 50830 - Masked Areas: 14 0 2328 40 [EXIF, SubIFD1, Image] 254 - Subfile Type: Reduced-resolution image [EXIF, SubIFD1, Image] 256 - Image Width: 1024 [EXIF, SubIFD1, Image] 257 - Image Height: 683 [EXIF, SubIFD1, Image] 258 - Bits Per Sample: 8 8 8 [EXIF, SubIFD1, Image] 259 - Compression: JPEG [EXIF, SubIFD1, Image] 262 - Photometric Interpretation: YCbCr [EXIF, SubIFD1, Image] 273 - Preview Image Start: 12780 [EXIF, SubIFD1, Image] 277 - Samples Per Pixel: 3 [EXIF, SubIFD1, Image] 278 - Rows Per Strip: 683 [EXIF, SubIFD1, Image] 279 - Preview Image Length: 26 [EXIF, SubIFD1, Image] 284 - Planar Configuration: Chunky [EXIF, SubIFD1, Image] 529 - Y Cb Cr Coefficients: 0.299 0.587 0.114 [EXIF, SubIFD1, Image] 530 - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, SubIFD1, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, SubIFD1, Image] 532 - Reference Black White: 0 255 128 255 128 255 [EXIF, SubIFD2, Image] 254 - Subfile Type: Reduced-resolution image [EXIF, SubIFD2, Image] 256 - Image Width: 3456 [EXIF, SubIFD2, Image] 257 - Image Height: 2304 [EXIF, SubIFD2, Image] 258 - Bits Per Sample: 8 8 8 [EXIF, SubIFD2, Image] 259 - Compression: JPEG [EXIF, SubIFD2, Image] 262 - Photometric Interpretation: YCbCr [EXIF, SubIFD2, Image] 273 - Jpg From Raw Start: 13070 [EXIF, SubIFD2, Image] 277 - Samples Per Pixel: 3 [EXIF, SubIFD2, Image] 278 - Rows Per Strip: 2304 [EXIF, SubIFD2, Image] 279 - Jpg From Raw Length: 29 [EXIF, SubIFD2, Image] 284 - Planar Configuration: Chunky [EXIF, SubIFD2, Image] 529 - Y Cb Cr Coefficients: 0.299 0.587 0.114 [EXIF, SubIFD2, Image] 530 - Y Cb Cr Sub Sampling: YCbCr4:4:4 (1 1) [EXIF, SubIFD2, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, SubIFD2, Image] 532 - Reference Black White: 0 255 128 255 128 255 [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/15 [EXIF, ExifIFD, Image] 33437 - F Number: 8.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Aperture-priority AE [EXIF, ExifIFD, Image] 34855 - ISO: 400 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2005:08:03 18:59:18 [EXIF, ExifIFD, Time] 36868 - Create Date: 2005:08:03 18:59:18 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/15 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 8.0 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 4.0 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Average [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 55.0 mm [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3954.23341 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3958.762887 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, IFD0, Image] 37393 - Image Number: 24 [EXIF, IFD0, Image] 50706 - DNG Version: 1.1.0.0 [EXIF, IFD0, Image] 50707 - DNG Backward Version: 1.1.0.0 [EXIF, IFD0, Image] 50708 - Unique Camera Model: Canon EOS 350D [EXIF, IFD0, Image] 50709 - Localized Camera Model: Canon EOS 350D Digital [EXIF, IFD0, Image] 50721 - Color Matrix 1: 0.6159 -0.0945 -0.0745 -0.6846 1.3563 0.3684 -0.0802 0.1086 0.7555 [EXIF, IFD0, Image] 50722 - Color Matrix 2: 0.6018 -0.0617 -0.0965 -0.8645 1.5881 0.2975 -0.153 0.1719 0.7642 [EXIF, IFD0, Image] 50723 - Camera Calibration 1: 1.0069 0 0 0 1 0 0 0 1.0027 [EXIF, IFD0, Image] 50724 - Camera Calibration 2: 1.0069 0 0 0 1 0 0 0 1.0027 [EXIF, IFD0, Image] 50727 - Analog Balance: 1 1 1 [EXIF, IFD0, Image] 50728 - As Shot Neutral: 0.592408 1 0.501692 [EXIF, IFD0, Image] 50730 - Baseline Exposure: 0.25 [EXIF, IFD0, Image] 50731 - Baseline Noise: 1.33 [EXIF, IFD0, Image] 50732 - Baseline Sharpness: 1.5 [EXIF, IFD0, Image] 50734 - Linear Response Limit: 1 [EXIF, IFD0, Camera] 50735 - Camera Serial Number: 012345678 [EXIF, IFD0, Camera] 50736 - DNG Lens Info: 18-55mm f/? [EXIF, IFD0, Image] 50739 - Shadow Scale: 1 [EXIF, IFD0, Image] 50778 - Calibration Illuminant 1: Standard Light A [EXIF, IFD0, Image] 50779 - Calibration Illuminant 2: D65 [EXIF, IFD0, Image] 50781 - Raw Data Unique ID: 0358DB4E08632D90925171A6BB8848A2 [EXIF, IFD0, Image] 50827 - Original Raw File Name: Canon350D.CR2 [XMP, XMP-x, Document] xmptk - XMP Toolkit: XMP toolkit 3.0-28, framework 1.6 [XMP, XMP-exif, Image] ExifVersion - Exif Version: 0221 [XMP, XMP-exif, Image] ExposureTime - Exposure Time: 1/15 [XMP, XMP-exif, Image] ShutterSpeedValue - Shutter Speed Value: 1/15 [XMP, XMP-exif, Image] FNumber - F Number: 8.0 [XMP, XMP-exif, Image] ApertureValue - Aperture Value: 8.0 [XMP, XMP-exif, Camera] ExposureProgram - Exposure Program: Aperture-priority AE [XMP, XMP-exif, Image] ISOSpeedRatings - ISO: 400 [XMP, XMP-exif, Time] DateTimeOriginal - Date/Time Original: 2005:08:03 18:59:18-04:00 [XMP, XMP-exif, Time] DateTimeDigitized - Date/Time Digitized: 2005:08:03 18:59:18-04:00 [XMP, XMP-exif, Image] ExposureBiasValue - Exposure Compensation: 0 [XMP, XMP-exif, Camera] MaxApertureValue - Max Aperture Value: 4.0 [XMP, XMP-exif, Camera] MeteringMode - Metering Mode: Average [XMP, XMP-exif, Camera] FlashFired - Flash Fired: False [XMP, XMP-exif, Camera] FlashReturn - Flash Return: No return detection [XMP, XMP-exif, Camera] FlashMode - Flash Mode: Off [XMP, XMP-exif, Camera] FlashFunction - Flash Function: False [XMP, XMP-exif, Camera] FlashRedEyeMode - Flash Red Eye Mode: False [XMP, XMP-exif, Camera] FocalLength - Focal Length: 55.0 mm [XMP, XMP-exif, Image] CustomRendered - Custom Rendered: Normal [XMP, XMP-exif, Camera] ExposureMode - Exposure Mode: Auto [XMP, XMP-exif, Camera] WhiteBalance - White Balance: Auto [XMP, XMP-exif, Camera] SceneCaptureType - Scene Capture Type: Standard [XMP, XMP-exif, Camera] FocalPlaneXResolution - Focal Plane X Resolution: 3954.23340961098 [XMP, XMP-exif, Camera] FocalPlaneYResolution - Focal Plane Y Resolution: 3958.76288659794 [XMP, XMP-exif, Camera] FocalPlaneResolutionUnit - Focal Plane Resolution Unit: inches [XMP, XMP-aux, Camera] SerialNumber - Serial Number: 012345678 [XMP, XMP-aux, Camera] LensInfo - Lens Info: 18-55mm f/? [XMP, XMP-aux, Camera] Lens - Lens: 18.0-55.0 mm [XMP, XMP-aux, Camera] ImageNumber - Image Number: 24 [XMP, XMP-aux, Camera] FlashCompensation - Flash Compensation: 0 [XMP, XMP-aux, Camera] OwnerName - Owner Name: unknown [XMP, XMP-aux, Camera] Firmware - Firmware: 1.0.2 [XMP, XMP-tiff, Camera] Make - Make: Canon [XMP, XMP-tiff, Camera] Model - Camera Model Name: Canon EOS 350D DIGITAL [XMP, XMP-tiff, Time] DateTime - Date/Time Modified: 2005:08:03 18:59:18-04:00 [XMP, XMP-tiff, Image] Orientation - Orientation: Horizontal (normal) [XMP, XMP-dc, Other] Creator - Creator: unknown [MakerNotes, Canon, Camera] 1 - Macro Mode: Normal [MakerNotes, Canon, Camera] 2 - Self Timer: Off [MakerNotes, Canon, Camera] 3 - Quality: RAW [MakerNotes, Canon, Camera] 4 - Canon Flash Mode: Off [MakerNotes, Canon, Camera] 5 - Continuous Drive: Single [MakerNotes, Canon, Camera] 7 - Focus Mode: One-shot AF [MakerNotes, Canon, Camera] 9 - Record Mode: CR2 [MakerNotes, Canon, Camera] 10 - Canon Image Size: n/a [MakerNotes, Canon, Camera] 11 - Easy Mode: Manual [MakerNotes, Canon, Camera] 12 - Digital Zoom: None [MakerNotes, Canon, Camera] 13 - Contrast: Normal [MakerNotes, Canon, Camera] 14 - Saturation: Normal [MakerNotes, Canon, Camera] 15 - Sharpness: 0 [MakerNotes, Canon, Camera] 17 - Metering Mode: Center-weighted average [MakerNotes, Canon, Camera] 18 - Focus Range: Not Known [MakerNotes, Canon, Camera] 20 - Canon Exposure Mode: Aperture-priority AE [MakerNotes, Canon, Camera] 22 - Lens Type: n/a [MakerNotes, Canon, Camera] 23 - Max Focal Length: 55 mm [MakerNotes, Canon, Camera] 24 - Min Focal Length: 18 mm [MakerNotes, Canon, Camera] 25 - Focal Units: 1/mm [MakerNotes, Canon, Camera] 26 - Max Aperture: 4 [MakerNotes, Canon, Camera] 27 - Min Aperture: 27 [MakerNotes, Canon, Camera] 28 - Flash Activity: 0 [MakerNotes, Canon, Camera] 29 - Flash Bits: (none) [MakerNotes, Canon, Camera] 32 - Focus Continuous: Single [MakerNotes, Canon, Camera] 36 - Zoom Source Width: 0 [MakerNotes, Canon, Camera] 37 - Zoom Target Width: 0 [MakerNotes, Canon, Camera] 40 - Photo Effect: Off [MakerNotes, Canon, Camera] 41 - Manual Flash Output: n/a [MakerNotes, Canon, Camera] 42 - Color Tone: Normal [MakerNotes, Canon, Image] 0 - Focal Type: Zoom [MakerNotes, Canon, Image] 1 - Focal Length: 55 mm [MakerNotes, Canon, Image] 2 - Focal Plane X Size: 23.04 mm [MakerNotes, Canon, Image] 3 - Focal Plane Y Size: 15.37 mm [MakerNotes, Canon, Image] 1 - Auto ISO: 100 [MakerNotes, Canon, Image] 2 - Base ISO: 400 [MakerNotes, Canon, Image] 3 - Measured EV: 8.00 [MakerNotes, Canon, Image] 4 - Target Aperture: 8 [MakerNotes, Canon, Image] 5 - Target Exposure Time: 1/15 [MakerNotes, Canon, Image] 6 - Exposure Compensation: 0 [MakerNotes, Canon, Image] 7 - White Balance: Auto [MakerNotes, Canon, Image] 8 - Slow Shutter: None [MakerNotes, Canon, Image] 9 - Shot Number In Continuous Burst: 0 [MakerNotes, Canon, Camera] 10 - Optical Zoom Code: n/a [MakerNotes, Canon, Image] 13 - Flash Guide Number: 0 [MakerNotes, Canon, Image] 15 - Flash Exposure Compensation: 0 [MakerNotes, Canon, Image] 16 - Auto Exposure Bracketing: Off [MakerNotes, Canon, Image] 17 - AEB Bracket Value: 0 [MakerNotes, Canon, Image] 18 - Control Mode: Camera Local Control [MakerNotes, Canon, Image] 21 - F Number: 8 [MakerNotes, Canon, Image] 22 - Exposure Time: 1/16 [MakerNotes, Canon, Image] 23 - Measured EV 2: 8.125 [MakerNotes, Canon, Image] 24 - Bulb Duration: 0 [MakerNotes, Canon, Camera] 26 - Camera Type: EOS Mid-range [MakerNotes, Canon, Image] 27 - Auto Rotate: None [MakerNotes, Canon, Image] 28 - ND Filter: n/a [MakerNotes, Canon, Image] 29 - Self Timer 2: 0 [MakerNotes, Canon, Image] 6 - Canon Image Type: Canon EOS 350D DIGITAL [MakerNotes, Canon, Camera] 7 - Canon Firmware Version: Firmware 1.0.2 [MakerNotes, Canon, Camera] 9 - Owner Name: unknown [MakerNotes, Canon, Camera] 12 - Serial Number: 0012345678 [MakerNotes, CanonCustom, Camera] 0 - Set Button Cross Keys Func: Normal [MakerNotes, CanonCustom, Camera] 1 - Long Exposure Noise Reduction: Off [MakerNotes, CanonCustom, Camera] 2 - Flash Sync Speed Av: Auto [MakerNotes, CanonCustom, Camera] 3 - Shutter-AE Lock: AF/AE lock [MakerNotes, CanonCustom, Camera] 4 - AF Assist Beam: Emits [MakerNotes, CanonCustom, Camera] 5 - Exposure Level Increments: 1/3 Stop [MakerNotes, CanonCustom, Camera] 6 - Mirror Lockup: Disable [MakerNotes, CanonCustom, Camera] 7 - E-TTL II: Evaluative [MakerNotes, CanonCustom, Camera] 8 - Shutter Curtain Sync: 1st-curtain sync [MakerNotes, Canon, Camera] 16 - Canon Model ID: EOS Digital Rebel XT / 350D / Kiss Digital N [MakerNotes, Canon, Camera] 0 - Num AF Points: 7 [MakerNotes, Canon, Camera] 1 - Valid AF Points: 7 [MakerNotes, Canon, Image] 2 - Canon Image Width: 3456 [MakerNotes, Canon, Image] 3 - Canon Image Height: 2304 [MakerNotes, Canon, Camera] 4 - AF Image Width: 3456 [MakerNotes, Canon, Camera] 5 - AF Image Height: 2304 [MakerNotes, Canon, Camera] 6 - AF Area Width: 189 [MakerNotes, Canon, Camera] 7 - AF Area Height: 188 [MakerNotes, Canon, Camera] 8 - AF Area X Positions: 0 -1237 -742 0 742 1237 0 [MakerNotes, Canon, Camera] 9 - AF Area Y Positions: -617 0 0 0 0 0 617 [MakerNotes, Canon, Camera] 10 - AF Points In Focus: 3 [MakerNotes, Canon, Camera] 19 - Thumbnail Image Valid Area: 0 159 7 112 [MakerNotes, Canon, Camera] 21 - Serial Number Format: Format 2 [MakerNotes, Canon, Camera] 131 - Original Decision Data Offset: 0 [MakerNotes, Canon, Image] 1 - File Number: 100-0024 [MakerNotes, Canon, Image] 3 - Bracket Mode: Off [MakerNotes, Canon, Image] 4 - Bracket Value: 0 [MakerNotes, Canon, Image] 5 - Bracket Shot Number: 0 [MakerNotes, Canon, Image] 8 - Long Exposure Noise Reduction 2: Off [MakerNotes, Canon, Image] 9 - WB Bracket Mode: Off [MakerNotes, Canon, Image] 12 - WB Bracket Value AB: 0 [MakerNotes, Canon, Image] 13 - WB Bracket Value GM: 0 [MakerNotes, Canon, Image] 14 - Filter Effect: None [MakerNotes, Canon, Image] 15 - Toning Effect: None [MakerNotes, Canon, Image] 1 - Tone Curve: Standard [MakerNotes, Canon, Image] 3 - Sharpness Frequency: n/a [MakerNotes, Canon, Image] 4 - Sensor Red Level: 0 [MakerNotes, Canon, Image] 5 - Sensor Blue Level: 0 [MakerNotes, Canon, Image] 6 - White Balance Red: 0 [MakerNotes, Canon, Image] 7 - White Balance Blue: 0 [MakerNotes, Canon, Image] 9 - Color Temperature: 5200 [MakerNotes, Canon, Image] 10 - Picture Style: None [MakerNotes, Canon, Image] 11 - Digital Gain: 0 [MakerNotes, Canon, Image] 12 - WB Shift AB: 0 [MakerNotes, Canon, Image] 13 - WB Shift GM: 0 [MakerNotes, Canon, Camera] 1 - Measured RGGB: 580 1024 1024 500 [MakerNotes, Canon, Camera] 208 - VRD Offset: 0 [MakerNotes, Canon, Image] 1 - Sensor Width: 3516 [MakerNotes, Canon, Image] 2 - Sensor Height: 2328 [MakerNotes, Canon, Image] 5 - Sensor Left Border: 52 [MakerNotes, Canon, Image] 6 - Sensor Top Border: 19 [MakerNotes, Canon, Image] 7 - Sensor Right Border: 3507 [MakerNotes, Canon, Image] 8 - Sensor Bottom Border: 2322 [MakerNotes, Canon, Image] 9 - Black Mask Left Border: 0 [MakerNotes, Canon, Image] 10 - Black Mask Top Border: 0 [MakerNotes, Canon, Image] 11 - Black Mask Right Border: 0 [MakerNotes, Canon, Image] 12 - Black Mask Bottom Border: 0 [MakerNotes, Canon, Camera] 25 - WB RGGB Levels As Shot: 2002 1185 1187 2364 [MakerNotes, Canon, Camera] 29 - Color Temp As Shot: 3064 [MakerNotes, Canon, Camera] 30 - WB RGGB Levels Auto: 1720 1022 1024 2031 [MakerNotes, Canon, Camera] 34 - Color Temp Auto: 3064 [MakerNotes, Canon, Camera] 35 - WB RGGB Levels Daylight: 2312 1022 1024 1501 [MakerNotes, Canon, Camera] 39 - Color Temp Daylight: 5200 [MakerNotes, Canon, Camera] 40 - WB RGGB Levels Shade: 2714 1022 1024 1246 [MakerNotes, Canon, Camera] 44 - Color Temp Shade: 7000 [MakerNotes, Canon, Camera] 45 - WB RGGB Levels Cloudy: 2512 1022 1024 1355 [MakerNotes, Canon, Camera] 49 - Color Temp Cloudy: 6000 [MakerNotes, Canon, Camera] 50 - WB RGGB Levels Tungsten: 1523 1022 1024 2397 [MakerNotes, Canon, Camera] 54 - Color Temp Tungsten: 3201 [MakerNotes, Canon, Camera] 55 - WB RGGB Levels Fluorescent: 1944 1022 1024 2015 [MakerNotes, Canon, Camera] 59 - Color Temp Fluorescent: 3905 [MakerNotes, Canon, Camera] 60 - WB RGGB Levels Flash: 2606 1022 1024 1308 [MakerNotes, Canon, Camera] 64 - Color Temp Flash: 6440 [MakerNotes, Canon, Camera] 65 - WB RGGB Levels Custom 1: 2312 1022 1024 1501 [MakerNotes, Canon, Camera] 69 - Color Temp Custom 1: 5200 [MakerNotes, Canon, Camera] 70 - WB RGGB Levels Custom 2: 2312 1022 1024 1501 [MakerNotes, Canon, Camera] 74 - Color Temp Custom 2: 5200 [MakerNotes, Canon, Camera] 2 - Color Tone: Normal [Composite, Composite, Image] Aperture - Aperture: 8.0 [Composite, Composite, Image] CFAPattern - CFA Pattern: [Red,Green][Green,Blue] [Composite, Composite, Camera] DriveMode - Drive Mode: Single-frame Shooting [Composite, Composite, Other] Flash - Flash: Off, Did not fire [Composite, Composite, Camera] ISO - ISO: 400 [Composite, Composite, Image] ImageSize - Image Size: 3516x2328 [Composite, Composite, Preview] JpgFromRaw - Jpg From Raw: (Binary data 29 bytes) [Composite, Composite, Camera] Lens - Lens: 18.0 - 55.0 mm [Composite, Composite, Camera] LensID - Lens ID: Unknown 18-55mm [Composite, Composite, Image] Megapixels - Megapixels: 8.2 [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 26 bytes) [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.6 [Composite, Composite, Camera] ShootingMode - Shooting Mode: Aperture-priority AE [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/15 [Composite, Composite, Camera] WB_RGGBLevels - WB RGGB Levels: 2002 1185 1187 2364 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.993255 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.019 mm [Composite, Composite, Image] FOV - Field Of View: 22.8 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 55.0 mm (35 mm equivalent: 89.2 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 20.42 m [Composite, Composite, Camera] Lens35efl - Lens: 18.0 - 55.0 mm (35 mm equivalent: 29.2 - 89.2 mm) [Composite, Composite, Image] LightValue - Light Value: 7.9 [Composite, Composite, Camera] RedBalance - Red Balance: 1.688027 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/DNG_3.out��������������������������������������������������������������������000644 �000765 �000024 �00000000403 11377002417 016210� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-aux, Camera] OwnerName - Owner Name: Just Me [EXIF, ExifIFD, Image] 42032 - Owner Name: Just Me [MakerNotes, Canon, Camera] 9 - Owner Name: Just Me [Composite, Composite, Camera] OriginalDecisionData - Original Decision Data: (Binary data 24 bytes) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/DPX.t������������������������������������������������������������������������000644 �000765 �000024 �00000001250 12217041661 015444� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/DPX.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::DPX; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'DPX'; my $testnum = 1; # test 2: Extract information from DPX.dpx { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/DPX.dpx'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/DPX_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000004225 12546457274 016256� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.96 [File, System, Image] FileName - File Name: DPX.dpx [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 2.0 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2013:09:20 08:49:38-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:05:11 13:05:40-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:02-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: DPX [File, File, Image] FileTypeExtension - File Type Extension: dpx [File, File, Image] MIMEType - MIME Type: image/x-dpx [File, File, Image] 0 - Byte Order: Big-endian [File, File, Image] 8 - Header Version: V1.0 [File, File, Image] 16 - DPX File Size: 12812288 [File, File, Image] 20 - Ditto Key: New [File, File, Image] 36 - Image File Name: Image filename [File, File, Time] 136 - Create Date: 2010:08:03 08:38:16 [File, File, Author] 160 - Creator: Creator [File, File, Image] 260 - Project: Project name [File, File, Author] 460 - Copyright: Copyright info [File, File, Image] 660 - Encryption Key: ffffffff [File, File, Image] 768 - Orientation: Horizontal (normal) [File, File, Image] 770 - Image Elements: 1 [File, File, Image] 772 - Image Width: 2048 [File, File, Image] 776 - Image Height: 1556 [File, File, Image] 780 - Data Sign: Unsigned [File, File, Image] 800 - Components Configuration: R, G, B [File, File, Image] 803 - Bit Depth: 10 [File, File, Image] 820 - Image Description: CPD [File, File, Image] 1432 - Source File Name: [File, File, Image] 1532 - Source Create Date: [File, File, Image] 1556 - Input Device Name: SPIRIT-4K DATACINE [File, File, Image] 1588 - Input Device Serial Number: 01018 [File, File, Image] 1724 - Frame Rate: 0 [File, File, Image] 1732 - Frame ID: [File, File, Image] 1764 - Slate Information: [File, File, Image] 2048 - User ID: Thomson BTS [Composite, Composite, Image] ImageSize - Image Size: 2048x1556 [Composite, Composite, Image] Megapixels - Megapixels: 3.2 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/DV.t�������������������������������������������������������������������������000644 �000765 �000024 �00000001245 11505373520 015327� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/DV.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::DV; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'DV'; my $testnum = 1; # test 2: Extract information from an DV file { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/DV.dv'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/DV_2.out���������������������������������������������������������������������000644 �000765 �000024 �00000003050 12546457274 016127� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: DV.dv [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 4.3 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:12:25 08:53:20-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:09-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: DV [File, File, Image] FileTypeExtension - File Type Extension: dv [File, File, Image] MIMEType - MIME Type: video/x-dv [DV, DV, Time] DateTimeOriginal - Date Time Original: 2010:02:16 21:36:28 [DV, DV, Video] ImageWidth - Image Width: 720 [DV, DV, Video] ImageHeight - Image Height: 576 [DV, DV, Video] Duration - Duration: 0.00 s [DV, DV, Video] TotalBitrate - Total Bitrate: 28.8 Mbps [DV, DV, Video] VideoFormat - Video Format: IEC 61834 - 625/50 (PAL) [DV, DV, Video] VideoScanType - Video Scan Type: Progressive [DV, DV, Video] FrameRate - Frame Rate: 25 [DV, DV, Video] AspectRatio - Aspect Ratio: 16:9 [DV, DV, Video] Colorimetry - Colorimetry: 4:2:0 [DV, DV, Audio] AudioChannels - Audio Channels: 4 [DV, DV, Audio] AudioSampleRate - Audio Sample Rate: 32000 [DV, DV, Audio] AudioBitsPerSample - Audio Bits Per Sample: 12 [Composite, Composite, Image] ImageSize - Image Size: 720x576 [Composite, Composite, Image] Megapixels - Megapixels: 0.415 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/EXE.t������������������������������������������������������������������������000644 �000765 �000024 �00000001447 12510053334 015436� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/EXE.t". BEGIN { $| = 1; print "1..4\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::EXE; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'EXE'; my $testnum = 1; # tests 2-4: Extract information from Windows PE, Mac OS X Mach-O and Unix ELF executables { my $exifTool = new Image::ExifTool; my $ext; foreach $ext ('exe', 'macho', 'elf') { ++$testnum; my $info = $exifTool->ImageInfo("t/images/EXE.$ext"); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/EXE_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000004512 12546457275 016244� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.96 [File, System, Image] FileName - File Name: EXE.exe [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 5.0 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2008:09:08 08:09:09-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:05:13 13:33:45-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:09-05:00 [File, System, Image] FilePermissions - File Permissions: rwxr-xr-x [File, File, Image] FileType - File Type: Win32 EXE [File, File, Image] FileTypeExtension - File Type Extension: exe [File, File, Image] MIMEType - MIME Type: application/octet-stream [EXE, EXE, Other] 0 - Machine Type: Intel 386 or later, and compatibles [EXE, EXE, Time] 2 - Time Stamp: 2008:09:08 08:01:24-04:00 [EXE, EXE, Other] 10 - PE Type: PE32 [EXE, EXE, Other] 11 - Linker Version: 2.56 [EXE, EXE, Other] 12 - Code Size: 2048 [EXE, EXE, Other] 14 - Initialized Data Size: 4096 [EXE, EXE, Other] 16 - Uninitialized Data Size: 512 [EXE, EXE, Other] 18 - Entry Point: 0x1000 [EXE, EXE, Other] 30 - OS Version: 4.0 [EXE, EXE, Other] 32 - Image Version: 1.0 [EXE, EXE, Other] 34 - Subsystem Version: 4.0 [EXE, EXE, Other] 44 - Subsystem: Windows command line [EXE, EXE, Other] 2 - File Version Number: 1.2.3.4 [EXE, EXE, Other] 4 - Product Version Number: 5.6.7.8 [EXE, EXE, Other] 6 - File Flags Mask: 0x003f [EXE, EXE, Other] 7 - File Flags: Debug [EXE, EXE, Other] 8 - File OS: Win32 [EXE, EXE, Other] 9 - Object File Type: Executable application [EXE, EXE, Other] 10 - File Subtype: 0 [EXE, EXE, Other] LanguageCode - Language Code: English (U.S.) [EXE, EXE, Other] CharacterSet - Character Set: Unicode [EXE, EXE, Other] CompanyName - Company Name: Phil Harvey [EXE, EXE, Other] FileDescription - File Description: ExifTool EXE Test File [EXE, EXE, Other] FileVersion - File Version: 1.2.3.4b [EXE, EXE, Other] InternalName - Internal Name: Skippy the wonder cow [EXE, EXE, Other] LegalCopyright - Legal Copyright: Copyright (c) 2008 [EXE, EXE, Other] LegalTrademarks - Legal Trademarks: none [EXE, EXE, Other] OriginalFilename - Original File Name: EXE.exe [EXE, EXE, Other] ProductName - Product Name: This is not a product [EXE, EXE, Other] ProductVersion - Product Version: 5.6.7.8b ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/EXE_3.out��������������������������������������������������������������������000644 �000765 �000024 �00000001776 12546457275 016256� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: EXE.macho [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 9.3 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2008:08:30 13:31:01-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:19 08:31:07-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:09-05:00 [File, System, Image] FilePermissions - File Permissions: rwxr-xr-x [File, File, Image] FileType - File Type: Mach-O executable [File, File, Image] FileTypeExtension - File Type Extension: [File, File, Image] MIMEType - MIME Type: application/octet-stream [EXE, EXE, Other] 0 - CPU Architecture: 32 bit [EXE, EXE, Other] 1 - CPU Byte Order: Big endian [EXE, EXE, Other] 3 - CPU Type: PowerPC [EXE, EXE, Other] 4 - CPU Subtype: PowerPC (all) [EXE, EXE, Other] 5 - Object File Type: Demand paged executable ��Image-ExifTool-10.10/t/EXE_4.out��������������������������������������������������������������������000644 �000765 �000024 �00000001702 12546457275 016244� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: EXE.elf [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 2.8 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2008:08:30 13:31:01-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:19 08:31:07-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:09-05:00 [File, System, Image] FilePermissions - File Permissions: rwxr-xr-x [File, File, Image] FileType - File Type: ELF executable [File, File, Image] FileTypeExtension - File Type Extension: [File, File, Image] MIMEType - MIME Type: application/octet-stream [EXE, EXE, Other] 4 - CPU Architecture: 32 bit [EXE, EXE, Other] 5 - CPU Byte Order: Little endian [EXE, EXE, Other] 16 - Object File Type: Executable file [EXE, EXE, Other] 18 - CPU Type: i386 ��������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool.t�������������������������������������������������������������������000644 �000765 �000024 �00000025702 12643222031 016545� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/ExifTool.t". BEGIN { $| = 1; print "1..30\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'ExifTool'; my $testnum = 1; # test 2: extract information from JPG file using name { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/ExifTool.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: TIFF file using file reference and ExifTool object with options { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Duplicates => 1, Unknown => 1); open(TESTFILE, 't/images/ExifTool.tif'); my $info = $exifTool->ImageInfo(\*TESTFILE); close(TESTFILE); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 4: test the Group option to extract EXIF info only { ++$testnum; my $info = ImageInfo('t/images/Canon.jpg', {Group0 => 'EXIF'}); print 'not ' unless check($info, $testname, $testnum); print "ok $testnum\n"; } # test 5: extract specified tags only { ++$testnum; my $exifTool = new Image::ExifTool; # don't test DateFormat because strftime output varies with locale # $exifTool->Options(DateFormat => '%H:%M:%S %a. %b. %e, %Y'); my @tags = ('CreateDate', 'DateTimeOriginal', 'ModifyDate', 'Orientation#', '?Resolution'); my $info = $exifTool->ImageInfo('t/images/Canon.jpg', \@tags); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 6: test the 5 different ways to exclude tags... { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Exclude => 'ImageWidth'); my @tagList = ( '-ImageHeight', '-Make' ); my $info = $exifTool->ImageInfo('t/images/Canon.jpg', '-FileSize', '-*resolution', \@tagList, {Group0 => '-MakerNotes'}); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # tests 7/8: test ExtractInfo(), GetInfo(), CombineInfo() { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Duplicates => 0); # don't allow duplicates $exifTool->ExtractInfo('t/images/Canon.jpg'); my $info1 = $exifTool->GetInfo({Group0 => 'MakerNotes'}); my $info2 = $exifTool->GetInfo({Group0 => 'EXIF'}); my $info = $exifTool->CombineInfo($info1, $info2); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; # combine information in different order ++$testnum; $info = $exifTool->CombineInfo($info2, $info1); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 9: test group options across different families { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Canon.jpg', { Group1 => 'Canon', Group2 => '-Camera' }); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # tests 10/11: test ExtractInfo() and GetInfo() # (uses output from test 5 for comparison) { ++$testnum; my $exifTool = new Image::ExifTool; # don't test DateFormat because strftime output is system dependent # $exifTool->Options(DateFormat => '%H:%M:%S %a. %b. %e, %Y'); $exifTool->ExtractInfo('t/images/Canon.jpg'); my @tags = ('createdate', 'datetimeoriginal', 'modifydate', 'orientation#', '?resolution'); my $info = $exifTool->GetInfo(\@tags); my $good = 1; my @expectedTags = ('CreateDate', 'DateTimeOriginal', 'ModifyDate', 'Orientation', 'XResolution', 'YResolution'); for (my $i=0; $i<scalar(@tags); ++$i) { $tags[$i] = $expectedTags[$i] or $good = 0; } print 'not ' unless $good; print "ok $testnum\n"; ++$testnum; print 'not ' unless check($exifTool, $info, $testname, $testnum, 5); print "ok $testnum\n"; } # tests 12/13: check precidence of tags extracted from groups # (Note: these tests should produce the same output as 7/8, # so the .out files from tests 7/8 are used) { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Duplicates => 0); # don't allow duplicates my $info = $exifTool->ImageInfo('t/images/Canon.jpg',{Group0=>['MakerNotes','EXIF']}); print 'not ' unless check($exifTool, $info, $testname, $testnum, 7); print "ok $testnum\n"; # combine information in different order ++$testnum; $info = $exifTool->ImageInfo('t/images/Canon.jpg',{Group0=>['EXIF','MakerNotes']}); print 'not ' unless check($exifTool, $info, $testname, $testnum, 8); print "ok $testnum\n"; } # tests 14/15/16: test GetGroups() { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->ExtractInfo('t/images/Canon.jpg'); my @groups = $exifTool->GetGroups(2); my $not; foreach ('Camera','ExifTool','Image','Time') { $_ eq shift @groups or $not = 1; } @groups and $not = 1; print 'not ' if $not; print "ok $testnum\n"; ++$testnum; my $info = $exifTool->GetInfo({Group0 => 'EXIF'}); @groups = $exifTool->GetGroups($info,0); print 'not ' unless @groups==1 and $groups[0] eq 'EXIF'; print "ok $testnum\n"; ++$testnum; my $testfile = "t/ExifTool_$testnum"; open(TESTFILE,">$testfile.failed"); my $oldSep = $/; $/ = "\x0a"; # set input line separator $exifTool->ExtractInfo('t/images/Canon.jpg'); my $family = '1:2'; @groups = $exifTool->GetGroups($family); my $group; foreach $group (@groups) { next if $group eq 'ExifTool'; print TESTFILE "---- $group ----\n"; my $info = $exifTool->GetInfo({"Group$family" => $group}); foreach (sort $exifTool->GetTagList($info)) { print TESTFILE "$_ : $$info{$_}\n"; } } $/ = $oldSep; # restore input line separator close(TESTFILE); print 'not ' unless testCompare("$testfile.out","$testfile.failed",$testnum); print "ok $testnum\n"; } # test 17: Test verbose output { ++$testnum; print 'not ' unless testVerbose($testname, $testnum, 't/images/Canon.jpg', 3); print "ok $testnum\n"; } # tests 18/19: Test Group# option with multiple groups and no duplicates { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Duplicates => 0); # don't allow duplicates my $info = $exifTool->ImageInfo('t/images/Canon.jpg', { Group0 => ['MakerNotes','EXIF'] }); print 'not ' unless check($exifTool, $info, $testname, $testnum, 7); print "ok $testnum\n"; ++$testnum; $info = $exifTool->ImageInfo('t/images/Canon.jpg', { Group0 => ['EXIF','MakerNotes'] }); print 'not ' unless check($exifTool, $info, $testname, $testnum, 8); print "ok $testnum\n"; } # test 20: Test extracting a single, non-priority tag with duplicates set to 0 { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Duplicates => 0); my $info = $exifTool->ImageInfo('t/images/Canon.jpg', 'EXIF:WhiteBalance'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 21: Test extracting ICC_Profile as a block { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/ExifTool.tif', 'ICC_Profile'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 22: Test InsertTagValues { ++$testnum; my $exifTool = new Image::ExifTool; my @foundTags; $exifTool->ImageInfo('t/images/ExifTool.jpg', \@foundTags); my $str = $exifTool->InsertTagValues(\@foundTags, '$ifd0:model - $1ciff:3main:model'); my $testfile = "t/ExifTool_$testnum"; open(TESTFILE,">$testfile.failed"); my $oldSep = $/; $/ = "\x0a"; # set input line separator print TESTFILE $str, "\n"; $/ = $oldSep; # restore input line separator close(TESTFILE); print 'not ' unless testCompare("$testfile.out","$testfile.failed",$testnum); print "ok $testnum\n"; } # test 23: Test the multi-group feature in a tag name { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/ExifTool.jpg', 'main:Author:IPTC3:all'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 24: Test a shortcut with multiple group names and a ValueConv suffix { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Canon.jpg', 'exififd:camera:common#'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 25: Test GlobalTimeShift option { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(GlobalTimeShift => '-0:1:0 0:0:0'); # Note: can't extract system times because this could result in a different # calculated global time offset (since I am shifting by 1 month) my $info = $exifTool->ImageInfo('t/images/ExifTool.jpg', 'time:all', '-system:all'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 26: Test reading with wildcards { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Canon.jpg', 'E*'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 27: Test ListItem option { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(ListItem => -3); my $info = $exifTool->ImageInfo('t/images/ExifTool.jpg', 'Subject', 'SupplementalCategories'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 28: Test FastScan = 3 { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(FastScan => 3); my $info = $exifTool->ImageInfo('t/images/ExifTool.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 29: Test Filter { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Filter => 'tr/ /_/;tr/0-9/#/'); my $info = $exifTool->ImageInfo('t/images/ExifTool.jpg', '-ExifToolVersion'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 30: Calculate JPEGDigest and JPEGQualityEstimate { ++$testnum; my $skip = ''; if (eval 'require Digest::MD5') { my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Writer.jpg', 'JPEGDigest', 'JPEGQualityEstimate'); print 'not ' unless check($exifTool, $info, $testname, $testnum); } else { $skip = ' # skip Requires Digest::MD5'; } print "ok $testnum$skip\n"; } # end ��������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_16.out��������������������������������������������������������������000644 �000765 �000024 �00000011071 12546457275 017437� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������---- Canon:Camera ---- AFAreaHeight : 151 AFAreaWidth : 151 AFAreaXPositions : 1014 608 0 0 0 -608 -1014 AFAreaYPositions : 0 0 -506 0 506 0 0 AFImageHeight : 2048 AFImageWidth : 3072 AFPointsInFocus : (none) CameraISO : n/a CameraType : EOS Mid-range CanonExposureMode : Manual CanonFirmwareVersion : Firmware Version 1.1.1 CanonFlashMode : Off CanonImageSize : Large CanonModelID : EOS Digital Rebel / 300D / Kiss Digital ColorSpace (1) : sRGB ColorTemperature : 5200 ColorTone : Normal ContinuousDrive : Continuous Contrast : +1 DigitalZoom : Unknown (-1) EasyMode : Manual FlashActivity : 0 FlashBits : (none) FocalUnits : 1/mm FocusMode : Manual Focus (3) FocusRange : Not Known LensType : n/a MacroMode : Unknown (0) ManualFlashOutput : n/a MaxAperture : 4 MaxFocalLength : 55 mm MeasuredRGGB : 998 1022 1026 808 MeteringMode : Center-weighted average MinAperture : 27 MinFocalLength : 18 mm NumAFPoints : 7 OpticalZoomCode : n/a OwnerName : Phil Harvey Quality : RAW RecordMode : CRW+THM Saturation : +1 SelfTimer : Off SerialNumber : 0560018150 SerialNumberFormat : Format 1 Sharpness : +1 ThumbnailImageValidArea : 0 159 7 112 ValidAFPoints : 7 WB_RGGBBlackLevels : 124 123 124 123 WB_RGGBLevelsAuto : 1719 832 831 990 WB_RGGBLevelsCloudy : 1878 832 831 903 WB_RGGBLevelsCustom : 1722 832 831 989 WB_RGGBLevelsDaylight : 1722 832 831 989 WB_RGGBLevelsFlash : 1933 832 831 895 WB_RGGBLevelsFluorescent : 1506 842 841 1381 WB_RGGBLevelsKelvin : 1722 832 831 988 WB_RGGBLevelsShade : 2035 832 831 839 WB_RGGBLevelsTungsten : 1228 913 912 1668 ZoomSourceWidth : 3072 ZoomTargetWidth : 3072 ---- Canon:Image ---- AEBBracketValue : 0 AutoExposureBracketing : Off AutoISO : 100 AutoRotate : None BaseISO : 100 BracketMode : Off BracketShotNumber : 0 BracketValue : 0 BulbDuration : 4 CanonFileLength : 4480822 CanonImageHeight : 2048 CanonImageType : CRW:EOS DIGITAL REBEL CMOS RAW CanonImageWidth : 3072 ControlMode : Camera Local Control ExposureCompensation : 0 ExposureTime (1) : 128 FNumber (1) : 14 FileNumber : 118-1861 FlashExposureComp : 0 FlashGuideNumber : 0 FocalLength (1) : 34 mm FocalPlaneXSize : 23.22 mm FocalPlaneYSize : 15.49 mm FocusDistanceLower : 5.46 m FocusDistanceUpper : inf MeasuredEV : -1.25 MeasuredEV2 : -1.25 NDFilter : n/a SelfTimer2 : 0 SequenceNumber : 0 SlowShutter : None TargetAperture : 14 WhiteBalance : Auto ---- Composite:Camera ---- BlueBalance : 1.190619 CircleOfConfusion : 0.019 mm DriveMode : Continuous Shooting FocalLength35efl : 34.0 mm (35 mm equivalent: 54.0 mm) HyperfocalDistance : 4.37 m ISO (1) : 100 Lens : 18.0 - 55.0 mm Lens35efl : 18.0 - 55.0 mm (35 mm equivalent: 28.6 - 87.4 mm) LensID : Unknown 18-55mm RedBalance : 2.067348 ScaleFactor35efl : 1.6 ShootingMode : Bulb WB_RGGBLevels : 1719 832 831 990 ---- Composite:Image ---- Aperture : 14.0 DOF : inf (4.31 m - inf) FOV : 36.9 deg ImageSize : 8x8 LightValue : 5.6 Megapixels : 0.000064 ShutterSpeed : 4 ---- ExifIFD:Camera ---- ExposureMode : Manual Flash : No Flash FocalLength : 34.0 mm FocalPlaneResolutionUnit : inches FocalPlaneXResolution : 3443.946188 FocalPlaneYResolution : 3442.016807 MaxApertureValue : 4.5 MeteringMode (1) : Average SceneCaptureType : Standard SensingMethod : One-chip color area WhiteBalance (1) : Auto ---- ExifIFD:Image ---- ApertureValue : 14.0 ColorSpace : sRGB ComponentsConfiguration : Y, Cb, Cr, - CompressedBitsPerPixel : 9 CustomRendered : Normal ExifImageHeight : 120 ExifImageWidth : 160 ExifVersion : 0221 ExposureCompensation (1) : 0 ExposureTime : 4 FNumber : 14.0 FileSource : Digital Camera FlashpixVersion : 0100 ISO : 100 ShutterSpeedValue : 0 UserComment : ---- ExifIFD:Time ---- CreateDate : 2003:12:04 06:46:52 DateTimeOriginal : 2003:12:04 06:46:52 ---- File:Image ---- BitsPerSample : 8 ColorComponents : 3 EncodingProcess : Baseline DCT, Huffman coding ExifByteOrder : Little-endian (Intel, II) FileType : JPEG FileTypeExtension : jpg ImageHeight : 8 ImageWidth : 8 MIMEType : image/jpeg YCbCrSubSampling : YCbCr4:2:0 (2 2) ---- IFD0:Camera ---- Make : Canon Model : Canon EOS DIGITAL REBEL ---- IFD0:Image ---- Orientation : Horizontal (normal) ResolutionUnit : inches XResolution : 180 YCbCrPositioning : Centered YResolution : 180 ---- IFD0:Time ---- ModifyDate : 2003:12:04 06:46:52 ---- InteropIFD:Image ---- InteropIndex : THM - DCF thumbnail file InteropVersion : 0100 RelatedImageHeight : 2048 RelatedImageWidth : 3072 ---- System:Image ---- Directory : t/images FileName : Canon.jpg FilePermissions : rw-r--r-- FileSize : 2.6 kB ---- System:Time ---- FileAccessDate : 2015:04:18 07:17:39-04:00 FileInodeChangeDate : 2015:03:07 15:31:02-05:00 FileModifyDate : 2006:10:03 15:10:31-04:00 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_17.out��������������������������������������������������������������000644 �000765 �000024 �00000077602 12546457275 017454� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ExifToolVersion = 9.94 FileName = Canon.jpg Directory = t/images FileSize = 2697 FileModifyDate = 1159902631 FileAccessDate = 1430317245 FileInodeChangeDate = 1429973820 FilePermissions = 33188 FileType = JPEG FileTypeExtension = JPG MIMEType = image/jpeg JPEG APP1 (2442 bytes): 0006: 45 78 69 66 00 00 49 49 2a 00 08 00 00 00 09 00 [Exif..II*.......] 0016: 0f 01 02 00 06 00 00 00 7a 00 00 00 10 01 02 00 [........z.......] 0026: 18 00 00 00 80 00 00 00 12 01 03 00 01 00 00 00 [................] 0036: 01 00 00 00 1a 01 05 00 01 00 00 00 98 00 00 00 [................] 0046: 1b 01 05 00 01 00 00 00 a0 00 00 00 28 01 03 00 [............(...] 0056: 01 00 00 00 02 00 00 00 32 01 02 00 14 00 00 00 [........2.......] 0066: a8 00 00 00 13 02 03 00 01 00 00 00 01 00 00 00 [................] [snip 2330 bytes] ExifByteOrder = II + [IFD0 directory with 9 entries] | 0) Make = Canon | - Tag 0x010f (6 bytes, string[6]): | 0086: 43 61 6e 6f 6e 00 [Canon.] | 1) Model = Canon EOS DIGITAL REBEL | - Tag 0x0110 (24 bytes, string[24]): | 008c: 43 61 6e 6f 6e 20 45 4f 53 20 44 49 47 49 54 41 [Canon EOS DIGITA] | 009c: 4c 20 52 45 42 45 4c 00 [L REBEL.] | 2) Orientation = 1 | - Tag 0x0112 (2 bytes, int16u[1]): | 0036: 01 00 [..] | 3) XResolution = 180 (180/1) | - Tag 0x011a (8 bytes, rational64u[1]): | 00a4: b4 00 00 00 01 00 00 00 [........] | 4) YResolution = 180 (180/1) | - Tag 0x011b (8 bytes, rational64u[1]): | 00ac: b4 00 00 00 01 00 00 00 [........] | 5) ResolutionUnit = 2 | - Tag 0x0128 (2 bytes, int16u[1]): | 005a: 02 00 [..] | 6) ModifyDate = 2003:12:04 06:46:52 | - Tag 0x0132 (20 bytes, string[20]): | 00b4: 32 30 30 33 3a 31 32 3a 30 34 20 30 36 3a 34 36 [2003:12:04 06:46] | 00c4: 3a 35 32 00 [:52.] | 7) YCbCrPositioning = 1 | - Tag 0x0213 (2 bytes, int16u[1]): | 0072: 01 00 [..] | 8) ExifOffset (SubDirectory) --> | - Tag 0x8769 (4 bytes, int32u[1]): | 007e: bc 00 00 00 [....] | + [ExifIFD directory with 31 entries] | | 0) ExposureTime = 4 (4/1) | | - Tag 0x829a (8 bytes, rational64u[1]): | | 0242: 04 00 00 00 01 00 00 00 [........] | | 1) FNumber = 14 (14/1) | | - Tag 0x829d (8 bytes, rational64u[1]): | | 024a: 0e 00 00 00 01 00 00 00 [........] | | 2) ISO = 100 | | - Tag 0x8827 (2 bytes, int16u[1]): | | 00ea: 64 00 [d.] | | 3) ExifVersion = 0221 | | - Tag 0x9000 (4 bytes, undef[4]): | | 00f6: 30 32 32 31 [0221] | | 4) DateTimeOriginal = 2003:12:04 06:46:52 | | - Tag 0x9003 (20 bytes, string[20]): | | 0252: 32 30 30 33 3a 31 32 3a 30 34 20 30 36 3a 34 36 [2003:12:04 06:46] | | 0262: 3a 35 32 00 [:52.] | | 5) CreateDate = 2003:12:04 06:46:52 | | - Tag 0x9004 (20 bytes, string[20]): | | 0266: 32 30 30 33 3a 31 32 3a 30 34 20 30 36 3a 34 36 [2003:12:04 06:46] | | 0276: 3a 35 32 00 [:52.] | | 6) ComponentsConfiguration = 1 2 3 0 | | - Tag 0x9101 (4 bytes, undef[4] read as int8u[4]): | | 011a: 01 02 03 00 [....] | | 7) CompressedBitsPerPixel = 9 (9/1) | | - Tag 0x9102 (8 bytes, rational64u[1]): | | 027a: 09 00 00 00 01 00 00 00 [........] | | 8) ShutterSpeedValue = -2147483648 (-2147483648/1) | | - Tag 0x9201 (8 bytes, rational64s[1]): | | 0282: 00 00 00 80 01 00 00 00 [........] | | 9) ApertureValue = 7.614715576 (499038/65536) | | - Tag 0x9202 (8 bytes, rational64u[1]): | | 028a: 5e 9d 07 00 00 00 01 00 [^.......] | | 10) ExposureCompensation = 0 (0/3) | | - Tag 0x9204 (8 bytes, rational64s[1]): | | 0292: 00 00 00 00 03 00 00 00 [........] | | 11) MaxApertureValue = 4.33984375 (284416/65536) | | - Tag 0x9205 (8 bytes, rational64u[1]): | | 029a: 00 57 04 00 00 00 01 00 [.W......] | | 12) MeteringMode = 1 | | - Tag 0x9207 (2 bytes, int16u[1]): | | 0162: 01 00 [..] | | 13) Flash = 0 | | - Tag 0x9209 (2 bytes, int16u[1]): | | 016e: 00 00 [..] | | 14) FocalLength = 34 (34/1) | | - Tag 0x920a (8 bytes, rational64u[1]): | | 02a2: 22 00 00 00 01 00 00 00 [".......] | | 15) MakerNoteCanon (SubDirectory) --> | | - Tag 0x927c (1432 bytes, undef[1432]): | | 02aa: 1a 00 01 00 03 00 2e 00 00 00 dc 03 00 00 02 00 [................] | | 02ba: 03 00 04 00 00 00 38 04 00 00 03 00 03 00 04 00 [......8.........] | | 02ca: 00 00 40 04 00 00 04 00 03 00 21 00 00 00 48 04 [..@.......!...H.] | | 02da: 00 00 93 00 03 00 09 00 00 00 8a 04 00 00 06 00 [................] | | 02ea: 02 00 20 00 00 00 9c 04 00 00 07 00 02 00 20 00 [.. ........... .] | | [snip 1352 bytes] | | + [MakerNotes directory with 26 entries] | | | 0) CanonCameraSettings (SubDirectory) --> | | | - Tag 0x0001 (92 bytes, int16u[46] read as undef[92]): | | | 03e8: 5c 00 00 00 00 00 04 00 00 00 01 00 00 00 03 00 [\...............] | | | 03f8: 00 00 02 00 00 00 01 00 ff ff 01 00 01 00 01 00 [................] | | | 0408: 00 00 05 00 02 00 00 00 04 00 ff 7f ff ff 37 00 [..............7.] | | | 0418: 12 00 01 00 80 00 30 01 00 00 00 00 00 00 00 00 [......0.........] | | | 0428: ff ff ff ff ff ff 00 00 00 0c 00 0c 00 00 ff ff [................] | | | 0438: ff ff 00 00 00 00 ff 7f ff ff ff ff [............] | | | + [BinaryData directory, 92 bytes] | | | | MacroMode = 0 | | | | - Tag 0x0001 (2 bytes, int16s[1]): | | | | 03ea: 00 00 [..] | | | | SelfTimer = 0 | | | | - Tag 0x0002 (2 bytes, int16s[1]): | | | | 03ec: 00 00 [..] | | | | Quality = 4 | | | | - Tag 0x0003 (2 bytes, int16s[1]): | | | | 03ee: 04 00 [..] | | | | CanonFlashMode = 0 | | | | - Tag 0x0004 (2 bytes, int16s[1]): | | | | 03f0: 00 00 [..] | | | | ContinuousDrive = 1 | | | | - Tag 0x0005 (2 bytes, int16s[1]): | | | | 03f2: 01 00 [..] | | | | FocusMode = 3 | | | | - Tag 0x0007 (2 bytes, int16s[1]): | | | | 03f6: 03 00 [..] | | | | RecordMode = 2 | | | | - Tag 0x0009 (2 bytes, int16s[1]): | | | | 03fa: 02 00 [..] | | | | CanonImageSize = 0 | | | | - Tag 0x000a (2 bytes, int16s[1]): | | | | 03fc: 00 00 [..] | | | | EasyMode = 1 | | | | - Tag 0x000b (2 bytes, int16s[1]): | | | | 03fe: 01 00 [..] | | | | DigitalZoom = -1 | | | | - Tag 0x000c (2 bytes, int16s[1]): | | | | 0400: ff ff [..] | | | | Contrast = 1 | | | | - Tag 0x000d (2 bytes, int16s[1]): | | | | 0402: 01 00 [..] | | | | Saturation = 1 | | | | - Tag 0x000e (2 bytes, int16s[1]): | | | | 0404: 01 00 [..] | | | | Sharpness = 1 | | | | - Tag 0x000f (2 bytes, int16s[1]): | | | | 0406: 01 00 [..] | | | | CameraISO = 0 | | | | - Tag 0x0010 (2 bytes, int16s[1]): | | | | 0408: 00 00 [..] | | | | MeteringMode = 5 | | | | - Tag 0x0011 (2 bytes, int16s[1]): | | | | 040a: 05 00 [..] | | | | FocusRange = 2 | | | | - Tag 0x0012 (2 bytes, int16s[1]): | | | | 040c: 02 00 [..] | | | | AFPoint = 0 | | | | - Tag 0x0013 (2 bytes, int16s[1]): | | | | 040e: 00 00 [..] | | | | CanonExposureMode = 4 | | | | - Tag 0x0014 (2 bytes, int16s[1]): | | | | 0410: 04 00 [..] | | | | LensType = -1 | | | | - Tag 0x0016 (2 bytes, int16s[1]): | | | | 0414: ff ff [..] | | | | MaxFocalLength = 55 | | | | - Tag 0x0017 (2 bytes, int16u[1]): | | | | 0416: 37 00 [7.] | | | | MinFocalLength = 18 | | | | - Tag 0x0018 (2 bytes, int16u[1]): | | | | 0418: 12 00 [..] | | | | FocalUnits = 1 | | | | - Tag 0x0019 (2 bytes, int16s[1]): | | | | 041a: 01 00 [..] | | | | MaxAperture = 128 | | | | - Tag 0x001a (2 bytes, int16s[1]): | | | | 041c: 80 00 [..] | | | | MinAperture = 304 | | | | - Tag 0x001b (2 bytes, int16s[1]): | | | | 041e: 30 01 [0.] | | | | FlashActivity = 0 | | | | - Tag 0x001c (2 bytes, int16s[1]): | | | | 0420: 00 00 [..] | | | | FlashBits = 0 | | | | - Tag 0x001d (2 bytes, int16s[1]): | | | | 0422: 00 00 [..] | | | | FocusContinuous = -1 | | | | - Tag 0x0020 (2 bytes, int16s[1]): | | | | 0428: ff ff [..] | | | | AESetting = -1 | | | | - Tag 0x0021 (2 bytes, int16s[1]): | | | | 042a: ff ff [..] | | | | ImageStabilization = -1 | | | | - Tag 0x0022 (2 bytes, int16s[1]): | | | | 042c: ff ff [..] | | | | DisplayAperture = 0 | | | | - Tag 0x0023 (2 bytes, int16s[1]): | | | | 042e: 00 00 [..] | | | | ZoomSourceWidth = 3072 | | | | - Tag 0x0024 (2 bytes, int16s[1]): | | | | 0430: 00 0c [..] | | | | ZoomTargetWidth = 3072 | | | | - Tag 0x0025 (2 bytes, int16s[1]): | | | | 0432: 00 0c [..] | | | | SpotMeteringMode = -1 | | | | - Tag 0x0027 (2 bytes, int16s[1]): | | | | 0436: ff ff [..] | | | | PhotoEffect = -1 | | | | - Tag 0x0028 (2 bytes, int16s[1]): | | | | 0438: ff ff [..] | | | | ManualFlashOutput = 0 | | | | - Tag 0x0029 (2 bytes, int16s[1]): | | | | 043a: 00 00 [..] | | | | ColorTone = 0 | | | | - Tag 0x002a (2 bytes, int16s[1]): | | | | 043c: 00 00 [..] | | | 1) CanonFocalLength (SubDirectory) --> | | | - Tag 0x0002 (8 bytes, int16u[4] read as undef[8]): | | | 0444: 00 00 22 00 92 03 62 02 [.."...b.] | | | + [BinaryData directory, 8 bytes] | | | | FocalType = 0 | | | | - Tag 0x0000 (2 bytes, int16u[1]): | | | | 0444: 00 00 [..] | | | | FocalLength = 34 | | | | - Tag 0x0001 (2 bytes, int16u[1]): | | | | 0446: 22 00 [".] | | | | FocalPlaneXSize = 914 | | | | - Tag 0x0002 (2 bytes, int16u[1]): | | | | 0448: 92 03 [..] | | | | FocalPlaneYSize = 610 | | | | - Tag 0x0003 (2 bytes, int16u[1]): | | | | 044a: 62 02 [b.] | | | 2) CanonFlashInfo = 100 0 0 0 | | | - Tag 0x0003 (8 bytes, int16u[4]): | | | 044c: 64 00 00 00 00 00 00 00 [d.......] | | | 3) CanonShotInfo (SubDirectory) --> | | | - Tag 0x0004 (66 bytes, int16u[33] read as undef[66]): | | | 0454: 42 00 00 00 a0 00 38 ff f4 00 00 80 00 00 00 00 [B.....8.........] | | | 0464: 03 00 00 00 08 00 08 00 00 00 00 00 00 00 00 00 [................] | | | 0474: 00 00 00 00 01 00 ff ff 22 02 f4 00 20 ff 26 00 [........"... .&.] | | | 0484: 28 00 00 00 fc 00 00 00 ff ff 00 00 00 00 00 00 [(...............] | | | 0494: 00 00 [..] | | | + [BinaryData directory, 66 bytes] | | | | AutoISO = 0 | | | | - Tag 0x0001 (2 bytes, int16s[1]): | | | | 0456: 00 00 [..] | | | | BaseISO = 160 | | | | - Tag 0x0002 (2 bytes, int16s[1]): | | | | 0458: a0 00 [..] | | | | MeasuredEV = -200 | | | | - Tag 0x0003 (2 bytes, int16s[1]): | | | | 045a: 38 ff [8.] | | | | TargetAperture = 244 | | | | - Tag 0x0004 (2 bytes, int16s[1]): | | | | 045c: f4 00 [..] | | | | TargetExposureTime = -32768 | | | | - Tag 0x0005 (2 bytes, int16s[1]): | | | | 045e: 00 80 [..] | | | | ExposureCompensation = 0 | | | | - Tag 0x0006 (2 bytes, int16s[1]): | | | | 0460: 00 00 [..] | | | | WhiteBalance = 0 | | | | - Tag 0x0007 (2 bytes, int16s[1]): | | | | 0462: 00 00 [..] | | | | SlowShutter = 3 | | | | - Tag 0x0008 (2 bytes, int16s[1]): | | | | 0464: 03 00 [..] | | | | SequenceNumber = 0 | | | | - Tag 0x0009 (2 bytes, int16s[1]): | | | | 0466: 00 00 [..] | | | | OpticalZoomCode = 8 | | | | - Tag 0x000a (2 bytes, int16s[1]): | | | | 0468: 08 00 [..] | | | | CameraTemperature = 0 | | | | - Tag 0x000c (2 bytes, int16s[1]): | | | | 046c: 00 00 [..] | | | | FlashGuideNumber = 0 | | | | - Tag 0x000d (2 bytes, int16s[1]): | | | | 046e: 00 00 [..] | | | | AFPointsInFocus = 0 | | | | - Tag 0x000e (2 bytes, int16s[1]): | | | | 0470: 00 00 [..] | | | | FlashExposureComp = 0 | | | | - Tag 0x000f (2 bytes, int16s[1]): | | | | 0472: 00 00 [..] | | | | AutoExposureBracketing = 0 | | | | - Tag 0x0010 (2 bytes, int16s[1]): | | | | 0474: 00 00 [..] | | | | AEBBracketValue = 0 | | | | - Tag 0x0011 (2 bytes, int16s[1]): | | | | 0476: 00 00 [..] | | | | ControlMode = 1 | | | | - Tag 0x0012 (2 bytes, int16s[1]): | | | | 0478: 01 00 [..] | | | | FocusDistanceUpper = 65535 | | | | - Tag 0x0013 (2 bytes, int16u[1]): | | | | 047a: ff ff [..] | | | | FocusDistanceLower = 546 | | | | - Tag 0x0014 (2 bytes, int16u[1]): | | | | 047c: 22 02 [".] | | | | FNumber = 244 | | | | - Tag 0x0015 (2 bytes, int16s[1]): | | | | 047e: f4 00 [..] | | | | ExposureTime = -224 | | | | - Tag 0x0016 (2 bytes, int16s[1]): | | | | 0480: 20 ff [ .] | | | | MeasuredEV2 = 38 | | | | - Tag 0x0017 (2 bytes, int16s[1]): | | | | 0482: 26 00 [&.] | | | | BulbDuration = 40 | | | | - Tag 0x0018 (2 bytes, int16s[1]): | | | | 0484: 28 00 [(.] | | | | CameraType = 252 | | | | - Tag 0x001a (2 bytes, int16s[1]): | | | | 0488: fc 00 [..] | | | | AutoRotate = 0 | | | | - Tag 0x001b (2 bytes, int16s[1]): | | | | 048a: 00 00 [..] | | | | NDFilter = -1 | | | | - Tag 0x001c (2 bytes, int16s[1]): | | | | 048c: ff ff [..] | | | | SelfTimer2 = 0 | | | | - Tag 0x001d (2 bytes, int16s[1]): | | | | 048e: 00 00 [..] | | | 4) CanonFileInfo (SubDirectory) --> | | | - Tag 0x0093 (18 bytes, int16u[9] read as undef[18]): | | | 0496: 12 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff [................] | | | 04a6: ff ff [..] | | | + [BinaryData directory, 18 bytes] | | | | BracketMode = 0 | | | | - Tag 0x0003 (2 bytes, int16s[1]): | | | | 049c: 00 00 [..] | | | | BracketValue = 0 | | | | - Tag 0x0004 (2 bytes, int16s[1]): | | | | 049e: 00 00 [..] | | | | BracketShotNumber = 0 | | | | - Tag 0x0005 (2 bytes, int16s[1]): | | | | 04a0: 00 00 [..] | | | | RawJpgQuality = -1 | | | | - Tag 0x0006 (2 bytes, int16s[1]): | | | | 04a2: ff ff [..] | | | | RawJpgSize = -1 | | | | - Tag 0x0007 (2 bytes, int16s[1]): | | | | 04a4: ff ff [..] | | | | LongExposureNoiseReduction2 = -1 | | | | - Tag 0x0008 (2 bytes, int16s[1]): | | | | 04a6: ff ff [..] | | | 5) CanonImageType = CRW:EOS DIGITAL REBEL CMOS RAW | | | - Tag 0x0006 (32 bytes, string[32]): | | | 04a8: 43 52 57 3a 45 4f 53 20 44 49 47 49 54 41 4c 20 [CRW:EOS DIGITAL ] | | | 04b8: 52 45 42 45 4c 20 43 4d 4f 53 20 52 41 57 00 00 [REBEL CMOS RAW..] | | | 6) CanonFirmwareVersion = Firmware Version 1.1.1 | | | - Tag 0x0007 (32 bytes, string[32]): | | | 04c8: 46 69 72 6d 77 61 72 65 20 56 65 72 73 69 6f 6e [Firmware Version] | | | 04d8: 20 31 2e 31 2e 31 00 00 00 00 00 00 00 00 00 00 [ 1.1.1..........] | | | 7) SerialNumber = 560018150 | | | - Tag 0x000c (4 bytes, int32u[1]): | | | 0308: e6 32 61 21 [.2a!] | | | 8) SerialNumberFormat = 2415919104 | | | - Tag 0x0015 (4 bytes, int32u[1]): | | | 0314: 00 00 00 90 [....] | | | 9) FileNumber = 1181861 | | | - Tag 0x0008 (4 bytes, int32u[1]): | | | 0320: a5 08 12 00 [....] | | | 10) OwnerName = Phil Harvey | | | - Tag 0x0009 (32 bytes, string[32]): | | | 04e8: 50 68 69 6c 20 48 61 72 76 65 79 00 00 00 00 00 [Phil Harvey.....] | | | 04f8: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................] | | | 11) CanonModelID = 2147484016 | | | - Tag 0x0010 (4 bytes, int32u[1]): | | | 0338: 70 01 00 80 [p...] | | | 12) CanonFileLength = 4480822 | | | - Tag 0x000e (4 bytes, int32u[1]): | | | 0344: 36 5f 44 00 [6_D.] | | | 13) CanonCameraInfoUnknown (SubDirectory) --> | | | - Tag 0x000d (512 bytes, int8u[512] read as undef[512]): | | | 0508: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................] | | | 0518: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................] | | | 0528: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................] | | | 0538: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................] | | | 0548: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................] | | | [snip 432 bytes] | | | + [BinaryData directory, 512 bytes] | | | 14) Canon_0x0000 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | | | - Tag 0x0000 (36 bytes, int16u[18]): | | | 0708: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................] | | | 0718: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................] | | | 0728: 00 00 00 00 [....] | | | 15) Canon_0x00c0 = 26 331 372 372 177 240 428 429 277 186 510 511 442 | | | - Tag 0x00c0 (26 bytes, int16u[13]): | | | 072c: 1a 00 4b 01 74 01 74 01 b1 00 f0 00 ac 01 ad 01 [..K.t.t.........] | | | 073c: 15 01 ba 00 fe 01 ff 01 ba 01 [..........] | | | 16) Canon_0x00c1 = 26 299 375 375 170 202 394 395 240 153 453 454 375 | | | - Tag 0x00c1 (26 bytes, int16u[13]): | | | 0746: 1a 00 2b 01 77 01 77 01 aa 00 ca 00 8a 01 8b 01 [..+.w.w.........] | | | 0756: f0 00 99 00 c5 01 c6 01 77 01 [........w.] | | | 17) MeasuredColor (SubDirectory) --> | | | - Tag 0x00aa (10 bytes, int16u[5] read as undef[10]): | | | 0760: 0a 00 e6 03 fe 03 02 04 28 03 [........(.] | | | + [BinaryData directory, 10 bytes] | | | | MeasuredRGGB = 998 1022 1026 808 | | | | - Tag 0x0001 (8 bytes, int16u[4]): | | | | 0762: e6 03 fe 03 02 04 28 03 [......(.] | | | 18) Canon_0x00a8 = 20 5190 5190 7000 5987 3214 3897 6203 5190 5200 | | | - Tag 0x00a8 (20 bytes, int16u[10]): | | | 076a: 14 00 46 14 46 14 58 1b 63 17 8e 0c 39 0f 3b 18 [..F.F.X.c...9.;.] | | | 077a: 46 14 50 14 [F.P.] | | | 19) ColorBalance (SubDirectory) --> | | | - Tag 0x00a9 (82 bytes, int16u[41] read as undef[82]): | | | 077e: 52 00 b7 06 40 03 3f 03 de 03 ba 06 40 03 3f 03 [R...@.?.....@.?.] | | | 078e: dd 03 f3 07 40 03 3f 03 47 03 56 07 40 03 3f 03 [....@.?.G.V.@.?.] | | | 079e: 87 03 cc 04 91 03 90 03 84 06 e2 05 4a 03 49 03 [............J.I.] | | | 07ae: 65 05 8d 07 40 03 3f 03 7f 03 ba 06 40 03 3f 03 [e...@.?.....@.?.] | | | 07be: dd 03 ba 06 40 03 3f 03 dc 03 7c 00 7b 00 7c 00 [....@.?...|.{.|.] | | | 07ce: 7b 00 [{.] | | | + [BinaryData directory, 82 bytes] | | | | WB_RGGBLevelsAuto = 1719 832 831 990 | | | | - Tag 0x0001 (8 bytes, int16s[4]): | | | | 0780: b7 06 40 03 3f 03 de 03 [..@.?...] | | | | WB_RGGBLevelsDaylight = 1722 832 831 989 | | | | - Tag 0x0005 (8 bytes, int16s[4]): | | | | 0788: ba 06 40 03 3f 03 dd 03 [..@.?...] | | | | WB_RGGBLevelsShade = 2035 832 831 839 | | | | - Tag 0x0009 (8 bytes, int16s[4]): | | | | 0790: f3 07 40 03 3f 03 47 03 [..@.?.G.] | | | | WB_RGGBLevelsCloudy = 1878 832 831 903 | | | | - Tag 0x000d (8 bytes, int16s[4]): | | | | 0798: 56 07 40 03 3f 03 87 03 [V.@.?...] | | | | WB_RGGBLevelsTungsten = 1228 913 912 1668 | | | | - Tag 0x0011 (8 bytes, int16s[4]): | | | | 07a0: cc 04 91 03 90 03 84 06 [........] | | | | WB_RGGBLevelsFluorescent = 1506 842 841 1381 | | | | - Tag 0x0015 (8 bytes, int16s[4]): | | | | 07a8: e2 05 4a 03 49 03 65 05 [..J.I.e.] | | | | WB_RGGBLevelsFlash = 1933 832 831 895 | | | | - Tag 0x0019 (8 bytes, int16s[4]): | | | | 07b0: 8d 07 40 03 3f 03 7f 03 [..@.?...] | | | | WB_RGGBLevelsCustom = 1722 832 831 989 | | | | - Tag 0x001d (8 bytes, int16s[4]): | | | | 07b8: ba 06 40 03 3f 03 dd 03 [..@.?...] | | | | WB_RGGBLevelsKelvin = 1722 832 831 988 | | | | - Tag 0x0021 (8 bytes, int16s[4]): | | | | 07c0: ba 06 40 03 3f 03 dc 03 [..@.?...] | | | | WB_RGGBBlackLevels = 124 123 124 123 | | | | - Tag 0x0025 (8 bytes, int16s[4]): | | | | 07c8: 7c 00 7b 00 7c 00 7b 00 [|.{.|.{.] | | | 20) ColorTemperature = 5200 | | | - Tag 0x00ae (2 bytes, int16u[1]): | | | 03a4: 50 14 [P.] | | | 21) ColorSpace = 1 | | | - Tag 0x00b4 (2 bytes, int16u[1]): | | | 03b0: 01 00 [..] | | | 22) CanonAFInfo (SubDirectory) --> | | | - Tag 0x0012 (48 bytes, int16u[24] read as undef[48]): | | | 07d0: 07 00 07 00 00 0c 00 08 00 0c 00 08 97 00 97 00 [................] | | | 07e0: f6 03 60 02 00 00 00 00 00 00 a0 fd 0a fc 00 00 [..`.............] | | | 07f0: 00 00 06 fe 00 00 fa 01 00 00 00 00 00 00 ff ff [................] | | | + [SerialData directory, 48 bytes] | | | | 0) NumAFPoints = 7 | | | | - Tag 0x0000 (2 bytes, int16u[1]): | | | | 07d0: 07 00 [..] | | | | 1) ValidAFPoints = 7 | | | | - Tag 0x0001 (2 bytes, int16u[1]): | | | | 07d2: 07 00 [..] | | | | 2) CanonImageWidth = 3072 | | | | - Tag 0x0002 (2 bytes, int16u[1]): | | | | 07d4: 00 0c [..] | | | | 3) CanonImageHeight = 2048 | | | | - Tag 0x0003 (2 bytes, int16u[1]): | | | | 07d6: 00 08 [..] | | | | 4) AFImageWidth = 3072 | | | | - Tag 0x0004 (2 bytes, int16u[1]): | | | | 07d8: 00 0c [..] | | | | 5) AFImageHeight = 2048 | | | | - Tag 0x0005 (2 bytes, int16u[1]): | | | | 07da: 00 08 [..] | | | | 6) AFAreaWidth = 151 | | | | - Tag 0x0006 (2 bytes, int16u[1]): | | | | 07dc: 97 00 [..] | | | | 7) AFAreaHeight = 151 | | | | - Tag 0x0007 (2 bytes, int16u[1]): | | | | 07de: 97 00 [..] | | | | 8) AFAreaXPositions = 1014 608 0 0 0 -608 -1014 | | | | - Tag 0x0008 (14 bytes, int16s[7]): | | | | 07e0: f6 03 60 02 00 00 00 00 00 00 a0 fd 0a fc [..`...........] | | | | 9) AFAreaYPositions = 0 0 -506 0 506 0 0 | | | | - Tag 0x0009 (14 bytes, int16s[7]): | | | | 07ee: 00 00 00 00 06 fe 00 00 fa 01 00 00 00 00 [..............] | | | | 10) AFPointsInFocus = 0 | | | | - Tag 0x000a (2 bytes, int16s[1]): | | | | 07fc: 00 00 [..] | | | 23) ThumbnailImageValidArea = 0 159 7 112 | | | - Tag 0x0013 (8 bytes, int16u[4]): | | | 0800: 00 00 9f 00 07 00 70 00 [......p.] | | | 24) Canon_0x00b5 = 10 3 1 2048 1360 | | | - Tag 0x00b5 (10 bytes, int16u[5]): | | | 0808: 0a 00 03 00 01 00 00 08 50 05 [........P.] | | | 25) Canon_0x0000 = 0 0 0 0 0 0 3072000 892 2048000 595 65540 262146 | | | - Tag 0x0000 (48 bytes, int32u[12]): | | | 0812: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................] | | | 0822: 00 00 00 00 00 00 00 00 00 e0 2e 00 7c 03 00 00 [............|...] | | | 0832: 00 40 1f 00 53 02 00 00 04 00 01 00 02 00 04 00 [.@..S...........] | | 16) UserComment = | | - Tag 0x9286 (264 bytes, undef[264]): | | 0842: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................] | | 0852: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................] | | 0862: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................] | | 0872: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................] | | 0882: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................] | | [snip 184 bytes] | | 17) FlashpixVersion = 0100 | | - Tag 0xa000 (4 bytes, undef[4]): | | 019e: 30 31 30 30 [0100] | | 18) ColorSpace = 1 | | - Tag 0xa001 (2 bytes, int16u[1]): | | 01aa: 01 00 [..] | | 19) ExifImageWidth = 160 | | - Tag 0xa002 (2 bytes, int16u[1]): | | 01b6: a0 00 [..] | | 20) ExifImageHeight = 120 | | - Tag 0xa003 (2 bytes, int16u[1]): | | 01c2: 78 00 [x.] | | 21) InteropOffset (SubDirectory) --> | | - Tag 0xa005 (4 bytes, int32u[1]): | | 01ce: 4e 09 00 00 [N...] | | + [InteropIFD directory with 4 entries] | | | 0) InteropIndex = THM | | | - Tag 0x0001 (4 bytes, string[4]): | | | 0964: 54 48 4d 00 [THM.] | | | 1) InteropVersion = 0100 | | | - Tag 0x0002 (4 bytes, undef[4]): | | | 0970: 30 31 30 30 [0100] | | | 2) RelatedImageWidth = 3072 | | | - Tag 0x1001 (2 bytes, int16u[1]): | | | 097c: 00 0c [..] | | | 3) RelatedImageHeight = 2048 | | | - Tag 0x1002 (2 bytes, int16u[1]): | | | 0988: 00 08 [..] | | 22) FocalPlaneXResolution = 3443.946188 (3072000/892) | | - Tag 0xa20e (8 bytes, rational64u[1]): | | 094a: 00 e0 2e 00 7c 03 00 00 [....|...] | | 23) FocalPlaneYResolution = 3442.016807 (2048000/595) | | - Tag 0xa20f (8 bytes, rational64u[1]): | | 0952: 00 40 1f 00 53 02 00 00 [.@..S...] | | 24) FocalPlaneResolutionUnit = 2 | | - Tag 0xa210 (2 bytes, int16u[1]): | | 01f2: 02 00 [..] | | 25) SensingMethod = 2 | | - Tag 0xa217 (2 bytes, int16u[1]): | | 01fe: 02 00 [..] | | 26) FileSource = 3 | | - Tag 0xa300 (1 bytes, undef[1]): | | 020a: 03 [.] | | 27) CustomRendered = 0 | | - Tag 0xa401 (2 bytes, int16u[1]): | | 0216: 00 00 [..] | | 28) ExposureMode = 1 | | - Tag 0xa402 (2 bytes, int16u[1]): | | 0222: 01 00 [..] | | 29) WhiteBalance = 0 | | - Tag 0xa403 (2 bytes, int16u[1]): | | 022e: 00 00 [..] | | 30) SceneCaptureType = 0 | | - Tag 0xa406 (2 bytes, int16u[1]): | | 023a: 00 00 [..] JPEG DQT (130 bytes): 0994: 00 14 10 10 19 12 19 27 17 17 27 32 26 1f 26 32 [.......'..'2&.&2] 09a4: 2e 26 26 26 26 2e 3e 35 35 35 35 35 3e 44 41 41 [.&&&&.>55555>DAA] 09b4: 41 41 41 41 44 44 44 44 44 44 44 44 44 44 44 44 [AAAADDDDDDDDDDDD] 09c4: 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 [DDDDDDDDDDDDDDDD] 09d4: 44 01 15 19 19 20 1c 20 26 18 18 26 36 26 20 26 [D.... . &..&6& &] 09e4: 36 44 36 2b 2b 36 44 44 44 42 35 42 44 44 44 44 [6D6++6DDDB5BDDDD] 09f4: 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 [DDDDDDDDDDDDDDDD] [snip 18 bytes] JPEG SOF0 (15 bytes): 0a1a: 08 00 08 00 08 03 01 22 00 02 11 01 03 11 01 [.......".......] ImageWidth = 8 ImageHeight = 8 EncodingProcess = 0 BitsPerSample = 8 ColorComponents = 3 JPEG DHT (73 bytes): 0a2d: 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 [................] 0a3d: 00 00 06 01 01 00 00 00 00 00 00 00 00 00 00 00 [................] 0a4d: 00 00 00 00 00 10 01 00 00 00 00 00 00 00 00 00 [................] 0a5d: 00 00 00 00 00 00 00 11 01 00 00 00 00 00 00 00 [................] 0a6d: 00 00 00 00 00 00 00 00 00 [.........] JPEG SOS JPEG EOI ������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_2.out���������������������������������������������������������������000644 �000765 �000024 �00000060710 12546457275 017356� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: ExifTool.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 25 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2014:09:23 09:15:01-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:37-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] Comment - Comment: © PhotoStudio Unicode comment;; [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 6895be53ef9a287520f400aa17242c09 [File, File, Image] Comment - Comment: a comment [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: A witty caption [EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Adobe Photoshop 7.0 [EXIF, IFD0, Time] 306 - Modify Date: 2004:02:26 09:36:46 [EXIF, IFD0, Author] 315 - Artist: Phil Harvey [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: Copyright 2004 Phil Harvey [EXIF, ExifIFD, Image] 33437 - F Number: 3.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 1.6 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/64 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 100 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 80 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3053 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3053 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 852 [EXIF, IFD1, Image] 514 - Thumbnail Length: 0 [JFIF, JFIF, Image] 0 - JFIF Version: 1.01 [JFIF, JFIF, Image] 2 - Resolution Unit: inches [JFIF, JFIF, Image] 3 - X Resolution: 144 [JFIF, JFIF, Image] 5 - Y Resolution: 144 [JFIF, JFIF, Preview] 16 - Thumbnail Image: (Binary data 1558 bytes) [APP8, SPIFF, Image] 0 - SPIFF Version: 1.2 [APP8, SPIFF, Image] 2 - Profile ID: Continuous-tone Base [APP8, SPIFF, Image] 3 - Color Components: 3 [APP8, SPIFF, Image] 6 - Image Height: 4500 [APP8, SPIFF, Image] 10 - Image Width: 3000 [APP8, SPIFF, Image] 14 - Color Space: YCbCr, ITU-R BT 709, video [APP8, SPIFF, Image] 15 - Bits Per Sample: 8 [APP8, SPIFF, Image] 16 - Compression: JPEG [APP8, SPIFF, Image] 17 - Resolution Unit: inches [APP8, SPIFF, Image] 18 - Y Resolution: 300 [APP8, SPIFF, Image] 22 - X Resolution: 300 [MakerNotes, CIFF, Image] 0 - File Format: JPEG (lossy) [MakerNotes, CIFF, Image] 1 - Target Compression Ratio: 2 [MakerNotes, CIFF, Image] 0 - Image Width: 512 [MakerNotes, CIFF, Image] 1 - Image Height: 384 [MakerNotes, CIFF, Image] 2 - Pixel Aspect Ratio: 1 [MakerNotes, CIFF, Image] 3 - Rotation: 0 [MakerNotes, CIFF, Image] 4 - Component Bit Depth: 8 [MakerNotes, CIFF, Image] 5 - Color Bit Depth: 24 [MakerNotes, CIFF, Image] 6 - Color BW: 1 [MakerNotes, CIFF, Camera] 4106 - Target Image Type: Real-world Subject [MakerNotes, CIFF, Camera] 6148 - Record ID: 0 [MakerNotes, CIFF, Image] 6167 - File Number: 45 [MakerNotes, CIFF, Time] 0 - Date/Time Original: 1998:05:01 21:33:18 [MakerNotes, CIFF, Time] 1 - Time Zone Code: 0 [MakerNotes, CIFF, Time] 2 - Time Zone Info: 0 [MakerNotes, CIFF, Camera] 2070 - Original File Name: C:\DC97\CTG_0000\AUT_0045.JPG [MakerNotes, CIFF, Camera] 2071 - Thumbnail File Name: C:\DC97\CTG_0000\THM_0045.JPG [MakerNotes, CIFF, Camera] 4112 - Shutter Release Method: Single Shot [MakerNotes, CIFF, Camera] 4113 - Shutter Release Timing: Priority on focus [MakerNotes, CIFF, Image] 0 - Flash Guide Number: 0 [MakerNotes, CIFF, Image] 1 - Flash Threshold: 0 [MakerNotes, CIFF, Image] 0 - Exposure Compensation: 1 [MakerNotes, CIFF, Image] 1 - Shutter Speed Value: 1/83 [MakerNotes, CIFF, Image] 2 - Aperture Value: 6.2 [MakerNotes, CIFF, Camera] 6151 - Target Distance Setting: 476 mm [MakerNotes, CIFF, Camera] 6164 - Measured EV: 16.25 [MakerNotes, CIFF, Camera] 2053 - Canon File Description: [MakerNotes, CIFF, Camera] 2069 - Canon Image Type: AUT:Full automatic mode [MakerNotes, CIFF, Camera] 2064 - Owner Name: [MakerNotes, CIFF, Camera] 0 - Make: Canon [MakerNotes, CIFF, Camera] 6 - Camera Model Name: Canon PowerShot A5 [MakerNotes, CIFF, Camera] 4124 - Base ISO: 100 [MakerNotes, CIFF, Camera] 2061 - ROM Operation Mode: USA [MakerNotes, CIFF, Camera] 2059 - Canon Firmware Version: Firmware Version 01.00 [MakerNotes, CIFF, Camera] 1 - Free Bytes: (Binary data 12 bytes) [MakerNotes, CIFF, Image] 0 - Focal Type: Fixed [MakerNotes, CIFF, Image] 1 - Focal Length: 5 mm [MakerNotes, CIFF, Image] 2 - Focal Plane X Size: 5.05 mm [MakerNotes, CIFF, Image] 3 - Focal Plane Y Size: 3.71 mm [MakerNotes, Qualcomm, Camera] aec_current_sensor_luma - AEC Current Sensor Luma: 22 [MakerNotes, Qualcomm, Camera] af_position - AF Position: 26 [MakerNotes, Qualcomm, Camera] aec_current_exp_index - AEC Current Exp Index: 308 [MakerNotes, Qualcomm, Camera] awb_sample_decision - AWB Sample Decision: 7 [MakerNotes, Qualcomm, Camera] asf5_enable - ASF5 Enable: 1 [MakerNotes, Qualcomm, Camera] asf5_filter_mode - ASF5 Filter Mode: 0 [MakerNotes, Qualcomm, Camera] asf5_exposure_index_1 - ASF5 Exposure Index 1: 180 [MakerNotes, Qualcomm, Camera] asf5_exposure_index_2 - ASF5 Exposure Index 2: 270 [MakerNotes, Qualcomm, Camera] asf5_max_exposure_index - ASF5 Max Exposure Index: 290 [MakerNotes, Samsung, Other] 0x0100-name - Embedded Audio File Name: SoundShot_000 [MakerNotes, Samsung, Other] 0x0100 - Embedded Audio File: (Binary data 16 bytes) [APP0, AVI1, Image] 0 - Interleaved Field: Not Interleaved [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 4.73 [XMP, XMP-rdf, Document] about - About: uuid:80056b68-1045-fa97-3401-6f4ed84cd53d [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: UTF-16 (big-endian) encoded XMP [XMP, XMP-dc, Author] rights - Rights: Copyright 2004 Phil Harvey [XMP, XMP-dc, Image] subject - Subject: ExifTool, Test, XMP [XMP, XMP-dc, Image] title - Title: Test IPTC picture [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: My Position [XMP, XMP-photoshop, Author] CaptionWriter - Caption Writer: I wrote it [XMP, XMP-photoshop, Image] Category - Category: 1 [XMP, XMP-photoshop, Location] City - City: Kingston [XMP, XMP-photoshop, Location] Country - Country: Canada [XMP, XMP-photoshop, Author] Credit - Credit: My Credit [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2004:02:26 [XMP, XMP-photoshop, Image] Headline - Headline: No headline [XMP, XMP-photoshop, Image] Instructions - Instructions: What instructions [XMP, XMP-photoshop, Author] Source - Source: I'm the source [XMP, XMP-photoshop, Location] State - State: Ont [XMP, XMP-photoshop, Image] SupplementalCategories - Supplemental Categories: amazing, image, utilities [XMP, XMP-photoshop, Image] TransmissionReference - Transmission Reference: What is a transmission reference? [XMP, XMP-photoshop, Image] Urgency - Urgency: 8 (least urgent) [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: My Job [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:photoshop:4cc7b857-69d0-11d8-8ac4-bb59c92f0d9a [XMP, XMP-xmpRights, Author] Marked - Marked: False [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ [ICC_Profile, ICC-header, Image] 4 - Profile CMM Type: ADBE [ICC_Profile, ICC-header, Image] 8 - Profile Version: 2.1.0 [ICC_Profile, ICC-header, Image] 12 - Profile Class: Display Device Profile [ICC_Profile, ICC-header, Image] 16 - Color Space Data: RGB [ICC_Profile, ICC-header, Image] 20 - Profile Connection Space: XYZ [ICC_Profile, ICC-header, Time] 24 - Profile Date Time: 1999:06:03 00:00:00 [ICC_Profile, ICC-header, Image] 36 - Profile File Signature: acsp [ICC_Profile, ICC-header, Image] 40 - Primary Platform: Apple Computer Inc. [ICC_Profile, ICC-header, Image] 44 - CMM Flags: Not Embedded, Independent [ICC_Profile, ICC-header, Image] 48 - Device Manufacturer: none [ICC_Profile, ICC-header, Image] 52 - Device Model: [ICC_Profile, ICC-header, Image] 56 - Device Attributes: Reflective, Glossy, Positive, Color [ICC_Profile, ICC-header, Image] 64 - Rendering Intent: Perceptual [ICC_Profile, ICC-header, Image] 68 - Connection Space Illuminant: 0.9642 1 0.82491 [ICC_Profile, ICC-header, Image] 80 - Profile Creator: ADBE [ICC_Profile, ICC-header, Image] 84 - Profile ID: 0 [ICC_Profile, ICC_Profile, Image] cprt - Profile Copyright: Copyright 1999 Adobe Systems Incorporated [ICC_Profile, ICC_Profile, Image] desc - Profile Description: Adobe RGB (1998) [ICC_Profile, ICC_Profile, Image] wtpt - Media White Point: 0.95045 1 1.08905 [ICC_Profile, ICC_Profile, Image] bkpt - Media Black Point: 0 0 0 [ICC_Profile, ICC_Profile, Image] rTRC - Red Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] gTRC - Green Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] bTRC - Blue Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] rXYZ - Red Matrix Column: 0.60974 0.31111 0.01947 [ICC_Profile, ICC_Profile, Image] gXYZ - Green Matrix Column: 0.20528 0.62567 0.06087 [ICC_Profile, ICC_Profile, Image] bXYZ - Blue Matrix Column: 0.14919 0.06322 0.74457 [FlashPix, FlashPix, Other] 1 - Code Page: Unicode UTF-16, little endian [FlashPix, FlashPix, Other] 268435456 - Used Extension Numbers: 1 [FlashPix, FlashPix, Other] 1 - Extension Name: Screen nail [FlashPix, FlashPix, Other] 2 - Extension Class ID: 10000230-6FC0-11D0-BD01-00609719A180 [FlashPix, FlashPix, Other] 3 - Extension Persistence: Invalidated By Modification [FlashPix, FlashPix, Time] 4 - Extension Create Date: 1999:05:14 21:47:25 [FlashPix, FlashPix, Time] 5 - Extension Modify Date: 1999:05:14 21:47:25 [FlashPix, FlashPix, Other] 6 - Creating Application: Digita [FlashPix, FlashPix, Other] 7 - Extension Description: Presized image for LCD display [FlashPix, FlashPix, Other] 4096 - Storage-Stream Pathname: /.Screen Nail_bd0100609719a180 [FlashPix, FlashPix, Other] Screen Nail - Screen Nail: (Binary data 5917 bytes) [MPF, MPF0, Image] 45056 - MPF Version: 0100 [MPF, MPF0, Image] 45057 - Number Of Images: 2 [MPF, MPImage1, Image] 0.1 - MP Image Flags: Dependent parent image [MPF, MPImage1, Image] 0.2 - MP Image Format: JPEG [MPF, MPImage1, Image] 0.3 - MP Image Type: Baseline MP Primary Image [MPF, MPImage1, Image] 4 - MP Image Length: 5959981 [MPF, MPImage1, Image] 8 - MP Image Start: 0 [MPF, MPImage1, Image] 12 - Dependent Image 1 Entry Number: 2 [MPF, MPImage1, Image] 14 - Dependent Image 2 Entry Number: 0 [MPF, MPImage2, Image] 0.1 - MP Image Flags: Dependent child image [MPF, MPImage2, Image] 0.2 - MP Image Format: JPEG [MPF, MPImage2, Image] 0.3 - MP Image Type: Large Thumbnail (full HD equivalent) [MPF, MPImage2, Image] 4 - MP Image Length: 1039273 [MPF, MPImage2, Image] 8 - MP Image Start: 5945405 [MPF, MPImage2, Image] 12 - Dependent Image 1 Entry Number: 0 [MPF, MPImage2, Image] 14 - Dependent Image 2 Entry Number: 0 [Meta, MetaIFD, Image] 50000 - Film Product Code: 37 [Meta, MetaIFD, Image] 50001 - Image Source EK: 1 [Meta, MetaIFD, Image] 50002 - Capture Conditions PAR: 1 [Meta, MetaIFD, Image] 50009 - Frame Number: 0 [Meta, MetaIFD, Image] 50010 - Film Category: 2 [Meta, MetaIFD, Image] 50011 - Film Gencode: 2 [Meta, MetaIFD, Image] 50012 - Model And Version: Version 9 [Meta, MetaIFD, Image] 50013 - Film Size: 1 [Meta, MetaIFD, Image] 50014 - SBA RGB Shifts: 0 0 0 [Meta, MetaIFD, Image] 50015 - SBA Input Image Colorspace: 3 [Meta, MetaIFD, Image] 50016 - SBA Input Image Bit Depth: 12 12 12 [Meta, MetaIFD, Image] 50017 - SBA Exposure Record: (Binary data 368 bytes) [Meta, MetaIFD, Image] 50018 - User Adj SBA RGB Shifts: (Binary data 5 bytes) [Meta, MetaIFD, Image] 50019 - Image Rotation Status: 0 [Meta, MetaIFD, Image] 50020 - Roll Guid Elements: 00000000000000000000000000000000 [Meta, MetaIFD, Image] 50021 - Metadata Number: 0100 [APP5, RMETA, Image] Sign type - Sign Type: Information [APP5, RMETA, Image] Location - Location: Roundabout [APP5, RMETA, Image] Lit - Lit: No [APP5, RMETA, Image] Condition - Condition: Good [APP5, RMETA, Image] Azimuth - Azimuth: E [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [APP6, NITF, Image] 0 - NITF Version: 2.00 [APP6, NITF, Image] 2 - Image Format: IMode B [APP6, NITF, Image] 3 - Blocks Per Row: 1 [APP6, NITF, Image] 5 - Blocks Per Column: 1 [APP6, NITF, Image] 7 - Image Color: Monochrome [APP6, NITF, Image] 8 - Bit Depth: 8 [APP6, NITF, Image] 9 - Image Class: General Purpose [APP6, NITF, Image] 10 - JPEG Process: Baseline sequential DCT, Huffman coding, 8-bit samples [APP6, NITF, Image] 11 - Quality: 1 [APP6, NITF, Image] 12 - Stream Color: Monochrome [APP6, NITF, Image] 13 - Stream Bit Depth: 8 [APP6, NITF, Image] 14 - Flags: 0x1010000 [XML, MediaJukebox, Image] Tool_Name - Tool Name: Media Center [XML, MediaJukebox, Image] Tool_Version - Tool Version: 19.0.67 [XML, MediaJukebox, Image] People - People: Santa [XML, MediaJukebox, Image] Places - Places: Jamaica [XML, MediaJukebox, Time] Date - Date: 2013:09:01 20:12:19 [XML, MediaJukebox, Image] Album - Album: 2013-09-01 [XML, MediaJukebox, Image] Name - Name: Glass home at night [APP11, JPEG-HDR, Image] ver - JPEG-HDR Version: 11 [APP11, JPEG-HDR, Image] ln0 - Ln0: 0.122262 [APP11, JPEG-HDR, Image] ln1 - Ln1: 2.634655 [APP11, JPEG-HDR, Image] s2n - S2n: 2.269635e+03 [APP11, JPEG-HDR, Image] alp - Alpha: 1.000000 [APP11, JPEG-HDR, Image] bet - Beta: 1.000000 [APP11, JPEG-HDR, Image] cor - Correction Method: 0 [APP11, JPEG-HDR, Preview] RatioImage - Ratio Image: (Binary data 19 bytes) [APP12, PictureInfo, Time] TimeDate - Date/Time Original: 1998:12:31 15:17:20 [APP12, PictureInfo, Image] Shutter - Exposure Time: 1/155 [APP12, PictureInfo, Image] Flash - Flash: Off [APP12, PictureInfo, Image] Resolution - Resolution: 5 [APP12, PictureInfo, Image] Protect - Protect: 0 [APP12, PictureInfo, Image] ContTake - Cont Take: 0 [APP12, PictureInfo, Image] ImageSize - Image Size: 1280x960 [APP12, PictureInfo, Image] ColorMode - Color Mode: 1 [APP12, PictureInfo, Image] FNumber - F Number: 11.0 [APP12, PictureInfo, Image] Zoom - Zoom: 2.1 [APP12, PictureInfo, Image] Macro - Macro: Off [APP12, PictureInfo, Image] LightS - Light S: 0 [APP12, PictureInfo, Image] ExpBias - Exposure Compensation: +2.0 [APP12, PictureInfo, Camera] Type - Camera Type: SR84 [APP12, PictureInfo, Camera] Serial# - Serial Number: #00000001 [APP12, PictureInfo, Camera] Version - Version: v84-71 [APP12, PictureInfo, Camera] ID - ID: AGFA DIGITAL CAMERA [APP12, PictureInfo, Image] PicLen - Pic Len: 561039 [APP12, PictureInfo, Image] ThmLen - Thm Len: 3802 [APP12, PictureInfo, Image] Q - Tag Q: 96 [APP12, PictureInfo, Image] R - Tag R: 293 [APP12, PictureInfo, Image] B - Tag B: 332 [APP12, PictureInfo, Image] s0 - S0: 1e8,0,11b0,6f72,15cf,4225,4225,1050000,a1e0004,0,2f0030d,2f102c5,2880090,0,0 [APP12, PictureInfo, Image] T0 - T0: 11b15600,1290000,e00c0f,2,0,0 [Ducky, Ducky, Image] 1 - Quality: 84% [Ducky, Ducky, Author] 3 - Copyright: Copyright 2004 Phil Harvey [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 120 - Caption-Abstract: A witty caption [IPTC, IPTC, Author] 122 - Writer-Editor: I wrote it [IPTC, IPTC, Other] 105 - Headline: No headline [IPTC, IPTC, Other] 40 - Special Instructions: What instructions [IPTC, IPTC, Author] 80 - By-line: Phil Harvey [IPTC, IPTC, Author] 85 - By-line Title: My Position [IPTC, IPTC, Author] 110 - Credit: My Credit [IPTC, IPTC, Other] 5 - Object Name: Test IPTC picture [IPTC, IPTC, Time] 55 - Date Created: 2004:02:26 [IPTC, IPTC, Location] 90 - City: Kingston [IPTC, IPTC, Location] 95 - Province-State: Ont [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC, Other] 103 - Original Transmission Reference: What is a transmission reference [IPTC, IPTC, Other] 15 - Category: 1 [IPTC, IPTC, Other] 20 - Supplemental Categories: amazing, image, utilities [IPTC, IPTC, Author] 116 - Copyright Notice: Copyright 2004 Phil Harvey [IPTC, IPTC, Other] 10 - Urgency: 8 (least urgent) [IPTC, IPTC, Author] 115 - Source: I'm the source [IPTC, IPTC, Other] 25 - Keywords: jambalaya [IPTC, IPTC2, Other] 0 - Application Record Version: 2 [IPTC, IPTC3, Other] 0 - Application Record Version: 2 [IPTC, IPTC3, Other] 15 - Category: p [IPTC, IPTC3, Time] 55 - Date Created: 2005:12:23 [IPTC, IPTC3, Other] 5 - Object Name: object name [IPTC, IPTC3, Other] 10 - Urgency: 2 [IPTC, IPTC3, Other] 20 - Supplemental Categories: supp cat [IPTC, IPTC3, Other] 40 - Special Instructions: special instructions [IPTC, IPTC3, Author] 80 - By-line: byline [IPTC, IPTC3, Author] 85 - By-line Title: byline title [IPTC, IPTC3, Location] 90 - City: city [IPTC, IPTC3, Location] 101 - Country-Primary Location Name: country name [IPTC, IPTC3, Other] 103 - Original Transmission Reference: otr [IPTC, IPTC3, Other] 105 - Headline: headline [IPTC, IPTC3, Author] 110 - Credit: credit [IPTC, IPTC3, Author] 115 - Source: source [IPTC, IPTC3, Author] 116 - Copyright Notice: copy freely [IPTC, IPTC3, Other] 120 - Caption-Abstract: ExifTool AFCP test [IPTC, IPTC3, Author] 122 - Writer-Editor: caption writer [IPTC, IPTC3, Location] 95 - Province-State: state [IPTC, IPTC3, Other] 25 - Keywords: jambalaya [Photoshop, Photoshop, Image] 1061 - IPTC Digest: 05ad1770b1a95f1f9788ac995fa647da [Photoshop, Photoshop, Image] 0 - X Resolution: 72 [Photoshop, Photoshop, Image] 2 - Displayed Units X: inches [Photoshop, Photoshop, Image] 4 - Y Resolution: 72 [Photoshop, Photoshop, Image] 6 - Displayed Units Y: inches [Photoshop, Photoshop, Image] 1037 - Global Angle: 30 [Photoshop, Photoshop, Image] 1049 - Global Altitude: 30 [Photoshop, Photoshop, Author] 1034 - Copyright Flag: False [Photoshop, Photoshop, Author] 1035 - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [Photoshop, Photoshop, Image] 0 - Photoshop Quality: 7 [Photoshop, Photoshop, Image] 1 - Photoshop Format: Standard [Photoshop, Photoshop, Image] 2 - Progressive Scans: 3 Scans [APP13, AdobeCM, Image] 0 - Adobe CM Type: 3 [APP14, Adobe, Image] 0 - DCT Encode Version: 100 [APP14, Adobe, Image] 1 - APP14 Flags 0: (none) [APP14, Adobe, Image] 2 - APP14 Flags 1: (none) [APP14, Adobe, Image] 3 - Color Transform: YCbCr [APP15, GraphConv, Image] Q - Quality: 70 [MIE, MIE-Doc, Author] Copyright - Copyright: © 2006 Phil Harvey [MIE, MIE-Main, Other] zmie - Trailer Signature: [PhotoMechanic, PhotoMechanic, Image] 221 - Tagged: Yes [PhotoMechanic, PhotoMechanic, Image] 222 - Color Class: 6 (Typical alt) [PhotoMechanic, PhotoMechanic, Image] 216 - Rotation: 180 [PhotoMechanic, PhotoMechanic, Image] 217 - Crop Left: 438 [PhotoMechanic, PhotoMechanic, Image] 218 - Crop Top: 618 [PhotoMechanic, PhotoMechanic, Image] 219 - Crop Right: 890 [PhotoMechanic, PhotoMechanic, Image] 220 - Crop Bottom: 1072 [CanonVRD, CanonVRD, Image] 2 - VRD Version: 1.0.0 [CanonVRD, CanonVRD, Image] 6 - WB Adj RGGB Levels: 0 0 0 0 [CanonVRD, CanonVRD, Image] 24 - White Balance Adj: Shot Settings [CanonVRD, CanonVRD, Image] 26 - WB Adj Color Temp: 5600 [CanonVRD, CanonVRD, Image] 36 - WB Fine Tune Active: No [CanonVRD, CanonVRD, Image] 40 - WB Fine Tune Saturation: 0 [CanonVRD, CanonVRD, Image] 44 - WB Fine Tune Tone: 0 [CanonVRD, CanonVRD, Image] 46 - Raw Color Adj: Shot Settings [CanonVRD, CanonVRD, Image] 48 - Raw Custom Saturation: 0 [CanonVRD, CanonVRD, Image] 52 - Raw Custom Tone: 0 [CanonVRD, CanonVRD, Image] 56 - Raw Brightness Adj: 0.00 [CanonVRD, CanonVRD, Image] 60 - Tone Curve Property: Shot Settings [CanonVRD, CanonVRD, Image] 122 - Dynamic Range Min: 0 [CanonVRD, CanonVRD, Image] 124 - Dynamic Range Max: 4095 [CanonVRD, CanonVRD, Image] 272 - Tone Curve Active: No [CanonVRD, CanonVRD, Image] 275 - Tone Curve Mode: RGB [CanonVRD, CanonVRD, Image] 276 - Brightness Adj: 0 [CanonVRD, CanonVRD, Image] 277 - Contrast Adj: 0 [CanonVRD, CanonVRD, Image] 278 - Saturation Adj: 100 [CanonVRD, CanonVRD, Image] 286 - Color Tone Adj: 0 [CanonVRD, CanonVRD, Image] 294 - Luminance Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 336 - Luminance Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 345 - Tone Curve Interpolation: Curve [CanonVRD, CanonVRD, Image] 352 - Red Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 394 - Red Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 410 - Green Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 452 - Green Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 468 - Blue Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 510 - Blue Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 526 - RGB Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 568 - RGB Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 580 - Crop Active: No [CanonVRD, CanonVRD, Image] 582 - Crop Left: 0 [CanonVRD, CanonVRD, Image] 584 - Crop Top: 0 [CanonVRD, CanonVRD, Image] 586 - Crop Width: 0 [CanonVRD, CanonVRD, Image] 588 - Crop Height: 0 [CanonVRD, CanonVRD, Image] 602 - Sharpness Adj: 0 [CanonVRD, CanonVRD, Image] 608 - Crop Aspect Ratio: Free [CanonVRD, CanonVRD, Image] 610 - Constrained Crop Width: 0 [CanonVRD, CanonVRD, Image] 614 - Constrained Crop Height: 0 [CanonVRD, CanonVRD, Image] 618 - Check Mark: Clear [CanonVRD, CanonVRD, Image] 622 - Rotation: 90 [CanonVRD, CanonVRD, Image] 624 - Work Color Space: sRGB [FotoStation, FotoStation, Image] 0 - Original Image Width: 16 [FotoStation, FotoStation, Image] 1 - Original Image Height: 16 [FotoStation, FotoStation, Image] 2 - Color Planes: 3 [FotoStation, FotoStation, Image] 3 - XY Resolution: 9 [FotoStation, FotoStation, Image] 4 - Rotation: 0 [FotoStation, FotoStation, Image] 6 - Crop Left: 24.557% [FotoStation, FotoStation, Image] 7 - Crop Top: 21.25% [FotoStation, FotoStation, Image] 8 - Crop Right: 30.676% [FotoStation, FotoStation, Image] 9 - Crop Bottom: 86.25% [FotoStation, FotoStation, Image] 11 - Crop Rotation: 0 [Composite, Composite, Image] Aperture - Aperture: 3.5 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 1039273 bytes) [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 5777 bytes) [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/155 [Composite, Composite, Image] LightValue - Light Value: 10.9 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 6.9 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.004 mm [Composite, Composite, Image] FOV - Field Of View: 47.0 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 6.0 mm (35 mm equivalent: 41.4 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 2.36 m ��������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_20.out��������������������������������������������������������������000644 �000765 �000024 �00000000064 10401404525 017404� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, ExifIFD, Camera] 41987 - White Balance: Auto ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_21.out��������������������������������������������������������������000644 �000765 �000024 �00000000126 11141337010 017400� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ICC_Profile, ICC_Profile, Image] ICC_Profile - ICC Profile: (Binary data 3144 bytes) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_22.out��������������������������������������������������������������000644 �000765 �000024 �00000000045 10757063721 017422� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������FinePix2400Zoom - Canon PowerShot A5 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_23.out��������������������������������������������������������������000644 �000765 �000024 �00000000454 11102376744 017424� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[IPTC, IPTC3, Author] 80 - By-line: byline [IPTC, IPTC3, Author] 85 - By-line Title: byline title [IPTC, IPTC3, Author] 110 - Credit: credit [IPTC, IPTC3, Author] 115 - Source: source [IPTC, IPTC3, Author] 116 - Copyright Notice: copy freely [IPTC, IPTC3, Author] 122 - Writer-Editor: caption writer ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_24.out��������������������������������������������������������������000644 �000765 �000024 �00000000213 11262653065 017417� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, ExifIFD, Camera] 37385 - Flash: 0 [EXIF, ExifIFD, Camera] 37386 - Focal Length: 34 [EXIF, ExifIFD, Camera] 41987 - White Balance: 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_25.out��������������������������������������������������������������000644 �000765 �000024 �00000001560 12266237652 017433� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Time] 306 - Modify Date: 2004:01:26 09:36:46 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:04:18 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:04:18 18:36:41 [MakerNotes, CIFF, Time] 0 - Date/Time Original: 1998:03:31 21:33:18 [MakerNotes, CIFF, Time] 1 - Time Zone Code: 0 [MakerNotes, CIFF, Time] 2 - Time Zone Info: 0 [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2004:01:26 [ICC_Profile, ICC-header, Time] 24 - Profile Date Time: 1999:05:03 00:00:00 [FlashPix, FlashPix, Time] 4 - Extension Create Date: 1999:05:14 21:47:25 [FlashPix, FlashPix, Time] 5 - Extension Modify Date: 1999:05:14 21:47:25 [XML, MediaJukebox, Time] Date - Date: 2013:08:01 20:12:19 [APP12, PictureInfo, Time] TimeDate - Date/Time Original: 1998:11:30 15:17:20 [IPTC, IPTC, Time] 55 - Date Created: 2004:02:26 [IPTC, IPTC3, Time] 55 - Date Created: 2005:12:23 ������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_26.out��������������������������������������������������������������000644 �000765 �000024 �00000001314 12072610022 017406� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.13 [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [EXIF, ExifIFD, Image] 33434 - Exposure Time: 4 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 160 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 120 [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [MakerNotes, Canon, Camera] 11 - Easy Mode: Manual [MakerNotes, Canon, Image] 6 - Exposure Compensation: 0 [MakerNotes, Canon, Image] 22 - Exposure Time: 128 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_27.out��������������������������������������������������������������000644 �000765 �000024 �00000000375 12403572113 017423� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-dc, Image] subject - Subject: ExifTool [XMP, XMP-photoshop, Image] SupplementalCategories - Supplemental Categories: amazing [IPTC, IPTC, Other] 20 - Supplemental Categories: amazing [IPTC, IPTC3, Other] 20 - Supplemental Categories: supp cat �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_28.out��������������������������������������������������������������000644 �000765 �000024 �00000001357 12554155026 017434� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.99 [File, System, Image] FileName - File Name: ExifTool.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 25 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2014:09:23 09:15:01-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:07:23 08:10:43-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:06:26 10:50:09-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_29.out��������������������������������������������������������������000644 �000765 �000024 �00000060564 12634264214 017441� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileName - File Name: ExifTool.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: ##_kB [File, System, Time] FileModifyDate - File Modification Date/Time: ####:##:##_##:##:##-##:## [File, System, Time] FileAccessDate - File Access Date/Time: ####:##:##_##:##:##-##:## [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: ####:##:##_##:##:##-##:## [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian_(Intel,_II) [File, File, Image] Comment - Comment: ©_PhotoStudio_Unicode_comment;; [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: ####be##ef#a######f###aa#####c## [File, File, Image] Comment - Comment: a_comment [File, File, Image] ImageWidth - Image Width: # [File, File, Image] ImageHeight - Image Height: # [File, File, Image] EncodingProcess - Encoding Process: Baseline_DCT,_Huffman_coding [File, File, Image] BitsPerSample - Bits Per Sample: # [File, File, Image] ColorComponents - Color Components: # [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr#:#:#_(#_#) [EXIF, IFD0, Image] 270 - Image Description: A_witty_caption [EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePix####Zoom [EXIF, IFD0, Image] 274 - Orientation: Horizontal_(normal) [EXIF, IFD0, Image] 282 - X Resolution: ## [EXIF, IFD0, Image] 283 - Y Resolution: ## [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Adobe_Photoshop_#.# [EXIF, IFD0, Time] 306 - Modify Date: ####:##:##_##:##:## [EXIF, IFD0, Author] 315 - Artist: Phil_Harvey [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: Copyright_####_Phil_Harvey [EXIF, ExifIFD, Image] 33437 - F Number: #.# [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program_AE [EXIF, ExifIFD, Image] 34855 - ISO: ### [EXIF, ExifIFD, Image] 36864 - Exif Version: #### [EXIF, ExifIFD, Time] 36867 - Date/Time Original: ####:##:##_##:##:## [EXIF, ExifIFD, Time] 36868 - Create Date: ####:##:##_##:##:## [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y,_Cb,_Cr,_- [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: #.# [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: #/## [EXIF, ExifIFD, Image] 37378 - Aperture Value: #.# [EXIF, ExifIFD, Image] 37379 - Brightness Value: # [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: # [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: #.# [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: #.#_mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: #### [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: ### [EXIF, ExifIFD, Image] 40963 - Exif Image Height: ## [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: #### [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: #### [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip_color_area [EXIF, ExifIFD, Image] 41728 - File Source: Digital_Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly_photographed [EXIF, IFD1, Image] 259 - Compression: JPEG_(old-style) [EXIF, IFD1, Image] 282 - X Resolution: ## [EXIF, IFD1, Image] 283 - Y Resolution: ## [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: ### [EXIF, IFD1, Image] 514 - Thumbnail Length: # [JFIF, JFIF, Image] 0 - JFIF Version: #.## [JFIF, JFIF, Image] 2 - Resolution Unit: inches [JFIF, JFIF, Image] 3 - X Resolution: ### [JFIF, JFIF, Image] 5 - Y Resolution: ### [JFIF, JFIF, Preview] 16 - Thumbnail Image: (Binary data 1558 bytes) [APP8, SPIFF, Image] 0 - SPIFF Version: #.# [APP8, SPIFF, Image] 2 - Profile ID: Continuous-tone_Base [APP8, SPIFF, Image] 3 - Color Components: # [APP8, SPIFF, Image] 6 - Image Height: #### [APP8, SPIFF, Image] 10 - Image Width: #### [APP8, SPIFF, Image] 14 - Color Space: YCbCr,_ITU-R_BT_###,_video [APP8, SPIFF, Image] 15 - Bits Per Sample: # [APP8, SPIFF, Image] 16 - Compression: JPEG [APP8, SPIFF, Image] 17 - Resolution Unit: inches [APP8, SPIFF, Image] 18 - Y Resolution: ### [APP8, SPIFF, Image] 22 - X Resolution: ### [MakerNotes, CIFF, Image] 0 - File Format: JPEG_(lossy) [MakerNotes, CIFF, Image] 1 - Target Compression Ratio: # [MakerNotes, CIFF, Image] 0 - Image Width: ### [MakerNotes, CIFF, Image] 1 - Image Height: ### [MakerNotes, CIFF, Image] 2 - Pixel Aspect Ratio: # [MakerNotes, CIFF, Image] 3 - Rotation: # [MakerNotes, CIFF, Image] 4 - Component Bit Depth: # [MakerNotes, CIFF, Image] 5 - Color Bit Depth: ## [MakerNotes, CIFF, Image] 6 - Color BW: # [MakerNotes, CIFF, Camera] 4106 - Target Image Type: Real-world_Subject [MakerNotes, CIFF, Camera] 6148 - Record ID: # [MakerNotes, CIFF, Image] 6167 - File Number: ## [MakerNotes, CIFF, Time] 0 - Date/Time Original: ####:##:##_##:##:## [MakerNotes, CIFF, Time] 1 - Time Zone Code: # [MakerNotes, CIFF, Time] 2 - Time Zone Info: # [MakerNotes, CIFF, Camera] 2070 - Original File Name: C:\DC##\CTG_####\AUT_####.JPG [MakerNotes, CIFF, Camera] 2071 - Thumbnail File Name: C:\DC##\CTG_####\THM_####.JPG [MakerNotes, CIFF, Camera] 4112 - Shutter Release Method: Single_Shot [MakerNotes, CIFF, Camera] 4113 - Shutter Release Timing: Priority_on_focus [MakerNotes, CIFF, Image] 0 - Flash Guide Number: # [MakerNotes, CIFF, Image] 1 - Flash Threshold: # [MakerNotes, CIFF, Image] 0 - Exposure Compensation: # [MakerNotes, CIFF, Image] 1 - Shutter Speed Value: #/## [MakerNotes, CIFF, Image] 2 - Aperture Value: #.# [MakerNotes, CIFF, Camera] 6151 - Target Distance Setting: ###_mm [MakerNotes, CIFF, Camera] 6164 - Measured EV: ##.## [MakerNotes, CIFF, Camera] 2053 - Canon File Description: [MakerNotes, CIFF, Camera] 2069 - Canon Image Type: AUT:Full_automatic_mode [MakerNotes, CIFF, Camera] 2064 - Owner Name: [MakerNotes, CIFF, Camera] 0 - Make: Canon [MakerNotes, CIFF, Camera] 6 - Camera Model Name: Canon_PowerShot_A# [MakerNotes, CIFF, Camera] 4124 - Base ISO: ### [MakerNotes, CIFF, Camera] 2061 - ROM Operation Mode: USA [MakerNotes, CIFF, Camera] 2059 - Canon Firmware Version: Firmware_Version_##.## [MakerNotes, CIFF, Camera] 1 - Free Bytes: (Binary data 12 bytes) [MakerNotes, CIFF, Image] 0 - Focal Type: Fixed [MakerNotes, CIFF, Image] 1 - Focal Length: #_mm [MakerNotes, CIFF, Image] 2 - Focal Plane X Size: #.##_mm [MakerNotes, CIFF, Image] 3 - Focal Plane Y Size: #.##_mm [MakerNotes, Qualcomm, Camera] aec_current_sensor_luma - AEC Current Sensor Luma: ## [MakerNotes, Qualcomm, Camera] af_position - AF Position: ## [MakerNotes, Qualcomm, Camera] aec_current_exp_index - AEC Current Exp Index: ### [MakerNotes, Qualcomm, Camera] awb_sample_decision - AWB Sample Decision: # [MakerNotes, Qualcomm, Camera] asf5_enable - ASF5 Enable: # [MakerNotes, Qualcomm, Camera] asf5_filter_mode - ASF5 Filter Mode: # [MakerNotes, Qualcomm, Camera] asf5_exposure_index_1 - ASF5 Exposure Index 1: ### [MakerNotes, Qualcomm, Camera] asf5_exposure_index_2 - ASF5 Exposure Index 2: ### [MakerNotes, Qualcomm, Camera] asf5_max_exposure_index - ASF5 Max Exposure Index: ### [MakerNotes, Samsung, Other] 0x0100-name - Embedded Audio File Name: SoundShot_### [MakerNotes, Samsung, Other] 0x0100 - Embedded Audio File: (Binary data 16 bytes) [APP0, AVI1, Image] 0 - Interleaved Field: Not_Interleaved [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool_#.## [XMP, XMP-rdf, Document] about - About: uuid:#####b##-####-fa##-####-#f#ed##cd##d [XMP, XMP-dc, Author] creator - Creator: Phil_Harvey [XMP, XMP-dc, Image] description - Description: UTF-##_(big-endian)_encoded_XMP [XMP, XMP-dc, Author] rights - Rights: Copyright_####_Phil_Harvey [XMP, XMP-dc, Image] subject - Subject: ExifTool, Test, XMP [XMP, XMP-dc, Image] title - Title: Test_IPTC_picture [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: My_Position [XMP, XMP-photoshop, Author] CaptionWriter - Caption Writer: I_wrote_it [XMP, XMP-photoshop, Image] Category - Category: # [XMP, XMP-photoshop, Location] City - City: Kingston [XMP, XMP-photoshop, Location] Country - Country: Canada [XMP, XMP-photoshop, Author] Credit - Credit: My_Credit [XMP, XMP-photoshop, Time] DateCreated - Date Created: ####:##:## [XMP, XMP-photoshop, Image] Headline - Headline: No_headline [XMP, XMP-photoshop, Image] Instructions - Instructions: What_instructions [XMP, XMP-photoshop, Author] Source - Source: I'm_the_source [XMP, XMP-photoshop, Location] State - State: Ont [XMP, XMP-photoshop, Image] SupplementalCategories - Supplemental Categories: amazing, image, utilities [XMP, XMP-photoshop, Image] TransmissionReference - Transmission Reference: What_is_a_transmission_reference? [XMP, XMP-photoshop, Image] Urgency - Urgency: #_(least_urgent) [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: My_Job [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:photoshop:#cc#b###-##d#-##d#-#ac#-bb##c##f#d#a [XMP, XMP-xmpRights, Author] Marked - Marked: False [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ [ICC_Profile, ICC-header, Image] 4 - Profile CMM Type: ADBE [ICC_Profile, ICC-header, Image] 8 - Profile Version: #.#.# [ICC_Profile, ICC-header, Image] 12 - Profile Class: Display_Device_Profile [ICC_Profile, ICC-header, Image] 16 - Color Space Data: RGB_ [ICC_Profile, ICC-header, Image] 20 - Profile Connection Space: XYZ_ [ICC_Profile, ICC-header, Time] 24 - Profile Date Time: ####:##:##_##:##:## [ICC_Profile, ICC-header, Image] 36 - Profile File Signature: acsp [ICC_Profile, ICC-header, Image] 40 - Primary Platform: Apple_Computer_Inc. [ICC_Profile, ICC-header, Image] 44 - CMM Flags: Not_Embedded,_Independent [ICC_Profile, ICC-header, Image] 48 - Device Manufacturer: none [ICC_Profile, ICC-header, Image] 52 - Device Model: [ICC_Profile, ICC-header, Image] 56 - Device Attributes: Reflective,_Glossy,_Positive,_Color [ICC_Profile, ICC-header, Image] 64 - Rendering Intent: Perceptual [ICC_Profile, ICC-header, Image] 68 - Connection Space Illuminant: #.####_#_#.##### [ICC_Profile, ICC-header, Image] 80 - Profile Creator: ADBE [ICC_Profile, ICC-header, Image] 84 - Profile ID: # [ICC_Profile, ICC_Profile, Image] cprt - Profile Copyright: Copyright_####_Adobe_Systems_Incorporated [ICC_Profile, ICC_Profile, Image] desc - Profile Description: Adobe_RGB_(####) [ICC_Profile, ICC_Profile, Image] wtpt - Media White Point: #.#####_#_#.##### [ICC_Profile, ICC_Profile, Image] bkpt - Media Black Point: #_#_# [ICC_Profile, ICC_Profile, Image] rTRC - Red Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] gTRC - Green Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] bTRC - Blue Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] rXYZ - Red Matrix Column: #.#####_#.#####_#.##### [ICC_Profile, ICC_Profile, Image] gXYZ - Green Matrix Column: #.#####_#.#####_#.##### [ICC_Profile, ICC_Profile, Image] bXYZ - Blue Matrix Column: #.#####_#.#####_#.##### [FlashPix, FlashPix, Other] 1 - Code Page: Unicode_UTF-##,_little_endian [FlashPix, FlashPix, Other] 268435456 - Used Extension Numbers: # [FlashPix, FlashPix, Other] 1 - Extension Name: Screen_nail [FlashPix, FlashPix, Other] 2 - Extension Class ID: ########-#FC#-##D#-BD##-########A### [FlashPix, FlashPix, Other] 3 - Extension Persistence: Invalidated_By_Modification [FlashPix, FlashPix, Time] 4 - Extension Create Date: ####:##:##_##:##:## [FlashPix, FlashPix, Time] 5 - Extension Modify Date: ####:##:##_##:##:## [FlashPix, FlashPix, Other] 6 - Creating Application: Digita [FlashPix, FlashPix, Other] 7 - Extension Description: Presized_image_for_LCD_display [FlashPix, FlashPix, Other] 4096 - Storage-Stream Pathname: /.Screen_Nail_bd##########a### [FlashPix, FlashPix, Other] Screen Nail - Screen Nail: (Binary data 5917 bytes) [MPF, MPF0, Image] 45056 - MPF Version: #### [MPF, MPF0, Image] 45057 - Number Of Images: # [MPF, MPImage1, Image] 0.1 - MP Image Flags: Dependent_parent_image [MPF, MPImage1, Image] 0.2 - MP Image Format: JPEG [MPF, MPImage1, Image] 0.3 - MP Image Type: Baseline_MP_Primary_Image [MPF, MPImage1, Image] 4 - MP Image Length: ####### [MPF, MPImage1, Image] 8 - MP Image Start: # [MPF, MPImage1, Image] 12 - Dependent Image 1 Entry Number: # [MPF, MPImage1, Image] 14 - Dependent Image 2 Entry Number: # [MPF, MPImage2, Image] 0.1 - MP Image Flags: Dependent_child_image [MPF, MPImage2, Image] 0.2 - MP Image Format: JPEG [MPF, MPImage2, Image] 0.3 - MP Image Type: Large_Thumbnail_(full_HD_equivalent) [MPF, MPImage2, Image] 4 - MP Image Length: ####### [MPF, MPImage2, Image] 8 - MP Image Start: ####### [MPF, MPImage2, Image] 12 - Dependent Image 1 Entry Number: # [MPF, MPImage2, Image] 14 - Dependent Image 2 Entry Number: # [Meta, MetaIFD, Image] 50000 - Film Product Code: ## [Meta, MetaIFD, Image] 50001 - Image Source EK: # [Meta, MetaIFD, Image] 50002 - Capture Conditions PAR: # [Meta, MetaIFD, Image] 50009 - Frame Number: # [Meta, MetaIFD, Image] 50010 - Film Category: # [Meta, MetaIFD, Image] 50011 - Film Gencode: # [Meta, MetaIFD, Image] 50012 - Model And Version: Version_# [Meta, MetaIFD, Image] 50013 - Film Size: # [Meta, MetaIFD, Image] 50014 - SBA RGB Shifts: #_#_# [Meta, MetaIFD, Image] 50015 - SBA Input Image Colorspace: # [Meta, MetaIFD, Image] 50016 - SBA Input Image Bit Depth: ##_##_## [Meta, MetaIFD, Image] 50017 - SBA Exposure Record: (Binary data 368 bytes) [Meta, MetaIFD, Image] 50018 - User Adj SBA RGB Shifts: (Binary data 5 bytes) [Meta, MetaIFD, Image] 50019 - Image Rotation Status: # [Meta, MetaIFD, Image] 50020 - Roll Guid Elements: ################################ [Meta, MetaIFD, Image] 50021 - Metadata Number: #### [APP5, RMETA, Image] Sign type - Sign Type: Information [APP5, RMETA, Image] Location - Location: Roundabout [APP5, RMETA, Image] Lit - Lit: No [APP5, RMETA, Image] Condition - Condition: Good [APP5, RMETA, Image] Azimuth - Azimuth: E [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: #### [APP6, NITF, Image] 0 - NITF Version: #.## [APP6, NITF, Image] 2 - Image Format: IMode_B [APP6, NITF, Image] 3 - Blocks Per Row: # [APP6, NITF, Image] 5 - Blocks Per Column: # [APP6, NITF, Image] 7 - Image Color: Monochrome [APP6, NITF, Image] 8 - Bit Depth: # [APP6, NITF, Image] 9 - Image Class: General_Purpose [APP6, NITF, Image] 10 - JPEG Process: Baseline_sequential_DCT,_Huffman_coding,_#-bit_samples [APP6, NITF, Image] 11 - Quality: # [APP6, NITF, Image] 12 - Stream Color: Monochrome [APP6, NITF, Image] 13 - Stream Bit Depth: # [APP6, NITF, Image] 14 - Flags: #x####### [XML, MediaJukebox, Image] Tool_Name - Tool Name: Media_Center [XML, MediaJukebox, Image] Tool_Version - Tool Version: ##.#.## [XML, MediaJukebox, Image] People - People: Santa [XML, MediaJukebox, Image] Places - Places: Jamaica [XML, MediaJukebox, Time] Date - Date: ####:##:##_##:##:## [XML, MediaJukebox, Image] Album - Album: ####-##-## [XML, MediaJukebox, Image] Name - Name: Glass_home_at_night [APP11, JPEG-HDR, Image] ver - JPEG-HDR Version: ## [APP11, JPEG-HDR, Image] ln0 - Ln0: #.###### [APP11, JPEG-HDR, Image] ln1 - Ln1: #.###### [APP11, JPEG-HDR, Image] s2n - S2n: #.######e+## [APP11, JPEG-HDR, Image] alp - Alpha: #.###### [APP11, JPEG-HDR, Image] bet - Beta: #.###### [APP11, JPEG-HDR, Image] cor - Correction Method: # [APP11, JPEG-HDR, Preview] RatioImage - Ratio Image: (Binary data 19 bytes) [APP12, PictureInfo, Time] TimeDate - Date/Time Original: ####:##:##_##:##:## [APP12, PictureInfo, Image] Shutter - Exposure Time: #/### [APP12, PictureInfo, Image] Flash - Flash: Off [APP12, PictureInfo, Image] Resolution - Resolution: # [APP12, PictureInfo, Image] Protect - Protect: # [APP12, PictureInfo, Image] ContTake - Cont Take: # [APP12, PictureInfo, Image] ImageSize - Image Size: ####x### [APP12, PictureInfo, Image] ColorMode - Color Mode: # [APP12, PictureInfo, Image] FNumber - F Number: ##.# [APP12, PictureInfo, Image] Zoom - Zoom: #.# [APP12, PictureInfo, Image] Macro - Macro: Off [APP12, PictureInfo, Image] LightS - Light S: # [APP12, PictureInfo, Image] ExpBias - Exposure Compensation: +#.# [APP12, PictureInfo, Camera] Type - Camera Type: SR## [APP12, PictureInfo, Camera] Serial# - Serial Number: ######### [APP12, PictureInfo, Camera] Version - Version: v##-## [APP12, PictureInfo, Camera] ID - ID: AGFA_DIGITAL_CAMERA [APP12, PictureInfo, Image] PicLen - Pic Len: ###### [APP12, PictureInfo, Image] ThmLen - Thm Len: #### [APP12, PictureInfo, Image] Q - Tag Q: ## [APP12, PictureInfo, Image] R - Tag R: ### [APP12, PictureInfo, Image] B - Tag B: ### [APP12, PictureInfo, Image] s0 - S0: #e#,#,##b#,#f##,##cf,####,####,#######,a#e####,#,#f####d,#f###c#,#######,#,# [APP12, PictureInfo, Image] T0 - T0: ##b#####,#######,e##c#f,#,#,# [Ducky, Ducky, Image] 1 - Quality: ##% [Ducky, Ducky, Author] 3 - Copyright: Copyright_####_Phil_Harvey [IPTC, IPTC, Other] 0 - Application Record Version: # [IPTC, IPTC, Other] 120 - Caption-Abstract: A_witty_caption [IPTC, IPTC, Author] 122 - Writer-Editor: I_wrote_it [IPTC, IPTC, Other] 105 - Headline: No_headline [IPTC, IPTC, Other] 40 - Special Instructions: What_instructions [IPTC, IPTC, Author] 80 - By-line: Phil_Harvey [IPTC, IPTC, Author] 85 - By-line Title: My_Position [IPTC, IPTC, Author] 110 - Credit: My_Credit [IPTC, IPTC, Other] 5 - Object Name: Test_IPTC_picture [IPTC, IPTC, Time] 55 - Date Created: ####:##:## [IPTC, IPTC, Location] 90 - City: Kingston [IPTC, IPTC, Location] 95 - Province-State: Ont [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC, Other] 103 - Original Transmission Reference: What_is_a_transmission_reference [IPTC, IPTC, Other] 15 - Category: # [IPTC, IPTC, Other] 20 - Supplemental Categories: amazing, image, utilities [IPTC, IPTC, Author] 116 - Copyright Notice: Copyright_####_Phil_Harvey [IPTC, IPTC, Other] 10 - Urgency: #_(least_urgent) [IPTC, IPTC, Author] 115 - Source: I'm_the_source [IPTC, IPTC, Other] 25 - Keywords: jambalaya [IPTC, IPTC2, Other] 0 - Application Record Version: # [IPTC, IPTC3, Other] 0 - Application Record Version: # [IPTC, IPTC3, Other] 15 - Category: p [IPTC, IPTC3, Time] 55 - Date Created: ####:##:## [IPTC, IPTC3, Other] 5 - Object Name: object_name [IPTC, IPTC3, Other] 10 - Urgency: # [IPTC, IPTC3, Other] 20 - Supplemental Categories: supp_cat [IPTC, IPTC3, Other] 40 - Special Instructions: special_instructions [IPTC, IPTC3, Author] 80 - By-line: byline [IPTC, IPTC3, Author] 85 - By-line Title: byline_title [IPTC, IPTC3, Location] 90 - City: city [IPTC, IPTC3, Location] 101 - Country-Primary Location Name: country_name [IPTC, IPTC3, Other] 103 - Original Transmission Reference: otr [IPTC, IPTC3, Other] 105 - Headline: headline [IPTC, IPTC3, Author] 110 - Credit: credit [IPTC, IPTC3, Author] 115 - Source: source [IPTC, IPTC3, Author] 116 - Copyright Notice: copy_freely [IPTC, IPTC3, Other] 120 - Caption-Abstract: ExifTool_AFCP_test [IPTC, IPTC3, Author] 122 - Writer-Editor: caption_writer [IPTC, IPTC3, Location] 95 - Province-State: state [IPTC, IPTC3, Other] 25 - Keywords: jambalaya [Photoshop, Photoshop, Image] 1061 - IPTC Digest: ##ad####b#a##f#f####ac###fa###da [Photoshop, Photoshop, Image] 0 - X Resolution: ## [Photoshop, Photoshop, Image] 2 - Displayed Units X: inches [Photoshop, Photoshop, Image] 4 - Y Resolution: ## [Photoshop, Photoshop, Image] 6 - Displayed Units Y: inches [Photoshop, Photoshop, Image] 1037 - Global Angle: ## [Photoshop, Photoshop, Image] 1049 - Global Altitude: ## [Photoshop, Photoshop, Author] 1034 - Copyright Flag: False [Photoshop, Photoshop, Author] 1035 - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [Photoshop, Photoshop, Image] 0 - Photoshop Quality: # [Photoshop, Photoshop, Image] 1 - Photoshop Format: Standard [Photoshop, Photoshop, Image] 2 - Progressive Scans: #_Scans [APP13, AdobeCM, Image] 0 - Adobe CM Type: # [APP14, Adobe, Image] 0 - DCT Encode Version: ### [APP14, Adobe, Image] 1 - APP14 Flags 0: (none) [APP14, Adobe, Image] 2 - APP14 Flags 1: (none) [APP14, Adobe, Image] 3 - Color Transform: YCbCr [APP15, GraphConv, Image] Q - Quality: ## [MIE, MIE-Doc, Author] Copyright - Copyright: ©_####_Phil_Harvey [MIE, MIE-Main, Other] zmie - Trailer Signature: [PhotoMechanic, PhotoMechanic, Image] 221 - Tagged: Yes [PhotoMechanic, PhotoMechanic, Image] 222 - Color Class: #_(Typical_alt) [PhotoMechanic, PhotoMechanic, Image] 216 - Rotation: ### [PhotoMechanic, PhotoMechanic, Image] 217 - Crop Left: ### [PhotoMechanic, PhotoMechanic, Image] 218 - Crop Top: ### [PhotoMechanic, PhotoMechanic, Image] 219 - Crop Right: ### [PhotoMechanic, PhotoMechanic, Image] 220 - Crop Bottom: #### [CanonVRD, CanonVRD, Image] 2 - VRD Version: #.#.# [CanonVRD, CanonVRD, Image] 6 - WB Adj RGGB Levels: #_#_#_# [CanonVRD, CanonVRD, Image] 24 - White Balance Adj: Shot_Settings [CanonVRD, CanonVRD, Image] 26 - WB Adj Color Temp: #### [CanonVRD, CanonVRD, Image] 36 - WB Fine Tune Active: No [CanonVRD, CanonVRD, Image] 40 - WB Fine Tune Saturation: # [CanonVRD, CanonVRD, Image] 44 - WB Fine Tune Tone: # [CanonVRD, CanonVRD, Image] 46 - Raw Color Adj: Shot_Settings [CanonVRD, CanonVRD, Image] 48 - Raw Custom Saturation: # [CanonVRD, CanonVRD, Image] 52 - Raw Custom Tone: # [CanonVRD, CanonVRD, Image] 56 - Raw Brightness Adj: #.## [CanonVRD, CanonVRD, Image] 60 - Tone Curve Property: Shot_Settings [CanonVRD, CanonVRD, Image] 122 - Dynamic Range Min: # [CanonVRD, CanonVRD, Image] 124 - Dynamic Range Max: #### [CanonVRD, CanonVRD, Image] 272 - Tone Curve Active: No [CanonVRD, CanonVRD, Image] 275 - Tone Curve Mode: RGB [CanonVRD, CanonVRD, Image] 276 - Brightness Adj: # [CanonVRD, CanonVRD, Image] 277 - Contrast Adj: # [CanonVRD, CanonVRD, Image] 278 - Saturation Adj: ### [CanonVRD, CanonVRD, Image] 286 - Color Tone Adj: # [CanonVRD, CanonVRD, Image] 294 - Luminance Curve Points: (#,#)_(###,###) [CanonVRD, CanonVRD, Image] 336 - Luminance Curve Limits: ###_#_###_# [CanonVRD, CanonVRD, Image] 345 - Tone Curve Interpolation: Curve [CanonVRD, CanonVRD, Image] 352 - Red Curve Points: (#,#)_(###,###) [CanonVRD, CanonVRD, Image] 394 - Red Curve Limits: ###_#_###_# [CanonVRD, CanonVRD, Image] 410 - Green Curve Points: (#,#)_(###,###) [CanonVRD, CanonVRD, Image] 452 - Green Curve Limits: ###_#_###_# [CanonVRD, CanonVRD, Image] 468 - Blue Curve Points: (#,#)_(###,###) [CanonVRD, CanonVRD, Image] 510 - Blue Curve Limits: ###_#_###_# [CanonVRD, CanonVRD, Image] 526 - RGB Curve Points: (#,#)_(###,###) [CanonVRD, CanonVRD, Image] 568 - RGB Curve Limits: ###_#_###_# [CanonVRD, CanonVRD, Image] 580 - Crop Active: No [CanonVRD, CanonVRD, Image] 582 - Crop Left: # [CanonVRD, CanonVRD, Image] 584 - Crop Top: # [CanonVRD, CanonVRD, Image] 586 - Crop Width: # [CanonVRD, CanonVRD, Image] 588 - Crop Height: # [CanonVRD, CanonVRD, Image] 602 - Sharpness Adj: # [CanonVRD, CanonVRD, Image] 608 - Crop Aspect Ratio: Free [CanonVRD, CanonVRD, Image] 610 - Constrained Crop Width: # [CanonVRD, CanonVRD, Image] 614 - Constrained Crop Height: # [CanonVRD, CanonVRD, Image] 618 - Check Mark: Clear [CanonVRD, CanonVRD, Image] 622 - Rotation: ## [CanonVRD, CanonVRD, Image] 624 - Work Color Space: sRGB [FotoStation, FotoStation, Image] 0 - Original Image Width: ## [FotoStation, FotoStation, Image] 1 - Original Image Height: ## [FotoStation, FotoStation, Image] 2 - Color Planes: # [FotoStation, FotoStation, Image] 3 - XY Resolution: # [FotoStation, FotoStation, Image] 4 - Rotation: # [FotoStation, FotoStation, Image] 6 - Crop Left: ##.###% [FotoStation, FotoStation, Image] 7 - Crop Top: ##.##% [FotoStation, FotoStation, Image] 8 - Crop Right: ##.###% [FotoStation, FotoStation, Image] 9 - Crop Bottom: ##.##% [FotoStation, FotoStation, Image] 11 - Crop Rotation: # [Composite, Composite, Image] Aperture - Aperture: #.# [Composite, Composite, Image] ImageSize - Image Size: #x# [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 25 bytes) [Composite, Composite, Image] Megapixels - Megapixels: #.###### [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 5777 bytes) [Composite, Composite, Image] ShutterSpeed - Shutter Speed: #/### [Composite, Composite, Image] LightValue - Light Value: ##.# [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: #.# [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: #.###_mm [Composite, Composite, Image] FOV - Field Of View: ##.#_deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: #.#_mm_(##_mm_equivalent:_##.#_mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: #.##_m ��������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_3.out���������������������������������������������������������������000644 �000765 �000024 �00000013322 12546457275 017354� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileSize - File Size: 4.8 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2005:11:23 15:49:37-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:20 12:47:58-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:11 08:47:16-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: TIFF [File, File, Image] FileTypeExtension - File Type Extension: tif [File, File, Image] MIMEType - MIME Type: image/tiff [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 82a5301def77e837ceb56158abd65512 [EXIF, IFD0, Image] 254 - Subfile Type: Full-resolution Image [EXIF, IFD0, Image] 256 - Image Width: 160 [EXIF, IFD0, Image] 257 - Image Height: 120 [EXIF, IFD0, Image] 258 - Bits Per Sample: 8 8 8 [EXIF, IFD0, Image] 259 - Compression: LZW [EXIF, IFD0, Image] 262 - Photometric Interpretation: RGB [EXIF, IFD0, Image] 270 - Image Description: The picture caption [EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS DIGITAL REBEL [EXIF, IFD0, Image] 273 - Strip Offsets: 3816 [EXIF, IFD0, Image] 277 - Samples Per Pixel: 3 [EXIF, IFD0, Image] 278 - Rows Per Strip: 120 [EXIF, IFD0, Image] 279 - Strip Byte Counts: 1048 [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 284 - Planar Configuration: Chunky [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: GraphicConverter [EXIF, IFD0, Time] 306 - Modify Date: 2004:02:20 08:07:49 [EXIF, IFD0, Image] 317 - Predictor: None [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 120 - Caption-Abstract: The picture caption [IPTC, IPTC, Author] 122 - Writer-Editor: I wrote it [IPTC, IPTC, Other] 40 - Special Instructions: no instructions [IPTC, IPTC, Author] 80 - By-line: I'm the author [IPTC, IPTC, Author] 85 - By-line Title: On top [IPTC, IPTC, Author] 110 - Credit: Phil Harvey [IPTC, IPTC, Author] 115 - Source: My camera [IPTC, IPTC, Other] 5 - Object Name: This is the title [IPTC, IPTC, Time] 55 - Date Created: 2004:02:20 [IPTC, IPTC, Location] 90 - City: Kingston [IPTC, IPTC, Location] 95 - Province-State: Ontario [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC, Other] 103 - Original Transmission Reference: no reference [IPTC, IPTC, Other] 25 - Keywords: exiftool, test, picture [IPTC, IPTC, Author] 116 - Copyright Notice: Copyright notice [IPTC, IPTC, Other] 105 - Headline: headline [ICC_Profile, ICC-header, Image] 4 - Profile CMM Type: Lino [ICC_Profile, ICC-header, Image] 8 - Profile Version: 2.1.0 [ICC_Profile, ICC-header, Image] 12 - Profile Class: Display Device Profile [ICC_Profile, ICC-header, Image] 16 - Color Space Data: RGB [ICC_Profile, ICC-header, Image] 20 - Profile Connection Space: XYZ [ICC_Profile, ICC-header, Time] 24 - Profile Date Time: 1998:02:09 06:49:00 [ICC_Profile, ICC-header, Image] 36 - Profile File Signature: acsp [ICC_Profile, ICC-header, Image] 40 - Primary Platform: Microsoft Corporation [ICC_Profile, ICC-header, Image] 44 - CMM Flags: Not Embedded, Independent [ICC_Profile, ICC-header, Image] 48 - Device Manufacturer: IEC [ICC_Profile, ICC-header, Image] 52 - Device Model: sRGB [ICC_Profile, ICC-header, Image] 56 - Device Attributes: Reflective, Glossy, Positive, Color [ICC_Profile, ICC-header, Image] 64 - Rendering Intent: Perceptual [ICC_Profile, ICC-header, Image] 68 - Connection Space Illuminant: 0.9642 1 0.82491 [ICC_Profile, ICC-header, Image] 80 - Profile Creator: HP [ICC_Profile, ICC-header, Image] 84 - Profile ID: 0 [ICC_Profile, ICC_Profile, Image] cprt - Profile Copyright: Copyright (c) 1998 Hewlett-Packard Company [ICC_Profile, ICC_Profile, Image] desc - Profile Description: sRGB IEC61966-2.1 [ICC_Profile, ICC_Profile, Image] wtpt - Media White Point: 0.95045 1 1.08905 [ICC_Profile, ICC_Profile, Image] bkpt - Media Black Point: 0 0 0 [ICC_Profile, ICC_Profile, Image] rXYZ - Red Matrix Column: 0.43607 0.22249 0.01392 [ICC_Profile, ICC_Profile, Image] gXYZ - Green Matrix Column: 0.38515 0.71687 0.09708 [ICC_Profile, ICC_Profile, Image] bXYZ - Blue Matrix Column: 0.14307 0.06061 0.7141 [ICC_Profile, ICC_Profile, Camera] dmnd - Device Mfg Desc: IEC http://www.iec.ch [ICC_Profile, ICC_Profile, Camera] dmdd - Device Model Desc: IEC 61966-2.1 Default RGB colour space - sRGB [ICC_Profile, ICC_Profile, Image] vued - Viewing Cond Desc: Reference Viewing Condition in IEC61966-2.1 [ICC_Profile, ICC-view, Image] 8 - Viewing Cond Illuminant: 19.6445 20.3718 16.8089 [ICC_Profile, ICC-view, Image] 20 - Viewing Cond Surround: 3.92889 4.07439 3.36179 [ICC_Profile, ICC-view, Image] 32 - Viewing Cond Illuminant Type: D50 [ICC_Profile, ICC_Profile, Image] lumi - Luminance: 76.03647 80 87.12462 [ICC_Profile, ICC-meas, Image] 8 - Measurement Observer: CIE 1931 [ICC_Profile, ICC-meas, Image] 12 - Measurement Backing: 0 0 0 [ICC_Profile, ICC-meas, Image] 24 - Measurement Geometry: Unknown [ICC_Profile, ICC-meas, Image] 28 - Measurement Flare: 0.999% [ICC_Profile, ICC-meas, Image] 32 - Measurement Illuminant: D65 [ICC_Profile, ICC_Profile, Image] tech - Technology: Cathode Ray Tube Display [ICC_Profile, ICC_Profile, Image] rTRC - Red Tone Reproduction Curve: (Binary data 2060 bytes) [ICC_Profile, ICC_Profile, Image] gTRC - Green Tone Reproduction Curve: (Binary data 2060 bytes) [ICC_Profile, ICC_Profile, Image] bTRC - Blue Tone Reproduction Curve: (Binary data 2060 bytes) [Composite, Composite, Image] ImageSize - Image Size: 160x120 [Composite, Composite, Image] Megapixels - Megapixels: 0.019 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_30.out��������������������������������������������������������������000644 �000765 �000024 �00000000234 12643221314 017407� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, File, Image] JPEGQualityEstimate - JPEG Quality Estimate: 61 [File, File, Image] JPEGDigest - JPEG Digest: Adobe Photoshop, Save for web, Quality 10 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_4.out���������������������������������������������������������������000644 �000765 �000024 �00000001747 11166676722 017362� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ApertureValue: 14.0 ColorSpace: sRGB ComponentsConfiguration: Y, Cb, Cr, - CompressedBitsPerPixel: 9 CreateDate: 2003:12:04 06:46:52 CustomRendered: Normal DateTimeOriginal: 2003:12:04 06:46:52 ExifImageHeight: 120 ExifImageWidth: 160 ExifVersion: 0221 ExposureCompensation (1): 0 ExposureMode: Manual ExposureTime: 4 FNumber: 14.0 FileSource: Digital Camera Flash: No Flash FlashpixVersion: 0100 FocalLength: 34.0 mm FocalPlaneResolutionUnit: inches FocalPlaneXResolution: 3443.946188 FocalPlaneYResolution: 3442.016807 ISO: 100 InteropIndex: THM - DCF thumbnail file InteropVersion: 0100 Make: Canon MaxApertureValue: 4.5 MeteringMode (1): Average Model: Canon EOS DIGITAL REBEL ModifyDate: 2003:12:04 06:46:52 Orientation: Horizontal (normal) RelatedImageHeight: 2048 RelatedImageWidth: 3072 ResolutionUnit: inches SceneCaptureType: Standard SensingMethod: One-chip color area ShutterSpeedValue: 0 UserComment: WhiteBalance (1): Auto XResolution: 180 YCbCrPositioning: Centered YResolution: 180 �������������������������Image-ExifTool-10.10/t/ExifTool_5.out���������������������������������������������������������������000644 �000765 �000024 �00000000500 11446444437 017342� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Image] 274 - Orientation: 1 [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Time] 306 - Modify Date: 2003:12:04 06:46:52 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:12:04 06:46:52 [EXIF, ExifIFD, Time] 36868 - Create Date: 2003:12:04 06:46:52 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_6.out���������������������������������������������������������������000644 �000765 �000024 �00000010630 12546457275 017356� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Canon.jpg [File, System, Image] Directory - Directory: t/images [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:10:03 15:10:31-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:39-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:02-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS DIGITAL REBEL [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2003:12:04 06:46:52 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 4 [EXIF, ExifIFD, Image] 33437 - F Number: 14.0 [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:12:04 06:46:52 [EXIF, ExifIFD, Time] 36868 - Create Date: 2003:12:04 06:46:52 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 9 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 0 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 14.0 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 4.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Average [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 34.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 160 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 120 [EXIF, InteropIFD, Image] 1 - Interoperability Index: THM - DCF thumbnail file [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, InteropIFD, Image] 4097 - Related Image Width: 3072 [EXIF, InteropIFD, Image] 4098 - Related Image Height: 2048 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [Composite, Composite, Image] Aperture - Aperture: 14.0 [Composite, Composite, Camera] DriveMode - Drive Mode: Continuous Shooting [Composite, Composite, Camera] ISO - ISO: 100 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Camera] Lens - Lens: 18.0 - 55.0 mm [Composite, Composite, Camera] LensID - Lens ID: Unknown 18-55mm [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.6 [Composite, Composite, Camera] ShootingMode - Shooting Mode: Bulb [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 4 [Composite, Composite, Camera] WB_RGGBLevels - WB RGGB Levels: 1719 832 831 990 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.190619 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.019 mm [Composite, Composite, Image] DOF - Depth Of Field: inf (4.31 m - inf) [Composite, Composite, Image] FOV - Field Of View: 36.9 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 34.0 mm (35 mm equivalent: 54.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 4.37 m [Composite, Composite, Camera] Lens35efl - Lens: 18.0 - 55.0 mm (35 mm equivalent: 28.6 - 87.4 mm) [Composite, Composite, Image] LightValue - Light Value: 5.6 [Composite, Composite, Camera] RedBalance - Red Balance: 2.067348 ��������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_7.out���������������������������������������������������������������000644 �000765 �000024 �00000016162 12332720663 017350� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS DIGITAL REBEL [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2003:12:04 06:46:52 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:12:04 06:46:52 [EXIF, ExifIFD, Time] 36868 - Create Date: 2003:12:04 06:46:52 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 9 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 0 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 14.0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 4.5 [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 160 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 120 [EXIF, InteropIFD, Image] 1 - Interoperability Index: THM - DCF thumbnail file [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, InteropIFD, Image] 4097 - Related Image Width: 3072 [EXIF, InteropIFD, Image] 4098 - Related Image Height: 2048 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3443.946188 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3442.016807 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [MakerNotes, Canon, Camera] 1 - Macro Mode: Unknown (0) [MakerNotes, Canon, Camera] 2 - Self Timer: Off [MakerNotes, Canon, Camera] 3 - Quality: RAW [MakerNotes, Canon, Camera] 4 - Canon Flash Mode: Off [MakerNotes, Canon, Camera] 5 - Continuous Drive: Continuous [MakerNotes, Canon, Camera] 7 - Focus Mode: Manual Focus (3) [MakerNotes, Canon, Camera] 9 - Record Mode: CRW+THM [MakerNotes, Canon, Camera] 10 - Canon Image Size: Large [MakerNotes, Canon, Camera] 11 - Easy Mode: Manual [MakerNotes, Canon, Camera] 12 - Digital Zoom: Unknown (-1) [MakerNotes, Canon, Camera] 13 - Contrast: +1 [MakerNotes, Canon, Camera] 14 - Saturation: +1 [MakerNotes, Canon, Camera] 15 - Sharpness: +1 [MakerNotes, Canon, Camera] 16 - Camera ISO: n/a [MakerNotes, Canon, Camera] 17 - Metering Mode: Center-weighted average [MakerNotes, Canon, Camera] 18 - Focus Range: Not Known [MakerNotes, Canon, Camera] 20 - Canon Exposure Mode: Manual [MakerNotes, Canon, Camera] 22 - Lens Type: n/a [MakerNotes, Canon, Camera] 23 - Max Focal Length: 55 mm [MakerNotes, Canon, Camera] 24 - Min Focal Length: 18 mm [MakerNotes, Canon, Camera] 25 - Focal Units: 1/mm [MakerNotes, Canon, Camera] 26 - Max Aperture: 4 [MakerNotes, Canon, Camera] 27 - Min Aperture: 27 [MakerNotes, Canon, Camera] 28 - Flash Activity: 0 [MakerNotes, Canon, Camera] 29 - Flash Bits: (none) [MakerNotes, Canon, Camera] 36 - Zoom Source Width: 3072 [MakerNotes, Canon, Camera] 37 - Zoom Target Width: 3072 [MakerNotes, Canon, Camera] 41 - Manual Flash Output: n/a [MakerNotes, Canon, Camera] 42 - Color Tone: Normal [MakerNotes, Canon, Image] 1 - Focal Length: 34 mm [MakerNotes, Canon, Image] 2 - Focal Plane X Size: 23.22 mm [MakerNotes, Canon, Image] 3 - Focal Plane Y Size: 15.49 mm [MakerNotes, Canon, Image] 1 - Auto ISO: 100 [MakerNotes, Canon, Image] 2 - Base ISO: 100 [MakerNotes, Canon, Image] 3 - Measured EV: -1.25 [MakerNotes, Canon, Image] 4 - Target Aperture: 14 [MakerNotes, Canon, Image] 6 - Exposure Compensation: 0 [MakerNotes, Canon, Image] 7 - White Balance: Auto [MakerNotes, Canon, Image] 8 - Slow Shutter: None [MakerNotes, Canon, Image] 9 - Shot Number In Continuous Burst: 0 [MakerNotes, Canon, Camera] 10 - Optical Zoom Code: n/a [MakerNotes, Canon, Image] 13 - Flash Guide Number: 0 [MakerNotes, Canon, Image] 15 - Flash Exposure Compensation: 0 [MakerNotes, Canon, Image] 16 - Auto Exposure Bracketing: Off [MakerNotes, Canon, Image] 17 - AEB Bracket Value: 0 [MakerNotes, Canon, Image] 18 - Control Mode: Camera Local Control [MakerNotes, Canon, Image] 19 - Focus Distance Upper: inf [MakerNotes, Canon, Image] 20 - Focus Distance Lower: 5.46 m [MakerNotes, Canon, Image] 21 - F Number: 14 [MakerNotes, Canon, Image] 22 - Exposure Time: 128 [MakerNotes, Canon, Image] 23 - Measured EV 2: -1.25 [MakerNotes, Canon, Image] 24 - Bulb Duration: 4 [MakerNotes, Canon, Camera] 26 - Camera Type: EOS Mid-range [MakerNotes, Canon, Image] 27 - Auto Rotate: None [MakerNotes, Canon, Image] 28 - ND Filter: n/a [MakerNotes, Canon, Image] 29 - Self Timer 2: 0 [MakerNotes, Canon, Image] 3 - Bracket Mode: Off [MakerNotes, Canon, Image] 4 - Bracket Value: 0 [MakerNotes, Canon, Image] 5 - Bracket Shot Number: 0 [MakerNotes, Canon, Image] 6 - Canon Image Type: CRW:EOS DIGITAL REBEL CMOS RAW [MakerNotes, Canon, Camera] 7 - Canon Firmware Version: Firmware Version 1.1.1 [MakerNotes, Canon, Camera] 12 - Serial Number: 0560018150 [MakerNotes, Canon, Camera] 21 - Serial Number Format: Format 1 [MakerNotes, Canon, Image] 8 - File Number: 118-1861 [MakerNotes, Canon, Camera] 9 - Owner Name: Phil Harvey [MakerNotes, Canon, Camera] 16 - Canon Model ID: EOS Digital Rebel / 300D / Kiss Digital [MakerNotes, Canon, Image] 14 - Canon File Length: 4480822 [MakerNotes, Canon, Camera] 1 - Measured RGGB: 998 1022 1026 808 [MakerNotes, Canon, Camera] 1 - WB RGGB Levels Auto: 1719 832 831 990 [MakerNotes, Canon, Camera] 5 - WB RGGB Levels Daylight: 1722 832 831 989 [MakerNotes, Canon, Camera] 9 - WB RGGB Levels Shade: 2035 832 831 839 [MakerNotes, Canon, Camera] 13 - WB RGGB Levels Cloudy: 1878 832 831 903 [MakerNotes, Canon, Camera] 17 - WB RGGB Levels Tungsten: 1228 913 912 1668 [MakerNotes, Canon, Camera] 21 - WB RGGB Levels Fluorescent: 1506 842 841 1381 [MakerNotes, Canon, Camera] 25 - WB RGGB Levels Flash: 1933 832 831 895 [MakerNotes, Canon, Camera] 29 - WB RGGB Levels Custom: 1722 832 831 989 [MakerNotes, Canon, Camera] 33 - WB RGGB Levels Kelvin: 1722 832 831 988 [MakerNotes, Canon, Camera] 37 - WB RGGB Black Levels: 124 123 124 123 [MakerNotes, Canon, Camera] 174 - Color Temperature: 5200 [MakerNotes, Canon, Camera] 180 - Color Space: sRGB [MakerNotes, Canon, Camera] 0 - Num AF Points: 7 [MakerNotes, Canon, Camera] 1 - Valid AF Points: 7 [MakerNotes, Canon, Image] 2 - Canon Image Width: 3072 [MakerNotes, Canon, Image] 3 - Canon Image Height: 2048 [MakerNotes, Canon, Camera] 4 - AF Image Width: 3072 [MakerNotes, Canon, Camera] 5 - AF Image Height: 2048 [MakerNotes, Canon, Camera] 6 - AF Area Width: 151 [MakerNotes, Canon, Camera] 7 - AF Area Height: 151 [MakerNotes, Canon, Camera] 8 - AF Area X Positions: 1014 608 0 0 0 -608 -1014 [MakerNotes, Canon, Camera] 9 - AF Area Y Positions: 0 0 -506 0 506 0 0 [MakerNotes, Canon, Camera] 10 - AF Points In Focus: (none) [MakerNotes, Canon, Camera] 19 - Thumbnail Image Valid Area: 0 159 7 112 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_8.out���������������������������������������������������������������000644 �000765 �000024 �00000016140 12332720663 017345� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS DIGITAL REBEL [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2003:12:04 06:46:52 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 4 [EXIF, ExifIFD, Image] 33437 - F Number: 14.0 [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:12:04 06:46:52 [EXIF, ExifIFD, Time] 36868 - Create Date: 2003:12:04 06:46:52 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 9 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 0 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 14.0 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 4.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Average [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 34.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 160 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 120 [EXIF, InteropIFD, Image] 1 - Interoperability Index: THM - DCF thumbnail file [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, InteropIFD, Image] 4097 - Related Image Width: 3072 [EXIF, InteropIFD, Image] 4098 - Related Image Height: 2048 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3443.946188 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3442.016807 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [MakerNotes, Canon, Camera] 1 - Macro Mode: Unknown (0) [MakerNotes, Canon, Camera] 2 - Self Timer: Off [MakerNotes, Canon, Camera] 3 - Quality: RAW [MakerNotes, Canon, Camera] 4 - Canon Flash Mode: Off [MakerNotes, Canon, Camera] 5 - Continuous Drive: Continuous [MakerNotes, Canon, Camera] 7 - Focus Mode: Manual Focus (3) [MakerNotes, Canon, Camera] 9 - Record Mode: CRW+THM [MakerNotes, Canon, Camera] 10 - Canon Image Size: Large [MakerNotes, Canon, Camera] 11 - Easy Mode: Manual [MakerNotes, Canon, Camera] 12 - Digital Zoom: Unknown (-1) [MakerNotes, Canon, Camera] 13 - Contrast: +1 [MakerNotes, Canon, Camera] 14 - Saturation: +1 [MakerNotes, Canon, Camera] 15 - Sharpness: +1 [MakerNotes, Canon, Camera] 16 - Camera ISO: n/a [MakerNotes, Canon, Camera] 18 - Focus Range: Not Known [MakerNotes, Canon, Camera] 20 - Canon Exposure Mode: Manual [MakerNotes, Canon, Camera] 22 - Lens Type: n/a [MakerNotes, Canon, Camera] 23 - Max Focal Length: 55 mm [MakerNotes, Canon, Camera] 24 - Min Focal Length: 18 mm [MakerNotes, Canon, Camera] 25 - Focal Units: 1/mm [MakerNotes, Canon, Camera] 26 - Max Aperture: 4 [MakerNotes, Canon, Camera] 27 - Min Aperture: 27 [MakerNotes, Canon, Camera] 28 - Flash Activity: 0 [MakerNotes, Canon, Camera] 29 - Flash Bits: (none) [MakerNotes, Canon, Camera] 36 - Zoom Source Width: 3072 [MakerNotes, Canon, Camera] 37 - Zoom Target Width: 3072 [MakerNotes, Canon, Camera] 41 - Manual Flash Output: n/a [MakerNotes, Canon, Camera] 42 - Color Tone: Normal [MakerNotes, Canon, Image] 2 - Focal Plane X Size: 23.22 mm [MakerNotes, Canon, Image] 3 - Focal Plane Y Size: 15.49 mm [MakerNotes, Canon, Image] 1 - Auto ISO: 100 [MakerNotes, Canon, Image] 2 - Base ISO: 100 [MakerNotes, Canon, Image] 3 - Measured EV: -1.25 [MakerNotes, Canon, Image] 4 - Target Aperture: 14 [MakerNotes, Canon, Image] 8 - Slow Shutter: None [MakerNotes, Canon, Image] 9 - Shot Number In Continuous Burst: 0 [MakerNotes, Canon, Camera] 10 - Optical Zoom Code: n/a [MakerNotes, Canon, Image] 13 - Flash Guide Number: 0 [MakerNotes, Canon, Image] 15 - Flash Exposure Compensation: 0 [MakerNotes, Canon, Image] 16 - Auto Exposure Bracketing: Off [MakerNotes, Canon, Image] 17 - AEB Bracket Value: 0 [MakerNotes, Canon, Image] 18 - Control Mode: Camera Local Control [MakerNotes, Canon, Image] 19 - Focus Distance Upper: inf [MakerNotes, Canon, Image] 20 - Focus Distance Lower: 5.46 m [MakerNotes, Canon, Image] 23 - Measured EV 2: -1.25 [MakerNotes, Canon, Image] 24 - Bulb Duration: 4 [MakerNotes, Canon, Camera] 26 - Camera Type: EOS Mid-range [MakerNotes, Canon, Image] 27 - Auto Rotate: None [MakerNotes, Canon, Image] 28 - ND Filter: n/a [MakerNotes, Canon, Image] 29 - Self Timer 2: 0 [MakerNotes, Canon, Image] 3 - Bracket Mode: Off [MakerNotes, Canon, Image] 4 - Bracket Value: 0 [MakerNotes, Canon, Image] 5 - Bracket Shot Number: 0 [MakerNotes, Canon, Image] 6 - Canon Image Type: CRW:EOS DIGITAL REBEL CMOS RAW [MakerNotes, Canon, Camera] 7 - Canon Firmware Version: Firmware Version 1.1.1 [MakerNotes, Canon, Camera] 12 - Serial Number: 0560018150 [MakerNotes, Canon, Camera] 21 - Serial Number Format: Format 1 [MakerNotes, Canon, Image] 8 - File Number: 118-1861 [MakerNotes, Canon, Camera] 9 - Owner Name: Phil Harvey [MakerNotes, Canon, Camera] 16 - Canon Model ID: EOS Digital Rebel / 300D / Kiss Digital [MakerNotes, Canon, Image] 14 - Canon File Length: 4480822 [MakerNotes, Canon, Camera] 1 - Measured RGGB: 998 1022 1026 808 [MakerNotes, Canon, Camera] 1 - WB RGGB Levels Auto: 1719 832 831 990 [MakerNotes, Canon, Camera] 5 - WB RGGB Levels Daylight: 1722 832 831 989 [MakerNotes, Canon, Camera] 9 - WB RGGB Levels Shade: 2035 832 831 839 [MakerNotes, Canon, Camera] 13 - WB RGGB Levels Cloudy: 1878 832 831 903 [MakerNotes, Canon, Camera] 17 - WB RGGB Levels Tungsten: 1228 913 912 1668 [MakerNotes, Canon, Camera] 21 - WB RGGB Levels Fluorescent: 1506 842 841 1381 [MakerNotes, Canon, Camera] 25 - WB RGGB Levels Flash: 1933 832 831 895 [MakerNotes, Canon, Camera] 29 - WB RGGB Levels Custom: 1722 832 831 989 [MakerNotes, Canon, Camera] 33 - WB RGGB Levels Kelvin: 1722 832 831 988 [MakerNotes, Canon, Camera] 37 - WB RGGB Black Levels: 124 123 124 123 [MakerNotes, Canon, Camera] 174 - Color Temperature: 5200 [MakerNotes, Canon, Camera] 0 - Num AF Points: 7 [MakerNotes, Canon, Camera] 1 - Valid AF Points: 7 [MakerNotes, Canon, Image] 2 - Canon Image Width: 3072 [MakerNotes, Canon, Image] 3 - Canon Image Height: 2048 [MakerNotes, Canon, Camera] 4 - AF Image Width: 3072 [MakerNotes, Canon, Camera] 5 - AF Image Height: 2048 [MakerNotes, Canon, Camera] 6 - AF Area Width: 151 [MakerNotes, Canon, Camera] 7 - AF Area Height: 151 [MakerNotes, Canon, Camera] 8 - AF Area X Positions: 1014 608 0 0 0 -608 -1014 [MakerNotes, Canon, Camera] 9 - AF Area Y Positions: 0 0 -506 0 506 0 0 [MakerNotes, Canon, Camera] 10 - AF Points In Focus: (none) [MakerNotes, Canon, Camera] 19 - Thumbnail Image Valid Area: 0 159 7 112 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ExifTool_9.out���������������������������������������������������������������000644 �000765 �000024 �00000003410 11454616306 017344� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[MakerNotes, Canon, Image] 1 - Focal Length: 34 mm [MakerNotes, Canon, Image] 2 - Focal Plane X Size: 23.22 mm [MakerNotes, Canon, Image] 3 - Focal Plane Y Size: 15.49 mm [MakerNotes, Canon, Image] 1 - Auto ISO: 100 [MakerNotes, Canon, Image] 2 - Base ISO: 100 [MakerNotes, Canon, Image] 3 - Measured EV: -1.25 [MakerNotes, Canon, Image] 4 - Target Aperture: 14 [MakerNotes, Canon, Image] 6 - Exposure Compensation: 0 [MakerNotes, Canon, Image] 7 - White Balance: Auto [MakerNotes, Canon, Image] 8 - Slow Shutter: None [MakerNotes, Canon, Image] 9 - Shot Number In Continuous Burst: 0 [MakerNotes, Canon, Image] 13 - Flash Guide Number: 0 [MakerNotes, Canon, Image] 15 - Flash Exposure Compensation: 0 [MakerNotes, Canon, Image] 16 - Auto Exposure Bracketing: Off [MakerNotes, Canon, Image] 17 - AEB Bracket Value: 0 [MakerNotes, Canon, Image] 18 - Control Mode: Camera Local Control [MakerNotes, Canon, Image] 19 - Focus Distance Upper: inf [MakerNotes, Canon, Image] 20 - Focus Distance Lower: 5.46 m [MakerNotes, Canon, Image] 21 - F Number: 14 [MakerNotes, Canon, Image] 22 - Exposure Time: 128 [MakerNotes, Canon, Image] 23 - Measured EV 2: -1.25 [MakerNotes, Canon, Image] 24 - Bulb Duration: 4 [MakerNotes, Canon, Image] 27 - Auto Rotate: None [MakerNotes, Canon, Image] 28 - ND Filter: n/a [MakerNotes, Canon, Image] 29 - Self Timer 2: 0 [MakerNotes, Canon, Image] 3 - Bracket Mode: Off [MakerNotes, Canon, Image] 4 - Bracket Value: 0 [MakerNotes, Canon, Image] 5 - Bracket Shot Number: 0 [MakerNotes, Canon, Image] 6 - Canon Image Type: CRW:EOS DIGITAL REBEL CMOS RAW [MakerNotes, Canon, Image] 8 - File Number: 118-1861 [MakerNotes, Canon, Image] 14 - Canon File Length: 4480822 [MakerNotes, Canon, Image] 2 - Canon Image Width: 3072 [MakerNotes, Canon, Image] 3 - Canon Image Height: 2048 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/FLAC.t�����������������������������������������������������������������������000644 �000765 �000024 �00000001675 11327642463 015541� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/FLAC.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::FLAC; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'FLAC'; my $testnum = 1; # test 2: Extract information from FLAC test file { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/FLAC.flac'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Extract information from Ogg test file { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/FLAC.ogg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �������������������������������������������������������������������Image-ExifTool-10.10/t/FLAC_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000003233 12546457275 016327� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: FLAC.flac [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 282 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:11:13 15:12:26-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:09-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: FLAC [File, File, Image] FileTypeExtension - File Type Extension: flac [File, File, Image] MIMEType - MIME Type: audio/flac [FLAC, FLAC, Audio] Bit000-015 - Block Size Min: 4608 [FLAC, FLAC, Audio] Bit016-031 - Block Size Max: 4608 [FLAC, FLAC, Audio] Bit032-055 - Frame Size Min: 16777215 [FLAC, FLAC, Audio] Bit056-079 - Frame Size Max: 0 [FLAC, FLAC, Audio] Bit080-099 - Sample Rate: 8000 [FLAC, FLAC, Audio] Bit100-102 - Channels: 2 [FLAC, FLAC, Audio] Bit103-107 - Bits Per Sample: 8 [FLAC, FLAC, Audio] Bit108-143 - Total Samples: 0 [Vorbis, Vorbis, Audio] vendor - Vendor: reference libFLAC 1.1.2 20050205 [Vorbis, Vorbis, Audio] REPLAYGAIN_TRACK_PEAK - Replay Gain Track Peak: 0.00000000 [Vorbis, Vorbis, Audio] REPLAYGAIN_TRACK_GAIN - Replay Gain Track Gain: -24601.00 dB [Vorbis, Vorbis, Audio] REPLAYGAIN_ALBUM_PEAK - Replay Gain Album Peak: 0.00000000 [Vorbis, Vorbis, Audio] REPLAYGAIN_ALBUM_GAIN - Replay Gain Album Gain: -24601.00 dB [Vorbis, Vorbis, Audio] TITLE - Title: ExifTool test [Vorbis, Vorbis, Author] COPYRIGHT - Copyright: Phil Harvey ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/FLAC_3.out�������������������������������������������������������������������000644 �000765 �000024 �00000002321 12546457275 016325� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: FLAC.ogg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 151 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:11:13 16:10:54-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:09-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: OGG [File, File, Image] FileTypeExtension - File Type Extension: ogg [File, File, Image] MIMEType - MIME Type: audio/x-ogg [FLAC, FLAC, Audio] Bit000-015 - Block Size Min: 4608 [FLAC, FLAC, Audio] Bit016-031 - Block Size Max: 4608 [FLAC, FLAC, Audio] Bit032-055 - Frame Size Min: 0 [FLAC, FLAC, Audio] Bit056-079 - Frame Size Max: 0 [FLAC, FLAC, Audio] Bit080-099 - Sample Rate: 8000 [FLAC, FLAC, Audio] Bit100-102 - Channels: 2 [FLAC, FLAC, Audio] Bit103-107 - Bits Per Sample: 8 [FLAC, FLAC, Audio] Bit108-143 - Total Samples: 0 [Vorbis, Vorbis, Audio] vendor - Vendor: reference libFLAC 1.1.2 20050205 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Flash.t����������������������������������������������������������������������000644 �000765 �000024 �00000001670 11327642463 016064� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Flash.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Flash; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Flash'; my $testnum = 1; # test 2: Extract information from Flash.swf { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Flash.swf'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Extract information from Flash.flv { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Flash.flv'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ������������������������������������������������������������������������Image-ExifTool-10.10/t/Flash_2.out������������������������������������������������������������������000644 �000765 �000024 �00000002521 12546457275 016656� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Flash.swf [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 384 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2008:10:23 16:27:45-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:09-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: SWF [File, File, Image] FileTypeExtension - File Type Extension: swf [File, File, Image] MIMEType - MIME Type: application/x-shockwave-flash [Flash, Flash, Video] FlashVersion - Flash Version: 6 [Flash, Flash, Video] Compressed - Compressed: False [Flash, Flash, Video] ImageWidth - Image Width: 50 [Flash, Flash, Video] ImageHeight - Image Height: 50 [Flash, Flash, Video] FrameRate - Frame Rate: 12 [Flash, Flash, Video] FrameCount - Frame Count: 1 [Flash, Flash, Video] Duration - Duration: 0.08 s [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 7.50 [XMP, XMP-pdf, Author] Author - Author: Phil [Composite, Composite, Image] ImageSize - Image Size: 50x50 [Composite, Composite, Image] Megapixels - Megapixels: 0.003 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Flash_3.out������������������������������������������������������������������000644 �000765 �000024 �00000006561 12546457275 016667� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Flash.flv [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1358 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2007:06:12 12:15:04-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:09-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: FLV [File, File, Image] FileTypeExtension - File Type Extension: flv [File, File, Image] MIMEType - MIME Type: video/x-flv [Flash, Flash, Video] hasKeyframes - Has Key Frames: Yes [Flash, Flash, Video] CuePoint0Name - Cue Point 0 Name: Cue1 [Flash, Flash, Video] CuePoint0Time - Cue Point 0 Time: 0 [Flash, Flash, Video] CuePoint0Type - Cue Point 0 Type: event [Flash, Flash, Video] CuePoint1Name - Cue Point 1 Name: Cue2 [Flash, Flash, Video] CuePoint1Time - Cue Point 1 Time: 0.324 [Flash, Flash, Video] CuePoint1ParameterParam1 - Cue Point 1 Parameter Param 1: value1 [Flash, Flash, Video] CuePoint1ParameterParam2 - Cue Point 1 Parameter Param 2: value2 [Flash, Flash, Video] CuePoint1Type - Cue Point 1 Type: navigation [Flash, Flash, Audio] audiodatarate - Audio Bitrate: 65.8 kbps [Flash, Flash, Video] hasVideo - Has Video: Yes [Flash, Flash, Audio] stereo - Stereo: No [Flash, Flash, Video] canSeekToEnd - Can Seek To End: Yes [Flash, Flash, Video] framerate - Frame Rate: 20 [Flash, Flash, Audio] audiosamplerate - Audio Sample Rate: 44000 [Flash, Flash, Video] videocodecid - Video Codec ID: 4 [Flash, Flash, Video] datasize - Data Size: 187002 [Flash, Flash, Video] lasttimestamp - Last Time Stamp: 3.039 [Flash, Flash, Audio] audiosamplesize - Audio Sample Size: 16 [Flash, Flash, Audio] audiosize - Audio Size: 26299 [Flash, Flash, Audio] hasAudio - Has Audio: Yes [Flash, Flash, Audio] audiodelay - Audio Delay: 0.039 [Flash, Flash, Video] videosize - Video Size: 159544 [Flash, Flash, Time] metadatadate - Metadata Date: 2007:06:12 15:03:11.528553-04:00 [Flash, Flash, Video] metadatacreator - Metadata Creator: inlet media FLVTool2 v1.0.6 - http://www.inlet-media.de/flvtool2 [Flash, Flash, Video] test - Test: this [Flash, Flash, Video] lastkeyframetimestamp - Last Key Frame Time: 3.039 [Flash, Flash, Video] height - Image Height: 240 [Flash, Flash, Video] filesize - File Size Bytes: 187691 [Flash, Flash, Video] hasMetadata - Has Metadata: Yes [Flash, Flash, Video] keyframesTimes - Key Frames Times: 0.039, 0.363, 1.839, 3.039 [Flash, Flash, Video] keyframesFilepositions - Key Frame Positions: 1463, 32674, 143320, 181650 [Flash, Flash, Audio] audiocodecid - Audio Codec ID: 2 [Flash, Flash, Video] videodatarate - Video Bitrate: 419 kbps [Flash, Flash, Video] duration - Duration: 3.09 s [Flash, Flash, Video] hasCuePoints - Has Cue Points: Yes [Flash, Flash, Video] width - Image Width: 320 [Flash, Flash, Audio] Bit0-3 - Audio Encoding: MP3 [Flash, Flash, Audio] Bit4-5 - Audio Sample Rate: 11025 [Flash, Flash, Audio] Bit6 - Audio Bits Per Sample: 16 [Flash, Flash, Audio] Bit7 - Audio Channels: 1 (mono) [Flash, Flash, Video] Bit4-7 - Video Encoding: On2 VP6 [Composite, Composite, Image] ImageSize - Image Size: 320x240 [Composite, Composite, Image] Megapixels - Megapixels: 0.077 �����������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/FlashPix.t�������������������������������������������������������������������000644 �000765 �000024 �00000001527 11327642463 016546� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/FlashPix.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::FlashPix; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'FlashPix'; my $testnum = 1; # test 2: Extract information from FlashPix.ppt { ++$testnum; my $exifTool = new Image::ExifTool; # omit FileSize since file is 9.5kB exactly and rounding errors # in Windows Cygwin Perl 5.8.2 round this down to 9kB in printout my $info = $exifTool->ImageInfo('t/images/FlashPix.ppt','-filesize'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/FlashPix_2.out���������������������������������������������������������������000644 �000765 �000024 �00000006133 12546457275 017342� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: FlashPix.ppt [File, System, Image] Directory - Directory: t/images [File, System, Time] FileModifyDate - File Modification Date/Time: 2007:02:09 11:47:07-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:15-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PPT [File, File, Image] FileTypeExtension - File Type Extension: ppt [File, File, Image] MIMEType - MIME Type: application/vnd.ms-powerpoint [FlashPix, FlashPix, Other] 1 - Code Page: Mac Roman (Western European) [FlashPix, FlashPix, Document] 2 - Title: title [FlashPix, FlashPix, Document] 3 - Subject: subject [FlashPix, FlashPix, Author] 4 - Author: author [FlashPix, FlashPix, Document] 5 - Keywords: keywords [FlashPix, FlashPix, Document] 6 - Comments: comments [FlashPix, FlashPix, Author] 8 - Last Modified By: user name [FlashPix, FlashPix, Document] 9 - Revision Number: 1 [FlashPix, FlashPix, Document] 18 - Software: Microsoft PowerPoint [FlashPix, FlashPix, Document] 10 - Total Edit Time: 4.4 minutes [FlashPix, FlashPix, Time] 12 - Create Date: 2007:02:09 16:23:23 [FlashPix, FlashPix, Time] 13 - Modify Date: 2007:02:09 16:27:49 [FlashPix, FlashPix, Document] 15 - Words: 4 [FlashPix, FlashPix, Other] 1 - Code Page: Mac Roman (Western European) [FlashPix, FlashPix, Document] 2 - Category: category [FlashPix, FlashPix, Document] 3 - Presentation Target: On-screen Show [FlashPix, FlashPix, Document] 14 - Manager: manager [FlashPix, FlashPix, Document] 15 - Company: company [FlashPix, FlashPix, Document] 4 - Bytes: 4610 [FlashPix, FlashPix, Document] 6 - Paragraphs: 4 [FlashPix, FlashPix, Document] 7 - Slides: 1 [FlashPix, FlashPix, Document] 8 - Notes: 0 [FlashPix, FlashPix, Document] 9 - Hidden Slides: 0 [FlashPix, FlashPix, Document] 10 - MM Clips: 0 [FlashPix, FlashPix, Document] 23 - App Version: 10.2418 [FlashPix, FlashPix, Document] 11 - Scale Crop: No [FlashPix, FlashPix, Document] 16 - Links Up To Date: No [FlashPix, FlashPix, Document] 19 - Shared Doc: No [FlashPix, FlashPix, Document] 22 - Hyperlinks Changed: No [FlashPix, FlashPix, Document] 13 - Title Of Parts: Times, Blank Presentation, Title [FlashPix, FlashPix, Document] 12 - Heading Pairs: Fonts Used, 1, Design Template, 1, Slide Titles, 1 [FlashPix, FlashPix, Other] 1 - Code Page: Mac Roman (Western European) [FlashPix, FlashPix, Document] _PID_LINKBASE - Hyperlink Base: hyperlink base [FlashPix, FlashPix, Document] _PID_HLINKS - Hyperlinks: http://owl.phy.queensu.ca/, http://www.microsoft.com/mac/#TEST, mailto:phil?subject=subject [FlashPix, FlashPix, Document] Custom Text - Custom Text: customtext [FlashPix, FlashPix, Document] Custom Number - Custom Number: 42 [FlashPix, FlashPix, Document] Custom Date - Custom Date: 2007:01:09 05:00:00 [FlashPix, FlashPix, Document] Custom Boolean - Custom Boolean: 1 [FlashPix, FlashPix, Image] Current User - Current User: user name �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/FLIR.t�����������������������������������������������������������������������000644 �000765 �000024 �00000001414 12132063740 015545� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/FLIR.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::FLIR; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'FLIR'; my $testnum = 1; # test 2: Extract information from FLIR JPG and FPF files { my $file; foreach $file ('FLIR.jpg', 'FLIR.fpf') { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo("t/images/$file"); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } } # end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/FLIR_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000014213 12546457275 016356� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: FLIR.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 7.2 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2013:04:02 10:46:04-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:38-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [JFIF, JFIF, Image] 0 - JFIF Version: 1.01 [JFIF, JFIF, Image] 2 - Resolution Unit: None [JFIF, JFIF, Image] 3 - X Resolution: 1 [JFIF, JFIF, Image] 5 - Y Resolution: 1 [EXIF, IFD0, Camera] 271 - Make: FLIR Systems AB [EXIF, IFD0, Camera] 272 - Camera Model Name: FLIR_i7 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Common_dll v8.0.6b1 [EXIF, IFD0, Time] 306 - Modify Date: 2012:02:11 14:17:08 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/32 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2012:02:11 14:17:08 [EXIF, ExifIFD, Time] 36868 - Create Date: 2012:02:11 14:17:08 [EXIF, ExifIFD, Image] 37121 - Components Configuration: -, Cr, Cb, Y [EXIF, ExifIFD, Camera] 37382 - Subject Distance: 1 m [EXIF, ExifIFD, Camera] 37386 - Focal Length: 6.7 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 240 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 240 [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 1 [EXIF, ExifIFD, Image] 42016 - Image Unique ID: 72AE2CD63D6C4AE1678418BE48230029 [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 872 [EXIF, IFD1, Image] 514 - Thumbnail Length: 2314 [MakerNotes, FLIR, Camera] 1 - Image Temperature Max: 308 [MakerNotes, FLIR, Camera] 2 - Image Temperature Min: 281 [MakerNotes, FLIR, Camera] 3 - Emissivity: 0.80 [APP1, FLIR, Image] 4 - Creator Software: [APP1, FLIR, Image] 0 - Palette Colors: 224 [APP1, FLIR, Image] 6 - Above Color: 170 128 128 [APP1, FLIR, Image] 9 - Below Color: 50 128 128 [APP1, FLIR, Image] 12 - Overflow Color: 67 216 98 [APP1, FLIR, Image] 15 - Underflow Color: 41 110 240 [APP1, FLIR, Image] 18 - Isotherm 1 Color: 100 128 128 [APP1, FLIR, Image] 21 - Isotherm 2 Color: 100 110 240 [APP1, FLIR, Image] 26 - Palette Method: 0 [APP1, FLIR, Image] 27 - Palette Stretch: 2 [APP1, FLIR, Image] 48 - Palette File Name: \FlashFS\system\iron.pal [APP1, FLIR, Image] 80 - Palette Name: Iron [APP1, FLIR, Image] 112 - Palette: (Binary data 672 bytes) [APP1, FLIR, Camera] 32 - Emissivity: 0.80 [APP1, FLIR, Camera] 36 - Object Distance: 1.00 m [APP1, FLIR, Camera] 40 - Reflected Apparent Temperature: 20.0 C [APP1, FLIR, Camera] 44 - Atmospheric Temperature: 20.0 C [APP1, FLIR, Camera] 48 - IR Window Temperature: 20.0 C [APP1, FLIR, Camera] 52 - IR Window Transmission: 1.00 [APP1, FLIR, Camera] 60 - Relative Humidity: 50.0 % [APP1, FLIR, Camera] 88 - Planck R1: 13799.269 [APP1, FLIR, Camera] 92 - Planck B: 1374.5 [APP1, FLIR, Camera] 96 - Planck F: 1.35 [APP1, FLIR, Camera] 112 - Atmospheric Trans Alpha 1: 0.006569 [APP1, FLIR, Camera] 116 - Atmospheric Trans Alpha 2: 0.012620 [APP1, FLIR, Camera] 120 - Atmospheric Trans Beta 1: -0.002276 [APP1, FLIR, Camera] 124 - Atmospheric Trans Beta 2: -0.006670 [APP1, FLIR, Camera] 128 - Atmospheric Trans X: 1.900000 [APP1, FLIR, Camera] 144 - Camera Temperature Range Max: 250.0 C [APP1, FLIR, Camera] 148 - Camera Temperature Range Min: -0.0 C [APP1, FLIR, Camera] 212 - Camera Model: FLIR_i7 [APP1, FLIR, Camera] 244 - Camera Part Number: T197600 [APP1, FLIR, Camera] 260 - Camera Serial Number: 470023842 [APP1, FLIR, Camera] 276 - Camera Software: 8.1.1 [APP1, FLIR, Camera] 368 - Lens Model: FOL7 [APP1, FLIR, Camera] 400 - Lens Part Number: [APP1, FLIR, Camera] 416 - Lens Serial Number: [APP1, FLIR, Camera] 436 - Field Of View: 25.0 deg [APP1, FLIR, Camera] 492 - Filter Model: [APP1, FLIR, Camera] 508 - Filter Part Number: [APP1, FLIR, Camera] 540 - Filter Serial Number: [APP1, FLIR, Camera] 776 - Planck O: -6646 [APP1, FLIR, Camera] 780 - Planck R2: 0.022241818 [APP1, FLIR, Image] 824 - Raw Value Median: 12582 [APP1, FLIR, Image] 828 - Raw Value Range: 1980 [APP1, FLIR, Time] 900 - Date/Time Original: 2012:02:11 14:17:08.253+01:00 [APP1, FLIR, Camera] 912 - Focus Step Count: 0 [APP1, FLIR, Camera] 1116 - Focus Distance: 2.0 m [APP1, FLIR, Image] 1 - Raw Thermal Image Width: 120 [APP1, FLIR, Image] 2 - Raw Thermal Image Height: 120 [APP1, FLIR, Image] 16 - Raw Thermal Image Type: PNG [APP1, FLIR, Preview] 16.1 - Raw Thermal Image: (Binary data 79 bytes) [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, FLIR, Camera] PeakSpectralSensitivity - Peak Spectral Sensitivity: 10.5 um [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/32 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 2314 bytes) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 6.7 mm �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/FLIR_3.out�������������������������������������������������������������������000644 �000765 �000024 �00000005323 12546457275 016361� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: FLIR.fpf [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 914 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2013:04:11 15:17:20-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:09-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: FPF [File, File, Image] FileTypeExtension - File Type Extension: fpf [File, File, Image] MIMEType - MIME Type: application/unknown [FLIR, FLIR, Image] 32 - FPF Version: 2 [FLIR, FLIR, Image] 36 - Image Data Offset: 892 [FLIR, FLIR, Image] 40 - Image Type: Temperature [FLIR, FLIR, Image] 42 - Image Pixel Format: 4-byte float [FLIR, FLIR, Image] 44 - Image Width: 160 [FLIR, FLIR, Image] 46 - Image Height: 120 [FLIR, FLIR, Image] 48 - External Trigger Count: 0 [FLIR, FLIR, Image] 52 - Sequence Frame Number: 1 [FLIR, FLIR, Camera] 120 - Camera Model: FLIR E40 [FLIR, FLIR, Camera] 152 - Camera Part Number: 49001-2001 [FLIR, FLIR, Camera] 184 - Camera Serial Number: 49033333 [FLIR, FLIR, Camera] 216 - Camera Temperature Range Min: -20.0 C [FLIR, FLIR, Camera] 220 - Camera Temperature Range Max: 120.0 C [FLIR, FLIR, Camera] 224 - Lens Model: FOL18 [FLIR, FLIR, Camera] 256 - Lens Part Number: [FLIR, FLIR, Camera] 288 - Lens Serial Number: [FLIR, FLIR, Camera] 320 - Filter Model: [FLIR, FLIR, Camera] 336 - Filter Part Number: [FLIR, FLIR, Camera] 384 - Filter Serial Number: [FLIR, FLIR, Image] 480 - Emissivity: 0.95 [FLIR, FLIR, Image] 484 - Object Distance: 1.00 m [FLIR, FLIR, Image] 488 - Reflected Apparent Temperature: 20.0 C [FLIR, FLIR, Image] 492 - Atmospheric Temperature: 20.0 C [FLIR, FLIR, Image] 496 - Relative Humidity: 50.0 % [FLIR, FLIR, Image] 500 - Computed Atmospheric Trans: 0.99 [FLIR, FLIR, Image] 504 - Estimated Atmospheric Trans: 0.00 [FLIR, FLIR, Image] 508 - Reference Temperature: 20.0 C [FLIR, FLIR, Camera] 512 - IR Window Temperature: 20.0 C [FLIR, FLIR, Camera] 516 - IR Window Transmission: 1.00 [FLIR, FLIR, Time] 584 - Date/Time Original: 2013:02:22 11:19:20.891 [FLIR, FLIR, Image] 676 - Camera Scale Min: 267.3 [FLIR, FLIR, Image] 680 - Camera Scale Max: 277.1 [FLIR, FLIR, Image] 684 - Calculated Scale Min: 260.0 [FLIR, FLIR, Image] 688 - Calculated Scale Max: 279.6 [FLIR, FLIR, Image] 692 - Actual Scale Min: 267.3 [FLIR, FLIR, Image] 696 - Actual Scale Max: 277.1 [Composite, Composite, Image] ImageSize - Image Size: 160x120 [Composite, Composite, Image] Megapixels - Megapixels: 0.019 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Font.t�����������������������������������������������������������������������000644 �000765 �000024 �00000001420 11327642463 015726� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Font.t". BEGIN { $| = 1; print "1..7\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Font; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Font'; my $testnum = 1; # tests 2-7: Extract information from test Font files { my $exifTool = new Image::ExifTool; my $type; foreach $type (qw(afm dfont pfa pfb pfm ttf)) { ++$testnum; my $info = $exifTool->ImageInfo("t/images/Font.$type"); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } } # end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Font_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000003162 12546457275 016531� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Font.afm [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 735 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:01:18 14:13:19-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:15-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: AFM [File, File, Image] FileTypeExtension - File Type Extension: afm [File, File, Image] MIMEType - MIME Type: application/x-font-afm [File, File, Image] Comment - Comment: Generated by pfaedit [Font, Font, Time] Creation Date - Create Date: Sat Sep 4 16:12:41 2004 [Font, Font, Document] FontName - Font Name: NimbusSanL-ReguCondItal [Font, Font, Document] FullName - Full Name: Nimbus Sans L Condensed Regular Italic [Font, Font, Document] FamilyName - Font Family: Nimbus Sans L Condensed [Font, Font, Document] Weight - Weight: Regular [Font, Font, Author] Notice - Notice: Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development; Cyrillic glyphs added by Valek Filippov (C) 2001-2004 [Font, Font, Document] Version - Version: 1.06 [Font, Font, Document] EncodingScheme - Encoding Scheme: AdobeStandardEncoding [Font, Font, Document] CapHeight - Cap Height: 718 [Font, Font, Document] XHeight - X Height: 523 [Font, Font, Document] Ascender - Ascender: 718 [Font, Font, Document] Descender - Descender: -207 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Font_3.out�������������������������������������������������������������������000644 �000765 �000024 �00000005342 12546457275 016534� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Font.dfont [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1744 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:01:18 19:08:47-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:15-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: DFONT [File, File, Image] FileTypeExtension - File Type Extension: dfont [File, File, Image] MIMEType - MIME Type: application/x-dfont [Font, Font, Author] 0 - Copyright: © 1987, 1990, 1994, 2001, 2002 Adobe Systems Incorporated. All rights reserved. [Font, Font, Document] 1 - Font Family: Stencil Std [Font, Font, Document] 2 - Font Subfamily: Bold [Font, Font, Document] 3 - Font Subfamily ID: 2.025;ADBE;StencilStd [Font, Font, Document] 4 - Font Name: Stencil Std Bold [Font, Font, Document] 5 - Name Table Version: Version 2.025;PS 002.000;hotconv 1.0.50;makeotf.lib2.0.16970 [Font, Font, Document] 6 - PostScript Font Name: StencilStd [Font, Font, Document] 7 - Trademark: Please refer to the Copyright section for the font trademark attribution notices. [Font, Font, Document] 9 - Designer: Gerry Powell [Font, Font, Document] 11 - Vendor URL: http://www.adobe.com/type [Font, Font, Document] 14 - License Info URL: http://www.adobe.com/type/legal.html [Font, Font, Document] 18 - Compatible Font Name: Stencil Std [Font, Font, Author] 0-en-US - Copyright (en-US): © 1987, 1990, 1994, 2001, 2002 Adobe Systems Incorporated. All rights reserved. [Font, Font, Document] 1-en-US - Font Family (en-US): Stencil Std [Font, Font, Document] 2-en-US - Font Subfamily (en-US): Regular [Font, Font, Document] 3-en-US - Font Subfamily ID (en-US): 2.025;ADBE;StencilStd [Font, Font, Document] 4-en-US - Font Name (en-US): StencilStd [Font, Font, Document] 5-en-US - Name Table Version (en-US): Version 2.025;PS 002.000;hotconv 1.0.50;makeotf.lib2.0.16970 [Font, Font, Document] 6-en-US - Post Script Font Name (en-US): StencilStd [Font, Font, Document] 7-en-US - Trademark (en-US): Please refer to the Copyright section for the font trademark attribution notices. [Font, Font, Document] 9-en-US - Designer (en-US): Gerry Powell [Font, Font, Document] 11-en-US - Vendor URL (en-US): http://www.adobe.com/type [Font, Font, Document] 14-en-US - License Info URL (en-US): http://www.adobe.com/type/legal.html [Font, Font, Document] 17-en-US - Preferred Subfamily (en-US): Bold [RSRC, RSRC, Document] vers_0x0001 - Application Version: ExifTool 8.0.7 DFONT Test ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Font_4.out�������������������������������������������������������������������000644 �000765 �000024 �00000003623 12546457275 016535� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Font.pfa [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1559 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:01:18 14:10:30-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:15-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PFA [File, File, Image] FileTypeExtension - File Type Extension: pfa [File, File, Image] MIMEType - MIME Type: application/x-font-type1 [File, File, Image] Comment - Comment: 1;% 2004-2-16: Created.;Generated by FontForge 20040531 (http://fontforge.sf.net/) [PostScript, PostScript, Image] Title - Title: YehudaCLM-Bold [PostScript, PostScript, Time] CreationDate - Create Date: Sat Jun 12 19:16:03 2004 [PostScript, PostScript, Image] Creator - Creator: Maxim Iorsh [Font, Font, Document] FontType - Font Type: 1 [Font, Font, Document] FontName - Font Name: YehudaCLM-Bold [Font, Font, Document] version - Version: 0.100 [Font, Font, Author] Notice - Notice: Copyright .51 2004 by Maxim Iorsh (iorsh@math.technion.ac.il). Distributed under the terms of GNU General Public License version 2(http://www.gnu.org/licenses/gpl.html). ;All rights reserved. [Font, Font, Document] FullName - Full Name: Yehuda CLM Bold [Font, Font, Document] FamilyName - Font Family: Yehuda CLM [Font, Font, Document] Weight - Weight: Bold [Font, Font, Document] FSType - FS Type: 0 [Font, Font, Document] ItalicAngle - Italic Angle: 0 [Font, Font, Document] isFixedPitch - Is Fixed Pitch: false [Font, Font, Document] UnderlinePosition - Underline Position: -100 [Font, Font, Document] UnderlineThickness - Underline Thickness: 50 �������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Font_5.out�������������������������������������������������������������������000644 �000765 �000024 �00000003661 12546457275 016540� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Font.pfb [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1423 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:01:18 14:10:30-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:15-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PFB [File, File, Image] FileTypeExtension - File Type Extension: pfb [File, File, Image] MIMEType - MIME Type: application/x-font-type1 [File, File, Image] Comment - Comment: 1;Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development; Cyri;Generated by FontForge 20040824 (http://fontforge.sf.net/) [PostScript, PostScript, Image] Title - Title: NimbusSanL-ReguCondItal [PostScript, PostScript, Time] CreationDate - Create Date: Sat Sep 4 16:12:41 2004 [PostScript, PostScript, Image] Creator - Creator: frob [Font, Font, Document] FontType - Font Type: 1 [Font, Font, Document] FontName - Font Name: NimbusSanL-ReguCondItal [Font, Font, Document] version - Version: 1.06 [Font, Font, Author] Notice - Notice: Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development; Cyrillic glyphs added by Valek Filippov (C) 2001-2004 [Font, Font, Document] FullName - Full Name: Nimbus Sans L Condensed Regular Italic [Font, Font, Document] FamilyName - Font Family: Nimbus Sans L Condensed [Font, Font, Document] Weight - Weight: Regular [Font, Font, Document] FSType - FS Type: 12 [Font, Font, Document] ItalicAngle - Italic Angle: -9.9 [Font, Font, Document] isFixedPitch - Is Fixed Pitch: false [Font, Font, Document] UnderlinePosition - Underline Position: -100 [Font, Font, Document] UnderlineThickness - Underline Thickness: 50 �������������������������������������������������������������������������������Image-ExifTool-10.10/t/Font_6.out�������������������������������������������������������������������000644 �000765 �000024 �00000003662 12546457275 016542� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Font.pfm [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 240 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:01:18 14:10:30-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:15-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PFM [File, File, Image] FileTypeExtension - File Type Extension: pfm [File, File, Image] MIMEType - MIME Type: application/x-font-type1 [Font, Font, Document] 0 - PFM Version: 1.00 [Font, Font, Author] 6 - Copyright: Copyright URW Software, Copyright 1992 by URW [Font, Font, Document] 66 - Font Type: 129 [Font, Font, Document] 68 - Point Size: 10 [Font, Font, Document] 70 - Y Resolution: 300 [Font, Font, Document] 72 - X Resolution: 300 [Font, Font, Document] 74 - Ascent: 700 [Font, Font, Document] 76 - Internal Leading: 0 [Font, Font, Document] 78 - External Leading: 0 [Font, Font, Document] 80 - Italic: 0 [Font, Font, Document] 81 - Underline: 0 [Font, Font, Document] 82 - Strikeout: 0 [Font, Font, Document] 83 - Weight: 600 [Font, Font, Document] 85 - Character Set: 0 [Font, Font, Document] 86 - Pix Width: 0 [Font, Font, Document] 88 - Pix Height: 0 [Font, Font, Document] 90 - Pitch And Family: 1 [Font, Font, Document] 91 - Avg Width: 578 [Font, Font, Document] 93 - Max Width: 1092 [Font, Font, Document] 95 - First Char: 32 [Font, Font, Document] 96 - Last Char: 255 [Font, Font, Document] 97 - Default Char: 32 [Font, Font, Document] 98 - Break Char: 0 [Font, Font, Document] 99 - Width Bytes: 0 [Font, Font, Document] fontname - Font Name: URWGroT [Font, Font, Document] postfont - PostScript Font Name: URWGroteskT-Bold ������������������������������������������������������������������������������Image-ExifTool-10.10/t/Font_7.out�������������������������������������������������������������������000644 �000765 �000024 �00000004444 12546457275 016542� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Font.ttf [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1252 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:01:21 09:37:50-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:15-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: TTF [File, File, Image] FileTypeExtension - File Type Extension: ttf [File, File, Image] MIMEType - MIME Type: application/x-font-ttf [Font, Font, Author] 0 - Copyright: © Apple Computer, Inc. 1991-1995 [Font, Font, Document] 1 - Font Family: Raanana [Font, Font, Document] 2 - Font Subfamily: Regular [Font, Font, Document] 3 - Font Subfamily ID: Raanana; 5.0d2e1; Wed, May 26, 2004 [Font, Font, Document] 4 - Font Name: Raanana [Font, Font, Document] 5 - Name Table Version: 5.0d2e1 [Font, Font, Document] 6 - PostScript Font Name: Raanana [Font, Font, Document] 8 - Manufacturer: Apple Computer, Inc. [Font, Font, Document] 2-fr - Font Subfamily (fr): Régulier [Font, Font, Document] 2-de - Font Subfamily (de): Normal [Font, Font, Document] 2-it - Font Subfamily (it): Regolare [Font, Font, Document] 2-nl - Font Subfamily (nl): Regelmatig [Font, Font, Document] 2-sv - Font Subfamily (sv): Normalt [Font, Font, Document] 2-es - Font Subfamily (es): Normal [Font, Font, Document] 2-da - Font Subfamily (da): Almindelig [Font, Font, Document] 2-pt - Font Subfamily (pt): Normal [Font, Font, Document] 2-no - Font Subfamily (no): Vanlig [Font, Font, Document] 2-fi - Font Subfamily (fi): Normaali [Font, Font, Document] 2-ja - Font Subfamily (ja): レギュラー [Font, Font, Document] 2-zh-TW - Font Subfamily (zh-TW): 標準體 [Font, Font, Document] 2-ko - Font Subfamily (ko): ì¼ë°˜ [Font, Font, Author] 0-he - Copyright (he): (c) Apple Computer, Inc. 1991-1995 [Font, Font, Document] 1-he - Font Family (he): רעננה [Font, Font, Document] 2-he - Font Subfamily (he): Regular [Font, Font, Document] 4-he - Font Name (he): רעננה [Font, Font, Document] 2-zh-CN - Font Subfamily (zh-CN): 常规 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/FotoStation.t����������������������������������������������������������������000644 �000765 �000024 �00000001753 11327642463 017302� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/FotoStation.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::FotoStation; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'FotoStation'; my $testnum = 1; # test 2: Extract information from FotoStation.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/FotoStation.jpg', {Duplicates => 1}); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Test writing some information { ++$testnum; my @writeInfo = ( ['Rotation' => 0 ], ['Keywords' => 'FotoStation' ], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, undef, 1); print "ok $testnum\n"; } # end ���������������������Image-ExifTool-10.10/t/FotoStation_2.out������������������������������������������������������������000644 �000765 �000024 �00000005043 12546457275 020074� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: FotoStation.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 4.2 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:10:28 14:44:59-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:45:42-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [FotoStation, FotoStation, Image] 0 - Original Image Width: 1536 [FotoStation, FotoStation, Image] 1 - Original Image Height: 1024 [FotoStation, FotoStation, Image] 2 - Color Planes: 3 [FotoStation, FotoStation, Image] 3 - XY Resolution: 38.626 [FotoStation, FotoStation, Image] 4 - Rotation: 90 [FotoStation, FotoStation, Image] 6 - Crop Left: 18.422% [FotoStation, FotoStation, Image] 7 - Crop Top: 24.458% [FotoStation, FotoStation, Image] 8 - Crop Right: 83.035% [FotoStation, FotoStation, Image] 9 - Crop Bottom: 77.817% [FotoStation, FotoStation, Image] 11 - Crop Rotation: 0 [IPTC, IPTC2, Other] 0 - Application Record Version: 2 [IPTC, IPTC2, Other] 7 - Edit Status: Edit Status [IPTC, IPTC2, Other] 10 - Urgency: 1 (most urgent) [IPTC, IPTC2, Other] 15 - Category: Cat [IPTC, IPTC2, Other] 120 - Caption-Abstract: Caption *** Local Caption *** Local Caption [IPTC, IPTC2, Other] 40 - Special Instructions: Special Instructions [IPTC, IPTC2, Other] 75 - Object Cycle: Unknown (Afternoon) [IPTC, IPTC2, Other] 103 - Original Transmission Reference: OTR [IPTC, IPTC2, Image] 200 - Object Preview File Format: Unknown (Custom Field 01) [IPTC, IPTC2, Image] 201 - Object Preview File Version: Custom Field 02 [IPTC, IPTC2, Preview] 202 - Object Preview Data: (Binary data 15 bytes) [IPTC, IPTC2, Other] 230 - Document Notes: Document Notes [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/FotoStation_3.out������������������������������������������������������������000644 �000765 �000024 �00000000221 10521134670 020044� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[IPTC, IPTC, Other] 25 - Keywords: FotoStation [IPTC, IPTC2, Other] 25 - Keywords: FotoStation [FotoStation, FotoStation, Image] 4 - Rotation: 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/FujiFilm.t�������������������������������������������������������������������000644 �000765 �000024 �00000004565 12546457275 016553� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/FujiFilm.t". BEGIN { $| = 1; print "1..6\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::FujiFilm; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'FujiFilm'; my $testnum = 1; # test 2: Extract information from FujiFilm.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/FujiFilm.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( ['CreateDate','2005:01:06 11:51:09'], ['WhiteBalance', 'day white', 'Group', 'MakerNotes'], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum); print "ok $testnum\n"; } # test 4: Extract information from FujiFilm.raf { ++$testnum; my $exifTool = new Image::ExifTool; my @tags = qw(-filename -directory -filemodifydate -fileaccessdate -filecreatedate -fileinodechangedate -filepermissions); my $info = $exifTool->ImageInfo('t/images/FujiFilm.raf', @tags, {Duplicates=>1}); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # tests 5-6: Write writing a RAF and changing it back again in memory { ++$testnum; my $exifTool = new Image::ExifTool; # set IgnoreMinorErrors option to allow invalid JpgFromRaw to be written $exifTool->SetNewValue(UserComment => 'test comment'); my $testfile = "t/${testname}_${testnum}_failed.raf"; unlink $testfile; $exifTool->WriteInfo('t/images/FujiFilm.raf', $testfile); my $info = $exifTool->ImageInfo($testfile, 'UserComment'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; ++$testnum; my $outfile; # pad out comment to make image the same size as the original $exifTool->SetNewValue(UserComment => ' ' x 248); $exifTool->WriteInfo($testfile, \$outfile); $info = $exifTool->ImageInfo(\$outfile, {Duplicates=>1}); if (check($exifTool, $info, $testname, $testnum, 4)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/FujiFilm_2.out���������������������������������������������������������������000644 �000765 �000024 �00000012371 12546457275 017332� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: FujiFilm.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1373 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:04 14:02:27-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:38-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - Modify Date: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: [EXIF, ExifIFD, Image] 33437 - F Number: 3.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 1.6 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/64 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 1600 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1200 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3053 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3053 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y Cb Cr Positioning: Co-sited [MakerNotes, FujiFilm, Camera] 0 - Version: 0130 [MakerNotes, FujiFilm, Camera] 4096 - Quality: NORMAL [MakerNotes, FujiFilm, Camera] 4097 - Sharpness: Normal [MakerNotes, FujiFilm, Camera] 4098 - White Balance: Auto [MakerNotes, FujiFilm, Camera] 4112 - Fuji Flash Mode: Red-eye reduction [MakerNotes, FujiFilm, Camera] 4113 - Flash Exposure Comp: 0 [MakerNotes, FujiFilm, Camera] 4128 - Macro: Off [MakerNotes, FujiFilm, Camera] 4129 - Focus Mode: Auto [MakerNotes, FujiFilm, Camera] 4144 - Slow Sync: Off [MakerNotes, FujiFilm, Camera] 4145 - Picture Mode: Auto [MakerNotes, FujiFilm, Camera] 4352 - Auto Bracketing: Off [MakerNotes, FujiFilm, Camera] 4864 - Blur Warning: None [MakerNotes, FujiFilm, Camera] 4865 - Focus Warning: Good [MakerNotes, FujiFilm, Camera] 4866 - Exposure Warning: Good [Composite, Composite, Image] Aperture - Aperture: 3.5 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 6.6 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/64 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.005 mm [Composite, Composite, Image] FOV - Field Of View: 48.9 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 6.0 mm (35 mm equivalent: 39.6 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 2.26 m [Composite, Composite, Image] LightValue - Light Value: 9.6 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/FujiFilm_3.out���������������������������������������������������������������000644 �000765 �000024 �00000012506 12546457275 017333� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: FujiFilm_3_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 1373 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:42-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:42-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:42-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - Modify Date: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: [EXIF, ExifIFD, Image] 33437 - F Number: 3.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2005:01:06 11:51:09 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 1.6 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/64 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 1600 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1200 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3053 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3053 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y Cb Cr Positioning: Co-sited [MakerNotes, FujiFilm, Camera] 0 - Version: 0130 [MakerNotes, FujiFilm, Camera] 4096 - Quality: NORMAL [MakerNotes, FujiFilm, Camera] 4097 - Sharpness: Normal [MakerNotes, FujiFilm, Camera] 4098 - White Balance: Day White Fluorescent [MakerNotes, FujiFilm, Camera] 4112 - Fuji Flash Mode: Red-eye reduction [MakerNotes, FujiFilm, Camera] 4113 - Flash Exposure Comp: 0 [MakerNotes, FujiFilm, Camera] 4128 - Macro: Off [MakerNotes, FujiFilm, Camera] 4129 - Focus Mode: Auto [MakerNotes, FujiFilm, Camera] 4144 - Slow Sync: Off [MakerNotes, FujiFilm, Camera] 4145 - Picture Mode: Auto [MakerNotes, FujiFilm, Camera] 4352 - Auto Bracketing: Off [MakerNotes, FujiFilm, Camera] 4608 - Fuji Film 0x1200: 0 [MakerNotes, FujiFilm, Camera] 4864 - Blur Warning: None [MakerNotes, FujiFilm, Camera] 4865 - Focus Warning: Good [MakerNotes, FujiFilm, Camera] 4866 - Exposure Warning: Good [Composite, Composite, Image] Aperture - Aperture: 3.5 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/64 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] LightValue - Light Value: 9.6 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 6.6 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.005 mm [Composite, Composite, Image] FOV - Field Of View: 48.9 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 6.0 mm (35 mm equivalent: 39.6 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 2.26 m ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/FujiFilm_4.out���������������������������������������������������������������000644 �000765 �000024 �00000020612 12552462746 017325� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.99 [File, System, Image] FileSize - File Size: 38 kB [File, File, Image] FileType - File Type: RAF [File, File, Image] FileTypeExtension - File Type Extension: raf [File, File, Image] MIMEType - MIME Type: image/x-fujifilm-raf [File, File, Image] RAFVersion - RAF Version: 0106 [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [File, File, Preview] PreviewImage - Preview Image: (Binary data 12167 bytes) [EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePix S5Pro [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Digital Camera FinePix S5Pro Ver1.06 [EXIF, IFD0, Time] 306 - Modify Date: 2007:05:22 13:58:30 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/250 [EXIF, ExifIFD, Image] 33437 - F Number: 8.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Manual [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2007:05:22 13:58:30 [EXIF, ExifIFD, Time] 36868 - Create Date: 2007:05:22 13:58:30 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 3 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/256 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 8.0 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 8.41 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.8 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 70.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 1440 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 960 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 630 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 630 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 105 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, ExifIFD, Camera] 41996 - Subject Distance Range: Unknown [EXIF, GPS, Location] 0 - GPS Version ID: 2.2.0.0 [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 2704 [EXIF, IFD1, Image] 514 - Thumbnail Length: 9362 [EXIF, IFD1, Image] 531 - Y Cb Cr Positioning: Co-sited [MakerNotes, FujiFilm, Camera] 0 - Version: 0130 [MakerNotes, FujiFilm, Camera] 16 - Internal Serial Number: FPX20582698 592D31313436 2007:02:19 8C0020100A84 [MakerNotes, FujiFilm, Camera] 4096 - Quality: NORMAL [MakerNotes, FujiFilm, Camera] 4097 - Sharpness: Normal [MakerNotes, FujiFilm, Camera] 4098 - White Balance: Auto [MakerNotes, FujiFilm, Camera] 4099 - Saturation: Normal [MakerNotes, FujiFilm, Camera] 4100 - Contrast: Normal [MakerNotes, FujiFilm, Camera] 4106 - White Balance Fine Tune: Red +0, Blue +0 [MakerNotes, FujiFilm, Camera] 4107 - Noise Reduction: Normal [MakerNotes, FujiFilm, Camera] 4112 - Fuji Flash Mode: Off [MakerNotes, FujiFilm, Camera] 4113 - Flash Exposure Comp: 0 [MakerNotes, FujiFilm, Camera] 4129 - Focus Mode: Auto [MakerNotes, FujiFilm, Camera] 4130 - AF Mode: Single Point [MakerNotes, FujiFilm, Camera] 4144 - Slow Sync: Off [MakerNotes, FujiFilm, Camera] 4145 - Picture Mode: Manual [MakerNotes, FujiFilm, Camera] 4146 - Exposure Count: 1 [MakerNotes, FujiFilm, Camera] 4352 - Auto Bracketing: Off [MakerNotes, FujiFilm, Camera] 4353 - Sequence Number: 0 [MakerNotes, FujiFilm, Camera] 5120 - Dynamic Range: Wide [MakerNotes, FujiFilm, Camera] 5121 - Film Mode: F0/Standard (Provia) [MakerNotes, FujiFilm, Camera] 5122 - Dynamic Range Setting: Auto (100-400%) [MakerNotes, FujiFilm, Camera] 5124 - Min Focal Length: 28 [MakerNotes, FujiFilm, Camera] 5125 - Max Focal Length: 70 [MakerNotes, FujiFilm, Camera] 5126 - Max Aperture At Min Focal: 2.8 [MakerNotes, FujiFilm, Camera] 5127 - Max Aperture At Max Focal: 2.8 [MakerNotes, FujiFilm, Camera] 16640 - Faces Detected: 0 [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [RAF, RAF, Image] 256 - Raw Image Full Size: 4352x1444 [RAF, RAF, Image] 289 - Raw Image Size: 4288x1440 [RAF, RAF, Image] 304 - Fuji Layout: 1 2 1 0 [RAF, RAF, Image] 8192 - WB GRGB Levels Auto: 384 601 384 515 [RAF, RAF, Image] 8448 - WB GRGB Levels Daylight: 384 601 384 515 [RAF, RAF, Image] 8704 - WB GRGB Levels Cloudy: 384 679 384 438 [RAF, RAF, Image] 8960 - WB GRGB Levels Daylight Fluor: 384 775 384 460 [RAF, RAF, Image] 8961 - WB GRGB Levels Day White Fluor: 384 648 384 573 [RAF, RAF, Image] 8962 - WB GRGB Levels White Fluorescent: 384 644 384 711 [RAF, RAF, Image] 8976 - WB GRGB Levels Warm White Fluor: 384 509 384 878 [RAF, RAF, Image] 8977 - WB GRGB Levels Living Room Warm White Fluor: 384 419 384 920 [RAF, RAF, Image] 9216 - WB GRGB Levels Tungsten: 384 384 384 832 [RAF, RAF, Image] 12272 - WB GRGB Levels: 384 601 384 515 [RAF, RAF, Image] 38480 - Raw Exposure Bias: 0 [RAF, RAF2, Image] 256 - Raw Image Full Size: 4352x1444 [RAF, RAF2, Image] 289 - Raw Image Size: 4284x1440 [RAF, RAF2, Image] 304 - Fuji Layout: 1 2 1 0 [RAF, RAF2, Image] 8192 - WB GRGB Levels Auto: 384 685 384 603 [RAF, RAF2, Image] 8448 - WB GRGB Levels Daylight: 384 685 384 603 [RAF, RAF2, Image] 8704 - WB GRGB Levels Cloudy: 384 774 384 513 [RAF, RAF2, Image] 8960 - WB GRGB Levels Daylight Fluor: 384 883 384 539 [RAF, RAF2, Image] 8961 - WB GRGB Levels Day White Fluor: 384 739 384 671 [RAF, RAF2, Image] 8962 - WB GRGB Levels White Fluorescent: 384 734 384 833 [RAF, RAF2, Image] 8976 - WB GRGB Levels Warm White Fluor: 384 580 384 1028 [RAF, RAF2, Image] 8977 - WB GRGB Levels Living Room Warm White Fluor: 384 477 384 1078 [RAF, RAF2, Image] 9216 - WB GRGB Levels Tungsten: 384 438 384 975 [RAF, RAF2, Image] 12272 - WB GRGB Levels: 384 685 384 603 [RAF, RAF2, Image] 38480 - Raw Exposure Bias: 0 [Composite, Composite, Image] Aperture - Aperture: 8.0 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/250 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 9362 bytes) [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.341146 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] LightValue - Light Value: 14.0 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] RedBalance - Red Balance: 1.565104 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.5 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.020 mm [Composite, Composite, Image] FOV - Field Of View: 19.5 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 70.0 mm (35 mm equivalent: 105.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 30.58 m ����������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/FujiFilm_5.out���������������������������������������������������������������000644 �000765 �000024 �00000000072 10716615647 017324� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, ExifIFD, Image] 37510 - User Comment: test comment ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/GE.t�������������������������������������������������������������������������000644 �000765 �000024 �00000002311 11502004242 015271� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/GE.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::GE; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'GE'; my $testnum = 1; # test 2: Extract information from GE.jpg { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Unknown => 1); my $info = $exifTool->ImageInfo('t/images/GE.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValue(GEModel => 'test model'); my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->WriteInfo('t/images/GE.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile,{Duplicates=>1,Unknown=>1}); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/GE_2.out���������������������������������������������������������������������000644 �000765 �000024 �00000011714 12546457275 016120� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [ExifTool, ExifTool, ExifTool] Warning - Warning: [minor] Suspicious MakerNotes offset for GE_0x0200 [ExifTool, ExifTool, ExifTool] Warning - Warning: [minor] Suspicious MakerNotes offset for GE_0x0206 [File, System, Image] FileName - File Name: GE.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1467 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:12:14 19:15:30-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:26-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [JFIF, JFIF, Image] 0 - JFIF Version: 1.01 [JFIF, JFIF, Image] 2 - Resolution Unit: inches [JFIF, JFIF, Image] 3 - X Resolution: 96 [JFIF, JFIF, Image] 5 - Y Resolution: 96 [EXIF, IFD0, Image] 270 - Image Description: GE DIGITAL CAMERA [EXIF, IFD0, Camera] 271 - Make: General Imaging Co. [EXIF, IFD0, Camera] 272 - Camera Model Name: E1035 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 96 [EXIF, IFD0, Image] 283 - Y Resolution: 96 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: GIMP 2.6.3 [EXIF, IFD0, Time] 306 - Modify Date: 2009:07:05 23:58:52 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/77 [EXIF, ExifIFD, Image] 33437 - F Number: 5.1 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 64 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2008:09:17 04:18:57 [EXIF, ExifIFD, Time] 36868 - Create Date: 2008:09:17 04:18:57 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/77 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 5.1 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 5.1 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Average [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Auto, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 22.5 mm [EXIF, ExifIFD, Image] 37510 - User Comment: R: 139 G: 255 B: 189 X:39852 Y: 0 S: 0 Zs: 6 Zp: 115 F: 531 I: 1 ImgVer:08.01.09.10 [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 0 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 0 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 1 [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: None [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 0.01041666667 [EXIF, IFD1, Image] 283 - Y Resolution: 0.01041666667 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1190 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, GE, Camera] 260 - GE 0x0104: 1694568960 [MakerNotes, GE, Camera] 514 - Macro: Off [MakerNotes, GE, Camera] 515 - GE 0x0203: 0 [MakerNotes, GE, Camera] 516 - GE 0x0204: 1 [MakerNotes, GE, Camera] 517 - GE 0x0205: 9.47 [MakerNotes, GE, Camera] 519 - GE Model: E1035 [MakerNotes, GE, Camera] 768 - GE Make: GE DIGITAL CAMERA [MakerNotes, GE, Camera] 1280 - GE 0x0500: 0 [MakerNotes, GE, Camera] 1536 - GE 0x0600: 0 [Composite, Composite, Image] Aperture - Aperture: 5.1 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/77 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 22.5 mm [Composite, Composite, Image] LightValue - Light Value: 11.6 ����������������������������������������������������Image-ExifTool-10.10/t/GE_3.out���������������������������������������������������������������������000644 �000765 �000024 �00000011602 12546457275 016115� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: GE_3_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 1483 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:42-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:42-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:42-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [JFIF, JFIF, Image] 0 - JFIF Version: 1.01 [JFIF, JFIF, Image] 2 - Resolution Unit: inches [JFIF, JFIF, Image] 3 - X Resolution: 96 [JFIF, JFIF, Image] 5 - Y Resolution: 96 [EXIF, IFD0, Image] 270 - Image Description: GE DIGITAL CAMERA [EXIF, IFD0, Camera] 271 - Make: General Imaging Co. [EXIF, IFD0, Camera] 272 - Camera Model Name: E1035 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 96 [EXIF, IFD0, Image] 283 - Y Resolution: 96 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: GIMP 2.6.3 [EXIF, IFD0, Time] 306 - Modify Date: 2009:07:05 23:58:52 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/77 [EXIF, ExifIFD, Image] 33437 - F Number: 5.1 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 64 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2008:09:17 04:18:57 [EXIF, ExifIFD, Time] 36868 - Create Date: 2008:09:17 04:18:57 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/77 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 5.1 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 5.1 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Average [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Auto, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 22.5 mm [EXIF, ExifIFD, Image] 37510 - User Comment: R: 139 G: 255 B: 189 X:39852 Y: 0 S: 0 Zs: 6 Zp: 115 F: 531 I: 1 ImgVer:08.01.09.10 [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 0 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 0 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 1 [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: None [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 0.01041666667 [EXIF, IFD1, Image] 283 - Y Resolution: 0.01041666667 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1206 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, GE, Camera] 260 - GE 0x0104: 1694568960 [MakerNotes, GE, Camera] 512 - GE 0x0200: 673605 0 16777216 [MakerNotes, GE, Camera] 514 - Macro: Off [MakerNotes, GE, Camera] 515 - GE 0x0203: 0 [MakerNotes, GE, Camera] 516 - GE 0x0204: 1 [MakerNotes, GE, Camera] 517 - GE 0x0205: 9.47 [MakerNotes, GE, Camera] 518 - GE 0x0206: 10 18245 0 0 256 0 [MakerNotes, GE, Camera] 519 - GE Model: test model [MakerNotes, GE, Camera] 768 - GE Make: GE DIGITAL CAMERA [MakerNotes, GE, Camera] 1280 - GE 0x0500: 0 [MakerNotes, GE, Camera] 1536 - GE 0x0600: 0 [Composite, Composite, Image] Aperture - Aperture: 5.1 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/77 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 22.5 mm [Composite, Composite, Image] LightValue - Light Value: 11.6 ������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Geotag.t���������������������������������������������������������������������000644 �000765 �000024 �00000013737 12572066640 016244� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Geotag.t". my $numTests; BEGIN { $numTests = 10; $| = 1; print "1..$numTests\n"; $Image::ExifTool::noConfig = 1; # must create user-defined tags before loading ExifTool (used in test 8) %Image::ExifTool::UserDefined = ( 'Image::ExifTool::GPS::Main' => { 0xd000 => { Name => 'GPSPitch', Writable => 'rational64s', }, 0xd001 => { Name => 'GPSRoll', Writable => 'rational64s', }, }, ); } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Geotag; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Geotag'; my $testnum = 1; my @testTags = ('Error', 'Warning', 'GPS:*', 'XMP:*'); my $testfile2; unless (eval { require Time::Local }) { warn "Install Time::Local to use the Geotag feature\n"; while (++$testnum <= $numTests) { print "ok $testnum # skip Requires Time::Local\n"; } goto IgnoreAll; } # test 2: Geotag from GPX track log { ++$testnum; my $exifTool = new Image::ExifTool; $testfile2 = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile2; $exifTool->SetNewValue(Geotag => 't/images/Geotag.gpx'); $exifTool->SetNewValue(Geotime => '2003:05:24 17:09:31Z'); $exifTool->WriteInfo('t/images/Writer.jpg', $testfile2); my $info = $exifTool->ImageInfo($testfile2, @testTags); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # tests 3-5: Geotag tests using Magellan track log { # geotag to XMP ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->SetNewValue(Geotag => 't/images/Geotag.log'); $exifTool->SetNewValue('XMP:Geotime' => '2009:04:03 06:11:30-05:00'); $exifTool->WriteInfo('t/images/Writer.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile, @testTags); if (check($exifTool, $info, $testname, $testnum, 3)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; # point too far outside track ++$testnum; $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; my ($num, $err) = $exifTool->SetNewValue(Geotime => '2009:04:03 08:00:00-05:00'); $exifTool->WriteInfo($testfile2, $testfile); $info = $exifTool->ImageInfo($testfile, @testTags); if (check($exifTool, $info, $testname, $testnum, 2)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; # delete geotags ++$testnum; my $testfile5 = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile5; ($num, $err) = $exifTool->SetNewValue(Geotime => undef); $exifTool->WriteInfo($testfile2, $testfile5); $info = $exifTool->ImageInfo($testfile5, 'Filename', @testTags); if (check($exifTool, $info, $testname, $testnum) and not $err) { unlink $testfile2; unlink $testfile5; } else { warn "\n $err\n" if $err; print 'not '; } print "ok $testnum\n"; } # test 6: Geotag from Garmin XML track log and test Geosync too { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->SetNewValue(Geosync => '1:30'); $exifTool->SetNewValue(Geotag => 't/images/Geotag.xml'); $exifTool->SetNewValuesFromFile('t/images/Panasonic.jpg', 'Geotime<${DateTimeOriginal}+02:00' ); $exifTool->WriteInfo('t/images/Writer.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile, @testTags); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 7: Geotag from IGC log with time drift correction { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.jpg"; my $txtfile = "t/${testname}_${testnum}.failed"; unlink $testfile; open GEOTAG_TEST_7, ">$txtfile" or warn "Error opening $txtfile\n"; $exifTool->Options(Verbose => 2); $exifTool->Options(TextOut => \*GEOTAG_TEST_7); $exifTool->SetNewValue(Geosync => '2010:01:05 07:00:00Z@2001:08:01 12:00:00-02:00'); $exifTool->SetNewValue(Geosync => '2010:01:05 09:01:00Z@2001:08:01 14:00:00-02:00'); $exifTool->SetNewValue(Geotag => 't/images/Geotag.igc'); $exifTool->SetNewValuesFromFile('t/images/Nikon.jpg', 'Geotime<${DateTimeOriginal}-02:00' ); $exifTool->WriteInfo('t/images/Writer.jpg', $testfile); close GEOTAG_TEST_7; if (testCompare('t/Geotag_7.out', $txtfile, $testnum)) { unlink $testfile; unlink $txtfile; } else { print 'not '; } print "ok $testnum\n"; } # test 8: Geotag with attitude information from PTNTHPR sentence # test 9: Geotag from KML track log (obtained from Google Location), # test 10: Geotag from Bramor gEO log { my %dat = ( 8 => { file => 'Geotag2.log', geotime => '2010:04:24 06:27:30-05:00' }, 9 => { file => 'Geotag.kml', geotime => '2013:11:13 09:04:31Z' }, 10 => { file => 'Geotag3.log', geotime => '2014:04:21 07:06:42Z' }, ); my $exifTool = new Image::ExifTool; while ($testnum < 10) { ++$testnum; $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->SetNewValue(Geotag => 't/images/' . $dat{$testnum}{file}); $exifTool->SetNewValue(Geotime => $dat{$testnum}{geotime}); $exifTool->WriteInfo('t/images/Writer.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile, @testTags); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } } IgnoreAll: # end ���������������������������������Image-ExifTool-10.10/t/Geotag_10.out����������������������������������������������������������������000644 �000765 �000024 �00000001403 12520457245 017071� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, GPS, Location] 0 - GPS Version ID: 2.3.0.0 [EXIF, GPS, Location] 1 - GPS Latitude Ref: North [EXIF, GPS, Location] 2 - GPS Latitude: 42 deg 43' 17.99" [EXIF, GPS, Location] 3 - GPS Longitude Ref: East [EXIF, GPS, Location] 4 - GPS Longitude: 61 deg 40' 19.30" [EXIF, GPS, Location] 5 - GPS Altitude Ref: Above Sea Level [EXIF, GPS, Location] 6 - GPS Altitude: 250 m [EXIF, GPS, Time] 7 - GPS Time Stamp: 07:06:42 [EXIF, GPS, Location] 14 - GPS Track Ref: True North [EXIF, GPS, Location] 15 - GPS Track: 21.94 [EXIF, GPS, Location] 16 - GPS Img Direction Ref: True North [EXIF, GPS, Location] 17 - GPS Img Direction: 21.94 [EXIF, GPS, Time] 29 - GPS Date Stamp: 2014:04:21 [EXIF, GPS, Location] 53248 - GPS Pitch: 7.33 [EXIF, GPS, Location] 53249 - GPS Roll: 1.26 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Geotag_2.out�����������������������������������������������������������������000644 �000765 �000024 �00000000736 11377511357 017026� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, GPS, Location] 0 - GPS Version ID: 2.3.0.0 [EXIF, GPS, Location] 1 - GPS Latitude Ref: North [EXIF, GPS, Location] 2 - GPS Latitude: 43 deg 38' 30.66" [EXIF, GPS, Location] 3 - GPS Longitude Ref: West [EXIF, GPS, Location] 4 - GPS Longitude: 116 deg 3' 44.05" [EXIF, GPS, Location] 5 - GPS Altitude Ref: Above Sea Level [EXIF, GPS, Location] 6 - GPS Altitude: 1485.648936 m [EXIF, GPS, Time] 7 - GPS Time Stamp: 17:09:31 [EXIF, GPS, Time] 29 - GPS Date Stamp: 2003:05:24 ����������������������������������Image-ExifTool-10.10/t/Geotag_3.out�����������������������������������������������������������������000644 �000765 �000024 �00000000654 11207555532 017021� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 7.77 [XMP, XMP-exif, Location] GPSAltitude - GPS Altitude: 103.647 m [XMP, XMP-exif, Location] GPSAltitudeRef - GPS Altitude Ref: Above Sea Level [XMP, XMP-exif, Location] GPSLatitude - GPS Latitude: 44 deg 14' 10.30" N [XMP, XMP-exif, Location] GPSLongitude - GPS Longitude: 76 deg 30' 56.52" W [XMP, XMP-exif, Time] GPSTimeStamp - GPS Date/Time: 2009:04:03 11:11:30 ������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Geotag_5.out�����������������������������������������������������������������000644 �000765 �000024 �00000000100 11226667020 017002� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileName - File Name: Geotag_5_failed.jpg ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Geotag_6.out�����������������������������������������������������������������000644 �000765 �000024 �00000000736 11377511357 017032� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, GPS, Location] 0 - GPS Version ID: 2.3.0.0 [EXIF, GPS, Location] 1 - GPS Latitude Ref: North [EXIF, GPS, Location] 2 - GPS Latitude: 43 deg 38' 59.51" [EXIF, GPS, Location] 3 - GPS Longitude Ref: West [EXIF, GPS, Location] 4 - GPS Longitude: 79 deg 34' 59.54" [EXIF, GPS, Location] 5 - GPS Altitude Ref: Above Sea Level [EXIF, GPS, Location] 6 - GPS Altitude: 145.9518987 m [EXIF, GPS, Time] 7 - GPS Time Stamp: 13:57:16 [EXIF, GPS, Time] 29 - GPS Date Stamp: 2004:08:28 ����������������������������������Image-ExifTool-10.10/t/Geotag_7.out�����������������������������������������������������������������000644 �000765 �000024 �00000003515 12362273710 017022� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Added Geosync point: GPS time stamp: 2010:01:05 07:00:00.000 UTC Image date/time: 2001:08:01 14:00:00.000 UTC Writing File:Geosync Added Geosync point: GPS time stamp: 2010:01:05 09:01:00.000 UTC Image date/time: 2001:08:01 16:00:00.000 UTC Writing File:Geosync Loaded 10 points from IGC-format GPS track log file 't/images/Geotag.igc' GPS track start: 2010:01:05 07:23:15.000 UTC GPS track end: 2010:01:05 08:52:56.000 UTC Writing File:Geotag Geotime value: 2010:01:05 07:57:51.692 UTC (incl. Geosync offset of +266000428.692 sec) Writing MIE-GPS:GPSLatitude Writing XMP-exif:GPSLatitude if tag exists Writing GPS:GPSLatitude Writing MIE-GPS:GPSLongitude Writing XMP-exif:GPSLongitude if tag exists Writing GPS:GPSLongitude Writing MIE-GPS:GPSAltitude Writing XMP-exif:GPSAltitude if tag exists Writing GPS:GPSAltitude Writing XMP-exif:GPSAltitudeRef if tag exists Writing GPS:GPSAltitudeRef Writing GPS:GPSLatitudeRef Writing GPS:GPSLongitudeRef Writing GPS:GPSDateStamp Writing GPS:GPSTimeStamp Writing XMP-exif:GPSDateTime if tag exists Rewriting t/images/Writer.jpg... Editing tags in: APP0 APP1 File GPS IFD0 JFIF MIE-GPS XMP Creating tags in: APP1 File GPS IFD0 MIE-GPS Creating APP1: Creating IFD0 ExifByteOrder = MM + IFD0:XResolution = '72' (mandatory) + IFD0:YResolution = '72' (mandatory) + IFD0:ResolutionUnit = '2' (mandatory) + IFD0:YCbCrPositioning = '1' (mandatory) Creating GPS + GPS:GPSVersionID = '2 3 0 0' (mandatory) + GPS:GPSLatitudeRef = 'N' + GPS:GPSLatitude = '49 10 45.9657779460145' + GPS:GPSLongitudeRef = 'E' + GPS:GPSLongitude = '6 51 35.6260862642929' + GPS:GPSAltitudeRef = '0' + GPS:GPSAltitude = '848.896982535614' + GPS:GPSTimeStamp = '07 57 51.69167' + GPS:GPSDateStamp = '2010:01:05' JPEG DQT (130 bytes): JPEG SOF0: JPEG DHT (73 bytes): JPEG SOS �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Geotag_8.out�����������������������������������������������������������������000644 �000765 �000024 �00000001424 11710365533 017021� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, GPS, Location] 0 - GPS Version ID: 2.3.0.0 [EXIF, GPS, Location] 1 - GPS Latitude Ref: North [EXIF, GPS, Location] 2 - GPS Latitude: 50 deg 40' 16.53" [EXIF, GPS, Location] 3 - GPS Longitude Ref: East [EXIF, GPS, Location] 4 - GPS Longitude: 5 deg 6' 0.43" [EXIF, GPS, Time] 7 - GPS Time Stamp: 11:27:30 [EXIF, GPS, Location] 12 - GPS Speed Ref: knots [EXIF, GPS, Location] 13 - GPS Speed: 28.37631579 [EXIF, GPS, Location] 14 - GPS Track Ref: True North [EXIF, GPS, Location] 15 - GPS Track: 138.8394737 [EXIF, GPS, Location] 16 - GPS Img Direction Ref: True North [EXIF, GPS, Location] 17 - GPS Img Direction: 256.3315789 [EXIF, GPS, Time] 29 - GPS Date Stamp: 2010:04:24 [EXIF, GPS, Location] 53248 - GPS Pitch: -4.152631579 [EXIF, GPS, Location] 53249 - GPS Roll: -10.18421053 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Geotag_9.out�����������������������������������������������������������������000644 �000765 �000024 �00000000553 12240751060 017015� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, GPS, Location] 0 - GPS Version ID: 2.3.0.0 [EXIF, GPS, Location] 1 - GPS Latitude Ref: North [EXIF, GPS, Location] 2 - GPS Latitude: 34 deg 9' 55.90" [EXIF, GPS, Location] 3 - GPS Longitude Ref: West [EXIF, GPS, Location] 4 - GPS Longitude: 106 deg 1' 37.01" [EXIF, GPS, Time] 7 - GPS Time Stamp: 09:04:31 [EXIF, GPS, Time] 29 - GPS Date Stamp: 2013:11:13 �����������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/GeoTiff.t��������������������������������������������������������������������000644 �000765 �000024 �00000002667 12274742333 016360� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/GeoTiff.t". BEGIN { $| = 1; print "1..4\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::GeoTiff; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'GeoTiff'; my $testnum = 1; # test 2: Extract information from GeoTiff.tif { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/GeoTiff.tif'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = (['ResolutionUnit','cm']); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/GeoTiff.tif'); print "ok $testnum\n"; } # test 4: Copy GeoTiff information { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.out"; unlink $testfile; $exifTool->SetNewValuesFromFile('t/images/GeoTiff.tif', 'GeoTiff*'); my $ok = writeInfo($exifTool,'t/images/ExifTool.tif',$testfile); my $info = $exifTool->ImageInfo($testfile, 'GeoTiff:*'); if (check($exifTool, $info, $testname, $testnum) and $ok) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # end �������������������������������������������������������������������������Image-ExifTool-10.10/t/GeoTiff_2.out����������������������������������������������������������������000644 �000765 �000024 �00000004606 12546457275 017152� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: GeoTiff.tif [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 2.6 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2005:11:14 14:47:21-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:20 12:47:58-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:11 08:47:16-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: TIFF [File, File, Image] FileTypeExtension - File Type Extension: tif [File, File, Image] MIMEType - MIME Type: image/tiff [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [EXIF, IFD0, Image] 256 - Image Width: 25 [EXIF, IFD0, Image] 257 - Image Height: 24 [EXIF, IFD0, Image] 258 - Bits Per Sample: 8 [EXIF, IFD0, Image] 259 - Compression: Uncompressed [EXIF, IFD0, Image] 262 - Photometric Interpretation: RGB Palette [EXIF, IFD0, Image] 273 - Strip Offsets: 2060 [EXIF, IFD0, Image] 278 - Rows Per Strip: 24 [EXIF, IFD0, Image] 279 - Strip Byte Counts: 600 [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 320 - Color Map: (Binary data 1536 bytes) [EXIF, IFD0, Location] 34264 - Model Transform: 33.4179196429669 35.8363313794284 0 691955.165684031 35.8363313794284 -33.4179196429669 0 2791710.99012603 0 0 0 0 0 0 0 1 [GeoTiff, GeoTiff, Location] 1 - Geo Tiff Version: 1.1.0 [GeoTiff, GeoTiff, Location] 1024 - GT Model Type: Projected [GeoTiff, GeoTiff, Location] 1025 - GT Raster Type: Pixel Is Area [GeoTiff, GeoTiff, Location] 2048 - Geographic Type: User Defined [GeoTiff, GeoTiff, Location] 2049 - Geog Citation: Hough UTM zone 17N [GeoTiff, GeoTiff, Location] 2050 - Geog Geodetic Datum: User Defined [GeoTiff, GeoTiff, Location] 2057 - Geog Semi Major Axis: 6378270 [GeoTiff, GeoTiff, Location] 2058 - Geog Semi Minor Axis: 6356794.343479 [GeoTiff, GeoTiff, Location] 3072 - Projected CS Type: User Defined [GeoTiff, GeoTiff, Location] 3073 - PCS Citation: Hough UTM zone 17N [GeoTiff, GeoTiff, Location] 3074 - Projection: UTM zone 17N [Composite, Composite, Image] ImageSize - Image Size: 25x24 [Composite, Composite, Image] Megapixels - Megapixels: 0.000600 ��������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/GeoTiff_3.out����������������������������������������������������������������000644 �000765 �000024 �00000004604 12546457275 017151� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: GeoTiff_3_failed.tif [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 2.6 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:20 12:51:44-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:20 12:51:44-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:20 12:51:44-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: TIFF [File, File, Image] FileTypeExtension - File Type Extension: tif [File, File, Image] MIMEType - MIME Type: image/tiff [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [EXIF, IFD0, Image] 256 - Image Width: 25 [EXIF, IFD0, Image] 257 - Image Height: 24 [EXIF, IFD0, Image] 258 - Bits Per Sample: 8 [EXIF, IFD0, Image] 259 - Compression: Uncompressed [EXIF, IFD0, Image] 262 - Photometric Interpretation: RGB Palette [EXIF, IFD0, Image] 273 - Strip Offsets: 2054 [EXIF, IFD0, Image] 278 - Rows Per Strip: 24 [EXIF, IFD0, Image] 279 - Strip Byte Counts: 600 [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: cm [EXIF, IFD0, Image] 320 - Color Map: (Binary data 1536 bytes) [EXIF, IFD0, Location] 34264 - Model Transform: 33.4179196429669 35.8363313794284 0 691955.165684031 35.8363313794284 -33.4179196429669 0 2791710.99012603 0 0 0 0 0 0 0 1 [GeoTiff, GeoTiff, Location] 1 - Geo Tiff Version: 1.1.0 [GeoTiff, GeoTiff, Location] 1024 - GT Model Type: Projected [GeoTiff, GeoTiff, Location] 1025 - GT Raster Type: Pixel Is Area [GeoTiff, GeoTiff, Location] 2048 - Geographic Type: User Defined [GeoTiff, GeoTiff, Location] 2049 - Geog Citation: Hough UTM zone 17N [GeoTiff, GeoTiff, Location] 2050 - Geog Geodetic Datum: User Defined [GeoTiff, GeoTiff, Location] 2057 - Geog Semi Major Axis: 6378270 [GeoTiff, GeoTiff, Location] 2058 - Geog Semi Minor Axis: 6356794.343479 [GeoTiff, GeoTiff, Location] 3072 - Projected CS Type: User Defined [GeoTiff, GeoTiff, Location] 3073 - PCS Citation: Hough UTM zone 17N [GeoTiff, GeoTiff, Location] 3074 - Projection: UTM zone 17N [Composite, Composite, Image] ImageSize - Image Size: 25x24 [Composite, Composite, Image] Megapixels - Megapixels: 0.000600 ����������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/GeoTiff_4.out����������������������������������������������������������������000644 �000765 �000024 �00000001327 12274742370 017140� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[GeoTiff, GeoTiff, Location] 1 - Geo Tiff Version: 1.1.0 [GeoTiff, GeoTiff, Location] 1024 - GT Model Type: Projected [GeoTiff, GeoTiff, Location] 1025 - GT Raster Type: Pixel Is Area [GeoTiff, GeoTiff, Location] 2048 - Geographic Type: User Defined [GeoTiff, GeoTiff, Location] 2049 - Geog Citation: Hough UTM zone 17N [GeoTiff, GeoTiff, Location] 2050 - Geog Geodetic Datum: User Defined [GeoTiff, GeoTiff, Location] 2057 - Geog Semi Major Axis: 6378270 [GeoTiff, GeoTiff, Location] 2058 - Geog Semi Minor Axis: 6356794.343479 [GeoTiff, GeoTiff, Location] 3072 - Projected CS Type: User Defined [GeoTiff, GeoTiff, Location] 3073 - PCS Citation: Hough UTM zone 17N [GeoTiff, GeoTiff, Location] 3074 - Projection: UTM zone 17N ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/GIF.t������������������������������������������������������������������������000644 �000765 �000024 �00000005023 12075025165 015423� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/GIF.t". BEGIN { $| = 1; print "1..5\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::GIF; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'GIF'; my $testnum = 1; # test 2: GIF file using data in memory { ++$testnum; open(TESTFILE, 't/images/GIF.gif'); binmode(TESTFILE); my $gifImage; read(TESTFILE, $gifImage, 100000); close(TESTFILE); my $info = ImageInfo(\$gifImage); print 'not ' unless check($info, $testname, $testnum); print "ok $testnum\n"; } # tests 3-5: Test adding/editing/deleting various types of metadata for GIF images in memory { ++$testnum; open(TESTFILE, 't/images/GIF.gif'); binmode(TESTFILE); my $gifImage; read(TESTFILE, $gifImage, 100000); close(TESTFILE); my $exifTool = new Image::ExifTool; $exifTool->SetNewValue(Comment => 'a new comment'); $exifTool->SetNewValue(City => 'Kingston'); my $image1; $exifTool->WriteInfo(\$gifImage, \$image1); $info = ImageInfo(\$image1); print 'not ' unless check($info, $testname, $testnum); print "ok $testnum\n"; ++$testnum; $exifTool->SetNewValue(); # clear previous new values $exifTool->SetNewValue('all'); # delete everything... # add back some XMP tags $exifTool->SetNewValue(Comment => 'x'); $exifTool->SetNewValue(Subject => ['one','two','three']); $exifTool->SetNewValue(Country => 'Canada'); my $image2; $exifTool->WriteInfo(\$image1, \$image2); $info = ImageInfo(\$image2); print 'not ' unless check($info, $testname, $testnum); print "ok $testnum\n"; ++$testnum; $info = ImageInfo(\$gifImage, 'Comment', 'XMP', 'ICC_Profile'); $exifTool->SetNewValue(); # clear previous new values $exifTool->SetNewValue(Comment => $$info{Comment}); $exifTool->SetNewValue(XMP => $$info{XMP}, Protected => 1); $exifTool->SetNewValue(ICC_Profile => $$info{ICC_Profile}, Protected => 1); my $image3; $exifTool->WriteInfo(\$image2, \$image3); my $testfile = "t/${testname}_${testnum}_failed.gif"; if ($image3 eq $gifImage) { unlink $testfile; } else { # save the bad image open(TESTFILE,">$testfile"); binmode(TESTFILE); print TESTFILE $image3; close(TESTFILE); print 'not '; } print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/GIF_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000002613 12514720510 016204� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������BackgroundColor: 0 BitsPerPixel: 8 BlueMatrixColumn: 0.1492 0.06322 0.74463 BlueTRC: (Binary data 14 bytes) CMMFlags: Not Embedded, Independent ColorResolutionDepth: 8 ColorSpaceData: RGB Comment: SCANNERMAKER: Canon;;SCANNER: Canon EOS DIGITAL REBEL;;SOFTWARE: GraphicConverter;;DATE: 2004:02:20 08:07:49;;DESCRIPTION: The picture caption;;;;Ignored Tags: $02BC, $9000, $9004, $9101, $9286, $A000, $A001, $A002, $A003, $A20E, $A20F, $A210, $A217, $A300, $A401, $A402, $A403, $A406;; ConnectionSpaceIlluminant: 0.9642 1 0.82491 DeviceAttributes: Reflective, Glossy, Positive, Color DeviceManufacturer: none DeviceModel: ExifToolVersion: 9.93 FileSize: 2.3 kB FileType: GIF FileTypeExtension: gif GIFVersion: 89a GreenMatrixColumn: 0.20525 0.62566 0.06087 GreenTRC: (Binary data 14 bytes) HasColorMap: Yes ImageHeight: 8 ImageSize: 8x8 ImageWidth: 8 MIMEType: image/gif MediaWhitePoint: 0.9505 1 1.0891 Megapixels: 0.000064 PrimaryPlatform: Apple Computer Inc. ProfileCMMType: NKON ProfileClass: Display Device Profile ProfileConnectionSpace: XYZ ProfileCopyright: Nikon Inc. & Nikon Corporation 2001 ProfileCreator: ProfileDateTime: 1999:12:07 18:59:22 ProfileDescription: Nikon Adobe RGB 4.0.0.3000 ProfileFileSignature: acsp ProfileID: 0 ProfileVersion: 2.2.0 RedMatrixColumn: 0.60976 0.31113 0.01947 RedTRC: (Binary data 14 bytes) RenderingIntent: Perceptual Title: GIF with XMP XMPToolkit: Image::ExifTool 7.27 ���������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/GIF_3.out��������������������������������������������������������������������000644 �000765 �000024 �00000002211 12514720510 016177� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������BackgroundColor: 0 BitsPerPixel: 8 BlueMatrixColumn: 0.1492 0.06322 0.74463 BlueTRC: (Binary data 14 bytes) CMMFlags: Not Embedded, Independent City: Kingston ColorResolutionDepth: 8 ColorSpaceData: RGB Comment: a new comment ConnectionSpaceIlluminant: 0.9642 1 0.82491 DeviceAttributes: Reflective, Glossy, Positive, Color DeviceManufacturer: none DeviceModel: ExifToolVersion: 9.93 FileSize: 4.5 kB FileType: GIF FileTypeExtension: gif GIFVersion: 89a GreenMatrixColumn: 0.20525 0.62566 0.06087 GreenTRC: (Binary data 14 bytes) HasColorMap: Yes ImageHeight: 8 ImageSize: 8x8 ImageWidth: 8 MIMEType: image/gif MediaWhitePoint: 0.9505 1 1.0891 Megapixels: 0.000064 PrimaryPlatform: Apple Computer Inc. ProfileCMMType: NKON ProfileClass: Display Device Profile ProfileConnectionSpace: XYZ ProfileCopyright: Nikon Inc. & Nikon Corporation 2001 ProfileCreator: ProfileDateTime: 1999:12:07 18:59:22 ProfileDescription: Nikon Adobe RGB 4.0.0.3000 ProfileFileSignature: acsp ProfileID: 0 ProfileVersion: 2.2.0 RedMatrixColumn: 0.60976 0.31113 0.01947 RedTRC: (Binary data 14 bytes) RenderingIntent: Perceptual Title: GIF with XMP XMPToolkit: Image::ExifTool 9.93 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/GIF_4.out��������������������������������������������������������������������000644 �000765 �000024 �00000000522 12514720510 016203� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������BackgroundColor: 0 BitsPerPixel: 8 ColorResolutionDepth: 8 Comment: x Country: Canada ExifToolVersion: 9.93 FileSize: 4.0 kB FileType: GIF FileTypeExtension: gif GIFVersion: 89a HasColorMap: Yes ImageHeight: 8 ImageSize: 8x8 ImageWidth: 8 MIMEType: image/gif Megapixels: 0.000064 Subject: one, two, three XMPToolkit: Image::ExifTool 9.93 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/GIMP.t�����������������������������������������������������������������������000644 �000765 �000024 �00000001254 11453105702 015547� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/GIMP.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::GIMP; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'GIMP'; my $testnum = 1; # test 2: Extract information from GIMP.xcf { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/GIMP.xcf'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/GIMP_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000010161 12546457275 016354� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: GIMP.xcf [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 2.3 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:10:07 13:50:09-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:15-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: XCF [File, File, Image] FileTypeExtension - File Type Extension: xcf [File, File, Image] MIMEType - MIME Type: image/x-xcf [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [GIMP, GIMP, Image] 9 - XCF Version: 0 [GIMP, GIMP, Image] 14 - Image Width: 8 [GIMP, GIMP, Image] 18 - Image Height: 8 [GIMP, GIMP, Image] 22 - Color Mode: RGB Color [GIMP, GIMP, Image] 17 - Compression: RLE Encoding [GIMP, GIMP, Image] 0 - X Resolution: 72 [GIMP, GIMP, Image] 1 - Y Resolution: 72 [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: ExifTool XCF test [XMP, XMP-dc, Author] rights - Rights: Free for all [XMP, XMP-dc, Image] title - Title: Test Picture [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ [EXIF, IFD0, Image] 270 - Image Description: This is a teeny weeny white square [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Adobe Photoshop 7.0 [EXIF, IFD0, Time] 306 - Modify Date: 2005:07:18 08:27:14 [EXIF, IFD0, Author] 315 - Artist: Phil Harvey [EXIF, IFD0, Author] 33432 - Copyright: Free for all [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: Uncalibrated [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 8 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 8 [ICC_Profile, ICC-header, Image] 4 - Profile CMM Type: NKON [ICC_Profile, ICC-header, Image] 8 - Profile Version: 2.2.0 [ICC_Profile, ICC-header, Image] 12 - Profile Class: Display Device Profile [ICC_Profile, ICC-header, Image] 16 - Color Space Data: RGB [ICC_Profile, ICC-header, Image] 20 - Profile Connection Space: XYZ [ICC_Profile, ICC-header, Time] 24 - Profile Date Time: 1999:12:07 18:59:22 [ICC_Profile, ICC-header, Image] 36 - Profile File Signature: acsp [ICC_Profile, ICC-header, Image] 40 - Primary Platform: Apple Computer Inc. [ICC_Profile, ICC-header, Image] 44 - CMM Flags: Not Embedded, Independent [ICC_Profile, ICC-header, Image] 48 - Device Manufacturer: none [ICC_Profile, ICC-header, Image] 52 - Device Model: [ICC_Profile, ICC-header, Image] 56 - Device Attributes: Reflective, Glossy, Positive, Color [ICC_Profile, ICC-header, Image] 64 - Rendering Intent: Perceptual [ICC_Profile, ICC-header, Image] 68 - Connection Space Illuminant: 0.9642 1 0.82491 [ICC_Profile, ICC-header, Image] 80 - Profile Creator: [ICC_Profile, ICC-header, Image] 84 - Profile ID: 0 [ICC_Profile, ICC_Profile, Image] desc - Profile Description: Nikon Adobe RGB 4.0.0.3000 [ICC_Profile, ICC_Profile, Image] rXYZ - Red Matrix Column: 0.60976 0.31113 0.01947 [ICC_Profile, ICC_Profile, Image] gXYZ - Green Matrix Column: 0.20525 0.62566 0.06087 [ICC_Profile, ICC_Profile, Image] bXYZ - Blue Matrix Column: 0.1492 0.06322 0.74463 [ICC_Profile, ICC_Profile, Image] rTRC - Red Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] gTRC - Green Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] bTRC - Blue Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] wtpt - Media White Point: 0.9505 1 1.0891 [ICC_Profile, ICC_Profile, Image] cprt - Profile Copyright: Nikon Inc. & Nikon Corporation 2001 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/GPS.t������������������������������������������������������������������������000644 �000765 �000024 �00000002225 11327642463 015455� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/GPS.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::GPS; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'GPS'; my $testnum = 1; # test 2: Extract information from GPS.jpg with specified coordinate format { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(CoordFormat => '%d degrees %.2f minutes'); my $info = $exifTool->ImageInfo('t/images/GPS.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( ['GPSLatitude' => "12 deg 21' 23.345"], ['GPSLatitudeRef' => 'south' ], ['GPSTimeStamp' => '2007:03:02 18:46:10.55-05:30' ], ['GPSDateStamp' => '2007:03:02 18:46:10.55-05:30' ], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum); print "ok $testnum\n"; } # end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/GPS_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000013134 12546457275 016254� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: GPS.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 2.1 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2008:10:14 11:39:46-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:28-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 09f7f522cf163e96cf778a81de1a9c2b [File, File, Image] ImageWidth - Image Width: 120 [File, File, Image] ImageHeight - Image Height: 80 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: Communications [EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePixS1Pro [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 300 [EXIF, IFD0, Image] 283 - Y Resolution: 300 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Adobe Photoshop 7.0 [EXIF, IFD0, Time] 306 - Modify Date: 2002:07:19 13:28:10 [EXIF, IFD0, Author] 315 - Artist: Ian Britton [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Image] 532 - Reference Black White: 0 255 128 255 128 255 [EXIF, IFD0, Author] 33432 - Copyright: ian Britton - FreeFoto.com [EXIF, ExifIFD, Image] 33437 - F Number: 0.64 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Shutter speed priority AE [EXIF, ExifIFD, Image] 34855 - ISO: 0 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0200 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2002:07:13 15:58:28 [EXIF, ExifIFD, Time] 36868 - Create Date: 2002:07:13 15:58:28 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/724 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 16.0 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 0.26015625 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: -0.65 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 0.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2400 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1600 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 12.05078125 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 12.05078125 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Unknown (0) [EXIF, ExifIFD, Image] 41729 - Scene Type: Unknown (0) [EXIF, GPS, Location] 0 - GPS Version ID: 2.0.0.0 [EXIF, GPS, Location] 1 - GPS Latitude Ref: North [EXIF, GPS, Location] 2 - GPS Latitude: 54 degrees 59.38 minutes [EXIF, GPS, Location] 3 - GPS Longitude Ref: West [EXIF, GPS, Location] 4 - GPS Longitude: 1 degrees 54.85 minutes [EXIF, GPS, Time] 7 - GPS Time Stamp: 14:58:24 [EXIF, GPS, Location] 18 - GPS Map Datum: WGS84 [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1050 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 120 - Caption-Abstract: Communications [IPTC, IPTC, Author] 122 - Writer-Editor: Ian Britton [IPTC, IPTC, Other] 105 - Headline: Communications [IPTC, IPTC, Author] 80 - By-line: Ian Britton [IPTC, IPTC, Author] 85 - By-line Title: Photographer [IPTC, IPTC, Author] 110 - Credit: Ian Britton [IPTC, IPTC, Author] 115 - Source: FreeFoto.com [IPTC, IPTC, Other] 5 - Object Name: Communications [IPTC, IPTC, Time] 55 - Date Created: 2002:06:20 [IPTC, IPTC, Location] 90 - City: [IPTC, IPTC, Location] 95 - Province-State: [IPTC, IPTC, Location] 101 - Country-Primary Location Name: United Kingdom [IPTC, IPTC, Other] 15 - Category: BUS [IPTC, IPTC, Other] 20 - Supplemental Categories: Communications [IPTC, IPTC, Other] 10 - Urgency: 5 (normal urgency) [IPTC, IPTC, Other] 25 - Keywords: Communications [IPTC, IPTC, Author] 116 - Copyright Notice: ian Britton - FreeFoto.com [Composite, Composite, Image] Aperture - Aperture: 0.64 [Composite, Composite, Location] GPSLatitude - GPS Latitude: 54 degrees 59.38 minutes N [Composite, Composite, Location] GPSLongitude - GPS Longitude: 1 degrees 54.85 minutes W [Composite, Composite, Location] GPSPosition - GPS Position: 54 degrees 59.38 minutes N, 1 degrees 54.85 minutes W [Composite, Composite, Image] ImageSize - Image Size: 120x80 [Composite, Composite, Image] Megapixels - Megapixels: 0.010 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/724 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 0.0 mm ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/GPS_3.out��������������������������������������������������������������������000644 �000765 �000024 �00000013273 12546457275 016261� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: GPS_3_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 2.1 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:43-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:43-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:43-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 09f7f522cf163e96cf778a81de1a9c2b [File, File, Image] ImageWidth - Image Width: 120 [File, File, Image] ImageHeight - Image Height: 80 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: Communications [EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePixS1Pro [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 300 [EXIF, IFD0, Image] 283 - Y Resolution: 300 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Adobe Photoshop 7.0 [EXIF, IFD0, Time] 306 - Modify Date: 2002:07:19 13:28:10 [EXIF, IFD0, Author] 315 - Artist: Ian Britton [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Image] 532 - Reference Black White: 0 255 128 255 128 255 [EXIF, IFD0, Author] 33432 - Copyright: ian Britton - FreeFoto.com [EXIF, ExifIFD, Image] 33437 - F Number: 0.64 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Shutter speed priority AE [EXIF, ExifIFD, Image] 34855 - ISO: 0 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0200 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2002:07:13 15:58:28 [EXIF, ExifIFD, Time] 36868 - Create Date: 2002:07:13 15:58:28 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/724 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 16.0 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 0.26015625 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: -0.65 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 0.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2400 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1600 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 12.05078125 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 12.05078125 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Unknown (0) [EXIF, ExifIFD, Image] 41729 - Scene Type: Unknown (0) [EXIF, GPS, Location] 0 - GPS Version ID: 2.0.0.0 [EXIF, GPS, Location] 1 - GPS Latitude Ref: South [EXIF, GPS, Location] 2 - GPS Latitude: 12 deg 21' 23.34" [EXIF, GPS, Location] 3 - GPS Longitude Ref: West [EXIF, GPS, Location] 4 - GPS Longitude: 1 deg 54' 51.00" [EXIF, GPS, Time] 7 - GPS Time Stamp: 00:16:10.55 [EXIF, GPS, Location] 18 - GPS Map Datum: WGS84 [EXIF, GPS, Time] 29 - GPS Date Stamp: 2007:03:03 [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1074 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 120 - Caption-Abstract: Communications [IPTC, IPTC, Author] 122 - Writer-Editor: Ian Britton [IPTC, IPTC, Other] 105 - Headline: Communications [IPTC, IPTC, Author] 80 - By-line: Ian Britton [IPTC, IPTC, Author] 85 - By-line Title: Photographer [IPTC, IPTC, Author] 110 - Credit: Ian Britton [IPTC, IPTC, Author] 115 - Source: FreeFoto.com [IPTC, IPTC, Other] 5 - Object Name: Communications [IPTC, IPTC, Time] 55 - Date Created: 2002:06:20 [IPTC, IPTC, Location] 90 - City: [IPTC, IPTC, Location] 95 - Province-State: [IPTC, IPTC, Location] 101 - Country-Primary Location Name: United Kingdom [IPTC, IPTC, Other] 15 - Category: BUS [IPTC, IPTC, Other] 20 - Supplemental Categories: Communications [IPTC, IPTC, Other] 10 - Urgency: 5 (normal urgency) [IPTC, IPTC, Other] 25 - Keywords: Communications [IPTC, IPTC, Author] 116 - Copyright Notice: ian Britton - FreeFoto.com [Composite, Composite, Image] Aperture - Aperture: 0.64 [Composite, Composite, Time] GPSDateTime - GPS Date/Time: 2007:03:03 00:16:10.55Z [Composite, Composite, Location] GPSLatitude - GPS Latitude: 12 deg 21' 23.34" S [Composite, Composite, Location] GPSLongitude - GPS Longitude: 1 deg 54' 51.00" W [Composite, Composite, Location] GPSPosition - GPS Position: 12 deg 21' 23.34" S, 1 deg 54' 51.00" W [Composite, Composite, Image] ImageSize - Image Size: 120x80 [Composite, Composite, Image] Megapixels - Megapixels: 0.010 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/724 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 0.0 mm �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/HTML.t�����������������������������������������������������������������������000644 �000765 �000024 �00000001257 11327642463 015574� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/HTML.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::HTML; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'HTML'; my $testnum = 1; # test 2: Extract information from HTML.html { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/HTML.html'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/HTML_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000010166 12546457275 016371� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: HTML.html [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 3.3 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:06:28 20:35:26-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:15-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: HTML [File, File, Image] FileTypeExtension - File Type Extension: html [File, File, Image] MIMEType - MIME Type: text/html [HTML, HTML, Document] title - Title: ExifTool HTML Test [HTML, HTTP-equiv, Document] content-type - Content Type: text/html; charset="iso-8859-1" [HTML, HTML-dc, Document] title - Title: ExifTool HTML Test [HTML, HTML-dc, Author] creator - Creator: Phil Harvey, Another Creator [HTML, HTML-dc, Time] date - Date: 2007-30-01 [HTML, HTML-dc, Document] format - Format: Daisy 2.02 [HTML, HTML-dc, Document] identifier - Identifier: DTB00345 [HTML, HTML-dc, Document] language - Language: EN [HTML, HTML-dc, Author] publisher - Publisher: TPB [HTML, HTML-dc, Author] source - Source: 0-065-01022-1 [HTML, HTML-dc, Document] subject - Subject: Greek: α β γ [HTML, HTML-ncc, Time] sourcedate - Source Date: 1993 [HTML, HTML-ncc, Document] sourceedition - Source Edition: 1 [HTML, HTML-ncc, Document] sourcepublisher - Source Publisher: Phil's Desktop [HTML, HTML-ncc, Document] charset - Character Set: iso-8859-1 [HTML, HTML-ncc, Document] generator - Generator: ExifTool 6.73 [HTML, HTML-ncc, Document] narrator - Narrator: a narrator [HTML, HTML-ncc, Document] tocitems - TOC Items: 1024 [HTML, HTML-ncc, Document] totaltime - Duration: 91:27:21 [HTML, HTML-ncc, Document] pagenormal - Page Normal: 881 [HTML, HTML-ncc, Document] maxpagenormal - Max Page Normal: 881 [HTML, HTML-ncc, Document] pagefront - Page Front: 27 [HTML, HTML-ncc, Document] pagespecial - Page Special: 45 [HTML, HTML-ncc, Document] prodnotes - Prod Notes: 0 [HTML, HTML-ncc, Document] footnotes - Footnotes: 0 [HTML, HTML-ncc, Document] sidebars - Sidebars: 0 [HTML, HTML-ncc, Document] setinfo - Set Info: 1 of 3 [HTML, HTML-ncc, Document] depth - Depth: 4 [HTML, HTML-ncc, Document] kbytesize - K Byte Size: 1530000 [HTML, HTML-ncc, Document] multimediatype - Multimedia Type: audioNCC [HTML, HTML-ncc, Document] files - Files: 97 [HTML, HTML-prod, Document] reclocation - Rec Location: Studio 2 [HTML, HTML-prod, Document] recengineer - Rec Engineer: P Harvey [HTML, HTML-office, Document] Subject - Subject: a subject [HTML, HTML-office, Author] Author - Author: an author [HTML, HTML-office, Document] Keywords - Keywords: keyword1, keyword2 [HTML, HTML-office, Document] Description - Description: a comments;a new line [HTML, HTML-office, Document] Template - Template: Normal.dotm [HTML, HTML-office, Author] LastAuthor - Last Author: Phil Harvey [HTML, HTML-office, Document] Revision - Revision Number: 2 [HTML, HTML-office, Document] TotalTime - Total Edit Time: 1 minute [HTML, HTML-office, Time] Created - Create Date: 2010:06:28 23:52:00Z [HTML, HTML-office, Time] LastSaved - Modify Date: 2010:06:28 23:52:00Z [HTML, HTML-office, Document] Pages - Pages: 1 [HTML, HTML-office, Document] Words - Words: 84 [HTML, HTML-office, Document] Characters - Characters: 324 [HTML, HTML-office, Document] Category - Category: a catégory [HTML, HTML-office, Document] Manager - Manager: a manager [HTML, HTML-office, Document] Company - Company: a company [HTML, HTML-office, Document] Lines - Lines: 26 [HTML, HTML-office, Document] Paragraphs - Paragraphs: 26 [HTML, HTML-office, Document] CharactersWithSpaces - Characters With Spaces: 382 [HTML, HTML-office, Document] Version - Revision Number: 12.0 [HTML, HTML-office, Document] Checked_x0020_by - Checked By: Phil [HTML, HTML-office, Document] test1 - Test 1: 1 [HTML, HTML-office, Document] test2 - Test 2: 15 [HTML, HTML-office, Document] test3 - Test 3: 2010-02-05T05:00:00Z [HTML, HTML-office, Document] test4 - Test 4: text ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/����������������������������������������������������������������������000755 �000765 �000024 �00000000000 12650447263 016104� 5����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/InDesign.t�������������������������������������������������������������������000644 �000765 �000024 �00000003401 11444705113 016511� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/InDesign.t". BEGIN { $| = 1; print "1..4\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::InDesign; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'InDesign'; my $testnum = 1; # test 2: Extract information from InDesign.indd { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/InDesign.indd'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # tests 3-4: Write some XMP tags then delete all XMP (writes empty XMP record) { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValue(Author => 'Phil Harvey'); $exifTool->SetNewValue(ImageDescription => 'A description'); my $testfile = "t/${testname}_${testnum}_failed.indd"; unlink $testfile; $exifTool->WriteInfo('t/images/InDesign.indd', $testfile); my $info = $exifTool->ImageInfo($testfile); my $not; unless (check($exifTool, $info, $testname, $testnum)) { print 'not '; $not = 1; } print "ok $testnum\n"; ++$testnum; $exifTool->Options(PrintConv => 0); $exifTool->SetNewValue(); $exifTool->SetNewValue('XMP:*'); my $testfile2 = "t/${testname}_${testnum}_failed.indd"; unlink $testfile2; $exifTool->WriteInfo($testfile, $testfile2); $info = $exifTool->ImageInfo($testfile2); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile unless $not; unlink $testfile2; } else { print 'not '; } print "ok $testnum\n"; } # end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/InDesign_2.out���������������������������������������������������������������000644 �000765 �000024 �00000002624 12546457275 017325� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: InDesign.indd [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 12 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2009:06:19 13:09:44-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:12-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:15-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: INDD [File, File, Image] FileTypeExtension - File Type Extension: indd [File, File, Image] MIMEType - MIME Type: application/x-indesign [XMP, XMP-x, Document] xmptk - XMP Toolkit: XMP toolkit 3.0-29, framework 1.6 [XMP, XMP-rdf, Document] about - About: d5d09d4b-2831-11dc-bfa2-d89eae7bab84 [XMP, XMP-xmp, Time] CreateDate - Create Date: 2007:06:30 00:19:02Z [XMP, XMP-xmp, Image] CreatorTool - Creator Tool: Adobe InDesign 3.0 [XMP, XMP-xmp, Time] MetadataDate - Metadata Date: 2007:06:30 00:19:17Z [XMP, XMP-xmp, Time] ModifyDate - Modify Date: 2007:06:30 00:19:17Z [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:indd:d5d09d4a-2831-11dc-bfa2-d89eae7bab84 [XMP, XMP-xmpMM, Other] RenditionClass - Rendition Class: default [XMP, XMP-dc, Image] format - Format: application/x-indesign ������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/InDesign_3.out���������������������������������������������������������������000644 �000765 �000024 �00000003010 12546457275 017314� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: InDesign_3_failed.indd [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 12 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:42-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:42-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:42-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: INDD [File, File, Image] FileTypeExtension - File Type Extension: indd [File, File, Image] MIMEType - MIME Type: application/x-indesign [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-rdf, Document] about - About: d5d09d4b-2831-11dc-bfa2-d89eae7bab84 [XMP, XMP-dc, Image] format - Format: application/x-indesign [XMP, XMP-pdf, Author] Author - Author: Phil Harvey [XMP, XMP-tiff, Image] ImageDescription - Image Description: A description [XMP, XMP-xmp, Time] CreateDate - Create Date: 2007:06:30 00:19:02Z [XMP, XMP-xmp, Image] CreatorTool - Creator Tool: Adobe InDesign 3.0 [XMP, XMP-xmp, Time] MetadataDate - Metadata Date: 2007:06:30 00:19:17Z [XMP, XMP-xmp, Time] ModifyDate - Modify Date: 2007:06:30 00:19:17Z [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:indd:d5d09d4a-2831-11dc-bfa2-d89eae7bab84 [XMP, XMP-xmpMM, Other] RenditionClass - Rendition Class: default ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/InDesign_4.out���������������������������������������������������������������000644 �000765 �000024 �00000001472 12546457275 017327� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: InDesign_4_failed.indd [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 12288 [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:29 10:20:52-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 10:20:52-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:29 10:20:52-04:00 [File, System, Image] FilePermissions - File Permissions: 644 [File, File, Image] FileType - File Type: INDD [File, File, Image] FileTypeExtension - File Type Extension: INDD [File, File, Image] MIMEType - MIME Type: application/x-indesign [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.94 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/IPTC.t�����������������������������������������������������������������������000644 �000765 �000024 �00000012142 11760413060 015550� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/IPTC.t". BEGIN { $| = 1; print "1..8\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::IPTC; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'IPTC'; my $testnum = 1; # test 2: Extract information from IPTC.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/IPTC.jpg', {Duplicates => 1}); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Test GetValue() in list context { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->ExtractInfo('t/images/IPTC.jpg', {JoinLists => 0}); my @values = $exifTool->GetValue('Keywords','ValueConv'); my $values = join '-', @values; my $expected = 'ExifTool-Test-IPTC'; unless ($values eq $expected) { warn "\n Test $testnum differs with \"$values\"\n"; print 'not '; } print "ok $testnum\n"; } # test 4: Test rewriting everything with slightly different values { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Duplicates => 1, Binary => 1, List => 1); my $info = $exifTool->ImageInfo('t/images/IPTC.jpg'); my $tag; foreach $tag (keys %$info) { my $group = $exifTool->GetGroup($tag); my $val = $$info{$tag}; if (ref $val eq 'ARRAY') { push @$val, 'v2'; } elsif (ref $val eq 'SCALAR') { $val = 'v2'; } elsif ($val =~ /^\d+(\.\d*)?$/) { # (add extra .001 to avoid problem with aperture of 4.85 # getting rounded to 4.8 or 4.9 and causing failed tests) $val += ($val / 10) + 1.001; $1 or $val = int($val); } else { $val .= '-v2'; } # eat return values so warning don't get printed my @x = $exifTool->SetNewValue($tag, $val, Group=>$group, Replace=>1); } # also try writing a few specific tags $exifTool->SetNewValue(CreatorCountry => 'Canada'); $exifTool->SetNewValue(CodedCharacterSet => 'UTF8', Protected => 1); undef $info; my $image; my $ok = writeInfo($exifTool,'t/images/IPTC.jpg',\$image); # this is effectively what the RHEL 3 UTF8 LANG problem does: # $image = pack("U*", unpack("C*", $image)); my $exifTool2 = new Image::ExifTool; $exifTool2->Options(Duplicates => 1); $info = $exifTool2->ImageInfo(\$image); my $testfile = "t/${testname}_${testnum}_failed.jpg"; if (check($exifTool2, $info, $testname, $testnum) and $ok) { unlink $testfile; } else { # save bad file open(TESTFILE,">$testfile"); binmode(TESTFILE); print TESTFILE $image; close(TESTFILE); print 'not '; } print "ok $testnum\n"; } # test 5: Test IPTC special characters { ++$testnum; my @writeInfo = ( # (don't put special character hex codes in string in an attempt to patch failed # test by dcollins on Perl 5.95 and i686-linux-thread-multi 2.6.28-11-generic) # ['IPTC:CopyrightNotice' => chr(0xc2) . chr(0xa9) . " 2008 Phil Harvey"], # - didn't fix it, so change it back again: # (dcollins is the only tester with this problem) ['IPTC:CopyrightNotice' => "\xc2\xa9 2008 Phil Harvey"], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/Writer.jpg', 1); print "ok $testnum\n"; } # test 6: Write and read using different default IPTC encoding { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->Options(Charset => 'Cyrillic'); $exifTool->SetNewValuesFromFile('t/images/MIE.mie', 'Comment-ru_RU>Caption-Abstract'); $exifTool->Options(IPTCCharset => 'Cyrillic'); my $ok = writeInfo($exifTool,'t/images/Writer.jpg',$testfile); $exifTool->Options(Charset => 'UTF8'); my $info = $exifTool->ImageInfo($testfile, 'IPTC:*'); if (check($exifTool, $info, $testname, $testnum) and $ok) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 7: Replace an entry in a list { ++$testnum; my @writeInfo = ( ['IPTC:Keywords' => 'Test', DelValue => 1], ['IPTC:Keywords' => 'One'], ['IPTC:Keywords' => 'Two'], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/IPTC.jpg', 1); print "ok $testnum\n"; } # test 8: Write IPTC as a block { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->SetNewValuesFromFile('t/images/IPTC.jpg', 'IPTC'); my $ok = writeInfo($exifTool,'t/images/Writer.jpg',$testfile); my $info = $exifTool->ImageInfo($testfile, 'IPTC:*'); if (check($exifTool, $info, $testname, $testnum) and $ok) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/IPTC_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000006755 12546457275 016375� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: IPTC.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 9.6 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2011:01:03 13:24:03-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:15-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 3ab612778f9944a999853a0cf0cf6b37 [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [JFIF, JFIF, Image] 0 - JFIF Version: 1.02 [JFIF, JFIF, Image] 2 - Resolution Unit: inches [JFIF, JFIF, Image] 3 - X Resolution: 72 [JFIF, JFIF, Image] 5 - Y Resolution: 72 [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 120 - Caption-Abstract: A witty caption [IPTC, IPTC, Author] 122 - Writer-Editor: I wrote it [IPTC, IPTC, Other] 105 - Headline: No headline [IPTC, IPTC, Other] 40 - Special Instructions: What instructions [IPTC, IPTC, Author] 80 - By-line: Phil Harvey [IPTC, IPTC, Author] 85 - By-line Title: My Position [IPTC, IPTC, Author] 110 - Credit: My Credit [IPTC, IPTC, Other] 5 - Object Name: Test IPTC picture [IPTC, IPTC, Time] 55 - Date Created: 2004:02:26 [IPTC, IPTC, Location] 90 - City: Kingston [IPTC, IPTC, Location] 95 - Province-State: Ont [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC, Other] 103 - Original Transmission Reference: What is a transmission reference [IPTC, IPTC, Other] 15 - Category: 1 [IPTC, IPTC, Other] 20 - Supplemental Categories: amazing, image, utilities [IPTC, IPTC, Other] 25 - Keywords: ExifTool, Test, IPTC [IPTC, IPTC, Author] 116 - Copyright Notice: Copyright 2004 Phil Harvey [IPTC, IPTC, Other] 10 - Urgency: 8 (least urgent) [IPTC, IPTC, Author] 115 - Source: I'm the source [Photoshop, Photoshop, Image] 1061 - IPTC Digest: 05ad1770b1a95f1f9788ac995fa647da [Photoshop, Photoshop, Image] 0 - X Resolution: 72 [Photoshop, Photoshop, Image] 2 - Displayed Units X: inches [Photoshop, Photoshop, Image] 4 - Y Resolution: 72 [Photoshop, Photoshop, Image] 6 - Displayed Units Y: inches [Photoshop, Photoshop, Image] 1037 - Global Angle: 30 [Photoshop, Photoshop, Image] 1049 - Global Altitude: 30 [Photoshop, Photoshop, Author] 1034 - Copyright Flag: False [Photoshop, Photoshop, Author] 1035 - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [Photoshop, Photoshop, Image] 0 - Photoshop Quality: 7 [Photoshop, Photoshop, Image] 1 - Photoshop Format: Standard [Photoshop, Photoshop, Image] 2 - Progressive Scans: 3 Scans [APP14, Adobe, Image] 0 - DCT Encode Version: 100 [APP14, Adobe, Image] 1 - APP14 Flags 0: (none) [APP14, Adobe, Image] 2 - APP14 Flags 1: (none) [APP14, Adobe, Image] 3 - Color Transform: YCbCr [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 �������������������Image-ExifTool-10.10/t/IPTC_4.out�������������������������������������������������������������������000644 �000765 �000024 �00000006522 12514720510 016343� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileSize - File Size: 13 kB [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 6d8db9a8e51a489368148270c914e73d [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [JFIF, JFIF, Image] 0 - JFIF Version: 1.02 [JFIF, JFIF, Image] 2 - Resolution Unit: inches [JFIF, JFIF, Image] 3 - X Resolution: 80 [JFIF, JFIF, Image] 5 - Y Resolution: 80 [IPTC, IPTC, Other] 90 - Coded Character Set: UTF8 [IPTC, IPTC, Other] 0 - Envelope Record Version: 4 [IPTC, IPTC, Other] 0 - Application Record Version: 3 [IPTC, IPTC, Other] 120 - Caption-Abstract: A witty caption-v2 [IPTC, IPTC, Author] 122 - Writer-Editor: I wrote it-v2 [IPTC, IPTC, Other] 105 - Headline: No headline-v2 [IPTC, IPTC, Other] 40 - Special Instructions: What instructions-v2 [IPTC, IPTC, Author] 80 - By-line: Phil Harvey-v2 [IPTC, IPTC, Author] 85 - By-line Title: My Position-v2 [IPTC, IPTC, Author] 110 - Credit: My Credit-v2 [IPTC, IPTC, Other] 5 - Object Name: Test IPTC picture-v2 [IPTC, IPTC, Time] 55 - Date Created: 2004:02:26 [IPTC, IPTC, Location] 90 - City: Kingston-v2 [IPTC, IPTC, Location] 95 - Province-State: Ont-v2 [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada-v2 [IPTC, IPTC, Other] 103 - Original Transmission Reference: What is a transmission reference [IPTC, IPTC, Other] 15 - Category: 2 [IPTC, IPTC, Other] 20 - Supplemental Categories: amazing, image, utilities, v2 [IPTC, IPTC, Other] 25 - Keywords: ExifTool, Test, IPTC, v2 [IPTC, IPTC, Author] 116 - Copyright Notice: Copyright 2004 Phil Harvey-v2 [IPTC, IPTC, Other] 10 - Urgency: 8 (least urgent) [IPTC, IPTC, Author] 115 - Source: I'm the source-v2 [Photoshop, Photoshop, Image] 1061 - IPTC Digest: 05ad1770b1a95f1f9788ac995fa647da [Photoshop, Photoshop, Image] 0 - X Resolution: 80 [Photoshop, Photoshop, Image] 2 - Displayed Units X: inches [Photoshop, Photoshop, Image] 4 - Y Resolution: 80 [Photoshop, Photoshop, Image] 6 - Displayed Units Y: inches [Photoshop, Photoshop, Image] 1037 - Global Angle: 34 [Photoshop, Photoshop, Image] 1049 - Global Altitude: 34 [Photoshop, Photoshop, Author] 1034 - Copyright Flag: False [Photoshop, Photoshop, Author] 1035 - URL: http://owl.phy.queensu.ca/~phil/exiftool/-v2 [Photoshop, Photoshop, Image] 0 - Photoshop Quality: 8 [Photoshop, Photoshop, Image] 1 - Photoshop Format: Standard [Photoshop, Photoshop, Image] 2 - Progressive Scans: 3 Scans [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-iptcCore, Author] CreatorContactInfoCiAdrCtry - Creator Country: Canada [APP14, Adobe, Image] 0 - DCT Encode Version: 100 [APP14, Adobe, Image] 1 - APP14 Flags 0: (none) [APP14, Adobe, Image] 2 - APP14 Flags 1: (none) [APP14, Adobe, Image] 3 - Color Transform: YCbCr [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/IPTC_5.out�������������������������������������������������������������������000644 �000765 �000024 �00000000101 11510412077 016330� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[IPTC, IPTC, Author] 116 - Copyright Notice: © 2008 Phil Harvey ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/IPTC_6.out�������������������������������������������������������������������000644 �000765 �000024 �00000000246 11510412077 016343� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[IPTC, IPTC, Other] 120 - Caption-Abstract: Я могу еÑть Ñтекло, оно мне не вредит. [IPTC, IPTC, Other] 0 - Application Record Version: 4 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/IPTC_7.out�������������������������������������������������������������������000644 �000765 �000024 �00000000074 11521301644 016342� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[IPTC, IPTC, Other] 25 - Keywords: ExifTool, One, Two, IPTC ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/IPTC_8.out�������������������������������������������������������������������000644 �000765 �000024 �00000002141 11760413060 016341� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 120 - Caption-Abstract: A witty caption [IPTC, IPTC, Author] 122 - Writer-Editor: I wrote it [IPTC, IPTC, Other] 105 - Headline: No headline [IPTC, IPTC, Other] 40 - Special Instructions: What instructions [IPTC, IPTC, Author] 80 - By-line: Phil Harvey [IPTC, IPTC, Author] 85 - By-line Title: My Position [IPTC, IPTC, Author] 110 - Credit: My Credit [IPTC, IPTC, Other] 5 - Object Name: Test IPTC picture [IPTC, IPTC, Time] 55 - Date Created: 2004:02:26 [IPTC, IPTC, Location] 90 - City: Kingston [IPTC, IPTC, Location] 95 - Province-State: Ont [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC, Other] 103 - Original Transmission Reference: What is a transmission reference [IPTC, IPTC, Other] 15 - Category: 1 [IPTC, IPTC, Other] 20 - Supplemental Categories: amazing, image, utilities [IPTC, IPTC, Other] 25 - Keywords: ExifTool, Test, IPTC [IPTC, IPTC, Author] 116 - Copyright Notice: Copyright 2004 Phil Harvey [IPTC, IPTC, Other] 10 - Urgency: 8 (least urgent) [IPTC, IPTC, Author] 115 - Source: I'm the source �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ITC.t������������������������������������������������������������������������000644 �000765 �000024 �00000001250 11327642463 015440� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/ITC.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::ITC; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'ITC'; my $testnum = 1; # test 2: Extract information from ITC.itc { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/ITC.itc'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ITC_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000002341 12546457275 016240� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: ITC.itc [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 672 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2008:01:12 21:30:37-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:15-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: ITC [File, File, Image] FileTypeExtension - File Type Extension: itc [File, File, Image] MIMEType - MIME Type: application/itunes [ITC, ITC, Image] 16 - Data Type: Artwork [ITC, ITC, Image] 0 - Library ID: 914A6DE01A279611 [ITC, ITC, Image] 2 - Track ID: 195770115E4BA2B6 [ITC, ITC, Image] 4 - Data Location: Local Music File [ITC, ITC, Image] 5 - Image Type: PNG [ITC, ITC, Image] 7 - Image Width: 8 [ITC, ITC, Image] 8 - Image Height: 8 [ITC, ITC, Other] data - Image Data: (Binary data 180 bytes) [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Jpeg2000.t�������������������������������������������������������������������000644 �000765 �000024 �00000002535 12073336043 016210� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Jpeg2000.t". BEGIN { $| = 1; print "1..4\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Jpeg2000; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Jpeg2000'; my $testnum = 1; # test 2: Extract information from Jpeg2000.jp2 { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Jpeg2000.jp2'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( ['IPTC:Keywords' => 'test keyword'], ['XMP:City' => 'a city'], ['EXIF:ImageDescription' => 'a description'], ['XML' => '<test>Yippee</test>', Protected => 1 ], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/Jpeg2000.jp2'); print "ok $testnum\n"; } # test 4: Extract information from Jpeg2000.j2c { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Jpeg2000.j2c'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Jpeg2000_2.out���������������������������������������������������������������000644 �000765 �000024 �00000012300 12601264464 016770� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.03 [File, System, Image] FileName - File Name: Jpeg2000.jp2 [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1954 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:09:25 11:32:27-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:09:25 11:32:28-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:09:25 11:32:27-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JP2 [File, File, Image] FileTypeExtension - File Type Extension: jp2 [File, File, Image] MIMEType - MIME Type: image/jp2 [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [Jpeg2000, Jpeg2000, Video] 0 - Major Brand: JPEG 2000 Image (.JP2) [Jpeg2000, Jpeg2000, Video] 1 - Minor Version: 0.0.0 [Jpeg2000, Jpeg2000, Video] 2 - Compatible Brands: jp2 [Jpeg2000, Jpeg2000, Image] 0 - Image Height: 16 [Jpeg2000, Jpeg2000, Image] 4 - Image Width: 16 [Jpeg2000, Jpeg2000, Image] 8 - Number Of Components: 3 [Jpeg2000, Jpeg2000, Image] 10 - Bits Per Component: 8 Bits, Unsigned [Jpeg2000, Jpeg2000, Image] 11 - Compression: JPEG 2000 [Jpeg2000, Jpeg2000, Image] 0 - Color Spec Method: Enumerated [Jpeg2000, Jpeg2000, Image] 1 - Color Spec Precedence: 0 [Jpeg2000, Jpeg2000, Image] 2 - Color Spec Approximation: Not Specified [Jpeg2000, Jpeg2000, Image] 3 - Color Space: sRGB [EXIF, IFD0, Image] 256 - Image Width: 1 [EXIF, IFD0, Image] 257 - Image Height: 1 [EXIF, IFD0, Image] 258 - Bits Per Sample: 8 [EXIF, IFD0, Image] 259 - Compression: Uncompressed [EXIF, IFD0, Image] 273 - Strip Offsets: 125 [EXIF, IFD0, Image] 277 - Samples Per Pixel: 1 [EXIF, IFD0, Image] 279 - Strip Byte Counts: 0 [EXIF, IFD0, Image] 284 - Planar Configuration: Chunky [EXIF, IFD0, Image] 33550 - Pixel Scale: 1 1 0 [EXIF, IFD0, Location] 33922 - Model Tie Point: 0 0 0 334159.28 4429865.18 0 [GeoTiff, GeoTiff, Location] 1 - Geo Tiff Version: 1.1.0 [GeoTiff, GeoTiff, Location] 1024 - GT Model Type: Projected [GeoTiff, GeoTiff, Location] 1025 - GT Raster Type: Pixel Is Area [GeoTiff, GeoTiff, Location] 1026 - GT Citation: NAD83 / UTM zone 18N [GeoTiff, GeoTiff, Location] 3072 - Projected CS Type: NAD83 UTM zone 18N [GeoTiff, GeoTiff, Location] 3076 - Proj Linear Units: Linear Meter [XMP, XMP, Unknown] :imageCreationXmlns - Image Creation Xmlns: http://www.jpeg.org/jpx/1.0/xml [XMP, XMP-xsi, Unknown] xsi:imageCreationSchemaLocation - Image Creation Schema Location: http://www.jpeg.org/jpx/1.0/xml;http://www.jpeg.org/metadata/15444-2.xsd [XMP, XMP, Unknown] :imageCreationGeneralCreationInfoCreationTime - Image Creation General Creation Info Creation Time: 2001:08:01 15:40:00.000-06:00 [XMP, XMP, Unknown] :contentDescriptionXmlns - Content Description Xmlns: http://www.jpeg.org/jpx/1.0/xml [XMP, XMP-xsi, Unknown] xsi:contentDescriptionSchemaLocation - Content Description Schema Location: http://www.jpeg.org/jpx/1.0/xml;http://www.jpeg.org/metadata/15444-2.xsd [XMP, XMP, Unknown] :contentDescriptionCaption - Content Description Caption: Wide Dynamic Range Scene [XMP, XMP, Unknown] :contentDescriptionLocationAddressType - Content Description Location Address Type: Test Scene Location [XMP, XMP, Unknown] :contentDescriptionLocationAddressAddrCompType - Content Description Location Address Addr Comp Type: Street [XMP, XMP, Unknown] :contentDescriptionLocationAddressAddrComp - Content Description Location Address Addr Comp: 70 Lighthouse St [XMP, XMP, Unknown] :contentDescriptionLocationAddressAddrCompType - Content Description Location Address Addr Comp Type: City [XMP, XMP, Unknown] :contentDescriptionLocationAddressAddrComp - Content Description Location Address Addr Comp: Charlotte [XMP, XMP, Unknown] :contentDescriptionLocationAddressAddrCompType - Content Description Location Address Addr Comp Type: State [XMP, XMP, Unknown] :contentDescriptionLocationAddressAddrComp - Content Description Location Address Addr Comp: New York [XMP, XMP, Unknown] :contentDescriptionLocationAddressZipcode - Content Description Location Address Zipcode: 14612 [XMP, XMP, Unknown] :contentDescriptionLocationAddressCountry - Content Description Location Address Country: US [XMP, XMP, Unknown] :contentDescriptionThingId - Content Description Thing Id: 5431 [XMP, XMP, Unknown] :contentDescriptionThingName - Content Description Thing Name: Macbeth chart [XMP, XMP, Unknown] :contentDescriptionThingPositionRectX - Content Description Thing Position Rect X: 562 [XMP, XMP, Unknown] :contentDescriptionThingPositionRectY - Content Description Thing Position Rect Y: 286 [XMP, XMP, Unknown] :contentDescriptionThingPositionRectWidth - Content Description Thing Position Rect Width: 59 [XMP, XMP, Unknown] :contentDescriptionThingPositionRectHeight - Content Description Thing Position Rect Height: 39 [XMP, XMP, Unknown] :contentDescriptionEventEventType - Content Description Event Event Type: Capture Device Test 1234 [XMP, XMP, Unknown] :contentDescriptionEventDescription - Content Description Event Description: Project Prototype [Composite, Composite, Image] ImageSize - Image Size: 16x16 [Composite, Composite, Image] Megapixels - Megapixels: 0.000256 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Jpeg2000_3.out���������������������������������������������������������������000644 �000765 �000024 �00000006077 12546457275 017023� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Jpeg2000_3_failed.jp2 [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 3.6 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:42-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:42-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:42-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JP2 [File, File, Image] FileTypeExtension - File Type Extension: jp2 [File, File, Image] MIMEType - MIME Type: image/jp2 [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [Jpeg2000, Jpeg2000, Video] 0 - Major Brand: JPEG 2000 Image (.JP2) [Jpeg2000, Jpeg2000, Video] 1 - Minor Version: 0.0.0 [Jpeg2000, Jpeg2000, Video] 2 - Compatible Brands: jp2 [Jpeg2000, Jpeg2000, Image] 0 - Image Height: 16 [Jpeg2000, Jpeg2000, Image] 4 - Image Width: 16 [Jpeg2000, Jpeg2000, Image] 8 - Number Of Components: 3 [Jpeg2000, Jpeg2000, Image] 10 - Bits Per Component: 8 Bits, Unsigned [Jpeg2000, Jpeg2000, Image] 11 - Compression: JPEG 2000 [Jpeg2000, Jpeg2000, Image] 0 - Color Spec Method: Enumerated [Jpeg2000, Jpeg2000, Image] 1 - Color Spec Precedence: 0 [Jpeg2000, Jpeg2000, Image] 2 - Color Spec Approximation: Not Specified [Jpeg2000, Jpeg2000, Image] 3 - Color Space: sRGB [EXIF, IFD0, Image] 256 - Image Width: 1 [EXIF, IFD0, Image] 257 - Image Height: 1 [EXIF, IFD0, Image] 258 - Bits Per Sample: 8 [EXIF, IFD0, Image] 259 - Compression: Uncompressed [EXIF, IFD0, Image] 273 - Strip Offsets: 101 [EXIF, IFD0, Image] 277 - Samples Per Pixel: 1 [EXIF, IFD0, Image] 279 - Strip Byte Counts: 0 [EXIF, IFD0, Image] 284 - Planar Configuration: Chunky [EXIF, IFD0, Image] 33550 - Pixel Scale: 1 1 0 [EXIF, IFD0, Location] 33922 - Model Tie Point: 0 0 0 334159.28 4429865.18 0 [EXIF, IFD0, Image] 270 - Image Description: a description [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [GeoTiff, GeoTiff, Location] 1 - Geo Tiff Version: 1.1.0 [GeoTiff, GeoTiff, Location] 1024 - GT Model Type: Projected [GeoTiff, GeoTiff, Location] 1025 - GT Raster Type: Pixel Is Area [GeoTiff, GeoTiff, Location] 1026 - GT Citation: NAD83 / UTM zone 18N [GeoTiff, GeoTiff, Location] 3072 - Projected CS Type: NAD83 UTM zone 18N [GeoTiff, GeoTiff, Location] 3076 - Proj Linear Units: Linear Meter [XMP, XMP, Unknown] :test - Test: Yippee [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-photoshop, Location] City - City: a city [IPTC, IPTC, Other] 25 - Keywords: test keyword [IPTC, IPTC, Other] 0 - Application Record Version: 4 [Composite, Composite, Image] ImageSize - Image Size: 16x16 [Composite, Composite, Image] Megapixels - Megapixels: 0.000256 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Jpeg2000_4.out���������������������������������������������������������������000644 �000765 �000024 �00000002474 12546457275 017021� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Jpeg2000.j2c [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 618 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2011:08:15 11:40:57-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:15-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: J2C [File, File, Image] FileTypeExtension - File Type Extension: j2c [File, File, Image] MIMEType - MIME Type: image/x-j2c [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] Comment - Comment: Kakadu-v4.2.1 [File, File, Image] Comment - Comment: Kdu-Layer-Info: log_2{Delta-D(MSE)/[2^16*Delta-L(bytes)]}, L(bytes); -0.0, 4.2e+02; -0.0, 4.3e+02; -0.0, 4.5e+02; -0.0, 4.7e+02; -0.0, 4.9e+02; -0.0, 5.0e+02; -0.0, 5.2e+02; -0.0, 5.4e+02; -0.0, 5.6e+02; -0.0, 5.8e+02; -0.0, 6.0e+02;-256.0, 6.2e+02; [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/JVC.t������������������������������������������������������������������������000644 �000765 �000024 �00000002025 11327642463 015444� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/JVC.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::JVC; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'JVC'; my $testnum = 1; # test 2: Extract information from EXIF-based JVC maker notes { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/JVC.jpg', { Group1 => 'JVC', Unknown => 1 }); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Extract information from text-based JVC maker notes { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/JVC.jpg', { Group1 => 'JVC', Unknown => 1 }); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/JVC_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000000241 11142612775 016225� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[MakerNotes, JVC, Camera] 1 - JVC 0x0001: 2 [MakerNotes, JVC, Camera] 2 - CPU Versions: CPU1 2.00, 0, CPU2 0496, 0 [MakerNotes, JVC, Camera] 3 - Quality: Normal ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/JVC_3.out��������������������������������������������������������������������000644 �000765 �000024 �00000000241 11142612775 016226� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[MakerNotes, JVC, Camera] 1 - JVC 0x0001: 2 [MakerNotes, JVC, Camera] 2 - CPU Versions: CPU1 2.00, 0, CPU2 0496, 0 [MakerNotes, JVC, Camera] 3 - Quality: Normal ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Kodak.t����������������������������������������������������������������������000644 �000765 �000024 �00000001763 11327642463 016063� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Kodak.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Kodak; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Kodak'; my $testnum = 1; # test 2: Extract information from Kodak.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Kodak.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( [YearCreated => '2005', Group => 'Kodak'], [MonthDayCreated => '03:31', Group => 'Kodak'], [DigitalZoom => '2'], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum); print "ok $testnum\n"; } # end �������������Image-ExifTool-10.10/t/Kodak_2.out������������������������������������������������������������������000644 �000765 �000024 �00000015220 12546457275 016652� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Kodak.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 3.3 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:06:05 13:12:56-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:30-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: EASTMAN KODAK COMPANY [EXIF, IFD0, Camera] 272 - Camera Model Name: KODAK DX4900 ZOOM DIGITAL CAMERA [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 230 [EXIF, IFD0, Image] 283 - Y Resolution: 230 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/180 [EXIF, ExifIFD, Image] 33437 - F Number: 6.7 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2002:05:01 10:22:28 [EXIF, ExifIFD, Time] 36868 - Create Date: 2002:05:01 10:22:28 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/181 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 6.7 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.1 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Average [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 10.2 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2448 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1632 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41493 - Exposure Index: 100 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1664 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Kodak, Camera] 0 - Kodak Model: DX4900 [MakerNotes, Kodak, Camera] 9 - Quality: Fine [MakerNotes, Kodak, Camera] 10 - Burst Mode: Off [MakerNotes, Kodak, Camera] 12 - Kodak Image Width: 2448 [MakerNotes, Kodak, Camera] 14 - Kodak Image Height: 1632 [MakerNotes, Kodak, Time] 16 - Year Created: 2002 [MakerNotes, Kodak, Time] 18 - Month Day Created: 05:01 [MakerNotes, Kodak, Time] 20 - Time Created: 10:22:28.62 [MakerNotes, Kodak, Camera] 27 - Shutter Mode: Auto [MakerNotes, Kodak, Camera] 28 - Metering Mode: Multi-segment [MakerNotes, Kodak, Camera] 29 - Sequence Number: 0 [MakerNotes, Kodak, Camera] 30 - F Number: 6.73 [MakerNotes, Kodak, Camera] 32 - Exposure Time: 1/216 [MakerNotes, Kodak, Camera] 36 - Exposure Compensation: 0 [MakerNotes, Kodak, Camera] 56 - Focus Mode: Normal [MakerNotes, Kodak, Camera] 64 - White Balance: Auto [MakerNotes, Kodak, Camera] 92 - Flash Mode: Auto [MakerNotes, Kodak, Camera] 93 - Flash Fired: No [MakerNotes, Kodak, Camera] 94 - ISO Setting: Auto [MakerNotes, Kodak, Camera] 96 - ISO: 108 [MakerNotes, Kodak, Camera] 98 - Total Zoom: 1.4 [MakerNotes, Kodak, Camera] 100 - Date Time Stamp: Off [MakerNotes, Kodak, Camera] 102 - Color Mode: Saturated Color [MakerNotes, Kodak, Camera] 104 - Digital Zoom: 1 [MakerNotes, Kodak, Camera] 107 - Sharpness: Normal [FlashPix, FlashPix, Other] 1 - Code Page: Unicode UTF-16, little endian [FlashPix, FlashPix, Other] 268435456 - Used Extension Numbers: 1, 2 [FlashPix, FlashPix, Other] 1 - Extension Name: Screen nail [FlashPix, FlashPix, Other] 2 - Extension Class ID: 10000230-6FC0-11D0-BD01-00609719A180 [FlashPix, FlashPix, Other] 3 - Extension Persistence: Invalidated By Modification [FlashPix, FlashPix, Time] 4 - Extension Create Date: 1998:01:08 08:28:54 [FlashPix, FlashPix, Time] 5 - Extension Modify Date: 1998:01:08 08:28:54 [FlashPix, FlashPix, Other] 6 - Creating Application: Digita [FlashPix, FlashPix, Other] 7 - Extension Description: Presized image for LCD display [FlashPix, FlashPix, Other] 4096 - Storage-Stream Pathname: /.Screen Nail_bd0100609719a180 [FlashPix, FlashPix, Other] 1 - Extension Name: Audio [FlashPix, FlashPix, Other] 2 - Extension Class ID: 10000100-6FC0-11D0-BD01-00609719A180 [FlashPix, FlashPix, Other] 3 - Extension Persistence: Always Valid [FlashPix, FlashPix, Time] 4 - Extension Create Date: 1998:12:17 22:04:36 [FlashPix, FlashPix, Time] 5 - Extension Modify Date: 1998:12:17 22:04:36 [FlashPix, FlashPix, Other] 6 - Creating Application: KIES_Toolkit [FlashPix, FlashPix, Other] 7 - Extension Description: Audio storage [FlashPix, FlashPix, Other] 4096 - Storage-Stream Pathname: /Audio_bd0100609719a180 [FlashPix, FlashPix, Audio] Audio Stream - Audio Stream: (Binary data 18 bytes) [FlashPix, FlashPix, Other] 1 - Code Page: Unicode UTF-16, little endian [FlashPix, FlashPix, Other] Screen Nail - Screen Nail: (Binary data 166 bytes) [Composite, Composite, Image] Aperture - Aperture: 6.7 [Composite, Composite, Time] DateCreated - Date Created: 2002:05:01 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/216 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 10.2 mm [Composite, Composite, Image] LightValue - Light Value: 13.1 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Kodak_3.out������������������������������������������������������������������000644 �000765 �000024 �00000016243 12546457275 016661� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Kodak_3_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 3.3 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:45-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:45-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:45-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: EASTMAN KODAK COMPANY [EXIF, IFD0, Camera] 272 - Camera Model Name: KODAK DX4900 ZOOM DIGITAL CAMERA [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 230 [EXIF, IFD0, Image] 283 - Y Resolution: 230 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/180 [EXIF, ExifIFD, Image] 33437 - F Number: 6.7 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2002:05:01 10:22:28 [EXIF, ExifIFD, Time] 36868 - Create Date: 2002:05:01 10:22:28 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/181 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 6.7 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.1 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Average [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 10.2 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2448 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1632 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41493 - Exposure Index: 100 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1664 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Kodak, Camera] 0 - Kodak Model: DX4900 [MakerNotes, Kodak, Camera] 9 - Quality: Fine [MakerNotes, Kodak, Camera] 10 - Burst Mode: Off [MakerNotes, Kodak, Camera] 12 - Kodak Image Width: 2448 [MakerNotes, Kodak, Camera] 14 - Kodak Image Height: 1632 [MakerNotes, Kodak, Time] 16 - Year Created: 2005 [MakerNotes, Kodak, Time] 18 - Month Day Created: 03:31 [MakerNotes, Kodak, Time] 20 - Time Created: 10:22:28.62 [MakerNotes, Kodak, Camera] 24 - Burst Mode 2: 0 [MakerNotes, Kodak, Camera] 27 - Shutter Mode: Auto [MakerNotes, Kodak, Camera] 28 - Metering Mode: Multi-segment [MakerNotes, Kodak, Camera] 29 - Sequence Number: 0 [MakerNotes, Kodak, Camera] 30 - F Number: 6.73 [MakerNotes, Kodak, Camera] 32 - Exposure Time: 1/216 [MakerNotes, Kodak, Camera] 36 - Exposure Compensation: 0 [MakerNotes, Kodak, Camera] 38 - Various Modes: 65535 [MakerNotes, Kodak, Camera] 40 - Distance 1: 13125 [MakerNotes, Kodak, Camera] 44 - Distance 2: 13125 [MakerNotes, Kodak, Camera] 48 - Distance 3: 12125 [MakerNotes, Kodak, Camera] 52 - Distance 4: 12250 [MakerNotes, Kodak, Camera] 56 - Focus Mode: Normal [MakerNotes, Kodak, Camera] 58 - Various Modes 2: 65535 [MakerNotes, Kodak, Camera] 60 - Panorama Mode: 0 [MakerNotes, Kodak, Camera] 62 - Subject Distance: 0 [MakerNotes, Kodak, Camera] 64 - White Balance: Auto [MakerNotes, Kodak, Camera] 92 - Flash Mode: Auto [MakerNotes, Kodak, Camera] 93 - Flash Fired: No [MakerNotes, Kodak, Camera] 94 - ISO Setting: Auto [MakerNotes, Kodak, Camera] 96 - ISO: 108 [MakerNotes, Kodak, Camera] 98 - Total Zoom: 1.4 [MakerNotes, Kodak, Camera] 100 - Date Time Stamp: Off [MakerNotes, Kodak, Camera] 102 - Color Mode: Saturated Color [MakerNotes, Kodak, Camera] 104 - Digital Zoom: 2 [MakerNotes, Kodak, Camera] 107 - Sharpness: Normal [FlashPix, FlashPix, Other] 1 - Code Page: Unicode UTF-16, little endian [FlashPix, FlashPix, Other] 268435456 - Used Extension Numbers: 1, 2 [FlashPix, FlashPix, Other] 1 - Extension Name: Screen nail [FlashPix, FlashPix, Other] 2 - Extension Class ID: 10000230-6FC0-11D0-BD01-00609719A180 [FlashPix, FlashPix, Other] 3 - Extension Persistence: Invalidated By Modification [FlashPix, FlashPix, Time] 4 - Extension Create Date: 1998:01:08 08:28:54 [FlashPix, FlashPix, Time] 5 - Extension Modify Date: 1998:01:08 08:28:54 [FlashPix, FlashPix, Other] 6 - Creating Application: Digita [FlashPix, FlashPix, Other] 7 - Extension Description: Presized image for LCD display [FlashPix, FlashPix, Other] 4096 - Storage-Stream Pathname: /.Screen Nail_bd0100609719a180 [FlashPix, FlashPix, Other] 1 - Extension Name: Audio [FlashPix, FlashPix, Other] 2 - Extension Class ID: 10000100-6FC0-11D0-BD01-00609719A180 [FlashPix, FlashPix, Other] 3 - Extension Persistence: Always Valid [FlashPix, FlashPix, Time] 4 - Extension Create Date: 1998:12:17 22:04:36 [FlashPix, FlashPix, Time] 5 - Extension Modify Date: 1998:12:17 22:04:36 [FlashPix, FlashPix, Other] 6 - Creating Application: KIES_Toolkit [FlashPix, FlashPix, Other] 7 - Extension Description: Audio storage [FlashPix, FlashPix, Other] 4096 - Storage-Stream Pathname: /Audio_bd0100609719a180 [FlashPix, FlashPix, Audio] Audio Stream - Audio Stream: (Binary data 18 bytes) [FlashPix, FlashPix, Other] 1 - Code Page: Unicode UTF-16, little endian [FlashPix, FlashPix, Audio] 2 - Flash Pix Audio Info 0x0002: 0 [FlashPix, FlashPix, Other] Screen Nail - Screen Nail: (Binary data 166 bytes) [Composite, Composite, Image] Aperture - Aperture: 6.7 [Composite, Composite, Time] DateCreated - Date Created: 2005:03:31 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/216 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Image] LightValue - Light Value: 13.1 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 10.2 mm �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/KyoceraRaw.t�����������������������������������������������������������������000644 �000765 �000024 �00000001313 11327642463 017070� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/KyoceraRaw.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::KyoceraRaw; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'KyoceraRaw'; my $testnum = 1; # test 2: Extract information from KyoceraRaw.raw { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/KyoceraRaw.raw'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/KyoceraRaw_2.out�������������������������������������������������������������000644 �000765 �000024 �00000003367 12546457275 017701� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: KyoceraRaw.raw [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 166 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:02:17 11:59:53-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:22-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: RAW [File, File, Image] FileTypeExtension - File Type Extension: raw [File, File, Image] MIMEType - MIME Type: image/x-raw [MakerNotes, KyoceraRaw, Camera] 1 - Firmware Version: Ver. 1.07 [MakerNotes, KyoceraRaw, Camera] 12 - Model: N DIGITAL [MakerNotes, KyoceraRaw, Camera] 25 - Make: KYOCERA [MakerNotes, KyoceraRaw, Time] 33 - Date/Time Original: 2005:07:16 18:14:30 [MakerNotes, KyoceraRaw, Image] 52 - ISO: 100 [MakerNotes, KyoceraRaw, Image] 56 - Exposure Time: 1/125 [MakerNotes, KyoceraRaw, Image] 60 - WB RGGB Levels: 84 64 64 86 [MakerNotes, KyoceraRaw, Image] 88 - F Number: 11 [MakerNotes, KyoceraRaw, Camera] 104 - Max Aperture: 5.2 [MakerNotes, KyoceraRaw, Camera] 112 - Focal Length: 55 mm [MakerNotes, KyoceraRaw, Camera] 124 - Lens: VS28-80/3.5 [Composite, Composite, Image] Aperture - Aperture: 11.3 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.34375 [Composite, Composite, Camera] RedBalance - Red Balance: 1.3125 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/125 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 55.0 mm [Composite, Composite, Image] LightValue - Light Value: 14.0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang.t�����������������������������������������������������������������������000644 �000765 �000024 �00000002212 11157511444 015674� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl t/Lang.t' use Image::ExifTool; use t::TestLib; $| = 1; print "1..", scalar(@Image::ExifTool::langs), "\n"; my $testname = 'Lang'; my $testnum = 0; # test 1: Test localized language description for a lang-alt tag { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Lang => 'de'); my $info = $exifTool->ImageInfo('t/images/MIE.mie', 'Comment-fr_FR'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # tests 2-N: Test all languages my $exifTool = new Image::ExifTool; my $lang; foreach $lang (@Image::ExifTool::langs) { next if $lang eq 'en'; # skip english ++$testnum; my $not = 'not '; $exifTool->Options(Lang => $lang); if ($exifTool->Options('Lang') eq $lang) { my $info = $exifTool->ImageInfo('t/images/FujiFilm.jpg', 'Exif:All'); $not = '' if check($exifTool, $info, $testname, $testnum); } else { warn "\n Error loading language $lang\n"; } print "${not}ok $testnum\n"; } # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_1.out�������������������������������������������������������������������000644 �000765 �000024 �00000000160 11157511444 016460� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[MIE, MIE-Doc, Document] Comment-fr_FR - Kommentar (fr_FR): Je peux manger du verre, ça ne me fait pas de mal. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_10.out������������������������������������������������������������������000644 �000765 �000024 �00000005474 11727644373 016570� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - メーカー: FUJIFILM [EXIF, IFD0, Camera] 272 - ç”»åƒå…¥åŠ›æ©Ÿå™¨ãƒ¢ãƒ‡ãƒ«: FinePix2400Zoom [EXIF, IFD0, Image] 274 - ç”»åƒã®å‘ã: 水平(標準) [EXIF, IFD0, Image] 282 - ç”»åƒå¹…ã®è§£åƒåº¦: 72 [EXIF, IFD0, Image] 283 - ç”»åƒé«˜ã•ã®è§£åƒåº¦: 72 [EXIF, IFD0, Image] 296 - Xã¨Yè§£åƒåº¦å˜ä½: インム[EXIF, IFD0, Image] 305 - ソフトウェア: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - ãƒ•ã‚¡ã‚¤ãƒ«ä½œæˆæ—¥æ™‚: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Yã¨Cã®ä½ç½®: 相互é…ç½® [EXIF, IFD0, Author] 33432 - 版権所有者: [EXIF, ExifIFD, Image] 33437 - F値: 3.5 [EXIF, ExifIFD, Camera] 34850 - 露出プログラム: ノーマルプログラム [EXIF, ExifIFD, Image] 34855 - ISOスピードレート: 100 [EXIF, ExifIFD, Image] 36864 - Exifãƒãƒ¼ã‚¸ãƒ§ãƒ³: 0210 [EXIF, ExifIFD, Time] 36867 - ã‚ªãƒªã‚¸ãƒŠãƒ«ãƒ‡ãƒ¼ã‚¿ä½œæˆæ—¥æ™‚: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - ãƒ‡ã‚¸ã‚¿ãƒ«ãƒ‡ãƒ¼ã‚¿ä½œæˆæ—¥æ™‚: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - 儿§‹æˆè¦ç´ ã®æ„味: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - ç”»åƒåœ§ç¸®ãƒ¢ãƒ¼ãƒ‰: 1.6 [EXIF, ExifIFD, Image] 37377 - シャッタースピード: 1/64 [EXIF, ExifIFD, Image] 37378 - 絞り: 3.5 [EXIF, ExifIFD, Image] 37379 - ブライトãƒã‚¹: 2 [EXIF, ExifIFD, Image] 37380 - 露出補正値: 0 [EXIF, ExifIFD, Camera] 37381 - 最大レンズå£å¾„: 3.5 [EXIF, ExifIFD, Camera] 37383 - 測光モード: パターン [EXIF, ExifIFD, Camera] 37385 - ストロボ: フラッシュ発光 [EXIF, ExifIFD, Camera] 37386 - レンズ焦点è·é›¢: 6.0 mm [EXIF, ExifIFD, Image] 40960 - サãƒãƒ¼ãƒˆãƒ•ラッシュピックスãƒãƒ¼ã‚¸ãƒ§ãƒ³: 0100 [EXIF, ExifIFD, Image] 40961 - 色空間: sRGB [EXIF, ExifIFD, Image] 40962 - ç”»åƒå¹…: 1600 [EXIF, ExifIFD, Image] 40963 - ç”»åƒé«˜ã•: 1200 [EXIF, InteropIFD, Image] 1 - インターオペラビリティID: R98: DCF基本ファイル(sRGB) [EXIF, InteropIFD, Image] 2 - インターオペラビリティãƒãƒ¼ã‚¸ãƒ§ãƒ³: 0100 [EXIF, ExifIFD, Camera] 41486 - 焦点é¢Xè§£åƒåº¦: 3053 [EXIF, ExifIFD, Camera] 41487 - 焦点é¢Yè§£åƒåº¦: 3053 [EXIF, ExifIFD, Camera] 41488 - 焦点é¢è§£åƒåº¦å˜ä½: cm [EXIF, ExifIFD, Camera] 41495 - センサー方å¼: å˜æ¿å¼ã‚«ãƒ©ãƒ¼ã‚»ãƒ³ã‚µãƒ¼ [EXIF, ExifIFD, Image] 41728 - ファイルソース: デジタルカメラ [EXIF, ExifIFD, Image] 41729 - シーンタイプ: ç›´æŽ¥æ’®å½±ç”»åƒ [EXIF, IFD1, Image] 259 - 圧縮計画: JPEG(å¤ã„å½¢å¼) [EXIF, IFD1, Image] 274 - ç”»åƒã®å‘ã: 水平(標準) [EXIF, IFD1, Image] 282 - ç”»åƒå¹…ã®è§£åƒåº¦: 72 [EXIF, IFD1, Image] 283 - ç”»åƒé«˜ã•ã®è§£åƒåº¦: 72 [EXIF, IFD1, Image] 296 - Xã¨Yè§£åƒåº¦å˜ä½: インム[EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Yã¨Cã®ä½ç½®: 相互é…ç½® ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_11.out������������������������������������������������������������������000644 �000765 �000024 �00000005240 11727644374 016561� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - ë©”ì´ì»¤: FUJIFILM [EXIF, IFD0, Camera] 272 - ì¹´ë©”ë¼ ëª¨ë¸: FinePix2400Zoom [EXIF, IFD0, Image] 274 - ì´ë¯¸ì§€ 위치: 0° (위쪽/좌측) [EXIF, IFD0, Image] 282 - ìˆ˜í‰ í•´ìƒë„: 72 [EXIF, IFD0, Image] 283 - ìˆ˜ì§ í•´ìƒë„: 72 [EXIF, IFD0, Image] 296 - X 와 Y í•´ìƒë„ 단위: ì¸ì¹˜ [EXIF, IFD0, Image] 305 - 소프트웨어: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - íŒŒì¼ ë³€ê²½ ë‚ ì§œ ë° ì‹œê°„: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Y and C 위치: 주변 [EXIF, IFD0, Author] 33432 - 저작권 소유ìž: [EXIF, ExifIFD, Image] 33437 - F 숫ìž: 3.5 [EXIF, ExifIFD, Camera] 34850 - 노출 프로그램: 보통 프로그램 [EXIF, ExifIFD, Image] 34855 - ISO ì†ë„: 100 [EXIF, ExifIFD, Image] 36864 - Exif 버전: 0210 [EXIF, ExifIFD, Time] 36867 - ì›ë³¸ ë°ì´í„° ìƒì„± ì¼ì‹œ: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - 디지털 ë°ì´í„° ìƒì„± ì¼ì‹œ: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - ê° êµ¬ì„± ìš”ì†Œì˜ ì˜ë¯¸: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - ì´ë¯¸ì§€ ì••ì¶• 모드: 1.6 [EXIF, ExifIFD, Image] 37377 - 셔터 ì†ë„: 1/64 [EXIF, ExifIFD, Image] 37378 - 조리개: 3.5 [EXIF, ExifIFD, Image] 37379 - ë°ê¸°: 2 [EXIF, ExifIFD, Image] 37380 - 노출 ë³´ì •: 0 [EXIF, ExifIFD, Camera] 37381 - 최대 렌즈 조리개: 3.5 [EXIF, ExifIFD, Camera] 37383 - 측광 모드: 멀티 패턴 [EXIF, ExifIFD, Camera] 37385 - 플래시: 플래시 발광 [EXIF, ExifIFD, Camera] 37386 - ì´ˆì  ê¸¸ì´: 6.0 mm [EXIF, ExifIFD, Image] 40960 - ì§€ì›ë˜ëŠ” Flashpix 버전: 0100 [EXIF, ExifIFD, Image] 40961 - 색공간: sRGB [EXIF, ExifIFD, Image] 40962 - ì´ë¯¸ì§€ ë„“ì´: 1600 [EXIF, ExifIFD, Image] 40963 - ì´ë¯¸ì§€ 높ì´: 1200 [EXIF, InteropIFD, Image] 1 - ìƒí˜¸ìš´ìš©ì„± ì¦ëª…: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - ìƒí˜¸ 운용성 버전: 0100 [EXIF, ExifIFD, Camera] 41486 - ìˆ˜í‰ í•´ìƒë„ ì´ˆì ë©´: 3053 [EXIF, ExifIFD, Camera] 41487 - ìˆ˜ì§ í•´ìƒë„ ì´ˆì ë©´: 3053 [EXIF, ExifIFD, Camera] 41488 - ì´ˆì ë©´ í•´ìƒë„ 단위: cm [EXIF, ExifIFD, Camera] 41495 - 검출 ë°©ì‹: One-chip ìƒ‰ìƒ ì˜ì—­ 센서 [EXIF, ExifIFD, Image] 41728 - íŒŒì¼ ì¶œì²˜: 디지털 ì¹´ë©”ë¼ [EXIF, ExifIFD, Image] 41729 - 장면 형ì‹: ì§ì ‘ ì´¬ì˜ëœ ì´ë¯¸ì§€ [EXIF, IFD1, Image] 259 - ì••ì¶• 설계: JPEG (예전 스타ì¼) [EXIF, IFD1, Image] 274 - ì´ë¯¸ì§€ 위치: 0° (위쪽/좌측) [EXIF, IFD1, Image] 282 - ìˆ˜í‰ í•´ìƒë„: 72 [EXIF, IFD1, Image] 283 - ìˆ˜ì§ í•´ìƒë„: 72 [EXIF, IFD1, Image] 296 - X 와 Y í•´ìƒë„ 단위: ì¸ì¹˜ [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y and C 위치: 주변 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_12.out������������������������������������������������������������������000644 �000765 �000024 �00000005460 11727644374 016566� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Fabrikant: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera model: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Oriëntatie van de afbeelding: 0° (boven/links) [EXIF, IFD0, Image] 282 - Horizontale afbeelding resolutie: 72 [EXIF, IFD0, Image] 283 - Vertikale afbeelding resolutie: 72 [EXIF, IFD0, Image] 296 - Eenheid van de X und Y resolutie: inches [EXIF, IFD0, Image] 305 - Gebruikte software: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - Datum bestand wijziging: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Y en C positie: Naast liggend [EXIF, IFD0, Author] 33432 - Copyright houder: [EXIF, ExifIFD, Image] 33437 - F waarde: 3.5 [EXIF, ExifIFD, Camera] 34850 - Belichtingsprogramma: Normaal programma [EXIF, ExifIFD, Image] 34855 - ISO gevoeligheid: 100 [EXIF, ExifIFD, Image] 36864 - Exif versie: 0210 [EXIF, ExifIFD, Time] 36867 - Datum van de originele data generatie: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Datum van de originele data generatie: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Betekenis van elke component: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Afbeelding compressie modus: 1.6 [EXIF, ExifIFD, Image] 37377 - Belichtingstijd: 1/64 [EXIF, ExifIFD, Image] 37378 - Diafragma: 3.5 [EXIF, ExifIFD, Image] 37379 - Helderheid: 2 [EXIF, ExifIFD, Image] 37380 - Belichtingscorrectie: 0 [EXIF, ExifIFD, Camera] 37381 - Grootste diafragma: 3.5 [EXIF, ExifIFD, Camera] 37383 - Belichting meet methode: Multi segment [EXIF, ExifIFD, Camera] 37385 - Flits: Flits afgevuurd [EXIF, ExifIFD, Camera] 37386 - Brandpuntafstand: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Ondersteunde Flashpix versie: 0100 [EXIF, ExifIFD, Image] 40961 - Kleur ruimte: sRGB [EXIF, ExifIFD, Image] 40962 - Afbeelding breedte: 1600 [EXIF, ExifIFD, Image] 40963 - Afbeelding hoogte: 1200 [EXIF, InteropIFD, Image] 1 - Interoperabiliteits Identificatie: R98: DCF Basis formaat (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperabiliteits versie: 0100 [EXIF, ExifIFD, Camera] 41486 - Horizontale sensor resolutie: 3053 [EXIF, ExifIFD, Camera] 41487 - Verticale sensor resolutie: 3053 [EXIF, ExifIFD, Camera] 41488 - Sensor resolutie eenheid: cm [EXIF, ExifIFD, Camera] 41495 - Meet methode: Één chip kleur sensor [EXIF, ExifIFD, Image] 41728 - Bestand bron: Digitale camera [EXIF, ExifIFD, Image] 41729 - Scene type: Direkt opgenomen afbeelding [EXIF, IFD1, Image] 259 - Compressie schema: JPEG (oude versie) [EXIF, IFD1, Image] 274 - Oriëntatie van de afbeelding: 0° (boven/links) [EXIF, IFD1, Image] 282 - Horizontale afbeelding resolutie: 72 [EXIF, IFD1, Image] 283 - Vertikale afbeelding resolutie: 72 [EXIF, IFD1, Image] 296 - Eenheid van de X und Y resolutie: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y en C positie: Naast liggend ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_13.out������������������������������������������������������������������000644 �000765 �000024 �00000005535 11731076275 016564� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Producent: FUJIFILM [EXIF, IFD0, Camera] 272 - Aparat: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientacja obrazu: 0° (góra/lewo) [EXIF, IFD0, Image] 282 - Rozdzielczość obrazu w poziomie: 72 [EXIF, IFD0, Image] 283 - Rozdzielczość obrazu w pionie: 72 [EXIF, IFD0, Image] 296 - Jednostka rozdzielczoÅ›ci X i Y: Cal [EXIF, IFD0, Image] 305 - Oprogramowanie: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - Data i godzina zmiany pliku: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Pozycje Y i C: Obok siebie (?) [EXIF, IFD0, Author] 33432 - Posiadacz praw autorskich: [EXIF, ExifIFD, Image] 33437 - PrzysÅ‚ona: 3.5 [EXIF, ExifIFD, Camera] 34850 - Program ekspozycji: Normalny program [EXIF, ExifIFD, Image] 34855 - CzuÅ‚ość ISO: 100 [EXIF, ExifIFD, Image] 36864 - Wersja Exif: 0210 [EXIF, ExifIFD, Time] 36867 - Pierwotna data i godzina: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Data utworzenia: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Znaczenie każdego komponentu: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Tryb kompresji obrazu: 1.6 [EXIF, ExifIFD, Image] 37377 - PrÄ™dkość migawki: 1/64 [EXIF, ExifIFD, Image] 37378 - PrzysÅ‚ona: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - Różnica ekspozycji: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Tryb pomiaru: Wzór [EXIF, ExifIFD, Camera] 37385 - Lampa: NastÄ…piÅ‚ bÅ‚ysk lampy [EXIF, ExifIFD, Camera] 37386 - Ogniskowa: 6.0 mm [EXIF, ExifIFD, Image] 40960 - ObsÅ‚ugiwana wersja Flashpix: 0100 [EXIF, ExifIFD, Image] 40961 - Informacja o przestrzeni barwowej: sRGB [EXIF, ExifIFD, Image] 40962 - Szerokość obrazu: 1600 [EXIF, ExifIFD, Image] 40963 - Wysokość obrazu: 1200 [EXIF, InteropIFD, Image] 1 - Identyfikacja wzajemnej zgodnoÅ›ci: R98: Plik zasadniczy DCF (sRGB) [EXIF, InteropIFD, Image] 2 - Wersja wzajemnej zgodnoÅ›ci: 0100 [EXIF, ExifIFD, Camera] 41486 - Rozdzielczość w pÅ‚aszczyźnie ogniskowej - oÅ› x: 3053 [EXIF, ExifIFD, Camera] 41487 - Rozdzielczość w pÅ‚aszczyźnie ogniskowej - oÅ› y: 3053 [EXIF, ExifIFD, Camera] 41488 - Jednostka rozdzielczoÅ›ci w pÅ‚aszczyźnie ogniskowej: cm [EXIF, ExifIFD, Camera] 41495 - Metoda pomiaru: Jednoprocesorowy sensor obszaru koloru [EXIF, ExifIFD, Image] 41728 - ŹródÅ‚o pliku: DSC [EXIF, ExifIFD, Image] 41729 - Rodzaj sceny: ZdjÄ™cie uzyskane bezpoÅ›rednio [EXIF, IFD1, Image] 259 - Algorytm kompresji: JPEG (w starym stylu) [EXIF, IFD1, Image] 274 - Orientacja obrazu: 0° (góra/lewo) [EXIF, IFD1, Image] 282 - Rozdzielczość obrazu w poziomie: 72 [EXIF, IFD1, Image] 283 - Rozdzielczość obrazu w pionie: 72 [EXIF, IFD1, Image] 296 - Jednostka rozdzielczoÅ›ci X i Y: Cal [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Pozycje Y i C: Obok siebie (?) �������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_14.out������������������������������������������������������������������000644 �000765 �000024 �00000007060 11727644374 016566� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Изготовитель: FUJIFILM [EXIF, IFD0, Camera] 272 - Камера: FinePix2400Zoom [EXIF, IFD0, Image] 274 - ОриентациÑ: Положительное направление [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Элемент Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ð¾ X и Y: дюймы [EXIF, IFD0, Image] 305 - Ð˜Ð¼Ñ Ð¸ верÑÐ¸Ñ ÐŸÐž: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - "Файл, изменить дату и времÑ": 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð¿Ð¾ Y и C: Ñовпадающий по меÑту [EXIF, IFD0, Author] 33432 - Владелец копирайта: [EXIF, ExifIFD, Image] 33437 - Диафрагма: 3.5 [EXIF, ExifIFD, Camera] 34850 - ЭкÑÐ¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ: ÐÐ¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° [EXIF, ExifIFD, Image] 34855 - Значение ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif верÑиÑ: 0210 [EXIF, ExifIFD, Time] 36867 - ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ð´Ð°Ñ‚Ð° и времÑ: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Дата ÑозданиÑ: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Значение каждого компонента: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Режим ÑÐ¶Ð°Ñ‚Ð¸Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ: 1.6 [EXIF, ExifIFD, Image] 37377 - Выдержка: 1/64 [EXIF, ExifIFD, Image] 37378 - Диафрагма: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - "ЭкÑпозициÑ, калибровка": 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - ЭкÑпозамер: Узор [EXIF, ExifIFD, Camera] 37385 - Ð’Ñпышка: Ð’Ñпышка Ñработала [EXIF, ExifIFD, Camera] 37386 - ФокуÑное раÑÑтоÑние: 6.0 mm [EXIF, ExifIFD, Image] 40960 - ÐŸÐ¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Flashpix: 0100 [EXIF, ExifIFD, Image] 40961 - Данные о цветовой Ñреде: sRGB [EXIF, ExifIFD, Image] 40962 - ДопуÑÑ‚Ð¸Ð¼Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° Ñнимка: 1600 [EXIF, ExifIFD, Image] 40963 - ДопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð²Ñ‹Ñота Ñнимка: 1200 [EXIF, InteropIFD, Image] 1 - Ð˜Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð²Ð·Ð°Ð¸Ð¼Ð½Ð¾Ð¹ ÑовмеÑтимоÑти: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - ВерÑÐ¸Ñ Ð²Ð·Ð°Ð¸Ð¼Ð½Ð¾Ð¹ ÑовмеÑтимоÑти: 0100 [EXIF, ExifIFD, Camera] 41486 - Разрешение в фокальной плоÑкоÑти по X: 3053 [EXIF, ExifIFD, Camera] 41487 - Разрешение в фокальной плоÑкоÑти по Y: 3053 [EXIF, ExifIFD, Camera] 41488 - Элемент Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð² фокальной плоÑкоÑти: cm [EXIF, ExifIFD, Camera] 41495 - Метод региÑтрации: ОднопроцеÑÑорный ÑенÑор цветовой облаÑти [EXIF, ExifIFD, Image] 41728 - ИÑточник файла: DSC [EXIF, ExifIFD, Image] 41729 - Тип Ñюжета: ÐепоÑредÑтвенно полученный Ñнимок [EXIF, IFD1, Image] 259 - Схема ÑжатиÑ: JPEG (old-style) [EXIF, IFD1, Image] 274 - ОриентациÑ: Положительное направление [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Элемент Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ð¾ X и Y: дюймы [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð¿Ð¾ Y и C: Ñовпадающий по меÑту ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_15.out������������������������������������������������������������������000644 �000765 �000024 �00000005144 12106175604 016553� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Tillverkare: FUJIFILM [EXIF, IFD0, Camera] 272 - Kamera: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientering: Positiv riktning [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Enhet för X- och Y-upplösning: tum [EXIF, IFD0, Image] 305 - Programvara: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - Filändringsdatum och -tid: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Y- och C-placering: Co-sited [EXIF, IFD0, Author] 33432 - Copyright-innehavare: [EXIF, ExifIFD, Image] 33437 - Bländare: 3.5 [EXIF, ExifIFD, Camera] 34850 - Exponeringsprogram: Normalt program [EXIF, ExifIFD, Image] 34855 - ISO värde: 100 [EXIF, ExifIFD, Image] 36864 - Exif-version: 0210 [EXIF, ExifIFD, Time] 36867 - Ursprungligt datum & tid: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Skapat datum: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Enskilda komponenters betydelse: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Bildkomprimeringsläge: 1.6 [EXIF, ExifIFD, Image] 37377 - Slutartid: 1/64 [EXIF, ExifIFD, Image] 37378 - Bländare: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - Exponeringsförskjutning: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Mätningstyp: Mönster [EXIF, ExifIFD, Camera] 37385 - Blixt: Blixten utlöstes [EXIF, ExifIFD, Camera] 37386 - Brännvidd: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix-version som stöds: 0100 [EXIF, ExifIFD, Image] 40961 - FärgomrÃ¥desinformation: sRGB [EXIF, ExifIFD, Image] 40962 - Giltig bildbredd: 1600 [EXIF, ExifIFD, Image] 40963 - Giltig bildhöjd: 1200 [EXIF, InteropIFD, Image] 1 - Interoperability Identification: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3053 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3053 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Avkänningsmetod: One-chip color area sensor [EXIF, ExifIFD, Image] 41728 - Filkälla: DSC [EXIF, ExifIFD, Image] 41729 - Motivtyp: En direktfotograferad bild [EXIF, IFD1, Image] 259 - Komprimeringsschema: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientering: Positiv riktning [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Enhet för X- och Y-upplösning: tum [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y- och C-placering: Co-sited ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_16.out������������������������������������������������������������������000644 �000765 �000024 �00000005251 12106175604 016553� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Üretici: FUJIFILM [EXIF, IFD0, Camera] 272 - Kamera: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Yönelim: Pozitif yön [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - X ve Y birim çözünürlüğü: inç [EXIF, IFD0, Image] 305 - Kullanılan yazılım: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - Dosya deÄŸiÅŸim tarih ve zamanı: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Y ve C konumlama: Birlikte-konumlanmış [EXIF, IFD0, Author] 33432 - Telif hakkı sahibi: [EXIF, ExifIFD, Image] 33437 - Açıklık: 3.5 [EXIF, ExifIFD, Camera] 34850 - Pozlama program: Normal program [EXIF, ExifIFD, Image] 34855 - ISO deÄŸeri: 100 [EXIF, ExifIFD, Image] 36864 - Exif sürüm: 0210 [EXIF, ExifIFD, Time] 36867 - Orjinal Tarih & Zaman: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - OluÅŸturma Tarihi: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Her komponentin anlamı: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - İmaj sıkıştıma modu: 1.6 [EXIF, ExifIFD, Image] 37377 - Deklanşör hızı: 1/64 [EXIF, ExifIFD, Image] 37378 - Açıklık: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - Pozlama Sapması: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Ölçü modu: Desen [EXIF, ExifIFD, Camera] 37385 - FlaÅŸ: FlaÅŸ patladı [EXIF, ExifIFD, Camera] 37386 - Odak uzunluÄŸu: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Desteklenen Flashpix sürümü: 0100 [EXIF, ExifIFD, Image] 40961 - Renk alanı bilgisi: sRGB [EXIF, ExifIFD, Image] 40962 - Geçerli imaj eni: 1600 [EXIF, ExifIFD, Image] 40963 - Geçerli imaj yüksekliÄŸi: 1200 [EXIF, InteropIFD, Image] 1 - Interoperabilite Tanımı: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperabilite Sürümü: 0100 [EXIF, ExifIFD, Camera] 41486 - Odak düzlemi X çözünürlüğü: 3053 [EXIF, ExifIFD, Camera] 41487 - Odak düzlemi Y çözünürlüğü: 3053 [EXIF, ExifIFD, Camera] 41488 - Odak düzlemi çözünürlük birimi: cm [EXIF, ExifIFD, Camera] 41495 - Alıcı metodu: Tek-çip renk alanı alıcı [EXIF, ExifIFD, Image] 41728 - Dosya kaynağı: DSC [EXIF, ExifIFD, Image] 41729 - Senaryo tipi: DoÄŸrudan fotograflanmış imaj [EXIF, IFD1, Image] 259 - Sıkıştırma planı: JPEG (old-style) [EXIF, IFD1, Image] 274 - Yönelim: Pozitif yön [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - X ve Y birim çözünürlüğü: inç [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y ve C konumlama: Birlikte-konumlanmış �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_17.out������������������������������������������������������������������000644 �000765 �000024 �00000005031 11727644374 016565� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - 厂商: FUJIFILM [EXIF, IFD0, Camera] 272 - åž‹å·: FinePix2400Zoom [EXIF, IFD0, Image] 274 - 图åƒå–å‘: 0° (上/å·¦) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - 图åƒé«˜å®½åˆ†è¾¨çއå•ä½: 英寸 [EXIF, IFD0, Image] 305 - 使用软件: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - 文件改å˜çš„æ—¥æœŸå’Œæ—¶é—´: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - YCC åƒç´ ç»“æž„(Y å’Œ C çš„ä½ç½®): 一致 [EXIF, IFD0, Author] 33432 - 专利拥有者: [EXIF, ExifIFD, Image] 33437 - 光圈数: 3.5 [EXIF, ExifIFD, Camera] 34850 - æ›å…‰ç¨‹åº: ä¸€èˆ¬ç¨‹åº [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif 版本: 0210 [EXIF, ExifIFD, Time] 36867 - 原始数æ®äº§ç”Ÿçš„æ—¥æœŸå’Œæ—¶é—´: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - æ•°å­—æ•°æ®äº§ç”Ÿçš„æ—¥æœŸå’Œæ—¶é—´: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - å„分组的å«ä¹‰: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - 图åƒåŽ‹ç¼©æ¨¡å¼: 1.6 [EXIF, ExifIFD, Image] 37377 - 快门速度: 1/64 [EXIF, ExifIFD, Image] 37378 - 光圈: 3.5 [EXIF, ExifIFD, Image] 37379 - 亮度: 2 [EXIF, ExifIFD, Image] 37380 - æ›å…‰åå·®: 0 [EXIF, ExifIFD, Camera] 37381 - 最大镜头光圈: 3.5 [EXIF, ExifIFD, Camera] 37383 - æµ‹é‡æ–¹å¼: 分割测光 [EXIF, ExifIFD, Camera] 37385 - 闪光: 闪光ç¯äº® [EXIF, ExifIFD, Camera] 37386 - 焦è·: 6.0 mm [EXIF, ExifIFD, Image] 40960 - 支æŒçš„ Flashpix 版本: 0100 [EXIF, ExifIFD, Image] 40961 - 色彩空间信æ¯: sRGB [EXIF, ExifIFD, Image] 40962 - åƒå®½: 1600 [EXIF, ExifIFD, Image] 40963 - åƒé«˜: 1200 [EXIF, InteropIFD, Image] 1 - 互用标识: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - 互用版本: 0100 [EXIF, ExifIFD, Camera] 41486 - ç„¦å¹³é¢ X 分辨率: 3053 [EXIF, ExifIFD, Camera] 41487 - ç„¦å¹³é¢ Y 分辨率: 3053 [EXIF, ExifIFD, Camera] 41488 - 焦平é¢åˆ†è¾¨çއå•ä½: cm [EXIF, ExifIFD, Camera] 41495 - 感应方法: å•片色彩区感应器 [EXIF, ExifIFD, Image] 41728 - æ–‡ä»¶æ¥æº: æ•°ç ç›¸æœº [EXIF, ExifIFD, Image] 41729 - 场景类型: ç›´æŽ¥æ‹æ‘„çš„å›¾åƒ [EXIF, IFD1, Image] 259 - 压缩方案: JPEG (æ—§æ ·å¼) [EXIF, IFD1, Image] 274 - 图åƒå–å‘: 0° (上/å·¦) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - 图åƒé«˜å®½åˆ†è¾¨çއå•ä½: 英寸 [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - YCC åƒç´ ç»“æž„(Y å’Œ C çš„ä½ç½®): 一致 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_18.out������������������������������������������������������������������000644 �000765 �000024 �00000004764 11727742350 016573� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - 製造商: FUJIFILM [EXIF, IFD0, Camera] 272 - 相機型號: FinePix2400Zoom [EXIF, IFD0, Image] 274 - å½±åƒçš„æ–¹å‘: 0° (頂端/左邊) [EXIF, IFD0, Image] 282 - 水平解æžåº¦: 72 [EXIF, IFD0, Image] 283 - 垂直解æžåº¦: 72 [EXIF, IFD0, Image] 296 - 寬與高的單ä½: è‹±å‹ [EXIF, IFD0, Image] 305 - 軟體: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - æª”æ¡ˆå»ºç«‹æ—¥æœŸåŠæ™‚é–“: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Y åŠ C 的設定: 一致 [EXIF, IFD0, Author] 33432 - ç‰ˆæ¬Šæ“æœ‰äºº: [EXIF, ExifIFD, Image] 33437 - 光圈: 3.5 [EXIF, ExifIFD, Camera] 34850 - æ‹æ”模å¼: 正常 [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif 版本: 0210 [EXIF, ExifIFD, Time] 36867 - åŽŸå§‹å½±åƒæ—¥æœŸæ™‚é–“: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - 數ä½åŒ–的日期時間: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - æ¯å€‹çµ„æˆéƒ¨åˆ†çš„æ„ç¾©: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - å½±åƒå£“縮模å¼: 1.6 [EXIF, ExifIFD, Image] 37377 - å¿«é–€: 1/64 [EXIF, ExifIFD, Image] 37378 - 光圈: 3.5 [EXIF, ExifIFD, Image] 37379 - 亮度: 2 [EXIF, ExifIFD, Image] 37380 - æ›å…‰è£œå„Ÿ: 0 [EXIF, ExifIFD, Camera] 37381 - é¡é ­æœ€å¤§å…‰åœˆ: 3.5 [EXIF, ExifIFD, Camera] 37383 - 測光模å¼: 評價測光 [EXIF, ExifIFD, Camera] 37385 - 閃光燈: 閃光燈擊發 [EXIF, ExifIFD, Camera] 37386 - 焦è·: 6.0 mm [EXIF, ExifIFD, Image] 40960 - æ”¯æ´ Flashpix 版本: 0100 [EXIF, ExifIFD, Image] 40961 - 色彩空間: sRGB [EXIF, ExifIFD, Image] 40962 - å½±åƒå¯¬åº¦: 1600 [EXIF, ExifIFD, Image] 40963 - å½±åƒé«˜åº¦: 1200 [EXIF, InteropIFD, Image] 1 - 互通性鑑定: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - 互通性版本: 0100 [EXIF, ExifIFD, Camera] 41486 - X軸焦平é¢åˆ†è¾¨çއ: 3053 [EXIF, ExifIFD, Camera] 41487 - Y軸焦平é¢åˆ†è¾¨çއ: 3053 [EXIF, ExifIFD, Camera] 41488 - 焦平é¢åˆ†è¾¨çއ單ä½: cm [EXIF, ExifIFD, Camera] 41495 - 感測器類型: 單晶片彩色感測器 [EXIF, ExifIFD, Image] 41728 - 檔案來æº: 數ä½ç›¸æ©Ÿ [EXIF, ExifIFD, Image] 41729 - 場景類型: ç›´æŽ¥æ‹æ”çš„å½±åƒ [EXIF, IFD1, Image] 259 - 壓縮方å¼: JPEG (舊å¼) [EXIF, IFD1, Image] 274 - å½±åƒçš„æ–¹å‘: 0° (頂端/左邊) [EXIF, IFD1, Image] 282 - 水平解æžåº¦: 72 [EXIF, IFD1, Image] 283 - 垂直解æžåº¦: 72 [EXIF, IFD1, Image] 296 - 寬與高的單ä½: è‹±å‹ [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y åŠ C 的設定: 一致 ������������Image-ExifTool-10.10/t/Lang_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000005315 11457356040 016472� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Výrobce: FUJIFILM [EXIF, IFD0, Camera] 272 - Typ fotoaparátu: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientace: 0° (nahoru/vlevo) [EXIF, IFD0, Image] 282 - RozliÅ¡ení obrázku na šířku: 72 [EXIF, IFD0, Image] 283 - RozliÅ¡ení obrázku na výšku: 72 [EXIF, IFD0, Image] 296 - Jednotka X a Y rozliÅ¡ení: Palce [EXIF, IFD0, Image] 305 - Použitý software: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - Datum a Äas zmÄ›ny souboru: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Y a C pozice: Po stranách [EXIF, IFD0, Author] 33432 - Držitel práv: [EXIF, ExifIFD, Image] 33437 - F hodnota: 3.5 [EXIF, ExifIFD, Camera] 34850 - ExpoziÄní mod: Normální program [EXIF, ExifIFD, Image] 34855 - Citlivost ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif verze: 0210 [EXIF, ExifIFD, Time] 36867 - Datum a Äas vzniku originálních dat: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Datum a Äas generování digitálních dat: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - UrÄení složek: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - KomprimaÄní mod: 1.6 [EXIF, ExifIFD, Image] 37377 - ÄŒas závÄ›rky: 1/64 [EXIF, ExifIFD, Image] 37378 - Clona: 3.5 [EXIF, ExifIFD, Image] 37379 - Jas: 2 [EXIF, ExifIFD, Image] 37380 - Korekce expozice: 0 [EXIF, ExifIFD, Camera] 37381 - Max clona objektivu: 3.5 [EXIF, ExifIFD, Camera] 37383 - Režim měření expozice: Multi segment [EXIF, ExifIFD, Camera] 37385 - Blesk: Blesk ano [EXIF, ExifIFD, Camera] 37386 - Ohnisková vzdálenost: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Podporovaná verze Flashpix: 0100 [EXIF, ExifIFD, Image] 40961 - Barevný prostor: sRGB [EXIF, ExifIFD, Image] 40962 - Šířka: 1600 [EXIF, ExifIFD, Image] 40963 - Výška: 1200 [EXIF, InteropIFD, Image] 1 - Identifikace: R98: DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Verze kompatibility: 0100 [EXIF, ExifIFD, Camera] 41486 - Horizontální rozliÅ¡ení senzoru: 3053 [EXIF, ExifIFD, Camera] 41487 - Vertikální rozliÅ¡ení senzoru: 3053 [EXIF, ExifIFD, Camera] 41488 - Jednotka rozliÅ¡ení senzoru: cm [EXIF, ExifIFD, Camera] 41495 - Metoda měření: JednoÄipový barevný senzor [EXIF, ExifIFD, Image] 41728 - Zdroj dat: Digitální fotoaparát [EXIF, ExifIFD, Image] 41729 - Typ scény: Přímo pořízený snímek [EXIF, IFD1, Image] 259 - Kompresní algoritmus: JPEG (pův. verze) [EXIF, IFD1, Image] 274 - Orientace: 0° (nahoru/vlevo) [EXIF, IFD1, Image] 282 - RozliÅ¡ení obrázku na šířku: 72 [EXIF, IFD1, Image] 283 - RozliÅ¡ení obrázku na výšku: 72 [EXIF, IFD1, Image] 296 - Jednotka X a Y rozliÅ¡ení: Palce [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y a C pozice: Po stranách �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_3.out�������������������������������������������������������������������000644 �000765 �000024 �00000005337 12236225521 016472� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Gerätehersteller: FUJIFILM [EXIF, IFD0, Camera] 272 - Kameramodell: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Ausrichtung: Horizontal (normal) [EXIF, IFD0, Image] 282 - Horizontale Bildauflösung: 72 [EXIF, IFD0, Image] 283 - Vertikale Bildauflösung: 72 [EXIF, IFD0, Image] 296 - Einheit der X- und Y-Auflösung: Inch [EXIF, IFD0, Image] 305 - Software: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - Änderungsdatum: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Y und C Ausrichtung: Benachbart [EXIF, IFD0, Author] 33432 - Urheberrechtsvermerk: [EXIF, ExifIFD, Image] 33437 - F-Wert: 3.5 [EXIF, ExifIFD, Camera] 34850 - Belichtungsprogramm: Normal-Programm [EXIF, ExifIFD, Image] 34855 - ISO-Empfindlichkeit: 100 [EXIF, ExifIFD, Image] 36864 - Exif-Version: 0210 [EXIF, ExifIFD, Time] 36867 - Erstellungsdatum/-uhrzeit: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Digitalisierungsdatum/-uhrzeit: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Bedeutung jeder Komponente: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Bildkomprimierungsmodus: 1.6 [EXIF, ExifIFD, Image] 37377 - Belichtungszeit: 1/64 [EXIF, ExifIFD, Image] 37378 - Blende: 3.5 [EXIF, ExifIFD, Image] 37379 - Helligkeit: 2 [EXIF, ExifIFD, Image] 37380 - Belichtungskorrektur: 0 [EXIF, ExifIFD, Camera] 37381 - Größtmögliche Blende: 3.5 [EXIF, ExifIFD, Camera] 37383 - Belichtungsmessmethode: Multi-Segment [EXIF, ExifIFD, Camera] 37385 - Blitz: Blitz wurde ausgelöst [EXIF, ExifIFD, Camera] 37386 - Brennweite: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Unterstützte Flashpix-Version: 0100 [EXIF, ExifIFD, Image] 40961 - Farbraum: sRGB [EXIF, ExifIFD, Image] 40962 - Exif-Bildbreite: 1600 [EXIF, ExifIFD, Image] 40963 - Exif-Bildhöhe: 1200 [EXIF, InteropIFD, Image] 1 - Interoperabilitäts-Identifikation: R98: DCF Basic-Format (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperabilitäts-Version: 0100 [EXIF, ExifIFD, Camera] 41486 - Sensorauflösung horizontal: 3053 [EXIF, ExifIFD, Camera] 41487 - Sensorauflösung vertikal: 3053 [EXIF, ExifIFD, Camera] 41488 - Einheit der Sensorauflösung: cm [EXIF, ExifIFD, Camera] 41495 - Messmethode: Ein-Chip-Farbsensor [EXIF, ExifIFD, Image] 41728 - Dateiquelle: Digital-Kamera [EXIF, ExifIFD, Image] 41729 - Szenentyp: Direkt aufgenommenes Bild [EXIF, IFD1, Image] 259 - Komprimierungsschema: JPEG (alte Version) [EXIF, IFD1, Image] 274 - Ausrichtung: Horizontal (normal) [EXIF, IFD1, Image] 282 - Horizontale Bildauflösung: 72 [EXIF, IFD1, Image] 283 - Vertikale Bildauflösung: 72 [EXIF, IFD1, Image] 296 - Einheit der X- und Y-Auflösung: Inch [EXIF, IFD1, Image] 513 - Miniaturbild-Datenposition: 1096 [EXIF, IFD1, Image] 514 - Miniaturbild-Datenlänge: 28 [EXIF, IFD1, Image] 531 - Y und C Ausrichtung: Benachbart �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_4.out�������������������������������������������������������������������000644 �000765 �000024 �00000005002 11166676722 016476� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - Modify Date: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: [EXIF, ExifIFD, Image] 33437 - F Number: 3.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 1.6 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/64 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Colour Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 1600 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1200 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3053 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3053 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip colour area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y Cb Cr Positioning: Co-sited ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_5.out�������������������������������������������������������������������000644 �000765 �000024 �00000005002 11166676722 016477� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - Modify Date: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: [EXIF, ExifIFD, Image] 33437 - F Number: 3.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 1.6 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/64 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Colour Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 1600 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1200 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3053 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3053 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip colour area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y Cb Cr Positioning: Co-sited ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_6.out�������������������������������������������������������������������000644 �000765 �000024 �00000005431 12106175604 016472� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Marca: FUJIFILM [EXIF, IFD0, Camera] 272 - Modelo: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientación de Imagen: 0° (arriba/izquierda) [EXIF, IFD0, Image] 282 - Resolución Imagen Horizontal: 72 [EXIF, IFD0, Image] 283 - Resolución Imagen Vertical: 72 [EXIF, IFD0, Image] 296 - Unidad de Resolución de X e Y: Pulgada [EXIF, IFD0, Image] 305 - Programa Utilizado: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - Fecha y Hora de Cambio del Archivo: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Posicionamiento Y y C: Vecino [EXIF, IFD0, Author] 33432 - Copyright: [EXIF, ExifIFD, Image] 33437 - Número F: 3.5 [EXIF, ExifIFD, Camera] 34850 - Programa Exposición: Programa normal [EXIF, ExifIFD, Image] 34855 - Ratio Velocidad ISO: 100 [EXIF, ExifIFD, Image] 36864 - Versión Exif: 0210 [EXIF, ExifIFD, Time] 36867 - Fecha y Hora de Datos Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Fecha y Hora de Datos Digital: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Configuración de Componentes: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Modo Compresión Imagen: 1.6 [EXIF, ExifIFD, Image] 37377 - Velocidad Obturación: 1/64 [EXIF, ExifIFD, Image] 37378 - Apertura: 3.5 [EXIF, ExifIFD, Image] 37379 - Luminosidad: 2 [EXIF, ExifIFD, Image] 37380 - Compensación Exposición: 0 [EXIF, ExifIFD, Camera] 37381 - Apertura Lente Máxima: 3.5 [EXIF, ExifIFD, Camera] 37383 - Modo Medición: Multi-segmento [EXIF, ExifIFD, Camera] 37385 - Flash: Flash disparado [EXIF, ExifIFD, Camera] 37386 - Distancia Focal Objetivo: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Versión Flashpix Soportado: 0100 [EXIF, ExifIFD, Image] 40961 - Espacio Color: sRGB [EXIF, ExifIFD, Image] 40962 - Ancho Imagen: 1600 [EXIF, ExifIFD, Image] 40963 - Alto Imagen: 1200 [EXIF, InteropIFD, Image] 1 - Identificación Interoperabilidad: R98: Archivo básico DCF (sRGB) [EXIF, InteropIFD, Image] 2 - Versión Interoperabilidad: 0100 [EXIF, ExifIFD, Camera] 41486 - Resolución X Plano Focal: 3053 [EXIF, ExifIFD, Camera] 41487 - Resolución Y Plano Focal: 3053 [EXIF, ExifIFD, Camera] 41488 - Unidad Resolución Plano Focal: cm [EXIF, ExifIFD, Camera] 41495 - Método Sensor: Sensor monochip de color [EXIF, ExifIFD, Image] 41728 - Fuente Archivo: Cámara Digital [EXIF, ExifIFD, Image] 41729 - Tipo Escena: Imagen fotografiada directamente [EXIF, IFD1, Image] 259 - Compresión: JPEG (estilo antiguo) [EXIF, IFD1, Image] 274 - Orientación de Imagen: 0° (arriba/izquierda) [EXIF, IFD1, Image] 282 - Resolución Imagen Horizontal: 72 [EXIF, IFD1, Image] 283 - Resolución Imagen Vertical: 72 [EXIF, IFD1, Image] 296 - Unidad de Resolución de X e Y: Pulgada [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Posicionamiento Y y C: Vecino ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_7.out�������������������������������������������������������������������000644 �000765 �000024 �00000005355 11727644374 016515� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Valmistaja: FUJIFILM [EXIF, IFD0, Camera] 272 - Malli: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Kuvan suunta: 0° (ylä/vasen) [EXIF, IFD0, Image] 282 - Kuvan vaakaresoluutio: 72 [EXIF, IFD0, Image] 283 - Kuvan pystyresoluutio: 72 [EXIF, IFD0, Image] 296 - X- ja Y-resoluution yksikkö: inches [EXIF, IFD0, Image] 305 - Ohjelmisto: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - Tiedostomuutoksen päiväys ja aika: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Y:n ja C:n sijoitus: Co-sited [EXIF, IFD0, Author] 33432 - Profiilin copyright: [EXIF, ExifIFD, Image] 33437 - Aukkoarvo: 3.5 [EXIF, ExifIFD, Camera] 34850 - Valotusohjelma: Normaali ohjelma [EXIF, ExifIFD, Image] 34855 - ISO-herkkyys: 100 [EXIF, ExifIFD, Image] 36864 - Exif-versio: 0210 [EXIF, ExifIFD, Time] 36867 - Alkuperäisen datan luonnin päiväys ja aika: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Digitaalisen datan luonnin päiväys ja aika: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Kunkin komponentin tarkoitus: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Kuvan pakkausmuoto: 1.6 [EXIF, ExifIFD, Image] 37377 - Suljinnopeuden arvo: 1/64 [EXIF, ExifIFD, Image] 37378 - Aukkoarvo: 3.5 [EXIF, ExifIFD, Image] 37379 - Kirkkausarvo: 2 [EXIF, ExifIFD, Image] 37380 - Valotuksen korjaus: 0 [EXIF, ExifIFD, Camera] 37381 - Objektiivin maksimiaukko: 3.5 [EXIF, ExifIFD, Camera] 37383 - Valonmittaustapa: Monisegmenttimittaus [EXIF, ExifIFD, Camera] 37385 - Salama: Salama lauennut [EXIF, ExifIFD, Camera] 37386 - Polttoväli: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Tuettu Flashpix-versio: 0100 [EXIF, ExifIFD, Image] 40961 - Väriavaruus: sRGB [EXIF, ExifIFD, Image] 40962 - Kuvan leveys: 1600 [EXIF, ExifIFD, Image] 40963 - Kuvan korkeus: 1200 [EXIF, InteropIFD, Image] 1 - Interoperabiliteetin identifiointi: R98: DCF-perustiedosto (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperabiliteetin versio: 0100 [EXIF, ExifIFD, Camera] 41486 - Polttopistetason vaakaresoluutio: 3053 [EXIF, ExifIFD, Camera] 41487 - Polttopistetason pystyresoluutio: 3053 [EXIF, ExifIFD, Camera] 41488 - Polttopistetason resoluutioyksikkö: cm [EXIF, ExifIFD, Camera] 41495 - Mittausmetodi: Yhden chipin värialueen anturi [EXIF, ExifIFD, Image] 41728 - Tiedoston lähde: Digitaalikamera [EXIF, ExifIFD, Image] 41729 - Näkymätyyppi: Suoraan otettu valokuva [EXIF, IFD1, Image] 259 - Pakkausskeema: JPEG (old-style) [EXIF, IFD1, Image] 274 - Kuvan suunta: 0° (ylä/vasen) [EXIF, IFD1, Image] 282 - Kuvan vaakaresoluutio: 72 [EXIF, IFD1, Image] 283 - Kuvan pystyresoluutio: 72 [EXIF, IFD1, Image] 296 - X- ja Y-resoluution yksikkö: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y:n ja C:n sijoitus: Co-sited �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_8.out�������������������������������������������������������������������000644 �000765 �000024 �00000005657 12316257262 016512� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Fabricant: FUJIFILM [EXIF, IFD0, Camera] 272 - Modèle d'appareil photo: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientation de l'image: 0° (haut/gauche) [EXIF, IFD0, Image] 282 - Résolution d'image horizontale: 72 [EXIF, IFD0, Image] 283 - Résolution d'image verticale: 72 [EXIF, IFD0, Image] 296 - Unité de résolution en X et Y: Pouce [EXIF, IFD0, Image] 305 - Logiciel: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - Date de modification de fichier: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Positionnement Y et C: Côte à côte [EXIF, IFD0, Author] 33432 - Propriétaire du copyright: [EXIF, ExifIFD, Image] 33437 - Nombre F: 3.5 [EXIF, ExifIFD, Camera] 34850 - Programme d'exposition: Programme normal [EXIF, ExifIFD, Image] 34855 - Sensibilité ISO: 100 [EXIF, ExifIFD, Image] 36864 - Version Exif: 0210 [EXIF, ExifIFD, Time] 36867 - Date de la création des données originales: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Date de la création des données numériques: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Signification de chaque composante: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Mode de compression d'image: 1.6 [EXIF, ExifIFD, Image] 37377 - Vitesse d'obturation: 1/64 [EXIF, ExifIFD, Image] 37378 - Ouverture: 3.5 [EXIF, ExifIFD, Image] 37379 - Luminosité: 2 [EXIF, ExifIFD, Image] 37380 - Décalage d'exposition: 0 [EXIF, ExifIFD, Camera] 37381 - Ouverture maximale de l'objectif: 3.5 [EXIF, ExifIFD, Camera] 37383 - Mode de mesure: Multizone [EXIF, ExifIFD, Camera] 37385 - Flash : Flash déclenché [EXIF, ExifIFD, Camera] 37386 - Focale de l'objectif: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Version Flashpix supportée: 0100 [EXIF, ExifIFD, Image] 40961 - Espace colorimétrique: sRVB [EXIF, ExifIFD, Image] 40962 - Largeur d'image: 1600 [EXIF, ExifIFD, Image] 40963 - Hauteur d'image: 1200 [EXIF, InteropIFD, Image] 1 - Identification d'interopérabilité: R98: fichier de base DCF (sRGB) [EXIF, InteropIFD, Image] 2 - Version d'interopérabilité: 0100 [EXIF, ExifIFD, Camera] 41486 - Résolution X du plan focal: 3053 [EXIF, ExifIFD, Camera] 41487 - Résolution Y du plan focal: 3053 [EXIF, ExifIFD, Camera] 41488 - Unité de résolution de plan focal: cm [EXIF, ExifIFD, Camera] 41495 - Méthode de capture: Capteur monochip couleur [EXIF, ExifIFD, Image] 41728 - Source du fichier: Appareil photo numérique [EXIF, ExifIFD, Image] 41729 - Type de scène: Image photographiée directement [EXIF, IFD1, Image] 259 - Schéma de compression: JPEG (ancien style) [EXIF, IFD1, Image] 274 - Orientation de l'image: 0° (haut/gauche) [EXIF, IFD1, Image] 282 - Résolution d'image horizontale: 72 [EXIF, IFD1, Image] 283 - Résolution d'image verticale: 72 [EXIF, IFD1, Image] 296 - Unité de résolution en X et Y: Pouce [EXIF, IFD1, Image] 513 - Décalage de la vignette: 1096 [EXIF, IFD1, Image] 514 - Longueur de la vignette: 28 [EXIF, IFD1, Image] 531 - Positionnement Y et C: Côte à côte ���������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lang_9.out�������������������������������������������������������������������000644 �000765 �000024 �00000005462 12006277010 016472� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Costruttore: FUJIFILM [EXIF, IFD0, Camera] 272 - Nome modello fotocamera: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientamento: Orizzontale (normale) [EXIF, IFD0, Image] 282 - Risoluzione orizzontale immagine: 72 [EXIF, IFD0, Image] 283 - Risoluzione verticale immagine: 72 [EXIF, IFD0, Image] 296 - Unità risoluzione: Pollici [EXIF, IFD0, Image] 305 - Software utilizzato: Digital Camera FinePix2400Zoom Ver1.70 [EXIF, IFD0, Time] 306 - Data modifica: 2001:05:19 18:36:41 [EXIF, IFD0, Image] 531 - Posizionamento Y e C: Affiancato [EXIF, IFD0, Author] 33432 - Titolare del copyright: [EXIF, ExifIFD, Image] 33437 - Numero F: 3.5 [EXIF, ExifIFD, Camera] 34850 - Programma esposizione: Programma AE [EXIF, ExifIFD, Image] 34855 - Sensibilità ISO: 100 [EXIF, ExifIFD, Image] 36864 - Versione Exif: 0210 [EXIF, ExifIFD, Time] 36867 - Data/ora originale di creazione: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Data di creazione: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Configurazione componenti: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Bit per pixel compressi: 1.6 [EXIF, ExifIFD, Image] 37377 - Velocità otturatore: 1/64 [EXIF, ExifIFD, Image] 37378 - Apertura diaframma: 3.5 [EXIF, ExifIFD, Image] 37379 - Valore di luminosità: 2 [EXIF, ExifIFD, Image] 37380 - Compensazione esposizione: 0 [EXIF, ExifIFD, Camera] 37381 - Diaframma massimo obiettivo: 3.5 [EXIF, ExifIFD, Camera] 37383 - Modalità misurazione: Multi-zona [EXIF, ExifIFD, Camera] 37385 - Flash: Emesso [EXIF, ExifIFD, Camera] 37386 - Lunghezza focale: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Versione Flashpix: 0100 [EXIF, ExifIFD, Image] 40961 - Spazio colore: sRGB [EXIF, ExifIFD, Image] 40962 - Larghezza immagine Exif: 1600 [EXIF, ExifIFD, Image] 40963 - Altezza immagine Exif: 1200 [EXIF, InteropIFD, Image] 1 - Identificazione interoperatività: R98 - file base DCF (sRGB) [EXIF, InteropIFD, Image] 2 - Versione interoperatività: 0100 [EXIF, ExifIFD, Camera] 41486 - Risoluzione X del piano focale: 3053 [EXIF, ExifIFD, Camera] 41487 - Risoluzione Y del piano focale: 3053 [EXIF, ExifIFD, Camera] 41488 - Unità risoluzione piano focale: cm [EXIF, ExifIFD, Camera] 41495 - Metodo misurazione esposimetrica: Sensore area a colori a un chip [EXIF, ExifIFD, Image] 41728 - Origine file: Fotocamera digitale [EXIF, ExifIFD, Image] 41729 - Tipo scena: Immagine fotografata direttamente [EXIF, IFD1, Image] 259 - Compressione: JPEG (vecchio stile) [EXIF, IFD1, Image] 274 - Orientamento: Orizzontale (normale) [EXIF, IFD1, Image] 282 - Risoluzione orizzontale immagine: 72 [EXIF, IFD1, Image] 283 - Risoluzione verticale immagine: 72 [EXIF, IFD1, Image] 296 - Unità risoluzione: Pollici [EXIF, IFD1, Image] 513 - Offset miniatura: 1096 [EXIF, IFD1, Image] 514 - Dimensioni miniatura: 28 [EXIF, IFD1, Image] 531 - Posizionamento Y e C: Affiancato ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/LNK.t������������������������������������������������������������������������000644 �000765 �000024 �00000001251 11327642463 015446� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/LNK.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::LNK; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'LNK'; my $testnum = 1; # test 2: Extract information from LNK file { my $exifTool = new Image::ExifTool; ++$testnum; my $info = $exifTool->ImageInfo('t/images/LNK.lnk'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/LNK_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000005163 12546457275 016252� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: LNK.lnk [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 876 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2009:09:19 23:38:35-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:22-05:00 [File, System, Image] FilePermissions - File Permissions: rwxr-xr-x [File, File, Image] FileType - File Type: LNK [File, File, Image] FileTypeExtension - File Type Extension: lnk [File, File, Image] MIMEType - MIME Type: application/octet-stream [LNK, LNK, Other] 20 - Flags: IDList, LinkInfo, Description, RelativePath, WorkingDir, CommandArgs, Unicode [LNK, LNK, Other] 24 - File Attributes: Normal [LNK, LNK, Time] 28 - Create Date: 2009:09:05 06:18:49-04:00 [LNK, LNK, Time] 36 - Access Date: 2009:09:19 22:42:55-04:00 [LNK, LNK, Time] 44 - Modify Date: 2009:09:11 06:38:00-04:00 [LNK, LNK, Other] 52 - Target File Size: 3988946 [LNK, LNK, Other] 56 - Icon Index: (none) [LNK, LNK, Other] 60 - Run Window: Normal [LNK, LNK, Other] 64 - Hot Key: (none) [LNK, LNK, Other] 14 - Target File DOS Name: EXIFTO~2.EXE [LNK, LNK, Other] DriveType - Drive Type: Fixed Disk [LNK, LNK, Other] VolumeLabel - Volume Label: [LNK, LNK, Other] LocalBasePath - Local Base Path: C:\Documents and Settings\Phil\Desktop\exiftool(-k).exe [LNK, LNK, Other] 196612 - Description: Rename file name with image date and time [LNK, LNK, Other] 196616 - Relative Path: .\exiftool(-k).exe [LNK, LNK, Other] 196624 - Working Directory: C:\Documents and Settings\Phil\Desktop [LNK, LNK, Other] 196640 - Command Line Arguments: -d %Y%m%d-%H%M%S.%%e "-filename<datetimeoriginal" -v [LNK, LNK, Other] 16 - Machine ID: yukkypc [LNK, LNK, Other] 8 - Fill Attributes: 0x07 [LNK, LNK, Other] 10 - Popup Fill Attributes: 0xf5 [LNK, LNK, Other] 12 - Screen Buffer Size: 80 x 500 [LNK, LNK, Other] 16 - Window Size: 80 x 25 [LNK, LNK, Other] 20 - Window Origin: 135 x 80 [LNK, LNK, Other] 32 - Font Size: 10 x 20 [LNK, LNK, Other] 36 - Font Family: Modern [LNK, LNK, Other] 40 - Font Weight: 400 [LNK, LNK, Other] 44 - Font Name: 8514oem [LNK, LNK, Other] 108 - Cursor Size: 25 [LNK, LNK, Other] 112 - Full Screen: No [LNK, LNK, Other] 116 - Quick Edit: No [LNK, LNK, Other] 120 - Insert Mode: Yes [LNK, LNK, Other] 124 - Window Origin Auto: Yes [LNK, LNK, Other] 128 - History Buffer Size: 50 [LNK, LNK, Other] 132 - Num History Buffers: 4 [LNK, LNK, Other] 136 - Remove History Duplicates: No �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lytro.t����������������������������������������������������������������������000644 �000765 �000024 �00000001262 12361754135 016134� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Lytro.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Lytro; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Lytro'; my $testnum = 1; # test 2: Extract information from Lytro.lfp { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Lytro.lfp'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Lytro_2.out������������������������������������������������������������������000644 �000765 �000024 �00000022722 12546457276 016740� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Lytro.lfp [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 4.3 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2014:07:17 11:22:05-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:22-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: LFP [File, File, Image] FileTypeExtension - File Type Extension: lfp [File, File, Image] MIMEType - MIME Type: image/x-lytro-lfp [Lytro, Lytro, Camera] JSONMetadata - JSON Metadata: [(Binary data 778 bytes),(Binary data 3155 bytes),(Binary data 131 bytes)] [Lytro, Lytro, Image] PictureDerivationArray - Picture Derivation Array: sha1-f58530c3902263bfc1d411cac2b965d635fb6287 [Lytro, Lytro, Image] PictureFrameArrayFrameImageRef - Picture Frame Array Frame Image Ref: sha1-0360f825e6eed3c7c470fb79a755a54df07fae84 [Lytro, Lytro, Image] PictureFrameArrayFrameMetadataRef - Picture Frame Array Frame Metadata Ref: sha1-031d1e1d0e65efcd6ea74c811a0bc170498d8574 [Lytro, Lytro, Image] PictureFrameArrayFramePrivateMetadataRef - Picture Frame Array Frame Private Metadata Ref: sha1-990a1858fe077fa0601df485704fc1d674a5e6b0 [Lytro, Lytro, Image] PictureFrameArrayParametersVendorContentCom.lytro.tagsDarkFrame - Picture Frame Array Dark Frame: false [Lytro, Lytro, Image] PictureFrameArrayParametersVendorContentCom.lytro.tagsModulationFrame - Picture Frame Array Modulation Frame: false [Lytro, Lytro, Image] PictureViewArrayType - Picture View Array Type: com.lytro.stars [Lytro, Lytro, Image] PictureViewArrayVendorContentStarred - Picture View Array Vendor Content Starred: true [Lytro, Lytro, Image] VersionMajor - Version Major: 1 [Lytro, Lytro, Image] VersionMinor - Version Minor: 0 [Lytro, Lytro, Image] VersionProvisionalDate - Version Provisional Date: 2011-08-03 [Lytro, Lytro, Camera] CameraFirmware - Firmware Version: v1.0a60, vv1.0.0, Thu Feb 23 15:02:57 PST 2012, e10fcca0668db3dbf94ae347248db3da070d21e9, mods=0, ofw=0 [Lytro, Lytro, Camera] CameraMake - Make: Lytro, Inc. [Lytro, Lytro, Camera] CameraModel - Camera Model Name: F01 [Lytro, Lytro, Camera] DevicesAccelerometerSampleArrayTime - Accelerometer Time: 0 [Lytro, Lytro, Camera] DevicesAccelerometerSampleArrayX - Accelerometer X: -0.039215687662363052368 [Lytro, Lytro, Camera] DevicesAccelerometerSampleArrayY - Accelerometer Y: 0.94117647409439086914 [Lytro, Lytro, Camera] DevicesAccelerometerSampleArrayZ - Accelerometer Z: 0.2509804069995880127 [Lytro, Lytro, Time] DevicesClockZuluTime - Date Time Original: 2012:04:12 14:10:55.000Z [Lytro, Lytro, Camera] DevicesLensExitPupilOffsetZ - Lens Exit Pupil Offset Z: 0.11637913513183592573 [Lytro, Lytro, Camera] DevicesLensFNumber - F Number: 1.9 [Lytro, Lytro, Camera] DevicesLensFocalLength - Focal Length: 6.4 mm [Lytro, Lytro, Camera] DevicesLensFocusStep - Lens Focus Step: 721 [Lytro, Lytro, Camera] DevicesLensFocusStepperOffset - Lens Focus Stepper Offset: -13 [Lytro, Lytro, Camera] DevicesLensInfinityLambda - Lens Infinity Lambda: 43.904331207275390625 [Lytro, Lytro, Camera] DevicesLensTemperature - Lens Temperature: 34.1 C [Lytro, Lytro, Camera] DevicesLensTemperatureAdc - Lens Temperature Adc: 2633 [Lytro, Lytro, Camera] DevicesLensZoomStep - Lens Zoom Step: 981 [Lytro, Lytro, Camera] DevicesLensZoomStepperOffset - Lens Zoom Stepper Offset: -1 [Lytro, Lytro, Camera] DevicesMlaLensPitch - Mla Lens Pitch: 1.3898614883422850808e-05 [Lytro, Lytro, Camera] DevicesMlaRotation - Mla Rotation: -0.00028155732434242963791 [Lytro, Lytro, Camera] DevicesMlaScaleFactorX - Mla Scale Factor X: 1 [Lytro, Lytro, Camera] DevicesMlaScaleFactorY - Mla Scale Factor Y: 1.0004389286041259766 [Lytro, Lytro, Camera] DevicesMlaSensorOffsetX - Mla Sensor Offset X: -3.5040323734283452459e-06 [Lytro, Lytro, Camera] DevicesMlaSensorOffsetY - Mla Sensor Offset Y: -1.6298500299453736302e-06 [Lytro, Lytro, Camera] DevicesMlaSensorOffsetZ - Mla Sensor Offset Z: 2.5000000000000001198e-05 [Lytro, Lytro, Camera] DevicesMlaTiling - Mla Tiling: hexUniformRowMajor [Lytro, Lytro, Camera] DevicesNdfilterExposureBias - Ndfilter Exposure Bias: 3.8281672000885009766 [Lytro, Lytro, Camera] DevicesSensorAnalogGainB - Sensor Analog Gain B: 2.03125 [Lytro, Lytro, Camera] DevicesSensorAnalogGainGb - Sensor Analog Gain Gb: 1.75 [Lytro, Lytro, Camera] DevicesSensorAnalogGainGr - Sensor Analog Gain Gr: 1.75 [Lytro, Lytro, Camera] DevicesSensorAnalogGainR - Sensor Analog Gain R: 2.375 [Lytro, Lytro, Camera] DevicesSensorBitsPerPixel - Sensor Bits Per Pixel: 12 [Lytro, Lytro, Camera] DevicesSensorIso - ISO: 87 [Lytro, Lytro, Camera] DevicesSensorMosaicTile - Sensor Mosaic Tile: r,gr:gb,b [Lytro, Lytro, Camera] DevicesSensorMosaicUpperLeftPixel - Sensor Mosaic Upper Left Pixel: b [Lytro, Lytro, Camera] DevicesSensorPixelPitch - Focal Plane X Resolution: 18142.8574518282 [Lytro, Lytro, Camera] DevicesShutterFrameExposureDuration - Frame Exposure Time: 1/250 [Lytro, Lytro, Camera] DevicesShutterMechanism - Shutter Mechanism: sensorOpenApertureClose [Lytro, Lytro, Camera] DevicesShutterPixelExposureDuration - Exposure Time: 1/250 [Lytro, Lytro, Camera] DevicesSocTemperature - Soc Temperature: 43.5 C [Lytro, Lytro, Camera] DevicesSocTemperatureAdc - Soc Temperature Adc: 2776 [Lytro, Lytro, Image] ImageColorCcmRgbToSrgbArray - Image Color Ccm Rgb To Srgb Array: 3.1115827560424804688, -1.9393929243087768555, -0.17218986153602600098, -0.36290559172630310059, 1.6408803462982177734, -0.27797481417655944824, 0.078967012465000152588, -1.1558042764663696289, 2.0768373012542724609 [Lytro, Lytro, Image] ImageColorGamma - Image Color Gamma: 0.41666001081466674805 [Lytro, Lytro, Image] ImageColorWhiteBalanceGainB - Image Color White Balance Gain B: 1.48046875 [Lytro, Lytro, Image] ImageColorWhiteBalanceGainGb - Image Color White Balance Gain Gb: 1 [Lytro, Lytro, Image] ImageColorWhiteBalanceGainGr - Image Color White Balance Gain Gr: 1 [Lytro, Lytro, Image] ImageColorWhiteBalanceGainR - Image Color White Balance Gain R: 1.01171875 [Lytro, Lytro, Image] ImageHeight - Image Height: 3280 [Lytro, Lytro, Image] ImageLimitExposureBias - Image Limit Exposure Bias: +0.0 [Lytro, Lytro, Image] ImageModulationExposureBias - Image Modulation Exposure Bias: -1.2 [Lytro, Lytro, Image] ImageOrientation - Orientation: Horizontal (normal) [Lytro, Lytro, Image] ImageRawDetailsMosaicTile - Image Raw Details Mosaic Tile: r,gr:gb,b [Lytro, Lytro, Image] ImageRawDetailsMosaicUpperLeftPixel - Image Raw Details Mosaic Upper Left Pixel: b [Lytro, Lytro, Image] ImageRawDetailsPixelFormatBlackB - Image Raw Details Pixel Format Black B: 168 [Lytro, Lytro, Image] ImageRawDetailsPixelFormatBlackGb - Image Raw Details Pixel Format Black Gb: 168 [Lytro, Lytro, Image] ImageRawDetailsPixelFormatBlackGr - Image Raw Details Pixel Format Black Gr: 168 [Lytro, Lytro, Image] ImageRawDetailsPixelFormatBlackR - Image Raw Details Pixel Format Black R: 168 [Lytro, Lytro, Image] ImageRawDetailsPixelFormatRightShift - Image Raw Details Pixel Format Right Shift: 0 [Lytro, Lytro, Image] ImageRawDetailsPixelFormatWhiteB - Image Raw Details Pixel Format White B: 4095 [Lytro, Lytro, Image] ImageRawDetailsPixelFormatWhiteGb - Image Raw Details Pixel Format White Gb: 4095 [Lytro, Lytro, Image] ImageRawDetailsPixelFormatWhiteGr - Image Raw Details Pixel Format White Gr: 4095 [Lytro, Lytro, Image] ImageRawDetailsPixelFormatWhiteR - Image Raw Details Pixel Format White R: 4095 [Lytro, Lytro, Image] ImageRawDetailsPixelPackingBitsPerPixel - Image Raw Details Pixel Packing Bits Per Pixel: 12 [Lytro, Lytro, Image] ImageRawDetailsPixelPackingEndianness - Image Raw Details Pixel Packing Endianness: big [Lytro, Lytro, Image] ImageRepresentation - Image Representation: rawPacked [Lytro, Lytro, Image] ImageWidth - Image Width: 3280 [Lytro, Lytro, Image] ModesCreative - Modes Creative: tap [Lytro, Lytro, Image] ModesRegionOfInterestArrayType - Modes Region Of Interest Array Type: exposure [Lytro, Lytro, Image] ModesRegionOfInterestArrayX - Modes Region Of Interest Array X: 0.26874190568923950195 [Lytro, Lytro, Image] ModesRegionOfInterestArrayY - Modes Region Of Interest Array Y: 0.55208665132522583008 [Lytro, Lytro, Image] ModesRegionOfInterestArrayType - Modes Region Of Interest Array Type: creative [Lytro, Lytro, Image] ModesRegionOfInterestArrayX - Modes Region Of Interest Array X: 0.26874190568923950195 [Lytro, Lytro, Image] ModesRegionOfInterestArrayY - Modes Region Of Interest Array Y: 0.55208665132522583008 [Lytro, Lytro, Camera] Type - Camera Type: lightField [Lytro, Lytro, Camera] CameraSerialNumber - Serial Number: A202110453 [Lytro, Lytro, Camera] DevicesSensorSensorSerial - Sensor Serial Number: 0x7096E34F554BDE10 [Composite, Composite, Image] Aperture - Aperture: 1.9 [Composite, Composite, Image] ImageSize - Image Size: 3280x3280 [Composite, Composite, Image] Megapixels - Megapixels: 10.8 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 6.7 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/250 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.005 mm [Composite, Composite, Image] FOV - Field Of View: 45.5 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 6.4 mm (35 mm equivalent: 43.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 4.83 m [Composite, Composite, Image] LightValue - Light Value: 10.0 ����������������������������������������������Image-ExifTool-10.10/t/M2TS.t�����������������������������������������������������������������������000644 �000765 �000024 �00000001325 11334052311 015532� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/M2TS.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::M2TS; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'M2TS'; my $testnum = 1; # test 2: Extract information from test image { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Unknown => 1); my $info = $exifTool->ImageInfo('t/images/M2TS.mts'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/M2TS_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000003330 12546457276 016346� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: M2TS.mts [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1344 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2009:07:08 13:57:28-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:17 10:57:05-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:11 08:47:16-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: M2TS [File, File, Image] FileTypeExtension - File Type Extension: mts [File, File, Image] MIMEType - MIME Type: video/m2ts [M2TS, M2TS, Video] VideoStreamType - Video Stream Type: H.264 Video [M2TS, M2TS, Video] AudioStreamType - Audio Stream Type: A52/AC-3 Audio [M2TS, AC3, Audio] AudioBitrate - Audio Bitrate: 256 kbps [M2TS, AC3, Audio] SurroundMode - Surround Mode: Not indicated [M2TS, AC3, Audio] AudioChannels - Audio Channels: 2 [M2TS, AC3, Audio] AudioSampleRate - Audio Sample Rate: 48000 [H264, H264, Video] ImageWidth - Image Width: 1920 [H264, H264, Video] ImageHeight - Image Height: 1080 [H264, H264, Time] 24 - Date/Time Original: 2008:12:31 23:16:24+01:00 [H264, H264, Camera] 0 - Aperture Setting: 2.4 [H264, H264, Camera] 1 - Gain: 9 dB [H264, H264, Camera] 1 - Image Stabilization: n/a [H264, H264, Image] 1.1 - Exposure Time: 1/25 [H264, H264, Camera] 0 - Make: Canon [H264, H264, Camera] 0 - Recording Mode: FXP [Composite, Composite, Image] ImageSize - Image Size: 1920x1080 [Composite, Composite, Image] Megapixels - Megapixels: 2.1 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/25 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Matroska.t�������������������������������������������������������������������000644 �000765 �000024 �00000001345 11377511357 016611� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Matroska.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Matroska; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Matroska'; my $testnum = 1; # test 2: Extract information from test image { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Unknown => 1); my $info = $exifTool->ImageInfo('t/images/Matroska.mkv'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Matroska_2.out���������������������������������������������������������������000644 �000765 �000024 �00000007507 12546457276 017414� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Matroska.mkv [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 507 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:05:28 18:24:56-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:22-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: MKV [File, File, Image] FileTypeExtension - File Type Extension: mkv [File, File, Image] MIMEType - MIME Type: video/x-matroska [Matroska, Matroska, Video] 642 - Doc Type: matroska [Matroska, Matroska, Video] 647 - Doc Type Version: 1 [Matroska, Matroska, Video] 645 - Doc Type Read Version: 1 [Matroska, Matroska, Video] 5035 - Seek ID: (Binary data 4 bytes) [Matroska, Matroska, Video] 5036 - Seek Position: 4099 [Matroska, Matroska, Video] 5035 - Seek ID: (Binary data 4 bytes) [Matroska, Matroska, Video] 5036 - Seek Position: 4264 [Matroska, Matroska, Video] 5035 - Seek ID: (Binary data 4 bytes) [Matroska, Matroska, Video] 5036 - Seek Position: 17889670 [Matroska, Matroska, Video] 5035 - Seek ID: (Binary data 4 bytes) [Matroska, Matroska, Video] 5036 - Seek Position: 17889269 [Matroska, Matroska, Video] 710577 - Timecode Scale: 1 ms [Matroska, Matroska, Video] 3456 - Muxing App: libebml v0.7.8 + libmatroska v0.8.1 [Matroska, Matroska, Video] 5953 - Writing App: mkvmerge v2.4.0 ('Fumbling Towards Ecstasy') built on Dec 3 2008 16:22:41 [Matroska, Matroska, Video] 1161 - Duration: 0:02:28 [Matroska, Matroska, Time] 1121 - Date/Time Original: 2010:02:03 21:17:48Z [Matroska, Matroska, Video] 13220 - Segment UID: (Binary data 16 bytes) [Matroska, Track1, Video] 87 - Track Number: 1 [Matroska, Track1, Video] 13253 - Track UID: 2708023567 [Matroska, Track1, Video] 3 - Track Type: Video [Matroska, Track1, Video] 57 - Track Used: Yes [Matroska, Track1, Video] 8 - Track Default: Yes [Matroska, Track1, Video] 5546 - Track Forced: No [Matroska, Track1, Video] 28 - Track Lacing: No [Matroska, Track1, Video] 11751 - Min Cache: 1 [Matroska, Track1, Video] 209231 - Track Timecode Scale: 1 [Matroska, Track1, Video] 5614 - Max Block Addition ID: 0 [Matroska, Track1, Video] 6 - Video Codec ID: V_MPEG4/ISO/AVC [Matroska, Track1, Video] 42 - Codec Decode All: Yes [Matroska, Track1, Video] 9122 - Codec Private: (Binary data 41 bytes) [Matroska, Track1, Video] 254851 - Video Frame Rate: 25 [Matroska, Track1, Video] 177564 - Track Language: und [Matroska, Track1, Video] 48 - Image Width: 704 [Matroska, Track1, Video] 58 - Image Height: 576 [Matroska, Track1, Video] 26 - Video Scan Type: Progressive [Matroska, Track1, Video] 5296 - Display Width: 768 [Matroska, Track1, Video] 5306 - Display Height: 576 [Matroska, Track2, Video] 87 - Track Number: 2 [Matroska, Track2, Video] 13253 - Track UID: 3776461812 [Matroska, Track2, Video] 3 - Track Type: Audio [Matroska, Track2, Video] 57 - Track Used: Yes [Matroska, Track2, Video] 8 - Track Default: Yes [Matroska, Track2, Video] 5546 - Track Forced: No [Matroska, Track2, Video] 28 - Track Lacing: Yes [Matroska, Track2, Video] 11751 - Min Cache: 0 [Matroska, Track2, Video] 209231 - Track Timecode Scale: 1 [Matroska, Track2, Video] 5614 - Max Block Addition ID: 0 [Matroska, Track2, Video] 6 - Audio Codec ID: A_MPEG/L3 [Matroska, Track2, Video] 42 - Codec Decode All: Yes [Matroska, Track2, Video] 254851 - Default Duration: 24 ms [Matroska, Track2, Video] 177564 - Track Language: und [Matroska, Track2, Audio] 53 - Audio Sample Rate: 48000 [Matroska, Track2, Audio] 31 - Audio Channels: 2 [Composite, Composite, Image] ImageSize - Image Size: 704x576 [Composite, Composite, Image] Megapixels - Megapixels: 0.406 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MIE.t������������������������������������������������������������������������000644 �000765 �000024 �00000005273 11327642463 015444� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/MIE.t". BEGIN { $| = 1; print "1..6\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::MIE; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'MIE'; my $testnum = 1; # test 2: Extract information from MIE.mie { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/MIE.mie', '-filename', '-directory'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write MIE information (also test Escape option when writing) { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(IgnoreMinorErrors => 1); # to copy invalid thumbnail $exifTool->SetNewValuesFromFile('t/images/Nikon.jpg','*:*'); $exifTool->SetNewValue('EXIF:XResolution' => 200); $exifTool->SetNewValue('MIE:FNumber' => 11); $exifTool->SetNewValue('XMP:Creator' => 'phil'); $exifTool->SetNewValue('IPTC:Keywords' => 'cool'); $exifTool->Options(Escape => 'HTML'); $exifTool->SetNewValue('MIE:PhoneNumber' => 'k&uuml;hl'); $exifTool->Options(Escape => undef); my $testfile = "t/${testname}_${testnum}_failed.mie"; unlink $testfile; $exifTool->WriteInfo('t/images/MIE.mie', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 4: Create a MIE file from scratch (also test Escape option when copying) { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(IgnoreMinorErrors => 1); # to copy invalid thumbnail $exifTool->Options(Escape => 'HTML'); $exifTool->SetNewValuesFromFile('t/images/MIE.mie'); my $testfile = "t/${testname}_${testnum}_failed.mie"; unlink $testfile; $exifTool->WriteInfo(undef, $testfile); $exifTool->Options(Escape => undef); # reset Escape option my $info = $exifTool->ImageInfo($testfile, '-filename', '-directory'); if (check($exifTool, $info, $testname, $testnum, 2)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # tests 5-6: Test reading different Charsets foreach (qw(Latin Cyrillic)) { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Charset => $_); my $info = $exifTool->ImageInfo('t/images/MIE.mie', 'comment-ru_ru'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MIE_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000011601 12546457276 016233� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileSize - File Size: 2.0 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:12:20 09:12:06-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:46-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: MIE [File, File, Image] FileTypeExtension - File Type Extension: mie [File, File, Image] MIMEType - MIME Type: image/x-mie-jpeg [MIE, MIE-Main, Other] 0Type - Subfile Type: JPEG [MIE, MIE-Main, Other] 0Vers - MIE Version: 1.1 [MIE, MIE-Main, Other] 1Name - Subfile Name: dummy.jpg [MIE, MIE-Main, Other] 2MIME - Subfile MIME Type: image/jpeg [MIE, MIE-Camera, Camera] ColorTemperature - Color Temperature: 5200 [MIE, MIE-Camera, Camera] Contrast - Contrast: 1 [MIE, MIE-Camera, Camera] ExposureComp - Exposure Compensation: 0 [MIE, MIE-Camera, Camera] ExposureMode - Exposure Mode: Manual [MIE, MIE-Camera, Camera] ExposureTime - Exposure Time: 4 [MIE, MIE-Flash, Camera] ExposureComp - Flash Exposure Comp: 0 [MIE, MIE-Flash, Camera] GuideNumber - Flash Guide Number: 0 [MIE, MIE-Camera, Camera] FocusMode - Focus Mode: Manual Focus [MIE, MIE-Camera, Camera] ISO - ISO: 100 [MIE, MIE-Lens, Camera] FNumber - F Number: 3.5 [MIE, MIE-Lens, Camera] MaxAperture - Max Aperture: 4 [MIE, MIE-Lens, Camera] MinAperture - Min Aperture: 27 [MIE, MIE-Camera, Camera] Make - Make: FUJIFILM [MIE, MIE-Camera, Camera] Model - Model: FinePix2400Zoom [MIE, MIE-Orient, Camera] Rotation - Rotation: 90 [MIE, MIE-Camera, Camera] OwnerName - Owner Name: Phil Harvey [MIE, MIE-Camera, Camera] Saturation - Saturation: 1 [MIE, MIE-Camera, Camera] SerialNumber - Serial Number: 0560012345 [MIE, MIE-Camera, Camera] Sharpness - Sharpness: 1 [MIE, MIE-Camera, Camera] ShootingMode - Shooting Mode: Manual [MIE, MIE-Doc, Document] Comment - Comment: I can eat glass and it doesn't hurt me. [MIE, MIE-Doc, Document] Comment-cn_ZH - Comment (cn_ZH): 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。 [MIE, MIE-Doc, Document] Comment-de_DE - Comment (de_DE): Ich kann Glas essen, ohne mir weh zu tun. [MIE, MIE-Doc, Document] Comment-el_GR - Comment (el_GR): ΜποÏÏŽ να φάω σπασμένα γυαλιά χωÏίς να πάθω τίποτα. [MIE, MIE-Doc, Document] Comment-en_CA - Comment (en_CA): I can eat glass and it doesn't hurt me, eh. [MIE, MIE-Doc, Document] Comment-en_GB - Comment (en_GB): I say, I can eat glass and it doesn't hurt me old boy. [MIE, MIE-Doc, Document] Comment-en_US - Comment (en_US): Dude! Munching glass don't bust my chops. [MIE, MIE-Doc, Document] Comment-es_ES - Comment (es_ES): Puedo comer vidrio, no me hace daño. [MIE, MIE-Doc, Document] Comment-fr_FR - Comment (fr_FR): Je peux manger du verre, ça ne me fait pas de mal. [MIE, MIE-Doc, Document] Comment-hi_IN - Comment (hi_IN): मैं काà¤à¤š खा सकता हूà¤, मà¥à¤à¥‡ उस से कोई पीडा नहीं होती. [MIE, MIE-Doc, Document] Comment-it_IT - Comment (it_IT): Posso mangiare il vetro e non mi fa male. [MIE, MIE-Doc, Document] Comment-ja_JP - Comment (ja_JP): ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“。 [MIE, MIE-Doc, Document] Comment-ru_RU - Comment (ru_RU): Я могу еÑть Ñтекло, оно мне не вредит. [MIE, MIE-Doc, Author] Copyright - Copyright: © Copyright Phil Harvey [MIE, MIE-Doc, Time] CreateDate - Create Date: 2001:05:19 18:36:41 [MIE, MIE-Doc, Document] Keywords - Keywords: ExifTool, Test, MIE [MIE, MIE-Doc, Time] ModifyDate - Modify Date: 2004:02:26 09:36:46 [MIE, MIE-Doc, Time] OriginalDate - Date/Time Original: 2001:05:19 18:36:41 [MIE, MIE-Doc, Document] References - References: http://www.columbia.edu/kermit/utf8.html (Comment strings) [MIE, MIE-Doc, Document] Software - Software: Adobe Photoshop 7.0 [MIE, MIE-Doc, Document] Title - Title: Test IPTC picture [MIE, MIE-Doc, Document] URL - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [MIE, MIE-Geo, Location] City - City: Kingston [MIE, MIE-Geo, Location] Country - Country: Canada [MIE, MIE-Geo, Location] State - State: Ont [MIE, MIE-Image, Image] ColorSpace - Color Space: sRGB [MIE, MIE-Image, Image] Components - Components Configuration: YCbCr [MIE, MIE-Image, Image] ImageSize - Image Size: 100x80 [MIE, MIE-Image, Image] Resolution - Resolution: 118x118(/cm) [MIE, MIE-Thumbnail, Image] ImageSize - Thumbnail Image Size: 160x120 [MIE, MIE-Thumbnail, Preview] data - Thumbnail Image: (Binary data 28 bytes) [MIE, MIE-Main, Other] data - Subfile Data: (Binary data 20 bytes) [Composite, Composite, Image] Aperture - Aperture: 3.5 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 4 [Composite, Composite, Image] LightValue - Light Value: 1.6 [Composite, Composite, Image] Megapixels - Megapixels: 0.008 �������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MIE_3.out��������������������������������������������������������������������000644 �000765 �000024 �00000020730 12546457276 016237� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: MIE_3_failed.mie [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 6.1 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:47-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:47-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:47-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: MIE [File, File, Image] FileTypeExtension - File Type Extension: mie [File, File, Image] MIMEType - MIME Type: image/x-mie-jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: ff6b1fa510bbe0d2c2323752af38a86b [MIE, MIE-Main, Other] 0Type - Subfile Type: JPEG [MIE, MIE-Main, Other] 0Vers - MIE Version: 1.1 [MIE, MIE-Main, Other] 1Name - Subfile Name: dummy.jpg [MIE, MIE-Main, Other] 2MIME - Subfile MIME Type: image/jpeg [MIE, MIE-Camera, Camera] ColorTemperature - Color Temperature: 5200 [MIE, MIE-Camera, Camera] Contrast - Contrast: 1 [MIE, MIE-Camera, Camera] ExposureComp - Exposure Compensation: 0 [MIE, MIE-Camera, Camera] ExposureMode - Exposure Mode: Manual [MIE, MIE-Camera, Camera] ExposureTime - Exposure Time: 4 [MIE, MIE-Flash, Camera] ExposureComp - Flash Exposure Comp: 0 [MIE, MIE-Flash, Camera] GuideNumber - Flash Guide Number: 0 [MIE, MIE-Camera, Camera] FocusMode - Focus Mode: Manual Focus [MIE, MIE-Camera, Camera] ISO - ISO: 100 [MIE, MIE-Lens, Camera] FNumber - F Number: 11 [MIE, MIE-Lens, Camera] MaxAperture - Max Aperture: 4 [MIE, MIE-Lens, Camera] MinAperture - Min Aperture: 27 [MIE, MIE-Camera, Camera] Make - Make: FUJIFILM [MIE, MIE-Camera, Camera] Model - Model: FinePix2400Zoom [MIE, MIE-Orient, Camera] Rotation - Rotation: 90 [MIE, MIE-Camera, Camera] OwnerName - Owner Name: Phil Harvey [MIE, MIE-Camera, Camera] Saturation - Saturation: 1 [MIE, MIE-Camera, Camera] SerialNumber - Serial Number: 0560012345 [MIE, MIE-Camera, Camera] Sharpness - Sharpness: 1 [MIE, MIE-Camera, Camera] ShootingMode - Shooting Mode: Manual [MIE, MIE-Doc, Document] Comment - Comment: I can eat glass and it doesn't hurt me. [MIE, MIE-Doc, Document] Comment-cn_ZH - Comment (cn_ZH): 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。 [MIE, MIE-Doc, Document] Comment-de_DE - Comment (de_DE): Ich kann Glas essen, ohne mir weh zu tun. [MIE, MIE-Doc, Document] Comment-el_GR - Comment (el_GR): ΜποÏÏŽ να φάω σπασμένα γυαλιά χωÏίς να πάθω τίποτα. [MIE, MIE-Doc, Document] Comment-en_CA - Comment (en_CA): I can eat glass and it doesn't hurt me, eh. [MIE, MIE-Doc, Document] Comment-en_GB - Comment (en_GB): I say, I can eat glass and it doesn't hurt me old boy. [MIE, MIE-Doc, Document] Comment-en_US - Comment (en_US): Dude! Munching glass don't bust my chops. [MIE, MIE-Doc, Document] Comment-es_ES - Comment (es_ES): Puedo comer vidrio, no me hace daño. [MIE, MIE-Doc, Document] Comment-fr_FR - Comment (fr_FR): Je peux manger du verre, ça ne me fait pas de mal. [MIE, MIE-Doc, Document] Comment-hi_IN - Comment (hi_IN): मैं काà¤à¤š खा सकता हूà¤, मà¥à¤à¥‡ उस से कोई पीडा नहीं होती. [MIE, MIE-Doc, Document] Comment-it_IT - Comment (it_IT): Posso mangiare il vetro e non mi fa male. [MIE, MIE-Doc, Document] Comment-ja_JP - Comment (ja_JP): ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“。 [MIE, MIE-Doc, Document] Comment-ru_RU - Comment (ru_RU): Я могу еÑть Ñтекло, оно мне не вредит. [MIE, MIE-Doc, Author] Copyright - Copyright: © Copyright Phil Harvey [MIE, MIE-Doc, Time] CreateDate - Create Date: 2001:05:19 18:36:41 [MIE, MIE-Doc, Document] Keywords - Keywords: ExifTool, Test, MIE [MIE, MIE-Doc, Time] ModifyDate - Modify Date: 2004:02:26 09:36:46 [MIE, MIE-Doc, Time] OriginalDate - Date/Time Original: 2001:05:19 18:36:41 [MIE, MIE-Doc, Author] Phone - Phone Number: kühl [MIE, MIE-Doc, Document] References - References: http://www.columbia.edu/kermit/utf8.html (Comment strings) [MIE, MIE-Doc, Document] Software - Software: Adobe Photoshop 7.0 [MIE, MIE-Doc, Document] Title - Title: Test IPTC picture [MIE, MIE-Doc, Document] URL - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [MIE, MIE-Geo, Location] City - City: Kingston [MIE, MIE-Geo, Location] Country - Country: Canada [MIE, MIE-Geo, Location] State - State: Ont [MIE, MIE-Image, Image] ColorSpace - Color Space: sRGB [MIE, MIE-Image, Image] Components - Components Configuration: YCbCr [MIE, MIE-Image, Image] ImageSize - Image Size: 100x80 [MIE, MIE-Image, Image] Resolution - Resolution: 118x118(/cm) [MIE, MIE-Thumbnail, Image] ImageSize - Thumbnail Image Size: 160x120 [MIE, MIE-Thumbnail, Preview] data - Thumbnail Image: (Binary data 28 bytes) [MIE, MIE-Main, Other] data - Subfile Data: (Binary data 20 bytes) [EXIF, IFD0, Image] 270 - Image Description: [EXIF, IFD0, Camera] 271 - Make: NIKON [EXIF, IFD0, Camera] 272 - Camera Model Name: E775 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 200 [EXIF, IFD0, Image] 283 - Y Resolution: 300 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: E775v1.3u [EXIF, IFD0, Time] 306 - Modify Date: 2001:08:01 12:57:23 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/213 [EXIF, ExifIFD, Image] 33437 - F Number: 9.4 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:08:01 12:57:23 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:08:01 12:57:23 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.4 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 8.6 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 1600 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1200 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 300 [EXIF, IFD1, Image] 283 - Y Resolution: 300 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 3063 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Nikon, Camera] 1 - Maker Note Version: 1.00 [MakerNotes, Nikon, Image] 2 - ISO: 0 [MakerNotes, Nikon, Camera] 3 - Color Mode: Color [MakerNotes, Nikon, Camera] 4 - Quality: Fine [MakerNotes, Nikon, Camera] 5 - White Balance: Auto [MakerNotes, Nikon, Camera] 6 - Sharpness: Auto [MakerNotes, Nikon, Camera] 7 - Focus Mode: AF-C [MakerNotes, Nikon, Camera] 8 - Flash Setting: [MakerNotes, Nikon, Camera] 15 - ISO Selection: Auto [MakerNotes, Nikon, Camera] 128 - Image Adjustment: Normal [MakerNotes, Nikon, Camera] 130 - Auxiliary Lens: Off [MakerNotes, Nikon, Camera] 133 - Manual Focus Distance: undef [MakerNotes, Nikon, Camera] 134 - Digital Zoom: 1 [MakerNotes, Nikon, Camera] 0 - AF Area Mode: Single Area [MakerNotes, Nikon, Camera] 1 - AF Point: Center [MakerNotes, Nikon, Camera] 2 - AF Points In Focus: (none) [MakerNotes, Nikon, Camera] 143 - Scene Mode: [MakerNotes, Nikon, Camera] 16 - Data Dump: (Binary data 122 bytes) [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0100 [IPTC, IPTC, Other] 25 - Keywords: cool [IPTC, IPTC, Other] 0 - Application Record Version: 4 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.94 [XMP, XMP-dc, Author] creator - Creator: phil [Composite, Composite, Image] Aperture - Aperture: 9.4 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/213 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Image] LightValue - Light Value: 14.2 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 8.6 mm [Composite, Composite, Image] Megapixels - Megapixels: 0.008 ����������������������������������������Image-ExifTool-10.10/t/MIE_5.out��������������������������������������������������������������������000644 �000765 �000024 �00000000141 11246111554 016211� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[MIE, MIE-Doc, Document] Comment-ru_RU - Comment (ru_RU): ? ???? ???? ??????, ??? ??? ?? ??????. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MIE_6.out��������������������������������������������������������������������000644 �000765 �000024 �00000000141 11246111554 016212� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[MIE, MIE-Doc, Document] Comment-ru_RU - Comment (ru_RU): ß ìîãó åñòü ñòåêëî, îíî ìíå íå âðåäèò. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MIFF.t�����������������������������������������������������������������������000644 �000765 �000024 �00000001257 11327642463 015551� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/MIFF.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::MIFF; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'MIFF'; my $testnum = 1; # test 2: Extract information from MIFF.miff { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/MIFF.miff'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MIFF_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000014331 12546457276 016345� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: MIFF.miff [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 3.7 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2005:11:14 14:47:21-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:22-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: MIFF [File, File, Image] FileTypeExtension - File Type Extension: miff [File, File, Image] MIMEType - MIME Type: application/x-magick-image [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [MIFF, MIFF, Image] id - ID: ImageMagick [MIFF, MIFF, Image] class - Class: DirectClass [MIFF, MIFF, Image] matte - Matte: False [MIFF, MIFF, Image] columns - Image Width: 8 [MIFF, MIFF, Image] rows - Image Height: 8 [MIFF, MIFF, Image] depth - Depth: 8 [MIFF, MIFF, Image] Resolution - Resolution: 72x72 [MIFF, MIFF, Image] units - Units: pixels-per-inch [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Author] 122 - Writer-Editor: I wrote it [IPTC, IPTC, Author] 80 - By-line: Phil Harvey [IPTC, IPTC, Author] 110 - Credit: My Credit [IPTC, IPTC, Time] 55 - Date Created: 2004:02:26 [IPTC, IPTC, Location] 90 - City: Kingston [IPTC, IPTC, Location] 95 - Province-State: Ont [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC, Other] 15 - Category: 1 [IPTC, IPTC, Other] 10 - Urgency: 8 (least urgent) [IPTC, IPTC, Other] 25 - Keywords: ExifTool, Test, MIFF [IPTC, IPTC, Other] 120 - Caption-Abstract: MIFF test [Photoshop, Photoshop, Image] 1061 - IPTC Digest: 9e02efbd9bdc1dc192279e30a0e27323 [Photoshop, Photoshop, Image] 0 - X Resolution: 72 [Photoshop, Photoshop, Image] 2 - Displayed Units X: inches [Photoshop, Photoshop, Image] 4 - Y Resolution: 72 [Photoshop, Photoshop, Image] 6 - Displayed Units Y: inches [Photoshop, Photoshop, Image] 1037 - Global Angle: 30 [Photoshop, Photoshop, Image] 1049 - Global Altitude: 30 [Photoshop, Photoshop, Author] 1034 - Copyright Flag: False [Photoshop, Photoshop, Author] 1035 - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [Photoshop, Photoshop, Image] 0 - Photoshop Quality: 2 [Photoshop, Photoshop, Image] 1 - Photoshop Format: Standard [Photoshop, Photoshop, Image] 2 - Progressive Scans: 3 Scans [EXIF, IFD0, Image] 270 - Image Description: A witty caption [EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Adobe Photoshop 7.0 [EXIF, IFD0, Time] 306 - Modify Date: 2005:07:21 07:47:01 [EXIF, IFD0, Author] 315 - Artist: Phil Harvey [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: Copyright 2004 Phil Harvey [EXIF, ExifIFD, Image] 33437 - F Number: 3.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 1.6 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/64 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 8 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 8 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3053 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3053 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 854 [EXIF, IFD1, Image] 514 - Thumbnail Length: 0 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 5.47 [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: UTF-16 (big-endian) encoded XMP [XMP, XMP-dc, Author] rights - Rights: Copyright 2004 Phil Harvey [XMP, XMP-dc, Image] subject - Subject: MIFF, Test [XMP, XMP-dc, Image] title - Title: Test IPTC picture [XMP, XMP-photoshop, Image] Category - Category: 1 [XMP, XMP-photoshop, Location] City - City: Kingston [XMP, XMP-photoshop, Location] Country - Country: Canada [XMP, XMP-photoshop, Author] Credit - Credit: My Credit [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2004:02:26 [XMP, XMP-photoshop, Image] Urgency - Urgency: 8 (least urgent) [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: My Job [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:photoshop:4cc7b857-69d0-11d8-8ac4-bb59c92f0d9a [XMP, XMP-xmpRights, Author] Marked - Marked: False [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ [Composite, Composite, Image] Aperture - Aperture: 3.5 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/64 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 6.0 mm [Composite, Composite, Image] LightValue - Light Value: 9.6 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Minolta.t��������������������������������������������������������������������000644 �000765 �000024 �00000002352 11327642463 016430� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Minolta.t". BEGIN { $| = 1; print "1..4\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Minolta; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Minolta'; my $testnum = 1; # test 2: Extract information from Minolta.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Minolta.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( ['Caption-Abstract' => 'A new caption/abstract'], ['MinoltaDate' => '2005:01:16'], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum); print "ok $testnum\n"; } # test 4: Write rewriting MRW image { ++$testnum; my @writeInfo = ( ['FocusMode' => 'MF'], ['LastFileNumber' => '123'], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/Minolta.mrw'); print "ok $testnum\n"; } # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Minolta_2.out����������������������������������������������������������������000644 �000765 �000024 �00000017464 12546457276 017241� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Minolta.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 13 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:04 14:02:27-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:32-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: DCF 1.0 [EXIF, IFD0, Camera] 271 - Make: Minolta Co., Ltd. [EXIF, IFD0, Camera] 272 - Camera Model Name: DiMAGE 7i [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Ver.1.00u [EXIF, IFD0, Time] 306 - Modify Date: 2002:06:01 12:37:27 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/180 [EXIF, ExifIFD, Image] 33437 - F Number: 5.6 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2002:06:01 12:37:27 [EXIF, ExifIFD, Time] 36868 - Create Date: 2002:06:01 12:37:27 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37379 - Brightness Value: 7.5 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.4 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 42.3 mm [EXIF, ExifIFD, Camera] 37396 - Subject Area: 960 960 320 192 [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2560 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1920 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Custom [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 0 [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 167 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: None [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, ExifIFD, Camera] 41996 - Subject Distance Range: Close [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 13224 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y Cb Cr Positioning: Centered [MakerNotes, Minolta, Camera] 0 - Maker Note Version: MLT0 [MakerNotes, Minolta, Camera] 1 - Exposure Mode: Program [MakerNotes, Minolta, Camera] 2 - Flash Mode: Fill flash [MakerNotes, Minolta, Camera] 3 - White Balance: Auto [MakerNotes, Minolta, Camera] 4 - Minolta Image Size: Full [MakerNotes, Minolta, Camera] 5 - Minolta Quality: Fine [MakerNotes, Minolta, Camera] 6 - Drive Mode: Single [MakerNotes, Minolta, Camera] 7 - Metering Mode: Multi-segment [MakerNotes, Minolta, Camera] 8 - ISO: 100 [MakerNotes, Minolta, Camera] 9 - Exposure Time: 1/181 [MakerNotes, Minolta, Camera] 10 - F Number: 5.7 [MakerNotes, Minolta, Camera] 11 - Macro Mode: Off [MakerNotes, Minolta, Camera] 12 - Digital Zoom: Off [MakerNotes, Minolta, Camera] 13 - Exposure Compensation: 0 [MakerNotes, Minolta, Camera] 14 - Bracket Step: 1/3 EV [MakerNotes, Minolta, Camera] 16 - Interval Length: 0 [MakerNotes, Minolta, Camera] 17 - Interval Number: 2 [MakerNotes, Minolta, Camera] 18 - Focal Length: 41.4 mm [MakerNotes, Minolta, Camera] 19 - Focus Distance: 2 m [MakerNotes, Minolta, Camera] 20 - Flash Fired: No [MakerNotes, Minolta, Time] 21 - Minolta Date: 2002:06:01 [MakerNotes, Minolta, Time] 22 - Minolta Time: 12:37:27 [MakerNotes, Minolta, Camera] 23 - Max Aperture: 3.4 [MakerNotes, Minolta, Camera] 26 - File Number Memory: On [MakerNotes, Minolta, Camera] 27 - Last File Number: 32 [MakerNotes, Minolta, Camera] 28 - Color Balance Red: 1.49609375 [MakerNotes, Minolta, Camera] 29 - Color Balance Green: 1 [MakerNotes, Minolta, Camera] 30 - Color Balance Blue: 1.375 [MakerNotes, Minolta, Camera] 31 - Saturation: Normal [MakerNotes, Minolta, Camera] 32 - Contrast: Normal [MakerNotes, Minolta, Camera] 33 - Sharpness: Normal [MakerNotes, Minolta, Camera] 34 - Subject Program: None [MakerNotes, Minolta, Camera] 35 - Flash Exposure Compensation: 0 [MakerNotes, Minolta, Camera] 36 - ISO Setting: 100 [MakerNotes, Minolta, Camera] 37 - Minolta Model ID: DiMAGE 7i [MakerNotes, Minolta, Camera] 38 - Interval Mode: Still Image [MakerNotes, Minolta, Camera] 39 - Folder Name: Standard Form [MakerNotes, Minolta, Camera] 40 - Color Mode: Natural color [MakerNotes, Minolta, Camera] 41 - Color Filter: 0 [MakerNotes, Minolta, Camera] 42 - BW Filter: 0 [MakerNotes, Minolta, Camera] 43 - Internal Flash: No [MakerNotes, Minolta, Camera] 44 - Brightness: 7.5 [MakerNotes, Minolta, Camera] 45 - Spot Focus Point X: 1280 [MakerNotes, Minolta, Camera] 46 - Spot Focus Point Y: 960 [MakerNotes, Minolta, Camera] 47 - Wide Focus Zone: Left zone [MakerNotes, Minolta, Camera] 48 - Focus Mode: AF [MakerNotes, Minolta, Camera] 49 - Focus Area: Wide Focus (normal) [MakerNotes, Minolta, Camera] 50 - DEC Position: Exposure [MakerNotes, Minolta, Camera] 64 - Compressed Image Size: 2396300 [MakerNotes, Minolta, Camera] 136 - Preview Image Start: 13042 [MakerNotes, Minolta, Camera] 137 - Preview Image Length: 26 [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0100 [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [Composite, Composite, Image] Aperture - Aperture: 5.6 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 26 bytes) [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 3.9 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/180 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.008 mm [Composite, Composite, Image] DOF - Depth Of Field: 0.19 m (1.91 - 2.10 m) [Composite, Composite, Image] FOV - Field Of View: 12.0 deg (0.42 m) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 42.3 mm (35 mm equivalent: 167.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 42.01 m [Composite, Composite, Image] LightValue - Light Value: 12.5 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Minolta_3.out����������������������������������������������������������������000644 �000765 �000024 �00000021255 12546457276 017233� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Minolta_3_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 13 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:47-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:47-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:47-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 55a74ece68e6b31776ae6870c7a02dd6 [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: DCF 1.0 [EXIF, IFD0, Camera] 271 - Make: Minolta Co., Ltd. [EXIF, IFD0, Camera] 272 - Camera Model Name: DiMAGE 7i [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Ver.1.00u [EXIF, IFD0, Time] 306 - Modify Date: 2002:06:01 12:37:27 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/180 [EXIF, ExifIFD, Image] 33437 - F Number: 5.6 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2002:06:01 12:37:27 [EXIF, ExifIFD, Time] 36868 - Create Date: 2002:06:01 12:37:27 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37379 - Brightness Value: 7.5 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.4 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 42.3 mm [EXIF, ExifIFD, Camera] 37396 - Subject Area: 960 960 320 192 [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2560 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1920 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Custom [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 0 [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 167 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: None [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, ExifIFD, Camera] 41996 - Subject Distance Range: Close [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 13198 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y Cb Cr Positioning: Centered [MakerNotes, Minolta, Camera] 0 - Maker Note Version: MLT0 [MakerNotes, Minolta, Camera] 1 - Exposure Mode: Program [MakerNotes, Minolta, Camera] 2 - Flash Mode: Fill flash [MakerNotes, Minolta, Camera] 3 - White Balance: Auto [MakerNotes, Minolta, Camera] 4 - Minolta Image Size: Full [MakerNotes, Minolta, Camera] 5 - Minolta Quality: Fine [MakerNotes, Minolta, Camera] 6 - Drive Mode: Single [MakerNotes, Minolta, Camera] 7 - Metering Mode: Multi-segment [MakerNotes, Minolta, Camera] 8 - ISO: 100 [MakerNotes, Minolta, Camera] 9 - Exposure Time: 1/181 [MakerNotes, Minolta, Camera] 10 - F Number: 5.7 [MakerNotes, Minolta, Camera] 11 - Macro Mode: Off [MakerNotes, Minolta, Camera] 12 - Digital Zoom: Off [MakerNotes, Minolta, Camera] 13 - Exposure Compensation: 0 [MakerNotes, Minolta, Camera] 14 - Bracket Step: 1/3 EV [MakerNotes, Minolta, Camera] 16 - Interval Length: 0 [MakerNotes, Minolta, Camera] 17 - Interval Number: 2 [MakerNotes, Minolta, Camera] 18 - Focal Length: 41.4 mm [MakerNotes, Minolta, Camera] 19 - Focus Distance: 2 m [MakerNotes, Minolta, Camera] 20 - Flash Fired: No [MakerNotes, Minolta, Time] 21 - Minolta Date: 2005:01:16 [MakerNotes, Minolta, Time] 22 - Minolta Time: 12:37:27 [MakerNotes, Minolta, Camera] 23 - Max Aperture: 3.4 [MakerNotes, Minolta, Camera] 26 - File Number Memory: On [MakerNotes, Minolta, Camera] 27 - Last File Number: 32 [MakerNotes, Minolta, Camera] 28 - Color Balance Red: 1.49609375 [MakerNotes, Minolta, Camera] 29 - Color Balance Green: 1 [MakerNotes, Minolta, Camera] 30 - Color Balance Blue: 1.375 [MakerNotes, Minolta, Camera] 31 - Saturation: Normal [MakerNotes, Minolta, Camera] 32 - Contrast: Normal [MakerNotes, Minolta, Camera] 33 - Sharpness: Normal [MakerNotes, Minolta, Camera] 34 - Subject Program: None [MakerNotes, Minolta, Camera] 35 - Flash Exposure Compensation: 0 [MakerNotes, Minolta, Camera] 36 - ISO Setting: 100 [MakerNotes, Minolta, Camera] 37 - Minolta Model ID: DiMAGE 7i [MakerNotes, Minolta, Camera] 38 - Interval Mode: Still Image [MakerNotes, Minolta, Camera] 39 - Folder Name: Standard Form [MakerNotes, Minolta, Camera] 40 - Color Mode: Natural color [MakerNotes, Minolta, Camera] 41 - Color Filter: 0 [MakerNotes, Minolta, Camera] 42 - BW Filter: 0 [MakerNotes, Minolta, Camera] 43 - Internal Flash: No [MakerNotes, Minolta, Camera] 44 - Brightness: 7.5 [MakerNotes, Minolta, Camera] 45 - Spot Focus Point X: 1280 [MakerNotes, Minolta, Camera] 46 - Spot Focus Point Y: 960 [MakerNotes, Minolta, Camera] 47 - Wide Focus Zone: Left zone [MakerNotes, Minolta, Camera] 48 - Focus Mode: AF [MakerNotes, Minolta, Camera] 49 - Focus Area: Wide Focus (normal) [MakerNotes, Minolta, Camera] 50 - DEC Position: Exposure [MakerNotes, Minolta, Camera] 16 - Minolta 0x0010: ¯¯¯¯ÿ...’.–Œ.P…þÿ~½ÿßßÓÿÿÿïýÿÿ[...] [MakerNotes, Minolta, Camera] 32 - Minolta 0x0020: øøøm.n.nn..¤/&#¡......(,;...k(S.[...] [MakerNotes, Minolta, Camera] 64 - Compressed Image Size: 2396300 [MakerNotes, Minolta, Camera] 136 - Preview Image Start: 13226 [MakerNotes, Minolta, Camera] 137 - Preview Image Length: 26 [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0100 [PrintIM, PrintIM, Printing] 1 - Print IM 0x0001: 0x00160016 [PrintIM, PrintIM, Printing] 2 - Print IM 0x0002: 0x01000000 [PrintIM, PrintIM, Printing] 256 - Print IM 0x0100: 0x01000000 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0x00000000 [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [PrintIM, PrintIM, Printing] 1 - Print IM 0x0001: 0x00160016 [PrintIM, PrintIM, Printing] 2 - Print IM 0x0002: 0x01000000 [PrintIM, PrintIM, Printing] 256 - Print IM 0x0100: 0x01000000 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0x00000000 [IPTC, IPTC, Other] 120 - Caption-Abstract: A new caption/abstract [IPTC, IPTC, Other] 0 - Application Record Version: 4 [Composite, Composite, Image] Aperture - Aperture: 5.6 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 26 bytes) [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 3.9 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/180 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.008 mm [Composite, Composite, Image] DOF - Depth Of Field: 0.19 m (1.91 - 2.10 m) [Composite, Composite, Image] FOV - Field Of View: 12.0 deg (0.42 m) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 42.3 mm (35 mm equivalent: 167.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 42.01 m [Composite, Composite, Image] LightValue - Light Value: 12.5 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Minolta_4.out����������������������������������������������������������������000644 �000765 �000024 �00000021307 12546457276 017232� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Minolta_4_failed.mrw [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 2.5 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:47-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:47-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:47-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: MRW [File, File, Image] FileTypeExtension - File Type Extension: mrw [File, File, Image] MIMEType - MIME Type: image/x-minolta-mrw [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [MakerNotes, MinoltaRaw, Camera] 0 - Firmware ID: 27200001 [MakerNotes, MinoltaRaw, Camera] 8 - Sensor Height: 2456 [MakerNotes, MinoltaRaw, Camera] 10 - Sensor Width: 3272 [MakerNotes, MinoltaRaw, Camera] 12 - Image Height: 2448 [MakerNotes, MinoltaRaw, Camera] 14 - Image Width: 3264 [MakerNotes, MinoltaRaw, Camera] 16 - Raw Depth: 12 [MakerNotes, MinoltaRaw, Camera] 17 - Bit Depth: 12 [MakerNotes, MinoltaRaw, Camera] 18 - Storage Method: Linear [MakerNotes, MinoltaRaw, Camera] 23 - Bayer Pattern: RGGB [MakerNotes, Minolta, Camera] 0 - Maker Note Version: MLT0 [MakerNotes, Minolta, Camera] 1 - Exposure Mode: Manual [MakerNotes, Minolta, Camera] 2 - Flash Mode: Fill flash [MakerNotes, Minolta, Camera] 3 - White Balance: Auto [MakerNotes, Minolta, Camera] 4 - Minolta Image Size: 640x480 [MakerNotes, Minolta, Camera] 5 - Minolta Quality: Raw [MakerNotes, Minolta, Camera] 6 - Drive Mode: Single [MakerNotes, Minolta, Camera] 7 - Metering Mode: Multi-segment [MakerNotes, Minolta, Camera] 8 - ISO: 71 [MakerNotes, Minolta, Camera] 9 - Exposure Time: 1/5 [MakerNotes, Minolta, Camera] 10 - F Number: 2.7 [MakerNotes, Minolta, Camera] 11 - Macro Mode: Off [MakerNotes, Minolta, Camera] 12 - Digital Zoom: Off [MakerNotes, Minolta, Camera] 13 - Exposure Compensation: 0 [MakerNotes, Minolta, Camera] 14 - Bracket Step: 2/3 EV [MakerNotes, Minolta, Camera] 16 - Interval Length: 60 [MakerNotes, Minolta, Camera] 17 - Interval Number: 2 [MakerNotes, Minolta, Camera] 18 - Focal Length: 7.4 mm [MakerNotes, Minolta, Camera] 19 - Focus Distance: inf [MakerNotes, Minolta, Camera] 20 - Flash Fired: No [MakerNotes, Minolta, Time] 21 - Minolta Date: 2004:11:18 [MakerNotes, Minolta, Time] 22 - Minolta Time: 23:14:58 [MakerNotes, Minolta, Camera] 23 - Max Aperture: 2.7 [MakerNotes, Minolta, Camera] 26 - File Number Memory: On [MakerNotes, Minolta, Camera] 27 - Last File Number: 123 [MakerNotes, Minolta, Camera] 28 - Color Balance Red: 1.7109375 [MakerNotes, Minolta, Camera] 29 - Color Balance Green: 1 [MakerNotes, Minolta, Camera] 30 - Color Balance Blue: 1.98828125 [MakerNotes, Minolta, Camera] 31 - Saturation: Normal [MakerNotes, Minolta, Camera] 32 - Contrast: Normal [MakerNotes, Minolta, Camera] 33 - Sharpness: Normal [MakerNotes, Minolta, Camera] 34 - Subject Program: None [MakerNotes, Minolta, Camera] 35 - Flash Exposure Compensation: 0 [MakerNotes, Minolta, Camera] 36 - ISO Setting: 64 [MakerNotes, Minolta, Camera] 37 - Minolta Model ID: DiMAGE A2 or S414 [MakerNotes, Minolta, Camera] 38 - Interval Mode: Still Image [MakerNotes, Minolta, Camera] 39 - Folder Name: Standard Form [MakerNotes, Minolta, Camera] 40 - Color Mode: Natural color [MakerNotes, Minolta, Camera] 41 - Color Filter: 0 [MakerNotes, Minolta, Camera] 42 - BW Filter: 0 [MakerNotes, Minolta, Camera] 43 - Internal Flash: No [MakerNotes, Minolta, Camera] 44 - Brightness: 0.75 [MakerNotes, Minolta, Camera] 45 - Spot Focus Point X: 1632 [MakerNotes, Minolta, Camera] 46 - Spot Focus Point Y: 1224 [MakerNotes, Minolta, Camera] 47 - Wide Focus Zone: Unknown (7) [MakerNotes, Minolta, Camera] 48 - Focus Mode: MF [MakerNotes, Minolta, Camera] 49 - Focus Area: Spot Focus [MakerNotes, Minolta, Camera] 50 - DEC Position: Filter [MakerNotes, Minolta, Camera] 63 - Flash Metering: ADI (Advanced Distance Integration) [MakerNotes, Minolta, Camera] 16 - Minolta 0x0010: ¯¯¯¯.vÿð......#.....[...] [MakerNotes, Minolta, Camera] 24 - Image Stabilization: On [MakerNotes, Minolta, Camera] 32 - Minolta 0x0020: ®®® .ÿ....ü.........`..I[...] [MakerNotes, Minolta, Camera] 64 - Compressed Image Size: 16072064 [MakerNotes, Minolta, Camera] 136 - Preview Image Start: 2082 [MakerNotes, Minolta, Camera] 137 - Preview Image Length: 26 [MakerNotes, Minolta, Camera] 256 - Scene Mode: Standard [MakerNotes, Minolta, Camera] 257 - Color Mode: Natural [MakerNotes, Minolta, Camera] 258 - Minolta Quality: Raw [MakerNotes, Minolta, Camera] 260 - Flash Exposure Compensation: 0 [MakerNotes, MinoltaRaw, Camera] 0 - WB Scale: 2 2 2 2 [MakerNotes, MinoltaRaw, Camera] 4 - WB RGGB Levels: 438 256 256 509 [MakerNotes, MinoltaRaw, Image] 1 - Saturation: 0 [MakerNotes, MinoltaRaw, Image] 2 - Contrast: 0 [MakerNotes, MinoltaRaw, Image] 3 - Sharpness: 0 [MakerNotes, MinoltaRaw, Image] 4 - WB Mode: Auto (0) [MakerNotes, MinoltaRaw, Image] 5 - Program Mode: None [MakerNotes, MinoltaRaw, Image] 6 - ISO Setting: 65 [MakerNotes, MinoltaRaw, Image] 7 - Color Mode: Natural color [MakerNotes, MinoltaRaw, Image] 56 - Color Filter: 0 [MakerNotes, MinoltaRaw, Image] 57 - BW Filter: 0 [MakerNotes, MinoltaRaw, Image] 58 - Zone Matching: ISO Setting Used [MakerNotes, MinoltaRaw, Image] 59 - Hue: 0 [EXIF, IFD0, Image] 256 - Image Width: 3264 [EXIF, IFD0, Image] 257 - Image Height: 2448 [EXIF, IFD0, Image] 259 - Compression: Uncompressed [EXIF, IFD0, Image] 270 - Image Description: KONICA MINOLTA DIGITAL CAMERA [EXIF, IFD0, Camera] 271 - Make: Konica Minolta Camera, Inc. [EXIF, IFD0, Camera] 272 - Camera Model Name: DiMAGE A2 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 305 - Software: DiMAGE A2 Ver.1.12 [EXIF, IFD0, Time] 306 - Modify Date: 2004:11:18 23:14:58 [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/5 [EXIF, ExifIFD, Image] 33437 - F Number: 2.8 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Manual [EXIF, ExifIFD, Image] 34855 - ISO: 64 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2004:11:18 23:14:58 [EXIF, ExifIFD, Time] 36868 - Create Date: 2004:11:18 23:14:58 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 0.7 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.8 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Unknown [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 7.2 mm [EXIF, ExifIFD, Camera] 37396 - Subject Area: 1632 1224 320 384 [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 0 [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 28 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: None [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, ExifIFD, Camera] 41996 - Subject Distance Range: Distant [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [PrintIM, PrintIM, Printing] 1 - Print IM 0x0001: 0x00160016 [PrintIM, PrintIM, Printing] 2 - Print IM 0x0002: 0x01000000 [PrintIM, PrintIM, Printing] 3 - Print IM 0x0003: 0x0000002e [PrintIM, PrintIM, Printing] 256 - Print IM 0x0100: 0x01000000 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0x00000000 [Composite, Composite, Image] Aperture - Aperture: 2.8 [Composite, Composite, Image] ImageSize - Image Size: 3264x2448 [Composite, Composite, Image] Megapixels - Megapixels: 8.0 [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 26 bytes) [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/5 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.988281 [Composite, Composite, Image] LightValue - Light Value: 5.9 [Composite, Composite, Camera] RedBalance - Red Balance: 1.710938 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 3.9 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.008 mm [Composite, Composite, Image] DOF - Depth Of Field: inf (2.40 m - inf) [Composite, Composite, Image] FOV - Field Of View: 65.5 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 7.2 mm (35 mm equivalent: 28.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 2.40 m �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MOI.t������������������������������������������������������������������������000644 �000765 �000024 �00000001267 12443571331 015450� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/MOI.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::MOI; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'MOI'; my $testnum = 1; # test 2: Extract information from a MOI file { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/MOI.moi', '-system:*'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MOI_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000001102 12514720511 016214� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, File, Image] FileType - File Type: MOI [File, File, Image] FileTypeExtension - File Type Extension: moi [File, File, Image] MIMEType - MIME Type: application/unknown [MOI, MOI, Video] 0 - MOI Version: V6 [MOI, MOI, Time] 6 - Date Time Original: 2011:05:15 17:58:48.000 [MOI, MOI, Video] 14 - Duration: 8.16 s [MOI, MOI, Video] 128 - Aspect Ratio: 4:3 PAL [MOI, MOI, Audio] 132 - Audio Codec: AC3 [MOI, MOI, Audio] 134 - Audio Bitrate: 224 kbps [MOI, MOI, Video] 218 - Video Bitrate: 8.5 Mbps ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Motorola.t�������������������������������������������������������������������000644 �000765 �000024 �00000001367 12614667317 016633� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Motorola.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Motorola; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Motorola'; my $testnum = 1; # test 2: Extract information from Motorola.jpg { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Unknown => 1); my $info = $exifTool->ImageInfo('t/images/Motorola.jpg', 'MakerNotes:*'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Motorola_2.out���������������������������������������������������������������000644 �000765 �000024 �00000013343 12614672237 017412� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[MakerNotes, Motorola, Camera] 21760 - Motorola 0x5500: LPH23.116-18 [MakerNotes, Motorola, Camera] 21761 - Motorola 0x5501: NX0A3S0075 [MakerNotes, Motorola, Camera] 21762 - Motorola 0x5502: 96 [MakerNotes, Motorola, Camera] 21763 - Motorola 0x5503: 30 [MakerNotes, Motorola, Camera] 21728 - Motorola 0x54e0: 1 [MakerNotes, Motorola, Camera] 21776 - Motorola 0x5510: 1 [MakerNotes, Motorola, Camera] 21888 - Motorola 0x5580: 15000 [MakerNotes, Motorola, Camera] 21904 - Motorola 0x5590: 30000 [MakerNotes, Motorola, Camera] 21920 - Motorola 0x55a0: 1440 [MakerNotes, Motorola, Camera] 21936 - Motorola 0x55b0: 1080 [MakerNotes, Motorola, Camera] 21952 - Motorola 0x55c0: 30 [MakerNotes, Motorola, Camera] 21968 - Motorola 0x55d0: yuv420sp [MakerNotes, Motorola, Camera] 21744 - Motorola 0x54f0: 92.9883575439453 [MakerNotes, Motorola, Camera] 25600 - Motorola 0x6400: OFF [MakerNotes, Motorola, Camera] 21777 - Motorola 0x5511: 926 [MakerNotes, Motorola, Camera] 25616 - Motorola 0x6410: NO [MakerNotes, Motorola, Camera] 25648 - Motorola 0x6430: 0 [MakerNotes, Motorola, Camera] 25679 - Motorola 0x644f: 0 [MakerNotes, Motorola, Camera] 25792 - Motorola 0x64c0: 2 [MakerNotes, Motorola, Camera] 25793 - Motorola 0x64c1: 1 [MakerNotes, Motorola, Camera] 25794 - Motorola 0x64c2: 1 [MakerNotes, Motorola, Camera] 25795 - Motorola 0x64c3: 0 [MakerNotes, Motorola, Camera] 25796 - Motorola 0x64c4: 583 [MakerNotes, Motorola, Camera] 25797 - Motorola 0x64c5: 912 [MakerNotes, Motorola, Camera] 25904 - Motorola 0x6530: 494 [MakerNotes, Motorola, Camera] 25905 - Motorola 0x6531: 11 [MakerNotes, Motorola, Camera] 25906 - Motorola 0x6532: 0 [MakerNotes, Motorola, Camera] 25907 - Motorola 0x6533: 0 [MakerNotes, Motorola, Camera] 25908 - Motorola 0x6534: 372423 [MakerNotes, Motorola, Camera] 25909 - Motorola 0x6535: 372822 [MakerNotes, Motorola, Camera] 28672 - Motorola 0x7000: 0 [MakerNotes, Motorola, Camera] 28673 - Motorola 0x7001: -479 [MakerNotes, Motorola, Camera] 28674 - Motorola 0x7002: -637 [MakerNotes, Motorola, Camera] 28675 - Motorola 0x7003: 958 [MakerNotes, Motorola, Camera] 28676 - Motorola 0x7004: 1274 [MakerNotes, Motorola, Camera] 28677 - Motorola 0x7005: 0 [MakerNotes, Motorola, Camera] 21778 - Motorola 0x5512: 0 [MakerNotes, Motorola, Camera] 21792 - Motorola 0x5520: 1 [MakerNotes, Motorola, Camera] 21808 - Motorola 0x5530: continuous-picture [MakerNotes, Motorola, Camera] 21824 - Motorola 0x5540: 95 [MakerNotes, Motorola, Camera] 21840 - Motorola 0x5550: 85 [MakerNotes, Motorola, Camera] 21856 - Motorola 0x5560: auto [MakerNotes, Motorola, Camera] 21872 - Motorola 0x5570: auto [MakerNotes, Motorola, Camera] 25856 - Motorola 0x6500: 1 [MakerNotes, Motorola, Camera] 26177 - Motorola 0x6641: 1 [MakerNotes, Motorola, Camera] 21991 - Motorola 0x55e7: 51392 [MakerNotes, Motorola, Camera] 21992 - Motorola 0x55e8: 13376 [MakerNotes, Motorola, Camera] 21989 - Motorola 0x55e5: 47264 [MakerNotes, Motorola, Camera] 21990 - Motorola 0x55e6: 17504 [MakerNotes, Motorola, Camera] 26112 - Motorola 0x6600: 0 [MakerNotes, Motorola, Camera] 26113 - Motorola 0x6601: 1 [MakerNotes, Motorola, Camera] 26114 - Motorola 0x6602: 1 [MakerNotes, Motorola, Camera] 26176 - Motorola 0x6640: 0 [MakerNotes, Motorola, Camera] 26116 - Motorola 0x6604: 0 [MakerNotes, Motorola, Camera] 26206 - Sensor: BACK,IMX230 [MakerNotes, Motorola, Camera] 26118 - Motorola 0x6606: 5000 [MakerNotes, Motorola, Camera] 26130 - Motorola 0x6612: 461 [MakerNotes, Motorola, Camera] 26131 - Motorola 0x6613: 817 [MakerNotes, Motorola, Camera] 26132 - Motorola 0x6614: 817 [MakerNotes, Motorola, Camera] 26133 - Motorola 0x6615: 527 [MakerNotes, Motorola, Camera] 26178 - Motorola 0x6642: 471 [MakerNotes, Motorola, Camera] 26179 - Motorola 0x6643: 818 [MakerNotes, Motorola, Camera] 26180 - Motorola 0x6644: 817 [MakerNotes, Motorola, Camera] 26181 - Motorola 0x6645: 526 [MakerNotes, Motorola, Camera] 26119 - Motorola 0x6607: 3000 [MakerNotes, Motorola, Camera] 26134 - Motorola 0x6616: 660 [MakerNotes, Motorola, Camera] 26135 - Motorola 0x6617: 819 [MakerNotes, Motorola, Camera] 26136 - Motorola 0x6618: 818 [MakerNotes, Motorola, Camera] 26137 - Motorola 0x6619: 374 [MakerNotes, Motorola, Camera] 26182 - Motorola 0x6646: 673 [MakerNotes, Motorola, Camera] 26183 - Motorola 0x6647: 820 [MakerNotes, Motorola, Camera] 26184 - Motorola 0x6648: 820 [MakerNotes, Motorola, Camera] 26185 - Motorola 0x6649: 374 [MakerNotes, Motorola, Camera] 26190 - Motorola 0x664e: 10 [MakerNotes, Motorola, Camera] 26191 - Motorola 0x664f: 64 [MakerNotes, Motorola, Camera] 26192 - Motorola 0x6650: 64 [MakerNotes, Motorola, Camera] 26193 - Motorola 0x6651: 64 [MakerNotes, Motorola, Camera] 26194 - Motorola 0x6652: 64 [MakerNotes, Motorola, Camera] 26196 - Motorola 0x6654: 0 [MakerNotes, Motorola, Camera] 26197 - Motorola 0x6655: 0 [MakerNotes, Motorola, Camera] 26198 - Motorola 0x6656: 0 [MakerNotes, Motorola, Camera] 26205 - Motorola 0x665d: 1 [MakerNotes, Motorola, Camera] 26195 - Motorola 0x6653: AL [MakerNotes, Motorola, Camera] 26368 - Motorola 0x6700: 00000000904c2ca2 [MakerNotes, Motorola, Camera] 26369 - Motorola 0x6701: 94014037 [MakerNotes, Motorola, Camera] 26370 - Motorola 0x6702: 32 [MakerNotes, Motorola, Camera] 26371 - Motorola 0x6703: SO [MakerNotes, Motorola, Camera] 26372 - Motorola 0x6704: GU [MakerNotes, Motorola, Camera] 26373 - Manufacture Date: 03Jun2015 [MakerNotes, Motorola, Camera] 26374 - Motorola 0x6706: 904c2ca2 [MakerNotes, Motorola, Camera] 26375 - Motorola 0x6707: 69 [MakerNotes, Motorola, Camera] 26376 - Motorola 0x6708: 47264 [MakerNotes, Motorola, Camera] 26377 - Motorola 0x6709: 17504 [MakerNotes, Motorola, Camera] 26378 - Motorola 0x670a: 47264 [MakerNotes, Motorola, Camera] 26380 - Motorola 0x670c: 0 [MakerNotes, Motorola, Camera] 25888 - Motorola 0x6520: 1 [MakerNotes, Motorola, Camera] 25889 - Motorola 0x6521: 46 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MP3.t������������������������������������������������������������������������000644 �000765 �000024 �00000001306 11327642463 015422� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/MP3.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::ID3; use Image::ExifTool::MPEG; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'MP3'; my $testnum = 1; # test 2: Extract information from test image { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/MP3.mp3'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MP3_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000004666 12546457276 016235� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: MP3.mp3 [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 395 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:05:13 07:46:22-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:38-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rwxr-xr-x [File, File, Image] FileType - File Type: MP3 [File, File, Image] FileTypeExtension - File Type Extension: mp3 [File, File, Image] MIMEType - MIME Type: audio/mpeg [File, File, Image] ID3Size - ID3 Size: 391 [MPEG, MPEG, Audio] Bit11-12 - MPEG Audio Version: 1 [MPEG, MPEG, Audio] Bit13-14 - Audio Layer: 3 [MPEG, MPEG, Audio] Bit16-19 - Audio Bitrate: 128 kbps [MPEG, MPEG, Audio] Bit20-21 - Sample Rate: 44100 [MPEG, MPEG, Audio] Bit24-25 - Channel Mode: Joint Stereo [MPEG, MPEG, Audio] Bit26 - MS Stereo: On [MPEG, MPEG, Audio] Bit27 - Intensity Stereo: Off [MPEG, MPEG, Audio] Bit28 - Copyright Flag: True [MPEG, MPEG, Audio] Bit29 - Original Media: True [MPEG, MPEG, Audio] Bit30-31 - Emphasis: None [ID3, ID3v2_2, Audio] TRK - Track: 1/5 [ID3, ID3v2_2, Audio] TPA - Part Of Set: 1/2 [ID3, ID3v2_2, Audio] RVA - Relative Volume Adjustment: +18.0% Right, +18.0% Left [ID3, ID3v2_2, Audio] ULT - Lyrics: Do-wap she-bang [ID3, ID3v2_2, Image] PIC-1 - Picture Format: JPG [ID3, ID3v2_2, Image] PIC-2 - Picture Type: Other [ID3, ID3v2_2, Image] PIC-3 - Picture Description: comment [ID3, ID3v2_2, Preview] PIC - Picture: (Binary data 15 bytes) [ID3, ID3v2_2, Audio] TT2 - Title: ExifTool Test [ID3, ID3v2_2, Author] TP1 - Artist: Phil Harvey [ID3, ID3v2_2, Audio] TCM - Composer: A Composer [ID3, ID3v2_2, Audio] TAL - Album: Phil's Greatest Hits [ID3, ID3v2_2, Audio] TT1 - Grouping: This group [ID3, ID3v2_2, Time] TYE - Year: 2005 [ID3, ID3v2_2, Audio] TCO - Genre: Testing [ID3, ID3v2_2, Audio] COM - Comment: My Comments [ID3, ID3v1, Audio] 3 - Title: Title [ID3, ID3v1, Author] 33 - Artist: Artist [ID3, ID3v1, Audio] 63 - Album: Album [ID3, ID3v1, Time] 93 - Year: 2003 [ID3, ID3v1, Audio] 97 - Comment: Comment [ID3, ID3v1, Audio] 127 - Genre: Hip-Hop [Composite, Composite, Time] DateTimeOriginal - Date/Time Original: 2005 [Composite, Composite, Video] Duration - Duration: 0.00 s (approx) ��������������������������������������������������������������������������Image-ExifTool-10.10/t/MWG.t������������������������������������������������������������������������000644 �000765 �000024 �00000005467 12212121475 015456� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/MWG.t". BEGIN { $| = 1; print "1..6\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::MWG; Image::ExifTool::MWG::Load(); $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'MWG'; my $testnum = 1; # test 2: Extract MWG information from test image { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Duplicates => 0); my $info = $exifTool->ImageInfo('t/images/MWG.jpg', 'MWG:*'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # tests 3-4: Write some MWG tags { my $exifTool = new Image::ExifTool; $exifTool->SetNewValue('MWG:DateTimeOriginal' => '2009:10:25 15:13:44.567-04:00'); $exifTool->SetNewValue('MWG:Creator' => 'Creator One'); $exifTool->SetNewValue('MWG:Creator' => 'Creator Two'); $exifTool->SetNewValue('MWG:City' => 'Some city'); my @tags = qw( EXIF:DateTimeOriginal EXIF:SubSecTimeOriginal IPTC:DateCreated IPTC:TimeCreated XMP-photoshop:DateCreated EXIF:Artist IPTC:By-line XMP-dc:Creator IPTC:City XMP-photoshop:City XMP-iptcExt:LocationShownCity ); my $src; foreach $src('MWG.jpg', 'Writer.jpg') { ++$testnum; my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->WriteInfo("t/images/$src", $testfile); my $info = $exifTool->GetInfo('Warning'); if ($$info{Warning}) { warn "\n Warning: $$info{Warning}\n"; print 'not '; } else { $info = $exifTool->ImageInfo($testfile, @tags); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } } print "ok $testnum\n"; } } # test 5: Extract IPTC information from non-standard image while in strict MWG mode { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/ExifTool.jpg', 'IPTC:*', 'Warning'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 6: Copy a tag with MWG feature active { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/MWG.jpg', 'Creator'); my $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; $exifTool->WriteInfo(undef, $testfile); my $info = $exifTool->ImageInfo($testfile, 'Creator'); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MWG_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000001627 11343604615 016243� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Composite, MWG, Location] City - City: RIGHT-XMP-City [Composite, MWG, Author] Copyright - Copyright: RIGHT-XMP-Copyright [Composite, MWG, Location] Country - Country: RIGHT-IPTC-Country [Composite, MWG, Time] CreateDate - Create Date: 2002:02:02 02:22:22+02:00 [Composite, MWG, Author] Creator - Creator: RIGHT1of2-EXIF-Creator, RIGHT2of2-EXIF-Creator [Composite, MWG, Time] DateTimeOriginal - Date/Time Original: 2001:01:01 01:11:11.111 [Composite, MWG, Image] Description - Description: RIGHT-EXIF-Description [Composite, MWG, Image] Keywords - Keywords: RIGHT1of2-XMP-Keywords, RIGHT2of2-XMP-Keywords [Composite, MWG, Location] Location - Location: RIGHT-IPTC-Location [Composite, MWG, Time] ModifyDate - Modify Date: 2003:03:03 03:33:33.333+03:00 [Composite, MWG, Image] Orientation - Orientation: Rotate 90 CW [Composite, MWG, Image] Rating - Rating: 3 [Composite, MWG, Location] State - State: RIGHT-IPTC-State ���������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MWG_3.out��������������������������������������������������������������������000644 �000765 �000024 �00000001246 12173233727 016245� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Author] 315 - Artist: Creator One, Creator Two [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2009:10:25 15:13:44 [EXIF, ExifIFD, Time] 37521 - Sub Sec Time Original: 567 [IPTC, IPTC, Time] 55 - Date Created: 2009:10:25 [IPTC, IPTC, Time] 60 - Time Created: 15:13:44-04:00 [IPTC, IPTC, Author] 80 - By-line: Creator One, Creator Two [IPTC, IPTC, Location] 90 - City: Some city [XMP, XMP-iptcExt, Location] LocationShownCity - Location Shown City: Some city [XMP, XMP-dc, Author] creator - Creator: Creator One, Creator Two [XMP, XMP-photoshop, Location] City - City: Some city [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2009:10:25 15:13:44.567-04:00 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MWG_4.out��������������������������������������������������������������������000644 �000765 �000024 �00000000730 12173233727 016243� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Author] 315 - Artist: Creator One, Creator Two [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2009:10:25 15:13:44 [EXIF, ExifIFD, Time] 37521 - Sub Sec Time Original: 567 [XMP, XMP-iptcExt, Location] LocationShownCity - Location Shown City: Some city [XMP, XMP-dc, Author] creator - Creator: Creator One, Creator Two [XMP, XMP-photoshop, Location] City - City: Some city [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2009:10:25 15:13:44.567-04:00 ����������������������������������������Image-ExifTool-10.10/t/MWG_5.out��������������������������������������������������������������������000644 �000765 �000024 �00000002616 12266237652 016255� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] Warning - Warning: Ignored non-standard XMP at JPEG-APP9-MediaJukebox [ExifTool, ExifTool, ExifTool] Warning - Warning: Ignored non-standard IPTC at JPEG-Trailer-FotoStation-IPTC [ExifTool, ExifTool, ExifTool] Warning - Warning: Ignored non-standard IPTC at JPEG-Trailer-AFCP-IPTC [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 120 - Caption-Abstract: A witty caption [IPTC, IPTC, Author] 122 - Writer-Editor: I wrote it [IPTC, IPTC, Other] 105 - Headline: No headline [IPTC, IPTC, Other] 40 - Special Instructions: What instructions [IPTC, IPTC, Author] 80 - By-line: Phil Harvey [IPTC, IPTC, Author] 85 - By-line Title: My Position [IPTC, IPTC, Author] 110 - Credit: My Credit [IPTC, IPTC, Other] 5 - Object Name: Test IPTC picture [IPTC, IPTC, Time] 55 - Date Created: 2004:02:26 [IPTC, IPTC, Location] 90 - City: Kingston [IPTC, IPTC, Location] 95 - Province-State: Ont [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC, Other] 103 - Original Transmission Reference: What is a transmission reference [IPTC, IPTC, Other] 15 - Category: 1 [IPTC, IPTC, Other] 20 - Supplemental Categories: amazing, image, utilities [IPTC, IPTC, Author] 116 - Copyright Notice: Copyright 2004 Phil Harvey [IPTC, IPTC, Other] 10 - Urgency: 8 (least urgent) [IPTC, IPTC, Author] 115 - Source: I'm the source [IPTC, IPTC, Other] 25 - Keywords: jambalaya ������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MWG_6.out��������������������������������������������������������������������000644 �000765 �000024 �00000000263 12212120723 016227� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-dc, Author] creator - Creator: RIGHT1of2-EXIF-Creator, RIGHT2of2-EXIF-Creator [Composite, MWG, Author] Creator - Creator: RIGHT1of2-EXIF-Creator, RIGHT2of2-EXIF-Creator ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MXF.t������������������������������������������������������������������������000644 �000765 �000024 �00000001253 11503704777 015461� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/MXF.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::MXF; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'MXF'; my $testnum = 1; # test 2: Extract information from an MXF file { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/MXF.mxf'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/MXF_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000014625 12546457276 016264� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: MXF.mxf [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 7.3 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:12:19 19:21:47-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:22-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: MXF [File, File, Image] FileTypeExtension - File Type Extension: mxf [File, File, Image] MIMEType - MIME Type: application/mxf [MXF, MXF, Video] 0 - MXF Version: 1.2 [MXF, MXF, Time] 060e2b34.0101.0102.07020110.02040000 - Container Last Modify Date: 2010:12:20 00:14:40.228 [MXF, MXF, Video] 060e2b34.0101.0102.03010201.05000000 - SDK Version: 1.2 [MXF, MXF, Video] 060e2b34.0101.0102.05200701.02010000 - Application Supplier Name: Phil Harvey [MXF, MXF, Video] 060e2b34.0101.0102.05200701.03010000 - Application Name: ExifTool [MXF, MXF, Video] 060e2b34.0101.0102.05200701.05010000 - Application Version String: Based on MXFLib 1.0.1(16)-Release [MXF, MXF, Video] 060e2b34.0101.0102.05200701.0a000000 - Toolkit Version: 1.0.1.16 released [MXF, MXF, Video] 060e2b34.0101.0102.05200701.06010000 - Application Platform: MXFLib (darwin on x86_64) [MXF, MXF, Time] 060e2b34.0101.0102.07020110.02030000 - Modify Date: 2010:12:20 00:14:40.224 [MXF, MXF, Video] 060e2b34.0101.0102.05200701.02010000 - Application Supplier Name: Phil Harvey [MXF, MXF, Video] 060e2b34.0101.0102.05200701.03010000 - Application Name: ExifTool [MXF, MXF, Video] 060e2b34.0101.0102.05200701.05010000 - Application Version String: Based on MXFLib 1.0.1(16)-Release [MXF, MXF, Video] 060e2b34.0101.0102.05200701.0a000000 - Toolkit Version: 1.0.1.16 released [MXF, MXF, Video] 060e2b34.0101.0102.05200701.06010000 - Application Platform: MXFLib (darwin on x86_64) [MXF, MXF, Time] 060e2b34.0101.0102.07020110.02030000 - Modify Date: 2010:12:20 00:14:40.228 [MXF, MXF, Time] 060e2b34.0101.0102.07020110.01030000 - Create Date: 2010:12:20 00:14:40.224 [MXF, MXF, Time] 060e2b34.0101.0102.07020110.02050000 - Package Last Modify Date: 2010:12:20 00:14:40.224 [MXF, Track1, Video] 060e2b34.0101.0102.01070102.01000000 - Track Name: Timecode Track [MXF, Track1, Video] 060e2b34.0101.0102.01040103.00000000 - Track Number: 0 [MXF, Track1, Video] 060e2b34.0101.0102.07020103.01030000 - Origin: 0 s [MXF, Track1, Video] 060e2b34.0101.0102.05300405.00000000 - Edit Rate: 1 [MXF, Track1, Video] 060e2b34.0101.0102.01070101.00000000 - Track ID: 1 [MXF, Track1, Video] 060e2b34.0101.0102.04070100.00000000 - Component Data Definition: SMPTE 12M Timecode Track [MXF, Track1, Video] 060e2b34.0101.0102.07020201.01030000 - Duration: 0 s [MXF, Track1, Video] 060e2b34.0101.0102.04040101.02060000 - Rounded Timecode Timebase: 1 [MXF, Track1, Video] 060e2b34.0101.0101.04040101.05000000 - Drop Frame: False [MXF, Track1, Video] 060e2b34.0101.0102.07020103.01050000 - Start Timecode: 0 s [MXF, Track1, Video] 060e2b34.0101.0102.07020201.01030000 - Duration: 0 s [MXF, Track1, Video] 060e2b34.0101.0102.04070100.00000000 - Component Data Definition: SMPTE 12M Timecode Track [MXF, Track2, Video] 060e2b34.0101.0102.01070102.01000000 - Track Name: Sound Track [MXF, Track2, Video] 060e2b34.0101.0102.01040103.00000000 - Track Number: 0 [MXF, Track2, Video] 060e2b34.0101.0102.07020103.01030000 - Origin: 0 s [MXF, Track2, Video] 060e2b34.0101.0102.05300405.00000000 - Edit Rate: 1 [MXF, Track2, Video] 060e2b34.0101.0102.01070101.00000000 - Track ID: 2 [MXF, Track2, Video] 060e2b34.0101.0102.04070100.00000000 - Component Data Definition: Sound Essence Track [MXF, Track2, Video] 060e2b34.0101.0102.07020201.01030000 - Duration: 0 s [MXF, MXF, Time] 060e2b34.0101.0102.07020110.01030000 - Create Date: 2010:12:20 00:14:40.224 [MXF, MXF, Time] 060e2b34.0101.0102.07020110.02050000 - Package Last Modify Date: 2010:12:20 00:14:40.224 [MXF, Track1, Video] 060e2b34.0101.0102.01070102.01000000 - Track Name: Timecode Track [MXF, Track1, Video] 060e2b34.0101.0102.01040103.00000000 - Track Number: 0 [MXF, Track1, Video] 060e2b34.0101.0102.07020103.01030000 - Origin: 0 s [MXF, Track1, Video] 060e2b34.0101.0102.05300405.00000000 - Edit Rate: 1 [MXF, Track1, Video] 060e2b34.0101.0102.01070101.00000000 - Track ID: 1 [MXF, Track1, Video] 060e2b34.0101.0102.04070100.00000000 - Component Data Definition: SMPTE 12M Timecode Track [MXF, Track1, Video] 060e2b34.0101.0102.07020201.01030000 - Duration: 0 s [MXF, Track1, Video] 060e2b34.0101.0102.04040101.02060000 - Rounded Timecode Timebase: 1 [MXF, Track1, Video] 060e2b34.0101.0101.04040101.05000000 - Drop Frame: False [MXF, Track1, Video] 060e2b34.0101.0102.07020103.01050000 - Start Timecode: 0 s [MXF, Track1, Video] 060e2b34.0101.0102.07020201.01030000 - Duration: 0 s [MXF, Track1, Video] 060e2b34.0101.0102.04070100.00000000 - Component Data Definition: SMPTE 12M Timecode Track [MXF, Track2, Video] 060e2b34.0101.0102.01070102.01000000 - Track Name: Sound Track [MXF, Track2, Video] 060e2b34.0101.0102.01040103.00000000 - Track Number: 369164801 [MXF, Track2, Video] 060e2b34.0101.0102.07020103.01030000 - Origin: 0 s [MXF, Track2, Video] 060e2b34.0101.0102.05300405.00000000 - Edit Rate: 1 [MXF, Track2, Video] 060e2b34.0101.0102.01070101.00000000 - Track ID: 2 [MXF, Track2, Video] 060e2b34.0101.0102.04070100.00000000 - Component Data Definition: Sound Essence Track [MXF, Track2, Video] 060e2b34.0101.0102.07020201.01030000 - Duration: 0 s [MXF, Track2, Video] 060e2b34.0101.0101.04060101.00000000 - Sample Rate: 1 [MXF, Track2, Audio] 060e2b34.0101.0105.04020301.01010000 - Audio Sample Rate: 7872 [MXF, Track2, Video] 060e2b34.0101.0104.04020301.04000000 - Locked Indicator: False [MXF, Track2, Audio] 060e2b34.0101.0105.04020101.04000000 - Channel Count: 1 [MXF, Track2, Audio] 060e2b34.0101.0104.04020303.04000000 - Bits Per Audio Sample: 8 [MXF, Track2, Video] 060e2b34.0101.0105.04020302.01000000 - Block Align: 1 [MXF, Track2, Audio] 060e2b34.0101.0105.04020303.05000000 - Average Bytes Per Second: 7872 [MXF, Track2, Video] 060e2b34.0101.0105.06010103.05000000 - Linked Track ID: 2 [MXF, Track2, Video] 060e2b34.0101.0101.04060102.00000000 - Essence Length: 0 s [MXF, MXF, Video] 060e2b34.0101.0104.01030404.00000000 - Essence Stream ID: 1 [MXF, MXF, Video] 060e2b34.0101.0102.07020201.01030000 - Duration: 0 s �����������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Nikon.t����������������������������������������������������������������������000644 �000765 �000024 �00000006247 11327642463 016112� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Nikon.t". BEGIN { $| = 1; print "1..9\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Nikon; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Nikon'; my $testnum = 1; # test 2: Extract information from Nikon.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Nikon.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( [ Creator => 'Phil' ], [ ImageAdjustment => 'Yes, lots of it' ], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum); print "ok $testnum\n"; } # test 4: Test writing all D70 image information { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/NikonD70.jpg'); my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->WriteInfo('t/images/Writer.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 5: Extract information from a D2Hs image { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/NikonD2Hs.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 6: Test Nikon decryption { ++$testnum; my $data = pack('N', 0x34a290d3); $data = Image::ExifTool::Nikon::Decrypt(\$data, 0x12345678, 0x00000123); my $expected = 0xcae17d2f; my $got = unpack('N', $data); unless ($got == $expected) { warn "\n Test $testnum (decryption) returned wrong value:\n"; warn sprintf(" Expected 0x%x but got 0x%x\n", $expected, $got); print 'not '; } print "ok $testnum\n"; } # test 7: Test reading NEF image { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Duplicates => 1); my $info = $exifTool->ImageInfo('t/images/Nikon.nef'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 8: Test writing Nikon Capture information in NEF image { ++$testnum; my @writeInfo = ( ['PhotoEffects' => 'Off'], ['Caption-abstract' => 'A new caption'], ['VignetteControlIntensity' => '70'], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/Nikon.nef', 1); print "ok $testnum\n"; } # test 9: Validate Nikon LensID values (internal check) { ++$testnum; my $lensIDs = $Image::ExifTool::Nikon::Composite{LensID}->{PrintConv}; foreach (sort keys %$lensIDs) { next if /^(([0-9A-F]{2} ){7}[0-9A-F]{2}(\.\d+)?|Notes|OTHER)$/; warn "\n Bad LensID '$_' in test $testnum\n"; print 'not '; last; } print "ok $testnum\n"; } # end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Nikon_2.out������������������������������������������������������������������000644 �000765 �000024 �00000011353 12546457276 016703� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Nikon.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1703 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:04 14:02:27-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:48-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: [EXIF, IFD0, Camera] 271 - Make: NIKON [EXIF, IFD0, Camera] 272 - Camera Model Name: E775 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 300 [EXIF, IFD0, Image] 283 - Y Resolution: 300 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: E775v1.3u [EXIF, IFD0, Time] 306 - Modify Date: 2001:08:01 12:57:23 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/213 [EXIF, ExifIFD, Image] 33437 - F Number: 9.4 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:08:01 12:57:23 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:08:01 12:57:23 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 3 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.4 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 8.6 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 1600 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1200 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 300 [EXIF, IFD1, Image] 283 - Y Resolution: 300 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1426 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Nikon, Camera] 1 - Maker Note Version: 1.00 [MakerNotes, Nikon, Image] 2 - ISO: 0 [MakerNotes, Nikon, Camera] 3 - Color Mode: Color [MakerNotes, Nikon, Camera] 4 - Quality: Fine [MakerNotes, Nikon, Camera] 5 - White Balance: Auto [MakerNotes, Nikon, Camera] 6 - Sharpness: Auto [MakerNotes, Nikon, Camera] 7 - Focus Mode: AF-C [MakerNotes, Nikon, Camera] 8 - Flash Setting: [MakerNotes, Nikon, Camera] 15 - ISO Selection: Auto [MakerNotes, Nikon, Camera] 128 - Image Adjustment: Normal [MakerNotes, Nikon, Camera] 130 - Auxiliary Lens: Off [MakerNotes, Nikon, Camera] 133 - Manual Focus Distance: undef [MakerNotes, Nikon, Camera] 134 - Digital Zoom: 1 [MakerNotes, Nikon, Camera] 0 - AF Area Mode: Single Area [MakerNotes, Nikon, Camera] 1 - AF Point: Center [MakerNotes, Nikon, Camera] 2 - AF Points In Focus: (none) [MakerNotes, Nikon, Camera] 143 - Scene Mode: [MakerNotes, Nikon, Camera] 16 - Data Dump: (Binary data 122 bytes) [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0100 [Composite, Composite, Image] Aperture - Aperture: 9.4 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/213 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 8.6 mm [Composite, Composite, Image] LightValue - Light Value: 14.2 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Nikon_3.out������������������������������������������������������������������000644 �000765 �000024 �00000013270 12546457276 016704� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Nikon_3_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 4.5 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:48-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:48-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:48-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: [EXIF, IFD0, Camera] 271 - Make: NIKON [EXIF, IFD0, Camera] 272 - Camera Model Name: E775 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 300 [EXIF, IFD0, Image] 283 - Y Resolution: 300 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: E775v1.3u [EXIF, IFD0, Time] 306 - Modify Date: 2001:08:01 12:57:23 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/213 [EXIF, ExifIFD, Image] 33437 - F Number: 9.4 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:08:01 12:57:23 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:08:01 12:57:23 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 3 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.4 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 8.6 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 1600 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1200 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 300 [EXIF, IFD1, Image] 283 - Y Resolution: 300 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1428 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Nikon, Camera] 1 - Maker Note Version: 1.00 [MakerNotes, Nikon, Image] 2 - ISO: 0 [MakerNotes, Nikon, Camera] 3 - Color Mode: Color [MakerNotes, Nikon, Camera] 4 - Quality: Fine [MakerNotes, Nikon, Camera] 5 - White Balance: Auto [MakerNotes, Nikon, Camera] 6 - Sharpness: Auto [MakerNotes, Nikon, Camera] 7 - Focus Mode: AF-C [MakerNotes, Nikon, Camera] 8 - Flash Setting: [MakerNotes, Nikon, Camera] 10 - Nikon 0x000a: 8.832 [MakerNotes, Nikon, Camera] 15 - ISO Selection: Auto [MakerNotes, Nikon, Camera] 128 - Image Adjustment: Yes, lots of it [MakerNotes, Nikon, Camera] 130 - Auxiliary Lens: Off [MakerNotes, Nikon, Camera] 133 - Manual Focus Distance: undef [MakerNotes, Nikon, Camera] 134 - Digital Zoom: 1 [MakerNotes, Nikon, Camera] 0 - AF Area Mode: Single Area [MakerNotes, Nikon, Camera] 1 - AF Point: Center [MakerNotes, Nikon, Camera] 2 - AF Points In Focus: (none) [MakerNotes, Nikon, Camera] 143 - Scene Mode: [MakerNotes, Nikon, Camera] 16 - Data Dump: (Binary data 122 bytes) [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0100 [PrintIM, PrintIM, Printing] 1 - Print IM 0x0001: 0x00160016 [PrintIM, PrintIM, Printing] 2 - Print IM 0x0002: 0x00000001 [PrintIM, PrintIM, Printing] 3 - Print IM 0x0003: 0x0000005e [PrintIM, PrintIM, Printing] 7 - Print IM 0x0007: 0x00000000 [PrintIM, PrintIM, Printing] 8 - Print IM 0x0008: 0x00000000 [PrintIM, PrintIM, Printing] 9 - Print IM 0x0009: 0x00000000 [PrintIM, PrintIM, Printing] 10 - Print IM 0x000a: 0x00000000 [PrintIM, PrintIM, Printing] 11 - Print IM 0x000b: 0x000000a6 [PrintIM, PrintIM, Printing] 12 - Print IM 0x000c: 0x00000000 [PrintIM, PrintIM, Printing] 13 - Print IM 0x000d: 0x00000000 [PrintIM, PrintIM, Printing] 14 - Print IM 0x000e: 0x000000be [PrintIM, PrintIM, Printing] 256 - Print IM 0x0100: 0x00000005 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0x00000001 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.94 [XMP, XMP-dc, Author] creator - Creator: Phil [Composite, Composite, Image] Aperture - Aperture: 9.4 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/213 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 8.6 mm [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] LightValue - Light Value: 14.2 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Nikon_4.out������������������������������������������������������������������000644 �000765 �000024 �00000024770 12546457276 016714� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Nikon_4_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 6.8 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:45-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:45-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:45-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: NIKON CORPORATION [EXIF, IFD0, Camera] 272 - Camera Model Name: NIKON D70 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 300 [EXIF, IFD0, Image] 283 - Y Resolution: 300 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Ver.1.02 [EXIF, IFD0, Time] 306 - Modify Date: 2005:01:14 08:57:59 [EXIF, IFD0, Camera] 318 - White Point: 0.313 0.329 [EXIF, IFD0, Image] 319 - Primary Chromaticities: 0.64 0.33 0.21 0.71 0.15 0.06 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/60 [EXIF, ExifIFD, Image] 33437 - F Number: 5.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Aperture-priority AE [EXIF, ExifIFD, Image] 34855 - ISO: 200 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2005:01:14 08:57:59 [EXIF, ExifIFD, Time] 36868 - Create Date: 2005:01:14 08:57:59 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 4.4 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37386 - Focal Length: 56.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: curve: fotogenics point and shoot [EXIF, ExifIFD, Time] 37520 - Sub Sec Time: 20 [EXIF, ExifIFD, Time] 37521 - Sub Sec Time Original: 20 [EXIF, ExifIFD, Time] 37522 - Sub Sec Time Digitized: 20 [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: Uncalibrated [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 3008 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 2000 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41730 - CFA Pattern: [Blue,Green][Green,Red] [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Custom [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 1 [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 84 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: None [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: High [EXIF, ExifIFD, Camera] 41994 - Sharpness: Hard [EXIF, ExifIFD, Camera] 41996 - Subject Distance Range: Unknown [EXIF, ExifIFD, Image] 42033 - Serial Number: No= 20025585 [EXIF, ExifIFD, Image] 42240 - Gamma: 2.2 [MakerNotes, Nikon, Camera] 1 - Maker Note Version: 2.10 [MakerNotes, Nikon, Image] 2 - ISO: 200 [MakerNotes, Nikon, Camera] 4 - Quality: Fine [MakerNotes, Nikon, Camera] 5 - White Balance: Auto [MakerNotes, Nikon, Camera] 6 - Sharpness: Med.H [MakerNotes, Nikon, Camera] 7 - Focus Mode: AF-S [MakerNotes, Nikon, Camera] 8 - Flash Setting: Normal [MakerNotes, Nikon, Camera] 9 - Flash Type: Built-in,TTL [MakerNotes, Nikon, Camera] 11 - White Balance Fine Tune: 0 [MakerNotes, Nikon, Camera] 13 - Program Shift: 0 [MakerNotes, Nikon, Camera] 14 - Exposure Difference: -4.9 [MakerNotes, PreviewIFD, Image] 259 - Compression: JPEG (old-style) [MakerNotes, PreviewIFD, Image] 282 - X Resolution: 300 [MakerNotes, PreviewIFD, Image] 283 - Y Resolution: 300 [MakerNotes, PreviewIFD, Image] 296 - Resolution Unit: inches [MakerNotes, PreviewIFD, Image] 513 - Preview Image Start: 2392 [MakerNotes, PreviewIFD, Image] 514 - Preview Image Length: 0 [MakerNotes, PreviewIFD, Image] 531 - Y Cb Cr Positioning: Co-sited [MakerNotes, Nikon, Camera] 18 - Flash Exposure Compensation: -5/3 [MakerNotes, Nikon, Camera] 19 - ISO Setting: 200 [MakerNotes, Nikon, Camera] 22 - Image Boundary: 0 0 3008 2000 [MakerNotes, Nikon, Camera] 23 - External Flash Exposure Comp: 0 [MakerNotes, Nikon, Camera] 24 - Flash Exposure Bracket Value: 0.0 [MakerNotes, Nikon, Camera] 25 - Exposure Bracket Value: 0 [MakerNotes, Nikon, Camera] 129 - Tone Comp: CS [MakerNotes, Nikon, Camera] 131 - Lens Type: G [MakerNotes, Nikon, Camera] 132 - Lens: 18-70mm f/3.5-4.5 [MakerNotes, Nikon, Camera] 135 - Flash Mode: Fired, TTL Mode [MakerNotes, Nikon, Camera] 0 - AF Area Mode: Single Area [MakerNotes, Nikon, Camera] 1 - AF Point: Center [MakerNotes, Nikon, Camera] 2 - AF Points In Focus: Center [MakerNotes, Nikon, Camera] 137 - Shooting Mode: Continuous [MakerNotes, Nikon, Camera] 139 - Lens F Stops: 5.33 [MakerNotes, Nikon, Camera] 141 - Color Hue: Mode2 [MakerNotes, Nikon, Camera] 144 - Light Source: Speedlight [MakerNotes, Nikon, Camera] 0 - Shot Info Version: 0103 [MakerNotes, Nikon, Camera] 146 - Hue Adjustment: 0 [MakerNotes, Nikon, Camera] 149 - Noise Reduction: Off [MakerNotes, Nikon, Camera] 0 - WB RGBG Levels: 597 256 361 256 [MakerNotes, Nikon, Camera] 0 - Lens Data Version: 0101 [MakerNotes, Nikon, Camera] 4 - Exit Pupil Position: 89.0 mm [MakerNotes, Nikon, Camera] 5 - AF Aperture: 4.6 [MakerNotes, Nikon, Camera] 8 - Focus Position: 0x21 [MakerNotes, Nikon, Camera] 9 - Focus Distance: 0.63 m [MakerNotes, Nikon, Camera] 10 - Focal Length: 56.6 mm [MakerNotes, Nikon, Camera] 11 - Lens ID Number: 127 [MakerNotes, Nikon, Camera] 12 - Lens F Stops: 5.33 [MakerNotes, Nikon, Camera] 13 - Min Focal Length: 18.3 mm [MakerNotes, Nikon, Camera] 14 - Max Focal Length: 71.3 mm [MakerNotes, Nikon, Camera] 15 - Max Aperture At Min Focal: 3.6 [MakerNotes, Nikon, Camera] 16 - Max Aperture At Max Focal: 4.5 [MakerNotes, Nikon, Camera] 17 - MCU Version: 132 [MakerNotes, Nikon, Camera] 18 - Effective Max Aperture: 4.5 [MakerNotes, Nikon, Camera] 154 - Sensor Pixel Size: 7.8 x 7.8 um [MakerNotes, Nikon, Camera] 160 - Serial Number: No= 20025585 [MakerNotes, Nikon, Camera] 162 - Image Data Size: 2361498 [MakerNotes, Nikon, Camera] 167 - Shutter Count: 526 [MakerNotes, Nikon, Camera] 0 - Flash Info Version: 0100 [MakerNotes, Nikon, Camera] 4 - Flash Source: None [MakerNotes, Nikon, Camera] 6 - External Flash Firmware: n/a [MakerNotes, Nikon, Camera] 8 - External Flash Flags: (none) [MakerNotes, Nikon, Camera] 9.1 - Flash Commander Mode: Off [MakerNotes, Nikon, Camera] 9.2 - Flash Control Mode: Off [MakerNotes, Nikon, Camera] 10 - Flash Compensation: 0 [MakerNotes, Nikon, Camera] 14 - Flash GN Distance: 0 [MakerNotes, Nikon, Camera] 15 - Flash Group A Control Mode: Off [MakerNotes, Nikon, Camera] 16 - Flash Group B Control Mode: Off [MakerNotes, Nikon, Camera] 17 - Flash Group A Compensation: 0 [MakerNotes, Nikon, Camera] 18 - Flash Group B Compensation: 0 [MakerNotes, Nikon, Camera] 169 - Image Optimization: Custom [MakerNotes, Nikon, Camera] 170 - Saturation: Enhanced [MakerNotes, Nikon, Camera] 171 - Vari Program: [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-aux, Camera] FlashCompensation - Flash Compensation: 0 [XMP, XMP-aux, Camera] Lens - Lens: 18-70mm f/3.5-4.5 [XMP, XMP-exif, Image] ComponentsConfiguration - Components Configuration: Y, Cb, Cr, - [XMP, XMP-exif, Image] CompressedBitsPerPixel - Compressed Bits Per Pixel: 4 [XMP, XMP-exif, Camera] FlashFired - Flash Fired: True [XMP, XMP-exif, Camera] FlashFunction - Flash Function: False [XMP, XMP-exif, Camera] FlashMode - Flash Mode: Auto [XMP, XMP-exif, Camera] FlashRedEyeMode - Flash Red Eye Mode: False [XMP, XMP-exif, Camera] FlashReturn - Flash Return: Return detected [XMP, XMP-exifEX, Image] InteroperabilityIndex - Interoperability Index: R03 - DCF option file (Adobe RGB) [XMP, XMP-tiff, Image] BitsPerSample - Bits Per Sample: 8 [XMP, XMP-tiff, Image] Compression - Compression: JPEG (old-style) [XMP, XMP-tiff, Image] ImageLength - Image Height: 47 [XMP, XMP-tiff, Image] ImageWidth - Image Width: 71 [XMP, XMP-tiff, Image] YCbCrCoefficients - Y Cb Cr Coefficients: 0.299, 0.587, 0.114 [XMP, XMP-tiff, Image] YCbCrPositioning - Y Cb Cr Positioning: Co-sited [XMP, XMP-tiff, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [Composite, Composite, Image] Aperture - Aperture: 5.0 [Composite, Composite, Other] Flash - Flash: Auto, Fired, Return detected [Composite, Composite, Camera] LensID - Lens ID: AF-S DX Zoom-Nikkor 18-70mm f/3.5-4.5G IF-ED [Composite, Composite, Camera] LensSpec - Lens: 18-70mm f/3.5-4.5 G [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/60 [Composite, Composite, Time] SubSecCreateDate - Create Date: 2005:01:14 08:57:59.20 [Composite, Composite, Time] SubSecDateTimeOriginal - Date/Time Original: 2005:01:14 08:57:59.20 [Composite, Composite, Time] SubSecModifyDate - Modify Date: 2005:01:14 08:57:59.20 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.410156 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] LightValue - Light Value: 9.6 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] RedBalance - Red Balance: 2.332031 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.5 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.020 mm [Composite, Composite, Image] DOF - Depth Of Field: 0.02 m (0.62 - 0.64 m) [Composite, Composite, Image] FOV - Field Of View: 22.1 deg (0.25 m) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 56.0 mm (35 mm equivalent: 84.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 31.31 m ��������Image-ExifTool-10.10/t/Nikon_5.out������������������������������������������������������������������000644 �000765 �000024 �00000023463 12546457276 016713� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: NikonD2Hs.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 3.4 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:04 14:02:27-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:38-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: NIKON CORPORATION [EXIF, IFD0, Camera] 272 - Camera Model Name: NIKON D2Hs [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 300 [EXIF, IFD0, Image] 283 - Y Resolution: 300 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Ver.1.00 [EXIF, IFD0, Time] 306 - Modify Date: 2005:03:18 02:55:18 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/125 [EXIF, ExifIFD, Image] 33437 - F Number: 4.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Aperture-priority AE [EXIF, ExifIFD, Image] 34855 - ISO: 800 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2005:03:18 02:55:18 [EXIF, ExifIFD, Time] 36868 - Create Date: 2005:03:18 02:55:18 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 4 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 1.7 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 50.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Time] 37520 - Sub Sec Time: 16 [EXIF, ExifIFD, Time] 37521 - Sub Sec Time Original: 16 [EXIF, ExifIFD, Time] 37522 - Sub Sec Time Digitized: 16 [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2464 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1632 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41730 - CFA Pattern: [Green,Blue][Red,Green] [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Manual [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 1 [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 75 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: Low gain up [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, ExifIFD, Camera] 41996 - Subject Distance Range: Unknown [EXIF, GPS, Location] 0 - GPS Version ID: 2.2.0.0 [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 300 [EXIF, IFD1, Image] 283 - Y Resolution: 300 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 3202 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y Cb Cr Positioning: Co-sited [MakerNotes, Nikon, Camera] 1 - Maker Note Version: 2.10 [MakerNotes, Nikon, Image] 2 - ISO: 800 [MakerNotes, Nikon, Camera] 4 - Quality: Fine [MakerNotes, Nikon, Camera] 5 - White Balance: Preset0 [MakerNotes, Nikon, Camera] 6 - Sharpness: Auto [MakerNotes, Nikon, Camera] 7 - Focus Mode: AF-C [MakerNotes, Nikon, Camera] 8 - Flash Setting: Normal [MakerNotes, Nikon, Camera] 9 - Flash Type: [MakerNotes, Nikon, Camera] 11 - White Balance Fine Tune: 0 [MakerNotes, Nikon, Camera] 13 - Program Shift: 0 [MakerNotes, Nikon, Camera] 14 - Exposure Difference: 0 [MakerNotes, PreviewIFD, Image] 259 - Compression: JPEG (old-style) [MakerNotes, PreviewIFD, Image] 282 - X Resolution: 300 [MakerNotes, PreviewIFD, Image] 283 - Y Resolution: 300 [MakerNotes, PreviewIFD, Image] 296 - Resolution Unit: inches [MakerNotes, PreviewIFD, Image] 513 - Preview Image Start: 3230 [MakerNotes, PreviewIFD, Image] 514 - Preview Image Length: 26 [MakerNotes, PreviewIFD, Image] 531 - Y Cb Cr Positioning: Co-sited [MakerNotes, Nikon, Camera] 19 - ISO Setting: 800 [MakerNotes, Nikon, Camera] 22 - Image Boundary: 0 0 2464 1632 [MakerNotes, Nikon, Camera] 23 - External Flash Exposure Comp: 0 [MakerNotes, Nikon, Camera] 24 - Flash Exposure Bracket Value: 0.0 [MakerNotes, Nikon, Camera] 25 - Exposure Bracket Value: 0 [MakerNotes, Nikon, Camera] 28 - Exposure Tuning: 0 [MakerNotes, Nikon, Camera] 29 - Serial Number: 3001006 [MakerNotes, Nikon, Camera] 30 - Color Space: sRGB [MakerNotes, Nikon, Camera] 129 - Tone Comp: Auto [MakerNotes, Nikon, Camera] 131 - Lens Type: D [MakerNotes, Nikon, Camera] 132 - Lens: 50mm f/1.8 [MakerNotes, Nikon, Camera] 135 - Flash Mode: Did Not Fire [MakerNotes, Nikon, Camera] 0 - AF Area Mode: Single Area [MakerNotes, Nikon, Camera] 1 - AF Point: Center [MakerNotes, Nikon, Camera] 2 - AF Points In Focus: Center [MakerNotes, Nikon, Camera] 137 - Shooting Mode: Delay [MakerNotes, Nikon, Camera] 139 - Lens F Stops: 7.33 [MakerNotes, Nikon, Camera] 141 - Color Hue: Mode3 [MakerNotes, Nikon, Camera] 144 - Light Source: Colored [MakerNotes, Nikon, Camera] 0 - Shot Info Version: 0206 [MakerNotes, Nikon, Camera] 146 - Hue Adjustment: 0 [MakerNotes, Nikon, Camera] 149 - Noise Reduction: Off [MakerNotes, Nikon, Camera] 0 - WB RGGB Levels: 562 256 256 537 [MakerNotes, Nikon, Camera] 0 - Lens Data Version: 0201 [MakerNotes, Nikon, Camera] 4 - Exit Pupil Position: 60.2 mm [MakerNotes, Nikon, Camera] 5 - AF Aperture: 1.9 [MakerNotes, Nikon, Camera] 8 - Focus Position: 0x11 [MakerNotes, Nikon, Camera] 9 - Focus Distance: 0.71 m [MakerNotes, Nikon, Camera] 10 - Focal Length: 50.4 mm [MakerNotes, Nikon, Camera] 11 - Lens ID Number: 118 [MakerNotes, Nikon, Camera] 12 - Lens F Stops: 7.33 [MakerNotes, Nikon, Camera] 13 - Min Focal Length: 50.4 mm [MakerNotes, Nikon, Camera] 14 - Max Focal Length: 50.4 mm [MakerNotes, Nikon, Camera] 15 - Max Aperture At Min Focal: 1.8 [MakerNotes, Nikon, Camera] 16 - Max Aperture At Max Focal: 1.8 [MakerNotes, Nikon, Camera] 17 - MCU Version: 122 [MakerNotes, Nikon, Camera] 18 - Effective Max Aperture: 1.8 [MakerNotes, Nikon, Camera] 154 - Sensor Pixel Size: 9.4 x 9.4 um [MakerNotes, Nikon, Camera] 162 - Image Data Size: 1369271 [MakerNotes, Nikon, Camera] 165 - Image Count: 2 [MakerNotes, Nikon, Camera] 166 - Deleted Image Count: 0 [MakerNotes, Nikon, Camera] 167 - Shutter Count: 2 [MakerNotes, Nikon, Camera] 0 - Flash Info Version: 0100 [MakerNotes, Nikon, Camera] 4 - Flash Source: None [MakerNotes, Nikon, Camera] 6 - External Flash Firmware: n/a [MakerNotes, Nikon, Camera] 8 - External Flash Flags: (none) [MakerNotes, Nikon, Camera] 9.1 - Flash Commander Mode: Off [MakerNotes, Nikon, Camera] 9.2 - Flash Control Mode: Off [MakerNotes, Nikon, Camera] 10 - Flash Compensation: 0 [MakerNotes, Nikon, Camera] 14 - Flash GN Distance: 0 [MakerNotes, Nikon, Camera] 15 - Flash Group A Control Mode: Off [MakerNotes, Nikon, Camera] 16 - Flash Group B Control Mode: Off [MakerNotes, Nikon, Camera] 17 - Flash Group A Compensation: 0 [MakerNotes, Nikon, Camera] 18 - Flash Group B Compensation: 0 [MakerNotes, Nikon, Camera] 170 - Saturation: Normal [MakerNotes, Nikon, Camera] 177 - High ISO Noise Reduction: Normal [Composite, Composite, Image] Aperture - Aperture: 4.0 [Composite, Composite, Camera] LensID - Lens ID: AF Nikkor 50mm f/1.8D [Composite, Composite, Camera] LensSpec - Lens: 50mm f/1.8 D [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 26 bytes) [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/125 [Composite, Composite, Time] SubSecCreateDate - Create Date: 2005:03:18 02:55:18.16 [Composite, Composite, Time] SubSecDateTimeOriginal - Date/Time Original: 2005:03:18 02:55:18.16 [Composite, Composite, Time] SubSecModifyDate - Modify Date: 2005:03:18 02:55:18.16 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] BlueBalance - Blue Balance: 2.097656 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] LightValue - Light Value: 8.0 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] RedBalance - Red Balance: 2.195313 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.5 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.020 mm [Composite, Composite, Image] DOF - Depth Of Field: 0.03 m (0.69 - 0.72 m) [Composite, Composite, Image] FOV - Field Of View: 25.1 deg (0.32 m) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 50.0 mm (35 mm equivalent: 75.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 31.20 m �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Nikon_7.out������������������������������������������������������������������000644 �000765 �000024 �00000037356 12546457276 016723� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Nikon.nef [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 6.0 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2007:01:05 13:00:46-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:33-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: NEF [File, File, Image] FileTypeExtension - File Type Extension: nef [File, File, Image] MIMEType - MIME Type: image/x-nikon-nef [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 4996c61239acf3d1d9fa08228a6f6825 [EXIF, IFD0, Image] 254 - Subfile Type: Reduced-resolution image [EXIF, IFD0, Image] 256 - Image Width: 160 [EXIF, IFD0, Image] 257 - Image Height: 106 [EXIF, IFD0, Image] 258 - Bits Per Sample: 8 8 8 [EXIF, IFD0, Image] 259 - Compression: Uncompressed [EXIF, IFD0, Image] 262 - Photometric Interpretation: RGB [EXIF, IFD0, Camera] 271 - Make: NIKON CORPORATION [EXIF, IFD0, Camera] 272 - Camera Model Name: NIKON D70 [EXIF, IFD0, Image] 273 - Strip Offsets: 6170 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 277 - Samples Per Pixel: 3 [EXIF, IFD0, Image] 278 - Rows Per Strip: 106 [EXIF, IFD0, Image] 279 - Strip Byte Counts: 18 [EXIF, IFD0, Image] 282 - X Resolution: 300 [EXIF, IFD0, Image] 283 - Y Resolution: 300 [EXIF, IFD0, Image] 284 - Planar Configuration: Chunky [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Nikon Capture Editor 4.3.1 W [EXIF, IFD0, Time] 306 - Modify Date: 2005:08:25 13:09:05 [EXIF, SubIFD, Image] 254 - Subfile Type: Reduced-resolution image [EXIF, SubIFD, Image] 259 - Compression: JPEG (old-style) [EXIF, SubIFD, Image] 274 - Orientation: Horizontal (normal) [EXIF, SubIFD, Image] 282 - X Resolution: 1 [EXIF, SubIFD, Image] 283 - Y Resolution: 0 [EXIF, SubIFD, Image] 296 - Resolution Unit: inches [EXIF, SubIFD, Image] 513 - Jpg From Raw Start: 1120 [EXIF, SubIFD, Image] 514 - Jpg From Raw Length: 29 [EXIF, SubIFD1, Image] 254 - Subfile Type: Full-resolution Image [EXIF, SubIFD1, Image] 256 - Image Width: 3040 [EXIF, SubIFD1, Image] 257 - Image Height: 2014 [EXIF, SubIFD1, Image] 258 - Bits Per Sample: 12 [EXIF, SubIFD1, Image] 259 - Compression: Nikon NEF Compressed [EXIF, SubIFD1, Image] 262 - Photometric Interpretation: Color Filter Array [EXIF, SubIFD1, Image] 273 - Strip Offsets: 1376 [EXIF, SubIFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, SubIFD1, Image] 277 - Samples Per Pixel: 1 [EXIF, SubIFD1, Image] 278 - Rows Per Strip: 2014 [EXIF, SubIFD1, Image] 279 - Strip Byte Counts: 18 [EXIF, SubIFD1, Image] 282 - X Resolution: 300 [EXIF, SubIFD1, Image] 283 - Y Resolution: 300 [EXIF, SubIFD1, Image] 284 - Planar Configuration: Chunky [EXIF, SubIFD1, Image] 296 - Resolution Unit: inches [EXIF, SubIFD1, Image] 33421 - CFA Repeat Pattern Dim: 2 2 [EXIF, SubIFD1, Image] 33422 - CFA Pattern 2: 2 1 1 0 [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/20 [EXIF, ExifIFD, Image] 33437 - F Number: 3.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Aperture-priority AE [EXIF, ExifIFD, Image] 34855 - ISO: 200 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2004:06:09 16:02:35 [EXIF, ExifIFD, Time] 36868 - Create Date: 2004:06:09 16:02:35 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 18.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Time] 37520 - Sub Sec Time: 00 [EXIF, ExifIFD, Time] 37521 - Sub Sec Time Original: 00 [EXIF, ExifIFD, Time] 37522 - Sub Sec Time Digitized: 00 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41730 - CFA Pattern: [Blue,Green][Green,Red] [EXIF, IFD0, Time] 36867 - Date/Time Original: 2004:06:09 16:02:35 [EXIF, IFD0, Image] 37398 - TIFF-EP Standard ID: 1 0 0 0 [IPTC, IPTC, Other] 0 - Application Record Version: 4 [IPTC, IPTC, Other] 120 - Caption-Abstract: A caption [IPTC, IPTC, Other] 40 - Special Instructions: none [IPTC, IPTC, Location] 90 - City: Kingston [IPTC, IPTC, Location] 95 - Province-State: Ontario [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC2, Other] 0 - Application Record Version: 4 [IPTC, IPTC2, Other] 120 - Caption-Abstract: A caption [IPTC, IPTC2, Other] 40 - Special Instructions: none [IPTC, IPTC2, Location] 90 - City: Kingston [IPTC, IPTC2, Location] 95 - Province-State: Ontario [IPTC, IPTC2, Location] 101 - Country-Primary Location Name: Canada [MakerNotes, Nikon, Camera] 1 - Maker Note Version: 2.10 [MakerNotes, Nikon, Image] 2 - ISO: 200 [MakerNotes, Nikon, Camera] 4 - Quality: RAW [MakerNotes, Nikon, Camera] 5 - White Balance: Auto [MakerNotes, Nikon, Camera] 6 - Sharpness: None [MakerNotes, Nikon, Camera] 7 - Focus Mode: AF-S [MakerNotes, Nikon, Camera] 11 - White Balance Fine Tune: 0 [MakerNotes, Nikon, Camera] 13 - Program Shift: 0 [MakerNotes, Nikon, Camera] 14 - Exposure Difference: 0 [MakerNotes, PreviewIFD, Image] 259 - Compression: JPEG (old-style) [MakerNotes, PreviewIFD, Image] 282 - X Resolution: 72 [MakerNotes, PreviewIFD, Image] 283 - Y Resolution: 72 [MakerNotes, PreviewIFD, Image] 296 - Resolution Unit: inches [MakerNotes, PreviewIFD, Image] 513 - Preview Image Start: 5958 [MakerNotes, PreviewIFD, Image] 514 - Preview Image Length: 26 [MakerNotes, Nikon, Camera] 19 - ISO Setting: 200 [MakerNotes, Nikon, Camera] 25 - Exposure Bracket Value: 0 [MakerNotes, Nikon, Camera] 129 - Tone Comp: CS [MakerNotes, Nikon, Camera] 131 - Lens Type: G [MakerNotes, Nikon, Camera] 132 - Lens: 18-70mm f/3.5-4.5 [MakerNotes, Nikon, Camera] 135 - Flash Mode: Did Not Fire [MakerNotes, Nikon, Camera] 0 - AF Area Mode: Single Area [MakerNotes, Nikon, Camera] 1 - AF Point: Center [MakerNotes, Nikon, Camera] 2 - AF Points In Focus: Center [MakerNotes, Nikon, Camera] 137 - Shooting Mode: Single-Frame [MakerNotes, Nikon, Camera] 139 - Lens F Stops: 5.33 [MakerNotes, Nikon, Camera] 140 - Contrast Curve: (Binary data 17 bytes) [MakerNotes, Nikon, Camera] 141 - Color Hue: Mode2 [MakerNotes, Nikon, Camera] 144 - Light Source: Natural [MakerNotes, Nikon, Camera] 146 - Hue Adjustment: 0 [MakerNotes, Nikon, Camera] 147 - NEF Compression: Lossy (type 1) [MakerNotes, Nikon, Camera] 149 - Noise Reduction: Off [MakerNotes, Nikon, Camera] 150 - NEF Linearization Table: (Binary data 17 bytes) [MakerNotes, Nikon, Camera] 0 - WB RGBG Levels: 478 265 493 265 [MakerNotes, Nikon, Camera] 0 - Lens Data Version: 0101 [MakerNotes, Nikon, Camera] 4 - Exit Pupil Position: 102.4 mm [MakerNotes, Nikon, Camera] 5 - AF Aperture: 3.6 [MakerNotes, Nikon, Camera] 8 - Focus Position: 0xf1 [MakerNotes, Nikon, Camera] 9 - Focus Distance: 2.37 m [MakerNotes, Nikon, Camera] 10 - Focal Length: 18.3 mm [MakerNotes, Nikon, Camera] 11 - Lens ID Number: 127 [MakerNotes, Nikon, Camera] 12 - Lens F Stops: 5.33 [MakerNotes, Nikon, Camera] 13 - Min Focal Length: 18.3 mm [MakerNotes, Nikon, Camera] 14 - Max Focal Length: 71.3 mm [MakerNotes, Nikon, Camera] 15 - Max Aperture At Min Focal: 3.6 [MakerNotes, Nikon, Camera] 16 - Max Aperture At Max Focal: 4.5 [MakerNotes, Nikon, Camera] 17 - MCU Version: 132 [MakerNotes, Nikon, Camera] 18 - Effective Max Aperture: 3.6 [MakerNotes, Nikon, Camera] 153 - Raw Image Center: 1520 1008 [MakerNotes, Nikon, Camera] 154 - Sensor Pixel Size: 7.8 x 7.8 um [MakerNotes, Nikon, Camera] 160 - Serial Number: 12345678 [MakerNotes, Nikon, Camera] 167 - Shutter Count: 3619 [MakerNotes, Nikon, Camera] 169 - Image Optimization: Custom [MakerNotes, Nikon, Camera] 170 - Saturation: Normal [MakerNotes, Nikon, Camera] 171 - Vari Program: [MakerNotes, NikonCapture, Image] 1990472192 - Unsharp Mask: Off [MakerNotes, NikonCapture, Image] 0 - Unsharp Count: 1 [MakerNotes, NikonCapture, Image] 19 - Unsharp 1 Color: RGB [MakerNotes, NikonCapture, Image] 23 - Unsharp 1 Intensity: 100 [MakerNotes, NikonCapture, Image] 25 - Unsharp 1 Halo Width: 4 [MakerNotes, NikonCapture, Image] 27 - Unsharp 1 Threshold: 6 [MakerNotes, NikonCapture, Image] 1990472193 - Curves: On [MakerNotes, NikonCapture, Image] 1990472194 - Color Balance Adj: On [MakerNotes, NikonCapture, Image] 9103454 - LCH Editor: On [MakerNotes, NikonCapture, Image] 1990472198 - Flip Horizontal: No [MakerNotes, NikonCapture, Image] 1990472199 - Rotation: 0 [MakerNotes, NikonCapture, Image] 4265884229 - Image Dust Off: On [MakerNotes, NikonCapture, Image] 30 - Crop Left: 0 [MakerNotes, NikonCapture, Image] 38 - Crop Top: 0 [MakerNotes, NikonCapture, Image] 46 - Crop Right: 3008 [MakerNotes, NikonCapture, Image] 54 - Crop Bottom: 2000 [MakerNotes, NikonCapture, Image] 142 - Crop Output Width Inches: 10.0266666666667 [MakerNotes, NikonCapture, Image] 150 - Crop Output Height Inches: 6.66666666666667 [MakerNotes, NikonCapture, Image] 158 - Crop Scaled Resolution: 300 [MakerNotes, NikonCapture, Image] 174 - Crop Source Resolution: 300 [MakerNotes, NikonCapture, Image] 182 - Crop Output Resolution: 300 [MakerNotes, NikonCapture, Image] 190 - Crop Output Scale: 1 [MakerNotes, NikonCapture, Image] 198 - Crop Output Width: 3008 [MakerNotes, NikonCapture, Image] 206 - Crop Output Height: 2000 [MakerNotes, NikonCapture, Image] 214 - Crop Output Pixels: 6016000 [MakerNotes, NikonCapture, Image] 1990472195 - Advanced Raw: On [MakerNotes, NikonCapture, Image] 0 - Exposure Adj: 0.3 [MakerNotes, NikonCapture, Image] 18 - Exposure Adj 2: 0.3000 [MakerNotes, NikonCapture, Image] 1990472196 - White Balance Adj: On [MakerNotes, NikonCapture, Image] 0 - WB Adj Red Balance: 2.015162472363 [MakerNotes, NikonCapture, Image] 8 - WB Adj Blue Balance: 1.6951313394899 [MakerNotes, NikonCapture, Image] 16 - WB Adj Mode: Use Temperature [MakerNotes, NikonCapture, Image] 20 - WB Adj Lighting: High Color Rendering Fluorescent (5000K) [MakerNotes, NikonCapture, Image] 24 - WB Adj Temperature: 5000 [MakerNotes, NikonCapture, Image] 1966984128 - Noise Reduction: On [MakerNotes, NikonCapture, Image] 4 - Edge Noise Reduction: Off [MakerNotes, NikonCapture, Image] 5 - Color Moire Reduction Mode: Off [MakerNotes, NikonCapture, Image] 9 - Noise Reduction Intensity: 0 [MakerNotes, NikonCapture, Image] 13 - Noise Reduction Sharpness: 5 [MakerNotes, NikonCapture, Image] 17 - Noise Reduction Method: Faster [MakerNotes, NikonCapture, Image] 1594785059 - Color Booster: Off [MakerNotes, NikonCapture, Image] 0 - Color Boost Type: People [MakerNotes, NikonCapture, Image] 1 - Color Boost Level: 10 [MakerNotes, NikonCapture, Image] 1990472197 - Vignette Control: Off [MakerNotes, NikonCapture, Image] 2892748224 - Vignette Control Intensity: 80 [MakerNotes, NikonCapture, Image] 4264076367 - Auto Red Eye: On [MakerNotes, NikonCapture, Image] 0 - Red Eye Correction: Off [MakerNotes, NikonCapture, Image] 2875116126 - Photo Effects: On [MakerNotes, NikonCapture, Image] 0 - Brightness Adj: 0 [MakerNotes, NikonCapture, Image] 8 - Enhance Dark Tones: Off [MakerNotes, NikonCapture, Image] 0 - Photo Effects Type: None [MakerNotes, NikonCapture, Image] 4 - Photo Effects Red: 0 [MakerNotes, NikonCapture, Image] 6 - Photo Effects Green: 0 [MakerNotes, NikonCapture, Image] 8 - Photo Effects Blue: 0 [MakerNotes, NikonCapture, Image] 801145905 - Straighten Angle: 0 [MakerNotes, NikonCapture, Image] 1785607862 - D-Lighting HQ Selected: No [MakerNotes, NikonCapture, Image] 210313803 - Color Aberration Control: Off [MakerNotes, NikonCapture, Image] 3461698730 - D-Lighting HS: Off [MakerNotes, NikonCapture, Image] 0 - D-Lighting HS Adjustment: 25 [MakerNotes, NikonCapture, Image] 1 - D-Lighting HS Color Boost: 60 [MakerNotes, NikonCapture, Image] 561376120 - D-Lighting HQ: Off [MakerNotes, NikonCapture, Image] 0 - D-Lighting HQ Shadow: 50 [MakerNotes, NikonCapture, Image] 1 - D-Lighting HQ Highlight: 1 [MakerNotes, NikonCapture, Image] 2 - D-Lighting HQ Color Boost: 60 [MakerNotes, Nikon, Camera] 1 - IFD0 Offset: 8 [MakerNotes, Nikon, Camera] 2 - Preview IFD Offset: 11362 [MakerNotes, Nikon, Camera] 3 - Sub IFD Offset: 1440 [MakerNotes, NikonScan, Image] 2 - Film Type: POSITIVE [MakerNotes, NikonScan, Image] 65 - Bit Depth: 8 [MakerNotes, NikonScan, Image] 80 - Master Gain: 0.00 [MakerNotes, NikonScan, Image] 81 - Color Gain: 0.00 0.00 0.00 [MakerNotes, NikonScan, Image] 96 - Scan Image Enhancer: Off [MakerNotes, NikonScan, Image] 256 - Digital ICE: Normal [ICC_Profile, ICC-header, Image] 4 - Profile CMM Type: NKON [ICC_Profile, ICC-header, Image] 8 - Profile Version: 2.2.0 [ICC_Profile, ICC-header, Image] 12 - Profile Class: Display Device Profile [ICC_Profile, ICC-header, Image] 16 - Color Space Data: RGB [ICC_Profile, ICC-header, Image] 20 - Profile Connection Space: XYZ [ICC_Profile, ICC-header, Time] 24 - Profile Date Time: 1999:12:07 18:59:22 [ICC_Profile, ICC-header, Image] 36 - Profile File Signature: acsp [ICC_Profile, ICC-header, Image] 40 - Primary Platform: Apple Computer Inc. [ICC_Profile, ICC-header, Image] 44 - CMM Flags: Not Embedded, Independent [ICC_Profile, ICC-header, Image] 48 - Device Manufacturer: none [ICC_Profile, ICC-header, Image] 52 - Device Model: [ICC_Profile, ICC-header, Image] 56 - Device Attributes: Reflective, Glossy, Positive, Color [ICC_Profile, ICC-header, Image] 64 - Rendering Intent: Perceptual [ICC_Profile, ICC-header, Image] 68 - Connection Space Illuminant: 0.9642 1 0.82491 [ICC_Profile, ICC-header, Image] 80 - Profile Creator: [ICC_Profile, ICC-header, Image] 84 - Profile ID: 0 [ICC_Profile, ICC_Profile, Image] desc - Profile Description: Nikon Adobe RGB 4.0.0.3000 [ICC_Profile, ICC_Profile, Image] rXYZ - Red Matrix Column: 0.60976 0.31113 0.01947 [ICC_Profile, ICC_Profile, Image] gXYZ - Green Matrix Column: 0.20525 0.62566 0.06087 [ICC_Profile, ICC_Profile, Image] bXYZ - Blue Matrix Column: 0.1492 0.06322 0.74463 [ICC_Profile, ICC_Profile, Image] rTRC - Red Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] gTRC - Green Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] bTRC - Blue Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] wtpt - Media White Point: 0.9505 1 1.0891 [ICC_Profile, ICC_Profile, Image] cprt - Profile Copyright: Nikon Inc. & Nikon Corporation 2001 [Composite, Composite, Image] Aperture - Aperture: 3.5 [Composite, Composite, Image] CFAPattern - CFA Pattern: [Blue,Green][Green,Red] [Composite, Composite, Preview] JpgFromRaw - Jpg From Raw: (Binary data 29 bytes) [Composite, Composite, Camera] LensID - Lens ID: AF-S DX Zoom-Nikkor 18-70mm f/3.5-4.5G IF-ED [Composite, Composite, Camera] LensSpec - Lens: 18-70mm f/3.5-4.5 G [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 26 bytes) [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/20 [Composite, Composite, Time] SubSecCreateDate - Create Date: 2004:06:09 16:02:35.00 [Composite, Composite, Time] SubSecDateTimeOriginal - Date/Time Original: 2004:06:09 16:02:35.00 [Composite, Composite, Time] SubSecModifyDate - Modify Date: 2005:08:25 13:09:05.00 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.860377 [Composite, Composite, Image] ImageSize - Image Size: 3040x2014 [Composite, Composite, Image] LightValue - Light Value: 6.9 [Composite, Composite, Image] Megapixels - Megapixels: 6.1 [Composite, Composite, Camera] RedBalance - Red Balance: 1.803774 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 18.0 mm ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Nikon_8.out������������������������������������������������������������������000644 �000765 �000024 �00000000405 10334412455 016664� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[IPTC, IPTC, Other] 120 - Caption-Abstract: A new caption [IPTC, IPTC2, Other] 120 - Caption-Abstract: A new caption [MakerNotes, NikonCapture, Image] 2892748224 - Vignette Control Intensity: 70 [MakerNotes, NikonCapture, Image] 2875116126 - Photo Effects: Off �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Olympus.t��������������������������������������������������������������������000644 �000765 �000024 �00000004742 12542533620 016474� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Olympus.t". BEGIN { $| = 1; print "1..8\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Olympus; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Olympus'; my $testnum = 1; # test 2: Extract information from Olympus.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Olympus.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( [Software => 'ExifTool', Group => 'XMP'], [Macro => 'On'], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum); print "ok $testnum\n"; } # test 4: Extract information from OlympusE1.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/OlympusE1.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 5: Rewrite Olympus E1 image { ++$testnum; my @writeInfo = ( [LensSerialNumber => '012345678'], [CoringFilter => 0], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/OlympusE1.jpg'); print "ok $testnum\n"; } # test 6: Test reading Olympus type 2 maker notes { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Olympus2.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 7: Rewrite type 2 maker notes { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->SetNewValue(FocusDistance => 100); $exifTool->SetNewValue(Macro => 'On'); $exifTool->WriteInfo('t/images/Olympus2.jpg', $testfile); if (testVerbose($testname, $testnum, $testfile, 2)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 8: Extract information from Olympus.dss { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Olympus.dss'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ������������������������������Image-ExifTool-10.10/t/Olympus_2.out����������������������������������������������������������������000644 �000765 �000024 �00000011545 12546457276 017300� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Olympus.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1573 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:04 14:02:27-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:34-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: OLYMPUS DIGITAL CAMERA [EXIF, IFD0, Camera] 271 - Make: OLYMPUS OPTICAL CO.,LTD [EXIF, IFD0, Camera] 272 - Camera Model Name: C2000Z [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: v951p-80 [EXIF, IFD0, Time] 306 - Modify Date: 1999:12:06 16:38:40 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/30 [EXIF, ExifIFD, Image] 33437 - F Number: 2.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 1999:12:06 16:38:40 [EXIF, ExifIFD, Time] 36868 - Create Date: 1999:12:06 16:38:40 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 1 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.8 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 7.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 640 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 480 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1296 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Olympus, Camera] 512 - Special Mode: Normal, Sequence: 0, Panorama: (none) [MakerNotes, Olympus, Camera] 513 - Quality: SQ (Low) [MakerNotes, Olympus, Camera] 514 - Macro: Off [MakerNotes, Olympus, Camera] 515 - Black And White Mode: Off [MakerNotes, Olympus, Camera] 516 - Digital Zoom: 0.0 [MakerNotes, Olympus, Camera] 517 - Focal Plane Diagonal: 7.8 mm [MakerNotes, Olympus, Camera] 518 - Lens Distortion Params: -215 -388 -418 -185 -310 -314 [MakerNotes, Olympus, Camera] 519 - Camera Type: C2000Z [MakerNotes, Olympus, Image] Resolution - Resolution: 1 [MakerNotes, Olympus, Camera] Type - Camera Type: C2000Z [MakerNotes, Olympus, Camera] 521 - Camera ID: OLYMPUS DIGITAL CAMERA [MakerNotes, Olympus, Camera] 3840 - Data Dump: (Binary data 186 bytes) [Composite, Composite, Image] Aperture - Aperture: 2.0 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 5.5 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/30 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.005 mm [Composite, Composite, Image] FOV - Field Of View: 49.7 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 7.0 mm (35 mm equivalent: 38.8 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 4.52 m [Composite, Composite, Image] LightValue - Light Value: 6.9 �����������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Olympus_3.out����������������������������������������������������������������000644 �000765 �000024 �00000011730 12546457276 017275� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Olympus_3_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 4.3 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:49-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:49-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:49-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: OLYMPUS DIGITAL CAMERA [EXIF, IFD0, Camera] 271 - Make: OLYMPUS OPTICAL CO.,LTD [EXIF, IFD0, Camera] 272 - Camera Model Name: C2000Z [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: v951p-80 [EXIF, IFD0, Time] 306 - Modify Date: 1999:12:06 16:38:40 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/30 [EXIF, ExifIFD, Image] 33437 - F Number: 2.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 1999:12:06 16:38:40 [EXIF, ExifIFD, Time] 36868 - Create Date: 1999:12:06 16:38:40 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 1 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.8 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 7.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 640 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 480 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1296 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Olympus, Camera] 512 - Special Mode: Normal, Sequence: 0, Panorama: (none) [MakerNotes, Olympus, Camera] 513 - Quality: SQ (Low) [MakerNotes, Olympus, Camera] 514 - Macro: On [MakerNotes, Olympus, Camera] 515 - Black And White Mode: Off [MakerNotes, Olympus, Camera] 516 - Digital Zoom: 0.0 [MakerNotes, Olympus, Camera] 517 - Focal Plane Diagonal: 7.8 mm [MakerNotes, Olympus, Camera] 518 - Lens Distortion Params: -215 -388 -418 -185 -310 -314 [MakerNotes, Olympus, Camera] 519 - Camera Type: C2000Z [MakerNotes, Olympus, Image] Resolution - Resolution: 1 [MakerNotes, Olympus, Camera] Type - Camera Type: C2000Z [MakerNotes, Olympus, Camera] 521 - Camera ID: OLYMPUS DIGITAL CAMERA [MakerNotes, Olympus, Camera] 3840 - Data Dump: (Binary data 186 bytes) [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.94 [XMP, XMP-tiff, Image] Software - Software: ExifTool [Composite, Composite, Image] Aperture - Aperture: 2.0 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 5.5 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/30 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.005 mm [Composite, Composite, Image] FOV - Field Of View: 49.7 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 7.0 mm (35 mm equivalent: 38.8 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 4.52 m [Composite, Composite, Image] LightValue - Light Value: 6.9 ����������������������������������������Image-ExifTool-10.10/t/Olympus_4.out����������������������������������������������������������������000644 �000765 �000024 �00000027312 12636254522 017266� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.08 [File, System, Image] FileName - File Name: OlympusE1.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 7.2 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:04 14:02:27-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:12:22 09:05:48-05:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:12:17 10:56:02-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: OLYMPUS DIGITAL CAMERA [EXIF, IFD0, Camera] 271 - Make: OLYMPUS CORPORATION [EXIF, IFD0, Camera] 272 - Camera Model Name: E-1 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 314 [EXIF, IFD0, Image] 283 - Y Resolution: 314 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Version 1.3 [EXIF, IFD0, Time] 306 - Modify Date: 2005:01:05 10:53:41 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/100 [EXIF, ExifIFD, Image] 33437 - F Number: 4.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 400 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2005:01:05 10:53:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2005:01:05 10:53:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.8 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 20.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2560 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1920 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 0 [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: High gain up [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Hard [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 7088 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Olympus, Camera] 512 - Special Mode: Fast, Sequence: 2, Panorama: (none) [MakerNotes, Olympus, Camera] 513 - Quality: SHQ (Fine) [MakerNotes, Olympus, Camera] 514 - Macro: Off [MakerNotes, Olympus, Camera] 515 - Black And White Mode: Off [MakerNotes, Olympus, Camera] 516 - Digital Zoom: 0.0 [MakerNotes, Olympus, Camera] 517 - Focal Plane Diagonal: 21.6 mm [MakerNotes, Olympus, Camera] 518 - Lens Distortion Params: 0 0 0 0 0 0 [MakerNotes, Olympus, Camera] 519 - Camera Type: E-1 [MakerNotes, Olympus, Camera] 521 - Camera ID: OLYMPUS DIGITAL CAMERA [MakerNotes, Olympus, Camera] 4111 - Sharpness: Hard [MakerNotes, Olympus, Camera] 4113 - Color Matrix: 356 -34 -66 -22 308 -30 6 -126 376 [MakerNotes, Olympus, Camera] 4114 - Black Level: 69 69 69 68 [MakerNotes, Olympus, Camera] 4119 - Red Balance: 1.609375 [MakerNotes, Olympus, Camera] 4120 - Blue Balance: 1.1328125 [MakerNotes, Olympus, Camera] 4137 - Contrast: Normal [MakerNotes, Olympus, Camera] 4138 - Sharpness Factor: 576 [MakerNotes, Olympus, Camera] 4139 - Color Control: 96 4096 2944 4096 16 128 [MakerNotes, Olympus, Camera] 4140 - Valid Bits: 12 0 [MakerNotes, Olympus, Camera] 4141 - Coring Filter: 1536 [MakerNotes, Olympus, Camera] 4142 - Olympus Image Width: 2560 [MakerNotes, Olympus, Camera] 4143 - Olympus Image Height: 1920 [MakerNotes, Olympus, Camera] 0 - Equipment Version: 010 [MakerNotes, Olympus, Camera] 256 - Camera Type 2: E-1 [MakerNotes, Olympus, Camera] 257 - Serial Number: 143008611 [MakerNotes, Olympus, Camera] 258 - Internal Serial Number: 4001310004375102 [MakerNotes, Olympus, Camera] 259 - Focal Plane Diagonal: 21.6 mm [MakerNotes, Olympus, Camera] 260 - Body Firmware Version: 1.300 [MakerNotes, Olympus, Camera] 513 - Lens Type: Olympus Zuiko Digital 14-54mm F2.8-3.5 [MakerNotes, Olympus, Camera] 514 - Lens Serial Number: 050105886 [MakerNotes, Olympus, Camera] 516 - Lens Firmware Version: 1.100 [MakerNotes, Olympus, Camera] 518 - Max Aperture At Max Focal: 3.5 [MakerNotes, Olympus, Camera] 519 - Min Focal Length: 14 [MakerNotes, Olympus, Camera] 520 - Max Focal Length: 54 [MakerNotes, Olympus, Camera] 522 - Max Aperture: 2.8 [MakerNotes, Olympus, Camera] 523 - Lens Properties: 0xc043 [MakerNotes, Olympus, Camera] 769 - Extender: None [MakerNotes, Olympus, Camera] 770 - Extender Serial Number: [MakerNotes, Olympus, Camera] 772 - Extender Firmware Version: 0 [MakerNotes, Olympus, Camera] 4096 - Flash Type: None [MakerNotes, Olympus, Camera] 4097 - Flash Model: None [MakerNotes, Olympus, Camera] 4098 - Flash Firmware Version: 0 [MakerNotes, Olympus, Camera] 4099 - Flash Serial Number: [MakerNotes, Olympus, Camera] 0 - Camera Settings Version: 010 [MakerNotes, Olympus, Camera] 256 - Preview Image Valid: Yes [MakerNotes, Olympus, Camera] 257 - Preview Image Start: 2568 [MakerNotes, Olympus, Camera] 258 - Preview Image Length: 26 [MakerNotes, Olympus, Camera] 512 - Exposure Mode: Program [MakerNotes, Olympus, Camera] 513 - AE Lock: Off [MakerNotes, Olympus, Camera] 514 - Metering Mode: ESP [MakerNotes, Olympus, Camera] 768 - Macro Mode: Off [MakerNotes, Olympus, Camera] 769 - Focus Mode: Single AF [MakerNotes, Olympus, Camera] 770 - Focus Process: AF Used [MakerNotes, Olympus, Camera] 771 - AF Search: Ready [MakerNotes, Olympus, Camera] 772 - AF Areas: Center (121,121)-(133,133) [MakerNotes, Olympus, Camera] 1024 - Flash Mode: Off [MakerNotes, Olympus, Camera] 1025 - Flash Exposure Comp: 0 [MakerNotes, Olympus, Camera] 1280 - White Balance 2: Auto [MakerNotes, Olympus, Camera] 1281 - White Balance Temperature: Auto [MakerNotes, Olympus, Camera] 1282 - White Balance Bracket: 0 [MakerNotes, Olympus, Camera] 1283 - Custom Saturation: CS2 (min CS0, max CS4) [MakerNotes, Olympus, Camera] 1284 - Modified Saturation: Off [MakerNotes, Olympus, Camera] 1285 - Contrast Setting: 0 (min -2, max 2) [MakerNotes, Olympus, Camera] 1286 - Sharpness Setting: 1 (min -3, max 5) [MakerNotes, Olympus, Camera] 1287 - Color Space: sRGB [MakerNotes, Olympus, Camera] 1290 - Noise Reduction: (none) [MakerNotes, Olympus, Camera] 1291 - Distortion Correction: Off [MakerNotes, Olympus, Camera] 1292 - Shading Compensation: Off [MakerNotes, Olympus, Camera] 1293 - Compression Factor: 2.7 [MakerNotes, Olympus, Camera] 1536 - Drive Mode: Continuous Shooting, Shot 2 [MakerNotes, Olympus, Camera] 1539 - Image Quality 2: SHQ [MakerNotes, Olympus, Camera] 0 - Raw Dev Version: 010 [MakerNotes, Olympus, Camera] 256 - Raw Dev Exposure Bias Value: 0 [MakerNotes, Olympus, Camera] 257 - Raw Dev White Balance Value: 0 [MakerNotes, Olympus, Camera] 258 - Raw Dev WB Fine Adjustment: 0 [MakerNotes, Olympus, Camera] 259 - Raw Dev Gray Point: 0 0 0 [MakerNotes, Olympus, Camera] 260 - Raw Dev Saturation Emphasis: 0 0 0 [MakerNotes, Olympus, Camera] 261 - Raw Dev Memory Color Emphasis: 0 [MakerNotes, Olympus, Camera] 262 - Raw Dev Contrast Value: 0 0 0 [MakerNotes, Olympus, Camera] 263 - Raw Dev Sharpness Value: 0 0 0 [MakerNotes, Olympus, Camera] 264 - Raw Dev Color Space: sRGB [MakerNotes, Olympus, Camera] 265 - Raw Dev Engine: High Speed [MakerNotes, Olympus, Camera] 266 - Raw Dev Noise Reduction: (none) [MakerNotes, Olympus, Camera] 267 - Raw Dev Edit Status: Original [MakerNotes, Olympus, Camera] 268 - Raw Dev Settings: (none) [MakerNotes, Olympus, Camera] 0 - Image Processing Version: 010 [MakerNotes, Olympus, Camera] 256 - WB RB Levels: 412 290 [MakerNotes, Olympus, Camera] 287 - WB G Level: 256 [MakerNotes, Olympus, Camera] 512 - Color Matrix: 356 -34 -66 -22 308 -30 6 -126 376 [MakerNotes, Olympus, Camera] 768 - Enhancer: 576 [MakerNotes, Olympus, Camera] 784 - Coring Filter: 1536 [MakerNotes, Olympus, Camera] 1536 - Black Level 2: 69 69 69 68 [MakerNotes, Olympus, Camera] 1552 - Gain Base: 256 [MakerNotes, Olympus, Camera] 1553 - Valid Bits: 12 0 [MakerNotes, Olympus, Camera] 1554 - Crop Left: 0 0 [MakerNotes, Olympus, Camera] 1555 - Crop Top: 0 0 [MakerNotes, Olympus, Camera] 1556 - Crop Width: 2560 [MakerNotes, Olympus, Camera] 1557 - Crop Height: 1920 [MakerNotes, Olympus, Camera] 4112 - Noise Reduction 2: (none) [MakerNotes, Olympus, Camera] 4113 - Distortion Correction 2: Off [MakerNotes, Olympus, Camera] 4114 - Shading Compensation 2: Off [MakerNotes, Olympus, Camera] 0 - Focus Info Version: 010 [MakerNotes, Olympus, Camera] 528 - Scene Detect: 0 [MakerNotes, Olympus, Camera] 768 - Zoom Step Count: 3 [MakerNotes, Olympus, Camera] 769 - Focus Step Count: 332 [MakerNotes, Olympus, Camera] 773 - Focus Distance: 0.705 m [MakerNotes, Olympus, Camera] 776 - AF Point: Center (horizontal) [MakerNotes, Olympus, Camera] 4609 - External Flash: Off [MakerNotes, Olympus, Camera] 4612 - External Flash Bounce: Bounce or Off [MakerNotes, Olympus, Camera] 4613 - External Flash Zoom: 0 [MakerNotes, Olympus, Camera] 4616 - Internal Flash: Off [MakerNotes, Olympus, Camera] 5376 - Sensor Temperature: 20 C [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [Composite, Composite, Image] Aperture - Aperture: 4.5 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.132813 [Composite, Composite, Camera] ExtenderStatus - Extender Status: Not attached [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Camera] LensID - Lens ID: Olympus Zuiko Digital 14-54mm F2.8-3.5 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 26 bytes) [Composite, Composite, Camera] RedBalance - Red Balance: 1.609375 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 2.0 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/100 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.015 mm [Composite, Composite, Image] DOF - Depth Of Field: 0.17 m (0.63 - 0.80 m) [Composite, Composite, Image] FOV - Field Of View: 47.2 deg (0.62 m) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 20.0 mm (35 mm equivalent: 40.1 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 5.93 m [Composite, Composite, Image] LightValue - Light Value: 9.0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Olympus_5.out����������������������������������������������������������������000644 �000765 �000024 �00000041060 12636254522 017263� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.08 [File, System, Image] FileName - File Name: Olympus_5_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 7.2 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:12:22 09:08:07-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:12:22 09:08:07-05:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:12:22 09:08:07-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: OLYMPUS DIGITAL CAMERA [EXIF, IFD0, Camera] 271 - Make: OLYMPUS CORPORATION [EXIF, IFD0, Camera] 272 - Camera Model Name: E-1 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 314 [EXIF, IFD0, Image] 283 - Y Resolution: 314 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Version 1.3 [EXIF, IFD0, Time] 306 - Modify Date: 2005:01:05 10:53:41 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/100 [EXIF, ExifIFD, Image] 33437 - F Number: 4.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 400 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2005:01:05 10:53:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2005:01:05 10:53:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.8 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 20.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2560 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1920 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 0 [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: High gain up [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Hard [EXIF, ExifIFD, Image] 42037 - Lens Serial Number: 012345678 [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 7096 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Olympus, Camera] 512 - Special Mode: Fast, Sequence: 2, Panorama: (none) [MakerNotes, Olympus, Camera] 513 - Quality: SHQ (Fine) [MakerNotes, Olympus, Camera] 514 - Macro: Off [MakerNotes, Olympus, Camera] 515 - Black And White Mode: Off [MakerNotes, Olympus, Camera] 516 - Digital Zoom: 0.0 [MakerNotes, Olympus, Camera] 517 - Focal Plane Diagonal: 21.6 mm [MakerNotes, Olympus, Camera] 518 - Lens Distortion Params: 0 0 0 0 0 0 [MakerNotes, Olympus, Camera] 519 - Camera Type: E-1 [MakerNotes, Olympus, Camera] 521 - Camera ID: OLYMPUS DIGITAL CAMERA [MakerNotes, Olympus, Camera] 4111 - Sharpness: Hard [MakerNotes, Olympus, Camera] 4113 - Color Matrix: 356 -34 -66 -22 308 -30 6 -126 376 [MakerNotes, Olympus, Camera] 4114 - Black Level: 69 69 69 68 [MakerNotes, Olympus, Camera] 4119 - Red Balance: 1.609375 [MakerNotes, Olympus, Camera] 4120 - Blue Balance: 1.1328125 [MakerNotes, Olympus, Camera] 4137 - Contrast: Normal [MakerNotes, Olympus, Camera] 4138 - Sharpness Factor: 576 [MakerNotes, Olympus, Camera] 4139 - Color Control: 96 4096 2944 4096 16 128 [MakerNotes, Olympus, Camera] 4140 - Valid Bits: 12 0 [MakerNotes, Olympus, Camera] 4141 - Coring Filter: 0 [MakerNotes, Olympus, Camera] 4142 - Olympus Image Width: 2560 [MakerNotes, Olympus, Camera] 4143 - Olympus Image Height: 1920 [MakerNotes, Olympus, Camera] 0 - Equipment Version: 010 [MakerNotes, Olympus, Camera] 256 - Camera Type 2: E-1 [MakerNotes, Olympus, Camera] 257 - Serial Number: 143008611 [MakerNotes, Olympus, Camera] 258 - Internal Serial Number: 4001310004375102 [MakerNotes, Olympus, Camera] 259 - Focal Plane Diagonal: 21.6 mm [MakerNotes, Olympus, Camera] 260 - Body Firmware Version: 1.300 [MakerNotes, Olympus, Camera] 513 - Lens Type: Olympus Zuiko Digital 14-54mm F2.8-3.5 [MakerNotes, Olympus, Camera] 514 - Lens Serial Number: 012345678 [MakerNotes, Olympus, Camera] 516 - Lens Firmware Version: 1.100 [MakerNotes, Olympus, Camera] 518 - Max Aperture At Max Focal: 3.5 [MakerNotes, Olympus, Camera] 519 - Min Focal Length: 14 [MakerNotes, Olympus, Camera] 520 - Max Focal Length: 54 [MakerNotes, Olympus, Camera] 522 - Max Aperture: 2.8 [MakerNotes, Olympus, Camera] 523 - Lens Properties: 0xc043 [MakerNotes, Olympus, Camera] 769 - Extender: None [MakerNotes, Olympus, Camera] 770 - Extender Serial Number: [MakerNotes, Olympus, Camera] 772 - Extender Firmware Version: 0 [MakerNotes, Olympus, Camera] 4096 - Flash Type: None [MakerNotes, Olympus, Camera] 4097 - Flash Model: None [MakerNotes, Olympus, Camera] 4098 - Flash Firmware Version: 0 [MakerNotes, Olympus, Camera] 4099 - Flash Serial Number: [MakerNotes, Olympus, Camera] 0 - Camera Settings Version: 010 [MakerNotes, Olympus, Camera] 256 - Preview Image Valid: Yes [MakerNotes, Olympus, Camera] 257 - Preview Image Start: 7124 [MakerNotes, Olympus, Camera] 258 - Preview Image Length: 26 [MakerNotes, Olympus, Camera] 512 - Exposure Mode: Program [MakerNotes, Olympus, Camera] 513 - AE Lock: Off [MakerNotes, Olympus, Camera] 514 - Metering Mode: ESP [MakerNotes, Olympus, Camera] 768 - Macro Mode: Off [MakerNotes, Olympus, Camera] 769 - Focus Mode: Single AF [MakerNotes, Olympus, Camera] 770 - Focus Process: AF Used [MakerNotes, Olympus, Camera] 771 - AF Search: Ready [MakerNotes, Olympus, Camera] 772 - AF Areas: Center (121,121)-(133,133) [MakerNotes, Olympus, Camera] 1024 - Flash Mode: Off [MakerNotes, Olympus, Camera] 1025 - Flash Exposure Comp: 0 [MakerNotes, Olympus, Camera] 1026 - Olympus Camera Settings 0x0402: 0 [MakerNotes, Olympus, Camera] 1280 - White Balance 2: Auto [MakerNotes, Olympus, Camera] 1281 - White Balance Temperature: Auto [MakerNotes, Olympus, Camera] 1282 - White Balance Bracket: 0 [MakerNotes, Olympus, Camera] 1283 - Custom Saturation: CS2 (min CS0, max CS4) [MakerNotes, Olympus, Camera] 1284 - Modified Saturation: Off [MakerNotes, Olympus, Camera] 1285 - Contrast Setting: 0 (min -2, max 2) [MakerNotes, Olympus, Camera] 1286 - Sharpness Setting: 1 (min -3, max 5) [MakerNotes, Olympus, Camera] 1287 - Color Space: sRGB [MakerNotes, Olympus, Camera] 1288 - Olympus Camera Settings 0x0508: 0 [MakerNotes, Olympus, Camera] 1290 - Noise Reduction: (none) [MakerNotes, Olympus, Camera] 1291 - Distortion Correction: Off [MakerNotes, Olympus, Camera] 1292 - Shading Compensation: Off [MakerNotes, Olympus, Camera] 1293 - Compression Factor: 2.7 [MakerNotes, Olympus, Camera] 1294 - Olympus Camera Settings 0x050e: 1 [MakerNotes, Olympus, Camera] 1536 - Drive Mode: Continuous Shooting, Shot 2 [MakerNotes, Olympus, Camera] 1539 - Image Quality 2: SHQ [MakerNotes, Olympus, Camera] 0 - Raw Dev Version: 010 [MakerNotes, Olympus, Camera] 256 - Raw Dev Exposure Bias Value: 0 [MakerNotes, Olympus, Camera] 257 - Raw Dev White Balance Value: 0 [MakerNotes, Olympus, Camera] 258 - Raw Dev WB Fine Adjustment: 0 [MakerNotes, Olympus, Camera] 259 - Raw Dev Gray Point: 0 0 0 [MakerNotes, Olympus, Camera] 260 - Raw Dev Saturation Emphasis: 0 0 0 [MakerNotes, Olympus, Camera] 261 - Raw Dev Memory Color Emphasis: 0 [MakerNotes, Olympus, Camera] 262 - Raw Dev Contrast Value: 0 0 0 [MakerNotes, Olympus, Camera] 263 - Raw Dev Sharpness Value: 0 0 0 [MakerNotes, Olympus, Camera] 264 - Raw Dev Color Space: sRGB [MakerNotes, Olympus, Camera] 265 - Raw Dev Engine: High Speed [MakerNotes, Olympus, Camera] 266 - Raw Dev Noise Reduction: (none) [MakerNotes, Olympus, Camera] 267 - Raw Dev Edit Status: Original [MakerNotes, Olympus, Camera] 268 - Raw Dev Settings: (none) [MakerNotes, Olympus, Camera] 0 - Image Processing Version: 010 [MakerNotes, Olympus, Camera] 256 - WB RB Levels: 412 290 [MakerNotes, Olympus, Camera] 287 - WB G Level: 256 [MakerNotes, Olympus, Camera] 512 - Color Matrix: 356 -34 -66 -22 308 -30 6 -126 376 [MakerNotes, Olympus, Camera] 768 - Enhancer: 576 [MakerNotes, Olympus, Camera] 784 - Coring Filter: 0 [MakerNotes, Olympus, Camera] 1536 - Black Level 2: 69 69 69 68 [MakerNotes, Olympus, Camera] 1552 - Gain Base: 256 [MakerNotes, Olympus, Camera] 1553 - Valid Bits: 12 0 [MakerNotes, Olympus, Camera] 1554 - Crop Left: 0 0 [MakerNotes, Olympus, Camera] 1555 - Crop Top: 0 0 [MakerNotes, Olympus, Camera] 1556 - Crop Width: 2560 [MakerNotes, Olympus, Camera] 1557 - Crop Height: 1920 [MakerNotes, Olympus, Camera] 1559 - Olympus Image Processing 0x0617: 1 [MakerNotes, Olympus, Camera] 2048 - Olympus Image Processing 0x0800: -0.0549249015748501 0.0199025515466928 -0.0028715955559[...] [MakerNotes, Olympus, Camera] 2049 - Olympus Image Processing 0x0801: 8194 8208 8250 8292 8352 8393 8469 8521 8587 8668 8725 [...] [MakerNotes, Olympus, Camera] 2050 - Olympus Image Processing 0x0802: 102.3897059 [MakerNotes, Olympus, Camera] 4096 - Olympus Image Processing 0x1000: 1770 [MakerNotes, Olympus, Camera] 4097 - Olympus Image Processing 0x1001: 233 [MakerNotes, Olympus, Camera] 4098 - Olympus Image Processing 0x1002: 164 [MakerNotes, Olympus, Camera] 4099 - Olympus Image Processing 0x1003: 1 [MakerNotes, Olympus, Camera] 4100 - Olympus Image Processing 0x1004: 5 [MakerNotes, Olympus, Camera] 4112 - Noise Reduction 2: (none) [MakerNotes, Olympus, Camera] 4113 - Distortion Correction 2: Off [MakerNotes, Olympus, Camera] 4114 - Shading Compensation 2: Off [MakerNotes, Olympus, Camera] 0 - Focus Info Version: 010 [MakerNotes, Olympus, Camera] 512 - Olympus Focus Info 0x0200: 1711 1646 [MakerNotes, Olympus, Camera] 513 - Olympus Focus Info 0x0201: 1792 1825 [MakerNotes, Olympus, Camera] 514 - Olympus Focus Info 0x0202: 1146 1210 [MakerNotes, Olympus, Camera] 515 - Olympus Focus Info 0x0203: 1063 [MakerNotes, Olympus, Camera] 516 - Olympus Focus Info 0x0204: 1028 1137 [MakerNotes, Olympus, Camera] 517 - Olympus Focus Info 0x0205: 1334 [MakerNotes, Olympus, Camera] 518 - Olympus Focus Info 0x0206: 917 [MakerNotes, Olympus, Camera] 519 - Olympus Focus Info 0x0207: 0 [MakerNotes, Olympus, Camera] 521 - Auto Focus: Off [MakerNotes, Olympus, Camera] 522 - Olympus Focus Info 0x020a: 0 [MakerNotes, Olympus, Camera] 523 - Olympus Focus Info 0x020b: 256 [MakerNotes, Olympus, Camera] 524 - Olympus Focus Info 0x020c: -494 -538 [MakerNotes, Olympus, Camera] 525 - Olympus Focus Info 0x020d: 0 [MakerNotes, Olympus, Camera] 526 - Olympus Focus Info 0x020e: 0 0 0 0 0 [MakerNotes, Olympus, Camera] 527 - Olympus Focus Info 0x020f: 0 0 0 0 0 [MakerNotes, Olympus, Camera] 528 - Scene Detect: 0 [MakerNotes, Olympus, Camera] 529 - Scene Area: 0 0 0 0 0 0 0 0 [MakerNotes, Olympus, Camera] 530 - Scene Detect Data: (Binary data 1439 bytes) [MakerNotes, Olympus, Camera] 531 - Olympus Focus Info 0x0213: 0 [MakerNotes, Olympus, Camera] 532 - Olympus Focus Info 0x0214: 0 [MakerNotes, Olympus, Camera] 533 - Olympus Focus Info 0x0215: 27641 [MakerNotes, Olympus, Camera] 768 - Zoom Step Count: 3 [MakerNotes, Olympus, Camera] 769 - Focus Step Count: 332 [MakerNotes, Olympus, Camera] 770 - Olympus Focus Info 0x0302: 0 [MakerNotes, Olympus, Camera] 773 - Focus Distance: 0.705 m [MakerNotes, Olympus, Camera] 775 - Olympus Focus Info 0x0307: 0 [MakerNotes, Olympus, Camera] 776 - AF Point: Center (horizontal) [MakerNotes, Olympus, Camera] 777 - Olympus Focus Info 0x0309: 0 [MakerNotes, Olympus, Camera] 778 - Olympus Focus Info 0x030a: -62 [MakerNotes, Olympus, Camera] 779 - Olympus Focus Info 0x030b: 57 [MakerNotes, Olympus, Camera] 780 - Olympus Focus Info 0x030c: 1 674 [MakerNotes, Olympus, Camera] 781 - Olympus Focus Info 0x030d: 1747 2847 4883 16470 [MakerNotes, Olympus, Camera] 782 - Olympus Focus Info 0x030e: 0 [MakerNotes, Olympus, Camera] 783 - Olympus Focus Info 0x030f: 288 [MakerNotes, Olympus, Camera] 792 - Olympus Focus Info 0x0318: 3 [MakerNotes, Olympus, Camera] 793 - Olympus Focus Info 0x0319: 4 [MakerNotes, Olympus, Camera] 794 - Olympus Focus Info 0x031a: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [MakerNotes, Olympus, Camera] 795 - Olympus Focus Info 0x031b: 0 [MakerNotes, Olympus, Camera] 1026 - Olympus Focus Info 0x0402: 0 [MakerNotes, Olympus, Camera] 4608 - Olympus Focus Info 0x1200: 0 [MakerNotes, Olympus, Camera] 4609 - External Flash: Off [MakerNotes, Olympus, Camera] 4610 - Olympus Focus Info 0x1202: 0 [MakerNotes, Olympus, Camera] 4611 - External Flash Guide Number: 0 [MakerNotes, Olympus, Camera] 4612 - External Flash Bounce: Bounce or Off [MakerNotes, Olympus, Camera] 4613 - External Flash Zoom: 0 [MakerNotes, Olympus, Camera] 4614 - Olympus Focus Info 0x1206: 0 [MakerNotes, Olympus, Camera] 4615 - Olympus Focus Info 0x1207: 0 [MakerNotes, Olympus, Camera] 4616 - Internal Flash: Off [MakerNotes, Olympus, Camera] 5376 - Sensor Temperature: 20 C [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [PrintIM, PrintIM, Printing] 1 - Print IM 0x0001: 0x00140014 [PrintIM, PrintIM, Printing] 2 - Print IM 0x0002: 0x00000001 [PrintIM, PrintIM, Printing] 3 - Print IM 0x0003: 0x00000088 [PrintIM, PrintIM, Printing] 7 - Print IM 0x0007: 0x00000000 [PrintIM, PrintIM, Printing] 8 - Print IM 0x0008: 0x00000000 [PrintIM, PrintIM, Printing] 9 - Print IM 0x0009: 0x00000000 [PrintIM, PrintIM, Printing] 10 - Print IM 0x000a: 0x00000000 [PrintIM, PrintIM, Printing] 11 - Print IM 0x000b: 0x000000d0 [PrintIM, PrintIM, Printing] 12 - Print IM 0x000c: 0x00000000 [PrintIM, PrintIM, Printing] 13 - Print IM 0x000d: 0x00000000 [PrintIM, PrintIM, Printing] 14 - Print IM 0x000e: 0x000000e8 [PrintIM, PrintIM, Printing] 256 - Print IM 0x0100: 0x00000001 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0x000000ff [PrintIM, PrintIM, Printing] 258 - Print IM 0x0102: 0x00000083 [PrintIM, PrintIM, Printing] 259 - Print IM 0x0103: 0x00000083 [PrintIM, PrintIM, Printing] 260 - Print IM 0x0104: 0x00000083 [PrintIM, PrintIM, Printing] 261 - Print IM 0x0105: 0x00000083 [PrintIM, PrintIM, Printing] 262 - Print IM 0x0106: 0x00000083 [PrintIM, PrintIM, Printing] 263 - Print IM 0x0107: 0x00808080 [PrintIM, PrintIM, Printing] 272 - Print IM 0x0110: 0x00000082 [Composite, Composite, Image] Aperture - Aperture: 4.5 [Composite, Composite, Camera] ExtenderStatus - Extender Status: Not attached [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Camera] LensID - Lens ID: Olympus Zuiko Digital 14-54mm F2.8-3.5 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 26 bytes) [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/100 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.132813 [Composite, Composite, Image] LightValue - Light Value: 9.0 [Composite, Composite, Camera] RedBalance - Red Balance: 1.609375 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 2.0 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.015 mm [Composite, Composite, Image] DOF - Depth Of Field: 0.17 m (0.63 - 0.80 m) [Composite, Composite, Image] FOV - Field Of View: 47.2 deg (0.62 m) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 20.0 mm (35 mm equivalent: 40.1 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 5.93 m ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Olympus_6.out����������������������������������������������������������������000644 �000765 �000024 �00000022230 12636254522 017262� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.08 [File, System, Image] FileName - File Name: Olympus2.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 7.5 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2007:02:27 20:01:26-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:12:22 09:08:07-05:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:12:17 10:56:02-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: OLYMPUS DIGITAL CAMERA [EXIF, IFD0, Camera] 271 - Make: OLYMPUS IMAGING CORP. [EXIF, IFD0, Camera] 272 - Camera Model Name: u760,S760 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 314 [EXIF, IFD0, Image] 283 - Y Resolution: 314 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Version 1.0 [EXIF, IFD0, Time] 306 - Modify Date: 2007:02:16 15:09:13 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/250 [EXIF, ExifIFD, Image] 33437 - F Number: 16.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 80 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2007:02:16 15:09:13 [EXIF, ExifIFD, Time] 36868 - Create Date: 2007:02:16 15:09:13 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: -0.7 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.4 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 19.5 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 3072 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 2304 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 1 [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: None [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 7424 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Olympus, Camera] 512 - Special Mode: Normal, Sequence: 0, Panorama: (none) [MakerNotes, Olympus, Camera] 513 - Quality: SHQ (Fine) [MakerNotes, Olympus, Camera] 514 - Macro: Off [MakerNotes, Olympus, Camera] 515 - Black And White Mode: Off [MakerNotes, Olympus, Camera] 516 - Digital Zoom: 1.0 [MakerNotes, Olympus, Camera] 517 - Focal Plane Diagonal: 7.58 mm [MakerNotes, Olympus, Camera] 518 - Lens Distortion Params: 0 0 0 0 0 0 [MakerNotes, Olympus, Camera] 519 - Camera Type: u760,S760 [MakerNotes, Olympus, Camera] 521 - Camera ID: OLYMPUS DIGITAL CAMERA [MakerNotes, Olympus, Camera] 0 - Equipment Version: 0100 [MakerNotes, Olympus, Camera] 256 - Camera Type 2: u760,S760 [MakerNotes, Olympus, Camera] 257 - Serial Number: C90500055 [MakerNotes, Olympus, Camera] 258 - Internal Serial Number: 0171612001128001 [MakerNotes, Olympus, Camera] 259 - Focal Plane Diagonal: 7.58 mm [MakerNotes, Olympus, Camera] 260 - Body Firmware Version: 1.001 [MakerNotes, Olympus, Camera] 0 - Camera Settings Version: 0100 [MakerNotes, Olympus, Camera] 256 - Preview Image Valid: No [MakerNotes, Olympus, Camera] 257 - Preview Image Start: 4294966614 [MakerNotes, Olympus, Camera] 258 - Preview Image Length: 0 [MakerNotes, Olympus, Camera] 512 - Exposure Mode: Program [MakerNotes, Olympus, Camera] 513 - AE Lock: Off [MakerNotes, Olympus, Camera] 514 - Metering Mode: ESP [MakerNotes, Olympus, Camera] 768 - Macro Mode: Off [MakerNotes, Olympus, Camera] 769 - Focus Mode: Single AF [MakerNotes, Olympus, Camera] 770 - Focus Process: AF Not Used [MakerNotes, Olympus, Camera] 771 - AF Search: Not Ready [MakerNotes, Olympus, Camera] 772 - AF Areas: none [MakerNotes, Olympus, Camera] 1024 - Flash Mode: Off [MakerNotes, Olympus, Camera] 1025 - Flash Exposure Comp: 0 [MakerNotes, Olympus, Camera] 1280 - White Balance 2: Auto [MakerNotes, Olympus, Camera] 1281 - White Balance Temperature: Auto [MakerNotes, Olympus, Camera] 1282 - White Balance Bracket: 0 0 [MakerNotes, Olympus, Camera] 1283 - Custom Saturation: 0 (min -2, max 2) [MakerNotes, Olympus, Camera] 1284 - Modified Saturation: Off [MakerNotes, Olympus, Camera] 1285 - Contrast Setting: 0 (min -2, max 2) [MakerNotes, Olympus, Camera] 1286 - Sharpness Setting: 0 (min -2, max 2) [MakerNotes, Olympus, Camera] 1287 - Color Space: sRGB [MakerNotes, Olympus, Camera] 1289 - Scene Mode: Standard [MakerNotes, Olympus, Camera] 1290 - Noise Reduction: (none) [MakerNotes, Olympus, Camera] 1291 - Distortion Correction: Off [MakerNotes, Olympus, Camera] 1292 - Shading Compensation: Off [MakerNotes, Olympus, Camera] 1293 - Compression Factor: 4 [MakerNotes, Olympus, Camera] 1295 - Gradation: Normal [MakerNotes, Olympus, Camera] 1536 - Drive Mode: Single Shot [MakerNotes, Olympus, Camera] 1537 - Panorama Mode: Off [MakerNotes, Olympus, Camera] 1539 - Image Quality 2: SHQ [MakerNotes, Olympus, Camera] 2304 - Manometer Pressure: 0 kPa [MakerNotes, Olympus, Camera] 2305 - Manometer Reading: 0 m, 0 ft [MakerNotes, Olympus, Camera] 0 - Raw Dev Version: 0100 [MakerNotes, Olympus, Camera] 267 - Raw Dev Edit Status: Original [MakerNotes, Olympus, Camera] 0 - Image Processing Version: 0111 [MakerNotes, Olympus, Camera] 256 - WB RB Levels: 536 390 [MakerNotes, Olympus, Camera] 287 - WB G Level: 0 [MakerNotes, Olympus, Camera] 512 - Color Matrix: 348 -54 -42 -56 422 -114 -2 -132 388 [MakerNotes, Olympus, Camera] 768 - Enhancer: 38 [MakerNotes, Olympus, Camera] 784 - Coring Filter: 15 [MakerNotes, Olympus, Camera] 1536 - Black Level 2: 63 63 63 63 [MakerNotes, Olympus, Camera] 4112 - Noise Reduction 2: (none) [MakerNotes, Olympus, Camera] 4113 - Distortion Correction 2: Off [MakerNotes, Olympus, Camera] 4114 - Shading Compensation 2: On [MakerNotes, Olympus, Camera] 0 - Focus Info Version: 0100 [MakerNotes, Olympus, Camera] 528 - Scene Detect: 0 [MakerNotes, Olympus, Camera] 768 - Zoom Step Count: 13 [MakerNotes, Olympus, Camera] 769 - Focus Step Count: 321 [MakerNotes, Olympus, Camera] 771 - Focus Step Infinity: 320 [MakerNotes, Olympus, Camera] 772 - Focus Step Near: 375 [MakerNotes, Olympus, Camera] 773 - Focus Distance: 385.8 m [MakerNotes, Olympus, Camera] 776 - AF Point: Left (or n/a) [MakerNotes, Olympus, Camera] 4609 - External Flash: Off [MakerNotes, Olympus, Camera] 4612 - External Flash Bounce: Bounce or Off [MakerNotes, Olympus, Camera] 4613 - External Flash Zoom: 0 [MakerNotes, Olympus, Camera] 4616 - Internal Flash: Off [MakerNotes, Olympus, Camera] 5632 - Image Stabilization: On, Mode 2 [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0300 [Composite, Composite, Image] Aperture - Aperture: 16.0 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/250 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.523438 [Composite, Composite, Image] LightValue - Light Value: 16.3 [Composite, Composite, Camera] RedBalance - Red Balance: 2.09375 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 5.7 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.005 mm [Composite, Composite, Image] DOF - Depth Of Field: inf (4.46 m - inf) [Composite, Composite, Image] FOV - Field Of View: 18.4 deg (124.77 m) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 19.5 mm (35 mm equivalent: 111.3 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 4.51 m ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Olympus_7.out����������������������������������������������������������������000644 �000765 �000024 �00000047024 12636254522 017273� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ExifToolVersion = 10.08 FileName = Olympus_7_failed.jpg Directory = t FileSize = 7335 FileModifyDate = 1450793287 FileAccessDate = 1450793287 FileInodeChangeDate = 1450793287 FilePermissions = 33188 FileType = JPEG FileTypeExtension = JPG MIMEType = image/jpeg JPEG APP1 (7080 bytes): ExifByteOrder = II + [IFD0 directory with 12 entries] | 0) ImageDescription = OLYMPUS DIGITAL CAMERA | - Tag 0x010e (32 bytes, string[32]) | 1) Make = OLYMPUS IMAGING CORP. | - Tag 0x010f (24 bytes, string[24]) | 2) Model = u760,S760 | - Tag 0x0110 (17 bytes, string[17]) | 3) Orientation = 1 | - Tag 0x0112 (2 bytes, int16u[1]) | 4) XResolution = 314 (314/1) | - Tag 0x011a (8 bytes, rational64u[1]) | 5) YResolution = 314 (314/1) | - Tag 0x011b (8 bytes, rational64u[1]) | 6) ResolutionUnit = 2 | - Tag 0x0128 (2 bytes, int16u[1]) | 7) Software = Version 1.0 | - Tag 0x0131 (32 bytes, string[32]) | 8) ModifyDate = 2007:02:16 15:09:13 | - Tag 0x0132 (20 bytes, string[20]) | 9) YCbCrPositioning = 2 | - Tag 0x0213 (2 bytes, int16u[1]) | 10) ExifOffset (SubDirectory) --> | - Tag 0x8769 (4 bytes, int32u[1]) | + [ExifIFD directory with 31 entries] | | 0) ExposureTime = 0.004 (1/250) | | - Tag 0x829a (8 bytes, rational64u[1]) | | 1) FNumber = 16 (160/10) | | - Tag 0x829d (8 bytes, rational64u[1]) | | 2) ExposureProgram = 2 | | - Tag 0x8822 (2 bytes, int16u[1]) | | 3) ISO = 80 | | - Tag 0x8827 (2 bytes, int16u[1]) | | 4) ExifVersion = 0221 | | - Tag 0x9000 (4 bytes, undef[4]) | | 5) DateTimeOriginal = 2007:02:16 15:09:13 | | - Tag 0x9003 (20 bytes, string[20]) | | 6) CreateDate = 2007:02:16 15:09:13 | | - Tag 0x9004 (20 bytes, string[20]) | | 7) ComponentsConfiguration = 1 2 3 0 | | - Tag 0x9101 (4 bytes, undef[4] read as int8u[4]) | | 8) ExposureCompensation = -0.7 (-7/10) | | - Tag 0x9204 (8 bytes, rational64s[1]) | | 9) MaxApertureValue = 3.53 (353/100) | | - Tag 0x9205 (8 bytes, rational64u[1]) | | 10) MeteringMode = 5 | | - Tag 0x9207 (2 bytes, int16u[1]) | | 11) LightSource = 0 | | - Tag 0x9208 (2 bytes, int16u[1]) | | 12) Flash = 16 | | - Tag 0x9209 (2 bytes, int16u[1]) | | 13) FocalLength = 19.5 (1950/100) | | - Tag 0x920a (8 bytes, rational64u[1]) | | 14) MakerNoteOlympus2 (SubDirectory) --> | | - Tag 0x927c (5502 bytes, undef[5502]) | | + [MakerNoteOlympus2 directory with 14 entries] | | | 0) SpecialMode = 0 0 0 | | | - Tag 0x0200 (12 bytes, int32u[3]) | | | 1) Quality = 3 | | | - Tag 0x0201 (2 bytes, int16u[1]) | | | 2) Macro = 1 | | | - Tag 0x0202 (2 bytes, int16u[1]) | | | 3) BWMode = 0 | | | - Tag 0x0203 (2 bytes, int16u[1]) | | | 4) DigitalZoom = 1 (100/100) | | | - Tag 0x0204 (8 bytes, rational64u[1]) | | | 5) FocalPlaneDiagonal = 7.58 (758/100) | | | - Tag 0x0205 (8 bytes, rational64u[1]) | | | 6) LensDistortionParams = 0 0 0 0 0 0 | | | - Tag 0x0206 (12 bytes, int16s[6]) | | | 7) CameraType = D4328 | | | - Tag 0x0207 (6 bytes, string[6]) | | | 8) CameraID = OLYMPUS DIGITAL CAMERA | | | - Tag 0x0209 (32 bytes, undef[32] read as string[32]) | | | 9) EquipmentIFD (SubDirectory) --> | | | - Tag 0x2010 (4 bytes, ifd[1]) | | | + [MakerNotes directory with 6 entries] | | | | 0) EquipmentVersion = 0100 | | | | - Tag 0x0000 (4 bytes, undef[4]) | | | | 1) CameraType2 = D4328 | | | | - Tag 0x0100 (6 bytes, string[6]) | | | | 2) SerialNumber = C90500055 | | | | - Tag 0x0101 (32 bytes, string[32]) | | | | 3) InternalSerialNumber = 0171612001128001 | | | | - Tag 0x0102 (32 bytes, string[32]) | | | | 4) FocalPlaneDiagonal = 7.58 (758/100) | | | | - Tag 0x0103 (8 bytes, rational64u[1]) | | | | 5) BodyFirmwareVersion = 4097 | | | | - Tag 0x0104 (4 bytes, int32u[1]) | | | 10) CameraSettingsIFD (SubDirectory) --> | | | - Tag 0x2020 (4 bytes, ifd[1]) | | | + [MakerNotes directory with 36 entries] | | | | 0) CameraSettingsVersion = 0100 | | | | - Tag 0x0000 (4 bytes, undef[4]) | | | | 1) PreviewImageValid = 0 | | | | - Tag 0x0100 (4 bytes, int32u[1]) | | | | 2) PreviewImageStart = 6037 | | | | - Tag 0x0101 (4 bytes, int32u[1]) | | | | 3) PreviewImageLength = 0 | | | | - Tag 0x0102 (4 bytes, int32u[1]) | | | | 4) ExposureMode = 2 | | | | - Tag 0x0200 (2 bytes, int16u[1]) | | | | 5) AELock = 0 | | | | - Tag 0x0201 (2 bytes, int16u[1]) | | | | 6) MeteringMode = 5 | | | | - Tag 0x0202 (2 bytes, int16u[1]) | | | | 7) MacroMode = 0 | | | | - Tag 0x0300 (2 bytes, int16u[1]) | | | | 8) FocusMode = 0 | | | | - Tag 0x0301 (2 bytes, int16u[1]) | | | | 9) FocusProcess = 0 | | | | - Tag 0x0302 (2 bytes, int16u[1]) | | | | 10) AFSearch = 0 | | | | - Tag 0x0303 (2 bytes, int16u[1]) | | | | 11) AFAreas = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0[snip] | | | | - Tag 0x0304 (256 bytes, int32u[64]) | | | | 12) FlashMode = 0 | | | | - Tag 0x0400 (2 bytes, int16u[1]) | | | | 13) FlashExposureComp = 0 (0/1) | | | | - Tag 0x0401 (8 bytes, rational64s[1]) | | | | 14) Olympus_CameraSettings_0x0402 = 0 | | | | - Tag 0x0402 (2 bytes, int16u[1]) | | | | 15) WhiteBalance2 = 0 | | | | - Tag 0x0500 (2 bytes, int16u[1]) | | | | 16) WhiteBalanceTemperature = 0 | | | | - Tag 0x0501 (2 bytes, int16u[1]) | | | | 17) WhiteBalanceBracket = 0 0 | | | | - Tag 0x0502 (4 bytes, int16s[2]) | | | | 18) CustomSaturation = 0 -2 2 | | | | - Tag 0x0503 (6 bytes, int16s[3]) | | | | 19) ModifiedSaturation = 0 | | | | - Tag 0x0504 (2 bytes, int16u[1]) | | | | 20) ContrastSetting = 0 -2 2 | | | | - Tag 0x0505 (6 bytes, int16s[3]) | | | | 21) SharpnessSetting = 0 -2 2 | | | | - Tag 0x0506 (6 bytes, int16s[3]) | | | | 22) ColorSpace = 0 | | | | - Tag 0x0507 (2 bytes, int16u[1]) | | | | 23) SceneMode = 0 | | | | - Tag 0x0509 (2 bytes, int16u[1]) | | | | 24) NoiseReduction = 0 | | | | - Tag 0x050a (2 bytes, int16u[1]) | | | | 25) DistortionCorrection = 0 | | | | - Tag 0x050b (2 bytes, int16u[1]) | | | | 26) ShadingCompensation = 0 | | | | - Tag 0x050c (2 bytes, int16u[1]) | | | | 27) CompressionFactor = 4 (4/1) | | | | - Tag 0x050d (8 bytes, rational64u[1]) | | | | 28) Olympus_CameraSettings_0x050e = 0 | | | | - Tag 0x050e (2 bytes, int16u[1]) | | | | 29) Gradation = 0 -1 1 | | | | - Tag 0x050f (6 bytes, int16s[3]) | | | | 30) DriveMode = 0 0 0 | | | | - Tag 0x0600 (6 bytes, int16u[3]) | | | | 31) PanoramaMode = 0 0 | | | | - Tag 0x0601 (4 bytes, int16u[2]) | | | | 32) ImageQuality2 = 3 | | | | - Tag 0x0603 (2 bytes, int16u[1]) | | | | 33) Olympus_CameraSettings_0x0800 = 1 | | | | - Tag 0x0800 (2 bytes, int16u[1]) | | | | 34) ManometerPressure = 0 | | | | - Tag 0x0900 (2 bytes, int16u[1]) | | | | 35) ManometerReading = 0 0 | | | | - Tag 0x0901 (8 bytes, int32s[2]) | | | 11) RawDevelopmentIFD (SubDirectory) --> | | | - Tag 0x2030 (4 bytes, ifd[1]) | | | + [MakerNotes directory with 2 entries] | | | | 0) RawDevVersion = 0100 | | | | - Tag 0x0000 (4 bytes, undef[4]) | | | | 1) RawDevEditStatus = 0 | | | | - Tag 0x010b (2 bytes, int16u[1]) | | | 12) ImageProcessingIFD (SubDirectory) --> | | | - Tag 0x2040 (4 bytes, ifd[1]) | | | + [MakerNotes directory with 24 entries] | | | | 0) ImageProcessingVersion = 0111 | | | | - Tag 0x0000 (4 bytes, undef[4]) | | | | 1) WB_RBLevels = 536 390 | | | | - Tag 0x0100 (4 bytes, int16u[2]) | | | | 2) WB_GLevel = 0 | | | | - Tag 0x011f (2 bytes, int16u[1]) | | | | 3) ColorMatrix = 348 -54 -42 -56 422 -114 -2 -132 388 | | | | - Tag 0x0200 (18 bytes, int16u[9] read as int16s[9]) | | | | 4) Enhancer = 38 | | | | - Tag 0x0300 (2 bytes, int16u[1]) | | | | 5) CoringFilter = 15 | | | | - Tag 0x0310 (2 bytes, int16u[1]) | | | | 6) BlackLevel2 = 63 63 63 63 | | | | - Tag 0x0600 (8 bytes, int16u[4]) | | | | 7) Olympus_ImageProcessing_0x0800 = -0.00417476473376155 -0.0002546840696595[snip] | | | | - Tag 0x0800 (36 bytes, float[9]) | | | | 8) Olympus_ImageProcessing_0x0801 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | | | | - Tag 0x0801 (32 bytes, int16u[16]) | | | | 9) Olympus_ImageProcessing_0x0802 = undef (0/0) | | | | - Tag 0x0802 (8 bytes, rational64u[1]) | | | | 10) Olympus_ImageProcessing_0x1000 = 0 0 | | | | - Tag 0x1000 (4 bytes, int16u[2]) | | | | 11) Olympus_ImageProcessing_0x1001 = 0 0 | | | | - Tag 0x1001 (4 bytes, int16u[2]) | | | | 12) Olympus_ImageProcessing_0x1002 = 0 0 | | | | - Tag 0x1002 (4 bytes, int16u[2]) | | | | 13) Olympus_ImageProcessing_0x1003 = 8 | | | | - Tag 0x1003 (2 bytes, int16u[1]) | | | | 14) Olympus_ImageProcessing_0x1004 = 1809 | | | | - Tag 0x1004 (2 bytes, int16u[1]) | | | | 15) Olympus_ImageProcessing_0x1005 = 7 7 | | | | - Tag 0x1005 (4 bytes, int16u[2]) | | | | 16) Olympus_ImageProcessing_0x1006 = 101 197 101 197 101 196 102 196 | | | | - Tag 0x1006 (16 bytes, int16u[8]) | | | | 17) Olympus_ImageProcessing_0x1007 = 909 3 0 0 0 | | | | - Tag 0x1007 (10 bytes, int16u[5]) | | | | 18) Olympus_ImageProcessing_0x1008 = 1 | | | | - Tag 0x1008 (2 bytes, int16u[1]) | | | | 19) Olympus_ImageProcessing_0x1009 = 0 0 0 | | | | - Tag 0x1009 (6 bytes, int16u[3]) | | | | 20) Olympus_ImageProcessing_0x100a = 0 0 439 | | | | - Tag 0x100a (6 bytes, int16u[3]) | | | | 21) NoiseReduction2 = 0 | | | | - Tag 0x1010 (2 bytes, int16u[1]) | | | | 22) DistortionCorrection2 = 0 | | | | - Tag 0x1011 (2 bytes, int16u[1]) | | | | 23) ShadingCompensation2 = 1 | | | | - Tag 0x1012 (2 bytes, int16u[1]) | | | 13) FocusInfoIFD (SubDirectory) --> | | | - Tag 0x2050 (4 bytes, ifd[1]) | | | + [MakerNotes directory with 54 entries] | | | | 0) FocusInfoVersion = 0100 | | | | - Tag 0x0000 (4 bytes, undef[4]) | | | | 1) Olympus_FocusInfo_0x0200 = 2041 0 | | | | - Tag 0x0200 (4 bytes, int16s[2]) | | | | 2) Olympus_FocusInfo_0x0201 = 1109 0 | | | | - Tag 0x0201 (4 bytes, int16s[2]) | | | | 3) Olympus_FocusInfo_0x0202 = 2065 0 | | | | - Tag 0x0202 (4 bytes, int16s[2]) | | | | 4) Olympus_FocusInfo_0x0203 = 2826 | | | | - Tag 0x0203 (2 bytes, int16s[1]) | | | | 5) Olympus_FocusInfo_0x0204 = 3086 3072 2897 2928 2957 2987 3011 3034 3051 3[snip] | | | | - Tag 0x0204 (166 bytes, int16s[83]) | | | | 6) AutoFocus = 255 | | | | - Tag 0x0209 (2 bytes, int16u[1]) | | | | 7) Olympus_FocusInfo_0x020a = 0 | | | | - Tag 0x020a (2 bytes, int16u[1]) | | | | 8) Olympus_FocusInfo_0x020b = 0 | | | | - Tag 0x020b (2 bytes, int16u[1]) | | | | 9) Olympus_FocusInfo_0x020d = 0 | | | | - Tag 0x020d (4 bytes, int32u[1]) | | | | 10) Olympus_FocusInfo_0x020e = 0 0 0 0 0 | | | | - Tag 0x020e (20 bytes, int32u[5]) | | | | 11) Olympus_FocusInfo_0x020f = 0 0 0 0 0 | | | | - Tag 0x020f (20 bytes, int32u[5]) | | | | 12) SceneDetect = 0 | | | | - Tag 0x0210 (2 bytes, int16u[1]) | | | | 13) SceneArea = 0 0 0 0 0 0 0 0 | | | | - Tag 0x0211 (32 bytes, int32u[8]) | | | | 14) SceneDetectData = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0[snip] | | | | - Tag 0x0212 (2880 bytes, int32u[720]) | | | | 15) Olympus_FocusInfo_0x0213 = 0 | | | | - Tag 0x0213 (2 bytes, int16u[1]) | | | | 16) Olympus_FocusInfo_0x0214 = 0 | | | | - Tag 0x0214 (2 bytes, int16u[1]) | | | | 17) Olympus_FocusInfo_0x0216 = 3951 | | | | - Tag 0x0216 (4 bytes, int32u[1]) | | | | 18) Olympus_FocusInfo_0x0217 = 288 | | | | - Tag 0x0217 (2 bytes, int16u[1]) | | | | 19) Olympus_FocusInfo_0x0218 = 167 | | | | - Tag 0x0218 (2 bytes, int16u[1]) | | | | 20) ZoomStepCount = 13 | | | | - Tag 0x0300 (2 bytes, int16u[1]) | | | | 21) FocusStepCount = 321 | | | | - Tag 0x0301 (2 bytes, int16u[1]) | | | | 22) Olympus_FocusInfo_0x0302 = 0 | | | | - Tag 0x0302 (2 bytes, int16u[1]) | | | | 23) FocusStepInfinity = 320 | | | | - Tag 0x0303 (2 bytes, int16u[1]) | | | | 24) FocusStepNear = 375 | | | | - Tag 0x0304 (2 bytes, int16u[1]) | | | | 25) FocusDistance = 100000 1 | | | | - Tag 0x0305 (8 bytes, rational64u[1] read as int32u[2]) | | | | 26) Olympus_FocusInfo_0x0307 = 0 | | | | - Tag 0x0307 (2 bytes, int16u[1]) | | | | 27) AFPoint = 0 | | | | - Tag 0x0308 (2 bytes, int16u[1]) | | | | 28) Olympus_FocusInfo_0x030c = 0 0 | | | | - Tag 0x030c (4 bytes, int16u[2]) | | | | 29) Olympus_FocusInfo_0x030f = 400 | | | | - Tag 0x030f (2 bytes, int16s[1]) | | | | 30) Olympus_FocusInfo_0x0310 = 0 | | | | - Tag 0x0310 (2 bytes, int16u[1]) | | | | 31) Olympus_FocusInfo_0x0311 = 0 | | | | - Tag 0x0311 (2 bytes, int16u[1]) | | | | 32) Olympus_FocusInfo_0x0312 = 76 906 | | | | - Tag 0x0312 (4 bytes, int16u[2]) | | | | 33) Olympus_FocusInfo_0x0313 = 302 | | | | - Tag 0x0313 (2 bytes, int16s[1]) | | | | 34) Olympus_FocusInfo_0x0314 = 10 | | | | - Tag 0x0314 (2 bytes, int16u[1]) | | | | 35) Olympus_FocusInfo_0x0315 = 0 | | | | - Tag 0x0315 (2 bytes, int16s[1]) | | | | 36) Olympus_FocusInfo_0x0316 = 3086 0 0 0 0 0 0 0 0 0 | | | | - Tag 0x0316 (20 bytes, int16s[10]) | | | | 37) Olympus_FocusInfo_0x031c = 0 | | | | - Tag 0x031c (2 bytes, int16s[1]) | | | | 38) Olympus_FocusInfo_0x031d = 319 | | | | - Tag 0x031d (2 bytes, int16s[1]) | | | | 39) Olympus_FocusInfo_0x031e = 321 | | | | - Tag 0x031e (2 bytes, int16s[1]) | | | | 40) Olympus_FocusInfo_0x0321 = 321 | | | | - Tag 0x0321 (2 bytes, int16s[1]) | | | | 41) Olympus_FocusInfo_0x0322 = 0 | | | | - Tag 0x0322 (2 bytes, int16s[1]) | | | | 42) Olympus_FocusInfo_0x0323 = 0 | | | | - Tag 0x0323 (2 bytes, int16s[1]) | | | | 43) Olympus_FocusInfo_0x0324 = 366 | | | | - Tag 0x0324 (2 bytes, int16s[1]) | | | | 44) Olympus_FocusInfo_0x1200 = 0 | | | | - Tag 0x1200 (2 bytes, int16u[1]) | | | | 45) ExternalFlash = 0 0 | | | | - Tag 0x1201 (4 bytes, int16u[2]) | | | | 46) Olympus_FocusInfo_0x1202 = 0 | | | | - Tag 0x1202 (2 bytes, int16u[1]) | | | | 47) ExternalFlashGuideNumber = 0 (0/1) | | | | - Tag 0x1203 (8 bytes, rational64s[1]) | | | | 48) ExternalFlashBounce = 0 | | | | - Tag 0x1204 (2 bytes, int16u[1]) | | | | 49) ExternalFlashZoom = 0 (0/1) | | | | - Tag 0x1205 (8 bytes, rational64u[1]) | | | | 50) Olympus_FocusInfo_0x1206 = 0 | | | | - Tag 0x1206 (2 bytes, int16u[1]) | | | | 51) Olympus_FocusInfo_0x1207 = 0 | | | | - Tag 0x1207 (2 bytes, int16u[1]) | | | | 52) InternalFlash = 0 | | | | - Tag 0x1208 (2 bytes, int16u[1]) | | | | 53) ImageStabilization = .00d.x.K.......T......T...O...... | | | | - Tag 0x1600 (53 bytes, undef[53]) | | 15) UserComment = [snip] | | - Tag 0x9286 (125 bytes, undef[125]) | | 16) FlashpixVersion = 0100 | | - Tag 0xa000 (4 bytes, undef[4]) | | 17) ColorSpace = 1 | | - Tag 0xa001 (2 bytes, int16u[1]) | | 18) ExifImageWidth = 3072 | | - Tag 0xa002 (4 bytes, int32u[1]) | | 19) ExifImageHeight = 2304 | | - Tag 0xa003 (4 bytes, int32u[1]) | | 20) InteropOffset (SubDirectory) --> | | - Tag 0xa005 (4 bytes, int32u[1]) | | + [InteropIFD directory with 2 entries] | | | 0) InteropIndex = R98 | | | - Tag 0x0001 (4 bytes, string[4]) | | | 1) InteropVersion = 0100 | | | - Tag 0x0002 (4 bytes, undef[4]) | | 21) FileSource = 3 | | - Tag 0xa300 (1 bytes, undef[1]) | | 22) CustomRendered = 0 | | - Tag 0xa401 (2 bytes, int16u[1]) | | 23) ExposureMode = 1 | | - Tag 0xa402 (2 bytes, int16u[1]) | | 24) WhiteBalance = 0 | | - Tag 0xa403 (2 bytes, int16u[1]) | | 25) DigitalZoomRatio = 1 (100/100) | | - Tag 0xa404 (8 bytes, rational64u[1]) | | 26) SceneCaptureType = 0 | | - Tag 0xa406 (2 bytes, int16u[1]) | | 27) GainControl = 0 | | - Tag 0xa407 (2 bytes, int16u[1]) | | 28) Contrast = 0 | | - Tag 0xa408 (2 bytes, int16u[1]) | | 29) Saturation = 0 | | - Tag 0xa409 (2 bytes, int16u[1]) | | 30) Sharpness = 0 | | - Tag 0xa40a (2 bytes, int16u[1]) | 11) PrintIM (SubDirectory) --> | - Tag 0xc4a5 (528 bytes, undef[528]) | + [PrintIM directory with 37 entries] | | PrintIMVersion = 0300 | | - Tag 'PrintIMVersion' (4 bytes) | | 0) PrintIM_0x0001 = 1310740 | | - Tag 0x0001 (4 bytes) | | 1) PrintIM_0x0002 = 1 | | - Tag 0x0002 (4 bytes) | | 2) PrintIM_0x0003 = 240 | | - Tag 0x0003 (4 bytes) | | 3) PrintIM_0x0007 = 0 | | - Tag 0x0007 (4 bytes) | | 4) PrintIM_0x0008 = 0 | | - Tag 0x0008 (4 bytes) | | 5) PrintIM_0x0009 = 0 | | - Tag 0x0009 (4 bytes) | | 6) PrintIM_0x000a = 0 | | - Tag 0x000a (4 bytes) | | 7) PrintIM_0x000b = 312 | | - Tag 0x000b (4 bytes) | | 8) PrintIM_0x000c = 0 | | - Tag 0x000c (4 bytes) | | 9) PrintIM_0x000d = 0 | | - Tag 0x000d (4 bytes) | | 10) PrintIM_0x000e = 336 | | - Tag 0x000e (4 bytes) | | 11) PrintIM_0x0010 = 352 | | - Tag 0x0010 (4 bytes) | | 12) PrintIM_0x0020 = 436 | | - Tag 0x0020 (4 bytes) | | 13) PrintIM_0x0100 = 3 | | - Tag 0x0100 (4 bytes) | | 14) PrintIM_0x0101 = 255 | | - Tag 0x0101 (4 bytes) | | 15) PrintIM_0x0102 = 131 | | - Tag 0x0102 (4 bytes) | | 16) PrintIM_0x0103 = 128 | | - Tag 0x0103 (4 bytes) | | 17) PrintIM_0x0104 = 131 | | - Tag 0x0104 (4 bytes) | | 18) PrintIM_0x0105 = 131 | | - Tag 0x0105 (4 bytes) | | 19) PrintIM_0x0106 = 131 | | - Tag 0x0106 (4 bytes) | | 20) PrintIM_0x0107 = 8421504 | | - Tag 0x0107 (4 bytes) | | 21) PrintIM_0x0110 = 128 | | - Tag 0x0110 (4 bytes) | | 22) PrintIM_0x0200 = 0 | | - Tag 0x0200 (4 bytes) | | 23) PrintIM_0x0207 = 0 | | - Tag 0x0207 (4 bytes) | | 24) PrintIM_0x0208 = 0 | | - Tag 0x0208 (4 bytes) | | 25) PrintIM_0x0209 = 0 | | - Tag 0x0209 (4 bytes) | | 26) PrintIM_0x020a = 0 | | - Tag 0x020a (4 bytes) | | 27) PrintIM_0x020b = 504 | | - Tag 0x020b (4 bytes) | | 28) PrintIM_0x020d = 0 | | - Tag 0x020d (4 bytes) | | 29) PrintIM_0x0220 = 470 | | - Tag 0x0220 (4 bytes) | | 30) PrintIM_0x0300 = 3 | | - Tag 0x0300 (4 bytes) | | 31) PrintIM_0x0301 = 255 | | - Tag 0x0301 (4 bytes) | | 32) PrintIM_0x0302 = 131 | | - Tag 0x0302 (4 bytes) | | 33) PrintIM_0x0303 = 131 | | - Tag 0x0303 (4 bytes) | | 34) PrintIM_0x0306 = 131 | | - Tag 0x0306 (4 bytes) | | 35) PrintIM_0x0310 = 128 | | - Tag 0x0310 (4 bytes) | | 36) PrintIM_0x0400 = 0 | | - Tag 0x0400 (4 bytes) + [IFD1 directory with 6 entries] | 0) Compression = 6 | - Tag 0x0103 (2 bytes, int16u[1]) | 1) XResolution = 72 (72/1) | - Tag 0x011a (8 bytes, rational64u[1]) | 2) YResolution = 72 (72/1) | - Tag 0x011b (8 bytes, rational64u[1]) | 3) ResolutionUnit = 2 | - Tag 0x0128 (2 bytes, int16u[1]) | 4) ThumbnailOffset = 7046 | - Tag 0x0201 (4 bytes, int32u[1]) | 5) ThumbnailLength = 28 | - Tag 0x0202 (4 bytes, int32u[1]) JPEG DQT (130 bytes): JPEG SOF0 (15 bytes): ImageWidth = 8 ImageHeight = 8 EncodingProcess = 0 BitsPerSample = 8 ColorComponents = 3 JPEG DHT (73 bytes): JPEG SOS ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Olympus_8.out����������������������������������������������������������������000644 �000765 �000024 �00000001737 12546457276 017310� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.98 [File, System, Image] FileName - File Name: Olympus.dss [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 80 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:06:24 09:57:14-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:06:24 10:20:42-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:06:24 10:15:07-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: DSS [File, File, Image] FileTypeExtension - File Type Extension: dss [File, File, Image] MIMEType - MIME Type: audio/x-dss [MakerNotes, Olympus, Audio] 12 - Model: DS2300 [MakerNotes, Olympus, Time] 38 - Start Time: 2005:11:16 13:52:42 [MakerNotes, Olympus, Time] 50 - End Time: 2005:11:16 13:52:53 [MakerNotes, Olympus, Audio] 62 - Duration: 10.00 s ���������������������������������Image-ExifTool-10.10/t/OpenEXR.t��������������������������������������������������������������������000644 �000765 �000024 �00000001275 11670665540 016312� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/OpenEXR.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::OpenEXR; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'OpenEXR'; my $testnum = 1; # test 2: Extract information from OpenEXR file { my $exifTool = new Image::ExifTool; ++$testnum; my $info = $exifTool->ImageInfo('t/images/OpenEXR.exr'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/OpenEXR_2.out����������������������������������������������������������������000644 �000765 �000024 �00000003127 12546457276 017105� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: OpenEXR.exr [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 395 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2011:12:10 14:34:35-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: EXR [File, File, Image] FileTypeExtension - File Type Extension: exr [File, File, Image] MIMEType - MIME Type: image/x-exr [File, File, Image] ImageWidth - Image Width: 3 [File, File, Image] ImageHeight - Image Height: 2 [OpenEXR, OpenEXR, Image] _ver - EXR Version: 2 [OpenEXR, OpenEXR, Image] _lay - Layout: Scan Lines [OpenEXR, OpenEXR, Image] channels - Channels: A half 1 1, B half 1 1, G half 1 1, R half 1 1 [OpenEXR, OpenEXR, Image] compression - Compression: PIZ [OpenEXR, OpenEXR, Image] dataWindow - Data Window: 0 0 2 1 [OpenEXR, OpenEXR, Image] displayWindow - Display Window: 0 0 2 1 [OpenEXR, OpenEXR, Image] lineOrder - Line Order: Increasing Y [OpenEXR, OpenEXR, Image] pixelAspectRatio - Pixel Aspect Ratio: 1 [OpenEXR, OpenEXR, Image] screenWindowCenter - Screen Window Center: 0 0 [OpenEXR, OpenEXR, Image] screenWindowWidth - Screen Window Width: 1 [Composite, Composite, Image] ImageSize - Image Size: 3x2 [Composite, Composite, Image] Megapixels - Megapixels: 0.000006 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Palm.t�����������������������������������������������������������������������000644 �000765 �000024 �00000001256 12341416001 015700� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Palm.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Palm; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Palm'; my $testnum = 1; # test 2: Extract information from MOBI book { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Palm.mobi'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Palm_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000004452 12546457276 016520� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Palm.mobi [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1382 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2014:05:29 12:42:41-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: MOBI [File, File, Image] FileTypeExtension - File Type Extension: mobi [File, File, Image] MIMEType - MIME Type: application/x-mobipocket-ebook [Palm, Palm, Document] 0 - Database Name: El_Diezmo_Continua_Vigente [Palm, Palm, Time] 9 - Create Date: 2014:05:27 20:00:51-04:00 [Palm, Palm, Time] 10 - Modify Date: 2014:05:27 20:00:51-04:00 [Palm, Palm, Time] 11 - Last Backup Date: 0000:00:00 00:00:00 [Palm, Palm, Document] 12 - Modification Number: 0 [Palm, Palm, Document] 15 - Palm File Type: Mobipocket [Palm, MOBI, Document] 0 - Compression: PalmDOC [Palm, MOBI, Document] 1 - Uncompressed Text Length: 168 kB [Palm, MOBI, Document] 3 - Encryption: None [Palm, MOBI, Document] 6 - Mobi Type: Mobipocket Book [Palm, MOBI, Document] 7 - Code Page: Windows Latin 1 (Western European) [Palm, MOBI, Document] 9 - Mobi Version: 6 [Palm, MOBI, Document] 21 - Book Name: El Diezmo Continua Vigente [Palm, MOBI, Document] 26 - Minimum Version: 6 [Palm, MOBI, Author] 100 - Author: Mike Peralta [Palm, MOBI, Document] 108 - Contributor: Smashwords, Inc. [Palm, MOBI, Document] 103 - Description: Hebreos 7:8 “Y aquí ciertamente reciben los diezmos hombres mortales; pero allí, uno [Jesucristo] de quien se da testimonio de que [Jesucristo] vive.†Basado en Hebreos 7:8, Jesús ahora recibe nuestros diezmos y esta en el Nuevo Testamento. Aquellos que dicen que el diezmo ya no se aplica están hablando falsamente y directamente opuestos al evangelio del Nuevo Testamento de Jesucristo. [Palm, MOBI, Document] 204 - Creator Software: Kindlegen (Linux) [Palm, MOBI, Document] 205 - Creator Major Version: 1 [Palm, MOBI, Document] 206 - Creator Minor Version: 1 [Palm, MOBI, Document] 207 - Creator Build Number: 98 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Panasonic.t������������������������������������������������������������������000644 �000765 �000024 �00000003032 11327642463 016734� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Panasonic.t". BEGIN { $| = 1; print "1..5\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Panasonic; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Panasonic'; my $testnum = 1; # test 2: Extract information from Panasonic.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Panasonic.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( ['Keywords' => 'cool'], ['ShootingMode' => 'Panning'], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum); print "ok $testnum\n"; } # test 4: Extract information from RW2 image { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Panasonic.rw2'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 5: Write to RW2 image { ++$testnum; my @writeInfo = ( ['XMP:Title' => 'new title'], ['IPTC:Keywords' => 'a keyword'], ['ModifyDate' => '2009:03:25 12:11:46'], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, "t/images/$testname.rw2"); print "ok $testnum\n"; } # end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Panasonic_2.out��������������������������������������������������������������000644 �000765 �000024 �00000013677 12546457276 017553� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Panasonic.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 6.9 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:04 14:02:27-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:50-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: Panasonic [EXIF, IFD0, Camera] 272 - Camera Model Name: DMC-FZ3 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2004:08:28 15:55:46 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/400 [EXIF, ExifIFD, Image] 33437 - F Number: 4.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 80 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2004:08:28 15:55:46 [EXIF, ExifIFD, Time] 36868 - Create Date: 2004:08:28 15:55:46 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 4 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.8 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 4.6 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2016 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1512 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 0 [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 35 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: None [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 6822 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y Cb Cr Positioning: Co-sited [MakerNotes, Panasonic, Camera] 1 - Image Quality: High [MakerNotes, Panasonic, Camera] 2 - Firmware Version: 0.1.0.8 [MakerNotes, Panasonic, Camera] 3 - White Balance: Auto [MakerNotes, Panasonic, Camera] 7 - Focus Mode: Auto [MakerNotes, Panasonic, Camera] 15 - AF Area Mode: 9-area [MakerNotes, Panasonic, Camera] 26 - Image Stabilization: On, Mode 2 [MakerNotes, Panasonic, Camera] 28 - Macro Mode: Off [MakerNotes, Panasonic, Camera] 31 - Shooting Mode: Program [MakerNotes, Panasonic, Camera] 32 - Audio: No [MakerNotes, Panasonic, Camera] 33 - Data Dump: (Binary data 5428 bytes) [MakerNotes, Panasonic, Camera] 35 - White Balance Bias: 0 [MakerNotes, Panasonic, Camera] 36 - Flash Bias: 0 [MakerNotes, Panasonic, Camera] 37 - Internal Serial Number: (S00) 2004:07:19 no. 0102 [MakerNotes, Panasonic, Camera] 38 - Panasonic Exif Version: 0100 [MakerNotes, Panasonic, Camera] 40 - Color Effect: Off [MakerNotes, Panasonic, Camera] 41 - Time Since Power On: 00:00:06.96 [MakerNotes, Panasonic, Camera] 42 - Burst Mode: Off [MakerNotes, Panasonic, Camera] 43 - Sequence Number: 0 [MakerNotes, Panasonic, Camera] 44 - Contrast Mode: Normal [MakerNotes, Panasonic, Camera] 45 - Noise Reduction: Standard [MakerNotes, Panasonic, Camera] 46 - Self Timer: Off [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [Composite, Composite, Image] Aperture - Aperture: 4.0 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 7.6 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/400 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.004 mm [Composite, Composite, Image] FOV - Field Of View: 54.4 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 4.6 mm (35 mm equivalent: 35.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 1.34 m [Composite, Composite, Image] LightValue - Light Value: 13.0 �����������������������������������������������������������������Image-ExifTool-10.10/t/Panasonic_3.out��������������������������������������������������������������000644 �000765 �000024 �00000016211 12546457276 017537� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Panasonic_3_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 7.0 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:50-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:50-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:50-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: ff6b1fa510bbe0d2c2323752af38a86b [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: Panasonic [EXIF, IFD0, Camera] 272 - Camera Model Name: DMC-FZ3 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2004:08:28 15:55:46 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/400 [EXIF, ExifIFD, Image] 33437 - F Number: 4.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 80 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2004:08:28 15:55:46 [EXIF, ExifIFD, Time] 36868 - Create Date: 2004:08:28 15:55:46 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 4 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.8 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 4.6 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2016 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1512 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 0 [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 35 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: None [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 6812 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y Cb Cr Positioning: Co-sited [MakerNotes, Panasonic, Camera] 1 - Image Quality: High [MakerNotes, Panasonic, Camera] 2 - Firmware Version: 0.1.0.8 [MakerNotes, Panasonic, Camera] 3 - White Balance: Auto [MakerNotes, Panasonic, Camera] 7 - Focus Mode: Auto [MakerNotes, Panasonic, Camera] 15 - AF Area Mode: 9-area [MakerNotes, Panasonic, Camera] 26 - Image Stabilization: On, Mode 2 [MakerNotes, Panasonic, Camera] 28 - Macro Mode: Off [MakerNotes, Panasonic, Camera] 31 - Shooting Mode: Panning [MakerNotes, Panasonic, Camera] 32 - Audio: No [MakerNotes, Panasonic, Camera] 33 - Data Dump: (Binary data 5428 bytes) [MakerNotes, Panasonic, Camera] 34 - Panasonic 0x0022: 0 [MakerNotes, Panasonic, Camera] 35 - White Balance Bias: 0 [MakerNotes, Panasonic, Camera] 36 - Flash Bias: 0 [MakerNotes, Panasonic, Camera] 37 - Internal Serial Number: (S00) 2004:07:19 no. 0102 [MakerNotes, Panasonic, Camera] 38 - Panasonic Exif Version: 0100 [MakerNotes, Panasonic, Camera] 39 - Panasonic 0x0027: 0 [MakerNotes, Panasonic, Camera] 40 - Color Effect: Off [MakerNotes, Panasonic, Camera] 41 - Time Since Power On: 00:00:06.96 [MakerNotes, Panasonic, Camera] 42 - Burst Mode: Off [MakerNotes, Panasonic, Camera] 43 - Sequence Number: 0 [MakerNotes, Panasonic, Camera] 44 - Contrast Mode: Normal [MakerNotes, Panasonic, Camera] 45 - Noise Reduction: Standard [MakerNotes, Panasonic, Camera] 46 - Self Timer: Off [MakerNotes, Panasonic, Camera] 47 - Panasonic 0x002f: 4 [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [PrintIM, PrintIM, Printing] 1 - Print IM 0x0001: 0x00160016 [PrintIM, PrintIM, Printing] 2 - Print IM 0x0002: 0x00000000 [PrintIM, PrintIM, Printing] 3 - Print IM 0x0003: 0x00000064 [PrintIM, PrintIM, Printing] 7 - Print IM 0x0007: 0x00000000 [PrintIM, PrintIM, Printing] 8 - Print IM 0x0008: 0x00000000 [PrintIM, PrintIM, Printing] 9 - Print IM 0x0009: 0x00000000 [PrintIM, PrintIM, Printing] 10 - Print IM 0x000a: 0x00000000 [PrintIM, PrintIM, Printing] 11 - Print IM 0x000b: 0x000000ac [PrintIM, PrintIM, Printing] 12 - Print IM 0x000c: 0x00000000 [PrintIM, PrintIM, Printing] 13 - Print IM 0x000d: 0x00000000 [PrintIM, PrintIM, Printing] 14 - Print IM 0x000e: 0x000000c4 [PrintIM, PrintIM, Printing] 256 - Print IM 0x0100: 0x00000005 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0x00000001 [PrintIM, PrintIM, Printing] 272 - Print IM 0x0110: 0x00000080 [IPTC, IPTC, Other] 25 - Keywords: cool [IPTC, IPTC, Other] 0 - Application Record Version: 4 [Composite, Composite, Image] Aperture - Aperture: 4.0 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 7.6 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/400 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.004 mm [Composite, Composite, Image] FOV - Field Of View: 54.4 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 4.6 mm (35 mm equivalent: 35.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 1.34 m [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] LightValue - Light Value: 13.0 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Panasonic_4.out��������������������������������������������������������������000644 �000765 �000024 �00000027653 12546457276 017554� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Panasonic.rw2 [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 12 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2009:03:25 12:10:29-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:34-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: RW2 [File, File, Image] FileTypeExtension - File Type Extension: rw2 [File, File, Image] MIMEType - MIME Type: image/x-panasonic-rw2 [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 1 - Panasonic Raw Version: 0300 [EXIF, IFD0, Image] 2 - Sensor Width: 3724 [EXIF, IFD0, Image] 3 - Sensor Height: 2754 [EXIF, IFD0, Image] 4 - Sensor Top Border: 6 [EXIF, IFD0, Image] 5 - Sensor Left Border: 8 [EXIF, IFD0, Image] 6 - Sensor Bottom Border: 2742 [EXIF, IFD0, Image] 7 - Sensor Right Border: 3656 [EXIF, IFD0, Image] 8 - Black Level 1: 1 [EXIF, IFD0, Image] 9 - Black Level 2: 4 [EXIF, IFD0, Image] 10 - Black Level 3: 12 [EXIF, IFD0, Image] 14 - Linearity Limit Red: 4095 [EXIF, IFD0, Image] 15 - Linearity Limit Green: 4095 [EXIF, IFD0, Image] 16 - Linearity Limit Blue: 4095 [EXIF, IFD0, Image] 23 - ISO: 80 [EXIF, IFD0, Image] 24 - High ISO Multiplier Red: 0 [EXIF, IFD0, Image] 25 - High ISO Multiplier Green: 0 [EXIF, IFD0, Image] 26 - High ISO Multiplier Blue: 0 [EXIF, IFD0, Image] 28 - Black Level Red: 0 [EXIF, IFD0, Image] 29 - Black Level Green: 0 [EXIF, IFD0, Image] 30 - Black Level Blue: 0 [EXIF, IFD0, Image] 36 - WB Red Level: 570 [EXIF, IFD0, Image] 37 - WB Green Level: 263 [EXIF, IFD0, Image] 38 - WB Blue Level: 438 [EXIF, IFD0, Camera] 271 - Make: Panasonic [EXIF, IFD0, Camera] 272 - Camera Model Name: DMC-LX3 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Ver.1.0 [EXIF, IFD0, Time] 306 - Modify Date: 2008:08:06 15:21:56 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/250 [EXIF, ExifIFD, Image] 33437 - F Number: 4.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Aperture-priority AE [EXIF, ExifIFD, Image] 34855 - ISO: 80 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2008:08:06 15:21:56 [EXIF, ExifIFD, Time] 36868 - Create Date: 2008:08:06 15:21:56 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 2 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.0 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 5.1 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 1920 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1440 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 0 [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 24 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: None [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 180 [EXIF, IFD1, Image] 283 - Y Resolution: 180 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 11976 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Preview] 46 - Jpg From Raw: (Binary data 10785 bytes) [EXIF, IFD0, Camera] 271 - Make: Panasonic [EXIF, IFD0, Camera] 272 - Camera Model Name: DMC-LX3 [EXIF, IFD0, Image] 273 - Strip Offsets: 4294967295 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 278 - Rows Per Strip: 2754 [EXIF, IFD0, Image] 279 - Strip Byte Counts: 20511792 [EXIF, IFD0, Image] 280 - Raw Data Offset: 12322 [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/250 [EXIF, ExifIFD, Image] 33437 - F Number: 4.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Aperture-priority AE [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2008:08:06 15:21:56 [EXIF, ExifIFD, Time] 36868 - Create Date: 2008:08:06 15:21:56 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.0 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 5.1 mm [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [PanasonicRaw, PanasonicRaw, Other] 0 - Num WB Entries: 7 [PanasonicRaw, PanasonicRaw, Other] 1 - WB Type 1: Fine Weather [PanasonicRaw, PanasonicRaw, Other] 2 - WB RGB Levels 1: 573 256 416 [PanasonicRaw, PanasonicRaw, Other] 5 - WB Type 2: Cloudy [PanasonicRaw, PanasonicRaw, Other] 6 - WB RGB Levels 2: 630 256 387 [PanasonicRaw, PanasonicRaw, Other] 9 - WB Type 3: Shade [PanasonicRaw, PanasonicRaw, Other] 10 - WB RGB Levels 3: 702 256 355 [PanasonicRaw, PanasonicRaw, Other] 13 - WB Type 4: Tungsten (Incandescent) [PanasonicRaw, PanasonicRaw, Other] 14 - WB RGB Levels 4: 378 256 592 [PanasonicRaw, PanasonicRaw, Other] 17 - WB Type 5: Flash [PanasonicRaw, PanasonicRaw, Other] 18 - WB RGB Levels 5: 651 256 377 [PanasonicRaw, PanasonicRaw, Other] 21 - WB Type 6: D55 [PanasonicRaw, PanasonicRaw, Other] 22 - WB RGB Levels 6: 590 256 421 [PanasonicRaw, PanasonicRaw, Other] 25 - WB Type 7: ISO Studio Tungsten [PanasonicRaw, PanasonicRaw, Other] 26 - WB RGB Levels 7: 378 256 592 [PanasonicRaw, PanasonicRaw, Image] 2 - Distortion Param 02: 0.010772705078125 [PanasonicRaw, PanasonicRaw, Image] 4 - Distortion Param 04: 0.02056884765625 [PanasonicRaw, PanasonicRaw, Image] 5 - Distortion Scale: 1 [PanasonicRaw, PanasonicRaw, Image] 7.1 - Distortion Correction: On [PanasonicRaw, PanasonicRaw, Image] 8 - Distortion Param 08: 0.12359619140625 [PanasonicRaw, PanasonicRaw, Image] 9 - Distortion Param 09: 0.00579833984375 [PanasonicRaw, PanasonicRaw, Image] 11 - Distortion Param 11: -0.02374267578125 [MakerNotes, Panasonic, Camera] 1 - Image Quality: Raw [MakerNotes, Panasonic, Camera] 2 - Firmware Version: 0.1.0.0 [MakerNotes, Panasonic, Camera] 3 - White Balance: Auto [MakerNotes, Panasonic, Camera] 7 - Focus Mode: Auto [MakerNotes, Panasonic, Camera] 15 - AF Area Mode: 1-area [MakerNotes, Panasonic, Camera] 26 - Image Stabilization: On, Mode 2 [MakerNotes, Panasonic, Camera] 28 - Macro Mode: Off [MakerNotes, Panasonic, Camera] 31 - Shooting Mode: Aperture Priority [MakerNotes, Panasonic, Camera] 32 - Audio: No [MakerNotes, Panasonic, Camera] 33 - Data Dump: (Binary data 8200 bytes) [MakerNotes, Panasonic, Camera] 36 - Flash Bias: 0 [MakerNotes, Panasonic, Camera] 37 - Internal Serial Number: (F35) 2008:07:01 no. 0058 [MakerNotes, Panasonic, Camera] 38 - Panasonic Exif Version: 0270 [MakerNotes, Panasonic, Camera] 40 - Color Effect: Off [MakerNotes, Panasonic, Camera] 41 - Time Since Power On: 00:10:33.08 [MakerNotes, Panasonic, Camera] 42 - Burst Mode: Off [MakerNotes, Panasonic, Camera] 43 - Sequence Number: 0 [MakerNotes, Panasonic, Camera] 44 - Contrast Mode: Normal [MakerNotes, Panasonic, Camera] 45 - Noise Reduction: Standard [MakerNotes, Panasonic, Camera] 46 - Self Timer: Off [MakerNotes, Panasonic, Camera] 48 - Rotation: Horizontal (normal) [MakerNotes, Panasonic, Camera] 49 - AF Assist Lamp: Enabled but Not Used [MakerNotes, Panasonic, Camera] 50 - Color Mode: Normal [MakerNotes, Panasonic, Camera] 51 - Baby Age: (not set) [MakerNotes, Panasonic, Camera] 52 - Optical Zoom Mode: Standard [MakerNotes, Panasonic, Camera] 53 - Conversion Lens: Off [MakerNotes, Panasonic, Camera] 54 - Travel Day: n/a [MakerNotes, Panasonic, Camera] 57 - Contrast: Normal [MakerNotes, Panasonic, Camera] 58 - World Time Location: Home [MakerNotes, Panasonic, Camera] 59 - Text Stamp: Off [MakerNotes, Panasonic, Camera] 60 - Program ISO: 80 [MakerNotes, Panasonic, Camera] 61 - Advanced Scene Type: 1 [MakerNotes, Panasonic, Camera] 62 - Text Stamp: Off [MakerNotes, Panasonic, Camera] 63 - Faces Detected: 0 [MakerNotes, Panasonic, Camera] 64 - Saturation: Normal [MakerNotes, Panasonic, Camera] 65 - Sharpness: Normal [MakerNotes, Panasonic, Camera] 66 - Film Mode: Standard (color) [MakerNotes, Panasonic, Camera] 68 - Color Temp Kelvin: 0 [MakerNotes, Panasonic, Camera] 70 - WB Shift AB: 0 [MakerNotes, Panasonic, Camera] 71 - WB Shift GM: 0 [MakerNotes, Panasonic, Camera] 72 - Flash Curtain: n/a [MakerNotes, Panasonic, Camera] 75 - Panasonic Image Width: 3648 [MakerNotes, Panasonic, Camera] 76 - Panasonic Image Height: 2736 [MakerNotes, Panasonic, Camera] 77 - AF Point Position: 0.5 0.5 [MakerNotes, Panasonic, Image] 0 - Num Face Positions: 0 [MakerNotes, Panasonic, Camera] 32768 - Maker Note Version: 0130 [MakerNotes, Panasonic, Camera] 32769 - Scene Mode: Off [MakerNotes, Panasonic, Camera] 32772 - WB Red Level: 2283 [MakerNotes, Panasonic, Camera] 32773 - WB Green Level: 1054 [MakerNotes, Panasonic, Camera] 32774 - WB Blue Level: 1752 [MakerNotes, Panasonic, Camera] 32775 - Flash Fired: No [MakerNotes, Panasonic, Camera] 32776 - Text Stamp: Off [MakerNotes, Panasonic, Camera] 32777 - Text Stamp: Off [MakerNotes, Panasonic, Camera] 32784 - Baby Age: (not set) [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [Composite, Composite, Camera] AdvancedSceneMode - Advanced Scene Mode: Off [Composite, Composite, Image] Aperture - Aperture: 4.0 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.665399 [Composite, Composite, Other] ImageHeight - Image Height: 2736 [Composite, Composite, Other] ImageWidth - Image Width: 3648 [Composite, Composite, Camera] RedBalance - Red Balance: 2.1673 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 4.7 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/250 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.006 mm [Composite, Composite, Image] FOV - Field Of View: 73.7 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 5.1 mm (35 mm equivalent: 24.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 1.02 m [Composite, Composite, Image] ImageSize - Image Size: 3648x2736 [Composite, Composite, Image] LightValue - Light Value: 12.3 [Composite, Composite, Image] Megapixels - Megapixels: 10.0 �������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Panasonic_5.out��������������������������������������������������������������000644 �000765 �000024 �00000034160 12554462433 017532� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.00 [File, System, Image] FileName - File Name: Panasonic_5_failed.rw2 [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 14 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:07:24 12:16:25-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:07:24 12:16:25-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:07:24 12:16:25-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: RW2 [File, File, Image] FileTypeExtension - File Type Extension: rw2 [File, File, Image] MIMEType - MIME Type: image/x-panasonic-rw2 [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 85c7e966b2683711ba91f562579e3d76 [EXIF, IFD0, Image] 1 - Panasonic Raw Version: 0300 [EXIF, IFD0, Image] 2 - Sensor Width: 3724 [EXIF, IFD0, Image] 3 - Sensor Height: 2754 [EXIF, IFD0, Image] 4 - Sensor Top Border: 6 [EXIF, IFD0, Image] 5 - Sensor Left Border: 8 [EXIF, IFD0, Image] 6 - Sensor Bottom Border: 2742 [EXIF, IFD0, Image] 7 - Sensor Right Border: 3656 [EXIF, IFD0, Image] 8 - Black Level 1: 1 [EXIF, IFD0, Image] 9 - Black Level 2: 4 [EXIF, IFD0, Image] 10 - Black Level 3: 12 [EXIF, IFD0, Image] 11 - Panasonic Raw 0x000b: 34316 [EXIF, IFD0, Image] 13 - Panasonic Raw 0x000d: 1 [EXIF, IFD0, Image] 14 - Linearity Limit Red: 4095 [EXIF, IFD0, Image] 15 - Linearity Limit Green: 4095 [EXIF, IFD0, Image] 16 - Linearity Limit Blue: 4095 [EXIF, IFD0, Image] 23 - ISO: 80 [EXIF, IFD0, Image] 24 - High ISO Multiplier Red: 0 [EXIF, IFD0, Image] 25 - High ISO Multiplier Green: 0 [EXIF, IFD0, Image] 26 - High ISO Multiplier Blue: 0 [EXIF, IFD0, Image] 27 - Panasonic Raw 0x001b: .d...È....... [EXIF, IFD0, Image] 28 - Black Level Red: 0 [EXIF, IFD0, Image] 29 - Black Level Green: 0 [EXIF, IFD0, Image] 30 - Black Level Blue: 0 [EXIF, IFD0, Image] 36 - WB Red Level: 570 [EXIF, IFD0, Image] 37 - WB Green Level: 263 [EXIF, IFD0, Image] 38 - WB Blue Level: 438 [EXIF, IFD0, Image] 45 - Panasonic Raw 0x002d: 4 [EXIF, IFD0, Camera] 271 - Make: Panasonic [EXIF, IFD0, Camera] 272 - Camera Model Name: DMC-LX3 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Ver.1.0 [EXIF, IFD0, Time] 306 - Modify Date: 2009:03:25 12:11:46 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/250 [EXIF, ExifIFD, Image] 33437 - F Number: 4.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Aperture-priority AE [EXIF, ExifIFD, Image] 34855 - ISO: 80 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2008:08:06 15:21:56 [EXIF, ExifIFD, Time] 36868 - Create Date: 2008:08:06 15:21:56 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 2 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.0 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 5.1 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 1920 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1440 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 0 [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 24 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: None [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 180 [EXIF, IFD1, Image] 283 - Y Resolution: 180 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 11042 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Preview] 46 - Jpg From Raw: (Binary data 10781 bytes) [EXIF, IFD0, Camera] 271 - Make: Panasonic [EXIF, IFD0, Camera] 272 - Camera Model Name: DMC-LX3 [EXIF, IFD0, Image] 273 - Strip Offsets: 4294967295 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 278 - Rows Per Strip: 2754 [EXIF, IFD0, Image] 279 - Strip Byte Counts: 20511792 [EXIF, IFD0, Image] 280 - Raw Data Offset: 14554 [EXIF, IFD0, Image] 282 - Panasonic Raw 0x011a: 1 [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/250 [EXIF, ExifIFD, Image] 33437 - F Number: 4.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Aperture-priority AE [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2008:08:06 15:21:56 [EXIF, ExifIFD, Time] 36868 - Create Date: 2008:08:06 15:21:56 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.0 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 5.1 mm [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [PanasonicRaw, PanasonicRaw, Other] 0 - Num WB Entries: 7 [PanasonicRaw, PanasonicRaw, Other] 1 - WB Type 1: Fine Weather [PanasonicRaw, PanasonicRaw, Other] 2 - WB RGB Levels 1: 573 256 416 [PanasonicRaw, PanasonicRaw, Other] 5 - WB Type 2: Cloudy [PanasonicRaw, PanasonicRaw, Other] 6 - WB RGB Levels 2: 630 256 387 [PanasonicRaw, PanasonicRaw, Other] 9 - WB Type 3: Shade [PanasonicRaw, PanasonicRaw, Other] 10 - WB RGB Levels 3: 702 256 355 [PanasonicRaw, PanasonicRaw, Other] 13 - WB Type 4: Tungsten (Incandescent) [PanasonicRaw, PanasonicRaw, Other] 14 - WB RGB Levels 4: 378 256 592 [PanasonicRaw, PanasonicRaw, Other] 17 - WB Type 5: Flash [PanasonicRaw, PanasonicRaw, Other] 18 - WB RGB Levels 5: 651 256 377 [PanasonicRaw, PanasonicRaw, Other] 21 - WB Type 6: D55 [PanasonicRaw, PanasonicRaw, Other] 22 - WB RGB Levels 6: 590 256 421 [PanasonicRaw, PanasonicRaw, Other] 25 - WB Type 7: ISO Studio Tungsten [PanasonicRaw, PanasonicRaw, Other] 26 - WB RGB Levels 7: 378 256 592 [PanasonicRaw, PanasonicRaw, Image] 2 - Distortion Param 02: 0.010772705078125 [PanasonicRaw, PanasonicRaw, Image] 4 - Distortion Param 04: 0.02056884765625 [PanasonicRaw, PanasonicRaw, Image] 5 - Distortion Scale: 1 [PanasonicRaw, PanasonicRaw, Image] 7.1 - Distortion Correction: On [PanasonicRaw, PanasonicRaw, Image] 8 - Distortion Param 08: 0.12359619140625 [PanasonicRaw, PanasonicRaw, Image] 9 - Distortion Param 09: 0.00579833984375 [PanasonicRaw, PanasonicRaw, Image] 11 - Distortion Param 11: -0.02374267578125 [PanasonicRaw, PanasonicRaw, Image] 12 - Distortion N: 2280 [MakerNotes, Panasonic, Camera] 1 - Image Quality: Raw [MakerNotes, Panasonic, Camera] 2 - Firmware Version: 0.1.0.0 [MakerNotes, Panasonic, Camera] 3 - White Balance: Auto [MakerNotes, Panasonic, Camera] 7 - Focus Mode: Auto [MakerNotes, Panasonic, Camera] 15 - AF Area Mode: 1-area [MakerNotes, Panasonic, Camera] 26 - Image Stabilization: On, Mode 2 [MakerNotes, Panasonic, Camera] 28 - Macro Mode: Off [MakerNotes, Panasonic, Camera] 31 - Shooting Mode: Aperture Priority [MakerNotes, Panasonic, Camera] 32 - Audio: No [MakerNotes, Panasonic, Camera] 33 - Data Dump: (Binary data 8200 bytes) [MakerNotes, Panasonic, Camera] 34 - Panasonic 0x0022: 0 [MakerNotes, Panasonic, Camera] 36 - Flash Bias: 0 [MakerNotes, Panasonic, Camera] 37 - Internal Serial Number: (F35) 2008:07:01 no. 0058 [MakerNotes, Panasonic, Camera] 38 - Panasonic Exif Version: 0270 [MakerNotes, Panasonic, Camera] 39 - Panasonic 0x0027: 0 [MakerNotes, Panasonic, Camera] 40 - Color Effect: Off [MakerNotes, Panasonic, Camera] 41 - Time Since Power On: 00:10:33.08 [MakerNotes, Panasonic, Camera] 42 - Burst Mode: Off [MakerNotes, Panasonic, Camera] 43 - Sequence Number: 0 [MakerNotes, Panasonic, Camera] 44 - Contrast Mode: Normal [MakerNotes, Panasonic, Camera] 45 - Noise Reduction: Standard [MakerNotes, Panasonic, Camera] 46 - Self Timer: Off [MakerNotes, Panasonic, Camera] 47 - Panasonic 0x002f: 1 [MakerNotes, Panasonic, Camera] 48 - Rotation: Horizontal (normal) [MakerNotes, Panasonic, Camera] 49 - AF Assist Lamp: Enabled but Not Used [MakerNotes, Panasonic, Camera] 50 - Color Mode: Normal [MakerNotes, Panasonic, Camera] 51 - Baby Age: (not set) [MakerNotes, Panasonic, Camera] 52 - Optical Zoom Mode: Standard [MakerNotes, Panasonic, Camera] 53 - Conversion Lens: Off [MakerNotes, Panasonic, Camera] 54 - Travel Day: n/a [MakerNotes, Panasonic, Camera] 55 - Panasonic 0x0037: 257 [MakerNotes, Panasonic, Camera] 56 - Panasonic 0x0038: 1 [MakerNotes, Panasonic, Camera] 57 - Contrast: Normal [MakerNotes, Panasonic, Camera] 58 - World Time Location: Home [MakerNotes, Panasonic, Camera] 59 - Text Stamp: Off [MakerNotes, Panasonic, Camera] 60 - Program ISO: 80 [MakerNotes, Panasonic, Camera] 61 - Advanced Scene Type: 1 [MakerNotes, Panasonic, Camera] 62 - Text Stamp: Off [MakerNotes, Panasonic, Camera] 63 - Faces Detected: 0 [MakerNotes, Panasonic, Camera] 64 - Saturation: Normal [MakerNotes, Panasonic, Camera] 65 - Sharpness: Normal [MakerNotes, Panasonic, Camera] 66 - Film Mode: Standard (color) [MakerNotes, Panasonic, Camera] 67 - Panasonic 0x0043: 2 [MakerNotes, Panasonic, Camera] 68 - Color Temp Kelvin: 0 [MakerNotes, Panasonic, Camera] 70 - WB Shift AB: 0 [MakerNotes, Panasonic, Camera] 71 - WB Shift GM: 0 [MakerNotes, Panasonic, Camera] 72 - Flash Curtain: n/a [MakerNotes, Panasonic, Camera] 74 - Panasonic 0x004a: 0 [MakerNotes, Panasonic, Camera] 75 - Panasonic Image Width: 3648 [MakerNotes, Panasonic, Camera] 76 - Panasonic Image Height: 2736 [MakerNotes, Panasonic, Camera] 77 - AF Point Position: 0.5 0.5 [MakerNotes, Panasonic, Image] 0 - Num Face Positions: 0 [MakerNotes, Panasonic, Camera] 79 - Panasonic 0x004f: 0 [MakerNotes, Panasonic, Camera] 85 - Panasonic 0x0055: 1 [MakerNotes, Panasonic, Camera] 87 - Panasonic 0x0057: 0 [MakerNotes, Panasonic, Camera] 94 - Panasonic 0x005e: . [MakerNotes, Panasonic, Camera] 32768 - Maker Note Version: 0130 [MakerNotes, Panasonic, Camera] 32769 - Scene Mode: Off [MakerNotes, Panasonic, Camera] 32770 - Panasonic 0x8002: 2 [MakerNotes, Panasonic, Camera] 32771 - Panasonic 0x8003: 1 [MakerNotes, Panasonic, Camera] 32772 - WB Red Level: 2283 [MakerNotes, Panasonic, Camera] 32773 - WB Green Level: 1054 [MakerNotes, Panasonic, Camera] 32774 - WB Blue Level: 1752 [MakerNotes, Panasonic, Camera] 32775 - Flash Fired: No [MakerNotes, Panasonic, Camera] 32776 - Text Stamp: Off [MakerNotes, Panasonic, Camera] 32777 - Text Stamp: Off [MakerNotes, Panasonic, Camera] 32784 - Baby Age: (not set) [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [PrintIM, PrintIM, Printing] 1 - Print IM 0x0001: 0x00160016 [PrintIM, PrintIM, Printing] 2 - Print IM 0x0002: 0x00000000 [PrintIM, PrintIM, Printing] 3 - Print IM 0x0003: 0x00000064 [PrintIM, PrintIM, Printing] 7 - Print IM 0x0007: 0x00000000 [PrintIM, PrintIM, Printing] 8 - Print IM 0x0008: 0x00000000 [PrintIM, PrintIM, Printing] 9 - Print IM 0x0009: 0x00000000 [PrintIM, PrintIM, Printing] 10 - Print IM 0x000a: 0x00000000 [PrintIM, PrintIM, Printing] 11 - Print IM 0x000b: 0x000000ac [PrintIM, PrintIM, Printing] 12 - Print IM 0x000c: 0x00000000 [PrintIM, PrintIM, Printing] 13 - Print IM 0x000d: 0x00000000 [PrintIM, PrintIM, Printing] 14 - Print IM 0x000e: 0x000000c4 [PrintIM, PrintIM, Printing] 256 - Print IM 0x0100: 0x00000005 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0x00000001 [PrintIM, PrintIM, Printing] 272 - Print IM 0x0110: 0x00000080 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 10.00 [XMP, XMP-dc, Image] title - Title: new title [IPTC, IPTC, Other] 25 - Keywords: a keyword [IPTC, IPTC, Other] 0 - Application Record Version: 4 [Composite, Composite, Camera] AdvancedSceneMode - Advanced Scene Mode: Off [Composite, Composite, Image] Aperture - Aperture: 4.0 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.665399 [Composite, Composite, Other] ImageHeight - Image Height: 2736 [Composite, Composite, Other] ImageWidth - Image Width: 3648 [Composite, Composite, Camera] RedBalance - Red Balance: 2.1673 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 4.7 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/250 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.006 mm [Composite, Composite, Image] FOV - Field Of View: 73.7 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 5.1 mm (35 mm equivalent: 24.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 1.02 m [Composite, Composite, Image] ImageSize - Image Size: 3648x2736 [Composite, Composite, Image] LightValue - Light Value: 12.3 [Composite, Composite, Image] Megapixels - Megapixels: 10.0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PDF.t������������������������������������������������������������������������000644 �000765 �000024 �00000025202 12405607545 015435� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/PDF.t". BEGIN { $| = 1; print "1..26\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::PDF; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'PDF'; my $testnum = 1; #------------------------------------------------------------------------------ # PDF decryption test # Inputs: 0) Encrypt object reference, plus additional entries (see below), # 1) Test number, 2) encrypt flag (false for decryption) # Returns: nothing, but prints test result # Additional encrypt hash entries used by this routine: # _id - PDF file ID # _ref - PDF object reference string # _req - other module required for this test # _ciphertext - encrypted data # _plaintext - expected decryption result # _password - password for decryption (if used) sub CryptTest($$;$) { my ($cryptInfo, $testNum, $encrypt) = @_; my $skip = ''; if (eval "require $$cryptInfo{_req}") { my $exifTool = new Image::ExifTool; $exifTool->Options('Password', $$cryptInfo{_password}); my $err = Image::ExifTool::PDF::DecryptInit($exifTool, $cryptInfo, $$cryptInfo{_id}); unless ($err) { my $data = $$cryptInfo{$encrypt ? '_plaintext' : '_ciphertext'}; Image::ExifTool::PDF::Crypt(\$data, $$cryptInfo{_ref} || '1 0 R', $encrypt); $err = $$cryptInfo{_error}; if (not $err and $data ne $$cryptInfo{$encrypt ? '_ciphertext' : '_plaintext'}) { $err = "Test $testnum (decryption) returned wrong value:\n " . unpack('H*',$data); } } if ($err) { warn "\n $err\n"; print 'not '; } } else { $skip = " # skip Requires $$cryptInfo{_req}"; } print "ok $testnum$skip\n"; } # test 2: Extract information from PDF.pdf { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/PDF.pdf'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Test Standard PDF decryption { ++$testnum; my %cryptInfo = ( Filter => '/Standard', P => -60, V => 1, R => 0, O => '<2055c756c72e1ad702608e8196acad447ad32d17cff583235f6dd15fed7dab67>', U => '<7150bd1da9d292af3627fca6a8dde1d696e25312041aed09059f9daee04353ae>', _id => pack('H*','12116a1a124ae4cd8179e8978f6ac88b'), _req => 'Digest::MD5', _ref => '4 0 R', _ciphertext => pack('N', 0x34a290d3), _plaintext => pack('N', 0x5924d335), ); CryptTest(\%cryptInfo, $testNum); } # tests 4-21: Test writing, deleting and reverting two different files { # do a bunch of edits my @edits = ([ # (on file containing both PDF Info and XMP) [ # test 4: write PDF and XMP information [ 'PDF:Creator' => 'me'], [ 'XMP:Creator' => 'you' ], [ 'AllDates' => '2:30', Shift => -1 ], ],[ # test 5: delete all PDF [ 'PDF:all' ], ],[ # test 6: write some XMP [ 'XMP:Author' => 'them' ], ],[ # test 7: create new PDF [ 'PDF:Keywords' => 'one' ], [ 'PDF:Keywords' => 'two' ], [ 'AppleKeywords' => 'three' ], [ 'AppleKeywords' => 'four' ], ],[ # test 8: delete all XMP [ 'XMP:all' ], ],[ # test 9: write some PDF [ 'PDF:Keywords' => 'another one', AddValue => 1 ], [ 'AppleKeywords' => 'three', DelValue => 1 ], ],[ # test 10: create new XMP [ 'XMP:Author' => 'us' ], ],[ # test 11: write some PDF [ 'PDF:Keywords' => 'two', DelValue => 1 ], [ 'AppleKeywords' => 'five', AddValue => 1 ], ],[ # test 12: delete re-added XMP [ 'XMP:all' ], ], ],[ # (on file without PDF Info or XMP) [ # test 14: create new XMP [ 'XMP:Author' => 'him' ], ],[ # test 15: create new PDF [ 'PDF:Author' => 'her' ], ],[ # test 16: delete XMP and PDF [ 'XMP:all' ], [ 'PDF:all' ], ],[ # test 17: delete XMP and PDF again [ 'XMP:all' ], [ 'PDF:all' ], ],[ # test 18: create new PDF [ 'PDF:Author' => 'it' ], ],[ # test 19: create new XMP [ 'XMP:Author' => 'thing' ], ],[ # test 20: delete all [ 'all' ], ], ]); my $testSet; foreach $testSet (0,1) { my ($edit, $testfile2, $lastOK); my $testfile = 't/images/' . ($testSet ? 'PDF2.pdf' : 'PDF.pdf'); my $testfile1 = $testfile; my $exifTool = new Image::ExifTool; $exifTool->Options(PrintConv => 0); foreach $edit (@{$edits[$testSet]}) { ++$testnum; $exifTool->SetNewValue(); $exifTool->SetNewValue(@$_) foreach @$edit; $testfile2 = "t/${testname}_${testnum}_failed.pdf"; unlink $testfile2; $exifTool->WriteInfo($testfile1, $testfile2); my $info = $exifTool->ImageInfo($testfile2, qw{Filesize PDF:all XMP:Creator XMP:Author AllDates}); my $ok = check($exifTool, $info, $testname, $testnum); print 'not ' unless $ok; print "ok $testnum\n"; # erase source file if previous test was OK unlink $testfile1 if $lastOK; $lastOK = $ok; $testfile1 = $testfile2; # use this file for the next test } # revert all edits and compare with original file ++$testnum; $exifTool->SetNewValue('PDF-update:all'); $testfile2 = "t/${testname}_${testnum}_failed.pdf"; unlink $testfile2; $exifTool->WriteInfo($testfile1, $testfile2); if (binaryCompare($testfile2, $testfile)) { unlink $testfile2; } else { print 'not '; } print "ok $testnum\n"; unlink $testfile1 if $lastOK; } } # test 22: Delete all tags { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.pdf"; unlink $testfile; $exifTool->Options(IgnoreMinorErrors => 1); $exifTool->SetNewValue(all => undef); my $ok = writeInfo($exifTool, 't/images/PDF.pdf', $testfile); $exifTool->Options(IgnoreMinorErrors => 0); my $info = $exifTool->ImageInfo($testfile,'pdf:all','xmp:all',{Duplicates=>1,Unknown=>1}); if ($ok and check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 23: Test AES decryption alone (tests 24-26 require Digest::MD5 or Digest::SHA) { ++$testnum; require Image::ExifTool::AES; my $data = pack('H*','6fdc3ca684348bc8f31379aa46455d7b60c0989e027c1d82e746f136d6e95b7485735793ff64310e5b9e367dcc26f564'); my $err = Image::ExifTool::AES::Crypt(\$data, '11223344556677889900112233445566'); if ($err) { warn "\n $err\n"; print 'not '; } elsif ($data ne 'ExifTool AES Test') { my $hex = unpack 'H*', $data; warn "\n Incorrect result from AES decryption:\n"; warn " $hex\n"; print 'not '; } print "ok $testnum\n"; } # test 24-26: Test AESV2 and AESV3 decryption { my @encrypt = ( # AESV2 without password { Filter => '/Standard', V => 4, R => 4, P => -1340, Length => 128, StmF => '/StdCF', StrF => '/StdCF', CF => { StdCF => { AuthEvent => '/DocOpen', CFM => '/AESV2', Length => 16, }, }, EncryptMetadata => 'false', O => '<181ee8e93a99fa1c2a534dd68a5ab07c54268cfe8fbf28c468316b6f732674c1>', U => '<a3525aef4143f4419c78b109317f0e5200000000000000000000000000000000>', _req => 'Digest::MD5', _ref => '4 0 R', _id => pack('H*','d0a736f05faf64c6b52dea82a2ad53e0'), _plaintext => 'This was a test', _ciphertext => pack('H*', 'a86b5e00d9c7e4455cf5d8cedf195c2060e1467ea6d698876a77e9a66cb7867c'), }, # AESV3 without password { Filter => '/Standard', V => 5, R => 5, P => -1028, Length => 256, StmF => '/StdCF', StrF => '/StdCF', CF => { StdCF => { AuthEvent => '/DocOpen', CFM => '/AESV3', Length => 32, }, }, Perms => '<014ee28fe2b91e2198a593b7c3b22f50>', O => '<83e5edfcdecbe2ebe6d519dbafe80fd453028dda119eb76d0216e1344392320d60e1467ea6d698876a77e9a66cb7867c>', U => '<e5e7ade8aebdc9413a0fd176efc4081bdbad3b16a67ece7a01fadb24010a003ea86b5e00d9c7e4455cf5d8cedf195c20>', OE => '<a29f37f1f085b575d9016daad05ca466dd073ba5d067cc7ffa8ef7d1605e460e>', UE => '<47ea891b25af77aaceccf8f2fdeff0c09e9d0f67275f059dbfabbb18fcbf848d>', _req => 'Digest::SHA', _ref => 'dummy', _id => pack('H*','618cb5be1d82fceea9a501b62d408296'), _plaintext => 'This was a test', _ciphertext => pack('H*', 'e90756e8fd60fb7390c34d931e3e3d61898cd133e613e8cf86cd40f7b207a62d'), }, # AESV3 with a password { Filter => '/Standard', V => 5, R => 5, P => -1028, Length => 256, StmF => '/StdCF', StrF => '/StdCF', CF => { StdCF => { AuthEvent => '/DocOpen', CFM => '/AESV3', Length => 32, }, }, Perms => '<014ee28fe2b91e2198a593b7c3b22f50>', O => '<31eefe924a298d8bf19eafc9be6abdfa65a97478f94e907dccff5ac000b83fa521167b86cf70bf77d4a054bc9a59573d>', U => '<6525a788c2ebf27baa45f526bcdb9d2f96c3c67ae1c62324135cac0b823451ba9ad8edb68d167d2d8370d799c41d17d7>', OE => '<ea58e3c731999cdc0f8a395c7391836c2b2db0b4ac86439b3fe5692ddc71671a>', UE => '<f6818f43e176dfe8912f62717032169cf48854f540f7b7641be363ef50371f07>', _req => 'Digest::SHA', _ref => 'dummy', _id => pack('H*','b5f9d17b07152a45bc0a939727c389ad'), _plaintext => 'This was a test', _password => 'ExifTool', _ciphertext => pack('H*', '8bb3565d8c4b9df8cc350954d9f91a46aa47e40eeb5a0cff559acd5ec3e94244'), }); my $exifTool = new Image::ExifTool; my $cryptInfo; foreach $cryptInfo (@encrypt) { ++$testnum; my $encrypt = 0; # (set to 1 to generate ciphertext strings) CryptTest($cryptInfo, $testNum, $encrypt); } } # end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PDF_10.out�������������������������������������������������������������������000644 �000765 �000024 �00000001046 12554462433 016301� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 12163 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Count - Page Count: 1 [PDF, PDF, Document] AAPL:Keywords - Apple Keywords: four [PDF, PDF, Document] Keywords - Keywords: [one,two,another one] [EXIF, IFD0, Time] 306 - Modify Date: 2005:07:18 14:30:45 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [XMP, XMP-pdf, Author] Author - Author: us ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PDF_11.out�������������������������������������������������������������������000644 �000765 �000024 �00000001051 12554462433 016276� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 12165 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Count - Page Count: 1 [PDF, PDF, Document] AAPL:Keywords - Apple Keywords: [four,five] [PDF, PDF, Document] Keywords - Keywords: [one,another one] [EXIF, IFD0, Time] 306 - Modify Date: 2005:07:18 14:30:45 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [XMP, XMP-pdf, Author] Author - Author: us ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PDF_12.out�������������������������������������������������������������������000644 �000765 �000024 �00000000775 11511417126 016302� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 9256 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Count - Page Count: 1 [PDF, PDF, Document] AAPL:Keywords - Apple Keywords: [four,five] [PDF, PDF, Document] Keywords - Keywords: [one,another one] [EXIF, IFD0, Time] 306 - Modify Date: 2005:07:18 14:30:45 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 ���Image-ExifTool-10.10/t/PDF_14.out�������������������������������������������������������������������000644 �000765 �000024 �00000000355 12554462433 016307� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 5412 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Count - Page Count: 1 [XMP, XMP-pdf, Author] Author - Author: him �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PDF_15.out�������������������������������������������������������������������000644 �000765 �000024 �00000000425 12554462433 016306� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 5481 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Count - Page Count: 1 [PDF, PDF, Author] Author - Author: her [XMP, XMP-pdf, Author] Author - Author: him �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PDF_16.out�������������������������������������������������������������������000644 �000765 �000024 �00000000301 11471526456 016303� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 2508 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Count - Page Count: 1 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PDF_17.out�������������������������������������������������������������������000644 �000765 �000024 �00000000301 11471526456 016304� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 2508 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Count - Page Count: 1 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PDF_18.out�������������������������������������������������������������������000644 �000765 �000024 �00000000350 11471526456 016311� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 2576 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Count - Page Count: 1 [PDF, PDF, Author] Author - Author: it ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PDF_19.out�������������������������������������������������������������������000644 �000765 �000024 �00000000426 12554462433 016313� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 5482 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Count - Page Count: 1 [PDF, PDF, Author] Author - Author: it [XMP, XMP-pdf, Author] Author - Author: thing ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PDF_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000015730 12546457276 016241� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: PDF.pdf [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 8.7 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2009:07:23 11:38:00-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:17-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PDF [File, File, Image] FileTypeExtension - File Type Extension: pdf [File, File, Image] MIMEType - MIME Type: application/pdf [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: No [PDF, PDF, Document] Creator - Creator: Adobe Photoshop 7.0 [PDF, PDF, Time] CreationDate - Create Date: 2005:07:18 14:30:45-04:00 [PDF, PDF, Time] ModDate - Modify Date: 2005:07:18 14:30:45-04:00 [PDF, PDF, Document] Producer - Producer: Adobe Photoshop for Macintosh [PDF, PDF, Document] Count - Page Count: 1 [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 120 - Caption-Abstract: A witty caption [IPTC, IPTC, Author] 122 - Writer-Editor: I wrote it [IPTC, IPTC, Other] 105 - Headline: No headline [IPTC, IPTC, Other] 40 - Special Instructions: What instructions [IPTC, IPTC, Author] 80 - By-line: Phil Harvey [IPTC, IPTC, Author] 85 - By-line Title: My Position [IPTC, IPTC, Author] 110 - Credit: My Credit [IPTC, IPTC, Author] 115 - Source: I'm the source [IPTC, IPTC, Other] 5 - Object Name: Test IPTC picture [IPTC, IPTC, Time] 55 - Date Created: 2004:02:26 [IPTC, IPTC, Location] 90 - City: Kingston [IPTC, IPTC, Location] 95 - Province-State: Ont [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC, Other] 103 - Original Transmission Reference: What is a transmission reference [IPTC, IPTC, Other] 15 - Category: 1 [IPTC, IPTC, Other] 20 - Supplemental Categories: amazing, image, utilities [IPTC, IPTC, Other] 10 - Urgency: 8 (least urgent) [IPTC, IPTC, Other] 25 - Keywords: ExifTool, Test, XMP [IPTC, IPTC, Author] 116 - Copyright Notice: Copyright 2004 Phil Harvey [Photoshop, Photoshop, Image] 1061 - IPTC Digest: 9e02efbd9bdc1dc192279e30a0e27323 [Photoshop, Photoshop, Image] 0 - X Resolution: 72 [Photoshop, Photoshop, Image] 2 - Displayed Units X: inches [Photoshop, Photoshop, Image] 4 - Y Resolution: 72 [Photoshop, Photoshop, Image] 6 - Displayed Units Y: inches [Photoshop, Photoshop, Image] 1037 - Global Angle: 30 [Photoshop, Photoshop, Image] 1049 - Global Altitude: 30 [Photoshop, Photoshop, Author] 1035 - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [EXIF, IFD0, Image] 270 - Image Description: A witty caption [EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Adobe Photoshop 7.0 [EXIF, IFD0, Time] 306 - Modify Date: 2005:07:18 14:30:45 [EXIF, IFD0, Author] 315 - Artist: Phil Harvey [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: Copyright 2004 Phil Harvey [EXIF, ExifIFD, Image] 33437 - F Number: 3.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 1.230769231 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/64 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Image] 37389 - Noise: 6 [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 8 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 8 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3053 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3053 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 842 [EXIF, IFD1, Image] 514 - Thumbnail Length: 0 [XMP, XMP-x, Document] xmptk - XMP Toolkit: XMP toolkit 2.8.2-33, framework 1.5 [XMP, XMP-rdf, Document] about - About: uuid:b691db33-f92a-11d9-99a4-8c8e8269c120 [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: My Position [XMP, XMP-photoshop, Author] CaptionWriter - Caption Writer: I wrote it [XMP, XMP-photoshop, Image] Category - Category: 1 [XMP, XMP-photoshop, Location] City - City: Kingston [XMP, XMP-photoshop, Location] Country - Country: Canada [XMP, XMP-photoshop, Author] Credit - Credit: My Credit [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2004:02:26 [XMP, XMP-photoshop, Image] Headline - Headline: No headline [XMP, XMP-photoshop, Image] Instructions - Instructions: What instructions [XMP, XMP-photoshop, Author] Source - Source: I'm the source [XMP, XMP-photoshop, Location] State - State: Ont [XMP, XMP-photoshop, Image] TransmissionReference - Transmission Reference: What is a transmission reference [XMP, XMP-photoshop, Image] Urgency - Urgency: 8 (least urgent) [XMP, XMP-photoshop, Image] SupplementalCategories - Supplemental Categories: amazing, image, utilities [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: My Job [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:photoshop:cbcc2a62-f127-11d9-ac4d-e8be6f73552e [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: A witty caption [XMP, XMP-dc, Author] rights - Rights: Copyright 2004 Phil Harvey [XMP, XMP-dc, Image] title - Title: Test IPTC picture [XMP, XMP-dc, Image] subject - Subject: ExifTool, Test, XMP [Composite, Composite, Image] Aperture - Aperture: 3.5 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/64 [Composite, Composite, Image] LightValue - Light Value: 9.6 ����������������������������������������Image-ExifTool-10.10/t/PDF_20.out�������������������������������������������������������������������000644 �000765 �000024 �00000000301 11471526456 016276� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 2508 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Count - Page Count: 1 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PDF_22.out�������������������������������������������������������������������000644 �000765 �000024 �00000000215 11471526456 016304� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: No [PDF, PDF, Document] Count - Page Count: 1 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PDF_4.out��������������������������������������������������������������������000644 �000765 �000024 �00000001252 12554462433 016223� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 14638 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Creator - Creator: me [PDF, PDF, Time] CreationDate - Create Date: 2005:07:18 12:00:45-04:00 [PDF, PDF, Time] ModDate - Modify Date: 2005:07:18 12:00:45-04:00 [PDF, PDF, Document] Producer - Producer: Adobe Photoshop for Macintosh [PDF, PDF, Document] Count - Page Count: 1 [EXIF, IFD0, Time] 306 - Modify Date: 2005:07:18 14:30:45 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [XMP, XMP-dc, Author] creator - Creator: you ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PDF_5.out��������������������������������������������������������������������000644 �000765 �000024 �00000000656 12554462433 016233� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 14474 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Count - Page Count: 1 [EXIF, IFD0, Time] 306 - Modify Date: 2005:07:18 14:30:45 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [XMP, XMP-dc, Author] creator - Creator: you ����������������������������������������������������������������������������������Image-ExifTool-10.10/t/PDF_6.out��������������������������������������������������������������������000644 �000765 �000024 �00000000733 12554462433 016230� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 14643 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Count - Page Count: 1 [EXIF, IFD0, Time] 306 - Modify Date: 2005:07:18 14:30:45 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [XMP, XMP-dc, Author] creator - Creator: you [XMP, XMP-pdf, Author] Author - Author: them �������������������������������������Image-ExifTool-10.10/t/PDF_7.out��������������������������������������������������������������������000644 �000765 �000024 �00000001121 12554462433 016221� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 14731 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Count - Page Count: 1 [PDF, PDF, Document] AAPL:Keywords - Apple Keywords: [three,four] [PDF, PDF, Document] Keywords - Keywords: [one,two] [EXIF, IFD0, Time] 306 - Modify Date: 2005:07:18 14:30:45 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [XMP, XMP-dc, Author] creator - Creator: you [XMP, XMP-pdf, Author] Author - Author: them �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PDF_8.out��������������������������������������������������������������������000644 �000765 �000024 �00000000766 11511417126 016227� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 9249 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Count - Page Count: 1 [PDF, PDF, Document] AAPL:Keywords - Apple Keywords: [three,four] [PDF, PDF, Document] Keywords - Keywords: [one,two] [EXIF, IFD0, Time] 306 - Modify Date: 2005:07:18 14:30:45 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 ����������Image-ExifTool-10.10/t/PDF_9.out��������������������������������������������������������������������000644 �000765 �000024 �00000000772 11511417126 016225� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 9254 [PDF, PDF, Document] Version - PDF Version: 1.3 [PDF, PDF, Document] _linearized - Linearized: false [PDF, PDF, Document] Count - Page Count: 1 [PDF, PDF, Document] AAPL:Keywords - Apple Keywords: four [PDF, PDF, Document] Keywords - Keywords: [one,two,another one] [EXIF, IFD0, Time] 306 - Modify Date: 2005:07:18 14:30:45 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 ������Image-ExifTool-10.10/t/Pentax.t���������������������������������������������������������������������000644 �000765 �000024 �00000002472 11327642463 016267� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Pentax.t". BEGIN { $| = 1; print "1..4\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Pentax; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Pentax'; my $testnum = 1; # test 2: Extract information from Pentax.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Pentax.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( ['ThumbnailImage'], # delete thumbnail image ['WhiteBalance' => 'Tungsten', 'Group' => 'MakerNotes'], ['FocalLength' => 22 ], ['MaxAperture' => 2.0 ], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum); print "ok $testnum\n"; } # test 4: Extract information from a Pentax AVI video { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Pentax.avi'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Pentax_2.out�����������������������������������������������������������������000644 �000765 �000024 �00000032732 12567627036 017064� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.01 [File, System, Image] FileName - File Name: Pentax.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 2.7 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2008:03:28 13:40:33-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:08:27 10:00:47-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:08:18 09:11:12-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [JFIF, JFIF, Image] 0 - JFIF Version: 1.01 [JFIF, JFIF, Image] 2 - Resolution Unit: None [JFIF, JFIF, Image] 3 - X Resolution: 1 [JFIF, JFIF, Image] 5 - Y Resolution: 1 [EXIF, IFD0, Camera] 271 - Make: PENTAX Corporation [EXIF, IFD0, Camera] 272 - Camera Model Name: PENTAX K10D [EXIF, IFD0, Image] 274 - Orientation: Rotate 270 CW [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: K10D Ver 1.30 [EXIF, IFD0, Time] 306 - Modify Date: 2008:03:02 12:01:23 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/100 [EXIF, ExifIFD, Image] 33437 - F Number: 13.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Aperture-priority AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2008:03:02 12:01:23 [EXIF, ExifIFD, Time] 36868 - Create Date: 2008:03:02 12:01:23 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: +0.7 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 10.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 3008 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 2000 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 15 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, ExifIFD, Camera] 41996 - Subject Distance Range: Distant [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 2418 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Pentax, Camera] 0 - Pentax Version: 3.0.0.0 [MakerNotes, Pentax, Camera] 1 - Pentax Model Type: 0 [MakerNotes, Pentax, Image] 2 - Preview Image Size: 640x480 [MakerNotes, Pentax, Image] 3 - Preview Image Length: 26 [MakerNotes, Pentax, Image] 4 - Preview Image Start: 2446 [MakerNotes, Pentax, Camera] 5 - Pentax Model ID: K10D [MakerNotes, Pentax, Time] 6 - Date: 2008:03:02 [MakerNotes, Pentax, Time] 7 - Time: 12:01:23 [MakerNotes, Pentax, Camera] 8 - Quality: Better [MakerNotes, Pentax, Camera] 12 - Flash Mode: Off, Did not fire; Internal [MakerNotes, Pentax, Camera] 13 - Focus Mode: AF-S (Focus-priority) [MakerNotes, Pentax, Camera] 14 - AF Point Selected: Center [MakerNotes, Pentax, Camera] 18 - Exposure Time: 1/100 [MakerNotes, Pentax, Camera] 19 - F Number: 13.0 [MakerNotes, Pentax, Camera] 20 - ISO: 100 [MakerNotes, Pentax, Camera] 22 - Exposure Compensation: +0.7 [MakerNotes, Pentax, Camera] 23 - Metering Mode: Multi-segment [MakerNotes, Pentax, Camera] 24 - Auto Bracketing: 0 EV, No Extended Bracket [MakerNotes, Pentax, Camera] 25 - White Balance: Auto [MakerNotes, Pentax, Camera] 26 - White Balance Mode: Auto (Daylight) [MakerNotes, Pentax, Camera] 29 - Focal Length: 10.0 mm [MakerNotes, Pentax, Camera] 31 - Saturation: 0 (normal) [MakerNotes, Pentax, Camera] 32 - Contrast: 0 (normal) [MakerNotes, Pentax, Camera] 33 - Sharpness: 0 (normal) [MakerNotes, Pentax, Time] 34 - World Time Location: Hometown [MakerNotes, Pentax, Time] 35 - Hometown City: Toronto [MakerNotes, Pentax, Time] 36 - Destination City: New York [MakerNotes, Pentax, Time] 37 - Hometown DST: No [MakerNotes, Pentax, Time] 38 - Destination DST: No [MakerNotes, Pentax, Camera] 39 - DSP Firmware Version: 1.30.00.18 [MakerNotes, Pentax, Camera] 40 - CPU Firmware Version: 1.30.00.18 [MakerNotes, Pentax, Camera] 45 - Effective LV: 14.8 [MakerNotes, Pentax, Camera] 50 - Image Editing: None [MakerNotes, Pentax, Camera] 51 - Picture Mode: Aperture Priority; 1/3 EV steps [MakerNotes, Pentax, Camera] 52 - Drive Mode: Single-frame; No Timer; Shutter Button; Single Exposure [MakerNotes, Pentax, Camera] 55 - Color Space: sRGB [MakerNotes, Pentax, Camera] 61 - Data Scaling: 8192 [MakerNotes, Pentax, Camera] 62 - Preview Image Borders: 28 28 0 0 [MakerNotes, Pentax, Camera] 0 - Lens Type: Sigma or Tamron Lens (3 44) [MakerNotes, Pentax, Camera] 64 - Sensitivity Adjust: 0 [MakerNotes, Pentax, Camera] 65 - Image Edit Count: 0 [MakerNotes, Pentax, Camera] 71 - Camera Temperature: 12 C [MakerNotes, Pentax, Camera] 72 - AE Lock: Off [MakerNotes, Pentax, Camera] 73 - Noise Reduction: Off [MakerNotes, Pentax, Camera] 77 - Flash Exposure Comp: 0 [MakerNotes, Pentax, Camera] 79 - Image Tone: Natural [MakerNotes, Pentax, Camera] 0 - SR Result: Stabilized [MakerNotes, Pentax, Camera] 1 - Shake Reduction: On [MakerNotes, Pentax, Camera] 2 - SR Half Press Time: 1.53 s [MakerNotes, Pentax, Camera] 3 - SR Focal Length: 10 mm [MakerNotes, Pentax, Camera] 93 - Shutter Count: 1648 [MakerNotes, Pentax, Camera] 98 - Raw Development Process: 1 (K10D,K200D,K2000,K-m) [MakerNotes, Pentax, Camera] 512 - Black Point: 0 0 0 0 [MakerNotes, Pentax, Camera] 513 - White Point: 13568 8192 8192 9088 [MakerNotes, Pentax, Camera] 0 - Picture Mode 2: Aperture Priority [MakerNotes, Pentax, Camera] 1.1 - Program Line: Normal [MakerNotes, Pentax, Camera] 1.2 - EV Steps: 1/3 EV Steps [MakerNotes, Pentax, Camera] 1.3 - E-Dial In Program: Tv or Av [MakerNotes, Pentax, Camera] 1.4 - Aperture Ring Use: Permitted [MakerNotes, Pentax, Camera] 2 - Flash Options: Wireless (Master) [MakerNotes, Pentax, Camera] 2.1 - Metering Mode 2: Multi-segment [MakerNotes, Pentax, Camera] 3 - AF Point Mode: Select [MakerNotes, Pentax, Camera] 3.1 - Focus Mode 2: AF-S [MakerNotes, Pentax, Camera] 4 - AF Point Selected 2: Center [MakerNotes, Pentax, Camera] 6 - ISO Floor: 100 [MakerNotes, Pentax, Camera] 7 - Drive Mode 2: Single-frame [MakerNotes, Pentax, Camera] 8 - Exposure Bracket Step Size: 0.3 [MakerNotes, Pentax, Camera] 9 - Bracket Shot Number: n/a [MakerNotes, Pentax, Camera] 10 - White Balance Set: Auto [MakerNotes, Pentax, Camera] 10.1 - Multiple Exposure Set: Off [MakerNotes, Pentax, Camera] 13 - Raw And Jpg Recording: RAW+JPEG (PEF, Better) [MakerNotes, Pentax, Camera] 14.1 - Jpg Recorded Pixels: 6 MP [MakerNotes, Pentax, Camera] 16 - Flash Options 2: Wireless (Master) [MakerNotes, Pentax, Camera] 16.1 - Metering Mode 3: Multi-segment [MakerNotes, Pentax, Camera] 17.1 - SR Active: Yes [MakerNotes, Pentax, Camera] 17.2 - Rotation: Rotate 270 CW [MakerNotes, Pentax, Camera] 17.3 - ISO Setting: Manual [MakerNotes, Pentax, Camera] 17.4 - Sensitivity Steps: 1 EV Steps [MakerNotes, Pentax, Camera] 18 - Tv Exposure Time Setting: 1/203 [MakerNotes, Pentax, Camera] 19 - Av Aperture Setting: 12.7 [MakerNotes, Pentax, Camera] 20 - Sv ISO Setting: 100 [MakerNotes, Pentax, Camera] 21 - Base Exposure Compensation: +0.7 [MakerNotes, Pentax, Camera] 0 - AE Exposure Time: 1/101 [MakerNotes, Pentax, Camera] 1 - AE Aperture: 12.9 [MakerNotes, Pentax, Camera] 2 - AE ISO: 100 [MakerNotes, Pentax, Camera] 3 - AE Xv: -0.625 [MakerNotes, Pentax, Camera] 4 - AEB Xv: 0 [MakerNotes, Pentax, Camera] 5 - AE Min Exposure Time: 1/3862 [MakerNotes, Pentax, Camera] 6 - AE Program Mode: Av, B or X [MakerNotes, Pentax, Camera] 8 - AE Aperture Steps: 28 [MakerNotes, Pentax, Camera] 9 - AE Max Aperture: 4.0 [MakerNotes, Pentax, Camera] 10 - AE Max Aperture 2: 4.0 [MakerNotes, Pentax, Camera] 11 - AE Min Aperture: 23 [MakerNotes, Pentax, Camera] 12 - AE Metering Mode: Multi-segment [MakerNotes, Pentax, Camera] 14 - Flash Exposure Comp. Setting: 0 [MakerNotes, Pentax, Camera] 0 - Lens Type: Sigma or Tamron Lens (3 44) [MakerNotes, Pentax, Camera] 0.1 - Auto Aperture: On [MakerNotes, Pentax, Camera] 0.2 - Min Aperture: 22 [MakerNotes, Pentax, Camera] 0.3 - Lens F Stops: 8.5 [MakerNotes, Pentax, Camera] 3 - Min Focus Distance: 0.49-0.50 m [MakerNotes, Pentax, Camera] 3.1 - Focus Range Index: 7 (very far) [MakerNotes, Pentax, Camera] 9 - Lens Focal Length: 10.0 mm [MakerNotes, Pentax, Camera] 10 - Nominal Max Aperture: 4.0 [MakerNotes, Pentax, Camera] 10.1 - Nominal Min Aperture: 23 [MakerNotes, Pentax, Camera] 14.1 - Max Aperture: 3.9 [MakerNotes, Pentax, Camera] 0 - Flash Status: Off [MakerNotes, Pentax, Camera] 1 - Internal Flash Mode: Did not fire, Wireless (Master) [MakerNotes, Pentax, Camera] 2 - External Flash Mode: Off [MakerNotes, Pentax, Camera] 3 - Internal Flash Strength: 18 [MakerNotes, Pentax, Camera] 4 - TTL DA A Up: 0 [MakerNotes, Pentax, Camera] 5 - TTL DA A Down: 0 [MakerNotes, Pentax, Camera] 6 - TTL DA B Up: 0 [MakerNotes, Pentax, Camera] 7 - TTL DA B Down: 0 [MakerNotes, Pentax, Camera] 24.1 - External Flash Guide Number: n/a [MakerNotes, Pentax, Camera] 25 - External Flash Exposure Comp: n/a [MakerNotes, Pentax, Camera] 26 - External Flash Bounce: n/a [MakerNotes, Pentax, Camera] 521 - AE Metering Segments: 13.5 13.6 13.5 13.2 13.6 15.0 13.8 12.9 13.8 16.4 14.4 13.9 14.4 15.8 14.0 16.0 [MakerNotes, Pentax, Camera] 522 - Flash Metering Segments: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [MakerNotes, Pentax, Camera] 523 - Slave Flash Metering Segments: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [MakerNotes, Pentax, Camera] 525 - WB RGGB Levels Daylight: 13600 8192 8192 8765 [MakerNotes, Pentax, Camera] 526 - WB RGGB Levels Shade: 16128 8192 8192 6635 [MakerNotes, Pentax, Camera] 527 - WB RGGB Levels Cloudy: 14560 8192 8192 7782 [MakerNotes, Pentax, Camera] 528 - WB RGGB Levels Tungsten: 8192 8192 8192 20971 [MakerNotes, Pentax, Camera] 529 - WB RGGB Levels Fluorescent D: 17376 8192 8192 8847 [MakerNotes, Pentax, Camera] 530 - WB RGGB Levels Fluorescent N: 14528 8192 8192 10076 [MakerNotes, Pentax, Camera] 531 - WB RGGB Levels Fluorescent W: 13088 8192 8192 12206 [MakerNotes, Pentax, Camera] 532 - WB RGGB Levels Flash: 13632 8192 8192 8601 [MakerNotes, Pentax, Camera] 0 - Pentax Model ID: K10D [MakerNotes, Pentax, Time] 1 - Manufacture Date: 2007:09:13 [MakerNotes, Pentax, Camera] 2 - Production Code: 2.1 [MakerNotes, Pentax, Camera] 4 - Internal Serial Number: 132352 [MakerNotes, Pentax, Camera] 0.1 - Power Source: Body Battery [MakerNotes, Pentax, Camera] 1.1 - Body Battery State: Full [MakerNotes, Pentax, Camera] 1.2 - Grip Battery State: Empty or Missing [MakerNotes, Pentax, Camera] 2 - Body Battery A/D No Load: 173 (7.6V, 51%) [MakerNotes, Pentax, Camera] 3 - Body Battery A/D Load: 168 (7.4V, 47%) [MakerNotes, Pentax, Camera] 4 - Grip Battery A/D No Load: 5 [MakerNotes, Pentax, Camera] 5 - Grip Battery A/D Load: 1 [MakerNotes, Pentax, Camera] 4 - AF Predictor: 4 [MakerNotes, Pentax, Camera] 6 - AF Defocus: 2 [MakerNotes, Pentax, Camera] 7 - AF Integration Time: 0 ms [MakerNotes, Pentax, Camera] 11 - AF Points In Focus: Center (horizontal) [MakerNotes, Pentax, Image] 16 - WB Shift AB: 0 [MakerNotes, Pentax, Image] 17 - WB Shift GM: 0 [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0300 [Composite, Composite, Image] Aperture - Aperture: 13.0 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Camera] LensID - Lens ID: Sigma AF 10-20mm F4-5.6 EX DC [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 26 bytes) [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.5 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/100 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.020 mm [Composite, Composite, Image] FOV - Field Of View: 100.4 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 10.0 mm (35 mm equivalent: 15.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 0.38 m [Composite, Composite, Image] LightValue - Light Value: 14.0 ��������������������������������������Image-ExifTool-10.10/t/Pentax_3.out�����������������������������������������������������������������000644 �000765 �000024 �00000037520 12567627036 017065� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.01 [File, System, Image] FileName - File Name: Pentax_3_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 2.5 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:08:27 11:14:52-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:08:27 11:14:52-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:08:27 11:14:52-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [JFIF, JFIF, Image] 0 - JFIF Version: 1.01 [JFIF, JFIF, Image] 2 - Resolution Unit: None [JFIF, JFIF, Image] 3 - X Resolution: 1 [JFIF, JFIF, Image] 5 - Y Resolution: 1 [EXIF, IFD0, Camera] 271 - Make: PENTAX Corporation [EXIF, IFD0, Camera] 272 - Camera Model Name: PENTAX K10D [EXIF, IFD0, Image] 274 - Orientation: Rotate 270 CW [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: K10D Ver 1.30 [EXIF, IFD0, Time] 306 - Modify Date: 2008:03:02 12:01:23 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/100 [EXIF, ExifIFD, Image] 33437 - F Number: 13.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Aperture-priority AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2008:03:02 12:01:23 [EXIF, ExifIFD, Time] 36868 - Create Date: 2008:03:02 12:01:23 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: +0.7 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 22.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 3008 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 2000 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 15 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, ExifIFD, Camera] 41996 - Subject Distance Range: Distant [MakerNotes, Pentax, Camera] 0 - Pentax Version: 3.0.0.0 [MakerNotes, Pentax, Camera] 1 - Pentax Model Type: 0 [MakerNotes, Pentax, Image] 2 - Preview Image Size: 640x480 [MakerNotes, Pentax, Image] 3 - Preview Image Length: 26 [MakerNotes, Pentax, Image] 4 - Preview Image Start: 2324 [MakerNotes, Pentax, Camera] 5 - Pentax Model ID: K10D [MakerNotes, Pentax, Time] 6 - Date: 2008:03:02 [MakerNotes, Pentax, Time] 7 - Time: 12:01:23 [MakerNotes, Pentax, Camera] 8 - Quality: Better [MakerNotes, Pentax, Camera] 12 - Flash Mode: Off, Did not fire; Internal [MakerNotes, Pentax, Camera] 13 - Focus Mode: AF-S (Focus-priority) [MakerNotes, Pentax, Camera] 14 - AF Point Selected: Center [MakerNotes, Pentax, Camera] 18 - Exposure Time: 1/100 [MakerNotes, Pentax, Camera] 19 - F Number: 13.0 [MakerNotes, Pentax, Camera] 20 - ISO: 100 [MakerNotes, Pentax, Camera] 22 - Exposure Compensation: +0.7 [MakerNotes, Pentax, Camera] 23 - Metering Mode: Multi-segment [MakerNotes, Pentax, Camera] 24 - Auto Bracketing: 0 EV, No Extended Bracket [MakerNotes, Pentax, Camera] 25 - White Balance: Tungsten [MakerNotes, Pentax, Camera] 26 - White Balance Mode: Auto (Daylight) [MakerNotes, Pentax, Camera] 29 - Focal Length: 22.0 mm [MakerNotes, Pentax, Camera] 31 - Saturation: 0 (normal) [MakerNotes, Pentax, Camera] 32 - Contrast: 0 (normal) [MakerNotes, Pentax, Camera] 33 - Sharpness: 0 (normal) [MakerNotes, Pentax, Time] 34 - World Time Location: Hometown [MakerNotes, Pentax, Time] 35 - Hometown City: Toronto [MakerNotes, Pentax, Time] 36 - Destination City: New York [MakerNotes, Pentax, Time] 37 - Hometown DST: No [MakerNotes, Pentax, Time] 38 - Destination DST: No [MakerNotes, Pentax, Camera] 39 - DSP Firmware Version: 1.30.00.18 [MakerNotes, Pentax, Camera] 40 - CPU Firmware Version: 1.30.00.18 [MakerNotes, Pentax, Camera] 45 - Effective LV: 14.8 [MakerNotes, Pentax, Camera] 50 - Image Editing: None [MakerNotes, Pentax, Camera] 51 - Picture Mode: Aperture Priority; 1/3 EV steps [MakerNotes, Pentax, Camera] 52 - Drive Mode: Single-frame; No Timer; Shutter Button; Single Exposure [MakerNotes, Pentax, Camera] 55 - Color Space: sRGB [MakerNotes, Pentax, Camera] 61 - Data Scaling: 8192 [MakerNotes, Pentax, Camera] 62 - Preview Image Borders: 28 28 0 0 [MakerNotes, Pentax, Camera] 0 - Lens Type: Sigma or Tamron Lens (3 44) [MakerNotes, Pentax, Camera] 64 - Sensitivity Adjust: 0 [MakerNotes, Pentax, Camera] 65 - Image Edit Count: 0 [MakerNotes, Pentax, Camera] 71 - Camera Temperature: 12 C [MakerNotes, Pentax, Camera] 72 - AE Lock: Off [MakerNotes, Pentax, Camera] 73 - Noise Reduction: Off [MakerNotes, Pentax, Camera] 77 - Flash Exposure Comp: 0 [MakerNotes, Pentax, Camera] 79 - Image Tone: Natural [MakerNotes, Pentax, Camera] 0 - SR Result: Stabilized [MakerNotes, Pentax, Camera] 1 - Shake Reduction: On [MakerNotes, Pentax, Camera] 2 - SR Half Press Time: 1.53 s [MakerNotes, Pentax, Camera] 3 - SR Focal Length: 10 mm [MakerNotes, Pentax, Camera] 93 - Shutter Count: 1648 [MakerNotes, Pentax, Camera] 98 - Raw Development Process: 1 (K10D,K200D,K2000,K-m) [MakerNotes, Pentax, Camera] 512 - Black Point: 0 0 0 0 [MakerNotes, Pentax, Camera] 513 - White Point: 13568 8192 8192 9088 [MakerNotes, Pentax, Camera] 0 - Picture Mode 2: Aperture Priority [MakerNotes, Pentax, Camera] 1.1 - Program Line: Normal [MakerNotes, Pentax, Camera] 1.2 - EV Steps: 1/3 EV Steps [MakerNotes, Pentax, Camera] 1.3 - E-Dial In Program: Tv or Av [MakerNotes, Pentax, Camera] 1.4 - Aperture Ring Use: Permitted [MakerNotes, Pentax, Camera] 2 - Flash Options: Wireless (Master) [MakerNotes, Pentax, Camera] 2.1 - Metering Mode 2: Multi-segment [MakerNotes, Pentax, Camera] 3 - AF Point Mode: Select [MakerNotes, Pentax, Camera] 3.1 - Focus Mode 2: AF-S [MakerNotes, Pentax, Camera] 4 - AF Point Selected 2: Center [MakerNotes, Pentax, Camera] 6 - ISO Floor: 100 [MakerNotes, Pentax, Camera] 7 - Drive Mode 2: Single-frame [MakerNotes, Pentax, Camera] 8 - Exposure Bracket Step Size: 0.3 [MakerNotes, Pentax, Camera] 9 - Bracket Shot Number: n/a [MakerNotes, Pentax, Camera] 10 - White Balance Set: Auto [MakerNotes, Pentax, Camera] 10.1 - Multiple Exposure Set: Off [MakerNotes, Pentax, Camera] 13 - Raw And Jpg Recording: RAW+JPEG (PEF, Better) [MakerNotes, Pentax, Camera] 14.1 - Jpg Recorded Pixels: 6 MP [MakerNotes, Pentax, Camera] 16 - Flash Options 2: Wireless (Master) [MakerNotes, Pentax, Camera] 16.1 - Metering Mode 3: Multi-segment [MakerNotes, Pentax, Camera] 17.1 - SR Active: Yes [MakerNotes, Pentax, Camera] 17.2 - Rotation: Rotate 270 CW [MakerNotes, Pentax, Camera] 17.3 - ISO Setting: Manual [MakerNotes, Pentax, Camera] 17.4 - Sensitivity Steps: 1 EV Steps [MakerNotes, Pentax, Camera] 18 - Tv Exposure Time Setting: 1/203 [MakerNotes, Pentax, Camera] 19 - Av Aperture Setting: 12.7 [MakerNotes, Pentax, Camera] 20 - Sv ISO Setting: 100 [MakerNotes, Pentax, Camera] 21 - Base Exposure Compensation: +0.7 [MakerNotes, Pentax, Camera] 0 - AE Exposure Time: 1/101 [MakerNotes, Pentax, Camera] 1 - AE Aperture: 12.9 [MakerNotes, Pentax, Camera] 2 - AE ISO: 100 [MakerNotes, Pentax, Camera] 3 - AE Xv: -0.625 [MakerNotes, Pentax, Camera] 4 - AEB Xv: 0 [MakerNotes, Pentax, Camera] 5 - AE Min Exposure Time: 1/3862 [MakerNotes, Pentax, Camera] 6 - AE Program Mode: Av, B or X [MakerNotes, Pentax, Camera] 7 - AE Flags: (none) [MakerNotes, Pentax, Camera] 8 - AE Aperture Steps: 28 [MakerNotes, Pentax, Camera] 9 - AE Max Aperture: 4.0 [MakerNotes, Pentax, Camera] 10 - AE Max Aperture 2: 4.0 [MakerNotes, Pentax, Camera] 11 - AE Min Aperture: 23 [MakerNotes, Pentax, Camera] 12 - AE Metering Mode: Multi-segment [MakerNotes, Pentax, Camera] 14 - Flash Exposure Comp. Setting: 0 [MakerNotes, Pentax, Camera] 0 - Lens Type: Sigma or Tamron Lens (3 44) [MakerNotes, Pentax, Camera] 0.1 - Auto Aperture: On [MakerNotes, Pentax, Camera] 0.2 - Min Aperture: 22 [MakerNotes, Pentax, Camera] 0.3 - Lens F Stops: 8.5 [MakerNotes, Pentax, Camera] 1 - Lens Kind: 0x28 [MakerNotes, Pentax, Camera] 2 - LC1: 0x94 [MakerNotes, Pentax, Camera] 3 - Min Focus Distance: 0.49-0.50 m [MakerNotes, Pentax, Camera] 3.1 - Focus Range Index: 7 (very far) [MakerNotes, Pentax, Camera] 4 - LC3: 0x5b [MakerNotes, Pentax, Camera] 5 - LC4: 0x53 [MakerNotes, Pentax, Camera] 6 - LC5: 0x86 [MakerNotes, Pentax, Camera] 7 - LC6: 0xea [MakerNotes, Pentax, Camera] 8 - LC7: 0x41 [MakerNotes, Pentax, Camera] 9 - Lens Focal Length: 10.0 mm [MakerNotes, Pentax, Camera] 10 - Nominal Max Aperture: 4.0 [MakerNotes, Pentax, Camera] 10.1 - Nominal Min Aperture: 23 [MakerNotes, Pentax, Camera] 11 - LC10: 0x50 [MakerNotes, Pentax, Camera] 12 - LC11: 0x38 [MakerNotes, Pentax, Camera] 13 - LC12: 0x01 [MakerNotes, Pentax, Camera] 14.1 - Max Aperture: 2.0 [MakerNotes, Pentax, Camera] 15 - LC14: 0x6c [MakerNotes, Pentax, Camera] 16 - LC15: 0x03 [MakerNotes, Pentax, Camera] 0 - Flash Status: Off [MakerNotes, Pentax, Camera] 1 - Internal Flash Mode: Did not fire, Wireless (Master) [MakerNotes, Pentax, Camera] 2 - External Flash Mode: Off [MakerNotes, Pentax, Camera] 3 - Internal Flash Strength: 18 [MakerNotes, Pentax, Camera] 4 - TTL DA A Up: 0 [MakerNotes, Pentax, Camera] 5 - TTL DA A Down: 0 [MakerNotes, Pentax, Camera] 6 - TTL DA B Up: 0 [MakerNotes, Pentax, Camera] 7 - TTL DA B Down: 0 [MakerNotes, Pentax, Camera] 24.1 - External Flash Guide Number: n/a [MakerNotes, Pentax, Camera] 25 - External Flash Exposure Comp: n/a [MakerNotes, Pentax, Camera] 26 - External Flash Bounce: n/a [MakerNotes, Pentax, Camera] 521 - AE Metering Segments: 13.5 13.6 13.5 13.2 13.6 15.0 13.8 12.9 13.8 16.4 14.4 13.9 14.4 15.8 14.0 16.0 [MakerNotes, Pentax, Camera] 522 - Flash Metering Segments: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [MakerNotes, Pentax, Camera] 523 - Slave Flash Metering Segments: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [MakerNotes, Pentax, Camera] 525 - WB RGGB Levels Daylight: 13600 8192 8192 8765 [MakerNotes, Pentax, Camera] 526 - WB RGGB Levels Shade: 16128 8192 8192 6635 [MakerNotes, Pentax, Camera] 527 - WB RGGB Levels Cloudy: 14560 8192 8192 7782 [MakerNotes, Pentax, Camera] 528 - WB RGGB Levels Tungsten: 8192 8192 8192 20971 [MakerNotes, Pentax, Camera] 529 - WB RGGB Levels Fluorescent D: 17376 8192 8192 8847 [MakerNotes, Pentax, Camera] 530 - WB RGGB Levels Fluorescent N: 14528 8192 8192 10076 [MakerNotes, Pentax, Camera] 531 - WB RGGB Levels Fluorescent W: 13088 8192 8192 12206 [MakerNotes, Pentax, Camera] 532 - WB RGGB Levels Flash: 13632 8192 8192 8601 [MakerNotes, Pentax, Camera] 0 - Pentax Model ID: K10D [MakerNotes, Pentax, Time] 1 - Manufacture Date: 2007:09:13 [MakerNotes, Pentax, Camera] 2 - Production Code: 2.1 [MakerNotes, Pentax, Camera] 4 - Internal Serial Number: 132352 [MakerNotes, Pentax, Camera] 0.1 - Power Source: Body Battery [MakerNotes, Pentax, Camera] 1.1 - Body Battery State: Full [MakerNotes, Pentax, Camera] 1.2 - Grip Battery State: Empty or Missing [MakerNotes, Pentax, Camera] 2 - Body Battery A/D No Load: 173 (7.6V, 51%) [MakerNotes, Pentax, Camera] 3 - Body Battery A/D Load: 168 (7.4V, 47%) [MakerNotes, Pentax, Camera] 4 - Grip Battery A/D No Load: 5 [MakerNotes, Pentax, Camera] 5 - Grip Battery A/D Load: 1 [MakerNotes, Pentax, Camera] 0 - AF Points Unknown 1: Center [MakerNotes, Pentax, Camera] 2 - AF Points Unknown 2: Center, [13], [14] [MakerNotes, Pentax, Camera] 4 - AF Predictor: 4 [MakerNotes, Pentax, Camera] 6 - AF Defocus: 2 [MakerNotes, Pentax, Camera] 7 - AF Integration Time: 0 ms [MakerNotes, Pentax, Camera] 11 - AF Points In Focus: Center (horizontal) [MakerNotes, Pentax, Image] 16 - WB Shift AB: 0 [MakerNotes, Pentax, Image] 17 - WB Shift GM: 0 [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0300 [PrintIM, PrintIM, Printing] 1 - Print IM 0x0001: 0x00160016 [PrintIM, PrintIM, Printing] 2 - Print IM 0x0002: 0x01000000 [PrintIM, PrintIM, Printing] 3 - Print IM 0x0003: 0x000000d6 [PrintIM, PrintIM, Printing] 7 - Print IM 0x0007: 0x00000000 [PrintIM, PrintIM, Printing] 8 - Print IM 0x0008: 0x00000000 [PrintIM, PrintIM, Printing] 9 - Print IM 0x0009: 0x00000000 [PrintIM, PrintIM, Printing] 10 - Print IM 0x000a: 0x00000000 [PrintIM, PrintIM, Printing] 11 - Print IM 0x000b: 0x0000011e [PrintIM, PrintIM, Printing] 12 - Print IM 0x000c: 0x00000000 [PrintIM, PrintIM, Printing] 13 - Print IM 0x000d: 0x00000000 [PrintIM, PrintIM, Printing] 14 - Print IM 0x000e: 0x00000134 [PrintIM, PrintIM, Printing] 256 - Print IM 0x0100: 0x05000000 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0xff000000 [PrintIM, PrintIM, Printing] 258 - Print IM 0x0102: 0x83000000 [PrintIM, PrintIM, Printing] 259 - Print IM 0x0103: 0x83000000 [PrintIM, PrintIM, Printing] 260 - Print IM 0x0104: 0x83000000 [PrintIM, PrintIM, Printing] 261 - Print IM 0x0105: 0x83000000 [PrintIM, PrintIM, Printing] 262 - Print IM 0x0106: 0x83000000 [PrintIM, PrintIM, Printing] 263 - Print IM 0x0107: 0x80808000 [PrintIM, PrintIM, Printing] 272 - Print IM 0x0110: 0x80000000 [PrintIM, PrintIM, Printing] 512 - Print IM 0x0200: 0x00000000 [PrintIM, PrintIM, Printing] 519 - Print IM 0x0207: 0x00000000 [PrintIM, PrintIM, Printing] 520 - Print IM 0x0208: 0x00000000 [PrintIM, PrintIM, Printing] 521 - Print IM 0x0209: 0x00000000 [PrintIM, PrintIM, Printing] 522 - Print IM 0x020a: 0x00000000 [PrintIM, PrintIM, Printing] 523 - Print IM 0x020b: 0x00000144 [PrintIM, PrintIM, Printing] 525 - Print IM 0x020d: 0x00000000 [PrintIM, PrintIM, Printing] 768 - Print IM 0x0300: 0x05000000 [PrintIM, PrintIM, Printing] 769 - Print IM 0x0301: 0xff000000 [PrintIM, PrintIM, Printing] 770 - Print IM 0x0302: 0x83000000 [PrintIM, PrintIM, Printing] 771 - Print IM 0x0303: 0x83000000 [PrintIM, PrintIM, Printing] 774 - Print IM 0x0306: 0x83000000 [PrintIM, PrintIM, Printing] 784 - Print IM 0x0310: 0x80000000 [Composite, Composite, Image] Aperture - Aperture: 13.0 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 26 bytes) [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/100 [Composite, Composite, Camera] LensID - Lens ID: Sigma or Tamron Lens (3 44) + 2.2x converter [Composite, Composite, Image] LightValue - Light Value: 14.0 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 0.7 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.044 mm [Composite, Composite, Image] FOV - Field Of View: 100.4 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 22.0 mm (35 mm equivalent: 15.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 0.84 m ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Pentax_4.out�����������������������������������������������������������������000644 �000765 �000024 �00000016227 12573560133 017056� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.02 [File, System, Image] FileName - File Name: Pentax.avi [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1672 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2009:10:30 08:10:17-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:09:03 13:07:16-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:09:03 13:07:16-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: AVI [File, File, Image] FileTypeExtension - File Type Extension: avi [File, File, Image] MIMEType - MIME Type: video/x-msvideo [File, File, Image] 4 - Image Width: 1280 [File, File, Image] 8 - Image Height: 720 [File, File, Image] 12 - Planes: 1 [File, File, Image] 14 - Bit Depth: 24 [File, File, Image] 16 - Compression: MJPG [File, File, Image] 20 - Image Length: 2764800 [File, File, Image] 24 - Pixels Per Meter X: 0 [File, File, Image] 28 - Pixels Per Meter Y: 0 [File, File, Image] 32 - Num Colors: Use BitDepth [File, File, Image] 36 - Num Important Colors: All [RIFF, RIFF, Video] 0 - Frame Rate: 24 [RIFF, RIFF, Video] 1 - Max Data Rate: 0 kB/s [RIFF, RIFF, Video] 4 - Frame Count: 600 [RIFF, RIFF, Video] 6 - Stream Count: 2 [RIFF, RIFF, Video] 8 - Image Width: 1280 [RIFF, RIFF, Video] 9 - Image Height: 720 [RIFF, RIFF, Video] 0 - Stream Type: Video [RIFF, RIFF, Video] 1 - Video Codec: mjpg [RIFF, RIFF, Video] 5 - Video Frame Rate: 24 [RIFF, RIFF, Video] 8 - Video Frame Count: 600 [RIFF, RIFF, Video] 10 - Quality: 10000 [RIFF, RIFF, Video] 11 - Sample Size: Variable [RIFF, RIFF, Video] 0 - Stream Type: Audio [RIFF, RIFF, Video] 1 - Audio Codec: [RIFF, RIFF, Video] 5 - Audio Sample Rate: 32000 [RIFF, RIFF, Video] 8 - Audio Sample Count: 800000 [RIFF, RIFF, Video] 10 - Quality: 10000 [RIFF, RIFF, Video] 11 - Sample Size: 2 bytes [RIFF, RIFF, Audio] 0 - Encoding: Microsoft PCM [RIFF, RIFF, Audio] 1 - Num Channels: 1 [RIFF, RIFF, Audio] 2 - Sample Rate: 32000 [RIFF, RIFF, Audio] 4 - Avg Bytes Per Sec: 64000 [RIFF, RIFF, Audio] 7 - Bits Per Sample: 16 [RIFF, RIFF, Video] 0 - Total Frame Count: 600 [RIFF, RIFF, Time] IDIT - Date/Time Original: 2009:10:27 12:14:00 [RIFF, RIFF, Audio] ISFT - Software: PENTAX K-x [MakerNotes, Pentax, Camera] 0 - Pentax Version: 5.1.0.0 [MakerNotes, Pentax, Camera] 1 - Pentax Model Type: 0 [MakerNotes, Pentax, Camera] 5 - Pentax Model ID: K-x [MakerNotes, Pentax, Time] 6 - Date: 2009:10:27 [MakerNotes, Pentax, Time] 7 - Time: 12:14:34 [MakerNotes, Pentax, Camera] 8 - Quality: Best [MakerNotes, Pentax, Camera] 19 - F Number: 0.0 [MakerNotes, Pentax, Camera] 22 - Exposure Compensation: 0 [MakerNotes, Pentax, Camera] 25 - White Balance: Flash [MakerNotes, Pentax, Camera] 31 - Saturation: 0 (normal) [MakerNotes, Pentax, Camera] 32 - Contrast: 0 (normal) [MakerNotes, Pentax, Camera] 33 - Sharpness: -1 (med soft) [MakerNotes, Pentax, Camera] 39 - DSP Firmware Version: 1.00.00.01 [MakerNotes, Pentax, Camera] 40 - CPU Firmware Version: 1.00.00.01 [MakerNotes, Pentax, Camera] 51 - Picture Mode: Video (4); 1/3 EV steps [MakerNotes, Pentax, Camera] 52 - Drive Mode: Video; n/a; Shutter Button; Video [MakerNotes, Pentax, Camera] 0 - Lens Type: smc PENTAX-DA L 18-55mm F3.5-5.6 [MakerNotes, Pentax, Camera] 3 - Extender Status: Not attached [MakerNotes, Pentax, Camera] 79 - Image Tone: Natural [MakerNotes, Pentax, Camera] 0 - SR Result: Stabilized, [1], [2], [3], [4] [MakerNotes, Pentax, Camera] 1 - Shake Reduction: On (7) [MakerNotes, Pentax, Camera] 2 - SR Half Press Time: 0.00 s [MakerNotes, Pentax, Camera] 3 - SR Focal Length: 23 mm [MakerNotes, Pentax, Camera] 103 - Hue: Normal [MakerNotes, Pentax, Camera] 108 - High/Low Key Adj: 0 [MakerNotes, Pentax, Camera] 115 - Monochrome Filter Effect: None [MakerNotes, Pentax, Camera] 116 - Monochrome Toning: None [MakerNotes, Pentax, Camera] 123 - Cross Process: Off [MakerNotes, Pentax, Camera] 0 - Picture Mode 2: Scene Mode [MakerNotes, Pentax, Camera] 1.1 - Program Line: Normal [MakerNotes, Pentax, Camera] 1.2 - EV Steps: 1/3 EV Steps [MakerNotes, Pentax, Camera] 1.3 - E-Dial In Program: P Shift [MakerNotes, Pentax, Camera] 1.4 - Aperture Ring Use: Prohibited [MakerNotes, Pentax, Camera] 2 - Flash Options: Normal [MakerNotes, Pentax, Camera] 2.1 - Metering Mode 2: Multi-segment [MakerNotes, Pentax, Camera] 3 - AF Point Mode: Fixed Center [MakerNotes, Pentax, Camera] 3.1 - Focus Mode 2: AF-S [MakerNotes, Pentax, Camera] 4 - AF Point Selected 2: Center [MakerNotes, Pentax, Camera] 6 - ISO Floor: 100 [MakerNotes, Pentax, Camera] 7 - Drive Mode 2: Single-frame [MakerNotes, Pentax, Camera] 8 - Exposure Bracket Step Size: 0.3 [MakerNotes, Pentax, Camera] 9 - Bracket Shot Number: n/a [MakerNotes, Pentax, Camera] 10 - White Balance Set: Auto [MakerNotes, Pentax, Camera] 10.1 - Multiple Exposure Set: Off [MakerNotes, Pentax, Camera] 0 - AE Exposure Time: 1/55 [MakerNotes, Pentax, Camera] 1 - AE Aperture: 3.8 [MakerNotes, Pentax, Camera] 2 - AE ISO: 519 [MakerNotes, Pentax, Camera] 3 - AE Xv: 0 [MakerNotes, Pentax, Camera] 4 - AEB Xv: 0 [MakerNotes, Pentax, Camera] 5 - AE Min Exposure Time: 1/5461 [MakerNotes, Pentax, Camera] 6 - AE Program Mode: Standard [MakerNotes, Pentax, Camera] 8 - AE Aperture Steps: 0 [MakerNotes, Pentax, Camera] 9 - AE Max Aperture: 4.0 [MakerNotes, Pentax, Camera] 10 - AE Max Aperture 2: 3.8 [MakerNotes, Pentax, Camera] 11 - AE Min Aperture: 27 [MakerNotes, Pentax, Camera] 12 - AE Metering Mode: Multi-segment [MakerNotes, Pentax, Camera] 13 - AE White Balance: Daylight Fluorescent [MakerNotes, Pentax, Camera] 13.1 - AE Metering Mode 2: Multi-segment [MakerNotes, Pentax, Camera] 14 - Flash Exposure Comp. Setting: -1.0 [MakerNotes, Pentax, Camera] 21 - Level Indicator: n/a [MakerNotes, Pentax, Camera] 0 - Lens Type: smc PENTAX-DA L 18-55mm F3.5-5.6 [MakerNotes, Pentax, Camera] 0.1 - Auto Aperture: On [MakerNotes, Pentax, Camera] 0.2 - Min Aperture: 32 [MakerNotes, Pentax, Camera] 0.3 - Lens F Stops: 6 [MakerNotes, Pentax, Camera] 3 - Min Focus Distance: 0.25-0.28 m [MakerNotes, Pentax, Camera] 3.1 - Focus Range Index: 6 (far) [MakerNotes, Pentax, Camera] 9 - Lens Focal Length: 23.1 mm [MakerNotes, Pentax, Camera] 10 - Nominal Max Aperture: 4.0 [MakerNotes, Pentax, Camera] 10.1 - Nominal Min Aperture: 27 [MakerNotes, Pentax, Camera] 14.1 - Max Aperture: 3.7 [MakerNotes, Pentax, Camera] 0 - Pentax Model ID: K-x [MakerNotes, Pentax, Time] 1 - Manufacture Date: 2009:09:04 [MakerNotes, Pentax, Camera] 2 - Production Code: 2.3 [MakerNotes, Pentax, Camera] 4 - Internal Serial Number: 8007725 [MakerNotes, Pentax, Image] 16 - WB Shift AB: 0 [MakerNotes, Pentax, Image] 17 - WB Shift GM: 0 [MakerNotes, Pentax, Camera] 553 - Serial Number: 3430417 [MakerNotes, Pentax, Author] 558 - Artist: [MakerNotes, Pentax, Author] 559 - Copyright: [MakerNotes, Pentax, Camera] 560 - Firmware Version: K-x Ver 1.00 [Composite, Composite, Other] Duration - Duration: 25.00 s [Composite, Composite, Image] ImageSize - Image Size: 1280x720 [Composite, Composite, Image] Megapixels - Megapixels: 0.922 [Composite, Composite, Camera] LensID - Lens ID: smc PENTAX-DA L 18-55mm F3.5-5.6 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PGF.t������������������������������������������������������������������������000644 �000765 �000024 �00000001250 11520012147 015416� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/PGF.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::PGF; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'PGF'; my $testnum = 1; # test 2: Extract information from PGF.pgf { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/PGF.pgf'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PGF_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000003402 12546457276 016235� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: PGF.pgf [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 286 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2011:01:26 07:32:42-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PGF [File, File, Image] FileTypeExtension - File Type Extension: pgf [File, File, Image] MIMEType - MIME Type: image/pgf [File, File, Image] 3 - PGF Version: 0x36 [File, File, Image] 8 - Image Width: 8 [File, File, Image] 12 - Image Height: 8 [File, File, Image] 16 - Pyramid Levels: 0 [File, File, Image] 17 - Quality: 0 [File, File, Image] 18 - Bits Per Pixel: 24 [File, File, Image] 19 - Color Components: 3 [File, File, Image] 20 - Color Mode: RGB [File, File, Image] 21 - Background Color: 0 0 0 [PNG, PNG, Image] 0 - Image Width: 1 [PNG, PNG, Image] 4 - Image Height: 1 [PNG, PNG, Image] 8 - Bit Depth: 8 [PNG, PNG, Image] 9 - Color Type: RGB [PNG, PNG, Image] 10 - Compression: Deflate/Inflate [PNG, PNG, Image] 11 - Filter: Adaptive [PNG, PNG, Image] 12 - Interlace: Noninterlaced [PNG, PNG, Image] sRGB - SRGB Rendering: Perceptual [PNG, PNG-pHYs, Image] 0 - Pixels Per Unit X: 2835 [PNG, PNG-pHYs, Image] 4 - Pixels Per Unit Y: 2835 [PNG, PNG-pHYs, Image] 8 - Pixel Units: meters [PNG, PNG, Image] Comment - Comment: ExifTool PGF Test [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PhaseOne.t�������������������������������������������������������������������000644 �000765 �000024 �00000001666 12634340723 016532� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/PhaseOne.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::PhaseOne; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'PhaseOne'; my $testnum = 1; # test 2: Extract information from PhaseOne.iiq { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/PhaseOne.iiq'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( ['SerialNumber' => '1234'], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/PhaseOne.iiq'); print "ok $testnum\n"; } # end ��������������������������������������������������������������������������Image-ExifTool-10.10/t/PhaseOne_2.out���������������������������������������������������������������000644 �000765 �000024 �00000013417 12634554662 017325� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.08 [File, System, Image] FileName - File Name: PhaseOne.iiq [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 3.3 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:12:17 10:49:08-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:12:17 10:32:49-05:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:12:17 10:49:08-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: IIQ [File, File, Image] FileTypeExtension - File Type Extension: iiq [File, File, Image] MIMEType - MIME Type: image/x-raw [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [EXIF, IFD0, Image] 254 - Subfile Type: Full-resolution Image [EXIF, IFD0, Image] 256 - Image Width: 1 [EXIF, IFD0, Image] 257 - Image Height: 1 [EXIF, IFD0, Image] 258 - Bits Per Sample: 8 8 8 [EXIF, IFD0, Image] 259 - Compression: Uncompressed [EXIF, IFD0, Image] 262 - Photometric Interpretation: RGB [EXIF, IFD0, Camera] 271 - Make: Leaf [EXIF, IFD0, Camera] 272 - Camera Model Name: Credo 40 [EXIF, IFD0, Image] 273 - Strip Offsets: 3360 [EXIF, IFD0, Image] 277 - Samples Per Pixel: 3 [EXIF, IFD0, Image] 278 - Rows Per Strip: 1 [EXIF, IFD0, Image] 279 - Strip Byte Counts: 3 [EXIF, IFD0, Image] 282 - X Resolution: 341.3333333 [EXIF, IFD0, Image] 283 - Y Resolution: 341.3333333 [EXIF, IFD0, Image] 284 - Planar Configuration: Chunky [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, ExifIFD, Image] 18246 - Rating: 0 [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/1250 [EXIF, ExifIFD, Image] 33437 - F Number: 5.6 [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2013:06:19 15:44:21 [EXIF, ExifIFD, Time] 36868 - Create Date: 2013:06:19 15:44:21 [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 3 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/1250 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 5.6 [EXIF, ExifIFD, Camera] 37384 - Light Source: Daylight [EXIF, ExifIFD, Camera] 37386 - Focal Length: 80.0 mm [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 7320 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 5484 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Camera] 41987 - White Balance: Manual [EXIF, ExifIFD, Image] 42016 - Image Unique ID: 00004C20007000000400E05800000508 [EXIF, IFD1, Image] 254 - Subfile Type: Reduced-resolution image [EXIF, IFD1, Image] 256 - Image Width: 1 [EXIF, IFD1, Image] 257 - Image Height: 1 [EXIF, IFD1, Image] 258 - Bits Per Sample: 8 8 8 [EXIF, IFD1, Image] 259 - Compression: Uncompressed [EXIF, IFD1, Image] 262 - Photometric Interpretation: RGB [EXIF, IFD1, Image] 273 - Strip Offsets: 3356 [EXIF, IFD1, Image] 277 - Samples Per Pixel: 3 [EXIF, IFD1, Image] 278 - Rows Per Strip: 1 [EXIF, IFD1, Image] 279 - Strip Byte Counts: 3 [EXIF, IFD1, Image] 282 - X Resolution: 341.3333333 [EXIF, IFD1, Image] 283 - Y Resolution: 341.3333333 [EXIF, IFD1, Image] 284 - Planar Configuration: Chunky [EXIF, IFD1, Image] 296 - Resolution Unit: inches [MakerNotes, PhaseOne, Camera] 271 - Raw Data: (Binary data 15 bytes) [MakerNotes, PhaseOne, Camera] 256 - Camera Orientation: Horizontal (normal) [MakerNotes, PhaseOne, Camera] 264 - Sensor Width: 7372 [MakerNotes, PhaseOne, Camera] 265 - Sensor Height: 5536 [MakerNotes, PhaseOne, Camera] 266 - Sensor Left Margin: 36 [MakerNotes, PhaseOne, Camera] 267 - Sensor Top Margin: 6 [MakerNotes, PhaseOne, Camera] 268 - Image Width: 7320 [MakerNotes, PhaseOne, Camera] 269 - Image Height: 5484 [MakerNotes, PhaseOne, Camera] 270 - Raw Format: IIQ L [MakerNotes, PhaseOne, Camera] 275 - Image Number: 1288 [MakerNotes, PhaseOne, Camera] 261 - ISO: 100 [MakerNotes, PhaseOne, Camera] 528 - Sensor Temperature: 37.00 C [MakerNotes, PhaseOne, Camera] 529 - Sensor Temperature 2: 37.00 C [MakerNotes, PhaseOne, Time] 274 - Date/Time Original: 2013:06:19 15:44:21 [MakerNotes, PhaseOne, Camera] 541 - Black Level: 1024 [MakerNotes, PhaseOne, Camera] 263 - WB RGB Levels: 1.30548012256622 1 1.41912007331848 [MakerNotes, PhaseOne, Camera] 262 - Color Matrix 1: 1.280 -0.280 0.000 -0.050 1.180 -0.130 0.000 -0.250 1.250 [MakerNotes, PhaseOne, Camera] 550 - Color Matrix 2: 1.950 -0.950 0.000 -0.250 1.750 -0.500 0.000 -0.950 1.950 [MakerNotes, PhaseOne, Camera] 1042 - Lens Model: Mamiya LS 80mm f/2.8 D [MakerNotes, PhaseOne, Camera] 540 - Strip Offsets: (Binary data 54 bytes) [MakerNotes, PhaseOne, Camera] 547 - Black Level Data: (Binary data 65 bytes) [MakerNotes, PhaseOne, Camera] 546 - Split Column: 3696 [MakerNotes, PhaseOne, Camera] 769 - Firmware Versions: Credo 40, Factory Firmware: 1.01.4 [MakerNotes, PhaseOne, Camera] 515 - Software: Camera back, Firmware: 1.01.4 [MakerNotes, PhaseOne, Camera] 516 - System: Digital Camera Back [MakerNotes, PhaseOne, Camera] 258 - Serial Number: LD001055 [MakerNotes, PhaseOne, Camera] 1024 - Shutter Speed Value: 1/1250 [MakerNotes, PhaseOne, Camera] 1025 - Aperture Value: 5.6 [MakerNotes, PhaseOne, Camera] 1027 - Focal Length: 80.0 mm [MakerNotes, PhaseOne, Camera] 1031 - Serial Number: LD001055 [MakerNotes, PhaseOne, Camera] 1024 - Sensor Defects: (Binary data 12 bytes) [Composite, Composite, Image] Aperture - Aperture: 5.6 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.41912 [Composite, Composite, Image] ImageSize - Image Size: 7320x5484 [Composite, Composite, Image] Megapixels - Megapixels: 40.1 [Composite, Composite, Camera] RedBalance - Red Balance: 1.30548 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/1250 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 80.0 mm [Composite, Composite, Image] LightValue - Light Value: 15.3 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PhaseOne_3.out���������������������������������������������������������������000644 �000765 �000024 �00000026312 12634554662 017324� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.08 [File, System, Image] FileName - File Name: PhaseOne_3_failed.iiq [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 3.3 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:12:17 10:49:25-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:12:17 10:49:25-05:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:12:17 10:49:25-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: IIQ [File, File, Image] FileTypeExtension - File Type Extension: iiq [File, File, Image] MIMEType - MIME Type: image/x-raw [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [EXIF, IFD0, Image] 254 - Subfile Type: Full-resolution Image [EXIF, IFD0, Image] 256 - Image Width: 1 [EXIF, IFD0, Image] 257 - Image Height: 1 [EXIF, IFD0, Image] 258 - Bits Per Sample: 8 8 8 [EXIF, IFD0, Image] 259 - Compression: Uncompressed [EXIF, IFD0, Image] 262 - Photometric Interpretation: RGB [EXIF, IFD0, Camera] 271 - Make: Leaf [EXIF, IFD0, Camera] 272 - Camera Model Name: Credo 40 [EXIF, IFD0, Image] 273 - Strip Offsets: 3370 [EXIF, IFD0, Image] 277 - Samples Per Pixel: 3 [EXIF, IFD0, Image] 278 - Rows Per Strip: 1 [EXIF, IFD0, Image] 279 - Strip Byte Counts: 3 [EXIF, IFD0, Image] 282 - X Resolution: 341.3333333 [EXIF, IFD0, Image] 283 - Y Resolution: 341.3333333 [EXIF, IFD0, Image] 284 - Planar Configuration: Chunky [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, ExifIFD, Image] 18246 - Rating: 0 [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/1250 [EXIF, ExifIFD, Image] 33437 - F Number: 5.6 [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2013:06:19 15:44:21 [EXIF, ExifIFD, Time] 36868 - Create Date: 2013:06:19 15:44:21 [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 3 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/1250 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 5.6 [EXIF, ExifIFD, Camera] 37384 - Light Source: Daylight [EXIF, ExifIFD, Camera] 37386 - Focal Length: 80.0 mm [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 7320 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 5484 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Camera] 41987 - White Balance: Manual [EXIF, ExifIFD, Image] 42016 - Image Unique ID: 00004C20007000000400E05800000508 [EXIF, ExifIFD, Image] 42033 - Serial Number: 1234 [EXIF, IFD1, Image] 254 - Subfile Type: Reduced-resolution image [EXIF, IFD1, Image] 256 - Image Width: 1 [EXIF, IFD1, Image] 257 - Image Height: 1 [EXIF, IFD1, Image] 258 - Bits Per Sample: 8 8 8 [EXIF, IFD1, Image] 259 - Compression: Uncompressed [EXIF, IFD1, Image] 262 - Photometric Interpretation: RGB [EXIF, IFD1, Image] 273 - Strip Offsets: 3366 [EXIF, IFD1, Image] 277 - Samples Per Pixel: 3 [EXIF, IFD1, Image] 278 - Rows Per Strip: 1 [EXIF, IFD1, Image] 279 - Strip Byte Counts: 3 [EXIF, IFD1, Image] 282 - X Resolution: 341.3333333 [EXIF, IFD1, Image] 283 - Y Resolution: 341.3333333 [EXIF, IFD1, Image] 284 - Planar Configuration: Chunky [EXIF, IFD1, Image] 296 - Resolution Unit: inches [MakerNotes, PhaseOne, Camera] 271 - Raw Data: (Binary data 15 bytes) [MakerNotes, PhaseOne, Camera] 256 - Camera Orientation: Horizontal (normal) [MakerNotes, PhaseOne, Camera] 533 - Phase One 0x0215: 2 [MakerNotes, PhaseOne, Camera] 264 - Sensor Width: 7372 [MakerNotes, PhaseOne, Camera] 265 - Sensor Height: 5536 [MakerNotes, PhaseOne, Camera] 266 - Sensor Left Margin: 36 [MakerNotes, PhaseOne, Camera] 267 - Sensor Top Margin: 6 [MakerNotes, PhaseOne, Camera] 268 - Image Width: 7320 [MakerNotes, PhaseOne, Camera] 269 - Image Height: 5484 [MakerNotes, PhaseOne, Camera] 270 - Raw Format: IIQ L [MakerNotes, PhaseOne, Camera] 259 - Phase One 0x0103: 19 [MakerNotes, PhaseOne, Camera] 275 - Image Number: 1288 [MakerNotes, PhaseOne, Camera] 257 - Phase One 0x0101: 32 [MakerNotes, PhaseOne, Camera] 260 - Phase One 0x0104: 50 [MakerNotes, PhaseOne, Camera] 261 - ISO: 100 [MakerNotes, PhaseOne, Camera] 523 - Phase One 0x020b: 0 [MakerNotes, PhaseOne, Camera] 524 - Phase One 0x020c: 2 [MakerNotes, PhaseOne, Camera] 581 - Phase One 0x0245: 1.20000004768372 [MakerNotes, PhaseOne, Camera] 526 - Phase One 0x020e: 3 [MakerNotes, PhaseOne, Camera] 528 - Sensor Temperature: 37.00 C [MakerNotes, PhaseOne, Camera] 529 - Sensor Temperature 2: 37.00 C [MakerNotes, PhaseOne, Time] 530 - Unknown Date: 2013:06:19 15:44:22 [MakerNotes, PhaseOne, Camera] 531 - Phase One 0x0213: 32 [MakerNotes, PhaseOne, Time] 274 - Date/Time Original: 2013:06:19 15:44:21 [MakerNotes, PhaseOne, Camera] 542 - Phase One 0x021e: 1 [MakerNotes, PhaseOne, Camera] 544 - Phase One 0x0220: 32 [MakerNotes, PhaseOne, Camera] 545 - Phase One 0x0221: 0 [MakerNotes, PhaseOne, Camera] 580 - Phase One 0x0244: 0 [MakerNotes, PhaseOne, Camera] 554 - Phase One 0x022a: 0 [MakerNotes, PhaseOne, Camera] 555 - Phase One 0x022b: 0 [MakerNotes, PhaseOne, Camera] 556 - Phase One 0x022c: 0 [MakerNotes, PhaseOne, Camera] 551 - Phase One 0x0227: 0 [MakerNotes, PhaseOne, Camera] 553 - Phase One 0x0229: 0 [MakerNotes, PhaseOne, Camera] 768 - Phase One 0x0300: 2097264 [MakerNotes, PhaseOne, Camera] 772 - Phase One 0x0304: 4 [MakerNotes, PhaseOne, Camera] 541 - Black Level: 1024 [MakerNotes, PhaseOne, Camera] 263 - WB RGB Levels: 1.30548012256622 1 1.41912007331848 [MakerNotes, PhaseOne, Camera] 262 - Color Matrix 1: 1.280 -0.280 0.000 -0.050 1.180 -0.130 0.000 -0.250 1.250 [MakerNotes, PhaseOne, Camera] 550 - Color Matrix 2: 1.950 -0.950 0.000 -0.250 1.750 -0.500 0.000 -0.950 1.950 [MakerNotes, PhaseOne, Camera] 1042 - Lens Model: Mamiya LS 80mm f/2.8 D [MakerNotes, PhaseOne, Camera] 540 - Strip Offsets: (Binary data 54 bytes) [MakerNotes, PhaseOne, Camera] 547 - Black Level Data: (Binary data 65 bytes) [MakerNotes, PhaseOne, Camera] 546 - Split Column: 3696 [MakerNotes, PhaseOne, Camera] 549 - Phase One 0x0225: 25660 28021 31085 25632 29793 15969 [MakerNotes, PhaseOne, Camera] 548 - Phase One 0x0224: 2748 [MakerNotes, PhaseOne, Camera] 769 - Firmware Versions: Credo 40, Factory Firmware: 1.01.4 [MakerNotes, PhaseOne, Camera] 515 - Software: Camera back, Firmware: 1.01.4 [MakerNotes, PhaseOne, Camera] 516 - System: Digital Camera Back [MakerNotes, PhaseOne, Camera] 258 - Serial Number: 1234 [MakerNotes, PhaseOne, Camera] 1024 - Shutter Speed Value: 1/1250 [MakerNotes, PhaseOne, Camera] 1025 - Aperture Value: 5.6 [MakerNotes, PhaseOne, Camera] 1027 - Focal Length: 80.0 mm [MakerNotes, PhaseOne, Camera] 578 - Phase One 0x0242: 1 [MakerNotes, PhaseOne, Camera] 579 - Phase One 0x0243: 27 [MakerNotes, PhaseOne, Camera] 1041 - Phase One 0x0411: 33556736 [MakerNotes, PhaseOne, Camera] 1043 - Phase One 0x0413: 16909056 [MakerNotes, PhaseOne, Camera] 1028 - Sensor Calibration 0x0404: IGNORE [MakerNotes, PhaseOne, Camera] 1029 - Sensor Calibration 0x0405: IGNORE [MakerNotes, PhaseOne, Camera] 1030 - Sensor Calibration 0x0406: IGNORE [MakerNotes, PhaseOne, Camera] 1031 - Serial Number: 1234 [MakerNotes, PhaseOne, Camera] 1026 - Sensor Calibration 0x0402: [MakerNotes, PhaseOne, Camera] 1032 - Sensor Calibration 0x0408: -71.6800003051758 1.93874990940094 [MakerNotes, PhaseOne, Camera] 1043 - Sensor Calibration 0x0413: 10 [MakerNotes, PhaseOne, Camera] 1065 - Sensor Calibration 0x0429: 1836409916 1679849837 1046574177 [MakerNotes, PhaseOne, Camera] 1066 - Sensor Calibration 0x042a: 1836409916 1679849837 1046574177 [MakerNotes, PhaseOne, Camera] 1067 - Sensor Calibration 0x042b: 1836409916 1679849837 1046574177 [MakerNotes, PhaseOne, Camera] 1068 - Sensor Calibration 0x042c: 1836409916 1679849837 1046574177 [MakerNotes, PhaseOne, Camera] 1073 - Sensor Calibration 0x0431: 2834 5641 11238 18190 25062 31884 37951 10032 10042 100[...] [MakerNotes, PhaseOne, Camera] 1074 - Sensor Calibration 0x0432: 4914 10023 20046 40093 10026 10030 10032 10031 10000 10[...] [MakerNotes, PhaseOne, Camera] 1069 - Sensor Calibration 0x042d: 1836409916 1679849837 1046574177 [MakerNotes, PhaseOne, Camera] 1070 - Sensor Calibration 0x042e: 1836409916 1679849837 1046574177 [MakerNotes, PhaseOne, Camera] 1071 - Sensor Calibration 0x042f: 1836409916 1679849837 1046574177 [MakerNotes, PhaseOne, Camera] 1072 - Sensor Calibration 0x0430: 1836409916 1679849837 1046574177 [MakerNotes, PhaseOne, Camera] 1076 - Sensor Calibration 0x0434: 1836409916 1679849837 1046574177 [MakerNotes, PhaseOne, Camera] 1077 - Sensor Calibration 0x0435: 1836409916 1679849837 1046574177 [MakerNotes, PhaseOne, Camera] 1078 - Sensor Calibration 0x0436: 1836409916 1679849837 1046574177 [MakerNotes, PhaseOne, Camera] 1079 - Sensor Calibration 0x0437: 1836409916 1679849837 1046574177 [MakerNotes, PhaseOne, Camera] 1052 - Sensor Calibration 0x041c: 0.989000022411346 0.972000002861023 [MakerNotes, PhaseOne, Camera] 1044 - Sensor Calibration 0x0414: II.ÔCˆ?8-x½©j‚»Æ¿O;â;?.áQ¼+Áâ;¿.œ<`Yy?"lp?Û…f=Ó.–;÷’F»óq}?å'U<–ìØ»²ô¡¼k`ƒ?|,}?)Ëx?#-e? [MakerNotes, PhaseOne, Camera] 1075 - Sensor Calibration 0x0433: 1836409916 1679849837 1046574177 [MakerNotes, PhaseOne, Camera] 1024 - Sensor Defects: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1040 - All Color Flat Field 2: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1040 - All Color Flat Field 2: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1040 - All Color Flat Field 2: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1040 - All Color Flat Field 2: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1040 - All Color Flat Field 2: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1040 - All Color Flat Field 2: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1040 - All Color Flat Field 2: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1040 - All Color Flat Field 2: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1040 - All Color Flat Field 2: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1040 - All Color Flat Field 2: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1040 - All Color Flat Field 2: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1035 - Red Blue Flat Field: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1035 - Red Blue Flat Field: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1035 - Red Blue Flat Field: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1035 - Red Blue Flat Field: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1035 - Red Blue Flat Field: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1035 - Red Blue Flat Field: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1035 - Red Blue Flat Field: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 1035 - Red Blue Flat Field: (Binary data 12 bytes) [MakerNotes, PhaseOne, Camera] 586 - Phase One 0x024a: 1363265759 [Composite, Composite, Image] Aperture - Aperture: 5.6 [Composite, Composite, Image] ImageSize - Image Size: 7320x5484 [Composite, Composite, Image] Megapixels - Megapixels: 40.1 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/1250 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.41912 [Composite, Composite, Image] LightValue - Light Value: 15.3 [Composite, Composite, Camera] RedBalance - Red Balance: 1.30548 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 80.0 mm ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PhotoCD.t��������������������������������������������������������������������000644 �000765 �000024 �00000001275 11752001054 016313� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/PhotoCD.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::PhotoCD; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'PhotoCD'; my $testnum = 1; # test 2: Extract information from PhotoCD file { my $exifTool = new Image::ExifTool; ++$testnum; my $info = $exifTool->ImageInfo('t/images/PhotoCD.pcd'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PhotoCD_2.out����������������������������������������������������������������000644 �000765 �000024 �00000004701 12546457276 017124� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: PhotoCD.pcd [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 4.0 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2012:05:07 13:11:08-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PCD [File, File, Image] FileTypeExtension - File Type Extension: pcd [File, File, Image] MIMEType - MIME Type: image/x-photo-cd [PhotoCD, PhotoCD, Image] 7 - Specification Version: 0.6 [PhotoCD, PhotoCD, Image] 9 - Authoring Software Release: 7.61 [PhotoCD, PhotoCD, Image] 11 - Image Magnification Descriptor: 1.0 [PhotoCD, PhotoCD, Time] 13 - Create Date: 2001:06:27 01:29:36-04:00 [PhotoCD, PhotoCD, Time] 17 - Modify Date: 2001:06:27 01:29:36-04:00 [PhotoCD, PhotoCD, Image] 21 - Image Medium: Color negative [PhotoCD, PhotoCD, Image] 22 - Product Type: 080/11 SPD 0100 [PhotoCD, PhotoCD, Image] 42 - Scanner Vendor ID: KODAK /4220 [PhotoCD, PhotoCD, Image] 62 - Scanner Product ID: FilmScanner 2000 [PhotoCD, PhotoCD, Image] 78 - Scanner Firmware Version: 4.17 [PhotoCD, PhotoCD, Image] 82 - Scanner Firmware Date: [PhotoCD, PhotoCD, Image] 90 - Scanner Serial Number: 436 [PhotoCD, PhotoCD, Image] 110 - Scanner Pixel Size: 11.48 micrometers [PhotoCD, PhotoCD, Image] 112 - Image Workstation Make: Eastman Kodak [PhotoCD, PhotoCD, Image] 132 - Character Set: 95 characters ISO 646 [PhotoCD, PhotoCD, Image] 165 - Photo Finisher Name: Prolab, Inc. 206-547-5447 [PhotoCD, PhotoCD, Image] 228 - Scene Balance Algorithm Revision: 6.7 [PhotoCD, PhotoCD, Image] 230 - Scene Balance Algorithm Command: Neutral SBA On, Color SBA On [PhotoCD, PhotoCD, Image] 325 - Scene Balance Algorithm Film ID: Kodak Gold 100 Gen 2 [PhotoCD, PhotoCD, Image] 331 - Copyright Status: Not specified [PhotoCD, PhotoCD, Image] 1538 - Orientation: Rotate 270 CW [PhotoCD, PhotoCD, Image] 1538.1 - Image Width: 2048 [PhotoCD, PhotoCD, Image] 1538.2 - Image Height: 3072 [PhotoCD, PhotoCD, Image] 1538.3 - Compression Class: Class 1 - 35mm film; Pictoral hard copy [Composite, Composite, Image] ImageSize - Image Size: 2048x3072 [Composite, Composite, Image] Megapixels - Megapixels: 6.3 ���������������������������������������������������������������Image-ExifTool-10.10/t/PhotoMechanic.t��������������������������������������������������������������000644 �000765 �000024 �00000001770 11327642463 017551� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/PhotoMechanic.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::PhotoMechanic; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'PhotoMechanic'; my $testnum = 1; # test 2: Extract information from PhotoMechanic.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/PhotoMechanic.jpg', {Duplicates => 1}); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Test writing some information { ++$testnum; my @writeInfo = ( ['Rotation' => 90 ], ['Keywords' => 'PhotoMechanic' ], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, undef, 1); print "ok $testnum\n"; } # end ��������Image-ExifTool-10.10/t/PhotoMechanic_2.out����������������������������������������������������������000644 �000765 �000024 �00000012023 12546457276 020341� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: PhotoMechanic.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 3.3 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:10:31 12:53:49-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:17-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 2c19015ea7e2d138576e147a3f093c1a [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [IPTC, IPTC, Other] 0 - Application Record Version: 3 [IPTC, IPTC, Time] 55 - Date Created: 2006:10:29 [IPTC, IPTC, Time] 60 - Time Created: 06:27:51-05:00 [IPTC, IPTC, Location] 90 - City: kingston [IPTC, IPTC, Location] 95 - Province-State: State [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Country [IPTC, IPTC, Location] 100 - Country-Primary Location Code: COD [IPTC, IPTC, Other] 5 - Object Name: Object Name [IPTC, IPTC, Other] 15 - Category: Category [IPTC, IPTC, Other] 20 - Supplemental Categories: Supp Cat 1, Supp Cat 2 [IPTC, IPTC, Other] 25 - Keywords: Keywords, one, three, two [IPTC, IPTC, Other] 7 - Edit Status: Edit Status [IPTC, IPTC, Author] 80 - By-line: Photographer [IPTC, IPTC, Author] 85 - By-line Title: Title [IPTC, IPTC, Author] 110 - Credit: Credit [IPTC, IPTC, Author] 115 - Source: Source [IPTC, IPTC, Author] 122 - Writer-Editor: Writers [IPTC, IPTC, Other] 120 - Caption-Abstract: Caption [IPTC, IPTC, Other] 105 - Headline: Headline [IPTC, IPTC, Other] 40 - Special Instructions: Special ins [IPTC, IPTC, Other] 10 - Urgency: 8 (least urgent) [IPTC, IPTC, Author] 116 - Copyright Notice: Copyright [IPTC, IPTC, Image] 221 - Prefs: Tagged:0, ColorClass:0, Rating:0, FrameNum:-00001 [Photoshop, Photoshop, Image] 0 - X Resolution: 200 [Photoshop, Photoshop, Image] 2 - Displayed Units X: inches [Photoshop, Photoshop, Image] 4 - Y Resolution: 200 [Photoshop, Photoshop, Image] 6 - Displayed Units Y: inches [Photoshop, Photoshop, Author] 1034 - Copyright Flag: True [XMP, XMP-x, Document] xmptk - XMP Toolkit: XMP toolkit 2.9-9, framework 1.6 [XMP, XMP-iptcCore, Location] CountryCode - Country Code: COD [XMP, XMP-photoshop, Location] City - City: kingston [XMP, XMP-photoshop, Location] State - State: State [XMP, XMP-photoshop, Location] Country - Country: Country [XMP, XMP-photoshop, Image] Category - Category: Category [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: Title [XMP, XMP-photoshop, Author] Credit - Credit: Credit [XMP, XMP-photoshop, Author] Source - Source: Source [XMP, XMP-photoshop, Author] CaptionWriter - Caption Writer: Writers [XMP, XMP-photoshop, Image] Headline - Headline: Headline [XMP, XMP-photoshop, Image] Instructions - Instructions: Special ins [XMP, XMP-photoshop, Image] TransmissionReference - Transmission Reference: Trans ref [XMP, XMP-photoshop, Image] Urgency - Urgency: 8 (least urgent) [XMP, XMP-photoshop, Image] SupplementalCategories - Supplemental Categories: Supp Cat 1, Supp Cat 2 [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2006:10:29 [XMP, XMP-xmpRights, Author] Marked - Marked: True [XMP, XMP-photomech, Image] Prefs - Prefs: Tagged:0, ColorClass:0, Rating:0, FrameNum:-00001 [XMP, XMP-photomech, Image] EditStatus - Edit Status: Edit Status [XMP, XMP-photomech, Location] CountryCode - Country Code: COD [XMP, XMP-photomech, Time] TimeCreated - Time Created: 06:27:51-05:00 [XMP, XMP-dc, Image] subject - Subject: Keywords, one, three, two [XMP, XMP-dc, Image] description - Description: Caption [XMP, XMP-dc, Author] creator - Creator: Photographer [XMP, XMP-dc, Image] title - Title: Object Name [XMP, XMP-dc, Author] rights - Rights: Copyright [PhotoMechanic, PhotoMechanic, Image] 221 - Tagged: Yes [PhotoMechanic, PhotoMechanic, Image] 222 - Color Class: 6 (Typical alt) [PhotoMechanic, PhotoMechanic, Image] 216 - Rotation: 180 [PhotoMechanic, PhotoMechanic, Image] 217 - Crop Left: 438 [PhotoMechanic, PhotoMechanic, Image] 218 - Crop Top: 618 [PhotoMechanic, PhotoMechanic, Image] 219 - Crop Right: 890 [PhotoMechanic, PhotoMechanic, Image] 220 - Crop Bottom: 1072 [Composite, Composite, Time] DateTimeCreated - Date/Time Created: 2006:10:29 06:27:51-05:00 [Composite, Composite, Time] DateTimeOriginal - Date/Time Original: 2006:10:29 06:27:51-05:00 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PhotoMechanic_3.out����������������������������������������������������������000644 �000765 �000024 �00000000152 10521117436 020320� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[IPTC, IPTC, Other] 25 - Keywords: PhotoMechanic [PhotoMechanic, PhotoMechanic, Image] 216 - Rotation: 90 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Photoshop.t������������������������������������������������������������������000644 �000765 �000024 �00000002111 11327642463 017001� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Photoshop.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Photoshop; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Photoshop'; my $testnum = 1; # test 2: Extract information from Photoshop.psd { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Photoshop.psd'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( [XResolution => '120'], [YResolution => '120'], [Creator => 'Phil Harvey'], ['By-Line' => 'Phil Again'], ['PhotoMechanic:Tagged' => No], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/Photoshop.psd'); print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Photoshop_2.out��������������������������������������������������������������000644 �000765 �000024 �00000014425 12546457276 017613� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Photoshop.psd [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 17 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2007:04:14 21:00:40-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:18-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PSD [File, File, Image] FileTypeExtension - File Type Extension: psd [File, File, Image] MIMEType - MIME Type: application/vnd.adobe.photoshop [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: b765e54396f2885e9a76ff4ad665b190 [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [Photoshop, Photoshop, Image] 6 - Num Channels: 3 [Photoshop, Photoshop, Image] 7 - Image Height: 8 [Photoshop, Photoshop, Image] 9 - Image Width: 8 [Photoshop, Photoshop, Image] 11 - Bit Depth: 8 [Photoshop, Photoshop, Image] 12 - Color Mode: RGB [Photoshop, Photoshop, Image] 1061 - IPTC Digest: b765e54396f2885e9a76ff4ad665b190 [Photoshop, Photoshop, Image] 0 - X Resolution: 72 [Photoshop, Photoshop, Image] 2 - Displayed Units X: inches [Photoshop, Photoshop, Image] 4 - Y Resolution: 72 [Photoshop, Photoshop, Image] 6 - Displayed Units Y: inches [Photoshop, Photoshop, Image] 1037 - Global Angle: 120 [Photoshop, Photoshop, Image] 1049 - Global Altitude: 30 [Photoshop, Photoshop, Author] 1034 - Copyright Flag: False [Photoshop, Photoshop, Author] 1035 - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 120 - Caption-Abstract: This is a teeny weeny white square [IPTC, IPTC, Author] 122 - Writer-Editor: Me too [IPTC, IPTC, Author] 80 - By-line: Phil Harvey [IPTC, IPTC, Author] 85 - By-line Title: Supreme leader [IPTC, IPTC, Other] 5 - Object Name: Test Picture [IPTC, IPTC, Author] 116 - Copyright Notice: Free for all [XMP, XMP-x, Document] xmptk - XMP Toolkit: XMP toolkit 2.8.2-33, framework 1.5 [XMP, XMP-rdf, Document] about - About: uuid:c197d41e-f8f7-11d9-b03e-c023c3939af5 [XMP, XMP-photoshop, Author] CaptionWriter - Caption Writer: Me too [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: Supreme leader [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: This isn't a job [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:photoshop:c197d41a-f8f7-11d9-b03e-c023c3939af5 [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ [XMP, XMP-dc, Image] description - Description: This is a teeny weeny white square [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] title - Title: Test Picture [XMP, XMP-dc, Author] rights - Rights: Free for all [ICC_Profile, ICC-header, Image] 4 - Profile CMM Type: ADBE [ICC_Profile, ICC-header, Image] 8 - Profile Version: 2.1.0 [ICC_Profile, ICC-header, Image] 12 - Profile Class: Display Device Profile [ICC_Profile, ICC-header, Image] 16 - Color Space Data: RGB [ICC_Profile, ICC-header, Image] 20 - Profile Connection Space: XYZ [ICC_Profile, ICC-header, Time] 24 - Profile Date Time: 1999:06:03 00:00:00 [ICC_Profile, ICC-header, Image] 36 - Profile File Signature: acsp [ICC_Profile, ICC-header, Image] 40 - Primary Platform: Apple Computer Inc. [ICC_Profile, ICC-header, Image] 44 - CMM Flags: Not Embedded, Independent [ICC_Profile, ICC-header, Image] 48 - Device Manufacturer: none [ICC_Profile, ICC-header, Image] 52 - Device Model: [ICC_Profile, ICC-header, Image] 56 - Device Attributes: Reflective, Glossy, Positive, Color [ICC_Profile, ICC-header, Image] 64 - Rendering Intent: Media-Relative Colorimetric [ICC_Profile, ICC-header, Image] 68 - Connection Space Illuminant: 0.9642 1 0.82491 [ICC_Profile, ICC-header, Image] 80 - Profile Creator: ADBE [ICC_Profile, ICC-header, Image] 84 - Profile ID: 0 [ICC_Profile, ICC_Profile, Image] cprt - Profile Copyright: Copyright 1999 Adobe Systems Incorporated [ICC_Profile, ICC_Profile, Image] desc - Profile Description: Apple RGB [ICC_Profile, ICC_Profile, Image] wtpt - Media White Point: 0.95045 1 1.08905 [ICC_Profile, ICC_Profile, Image] bkpt - Media Black Point: 0 0 0 [ICC_Profile, ICC_Profile, Image] rTRC - Red Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] gTRC - Green Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] bTRC - Blue Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] rXYZ - Red Matrix Column: 0.47554 0.25516 0.01845 [ICC_Profile, ICC_Profile, Image] gXYZ - Green Matrix Column: 0.33972 0.67259 0.11333 [ICC_Profile, ICC_Profile, Image] bXYZ - Blue Matrix Column: 0.14896 0.07225 0.69312 [EXIF, IFD0, Image] 270 - Image Description: This is a teeny weeny white square [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Adobe Photoshop 7.0 [EXIF, IFD0, Time] 306 - Modify Date: 2005:07:18 08:27:14 [EXIF, IFD0, Author] 315 - Artist: Phil Harvey [EXIF, IFD0, Author] 33432 - Copyright: Free for all [EXIF, ExifIFD, Image] 40961 - Color Space: Uncalibrated [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 8 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 8 [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 390 [EXIF, IFD1, Image] 514 - Thumbnail Length: 0 [PhotoMechanic, PhotoMechanic, Image] 221 - Tagged: Yes [PhotoMechanic, PhotoMechanic, Image] 222 - Color Class: 6 (Typical alt) [PhotoMechanic, PhotoMechanic, Image] 216 - Rotation: 180 [PhotoMechanic, PhotoMechanic, Image] 217 - Crop Left: 438 [PhotoMechanic, PhotoMechanic, Image] 218 - Crop Top: 618 [PhotoMechanic, PhotoMechanic, Image] 219 - Crop Right: 890 [PhotoMechanic, PhotoMechanic, Image] 220 - Crop Bottom: 1072 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Photoshop_3.out��������������������������������������������������������������000644 �000765 �000024 �00000017156 12546457276 017620� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Photoshop_3_failed.psd [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 16 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:48-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:48-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:48-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PSD [File, File, Image] FileTypeExtension - File Type Extension: psd [File, File, Image] MIMEType - MIME Type: application/vnd.adobe.photoshop [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 01c26dbee9b75ddbe23315cf1b5e1486 [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [Photoshop, Photoshop, Image] 6 - Num Channels: 3 [Photoshop, Photoshop, Image] 7 - Image Height: 8 [Photoshop, Photoshop, Image] 9 - Image Width: 8 [Photoshop, Photoshop, Image] 11 - Bit Depth: 8 [Photoshop, Photoshop, Image] 12 - Color Mode: RGB [Photoshop, Photoshop, Image] 1061 - IPTC Digest: b765e54396f2885e9a76ff4ad665b190 [Photoshop, Photoshop, Image] 1002 - XML Data: (Binary data 7600 bytes) [Photoshop, Photoshop, Image] 1001 - Macintosh Print Info: .HH.Þ.@ÿîÿî...R.g.(.ü.HH.Ø.(.d......ÿ..h... [Photoshop, Photoshop, Image] 0 - X Resolution: 120 [Photoshop, Photoshop, Image] 2 - Displayed Units X: inches [Photoshop, Photoshop, Image] 4 - Y Resolution: 120 [Photoshop, Photoshop, Image] 6 - Displayed Units Y: inches [Photoshop, Photoshop, Image] 1062 - Print Scale: ?€ [Photoshop, Photoshop, Image] 1037 - Global Angle: 120 [Photoshop, Photoshop, Image] 1049 - Global Altitude: 30 [Photoshop, Photoshop, Image] 1011 - Print Flags: 0 0 0 0 0 0 0 0 1 [Photoshop, Photoshop, Author] 1034 - Copyright Flag: False [Photoshop, Photoshop, Author] 1035 - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [Photoshop, Photoshop, Image] 10000 - Print Flags Info: .. [Photoshop, Photoshop, Image] 1013 - Color Halftoning Info: /ff.lff../ff.¡™š..2.Z..5.-.. [Photoshop, Photoshop, Image] 1016 - Color Transfer Funcs: ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.è [Photoshop, Photoshop, Image] 1032 - Grid Guides Info: ..@.@ [Photoshop, Photoshop, Image] 1054 - URL List: [Photoshop, Photoshop, Image] 1050 - Slices: ....b.......null..boundsObjc.Rct1.Top longLeftlongBtomlong.Rghtlong..slicesVlLs.Objc..slice..sliceIDlong.groupIDlong.originenum.ESliceOrigin;autoGeneratedTypeenum;ESliceTypeImg .boundsObjc.Rct1.Top longLeftlongBtomlong.Rghtlong..urlTEXT.nullTEXT.MsgeTEXT..altTagTEXT..cellTextIsHTMLbool..cellTextTEXT..horzAlignenum.ESliceHorzAlign.default.vertAlignenum.ESliceVertAlign.default.bgColorTypeenum.ESliceBGColorTypeNone.topOutsetlong;leftOutsetlong.bottomOutsetlong.rightOutsetlong [Photoshop, Photoshop, Image] 1044 - IDs Base Value: 1 [Photoshop, Photoshop, Image] 1057 - Version Info: ...Adobe Photoshop.Adobe Photoshop 7.0. [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 120 - Caption-Abstract: This is a teeny weeny white square [IPTC, IPTC, Author] 122 - Writer-Editor: Me too [IPTC, IPTC, Author] 80 - By-line: Phil Again [IPTC, IPTC, Author] 85 - By-line Title: Supreme leader [IPTC, IPTC, Other] 5 - Object Name: Test Picture [IPTC, IPTC, Author] 116 - Copyright Notice: Free for all [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-rdf, Document] about - About: uuid:c197d41e-f8f7-11d9-b03e-c023c3939af5 [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: This is a teeny weeny white square [XMP, XMP-dc, Author] rights - Rights: Free for all [XMP, XMP-dc, Image] title - Title: Test Picture [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: Supreme leader [XMP, XMP-photoshop, Author] CaptionWriter - Caption Writer: Me too [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: This isn't a job [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:photoshop:c197d41a-f8f7-11d9-b03e-c023c3939af5 [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ [ICC_Profile, ICC-header, Image] 4 - Profile CMM Type: ADBE [ICC_Profile, ICC-header, Image] 8 - Profile Version: 2.1.0 [ICC_Profile, ICC-header, Image] 12 - Profile Class: Display Device Profile [ICC_Profile, ICC-header, Image] 16 - Color Space Data: RGB [ICC_Profile, ICC-header, Image] 20 - Profile Connection Space: XYZ [ICC_Profile, ICC-header, Time] 24 - Profile Date Time: 1999:06:03 00:00:00 [ICC_Profile, ICC-header, Image] 36 - Profile File Signature: acsp [ICC_Profile, ICC-header, Image] 40 - Primary Platform: Apple Computer Inc. [ICC_Profile, ICC-header, Image] 44 - CMM Flags: Not Embedded, Independent [ICC_Profile, ICC-header, Image] 48 - Device Manufacturer: none [ICC_Profile, ICC-header, Image] 52 - Device Model: [ICC_Profile, ICC-header, Image] 56 - Device Attributes: Reflective, Glossy, Positive, Color [ICC_Profile, ICC-header, Image] 64 - Rendering Intent: Media-Relative Colorimetric [ICC_Profile, ICC-header, Image] 68 - Connection Space Illuminant: 0.9642 1 0.82491 [ICC_Profile, ICC-header, Image] 80 - Profile Creator: ADBE [ICC_Profile, ICC-header, Image] 84 - Profile ID: 0 [ICC_Profile, ICC_Profile, Image] cprt - Profile Copyright: Copyright 1999 Adobe Systems Incorporated [ICC_Profile, ICC_Profile, Image] desc - Profile Description: Apple RGB [ICC_Profile, ICC_Profile, Image] wtpt - Media White Point: 0.95045 1 1.08905 [ICC_Profile, ICC_Profile, Image] bkpt - Media Black Point: 0 0 0 [ICC_Profile, ICC_Profile, Image] rTRC - Red Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] gTRC - Green Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] bTRC - Blue Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] rXYZ - Red Matrix Column: 0.47554 0.25516 0.01845 [ICC_Profile, ICC_Profile, Image] gXYZ - Green Matrix Column: 0.33972 0.67259 0.11333 [ICC_Profile, ICC_Profile, Image] bXYZ - Blue Matrix Column: 0.14896 0.07225 0.69312 [EXIF, IFD0, Image] 270 - Image Description: This is a teeny weeny white square [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 120 [EXIF, IFD0, Image] 283 - Y Resolution: 120 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Adobe Photoshop 7.0 [EXIF, IFD0, Time] 306 - Modify Date: 2005:07:18 08:27:14 [EXIF, IFD0, Author] 315 - Artist: Phil Harvey [EXIF, IFD0, Author] 33432 - Copyright: Free for all [EXIF, ExifIFD, Image] 40961 - Color Space: Uncalibrated [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 8 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 8 [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 388 [EXIF, IFD1, Image] 514 - Thumbnail Length: 0 [PhotoMechanic, PhotoMechanic, Image] 221 - Tagged: No [PhotoMechanic, PhotoMechanic, Image] 222 - Color Class: 6 (Typical alt) [PhotoMechanic, PhotoMechanic, Image] 216 - Rotation: 180 [PhotoMechanic, PhotoMechanic, Image] 217 - Crop Left: 438 [PhotoMechanic, PhotoMechanic, Image] 218 - Crop Top: 618 [PhotoMechanic, PhotoMechanic, Image] 219 - Crop Right: 890 [PhotoMechanic, PhotoMechanic, Image] 220 - Crop Bottom: 1072 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PICT.t�����������������������������������������������������������������������000644 �000765 �000024 �00000001257 11327642463 015567� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/PICT.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::PICT; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'PICT'; my $testnum = 1; # test 2: Extract information from PICT.pict { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/PICT.pict'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PICT_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000002063 12546457276 016362� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: PICT.pict [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 150 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2005:11:14 14:47:21-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PICT [File, File, Image] FileTypeExtension - File Type Extension: pict [File, File, Image] MIMEType - MIME Type: image/pict [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] XResolution - X Resolution: 72 [File, File, Image] YResolution - Y Resolution: 72 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PLIST.t����������������������������������������������������������������������000644 �000765 �000024 �00000001422 12111660556 015710� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/PLIST.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::PLIST; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'PLIST'; my $testnum = 1; # tests 2-3: Extract information from PLIST files { my $file; my $exifTool = new Image::ExifTool; foreach $file ('PLIST-xml.plist', 'PLIST-bin.plist') { ++$testnum; my $info = $exifTool->ImageInfo("t/images/$file"); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } } # end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PLIST_2.out������������������������������������������������������������������000644 �000765 �000024 �00000002567 12546457276 016527� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: PLIST-xml.plist [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 795 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2013:02:22 15:51:35-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PLIST [File, File, Image] FileTypeExtension - File Type Extension: plist [File, File, Image] MIMEType - MIME Type: application/xml [PLIST, XML, Document] TestArray - Test Array: one, two, three [PLIST, XML, Document] TestBoolean - Test Boolean: True [PLIST, XML, Document] TestData - Test Data: (Binary data 12 bytes) [PLIST, XML, Time] TestDate - Test Date: 2013:02:22 12:49:10Z [PLIST, XML, Document] TestDict/Author - Test Dict Author: Phil [PLIST, XML, Time] TestDict/When - Test Dict When: 2000:01:02 08:04:05Z [PLIST, XML, Document] TestInteger - Test Integer: 256 [PLIST, XML, Document] TestReal - Test Real: 1.4 [PLIST, XML, Document] TestString - Test String: ExifTool PLIST test [PLIST, XML, Document] TestUnicode - Test Unicode: ExîfTöøl PLIST tést �����������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PLIST_3.out������������������������������������������������������������������000644 �000765 �000024 �00000002632 12546457276 016521� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: PLIST-bin.plist [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 351 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2013:02:22 15:51:35-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PLIST [File, File, Image] FileTypeExtension - File Type Extension: plist [File, File, Image] MIMEType - MIME Type: application/x-plist [PLIST, PLIST, Document] TestReal - Test Real: 1.4 [PLIST, PLIST, Time] TestDict/When - Test Dict When: 2000:01:02 03:04:05-05:00 [PLIST, PLIST, Document] TestDict/Author - Test Dict Author: Phil [PLIST, PLIST, Document] TestString - Test String: ExifTool PLIST test [PLIST, PLIST, Document] TestArray - Test Array: one, two, three [PLIST, PLIST, Document] TestInteger - Test Integer: 256 [PLIST, PLIST, Document] TestUnicode - Test Unicode: ExîfTöøl PLIST tést [PLIST, PLIST, Time] TestDate - Test Date: 2013:02:22 07:49:10-05:00 [PLIST, PLIST, Document] TestData - Test Data: (Binary data 12 bytes) [PLIST, PLIST, Document] TestBoolean - Test Boolean: False ������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PNG.t������������������������������������������������������������������������000644 �000765 �000024 �00000007033 12363476334 015455� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/PNG.t". BEGIN { $| = 1; print "1..5\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::PNG; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'PNG'; my $testnum = 1; # test 2: Extract information from PNG.png { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/PNG.png'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write a bunch of new information to a PNG in memory { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/IPTC.jpg'); $exifTool->SetNewValuesFromFile('t/images/XMP.jpg'); $exifTool->SetNewValue('PNG:Comment'); # and delete a tag $exifTool->SetNewValue('PixelsPerUnitX', 1234); my $image; my $rtnVal = $exifTool->WriteInfo('t/images/PNG.png', \$image); # must ignore FileSize because size is variable (depends on Zlib availability) my $info = $exifTool->ImageInfo(\$image, '-filesize'); my $testfile = "t/${testname}_${testnum}_failed.png"; if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; # erase results of any bad test } else { # save the bad image open(TESTFILE,">$testfile"); binmode(TESTFILE); print TESTFILE $image; close(TESTFILE); print 'not '; } print "ok $testnum\n"; } # test 4: Test group delete, alternate languages and special characters { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Charset => 'Latin'); $exifTool->SetNewValue('PNG:*'); $exifTool->SetNewValue('XMP:*'); $exifTool->SetNewValue('PNG:Comment-fr', "Commentaire fran\xe7aise"); $exifTool->SetNewValue('PNG:Copyright', "\xa9 2010 Phil Harvey"); $exifTool->SetNewValue('XMP:Description-bar' => "A Br\xfcn is a Gst\xf6"); my $testfile = "t/${testname}_${testnum}_failed.png"; unlink $testfile; my $rtnVal = $exifTool->WriteInfo('t/images/PNG.png', $testfile); $exifTool->Options(Charset => 'UTF8'); my $info = $exifTool->ImageInfo($testfile, 'PNG:*', 'XMP:*'); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; # erase results of any bad test } else { print 'not '; } print "ok $testnum\n"; } # test 5: Try moving XMP from after IDAT to before { ++$testnum; my $exifTool = new Image::ExifTool; # start with a clean image $exifTool->SetNewValue('all'); my $image; $exifTool->WriteInfo('t/images/PNG.png', \$image); # add new XMP (should go after IDAT) $exifTool->SetNewValue(); $exifTool->SetNewValue('XMP:Subject' => 'test'); $exifTool->WriteInfo(\$image); # delete all XMP then copy back again (should move to before IDAT) $exifTool->SetNewValue(); my $txtfile = "t/${testname}_${testnum}.failed"; open PNG_TEST_5, ">$txtfile" or warn "Error opening $txtfile\n"; $exifTool->Options(Verbose => 2); $exifTool->Options(TextOut => \*PNG_TEST_5); $exifTool->SetNewValue('xmp:all'); $exifTool->SetNewValuesFromFile(\$image, 'all:all<xmp:all'); my $rtnVal = $exifTool->WriteInfo(\$image); close PNG_TEST_5; if (testCompare('t/PNG_5.out', $txtfile, $testnum)) { unlink $txtfile; } else { print 'not '; } print "ok $testnum\n"; } # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PNG_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000002545 12546457276 016254� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: PNG.png [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 572 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2014:07:23 09:04:15-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:18-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PNG [File, File, Image] FileTypeExtension - File Type Extension: png [File, File, Image] MIMEType - MIME Type: image/png [PNG, PNG, Image] 0 - Image Width: 16 [PNG, PNG, Image] 4 - Image Height: 16 [PNG, PNG, Image] 8 - Bit Depth: 1 [PNG, PNG, Image] 9 - Color Type: Grayscale [PNG, PNG, Image] 10 - Compression: Deflate/Inflate [PNG, PNG, Image] 11 - Filter: Adaptive [PNG, PNG, Image] 12 - Interlace: Noninterlaced [PNG, PNG, Image] bKGD - Background Color: 0 [PNG, PNG, Image] Comment - Comment: test comment [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 6.51 [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [Composite, Composite, Image] ImageSize - Image Size: 16x16 [Composite, Composite, Image] Megapixels - Megapixels: 0.000256 �����������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PNG_3.out��������������������������������������������������������������������000644 �000765 �000024 �00000016147 12514720512 016235� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, File, Image] FileType - File Type: PNG [File, File, Image] FileTypeExtension - File Type Extension: png [File, File, Image] MIMEType - MIME Type: image/png [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [PNG, PNG, Image] 0 - Image Width: 16 [PNG, PNG, Image] 4 - Image Height: 16 [PNG, PNG, Image] 8 - Bit Depth: 1 [PNG, PNG, Image] 9 - Color Type: Grayscale [PNG, PNG, Image] 10 - Compression: Deflate/Inflate [PNG, PNG, Image] 11 - Filter: Adaptive [PNG, PNG, Image] 12 - Interlace: Noninterlaced [PNG, PNG, Image] bKGD - Background Color: 0 [PNG, PNG-pHYs, Image] 0 - Pixels Per Unit X: 1234 [PNG, PNG-pHYs, Image] 4 - Pixels Per Unit Y: 2834 [PNG, PNG-pHYs, Image] 8 - Pixel Units: meters [PNG, PNG, Author] Artist - Artist: Phil Harvey [PNG, PNG, Author] Copyright - Copyright: Copyright 2004 Phil Harvey [PNG, PNG, Image] Description - Description: UTF-16 (big-endian) encoded XMP [PNG, PNG, Camera] Make - Make: FUJIFILM [PNG, PNG, Camera] Model - Model: FinePix2400Zoom [PNG, PNG, Image] Software - Software: Adobe Photoshop 7.0 [PNG, PNG, Image] Source - Source: I'm the source [PNG, PNG, Image] Title - Title: Test IPTC picture [PNG, PNG, Image] URL - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [PNG, PNG, Time] create-date - Create Date: 2001:05:19 18:36:41 [PNG, PNG, Time] tIME - Modify Date: 2004:02:26 09:36:46 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: UTF-16 (big-endian) encoded XMP [XMP, XMP-dc, Author] rights - Rights: Copyright 2004 Phil Harvey [XMP, XMP-dc, Image] subject - Subject: ExifTool, Test, XMP [XMP, XMP-dc, Image] title - Title: Test IPTC picture [XMP, XMP-exif, Image] ComponentsConfiguration - Components Configuration: Y, Cb, Cr, - [XMP, XMP-exif, Image] CompressedBitsPerPixel - Compressed Bits Per Pixel: 1.6 [XMP, XMP-exif, Camera] FlashFired - Flash Fired: True [XMP, XMP-exif, Camera] FlashFunction - Flash Function: False [XMP, XMP-exif, Camera] FlashMode - Flash Mode: Unknown [XMP, XMP-exif, Camera] FlashRedEyeMode - Flash Red Eye Mode: False [XMP, XMP-exif, Camera] FlashReturn - Flash Return: No return detection [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: My Position [XMP, XMP-photoshop, Author] CaptionWriter - Caption Writer: I wrote it [XMP, XMP-photoshop, Location] Country - Country: Canada [XMP, XMP-photoshop, Image] Instructions - Instructions: What instructions [XMP, XMP-photoshop, Location] State - State: Ont [XMP, XMP-photoshop, Image] TransmissionReference - Transmission Reference: What is a transmission reference? [XMP, XMP-tiff, Image] BitsPerSample - Bits Per Sample: 8 [XMP, XMP-tiff, Image] Compression - Compression: JPEG (old-style) [XMP, XMP-tiff, Image] ImageLength - Image Height: 8 [XMP, XMP-tiff, Image] ImageWidth - Image Width: 8 [XMP, XMP-tiff, Image] YCbCrPositioning - Y Cb Cr Positioning: Co-sited [XMP, XMP-tiff, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: My Job [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:photoshop:4cc7b857-69d0-11d8-8ac4-bb59c92f0d9a [XMP, XMP-xmpRights, Author] Marked - Marked: False [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ [EXIF, IFD0, Image] 270 - Image Description: A witty caption [EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Adobe Photoshop 7.0 [EXIF, IFD0, Time] 306 - Modify Date: 2004:02:26 09:36:46 [EXIF, IFD0, Author] 315 - Artist: Phil Harvey [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, IFD0, Author] 33432 - Copyright: Copyright 2004 Phil Harvey [EXIF, ExifIFD, Image] 33437 - F Number: 3.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/64 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37386 - Focal Length: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 100 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 80 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3053 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3053 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 5 - Object Name: Test IPTC picture [IPTC, IPTC, Other] 10 - Urgency: 8 (least urgent) [IPTC, IPTC, Other] 15 - Category: 1 [IPTC, IPTC, Other] 20 - Supplemental Categories: amazing, image, utilities [IPTC, IPTC, Other] 25 - Keywords: ExifTool, Test, IPTC [IPTC, IPTC, Other] 40 - Special Instructions: What instructions [IPTC, IPTC, Time] 55 - Date Created: 2004:02:26 [IPTC, IPTC, Author] 80 - By-line: Phil Harvey [IPTC, IPTC, Author] 85 - By-line Title: My Position [IPTC, IPTC, Location] 90 - City: Kingston [IPTC, IPTC, Location] 95 - Province-State: Ont [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC, Other] 103 - Original Transmission Reference: What is a transmission reference [IPTC, IPTC, Other] 105 - Headline: No headline [IPTC, IPTC, Author] 110 - Credit: My Credit [IPTC, IPTC, Author] 115 - Source: I'm the source [IPTC, IPTC, Author] 116 - Copyright Notice: Copyright 2004 Phil Harvey [IPTC, IPTC, Other] 120 - Caption-Abstract: A witty caption [IPTC, IPTC, Author] 122 - Writer-Editor: I wrote it [Photoshop, Photoshop, Author] 1034 - Copyright Flag: False [Photoshop, Photoshop, Author] 1035 - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [Photoshop, Photoshop, Image] 1037 - Global Angle: 30 [Photoshop, Photoshop, Image] 1049 - Global Altitude: 30 [Composite, Composite, Image] Aperture - Aperture: 3.5 [Composite, Composite, Other] Flash - Flash: Fired [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/64 [Composite, Composite, Image] ImageSize - Image Size: 16x16 [Composite, Composite, Image] LightValue - Light Value: 9.6 [Composite, Composite, Image] Megapixels - Megapixels: 0.000256 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 6.0 mm �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PNG_4.out��������������������������������������������������������������������000644 �000765 �000024 �00000001145 11512134652 016227� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[PNG, PNG, Image] 0 - Image Width: 16 [PNG, PNG, Image] 4 - Image Height: 16 [PNG, PNG, Image] 8 - Bit Depth: 1 [PNG, PNG, Image] 9 - Color Type: Grayscale [PNG, PNG, Image] 10 - Compression: Deflate/Inflate [PNG, PNG, Image] 11 - Filter: Adaptive [PNG, PNG, Image] 12 - Interlace: Noninterlaced [PNG, PNG, Image] bKGD - Background Color: 0 [PNG, PNG, Image] Comment-fr - Comment (fr): Commentaire française [PNG, PNG, Author] Copyright - Copyright: © 2010 Phil Harvey [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 8.44 [XMP, XMP-dc, Image] description-bar - Description (bar): A Brün is a Gstö ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PNG_5.out��������������������������������������������������������������������000644 �000765 �000024 �00000000741 12554462433 016241� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Deleting tags in: XMP XMP-* Sorry, XMP-x:XMPToolkit is unsafe for writing Writing new tags after deleting groups: XMP XMP-* Writing XMP-dc:Subject Editing tags in: PNG XMP Creating tags in: PNG XMP FileType = PNG FileTypeExtension = PNG MIMEType = image/png PNG IHDR (13 bytes): PNG bKGD (2 bytes): Creating XMP iTXt chunk: Creating XMP + XMP-dc:Subject = 'test' PNG IDAT (1 chunk, total 14 bytes) PNG iTXt (437 bytes): Deleting XMP PNG IEND (end of image) �������������������������������Image-ExifTool-10.10/t/PostScript.t�����������������������������������������������������������������000644 �000765 �000024 �00000002764 11510412077 017134� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/PostScript.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::PostScript; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'PostScript'; my $testnum = 1; # test 2: Extract information from PostScript.eps { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/PostScript.eps'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write EPS information (and test ExtractEmbedded option) { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/IPTC.jpg','*:*'); $exifTool->SetNewValuesFromFile('t/images/XMP.jpg','*:*'); $exifTool->SetNewValue(Title => 'new title'); $exifTool->SetNewValue(Copyright => 'my copyright'); $exifTool->SetNewValue(Creator => 'phil made it', Replace => 1); my $testfile = "t/${testname}_${testnum}_failed.eps"; unlink $testfile; $exifTool->WriteInfo('t/images/PostScript.eps', $testfile); my $info = $exifTool->ImageInfo($testfile, {ExtractEmbedded => 1}); if (check($exifTool, $info, $testname, $testnum, $testnum, 3)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # end ������������Image-ExifTool-10.10/t/PostScript_2.out�������������������������������������������������������������000644 �000765 �000024 �00000010370 12546457276 017735� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: PostScript.eps [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 11 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2008:11:03 09:41:43-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:19-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: EPS [File, File, Image] FileTypeExtension - File Type Extension: eps [File, File, Image] MIMEType - MIME Type: application/postscript [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 9e02efbd9bdc1dc192279e30a0e27323 [PostScript, PostScript, Image] Creator - Creator: Adobe Photoshop Version 7.0.1 [PostScript, PostScript, Image] Title - Title: c.eps [PostScript, PostScript, Time] CreationDate - Create Date: 7/18/05 2:33 PM [PostScript, PostScript, Image] BoundingBox - Bounding Box: 0 0 8 8 [PostScript, PostScript, Image] ImageData - Image Data: 8 8 8 3 1 8 2 "beginimage" [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 120 - Caption-Abstract: A witty caption [IPTC, IPTC, Author] 122 - Writer-Editor: I wrote it [IPTC, IPTC, Other] 105 - Headline: No headline [IPTC, IPTC, Other] 40 - Special Instructions: What instructions [IPTC, IPTC, Author] 80 - By-line: Phil Harvey [IPTC, IPTC, Author] 85 - By-line Title: My Position [IPTC, IPTC, Author] 110 - Credit: My Credit [IPTC, IPTC, Author] 115 - Source: I'm the source [IPTC, IPTC, Other] 5 - Object Name: Test IPTC picture [IPTC, IPTC, Time] 55 - Date Created: 2004:02:26 [IPTC, IPTC, Location] 90 - City: Kingston [IPTC, IPTC, Location] 95 - Province-State: Ont [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC, Other] 103 - Original Transmission Reference: What is a transmission reference [IPTC, IPTC, Other] 15 - Category: 1 [IPTC, IPTC, Other] 20 - Supplemental Categories: amazing, image, utilities [IPTC, IPTC, Other] 10 - Urgency: 8 (least urgent) [IPTC, IPTC, Other] 25 - Keywords: ExifTool, Test, XMP [IPTC, IPTC, Author] 116 - Copyright Notice: Copyright 2004 Phil Harvey [Photoshop, Photoshop, Image] 1061 - IPTC Digest: 9e02efbd9bdc1dc192279e30a0e27323 [XMP, XMP-x, Document] xmptk - XMP Toolkit: XMP toolkit 2.8.2-33, framework 1.5 [XMP, XMP-rdf, Document] about - About: uuid:b691db36-f92a-11d9-99a4-8c8e8269c120 [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: My Position [XMP, XMP-photoshop, Author] CaptionWriter - Caption Writer: I wrote it [XMP, XMP-photoshop, Image] Category - Category: 1 [XMP, XMP-photoshop, Location] City - City: Kingston [XMP, XMP-photoshop, Location] Country - Country: Canada [XMP, XMP-photoshop, Author] Credit - Credit: My Credit [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2004:02:26 [XMP, XMP-photoshop, Image] Headline - Headline: No headline [XMP, XMP-photoshop, Image] Instructions - Instructions: What instructions [XMP, XMP-photoshop, Author] Source - Source: I'm the source [XMP, XMP-photoshop, Location] State - State: Ont [XMP, XMP-photoshop, Image] TransmissionReference - Transmission Reference: What is a transmission reference [XMP, XMP-photoshop, Image] Urgency - Urgency: 8 (least urgent) [XMP, XMP-photoshop, Image] SupplementalCategories - Supplemental Categories: amazing, image, utilities [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: My Job [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:photoshop:cbcc2a62-f127-11d9-ac4d-e8be6f73552e [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: A witty caption [XMP, XMP-dc, Author] rights - Rights: Copyright 2004 Phil Harvey [XMP, XMP-dc, Image] title - Title: Test IPTC picture [XMP, XMP-dc, Image] subject - Subject: ExifTool, Test, XMP [Composite, Composite, Image] ImageHeight - Image Height: 8 [Composite, Composite, Image] ImageWidth - Image Width: 8 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PostScript_3.out�������������������������������������������������������������000644 �000765 �000024 �00000022067 12546457276 017744� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool, Main] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image, Main] FileName - File Name: PostScript_3_failed.eps [File, System, Image, Main] Directory - Directory: t [File, System, Image, Main] FileSize - File Size: 14 kB [File, System, Time, Main] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:49-04:00 [File, System, Time, Main] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:49-04:00 [File, System, Time, Main] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:49-04:00 [File, System, Image, Main] FilePermissions - File Permissions: rw-r--r-- [File, File, Image, Main] FileType - File Type: EPS [File, File, Image, Main] FileTypeExtension - File Type Extension: eps [File, File, Image, Main] MIMEType - MIME Type: application/postscript [File, File, Image, Main] CurrentIPTCDigest - Current IPTC Digest: 04d104a94abbcadb3742516c01f6568b [File, File, Image, Main] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [PostScript, PostScript, Image, Main] Creator - Creator: phil made it [PostScript, PostScript, Image, Main] Title - Title: new title [PostScript, PostScript, Time, Main] CreationDate - Create Date: 7/18/05 2:33 PM [PostScript, PostScript, Image, Main] BoundingBox - Bounding Box: 0 0 8 8 [PostScript, PostScript, Image, Main] Copyright - Copyright: my copyright [PostScript, PostScript, Image, Doc1] EmbeddedFileName - Embedded File Name: Test-Doc1.eps [PostScript, PostScript, Image, Doc1] Creator - Creator: Adobe Photoshop Version 9.0x211 [PostScript, PostScript, Image, Doc1] Title - Title: 12a.eps [PostScript, PostScript, Image, Doc1] BoundingBox - Bounding Box: 0 0 435 283 [PostScript, PostScript, Image, Doc2] EmbeddedFileName - Embedded File Name: Test-Doc2.eps [PostScript, PostScript, Image, Doc2] Creator - Creator: Adobe Photoshop Version 9.0x211 [PostScript, PostScript, Image, Doc2] Title - Title: 12b.eps [PostScript, PostScript, Image, Doc2] BoundingBox - Bounding Box: 0 0 435 283 [PostScript, PostScript, Image, Doc2-1] EmbeddedFileName - Embedded File Name: Test-Doc2-1.eps [PostScript, PostScript, Image, Doc2-1] Creator - Creator: Adobe Photoshop Version 9.0x211 [PostScript, PostScript, Image, Doc2-1] Title - Title: 12c.eps [PostScript, PostScript, Image, Doc2-1] BoundingBox - Bounding Box: 0 0 435 283 [PostScript, PostScript, Image, Doc3] EmbeddedFileName - Embedded File Name: Test-Doc3.eps [PostScript, PostScript, Image, Doc3] Creator - Creator: Adobe Photoshop Version 9.0x211 [PostScript, PostScript, Image, Doc3] Title - Title: 12d.eps [PostScript, PostScript, Image, Doc3] BoundingBox - Bounding Box: 0 0 435 283 [PostScript, PostScript, Image, Main] ImageData - Image Data: 8 8 8 3 1 8 2 "beginimage" [IPTC, IPTC, Other, Main] 0 - Application Record Version: 2 [IPTC, IPTC, Other, Main] 120 - Caption-Abstract: A witty caption [IPTC, IPTC, Author, Main] 122 - Writer-Editor: I wrote it [IPTC, IPTC, Other, Main] 105 - Headline: No headline [IPTC, IPTC, Other, Main] 40 - Special Instructions: What instructions [IPTC, IPTC, Author, Main] 80 - By-line: Phil Harvey [IPTC, IPTC, Author, Main] 85 - By-line Title: My Position [IPTC, IPTC, Author, Main] 110 - Credit: My Credit [IPTC, IPTC, Author, Main] 115 - Source: I'm the source [IPTC, IPTC, Other, Main] 5 - Object Name: Test IPTC picture [IPTC, IPTC, Time, Main] 55 - Date Created: 2004:02:26 [IPTC, IPTC, Location, Main] 90 - City: Kingston [IPTC, IPTC, Location, Main] 95 - Province-State: Ont [IPTC, IPTC, Location, Main] 101 - Country-Primary Location Name: Canada [IPTC, IPTC, Other, Main] 103 - Original Transmission Reference: What is a transmission reference [IPTC, IPTC, Other, Main] 15 - Category: 1 [IPTC, IPTC, Other, Main] 20 - Supplemental Categories: amazing, image, utilities [IPTC, IPTC, Other, Main] 10 - Urgency: 8 (least urgent) [IPTC, IPTC, Other, Main] 25 - Keywords: ExifTool, Test, IPTC [IPTC, IPTC, Author, Main] 116 - Copyright Notice: Copyright 2004 Phil Harvey [Photoshop, Photoshop, Image, Main] 1061 - IPTC Digest: 9e02efbd9bdc1dc192279e30a0e27323 [Photoshop, Photoshop, Author, Main] 1034 - Copyright Flag: False [Photoshop, Photoshop, Author, Main] 1035 - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [Photoshop, Photoshop, Image, Main] 1037 - Global Angle: 30 [Photoshop, Photoshop, Image, Main] 1049 - Global Altitude: 30 [EXIF, IFD0, Image, Main] 270 - Image Description: A witty caption [EXIF, IFD0, Camera, Main] 271 - Make: FUJIFILM [EXIF, IFD0, Camera, Main] 272 - Camera Model Name: FinePix2400Zoom [EXIF, IFD0, Image, Main] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image, Main] 282 - X Resolution: 72 [EXIF, IFD0, Image, Main] 283 - Y Resolution: 72 [EXIF, IFD0, Image, Main] 296 - Resolution Unit: inches [EXIF, IFD0, Image, Main] 305 - Software: Adobe Photoshop 7.0 [EXIF, IFD0, Time, Main] 306 - Modify Date: 2004:02:26 09:36:46 [EXIF, IFD0, Author, Main] 315 - Artist: Phil Harvey [EXIF, IFD0, Image, Main] 531 - Y Cb Cr Positioning: Centered [EXIF, IFD0, Author, Main] 33432 - Copyright: my copyright [EXIF, ExifIFD, Image, Main] 33437 - F Number: 3.5 [EXIF, ExifIFD, Camera, Main] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image, Main] 34855 - ISO: 100 [EXIF, ExifIFD, Image, Main] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time, Main] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time, Main] 36868 - Create Date: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image, Main] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image, Main] 37377 - Shutter Speed Value: 1/64 [EXIF, ExifIFD, Image, Main] 37378 - Aperture Value: 3.5 [EXIF, ExifIFD, Image, Main] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image, Main] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera, Main] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera, Main] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera, Main] 37385 - Flash: Fired [EXIF, ExifIFD, Camera, Main] 37386 - Focal Length: 6.0 mm [EXIF, ExifIFD, Image, Main] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image, Main] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image, Main] 40962 - Exif Image Width: 100 [EXIF, ExifIFD, Image, Main] 40963 - Exif Image Height: 80 [EXIF, ExifIFD, Camera, Main] 41486 - Focal Plane X Resolution: 3053 [EXIF, ExifIFD, Camera, Main] 41487 - Focal Plane Y Resolution: 3053 [EXIF, ExifIFD, Camera, Main] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera, Main] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image, Main] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image, Main] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image, Main] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image, Main] 282 - X Resolution: 72 [EXIF, IFD1, Image, Main] 283 - Y Resolution: 72 [EXIF, IFD1, Image, Main] 296 - Resolution Unit: inches [XMP, XMP-x, Document, Main] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-rdf, Document, Main] about - About: uuid:b691db36-f92a-11d9-99a4-8c8e8269c120 [XMP, XMP-dc, Author, Main] creator - Creator: phil made it [XMP, XMP-dc, Image, Main] description - Description: UTF-16 (big-endian) encoded XMP [XMP, XMP-dc, Author, Main] rights - Rights: Copyright 2004 Phil Harvey [XMP, XMP-dc, Image, Main] subject - Subject: ExifTool, Test, XMP [XMP, XMP-dc, Image, Main] title - Title: new title [XMP, XMP-photoshop, Author, Main] AuthorsPosition - Authors Position: My Position [XMP, XMP-photoshop, Author, Main] CaptionWriter - Caption Writer: I wrote it [XMP, XMP-photoshop, Image, Main] Category - Category: 1 [XMP, XMP-photoshop, Location, Main] City - City: Kingston [XMP, XMP-photoshop, Location, Main] Country - Country: Canada [XMP, XMP-photoshop, Author, Main] Credit - Credit: My Credit [XMP, XMP-photoshop, Time, Main] DateCreated - Date Created: 2004:02:26 [XMP, XMP-photoshop, Image, Main] Headline - Headline: No headline [XMP, XMP-photoshop, Image, Main] Instructions - Instructions: What instructions [XMP, XMP-photoshop, Author, Main] Source - Source: I'm the source [XMP, XMP-photoshop, Location, Main] State - State: Ont [XMP, XMP-photoshop, Image, Main] SupplementalCategories - Supplemental Categories: amazing, image, utilities [XMP, XMP-photoshop, Image, Main] TransmissionReference - Transmission Reference: What is a transmission reference? [XMP, XMP-photoshop, Image, Main] Urgency - Urgency: 8 (least urgent) [XMP, XMP-xmpBJ, Other, Main] JobRefName - Job Ref Name: My Job [XMP, XMP-xmpMM, Other, Main] DocumentID - Document ID: adobe:docid:photoshop:4cc7b857-69d0-11d8-8ac4-bb59c92f0d9a [XMP, XMP-xmpRights, Author, Main] Marked - Marked: False [XMP, XMP-xmpRights, Author, Main] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ [Composite, Composite, Image, Main] Aperture - Aperture: 3.5 [Composite, Composite, Image, Main] ImageHeight - Image Height: 8 [Composite, Composite, Image, Main] ImageWidth - Image Width: 8 [Composite, Composite, Image, Main] ShutterSpeed - Shutter Speed: 1/64 [Composite, Composite, Image, Main] ImageSize - Image Size: 8x8 [Composite, Composite, Image, Main] LightValue - Light Value: 9.6 [Composite, Composite, Image, Main] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera, Main] FocalLength35efl - Focal Length: 6.0 mm �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PPM.t������������������������������������������������������������������������000644 �000765 �000024 �00000002135 11327642463 015460� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/PPM.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::PPM; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'PPM'; my $testnum = 1; # test 2: Extract information from PPM.bmp { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/PPM.ppm'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write new comments to PPM in memory { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValue('Comment', 'A new comment'); my $image; $exifTool->WriteInfo('t/images/PPM.ppm', \$image); $exifTool->Options(Unknown => 1, Binary => 0, List => 0); my $info = $exifTool->ImageInfo(\$image); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PPM_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000002071 12546457276 016256� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: PPM.ppm [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 223 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2005:11:14 14:47:21-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:19-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PPM [File, File, Image] FileTypeExtension - File Type Extension: ppm [File, File, Image] MIMEType - MIME Type: image/x-portable-pixmap [File, File, Image] Comment - Comment: ExifTool PPM test [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] MaxVal - Max Val: 255 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PPM_3.out��������������������������������������������������������������������000644 �000765 �000024 �00000001161 12514720512 016233� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileSize - File Size: 219 bytes [File, File, Image] FileType - File Type: PPM [File, File, Image] FileTypeExtension - File Type Extension: ppm [File, File, Image] MIMEType - MIME Type: image/x-portable-pixmap [File, File, Image] Comment - Comment: A new comment [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] MaxVal - Max Val: 255 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PSP.t������������������������������������������������������������������������000644 �000765 �000024 �00000001251 11327642463 015464� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/PSP.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::PSP; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'PSP'; my $testnum = 1; # test 2: Extract information from PSP file { my $exifTool = new Image::ExifTool; ++$testnum; my $info = $exifTool->ImageInfo('t/images/PSP.psp'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/PSP_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000003513 12546457276 016266� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: PSP.psp [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1703 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:01:28 11:15:22-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PSP [File, File, Image] FileTypeExtension - File Type Extension: psp [File, File, Image] MIMEType - MIME Type: image/x-paintshoppro [PSP, PSP, Image] FileVersion - File Version: 10.0 [PSP, PSP, Image] 0 - Image Width: 8 [PSP, PSP, Image] 4 - Image Height: 8 [PSP, PSP, Image] 8 - Image Resolution: 200 [PSP, PSP, Image] 16 - Resolution Unit: inches [PSP, PSP, Image] 17 - Compression: LZ77 [PSP, PSP, Image] 19 - Bits Per Sample: 24 [PSP, PSP, Image] 21 - Planes: 1 [PSP, PSP, Image] 23 - Num Colors: 16777216 [PSP, PSP, Image] 0 - Title: Test Image [PSP, PSP, Time] 1 - Create Date: 2010:01:28 09:23:21-05:00 [PSP, PSP, Time] 2 - Modify Date: 2010:01:28 09:30:26-05:00 [PSP, PSP, Author] 3 - Artist: Phil Harvey [PSP, PSP, Author] 4 - Copyright: © 2010 Phil Harvey [PSP, PSP, Image] 5 - Description: A description [PSP, PSP, Image] 6 - Creator App ID: Paint Shop Pro [PSP, PSP, Image] 7 - Creator App Version: 13.0.0.0 [EXIF, IFD0, Author] 33432 - Copyright: © 2010 Phil Harvey [EXIF, IFD0, Image] 282 - X Resolution: 200 [EXIF, IFD0, Image] 283 - Y Resolution: 200 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/QuickTime.t������������������������������������������������������������������000644 �000765 �000024 �00000003176 12510053334 016711� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/QuickTime.t". BEGIN { $| = 1; print "1..5\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::QuickTime; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'QuickTime'; my $testnum = 1; # tests 2-3: Extract information from QuickTime.mov and QuickTime.m4a { my $ext; foreach $ext (qw(mov m4a)) { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo("t/images/QuickTime.$ext"); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } } # tests 4-5: Try writing XMP to the different file formats { my $ext; my $exifTool = new Image::ExifTool; $exifTool->Options(SavePath => 1); # to save group 5 names $exifTool->SetNewValue('XMP:Title' => 'x'); $exifTool->SetNewValue('TrackCreateDate' => '2000:01:02 03:04:05'); $exifTool->SetNewValue('Track1:TrackModifyDate' => '2013:11:04 10:32:15'); foreach $ext (qw(mov m4a)) { ++$testnum; my $testfile = "t/${testname}_$testnum.failed"; unlink $testfile; my $rtnVal = $exifTool->WriteInfo("t/images/QuickTime.$ext", $testfile); my $info = $exifTool->ImageInfo($testfile, 'title', 'time:all'); if (check($exifTool, $info, $testname, $testnum, undef, 5)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } } # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/QuickTime_2.out��������������������������������������������������������������000644 �000765 �000024 �00000017306 12546457276 017524� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: QuickTime.mov [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 3.8 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2013:11:05 10:27:25-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:39-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: MOV [File, File, Image] FileTypeExtension - File Type Extension: mov [File, File, Image] MIMEType - MIME Type: video/quicktime [QuickTime, QuickTime, Video] 0 - Movie Header Version: 0 [QuickTime, QuickTime, Time] 1 - Create Date: 2005:08:11 14:03:54 [QuickTime, QuickTime, Time] 2 - Modify Date: 2010:07:30 15:43:59 [QuickTime, QuickTime, Video] 3 - Time Scale: 600 [QuickTime, QuickTime, Video] 4 - Duration: 4.97 s [QuickTime, QuickTime, Video] 5 - Preferred Rate: 1 [QuickTime, QuickTime, Video] 6 - Preferred Volume: 99.61% [QuickTime, QuickTime, Video] 9 - Matrix Structure: 1 0 0 0 1 0 0 0 1 [QuickTime, QuickTime, Video] 18 - Preview Time: 0 s [QuickTime, QuickTime, Video] 19 - Preview Duration: 0 s [QuickTime, QuickTime, Video] 20 - Poster Time: 0 s [QuickTime, QuickTime, Video] 21 - Selection Time: 0 s [QuickTime, QuickTime, Video] 22 - Selection Duration: 0 s [QuickTime, QuickTime, Video] 23 - Current Time: 0 s [QuickTime, QuickTime, Video] 24 - Next Track ID: 3 [QuickTime, Track1, Video] 0 - Track Header Version: 0 [QuickTime, Track1, Time] 1 - Track Create Date: 2005:08:11 14:03:54 [QuickTime, Track1, Time] 2 - Track Modify Date: 2005:08:11 14:03:54 [QuickTime, Track1, Video] 3 - Track ID: 1 [QuickTime, Track1, Video] 5 - Track Duration: 4.97 s [QuickTime, Track1, Video] 8 - Track Layer: 0 [QuickTime, Track1, Video] 9 - Track Volume: 0.00% [QuickTime, Track1, Video] 10 - Matrix Structure: 1 0 0 0 1 0 0 0 1 [QuickTime, Track1, Video] 19 - Image Width: 320 [QuickTime, Track1, Video] 20 - Image Height: 240 [QuickTime, Track1, Video] clef - Clean Aperture Dimensions: 320x240 [QuickTime, Track1, Video] prof - Production Aperture Dimensions: 320x240 [QuickTime, Track1, Video] enof - Encoded Pixels Dimensions: 320x240 [QuickTime, Track1, Video] 0 - Media Header Version: 0 [QuickTime, Track1, Time] 1 - Media Create Date: 2005:08:11 14:03:54 [QuickTime, Track1, Time] 2 - Media Modify Date: 2005:08:11 14:03:54 [QuickTime, Track1, Video] 3 - Media Time Scale: 600 [QuickTime, Track1, Video] 4 - Media Duration: 4.97 s [QuickTime, Track1, Video] 4 - Handler Class: Media Handler [QuickTime, Track1, Video] 8 - Handler Type: Video Track [QuickTime, Track1, Video] 12 - Handler Vendor ID: Pentax [QuickTime, Track1, Video] 2 - Graphics Mode: ditherCopy [QuickTime, Track1, Video] 3 - Op Color: 32768 32768 32768 [QuickTime, Track1, Video] 4 - Handler Class: Data Handler [QuickTime, Track1, Video] 8 - Handler Type: Alias Data [QuickTime, Track1, Video] 12 - Handler Vendor ID: Pentax [QuickTime, Track1, Image] 2 - Compressor ID: jpeg [QuickTime, Track1, Image] 10 - Vendor ID: Pentax [QuickTime, Track1, Image] 16 - Source Image Width: 320 [QuickTime, Track1, Image] 17 - Source Image Height: 240 [QuickTime, Track1, Image] 18 - X Resolution: 72 [QuickTime, Track1, Image] 20 - Y Resolution: 72 [QuickTime, Track1, Image] 25 - Compressor Name: Photo - JPEG [QuickTime, Track1, Image] 41 - Bit Depth: 24 [QuickTime, Track1, Video] stts - Video Frame Rate: 30 [QuickTime, Track2, Video] 0 - Track Header Version: 0 [QuickTime, Track2, Time] 1 - Track Create Date: 2005:08:11 14:03:54 [QuickTime, Track2, Time] 2 - Track Modify Date: 2005:08:11 14:03:54 [QuickTime, Track2, Video] 3 - Track ID: 2 [QuickTime, Track2, Video] 5 - Track Duration: 4.96 s [QuickTime, Track2, Video] 8 - Track Layer: 0 [QuickTime, Track2, Video] 9 - Track Volume: 100.00% [QuickTime, Track2, Video] 10 - Matrix Structure: 1 0 0 0 1 0 0 0 1 [QuickTime, Track2, Video] 0 - Media Header Version: 0 [QuickTime, Track2, Time] 1 - Media Create Date: 2005:08:11 14:03:54 [QuickTime, Track2, Time] 2 - Media Modify Date: 2005:08:11 14:03:54 [QuickTime, Track2, Video] 3 - Media Time Scale: 7875 [QuickTime, Track2, Video] 4 - Media Duration: 4.97 s [QuickTime, Track2, Video] 4 - Handler Class: Media Handler [QuickTime, Track2, Video] 8 - Handler Type: Audio Track [QuickTime, Track2, Video] 12 - Handler Vendor ID: Pentax [QuickTime, Track2, Audio] 2 - Balance: 0 [QuickTime, Track2, Video] 4 - Handler Class: Data Handler [QuickTime, Track2, Video] 8 - Handler Type: Alias Data [QuickTime, Track2, Video] 12 - Handler Vendor ID: Pentax [QuickTime, Track2, Audio] 4 - Audio Format: raw [QuickTime, Track2, Audio] 24 - Audio Channels: 1 [QuickTime, Track2, Audio] 26 - Audio Bits Per Sample: 8 [QuickTime, Track2, Audio] 32 - Audio Sample Rate: 7875 [QuickTime, QuickTime, Video] 8 - Handler Type: Metadata Tags [QuickTime, QuickTime, Audio] 1.1 - Album: Ã¥lbum [QuickTime, QuickTime, Audio] 1.2 - Artist: Ã¥rtist [QuickTime, QuickTime, Audio] 1.3 - Comment: çømménts [QuickTime, QuickTime, Video] ©fmt - Format: Digital Camera [QuickTime, QuickTime, Video] ©inf - Information: PENTAX DIGITAL CAMERA [QuickTime, QuickTime, Video] ©alb - Album: Ã¥lbum [QuickTime, QuickTime, Video] ©ART - Artist: Ã¥rtist [QuickTime, QuickTime, Video] ©cmt - Comment: çømménts [QuickTime, QuickTime, Video] ©com - Composer: cømpøsér [QuickTime, QuickTime, Video] ©gen - Genre: Genré [QuickTime, QuickTime, Video] 8 - Handler Type: Metadata [QuickTime, QuickTime, Video] 12 - Handler Vendor ID: Apple [QuickTime, QuickTime, Audio] ©lyr - Lyrics: These are lyrics [QuickTime, QuickTime, Preview] covr - Cover Art: (Binary data 251 bytes) [QuickTime, QuickTime, Audio] ©ART - Artist: Ã¥rtist [QuickTime, QuickTime, Author] aART - Album Artist: Ã¥lbüm Ã¥rtîst [QuickTime, QuickTime, Audio] ©wrt - Composer: cømpøsér [QuickTime, QuickTime, Audio] ©alb - Album: Ã¥lbum [QuickTime, QuickTime, Audio] ©grp - Grouping: grøuping [QuickTime, QuickTime, Audio] ©gen - Genre: Genré [QuickTime, QuickTime, Audio] trkn - Track Number: 1 of 2 [QuickTime, QuickTime, Audio] disk - Disk Number: 3 of 4 [QuickTime, QuickTime, Time] ©day - Content Create Date: 2010 [QuickTime, QuickTime, Audio] ©cmt - Comment: çømménts [QuickTime, QuickTime, Audio] tmpo - Beats Per Minute: 128 [QuickTime, QuickTime, Video] mdat-size - Movie Data Size: 0 [QuickTime, QuickTime, Video] mdat-offset - Movie Data Offset: 3871 [MakerNotes, Pentax, Camera] 0 - Make: PENTAX DIGITAL CAMERA [MakerNotes, Pentax, Camera] 38 - Exposure Time: 1/38 [MakerNotes, Pentax, Camera] 42 - F Number: 4.0 [MakerNotes, Pentax, Camera] 50 - Exposure Compensation: 0 [MakerNotes, Pentax, Camera] 68 - White Balance: Auto [MakerNotes, Pentax, Camera] 72 - Focal Length: 18.9 mm [MakerNotes, Pentax, Camera] 175 - ISO: 50 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Adobe XMP Core 4.1-c036 46.277092, Fri Feb 23 2007 14:16:18 [XMP, XMP-xmpDM, Image] altTapeName - Alt Tape Name: An Alternate Scene Name [XMP, XMP-xmpDM, Image] album - Album: No Album [XMP, XMP-xmp, Time] MetadataDate - Metadata Date: 2008:09:12 11:17:39-04:00 [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [Composite, Composite, Image] Aperture - Aperture: 4.0 [Composite, Composite, Video] AvgBitrate - Avg Bitrate: 0 bps [Composite, Composite, Image] ImageSize - Image Size: 320x240 [Composite, Composite, Image] Megapixels - Megapixels: 0.077 [Composite, Composite, Video] Rotation - Rotation: 0 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/38 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 18.9 mm [Composite, Composite, Image] LightValue - Light Value: 10.3 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/QuickTime_3.out��������������������������������������������������������������000644 �000765 �000024 �00000010502 12546457276 017514� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: QuickTime.m4a [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 5.1 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2013:11:05 10:27:28-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:39-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: M4A [File, File, Image] FileTypeExtension - File Type Extension: m4a [File, File, Image] MIMEType - MIME Type: audio/mp4 [QuickTime, QuickTime, Video] 0 - Major Brand: Apple iTunes AAC-LC (.M4A) Audio [QuickTime, QuickTime, Video] 1 - Minor Version: 0.0.0 [QuickTime, QuickTime, Video] 2 - Compatible Brands: M4A , mp42, isom [QuickTime, QuickTime, Video] 0 - Movie Header Version: 0 [QuickTime, QuickTime, Time] 1 - Create Date: 2005:06:29 19:02:19 [QuickTime, QuickTime, Time] 2 - Modify Date: 2006:09:22 11:06:45 [QuickTime, QuickTime, Video] 3 - Time Scale: 600 [QuickTime, QuickTime, Video] 4 - Duration: 29.05 s [QuickTime, QuickTime, Video] 5 - Preferred Rate: 1 [QuickTime, QuickTime, Video] 6 - Preferred Volume: 100.00% [QuickTime, QuickTime, Video] 9 - Matrix Structure: 1 0 0 0 1 0 0 0 1 [QuickTime, QuickTime, Video] 18 - Preview Time: 0 s [QuickTime, QuickTime, Video] 19 - Preview Duration: 0 s [QuickTime, QuickTime, Video] 20 - Poster Time: 0 s [QuickTime, QuickTime, Video] 21 - Selection Time: 0 s [QuickTime, QuickTime, Video] 22 - Selection Duration: 0 s [QuickTime, QuickTime, Video] 23 - Current Time: 0 s [QuickTime, QuickTime, Video] 24 - Next Track ID: 2 [QuickTime, Track1, Video] 0 - Track Header Version: 0 [QuickTime, Track1, Time] 1 - Track Create Date: 2005:06:29 19:02:19 [QuickTime, Track1, Time] 2 - Track Modify Date: 2006:09:22 11:06:45 [QuickTime, Track1, Video] 3 - Track ID: 1 [QuickTime, Track1, Video] 5 - Track Duration: 29.05 s [QuickTime, Track1, Video] 8 - Track Layer: 0 [QuickTime, Track1, Video] 9 - Track Volume: 100.00% [QuickTime, Track1, Video] 10 - Matrix Structure: 1 0 0 0 1 0 0 0 1 [QuickTime, Track1, Video] 0 - Media Header Version: 0 [QuickTime, Track1, Time] 1 - Media Create Date: 2005:06:29 19:02:19 [QuickTime, Track1, Time] 2 - Media Modify Date: 2006:09:22 11:06:45 [QuickTime, Track1, Video] 3 - Media Time Scale: 32000 [QuickTime, Track1, Video] 4 - Media Duration: 29.06 s [QuickTime, Track1, Video] 5 - Media Language Code: und [QuickTime, Track1, Video] 8 - Handler Type: Audio Track [QuickTime, Track1, Audio] 2 - Balance: 0 [QuickTime, Track1, Audio] 4 - Audio Format: mp4a [QuickTime, Track1, Audio] 24 - Audio Channels: 2 [QuickTime, Track1, Audio] 26 - Audio Bits Per Sample: 16 [QuickTime, Track1, Audio] 32 - Audio Sample Rate: 44100 [QuickTime, QuickTime, Video] 8 - Handler Type: Metadata [QuickTime, QuickTime, Video] 12 - Handler Vendor ID: Apple [QuickTime, QuickTime, Audio] ©nam - Title: Sample [QuickTime, QuickTime, Audio] cpil - Compilation: No [QuickTime, QuickTime, Audio] tmpo - Beats Per Minute: 120 [QuickTime, QuickTime, Audio] ©too - Encoder: iTunes v4.9, QuickTime 7.0.1 [QuickTime, QuickTime, Audio] iTunNORM - Volume Normalization: 80 0 610 0 289C 0 0 0 0 0 [QuickTime, QuickTime, Audio] ©lyr - Lyrics: these are lyrics [QuickTime, QuickTime, Audio] ©ART - Artist: Phil Harvey [QuickTime, QuickTime, Author] aART - Album Artist: album artist [QuickTime, QuickTime, Audio] ©wrt - Composer: Composer [QuickTime, QuickTime, Audio] ©alb - Album: album [QuickTime, QuickTime, Audio] ©grp - Grouping: grouping [QuickTime, QuickTime, Audio] ©gen - Genre: Children’s Music [QuickTime, QuickTime, Audio] trkn - Track Number: 1 of 2 [QuickTime, QuickTime, Audio] disk - Disk Number: 1 of 3 [QuickTime, QuickTime, Time] ©day - Content Create Date: 2006 [QuickTime, QuickTime, Audio] ©cmt - Comment: comments [QuickTime, QuickTime, Audio] pgap - Play Gap: No Gap [QuickTime, QuickTime, Preview] covr - Cover Art: (Binary data 19 bytes) [QuickTime, QuickTime, Preview] covr - Cover Art: (Binary data 19 bytes) [QuickTime, QuickTime, Video] mdat-size - Movie Data Size: 0 [QuickTime, QuickTime, Video] mdat-offset - Movie Data Offset: 5237 [Composite, Composite, Video] AvgBitrate - Avg Bitrate: 0 bps ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/QuickTime_4.out��������������������������������������������������������������000644 �000765 �000024 �00000003237 12332457034 017505� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Time, Main, , System] FileModifyDate - File Modification Date/Time: 2014:05:07 12:23:15-04:00 [File, System, Time, Main, , System] FileAccessDate - File Access Date/Time: 2014:05:07 12:23:15-04:00 [File, System, Time, Main, , System] FileInodeChangeDate - File Inode Change Date/Time: 2014:05:07 12:23:15-04:00 [QuickTime, QuickTime, Time, Main, , MOV-Movie-MovieHeader] 1 - Create Date: 2005:08:11 14:03:54 [QuickTime, QuickTime, Time, Main, , MOV-Movie-MovieHeader] 2 - Modify Date: 2010:07:30 15:43:59 [QuickTime, Track1, Time, Main, , MOV-Movie-Track-TrackHeader] 1 - Track Create Date: 2000:01:02 03:04:05 [QuickTime, Track1, Time, Main, , MOV-Movie-Track-TrackHeader] 2 - Track Modify Date: 2013:11:04 10:32:15 [QuickTime, Track1, Time, Main, Copy1, MOV-Movie-Track-Media-MediaHeader] 1 - Media Create Date: 2005:08:11 14:03:54 [QuickTime, Track1, Time, Main, Copy1, MOV-Movie-Track-Media-MediaHeader] 2 - Media Modify Date: 2005:08:11 14:03:54 [QuickTime, Track2, Time, Main, Copy1, MOV-Movie-Track-TrackHeader] 1 - Track Create Date: 2000:01:02 03:04:05 [QuickTime, Track2, Time, Main, Copy1, MOV-Movie-Track-TrackHeader] 2 - Track Modify Date: 2005:08:11 14:03:54 [QuickTime, Track2, Time, Main, , MOV-Movie-Track-Media-MediaHeader] 1 - Media Create Date: 2005:08:11 14:03:54 [QuickTime, Track2, Time, Main, , MOV-Movie-Track-Media-MediaHeader] 2 - Media Modify Date: 2005:08:11 14:03:54 [QuickTime, QuickTime, Time, Main, , MOV-Movie-UserData-Meta-ItemList] ©day - Content Create Date: 2010 [XMP, XMP-dc, Image, Main, , MOV-Movie-UserData-XMP] title - Title: x [XMP, XMP-xmp, Time, Main, , MOV-Movie-UserData-XMP] MetadataDate - Metadata Date: 2008:09:12 11:17:39-04:00 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/QuickTime_5.out��������������������������������������������������������������000644 �000765 �000024 �00000002275 12430201131 017467� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Time, Main, , System] FileModifyDate - File Modification Date/Time: 2014:11:10 13:20:58-05:00 [File, System, Time, Main, , System] FileAccessDate - File Access Date/Time: 2014:11:10 13:20:58-05:00 [File, System, Time, Main, , System] FileInodeChangeDate - File Inode Change Date/Time: 2014:11:10 13:20:58-05:00 [QuickTime, QuickTime, Time, Main, , MOV-Movie-MovieHeader] 1 - Create Date: 2005:06:29 19:02:19 [QuickTime, QuickTime, Time, Main, , MOV-Movie-MovieHeader] 2 - Modify Date: 2006:09:22 11:06:45 [QuickTime, Track1, Time, Main, , MOV-Movie-Track-TrackHeader] 1 - Track Create Date: 2000:01:02 03:04:05 [QuickTime, Track1, Time, Main, , MOV-Movie-Track-TrackHeader] 2 - Track Modify Date: 2013:11:04 10:32:15 [QuickTime, Track1, Time, Main, , MOV-Movie-Track-Media-MediaHeader] 1 - Media Create Date: 2005:06:29 19:02:19 [QuickTime, Track1, Time, Main, , MOV-Movie-Track-Media-MediaHeader] 2 - Media Modify Date: 2006:09:22 11:06:45 [QuickTime, QuickTime, Audio, Main, Copy1, MOV-Movie-UserData-Meta-ItemList] ©nam - Title: Sample [QuickTime, QuickTime, Time, Main, , MOV-Movie-UserData-Meta-ItemList] ©day - Content Create Date: 2006 [XMP, XMP-dc, Image, Main, , MOV-XMP] title - Title: x �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Radiance.t�������������������������������������������������������������������000644 �000765 �000024 �00000001276 11670727775 016552� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Radiance.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Radiance; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Radiance'; my $testnum = 1; # test 2: Extract information from RGBE file { my $exifTool = new Image::ExifTool; ++$testnum; my $info = $exifTool->ImageInfo('t/images/Radiance.hdr'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Radiance_2.out���������������������������������������������������������������000644 �000765 �000024 �00000003646 12546457276 017341� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Radiance.hdr [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 587 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2011:12:10 14:16:13-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:55-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: HDR [File, File, Image] FileTypeExtension - File Type Extension: hdr [File, File, Image] MIMEType - MIME Type: image/vnd.radiance [File, File, Image] ImageHeight - Image Height: 1 [File, File, Image] ImageWidth - Image Width: 1 [Radiance, Radiance, Image] _command - Command: oconv mat.rad sky.rad surfaces.rad [Radiance, Radiance, Image] _command - Command: oconv -f -i test4.oct ila01728 [Radiance, Radiance, Image] _command - Command: rpict -t 30 -vf test4.vf -x 1536 -y 1536 -ps 3 -pt .04 -dp 4096 -ar 68 -ms 0.029 -ds .2 -dt .05 -dc .75 -dr 3 -sj 1 -st .01 -ab 3 -af test4.amb -aa .08 -ad 1024 -as 512 -av 0.5 0.5 0.5 -lr 12 -lw .0005 -st .001 -dj .02 [Radiance, Radiance, Image] software - Software: RADIANCE 3.1.8 lastmod Thu Sep 17 20:49:56 PDT 1998 by droberts on escher [Radiance, Radiance, Image] view - View: -vtv -vp 0.832108 2.26053 1.8 -vd 0.984193 0.177099 0 -vu 0 0 1 -vh 100 -vv 100 -vo 0 -va 0 -vs 0 -vl 0 [Radiance, Radiance, Image] format - Format: 32-bit_rle_rgbe [Radiance, Radiance, Image] _command - Command: pfilt -1 -e 1 -m .25 -2 -x /3 -y /3 [Radiance, Radiance, Image] exposure - Exposure: 3.512179e-001 [Radiance, Radiance, Image] _orient - Orientation: Horizontal (normal) [Composite, Composite, Image] ImageSize - Image Size: 1x1 [Composite, Composite, Image] Megapixels - Megapixels: 0.000001 ������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Real.t�����������������������������������������������������������������������000644 �000765 �000024 �00000002317 11327642463 015711� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Real.t". BEGIN { $| = 1; print "1..4\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Real; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Real'; my $testnum = 1; # test 2: Extract information from a RealMedia file { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Real.rm'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Extract information from a RealAudio file { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Real.ra'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 4: Extract information from a RealAudio Metafile { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Real.ram'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Real_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000010426 12546457276 016510� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Real.rm [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1915 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:05:24 08:37:37-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:55-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: RM [File, File, Image] FileTypeExtension - File Type Extension: rm [File, File, Image] MIMEType - MIME Type: audio/x-pn-realaudio [Real, Real-PROP, Video] 0 - Max Bitrate: 32 kbps [Real, Real-PROP, Video] 1 - Avg Bitrate: 32 kbps [Real, Real-PROP, Video] 2 - Max Packet Size: 465 [Real, Real-PROP, Video] 3 - Avg Packet Size: 465 [Real, Real-PROP, Video] 4 - Num Packets: 16 [Real, Real-PROP, Video] 5 - Duration: 0.10 s [Real, Real-PROP, Video] 6 - Preroll: 1.86 s [Real, Real-PROP, Video] 9 - Num Streams: 2 [Real, Real-PROP, Video] 10 - Flags: Allow Recording, Allow Download [Real, Real-MDPR, Video] 0 - Stream Number: 0 [Real, Real-MDPR, Video] 1 - Stream Max Bitrate: 32 kbps [Real, Real-MDPR, Video] 2 - Stream Avg Bitrate: 32 kbps [Real, Real-MDPR, Video] 3 - Stream Max Packet Size: 465 [Real, Real-MDPR, Video] 4 - Stream Avg Packet Size: 465 [Real, Real-MDPR, Video] 5 - Stream Start Time: 0 [Real, Real-MDPR, Video] 6 - Stream Preroll: 1.86 s [Real, Real-MDPR, Video] 7 - Stream Duration: 1.86 s [Real, Real-MDPR, Video] 9 - Stream Name: Audio Stream [Real, Real-MDPR, Video] 11 - Stream Mime Type: audio/x-pn-realaudio [Real, Real-MDPR2, Video] 0 - Stream Number: 1 [Real, Real-MDPR2, Video] 1 - Stream Max Bitrate: 0 bps [Real, Real-MDPR2, Video] 2 - Stream Avg Bitrate: 0 bps [Real, Real-MDPR2, Video] 3 - Stream Max Packet Size: 0 [Real, Real-MDPR2, Video] 4 - Stream Avg Packet Size: 0 [Real, Real-MDPR2, Video] 5 - Stream Start Time: 0 [Real, Real-MDPR2, Video] 6 - Stream Preroll: 0 s [Real, Real-MDPR2, Video] 7 - Stream Duration: 0 s [Real, Real-MDPR2, Video] 11 - Stream Mime Type: logical-fileinfo [Real, Real-MDPR2, Video] 14 - File Info Version: 0 [Real, Real-MDPR2, Video] Content Rating - Content Rating: All Ages [Real, Real-MDPR2, Video] Audiences - Audiences: 56k Dial-up; [Real, Real-MDPR2, Video] audioMode - Audio Mode: music [Real, Real-MDPR2, Time] Creation Date - Create Date: 2004:12:05 09:54:03 [Real, Real-MDPR2, Video] Generated By - Software: Helix Producer SDK from RealNetworks.9.1.0.24 Windows [Real, Real-MDPR2, Time] Modification Date - Modify Date: 2004:12:05 09:54:03 [Real, Real-MDPR2, Video] videoMode - Video Mode: normal [Real, Real-MDPR2, Video] Description - Description: Test RM file [Real, Real-MDPR2, Video] Keywords - Keywords: these are keywords [Real, Real-CONT, Video] 1 - Title: A title [Real, Real-CONT, Author] 3 - Author: Phil Harvey [Real, Real-CONT, Author] 5 - Copyright: Copyright 2006 Phil Harvey [Real, Real-CONT, Video] 7 - Comment: A comment [Real, Real-RJMD, Video] Album/Name - Album Name: The Real album name [Real, Real-RJMD, Video] Statistics/CDInfo Source - Statistics CD Info Source: [Real, Real-RJMD, Video] Track/Category - Track Category: The Real track category [Real, Real-RJMD, Video] Track/Comments - Track Comments: The Real track comments [Real, Real-RJMD, Video] Track/Comments/DataSize - Track Comments Data Size: 4294967295 [Real, Real-RJMD, Video] Track/Comments/MimeType - Track Comments Mime Type: text/plain [Real, Real-RJMD, Video] Track/Lyrics/DataSize - Track Lyrics Data Size: 1224736768 [Real, Real-RJMD, Video] Track/Lyrics/Extension - Track Lyrics Extension: .txt [Real, Real-RJMD, Video] Track/Lyrics/MimeType - Track Lyrics Mime Type: text/plain [ID3, ID3v1, Audio] 3 - Title: This is a title [ID3, ID3v1, Author] 33 - Artist: An artist [ID3, ID3v1, Audio] 63 - Album: The album [ID3, ID3v1, Time] 93 - Year: 2003 [ID3, ID3v1, Audio] 97 - Comment: This is a comment [ID3, ID3v1, Audio] 127 - Genre: Rock & Roll [Composite, Composite, Time] DateTimeOriginal - Date/Time Original: 2003 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Real_3.out�������������������������������������������������������������������000644 �000765 �000024 �00000002237 12546457276 016512� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Real.ra [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 130 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:05:17 14:28:16-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:55-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: RA [File, File, Image] FileTypeExtension - File Type Extension: ra [File, File, Image] MIMEType - MIME Type: audio/x-pn-realaudio [Real, Real-RA4, Audio] 6 - Audio Bytes: 704352 [Real, Real-RA4, Audio] 7 - Bytes Per Minute: 299743 [Real, Real-RA4, Audio] 10 - Audio Frame Size: 348 [Real, Real-RA4, Audio] 13 - Sample Rate: 22050 [Real, Real-RA4, Audio] 15 - Bits Per Sample: 16 [Real, Real-RA4, Audio] 16 - Channels: 1 [Real, Real-RA4, Audio] 24 - Title: The Sewing Girls [Real, Real-RA4, Author] 28 - Copyright: ** institut für universelle zusammenhänge �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Real_4.out�������������������������������������������������������������������000644 �000765 �000024 �00000001534 12546457276 016512� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Real.ram [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 69 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:05:19 12:55:34-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:55-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: RAM [File, File, Image] FileTypeExtension - File Type Extension: ram [File, File, Image] MIMEType - MIME Type: audio/x-pn-realaudio [Real, Real, Video] url - URL: rtsp://media.real.com/showcase/service/samples/rob_h_realvideo9_28.rm ��������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Ricoh.t����������������������������������������������������������������������000644 �000765 �000024 �00000002242 11417120764 016062� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Ricoh.t". BEGIN { $| = 1; print "1..4\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Ricoh; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Ricoh'; my $testnum = 1; # test 2: Extract information from Ricoh.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Ricoh.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( ['Ricoh:Sharpness' => 'Soft'], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum); print "ok $testnum\n"; } # test 4: Test extracting Ricoh APP5 RMETA information { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Ricoh2.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Ricoh_2.out������������������������������������������������������������������000644 �000765 �000024 �00000010261 12546457276 016666� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Ricoh.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1903 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:04 14:02:27-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:40-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: [EXIF, IFD0, Camera] 271 - Make: RICOH [EXIF, IFD0, Camera] 272 - Camera Model Name: Caplio RR1 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2001:11:07 13:08:41 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: (C) by Caplio RR1 User [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 150 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:11:07 13:08:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:11:07 13:08:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 3 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/274 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 2.6 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 5.3 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Other [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 7.5 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2272 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1704 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1626 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Ricoh, Camera] 1 - Maker Note Type: RDC [MakerNotes, Ricoh, Camera] 2 - Firmware Version: 1.04 [MakerNotes, Ricoh, Image] 0 - Ricoh Image Width: 2272 [MakerNotes, Ricoh, Image] 2 - Ricoh Image Height: 1704 [MakerNotes, Ricoh, Camera] 4099 - Sharpness: Sharp [MakerNotes, Ricoh, Time] 4 - Manufacture Date 1: 2001:10:23 00:00:00 [MakerNotes, Ricoh, Time] 5 - Manufacture Date 2: 0000:00:00 00:00:00 [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0100 [Composite, Composite, Image] Aperture - Aperture: 2.6 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/274 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 7.5 mm [Composite, Composite, Image] LightValue - Light Value: 10.3 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Ricoh_3.out������������������������������������������������������������������000644 �000765 �000024 �00000013470 12546457276 016674� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Ricoh_3_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 1907 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:55-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:55-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:55-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: [EXIF, IFD0, Camera] 271 - Make: RICOH [EXIF, IFD0, Camera] 272 - Camera Model Name: Caplio RR1 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2001:11:07 13:08:41 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: (C) by Caplio RR1 User [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 150 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:11:07 13:08:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:11:07 13:08:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 3 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/274 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 2.6 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 5.3 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Other [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 7.5 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2272 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1704 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1630 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Ricoh, Camera] 1 - Maker Note Type: RDC [MakerNotes, Ricoh, Camera] 2 - Firmware Version: 1.04 [MakerNotes, Ricoh, Camera] 3 - Ricoh 0x0003: 3 [MakerNotes, Ricoh, Camera] 4 - Ricoh 0x0004: 13104 12853 [MakerNotes, Ricoh, Image] 0 - Ricoh Image Width: 2272 [MakerNotes, Ricoh, Image] 2 - Ricoh Image Height: 1704 [MakerNotes, Ricoh, Camera] 4098 - Ricoh 0x1002: 0 [MakerNotes, Ricoh, Camera] 4099 - Sharpness: Soft [MakerNotes, Ricoh, Camera] 4100 - Ricoh 0x1004: 0 [MakerNotes, Ricoh, Camera] 4101 - Ricoh 0x1005: 1 [MakerNotes, Ricoh, Camera] 1 - Ricoh Subdir 0x0001: 532 314 [MakerNotes, Ricoh, Camera] 2 - Ricoh Subdir 0x0002: 42 [MakerNotes, Ricoh, Camera] 3 - Ricoh Subdir 0x0003: 314572848 [MakerNotes, Ricoh, Time] 4 - Manufacture Date 1: 2001:10:23 00:00:00 [MakerNotes, Ricoh, Time] 5 - Manufacture Date 2: 0000:00:00 00:00:00 [MakerNotes, Ricoh, Camera] 6 - Ricoh Subdir 0x0006: 12 0 [MakerNotes, Ricoh, Camera] 7 - Ricoh Subdir 0x0007: 0 [MakerNotes, Ricoh, Camera] 8 - Ricoh Subdir 0x0008: 32 [MakerNotes, Ricoh, Camera] 9 - Ricoh Subdir 0x0009: 65535 1024 [MakerNotes, Ricoh, Camera] 10 - Ricoh Subdir 0x000a: 0.07485380117 [MakerNotes, Ricoh, Camera] 11 - Ricoh Subdir 0x000b: 0.3939393939 [MakerNotes, Ricoh, Camera] 12 - Ricoh Subdir 0x000c: 136 12 [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0100 [PrintIM, PrintIM, Printing] 1 - Print IM 0x0001: 0x00160016 [PrintIM, PrintIM, Printing] 2 - Print IM 0x0002: 0x00000000 [PrintIM, PrintIM, Printing] 3 - Print IM 0x0003: 0x0000005e [PrintIM, PrintIM, Printing] 7 - Print IM 0x0007: 0x00000000 [PrintIM, PrintIM, Printing] 8 - Print IM 0x0008: 0x00000000 [PrintIM, PrintIM, Printing] 9 - Print IM 0x0009: 0x00000000 [PrintIM, PrintIM, Printing] 10 - Print IM 0x000a: 0x00000000 [PrintIM, PrintIM, Printing] 11 - Print IM 0x000b: 0x000000a6 [PrintIM, PrintIM, Printing] 12 - Print IM 0x000c: 0x00000000 [PrintIM, PrintIM, Printing] 13 - Print IM 0x000d: 0x00000000 [PrintIM, PrintIM, Printing] 14 - Print IM 0x000e: 0x000000be [PrintIM, PrintIM, Printing] 256 - Print IM 0x0100: 0x05000000 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0x00000000 [Composite, Composite, Image] Aperture - Aperture: 2.6 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/274 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Image] LightValue - Light Value: 10.3 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 7.5 mm ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Ricoh_4.out������������������������������������������������������������������000644 �000765 �000024 �00000015206 12546457276 016674� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Ricoh2.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 3.1 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:09:29 19:47:55-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:57-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: [EXIF, IFD0, Camera] 271 - Make: RICOH [EXIF, IFD0, Camera] 272 - Camera Model Name: Caplio Pro G3 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2006:05:26 11:48:48 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: (C) by Caplio Pro G3 User [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/1740 [EXIF, ExifIFD, Image] 33437 - F Number: 5.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 125 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2006:05:26 11:48:48 [EXIF, ExifIFD, Time] 36868 - Create Date: 2006:05:26 11:48:48 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 3.2 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 5.7 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 9.6 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: -1 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Spot [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Auto, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 5.7 mm [EXIF, ExifIFD, Image] 37510 - User Comment: GCM_TAG [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2048 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1536 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41994 - Sharpness: Hard [EXIF, GPS, Location] 0 - GPS Version ID: 2.2.0.0 [EXIF, GPS, Location] 1 - GPS Latitude Ref: North [EXIF, GPS, Location] 2 - GPS Latitude: 42 deg 2' 4.47" [EXIF, GPS, Location] 3 - GPS Longitude Ref: West [EXIF, GPS, Location] 4 - GPS Longitude: 0 deg 30' 27.01" [EXIF, GPS, Location] 5 - GPS Altitude Ref: Above Sea Level [EXIF, GPS, Location] 6 - GPS Altitude: 117 m [EXIF, GPS, Time] 7 - GPS Time Stamp: 10:47:24 [EXIF, GPS, Location] 8 - GPS Satellites: 24,23,20,17,13,11,04 [EXIF, GPS, Location] 9 - GPS Status: Measurement Active [EXIF, GPS, Location] 10 - GPS Measure Mode: 3-Dimensional Measurement [EXIF, GPS, Location] 11 - GPS Dilution Of Precision: 2.6 [EXIF, GPS, Location] 12 - GPS Speed Ref: knots [EXIF, GPS, Location] 13 - GPS Speed: 0 [EXIF, GPS, Location] 14 - GPS Track Ref: True North [EXIF, GPS, Location] 15 - GPS Track: 20 [EXIF, GPS, Location] 16 - GPS Img Direction Ref: True North [EXIF, GPS, Location] 17 - GPS Img Direction: 20 [EXIF, GPS, Location] 18 - GPS Map Datum: WGS-84 [EXIF, GPS, Location] 23 - GPS Dest Bearing Ref: Unknown () [EXIF, GPS, Location] 24 - GPS Dest Bearing: undef [EXIF, GPS, Location] 25 - GPS Dest Distance Ref: Unknown () [EXIF, GPS, Location] 26 - GPS Dest Distance: undef [EXIF, GPS, Time] 29 - GPS Date Stamp: 2006:05:26 [EXIF, GPS, Location] 30 - GPS Differential: No Correction [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 2492 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Ricoh, Camera] 1 - Maker Note Type: Rdc [MakerNotes, Ricoh, Camera] 2 - Firmware Version: 22.19 [MakerNotes, Ricoh, Camera] 5 - Internal Serial Number: 00000000000000012207000003100957 [MakerNotes, Ricoh, Image] 0 - Ricoh Image Width: 2048 [MakerNotes, Ricoh, Image] 2 - Ricoh Image Height: 1536 [MakerNotes, Ricoh, Time] 6 - Ricoh Date: 2006:05:26 11:48:48 [MakerNotes, Ricoh, Camera] 4099 - Sharpness: Sharp [MakerNotes, Ricoh, Time] 4 - Manufacture Date 1: 2005:06:06 [MakerNotes, Ricoh, Time] 5 - Manufacture Date 2: 2003:08:19 [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [APP5, RMETA, Image] Sign type - Sign Type: Information [APP5, RMETA, Image] Location - Location: Roundabout [APP5, RMETA, Image] Lit - Lit: No [APP5, RMETA, Image] Condition - Condition: Good [APP5, RMETA, Image] Azimuth - Azimuth: E [Composite, Composite, Image] Aperture - Aperture: 5.5 [Composite, Composite, Location] GPSAltitude - GPS Altitude: 117 m Above Sea Level [Composite, Composite, Time] GPSDateTime - GPS Date/Time: 2006:05:26 10:47:24Z [Composite, Composite, Location] GPSLatitude - GPS Latitude: 42 deg 2' 4.47" N [Composite, Composite, Location] GPSLongitude - GPS Longitude: 0 deg 30' 27.01" W [Composite, Composite, Location] GPSPosition - GPS Position: 42 deg 2' 4.47" N, 0 deg 30' 27.01" W [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/1740 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Image] LightValue - Light Value: 15.4 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 5.7 mm ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/RIFF.t�����������������������������������������������������������������������000644 �000765 �000024 �00000001426 12006747552 015554� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/RIFF.t". BEGIN { $| = 1; print "1..4\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::RIFF; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'RIFF'; my $testnum = 1; # tests 2-4: Extract information from RIFF.wav, RIFF.avi and RIFF.webp { my $ext; foreach $ext (qw(wav avi webp)) { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo("t/images/RIFF.$ext"); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } } # end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/RIFF_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000002725 12546457276 016356� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: RIFF.wav [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 224 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:01 09:26:57-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rwxr-xr-x [File, File, Image] FileType - File Type: WAV [File, File, Image] FileTypeExtension - File Type Extension: wav [File, File, Image] MIMEType - MIME Type: audio/x-wav [RIFF, RIFF, Audio] 0 - Encoding: Microsoft PCM [RIFF, RIFF, Audio] 1 - Num Channels: 1 [RIFF, RIFF, Audio] 2 - Sample Rate: 7872 [RIFF, RIFF, Audio] 4 - Avg Bytes Per Sec: 7872 [RIFF, RIFF, Audio] 7 - Bits Per Sample: 8 [RIFF, RIFF, Time] ICRD - Date Created: 2005:08:08 [RIFF, RIFF, Audio] ever - Exif Version: 0220 [RIFF, RIFF, Audio] erel - Related Image File: IMGP1149.JPG [RIFF, RIFF, Time] etim - Time Created: 16:23:35 [RIFF, RIFF, Camera] ecor - Make: PENTAX Corporation [RIFF, RIFF, Camera] emdl - Model: PENTAX Optio WP [RIFF, RIFF, Audio] emnt - Maker Notes: (Binary data 16 bytes) [Composite, Composite, Time] DateTimeOriginal - Date/Time Original: 2005:08:08 16:23:35 [Composite, Composite, Other] Duration2 - Duration: 0.03 s �������������������������������������������Image-ExifTool-10.10/t/RIFF_3.out�������������������������������������������������������������������000644 �000765 �000024 �00000005462 12546457276 016360� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: RIFF.avi [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1262 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2008:09:12 12:04:10-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: AVI [File, File, Image] FileTypeExtension - File Type Extension: avi [File, File, Image] MIMEType - MIME Type: video/x-msvideo [File, File, Image] 4 - Image Width: 320 [File, File, Image] 8 - Image Height: 240 [File, File, Image] 12 - Planes: 1 [File, File, Image] 14 - Bit Depth: 24 [File, File, Image] 16 - Compression: MJPG [File, File, Image] 20 - Image Length: 230400 [File, File, Image] 24 - Pixels Per Meter X: 0 [File, File, Image] 28 - Pixels Per Meter Y: 0 [File, File, Image] 32 - Num Colors: Use BitDepth [File, File, Image] 36 - Num Important Colors: All [RIFF, RIFF, Video] 0 - Frame Rate: 15 [RIFF, RIFF, Video] 1 - Max Data Rate: 201.2 kB/s [RIFF, RIFF, Video] 4 - Frame Count: 233 [RIFF, RIFF, Video] 6 - Stream Count: 2 [RIFF, RIFF, Video] 8 - Image Width: 320 [RIFF, RIFF, Video] 9 - Image Height: 240 [RIFF, RIFF, Video] 0 - Stream Type: Video [RIFF, RIFF, Video] 1 - Video Codec: mjpg [RIFF, RIFF, Video] 5 - Video Frame Rate: 15 [RIFF, RIFF, Video] 8 - Video Frame Count: 233 [RIFF, RIFF, Video] 10 - Quality: 10000 [RIFF, RIFF, Video] 11 - Sample Size: Variable [RIFF, RIFF, Video] 0 - Stream Type: Audio [RIFF, RIFF, Video] 1 - Audio Codec: [RIFF, RIFF, Video] 5 - Audio Sample Rate: 11024 [RIFF, RIFF, Video] 8 - Audio Sample Count: 171240 [RIFF, RIFF, Video] 10 - Quality: 10000 [RIFF, RIFF, Video] 11 - Sample Size: 1 byte [RIFF, RIFF, Audio] 0 - Encoding: Microsoft PCM [RIFF, RIFF, Audio] 1 - Num Channels: 1 [RIFF, RIFF, Audio] 2 - Sample Rate: 11024 [RIFF, RIFF, Audio] 4 - Avg Bytes Per Sec: 11024 [RIFF, RIFF, Audio] 7 - Bits Per Sample: 8 [RIFF, RIFF, Time] IDIT - Date/Time Original: 2003:03:10 15:04:43 [RIFF, RIFF, Audio] ISFT - Software: CanonMVI01 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Adobe XMP Core 4.1-c036 46.277092, Fri Feb 23 2007 14:16:18 [XMP, XMP-xmpDM, Image] altTapeName - Alt Tape Name: An Alternate Scene Name [XMP, XMP-xmpDM, Image] album - Album: No Album [XMP, XMP-xmp, Time] MetadataDate - Metadata Date: 2008:09:12 11:17:39-04:00 [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [Composite, Composite, Other] Duration - Duration: 15.53 s [Composite, Composite, Image] ImageSize - Image Size: 320x240 [Composite, Composite, Image] Megapixels - Megapixels: 0.077 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/RIFF_4.out�������������������������������������������������������������������000644 �000765 �000024 �00000002145 12546457276 016354� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: RIFF.webp [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 58 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2012:08:03 09:30:24-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: WEBP [File, File, Image] FileTypeExtension - File Type Extension: webp [File, File, Image] MIMEType - MIME Type: image/webp [RIFF, RIFF, Image] 0 - VP8 Version: 1 (bilinear reconstruction, simple loop) [RIFF, RIFF, Image] 6 - Image Width: 16 [RIFF, RIFF, Image] 6.1 - Horizontal Scale: 0 [RIFF, RIFF, Image] 8 - Image Height: 16 [RIFF, RIFF, Image] 8.1 - Vertical Scale: 0 [Composite, Composite, Image] ImageSize - Image Size: 16x16 [Composite, Composite, Image] Megapixels - Megapixels: 0.000256 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/RTF.t������������������������������������������������������������������������000644 �000765 �000024 �00000001253 11406466776 015470� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/RTF.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::RTF; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'RTF'; my $testnum = 1; # test 2: Extract information from an RTF file { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/RTF.rtf'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/RTF_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000002671 12546457276 016263� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: RTF.rtf [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 990 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:06:20 06:28:27-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:55-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: RTF [File, File, Image] FileTypeExtension - File Type Extension: rtf [File, File, Image] MIMEType - MIME Type: text/rtf [RTF, RTF, Document] title - Title: ExifTool RTF test (with spécîål çhars) [RTF, RTF, Time] revtim - Modify Date: 2010:06:19 20:00:00 [RTF, RTF, Document] subject - Subject: a “subject†in funny quotes [RTF, RTF, Document] doccomm - Comments: ストロボ.フラッシュ未発光ã€å¼·åˆ¶ç™ºå…‰ãƒ¢ãƒ¼ãƒ‰(end);another line [RTF, RTF, Author] author - Author: an author {with braces} [RTF, RTF, Document] company - Company: a company \with backslashes and leading space\ [RTF, RTF, Author] copyright - Copyright: © 2010 Phil Harvey [RTF, RTF, Document] keywords - Keywords: keyword1, keyword2 [RTF, RTF, Document] CustomString - Custom String: ABCDEF [RTF, RTF, Document] CustomNumber - Custom Number: 123456 �����������������������������������������������������������������������Image-ExifTool-10.10/t/Sanyo.t����������������������������������������������������������������������000644 �000765 �000024 �00000001710 11327642463 016113� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Sanyo.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Sanyo; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Sanyo'; my $testnum = 1; # test 2: Extract information from Sanyo.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Sanyo.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( [SceneCaptureType => 'night'], [FlashMode => 'force', Group => 'MakerNotes'], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum); print "ok $testnum\n"; } # end ��������������������������������������������������������Image-ExifTool-10.10/t/Sanyo_2.out������������������������������������������������������������������000644 �000765 �000024 �00000013750 12546457276 016721� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Sanyo.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 2.1 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:04 14:02:27-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:40-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: SANYO DIGITAL CAMERA [EXIF, IFD0, Camera] 271 - Make: SANYO Electric Co.,Ltd. [EXIF, IFD0, Camera] 272 - Camera Model Name: VPC-MZ3 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: V612P-75 [EXIF, IFD0, Time] 306 - Modify Date: 2003:10:11 12:43:05 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/185 [EXIF, ExifIFD, Image] 33437 - F Number: 6.9 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 400 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:10:11 12:43:05 [EXIF, ExifIFD, Time] 36868 - Create Date: 2003:10:11 12:43:05 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 2.9 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 0 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.8 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-spot [EXIF, ExifIFD, Camera] 37384 - Light Source: Fine Weather [EXIF, ExifIFD, Camera] 37385 - Flash: Auto, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 23.1 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2000 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1496 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Manual [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 0 [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 11113 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: High gain up [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, ExifIFD, Camera] 41996 - Subject Distance Range: Close [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1888 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Sanyo, Camera] 255 - Maker Note Offset: 1076 [MakerNotes, Sanyo, Camera] 512 - Special Mode: 0 0 0 [MakerNotes, Sanyo, Camera] 513 - Sanyo Quality: Fine/Very High [MakerNotes, Sanyo, Camera] 514 - Macro: Normal [MakerNotes, Sanyo, Camera] 516 - Digital Zoom: 0 [MakerNotes, Sanyo, Camera] 526 - Sequential Shot: None [MakerNotes, Sanyo, Camera] 527 - Wide Range: Off [MakerNotes, Sanyo, Camera] 528 - Color Adjustment Mode: Off [MakerNotes, Sanyo, Camera] 531 - Quick Shot: Off [MakerNotes, Sanyo, Camera] 532 - Self Timer: Off [MakerNotes, Sanyo, Camera] 534 - Voice Memo: Off [MakerNotes, Sanyo, Camera] 535 - Record Shutter Release: Record while down [MakerNotes, Sanyo, Camera] 536 - Flicker Reduce: Off [MakerNotes, Sanyo, Camera] 537 - Optical Zoom On: On [MakerNotes, Sanyo, Camera] 539 - Digital Zoom On: Off [MakerNotes, Sanyo, Camera] 541 - Light Source Special: Off [MakerNotes, Sanyo, Camera] 542 - Resaved: No [MakerNotes, Sanyo, Camera] 543 - Scene Select: Off [MakerNotes, Sanyo, Camera] 547 - Manual Focus Distance: 1 [MakerNotes, Sanyo, Camera] 548 - Sequence Shot Interval: 5 frames/s [MakerNotes, Sanyo, Camera] 549 - Flash Mode: Red eye [MakerNotes, Sanyo, Camera] 3840 - Data Dump: (Binary data 260 bytes) [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0100 [Composite, Composite, Image] Aperture - Aperture: 6.9 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 481.1 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/185 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.000 mm [Composite, Composite, Image] FOV - Field Of View: 0.2 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 23.1 mm (35 mm equivalent: 11113.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 1238.24 m [Composite, Composite, Image] LightValue - Light Value: 11.1 ������������������������Image-ExifTool-10.10/t/Sanyo_3.out������������������������������������������������������������������000644 �000765 �000024 �00000015041 12546457276 016715� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Sanyo_3_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 2.1 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:56-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:56-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:56-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: SANYO DIGITAL CAMERA [EXIF, IFD0, Camera] 271 - Make: SANYO Electric Co.,Ltd. [EXIF, IFD0, Camera] 272 - Camera Model Name: VPC-MZ3 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: V612P-75 [EXIF, IFD0, Time] 306 - Modify Date: 2003:10:11 12:43:05 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/185 [EXIF, ExifIFD, Image] 33437 - F Number: 6.9 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 400 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:10:11 12:43:05 [EXIF, ExifIFD, Time] 36868 - Create Date: 2003:10:11 12:43:05 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 2.9 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 0 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.8 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-spot [EXIF, ExifIFD, Camera] 37384 - Light Source: Fine Weather [EXIF, ExifIFD, Camera] 37385 - Flash: Auto, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 23.1 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2000 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1496 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Manual [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 0 [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 11113 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Night [EXIF, ExifIFD, Camera] 41991 - Gain Control: High gain up [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, ExifIFD, Camera] 41996 - Subject Distance Range: Close [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1882 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Sanyo, Camera] 255 - Maker Note Offset: 1076 [MakerNotes, Sanyo, Camera] 512 - Special Mode: 0 0 0 [MakerNotes, Sanyo, Camera] 513 - Sanyo Quality: Fine/Very High [MakerNotes, Sanyo, Camera] 514 - Macro: Normal [MakerNotes, Sanyo, Camera] 515 - Sanyo 0x0203: 0 [MakerNotes, Sanyo, Camera] 516 - Digital Zoom: 0 [MakerNotes, Sanyo, Camera] 526 - Sequential Shot: None [MakerNotes, Sanyo, Camera] 527 - Wide Range: Off [MakerNotes, Sanyo, Camera] 528 - Color Adjustment Mode: Off [MakerNotes, Sanyo, Camera] 529 - Sanyo 0x0211: 0 [MakerNotes, Sanyo, Camera] 530 - Sanyo 0x0212: 0 [MakerNotes, Sanyo, Camera] 531 - Quick Shot: Off [MakerNotes, Sanyo, Camera] 532 - Self Timer: Off [MakerNotes, Sanyo, Camera] 533 - Sanyo 0x0215: 0 [MakerNotes, Sanyo, Camera] 534 - Voice Memo: Off [MakerNotes, Sanyo, Camera] 535 - Record Shutter Release: Record while down [MakerNotes, Sanyo, Camera] 536 - Flicker Reduce: Off [MakerNotes, Sanyo, Camera] 537 - Optical Zoom On: On [MakerNotes, Sanyo, Camera] 538 - Sanyo 0x021a: 3 [MakerNotes, Sanyo, Camera] 539 - Digital Zoom On: Off [MakerNotes, Sanyo, Camera] 540 - Sanyo 0x021c: 0 [MakerNotes, Sanyo, Camera] 541 - Light Source Special: Off [MakerNotes, Sanyo, Camera] 542 - Resaved: No [MakerNotes, Sanyo, Camera] 543 - Scene Select: Off [MakerNotes, Sanyo, Camera] 544 - Sanyo 0x0220: 9 [MakerNotes, Sanyo, Camera] 545 - Sanyo 0x0221: 0 [MakerNotes, Sanyo, Camera] 546 - Sanyo 0x0222: 3 1820 800 103 8963 800 211 13726 800 187 19210 800 153[...] [MakerNotes, Sanyo, Camera] 547 - Manual Focus Distance: 1 [MakerNotes, Sanyo, Camera] 548 - Sequence Shot Interval: 5 frames/s [MakerNotes, Sanyo, Camera] 549 - Flash Mode: Force [MakerNotes, Sanyo, Camera] 3840 - Data Dump: (Binary data 260 bytes) [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0100 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0x00000001 [Composite, Composite, Image] Aperture - Aperture: 6.9 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 481.1 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/185 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.000 mm [Composite, Composite, Image] FOV - Field Of View: 0.2 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 23.1 mm (35 mm equivalent: 11113.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 1238.24 m [Composite, Composite, Image] LightValue - Light Value: 11.1 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Sigma.t����������������������������������������������������������������������000644 �000765 �000024 �00000002771 11462540122 016057� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Sigma.t". BEGIN { $| = 1; print "1..5\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Sigma; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Sigma'; my $testnum = 1; # test 2: Extract information from Sigma.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Sigma.jpg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( ['IPTCPixelWidth' => 200], ['Sharpness' => 2, 'Group' => 'MakerNotes'], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum); print "ok $testnum\n"; } # test 4: Test reading X3F image { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Sigma.x3f'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 5: Test writing X3F image { ++$testnum; my @writeInfo = ( ['Artist' => 'Phil Harvey'], ['XMP:Title' => 'A title'], ['Keywords' => ['one','two']], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/SigmaDP2.x3f'); print "ok $testnum\n"; } # end �������Image-ExifTool-10.10/t/Sigma_2.out������������������������������������������������������������������000644 �000765 �000024 �00000012605 12546457276 016666� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Sigma.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1531 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:04 14:02:27-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:41-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: SIGMA [EXIF, IFD0, Camera] 272 - Camera Model Name: SIGMA SD10 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: SIGMA PhotoPro 2.0.0.1586 [EXIF, IFD0, Time] 306 - Modify Date: 2004:03:19 17:48:51 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/320 [EXIF, ExifIFD, Image] 33437 - F Number: 8.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:11:27 10:31:34 [EXIF, ExifIFD, Time] 36868 - Create Date: 2004:03:19 17:48:51 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 60.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2268 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1512 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Sigma Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Custom [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Manual [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 102 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Image] 42016 - Image Unique ID: 303230303030313986D2C53F8ABDA2A6 [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 180 [EXIF, IFD1, Image] 283 - Y Resolution: 180 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1254 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y Cb Cr Positioning: Co-sited [MakerNotes, Sigma, Camera] 2 - Serial Number: 02000019 [MakerNotes, Sigma, Camera] 3 - Drive Mode: SINGLE [MakerNotes, Sigma, Camera] 4 - Resolution Mode: HI [MakerNotes, Sigma, Camera] 5 - AF Mode: AF-S [MakerNotes, Sigma, Camera] 6 - Focus Setting: AF [MakerNotes, Sigma, Camera] 7 - White Balance: Sunlight [MakerNotes, Sigma, Camera] 8 - Exposure Mode: Program AE [MakerNotes, Sigma, Camera] 9 - Metering Mode: Multi-segment [MakerNotes, Sigma, Camera] 10 - Lens Focal Range: 24 to 70 [MakerNotes, Sigma, Camera] 11 - Color Space: sRGB [MakerNotes, Sigma, Camera] 12 - Exposure Compensation: +0.8 [MakerNotes, Sigma, Camera] 13 - Contrast: +0.0 [MakerNotes, Sigma, Camera] 14 - Shadow: +0.0 [MakerNotes, Sigma, Camera] 15 - Highlight: +0.0 [MakerNotes, Sigma, Camera] 16 - Saturation: +0.4 [MakerNotes, Sigma, Camera] 17 - Sharpness: +1.0 [MakerNotes, Sigma, Camera] 18 - X3 Fill Light: +0.0 [MakerNotes, Sigma, Camera] 20 - Color Adjustment: 0 [MakerNotes, Sigma, Camera] 21 - Adjustment Mode: X3F Setting Mode [MakerNotes, Sigma, Camera] 22 - Quality: 12 [MakerNotes, Sigma, Camera] 23 - Firmware: 2.0.4.1642 Release [MakerNotes, Sigma, Camera] 24 - Software: SIGMA PhotoPro 2.0.0.1586 [MakerNotes, Sigma, Camera] 25 - Auto Bracket: [Composite, Composite, Image] Aperture - Aperture: 8.0 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.7 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/320 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.018 mm [Composite, Composite, Image] FOV - Field Of View: 20.0 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 60.0 mm (35 mm equivalent: 102.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 25.46 m [Composite, Composite, Image] LightValue - Light Value: 14.3 ���������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Sigma_3.out������������������������������������������������������������������000644 �000765 �000024 �00000013102 12546457276 016660� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Sigma_3_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 1575 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:56-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:56-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:56-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: d29df24ca5b6b8d1ac85670c7041b071 [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: SIGMA [EXIF, IFD0, Camera] 272 - Camera Model Name: SIGMA SD10 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: SIGMA PhotoPro 2.0.0.1586 [EXIF, IFD0, Time] 306 - Modify Date: 2004:03:19 17:48:51 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/320 [EXIF, ExifIFD, Image] 33437 - F Number: 8.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:11:27 10:31:34 [EXIF, ExifIFD, Time] 36868 - Create Date: 2004:03:19 17:48:51 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 60.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2268 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1512 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Sigma Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Custom [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Manual [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 102 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Image] 42016 - Image Unique ID: 303230303030313986D2C53F8ABDA2A6 [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 180 [EXIF, IFD1, Image] 283 - Y Resolution: 180 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 1254 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y Cb Cr Positioning: Co-sited [MakerNotes, Sigma, Camera] 2 - Serial Number: 02000019 [MakerNotes, Sigma, Camera] 3 - Drive Mode: SINGLE [MakerNotes, Sigma, Camera] 4 - Resolution Mode: HI [MakerNotes, Sigma, Camera] 5 - AF Mode: AF-S [MakerNotes, Sigma, Camera] 6 - Focus Setting: AF [MakerNotes, Sigma, Camera] 7 - White Balance: Sunlight [MakerNotes, Sigma, Camera] 8 - Exposure Mode: Program AE [MakerNotes, Sigma, Camera] 9 - Metering Mode: Multi-segment [MakerNotes, Sigma, Camera] 10 - Lens Focal Range: 24 to 70 [MakerNotes, Sigma, Camera] 11 - Color Space: sRGB [MakerNotes, Sigma, Camera] 12 - Exposure Compensation: +0.8 [MakerNotes, Sigma, Camera] 13 - Contrast: +0.0 [MakerNotes, Sigma, Camera] 14 - Shadow: +0.0 [MakerNotes, Sigma, Camera] 15 - Highlight: +0.0 [MakerNotes, Sigma, Camera] 16 - Saturation: +0.4 [MakerNotes, Sigma, Camera] 17 - Sharpness: +2.0 [MakerNotes, Sigma, Camera] 18 - X3 Fill Light: +0.0 [MakerNotes, Sigma, Camera] 20 - Color Adjustment: 0 [MakerNotes, Sigma, Camera] 21 - Adjustment Mode: X3F Setting Mode [MakerNotes, Sigma, Camera] 22 - Quality: 12 [MakerNotes, Sigma, Camera] 23 - Firmware: 2.0.4.1642 Release [MakerNotes, Sigma, Camera] 24 - Software: SIGMA PhotoPro 2.0.0.1586 [MakerNotes, Sigma, Camera] 25 - Auto Bracket: [IPTC, IPTC, Image] 40 - IPTC Pixel Width: 200 [IPTC, IPTC, Image] 0 - News Photo Version: 4 [Composite, Composite, Image] Aperture - Aperture: 8.0 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/320 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Image] LightValue - Light Value: 14.3 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.7 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.018 mm [Composite, Composite, Image] FOV - Field Of View: 20.0 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 60.0 mm (35 mm equivalent: 102.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 25.46 m ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Sigma_4.out������������������������������������������������������������������000644 �000765 �000024 �00000007753 12546457276 016700� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Sigma.x3f [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1464 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2005:11:14 14:47:22-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:55-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: X3F [File, File, Image] FileTypeExtension - File Type Extension: x3f [File, File, Image] MIMEType - MIME Type: image/x-sigma-x3f [SigmaRaw, SigmaRaw, Other] 1 - File Version: 2.2 [SigmaRaw, SigmaRaw, Other] 2 - Image Unique ID: 303230303132333413d14f3a3b2aa914 [SigmaRaw, SigmaRaw, Other] 6 - Mark Bits: (none) [SigmaRaw, SigmaRaw, Other] 7 - Image Width: 2268 [SigmaRaw, SigmaRaw, Other] 8 - Image Height: 1512 [SigmaRaw, SigmaRaw, Other] 9 - Rotation: 90 [SigmaRaw, SigmaRaw, Other] 10 - White Balance: Sunlight [SigmaRaw, SigmaRaw, Camera] 1 - Exposure Adjust: 0.5 [SigmaRaw, SigmaRaw, Camera] 2 - Contrast: -1.1 [SigmaRaw, SigmaRaw, Camera] 3 - Shadow: -0.1 [SigmaRaw, SigmaRaw, Camera] 4 - Highlight: -2.0 [SigmaRaw, SigmaRaw, Camera] 5 - Saturation: -0.1 [SigmaRaw, SigmaRaw, Camera] 6 - Sharpness: -1.9 [SigmaRaw, SigmaRaw, Camera] 10 - X3 Fill Light: -1.7 [SigmaRaw, SigmaRaw, Camera] 7 - Red Adjust: 1.0 [SigmaRaw, SigmaRaw, Camera] 8 - Green Adjust: 0.9 [SigmaRaw, SigmaRaw, Camera] 9 - Blue Adjust: 0.9 [SigmaRaw, SigmaRaw, Camera] ISO - ISO: 100 [SigmaRaw, SigmaRaw, Camera] RESOLUTION - Quality: High [SigmaRaw, SigmaRaw, Camera] WB_DESC - White Balance: Sunlight [SigmaRaw, SigmaRaw, Camera] CAMMANUF - Make: SIGMA [SigmaRaw, SigmaRaw, Camera] CAMMODEL - Model: SIGMA SD10 [SigmaRaw, SigmaRaw, Camera] CAMSERIAL - Serial Number: 02001234 [SigmaRaw, SigmaRaw, Camera] FIRMVERS - Firmware Version: 2.0.4.1586 Release [SigmaRaw, SigmaRaw, Time] TIME - Date/Time Original: 2001:01:01 00:36:35 [SigmaRaw, SigmaRaw, Image] EXPTIME - Integration Time: 1/41 [SigmaRaw, SigmaRaw, Camera] FOCUS - Focus: Auto-focus Locked [SigmaRaw, SigmaRaw, Camera] AFMODE - Focus Mode: AF-S [SigmaRaw, SigmaRaw, Image] SHUTTER - Exposure Time: 1/108 [SigmaRaw, SigmaRaw, Camera] SH_DESC - Shutter Speed Displayed: 1/100 [SigmaRaw, SigmaRaw, Camera] FLASH - Flash Mode: Off [SigmaRaw, SigmaRaw, Camera] PMODE - Exposure Program: Program [SigmaRaw, SigmaRaw, Image] EXPCOMP - Exposure Compensation: 0 [SigmaRaw, SigmaRaw, Image] EXPNET - Net Exposure Compensation: 0 [SigmaRaw, SigmaRaw, Camera] AEMODE - Metering Mode: 8-segment [SigmaRaw, SigmaRaw, Camera] DRIVE - Drive Mode: Single Shot [SigmaRaw, SigmaRaw, Camera] LENSMODEL - Lens Type: Sigma Lens (145) [SigmaRaw, SigmaRaw, Image] APERTURE - F Number: 8.4 [SigmaRaw, SigmaRaw, Camera] AP_DESC - Aperture Displayed: 8 [SigmaRaw, SigmaRaw, Camera] LENSARANGE - Lens Aperture Range: 29 to 4.5 [SigmaRaw, SigmaRaw, Camera] LENSFRANGE - Lens Focal Range: 15 to 30 [SigmaRaw, SigmaRaw, Camera] FLENGTH - Focal Length: 30.0 mm [SigmaRaw, SigmaRaw, Camera] FLEQ35MM - Focal Length In 35mm Format: 51.0 mm [Composite, Composite, Image] Aperture - Aperture: 8.4 [Composite, Composite, Image] ImageSize - Image Size: 2268x1512 [Composite, Composite, Image] Megapixels - Megapixels: 3.4 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/108 [Composite, Composite, Camera] LensID - Lens ID: Sigma 15-30mm F3.5-4.5 EX DG Aspherical [Composite, Composite, Image] LightValue - Light Value: 12.9 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.7 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.018 mm [Composite, Composite, Image] FOV - Field Of View: 38.9 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 30.0 mm (35 mm equivalent: 51.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 6.10 m ���������������������Image-ExifTool-10.10/t/Sigma_5.out������������������������������������������������������������������000644 �000765 �000024 �00000025626 12554462433 016666� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.00 [File, System, Image] FileName - File Name: Sigma_5_failed.x3f [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 7.2 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:07:24 12:16:29-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:07:24 12:16:29-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:07:24 12:16:29-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: X3F [File, File, Image] FileTypeExtension - File Type Extension: x3f [File, File, Image] MIMEType - MIME Type: image/x-sigma-x3f [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [SigmaRaw, SigmaRaw, Other] 1 - File Version: 2.3 [SigmaRaw, SigmaRaw, Other] 2 - Image Unique ID: 30313030383338321020114b31646638 [SigmaRaw, SigmaRaw, Other] 6 - Mark Bits: (none) [SigmaRaw, SigmaRaw, Other] 7 - Image Width: 2640 [SigmaRaw, SigmaRaw, Other] 8 - Image Height: 1760 [SigmaRaw, SigmaRaw, Other] 9 - Rotation: 0 [SigmaRaw, SigmaRaw, Other] 10 - White Balance: Auto [SigmaRaw, SigmaRaw, Other] 18 - Scene Capture Type: Standard [SigmaRaw, SigmaRaw, Camera] 1 - Exposure Adjust: 0.0 [SigmaRaw, SigmaRaw, Camera] 2 - Contrast: 0.0 [SigmaRaw, SigmaRaw, Camera] 3 - Shadow: 0.0 [SigmaRaw, SigmaRaw, Camera] 4 - Highlight: 0.0 [SigmaRaw, SigmaRaw, Camera] 5 - Saturation: 0.0 [SigmaRaw, SigmaRaw, Camera] 6 - Sharpness: 0.0 [SigmaRaw, SigmaRaw, Camera] 10 - X3 Fill Light: 0.0 [SigmaRaw, SigmaRaw, Camera] 7 - Red Adjust: 0.0 [SigmaRaw, SigmaRaw, Camera] 8 - Green Adjust: 0.0 [SigmaRaw, SigmaRaw, Camera] 9 - Blue Adjust: 0.0 [SigmaRaw, SigmaRaw, Preview] IMA2 - Jpg From Raw: (Binary data 5637 bytes) [SigmaRaw, SigmaRaw, Camera] AEMODE - Metering Mode: 8-segment [SigmaRaw, SigmaRaw, Camera] AFMODE - Focus Mode: AF-S [SigmaRaw, SigmaRaw, Camera] AP_DESC - Aperture Displayed: 2.8 [SigmaRaw, SigmaRaw, Image] APERTURE - F Number: 2.8 [SigmaRaw, SigmaRaw, Camera] BRACKET - Bracket Shot: [SigmaRaw, SigmaRaw, Camera] BURST - Burst Shot: 0 [SigmaRaw, SigmaRaw, Camera] CAMMANUF - Make: SIGMA [SigmaRaw, SigmaRaw, Camera] CAMMODEL - Model: SIGMA DP2 [SigmaRaw, SigmaRaw, Camera] CAMNAME - Camera Name: [SigmaRaw, SigmaRaw, Camera] CAMSERIAL - Serial Number: 1008382 [SigmaRaw, SigmaRaw, Camera] DRIVE - Drive Mode: Single Shot [SigmaRaw, SigmaRaw, Image] EXPCOMP - Exposure Compensation: 0 [SigmaRaw, SigmaRaw, Image] EXPNET - Net Exposure Compensation: 0 [SigmaRaw, SigmaRaw, Image] EXPTIME - Integration Time: 1/10 [SigmaRaw, SigmaRaw, Camera] FIRMVERS - Firmware Version: 1.03.0.000 [SigmaRaw, SigmaRaw, Camera] FLASH - Flash Mode: Off [SigmaRaw, SigmaRaw, Camera] FLENGTH - Focal Length: 24.2 mm [SigmaRaw, SigmaRaw, Camera] FLEQ35MM - Focal Length In 35mm Format: 41.0 mm [SigmaRaw, SigmaRaw, Camera] FOCUS - Focus: Auto-focus Locked [SigmaRaw, SigmaRaw, Camera] IMAGEBOARDID - Image Board ID: [SigmaRaw, SigmaRaw, Camera] IMAGERTEMP - Sensor Temperature: 20 C [SigmaRaw, SigmaRaw, Camera] ISO - ISO: 100 [SigmaRaw, SigmaRaw, Camera] LENSARANGE - Lens Aperture Range: 2.8 to 14 [SigmaRaw, SigmaRaw, Camera] LENSFRANGE - Lens Focal Range: 24.2 [SigmaRaw, SigmaRaw, Camera] LENSMODEL - Lens Type: Unknown ( ) [SigmaRaw, SigmaRaw, Camera] PMODE - Exposure Program: Program [SigmaRaw, SigmaRaw, Camera] RESOLUTION - Quality: High [SigmaRaw, SigmaRaw, Camera] SENSORID - Sensor ID: [SigmaRaw, SigmaRaw, Camera] SH_DESC - Shutter Speed Displayed: 1/10 [SigmaRaw, SigmaRaw, Image] SHUTTER - Exposure Time: 1/10 [SigmaRaw, SigmaRaw, Time] TIME - Date/Time Original: 2009:11:28 13:05:20 [SigmaRaw, SigmaRaw, Camera] WB_DESC - White Balance: Auto [SigmaRaw, SigmaRaw, Camera] CM_DESC - Scene Capture Type: Standard [SigmaRaw, SigmaRaw, Preview] IMA2 - Preview Image: (Binary data 18 bytes) [EXIF, IFD0, Camera] 271 - Make: SIGMA [EXIF, IFD0, Camera] 272 - Camera Model Name: SIGMA DP2 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: 1.03.0.000000000 [EXIF, IFD0, Time] 306 - Modify Date: 2009:11:28 13:05:20 [EXIF, IFD0, Author] 315 - Artist: Phil Harvey [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/10 [EXIF, ExifIFD, Image] 33437 - F Number: 2.8 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2009:11:28 13:05:20 [EXIF, ExifIFD, Time] 36868 - Create Date: 2009:11:28 13:05:20 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.8 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 24.2 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2640 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1760 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 41 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Image] 42016 - Image Unique ID: 30313030383338321020110031646638 [EXIF, ExifIFD, Image] 42240 - Gamma: undef [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 180 [EXIF, IFD1, Image] 283 - Y Resolution: 180 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 2680 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [EXIF, IFD1, Image] 531 - Y Cb Cr Positioning: Co-sited [MakerNotes, Sigma, Camera] 2 - Serial Number: 1008382 [MakerNotes, Sigma, Camera] 3 - Drive Mode: SINGLE [MakerNotes, Sigma, Camera] 4 - Resolution Mode: HI [MakerNotes, Sigma, Camera] 5 - AF Mode: AF-S [MakerNotes, Sigma, Camera] 6 - Focus Setting: AF [MakerNotes, Sigma, Camera] 7 - White Balance: Auto [MakerNotes, Sigma, Camera] 8 - Exposure Mode: Program AE [MakerNotes, Sigma, Camera] 9 - Metering Mode: Multi-segment [MakerNotes, Sigma, Camera] 10 - Lens Focal Range: 24.2 [MakerNotes, Sigma, Camera] 11 - Color Space: sRGB [MakerNotes, Sigma, Camera] 12 - Exposure Adjust: 0 [MakerNotes, Sigma, Camera] 13 - Contrast: 0 [MakerNotes, Sigma, Camera] 14 - Shadow: 0 [MakerNotes, Sigma, Camera] 15 - Highlight: 0 [MakerNotes, Sigma, Camera] 16 - Saturation: 0 [MakerNotes, Sigma, Camera] 17 - Sharpness: 0 [MakerNotes, Sigma, Camera] 18 - X3 Fill Light: 0 [MakerNotes, Sigma, Camera] 20 - Color Adjustment: 0 0 0 [MakerNotes, Sigma, Camera] 21 - Adjustment Mode: [MakerNotes, Sigma, Camera] 22 - Quality: BASIC [MakerNotes, Sigma, Camera] 23 - Firmware: 1.03.0.000 [MakerNotes, Sigma, Camera] 24 - Software: [MakerNotes, Sigma, Camera] 25 - Auto Bracket: [MakerNotes, Sigma, Camera] 26 - Preview Image Start: 2708 [MakerNotes, Sigma, Camera] 27 - Preview Image Length: 26 [MakerNotes, Sigma, Camera] 28 - Preview Image Size: 640 480 [MakerNotes, Sigma, Camera] 29 - Maker Note Version: 0100 [MakerNotes, Sigma, Camera] 30 - Sigma 0x001e: 4 [MakerNotes, Sigma, Camera] 31 - AF Point: Center [MakerNotes, Sigma, Camera] 32 - Sigma 0x0020: [MakerNotes, Sigma, Camera] 33 - Sigma 0x0021: [MakerNotes, Sigma, Camera] 34 - File Format: X3F-S [MakerNotes, Sigma, Camera] 35 - Sigma 0x0023: [MakerNotes, Sigma, Camera] 36 - Calibration: C72_CalibrationSoft Version 1.00;RunID:C72Cal-001;Runtime:2009-05-29-14:15:38 [MakerNotes, Sigma, Camera] 37 - Sigma 0x0025: 0.90 [MakerNotes, Sigma, Camera] 38 - Sigma 0x0026: 0 [MakerNotes, Sigma, Camera] 39 - Sigma 0x0027: 0 [MakerNotes, Sigma, Camera] 40 - Sigma 0x0028: 0 [MakerNotes, Sigma, Camera] 41 - Sigma 0x0029: 0 [MakerNotes, Sigma, Camera] 42 - Sigma 0x002a: 0 [MakerNotes, Sigma, Camera] 43 - Sigma 0x002b: 0 [MakerNotes, Sigma, Camera] 44 - Color Mode: Standard [MakerNotes, Sigma, Camera] 45 - Sigma 0x002d: 0 [MakerNotes, Sigma, Camera] 46 - Sigma 0x002e: 0 [MakerNotes, Sigma, Camera] 47 - Sigma 0x002f: 0 [MakerNotes, Sigma, Camera] 48 - Lens Aperture Range: 2.8 to 14 [MakerNotes, Sigma, Camera] 49 - F Number: 2.8 [MakerNotes, Sigma, Camera] 50 - Exposure Time: 1/10 [MakerNotes, Sigma, Camera] 51 - Exposure Time 2: 1/10 [MakerNotes, Sigma, Camera] 52 - Burst Shot: 0 [MakerNotes, Sigma, Camera] 53 - Exposure Compensation: 0 [MakerNotes, Sigma, Camera] 54 - Sigma 0x0036: [MakerNotes, Sigma, Camera] 55 - Sigma 0x0037: [MakerNotes, Sigma, Camera] 56 - Sigma 0x0038: [MakerNotes, Sigma, Camera] 57 - Sensor Temperature: 20 C [MakerNotes, Sigma, Camera] 58 - Flash Exposure Comp: 0 [MakerNotes, Sigma, Camera] 59 - Firmware: 1.03.0.000 [MakerNotes, Sigma, Camera] 60 - White Balance: Auto [IPTC, IPTC, Other] 25 - Keywords: one, two [IPTC, IPTC, Other] 0 - Application Record Version: 4 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 10.00 [XMP, XMP-dc, Image] title - Title: A title [Composite, Composite, Image] Aperture - Aperture: 2.8 [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 26 bytes) [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/10 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Camera] LensID - Lens ID: Unknown ( ) [Composite, Composite, Image] LightValue - Light Value: 6.3 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.7 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.018 mm [Composite, Composite, Image] FOV - Field Of View: 47.4 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 24.2 mm (35 mm equivalent: 41.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 11.79 m ����������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Sony.t�����������������������������������������������������������������������000644 �000765 �000024 �00000003163 11361171504 015745� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Sony.t". BEGIN { $| = 1; print "1..5\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Sony; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Sony'; my $testnum = 1; # test 2: Extract information from Sony.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Sony.jpg',{Unknown=>1}); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( [FlashFired => 'true'], [ISO => undef], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum); print "ok $testnum\n"; } # test 4: Test Sony decryption { ++$testnum; my $data = pack('N', 0x34a290d3); Image::ExifTool::Sony::Decrypt(\$data, 0, 4, 0x12345678); my $expected = 0x20677968; my $got = unpack('N', $data); unless ($got == $expected) { warn "\n Test $testnum (decryption) returned wrong value:\n"; warn sprintf(" Expected 0x%x but got 0x%x\n", $expected, $got); print 'not '; } print "ok $testnum\n"; } # test 5: Extract information from a PMP image { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Sony.pmp'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Sony_2.out�������������������������������������������������������������������000644 �000765 �000024 �00000012221 12546457276 016550� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Sony.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 2.7 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:01:04 14:02:27-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:57-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: [EXIF, IFD0, Camera] 271 - Make: SONY [EXIF, IFD0, Camera] 272 - Camera Model Name: DSC-F828 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2003:12:18 13:51:33 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/250 [EXIF, ExifIFD, Image] 33437 - F Number: 7.1 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 64 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:12:18 13:51:33 [EXIF, ExifIFD, Time] 36868 - Create Date: 2003:12:18 13:51:33 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 8 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.0 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 12.5 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 3264 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 2448 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto bracket [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Camera] 271 - Make: SONY [EXIF, IFD1, Camera] 272 - Camera Model Name: DSC-F828 [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Time] 306 - Modify Date: 2003:12:18 13:51:33 [EXIF, IFD1, Image] 513 - Thumbnail Offset: 2502 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Sony, Camera] 8192 - Sony 0x2000: 0 [MakerNotes, Sony, Camera] 36865 - Sony 0x9001: ..­mQV„ûV„û.³9°9ŠJuÿ.Ŭ]è^ޏ.[...] [MakerNotes, Sony, Camera] 36866 - Sony 0x9002: .JÚ`.p.V!.!¾ê¾ê0ÿ0ÿV!ˆPp,×.0c[...] [MakerNotes, Sony, Camera] 36867 - Sony 0x9003: .ÜsF®&.¡ÒB.¯.....È..ûÙ;›Õ.utN½½½½½½(¶^w’[...] [MakerNotes, Sony, Camera] 36868 - Sony 0x9004: ..,.,.,.,.ô.ô.ô.ô.ô.ô.ô.ôlêoÄ@.o”.,‚.,Ï.o‰3úM[...] [MakerNotes, Sony, Camera] 36869 - Sony 0x9005: ..@o........}[...] [MakerNotes, Sony, Camera] 36870 - Sony 0x9006: .ð™ârï‘.{.•ân‡öGeG‘š‘`zâ[...] [MakerNotes, Sony, Camera] 36871 - Sony 0x9007: .ç;.|.cçf.VØÌ£.üêbêØ.ßç¶^O[...] [MakerNotes, Sony, Camera] 36872 - Sony 0x9008: ..ªø..¼·’.³ôi.Þ.Ð@÷.]:þïó•±ö;Žî;ä‚.ÕH[...] [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [PrintIM, PrintIM, Printing] 2 - Print IM 0x0002: 0x00000001 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0x00000000 [Composite, Composite, Image] Aperture - Aperture: 7.1 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/250 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 12.5 mm [Composite, Composite, Image] LightValue - Light Value: 14.3 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Sony_3.out�������������������������������������������������������������������000644 �000765 �000024 �00000012332 12546457276 016554� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Sony_3_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 5.5 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:56-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:56-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:56-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: [EXIF, IFD0, Camera] 271 - Make: SONY [EXIF, IFD0, Camera] 272 - Camera Model Name: DSC-F828 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2003:12:18 13:51:33 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/250 [EXIF, ExifIFD, Image] 33437 - F Number: 7.1 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:12:18 13:51:33 [EXIF, ExifIFD, Time] 36868 - Create Date: 2003:12:18 13:51:33 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 8 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.0 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 12.5 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 3264 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 2448 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto bracket [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Camera] 271 - Make: SONY [EXIF, IFD1, Camera] 272 - Camera Model Name: DSC-F828 [EXIF, IFD1, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Time] 306 - Modify Date: 2003:12:18 13:51:33 [EXIF, IFD1, Image] 513 - Thumbnail Offset: 2486 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Sony, Camera] 8192 - Sony 0x2000: 0 [MakerNotes, Sony, Camera] 36865 - Sony 0x9001: ..­mQV„ûV„û.³9°9ŠJuÿ.Ŭ]è^ޏ.[...] [MakerNotes, Sony, Camera] 36866 - Sony 0x9002: .JÚ`.p.V!.!¾ê¾ê0ÿ0ÿV!ˆPp,×.0c[...] [MakerNotes, Sony, Camera] 36867 - Sony 0x9003: .ÜsF®&.¡ÒB.¯.....È..ûÙ;›Õ.utN½½½½½½(¶^w’[...] [MakerNotes, Sony, Camera] 36868 - Sony 0x9004: ..,.,.,.,.ô.ô.ô.ô.ô.ô.ô.ôlêoÄ@.o”.,‚.,Ï.o‰3úM[...] [MakerNotes, Sony, Camera] 36869 - Sony 0x9005: ..@o........}[...] [MakerNotes, Sony, Camera] 36870 - Sony 0x9006: .ð™ârï‘.{.•ân‡öGeG‘š‘`zâ[...] [MakerNotes, Sony, Camera] 36871 - Sony 0x9007: .ç;.|.cçf.VØÌ£.üêbêØ.ßç¶^O[...] [MakerNotes, Sony, Camera] 36872 - Sony 0x9008: ..ªø..¼·’.³ôi.Þ.Ð@÷.]:þïó•±ö;Žî;ä‚.ÕH[...] [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [PrintIM, PrintIM, Printing] 2 - Print IM 0x0002: 0x00000001 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0x00000000 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.94 [XMP, XMP-exif, Camera] FlashFired - Flash Fired: True [Composite, Composite, Image] Aperture - Aperture: 7.1 [Composite, Composite, Other] Flash - Flash: Fired [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/250 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 12.5 mm ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Sony_5.out�������������������������������������������������������������������000644 �000765 �000024 �00000004075 12546457277 016564� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [ExifTool, ExifTool, ExifTool] - Make: Sony [ExifTool, ExifTool, ExifTool] - Model: DSC-F1 [File, System, Image] FileName - File Name: Sony.pmp [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 375 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:04:13 18:42:12-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:57-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: PMP [File, File, Image] FileTypeExtension - File Type Extension: pmp [File, File, Image] MIMEType - MIME Type: application/unknown [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [MakerNotes, Sony, Image] 8 - Jpg From Raw Start: 124 [MakerNotes, Sony, Image] 12 - Jpg From Raw Length: 251 [MakerNotes, Sony, Image] 22 - Sony Image Width: 640 [MakerNotes, Sony, Image] 24 - Sony Image Height: 480 [MakerNotes, Sony, Image] 27 - Orientation: Horizontal (normal) [MakerNotes, Sony, Image] 29 - Image Quality: Standard [MakerNotes, Sony, Image] 52 - Comment: [MakerNotes, Sony, Time] 76 - Date/Time Original: 1998:09:01 20:19:57 [MakerNotes, Sony, Time] 84 - Modify Date: 1998:09:01 20:19:57 [MakerNotes, Sony, Image] 102 - Exposure Time: 1/100 [MakerNotes, Sony, Camera] 118 - Flash: No Flash [Composite, Composite, Preview] JpgFromRaw - Jpg From Raw: (Binary data 251 bytes) [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/100 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/TestLib.pm�������������������������������������������������������������������000644 �000765 �000024 �00000040441 12617121666 016545� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: TestLib.pm # # Description: Utility routines for testing ExifTool modules # # Revisions: Feb. 19/04 - P. Harvey Created # Feb. 26/04 - P. Harvey Name temporary file ".failed" and erase # it if the test passes # Feb. 27/04 - P. Harvey Change print format and allow ExifTool # object to be passed instead of tags hash ref. # Oct. 30/04 - P. Harvey Split testCompare() into separate sub. # May 18/05 - P. Harvey Tolerate round-off errors in floats. # Feb. 02/08 - P. Harvey Allow different timezones in time values # Sep. 16/08 - P. Harvey Improve timezone testing # Jul. 14/10 - P. Harvey Added writeInfo() # Jan. 06/12 - P. Harvey Patched MirBSD leap second "feature" #------------------------------------------------------------------------------ package t::TestLib; use strict; require 5.002; require Exporter; use Image::ExifTool qw(ImageInfo); use vars qw($VERSION @ISA @EXPORT); $VERSION = '1.21'; @ISA = qw(Exporter); @EXPORT = qw(check writeCheck writeInfo testCompare binaryCompare testVerbose); my $noTimeLocal; sub nearEnough($$); sub nearTime($$$$); sub formatValue($); sub writeInfo($$;$$); #------------------------------------------------------------------------------ # Compare 2 binary files # Inputs: 0) file name 1, 1) file name 2 # Returns: 1 if files are identical sub binaryCompare($$) { my ($file1, $file2) = @_; my $success = 1; open(TESTFILE1, $file1) or return 0; unless (open(TESTFILE2, $file2)) { close(TESTFILE1); return 0; } binmode(TESTFILE1); binmode(TESTFILE2); my ($buf1, $buf2); while (read(TESTFILE1, $buf1, 65536)) { read(TESTFILE2, $buf2, 65536) or $success = 0, last; $buf1 eq $buf2 or $success = 0, last; } read(TESTFILE2, $buf2, 65536) and $success = 0; close(TESTFILE1); close(TESTFILE2); return $success } #------------------------------------------------------------------------------ # Compare 2 files and return true and erase the 2nd file if they are the same # Inputs: 0) file1, 1) file2, 2) test number, 3) flag to not erase test file # Returns: true if files are the same sub testCompare($$$;$) { my ($stdfile, $testfile, $testnum, $keep) = @_; my $success = 0; my $linenum; my $oldSep = $/; $/ = "\x0a"; # set input line separator if (open(FILE1, $stdfile)) { if (open(FILE2, $testfile)) { $success = 1; my ($line1, $line2); my $linenum = 0; for (;;) { $line1 = <FILE1>; last unless defined $line1; ++$linenum; $line2 = <FILE2>; if (defined $line2) { next if $line1 eq $line2; next if nearEnough($line1, $line2); } $success = 0; last; } if ($success) { # make sure there is nothing left in file2 $line2 = <FILE2>; if ($line2) { ++$linenum; $success = 0; } } unless ($success) { warn "\n Test $testnum differs beginning at line $linenum:\n"; defined $line1 or $line1 = '(null)'; defined $line2 or $line2 = '(null)'; chomp($line1,$line2); warn qq{ Test gave: "$line2"\n}; warn qq{ Should be: "$line1"\n}; } close(FILE2); } close(FILE1); } $/ = $oldSep; # restore input line separator # erase .failed file if test was successful $success and not $keep and unlink $testfile; return $success } #------------------------------------------------------------------------------ # Return true if two test lines are close enough # Inputs: 0) line1, 1) line2 # Returns: true if lines are similar enough to pass test sub nearEnough($$) { my ($line1, $line2) = @_; # of course, the version number will change... return 1 if $line1 =~ /^(.*ExifTool.*)\b\d{1,2}\.\d{2}\b(.*)/s and ($line2 eq "$1$Image::ExifTool::VERSION$Image::ExifTool::RELEASE$2" or $line2 eq "$1$Image::ExifTool::VERSION$2"); # allow different FileModifyDate, FileAccessDate, FileCreateDate/FileInodeChangeDate and FilePermissions return 1 if $line1 =~ /(File\s?(Modif.*Date|Access\s?Date|Inode\s?Change\s?Date|Permissions))/ and ($line2 =~ /$1/ or $line2 =~ /File\s?Creat.*Date/); # allow CurrentIPTCDigest to be zero if Digest::MD5 isn't installed return 1 if $line1 =~ /Current IPTC Digest/ and $line2 =~ /Current IPTC Digest: (0|#){32}/ and not eval 'require Digest::MD5'; # analyze every token in the line, and allow rounding # or format differences in floating point numbers my @toks1 = split /\s+/, $line1; my @toks2 = split /\s+/, $line2; my $lenChanged = 0; my $i; for ($i=0; ; ++$i) { return 1 if $i >= @toks1 and $i >= @toks2; # all tokens were OK my $tok1 = $toks1[$i]; my $tok2 = $toks2[$i]; last unless defined $tok1 and defined $tok2; next if $tok1 eq $tok2; # can't compare any more if either line was truncated (ie. ends with '[...]' or '[snip]') if ($tok1 =~ /\[(\.{3}|snip)\]$/ or $tok2 =~ /\[(\.{3}|snip)\]$/) { return 1 if $tok1=~ /^[-+]?\d+\./ or $tok2=~/^[-+]?\d+\./; # check for float return $lenChanged } if ($tok1 =~ /^(\d{2}|\d{4}):\d{2}:\d{2}/ and $tok2 =~ /^(\d{2}|\d{4}):\d{2}:\d{2}/ and not eval { require Time::Local }) { unless ($noTimeLocal) { warn "Ignored time difference(s) because Time::Local is not installed\n"; $noTimeLocal = 1; } next; # ignore times if Time::Local not available # account for different timezones } elsif ($tok1 =~ /^(\d{2}:\d{2}:\d{2})(Z|[-+]\d{2}:\d{2})$/i) { my $time = $1; # remove timezone # timezone may be wrong if writing date/time value in a different timezone next if $tok2 =~ /^(\d{2}:\d{2}:\d{2})(Z|[-+]\d{2}:\d{2})$/i and $time eq $1; # date/time may be wrong to if converting GMT value to local time last unless $i and $toks1[$i-1] =~ /^\d{4}:\d{2}:\d{2}$/ and $toks2[$i-1] =~ /^\d{4}:\d{2}:\d{2}$/; $tok1 = $toks1[$i-1] . ' ' . $tok1; # add date to give date/time value $tok2 = $toks2[$i-1] . ' ' . $tok2; last unless nearTime($tok1, $tok2, $line1, $line2); # date may be different if timezone shifted into next day } elsif ($tok1 =~ /^\d{4}:\d{2}:\d{2}$/ and $tok2 =~ /^\d{4}:\d{2}:\d{2}$/ and defined $toks1[$i+1] and defined $toks2[$i+1] and $toks1[$i+1] =~ /^(\d{2}:\d{2}:\d{2})(Z|[-+]\d{2}:\d{2})$/i and $toks2[$i+1] =~ /^(\d{2}:\d{2}:\d{2})(Z|[-+]\d{2}:\d{2})$/i) { ++$i; $tok1 .= ' ' . $toks1[$i]; # add time to give date/time value $tok2 .= ' ' . $toks2[$i]; last unless nearTime($tok1, $tok2, $line1, $line2); # handle floating point numbers filtered by ExifTool test 29 } elsif ($tok1 =~ s/(\.#)#*(e[-+]\#+)?/$1/g or $tok2 =~ s/(\.#)#*(e[-+]\#+)?/$1/g) { $tok2 =~ s/(\.#)#*(e[-+]\#+)?/$1/g; last if $tok1 ne $tok2; } else { # check to see if both tokens are floating point numbers (with decimal points!) if ($tok1 =~ s/([^\d.]+)$//) { # remove trailing units my $a = $1; last unless $tok2 =~ s/\Q$a\E$//; } if ($tok1 =~ s/^(\d+:\d+:)//) { # remove leading HH:MM: my $a = $1; last unless $tok2 =~ s/^\Q$a//; } if ($tok1 =~ s/^'//) { # remove leading quote last unless $tok2 =~ s/^'//; } last unless Image::ExifTool::IsFloat($tok1) and Image::ExifTool::IsFloat($tok2) and $tok1 =~ /\./ and $tok2 =~ /\./; last if $tok1 == 0 or $tok2 == 0; # numbers are bad if not the same to 5 significant figures if (abs(($tok1-$tok2)/($tok1+$tok2)) > 1e-5) { # (but allow last digit to be different due to round-off errors) my ($int1, $int2); ($int1 = $tok1) =~ tr/0-9//dc; ($int2 = $tok2) =~ tr/0-9//dc; my $dlen = length($int1) - length($int2); if ($dlen > 0) { $int2 .= '0' x $dlen; } elsif ($dlen < 0) { $int1 .= '0' x (-$dlen); } last if abs($int1-$int2) > 1.00001; } } # set flag if length changed $lenChanged = 1 if length($tok1) ne length($tok2); } return 0; } #------------------------------------------------------------------------------ # Check two time strings to see if they are the same # Inputs: 0) time1, 1) time2, 2) line1, 3) line2 # Returns: true on success sub nearTime($$$$) { my ($tok1, $tok2, $line1, $line2) = @_; my $t1 = Image::ExifTool::GetUnixTime($tok1, 'local') or return 0; my $t2 = Image::ExifTool::GetUnixTime($tok2, 'local') or return 0; my $td = $t2 - $t1; if ($td) { # patch for the MirBSD leap-second unconformity # (120 leap seconds should cover us until _well_ into the future) return 0 unless $^O eq 'mirbsd' and $td < 0 and $td > -120; warn "\n Ignoring $td second error due to MirBSD leap-second \"feature\":\n"; chomp($line1,$line2); warn qq{ Test gave: "$line2"\n}; warn qq{ Should be: "$line1"\n}; } return 1; } #------------------------------------------------------------------------------ # Format value for printing # Inputs: 0) value # Returns: string for printing sub formatValue($) { local $_; my $val = shift; my ($str, @a); if (ref $val eq 'SCALAR') { if ($$val =~ /^Binary data/) { $str = "($$val)"; } else { $str = '(Binary data ' . length($$val) . ' bytes)'; } } elsif (ref $val eq 'ARRAY') { foreach (@$val) { push @a, formatValue($_); } $str = '[' . join(',', @a) . ']'; } elsif (ref $val eq 'HASH') { my $key; foreach $key (sort keys %$val) { push @a, $key . '=' . formatValue($$val{$key}); } $str = '{' . join(',', @a) . '}'; } elsif (defined $val) { # make sure there are no linefeeds in output ($str = $val) =~ tr/\x0a\x0d/;/; # translate unknown characters # $str =~ tr/\x01-\x1f\x80-\xff/\./; $str =~ tr/\x01-\x1f\x7f/./; # remove NULL chars $str =~ s/\x00//g; } else { $str = ''; } return $str; } #------------------------------------------------------------------------------ # Compare extracted information against a standard output file # Inputs: 0) [optional] ExifTool object reference # 1) tag hash reference, 2) test name, 3) test number # 4) test number for comparison file (if different than this test) # 5) top group number to test (2 by default) # Returns: 1 if check passed sub check($$$;$$$) { my $exifTool = shift if ref $_[0] ne 'HASH'; my ($info, $testname, $testnum, $stdnum, $topGroup) = @_; return 0 unless $info; $stdnum = $testnum unless defined $stdnum; my $testfile = "t/${testname}_$testnum.failed"; my $stdfile = "t/${testname}_$stdnum.out"; open(FILE, ">$testfile") or return 0; # use one type of linefeed so this test works across platforms my $oldSep = $\; $\ = "\x0a"; # set output line separator # get a list of found tags my @tags; if ($exifTool) { # sort tags by group to make it a bit prettier @tags = $exifTool->GetTagList($info, 'Group0'); } else { @tags = sort keys %$info; } # # Write information to file (with filename "TESTNAME_#.failed") # foreach (@tags) { my $val = formatValue($$info{$_}); # (no "\n" needed since we set the output line separator above) if ($exifTool) { my @groups = $exifTool->GetGroup($_); my $groups = join ', ', @groups[0..($topGroup||2)]; my $tagID = $exifTool->GetTagID($_); my $desc = $exifTool->GetDescription($_); print FILE "[$groups] $tagID - $desc: $val"; } else { print FILE "$_: $val"; } } close(FILE); $\ = $oldSep; # restore output line separator # # Compare the output file to the output from the standard test (TESTNAME_#.out) # return testCompare($stdfile, $testfile, $testnum); } #------------------------------------------------------------------------------ # Test writing feature by writing specified information to JPEG file # Inputs: 0) list reference to lists of SetNewValue arguments # 1) test name, 2) test number, 3) optional source file name, # 4) true to only check tags which were written (or list ref for tags to check) # 5) flag set if nothing is expected to change in the output file # Returns: 1 if check passed sub writeCheck($$$;$$$) { my ($writeInfo, $testname, $testnum, $srcfile, $onlyWritten, $same) = @_; $srcfile or $srcfile = "t/images/$testname.jpg"; my ($ext) = ($srcfile =~ /\.(.+?)$/); my $testfile = "t/${testname}_${testnum}_failed.$ext"; my $exifTool = new Image::ExifTool; my @tags; if (ref $onlyWritten eq 'ARRAY') { @tags = @$onlyWritten; undef $onlyWritten; } foreach (@$writeInfo) { $exifTool->SetNewValue(@$_); push @tags, $$_[0] if $onlyWritten; } unlink $testfile; my $ok = writeInfo($exifTool, $srcfile, $testfile, $same); my $info = $exifTool->ImageInfo($testfile,{Duplicates=>1,Unknown=>1},@tags); my $rtnVal = check($exifTool, $info, $testname, $testnum); return 0 unless $ok and $rtnVal; unlink $testfile; return 1; } #------------------------------------------------------------------------------ # Call Image::ExifTool::WriteInfo with error checking # Inputs: 0) ExifTool ref, 1) src file, 2) dst file, 3) true if nothing should change # Return: true on success sub writeInfo($$;$$) { my ($exifTool, $src, $dst, $same) = @_; # erase temporary file created by WriteInfo() if no destination file is given # (may be left over from previous crashed tests) unlink "${src}_exiftool_tmp" if not defined $dst and not ref $src; my $result = $exifTool->WriteInfo($src, $dst); my $err = ''; $err .= " Error: WriteInfo() returned $result\n" if $result != ($same ? 2 : 1); my $info = $exifTool->GetInfo('Warning', 'Error'); foreach (sort keys %$info) { my $tag = Image::ExifTool::GetTagName($_); $err .= " $tag: $$info{$_}\n"; } return 1 unless $err; warn "\n$err"; return 0; } #------------------------------------------------------------------------------ # Test verbose output # Inputs: 0) test name, 1) test number, 2) Input file, 3) verbose level # Returns: true if test passed sub testVerbose($$$$) { my ($testname, $testnum, $infile, $verbose) = @_; my $testfile = "t/${testname}_$testnum"; # capture verbose output by redirecting STDOUT return 0 unless open(TMPFILE,">$testfile.tmp"); ImageInfo($infile, { Verbose => $verbose, TextOut => \*TMPFILE }); close(TMPFILE); # re-write output file to change newlines to be same as standard test file # (if I was a Perl guru, maybe I would know a better way to do this) open(TMPFILE,"$testfile.tmp"); open(TESTFILE,">$testfile.failed"); my $oldSep = $\; $\ = "\x0a"; # set output line separator while (<TMPFILE>) { chomp; # remove existing newline print TESTFILE $_; # re-write line using \x0a for newlines } $\ = $oldSep; # restore output line separator close(TESTFILE); unlink("$testfile.tmp"); return testCompare("$testfile.out","$testfile.failed",$testnum); } 1; #end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Torrent.t��������������������������������������������������������������������000644 �000765 �000024 �00000001306 12210362440 016442� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Torrent.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Torrent; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Torrent'; my $testnum = 1; # test 2: Extract information from a BitTorrent file { my $exifTool = new Image::ExifTool; ++$testnum; my $info = $exifTool->ImageInfo('t/images/Torrent.torrent'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Torrent_2.out����������������������������������������������������������������000644 �000765 �000024 �00000004413 12546457277 017262� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Torrent.torrent [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 837 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2013:09:06 11:36:26-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:55-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: Torrent [File, File, Image] FileTypeExtension - File Type Extension: torrent [File, File, Image] MIMEType - MIME Type: application/x-bittorrent [Torrent, Torrent, Document] announce - Announce: udp://tracker.bogus.com:80/announce [Torrent, Torrent, Document] announce-list1 - Announce List 1: udp://tracker.bogus.com:80/announce [Torrent, Torrent, Document] announce-list2 - Announce List 2: udp://tracker.bogus2.com:80/announce [Torrent, Torrent, Document] announce-list3 - Announce List 3: udp://tracker.bogus3.com:80/announce [Torrent, Torrent, Document] comment - Comment: Test BitTorrent description file [Torrent, Torrent, Document] created by - Creator: uTorrent/1840 [Torrent, Torrent, Time] creation date - Create Date: 2013:09:06 11:33:59-04:00 [Torrent, Torrent, Document] encoding - Encoding: UTF-8 [Torrent, Torrent, Document] length1 - File 1 Length: 3.5 MB [Torrent, Torrent, Document] path1 - File 1 Path: exiftool-9.35.zip [Torrent, Torrent, Document] length2 - File 2 Length: 3.5 MB [Torrent, Torrent, Document] path2 - File 2 Path: Image-ExifTool-9.35.tar.gz [Torrent, Torrent, Document] length3 - File 3 Length: 2.3 MB [Torrent, Torrent, Document] path3 - File 3 Path: ExifTool-9.35.dmg [Torrent, Torrent, Document] length4 - File 4 Length: 11 kB [Torrent, Torrent, Document] path4 - File 4 Path: docs/README [Torrent, Torrent, Document] name - Name: Image-ExifTool-9.35 [Torrent, Torrent, Document] piece length - Piece Length: 1048576 [Torrent, Torrent, Document] pieces - Pieces: (Binary data 200 bytes) [Torrent, Torrent, Document] url-list1 - URL List 1: http://seed.bogus.com/ [Torrent, Torrent, Document] url-list2 - URL List 2: http://seed.bogus2.com/ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Unknown.t��������������������������������������������������������������������000644 �000765 �000024 �00000001624 11344234313 016453� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Unknown.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Unknown; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Unknown'; my $testnum = 1; # test 2: Extract information from Unknown.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Unknown.jpg', {Unknown => 1}); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Write some new information { ++$testnum; my @writeInfo = ( ['FocalLength',200] ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum); print "ok $testnum\n"; } # end ������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Unknown_2.out����������������������������������������������������������������000644 �000765 �000024 �00000013002 12546457277 017256� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Unknown.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 7.0 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:06:16 10:57:05-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:41-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: [EXIF, IFD0, Camera] 271 - Make: Rollei [EXIF, IFD0, Camera] 272 - Camera Model Name: dk4010 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: RO-dk4010 Ver 1.00 [EXIF, IFD0, Time] 306 - Modify Date: 2005:08:10 06:24:38 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/180 [EXIF, ExifIFD, Image] 33437 - F Number: 2.8 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 125 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2005:08:10 06:24:38 [EXIF, ExifIFD, Time] 36868 - Create Date: 2005:08:10 06:24:38 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 4 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/208 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 3.1 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.8 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 57.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Time] 37520 - Sub Sec Time: 331 [EXIF, ExifIFD, Time] 37521 - Sub Sec Time Original: 331 [EXIF, ExifIFD, Time] 37522 - Sub Sec Time Digitized: 331 [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2272 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1704 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 1.3 [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: Low gain up [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 6922 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, MakerUnknown, Camera] 1 - Unknown 0x0001: ADM0000037036 [MakerNotes, MakerUnknown, Camera] 4 - Unknown 0x0004: AE.. ^;k...MULTIoo/..................;[...] [MakerNotes, MakerUnknown, Camera] 6 - Unknown 0x0006: AFÿÿ...Û.ÿÿgò.rá.ýHî;ŸÍ.~4.". †.ˆ.Û.Û.Û.÷[...] [MakerNotes, MakerUnknown, Camera] 8 - Unknown 0x0008: WB.|ãÿÿÿ<.dCÿÿÿÄ.­..„.(.„.;n[...] [MakerNotes, MakerUnknown, Camera] 10 - Unknown 0x000a: ..;..SDSD512€...[...] [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [PrintIM, PrintIM, Printing] 1 - Print IM 0x0001: 0x00160016 [PrintIM, PrintIM, Printing] 2 - Print IM 0x0002: 0x00000001 [PrintIM, PrintIM, Printing] 256 - Print IM 0x0100: 0x00000005 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0x000000ff [PrintIM, PrintIM, Printing] 258 - Print IM 0x0102: 0x00000083 [PrintIM, PrintIM, Printing] 261 - Print IM 0x0105: 0x00000083 [PrintIM, PrintIM, Printing] 262 - Print IM 0x0106: 0x00000083 [Composite, Composite, Image] Aperture - Aperture: 2.8 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/180 [Composite, Composite, Time] SubSecCreateDate - Create Date: 2005:08:10 06:24:38.331 [Composite, Composite, Time] SubSecDateTimeOriginal - Date/Time Original: 2005:08:10 06:24:38.331 [Composite, Composite, Time] SubSecModifyDate - Modify Date: 2005:08:10 06:24:38.331 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] FocalLength35efl - Focal Length: 57.0 mm [Composite, Composite, Image] LightValue - Light Value: 10.1 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Unknown_3.out����������������������������������������������������������������000644 �000765 �000024 �00000013006 12546457277 017263� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Unknown_3_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 7.0 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:57-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:57-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:57-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: [EXIF, IFD0, Camera] 271 - Make: Rollei [EXIF, IFD0, Camera] 272 - Camera Model Name: dk4010 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: RO-dk4010 Ver 1.00 [EXIF, IFD0, Time] 306 - Modify Date: 2005:08:10 06:24:38 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/180 [EXIF, ExifIFD, Image] 33437 - F Number: 2.8 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 125 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2005:08:10 06:24:38 [EXIF, ExifIFD, Time] 36868 - Create Date: 2005:08:10 06:24:38 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 4 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/208 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 3.1 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.8 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 200.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Time] 37520 - Sub Sec Time: 331 [EXIF, ExifIFD, Time] 37521 - Sub Sec Time Original: 331 [EXIF, ExifIFD, Time] 37522 - Sub Sec Time Digitized: 331 [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 2272 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 1704 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 1.3 [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41991 - Gain Control: Low gain up [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 6922 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, MakerUnknown, Camera] 1 - Unknown 0x0001: ADM0000037036 [MakerNotes, MakerUnknown, Camera] 4 - Unknown 0x0004: AE.. ^;k...MULTIoo/..................;[...] [MakerNotes, MakerUnknown, Camera] 6 - Unknown 0x0006: AFÿÿ...Û.ÿÿgò.rá.ýHî;ŸÍ.~4.". †.ˆ.Û.Û.Û.÷[...] [MakerNotes, MakerUnknown, Camera] 8 - Unknown 0x0008: WB.|ãÿÿÿ<.dCÿÿÿÄ.­..„.(.„.;n[...] [MakerNotes, MakerUnknown, Camera] 10 - Unknown 0x000a: ..;..SDSD512€...[...] [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [PrintIM, PrintIM, Printing] 1 - Print IM 0x0001: 0x00160016 [PrintIM, PrintIM, Printing] 2 - Print IM 0x0002: 0x00000001 [PrintIM, PrintIM, Printing] 256 - Print IM 0x0100: 0x00000005 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0x000000ff [PrintIM, PrintIM, Printing] 258 - Print IM 0x0102: 0x00000083 [PrintIM, PrintIM, Printing] 261 - Print IM 0x0105: 0x00000083 [PrintIM, PrintIM, Printing] 262 - Print IM 0x0106: 0x00000083 [Composite, Composite, Image] Aperture - Aperture: 2.8 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/180 [Composite, Composite, Time] SubSecCreateDate - Create Date: 2005:08:10 06:24:38.331 [Composite, Composite, Time] SubSecDateTimeOriginal - Date/Time Original: 2005:08:10 06:24:38.331 [Composite, Composite, Time] SubSecModifyDate - Modify Date: 2005:08:10 06:24:38.331 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Image] LightValue - Light Value: 10.1 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 200.0 mm ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/VCard.t����������������������������������������������������������������������000644 �000765 �000024 �00000001373 12521262436 016021� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/VCard.t". BEGIN { $| = 1; print "1..3\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::VCard; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'VCard'; my $testnum = 1; # tests 2-3: Extract information from test files { my $exifTool = new Image::ExifTool; my $ext; foreach $ext (qw(vcf ics)) { ++$testnum; my $info = $exifTool->ImageInfo("t/images/VCard.$ext"); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } } # end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/VCard_2.out������������������������������������������������������������������000644 �000765 �000024 �00000007220 12546457277 016623� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: VCard.vcf [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1689 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:06 14:38:35-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:05:03 07:59:14-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:06 14:39:17-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: VCard [File, File, Image] FileTypeExtension - File Type Extension: vcf [File, File, Image] MIMEType - MIME Type: text/vcard [VCard, VCard, Document] Version - VCard Version: 3.0 [VCard, VCard, Document] Prodid - Software: -//Apple Inc.//Mac OS X 10.10.2//EN [VCard, VCard, Author] N - Name: Harvey;Phil;;; [VCard, VCard, Author] Fn - Formatted Name: Phil Harvey [VCard, VCard, Document] Org - Organization: ExifTool; [VCard, VCard, Document] EmailInternetHomePref - Email Internet Home Pref: someone@home.email [VCard, VCard, Document] EmailInternetWork - Email Internet Work: someone@work.email [VCard, Item1, Document] EmailInternet - Email Internet: someone@other.email [VCard, Item1, Document] X-ablabel - AB Label: Other [VCard, VCard, Document] TelCellVoicePref - Telephone Cell Voice Pref: 555-0000 [VCard, VCard, Document] TelIphoneCellVoice - Telephone Iphone Cell Voice: 555-1111 [VCard, VCard, Document] TelHomeVoice - Telephone Home Voice: 555-2222 [VCard, VCard, Document] TelWorkVoice - Telephone Work Voice: 555-3333 [VCard, VCard, Document] TelMain - Telephone Main: 555-4444 [VCard, VCard, Document] TelWorkFax - Telephone Work Fax: 555-5555 [VCard, VCard, Document] TelPager - Telephone Pager: 555-6666 [VCard, VCard, Document] TelOtherVoice - Telephone Other Voice: 555-7777 [VCard, VCard, Document] TelOtherVoice - Telephone Other Voice: 555-8888 [VCard, VCard, Location] AdrHomePref - Address Home Pref: ;;Home St.;City;ON;K0K0K0;Canada [VCard, VCard, Location] AdrWork - Address Work: ;;Work St.;City;ON;K0K0K0;Canada [VCard, VCard, Location] AdrOther - Address Other: ;;Other Rd.;City;ON;K0K0K0;Canada [VCard, VCard, Location] AdrOtherGeo - Address Other Geolocation: 12.3457, 78.910 [VCard, VCard, Document] AdrOtherLabel - Address Other Label: Test;Label [VCard, VCard, Document] Note - Note: This is "a", comma, \backslash;newline;note! [VCard, VCard, Document] Note-fr - Note (fr): Oui! [VCard, Item2, Document] UrlPref - URL Pref: http://exiftool.com [VCard, Item2, Document] X-ablabel - AB Label: HomePage [VCard, VCard, Time] Bday - Birthday: 1900:01:02 [VCard, VCard, Document] X-aimHomePref - AIM Home Pref: AIMName [VCard, Item3, Document] X-icqPref - ICQ Pref: ICQName [VCard, Item3, Document] X-ablabel - AB Label: Other [VCard, VCard, Document] ImppHomePref - IMPP Home Pref: aim:AIMName [VCard, VCard, Document] ImppWork - IMPP Work: xmpp:FacebookName [VCard, Item4, Document] Impp - IMPP: aim:ICQName [VCard, Item4, Document] X-ablabel - AB Label: Other [VCard, VCard, Preview] PhotoJpeg - Photo Jpeg: (Binary data 18 bytes) [VCard, VCard, Document] X-abuid - AB UID: EBAC8BE8-E695-457F-AE4D-E076ECEEA002:ABPerson [VCard, VCard, Document] Version - VCard Version: 3.0 [VCard, VCard, Author] Fn - Formatted Name: VCard Test [VCard, VCard, Document] LabelWork - Label Work: 12 Cucumber St.;;SaladVille ON;;Canada [VCard, VCard, Document] LogoImageJpeg - Logo Image Jpeg: (Binary data 18 bytes) [VCard, VCard, Document] SoundOgg - Sound Ogg: http://example.com/sound.ogg [VCard, VCard, Document] Note - Note: This sample mixes formats from various vCard versions ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/VCard_3.out������������������������������������������������������������������000644 �000765 �000024 �00000014746 12546457277 016637� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: VCard.ics [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 2.2 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:05:03 12:36:08-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:05:03 12:53:14-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:05:03 12:36:08-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: ICS [File, File, Image] FileTypeExtension - File Type Extension: ics [File, File, Image] MIMEType - MIME Type: text/calendar [VCard, VCalendar, Document] Calscale - Calendar Scale: GREGORIAN [VCard, VCalendar, Document] Version - VCalendar Version: 2.0 [VCard, VCalendar, Document] Method - Method: PUBLISH [VCard, VCalendar, Document] X-wr-calname - Wr-calname: Calendar [VCard, VCalendar, Document] X-wr-timezone - Wr-timezone: America/Toronto [VCard, VCalendar, Document] X-apple-calendar-color - Apple-calendar-color: #CC73E1 [VCard, Timezone1, Time] Tzid - Timezone ID: Canada/Eastern [VCard, Timezone1, Time] DaylightTzoffsetfrom - Daylight Timezone Offset From: -0500 [VCard, Timezone1, Time] DaylightRrule - Daylight Recurrence Rule: FREQ=YEARLY;BYMONTH=3;BYDAY=2SU [VCard, Timezone1, Time] DaylightDtstart - Daylight Date Time Start: 2007:03:11 02:00:00 [VCard, Timezone1, Time] DaylightTzname - Daylight Timezone Name: EDT [VCard, Timezone1, Time] DaylightTzoffsetto - Daylight Timezone Offset To: -0400 [VCard, Timezone1, Time] StandardTzoffsetfrom - Standard Timezone Offset From: -0400 [VCard, Timezone1, Time] StandardRrule - Standard Recurrence Rule: FREQ=YEARLY;BYMONTH=11;BYDAY=1SU [VCard, Timezone1, Time] StandardDtstart - Standard Date Time Start: 2007:11:04 02:00:00 [VCard, Timezone1, Time] StandardTzname - Standard Timezone Name: EST [VCard, Timezone1, Time] StandardTzoffsetto - Standard Timezone Offset To: -0500 [VCard, Timezone2, Time] Tzid - Timezone ID: America/Toronto [VCard, Timezone2, Time] DaylightTzoffsetfrom - Daylight Timezone Offset From: -0500 [VCard, Timezone2, Time] DaylightRrule - Daylight Recurrence Rule: FREQ=YEARLY;BYMONTH=3;BYDAY=2SU [VCard, Timezone2, Time] DaylightDtstart - Daylight Date Time Start: 2007:03:11 02:00:00 [VCard, Timezone2, Time] DaylightTzname - Daylight Timezone Name: EDT [VCard, Timezone2, Time] DaylightTzoffsetto - Daylight Timezone Offset To: -0400 [VCard, Timezone2, Time] StandardTzoffsetfrom - Standard Timezone Offset From: -0400 [VCard, Timezone2, Time] StandardRrule - Standard Recurrence Rule: FREQ=YEARLY;BYMONTH=11;BYDAY=1SU [VCard, Timezone2, Time] StandardDtstart - Standard Date Time Start: 2007:11:04 02:00:00 [VCard, Timezone2, Time] StandardTzname - Standard Timezone Name: EST [VCard, Timezone2, Time] StandardTzoffsetto - Standard Timezone Offset To: -0500 [VCard, Event1, Time] Created - Date Created: 2012:08:07 15:27:46Z [VCard, Event1, Document] Uid - UID: 5E9B5BEF-C3D9-452C-AB1A-613510B5BA52 [VCard, Event1, Time] Rrule - Recurrence Rule: FREQ=WEEKLY;INTERVAL=1;BYDAY=MO;WKST=SU [VCard, Event1, Time] Dtend - Date Time End: 2013:09:16 13:30:00 [VCard, Event1, Time] DtendTzid - Date Time End Timezone ID: Canada/Eastern [VCard, Event1, Time] Exdate - Exception Date Times: 2014:12:01 12:30:00 [VCard, Event1, Time] ExdateTzid - Exception Date Times Timezone ID: Canada/Eastern [VCard, Event1, Time] Exdate - Exception Date Times: 2015:04:27 12:30:00 [VCard, Event1, Time] ExdateTzid - Exception Date Times Timezone ID: Canada/Eastern [VCard, Event1, Document] Transp - Time Transparency: OPAQUE [VCard, Event1, Document] Summary - Summary: Group meeting [VCard, Event1, Time] Dtstart - Date Time Start: 2013:09:16 12:30:00 [VCard, Event1, Time] DtstartTzid - Date Time Start Timezone ID: Canada/Eastern [VCard, Event1, Time] Dtstamp - Date Time Stamp: 2015:04:20 15:55:18Z [VCard, Event1, Location] Location - Location: 261 [VCard, Event1, Document] Sequence - Sequence Number: 0 [VCard, Event1, Document] Alarm1X-wr-alarmuid - Alarm 1 Wr-alarmuid: C41775A2-C98F-456C-BB8F-8E6FB15A554F [VCard, Event1, Document] Alarm1Uid - Alarm 1 UID: C41775A2-C98F-456C-BB8F-8E6FB15A554F [VCard, Event1, Document] Alarm1Trigger - Alarm 1 Trigger: -PT5M [VCard, Event1, Document] Alarm1Attach - Alarm 1 Attachment: Basso [VCard, Event1, Document] Alarm1X-apple-local-default-alarm - Alarm 1 Apple-local-default-alarm: TRUE [VCard, Event1, Document] Alarm1Action - Alarm 1 Action: AUDIO [VCard, Event1, Document] Alarm1X-apple-default-alarm - Alarm 1 Apple-default-alarm: TRUE [VCard, Event1, Document] Alarm2X-wr-alarmuid - Alarm 2 Wr-alarmuid: 70894F68-E6F8-4C00-A737-73D4CDCF0525 [VCard, Event1, Document] Alarm2Uid - Alarm 2 UID: 70894F68-E6F8-4C00-A737-73D4CDCF0525 [VCard, Event1, Document] Alarm2Trigger - Alarm 2 Trigger: -PT5M [VCard, Event1, Document] Alarm2X-apple-default-alarm - Alarm 2 Apple-default-alarm: TRUE [VCard, Event1, Document] Alarm2Attach - Alarm 2 Attachment: Basso [VCard, Event1, Document] Alarm2Action - Alarm 2 Action: AUDIO [VCard, Event2, Time] Created - Date Created: 2012:08:07 15:27:46Z [VCard, Event2, Document] Uid - UID: 5E9B5BEF-C3D9-452C-AB1A-613510B5BA52 [VCard, Event2, Time] Dtend - Date Time End: 2013:11:25 13:30:00 [VCard, Event2, Time] DtendTzid - Date Time End Timezone ID: Canada/Eastern [VCard, Event2, Document] Transp - Time Transparency: OPAQUE [VCard, Event2, Document] Summary - Summary: Group meeting [VCard, Event2, Time] Dtstart - Date Time Start: 2013:11:25 12:30:00 [VCard, Event2, Time] DtstartTzid - Date Time Start Timezone ID: Canada/Eastern [VCard, Event2, Time] Dtstamp - Date Time Stamp: 2015:04:08 14:29:41Z [VCard, Event2, Location] Location - Location: 501 [VCard, Event2, Document] Sequence - Sequence Number: 0 [VCard, Event2, Document] Recurrence-id - Recurrence ID: 20131125T123000 [VCard, Event2, Time] Recurrence-idTzid - Recurrence ID Timezone ID: Canada/Eastern [VCard, Event2, Document] Alarm1X-wr-alarmuid - Alarm 1 Wr-alarmuid: C514D9BB-BDB3-4A5F-B580-9287459DA35C [VCard, Event2, Document] Alarm1Uid - Alarm 1 UID: C514D9BB-BDB3-4A5F-B580-9287459DA35C [VCard, Event2, Document] Alarm1Trigger - Alarm 1 Trigger: -PT5M [VCard, Event2, Document] Alarm1Attach - Alarm 1 Attachment: Basso [VCard, Event2, Document] Alarm1X-apple-local-default-alarm - Alarm 1 Apple-local-default-alarm: TRUE [VCard, Event2, Document] Alarm1Action - Alarm 1 Action: AUDIO [VCard, Event2, Document] Alarm1X-apple-default-alarm - Alarm 1 Apple-default-alarm: TRUE ��������������������������Image-ExifTool-10.10/t/Vorbis.t���������������������������������������������������������������������000644 �000765 �000024 �00000001266 11327642463 016274� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Vorbis.t". BEGIN { $| = 1; print "1..2\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::Vorbis; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'Vorbis'; my $testnum = 1; # test 2: Extract information from test file { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/Vorbis.ogg'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Vorbis_2.out�����������������������������������������������������������������000644 �000765 �000024 �00000003530 12546457277 017070� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Vorbis.ogg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 5.2 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:11:10 21:57:27-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:57-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: OGG [File, File, Image] FileTypeExtension - File Type Extension: ogg [File, File, Image] MIMEType - MIME Type: audio/x-ogg [Vorbis, Vorbis, Audio] 0 - Vorbis Version: 0 [Vorbis, Vorbis, Audio] 4 - Audio Channels: 2 [Vorbis, Vorbis, Audio] 5 - Sample Rate: 22050 [Vorbis, Vorbis, Audio] 13 - Nominal Bitrate: 32 kbps [Vorbis, Vorbis, Audio] vendor - Vendor: AO; aoTuV b4b [20051117] (based on Xiph.Org's libVorbis) [Vorbis, Vorbis, Audio] COVERARTMIME - Cover Art MIME Type: image/jpeg [Vorbis, Vorbis, Preview] COVERART - Cover Art: (Binary data 1351 bytes) [Vorbis, Vorbis, Audio] MEDIAJUKEBOX:TOOL NAME - Mediajukebox Tool Name: Media Center [Vorbis, Vorbis, Audio] MEDIAJUKEBOX:TOOL VERSION - Mediajukebox Tool Version: 11.1.197 [Vorbis, Vorbis, Audio] GENRE - Genre: Funk [Vorbis, Vorbis, Audio] MEDIAJUKEBOX:DATE - Mediajukebox Date: 38718 [Vorbis, Vorbis, Time] DATE - Date: 2006 [Vorbis, Vorbis, Audio] TITLE - Title: A 4s sample for testing embedded cover art [Vorbis, Vorbis, Audio] TRACKNUMBER - Track Number: 1 [Vorbis, Vorbis, Audio] COMMENT - Comment: a nice comment [Vorbis, Vorbis, Author] ARTIST - Artist: Who Knows [Vorbis, Vorbis, Audio] ALBUM - Album: The Test Album [Composite, Composite, Other] Duration - Duration: 1.34 s (approx) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer.t���������������������������������������������������������������������000644 �000765 �000024 �00000104121 12572064276 016301� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/Writer.t". BEGIN { $| = 1; print "1..56\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; $loaded = 1; print "ok 1\n"; ######################### End of black magic. use t::TestLib; my $testname = 'Writer'; my $testnum = 1; my $testfile; # tests 2/3: Test writing new comment to JPEG file and removing it again { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile1 = "t/${testname}_${testnum}_failed.jpg"; -e $testfile1 and unlink $testfile1; $exifTool->SetNewValue('Comment','New comment in JPG file'); writeInfo($exifTool, 't/images/Canon.jpg', $testfile1); my $info = ImageInfo($testfile1); print 'not ' unless check($info, $testname, $testnum); print "ok $testnum\n"; ++$testnum; my $testfile2 = "t/${testname}_${testnum}_failed.jpg"; -e $testfile2 and unlink $testfile2; $exifTool->SetNewValue('Comment'); writeInfo($exifTool, $testfile1, $testfile2); if (binaryCompare($testfile2, 't/images/Canon.jpg')) { unlink $testfile1; unlink $testfile2; } else { print 'not '; } print "ok $testnum\n"; } # tests 4/5: Test editing a TIFF in memory then changing it back again { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Duplicates => 1, Unknown => 1); my $newtiff; $exifTool->SetNewValue(Headline => 'A different headline'); $exifTool->SetNewValue(ImageDescription => 'Modified TIFF'); $exifTool->SetNewValue(Keywords => 'another keyword', AddValue => 1); $exifTool->SetNewValue('xmp:SupplementalCategories' => 'new XMP info'); writeInfo($exifTool, 't/images/ExifTool.tif', \$newtiff); my $info = $exifTool->ImageInfo(\$newtiff); unless (check($exifTool, $info, $testname, $testnum)) { $testfile = "t/${testname}_${testnum}_failed.tif"; open(TESTFILE,">$testfile"); binmode(TESTFILE); print TESTFILE $newtiff; close(TESTFILE); print 'not '; } print "ok $testnum\n"; ++$testnum; my $newtiff2; $exifTool->SetNewValue(); # clear all the changes $exifTool->SetNewValue(Headline => 'headline'); $exifTool->SetNewValue(ImageDescription => 'The picture caption'); $exifTool->SetNewValue(Keywords => 'another keyword', DelValue => 1); $exifTool->SetNewValue(SupplementalCategories); writeInfo($exifTool, \$newtiff, \$newtiff2); $testfile = "t/${testname}_${testnum}_failed.tif"; open(TESTFILE,">$testfile"); binmode(TESTFILE); print TESTFILE $newtiff2; close(TESTFILE); if (binaryCompare($testfile,'t/images/ExifTool.tif')) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 6/7: Test rewriting a JPEG file then changing it back again { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Duplicates => 1, Unknown => 1); my $testfile1 = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile1; $exifTool->SetNewValue(DateTimeOriginal => '2005:01:01 00:00:00', Group => 'IFD0'); $exifTool->SetNewValue(Contrast => '+2', Group => 'XMP'); $exifTool->SetNewValue(ExposureCompensation => 999, Group => 'EXIF'); $exifTool->SetNewValue(LightSource => 'cloud'); $exifTool->SetNewValue('EXIF:Flash' => '0x1', Type => 'ValueConv'); $exifTool->SetNewValue('Orientation#' => 3); $exifTool->SetNewValue(FocalPlaneResolutionUnit => 'mm'); $exifTool->SetNewValue(Category => 'IPTC test'); $exifTool->SetNewValue(Description => 'New description'); $exifTool->SetNewValue(TimeCodes => '02:53:49:07 2009-11-19T12:38:35:21-03:00'); writeInfo($exifTool, 't/images/Canon.jpg', $testfile1); my $info = $exifTool->ImageInfo($testfile1); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; ++$testnum; $exifTool->SetNewValue(); $exifTool->SetNewValue(DateTimeOriginal => '2003:12:04 06:46:52'); $exifTool->SetNewValue(Contrast => undef, Group => 'XMP'); $exifTool->SetNewValue(ExposureCompensation => 0, Group => 'EXIF'); $exifTool->SetNewValue('LightSource'); $exifTool->SetNewValue('EXIF:Flash' => '0x0', Type => 'ValueConv'); $exifTool->SetNewValue('Orientation#' => 1); $exifTool->SetNewValue(FocalPlaneResolutionUnit => 'in'); $exifTool->SetNewValue('Category'); $exifTool->SetNewValue('Description'); $exifTool->SetNewValue('TimeCodes'); my $image; writeInfo($exifTool, $testfile1, \$image); $exifTool->Options(Composite => 0); $info = $exifTool->ImageInfo(\$image, '-filesize'); my $testfile2 = "t/${testname}_${testnum}_failed.jpg"; if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile1; unlink $testfile2; } else { # save bad file open(TESTFILE,">$testfile2"); binmode(TESTFILE); print TESTFILE $image; close(TESTFILE); print 'not '; } print "ok $testnum\n"; } # test 8: Test rewriting everything in a JPEG file { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Duplicates => 1, Binary => 1, List => 1); my $info = $exifTool->ImageInfo('t/images/Canon.jpg'); my $tag; foreach $tag (keys %$info) { my $group = $exifTool->GetGroup($tag); # eat return values so warnings don't get printed my @rtns = $exifTool->SetNewValue($tag,$info->{$tag},Group=>$group); } undef $info; my $image; writeInfo($exifTool, 't/images/Canon.jpg', \$image); # (must drop Composite tags because their order may change) $exifTool->Options(Unknown => 1, Binary => 0, List => 0, Composite => 0); # (must ignore filesize because it changes as null padding is discarded) $info = $exifTool->ImageInfo(\$image, '-filesize'); $testfile = "t/${testname}_${testnum}_failed.jpg"; if (check($exifTool, $info, $testname, $testnum, 7)) { unlink $testfile; } else { # save bad file open(TESTFILE,">$testfile"); binmode(TESTFILE); print TESTFILE $image; close(TESTFILE); print 'not '; } print "ok $testnum\n"; } # test 9: Test copying over information with SetNewValuesFromFile() # (including a transfer of the ICC_Profile record) { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/Canon.jpg'); $exifTool->SetNewValuesFromFile('t/images/ExifTool.tif', 'ICC_Profile'); $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/Nikon.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 10: Another SetNewValuesFromFile() test { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options('IgnoreMinorErrors' => 1); $exifTool->SetNewValuesFromFile('t/images/Pentax.jpg'); $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/Canon.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # tests 11/12: Try creating something from nothing and removing it again # (also test ListSplit and ListSep options) { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(ListSplit => ';\\s*'); $exifTool->Options(ListSep => ' <<separator>> '); $exifTool->SetNewValue(DateTimeOriginal => '2005:01:19 13:37:22', Group => 'EXIF'); $exifTool->SetNewValue(FileVersion => 12, Group => 'IPTC'); $exifTool->SetNewValue(Contributor => 'Guess who', Group => 'XMP'); $exifTool->SetNewValue(GPSLatitude => q{44 deg 14' 12.25"}, Group => 'GPS'); $exifTool->SetNewValue('Ducky:Quality' => 50); $exifTool->SetNewValue(Keywords => 'this; that'); my $testfile1 = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile1; writeInfo($exifTool, 't/images/Writer.jpg', $testfile1); my $info = $exifTool->ImageInfo($testfile1); my $success = check($exifTool, $info, $testname, $testnum); print 'not ' unless $success; print "ok $testnum\n"; ++$testnum; $exifTool->SetNewValue('DateTimeOriginal'); $exifTool->SetNewValue('FileVersion'); $exifTool->SetNewValue('Contributor'); $exifTool->SetNewValue('GPSLatitude'); $exifTool->SetNewValue('Ducky:Quality'); $exifTool->SetNewValue('Keywords'); my $testfile2 = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile2; writeInfo($exifTool, $testfile1, $testfile2); if (binaryCompare('t/images/Writer.jpg', $testfile2)) { unlink $testfile1 if $success; unlink $testfile2; } else { print 'not '; } print "ok $testnum\n"; } # test 13: Copy tags from CRW file to JPG { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/CanonRaw.crw'); $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/Writer.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 14: Delete all information in a group { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValue('All' => undef, Group => 'MakerNotes'); $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/Canon.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 15: Copy a specific set of tags { ++$testnum; my $exifTool = new Image::ExifTool; my @copyTags = qw(exififd:all -lightSource ifd0:software); # also test new regular expression feature (ExifTool 9.15) push @copyTags, 'comment<${ make ; tr{ ,.}{_}; s{__}{_} } {cool, huh?}'; $exifTool->SetNewValuesFromFile('t/images/Olympus.jpg', @copyTags); $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/Canon.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # tests 16-18: Test SetNewValuesFromFile() order of operations { my @argsList = ( [ 'ifd0:xresolution>xmp:*', 'ifd1:xresolution>xmp:*' ], [ 'ifd1:xresolution>xmp:*', 'ifd0:xresolution>xmp:*' ], [ '*:xresolution', '-ifd0:xresolution', 'xresolution>xmp:*' ], ); my $args; foreach $args (@argsList) { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/GPS.jpg', @$args); $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/Writer.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile, 'xresolution'); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } } # test 19: Test SaveNewValues()/RestoreNewValues() my $testOK; { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValue(ISO => 25); $exifTool->SetNewValue(Sharpness => '+1'); $exifTool->SetNewValue(Artist => 'Phil', Group => 'IFD0'); $exifTool->SetNewValue(Artist => 'Harvey', Group => 'ExifIFD'); $exifTool->SetNewValue(DateTimeOriginal => '2006:03:27 16:25:00'); $exifTool->SetNewValue(Keywords => ['one','two']); $exifTool->SaveNewValues(); $exifTool->SetNewValue(Artist => 'nobody'); $exifTool->SetNewValue(Keywords => 'three'); $exifTool->SetNewValuesFromFile('t/images/FujiFilm.jpg'); $exifTool->RestoreNewValues(); $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/Writer.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { $testOK = 1; } else { print 'not '; } print "ok $testnum\n"; } # test 20/21: Test edit in place (using the file from the last test) { my ($skip, $size); ++$testnum; $skip = ''; if ($testOK) { my $exifTool = new Image::ExifTool; my $newComment = 'This is a new test comment'; $exifTool->SetNewValue(Comment => $newComment); my $ok = writeInfo($exifTool, $testfile); my $info = $exifTool->ImageInfo($testfile, 'Comment'); if ($$info{Comment} and $$info{Comment} eq $newComment and $ok) { $size = -s $testfile; } else { $testOK = 0; print 'not '; } } else { $skip = ' # skip Relies on previous test'; } print "ok $testnum$skip\n"; # test in-place edit of file passed by handle ++$testnum; $skip = ''; if ($testOK) { my $exifTool = new Image::ExifTool; my $shortComment = 'short comment'; $exifTool->SetNewValue(Comment => $shortComment); open FILE, "+<$testfile"; # open test file for update writeInfo($exifTool, \*FILE); close FILE; my $info = $exifTool->ImageInfo($testfile, 'Comment'); if ($$info{Comment} and $$info{Comment} eq $shortComment) { my $newSize = -s $testfile; unless ($newSize < $size) { # test to see if the file got shorter as it should have $testOK = 0; $skip = ' # skip truncate() not supported on this system'; } } else { $testOK = 0; print 'not '; } } else { $skip = ' # skip Relies on previous test'; } print "ok $testnum$skip\n"; } # test 22: Test time shift feature { ++$testnum; my @writeInfo = ( ['DateTimeOriginal' => '1:2', 'Shift' => 1], ['ModifyDate' => '2:1: 3:4', 'Shift' => 1], ['CreateDate' => '200 0', 'Shift' => -1], ['DateCreated' => '20:', 'Shift' => -1], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/XMP.jpg', 1); print "ok $testnum\n"; } # test 23: Test renaming a file from the value of DateTimeOriginal { ++$testnum; my $skip = ''; if (not eval { require POSIX }) { $skip = ' # skip Requires POSIX'; } elsif ($testOK) { my $newfile = "t/${testname}_${testnum}_20060327_failed.jpg"; unlink $newfile; my $exifTool = new Image::ExifTool; $exifTool->Options(DateFormat => "${testname}_${testnum}_%Y%m%d_failed.jpg"); $exifTool->SetNewValuesFromFile($testfile, 'FileName<DateTimeOriginal'); writeInfo($exifTool, $testfile); if (-e $newfile and not -e $testfile) { $testfile = $newfile; } else { $testOK = 0; print 'not '; } } else { $skip = ' # skip Relies on test 21'; } print "ok $testnum$skip\n"; $testOK and unlink $testfile; # erase test file if all tests passed } # test 24: Test redirection with expressions { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/FujiFilm.jpg', 'Comment<ISO=$ISO Aperture=${EXIF:fnumber} Exposure=${shutterspeed}' ); $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/Writer.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile, 'Comment'); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 25/26: Test order of delete operations { my $i; for ($i=0; $i<2; ++$i) { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/Nikon.jpg', 'all:all', '-makernotes:all'); $exifTool->SetNewValue(fnumber => 26) if $i == 1; $exifTool->SetNewValue('exififd:all'); # delete all exifIFD $exifTool->SetNewValue(fnumber => 25) if $i == 0; $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/Canon.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } } # test 27: Check that mandatory EXIF resolution tags get taken from JFIF { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValue('exif:all'); # delete all EXIF $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/ExifTool.jpg', $testfile); $exifTool->SetNewValue(); $exifTool->SetNewValue('exif:datetimeoriginal', '2000:01:02 03:04:05'); my $ok = writeInfo($exifTool, $testfile); $info = $exifTool->ImageInfo($testfile, 'XResolution', 'YResolution', 'DateTimeOriginal'); if (check($exifTool, $info, $testname, $testnum) and $ok) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # tests 28-30: Check cross delete behaviour when deleting tags { my $group; my $exifTool = new Image::ExifTool; $exifTool->SetNewValue('IFD0:ISO',100); $exifTool->SetNewValue('ExifIFD:ISO',200); writeInfo($exifTool, 't/images/Writer.jpg', 't/tmp.jpg'); foreach $group ('EXIF', 'IFD0', 'ExifIFD') { ++$testnum; $exifTool->SetNewValue(); # reset values $exifTool->SetNewValue("$group:ISO"); # delete ISO from specific group $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/tmp.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile, 'FileName', 'ISO'); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } unlink 't/tmp.jpg'; } # test 31: Delete all but EXIF (excluding IFD1) and IPTC information { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValue('*'); $exifTool->SetNewValue('EXIF:*', undef, Replace => 2); $exifTool->SetNewValue('ifd1:all'); $exifTool->SetNewValue('IPTC:*', undef, Replace => 2); $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/ExifTool.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # tests 32-33: Read/Write ICC Profile tags { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(IgnoreMinorErrors => 1); my $hdr = "\0\0\0\x18ADBE\x02\x10\0\0mntrRGB XYZ "; $exifTool->SetNewValue(AsShotICCProfile => $hdr . '<dummy>', Protected => 1); $exifTool->SetNewValue(CurrentICCProfile => $hdr . '<dummy 2>', Protected => 1); $testfile = "t/${testname}_${testnum}_failed.tif"; unlink $testfile; my @tags = qw(ICC_Profile AsShotICCProfile CurrentICCProfile); writeInfo($exifTool, 't/images/ExifTool.tif', $testfile); my $info = $exifTool->ImageInfo($testfile, @tags); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; ++$testnum; my $srcfile = $testfile; $exifTool->SetNewValue(); $exifTool->SetNewValue(ICC_Profile => $hdr . '<another dummy>', Protected => 1); $testfile = "t/${testname}_${testnum}_failed.tif"; unlink $testfile; writeInfo($exifTool, $srcfile, $testfile); $info = $exifTool->ImageInfo($testfile, @tags); if (check($exifTool, $info, $testname, $testnum)) { unlink $srcfile; unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 34: copy list tag to list and non-list tags with different options { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(List => 1); $exifTool->SetNewValuesFromFile('t/images/IPTC.jpg', { Replace => 1 }, 'xmp:subject<filename', 'xmp:subject<iptc:keywords', 'comment<iptc:keywords', { Replace => 0 }, 'xmp:HierarchicalSubject<filename', 'xmp:HierarchicalSubject<iptc:keywords', ); $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/Writer.jpg', $testfile); $info = $exifTool->ImageInfo($testfile, 'xmp:subject', 'comment', 'HierarchicalSubject'); my $err; if (check($exifTool, $info, $testname, $testnum)) { # make sure it was an array reference my $val = $$info{Subject} || ''; my $err; if (ref $val ne 'ARRAY') { $err = "Subject is not an ARRAY: '$val'"; } elsif (@$val != 3) { $err = "Subject does not contain 3 values: '" . join(', ', @$val) . "'"; } if ($err) { warn "\n $err\n"; } else { unlink $testfile; } } else { $err = 1; } print 'not ' if $err; print "ok $testnum\n"; } # test 35: Add back all information after deleting everything { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValue('*'); $exifTool->SetNewValuesFromFile('t/images/ExifTool.jpg', 'all:all', 'icc_profile', 'canonvrd'); $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/ExifTool.jpg', $testfile); $exifTool->Options(Composite => 0); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 36: Test adding and deleting from the same list { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValue('IPTC:Keywords', 'out', DelValue => 1); $exifTool->SetNewValue('IPTC:Keywords', 'in', AddValue => 1); $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/Writer.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile, 'IPTC:all'); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # tests 37-38: Create EXIF file from EXIF block and individual tags { my $i; for ($i=0; $i<2; ++$i) { ++$testnum; my $exifTool = new Image::ExifTool; my @tags; if ($i == 0) { $exifTool->SetNewValuesFromFile('t/images/Sony.jpg', 'EXIF'); $exifTool->Options(PrintConv => 0); @tags = qw(FileSize Compression); } else { $exifTool->SetNewValuesFromFile('t/images/Sony.jpg'); $exifTool->Options(PrintConv => 1, Unknown => 1); } $testfile = "t/${testname}_${testnum}_failed.exif"; unlink $testfile; writeInfo($exifTool, undef, $testfile); my $info = $exifTool->ImageInfo($testfile, @tags); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } } # tests 39-40: Test writing only if the tag didn't already exist { ++$testnum; my @writeInfo = ( [DateTimeOriginal => '', DelValue => 1], [DateTimeOriginal => '1999:99:99 99:99:99'], [XResolution => '', DelValue => 1], [XResolution => '123'], [ResolutionUnit => '', DelValue => 1], [ResolutionUnit => 'cm'], ); my @check = qw(FileName DateTimeOriginal XResolution ResolutionUnit); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/Writer.jpg', \@check); print "ok $testnum\n"; ++$testnum; print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/Canon.jpg', \@check, 1); print "ok $testnum\n"; } # test 41: Test writing Kodak APP3 and Canon CIFF Meta information { ++$testnum; my @writeInfo = ( ['Meta:SerialNumber' => '12345'], ['CIFF:OwnerName' => 'CIFF Write Test'], ); my @check = qw(SerialNumber OwnerName); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/ExifTool.jpg', \@check); print "ok $testnum\n"; } # test 42: Test SetNewValuesFromFile with wildcards { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/ExifTool.jpg', 'ifd0:*<jfif:?resolution'); $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/Writer.jpg', $testfile); $exifTool->Options(Composite => 0); my $info = $exifTool->ImageInfo($testfile, '-file:all'); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 43: Test increment feature EXIF { ++$testnum; my $exifTool = new Image::ExifTool; $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; my @writeInfo = ( [ExposureTime => '1.5', Shift => 1], [SerialNumber => '-9', Shift => -1], # (two negatives make a positive) [MeteringMode => '1', Shift => 0, AddValue => 1], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/Canon.jpg', 1); print "ok $testnum\n"; } # test 44: Test increment feature with XMP { ++$testnum; my $exifTool = new Image::ExifTool; my @writeInfo = ( ['XMP:ApertureValue' => '-0.1', Shift => 1], # increment ['XMP:FNumber' => '28/10', DelValue => 1], # conditional delete ['XMP:DateTimeOriginal' => '3', Shift => 0, AddValue => 1], # shift ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/XMP.xmp', 1); print "ok $testnum\n"; } # test 45: Test writing different EXIF string encoding { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(CharsetEXIF => 'Latin'); my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->SetNewValue(Artist => "P\xc3\xaaro", Group => 'EXIF'); writeInfo($exifTool, 't/images/Writer.jpg', $testfile); $exifTool->Options(CharsetEXIF => undef); my $info = $exifTool->ImageInfo($testfile, 'artist'); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 46: Test writing with wildcards { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->SetNewValue('A*' => '7'); writeInfo($exifTool, 't/images/Writer.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 47: Test various WriteMode settings { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; # Should the tag be written? $exifTool->Options(WriteMode => 'w'); # --- write existing tags only: $exifTool->SetNewValue(ISO => 150); # yes (already exists) $exifTool->SetNewValue(ImageDescription => 'N');# no (doesn't already exist) $exifTool->Options(WriteMode => 'c'); # --- create new tags only: $exifTool->SetNewValue(ApertureValue => 8.0); # no (already exists) $exifTool->SetNewValue(UserComment => 'No'); # no (exists, albeit empty) $exifTool->SetNewValue(Artist => 'Phil'); # yes (doesn't already exist) $exifTool->SetNewValue('XMP:Subject' => 'No'); # no (shouldn't create new group) $exifTool->Options(WriteMode => 'cg'); # --- also create new groups: $exifTool->SetNewValue('IPTC:Keywords' => 'Y'); # yes (should create new group) $exifTool->Options(Composite => 0, FastScan => 2); writeInfo($exifTool, 't/images/Canon.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile, '-time:all'); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # tests 48-50: More WriteMode 'cg' tests, and test AddUserDefinedTags() { ++$testnum; my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; my $exifTool = new Image::ExifTool; $exifTool->Options(WriteMode => 'cg'); $exifTool->SetNewValue('XMP-dc:Title' => 'A'); $exifTool->SetNewValue('XMP:Subject' => 'A'); $exifTool->SetNewValue('XMP:LocationCreated' => '{city=A}'); $exifTool->SetNewValue('XMP:Flash' => '{fired=true}'); $exifTool->SetNewValue('IPTC:Keywords' => 'A'); $exifTool->SetNewValue('IPTC:City' => 'A'); $exifTool->SetNewValue('EXIF:Artist' => 'A'); writeInfo($exifTool, 't/images/Writer.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile, '-time:all', '-filename'); unless (check($exifTool, $info, $testname, $testnum)) { print 'not '; } print "ok $testnum\n"; ++$testnum; my $testfile2 = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile2; $exifTool->SetNewValue(); $exifTool->SetNewValue('XMP-dc:Title' => 'B'); $exifTool->SetNewValue('XMP:Subject' => 'B'); $exifTool->SetNewValue('XMP:LocationCreated' => '{city=B}'); $exifTool->SetNewValue('XMP:Flash' => '{fired=false}'); $exifTool->SetNewValue('IPTC:Keywords' => 'B'); $exifTool->SetNewValue('IPTC:City' => 'B'); $exifTool->SetNewValue('EXIF:Artist' => 'B'); if (writeInfo($exifTool, $testfile, $testfile2, 1)) { unlink $testfile; unlink $testfile2; } else { $info = $exifTool->ImageInfo($testfile2, '-time:all', '-filename'); check($exifTool, $info, $testname, $testnum, $testnum-1); print 'not '; } print "ok $testnum\n"; ++$testnum; $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; Image::ExifTool::AddUserDefinedTags('Image::ExifTool::XMP::dc', test => {} ); $exifTool->SetNewValue(); $exifTool->SetNewValue('XMP-dc:Title' => 'A'); $exifTool->SetNewValue('XMP-dc:Test' => 'B'); writeInfo($exifTool, undef, $testfile); $info = $exifTool->ImageInfo($testfile, 'xmp:all'); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 51: Delete a unknown JPEG APP segment { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValue('APP6:*' => undef); $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; writeInfo($exifTool, 't/images/ExifTool.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 52: Delete groups by family 2 group name { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValue('Image:*'); $exifTool->SetNewValue('Camera:*'); $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; writeInfo($exifTool, 't/images/XMP.xmp', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 53: Exclude groups when copying { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/Canon.jpg', '-Exif:All', '-Canon:All'); $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; writeInfo($exifTool, 't/images/Writer.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 54: Specify multiple groups when copying, excluding a single tag { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/Canon.jpg', 'Exif:Time:All', '-createdate'); $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; writeInfo($exifTool, 't/images/Writer.jpg', $testfile); my $info = $exifTool->ImageInfo($testfile, 'exif:*', '-image:all'); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 55-56: Create and edit EXV file { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValue(Artist => 'me'); $exifTool->SetNewValue(Keywords => ['one','two']); $testfile = "t/${testname}_${testnum}_failed.exv"; unlink $testfile; writeInfo($exifTool, undef, $testfile); my $info = $exifTool->ImageInfo($testfile, 'exif:*', 'iptc:*', 'xmp:*'); unless (check($exifTool, $info, $testname, $testnum)) { print 'not '; } print "ok $testnum\n"; ++$testnum; $exifTool->SetNewValue(); $exifTool->SetNewValue(Artist); $exifTool->SetNewValue(Title => 'Test'); my $testfile2 = "t/${testname}_${testnum}_failed.exv"; unlink $testfile2; writeInfo($exifTool, $testfile, $testfile2); $info = $exifTool->ImageInfo($testfile2, 'exif:*', 'iptc:*', 'xmp:*'); if (check($exifTool, $info, $testname, $testnum)) { unlink $testfile; unlink $testfile2; } else { print 'not '; } print "ok $testnum\n"; } # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_10.out����������������������������������������������������������������000644 �000765 �000024 �00000035514 12567627036 017161� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.01 [File, System, Image] FileName - File Name: Writer_10_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 7.0 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:08:27 11:14:59-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:08:27 11:14:59-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:08:27 11:14:59-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: PENTAX Corporation [EXIF, IFD0, Camera] 272 - Camera Model Name: PENTAX K10D [EXIF, IFD0, Image] 274 - Orientation: Rotate 270 CW [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: K10D Ver 1.30 [EXIF, IFD0, Time] 306 - Modify Date: 2008:03:02 12:01:23 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/100 [EXIF, ExifIFD, Image] 33437 - F Number: 13.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Aperture-priority AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2008:03:02 12:01:23 [EXIF, ExifIFD, Time] 36868 - Create Date: 2008:03:02 12:01:23 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 9 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 0 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 14.0 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: +0.7 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 4.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Off, Did not fire [EXIF, ExifIFD, Camera] 37386 - Focal Length: 10.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 3008 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 2000 [EXIF, InteropIFD, Image] 1 - Interoperability Index: THM - DCF thumbnail file [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, InteropIFD, Image] 4097 - Related Image Width: 3072 [EXIF, InteropIFD, Image] 4098 - Related Image Height: 2048 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3443.946188 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3442.016807 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41989 - Focal Length In 35mm Format: 15 mm [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [EXIF, ExifIFD, Camera] 41996 - Subject Distance Range: Distant [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 2814 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Pentax, Camera] 0 - Pentax Version: 3.0.0.0 [MakerNotes, Pentax, Camera] 1 - Pentax Model Type: 0 [MakerNotes, Pentax, Image] 2 - Preview Image Size: 640x480 [MakerNotes, Pentax, Image] 3 - Preview Image Length: 0 [MakerNotes, Pentax, Image] 4 - Preview Image Start: 2386 [MakerNotes, Pentax, Camera] 5 - Pentax Model ID: K10D [MakerNotes, Pentax, Time] 6 - Date: 2008:03:02 [MakerNotes, Pentax, Time] 7 - Time: 12:01:23 [MakerNotes, Pentax, Camera] 8 - Quality: Better [MakerNotes, Pentax, Camera] 12 - Flash Mode: Off, Did not fire; Internal [MakerNotes, Pentax, Camera] 13 - Focus Mode: AF-S (Focus-priority) [MakerNotes, Pentax, Camera] 14 - AF Point Selected: Center [MakerNotes, Pentax, Camera] 18 - Exposure Time: 1/100 [MakerNotes, Pentax, Camera] 19 - F Number: 13.0 [MakerNotes, Pentax, Camera] 20 - ISO: 100 [MakerNotes, Pentax, Camera] 22 - Exposure Compensation: +0.7 [MakerNotes, Pentax, Camera] 23 - Metering Mode: Multi-segment [MakerNotes, Pentax, Camera] 24 - Auto Bracketing: 0 EV, No Extended Bracket [MakerNotes, Pentax, Camera] 25 - White Balance: Auto [MakerNotes, Pentax, Camera] 26 - White Balance Mode: Auto (Daylight) [MakerNotes, Pentax, Camera] 29 - Focal Length: 10.0 mm [MakerNotes, Pentax, Camera] 31 - Saturation: 0 (normal) [MakerNotes, Pentax, Camera] 32 - Contrast: 0 (normal) [MakerNotes, Pentax, Camera] 33 - Sharpness: 0 (normal) [MakerNotes, Pentax, Time] 34 - World Time Location: Hometown [MakerNotes, Pentax, Time] 35 - Hometown City: Toronto [MakerNotes, Pentax, Time] 36 - Destination City: New York [MakerNotes, Pentax, Time] 37 - Hometown DST: No [MakerNotes, Pentax, Time] 38 - Destination DST: No [MakerNotes, Pentax, Camera] 39 - DSP Firmware Version: 1.30.00.18 [MakerNotes, Pentax, Camera] 40 - CPU Firmware Version: 1.30.00.18 [MakerNotes, Pentax, Camera] 45 - Effective LV: 14.8 [MakerNotes, Pentax, Camera] 50 - Image Editing: None [MakerNotes, Pentax, Camera] 51 - Picture Mode: Aperture Priority; 1/3 EV steps [MakerNotes, Pentax, Camera] 52 - Drive Mode: Single-frame; No Timer; Shutter Button; Single Exposure [MakerNotes, Pentax, Camera] 55 - Color Space: sRGB [MakerNotes, Pentax, Camera] 61 - Data Scaling: 8192 [MakerNotes, Pentax, Camera] 62 - Preview Image Borders: 28 28 0 0 [MakerNotes, Pentax, Camera] 0 - Lens Type: Sigma or Tamron Lens (3 44) [MakerNotes, Pentax, Camera] 64 - Sensitivity Adjust: 0 [MakerNotes, Pentax, Camera] 65 - Image Edit Count: 0 [MakerNotes, Pentax, Camera] 71 - Camera Temperature: 12 C [MakerNotes, Pentax, Camera] 72 - AE Lock: Off [MakerNotes, Pentax, Camera] 73 - Noise Reduction: Off [MakerNotes, Pentax, Camera] 77 - Flash Exposure Comp: 0 [MakerNotes, Pentax, Camera] 79 - Image Tone: Natural [MakerNotes, Pentax, Camera] 0 - SR Result: Stabilized [MakerNotes, Pentax, Camera] 1 - Shake Reduction: On [MakerNotes, Pentax, Camera] 2 - SR Half Press Time: 1.53 s [MakerNotes, Pentax, Camera] 3 - SR Focal Length: 10 mm [MakerNotes, Pentax, Camera] 93 - Shutter Count: 1648 [MakerNotes, Pentax, Camera] 98 - Raw Development Process: 1 (K10D,K200D,K2000,K-m) [MakerNotes, Pentax, Camera] 512 - Black Point: 0 0 0 0 [MakerNotes, Pentax, Camera] 513 - White Point: 13568 8192 8192 9088 [MakerNotes, Pentax, Camera] 0 - Picture Mode 2: Aperture Priority [MakerNotes, Pentax, Camera] 1.1 - Program Line: Normal [MakerNotes, Pentax, Camera] 1.2 - EV Steps: 1/3 EV Steps [MakerNotes, Pentax, Camera] 1.3 - E-Dial In Program: Tv or Av [MakerNotes, Pentax, Camera] 1.4 - Aperture Ring Use: Permitted [MakerNotes, Pentax, Camera] 2 - Flash Options: Wireless (Master) [MakerNotes, Pentax, Camera] 2.1 - Metering Mode 2: Multi-segment [MakerNotes, Pentax, Camera] 3 - AF Point Mode: Select [MakerNotes, Pentax, Camera] 3.1 - Focus Mode 2: AF-S [MakerNotes, Pentax, Camera] 4 - AF Point Selected 2: Center [MakerNotes, Pentax, Camera] 6 - ISO Floor: 100 [MakerNotes, Pentax, Camera] 7 - Drive Mode 2: Single-frame [MakerNotes, Pentax, Camera] 8 - Exposure Bracket Step Size: 0.3 [MakerNotes, Pentax, Camera] 9 - Bracket Shot Number: n/a [MakerNotes, Pentax, Camera] 10 - White Balance Set: Auto [MakerNotes, Pentax, Camera] 10.1 - Multiple Exposure Set: Off [MakerNotes, Pentax, Camera] 13 - Raw And Jpg Recording: RAW+JPEG (PEF, Better) [MakerNotes, Pentax, Camera] 14.1 - Jpg Recorded Pixels: 6 MP [MakerNotes, Pentax, Camera] 16 - Flash Options 2: Wireless (Master) [MakerNotes, Pentax, Camera] 16.1 - Metering Mode 3: Multi-segment [MakerNotes, Pentax, Camera] 17.1 - SR Active: Yes [MakerNotes, Pentax, Camera] 17.2 - Rotation: Rotate 270 CW [MakerNotes, Pentax, Camera] 17.3 - ISO Setting: Manual [MakerNotes, Pentax, Camera] 17.4 - Sensitivity Steps: 1 EV Steps [MakerNotes, Pentax, Camera] 18 - Tv Exposure Time Setting: 1/203 [MakerNotes, Pentax, Camera] 19 - Av Aperture Setting: 12.7 [MakerNotes, Pentax, Camera] 20 - Sv ISO Setting: 100 [MakerNotes, Pentax, Camera] 21 - Base Exposure Compensation: +0.7 [MakerNotes, Pentax, Camera] 0 - AE Exposure Time: 1/101 [MakerNotes, Pentax, Camera] 1 - AE Aperture: 12.9 [MakerNotes, Pentax, Camera] 2 - AE ISO: 100 [MakerNotes, Pentax, Camera] 3 - AE Xv: -0.625 [MakerNotes, Pentax, Camera] 4 - AEB Xv: 0 [MakerNotes, Pentax, Camera] 5 - AE Min Exposure Time: 1/3862 [MakerNotes, Pentax, Camera] 6 - AE Program Mode: Av, B or X [MakerNotes, Pentax, Camera] 8 - AE Aperture Steps: 28 [MakerNotes, Pentax, Camera] 9 - AE Max Aperture: 4.0 [MakerNotes, Pentax, Camera] 10 - AE Max Aperture 2: 4.0 [MakerNotes, Pentax, Camera] 11 - AE Min Aperture: 23 [MakerNotes, Pentax, Camera] 12 - AE Metering Mode: Multi-segment [MakerNotes, Pentax, Camera] 14 - Flash Exposure Comp. Setting: 0 [MakerNotes, Pentax, Camera] 0 - Lens Type: Sigma or Tamron Lens (3 44) [MakerNotes, Pentax, Camera] 0.1 - Auto Aperture: On [MakerNotes, Pentax, Camera] 0.2 - Min Aperture: 22 [MakerNotes, Pentax, Camera] 0.3 - Lens F Stops: 8.5 [MakerNotes, Pentax, Camera] 3 - Min Focus Distance: 0.49-0.50 m [MakerNotes, Pentax, Camera] 3.1 - Focus Range Index: 7 (very far) [MakerNotes, Pentax, Camera] 9 - Lens Focal Length: 10.0 mm [MakerNotes, Pentax, Camera] 10 - Nominal Max Aperture: 4.0 [MakerNotes, Pentax, Camera] 10.1 - Nominal Min Aperture: 23 [MakerNotes, Pentax, Camera] 14.1 - Max Aperture: 3.9 [MakerNotes, Pentax, Camera] 0 - Flash Status: Off [MakerNotes, Pentax, Camera] 1 - Internal Flash Mode: Did not fire, Wireless (Master) [MakerNotes, Pentax, Camera] 2 - External Flash Mode: Off [MakerNotes, Pentax, Camera] 3 - Internal Flash Strength: 18 [MakerNotes, Pentax, Camera] 4 - TTL DA A Up: 0 [MakerNotes, Pentax, Camera] 5 - TTL DA A Down: 0 [MakerNotes, Pentax, Camera] 6 - TTL DA B Up: 0 [MakerNotes, Pentax, Camera] 7 - TTL DA B Down: 0 [MakerNotes, Pentax, Camera] 24.1 - External Flash Guide Number: n/a [MakerNotes, Pentax, Camera] 25 - External Flash Exposure Comp: n/a [MakerNotes, Pentax, Camera] 26 - External Flash Bounce: n/a [MakerNotes, Pentax, Camera] 521 - AE Metering Segments: 13.5 13.6 13.5 13.2 13.6 15.0 13.8 12.9 13.8 16.4 14.4 13.9 14.4 15.8 14.0 16.0 [MakerNotes, Pentax, Camera] 522 - Flash Metering Segments: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [MakerNotes, Pentax, Camera] 523 - Slave Flash Metering Segments: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [MakerNotes, Pentax, Camera] 525 - WB RGGB Levels Daylight: 13600 8192 8192 8765 [MakerNotes, Pentax, Camera] 526 - WB RGGB Levels Shade: 16128 8192 8192 6635 [MakerNotes, Pentax, Camera] 527 - WB RGGB Levels Cloudy: 14560 8192 8192 7782 [MakerNotes, Pentax, Camera] 528 - WB RGGB Levels Tungsten: 8192 8192 8192 20971 [MakerNotes, Pentax, Camera] 529 - WB RGGB Levels Fluorescent D: 17376 8192 8192 8847 [MakerNotes, Pentax, Camera] 530 - WB RGGB Levels Fluorescent N: 14528 8192 8192 10076 [MakerNotes, Pentax, Camera] 531 - WB RGGB Levels Fluorescent W: 13088 8192 8192 12206 [MakerNotes, Pentax, Camera] 532 - WB RGGB Levels Flash: 13632 8192 8192 8601 [MakerNotes, Pentax, Camera] 0 - Pentax Model ID: K10D [MakerNotes, Pentax, Time] 1 - Manufacture Date: 2007:09:13 [MakerNotes, Pentax, Camera] 2 - Production Code: 2.1 [MakerNotes, Pentax, Camera] 4 - Internal Serial Number: 132352 [MakerNotes, Pentax, Camera] 0.1 - Power Source: Body Battery [MakerNotes, Pentax, Camera] 1.1 - Body Battery State: Full [MakerNotes, Pentax, Camera] 1.2 - Grip Battery State: Empty or Missing [MakerNotes, Pentax, Camera] 2 - Body Battery A/D No Load: 173 (7.6V, 51%) [MakerNotes, Pentax, Camera] 3 - Body Battery A/D Load: 168 (7.4V, 47%) [MakerNotes, Pentax, Camera] 4 - Grip Battery A/D No Load: 5 [MakerNotes, Pentax, Camera] 5 - Grip Battery A/D Load: 1 [MakerNotes, Pentax, Camera] 4 - AF Predictor: 4 [MakerNotes, Pentax, Camera] 6 - AF Defocus: 2 [MakerNotes, Pentax, Camera] 7 - AF Integration Time: 0 ms [MakerNotes, Pentax, Camera] 11 - AF Points In Focus: Center (horizontal) [MakerNotes, Pentax, Image] 16 - WB Shift AB: 0 [MakerNotes, Pentax, Image] 17 - WB Shift GM: 0 [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0300 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 10.01 [XMP, XMP-dc, Time] date - Date: 2008:03:02 [XMP, XMP-exif, Image] ComponentsConfiguration - Components Configuration: Y, Cb, Cr, - [XMP, XMP-exif, Camera] FlashFired - Flash Fired: False [XMP, XMP-exif, Camera] FlashFunction - Flash Function: False [XMP, XMP-exif, Camera] FlashMode - Flash Mode: Off [XMP, XMP-exif, Camera] FlashRedEyeMode - Flash Red Eye Mode: False [XMP, XMP-exif, Camera] FlashReturn - Flash Return: No return detection [XMP, XMP-exifEX, Image] InteroperabilityIndex - Interoperability Index: R98 - DCF basic file (sRGB) [XMP, XMP-tiff, Image] BitsPerSample - Bits Per Sample: 8 [XMP, XMP-tiff, Image] Compression - Compression: JPEG (old-style) [XMP, XMP-tiff, Image] ImageLength - Image Height: 8 [XMP, XMP-tiff, Image] ImageWidth - Image Width: 8 [XMP, XMP-tiff, Image] YCbCrPositioning - Y Cb Cr Positioning: Co-sited [XMP, XMP-tiff, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [Composite, Composite, Image] Aperture - Aperture: 13.0 [Composite, Composite, Other] Flash - Flash: Off, Did not fire [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/100 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Camera] LensID - Lens ID: Sigma AF 10-20mm F4-5.6 EX DC [Composite, Composite, Image] LightValue - Light Value: 14.0 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.5 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.020 mm [Composite, Composite, Image] FOV - Field Of View: 100.4 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 10.0 mm (35 mm equivalent: 15.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 0.38 m ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_11.out����������������������������������������������������������������000644 �000765 �000024 �00000004530 12546457277 017161� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Writer_11_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 3.4 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: a22376bee9f94185aa8b4c238763315f [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 36864 - Exif Version: 0230 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2005:01:19 13:37:22 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: Uncalibrated [EXIF, GPS, Location] 0 - GPS Version ID: 2.3.0.0 [EXIF, GPS, Location] 2 - GPS Latitude: 44 deg 14' 12.25" [IPTC, IPTC, Image] 22 - File Version: 12 [IPTC, IPTC, Other] 0 - Envelope Record Version: 4 [IPTC, IPTC, Other] 25 - Keywords: this <<separator>> that [IPTC, IPTC, Other] 0 - Application Record Version: 4 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-dc, Author] contributor - Contributor: Guess who [Ducky, Ducky, Image] 1 - Quality: 50% [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_13.out����������������������������������������������������������������000644 �000765 �000024 �00000023352 12546457277 017166� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.96 [File, System, Image] FileName - File Name: Writer_13_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 5.0 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:05:14 08:24:49-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:05:14 08:24:49-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:05:14 08:24:49-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS DIGITAL REBEL [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/64 [EXIF, ExifIFD, Image] 33437 - F Number: 3.6 [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0230 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:11:10 17:39:26 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37386 - Focal Length: 24.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41992 - Contrast: High [EXIF, ExifIFD, Camera] 41993 - Saturation: High [EXIF, ExifIFD, Camera] 41994 - Sharpness: Hard [EXIF, ExifIFD, Image] 42032 - Owner Name: Phil Harvey [EXIF, ExifIFD, Image] 42033 - Serial Number: 0560018150 [MakerNotes, Canon, Camera] 1 - Macro Mode: Unknown (0) [MakerNotes, Canon, Camera] 2 - Self Timer: Off [MakerNotes, Canon, Camera] 3 - Quality: RAW [MakerNotes, Canon, Camera] 4 - Canon Flash Mode: On [MakerNotes, Canon, Camera] 5 - Continuous Drive: Continuous [MakerNotes, Canon, Camera] 7 - Focus Mode: AI Focus AF [MakerNotes, Canon, Camera] 9 - Record Mode: CRW+THM [MakerNotes, Canon, Camera] 10 - Canon Image Size: Large [MakerNotes, Canon, Camera] 11 - Easy Mode: Manual [MakerNotes, Canon, Camera] 12 - Digital Zoom: Unknown (-1) [MakerNotes, Canon, Camera] 13 - Contrast: +1 [MakerNotes, Canon, Camera] 14 - Saturation: +1 [MakerNotes, Canon, Camera] 15 - Sharpness: +1 [MakerNotes, Canon, Camera] 16 - Camera ISO: n/a [MakerNotes, Canon, Camera] 17 - Metering Mode: Evaluative [MakerNotes, Canon, Camera] 18 - Focus Range: Not Known [MakerNotes, Canon, Camera] 19 - AF Point: Manual AF point selection [MakerNotes, Canon, Camera] 20 - Canon Exposure Mode: Program AE [MakerNotes, Canon, Camera] 22 - Lens Type: n/a [MakerNotes, Canon, Camera] 23 - Max Focal Length: 55 mm [MakerNotes, Canon, Camera] 24 - Min Focal Length: 18 mm [MakerNotes, Canon, Camera] 25 - Focal Units: 1/mm [MakerNotes, Canon, Camera] 26 - Max Aperture: 3.6 [MakerNotes, Canon, Camera] 27 - Min Aperture: 22 [MakerNotes, Canon, Camera] 28 - Flash Activity: 0 [MakerNotes, Canon, Camera] 29 - Flash Bits: E-TTL, Built-in [MakerNotes, Canon, Camera] 36 - Zoom Source Width: 3072 [MakerNotes, Canon, Camera] 37 - Zoom Target Width: 3072 [MakerNotes, Canon, Camera] 41 - Manual Flash Output: n/a [MakerNotes, Canon, Camera] 42 - Color Tone: Normal [MakerNotes, Canon, Image] 1 - Focal Length: 24 mm [MakerNotes, Canon, Image] 2 - Focal Plane X Size: 23.22 mm [MakerNotes, Canon, Image] 3 - Focal Plane Y Size: 15.49 mm [MakerNotes, Canon, Image] 1 - Auto ISO: 100 [MakerNotes, Canon, Image] 2 - Base ISO: 100 [MakerNotes, Canon, Image] 3 - Measured EV: 0.00 [MakerNotes, Canon, Image] 4 - Target Aperture: 3.6 [MakerNotes, Canon, Image] 5 - Target Exposure Time: 1/60 [MakerNotes, Canon, Image] 6 - Exposure Compensation: 0 [MakerNotes, Canon, Image] 7 - White Balance: Auto [MakerNotes, Canon, Image] 8 - Slow Shutter: None [MakerNotes, Canon, Image] 9 - Shot Number In Continuous Burst: 0 [MakerNotes, Canon, Camera] 10 - Optical Zoom Code: n/a [MakerNotes, Canon, Image] 15 - Flash Exposure Compensation: +2/3 [MakerNotes, Canon, Image] 16 - Auto Exposure Bracketing: Off [MakerNotes, Canon, Image] 17 - AEB Bracket Value: 0 [MakerNotes, Canon, Image] 18 - Control Mode: Camera Local Control [MakerNotes, Canon, Image] 19 - Focus Distance Upper: 1.42 m [MakerNotes, Canon, Image] 20 - Focus Distance Lower: 1.19 m [MakerNotes, Canon, Image] 21 - F Number: 3.6 [MakerNotes, Canon, Image] 22 - Exposure Time: 1/64 [MakerNotes, Canon, Image] 23 - Measured EV 2: -0.125 [MakerNotes, Canon, Image] 24 - Bulb Duration: 0 [MakerNotes, Canon, Camera] 26 - Camera Type: EOS Mid-range [MakerNotes, Canon, Image] 27 - Auto Rotate: None [MakerNotes, Canon, Image] 28 - ND Filter: n/a [MakerNotes, Canon, Image] 29 - Self Timer 2: 0 [MakerNotes, Canon, Image] 6 - Canon Image Type: CRW:EOS DIGITAL REBEL CMOS RAW [MakerNotes, Canon, Camera] 7 - Canon Firmware Version: Firmware Version 1.1.1 [MakerNotes, Canon, Image] 8 - File Number: 116-1602 [MakerNotes, Canon, Camera] 9 - Owner Name: Phil Harvey [MakerNotes, Canon, Camera] 12 - Serial Number: 0560018150 [MakerNotes, Canon, Camera] 16 - Canon Model ID: EOS Digital Rebel / 300D / Kiss Digital [MakerNotes, Canon, Camera] 0 - Num AF Points: 7 [MakerNotes, Canon, Camera] 1 - Valid AF Points: 7 [MakerNotes, Canon, Image] 2 - Canon Image Width: 3072 [MakerNotes, Canon, Image] 3 - Canon Image Height: 2048 [MakerNotes, Canon, Camera] 4 - AF Image Width: 3072 [MakerNotes, Canon, Camera] 5 - AF Image Height: 2048 [MakerNotes, Canon, Camera] 6 - AF Area Width: 151 [MakerNotes, Canon, Camera] 7 - AF Area Height: 151 [MakerNotes, Canon, Camera] 8 - AF Area X Positions: 1014 608 0 0 0 -608 -1014 [MakerNotes, Canon, Camera] 9 - AF Area Y Positions: 0 0 -506 0 506 0 0 [MakerNotes, Canon, Camera] 10 - AF Points In Focus: 3 [MakerNotes, Canon, Camera] 19 - Thumbnail Image Valid Area: 0 159 7 112 [MakerNotes, Canon, Camera] 21 - Serial Number Format: Format 1 [MakerNotes, Canon, Image] 3 - Bracket Mode: Off [MakerNotes, Canon, Image] 4 - Bracket Value: 0 [MakerNotes, Canon, Image] 5 - Bracket Shot Number: 0 [MakerNotes, Canon, Camera] 1 - WB RGGB Levels Auto: 1740 832 831 931 [MakerNotes, Canon, Camera] 5 - WB RGGB Levels Daylight: 1722 832 831 989 [MakerNotes, Canon, Camera] 9 - WB RGGB Levels Shade: 2035 832 831 839 [MakerNotes, Canon, Camera] 13 - WB RGGB Levels Cloudy: 1878 832 831 903 [MakerNotes, Canon, Camera] 17 - WB RGGB Levels Tungsten: 1228 913 912 1668 [MakerNotes, Canon, Camera] 21 - WB RGGB Levels Fluorescent: 1506 842 841 1381 [MakerNotes, Canon, Camera] 25 - WB RGGB Levels Flash: 1964 832 831 877 [MakerNotes, Canon, Camera] 29 - WB RGGB Levels Custom: 1722 832 831 989 [MakerNotes, Canon, Camera] 33 - WB RGGB Levels Kelvin: 1722 832 831 988 [MakerNotes, Canon, Camera] 37 - WB RGGB Black Levels: 125 124 125 124 [MakerNotes, Canon, Camera] 1 - Measured RGGB: 554 1022 1026 754 [MakerNotes, Canon, Camera] 174 - Color Temperature: 5200 [MakerNotes, Canon, Camera] 180 - Color Space: sRGB [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.96 [XMP, XMP-getty, Image] OriginalFilename - Original File Name: CRW_1602.CRW [XMP, XMP-aux, Camera] Lens - Lens: 18.0 - 55.0 mm [XMP, XMP-dc, Image] description - Description: CRW with embedded XMP [XMP, XMP-pmi, Image] sequenceNumber - Sequence Number: 0 [XMP, XMP-tiff, Image] ImageLength - Image Height: 2048 [XMP, XMP-tiff, Image] ImageWidth - Image Width: 3072 [Composite, Composite, Image] Aperture - Aperture: 3.6 [Composite, Composite, Camera] ConditionalFEC - Flash Exposure Compensation: +2/3 [Composite, Composite, Camera] DriveMode - Drive Mode: Continuous Shooting [Composite, Composite, Camera] FlashType - Flash Type: Built-In Flash [Composite, Composite, Camera] ISO - ISO: 100 [Composite, Composite, Camera] Lens - Lens: 18.0 - 55.0 mm [Composite, Composite, Camera] RedEyeReduction - Red Eye Reduction: Off [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.6 [Composite, Composite, Camera] ShootingMode - Shooting Mode: Program AE [Composite, Composite, Camera] ShutterCurtainHack - Shutter Curtain Sync: 1st-curtain sync [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/64 [Composite, Composite, Camera] WB_RGGBLevels - WB RGGB Levels: 1740 832 831 931 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.119663 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.019 mm [Composite, Composite, Image] DOF - Depth Of Field: 0.42 m (1.13 - 1.54 m) [Composite, Composite, Image] FOV - Field Of View: 51.6 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 24.0 mm (35 mm equivalent: 37.2 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 8.25 m [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Camera] Lens35efl - Lens: 18.0 - 55.0 mm (35 mm equivalent: 27.9 - 85.3 mm) [Composite, Composite, Camera] LensID - Lens ID: Unknown 18-55mm [Composite, Composite, Image] LightValue - Light Value: 9.7 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] RedBalance - Red Balance: 2.092604 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_14.out����������������������������������������������������������������000644 �000765 �000024 �00000010211 12546457277 017155� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Writer_14_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 1253 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS DIGITAL REBEL [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2003:12:04 06:46:52 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 4 [EXIF, ExifIFD, Image] 33437 - F Number: 14.0 [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:12:04 06:46:52 [EXIF, ExifIFD, Time] 36868 - Create Date: 2003:12:04 06:46:52 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 9 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 0 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 14.0 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 4.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Average [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 34.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 160 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 120 [EXIF, InteropIFD, Image] 1 - Interoperability Index: THM - DCF thumbnail file [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, InteropIFD, Image] 4097 - Related Image Width: 3072 [EXIF, InteropIFD, Image] 4098 - Related Image Height: 2048 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3443.946188 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3442.016807 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [Composite, Composite, Image] Aperture - Aperture: 14.0 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 4 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] LightValue - Light Value: 5.6 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.6 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.019 mm [Composite, Composite, Image] FOV - Field Of View: 36.9 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 34.0 mm (35 mm equivalent: 54.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 4.37 m ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_15.out����������������������������������������������������������������000644 �000765 �000024 �00000024405 12546457277 017170� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Writer_15_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 2.5 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] Comment - Comment: OLYMPUS_OPTICAL_CO_LTD {cool, huh?} [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS DIGITAL REBEL [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: v951p-80 [EXIF, IFD0, Time] 306 - Modify Date: 2003:12:04 06:46:52 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/30 [EXIF, ExifIFD, Image] 33437 - F Number: 2.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 1999:12:06 16:38:40 [EXIF, ExifIFD, Time] 36868 - Create Date: 1999:12:06 16:38:40 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 9 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 0 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 14.0 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.8 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 7.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 640 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 480 [EXIF, InteropIFD, Image] 1 - Interoperability Index: THM - DCF thumbnail file [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, InteropIFD, Image] 4097 - Related Image Width: 3072 [EXIF, InteropIFD, Image] 4098 - Related Image Height: 2048 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3443.946188 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3442.016807 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [MakerNotes, Canon, Camera] 1 - Macro Mode: Unknown (0) [MakerNotes, Canon, Camera] 2 - Self Timer: Off [MakerNotes, Canon, Camera] 3 - Quality: RAW [MakerNotes, Canon, Camera] 4 - Canon Flash Mode: Off [MakerNotes, Canon, Camera] 5 - Continuous Drive: Continuous [MakerNotes, Canon, Camera] 7 - Focus Mode: Manual Focus (3) [MakerNotes, Canon, Camera] 9 - Record Mode: CRW+THM [MakerNotes, Canon, Camera] 10 - Canon Image Size: Large [MakerNotes, Canon, Camera] 11 - Easy Mode: Manual [MakerNotes, Canon, Camera] 12 - Digital Zoom: Unknown (-1) [MakerNotes, Canon, Camera] 13 - Contrast: +1 [MakerNotes, Canon, Camera] 14 - Saturation: +1 [MakerNotes, Canon, Camera] 15 - Sharpness: +1 [MakerNotes, Canon, Camera] 16 - Camera ISO: n/a [MakerNotes, Canon, Camera] 17 - Metering Mode: Center-weighted average [MakerNotes, Canon, Camera] 18 - Focus Range: Not Known [MakerNotes, Canon, Camera] 20 - Canon Exposure Mode: Manual [MakerNotes, Canon, Camera] 22 - Lens Type: n/a [MakerNotes, Canon, Camera] 23 - Max Focal Length: 55 mm [MakerNotes, Canon, Camera] 24 - Min Focal Length: 18 mm [MakerNotes, Canon, Camera] 25 - Focal Units: 1/mm [MakerNotes, Canon, Camera] 26 - Max Aperture: 4 [MakerNotes, Canon, Camera] 27 - Min Aperture: 27 [MakerNotes, Canon, Camera] 28 - Flash Activity: 0 [MakerNotes, Canon, Camera] 29 - Flash Bits: (none) [MakerNotes, Canon, Camera] 36 - Zoom Source Width: 3072 [MakerNotes, Canon, Camera] 37 - Zoom Target Width: 3072 [MakerNotes, Canon, Camera] 41 - Manual Flash Output: n/a [MakerNotes, Canon, Camera] 42 - Color Tone: Normal [MakerNotes, Canon, Image] 1 - Focal Length: 34 mm [MakerNotes, Canon, Image] 2 - Focal Plane X Size: 23.22 mm [MakerNotes, Canon, Image] 3 - Focal Plane Y Size: 15.49 mm [MakerNotes, Canon, Image] 1 - Auto ISO: 100 [MakerNotes, Canon, Image] 2 - Base ISO: 100 [MakerNotes, Canon, Image] 3 - Measured EV: -1.25 [MakerNotes, Canon, Image] 4 - Target Aperture: 14 [MakerNotes, Canon, Image] 6 - Exposure Compensation: 0 [MakerNotes, Canon, Image] 7 - White Balance: Auto [MakerNotes, Canon, Image] 8 - Slow Shutter: None [MakerNotes, Canon, Image] 9 - Shot Number In Continuous Burst: 0 [MakerNotes, Canon, Camera] 10 - Optical Zoom Code: n/a [MakerNotes, Canon, Image] 13 - Flash Guide Number: 0 [MakerNotes, Canon, Image] 15 - Flash Exposure Compensation: 0 [MakerNotes, Canon, Image] 16 - Auto Exposure Bracketing: Off [MakerNotes, Canon, Image] 17 - AEB Bracket Value: 0 [MakerNotes, Canon, Image] 18 - Control Mode: Camera Local Control [MakerNotes, Canon, Image] 19 - Focus Distance Upper: inf [MakerNotes, Canon, Image] 20 - Focus Distance Lower: 5.46 m [MakerNotes, Canon, Image] 21 - F Number: 14 [MakerNotes, Canon, Image] 22 - Exposure Time: 128 [MakerNotes, Canon, Image] 23 - Measured EV 2: -1.25 [MakerNotes, Canon, Image] 24 - Bulb Duration: 4 [MakerNotes, Canon, Camera] 26 - Camera Type: EOS Mid-range [MakerNotes, Canon, Image] 27 - Auto Rotate: None [MakerNotes, Canon, Image] 28 - ND Filter: n/a [MakerNotes, Canon, Image] 29 - Self Timer 2: 0 [MakerNotes, Canon, Image] 3 - Bracket Mode: Off [MakerNotes, Canon, Image] 4 - Bracket Value: 0 [MakerNotes, Canon, Image] 5 - Bracket Shot Number: 0 [MakerNotes, Canon, Image] 6 - Canon Image Type: CRW:EOS DIGITAL REBEL CMOS RAW [MakerNotes, Canon, Camera] 7 - Canon Firmware Version: Firmware Version 1.1.1 [MakerNotes, Canon, Camera] 12 - Serial Number: 0560018150 [MakerNotes, Canon, Camera] 21 - Serial Number Format: Format 1 [MakerNotes, Canon, Image] 8 - File Number: 118-1861 [MakerNotes, Canon, Camera] 9 - Owner Name: Phil Harvey [MakerNotes, Canon, Camera] 16 - Canon Model ID: EOS Digital Rebel / 300D / Kiss Digital [MakerNotes, Canon, Image] 14 - Canon File Length: 4480822 [MakerNotes, Canon, Camera] 1 - Measured RGGB: 998 1022 1026 808 [MakerNotes, Canon, Camera] 1 - WB RGGB Levels Auto: 1719 832 831 990 [MakerNotes, Canon, Camera] 5 - WB RGGB Levels Daylight: 1722 832 831 989 [MakerNotes, Canon, Camera] 9 - WB RGGB Levels Shade: 2035 832 831 839 [MakerNotes, Canon, Camera] 13 - WB RGGB Levels Cloudy: 1878 832 831 903 [MakerNotes, Canon, Camera] 17 - WB RGGB Levels Tungsten: 1228 913 912 1668 [MakerNotes, Canon, Camera] 21 - WB RGGB Levels Fluorescent: 1506 842 841 1381 [MakerNotes, Canon, Camera] 25 - WB RGGB Levels Flash: 1933 832 831 895 [MakerNotes, Canon, Camera] 29 - WB RGGB Levels Custom: 1722 832 831 989 [MakerNotes, Canon, Camera] 33 - WB RGGB Levels Kelvin: 1722 832 831 988 [MakerNotes, Canon, Camera] 37 - WB RGGB Black Levels: 124 123 124 123 [MakerNotes, Canon, Camera] 174 - Color Temperature: 5200 [MakerNotes, Canon, Camera] 180 - Color Space: sRGB [MakerNotes, Canon, Camera] 0 - Num AF Points: 7 [MakerNotes, Canon, Camera] 1 - Valid AF Points: 7 [MakerNotes, Canon, Image] 2 - Canon Image Width: 3072 [MakerNotes, Canon, Image] 3 - Canon Image Height: 2048 [MakerNotes, Canon, Camera] 4 - AF Image Width: 3072 [MakerNotes, Canon, Camera] 5 - AF Image Height: 2048 [MakerNotes, Canon, Camera] 6 - AF Area Width: 151 [MakerNotes, Canon, Camera] 7 - AF Area Height: 151 [MakerNotes, Canon, Camera] 8 - AF Area X Positions: 1014 608 0 0 0 -608 -1014 [MakerNotes, Canon, Camera] 9 - AF Area Y Positions: 0 0 -506 0 506 0 0 [MakerNotes, Canon, Camera] 10 - AF Points In Focus: (none) [MakerNotes, Canon, Camera] 19 - Thumbnail Image Valid Area: 0 159 7 112 [Composite, Composite, Image] Aperture - Aperture: 2.0 [Composite, Composite, Camera] DriveMode - Drive Mode: Continuous Shooting [Composite, Composite, Camera] ISO - ISO: 100 [Composite, Composite, Camera] Lens - Lens: 18.0 - 55.0 mm [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.6 [Composite, Composite, Camera] ShootingMode - Shooting Mode: Bulb [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 4 [Composite, Composite, Camera] WB_RGGBLevels - WB RGGB Levels: 1719 832 831 990 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.190619 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.019 mm [Composite, Composite, Image] DOF - Depth Of Field: inf (1.29 m - inf) [Composite, Composite, Image] FOV - Field Of View: 116.6 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 7.0 mm (35 mm equivalent: 11.1 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 1.30 m [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Camera] Lens35efl - Lens: 18.0 - 55.0 mm (35 mm equivalent: 28.6 - 87.4 mm) [Composite, Composite, Camera] LensID - Lens ID: Unknown 18-55mm [Composite, Composite, Image] LightValue - Light Value: 0.0 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] RedBalance - Red Balance: 2.067348 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_16.out����������������������������������������������������������������000644 �000765 �000024 �00000000066 10325475562 017154� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-tiff, Image] XResolution - X Resolution: 72 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_17.out����������������������������������������������������������������000644 �000765 �000024 �00000000067 10325475562 017156� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-tiff, Image] XResolution - X Resolution: 300 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_18.out����������������������������������������������������������������000644 �000765 �000024 �00000000215 10326047037 017143� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 282 - X Resolution: 72 [XMP, XMP-tiff, Image] XResolution - X Resolution: 300 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_19.out����������������������������������������������������������������000644 �000765 �000024 �00000004214 12546457277 017170� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Writer_19_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 553 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 780195eb135f878e7864b2564f1dfc9a [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Author] 315 - Artist: Phil [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Author] 315 - Artist: Harvey [EXIF, ExifIFD, Image] 34855 - ISO: 25 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0230 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2006:03:27 16:25:00 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: Uncalibrated [EXIF, ExifIFD, Camera] 41994 - Sharpness: Hard [IPTC, IPTC, Other] 25 - Keywords: one, two [IPTC, IPTC, Other] 0 - Application Record Version: 4 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_2.out�����������������������������������������������������������������000644 �000765 �000024 �00000010203 12546457277 017073� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������AEBBracketValue: 0 AFAreaHeight: 151 AFAreaWidth: 151 AFAreaXPositions: 1014 608 0 0 0 -608 -1014 AFAreaYPositions: 0 0 -506 0 506 0 0 AFImageHeight: 2048 AFImageWidth: 3072 AFPointsInFocus: (none) Aperture: 14.0 ApertureValue: 14.0 AutoExposureBracketing: Off AutoISO: 100 AutoRotate: None BaseISO: 100 BitsPerSample: 8 BlueBalance: 1.190619 BracketMode: Off BracketShotNumber: 0 BracketValue: 0 BulbDuration: 4 CameraISO: n/a CameraType: EOS Mid-range CanonExposureMode: Manual CanonFileLength: 4480822 CanonFirmwareVersion: Firmware Version 1.1.1 CanonFlashMode: Off CanonImageHeight: 2048 CanonImageSize: Large CanonImageType: CRW:EOS DIGITAL REBEL CMOS RAW CanonImageWidth: 3072 CanonModelID: EOS Digital Rebel / 300D / Kiss Digital CircleOfConfusion: 0.019 mm ColorComponents: 3 ColorSpace: sRGB ColorSpace (1): sRGB ColorTemperature: 5200 ColorTone: Normal Comment: New comment in JPG file ComponentsConfiguration: Y, Cb, Cr, - CompressedBitsPerPixel: 9 ContinuousDrive: Continuous Contrast: +1 ControlMode: Camera Local Control CreateDate: 2003:12:04 06:46:52 CustomRendered: Normal DOF: inf (4.31 m - inf) DateTimeOriginal: 2003:12:04 06:46:52 DigitalZoom: Unknown (-1) Directory: t DriveMode: Continuous Shooting EasyMode: Manual EncodingProcess: Baseline DCT, Huffman coding ExifByteOrder: Little-endian (Intel, II) ExifImageHeight: 120 ExifImageWidth: 160 ExifToolVersion: 9.93 ExifVersion: 0221 ExposureCompensation: 0 ExposureCompensation (1): 0 ExposureMode: Manual ExposureTime: 4 ExposureTime (1): 128 FNumber: 14.0 FNumber (1): 14 FOV: 36.9 deg FileAccessDate: 2015:04:18 07:17:51-04:00 FileInodeChangeDate: 2015:04:18 07:17:51-04:00 FileModifyDate: 2015:04:18 07:17:51-04:00 FileName: Writer_2_failed.jpg FileNumber: 118-1861 FilePermissions: rw-r--r-- FileSize: 2.7 kB FileSource: Digital Camera FileType: JPEG FileTypeExtension: jpg Flash: No Flash FlashActivity: 0 FlashBits: (none) FlashExposureComp: 0 FlashGuideNumber: 0 FlashpixVersion: 0100 FocalLength: 34.0 mm FocalLength (1): 34 mm FocalLength35efl: 34.0 mm (35 mm equivalent: 54.0 mm) FocalPlaneResolutionUnit: inches FocalPlaneXResolution: 3443.946188 FocalPlaneXSize: 23.22 mm FocalPlaneYResolution: 3442.016807 FocalPlaneYSize: 15.49 mm FocalUnits: 1/mm FocusDistanceLower: 5.46 m FocusDistanceUpper: inf FocusMode: Manual Focus (3) FocusRange: Not Known HyperfocalDistance: 4.37 m ISO: 100 ISO (1): 100 ImageHeight: 8 ImageSize: 8x8 ImageWidth: 8 InteropIndex: THM - DCF thumbnail file InteropVersion: 0100 Lens: 18.0 - 55.0 mm Lens35efl: 18.0 - 55.0 mm (35 mm equivalent: 28.6 - 87.4 mm) LensID: Unknown 18-55mm LensType: n/a LightValue: 5.6 MIMEType: image/jpeg MacroMode: Unknown (0) Make: Canon ManualFlashOutput: n/a MaxAperture: 4 MaxApertureValue: 4.5 MaxFocalLength: 55 mm MeasuredEV: -1.25 MeasuredEV2: -1.25 MeasuredRGGB: 998 1022 1026 808 Megapixels: 0.000064 MeteringMode: Center-weighted average MeteringMode (1): Average MinAperture: 27 MinFocalLength: 18 mm Model: Canon EOS DIGITAL REBEL ModifyDate: 2003:12:04 06:46:52 NDFilter: n/a NumAFPoints: 7 OpticalZoomCode: n/a Orientation: Horizontal (normal) OwnerName: Phil Harvey Quality: RAW RecordMode: CRW+THM RedBalance: 2.067348 RelatedImageHeight: 2048 RelatedImageWidth: 3072 ResolutionUnit: inches Saturation: +1 ScaleFactor35efl: 1.6 SceneCaptureType: Standard SelfTimer: Off SelfTimer2: 0 SensingMethod: One-chip color area SequenceNumber: 0 SerialNumber: 0560018150 SerialNumberFormat: Format 1 Sharpness: +1 ShootingMode: Bulb ShutterSpeed: 4 ShutterSpeedValue: 0 SlowShutter: None TargetAperture: 14 ThumbnailImageValidArea: 0 159 7 112 UserComment: ValidAFPoints: 7 WB_RGGBBlackLevels: 124 123 124 123 WB_RGGBLevels: 1719 832 831 990 WB_RGGBLevelsAuto: 1719 832 831 990 WB_RGGBLevelsCloudy: 1878 832 831 903 WB_RGGBLevelsCustom: 1722 832 831 989 WB_RGGBLevelsDaylight: 1722 832 831 989 WB_RGGBLevelsFlash: 1933 832 831 895 WB_RGGBLevelsFluorescent: 1506 842 841 1381 WB_RGGBLevelsKelvin: 1722 832 831 988 WB_RGGBLevelsShade: 2035 832 831 839 WB_RGGBLevelsTungsten: 1228 913 912 1668 WhiteBalance: Auto WhiteBalance (1): Auto XResolution: 180 YCbCrPositioning: Centered YCbCrSubSampling: YCbCr4:2:0 (2 2) YResolution: 180 ZoomSourceWidth: 3072 ZoomTargetWidth: 3072 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_22.out����������������������������������������������������������������000644 �000765 �000024 �00000000401 11510412077 017127� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Time] 306 - Modify Date: 2006:03:26 12:40:46 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 19:38:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2000:10:31 18:36:41 [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2002:06:26 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_24.out����������������������������������������������������������������000644 �000765 �000024 �00000000112 11141337011 017122� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, File, Image] Comment - Comment: ISO=100 Aperture=3.5 Exposure=1/64 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_25.out����������������������������������������������������������������000644 �000765 �000024 �00000004471 12546457277 017172� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Writer_25_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 621 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: [EXIF, IFD0, Camera] 271 - Make: NIKON [EXIF, IFD0, Camera] 272 - Camera Model Name: E775 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 300 [EXIF, IFD0, Image] 283 - Y Resolution: 300 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: E775v1.3u [EXIF, IFD0, Time] 306 - Modify Date: 2001:08:01 12:57:23 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33437 - F Number: 25.0 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0230 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: Uncalibrated [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 300 [EXIF, IFD1, Image] 283 - Y Resolution: 300 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [Composite, Composite, Image] Aperture - Aperture: 25.0 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_26.out����������������������������������������������������������������000644 �000765 �000024 �00000003754 12546457277 017176� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Writer_26_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 535 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: [EXIF, IFD0, Camera] 271 - Make: NIKON [EXIF, IFD0, Camera] 272 - Camera Model Name: E775 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 300 [EXIF, IFD0, Image] 283 - Y Resolution: 300 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: E775v1.3u [EXIF, IFD0, Time] 306 - Modify Date: 2001:08:01 12:57:23 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 300 [EXIF, IFD1, Image] 283 - Y Resolution: 300 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ��������������������Image-ExifTool-10.10/t/Writer_27.out����������������������������������������������������������������000644 �000765 �000024 �00000001341 10574341223 017143� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[JFIF, JFIF, Image] 3 - X Resolution: 144 [JFIF, JFIF, Image] 5 - Y Resolution: 144 [EXIF, IFD0, Image] 282 - X Resolution: 144 [EXIF, IFD0, Image] 283 - Y Resolution: 144 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2000:01:02 03:04:05 [EXIF, IFD0, Image] 282 - X Resolution: 144 [EXIF, IFD0, Image] 283 - Y Resolution: 144 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2000:01:02 03:04:05 [APP8, SPIFF, Image] 18 - Y Resolution: 300 [APP8, SPIFF, Image] 22 - X Resolution: 300 [MakerNotes, CIFF, Time] 0 - Date/Time Original: 1998:05:01 21:33:18 [APP12, PictureInfo, Time] TimeDate - Date/Time Original: 1998:12:31 15:17:20 [Photoshop, Photoshop, Image] 0 - X Resolution: 72 [Photoshop, Photoshop, Image] 4 - Y Resolution: 72 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_28.out����������������������������������������������������������������000644 �000765 �000024 �00000000101 11226667021 017137� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileName - File Name: Writer_28_failed.jpg ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_29.out����������������������������������������������������������������000644 �000765 �000024 �00000000151 11226667021 017145� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileName - File Name: Writer_29_failed.jpg [EXIF, ExifIFD, Image] 34855 - ISO: 200 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_30.out����������������������������������������������������������������000644 �000765 �000024 �00000000146 11226667021 017141� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileName - File Name: Writer_30_failed.jpg [EXIF, IFD0, Image] 34855 - ISO: 100 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_31.out����������������������������������������������������������������000644 �000765 �000024 �00000013322 12546457277 017162� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Writer_31_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 2.9 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:53-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:53-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:53-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 6895be53ef9a287520f400aa17242c09 [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: A witty caption [EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Adobe Photoshop 7.0 [EXIF, IFD0, Time] 306 - Modify Date: 2004:02:26 09:36:46 [EXIF, IFD0, Author] 315 - Artist: Phil Harvey [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: Copyright 2004 Phil Harvey [EXIF, ExifIFD, Image] 33437 - F Number: 3.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 1.6 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/64 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 100 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 80 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3053 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3053 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 120 - Caption-Abstract: A witty caption [IPTC, IPTC, Author] 122 - Writer-Editor: I wrote it [IPTC, IPTC, Other] 105 - Headline: No headline [IPTC, IPTC, Other] 40 - Special Instructions: What instructions [IPTC, IPTC, Author] 80 - By-line: Phil Harvey [IPTC, IPTC, Author] 85 - By-line Title: My Position [IPTC, IPTC, Author] 110 - Credit: My Credit [IPTC, IPTC, Other] 5 - Object Name: Test IPTC picture [IPTC, IPTC, Time] 55 - Date Created: 2004:02:26 [IPTC, IPTC, Location] 90 - City: Kingston [IPTC, IPTC, Location] 95 - Province-State: Ont [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC, Other] 103 - Original Transmission Reference: What is a transmission reference [IPTC, IPTC, Other] 15 - Category: 1 [IPTC, IPTC, Other] 20 - Supplemental Categories: amazing, image, utilities [IPTC, IPTC, Author] 116 - Copyright Notice: Copyright 2004 Phil Harvey [IPTC, IPTC, Other] 10 - Urgency: 8 (least urgent) [IPTC, IPTC, Author] 115 - Source: I'm the source [IPTC, IPTC, Other] 25 - Keywords: jambalaya [Photoshop, Photoshop, Image] 1061 - IPTC Digest: 05ad1770b1a95f1f9788ac995fa647da [Photoshop, Photoshop, Image] 0 - X Resolution: 72 [Photoshop, Photoshop, Image] 2 - Displayed Units X: inches [Photoshop, Photoshop, Image] 4 - Y Resolution: 72 [Photoshop, Photoshop, Image] 6 - Displayed Units Y: inches [Photoshop, Photoshop, Image] 1037 - Global Angle: 30 [Photoshop, Photoshop, Image] 1049 - Global Altitude: 30 [Photoshop, Photoshop, Author] 1034 - Copyright Flag: False [Photoshop, Photoshop, Author] 1035 - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [Photoshop, Photoshop, Image] 0 - Photoshop Quality: 7 [Photoshop, Photoshop, Image] 1 - Photoshop Format: Standard [Photoshop, Photoshop, Image] 2 - Progressive Scans: 3 Scans [APP14, Adobe, Image] 0 - DCT Encode Version: 100 [APP14, Adobe, Image] 1 - APP14 Flags 0: (none) [APP14, Adobe, Image] 2 - APP14 Flags 1: (none) [APP14, Adobe, Image] 3 - Color Transform: YCbCr [Composite, Composite, Image] Aperture - Aperture: 3.5 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/64 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] LightValue - Light Value: 9.6 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 6.0 mm ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_32.out����������������������������������������������������������������000644 �000765 �000024 �00000000346 11141337011 017132� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ICC_Profile, ICC_Profile, Image] ICC_Profile - ICC Profile: (Binary data 3144 bytes) [EXIF, IFD0, Image] 50831 - As Shot ICC Profile: (Binary data 31 bytes) [EXIF, IFD0, Image] 50833 - Current ICC Profile: (Binary data 33 bytes) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_33.out����������������������������������������������������������������000644 �000765 �000024 �00000000344 11141337011 017131� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ICC_Profile, ICC_Profile, Image] ICC_Profile - ICC Profile: (Binary data 39 bytes) [EXIF, IFD0, Image] 50831 - As Shot ICC Profile: (Binary data 31 bytes) [EXIF, IFD0, Image] 50833 - Current ICC Profile: (Binary data 33 bytes) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_34.out����������������������������������������������������������������000644 �000765 �000024 �00000000330 11511417126 017134� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-dc, Image] subject - Subject: [ExifTool,Test,IPTC] [XMP, XMP-lr, Image] hierarchicalSubject - Hierarchical Subject: [IPTC.jpg,ExifTool,Test,IPTC] [File, File, Image] Comment - Comment: ExifTool, Test, IPTC ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_35.out����������������������������������������������������������������000644 �000765 �000024 �00000026477 12546457277 017205� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Writer_35_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 9.5 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:53-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:53-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:53-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: d624fa41e4169333a86729e3c275f95a [File, File, Image] Comment - Comment: © PhotoStudio Unicode comment;; [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [JFIF, JFIF, Image] 0 - JFIF Version: 1.02 [JFIF, JFIF, Image] 2 - Resolution Unit: inches [JFIF, JFIF, Image] 3 - X Resolution: 144 [JFIF, JFIF, Image] 5 - Y Resolution: 144 [EXIF, IFD0, Image] 270 - Image Description: A witty caption [EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Adobe Photoshop 7.0 [EXIF, IFD0, Time] 306 - Modify Date: 2004:02:26 09:36:46 [EXIF, IFD0, Author] 315 - Artist: Phil Harvey [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, IFD0, Author] 33432 - Copyright: Copyright 2004 Phil Harvey [EXIF, ExifIFD, Image] 33437 - F Number: 3.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/64 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 100 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 80 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3053 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3053 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 5 - Object Name: Test IPTC picture [IPTC, IPTC, Other] 10 - Urgency: 8 (least urgent) [IPTC, IPTC, Other] 15 - Category: 1 [IPTC, IPTC, Other] 20 - Supplemental Categories: amazing, image, utilities [IPTC, IPTC, Other] 25 - Keywords: jambalaya [IPTC, IPTC, Other] 40 - Special Instructions: What instructions [IPTC, IPTC, Time] 55 - Date Created: 2004:02:26 [IPTC, IPTC, Author] 80 - By-line: Phil Harvey [IPTC, IPTC, Author] 85 - By-line Title: My Position [IPTC, IPTC, Location] 90 - City: Kingston [IPTC, IPTC, Location] 95 - Province-State: Ont [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC, Other] 103 - Original Transmission Reference: What is a transmission reference [IPTC, IPTC, Other] 105 - Headline: No headline [IPTC, IPTC, Author] 110 - Credit: My Credit [IPTC, IPTC, Author] 115 - Source: I'm the source [IPTC, IPTC, Author] 116 - Copyright Notice: Copyright 2004 Phil Harvey [IPTC, IPTC, Other] 120 - Caption-Abstract: A witty caption [IPTC, IPTC, Author] 122 - Writer-Editor: I wrote it [Photoshop, Photoshop, Author] 1034 - Copyright Flag: False [Photoshop, Photoshop, Author] 1035 - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [Photoshop, Photoshop, Image] 1037 - Global Angle: 30 [Photoshop, Photoshop, Image] 1049 - Global Altitude: 30 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: UTF-16 (big-endian) encoded XMP [XMP, XMP-dc, Author] rights - Rights: Copyright 2004 Phil Harvey [XMP, XMP-dc, Image] subject - Subject: ExifTool, Test, XMP [XMP, XMP-dc, Image] title - Title: Test IPTC picture [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: My Position [XMP, XMP-photoshop, Author] CaptionWriter - Caption Writer: I wrote it [XMP, XMP-photoshop, Image] Category - Category: 1 [XMP, XMP-photoshop, Location] City - City: Kingston [XMP, XMP-photoshop, Location] Country - Country: Canada [XMP, XMP-photoshop, Author] Credit - Credit: My Credit [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2004:02:26 [XMP, XMP-photoshop, Image] Headline - Headline: No headline [XMP, XMP-photoshop, Image] Instructions - Instructions: What instructions [XMP, XMP-photoshop, Author] Source - Source: I'm the source [XMP, XMP-photoshop, Location] State - State: Ont [XMP, XMP-photoshop, Image] SupplementalCategories - Supplemental Categories: amazing, image, utilities [XMP, XMP-photoshop, Image] TransmissionReference - Transmission Reference: What is a transmission reference? [XMP, XMP-photoshop, Image] Urgency - Urgency: 8 (least urgent) [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: My Job [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:photoshop:4cc7b857-69d0-11d8-8ac4-bb59c92f0d9a [XMP, XMP-xmpRights, Author] Marked - Marked: False [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ [ICC_Profile, ICC-header, Image] 4 - Profile CMM Type: ADBE [ICC_Profile, ICC-header, Image] 8 - Profile Version: 2.1.0 [ICC_Profile, ICC-header, Image] 12 - Profile Class: Display Device Profile [ICC_Profile, ICC-header, Image] 16 - Color Space Data: RGB [ICC_Profile, ICC-header, Image] 20 - Profile Connection Space: XYZ [ICC_Profile, ICC-header, Time] 24 - Profile Date Time: 1999:06:03 00:00:00 [ICC_Profile, ICC-header, Image] 36 - Profile File Signature: acsp [ICC_Profile, ICC-header, Image] 40 - Primary Platform: Apple Computer Inc. [ICC_Profile, ICC-header, Image] 44 - CMM Flags: Not Embedded, Independent [ICC_Profile, ICC-header, Image] 48 - Device Manufacturer: none [ICC_Profile, ICC-header, Image] 52 - Device Model: [ICC_Profile, ICC-header, Image] 56 - Device Attributes: Reflective, Glossy, Positive, Color [ICC_Profile, ICC-header, Image] 64 - Rendering Intent: Perceptual [ICC_Profile, ICC-header, Image] 68 - Connection Space Illuminant: 0.9642 1 0.82491 [ICC_Profile, ICC-header, Image] 80 - Profile Creator: ADBE [ICC_Profile, ICC-header, Image] 84 - Profile ID: 0 [ICC_Profile, ICC_Profile, Image] cprt - Profile Copyright: Copyright 1999 Adobe Systems Incorporated [ICC_Profile, ICC_Profile, Image] desc - Profile Description: Adobe RGB (1998) [ICC_Profile, ICC_Profile, Image] wtpt - Media White Point: 0.95045 1 1.08905 [ICC_Profile, ICC_Profile, Image] bkpt - Media Black Point: 0 0 0 [ICC_Profile, ICC_Profile, Image] rTRC - Red Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] gTRC - Green Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] bTRC - Blue Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] rXYZ - Red Matrix Column: 0.60974 0.31111 0.01947 [ICC_Profile, ICC_Profile, Image] gXYZ - Green Matrix Column: 0.20528 0.62567 0.06087 [ICC_Profile, ICC_Profile, Image] bXYZ - Blue Matrix Column: 0.14919 0.06322 0.74457 [Ducky, Ducky, Author] 3 - Copyright: Copyright 2004 Phil Harvey [Ducky, Ducky, Image] 1 - Quality: 84% [APP14, Adobe, Image] 0 - DCT Encode Version: 100 [APP14, Adobe, Image] 1 - APP14 Flags 0: (none) [APP14, Adobe, Image] 2 - APP14 Flags 1: (none) [APP14, Adobe, Image] 3 - Color Transform: YCbCr [CanonVRD, CanonVRD, Image] 2 - VRD Version: 1.0.0 [CanonVRD, CanonVRD, Image] 6 - WB Adj RGGB Levels: 0 0 0 0 [CanonVRD, CanonVRD, Image] 24 - White Balance Adj: Shot Settings [CanonVRD, CanonVRD, Image] 26 - WB Adj Color Temp: 5600 [CanonVRD, CanonVRD, Image] 36 - WB Fine Tune Active: No [CanonVRD, CanonVRD, Image] 40 - WB Fine Tune Saturation: 0 [CanonVRD, CanonVRD, Image] 44 - WB Fine Tune Tone: 0 [CanonVRD, CanonVRD, Image] 46 - Raw Color Adj: Shot Settings [CanonVRD, CanonVRD, Image] 48 - Raw Custom Saturation: 0 [CanonVRD, CanonVRD, Image] 52 - Raw Custom Tone: 0 [CanonVRD, CanonVRD, Image] 56 - Raw Brightness Adj: 0.00 [CanonVRD, CanonVRD, Image] 60 - Tone Curve Property: Shot Settings [CanonVRD, CanonVRD, Image] 122 - Dynamic Range Min: 0 [CanonVRD, CanonVRD, Image] 124 - Dynamic Range Max: 4095 [CanonVRD, CanonVRD, Image] 272 - Tone Curve Active: No [CanonVRD, CanonVRD, Image] 275 - Tone Curve Mode: RGB [CanonVRD, CanonVRD, Image] 276 - Brightness Adj: 0 [CanonVRD, CanonVRD, Image] 277 - Contrast Adj: 0 [CanonVRD, CanonVRD, Image] 278 - Saturation Adj: 100 [CanonVRD, CanonVRD, Image] 286 - Color Tone Adj: 0 [CanonVRD, CanonVRD, Image] 294 - Luminance Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 336 - Luminance Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 345 - Tone Curve Interpolation: Curve [CanonVRD, CanonVRD, Image] 352 - Red Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 394 - Red Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 410 - Green Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 452 - Green Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 468 - Blue Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 510 - Blue Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 526 - RGB Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 568 - RGB Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 580 - Crop Active: No [CanonVRD, CanonVRD, Image] 582 - Crop Left: 0 [CanonVRD, CanonVRD, Image] 584 - Crop Top: 0 [CanonVRD, CanonVRD, Image] 586 - Crop Width: 0 [CanonVRD, CanonVRD, Image] 588 - Crop Height: 0 [CanonVRD, CanonVRD, Image] 602 - Sharpness Adj: 0 [CanonVRD, CanonVRD, Image] 608 - Crop Aspect Ratio: Free [CanonVRD, CanonVRD, Image] 610 - Constrained Crop Width: 0 [CanonVRD, CanonVRD, Image] 614 - Constrained Crop Height: 0 [CanonVRD, CanonVRD, Image] 618 - Check Mark: Clear [CanonVRD, CanonVRD, Image] 622 - Rotation: 90 [CanonVRD, CanonVRD, Image] 624 - Work Color Space: sRGB �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_36.out����������������������������������������������������������������000644 �000765 �000024 �00000000134 11024260633 017136� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[IPTC, IPTC, Other] 25 - Keywords: in [IPTC, IPTC, Other] 0 - Application Record Version: 4 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_37.out����������������������������������������������������������������000644 �000765 �000024 �00000000132 11226667021 017143� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileSize - File Size: 2518 [EXIF, IFD1, Image] 259 - Compression: 6 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_38.out����������������������������������������������������������������000644 �000765 �000024 �00000007542 12546457277 017200� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Writer_38_failed.exif [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 2.2 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:53-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:53-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:53-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: EXIF [File, File, Image] FileTypeExtension - File Type Extension: exif [File, File, Image] MIMEType - MIME Type: application/unknown [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [EXIF, IFD0, Image] 270 - Image Description: [EXIF, IFD0, Camera] 271 - Make: SONY [EXIF, IFD0, Camera] 272 - Camera Model Name: DSC-F828 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2003:12:18 13:51:33 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/250 [EXIF, ExifIFD, Image] 33437 - F Number: 7.1 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 64 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:12:18 13:51:33 [EXIF, ExifIFD, Time] 36868 - Create Date: 2003:12:18 13:51:33 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.0 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37386 - Focal Length: 12.5 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 3264 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 2448 [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Auto bracket [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41992 - Contrast: Normal [EXIF, ExifIFD, Camera] 41993 - Saturation: Normal [EXIF, ExifIFD, Camera] 41994 - Sharpness: Normal [MakerNotes, Sony, Camera] 8192 - Sony 0x2000: 0 [MakerNotes, Sony, Camera] 36865 - Sony 0x9001: ..­mQV„ûV„û.³9°9ŠJuÿ.Ŭ]è^ޏ.[...] [MakerNotes, Sony, Camera] 36866 - Sony 0x9002: .JÚ`.p.V!.!¾ê¾ê0ÿ0ÿV!ˆPp,×.0c[...] [MakerNotes, Sony, Camera] 36867 - Sony 0x9003: .ÜsF®&.¡ÒB.¯.....È..ûÙ;›Õ.utN½½½½½½(¶^w’[...] [MakerNotes, Sony, Camera] 36868 - Sony 0x9004: ..,.,.,.,.ô.ô.ô.ô.ô.ô.ô.ôlêoÄ@.o”.,‚.,Ï.o‰3úM[...] [MakerNotes, Sony, Camera] 36869 - Sony 0x9005: ..@o........}[...] [MakerNotes, Sony, Camera] 36870 - Sony 0x9006: .ð™ârï‘.{.•ân‡öGeG‘š‘`zâ[...] [MakerNotes, Sony, Camera] 36871 - Sony 0x9007: .ç;.|.cçf.VØÌ£.üêbêØ.ßç¶^O[...] [MakerNotes, Sony, Camera] 36872 - Sony 0x9008: ..ªø..¼·’.³ôi.Þ.Ð@÷.]:þïó•±ö;Žî;ä‚.ÕH[...] [PrintIM, PrintIM, Printing] PrintIMVersion - PrintIM Version: 0250 [PrintIM, PrintIM, Printing] 2 - Print IM 0x0002: 0x00000001 [PrintIM, PrintIM, Printing] 257 - Print IM 0x0101: 0x00000000 [Composite, Composite, Image] Aperture - Aperture: 7.1 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/250 [Composite, Composite, Image] LightValue - Light Value: 14.3 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 12.5 mm ��������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_39.out����������������������������������������������������������������000644 �000765 �000024 �00000000341 11321420253 017135� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileName - File Name: Writer_39_failed.jpg [EXIF, IFD0, Image] 282 - X Resolution: 123 [EXIF, IFD0, Image] 296 - Resolution Unit: cm [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 1999:99:99 99:99:99 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_4.out�����������������������������������������������������������������000644 �000765 �000024 �00000013053 12515227306 017063� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileSize - File Size: 7.6 kB [File, File, Image] FileType - File Type: TIFF [File, File, Image] FileTypeExtension - File Type Extension: tif [File, File, Image] MIMEType - MIME Type: image/tiff [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: e9bf6d2340af45aa812e91745756c524 [EXIF, IFD0, Image] 254 - Subfile Type: Full-resolution Image [EXIF, IFD0, Image] 256 - Image Width: 160 [EXIF, IFD0, Image] 257 - Image Height: 120 [EXIF, IFD0, Image] 258 - Bits Per Sample: 8 8 8 [EXIF, IFD0, Image] 259 - Compression: LZW [EXIF, IFD0, Image] 262 - Photometric Interpretation: RGB [EXIF, IFD0, Image] 270 - Image Description: Modified TIFF [EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS DIGITAL REBEL [EXIF, IFD0, Image] 273 - Strip Offsets: 6754 [EXIF, IFD0, Image] 277 - Samples Per Pixel: 3 [EXIF, IFD0, Image] 278 - Rows Per Strip: 120 [EXIF, IFD0, Image] 279 - Strip Byte Counts: 1048 [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 284 - Planar Configuration: Chunky [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: GraphicConverter [EXIF, IFD0, Time] 306 - Modify Date: 2004:02:20 08:07:49 [EXIF, IFD0, Image] 317 - Predictor: None [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-photoshop, Image] SupplementalCategories - Supplemental Categories: new XMP info [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 120 - Caption-Abstract: The picture caption [IPTC, IPTC, Author] 122 - Writer-Editor: I wrote it [IPTC, IPTC, Other] 40 - Special Instructions: no instructions [IPTC, IPTC, Author] 80 - By-line: I'm the author [IPTC, IPTC, Author] 85 - By-line Title: On top [IPTC, IPTC, Author] 110 - Credit: Phil Harvey [IPTC, IPTC, Author] 115 - Source: My camera [IPTC, IPTC, Other] 5 - Object Name: This is the title [IPTC, IPTC, Time] 55 - Date Created: 2004:02:20 [IPTC, IPTC, Location] 90 - City: Kingston [IPTC, IPTC, Location] 95 - Province-State: Ontario [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC, Other] 103 - Original Transmission Reference: no reference [IPTC, IPTC, Other] 25 - Keywords: exiftool, test, picture, another keyword [IPTC, IPTC, Author] 116 - Copyright Notice: Copyright notice [IPTC, IPTC, Other] 105 - Headline: A different headline [ICC_Profile, ICC-header, Image] 4 - Profile CMM Type: Lino [ICC_Profile, ICC-header, Image] 8 - Profile Version: 2.1.0 [ICC_Profile, ICC-header, Image] 12 - Profile Class: Display Device Profile [ICC_Profile, ICC-header, Image] 16 - Color Space Data: RGB [ICC_Profile, ICC-header, Image] 20 - Profile Connection Space: XYZ [ICC_Profile, ICC-header, Time] 24 - Profile Date Time: 1998:02:09 06:49:00 [ICC_Profile, ICC-header, Image] 36 - Profile File Signature: acsp [ICC_Profile, ICC-header, Image] 40 - Primary Platform: Microsoft Corporation [ICC_Profile, ICC-header, Image] 44 - CMM Flags: Not Embedded, Independent [ICC_Profile, ICC-header, Image] 48 - Device Manufacturer: IEC [ICC_Profile, ICC-header, Image] 52 - Device Model: sRGB [ICC_Profile, ICC-header, Image] 56 - Device Attributes: Reflective, Glossy, Positive, Color [ICC_Profile, ICC-header, Image] 64 - Rendering Intent: Perceptual [ICC_Profile, ICC-header, Image] 68 - Connection Space Illuminant: 0.9642 1 0.82491 [ICC_Profile, ICC-header, Image] 80 - Profile Creator: HP [ICC_Profile, ICC-header, Image] 84 - Profile ID: 0 [ICC_Profile, ICC_Profile, Image] cprt - Profile Copyright: Copyright (c) 1998 Hewlett-Packard Company [ICC_Profile, ICC_Profile, Image] desc - Profile Description: sRGB IEC61966-2.1 [ICC_Profile, ICC_Profile, Image] wtpt - Media White Point: 0.95045 1 1.08905 [ICC_Profile, ICC_Profile, Image] bkpt - Media Black Point: 0 0 0 [ICC_Profile, ICC_Profile, Image] rXYZ - Red Matrix Column: 0.43607 0.22249 0.01392 [ICC_Profile, ICC_Profile, Image] gXYZ - Green Matrix Column: 0.38515 0.71687 0.09708 [ICC_Profile, ICC_Profile, Image] bXYZ - Blue Matrix Column: 0.14307 0.06061 0.7141 [ICC_Profile, ICC_Profile, Camera] dmnd - Device Mfg Desc: IEC http://www.iec.ch [ICC_Profile, ICC_Profile, Camera] dmdd - Device Model Desc: IEC 61966-2.1 Default RGB colour space - sRGB [ICC_Profile, ICC_Profile, Image] vued - Viewing Cond Desc: Reference Viewing Condition in IEC61966-2.1 [ICC_Profile, ICC-view, Image] 8 - Viewing Cond Illuminant: 19.6445 20.3718 16.8089 [ICC_Profile, ICC-view, Image] 20 - Viewing Cond Surround: 3.92889 4.07439 3.36179 [ICC_Profile, ICC-view, Image] 32 - Viewing Cond Illuminant Type: D50 [ICC_Profile, ICC_Profile, Image] lumi - Luminance: 76.03647 80 87.12462 [ICC_Profile, ICC-meas, Image] 8 - Measurement Observer: CIE 1931 [ICC_Profile, ICC-meas, Image] 12 - Measurement Backing: 0 0 0 [ICC_Profile, ICC-meas, Image] 24 - Measurement Geometry: Unknown [ICC_Profile, ICC-meas, Image] 28 - Measurement Flare: 0.999% [ICC_Profile, ICC-meas, Image] 32 - Measurement Illuminant: D65 [ICC_Profile, ICC_Profile, Image] tech - Technology: Cathode Ray Tube Display [ICC_Profile, ICC_Profile, Image] rTRC - Red Tone Reproduction Curve: (Binary data 2060 bytes) [ICC_Profile, ICC_Profile, Image] gTRC - Green Tone Reproduction Curve: (Binary data 2060 bytes) [ICC_Profile, ICC_Profile, Image] bTRC - Blue Tone Reproduction Curve: (Binary data 2060 bytes) [Composite, Composite, Image] ImageSize - Image Size: 160x120 [Composite, Composite, Image] Megapixels - Megapixels: 0.019 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_40.out����������������������������������������������������������������000644 �000765 �000024 �00000000345 11321420253 017131� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[File, System, Image] FileName - File Name: Writer_40_failed.jpg [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:12:04 06:46:52 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_41.out����������������������������������������������������������������000644 �000765 �000024 �00000000263 12130522265 017136� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[MakerNotes, CIFF, Camera] 2064 - Owner Name: CIFF Write Test [Meta, MetaIFD, Camera] 50004 - Serial Number: 12345 [APP12, PictureInfo, Camera] Serial# - Serial Number: #00000001 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_42.out����������������������������������������������������������������000644 �000765 �000024 �00000000421 11446516620 017142� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 8.32 [EXIF, IFD0, Image] 282 - X Resolution: 144 [EXIF, IFD0, Image] 283 - Y Resolution: 144 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_43.out����������������������������������������������������������������000644 �000765 �000024 �00000000445 11605111327 017141� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, ExifIFD, Image] 33434 - Exposure Time: 5.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Center-weighted average [MakerNotes, Canon, Camera] 17 - Metering Mode: Unknown (6) [MakerNotes, Canon, Image] 22 - Exposure Time: 130.8 [MakerNotes, Canon, Camera] 12 - Serial Number: 0560018159 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_44.out����������������������������������������������������������������000644 �000765 �000024 �00000000222 11606346031 017136� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-exif, Image] ApertureValue - Aperture Value: 2.7 [XMP, XMP-exif, Time] DateTimeOriginal - Date/Time Original: 2005:06:09 23:09:27+02:00 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_45.out����������������������������������������������������������������000644 �000765 �000024 �00000000050 11651561175 017146� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Author] 315 - Artist: Pêro ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_46.out����������������������������������������������������������������000644 �000765 �000024 �00000015470 12546457277 017176� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Writer_46_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 9.2 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:53-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:53-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:53-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: ec5278e5f2548e4ce57e1814f3413714 [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Author] 315 - Artist: 7 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 36864 - Exif Version: 0230 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37378 - Aperture Value: 7.0 [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: Uncalibrated [IPTC, IPTC, Other] 120 - ARM Identifier: 7 [IPTC, IPTC, Other] 122 - ARM Version: 7 [IPTC, IPTC, Other] 0 - Envelope Record Version: 4 [IPTC, IPTC, Other] 0 - Application Record Version: 7 [IPTC, IPTC, Other] 151 - Audio Sampling Rate: 000007 [IPTC, IPTC, Other] 152 - Audio Sampling Resolution: 07 [IPTC, IPTC, Other] 153 - Audio Duration: 000007 [IPTC, IPTC, Other] 154 - Audio Outcue: 7 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-iptcExt, Author] AboutCvTermCvId - About Cv Term Cv Id: 7 [XMP, XMP-iptcExt, Author] AboutCvTermCvTermId - About Cv Term Id: 7 [XMP, XMP-iptcExt, Author] AboutCvTermCvTermName - About Cv Term Name: 7 [XMP, XMP-iptcExt, Author] AboutCvTermCvTermRefinedAbout - About Cv Term Refined About: 7 [XMP, XMP-iptcExt, Author] AddlModelInfo - Additional Model Information: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOCircaDateCreated - Artwork Circa Date Created: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOContentDescription - Artwork S Content Description: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOContributionDescription - Artwork Contribution Description: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOCopyrightNotice - Artwork Copyright Notice: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOCreator - Artwork Creator: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOCreatorId - Artwork Creator ID: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOCurrentCopyrightOwnerId - Artwork Copyright Owner ID: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOCurrentCopyrightOwnerName - Artwork Copyright Owner Name: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOCurrentLicensorId - Artwork Licensor ID: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOCurrentLicensorName - Artwork Licensor Name: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOPhysicalDescription - Artwork Physical Description: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOSource - Artwork Source: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOSourceInvNo - Artwork Source Inventory No: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOSourceInvURL - Artwork Source Inv URL: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOStylePeriod - Artwork Style Period: 7 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOTitle - Artwork Title: 7 [XMP, XMP-aas, Image] AffineA - Affine A: 7 [XMP, XMP-aas, Image] AffineB - Affine B: 7 [XMP, XMP-aas, Image] AffineC - Affine C: 7 [XMP, XMP-aas, Image] AffineD - Affine D: 7 [XMP, XMP-aas, Image] AffineX - Affine X: 7 [XMP, XMP-aas, Image] AffineY - Affine Y: 7 [XMP, XMP-apple-fi, Image] AngleInfoRoll - Angle Info Roll: 7 [XMP, XMP-apple-fi, Image] AngleInfoYaw - Angle Info Yaw: 7 [XMP, XMP-aux, Camera] ApproximateFocusDistance - Approximate Focus Distance: 7 [XMP, XMP-cc, Author] attributionName - Attribution Name: 7 [XMP, XMP-cc, Author] attributionURL - Attribution URL: 7 [XMP, XMP-creatorAtom, Image] aeProjectLinkCompositionID - Ae Project Link Composition ID: 7 [XMP, XMP-creatorAtom, Image] aeProjectLinkFullPath - Ae Project Link Full Path: 7 [XMP, XMP-creatorAtom, Image] aeProjectLinkRenderOutputModuleIndex - Ae Project Link Render Output Module Index: 7 [XMP, XMP-creatorAtom, Image] aeProjectLinkRenderQueueItemID - Ae Project Link Render Queue Item ID: 7 [XMP, XMP-creatorAtom, Image] aeProjectLinkRenderTimeStamp - Ae Project Link Render Time Stamp: 7 [XMP, XMP-extensis, Image] Approved - Approved: True [XMP, XMP-extensis, Image] ApprovedBy - Approved By: 7 [XMP, XMP-pdf, Author] Author - Author: 7 [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: 7 [XMP, XMP-prism, Document] acedemicField - Acedemic Field: 7 [XMP, XMP-prism, Document] aggregateIssueNumber - Aggregate Issue Number: 7 [XMP, XMP-prism, Document] aggregationType - Aggregation Type: 7 [XMP, XMP-prism, Document] alternateTitleA-lang - Alternate Title A-lang: 7 [XMP, XMP-prism, Document] alternateTitleA-platform - Alternate Title A-platform: 7 [XMP, XMP-prism, Document] alternateTitleText - Alternate Title Text: 7 [XMP, XMP-pur, Document] agreement - Agreement: 7 [XMP, XMP-xmp, Image] Advisory - Advisory: 7 [XMP, XMP-xmpDM, Image] absPeakAudioFilePath - Abs Peak Audio File Path: 7 [XMP, XMP-xmpDM, Image] album - Album: 7 [XMP, XMP-xmpDM, Image] altTapeName - Alt Tape Name: 7 [XMP, XMP-xmpDM, Image] altTimecodeTimeValue - Alt Timecode Time Value: 7 [XMP, XMP-xmpDM, Image] altTimecodeValue - Alt Timecode Value: 7 [XMP, XMP-xmpDM, Image] audioChannelType - Audio Channel Type: 7.1 [XMP, XMP-xmpDM, Image] audioCompressor - Audio Compressor: 7 [XMP, XMP-xmpDM, Image] audioSampleRate - Audio Sample Rate: 7 [XMP, XMP-crs, Image] AlreadyApplied - Already Applied: True [XMP, XMP-crs, Image] AutoBrightness - Auto Brightness: True [XMP, XMP-crs, Image] AutoContrast - Auto Contrast: True [XMP, XMP-crs, Image] AutoExposure - Auto Exposure: True [XMP, XMP-crs, Image] AutoLateralCA - Auto Lateral CA: 7 [XMP, XMP-crs, Image] AutoShadows - Auto Shadows: True [XMP, XMP-crs, Image] AutoWhiteVersion - Auto White Version: 7 [Composite, Composite, Image] Aperture - Aperture: 7.0 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_47.out����������������������������������������������������������������000644 �000765 �000024 �00000006314 12546457277 017174� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Writer_47_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 2.7 kB [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 836932ef3a5ae22968bb3bb73ab7e497 [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS DIGITAL REBEL [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Author] 315 - Artist: Phil [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 4 [EXIF, ExifIFD, Image] 33437 - F Number: 14.0 [EXIF, ExifIFD, Image] 34855 - ISO: 150 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 9 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 0 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 14.0 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 4.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Average [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 34.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 160 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 120 [EXIF, InteropIFD, Image] 1 - Interoperability Index: THM - DCF thumbnail file [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, InteropIFD, Image] 4097 - Related Image Width: 3072 [EXIF, InteropIFD, Image] 4098 - Related Image Height: 2048 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3443.946188 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3442.016807 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [IPTC, IPTC, Other] 25 - Keywords: Y [IPTC, IPTC, Other] 0 - Application Record Version: 4 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_48.out����������������������������������������������������������������000644 �000765 �000024 �00000003342 12546457277 017173� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 3.8 kB [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Big-endian (Motorola, MM) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: f61c7c28aa8bb54215cff2f36f256b2a [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Author] 315 - Artist: A [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [IPTC, IPTC, Other] 25 - Keywords: A [IPTC, IPTC, Location] 90 - City: A [IPTC, IPTC, Other] 0 - Application Record Version: 4 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-iptcExt, Location] LocationCreatedCity - Location Created City: A [XMP, XMP-dc, Image] subject - Subject: A [XMP, XMP-dc, Image] title - Title: A [XMP, XMP-exif, Camera] FlashFired - Flash Fired: True [Composite, Composite, Other] Flash - Flash: Fired [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_50.out����������������������������������������������������������������000644 �000765 �000024 �00000000213 12077552567 017153� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.15 [XMP, XMP-dc, Other] test - Test: B [XMP, XMP-dc, Image] title - Title: A �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_51.out����������������������������������������������������������������000644 �000765 �000024 �00000057500 12546457277 017172� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Writer_51_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 25 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:43:00-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:43:00-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:43:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] Comment - Comment: © PhotoStudio Unicode comment;; [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 6895be53ef9a287520f400aa17242c09 [File, File, Image] Comment - Comment: a comment [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: A witty caption [EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Adobe Photoshop 7.0 [EXIF, IFD0, Time] 306 - Modify Date: 2004:02:26 09:36:46 [EXIF, IFD0, Author] 315 - Artist: Phil Harvey [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: Copyright 2004 Phil Harvey [EXIF, ExifIFD, Image] 33437 - F Number: 3.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 1.6 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/64 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 100 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 80 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3053 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3053 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 852 [EXIF, IFD1, Image] 514 - Thumbnail Length: 0 [JFIF, JFIF, Image] 0 - JFIF Version: 1.01 [JFIF, JFIF, Image] 2 - Resolution Unit: inches [JFIF, JFIF, Image] 3 - X Resolution: 144 [JFIF, JFIF, Image] 5 - Y Resolution: 144 [JFIF, JFIF, Preview] 16 - Thumbnail Image: (Binary data 1558 bytes) [APP8, SPIFF, Image] 0 - SPIFF Version: 1.2 [APP8, SPIFF, Image] 2 - Profile ID: Continuous-tone Base [APP8, SPIFF, Image] 3 - Color Components: 3 [APP8, SPIFF, Image] 6 - Image Height: 4500 [APP8, SPIFF, Image] 10 - Image Width: 3000 [APP8, SPIFF, Image] 14 - Color Space: YCbCr, ITU-R BT 709, video [APP8, SPIFF, Image] 15 - Bits Per Sample: 8 [APP8, SPIFF, Image] 16 - Compression: JPEG [APP8, SPIFF, Image] 17 - Resolution Unit: inches [APP8, SPIFF, Image] 18 - Y Resolution: 300 [APP8, SPIFF, Image] 22 - X Resolution: 300 [MakerNotes, CIFF, Image] 0 - File Format: JPEG (lossy) [MakerNotes, CIFF, Image] 1 - Target Compression Ratio: 2 [MakerNotes, CIFF, Image] 0 - Image Width: 512 [MakerNotes, CIFF, Image] 1 - Image Height: 384 [MakerNotes, CIFF, Image] 2 - Pixel Aspect Ratio: 1 [MakerNotes, CIFF, Image] 3 - Rotation: 0 [MakerNotes, CIFF, Image] 4 - Component Bit Depth: 8 [MakerNotes, CIFF, Image] 5 - Color Bit Depth: 24 [MakerNotes, CIFF, Image] 6 - Color BW: 1 [MakerNotes, CIFF, Camera] 4106 - Target Image Type: Real-world Subject [MakerNotes, CIFF, Camera] 6148 - Record ID: 0 [MakerNotes, CIFF, Image] 6167 - File Number: 45 [MakerNotes, CIFF, Time] 0 - Date/Time Original: 1998:05:01 21:33:18 [MakerNotes, CIFF, Time] 1 - Time Zone Code: 0 [MakerNotes, CIFF, Time] 2 - Time Zone Info: 0 [MakerNotes, CIFF, Camera] 2070 - Original File Name: C:\DC97\CTG_0000\AUT_0045.JPG [MakerNotes, CIFF, Camera] 2071 - Thumbnail File Name: C:\DC97\CTG_0000\THM_0045.JPG [MakerNotes, CIFF, Camera] 4112 - Shutter Release Method: Single Shot [MakerNotes, CIFF, Camera] 4113 - Shutter Release Timing: Priority on focus [MakerNotes, CIFF, Image] 0 - Flash Guide Number: 0 [MakerNotes, CIFF, Image] 1 - Flash Threshold: 0 [MakerNotes, CIFF, Image] 0 - Exposure Compensation: 1 [MakerNotes, CIFF, Image] 1 - Shutter Speed Value: 1/83 [MakerNotes, CIFF, Image] 2 - Aperture Value: 6.2 [MakerNotes, CIFF, Camera] 6151 - Target Distance Setting: 476 mm [MakerNotes, CIFF, Camera] 6164 - Measured EV: 16.25 [MakerNotes, CIFF, Camera] 2053 - Canon File Description: [MakerNotes, CIFF, Camera] 2069 - Canon Image Type: AUT:Full automatic mode [MakerNotes, CIFF, Camera] 2064 - Owner Name: [MakerNotes, CIFF, Camera] 0 - Make: Canon [MakerNotes, CIFF, Camera] 6 - Camera Model Name: Canon PowerShot A5 [MakerNotes, CIFF, Camera] 4124 - Base ISO: 100 [MakerNotes, CIFF, Camera] 2061 - ROM Operation Mode: USA [MakerNotes, CIFF, Camera] 2059 - Canon Firmware Version: Firmware Version 01.00 [MakerNotes, CIFF, Camera] 1 - Free Bytes: (Binary data 12 bytes) [MakerNotes, CIFF, Image] 0 - Focal Type: Fixed [MakerNotes, CIFF, Image] 1 - Focal Length: 5 mm [MakerNotes, CIFF, Image] 2 - Focal Plane X Size: 5.05 mm [MakerNotes, CIFF, Image] 3 - Focal Plane Y Size: 3.71 mm [MakerNotes, Qualcomm, Camera] aec_current_sensor_luma - AEC Current Sensor Luma: 22 [MakerNotes, Qualcomm, Camera] af_position - AF Position: 26 [MakerNotes, Qualcomm, Camera] aec_current_exp_index - AEC Current Exp Index: 308 [MakerNotes, Qualcomm, Camera] awb_sample_decision - AWB Sample Decision: 7 [MakerNotes, Qualcomm, Camera] asf5_enable - ASF5 Enable: 1 [MakerNotes, Qualcomm, Camera] asf5_filter_mode - ASF5 Filter Mode: 0 [MakerNotes, Qualcomm, Camera] asf5_exposure_index_1 - ASF5 Exposure Index 1: 180 [MakerNotes, Qualcomm, Camera] asf5_exposure_index_2 - ASF5 Exposure Index 2: 270 [MakerNotes, Qualcomm, Camera] asf5_max_exposure_index - ASF5 Max Exposure Index: 290 [MakerNotes, Samsung, Other] 0x0100-name - Embedded Audio File Name: SoundShot_000 [MakerNotes, Samsung, Other] 0x0100 - Embedded Audio File: (Binary data 16 bytes) [APP0, AVI1, Image] 0 - Interleaved Field: Not Interleaved [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 4.73 [XMP, XMP-rdf, Document] about - About: uuid:80056b68-1045-fa97-3401-6f4ed84cd53d [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: UTF-16 (big-endian) encoded XMP [XMP, XMP-dc, Author] rights - Rights: Copyright 2004 Phil Harvey [XMP, XMP-dc, Image] subject - Subject: ExifTool, Test, XMP [XMP, XMP-dc, Image] title - Title: Test IPTC picture [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: My Position [XMP, XMP-photoshop, Author] CaptionWriter - Caption Writer: I wrote it [XMP, XMP-photoshop, Image] Category - Category: 1 [XMP, XMP-photoshop, Location] City - City: Kingston [XMP, XMP-photoshop, Location] Country - Country: Canada [XMP, XMP-photoshop, Author] Credit - Credit: My Credit [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2004:02:26 [XMP, XMP-photoshop, Image] Headline - Headline: No headline [XMP, XMP-photoshop, Image] Instructions - Instructions: What instructions [XMP, XMP-photoshop, Author] Source - Source: I'm the source [XMP, XMP-photoshop, Location] State - State: Ont [XMP, XMP-photoshop, Image] SupplementalCategories - Supplemental Categories: amazing, image, utilities [XMP, XMP-photoshop, Image] TransmissionReference - Transmission Reference: What is a transmission reference? [XMP, XMP-photoshop, Image] Urgency - Urgency: 8 (least urgent) [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: My Job [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:photoshop:4cc7b857-69d0-11d8-8ac4-bb59c92f0d9a [XMP, XMP-xmpRights, Author] Marked - Marked: False [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ [ICC_Profile, ICC-header, Image] 4 - Profile CMM Type: ADBE [ICC_Profile, ICC-header, Image] 8 - Profile Version: 2.1.0 [ICC_Profile, ICC-header, Image] 12 - Profile Class: Display Device Profile [ICC_Profile, ICC-header, Image] 16 - Color Space Data: RGB [ICC_Profile, ICC-header, Image] 20 - Profile Connection Space: XYZ [ICC_Profile, ICC-header, Time] 24 - Profile Date Time: 1999:06:03 00:00:00 [ICC_Profile, ICC-header, Image] 36 - Profile File Signature: acsp [ICC_Profile, ICC-header, Image] 40 - Primary Platform: Apple Computer Inc. [ICC_Profile, ICC-header, Image] 44 - CMM Flags: Not Embedded, Independent [ICC_Profile, ICC-header, Image] 48 - Device Manufacturer: none [ICC_Profile, ICC-header, Image] 52 - Device Model: [ICC_Profile, ICC-header, Image] 56 - Device Attributes: Reflective, Glossy, Positive, Color [ICC_Profile, ICC-header, Image] 64 - Rendering Intent: Perceptual [ICC_Profile, ICC-header, Image] 68 - Connection Space Illuminant: 0.9642 1 0.82491 [ICC_Profile, ICC-header, Image] 80 - Profile Creator: ADBE [ICC_Profile, ICC-header, Image] 84 - Profile ID: 0 [ICC_Profile, ICC_Profile, Image] cprt - Profile Copyright: Copyright 1999 Adobe Systems Incorporated [ICC_Profile, ICC_Profile, Image] desc - Profile Description: Adobe RGB (1998) [ICC_Profile, ICC_Profile, Image] wtpt - Media White Point: 0.95045 1 1.08905 [ICC_Profile, ICC_Profile, Image] bkpt - Media Black Point: 0 0 0 [ICC_Profile, ICC_Profile, Image] rTRC - Red Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] gTRC - Green Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] bTRC - Blue Tone Reproduction Curve: (Binary data 14 bytes) [ICC_Profile, ICC_Profile, Image] rXYZ - Red Matrix Column: 0.60974 0.31111 0.01947 [ICC_Profile, ICC_Profile, Image] gXYZ - Green Matrix Column: 0.20528 0.62567 0.06087 [ICC_Profile, ICC_Profile, Image] bXYZ - Blue Matrix Column: 0.14919 0.06322 0.74457 [FlashPix, FlashPix, Other] 1 - Code Page: Unicode UTF-16, little endian [FlashPix, FlashPix, Other] 268435456 - Used Extension Numbers: 1 [FlashPix, FlashPix, Other] 1 - Extension Name: Screen nail [FlashPix, FlashPix, Other] 2 - Extension Class ID: 10000230-6FC0-11D0-BD01-00609719A180 [FlashPix, FlashPix, Other] 3 - Extension Persistence: Invalidated By Modification [FlashPix, FlashPix, Time] 4 - Extension Create Date: 1999:05:14 21:47:25 [FlashPix, FlashPix, Time] 5 - Extension Modify Date: 1999:05:14 21:47:25 [FlashPix, FlashPix, Other] 6 - Creating Application: Digita [FlashPix, FlashPix, Other] 7 - Extension Description: Presized image for LCD display [FlashPix, FlashPix, Other] 4096 - Storage-Stream Pathname: /.Screen Nail_bd0100609719a180 [FlashPix, FlashPix, Other] Screen Nail - Screen Nail: (Binary data 5917 bytes) [MPF, MPF0, Image] 45056 - MPF Version: 0100 [MPF, MPF0, Image] 45057 - Number Of Images: 2 [MPF, MPImage1, Image] 0.1 - MP Image Flags: Dependent parent image [MPF, MPImage1, Image] 0.2 - MP Image Format: JPEG [MPF, MPImage1, Image] 0.3 - MP Image Type: Baseline MP Primary Image [MPF, MPImage1, Image] 4 - MP Image Length: 5959981 [MPF, MPImage1, Image] 8 - MP Image Start: 0 [MPF, MPImage1, Image] 12 - Dependent Image 1 Entry Number: 2 [MPF, MPImage1, Image] 14 - Dependent Image 2 Entry Number: 0 [MPF, MPImage2, Image] 0.1 - MP Image Flags: Dependent child image [MPF, MPImage2, Image] 0.2 - MP Image Format: JPEG [MPF, MPImage2, Image] 0.3 - MP Image Type: Large Thumbnail (full HD equivalent) [MPF, MPImage2, Image] 4 - MP Image Length: 1039273 [MPF, MPImage2, Image] 8 - MP Image Start: 5945405 [MPF, MPImage2, Image] 12 - Dependent Image 1 Entry Number: 0 [MPF, MPImage2, Image] 14 - Dependent Image 2 Entry Number: 0 [Meta, MetaIFD, Image] 50000 - Film Product Code: 37 [Meta, MetaIFD, Image] 50001 - Image Source EK: 1 [Meta, MetaIFD, Image] 50002 - Capture Conditions PAR: 1 [Meta, MetaIFD, Image] 50009 - Frame Number: 0 [Meta, MetaIFD, Image] 50010 - Film Category: 2 [Meta, MetaIFD, Image] 50011 - Film Gencode: 2 [Meta, MetaIFD, Image] 50012 - Model And Version: Version 9 [Meta, MetaIFD, Image] 50013 - Film Size: 1 [Meta, MetaIFD, Image] 50014 - SBA RGB Shifts: 0 0 0 [Meta, MetaIFD, Image] 50015 - SBA Input Image Colorspace: 3 [Meta, MetaIFD, Image] 50016 - SBA Input Image Bit Depth: 12 12 12 [Meta, MetaIFD, Image] 50017 - SBA Exposure Record: (Binary data 368 bytes) [Meta, MetaIFD, Image] 50018 - User Adj SBA RGB Shifts: (Binary data 5 bytes) [Meta, MetaIFD, Image] 50019 - Image Rotation Status: 0 [Meta, MetaIFD, Image] 50020 - Roll Guid Elements: 00000000000000000000000000000000 [Meta, MetaIFD, Image] 50021 - Metadata Number: 0100 [APP5, RMETA, Image] Sign type - Sign Type: Information [APP5, RMETA, Image] Location - Location: Roundabout [APP5, RMETA, Image] Lit - Lit: No [APP5, RMETA, Image] Condition - Condition: Good [APP5, RMETA, Image] Azimuth - Azimuth: E [XML, MediaJukebox, Image] Tool_Name - Tool Name: Media Center [XML, MediaJukebox, Image] Tool_Version - Tool Version: 19.0.67 [XML, MediaJukebox, Image] People - People: Santa [XML, MediaJukebox, Image] Places - Places: Jamaica [XML, MediaJukebox, Time] Date - Date: 2013:09:01 20:12:19 [XML, MediaJukebox, Image] Album - Album: 2013-09-01 [XML, MediaJukebox, Image] Name - Name: Glass home at night [APP11, JPEG-HDR, Image] ver - JPEG-HDR Version: 11 [APP11, JPEG-HDR, Image] ln0 - Ln0: 0.122262 [APP11, JPEG-HDR, Image] ln1 - Ln1: 2.634655 [APP11, JPEG-HDR, Image] s2n - S2n: 2.269635e+03 [APP11, JPEG-HDR, Image] alp - Alpha: 1.000000 [APP11, JPEG-HDR, Image] bet - Beta: 1.000000 [APP11, JPEG-HDR, Image] cor - Correction Method: 0 [APP11, JPEG-HDR, Preview] RatioImage - Ratio Image: (Binary data 19 bytes) [APP12, PictureInfo, Time] TimeDate - Date/Time Original: 1998:12:31 15:17:20 [APP12, PictureInfo, Image] Shutter - Exposure Time: 1/155 [APP12, PictureInfo, Image] Flash - Flash: Off [APP12, PictureInfo, Image] Resolution - Resolution: 5 [APP12, PictureInfo, Image] Protect - Protect: 0 [APP12, PictureInfo, Image] ContTake - Cont Take: 0 [APP12, PictureInfo, Image] ImageSize - Image Size: 1280x960 [APP12, PictureInfo, Image] ColorMode - Color Mode: 1 [APP12, PictureInfo, Image] FNumber - F Number: 11.0 [APP12, PictureInfo, Image] Zoom - Zoom: 2.1 [APP12, PictureInfo, Image] Macro - Macro: Off [APP12, PictureInfo, Image] LightS - Light S: 0 [APP12, PictureInfo, Image] ExpBias - Exposure Compensation: +2.0 [APP12, PictureInfo, Camera] Type - Camera Type: SR84 [APP12, PictureInfo, Camera] Serial# - Serial Number: #00000001 [APP12, PictureInfo, Camera] Version - Version: v84-71 [APP12, PictureInfo, Camera] ID - ID: AGFA DIGITAL CAMERA [APP12, PictureInfo, Image] PicLen - Pic Len: 561039 [APP12, PictureInfo, Image] ThmLen - Thm Len: 3802 [APP12, PictureInfo, Image] Q - Tag Q: 96 [APP12, PictureInfo, Image] R - Tag R: 293 [APP12, PictureInfo, Image] B - Tag B: 332 [APP12, PictureInfo, Image] s0 - S0: 1e8,0,11b0,6f72,15cf,4225,4225,1050000,a1e0004,0,2f0030d,2f102c5,2880090,0,0 [APP12, PictureInfo, Image] T0 - T0: 11b15600,1290000,e00c0f,2,0,0 [Ducky, Ducky, Image] 1 - Quality: 84% [Ducky, Ducky, Author] 3 - Copyright: Copyright 2004 Phil Harvey [IPTC, IPTC, Other] 0 - Application Record Version: 2 [IPTC, IPTC, Other] 120 - Caption-Abstract: A witty caption [IPTC, IPTC, Author] 122 - Writer-Editor: I wrote it [IPTC, IPTC, Other] 105 - Headline: No headline [IPTC, IPTC, Other] 40 - Special Instructions: What instructions [IPTC, IPTC, Author] 80 - By-line: Phil Harvey [IPTC, IPTC, Author] 85 - By-line Title: My Position [IPTC, IPTC, Author] 110 - Credit: My Credit [IPTC, IPTC, Other] 5 - Object Name: Test IPTC picture [IPTC, IPTC, Time] 55 - Date Created: 2004:02:26 [IPTC, IPTC, Location] 90 - City: Kingston [IPTC, IPTC, Location] 95 - Province-State: Ont [IPTC, IPTC, Location] 101 - Country-Primary Location Name: Canada [IPTC, IPTC, Other] 103 - Original Transmission Reference: What is a transmission reference [IPTC, IPTC, Other] 15 - Category: 1 [IPTC, IPTC, Other] 20 - Supplemental Categories: amazing, image, utilities [IPTC, IPTC, Author] 116 - Copyright Notice: Copyright 2004 Phil Harvey [IPTC, IPTC, Other] 10 - Urgency: 8 (least urgent) [IPTC, IPTC, Author] 115 - Source: I'm the source [IPTC, IPTC, Other] 25 - Keywords: jambalaya [IPTC, IPTC2, Other] 0 - Application Record Version: 2 [IPTC, IPTC3, Other] 0 - Application Record Version: 2 [IPTC, IPTC3, Other] 15 - Category: p [IPTC, IPTC3, Time] 55 - Date Created: 2005:12:23 [IPTC, IPTC3, Other] 5 - Object Name: object name [IPTC, IPTC3, Other] 10 - Urgency: 2 [IPTC, IPTC3, Other] 20 - Supplemental Categories: supp cat [IPTC, IPTC3, Other] 40 - Special Instructions: special instructions [IPTC, IPTC3, Author] 80 - By-line: byline [IPTC, IPTC3, Author] 85 - By-line Title: byline title [IPTC, IPTC3, Location] 90 - City: city [IPTC, IPTC3, Location] 101 - Country-Primary Location Name: country name [IPTC, IPTC3, Other] 103 - Original Transmission Reference: otr [IPTC, IPTC3, Other] 105 - Headline: headline [IPTC, IPTC3, Author] 110 - Credit: credit [IPTC, IPTC3, Author] 115 - Source: source [IPTC, IPTC3, Author] 116 - Copyright Notice: copy freely [IPTC, IPTC3, Other] 120 - Caption-Abstract: ExifTool AFCP test [IPTC, IPTC3, Author] 122 - Writer-Editor: caption writer [IPTC, IPTC3, Location] 95 - Province-State: state [IPTC, IPTC3, Other] 25 - Keywords: jambalaya [Photoshop, Photoshop, Image] 1061 - IPTC Digest: 05ad1770b1a95f1f9788ac995fa647da [Photoshop, Photoshop, Image] 0 - X Resolution: 72 [Photoshop, Photoshop, Image] 2 - Displayed Units X: inches [Photoshop, Photoshop, Image] 4 - Y Resolution: 72 [Photoshop, Photoshop, Image] 6 - Displayed Units Y: inches [Photoshop, Photoshop, Image] 1037 - Global Angle: 30 [Photoshop, Photoshop, Image] 1049 - Global Altitude: 30 [Photoshop, Photoshop, Author] 1034 - Copyright Flag: False [Photoshop, Photoshop, Author] 1035 - URL: http://owl.phy.queensu.ca/~phil/exiftool/ [Photoshop, Photoshop, Image] 0 - Photoshop Quality: 7 [Photoshop, Photoshop, Image] 1 - Photoshop Format: Standard [Photoshop, Photoshop, Image] 2 - Progressive Scans: 3 Scans [APP13, AdobeCM, Image] 0 - Adobe CM Type: 3 [APP14, Adobe, Image] 0 - DCT Encode Version: 100 [APP14, Adobe, Image] 1 - APP14 Flags 0: (none) [APP14, Adobe, Image] 2 - APP14 Flags 1: (none) [APP14, Adobe, Image] 3 - Color Transform: YCbCr [APP15, GraphConv, Image] Q - Quality: 70 [MIE, MIE-Doc, Author] Copyright - Copyright: © 2006 Phil Harvey [MIE, MIE-Main, Other] zmie - Trailer Signature: [PhotoMechanic, PhotoMechanic, Image] 221 - Tagged: Yes [PhotoMechanic, PhotoMechanic, Image] 222 - Color Class: 6 (Typical alt) [PhotoMechanic, PhotoMechanic, Image] 216 - Rotation: 180 [PhotoMechanic, PhotoMechanic, Image] 217 - Crop Left: 438 [PhotoMechanic, PhotoMechanic, Image] 218 - Crop Top: 618 [PhotoMechanic, PhotoMechanic, Image] 219 - Crop Right: 890 [PhotoMechanic, PhotoMechanic, Image] 220 - Crop Bottom: 1072 [CanonVRD, CanonVRD, Image] 2 - VRD Version: 1.0.0 [CanonVRD, CanonVRD, Image] 6 - WB Adj RGGB Levels: 0 0 0 0 [CanonVRD, CanonVRD, Image] 24 - White Balance Adj: Shot Settings [CanonVRD, CanonVRD, Image] 26 - WB Adj Color Temp: 5600 [CanonVRD, CanonVRD, Image] 36 - WB Fine Tune Active: No [CanonVRD, CanonVRD, Image] 40 - WB Fine Tune Saturation: 0 [CanonVRD, CanonVRD, Image] 44 - WB Fine Tune Tone: 0 [CanonVRD, CanonVRD, Image] 46 - Raw Color Adj: Shot Settings [CanonVRD, CanonVRD, Image] 48 - Raw Custom Saturation: 0 [CanonVRD, CanonVRD, Image] 52 - Raw Custom Tone: 0 [CanonVRD, CanonVRD, Image] 56 - Raw Brightness Adj: 0.00 [CanonVRD, CanonVRD, Image] 60 - Tone Curve Property: Shot Settings [CanonVRD, CanonVRD, Image] 122 - Dynamic Range Min: 0 [CanonVRD, CanonVRD, Image] 124 - Dynamic Range Max: 4095 [CanonVRD, CanonVRD, Image] 272 - Tone Curve Active: No [CanonVRD, CanonVRD, Image] 275 - Tone Curve Mode: RGB [CanonVRD, CanonVRD, Image] 276 - Brightness Adj: 0 [CanonVRD, CanonVRD, Image] 277 - Contrast Adj: 0 [CanonVRD, CanonVRD, Image] 278 - Saturation Adj: 100 [CanonVRD, CanonVRD, Image] 286 - Color Tone Adj: 0 [CanonVRD, CanonVRD, Image] 294 - Luminance Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 336 - Luminance Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 345 - Tone Curve Interpolation: Curve [CanonVRD, CanonVRD, Image] 352 - Red Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 394 - Red Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 410 - Green Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 452 - Green Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 468 - Blue Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 510 - Blue Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 526 - RGB Curve Points: (0,0) (255,255) [CanonVRD, CanonVRD, Image] 568 - RGB Curve Limits: 255 0 255 0 [CanonVRD, CanonVRD, Image] 580 - Crop Active: No [CanonVRD, CanonVRD, Image] 582 - Crop Left: 0 [CanonVRD, CanonVRD, Image] 584 - Crop Top: 0 [CanonVRD, CanonVRD, Image] 586 - Crop Width: 0 [CanonVRD, CanonVRD, Image] 588 - Crop Height: 0 [CanonVRD, CanonVRD, Image] 602 - Sharpness Adj: 0 [CanonVRD, CanonVRD, Image] 608 - Crop Aspect Ratio: Free [CanonVRD, CanonVRD, Image] 610 - Constrained Crop Width: 0 [CanonVRD, CanonVRD, Image] 614 - Constrained Crop Height: 0 [CanonVRD, CanonVRD, Image] 618 - Check Mark: Clear [CanonVRD, CanonVRD, Image] 622 - Rotation: 90 [CanonVRD, CanonVRD, Image] 624 - Work Color Space: sRGB [FotoStation, FotoStation, Image] 0 - Original Image Width: 16 [FotoStation, FotoStation, Image] 1 - Original Image Height: 16 [FotoStation, FotoStation, Image] 2 - Color Planes: 3 [FotoStation, FotoStation, Image] 3 - XY Resolution: 9 [FotoStation, FotoStation, Image] 4 - Rotation: 0 [FotoStation, FotoStation, Image] 6 - Crop Left: 24.557% [FotoStation, FotoStation, Image] 7 - Crop Top: 21.25% [FotoStation, FotoStation, Image] 8 - Crop Right: 30.676% [FotoStation, FotoStation, Image] 9 - Crop Bottom: 86.25% [FotoStation, FotoStation, Image] 11 - Crop Rotation: 0 [Composite, Composite, Image] Aperture - Aperture: 3.5 [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 1039273 bytes) [Composite, Composite, Preview] PreviewImage - Preview Image: (Binary data 5777 bytes) [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/155 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] LightValue - Light Value: 10.9 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 6.9 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.004 mm [Composite, Composite, Image] FOV - Field Of View: 47.0 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 6.0 mm (35 mm equivalent: 41.4 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 2.36 m ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_52.out����������������������������������������������������������������000644 �000765 �000024 �00000003426 12554462433 017156� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.00 [File, System, Image] FileName - File Name: Writer_52_failed.xmp [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 1638 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:07:24 12:16:33-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:07:24 12:16:33-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:07:24 12:16:33-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: XMP [File, File, Image] FileTypeExtension - File Type Extension: xmp [File, File, Image] MIMEType - MIME Type: application/rdf+xml [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 10.00 [XMP, XMP-dc, Author] rights - Rights: © Copyright Phil Harvey [XMP, XMP-dc, Author] rights-fr - Rights (fr): © Droit d'auteur Phil Harvey [XMP, XMP-exif, Time] DateTimeDigitized - Date/Time Digitized: 2005:06:09 20:09:27+02:00 [XMP, XMP-exif, Time] DateTimeOriginal - Date/Time Original: 2005:06:09 20:09:27+02:00 [XMP, XMP-xmp, Time] CreateDate - Create Date: 2005:11:21 17:07:14+01:00 [XMP, XMP-xmp, Time] MetadataDate - Metadata Date: 2005:11:21 17:11:31+01:00 [XMP, XMP-xmp, Time] ModifyDate - Modify Date: 2005:11:21 17:07:14+01:00 [XMP, XMP-xmpMM, Other] DerivedFromDocumentID - Derived From Document ID: adobe:docid:photoshop:f481cc67-d8f5-11d9-a31e-a1606d941d83 [XMP, XMP-xmpMM, Other] DerivedFromInstanceID - Derived From Instance ID: adobe:docid:photoshop:f481cc67-d8f5-11d9-a31e-a1606d941d83 [XMP, XMP-xmpMM, Other] DocumentID - Document ID: uuid:7A9636BAA85ADA11B611C7FA524F1F71 [XMP, XMP-xmpMM, Other] InstanceID - Instance ID: uuid:7B9636BAA85ADA11B611C7FA524F1F71 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_53.out����������������������������������������������������������������000644 �000765 �000024 �00000004146 12546457277 017172� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Writer_53_failed.xmp [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 3.6 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:54-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:54-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:54-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0230 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: Uncalibrated [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-aux, Camera] Lens - Lens: 18.0 - 55.0 mm [XMP, XMP-tiff, Image] BitsPerSample - Bits Per Sample: 8 [XMP, XMP-tiff, Image] ImageLength - Image Height: 8 [XMP, XMP-tiff, Image] ImageWidth - Image Width: 8 [XMP, XMP-tiff, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_54.out����������������������������������������������������������������000644 �000765 �000024 �00000000200 12241204071 017124� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Time] 306 - Modify Date: 2003:12:04 06:46:52 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:12:04 06:46:52 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_55.out����������������������������������������������������������������000644 �000765 �000024 �00000000510 12275164704 017150� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Author] 315 - Artist: me [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [IPTC, IPTC, Other] 25 - Keywords: one, two [IPTC, IPTC, Other] 0 - Application Record Version: 4 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_56.out����������������������������������������������������������������000644 �000765 �000024 �00000000314 12275165205 017150� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[IPTC, IPTC, Other] 25 - Keywords: one, two [IPTC, IPTC, Other] 0 - Application Record Version: 4 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.50 [XMP, XMP-dc, Image] title - Title: Test ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_6.out�����������������������������������������������������������������000644 �000765 �000024 �00000026103 12546457277 017105� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: Writer_6_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 5.7 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:51-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:51-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:51-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 27e2cf0c32f8cb445eccf7006bfc9af5 [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS DIGITAL REBEL [EXIF, IFD0, Image] 274 - Orientation: Rotate 180 [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2003:12:04 06:46:52 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 4 [EXIF, ExifIFD, Image] 33437 - F Number: 14.0 [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36868 - Create Date: 2003:12:04 06:46:52 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 9 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 0 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 14.0 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: +999 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 4.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Average [EXIF, ExifIFD, Camera] 37384 - Light Source: Cloudy [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 34.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 160 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 120 [EXIF, InteropIFD, Image] 1 - Interoperability Index: THM - DCF thumbnail file [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, InteropIFD, Image] 4097 - Related Image Width: 3072 [EXIF, InteropIFD, Image] 4098 - Related Image Height: 2048 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3443.946188 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3442.016807 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: mm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, IFD0, Time] 36867 - Date/Time Original: 2005:01:01 00:00:00 [EXIF, IFD0, Image] 51043 - Time Codes: 02:53:49.07 2009-11-19T12:38:35.21-03:00 [MakerNotes, Canon, Camera] 1 - Macro Mode: Unknown (0) [MakerNotes, Canon, Camera] 2 - Self Timer: Off [MakerNotes, Canon, Camera] 3 - Quality: RAW [MakerNotes, Canon, Camera] 4 - Canon Flash Mode: Off [MakerNotes, Canon, Camera] 5 - Continuous Drive: Continuous [MakerNotes, Canon, Camera] 7 - Focus Mode: Manual Focus (3) [MakerNotes, Canon, Camera] 9 - Record Mode: CRW+THM [MakerNotes, Canon, Camera] 10 - Canon Image Size: Large [MakerNotes, Canon, Camera] 11 - Easy Mode: Manual [MakerNotes, Canon, Camera] 12 - Digital Zoom: Unknown (-1) [MakerNotes, Canon, Camera] 13 - Contrast: +1 [MakerNotes, Canon, Camera] 14 - Saturation: +1 [MakerNotes, Canon, Camera] 15 - Sharpness: +1 [MakerNotes, Canon, Camera] 16 - Camera ISO: n/a [MakerNotes, Canon, Camera] 17 - Metering Mode: Center-weighted average [MakerNotes, Canon, Camera] 18 - Focus Range: Not Known [MakerNotes, Canon, Camera] 20 - Canon Exposure Mode: Manual [MakerNotes, Canon, Camera] 22 - Lens Type: n/a [MakerNotes, Canon, Camera] 23 - Max Focal Length: 55 mm [MakerNotes, Canon, Camera] 24 - Min Focal Length: 18 mm [MakerNotes, Canon, Camera] 25 - Focal Units: 1/mm [MakerNotes, Canon, Camera] 26 - Max Aperture: 4 [MakerNotes, Canon, Camera] 27 - Min Aperture: 27 [MakerNotes, Canon, Camera] 28 - Flash Activity: 0 [MakerNotes, Canon, Camera] 29 - Flash Bits: (none) [MakerNotes, Canon, Camera] 36 - Zoom Source Width: 3072 [MakerNotes, Canon, Camera] 37 - Zoom Target Width: 3072 [MakerNotes, Canon, Camera] 41 - Manual Flash Output: n/a [MakerNotes, Canon, Camera] 42 - Color Tone: Normal [MakerNotes, Canon, Image] 1 - Focal Length: 34 mm [MakerNotes, Canon, Image] 2 - Focal Plane X Size: 23.22 mm [MakerNotes, Canon, Image] 3 - Focal Plane Y Size: 15.49 mm [MakerNotes, Canon, Camera] 3 - Canon Flash Info: 100 0 0 0 [MakerNotes, Canon, Image] 1 - Auto ISO: 100 [MakerNotes, Canon, Image] 2 - Base ISO: 100 [MakerNotes, Canon, Image] 3 - Measured EV: -1.25 [MakerNotes, Canon, Image] 4 - Target Aperture: 14 [MakerNotes, Canon, Image] 6 - Exposure Compensation: 0 [MakerNotes, Canon, Image] 7 - White Balance: Auto [MakerNotes, Canon, Image] 8 - Slow Shutter: None [MakerNotes, Canon, Image] 9 - Shot Number In Continuous Burst: 0 [MakerNotes, Canon, Camera] 10 - Optical Zoom Code: n/a [MakerNotes, Canon, Image] 13 - Flash Guide Number: 0 [MakerNotes, Canon, Image] 15 - Flash Exposure Compensation: 0 [MakerNotes, Canon, Image] 16 - Auto Exposure Bracketing: Off [MakerNotes, Canon, Image] 17 - AEB Bracket Value: 0 [MakerNotes, Canon, Image] 18 - Control Mode: Camera Local Control [MakerNotes, Canon, Image] 19 - Focus Distance Upper: inf [MakerNotes, Canon, Image] 20 - Focus Distance Lower: 5.46 m [MakerNotes, Canon, Image] 21 - F Number: 14 [MakerNotes, Canon, Image] 22 - Exposure Time: 128 [MakerNotes, Canon, Image] 23 - Measured EV 2: -1.25 [MakerNotes, Canon, Image] 24 - Bulb Duration: 4 [MakerNotes, Canon, Camera] 26 - Camera Type: EOS Mid-range [MakerNotes, Canon, Image] 27 - Auto Rotate: None [MakerNotes, Canon, Image] 28 - ND Filter: n/a [MakerNotes, Canon, Image] 29 - Self Timer 2: 0 [MakerNotes, Canon, Image] 3 - Bracket Mode: Off [MakerNotes, Canon, Image] 4 - Bracket Value: 0 [MakerNotes, Canon, Image] 5 - Bracket Shot Number: 0 [MakerNotes, Canon, Image] 6 - Canon Image Type: CRW:EOS DIGITAL REBEL CMOS RAW [MakerNotes, Canon, Camera] 7 - Canon Firmware Version: Firmware Version 1.1.1 [MakerNotes, Canon, Camera] 12 - Serial Number: 0560018150 [MakerNotes, Canon, Camera] 21 - Serial Number Format: Format 1 [MakerNotes, Canon, Image] 8 - File Number: 118-1861 [MakerNotes, Canon, Camera] 9 - Owner Name: Phil Harvey [MakerNotes, Canon, Camera] 16 - Canon Model ID: EOS Digital Rebel / 300D / Kiss Digital [MakerNotes, Canon, Image] 14 - Canon File Length: 4480822 [MakerNotes, Canon, Camera] 0 - Canon 0x0000: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [MakerNotes, Canon, Camera] 192 - Canon 0x00c0: 26 331 372 372 177 240 428 429 277 186 510 511 442 [MakerNotes, Canon, Camera] 193 - Canon 0x00c1: 26 299 375 375 170 202 394 395 240 153 453 454 375 [MakerNotes, Canon, Camera] 1 - Measured RGGB: 998 1022 1026 808 [MakerNotes, Canon, Camera] 168 - Canon 0x00a8: 20 5190 5190 7000 5987 3214 3897 6203 5190 5200 [MakerNotes, Canon, Camera] 1 - WB RGGB Levels Auto: 1719 832 831 990 [MakerNotes, Canon, Camera] 5 - WB RGGB Levels Daylight: 1722 832 831 989 [MakerNotes, Canon, Camera] 9 - WB RGGB Levels Shade: 2035 832 831 839 [MakerNotes, Canon, Camera] 13 - WB RGGB Levels Cloudy: 1878 832 831 903 [MakerNotes, Canon, Camera] 17 - WB RGGB Levels Tungsten: 1228 913 912 1668 [MakerNotes, Canon, Camera] 21 - WB RGGB Levels Fluorescent: 1506 842 841 1381 [MakerNotes, Canon, Camera] 25 - WB RGGB Levels Flash: 1933 832 831 895 [MakerNotes, Canon, Camera] 29 - WB RGGB Levels Custom: 1722 832 831 989 [MakerNotes, Canon, Camera] 33 - WB RGGB Levels Kelvin: 1722 832 831 988 [MakerNotes, Canon, Camera] 37 - WB RGGB Black Levels: 124 123 124 123 [MakerNotes, Canon, Camera] 174 - Color Temperature: 5200 [MakerNotes, Canon, Camera] 180 - Color Space: sRGB [MakerNotes, Canon, Camera] 0 - Num AF Points: 7 [MakerNotes, Canon, Camera] 1 - Valid AF Points: 7 [MakerNotes, Canon, Image] 2 - Canon Image Width: 3072 [MakerNotes, Canon, Image] 3 - Canon Image Height: 2048 [MakerNotes, Canon, Camera] 4 - AF Image Width: 3072 [MakerNotes, Canon, Camera] 5 - AF Image Height: 2048 [MakerNotes, Canon, Camera] 6 - AF Area Width: 151 [MakerNotes, Canon, Camera] 7 - AF Area Height: 151 [MakerNotes, Canon, Camera] 8 - AF Area X Positions: 1014 608 0 0 0 -608 -1014 [MakerNotes, Canon, Camera] 9 - AF Area Y Positions: 0 0 -506 0 506 0 0 [MakerNotes, Canon, Camera] 10 - AF Points In Focus: (none) [MakerNotes, Canon, Camera] 19 - Thumbnail Image Valid Area: 0 159 7 112 [MakerNotes, Canon, Camera] 181 - Canon 0x00b5: 10 3 1 2048 1360 [MakerNotes, Canon, Camera] 0 - Canon 0x0000: 0 0 0 0 0 0 3072000 892 2048000 595 65540 262146 [IPTC, IPTC, Other] 15 - Category: IPT [IPTC, IPTC, Other] 0 - Application Record Version: 4 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-dc, Image] description - Description: New description [XMP, XMP-exif, Camera] Contrast - Contrast: High [Composite, Composite, Image] Aperture - Aperture: 14.0 [Composite, Composite, Camera] DriveMode - Drive Mode: Continuous Shooting [Composite, Composite, Camera] ISO - ISO: 100 [Composite, Composite, Camera] Lens - Lens: 18.0 - 55.0 mm [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.6 [Composite, Composite, Camera] ShootingMode - Shooting Mode: Bulb [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 4 [Composite, Composite, Camera] WB_RGGBLevels - WB RGGB Levels: 1719 832 831 990 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.190619 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.019 mm [Composite, Composite, Image] DOF - Depth Of Field: inf (4.31 m - inf) [Composite, Composite, Image] FOV - Field Of View: 36.9 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 34.0 mm (35 mm equivalent: 54.0 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 4.37 m [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Camera] Lens35efl - Lens: 18.0 - 55.0 mm (35 mm equivalent: 28.6 - 87.4 mm) [Composite, Composite, Camera] LensID - Lens ID: Unknown 18-55mm [Composite, Composite, Image] LightValue - Light Value: 5.6 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] RedBalance - Red Balance: 2.067348 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_7.out�����������������������������������������������������������������000644 �000765 �000024 �00000021347 12514720514 017071� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS DIGITAL REBEL [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2003:12:04 06:46:52 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, ExifIFD, Image] 33434 - Exposure Time: 4 [EXIF, ExifIFD, Image] 33437 - F Number: 14.0 [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:12:04 06:46:52 [EXIF, ExifIFD, Time] 36868 - Create Date: 2003:12:04 06:46:52 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 9 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 0 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 14.0 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 4.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Average [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 34.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 160 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 120 [EXIF, InteropIFD, Image] 1 - Interoperability Index: THM - DCF thumbnail file [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, InteropIFD, Image] 4097 - Related Image Width: 3072 [EXIF, InteropIFD, Image] 4098 - Related Image Height: 2048 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3443.946188 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3442.016807 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [MakerNotes, Canon, Camera] 1 - Macro Mode: Unknown (0) [MakerNotes, Canon, Camera] 2 - Self Timer: Off [MakerNotes, Canon, Camera] 3 - Quality: RAW [MakerNotes, Canon, Camera] 4 - Canon Flash Mode: Off [MakerNotes, Canon, Camera] 5 - Continuous Drive: Continuous [MakerNotes, Canon, Camera] 7 - Focus Mode: Manual Focus (3) [MakerNotes, Canon, Camera] 9 - Record Mode: CRW+THM [MakerNotes, Canon, Camera] 10 - Canon Image Size: Large [MakerNotes, Canon, Camera] 11 - Easy Mode: Manual [MakerNotes, Canon, Camera] 12 - Digital Zoom: Unknown (-1) [MakerNotes, Canon, Camera] 13 - Contrast: +1 [MakerNotes, Canon, Camera] 14 - Saturation: +1 [MakerNotes, Canon, Camera] 15 - Sharpness: +1 [MakerNotes, Canon, Camera] 16 - Camera ISO: n/a [MakerNotes, Canon, Camera] 17 - Metering Mode: Center-weighted average [MakerNotes, Canon, Camera] 18 - Focus Range: Not Known [MakerNotes, Canon, Camera] 20 - Canon Exposure Mode: Manual [MakerNotes, Canon, Camera] 22 - Lens Type: n/a [MakerNotes, Canon, Camera] 23 - Max Focal Length: 55 mm [MakerNotes, Canon, Camera] 24 - Min Focal Length: 18 mm [MakerNotes, Canon, Camera] 25 - Focal Units: 1/mm [MakerNotes, Canon, Camera] 26 - Max Aperture: 4 [MakerNotes, Canon, Camera] 27 - Min Aperture: 27 [MakerNotes, Canon, Camera] 28 - Flash Activity: 0 [MakerNotes, Canon, Camera] 29 - Flash Bits: (none) [MakerNotes, Canon, Camera] 36 - Zoom Source Width: 3072 [MakerNotes, Canon, Camera] 37 - Zoom Target Width: 3072 [MakerNotes, Canon, Camera] 41 - Manual Flash Output: n/a [MakerNotes, Canon, Camera] 42 - Color Tone: Normal [MakerNotes, Canon, Image] 1 - Focal Length: 34 mm [MakerNotes, Canon, Image] 2 - Focal Plane X Size: 23.22 mm [MakerNotes, Canon, Image] 3 - Focal Plane Y Size: 15.49 mm [MakerNotes, Canon, Camera] 3 - Canon Flash Info: 100 0 0 0 [MakerNotes, Canon, Image] 1 - Auto ISO: 100 [MakerNotes, Canon, Image] 2 - Base ISO: 100 [MakerNotes, Canon, Image] 3 - Measured EV: -1.25 [MakerNotes, Canon, Image] 4 - Target Aperture: 14 [MakerNotes, Canon, Image] 6 - Exposure Compensation: 0 [MakerNotes, Canon, Image] 7 - White Balance: Auto [MakerNotes, Canon, Image] 8 - Slow Shutter: None [MakerNotes, Canon, Image] 9 - Shot Number In Continuous Burst: 0 [MakerNotes, Canon, Camera] 10 - Optical Zoom Code: n/a [MakerNotes, Canon, Image] 13 - Flash Guide Number: 0 [MakerNotes, Canon, Image] 15 - Flash Exposure Compensation: 0 [MakerNotes, Canon, Image] 16 - Auto Exposure Bracketing: Off [MakerNotes, Canon, Image] 17 - AEB Bracket Value: 0 [MakerNotes, Canon, Image] 18 - Control Mode: Camera Local Control [MakerNotes, Canon, Image] 19 - Focus Distance Upper: inf [MakerNotes, Canon, Image] 20 - Focus Distance Lower: 5.46 m [MakerNotes, Canon, Image] 21 - F Number: 14 [MakerNotes, Canon, Image] 22 - Exposure Time: 128 [MakerNotes, Canon, Image] 23 - Measured EV 2: -1.25 [MakerNotes, Canon, Image] 24 - Bulb Duration: 4 [MakerNotes, Canon, Camera] 26 - Camera Type: EOS Mid-range [MakerNotes, Canon, Image] 27 - Auto Rotate: None [MakerNotes, Canon, Image] 28 - ND Filter: n/a [MakerNotes, Canon, Image] 29 - Self Timer 2: 0 [MakerNotes, Canon, Image] 3 - Bracket Mode: Off [MakerNotes, Canon, Image] 4 - Bracket Value: 0 [MakerNotes, Canon, Image] 5 - Bracket Shot Number: 0 [MakerNotes, Canon, Image] 6 - Canon Image Type: CRW:EOS DIGITAL REBEL CMOS RAW [MakerNotes, Canon, Camera] 7 - Canon Firmware Version: Firmware Version 1.1.1 [MakerNotes, Canon, Camera] 12 - Serial Number: 0560018150 [MakerNotes, Canon, Camera] 21 - Serial Number Format: Format 1 [MakerNotes, Canon, Image] 8 - File Number: 118-1861 [MakerNotes, Canon, Camera] 9 - Owner Name: Phil Harvey [MakerNotes, Canon, Camera] 16 - Canon Model ID: EOS Digital Rebel / 300D / Kiss Digital [MakerNotes, Canon, Image] 14 - Canon File Length: 4480822 [MakerNotes, Canon, Camera] 0 - Canon 0x0000: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [MakerNotes, Canon, Camera] 192 - Canon 0x00c0: 26 331 372 372 177 240 428 429 277 186 510 511 442 [MakerNotes, Canon, Camera] 193 - Canon 0x00c1: 26 299 375 375 170 202 394 395 240 153 453 454 375 [MakerNotes, Canon, Camera] 1 - Measured RGGB: 998 1022 1026 808 [MakerNotes, Canon, Camera] 168 - Canon 0x00a8: 20 5190 5190 7000 5987 3214 3897 6203 5190 5200 [MakerNotes, Canon, Camera] 1 - WB RGGB Levels Auto: 1719 832 831 990 [MakerNotes, Canon, Camera] 5 - WB RGGB Levels Daylight: 1722 832 831 989 [MakerNotes, Canon, Camera] 9 - WB RGGB Levels Shade: 2035 832 831 839 [MakerNotes, Canon, Camera] 13 - WB RGGB Levels Cloudy: 1878 832 831 903 [MakerNotes, Canon, Camera] 17 - WB RGGB Levels Tungsten: 1228 913 912 1668 [MakerNotes, Canon, Camera] 21 - WB RGGB Levels Fluorescent: 1506 842 841 1381 [MakerNotes, Canon, Camera] 25 - WB RGGB Levels Flash: 1933 832 831 895 [MakerNotes, Canon, Camera] 29 - WB RGGB Levels Custom: 1722 832 831 989 [MakerNotes, Canon, Camera] 33 - WB RGGB Levels Kelvin: 1722 832 831 988 [MakerNotes, Canon, Camera] 37 - WB RGGB Black Levels: 124 123 124 123 [MakerNotes, Canon, Camera] 174 - Color Temperature: 5200 [MakerNotes, Canon, Camera] 180 - Color Space: sRGB [MakerNotes, Canon, Camera] 0 - Num AF Points: 7 [MakerNotes, Canon, Camera] 1 - Valid AF Points: 7 [MakerNotes, Canon, Image] 2 - Canon Image Width: 3072 [MakerNotes, Canon, Image] 3 - Canon Image Height: 2048 [MakerNotes, Canon, Camera] 4 - AF Image Width: 3072 [MakerNotes, Canon, Camera] 5 - AF Image Height: 2048 [MakerNotes, Canon, Camera] 6 - AF Area Width: 151 [MakerNotes, Canon, Camera] 7 - AF Area Height: 151 [MakerNotes, Canon, Camera] 8 - AF Area X Positions: 1014 608 0 0 0 -608 -1014 [MakerNotes, Canon, Camera] 9 - AF Area Y Positions: 0 0 -506 0 506 0 0 [MakerNotes, Canon, Camera] 10 - AF Points In Focus: (none) [MakerNotes, Canon, Camera] 19 - Thumbnail Image Valid Area: 0 159 7 112 [MakerNotes, Canon, Camera] 181 - Canon 0x00b5: 10 3 1 2048 1360 [MakerNotes, Canon, Camera] 0 - Canon 0x0000: 0 0 0 0 0 0 3072000 892 2048000 595 65540 262146 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/Writer_9.out�����������������������������������������������������������������000644 �000765 �000024 �00000035465 12546457277 017123� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: Writer_9_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 9.8 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:30 07:42:58-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:30 07:42:58-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:30 07:42:58-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Image] 270 - Image Description: [EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon EOS DIGITAL REBEL [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: E775v1.3u [EXIF, IFD0, Time] 306 - Modify Date: 2003:12:04 06:46:52 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Image] 33434 - Exposure Time: 4 [EXIF, ExifIFD, Image] 33437 - F Number: 14.0 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0221 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2003:12:04 06:46:52 [EXIF, ExifIFD, Time] 36868 - Create Date: 2003:12:04 06:46:52 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 3 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 0 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 14.0 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 4.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Center-weighted average [EXIF, ExifIFD, Camera] 37384 - Light Source: Unknown [EXIF, ExifIFD, Camera] 37385 - Flash: No Flash [EXIF, ExifIFD, Camera] 37386 - Focal Length: 34.0 mm [EXIF, ExifIFD, Image] 37510 - User Comment: [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 160 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 120 [EXIF, InteropIFD, Image] 1 - Interoperability Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Image] 2 - Interoperability Version: 0100 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3443.946154 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3442.016807 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard [EXIF, ExifIFD, Camera] 41992 - Contrast: High [EXIF, ExifIFD, Camera] 41993 - Saturation: High [EXIF, ExifIFD, Camera] 41994 - Sharpness: Hard [EXIF, ExifIFD, Image] 42032 - Owner Name: Phil Harvey [EXIF, ExifIFD, Image] 42033 - Serial Number: 0560018150 [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 300 [EXIF, IFD1, Image] 283 - Y Resolution: 300 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 2436 [EXIF, IFD1, Image] 514 - Thumbnail Length: 28 [MakerNotes, Canon, Camera] 1 - Macro Mode: Unknown (0) [MakerNotes, Canon, Camera] 2 - Self Timer: Off [MakerNotes, Canon, Camera] 3 - Quality: RAW [MakerNotes, Canon, Camera] 4 - Canon Flash Mode: Off [MakerNotes, Canon, Camera] 5 - Continuous Drive: Continuous [MakerNotes, Canon, Camera] 7 - Focus Mode: Manual Focus (3) [MakerNotes, Canon, Camera] 9 - Record Mode: CRW+THM [MakerNotes, Canon, Camera] 10 - Canon Image Size: Large [MakerNotes, Canon, Camera] 11 - Easy Mode: Manual [MakerNotes, Canon, Camera] 12 - Digital Zoom: Unknown (-1) [MakerNotes, Canon, Camera] 13 - Contrast: +1 [MakerNotes, Canon, Camera] 14 - Saturation: +1 [MakerNotes, Canon, Camera] 15 - Sharpness: +1 [MakerNotes, Canon, Camera] 16 - Camera ISO: n/a [MakerNotes, Canon, Camera] 17 - Metering Mode: Center-weighted average [MakerNotes, Canon, Camera] 18 - Focus Range: Not Known [MakerNotes, Canon, Camera] 20 - Canon Exposure Mode: Manual [MakerNotes, Canon, Camera] 22 - Lens Type: n/a [MakerNotes, Canon, Camera] 23 - Max Focal Length: 55 mm [MakerNotes, Canon, Camera] 24 - Min Focal Length: 18 mm [MakerNotes, Canon, Camera] 25 - Focal Units: 1/mm [MakerNotes, Canon, Camera] 26 - Max Aperture: 4 [MakerNotes, Canon, Camera] 27 - Min Aperture: 27 [MakerNotes, Canon, Camera] 28 - Flash Activity: 0 [MakerNotes, Canon, Camera] 29 - Flash Bits: (none) [MakerNotes, Canon, Camera] 36 - Zoom Source Width: 3072 [MakerNotes, Canon, Camera] 37 - Zoom Target Width: 3072 [MakerNotes, Canon, Camera] 41 - Manual Flash Output: n/a [MakerNotes, Canon, Camera] 42 - Color Tone: Normal [MakerNotes, Canon, Image] 1 - Focal Length: 34 mm [MakerNotes, Canon, Image] 2 - Focal Plane X Size: 23.22 mm [MakerNotes, Canon, Image] 3 - Focal Plane Y Size: 15.49 mm [MakerNotes, Canon, Image] 1 - Auto ISO: 100 [MakerNotes, Canon, Image] 2 - Base ISO: 100 [MakerNotes, Canon, Image] 3 - Measured EV: -1.25 [MakerNotes, Canon, Image] 4 - Target Aperture: 14 [MakerNotes, Canon, Image] 6 - Exposure Compensation: 0 [MakerNotes, Canon, Image] 7 - White Balance: Auto [MakerNotes, Canon, Image] 8 - Slow Shutter: None [MakerNotes, Canon, Image] 9 - Shot Number In Continuous Burst: 0 [MakerNotes, Canon, Camera] 10 - Optical Zoom Code: n/a [MakerNotes, Canon, Image] 13 - Flash Guide Number: 0 [MakerNotes, Canon, Image] 15 - Flash Exposure Compensation: 0 [MakerNotes, Canon, Image] 16 - Auto Exposure Bracketing: Off [MakerNotes, Canon, Image] 17 - AEB Bracket Value: 0 [MakerNotes, Canon, Image] 18 - Control Mode: Camera Local Control [MakerNotes, Canon, Image] 19 - Focus Distance Upper: inf [MakerNotes, Canon, Image] 20 - Focus Distance Lower: 5.46 m [MakerNotes, Canon, Image] 21 - F Number: 14 [MakerNotes, Canon, Image] 22 - Exposure Time: 128 [MakerNotes, Canon, Image] 23 - Measured EV 2: -1.25 [MakerNotes, Canon, Image] 24 - Bulb Duration: 4 [MakerNotes, Canon, Camera] 26 - Camera Type: EOS Mid-range [MakerNotes, Canon, Image] 27 - Auto Rotate: None [MakerNotes, Canon, Image] 28 - ND Filter: n/a [MakerNotes, Canon, Image] 29 - Self Timer 2: 0 [MakerNotes, Canon, Image] 3 - Bracket Mode: Off [MakerNotes, Canon, Image] 4 - Bracket Value: 0 [MakerNotes, Canon, Image] 5 - Bracket Shot Number: 0 [MakerNotes, Canon, Image] 6 - Canon Image Type: CRW:EOS DIGITAL REBEL CMOS RAW [MakerNotes, Canon, Camera] 7 - Canon Firmware Version: Firmware Version 1.1.1 [MakerNotes, Canon, Camera] 12 - Serial Number: 0560018150 [MakerNotes, Canon, Camera] 21 - Serial Number Format: Format 1 [MakerNotes, Canon, Image] 8 - File Number: 118-1861 [MakerNotes, Canon, Camera] 9 - Owner Name: Phil Harvey [MakerNotes, Canon, Camera] 16 - Canon Model ID: EOS Digital Rebel / 300D / Kiss Digital [MakerNotes, Canon, Image] 14 - Canon File Length: 4480822 [MakerNotes, Canon, Camera] 1 - Measured RGGB: 998 1022 1026 808 [MakerNotes, Canon, Camera] 1 - WB RGGB Levels Auto: 1719 832 831 990 [MakerNotes, Canon, Camera] 5 - WB RGGB Levels Daylight: 1722 832 831 989 [MakerNotes, Canon, Camera] 9 - WB RGGB Levels Shade: 2035 832 831 839 [MakerNotes, Canon, Camera] 13 - WB RGGB Levels Cloudy: 1878 832 831 903 [MakerNotes, Canon, Camera] 17 - WB RGGB Levels Tungsten: 1228 913 912 1668 [MakerNotes, Canon, Camera] 21 - WB RGGB Levels Fluorescent: 1506 842 841 1381 [MakerNotes, Canon, Camera] 25 - WB RGGB Levels Flash: 1933 832 831 895 [MakerNotes, Canon, Camera] 29 - WB RGGB Levels Custom: 1722 832 831 989 [MakerNotes, Canon, Camera] 33 - WB RGGB Levels Kelvin: 1722 832 831 988 [MakerNotes, Canon, Camera] 37 - WB RGGB Black Levels: 124 123 124 123 [MakerNotes, Canon, Camera] 174 - Color Temperature: 5200 [MakerNotes, Canon, Camera] 180 - Color Space: sRGB [MakerNotes, Canon, Camera] 0 - Num AF Points: 7 [MakerNotes, Canon, Camera] 1 - Valid AF Points: 7 [MakerNotes, Canon, Image] 2 - Canon Image Width: 3072 [MakerNotes, Canon, Image] 3 - Canon Image Height: 2048 [MakerNotes, Canon, Camera] 4 - AF Image Width: 3072 [MakerNotes, Canon, Camera] 5 - AF Image Height: 2048 [MakerNotes, Canon, Camera] 6 - AF Area Width: 151 [MakerNotes, Canon, Camera] 7 - AF Area Height: 151 [MakerNotes, Canon, Camera] 8 - AF Area X Positions: 1014 608 0 0 0 -608 -1014 [MakerNotes, Canon, Camera] 9 - AF Area Y Positions: 0 0 -506 0 506 0 0 [MakerNotes, Canon, Camera] 10 - AF Points In Focus: (none) [MakerNotes, Canon, Camera] 19 - Thumbnail Image Valid Area: 0 159 7 112 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.94 [XMP, XMP-aux, Camera] Lens - Lens: 18.0 - 55.0 mm [XMP, XMP-exif, Image] ComponentsConfiguration - Components Configuration: Y, Cb, Cr, - [XMP, XMP-exif, Image] CompressedBitsPerPixel - Compressed Bits Per Pixel: 9 [XMP, XMP-exif, Camera] FlashFired - Flash Fired: False [XMP, XMP-exif, Camera] FlashFunction - Flash Function: False [XMP, XMP-exif, Camera] FlashMode - Flash Mode: Unknown [XMP, XMP-exif, Camera] FlashRedEyeMode - Flash Red Eye Mode: False [XMP, XMP-exif, Camera] FlashReturn - Flash Return: No return detection [XMP, XMP-exifEX, Image] InteroperabilityIndex - Interoperability Index: THM - DCF thumbnail file [XMP, XMP-pmi, Image] sequenceNumber - Sequence Number: 0 [XMP, XMP-tiff, Image] BitsPerSample - Bits Per Sample: 8 [XMP, XMP-tiff, Image] ImageLength - Image Height: 8 [XMP, XMP-tiff, Image] ImageWidth - Image Width: 8 [XMP, XMP-tiff, Image] YCbCrPositioning - Y Cb Cr Positioning: Centered [XMP, XMP-tiff, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [ICC_Profile, ICC-header, Image] 4 - Profile CMM Type: Lino [ICC_Profile, ICC-header, Image] 8 - Profile Version: 2.1.0 [ICC_Profile, ICC-header, Image] 12 - Profile Class: Display Device Profile [ICC_Profile, ICC-header, Image] 16 - Color Space Data: RGB [ICC_Profile, ICC-header, Image] 20 - Profile Connection Space: XYZ [ICC_Profile, ICC-header, Time] 24 - Profile Date Time: 1998:02:09 06:49:00 [ICC_Profile, ICC-header, Image] 36 - Profile File Signature: acsp [ICC_Profile, ICC-header, Image] 40 - Primary Platform: Microsoft Corporation [ICC_Profile, ICC-header, Image] 44 - CMM Flags: Not Embedded, Independent [ICC_Profile, ICC-header, Image] 48 - Device Manufacturer: IEC [ICC_Profile, ICC-header, Image] 52 - Device Model: sRGB [ICC_Profile, ICC-header, Image] 56 - Device Attributes: Reflective, Glossy, Positive, Color [ICC_Profile, ICC-header, Image] 64 - Rendering Intent: Perceptual [ICC_Profile, ICC-header, Image] 68 - Connection Space Illuminant: 0.9642 1 0.82491 [ICC_Profile, ICC-header, Image] 80 - Profile Creator: HP [ICC_Profile, ICC-header, Image] 84 - Profile ID: 0 [ICC_Profile, ICC_Profile, Image] cprt - Profile Copyright: Copyright (c) 1998 Hewlett-Packard Company [ICC_Profile, ICC_Profile, Image] desc - Profile Description: sRGB IEC61966-2.1 [ICC_Profile, ICC_Profile, Image] wtpt - Media White Point: 0.95045 1 1.08905 [ICC_Profile, ICC_Profile, Image] bkpt - Media Black Point: 0 0 0 [ICC_Profile, ICC_Profile, Image] rXYZ - Red Matrix Column: 0.43607 0.22249 0.01392 [ICC_Profile, ICC_Profile, Image] gXYZ - Green Matrix Column: 0.38515 0.71687 0.09708 [ICC_Profile, ICC_Profile, Image] bXYZ - Blue Matrix Column: 0.14307 0.06061 0.7141 [ICC_Profile, ICC_Profile, Camera] dmnd - Device Mfg Desc: IEC http://www.iec.ch [ICC_Profile, ICC_Profile, Camera] dmdd - Device Model Desc: IEC 61966-2.1 Default RGB colour space - sRGB [ICC_Profile, ICC_Profile, Image] vued - Viewing Cond Desc: Reference Viewing Condition in IEC61966-2.1 [ICC_Profile, ICC-view, Image] 8 - Viewing Cond Illuminant: 19.6445 20.3718 16.8089 [ICC_Profile, ICC-view, Image] 20 - Viewing Cond Surround: 3.92889 4.07439 3.36179 [ICC_Profile, ICC-view, Image] 32 - Viewing Cond Illuminant Type: D50 [ICC_Profile, ICC_Profile, Image] lumi - Luminance: 76.03647 80 87.12462 [ICC_Profile, ICC-meas, Image] 8 - Measurement Observer: CIE 1931 [ICC_Profile, ICC-meas, Image] 12 - Measurement Backing: 0 0 0 [ICC_Profile, ICC-meas, Image] 24 - Measurement Geometry: Unknown [ICC_Profile, ICC-meas, Image] 28 - Measurement Flare: 0.999% [ICC_Profile, ICC-meas, Image] 32 - Measurement Illuminant: D65 [ICC_Profile, ICC_Profile, Image] tech - Technology: Cathode Ray Tube Display [ICC_Profile, ICC_Profile, Image] rTRC - Red Tone Reproduction Curve: (Binary data 2060 bytes) [ICC_Profile, ICC_Profile, Image] gTRC - Green Tone Reproduction Curve: (Binary data 2060 bytes) [ICC_Profile, ICC_Profile, Image] bTRC - Blue Tone Reproduction Curve: (Binary data 2060 bytes) [Composite, Composite, Image] Aperture - Aperture: 14.0 [Composite, Composite, Camera] DriveMode - Drive Mode: Continuous Shooting [Composite, Composite, Other] Flash - Flash: No Flash [Composite, Composite, Camera] ISO - ISO: 100 [Composite, Composite, Camera] Lens - Lens: 18.0 - 55.0 mm [Composite, Composite, Camera] ScaleFactor35efl - Scale Factor To 35 mm Equivalent: 1.6 [Composite, Composite, Camera] ShootingMode - Shooting Mode: Bulb [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 4 [Composite, Composite, Preview] ThumbnailImage - Thumbnail Image: (Binary data 28 bytes) [Composite, Composite, Camera] WB_RGGBLevels - WB RGGB Levels: 1719 832 831 990 [Composite, Composite, Camera] BlueBalance - Blue Balance: 1.190619 [Composite, Composite, Camera] CircleOfConfusion - Circle Of Confusion: 0.019 mm [Composite, Composite, Image] DOF - Depth Of Field: inf (4.21 m - inf) [Composite, Composite, Image] FOV - Field Of View: 37.7 deg [Composite, Composite, Camera] FocalLength35efl - Focal Length: 34.0 mm (35 mm equivalent: 52.7 mm) [Composite, Composite, Camera] HyperfocalDistance - Hyperfocal Distance: 4.26 m [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Camera] Lens35efl - Lens: 18.0 - 55.0 mm (35 mm equivalent: 27.9 - 85.3 mm) [Composite, Composite, Camera] LensID - Lens ID: Unknown 18-55mm [Composite, Composite, Image] LightValue - Light Value: 5.6 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] RedBalance - Red Balance: 2.067348 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP.t������������������������������������������������������������������������000644 �000765 �000024 �00000047274 12636265557 015516� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/XMP.t". BEGIN { $| = 1; print "1..45\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # definitions for user-defined tag test (#26) %Image::ExifTool::UserDefined = ( 'Image::ExifTool::XMP::Main' => { myXMPns => { SubDirectory => { TagTable => 'Image::ExifTool::UserDefined::myXMPns', # (see the definition of this table below) }, }, }, ); use vars %Image::ExifTool::UserDefined::myXMPns; # avoid "typo" warning %Image::ExifTool::UserDefined::myXMPns = ( GROUPS => { 0 => 'XMP', 1 => 'XMP-myXMPns'}, NAMESPACE => { 'myXMPns' => 'http://ns.exiftool.ca/t/XMP.t' }, WRITABLE => 'string', ATestTag => { List => 'Bag', Resource => 1 }, BTestTag => { Struct => { TYPE => 'myXMPns:SomeFunnyType', Field1 => { Writable => 'lang-alt', List => 'Bag' }, } }, BTestTagField1 => { Name => 'Renamed', Flat => 1 }, ); # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::XMP; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'XMP'; my $testnum = 1; # test 2: Extract information from XMP.jpg { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/XMP.jpg', {Duplicates => 1}); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 3: Test rewriting everything with slightly different values { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Duplicates => 1, Binary => 1, List => 1); my $info = $exifTool->ImageInfo('t/images/XMP.jpg'); my $tag; foreach $tag (keys %$info) { my $group = $exifTool->GetGroup($tag); my $val = $$info{$tag}; if (ref $val eq 'ARRAY') { push @$val, 'v2'; } elsif (ref $val eq 'SCALAR') { $val = 'v2'; } elsif ($val =~ /^\d+(\.\d*)?$/) { # (add extra .001 to avoid problem with aperture of 4.85 # getting rounded to 4.8 or 4.9 and causing failed tests) $val += ($val / 10) + 1.001; $1 or $val = int($val); } else { $val .= '-v2'; } # eat return values so warning don't get printed my @x = $exifTool->SetNewValue($tag, $val, Group=>$group, Replace=>1); } # also try writing a few specific tags $exifTool->SetNewValue(CreatorCountry => 'Canada'); $exifTool->SetNewValue(CodedCharacterSet => 'UTF8', Protected => 1); undef $info; my $image; my $ok = writeInfo($exifTool,'t/images/XMP.jpg',\$image); # this is effectively what the RHEL 3 UTF8 LANG problem does: # $image = pack("U*", unpack("C*", $image)); my $exifTool2 = new Image::ExifTool; $exifTool2->Options(Duplicates => 1); $info = $exifTool2->ImageInfo(\$image); my $testfile = "t/${testname}_${testnum}_failed.jpg"; if (check($exifTool2, $info, $testname, $testnum) and $ok) { unlink $testfile; } else { # save bad file open(TESTFILE,">$testfile"); binmode(TESTFILE); print TESTFILE $image; close(TESTFILE); print 'not '; } print "ok $testnum\n"; } # tests 4/5: Test extracting then reading XMP data as a block { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/XMP.jpg','XMP'); print 'not ' unless $$info{XMP}; print "ok $testnum\n"; ++$testnum; my $pass; if ($$info{XMP}) { $info = $exifTool->ImageInfo($$info{XMP}); $pass = check($exifTool, $info, $testname, $testnum); } print 'not ' unless $pass; print "ok $testnum\n"; } # test 6: Test copying information to a new XMP data file { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->SetNewValuesFromFile('t/images/XMP.jpg'); my $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; my $ok = writeInfo($exifTool,undef,$testfile); my $info = $exifTool->ImageInfo($testfile); if (check($exifTool, $info, $testname, $testnum) and $ok) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 7: Test rewriting CS2 XMP information { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; $exifTool->SetNewValue(Label => 'Blue'); $exifTool->SetNewValue(Rating => 3); $exifTool->SetNewValue(Subject => q{char test: & > < ' "}, AddValue => 1); $exifTool->SetNewValue('Rights' => "\xc2\xa9 Copyright Someone Else"); my $ok = writeInfo($exifTool,'t/images/XMP.xmp',$testfile); print 'not ' unless testCompare("t/XMP_$testnum.out",$testfile,$testnum) and $ok; print "ok $testnum\n"; } # test 8-11: Test reading/writing XMP with blank nodes and some problems that need correcting { my $file; foreach $file ('XMP2.xmp', 'XMP3.xmp') { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo("t/images/$file", {Duplicates => 1}); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; ++$testnum; my $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; $exifTool->SetNewValue('XMP:Creator' => 'Phil', AddValue => 1); $exifTool->SetNewValue('manifestplacedXResolution' => 1); $exifTool->SetNewValue('attributionname' => 'something else'); $exifTool->WriteInfo("t/images/$file", $testfile); my $err = $exifTool->GetValue('Error'); warn "\n $err\n" if $err; print 'not ' unless testCompare("t/XMP_$testnum.out",$testfile,$testnum); print "ok $testnum\n"; } } # tests 12-17: Test writing/deleting XMP alternate languages { my @writeList = ( [ ['Rights-x-default' => "\xc2\xa9 Copyright Another One"] ], # should overwrite x-default only [ ['Rights-de-DE' => "\xc2\xa9 Urheberrecht Phil Harvey"] ], # should create de-DE only [ ['Rights-x-default' => undef] ], # should delete x-default only [ ['Rights-fr' => undef] ], # should delete fr only [ ['Title-fr' => 'Test fr title'] ],# should not create x-default [ ['Title-fr' => 'Test fr title'], ['Title-x-default' => 'dTitle'] ],# should create x-default before fr ); my $writeListRef; foreach $writeListRef (@writeList) { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; print 'not ' unless writeCheck($writeListRef, $testname, $testnum, 't/images/XMP.xmp', ['XMP-dc:*']); print "ok $testnum\n"; } } # test 18: Delete some family 1 XMP groups { ++$testnum; my @writeInfo = ( [ 'xmp-xmpmm:all' => undef ], [ 'XMP-PHOTOSHOP:all' => undef ], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/XMP.jpg', ['XMP:all']); print "ok $testnum\n"; } # test 19-20: Copy from XMP to EXIF with and without PrintConv enabled { my $exifTool = new Image::ExifTool; while ($testnum < 20) { ++$testnum; my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->SetNewValue(); $exifTool->SetNewValuesFromFile('t/images/XMP.xmp', 'XMP:all>EXIF:all'); my $ok = writeInfo($exifTool, "t/images/Writer.jpg", $testfile); my $info = $exifTool->ImageInfo($testfile, 'EXIF:all'); if (check($exifTool, $info, $testname, $testnum) and $ok) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; $exifTool->Options(PrintConv => 0); } } # test 21-22: Copy from EXIF to XMP with and without PrintConv enabled { my $exifTool = new Image::ExifTool; while ($testnum < 22) { ++$testnum; my $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; $exifTool->SetNewValue(); $exifTool->SetNewValuesFromFile('t/images/Canon.jpg', 'EXIF:* > XMP:*'); my $ok = writeInfo($exifTool, undef, $testfile); my $info = $exifTool->ImageInfo($testfile, 'XMP:*'); if (check($exifTool, $info, $testname, $testnum) and $ok) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; $exifTool->Options(PrintConv => 0); } } # test 23: Delete all tags except two specific XMP family 1 groups { ++$testnum; my @writeInfo = ( [ 'all' => undef ], [ 'xmp-dc:all' => undef, Replace => 2 ], [ 'xmp-xmprights:all' => undef, Replace => 2 ], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/XMP.jpg', ['XMP:all']); print "ok $testnum\n"; } # test 24: Delete all tags except XMP { ++$testnum; my @writeInfo = ( [ 'all' => undef ], [ 'xmp:all' => undef, Replace => 2 ], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/XMP.jpg', ['-file:all']); print "ok $testnum\n"; } # test 25: Extract information from SVG image { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/XMP.svg', {Duplicates => 1}); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 26: Test creating a variety of XMP information # (including x:xmptk, rdf:about and rdf:resource attributes) { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; my @writeInfo = ( [ 'XMP-x:XMPToolkit' => "What's this?", Protected => 1 ], [ 'XMP-rdf:About' => "http://www.exiftool.ca/t/$testname.t#$testnum", Protected => 1 ], [ 'XMP:ImageType' => 'Video' ], [ 'LicenseeImageNotes-en' => 'english notes' ], [ 'LicenseeImageNotes-de' => 'deutsche anmerkungen' ], [ 'LicenseeImageNotes' => 'default notes' ], [ 'LicenseeName' => 'Phil' ], [ 'CopyrightStatus' => 'public' ], [ 'Custom1-en' => 'a' ], [ 'Custom1-en' => 'b' ], [ 'ATestTag' => "http://www.exiftool.ca/t/$testname.t#$testnum-one" ], [ 'ATestTag' => "http://www.exiftool.ca/t/$testname.t#$testnum-two" ], ); $exifTool->SetNewValue(@$_) foreach @writeInfo; my $ok = writeInfo($exifTool, undef, $testfile); print 'not ' unless testCompare("t/XMP_$testnum.out",$testfile,$testnum) and $ok; print "ok $testnum\n"; } # test 27: Extract information from exiftool RDF/XML output file { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/XMP.xml', {Duplicates => 1}); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 28: Write information to exiftool RDF/XML output file { ++$testnum; my @writeInfo = ( [ 'all' => undef ], [ 'ifd0:all' => undef, Replace => 2 ], [ 'XML-file:all' => undef, Replace => 2 ], [ 'author' => 'Phil' ], ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/XMP.xml'); print "ok $testnum\n"; } # test 29: Rewrite extended XMP segment { ++$testnum; my @writeInfo = ( [ 'author' => 'Test' ] ); print 'not ' unless writeCheck(\@writeInfo, $testname, $testnum, 't/images/ExtendedXMP.jpg'); print "ok $testnum\n"; } # test 30: Test mass copy with deletion of specific XMP family 1 groups { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.out"; unlink $testfile; $exifTool->SetNewValuesFromFile('t/images/XMP.jpg'); $exifTool->SetNewValue('xmp-exif:all'); $exifTool->SetNewValue('XMP-TIFF:*'); $exifTool->WriteInfo(undef,$testfile,'XMP'); #(also test output file type option) print 'not ' unless testCompare("t/XMP_$testnum.out",$testfile,$testnum); print "ok $testnum\n"; } # test 31: Extract structured information { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/XMP4.xmp', {Struct => 1}); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # tests 32-34: Conditionally add XMP lang-alt tag { # write title only if it doesn't exist ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile; $exifTool->SetNewValue('XMP-dc:Title-de' => '', DelValue => 1); $exifTool->SetNewValue('XMP-dc:Title-de' => 'A'); my $ok = writeInfo($exifTool,'t/images/Writer.jpg',$testfile); my $info = $exifTool->ImageInfo($testfile,'XMP:*'); print 'not ' unless check($exifTool, $info, $testname, $testnum) and $ok; print "ok $testnum\n"; # try again when title already exists ++$testnum; my $testfile2 = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile2; $exifTool->SetNewValue('XMP-dc:Title-de' => 'B'); $exifTool->WriteInfo($testfile,$testfile2); $info = $exifTool->ImageInfo($testfile2,'XMP:*'); if (check($exifTool, $info, $testname, $testnum, 32)) { unlink $testfile2 } else { print 'not '; } print "ok $testnum\n"; # one final time replacing an existing title ++$testnum; $testfile2 = "t/${testname}_${testnum}_failed.jpg"; unlink $testfile2; $exifTool->SetNewValue('XMP-dc:Title-de' => 'A', DelValue => 1); $exifTool->SetNewValue('XMP-dc:Title-de' => 'C'); $ok = writeInfo($exifTool,$testfile,$testfile2); $info = $exifTool->ImageInfo($testfile2,'XMP:*'); if (check($exifTool, $info, $testname, $testnum) and $ok) { unlink $testfile; unlink $testfile2 } else { print 'not '; } print "ok $testnum\n"; } # test 35: Test various features of writing structured information { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; my @writeInfo = ( # write as flattened string [ HierarchicalKeywords => '{keyWORD=A-1,childREN={keyword=A-2}}' ], # write as HASH reference [ HierarchicalKeywords => [{kEyWoRd=>'B-1', cHiLdReN=>{keyword=>'B-2'}},{keyword=>'C-1'}] ], # write a type'd structure [ licensee => {licenseename=>'Phil'} ], # write a region, including a 'seeAlso' resource [ 'RegionList', { Area => {X=>0,Y=>0,W=>8,H=>8}, Name => 'Region 1', type => 'Face', seeAlso => 'plus:Licensee', }], # write alternate language structure elements [ ArtworkOrObject => "{AOTitle=test,aotitle-de=pr\xc3\xbcfung,AOTitle_FR=\xc3\xa9preuve}" ], # disable print conversion for a single structure element [ 'XMP:Flash' => '{Return=no,mode#=2}' ], # write a complex user-defined lang-alt structure [ BTestTag => "{Field1-en-CA=[eh?],Field1-en-US=[huh?,groovy],Field1-fr=[,ing\xc3\xa9nieux]}" ], # write some dynamic structure elements [ RegionList => { Extensions => { # may mix-and-match flattened and structured tags when writing!... 'XMP-exif:FlashReturn' => 'not', # flattened tag with group name Flash => { 'Mode#' => 1 }, # structured tag with disabled conversion 'UsageTerms-fr' => 'libre', # lang-alt tag 'ArtworkTitle-de' => "verf\xc3\xa4nglich", # renamed lang-alt tag in a list Renamed => 'this is wild', # user-defined renamed flattened tag with TYPE }}], ); $exifTool->SetNewValue(@$_) foreach @writeInfo; my $ok = writeInfo($exifTool,undef,$testfile); print 'not ' unless testCompare("t/images/XMP5.xmp",$testfile,$testnum) and $ok; print "ok $testnum\n"; } # tests 36-37: Test reading structures with and without the Struct option { my $i; for ($i=0; $i<2; ++$i) { ++$testnum; my $exifTool = new Image::ExifTool; $exifTool->Options(Struct => 1 - $i); $exifTool->Options(Escape => 'HTML'); # test escaping of structure fields too my $info = $exifTool->ImageInfo("t/images/XMP5.xmp"); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } } # test 38: Copy complex structured information { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; $exifTool->SetNewValuesFromFile('t/images/XMP5.xmp', 'xmp:all'); my $ok = writeInfo($exifTool,undef,$testfile); print 'not ' unless testCompare("t/images/XMP5.xmp",$testfile,$testnum) and $ok; print "ok $testnum\n"; } # test 39: Extract information from an INX file { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/XMP.inx', {Duplicates => 1}); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 40: Copy by flattened tag name and structure at the same time { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; $exifTool->SetNewValuesFromFile('t/images/XMP5.xmp', 'HierarchicalKeywords1', 'Licensee'); my $ok = writeInfo($exifTool,undef,$testfile); my $info = $exifTool->ImageInfo($testfile, 'XMP:*'); if (check($exifTool, $info, $testname, $testnum) and $ok) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 41: Rest writing/reading all DarwinCore tags { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; $exifTool->SetNewValue('xmp-dwc:*' => 2013); my $ok = writeInfo($exifTool, undef, $testfile); my $info = $exifTool->ImageInfo($testfile, {Duplicates => 1}); if (check($exifTool, $info, $testname, $testnum) and $ok) { unlink $testfile; } else { print 'not '; } print "ok $testnum\n"; } # test 42: Read extended XMP { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/ExtendedXMP.jpg', 'xmp:all'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 43: Read XMP with unusual namespace prefixes { ++$testnum; my $exifTool = new Image::ExifTool; my $info = $exifTool->ImageInfo('t/images/XMP6.xmp', 'xmp:all'); print 'not ' unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } # test 44: Write XMP with unusual namespace prefixes { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; $exifTool->SetNewValue('xmp-dc:subject' => 'changed'); $exifTool->WriteInfo("t/images/XMP6.xmp", $testfile); my $err = $exifTool->GetValue('Error'); warn "\n $err\n" if $err; print 'not ' unless testCompare("t/XMP_$testnum.out",$testfile,$testnum); print "ok $testnum\n"; } # test 45: Write empty structures { ++$testnum; my $exifTool = new Image::ExifTool; my $testfile = "t/${testname}_${testnum}_failed.xmp"; unlink $testfile; $exifTool->SetNewValue('regioninfo' => '{RegionList=[,]}'); $exifTool->SetNewValue('xmp:flash' => '{}'); $exifTool->WriteInfo(undef, $testfile); print 'not ' unless testCompare("t/XMP_$testnum.out",$testfile,$testnum); print "ok $testnum\n"; } # end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_10.out�������������������������������������������������������������������000644 �000765 �000024 �00000005414 12546457277 016352� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: XMP3.xmp [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 2.2 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2014:08:21 09:16:26-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:24-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:55-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: XMP [File, File, Image] FileTypeExtension - File Type Extension: xmp [File, File, Image] MIMEType - MIME Type: application/rdf+xml [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 6.32 [XMP, XMP-rdf, Document] about - About: http://www.w3.org/TR/rdf-syntax-grammar [XMP, XMP-dc, Image] title - Title: ExifTool common node, nonstandard namespace prefix, and bad list type tests [XMP, XMP-dc, Author] creator - Creator: bad_list_type_A, bad_list_type_B [XMP, XMP-iptcCore, Location] CountryCode - Country Code: CA [XMP, XMP-iptcCore, Other] Scene - Scene: scene1 [XMP, XMP-pdfx, Document] Customↂ0020Propertyↂ00201 - Custom 0020 Property 00201: a custom property value [XMP, XMP-pdfx, Document] Customↂ0020Propertyↂ00202 - Custom 0020 Property 00202: some other value [XMP, XMP-xmpMM, Other] ManifestLinkForm - Manifest Link Form: EmbedByReference [XMP, XMP-xmpMM, Other] ManifestReferenceFilePath - Manifest Reference File Path: C:\some path\file.ext [XMP, XMP-cc, Author] attributionName - Attribution Name: some attr [XMP, XMP-ph, Unknown] ph:programmerExclamation - Programmer Exclamation: doh! [XMP, XMP-ph, Unknown] ph:programmerFood - Programmer Food: cookies [XMP, XMP-ph, Unknown] ph:programmerFullName - Programmer Full Name: Phil Harvey [XMP, XMP-ph, Unknown] ph:programmerHomePage - Programmer Home Page: http://owl.phy.queensu.ca/~phil/ [XMP, XMP-ph, Unknown] ph:programmerState - Programmer State: confusion [XMP, XMP-ph, Unknown] ph:supervisorExclamation - Supervisor Exclamation: doh! [XMP, XMP-ph, Unknown] ph:supervisorFood - Supervisor Food: cookies [XMP, XMP-ph, Unknown] ph:supervisorFullName - Supervisor Full Name: Phil Harvey [XMP, XMP-ph, Unknown] ph:supervisorHomePage - Supervisor Home Page: http://owl.phy.queensu.ca/~phil/ [XMP, XMP-ph, Unknown] ph:supervisorState - Supervisor State: confusion [XMP, XMP-ph, Unknown] ph:testerExclamation - Tester Exclamation: doh! [XMP, XMP-ph, Unknown] ph:testerFood - Tester Food: cookies [XMP, XMP-ph, Unknown] ph:testerFullName - Tester Full Name: Phil Harvey [XMP, XMP-ph, Unknown] ph:testerHomePage - Tester Home Page: http://owl.phy.queensu.ca/~phil/ [XMP, XMP-ph, Unknown] ph:testerState - Tester State: confusion ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_11.out�������������������������������������������������������������������000644 �000765 �000024 �00000005756 12421225257 016343� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 9.75'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='http://www.w3.org/TR/rdf-syntax-grammar' xmlns:Iptc4xmpCore='http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/'> <Iptc4xmpCore:CountryCode>CA</Iptc4xmpCore:CountryCode> <Iptc4xmpCore:Scene> <rdf:Bag> <rdf:li>scene1</rdf:li> </rdf:Bag> </Iptc4xmpCore:Scene> </rdf:Description> <rdf:Description rdf:about='http://www.w3.org/TR/rdf-syntax-grammar' xmlns:cc='http://creativecommons.org/ns#'> <cc:attributionName>something else</cc:attributionName> </rdf:Description> <rdf:Description rdf:about='http://www.w3.org/TR/rdf-syntax-grammar' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:creator> <rdf:Seq> <rdf:li>bad_list_type_A</rdf:li> <rdf:li>bad_list_type_B</rdf:li> <rdf:li>Phil</rdf:li> </rdf:Seq> </dc:creator> <dc:title>ExifTool common node, nonstandard namespace prefix, and bad list type tests</dc:title> </rdf:Description> <rdf:Description rdf:about='http://www.w3.org/TR/rdf-syntax-grammar' xmlns:pdfx='http://ns.adobe.com/pdfx/1.3/'> <pdfx:Customↂ0020Propertyↂ00201>a custom property value</pdfx:Customↂ0020Propertyↂ00201> <pdfx:Customↂ0020Propertyↂ00202>some other value</pdfx:Customↂ0020Propertyↂ00202> </rdf:Description> <rdf:Description rdf:about='http://www.w3.org/TR/rdf-syntax-grammar' xmlns:ph='http://owl.phy.queensu.ca/ph/1.0/'> <ph:programmer rdf:parseType='Resource'> <ph:exclamation>doh!</ph:exclamation> <ph:food>cookies</ph:food> <ph:fullName>Phil Harvey</ph:fullName> <ph:homePage rdf:resource='http://owl.phy.queensu.ca/~phil/'/> <ph:state>confusion</ph:state> </ph:programmer> <ph:supervisor rdf:parseType='Resource'> <ph:exclamation>doh!</ph:exclamation> <ph:food>cookies</ph:food> <ph:fullName>Phil Harvey</ph:fullName> <ph:homePage rdf:resource='http://owl.phy.queensu.ca/~phil/'/> <ph:state>confusion</ph:state> </ph:supervisor> <ph:tester rdf:parseType='Resource'> <ph:exclamation>doh!</ph:exclamation> <ph:food>cookies</ph:food> <ph:fullName>Phil Harvey</ph:fullName> <ph:homePage rdf:resource='http://owl.phy.queensu.ca/~phil/'/> <ph:state>confusion</ph:state> </ph:tester> </rdf:Description> <rdf:Description rdf:about='http://www.w3.org/TR/rdf-syntax-grammar' xmlns:stMfs='http://ns.adobe.com/xap/1.0/sType/ManifestItem#' xmlns:stRef='http://ns.adobe.com/xap/1.0/sType/ResourceRef#' xmlns:xmpMM='http://ns.adobe.com/xap/1.0/mm/'> <xmpMM:Manifest> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <stMfs:linkForm>EmbedByReference</stMfs:linkForm> <stMfs:reference rdf:parseType='Resource'> <stRef:filePath>C:\some path\file.ext</stRef:filePath> </stMfs:reference> <xmpMM:placedXResolution>1</xmpMM:placedXResolution> </rdf:li> </rdf:Bag> </xmpMM:Manifest> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>������������������Image-ExifTool-10.10/t/XMP_12.out�������������������������������������������������������������������000644 �000765 �000024 �00000000367 11510412077 016331� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-dc, Image] format - Format: image/jpeg [XMP, XMP-dc, Author] rights - Rights: © Copyright Another One [XMP, XMP-dc, Author] rights-fr - Rights (fr): © Droit d'auteur Phil Harvey [XMP, XMP-dc, Image] subject - Subject: test1, &-&amp;-& �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_13.out�������������������������������������������������������������������000644 �000765 �000024 �00000000510 11510412077 016320� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-dc, Image] format - Format: image/jpeg [XMP, XMP-dc, Author] rights - Rights: © Copyright Phil Harvey [XMP, XMP-dc, Author] rights-fr - Rights (fr): © Droit d'auteur Phil Harvey [XMP, XMP-dc, Author] rights-de-DE - Rights (de-DE): © Urheberrecht Phil Harvey [XMP, XMP-dc, Image] subject - Subject: test1, &-&amp;-& ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_14.out�������������������������������������������������������������������000644 �000765 �000024 �00000000267 11512134652 016334� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-dc, Image] format - Format: image/jpeg [XMP, XMP-dc, Author] rights-fr - Rights (fr): © Droit d'auteur Phil Harvey [XMP, XMP-dc, Image] subject - Subject: test1, &-&amp;-& �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_15.out�������������������������������������������������������������������000644 �000765 �000024 �00000000252 11510412077 016325� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-dc, Image] format - Format: image/jpeg [XMP, XMP-dc, Author] rights - Rights: © Copyright Phil Harvey [XMP, XMP-dc, Image] subject - Subject: test1, &-&amp;-& ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_16.out�������������������������������������������������������������������000644 �000765 �000024 �00000000461 11512134652 016332� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-dc, Image] format - Format: image/jpeg [XMP, XMP-dc, Author] rights - Rights: © Copyright Phil Harvey [XMP, XMP-dc, Author] rights-fr - Rights (fr): © Droit d'auteur Phil Harvey [XMP, XMP-dc, Image] subject - Subject: test1, &-&amp;-& [XMP, XMP-dc, Image] title-fr - Title (fr): Test fr title ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_17.out�������������������������������������������������������������������000644 �000765 �000024 �00000000534 11510412077 016332� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-dc, Image] format - Format: image/jpeg [XMP, XMP-dc, Author] rights - Rights: © Copyright Phil Harvey [XMP, XMP-dc, Author] rights-fr - Rights (fr): © Droit d'auteur Phil Harvey [XMP, XMP-dc, Image] subject - Subject: test1, &-&amp;-& [XMP, XMP-dc, Image] title - Title: dTitle [XMP, XMP-dc, Image] title-fr - Title (fr): Test fr title ��������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_18.out�������������������������������������������������������������������000644 �000765 �000024 �00000001237 11510412077 016334� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 8.44 [XMP, XMP-rdf, Document] about - About: uuid:80056b68-1045-fa97-3401-6f4ed84cd53d [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: UTF-16 (big-endian) encoded XMP [XMP, XMP-dc, Author] rights - Rights: Copyright 2004 Phil Harvey [XMP, XMP-dc, Image] subject - Subject: ExifTool, Test, XMP [XMP, XMP-dc, Image] title - Title: Test IPTC picture [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: My Job [XMP, XMP-xmpRights, Author] Marked - Marked: False [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_19.out�������������������������������������������������������������������000644 �000765 �000024 �00000003650 12072540045 016337� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon DIGITAL IXUS 40 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Time] 306 - Modify Date: 2005:11:21 17:07:14 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Centered [EXIF, IFD0, Image] 18246 - Rating: 1 [EXIF, ExifIFD, Image] 33434 - Exposure Time: 0.4 [EXIF, ExifIFD, Image] 33437 - F Number: 2.8 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2005:06:09 20:09:27 [EXIF, ExifIFD, Time] 36868 - Create Date: 2005:11:21 17:07:14 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 0.4 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 2.8 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: -1 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.8 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37386 - Focal Length: 5.8 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 1136 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 852 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 10142.85714 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 10142.85714 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: inches [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41985 - Custom Rendered: Normal [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: Manual [EXIF, ExifIFD, Camera] 41987 - White Balance: Auto [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 1 [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: Standard ����������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000021542 12546457277 016273� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: XMP.jpg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 10 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2011:01:03 13:24:04-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:52-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:55-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [JFIF, JFIF, Image] 0 - JFIF Version: 1.02 [JFIF, JFIF, Image] 2 - Resolution Unit: inches [JFIF, JFIF, Image] 3 - X Resolution: 72 [JFIF, JFIF, Image] 5 - Y Resolution: 72 [EXIF, IFD0, Image] 270 - Image Description: A witty caption [EXIF, IFD0, Camera] 271 - Make: FUJIFILM [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePix2400Zoom [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 72 [EXIF, IFD0, Image] 283 - Y Resolution: 72 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Adobe Photoshop 7.0 [EXIF, IFD0, Time] 306 - Modify Date: 2004:02:26 09:36:46 [EXIF, IFD0, Author] 315 - Artist: Phil Harvey [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: Copyright 2004 Phil Harvey [EXIF, ExifIFD, Image] 33437 - F Number: 3.5 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 100 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 1.6 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/64 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 3.5 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 2 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: 0 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 3.5 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 100 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 80 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3053 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3053 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 872 [EXIF, IFD1, Image] 514 - Thumbnail Length: 0 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 4.73 [XMP, XMP-rdf, Document] about - About: uuid:80056b68-1045-fa97-3401-6f4ed84cd53d [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: UTF-16 (big-endian) encoded XMP [XMP, XMP-dc, Author] rights - Rights: Copyright 2004 Phil Harvey [XMP, XMP-dc, Image] subject - Subject: ExifTool, Test, XMP [XMP, XMP-dc, Image] title - Title: Test IPTC picture [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: My Position [XMP, XMP-photoshop, Author] CaptionWriter - Caption Writer: I wrote it [XMP, XMP-photoshop, Image] Category - Category: 1 [XMP, XMP-photoshop, Location] City - City: Kingston [XMP, XMP-photoshop, Location] Country - Country: Canada [XMP, XMP-photoshop, Author] Credit - Credit: My Credit [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2004:02:26 [XMP, XMP-photoshop, Image] Headline - Headline: No headline [XMP, XMP-photoshop, Image] Instructions - Instructions: What instructions [XMP, XMP-photoshop, Author] Source - Source: I'm the source [XMP, XMP-photoshop, Location] State - State: Ont [XMP, XMP-photoshop, Image] SupplementalCategories - Supplemental Categories: amazing, image, utilities [XMP, XMP-photoshop, Image] TransmissionReference - Transmission Reference: What is a transmission reference? [XMP, XMP-photoshop, Image] Urgency - Urgency: 8 (least urgent) [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: My Job [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:photoshop:4cc7b857-69d0-11d8-8ac4-bb59c92f0d9a [XMP, XMP-xmpRights, Author] Marked - Marked: False [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ [ICC_Profile, ICC-header, Image] 4 - Profile CMM Type: Lino [ICC_Profile, ICC-header, Image] 8 - Profile Version: 2.1.0 [ICC_Profile, ICC-header, Image] 12 - Profile Class: Display Device Profile [ICC_Profile, ICC-header, Image] 16 - Color Space Data: RGB [ICC_Profile, ICC-header, Image] 20 - Profile Connection Space: XYZ [ICC_Profile, ICC-header, Time] 24 - Profile Date Time: 1998:02:09 06:49:00 [ICC_Profile, ICC-header, Image] 36 - Profile File Signature: acsp [ICC_Profile, ICC-header, Image] 40 - Primary Platform: Microsoft Corporation [ICC_Profile, ICC-header, Image] 44 - CMM Flags: Not Embedded, Independent [ICC_Profile, ICC-header, Image] 48 - Device Manufacturer: IEC [ICC_Profile, ICC-header, Image] 52 - Device Model: sRGB [ICC_Profile, ICC-header, Image] 56 - Device Attributes: Reflective, Glossy, Positive, Color [ICC_Profile, ICC-header, Image] 64 - Rendering Intent: Perceptual [ICC_Profile, ICC-header, Image] 68 - Connection Space Illuminant: 0.9642 1 0.82491 [ICC_Profile, ICC-header, Image] 80 - Profile Creator: HP [ICC_Profile, ICC-header, Image] 84 - Profile ID: 0 [ICC_Profile, ICC_Profile, Image] cprt - Profile Copyright: Copyright (c) 1998 Hewlett-Packard Company [ICC_Profile, ICC_Profile, Image] desc - Profile Description: sRGB IEC61966-2.1 [ICC_Profile, ICC_Profile, Image] wtpt - Media White Point: 0.95045 1 1.08905 [ICC_Profile, ICC_Profile, Image] bkpt - Media Black Point: 0 0 0 [ICC_Profile, ICC_Profile, Image] rXYZ - Red Matrix Column: 0.43607 0.22249 0.01392 [ICC_Profile, ICC_Profile, Image] gXYZ - Green Matrix Column: 0.38515 0.71687 0.09708 [ICC_Profile, ICC_Profile, Image] bXYZ - Blue Matrix Column: 0.14307 0.06061 0.7141 [ICC_Profile, ICC_Profile, Camera] dmnd - Device Mfg Desc: IEC http://www.iec.ch [ICC_Profile, ICC_Profile, Camera] dmdd - Device Model Desc: IEC 61966-2.1 Default RGB colour space - sRGB [ICC_Profile, ICC_Profile, Image] vued - Viewing Cond Desc: Reference Viewing Condition in IEC61966-2.1 [ICC_Profile, ICC-view, Image] 8 - Viewing Cond Illuminant: 19.6445 20.3718 16.8089 [ICC_Profile, ICC-view, Image] 20 - Viewing Cond Surround: 3.92889 4.07439 3.36179 [ICC_Profile, ICC-view, Image] 32 - Viewing Cond Illuminant Type: D50 [ICC_Profile, ICC_Profile, Image] lumi - Luminance: 76.03647 80 87.12462 [ICC_Profile, ICC-meas, Image] 8 - Measurement Observer: CIE 1931 [ICC_Profile, ICC-meas, Image] 12 - Measurement Backing: 0 0 0 [ICC_Profile, ICC-meas, Image] 24 - Measurement Geometry: Unknown [ICC_Profile, ICC-meas, Image] 28 - Measurement Flare: 0.999% [ICC_Profile, ICC-meas, Image] 32 - Measurement Illuminant: D65 [ICC_Profile, ICC_Profile, Image] tech - Technology: Cathode Ray Tube Display [ICC_Profile, ICC_Profile, Image] rTRC - Red Tone Reproduction Curve: (Binary data 2060 bytes) [ICC_Profile, ICC_Profile, Image] gTRC - Green Tone Reproduction Curve: (Binary data 2060 bytes) [ICC_Profile, ICC_Profile, Image] bTRC - Blue Tone Reproduction Curve: (Binary data 2060 bytes) [APP14, Adobe, Image] 0 - DCT Encode Version: 100 [APP14, Adobe, Image] 1 - APP14 Flags 0: (none) [APP14, Adobe, Image] 2 - APP14 Flags 1: (none) [APP14, Adobe, Image] 3 - Color Transform: YCbCr [Composite, Composite, Image] Aperture - Aperture: 3.5 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/64 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 6.0 mm [Composite, Composite, Image] LightValue - Light Value: 9.6 ��������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_20.out�������������������������������������������������������������������000644 �000765 �000024 �00000003573 11510412077 016332� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[EXIF, IFD0, Camera] 271 - Make: Canon [EXIF, IFD0, Camera] 272 - Camera Model Name: Canon DIGITAL IXUS 40 [EXIF, IFD0, Image] 274 - Orientation: 1 [EXIF, IFD0, Image] 282 - X Resolution: 180 [EXIF, IFD0, Image] 283 - Y Resolution: 180 [EXIF, IFD0, Image] 296 - Resolution Unit: 2 [EXIF, IFD0, Time] 306 - Modify Date: 2005:11:21 17:07:14+01:00 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: 1 [EXIF, IFD0, Image] 18246 - Rating: 1 [EXIF, ExifIFD, Image] 33434 - Exposure Time: 0.4 [EXIF, ExifIFD, Image] 33437 - F Number: 2.8 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0.2.2.0 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2005:06:09 20:09:27+02:00 [EXIF, ExifIFD, Time] 36868 - Create Date: 2005:11:21 17:07:14+01:00 [EXIF, ExifIFD, Image] 37121 - Components Configuration: 1 2 3 0 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 0.402622582987314 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 2.79795934507662 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: -1 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 2.79795934507662 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: 5 [EXIF, ExifIFD, Camera] 37386 - Focal Length: 5.8 [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0.1.0.0 [EXIF, ExifIFD, Image] 40961 - Color Space: 1 [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 1136 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 852 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 10142.85714 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 10142.85714 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: 2 [EXIF, ExifIFD, Camera] 41495 - Sensing Method: 2 [EXIF, ExifIFD, Image] 41728 - File Source: 3 [EXIF, ExifIFD, Image] 41985 - Custom Rendered: 0 [EXIF, ExifIFD, Camera] 41986 - Exposure Mode: 1 [EXIF, ExifIFD, Camera] 41987 - White Balance: 0 [EXIF, ExifIFD, Camera] 41988 - Digital Zoom Ratio: 1 [EXIF, ExifIFD, Camera] 41990 - Scene Capture Type: 0 �������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_21.out�������������������������������������������������������������������000644 �000765 �000024 �00000004743 12156121607 016336� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.32 [XMP, XMP-exif, Image] ApertureValue - Aperture Value: 14.0 [XMP, XMP-exif, Image] ColorSpace - Color Space: sRGB [XMP, XMP-exif, Image] ComponentsConfiguration - Components Configuration: Y, Cb, Cr, - [XMP, XMP-exif, Image] CompressedBitsPerPixel - Compressed Bits Per Pixel: 9 [XMP, XMP-exif, Image] CustomRendered - Custom Rendered: Normal [XMP, XMP-exif, Time] DateTimeOriginal - Date/Time Original: 2003:12:04 06:46:52 [XMP, XMP-exif, Image] ExifVersion - Exif Version: 0221 [XMP, XMP-exif, Image] ExposureBiasValue - Exposure Compensation: 0 [XMP, XMP-exif, Camera] ExposureMode - Exposure Mode: Manual [XMP, XMP-exif, Image] ExposureTime - Exposure Time: 4 [XMP, XMP-exif, Image] FNumber - F Number: 14.0 [XMP, XMP-exif, Image] FileSource - File Source: Digital Camera [XMP, XMP-exif, Image] FlashpixVersion - Flashpix Version: 0100 [XMP, XMP-exif, Camera] FocalLength - Focal Length: 34.0 mm [XMP, XMP-exif, Camera] FocalPlaneResolutionUnit - Focal Plane Resolution Unit: inches [XMP, XMP-exif, Camera] FocalPlaneXResolution - Focal Plane X Resolution: 3443.94615384615 [XMP, XMP-exif, Camera] FocalPlaneYResolution - Focal Plane Y Resolution: 3442.01680672269 [XMP, XMP-exif, Image] ISOSpeedRatings - ISO: 100 [XMP, XMP-exif, Camera] MaxApertureValue - Max Aperture Value: 4.5 [XMP, XMP-exif, Camera] MeteringMode - Metering Mode: Average [XMP, XMP-exif, Image] PixelXDimension - Exif Image Width: 160 [XMP, XMP-exif, Image] PixelYDimension - Exif Image Height: 120 [XMP, XMP-exif, Camera] SceneCaptureType - Scene Capture Type: Standard [XMP, XMP-exif, Camera] SensingMethod - Sensing Method: One-chip color area [XMP, XMP-exif, Image] ShutterSpeedValue - Shutter Speed Value: 1 [XMP, XMP-exif, Image] UserComment - User Comment: [XMP, XMP-exif, Camera] WhiteBalance - White Balance: Auto [XMP, XMP-exifEX, Image] InteroperabilityIndex - Interoperability Index: THM - DCF thumbnail file [XMP, XMP-tiff, Camera] Make - Make: Canon [XMP, XMP-tiff, Camera] Model - Camera Model Name: Canon EOS DIGITAL REBEL [XMP, XMP-tiff, Image] Orientation - Orientation: Horizontal (normal) [XMP, XMP-tiff, Image] ResolutionUnit - Resolution Unit: inches [XMP, XMP-tiff, Image] XResolution - X Resolution: 180 [XMP, XMP-tiff, Image] YCbCrPositioning - Y Cb Cr Positioning: Centered [XMP, XMP-tiff, Image] YResolution - Y Resolution: 180 [XMP, XMP-xmp, Time] CreateDate - Create Date: 2003:12:04 06:46:52 [XMP, XMP-xmp, Time] ModifyDate - Modify Date: 2003:12:04 06:46:52 �����������������������������Image-ExifTool-10.10/t/XMP_22.out�������������������������������������������������������������������000644 �000765 �000024 �00000004576 12156121607 016343� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.32 [XMP, XMP-exif, Image] ApertureValue - Aperture Value: 14.0000277425244 [XMP, XMP-exif, Image] ColorSpace - Color Space: 1 [XMP, XMP-exif, Image] ComponentsConfiguration - Components Configuration: [1,2,3,0] [XMP, XMP-exif, Image] CompressedBitsPerPixel - Compressed Bits Per Pixel: 9 [XMP, XMP-exif, Image] CustomRendered - Custom Rendered: 0 [XMP, XMP-exif, Time] DateTimeOriginal - Date/Time Original: 2003:12:04 06:46:52 [XMP, XMP-exif, Image] ExifVersion - Exif Version: 0221 [XMP, XMP-exif, Image] ExposureBiasValue - Exposure Compensation: 0 [XMP, XMP-exif, Camera] ExposureMode - Exposure Mode: 1 [XMP, XMP-exif, Image] ExposureTime - Exposure Time: 4 [XMP, XMP-exif, Image] FNumber - F Number: 14 [XMP, XMP-exif, Image] FileSource - File Source: 3 [XMP, XMP-exif, Image] FlashpixVersion - Flashpix Version: 0100 [XMP, XMP-exif, Camera] FocalLength - Focal Length: 34 [XMP, XMP-exif, Camera] FocalPlaneResolutionUnit - Focal Plane Resolution Unit: 2 [XMP, XMP-exif, Camera] FocalPlaneXResolution - Focal Plane X Resolution: 3443.94615384615 [XMP, XMP-exif, Camera] FocalPlaneYResolution - Focal Plane Y Resolution: 3442.01680672269 [XMP, XMP-exif, Image] ISOSpeedRatings - ISO: 100 [XMP, XMP-exif, Camera] MaxApertureValue - Max Aperture Value: 4.49999024812954 [XMP, XMP-exif, Camera] MeteringMode - Metering Mode: 1 [XMP, XMP-exif, Image] PixelXDimension - Exif Image Width: 160 [XMP, XMP-exif, Image] PixelYDimension - Exif Image Height: 120 [XMP, XMP-exif, Camera] SceneCaptureType - Scene Capture Type: 0 [XMP, XMP-exif, Camera] SensingMethod - Sensing Method: 2 [XMP, XMP-exif, Image] ShutterSpeedValue - Shutter Speed Value: 1 [XMP, XMP-exif, Image] UserComment - User Comment: [XMP, XMP-exif, Camera] WhiteBalance - White Balance: 0 [XMP, XMP-exifEX, Image] InteroperabilityIndex - Interoperability Index: THM [XMP, XMP-tiff, Camera] Make - Make: Canon [XMP, XMP-tiff, Camera] Model - Camera Model Name: Canon EOS DIGITAL REBEL [XMP, XMP-tiff, Image] Orientation - Orientation: 1 [XMP, XMP-tiff, Image] ResolutionUnit - Resolution Unit: 2 [XMP, XMP-tiff, Image] XResolution - X Resolution: 180 [XMP, XMP-tiff, Image] YCbCrPositioning - Y Cb Cr Positioning: 1 [XMP, XMP-tiff, Image] YResolution - Y Resolution: 180 [XMP, XMP-xmp, Time] CreateDate - Create Date: 2003:12:04 06:46:52 [XMP, XMP-xmp, Time] ModifyDate - Modify Date: 2003:12:04 06:46:52 ����������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_23.out�������������������������������������������������������������������000644 �000765 �000024 �00000001145 11510412077 016326� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 8.44 [XMP, XMP-rdf, Document] about - About: uuid:80056b68-1045-fa97-3401-6f4ed84cd53d [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: UTF-16 (big-endian) encoded XMP [XMP, XMP-dc, Author] rights - Rights: Copyright 2004 Phil Harvey [XMP, XMP-dc, Image] subject - Subject: ExifTool, Test, XMP [XMP, XMP-dc, Image] title - Title: Test IPTC picture [XMP, XMP-xmpRights, Author] Marked - Marked: False [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_24.out�������������������������������������������������������������������000644 �000765 �000024 �00000004125 12454742022 016334� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.81 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 4.73 [XMP, XMP-rdf, Document] about - About: uuid:80056b68-1045-fa97-3401-6f4ed84cd53d [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: UTF-16 (big-endian) encoded XMP [XMP, XMP-dc, Author] rights - Rights: Copyright 2004 Phil Harvey [XMP, XMP-dc, Image] subject - Subject: ExifTool, Test, XMP [XMP, XMP-dc, Image] title - Title: Test IPTC picture [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: My Position [XMP, XMP-photoshop, Author] CaptionWriter - Caption Writer: I wrote it [XMP, XMP-photoshop, Image] Category - Category: 1 [XMP, XMP-photoshop, Location] City - City: Kingston [XMP, XMP-photoshop, Location] Country - Country: Canada [XMP, XMP-photoshop, Author] Credit - Credit: My Credit [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2004:02:26 [XMP, XMP-photoshop, Image] Headline - Headline: No headline [XMP, XMP-photoshop, Image] Instructions - Instructions: What instructions [XMP, XMP-photoshop, Author] Source - Source: I'm the source [XMP, XMP-photoshop, Location] State - State: Ont [XMP, XMP-photoshop, Image] SupplementalCategories - Supplemental Categories: amazing, image, utilities [XMP, XMP-photoshop, Image] TransmissionReference - Transmission Reference: What is a transmission reference? [XMP, XMP-photoshop, Image] Urgency - Urgency: 8 (least urgent) [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: My Job [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:photoshop:4cc7b857-69d0-11d8-8ac4-bb59c92f0d9a [XMP, XMP-xmpRights, Author] Marked - Marked: False [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ [APP14, Adobe, Image] 0 - DCT Encode Version: 100 [APP14, Adobe, Image] 1 - APP14 Flags 0: (none) [APP14, Adobe, Image] 2 - APP14 Flags 1: (none) [APP14, Adobe, Image] 3 - Color Transform: YCbCr [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_25.out�������������������������������������������������������������������000644 �000765 �000024 �00000003502 12546457277 016354� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: XMP.svg [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1402 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2008:04:07 14:11:53-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:23 08:38:22-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:11 08:47:16-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: SVG [File, File, Image] FileTypeExtension - File Type Extension: svg [File, File, Image] MIMEType - MIME Type: image/svg+xml [SVG, SVG, Image] width - Image Width: 4in [SVG, SVG, Image] height - Image Height: 3in [SVG, SVG, Image] version - SVG Version: 1.1 [SVG, SVG, Image] xmlns - Xmlns: http://www.w3.org/2000/svg [SVG, SVG-myfoo, Unknown] myfoo:descTitle - Desc Title: This is a financial report [SVG, SVG-myfoo, Unknown] myfoo:descDescrEmph - Desc Descr Emph: myfoo [SVG, SVG-myfoo, Unknown] myfoo:descSceneWhat - Desc Scene What: widget $growth [SVG, SVG-myfoo, Unknown] myfoo:descSceneContains - Desc Scene Contains: $three $graph-bar [SVG, SVG-myfoo, Unknown] myfoo:descSceneWhen - Desc Scene When: 1998 $through 2000 [XMP, XMP-rdf, Document] about - About: http://example.org/myfoo [XMP, XMP-dc, Image] title - Title: MyFoo Financial Report [XMP, XMP-dc, Image] description - Description: $three $bar $thousands $dollars $from 1998 $through 2000 [XMP, XMP-dc, Author] publisher - Publisher: Example Organization [XMP, XMP-dc, Time] date - Date: 2000:04:11 [XMP, XMP-dc, Image] format - Format: image/svg+xml [XMP, XMP-dc, Other] language - Language: en [XMP, XMP-dc, Author] creator - Creator: Irving Bird, Mary Lambert ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_26.out�������������������������������������������������������������������000644 �000765 �000024 �00000003101 12512210564 016323� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='What&#39;s this?'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='http://www.exiftool.ca/t/XMP.t#26' xmlns:et='http://ns.exiftool.ca/1.0/' et:toolkit='Image::ExifTool 9.92' xmlns:myXMPns='http://ns.exiftool.ca/t/XMP.t'> <myXMPns:ATestTag> <rdf:Bag> <rdf:li rdf:resource='http://www.exiftool.ca/t/XMP.t#26-one'/> <rdf:li rdf:resource='http://www.exiftool.ca/t/XMP.t#26-two'/> </rdf:Bag> </myXMPns:ATestTag> </rdf:Description> <rdf:Description rdf:about='http://www.exiftool.ca/t/XMP.t#26' xmlns:plus='http://ns.useplus.org/ldf/xmp/1.0/'> <plus:CopyrightStatus>http://ns.useplus.org/ldf/vocab/CS-PUB</plus:CopyrightStatus> <plus:Custom1> <rdf:Bag> <rdf:li> <rdf:Alt> <rdf:li xml:lang='en'>a</rdf:li> </rdf:Alt> </rdf:li> <rdf:li> <rdf:Alt> <rdf:li xml:lang='en'>b</rdf:li> </rdf:Alt> </rdf:li> </rdf:Bag> </plus:Custom1> <plus:ImageType>http://ns.useplus.org/ldf/vocab/TY-VID</plus:ImageType> <plus:Licensee> <rdf:Seq> <rdf:li rdf:parseType='Resource'> <plus:LicenseeName>Phil</plus:LicenseeName> </rdf:li> </rdf:Seq> </plus:Licensee> <plus:LicenseeImageNotes> <rdf:Alt> <rdf:li xml:lang='x-default'>default notes</rdf:li> <rdf:li xml:lang='de'>deutsche anmerkungen</rdf:li> <rdf:li xml:lang='en'>english notes</rdf:li> </rdf:Alt> </plus:LicenseeImageNotes> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_27.out�������������������������������������������������������������������000644 �000765 �000024 �00000015011 12546457277 016354� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: XMP.xml [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 6.0 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2009:03:03 13:49:24-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:25-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:55-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: XMP [File, File, Image] FileTypeExtension - File Type Extension: xmp [File, File, Image] MIMEType - MIME Type: application/rdf+xml [XMP, XMP-rdf, Document] about - About: t/images/Nikon.jpg [XML, XML-ExifTool, Unknown] ExifTool:ExifToolVersion - Exif Tool Version: 7.62 [XML, XML-File, Unknown] File:FileName - File Name: Nikon.jpg [XML, XML-File, Unknown] File:Directory - Directory: t/images [XML, XML-File, Unknown] File:FileSize - File Size: 1703 bytes [XML, XML-File, Unknown] File:FileModifyDate - File Modify Date: 2006:01:04 14:02:27-05:00 [XML, XML-File, Unknown] File:FileType - File Type: JPEG [XML, XML-File, Unknown] File:MIMEType - MIME Type: image/jpeg [XML, XML-File, Unknown] File:ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [XML, XML-File, Unknown] File:ImageWidth - Image Width: 8 [XML, XML-File, Unknown] File:ImageHeight - Image Height: 8 [XML, XML-File, Unknown] File:EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [XML, XML-File, Unknown] File:BitsPerSample - Bits Per Sample: 8 [XML, XML-File, Unknown] File:ColorComponents - Color Components: 3 [XML, XML-File, Unknown] File:YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [XML, XML-Composite, Unknown] Composite:Aperture - Aperture: 9.4 [XML, XML-Composite, Unknown] Composite:ImageSize - Image Size: 8x8 [XML, XML-Composite, Unknown] Composite:ShutterSpeed - Shutter Speed: 0.00469483568075117 [XML, XML-Composite, Unknown] Composite:ThumbnailImage - Thumbnail Image: <Dummy thumbnail image data> [XML, XML-Composite, Unknown] Composite:FocalLength35efl - Focal Length 35efl: 8.6 mm [XML, XML-Composite, Unknown] Composite:LightValue - Light Value: 14.2 [EXIF, IFD0, Unknown] IFD0:ImageDescription - Image Description: [EXIF, IFD0, Unknown] IFD0:Make - Make: NIKON [EXIF, IFD0, Unknown] IFD0:Model - Model: E775 [EXIF, IFD0, Unknown] IFD0:Orientation - Orientation: Horizontal (normal) [EXIF, IFD0, Unknown] IFD0:XResolution - X Resolution: 300 [EXIF, IFD0, Unknown] IFD0:YResolution - Y Resolution: 300 [EXIF, IFD0, Unknown] IFD0:ResolutionUnit - Resolution Unit: inches [EXIF, IFD0, Unknown] IFD0:Software - Software: E775v1.3u [EXIF, IFD0, Unknown] IFD0:ModifyDate - Modify Date: 2001:08:01 12:57:23 [EXIF, IFD0, Unknown] IFD0:YCbCrPositioning - Y Cb Cr Positioning: Co-sited [EXIF, ExifIFD, Unknown] ExifIFD:ExposureTime - Exposure Time: 0.00469483568075117 [EXIF, ExifIFD, Unknown] ExifIFD:FNumber - F Number: 9.4 [EXIF, ExifIFD, Unknown] ExifIFD:ExposureProgram - Exposure Program: Program AE [EXIF, ExifIFD, Unknown] ExifIFD:iso - Iso: 100 [EXIF, ExifIFD, Unknown] ExifIFD:ExifVersion - Exif Version: 0210 [EXIF, ExifIFD, Unknown] ExifIFD:DateTimeOriginal - Date Time Original: 2001:08:01 12:57:23 [EXIF, ExifIFD, Unknown] ExifIFD:CreateDate - Create Date: 2001:08:01 12:57:23 [EXIF, ExifIFD, Unknown] ExifIFD:ComponentsConfiguration - Components Configuration: YCbCr [EXIF, ExifIFD, Unknown] ExifIFD:CompressedBitsPerPixel - Compressed Bits Per Pixel: 3 [EXIF, ExifIFD, Unknown] ExifIFD:ExposureCompensation - Exposure Compensation: 0 [EXIF, ExifIFD, Unknown] ExifIFD:MaxApertureValue - Max Aperture Value: 3.4 [EXIF, ExifIFD, Unknown] ExifIFD:MeteringMode - Metering Mode: Multi-segment [EXIF, ExifIFD, Unknown] ExifIFD:LightSource - Light Source: Unknown [EXIF, ExifIFD, Unknown] ExifIFD:Flash - Flash: No Flash [EXIF, ExifIFD, Unknown] ExifIFD:FocalLength - Focal Length: 8.6 mm [EXIF, ExifIFD, Unknown] ExifIFD:UserComment - User Comment: [EXIF, ExifIFD, Unknown] ExifIFD:FlashpixVersion - Flashpix Version: 0100 [EXIF, ExifIFD, Unknown] ExifIFD:ColorSpace - Color Space: sRGB [EXIF, ExifIFD, Unknown] ExifIFD:ExifImageWidth - Exif Image Width: 1600 [EXIF, ExifIFD, Unknown] ExifIFD:ExifImageHeight - Exif Image Height: 1200 [EXIF, ExifIFD, Unknown] ExifIFD:FileSource - File Source: Digital Camera [EXIF, ExifIFD, Unknown] ExifIFD:SceneType - Scene Type: Directly photographed [EXIF, InteropIFD, Unknown] InteropIFD:InteropIndex - Interop Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Unknown] InteropIFD:InteropVersion - Interop Version: 0100 [EXIF, IFD1, Unknown] IFD1:Compression - Compression: JPEG (old-style) [EXIF, IFD1, Unknown] IFD1:XResolution - X Resolution: 300 [EXIF, IFD1, Unknown] IFD1:YResolution - Y Resolution: 300 [EXIF, IFD1, Unknown] IFD1:ResolutionUnit - Resolution Unit: inches [EXIF, IFD1, Unknown] IFD1:ThumbnailOffset - Thumbnail Offset: 1426 [EXIF, IFD1, Unknown] IFD1:ThumbnailLength - Thumbnail Length: 28 [MakerNotes, Nikon, Unknown] Nikon:MakerNoteVersion - Maker Note Version: 1.00 [MakerNotes, Nikon, Unknown] Nikon:iso - Iso: 0 [MakerNotes, Nikon, Unknown] Nikon:ColorMode - Color Mode: Color [MakerNotes, Nikon, Unknown] Nikon:Quality - Quality: Fine [MakerNotes, Nikon, Unknown] Nikon:WhiteBalance - White Balance: Auto [MakerNotes, Nikon, Unknown] Nikon:Sharpness - Sharpness: Auto [MakerNotes, Nikon, Unknown] Nikon:FocusMode - Focus Mode: AF-C [MakerNotes, Nikon, Unknown] Nikon:FlashSetting - Flash Setting: [MakerNotes, Nikon, Unknown] Nikon:ISOSelection - ISO Selection: Auto [MakerNotes, Nikon, Unknown] Nikon:ImageAdjustment - Image Adjustment: Normal [MakerNotes, Nikon, Unknown] Nikon:AuxiliaryLens - Auxiliary Lens: Off [MakerNotes, Nikon, Unknown] Nikon:ManualFocusDistance - Manual Focus Distance: inf [MakerNotes, Nikon, Unknown] Nikon:DigitalZoom - Digital Zoom: 1 [MakerNotes, Nikon, Unknown] Nikon:AFAreaMode - AF Area Mode: Single Area [MakerNotes, Nikon, Unknown] Nikon:AFPoint - AF Point: Center [MakerNotes, Nikon, Unknown] Nikon:AFPointsInFocus - AF Points In Focus: (none) [MakerNotes, Nikon, Unknown] Nikon:SceneMode - Scene Mode: [MakerNotes, Nikon, Unknown] Nikon:DataDump - Data Dump: (Binary data 122 bytes) [Composite, Composite, Image] Aperture - Aperture: 9.4 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/213 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 8.6 mm �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_28.out�������������������������������������������������������������������000644 �000765 �000024 �00000006043 12546457277 016362� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: XMP_28_failed.xml [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 3.0 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:54-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:54-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:54-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: XMP [File, File, Image] FileTypeExtension - File Type Extension: xmp [File, File, Image] MIMEType - MIME Type: application/rdf+xml [XMP, XMP-rdf, Document] about - About: t/images/Nikon.jpg [XMP, XMP-pdf, Author] Author - Author: Phil [XML, XML-File, Unknown] File:BitsPerSample - Bits Per Sample: 8 [XML, XML-File, Unknown] File:ColorComponents - Color Components: 3 [XML, XML-File, Unknown] File:Directory - Directory: t/images [XML, XML-File, Unknown] File:EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [XML, XML-File, Unknown] File:ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [XML, XML-File, Unknown] File:FileModifyDate - File Modify Date: 2006:01:04 14:02:27-05:00 [XML, XML-File, Unknown] File:FileName - File Name: Nikon.jpg [XML, XML-File, Unknown] File:FileSize - File Size: 1703 bytes [XML, XML-File, Unknown] File:FileType - File Type: JPEG [XML, XML-File, Unknown] File:ImageHeight - Image Height: 8 [XML, XML-File, Unknown] File:ImageWidth - Image Width: 8 [XML, XML-File, Unknown] File:MIMEType - MIME Type: image/jpeg [XML, XML-File, Unknown] File:YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [EXIF, IFD0, Unknown] IFD0:ImageDescription - Image Description: [EXIF, IFD0, Unknown] IFD0:Make - Make: NIKON [EXIF, IFD0, Unknown] IFD0:Model - Model: E775 [EXIF, IFD0, Unknown] IFD0:ModifyDate - Modify Date: 2001:08:01 12:57:23 [EXIF, IFD0, Unknown] IFD0:Orientation - Orientation: Horizontal (normal) [EXIF, IFD0, Unknown] IFD0:ResolutionUnit - Resolution Unit: inches [EXIF, IFD0, Unknown] IFD0:Software - Software: E775v1.3u [EXIF, IFD0, Unknown] IFD0:XResolution - X Resolution: 300 [EXIF, IFD0, Unknown] IFD0:YCbCrPositioning - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Unknown] IFD0:YResolution - Y Resolution: 300 [EXIF, IFD1, Unknown] IFD1:Compression - Compression: JPEG (old-style) [EXIF, IFD1, Unknown] IFD1:ResolutionUnit - Resolution Unit: inches [EXIF, IFD1, Unknown] IFD1:ThumbnailLength - Thumbnail Length: 28 [EXIF, IFD1, Unknown] IFD1:ThumbnailOffset - Thumbnail Offset: 1426 [EXIF, IFD1, Unknown] IFD1:XResolution - X Resolution: 300 [EXIF, IFD1, Unknown] IFD1:YResolution - Y Resolution: 300 [EXIF, InteropIFD, Unknown] InteropIFD:InteropIndex - Interop Index: R98 - DCF basic file (sRGB) [EXIF, InteropIFD, Unknown] InteropIFD:InteropVersion - Interop Version: 0100 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_29.out�������������������������������������������������������������������000644 �000765 �000024 �00000003163 12546457277 016363� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: XMP_29_failed.jpg [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 3.2 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:54-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:54-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:54-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-pdf, Author] Author - Author: Test [XMP, XMP-pdf, Time] CreationDate - Creation Date: 2008:10:20 19:54:15 [XMP, XMP-pdf, Author] Creator - Creator: Guess Who [XMP, XMP-pdf, Time] ModDate - Mod Date: 2008:10:20 19:54:15 [XMP, XMP-pdf, Author] Producer - Producer: Just ExifTool again [XMP, XMP-pdf, Image] Title - Title: PDF Title [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_3.out��������������������������������������������������������������������000644 �000765 �000024 �00000021412 12514720514 016246� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileSize - File Size: 9.9 kB [File, File, Image] FileType - File Type: JPEG [File, File, Image] FileTypeExtension - File Type Extension: jpg [File, File, Image] MIMEType - MIME Type: image/jpeg [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [File, File, Image] CurrentIPTCDigest - Current IPTC Digest: 2b3df19b0c67788262a0d0dced3b6d58 [File, File, Image] ImageWidth - Image Width: 8 [File, File, Image] ImageHeight - Image Height: 8 [File, File, Image] EncodingProcess - Encoding Process: Baseline DCT, Huffman coding [File, File, Image] BitsPerSample - Bits Per Sample: 8 [File, File, Image] ColorComponents - Color Components: 3 [File, File, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [JFIF, JFIF, Image] 0 - JFIF Version: 1.02 [JFIF, JFIF, Image] 2 - Resolution Unit: inches [JFIF, JFIF, Image] 3 - X Resolution: 80 [JFIF, JFIF, Image] 5 - Y Resolution: 80 [EXIF, IFD0, Image] 270 - Image Description: A witty caption-v2 [EXIF, IFD0, Camera] 271 - Make: FUJIFILM-v2 [EXIF, IFD0, Camera] 272 - Camera Model Name: FinePix2400Zoom-v2 [EXIF, IFD0, Image] 274 - Orientation: Horizontal (normal) [EXIF, IFD0, Image] 282 - X Resolution: 80 [EXIF, IFD0, Image] 283 - Y Resolution: 80 [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, IFD0, Image] 305 - Software: Adobe Photoshop 7.0-v2 [EXIF, IFD0, Time] 306 - Modify Date: 2004:02:26 09:36:46 [EXIF, IFD0, Author] 315 - Artist: Phil Harvey-v2 [EXIF, IFD0, Image] 531 - Y Cb Cr Positioning: Co-sited [EXIF, IFD0, Author] 33432 - Copyright: Copyright 2004 Phil Harvey-v2 [EXIF, ExifIFD, Image] 33437 - F Number: 4.9 [EXIF, ExifIFD, Camera] 34850 - Exposure Program: Program AE [EXIF, ExifIFD, Image] 34855 - ISO: 111 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0210 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2001:05:19 18:36:41 [EXIF, ExifIFD, Time] 36868 - Create Date: 2001:05:19 18:36:41 [EXIF, ExifIFD, Image] 37121 - Components Configuration: Y, Cb, Cr, - [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 1.6 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/64 [EXIF, ExifIFD, Image] 37378 - Aperture Value: 4.9 [EXIF, ExifIFD, Image] 37379 - Brightness Value: 3 [EXIF, ExifIFD, Image] 37380 - Exposure Compensation: +1 [EXIF, ExifIFD, Camera] 37381 - Max Aperture Value: 4.9 [EXIF, ExifIFD, Camera] 37383 - Metering Mode: Multi-segment [EXIF, ExifIFD, Camera] 37385 - Flash: Fired [EXIF, ExifIFD, Camera] 37386 - Focal Length: 6.0 mm [EXIF, ExifIFD, Image] 40960 - Flashpix Version: 0100 [EXIF, ExifIFD, Image] 40961 - Color Space: sRGB [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 111 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 89 [EXIF, ExifIFD, Camera] 41486 - Focal Plane X Resolution: 3359 [EXIF, ExifIFD, Camera] 41487 - Focal Plane Y Resolution: 3359 [EXIF, ExifIFD, Camera] 41488 - Focal Plane Resolution Unit: cm [EXIF, ExifIFD, Camera] 41495 - Sensing Method: One-chip color area [EXIF, ExifIFD, Image] 41728 - File Source: Digital Camera [EXIF, ExifIFD, Image] 41729 - Scene Type: Directly photographed [EXIF, IFD1, Image] 259 - Compression: JPEG (old-style) [EXIF, IFD1, Image] 282 - X Resolution: 72 [EXIF, IFD1, Image] 283 - Y Resolution: 72 [EXIF, IFD1, Image] 296 - Resolution Unit: inches [EXIF, IFD1, Image] 513 - Thumbnail Offset: 890 [EXIF, IFD1, Image] 514 - Thumbnail Length: 0 [IPTC, IPTC, Other] 90 - Coded Character Set: UTF8 [IPTC, IPTC, Other] 0 - Envelope Record Version: 4 [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-rdf, Document] about - About: uuid:80056b68-1045-fa97-3401-6f4ed84cd53d [XMP, XMP-iptcCore, Author] CreatorContactInfoCiAdrCtry - Creator Country: Canada [XMP, XMP-dc, Author] creator - Creator: Phil Harvey-v2 [XMP, XMP-dc, Image] description - Description: UTF-16 (big-endian) encoded XMP-v2 [XMP, XMP-dc, Author] rights - Rights: Copyright 2004 Phil Harvey-v2 [XMP, XMP-dc, Image] subject - Subject: ExifTool, Test, XMP, v2 [XMP, XMP-dc, Image] title - Title: Test IPTC picture-v2 [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: My Position-v2 [XMP, XMP-photoshop, Author] CaptionWriter - Caption Writer: I wrote it-v2 [XMP, XMP-photoshop, Image] Category - Category: 2 [XMP, XMP-photoshop, Location] City - City: Kingston-v2 [XMP, XMP-photoshop, Location] Country - Country: Canada-v2 [XMP, XMP-photoshop, Author] Credit - Credit: My Credit-v2 [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2004:02:26 02:00 [XMP, XMP-photoshop, Image] Headline - Headline: No headline-v2 [XMP, XMP-photoshop, Image] Instructions - Instructions: What instructions-v2 [XMP, XMP-photoshop, Author] Source - Source: I'm the source-v2 [XMP, XMP-photoshop, Location] State - State: Ont-v2 [XMP, XMP-photoshop, Image] SupplementalCategories - Supplemental Categories: amazing, image, utilities, v2 [XMP, XMP-photoshop, Image] TransmissionReference - Transmission Reference: What is a transmission reference?-v2 [XMP, XMP-photoshop, Image] Urgency - Urgency: 8 (least urgent) [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: My Job-v2 [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:photoshop:4cc7b857-69d0-11d8-8ac4-bb59c92f0d9a-v2 [XMP, XMP-xmpRights, Author] Marked - Marked: False [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/-v2 [ICC_Profile, ICC-header, Image] 4 - Profile CMM Type: Lino [ICC_Profile, ICC-header, Image] 8 - Profile Version: 2.1.0 [ICC_Profile, ICC-header, Image] 12 - Profile Class: Display Device Profile [ICC_Profile, ICC-header, Image] 16 - Color Space Data: RGB [ICC_Profile, ICC-header, Image] 20 - Profile Connection Space: XYZ [ICC_Profile, ICC-header, Time] 24 - Profile Date Time: 1998:02:09 06:49:00 [ICC_Profile, ICC-header, Image] 36 - Profile File Signature: acsp [ICC_Profile, ICC-header, Image] 40 - Primary Platform: Microsoft Corporation [ICC_Profile, ICC-header, Image] 44 - CMM Flags: Not Embedded, Independent [ICC_Profile, ICC-header, Image] 48 - Device Manufacturer: IEC [ICC_Profile, ICC-header, Image] 52 - Device Model: sRGB [ICC_Profile, ICC-header, Image] 56 - Device Attributes: Reflective, Glossy, Positive, Color [ICC_Profile, ICC-header, Image] 64 - Rendering Intent: Perceptual [ICC_Profile, ICC-header, Image] 68 - Connection Space Illuminant: 0.9642 1 0.82491 [ICC_Profile, ICC-header, Image] 80 - Profile Creator: HP [ICC_Profile, ICC-header, Image] 84 - Profile ID: 0 [ICC_Profile, ICC_Profile, Image] cprt - Profile Copyright: Copyright (c) 1998 Hewlett-Packard Company [ICC_Profile, ICC_Profile, Image] desc - Profile Description: sRGB IEC61966-2.1 [ICC_Profile, ICC_Profile, Image] wtpt - Media White Point: 0.95045 1 1.08905 [ICC_Profile, ICC_Profile, Image] bkpt - Media Black Point: 0 0 0 [ICC_Profile, ICC_Profile, Image] rXYZ - Red Matrix Column: 0.43607 0.22249 0.01392 [ICC_Profile, ICC_Profile, Image] gXYZ - Green Matrix Column: 0.38515 0.71687 0.09708 [ICC_Profile, ICC_Profile, Image] bXYZ - Blue Matrix Column: 0.14307 0.06061 0.7141 [ICC_Profile, ICC_Profile, Camera] dmnd - Device Mfg Desc: IEC http://www.iec.ch [ICC_Profile, ICC_Profile, Camera] dmdd - Device Model Desc: IEC 61966-2.1 Default RGB colour space - sRGB [ICC_Profile, ICC_Profile, Image] vued - Viewing Cond Desc: Reference Viewing Condition in IEC61966-2.1 [ICC_Profile, ICC-view, Image] 8 - Viewing Cond Illuminant: 19.6445 20.3718 16.8089 [ICC_Profile, ICC-view, Image] 20 - Viewing Cond Surround: 3.92889 4.07439 3.36179 [ICC_Profile, ICC-view, Image] 32 - Viewing Cond Illuminant Type: D50 [ICC_Profile, ICC_Profile, Image] lumi - Luminance: 76.03647 80 87.12462 [ICC_Profile, ICC-meas, Image] 8 - Measurement Observer: CIE 1931 [ICC_Profile, ICC-meas, Image] 12 - Measurement Backing: 0 0 0 [ICC_Profile, ICC-meas, Image] 24 - Measurement Geometry: Unknown [ICC_Profile, ICC-meas, Image] 28 - Measurement Flare: 0.999% [ICC_Profile, ICC-meas, Image] 32 - Measurement Illuminant: D65 [ICC_Profile, ICC_Profile, Image] tech - Technology: Cathode Ray Tube Display [ICC_Profile, ICC_Profile, Image] rTRC - Red Tone Reproduction Curve: (Binary data 2060 bytes) [ICC_Profile, ICC_Profile, Image] gTRC - Green Tone Reproduction Curve: (Binary data 2060 bytes) [ICC_Profile, ICC_Profile, Image] bTRC - Blue Tone Reproduction Curve: (Binary data 2060 bytes) [APP14, Adobe, Image] 0 - DCT Encode Version: 100 [APP14, Adobe, Image] 1 - APP14 Flags 0: (none) [APP14, Adobe, Image] 2 - APP14 Flags 1: (none) [APP14, Adobe, Image] 3 - Color Transform: YCbCr [Composite, Composite, Image] Aperture - Aperture: 4.9 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/64 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] LightValue - Light Value: 10.4 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 6.0 mm ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_30.out�������������������������������������������������������������������000644 �000765 �000024 �00000005577 11510412077 016341� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 8.44'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:creator> <rdf:Seq> <rdf:li>Phil Harvey</rdf:li> </rdf:Seq> </dc:creator> <dc:description> <rdf:Alt> <rdf:li xml:lang='x-default'>UTF-16 (big-endian) encoded XMP</rdf:li> </rdf:Alt> </dc:description> <dc:rights> <rdf:Alt> <rdf:li xml:lang='x-default'>Copyright 2004 Phil Harvey</rdf:li> </rdf:Alt> </dc:rights> <dc:subject> <rdf:Bag> <rdf:li>ExifTool</rdf:li> <rdf:li>Test</rdf:li> <rdf:li>XMP</rdf:li> </rdf:Bag> </dc:subject> <dc:title> <rdf:Alt> <rdf:li xml:lang='x-default'>Test IPTC picture</rdf:li> </rdf:Alt> </dc:title> </rdf:Description> <rdf:Description rdf:about='' xmlns:photoshop='http://ns.adobe.com/photoshop/1.0/'> <photoshop:AuthorsPosition>My Position</photoshop:AuthorsPosition> <photoshop:CaptionWriter>I wrote it</photoshop:CaptionWriter> <photoshop:Category>1</photoshop:Category> <photoshop:City>Kingston</photoshop:City> <photoshop:Country>Canada</photoshop:Country> <photoshop:Credit>My Credit</photoshop:Credit> <photoshop:DateCreated>2004-02-26</photoshop:DateCreated> <photoshop:Headline>No headline</photoshop:Headline> <photoshop:Instructions>What instructions</photoshop:Instructions> <photoshop:Source>I&#39;m the source</photoshop:Source> <photoshop:State>Ont</photoshop:State> <photoshop:SupplementalCategories> <rdf:Bag> <rdf:li>amazing</rdf:li> <rdf:li>image</rdf:li> <rdf:li>utilities</rdf:li> </rdf:Bag> </photoshop:SupplementalCategories> <photoshop:TransmissionReference>What is a transmission reference?</photoshop:TransmissionReference> <photoshop:Urgency>8</photoshop:Urgency> </rdf:Description> <rdf:Description rdf:about='' xmlns:xmp='http://ns.adobe.com/xap/1.0/'> <xmp:CreateDate>2001-05-19T18:36:41</xmp:CreateDate> <xmp:ModifyDate>2004-02-26T09:36:46</xmp:ModifyDate> </rdf:Description> <rdf:Description rdf:about='' xmlns:stJob='http://ns.adobe.com/xap/1.0/sType/Job#' xmlns:xmpBJ='http://ns.adobe.com/xap/1.0/bj/'> <xmpBJ:JobRef> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <stJob:name>My Job</stJob:name> </rdf:li> </rdf:Bag> </xmpBJ:JobRef> </rdf:Description> <rdf:Description rdf:about='' xmlns:xmpMM='http://ns.adobe.com/xap/1.0/mm/'> <xmpMM:DocumentID>adobe:docid:photoshop:4cc7b857-69d0-11d8-8ac4-bb59c92f0d9a</xmpMM:DocumentID> </rdf:Description> <rdf:Description rdf:about='' xmlns:xmpRights='http://ns.adobe.com/xap/1.0/rights/'> <xmpRights:Marked>False</xmpRights:Marked> <xmpRights:WebStatement>http://owl.phy.queensu.ca/~phil/exiftool/</xmpRights:WebStatement> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>���������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_31.out�������������������������������������������������������������������000644 �000765 �000024 �00000002717 12546457300 016343� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: XMP4.xmp [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 2.4 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2009:05:24 11:19:39-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:55-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: XMP [File, File, Image] FileTypeExtension - File Type Extension: xmp [File, File, Image] MIMEType - MIME Type: application/rdf+xml [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 7.77 [XMP, XMP-iptcExt, Location] LocationCreated - Location Created: [{City=one,CountryCode=1},{City=two,CountryCode=2},{City=three},{CountryCode=4}] [XMP, XMP-dc, Author] contributor - Contributor: me [XMP, XMP-dc, Image] subject - Subject: one, two [XMP, XMP-test, Unknown] test:StructList2 - Struct List 2: [{Item1=c1-1,Item2=c2-1},{Item1=c1-2,Item2=c2-2,TestList1=[x1],TestList2=[y1,y2]}] [XMP, XMP-test, Unknown] test:StructList1 - Struct List 1: [{Item1=b1,Item2=b2}] [XMP, XMP-test, Unknown] test:BareStruct - Bare Struct: {Item1=a1,Item2=a2} [XMP, XMP-test, Unknown] test:BareList2 - Bare List 2: b1, b2 [XMP, XMP-test, Unknown] test:BareList1 - Bare List 1: a1 �������������������������������������������������Image-ExifTool-10.10/t/XMP_32.out�������������������������������������������������������������������000644 �000765 �000024 �00000000157 11512134652 016332� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 8.44 [XMP, XMP-dc, Image] title-de - Title (de): A �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_34.out�������������������������������������������������������������������000644 �000765 �000024 �00000000157 11512134652 016334� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 8.44 [XMP, XMP-dc, Image] title-de - Title (de): C �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_36.out�������������������������������������������������������������������000644 �000765 �000024 �00000003366 12546457300 016351� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: XMP5.xmp [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 4.6 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:11 07:17:32-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:55-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:11 07:18:33-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: XMP [File, File, Image] FileTypeExtension - File Type Extension: xmp [File, File, Image] MIMEType - MIME Type: application/rdf+xml [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 8.82 [XMP, XMP-iptcExt, Author] ArtworkOrObject - Artwork Or Object: [{AOTitle=test,AOTitle-de=pr&uuml;fung,AOTitle-fr=&eacute;preuve}] [XMP, XMP-exif, Camera] Flash - Flash: {Mode=Off,Return=No return detection} [XMP, XMP-mwg-kw, Image] Keywords - Keyword Info: {Hierarchy=[{Children=[{Keyword=A-2}],Keyword=A-1},{Children=[{Keyword=B-2}],Keyword=B-1},{Keyword=C-1}]} [XMP, XMP-mwg-rs, Image] Regions - Region Info: {RegionList=[{Area={H=8,W=8,X=0,Y=0},Name=Region 1,SeeAlso=plus:Licensee,Type=Face},{Extensions={XMP-exif:Flash={Mode=On,Return=Return not detected},XMP-iptcExt:ArtworkOrObject=[{AOTitle-de=verf&auml;nglich}],XMP-myXMPns:BTestTag={Field1=[this is wild]},XMP-xmpRights:UsageTerms-fr=libre}}]} [XMP, XMP-myXMPns, Other] BTestTag - B Test Tag: {Field1-en-CA=[eh?],Field1-en-US=[huh?,groovy],Field1-fr=[,ing&eacute;nieux]} [XMP, XMP-plus, Author] Licensee - Licensee: [{LicenseeName=Phil}] [Composite, Composite, Other] Flash - Flash: Off, Did not fire ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_37.out�������������������������������������������������������������������000644 �000765 �000024 �00000005426 12546457300 016351� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: XMP5.xmp [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 4.6 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:11 07:17:32-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:55-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:11 07:18:33-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: XMP [File, File, Image] FileTypeExtension - File Type Extension: xmp [File, File, Image] MIMEType - MIME Type: application/rdf+xml [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 8.82 [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOTitle - Artwork Title: test [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOTitle-de - Artwork Title (de): pr&uuml;fung [XMP, XMP-iptcExt, Author] ArtworkOrObjectAOTitle-fr - Artwork Title (fr): &eacute;preuve [XMP, XMP-exif, Camera] FlashMode - Flash Mode: Off [XMP, XMP-exif, Camera] FlashReturn - Flash Return: No return detection [XMP, XMP-mwg-kw, Image] KeywordsHierarchyChildrenKeyword - Hierarchical Keywords 2: A-2, B-2 [XMP, XMP-mwg-kw, Image] KeywordsHierarchyKeyword - Hierarchical Keywords 1: A-1, B-1, C-1 [XMP, XMP-mwg-rs, Image] RegionsRegionListAreaH - Region Area H: 8 [XMP, XMP-mwg-rs, Image] RegionsRegionListAreaW - Region Area W: 8 [XMP, XMP-mwg-rs, Image] RegionsRegionListAreaX - Region Area X: 0 [XMP, XMP-mwg-rs, Image] RegionsRegionListAreaY - Region Area Y: 0 [XMP, XMP-mwg-rs, Image] RegionsRegionListName - Region Name: Region 1 [XMP, XMP-mwg-rs, Image] RegionsRegionListType - Region Type: Face [XMP, XMP-mwg-rs, Image] RegionsRegionListSeeAlso - Region See Also: plus:Licensee [XMP, XMP-mwg-rs, Author] Iptc4xmpExt:RegionsRegionListExtensionsArtworkOrObjectAOTitle-de - Region Extensions Artwork Title (de): verf&auml;nglich [XMP, XMP-mwg-rs, Camera] exif:RegionsRegionListExtensionsFlashMode - Region Extensions Flash Mode: On [XMP, XMP-mwg-rs, Camera] exif:RegionsRegionListExtensionsFlashReturn - Region Extensions Flash Return: Return not detected [XMP, XMP-mwg-rs, Other] myXMPns:RegionsRegionListExtensionsBTestTagField1 - Region Extensions Renamed: this is wild [XMP, XMP-mwg-rs, Author] xmpRights:RegionsRegionListExtensionsUsageTerms-fr - Region Extensions Usage Terms (fr): libre [XMP, XMP-myXMPns, Other] BTestTagField1-en-CA - Renamed (en-CA): eh? [XMP, XMP-myXMPns, Other] BTestTagField1-en-US - Renamed (en-US): huh?, groovy [XMP, XMP-myXMPns, Other] BTestTagField1-fr - Renamed (fr): ing&eacute;nieux [XMP, XMP-plus, Author] LicenseeLicenseeName - Licensee Name: Phil [Composite, Composite, Other] Flash - Flash: Off, Did not fire ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_39.out�������������������������������������������������������������������000644 �000765 �000024 �00000006514 12546457300 016352� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: XMP.inx [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 6.2 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2011:11:25 11:38:08-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:55-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: INX [File, File, Image] FileTypeExtension - File Type Extension: inx [File, File, Image] MIMEType - MIME Type: application/x-indesign-interchange [XMP, XMP-x, Document] xmptk - XMP Toolkit: Adobe XMP Core 4.0-c006 1.236519, Wed Jun 14 2006 08:31:24 [XMP, XMP-xmpMM, Other] InstanceID - Instance ID: beb2441b-dd64-11df-b20e-e65882d9428e [XMP, XMP-xmpMM, Other] DerivedFromInstanceID - Derived From Instance ID: f0d208df-dc56-11df-95ac-e273561c7691 [XMP, XMP-xmpMM, Other] DerivedFromDocumentID - Derived From Document ID: adobe:docid:indd:0419e6d7-167b-11df-8afc-dcb7ca988d92 [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:indd:f0d208e0-dc56-11df-95ac-e273561c7691 [XMP, XMP-xmpMM, Other] RenditionClass - Rendition Class: default [XMP, XMP-xmpMM, Other] ManifestLinkForm - Manifest Link Form: ReferenceStream [XMP, XMP-xmpMM, Other] ManifestReferenceInstanceID - Manifest Reference Instance ID: uuid:9CC7E7EDDC5811DF8C4BC09357E49DC9 [XMP, XMP-xmpMM, Other] ManifestReferenceDocumentID - Manifest Reference Document ID: uuid:9CC7E7ECDC5811DF8C4BC09357E49DC9 [XMP, XMP-xmpMM, Other] ManifestPlacedXResolution - Manifest Placed X Resolution: 72.00 [XMP, XMP-xmpMM, Other] ManifestPlacedYResolution - Manifest Placed Y Resolution: 72.00 [XMP, XMP-xmpMM, Other] ManifestPlacedResolutionUnit - Manifest Placed Resolution Unit: Inches [XMP, XMP-xmp, Time] CreateDate - Create Date: 2010:10:18 14:59:13Z [XMP, XMP-xmp, Time] ModifyDate - Modify Date: 2010:10:19 22:53:33Z [XMP, XMP-xmp, Time] MetadataDate - Metadata Date: 2010:10:19 22:53:33Z [XMP, XMP-xmp, Image] CreatorTool - Creator Tool: Adobe InDesign 5.0 [XMP, XMP-xmp, Image] ThumbnailsFormat - Thumbnail Format: JPEG [XMP, XMP-xmp, Image] ThumbnailsWidth - Thumbnail Width: 1024 [XMP, XMP-xmp, Image] ThumbnailsHeight - Thumbnail Height: 1024 [XMP, XMP-xmpTPg, Image] ColorantsSwatchName - Colorant Swatch Name: Black [XMP, XMP-xmpTPg, Image] ColorantsMode - Colorant Mode: CMYK [XMP, XMP-xmpTPg, Image] ColorantsType - Colorant Type: Process [XMP, XMP-xmpTPg, Image] ColorantsCyan - Colorant Cyan: 0 [XMP, XMP-xmpTPg, Image] ColorantsMagenta - Colorant Magenta: 0 [XMP, XMP-xmpTPg, Image] ColorantsYellow - Colorant Yellow: 0 [XMP, XMP-xmpTPg, Image] ColorantsBlack - Colorant Black: 100 [XMP, XMP-xmpTPg, Image] FontsFontName - Font Name: Times-Roman [XMP, XMP-xmpTPg, Image] FontsFontFamily - Font Family: Times [XMP, XMP-xmpTPg, Image] FontsFontFace - Font Face: Regular [XMP, XMP-xmpTPg, Image] FontsFontType - Font Type: TrueType [XMP, XMP-xmpTPg, Image] FontsVersionString - Font Version: Times-Roman6.0d6e5 [XMP, XMP-xmpTPg, Image] FontsComposite - Font Composite: false [XMP, XMP-xmpTPg, Image] FontsFontFileName - Font File Name: Times.dfont [XMP, XMP-dc, Image] format - Format: application/x-indesign ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_40.out�������������������������������������������������������������������000644 �000765 �000024 �00000000337 11726704707 016344� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 8.82 [XMP, XMP-mwg-kw, Image] KeywordsHierarchyKeyword - Hierarchical Keywords 1: A-1, B-1, C-1 [XMP, XMP-plus, Author] LicenseeLicenseeName - Licensee Name: Phil �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_41.out�������������������������������������������������������������������000644 �000765 �000024 �00000034442 12546457300 016344� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: XMP_41_failed.xmp [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 9.8 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:55-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:55-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:55-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: XMP [File, File, Image] FileTypeExtension - File Type Extension: xmp [File, File, Image] MIMEType - MIME Type: application/rdf+xml [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-dwc, Time] EventDay - Event Day: 2013 [XMP, XMP-dwc, Time] EventEarliestDate - Event Earliest Date: 2013 [XMP, XMP-dwc, Time] EventEndDayOfYear - Event End Day Of Year: 2013 [XMP, XMP-dwc, Other] EventEventID - Event ID: 2013 [XMP, XMP-dwc, Other] EventEventRemarks - Event Remarks: 2013 [XMP, XMP-dwc, Time] EventEventTime - Event Time: 2013 [XMP, XMP-dwc, Other] EventFieldNotes - Event Field Notes: 2013 [XMP, XMP-dwc, Other] EventFieldNumber - Event Field Number: 2013 [XMP, XMP-dwc, Other] EventHabitat - Event Habitat: 2013 [XMP, XMP-dwc, Time] EventLatestDate - Event Latest Date: 2013 [XMP, XMP-dwc, Time] EventMonth - Event Month: 2013 [XMP, XMP-dwc, Other] EventSamplingEffort - Event Sampling Effort: 2013 [XMP, XMP-dwc, Other] EventSamplingProtocol - Event Sampling Protocol: 2013 [XMP, XMP-dwc, Time] EventStartDayOfYear - Event Start Day Of Year: 2013 [XMP, XMP-dwc, Time] EventVerbatimEventDate - Event Verbatim Event Date: 2013 [XMP, XMP-dwc, Time] EventYear - Event Year: 2013 [XMP, XMP-dwc, Other] GeologicalContextBed - Geological Context Bed: 2013 [XMP, XMP-dwc, Other] GeologicalContextEarliestAgeOrLowestStage - Earliest Age Or Lowest Stage: 2013 [XMP, XMP-dwc, Other] GeologicalContextEarliestEonOrLowestEonothem - Earliest Eon Or Lowest Eonothem: 2013 [XMP, XMP-dwc, Other] GeologicalContextEarliestEpochOrLowestSeries - Earliest Epoch Or Lowest Series: 2013 [XMP, XMP-dwc, Other] GeologicalContextEarliestEraOrLowestErathem - Earliest Era Or Lowest Erathem: 2013 [XMP, XMP-dwc, Other] GeologicalContextEarliestPeriodOrLowestSystem - Earliest Period Or Lowest System: 2013 [XMP, XMP-dwc, Other] GeologicalContextFormation - Geological Context Formation: 2013 [XMP, XMP-dwc, Other] GeologicalContextGeologicalContextID - Geological Context ID: 2013 [XMP, XMP-dwc, Other] GeologicalContextGroup - Geological Context Group: 2013 [XMP, XMP-dwc, Other] GeologicalContextHighestBiostratigraphicZone - Highest Biostratigraphic Zone: 2013 [XMP, XMP-dwc, Other] GeologicalContextLatestAgeOrHighestStage - Latest Age Or Highest Stage: 2013 [XMP, XMP-dwc, Other] GeologicalContextLatestEonOrHighestEonothem - Latest Eon Or Highest Eonothem: 2013 [XMP, XMP-dwc, Other] GeologicalContextLatestEpochOrHighestSeries - Latest Epoch Or Highest Series: 2013 [XMP, XMP-dwc, Other] GeologicalContextLatestEraOrHighestErathem - Latest Era Or Highest Erathem: 2013 [XMP, XMP-dwc, Other] GeologicalContextLatestPeriodOrHighestSystem - Latest Period Or Highest System: 2013 [XMP, XMP-dwc, Other] GeologicalContextLithostratigraphicTerms - Lithostratigraphic Terms: 2013 [XMP, XMP-dwc, Other] GeologicalContextLowestBiostratigraphicZone - Lowest Biostratigraphic Zone: 2013 [XMP, XMP-dwc, Other] GeologicalContextMember - Geological Context Member: 2013 [XMP, XMP-dwc, Time] IdentificationDateIdentified - Date Identified: 2013 [XMP, XMP-dwc, Other] IdentificationIdentificationID - Identification ID: 2013 [XMP, XMP-dwc, Other] IdentificationIdentificationQualifier - Identification Qualifier: 2013 [XMP, XMP-dwc, Other] IdentificationIdentificationReferences - Identification References: 2013 [XMP, XMP-dwc, Other] IdentificationIdentificationRemarks - Identification Remarks: 2013 [XMP, XMP-dwc, Other] IdentificationIdentificationVerificationStatus - Identification Verification Status: 2013 [XMP, XMP-dwc, Other] IdentificationIdentifiedBy - Identified By: 2013 [XMP, XMP-dwc, Other] IdentificationTypeStatus - Type Status: 2013 [XMP, XMP-dwc, Other] MeasurementOrFactMeasurementAccuracy - Measurement Accuracy: 2013 [XMP, XMP-dwc, Other] MeasurementOrFactMeasurementDeterminedBy - Measurement Determined By: 2013 [XMP, XMP-dwc, Time] MeasurementOrFactMeasurementDeterminedDate - Measurement Determined Date: 2013 [XMP, XMP-dwc, Other] MeasurementOrFactMeasurementID - Measurement ID: 2013 [XMP, XMP-dwc, Other] MeasurementOrFactMeasurementMethod - Measurement Method: 2013 [XMP, XMP-dwc, Other] MeasurementOrFactMeasurementRemarks - Measurement Remarks: 2013 [XMP, XMP-dwc, Other] MeasurementOrFactMeasurementType - Measurement Type: 2013 [XMP, XMP-dwc, Other] MeasurementOrFactMeasurementUnit - Measurement Unit: 2013 [XMP, XMP-dwc, Other] MeasurementOrFactMeasurementValue - Measurement Value: 2013 [XMP, XMP-dwc, Other] OccurrenceAssociatedMedia - Occurrence Associated Media: 2013 [XMP, XMP-dwc, Other] OccurrenceAssociatedOccurrences - Occurrence Associated Occurrences: 2013 [XMP, XMP-dwc, Other] OccurrenceAssociatedReferences - Occurrence Associated References: 2013 [XMP, XMP-dwc, Other] OccurrenceAssociatedSequences - Occurrence Associated Sequences: 2013 [XMP, XMP-dwc, Other] OccurrenceAssociatedTaxa - Occurrence Associated Taxa: 2013 [XMP, XMP-dwc, Other] OccurrenceBehavior - Occurrence Behavior: 2013 [XMP, XMP-dwc, Other] OccurrenceCatalogNumber - Occurrence Catalog Number: 2013 [XMP, XMP-dwc, Other] OccurrenceDisposition - Occurrence Disposition: 2013 [XMP, XMP-dwc, Other] OccurrenceEstablishmentMeans - Occurrence Establishment Means: 2013 [XMP, XMP-dwc, Other] OccurrenceIndividualCount - Occurrence Individual Count: 2013 [XMP, XMP-dwc, Other] OccurrenceIndividualID - Occurrence Individual ID: 2013 [XMP, XMP-dwc, Other] OccurrenceLifeStage - Occurrence Life Stage: 2013 [XMP, XMP-dwc, Other] OccurrenceOccurrenceDetails - Occurrence Details: 2013 [XMP, XMP-dwc, Other] OccurrenceOccurrenceID - Occurrence ID: 2013 [XMP, XMP-dwc, Other] OccurrenceOccurrenceRemarks - Occurrence Remarks: 2013 [XMP, XMP-dwc, Other] OccurrenceOccurrenceStatus - Occurrence Status: 2013 [XMP, XMP-dwc, Other] OccurrenceOtherCatalogNumbers - Occurrence Other Catalog Numbers: 2013 [XMP, XMP-dwc, Other] OccurrencePreparations - Occurrence Preparations: 2013 [XMP, XMP-dwc, Other] OccurrencePreviousIdentifications - Occurrence Previous Identifications: 2013 [XMP, XMP-dwc, Other] OccurrenceRecordNumber - Occurrence Record Number: 2013 [XMP, XMP-dwc, Other] OccurrenceRecordedBy - Occurrence Recorded By: 2013 [XMP, XMP-dwc, Other] OccurrenceReproductiveCondition - Occurrence Reproductive Condition: 2013 [XMP, XMP-dwc, Other] OccurrenceSex - Occurrence Sex: 2013 [XMP, XMP-dwc, Other] RecordBasisOfRecord - Record Basis Of Record: 2013 [XMP, XMP-dwc, Other] RecordCollectionCode - Record Collection Code: 2013 [XMP, XMP-dwc, Other] RecordCollectionID - Record Collection ID: 2013 [XMP, XMP-dwc, Other] RecordDataGeneralizations - Record Data Generalizations: 2013 [XMP, XMP-dwc, Other] RecordDatasetID - Record Dataset ID: 2013 [XMP, XMP-dwc, Other] RecordDatasetName - Record Dataset Name: 2013 [XMP, XMP-dwc, Other] RecordDynamicProperties - Record Dynamic Properties: 2013 [XMP, XMP-dwc, Other] RecordInformationWithheld - Record Information Withheld: 2013 [XMP, XMP-dwc, Other] RecordInstitutionCode - Record Institution Code: 2013 [XMP, XMP-dwc, Other] RecordInstitutionID - Record Institution ID: 2013 [XMP, XMP-dwc, Other] RecordOwnerInstitutionCode - Record Owner Institution Code: 2013 [XMP, XMP-dwc, Other] ResourceRelationshipRelatedResourceID - Related Resource ID: 2013 [XMP, XMP-dwc, Other] ResourceRelationshipRelationshipAccordingTo - Relationship According To: 2013 [XMP, XMP-dwc, Time] ResourceRelationshipRelationshipEstablishedDate - Relationship Established Date: 2013 [XMP, XMP-dwc, Other] ResourceRelationshipRelationshipOfResource - Relationship Of Resource: 2013 [XMP, XMP-dwc, Other] ResourceRelationshipRelationshipRemarks - Relationship Remarks: 2013 [XMP, XMP-dwc, Other] ResourceRelationshipResourceID - Resource ID: 2013 [XMP, XMP-dwc, Other] ResourceRelationshipResourceRelationshipID - Resource Relationship ID: 2013 [XMP, XMP-dwc, Other] TaxonAcceptedNameUsage - Taxon Accepted Name Usage: 2013 [XMP, XMP-dwc, Other] TaxonAcceptedNameUsageID - Taxon Accepted Name Usage ID: 2013 [XMP, XMP-dwc, Other] TaxonClass - Taxon Class: 2013 [XMP, XMP-dwc, Other] TaxonFamily - Taxon Family: 2013 [XMP, XMP-dwc, Other] TaxonGenus - Taxon Genus: 2013 [XMP, XMP-dwc, Other] TaxonHigherClassification - Taxon Higher Classification: 2013 [XMP, XMP-dwc, Other] TaxonInfraspecificEpithet - Taxon Infraspecific Epithet: 2013 [XMP, XMP-dwc, Other] TaxonKingdom - Taxon Kingdom: 2013 [XMP, XMP-dwc, Other] TaxonNameAccordingTo - Taxon Name According To: 2013 [XMP, XMP-dwc, Other] TaxonNameAccordingToID - Taxon Name According To ID: 2013 [XMP, XMP-dwc, Other] TaxonNamePublishedIn - Taxon Name Published In: 2013 [XMP, XMP-dwc, Other] TaxonNamePublishedInID - Taxon Name Published In ID: 2013 [XMP, XMP-dwc, Other] TaxonNamePublishedInYear - Taxon Name Published In Year: 2013 [XMP, XMP-dwc, Other] TaxonNomenclaturalCode - Taxon Nomenclatural Code: 2013 [XMP, XMP-dwc, Other] TaxonNomenclaturalStatus - Taxon Nomenclatural Status: 2013 [XMP, XMP-dwc, Other] TaxonOrder - Taxon Order: 2013 [XMP, XMP-dwc, Other] TaxonOriginalNameUsage - Taxon Original Name Usage: 2013 [XMP, XMP-dwc, Other] TaxonOriginalNameUsageID - Taxon Original Name Usage ID: 2013 [XMP, XMP-dwc, Other] TaxonParentNameUsage - Taxon Parent Name Usage: 2013 [XMP, XMP-dwc, Other] TaxonParentNameUsageID - Taxon Parent Name Usage ID: 2013 [XMP, XMP-dwc, Other] TaxonPhylum - Taxon Phylum: 2013 [XMP, XMP-dwc, Other] TaxonScientificName - Taxon Scientific Name: 2013 [XMP, XMP-dwc, Other] TaxonScientificNameAuthorship - Taxon Scientific Name Authorship: 2013 [XMP, XMP-dwc, Other] TaxonScientificNameID - Taxon Scientific Name ID: 2013 [XMP, XMP-dwc, Other] TaxonSpecificEpithet - Taxon Specific Epithet: 2013 [XMP, XMP-dwc, Other] TaxonSubgenus - Taxon Subgenus: 2013 [XMP, XMP-dwc, Other] TaxonTaxonConceptID - Taxon Concept ID: 2013 [XMP, XMP-dwc, Other] TaxonTaxonID - Taxon ID: 2013 [XMP, XMP-dwc, Other] TaxonTaxonRank - Taxon Rank: 2013 [XMP, XMP-dwc, Other] TaxonTaxonRemarks - Taxon Remarks: 2013 [XMP, XMP-dwc, Other] TaxonTaxonomicStatus - Taxon Taxonomic Status: 2013 [XMP, XMP-dwc, Other] TaxonVerbatimTaxonRank - Taxon Verbatim Taxon Rank: 2013 [XMP, XMP-dwc, Other] TaxonVernacularName - Taxon Vernacular Name: 2013 [XMP, XMP-dwc, Location] dctermsLocationContinent - DC Continent: 2013 [XMP, XMP-dwc, Location] dctermsLocationCoordinatePrecision - DC Coordinate Precision: 2013 [XMP, XMP-dwc, Location] dctermsLocationCoordinateUncertaintyInMeters - DC Coordinate Uncertainty In Meters: 2013 [XMP, XMP-dwc, Location] dctermsLocationCountry - DC Country: 2013 [XMP, XMP-dwc, Location] dctermsLocationCountryCode - DC Country Code: 2013 [XMP, XMP-dwc, Location] dctermsLocationCounty - DC County: 2013 [XMP, XMP-dwc, Location] dctermsLocationDecimalLatitude - DC Decimal Latitude: 2013 [XMP, XMP-dwc, Location] dctermsLocationDecimalLongitude - DC Decimal Longitude: 2013 [XMP, XMP-dwc, Location] dctermsLocationFootprintSRS - DC Footprint SRS: 2013 [XMP, XMP-dwc, Location] dctermsLocationFootprintSpatialFit - DC Footprint Spatial Fit: 2013 [XMP, XMP-dwc, Location] dctermsLocationFootprintWKT - DC Footprint WKT: 2013 [XMP, XMP-dwc, Location] dctermsLocationGeodeticDatum - DC Geodetic Datum: 2013 [XMP, XMP-dwc, Location] dctermsLocationGeoreferenceProtocol - DC Georeference Protocol: 2013 [XMP, XMP-dwc, Location] dctermsLocationGeoreferenceRemarks - DC Georeference Remarks: 2013 [XMP, XMP-dwc, Location] dctermsLocationGeoreferenceSources - DC Georeference Sources: 2013 [XMP, XMP-dwc, Location] dctermsLocationGeoreferenceVerificationStatus - DC Georeference Verification Status: 2013 [XMP, XMP-dwc, Location] dctermsLocationGeoreferencedBy - DC Georeferenced By: 2013 [XMP, XMP-dwc, Location] dctermsLocationGeoreferencedDate - DC Georeferenced Date: 2013 [XMP, XMP-dwc, Location] dctermsLocationHigherGeography - DC Higher Geography: 2013 [XMP, XMP-dwc, Location] dctermsLocationHigherGeographyID - DC Higher Geography ID: 2013 [XMP, XMP-dwc, Location] dctermsLocationIsland - DC Island: 2013 [XMP, XMP-dwc, Location] dctermsLocationIslandGroup - DC Island Group: 2013 [XMP, XMP-dwc, Location] dctermsLocationLocality - DC Locality: 2013 [XMP, XMP-dwc, Location] dctermsLocationLocationAccordingTo - DC Location According To: 2013 [XMP, XMP-dwc, Location] dctermsLocationLocationID - DC Location ID: 2013 [XMP, XMP-dwc, Location] dctermsLocationLocationRemarks - DC Location Remarks: 2013 [XMP, XMP-dwc, Location] dctermsLocationMaximumDepthInMeters - DC Maximum Depth In Meters: 2013 [XMP, XMP-dwc, Location] dctermsLocationMaximumDistanceAboveSurfaceInMeters - DC Maximum Distance Above Surface In Meters: 2013 [XMP, XMP-dwc, Location] dctermsLocationMaximumElevationInMeters - DC Maximum Elevation In Meters: 2013 [XMP, XMP-dwc, Location] dctermsLocationMinimumDepthInMeters - DC Minimum Depth In Meters: 2013 [XMP, XMP-dwc, Location] dctermsLocationMinimumDistanceAboveSurfaceInMeters - DC Minimum Distance Above Surface In Meters: 2013 [XMP, XMP-dwc, Location] dctermsLocationMinimumElevationInMeters - DC Minimum Elevation In Meters: 2013 [XMP, XMP-dwc, Location] dctermsLocationMunicipality - DC Municipality: 2013 [XMP, XMP-dwc, Location] dctermsLocationPointRadiusSpatialFit - DC Point Radius Spatial Fit: 2013 [XMP, XMP-dwc, Location] dctermsLocationStateProvince - DC State Province: 2013 [XMP, XMP-dwc, Location] dctermsLocationVerbatimCoordinateSystem - DC Verbatim Coordinate System: 2013 [XMP, XMP-dwc, Location] dctermsLocationVerbatimCoordinates - DC Verbatim Coordinates: 2013 [XMP, XMP-dwc, Location] dctermsLocationVerbatimDepth - DC Verbatim Depth: 2013 [XMP, XMP-dwc, Location] dctermsLocationVerbatimElevation - DC Verbatim Elevation: 2013 [XMP, XMP-dwc, Location] dctermsLocationVerbatimLatitude - DC Verbatim Latitude: 2013 [XMP, XMP-dwc, Location] dctermsLocationVerbatimLocality - DC Verbatim Locality: 2013 [XMP, XMP-dwc, Location] dctermsLocationVerbatimLongitude - DC Verbatim Longitude: 2013 [XMP, XMP-dwc, Location] dctermsLocationVerbatimSRS - DC Verbatim SRS: 2013 [XMP, XMP-dwc, Location] dctermsLocationWaterBody - DC Water Body: 2013 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_42.out�������������������������������������������������������������������000644 �000765 �000024 �00000000766 12525117063 016343� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 7.50 [XMP, XMP-xmpNote, Other] HasExtendedXMP - Has Extended XMP: 04B9E48040A30A6308713BD1E4223B41 [XMP, XMP-pdf, Author] Author - Author: PhilToo [XMP, XMP-pdf, Time] CreationDate - Creation Date: 2008:10:20 19:54:15 [XMP, XMP-pdf, Author] Creator - Creator: Guess Who [XMP, XMP-pdf, Time] ModDate - Mod Date: 2008:10:20 19:54:15 [XMP, XMP-pdf, Author] Producer - Producer: Just ExifTool again [XMP, XMP-pdf, Image] Title - Title: PDF Title ����������Image-ExifTool-10.10/t/XMP_43.out�������������������������������������������������������������������000644 �000765 �000024 �00000000442 12533100100 016312� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.97 [XMP, XMP-xxxx, Unknown] xxxx:Test - Test: trout [XMP, XMP-tmp0, Unknown] tmp0:Test - Test: tabby [XMP, XMP-xmp, Image] Rating - Rating: 2 [XMP, XMP-dc, Image] subject - Subject: x [XMP, XMP-dc, Image] title - Title: a title ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_44.out�������������������������������������������������������������������000644 �000765 �000024 �00000001610 12533100131 016315� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 9.97'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:subject> <rdf:Bag> <rdf:li>changed</rdf:li> </rdf:Bag> </dc:subject> <dc:title> <rdf:Alt> <rdf:li xml:lang='x-default'>a title</rdf:li> </rdf:Alt> </dc:title> </rdf:Description> <rdf:Description rdf:about='' xmlns:tmp0='http://testtag.com/feline/1.0/'> <tmp0:Test>tabby</tmp0:Test> </rdf:Description> <rdf:Description rdf:about='' xmlns:xmp='http://ns.adobe.com/xap/1.0/'> <xmp:Rating>2</xmp:Rating> </rdf:Description> <rdf:Description rdf:about='' xmlns:xxxx='http://testtag.com/fish/1.0/'> <xxxx:Test>trout</xxxx:Test> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_45.out�������������������������������������������������������������������000644 �000765 �000024 �00000001312 12635031217 016330� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 10.08'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:exif='http://ns.adobe.com/exif/1.0/'> <exif:Flash rdf:parseType='Resource'/> </rdf:Description> <rdf:Description rdf:about='' xmlns:mwg-rs='http://www.metadataworkinggroup.com/schemas/regions/'> <mwg-rs:Regions rdf:parseType='Resource'> <mwg-rs:RegionList> <rdf:Bag> <rdf:li rdf:parseType='Resource'/> <rdf:li rdf:parseType='Resource'/> </rdf:Bag> </mwg-rs:RegionList> </mwg-rs:Regions> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_5.out��������������������������������������������������������������������000644 �000765 �000024 �00000003770 12514720514 016257� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileSize - File Size: 5.8 kB [File, File, Image] FileType - File Type: XMP [File, File, Image] FileTypeExtension - File Type Extension: xmp [File, File, Image] MIMEType - MIME Type: application/rdf+xml [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 4.73 [XMP, XMP-rdf, Document] about - About: uuid:80056b68-1045-fa97-3401-6f4ed84cd53d [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: UTF-16 (big-endian) encoded XMP [XMP, XMP-dc, Author] rights - Rights: Copyright 2004 Phil Harvey [XMP, XMP-dc, Image] subject - Subject: ExifTool, Test, XMP [XMP, XMP-dc, Image] title - Title: Test IPTC picture [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: My Position [XMP, XMP-photoshop, Author] CaptionWriter - Caption Writer: I wrote it [XMP, XMP-photoshop, Image] Category - Category: 1 [XMP, XMP-photoshop, Location] City - City: Kingston [XMP, XMP-photoshop, Location] Country - Country: Canada [XMP, XMP-photoshop, Author] Credit - Credit: My Credit [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2004:02:26 [XMP, XMP-photoshop, Image] Headline - Headline: No headline [XMP, XMP-photoshop, Image] Instructions - Instructions: What instructions [XMP, XMP-photoshop, Author] Source - Source: I'm the source [XMP, XMP-photoshop, Location] State - State: Ont [XMP, XMP-photoshop, Image] SupplementalCategories - Supplemental Categories: amazing, image, utilities [XMP, XMP-photoshop, Image] TransmissionReference - Transmission Reference: What is a transmission reference? [XMP, XMP-photoshop, Image] Urgency - Urgency: 8 (least urgent) [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: My Job [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:photoshop:4cc7b857-69d0-11d8-8ac4-bb59c92f0d9a [XMP, XMP-xmpRights, Author] Marked - Marked: False [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ ��������Image-ExifTool-10.10/t/XMP_6.out��������������������������������������������������������������������000644 �000765 �000024 �00000013421 12546457300 016257� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: XMP_6_failed.xmp [File, System, Image] Directory - Directory: t [File, System, Image] FileSize - File Size: 5.7 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2015:04:18 07:17:54-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:54-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:18 07:17:54-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: XMP [File, File, Image] FileTypeExtension - File Type Extension: xmp [File, File, Image] MIMEType - MIME Type: application/rdf+xml [XMP, XMP-x, Document] xmptk - XMP Toolkit: Image::ExifTool 9.93 [XMP, XMP-dc, Author] creator - Creator: Phil Harvey [XMP, XMP-dc, Image] description - Description: UTF-16 (big-endian) encoded XMP [XMP, XMP-dc, Author] rights - Rights: Copyright 2004 Phil Harvey [XMP, XMP-dc, Image] subject - Subject: ExifTool, Test, XMP [XMP, XMP-dc, Image] title - Title: Test IPTC picture [XMP, XMP-exif, Image] ApertureValue - Aperture Value: 3.5 [XMP, XMP-exif, Image] BrightnessValue - Brightness Value: 2 [XMP, XMP-exif, Image] ColorSpace - Color Space: sRGB [XMP, XMP-exif, Image] ComponentsConfiguration - Components Configuration: Y, Cb, Cr, - [XMP, XMP-exif, Image] CompressedBitsPerPixel - Compressed Bits Per Pixel: 1.6 [XMP, XMP-exif, Time] DateTimeOriginal - Date/Time Original: 2001:05:19 18:36:41 [XMP, XMP-exif, Image] ExifVersion - Exif Version: 0210 [XMP, XMP-exif, Image] ExposureBiasValue - Exposure Compensation: 0 [XMP, XMP-exif, Camera] ExposureProgram - Exposure Program: Program AE [XMP, XMP-exif, Image] FNumber - F Number: 3.5 [XMP, XMP-exif, Image] FileSource - File Source: Digital Camera [XMP, XMP-exif, Camera] FlashFired - Flash Fired: True [XMP, XMP-exif, Camera] FlashFunction - Flash Function: False [XMP, XMP-exif, Camera] FlashMode - Flash Mode: Unknown [XMP, XMP-exif, Camera] FlashRedEyeMode - Flash Red Eye Mode: False [XMP, XMP-exif, Camera] FlashReturn - Flash Return: No return detection [XMP, XMP-exif, Image] FlashpixVersion - Flashpix Version: 0100 [XMP, XMP-exif, Camera] FocalLength - Focal Length: 6.0 mm [XMP, XMP-exif, Camera] FocalPlaneResolutionUnit - Focal Plane Resolution Unit: cm [XMP, XMP-exif, Camera] FocalPlaneXResolution - Focal Plane X Resolution: 3053 [XMP, XMP-exif, Camera] FocalPlaneYResolution - Focal Plane Y Resolution: 3053 [XMP, XMP-exif, Image] ISOSpeedRatings - ISO: 100 [XMP, XMP-exif, Camera] MaxApertureValue - Max Aperture Value: 3.5 [XMP, XMP-exif, Camera] MeteringMode - Metering Mode: Multi-segment [XMP, XMP-exif, Image] PixelXDimension - Exif Image Width: 100 [XMP, XMP-exif, Image] PixelYDimension - Exif Image Height: 80 [XMP, XMP-exif, Image] SceneType - Scene Type: Directly photographed [XMP, XMP-exif, Camera] SensingMethod - Sensing Method: One-chip color area [XMP, XMP-exif, Image] ShutterSpeedValue - Shutter Speed Value: 1/64 [XMP, XMP-photoshop, Author] AuthorsPosition - Authors Position: My Position [XMP, XMP-photoshop, Author] CaptionWriter - Caption Writer: I wrote it [XMP, XMP-photoshop, Image] Category - Category: 1 [XMP, XMP-photoshop, Location] City - City: Kingston [XMP, XMP-photoshop, Location] Country - Country: Canada [XMP, XMP-photoshop, Author] Credit - Credit: My Credit [XMP, XMP-photoshop, Time] DateCreated - Date Created: 2004:02:26 [XMP, XMP-photoshop, Image] Headline - Headline: No headline [XMP, XMP-photoshop, Image] Instructions - Instructions: What instructions [XMP, XMP-photoshop, Author] Source - Source: I'm the source [XMP, XMP-photoshop, Location] State - State: Ont [XMP, XMP-photoshop, Image] SupplementalCategories - Supplemental Categories: amazing, image, utilities [XMP, XMP-photoshop, Image] TransmissionReference - Transmission Reference: What is a transmission reference? [XMP, XMP-photoshop, Image] Urgency - Urgency: 8 (least urgent) [XMP, XMP-tiff, Author] Artist - Artist: Phil Harvey [XMP, XMP-tiff, Image] BitsPerSample - Bits Per Sample: 8 [XMP, XMP-tiff, Image] Compression - Compression: JPEG (old-style) [XMP, XMP-tiff, Author] Copyright - Copyright: Copyright 2004 Phil Harvey [XMP, XMP-tiff, Image] ImageDescription - Image Description: A witty caption [XMP, XMP-tiff, Image] ImageLength - Image Height: 8 [XMP, XMP-tiff, Image] ImageWidth - Image Width: 8 [XMP, XMP-tiff, Camera] Make - Make: FUJIFILM [XMP, XMP-tiff, Camera] Model - Camera Model Name: FinePix2400Zoom [XMP, XMP-tiff, Image] Orientation - Orientation: Horizontal (normal) [XMP, XMP-tiff, Image] ResolutionUnit - Resolution Unit: inches [XMP, XMP-tiff, Image] Software - Software: Adobe Photoshop 7.0 [XMP, XMP-tiff, Image] XResolution - X Resolution: 72 [XMP, XMP-tiff, Image] YCbCrPositioning - Y Cb Cr Positioning: Co-sited [XMP, XMP-tiff, Image] YCbCrSubSampling - Y Cb Cr Sub Sampling: YCbCr4:2:0 (2 2) [XMP, XMP-tiff, Image] YResolution - Y Resolution: 72 [XMP, XMP-xmp, Time] CreateDate - Create Date: 2001:05:19 18:36:41 [XMP, XMP-xmp, Time] ModifyDate - Modify Date: 2004:02:26 09:36:46 [XMP, XMP-xmpBJ, Other] JobRefName - Job Ref Name: My Job [XMP, XMP-xmpMM, Other] DocumentID - Document ID: adobe:docid:photoshop:4cc7b857-69d0-11d8-8ac4-bb59c92f0d9a [XMP, XMP-xmpRights, Author] Marked - Marked: False [XMP, XMP-xmpRights, Author] WebStatement - Web Statement: http://owl.phy.queensu.ca/~phil/exiftool/ [Composite, Composite, Image] Aperture - Aperture: 3.5 [Composite, Composite, Other] Flash - Flash: Fired [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/64 [Composite, Composite, Image] ImageSize - Image Size: 8x8 [Composite, Composite, Image] LightValue - Light Value: 9.6 [Composite, Composite, Image] Megapixels - Megapixels: 0.000064 [Composite, Composite, Camera] FocalLength35efl - Focal Length: 6.0 mm �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_7.out��������������������������������������������������������������������000644 �000765 �000024 �00000011771 12421225257 016262� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 9.75'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:format>image/jpeg</dc:format> <dc:rights> <rdf:Alt> <rdf:li xml:lang='x-default'>© Copyright Someone Else</rdf:li> </rdf:Alt> </dc:rights> <dc:subject> <rdf:Bag> <rdf:li>test1</rdf:li> <rdf:li>&amp;-<![CDATA[&amp;]]>-&amp;</rdf:li> <rdf:li>char test: &amp; &gt; &lt; &#39; &quot;</rdf:li> </rdf:Bag> </dc:subject> </rdf:Description> <rdf:Description rdf:about='' xmlns:exif='http://ns.adobe.com/exif/1.0/'> <exif:ApertureValue>95/32</exif:ApertureValue> <exif:ColorSpace>1</exif:ColorSpace> <exif:ComponentsConfiguration> <rdf:Seq> <rdf:li>1</rdf:li> <rdf:li>2</rdf:li> <rdf:li>3</rdf:li> <rdf:li>0</rdf:li> </rdf:Seq> </exif:ComponentsConfiguration> <exif:CompressedBitsPerPixel>3/1</exif:CompressedBitsPerPixel> <exif:CustomRendered>0</exif:CustomRendered> <exif:DateTimeDigitized>2005-06-09T20:09:27+02:00</exif:DateTimeDigitized> <exif:DateTimeOriginal>2005-06-09T20:09:27+02:00</exif:DateTimeOriginal> <exif:DigitalZoomRatio>2272/2272</exif:DigitalZoomRatio> <exif:ExifVersion>0.2.2.0</exif:ExifVersion> <exif:ExposureBiasValue>-3/3</exif:ExposureBiasValue> <exif:ExposureMode>1</exif:ExposureMode> <exif:ExposureTime>4/10</exif:ExposureTime> <exif:FNumber>28/10</exif:FNumber> <exif:FileSource>3</exif:FileSource> <exif:Flash rdf:parseType='Resource'> <exif:Fired>False</exif:Fired> <exif:Function>False</exif:Function> <exif:Mode>2</exif:Mode> <exif:RedEyeMode>False</exif:RedEyeMode> <exif:Return>0</exif:Return> </exif:Flash> <exif:FlashpixVersion>0.1.0.0</exif:FlashpixVersion> <exif:FocalLength>5800/1000</exif:FocalLength> <exif:FocalPlaneResolutionUnit>2</exif:FocalPlaneResolutionUnit> <exif:FocalPlaneXResolution>2272000/224</exif:FocalPlaneXResolution> <exif:FocalPlaneYResolution>1704000/168</exif:FocalPlaneYResolution> <exif:MaxApertureValue>95/32</exif:MaxApertureValue> <exif:MeteringMode>5</exif:MeteringMode> <exif:NativeDigest>36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;CE459FE772DF591DDF5F63CA3F2A087B</exif:NativeDigest> <exif:PixelXDimension>1136</exif:PixelXDimension> <exif:PixelYDimension>852</exif:PixelYDimension> <exif:SceneCaptureType>0</exif:SceneCaptureType> <exif:SensingMethod>2</exif:SensingMethod> <exif:ShutterSpeedValue>42/32</exif:ShutterSpeedValue> <exif:WhiteBalance>0</exif:WhiteBalance> </rdf:Description> <rdf:Description rdf:about='' xmlns:photoshop='http://ns.adobe.com/photoshop/1.0/'> <photoshop:ColorMode>3</photoshop:ColorMode> <photoshop:History/> <photoshop:ICCProfile>sRGB IEC61966-2.1</photoshop:ICCProfile> </rdf:Description> <rdf:Description rdf:about='' xmlns:tiff='http://ns.adobe.com/tiff/1.0/'> <tiff:BitsPerSample> <rdf:Seq> <rdf:li>8</rdf:li> <rdf:li>8</rdf:li> <rdf:li>8</rdf:li> </rdf:Seq> </tiff:BitsPerSample> <tiff:ImageLength>852</tiff:ImageLength> <tiff:ImageWidth>1136</tiff:ImageWidth> <tiff:Make>Canon</tiff:Make> <tiff:Model>Canon DIGITAL IXUS 40</tiff:Model> <tiff:NativeDigest>256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;D11E7FC551E751BE9E616260834B2A1D</tiff:NativeDigest> <tiff:Orientation>1</tiff:Orientation> <tiff:ResolutionUnit>2</tiff:ResolutionUnit> <tiff:XResolution>1800000/10000</tiff:XResolution> <tiff:YCbCrPositioning>1</tiff:YCbCrPositioning> <tiff:YResolution>1800000/10000</tiff:YResolution> </rdf:Description> <rdf:Description rdf:about='' xmlns:xmp='http://ns.adobe.com/xap/1.0/'> <xmp:CreateDate>2005-11-21T17:07:14+01:00</xmp:CreateDate> <xmp:CreatorTool>Adobe Photoshop CS2 Windows</xmp:CreatorTool> <xmp:Label>Blue</xmp:Label> <xmp:MetadataDate>2005-11-21T17:11:31+01:00</xmp:MetadataDate> <xmp:ModifyDate>2005-11-21T17:07:14+01:00</xmp:ModifyDate> <xmp:Rating>3</xmp:Rating> </rdf:Description> <rdf:Description rdf:about='' xmlns:stRef='http://ns.adobe.com/xap/1.0/sType/ResourceRef#' xmlns:xmpMM='http://ns.adobe.com/xap/1.0/mm/'> <xmpMM:DerivedFrom rdf:parseType='Resource'> <stRef:documentID>adobe:docid:photoshop:f481cc67-d8f5-11d9-a31e-a1606d941d83</stRef:documentID> <stRef:instanceID>adobe:docid:photoshop:f481cc67-d8f5-11d9-a31e-a1606d941d83</stRef:instanceID> </xmpMM:DerivedFrom> <xmpMM:DocumentID>uuid:7A9636BAA85ADA11B611C7FA524F1F71</xmpMM:DocumentID> <xmpMM:InstanceID>uuid:7B9636BAA85ADA11B611C7FA524F1F71</xmpMM:InstanceID> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>�������Image-ExifTool-10.10/t/XMP_8.out��������������������������������������������������������������������000644 �000765 �000024 �00000002342 12546457300 016261� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: XMP2.xmp [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 890 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2006:09:01 09:59:28-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:24-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:55-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: XMP [File, File, Image] FileTypeExtension - File Type Extension: xmp [File, File, Image] MIMEType - MIME Type: application/rdf+xml [XMP, XMP-dc, Image] title - Title: XMP nodeID test (XMP written by f-spot) [XMP, XMP-aux, Camera] Lens - Lens: 18.0 - 55.0mm [XMP, XMP-aux, Camera] SerialNumber - Serial Number: 0123456789 [XMP, XMP-tiff, Image] ImageLength - Image Height: 2048 [XMP, XMP-tiff, Image] ImageWidth - Image Width: 3072 [XMP, XMP-dc, Image] subject - Subject: ExifTool, XMP, nodeID, test [Composite, Composite, Image] ImageSize - Image Size: 3072x2048 [Composite, Composite, Image] Megapixels - Megapixels: 6.3 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/XMP_9.out��������������������������������������������������������������������000644 �000765 �000024 �00000002650 12375366575 016301� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 9.70'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:aux='http://ns.adobe.com/exif/1.0/aux/'> <aux:Lens>18.0 - 55.0mm</aux:Lens> <aux:SerialNumber>0123456789</aux:SerialNumber> </rdf:Description> <rdf:Description rdf:about='' xmlns:cc='http://creativecommons.org/ns#'> <cc:attributionName>something else</cc:attributionName> </rdf:Description> <rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:creator> <rdf:Seq> <rdf:li>Phil</rdf:li> </rdf:Seq> </dc:creator> <dc:subject> <rdf:Bag> <rdf:li>ExifTool</rdf:li> <rdf:li>XMP</rdf:li> <rdf:li>nodeID</rdf:li> <rdf:li>test</rdf:li> </rdf:Bag> </dc:subject> <dc:title>XMP nodeID test (XMP written by f-spot)</dc:title> </rdf:Description> <rdf:Description rdf:about='' xmlns:tiff='http://ns.adobe.com/tiff/1.0/'> <tiff:ImageLength>2048</tiff:ImageLength> <tiff:ImageWidth>3072</tiff:ImageWidth> </rdf:Description> <rdf:Description rdf:about='' xmlns:xmpMM='http://ns.adobe.com/xap/1.0/mm/'> <xmpMM:Manifest> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <xmpMM:placedXResolution>1</xmpMM:placedXResolution> </rdf:li> </rdf:Bag> </xmpMM:Manifest> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>����������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ZIP.t������������������������������������������������������������������������000644 �000765 �000024 �00000003610 12052700703 015451� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Before "make install", this script should be runnable with "make test". # After "make install" it should work as "perl t/ZIP.t". BEGIN { $| = 1; print "1..7\n"; $Image::ExifTool::noConfig = 1; } END {print "not ok 1\n" unless $loaded;} # test 1: Load the module(s) use Image::ExifTool 'ImageInfo'; use Image::ExifTool::ZIP; $loaded = 1; print "ok 1\n"; use t::TestLib; my $testname = 'ZIP'; my $testnum = 1; my $failed; # tests 2-3: Extract information from test ZIP and GZIP files { my $exifTool = new Image::ExifTool; my $type; foreach $type (qw(zip gz)) { ++$testnum; my $info = $exifTool->ImageInfo("t/images/ZIP.$type"); print 'not ' and $failed = 1 unless check($exifTool, $info, $testname, $testnum); print "ok $testnum\n"; } } # tests 4-7: Extract information from other ZIP-based files (requires Archive::Zip) { my $exifTool = new Image::ExifTool; my $file; foreach $file ('OOXML.docx', 'CaptureOne.eip', 'iWork.numbers', 'OpenDoc.ods') { ++$testnum; my $skip = ''; if (eval 'require Archive::Zip') { my $info = $exifTool->ImageInfo("t/images/$file"); print 'not ' and $failed = 1 unless check($exifTool, $info, $testname, $testnum); } else { $skip = ' # skip Requires Archive::Zip'; } print "ok $testnum$skip\n"; } } # pass on any Archive::Zip warning if ($Image::ExifTool::ZIP::warnString) { warn $Image::ExifTool::ZIP::warnString; } # print module versions if anything failed if ($failed) { my $mod; warn "\n"; foreach $mod ('Archive::Zip', 'Compress::Raw::Zlib', 'IO::String') { my $v; if (eval "require $mod") { my $var = $mod . '::VERSION'; no strict 'refs'; $v = $$var; } my $w = $v ? "version is $v" : 'is not installed'; warn " ($mod $w)\n"; } } # end ������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ZIP_2.out��������������������������������������������������������������������000644 �000765 �000024 �00000002145 12546457300 016252� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: ZIP.zip [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 167 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2008:09:04 10:47:13-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:55-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: ZIP [File, File, Image] FileTypeExtension - File Type Extension: zip [File, File, Image] MIMEType - MIME Type: application/zip [ZIP, ZIP, Other] 2 - Zip Required Version: 10 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: None [ZIP, ZIP, Time] 5 - Zip Modify Date: 2008:08:28 09:54:23 [ZIP, ZIP, Other] 7 - Zip CRC: 0x6e17461a [ZIP, ZIP, Other] 9 - Zip Compressed Size: 19 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 19 [ZIP, ZIP, Other] 15 - Zip File Name: test.txt ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ZIP_3.out��������������������������������������������������������������������000644 �000765 �000024 �00000002131 12546457300 016246� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: ZIP.gz [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 71 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2009:11:05 11:15:47-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:55-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: GZIP [File, File, Image] FileTypeExtension - File Type Extension: gz [File, File, Image] MIMEType - MIME Type: application/x-gzip [ZIP, ZIP, Other] 2 - Compression: Deflated [ZIP, ZIP, Other] 3 - Flags: FileName, Comment [ZIP, ZIP, Time] 4 - Modify Date: 2009:11:05 11:09:24-05:00 [ZIP, ZIP, Other] 8 - Extra Flags: Maximum Compression [ZIP, ZIP, Other] 9 - Operating System: Unix [ZIP, ZIP, Other] 10 - Archived File Name: test.txt [ZIP, ZIP, Other] 11 - Comment: This is a test comment ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ZIP_4.out��������������������������������������������������������������������000644 �000765 �000024 �00000025375 12546457300 016266� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: OOXML.docx [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 7.3 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2009:11:04 13:25:05-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:57-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: DOCX [File, File, Image] FileTypeExtension - File Type Extension: docx [File, File, Image] MIMEType - MIME Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document [File, File, Preview] PreviewImage - Preview Image: (Binary data 251 bytes) [ZIP, ZIP, Other] 2 - Zip Required Version: 20 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: Deflated [ZIP, ZIP, Time] 5 - Zip Modify Date: 1980:01:01 00:00:00 [ZIP, ZIP, Other] 7 - Zip CRC: 0x815b4431 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 362 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 1489 [ZIP, ZIP, Other] 15 - Zip File Name: [Content_Types].xml [ZIP, ZIP, Other] 2 - Zip Required Version: 10 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: None [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:01 06:40:20 [ZIP, ZIP, Other] 7 - Zip CRC: 0x00000000 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 0 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 0 [ZIP, ZIP, Other] 15 - Zip File Name: _rels/ [ZIP, ZIP, Other] 2 - Zip Required Version: 20 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: Deflated [ZIP, ZIP, Time] 5 - Zip Modify Date: 1980:01:01 00:00:00 [ZIP, ZIP, Other] 7 - Zip CRC: 0x71b69487 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 270 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 882 [ZIP, ZIP, Other] 15 - Zip File Name: _rels/.rels [ZIP, ZIP, Other] 2 - Zip Required Version: 10 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: None [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:01 07:04:08 [ZIP, ZIP, Other] 7 - Zip CRC: 0x00000000 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 0 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 0 [ZIP, ZIP, Other] 15 - Zip File Name: docProps/ [ZIP, ZIP, Other] 2 - Zip Required Version: 20 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: Deflated [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:01 07:04:08 [ZIP, ZIP, Other] 7 - Zip CRC: 0xb1ed5172 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 522 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 1112 [ZIP, ZIP, Other] 15 - Zip File Name: docProps/app.xml [ZIP, ZIP, Other] 2 - Zip Required Version: 20 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: Deflated [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:01 06:55:23 [ZIP, ZIP, Other] 7 - Zip CRC: 0xe4eea26b [ZIP, ZIP, Other] 9 - Zip Compressed Size: 424 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 868 [ZIP, ZIP, Other] 15 - Zip File Name: docProps/core.xml [ZIP, ZIP, Other] 2 - Zip Required Version: 20 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: Deflated [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:01 06:54:27 [ZIP, ZIP, Other] 7 - Zip CRC: 0xf1594222 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 661 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 3775 [ZIP, ZIP, Other] 15 - Zip File Name: docProps/custom.xml [ZIP, ZIP, Other] 2 - Zip Required Version: 20 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: Deflated [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:01 06:45:23 [ZIP, ZIP, Other] 7 - Zip CRC: 0x20b43d22 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 125 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 251 [ZIP, ZIP, Other] 15 - Zip File Name: docProps/thumbnail.jpeg [ZIP, ZIP, Other] 2 - Zip Required Version: 10 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: None [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:01 06:50:11 [ZIP, ZIP, Other] 7 - Zip CRC: 0x00000000 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 0 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 0 [ZIP, ZIP, Other] 15 - Zip File Name: word/ [ZIP, ZIP, Other] 2 - Zip Required Version: 10 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: None [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:01 06:40:20 [ZIP, ZIP, Other] 7 - Zip CRC: 0x00000000 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 0 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 0 [ZIP, ZIP, Other] 15 - Zip File Name: word/_rels/ [ZIP, ZIP, Other] 2 - Zip Required Version: 20 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: Deflated [ZIP, ZIP, Time] 5 - Zip Modify Date: 1980:01:01 00:00:00 [ZIP, ZIP, Other] 7 - Zip CRC: 0xf13b554b [ZIP, ZIP, Other] 9 - Zip Compressed Size: 240 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 817 [ZIP, ZIP, Other] 15 - Zip File Name: word/_rels/document.xml.rels [ZIP, ZIP, Other] 2 - Zip Required Version: 20 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: Deflated [ZIP, ZIP, Time] 5 - Zip Modify Date: 1980:01:01 00:00:00 [ZIP, ZIP, Other] 7 - Zip CRC: 0x00c8b869 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 506 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 1559 [ZIP, ZIP, Other] 15 - Zip File Name: word/document.xml [ZIP, ZIP, Other] 2 - Zip Required Version: 20 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: Deflated [ZIP, ZIP, Time] 5 - Zip Modify Date: 1980:01:01 00:00:00 [ZIP, ZIP, Other] 7 - Zip CRC: 0x6caf2e0d [ZIP, ZIP, Other] 9 - Zip Compressed Size: 332 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 1291 [ZIP, ZIP, Other] 15 - Zip File Name: word/fontTable.xml [ZIP, ZIP, Other] 2 - Zip Required Version: 20 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: Deflated [ZIP, ZIP, Time] 5 - Zip Modify Date: 1980:01:01 00:00:00 [ZIP, ZIP, Other] 7 - Zip CRC: 0x87432dcd [ZIP, ZIP, Other] 9 - Zip Compressed Size: 716 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 1659 [ZIP, ZIP, Other] 15 - Zip File Name: word/settings.xml [ZIP, ZIP, Other] 2 - Zip Required Version: 20 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: Deflated [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:01 06:43:24 [ZIP, ZIP, Other] 7 - Zip CRC: 0xf1e58e0b [ZIP, ZIP, Other] 9 - Zip Compressed Size: 466 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 1214 [ZIP, ZIP, Other] 15 - Zip File Name: word/styles.xml [ZIP, ZIP, Other] 2 - Zip Required Version: 10 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: None [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:01 06:40:20 [ZIP, ZIP, Other] 7 - Zip CRC: 0x00000000 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 0 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 0 [ZIP, ZIP, Other] 15 - Zip File Name: word/theme/ [ZIP, ZIP, Other] 2 - Zip Required Version: 20 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: Deflated [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:01 06:44:27 [ZIP, ZIP, Other] 7 - Zip CRC: 0x6430416a [ZIP, ZIP, Other] 9 - Zip Compressed Size: 137 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 160 [ZIP, ZIP, Other] 15 - Zip File Name: word/theme/theme1.xml [ZIP, ZIP, Other] 2 - Zip Required Version: 20 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: Deflated [ZIP, ZIP, Time] 5 - Zip Modify Date: 1980:01:01 00:00:00 [ZIP, ZIP, Other] 7 - Zip CRC: 0x69d759c3 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 192 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 276 [ZIP, ZIP, Other] 15 - Zip File Name: word/webSettings.xml [XML, XML, Document] Template - Template: Normal [XML, XML, Document] TotalTime - Total Edit Time: 7 minutes [XML, XML, Document] Pages - Pages: 1 [XML, XML, Document] Words - Words: 7 [XML, XML, Document] Characters - Characters: 42 [XML, XML, Document] Application - Application: Microsoft Macintosh Word [XML, XML, Document] DocSecurity - Doc Security: None [XML, XML, Document] Lines - Lines: 7 [XML, XML, Document] Paragraphs - Paragraphs: 4 [XML, XML, Document] ScaleCrop - Scale Crop: No [XML, XML, Document] HeadingPairs - Heading Pairs: Title, 1 [XML, XML, Document] TitlesOfParts - Titles Of Parts: The document title [XML, XML, Document] Manager - Manager: Manager: Self [XML, XML, Document] Company - Company: Company - ExifTool [XML, XML, Document] LinksUpToDate - Links Up To Date: No [XML, XML, Document] CharactersWithSpaces - Characters With Spaces: 45 [XML, XML, Document] SharedDoc - Shared Doc: No [XML, XML, Document] HyperlinkBase - Hyperlink Base: the hyperlink base goes here! [XML, XML, Document] HyperlinksChanged - Hyperlinks Changed: No [XML, XML, Document] AppVersion - App Version: 12.0000 [XML, XML, Document] keywords - Keywords: keyword 1, keyword 2, keyword 3 [XML, XML, Author] lastModifiedBy - Last Modified By: Jeff [XML, XML, Document] revision - Revision Number: 3 [XML, XML, Time] created - Create Date: 2009:10:24 01:41:00Z [XML, XML, Time] modified - Modify Date: 2009:10:24 01:48:00Z [XML, XML, Document] category - Category: category goes here [XML, XML, Document] CheckedBy - Checked By: Checked by [XML, XML, Document] Client - Client: Client [XML, XML, Time] DateCompleted - Date Completed: 2009:10:23 07:00:00Z [XML, XML, Document] Department - Department: Department [XML, XML, Document] Destination - Destination: Destination [XML, XML, Document] Disposition - Disposition: Disposition [XML, XML, Document] Division - Division: Division [XML, XML, Document] DocumentNumber - Document Number: 35 [XML, XML, Author] Editor - Editor: Editor [XML, XML, Document] ForwardTo - Forward To: Forward to [XML, XML, Document] Group - Group: Group [XML, XML, Document] Language - Language: Language [XML, XML, Document] Mailstop - Mailstop: Mailstop [XML, XML, Document] Matter - Matter: Matter [XML, XML, Document] Office - Office: Office [XML, XML, Author] Owner - Owner: Owner [XML, XML, Document] Project - Project: Project [XML, XML, Document] Publisher - Publisher: Publisher [XML, XML, Document] Purpose - Purpose: Purpose [XML, XML, Document] ReceivedFrom - Received From: Received from [XML, XML, Document] RecordedBy - Recorded By: Recorded by [XML, XML, Time] RecordedDate - Recorded Date: 2009:10:20 07:00:00Z [XML, XML, Document] Reference - Reference: Reference [XML, XML, Document] Source - Source: Source [XML, XML, Document] Status - Status: Status [XML, XML, Document] TelephoneNumber - Telephone Number: 415-399-9921 [XML, XML, Document] Typist - Typist: Typist [XML, XML, Document] ACustomField - A Custom Field: A Custom field contents [XMP, XMP-dc, Image] title - Title: The document title [XMP, XMP-dc, Image] subject - Subject: the subject [XMP, XMP-dc, Author] creator - Creator: Author: Jeff [XMP, XMP-dc, Image] description - Description: here are my comments �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ZIP_5.out��������������������������������������������������������������������000644 �000765 �000024 �00000016505 12546457300 016262� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93 [File, System, Image] FileName - File Name: CaptureOne.eip [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 5.3 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2009:11:04 08:41:15-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:02-05:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: EIP [File, File, Image] FileTypeExtension - File Type Extension: eip [File, File, Image] MIMEType - MIME Type: application/x-captureone [File, File, Image] ExifByteOrder - Exif Byte Order: Little-endian (Intel, II) [ZIP, ZIP, Other] 2 - Zip Required Version: 10 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: None [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:04:03 10:14:18 [ZIP, ZIP, Other] 7 - Zip CRC: 0x03b54756 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 576 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 576 [ZIP, ZIP, Other] 15 - Zip File Name: 0.IIQ [ZIP, ZIP, Other] 2 - Zip Required Version: 10 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: None [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:04:03 10:14:18 [ZIP, ZIP, Other] 7 - Zip CRC: 0xff76e911 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 244 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 244 [ZIP, ZIP, Other] 15 - Zip File Name: manifest.xml [ZIP, ZIP, Other] 2 - Zip Required Version: 10 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: None [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:03 19:14:06 [ZIP, ZIP, Other] 7 - Zip CRC: 0xb7f04729 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 130 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 130 [ZIP, ZIP, Other] 15 - Zip File Name: manifest50.xml [ZIP, ZIP, Other] 2 - Zip Required Version: 10 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: None [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:04:03 10:14:22 [ZIP, ZIP, Other] 7 - Zip CRC: 0x1ad000e6 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 460 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 460 [ZIP, ZIP, Other] 15 - Zip File Name: CaptureOne/Settings45/0.IIQ.cos [ZIP, ZIP, Other] 2 - Zip Required Version: 10 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: None [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:03 19:55:16 [ZIP, ZIP, Other] 7 - Zip CRC: 0xc3481f07 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 3280 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 3280 [ZIP, ZIP, Other] 15 - Zip File Name: CaptureOne/Settings50/0.IIQ.cos [EXIF, IFD0, Image] 254 - Subfile Type: Full-resolution Image [EXIF, IFD0, Image] 256 - Image Width: 561 [EXIF, IFD0, Image] 257 - Image Height: 420 [EXIF, IFD0, Image] 258 - Bits Per Sample: 8 8 8 [EXIF, IFD0, Image] 259 - Compression: Uncompressed [EXIF, IFD0, Image] 262 - Photometric Interpretation: RGB [EXIF, IFD0, Camera] 271 - Make: Phase One A/S [EXIF, IFD0, Camera] 272 - Camera Model Name: P65+ [EXIF, IFD0, Image] 273 - Strip Offsets: 32 [EXIF, IFD0, Image] 277 - Samples Per Pixel: 3 [EXIF, IFD0, Image] 278 - Rows Per Strip: 420 [EXIF, IFD0, Image] 279 - Strip Byte Counts: 20 [EXIF, IFD0, Image] 282 - X Resolution: 300 [EXIF, IFD0, Image] 283 - Y Resolution: 300 [EXIF, IFD0, Image] 284 - Planar Configuration: Chunky [EXIF, IFD0, Image] 296 - Resolution Unit: inches [EXIF, ExifIFD, Image] 33434 - Exposure Time: 1/15 [EXIF, ExifIFD, Image] 34855 - ISO: 200 [EXIF, ExifIFD, Image] 36864 - Exif Version: 0220 [EXIF, ExifIFD, Time] 36867 - Date/Time Original: 2009:04:03 15:15:20 [EXIF, ExifIFD, Time] 36868 - Create Date: 2009:04:03 15:15:20 [EXIF, ExifIFD, Image] 37122 - Compressed Bits Per Pixel: 3 [EXIF, ExifIFD, Image] 37377 - Shutter Speed Value: 1/15 [EXIF, ExifIFD, Camera] 37384 - Light Source: Other [EXIF, ExifIFD, Image] 40962 - Exif Image Width: 4490 [EXIF, ExifIFD, Image] 40963 - Exif Image Height: 3364 [EXIF, ExifIFD, Camera] 41987 - White Balance: Unknown (5) [EXIF, ExifIFD, Image] 42016 - Image Unique ID: 00E058000066000C01010E13F5000951 [XML, XML, Image] CompatibleVersion - Compatible Version: 13 [XML, XML, Image] UUID - UUID: 133ACDE8-EF48-4978-9AED-5C6B4DDE9CBF [XML, XML, Image] Version - Version: 13 [XML, XML, Image] UUID - UUID: 43C0DD50-C6FE-4880-A275-7EA545CE1347 [XML, XML, Image] Basic_Rating - Basic Rating: 3 [XML, XML, Image] Color_tag_index - Color tag index: 4 [XML, XML, Image] USMAmount - USM Amount: 140 [XML, XML, Image] LensGeoAbr - Lens Geo Abr: 0.0,0.0000;26929.9,-2103.9001;53859.8,-16831.2012|0.0|0 [XML, XML, Image] Rotation - Rotation: 0 [XML, XML, Image] LensId - Lens Id: 1 [XML, XML, Image] Shadow - Shadow: 0.000000;0.000000;0.000000;0.000000 [XML, XML, Image] GCurve - G Curve: [XML, XML, Image] WhiteBalance - White Balance: 1.391000;1.000000;1.474000 [XML, XML, Image] Exposure - Exposure: 0 [XML, XML, Image] LensOpticCenter - Lens Optic Center: 0.000000|0.000000 [XML, XML, Image] Vignetting - Vignetting: 0.000000|0|0|1 [XML, XML, Image] USMRadius - USM Radius: 1 [XML, XML, Image] ShadowRecovery - Shadow Recovery: 0 [XML, XML, Image] GCurveB - G Curve B: [XML, XML, Image] LensTilt - Lens Tilt: 0 [XML, XML, Image] USMThreshold - USM Threshold: 1 [XML, XML, Image] FilmCurve - Film Curve: PhaseOneP65+-Film Standard.fcrv [XML, XML, Image] CNRAmount - CNR Amount: 34 [XML, XML, Image] LensShift - Lens Shift: 0 [XML, XML, Image] GCurveG - G Curve G: [XML, XML, Image] ICCProfile - ICC Profile: PhaseOneP65+-Flash.icm [XML, XML, Image] Contrast - Contrast: 0 [XML, XML, Image] BRAmount - BR Amount: 0 [XML, XML, Image] LensTiltDirection - Lens Tilt Direction: 0 [XML, XML, Image] Crop - Crop: 0.000000;0.000000;0.000000;0.000000 [XML, XML, Image] NRAmount - NR Amount: 25 [XML, XML, Image] ColorBalance - Color Balance: 1.000000;1.000000;1.000000;1.000000 [XML, XML, Image] Highlight - Highlight: 1.000000;1.000000;1.000000;1.000000 [XML, XML, Image] HighlightRecovery - Highlight Recovery: 0 [XML, XML, Image] LensShiftDirection - Lens Shift Direction: 0 [XML, XML, Image] Midtone - Midtone: 0.000000;0.000000;0.000000;0.000000 [XML, XML, Image] LensOpticCenterEnabled - Lens Optic Center Enabled: 0 [XML, XML, Image] TargetShadow - Target Shadow: 0.000000;0.000000;0.000000;0.000000 [XML, XML, Image] CleanLongExposureAmount - Clean Long Exposure Amount: 0 [XML, XML, Image] Clarity - Clarity: 0.000000 [XML, XML, Image] Brightness - Brightness: 0 [XML, XML, Image] LensRadialBlur - Lens Radial Blur: 33662.4,9.4255|33662.4,7.4057|0.0|0 [XML, XML, Image] TargetEnable - Target Enable: 1 [XML, XML, Image] Moire - Moire: 0.000000;8 [XML, XML, Image] Saturation - Saturation: 0 [XML, XML, Image] GCurveR - G Curve R: [XML, XML, Image] ColorCorrections - Color Corrections: (Binary data 887 bytes) [XML, XML, Image] PurpleFringing - Purple Fringing: 0 [XML, XML, Image] TargetHighlight - Target Highlight: 1.000000;1.000000;1.000000;1.000000 [XML, XML, Image] Rotation - Rotation: 90 [XML, XML, Image] Crop - Crop: 2087.088867;1690.806274;3868.893555;3158.520264 [XML, XML, Image] NRAmount - NR Amount: 18.59756112098694 [XML, XML, Image] Rating - Rating: 3 [Composite, Composite, Image] ImageSize - Image Size: 4490x3364 [Composite, Composite, Image] Megapixels - Megapixels: 15.1 [Composite, Composite, Image] ShutterSpeed - Shutter Speed: 1/15 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ZIP_6.out��������������������������������������������������������������������000644 �000765 �000024 �00000005312 12546457300 016255� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: iWork.numbers [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 1359 bytes [File, System, Time] FileModifyDate - File Modification Date/Time: 2009:11:11 14:40:00-05:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:57-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: NUMBERS [File, File, Image] FileTypeExtension - File Type Extension: numbers [File, File, Image] MIMEType - MIME Type: application/x-iwork-numbers-sffnumbers [File, File, Preview] PreviewImage - Preview Image: (Binary data 27 bytes) [ZIP, ZIP, Other] 2 - Zip Required Version: 10 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: None [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:11 14:38:03 [ZIP, ZIP, Other] 7 - Zip CRC: 0xfa4361e7 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 27 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 27 [ZIP, ZIP, Other] 15 - Zip File Name: QuickLook/Thumbnail.jpg [ZIP, ZIP, Other] 2 - Zip Required Version: 10 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: None [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:11 14:37:18 [ZIP, ZIP, Other] 7 - Zip CRC: 0xb6fc7f5e [ZIP, ZIP, Other] 9 - Zip Compressed Size: 25 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 25 [ZIP, ZIP, Other] 15 - Zip File Name: QuickLook/Preview.pdf [ZIP, ZIP, Other] 2 - Zip Required Version: 20 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: Deflated [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:11 14:35:20 [ZIP, ZIP, Other] 7 - Zip CRC: 0xe267fa27 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 238 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 643 [ZIP, ZIP, Other] 15 - Zip File Name: buildVersionHistory.plist [ZIP, ZIP, Other] 2 - Zip Required Version: 20 [ZIP, ZIP, Other] 3 - Zip Bit Flag: 0 [ZIP, ZIP, Other] 4 - Zip Compression: Deflated [ZIP, ZIP, Time] 5 - Zip Modify Date: 2009:11:11 11:57:13 [ZIP, ZIP, Other] 7 - Zip CRC: 0x02b8a153 [ZIP, ZIP, Other] 9 - Zip Compressed Size: 451 [ZIP, ZIP, Other] 11 - Zip Uncompressed Size: 1026 [ZIP, ZIP, Other] 15 - Zip File Name: index.xml [XML, XML, Document] projects - Projects: Project 1, Project 2 [XML, XML, Author] authors - Author: Author Name [XML, XML, Author] copyright - Copyright: (c) 2009 [XML, XML, Document] title - Title: Doc Title, yo [XML, XML, Document] keywords - Keywords: keyword1,keyword2,keyword3 [XML, XML, Document] comment - Comment: Comments are a joy to behold. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/ZIP_7.out��������������������������������������������������������������������000644 �000765 �000024 �00000004150 12546457300 016255� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.94 [File, System, Image] FileName - File Name: OpenDoc.ods [File, System, Image] Directory - Directory: t/images [File, System, Image] FileSize - File Size: 6.9 kB [File, System, Time] FileModifyDate - File Modification Date/Time: 2010:05:13 10:39:54-04:00 [File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:29 20:10:57-04:00 [File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:04:25 10:57:00-04:00 [File, System, Image] FilePermissions - File Permissions: rw-r--r-- [File, File, Image] FileType - File Type: ODS [File, File, Image] FileTypeExtension - File Type Extension: ods [File, File, Image] MIMEType - MIME Type: application/vnd.oasis.opendocument.spreadsheet [File, File, Preview] PreviewPNG - Preview PNG: (Binary data 697 bytes) [XMP, XMP-grddl, Unknown] grddl:transformation - Transformation: http://docs.oasis-open.org/office/1.2/xslt/odf2rdf.xsl [XMP, XMP-meta, Unknown] meta:initial-creator - Initial-creator: IDHW IDHW Informatica [XMP, XMP-meta, Unknown] meta:creation-date - Creation-date: 2010:04:19 11:16:49.13 [XMP, XMP-dc, Image] title - Title: test [XMP, XMP-dc, Image] subject - Subject: test [XMP, XMP-dc, Image] description - Description: test [XMP, XMP-meta, Unknown] meta:keyword - Keyword: test [XMP, XMP-dc, Time] date - Date: 2010:04:19 11:18:04.30 [XMP, XMP-dc, Author] creator - Creator: IDHW IDHW Informatica [XMP, XMP-meta, Unknown] meta:editing-duration - Editing-duration: PT00H01M17S [XMP, XMP-meta, Unknown] meta:editing-cycles - Editing-cycles: 1 [XMP, XMP-meta, Unknown] meta:document-statisticTable-count - Document-statistic Table-count: 3 [XMP, XMP-meta, Unknown] meta:document-statisticCell-count - Document-statistic Cell-count: 0 [XMP, XMP-meta, Unknown] meta:document-statisticObject-count - Document-statistic Object-count: 0 [XMP, XMP-meta, Unknown] meta:generator - Generator: OpenOffice.org/3.2$Win32 OpenOffice.org_project/320m12$Build-9483 [XMP, XMP-meta, Unknown] meta:user-definedName - User-defined Name: License [XMP, XMP-meta, Unknown] meta:user-defined - User-defined: test ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/AFCP.jpg��������������������������������������������������������������000644 �000765 �000024 �00000002126 10357015703 017310� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙAXS!������IPTC����%SCC��$��&����p7�20051223� object name �2�supp cat�keyword(�special instructionsP�bylineU� byline titleZ�citye� country nameg�otri�headlinen�credits�sourcet� copy freelyx�ExifTool AFCP testz�caption writer_�state$$�����������������H������������'��������'����'��'��������'��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������AXS!���û����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/AIFF.aif��������������������������������������������������������������000644 �000765 �000024 �00000000442 10357546603 017272� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������FORM��AIFFCOMT����¼qµ���ding.wavCOMM������-"�@ ¬D������NAME���ExifTool test AIFFAUTH��� Phil Harvey�ID3 ���¬ID3����"ULT���eng�my lyrics�TCM�� �Composer�COM���eng�comments�TP1�� �the artist�TAL�� �the album�TT1�� �grouping�TRK���1�TPA���1/1�TYE���2006�TCO���(18)�TCP���1��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/APE.ape���������������������������������������������������������������000644 �000765 �000024 �00000004166 10526364406 017204� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������MAC –��4��������������������������ãžpö|_k™Âj¶ì®@A¸ �� �¦¦�������D¬���������Track�4�������Year�2005 �������Genre�Electronic �������Artist�Kraftwerk�������Album�Cover Art Test�������Tool Version�11.1.102 �������Tool Name�Media Center�������Title�Men Machine Live�������Media Jukebox: Date�38353 �����Cover Art (front)�X:\_kuvat\Kraftwerk - Cover Art Test.jpg�ÿØÿà�JFIF���d�d��ÿì�Ducky�����2��ÿî�Adobe�dÀ���ÿÛ�„�         #"""#''''''''''     !! !!''''''''''ÿÀ��P�P"�ÿÄ�“��������������������������������!1AQaq"¡2#Br‚‘±ÁÑá¢ñR’Ss� ���������!1QaqA±Á"2B‚CS‘b’3DÿÚ� ��?�ïô¥|»¤hÒHÁff:�I4‰õJÀ!€e:ƒÄÐEf‘¥)JP§€ˆ¥aY]C) ¬5q±Y¤Er¯rwîO#ÇÁjóNÊ·¥ÔÏÅaÔt(gþ†º^Nú<f:ï#/í!’v¢5-§ÇJåþÒãdÉd2{¶ÿ�îNÒ4Q9ÿ�¶_»;ƒ(øš¥°�.|9o“z’x³Ý/Ø{H6–Ý‚Û%Ïš-ÝÃh£˜ðU'¡<ª+v¬®¡Ð†V« ƒÖ+‘{…}{ºwMžÉƾ‘Dëëž<¾«/;;iÒ"í®™k†ÚÃCj–ÒÊ1³’Ìtþ$õ ã-�bqli²uZ¤€0\+¶l©UÜÙ{ù16~EüEK·ê<Qw.^ÂELµŸÛoÄ£~“ÅN•‰¹n$(,Ä�¤ž�Zü…ºf±RCisÊ— öæŒê§¸‘øOA¬Ê¶yì[Æ’or¥y—ƒ)þ`õUchÝÜcrWvðô3µêuây{™|ÕkiUgSÚ¶A¦Íd®=Q‡eê+·Ié´2·÷m쎫,E…¿7H+õGá§ÿ�J¹ÕzZ½…õžvÔrÉÌB?Þžd'ÅA ¹ÛN—VÐÜÇôL‹"ø0æ­_‚ÞQ@ùg3dZÓðd~Ó”¬û“+òr®œ Xø<ñ£|š¼=¬"ÙV2 ѧyä~ö<¹J÷Ýî¶^Z4éXÒSá©+|’¡{St—2Ö<m%žñ2ÿ�t¢§éyº¦ý_/\«ûh£%½sù‰|F<@3Í®£^*;ªßº^KÌ–%DnR{9¤bšŸÊSöŒ7¸9¼,þC9aÆ9=TÐwÆKUÇuÅ-­õž^!¨Œª·`dnu×ókK½îaHµÝç5Ÿ[»va}·ÛñßÝBòDd[kkhtç’F üKh•If5Ÿ»pÞä`%¾µ‚H¢YÚæÚ~^t*¾ªTFŽj“¹ö®àcÇfU·vK˜dˆúsE ^eeוˆâ¤q¦×Ú˜]ƒƒ“‡I^g¹šI’yd Íʪ5åP� NRDÚÏ%žR÷íÌ‹ÌGg4lQâ CÜ«þêÇ_GÃÔô‹‘ÖUùû47jÅ-Ýýæ^Q rʽœÎÁÛOÊBÜþvëÇXÇÇÒ1 ;‹?¨ßÙ¡¯GÅý‡N®é“Üñ o›Íå—oÜ6š˜š7_p§äƽ6”¦]¿fIÔ¨t?¥ÙGʼ÷”Â-¿rºèehÑæü”צ҈ŷìà sú˜|´§òŠû˜~1ý8{xýfÒîÚ+ÛYìçÃqà íWR­ò5ɽ³½—nnLžÐÉ7#ÊçÑ'€2ůÓÿ�¤g˜x ëõÌýÏÚ×R4[» o¬yZèGõŒóG:÷Ç×ÝáS¶Aª›§’nà88Íz$/sq¸lÅžøÅ 7Œ]8,‰åßOÂëä?³®ºN.ö<Þ&ÖúKf‰n£YÚuó)ì!‡#ë騻vöë;·ínó^„׃4(*útH뢿Ô­Õq›�¤b¸Wdê®%†M"”¥bnC¼ž<^>kˆ ,+8†%é$ëÐ;ΤÕWhXÜ__O¸¯¸—,!×­›ƒ0îQåÒ®Õ'<˜ÜdÓXÛú }¸P��íÐu/N‚«mÈV¶£´ä*òi$éVÇÓn²­½.Ÿ!g‚µó8`Ò¯Qü¨‚~5sµ·K[hm£ú!E|iUM£†¸i_?’ÔÏ>¦�ý>ªSãÐ;ªáZ¾@ eMBfucœÍIk¬(_!¢Œ¢”¥B^)JR"”¥")JR"”¥"ÿÙAPETAGEXÐ��*�� ������@������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/APE.mpc���������������������������������������������������������������000644 �000765 �000024 �00000004721 10526420720 017203� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ID3����}TRK���1/5�TPA���1/2�RVA�� ....����ULT���eng�Do-wap she-bang�PIC���JPG�comment�<Dummy picture>TT2���ExifTool Test�TP1�� �Phil Harvey�TCM�� �A Composer�TAL���Phil's Greatest Hits�TT1�� �This group�TYE���2005�TCO�� �Testing�COM���eng�My Comments�MP+f����� \����������`‚» s*NX«�������Track�4�������Year�2005 �������Genre�Electronic �������Artist�Kraftwerk�������Album�Cover Art Test�������Tool Version�11.1.102 �������Tool Name�Media Center�������Title�Men Machine Live�������Media Jukebox: Date�38353 �����Cover Art (front)�X:\_kuvat\Kraftwerk - Cover Art Test.jpg�ÿØÿà�JFIF���d�d��ÿì�Ducky�����2��ÿî�Adobe�dÀ���ÿÛ�„�         #"""#''''''''''     !! !!''''''''''ÿÀ��P�P"�ÿÄ�“��������������������������������!1AQaq"¡2#Br‚‘±ÁÑá¢ñR’Ss� ���������!1QaqA±Á"2B‚CS‘b’3DÿÚ� ��?�ïô¥|»¤hÒHÁff:�I4‰õJÀ!€e:ƒÄÐEf‘¥)JP§€ˆ¥aY]C) ¬5q±Y¤Er¯rwîO#ÇÁjóNÊ·¥ÔÏÅaÔt(gþ†º^Nú<f:ï#/í!’v¢5-§ÇJåþÒãdÉd2{¶ÿ�îNÒ4Q9ÿ�¶_»;ƒ(øš¥°�.|9o“z’x³Ý/Ø{H6–Ý‚Û%Ïš-ÝÃh£˜ðU'¡<ª+v¬®¡Ð†V« ƒÖ+‘{…}{ºwMžÉƾ‘Dëëž<¾«/;;iÒ"í®™k†ÚÃCj–ÒÊ1³’Ìtþ$õ ã-�bqli²uZ¤€0\+¶l©UÜÙ{ù16~EüEK·ê<Qw.^ÂELµŸÛoÄ£~“ÅN•‰¹n$(,Ä�¤ž�Zü…ºf±RCisÊ— öæŒê§¸‘øOA¬Ê¶yì[Æ’or¥y—ƒ)þ`õUchÝÜcrWvðô3µêuây{™|ÕkiUgSÚ¶A¦Íd®=Q‡eê+·Ié´2·÷m쎫,E…¿7H+õGá§ÿ�J¹ÕzZ½…õžvÔrÉÌB?Þžd'ÅA ¹ÛN—VÐÜÇôL‹"ø0æ­_‚ÞQ@ùg3dZÓðd~Ó”¬û“+òr®œ Xø<ñ£|š¼=¬"ÙV2 ѧyä~ö<¹J÷Ýî¶^Z4éXÒSá©+|’¡{St—2Ö<m%žñ2ÿ�t¢§éyº¦ý_/\«ûh£%½sù‰|F<@3Í®£^*;ªßº^KÌ–%DnR{9¤bšŸÊSöŒ7¸9¼,þC9aÆ9=TÐwÆKUÇuÅ-­õž^!¨Œª·`dnu×ókK½îaHµÝç5Ÿ[»va}·ÛñßÝBòDd[kkhtç’F üKh•If5Ÿ»pÞä`%¾µ‚H¢YÚæÚ~^t*¾ªTFŽj“¹ö®àcÇfU·vK˜dˆúsE ^eeוˆâ¤q¦×Ú˜]ƒƒ“‡I^g¹šI’yd Íʪ5åP� NRDÚÏ%žR÷íÌ‹ÌGg4lQâ CÜ«þêÇ_GÃÔô‹‘ÖUùû47jÅ-Ýýæ^Q rʽœÎÁÛOÊBÜþvëÇXÇÇÒ1 ;‹?¨ßÙ¡¯GÅý‡N®é“Üñ o›Íå—oÜ6š˜š7_p§äƽ6”¦]¿fIÔ¨t?¥ÙGʼ÷”Â-¿rºèehÑæü”צ҈ŷìà sú˜|´§òŠû˜~1ý8{xýfÒîÚ+ÛYìçÃqà íWR­ò5ɽ³½—nnLžÐÉ7#ÊçÑ'€2ůÓÿ�¤g˜x ëõÌýÏÚ×R4[» o¬yZèGõŒóG:÷Ç×ÝáS¶Aª›§’nà88Íz$/sq¸lÅžøÅ 7Œ]8,‰åßOÂëä?³®ºN.ö<Þ&ÖúKf‰n£YÚuó)ì!‡#ë騻vöë;·ínó^„׃4(*útH뢿Ô­Õq›�¤b¸Wdê®%†M"”¥bnC¼ž<^>kˆ ,+8†%é$ëÐ;ΤÕWhXÜ__O¸¯¸—,!×­›ƒ0îQåÒ®Õ'<˜ÜdÓXÛú }¸P��íÐu/N‚«mÈV¶£´ä*òi$éVÇÓn²­½.Ÿ!g‚µó8`Ò¯Qü¨‚~5sµ·K[hm£ú!E|iUM£†¸i_?’ÔÏ>¦�ý>ªSãÐ;ªáZ¾@ eMBfucœÍIk¬(_!¢Œ¢”¥B^)JR"”¥")JR"”¥"ÿÙAPETAGEXÐ��*�� ������@��������TAGA 4s sample for testing embeddWho Knows���������������������The Test Album����������������2006a nice comment��������������������������������������������������������������Image-ExifTool-10.10/t/images/ASF.wmv���������������������������������������������������������������000644 �000765 �000024 �00000030133 10354231651 017237� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������0&²uŽfϦÙ�ª�bÎl[0���������@¤ÐÒãÒ—ð� É^¨PŒ������ ��W�M�/�T�o�o�l�N�a�m�e�����4�P�h�o�t�o� �S�t�o�r�y� �3� �f�o�r� �W�i�n�d�o�w�s����W�M�/�P�u�b�l�i�s�h�e�r�����4�P�h�o�t�o� �S�t�o�r�y� �3� �f�o�r� �W�i�n�d�o�w�s����W�M�/�T�o�o�l�V�e�r�s�i�o�n������3�.�0�.�1�1�1�5�.�0����W�M�/�G�e�n�r�e������P�h�o�t�o� �S�t�o�r�y����W�M�/�P�i�c�t�u�r�e����Ø»��i�m�a�g�e�/�j�p�e�g�����ÿØÿà�JFIF��x�x��ÿÛ�C�     ÿÛ�C   ÿÀ��x� "�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�øþùm-U¦DpÀv*˜°›æÚ¿ð]oÇ=6ËÁZ&ˆº<SÅ%ìHïqç–U!FTœ×•xRk½k\†ÖK‰™ÇZáIÊéèmJ²ž©Tš}¬K»r¢ ÇÕ­âŽë†ÑÐ ëbðeΫâ'AŽq×÷qڬϩv ö­ÚwàMÿ�ìõñxfMr=_}¤wbtM¸ ‘´Â¼å‹£Lp²Ÿ¿$Ú]Òµÿ�3ד¢ë(û«Mÿ�®èó#ÿ�q*ŽUDRJ¨JÎuœ}ëƒøV÷†, ÷ŠeŒÜ¢˜ ?jõ”oÔânÛ£I£‰ðcÊz]‡¤Óï`T‰–9Bãv?¥t:?€­õëÆ:}£ÝÜ "óÓ×ò¯Wð¿ìû©BÂæu6r>6­º`/ç×ëD£OijoJç­3ÈeÑ^Û<q½¹¼ÃÈŠÉÖe°h$òn[øÄeH>㯤fýžÞU Mr™$³y™R{ü½+ŸÔ?fm=ebËpÁ†s»?JÁÓ¡{ØïTñ‰Zÿ�‘ázO‹l|«Óng'ÒÜ(#Þ¬êRÛ]š! �zªŠé<cû?O¥DòØîm ±®qº‡µ2S*%“rƒïéYýR—<…LMjTýDmß[D­î£ÿ�V¿À+T•-íXߺ Šêoì®­-•¯­ž l•yÇ ÷®_Z´7B"¼üØ'Ú»šqI+Õ¶‡Íˆ4¨›Šó…®KFi¥ |¡O­u÷ZŶœJ7ƒ“\ÚßB2whWEÓŒeñ1°Xˆ³(Ý‚EAo”IÀ'ßµZ}A$\8nqÆ9¢ï©£QÑD«xs'<v¸ÌÑÿ�¼*K˜ŒL9ïL¶¸‹ýáV¾ñ_þÐÑø?Ätù4}NÆãV°h¤h¡”   Ö¾føjÒ¯4ß&%–Bø í€õß~Ï—><Ö—C°ÔÄ7[»£4YleöœøÅx4s\躋ØÃu•Èê¬ gERäɅ䋲•Ñ÷OÃo€R|W×%–ÖO#QÓWí4sHYî=zWΟ´.¥©|I¾þÒÔßUº…<ŒŒ•æöÞ4×Òg™u{¸Œ€«˜ædÜPv‘‘R;4Éæ\·$“’kçèåÕice‰«S™ZÉ[núŸoW3§W°´i(-³zµ}_©Ki-Ó>Õèÿ� <%?Œä‚ÒÙL!¤Ý,‘’Þ¸3hþX“iÚxÍ}{û#xNÞÃÂQj·* ·’ö±^ónñ¨ÓUê$ö=ƒá?Âû X¡Ê(ê2:õ];ÃÑÝ1o,*gŠ«gu VjÊ2N��õv=NêáÄp¨QÓŠär>¢0å¢Eðý’&ÒŠãïXz×…áhÉXWŸNÕÑYh·3 iä)ß8ÿ�½u¥ß1ËuàŒŸÒ­+™JVv<ľV…Àˆ?^1œWÍ>4ðLÚŠ ÑÇ‹ ’RuPp3Üc‘_xÞh¢x]¶Ã‚®�?x‡Æ�RÑžÞ,ȹ<jé¾I\óñtý¬6ÔøGÆWbö{¸ºx¡˜˜I¸'¨Ï ~5®j·2éñ”ÄÃå•@ÁÍvž=·–×V™ä…âm 9 펽k†ÔÞIfò¥UF#æ]¸ôÍw=u>e«hslKžIîh¥e*H<Ö’‚¦‚ííØc ¿Ý5š¾âNÛï%Û¦W‘øÓlµÄd á†O¥@:`֮ЙIÎ?»I«&hä™ö&ñƒGø(–Þ ³·[ÝrXso`ã-79þèÏã_+kV§YÔo5"¹¹•æa†bI�zsSypë,ÎÒÈT|ÌrzT„+¹U‘… Q ´Õœ›£Bæ&\zVÜj\`âªë0ª«OŸN²‘¤³FcÉÍ9kfz1•ô6– lv–Pwgö¯±>[É'…ô;(~Xã„ükâH™׌óÞ¾ÈøQâ‹2Ê+m/M›U¼H’1 H¬Hè*gï+x7ì¦ÛgÔº‡äžùÝÛ¥v›e¤©{ÉÖ ¤ýî¬}>µâúÅ_è%$Õô ì­Ôå·ò¯®3šô[¿hÚ•„Aqm}¬Ý°Ú¬ÁˆÏ;™AÈ 2Iö÷®U3è]tãî“j®'¹šËIÑáŽ4%^ÿ�Q—Ê…yþ÷sôª‘j:-õÄ"ãÇP-ûœíH=†z×âý6X’Úc"$r>Ǽ™ ²}tð+“ñÃÝjûÄñE§ërjÞuIgUÑ6üêT !·pvÓ´¿‘ÁRN 7}{_ó=ý-[OÜV·¾¶#þ[°G_¡&¹?.› ,¨ÙD~ð/rƒ?­s_>�øfuŸÄ ž±)ÁYµ3»¯bI$õOátèm/º=‰ )eHºVrHq”¹¬|ñç@Ó¯üNÓØ=½Á“‚ce`Äö8>¢¾yñųAxL^% äç=3_gþÔþÒF[«m:ÞÞh\üÖðˆñq’¸ï\çìßð#Þ>Ñ›\×í“YH­î²V0§žÿ�1úô­c4 ySÂʦ!ÓG÷)²f¡äsëQWÒ?µÿ�ìßÂí3Äš�cá}aš5ˆ’ßdœ ìÉê¤dŒÿ�tŽÕóu\Z’º<úÔeB£§=ÐRRÔ–ñ‰&U= Q‚Wv#�“ÀÏÒ·|=š£"JÌ¡CMY…#šÓb¢«ASø:ÌIâ\ �XñQÌù{—*R¸Ý6çÎŒ#Gæ*úü˚¹E´*ñLªÀTžGj¾vÍŒöÝ€(±›\Î賫æUxרçµö¹£Qde_îÖ…¼åe’I¥Àa´>y¬É˜y̓¹A8>µIw´µ™gL´¸Õ/£·ŠQ6KHí…E%˜ú�3_[ü#ñ´ÚV†›ªIhóÞ¥±‹y?òÑŽ �uëÀ¯•|'©[iú”‚éÅs[—sòÇ»£`@϶kܾ Z4Ún³a«B#)4W0HXmuîÇqØÒ’\·7ÃÉ©ÚûžÓ®ê¾/±Ñu¦ÔÝõmÚVŠXãu/8èeå¶ îaÜ q^á¬ÞÒí¼?,N¯ G-½Å²"¸8ÁÇpO^øÍpZÊê¾¶±·…âÒVHšîP»KÄITóŽO ÀÎx÷k—ð]¯‡4ä‰åE²—vr~]¡{c×¥a9sYÄúL=8ÅKžW½¿¯ë©£ýŸ·¦ÚI-ž¨÷QF»óbãsàdð6ò}ñVílïnvCªØ›}%ãfŒIÈè$#…_U“ÜパáŸØhsG¾¥w“·–lî®RFuþöÐÇn=ëÐt륾_çŒÖ £ƒ±Øè©«Iè3ûV;ÖÛ bÙsü] ƒV›m±~ñŽ¢¶¯¼.ne…2žÇŸ­s—–†ÚG?7Psž+Wõcå§î ñïN‡…/£}ÁBqÀ'W7û^éé¥jº~ ZŠíˆIõ€2;à…<Ozíþ)æõ‚˜KÁÀçšã> ÚÁáßMlÖIu ð˜Ä!±ó/#¾9ü)¥îØò¥+bŒø(Ž©a§|3Òô+;4ë+sû "}ã鹿Züô5ôíâÉuÿ�iúZ,‚ÏJ‰‘YÎw¹o˜ý� ? ùÆ·‚²<|uOi]¿•-´¾D¡ðŽÆ¢§Ã Ï"ÇË‚®×ÐàNÎå¸/æŠVbRzÒº\‰üFNÜ(⸶VŠ7 ­ïÜ}Ä–»øe?1Å8FÒLÓÚÆn¥­Ïï�O5Uâ*O¥Mq)˜«7.3J‹ç`Œž´ºµEjLSÊ•cÞN(µì¿³ˆIñ¥Õ´§÷sÛî FrÊxÇç^8ÈV»¯òˆþ'èjzI)Cžùü*^ÆÔ_-H·Üý%ðòXh¾ ÕuíeÁ¹}­ÓºãŠò½*_xæÒþãL‰­¿´Ë4*°Ç³ÔtÛÓ¨ëŠì|gg6¹¤hzNñAu&錌ÆG¡§ØÜ­…Ýô7·fßO·o&­ÀÕp3׌×S½ÙõRtêÔ䓲C´ï„ãÃ1¤Òë–í2€Þ\Dƒ¼ð['ŸÓµné¾)Ôü1r“yò]ªå&@|qówàŸÆº?]Zk,–ú2%¶¾÷aôà W¡êÚŸ6ša¹òÞ=¹9@�Çp;zu$–ˆ©ªvýÓfÿ�üo­¦y³ £ Ê8#¡è}3úWã¯Æ."[gîg�`-7Dºi|=-Ü–óÛE½ë&e¯¿ÿ�Z°´¿Çâß[[ÊâK+4ûTñ!Àqœ"lä\V‰É$™Æ§vpÚ¬rk7ʨÅ[ž¸_ÔgæZö ¶~/Ò-bÌE®$ä#"¾‹ñž‡¤øƒÇ^¤Å¬—]u  »Ø“…Þ°¾2øsÃÓÅ£[ÛØ[Ûj}äO›d�7*Hê1ÎOõ¦•›W"p¿½}ÿ�iû/#[¶!2´lp+çý¬Ç�}Zûö­ðè¹U‹-é3Ó÷üëæm.Þ+-jÎöN#”c¨Ç&´…ý›’èxø˜ÚµŸS™’ "�¼lºfˆ¥h\:1VÅzgÄ»EÔ4]æÌ¬Êï"†O 8¯2xš&*Ë‚ äçcž¤9rˆ_,X’I9æ¥޳E*¯ ¤ r*¾Ômö­.ebW=M Æ3Ú¢vhÏ\ÒÄ~lPÍÇ$·4ªràûÓOSB˜R$ßêÔûšÑð޼þñ&© É¶˜9£½gÈ?tžùªôvw?Iüã»éZ]àhŒ{ «œœ{vÿ� M/\´×§»X-ÔÝK)MÊxþØæ¾&øañrçÂ�YÜJæÔü¨Üajõï|KM_#ÛÉ u.~Cž ÿ�:çtîztñ6’lûSBXôUIT8Æ–=:ýj¶¡=߉uˆt¡pånçKhÖ)88Þp=Nkȵ?‹Vú‚I%Œ!x¢|ÃÏŠö¿Ù†vñÔÞ'½¶’Ú(Ý­mQà 2žþŸ;(+´uN·µj)èzÅ‹ãá_É E¥²â(s¡p=ð*çÂÇáÏÉ«Ý+G©jg›Ì<ƘùcüçÜšÉø«`¿<wá ¬Â;HæþÓ½XþóG©ö,C]v»â~#Ñl†%‘…ºü98Ïà2j\ºI‰¶õìeøÂöòͬøžç=Ë¢ÿ�KÀQõ9'ðô¯<ñ]Ü–GPÕL¢òA§ÂTg`Ül{±Çá^“âÏ.‡>Óc”,ª÷cÀÏó5Æx–ÎÖmgJÒ-XKo§Df•‡!Üp ú±'ð¬ÓWN;¢”šv}O?j»„Òt)"ÿ�–÷N°)Ïn¬!ú×ÉKo¸3)Î;W½þØ+MKâ+iPcÒ“ËžsüÍù £ó¯´@¶à§“Šõ0ð´5êxXêœÕºhf\^\ Xí ¬Ö¨æD„ôV#ŠÄºÓN[k|DZ­Ù¢PîÊ~•E¢;mÈoCZò-‘ȦÞç<À¡ ‚ëMÝŠÖ¿±2ê0ýÇ­fmÇÖ¹$¹]™ºwZsR(ÇãV¿²X€Cöô és/LƵ•‹¡I¢Žk×ÿ�f?ًŵw/|'áý#OÔ¬ôù59$Ö¦–(Li$q qÈwfUà€0>¾PÚ}Âç÷LG·5öüû⦅ðSã7üOâ=GOÓ!¶ðeñ¶‹S¾ŽÌ^\,Öò%¼nüa��O�⪜ß´Ñ%'÷Eµø‘'-7m/½¤yÇ€?bŸˆ¾üJñu»éZN›ðõîaÕ¢Ôæ•&’Xžh¡ †e ƒ¸¨Ë/=qóè¤l(,}~ÔüSý£~ Ø|&ø§áxÓÂÍ‹ü'­ø¢á¿µ óŸSº©j�õÄ ˆåþUพø¥à9>Yør_ø.÷Àðª[Oݨx– [ɵ92ßf:BÊFÈ3óµ¹”’ƒÌc»<š0s}"´þòSæÿ�É¡e껫êœfÒ]dõò¼9òY]ú>Îß‘v˜›s*o'¨=«RÙîôµÍ»™íÉÏÙä<¡¯Óÿ� ~Ñ> Ò~!~ÌÚ>µã½5ü#§øÚ;‹s~³iú~¶±‚KÄV*’FTa¤Œœü¼‘ó'ÅÍ'â§Åk¯xgÅ_¼)ñU¹½¼6ÚF¡o«_i±I’[‹¨c8‰¸dˆÎØFÄÛ…ë«ËM¸ÛDÚ¿¤šó×KÛ³Næ4ù§ªÞËOU»¥ûÝzîø/öPñ”Þ ßö&ÓüI¡Ûx‡ív²;ý–ÚnV9"7ƒò®áï_siÞÓ¼á-='‰­m¡cƒz˜ÏubÊ2Þ¤dZî´ ÛhÞð.acy&‰áË--Ì·Ð$¢ŒKƒžý+¼·ñ……Í¥ßö¼/†¼¥c2²ä~÷:×dœæ¯¢nÞšÛðHõhIÂvÖÊþº ?Ãkò|]<ͧømÚ8. %RêÝr7þ Ô íõ-/E¸×|O©Új—¾d‰i-¬1ôß´’K‘œã+Ýô¿ û j ¯ÁaeJuH®¯3!'««_#§^µWÃ9Ó'¶ðy²ÕmtýíZŠÜÛ´«A‘a6¯BÀä{V|©lÿ�®þ†²­+;¯ëWoÃñ<Ÿáï‚5OˆúŽ£¨ÙKoÃC'Øã2« …i8R{€8éšÂÑ<¨i?<iãKäŽ(ô;Yî.£¸$HVf1®Ë|¤žœ°®çà÷Ä{ ˆ~ déšf—7–^UŽ"D‰±é– paX?hÿ�†|?ø“àýÆ~œjÞÕõI]µhZC}(TŠÑÿ�õ‡2/Âð;µà§ö[ù«¿É?ÀN¬©Ô´¶æJÿ�rüÚ?5¾&þÍ>:“㯅<7s}¤ëš§– [LÕ4¹å’Æxîœí}í°UÁ-òœ(Ï5oXýõ¿xÅzî±ñÁšF…á¿·†/5 Q™$½XÒFXÖ7r£y]ÅGÌÛý#û3ü~øaû5è¾2ñn©§§Ä¿„Öº—‡l.ïcKA.÷c'sª)òƒ´&kÊ|ñ[ÃzGì'âKr/x·Äwž>ÇÃÚåüé<ˆÖ±ƒsåÛÜC1ƒ Û¶äœäôõåx9Â?fß5)ÅGæ£{ù¾Èð#i¥9u¿ß·'èåky\ùÿ�ãwÀOü ñ¦ë“éú…¶©§Cªiº¦•3Éi{m(ÊÉtGàäʧ#¦'Íš‡ú޵éß>:xƒã¯Š,µMjßO±M>Â.ÃNÒ`0ÚÙZÄÈ£™±’Ç,ÌrÝp�r°œr1žæšO_W÷_KùÛ2[Z[²ûì¯ò¾ÅV�üÙ5JkHn’£=ÈëZ/Sõ¦¸À;W¯zV¸'b¼+¿AV~ÔQ^ª$Dã§Zx€0Á_Ί*¬ˆ»F]ì1K8cR–l~•-º`“ÒŠ+ÌŸÄͺ!å‰oºwÕ÷ü÷áÙt+ÿ�ß[3]^.Ѷó�ýáþñçèWfì‘ׇI¶Ï«ÒZÞ<ÌrIÉ$z¡ý8©u É/ ¹•pÅqÁ÷üh¢¼‰;žüU‘Rx.5•Uœ´v)Ë"ŒnÅaêZ׈õXôÍ2Ø%¸ùò Æ tÛÚŠ+4µE½›<›ãobø;ð’V°¸:Þ»s*A#Œ19*dÇ¢€HúZüõÔ$k¹Y¤fl–nKrI¢Š÷ðÐJî|Ö2rsIô#—ï,c!W–úSZRÛÕ»ã¥WS8G²Ød®æ?2ižc’©ì;QEB+4d7<ç¶*?-Ë´äQEM‡}ÿÙ�W�M�F�S�D�K�V�e�r�s�i�o�n������1�0�.�0�0�.�0�0�.�3�6�3�4����W�M�F�S�D�K�N�e�e�d�e�d������0�.�0�.�0�.�0�0�0�0��� �I�s�V�B�R��������(�A�S�F�L�e�a�k�y�B�u�c�k�e�t�P�a�i�r�s����r���À]��â‘��0u��8,��ȯ��¿��â��¨���Â�Á���€©�\���0W�?��� ¡�+���# ����@B����À\���� � ���@KL����€–˜�����V�B�R� �P�e�a�k�����˜���B�u�f�f�e�r� �A�v�e�r�a�g�e�����8 �¡Ü«ŒG©ÏŽä�À Seh�������İi_÷!K˜BFÌ¥BØÓ«T�����à{=Ú½Ä������ÀW;����ÐþÝ9����ˆ���������x��x��’w��µ¿_.©ÏŽã�À Se ������ÒÓ«º©ÏŽæ�À Se�ò��©FC|àïüK²)9>ÞA\…4�������� e�n�-�g�b��� e�n�-�u�s���”#D˜”ÑI¡ANEpT²������������.�����W�M�/�M�e�d�i�a�C�l�a�s�s�P�r�i�m�a�r�y�I�D���½0˜Û³:«OŠ7™_÷K����2�����W�M�/�M�e�d�i�a�C�l�a�s�s�S�e�c�o�n�d�a�r�y�I�D���q Œ^G¯sLAÀÈøÎ]‹ñ&„EìGŸ_eRÉ�������êËøÅ¯[wH„gªŒDúLÊZ���������� �����I�s�V�B�R��������4������D�e�v�i�c�e�C�o�n�f�o�r�m�a�n�c�e�T�e�m�p�l�a�t�e���L�2������ �����I�s�V�B�R�������4������D�e�v�i�c�e�C�o�n�f�o�r�m�a�n�c�e�T�e�m�p�l�a�t�e���@������.�����W�M�/�W�M�A�D�R�C�P�e�a�k�R�e�f�e�r�e�n�c�e���[�����4�����W�M�/�W�M�A�D�R�C�A�v�e�r�a�g�e�R�e�f�e�r�e�n�c�e���N��tÔßÊ E¤ºš«Ë–ªè¬ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ë¥ærÆ2Cƒ™©iR[ZX�����������������������(N��¸ ������(N��¸ ������¡�������ÐÙ4���������Ë¥ærÆ2Cƒ™©iR[Zn�����������������������9��8 �����˜��ˆ������‡�������+, ��������P”½Æ†Iƒ£Çy!·3­����� ÞªÙ|œO¼(…Uݘâ¢&���������������������@Rц1У¤� ÉHöú�������ARц1У¤� ÉHö�����W�i�n�d�o�w�s� �M�e�d�i�a� �A�u�d�i�o� �9�.�1���$� �2�0� �k�b�p�s�,� �2�2� �k�H�z�,� �s�t�e�r�e�o� �1�-�p�a�s�s� �C�B�R����a��W�i�n�d�o�w�s� �M�e�d�i�a� �V�i�d�e�o� �9� �I�m�a�g�e� �v�2�������WVP2‘Ü··©ÏŽæ�À Ser�������@žiøM[Ϩý�€_\D+PÍÿaÏ‹²�ª�´â ���������������`þÅ�a�"V��Å ��¡� ��D���…��¡¡��‘Ü··©ÏŽæ�À Se—�������Àï¼M[Ϩý�€_\D+�Wû U[Ϩý�€_\D+��������I������������ ���x���>�>��� ���x�����WVP2��������������������'��Âþp_€€��Á|€Îuø{FÑ‚�`—É¢²&���������BP���P'���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Audible.aa������������������������������������������������������������000644 �000765 �000024 �00000002452 12511724763 017756� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������*Wu6��� ��������������*������ ���������¸��X��������������������������������������������������������������������� ����������� ����������� ��������Wu6����������������������� ���product_idBK_ADBL_123456a_mp332���� ���parent_idBK_ADBL_123456�������4titleTest: This is the title of the big book (Unabridged)�������authorPhilip J Harvey�������providerExifTool Test Lib�������narratorNobody that I know�������price98.95������� pubdate08-APR-2015���� ���descriptionThis is the book description�������!long_descriptionThis is the long book description���� ���7copyright&#169;2015, Philip J Harvey; (P)2015 ExifTool Publisher���� ���short_titleShort Titley (Unabridged)������� is_aggregationcollection�������title_idBK_ADBL_123456a�������codecmp332���� ��� HeaderSeed1234567890�������EncryptedBlocks23421���� ���*HeaderKey1234569717 192057361 0712658018 4878930500���� ���license_list12345678�������CPUType1���� ���license_count1���� ���(7eb298ac132864863450EA7B67906FE619AC697E60D13630E760�������parent_short_titleTest2 (Unabridged)���� ���,parent_titleThis is the title of the parent (Unabridged)�������aggregation_idBK_ADBL_123456������� pub_date_start08-APR-2015�������short_descriptionThis is the short description���� ���user_aliasLKJ4HDY872HSVJ�����<dummy image data>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/BigTIFF.btf�����������������������������������������������������������000644 �000765 �000024 �00000000600 11347742271 017746� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������II+����������������������������ÿ��ÿ������������ÿ��ÿ�������������ÿ���������ÿ��ÿ����������À���€��€���������€��€������������€��€���������À���€��€��������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/BMP.bmp���������������������������������������������������������������000644 �000765 �000024 �00000002166 10336164711 017220� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������BMv������6��(���������������@��� �� ��������ÿÿÿ�Ìÿÿ�™ÿÿ�fÿÿ�3ÿÿ��ÿÿ�ÿÌÿ�ÌÌÿ�™Ìÿ�fÌÿ�3Ìÿ��Ìÿ�ÿ™ÿ�Ì™ÿ�™™ÿ�f™ÿ�3™ÿ��™ÿ�ÿfÿ�Ìfÿ�™fÿ�ffÿ�3fÿ��fÿ�ÿ3ÿ�Ì3ÿ�™3ÿ�f3ÿ�33ÿ��3ÿ�ÿ�ÿ�Ì�ÿ�™�ÿ�f�ÿ�3�ÿ���ÿ�ÿÿÌ�ÌÿÌ�™ÿÌ�fÿÌ�3ÿÌ��ÿÌ�ÿÌÌ�ÌÌÌ�™ÌÌ�fÌÌ�3ÌÌ��ÌÌ�ÿ™Ì�Ì™Ì�™™Ì�f™Ì�3™Ì��™Ì�ÿfÌ�ÌfÌ�™fÌ�ffÌ�3fÌ��fÌ�ÿ3Ì�Ì3Ì�™3Ì�f3Ì�33Ì��3Ì�ÿ�Ì�Ì�Ì�™�Ì�f�Ì�3�Ì���Ì�ÿÿ™�Ìÿ™�™ÿ™�fÿ™�3ÿ™��ÿ™�ÿÌ™�ÌÌ™�™Ì™�fÌ™�3Ì™��Ì™�ÿ™™�Ì™™�™™™�f™™�3™™��™™�ÿf™�Ìf™�™f™�ff™�3f™��f™�ÿ3™�Ì3™�™3™�f3™�33™��3™�ÿ�™�Ì�™�™�™�f�™�3�™���™�ÿÿf�Ìÿf�™ÿf�fÿf�3ÿf��ÿf�ÿÌf�ÌÌf�™Ìf�fÌf�3Ìf��Ìf�ÿ™f�Ì™f�™™f�f™f�3™f��™f�ÿff�Ìff�™ff�fff�3ff��ff�ÿ3f�Ì3f�™3f�f3f�33f��3f�ÿ�f�Ì�f�™�f�f�f�3�f���f�ÿÿ3�Ìÿ3�™ÿ3�fÿ3�3ÿ3��ÿ3�ÿÌ3�ÌÌ3�™Ì3�fÌ3�3Ì3��Ì3�ÿ™3�Ì™3�™™3�f™3�3™3��™3�ÿf3�Ìf3�™f3�ff3�3f3��f3�ÿ33�Ì33�™33�f33�333��33�ÿ�3�Ì�3�™�3�f�3�3�3���3�ÿÿ��Ìÿ��™ÿ��fÿ��3ÿ���ÿ��ÿÌ��ÌÌ��™Ì��fÌ��3Ì���Ì��ÿ™��Ì™��™™��f™��3™���™��ÿf��Ìf��™f��ff��3f���f��ÿ3��Ì3��™3��f3��33���3��ÿ���Ì���™���f���3�����î���Ý���»���ª���ˆ���w���U���D���"�����î���Ý���»���ª���ˆ���w���U���D���"�����î���Ý���»���ª���ˆ���w���U���D���"������îîî�ÝÝÝ�»»»�ªªª�ˆˆˆ�www�UUU�DDD�"""��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Canon.jpg�������������������������������������������������������������000644 �000765 �000024 �00000005211 10510532647 017635� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá ŒExif��II*���� �����z�������€��������������˜������� ���(�������2����¨����������i‡����¼�������Canon�Canon EOS DIGITAL REBEL�´������´������2003:12:04 06:46:52��š‚����6��‚����>��'ˆ����d��������0221����F������Z��‘�����‘����n��’ ����v��’����~��’ ����†��’����Ž��’������� ’�������� ’����–��|’�˜��ž��†’���6��� ����0100 ������� ���� ��� ����x��� ����N ��¢����> ��¢����F ��¢�������¢��������£�������¤��������¤�������¤��������¤������������������������2003:12:04 06:46:52�2003:12:04 06:46:52� ���������€���^������������W����"���������.���Ü�������8�������@����!���H��“�� ���Š���� ���œ���� ���¼�� �����æ2a!�������������¥� �� ���Ü�������p�€�����6_D� �����ü��������ü��À�� ��� ��Á�� ���:��ª�����T��¨�� ���^��©��)���r��®�����P��´�������������Ä�������ô��µ�����ü����� ���������\������������������ÿÿ����������ÿÿÿ7���€�0��������ÿÿÿÿÿÿ��� � ��ÿÿÿÿ����ÿÿÿÿÿ��"�’bd�������B��� �8ÿô��€����������������������ÿÿ"ô� ÿ&�(���ü���ÿÿ�������������������ÿÿÿÿÿÿCRW:EOS DIGITAL REBEL CMOS RAW��Firmware Version 1.1.1����������Phil Harvey������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ktt±�ð�¬­º�þÿº�+wwª�Ê�Š‹ð�™�ÅÆw �æþ(�FFXcŽ 9;FPR�·@?Þº@?Ýó@?GV@?‡Ì‘„âJIe@?º@?ݺ@?Ü|�{�|�{���� �� �—�—�ö`������ ý ü����þ��ú������ÿÿ��Ÿ��p� ����P�������������������������à.�|���@�S�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������à.�|���@�S��������THM������0100����� �������������ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Canon1DmkIII.jpg������������������������������������������������������000644 �000765 �000024 �00000020221 10744174615 020711� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá”Exif��II*���� �����†�������Œ��������������¢�������ª���(�������2����²����������i‡����Æ���%ˆ���������Canon�Canon EOS-1D Mark III�H������H������2007:02:22 17:02:42��š‚����@��‚����H��"ˆ�������'ˆ����€ �������0221����P������d��‘�����’ ����x��’����€��’ ����ˆ��’������� ’���� ��� ’������|’�2��˜��†’���Ê��’����81��‘’����81��’’����81��� ����0100 ������� ����0�� ���� �� ����â��¢����Ò��¢����Ú��¢�������¤��������¤��������¤��������¤���������������}���8��� ���2007:02:22 17:02:42�2007:02:22 17:02:42��������������������#������$���/���N�������¬�������´����"���¼����������������� �� ���.�� �����D¢� �����N�������i�€�����N ���������� ��������&��Æ���V ��(�����â ��ƒ�����þ ��“�����ò��•��F�����–�����d��—�����t��˜�����t��™��Ò���|��š�����Ä�� �����Ø��ª�����ô��´��������Ð���������à��������@�¢��"��@����f�� @����l��@� ���r��@�ü���’��@� ���Ž��@����®��@�������������^����������������������ÿÿ�����ÿÿ��#���`� ‘�������ÿÿÿÿÿÿ��������ÿÿÿÿ����ÿÿÿÿÿ����#�•JÄ�¦�����D���@Ôÿ �à����������š�ÿÿ������������� �à�N�����ø�ÿÿÿÿÿÿÿÿ������Canon EOS-1D Mark III�Firmware Version 5.3.1����������������������������������ªªp0p0p�NM�������‘�š’lkj�#������»»������•½„Í�����¦@@���Û�q�ÌÌ��������������m�������P������������������������������„����������������������pH ü ð   p ��p0��f ����������f���������������������� c����������������� ���šb�������� P�ö��#‘g’ ��������������������������5.3.1� �˜ÑÿàK8���������������������������������l���d���d���ç�����������m���e���d��� �����������������������������������������������û��ž��������������������������������������������û��ž��������������������������������������������û��ž��������������������������������������������û��ž��������������������������������������������û��ž���������������������������������ï¾­Þï¾­Þ���������������ï¾­Þï¾­Þ���������������ï¾­Þï¾­Þ����������������ï¾­Þï¾­Þ����������������ï¾­Þï¾­Þ�������ï¾­Þï¾­Þ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������²ÌÝE¢f��������������� 'TŽ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ÿ��p�Œ�-�-�0 0 p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�p�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�¨�ý`þ/ÿ��Ñ� qkü-ýøýÉþ˜ÿh�7Ó•ïûÀüý`þ2ÿ��Î� q@kü-ýøýÉþ˜ÿh�7Ó•ý`þ/ÿ��Ñ� qÖýÖýÖýÖýÖýÖýÖýëþëþëþëþëþëþëþëþëþëþ����������������������*******� ����� ����6Û¬f› ÿÿ����������������ÿÿÿÿ������.–³ÍØ-° SmÙõßOüâ U���µFu²¦l,.ÇØ½JØé@X†ŸhÈ�����Ôj¶���@¦B�������½µP‹V���������©äÁ$���ŠR?õŸ0ûñ Ä«º†Ô‹g����m��>9B�������W;#ä���1‰{Ê`˜Ý¢3©jy¿š¬9ô\Ú�������6���:���ˆ��Æ��0��ö��d��b����þl�����>¦B����������Ð.58���šeÔz¹¦.!ç;epÔ¶éΡµ���6������������º”Ì���ÄoöV(èÿ´7ÔCñ›g Ÿ���Z����������´‘¿���;Ž´‰›ë %6àxPît}—ʼ���Â�����������2a3E���€”d +Mú¬¡õgrÓÄ>���ò&�� F����������������������������������������������������������������������������������,���ê����������������������ÿÿÿÿl�������Û�q�EF16-35mm f/2.8L II USM�����������������������������������������������G002669���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������H��������ø���������������������������������p���H����������������������������������������������� ���������ü��� ���������ð��� ��������� ��������� ������ ���������p��������������������������p���0�����������������������t��� ��������������������������������������������������������������������������� ������������ð���������������������������������������������������������������������������������������������� ��������� ��������� ��������� ��������� ������������������������������������ ���������������c������Ô������������������������������������������������������������������������������ ��������� ��������� ��������� ������������������ ����������������������������������������0�� �������������������������ÿÿP„������� �—��c��"�> ��X��‡8 �����������������6��k)��w��!ûÃÂWIMMK›vw‘þÿ�ü�õ���h)1n ‘Ï�Î� �b�(,8õ« ° ÁiQU#º�º� �[�ÏЫõ  ‹ã��Mþã��MþàýKþ ��v�?� �5��ÿP ��ëXÞ��fpCnnÈ € ’11s ¸5��ÿZv ��y5��ÿP5��ÿP5��ÿP5��ÿP5��ÿP��Þ ��Þ ��Þ ��Þ ��Þ †þvï”*šþÒ'Ïþ”‰l ÿ¯AXFÿÎ÷pfÿàÕàŒÿó«PÂÿu\�?=hD�pØ~�ج Ã�Ô¥€ õ�…¸ ,<bð ¨Ñ#` ô&�����������2��.�,�e�v�m�[�W�W�%�&�����*�$�1�+�I�P�G�I�P�_�n�}�!����+�,�6�<�F�H�E�D�A�>�.�#�����.�.�=�@�J�O�H�A�6�/�$��������<�W�&�F�F�–�«�™�|�s�p�(�%�6�:�<�4�N�C�Z�M�x�{�i�j�q�€�…�…�O�K�B�@�S�T�e�m�|�u�j�g�a�Z�:�(�G�F�@�@�]�Z�t�x�†�‡�v�g�V�J�3�'�������:�V�%�L�H�š�­�™�{�q�o�)�&�8�;�<�3�O�B�Y�M�y�}�k�j�p�€�…�„�Q�L�B�@�T�T�f�n�|�v�k�f�^�W�9�&�L�I�B�A�^�\�u�y�†�ˆ�v�f�T�H�1�#�������/�B��0�/�_�g�X�C�<�8���3�5�4�'�6�-�:�0�G�F�7�5�6�;�7�.�H�C�8�/�8�7�?�B�G�?�5�2�-�(���?�;�4�.�<�8�F�F�J�F�:�/�$��� ���������������������������������������������������������������������������������������������������������������������������������������� ��� �V�Ÿ�ÐNš�^�ɉ ��^�`h�³�‚�³�žgyc)8¥'�P�î�˸�ô�!ö÷ÊáÌ·k�g�©�L’æ�}%:¹äúz±�f�h�•�½�Í�“��* › &�/�¼÷ÜÿÓÿL��ÿ��ß|�Lô�»�kD��������������ÿ�ÿ������Þ¡ûž d�������ÿÿÿÿÿÿ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �������II*�˜��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€S;�S���'�à��������R98������0100�����������������������������`������h��(�����������p�������������H������H������<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/CanonRaw.cr2����������������������������������������������������������000644 �000765 �000024 �00000021024 10540541634 020214� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������II*����CR�X!����������������������¾��������������Ä�������Ê�������è!��������������������â�������ê���(�������2����ò���i‡������ª �����Canon�Canon EOS 350D DIGITAL��H������H������2005:08:03 18:59:18��š‚����\��‚����d��"ˆ�������'ˆ�����������0221����l������€��‘��������’ ����”��’����œ��’ ����¤��’������� ’������� ’����¬��|’�À��´��†’���t��� ����0100 ������� ����€ �� ����� �� ����Œ ��¢����| ��¢����„ ��¢�������¤��������¤��������¤��������¤������������������P��� ���2005:08:03 18:59:18�2005:08:03 18:59:18�*è�����������������7���������.���æ�������B�������J����"���R���� ���–���� ���¶�� �� ���Ö�� �����Í[ �����ö���� ��� �������‰�€����� �������P���������� ��������ƒ���������“�����X�� �����x��ª�����”��Ð���������à�����ž��@�F��À��@�t ��L ��@����4��@� ���`������\����������������ÿÿ���������ÿ�����ÿÿÿÿ7���€�0����������ÿÿÿÿ��������ÿÿ��ÿ��ÿÿÿÿÿ�7�‹]d�������D���à�`�À�}���������������������������À� q�����ü���ÿÿ����������Canon EOS 350D DIGITAL����������Firmware 1.0.2������������������unknown����<������P������d���<1024 bytes all zero>��������������€ � € � ½�¼���+ûý��æÕ��—ý����������i�ÿÿ��Ÿ��p� ���������ÿÿÿÿ��������������������������������€P�������� �D��ô"�¼  ��4��³  ����������������Œÿ��pö��I���ð�<<s�¾�}|Í�‚�ˆ†3Ò¡£< ø ¸þ�ïø  þ�ÝPš þ�ÞXÐ þ�Kpóþ�] ˜þ�ßA. þ�( þ�ÝP þ�ÝPMõfþe+ZÈþ3%l·þ@‚IäþX¡ÿp±â>ÿàźdÿP⊔ÿXËÿØ%5öÿ·T3�p¥»—�² ПÄ�ë ~ø�7 µ3m ô'''''''''''''''������������������$���!��.�#�.�7���������,����.�%�%�#�7�F�K�;�)����������C�.�3�1�:�2�D�J�M�I�*�*�*�3�:�A�>�9�4�9�V�O�=�E�H�K�/�����������������)���'�&�:�,�4�=���������K���(�Q�:�9�7�S�f�l�M�1���������-�j�R�]�W�f�Q�f�n�r�b�3�O�P�_�j�x�q�h�`�k�ž�Œ�e�j�m�f�<�����������������9���/�'�?�/�6�;���������W���+�V�B�>�9�U�i�m�O�0���������4�}�Z�c�\�h�S�j�p�s�c�2�k�j��„�Š�€�t�h�o�Ÿ�Œ�e�l�m�f�:����������������������������������2����1�"� ��(�0�1� �����������B�2�7�1�7�*�1�2�2�(��:�:�C�E�I�C�;�6�;�T�G�/�0�0�'��������������������������������������������������������������������������������������������������������������������������������������������������������������������������L�¯�% ������������ �2�[�³�e:‰ ‰Gº� ���@�,�2� �T�ŒÂ@ÀïOÉý¤¦«¼bW��­� 7˜�ÿ������������������Í�� 6è������ÿÿ�ÿ�¤ÿÿ��pÚ<Ä�0�Ðí‡ ��¥–––@�@�@���–spÆ����œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€����v�BM��íŸ_�Ô’�ú1ÑÀ�÷0ðà�L®0öî�ð)€��ü�����3�:�€�1���� � � �������À�‡Kÿ�����N�—�������������� � ���ÿB�� �fUp ?� ����…�?� � ���C�?� �)���D�?��$���f�?� � � ��v�(��Ê�„�����(�€�X�����0������������������������������������������������������������������������������������������������������0 K����������������������������������������� ���������������¥––––––s¥––––––s¥––––––s¥––––––s¥––––––s��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@�@�@�@�@�@����:��(�@�@�2���>�7� �#�@�#�0�F�.�7��@�4� �@�œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€����v�„"��Ñ•e�Ý!µ“�œ1ë¹�&1ô×�Þ1òâ�Ü0€��û���v�VK��ºc�Ã!È”�ó1Ø»�1íÜ�Þã0òæ�Ü0€��û���v�BM��íŸ_�Ô’�ú1ÑÀ�÷0ðà�L®0öî�ð)€��ü���v�ì¢��<²]�-Öš�(!ÜÌ�¹0æí�Þv0øó�Ó€��ù���v�]���|¡T�dÉ�8!ØÖ�±0Åø�Þ0ýü�Á €��ý���v�ƒ#��Ô’e�Ö!¾“�Ì1Þº� 1àÙ�Þº0ûâ�Ü:€��ö���v�VK��ºc�Ã!È”�ó1Ø»�1ÙÜ�Þ±0ùå�Ü3€��÷���v�BN��îž_�Õ’�þ1ÐÀ�ó0ëà�L”0øí�ð)€��ù���v����0º^�6Ñš�!âÌ�Û0Ìí�ÞU0þó�â€��ø���v�]���|¡T�dÉ�8!ØÖ�±0Åø�Þ0ýü�Á €��ý���v�ƒ#��Ô’e�Ö!¾“�Ì1Þº� 1àÙ�Þº0ûâ�ÜA€��ö���v�VK��ºc�Ã!È”�ó1Ø»�1ÙÜ�Þ±0ùå�Ü3€��÷���v�BN��îž_�Õ’�þ1ÐÀ�ó0ëà�L”0øí�ð.€��ù���v����0º^�6Ñš�!âÌ�Û0Ìí�ÞU0þó�â€��ø���v�]���|¡T�dÉ�8!ØÖ�±0Åø�Þ0ýü�Á €��ý���v�ƒ#��Ô’e�Ö!¾“�Ì1âº�%1áÚ�ÞÕ0öä�Ü;€��ù���v�VK��ºc�Ã!È”�ó1Ý»�.1ÚÝ�ÞÌ0öç�Ü'€��û���v�BN��îž_�Õ’�þ1ÐÀ�ó0òà�L²0òî�ë*€��û���v����0º^�6Ñš�!âÌ�Û0Ìí�ÞU0þó�â€��ø���v�]���|¡T�dÉ�8!ØÖ�±0Åø�Þ0ýü�Á €��ý���v�ƒ#��Ô’e�Ö!¾“�Ì1âº�%1áÚ�ÞÕ0öä�Ü;€��ù���v�VK��ºc�Ã!È”�ó1Ý»�.1ÚÝ�ÞÌ0öç�Ü'€��û���v�BN��îž_�Õ’�þ1ÐÀ�ó0òà�L²0òî�ë*€��û���v����0º^�6Ñš�!âÌ�Û0Ìí�ÞU0þó�â€��ø���v�]���|¡T�dÉ�8!ØÖ�±0Åø�Þ0ýü�Á €��ý������P�gd4!P�gd4!P�gd4!T�gd4!T�gd4!N�—��b�ž��Š�v��þ����þ�� � � � � � �$ � #'8 �?��$���f�?� � � ��v�?��$���f�?� � � ��v�?��$���3�?� � � ��v�?�����������?� � � ��v�?�����������?� � � ��v�&�+�0�:�C�€�€�€�€�€�€�€�€��������������������������¸ æü&�Úÿ<Ä�0�Ðíþy‡üˆæü&�Úÿ<Ä�0�Ðíþy‡üXæü&�Úÿ<Ä�0�Ðíþy‡ü¸ æü&�Úÿ<Ä�0�Ðíþy‡üˆæü&�Úÿ<Ä�0�Ðíþy‡üXæü&�Úÿ<Ä�0�Ðíþy‡ü¸ æü&�Úÿ<Ä�0�Ðíþy‡üˆæü&�Úÿ<Ä�0�Ðíþy‡üXæü&�Úÿ<Ä�0�Ðíþy‡ü¸ æü&�Úÿ<Ä�0�Ðíþy‡üˆæü&�Úÿ<Ä�0�Ðíþy‡üXæü&�Úÿ<Ä�0�Ðíþy‡ü¸ æü&�Úÿ<Ä�0�Ðíþy‡üˆæü&�Úÿ<Ä�0�Ðíþy‡üXæü&�Úÿ<Ä�0�Ðíþy‡ü¸ ¾Bý�ñÿW©� �óÿî�™güˆ¾Bý�ñÿW©� �óÿî�™güX¾Bý�ñÿW©� �óÿî�™gü¸ ¸Hý�æÿT¬�%�Ûÿî�™güˆ¸Hý�æÿT¬�%�Ûÿî�™güX¸Hý�æÿT¬�%�Ûÿî�™gü¸ ¹Gý�òÿX¨�"�Þÿð�‘oüˆ¹Gý�òÿX¨�"�Þÿð�‘oüX¹Gý�òÿX¨�"�Þÿð�‘oü¸ Ê6ý �õÿ„|��êÿú�„|üˆÊ6ý �õÿ„|��êÿú�„|üXÊ6ý �õÿ„|��êÿú�„|ü¸ ¨Xý�ñÿ“m��ÿÿê�püˆ¨Xý�ñÿ“m��ÿÿê�püX¨Xý�ñÿ“m��ÿÿê�pü¸ ôÿôÿ���ˆôÿôÿ���Xôÿôÿ���¸ úÿúÿ���ˆúÿúÿ���Xúÿúÿ���¸ ��������ˆ��������X��������¸ ��ùÿ��ˆ��ùÿ��X��ùÿ��¸ � �òÿ��ˆ � �òÿ��X � �òÿ��¸ òÿòÿ���ˆòÿòÿ���Xòÿòÿ���¸ úÿúÿ���ˆúÿúÿ���Xúÿúÿ���¸ ��������ˆ��������X��������¸ ��ùÿ��ˆ��ùÿ��X��ùÿ��¸ � �òÿ��ˆ � �òÿ��X � �òÿ��n�d�‡���È��n�d�‡���È��n�d�‡���È��n�d�‡���È��n�d�‡���È��}�n�z���¾� �}�n�z���¾� �}�n�z���¾� �}�n�z���¾� �}�n�z���¾� ��p�s� ��Æ���p�s� ��Æ���p�s� ��Æ���p�s� ��Æ���p�s� ��Æ��¢�z�w� � �ž��¢�z�w� � �ž��¢�z�w� � �ž��¢�z�w� � �ž��¢�z�w� � �ž��²�|�}� � �–��²�|�}� � �–��²�|�}� � �–��²�|�}� � �–��²�|�}� � �–��d�Z�µ���´��d�Z�µ���´��d�Z�µ���´��d�Z�µ���´��d�Z�µ���´��n�d�‡���È��n�d�‡���È��n�d�‡���È��n�d�‡���È��n�d�‡���È��}�n�{���¾� �}�n�{���¾� �}�n�{���¾� �}�n�{���¾� �}�n�{���¾� ��p�s� ��Æ���p�s� ��Æ���p�s� ��Æ���p�s� ��Æ���p�s� ��Æ��¢�z�w� � �ž��¢�z�w� � �ž��¢�z�w� � �ž��¢�z�w� � �ž��¢�z�w� � �ž���ÿÿ‘�Ž�”����� ������"�&�*�.�2�6�:�>�B�F�J�N�R�V�Z�^�b�f�j�n�r�v�z�~�‚�†�Š�Ž�’�–�š�ž�¢�¦�ª�®�²�¶�º�¾�Â�Æ�Ê�Î�Ò�Ö�Ú�Þ�â�æ�ê�î�ò�ö�ú�þ� "&*048<@DHLPTZ^bhlpvz€„Š”š ¤ª°¶¼ÄÊÐØÞæîôþ(08BJT\fpx‚Œ– ª´ÀÊÖàìö&4BN\jxˆ˜¨¸ÊÜìþ"4FXj|Ž ²ÆØêü"6H\n‚”¨¼Ðâö 2FZn„˜¬ÂØì0F^tŒ¤¾Öð $>Zv’®Êè $ B ` ~ ž ¼ Ü ú  : Z z š º Ü ü  @ b „ ¦ Ê ì  4 X |   Æ ê  6 \ „ ª Ò ú ��������������������������������������������<dummy data>II*�´���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������¼4�j���(#�F��������R98������0100���������¬!���������È �� ������€�������������R!��������������������Ø!������������������������������ÙÅ�������X!�����������������È!���������ØÅ�������àÅ�������@Æ����¦!�������ÞÞ<Dummy thumbnail image data><Dummy raw data><Dummy jpg data><Dummy preview image data>Non-TIFF data test������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/CanonRaw.crw����������������������������������������������������������000644 �000765 �000024 �00000015240 11707053037 020325� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������II���HEAPCCDR����������<Dummy raw image data><Dummy JpgFromRaw image data>�� �������€?������������Nͯ?��������CRW_1602.CRW��������������������CRW_1602.THM�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������X��À¾¼îÍì����EOS DIGITAL REBEL CMOS RAW������CRW:EOS DIGITAL REBEL CMOS RAW��� ������� ��� ���@���Phil Harvey���������������������Canon�Canon EOS DIGITAL REBEL�Ú_Firmware Version 1.1.1����������� Xæ2a!Š~ØPd���ßšÊL HUSA�Œ![Û  ������� ���� �������  ��� ���0N���@���Ž���B��� �`ÿt�½������������ÿÿ��������Ž�w�t�À�/�����ü���ÿÿ�������������������ÿÿÿÿÿÿ\�����������������ÿÿ������� �ÿÿÿ7���t��� ����ÿÿÿÿÿÿ��� � ��ÿÿÿÿ����ÿÿÿÿÿ�‚�������������������������������������������������€�1�:������������€�1�:�������������€�1�:�������������€�1�:�������������€�1�:�� ��������úÿ�?�� �������?�� ��� ����?�� ���)����?�����$����?�� �� � �������������Ê�„�����€���������X������������� ��� ��� ���ÿ���� ��������úÿ�?�� �������?�� ��� ����?�� ���)����?�����$����?�� �� � �������������Ê�„�����€���������X������������� ��� ��� ���ÿ���� ��������úÿ�?�� �������?�� ��� ����?�� ���)����?�����$����?�� �� � �������������Ê�„�����€���������X������������� ��� ��� ���ÿ���� ��������úÿ�?�� �������?�� ��� ����?�� ���)����?�����$����?�� �� � �������������Ê�„�����€���������X������������������ ���ÿ���� ��������úÿ�?�� �������?�� ��� ����?�� ���)����?�����$����?�� �� � �������������Ê�„�����€���������X���������� ���#��'��� ���ÿ�����&���+���0���:���C�u���3Qÿ����\�äÿ���Œ�è®ÿ���²�…çÿ���Í�������âé�%������ðÿ������������u���3Qÿ����\�äÿ���Œ�è®ÿ���²�…çÿ���Í�������âé�%������ðÿ������������u���3Qÿ����\�äÿ���Œ�è®ÿ���²�…çÿ���Í�������âé�%������ðÿ������������u���3Qÿ����\�äÿ���Œ�è®ÿ���²�…çÿ���Í�������âé�%������ðÿ������������u���3Qÿ����\�äÿ���Œ�è®ÿ���²�…çÿ���Í�������âé�%������ðÿ������������x����}ÿ����[� ¹ÿ����Œ�ÎÂÿ���³�Ýáÿ���Ô�,òÿ���âî�������ðÿ������������x����}ÿ����[� ¹ÿ����Œ�ÎÂÿ���³�Ýáÿ���Ô�,ñÿ���°ë�������ðÿ������������x����}ÿ����[� ¹ÿ����Œ�ÎÂÿ���³�Ýáÿ���Ô�,ñÿ���°ë�������ðÿ������������x����}ÿ����[� ¹ÿ����Œ�ÎÂÿ���³�Ýáÿ���Ô�,ñÿ���°ë�������ðÿ������������x����}ÿ����[� ¹ÿ����Œ�ÎÂÿ���³�Ýáÿ���Ô�,ñÿ���°ë�������ðÿ������������x���ì|ÿ����V�å”ÿ���†�Ïÿ���¶�VÞÿ���à�0äÿ���Òõ�������ðÿ������������x���ì|ÿ����V�å”ÿ���†�Ïÿ���¶�VÞÿ���à�0îÿ���º÷�½�êÿ���ÿÿ������������x���ì|ÿ����V�å”ÿ���†�Ïÿ���¶�VÞÿ���à�0îÿ���º÷�½�êÿ���ÿÿ������������x���ì|ÿ����V�å”ÿ���†�Ïÿ���¶�VÞÿ���à�0îÿ���º÷�½�êÿ���ÿÿ������������x���ì|ÿ����V�å”ÿ���†�Ïÿ���¶�VÞÿ���à�0îÿ���º÷�½�êÿ���ÿÿ������������x���šÆÿ����S�+¶ÿ����Œ�>Åÿ���À�hÚÿ���ë�$Ùÿ���ºû��������ðÿ������������x���šÆÿ����S�+¶ÿ����Œ�>Åÿ���À�hÚÿ���ë�$Ùÿ���ºû��������ðÿ������������x���šÆÿ����S�+¶ÿ����Œ�>Åÿ���À�hÚÿ���ë�$Ùÿ���ºû��������ðÿ������������x���šÆÿ����S�+¶ÿ����Œ�>Åÿ���À�hÚÿ���ë�$Ùÿ���ºû��������ðÿ������������x���šÆÿ����S�+¶ÿ����Œ�>Åÿ���À�hÚÿ���ë�$Ùÿ���ºû��������ðÿ������������x���Í�`�����E�€›ÿ�����]×ÿ���Ê�ŽÇÿ���ó�ª�ìÿ���ºý�-�ùÿ���ÿÿ������������x���Í�`�����E�€›ÿ�����]×ÿ���Ê�ŽÇÿ���ó�ª�ìÿ���ºý�-�ùÿ���ÿÿ������������x���Í�`�����E�€›ÿ�����]×ÿ���Ê�ŽÇÿ���ó�ª�ìÿ���ºý�-�ùÿ���ÿÿ������������x���Í�`�����E�€›ÿ�����]×ÿ���Ê�ŽÇÿ���ó�ª�ìÿ���ºý�-�ùÿ���ÿÿ������������x���Í�`�����E�€›ÿ�����]×ÿ���Ê�ŽÇÿ���ó�ª�ìÿ���ºý�-�ùÿ���ÿÿ������������œÿ¡ÿá �������x���ö–ÿ������^�,¼ÿ������™�;Ùÿ�����Ï�Uéÿ�����þ�©Ûÿ�����öV��������öV��������öV��������‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘�‘������d���4������d���4�����d���4�����d���4�����d���4������� � � ��������� � � � � � � � � � � � � � � ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ"�P ��H��G �à�(�@�����������������/Þ>���� �� �—�—�ö`������ ý ü����þ��ú�����ÿÿ�Ktt±�ð�¬­º�þÿº�+wwª�Ê�Š‹ð�™�ÅÆwt‹����Œ�a�¼�¶�Â�¸ ™Åÿî��æÿcüˆ™Åÿî��æÿcüX™Åÿî��æÿcü¸ ™Åÿî��æÿcüˆ™Åÿî��æÿcüX™Åÿî��æÿcü¸ ™Åÿî��æÿcüˆ™Åÿî��æÿcüX™Åÿî��æÿcü¸ ™Åÿî��æÿcüˆ™Åÿî��æÿcüX™Åÿî��æÿcü¸ ™Åÿî��æÿcüˆ™Åÿî��æÿcüX™Åÿî��æÿcü¸ ïÿñ�ºÿFTÿüˆ ïÿñ�ºÿFTÿüX ïÿñ�ºÿFTÿü¸ �òÿ�ùÿˆòÿòÿ���Xòÿòÿ���¸ �ùÿ�ùÿˆùÿùÿ���Xùÿùÿ���¸ �����ùÿˆ��������X��������¸ ��øÿùÿˆ��øÿ��X��øÿ��¸ $��ðÿùÿˆ��ðÿ��X��ðÿ��¸ �����ùÿˆ��������X��������–�s�m���´��–�s�m���´��–�s�m���´��–�s�m���´��¥�w�p� ��´� �¥�w�p� ��´� �¥�w�p� ��´� �¥�w�p� ��´� �¹�x�s� ��ª� �¹�x�s� ��ª� �¹�x�s� ��ª� �¹�x�s� ��ª� �Ü�z�€�� �‘� �Ü�z�€�� �‘� �Ü�z�€�� �‘� �Ü�z�€�� �‘� �æ�|�†�� �ž��æ�|�†�� �ž��æ�|�†�� �ž��æ�|�†�� �ž�� �x�s� ��ª� � �x�s� ��ª� � �x�s� ��ª� � �x�s� ��ª� �¸ N�—��ˆN�—��XN�—�� �*þò�˜FXcŽ 99FP>�ŸN !XpàPth ¦6ýbþ þÛþûþ"ÿSÿœÿh� sÿ±þ—þ~þoþaþWþNþBþ.ÿP�R�Ì@?£º@?Ýó@?GV@?‡Ì‘„âJIe¬@?mº@?ݺ@?Ü}�|�}�|�� ����P��Ÿ��p�����(P��d�����)P���’b*B�������“���B���-\���T���6�‚��°���4Xp�€ÉLÒš1"���2��5���T��80���d��À���”��Á���®��Ât��È��ª ���<��¨���F��­>���Z��®���˜��¯���š��©R���œ��´���î��µ ���ð��9���ú��;������� �X���� A������� P��ÞÙÂXÕIX����­ßÉÑX‚¹�Ȫz½ ������ ���(��� ���H������h���0���h��(Z���x��(²���Ò�� 0ò��„��v��� ������� ������ 0þ��4���2��CANON OPTIONAL DATA������Ôÿÿ�ö��Ì<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 8.31'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:description> <rdf:Alt> <rdf:li xml:lang='x-default'>CRW with embedded XMP</rdf:li> </rdf:Alt> </dc:description> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>CANON OPTIONAL DATA���Ô������������������������������������2������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/CanonVRD.dr4����������������������������������������������������������000644 �000765 �000024 �00000012540 12526440666 020135� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������IIII�����‰�€���������M���<����������������������� �������������”�������������������œ������������������� ������������������¤������� �������������¨������ ������������¬������� ������������°������ �������������¸������ ������������¼������ �������������Ä������ �������������Ì��������������������Ô������ �������������Ø������&�������������Ü��8��� ������������� ������ ������������� ������ �������������$ ������ �������������, ������ �������������0 ������ �������������4 ����� � �������������< ����� � �������������D ����� ��������������L �� ��� � �������������l ����� � �������������t �������!�������������| ��h���!������������ä ��8��� ������������������� �������������$������� ��������������,������ ������������0������ ������������8������ ������������@������ �������������D������ � �������������L����� � �������������T����� �&�������������\����� �&�������������t����� �&�������������Œ����� �&�������������¤����� �&�������������¼����� �&�������������Ô����� �&�������������ì����� �&�������������������� ������������������� �������������$������ ������������,������ ��������������4������ ��������������<������������������D������ ��������������H������ ��������������P������ �������������X������ �������������`������ �ÿ������������h��ˆ��� �ÿ������������ð��ˆ��� �ÿ������������x��ˆ��� �ÿ���������������ˆ��� �ÿ������������ˆ��ˆ��� �ÿ���������������ˆ��� �ÿ������������˜��ˆ��� �ÿ������������ ��ˆ��� �ÿ������������¨��ˆ��� �ÿ������������0��ˆ�����ÿ�������������¸��H���*õ� �������������������+õ� ������������������õ� �������������������þ������������� �� ���� �������������,������&�������������0������!������������@�� ���� ������������L��������������������T����� � �������������X�����P� �������������\���������)\Âõ(*@����������������������������������P´@������À������@����„���������,@������������€ÿÏ@�����À’@������������€ÿÏ@��������(�������Á |–ÿ���������������p`yÿ��KtRÿ��M�������è�������������M�������ÀJtRÿ��Z(–ÿ��ÿÿÿÿ����ÿÿÿÿ�a���%�%������ÿÿÿÿÿÿÿÿ����ÿÿÿ������ �'���ñ“+��a��ÿÿÿÿ����÷æ‡ÿ��à“+��a������Z �dä'�€`��`ä'�€`��Ž3�����\ä'�€`��Xä'�€`��@ä'�€`��@EtRÿ��l­���������ð¿ffffffæ?š™™™™™ù?��������������@�������@ÍÌÌÌÌÌ@��������������������������������š™™™™™¹¿������à?�������������ò���O���ÿ����������O���u���¬���ò���ÿ�����������������������������������������������������������������������������������������������������������������þ������ý������������~���t���þ���ý�����������������������������������������������������������������������������������������������������������������þ������ý������������}���‹���þ���ý�����������������������������������������������������������������������������������������������������������������ÿ������ÿ������������„���q���ÿ���ÿ�����������������������������������������������������������������������������������������������������������������,@������������€ÿÏ@�����À’@������������€ÿÏ@������$@���������������������Àb@�����€”@�����Àr@�����à£@�����À‚@�����P²@�����À’@�����¾@�����À¢@�����8Æ@�����À²@�����èË@�����ÀÂ@�����HÏ@�����ÈÉ@����€ÿÏ@����€ÿÏ@����€ÿÏ@������������������������������������������������������������������������������������������������������A@������4À�����������������������������������$À�����€X@������ð¿ÍÌÌÌÌÌ쿚™™™™™é¿ffffffæ¿333333ã¿������࿚™™™™™Ù¿333333Ó¿š™™™™™É¿š™™™™™¹¿��������š™™™™™¹?š™™™™™É?333333Ó?š™™™™™Ù?������à?333333ã?ffffffæ?š™™™™™é?ÍÌÌÌÌÌì?������ð?š™™™™™ñ?333333ó?ÍÌÌÌÌÌô?š™™™™™@š™™™™™@������$@������A@�����@^@���������H@������I@š™™™™™¹¿������à¿ÿÿÿÿ������������������������������������������@������@������@������@����������������������,@������������€ÿÏ@�����À’@������������€ÿÏ@ÿÿÿÿ������������������������������������������@������@������@������@����������������������,@������������€ÿÏ@�����À’@������������€ÿÏ@ÿÿÿÿ������������������������������������������@������@������@������@����������������������,@������������€ÿÏ@�����À’@������������€ÿÏ@ÿÿÿÿ�������������������������������������������@������@������@�������@����������������������,@������������€ÿÏ@�����À’@������������€ÿÏ@ÿÿÿÿ������������������������������������������@������@������@������@����������������������,@������������€ÿÏ@�����À’@������������€ÿÏ@ÿÿÿÿ������������������ð¿ffffffæ?š™™™™™ù?������@�������@ÍÌÌÌÌÌ@��������š™™™™™¹¿������à?������,@������������€ÿÏ@�����À’@������������€ÿÏ@ÿÿÿÿ��������������������������������������������������@������@������������������������������,@������������€ÿÏ@�����À’@������������€ÿÏ@ÿÿÿÿ������������������������������������������@������@������@������@����������������������,@������������€ÿÏ@�����À’@������������€ÿÏ@ÿÿÿÿ������������������������������������������������������������������������������������������,@������������€ÿÏ@�����À’@������������€ÿÏ@ÿÿÿÿ������������������������������������������������������������������������������������������,@������������€ÿÏ@�����À’@������������€ÿÏ@���É��„�� �� ��ˆ ��Ä������)\Âõ(*@`��@��������H@����������������ÿÿÿÿÿÿÿÿ���ÿÿÿÿ���������������ÿÿÿÿ`��@������������@������ð?����������������à`@����^����������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/CanonVRD.vrd����������������������������������������������������������000644 �000765 �000024 �00000003350 10524245523 020225� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������CANON OPTIONAL DATA������Œÿÿ�ô��„��(���È�@@@ ������à@@@ �������f����������ÿÿìŒ����� � �����ÿÿ��������������������������������ÿ��ÿ��������ÿ��ÿ���������Ì@?£������PÌ@?£����������������������������� � �����ÿÿ��������������������������������ÿ��ÿ��������ÿ��ÿ��������������w�Ü����� � ������ÿ�ÿ���������������������������������ÿ���ÿ������� � � ������� ��:�e�j�š�š�Æ�Ê�é�ä�ö�ÿ�ÿ�����ÿ���ÿ������� � � ��� ���"�;�d�h�“�•�»�Ä�Û�Ý�è�ø�ð�����ø��ð������ � � ������� � �9�h�h�œ�˜�Ç�È�é�ã�÷�ÿ�ÿ�����ÿ���ÿ������� � ������ÿ�ÿ���������������������������������ÿ���ÿ�������Œ`4�{��������������������@°��?™™š�������������������������ÿ��ÿ��ÿü�������ÿ��ÿ���������ÿ�ÿ���������ÿ�ÿ���������ÿ�ÿ���������ÿ�ÿ��ÿÿ�����ÿ��ÿ���������ÿ�ÿ���������ÿ�ÿ������������<��<Ì@?£Ì@?£º@?ÝV@?‡ó@?GÌ‘„âJIe¬@?m+ww�ª�ÊŠ‹�ð�™ÅÆwKtt�±�ð¬­�ºþÿº0Ð oYNç=–uv­Å2kÿ��›�������� ·��{��d�@��@��������������G��c��*”����������P��H��'����������e�� �� l������������Æ��X���������� ����p����������°��\��à����������Å��2��P����������æ��þ��\������������À��h����������E��…��Ø����������s��N�� ¬����������­���� €����������Þ��õ�� ¸������������Ø�� ð����������ª��‘�� l��������������������ÿÿþ/ÿÿþÐ��a��Œ��*”ÿÿþBÿÿþÅ��k��q��'ÿÿþnÿÿþ«��‚��4�� lÿÿþ¦ÿÿþ’��¢��ï��Xÿÿþàÿÿþx��Ä��©��pÿÿþÿÿÿþk��Ö��„��àÿÿÿ&ÿÿþ^��î��Z��Pÿÿÿ[ÿÿþS����&��\ÿÿÿŸÿÿþJ��F��ç��hÿÿÿæÿÿþI����¬��Ø���(ÿÿþE��´��r�� ¬���xÿÿþF��÷��1�� €���®ÿÿþX��0���� ¸���èÿÿþr��t��ð�� ð��qÿÿþ±����¢�� l�����������������������àfh¿�(‰ÊÜ����CANON OPTIONAL DATA���Œ��������������������������������������ÿÙ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/CaptureOne.eip��������������������������������������������������������000644 �000765 �000024 �00000012510 11274302173 020636� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������PK �����ÒQƒ:VGµ@��@����0.IIQUT �ÌÖI7€ñJUx�õõII*�`��IIIICwaRDt<Cut raw data><Dummy preview data>���Phase One A/S�P65+�,�����,�����k�@B�2009:04:03 15:15:20�2009:04:03 15:15:20�������!ö� †�00E058000066000C01010E13F5000951� �š‚����]���'ˆ����È��������0220����e�������y���‘�������’ ����•���’����ÿ���|’�,������ ����Š�� ����$ ��¤������� ¤�!�����������þ��������������1������¤������4���������������������:�������H������� ��������������¤�������������M�������U����������(�������i‡����¾���������������������PK �����ÒQƒ:évÿô���ô��� ��manifest.xmlUT �ÌÖI7€ñJUx�õõ<Manifest> <Platform>0</Platform> <File> <RawPath>0.IIQ</RawPath> <SettingsPath>CaptureOne/Settings45/0.IIQ.cos</SettingsPath> <LCCs/> <ICCs/> </File> <Version>1</Version> <MinorVersion>2</MinorVersion> <Type>0</Type> </Manifest> PK �����Æ™c;)Gð·‚���‚�����manifest50.xmlUT �TÇðJ7€ñJUx�õõ<Manifest> <File> <RawPath>0.IIQ</RawPath> <SettingsPath>CaptureOne/Settings50/0.IIQ.cos</SettingsPath> </File> </Manifest> PK �����ÖQƒ:æ�ÐÌ��Ì����CaptureOne/Settings45/0.IIQ.cosUT �ÔÖI¼€ñJUx�õõ<?xml version="1.0"?> <IMG> <E K="CompatibleVersion" V="12"/> <E K="UUID" V="133ACDE8-EF48-4978-9AED-5C6B4DDE9CBF"/> <E K="Version" V="12"/> <VAR> <E K="UUID" V="43C0DD50-C6FE-4880-A275-7EA545CE1347"/> <MD> <E K="Basic_Rating" V="4"/> <E K="Color_tag_index" V="0"/> </MD> <DL> <E K="Rotation" V="0"/> </DL> <AL> <E K="Rotation" V="0"/> <E K="Rating" V="4"/> </AL> </VAR> </IMG> ��������������PK �����ðžc;HÃÐ ��Ð ����CaptureOne/Settings50/0.IIQ.cosUT �ÑðJñJUx�õõ<?xml version="1.0"?> <IMG> <E K="CompatibleVersion" V="13"/> <E K="UUID" V="133ACDE8-EF48-4978-9AED-5C6B4DDE9CBF"/> <E K="Version" V="13"/> <VAR> <E K="UUID" V="43C0DD50-C6FE-4880-A275-7EA545CE1347"/> <MD> <E K="Basic_Rating" V="3"/> <E K="Color_tag_index" V="4"/> </MD> <DL> <E K="USMAmount" V="140"/> <E K="LensGeoAbr" V="0.0,0.0000;26929.9,-2103.9001;53859.8,-16831.2012|0.0|0"/> <E K="Rotation" V="0"/> <E K="LensId" V="1"/> <E K="Shadow" V="0.000000;0.000000;0.000000;0.000000"/> <E K="GCurve" V=""/> <E K="WhiteBalance" V="1.391000;1.000000;1.474000"/> <E K="Exposure" V="0"/> <E K="LensOpticCenter" V="0.000000|0.000000"/> <E K="Vignetting" V="0.000000|0|0|1"/> <E K="USMRadius" V="1"/> <E K="ShadowRecovery" V="0"/> <E K="GCurveB" V=""/> <E K="LensTilt" V="0"/> <E K="USMThreshold" V="1"/> <E K="FilmCurve" V="PhaseOneP65+-Film Standard.fcrv"/> <E K="CNRAmount" V="34"/> <E K="LensShift" V="0"/> <E K="GCurveG" V=""/> <E K="ICCProfile" V="PhaseOneP65+-Flash.icm"/> <E K="Contrast" V="0"/> <E K="BRAmount" V="0"/> <E K="LensTiltDirection" V="0"/> <E K="Crop" V="0.000000;0.000000;0.000000;0.000000"/> <E K="NRAmount" V="25"/> <E K="ColorBalance" V="1.000000;1.000000;1.000000;1.000000"/> <E K="Highlight" V="1.000000;1.000000;1.000000;1.000000"/> <E K="HighlightRecovery" V="0"/> <E K="LensShiftDirection" V="0"/> <E K="Midtone" V="0.000000;0.000000;0.000000;0.000000"/> <E K="LensOpticCenterEnabled" V="0"/> <E K="TargetShadow" V="0.000000;0.000000;0.000000;0.000000"/> <E K="CleanLongExposureAmount" V="0"/> <E K="Clarity" V="0.000000"/> <E K="Brightness" V="0"/> <E K="LensRadialBlur" V="33662.4,9.4255|33662.4,7.4057|0.0|0"/> <E K="TargetEnable" V="1"/> <E K="Moire" V="0.000000;8"/> <E K="Saturation" V="0"/> <E K="GCurveR" V=""/> <E K="ColorCorrections" V="1,1,1,0.000000,0.000000,0.000000,127.000000,63.000000,119.000000,-28.822567,28.822567,-50.000000,50.000000,12.000000,1973.207031;1,1,1,0.000000,0.000000,0.000000,67.000000,63.000000,127.000000,-21.978279,21.978279,-50.000000,50.000000,12.000000,1973.207031;1,1,1,0.000000,0.000000,0.000000,63.000000,118.000000,127.000000,-22.322311,22.322311,-50.000000,50.000000,12.000000,1973.207031;1,1,1,0.000000,0.000000,0.000000,69.000000,127.000000,63.000000,-38.925846,38.925846,-50.000000,50.000000,12.000000,1973.207031;1,1,1,0.000000,0.000000,0.000000,127.000000,115.000000,63.000000,-13.542439,13.542439,-50.000000,50.000000,12.000000,1973.207031;1,1,1,0.000000,0.000000,0.000000,127.000000,68.000000,63.000000,-18.408569,18.408569,-50.000000,50.000000,12.000000,1973.207031;0,1,1,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1973.207031"/> <E K="PurpleFringing" V="0"/> <E K="TargetHighlight" V="1.000000;1.000000;1.000000;1.000000"/> </DL> <AL> <E K="Rotation" V="90"/> <E K="Crop" V="2087.088867;1690.806274;3868.893555;3158.520264"/> <E K="NRAmount" V="18.59756112098694"/> <E K="Rating" V="3"/> </AL> </VAR> </IMG> �������PK �����ÒQƒ:VGµ@��@��� ���������¤����0.IIQUT�ÌÖIUx��PK �����ÒQƒ:évÿô���ô��� � ���������¤x��manifest.xmlUT�ÌÖIUx��PK �����Æ™c;)Gð·‚���‚���� ���������¤«��manifest50.xmlUT�TÇðJUx��PK �����ÖQƒ:æ�ÐÌ��Ì��� ���������¤n��CaptureOne/Settings45/0.IIQ.cosUT�ÔÖIUx��PK �����ðžc;HÃÐ ��Ð ��� ���������¤Œ��CaptureOne/Settings50/0.IIQ.cosUT�ÑðJUx��PK������„��®��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Casio.jpg�������������������������������������������������������������000644 �000765 �000024 �00000002263 10357015703 017637� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá¶Exif��MM�*���� �������†���� ���Œ��������������–�������ž(�������1�������¦2�������¾�������‡i�������Ò��4CASIO�QV-3000EX����H������H���Ver1.000����������������2000:03:31 10:44:15��‚š������È‚������Ј"������������0210������Ø������ì‘�����‘�������’� �����’������’�������’ ��������’ ������’|����ö��  �����0100 ������� ������� ������� ������£��������������'�f������ 2000:03:31 10:44:15�2000:03:31 10:44:15��¯���0��������������� ��2���d��������������������������������������� ��������� Ä����������������� �������� �������� ��������� ��������� �����������������������������������������|�Y����������������������@������������R98������0100������������������‚������Š(�������������’��������������H������H���<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Casio2.jpg������������������������������������������������������������000644 �000765 �000024 �00000003243 10357015703 017720� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá¦Exif��MM�*���� �������’�������ª��������������²�������º(�������1�������Â2�������Ø�������‡i������Ä¥����(���ì�� CASIO COMPUTER CO.,LTD �EX-Z3 ����H������H���1.00 �2003:06:18 16:54:37�PrintIM�0250������������������‚š������Ž‚������–ˆ"������������0220������ž������²‘�����‘������Æ’� �����Î’������Ö’�������’��������’ �������’ ������Þ’|���þ��æ �����0100 ������� ������� ������� ������ì£��������¤��������¤��������¤�������¤������ä¤�����J��¤��������¤��������¤��������¤ ��������¤ ������������������P���'��� 2003:06:18 16:54:37�2003:06:18 16:54:37��˜��0��������������� ��Ä���dQVC����#�����@�ð���������������„ �������„ ������– ������¨ ������¼ �����W�] ����� �� ������� !������Ä "������è #������� 1�������� 2�����d�� 3������� 4��������0��������0�������0�������0�������0�������0������Ì0��������0��������0��������0��������0�����2��0��������0��������0��������0��������0�������0��������0������������0302��2809��45���������������������������������°`�x�ðNew York������������������������������R98������0100������������������X������`(�������������h��������������H������H���<Dummy thumbnail image data><Dummy preview image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/CasioQVCI.jpg���������������������������������������������������������000644 �000765 �000024 �00000000627 11400733420 020315� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF������ÿá�ˆQVCI�������� ��������������:�������������   *����-§�[ �,1998.10.24.12.08.57�KX-778�KX-778� 98082901� 98000829��ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ���������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/DICOM.dcm�������������������������������������������������������������000644 �000765 �000024 �00000003504 10336164711 017417� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DICM���UL�´�����OB��������UI�1.2.840.10008.5.1.4.1.1.4���UI(�0.0.0.0.1.8811.2.20.20010413115754.12432��UI�1.2.840.10008.1.2.1���UI�0.0.0.0���SH �NOTSPECIFIED��AE �NOTSPECIFIED��CS�ORIGINAL\PRIMARY\MPR��UI�1.2.840.10008.5.1.4.1.1.4���UI(�0.0.0.0.1.8811.2.20.20010413115754.12432� �DA�20010316�!�DA�20010316�"�DA�20010316�#�DA�20010323�0�TM�143008�1�TM�143414�2�TM�143415�3�TM�143022�P�SH���`�CS�MR�p�LO�GE Medical Systems�€�LO� ��PN� �SH�MRS1�0LO�BRAIN �>LO�FSE PD AXIAL OBL�PPN� �pPN�EC�LO�SIGNA ��PN� � �LO�123456�0�DA���@�CS�F �AS�028Y�0DS�61.2350 �°!LT��� �CS�SE�!�CS�SK�"�CS�SP�#�CS�2D�$�SH�fse �P�DS�5.00000 �€�DS�2300.00 ��DS�22.0000 �ƒ�DS�1.00000 �„�DS�63.8615 �†�IS�1 �‡�DS�1.50000 �ˆ�DS�2.00000 �‰�IS�256 �‘�IS�8 �•�DS�31.2500 � LO�3 �0LO�CLINICAL BRAIN�ˆIS�0 �IS�0 �”IS�0 ��DS�220.000 �PSH�HEAD�US��������CS�ROW �DS�90�DS �0.0313309 ��QCS�HFS � �UI$�0.0.0.0.2.8811.20010413115754.12432� ��UI&�0.0.0.0.3.8811.2.20010413115754.12432� ��SH�8811 ��IS�2 ��IS�31763 ��IS�20 � �CS�L\PH �0�DS�-110.500\-96.2063\59.0425 �2�DS�-110.500\-96.2063\59.0425 �5�DS2�1.00000\0.00000\0.00000\0.00000\0.990960\0.134158 �7�DS2�1.00000\0.00000\0.00000\0.00000\0.990960\0.134158 �R�UI&�0.0.0.0.4.8811.2.20010413115754.12432� �IS�1 �@LO�NA �ADS�73.8000 (��US��(��CS �MONOCHROME2 (��US��(��US��(�0�DS�0.859375\0.859375 (��US��(�US��(�US��(�US��(�SS���(�SS�(� SS���(�PDS�0 (�QDS�0 (�RDS�0 (�SDS�1 (�TLO�SIGNAL INTENSITY (UNITLESS) à�OW�����<Dummy Pixel data>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/DjVu.djvu�������������������������������������������������������������000644 �000765 �000024 �00000001673 11106327617 017650� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������AT&TFORM��¯DJVMDIRM���.����F���¬ÿÿÞ¿™ !È‘Në ÒÚˆèkæD,qîIÓn•½¢Ã"?FORM���^DJVUINFO��� ���d��INCL���shared_anno.iff�BG44����J��Šæá±7Ù*‰�BG44���ùŸBG44��� FORM��DJVIANTz��ûÿø0úÑ@ÏV§Lk91¡˜þ¹-´… ðø.AÖÿ¼å4ÕöW›‚Ñ‹Ð('œµRf¶óáª`r°Š.®&û‚š÷{çžÓÎjCx›ü?…¶7Dûé´\ŒÙ§äŽ‚#«P¢“p×S—Ê­zj·ä;y¦CT ™V¿'6ú]Q&6–ô•‘œÑCJÙa“_u ›çËy¼ÔUŸáÖWøRŽÙtD’8Ø Â�¶ÎþK±î›z^é3UcsØ·Êœ'¾5 '·­ûô,í{×uQƒö”ÄZÎÉõ ¦.°P\])Rù’¿ ZfÀB‹»—(Cltó¿{Å‹¶óI£—À2yÚ[Ù²j­zòüÝ󔣻’ñÓâ‘¶]¦‹ö`³‰¬‰¾¶ù•±ú£¢X'@«+«*ƒú¶#ù¾É}Ù$Â칊yCØmÆãð�„â„<gNovçÐ)éêOFÂýYMÁêÕø´& d„äSr‚=˜þ–cíUuªþ�|ó2Ø–n!Åžo…†^!g~ˆ–_¬~AdïŠ*vçmï×`Oÿ¿aÁC¿±¹½!·êOðNö#ò3e4ÐFIÕÝ4ÑCP¥ØŠä‚µéÍHµ…ÑëÀ\—M_ÌòÎá°’Òÿ0ÕNŒÇÓ¢n$Í>)« ëÃá-zGr­5…ê­ŸO¥Ûø¨Ì~¬lHÙcçiE¯0n‡nð¸9ÞK¬ð†˜BZÙå¥ÿ¶Ï‰D‹âO'åý;}Ä”¦ K»\ï â*ê‘Öñ§-ñÙ#Y.W²€+P˜a!&]I —²æ<Æp {W·”/tÚoHfМ—ÐâÑ0v° Ù­]`ç×2ÎrÖ¤w¦8�vËËtáß'ºÎùþÂä_g jzþÔ•»‰±UPU ¢Ó%ü^Ž9¡'`ؿЀ_nœ¹!7X´¡“<uWí¤rýd%7$™#mX-úÓ¿ÁT[zùýz¶u}×`ZÔ3VD•ÅñGˆ¿ík“?���������������������������������������������������������������������Image-ExifTool-10.10/t/images/DNG.dng���������������������������������������������������������������000644 �000765 �000024 �00000032536 10400335635 017205� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������MM�*����*�þ������������������������������������������������ ������������4ž����������������������������À�������2������*;������>J������F¼��� :��R‡i������3,’�������Æ������Æ������Æ������ ŒÆ������ œÆ!� ��� �� ´Æ"� ��� �� üÆ#� ��� �� DÆ$� ��� �� ŒÆ'������ ÔÆ(������ ìÆ*� �����Æ+������ Æ,������Æ.������Æ/���� ��$Æ0������.Æ3������NÆ4��� ¨��VÆZ�������Æ[�������Æ]������.þÆ‹������/�������Canon�Canon EOS 350D DIGITAL��2005:08:03 18:59:18�unknown���/��0ä��2<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-28, framework 1.6'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description rdf:about='' xmlns:exif='http://ns.adobe.com/exif/1.0/'> <exif:ExifVersion>0221</exif:ExifVersion> <exif:ExposureTime>1/15</exif:ExposureTime> <exif:ShutterSpeedValue>3906891/1000000</exif:ShutterSpeedValue> <exif:FNumber>8/1</exif:FNumber> <exif:ApertureValue>6/1</exif:ApertureValue> <exif:ExposureProgram>3</exif:ExposureProgram> <exif:ISOSpeedRatings> <rdf:Seq> <rdf:li>400</rdf:li> </rdf:Seq> </exif:ISOSpeedRatings> <exif:DateTimeOriginal>2005-08-03T18:59:18-04:00</exif:DateTimeOriginal> <exif:DateTimeDigitized>2005-08-03T18:59:18-04:00</exif:DateTimeDigitized> <exif:ExposureBiasValue>0/1</exif:ExposureBiasValue> <exif:MaxApertureValue>4/1</exif:MaxApertureValue> <exif:MeteringMode>1</exif:MeteringMode> <exif:Flash rdf:parseType='Resource'> <exif:Fired>False</exif:Fired> <exif:Return>0</exif:Return> <exif:Mode>2</exif:Mode> <exif:Function>False</exif:Function> <exif:RedEyeMode>False</exif:RedEyeMode> </exif:Flash> <exif:FocalLength>55/1</exif:FocalLength> <exif:CustomRendered>0</exif:CustomRendered> <exif:ExposureMode>0</exif:ExposureMode> <exif:WhiteBalance>0</exif:WhiteBalance> <exif:SceneCaptureType>0</exif:SceneCaptureType> <exif:FocalPlaneXResolution>3456000/874</exif:FocalPlaneXResolution> <exif:FocalPlaneYResolution>2304000/582</exif:FocalPlaneYResolution> <exif:FocalPlaneResolutionUnit>2</exif:FocalPlaneResolutionUnit> </rdf:Description> <rdf:Description rdf:about='' xmlns:aux='http://ns.adobe.com/exif/1.0/aux/'> <aux:SerialNumber>012345678</aux:SerialNumber> <aux:LensInfo>18/1 55/1 0/0 0/0</aux:LensInfo> <aux:Lens>18.0-55.0 mm</aux:Lens> <aux:ImageNumber>24</aux:ImageNumber> <aux:FlashCompensation>0/1</aux:FlashCompensation> <aux:OwnerName>unknown</aux:OwnerName> <aux:Firmware>1.0.2</aux:Firmware> </rdf:Description> <rdf:Description rdf:about='' xmlns:tiff='http://ns.adobe.com/tiff/1.0/'> <tiff:Make>Canon</tiff:Make> <tiff:Model>Canon EOS 350D DIGITAL</tiff:Model> <tiff:DateTime>2005-08-03T18:59:18-04:00</tiff:DateTime> <tiff:Orientation>1</tiff:Orientation> </rdf:Description> <rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:Creator> <rdf:Seq> <rdf:li>unknown</rdf:li> </rdf:Seq> </dc:Creator> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>Canon EOS 350D��Canon EOS 350D Digital������'ÿÿüO��'ÿÿý��'ÿÿåB��'��4û��'��d��'ÿÿüÞ��'��>��'��ƒ��'��‚��'ÿÿý—��'ÿÿü;��'ÿÿÞ;��'��> ��'�� Ÿ��'ÿÿú��'��·��'��Ú��'��'U��'������'������'������'��'��'������'������'������'��'+��'��'U��'������'������'������'��'��'������'������'������'��'+��'������������������� �B@�B@�B@�§¼�B@������d���…���d���–���d���d���d012345678����������7�������������������������Adobe�MakN�� šII��¼���.���ä�������@�������H����"���P���� ���”���� ���´�� �� ���Ô�� �����Na¼� �����ô���� ���$ �������‰�€�����ô�������8 ���������� ������ÿÿƒ���������“�����@ �� �����` ��ª�����| ��Ð���������à�����† ��@�F��¨ ��@�t ��4��@����#��ÿ����\����������������ÿÿ���������ÿ�����ÿÿÿÿ7���€�0����������ÿÿÿÿ��������ÿÿ��ÿ��ÿÿÿÿÿ�7�‹]d�������D���à�`�À�}���������������������������À� q�����ü���ÿÿ����������Canon EOS 350D DIGITAL����������Firmware 1.0.2������������������unknown����<������P������d���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€ � € � ½�¼���+ûý��æÕ��—ý����������i�ÿÿ�������������Ÿ��p� ���������ÿÿÿÿ��������������������������������€P�������� �D��ô"�¼  ��4��³  ����������������Œÿ��pö��I���ð�<<s�¾�}|Í�‚�ˆ†3Ò¡£< ø ¸þ�ïø  þ�ÝPš þ�ÞXÐ þ�Kpóþ�] ˜þ�ßA. þ�( þ�ÝP þ�ÝPMõfþe+ZÈþ3%l·þ@‚IäþX¡ÿp±â>ÿàźdÿP⊔ÿXËÿØ%5öÿ·T3�p¥»—�² ПÄ�ë ~ø�7 µ3m ô'''''''''''''''������������������$���!��.�#�.�7���������,����.�%�%�#�7�F�K�;�)����������C�.�3�1�:�2�D�J�M�I�*�*�*�3�:�A�>�9�4�9�V�O�=�E�H�K�/�����������������)���'�&�:�,�4�=���������K���(�Q�:�9�7�S�f�l�M�1���������-�j�R�]�W�f�Q�f�n�r�b�3�O�P�_�j�x�q�h�`�k�ž�Œ�e�j�m�f�<�����������������9���/�'�?�/�6�;���������W���+�V�B�>�9�U�i�m�O�0���������4�}�Z�c�\�h�S�j�p�s�c�2�k�j��„�Š�€�t�h�o�Ÿ�Œ�e�l�m�f�:����������������������������������2����1�"� ��(�0�1� �����������B�2�7�1�7�*�1�2�2�(��:�:�C�E�I�C�;�6�;�T�G�/�0�0�'��������������������������������������������������������������������������������������������������������������������������������������������������������������������������L�¯�% ������������ �2�[�³�e:‰ ‰Gº� ���@�,�2� �T�ŒÂ@ÀïOÉý¤¦«¼bW��­� 7˜�ÿ������������������Í�� 6è������ÿÿ�ÿ�¤ÿÿ��pÚ<Ä�0�Ðí‡ ��¥–––@�@�@���–spÆ����œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€����v�BM��íŸ_�Ô’�ú1ÑÀ�÷0ðà�L®0öî�ð)€��ü�����3�:�€�1���� � � �������À�‡Kÿ�����N�—�������������� � ���ÿB�� �fUp ?� ����…�?� � ���C�?� �)���D�?��$���f�?� � � ��v�(��Ê�„�����(�€�X�����0������������������������������������������������������������������������������������������������������0 K����������������������������������������� ���������������¥––––––s¥––––––s¥––––––s¥––––––s¥––––––s��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@�@�@�@�@�@����:��(�@�@�2���>�7� �#�@�#�0�F�.�7��@�4� �@�œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€��œá �¡x�ö–��,¼^�;Ù™�U!éÏ�©1Ûþ�öV€��öV€��öV€����v�„"��Ñ•e�Ý!µ“�œ1ë¹�&1ô×�Þ1òâ�Ü0€��û���v�VK��ºc�Ã!È”�ó1Ø»�1íÜ�Þã0òæ�Ü0€��û���v�BM��íŸ_�Ô’�ú1ÑÀ�÷0ðà�L®0öî�ð)€��ü���v�ì¢��<²]�-Öš�(!ÜÌ�¹0æí�Þv0øó�Ó€��ù���v�]���|¡T�dÉ�8!ØÖ�±0Åø�Þ0ýü�Á €��ý���v�ƒ#��Ô’e�Ö!¾“�Ì1Þº� 1àÙ�Þº0ûâ�Ü:€��ö���v�VK��ºc�Ã!È”�ó1Ø»�1ÙÜ�Þ±0ùå�Ü3€��÷���v�BN��îž_�Õ’�þ1ÐÀ�ó0ëà�L”0øí�ð)€��ù���v����0º^�6Ñš�!âÌ�Û0Ìí�ÞU0þó�â€��ø���v�]���|¡T�dÉ�8!ØÖ�±0Åø�Þ0ýü�Á €��ý���v�ƒ#��Ô’e�Ö!¾“�Ì1Þº� 1àÙ�Þº0ûâ�ÜA€��ö���v�VK��ºc�Ã!È”�ó1Ø»�1ÙÜ�Þ±0ùå�Ü3€��÷���v�BN��îž_�Õ’�þ1ÐÀ�ó0ëà�L”0øí�ð.€��ù���v����0º^�6Ñš�!âÌ�Û0Ìí�ÞU0þó�â€��ø���v�]���|¡T�dÉ�8!ØÖ�±0Åø�Þ0ýü�Á €��ý���v�ƒ#��Ô’e�Ö!¾“�Ì1âº�%1áÚ�ÞÕ0öä�Ü;€��ù���v�VK��ºc�Ã!È”�ó1Ý»�.1ÚÝ�ÞÌ0öç�Ü'€��û���v�BN��îž_�Õ’�þ1ÐÀ�ó0òà�L²0òî�ë*€��û���v����0º^�6Ñš�!âÌ�Û0Ìí�ÞU0þó�â€��ø���v�]���|¡T�dÉ�8!ØÖ�±0Åø�Þ0ýü�Á €��ý���v�ƒ#��Ô’e�Ö!¾“�Ì1âº�%1áÚ�ÞÕ0öä�Ü;€��ù���v�VK��ºc�Ã!È”�ó1Ý»�.1ÚÝ�ÞÌ0öç�Ü'€��û���v�BN��îž_�Õ’�þ1ÐÀ�ó0òà�L²0òî�ë*€��û���v����0º^�6Ñš�!âÌ�Û0Ìí�ÞU0þó�â€��ø���v�]���|¡T�dÉ�8!ØÖ�±0Åø�Þ0ýü�Á €��ý������P�gd4!P�gd4!P�gd4!T�gd4!T�gd4!N�—��b�ž��Š�v��þ����þ�� � � � � � �$ � #'8 �?��$���f�?� � � ��v�?��$���f�?� � � ��v�?��$���3�?� � � ��v�?�����������?� � � ��v�?�����������?� � � ��v�&�+�0�:�C�€�€�€�€�€�€�€�€��������������������������¸ æü&�Úÿ<Ä�0�Ðíþy‡üˆæü&�Úÿ<Ä�0�Ðíþy‡üXæü&�Úÿ<Ä�0�Ðíþy‡ü¸ æü&�Úÿ<Ä�0�Ðíþy‡üˆæü&�Úÿ<Ä�0�Ðíþy‡üXæü&�Úÿ<Ä�0�Ðíþy‡ü¸ æü&�Úÿ<Ä�0�Ðíþy‡üˆæü&�Úÿ<Ä�0�Ðíþy‡üXæü&�Úÿ<Ä�0�Ðíþy‡ü¸ æü&�Úÿ<Ä�0�Ðíþy‡üˆæü&�Úÿ<Ä�0�Ðíþy‡üXæü&�Úÿ<Ä�0�Ðíþy‡ü¸ æü&�Úÿ<Ä�0�Ðíþy‡üˆæü&�Úÿ<Ä�0�Ðíþy‡üXæü&�Úÿ<Ä�0�Ðíþy‡ü¸ ¾Bý�ñÿW©� �óÿî�™güˆ¾Bý�ñÿW©� �óÿî�™güX¾Bý�ñÿW©� �óÿî�™gü¸ ¸Hý�æÿT¬�%�Ûÿî�™güˆ¸Hý�æÿT¬�%�Ûÿî�™güX¸Hý�æÿT¬�%�Ûÿî�™gü¸ ¹Gý�òÿX¨�"�Þÿð�‘oüˆ¹Gý�òÿX¨�"�Þÿð�‘oüX¹Gý�òÿX¨�"�Þÿð�‘oü¸ Ê6ý �õÿ„|��êÿú�„|üˆÊ6ý �õÿ„|��êÿú�„|üXÊ6ý �õÿ„|��êÿú�„|ü¸ ¨Xý�ñÿ“m��ÿÿê�püˆ¨Xý�ñÿ“m��ÿÿê�püX¨Xý�ñÿ“m��ÿÿê�pü¸ ôÿôÿ���ˆôÿôÿ���Xôÿôÿ���¸ úÿúÿ���ˆúÿúÿ���Xúÿúÿ���¸ ��������ˆ��������X��������¸ ��ùÿ��ˆ��ùÿ��X��ùÿ��¸ � �òÿ��ˆ � �òÿ��X � �òÿ��¸ òÿòÿ���ˆòÿòÿ���Xòÿòÿ���¸ úÿúÿ���ˆúÿúÿ���Xúÿúÿ���¸ ��������ˆ��������X��������¸ ��ùÿ��ˆ��ùÿ��X��ùÿ��¸ � �òÿ��ˆ � �òÿ��X � �òÿ��n�d�‡���È��n�d�‡���È��n�d�‡���È��n�d�‡���È��n�d�‡���È��}�n�z���¾� �}�n�z���¾� �}�n�z���¾� �}�n�z���¾� �}�n�z���¾� ��p�s� ��Æ���p�s� ��Æ���p�s� ��Æ���p�s� ��Æ���p�s� ��Æ��¢�z�w� � �ž��¢�z�w� � �ž��¢�z�w� � �ž��¢�z�w� � �ž��¢�z�w� � �ž��²�|�}� � �–��²�|�}� � �–��²�|�}� � �–��²�|�}� � �–��²�|�}� � �–��d�Z�µ���´��d�Z�µ���´��d�Z�µ���´��d�Z�µ���´��d�Z�µ���´��n�d�‡���È��n�d�‡���È��n�d�‡���È��n�d�‡���È��n�d�‡���È��}�n�{���¾� �}�n�{���¾� �}�n�{���¾� �}�n�{���¾� �}�n�{���¾� ��p�s� ��Æ���p�s� ��Æ���p�s� ��Æ���p�s� ��Æ���p�s� ��Æ��¢�z�w� � �ž��¢�z�w� � �ž��¢�z�w� � �ž��¢�z�w� � �ž��¢�z�w� � �ž���ÿÿ‘�Ž�”����� ������"�&�*�.�2�6�:�>�B�F�J�N�R�V�Z�^�b�f�j�n�r�v�z�~�‚�†�Š�Ž�’�–�š�ž�¢�¦�ª�®�²�¶�º�¾�Â�Æ�Ê�Î�Ò�Ö�Ú�Þ�â�æ�ê�î�ò�ö�ú�þ� "&*048<@DHLPTZ^bhlpvz€„Š”š ¤ª°¶¼ÄÊÐØÞæîôþ(08BJT\fpx‚Œ– ª´ÀÊÖàìö&4BN\jxˆ˜¨¸ÊÜìþ"4FXj|Ž ²ÆØêü"6H\n‚”¨¼Ðâö 2FZn„˜¬ÂØì0F^tŒ¤¾Öð $>Zv’®Êè $ B ` ~ ž ¼ Ü ú  : Z z š º Ü ü  @ b „ ¦ Ê ì  4 X |   Æ ê  6 \ „ ª Ò ú ��������������������������������������������II*�¼��XÛNc-’Qq¦»ˆH¢Canon350D.CR2���þ��������������� ¼������ ������������������€#����������������B�������C�������ðD������0ÎE�������‚������‚Ž�����Æ������Æ�������Æ������Æ������0fÆ����ÿ��Æ������0nÆ������0~Æ ������0ŽÆ-��������Æ2������0žÆ\������0¦Æ������0®ÆŽ������0¾�������������������������� ����������� €����� �������d���d������������*�� �� ¼��������� ���(<Dummy raw image data>��þ���������������������«������1ž��������������������1ì�������������«��������������������1¤�������������������1¼���������+��è��K��è���r��è����������ÿ������€������ÿ������€������ÿ���<Dummy preview image data>��þ�������������� €������ �������2À��������������������3������������� ���������������������2Æ�������������������2Þ���������+��è��K��è���r��è����������ÿ������€������ÿ������€������ÿ���<Dummy JpgFromRaw image data>��‚š������4.‚������46ˆ"�������ˆ'�����������0221������4>������4R’� �����4f’������4n’� �����4v’������4~’�������’ �������’ ������4†¢������4Ž¢������4–¢�������¤��������¤��������¤��������¤������������������������2005:08:03 18:59:18�2005:08:03 18:59:18��;K�B@����������������������7����4¼���j�#(���Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/DPX.dpx���������������������������������������������������������������000644 �000765 �000024 �00000004040 12217041557 017245� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������SDPX���V1.0�����À������€��€��ö¤Image filename �����������������������������������������������������������������������������2010:08:03:08:38:16�����Creator �����������������������������������������������������������������������������Project name ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Copyright info ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ����������������ÿÿÿÿ��ÿÿÿÿÿ2 ��������������CPD�����������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ����������������������������������������������������������������������������������������������������������������������������SPIRIT-4K DATACINE �������������01018���������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ����������������004F 0 161�������������������������ÿÿÿÿÿ�������ÿÿÿÿ������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿThomson BTS �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/DV.dv�����������������������������������������������������������������000644 �000765 �000024 �00000010460 11505373520 016741� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������¿hxxxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?�ˆ�ÿd„€Àþÿd„€Àðâÿd„€Àøÿd„€Àþÿd„€Àðåÿd„€Àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ˆÿd„€Àþÿd„€Àðèÿd„€Àø ÿd„€Àþ ÿd„€À€ëÿd„€ÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿP�pÇÿqÿÿÿÿÿ8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`ÿÿ ÿaýÿbÿÖâcÿ¨¶áÿÿÿÿÿÿÿÿÿÿÿÿp�ÿÿÿÿÿqpTQ˜Ñ·¨°ÊŸ›OQJhÇÛrj¬±½UPDB1H`YŽ¿Ç¡Öúrœ–8ac™¬Ú AF¶NQm ¥Zeb.ž›zU@9KáL� µ¥î؇ ™bÜþDŸV}µ˜gŒÜ`QøŸ.è(éoèßí]ÿòÿæ ýåïoãoìãßö¿ã¼ÿþ5Œ¯Yj=ó:¥äó]ÈsNþ ³G’qawäƒ'_¤¿w´ƒùÁÂ×Êͪ6¡H¡²~/È&uCÉi©ü´…¢‘£ãéãiY;¶õ'˜‡ ´‰vÊç÷­w6øŸ@ÂÎp ®* ]ù€æÇÏRæÆ%­�£EÏ ,x8B¯‚¡âqšÉDñ˜®ƒOÇÚ¤&�‘˜@ü `�ùª ������� ¤žtH¡cÎzà~‹Ø�¥úˆ™4É���¡‡Rjx¡î£C�¡€)qq§éðØ���£bœ|f����þ!¥ùpÀ��� ¬,›ðžõjHR1ÖÃQ°+úôBý:ßÇ‹Üε¯c¹íÆ�PI�'ì’¨dMÌÕ m|eHpR¸ÎàŽŸÇù8«1‰â0c˜ oí_üÜÿÞž¼Ž¿:ÿæÏêÏåçdþCçv¿¯_øËïf’KôÔþ.lÀ/{ùc©ÔWˆý€x.‹=¿ã\ÂÞæÕñ³lª†º€àJ ®¹5p.s¨8èÂ[ßꮨõ›r/zÞß[œJw2© @4ðà!¹ç ÔŒkª‰CE><öÓj#¹"žÇöù ¤7rù·{W ¯ÍJâç 8]F6uº(° ΋øN`lõÄõ‰Ö®©THÄ1;…ä $6 ¯‡<`~EØxƒ/s©‚´Å°;W¨ù$F+0rXá‚ ¡€ˆ0âÂ0»JŒ-&H¹¡�äs´XÁÃã³µ¢€¸\qȶ0[ᢇ—¼ÿÈ9€���RêGá0��ý¥!10����� ¬¯[Ö·%úóZ1 “è¼°4kÔ9T»KÈ ©œ¤ã#X>Yâ(`®“Š‘Uzp9¬��:ÒàP����û4—–����� °ŸHÂïÈȆ`òx®Ús�Ø(áãÅÁ¬€”Ð8x´èá5`���«� ©Â1¾Œ/áøÌ��$Í!‹Á`���ø%`8—;�x «º—¿G"‘K���«€IxïsØ������«8< �������«�„àÁÀâÓÆ`����—?M€�����ú cÀâ;��� ­´rFƒÿ fÓ�¯�0ÁùPÀ�����¬¸ sC4¸qÜìZ®!˜��������,४áCÆðù´ h°����� £ôõÆÆÌ ��£ 4bsߦ8°����£¨½Àº‘Aà¦À�£ÐçŒ>`����� H cÀ£Àý CÞý iáꦙÁ—Ò–H<s£øâ¦J Èuà8©ÐÂÛঈҧ i`���¥”’ñà‚€�� •‚à}/¤ø„û¢ð«©.ã†pÿÿÿÿÿ¹¿VP锟BL\\`©®¯bHÊô¨”6¥§HcAvAªI< ­¨¾abù•™®VGUžú· ZÂý0¹½R>º¬®’˜²@×­“œê0þHa`����«%#‡MzÀ����«‡i.>5>;����«ˆS@xÀñÁüx`���09Îü™q`�ú EdbÓãÐÀ¬†šX��������¬K°?ÜÀ�����ªƒ�Ç£¦À������ª‚�ÅÀ§GÀ`�����… �����ú"]CßùBÀ��¯‡—ŸÇ :Ôi°���°‚‡ƒ¤À�������¯‚tA¢‡hú_Á€�±…$ðñ¦ìG���˜®<xÀ���ø¢åÀÇðX��£�” Kˆ{Ÿ‚ž+žÆ�£Š\5hàþd°�����£�T 3„‚) �����¤‚H#DáÆ(üÐ`�� “ì������ý!­@“⤲åéb> ÃØ00¬�¥€ìAîs7à?ޤ•±Á19ôáŠ��¥GP®'�8À{±È ZÁ(p¤ý P¾Ž3Ø���´/s –äÁ�€‘­”È aã9©&Ö@÷°¬Édœ‰ˆ�êq�­CÊð´Yæ Ò Ÿ-Ë„¬‚DR‰øµ/$´|$O¶¯¨v‡.”8 8q‡qŸ­(u$œ E» ±xM1«——±RÏVE,b¬¤ŽO…Æd9áñŒãj¡µrŸÅk´ú*â¸(ÃÁðƒ¯€˜iÁG‡KjMil° :aß™-`����¯ƒÇ`��������°ÔÒh§ñÀ°����“E€�����ø-rçN*A€¢�å$¿ ߀ãa`�¢�÷¸—J`ÇO€��¢‡—‚iÄ)‚î���£¦¡Á~ÃÄÀ���“P4;����þ¨½à‚ó¦î¯»9÷,XZMdh¹¯ï&ÒÎp@UuLI²«–L TpÅI;J@q©ŸPâ£EHüR¨ÃŒ9æ‡ø¿ŒPúºÄ ü¸hä±™O|¦¥æ%ÂŒ(°¤·¶K–ú]„¤<9ôµì³Š B¢ŽÀ45 ±2\p.3.#p·«2ëÀ*Z\Cè÷§*Gž8µ 0½Úz NðQ´ŠÀÁù€֮„„Vµ�ã‡4â²ü°Ìù´€”¼x&M.},&—èSN*< ñ÷#�%Hàxn ­Pч£øðÀ¦—·­‚@¤cÁ¦Æyf± ¯ñ¢iÁ§ÅÄÎ#���¯ŒÈŒ|ðØ����®‰ÐüÀñX��ù*«{¨Ñü‰`�¥ƒ£Z¹ÔÒ£O`���¥‚Txvšti$—°¢‚b—ép°¹€���¢“`!À`~㜠��� ¢–‚\¸4ƒ��ý ”?“Ã>„ö¹-ßc<е�¾{µ.ÆiÅ5€¦‡¨‚péI²¯d¤ ·ÎôH8jÆ%ߺ›·ZêŠÅ:«f³ÿ+efkË…ÓO÷±[ž2[Ôpÿÿÿÿÿš‘XÖ«É÷ª°¯ WP«•™Oda. ²Y«©4IM«tð V;7Q! Dt:ަ­>:®N­ýÐS@kÒ®Éa`(Ѹ%T\Ű®\:a”ÇEôc°-~«Ãï!ãC<F± rì……€á5npb±8¿C¸îÒbÞ-™ýu§K™ãxø§ñCU2 2´ŠNOä¸M¾ã–C´Á ãÂàxXhÄÒ�³„§CÚÃÀ,���²ˆ’HD“@#Ã,��–‚8”0���÷!çcàŸÌ� ­ŠÓ/òÅÓ`����¬)@. ð|����¯Š_AÃÀ§ñá€����¯‚WÐÒ.ÆÀ�����.x˜�����ù0Œ�������!¥‰J+)F™áQÅ4¶�¤‘žhàó@.qw€��¤“wïÒðX������¥tphR 4ð;Šæ� !~txTñ˜�ý' ]¢GÒ"³,þÄÒ ¸R{ÏØºœˆ©¶ˆ]„}8°¯[vËÂ%äŠ BtÔ¯/gÜ®ÒñA�hо–ºÁô~H©÷½r?8½]•#«˜dG£Ñî:.ã¸âŤ¨,HP‚²ó„þ5bÉ«lŠ ¸&à GX@ª“$(.Ò¡Ümã°Ÿ©BÀýGž–ú#ª4‡°òGè$«‘tˆÀçapcY ’#†ª+9à¸ávÌ1]¬—hUÀ4~D±_³»I¬_IÁÁ8ø­����'I0'°���ú'¹ãÓüá`�%°‡’ cý`�����°xáâÃC�����±F0x‡ò€�����± Їšxá0����’ü/ý(`���ø¤RhWÅã†�&£Ppá}8h88 Ì��£�¥Î}�Ðï„À���¤‚/R¤cÅÃsÿX¤GP‘ÁN> ���� WC¸l���ý Š¡ä<Œnw€'¸©fïÛj ]ñƒ‰WJ «–it$]*‘Ë :ó©“ž189Äa8q :d§‘!Hp¤ãx¢ŒX]£×j;ÕšÊèú3²‹¶Ðð(©�…ÚôPˆÝ€��¨KøCÄ`�����©„%ü€À������¨ŠÈ€�������”qsðhÓà9€û"@$>‘Gc¥)«�Šâíb#ƒÃ`���«‚˜ßO�~80�����©‡g0��������©ƒÅ£€,����’ƒ������û"I¢Ž è`��*°‚v*‹Œ0����²\ðqñøþ�����²�®~âc~˜`���²…\cñçE€������š ÆÀ����ø§çaÆÀ���+£…ñüw¼1‹���¥�UÎäèðE'KØ�¤…Z€èá§òÌ���¥€ \îØ����� ¨%áÿ¤ ��ü *PCΙ8<,¥„s´t8º ���¤‡a;Jšxº ����£Av, ������£PÄóCÜüxŸÂ`�� .uóE€���ý"§ç , ��pPÐ0àѻʔÈÎ ™¤T:HÞpmqÅ¿nR Õ·íò±ÈŸ¤Ø`^ñQZù©¦fZPøÖ¹X\ëž•,£Ÿ…D\e§¼¦´¬êâ(¬ºKR_Ç����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/EXE.elf���������������������������������������������������������������000755 �000765 �000024 �00000005454 11056301725 017217� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ELF��������������€‚4���������4� ��(������4���4€4€à���à����������������������������������€�€D��D�����������D��D”D”ø���������������X��X”X”È���È������������(��(( ��� ���������Qåtd��������������������������/lib/ld-linux.so.2�����������GNU����������� ���������������� � �������­KãÀ��������������������������� ���)�������Ÿ��������8„������__gmon_start__�libc.so.6�_IO_stdin_used�__libc_start_main�GLIBC_2.0����������������������ii ���;������� •��0•��4•��U‰åƒìèi���èð���è«��ÉÃ�ÿ5(•ÿ%,•����ÿ%0•h����éàÿÿÿÿ%4•h���éÐÿÿÿ��������1í^‰áƒäðPTRhpƒh€ƒQVhTƒèÇÿÿÿôU‰åSƒìè����[Ãt��‹“üÿÿÿ…Òtè’ÿÿÿX[ÉÃU‰åSƒì€=@•�u?¸P”-L”ÁøXÿ¡<•9Ãv´&����ƒÀ£<•ÿ…L”¡<•9ÃwèÆ@•ƒÄ[]Ãt&�¼'����U‰åƒì¡T”…Àt¸����…Àt Ç$T”ÿÐÉÃL$ƒäðÿqü¸���U‰åQY]aüÃU‰å]Ãt&�¼'����U‰åWVSè^���Ù��ƒìè—þÿÿƒ ÿÿÿ‰Eðƒ ÿÿÿ)EðÁ}ð‹Uð…Òt+1ÿ‰Æ¶����‹EƒÇ‰D$‹E ‰D$‹E‰$ÿƒÆ9}ðu߃Ä[^_]Ë$ÃU‰åS»D”ƒì¡D”ƒøÿt ƒëÿЋƒøÿuôƒÄ[]ÃU‰åSƒìè����[Ã���è þÿÿY[ÉÃ�������������ÿÿÿÿ����ÿÿÿÿ�������������� ���0‚ ���„õþÿoH���¨���h ���E��� ����������������$•��������������� ‚���‚������������þÿÿoøÿÿÿo���ðÿÿoî����������������������������������������������������X”��������^‚n‚�����GCC: (GNU) 4.1.1 20070105 (Red Hat 4.1.1-52)��GCC: (GNU) 4.1.1 20070105 (Red Hat 4.1.1-52)��GCC: (GNU) 4.1.2 20071124 (Red Hat 4.1.2-42)��GCC: (GNU) 4.1.2 20071124 (Red Hat 4.1.2-42)��GCC: (GNU) 4.1.2 20071124 (Red Hat 4.1.2-42)��GCC: (GNU) 4.1.1 20070105 (Red Hat 4.1.1-52)��.shstrtab�.interp�.note.ABI-tag�.gnu.hash�.dynsym�.dynstr�.gnu.version�.gnu.version_r�.rel.dyn�.rel.plt�.init�.text�.fini�.rodata�.eh_frame�.ctors�.dtors�.jcr�.dynamic�.got�.got.plt�.data�.bss�.comment������������������������������������������ ��������������������������������������((�� ������������������!���öÿÿo���HH�� ����������������+��� ������hh��@���������������3���������¨¨��E������������������;���ÿÿÿo���îî������������������H���þÿÿo���øø�� ����������������W��� ������‚������������������`��� ������ ‚ �������� ���������i���������0‚0��������������������d���������H‚H��0�����������������o���������€‚€��˜�����������������u���������„��������������������{���������4„4�� ������������������ƒ���������@„@�����������������������������D”D��������������������”���������L”L��������������������›���������T”T�������������������� ���������X”X��È����������������©��������� • �������������������®���������$•$�������������������·���������8•8��������������������½���������<•<��������������������Â��������������<���������������������������������P��Ë��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/EXE.exe���������������������������������������������������������������000755 �000765 �000024 �00000012000 11061212745 017212� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������MZ�������ÿÿ��¸�������@�����������������������������������€���º�´ Í!¸LÍ!This program cannot be run in DOS mode. $�������PE��L�ÅH��������à� 8���������������� ����@���������������������`�����‰!������� ��������������������������@��Ô���P��€����������������������������������������������������������������������������������������������������������.text���´�����������������������`��`.data������� ������ ��������������@��À.bss����€����0����������������������€��À.idata��Ô���@��������������������@��À.rsrc���€���P��������������������@��À����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������U‰åƒì¡�0@�…ÀtÌÙ}þ·Eþ%Àðÿÿf‰Eþ·Eþ ?��f‰EþÙmþÇ$P@�èD��‰ì]ÃU‰å]éÇ���U‰åèˆ��]¸���Ã-LIBGCCW32-EH-SJLJ-GTHR-CYGWIN�U‰åƒì¡@0@�ÿP‰ì]ô&����¼'����U1À‰åüƒì¹ ���‰$‹]‰|$‰ßó«Ç0���¡� @�ÇC$ÿÿÿÿÇC @�‰C¡0@�ÇC€@�‹ @�ÇC����‰C ¡ @�‰S,‰C(‹$‹|$‰ì]ö����U‰åƒìX‰uø¡@0@�‰}ü…Àt ‹uø‹}ü‰ì]Ãü¾`@�ÇE¸AAAA}ع���ÇE¼AAAAÇEÀAAAAÇEÄAAAAÇEÈAAAAÇEÌAAAAÇEÐAAAAÇEÔAAAA·|@�ó¥f‰¶~@�ˆG}¸‰<$è¹��·Àƒìf…À…Š���Ç$0���è^��…À‰Æ„€���‰$èÜþÿÿ‰4$è„���f…Àt:ÇD$P@�ÇD$����Ç$����è��v�‰5@0@�F£00@�F£P0@�éÿÿÿ‰4$èÝ��‰<$è5��ƒì·Àë ‰$è¨���‰Æë´èß��ë U¸���‰åWº���VSƒì\‹]v�¼'����…Ú±Au±aˆL(¨ÒHyïü¾`@�}È·|@�¹���ó¥f‰¶~@�ˆGE¨‰$è°��·ðƒìf…öu 1Òeô‰Ð[^_]É4$è���9؉òuæëæ‰ö¼'����U‰åU¸SƒìT1Û·EÇD$?���‰T$‰$èl��ƒì …Àt1¸���º���t&�¼'����€|(¸AtÒHyôƒ;0u ‰Ø‹]üÉà Óëëèß���ë U‰åƒì¡@0@�‰$èíþÿÿf…Àt‰ì]Ãè¯���U‰åƒì‰uü‹u‰]øÇD$����‰4$è‘���ƒì…Àt Ç$����ÿ”@@�ì°���\$ÇD$����‰\$‰4$è_���ƒì‰$ëÔÿ%„@@���������ÿ%˜@@���������ÿ% @@���������ÿ%œ@@���������ÿ%ˆ@@���������U1À‰åSƒì‹] …Û„ì���ÇC¨���1ɺp���ÇCí��…ÀÇC ���‰‹€���‰“„���ÇC, @�ÇC0¬@�ÇC 0@�„›���‹ƒ¤���£$0@�ÇCx����‹EÇCH0@�ÇCL @�‰C(‹E�ÇCP@�ÇCT�@�ÇC$(0@�‰ÇC@�ÇCð@�ÇC ð@�ÇCDà@�Ç$����è��‰C|ƒìÇC4� @�ÇC8 @�ÇC<�0@�ÇC@€0@�è˜���¸���‹]üÉÂ�ÇC$0@�édÿÿÿÇ$���è��‰Â1Àƒúÿt؉Ӹ���éóþÿÿÿ%”@@���������U‰å‹MV‹uS‹] 9Ùs ´&����¼'����‹A‰ò‹ƒÁ9Ùrî[^]Ãv�¼'����U‰åƒìÇD$��@�ÇD$�0@�Ç$�0@�èžÿÿÿ‰ì]Ãÿ%Œ@@���������ÿ%¤@@���������U‰å]ÃU‰å]ÃU‰å]ÃU‰å]Ãÿ%@@���������ÿ%´@@���������ÿ%°@@���������ÿ%¸@@���������ÿ%¼@@���������U‰å]é§ùÿÿÿÿÿÿ@�����ÿÿÿÿ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@@����������¨A��„@��l@����������ÄA��°@��������������������������Ä@��Ð@��Ø@��ä@��ø@��A��A��(A��<A����������HA��TA��`A��pA����������Ä@��Ð@��Ø@��ä@��ø@��A��A��(A��<A����������HA��TA��`A��pA������0�__main����uabort�¯calloc����åcygwin_internal���ødll_crt0__FP11per_process�Wfree��malloc����fpthread_atfork����Årealloc����AddAtomA��¯�FindAtomA�Ü�GetAtomNameA��OGetModuleHandleA���@���@���@���@���@���@���@���@���@��cygwin1.dll�@��@��@��@��KERNEL32.dll����������������������������������������������������ÅH������������€����ÅH����������0��€����ÅH������� ��H���XP��(����������(4���V�S�_�V�E�R�S�I�O�N�_�I�N�F�O�����½ïþ�����������?������������������������†����S�t�r�i�n�g�F�i�l�e�I�n�f�o���b����0�4�0�9�0�4�B�0���8� ��C�o�m�p�a�n�y�N�a�m�e�����P�h�i�l� �H�a�r�v�e�y���V���F�i�l�e�D�e�s�c�r�i�p�t�i�o�n�����E�x�i�f�T�o�o�l� �E�X�E� �T�e�s�t� �F�i�l�e�����2� ��F�i�l�e�V�e�r�s�i�o�n�����1�.�2�.�3�.�4�b�����L���I�n�t�e�r�n�a�l�N�a�m�e���S�k�i�p�p�y� �t�h�e� �w�o�n�d�e�r� �c�o�w���J���L�e�g�a�l�C�o�p�y�r�i�g�h�t���C�o�p�y�r�i�g�h�t� �(�c�)� �2�0�0�8�����2���L�e�g�a�l�T�r�a�d�e�m�a�r�k�s�����n�o�n�e�����8���O�r�i�g�i�n�a�l�F�i�l�e�n�a�m�e���E�X�E�.�e�x�e���L���P�r�o�d�u�c�t�N�a�m�e�����T�h�i�s� �i�s� �n�o�t� �a� �p�r�o�d�u�c�t���6� ��P�r�o�d�u�c�t�V�e�r�s�i�o�n���5�.�6�.�7�.�8�b�����D�����V�a�r�F�i�l�e�I�n�f�o�����$����T�r�a�n�s�l�a�t�i�o�n����� °��������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/EXE.macho�������������������������������������������������������������000755 �000765 �000024 �00000022414 11056301725 017533� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������þíúÎ������������� ������…������8__PAGEZERO�����������������������������������������Œ__TEXT������������������������������������__text����������__TEXT������������À��$�� À�����������€����������__picsymbol_stub__TEXT������������ä�� �� ä�����������€���������$__symbol_stub���__TEXT�����������������������������€��������__picsymbolstub1__TEXT���������������`�������������€������� __cstring�������__TEXT������������d���œ��d���������������������������Œ__DATA������������ �����������������������__data����������__DATA������������ ���� ��������������������������__la_symbol_ptr�__DATA������������ ���,�� ����������������� ����__nl_symbol_ptr�__DATA������������ L�����L���������������������__dyld����������__DATA������������ \�����\�����������������������__common��������__DATA������������ €���<��������������������������������8__LINKEDIT��������0������ ��� ���������������������� /usr/lib/dyld������ ���4���G<é-�G���/usr/lib/libSystem.B.dylib���������� ����!��"0��Ü��� ���P�����������������������������������������������!È���������������������������!Œ���������°������(��À������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|: x8!ÿüT!�48�����”!ÿÀ€z��8š�;c�W{:|¤Ú=`��ak�}i¦N€ à�|¦¿ÿð�”!ÿ BŸ�è¦||x|#x|¾+xH�±<_��“‚ì<_��“¢ð<_��“Âô<_��€B@‚��/Œ��A¾� }‰¦N€!<_��€B<‚��/Œ��A¾� }‰¦N€!H�Í<_��‚�€ ��/€��A¾� }‰¦N€!H��õ<_��‚ü€ ��/€��A¾� }‰¦N€!<��8cT8�@H�e€a�@/ƒ��A¾�H�Q8���<_��€B8��=��}"Kx/‰��Až�d9@��9`��ˆ ��|�t/€��Až�0|X®|�t/€�/@¾�}K9k�}"Kx| X®|�t/€��@žÿØ/Š��Až� 8 �H��€��<_��øÆóx€��/€��Až�„�/€��@žÿøƒãx¤ëxÅóx8Æ�H�YH�}|¦“áÿü�”!ÿ BŸ�è¦<��8cà8�@H��y�@}‰¦N€!€�h8!�`|¦ƒáÿüN€� =`��k \,‹��A†�N€� 8 �N8€��`„°8`�8��D��8`�;8��D��à�=€��€ \| ¦=€��aŒ�N€ =`��k `}i¦N€ |¦¿aÿì�||x”!ÿ |›#x8`�8€�(H�‰8��(|}x8`-��“�“}�H�I¤ëx}�8`-€�h8!�`»aÿì|¦H�|¦¿ÿð�|}x”!ÿ ;À��8`-|œ#xH�9a�@,��a�@A‚�T+��€ �|�è�@¢�,€ �|�à�@¢� € �}>Kx ��)��, �(A¢�H�u€ �9i�,���@‚ÿ¼H��€a�@|dx8`-H�u,��A‚�$ž� , ��A¢�}‰¦ÃóxN€!ÃóxH�€�h8!�`»ÿð|¦N€� |¦“áÿü�BŸ�”!ÿ°è¦H��±=?��)ä)�, ��A‚�  �(��A�,<��€c¨H��a€�X<��8!�P€c¤|¦ƒáÿüH�� €�X8!�Pƒáÿü|¦N€� 8`�N€� |¦BŸ�}h¦=k��|¦‹@}‰¦9k@N€ |¦BŸ�}h¦=k��|¦‹ }‰¦9k N€ |¦BŸ�}h¦=k��|¦‹�}‰¦9k�N€ |¦BŸ�}h¦=k��|¦‹à}‰¦9kàN€ |¦BŸ�}h¦=k��|¦‹À}‰¦9kÀN€ |¦BŸ�}h¦=k��|¦‹ }‰¦9k N€ |¦BŸ�}h¦=k��|¦‹€}‰¦9k€N€ |¦BŸ�}h¦=k��|¦‹`}‰¦9k`N€ |¦BŸ�}h¦=k��|¦…‹}‰¦N€ |¦BŸ�}h¦=k��|¦…‹�ø}‰¦N€ |¦BŸ�}h¦=k��|¦…‹�Ü}‰¦N€ ����__dyld_mod_term_funcs���__dyld_make_delayed_module_initializer_calls����The kernel support for the dynamic linker is not present to run this program. ����������������d�� „��d��˜��8�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���� ��� ������ ���c�������� ��� ˆ���– ��� Œ���³ ��� ���Ù ��� ”���ì ��� ˜�� ��� œ��! ���  ��> ��� ¤��X ��� ¨��y ��� ¬��› ��� °��¿ ��� ´��� ��� ��� ��� ¸���)����������������L��������"�������E�������k�������y�������Ÿ�������Ç��������w�������Î�������à��������ç�������Ö�������í��������_��`��ã���� ��������'��n��¨��£��º������������������������������������������������������������������������������� �������_NXArgc�_NXArgv�___progname�_environ�___keymgr_dwarf2_register_sections�__cthread_init_routine�__mh_execute_header�_atexit�_catch_exception_raise�_catch_exception_raise_state�_catch_exception_raise_state_identity�_clock_alarm_reply�_do_mach_notify_dead_name�_do_mach_notify_no_senders�_do_mach_notify_port_deleted�_do_mach_notify_send_once�_do_seqnos_mach_notify_dead_name�_do_seqnos_mach_notify_no_senders�_do_seqnos_mach_notify_port_deleted�_do_seqnos_mach_notify_send_once�_errno�_exit�_mach_init_routine�_receive_samples�___keymgr_global�__dyld_register_func_for_add_image�__dyld_register_func_for_remove_image�__init_keymgr�__keymgr_get_and_lock_processwide_ptr�__keymgr_set_and_unlock_processwide_ptr�_abort�_calloc�_free�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/ExifTool.jpg����������������������������������������������������������000644 �000765 �000024 �00000061375 12410271125 020335� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿáPExif��II*���� �����ª���� ���º�������Ä��������������Ô�������Ü���(�������1����ä���2����ø���;� ��� ���������˜‚������i‡����4��ê��A witty caption�FUJIFILM��FinePix2400Zoom�H������H������Adobe Photoshop 7.0�2004:02:26 09:36:46�Phil Harvey�Copyright 2004 Phil Harvey���‚����r��"ˆ�������'ˆ����d��������0210����z������Ž��‘�����‘����¢��’ ����ª��’����²��’ ����º��’ ����Â��’����Ê��’������� ’������� ’����Ò��� ����0100 ������� ����d��� ����P���¢����Ú��¢����â��¢�������¢��������£�������£�����������^��d���2001:05:19 18:36:41�2001:05:19 18:36:41���� ���X��d���h��d���È���d�������d���h��d���X��d���í �����í �����������������8������@��(�����������H��������������H������H������ÿà�JFIF�����ÿàJFXX�ÿØÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��<�-"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�Ø÷Xâè~1Š­{<Ö‰%»‹æ8Uòy'þú¨u¿ZhÖýîX|‘#ñ9+އU»Õ.ã¹¹ýùPÒòBޏ±z+•Í+šÝß–EÄG<–œôÝW|›ó‚.mÿ�ð¿øº­q$Ëf̱¼¬|ÁœqŽÝkBÊæ,ãv‘#£6*9µ4>R¹‚ÿ�þ~mÿ�ðÿ�ñtžMï{˜¿Hÿ�Ùªÿ�™ t‘Ñ…SÜU&dy³,÷z½ÓÍ“!Œz`àSC£j3µ°]6åY#mÜÞŸ{ {cé]?€ÞÛQñ¡¹†É"Hci/“‘×=ñž˜ük×'‰´ì®€-ö}ÐI=Q“ýF3î? ÙÇ™jLeÊîŽ =6ïUµ‚ D $¬ŠûÏ<sÿ�×­è´™´˜…¬ào^ã¡úWA¤iify.ÝHÛ7œa<ŸÀg銬¾$Ñ./¾Ìó+[€ZIdlG9ÆYŽƒ×³Xªz]îoR¯3²1d‰[ï(?QPX3Ì1ÿ�ß"«êZîŸc$ŒÚ³[†`’'̘'<T–·¿nµŽæßÊ’)å`ç§åG+Jö3{ØÀø9bÏsqy‚K8Hö?ú¯CñNµoáH.ui#Ê»gî—!BƒéÀ&¼cáç‹?°'º‚V!%ÚêêGUçʽO]ƒFñ.†-¯/³a‹Å&HnÜwÀÏQ] Ë¡ÉY|C3k!5f(7Úe†ÐBöaÉ'Žüþ&¹­Ï©Èå. H¤¹Ý³fÐ@èƒß޽*ýÿ�€­ãÔš{ó-· ¤©Žzäp*AðÊ]TJtéei”sƒåî[òïØúÔF¯+4P“Š,Ge£j–¶/Ë Ñæ%ÄhK('î¸võüý+BÓ­ìôåµ²¢XÎ�'¹Éä÷®Dðý×…ï¯ÒóJkÙcQ&ÞU sƒ¸n ‚1ú×o£\}‡M‰'ŽIºÒ`§ 8È?…rʦ&o•h‘×R8~g(»þgÎËÜÈ#$ÍÀæ´ìnŒB+Y[çwP§§©¹†coÛvÎ:š–µT€�?*ôðôÕUÍ-1ÍÇc¶´øâk8`K¸ÛÉà;Ä #ÐôÖxÇ:–­qöi–Ý ÄXº& œŽ£§é^M=ÔŸÔWUá =YÈÇú¦ýEtV¥M´… ¾d™è÷Ës&ùfvp0 9â£ÇGüÅ0Eqú÷‰u ZKksÆ€c)’r3^ZWgKgÿÙ���ÿè�"SPIFF�����”�� ¸��,��,ÿàòII���HEAPJPGM����������ž?J5�����������€����€?�������������C:\DC97\CTG_0000\AUT_0045.JPG���C:\DC97\CTG_0000\THM_0045.JPG���������€?��Ì@��¨@�P�������P�������X��������X�������� �������X��îC����P�������� ����X��4A����������������������������������������AUT:Full automatic mode���������� ������� ��� ���@�����������������������������������Canon�Canon PowerShot A5��������Firmware Version 01.00����������r½y?§&{?ú?p#?Àò‚?µ?‚o?^ì…?‚o?^ì…?� X��������Pd������� HUSA�����  �������(��� ���H���� �������  ��� ���0€���@���À����������������� �������(P��������)P��Ç�’� ����X������@��� ��� P��������X��������X-������� ������� ���(��� ���H���&���h���0X���n���0���Æ���(Z���Ö���(ä���0�� 00�����D��ÿà�AVI1��������ÿá}http://ns.adobe.com/xap/1.0/��<�?�x�p�a�c�k�e�t� �b�e�g�i�n�=�'þÿ�'� �i�d�=�'�W�5�M�0�M�p�C�e�h�i�H�z�r�e�S�z�N�T�c�z�k�c�9�d�'�?�>� �<�?�a�d�o�b�e�-�x�a�p�-�f�i�l�t�e�r�s� �e�s�c�=�"�C�R�"�?�>� �<�x�:�x�m�p�m�e�t�a� �x�m�l�n�s�:�x�=�'�a�d�o�b�e�:�n�s�:�m�e�t�a�/�'� �x�:�x�m�p�t�k�=�'�I�m�a�g�e�:�:�E�x�i�f�T�o�o�l� �4�.�7�3�'�>� �<�r�d�f�:�R�D�F� �x�m�l�n�s�:�r�d�f�=�'�h�t�t�p�:�/�/�w�w�w�.�w�3�.�o�r�g�/�1�9�9�9�/�0�2�/�2�2�-�r�d�f�-�s�y�n�t�a�x�-�n�s�#�'� �x�m�l�n�s�:�i�X�=�'�h�t�t�p�:�/�/�n�s�.�a�d�o�b�e�.�c�o�m�/�i�X�/�1�.�0�/�'�>� � � �<�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n� �a�b�o�u�t�=�'�u�u�i�d�:�8�0�0�5�6�b�6�8�-�1�0�4�5�-�f�a�9�7�-�3�4�0�1�-�6�f�4�e�d�8�4�c�d�5�3�d�'� � � �x�m�l�n�s�:�d�c�=�'�h�t�t�p�:�/�/�p�u�r�l�.�o�r�g�/�d�c�/�e�l�e�m�e�n�t�s�/�1�.�1�/�'�>� � � �<�d�c�:�c�r�e�a�t�o�r�>� � � � �<�r�d�f�:�S�e�q�>� � � � � �<�r�d�f�:�l�i�>�P�h�i�l� �H�a�r�v�e�y�<�/�r�d�f�:�l�i�>� � � � �<�/�r�d�f�:�S�e�q�>� � � �<�/�d�c�:�c�r�e�a�t�o�r�>� � � �<�d�c�:�d�e�s�c�r�i�p�t�i�o�n�>� � � � �<�r�d�f�:�A�l�t�>� � � � � �<�r�d�f�:�l�i� �x�m�l�:�l�a�n�g�=�"�x�-�d�e�f�a�u�l�t�"�>�U�T�F�-�1�6� �(�b�i�g�-�e�n�d�i�a�n�)� �e�n�c�o�d�e�d� �X�M�P�<�/�r�d�f�:�l�i�>� � � � �<�/�r�d�f�:�A�l�t�>� � � �<�/�d�c�:�d�e�s�c�r�i�p�t�i�o�n�>� � � �<�d�c�:�r�i�g�h�t�s�>� � � � �<�r�d�f�:�A�l�t�>� � � � � �<�r�d�f�:�l�i� �x�m�l�:�l�a�n�g�=�"�x�-�d�e�f�a�u�l�t�"�>�C�o�p�y�r�i�g�h�t� �2�0�0�4� �P�h�i�l� �H�a�r�v�e�y�<�/�r�d�f�:�l�i�>� � � � �<�/�r�d�f�:�A�l�t�>� � � �<�/�d�c�:�r�i�g�h�t�s�>� � � �<�d�c�:�s�u�b�j�e�c�t�>� � � � �<�r�d�f�:�B�a�g�>� � � � � �<�r�d�f�:�l�i�>�E�x�i�f�T�o�o�l�<�/�r�d�f�:�l�i�>� � � � � �<�r�d�f�:�l�i�>�T�e�s�t�<�/�r�d�f�:�l�i�>� � � � � �<�r�d�f�:�l�i�>�X�M�P�<�/�r�d�f�:�l�i�>� � � � �<�/�r�d�f�:�B�a�g�>� � � �<�/�d�c�:�s�u�b�j�e�c�t�>� � � �<�d�c�:�t�i�t�l�e�>� � � � �<�r�d�f�:�A�l�t�>� � � � � �<�r�d�f�:�l�i� �x�m�l�:�l�a�n�g�=�"�x�-�d�e�f�a�u�l�t�"�>�T�e�s�t� �I�P�T�C� �p�i�c�t�u�r�e�<�/�r�d�f�:�l�i�>� � � � �<�/�r�d�f�:�A�l�t�>� � � �<�/�d�c�:�t�i�t�l�e�>� � �<�/�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n�>� � � �<�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n� �a�b�o�u�t�=�'�u�u�i�d�:�8�0�0�5�6�b�6�8�-�1�0�4�5�-�f�a�9�7�-�3�4�0�1�-�6�f�4�e�d�8�4�c�d�5�3�d�'� � � �x�m�l�n�s�:�p�h�o�t�o�s�h�o�p�=�'�h�t�t�p�:�/�/�n�s�.�a�d�o�b�e�.�c�o�m�/�p�h�o�t�o�s�h�o�p�/�1�.�0�/�'�>� � � �<�p�h�o�t�o�s�h�o�p�:�A�u�t�h�o�r�s�P�o�s�i�t�i�o�n�>�M�y� �P�o�s�i�t�i�o�n�<�/�p�h�o�t�o�s�h�o�p�:�A�u�t�h�o�r�s�P�o�s�i�t�i�o�n�>� � � �<�p�h�o�t�o�s�h�o�p�:�C�a�p�t�i�o�n�W�r�i�t�e�r�>�I� �w�r�o�t�e� �i�t�<�/�p�h�o�t�o�s�h�o�p�:�C�a�p�t�i�o�n�W�r�i�t�e�r�>� � � �<�p�h�o�t�o�s�h�o�p�:�C�a�t�e�g�o�r�y�>�1�<�/�p�h�o�t�o�s�h�o�p�:�C�a�t�e�g�o�r�y�>� � � �<�p�h�o�t�o�s�h�o�p�:�C�i�t�y�>�K�i�n�g�s�t�o�n�<�/�p�h�o�t�o�s�h�o�p�:�C�i�t�y�>� � � �<�p�h�o�t�o�s�h�o�p�:�C�o�u�n�t�r�y�>�C�a�n�a�d�a�<�/�p�h�o�t�o�s�h�o�p�:�C�o�u�n�t�r�y�>� � � �<�p�h�o�t�o�s�h�o�p�:�C�r�e�d�i�t�>�M�y� �C�r�e�d�i�t�<�/�p�h�o�t�o�s�h�o�p�:�C�r�e�d�i�t�>� � � �<�p�h�o�t�o�s�h�o�p�:�D�a�t�e�C�r�e�a�t�e�d�>�2�0�0�4�-�0�2�-�2�6�<�/�p�h�o�t�o�s�h�o�p�:�D�a�t�e�C�r�e�a�t�e�d�>� � � �<�p�h�o�t�o�s�h�o�p�:�H�e�a�d�l�i�n�e�>�N�o� �h�e�a�d�l�i�n�e�<�/�p�h�o�t�o�s�h�o�p�:�H�e�a�d�l�i�n�e�>� � � �<�p�h�o�t�o�s�h�o�p�:�I�n�s�t�r�u�c�t�i�o�n�s�>�W�h�a�t� �i�n�s�t�r�u�c�t�i�o�n�s�<�/�p�h�o�t�o�s�h�o�p�:�I�n�s�t�r�u�c�t�i�o�n�s�>� � � �<�p�h�o�t�o�s�h�o�p�:�S�o�u�r�c�e�>�I�&�a�p�o�s�;�m� �t�h�e� �s�o�u�r�c�e�<�/�p�h�o�t�o�s�h�o�p�:�S�o�u�r�c�e�>� � � �<�p�h�o�t�o�s�h�o�p�:�S�t�a�t�e�>�O�n�t�<�/�p�h�o�t�o�s�h�o�p�:�S�t�a�t�e�>� � � �<�p�h�o�t�o�s�h�o�p�:�S�u�p�p�l�e�m�e�n�t�a�l�C�a�t�e�g�o�r�i�e�s�>� � � � �<�r�d�f�:�B�a�g�>� � � � � �<�r�d�f�:�l�i�>�a�m�a�z�i�n�g�<�/�r�d�f�:�l�i�>� � � � � �<�r�d�f�:�l�i�>�i�m�a�g�e�<�/�r�d�f�:�l�i�>� � � � � �<�r�d�f�:�l�i�>�u�t�i�l�i�t�i�e�s�<�/�r�d�f�:�l�i�>� � � � �<�/�r�d�f�:�B�a�g�>� � � �<�/�p�h�o�t�o�s�h�o�p�:�S�u�p�p�l�e�m�e�n�t�a�l�C�a�t�e�g�o�r�i�e�s�>� � � �<�p�h�o�t�o�s�h�o�p�:�T�r�a�n�s�m�i�s�s�i�o�n�R�e�f�e�r�e�n�c�e�>�W�h�a�t� �i�s� �a� �t�r�a�n�s�m�i�s�s�i�o�n� �r�e�f�e�r�e�n�c�e�?�<�/�p�h�o�t�o�s�h�o�p�:�T�r�a�n�s�m�i�s�s�i�o�n�R�e�f�e�r�e�n�c�e�>� � � �<�p�h�o�t�o�s�h�o�p�:�U�r�g�e�n�c�y�>�8�<�/�p�h�o�t�o�s�h�o�p�:�U�r�g�e�n�c�y�>� � �<�/�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n�>� � � �<�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n� �a�b�o�u�t�=�'�u�u�i�d�:�8�0�0�5�6�b�6�8�-�1�0�4�5�-�f�a�9�7�-�3�4�0�1�-�6�f�4�e�d�8�4�c�d�5�3�d�'� � � �x�m�l�n�s�:�s�t�J�o�b�=�'�h�t�t�p�:�/�/�n�s�.�a�d�o�b�e�.�c�o�m�/�x�a�p�/�1�.�0�/�s�T�y�p�e�/�J�o�b�#�'� � � �x�m�l�n�s�:�x�a�p�B�J�=�'�h�t�t�p�:�/�/�n�s�.�a�d�o�b�e�.�c�o�m�/�x�a�p�/�1�.�0�/�b�j�/�'�>� � � �<�x�a�p�B�J�:�J�o�b�R�e�f�>� � � � �<�r�d�f�:�B�a�g�>� � � � � �<�r�d�f�:�l�i� �r�d�f�:�p�a�r�s�e�T�y�p�e�=�'�R�e�s�o�u�r�c�e�'�>� � � � � � �<�s�t�J�o�b�:�n�a�m�e�>�M�y� �J�o�b�<�/�s�t�J�o�b�:�n�a�m�e�>� � � � � �<�/�r�d�f�:�l�i�>� � � � �<�/�r�d�f�:�B�a�g�>� � � �<�/�x�a�p�B�J�:�J�o�b�R�e�f�>� � �<�/�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n�>� � � �<�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n� �a�b�o�u�t�=�'�u�u�i�d�:�8�0�0�5�6�b�6�8�-�1�0�4�5�-�f�a�9�7�-�3�4�0�1�-�6�f�4�e�d�8�4�c�d�5�3�d�'� � � �x�m�l�n�s�:�x�a�p�M�M�=�'�h�t�t�p�:�/�/�n�s�.�a�d�o�b�e�.�c�o�m�/�x�a�p�/�1�.�0�/�m�m�/�'�>� � � �<�x�a�p�M�M�:�D�o�c�u�m�e�n�t�I�D�>�a�d�o�b�e�:�d�o�c�i�d�:�p�h�o�t�o�s�h�o�p�:�4�c�c�7�b�8�5�7�-�6�9�d�0�-�1�1�d�8�-�8�a�c�4�-�b�b�5�9�c�9�2�f�0�d�9�a�<�/�x�a�p�M�M�:�D�o�c�u�m�e�n�t�I�D�>� � �<�/�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n�>� � � �<�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n� �a�b�o�u�t�=�'�u�u�i�d�:�8�0�0�5�6�b�6�8�-�1�0�4�5�-�f�a�9�7�-�3�4�0�1�-�6�f�4�e�d�8�4�c�d�5�3�d�'� � � �x�m�l�n�s�:�x�a�p�R�i�g�h�t�s�=�'�h�t�t�p�:�/�/�n�s�.�a�d�o�b�e�.�c�o�m�/�x�a�p�/�1�.�0�/�r�i�g�h�t�s�/�'�>� � � �<�x�a�p�R�i�g�h�t�s�:�M�a�r�k�e�d�>�F�a�l�s�e�<�/�x�a�p�R�i�g�h�t�s�:�M�a�r�k�e�d�>� � � �<�x�a�p�R�i�g�h�t�s�:�W�e�b�S�t�a�t�e�m�e�n�t�>�h�t�t�p�:�/�/�o�w�l�.�p�h�y�.�q�u�e�e�n�s�u�.�c�a�/�~�p�h�i�l�/�e�x�i�f�t�o�o�l�/�<�/�x�a�p�R�i�g�h�t�s�:�W�e�b�S�t�a�t�e�m�e�n�t�>� � �<�/�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n�>� �<�/�r�d�f�:�R�D�F�>� �<�/�x�:�x�m�p�m�e�t�a�>� �<�?�x�p�a�c�k�e�t� �e�n�d�=�'�w�'�?�>ÿâ@ICC_PROFILE���0ADBE��mntrRGB XYZ Ï��������acspAPPL����none������������������öÖ�����Ó-ADBE����������������������������������������������� cprt���ü���2desc��0���kwtpt��œ���bkpt��°���rTRC��Ä���gTRC��Ô���bTRC��ä���rXYZ��ô���gXYZ�����bXYZ�����text����Copyright 1999 Adobe Systems Incorporated���desc�������Adobe RGB (1998)��������������������������������������������������������������������������������XYZ ������óQ����ÌXYZ ����������������curv�������3��curv�������3��curv�������3��XYZ ������œ��O¥��üXYZ ������4�� ,��•XYZ ������&1��/��¾œÿâ�uFPXR�����œ�/��E�x�t�e�n�s�i�o�n� �L�i�s�t�����9�/��S�c�r�e�e�n� �N�a�i�l�_�b�d�0�1�0�0�6�0�9�7�1�9�a�1�8�0���ÿâ«FPXR��������þÿ����`aVTÁÎ…S�ª�¡ù[���`aVTÁÎ…S�ª�¡ù[0���l�� ������X������`�����l�����Œ����� �����¨�����´�����À�����Ø����� �����°������������� ���S�c�r�e�e�n� �n�a�i�l���H���0�Àoн�`—¡€������@���€TtZSž¾@���€TtZSž¾������D�i�g�i�t�a�����������P�r�e�s�i�z�e�d� �i�m�a�g�e� �f�o�r� �L�C�D� �d�i�s�p�l�a�y�������������/��S�c�r�e�e�n� �N�a�i�l�_�b�d�0�1�0�0�6�0�9�7�1�9�a�1�8�0�����ÿâHFPXR�������þÿ����1�Àoн�`—¡€���1�Àoн�`—¡€0��� ��������@������H������P������X������`������h������p������°����� �����À��������€?�������������A���‘��ÿØÿÛ�„� 1$(($1O89C98O„ZTffTZ„”–°–”ÍàÿÿàÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ '!!'<,-4-,<_C?KK?C_i]jzj]iŒ—¸¸—ŒÜÿÿÿÜÿÿÿÿÿÿÿÿÿÿÿÄ¢���������� ������� ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùú��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÝ��ÿÀ��À "�ÿÚ� ��?�äé)Ô•èŠä�””´”\W IN¤¡ˆ�i¤§RP!ÿÐã1IN¤®Ñ)¤T˜¦�†›RmH� "˜jJi¤ÿÑóÓL"¤5Ÿs¨ÁVÉô³ ;2ÉÃ\ôúãûµÇÖ©^àž¿¥#'èY¦â°[`äÏãZÖ×±L>SÏ¡­HRî ,L"¥Å4Šl�?ÿÒòr)…jr´…j‰¸À¯Š6Ôåi1L‹ŒDE21Y·:J¿)Áý+u§ò©^ÆRÚ¹Hóù­å‹ï®* × Én¬0FEaÝhªÜÆqí[ØÊﱑ¤•ÏÿÓùº—w©f·’#‡¨i4�”Q@�ÍE•è ”´”„3ÿÔäi)i+¸�„¤§Si0…6I@„i :’0ÿÕâ)¦ŸM5Ô&H†Ó IYzÈUÙݨ¹vW%©¨ê’)³U­´iw0­ë<q]m½·N+ž¤Ò8ëLÚ7#ÑÁÒ²¿sË.t÷‰Â‘ŒŒÕ„ë^˪é qnHûÀq^]qa ;pr+¥Jç- ßGÐó§=OGFÎë©ÿÖùÕÔv¨Á äV×ö|¬¼)ëRÇ¢LP¹REîfæÍaNRè6ËW# '=³]&3\Ñb+BºfÌG°È­oЕ±‰MY›»hÙV6Rì¦ÄØìU)Uä!kE—²œ4®FhLqÜÏÿ×ó;f [1ØÌã„cøW¢x@–ªÞ` ­i­Ñ±8¸ê;o¡åV©ÏRO{³TRVGŽÞÆ-€ó~\Ö|RÃ6v6qY~ ÔÍÝÁnÝ«ž AȯU;«­Žªpä„Q;™Þìí%·V#"¹ÛÍc8ö4[êóÇÁù‡½mC©ÛL9;O¡¬!;ztšÕ(Üi«4°¼g 1QW \Z«Œ‘\íΑԡǵnaNvô15”OÿÐäé -&+¼‚’–’�%-% � JZ `ÿÑã©)Ô•Ø"�Jm>’� Å&)ø¤ÅHذQ“\¼gí9­}ZR‘qÞ¨hûcÛÖ°«+#:ìÒ íCâGÿÒåìíÀ½nƒ5ƒit¬G\WUkõùy¯"¬ÅUXú <RB¡4_† GJÇ>RÒ3î=…o õ©Œã©ÍÆæ{Õ‡5“è[Üæ×K·‰@Ø8ª7q‚1ŠéfpÕ‹t£i«çmž¤*QŠØ¶y¾»§*©ušã-¥h&Véƒ^Ÿª.ao¥yåʇnœšõ(»ÄŠCÂÅG–f˜ß‰ÿÓàÂS¶U •ìMbØ‘`f]É]¯€¼<f“íO÷Pàzå´}&mNìGÐWÒ–ztvЬQŒ*Ž*qä£'ÜãÌ'¬cÛQ-d‡O«)ù8¯/øƒ­, t8cÉúW©j÷‰gk$Íü šùG]Ô佺y\òƹ0Ðç©ve°ÖR~…ÉÙ2&öF#6Nj*y¦õ˜4‰H,ÿÔùîšiÆšh Ên ù¢ÆC[0jËÃ|§ô®dÒV)õFȨ¾„»E-%wØ�¤¢ŠÀÿÕäh¥¢»@€’ŠJAp))ÔR�6Šu&)`ÿÖã±E: ¸}‘±ö®–&HIb,˜ qƒYšd1´\Žž´¾a}:ßß5»¾ôŒâ¼ú³¼¥äìrÎZ7æÏB­i«M1Wåÿ� *Gs`Ì"uÆ{ŠßÓÃXJýÊÃŒÕhôû=â@~eªw¯$‡d\{‘ÅoËf½-Ë~„Á¥+¦[ŠŠm-e¡éªÈã5’Û倮F]BâÆ Â@z’0kR»,4œƒÔ åV±¤ ®šêÍùš1›i4ú#ÿ×–y"9Ãô¬Ù% ¦² µ¶#÷S·NŒ1UâHœ!W‡gs{ót¶—>ÉI´·º*ëŒ×jCܨ÷º]v_ܶ}+7Âv¦IÚB¼(ëï]4~…= râõ‘5Ýæv¬¸ræGÚ+[PŸbàu®£áÿ�†Mõמÿ�r"ÔÖÐ܉˒“ksžBÝ÷¼4,mޏ’AÎ{ îL|Uï/Ëø³Y]6ÁåÏÍÑEy¦ç6Ç^Iw4Z!6ÿÐÏøâ’Qmá3Ÿ­x£ÒÔ¯âvv9$“Y¦°ÁÖ’óÔèŒRI êÉDf˜iôÃ@ÙBi´êJ—°0¸ú‡µ è$š‹¬{áXòFѱVpA¯ þ :~ ¤g;PkÄüD¸ÔîGý4oç\ôëӜ绸4šõÔÇ Nš«ˆ”wrWû…t݉oßKÈÿÑå)(¢»‚ä0Š(¤� (¢�%R�ÿÒäh¢Šë�QIC‹Tïÿ�Ô7Ò­Ô7 ¾6¢¥ƒÌ[ÖžQê­ší´¹29é^qn›eÁí^ƒ¢œŒñk+/™x•£=¼,¹œ},c‚zŸÿÓ²Ð}sÖÉç\9µ¯5R†H"¨h÷Ö¿6[W ;?!S‹åzI/‰+u3uW>âݯ›.ÓéVÿ�³#’<? ñŒÕÂIACÎk«U?R©ËeæDô©+·åcE$ö9-GIDDDÜ6ôBd”B¨^rrI®ŽòLt®7Q»ÛžkOkÌgN7g³·Â¬tâ*0ntù/nvàu>•ÑéÖñÙÀc^qÎiÞ´q“·ñ—éLÔ¦ÞÂ5í×Ú§¢ŠB¤¯WÐó'EÚSocjÒqÃ[ù™ÿÔãtë µ+ÄŠ1’Ǿ¦Ñô˜ì-#Ýûšâ~xkìЩSßw>•ê® \µQí©œß4›* WaŠùcâO‰–þïlgåQ^×ñ ăN²ØŒ¿A_#\ÌdrMZw¨Ÿc« &Å' žåf¨Hj#]¢†4ÓM8ÓM&�¬ ŸÿÕùìÒRÓh`ì1Bü @é~ûÖ¼‹ÆÑyzåÚúHk#OÖo¬K}šy"Ý×cœ}*­ÝÜ×2´²±fc’M|ö|Ó‡·÷ÿ�]a¨ª®ª‚SjÍÛQrër›v=NÒÒW® ÌŠ))�ÿÖä©(¢»�€ J(¤�E”„Ø Z))iÏÿ×ä)¬@Rj¼×°D~g±nõ‚&J÷÷­˜žÍ’=ÚFsÜ)¹8ï]µ³+bñ‘Ö¸Ùác!BœñÖ¶l®¹°¯? 5QÔ—´¿‘Û…žŽÄÂͯ3Im¢,C1ºUÑbà~é”ã¦x¦‰BpH>•xÁPí’ǰ¬}¢Ù£;%æv¬%G§sxV’‹Š([¬Ö÷Pút®È\Éåå“ {m3¦µWñK `I5’nèÏW© ¸+5°ÙÿÐÁÔ/qžõˈÍÜûq‘Þ“Q½ËX6ºÅÌ…#çW‘EY_±Û… ¥sÛÅ>iYu<üUgucÐæ»ŵ}0+kÀþþӼ̿qFæ÷ö®L¹:ÂD8v îkë_h©¦X¤#õcêj œa)ufµcgö.¢“ŒWÙG%ï¯sx�AupBò9ÀPIü*zñߊ~%ò ±·$ßÒ¹ùRFª7’@#Æ<qâ&Ô¯¤“œÀöÁšY ±cPë¥X¤h&#ÿÑðCL4ãQšÒÀ-Á! 6–šj÷)(¦ÔØ�ÑšCR0ÿÒå))Ô•Ú�Ú)Ô”˜ÀÅ%-#RRÑH�w?ÿÓä)®êƒ$àVmö«(ù›Ò¹K‹¹&9sšé‰!³¥¹ÖâNn5s©O1äàz ϧRQ¾å¡¹ÆgšÝÐBµÈCüB±qš·cp ¸ŽCÑXX×_»—¡¬µVîmCø‘õ3Œ¬Ó;KØU%TöÍsðÆ-î Lxê>•Ò]È%¼Ü§ ¨ÅWÕìÕã8eé^%)][ȈÞ-½xÛ^ÌÑÚQ‘ÿÔã-‰•øû«]N™oæ>ò8‡alB"w=k°v(+È«¡Gwó=ŠNúŽ1²{æIò¦9=¢[¨ƒÜW]o�AÏZ§¨X ‘´TÅöv*kK‹sÊ|Gio"Hˆ98â¸zõ-_Jƒ&98#œ×—Í{x`ß™|›Œ'¤¾Ec"“BfºÍÆúÆ–@‚á¶­ÊþUÊb“×Rœfµ59a;2ÿÕ—Møå(»µRyùãô5äÞ!ÖΡrò–ÎâOç\Æ*2µ£(Ô×k¬WM"É4ÃL²1N5‹)înJz 5§ša¨¶ã¶…i¦œi†¥Üú‡CÿÖùâ’–šhl�”†–ši�ìTb–’»ÁbŠq¢�ÿ×å1IŠ}%v\ö¯©ìýÚ{Ö½õÏ‘ ~ý«s¸’NI¥¸$ R#Îi1KF 1ˆ‘§RâàÿÐðŒÒžy¤Æ)ßÖ»�À Ýô±Ç¡­ÿ�0\N0~Uãñ®L^‡¥[mQ^F*Ÿ,ÛèišÑ¦|ÐKäg†ìèl¨À&º;XÂ&þþõ›d¡yÍlrW¼—¸$zODˆ›Õ"DÜÞÕuUzVY`�¹>‚Ÿyu»I!Æy¡Ž(DÍŸÿÑ«¯„fùúבj‹ÎBvëõ®“[ñHº'ÉÎOVÿ� 㚸°ÜþGf“„5:ñvq9±5¥eÐh¤4êF®ÀG0†L"¤n”Ã@ Œ¤4Ƨ‘YÈrZ@˜ÿÒðQš”ÔF´w¸„4Ó Hj3R&04”RR°0) -4Ð!ÿÓåé1KF+¼)qE.)��˜¢—bÅk—^dÁTð£õ¬J’c—5<Ò‹º-–â{ŸÿÔð±Í!iÕØZ01J9§Rc5,:€‚IV¬âó%ñÍ#:ÒåƒeI^iÚm®øšë ~UⲬ™I®¦Â#+ì>æ¼Jòæ›f3º=z1åŠ5ÿÕ¹ilì9�t­e^§J’k¸íã¸é\~¯¯%²îw�~uâ^Ȩ®fzÏVLÝ“;3<p¡f<W‹ø³Äo“ËBv)üë#U×®õ†;SÓֱȭðp稯ÐõpÔ8zœø‰rÁÛ©ÃZ¯<¼G¥ @5nÌ„šÆ”R1â˜ÿÖðv¦·¦˜ÕÖ3žÂƈúSZ™œ*%±L¨‚,2œ Y‚㊲¢‰ˆ®y'qËs]ÁM0ÓÍ2“ƒ ÿ×ùØÒS©´Áˆ4ÃN&ši0`3Ù©h WxN˜§ŠL@ÿÐæª½Ô›"fôkKPþ•ØÁcÎ[“IIžhÍ(/uz>èg-Ç'¨µ 9¤—o¥PÉ™Í)¦–æ GÿÑð¶ ×C¦[mQ‘Ö°má2?vö6n¸9뎴cghXæÆÔ¼­Ø¼$o;8>[÷4bP�À5ÐÚ°EÈSÁëTàRXT ½8ÀˌۥyÎá¢grµÁÞÅ Bûj³7a^Ks)žS#œç¥vž"¹)Þ›¸ü+‰í^†šm·ÐèÀFÐo¹çã&Ò·s\½ÿ�@Í0Rž(Ú3ÿÒðÁšku§Š½vÎ1i¬x©¨œÑaˆi ÒR�°¯a ïQÓŽi´š GÿÓùð6*yj±©pBƒZÏt´·©½‚𹦑ª:eÜBLÍ8še&® Ø H ¢œw¥–ì)ÑÝ÷©ÍYßq ÿÔæ)jŸÛ­ó1sõ«jÀŒŠï”^ÌÌvcÅ:›N€�*Ž ûmØûUêÍÕ6ÍRÁì 9n´ Óœ|Ô˜§Aû¨Í°’ÔÿÕð±Í.ÚŒ/¥H+¹ ç75xML~•{Jµ2I¿·j‰;#\¹i¿1¥vm†‡5DnéÚz�éà€"á‡Ó4ûKHÈ~5¸ªò+Ä©7)>æ-¶Ï^í-ˆ-㌠ãò©œ+.IÉÒó…³…ý+jU¬'±-ŸÿÖòÿ�]ºØ:.Zç{Ô·ry“;ú’j ñW„V£jjЊò%Þ¤½Læï6Àš)(ÍXˆ)éMBô¦�€vj5-DÔj! ÿ×ð#LÝL•¸ã­F¯»ë]f2šR9Í#Ò&4˜§¬nOJ×·²UÁ<ÖÇ%zÖVLÌê£Jîìφɟž‚¦¹„"qÚµ‹�:V=ôœTWª›Q]ËYT©4®úSzé‰u! 8ÑÜx~ÝS#®+™Òo7¨ùMu÷zÊxÉ8®ëݲç›'f6ÿÐùÊL«{fãN‘‹1'©¦R`$"u¹`»xëšSrǵW¤©°Ê¸‘râeb6‚£ŠôÍU{8Šöü«ÏunG–Ò¶rƒ9ãµz&—n°[ª/jÓ­!áÚr*Z¢¥fÍQJ)©wWPÚ0*ÇÿÑçj… ÒŸº¢™ð„ûWc™v<ÒN´‚œýiE/—½ žàÖ¢€iÝ):u¥†Ùæ9è+Da^¯$H7¥OžI[Âglë¶Òí®�ªv6WjJì, ã5çãªÞVìpͶÎì++÷= pQVGÿÒ¯iÉÁ毃¹6‘L·8ùi$ùXc®kÂf‡½ ¬D£qãÌx‚çe»‘Æk¥¸“jšó¯Üœ¬y÷5t£Í$»³l,oR>¦¢ß‘­)Éœ©¤“4„׸; ÄÏ4RMÍ ÏÿÓðcOÏëOÍuŒç•§“P³qH‡b©íZQžÜÓ0jUùX0í^|Ûm“7ïµæw$”K„/ènªŒæŸæ8¬æ¹ z<ÂÕ‹+¡Q"çÿÔñÖ|ŠÅ»éWQ›½R»;°+Š;Ž;£²OA=ŠqHPäU£zçƒT¥®‹±þÍ_sKŽdRzÓ<±ëNÍ(§ÎÉ#Ù.æ©X‰éÍ5ãeê1V¡ã|©Á¤¸™¤Ácš´È[£žQK©¼–ŒÿÙÿâ�`MPF�II*������°����0100°�������°� ���2���������€-ñZ���������@©Û�XxZ�����ÿÿÿÿÿÿÿØÿãŽMeta��II*�����PÃ����37��QÃ�������RÃ�������YÃ��������ZÃ�������[Ã����2���\Ã� ���Î���]Ã�������^à ����Ø���_Ã�������`Ã����ä���aÃ�p��ê���bà ����Z��cÃ��������dÃ� ���f��eÃ����0100����Version 9������������� � � ���������������������������������������������������������������*ó“��������������������������������������������������������������������������������������������������������E !� E !� Š.†@ 罟‹¿ F÷ÿA�D�B�EÒ*À­¢´»��)�ÛŽU÷,�ß������������2����ÿÿÿÿÿÿ����Ò �t,�…Òÿ>�Ìü~Qÿæÿ!¸"R �,�>�~æÿžÿ¸"“�,�ÿ>�11�~¸�æÿ������������00000000000000000000000000000000ÿå RMETA�MM������ �ASCII�����¬Sign type�Location�Lit�Condition�Azimuth������������������������������������������������������������������������������������������������������������������������������������¬Information�Roundabout�No�Good�E�������������������������������������������������������������������������������������������������������������������������������������������� �����������������������������ÿæ�~EPPIM�II*�����¥Ä�.����������PrintIM�0250������������������€�������������������������������������������������ÿæ�NITF��B�������ÿç!Qualcomm Camera Attributes�aec_current_sensor_luma���� af_position������aec_current_exp_index��4�awb_sample_decision������ asf5_enable����asf5_filter_mode�������asf5_exposure_index_1��´��asf5_exposure_index_2���asf5_max_exposure_index��"ÿéMedia Jukebox��<MJMD> <Tool_Name>Media Center</Tool_Name> <Tool_Version>19.0.67</Tool_Version> <People>Santa</People> <Places>Jamaica</Places> <Date>41518.8418865740750334</Date> <Album>2013-09-01</Album> <Name>Glass home at night</Name> </MJMD> �ÿê�HUNICODE��©� �P�h�o�t�o�S�t�u�d�i�o� �U�n�i�c�o�d�e� �c�o�m�m�e�n�t� � ÿë�sHDR_RI ver=11 ln0=0.122262, ln1=2.634655, s2n=2.269635e+03 alp=1.000000 bet=1.000000 cor=0 ~�<dummy ratio image>ÿìòAgfa Gevaert � 721 [picture info] TimeDate=915117440 Shutter=6460 Flash=0 Resolution=5 Protect=0 ContTake=0 ImageSize=1280-960 ColorMode=1 FNumber=F11 Zoom=2.1 Macro=0 LightS=0 ExpBias=+2.0 [camera info] Type=SR84 Serial#=#00000001 Version=v84-71 ID=AGFA DIGITAL CAMERA [diag info] PicLen=561039 ThmLen=3802 Q=96 R=293 B=332 s0=1e8,0,11b0,6f72,15cf,4225,4225,1050000,a1e0004,0,2f0030d,2f102c5,2880090,0,0 T0=11b15600,1290000,e00c0f,2,0,0 [user]���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� [end] ����[file info]� �����������6‹•€�Ú�ÿAGF00004JPG ��<�%�€L�`<‘���ÿÿÿÿ�����À�������è������°��or��Ï��B%��B%�� �����ð ñň���������±V�)���à �����������ü(™i~®ÐüÁ']²fVùpHã“éÇo¯É7ð>¿áÃ>³¥ ¸-¾ÜÈ‘â<•s×9ÿ� ÒOhôoÓêætù õZ»üý/ärö)/ˆ­£ž¬-u+]·!§ÿì�MDucky�����T��8����C�o�p�y�r�i�g�h�t� �2�0�0�4� �P�h�i�l� �H�a�r�v�e�y��ÿí¤Photoshop 3.0�8BIM����V���x�A witty captionz� I wrote iti� No headline(�What instructionsP� Phil HarveyU� My Positionn� My Credit�Test IPTC picture7�20040226Z�Kingston_�Onte�Canadag� What is a transmission reference�1�amazing�image� utilitiest�Copyright 2004 Phil Harvey �8s�I'm the source� jambalaya8BIM%�����­p±©_—ˆ¬™_¦GÚ8BIMé�����x����H�H����Þ@ÿîÿîRg(ü����H�H����Ø(����d�������ÿ��������������h������ ��������������������������8BIMí������H�����H����8BIM&���������������?€��8BIM ��������8BIM��������8BIMó����� ���������8BIM �������8BIM �����)http://owl.phy.queensu.ca/~phil/exiftool/�8BIM'����� ��������8BIMõ�����H�/ff��lff�������/ff��¡™š�������2����Z���������5����-��������8BIMø�����p��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè��8BIM����������@��@����8BIM���������8BIM����=��������������P���d����I�P�T�C���������������������������������d���P��������������������������������������������null������boundsObjc���������Rct1�������Top long��������Leftlong��������Btomlong���P����Rghtlong���d���slicesVlLs���Objc��������slice������sliceIDlong�������groupIDlong�������originenum��� ESliceOrigin��� autoGenerated����Typeenum��� ESliceType����Img ���boundsObjc���������Rct1�������Top long��������Leftlong��������Btomlong���P����Rghtlong���d���urlTEXT���������nullTEXT���������MsgeTEXT��������altTagTEXT��������cellTextIsHTMLbool���cellTextTEXT�������� horzAlignenum���ESliceHorzAlign���default��� vertAlignenum���ESliceVertAlign���default��� bgColorTypeenum���ESliceBGColorType����None��� topOutsetlong������� leftOutsetlong������� bottomOutsetlong������� rightOutsetlong�����8BIM��������8BIM!�����U�������A�d�o�b�e� �P�h�o�t�o�s�h�o�p����A�d�o�b�e� �P�h�o�t�o�s�h�o�p� �7�.�0����8BIM����������ÿí� Adobe_CM�ÿî�Adobe�d����ÿï�Q 70ÿþ� a commentÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙAXS!������IPTC�� ��U,%SCC��$��V5����p7�20051223� object name �2�supp cat(�special instructionsP�bylineU� byline titleZ�citye� country nameg�otri�headlinen�credits�sourcet� copy freelyx�ExifTool AFCP testz�caption writer_�state� jambalaya$$�����������������H������������'��������'����'��'��������'��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������AXS!��U�������·�CP_2����¡²ÃÔ�����������#(����""��_í��S��wÔ�Pê������������:¡²ÃÔCANON OPTIONAL DATA������œÿÿ�ô��”��r���d��������������������à������������������������������������� � �����ÿÿ��������������������������������ÿ��ÿ��������ÿ��ÿ������������������������������à������������������������������������� � �����ÿÿ��������������������������������ÿ��ÿ��������ÿ��ÿ���������������d�������� � ������ÿ�ÿ���������������������������������ÿ���ÿ������� � ������ÿ�ÿ���������������������������������ÿ���ÿ������� � ������ÿ�ÿ���������������������������������ÿ���ÿ������� � ������ÿ�ÿ���������������������������������ÿ���ÿ������� � ������ÿ�ÿ���������������������������������ÿ���ÿ����������������������������������������������������������������`����������ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�ÿ�CANON OPTIONAL DATA���œ��������������������������������������ÿÙÝ����Þ����Ø����Ù���¶Ú���jÛ���zÜ���0���?cbipcbbl~þ0MIE����~�Meta~�Document~( Copyright© 2006 Phil Harvey~���~���~��zmie~�����Z��� ���SoundShot_000<dummy wav file>������SoundShot_Meta_Info���������� ���SoundShot_000SEFHe���������]���%������8���8���$���SEFTQDIOe������kb��{b�����QDIOBS�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/ExifTool.tif����������������������������������������������������������000644 �000765 �000024 �00000011400 10341152741 020322� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������MM�*�����þ���������������� �������x��������������������������������0������6������è��������������x������������N������V�������(�������1������^2������p=�������ƒ»����G��„‡s��� H�� �������The picture caption�Canon�Canon EOS DIGITAL REBEL������ ����� GraphicConverter��2004:02:20 08:07:49����x�The picture captionz� I wrote it(�no instructionsP�I'm the authorU�On topn� Phil Harveys� My camera�This is the title7�20040220Z�Kingston_�Ontarioe�Canadag� no reference�exiftool�test�picturet�Copyright noticei�headline���� HLino��mntrRGB XYZ Î�� ��1��acspMSFT����IEC sRGB��������������öÖ�����Ó-HP �����������������������������������������������cprt��P���3desc��„���lwtpt��ð���bkpt�����rXYZ�����gXYZ��,���bXYZ��@���dmnd��T���pdmdd��Ä���ˆvued��L���†view��Ô���$lumi��ø���meas�� ���$tech��0��� rTRC��<�� gTRC��<�� bTRC��<�� text����Copyright (c) 1998 Hewlett-Packard Company��desc�������sRGB IEC61966-2.1�����������sRGB IEC61966-2.1��������������������������������������������������XYZ ������óQ����ÌXYZ ����������������XYZ ������o¢��8õ��XYZ ������b™��·…��ÚXYZ ������$ ��„��¶Ïdesc�������IEC http://www.iec.ch�����������IEC http://www.iec.ch����������������������������������������������desc�������.IEC 61966-2.1 Default RGB colour space - sRGB�����������.IEC 61966-2.1 Default RGB colour space - sRGB����������������������desc�������,Reference Viewing Condition in IEC61966-2.1�����������,Reference Viewing Condition in IEC61966-2.1��������������������������view�����¤þ�_.�Ï�íÌ� �\ž���XYZ �����L V�P���Wçmeas����������������������������sig ����CRT curv����������� �����#�(�-�2�7�;�@�E�J�O�T�Y�^�c�h�m�r�w�|��†�‹��•�š�Ÿ�¤�©�®�²�·�¼�Á�Æ�Ë�Ð�Õ�Û�à�å�ë�ð�ö�û %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ� !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<'<e<¤<ã="=a=¡=à> >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O�OIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°�°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ€�@�(„AáPhd& ‡Db8|V% �@ã (Üv5ŽH#Ò$Ž7”E%1iT¶Y/•ɤS9,Òe5Ž@€©äf{;ŸPh9ý36¤N&ôºM2•M¨SêTꥭW¬VkUºåv½_°XlV;%–Íg´ZmV»e¶Ýo¸\nW;¥Öíw¼^oW»åöý´Ñ¨”, BÀbhøl7Ãã²9 –W)—ÉærÙ¬Æo=b´Z=&—M§ÔjuZ½f·]¯ØlvW­smCÙÜ6¹ý¾ï}½ào8[þ‰Çãrx¼¹ÕN£U§ò9œ®—7¡×çôûSþww±Þìø<]ÿ'‡Ëãóz}¿?·Õîö{þ_§Ãíóûý¿×÷òÿ¿ý�À A,ÁPlÁpŒ Bœ- ä5 ÃpÌ9ÃÑ ;Ä$EÅ<UE‘L[ÅÑŒaÅñ¬eF‘¼uÇ‘Ä}Çñì!ÈR,ƒ#È’D$É’\%Jl£º®TŸ)K¼µ)ˑԪåËrÌ»0Ì“ÌýËììË1M“\Ý3Íê„ÒàÎ3¬á;ͳį9¸S´ó?ÏÔ õOŒ¥@PtECÄô+oFQ4…HÒMÏRTÍ+MRtí9OÓu =QTMRÕ%USÕuMYWÕÕ[YÖ¥eZ×½u[W•Í{]×Ö a×ö-…cX–=•dÙ–EeÙöm¡iÚV­£kÚ–Å­lۖݽm\íÃoÜW-ÉsÜwMÍu]]ÝvÞeåwÞwé{Þ×Íë}ßåõ~àþ`˜ àØN…àøn‡a˜~%ˆâ˜†-‰âø®1ãXî3ã™=ä™M‘e.S“åYnY—åy_K±™†]™Pù£5›g™Åù2¹í 0RˆÈÛz;¡i™öo§éº†¨êšž­©k®³«ëZ¾ZS¹°kÔîÄ¡hΦԡì»nÉ·ë{ŽÝ¹nžíºï¦õ»ï{Îù¿Å»>Ù¿p›ìѵ¸œ Å:<Fׯp¼‡ÈòœŸ-És¯3Ëó\ï9Ïó}=ÑtMÒõ'UÓõ}OY×õÝ[Ùö§eÚ÷¿uÛwÏ{Ý÷ÞÏðN·‡ßã^/…äy~oçyž¥èúž‡­éúþ¯±íû^ï³ïûŸ½ðüŸÍñ}/Óóý_oÙ÷ýÝù~Ÿíúÿ§õûÿÏøÿßô®å@· ,€ËÀxàr½€°MǸ+ ´ƒn ÁØ5LT„0xΛ’ß¡1m…¦BØ] á„#ƒðÎCHI á´9†°îCõ œ@‡¦j–xWKG‰.&DØájd€� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/ExtendedXMP.jpg�������������������������������������������������������000644 �000765 �000024 �00000002544 11077655626 020746� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá�®http://ns.adobe.com/xmp/extension/�04B9E48040A30A6308713BD1E4223B41�� ��©in</pdf:Producer> <pdf:Title>PDF Title</pdf:Title> </rdf:Description> </rdf:RDF> </x:xmpmeta> ÿá¿http://ns.adobe.com/xap/1.0/�<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 7.50'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:xmpNote='http://ns.adobe.com/xmp/note/'> <xmpNote:HasExtendedXMP>04B9E48040A30A6308713BD1E4223B41</xmpNote:HasExtendedXMP> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>ÿáöhttp://ns.adobe.com/xmp/extension/�04B9E48040A30A6308713BD1E4223B41�� ����<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 7.50'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:pdf='http://ns.adobe.com/pdf/1.3/'> <pdf:Author>PhilToo</pdf:Author> <pdf:CreationDate>2008-10-20T19:54:15</pdf:CreationDate> <pdf:Creator>Guess Who</pdf:Creator> <pdf:ModDate>2008-10-20T19:54:15</pdf:ModDate> <pdf:Producer>Just ExifTool agaÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/FLAC.flac�������������������������������������������������������������000644 �000765 �000024 �00000000432 10526150652 017430� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������fLaC���"��ÿÿÿ���ôp����ÔŒÙ�²é€ ˜ìøB~„��ì ���reference libFLAC 1.1.2 20050205��� ���REPLAYGAIN_TRACK_PEAK=0.00000000"���REPLAYGAIN_TRACK_GAIN=-24601.00 dB ���REPLAYGAIN_ALBUM_PEAK=0.00000000"���REPLAYGAIN_ALBUM_GAIN=-24601.00 dB���TITLE=ExifTool test���COPYRIGHT=Phil Harvey��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/FLAC.ogg��������������������������������������������������������������000644 �000765 �000024 �00000000227 10526157536 017311� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������OggS���������X{ØD����úÔæ¸3FLAC��fLaC���"��������ôp��������������������OggS����������X{ØD���A’Ø,��( ���reference libFLAC 1.1.2 20050205�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Flash.flv�������������������������������������������������������������000644 �000765 �000024 �00000002516 10633543210 017642� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������FLV��� �����‹�������� onMetaData���� hasKeyframes� cuePoints �������name�Cue1�time����������type�event�� ����name�Cue2�time�?Ô¼j~ùÛ#� parameters����param1�value1�param2�value2�� �type� navigation�� � audiodatarate�@Pr:×Î�hasVideo�stereo�� canSeekToEnd� framerate�@4�������audiosamplerate�@å|������ videocodecid�@�������datasize�AÓÐ����� lasttimestamp�@Oß;dZ�audiosamplesize�@0������� audiosize�@Ù®À�����hasAudio� audiodelay�?£÷ÎÙ‡+� videosize�AyÀ����� metadatadate Bq2[ZˆÙÿ�metadatacreator�@inlet media FLVTool2 v1.0.6 - http://www.inlet-media.de/flvtool2�test�this�lastkeyframetimestamp�@Oß;dZ�height�@n�������filesize�AéX����� hasMetadata� keyframes�times ����?£÷ÎÙ‡+�?×;dZ¬�?ýl‹C•�@Oß;dZ� filepositions ����@–Ü������@ßè€�����A~À�����A,������ � audiocodecid�@�������� videodatarate�@z*ŠQ¶ ñ�duration�@¶E¡ÊÀƒ� hasCuePoints�width�@t�������� ��–��?��'����� onCuePoint����name�Cue1�time����������type�event�� ���J��i�������&ÿã À�94 X<c¢}ŠQÈLߦS}»8ÛDô"d(À@À«¯Ò„e{N0Qußè@˜@¦|¢ç)¨�9G|àÿþ´x`¢ÆÿwôƒêÖ0[ÛnEM•§õðd���t ��Ò�������xF ?nÒsén.Η͖ÅûŒÿÿð‡/Ccÿ3'ÿÐ×ÿüHy¿7Ð>3ɤƒfªÙ$ãÞßûu¬z®”NB)Ä/³*ÎÐÃêñw¶ðõS£=®ç_'ŸŠ,Ñf3Eùz3§ÒŠ‘¥¹T±Asßãþ¨Þ4È ˜ÜêàêK, À·ê{qELA?]éÙqO®h¸ÔÐÕÕµè¢s³8- ±,þ¯~/Ë 1n²ÃŠ 2^,³›€î¸l,@)Yp¡l0[�����Ý����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Flash.swf�������������������������������������������������������������000644 �000765 �000024 �00000000600 11100157101 017630� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������FWS€��X�}�ô�� �g��<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 7.50'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:pdf='http://ns.adobe.com/pdf/1.3/'> <pdf:Author>Phil</pdf:Author> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>��������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/FlashPix.ppt����������������������������������������������������������000644 �000765 �000024 �00000023000 10563122613 020330� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÐÏࡱá����������������>��þÿ ������������������������� ������þÿÿÿ��������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿ��������������������� ��� ��� ���þÿÿÿþÿÿÿ���������þÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�R����������������������������������������������������������������ÿÿÿÿÿÿÿÿ���d›Oφê�ª�¹)è������������€è T=LÇ ���€������P�o�w�e�r�P�o�i�n�t� �D�o�c�u�m�e�n�t���������������������������(�������ÿÿÿÿ����������������������������������������������S�u�m�m�a�r�y�I�n�f�o�r�m�a�t�i�o�n���������������������������(����ÿÿÿÿÿÿÿÿ����������������������������������������l�������D�o�c�u�m�e�n�t�S�u�m�m�a�r�y�I�n�f�o�r�m�a�t�i�o�n�����������8�ÿÿÿÿÿÿÿÿÿÿÿÿ���������������������������������������¤�������èÄ���é(���€��à��à��€����� ������������������ ”����� �������×$�����Ó��������º���s�u�b�t�i�t�l�e��×&�����Ó��������º���s�u�b�t�i�t�l�e�2��×&�����Ó��������º���s�u�b�t�i�t�l�e�3��ò��/�È ���0�Ò��������ÕL�����·D���T�i�m�e�s���}�Àº�0Ò���}�Ðñ~�à~�àÿ¿Üÿ¿�ÙN�`ÀªNœëÿ¿�ÙN�`����¤ ���€�`���ÿÿÿÿ��¥ ������.��������© ������� ��@�£n����ÿý?���" ��d�������d���������@�������ÿÿï�����ÿÿÿÿÿÿ���������  �������@@�������``�������€€����� t�����ðl�����ð �������� ������������������c� ð$�����ƒ���¿��À��ÿ����@�ñ���������÷���ð�����ó�����������������€�����Ð�����������ºuì�Êš;2NÍÉ�Êš;��úg�����þ�������ý4���Z���d���Z���d������� Ùÿ¿�`Nt„T���� Ùÿ¿˜ÿÿÿðûÿÿ���p�û�������p��p�û������@ ���<�����ý4���!���d���!���d���² ���pÙÿ¿����g���Üÿ¿���������Ù8�<�����ý4���d���d���d���d���² ���pÙÿ¿����g���Üÿ¿���������Ù8�ˆö����Š~�����º���_�_�_�P�P�T�9���‹`����ä�����Ó���������������ä�����Ó���������������ä�����Ó���������������Šh�����º���_�_�_�P�P�T�2�0�0�1���‹D����ˆ<�����‰4���������������X��������������Ü����������€à?�Ù �����Ú�����%��ðõ�����ó����������������������Ÿ��������¨���Title�Ÿ��������¨���Subtitle Subtitle2 subtitle3�ò�����ó�������������ÿÜ��ß�����������ò�����ó�������������ÿÜ��ß��� �������ò�����ó�������������ÿÜ��ß�����������ê�����ø¢ ���ï������ ��������������`�ð ���ÿÿÿ�����€€€�����»àã�33™��™™�™Ì��`�ð ���ÿÿÿ�����–––�����ûßS�ÿ™f�Ì3��™f��`�ð ���ÿÿÿ�����€€€�����™Ìÿ�ÌÌÿ�33Ì�¯gÿ�`�ð ���Þöñ�����–––�����ÿÿÿ�Æÿ��fÌ��¨��`�ð ���ÿÿÙ�����www�����ÿÿ÷�3ÌÌ�ÿPP�ÿ™��`�ð ����€€�ÿÿÿ��ZX�ÿÿ™��db�moÇ��ÿÿ��ÿ��`�ð ���€���ÿÿÿ�\��ßÒ“�q>9�¾y`�ÿÿ™�Ó¢�`�ð �����™�ÿÿÿ��3f�Ìÿÿ�3fÌ��°��fÌÿ�ÿç�`�ð �������ÿÿÿ�3f™�ãëñ��3™�FŠK�fÌÿ�ðå��`�ð ���hk]�ÿÿÿ�www�ÑÑË�‚�€ž¨�ÿÌf�éܹ�`�ð ���ff™�ÿÿÿ�>>\�ÿÿÿ�`Y{�ffÿ�™Ìÿ�ÿÿ™�`�ð ���R>&�ÿÿÿ�- �ßÀ�Œ{p�_/�Ì´��Œž ���£>����ÿý?���" ��d������d���������@�������ÿÿï�����ÿÿÿÿÿÿ,�������£|����ÿý?��" ��d�������d����Ø���@�������ÿÿï�����ÿÿÿÿÿÿ ������€�� Ô ����€��" Ð@����€�� ð`����€��»�€���� �£n����ÿý?���" ��d�������d��������@�������ÿÿï�����ÿÿÿÿÿÿ ���������  �������@@�������``�������€€����P�£R������ ������������ ����� ����� �����@����� �����`����� �����€����`�£ ��������������p�£>��������������������������������������������������€�£>���������������������������������������������������  ���ð���ð���������ðœ���ð(���� ð�������������������� ð����������ðÒ���� ð������ ��“� ð6������€��•}�‡������ƒ���¿��À��ÿ� �����ð���€°ÐP�ð�����à ��������ÖÄ� ðT�����Ÿ���������¨ ���Click to edit Master title style��¢���!�������ª ���!���������ð��� ð������ ��ƒ� ð0������€�€–}���ƒ���¿��À��ÿ� �����ð���à°Ð��ð�����à �������ÖÄ� ðž�����Ÿ��������¨R���Click to edit Master text styles Second level Third level Fourth level Fifth level��¢���!����� ���� ���� ���� ������ª ���S���������ðÈ���� ð������ ��ƒ� ð0������€� —}���ƒ���¿��À��ÿ� �����ð���`°`€�ð�����à ������ÖÄ� ðP�����Ÿ�������� ���*���¡���������������������ø���������ª ������������ðÊ���� ð������ ��ƒ� ð0������€�À˜}���ƒ���¿��À��ÿ� �����ð���`°Ð€�ð�����à ������ ÖÄ� ðR�����Ÿ�������� ���*���¡���������������������ú���������ª ������������ðÊ���� ð������ ��ƒ� ð0������€�à™}���ƒ���¿��À��ÿ� �����ð���` Ѐ�ð�����à ������ÖÄ� ðR�����Ÿ�������� ���*���¡���������������������Ø���������ª ������������ðH���� ð������ ��ƒ� ð0������ƒ��“ŽŸ‹�”Þ½h�¿��ÿ��� ���?���ð ���ÿÿÿ�����€€€�����»àã�33™��™™�™Ì�� �º$���B�l�a�n�k� �P�r�e�s�e�n�t�a�t�i�o�n��îØ���ï����������������€������� ˆ���ð€�� �ð���������ð���ð(���� ð�������������������� ð����������ðl���� ð����� ��C� ð���€�P„¿���ÿ�������ð��� °Ðp�ð�����à ��������×$� ð �����ž��������ðl���� ð����� ��C� ð���€�„¿���ÿ�������ð��� ` à �ð�����à �������×$� ð �����ž�������ðH���� ð������ ��ƒ� ð0������ƒ��“ŽŸ‹�”Þ½h�¿��ÿ��� ���?���ð ���ÿÿÿ�����€€€�����»àã�33™��™™�™Ì���d������xœ»p^ðÁÂRЀ3ÿÿœ lHbŒP  @ùÿÿAL ÿGÁøß@;b `BÏù¤&V”<Omà Î[ŸãŒÿ¨#k?­ÀP¶�|òç��r����@�����Ì��v��V����õ������Ý�����Â��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������þÿÿÿ������ ��� ��� ��� ��� ������������������������������������þÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿ�� ��������������������à…ŸòùOh«‘�+'³Ù0���<�� ������p������x������ˆ������˜������¨������¼������Ð��� ���ä������ð��� ����� ����� ���(�����4�����'��������title��f������subject�������author����� ���keywords�t� ��� ���comments�t� ��� ���user name�� ������1�rk������Microsoft PowerPoint�r�P@����aŒž����@���€SžfLÇ@���€ðß<gLÇ��������������������������þÿ�� ��������������������ÕÍÕœ.“—�+,ù®D���ÕÍÕœ.“—�+,ù®��Ø��������˜������ ������´������Ì������Ü������ì������ô������ü�������� ��� �� ���������� ���$�����,�����4�����<�� ���D�� ���w�����'����� ���category�o�o������On-screen Show�e������manager�������company������������������������������������������r � ������� ������� ������� ���������������Times����Blank Presentation����Title� �������� ���Fonts Used�������������Design Template���������� ���Slide Titles��������ˆ���������H������Ë������Ó������û������W�����k�����s����������������_PID_LINKBASE���� ���_PID_HLINKS���� ���Custom Text�������Custom Number���� ���Custom Date�������Custom Boolean����'��A������h�y�p�e�r�l�i�n�k� �b�a�s�e�����A���T������������������������������������h�t�t�p�:�/�/�o�w�l�.�p�h�y�.�q�u�e�e�n�s�u�.�c�a�/�������������Õ �������������������������������h�t�t�p�:�/�/�w�w�w�.�m�i�c�r�o�s�o�f�t�.�c�o�m�/�m�a�c�/���������T�E�S�T������������������������������������m�a�i�l�t�o�:�p�h�i�l�?�s�u�b�j�e�c�t�=�s�u�b�j�e�c�t�����������Õ ��� ���customtext�e���*���@����Ô«3Ç �������������������������������������ö!������_À‘ãÞ�� �ô���user name��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������C�u�r�r�e�n�t� �U�s�e�r�������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿ���������������������������������������)���������������������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿ��������������������������������������������������������������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿ��������������������������������������������������������������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������Image-ExifTool-10.10/t/images/FLIR.fpf��������������������������������������������������������������000644 �000765 �000024 �00000001622 12131606100 017313� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������FPF Public Image Format������������|����� �x������������������������������������������������������������������������FLIR E40������������������������49001-2001����������������������49033333������������������������f&}C3“ÄCFOL18�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������33s?��€?3“’C3“’C���?s~?����3“’C3“’C��€?����������������������������������������������������������������Ý�������� ���������{������������������������������������������������������������������¥¡…CLŽŠC±ÿC£Ñ‹C¥¡…CLŽŠC������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_ÂC<dummy image data>��������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/FLIR.jpg��������������������������������������������������������������000644 �000765 �000024 �00000016252 12126567454 017353� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF������ÿá \Exif��II*���� �����†�������–��������������ž�������¦���(�������1����®���2����Â����������i‡����Ö���à��FLIR Systems AB�FLIR_i7�H������H������Common_dll v8.0.6b1�2012:02:11 14:17:08��š‚����„�������0220����Œ������ ��‘�����’����´�� ’����¼��|’�ò���Ä��� ����0100 ������� ����ð��� ����ð���¤����¶�� ¤�!���¾������ ���?��2012:02:11 14:17:08�2012:02:11 14:17:08�d���d���C��� ��� ������B�������J�������R�������Z�������b�������j����!���r����!���”�� ���������� ������������4����������P���d���ú������ ����������00000000000000000000000000000000��00000000000000000000000000000000�� ��� ���72AE2CD63D6C4AE1678418BE48230029���������������������:������B��(�����������J������ ������H������H������ÿØÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��P�P"�ÿÄ����������� ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ�������� ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�ɵs>°m.§óeò¢Š‘Þ[–VíÛëW§OŠX¤—ò-¤­ x¥%bäGò„é±Y³œ½· È‹V’Âò[›i"W2Ÿ2mn£ äqô$w¨eÖ®¯”YÉuÀÒ™|¨¢XÓ~йڸÂ×Ôæ!–â9/ÉùQR\÷ÓÔØ°ŠÎëD¹v»»}YYÚ;u˜¢ùJ›‹ä¡Œ1Æá8ç‚â]8é·sÙCJç[ËÒ „Ét×Ìf' Ï1çhd“SÔµ9îŒÚŸ™,¸óO Œ¨S´»•�¸Ük’Ô`+5»KòŒâµÁá§*®šíËüÈ*Ñ\Òü1ÎÜÜKuzóä’x9â d”çæëZÔF탑œŠi‹Šú(aZ™àUÃNM¹=Ht)µMsOÓ¼ß+íw1Áæmݳ{Î23ŒôÍz 𤞠k[ëë+eÒ´öê6¡gŒ(Ѹf@A;‰ QóW� ÊœŠºšž¤/'ºmBí§¹O*yZv/*` ¬IË �0}g%HNôådÅCé;Äï¬<-ss¦é7–÷o-¶£3D%6d |H# ørIÎ2=2zÓn¼95…ÅÔ·†äÅ,‘l‚Ð� Ü< ¹óK("7`JíãnâØžÓµ½NÞÖ;hµ´¶F ‘,ÌHmÀ…ÎÍÏך؎öáËL·‰6mç%]·:“èÌI#¹ä×>&•JSæ¾—>Š•:óåjz/Å_ü´8¢²¿Þb~¦¬XÄRî&ôj´!ö©-¤Ö½yIZÄà i)3_Kÿ�ë–õ L:Úµýë[àËÌ» v©4‘‰$'©½'ÁzÙá}QÀg¹%cÎ�¯’̱³ÁUJ_’Z_·è¿¦vWœ)ÑæŸÇSÄå´x˜£¡R8Á¨ð}àÝ'RÌ×€ø$²Œæ´ïivÒ¬—¸,?*¹ñe:”±š“Ù&Ÿü7Íl*aë&âö<b;G üŒ yÓnÈ‚Oûä׿Á+n€úâ£kKpp#_ʼºœtÖÔ?òoøÅQjÊç‚Û«FÅ} mYÊGÊkÐµÏ Ùj¼‰Žp2F3õ¯:1=´Í‹‡C‚+ÝËó¼>oI¨®Y-Óü×tvPJ+Ýz ûS‚T9§„¯FUN…Οò³W¥x/Y„Åös#ù‘.,qÉëšóHFIõ­ŸêIc¨;?NzWÌç4'R­M{ѳ^¨œEZ‹¦ÏPÔïYcùØ’ù®ªÒ°RÛq�œ)ê{xª:|¬tËq,2E:Æ¢D“ƒ`gH?PMg„´»ž;¯&%•zº¨Ý¸‚ ϸ$©¨ ZC¦5íæ&–\HÍ0 ·#î¨ì p�úœ’IøYÔöÍ·vÛ]5¾º-vünxÑÃÎ BÆÜ·hýiˆ¡ÎóÂŽžõÏA5â‰WbÄy ÍÛ×x¦Ò+õ‚YK àºŽ¬£ÄÔ›„bÛ[¥ÓÔîú´¢¬ûÉ6Dòt�q^?ª^ fâA÷K`{ãŠõ‹Ûˆom6ÀáA¯*Ö4™ìn\²’„ä5}O{bj*ŽÓjËõý (Ũm© ÒøRâœ}k™Ýa¸âœ‘N E</JÂUcµÑìæ·Óaó »'Ÿá¬j_j¼ñEP:Vmu‹ˆ¬ 8 p@cÖ¹ÿ�)šB[$“É5òùf¬uLN"×MÛÕõ27Îå!ÖÍ.6î>_qž*¼Ñ™‚Ž+ITöLhŽãÚ½ÊxµŽVµÍ¬ZÑ¥·· ,²º0þx5Jï]•ž`Q$‰˜à7jŽâ@¨Tu5”ëÚ¯ —Q¯ZXŠªíí~ž„KM´à+6´{›ßµ>ÌFíÎW2gÂ6~‡hÿ�hS¯£ÓZ§°y"'å’Úwß 9?0`Š¥q·Ðç<cš·6s<]¥nSC¦Š-Ì=+�Ϫƭ¬2ÂT–g<ƒ¸ÿ�´=«FÒmgnZÒ>£ÿ�Š¢Tå*wRKÕ¤k B“·+û¾ód ¼ Œ¡Í2'º?ë£Uúúêìd`<éY~ƒÿ�­^=Fé>þšþGEô¹_�MC$A¶£·ÐýuýÂýÿ�ñ5³gá”Ñ.¤±Ôn¥¼ û¸ÝNÓÏ9ùl÷ªÃTYYÆKÕ4a,BNܯîg8ùc“P˜÷t¨-SOFn(mf,71ÄÛdòúŽ|¾äzž C{öY¢Û,Á[ÊÁ¤iuóˆÚOc‚¼Ž ÷iÖ²²9Þ/[rŸÿÙÿá=FLIR���FFF��������������������d���@������������������������������PÛw�!������������8���������ÇËè�"����h�����8����������›Ÿ¢� ����j�����H�� |��������2,§º�����d�����Ä���o��������1Å͸��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �$�������������������@�������������<�<�1���à�����ª€€2€€CØb)nðd€€dnð���5�������������������\FlashFS\system\iron.pal��������Iron����������������������������eŒgŽi‘j“l•n˜pšrœtžv x¢y¤{¥}§©€ª ‚¬!„­"…®#‡¯$ˆ±%в&Œ³'´(µ)µ*‘¶+“·,”·,–¸-—¹.˜¹/š¹0›º1œº2º3Ÿº4 º5¡º6¢º7£º8¥º9¦º:§º;¨º<©¹=ª¹>«¹?¬¸@­¸A®·B¯¶C°¶D±µE±´F²´G³³H´²Iµ±J¶°K¶¯L·®M¸­N¸¬O¹«PºªQº©R»¨S¼¦T¼¥U½¤V½£W¾¡X¾ Y¿ŸZ¿[Àœ\Àš]Á™^Á—_–`”a“bÑcÃcÃŽdÄŒeÄ‹fĉgŇhņiÅ„jÅ‚kÅlÆmÆ}nÆ{oÆzpÆxqÆvrÆusÆstÆquÆovÆmwÆlxÆjyÆhzÆf{Æe|Æc}Æa~Æ`Æ^€Æ\ÆZ‚ÆYƒÅW„ÅU…ÅT†ÅR‡ÅPˆÄO‰ÄMŠÄK‹ÄJŒÃHÃGŽÃEÂDÂB‘ÂA’Á?“Á>”Á<•À;–À:—¿8˜¿7™¿6š¾5š¾3›½2œ½1¼0ž¼/Ÿ». »-¡º,¢º+£¹*¤¸)¥¸(¦·(§·'¨¶&©µ%ªµ%«´$¬³$­³#®²#¯±"°±"±°"²¯!³¯!´®!µ­!¶¬!·¬!¸«!¹ª!º©!»¨!¼¨"½§"¾¦"¿¥#À¤#Á£$£%â%Ä¡&Å 'ÆŸ(Çž)È*Éœ+Ê›,Ë›-Ìš.Í™0Θ1Ï—3Ж4Ñ•6Ñ”8Ò“:Ó’<Ô‘>Õ@ÖB׎DØFÙŒIÚ‹KÛŠN܉P݈SÞ‡V߆Yà…[áƒ_â‚bãeä€hålæ~oç}sè|vé{zêz~ëy‚�x�x�������w���w�������������ÍÌL?��€?3“’C3“’C3“’C��€?�������?�����������������������WF�ЫDÍ̬?������������Ä@×;ÄN<ò(»Ú»33ó?����������À@šÉD3“ˆCšÉDf&iCšÉD3“ˆCšÉDf&UC��€@�������������������������������FLIR_i7�������������������������T197600���������470023842�������8.1.1��������������������������������������������������������������������������������������FOL7����������������������������������������������������������������)ãÇA×£p?���������������������C��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� æÿÿy4¶<Î"ò������������������������������������&1��¼�����  ������€?��€?��������������������Tj6Oý���Äÿ������© ‘C¤zC����������������������������������������������������������������������������������������������������������������������������������������������������������������Live���������������� æÿÿy4¶<������@���� �����������������������© ‘CTSBoard���������Tj6O ��¤zCTSFpa�����������Tj6O ������TSFpaRaw��������Tj6O ��uCTFpa������������Rj6Oš������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÕþAITimeUs�����������àARA����������������€?RCA���������������BRM����������������€?ORA���������������BCVLoad�������������������������������������������������������������������������������������������¬©¥?GG���������������Ô=FM�������������������L��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������x�x�������w���w�� ���������‰PNG  ��� IHDR���������Km)Ü���IDATxœbø0 - ����ÿÿ�º¿A^rµ|����IEND®B`‚ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Font.afm��������������������������������������������������������������000644 �000765 �000024 �00000001337 11325131317 017467� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������StartFontMetrics 2.0 Comment Generated by pfaedit Comment Creation Date: Sat Sep 4 16:12:41 2004 FontName NimbusSanL-ReguCondItal FullName Nimbus Sans L Condensed Regular Italic FamilyName Nimbus Sans L Condensed Weight Regular Notice (Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development; Cyrillic glyphs added by Valek Filippov (C) 2001-2004) ItalicAngle -9.9 IsFixedPitch false UnderlinePosition -100 UnderlineThickness 50 Version 1.06 EncodingScheme AdobeStandardEncoding FontBBox -139 -376 1021 1130 CapHeight 718 XHeight 523 Ascender 718 Descender -207 StartCharMetrics 1 C 32 ; WX 228 ; N space ; B 0 0 0 0 ; EndCharMetrics StartKernData StartKernPairs 1 KPX quoteright y -4 EndKernPairs EndKernData EndFontMetrics �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Font.dfont������������������������������������������������������������000644 �000765 �000024 �00000003320 11325174017 020034� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������Š��Š���F���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������&€���8.0.7ExifTool 8.0.7 DFONT Test��\���������name'{>‰�����=���&��������O��������� �O��������Z��������^��������s�������<�ƒ������� �¿�������Q�É������ � ������ �&�������$?������� �O�� ���žc�� ���� ���� ��*%�� ��O�� ��xc�� ��O�� ��¢Û�� � �}�� � �2•�� ��HÇ�� ��© 1987, 1990, 1994, 2001, 2002 Adobe Systems Incorporated. All rights reserved.Stencil StdBold2.025;ADBE;StencilStdStencil Std BoldVersion 2.025;PS 002.000;hotconv 1.0.50;makeotf.lib2.0.16970StencilStdPlease refer to the Copyright section for the font trademark attribution notices.Gerry Powellhttp://www.adobe.com/typehttp://www.adobe.com/type/legal.html�©� �1�9�8�7�,� �1�9�9�0�,� �1�9�9�4�,� �2�0�0�1�,� �2�0�0�2� �A�d�o�b�e� �S�y�s�t�e�m�s� �I�n�c�o�r�p�o�r�a�t�e�d�.� �A�l�l� �r�i�g�h�t�s� �r�e�s�e�r�v�e�d�.�S�t�e�n�c�i�l� �S�t�d�R�e�g�u�l�a�r�2�.�0�2�5�;�A�D�B�E�;�S�t�e�n�c�i�l�S�t�d�S�t�e�n�c�i�l�S�t�d�V�e�r�s�i�o�n� �2�.�0�2�5�;�P�S� �0�0�2�.�0�0�0�;�h�o�t�c�o�n�v� �1�.�0�.�5�0�;�m�a�k�e�o�t�f�.�l�i�b�2�.�0�.�1�6�9�7�0�P�l�e�a�s�e� �r�e�f�e�r� �t�o� �t�h�e� �C�o�p�y�r�i�g�h�t� �s�e�c�t�i�o�n� �f�o�r� �t�h�e� �f�o�n�t� �t�r�a�d�e�m�a�r�k� �a�t�t�r�i�b�u�t�i�o�n� �n�o�t�i�c�e�s�.�G�e�r�r�y� �P�o�w�e�l�l�h�t�t�p�:�/�/�w�w�w�.�a�d�o�b�e�.�c�o�m�/�t�y�p�e�h�t�t�p�:�/�/�w�w�w�.�a�d�o�b�e�.�c�o�m�/�t�y�p�e�/�l�e�g�a�l�.�h�t�m�l�B�o�l�d��������Š��Š���FSORTö�€��F�sfnt���vers����€ÿÿ���*�����ÿÿ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Font.pfa��������������������������������������������������������������000644 �000765 �000024 �00000003027 11325131046 017467� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������%!PS-AdobeFont-1.0: YehudaCLM-Bold 0.100 %%Title: YehudaCLM-Bold %%CreationDate: Sat Jun 12 19:16:03 2004 %%Creator: Maxim Iorsh %%DocumentSuppliedResources: font YehudaCLM-Bold % % 2004-2-16: Created. % Generated by FontForge 20040531 (http://fontforge.sf.net/) %%EndComments FontDirectory/YehudaCLM-Bold known{/YehudaCLM-Bold findfont dup/UniqueID known{dup /UniqueID get 4195924 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 12 dict begin /FontType 1 def /FontMatrix [0.000917431 0 0 0.000917431 0 0 ]readonly def /FontName /YehudaCLM-Bold def /FontBBox {19 -360 750 840 }readonly def /UniqueID 4195924 def /XUID [1021 181 2054546049 7395086] def /PaintType 0 def /FontInfo 10 dict dup begin /version (0.100) readonly def /Notice (Copyright \.51 2004 by Maxim Iorsh \050iorsh@math.technion.ac.il\051. Distributed under the terms of GNU General Public License version 2\050http://www.gnu.org/licenses/gpl.html\051. \012All rights reserved.) readonly def % Copyright © 2004 by Maxim Iorsh (iorsh@math.technion.ac.il). Distributed under the terms of GNU General Public License version 2(http://www.gnu.org/licenses/gpl.html). % All rights reserved. /FullName (Yehuda CLM Bold) readonly def /FamilyName (Yehuda CLM) readonly def /Weight (Bold) readonly def /FSType 0 def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def currentdict end currentfile eexec 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Font.pfb��������������������������������������������������������������000644 �000765 �000024 �00000002617 11325131046 017474� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������€/��%!PS-AdobeFont-1.0: NimbusSanL-ReguCondItal 1.06 %%Title: NimbusSanL-ReguCondItal %%CreationDate: Sat Sep 4 16:12:41 2004 %%Creator: frob %%DocumentSuppliedResources: font NimbusSanL-ReguCondItal % Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development; Cyri % Generated by FontForge 20040824 (http://fontforge.sf.net/) %%EndComments FontDirectory/NimbusSanL-ReguCondItal known{/NimbusSanL-ReguCondItal findfont dup/UniqueID known{dup /UniqueID get 4157071 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /NimbusSanL-ReguCondItal def /FontBBox {-139 -376 1021 1130 }readonly def /UniqueID 4157071 def /PaintType 0 def /FontInfo 10 dict dup begin /version (1.06) readonly def /Notice (Copyright \050URW\051++,Copyright 1999 by \050URW\051++ Design & Development; Cyrillic glyphs added by Valek Filippov \050C\051 2001-2004) readonly def /FullName (Nimbus Sans L Condensed Regular Italic) readonly def /FamilyName (Nimbus Sans L Condensed) readonly def /Weight (Regular) readonly def /FSType 12 def /ItalicAngle -9.9 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding StandardEncoding def currentdict end currentfile eexec 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if€�����������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Font.pfm��������������������������������������������������������������000644 �000765 �000024 �00000000360 11325131046 017500� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������ð���Copyright URW Software, Copyright 1992 by URW���������������� �,,¼�������X�����BD ÿ ���Ç���Ò������������“���ë�������«������Ú���������ð���,�èè›Ó¼Õ��� þú�ôôi�u�1�c�/�/�ôd�Õ��PostScript�URWGroT�URWGroteskT-Bold�ú�E��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Font.ttf��������������������������������������������������������������000644 �000765 �000024 �00000002344 11326063276 017531� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������true���� cmapŒ9¢Ë��ä��vcvt 4ì.)��¤���ôevrs���'��˜���fdsc@+6��œ���0feat„‚��Ì���0fpgma1Ž]��ü���rglyf¡j„¯��p��<œheadº‹ç��A ���6hhea *��AD���$hmtxèÐPh��Ah��<justíL��D¤���xlocaóV��E�� maxpãñ��F¼��� morx'}í��FÜ��%¬nameøR��,��¸postÒ–æ��p@�� prepæù9Ñ��{\���\prop)ð��{¸��T���'Ú�������� ���������6��������=�������#�D��������g��������n��������u��������|�������������� �¨������ �´������ �½������ �Æ�������Ð�������æ�������ü������ ����� ������ �"����� �2����� ���������H������P������V������ ^������h������o������ u���������� ��…���� ��‹��� �� “����������£��� ���"§��� ��É��� ��Î��� ��Õ���!��ÚHide Hebrew Diacritics© Apple Computer, Inc. 1991-1995RaananaRegularRaanana; 5.0d2e1; Wed, May 26, 2004Raanana5.0d2e1RaananaApple Computer, Inc.All Typographic FeaturesAll FeaturesNo ChangeNo ChangeDiacriticsShow Hebrew DiacriticsHide Hebrew DiacriticsHide Hebrew DiacriticsNo ChangeYiddishYiddish DigraphsShow Hebrew DiacriticsRŽgulierNormalRegolareRegelmatigNormaltNormalAlmindeligNormalVanligNormaaliƒŒƒMƒ…ƒ‰[¼Ð·ÇÅéÀϹÝ(c) Apple Computer, Inc. 1991-1995øòððäRegularøòððä³£¹æ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/FotoStation.jpg�������������������������������������������������������000644 �000765 �000024 �00000010340 10520722453 021044� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ����� Edit Status �1�Catx�+Caption *** Local Caption *** Local Caption(�Special InstructionsK� Afternoong�OTR·�CP_2È�Custom Field 01É�Custom Field 02Ê�Custom Field 03Ë�Custom Field 04Ì�Custom Field 05Í�Custom Field 06Î�Custom Field 07Ï�Custom Field 08Ð�Custom Field 09Ñ�Custom Field 10Ò�Custom Field 11Ó�Custom Field 12Ô�Custom Field 13Õ�Custom Field 14Ö�Custom Field 15×�Custom Field 16Ø�Custom Field 17Ù�Custom Field 18Ú�Custom Field 19Û�Custom Field 20æ�Document Notesð k������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ª¡²ÃÔ�����������–â��ix""��Gö��_Š�D[�/ù������������:¡²ÃÔ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/FujiFilm.jpg����������������������������������������������������������000644 �000765 �000024 �00000002535 10357015703 020310� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá`Exif��II*���� �� ���’�������œ��������������¬�������´���(�������1�'���¼���2����ä����������˜‚� ���ø���i‡������Æ��FUJIFILM��FinePix2400Zoom�H������H������Digital Camera FinePix2400Zoom Ver1.70��2001:05:19 18:36:41� ���‚����Z��"ˆ�������'ˆ����d��������0210����b������v��‘�����‘����Š��’ ����’��’����š��’ ����¢��’ ����ª��’����²��’������� ’������� ’����º��|’�Ö���Â��� ����0100 ������� ����@�� ����°�� ����¨��¢����˜��¢���� ��¢�������¢��������£�������£�����������^��d���2001:05:19 18:36:41�2001:05:19 18:36:41���� ���X��d���h��d���È���d�������d���h��d���X��d���FUJIFILM ����������0130�����Æ������������������������� ����Î��� ��������!��������0��������1�������������������������������������������������������NORMAL ����� ���í �����í �����������R98������0100�����������������������,������4��(�����������<��������������������H������H������<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/FujiFilm.raf����������������������������������������������������������000644 �000765 �000024 �00000113064 10716615647 020314� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������FUJIFILMCCD-RAW 0201FF392201FinePix S5Pro �����������������0106�����������������������”��/‡��0��2ö��–��������¿È�������c��2ö��–��������¿È�����ÿØÿá.ŠExif��II*���� �� ���ª�������´��������������Ä�������Ì���(�������1�'���Ô���2����ü����������˜‚������i‡������%ˆ����þ��¥Ä�j��� ��z ��FUJIFILM��FinePix S5Pro �H������H������Digital Camera FinePix S5Pro Ver1.06��2007:05:22 13:58:30� � �(�š‚����ö��‚����þ��"ˆ�������'ˆ����d��������0221������������‘�����‘����.��’ ����6��’����>��’ ����F��’ ����N��’����V��’�������’�������� ’������� ’����^��|’�j��v��†’����f��� ����0100 ������� ���� �� ����À�� ����à��¢����f��¢����n��¢�������¢��������£�������£�������¤��������¤�������¤��������¤����i���¤��������¤�������� ¤�������� ¤�������� ¤������������ ���Ä �� ��d���2007:05:22 13:58:30�2007:05:22 13:58:30���� ��� ��d���X��d���I��d�������d���,��d���X��d����������� v�����v�����FUJIFILM ���'�������0130��+���æ���������������������������������������� �������� ��������  ��������  ������ ����€���������� ����"��!��������"�������$������%������0��������1�������2���������������������������������������������������������������������*������2������:������B���������!� ���J������0100 ����0100 ��������A���������H������������FPX20582698 592D313134360702198C0020100A84��NORMAL �������������d���ð ��d���X��d�����d�����d����€��/0���������������������������R98������0100�����������������PrintIM�0250��������"������� ��'�� ��'��—��'��°��'����'��^��'��‹���'��Ë��'��å��'���������������������à ������è ��(�����������ð ������’$�������������H������H������ÿØÿÛ�Å�          ÿÀ��x� !�ÿÄ¢���������� ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùú������� ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�øì×óÂ_ûäÒ{ÿ�,$ÿ�¾M;0¸çµº_½m2ýPÒ­Ù`¬äž€!¢ÌWC¿³µ gì78ÿ�®Mþ.Ÿ~Ã+crGN"?áE˜] kÕûÖ“ŒzÆh6wƒ­¬ãì,ÂèÎíUY­gPà ”<Ò}–ë8û4ß÷Á¢Ì.‹:v‡­êMma£ßÝN¹&(-ÝØcƒÀªígx¬U­gu3G+ ¡>Ëuÿ�>ÓßÚÜ… öypz†‹1Ý-î À‚Lÿ�ºh6󃃃þh³ Š-®q§ì>Íqÿ�>òÿ�ß‹Ámn[må9é„<Õ»ý [±„K{£jÑ’<Öœ ‘ßkß'Òš„ž©ä–ìÙû5èÉòr <ã¥ez¥ÒKvB:‚§ Š|˸ýœ¯±½sw¢5¡‹Ã÷9‰ÐK6æ;FáÀÊöã Ö$p_… åÎ>B*åV2c%²d‚L‘ÅÁänaŸjyµÕ7~én0yÆüTsǸ{ÿ�++ Iì±Êw3 àþ4Ó¦jdẟYE/iåý^§bA¥êhì>Lãt™…8è÷Ewy©»¯ÿ�…?iáõj½Žóá/Ä sÀ6sçèúìóJÒ5Ýõ…¼óa‚åCɰ(8 çÔçšñÕÅ÷‰¼Yu®Ïecd×;3m¦ÛEomP¿,qª¨é“…$“É&k¬V©m"e.~@ÿ�Oñ¤]"à¨Èß/A»¯ëOÚÓî/ªÖì0è÷JÊË œãwZF¹,I.[§&¥Õ‡B–¯aðèr©mò§=1‘O}ùbãèi*ðìWÔªwDvºlöw1ÌžT»A]’‚Täc¦}ëS^»Öµ›tŠþuhÕƒWldg¼ß™õ4㈶ˆO{¤C¸Á¥*D·ƒŽÞãͱè[¸±Û ÉÂò1Ïùö©b…T稤ÊH“ÉÊ ÏsÓ4æTtÝì)Q]g ÷�š%Ž5åˆ\q’x¢Ì.ºŠa Hq†A)u o–©V5Éý(³Ðý‘äOQéE˜]BœãÜB/QE˜\0ž£­5¶ÿ�xQf.d1‚zÒŸ( éNÌ\ÈÏû6¢NÌ_ò)Éi©tûDDþ?á]Ôû^λûD«g¨ô3CúÓÅŽ xóbü £ÚSì?cˆþaFŸ©ñþf”iZçíj?KÚÓ]aë¿´<i7`ówüÿ�Æ¥þÈœÿ�ËóçèÆoå+êuzÌ?²&ÿ�OnyýzGÒ®æ{ÙŒdƒÐqëGÖ!ü¡õ*ŸÏý}çkqð3ârøŒè×Z í¥ÈP±¹ž)ÈPqǹd NÜã¾ dj_ <c§Xjš…î‹}†—0·º»Â5‘Žn'žqF@8&µç¯cŸÙK›—ÿ�_3 =2@¼Üäç‚Wÿ�¯S.˜þy±ôAÏøVYò›ýFÎW“Is“çgÛgÿ�^ìTmÜu ëGÖWD/¨¾²bG¥[°$xõãùÒ¶—l¿yŸ®9#ü)ýj]}BŸVÿ�¯>“�ÆCŒò Ç=½)$ÒàÎÓü)}j]R¨SîɬôíIíão°Ü8p6²DØo§¡m¡kr}Íý¹ÇËnǟʹ¥R+©ßNœÚNÄw6—³˜. – GT‘J‘ø»g¡ê÷6‹sm¥^Í}Ùc™O8àŽ¼T9Æ×¹¢§&ì–¥ˆ¼7âÎÍ Ro\[9þ•"øsÄ9#û Sã¯ú+ñúT{XwFŠOåc›Ã~ ï¡j`çþ}_ü)ÑøkÄ vScŒñjÿ�áKÚú+ØÔþViøSá÷ŠõínßO‹E½¶7Ïqso"Å �K; À�ž'�œ õïk¶ß ,?³¼#c¤Üx…ãò5-z÷ áÿ�ÕCæ™FKà…!FÝ)µ=QËŠnšåz6p-ñOˆ®d]KSñír0#Ë&æ;™°àî?2ªžüt7<'â¯i1G{kªÌ—nÀH‘¾á.ÆÉP ‘µ†GCÇ'㣕ÌØÔ4ß|N‚ülôܼWFöFx­o\y‚e+ómwl0lm§%‰óðoŠ”|;©©}»qÜz×=YF¹™è᪦’½„_x¨îLJõÇRÐ0Êœ| âò‡‡ïð¼ÿ�ªÇåëXýbŸs«êµ””|8ñ«lÆpKœܹü³šrü2ñ»tÑþEÏþ=Kë4—Pú•nÄ:‡Ã¿ÙÙMws¢H°Â HË">ÑôšÉÒ¼9¬êº”VVštÏ4Šy‹°aF[ælÛôõ¤kÁ¦ÓØÎxZ‰¨Én}?¤êºv¥gçéZ„Ñ¡òËZÈ’*°ìHã¸8ôÅIu, =±óî¤$VðåÚwnQ–<ލ¯ÙÉË’Úžÿ�µ‚ƒôFÝ—Âßø˜ýº÷ÂMª¼Uõ¶A3“·j¬„cŒ† äôàÕÏøW>,ðå¼GLðî›qhªÒlÑ®)Ÿ¸ë9ÉèONœ×©ý™.[9ëÛ§õò<GS纆úýßðLI‚G‰£’ —),SÀÈÈÞ…xÁéЃޛ‘ïD2'™‚ʹä¨8ÏÓÞ¼š•98ÉjrHÔŠœÓ$ÑX3NHáˆ;H<uÇ\âŸ$d£Æ³H†A•aÎÐ}3éŽùük3B}O]ƒÃŸµ½LÝ/¦o²QJÛ²±—Œ³6vç6Œ7,‘½ ‡OsÈžlc2$i…I 'å£q€;×Ð`n¨&¿­OÍ5ÅÊþ_‘™àÿ� MâoùW-l|èŒý¢?3 ¹íe*s´‡/#u.¡á»_xŒ–æ-ÅŒ@«IÜÀ+*ò¹pHÆñ‚ w8Å®SÏM§ÌmøKÃZ•ö£š[\Z?$PYLÄ®ÄÞªU‹ 8̉»hä{R DhúÏü$S]M¦Ì’Ej¢íÙ‚ºf"¬ÁМgžìÙÁ¹+«Áy5ù¸WiIwOòg<ê²B üÅACägÐôÏ>´‹[<nã'¯ä+ç³Cûçuàc§ËÇaþ?­[ðæ®xšgÃvQJ±9ŠâòéÊ[ÄÛIÆpK¶@@qŸ˜ŠéÃaÝyò£“ŠŽŸ<¾^¦v·7í6þ(µÏZ$RmÛ-¦™R… €ÀœÉ´öù±ôëRi–‰¨Øê7žñÆâK-(*_5æëgæ4Ý‚ƒw#-ŒƒŽµêÔÀQIF7¿©ó±Î«©ÞVk±äß²Æ|{m4³ âV(ùg.ˆªª;’WÜײøóÄöŸáµÑtưվ%x‚"É%ÉaokÉíóÁR `IÆ8¼-lD¥è¿¯ë©XìG&×[·òz~?‘Ã\|2ñ§ŽôÇ×<]u¯x©! {çßNa³pŠ<¬ d”^¼ÕÛ„/ø|nuo _@xä=Æxeˆ]àÍ,…vœá×5ïû:~ͽO•u+Ë÷‹dw üG/Ř¯4/XØØøïFˆKì’ßQµ-÷¶n-€~WR#2ºçvÚÈ%ƒ:<^\ˆæ7WêŒ2¥HÎ7G¯Ò¾k7ÃòIKåþGØä¯iOçþawskm Os! .ÎÝp:ä•K¤xƒÂEíî&×ì®-v~ôA¬êJç�m O#ø±õW—Fƒ©/%¹ìbñj„/Õìiø§Å¿ õ_Ãáùõ F7ºÃ{y”†\£ÆU”6Ð5\íû¼u$Öv·¢ü Ô5‰n?á0’1¥l¬þÐ@Û…Üñ¶K.òq·P;“ïB\‰.ÇÉT|íÉîΡ¼aðƒEÖ÷Â飭ÔʰNgŠHK@%'Ë1 3àäe‚î-ÔGâ-wà&»©<º­½¥ÛÎB\”Ia•#Wq"/˜øxfÚ6� jý§[‘Êgø[Wø7áß\êÖ~,I­$ Çdmg/ JmvbN:à³ ÙRlsüRøWso ½üZÀÒ-!—u¸ªwÊøó@P¸-’NáÙEe%Ï¢5„Ô5Ö‡4<màûßɶ¦¶MˆDð¹l<›cS·q†Á'Œ‚sZ7¥fs-¥æÄGö¸q‘žÇ< pGSí¶Ò–½OªÁâÖ"n·/xOD_øŠ-Þí£‰ÃÉu< ñD¸ÎMÙd^2Alpkø¹ã!ñ?ÅÒx“¼`ÆÞ-¶u—Q‡$ÆîT† ‹Ã•.Iqìå4ãóTÑ7ø/éŸ?Ä¥)¨SÕ¥ø¿éþƒ‚e:löè­Å<—Éó~RXŵöæ3œí;ÆÒÄ\§‰t%ÒukÙ4»‚—WŽm­ÞÃO“u£Éïó˜ ?2JÞ ¬‡cdœtcñXy·{®]¿åmZëÑ=ÏŸ†tãÏÌ›ê»_¯ÝÕÁ6lüa«îšDûÌ@Ã2G£çŒlÖî èÞ0ý¡ümãßè°ZÁ¨½¥•ü¿,Bd¶ï�Ì,ÛG9mÇ‚»±JS„ÔwoôG³ˆ´;ì—êÏOÐ|CàËID/ãË(mc˜¢YÁ­!¶hÞ,º<LåJof ¤ap¸ŽÕŸÅ Lžhôx^æn3/Ûõ•„ˆòT•9Àf8É.¢º0« 7wc ExUNö×å÷Ûóg„E ÎûGxWÇñx«ÃÚ¥õƸ,äÒàÔ¾Õ![–hUT·ËŒü¥‘H`=Sã–ž`ñä³´ŠÂæ$•@\³nsÉù è:LÖxþiм÷Léɧˆå[ÿ�_Żƈòí@ ’@$öž¹è |ÙðÆÉIy®ñËžïüóŸÌ×&Wi´z¹Ûµ4ÿ�®…¿Ù4þ;dÐ*ÁJ`MœÆ8âôì=Z‡B½h~ÚÄFrŽýnÓ†ÝÓ~zq^ò¥Ÿ*ê;æÓµ+{Yž+,[³†ŒmwFùw0w*œç®*õΫD–¶ñƒ<QÎ8ž4]¡bÞ0qÇÌ� ¯gâç•íbÓõ‹‹xïÿ�²Z Ç·‘”KÎ • ÀoÀ6wºÖ¹o ²$R¢”…� •ÉÜ1ÎsIRƒê?i-¬`xúK˜<J–þs,–çx`NàC°ÿ�wzd×Ó·H6…�Uíí^iY¤¿­«Éé6ÿ�­Îóáëé¾ ñ^±o½ËZÚù‹$³¢HØ`C‘ӓ϶~hø=­xÂĺou½>'Óü¹ñáÛ‡} �6¾J«o`r2XðíÁÓ”ð©GúÜñsyB8Ææí·äŽ¿Æž4ðn±ð¢ÓYÖuyuŸØZÏrÝi…£–G0ßÂüË|)l‚»º±*<¿Äú•½ïÛUu°›lüû+‰¡¸Šf—*¢#|ñ•óœï�«2ÿ�uŽîLFS©+­­ýyžkœ\R‹¹ê?ðMŸ“ž'ÛÁûXãý³^ñ¯U/ñ·Çb-=dû6·|d8þ{Éÿ�L'ëß­zX=9ŸŸèŽìÒ7P^_«1&UŒ #±´�ùiO|¡ëV4cÅÐO:Ûݶ.O)Ò2À¨8ÎÞ˜"»¹ßcÇtSßõ;ƒ1ñHø×àÛmOXÕ¾Ï>¹g¶+ƒ™W‚60yèkëç/µ9Í¢·œÏÚ¼üÎW¢Ïc"‡.)[úÑœ336|¡¹[‘Î3øŠòO‡zD¾ ø£/‡íõ ƒs<jc¹^&š9�;1æ9hÎ�êTzñäeóå©ÊºŸI›Óæ£ÍÛþ�Ÿf–ËÇo{h÷w¬ƒ÷—¡¢h9¬KHŸt63Ã3¼Õèþ/øÎy8/ @W•¶Ö¯“ê3!ç½{šËcåt»%_ˆ¦,Òx¯Z‰Ge¿œ€Õª)ücãFFßâR]ÃiÝ<¹Ó;ýênû¡ÙveMCÄþ'¼p²^$çÄÌäŸÖ¥øW5óÜÝyz[jóȲV)½™¸©PXvœml‚Ç¿5jÕô‰ÛSŸÔ-4ÿ�|WµÒ/î.c…ÞçÎhÝ�B7à+r%P0yÉ÷5e žS»£só|Ø÷ÈŒc¯Ò¼<ÊOÚ%ä}NO¨·æw¿ m%Õ<#âÍ>�¦K›?!ž d�qõ¯ÎKßß%Øaqò5ÜùÇlýq^¶]' ßÖ¬ùÜòŸ6)ßúÑ~ñ<—º\ÒÍgªƒí5½ììpìLCà•WÝ“³ŒsNñÔòÛÇfÓÜ]Äs9šIe"Uçk2v¾pN0ç8šø‰sr=¿§þ_qäªI;ŸJÿ�Á7Û?ñ G¡Ó•½¸xoÆí.I>1øÞê). [»É¦Xãˆ1‹¾AÈÎz0~jéÁGsÓÍ%n_ë¹FæÆAo‘«ÞÈD‘¢8ø—ž·_¤´Ó¦[‹¿øšÜ¦éݶ1¿äQŸ»ø~èò>çÌŽ“à–Ÿ;|xðK î/6köîÊQHPïp;zר?‘ÿ�á0·Ú>af¼ã~kÊÍÕ¨¿ë©ìä.ø¥ýtgÌÁ‘qÔv=8ïéøÑàŸi¿Ä¨µ½[TšÞö4ŠÞÊI„lÌìçwßà7b1ŽùÅx'jËçùWš»Kåù£Œøµ ÛÙø‹Ä´óÎ`º²íNF2Û3ÍÆyA¥y—át|IÓmã±ûDz§—"eW »YØ@Û’½3Õ·õ$×ÒÝ[Sãlõ±S_ÑõýB îßBÒà—Q¹³·ˆE[ÁžæõÖ$²’m‰-C)`T¶MOèÚÍÖµá(’ÊÑäÕ­ ž$ÅæmTÛaxGÊ~Q€ï0nâ…i‘û0xNy¾5x&óYдæÒ.,å`²Eq,z‰@ Ëc6§¯9\ÿ�ÝôÊ|4Ñt¾¯£µÕ¡’ÆîK{—Fù—nÒÀ'Œã*¬�ašMëÊZVxÍîƒlß%Ô×Tº_ì‰ï-¼‰äi<ÙšiËÈ 'cǓԶIõ=Pr4ÀéøWÏf2½kv·ä}vSa“ïÌô¯Ùçx›X"*#NIÿ�Y_˜zž…¬&£40éW¹To³“‘Î;s^Æ^›ÃÆßÖ¬ù¬é¥‹wþ´E‹ 7ͶwÐ.tÐÊDrD]ÍÎïÈî0Þ¤íu}ME¥êÛ%¼Ñõ®éàá•Ö0ÉÊò° Ì7rhÅQ•ùÒÓÐòTãÜúþ ÆÄ|L×Sžt¼ãé*x—ˆuý~ok)ch¥#¿Ÿæ¸†Ù˜åËuh‘‚1’xǵta—ºwf.îÃSTñ’ãÖ<ËEÀÿ�ÀzŠê÷ÇS‡þÝCŒšñôˆsךé×±æYŸÛţ㯃b»Ôà:剒5”Ê&B}jûãôŒž5´ÂïÝh¹?ßóÚ¼ìÎþÁÜör$¾´­ýhÎ&F&%’o.2IÀWÎyã¯#9•Ýü#:ë3X Æúñ0_Æ_?ÈúœÓýÚ_/Í'‚l`† oX•tñ<“”ä¢ÛD ?„ÇžXð2kÃ4ÿ�…šÞ™ã/øžþÂóK³³°µYLæºÔ:w‰^`"Xöà#«—WÌ ï¹YØù5«¢øcâX|%á;ÆÓSè—:|—5í±_µZ\_ʱ2/ÊâàïeV1• ‹9ó<¼ï |mSðV§«SÍðÔ= †Kæ$WÒÝî¸ÍÑ ¹¥+µ œÝK1x‘9®ÃÙž‡àÍ×@ñÞƒ¦+i×ÙéÚ~gr5(ØAâ Äa·¶dÁØÒ(S(%ÓÖ§—Oñ— Õ´ÎöÓ¤lÞãiQžFøØòŒŠmÞ\˨Ül¬p_me¶M6uUi¥LYÁœdúäõ<×'lTI1F]£1»†ÇÔçú•óøïãËúè}fWþëŸæÏHýž™d}`ÜŒ±9?ë:ÿ�ž:WæÖ¯ãmbÂþ{A»0HÑ’——àãÞ{W·—ÊØx¿ëv|¾wl[_ÖÈ͗ǺÃc:ýÛÙú~/U¦ñf§#o’âä·#&áϯS]Žg•ì¼Ï·àœº ßÚÚç‰VTòV°²âÈàlÏá^7k¢Ýê^-ÕÇNšà‰þv†"Ø=8°ý)àÚåÔéÌïÍdtvþñ$¸ áÝDö!m[ŸÉjVð/‹sÇ…µÆéÀ³“ÈWo4;ž]¤Yø{ái¿ü+¨jÖ-­¢Ö­7ÜOi"ƹ™@É#’Ô×Ð_´qÍâø"•ct{\eHÜù·¶+ÉÍÚt]s ºÅ+ÿ�Z3†„Ý™ÑnBpLб 1ÆqÈäõÇN‡·ðc*ÚªôÝGŽ¿ÇøWƒ‚þ2þºW™ÿ�»Kåù¡Þ.´Ñõ?Ák­jW–Ö–÷©"˜Cº_,íù¼¶äîÚ•à˜€~IñoĽ JñN¡¢_øZ†ïO¹–Êe(„ñ»# ‹BÈ<‚G¹¯zR±òQƒ“Ðκø¹¤Åú‚¯W=ä×VBán½…R—â‚ܾæð•»0$2ÿ�8íÿ�<êm?àý]ßþ sÁ>9›Zñ¾™áè4´ÿ�·N‘<ðNÒNäFª „�pƒæcÂä+íÿ�„útwý?N°Ô×Rbóc¼X¶ Cæ©ÚKc‰�ëÛ·A¢•ãr%Wc â¹éš(¹žO˜g•?ÔמN«=ê‰#+)G!€ÎÕÈÎ /^Gëçñ¿Ç—õÐú̯ýÖ??Íž«û9,^N®±Hއ[ßÁïšü»ñRÛ?‰µ=ó•ÿ�H‘²¾ãÇÿ�^½œÿ�f_×V|Æsþøÿ�®ˆÄ˜"Ì|¹wŽâ1Î=)¾c=}+²Çš~Žÿ�Á7˜7€|BãqùþC¯’¾ |FñŸƒüi¨Úx_]¸Ób™ƒË䯙vÜßÄFx×ùÔÐ_»hèÆëQ?ëc”½ø¿ñbufŸâ'Š+ò®¡* ‘À"¥ºñÇÅÙ®î,ñ¤¢y%Ù}rÂ5@7–ù¸ ¸dž™ª½™ÏËäu?²ïüc¬~Ñž Óõëwö²jöÂH.¯d‘eXy�þ¾çøý·‹íÔ³ˆ@ÎýH?çšäÌÝßõØô²eþÖ½?Fp· ç•C(�åð8 ‘úôïÓ¯J쾟³ÛßæâH÷ÉotPø,Ì£ ö%€üñp_Æ_×Céó?÷i|¿4mÉáÕÔtôÉíEã¾§s,-(VTqæØî\§h†8'�ÍO‹v {S‡fК¥Âþî$~+ÞoT|šZ?C;D½½Ôõ‘5ìÂWŽÜ¢¶Ð Û‰$}âK1,rI<šv³©êV¡<vùK2!‘¼µ'*r¥IR Œ§'íW¡”Wû;õ;ŸØîÊöÿ�㇃×N‚IîaÕÒåˆÿ�xØäs…=Å~ŽG‰¢ÒÝì"`òà «y|– Êœäwà€ ¤Þ­î£øÄÉ-¶™‰|À³]Æçn ¹öÆ9çŽrs\ XÌÈJ3«nMÌ„prO=Àý;‘_?þ<¿®‡×åŸîÑùþlõ?Ùñ@}`ƸBa!°ïõ˜?û×åçÄ;hm¼IvPŒ¼ÌÎ 2s^ε‡¿­Ï—ÎßõÑ’h:ºj–št–mÝÜž\P»bÞa‹iÉùNõ#½0iÑèZºÚKy%Œ‘GQÏûÒ#gŽCµ°Î¤‘ʃ]«zžqúÿ�ÌšÞO‡ºýªIûØï#vŒŸ™AN Fpyïƒé_xÆñâÕf¸šÆ(dK”¿†ÛÏh]@u *œ¶ÑóS§ Ó5ÄIJi­¿à–ž±ŸK•¯|Sq'É ¢ZÚ4«)P‘ãû¨F ¸WÄ­x£Ôõý~ì+3L¯ y9vBáK8'$3þ"«ÀêW{´euÜï¾k6º¿í7àcØ5ˆ É$EBÊU»ùq…lìBª ‚M}·ñôLÞ8·„:D­dƒÌ݆{ñƒÆ=ë“¿ÙÏK&ÿ�{^Ÿæq1„’Uy!ÞPnB@R­¹÷àãS]‡Ã KÛË‚-ï®-ŠÜEûèB³ Û(1ûÌ>ê’3žHñðÆõÐúlËýÚ_/ÍÕn¡ñN´WQ“P‹Mho6òÌrÆñàŒà4k€1×$œüCûT[Å©ÛB’‡ÄwYÀÏ>uÎ}ú×§‹ø©ÿ�‰=„Ò5ÂÎ[öiŒÚüBºór?Ð]XAÌ‚ ‚9úQû@éWºŸÄIžÎ’84å–R*«¼þ' ÇŽB£ŠÄEHÿ�„}?ÌT¿ä[?ñ‘é¿°mòhšürÈÊÏg¨]°²¸v[~6v·#‚­}•âd’î]'þ&wú]Ýų¬¶aC¶1óÙ „“ò‚W¦1ýäýDbÿ�…OÓõgãiÌ©£__ß%•íÄ"âìbW"|¾0x2{0@ÅsOiö¹á#*ÌQ·9^ÍŒ“Áܼã•5ãc—ïåòü‘õgû¬~›=/önW[|0!3!i 1Ì<©/9—Ð~tx®_ R‹TÔõ‹;à–ú}”L 2*¸f2«81Œmù@$õÉ'ÚËÒxt¿­ÙóÕþ¸ÿ�®ˆÂ…|ÚmèÔ%ñš›\7Ù¥†8¼¦ˆ•ùäV%·rÍ´A»«Uk÷ð¬s\èók¶Å.ìÞo-¤U ܱR¸bþ^û ·Þ ÒÔ‘æ£'Ã<{á·¸oøßÄzC\m?Rš.Üíݵ†q¹±ž™>µu©êW+¶ãPº˜` I+7NM+±‰£¨F»c¾¹EôYXçIq}{pAžòâR:œ~t].¬jÚF§¥¤ê—¶°8’+›YÚ9#`r ²A¢º CâŸÄûùÖ{ïˆþ-¹•Whyµ‰Ý€ôÉ~•2JJÒÔ¨NTß4Ÿ‘ |IøŠØÏ¼Np03ªÏÇþ÷§cOø±ñNÁÙì~%x¾Ù˜‚ͳp„ã×îjEÝEËZK–Smz²Añ{âÀžIÇÄÿ�ù²¨Iûnãs¨$€Nþ@$ñîkWñ7‰5]ÿ�Úž Õo¼ÉLïö›·“t„’\䜱,Nzò}jœSÝlfªI^Ïr+m{]·¿’úßZÔ"º—&Iã¹uwÉÉË““Kqâ zâ÷í“ëzŒ·SCç=Ë—òØdÉ9ÚC0#¡Žô8EË™­AT’"zvèI¢x›Äš+«èþ ÕtöWóÚ]¼D7L¤sÀæ·?álüTòL_ð³<cå˜ÌE?¶n0Põ\oè})Ùn.yZ×"»ø£ñ6êB÷?|Y3¸´š¼ìIÀ\òþŠ£è v¨OÄ_ˆ%·ø›>¿Ú“ñU¥ ;É&ÍcŠ­Ë´½YgMø¯ñKN.tÿ�‰^/´2c‘¬Ü&ìtΚæ.oï®.yï.%•¾ô!,xÇ$ûUÅ(«GC)ÎU4ÝØÆ¹¸fÜÓÊN1’Æ%íì–ÑÛ½Üí D˜ãi TÏ\Ùª»&ÇÿÙ���������ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ����„��¤��� �0� �†  ��� !� À"���������0��@��������������� ������������������� �����(�����0�����4�����8�����@�����D�����P����`����€p�H������€���€���€���€���€���€������@���6���€���€��������������������������������� ������������� ��€Y€€Y€ �� � � � � � � � !��€Y€€Y€!�� � � � � � � � "��€§€¶€§€¶"�� � � � � � � � #��€€Ì€€Ì#�€ˆ€=€ˆ€=#�€„€Ç€„€Ç#�� � � � � � � � #�� � � � � � � � #�� � � � � � � � #�€ý€n€ý€n#�€£€˜€£€˜# �� � � � � � � � #!�� � � � � � � � $��€€€@€€€@$�� � � � � � � � $�€¯€Æ€¯€Æ$�� � � � � � � � /����€Y€€Y€€Y€€Y€€Y€€Y€€Y€€Y€€Y€€Y€��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/���� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/|���������������������������������������������������������������������������������������������������������ð�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/ð�€Y€€Y€/ô�� � � � � � � � 0��  €j¤%Ô ò[1����à@������������������@�ÿÿÿÿ@ �����������������A������P�� ������������P� ������������Pð� ������������Q�� ������������Q� ���������Q � ���������Q@� ���������QP� ���������`�”��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‚������‚ è�¹ÿ?�ÿÚ9ÿí�ÿö��������¹ÿ?�ÿÚ9ÿí�ÿö����¹ÿ?�ÿÚ9ÿí�ÿö����¤þU�ÿäcÿ¹�"þ˜F����þV�ÿñ€ÿÿúÿ'ß���cþÎÿÏÿíVÿ½ÿúþï���Áý×�hÿî���ÿã���ÿÿî�'ÿ¾�þÛ#���€þ¸ÿÈÿÖ�ÿãþü!����Xÿ�'ÿÒCÿëÿ?ÿ^c����¹ÿ?�ÿÚ9ÿí�ÿö����¹ÿ?�ÿÚ9ÿí�ÿö���¹ÿ?�ÿÚ9ÿí�ÿö���¹ÿ?�ÿÚ9ÿí�ÿö���¹ÿ?�ÿÚ9ÿí�ÿö���¹ÿ?�ÿÚ9ÿí�ÿö������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‚!è���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‚$l��� �� Ä�lÿ„�ÿË �*ÿÿ>§�� Œ�nÿƒ�ÿÒ�ÿ<ÿ;‰�� ð�nÿƒ�ÿÔ(�ÿKÿ:{�� ¸�pÿ‚�ÿÚ7ÿïÿfÿ8b��t�•ÿ`� ÿÚ8ÿîÿ·ÿ,��À�¹ÿ?�ÿÚ9ÿí�ÿö��à�Èÿ?ÿùÿÞJÿØ�ÿ�ï��,�Öÿ?ÿëÿâ[ÿÃ�þþç��#Œ�ýÿ=ÿÆÿòcÿ«�*þúÜ��'�ÿ=ÿ½ÿ÷eÿ¤�.þùÙ������������������������������������������������������������������������������������������������������������������������‚%l��� �� Ä������������������ Œ������������������ ð������������������ ¸������������������t������������������À������������������à������������������,������������������#Œ������������������'����������������������������������������������������������������������������������������������������������������������������������������‚(è�¶�õÿU�ÿT�%ÿ9¢��������¶�õÿU�ÿT�%ÿ9¢����¶�õÿU�ÿT�%ÿ9¢����Ê�0ÿÂ�<ÿç�1è�����¶�;�±�J�� ì���F�Îÿì�è����]Ÿ���Qÿ›ÿéSÿÄÿ÷� ÿ���Fÿ›ÿÓ…ÿ©ÿö� ê���ö4ÿÖ�0Iÿˆ��Ë����²�­ÿ¢ÿËpÿÅÿöÿè"����¶�õÿU�ÿT�%ÿ9¢����¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‚)è�¶�õÿU�ÿT�%ÿ9¢��������¶�õÿU�ÿT�%ÿ9¢����¶�õÿU�ÿT�%ÿ9¢����Ê�0ÿÂ�<ÿç�1è�����¶�;�±�J�� ì���F�Îÿì�è����]Ÿ���Qÿ›ÿéSÿÄÿ÷� ÿ���Fÿ›ÿÓ…ÿ©ÿö� ê���ö4ÿÖ�0Iÿˆ��Ë����²�­ÿ¢ÿËpÿÅÿöÿè"����¶�õÿU�ÿT�%ÿ9¢����¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‚,l��� �� Ä�ò�ÃÿK�,¾ÿ�ÿaŽ�� Œ�ð�¾ÿQ� ¡ÿ?�ÿk‚�� ð�ð�¼ÿT�•ÿO�ÿn}�� ¸�í�¹ÿZ�ÿn�ÿvs��t�Ð�ÙÿW�‰ÿ`�ÿ[‰��À�¶�õÿU�ÿT�%ÿ9¢��à�¶�öÿU�)yÿ^�$ÿ2ª��,�µ�õÿV�5cÿh�#ÿ*³��#Œ�º�åÿb�!Rÿ�!ÿ&¹��'�¼�àÿd�Nÿ˜� ÿ$¼������������������������������������������������������������������������������������������������������������������������‚-l��� �� Ä�ò�ÃÿK�,¾ÿ�ÿaŽ�� Œ�ð�¾ÿQ� ¡ÿ?�ÿk‚�� ð�ð�¼ÿT�•ÿO�ÿn}�� ¸�í�¹ÿZ�ÿn�ÿvs��t�Ð�ÙÿW�‰ÿ`�ÿ[‰��À�¶�õÿU�ÿT�%ÿ9¢��à�¶�öÿU�)yÿ^�$ÿ2ª��,�µ�õÿV�5cÿh�#ÿ*³��#Œ�º�åÿb�!Rÿ�!ÿ&¹��'�¼�àÿd�Nÿ˜� ÿ$¼������������������������������������������������������������������������������������������������������������������������„������„ ����„@� ���� „`����„€����†�`@�ª�A� ÿçÿá�ÿú�������������������������¿����ÿÒ��� ��� ����ÿþ��ÿþ���������������Ø�Š�Q��ÿê��ÿøÿöÿÿ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‡����‡����‡����‡����‡����‡ÿ����ˆ�����‹€Ž���������� ��!������������!0�����������!p���������"0���6����6��#����6����6��$����6����6��€���6����6��€���6����6��€���6����6��€���6����6��€�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‹��€�€‹‚ð���Æ����¸����������Æ����¸������Æ����¸������m�ÿïX������ÿâ�g(�������Ž5�����eÿâ�¢:�����ŒÿÞ r�����éÿáKë������3ÿèe"������Æ����¸������Æ����¸�����Æ����¸�����Æ����¸�����Æ����¸�����Æ����¸������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‹ƒð���Æ����¸����������Æ����¸������Æ����¸������m�ÿïX������ÿâ�g(�������Ž5�����eÿâ�¢:�����ŒÿÞ r�����éÿáKë������3ÿèe"������Æ����¸������Æ����¸�����Æ����¸�����Æ����¸�����Æ����¸�����Æ����¸������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‹„�ô��� �� Ä���žÿÇ�� Œ���ªÿÊ=p�� ð���¯ÿÌb�� ¸���¸ÿÎÕI��t���¿ÿç�è���À���Æ����¸��à���Ú� ÿÔ¬��,���î�ÿ¨Ÿ��#Œ����)ÿtp��'����.ÿgd��������������������������������������������������������������������������������‹…�ô��� �� Ä���žÿÇ�� Œ���ªÿÊ=p�� ð���¯ÿÌb�� ¸���¸ÿÎÕI��t���¿ÿç�è���À���Æ����¸��à���Ú� ÿÔ¬��,���î�ÿ¨Ÿ��#Œ����)ÿtp��'����.ÿgd��������������������������������������������������������������������������������‹†��€��€�†�€�€�€�z�€�s�€���€�€‹‡��€��€�†�€�€�€�z�€�s�€���€�€‹Ž���������� ��!������������!0�����������!p���������"0���6����6��#����6����6��$����6����6��€���6����6��€���6����6��€���6����6��€���6����6��€�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‹‘��€�€‹’ð���–���� ����������–���� ������–���� ������Ÿÿö�'������ŒÿÃ�á–�����ªÿï�ð€�����öÿè�µÐ�����Óÿá�ð �����ÿñ—e������?ÿêàT������–����0������–���� �����–���� �����–���� �����–���� �����–���� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‹“ð���–���� ����������–���� ������–���� ������Ÿÿö�'������ŒÿÃ�á–�����ªÿï�ð€�����öÿè�µÐ�����Óÿá�ð �����ÿñ—e������?ÿêàT������–����0������–���� �����–���� �����–���� �����–���� �����–���� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‹”�ô��� �� Ä���AÿÐWá�� Œ���CÿÕÝ�� ð���Eÿ×ïÛ�� ¸���GÿÛ´Ø��t���oÿî�Ø{��À���–���� ��à���³� ÿÞ��,���Ð�ÿ¼��#Œ���È�ÿƒ��'���Æ�"ÿu��������������������������������������������������������������������������������‹•�ô��� �� Ä���AÿÐWá�� Œ���CÿÕÝ�� ð���Eÿ×ïÛ�� ¸���GÿÛ´Ø��t���oÿî�Ø{��À���–���� ��à���³� ÿÞ��,���Ð�ÿ¼��#Œ���È�ÿƒ��'���Æ�"ÿu��������������������������������������������������������������������������������‹–��€��€�†�€�€�€�z�€�s�€���€�€‹—��€��€�†�€�€�€�z�€�s�€���€�€�� @€Àæð�� @€Àæð�‘� �� �����ÿÿÿúÿö %4���‘ � �� �����ÿÿÿúÿö %4���‘� ��������������������‘� ��������������������’����’��€�€�€�€�€�€�€�€“�� ��-� � ������������������������”������•"¼������������ ��� ��� �� ��� ��� �� ��� ��� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������•1�*������������������������������������������•@��‚��•P�����•`„��� ��!����€���€���€��!0�����������!p���‚���‚���‚��"0���ƒ���ƒ���ƒ��#����„���„���„��$����…���…���…��€���ƒ���ƒ���ƒ��€���ƒ���ƒ���ƒ��€���ƒ���ƒ���ƒ��€���ƒ���ƒ���ƒ��€���€���€���€����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������•À�L������d�d�d��d���d�7�d���d���d���d���d�d�d���d���d���d���d���d���d���d–��=�d–�����–P����d—�� �d�dô�d€�—�ÿÿúµ��è®0|�������(�<�P�d�x�Œ�´�Ü�������������������������������ÿÀ�������������ÿÀ���������������ÿÀ���������������ÿÀ������������������7ÿÕÿëÿã�����������i�ÿâÿÆÿßÿü��������ÿÅÿðÿõ�����������ÿð����ÿÀ������������������������������2Px��ª�€���€�Œ�€� �€�P�€�2�€���€�}�€ (2Àë����€ � ���€ � ���€ � ���€ � ���€ � ���€ � ��€��� ���€`� �@�@�€�€�€�€�€�€�€�€®1�h��„�Ž�/I���������������������������������������������&�&�&�&����������@�$�$�$���������@®8�8�ÿ�€�À�€�€�€�@�€�������€�€�€�ÿ�€�À�€�€�€�@�€�������€�€�€®<� �€�€�€�€�€�€®=� �€�€�M�€�€�€���„��¤��� �0� �†  ��� !� ¼"���������0��@��������������� ������������������� �����(�����0�����4�����8�����@�����D�����P����`����€p�H������€���€���€���€���€���€������@���6���€���€��������������������������������� ������������� ��€­€[€­€[ �� � � � � � � � !��€­€[€­€[!�� � � � � � � � "��€€€€"�� � � � � � � � #��€s€€s€#�€ã€Ÿ€ã€Ÿ#�€Þ€A€Þ€A#�� � � � � � � � #�� � � � � � � � #�� � � � � � � � #�€D€€D€#�€Ý€6€Ý€6# �� � � � � � � � #!�� � � � � � � � $��€¶€Ï€¶€Ï$�� � � � � � � � $�€€€€$�� � � � � � � � /����€­€[€­€[€­€[€­€[€­€[€­€[€­€[€­€[€­€[€­€[��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/���� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/|���������������������������������������������������������������������������������������������������������ð�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/ð�€­€[€­€[/ô�� � � � � � � � 0��  €j¤%Ô ò[1����à@������������������@�ÿÿÿÿ@ �����������������A������P�� ������������P� ������������Pð� ������������Q�� ������������Q� ���������Q � ���������Q@� ���������QP� ���������`�”��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‚������‚ è�¹ÿ?�ÿÚ9ÿí�ÿö��������¹ÿ?�ÿÚ9ÿí�ÿö����¹ÿ?�ÿÚ9ÿí�ÿö����¤þU�ÿäcÿ¹�"þ˜F����þV�ÿñ€ÿÿúÿ'ß���cþÎÿÏÿíVÿ½ÿúþï���Áý×�hÿî���ÿã���ÿÿî�'ÿ¾�þÛ#���€þ¸ÿÈÿÖ�ÿãþü!����Xÿ�'ÿÒCÿëÿ?ÿ^c����¹ÿ?�ÿÚ9ÿí�ÿö����¹ÿ?�ÿÚ9ÿí�ÿö���¹ÿ?�ÿÚ9ÿí�ÿö���¹ÿ?�ÿÚ9ÿí�ÿö���¹ÿ?�ÿÚ9ÿí�ÿö���¹ÿ?�ÿÚ9ÿí�ÿö������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‚!è���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‚$l��� �� Ä�lÿ„�ÿË �*ÿÿ>§�� Œ�nÿƒ�ÿÒ�ÿ<ÿ;‰�� ð�nÿƒ�ÿÔ(�ÿKÿ:{�� ¸�pÿ‚�ÿÚ7ÿïÿfÿ8b��t�•ÿ`� ÿÚ8ÿîÿ·ÿ,��À�¹ÿ?�ÿÚ9ÿí�ÿö��à�Èÿ?ÿùÿÞJÿØ�ÿ�ï��,�Öÿ?ÿëÿâ[ÿÃ�þþç��#Œ�ýÿ=ÿÆÿòcÿ«�*þúÜ��'�ÿ=ÿ½ÿ÷eÿ¤�.þùÙ������������������������������������������������������������������������������������������������������������������������‚%l��� �� Ä������������������ Œ������������������ ð������������������ ¸������������������t������������������À������������������à������������������,������������������#Œ������������������'����������������������������������������������������������������������������������������������������������������������������������������‚(è�¶�õÿU�ÿT�%ÿ9¢��������¶�õÿU�ÿT�%ÿ9¢����¶�õÿU�ÿT�%ÿ9¢����Ê�0ÿÂ�<ÿç�1è�����¶�;�±�J�� ì���F�Îÿì�è����]Ÿ���Qÿ›ÿéSÿÄÿ÷� ÿ���Fÿ›ÿÓ…ÿ©ÿö� ê���ö4ÿÖ�0Iÿˆ��Ë����²�­ÿ¢ÿËpÿÅÿöÿè"����¶�õÿU�ÿT�%ÿ9¢����¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‚)è�¶�õÿU�ÿT�%ÿ9¢��������¶�õÿU�ÿT�%ÿ9¢����¶�õÿU�ÿT�%ÿ9¢����Ê�0ÿÂ�<ÿç�1è�����¶�;�±�J�� ì���F�Îÿì�è����]Ÿ���Qÿ›ÿéSÿÄÿ÷� ÿ���Fÿ›ÿÓ…ÿ©ÿö� ê���ö4ÿÖ�0Iÿˆ��Ë����²�­ÿ¢ÿËpÿÅÿöÿè"����¶�õÿU�ÿT�%ÿ9¢����¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢���¶�õÿU�ÿT�%ÿ9¢������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‚,l��� �� Ä�ò�ÃÿK�,¾ÿ�ÿaŽ�� Œ�ð�¾ÿQ� ¡ÿ?�ÿk‚�� ð�ð�¼ÿT�•ÿO�ÿn}�� ¸�í�¹ÿZ�ÿn�ÿvs��t�Ð�ÙÿW�‰ÿ`�ÿ[‰��À�¶�õÿU�ÿT�%ÿ9¢��à�¶�öÿU�)yÿ^�$ÿ2ª��,�µ�õÿV�5cÿh�#ÿ*³��#Œ�º�åÿb�!Rÿ�!ÿ&¹��'�¼�àÿd�Nÿ˜� ÿ$¼������������������������������������������������������������������������������������������������������������������������‚-l��� �� Ä�ò�ÃÿK�,¾ÿ�ÿaŽ�� Œ�ð�¾ÿQ� ¡ÿ?�ÿk‚�� ð�ð�¼ÿT�•ÿO�ÿn}�� ¸�í�¹ÿZ�ÿn�ÿvs��t�Ð�ÙÿW�‰ÿ`�ÿ[‰��À�¶�õÿU�ÿT�%ÿ9¢��à�¶�öÿU�)yÿ^�$ÿ2ª��,�µ�õÿV�5cÿh�#ÿ*³��#Œ�º�åÿb�!Rÿ�!ÿ&¹��'�¼�àÿd�Nÿ˜� ÿ$¼������������������������������������������������������������������������������������������������������������������������„������„ ����„@� ���� „`����„€����†�`@�ª�A� ÿçÿá�ÿú�������������������������¿����ÿÒ��� ��� ����ÿþ��ÿþ���������������Ø�Š�Q��ÿê��ÿøÿöÿÿ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‡����‡����‡����‡����‡����‡ÿ����ˆ�����‹€Ž���������� ��!������������!0�����������!p���������"0���6����6��#����6����6��$����6����6��€���6����6��€���6����6��€���6����6��€���6����6��€�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‹��€�€‹‚ð���Æ����¸����������Æ����¸������Æ����¸������m�ÿïX������ÿâ�g(�������Ž5�����eÿâ�¢:�����ŒÿÞ r�����éÿáKë������3ÿèe"������Æ����¸������Æ����¸�����Æ����¸�����Æ����¸�����Æ����¸�����Æ����¸������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‹ƒð���Æ����¸����������Æ����¸������Æ����¸������m�ÿïX������ÿâ�g(�������Ž5�����eÿâ�¢:�����ŒÿÞ r�����éÿáKë������3ÿèe"������Æ����¸������Æ����¸�����Æ����¸�����Æ����¸�����Æ����¸�����Æ����¸������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‹„�ô��� �� Ä���žÿÇ�� Œ���ªÿÊ=p�� ð���¯ÿÌb�� ¸���¸ÿÎÕI��t���¿ÿç�è���À���Æ����¸��à���Ú� ÿÔ¬��,���î�ÿ¨Ÿ��#Œ����)ÿtp��'����.ÿgd��������������������������������������������������������������������������������‹…�ô��� �� Ä���žÿÇ�� Œ���ªÿÊ=p�� ð���¯ÿÌb�� ¸���¸ÿÎÕI��t���¿ÿç�è���À���Æ����¸��à���Ú� ÿÔ¬��,���î�ÿ¨Ÿ��#Œ����)ÿtp��'����.ÿgd��������������������������������������������������������������������������������‹†��€��€�†�€�€�€�z�€�s�€���€�€‹‡��€��€�†�€�€�€�z�€�s�€���€�€‹Ž���������� ��!������������!0�����������!p���������"0���6����6��#����6����6��$����6����6��€���6����6��€���6����6��€���6����6��€���6����6��€�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‹‘��€�€‹’ð���–���� ����������–���� ������–���� ������Ÿÿö�'������ŒÿÃ�á–�����ªÿï�ð€�����öÿè�µÐ�����Óÿá�ð �����ÿñ—e������?ÿêàT������–����0������–���� �����–���� �����–���� �����–���� �����–���� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‹“ð���–���� ����������–���� ������–���� ������Ÿÿö�'������ŒÿÃ�á–�����ªÿï�ð€�����öÿè�µÐ�����Óÿá�ð �����ÿñ—e������?ÿêàT������–����0������–���� �����–���� �����–���� �����–���� �����–���� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‹”�ô��� �� Ä���AÿÐWá�� Œ���CÿÕÝ�� ð���Eÿ×ïÛ�� ¸���GÿÛ´Ø��t���oÿî�Ø{��À���–���� ��à���³� ÿÞ��,���Ð�ÿ¼��#Œ���È�ÿƒ��'���Æ�"ÿu��������������������������������������������������������������������������������‹•�ô��� �� Ä���AÿÐWá�� Œ���CÿÕÝ�� ð���Eÿ×ïÛ�� ¸���GÿÛ´Ø��t���oÿî�Ø{��À���–���� ��à���³� ÿÞ��,���Ð�ÿ¼��#Œ���È�ÿƒ��'���Æ�"ÿu��������������������������������������������������������������������������������‹–��€��€�†�€�€�€�z�€�s�€���€�€‹—��€��€�†�€�€�€�z�€�s�€���€�€�� @€Àæð�� @€Àæð�‘� �� �����ÿÿÿúÿö %4���‘ � �� �����ÿÿÿúÿö %4���‘� ��������������������‘� ��������������������’����’��’�€�€�€�–�€�€�€“�� ��-� � ������������������������”������•"¼������������ ��� ��� �� ��� ��� �� ��� ��� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������•1�*������������������������������������������•@��‚��•P�����•`„��� ��!����À���À���À��!0���Á���Á���Á��!p���Â���Â���Â��"0���Ã���Ã���Ã��#����Ä���Ä���Ä��$����Å���Å���Å��€���Ã���Ã���Ã��€���Ã���Ã���Ã��€���Ã���Ã���Ã��€���Ã���Ã���Ã��€���À���À���À����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������•À�L������d�d�d��d���d�7�d���d���d���d���d�d�d���d���d���d���d���d���d���d–��=�d–�����–P����d—�� �d�dô�d€�—���]��è®0|�������(�<�P�d�x�Œ�´�Ü�������������������������������ÿÀ�������������ÿÀ���������������ÿÀ���������������ÿÀ������������������7ÿÕÿëÿã�����������i�ÿâÿÆÿßÿü��������ÿÅÿðÿõ�����������ÿð����ÿÀ������������������������������2Px��ª�€���€�Œ�€� �€�P�€�2�€���€�}�€ (2Àë����€ � ���€ � ���€ � ���€ � ���€ � ���€ � ��€��� ���€`� �@�@�€�€�€�€�€�€�€�€®1�h��„�Ž�/I���������������������������������������������&�&�&�&����������@�$�$�$���������@®8�8�ÿ�€�À�€�€�€�@�€�������€�€�€�ÿ�€�À�€�€�€�@�€�������€�€�€®<� �€�€�€�€�€�€®=� �€�€�M�€�€�€<Dummy raw image data><Dummy raw image data>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/GE.jpg����������������������������������������������������������������000644 �000765 �000024 �00000002673 11502004242 017066� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��`�`��ÿá¬Exif��MM�*���� �������’�������¤�������¸��������������¾�������Æ(�������1���� ���Î2�������Ú�������‡i�������î��*GE DIGITAL CAMERA�General Imaging Co.�E1035����`������`���GIMP 2.6.3��2009:07:05 23:58:52��‚š������\‚������dˆ"�������ˆ'�����@�������0221������l������€‘�����’� �����”’������œ’� �����¤’������¬’�������’��������’ �������’ ������´’|����Ü��¼’†����l��˜ �����0100 ������� �������� �������� ������ £��������¤��������¤��������¤��������¤������¤��������¤��������������2ó�B@��ü���d2008:09:17 04:18:57�2008:09:17 04:18:57���s���d��Õ���d������� ��Õ���d���á��� GE�������MM�*���� ����e���������������������������������š�������¢���������������ª����� ���°��������������������� ��� ��$þ��èE1035�GE DIGITAL CAMERA�����������������������������ASCII���R: 139 G: 255 B: 189 X:39852 Y: 0 S: 0 Zs: 6 Zp: 115 F: 531 I: 1 ImgVer:08.01.09.10 ���� ��� ������R98������0100������������������x������€(�������������ˆ�����������������`������`<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ���������������������������������������������������������������������Image-ExifTool-10.10/t/images/Geotag.gpx������������������������������������������������������������000644 �000765 �000024 �00000002746 11165457772 020051� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <gpx xmlns="http://www.topografix.com/GPX/1/0" version="1.0" creator="Wissenbach Map3D 2.21" xmlns:wissenbach="http://www.cableone.net/cdwissenbach" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.cableone.net/cdwissenbach http://www.cableone.net/cdwissenbach/wissenbach.xsd"> <trk><name>TESTTRK</name> <cmt>Test Track</cmt> <trkseg> <trkpt lat="43.641000" lon="-116.062231"><ele>1472.396484</ele><time>2003-05-24T17:10:05Z</time></trkpt> <trkpt lat="43.641086" lon="-116.062059"><ele>1474.319092</ele><time>2003-05-24T17:09:55Z</time></trkpt> <trkpt lat="43.641450" lon="-116.061802"><ele>1479.606201</ele><time>2003-05-24T17:09:46Z</time></trkpt> <trkpt lat="43.641751" lon="-116.062102"><ele>1481.528809</ele><time>2003-05-24T17:09:35Z</time></trkpt> <trkpt lat="43.641922" lon="-116.062338"><ele>1488.739014</ele><time>2003-05-24T17:09:28Z</time></trkpt> <trkpt lat="43.642030" lon="-116.061995"><ele>1491.622803</ele><time>2003-05-24T17:09:22Z</time></trkpt> <trkpt lat="43.642201" lon="-116.061738"><ele>1496.429443</ele><time>2003-05-24T17:09:17Z</time></trkpt> <trkpt lat="43.642545" lon="-116.061587"><ele>1502.677979</ele><time>2003-05-24T17:09:10Z</time></trkpt> <trkpt lat="43.642824" lon="-116.061502"><ele>1507.003906</ele><time>2003-05-24T17:09:04Z</time></trkpt> </trkseg> </trk> </gpx> ��������������������������Image-ExifTool-10.10/t/images/Geotag.igc������������������������������������������������������������000644 �000765 �000024 �00000001433 11325134616 017770� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������AXMP eTrex Venture HC Software Version 3.10 - 695 HFDTE050110 HOPLTPILOT: Josef Klein HOGTYGLIDERTYPE: Swing Powerplay HOGIDGLIDERID: 001 HOCIDCOMPETITIONID: DHV-OLC-2005 HODTM100GPSDATUM: WGS-84 HOCCLCOMPETITION CLASS: Paraglider Tandem HOSITSite: Felsberg B0723154916430N00643910EA0000000443 B0731584915416N00645637EA0000000620 B0742154913984N00648753EA0000000623 B0753514911464N00650599EA0000000774 B0805384909414N00653521EA0000000994 B0813484908365N00653982EA0000001152 B0824344910245N00649184EA0000000990 B0836044913533N00645664EA0000000936 B0846224917082N00642530EA0000000493 B0852564917363N00642421EA0000000259 LXMP MaxPunkte_Comp_6.2.2 LXMP Thursday 07.01.2010 21:23:09 LXMP Val2.2 GMaxPunkte 1887F85651F8CAD288F2DE8A2BD3D06C44FB1A83 GMaxPunkte 5FFF1DF9967C1F0B622473365EC1320B69AFEA3B �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Geotag.kml������������������������������������������������������������000644 �000765 �000024 �00000002717 12240751110 020006� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom"> <Document> <name>Location history from 11/13/2013 to 11/13/2013</name> <open>1</open> <description/> <StyleMap id="multiTrack"> <Pair> <key>normal</key> <styleUrl>#multiTrack_n</styleUrl> </Pair> <Pair> <key>highlight</key> <styleUrl>#multiTrack_h</styleUrl> </Pair> </StyleMap> <Style id="multiTrack_n"> <IconStyle> <Icon> <href>http://earth.google.com/images/kml-icons/track-directional/track-0.png</href> </Icon> </IconStyle> <LineStyle> <color>99ffac59</color> <width>6</width> </LineStyle> </Style> <Style id="multiTrack_h"> <IconStyle> <scale>1.2</scale> <Icon> <href>http://earth.google.com/images/kml-icons/track-directional/track-0.png</href> </Icon> </IconStyle> <LineStyle> <color>99ffac59</color> <width>8</width> </LineStyle> </Style> <Placemark> <name>Latitude User</name> <description>Location history for Latitude User from 11/13/2013 to 11/13/2013</description> <styleUrl>#multiTrack</styleUrl> <gx:Track> <altitudeMode>clampToGround</altitudeMode> <when>2013-11-13T01:03:34.245-08:00</when> <gx:coord>-106.026069 34.166232 0</gx:coord> <when>2013-11-13T01:04:35.259-08:00</when> <gx:coord>-106.027012 34.165476 0</gx:coord> <when>2013-11-13T01:05:35.277-08:00</when> <gx:coord>-106.027854 34.164765 0</gx:coord> </gx:Track> </Placemark> </Document> </kml> �������������������������������������������������Image-ExifTool-10.10/t/images/Geotag.log������������������������������������������������������������000644 �000765 �000024 �00000001421 11165457772 020021� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������$PMGNTRK,4415.163,N,07631.126,W,00095,M,110833.53,A,,030409*68 $PMGNTRK,4414.765,N,07631.087,W,00100,M,110905.52,A,,030409*6B $PMGNTRK,4414.711,N,07631.117,W,00099,M,110920.53,A,,030409*67 $PMGNTRK,4414.662,N,07631.160,W,00100,M,111021.54,A,,030409*6D $PMGNTRK,4414.492,N,07631.159,W,00101,M,111045.54,A,,030409*69 $PMGNTRK,4414.372,N,07631.145,W,00101,M,111103.53,A,,030409*69 $PMGNTRK,4414.145,N,07630.915,W,00104,M,111133.53,A,,030409*65 $PMGNTRK,4413.791,N,07630.854,W,00099,M,111210.54,A,,030409*69 $PMGNTRK,4413.425,N,07630.765,W,00095,M,111326.54,A,,030409*60 $PMGNTRK,4413.633,N,07630.004,W,00092,M,111441.53,A,,030409*63 $PMGNTRK,4413.584,N,07629.988,W,00089,M,111454.53,A,,030409*67 $PMGNTRK,4413.488,N,07629.969,W,00085,M,111515.54,A,,030409*6A $PMGNCMD,END*3D �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Geotag.xml������������������������������������������������������������000644 �000765 �000024 �00000001250 11165704033 020021� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" ?> <History xmlns="http://www.garmin.com/xmlschemas/ForerunnerLogbook" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.garmin.com/xmlschemas/ForerunnerLogbook http://www.garmin.com/xmlschemas/ForerunnerLogbookv1.xsd" version="1"> <Run> <Track> <Trackpoint> <Position> <Latitude>43.64986</Latitude> <Longitude>-79.58321</Longitude> <Altitude>142.893</Altitude> </Position> <Time>2004-08-28T13:45:00Z</Time> </Trackpoint> <Trackpoint> <Position> <Latitude>43.64987</Latitude> <Longitude>-79.58320</Longitude> <Altitude>150.374</Altitude> </Position> <Time>2004-08-28T14:15:00Z</Time> </Trackpoint> </Track> </Run> </History> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Geotag2.log�����������������������������������������������������������000644 �000765 �000024 �00000000552 11710662020 020063� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������$PTNTHPR,254.7,N,-1.7,N,-12.1,N,A*6E $GPRMC,112723.000,A,5040.3182,N,00505.9469,E,28.66,138.74,240410,,,A*51 $PTNTHPR,253.9,N,-2.2,N,-10.7,N,A*6C $GPRMC,112742.000,A,5040.2023,N,00506.1107,E,27.89,139.01,240410,,,A*56 $PTNTHPR,260.5,N,-7.5,N,-9.3,N,A*73 $GPRMC,112802.000,A,5040.0932,N,00506.2621,E,25.54,138.58,240410,,,A*59 $PTNTHPR,254.3,N,-3.7,N,-5.5,N,A*7E ������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Geotag3.log�����������������������������������������������������������000644 �000765 �000024 �00000000574 12520456142 020076� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ 1 0001 42.721544 61.671879 249 25.21 21/04/2014 07:06:41 25.21 5.90 3.27 ypr 1 0002 42.721664 61.672028 250 21.94 21/04/2014 07:06:42 21.94 7.33 1.26 ypr 1 0003 42.721786 61.672173 249 28.36 21/04/2014 07:06:43 28.36 6.42 0.34 ypr 1 0004 42.721910 61.672337 248 22.98 21/04/2014 07:06:44 22.98 5.50 -0.80 ypr������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/GeoTiff.tif�����������������������������������������������������������000644 �000765 �000024 �00000005144 10336164711 020130� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������MM�*��F� ü€��'� ü€��'@@µ~ds@Aë 衽��������A%æTÔ‰Ž@Aë 衽À@µ~ds��������AEL~¼s&��������������������������������������������������������?ð������AXTÇ€���AX?ΕûXHough UTM zone 17N|�������������������������������������������������� �������������ÿ‡±������ÿ ‡°��� ‡°�� ����ÿ ‡±��� ���>‘���������������������������������������������� �������������X��������������(�������@������ …Ø� ������‡¯����,���臰� ������˜‡±����@���¨����ÿÿý›û8øÕörôñ¬ïIìæêƒè å½ãZà÷Þ”Ü1ÙÎ×kÕÒ¥ÐBÍßË{ÉƵÄRÁᅩ½)ºÆ¸c¶�³±:®×¬tª§®¥K¢è …ž"›¿™[–ø”•’2Ïl‹ ˆ¦†Cƒà}|·zTwñuŽs+pÈneliŸg<e˜cõbQ`®_ ]g[ÃZ X|VÙU5S’QîPKN§MK`I½HFvDÒC/A‹?è>D<¡:ý9Z7¶64o2Ì1(/…-á,>*š(÷'S%°$ "i Å"~Û7”ðM©b¿  x Ô1êF£��������������������������������������������������?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿþþþþþþþþþþþþþþþþþþþþþþþþ¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ý¿ýÿüÿüÿüÿüÿüÿüÿüÿüÿüÿüÿüÿüÿüÿüÿüÿüÿüÿüÿüÿüÿüÿüÿüÿü��$’I$m¶’H¶ÚÛlÿÿÿÿþ{ü÷ûsùïøköçõcóàò\ðØïTíÐìLêÈéEçÁæ=ä¹ã5á±à-ÞªÝ&Û¢ÚØš×Õ’ÔÒ‹ÑσÍÿÌ{Ê÷ÉtÇðÆlÄèÃdÁàÀ\¾Ù½U»ÑºM¸É·EµÁ´>²º±6¯²®.¬ª«&©£¨¦›¥£“¢ ‹Ÿœ™û—u”ï’hâ\ŠÖˆP…ɃC€½~7{°y*v¤tq˜ol‹jgdøbr_ì]fZàXYUÓSMPÇN@KºI4F®D(A¡?<•:7ˆ52|/ö-p*é(c%Ý#W ÐJÄ>¸1«% Ÿ ’ †����������?ÿ?ÿ?ÿ?ÿ?ÿþþþþþ¿ý¿ý¿ý¿ý¿ýÿüÿüÿüÿüÿü����������?ÿ?ÿ?ÿ?ÿþþþþþ¿ý¿ý¿ý¿ý¿ýÿüÿüÿüÿüÿü����������?ÿ?ÿ?ÿ?ÿ?ÿþþþþ¿ý¿ý¿ý¿ý¿ýÿüÿüÿüÿüÿü����������?ÿ?ÿ?ÿ?ÿ?ÿþþþþþ¿ý¿ý¿ý¿ýÿüÿüÿüÿüÿü����������?ÿ?ÿ?ÿ?ÿ?ÿþþþþþ¿ý¿ý¿ý¿ý¿ýÿüÿüÿüÿü��$’I$m¶’H¶ÚÛlÿÿÿÿýƒûø‹öó“ñî›ìé£ç'ä¬â0ß´Ý8Ú¼Ø@ÕÄÓHÐÌÎPËÔÉYÆÝÄaÁå¿i¼íºq·õµy²ý°‚®«Š©¦’¤¡šŸœ¢š&—ª•/’³7»‹?ˆÃ†GƒËO~Ó|WyÜw`tärhoìmpjôhxeüc€a_z]ð\fZÜYQWÇV=T³S(QžPNŠLÿKuIëHaFÖELCÂB8@®?#=™<:…8ú7p5æ4\2Ñ1G/½.3,¨+)”( &$õ#k!á WÌB¸.£zðf Ü Q Ç =³(žŠ��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��þ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿþÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ýÿü��?ÿþ¿ý��$’I$m¶’H¶ÚÛlÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/GIF.gif���������������������������������������������������������������000644 �000765 �000024 �00000004421 11652535440 017175� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������GIF89a��÷�1ÿÿÿÿÿÌÿÿ™ÿÿfÿÿ3ÿÿ�ÿÌÿÿÌÌÿÌ™ÿÌfÿÌ3ÿÌ�ÿ™ÿÿ™Ìÿ™™ÿ™fÿ™3ÿ™�ÿfÿÿfÌÿf™ÿffÿf3ÿf�ÿ3ÿÿ3Ìÿ3™ÿ3fÿ33ÿ3�ÿ�ÿÿ�Ìÿ�™ÿ�fÿ�3ÿ��ÌÿÿÌÿÌÌÿ™ÌÿfÌÿ3Ìÿ�ÌÌÿÌÌÌÌÌ™ÌÌfÌÌ3ÌÌ�Ì™ÿÌ™ÌÌ™™Ì™fÌ™3Ì™�ÌfÿÌfÌÌf™ÌffÌf3Ìf�Ì3ÿÌ3ÌÌ3™Ì3fÌ33Ì3�Ì�ÿÌ�ÌÌ�™Ì�fÌ�3Ì��™ÿÿ™ÿÌ™ÿ™™ÿf™ÿ3™ÿ�™Ìÿ™Ì̙̙™Ìf™Ì3™Ì�™™ÿ™™Ì™™™™™f™™3™™�™fÿ™fÌ™f™™ff™f3™f�™3ÿ™3Ì™3™™3f™33™3�™�ÿ™�Ì™�™™�f™�3™��fÿÿfÿÌfÿ™fÿffÿ3fÿ�fÌÿfÌÌfÌ™fÌffÌ3fÌ�f™ÿf™Ìf™™f™ff™3f™�ffÿffÌff™fffff3ff�f3ÿf3Ìf3™f3ff33f3�f�ÿf�Ìf�™f�ff�3f��3ÿÿ3ÿÌ3ÿ™3ÿf3ÿ33ÿ�3Ìÿ3ÌÌ3Ì™3Ìf3Ì33Ì�3™ÿ3™Ì3™™3™f3™33™�3fÿ3fÌ3f™3ff3f33f�33ÿ33Ì33™33f33333�3�ÿ3�Ì3�™3�f3�33���ÿÿ�ÿÌ�ÿ™�ÿf�ÿ3�ÿ��Ìÿ�ÌÌ�Ì™�Ìf�Ì3�Ì��™ÿ�™Ì�™™�™f�™3�™��fÿ�fÌ�f™�ff�f3�f��3ÿ�3Ì�3™�3f�33�3���ÿ��Ì��™��f��3î��Ý��»��ª��ˆ��w��U��D��"�����î��Ý��»��ª��ˆ��w��U��D��"�����î��Ý��»��ª��ˆ��w��U��D��"��îîîÝÝÝ»»»ªªªˆˆˆwwwUUUDDD"""���!þÿSCANNERMAKER: Canon SCANNER: Canon EOS DIGITAL REBEL SOFTWARE: GraphicConverter DATE: 2004:02:20 08:07:49 DESCRIPTION: The picture caption Ignored Tags: $02BC, $9000, $9004, $9101, $9286, $A000, $A001, $A002, $A003, $A20E, $A20F, $A210, $A217, $A300, $A401, $A402, $A403, $A406 �!ÿ XMP DataXMP<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 7.27'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:title> <rdf:Alt> <rdf:li xml:lang='x-default'>GIF with XMP</rdf:li> </rdf:Alt> </dc:title> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>ÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓÒÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥¤£¢¡ Ÿžœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚€~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  ��!ÿ ICCRGBG1012ÿ��ìNKON ��mntrRGB XYZ Ï� ���;�acspAPPL����none�����������������öÖ�����Ó-��������������������������������������������������� desc���ð���MrXYZ��@���gXYZ��T���bXYZ��h���rTRC��|���gTRC��Œ���bTRC��œ���wtpt��¬���cprt��À���,desc�������Nikíon Adobe RGB 4.0.0.3000�����������Nikon Adobe RGB 4.0.0.3000����XYZ ������œ��O¦��üXYZ ������4‹�� +��•XYZ ������&2��/��¾ curv�������3��curv�������3��curv�������3��XYZ ������óT����Ïtext����Nikon Inc. & Nikon Corporation 2001��,��������GH° Áƒ*L�;�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/GIMP.xcf��������������������������������������������������������������000644 �000765 �000024 �00000004545 11453404121 017334� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gimp xcf file�����������������������B��B�������������������������%���gimp-metadata������‘GIMP_XMP_1<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:creator> <rdf:Seq> <rdf:li>Phil Harvey</rdf:li> </rdf:Seq> </dc:creator> <dc:description> <rdf:Alt> <rdf:li xml:lang='x-default'>ExifTool XCF test</rdf:li> </rdf:Alt> </dc:description> <dc:rights> <rdf:Alt> <rdf:li xml:lang='x-default'>Free for all</rdf:li> </rdf:Alt> </dc:rights> <dc:title> <rdf:Alt> <rdf:li xml:lang='x-default'>Test Picture</rdf:li> </rdf:Alt> </dc:title> </rdf:Description> <rdf:Description xmlns:xmpRights='http://ns.adobe.com/xap/1.0/rights/'> <xmpRights:WebStatement rdf:resource='http://owl.phy.queensu.ca/~phil/exiftool/' /> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='r'?> ��� exif-data������DExif��MM�*���� ����#���†��������������ª�������²(�������1�������º2�������Î;���� ���ₘ���� ���î‡i�������ü����This is a teeny weeny white square�����H������H���Adobe Photoshop 7.0�2005:07:18 08:27:14�Phil Harvey�Free for all��������0210 �����0100 ����ÿÿ�� ������� �������������� icc-profile������ì��ìNKON ��mntrRGB XYZ Ï� ���;�acspAPPL����none�����������������öÖ�����Ó-��������������������������������������������������� desc���ð���MrXYZ��@���gXYZ��T���bXYZ��h���rTRC��|���gTRC��Œ���bTRC��œ���wtpt��¬���cprt��À���,desc�������Nikon Adobe RGB 4.0.0.3000�����������Nikon Adobe RGB 4.0.0.3000����XYZ ������œ��O¦��üXYZ ������4‹�� +��•XYZ ������&2��/��¾ curv�������3��curv�������3��curv�������3��XYZ ������óT����Ïtext����Nikon Inc. & Nikon Corporation 2001����gimp-image-grid�������(style solid) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 10.000000) (yspacing 10.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) �����������Œ��������������������� Background�����������������ÿ������������ ���������� ���������� ���������� ���������� �������������������������������������������������� ;��������������� O������������ _����?ÿ?ÿ?ÿ�����������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/GPS.jpg���������������������������������������������������������������000644 �000765 �000024 �00000004125 11075136502 017230� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá2Exif��II*���������Â���� ���Ò���� ���Ü��������������ê�������ò���(�������1����ú���2������;� ���"�������������.��˜‚����^��i‡����z��%ˆ������°��Communications��FUJIFILM��FinePixS1Pro��,�����,�����Adobe Photoshop 7.0�2002:07:19 13:28:10�Ian Britton��������ÿ������€������ÿ������€������ÿ������ian Britton - FreeFoto.com���‚���� ��"ˆ�������'ˆ�������������0200����¨������¼��‘�����’ ����Ð��’����Ø��’ ����à��’ ����è��’������� ’�������� ’����ð��� ����0100 ������� ����` �� ����@��¢����ø��¢�������¢�������¢��������£��������£��������������@���d2002:07:13 15:58:28�2002:07:13 15:58:28����L������`��� �����dÿÿÿ¾���d��������� ����� ������������������N��������b�������W��������z�������’�������ª������6������2��d����������������m��d����������������:������������WGS84�������������þ��������(������������������������H������H������<Dummy thumbnail image data>ÿí.Photoshop 3.0�8BIM�������x�Communicationsz� Ian Brittoni�CommunicationsP� Ian BrittonU� Photographern� Ian Brittons� FreeFoto.com�Communications7�20020620Z� _� e�United Kingdom�BUS�Communications �5�Communicationst�ian Britton - FreeFoto.com�ÿÛ�„�      ÿÄ¢���������� ������� ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùú��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ��P�x"�ÿÚ� ��?�üª¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(�¢Š(ÿÙ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/HTML.html�������������������������������������������������������������000644 �000765 �000024 �00000006517 11412237716 017542� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>ExifTool HTML Test</title> <meta http-equiv="Content-type" content='text/html; charset="iso-8859-1"' /> <!-- Note: The HTML standard uses a '.' namespace separator (ie. "dc.title"), but a ':' is used in the Daisy specification, as below --> <meta name="dc:title" content="ExifTool HTML Test" /> <meta name="dc:creator" content="Phil Harvey" /> <meta name="dc:creator" content="Another Creator" /> <meta name="dc:date" content="2007-30-01" scheme="yyyy-mm-dd" /> <meta name="dc:format" content="Daisy 2.02" /> <meta name="dc:identifier" content="DTB00345" /> <meta name="dc:language" content="EN" scheme="ISO 639" /> <meta name="dc:publisher" content="TPB" /> <meta name="dc:source" content="0-065-01022-1" scheme="ISBN" /> <meta name="dc:subject" content="Greek: &alpha; &beta; &gamma;" /> <meta name="ncc:sourceDate" content="1993" scheme="yyyy" /> <meta name="ncc:sourceEdition" content="1" /> <meta name="ncc:sourcePublisher" content="Phil's Desktop" /> <meta name="ncc:charset" content="iso-8859-1" /> <meta name="ncc:generator" content="ExifTool 6.73" /> <meta name="ncc:narrator" content="a narrator" /> <meta name="ncc:tocItems" content="1024" /> <meta name="ncc:totalTime" content="91:27:21" scheme="hh:mm:ss" /> <meta name="ncc:pageNormal" content="881" /> <meta name="ncc:maxPageNormal" content="881" /> <meta name="ncc:pageFront" content="27" /> <meta name="ncc:pageSpecial" content="45" /> <meta name="ncc:prodNotes" content="0" /> <meta name="ncc:footnotes" content="0" /> <meta name="ncc:sidebars" content="0" /> <meta name="ncc:setInfo" content="1 of 3" /> <meta name="ncc:depth" content="4" /> <meta name="ncc:kByteSize" content="1530000" /> <meta name="ncc:multimediaType" content="audioNCC" /> <meta name="ncc:files" content="97" /> <meta name="prod:recLocation" content="Studio 2" /> <meta name="prod:recEngineer" content="P Harvey" /> <!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Subject>a subject</o:Subject> <o:Author>an author</o:Author> <o:Keywords>keyword1, keyword2</o:Keywords> <o:Description>a comments&#13;a new line</o:Description> <o:Template>Normal.dotm</o:Template> <o:LastAuthor>Phil Harvey</o:LastAuthor> <o:Revision>2</o:Revision> <o:TotalTime>1</o:TotalTime> <o:Created>2010-06-28T23:52:00Z</o:Created> <o:LastSaved>2010-06-28T23:52:00Z</o:LastSaved> <o:Pages>1</o:Pages> <o:Words>84</o:Words> <o:Characters>324</o:Characters> <o:Category>a catégory</o:Category> <o:Manager>a manager</o:Manager> <o:Company>a company</o:Company> <o:Lines>26</o:Lines> <o:Paragraphs>26</o:Paragraphs> <o:CharactersWithSpaces>382</o:CharactersWithSpaces> <o:Version>12.0</o:Version> </o:DocumentProperties> <o:CustomDocumentProperties> <o:Checked_x0020_by dt:dt="string">Phil</o:Checked_x0020_by> <o:test1 dt:dt="boolean">1</o:test1> <o:test2 dt:dt="float">15</o:test2> <o:test3 dt:dt="date">2010-02-05T05:00:00Z</o:test3> <o:test4 dt:dt="string">text</o:test4> </o:CustomDocumentProperties> <o:OfficeDocumentSettings> <o:AllowPNG/> </o:OfficeDocumentSettings> </xml><![endif]--> </head> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/InDesign.indd���������������������������������������������������������000644 �000765 �000024 �00000030000 11216743130 020422� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������íõØFå½1ïçþt·DOCUMENT��p�����������¬����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���N©���������¿O������ ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‡���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ñc~¬íõØFå½1ïçþt·DOCUMENT��p������������¬����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���N©���������¿O������ ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‡���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ïc¤ŒÞ99yQˆKlŽcîø®àÝ8��€���Àe��ÿÿÿÿ��a<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description rdf:about='d5d09d4b-2831-11dc-bfa2-d89eae7bab84' xmlns:pdf='http://ns.adobe.com/pdf/1.3/'> </rdf:Description> <rdf:Description rdf:about='d5d09d4b-2831-11dc-bfa2-d89eae7bab84' xmlns:tiff='http://ns.adobe.com/tiff/1.0/'> </rdf:Description> <rdf:Description rdf:about='d5d09d4b-2831-11dc-bfa2-d89eae7bab84' xmlns:xap='http://ns.adobe.com/xap/1.0/'> <xap:CreateDate>2007-06-30T00:19:02Z</xap:CreateDate> <xap:CreatorTool>Adobe InDesign 3.0</xap:CreatorTool> <xap:MetadataDate>2007-06-30T00:19:17Z</xap:MetadataDate> <xap:ModifyDate>2007-06-30T00:19:17Z</xap:ModifyDate> </rdf:Description> <rdf:Description rdf:about='d5d09d4b-2831-11dc-bfa2-d89eae7bab84' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'> <xapMM:DocumentID>adobe:docid:indd:d5d09d4a-2831-11dc-bfa2-d89eae7bab84</xapMM:DocumentID> <xapMM:RenditionClass>default</xapMM:RenditionClass> </rdf:Description> <rdf:Description rdf:about='d5d09d4b-2831-11dc-bfa2-d89eae7bab84' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:format>application/x-indesign</dc:format> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>ýÎÛp÷†KO¤ÓÇ(³Aq��€���Àe��ÿÿÿÿ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/IPTC.jpg��������������������������������������������������������������000644 �000765 �000024 �00000023217 11510412103 017325� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��H�H��ÿí%pPhotoshop 3.0�8BIM����g���x�A witty captionz� I wrote iti� No headline(�What instructionsP� Phil HarveyU� My Positionn� My Credit�Test IPTC picture7�20040226Z�Kingston_�Onte�Canadag� What is a transmission reference�1�amazing�image� utilities�ExifTool�Testt�Copyright 2004 Phil Harvey �8s�I'm the source�IPTC�8BIM%�����­p±©_—ˆ¬™_¦GÚ8BIMê����­<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.print.PageFormat.PMHorizontalRes</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PageFormat.PMHorizontalRes</key> <real>72</real> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2004-02-26T14:28:08Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PageFormat.PMOrientation</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PageFormat.PMOrientation</key> <integer>1</integer> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2004-02-26T14:28:08Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PageFormat.PMScaling</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PageFormat.PMScaling</key> <real>1</real> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2004-02-26T14:28:08Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PageFormat.PMVerticalRes</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PageFormat.PMVerticalRes</key> <real>72</real> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2004-02-26T14:28:08Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PageFormat.PMVerticalScaling</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PageFormat.PMVerticalScaling</key> <real>1</real> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2004-02-26T14:28:08Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.subTicket.paper_info_ticket</key> <dict> <key>com.apple.print.PageFormat.PMAdjustedPageRect</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PageFormat.PMAdjustedPageRect</key> <array> <real>0.0</real> <real>0.0</real> <real>734</real> <real>576</real> </array> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2004-02-26T14:35:36Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PageFormat.PMAdjustedPaperRect</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PageFormat.PMAdjustedPaperRect</key> <array> <real>-18</real> <real>-18</real> <real>774</real> <real>594</real> </array> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2004-02-26T14:35:36Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PaperInfo.PMPaperName</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.print.pm.PostScript</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PaperInfo.PMPaperName</key> <string>na-letter</string> <key>com.apple.print.ticket.client</key> <string>com.apple.print.pm.PostScript</string> <key>com.apple.print.ticket.modDate</key> <date>2000-07-28T22:57:04Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>1</integer> </dict> </array> </dict> <key>com.apple.print.PaperInfo.PMUnadjustedPageRect</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.print.pm.PostScript</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PaperInfo.PMUnadjustedPageRect</key> <array> <real>0.0</real> <real>0.0</real> <real>734</real> <real>576</real> </array> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2004-02-26T14:28:08Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PaperInfo.PMUnadjustedPaperRect</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.print.pm.PostScript</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PaperInfo.PMUnadjustedPaperRect</key> <array> <real>-18</real> <real>-18</real> <real>774</real> <real>594</real> </array> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2004-02-26T14:28:08Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PaperInfo.ppd.PMPaperName</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.print.pm.PostScript</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PaperInfo.ppd.PMPaperName</key> <string>Letter</string> <key>com.apple.print.ticket.client</key> <string>com.apple.print.pm.PostScript</string> <key>com.apple.print.ticket.modDate</key> <date>2000-07-28T22:57:04Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>1</integer> </dict> </array> </dict> <key>com.apple.print.ticket.APIVersion</key> <string>00.20</string> <key>com.apple.print.ticket.privateLock</key> <false/> <key>com.apple.print.ticket.type</key> <string>com.apple.print.PaperInfoTicket</string> </dict> <key>com.apple.print.ticket.APIVersion</key> <string>00.20</string> <key>com.apple.print.ticket.privateLock</key> <false/> <key>com.apple.print.ticket.type</key> <string>com.apple.print.PageFormatTicket</string> </dict> </plist> �8BIMé�����x����H�H����Þ@ÿîÿîRg(ü����H�H����Ø(����d�������ÿ��������������h������ ��������������������������8BIMí������H�����H����8BIM&���������������?€��8BIM ��������8BIM��������8BIMó����� ���������8BIM �������8BIM �����)http://owl.phy.queensu.ca/~phil/exiftool/�8BIM'����� ��������8BIMõ�����H�/ff��lff�������/ff��¡™š�������2����Z���������5����-��������8BIMø�����p��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè��8BIM����������@��@����8BIM���������8BIM����=��������������P���d����I�P�T�C���������������������������������d���P��������������������������������������������null������boundsObjc���������Rct1�������Top long��������Leftlong��������Btomlong���P����Rghtlong���d���slicesVlLs���Objc��������slice������sliceIDlong�������groupIDlong�������originenum��� ESliceOrigin��� autoGenerated����Typeenum��� ESliceType����Img ���boundsObjc���������Rct1�������Top long��������Leftlong��������Btomlong���P����Rghtlong���d���urlTEXT���������nullTEXT���������MsgeTEXT��������altTagTEXT��������cellTextIsHTMLbool���cellTextTEXT�������� horzAlignenum���ESliceHorzAlign���default��� vertAlignenum���ESliceVertAlign���default��� bgColorTypeenum���ESliceBGColorType����None��� topOutsetlong������� leftOutsetlong������� bottomOutsetlong������� rightOutsetlong�����8BIM��������8BIM!�����U�������A�d�o�b�e� �P�h�o�t�o�s�h�o�p����A�d�o�b�e� �P�h�o�t�o�s�h�o�p� �7�.�0����8BIM����������ÿî�Adobe�d����ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/ITC.itc���������������������������������������������������������������000644 �000765 �000024 �00000001240 10742273715 017220� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������itch�������������artw������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������„item���Ð�������������‘Jmà'–Wp^K¢¶loclPNGf���������ÿÿÿÿÿÿÿÿÿÿÿÿ��������������������������������������������������������������������������������������������������������������������������������data‰PNG  ��� IHDR���������Km)Ü���gAMA��ÙBÖO¡��� pHYs�� �� �šœ���"tEXtSoftware�QuickTime 7.3 (Mac OS X)�#mÁ���tIMEØ 2.Í×ö���IDATxœcüÿÿ?6À„UtÐJ��VÔ 7ìÌ£����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/iWork.numbers���������������������������������������������������������000644 �000765 �000024 �00000002517 11276611420 020570� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������PK �����Ãtk;çaCú��������QuickLook/Thumbnail.jpgUT �ûJûJUx�õõ<Dummy preview image data> PK �����²tk;^ü¶��������QuickLook/Preview.pdfUT �€ûJ€ûJUx�õõ<Dummy preview PDF data> PK����ttk;'úgâî���ƒ����buildVersionHistory.plistUT � ûJíûJUx�õõÑÑJÃ0àkû1÷éI¢Û2É:t­0([Áî«ѭeÛ4¤™uooæ"ˆäöðåÏŸ9ÿlôQ™¾îÔ ³bT©}WÖê0Ûü™<y¯ùk– ÝÔ½EÙæ)].&�Z7@œÇ(K—/9r�É #üf­~�†!,Î*Üwíö™NWÆžRFܰ´%v×\ÒÕqÓ˜â7²·ÆõŠÔ±Ý9B¬9ªwÂ)tBù–I¸‚ÿ)¿÷¦wÌ— .¶ÜN™w×)yS>ö¤Œz–£Ïg1Êþ.0JÄøg,áºM ßËŽ‚/PK����-_k;S¡¸Ã���� ��index.xmlUT �õìúJíûJUx�õõSMoœ0½çWX>µRÀ6°  ˆÍ*R¥$ª´9ôêšÉB ÙβüûšÏn"¡ÆÈÒŒç½7ÏpswªJt¥ Y'˜¹ßÝ^Ü”:Τx¯ 6ÈjëWžàܘ&&$ƒ#”²åò¦)Á²"5¯@7\€&ŠÖ×I3礋…Ô¶­Ûú®TâQÊȯ§Ç½È¡âNQkÃk3«Ô_ÍTjŒl}KÍ‘UõJ1²wìü¸ßMõ?É J‡.Lq„Óàúaç)Mw,}ð¶”Þo£­Çè´p[Ô™løˆE1›…v÷³ÉÍ¢ªN[d&· ýù$‡â›{l3lÞÁèföÈÂ’6Ñà N£d‚7^à…!¶Ô¯q†gÜðѳñ7FWŠwKÑÏû´÷«™ª*êÃÍÿùˆaò_Œ7`Èœg²?ÝàÝäRéU­tˆ£gÛ¿jç!›Nõ/µ*ñM|Göñ£…ÿ‰b SÂ*ÛÎzé—¨“‹Äçt­TÙz €]N†7þ"÷QÃl?y«‚÷c\#®�qô&;d$ú ¹,3÷¬ÊY…|œröwß^üPK �����Ãtk;çaCú������� ��������¤����QuickLook/Thumbnail.jpgUT�ûJUx��PK �����²tk;^ü¶������� ��������¤e���QuickLook/Preview.pdfUT�€ûJUx��PK����ttk;'úgâî���ƒ��� ��������íÆ���buildVersionHistory.plistUT� ûJUx��PK����-_k;S¡¸Ã���� � ��������í���index.xmlUT�õìúJUx��PK������:��ÿ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Jpeg2000.j2c����������������������������������������������������������000644 �000765 �000024 �00000001152 11622237011 017654� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿOÿQ�/�������������������������������ÿR� �� �ÿ\� PXX`XX`XX`XX`XX`ÿd��Kakadu-v4.2.1ÿd�Kdu-Layer-Info: log_2{Delta-D(MSE)/[2^16*Delta-L(bytes)]}, L(bytes) -0.0, 4.2e+02 -0.0, 4.3e+02 -0.0, 4.5e+02 -0.0, 4.7e+02 -0.0, 4.9e+02 -0.0, 5.0e+02 -0.0, 5.2e+02 -0.0, 5.4e+02 -0.0, 5.6e+02 -0.0, 5.8e+02 -0.0, 6.0e+02 -256.0, 6.2e+02 ÿ� �����é�ÿ“€€€€€€€€€€€ÇÚ�€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÙ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Jpeg2000.jp2����������������������������������������������������������000644 �000765 �000024 �00000003642 12601264413 017703� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������� jP ‡ ���ftyp�������jp2 ����jp2 ���jp2h�������5���ihdr�����������colr��������uuid������L±Kø½=KC¥®Œ×Õ¦ÎII*���� ������������������������������������������������������������ƒ ����ž���‚„ ����¶���¯‡����æ���±‡����������������ð?������ð?��������������������������������ìQ¸=eA¸…K æPA����������������������±‡���� ���&i ���)#NAD83 / UTM zone 18N|����Újp2cÿOÿQ�/�������������������������������ÿR� �����ÿ\�#"ww�w�vâo�o�nâgLgLgdPPPEWÒWÒWaÿd��Kakadu-3.2ÿ� �����Z�ÿ“ßð‹€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿÙ���xml ������‰<?xml version="1.0" encoding="UTF-8"?> <IMAGE_CREATION xmlns="http://www.jpeg.org/jpx/1.0/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jpeg.org/jpx/1.0/xml http://www.jpeg.org/metadata/15444-2.xsd"> <GENERAL_CREATION_INFO> <CREATION_TIME>2001-08-01T15:40:00.000-06:00</CREATION_TIME> </GENERAL_CREATION_INFO> </IMAGE_CREATION> ���xml ������–<?xml version="1.0" encoding="UTF-8"?> <CONTENT_DESCRIPTION xmlns="http://www.jpeg.org/jpx/1.0/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jpeg.org/jpx/1.0/xml http://www.jpeg.org/metadata/15444-2.xsd"> <CAPTION>Wide Dynamic Range Scene</CAPTION> <LOCATION> <ADDRESS TYPE="Test Scene Location"> <ADDR_COMP TYPE="Street">70 Lighthouse St </ADDR_COMP> <ADDR_COMP TYPE="City">Charlotte</ADDR_COMP> <ADDR_COMP TYPE="State">New York</ADDR_COMP> <ZIPCODE>14612</ZIPCODE> <COUNTRY>US</COUNTRY> </ADDRESS> </LOCATION> <THING ID="5431"> <NAME>Macbeth chart</NAME> <POSITION> <RECT> <X>562</X> <Y>286</Y> <WIDTH>59</WIDTH> <HEIGHT>39</HEIGHT> </RECT> </POSITION> </THING> <EVENT> <EVENT_TYPE>Capture Device Test 1234</EVENT_TYPE> <DESCRIPTION>Project Prototype</DESCRIPTION> </EVENT> </CONTENT_DESCRIPTION> ����������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/JVC.jpg���������������������������������������������������������������000644 �000765 �000024 �00000002345 10357015703 017224� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿáèExif��II*���� �����’�������¦�������º��������������Î�������Ö���(�������2����Þ����������i‡����¼��¥Ä�Ê���ò���f�� �JVC �GR-DV500 �H������H������2004:06:26 12:36:46�PrintIM�0250�� ����������^������������� ����� ����� �¦��� ����� ������¾����������� ��'�� ��'��—��'��°��'����'��^��'��‹���'��Ë��'��å��'���������������������������������������š‚����²��‚����º�������0220����Â������Ö��‘�����’ ����ê��’�������’������� ’������� ’����ò��|’�F���ú��� ����0100 ������� ������� ����À�� ����H��¤��������¤����@�� ¤����������������� ������2004:06:26 12:36:46�2004:06:26 12:36:46����� ���T��� ���JVC ��������������(��������������CPU1 2.00�0�CPU2 0496�0��������������R98������0100����������������´������¼��(�����������Ä�������������H������H������<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/JVC2.jpg��������������������������������������������������������������000644 �000765 �000024 �00000001663 10357015703 017310� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá¶Exif��II*���� �� ���†���� ���”������� ��������������¨�������°���(�������2����¸����������i‡����Ì���4��GC-X1E Image��JVC ��GC-X1E��H������H������2002:07:14 22:59:31��š‚����¶��‚����¾��"ˆ�������'ˆ����P��������0210����Æ������Ú��‘�����’ ����î��’����ö��’������� ’�������� ’����þ��|’������� ����0100 ������� ������� ������� ����������������&��� ���2002:07:14 22:59:31�2002:07:14 22:59:31����� �����d���¯��� ���VER:0100QTY:FINE������R98������0100����������������‚������Š��(�����������’�������������H������H������<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�����������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Kodak.jpg�������������������������������������������������������������000644 �000765 �000024 �00000006457 10441063030 017631� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá˜Exif��MM�*�����������n����!���„��������������¦�������®(��������������‡i�������¶�� EASTMAN KODAK COMPANY�KODAK DX4900 ZOOM DIGITAL CAMERA�����æ������æ����‚š������è‚������ðˆ"������������0210������ø������ ‘�����’� ����� ’������(’� �����0’������8’�������’��������’ ��������’ ������@’|���œ��H �����0100 ������� ���� �� ����`�� ������ì¢������ä¢�������£��������£�����������������´���C��� 2002:05:01 10:22:28�2002:05:01 10:22:28����K��� ���7��� ������è���!��� ���f��� KDK INFODX4900 � `Ò >������¡��Ð��ÿÿ��3E��3E��/]��/Ú�ÿÿ�������������������à����\@�����l�Œ��� �d��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåáåïóõëñîëò÷^fKh—‰c~oiu‰‹isYgaYVRNB´¶~XGIDAE;;5¥¨a-02,3HK]Z¤¥@#G7D=“‘F357-EKPP£¨Ž€we)`spq�à����\@�����Q˪UªUªUªUªUªU�à����\@����‚�®�L€����������S��iÈÿüVà� ffÿÿÌBÿü©Ž�n°��a�Ûˆ�F`�ÿÿ€€ÿý€�� ���+À������@��`���������*×�������Y¡��õKÿþ™FªUªUª�ÿÿ������/]���þ �ÿÿÿ���ÿÿÿ����¥�Ý�‘áÿÿ‡$ÿÿæûÿÿÒl�–êÿÿ–©�� ÿÿš[�\Ž��%��/b��ÿz��� Ê��.ÂO����%�d�ÿÿÿ�����QË�(158ÿ������ÿûÿüÿüÿüÿúÿùÿùÿùÿúÿúÿøÿùoZOD:%oZOD:�������ÿñöÿÿÿÿÿÿÿÿÿÿÿÿÿ���%�����������;���������0Ôÿü�Œ����������������%�����������;���������%�����������;���������%�����������;��������$²K¨Æ G Q����������������������������������$²K¨Æ G Q����������������������������������$²K¨Æ G Q����������������������������������ªUªUªUªUªUªUªUªU���d���������R98������0100�������������������������d������l(�������������t��������������H������H���<Dummy thumbnail image data>ÿâdFPXR�����¨�/��E�x�t�e�n�s�i�o�n� �L�i�s�t������Â�/��S�c�r�e�e�n� �N�a�i�l�_�b�d�0�1�0�0�6�0�9�7�1�9�a�1�8�0���ÿÿÿÿ�/�A�u�d�i�o�_�b�d�0�1�0�0�6�0�9�7�1�9�a�1�8�0���ÿ�Àoн�`—¡€���X�/�A�u�d�i�o�_�b�d�0�1�0�0�6�0�9�7�1�9�a�1�8�0�/��A�u�d�i�o� �I�n�f�o������.�/�A�u�d�i�o�_�b�d�0�1�0�0�6�0�9�7�1�9�a�1�8�0�/�A�u�d�i�o� �S�t�r�e�a�m� �0�0�0�0�0�0���ÿâ·FPXR��������þÿ����`aVTÁÎ…S�ª�¡ù[���`aVTÁÎ…S�ª�¡ù[0���x��������˜������ �����¬�����Ì�����à�����è�����ô��������������`����¬����À����Ô����Ü����è����ô��������<�����°������������ ���S�c�r�e�e�n� �n�a�i�l���H���0�Àoн�`—¡€������@����§rt½@����§rt½������D�i�g�i�t�a�����������P�r�e�s�i�z�e�d� �i�m�a�g�e� �f�o�r� �L�C�D� �d�i�s�p�l�a�y�������������/��S�c�r�e�e�n� �N�a�i�l�_�b�d�0�1�0�0�6�0�9�7�1�9�a�1�8�0�����������A�u�d�i�o���H�����Àoн�`—¡€�������@����r×; *¾@����r×; *¾��� ���K�I�E�S�_�T�o�o�l�k�i�t�����������A�u�d�i�o� �s�t�o�r�a�g�e�����������/�A�u�d�i�o�_�b�d�0�1�0�0�6�0�9�7�1�9�a�1�8�0���ÿâ�=FPXR�������þÿ�����Àoн�`—¡€���This is test Audioÿâ�gFPXR�������þÿ����þ�Àoн�`—¡€���þ�Àoн�`—¡€0���(��������������� ������°���������ÿâ�ÑFPXR�������þÿ����1�Àoн�`—¡€���1�Àoн�`—¡€0���'��������@������H������P������X������`������h������p������°����� �����À��������€?�������������A���&��<Dummy preview image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/KyoceraRaw.raw��������������������������������������������������������000644 �000765 �000024 �00000000246 10375400411 020652� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������70.1 .reV��LATIGID N����ARECOYK 03:41:81 61:70:5002��� ���8���T���@���@���V��������������8�������������&������7���BR VS28-80/3.5�������������������������<snip>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/LNK.lnk���������������������������������������������������������������000755 �000765 �000024 �00000001554 11255321673 017242� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������L��������À������F¿���€��� ÝZB.ÊPмœ9Ê�tÒîË2ÊÒÝ<��������������������V�T�2�ÒÝ<�+;ÀT€�EXIFTO~2.EXE��8���ï¾%;YR4;���e�x�i�f�t�o�o�l�(�-�k�)�.�e�x�e������f������������-�������e���������&ÓðÈ����C:\Documents and Settings\Phil\Desktop\exiftool(-k).exe��)�R�e�n�a�m�e� �f�i�l�e� �n�a�m�e� �w�i�t�h� �i�m�a�g�e� �d�a�t�e� �a�n�d� �t�i�m�e��.�\�e�x�i�f�t�o�o�l�(�-�k�)�.�e�x�e�&�C�:�\�D�o�c�u�m�e�n�t�s� �a�n�d� �S�e�t�t�i�n�g�s�\�P�h�i�l�\�D�e�s�k�t�o�p�4�-�d� �%�Y�%�m�%�d�-�%�H�%�M�%�S�.�%�%�e� �"�-�f�i�l�e�n�a�m�e�<�d�a�t�e�t�i�m�e�o�r�i�g�i�n�a�l�"� �-�v�`����� X�������yukkypc���������2ôÍÀä²@»¢AŽ„q  ˆj…¥Þ¬õ� ÛœOŸ2ôÍÀä²@»¢AŽ„q  ˆj…¥Þ¬õ� ÛœOŸÌ����� �õ�P�ôP��‡�P��������� ��0�����8�5�1�4�o�e�m���l�e�1�5���¡|&Ε9¢|���Ay��œêD®µ¨|t&Ó����p&Ó�����������������2����������������€��€���€€�€���€�€�€€��ÀÀÀ�€€€���ÿ��ÿ���ÿÿ�ÿ���ÿ�ÿ�ÿÿ��ÿÿÿ���������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Lytro.lfp�������������������������������������������������������������000644 �000765 �000024 �00000010460 12361754017 017716� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰LFP  �������‰LFM  ������ sha1-ee2555bd6d2186c6664da3ad53a88e22b7a6399b�����������������������������������{ "picture" : { "frameArray" : [ { "frame" : { "metadataRef" : "sha1-031d1e1d0e65efcd6ea74c811a0bc170498d8574", "privateMetadataRef" : "sha1-990a1858fe077fa0601df485704fc1d674a5e6b0", "imageRef" : "sha1-0360f825e6eed3c7c470fb79a755a54df07fae84" }, "parameters" : { "vendorContent" : { "com.lytro.tags" : { "darkFrame" : false, "modulationFrame" : false } } } } ], "viewArray" : [ { "type" : "com.lytro.stars", "vendorContent" : { "starred" : true } } ], "accelerationArray" : [], "derivationArray" : [ "sha1-f58530c3902263bfc1d411cac2b965d635fb6287" ] }, "thumbnailArray" : [], "version" : { "major" : 1, "minor" : 0, "provisionalDate" : "2011-08-03" } }������‰LFC  ������ Ssha1-031d1e1d0e65efcd6ea74c811a0bc170498d8574�����������������������������������{ "type" : "lightField", "image" : { "width" : 3280, "height" : 3280, "orientation" : 1, "representation" : "rawPacked", "rawDetails" : { "pixelFormat" : { "rightShift" : 0, "black" : { "r" : 168, "gr" : 168, "gb" : 168, "b" : 168 }, "white" : { "r" : 4095, "gr" : 4095, "gb" : 4095, "b" : 4095 } }, "pixelPacking" : { "endianness" : "big", "bitsPerPixel" : 12 }, "mosaic" : { "tile" : "r,gr:gb,b", "upperLeftPixel" : "b" } }, "color" : { "ccmRgbToSrgbArray" : [ 3.1115827560424804688, -1.9393929243087768555, -0.17218986153602600098, -0.36290559172630310059, 1.6408803462982177734, -0.27797481417655944824, 0.078967012465000152588, -1.1558042764663696289, 2.0768373012542724609 ], "gamma" : 0.41666001081466674805, "applied" : {}, "whiteBalanceGain" : { "r" : 1.01171875, "gr" : 1, "gb" : 1, "b" : 1.48046875 } }, "modulationExposureBias" : -1.152003169059753418, "limitExposureBias" : 0 }, "devices" : { "clock" : { "zuluTime" : "2012-04-12T14:10:55.000Z" }, "sensor" : { "bitsPerPixel" : 12, "mosaic" : { "tile" : "r,gr:gb,b", "upperLeftPixel" : "b" }, "iso" : 87, "analogGain" : { "r" : 2.375, "gr" : 1.75, "gb" : 1.75, "b" : 2.03125 }, "pixelPitch" : 1.3999999761581419596e-06 }, "lens" : { "infinityLambda" : 43.904331207275390625, "focalLength" : 0.0064499998092651363371, "zoomStep" : 981, "focusStep" : 721, "fNumber" : 1.9099999666213989258, "temperature" : 34.07342529296875, "temperatureAdc" : 2633, "zoomStepperOffset" : -1, "focusStepperOffset" : -13, "exitPupilOffset" : { "z" : 0.11637913513183592573 } }, "ndfilter" : { "exposureBias" : 3.8281672000885009766 }, "shutter" : { "mechanism" : "sensorOpenApertureClose", "frameExposureDuration" : 0.0040000001899898052216, "pixelExposureDuration" : 0.0040000001899898052216 }, "soc" : { "temperature" : 43.461944580078125, "temperatureAdc" : 2776 }, "accelerometer" : { "sampleArray" : [ { "x" : -0.039215687662363052368, "y" : 0.94117647409439086914, "z" : 0.2509804069995880127, "time" : 0 } ] }, "mla" : { "tiling" : "hexUniformRowMajor", "lensPitch" : 1.3898614883422850808e-05, "rotation" : -0.00028155732434242963791, "defectArray" : [], "scaleFactor" : { "x" : 1, "y" : 1.0004389286041259766 }, "sensorOffset" : { "x" : -3.5040323734283452459e-06, "y" : -1.6298500299453736302e-06, "z" : 2.5000000000000001198e-05 } } }, "modes" : { "creative" : "tap", "regionOfInterestArray" : [ { "type" : "exposure", "x" : 0.26874190568923950195, "y" : 0.55208665132522583008 }, { "type" : "creative", "x" : 0.26874190568923950195, "y" : 0.55208665132522583008 } ] }, "camera" : { "make" : "Lytro, Inc.", "model" : "F01", "firmware" : "v1.0a60, vv1.0.0, Thu Feb 23 15:02:57 PST 2012, e10fcca0668db3dbf94ae347248db3da070d21e9, mods=0, ofw=0" } }�������������‰LFC  �������ƒsha1-990a1858fe077fa0601df485704fc1d674a5e6b0�����������������������������������{ "devices" : { "sensor" : { "sensorSerial" : "0x7096E34F554BDE10" } }, "camera" : { "serialNumber" : "A202110453" } }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/M2TS.mts��������������������������������������������������������������000644 �000765 �000024 �00000002500 11225157010 017334� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������G@���°��Á���á���àébçcÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��MGA��°9�Á��ðð HDMVˆÿüüðð HDMVÿC?ñ�ð AC-30�×þõ6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��UÕG@�ðÿÿÁ��ð cÀ¯Èÿÿÿÿÿ�€�®´:5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��^¥G ·���(þ-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ��åGp��à��À 1�§Å�Se��� ���'d�(­�ì€D}à"������eÑ@èH�= >÷Š�B@èI÷¸���(ê@rÀ���� ×ä��Wä��@8îŒ`øMÙŒÖ� šfMDPM 1#$pÊôÿÿqÿÿÿÿ��e„à0�áÿÿÿ�����€���%ˆ…'Ξ���еG0_á—ÿóõ^‹?¡yƒDnsGg°Ôáûah´tº6éYw;ê,xY°}Ô:a©S’m -9Ì“šHñrƒ@V„]J;UyVÆì”tã/ÜêÉú0v£TµÝ ‰T7š}>Üy²õÔAëQ¢ ÔÀ \…”Ó‡Ôµ ¸G+n5ý‚@…kJuƘÞnð¨KùÖ?ô.‡*ý”‘Ûμ…cdÅs=â£ØZŒÔ²âNPb #tuðù<ËqØP� c…Gq���ý !�o…q w Cþ!  ø`‘UpU]óªêÓ&Tù wÊaC…Jš§´ŸÑ®ùKøOi¾|ùóçС?y®:˜o=†ùúWÐÒ×LåüèN_?{ »Ûó—Y ú§ÏÔÚ¦öÂZOÒÖ‡e¼ø‘�ÿâƒ.¼—Z#_ëЭ82I H¨°Ž†‘;±+Æ”í ³‹­¬„Î5&WDá‡U¶Ô '³{ ëQ*dÉ;ʆu¦µÑ€������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Matroska.mkv����������������������������������������������������������000644 �000765 �000024 �00000000773 11400041270 020367� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Eߣ“B‚ˆmatroskaB‡B…S€g���þ/M›tÀM»ŒS«„I©fS¬‚M»ŒS«„T®kS¬‚¨M»ŽS«„M›tS¬„ù†M»ŽS«„S»kS¬„÷õI©f@Ÿ*×±ƒB@M€£libebml v0.7.8 + libmatroska v0.8.1WAÊmkvmerge v2.4.0 ('Fumbling Towards Ecstasy') built on Dec 3 2008 16:22:41D‰„H �Daˆû\w!oØ�s¤V|fîr>³ûH4M©£‘T®k@ç®@×sÅ„¡i)ƒ¹ˆUª�œ�mç#1O„?€��Uî�†V_MPEG4/ISO/AVCªc¢©d�ÿá�gd�¬4äÀI¡������2-�hï‰,‹#ツbZ�"µœƒundà•°‚Àº‚@š�T°‚�Tº‚@®Ò×sÅ„á;ôƒ¹ˆUª�œmç�#1O„?€��Uî�†‰A_MPEG/L3ª#ツn6�"µœƒundት„G;€�Ÿ�����Image-ExifTool-10.10/t/images/MIE.mie���������������������������������������������������������������000644 �000765 �000024 �00000004033 10542242266 017204� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������~þ0MIE����~ 0TypeJPEG~ 0Vers1.1~  1Namedummy.jpg~  2MIMEimage/jpeg~�Meta~�Camera~BColorTemperature��P~HContrast~[ ExposureComp�������~ ExposureModeManual~S ExposureTime������~�Flash~[ ExposureComp�������~ GuideNumber0~���~ FocusModeManual Focus~AISO�d~�Lens~SFNumber������~S MaxAperture������~S MinAperture������~���~ MakeFUJIFILM~ ModelFinePix2400Zoom~ �Orientation~[Rotation���Z���~���~ OwnerNamePhil Harvey~H Saturation~ SerialNumber0560012345~H Sharpness~ ShootingModeManual~���~�Document~ 'CommentI can eat glass and it doesn't hurt me.~) Comment-cn_ZHb€ýTN s»tƒ€ N O$Ž«OS0~ )Comment-de_DEIch kann Glas essen, ohne mir weh zu tun.~( [Comment-el_GRΜποÏÏŽ να φάω σπασμένα γυαλιά χωÏίς να πάθω τίποτα.~ +Comment-en_CAI can eat glass and it doesn't hurt me, eh.~ 6Comment-en_GBI say, I can eat glass and it doesn't hurt me old boy.~ )Comment-en_USDude! Munching glass don't bust my chops.~( %Comment-es_ESPuedo comer vidrio, no me hace daño.~( 3Comment-fr_FRJe peux manger du verre, ça ne me fait pas de mal.~) hComment-hi_IN . H �  >  �  >� 8  $ >� 9 B �,� . A  G� 8� 8 G�  K � * @ ! >� ( 9 @ � 9 K $ @�.~ )Comment-it_ITPosso mangiare il vetro e non mi fa male.~) 2Comment-ja_JPyÁ0o0¬0é0¹0’˜ß0y0‰0Œ0~0Y00]0Œ0oyÁ0’P·0d0Q0~0[0“0~( CComment-ru_RUЯ могу еÑть Ñтекло, оно мне не вредит.~( Copyright© Copyright Phil Harvey~ CreateDate2001:05:19 18:36:41~0KeywordsExifTool�Test�MIE~ ModifyDate2004:02:26 09:36:46~ OriginalDate2001:05:19 18:36:41~ :Referenceshttp://www.columbia.edu/kermit/utf8.html (Comment strings)~ SoftwareAdobe Photoshop 7.0~ TitleTest IPTC picture~ )URLhttp://owl.phy.queensu.ca/~phil/exiftool/~���~�Geo~ CityKingston~ CountryCanada~ StateOnt~���~�Image~ ColorSpacesRGB~ ComponentsYCbCr~A ImageSize�d�P~SResolution(/cm)���v������v���~���~ �Thumbnail~A ImageSize� �x~�data<dummy thumbnail image data>~���~���~�data<dummy subfile data>~���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/MIFF.miff�������������������������������������������������������������000644 �000765 �000024 �00000007246 10336164711 017472� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������id=ImageMagick class=DirectClass matte=False columns=8 rows=8 depth=8 Resolution=72x72 units=pixels-per-inch profile-iptc=472 profile-APP1=848 profile-APP1=2069 :8BIM�����š���z� I wrote itP� Phil Harveyn� My Credit7�20040226Z�Kingston_�Onte�Canada�1 �8�ExifTool�Testx� MIFF test�MIFF8BIM%�����žï½›ÜÁ’'ž0 âs#8BIMí������H�����H����8BIM&���������������?€��8BIM ��������8BIM��������8BIMó����� ���������8BIM �������8BIM �����)http://owl.phy.queensu.ca/~phil/exiftool/�8BIM'����� ��������8BIM����������@��@����8BIM���������8BIM��������8BIM�����ÿþ����Exif��II*���� �����ª���� ���º�������Ã��������������Ó�������Û���(�������1����ã���2����÷���;� ��� ���������˜‚������i‡����4��ì��A witty caption�FUJIFILM�FinePix2400Zoom�H������H������Adobe Photoshop 7.0�2005:07:21 07:47:01�Phil Harvey�Copyright 2004 Phil Harvey����‚����r��"ˆ�������'ˆ����d��������0210����z������Ž��‘�����‘����¢��’ ����ª��’����²��’ ����º��’ ����Â��’����Ê��’������� ’������� ’����Ò��� ����0100 ������� ������� �������¢����Ú��¢����â��¢�������¢��������£�������£�����������^��d���2001:05:19 18:36:41�2001:05:19 18:36:41���� ���X��d���h��d���È���d�������d���h��d���X��d���í �����í �������������������:������B��(�����������J��������������H������H������http://ns.adobe.com/xap/1.0/�<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 5.47'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description about='' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:creator> <rdf:Seq> <rdf:li>Phil Harvey</rdf:li> </rdf:Seq> </dc:creator> <dc:description> <rdf:Alt> <rdf:li xml:lang='x-default'>UTF-16 (big-endian) encoded XMP</rdf:li> </rdf:Alt> </dc:description> <dc:rights> <rdf:Alt> <rdf:li xml:lang='x-default'>Copyright 2004 Phil Harvey</rdf:li> </rdf:Alt> </dc:rights> <dc:subject> <rdf:Bag> <rdf:li>MIFF</rdf:li> <rdf:li>Test</rdf:li> </rdf:Bag> </dc:subject> <dc:title> <rdf:Alt> <rdf:li xml:lang='x-default'>Test IPTC picture</rdf:li> </rdf:Alt> </dc:title> </rdf:Description> <rdf:Description about='' xmlns:photoshop='http://ns.adobe.com/photoshop/1.0/'> <photoshop:Category>1</photoshop:Category> <photoshop:City>Kingston</photoshop:City> <photoshop:Country>Canada</photoshop:Country> <photoshop:Credit>My Credit</photoshop:Credit> <photoshop:DateCreated>2004-02-26</photoshop:DateCreated> <photoshop:Urgency>8</photoshop:Urgency> </rdf:Description> <rdf:Description about='' xmlns:stJob='http://ns.adobe.com/xap/1.0/sType/Job#' xmlns:xapBJ='http://ns.adobe.com/xap/1.0/bj/'> <xapBJ:JobRef> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <stJob:name>My Job</stJob:name> </rdf:li> </rdf:Bag> </xapBJ:JobRef> </rdf:Description> <rdf:Description about='' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'> <xapMM:DocumentID>adobe:docid:photoshop:4cc7b857-69d0-11d8-8ac4-bb59c92f0d9a</xapMM:DocumentID> </rdf:Description> <rdf:Description about='' xmlns:xapRights='http://ns.adobe.com/xap/1.0/rights/'> <xapRights:Marked>False</xapRights:Marked> <xapRights:WebStatement>http://owl.phy.queensu.ca/~phil/exiftool/</xapRights:WebStatement> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Minolta.jpg�����������������������������������������������������������000644 �000765 �000024 �00000032275 10357015703 020212� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá3ÀExif��MM�*���� �������ž�������¦���� ���¸��������������Â�������Ê(�������1���� ���Ò2�������Ü�������‡i������Ä¥����(���ð��3&DCF 1.0�Minolta Co., Ltd.�DiMAGE 7i����H������H���Ver.1.00u�2002:06:01 12:37:27�PrintIM�0250�������������������!‚š������ª‚������²ˆ"�������ˆ'�����d�������0220������º������Α�����’� �����â’� �����ê’������ò’�������’��������’ �������’ ������ú’������’|���/ö��  �����0100 ������� ������ � ������€ ������3¤�������¤��������¤��������¤������3�¤�����§��¤��������¤��������¤��������¤ ��������¤ ��������¤ �����������������´���8��� 2002:06:01 12:37:27�2002:06:01 12:37:27����K��� ������� ���#��� ��*T���ÀÀ@�À�������MLT0�����à��p����,ä��P� ���Š��14�@�����$Œ�ˆ������2æ�‰������������(��2¾��������������������������������������0���l���0����������������������������)^��Ð����Ò� %���$�������������� �������`�������������������������������������������������l�����À���������������������������@���¯¯¯¯���ÿ��������’�–Œ�P…þÿ~½ÿßßÓ������������ÿÿÿïýÿÿí��n•��ê �ecýCþzú×������������ïÿ×ッýÿ��_o��Ÿ¾��Æ„ÿÞÿÿÿÿÿõ������������ßÿþïõþý��ŠŠ��•Ú��›^_úÜÿ÷ÿÿ������������ßûï÷¿ÿÿß� @��±�í ��@D�����UU�³3@�P��� ���`�����$�€€P������ ���@"‚ �€ ���������� ��@�J���������€�Aj������������êßþ¿ýßß}������������ÿýßïïÿÿõ������������ÿüýýýßÿ��ä��)��n��n��n��ä��)��n��n��n���������������������������� ��� ��� ������� ��ú�������I��4É��=+��B1��Gë��H±��H[��>Ø��=J��:^�æ �!�Y�‹4�¦>�²H�±Ý�À„�ßD�Ü�.}�0ô����‰³��“Ð�� Â��µ·��Ç»��Ð<��Æe��·V��¡h��gš��oÓ��t¨��~��ˆ@��’z��š��¡+��®Ñ��»��Ð��å—�Æ�Æ��ô·��`�2Ï�8œ�4þ�Z �W%�:õ��ne��qI��r ��wÒ��vF��|˜��4��† ��‡��‹=��N��Ï����������������������������������������������������������������������������������������������œÑ��‡¤��Ya��Ur��TÈ��Xý��hU��pØ��jÖ��\É��HÑ�”�Ü�ªÔ�´ª�¹è�Æ�Í�Ô»�ß��ïÔ�ø7������������������������������������������������������������������������������������������������3��œŠ��t��~™��”Œ��¨��ÆG��æ0��êx��Ôù��­‡�Þ�¸�è{�Õk�ׯ�óz�(�;)�I%�DE�_Ó�«b�����������������������������������������������������������������������������������������������n���ü���Ñ���ù��7��ˆ��Ý����Ø����7��¸��å��6��-��x��Â��ù�� ��M��´��ý��Y��²��²����ƒ��À����:��W����:��è��±��Ö��Ý��ÿ����B��Q��o����·��Ç��Ê��Ÿ��f��÷��W����³��Ë��L��ü��%��¼�� ����1��e����©��ö��.��~��í��[��m�� ��n��Ø��7��¬��I����Ý��a��Þ��å��z��Ò�� �� t�� œ�� ¹�� é�� è�� "�� w�� P�� ™��ú����"��6��J��^��r��†��š��®��Â��­��£��™����…��{��q��g��]��S��I��?��ú����"��6��J��^��r��†��š��®��Â��­��£��™����…��{��q��g��]��S��I��?�����Hj��˦�P×������m6������ä������B^��˦�P×������m6������ä����������������ÿ������ÿ������ÿ���������������������������������Ù��Ú��Úûýÿù��_��B��×î÷ÿ¿���������������ÿÿÿÿÿÿÿÿ��_ÿÿÿÿÿÿÿÿÿÿÿÿ���Àÿÿÿÿ�����_��� ��! €€�ü§�—/€�Ô¢�M”Ä(�ŠZ�iL�$©€�$Ê€@… �"� �¤.��Š��F��8�@ H €��P��@�DJ��Ä��Š��Ò�(Z�,��*Y���$ ��$�!³�*¥��¤ˆ��œ€ˆB€P€�¤‚ �z†0��*B„–�$V!A� R,AbD â�ˆXf"(@3€X �D<�¡vT�)�‚U�xB  �AG¶!H�T*�ˆ²��:€À� D�"@!��ˆ��"B�@��@ ˆ� „<…� �‚" B!�B*<�J�@X��„��@������������������@������‚������Š��������€����H�������€�D������������(�@�$���������@� @�$ ����H@��������������� �€�������€€��I�€��� ��A�@���$�@����� € �� ���������€���€@H��������@�� � ������„�€€�¥�����@�ˆ$Š�@ �€H@„�� €@@Á€���@� @��À€€%€€A Y€��€��vx��T¹�A1"@€C �LH�H™��B„� E�$†š F¤€�°@j T¤�!�!DÑ���Dh�j¢��šJ��ƒI �R(�@�y�X¡� hj�"��*��€@��(Q�5��€�˜�™¤�”˜ 2Z€�@B€È©ò*t,�ˆ$�‘"AÉ !˜�A"€!„@�€�fd�šb� ¡ @Š�¤R�ÀT�”ˆÁ�´‚� È��Bd�…D¦, †€€†@ «�(��¨@@�@(�‘�€‚T �„@��H@À�i ‰�€�ˆT�‚D �†1�P„�������� ���!��������������@��� ������ ��€�������‚���������€����������€�"@�@���������Q�����@��B�������@��@������ ����@�������(���� ������� �������������� �(�����@� ��� ����€��$��€����P��������� �������€ ��(#@  ƒ€€�DJ@�� B%¨"���d”�� �H€€€ ED�@ � �@��0� D�(�B � +�`û� FÄ@²R�¥T�‡��8Y��’°�€A ��&��A!�@å�� )� �Œ���������€���€����������@� �€"�����������€�À���€����� �Ð� ���� ��@������R���@�€ �„�€���a€ ��%P�"@�&b�!bI�!­�*„�E!›� ˆ(( �@)‘@�) F�P"$( Q„��������… �L�€����€ „���@�� " ($„)”��#� �#¨–(�$C¨…ˆ $ ���������€@€��� � ���@���€����� �������� ���@����)@�!�������€���������@� ���€����� € ��!���€���@� �����¡�����€€������������������„�!� �����@����€��@0�����B��������H����@�@‚�����������@ �B�•h�PH@��H��@FKI"�! �@€�ˆ�€ �!� @ A €�D@@)�Q�B@� ����¼��¿€‰A�€=�]˜�A!�B A V’� ! � �!$�!¤å „°�!Š��BD �¤Ñ� È�@’)�€È�‚ Y�"Â�DD�€&â%ª E PÅD@0Z@S€B"€©�!$0�Alš$Ž�!š�ˆ€‚J ¨!�À �’TФ€A†)� ™  K�Ѝ��$0ƒ‚�†%A’š�¦GĘ ²@�‚€� *�É5�Êf�$�€ %��������@�@€À¡B@1� P��P��€™ C���€Š @€P��h���B��Ä������������� ��� ����P€� ����� �@��������0��‚���@������� ��@�������������� ����‚��������€€�0������@�!���€�„���€�!������� ��P� �� ������"���������@����˜����@ ����€������ @���� ��������������������D�($� ���@"!��P" �0î÷ÿïÿuîÿ¿¿ßÏßßÛÿnÿzÝÿïîfûý÷ÿû÷?¾ýÿ~ú¾ÿ�kZ�@�M|CÞ*Í¢Oö—ûß¾uÝ]ô_'nïýOÝÖ}{Ú_]ýý{¾|Û{»›˜ÿº®Wõfþn¦Ý/ŠD÷i½ÿïßÖôûþéý\Çßv×öœÿÿöwÞS·­Ï÷ªªÿ·Ÿ}ÍågWüöý û¾>ÿó»Õ{ÝUMûÝ_Öçå¶üS¿ûO×¹¿Ê×ÚÖÞWUõÒÇÒ§þýû®ýÌ4â×þ¯oïÝÍ|÷¾þ6·Ö½ßsçûûÛ¥ïܾä¿MÒõݪ·ÌÛ»õ{óõ|ýO÷º¿¿³Þ[EÄ/íÒT›mVwÿígsõõc÷›íw{öìBcö½U÷¦uf÷ºoKwëºÿ}Üß¿ÿåÿ÷ÿzý¾ßËïÿÝ¿û÷ß_ÿßoÿïÿß׿þþïößÿÝÿÿ{¿þ¶ï¯åûÞýÝ_ÿû_¿ýŸû}íï÷õý^ÿ�bè�ŽâîÕýÝéÝä»ZTmìîïøZ¬ÿæïìl”Ç/Î3mû¿þOë·ÞõœšÿïíÇïUÿfF¿ÿý–µê~™OÕ½?Z›ÎÓ¿Þwýu—'ÜgëUþëÿAåÿÿ¯åžߪÝýÌÎyÿÜýgß×ï‰=^ËÞüî<§}é{þ_¿¿wy–^YL—22_uâ'z7u6×EvOW×Ç']óîßÿM¾üên¯ï_{ïçýí¿Ôï_þßöGwÿÍÿ»´Ä«\ËõßîkÝJv§fªÿí×l ýTÿ³¿ÿ$Mt’v[vwóe|÷uw{wS[ç×E£—S4w%VG>»ÞÿïWþwßkWóÝÿ}ÿÿ·Èû÷ëçÿûß×ÿ÷¾»ÿå¯oÿs¾Ûÿû^»ïÙ–úÿ÷ÿéÿíõÿïïÜãÿÿßÿþ÷õßïöû�€��UUçl¥Þ¾ô5w%KÝÝîÕÛì¬'Ý]†ÔÝM^ÝWÞõ¶þ{û¾wW»û[%kªío_¯Õoÿ>_,g¥÷Å¿üWGÉd[¿Ùß¿ªGjêëwßÚ_÷¶²&î¿:ûW¿ëÿ=U_Ýo¾¾Ôm÷ßãúþýßÞÚx¥eæ“ý}ÝlÙß÷]4»»ÜµÿæÕôgØï=¿^ïýë®~ß\uÍ­fMÒÉêÄsþöß¶O»å»¹¯ü­¶Û„mWïü]UÞÔ\Õé5ëk¼]ÿÿõmÕ«“åýøåèÏöµýÝvÕëjWä¿¥sU{²wt\ÖcwÿwU{U}sÛïòUœ»¦ÿï¯v{Ýï—ÿßÿýÿ]ý¿ÿÿç¿ßû]¾ßÿ_ë×çõ¾÷¿{{×ßzoÛýá+ÿÜÿþÿúÛÿÿ¿þ¾ÿ}-½ÿWžÿßçýßÿÿÿÿßÿgÛïýß{ýÿúíÉßõí×Ýõüÿý½¯~ýZßÿûç÷ÿ}·_ûßwß÷Ù~ßÿïß_ßî¿ÿïôß÷ýníßöoºÿÝ7ÿûü»IÿÛÿþÿÿþî¿wþÿÝÿ·ïÿËßýÛúÝÿoûßïÿÿÿí½ï~õûßíÿÞ_ÿÿßÿóÝÿß½ŸÿëïÃûÿûý÷kû]ßsþ}½¿ïþºÿÝÛ~ïû^}¿õ÷}ïÿý¿ÿýÿõÿÜÿgßÿ*ÿëÝßZÿýßþ¾þ{ÿÿþ×ÿþÿËÿý÷½{ïÿûëß¿o÷kþÿ¿þÿý¿êÿÿÿ­þÞÿþÿÿîûÿï_ûýÿ÷¿Í»ç½Â×ÿÿÿýÿWßÿÿÕóïýÝ÷Íÿö÷ï÷÷¿÷Vï}÷ÿ_÷ÿ­wïßÿöõçÿûþjÿwÿ¾n{þ¿¾ûßþÿ¯•ÿ������ ÞÊ*¿jîÌÝ„Sî²øþÜÊé+͇¥­ùËRÝç­{æîã?îõmýþÜÄ÷3ÇÿÝóýÜuýkýÓå¼.»ü¿dÿµýÒñ¸h™KþTgöé¯_§Êµ7÷?å_6û·NúVë{ÚýÓgíe¿{gtunFÍ;Ëwý^ù]çÝVÞýÔÏUÑÏü¿»ù¿WÇûüzÖÔ|u{¿xZ×߯Y¯ÝÿnÞÿÿ.Ýï_uMß¿_çÿý]õÇZ~gÿÝ]¸ßzOÁ÷}Þ~þg¦ë_\Ý´mÚ÷}÷Ö7cmEf3}ûÿýÇk}ÛuZö[Wÿ›reù{ݾ¯ßÿ¿þûÿïß®þÿþÛÿ~_ýÿþ»Ó¿_ßÿýïÿîÿýûïûÿÿFOÿùÿ]÷¿³úÿ~ßýëë¾ÿýýÿÿÿ÷Ïýý߯ýî{���„���+¹¬î7.ÅòëÄÿ·Ç\êÜh÷—6mk÷ïÿØ,ÝД¾ëùä7ûßÊ•¿þèÙýí/“Ýý~ÓßÄÕ?½w—ýÿÏØun|Ë}ÍÂÛ×îîž^'Õý•îéúÝNý½çÚçíêŸG_¹÷ëoÆžþÿjußåãvߎ­î·uëí¬þAóŸý5ác+þÚÿíÿþþ÷ÿÿ¿cý>¢ö¾÷ú]½w¿=óþÓÔý„Ï„kÎÝO-¤±öî&èLÒj\Ú~¯w~CiSöíæ÷×_7ãZËþÝn½áº'$·ç6FeWT\qWc7oEegv—m^Ïé[]–c×îÿõÍ÷ÿý}íþ·ý÷}ýÿûç¿ÿï¾&çkþýoÿån£ÿ§¿_]Ý»ÿo}ÿûî-Ïÿ¯ïý÷¾ùÿÿ»÷ÿÞÿßþ{ÿÿÿß������Ëõ\‹ífV½šË~„ŒÜûþ¿VÞïRîçž~fÕT»”~ïuîÝLÙZçþíýÎ>ß{þýÝþÿrï³};'ÿÓ|ëòßÝþ¦µ©Ý÷]Î[êEÞÿ;~ïÞý]Ÿûvü½~Iïåëþì~[åÞ¿»YòKý5vßkêíyuÏþ]Åoé\»ó{Mß(Ñ/ïulg¦Ëö}½Çïoÿÿ|_ÝßÞë~wÿîßÏ}ã¿Ûu½ùÉ]ýlþ~oÖ¦þº_¯ý½×VoýýßÈR~ûo½]N­ûíÿÿöGçWwc|v÷^óÛ_ýUît%wOwwU3KOßtzdw\;÷ÿoWÝÿïÝÿÓ÷îÏMûßýú·ßýÿÝÿÝ_ÿÙ÷zÿßþíÏ]¿ÿsýýïÿ÷ÿÿÿþþï×ûÿ¯~öÿÛß?¾ýÿ~ú¾ÿNç´ÞME÷³M|CÞ*Í¢Oö—ûß¾uÝ]ô_'nïýOÝÖ}{Ú_]ýý{¾|Û{»›˜ÿº®Wõfþn¦Ý/ŠD÷i½ÿïßÖôûþéý\Çßv×öœÿÿöwÞS·­Ï÷ªªÿ·Ÿ}ÍågWüöý û¾>ÿó»Õ{ÝUMûÝ_Öçå¶üS¿ûO×¹¿Ê×ÚÖÞWUõÒÇÒ§þýû®ýÌ4â×þ¯oïÝÍ|÷¾þ6·Ö½ßsçûûÛ¥ïܾä¿MÒõݪ·ÌÛ»õ{óõ|ýO÷º¿¿³Þ[EÄ/íÒT›mVwÿígsõõc÷›íw{öìBcö½U÷¦uf÷ºoKwëºÿ}Üß¿ÿåÿ÷ÿzý¾ßËïÿÝ¿û÷ß_ÿßoÿïÿß׿þþïößÿÝÿÿ{¿þ¶ï¯åûÞýÝ_ÿû_¿ýŸû}í�����������������������€���€���€���€���€���€���€���€���€���€���€���€���'���!���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���€���€���€���€���!���#���#���#���#���#���#���#���#���#���#���#���#���#���#���#���#��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������E���E�����������E���/�������������������������������������E���������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��� ��� ��� ���"��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������+��æ��Ç��Ÿ��¥��¥���%��¡�� ¥��¤��B¥��¥��!¥��¥�� ��¥��%��C¡������¥��¡��%��#$���¤����…��A%��¥��%��%��%��¥��¤��¥��¥��¥��¤��¥��X¥��¥��¥��¥��¥��ƒ¥�� ¥��‘¤��¥��…��€��A¥��%��¤��¥��¤���¡��¥��¥��¥��¥��¥��H¢��¥��¦��@�� �������2`��Bh�� ��� ���¤��D��E@��H��� ��H���„������+��æ��Ç��Ÿ��¥��¥��A��¥��µ��¡��¥��¤��b¥��¥�� �� ��¡��¤��¥�� ¥��"¥��¥��A¥��¤��¥��„��¤��!£��A¥��•��Q„��¥��¥�����„���¥��¥��C•��¥��¥��¥��¥��¥��€¡��¥��¤��¥���¡��!%��¥��¤���£��¥��¥����¥��¡��…��¥��¥��C¥�����!��C%����A!���•�� ���(��*€��$�� ������…���������`��B��¡��@€� !���������������+��+��+�����������������������Ü��������������������������������������������������������������������������������������������������������������N�rË�Ô�ì� p�<b�x‰�¦w�Ó��ô9� /�È�¹�;—�ps��¥v�Á%�ñ�Hç�x¾�¶à�Ü��¥‰��¥‰��g)��i¼��q‰��yŸ��…„��’/��” ��–û��¤å��­��»T��ÎV��ëR��û·�í�� �7à�AT�7¦�!��‘1��‘1��f ��kŸ��jè��kb��n��næ��oì��t÷��yª��Y��ƒ1��„«��‰Æ��’¼��™t��¢¸��¨��§ò��®ì��°%��¤'���������������������������������������������������������������������������������������������� \�¹>�U(�g£�l<�~Í�Œ~� j�º"�Ê¢�Ó…�â�ë\�ùÍ�1�4�-�:õ�GÖ�=˜�Dã�;�-ç���������������������������������������������������������������������������������������������…�õz�´‚�Ç¡�¿=�«½�šN�—�—-� Ö�·]�Ôk�û_�1ï�?ž�KÖ�I�ËÂ� �K�©(�Æ$�¡™�����������������������������������������������������������������������������������������������®��M��q��Å��Í��ù��4��^��Ô��ä��ò��ü��o��Å��;��t��%��ä��‚�� $�� N�� x�� ���ï���ï��‰��š��¹��Ï��ð��ü����J��z��„��±��½��É��ï��æ��í��þ��*�� ����æ���±��?��Ê��ï��ñ��?��?��U��±��â����g��µ��V�� ��²��e��[��g��}��ƒ��¿��ˆ�� 6�� ,��a�� �� Œ�� ì�� �� ¸�� ç�� ¥�� Ï�� ý�� É�� �� \�� …�� �� ‡�� b�� …�� \�� å�� †��Ü��Ë��Á��·��­��£��™����…��{��q��g��]��S��I��?��5��+��!���� ����ù��Ü��Ë��Á��·��­��£��™����…��{��q��g��]��S��I��?��5��+��!���� ����ù�����Hj��˦�P×������m6������ä������B^��˦�P×������m6������ä����������������ÿ������ÿ������ÿ���������������������������������Ù��Ú��Úûýÿù��_��B��×î÷ÿ¿���������������ÿÿÿÿÿÿÿÿ��_ÿÿÿÿÿÿÿÿÿÿÿÿ���Àÿÿÿÿ�����_������Ë��Å��±����@��T��h���@���€��.à�������������������������������ÇF†G����‰�q�‰�q�‰�q������ ü��!��!$��!8��!L��!`��!t��!ˆ��^��B��!&��. ��:î��GÒ��T¶��aš�� \�� p�� „�� ˜�� ¬�� À�� Ô�� è��!œ��!°��!Ä��!Ø��!ì��"���"��"(�� ü�� \��!œ��!L��!œ��^��2Ì��2ô��TŸ��T³��TÇ��TÛ��Tï��U��U��U+��k��O��,3��9��Eû��Rß��_Ã��l§��Sÿ��T��T'��T;��TO��Tc��Tw��T‹��U?��US��Ug��U{��U��U£��U·��UË��U+��T‹��UË��U{��UË��l§��DK��Ds@0 � €�� P€�@@��A�‚€Å"� `€$��@@ÀD��ˆB@Ø”J@’�À‚" H@$€ ˆ†��©� @`�A@€� „% $@@ € LÀ¸L€¨ @ˆ1D�D@�ID��B� @����$ È@ 0 °�*�€€ˆ@�€H��Y ��€`�L¤�@ �������������������������Œ �$ ���Rj @a�”�( �HAD0 �‰¢ ˆ�„�`m* �"��@� )^�„$€â�ˆ¨� @ˆˆ" �I�B¢„@����)^¤€���ë×ÉÆÇÆÎÅÓP�µ��ô��_�@¯tt�¿��~‡¯¯¯¯�ø�øø�mnn�n���¤�/&#¡�� ��(, �k��(����S��������������oP������������������������ÿ��l��������&ÿæ�ÿæÿì�”ÿì�”�ÿÝ?ÿÝÿì�”ÿì�”%$�‡"D��%$%�¹Z�À���€�°�±�²�³��`������������������������Op�����5��ÿÿ����#Dÿÿ����������������������������������������������������������������������������������������������������������������������������������������½� TM� � � � Ê����������������PrintIM�0100������������������<Dummy preview image data>�������������R98������0100�������������������������3Œ������3”(�������������3œ���������������������H������H���<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Minolta.mrw�����������������������������������������������������������000644 �000765 �000024 �00000005044 10342332720 020224� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������MRM�� �PRD���27200001 ˜ È À Y�����TTW��„MM�*���� ������� À������ ��������������’�������°���� ���Ì�������1�������Ö2�������ê‡i������tÄ¥����v���þ����KONICA MINOLTA DIGITAL CAMERA�Konica Minolta Camera, Inc.�DiMAGE A2�DiMAGE A2 Ver.1.12 �2004:11:18 23:14:58�PrintIM�0250��������������.���������������������������������������������������������������������������������‚š������Ö‚������Þˆ"�������ˆ'�����@�������0221������æ������ú’� �����’� �����’������’��������’��������’ �������’ ������&’������.’|�����6’†����@��< �������¤��������¤�������¤��������¤������|¤�������¤��������¤��������¤��������¤ ��������¤ ��������¤ ����������������������� 2004:11:18 23:14:58�2004:11:18 23:14:58������� ������� ��,���d��4���`È@€� ������MLT0������Ì������è������ú� ����� �@�����õ=€�ˆ������"�‰����������������������� ��������� ���������������������€��������������������,���C������������������������<�����a��������Ô �:����������������&��¶�����ý������������������������������������������������6��`��È��������������������������������C����������������������������������������@�������¯¯¯¯��v��ÿð�������������������������#������������������������������������� ��� ��� ��� ������������������������������#������������������ø���������������‘��*����ä��M��a��u������� ���������������u��u�a�€ê�ˆÊ�tû�UH�~”�|¦�eò<was 25600 bytes>�'‚Q×����������������±p �ö������������ ��)f���…��>�Èp�?ñ?Ó��� �,ÿÿÿÿ������(ÿÿÿÿ������'ÿÿÿÿ������"ÿÿÿþ�������ÿÿÿÿ�������ÿÿÿÿ������ÿÿÿÿ������ÿÿÿÿ�������ÿÿÿÿ������ÿÿÿþ������ÿþÿþ������ÿÿÿÿ������ÿÿÿÿ������ÿÿÿÿ����ÿÿ� ÿÿ<was 8000 bytes>®®®  ÿ�� ��ü �����������������������`I����hSfQ`KXCC,`Ihhhhh�����@@@@@ ����  �������wF����\��� �������ƒ���������oH�������������������������������6������������������������������������¶�ý����6�4�6" ��€��!8!8������������<was 4228 bytes>������� <Dummy preview image data>ASCII�������������������������������������������������������������������WBG��� ¶��ý�RIF���<���€�+�â÷e5J¹! S5J�L�K��KÿÔÿÖ�€ÿÖ�€ÿÊÿìÿÊ�����PAD�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<Dummy raw data>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/MOI.moi���������������������������������������������������������������000644 �000765 �000024 �00000000500 12443554571 017232� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������V6��@Û:»€��à������������������������������������������������������������������������������������������������������������Q���Á �����������������������������������������������������������������������������������X–��� V����X–��� V����������������������������8a"a !a a $a %aa a a a a a a a a a a ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Motorola.jpg����������������������������������������������������������000644 �000765 �000024 �00000004671 12614670361 020407� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá¼Exif��MM�*���� ���� ���†��������������˜������� (�������1����4���¨2�������Ü�������‡i�������ðˆ%��������:Motorola��XT1575�����H������H���clark_retus-user 5.1.1 LPH23.116-18 18 release-keys�2015:09:18 11:23:37��‚š������j‚������rˆ"�������ˆ'�����2�������0220������z������Ž‘�����’� �����¢’������ª’� �����²’� �����º’������Â’�������’ �������’ ������Ê’|�����Ò �����0100 ������� ������à ������¨ ������ö£�������¤��������¤��������¤��������¤������î¤��������¤��������¤ �������¤ ��������������3�† � @�† 2015:09:18 11:23:37�2015:09:18 11:23:37���C���d� @�† ÿÿÿÿ����������� @�† ��Ó���dMOT��aU����� ��šU���� ��§U����`���U�������Tà�������U�������U€� �����:˜U� �����u0U � ����� U°� �����8UÀ� ������UÐ���� ��²Tð� ���B¹ú d�����OFF�U������žd����NO��d0� �������dO� �������dÀ� ������dÁ�������dÂ�������dÃ��������dÄ� �����GdÅ������e0� �����îe1� ������ e2� �������e3� �������e4� ����®Çe5� ����°Vp���������p����þ!��p����ýƒ��p����¾��p����ú��p��������U��������U �������U0������»U@����_���UP����U���U`������ÎUp������Óe��������fA�������Uç����ÈÀ��Uè����4@��Uå����¸ ��Uæ����D`��f���������f�������f�������f@��������f��������f^���� ��Øf������äf����Í��f����1��f����1��f������fB����×��fC����2��fD����1��fE������f������éf����”��f����3��f����2��f����v��fF����¡��fG����4��fH����4��fI����v��fN���� ���fO�����@��fP�����@��fQ�����@��fR�����@��fT��������fU��������fV��������f]�������fS����AL��g�������îg���� ��ÿg����32��g����SO��g����GU��g���� ��g���� ��g����69��g����¸ ��g ����D`��g ����¸ ��g ��������e �������e!�������.����LPH23.116-18�NX0A3S0075�yuv420sp�continuous-picture�auto�auto�BACK,IMX230�5000�3000�00000000904c2ca2�94014037�03Jun2015�904c2ca2�����d���d������R98������0100��������������������2����WGS-84����������������ˆ������(�������������˜��������������H������H���<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�����������������������������������������������������������������������Image-ExifTool-10.10/t/images/MP3.mp3���������������������������������������������������������������000755 �000765 �000024 �00000000613 10431343416 017115� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ID3����}TRK���1/5�TPA���1/2�RVA�� ....����ULT���eng�Do-wap she-bang�PIC���JPG�comment�<Dummy picture>TT2���ExifTool Test�TP1�� �Phil Harvey�TCM�� �A Composer�TAL���Phil's Greatest Hits�TT1�� �This group�TYE���2005�TCO�� �Testing�COM���eng�My Comments�ÿûlTAGTitle�������������������������Artist������������������������Album�������������������������2003Comment��������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/MWG.jpg���������������������������������������������������������������000644 �000765 �000024 �00000004317 11271545440 017237� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿáHExif��MM�*�����������n��������������†�������Ž(�������;����/���–�������‡i�������Æ����RIGHT-EXIF-Description�����`������`���RIGHT1of2-EXIF-Creator; RIGHT2of2-EXIF-Creator��������0220������,‘�����’����133�’‘����111�’’����122� �����0100 ����ÿÿ������2001:01:01 01:11:11�ÿíXPhotoshop 3.0�8BIM����;���7�19920101<� 021111+0100>�20020202?� 022222+0200�WRONG1of2-IPTC-Keywords�WRONG2of2-IPTC-KeywordsP�WRONG1of2-IPTC-CreatorP�WRONG2of2-IPTC-CreatorZ�WRONG-IPTC-City\�RIGHT-IPTC-Location_�RIGHT-IPTC-Statee�RIGHT-IPTC-Countryt�WRONG-IPTC-Copyrightx�WRONG-IPTC-Description�ÿá.http://ns.adobe.com/xap/1.0/�<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 7.98'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:creator> <rdf:Seq> <rdf:li>WRONG1of2-XMP-Creator</rdf:li> <rdf:li>WRONG2of2-XMP-Creator</rdf:li> </rdf:Seq> </dc:creator> <dc:description> <rdf:Alt> <rdf:li xml:lang='x-default'>WRONG-XMP-Description</rdf:li> </rdf:Alt> </dc:description> <dc:rights> <rdf:Alt> <rdf:li xml:lang='x-default'>RIGHT-XMP-Copyright</rdf:li> </rdf:Alt> </dc:rights> <dc:subject> <rdf:Bag> <rdf:li>RIGHT1of2-XMP-Keywords</rdf:li> <rdf:li>RIGHT2of2-XMP-Keywords</rdf:li> </rdf:Bag> </dc:subject> </rdf:Description> <rdf:Description rdf:about='' xmlns:photoshop='http://ns.adobe.com/photoshop/1.0/'> <photoshop:City>RIGHT-XMP-City</photoshop:City> <photoshop:DateCreated>1993-01-01T03:11:11.311+01:00</photoshop:DateCreated> </rdf:Description> <rdf:Description rdf:about='' xmlns:xmp='http://ns.adobe.com/xap/1.0/'> <xmp:ModifyDate>2003-03-03T03:33:33.333+03:00</xmp:ModifyDate> <xmp:Rating>3</xmp:Rating> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/MXF.mxf���������������������������������������������������������������000644 �000765 �000024 �00000016526 11503520633 017251� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������+4 �ƒ��h����������������������������������� �����������������������+4 �������+4 �+4 �ƒ�z���1���+4�����+4��+4 ��+4���+4���+4��+4��+4��+4���+4��+4��'+4���0+4����0+4��0+4���;+4��;+4��;+4���;+4��;+4��; +4����; +4��; +4��<+4 ��<+4 ��<+4 ��<+4��<+4  ���<+4 ��< +4 ���< +4����=+4���=+4���=+4��=+4���= +4���= +4���?+4����D+4����D+4��D+4��D+4��G+4��H+4����H+4���H+4��H+4����K+40����K+4��+4S /�ƒ��¦< �pãMM¯F§¼cù`yT@;�Ú �(8;�;�������—4@¼²M¸eTBýë¸; �������+4 �; ��������;�ìݘ›ˆ&ZM‰é€×ù¼‹}; �+4 �;�©XrµO®f“x&õ³+4S 0�ƒ��ì<��P�h�i�l� �H�a�r�v�e�y<��E�x�i�f�T�o�o�l<�B�B�a�s�e�d� �o�n� �M�X�F�L�i�b� �1�.�0�.�1�(�1�6�)�-�R�e�l�e�a�s�e<� ������<�2�M�X�F�L�i�b� �(�d�a�r�w�i�n� �o�n� �x�8�6�_�6�4�)<�Ú �(8< �—4@¼²M¸eTBýë¸< �(}üõMÊìG²@ÄùqÄD’+4S �ƒ��\�(������©XrµO®f“x&õ³OÙÆ+ò¢F™}(Åä#¤�������= e5 M³n^YíEÚ< �ìݘ›ˆ&ZM‰é€×ù¼‹}+4S 6�ƒ��|D�  +4 ���°ÉkÜE$IªRÌ{y (÷D�Ú �(8D�Ú �(8D�(������ƒ*Mµ«@®ÆÕж5q®bãS ~Jl�ûÐ÷57< �©XrµO®f“x&õ³+4S ;�ƒ��pH��T�i�m�e�c�o�d�e� �T�r�a�c�kH�����K���������K�������H����H�'ɰ 1|IJƒ²½ì«À¦< �ƒ*Mµ«@®ÆÕж5q®+4S �ƒ��P�+4����ÿÿÿÿÿÿÿÿ�������üñ-^|µMDŒú<.ïÇ¿< �'ɰ 1|IJƒ²½ì«À¦+4S �ƒ��K��������������ÿÿÿÿÿÿÿÿ< �üñ-^|µMDŒú<.ïÇ¿�+4���+4S ;�ƒ��jH��S�o�u�n�d� �T�r�a�c�kH�����K���������K�������H����H�šQ¼ËàB¤Þõà®< �bãS ~Jl�ûÐ÷57+4S �ƒ��P�+4����ÿÿÿÿÿÿÿÿ�������Q½»¢þJ“G¯\mæâu< �šQ¼ËàB¤Þõà®+4S �ƒ��l�ÿÿÿÿÿÿÿÿ�  +4 ���GüKégåKH¿_òõckã�������������< �Q½»¢þJ“G¯\mæâu�+4���+4S 7�ƒ��D�  +4 ���GüKégåKH¿_òõckãD�Ú �(8D�Ú �(8D�(������“{§ø¤ÎÙG¢ å}ãÔÉYeê‹§CN§ÓD*‘[“< �OÙÆ+ò¢F™}(Åä#¤G�k9H·¹ƒ±Nœ’ý(v+4S ;�ƒ��pH��T�i�m�e�c�o�d�e� �T�r�a�c�kH�����K���������K�������H����H�ҥȳÉ×N£¾ÂåìïzÄ< �“{§ø¤ÎÙG¢ å}ãÔÉ+4S �ƒ��P�+4����ÿÿÿÿÿÿÿÿ�������1ªƒQ¬å@œÞ–DF/µ±< �ҥȳÉ×N£¾ÂåìïzÄ+4S �ƒ��K��������������ÿÿÿÿÿÿÿÿ< �1ªƒQ¬å@œÞ–DF/µ±�+4���+4S ;�ƒ��jH��S�o�u�n�d� �T�r�a�c�kH�K���������K�������H����H�Þ ; ,EI•MÆ“†+‰< �Yeê‹§CN§ÓD*‘[“+4S �ƒ��P�+4����ÿÿÿÿÿÿÿÿ�������…6°“Bƒœd§Yf< �Þ ; ,EI•MÆ“†+‰+4S �ƒ��l�ÿÿÿÿÿÿÿÿ� ����������������������������������������������< �…6°“Bƒœd§Yf�+4���+4S H�ƒ��k0�������=���À���=��=����=����= ��= ���À0�+4 �0����< �k9H·¹ƒ±Nœ’ý(v+4S #�ƒ��@'�  +4 ���GüKégåKH¿_òõckã?����< �= e5 M³n^YíEÚ+4 ‡�������+4 �ƒ��h����������� ¥�������������� ¥������������������������������+4 �������+4 �+4 �ƒ�ž���3���+4 ���+4�����+4��+4 ��+4���+4���+4��+4��+4��+4���+4��+4��'+4���0+4����0+4����0+4��0+4���;+4��;+4��;+4���;+4��;+4��; +4����; +4��; +4��<+4 ��<+4 ��<+4 ��<+4��<+4  ���<+4 ��< +4 ���< +4����=+4���=+4���=+4��=+4���= +4���= +4���?+4����D+4����D+4��D+4��D+4��G+4��H+4����H+4���H+4��H+4����K+40����K+4��+4S /�ƒ��¶< �pãMM¯F§¼cù`yT@;�Ú �(9;�;�(������—4@¼²M¸eTBýë¸lW6ÚÒ«Jœà­Ü=>; �������+4 �; ��������;�ìݘ›ˆ&ZM‰é€×ù¼‹}; �+4 �;�©XrµO®f“x&õ³+4S 0�ƒ��ì<��P�h�i�l� �H�a�r�v�e�y<��E�x�i�f�T�o�o�l<�B�B�a�s�e�d� �o�n� �M�X�F�L�i�b� �1�.�0�.�1�(�1�6�)�-�R�e�l�e�a�s�e<� ������<�2�M�X�F�L�i�b� �(�d�a�r�w�i�n� �o�n� �x�8�6�_�6�4�)<�Ú �(8< �—4@¼²M¸eTBýë¸< �(}üõMÊìG²@ÄùqÄD’+4S 0�ƒ��ì<��P�h�i�l� �H�a�r�v�e�y<��E�x�i�f�T�o�o�l<�B�B�a�s�e�d� �o�n� �M�X�F�L�i�b� �1�.�0�.�1�(�1�6�)�-�R�e�l�e�a�s�e<� ������<�2�M�X�F�L�i�b� �(�d�a�r�w�i�n� �o�n� �x�8�6�_�6�4�)<�Ú �(9< �lW6ÚÒ«Jœà­Ü=>< �˜ šb€K›ï¤Éá”ôƒ+4S �ƒ��\�(������©XrµO®f“x&õ³OÙÆ+ò¢F™}(Åä#¤�������= e5 M³n^YíEÚ< �ìݘ›ˆ&ZM‰é€×ù¼‹}+4S 6�ƒ��|D�  +4 ���°ÉkÜE$IªRÌ{y (÷D�Ú �(8D�Ú �(8D�(������ƒ*Mµ«@®ÆÕж5q®bãS ~Jl�ûÐ÷57< �©XrµO®f“x&õ³+4S ;�ƒ��pH��T�i�m�e�c�o�d�e� �T�r�a�c�kH�����K���������K�������H����H�'ɰ 1|IJƒ²½ì«À¦< �ƒ*Mµ«@®ÆÕж5q®+4S �ƒ��d�+4�������������������üñ-^|µMDŒú<.ïÇ¿< �'ɰ 1|IJƒ²½ì«À¦�˜ šb€K›ï¤Éá”ôƒ+4S �ƒ��_����������������������< �üñ-^|µMDŒú<.ïÇ¿�+4����˜ šb€K›ï¤Éá”ôƒ+4S ;�ƒ��jH��S�o�u�n�d� �T�r�a�c�kH�����K���������K�������H����H�šQ¼ËàB¤Þõà®< �bãS ~Jl�ûÐ÷57+4S �ƒ��d�+4�������������������Q½»¢þJ“G¯\mæâu< �šQ¼ËàB¤Þõà®�˜ šb€K›ï¤Éá”ôƒ+4S �ƒ��€����������  +4 ���GüKégåKH¿_òõckã�������������< �Q½»¢þJ“G¯\mæâu�+4����˜ šb€K›ï¤Éá”ôƒ+4S 7�ƒ��D�  +4 ���GüKégåKH¿_òõckãD�Ú �(8D�Ú �(8D�(������“{§ø¤ÎÙG¢ å}ãÔÉYeê‹§CN§ÓD*‘[“< �OÙÆ+ò¢F™}(Åä#¤G�k9H·¹ƒ±Nœ’ý(v+4S ;�ƒ��pH��T�i�m�e�c�o�d�e� �T�r�a�c�kH�����K���������K�������H����H�ҥȳÉ×N£¾ÂåìïzÄ< �“{§ø¤ÎÙG¢ å}ãÔÉ+4S �ƒ��d�+4�������������������1ªƒQ¬å@œÞ–DF/µ±< �ҥȳÉ×N£¾ÂåìïzÄ�˜ šb€K›ï¤Éá”ôƒ+4S �ƒ��_����������������������< �1ªƒQ¬å@œÞ–DF/µ±�+4����˜ šb€K›ï¤Éá”ôƒ+4S ;�ƒ��jH��S�o�u�n�d� �T�r�a�c�kH�K���������K�������H����H�Þ ; ,EI•MÆ“†+‰< �Yeê‹§CN§ÓD*‘[“+4S �ƒ��d�+4�������������������…6°“Bƒœd§Yf< �Þ ; ,EI•MÆ“†+‰�˜ šb€K›ï¤Éá”ôƒ+4S �ƒ��€���������� ����������������������������������������������< �…6°“Bƒœd§Yf�+4����˜ šb€K›ï¤Éá”ôƒ+4S H�ƒ��‹0�������=���À���=��=����=����= ��= ���À0�+4 �0����< �k9H·¹ƒ±Nœ’ý(v0����������˜ šb€K›ï¤Éá”ôƒ+4S #�ƒ��@'�  +4 ���GüKégåKH¿_òõckã?����< �= e5 M³n^YíEÚ+4 �ƒ����������������������� ¥���0��������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Nikon.jpg�������������������������������������������������������������000644 �000765 �000024 �00000003247 10357015703 017662� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿáªExif��II*���� �� ���’�������ž�������¤��������������ª�������²���(�������1� ���º���2����Ä����������i‡����Ø���(�� ��NIKON�E775��,�����,�����E775v1.3u�2001:08:01 12:57:23��š‚����þ��‚������"ˆ�������'ˆ����d��������0210����������"��‘�����‘����6��’ ����>��’����F��’�������’�������� ’�������� ’����N��|’�6��V��†’�}���Œ��� ����0100 ������� ����@�� ����°�� ���� ���£�������£����������� ���V��^��� ���2001:08:01 12:57:23�2001:08:01 12:57:23����������� ���#��� ���V��� ��������������������������4�������:���� ���B�������P�������X�������`�� �����h�������p��€�����x��‚�� ���†��…�����”��†�����œ��ˆ��������������¤����z���´����^���.������COLOR�FINE ��AUTO ��AUTO ��AF-C �� �€"��è��AUTO ��NORMAL �OFF ����������d���d��� �9�€D����ÿ����j�����1��0��ã�� �� �� Ü�N����™Ã’výë���� ������������ ��(� $�b1�6�!$ÿSQX2��ÿ�PrintIM�0100�� ���������^������������� ����� ����� �¦��� ����� ������¾����������������������������������������������������������������������������������������������������������������������������������������������R98������0100����������������v������~��(�����������†�������������,�����,�����<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Nikon.nef�������������������������������������������������������������000644 �000765 �000024 �00000014054 10547511116 017650� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������II*�����þ������������� �������j�������:��������������������@��� ���R��������������������������j��������������\������d���������(�������1����l��2����Š��J����ž��»ƒ����¦��i‡����r��s‡�ì��ê������Ö��’��������������NIKON CORPORATION�NIKON D70�,�����,�����Nikon Capture Editor 4.3.1 W��2005:08:25 13:09:05�ê��~�����x� A caption(�noneZ�Kingston_�Ontarioe�Canada����ìNKON ��mntrRGB XYZ Ï� ���;�acspAPPL����none�����������������öÖ�����Ó-��������������������������������������������������� desc���ð���MrXYZ��@���gXYZ��T���bXYZ��h���rTRC��|���gTRC��Œ���bTRC��œ���wtpt��¬���cprt��À���,desc�������Nikon Adobe RGB 4.0.0.3000�����������Nikon Adobe RGB 4.0.0.3000����XYZ ������œ��O¦��üXYZ ������4‹�� +��•XYZ ������&2��/��¾ curv�������3��curv�������3��curv�������3��XYZ ������óT����Ïtext����Nikon Inc. & Nikon Corporation 2001�2004:06:09 16:02:35��þ��������������������������P������X��(�����������`�����������������������H���<Dummy JpgFromRaw image data>��þ��������������à ������Þ������ �������™‡������#€������`��������������������Þ�������������P������X���������(�������‚������Ž‚���������,�����,�����<Dummy strip data>�š‚����€��‚����ˆ��"ˆ�������'ˆ����È�������������¤��’ ����¸��’����À��’�������’�������� ’�������� ’����È��|’���Ð��†’�,���æ��’����00��‘’����00��’’����00�� �������¢��������£�������£�������£�������������d���#��� ���2004:06:09 16:02:35�2004:06:09 16:02:35��������$��� ���������Nikon����II*����(������0210�������È������î���� ���ö�������������� �� ��������� ������������� ���������������È�� �������� �����ƒ��������„�����&��‡���������ˆ��������‰���������‹�����@ �Œ�����F���� ���X���� ���b��’���������“��������•�����n��–�����t��—��Œ���†��˜�������™�����ððš�����2�� �� ���B��¤�����0100§�����#��©�����L��ª�����T��«����� ����‡ ��\����������*���ä������†������RAW �AUTO ��NONE ��AF-S ���������CS ��������F������#��� ���-��� ���<Dummy NEF curve>�MODE2 ��NATURAL �OFF ��<Dummy NEF curve>�0103������������Þ í �������p� ��� �ëÿ�îÿ�ðÿÿÿÿÿÿÿ�€��������� ��€�����€������ÿ�ÿ�M�–��Ûÿkÿº�–�„ÿæÿ����5ÎóÌrrs��0101,�ñ_-@-\,4„,ï@ Y����N��� ���N��� ���12345678��CUSTOM��NORMAL��@©†zéÒ© �ª�±Á·�u ���2¤v¢Ô© �ª�±Á·�����aQ+äß]Ò© �ª�±Á·� ���`Q+äß]Ò© �ª�±Á·�����d��2¤v¢Ô© �ª�±Á·����Ü}�eÔÑ‘”DEST��ÿK�����������Ü}eÔÑ‘”DEST������ÿ�������������������������ÿ���ÿ���ÿ�����������������ð?������ð?��������������ð?�������������������������ð?������ð?��������Ü}eÔÑ‘”DEST�����ÿ�ÿ�����������������������ÿ�����������?������ð?������ð?��������������ð?�������������������������ð?������ð?��������Ü}eÔÑ‘”DEST�����ÿ�����ÿ�����������������������ÿ�������ˆ?������ð?������ð?��������������ð?�������������������������ð?������ð?��������Ü}eÔÑ‘”DEST�����ÿ���������ÿ�����������������������ÿ�����������������ð?������ð?��������������ð?�������������������������ð?������ð?��������2¤v¢Ô© �ª�±Á·����Ü}�eÔÑ‘”DEST��ÿK�����������Ü}eÔÑ‘”DEST������ÿ���������������������������������������������������ð?������ð?��������������ð?�������������������������ð?������ð?��������Ü}eÔÑ‘”DEST�����ÿ���������������������������������������������������ð?������ð?��������������ð?�������������������������ð?������ð?��������Ü}eÔÑ‘”DEST�����ÿ���������������������������������������������������ð?������ð?��������������ð?�������������������������ð?������ð?��������Ü}eÔÑ‘”DEST�����ÿ���������������������������������������������������ð?������ð?��������������ð?�������������������������ð?������ð?��������^èŠ�6Ô¶m�PÚZ ����Ü}�eÔÑ‘”DEST��ÿ �����������Ü}eÔÑ‘”DEST������ÿ�������������ÿ���ÿ���ÿ�����������������������������ð?������ð?��������������ð?�������������������������ð?������ð?��������Ü}eÔÑ‘”DEST�����������������Ü}eÔÑ‘”DEST�����������������Ü}eÔÑ‘”DEST�����ÿ����������������2¤v¢Ô© �ª�±Á·�����2¤v¢Ô© �ª�±Á·������(¤»È<ËC»œI¯> í������QS~OËOL A€4U<Wå�����ކb¯Üµ M–iÐTú � �����@�EÓ w£nN¤¾ÏÁ޵·G����E:Dþ’§LƒŠ'÷×jâž ����}uRøLe Fdf^Eik��������l�������à3B7¸ÌÒ ©·Á±�ª��ñ���porCß���‰*dôc¬Ñ§w�ª�±Á·�Í������������������������€·@�����@¯@�����������������������������������������������������€·@�����@¯@�����€·@�����@¯@tÚ@§ $@«ªªªªª@�����Àr@������ð?�����À‚@�����Àr@������ð?�����€§@�����@Ÿ@�����óVAªñÒMbø?�������2¤v¢Ô© �ª�±Á·����`B¥V›Ô© �ª�±Á·� ������������������433333Ó?��2¤v¢Ô© �ª�±Á·���� l<¿ÊÔ© �ª�±Á·�)���¤g—€ �@ZŠ Bû?�����ˆ��������ð?ÀË=u7mÔ© �ª�±Á·����ào’¬Ô¿÷� E������������������������õÝöGCL™†a½›P§çw�����-“}#i»O›ˆ|‡Î:ÌÖê� �������yOÇf"˜OÈ’.ƬlÉZ����# ,%Ã,J€JW€V/Þc������#}_§kO—^Óv¹›Q�����o£™¹?Kˆ¬cYds3ï� ��� ���àöõžÖ¿÷�з’AF�ª������x� A caption(�noneZ�Kingston_�Ontarioe�Canada�����������������������������������������������������������������������������������������������������\å&Ö¿÷�з’AF���������������2¤v¢Ô© �ª�±Á·�����ÀÕk¬öŒÖ±7�з’AF����P�O¤(þÔ=LbÉÐUŠá¹]����Æsü<I|…§üÒÇã� ������������^Ê^«ÞÐJ‚¾:‹W’ú����4”X„Àé?@ªS°Q¦—�������������1 ��œÆ��t.ô¿˜ßNÚ½˜Ãš=á����N8°YFtž@àT¼��������������aþ&Ï"¹“Cж5IÉÕTP����1„À/»Š§E¼}y4k¤Ò� �����������GŽÿæ9YL¬Ãr2~ŸJ����A<³ô2^¾N‚½©!9PÛ�����¶6nj\DN§Ìj@ãüF�����ÍÇ6ÖE„L~ºŽŽ•ë�����K"‰ aMj½· 9wY¬p�����ªTUÎö¢ÍG§ým¤+®&¯�����7C{ãµN«¢ñÓ«m� ������<���xëu!F —B—›:pôû`î�����‘õ‰@´½O’×ÂF!Í>����2������<����0100�������������b,������� ���������������\������d��(�����������l�������������H������H������<Dummy preview image data>������Ô��A��������P� ����ä��Q� ����ì��`��������������������POSITIVE �����������������������������Normal��ASCII��� ���<Dummy strip data>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/NikonD2Hs.jpg���������������������������������������������������������000644 �000765 �000024 �00000006661 10357015703 020346� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá ´Exif��MM�*���� �������’���� ���¤��������������°�������¸(�������1���� ���À2�������Ê�������‡i�������Þˆ%������ ú�� NIKON CORPORATION�NIKON D2Hs����,�����,���Ver.1.00 �2005:03:18 02:55:18��(‚š������Ä‚������̈"�������ˆ'���� �������0221������Ô������è‘�����‘������ü’� �����’������ ’�������’��������’ ��������’ ������’|���„��’†����,��  ’����16��’‘����16��’’����16�� �����0100 ������� ����  �� ����`�� ������ Ü¢�������£��������£�������£������ ̤��������¤��������¤�������¤������ Ô¤�����K��¤��������¤�������¤��������¤ ��������¤ ��������¤ ��������������� ��â���(��� 2005:03:18 02:55:18�2005:03:18 02:55:18�������������������� ��ô��� Nikon���MM�*����-�����0210������� �������*����� ��2�������@�������H����� ��P� ���� ��^� ��������� ������������ ��������������� �������h���������������� �����p��������������x������������� ��€�ƒ��������„������Š�‡���������ˆ��������‰��������Š��������‹����X ������ ��ª����� ��´�‘���~��À�’���������•������>�—���`��D�˜������¤�š������Ä�¢�����ä·�£���������¥��������¦���������§��������¨������Ô�ª������è�¯������ø�±�����������FINE �PRESET0 ��AUTO ��AF-C ��NORMAL �� ������  `�������3001006�AUTO ����ô��� ��ô��� ������ ������ MODE3 ��COLORED �0206ûÓ°(©÷ú"–=½°o”°H IãîeE-èv× ì™l’‹Wöh­Å°nÿcš¤1´ 3/þ ]xf'»"\iIü‚ÛØ}õ@^OªQaDúƒßå !Nk29x rKžHM%ÒNŸÃºÅ!ýêÓ€µ½˜ — P< «1B ¤ …•h`´ïsÊ÷/“dÚýÕ.ð…í(6ÈŒ‹ÙÙ¬RŸCb|m¼pj¿gZ ÁñôÉsï>cªâGØg{bVvÃ=丹çc’^9Rn7‡ EºÃŸ.x%MH£KPšk0Ýx;XÝñtË•¹j&_ªO^@õyÈÛ‚4åZo"‚'MxwÊþ!3[´(›šyÿY°Ç­h÷W”’lè™ìâ Ô‰è9E'îæ$±Üг¥~ •Ýýæ§3¢ËÉh»‡†]ýuØÞÏ“*„ÑæÄz _Žj ˆÆ÷à²L¹ù ò¼7–ØÍºPÎC:¡TjSž�5=ÆG›Â¼‰­œ`ûç¦8ŽÕg¦ɸ½v—–oœ•˜É^›zÙÁY,,YÒK—¶Çk²£¿F£Ç63|ÅYˆàÕ8¦ÿûúœ1‰¤ÇŸBÃ!)‹FT¡8AͯZ36•5¨ñ5F»'˜Áš×‡“ü=µ¡ä#_0HÌyñT�Ü…|Éé–¢;§ùi–fz›µ­<\…ã}ð2¶.I~v¦î-`‘–V:kQÆgj¼e¥§b3,Þ-Q¢CX/c;ï]øK3X[ÛÆöÕ^O¼…c7ø Ü•¡ÌVw•…Ì9yÜwGg[J6@g×ÓØ»žXêÓ`‰€µMOFF ��0206����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������éÜ¢;§æúï” ¯±“+®$ãî0E-èv× ¯èSa–¡Uùh¶Á˜nÙa˜¤Ì1" .-Ø¢®]™f¾¹T^J¾Æ™DDœ?öÄ^OªÐaDúƒßåVwk2Ì9yŒr+·HM%ÐNŸÃº„!‘ÔêÓ€µ½˜F8½<ö©ãb„gÙ¸âUŸ>s5ôÁ›ÚÜ?Ñðzí×6Ë^¬ÙÛ‹RË*ʇ×,2#ÚdÁñôÊsï>`U¸&k{n© 4BÅašš·§ÓêÔ‘!„ºÃŸNÐ%MHH+Œ†932”w©råï ƒDžQëªìO¡@ }'5Ú‚ýIkE"å6f}X¡ÿ,J¨v·¤Pÿn°á­(öV‹Òm™ ÕtŽ+K>»í8µ8ް¯x)ÆÝûæ¯;£ïZE°±j0201Ëʰ2¶¬¨«Íp.»§ð §B ]íî0E-èv����^��� ���^��� 0100����������������NORMAL �0100���������ÿ�íº<������������������j������r(������������� l��������������������,�����,���ASCII������������������������������������������������������R98������0100������������������������������� f������ n(������������� v��������������������,�����,���<Dummy thumbnail image data><Dummy preview image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/NikonD70.jpg����������������������������������������������������������000644 �000765 �000024 �00000007115 10336164711 020134� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��H�H��ÿá ŽExif��MM�*���� �������ª���� ���¼��������������Æ�������Î(�������1���� ���Ö2�������à>�������ô?������������4�������‡i������L�� �NIKON CORPORATION�NIKON D70���,�����,���Ver.1.02 �2005:01:14 08:57:59���9��è��I��è���@���d���!���d������d���G���d������d������d��+��è��K��è���r��è�(‚š������2‚������:ˆ"������������0221������B������V‘�����‘������j’� �����r’������z’�������’��������’ �������’ ������‚’|�����Š’†����,�� ž’����20��’‘����20��’’����20�� �����0100 ����ÿÿ�� ���� À�� ����Ð�� ������ â¢�������£��������£�������£������ ʤ�������¤��������¤��������¤������ Ò¤�����T��¤��������¤��������¤��������¤ �������¤ �������¤ ��������¥������� Ú������� ��X���2��� 2005:01:14 08:57:59�2005:01:14 08:57:59�����������������+��� ��0��� Nikon���MM�*����*�����0210��������È������������ ����������������$����� ��,� ���� ��:� ��������� �����������Å ��������†�����ö���������È�������H���������������� �����P����� ��X�ƒ��������„������b�‡���� ����ˆ��������‰��������Š���������‹����@ ������ ��‚����� ��Œ�‘���Ñ��˜�’���������•������j�—����Œ��p�˜������ü�š������� ������,�¢�����$š�£���������§�������¨������B�©������V�ª������f�«������v����FINE �AUTO ��MED.H ��AF-S ��NORMAL ��Built-in,TTL������ ÀÐ�������CS �����´��� ��¼��� ���#��� ���-��� MODE2 ��SPEEDLIGHT �0103��� ��Š63����� ���������������������������� �������� �������������ø�������������2�����A����9Ðpúýüÿ�Ô�¶�´�M�Q�]��„����������ƒ���dðððð° Ðð GÒðNðð p  ðp ðÀO?Ñðð0ðà àð¯ ð°à°Pð/òØøððØ úýüÿ�ÿ�¢�a�/74)6>-3/C?859Añ����������������À��������������������������������������������� $HÅ6$�H$$��� zF���� @loÄ��X= ����-*+!'!/AFB26����������������������������������������������E�����Hð5�!HT@-\,4„4e c����������OFF ��0103������������U�i���������p� ��� ÿë�ÿî�ÿðÿÿÿÿÿÿ€��������� ���€�����€�����ÿ�ÿ�M�–�ÿØÿ]�Ì�¤ÿxÿä����Qðð 9( û�'01015�!HT@-\,4„4e c�������N��� ���N��� NO= 20025585 ��0100�6��������������CUSTOM �ENHANCED � ���������������à������è(�������������ð��������������������,�����,���<Dummy preview image data>ASCII���curve: fotogenics point and shoot ��������������� ������R03������0100������������������ Z������ b(������������� j��������������������,�����,���<Dummy thumbnail image data>ÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ��/�G"�ÿÄ��������������ÿÄ�0��������!1Aa"Qq2‘BÁb¡ÒáñÿÄ���������������ÿÄ��������������1!AQÿÚ� ��?�øn¸-Ìc…Ûƒ §r£‘ëïXP3Ê´ÿ�þ$¶œ”~Yõ †jUVDñ';ô=éf ÕψÐ6^ƒžõ-äxav‘ŽÒàánþâ»õ÷N4‡T_DP)±‚ï…¥Óß'õ.dddaÞ´ï�•3!v#‘.v¥Òðè³åÔ ïL~&DBË"§™Ü©ä ôq+aÙ½ú|ÕRØÉõCY©8z¡‰ï€€ÌÔ«dçâ¥FÑ!66-pØ*ê }ecôEš&p[fߘ«ÒX±–ç 20àÀg>¼…5ÖîsF,€o¦¥åµ•我²Ð}GjâÆNøÔÁ‘Tú2Úö8ÌñÙ›TÂÄÄAÉñž´ JçÚ®¿„}ûÿ�•è@É“ÿ�iÛÑ^‚Ì9è:S(ÑM¼yR|£oŠÒÏù„®@!óÍ» Ó¶6è©A†Z¹~FIªôiÇ-!¶%‰hÆ3Ðô©WÝ]<2•i€4õ+×àí”@ìâ”y •5rYÛŸ¶P:áBÄ=?W¿v>ã÷¦‹Ùãè5¦<²tûÍ7�puBé+þ©™@›¶@üбuc*Ç2m®å1ð‹åIcou#÷ gá³&|}n@ÈAåæµÞ3.¢O}égãim/€cv(ϵ2]­l&e} µ¾™�[háˆsçoŠ`8zCçQôä)¤WQÉbn&ŒŒå26öÞ‘ßq¤ŽÊTb0Ž% ¹î64•gÉ‹Y¸|üX§K„8hÛïÉïžU)<Ò™divc“R¯¢§ÿÙ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Olympus.dss�����������������������������������������������������������000644 �000765 �000024 �00000000120 12542533472 020256� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������dss�����DS2300 ���þÿþÿ÷ÿ051116135242051116135253000010ÿÿÿÿÿÿÿÿÿÿÿ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Olympus.jpg�����������������������������������������������������������000644 �000765 �000024 �00000003045 10357015703 020250� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá(Exif��II*���� �� ���’�������²�������Ê��������������Ò�������Ú���(�������1� ���â���2����ì����������i‡�������¦��OLYMPUS DIGITAL CAMERA �OLYMPUS OPTICAL CO.,LTD�C2000Z��H������H������v951p-80��1999:12:06 16:38:40��š‚����&��‚����.��"ˆ�������'ˆ����d��������0210����6������J��‘�����‘����^��’ ����f��’����n��’�������’�������� ’������� ’����v��|’�Œ��~��†’�}��� ��� ����0100 ������� ����€�� ����à�� ����ˆ���£�������£����������� ���,����� ���1999:12:06 16:38:40�1999:12:06 16:38:40����������� ������ ���F��� ���OLYMP�� �����������������������������������������$������,������8���4���>�� � ���r�������’����������������������d��� ��d���)ÿ|þ^þGÿÊþÆþSR951�[pictureInfo] Resolution=1 [Camera Info] Type=SR951�OLYMPUS DIGITAL CAMERA�������������������������yñ�����yñ���r��yñ;²�m���D��Z £��ô�����������ua���� �������������������� ‘)� _daÕÑ�ÿBOS2 Pÿ��������������������������������������������������������������������������������������������������������������������������������������R98������0100����������������ô������ü��(������������������������H������H������<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Olympus2.jpg����������������������������������������������������������000644 �000765 �000024 �00000017025 10571152146 020336� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿáExif��II*���� �� ���ž�������¾�������Ö��������������è�������ð���(�������1� ���ø���2�������������i‡����<��¥Ä���,��–��OLYMPUS DIGITAL CAMERA �OLYMPUS IMAGING CORP. �u760,S760 ��:�����:�����Version 1.0 �2007:02:16 15:09:13�PrintIM�0300��%���������ð������������� ����� ����� �8�� ����� ������P���`�� �´������ÿ���ƒ���€���ƒ���ƒ���ƒ���€€€�€���������������� ���� ���� ø�� ���� Ö������ÿ���ƒ���ƒ���ƒ���€���������� ��'�� ��'��—��'��°��'����'��^��'��‹���'��Ë��'��å��'��������������������������������������������������������������������������������������������������������������������������������@@€€ÀÀÿÿ��@@€€ÀÀÿÿ��@@€€ÀÀÿÿ���@@€€ÀÀÿÿ��@@€€ÀÀÿÿ��@@€€ÀÀÿÿ�������������������������š‚����¶��‚����¾��"ˆ�������'ˆ����P��������0221����Æ������Ú��‘�����’ ����î��’����ö��’�������’�������� ’������� ’����þ��|’�ì����†’�}���ò��� ����0100 ������� ����� �� ����� �� ����x���£�������¤��������¤�������¤��������¤����p��¤��������¤��������¤�������� ¤�������� ¤���������������ú��� ��� ���2007:02:16 15:09:13�2007:02:16 15:09:13�ùÿÿÿ ���a��d���ž��d���OLYMPUS�II�������¨�����������������������������¼������Ä������Ì������Ø�� � ���Þ�� ����º��� ������0 ����¾��@ ����Ü��P �����������������0100����� ��� ������ ���2������T������������$�������0100�������������Døÿÿ�����������������������������������������������������������������@���¨����������� ����¬���������������������������������������¾��������������Æ������Ì���������� �������� �������� �������� �������� ����Ü��������������æ�������ì�������������������������� �������� ����ü�������������0100 �������������������0111�����†���������� ��� �������&���������������* ��� � ���@ ������d ������„ ��������������������������������������������������¦ ������¶ ��������� ���� �� ����È �����������������������������6�������0100�����ù������U������������ ���S���ê �� ����ÿ��� �������� �������� ������������œ ������° ��������������È ���Ð��è ����������������������o������ ������§�������� �������A��������������@������w������@������������������ ����������������������������������L�Š����.������ ������������ ���b��������������?������A��!����A��"��������#��������$����n��������������������������� ����”�������������� ����������������������������5���²������º�����¾��Ü���������������������������d���d���ö��d���������������D4328�OLYMPUS DIGITAL CAMERA �����������0100D4328�C90500055 �0171612001128001 ���ö��d���������������������������������������������0100�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������þÿ�����þÿ���þÿ���������������������ÿÿ�����������������������0100��0111†��\ÊÿÖÿÈÿ¦Žÿþÿ|ÿ„&��?�?�?�?���������������ẅ»‡…¹’þ&¸’·²»Õº%hŸ’·²»Õº%hŸ�������������������������������������������������������������e�Å�e�Å�e�Ä�f�Ä�������������������·���������0100ù��U����  � Q p « Ã Ú ë �  i ‰ ¤ À Õ ë �  & { š ´ Ï ë �  & 8 § Ã É Ú õ  & 8 I — à ð   3 E U ¡ à à û  < M U ] « Ì å �  / E e x ´ Õ ð ! 8 I Y i ½ Ú õ  & 8 M Y i ÿ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������o�� §� �A��@w��ã� �����������������L�Š. ��� ��������������������������?A��A����n������������������������������������00��d��xK®ŠŒ�’�T�TOúÿ�������������������������� �d���d���������R98������0100����������������ä������ì��(�����������ô�������������H������H������<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/OlympusE1.jpg���������������������������������������������������������000644 �000765 �000024 �00000016305 10357015703 020441� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿáÈExif��II*���� �� ���ž�������¾�������Ö��������������è�������ð���(�������1� ���ø���2�������������i‡���� ��¥Ä�ô���,��F��OLYMPUS DIGITAL CAMERA �OLYMPUS CORPORATION �E-1 ��:�����:�����Version 1.3 �2005:01:05 10:53:41�PrintIM�0250�����������ˆ������������� ����� ����� �Ð��� ����� ������è�������ÿ���ƒ���ƒ���ƒ���ƒ���ƒ���€€€�‚��� ��'�� ��'��—��'��°��'����'��^��'��‹���'��Ë��'��å��'���������������������������������������š‚����š��‚����¢��"ˆ�������'ˆ�����������0221����ª������¾��‘�����’ ����Ò��’����Ú��’�������’�������� ’�������� ’����â��|’�¸��ê��†’�}���¢��� ����0100 ������� ����� �� ����€�� ����(���£�������¤��������¤��������¤��������¤���� ��¤��������¤�������¤�������� ¤�������� ¤��������������d���-��� ���2005:01:05 10:53:41�2005:01:05 10:53:41����� ���ù�����������OLYMP��������0�����������������������������<������D������L������X�� � ���^���������� ���~������������œ@�����"@�)�������*����@��+����˜��,���� ���-�������.����� ��/����€�� �¼��¤�� �¶��`��0 �Î��� ��@ �˜��ä ��P �&��| �����������������������p��d���������������D4040�OLYMPUS DIGITAL CAMERA �dÞÿ¾ÿêÿ4âÿ�‚ÿxE�E�E�D�`��€ ��€��������010������¦��� ���¬��� ���Ì������ì�������������ô��� ���ú��������������������������6��� ����ó�� ����CÀ��������� ��� ������������������������������������ ���@������D4040�143008611 �4001310004375102 �p��d��������050105886����������������������������������������������������������������������������������������������������010�������������ü ����������������������������������������������������������������@���Ú����������� ����Ú ���������������������������������������â ��������������è ������î ������������������ �������� �������� �������� ����ô ���������������������������……yy���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������þÿ���þÿ��ýÿ���� ���<Dummy preview image data>�������010�� ����Ä ����������������������Ì ������Ò ��������������Ø ������Þ ���������� �������� �������� �������� ��������������������������������������������������010������œ"��������� ��� �������@��������������( ������������� ������������������������ ������€���������� � ���0 ������T ������t �������ê������é�������¤���������������������������������������������dÞÿ¾ÿêÿ4âÿ�‚ÿxE�E�E�D�ïø`½­ £<a1<» ļ9¶Ì<ÝÂM»!ƒ ½Þι<]þM»  : d   É !I!‹!Ü!"•"å"‚#)&æ1”Ù�� ��2�������010������¯n�����!����zº����'������q����6������•���������� �������� �������� ������� ����þæý ������������Ú������î�����������������Ð��"����������������������ùk��������������L��������������b����������������� �������� ����Âÿ�� ����9��� �����¢ ����j�������������� ��������������������r������������������������������������������� ����’��������������š��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Á�����Ó V@��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������d���������R98������0100����������������”������œ��(�����������¤�������������H������H������<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/OOXML.docx������������������������������������������������������������000644 �000765 �000024 �00000016541 11274343401 017656� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������PK������!�1D[j��Ñ����[Content_Types].xmlUT �PìΟwíJUx�õ�µTÉNÃ0½#ñ‘¯(qË!”´–#T¢|€ëLRƒ7yÜíï™$P¡ ¥-¥—HÎÌ[æeœ|¼6:YB@ålÁ†Ù€%`¥+•­ ö6}JoY‚QØRhg¡`@6]^äÓLm±`óýç(ç`f΃¥Jå‚‘Ž¡æ^ÈQ¿ n¸t6‚il8Ø(€J,tL×ôºs@#Kî»ÆF«`Â{­¤ˆTçK[_ !Ûœ+WÔÀø(¡ƒ*!™ˆŸ…!:¾r¡ä70kÚŽRsU¥$”N. A²†Ë'‘’3:ëx÷ʯ`ö 1æ ~÷!‚Ipé³8ÞÅwî :%}!ªFdzÍ;Cÿ²^ýšû¬GZsèžÃ“í·4=Vß=Ô;Ê4W©-ôÙÜJü{ÂÛŠÊ´[$x² hB)¡<fË*’›Š™þÃbï aK}ØåZ`tædÍ/ ðö‡<úPK �����5a;��������������_rels/UT �·síJEyíJUx�õ�PK������!�‡”¶q��r�� ��_rels/.relsUT �PìΟwíJUx�õ�­“ËNÃ0E÷Hüƒå}ã´<„PnRw…ìÉâ‡ì ´A¼"¥iYzæÎõñy½Ù™Ž½aˆ­³’/³œ3´ÊéÖÖ’?•÷‹Î"ÕÐ9‹’ï1òMq~¶~Ä( Ŧõ‘%%oˆü­Q5h fΣMÊ”Ž¡Ô+Ô(Vy~-Â^ <ÙVK¶ú’³rïñoWU­Â;§zƒ–F®¸#´õ‡4¨M¯a%„IríÔC*GÞgÉš‹q¢åœDCÅÌ» ZèïòÍêtšÃÙ ƒ5½y¶Ðv#¹üö²õ! ‹y” 8½®OÅTBWsîKõ‘œ9ô¥ùAƒŸR|�PK �����ˆ8a;������������ ��docProps/UT �@yíJEyíJUx�õ�PK����ˆ8a;rQí± ��X����docProps/app.xmlUT �@yíJ@yíJUx�õ�TMÚ0½Wêp}¢BÆ«–mµ‡ÒE"»{v ±êØ–íEÐ_ßqB²¡ÝSsÉ|åÍóÌsøÍ©1ä!jg×t>QV¹RÛÚ>ß&Ÿ(‰IÚRgaMÏéxû†ï‚ó’†HÂÆ5­Sò+Æ¢ª¡‘qŠi‹™Ê…F&tùªÒ nznÀ&¶˜Í>08%°%”?�ÒquLÿ Z:•ùÅÇâìOðodñ#i8¼pIšB7 >bxpøN Š9gÁŸ\(c®é ¾©e*áèÄrÁÙÈ埽7ZÉ„3[­‚‹®Jd+•¶ÉÅšdÎÆUùïA=ÎbÆÙØåßµ…¶sg ³ Aú;gzƒÇ÷JØàÉE%MÎ^üdÞêNêLñ˜VGPÉõoÜë‚’Ÿ2Bž×šeÐÒ&Ú•uNkS…N±¿5Çec[/ó ;㺠оf×vˆ÷ž-½Bv>&Ûr cz5ò"’^åÚwý«ÏVZÜu—÷ŠìÁTœõa¾q—ö,.o2!_Oº*œCAõ¹¼­_ñÁî6Ë벇ëàH;O:Õ{/îuù~¬¢Q‚ï1 %jbXëàw8„`þ ND$<{ÝGÚ!‘ƒÃ+ZC€w8å«â—o#öµ({üYÓÝoBÌÓ>­‚ûêp¸¿ø{øPK����÷6a;k¢îä¨��d����docProps/core.xmlUT �AwíJ!yíJUx�õ�“MÛ †ï•úç:ØÉªÚZ«~hUWªÔT­z£0±éšY¯ÿ}$Q÷Ѓ¥÷áa7wϪGOà¼4z«M‰hn„Ôí?Ü·ùÀ´`½Ñ°Ç#x|G_¿j¸­¹qðÕ .Hð(:i_s»Ç]¶&Äóó›Hè(S,Ä¥k‰eü‘µ@¶eù–(L°ÀH2,ìêˆgKÁWK{r}6œ@ tð¤ÚTäÌpÊ¿x +¤’a´ð"ºˆ+ýìå ðvõWäç×oùª…Ô©W0m¯ƒ =ÐCH~Jµ¢¼ÕUL˜?ýþ<ÐÁ9ÎIJŸî€ãèûS茫Ñg83´é=aŒžÎªÞ %ÜžÃ]C.ád/Às'mˆC@;p€XüÔˆ¸Q¹Å9Õ%”Òõ̇‡8)G âÃH§’þÝO¨ƒ'™&ŒN¹×e3?×t (¶¹žeQ~ì>~:Üc;ý®¨Êb{s(«ú¦ªËòW*ëêüÙPÍü¿ãíµãbëçѼ5n¤K€Z'>µ*_hÕ§ÕÕAÿPK����Û6a;"BYñ•��¿����docProps/custom.xmlUT � wíJyíJUx�õ�µ—_oÚ0Åß'í;XyOãÒT-ö²©ÕÊö°7“Ü€·ÄŽl‡Uûî3 8uP_¶Z⎣û;×(ÇדÛßeö $ålê…WØCÀRžQ¶zßÖ+ä!©ËHÁL½HïvöñÃäQð „¢ ‘.ÁäÔÛ)Uƒ@¦;(‰¼ÒËL¯ä\”DéŸbð<§),xZ—ÀTa|¤µT¼ô+SÎkë÷ê_Kf<=º“ßׇJ×›MNÅ(/ͦÞË"ž/1Žýh™Ìý‡÷~2Hn|<Â8ºæ«änùÇCÕñáÈCŒ”ºõùÒ_¡ÍA—Ü«qQ=K%f< :uœ¡ÿ‰|Au‡6º‘œ`‡gì‚(@)/«d->§ú-a¦·;Ñ…üh°Æ7cŒõçGcÇ<ñn†bc*"TÙß‹Nv²×^*ʈÒïKot'nŒ*+.é¥Nwb`ÔØSyIoE'èÄ Oï9bu¹Ñ: ÃÙ n¸úÛ»1C|†.3ª¸°ºm%'½†á™»â♈ )n±;Ù ßäÝ'ÁëÊB7Šª‰¹Ï„mk² |ݰMÖ}!´Ð§‘ÝôYtÃŽ;¶R zä£ä†kòì¡9@-n+¹áš{xf½vÅ Õd—ž ~BjŸ'Í ÙD×c½)¨Üõz6ªz„;ºÐ‡ôØæ†lRì+¤@÷z>Ê/-¾µâÆEôÊÙåðöJwã`pá ÓÕ[cv>FEÃÎPBÏúÐÛ“êf;LÜ=ñZôЭä†kâîIUK›ÛHn¸&îÖP@µÓW(kt9ñ†aì’ÄO’(tãà¾Qiç_+¹ášø»C󿢇VŠÌ⛥ü¸¤ïLéïÍ?$ènž³¿PK����·5a;"=´ }���û�����docProps/thumbnail.jpegUT �étíJŸwíJUx�õ�ûãÿm†I!Iuqqu#5y5#=5 г3;G0pÁE%%dÔ$$ÔÌÔÔÌ\Ì´µÍ€âN¦NxõÁÁÿ ‚ @Ę̀ÄÀ$ÈÈ,Èøÿƒ7##*`ÃaÀÄù‹‡™h2³ ƒ=Ãfùÿ7PK �����K6a;��������������word/UT �þuíJEyíJUx�õ�PK �����5a;������������ ��word/_rels/UT �·síJEyíJUx�õ�PK������!�KU;ñð���1����word/_rels/document.xml.relsUT �PìΟwíJUx�õ�­’ËjÃ0E÷…þƒ˜}-;}PBälJ!ÛÖý�E?¨, Íô`hÚàÐ`ºðò^1÷F³Ù~V¼c¤Þ;E–ƒ@g|Ý»VÁKõxu‚X»Z[ïPÁˆÛòòbó„Vs¢®$RŠ#sXKI¦ÃASæºôÒø8hN2¶2hóª[”«<¿“qšåI¦ØÕ ⮾Qÿ“훦7øàÍÛ€ŽÏTÈÆ;®ôÞb Õ±EVp´²”ò<D±$ñhÓ=W¿Z´™ÓïN~œ9„ë%>pÿü‡bbÎÜ. Âivr ßò`¿ òäÐË/PK������!�i¸È�ú������word/document.xmlUT �PìΟwíJUx�õ�Å”ÝjÛ0Çï{£ë%vB[‚‰S:’± eé@‘e[TÒ’7{úù+)ÍJÚ›ÞèëèüÏOGGZÞ>)í¹utFfÓ„D\3È….3òçáÛdA"ç©Î©Í3ràŽÜ®>Z6i¬V\û%´Kd¤òÞ¤qìXÅuS%˜…Ÿ2P1…`<V” Ãy’,p.4é5öü…®ÑX€UÔãÔ–èak3AMC½Ø )ü!hÝ 2jŸ‘Úê´×˜ŒÁ'E€t¯ä°^ÛÛöÝàa/ì\Ö}ŽZ¼Ør‰À ]%Œaß«†ÆjLÜk‡89lc.‰–[Ú`(ÙjÀæÆãÎáêº3ŽŠ³ä‚‰Ñã„ç1’ÓZiôËb9[pAêxÌÅ ‹wù!ô&jR,þüwF’äîëÍÝúš Kk^ÐZúKð°¡ñ«ï?¢ûJÈ/Ë8ÌBkÛÖ¼]5~¦е¸Ë &Ã.åÖSë;Éžtó$  Ÿ‘þÏ}£óSçëÔÊÐn,wÜî9YEÂEÔy¨uø'¦—‚þ„[¡ÇÇuøÀÛèQ~ò¢8 á8ó÷öŒl®ÜþE¾ŒÙ|~•„Pޝ8îxÊ_´½)À<»ê¶XQVˆ1[$ítÞƒ:š%/N¬eí=ÇŸ«Œžvؽ…øø£¯þPK������!� .¯lL�� ����word/fontTable.xmlUT �PìΟwíJUx�õ�Ý“ËjÃ0E÷…þƒÐ¾±ì<(&NhS²ì¢¤0QäX ‡Ñ(qó÷XNi(®#c$Ý+ßÖ|ùe ;ª€Ú»Šç#Á™rÒï´ÛWüs³~zæ #¸ïTÅO ùrñø0ïÊÚ»ˆŒ¾wX†Š71¶e–¡l”ùV9òj,DÚ†}æëZKõæåÁ*³BˆY”Hµ±Ñ-ò!­ûOZçî ^*DjÖš”gA;¾ºc]éÀR×+°Û ¡7ZpUNÞLÅE!&b*ÆôNÄŒfÚóì|P6PÅŸƒ"É5XmNÑ'½ÕQ6ùTnkT²PïÉ8àVPÌXôƒ'%?_)Åe|­È”“F>(¿s¨f–�ü±ÑV!{WûðÜ EbÚƒ)huÇ@^¨-sÃ+a˜ô8ÒsÇV`4Ý ÖýÐ#¸» 2,pñ PK������!�Í-C‡Ì��{����word/settings.xmlUT �PìΟwíJUx�õ�UÛNÛ@}¯ÔˆüÜ'\ZY„´U)0 ¾®×cgÅ^¬ÙuÜðõ¯½q*P‹ú”sÎÌÎÎÅ9=ÿ¥ähh…ÑóhzG#ÐÜäB—óèá~9þ¬c:gÒh˜G[°ÑùÙûw§MbÁ9’Ù…Ð61ó¨FX¾ÅìX ŽÆšÂ¹Q‰) Á¡ÿ‰zœGkçªd2éLš¸Â bŽL,'ËÂðZv“YŸL$s”°]‹Ê†h꣹A6{ÄFÉ k¦ñžÛÌwoI¯u¨Ðp°–*«dHPèÆÊ·Ä騑!Ãí^3jÛ³1jÔ$ §PÏã8š´¨ òtk¨¥ÑÎz²1Eê˜ò±Hé'ƒK`”S“”È”bï“CÁjéîY–:S‘hÃ(ë³þž\ØJ²íƒâ™îar¬¡¨ŸQä×4ŠÛàñ§þÐ þoµ¹5îÁÂw†¥ÐvipÏá ½N›U­¹«ý }Ô$ñ_3dܦã^QŽhd¸ÆÇ¿2ªBjRw¥eX!l4+A!†L™9Uú[—úÆ ô‚,äÄÕ›Vù“zî“  ˜óGZÍ܆Ã1n÷àøâòäbqíd¯1“]•´“¾Âpj›<RǽP`G·ÐŒîŒêú¨’ Ÿ.…’ hÂ`ŸIë,ãqGXŤ\RýA›Ð1mP¼Àeר€ÇН¢ ²êN”kç-¡ÝPAbë,­«N§iê_¥&C šÄQ+ - Óe(èñCÚU”Kôí¢Qª*á%Y9G²Í`Ú¿#+gøä¬œõÜÌs³Žóãí®‘º? Ø,`{ºÃ€ØQÀŽì8`Çv°“[oiÍicŸè£Ž-^)Mù—í­Óµÿ2ФÒN—¶ßq.¨×éVeÃnt>RРCEkä îC?Œá_ãì7PK����x5a; ŽåñÒ��¾����word/styles.xmlUT �stíJ©wíJUx�õ�SÙnÛ0|/ÐøîP Š"0"n#ÚÀ@œX‘+‰�…KÇq¿¾ÔaUõ!ôÉ\îpfvV¾»ÿ4:ù@OÊÙŒ]_¥,A+œT¶ÌØÛf5»e °´³˜±=»_|ýr·›SØk¤$XšûŒU!ÔsÎITh€®\6ö ç „Xú’»¢PشߤéwîQCˆâT©šX϶û¶ó²öN QtktÇg@Y¶ˆö¤XÀVjJ¿ö}ÙWíÏÊÙ@Én$”ÚD©8¢QÖù§¥%ÅbÂ’œmVÍálGP]ÿPR1Þ(j°el€ÎÚÙÛëXct•Ç?{]6yo™RU‡:šºÝQ¤ û:z©ÁCé¡®ÙÁâÒ›ª>ËŒ½4 ë6A ^ûëv†÷U»> ’~€7ߎü¶Ì§^D͈€~ÂK?Éú`»ÙÖ‰³” ¨¤…ñ)ñ�¹Æ áMÓŸL"i!]„F=))ÑŽ#±ní+FaDõ\‡g+#eüÒS6ø’ŸÐQÆþjý :´«/C5¡ë^§·gú¹ Á™Ëï½*« þ¯> q9]»59úøŸœüÌ~*:]æ‹KÚûÓ\ÿÊN´øPK �����5a;������������ ��word/theme/UT �·síJEyíJUx�õ�PK����›5a;jA0d‰��� �����word/theme/theme1.xmlUT �¶tíJ©wíJUx�õ�-ÌÍ Ã à{¡ï {o´=”¢¹åÚKú�‹®‰× ÒŸ·¯…g†ù†ñ7ñ¤\Bb çN ¶É^4<æétQ*²Ã-1iøPÑöu¥H¢ý¹ô¨a­uï¥,¶ÕXº´·Í§±¶˜é2¾š7yQê*#Á{÷>Xó3È¿n¾PK������!�ÃY×iÀ�������word/webSettings.xmlUT �PìΟwíJUx�õ�AKÃ@…ïBÿC˜{»ÑƒHhR RoEˆþ€u3ivgÂÎØÕïˆ^¼y|¼ÇÇ÷ö‡œš+‰L=ÜîZhO‘.=¼¾œ¶Јzš|bÂ>Qà0lnöµ«ø6¢ª-¥1 IWzXT×Î9 f/;^‘¬›¹d¯ËÅñ<Ç€Þ3’º»¶½w“W3%®¿´úZå2­…Š˜HN?¼ì#Á`Ž>%®Ïç'÷&>³ŽþŠGmœðZãþ|¾�PK������!�1D[j��Ñ��� ��������¤����[Content_Types].xmlUT�PìÎUx��PK �����5a;������������� ��������íA°��_rels/UT�·síJUx��PK������!�‡”¶q��r�� � ��������¤é��_rels/.relsUT�PìÎUx��PK �����ˆ8a;������������ � ��������íA5��docProps/UT�@yíJUx��PK����ˆ8a;rQí± ��X��� ��������¤q��docProps/app.xmlUT�@yíJUx��PK����÷6a;k¢îä¨��d��� ��������¤¾��docProps/core.xmlUT�AwíJUx��PK����Û6a;"BYñ•��¿��� ��������¤ª��docProps/custom.xmlUT� wíJUx��PK����·5a;"=´ }���û���� ���������¤… ��docProps/thumbnail.jpegUT�étíJUx��PK �����K6a;������������� ��������íAL ��word/UT�þuíJUx��PK �����5a;������������ � ��������íA„ ��word/_rels/UT�·síJUx��PK������!�KU;ñð���1��� ��������¤Â ��word/_rels/document.xml.relsUT�PìÎUx��PK������!�i¸È�ú����� ��������¤ ��word/document.xmlUT�PìÎUx��PK������!� .¯lL�� ��� ��������¤?��word/fontTable.xmlUT�PìÎUx��PK������!�Í-C‡Ì��{��� ��������¤Ð��word/settings.xmlUT�PìÎUx��PK����x5a; ŽåñÒ��¾��� ��������¤à��word/styles.xmlUT�stíJUx��PK �����5a;������������ � ��������íAô��word/theme/UT�·síJUx��PK����›5a;jA0d‰��� ���� ��������¤2��word/theme/theme1.xmlUT�¶tíJUx��PK������!�ÃY×iÀ������ ��������¤��word/webSettings.xmlUT�PìÎUx��PK������A�� �������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/OpenDoc.ods�����������������������������������������������������������000644 �000765 �000024 �00000015575 11373007472 020152� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������PK����BJ“<…l9Š.���.������mimetypeapplication/vnd.oasis.opendocument.spreadsheetPK����BJ“<���������������Configurations2/statusbar/PK��BJ“<������������'���Configurations2/accelerator/current.xml�PK�����������PK����BJ“<���������������Configurations2/floater/PK����BJ“<���������������Configurations2/popupmenu/PK����BJ“<���������������Configurations2/progressbar/PK����BJ“<���������������Configurations2/menubar/PK����BJ“<���������������Configurations2/toolbar/PK����BJ“<���������������Configurations2/images/Bitmaps/PK��BJ“<������������ ���content.xmlåWÁŽÛ6½÷+ èæÚNÚ¬ºv (P {Úè- ©‘M„’²ì¿ïP”dÊ‘A/íE ß›y3¹OoÏJ.N`¬ÐÅ6Y-’\g¢8l“Oÿ$o’·»Ÿžtž i¦y¥ p„ëÂáß² ›†ÕmR™"ÕÌ ›LMOu EÇJctÚÄ ë.r6½Çlg7—ì±.ÛÏÜ€cvfX=—ì±XÔ˜žë¹ä³•$×XuU2'nTœ¥(¾l“£seJi]×Ëz³Ôæ@W´YíóWVF6¨ŒSàƒYºZ®h‡UàØ\}K**µ3»4̱¯vµ4`‚éúÆœç(æ úët˜Ý]§ÃD™ù‘™Ù}Ö€‡­²Éæ·Ê&‹¹Š¹ãÄþ¾¡Ï¸Ø|ž?\ûʨ¹±<vP*nD9;Í€ŽùZë^ª'„ÃÞÈ]?<¼¢áw„®ïÂk#˜ÎïÂ9“¼¯¸VcECÜŠ"‚ÀÉ·|ˆ|!ìaMÃr¶Ù¤ë¿Ÿ?¼ð#(v‹oƒ‰(¬cŵ2ÆoÂd¦¯©R×&Ÿ?|q·Ö½¶£SrztøÕz0Y6 E9Šc19 ¨îÛP€ìz¾Ï çŒðº˜ôÛJ”ÅàVë2Ø¡³ZftKažÔVX¿7íœhåaÒvÙƒøÐÎàGŽê,_›,_âd×]p¡¡-í 9^t$gH\ÚÝST½y~û¬¶É;# gHPB^®ö˜êWÈ ,ö´­…µD)ÇSbÈÅI”Ðo„.2&añ‚åX|úkDÃ/¬Ôö÷!,Øî »XêG”½õR#Šú…3úGvÔþ,~½_øÑètªSZ;«œöíÉIã§o¡æ;ÐÊõªÖªlžx!ÉJIÇŒ¤Ä#Æ °‹\§{ì Ù tèCw[x-2™¬—ë_ãªÑÉ™Öf¦´]ßCK¬*,yãÄáˆcíaùêõƒß\YÀÃë„b’Älg*˜¯Û±qÝQáË )ÙH`ü9«¤»I*J(<3aKÉ.­žÖ›¿®ð‘G”ÎГ4Äí¿Gêg|ÈÇÏÕ“3iG D'Û±]Øëìrƒø”b™=¸ÝSÐ|Û`Að{É2¬n05ÞHTô`. ŽõNÔÀUÛÀ#ôæ´Y…Í ¤$1¦Û%:ô‰2âÐ7ïMlôçKtÃZîg¾þßf¾ùOgNÇŽ�:ñïðîPKVxà«��O��PK��BJ“<������������ ���styles.xmlÝYënÛ6þ¿§ è€É’œ¶‹ÕØÁ°aX6(zy�F¢d¢”(”÷çžgOµ'Ù!)ÒºÙQÛÝš�ID~çœçÂsä\ßÜ—ÔÛa.«Ö~¼ˆ|W)ËHU¬ý÷ï~®ü›Í×,ÏIŠ“Œ¥M‰+y Xx \‰Äl®ý†W C‚ˆ¤B%‰LVãÊ %]t¢M™­l®¸w¥%¾—s…¶'‹îæ[Öà®tÆÑ~®°Â‚O»â9›+|/h³ ee$°¸§¤ú°ö·RÖIî÷ûÅþrÁxÆ«Õ*Ô»ŽpêpuéFeiˆ)VÆD/âÐbK,Ñ\~ Û¥T5åæ³]ƒ$EµæX�Ž«òrž¢®L/¿vÅììÚ'ÜœnŸgÜO•Ël~ª\f]ÙÉí‰ø^…¯`Sÿxõò˜W¼œkKa{®J9©gÓ »òŒ1GU ˜b×t—Qô$4Ïôþ,|ωļOÏÂSDSçqVN9 pqˆ�ïTÊ[4W‡>©ùiÈq͸tDòù—xgéJu+KzºTÕ®…<Ë&¡@ç2„²…¢ vï/|¯½Q;·8XÔ ÉQ%TÛBjõK±ÐìEZ+6ZàX†pßÈeù’gùüm�9ƒË?G)2œR±¹6…ë–=ó¬\²öáÁ ¦, $ôp\ Àæb,öDˆ¢&2…*Ø!…ÊôÃLW¢Ø{ §÷Þ¿˜àðÕL<ïÃÌÚyb!qù%ÌÞ’òmSM0r_Óú;´e%š°î6¾Ôzx*SÚu39X–ÎQCÛyÂjn)é~¤˜ªü3[Ç¥ æ¹\˜B¬ª””6(kyôE8*8ª·c)ÐÆYdDHT©1*àiZ¥ÕÐ0ÔçëåyΊª¢A¬Uf!eM%9æö¥?  þP5‘«fUYÔÇ­ÝiuÚ_oÇšU £ø~V§ÓíoÉP«Ûzq«Ã9§ÍµiðmŸïÏxä6ò ¯}*IJâä2R ‘е¡ NGÚpcéaÊT={ÙSì…›NÍt’7ØŸPp(ïµlúñ²ØNÌ6ÿù—£6P┫Ùx¦§O?ÎÑó~±»gM­Gr}¬Ž»úž™ë0ÿTn딥 f·‹<àKÙú^}ص L÷”¨våQeÄôТ ~üã£B>_»ÄCuM[o½Ä<+#9ŽÐo¦Øü÷áù«É^mk9–óÞ`qÞ¾çîU÷2ô¹ŸI0M¯}ç#Q’Z}ÜTæðÖ‚-F0J²=ÉÔpŒÉN ÚtÖFõß¾ã°Ç¤ØÂÜy˜}ªs–Ÿå¾cõ 7L™cß›þ#õbþïæL+Õ.„ÀU XÃUSÌɽU³0FÊ™Pj¸/GTàš-¸ü¨tí§ sýÉ버|T ùY-ýS™óeÁl=–Km8渔3ó^Àm©è¯¢1Ép0"µ*¹ÕüžýÙ©Vœ¢kdïL¯ê2ö'@cRêõ ”,9ÊywŒÉNwlĽµœ1ß `êöݶAˆ??a†Ò눰Eq®6ú‹¼…÷Wêí-rƒXxšRËåЄ©q‚cŸO8ŠÂŒè-¿§è©;Æ3õyP´ˆ®®ÒÒÓ7ºwé/¨Qf>rH|eÅPúAuí*³·øE©oçŸf‚RetÖÿA.ýW=öpf‡'o¬v£D©Ç!K/*MçÆ n-L\t†þæZÄ[·¿ÅcƒÞÜÜÜ\‡ÃÅv¥8a{GÛ²‰€¹ó0jzÆ7ÎúkAE^û¨ˆ›p[‹µ «¬çö³$‘'rî›ö­3¾]Ž|kû¡™"ô‰îöœ$’v!æùÇ‘#z–zKºŠÖaœÂ''+˜×(Ð<¼9DqDO‚xåoâ•úK­´,pó“g û8Nâ«$zâHO%PŸß7Ì*/ìõûØfµêÍÚWʾpºâÃé$mþPKNÆDqó��ˆ��PK����BJ“<P)I-¹��¹�����meta.xml<?xml version="1.0" encoding="UTF-8"?> <office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:grddl="http://www.w3.org/2003/g/data-view#" office:version="1.2" grddl:transformation="http://docs.oasis-open.org/office/1.2/xslt/odf2rdf.xsl"><office:meta><meta:initial-creator>IDHW IDHW Informatica</meta:initial-creator><meta:creation-date>2010-04-19T11:16:49.13</meta:creation-date><dc:title>test</dc:title><dc:subject>test</dc:subject><dc:description>test</dc:description><meta:keyword>test</meta:keyword><dc:date>2010-04-19T11:18:04.30</dc:date><dc:creator>IDHW IDHW Informatica</dc:creator><meta:editing-duration>PT00H01M17S</meta:editing-duration><meta:editing-cycles>1</meta:editing-cycles><meta:document-statistic meta:table-count="3" meta:cell-count="0" meta:object-count="0"/><meta:generator>OpenOffice.org/3.2$Win32 OpenOffice.org_project/320m12$Build-9483</meta:generator><meta:user-defined meta:name="License">test</meta:user-defined></office:meta></office:document-meta>PK��BJ“<���������������Thumbnails/thumbnail.pngë ðsçå’âb``àõôp Òû8˜€¬¦…ÑÕ L ž.Ž!sÞ^2äeP8àÀö'ºÎäBë„;š/.Øs¿{{ñÏ)+—kŠ›ø&–v¬qN‘Uz-Ù~bThTˆ B‹˜ú³ýS^, L’ ž®~.뜚�PKC‹àGz���¹��PK��BJ“<������������ ���settings.xmlíZßs›8~¿¿ÂûƒM~\ÃÄî8îô’»´Í'w×7Ö¶&BËHÂÄýëO€é$£Þt†'‘ôíÇjõiµââýcÈz’"YãÕîc@ùjdÝÍ?ößYïÇ¿]àrI}pôã¸êKPJw‘==œK7oY±à.I¥ËIÒU¾‹ðb˜û´·›ËŸ<2ÊFÖZ©Èµí$IŽ’ã#+{x~~ng­EWù’®ö5•÷~j ¿Jäd2cÎ`pbçÿ­ÞŽä×8Ö¸ðCñúã‹ü§O„©oz»Ç)µ‘¥Mº Éw¯YUãž¹§’.L9FVѨ¶‘n¤\YãÁ…ý#È›€o`©Ì ÿMµ®‚vœÓw£_]­+™Ÿœ÷Eï‡$êSÀ#eKTOQ6F—ØîÃ’ë DR*¡çß§ocš‚–xΉöÇkDŸ¹d$î}ÓXH·(©ÒÁÿO‹Aòùß‘¯PÐoÈa^Ĩú„”½¿Fq@xƒPÔ7…^b_8¨Íåù”¿ü‰¯è2ôá«÷8ÍÀ ¾-KV;«”qÛ•îõ•°Eைá\£´Ñ)è=aq5#:4õYAªž/¢ŸÕ€W<|YÒ_ÒQ§ÓÑNG;ít´Óуtô¸ÓÑNG;ít´ÓÑ’ŽÖ5gµ€}@V%¨)Cd倃õÁÈØ‚ˆú¢Ïï]¼¯{kLR—È퀴˜XÂ_ 2 Ü/ “ÐÜÌW˜ñ—u”ˆÀÿŒÊô‚–ëm- §¨Sd(JÐ Ó4tÎŽçô¬…y5à•+"5õ8ä3L®€ ÌñÖ�J ôkù%VŒrð¶á™ô ¼/¶bÄã$šãŒHå‰nceåÀ×rWÄ6faRÏwmެխ¡•á+åCá½xÐ •µô[¯&ß4trøÉ#•Þ–ûkœ~ƒBÔ0Ø]aTw ö¿¢ÊÄ‚¤ü–»ªkù>‘”ðÛ˜û*&©|AÞž³_³tCùÃ]õ'«ã†¢O6pŸß*~áS†Ò„LÓ[‹ÎòÔŸ¸˜îûÕ”ßôæhX13çkÙ—Ï\ "áìä’r"¶–ý¿‹ï ’`¦³älklg2¤í†SJ“Ù°ÑmiEl{'A| ŠüZI±ù\Éxº·[ûŸõŸê“÷‹Þ܉fº&‚øšßÃH€Lc¯õSöO9zü”ÃÁ$V8%Ì™ÎL¼Ã‡Ý'Kžž—ú\æ€pÌ™Ã9„Q³×¨Í.í>‰²ë>ÿPKRYáËÑ��n&��PK��BJ“<���������������META-INF/manifest.xmlµ•Anà E÷9…Åަͪ²âDj¥ž =À$ ˆ¢äöÅ‘’¸mT5•Ù…ßûŒ=°ÚS0v¶ÏÕ“(Ð*×jÛ7âcû^¾ˆÍz±Àê‰ëË HïYºNƒ­¦Ú€T³ªGÛ:´\]_¦õ¢¸;m°L é¸É°ÕPòÉc#À{£pÊ)¶­Î®jª¨È„–öˆ,nÉæ–“Ç]4¦ôÀûFH!ŠrŸòæl§ûÎi)‰#í äÁƒRh0M]*†0 Õ8»+‹ 33Á½óѧ$fÂפ|_zŒž ÎΙlp=@$_5à)«ãAö÷Ó„¢»§ŠºRSÁß2<(g<²{õ.<ùùÍü;—ødfÇÈ0ÛÁ³ÝÇagA’|VÞösÃç-,2§ëòZÚ•üq[®?PKATûCI��h��PK�����BJ“<…l9Š.���.��������������������mimetypePK�����BJ“<�������������������������T���Configurations2/statusbar/PK���BJ“<�����������'�������������Œ���Configurations2/accelerator/current.xmlPK�����BJ“<�������������������������ã���Configurations2/floater/PK�����BJ“<���������������������������Configurations2/popupmenu/PK�����BJ“<�������������������������Q��Configurations2/progressbar/PK�����BJ“<�������������������������‹��Configurations2/menubar/PK�����BJ“<�������������������������Á��Configurations2/toolbar/PK�����BJ“<�������������������������÷��Configurations2/images/Bitmaps/PK���BJ“<Vxà«��O�� �������������4��content.xmlPK���BJ“<NÆDqó��ˆ�� ���������������styles.xmlPK�����BJ“<P)I-¹��¹���������������C ��meta.xmlPK���BJ“<C‹àGz���¹���������������"��Thumbnails/thumbnail.pngPK���BJ“<RYáËÑ��n&�� �������������â��settings.xmlPK���BJ“<ATûCI��h���������������í��META-INF/manifest.xmlPK������î��y���������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/OpenEXR.exr�����������������������������������������������������������000644 �000765 �000024 �00000000613 11670732113 020074� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������v/1���channels�chlist�I���A��������������B��������������G��������������R���������������compression�compression����dataWindow�box2i������������������displayWindow�box2i������������������lineOrder�lineOrder�����pixelAspectRatio�float������€?screenWindowCenter�v2f������������screenWindowWidth�float������€?�S����������0����<�<�<,,,,,,,,,�<�<�<,,,,,,,,,���������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Palm.mobi�������������������������������������������������������������000644 �000765 �000024 �00000002546 12341661211 017640� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������El_Diezmo_Continua_Vigente����������S…'3S…'3����������������BOOKMOBI���k�����6��������� h����������j�����C�����&&��� ��-¬��� ��5$�����<³�����C^�����J�����QŠ�����Xÿ�����`Ž�����g:�����nº�����u¶��� ��}���"��ƒò���$��‹C���&��“¤���(��šÎ���*��£3���,��ª–���.��±î���0��¹È���2��ÀX���4��ÇÕ���6��Ï{���8��×)���:��Þ���<��ås���>��í ���@��ô›���B��û>���D�­���F�ñ���H�=���J�Ö���L�W���N�%ü���P�,Ž���R�3‚���T�9Ç���V�9È���X�:´���Z�; ���\�;Ð���^� ø���`�"����b�J$���d�JH���f�J|���h�B���j������Ÿ¾�*�����MOBI���è�����äRW[���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���,��L����� ��������������/�������������������P��������������������������������ÿÿÿÿÿÿÿÿ����������������������1������3������2��������������4���ÿÿÿÿÿÿÿÿ��� ���,EXTH��T��� ���d���Mike Peralta���l���Smashwords, Inc.���g��ŽHebreos 7:8 “Y aquí ciertamente reciben los diezmos hombres mortales; pero allí, uno [Jesucristo] de quien se da testimonio de que [Jesucristo] vive.” Basado en Hebreos 7:8, Jesús ahora recibe nuestros diezmos y esta en el Nuevo Testamento. Aquellos que dicen que el diezmo ya no se aplica están hablando falsamente y directamente opuestos al evangelio del Nuevo Testamento de Jesucristo.��,���:��������������€� ��������������ì¾ôíúÉñá@“@œ@���Ì��� ���É���Í��� ������Î��� ������Ï��� ���b���É��� ������Ë��� �������Ê��� ���El Diezmo Continua Vigente����������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Panasonic.jpg���������������������������������������������������������000644 �000765 �000024 �00000015673 10357015703 020525� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá¾Exif��II*���� �� ���†���������������������˜������� ���(�������2����¨����������i‡����Œ��¥Ä�Ð���¼���$��Panasonic�DMC-FZ3�H������H������2004:08:28 15:55:46�PrintIM�0250������������d������������� ����� ����� �¬��� ����� ������Ä����������€��� ��'�� ��'��—��'��°��'����'��^��'��‹���'��Ë��'��å��'��������������������������������������"�š‚����*��‚����2��"ˆ�������'ˆ����P��������0220����:������N��‘�����‘����b��’ ����j��’����r��’�������’�������� ’������� ’����z��|’�|��‚��� ����0100 ������� ����à�� ����è�� ������¢��������£�������£�������¤��������¤��������¤��������¤����þ��¤����#���¤��������¤��������¤�������� ¤�������� ¤������������ ��� ��(��� ���2004:08:28 15:55:46�2004:08:28 15:55:46�����������d������ ���.��� ���Panasonic������������������������������������������������������������������� ��������!��4��´��"���������#���������$���������%�����è��&�����0100'���������(��������)�����¸��*���������+���������,���������-���������.��������/��������Î��DVEP�ð?DB¦ð?AFn�`Gˆ€bGdG��fG��NG4�rG��tG��zGùÿ|G��~G�@Gÿ BGLGª\G �vG(�xG�RGVGN�TGì�ŒG��ŽGŠGGÿ’Gÿ”G��–G��ð?ST>�¤F��¦F��¨F��ªF��¬F��®F��°F��²F��´F��¶F��¸F��ºF��ôG��öG��ð?AE²�<EþE(EÆ�,Eä�$EèE§EèE§ E6E "E�:E�;E�&E*EÖ�.E��0E��2E��@E��AE��BE��CE��>E��E�E��"J*ÂY;ÀY��ÁY��èFÌF��ÔF��ÎF��ÐF��ÖF��VX��[X��XX��ZX��TX��PX��ØF��ÅY��ð?WBÚ��DêD}\DDæ�DÓ�E§DŽ�DÕ�DË�Dæ�DÓ�ÌD5ÎDÐD½ÒDC´D� ¶D��0D\�8Dx�2D`�:Dp�4Dðÿ<D�6D*�>Dp�LD�NDÙ�ÀDÿ�ÂDÛ�êD��€E¹�‚E€�ƒEl�„E��†Eq�‡Eh�ˆE��ŠEq�‹Eh�ŒE��ŽEq�Eh�E��’Eq�“Eh�RDß�TDÐ�VDß�XDÐ�ÔDß�ÖDÐ�ØDß�ÚDÐ�ð?YC^ E¢E/?¤E�¦Efv¨EªE��¬Eå®E°E��²E��´E ¶E�¸E/?ºE�¼Efv¾EÖ*ÀELœÂEtŒÄEÖ*ÆE��ÈEåÖÊE11ÌE�`E�bE�dE�fE�hE�jE�lE �nE �pE �rE �tE �vE�xE�zE�|E�ÐE��ÒE�ÔE�ÖE�ðEòEôE�ðFwˆòFˆ™ôFªªöFºÌøF@�úF4�üF\�þFH��G8�G,�G@�G<�Gl� GT� GD�G4�G,�G@�GD�G0�GwˆGˆ™GªªGºÛ G,�"G,�$GH�&GD�(G@�*G8�,GX�.GD�0Gl�2GT�4GD�6G4�8G,�:G@�<G,�>G`�ÎE��ð?CM �üEð������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������AEBM@0ÿ¡Ú—š"åÍ÷ ËÑì·D®F͈Y‰)C¡ËuÎUÛo³’£Rw×`¥‚ò&Å[Èà*É�ìÂçµzy¢žÂó�Z¡ÞYKŒš5åÝ�³Ý—Lÿ�ð�³mUî�ÔõË�=À�g�ä�Ï�ü�Ö�Ë�í�rXÑ�Z�Â�Ä�Ý�§�u�Å�g�z�MÆ�s�ˆ�—�ã�È� �ã�ñ� ï�Ÿ�›�Å�ó�á�·�è�ø�å�PRST����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������FCCV���ý��ýa��������������������������ý4ÿI%V‡=ät>q‡ÿ ¿$¤‹H´ÁüüdÕ€­=¨eÖŸ ¥w rå4„ñ>ÜO%¢:­VÓ½ñáõt ÞH&P¨VF;ÀO~JJÓw…!jü”ÖRI¬ ‘ ô =  ƒ g< ´]§ú|¹iÅ]<¨ .2çuº£öY ž à n Í © œƒ ; xÚ9ļƒ£pÿ5×5 5 –¤ ‘p b› Ê 2J  ”e •í]ïÆ¼Š  ­· % t ¶r Ä4þ“ÏÑ C»  ©úz÷Ê­Ï{å< ­ Ÿ Y † @ hÑ ‹Kk [ßd  ¤é‹ó·©Öo½ïo ¶‰à‡žh{£ I Ë Ï $ a :Q « }×]Ö¢“çYÿ•µíWŒ 3 H ñ ½ © v .² VN»I‘ohÆEÔ5¥Ìî? & t ®Q µ“ p& xl Ž f“ªž²Œßàï%š ‹ò ø  Ï@ ¢– Õ£ ´* ï j„ºŠ¡pÿÂ × 0v Á Œ õ Eœ  Ý õ{ Å !Ð-  iŠ«Ÿ®ò¿ ÿ ñû  Ü ¤ ®Æ : Ò 40RM 9 p”Ȇ«wø¹õï Tô ) ô É Z ) ¢ ɺKhåŸ# Œ f“½±´xêÎ%åG ?L æ j Õ Ó ìS gZØ5kú A ^ŽÁž©påÎÕz ‰ ´ w¹ 0„ iü Á `} ž #˜ Ï O„±Œ¤lÜË ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'�� ·������ 0�H�������HkT���a��œkT����'�� ������������€#��������œkT����÷��è���� ����@�P���à��è���������@��p��@RT������p��\RT������p��xRT�������0·������������Í�i����0·������������Í�i���� ·������������Í�i������������������€#���������������S000407190102������������� ���������R98������0100�����������������������Š������’��(�����������š��������������������H������H������<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ���������������������������������������������������������������������Image-ExifTool-10.10/t/images/Panasonic.rw2���������������������������������������������������������000644 �000765 �000024 �00000030070 11162453565 020452� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������IIU����ˆçtØø%M”znw‚+]j'������0300�����Œ������� �����������������������¶ �������H���������� �������� ����� ��� ����� †�� �������������ÿ�������ÿ�������ÿ�������P�����������������������������������ò�����������������������������$�����:��%�������&�����¶��'��:��� ��-��������.��!*������ ���F������P������ÿÿÿÿ����������� ������0ü8����"0��� ���X���������i‡����x�������d����È�������� �=�  �v�ƒ �¾�c�z�P�‹�y�N�¥�z�PPanasonic�DMC-LX3�²Üqra��¢��ñ��Ò¾�öüè²Ú—• �š‚������‚������"ˆ������������0221����������2��’ ����F��’����N��’������� ’������� ’����V���£����������� ���Ä ��(��� ���2008:08:06 15:21:56�2008:08:06 15:21:56�����d������ ���3��� ���óøþùþùúþùþò÷ôù÷ùõúúüúýùûùü÷üøøûùüþ÷ïñöòôìô÷úûûöøùûúüùüõúøüøûöú÷ûûùöúùø�ùþøûùüðûúúýúû÷ùõùýýþþþþþþþýþþþþþþþþþþþþþþþÿÿþÿþþýÏÈtNŠôûûùõÑùôõôëÕºAZ~²'„’6-6zK«a¢AC-Q¬<-   95) Zq\'@os^k&    MNV‚c^jsm€†ˆ…X6 ûüýýýüýüýýýýþ�ÿ�ÿýÿÿÿ�ÿùøùúøú�ùúøúøü õì÷�÷ô òúøúîûüõùóùöúûûûýùûúü÷ý÷ñùùûö÷óýöñðöùøûòøùûùüûû÷ûøû÷ûøü÷úùøõúøøÿúþùû ÷úùúúúûúøøúöùýýýþýýþþþþþþþþþþþþþþýýþþÿÿÿÿÿÿÿÿ¥ŽvmœüûûúëÐÏáëõýÅËÈbOmšyRx³{O7ux.$Jbx(+ % AY0gJ32DcB %    NFi\chhit†ˆ†i   ûüüüþýýþýýüý�ÿ������ÿùøþ��ø÷ôíùú�ñþþñý÷ööüúûôú ôýú÷ûûøøùúü�úþúúúúúóùûÿØÿá(àExif��II*���� �� ���ª�������´��������������¼�������Ä���(�������1� ���Ì���2����Ö����������i‡����z��¥Ä�Ð���ê���ÒÆ�@���º��ÓÆ�€���ú��F(��Panasonic�DMC-LX3�´������´������Ver.1.0 �2008:08:06 15:21:56�PrintIM�0250������������d������������� ����� ����� �¬��� ����� ������Ä����������€��� ��'�� ��'��—��'��°��'����'��^��'��‹���'��Ë��'��å��'��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������"�š‚������‚���� ��"ˆ�������'ˆ����P��������0221����(������<��‘�����‘����P��’ ����X��’����`��’�������’�������� ’������� ’����h��|’�°#��p��� ����0100 ������� ����€�� ���� �� ����((��¢��������£�������£�������¤��������¤��������¤��������¤���� (��¤�������¤��������¤��������¤�������� ¤�������� ¤������������ ���Ä ��(��� ���2008:08:06 15:21:56�2008:08:06 15:21:56�����������d������ ���3��� ���Panasonic���C����������������������������������������������������������������� ��������!�� ��¦��"���������$���������%�����®'��&�����0270'���������(��������)�����L÷��*���������+���������,���������-���������.��������/��������0��������1��������2���������3�����¾'��4��������5��������6�����ÿÿ��7�������8��������9���������:��������;��������<�����P���=��������>��������?���������@���������A���������B��������C��������D���������F���������G���������H���������J���������K�����@��L�����° ��M�����Ò'��N��*���â'��O���������U��������W���������^���������€����0130€��������€�������€�������€����ë��€������€����Ø��€�������€������� €�������€���� (������DVEP��ðÿDB¸ðÿAF¶� ¯¢¯�¤¯�0¦¯��ʯ4�²¯��´¯��º¯`�¼¯ëÿ¾¯ùÿø¯��ú¯��¨¯>ª¯PùȯŽدF�¶¯À�¸¯��ί‡�Ò¯�Я(�¬¯ô�°¯p�®¯˜�Ô¯¹�ô¯H�ò¯`�â¯��ä¯�à¯Wùæ¯�è¯�ê¯��ì¯��ö¯��Ú¯��Ö¯��ð¯��è Pù§š¯��œ¯��ž¯��ðÿST~� ©��"©��$©��&©��(©��*©��,©��.©��0©��2©��4©��6©��8©��:©��<©��>©��@©��`©��b©��d©��h©��f©��j©��x©��z©��|©��~©���©��©��©��ðÿAE:¦¹�¦¦¹¦¦)¦Ò*¦�,¦��$¦"�2¦l�(¦ �.¦�� ¦Ž"¦‰0¦ �&¦�¦¦��ª¦ÿÿ€¦?�‚¦��†¦?� ¦��À¦��â¦��à¦��„¦��¦��Ц?�¦��¢¦��ˆ¦?�Œ¦N�ަ��’¦ÿÿ¦5T¦�V¦��D¦l�J¦l�F¦l�H¦��N¦�R¦�X¦��@¦B¦ü`¦€þZ¦�\¦« §íd¦�§�b¦��§��L¦��¬¦��¤¦��¨¦��Ħ�Ʀ�ȦJ�ʦ̦�Φ �Ц�Ö¦��ئ��Ò¦��Ô¦��°¦*�²¦� §Ä� § �§'�§:�§ �§@�ðÿWB.¨ë¨Ø¨¨ÿ�¨h¨Ò`¨U�d¨4�f¨�@¨÷�B¨ D¨+F¨) ¨ê¢¨B ¤¨: ¦¨—¨¨Þª¨i ¬¨ ®¨È°¨ê²¨B ´¨: ¶¨—j¨ë�l¨à��¨ò�¨�b¨î�ò¨��à¨��â¨��ä¨��æ¨��è¨��ê¨��ì¨��î¨��ð¨��À¨i�Ȩ†�¨“�ʨ�Ĩàÿ̨åÿƨ�Ψ)�$¨ÿ�&¨ ¨ÿ�"¨(¨$�*¨ÿ�,¨.¨�0¨2¨H¨Þ�J¨û�L¨Þ�N¨û�P¨æ�R¨T¨Þ�V¨û�€¨��‚¨��„¨��†¨��ˆ¨��Ѝ��Œ¨��ލ��ðÿYCæ�Nª��Pª��Rª��Tª��DªˆˆFªÝÝHªJª��Lª��8ª�:ª�<ª�>ª�.ªˆˆ0ªÝˆ2ªfD4ª"6ª��‚��€ �„��„ªp�`ª¸¸bª¸¸dª%%fª%%hªÿÿjª�lª��nª��†ª��ˆª��Šª �Œª �Žª�ª�’ª�”ª�–ª��˜ª�� ªð�¢ª�¤ªè�¦ª��¨ª �Xª�Zª(�\ª(�^ª �šª��œª�ÀªÿÿªÿÿĪÿÿƪÿÿȪÿÿðÿCM�ü�p¬�þ©��ðÿDS.��¯��¯�� ¯��¯��¯��¯�� ¯��¯��¯��¯��ðÿISÊ�ˆ®��´®¶�¶®¸®Æº®C €®Î‚®Í„®ç†®ç�®¼®¼®Â®Ä®À ®À ®À®À®Æ®Æ®Ê®È®Ê®Â®Ä®À ®À"®Â$®Â&®Ä(®Ä*®È,®Ê.®Ð0®Ô2®Ò4®Ò6®Ð8®Ì:®Î<®Æ>®Ä@®¦B®��D®��F®��`®°b®��d®��f®��ðÿFD¦�`¬��b¬��€¬��‚¬��„¬��†¬��ˆ¬��Ь��Œ¬��ެ��¬��’¬��”¬��–¬��˜¬��š¬��œ¬��ž¬��@¬��B¬��D¬��F¬��H¬��J¬��L¬��N¬��P¬��R¬��T¬��V¬��X¬��Z¬��\¬��^¬��ħ��̧��Χ��Ч��ʧ��§��ðÿATB�<¬��"¬��$¬��&¬��(¬��*¬��,¬��.¬��0¬��2¬��4¬��6¬��8¬��:¬��>¬��ðÿIA>� ©ÿÿ¢©ÿÿ¤©ÿÿ¦©ÿÿ¨©ÿÿª©ÿÿ¬©ÿÿ®©ÿÿ€©��‚©��„©��†©��Š©�ˆ©�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MOIS��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������AEBMýµÙ X�)�¹�ð�3�+�.�{�o� ¥�'�Ò�PO�@�r�%YW�A�*�¿�á�I�F�HQKx�ó�”�]�L�é� :Ô�IÊ®�y�œ��—�Û�j×ÏLž�“�q�g�‰�¿�ZÈ^ì�¦�Ž��Ž�?�)�Z��Ü�KÛÕ�¯�˜�l�ç�n�*�w�ê�¨�6ê�è�Æ�>C"3„÷�µ�1˜�š�Ë�E 0~J ä�D°�Ô�L‹"0LuozJMoSi€ý�TžäbL;ÿìÿPRST����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������FCCV��Pù��Wù(ùeù����������������þõ���������������������²öáO|Ö�<����d Þ¢.ñ�ÃÎ+����m����ÞÅÈä 0 r÷Ë”˜cØw* ����ÏÄ $Ña—����Ì����úìW Z 2ø±» ,ú (ý'ú����q K_0F‰Ýû����Û����Ì’ w òø>ì qUJKXx����>Ï YupVîï!����Ô����h(  ™ ²ù&# oµò1AãÖ����U© b.c;ëÙñ����Ù����n0ù¹ X rúSßõŸÄó�Ü õ����Ù 7›õ ÎyŒ����‹����ÝÄ C 2ûÛ…ØÉÛ�];3����° ‚ð�=����F����Ìi•ûD  ¡öàX'ðh×�ä�(l���� x ù=%@Ùö����ƒ���� „»"š .y÷�wí�/Zª%F����_M ÔÆ/\!@����® ����”ÖrÛÛºýæAÏç[M; ����c F7\˜‚Í����¦����› Í x aºÒ�É�Æ�À�Ì�¾�¿�Â�Æ�Í�Ä�Ø�Ø�Ô�ÿ��,õ�ñ�ž�q›-*ŠÀ‹kmêúÏ�Ë�Í�È�Æ�È�½�Ë�É�À�Ì�ð�×�ä�V%�Pþ�·�oFÓÊ@7 ä:Í�É�È�Ç�Ê�Ã�Ê�É�È�Ç�Ö�Ê�ò�s3¥�{BÐ�©ê¾d¯è¾© zÌ�Ä�Ç�È�Ç�Ä�Ð�É�Ë�¿�ì�7ê�Âk¼�Æ{hô�÷Ùoõy È&^|„ºÐ�Ç�Æ�Î�Ì�Ã�Õ�Ï�Ê�Ç�z!1µÔ� ɳA B²u è¦&ë›úÍ�Â�Ê�ë�Ó�Ä�í�È�Ê�É�HÀaj{ú�e"K¡/ ÜŽ4  )ûö — :Ô�Ú�Ö�.à�Õ�Kì�Ù�Ú�š8²Â0’7�ª®¨?h R¥R  ‰¬  « z�8� 1 õ53<Âð< Z„æb:ØN É)  O ~ ¥ + ºÿü ÇDþŽÏáѯ~*Vð´üäu·a ò M È Œ o6 Æ õ úþÁ ¼™ÃI§àÈjpÛò“àv“È Ð5 î 5^ e F :þyÈã}]w‰)¯®•CƒsFXú+Ò`W| †J › P}Ù œ ñ zýq5·iuû�§[¼ É&‹Ç³µ?Û-ï ãÉ  ƒ W Ù ´ ºüæ�Ø�þ�Ð�å�Ü�Ô�:§i Uð¢9¾£" „¹ I ž òƒ  Û úûÐ�Î�Ù�Ü�Ý�Å�å�Ë�Ü�Ì�Á�À6Ät^chb> $©‘ b U 0Ÿ ë�½�Ä�ê�½�Ù�Ñ�Ç�Ç�Ò�/N–�r�»�§� ž�W0N)1æZ´Ðô`Ñ�¾�Ä�È�Å�ä�Ü�Á�Ô�Z  �l�¢�“�&:¤�µTè‹BªLÍþ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������WBCZ     ��   �  �� ��  �� � BMHL����������������������������������������������������������������������������������������������������������������������������������������������F350807010058�^�9999:99:99 00:00:00�€������€������������������������������������������������9999:99:99 00:00:00����� ���������R98������0100�����������������������¬(������´(��(�����������¼(��������������������´������´������<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙÿÿÿÿDLI>>8<;FCBFGGJE9868;>=@BB<8</ %-2>D÷ ÷ ö ö õ ö ö ø ÷ õ ô ýýþ�<Dummy raw image data>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/PDF.pdf���������������������������������������������������������������000644 �000765 �000024 �00000021313 11232101730 017165� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.3 1 0 obj << /Type /Catalog /Pages 2 0 R /Metadata 3 0 R >> endobj 4 0 obj << /Creator (Adobe Photoshop 7.0) /CreationDate (D:20050718143045-04'00') /ModDate (D:20050718143045-04'00') /Producer (Adobe Photoshop for Macintosh) >> endobj 2 0 obj << /Type /Pages /Kids [5 0 R ] /Count 1 >> endobj 5 0 obj << /Type /Page /Parent 2 0 R /MediaBox [ 0 0 8 8 ] /Resources << /XObject << /Im0 6 0 R >> /ProcSet [ /PDF /ImageC ] >> /Contents 7 0 R /PieceInfo << /AdobePhotoshop << /LastModified (D:20050718143045-04'00') /Private << /RoundTrip 1 /ExportCrispy false /SaveTransparency false /ImageResources 8 0 R /XObject << /Im0 6 0 R >> /StandardImageFileData 9 0 R >> >> >> /LastModified (D:20050718143045-04'00') >> endobj 8 0 obj << /Size 2798 /Length 10 0 R >> stream 8BIM����f���x�A witty captionz� I wrote iti� No headline(�What instructionsP� Phil HarveyU� My Positionn� My Credits�I'm the source�Test IPTC picture7�20040226Z�Kingston_�Onte�Canadag� What is a transmission reference�1�amazing�image� utilities �8�ExifTool�Test�XMPt�Copyright 2004 Phil Harvey8BIM%�����žï½›ÜÁ’'ž0 âs#8BIMé�����x����H�H����Þ@ÿîÿîRg(ü����H�H����Ø(����d�������ÿ��������������h������ ��������������������������8BIMí������H�����H����8BIM&���������������?€��8BIM ��������8BIM��������8BIMó����� ���������8BIM �������8BIM �����)http://owl.phy.queensu.ca/~phil/exiftool/�8BIM'����� ��������8BIMõ�����H�/ff��lff�������/ff��¡™š�������2����Z���������5����-��������8BIMø�����p��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè��8BIM����������@��@����8BIM���������8BIM����7���������������������a��������������������������������������������������������������������������������null������boundsObjc���������Rct1�������Top long��������Leftlong��������Btomlong�������Rghtlong������slicesVlLs���Objc��������slice������sliceIDlong�������groupIDlong�������originenum��� ESliceOrigin��� autoGenerated����Typeenum��� ESliceType����Img ���boundsObjc���������Rct1�������Top long��������Leftlong��������Btomlong�������Rghtlong������urlTEXT���������nullTEXT���������MsgeTEXT��������altTagTEXT��������cellTextIsHTMLbool���cellTextTEXT�������� horzAlignenum���ESliceHorzAlign���default��� vertAlignenum���ESliceVertAlign���default��� bgColorTypeenum���ESliceBGColorType����None��� topOutsetlong������� leftOutsetlong������� bottomOutsetlong������� rightOutsetlong�����8BIM������8BIM��������8BIM!�����U�������A�d�o�b�e� �P�h�o�t�o�s�h�o�p����A�d�o�b�e� �P�h�o�t�o�s�h�o�p� �7�.�0����8BIM"����JII*���� �����ª���� ���º�������Ã��������������Ó�������Û���(�������1����ã���2����÷���;� ��� ���������˜‚������i‡����4��ì��A witty caption�FUJIFILM�FinePix2400Zoom�H������H������Adobe Photoshop 7.0�2005:07:18 14:30:45�Phil Harvey�Copyright 2004 Phil Harvey����‚����r��"ˆ�������'ˆ����d��������0210����z������Ž��‘�����‘����¢��’ ����ª��’����²��’ ����º��’ ����Â��’����Ê��’������� ’������� ’����Ò��� ����0100 ������� ������� �������¢����Ú��¢����â��¢�������¢��������£�������£�����������^��d���2001:05:19 18:36:41�2001:05:19 18:36:41���� ���X��d���h��d���È���d�������d���h��d���X��d���í �����í �������������������:������B��(�����������J��������������H������H������endstream endobj 10 0 obj 2798 endobj 7 0 obj << /Length 11 0 R >> stream q q 8 0 0 8 0 0 cm /Im0 Do Q Q endstream endobj 11 0 obj 32 endobj 6 0 obj << /Type /XObject /Subtype /Image /Interpolate false /Filter /DCTDecode /Width 8 /Height 8 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 12 0 R >> stream ÿØÿà�JFIF��H�H��ÿî�Adobe�d€���ÿÛ�„�))A&&AB///B''""  ))4&4""   ÿÀ���"�ÿÝ��ÿÄ�������� ����� �5�!1AQ"aq2‘±B¡ÑÁðR#r3bá‚ñC4’¢²ÒS$sÂcƒ“âò£DTd%5E&t6Ue³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö��/�!1AQaq‘"2ð¡±ÁÑáñBR#br’3‚C$¢²4SDcsÂÒƒ“£Tâò%&5dEU6te³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†ÿÚ� ��?�ù•U@ÿÙ endstream endobj 12 0 obj 501 endobj 3 0 obj << /Type /Metadata /Subtype /XML /Length 13 0 R >> stream <?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <?adobe-xap-filters esc="CR"?> <x:xapmeta xmlns:x='adobe:ns:meta/' x:xaptk='XMP toolkit 2.8.2-33, framework 1.5'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description about='uuid:b691db33-f92a-11d9-99a4-8c8e8269c120' xmlns:pdf='http://ns.adobe.com/pdf/1.3/'> <!-- pdf:Author is aliased --> <!-- pdf:Subject is aliased --> <!-- pdf:Title is aliased --> </rdf:Description> <rdf:Description about='uuid:b691db33-f92a-11d9-99a4-8c8e8269c120' xmlns:photoshop='http://ns.adobe.com/photoshop/1.0/'> <photoshop:AuthorsPosition>My Position</photoshop:AuthorsPosition> <photoshop:CaptionWriter>I wrote it</photoshop:CaptionWriter> <photoshop:Category>1</photoshop:Category> <photoshop:City>Kingston</photoshop:City> <photoshop:Country>Canada</photoshop:Country> <photoshop:Credit>My Credit</photoshop:Credit> <photoshop:DateCreated>2004-02-26</photoshop:DateCreated> <photoshop:Headline>No headline</photoshop:Headline> <photoshop:Instructions>What instructions</photoshop:Instructions> <photoshop:Source>I&apos;m the source</photoshop:Source> <photoshop:State>Ont</photoshop:State> <photoshop:TransmissionReference>What is a transmission reference</photoshop:TransmissionReference> <photoshop:Urgency>8</photoshop:Urgency> <!-- photoshop:WebStatement is aliased --> <!-- photoshop:Author is aliased --> <!-- photoshop:Caption is aliased --> <!-- photoshop:Copyright is aliased --> <!-- photoshop:Title is aliased --> <photoshop:SupplementalCategories> <rdf:Bag> <rdf:li>amazing</rdf:li> <rdf:li>image</rdf:li> <rdf:li>utilities</rdf:li> </rdf:Bag> </photoshop:SupplementalCategories> <!-- photoshop:Keywords is aliased --> </rdf:Description> <rdf:Description about='uuid:b691db33-f92a-11d9-99a4-8c8e8269c120' xmlns:xap='http://ns.adobe.com/xap/1.0/'> <!-- xap:Authors is aliased --> <!-- xap:Author is aliased --> <!-- xap:Description is aliased --> <!-- xap:Title is aliased --> <!-- xap:Keywords is aliased --> </rdf:Description> <rdf:Description about='uuid:b691db33-f92a-11d9-99a4-8c8e8269c120' xmlns:stJob='http://ns.adobe.com/xap/1.0/sType/Job#' xmlns:xapBJ='http://ns.adobe.com/xap/1.0/bj/'> <xapBJ:JobRef> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <stJob:name>My Job</stJob:name> </rdf:li> </rdf:Bag> </xapBJ:JobRef> </rdf:Description> <rdf:Description about='uuid:b691db33-f92a-11d9-99a4-8c8e8269c120' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'> <xapMM:DocumentID>adobe:docid:photoshop:cbcc2a62-f127-11d9-ac4d-e8be6f73552e</xapMM:DocumentID> </rdf:Description> <rdf:Description about='uuid:b691db33-f92a-11d9-99a4-8c8e8269c120' xmlns:xapRights='http://ns.adobe.com/xap/1.0/rights/'> <xapRights:WebStatement>http://owl.phy.queensu.ca/~phil/exiftool/</xapRights:WebStatement> <!-- xapRights:Copyright is aliased --> </rdf:Description> <rdf:Description about='uuid:b691db33-f92a-11d9-99a4-8c8e8269c120' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:creator> <rdf:Seq> <rdf:li>Phil Harvey</rdf:li> </rdf:Seq> </dc:creator> <dc:description> <rdf:Alt> <rdf:li xml:lang='x-default'>A witty caption</rdf:li> </rdf:Alt> </dc:description> <dc:rights> <rdf:Alt> <rdf:li xml:lang='x-default'>Copyright 2004 Phil Harvey</rdf:li> </rdf:Alt> </dc:rights> <dc:title> <rdf:Alt> <rdf:li xml:lang='x-default'>Test IPTC picture</rdf:li> </rdf:Alt> </dc:title> <dc:subject> <rdf:Bag> <rdf:li>ExifTool</rdf:li> <rdf:li>Test</rdf:li> <rdf:li>XMP</rdf:li> </rdf:Bag> </dc:subject> </rdf:Description> </rdf:RDF> </x:xapmeta> <?xpacket end='w'?>endstream endobj 13 0 obj 3928 endobj endobj 9 0 obj << /Length 14 0 R >> stream endstream endobj 14 0 obj 0 endobj xref 0 15 0000000000 65535 f 0000000009 00000 n 0000000243 00000 n 0000004419 00000 n 0000000074 00000 n 0000000301 00000 n 0000003714 00000 n 0000003610 00000 n 0000000727 00000 n 0000008458 00000 n 0000003589 00000 n 0000003695 00000 n 0000004399 00000 n 0000008430 00000 n 0000008511 00000 n trailer << /Size 15 /Info 4 0 R /Root 1 0 R >> startxref 8529 %%EOF ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/PDF2.pdf��������������������������������������������������������������000644 �000765 �000024 �00000004245 10730543457 017276� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.3 %Äåòåë§ó ÐÄÆ 2 0 obj << /Length 4 0 R /Filter /FlateDecode >> stream xÚ+TT(T0´P0²T057S076Q(JUWÈSÐH-JN-()MÌQ(ʪÉ�!ˆê04°PHÎUÐ÷Ì5TpÉç T�ó  endstream endobj 4 0 obj 77 endobj 1 0 obj << /Type /Page /Parent 7 0 R /Resources 3 0 R /Contents 2 0 R /MediaBox [0 0 612 792] >> endobj 3 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im1 5 0 R >> >> endobj 5 0 obj << /Length 6 0 R /Type /XObject /Subtype /Image /Width 8 /Height 8 /ColorSpace 8 0 R /Interpolate true /BitsPerComponent 8 /Filter /DCTDecode >> stream ÿØÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ endstream endobj 6 0 obj 251 endobj 9 0 obj << /Length 10 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xÚ}’OHQÇ¿³%B¬e&RðN¶Wí`ŒÝõoʶ¬k¦²Î¾ÙÞÌn%Bˆ.AÖ1ºXÑI:†‚b]"è(‚—í73»îˆÚƒ7ï3¿ÿ¿ß{@](mšz€yÃÉþ(»;>Áê7P‡A+­Xf$‘v™lqdí}…䜛áãõÿ] ‚U€Æ¬ÇמöxÀáû¶iO:¬äÒb“¸M¤’1âWÄg³>žöq†[ ñ2ñMÅ'"()Y'æ±ld4ƒä—‰»2–’'&ßÀSg^™öÐ}8õ¹&›°€åwÀ¥Öš,Ô \V:k²Ý¤;©iÝR;;\‘Œu?ÊåÝV þ°ÿ¼\þûº\ÞC9¾u¥(J•IÒÀëÃ]ýÜàBS˜s_ QP5ûFz¼Úë׋Gõ%«t{3qW°D÷0vz ¼ü \}\ø�$€Ôu¡ºmþÀÍ+˜…–ÍÙ¬C–;XØ9:Y„^g±BÞ,Ú\°ACioci]g®©Å·¸(ñL;òz±Úï9ÚAnŒŽÐIó ¨Üê­°4“I÷ÐÝ x#Ã{zwA¼¨j}ƒÎ…Ðþ¤Š¾Q¥óš=˜ò8Ðmèñá Ã(Äo{1±cÚÑd5¾Ué­ÊgÒ·t¶üÆlaȱi"ßÐ\.5æ±”šËÅâ^Å8tph0èk€!‰~D† TÒhd¡‘”»6‚ØÂì±–:>f¤ß&Ÿm×çŠäíxÝA4Ž…¶ƒLþ&ÿ–·ä%ù­ük±¥ªiÄ”¦¬?ûCqÌÕ¸m¥&/¾By#¤Õ‘%iþ 'ËW©¯:ÕXl©Errð'ñ=_—Ü—)Œi7Ò¬›©äê,úF|ÙNšٮͯ6×rm^™Ü ®ÍšUáHWü «Ãÿ5;¿?ÿͰh endstream endobj 10 0 obj 706 endobj 8 0 obj [ /ICCBased 9 0 R ] endobj 7 0 obj << /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 1 0 R ] >> endobj 11 0 obj << /Type /Catalog /Pages 7 0 R >> endobj xref 0 12 0000000000 00000 n 0000000191 00000 n 0000000022 00000 n 0000000295 00000 n 0000000173 00000 n 0000000384 00000 n 0000000813 00000 n 0000001695 00000 n 0000001660 00000 n 0000000832 00000 n 0000001640 00000 n 0000001778 00000 n trailer << /Size 12 /Root 11 0 R /ID [ <1dab0647a8dfcb9846c417b0bbe1934c> <1dab0647a8dfcb9846c417b0bbe1934c> ] >> startxref 1828 %%EOF �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Pentax.avi������������������������������������������������������������000644 �000765 �000024 �00000003210 11272553651 020036� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������RIFFP;þAVI LISTL��hdrlavih8���¢������������X���������¨;����Ð������������������LISTô���strlstrh8���vidsmjpg������������¢��@B�����X��¨;�'�����������Ðstrf(���(������Ð����MJPG�0*�����������������indxx���������00dc������������h'þ����à��X����������������������������������������������������������������������������������LISTÜ���strlstrh8���auds��������������������ú�������5 ��ú��'�������������strf������}���ú����indxx���������01wb������������H:þ����è����5 ���������������������������������������������������������������������������������LIST��odmldmlhø���X������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������IDIT���2009/10/27 12:14:34�LIST4���INFOISFT(���PENTAX K-x �LISTÀ��hydthymn´��PENTAX �MM�"�����������������������-þ�����Ù ����� "������������������������2�������� ����������� ��������!��������'����þÿÿþ�(����þÿÿþ�3����ÿ��4����ÿÿ�ÿ�?����Þ���O���������P���������\�����.�g��������l���������s����ÿÿ���t����ÿÿ���{��������������¨������¼����C��Ô������"������,)������@.����!��T/����!��x0������œ�����d�!� �����„qk(@Ð�sc3@�¨#�¡�dc�@øocZ‡0�ÞR(ÖEt&!”‰`4>`ûÿÿÿÞ!v(Œš����ßðÞ€�œ�������Ï— —óóÞÀù ��-þ2�������z0- ƒd} œ!H ö3 ����3430417�������������������������������������������������������������������������������������K-x Ver 1.00 �JUNK�������������������LIST���movi����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Pentax.jpg������������������������������������������������������������000644 �000765 �000024 �00000005241 10773226621 020044� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF������ÿá ’Exif��MM�*���� �������’�������¦��������������º�������Â(�������1�������Ê2�������â�������‡i������TÄ¥���^���ö��öPENTAX Corporation �PENTAX K10D ����H������H���K10D Ver 1.30 �2008:03:02 12:01:23�PrintIM�0300���!�����������Ö����������� ����� ����� ��� ����� �������4����ÿ���ƒ���ƒ���ƒ���ƒ���ƒ���€€€�€���������������� ���� ���� ��D ��������ÿ���ƒ���ƒ���ƒ���€����� ��'�� ��'��—��'��°��'����'��^��'���‹��'��Ë��'��å��'�����������������������������������������������������������������‚š������‚������ʈ"�������ˆ'�����d�������0221������Ò������æ‘�����’� �����ú’�������’ �������’ ������’|���Î��  �����0100 ������� ������ À ������Р������Ø¢�������£��������£�������¤��������¤�������¤��������¤�������¤��������¤��������¤ ��������¤ ��������¤ �����������������d���‚��� 2008:03:02 12:01:23�2008:03:02 12:01:23������� ��è���dAOC�MM�H�����������������������€à��������������� p������,�����Ø����� ���������� ������?� ����������������������è������‚����������������9��������������������������������������������è��������� ��������!��������"���������#����� ���$����� ���%���������&���������'����þáÿí�(����þáÿí�-����;����2���������3�������4���������7���������=���� ����>�������?����,���@�����2���A���������G���� ����H���������I���������M� ��������O���������P���������\����\�]����ô&í�b��������������v������~������†������ž����E��®������ô ������ ������  ������0 ������@������H������P������X������`������h������p������x������€������”���� ��š"������¦ÿ���� ��¸������������5� � �#€ P� �����%œPà ;��z ;�¤�ddŒ�@�ƒ��,�(”3[S†êA@ˆP8@lÿÿÿ��S†ê��������¿ê���†���������������������������õ?����–ï�����������������œœš¨ž—ž³£Ÿ£® °��������������������������������5 � �"=?� � �ë8à � �f � � �QëCà � �"8À � �'\3 � �/®5@ � �!™�,2B��������A­¨� ` ��  ƒd} œ!H ö3 ���������)¿�)Uê��'œ$AÖ *u;���������R98������0100������������������ D������ L(������������� T��������������H������H���<Dummy thumbnail image data><Dummy preview image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/PGF.pgf���������������������������������������������������������������000644 �000765 �000024 �00000000436 11520012152 017175� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������PGF6œ��������������‰PNG  ��� IHDR���������wSÞ���sRGB�®Îé��� pHYs�� �� �šœ��� IDAT×cøÿÿ?�þþÜÌYç���tEXtComment�ExifTool PGF TestüqÄÐ����IEND®B`‚�§( Dªªªªªªªªªªªªªªª�ƒ?�3��Dþ���ÿÿÿÿÿÿÿÿ3��Dþ���ÿÿÿÿÿÿÿÿ3��Dþ���ÿÿÿÿÿÿÿÿ3��Dþ���ÿÿÿÿÿÿÿÿ3��Dþ���ÿÿÿÿÿÿÿÿ3��Dþ���ÿÿÿÿÿÿÿÿ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/PhaseOne.iiq����������������������������������������������������������000644 �000765 �000024 �00000006444 12634554564 020327� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������II*� ��IIIICwaRX��<dummy RawData>�ù§?��€?º¥µ? ×£?)\¾����ÍÌL½= —?¸¾������€¾�� ?š™ù?33s¿������€¾��à?���¿����33s¿š™ù?Mamiya LS 80mm f/2.8 D��<dummy StripOffsets><dummy BlackLevelData>��<dummy data>Credo 40, Factory Firmware: 1.01.4�ûCamera back, Firmware: 1.01.4���Digital Camera Back�pCalLD001055LD001055����IIII�����IGNORE��IGNORE��IGNORE��LD001055����)\Âõ(ø?������$@<dummy data><dummy data><dummy data><dummy data> �� ��æ+��G��æa��Œ|��?”��0'��:'��1'��7'��<'��A'��E'��'��'��'��'��'��'��'��((�� (��(��(��(��(��(��p'��g'��i'��u'��z'��'��ƒ'�����2��''��NN��œ��*'��.'��0'��/'��'��'��'��'��(��(��(��(��F'��E'��F'��I'�����<dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data>/}?þÔx?II�ÔCˆ?8-x½©j‚»Æ¿O;â;? áQ¼+Áâ;¿œ<`Yy?"lp?Û…f=Ó–;÷’F»óq}?å'U<–ìØ»²ô¡¼k`ƒ?|,}?)Ëx?#-e?<dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data><dummy data>,������������ ��������������������� ���$������������������0��������8���)�� ���@���*�� ���L���+�� ���X���,�� ���d���1�����p���2��T������-�� ���T��.�� ���`��/�� ���l��0�� ���x��4�� ���„��5�� �����6�� ���œ��7�� ���¨�������´����X���¼��3�� �������� ��� ���� ���,���� ���8���� ���D���� ���P���� ���\���� ���h���� ���t���� ���€���� ���Œ���� ���˜���� ���¤�� �� ���°�� �� ���¼�� �� ���È�� �� ���Ô�� �� ���à�� �� ���ì�� �� ���ø�� �� �����:��������������� �����������������������������������Ì�� �������� �� ��������$��� ����������� ��������˜�� ��������l������������������������������������������ �����������2�����������d��� ������������ �����������E��������š™™?���������������������B����������B��������ÖÑÁQ�������� �����������ÕÑÁQ����������� �������� ���!������������D������������*������������+������������,������������'������������)���������������������p� ���������������������������� �����������$���(���&�����$���L�����������p�����������ˆ���#��������œ���"��������p��%����� ���´���$��������¼ �������$���À�������� ���ä�������� ���������� ���$�����������vš$A��������4Ÿ@���������� BB�����������C�������������������� ���������������(��0��J��������ßÈAQ�þ����������������������������Ú ��������������������à ��� ���æ ������ ���������������������������ð ������ø ���������(�������i‡����� ��X �����Leaf��Credo 40����� ������ ����FG��������š‚����Þ ��‚����æ ��'ˆ����d��������0220����î ������ ��‘���� ��’ ���� ��’����& ��’������� ’����. ��|’�� ����� ����˜�� ����l��¢�������¤������� ¤�!���6 ������ ��@B�0��d���2013:06:19 15:44:21�2013:06:19 15:44:21�������£²� †�-Â��'�� �� ���00004C20007000000400E05800000508���þ��������������������������� �������������������� ��������������������������� ������ ���������(����������������� ������ ���ÿ���ÿ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/PhotoCD.pcd�����������������������������������������������������������000644 �000765 �000024 �00000010024 11752001054 020053� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ||||����¢¢¢¢�������� �������� ãããã��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PCD_IPI�=�;9o@;9o@�080/11 SPD 0100 KODAK /4220 FilmScanner 20004.17 436 HEastman Kodak ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿProlab, Inc. 206-547-5447�������������������������������A���SBA��Å�;ÿÊÿê�—�)üÊüáý“úòÛëêÿÚ�;ý°þ ý°���135���‚�Ò������èLLLLLL�Æ�<�dddd���� ���H*%t�ÿ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ŠÊåX²Üa»xgexR2„$c¢Ù9í‹jO 0ú=9/^iÅ[j2ôïd“º÷‹à!=äDž1>ľ1]ƒ�� ã������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<image data deleted>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/PhotoMechanic.jpg�����������������������������������������������������000644 �000765 �000024 �00000006531 10521706655 021332� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿí’Photoshop 3.0�8BIM����L���7�20061029<� 062751-0500Z�kingston_�Statee�Countryd�COD� Object Name�Category� Supp Cat 1� Supp Cat 2�Keywords�one�three�two� Edit StatusP� PhotographerU�Titlen�Credits�Sourcez�Writersx�Captioni�Headline(� Special ins �8t� CopyrightÝ� 0:0:0:-000018BIMí������È�����È����8BIM ������ÿá }http://ns.adobe.com/xap/1.0/�<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9-9, framework 1.6'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description rdf:about='' xmlns:Iptc4xmpCore='http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/'> <Iptc4xmpCore:CountryCode>COD</Iptc4xmpCore:CountryCode> </rdf:Description> <rdf:Description rdf:about='' xmlns:photoshop='http://ns.adobe.com/photoshop/1.0/'> <photoshop:City>kingston</photoshop:City> <photoshop:State>State</photoshop:State> <photoshop:Country>Country</photoshop:Country> <photoshop:Category>Category</photoshop:Category> <photoshop:AuthorsPosition>Title</photoshop:AuthorsPosition> <photoshop:Credit>Credit</photoshop:Credit> <photoshop:Source>Source</photoshop:Source> <photoshop:CaptionWriter>Writers</photoshop:CaptionWriter> <photoshop:Headline>Headline</photoshop:Headline> <photoshop:Instructions>Special ins</photoshop:Instructions> <photoshop:TransmissionReference>Trans ref</photoshop:TransmissionReference> <photoshop:Urgency>8</photoshop:Urgency> <photoshop:SupplementalCategories> <rdf:Bag> <rdf:li>Supp Cat 1</rdf:li> <rdf:li>Supp Cat 2</rdf:li> </rdf:Bag> </photoshop:SupplementalCategories> <photoshop:DateCreated>2006-10-29</photoshop:DateCreated> </rdf:Description> <rdf:Description rdf:about='' xmlns:xapRights='http://ns.adobe.com/xap/1.0/rights/'> <xapRights:Marked>True</xapRights:Marked> </rdf:Description> <rdf:Description rdf:about='' xmlns:photomechanic='http://ns.camerabits.com/photomechanic/1.0/'> <photomechanic:Prefs>0:0:0:-00001</photomechanic:Prefs> <photomechanic:EditStatus>Edit Status</photomechanic:EditStatus> <photomechanic:CountryCode>COD</photomechanic:CountryCode> <photomechanic:TimeCreated>062751-0500</photomechanic:TimeCreated> </rdf:Description> <rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:subject> <rdf:Bag> <rdf:li>Keywords</rdf:li> <rdf:li>one</rdf:li> <rdf:li>three</rdf:li> <rdf:li>two</rdf:li> </rdf:Bag> </dc:subject> <dc:description> <rdf:Alt> <rdf:li xml:lang='x-default'>Caption</rdf:li> </rdf:Alt> </dc:description> <dc:creator> <rdf:Seq> <rdf:li>Photographer</rdf:li> </rdf:Seq> </dc:creator> <dc:title> <rdf:Alt> <rdf:li xml:lang='x-default'>Object Name</rdf:li> </rdf:Alt> </dc:title> <dc:rights> <rdf:Alt> <rdf:li xml:lang='x-default'>Copyright</rdf:li> </rdf:Alt> </dc:rights> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙÝ����Þ����Ø����Ù���¶Ú���jÛ���zÜ���0���?cbipcbbl�����������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Photoshop.psd���������������������������������������������������������000644 �000765 �000024 �00000041731 10610274470 020575� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������8BPS����������������������Bþ8BIM�����~���x�"This is a teeny weeny white squarez�Me tooP� Phil HarveyU�Supreme leader� Test Picturet� Free for all8BIM%�����·eåC–òˆ^švÿJÖe±8BIM$����Î<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <?adobe-xap-filters esc="CR"?> <x:xapmeta xmlns:x='adobe:ns:meta/' x:xaptk='XMP toolkit 2.8.2-33, framework 1.5'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description about='uuid:c197d41e-f8f7-11d9-b03e-c023c3939af5' xmlns:pdf='http://ns.adobe.com/pdf/1.3/'> <!-- pdf:Subject is aliased --> <!-- pdf:Author is aliased --> <!-- pdf:Title is aliased --> </rdf:Description> <rdf:Description about='uuid:c197d41e-f8f7-11d9-b03e-c023c3939af5' xmlns:photoshop='http://ns.adobe.com/photoshop/1.0/'> <!-- photoshop:Caption is aliased --> <!-- photoshop:WebStatement is aliased --> <photoshop:CaptionWriter>Me too</photoshop:CaptionWriter> <!-- photoshop:Author is aliased --> <photoshop:AuthorsPosition>Supreme leader</photoshop:AuthorsPosition> <!-- photoshop:Title is aliased --> <!-- photoshop:Copyright is aliased --> </rdf:Description> <rdf:Description about='uuid:c197d41e-f8f7-11d9-b03e-c023c3939af5' xmlns:xap='http://ns.adobe.com/xap/1.0/'> <!-- xap:Description is aliased --> <!-- xap:Authors is aliased --> <!-- xap:Author is aliased --> <!-- xap:Title is aliased --> </rdf:Description> <rdf:Description about='uuid:c197d41e-f8f7-11d9-b03e-c023c3939af5' xmlns:stJob='http://ns.adobe.com/xap/1.0/sType/Job#' xmlns:xapBJ='http://ns.adobe.com/xap/1.0/bj/'> <xapBJ:JobRef> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <stJob:name>This isn&apos;t a job</stJob:name> </rdf:li> </rdf:Bag> </xapBJ:JobRef> </rdf:Description> <rdf:Description about='uuid:c197d41e-f8f7-11d9-b03e-c023c3939af5' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'> <xapMM:DocumentID>adobe:docid:photoshop:c197d41a-f8f7-11d9-b03e-c023c3939af5</xapMM:DocumentID> </rdf:Description> <rdf:Description about='uuid:c197d41e-f8f7-11d9-b03e-c023c3939af5' xmlns:xapRights='http://ns.adobe.com/xap/1.0/rights/'> <xapRights:WebStatement>http://owl.phy.queensu.ca/~phil/exiftool/</xapRights:WebStatement> <!-- xapRights:Copyright is aliased --> </rdf:Description> <rdf:Description about='uuid:c197d41e-f8f7-11d9-b03e-c023c3939af5' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:description> <rdf:Alt> <rdf:li xml:lang='x-default'>This is a teeny weeny white square</rdf:li> </rdf:Alt> </dc:description> <dc:creator> <rdf:Seq> <rdf:li>Phil Harvey</rdf:li> </rdf:Seq> </dc:creator> <dc:title> <rdf:Alt> <rdf:li xml:lang='x-default'>Test Picture</rdf:li> </rdf:Alt> </dc:title> <dc:rights> <rdf:Alt> <rdf:li xml:lang='x-default'>Free for all</rdf:li> </rdf:Alt> </dc:rights> </rdf:Description> </rdf:RDF> </x:xapmeta> <?xpacket end='w'?>8BIMê����°<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.print.PageFormat.PMHorizontalRes</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PageFormat.PMHorizontalRes</key> <real>72</real> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2005-07-18T12:25:07Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PageFormat.PMOrientation</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PageFormat.PMOrientation</key> <integer>1</integer> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2005-07-18T12:25:07Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PageFormat.PMScaling</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PageFormat.PMScaling</key> <real>1</real> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2005-07-18T12:25:07Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PageFormat.PMVerticalRes</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PageFormat.PMVerticalRes</key> <real>72</real> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2005-07-18T12:25:07Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PageFormat.PMVerticalScaling</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PageFormat.PMVerticalScaling</key> <real>1</real> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2005-07-18T12:25:07Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.subTicket.paper_info_ticket</key> <dict> <key>com.apple.print.PageFormat.PMAdjustedPageRect</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PageFormat.PMAdjustedPageRect</key> <array> <real>0.0</real> <real>0.0</real> <real>734</real> <real>576</real> </array> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2005-07-18T12:25:07Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PageFormat.PMAdjustedPaperRect</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PageFormat.PMAdjustedPaperRect</key> <array> <real>-18</real> <real>-18</real> <real>774</real> <real>594</real> </array> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2005-07-18T12:25:07Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PaperInfo.PMPaperName</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.print.pm.PostScript</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PaperInfo.PMPaperName</key> <string>na-letter</string> <key>com.apple.print.ticket.client</key> <string>com.apple.print.pm.PostScript</string> <key>com.apple.print.ticket.modDate</key> <date>2003-07-01T17:49:36Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>1</integer> </dict> </array> </dict> <key>com.apple.print.PaperInfo.PMUnadjustedPageRect</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.print.pm.PostScript</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PaperInfo.PMUnadjustedPageRect</key> <array> <real>0.0</real> <real>0.0</real> <real>734</real> <real>576</real> </array> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2005-07-18T12:25:07Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PaperInfo.PMUnadjustedPaperRect</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.print.pm.PostScript</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PaperInfo.PMUnadjustedPaperRect</key> <array> <real>-18</real> <real>-18</real> <real>774</real> <real>594</real> </array> <key>com.apple.print.ticket.client</key> <string>com.apple.printingmanager</string> <key>com.apple.print.ticket.modDate</key> <date>2005-07-18T12:25:07Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>0</integer> </dict> </array> </dict> <key>com.apple.print.PaperInfo.ppd.PMPaperName</key> <dict> <key>com.apple.print.ticket.creator</key> <string>com.apple.print.pm.PostScript</string> <key>com.apple.print.ticket.itemArray</key> <array> <dict> <key>com.apple.print.PaperInfo.ppd.PMPaperName</key> <string>US Letter</string> <key>com.apple.print.ticket.client</key> <string>com.apple.print.pm.PostScript</string> <key>com.apple.print.ticket.modDate</key> <date>2003-07-01T17:49:36Z</date> <key>com.apple.print.ticket.stateFlag</key> <integer>1</integer> </dict> </array> </dict> <key>com.apple.print.ticket.APIVersion</key> <string>00.20</string> <key>com.apple.print.ticket.privateLock</key> <false/> <key>com.apple.print.ticket.type</key> <string>com.apple.print.PaperInfoTicket</string> </dict> <key>com.apple.print.ticket.APIVersion</key> <string>00.20</string> <key>com.apple.print.ticket.privateLock</key> <false/> <key>com.apple.print.ticket.type</key> <string>com.apple.print.PageFormatTicket</string> </dict> </plist> 8BIMé�����x����H�H����Þ@ÿîÿîRg(ü����H�H����Ø(����d�������ÿ��������������h������ ��������������������������8BIMí������H�����H����8BIM&���������������?€��8BIM ��������x8BIM��������8BIMó����� ���������8BIM �������8BIM �����)http://owl.phy.queensu.ca/~phil/exiftool/�8BIM'����� ��������8BIMõ�����H�/ff��lff�������/ff��¡™š�������2����Z���������5����-��������8BIMø�����p��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè��8BIM����������@��@����8BIM���������8BIM����7���������������������b��������������������������������������������������������������������������������null������boundsObjc���������Rct1�������Top long��������Leftlong��������Btomlong�������Rghtlong������slicesVlLs���Objc��������slice������sliceIDlong�������groupIDlong�������originenum��� ESliceOrigin��� autoGenerated����Typeenum��� ESliceType����Img ���boundsObjc���������Rct1�������Top long��������Leftlong��������Btomlong�������Rghtlong������urlTEXT���������nullTEXT���������MsgeTEXT��������altTagTEXT��������cellTextIsHTMLbool���cellTextTEXT�������� horzAlignenum���ESliceHorzAlign���default��� vertAlignenum���ESliceVertAlign���default��� bgColorTypeenum���ESliceBGColorType����None��� topOutsetlong������� leftOutsetlong������� bottomOutsetlong������� rightOutsetlong�����8BIM����(��(ADBE��mntrRGB XYZ Ï��������acspAPPL����none�����������������öÖ�����Ó-ADBE����������������������������������������������� cprt���ü���2desc��0���dwtpt��”���bkpt��¨���rTRC��¼���gTRC��Ì���bTRC��Ü���rXYZ��ì���gXYZ������bXYZ�����text����Copyright 1999 Adobe Systems Incorporated���desc������� Apple RGB�������������������������������������������������������������������������������XYZ ������óQ����ÌXYZ ����������������curv�������Í��curv�������Í��curv�������Í��XYZ ������y½��AR��¹XYZ ������Vø��¬/��XYZ ������&"����±p8BIM��������8BIM!�����U�������A�d�o�b�e� �P�h�o�t�o�s�h�o�p����A�d�o�b�e� �P�h�o�t�o�s�h�o�p� �7�.�0����8BIM"����†MM�*���� ����#���†��������������©�������±(�������1�������¹2�������Í;���� ���႘���� ���í‡i�������ü��(This is a teeny weeny white square����H������H���Adobe Photoshop 7.0�2005:07:18 08:27:14�Phil Harvey�Free for all���� ����ÿÿ�� ������� ���������������������������v������~(�������������†���������������H������H���������������������������������������ùÿùÿùÿùÿùÿùÿùÿùÿùÿùÿùÿùÿùÿùÿùÿùÿùÿùÿùÿùÿùÿùÿùÿùÿÝ����Þ����Ø����Ù���¶Ú���jÛ���zÜ���0���?cbipcbbl���������������������������������������Image-ExifTool-10.10/t/images/PICT.pict�������������������������������������������������������������000644 �000765 �000024 �00000000226 10336164711 017515� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������–�������ÿ �ÿþ���H���H��������������� €€ÿÿ�š���ÿ€ ��������������H���H���� ����� � ö � ü@��������������áÿáÿáÿáÿáÿáÿáÿáÿ�ÿ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/PLIST-bin.plist�������������������������������������������������������000644 �000765 �000024 �00000000537 12111670220 020606� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������bplist00Ù XTestRealXTestDictZTestStringYTestArray[TestInteger[TestUnicodeXTestDateXTestData[TestBoolean#?öffffffÒ TWhenVAuthor3Á~ °���TPhil_ExifTool PLIST test£SoneStwoUthree�o�E�x�î�f�T�ö�ø�l� �P�L�I�S�T� �t�é�s�t3A¶× Æ���L<dummy data> ���$�-�8�B�N�Z�c�l�x��†�‹�’�›� �¶�º�¾�Â�È�Ë�ô�ý ��������������������������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/PLIST-xml.plist�������������������������������������������������������000644 �000765 �000024 �00000001433 12111670310 020632� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>TestArray</key> <array> <string>one</string> <string>two</string> <string>three</string> </array> <key>TestBoolean</key> <true/> <key>TestData</key> <data> PGR1bW15IGRhdGE+ </data> <key>TestDate</key> <date>2013-02-22T12:49:10Z</date> <key>TestDict</key> <dict> <key>Author</key> <string>Phil</string> <key>When</key> <date>2000-01-02T08:04:05Z</date> </dict> <key>TestInteger</key> <integer>256</integer> <key>TestReal</key> <real>1.4</real> <key>TestString</key> <string>ExifTool PLIST test</string> <key>TestUnicode</key> <string>ExîfTöøl PLIST tést</string> </dict> </plist> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/PNG.png���������������������������������������������������������������000644 �000765 �000024 �00000001074 12363722755 017243� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR����������7ˆÂÌ���bKGD��ª#2���IDATxÚcøÿŸ�ýNáÞÈu—���tEXtcomment�test comment—ü.��»iTXtXML:com.adobe.xmp�����<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 6.51'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:creator> <rdf:Seq> <rdf:li>Phil Harvey</rdf:li> </rdf:Seq> </dc:creator> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='r'?>œ„…����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/PostScript.eps��������������������������������������������������������000644 �000765 �000024 �00000025011 11103606647 020721� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Photoshop Version 7.0.1 %%Title: c.eps %%CreationDate: 7/18/05 2:33 PM %%BoundingBox: 0 0 8 8 %%HiResBoundingBox: 0 0 8 8 %%SuppressDotGainCompensation %%EndComments %%BeginProlog %%EndProlog %%BeginSetup %%EndSetup %%BeginDocument: (Test-Doc1.eps) %!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Photoshop Version 9.0x211 %%Title: 12a.eps %%BoundingBox: 0 0 435 283 %%HiResBoundingBox: 0 0 434.88 283.32 %%SuppressDotGainCompensation %%DocumentProcessColors: Cyan Magenta Yellow Black %%EndDocument %%BeginDocument: (Test-Doc2.eps) %!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Photoshop Version 9.0x211 %%Title: 12b.eps %%BoundingBox: 0 0 435 283 %%HiResBoundingBox: 0 0 434.88 283.32 %%SuppressDotGainCompensation %%DocumentProcessColors: Cyan Magenta Yellow Black %%BeginDocument: (Test-Doc2-1.eps) %!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Photoshop Version 9.0x211 %%Title: 12c.eps %%BoundingBox: 0 0 435 283 %%HiResBoundingBox: 0 0 434.88 283.32 %%SuppressDotGainCompensation %%DocumentProcessColors: Cyan Magenta Yellow Black %%EndDocument %%EndDocument %%BeginDocument: (Test-Doc3.eps) %!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Photoshop Version 9.0x211 %%Title: 12d.eps %%BoundingBox: 0 0 435 283 %%HiResBoundingBox: 0 0 434.88 283.32 %%SuppressDotGainCompensation %%DocumentProcessColors: Cyan Magenta Yellow Black %%EndDocument %ImageData: 8 8 8 3 1 8 2 "beginimage" %BeginPhotoshop: 398 % 3842494d04040000000001661c0200000200021c0278000f4120776974747920 % 63617074696f6e1c027a000a492077726f74652069741c0269000b4e6f206865 % 61646c696e651c022800115768617420696e737472756374696f6e731c025000 % 0b5068696c204861727665791c0255000b4d7920506f736974696f6e1c026e00 % 094d79204372656469741c0273000e49276d2074686520736f757263651c0205 % 001154657374204950544320706963747572651c023700083230303430323236 % 1c025a00084b696e6773746f6e1c025f00034f6e741c0265000643616e616461 % 1c02670020576861742069732061207472616e736d697373696f6e2072656665 % 72656e63651c020f0001311c02140007616d617a696e671c02140005696d6167 % 651c021400097574696c69746965731c020a0001381c0219000845786966546f % 6f6c1c02190004546573741c02190003584d501c0274001a436f707972696768 % 742032303034205068696c204861727665793842494d04250000000000109e02 % efbd9bdc1dc192279e30a0e27323 %EndPhotoshop %begin_xml_code /pdfmark where {pop true} {false} ifelse /currentdistillerparams where {pop currentdistillerparams /CoreDistVersion get 5000 ge } {false} ifelse and not {userdict /pdfmark /cleartomark load put} if [/NamespacePush pdfmark [/_objdef {photoshop_metadata_stream} /type /stream /OBJ pdfmark /MetadataString 3771 string def % exact length of metadata /TempString 100 string def /ConsumeMetadata { currentfile TempString readline pop pop currentfile MetadataString readstring pop pop } bind def ConsumeMetadata %begin_xml_packet: 3771 <?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <?adobe-xap-filters esc="CR"?> <x:xapmeta xmlns:x='adobe:ns:meta/' x:xaptk='XMP toolkit 2.8.2-33, framework 1.5'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description about='uuid:b691db36-f92a-11d9-99a4-8c8e8269c120' xmlns:pdf='http://ns.adobe.com/pdf/1.3/'> <!-- pdf:Author is aliased --> <!-- pdf:Subject is aliased --> <!-- pdf:Title is aliased --> </rdf:Description> <rdf:Description about='uuid:b691db36-f92a-11d9-99a4-8c8e8269c120' xmlns:photoshop='http://ns.adobe.com/photoshop/1.0/'> <photoshop:AuthorsPosition>My Position</photoshop:AuthorsPosition> <photoshop:CaptionWriter>I wrote it</photoshop:CaptionWriter> <photoshop:Category>1</photoshop:Category> <photoshop:City>Kingston</photoshop:City> <photoshop:Country>Canada</photoshop:Country> <photoshop:Credit>My Credit</photoshop:Credit> <photoshop:DateCreated>2004-02-26</photoshop:DateCreated> <photoshop:Headline>No headline</photoshop:Headline> <photoshop:Instructions>What instructions</photoshop:Instructions> <photoshop:Source>I&apos;m the source</photoshop:Source> <photoshop:State>Ont</photoshop:State> <photoshop:TransmissionReference>What is a transmission reference</photoshop:TransmissionReference> <photoshop:Urgency>8</photoshop:Urgency> <!-- photoshop:WebStatement is aliased --> <!-- photoshop:Author is aliased --> <!-- photoshop:Caption is aliased --> <!-- photoshop:Copyright is aliased --> <!-- photoshop:Title is aliased --> <photoshop:SupplementalCategories> <rdf:Bag> <rdf:li>amazing</rdf:li> <rdf:li>image</rdf:li> <rdf:li>utilities</rdf:li> </rdf:Bag> </photoshop:SupplementalCategories> <!-- photoshop:Keywords is aliased --> </rdf:Description> <rdf:Description about='uuid:b691db36-f92a-11d9-99a4-8c8e8269c120' xmlns:xap='http://ns.adobe.com/xap/1.0/'> <!-- xap:Authors is aliased --> <!-- xap:Author is aliased --> <!-- xap:Description is aliased --> <!-- xap:Title is aliased --> <!-- xap:Keywords is aliased --> </rdf:Description> <rdf:Description about='uuid:b691db36-f92a-11d9-99a4-8c8e8269c120' xmlns:stJob='http://ns.adobe.com/xap/1.0/sType/Job#' xmlns:xapBJ='http://ns.adobe.com/xap/1.0/bj/'> <xapBJ:JobRef> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <stJob:name>My Job</stJob:name> </rdf:li> </rdf:Bag> </xapBJ:JobRef> </rdf:Description> <rdf:Description about='uuid:b691db36-f92a-11d9-99a4-8c8e8269c120' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'> <xapMM:DocumentID>adobe:docid:photoshop:cbcc2a62-f127-11d9-ac4d-e8be6f73552e</xapMM:DocumentID> </rdf:Description> <rdf:Description about='uuid:b691db36-f92a-11d9-99a4-8c8e8269c120' xmlns:xapRights='http://ns.adobe.com/xap/1.0/rights/'> <xapRights:WebStatement>http://owl.phy.queensu.ca/~phil/exiftool/</xapRights:WebStatement> <!-- xapRights:Copyright is aliased --> </rdf:Description> <rdf:Description about='uuid:b691db36-f92a-11d9-99a4-8c8e8269c120' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:creator> <rdf:Seq> <rdf:li>Phil Harvey</rdf:li> </rdf:Seq> </dc:creator> <dc:description> <rdf:Alt> <rdf:li xml:lang='x-default'>A witty caption</rdf:li> </rdf:Alt> </dc:description> <dc:rights> <rdf:Alt> <rdf:li xml:lang='x-default'>Copyright 2004 Phil Harvey</rdf:li> </rdf:Alt> </dc:rights> <dc:title> <rdf:Alt> <rdf:li xml:lang='x-default'>Test IPTC picture</rdf:li> </rdf:Alt> </dc:title> <dc:subject> <rdf:Bag> <rdf:li>ExifTool</rdf:li> <rdf:li>Test</rdf:li> <rdf:li>XMP</rdf:li> </rdf:Bag> </dc:subject> </rdf:Description> </rdf:RDF> </x:xapmeta> <?xpacket end='w'?> %end_xml_packet [{photoshop_metadata_stream} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT pdfmark [{photoshop_metadata_stream} MetadataString /PUT pdfmark [/_objdef {nextImage} /NI pdfmark %end_xml_code gsave % EPS gsave /hascolor /deviceinfo where {pop deviceinfo /Colors known {deviceinfo /Colors get exec 1 gt} {false} ifelse} {/statusdict where {pop statusdict /processcolors known {statusdict /processcolors get exec 1 gt} {false} ifelse} {false} ifelse} ifelse def 40 dict begin /_image systemdict /image get def /_setgray systemdict /setgray get def /_currentgray systemdict /currentgray get def /_settransfer systemdict /settransfer get def /_currenttransfer systemdict /currenttransfer get def /blank 0 _currenttransfer exec 1 _currenttransfer exec eq def /negative blank {0 _currenttransfer exec 0.5 lt} {0 _currenttransfer exec 1 _currenttransfer exec gt} ifelse def /inverted? negative def /level2 systemdict /languagelevel known {languagelevel 2 ge} {false} ifelse def /level3 systemdict /languagelevel known {languagelevel 3 ge} {false} ifelse def /foureq {4 index eq 8 1 roll 4 index eq 8 1 roll 4 index eq 8 1 roll 4 index eq 8 1 roll pop pop pop pop and and and} def hascolor {/band 0 def} {/band 5 def} ifelse /setcmykcolor where {pop 1 0 0 0 setcmykcolor _currentgray 1 exch sub 0 1 0 0 setcmykcolor _currentgray 1 exch sub 0 0 1 0 setcmykcolor _currentgray 1 exch sub 0 0 0 1 setcmykcolor _currentgray 1 exch sub 4 {4 copy} repeat 1 0 0 0 foureq {/band 1 store} if 0 1 0 0 foureq {/band 2 store} if 0 0 1 0 foureq {/band 3 store} if 0 0 0 1 foureq {/band 4 store} if 0 0 0 0 foureq {/band 6 store} if} if blank {/band 6 store} if gsave % Image Header gsave /rows 8 def /cols 8 def 8 8 scale level2 { band 0 eq { /DeviceRGB } {/DeviceGray} ifelse setcolorspace currentdict /PhotoshopDuotoneColorSpace undef currentdict /PhotoshopDuotoneAltColorSpace undef } if /picstr1 8 string def /picstr2 8 string def /picstr3 8 string def /picstr4 8 string def /_rowpadstr 8 string def /rawreaddata {currentfile exch readhexstring pop} def /padreaddata { _topPad 0 gt { /_topPad _topPad 1 sub def pop _rowpadstr } { _subImageRows 0 gt { /_subImageRows _subImageRows 1 sub def dup _leftPad _picsubstr rawreaddata putinterval } { pop _rowpadstr } ifelse } ifelse } def /image2 level2 {/image load def} {{begin Width Height BitsPerComponent ImageMatrix Decode length 2 eq {/DataSource load image} if Decode length 6 eq {DataSource 0 get DataSource 1 get DataSource 2 get true 3 colorimage} if Decode length 8 eq {DataSource 0 get DataSource 1 get DataSource 2 get DataSource 3 get true 4 colorimage} if end} def} ifelse /_image2 level2 {/_image load def} {{begin Width Height BitsPerComponent ImageMatrix /DataSource load _image end} def} ifelse /beginimage { band 0 eq band 4 eq or band 5 eq or {image2} {negative {{pop 0}} {{pop 1}} ifelse _settransfer _image2} ifelse } def /readdata /rawreaddata load bind def 12 dict begin /ImageType 1 def /Width cols def /Height rows def /ImageMatrix [cols 0 0 rows neg 0 rows] def /BitsPerComponent 8 def band 0 eq {/Decode [0 1 0 1 0 1] def /MultipleDataSources true def /DataSource [ {picstr1 readdata} {picstr2 readdata} {picstr3 readdata picstr4 readdata pop} ] def} {/Decode [0 1] def /DataSource { picstr1 readdata pop picstr2 readdata pop picstr3 readdata pop picstr4 readdata } def} ifelse currentdict end %%BeginBinary: 531 beginimage 0202020202020202010101010101010100000001000000000101010101010101 0202020202020202010101010101010100000000000001010101010101010101 0202020202020202010101010100000001000000000001010101010101010101 0202020202020202010101010100010101000000000000000101010101010101 0101020202020202010101010101010101010000000000000101010101010101 0101020202020202010101010101000101010000000001000101010101010101 0102020202020202000001010101000101020100000001000001010101010101 0101020202020202000001010101010102030100000000000101010101010101 %%EndBinary grestore end % Image Trailer grestore grestore % EPS grestore [{nextImage} 1 dict begin /Metadata {photoshop_metadata_stream} def currentdict end /PUT pdfmark [/NamespacePop pdfmark �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/PPM.ppm���������������������������������������������������������������000644 �000765 �000024 �00000000337 10336164711 017252� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������P6 # ExifTool PPM test 8 8 255 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/PSP.psp���������������������������������������������������������������000644 �000765 �000024 �00000003247 11330334032 017257� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Paint Shop Pro Image File ����� ���~BK���.���.���������������i@�������À����������~BK� �¹���~FL�����   � ��� �����~FL��j���Exif��II*�����˜‚����6�������H�������P���(�����������© 2010 Phil Harvey€„�'��€„�'������~FL��#���������t������© 2010 Phil Harvey~BK��”���~FL��� ���Test Image~FL�����ÙaK~FL�����‚ŸaK~FL�� ���Phil Harvey~FL�����© 2010 Phil Harvey~FL�� ���A description~FL��������~FL�������� ~BK��§��������~BK���������������������~BK��s�����e��À����ÿØÿà�JFIF��[�[��ÿÀ����ÿÛ�„�      ÿÄ¢���������� ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùú������� ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�þþ(ÿÙ~BK��/��~BK��%��ˆ��� �Background����������������������������ÿ������������������������������������������ÿÿ��ÿÿ��ÿÿ��ÿÿ��ÿÿ��ÿÿ��ÿÿ��ÿÿ��ÿÿ��ÿÿ�ÿÿ@�~BK�!�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~BK��"���������À������xœúÿŸ2����ÿÿ�˜?Á~BK��"���������À������xœúÿŸ2����ÿÿ�˜?Á~BK��"���������À������xœúÿŸ2����ÿÿ�˜?Á���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/QuickTime.m4a���������������������������������������������������������000644 �000765 �000024 �00000012165 12236207140 020373� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ftypM4A ����M4A mp42isom������Mmoov���lmvhd����¾è »Á9tE��X��D��������������������������������������������@��������������������������������trak���\tkhd���¾è »Á9tE���������D���������������������������������������������@�������������9mdia��� mdhd����¾è »Á9tE��}��0�UÄ�����"hdlr��������soun����������������ïminf���smhd�����������$dinf���dref���������� url �����³stbl���gstsd����������Wmp4a���������������������¬D�����3esds����€€€"���€€€@����}���}�€€€ˆ€€€���stts���������Œ������(stsc�������������������,��������Dstsz����������Œ������²���­���¤���œ���«���›���—���Ž���µ���������“������m���f���g���±���„���‘���s���†���Š���}���Ÿ���–���y���„���|���q���f���c���‰���}���q���z���z���r���j���q���­���x���Œ���u���|���q���g���m���º���ƒ������z���|���€���f���k���±���‡���€���u������k���l���„���¾���}���k���c���q���t���q���Ã���µ���~���g���ª���Y���h���f���µ���{���g���j���{���m���i���s���¶���{���„������ª���n���l���p���±���|���„���u���¯���j���g���q���¸������„��� ���¦���a���g���˜���������i���u���œ���p���m���š������~���g���k���g���m���m���¨���������o���}���‚���e���f���»���‰���p���t���²���t���g���g���µ���t���k���j���o���u���q���¬���º���n���€���p���k���o���s���¯������ƒ���w���q���w���k���s���¼���|���������z���q���n���p���µ���‡���„������y���y���v���k���¹������v���l���w���o���o���ˆ���¿���‡���‡���x������Š���†���¨���n���x���g���©���˜���g���c���›���¦���h���u���©���p���q���m���©���m���n���l���j���r���j���k���Ã���w���~���v���”���‘���k���{���°���~���i���q���j���j���h���«���®������z���n���y���t���|���¦���w������v���m���w���v���r���®���†���‹���y���w���~���p���f���½���v���w���t���…���t���w���l���·���„���y���l���s���t���q���Ÿ���¸���w���„���|���m���h���u���¶���‡���€���s���{���y���i���|���º���}���x���u���}���r���s���v���½���‚���Œ���y���}���t���s���x���½���‚���}���r������k���m���†���¾������k���c���q���u���q���¹���µ���~���g���ª���h���h���f���´���{���f���l���q���q���u���s���·���{���…���€���«���e���j���o���±���|���„���v���¢���n���i���q���¸���€���…���ž���¦���a���h���–���������x���u���œ���p���m���š������~���g���k���g���m���m���¨���������o���}���‚���e���f���»���‰���p���t���²���t���g���g���µ���t���k���j���o���u���q���¬���º���n���€���p���k���o���s���¯������ƒ���w���q���†���k���s���½���|���������z���q���n���p���µ���‡���„������x���y���v���k���¹������v���l���h���o���o���ˆ���¿���‡���‡���x������Š���†���¨���n���x���g���©���˜���g���c���©���¦���h���u���©���p���q���m���©���m���]���l���j���q���j���k���Ã���w���~���v���”���‘���k���{���°���~���i���q���j���j���h���¬���®������z���n���y���t���|���¦���w������v���m���w���v���r���®���†���‹���Ž���w���}���p���f���½���v���w���t���„���t���k���l���·���t���y���l���s���t���{���Ÿ���¸���w���„���|���m���h���u���¶���ˆ���€���t���{���v���k���z���º���}���w���v���}���l���n���u���½���~���Œ���y���}������q���{���½���‡���}���t���€���g���v���„���¾���y���f���t���p���h���s���º���µ���~���g���ª���h���h���n���¶���v���g���j���q���m���v���j���¶���{���„������ª���n���l���p���±���|���…���u���£���y���g���q���¸������‚��� ���¦���a���g���˜���������i���u���œ���p���m���š������~���g���k���g���m���m���¨���������o���}���‚���e���f���»���‰���p���t���²���t���g���g���µ���t���k���j���o���u���q���¬���º���n���€���p���k���o���s���¯������ƒ���w���q���…���k���s���»���|���~���~���{���u���n���r���»���t���„���}���y���{���r���p���¶���v���‡���p���k���k���m���‰���¸������€���„���•������y���²���y���u���h���–��� ���f���i���¤���ª���g���g���©���c���e���j���­���u���e���n���f���k���j���u���¶���}���t���l���������}���•���—���w���u���q���r���r���m���“���’���j���h���w���t���v���s���…���~���|���p���u���€���|���z���y���x���}���z���}���v���}���x���r���z���{���}���r���s���‚���|���~������~���w������|������r���t���w���w���v���{���q���x���~���t���{���|���z���a���s���z���y���\���X���j���y���W���[���c���_���J���M���|���y���~���y���|������{���ƒ���}������…���ƒ���~���}������x���‚���~���}���}���ƒ���~���r���|���x���v���s���|���y���v���s������}���x���v���|���|���~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Àstco�������,��È(��Ó��Ýß��è5��òÂ��ýƒ�Î�H�õ�'F�2a�<°�G�Qh�\�fß�q�| �†y�¢�›r�¦��°Á�ºû�Å”�Ïê�Úx�å8�ï¤�ú“�Ú�y�Â�$t�/)�9"�C,�M'�VN�`!�i¯�j�jW�j«��<udta��4meta�������"hdlr��������mdirappl���������ä��ilst���©nam���data�������Sample���cpil���data�����������tmpo���data��������x���4©too���,data�������iTunes v4.9, QuickTime 7.0.1���¢----���mean����com.apple.iTunes���name����iTunNORM���jdata������� 00000080 00000000 00000610 00000000 0000289C 00000000 00000000 00000000 00000000 00000000���(©lyr��� data�������these are lyrics���#©ART���data�������Phil Harvey���$aART���data�������album artist��� ©wrt���data�������Composer���©alb���data�������album��� ©grp���data�������grouping���*©gen���"data�������Children’s Music��� trkn���data�����������������disk���data���������������©day���data�������2006��� ©cmt���data�������comments���pgap���data����������Ncovr���#data��� ����<Dummy cover art 1>���#data��� ����<Dummy cover art 2>���mdat�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/QuickTime.mov���������������������������������������������������������000644 �000765 �000024 �00000007437 12236207135 020525� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������moov���lmvhd����¿! JÈx£¿��X�� ¤����ÿ����������������������������������������@��������������������������������°trak���\tkhd���¿! J¿! J��������� ¤����������������������������������������������@���@���ð�����Dtapt���clef����@���ð�����prof����@���ð�����enof����@���ð�����$edts���elst��������� ¤���������ämdia��� mdhd����¿! J¿! J��X�� ¤�������!hdlr����mhlrvidepent�����������›minf���vmhd����@€�€�€����!hdlr����dhlralispent������������$dinf���dref���������� alis�����:stbl���fstsd����������Vjpeg���������pent�������@�ð�H���H������� Photo - JPEG��������������������ÿÿ���stts����������•������(stsc���������������������������hstsz�����������•��0���0���0���0���,���4���4���4���<���@���@���D���L���T���P���X���`���P���X���X���X���\���X���X���\���P���X���P���L���T���T���T���P���\���P���T���T���T���X���X���X���`���T���P���T���P���T���X���X���L���P���h���X���T���L���T���L���T���X���X���T���\���T���P���P���T���X���`���H���H���P���`���P���T���X���T���L���P���\���P���X���T���T���`���L���T���L���T���T���T���X���X���X���\���L���P���\���P���X���T���P���T���X���\���L���P���P���T���T���X���d���P���T���T���T���T���L���L���X���\���L���X���\���H���L���T���P���P���P���X���X���X���`���L���P���X���\���T���\���H���H���H���T���X���l���P���L���T���X����$stco���������*��Ú��ö��î��'���âtrak���\tkhd���¿! J¿! J��������� £���������������������������������������������@��������������$edts���elst��������� £���������Zmdia��� mdhd����¿! J¿! J��Ã��˜È�������!hdlr����mhlrsounpent�����������minf���smhd�����������!hdlr����dhlralispent������������$dinf���dref���������� alis������´stbl���4stsd����������$raw ���������������������Ã�����stts���������˜È������(stsc������������Ã��������¼������stsz���������˜È���$stco��������²��Î��Æ��&Ú��0z���meta��� hdlr��������mdta���������������vkeys����������!mdtacom.apple.quicktime.album���"mdtacom.apple.quicktime.artist���#mdtacom.apple.quicktime.comment���hilst���������data�������Ã¥lbum���������data�������Ã¥rtist���#������data�������çømménts�� udta���©fmt���Digital Camera���=©inf�1��PENTAX DIGITAL CAMERA ���¹TAGSPENTAX DIGITAL CAMERA������������ ���€��(��� ������� ���#��� ��������½��� ������������������������������������������������������������������������������������������������2���ÈXMP_<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.1-c036 46.277092, Fri Feb 23 2007 14:16:18 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpDM="http://ns.adobe.com/xmp/1.0/DynamicMedia/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xap="http://ns.adobe.com/xap/1.0/" xmpDM:altTapeName="An Alternate Scene Name" xmpDM:album="No Album" xap:MetadataDate="2008-09-12T11:17:39-04:00"> <dc:creator> <rdf:Seq> <rdf:li>Phil Harvey</rdf:li> </rdf:Seq> </dc:creator> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?>���©alb���Œlbum���©ART���Œrtist���©cmt���¿mmŽnts���©com���c¿mp¿sŽr���©gen���GenrŽ��Ïmeta�������"hdlr��������mdirappl������������¡ilst���(©lyr��� data�������These are lyrics��covr�� data��� ����ÿØÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ���©ART���data�������Ã¥rtist���(aART��� data�������Ã¥lbüm Ã¥rtîst���#©wrt���data�������cømpøsér���©alb���data�������Ã¥lbum���!©grp���data�������grøuping���©gen���data�������Genré��� trkn���data�����������������disk���data���������������©day���data�������2010���#©cmt���data�������çømménts���tmpo���data��������€���mdat���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Radiance.hdr����������������������������������������������������������000644 �000765 �000024 �00000001113 11670727775 020317� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#?RADIANCE oconv mat.rad sky.rad surfaces.rad oconv -f -i test4.oct ila01728 rpict -t 30 -vf test4.vf -x 1536 -y 1536 -ps 3 -pt .04 -dp 4096 -ar 68 -ms 0.029 -ds .2 -dt .05 -dc .75 -dr 3 -sj 1 -st .01 -ab 3 -af test4.amb -aa .08 -ad 1024 -as 512 -av 0.5 0.5 0.5 -lr 12 -lw .0005 -st .001 -dj .02 SOFTWARE= RADIANCE 3.1.8 lastmod Thu Sep 17 20:49:56 PDT 1998 by droberts on escher VIEW= -vtv -vp 0.832108 2.26053 1.8 -vd 0.984193 0.177099 0 -vu 0 0 1 -vh 100 -vv 100 -vo 0 -va 0 -vs 0 -vl 0 FORMAT=32-bit_rle_rgbe pfilt -1 -e 1 -m .25 -2 -x /3 -y /3 EXPOSURE=3.512179e-001 -Y 1 +X 1 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Real.ra���������������������������������������������������������������000644 �000765 �000024 �00000000202 10432665500 017275� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������.raý���.ra4� ¿Ô����r���\� ¿`�’ß�’ß�\����V"����Int0dnet��The Sewing Girls�)** institut für universelle zusammenhänge�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Real.ram��������������������������������������������������������������000644 �000765 �000024 �00000000105 10433374206 017455� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������rtsp://media.real.com/showcase/service/samples/rob_h_realvideo9_28.rm�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Real.rm���������������������������������������������������������������000644 �000765 �000024 �00000003573 10435051621 017323� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������.RMF�����������PROP���2����})��})��Ñ��Ñ������_��A�� Ö��ô�� MDPR���¬������})��})��Ñ��Ñ������A��A Audio Streamaudio/x-pn-realaudio���^.raý���.ra5�������N���Ñ�����ª·�ª·�Ñ�]����¬D��¬D����genrcook��������� ������MDPR��½��������������������������������logical-fileinfo����������� �����Content Rating�����������#�� Audiences���� 56k Dial-up;������ audioMode����music����,�� Creation Date����5/12/2004 9:54:03����O�� Generated By����6Helix Producer SDK from RealNetworks.9.1.0.24 Windows����0��Modification Date����5/12/2004 9:54:03������ videoMode����normal����%�� Description���� Test RM file����(��Keywords����these are keywords�CONT���G���A title� Phil Harvey�Copyright 2006 Phil Harvey� A commentRMMD��‡RJMD�����ë��������������"��������������:������×�����:��������� �������"���'������Album��������/������n����������!���n�������Name����IThe Real album name ����c��� �������'���,������ Statistics��������4������/���������*���/�������CDInfo Source�������±��� �������"���'������Track��������?������¶�����™������w����������%���w������� Category����NThe Real track category ����ã����������%���r������ Comments����IThe Real track comments ����‚������¯������-����������%���-������� DataSize����ÿÿÿÿ���4����������%���4������� MimeType���� text/plain������ �������#���p������Lyrics����IThe Real track lyrics ����ˆ������µ������ä������-���������%���-������� DataSize����I������/���������&���/������� Extension����.txt����4����������%���4������� MimeType���� text/plain�RMJE�����óTAGThis is a title���������������An artist���������������������The album���������������������2003This is a comment�������������N�������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Ricoh.jpg�������������������������������������������������������������000644 �000765 �000024 �00000003557 10357015703 017654� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿárExif��MM�*���� �������’���� ���¦�������²��������������Â�������Ê(�������2�������Ò�������‚˜�������æ‡i���������ð �RICOH �Caplio RR1 ����H������H���2001:11:07 13:08:41�(C) by Caplio RR1 User ��ˆ"�������ˆ'�����–�������0210������������.‘�����‘������B’� �����J’������R’� �����Z’� �����b’������j’�������’�����ÿ��’ ��������’ ������r’|���P��z’†�����Ê �����0100 ������� ������à ������¨ ������Ò����2001:11:07 13:08:41�2001:11:07 13:08:41���,���d���Q��� ������ ���5��� ������� ������ ���K��� RICOH���� �����RDC�������� �������������3025�����Ê��������Þ� �������� ���������������������ä ����Þ��ì����Rev0104�PrintIM�0100��� ������������^����������� ����� ����� ���¦� ����� ��������¾���������� ��'�� ��'��—��'��°��'����'��^��'���‹��'��Ë��'��å��'������������������������������������à¨�����d���d[Ricoh Camera Info]�� �����:��������*�����À�0��������¦��������º������ ���� ��������������� � ����ÿÿ�� �������Î� �������Ö� �����ˆ� 2001:10:23 00:00:00�0000:00:00 00:00:00����@��W��� ���!������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������R98������0100������������������>������F(�������������N��������������H������H���<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Ricoh2.jpg������������������������������������������������������������000644 �000765 �000024 �00000006163 10507330253 017727� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá ÔExif��MM�*���� ����@���ª���� ���ê�������ö�������������������(�������2�������������‚˜������*‡i������Dˆ%������DÄ¥������D�� R �RICOH �Caplio Pro G3 ����H������H���2006:05:26 11:48:48�(C) by Caplio Pro G3 User�PrintIM�0250��������������d����������� ����� ����� ���¬� ����� ��������Ä�������€����� ��'�� ��'��—��'��°��'����'��^��'���‹��'��Ë��'��å��'�������������������������������������������������������������������������������‚š������š‚������¢ˆ"�������ˆ'�����}�������0220������ª������¾‘�����‘������Ò’������Ú’� �����â’� �����ê’������ò’�������’��������’ �������’ ������ú’|�����’†����� �����0100 ������� ������� ������� ������&¤��������¤��������¤��������¤ ����������������Ì��&���d2006:05:26 11:48:48�2006:05:26 11:48:48���@���d���2��� ���`��� ÿÿÿö��� �����d���9��� RicohÏ��� �����Rdc��������|�������„�������”�������¤������´������¤�������� ���N��Ð����Rev2219�*���� ����@��������"�� W������������������@ &HH�Ì&�dì��[Ricoh Camera Info]ÿ�������b�Z�������-�������ž�������²�������������������������p� �����o�� ������Æ� ������Î� ������Ö� ����€ÿá���������������®�P�����@��Þ����2005:06:06 2003:08:19 ��ÿþ��¾��ÿþ��¾������� �"€ �0‚���)�Z$�„@ `�ˆ�ƒ���D‚�€�*@�€ @�A��������������GCM_TAG�Information�Roundabout�No�Good�E������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������R98������0100������������������N����������v�����W����������Ž����������������¦�������®�����0��Æ� ����A���� ����3���� ������ö� ����N���� ������þ�����T���������� �����T���������� ����� �� ���������������� 6���������������� >����� �� F����������������*�����������¿���d��������������� ���d���u������ ������/���������24,23,20,17,13,11,04 ������d�������������������WGS-84 �����������������2006:05:26����������������  ������ ¨(������������� °��������������H������H���<Dummy thumbnail image data>ÿå RMETA�MM������ �ASCII�����¬Sign type�Location�Lit�Condition�Azimuth������������������������������������������������������������������������������������������������������������������������������������¬Information�Roundabout�No�Good�E�������������������������������������������������������������������������������������������������������������������������������������������� �����������������������������ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/RIFF.avi��������������������������������������������������������������000644 �000765 �000024 �00000002356 11062511372 017326� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������RIFF¶;*�AVI LISTF��hdrlavih8���j�È$�������é����������È2��@��ð�������������������LISTt���strlstrh8���vidsmjpg������������j�@B�����é���È2��'����������@ð�strf(���(���@��ð�����MJPG�„�����������������LIST\���strlstrh8���auds�������������������+������èœ�+��'�������������strf�����+��+����IDIT���Mon Mar 10 15:04:43 2003 �LIST���INFOISFT ���CanonMVI01��LIST���movi_PMXÀ��<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.1-c036 46.277092, Fri Feb 23 2007 14:16:18 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpDM="http://ns.adobe.com/xmp/1.0/DynamicMedia/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xap="http://ns.adobe.com/xap/1.0/" xmpDM:altTapeName="An Alternate Scene Name" xmpDM:album="No Album" xap:MetadataDate="2008-09-12T11:17:39-04:00"> <dc:creator> <rdf:Seq> <rdf:li>Phil Harvey</rdf:li> </rdf:Seq> </dc:creator> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?>LIST˜���Tdattc_O�����������������tc_A�����������������rn_O(����������������������������������rn_A(���An Alternate Scene Name�1.0/DynamicMë¸�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/RIFF.wav��������������������������������������������������������������000644 �000765 �000024 �00000000340 10355763261 017345� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������RIFFÈ���WAVEfmt �����À��À����LIST���INFOICRD ���2005-08-08��LISTŒ���exifever���0220erel ���IMGP1149.JPG��etim ���16:23:35������ecor���PENTAX Corporation �emdl���PENTAX Optio WP�����emnt���pentidx4�������data����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/RIFF.webp�������������������������������������������������������������000644 �000765 �000024 �00000000072 12006747503 017503� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������RIFF2���WEBPVP8 &���²�*��.i4šM"""""�hK(�γl��þþz@�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/RTF.rtf���������������������������������������������������������������000644 �000765 �000024 �00000001736 11407366513 017260� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} {\info {\title ExifTool RTF test (with sp\'e9c\'ee\'e5l \'e7hars)} {\revtim\yr2010\mo6\dy19\hr20} {\subject a \ldblquote subject\rdblquote in funny quotes} {\doccomm \uc0\u12473 \u12488 \u12525 \u12508 \u12501 \u12521 \u12483 \u12471 \u12517 \u26410 \u30330 \u20809 \u12289 \u24375 \u21046 \u30330 \u20809 \u12514 \u12540 \uc4\u12489j\'fcnk(end)\ another line} {\author an author \{with braces\}} {\*\company a company \\with backslashes and leading space\\} {\*\copyright \'a9 2010 Phil Harvey} {\keywords keyword1, keyword2} }{\* \userprops {{\propname CustomString}\proptype30{\staticval ABCDEF}} {{\propname CustomNumber}\proptype3{\staticval 123456}} }\margl1440\margr1440\vieww9000\viewh8400\viewkind0 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \f0\fs24 \cf0 This is some text}����������������������������������Image-ExifTool-10.10/t/images/Sanyo.jpg�������������������������������������������������������������000644 �000765 �000024 �00000004165 10357015703 017675� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿáxExif��II*���� �����’�������¨���� ���À��������������Ê�������Ò���(�������1� ���Ú���2����ä����������i‡����ø���ö��SANYO DIGITAL CAMERA��SANYO Electric Co.,Ltd.�VPC-MZ3 ��H������H������V612P-75��2003:10:11 12:43:05�#�š‚����¢��‚����ª��"ˆ�������'ˆ�����������0220����²������Æ��‘�����‘����Ú��’ ����â��’ ����ê��’����ò��’�������’���� ��� ’������� ’����ú��|’�P����†’�}���R��� ����0100 ������� ����Ð�� ����Ø�� ����Ø���£�������¤��������¤��������¤�������¤����Ð��¤����i+��¤��������¤�������¤�������� ¤�������� ¤�������� ¤��������������¹���E��� ���2003:10:11 12:43:05�2003:10:11 12:43:05���� ������� ������� ��������� ��d���SANYO�� �ÿ�����4�����������������������������������œ������������������������������������������������������������������������������������������������������������������������������������������������ ���� ���!��������"�…���¤��#����®��$��������%������������¶���� ���Ì��ª������������������d���� g�# Ó�ž5 »� K ™�a^ <| Åà  £ ,Ʊ @ Ë fã Ç�<ü :�ÿ�? [p�’ Nç�Ú0|¾�™H ¨�õZ¼*Í|™èh„RÉÌŸbUè°NmŒÍ˜Üæ ß�]ýÉ@�ÿ�? [p�’ Nç�Ú0|¾�™H ¨�q\â,Í|™èh„RÉÌŸbUè°NmŒÍ˜Üæ ß�]ýÉ@�ÿ�������������������������������������d���d���PrintIM�0100������PrintIM�0100������2é1��>�� ù��-“�áž���Úv����ð����+»/•�����`����%|+»���������}�}Ÿ�HúS €�!�������H�„�áJŸ����������������������������������������������������������������������������������������������������������������������������������������d���������R98������0100����������������D������L��(�����������T�������������H������H������<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Sigma.jpg�������������������������������������������������������������000644 �000765 �000024 �00000002773 10357015703 017647� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿáþExif��II*���� �����†���� ���Œ��������������˜������� ���(�������1����¨���2����Â����������i‡����Ö���p��SIGMA�SIGMA SD10��´������´������SIGMA PhotoPro 2.0.0.1586�2004:03:19 17:48:51��š‚������‚������"ˆ�������'ˆ����d��������0220����$������8��‘�����’ ����L��’����T��’������� ’�������� ’����\��|’�ê��d��� ����0100 ������� ����Ü�� ����è��¢��������£�������¤�������¤��������¤�������¤����f���¤�������� ¤�!���N���������@��P��� ���2003:11:27 10:31:34�2004:03:19 17:48:51����������� ���<������SIGMA������� ���ˆ�������’�������HI�������š�������AF���� ��� �������P��� �����8��� �� ���ª�� �����´�� �� ���º�� �� ���Ä���� ���Î���� ���Ø���� ���â���� ���ì���� ���ö����������������������������� �������4������� �������02000019��SINGLE��AF-S��Sunlight��24 to 70��sRGB��Expo:+0.8�Cont:+0.0�Shad:+0.0�High:+0.0�Satu:+0.4�Shar:+1.0�Fill:+0.0�CC:0��X3F Setting Mode��Qual:12�2.0.4.1642 Release��SIGMA PhotoPro 2.0.0.1586�303230303030313986D2C53F8ABDA2A6��������������Ê������Ò��(�����������Ú��������������������´������´������<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�����Image-ExifTool-10.10/t/images/Sigma.x3f�������������������������������������������������������������000644 �000765 �000024 �00000002670 10336164712 017565� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������FOVb��02001234ÑO:;*©����Ü��è��Z���Sunlight������������������������  �������������������������?ÍÌŒ¿ÍÌ̽���ÀÍÌ̽33󿚙ٿ��€?/äY?)d?����������������������������������������������������������������������������������������SECi���������� ��û������<dummy image data>��SECi������ ���7��z������<dummy image data>��SECi���������½���~���8��<dummy image data>��SECc����������FCEb���œñ<dummy CAMF data>���SECp��������������n���������������������'���0���6���?���J���T���]���f���y���~���ˆ������–���œ���Ÿ���¦���«���³���»���Ã���É���Ï���Ó���Ù���Û���ã���å���ì���î���õ���÷���ý�����������#��+��-��8��B��M��V��^��a��j��I�S�O���1�0�0���R�E�S�O�L�U�T�I�O�N���H�I���W�B�_�D�E�S�C���S�u�n�l�i�g�h�t���C�A�M�M�A�N�U�F���S�I�G�M�A���C�A�M�M�O�D�E�L���S�I�G�M�A� �S�D�1�0���C�A�M�S�E�R�I�A�L���0�2�0�0�1�2�3�4���F�I�R�M�V�E�R�S���2�.�0�.�4�.�1�5�8�6� �R�e�l�e�a�s�e���T�I�M�E���9�7�8�3�0�9�3�9�5���E�X�P�T�I�M�E���2�4�1�4�0���F�O�C�U�S���A�F���A�F�M�O�D�E���A�F�-�S���S�H�U�T�T�E�R���0�.�0�0�9�2�9���S�H�_�D�E�S�C���1�/�1�0�0���F�L�A�S�H���O�F�F���P�M�O�D�E���P���E�X�P�C�O�M�P���0���E�X�P�N�E�T���0���A�E�M�O�D�E���8���D�R�I�V�E���S�I�N�G�L�E���L�E�N�S�M�O�D�E�L���1�4�5���A�P�E�R�T�U�R�E���8�.�3�5�4�1�9���A�P�_�D�E�S�C���8���L�E�N�S�A�R�A�N�G�E���2�9� �t�o� �4�.�5���L�E�N�S�F�R�A�N�G�E���1�5� �t�o� �3�0���F�L�E�N�G�T�H���3�0���F�L�E�Q�3�5�M�M���5�1�����SECd������è���.���IMAG��.���IMA2H��.���IMAGx��-���CAMF¨��Ä��PROPl��������������������������������������������������������������������������Image-ExifTool-10.10/t/images/SigmaDP2.x3f����������������������������������������������������������000644 �000765 �000024 �00000010414 11462554711 020071� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������FOVb��01008382 K1df8����P ��à������Auto����������������������������Standard������������������������  ������������������������������������������������������������������������������������������������������������������������������������������������������SECi���������P ��à������ÿØÿá vExif��MM�*���� ���� ���†���� ���’��������������ž�������¦(�������1�������®2�������Â�������‡i�������Ö��¶SIGMA�������SIGMA DP2������´������´���1.03.0.000000000����2009:11:28 13:05:20��‚š������D‚������Lˆ"�������ˆ'�����d�������0221������T������h‘�����’� �����|’������„’�������’��������’ ��������’ ������Œ’|���¬��”’†����,��@ �����0100 ������� ������ P ������à ������˜¢�������£��������¤��������¤��������¤��������¤�����)��¤��������¤ ����$��l¥����������������� ������ 2009:11:28 13:05:20�2009:11:28 13:05:20�������� �ø†��ÿþ���ò��� SIGMA�����:����� ��X�������d�����HI���������l�����AF���������t�����P���� ����8���� ���� ��„� ������� � ����� � � �����¨�� �����°�� �����¸�� �����À�� �����È�� �����Ð�� �����Ø�������ð����� �������@������� ��P�������\������� T�������������€à�����0100������������� ��d� ���������!���������"������p�#���� ��x�$������„�%������„�&���������'���������(���������)���������*���������+���������,��������-���������.� �����Œ�/���������0���� ��”�1������ �2������¨�3������°�4���������5� �����¸�6���� ��À�7������à�8���� ��ü�9�������:� ������;������ �<������01008382�����SINGLE��AF-S����Auto������������24.2��������sRGB������������������� ������� ������� ������� ������� ������� ������� ������� ������� ������� ��������������������Qual:BASIC��1.03.0.000������������������������������������������������������ ����������� �������Center������X3F-S��� �����������C72_CalibrationSoft Version 1.00 RunID:C72Cal-001;Runtime:2009-05-29-14:15:38�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0.90����������� 2.8 to 14��������� ������ 100000��������� ������������������������������� ��������������������������� �����������20��������������������� 1.03.0.000������Auto��������������������������������������������������������30313030383338321020110031646638������������������R98������0100������������������������� ������ $(������������� 8���������������������´������´���������������<Dummy thumbnail image data><Dummy preview image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�SECc������´?����€���V��<Dummy CAMF data>���SECp���!�����������»��������� ������������!���*���2���:���<���B���D���M���S���\���f���n���p���z���‚���ˆ������—������¤���ª���²���¹���Â���Í���Ó���×���ß���ä���í���ð���ö���ù���������������)��3��>��C��M��O��U��W��b��e��n��p��x��}��…����’����¥��ª��²��A�E�M�O�D�E���8���A�F�M�O�D�E���A�F�-�S���A�P�_�D�E�S�C���2�.�8���A�P�E�R�T�U�R�E���2�.�8�0�0�0�0���B�R�A�C�K�E�T��� ���B�U�R�S�T���0���C�A�M�M�A�N�U�F���S�I�G�M�A���C�A�M�M�O�D�E�L���S�I�G�M�A� �D�P�2���C�A�M�N�A�M�E��� ���C�A�M�S�E�R�I�A�L���1�0�0�8�3�8�2���D�R�I�V�E���S�I�N�G�L�E���E�X�P�C�O�M�P���+�0�.�0�0���E�X�P�N�E�T���+�0�.�0�0���E�X�P�T�I�M�E���1�0�0�0�0�0���F�I�R�M�V�E�R�S���1�.�0�3�.�0�.�0�0�0���F�L�A�S�H���O�F�F���F�L�E�N�G�T�H���2�4�.�2���F�L�E�Q�3�5�M�M���4�1���F�O�C�U�S���A�F���I�M�A�G�E�B�O�A�R�D�I�D��� ���I�M�A�G�E�R�T�E�M�P���2�0���I�S�O���1�0�0���L�E�N�S�A�R�A�N�G�E���2�.�8� �t�o� �1�4���L�E�N�S�F�R�A�N�G�E���2�4�.�2���L�E�N�S�M�O�D�E�L��� ���P�M�O�D�E���P���R�E�S�O�L�U�T�I�O�N���H�I���S�E�N�S�O�R�I�D��� ���S�H�_�D�E�S�C���1�/�1�0���S�H�U�T�T�E�R���0�.�1�0�0�0�0���T�I�M�E���1�2�5�9�4�1�3�5�2�0���W�B�_�D�E�S�C���A�u�t�o���C�M�_�D�E�S�C���S�t�a�n�d�a�r�d�����SECi���������€ �����ëÚ�<Dummy image data>��SECi���������Ý���“���6A��<Dummy image data>��SECd�������� ��IMA2˜ ��-���CAMFÈ ��˜��PROP`��.���IMA2��.���IMA2À������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Sony.jpg��������������������������������������������������������������000644 �000765 �000024 �00000005333 10357015703 017532� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá ÞExif��II*���� �� ���’�������²���� ���¸��������������Â�������Ê���(�������2����Ò����������i‡������¥Ä����æ��� �� �SONY��DSC-F828��H������H������2003:12:18 13:51:33�PrintIM�0250������������š‚����p��‚����x��"ˆ�������'ˆ����@��������0220����€������”��‘�����‘����¨��’ ����°��’����¸��’�������’�������� ’������� ’����À��|’�"��È��� ����0100 ������� ����À �� ���� �� ����ê���£�������£�������¤��������¤�������¤��������¤��������¤�������� ¤�������� ¤������������ ���Ä ��G��� ���2003:12:18 13:51:33�2003:12:18 13:51:33����������� ���!������}��� ���SONY DSC ��� �� ���������”���F���È���Ú���È���¢���t���j���€���Þ���ü���^���È���Z���È���"�����������­�m�Q�V„û�V„û�³����9���°���9�ŠJuÿ����Ŭ]è�^ޏ}iœ���^�����0žp�'0[p�0���������������������������������������������������������������������JÚ`���p��V! !¾ê¾ê0ÿ0ÿV!ˆPp,��������×0c������������������������������������������������������������������}^������������������������������������������������������������ �}�×O��Ø@����ê:J��××������ÜsF�®�&��¡�Ò�B��¯����È�ûÙ ›ÕutN½½½½½½��(¶^w’§»Í¾¼êNŠ©�����3–‰NîÊ€Vì¶�þ�b�‚�Q÷�×���ÿÁpà�‰��ÿëÿO¶Ã��ÿk��ð½½½½½ÔÅI[yЇmêo3ø LƒLƒL1ïAEwà8à8Ô�Ô“p½½½½½½½½½½½½½½½½½�Üܼ_�,,,,ôôôôôôôô�lêo�Ä�@���o”�,‚�,Ï�o‰3úM I ”³3úM I ”³3útEª¢?þ3útEª¢?þ�#½��L�#½Í^Í•�#½Í^Í•�����L���������@�����o����������������������������}ç¶¶iˆËºà•������^ÿÿ�ÿ����F���ï}��”ÿ��ͪ�������������������@�@�@��������ð™��âr��ï‘��{��•��ân��‡ö��Ge��G��‘š��‘���`z��â��»S��Â3��Üx��–Æ��Žò��'��•��ŠÚ��uí��í��ºa��X��QÄ��¾Ã��ð��j˜��` ��$–��"��/1��im��ê��·½��àé��Ù�� a�� }��iÅ��ê��yÐ��â��Õ��/ �� —��09��ië  /\\\///\·\\\323\\·2J2·\\323//\·\  /\\\/����ç |cçfVØÌ�£üêbêØßç¶^O����������������������������������������^iÎeØ @£@Š�£^rç£çb^Ý}@s����������������������������������������çççççç�£0c0ú¾Ž¾J¾×�������������������������������������������ªø¼·’³ôiÞÐ�@÷�����]:þ�ïó•�±ö ��Žî�����;ä‚ÕHk®F=�@µ�����}Œn�™�ç‡��^˜�����N,�¬ú´�<F�#¦��€¶Gˆr��i© ³��Ap)iý��@‘0t»@��}›pð·��Øök !��^ Ã��Ø/@ç¾��âK}�� —ˆ��@:‰ç€��@Úã}ý������R98������0100���� ������������† ��� ���Œ �������������– ������ž ��(�������2����¦ ������º �������������SONY��DSC-F828��H������H������2003:12:18 13:51:33�<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Sony.pmp��������������������������������������������������������������000644 �000765 �000024 �00000000567 11361171504 017550� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����|���û���� €à���� ��������€à��������������������������!�÷b 9��b 9����������$˜€�€�€�€�ÿÿÿÿÿÿ������ÿØÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�����������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Torrent.torrent�������������������������������������������������������000644 �000765 �000024 �00000001505 12212372747 021157� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������d8:announce35:udp://tracker.bogus.com:80/announce13:announce-listll35:udp://tracker.bogus.com:80/announce36:udp://tracker.bogus2.com:80/announce36:udp://tracker.bogus3.com:80/announceee7:comment32:Test BitTorrent description file10:created by13:uTorrent/184013:creation datei1378481639e8:encoding5:UTF-84:infod5:filesld6:lengthi3700748e4:pathl17:exiftool-9.35.zipeed6:lengthi3662939e4:pathl26:Image-ExifTool-9.35.tar.gzeed6:lengthi2394706e4:pathl17:ExifTool-9.35.dmgeed6:lengthi10848e4:pathl4:docs6:READMEeee4:name19:Image-ExifTool-9.3512:piece lengthi1048576e6:pieces200:¦æ‡[ûš'§OïÕãtš=ÙÖà£aPœÿ"÷á5!“S®:f¹8—Îɯg²æO¹Žké KÝ|á[^åÒâY•Sæ ׌öhò¬/î×èáˆÙ$e 1›4¨á›€§HXg(縵«aL72‰UâðD©â”§ôdUZ&±³Q:ƒ¹XµÞ|y³²x¼ØiCKîÏŽz–#ñö‘»=W¬8Bƒ;šòÅz¡Š]ù#âˆzêçœödº­Âú$2ÆrVþ@l¢De8:url-listl22:http://seed.bogus.com/23:http://seed.bogus2.com/ee�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Unknown.jpg�����������������������������������������������������������000644 �000765 �000024 �00000016037 10444543301 020241� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿá"Exif��II*���� �� ���ž�������ª�������²��������������º�������Â���(�������1����Ê���2����Þ����������i‡����,��¥Ä�:���ò��� �� �Rollei��dk4010��H������H������RO-dk4010 Ver 1.00 �2005:08:10 06:24:38�PrintIM�0250��������������ÿ���ƒ���ƒ���ƒ���#�š‚����Ö��‚����Þ��"ˆ�������'ˆ����}��������0220����æ������ú��‘�����‘������’ ������’������’ ����&��’����.��’������� ’������� ’����6��|’�´��>��†’�ˆ���ò��’����331�‘’����331�’’����331�� ����0100 ������� ����à�� ����¨�� ����‚��¤��������¤��������¤��������¤����z��¤��������¤�������¤�������� ¤�������� ¤������������ �������� ���2005:08:10 06:24:38�2005:08:10 06:24:38�(��� �����d���J��d������� ���,��d���:�� ���Rollei ������ ���<��������P��������D����� ��8 �� ��@���,��A���DM0000037036����������������AE ^ �k����MULTIoo/������������     ���������������������������������������%()*$(!'&0)+ )*!/'#&$.)$(!&",$# #& !.*! ! " */%! !""!(&. "#(! !/!"&#$!&** #%',/) $#*&%#% #0-#"$'%$$"'!!$#&$$"(' "'"$%"! , #!!#+* Vccc�Ô�\C˜q•������������������������������������������������������������������������������������������������������������������������AFÿÿ�Ûÿÿgò�rá�ýH��î �ŸÍ�~4��"� †�ˆ��ÛÛÛ÷÷Í¿ÿÿ�ÿÿù™�@ �î �ŸW�gò�1Ø �ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅK�Ð`�ŸÍ�Šf�rá�|¡�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ;��^3��?9��"D��ýH��~4��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿé��÷��÷��é��Û��Í��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ����ÌÿÿR7�A:�ÀB��$¸ �àô�.��àààÑÑååÿÿ$¸ �C­� �R7�Ê-�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàô�ú� 1�A:�}¥�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´/��/B��­A��ÀB��.��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑ��Ö��Û��à��å��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÝÝÿ�ÿ8���nP_ �ÿÿ“T��€�œ‘��ZX÷€½EÕSw­{¹ûAŠÑO}{(”·¶AFÿÿ�ÝÿÿE�`¨$�4R��:U�¿` �!��ù�h6�X��ÞÞÞÁÿÿWB�|���ãÿÿÿ<��d���CÿÿÿÄ­�„������(� ���„��;�n��������������������������������������������������2��ÿÿ�ÿÿ��a?8��Ë��­ðÿÿ¿���j��ÄŠd6��Tÿÿ=ÿÿB��~ÿÿKÿÿJ��¯��äþÿL��b��Yþÿ2��f��6ÿÿ��åÿÿ„ÿÿ��úÿÿÚÿÿ ��ðÿÿÄÿÿ ?��ÿÿÿÝÿÿ�#����‡ÿÿ��Ùÿÿ—ÿÿ����Èÿÿ ��æÿÿÅÿÿ )��N��ÿÿ?��É��hÿÿ !��Õÿÿ:ÿÿ8��œÿÿ(ÿÿ ��äÿÿ¦ÿÿo��$ÿÿªþÿG��.��—þÿR��J�Üþÿ ��,��–ÿÿ ��ýÿÿçÿÿ ��ñÿÿÍÿÿ $��ðÿÿ³ÿÿ'����¼ÿÿ����âÿÿ ��7��æÿÿ ����Àÿÿ%��R��ÀÿÿF��€��ÓþÿM��ƒ��«þÿ(��¥ÿÿÿÿ��âÿÿ±ÿÿk��õþÿÝþÿ ?��¢ÿÿÿÿ/��[�� ÿÿ;��–��/ÿÿ ��ÿÿÿØÿÿ ��íÿÿÐÿÿ �� ��êÿÿ $�� ��ÿÿ#����Kÿÿ��:��Çÿÿ !��)��qÿÿ�� ��ºÿÿ!��íÿÿwÿÿ3��H��Pÿÿ��Úÿÿµÿÿ��Ýÿÿ·ÿÿc��Øþÿ ÿÿ F��pÿÿÿÿ5��ûÿÿæþÿD��Á��/ÿÿ ��)��Óÿÿ ��éÿÿÚÿÿ ��ñÿÿÝÿÿ ��éÿÿ±ÿÿ��ìÿÿœÿÿ��âÿÿ¤ÿÿ��êÿÿaÿÿ ��?��Æÿÿ���&��Þÿÿ '��q��×ÿÿ ��þÿÿÍÿÿ ��èÿÿÄÿÿ <��àÿÿLÿÿ#��äÿÿnÿÿ+����%ÿÿX��Ä��„ÿÿ 4��Ð��Fÿÿ ��éÿÿßÿÿ ��òÿÿ¼ÿÿ��Çÿÿiÿÿ��ìÿÿ¢ÿÿ��ùÿÿ­ÿÿ��üÿÿºÿÿ!��W��ºÿÿ1����âþÿ'��Û��þÿÿ.����óÿÿ��üÿÿ–ÿÿ9��ÞÿÿZÿÿ%��øÿÿrÿÿ*��V��`ÿÿ_�� ��oÿÿN��5�eÿÿ ����Šÿÿ)��¹ÿÿVÿÿ&��àÿÿ?ÿÿ#��ÛÿÿQÿÿ$��Îÿÿ3ÿÿ+��Áÿÿñþÿ&��I��sÿÿ��ýÿÿ¼ÿÿ��x��äÿÿ ,��L��×ÿÿ�'��(��yÿÿ%��ûÿÿ€ÿÿ��0��¹ÿÿ��q��Ìÿÿ K��p��qÿÿo��«��Öÿÿ�5��Ÿ��¼ÿÿ����� *��j��tÿÿ(��œÿÿ<ÿÿ��Ôÿÿÿÿ����£ÿÿ*��$��Sÿÿ+����Zÿÿ%��c��¸ÿÿ+��Ö��Ýÿÿ ��]��Éÿÿ���W��¥ÿÿ+��P��Wÿÿ����Óÿÿ D��­��œÿÿ:��U��Ôÿÿ�c��_�æÿÿ�%��ñ�=��&��J�õÿÿ��ïÿÿ“ÿÿ��îÿÿœÿÿ��óÿÿŽÿÿ��Ýÿÿeÿÿ+��a��ÿÿ-��…��¬ÿÿD��©�ÿÿÿ)��%�����E��Òÿÿ ��>��Õÿÿ ��òÿÿëÿÿ *����±ÿÿ����Êÿÿ h��Ë��Êÿÿ�*��%�:��,��ú�������©ÿÿ��áÿÿ¤ÿÿ��åÿÿÿÿ$��àÿÿ^ÿÿ%��=��~ÿÿ<��±��’ÿÿ/�� ���1��è�������P��ºÿÿ(��ì��ÿÿÿ��J��ðÿÿ ����ñÿÿ ����Ðÿÿ :��ÿ��’ÿÿ N��=�ßÿÿL��:�íÿÿ��äÿÿÒÿÿ ��üÿÿ„ÿÿ&��Ïÿÿ&ÿÿ/��t��:ÿÿ"��E��¢ÿÿ��'��±ÿÿ$��¥��Ðÿÿ��@��Ìÿÿ ��`��òÿÿ "��­��ûÿÿ4��������\��ùÿÿ ����ðÿÿ @����òÿÿW��‹�»ÿÿ j��*� ���I��+��Äÿÿ���!��ßÿÿ %��Y��›ÿÿ4��r��Zÿÿ-��©��ÅÿÿK�����)ÿÿ:��ª��•ÿÿ5��³ÿÿÿÿ��8��¸ÿÿ-��¯��ýÿÿ5��Ç����$��S�������*��ðÿÿ 1��ö��ñÿÿq��6�öÿÿ Z��ð�� ���.��ãÿÿçÿÿ��#��¶ÿÿ"��¨��Ìÿÿ+��÷ÿÿDÿÿ2��v��–ÿÿ ��öÿÿtÿÿA��‹��eÿÿ5��Þÿÿÿþÿ1��ëÿÿVÿÿ$�� ��þÿÿ3��{�������n��ûÿÿ��9��þÿÿ ��“���� ,��˜��öÿÿ;��1��õÿÿ#�� ��Þÿÿ���(��Àÿÿ#��%��‡ÿÿ*��„��oÿÿ(��¥��oÿÿ��h��Äÿÿ 3��]��Áÿÿ�.��]��uÿÿ9��¾ÿÿÿÿ2��¨��Úÿÿ0��H�������0��¸ÿÿ��L��ìÿÿ �����-��(�÷ÿÿE��»��ìÿÿ;��4��àÿÿ�(��§��—ÿÿ&��–��¥ÿÿ-��Ä��…ÿÿ =�� ��]ÿÿ#��¬��Êÿÿ$��#��Ãÿÿ�,��G��·ÿÿ2��éÿÿnÿÿ6��¿��×ÿÿ+��¦��óÿÿ'��N��Ôÿÿ���<��øÿÿ���}��÷ÿÿ��±��ñÿÿ '��‹��ïÿÿX�� �ìÿÿ���v��ßÿÿ ��e��®ÿÿ&��‚��sÿÿ0����ÿÿ��üÿÿŠÿÿ��éÿÿ²ÿÿ��w��Ýÿÿ(��‹��èÿÿ'��h��òÿÿ"��ÿÿÿ©ÿÿ��éÿÿÓÿÿ ��÷ÿÿÜÿÿ ,��ðÿÿøÿÿ ����÷ÿÿ ��W��ïÿÿ S��É��æÿÿ�N��†��Òÿÿ&��æÿÿ6ÿÿ��8��–ÿÿ��=��‡ÿÿ$��b��‡ÿÿ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �SDSD512�€������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��� ���������R98������0100����������������î������ö��(�����������þ�������������H������H������<Dummy thumbnail image data>ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/VCard.ics�������������������������������������������������������������000644 �000765 �000024 �00000004315 12521662022 017573� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN:VCALENDAR CALSCALE:GREGORIAN VERSION:2.0 METHOD:PUBLISH X-WR-CALNAME:Calendar X-WR-TIMEZONE:America/Toronto X-APPLE-CALENDAR-COLOR:#CC73E1 BEGIN:VTIMEZONE TZID:Canada/Eastern BEGIN:DAYLIGHT TZOFFSETFROM:-0500 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU DTSTART:20070311T020000 TZNAME:EDT TZOFFSETTO:-0400 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU DTSTART:20071104T020000 TZNAME:EST TZOFFSETTO:-0500 END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:America/Toronto BEGIN:DAYLIGHT TZOFFSETFROM:-0500 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU DTSTART:20070311T020000 TZNAME:EDT TZOFFSETTO:-0400 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU DTSTART:20071104T020000 TZNAME:EST TZOFFSETTO:-0500 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20120807T152746Z UID:5E9B5BEF-C3D9-452C-AB1A-613510B5BA52 RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO;WKST=SU DTEND;TZID=Canada/Eastern:20130916T133000 EXDATE;TZID=Canada/Eastern:20141201T123000 EXDATE;TZID=Canada/Eastern:20150427T123000 TRANSP:OPAQUE SUMMARY:Group meeting DTSTART;TZID=Canada/Eastern:20130916T123000 DTSTAMP:20150420T155518Z LOCATION:261 SEQUENCE:0 BEGIN:VALARM X-WR-ALARMUID:C41775A2-C98F-456C-BB8F-8E6FB15A554F UID:C41775A2-C98F-456C-BB8F-8E6FB15A554F TRIGGER:-PT5M ATTACH;VALUE=URI:Basso X-APPLE-LOCAL-DEFAULT-ALARM:TRUE ACTION:AUDIO X-APPLE-DEFAULT-ALARM:TRUE END:VALARM BEGIN:VALARM X-WR-ALARMUID:70894F68-E6F8-4C00-A737-73D4CDCF0525 UID:70894F68-E6F8-4C00-A737-73D4CDCF0525 TRIGGER:-PT5M X-APPLE-DEFAULT-ALARM:TRUE ATTACH;VALUE=URI:Basso ACTION:AUDIO END:VALARM END:VEVENT BEGIN:VEVENT CREATED:20120807T152746Z UID:5E9B5BEF-C3D9-452C-AB1A-613510B5BA52 DTEND;TZID=Canada/Eastern:20131125T133000 TRANSP:OPAQUE SUMMARY:Group meeting DTSTART;TZID=Canada/Eastern:20131125T123000 DTSTAMP:20150408T142941Z LOCATION:501 SEQUENCE:0 RECURRENCE-ID;TZID=Canada/Eastern:20131125T123000 BEGIN:VALARM X-WR-ALARMUID:C514D9BB-BDB3-4A5F-B580-9287459DA35C UID:C514D9BB-BDB3-4A5F-B580-9287459DA35C TRIGGER:-PT5M ATTACH;VALUE=URI:Basso X-APPLE-LOCAL-DEFAULT-ALARM:TRUE ACTION:AUDIO X-APPLE-DEFAULT-ALARM:TRUE END:VALARM END:VEVENT END:VCALENDAR �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/VCard.vcf�������������������������������������������������������������000644 �000765 �000024 �00000003231 12510735527 017600� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEGIN:VCARD VERSION:3.0 PRODID:-//Apple Inc.//Mac OS X 10.10.2//EN N:Harvey;Phil;;; FN:Phil Harvey ORG:ExifTool; EMAIL;type=INTERNET;type=HOME;type=pref:someone@home.email EMAIL;type=INTERNET;type=WORK:someone@work.email item1.EMAIL;type=INTERNET:someone@other.email item1.X-ABLabel:_$!<Other>!$_ TEL;type=CELL;type=VOICE;type=pref:555-0000 TEL;type=IPHONE;type=CELL;type=VOICE:555-1111 TEL;type=HOME;type=VOICE:555-2222 TEL;type=WORK;type=VOICE:555-3333 TEL;type=MAIN:555-4444 TEL;type=WORK;type=FAX:555-5555 TEL;type=PAGER:555-6666 TEL;type=OTHER;type=VOICE:555-7777 TEL;type=OTHER;type=VOICE:555-8888 ADR;type=HOME;type=pref:;;Home St.;City;ON;K0K0K0;Canada ADR;type=WORK:;;Work St.;City;ON;K0K0K0;Canada ADR;type=OTHER;GEO="geo:12.3457,78.910";LABEL=Test\nLabel:;;Other Rd.;City;ON;K0K0K0;Canada NOTE:This is "a"\, comma\, \\backslash\nnewline\nnote! NOTE;LANGUAGE=fr:Oui! item2.URL;type=pref:http://exiftool.com item2.X-ABLabel:_$!<HomePage>!$_ BDAY:1900-01-02 X-AIM;type=HOME;type=pref:AIMName item3.X-ICQ;type=pref:ICQName item3.X-ABLabel:_$!<Other>!$_ IMPP;X-SERVICE-TYPE=AIM;type=HOME;type=pref:aim:AIMName IMPP;X-SERVICE-TYPE=Facebook;type=WORK:xmpp:FacebookName item4.IMPP;X-SERVICE-TYPE=ICQ:aim:ICQName item4.X-ABLabel:_$!<Other>!$_ PHOTO;ENCODING=b;TYPE=JPEG:PGR1bW15IGltYWdlIGRhdGE+ X-ABUID:EBAC8BE8-E695-457F-AE4D-E076ECEEA002:ABPerson END:VCARD BEGIN:VCARD VERSION:3.0 fn:VCard Test LABEL;WORK;ENCODING=QUOTED-PRINTABLE:12 Cucumber St.=0D=0ASaladVille ON=0D=0ACanada LOGO:data:image/jpeg;base64,PGR1bW15IGltYWdlIGRhdGE+ SOUND;OGG:http://example.com/sound.ogg note:This sample mixes formats from various vCard versions END:VCARD �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Vorbis.ogg������������������������������������������������������������000644 �000765 �000024 �00000012373 10525236027 020045� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������OggS���������ÈG������ø.jvorbis����"V�������}������ªOggS����������ÈG�����¬ç»‚ÿÿÿÿÿÿÿÿ’ÿÿÿÿÿÿÿÿvorbis8���AO; aoTuV b4b [20051117] (based on Xiph.Org's libVorbis) ������COVERARTMIME=image/jpeg��COVERART=/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAHgAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEAsLCwwLEAwMEBcPDQ8XGxQQEBQbHxcXFxcXHx4XGhoaGhceHiMlJyUjHi8vMzMvL0BAQEBAQEBAQEBAQEBAQAERDw8RExEVEhIVFBEUERQaFBYWFBomGhocGhomMCMeHh4eIzArLicnJy4rNTUwMDU1QEA/QEBAQEBAQEBAQEBA/8AAEQgAUABQAwEiAAIRAQMRAf/EAIQAAAIDAQEBAAAAAAAAAAAAAAAFAQMGBAIHAQEBAQEAAAAAAAAAAAAAAAAAAgEDEAACAQQAAwUHBAIDAAAAAAABAgMAEQQFITESQWGBIgZRcZGhscET4TJictEUgpKiEQACAQMCBQUBAAAAAAAAAAAAAQIRIUExQlFxgYIDYbHBMkNy/9oADAMBAAIRAxEAPwD6BRRUMyqpZiAoFyTwAAoCaKgEEXHEHkamgCiiigCiiooCaKgEEAg3B4gipoArKeqNlPlZKaPB4vIQJrdpPJL+wc2rS5U642NLkP8AthRnP/EXrMejsVsnJytvP5pCxRG/m/mkPzFVHMuBMsLiP8KGPUayOLJyOpIFs80hsBc8hfs7BXaCCAQbg8QRWR9STz7Tbw6TGNlQj8h7OsjqJPci/etLDHj63CSIMRDAoUFjcmjVk3qzU70wjqopOdpm5DEYkPlHbYsfHsFA2mbjsBlw+U9tip8Ow1Jo3JAFzwA5mufJjXNw2SKSwkHldTwP6e2pcQ5+Iyq145Ra44EH9KV6aaTGypNdN7SU/sOdveONXGNU5J3jenoRJ3SatK1T1pcySORtdkcHS/4793NfuKdUj3sRgyIc6Lg1wGP8l4r8qcxSLLEkq/tdQw8Ret8iTpNbteZkG1WL26chZ6ocpossrzIQeDOqn61X6SjVNFAw5yNIze/rZfotXepY2l0eWq8wqt4I6ufpVHpCZZNHEg5wu6N7y3X9GqdncVv6Cv0sP9ne5+Y/mI6yp9hkf/ApxtmabKgxAbA2J97G3ypN6cb/AE/UmdhPw/J1hO8o3Uv/AJuac7dHiyIcxBcLYH3qeofGk9eghp1J3O4wfTetWeVGZCwjiiS3U7EE8z3C5NGl3OD6k1zzxRsqhjFJG9upWAB4Edx4GrNrqMH1Br1x8xXEbFZEZT0ujW5i4I5EjiKNTqMHQYDY2GrmMEyOzHqkdrczYAchbgKkop1JaHLnxCbgXPipt86q2g/Bt8adeHV0Fu+zdJ+VXahHlyJsxhYNcD3seo/Cqdofz7jHgXj0dAbxPUflXTxfZ/y6nPy/Vc1Q7d2gfXSHtQqw+IH3r1p369dCTzAK/BiK87twuukHa5VR/wBgftXrToU1sIPMgt8WJFPy7/gfr2fJ1zRJNC8Li6SKUYdzCxrJelZ3120ydPkmxc+S/AF09n9l41sKzHqvUysU2+FcTwWMvTzsvFXHev091THKeSpYawU+qsOfDzYd5icCpUSn2MvBSe5h5T+taXEnXOw4p2jKCVQxjkHEH3GqtZPLna6KXMh/G8i+eNgLN/K3sPPjXbRu1Hg1K9eIUUUVJpTNIuLjPIqXWMFuhBSrS48k+RJsZ+bEhO8nmR3DlTqqMqRsbEd4I+ooPKg4AeHdVxlROKV5WqTKN1J6RvQVbyY5GRDgRcWuC39m4L8BTqKNYokiX9qKFHgLUp02DIXbPybmSS5jvz83NvGnNb5GlSC268zIJusnu9gooormWFFFFAFFFFAFFFFARU0UUB//2Q==#���MEDIAJUKEBOX:TOOL NAME=Media Center"���MEDIAJUKEBOX:TOOL VERSION=11.1.197 ���GENRE=Funk���MEDIAJUKEBOX:DATE=38718 ���DATE=20060���TITLE=A 4s sample for testing embedded cover art ���TRACKNUMBER=1���COMMENT=a nice comment���ARTIST=Who Knows���ALBUM=The Test AlbumvorbisBCV���€ Æ€ÐU����BˆFÆP§”—‚…GÄP‡óPjé xJaɘôkBß{Ͻ÷Þ{ 4d���@bà1 B¡Å Qœ)Ba9 –r: B÷ „.çÞrî½÷ Y���0!„B!„B )¥RŠ)¦˜bÊ1ÇsÌ1È ƒ :褓N2©¤“Ž2ɨ£ÔZJ-ÅSl¹ÅXk­5çÜkPÊcŒ1ÆcŒ1ÆcŒ1ÆBCV� ��„AdB!…RŠ)¦sÌ1Ç€ÐU�� �€����G‘ɑɑ$I²$KÒ$Ïò,Ïò,O5QSEUuUÛµ}Û—}ÛwuÙ·}ÙvuY—eYwm[—uW×u]×u]×u]×u]×u]×u 4d� � #9Ž#9Ž#9’#)’„†¬�d���à(Žâ8’#9–cI–¤IšåYžåiž&j¢„†¬�������� (Šâ(Ž#I–¥išç©ž(Цªª¢iªªªš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš¦iš@hÈ*�@�@ÇqÇQÇqÉ‘$  Y�È���ÀPG‘˱$ÍÒ,Ïò4Ñ3=W”MÝÔU Y��������ÀñÏñOò$ÏòÏñ$OÒ4MÓ4MÓ4MÓ4MÓ4MÓ4MÓ4MÓ4MÓ4MÓ4MÓ4MÓ4MÓ4MÓ4MӀЕ����bHƒÌQh ‹1')cŒ1Æã)ñ ¤V‹¨DdR+š1)xND¦”£`Jq¡cЊÌEÇTR.¶cŒïÅBCV�¡�Ç$M$M�������Éó�O4M4������@ò<@E@E��������������������������������������������������������������������$Ï<Ó<Ó�������Í4QtÓU������@3M@tMÀT]��������������������������������������������������������������������$Ï<Ó<Ó�������Í4ÓUÑt������@3MÀT]@tE�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������B¡!+€8�������������������������������������������������������������������������������� 8��˜P Y�Ä �Dz��À±,Í��Dz, ��,ËE��°,K������������������������������������������������������������������ 8��˜P Y �D�Có�–°,€¦4 ày�ψ"���Pà��`ƒ¦Äâ�…†¬�¢�� ŠbY–åyÐ4Mó<hš¦y4ÍóDšæy¢Oô<Ó„çyžiÂ4EÑ4(š¦��€�€�4%(4d%��`PËÒ4Ïó<Q4MU…¦yž(Š¢išªªÂ²<OEÑ4UUU¡iž'Š¢hšªêºÐ4ÏEQ4MUu]xž(š¦iªªëº.<OMÓ4UÕu]¢(Цišªêº² LÓ4MSU]W–(š¦ªº®,Ë2EÓTUוeÙ¦iªªêº²,Û�ÓTUוeÛ¨ªëʲ,Û6@U]וe[·®ëº²,Û¶ÀueÙ–m[�OggS���������ÈG�����ï'°ÿÿÿÛ�À�@€t’Qe6špá(4dE���£”bJƨ””JØ”’J©¤¤”R*„ÔZ ¡‚’ZK¡d”RJ-¶ J*¥ÅXIH¥¤ ��;p��;° Y �ä��Ä(ŘsÎI)sÎA¥”Š9çtRJÆœƒB)%cÎAè ”Ò9!„Rê„B))…B¡¤”J !„RJ%•B))¥”B¡”�€ ��lÙœ`$¨Ð•�@*�€Áq4MÓ4ËóLÓ’,Ïó<ÏóDÓÔ,Ëó<Ïó<Ï4yžç‰ž(Цi=ÏEÏEÓ䪞'Š¢hšªÉ•=O4EQUUžçy¦èÊ® ÏóDÓt]Ù†,‹¢ªbƒm›¦«º¶mU•e[¶màʲ+Û¶-��<Á�¨À†ÕNŠÆ Y �d���† ÄSŠ1†cL)ƘR����L(…†¬�¢���çœsÎ9çœsÎ9çœsÎ9çœsÎ9ÆcŒ1ÆcŒ1ÆcŒ1ÆcŒ1ÆcŒ1ÆcŒ1�;�;B¡!+€p���!„ ¥RJ)¥dJ)%¥”RJ)%SJ) ¥”RJ)%cJ)¥”RJ)“RB)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”RJ)¥”R�€Éƒ�T‚3¬$޲�È ��bÎ1¡µÔZ)©µ–Zë cPJJ%µÒJk-µ:%tPZK©¥’Zj­ƒJj©¥”Rk)µ–R„B )¥ÔR*­µÐRI)¥ÖZJ©•ÖZ)¡„RB¥´’RH©¤”J)!”BI©¤’JJ%¥TB)¡„BH¥¤TJ*©ƒ”J()•”J)©„RR(%¤RJI%¥J*%¥RJ(%¥J)¥¤RJ(%•RJ %•RJJ©”RJ*©¤RJH©”’R)¥”RJJ¡”’J*¥¤PRI¥„RJ*©”RJJ%¥RR*!”RJ )”RR*¥””R ¡”TJ)%¥TJI)…RJ %”TR))•”RJ%•RBJ%¥”RJ)•TJ)©”J)��8��Qi!všqå8¢a ����"d&(€�p€ �Jº „ÒEÅNÜxâ†:´€�����à�À�@Â�DDD3×àð�!1AQaq‘�� ��������€OggS�ˆX�����ÈG�����Ž›«T®���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/Writer.jpg������������������������������������������������������������000644 �000765 �000024 �00000000373 10357011314 020047� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/XMP.inx���������������������������������������������������������������000644 �000765 �000024 �00000014362 11663742160 017273� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?aid style="33" type="document" DOMVersion="5.0" readerVersion="4.0" featureSet="257" product="5.0(458)" ?> <docu InLi="x_0" zero="x_2_U_0_U_0" pacl="o_uaa" DCcp="c_U.S. Web Coated (SWOP) v2" DCrp="c_sRGB IEC61966-2.1" DCci="e_RIcs" DCbi="e_RIcs" DCii="e_RIcs" CSrp="e_CPpp" CScp="e_CPpd" DCsa="b_f" Self="rc_d"> <lang pnam="rk_English: USA" lsqu="k_‘’" ldqu="k_“â€" pril="rk_English" subl="rk_USA" ID="rl_10d" lhyv="c_Proximity" lspv="c_Proximity" Self="rc_u40"/> <colr clmd="e_prss" clsp="e_CMYK" clvl="x_4_D_0_D_0_D_0_D_100" ovrd="e_eOvB" clbs="o_n" atcs="e_nasp" atvl="x_0" pnam="c_Black" edbl="b_f" rmbl="b_f" pvis="b_t" swID="l_1f01" Self="rc_ub"/> <ctbb pvrs="l_0" bbtp="e_bbtc" spcl="y_0" bben="e_eta6" bbmx="x_6_D_1_D_0_D_0_D_1_D_0_D_0" pnam="k_" edbl="b_t" rmbl="b_t" pvis="b_f" swID="l_1f01" Self="rc_u7e"> <pcnt><![CDATA[AAAAAT/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></pcnt> </ctbb> <swch pnam="c_None" edbl="b_f" rmbl="b_f" pvis="b_t" swID="l_1f01" Self="rc_ue"/> <grad grdt="e_axlg" pnam="k_" edbl="b_t" rmbl="b_t" pvis="b_f" swID="l_1f01" Self="rc_u7c"> <gstp gcls="o_u7d" loca="D_0" Self="rc_u7cgstp0"/> </grad> <StSt strT="rk_" pnam="k_Triple~sep~Stroke" Self="rc_dib01a"/> <fFam pnam="c_Times" Self="rc_di3e"> <FonT fFam="c_Times" pnam="c_Times Regular" fPSN="k_Times-Roman" stts="e_fsIn" fSty="c_Regular" fnTp="e_ftTT" WSCR="l_0" fnam="c_Times Roman" fFUN="c_Times Roman" fStN="k_Regular" fPLT="k_" vers="c_6.0d6e5" Self="rc_di3eFonTnTimes Regular"/> </fFam> <Cset pnam="k_Styles for Word/RTF Imported Lists" Self="rc_u236"/> <csty pnam="k_[No character style]" smpt="b_f" Self="rc_u68"/> <cMep Self="rc_dcMep1"> <pcnt><![CDATA[<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.0-c006 1.236519, Wed Jun 14 2006 08:31:24"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmlns:stMfs="http://ns.adobe.com/xap/1.0/sType/ManifestItem#"> <xapMM:InstanceID>beb2441b-dd64-11df-b20e-e65882d9428e</xapMM:InstanceID> <xapMM:DerivedFrom rdf:parseType="Resource"> <stRef:instanceID>f0d208df-dc56-11df-95ac-e273561c7691</stRef:instanceID> <stRef:documentID>adobe:docid:indd:0419e6d7-167b-11df-8afc-dcb7ca988d92</stRef:documentID> </xapMM:DerivedFrom> <xapMM:DocumentID>adobe:docid:indd:f0d208e0-dc56-11df-95ac-e273561c7691</xapMM:DocumentID> <xapMM:RenditionClass>default</xapMM:RenditionClass> <xapMM:Manifest> <rdf:Bag> <rdf:li rdf:parseType="Resource"> <stMfs:linkForm>ReferenceStream</stMfs:linkForm> <stMfs:reference rdf:parseType="Resource"> <stRef:instanceID>uuid:9CC7E7EDDC5811DF8C4BC09357E49DC9</stRef:instanceID> <stRef:documentID>uuid:9CC7E7ECDC5811DF8C4BC09357E49DC9</stRef:documentID> </stMfs:reference> <xapMM:placedXResolution>72.00</xapMM:placedXResolution> <xapMM:placedYResolution>72.00</xapMM:placedYResolution> <xapMM:placedResolutionUnit>Inches</xapMM:placedResolutionUnit> </rdf:li> </rdf:Bag> </xapMM:Manifest> </rdf:Description> <rdf:Description rdf:about="" xmlns:xap="http://ns.adobe.com/xap/1.0/" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"> <xap:CreateDate>2010-10-18T14:59:13Z</xap:CreateDate> <xap:ModifyDate>2010-10-19T22:53:33Z</xap:ModifyDate> <xap:MetadataDate>2010-10-19T22:53:33Z</xap:MetadataDate> <xap:CreatorTool>Adobe InDesign 5.0</xap:CreatorTool> <xap:Thumbnails> <rdf:Alt> <rdf:li rdf:parseType="Resource"> <xapGImg:format>JPEG</xapGImg:format> <xapGImg:width>1024</xapGImg:width> <xapGImg:height>1024</xapGImg:height></xapGImg:image> </rdf:li> </rdf:Alt> </xap:Thumbnails> </rdf:Description> <rdf:Description rdf:about="" xmlns:xapTPg="http://ns.adobe.com/xap/1.0/t/pg/" xmlns:xapG="http://ns.adobe.com/xap/1.0/g/" xmlns:stFnt="http://ns.adobe.com/xap/1.0/sType/Font#"> <xapTPg:Colorants> <rdf:Seq> <rdf:li rdf:parseType="Resource"> <xapG:swatchName>Black</xapG:swatchName> <xapG:mode>CMYK</xapG:mode> <xapG:type>Process</xapG:type> <xapG:cyan>0</xapG:cyan> <xapG:magenta>0</xapG:magenta> <xapG:yellow>0</xapG:yellow> <xapG:black>100</xapG:black> </rdf:li> </rdf:Seq> </xapTPg:Colorants> <xapTPg:Fonts> <rdf:Bag> <rdf:li rdf:parseType="Resource"> <stFnt:fontName>Times-Roman</stFnt:fontName> <stFnt:fontFamily>Times</stFnt:fontFamily> <stFnt:fontFace>Regular</stFnt:fontFace> <stFnt:fontType>TrueType</stFnt:fontType> <stFnt:versionString>Times-Roman6.0d6e5</stFnt:versionString> <stFnt:composite>false</stFnt:composite> <stFnt:fontFileName>Times.dfont</stFnt:fontFileName> </rdf:li> </rdf:li> </rdf:Bag> </xapTPg:Fonts> </rdf:Description> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:format>application/x-indesign</dc:format> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>]]></pcnt> </cMep> <cOpt tlnm="k_Index" tlsl="o_u67" ReIx="b_t" iBkD="b_f" iHEs="b_f" IdxF="e_NtIf" iSHs="b_t" iEiS="b_f" lOst="o_u67" lTws="o_u67" lThs="o_u67" lFst="o_u67" sHst="o_u67" pnSt="o_u68" crSt="o_u68" crTS="o_u68" ftSp="c_ " beSp="c_; " prSp="c_^=" pnSp="c_, " crSp="c_. " eeSp="c_" Self="rc_dcOpt1"/> <layr pnam="c_Layer 2" pvis="b_f" plck="b_t" lcol="e_iRed" iwrp="b_f" sogd="b_t" lkgd="b_f" uilr="b_t" exlr="b_t" prta="b_t" Self="rc_u146"/> </docu> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/XMP.jpg���������������������������������������������������������������000644 �000765 �000024 �00000024112 11510412104 017226� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF��H�H��ÿáRExif��II*���� �����ª���� ���º�������Ã��������������Ó�������Û���(�������1����ã���2����÷���;� ��� ���������˜‚������i‡����4��ì��A witty caption�FUJIFILM�FinePix2400Zoom�H������H������Adobe Photoshop 7.0�2004:02:26 09:36:46�Phil Harvey�Copyright 2004 Phil Harvey����‚����r��"ˆ�������'ˆ����d��������0210����z������Ž��‘�����‘����¢��’ ����ª��’����²��’ ����º��’ ����Â��’����Ê��’������� ’������� ’����Ò��� ����0100 ������� ����d��� ����P���¢����Ú��¢����â��¢�������¢��������£�������£�����������^��d���2001:05:19 18:36:41�2001:05:19 18:36:41���� ���X��d���h��d���È���d�������d���h��d���X��d���í �����í �������������������:������B��(�����������J��������������H������H������ÿá}http://ns.adobe.com/xap/1.0/��<�?�x�p�a�c�k�e�t� �b�e�g�i�n�=�'þÿ�'� �i�d�=�'�W�5�M�0�M�p�C�e�h�i�H�z�r�e�S�z�N�T�c�z�k�c�9�d�'�?�>� �<�?�a�d�o�b�e�-�x�a�p�-�f�i�l�t�e�r�s� �e�s�c�=�"�C�R�"�?�>� �<�x�:�x�m�p�m�e�t�a� �x�m�l�n�s�:�x�=�'�a�d�o�b�e�:�n�s�:�m�e�t�a�/�'� �x�:�x�m�p�t�k�=�'�I�m�a�g�e�:�:�E�x�i�f�T�o�o�l� �4�.�7�3�'�>� �<�r�d�f�:�R�D�F� �x�m�l�n�s�:�r�d�f�=�'�h�t�t�p�:�/�/�w�w�w�.�w�3�.�o�r�g�/�1�9�9�9�/�0�2�/�2�2�-�r�d�f�-�s�y�n�t�a�x�-�n�s�#�'� �x�m�l�n�s�:�i�X�=�'�h�t�t�p�:�/�/�n�s�.�a�d�o�b�e�.�c�o�m�/�i�X�/�1�.�0�/�'�>� � � �<�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n� �a�b�o�u�t�=�'�u�u�i�d�:�8�0�0�5�6�b�6�8�-�1�0�4�5�-�f�a�9�7�-�3�4�0�1�-�6�f�4�e�d�8�4�c�d�5�3�d�'� � � �x�m�l�n�s�:�d�c�=�'�h�t�t�p�:�/�/�p�u�r�l�.�o�r�g�/�d�c�/�e�l�e�m�e�n�t�s�/�1�.�1�/�'�>� � � �<�d�c�:�c�r�e�a�t�o�r�>� � � � �<�r�d�f�:�S�e�q�>� � � � � �<�r�d�f�:�l�i�>�P�h�i�l� �H�a�r�v�e�y�<�/�r�d�f�:�l�i�>� � � � �<�/�r�d�f�:�S�e�q�>� � � �<�/�d�c�:�c�r�e�a�t�o�r�>� � � �<�d�c�:�d�e�s�c�r�i�p�t�i�o�n�>� � � � �<�r�d�f�:�A�l�t�>� � � � � �<�r�d�f�:�l�i� �x�m�l�:�l�a�n�g�=�"�x�-�d�e�f�a�u�l�t�"�>�U�T�F�-�1�6� �(�b�i�g�-�e�n�d�i�a�n�)� �e�n�c�o�d�e�d� �X�M�P�<�/�r�d�f�:�l�i�>� � � � �<�/�r�d�f�:�A�l�t�>� � � �<�/�d�c�:�d�e�s�c�r�i�p�t�i�o�n�>� � � �<�d�c�:�r�i�g�h�t�s�>� � � � �<�r�d�f�:�A�l�t�>� � � � � �<�r�d�f�:�l�i� �x�m�l�:�l�a�n�g�=�"�x�-�d�e�f�a�u�l�t�"�>�C�o�p�y�r�i�g�h�t� �2�0�0�4� �P�h�i�l� �H�a�r�v�e�y�<�/�r�d�f�:�l�i�>� � � � �<�/�r�d�f�:�A�l�t�>� � � �<�/�d�c�:�r�i�g�h�t�s�>� � � �<�d�c�:�s�u�b�j�e�c�t�>� � � � �<�r�d�f�:�B�a�g�>� � � � � �<�r�d�f�:�l�i�>�E�x�i�f�T�o�o�l�<�/�r�d�f�:�l�i�>� � � � � �<�r�d�f�:�l�i�>�T�e�s�t�<�/�r�d�f�:�l�i�>� � � � � �<�r�d�f�:�l�i�>�X�M�P�<�/�r�d�f�:�l�i�>� � � � �<�/�r�d�f�:�B�a�g�>� � � �<�/�d�c�:�s�u�b�j�e�c�t�>� � � �<�d�c�:�t�i�t�l�e�>� � � � �<�r�d�f�:�A�l�t�>� � � � � �<�r�d�f�:�l�i� �x�m�l�:�l�a�n�g�=�"�x�-�d�e�f�a�u�l�t�"�>�T�e�s�t� �I�P�T�C� �p�i�c�t�u�r�e�<�/�r�d�f�:�l�i�>� � � � �<�/�r�d�f�:�A�l�t�>� � � �<�/�d�c�:�t�i�t�l�e�>� � �<�/�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n�>� � � �<�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n� �a�b�o�u�t�=�'�u�u�i�d�:�8�0�0�5�6�b�6�8�-�1�0�4�5�-�f�a�9�7�-�3�4�0�1�-�6�f�4�e�d�8�4�c�d�5�3�d�'� � � �x�m�l�n�s�:�p�h�o�t�o�s�h�o�p�=�'�h�t�t�p�:�/�/�n�s�.�a�d�o�b�e�.�c�o�m�/�p�h�o�t�o�s�h�o�p�/�1�.�0�/�'�>� � � �<�p�h�o�t�o�s�h�o�p�:�A�u�t�h�o�r�s�P�o�s�i�t�i�o�n�>�M�y� �P�o�s�i�t�i�o�n�<�/�p�h�o�t�o�s�h�o�p�:�A�u�t�h�o�r�s�P�o�s�i�t�i�o�n�>� � � �<�p�h�o�t�o�s�h�o�p�:�C�a�p�t�i�o�n�W�r�i�t�e�r�>�I� �w�r�o�t�e� �i�t�<�/�p�h�o�t�o�s�h�o�p�:�C�a�p�t�i�o�n�W�r�i�t�e�r�>� � � �<�p�h�o�t�o�s�h�o�p�:�C�a�t�e�g�o�r�y�>�1�<�/�p�h�o�t�o�s�h�o�p�:�C�a�t�e�g�o�r�y�>� � � �<�p�h�o�t�o�s�h�o�p�:�C�i�t�y�>�K�i�n�g�s�t�o�n�<�/�p�h�o�t�o�s�h�o�p�:�C�i�t�y�>� � � �<�p�h�o�t�o�s�h�o�p�:�C�o�u�n�t�r�y�>�C�a�n�a�d�a�<�/�p�h�o�t�o�s�h�o�p�:�C�o�u�n�t�r�y�>� � � �<�p�h�o�t�o�s�h�o�p�:�C�r�e�d�i�t�>�M�y� �C�r�e�d�i�t�<�/�p�h�o�t�o�s�h�o�p�:�C�r�e�d�i�t�>� � � �<�p�h�o�t�o�s�h�o�p�:�D�a�t�e�C�r�e�a�t�e�d�>�2�0�0�4�-�0�2�-�2�6�<�/�p�h�o�t�o�s�h�o�p�:�D�a�t�e�C�r�e�a�t�e�d�>� � � �<�p�h�o�t�o�s�h�o�p�:�H�e�a�d�l�i�n�e�>�N�o� �h�e�a�d�l�i�n�e�<�/�p�h�o�t�o�s�h�o�p�:�H�e�a�d�l�i�n�e�>� � � �<�p�h�o�t�o�s�h�o�p�:�I�n�s�t�r�u�c�t�i�o�n�s�>�W�h�a�t� �i�n�s�t�r�u�c�t�i�o�n�s�<�/�p�h�o�t�o�s�h�o�p�:�I�n�s�t�r�u�c�t�i�o�n�s�>� � � �<�p�h�o�t�o�s�h�o�p�:�S�o�u�r�c�e�>�I�&�a�p�o�s�;�m� �t�h�e� �s�o�u�r�c�e�<�/�p�h�o�t�o�s�h�o�p�:�S�o�u�r�c�e�>� � � �<�p�h�o�t�o�s�h�o�p�:�S�t�a�t�e�>�O�n�t�<�/�p�h�o�t�o�s�h�o�p�:�S�t�a�t�e�>� � � �<�p�h�o�t�o�s�h�o�p�:�S�u�p�p�l�e�m�e�n�t�a�l�C�a�t�e�g�o�r�i�e�s�>� � � � �<�r�d�f�:�B�a�g�>� � � � � �<�r�d�f�:�l�i�>�a�m�a�z�i�n�g�<�/�r�d�f�:�l�i�>� � � � � �<�r�d�f�:�l�i�>�i�m�a�g�e�<�/�r�d�f�:�l�i�>� � � � � �<�r�d�f�:�l�i�>�u�t�i�l�i�t�i�e�s�<�/�r�d�f�:�l�i�>� � � � �<�/�r�d�f�:�B�a�g�>� � � �<�/�p�h�o�t�o�s�h�o�p�:�S�u�p�p�l�e�m�e�n�t�a�l�C�a�t�e�g�o�r�i�e�s�>� � � �<�p�h�o�t�o�s�h�o�p�:�T�r�a�n�s�m�i�s�s�i�o�n�R�e�f�e�r�e�n�c�e�>�W�h�a�t� �i�s� �a� �t�r�a�n�s�m�i�s�s�i�o�n� �r�e�f�e�r�e�n�c�e�?�<�/�p�h�o�t�o�s�h�o�p�:�T�r�a�n�s�m�i�s�s�i�o�n�R�e�f�e�r�e�n�c�e�>� � � �<�p�h�o�t�o�s�h�o�p�:�U�r�g�e�n�c�y�>�8�<�/�p�h�o�t�o�s�h�o�p�:�U�r�g�e�n�c�y�>� � �<�/�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n�>� � � �<�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n� �a�b�o�u�t�=�'�u�u�i�d�:�8�0�0�5�6�b�6�8�-�1�0�4�5�-�f�a�9�7�-�3�4�0�1�-�6�f�4�e�d�8�4�c�d�5�3�d�'� � � �x�m�l�n�s�:�s�t�J�o�b�=�'�h�t�t�p�:�/�/�n�s�.�a�d�o�b�e�.�c�o�m�/�x�a�p�/�1�.�0�/�s�T�y�p�e�/�J�o�b�#�'� � � �x�m�l�n�s�:�x�a�p�B�J�=�'�h�t�t�p�:�/�/�n�s�.�a�d�o�b�e�.�c�o�m�/�x�a�p�/�1�.�0�/�b�j�/�'�>� � � �<�x�a�p�B�J�:�J�o�b�R�e�f�>� � � � �<�r�d�f�:�B�a�g�>� � � � � �<�r�d�f�:�l�i� �r�d�f�:�p�a�r�s�e�T�y�p�e�=�'�R�e�s�o�u�r�c�e�'�>� � � � � � �<�s�t�J�o�b�:�n�a�m�e�>�M�y� �J�o�b�<�/�s�t�J�o�b�:�n�a�m�e�>� � � � � �<�/�r�d�f�:�l�i�>� � � � �<�/�r�d�f�:�B�a�g�>� � � �<�/�x�a�p�B�J�:�J�o�b�R�e�f�>� � �<�/�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n�>� � � �<�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n� �a�b�o�u�t�=�'�u�u�i�d�:�8�0�0�5�6�b�6�8�-�1�0�4�5�-�f�a�9�7�-�3�4�0�1�-�6�f�4�e�d�8�4�c�d�5�3�d�'� � � �x�m�l�n�s�:�x�a�p�M�M�=�'�h�t�t�p�:�/�/�n�s�.�a�d�o�b�e�.�c�o�m�/�x�a�p�/�1�.�0�/�m�m�/�'�>� � � �<�x�a�p�M�M�:�D�o�c�u�m�e�n�t�I�D�>�a�d�o�b�e�:�d�o�c�i�d�:�p�h�o�t�o�s�h�o�p�:�4�c�c�7�b�8�5�7�-�6�9�d�0�-�1�1�d�8�-�8�a�c�4�-�b�b�5�9�c�9�2�f�0�d�9�a�<�/�x�a�p�M�M�:�D�o�c�u�m�e�n�t�I�D�>� � �<�/�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n�>� � � �<�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n� �a�b�o�u�t�=�'�u�u�i�d�:�8�0�0�5�6�b�6�8�-�1�0�4�5�-�f�a�9�7�-�3�4�0�1�-�6�f�4�e�d�8�4�c�d�5�3�d�'� � � �x�m�l�n�s�:�x�a�p�R�i�g�h�t�s�=�'�h�t�t�p�:�/�/�n�s�.�a�d�o�b�e�.�c�o�m�/�x�a�p�/�1�.�0�/�r�i�g�h�t�s�/�'�>� � � �<�x�a�p�R�i�g�h�t�s�:�M�a�r�k�e�d�>�F�a�l�s�e�<�/�x�a�p�R�i�g�h�t�s�:�M�a�r�k�e�d�>� � � �<�x�a�p�R�i�g�h�t�s�:�W�e�b�S�t�a�t�e�m�e�n�t�>�h�t�t�p�:�/�/�o�w�l�.�p�h�y�.�q�u�e�e�n�s�u�.�c�a�/�~�p�h�i�l�/�e�x�i�f�t�o�o�l�/�<�/�x�a�p�R�i�g�h�t�s�:�W�e�b�S�t�a�t�e�m�e�n�t�>� � �<�/�r�d�f�:�D�e�s�c�r�i�p�t�i�o�n�>� �<�/�r�d�f�:�R�D�F�>� �<�/�x�:�x�m�p�m�e�t�a�>� �<�?�x�p�a�c�k�e�t� �e�n�d�=�'�w�'�?�>ÿâ XICC_PROFILE��� HLino��mntrRGB XYZ Î�� ��1��acspMSFT����IEC sRGB��������������öÖ�����Ó-HP �����������������������������������������������cprt��P���3desc��„���lwtpt��ð���bkpt�����rXYZ�����gXYZ��,���bXYZ��@���dmnd��T���pdmdd��Ä���ˆvued��L���†view��Ô���$lumi��ø���meas�� ���$tech��0��� rTRC��<�� gTRC��<�� bTRC��<�� text����Copyright (c) 1998 Hewlett-Packard Company��desc�������sRGB IEC61966-2.1�����������sRGB IEC61966-2.1��������������������������������������������������XYZ ������óQ����ÌXYZ ����������������XYZ ������o¢��8õ��XYZ ������b™��·…��ÚXYZ ������$ ��„��¶Ïdesc�������IEC http://www.iec.ch�����������IEC http://www.iec.ch����������������������������������������������desc�������.IEC 61966-2.1 Default RGB colour space - sRGB�����������.IEC 61966-2.1 Default RGB colour space - sRGB����������������������desc�������,Reference Viewing Condition in IEC61966-2.1�����������,Reference Viewing Condition in IEC61966-2.1��������������������������view�����¤þ�_.�Ï�íÌ� �\ž���XYZ �����L V�P���Wçmeas����������������������������sig ����CRT curv����������� �����#�(�-�2�7�;�@�E�J�O�T�Y�^�c�h�m�r�w�|��†�‹��•�š�Ÿ�¤�©�®�²�·�¼�Á�Æ�Ë�Ð�Õ�Û�à�å�ë�ð�ö�û %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ� !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<'<e<¤<ã="=a=¡=à> >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O�OIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°�°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿÿî�Adobe�d����ÿÛ�„�''2&&2.&&&&.>55555>DAAAAAADDDDDDDDDDDDDDDDDDDDDDDDDDDDD  &&6& &6D6++6DDDB5BDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDÿÀ���"�ÿÄ�K����������������������������������������������������������������ÿÚ� ��?�³�ÿÙ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/XMP.svg���������������������������������������������������������������000644 �000765 �000024 �00000002572 10776461751 017304� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" standalone="yes"?> <svg width="4in" height="3in" version="1.1" xmlns = 'http://www.w3.org/2000/svg'> <desc xmlns:myfoo="http://example.org/myfoo"> <myfoo:title>This is a financial report</myfoo:title> <myfoo:descr>The global description uses markup from the <myfoo:emph>myfoo</myfoo:emph> namespace.</myfoo:descr> <myfoo:scene><myfoo:what>widget $growth</myfoo:what> <myfoo:contains>$three $graph-bar</myfoo:contains> <myfoo:when>1998 $through 2000</myfoo:when> </myfoo:scene> </desc> <metadata> <rdf:RDF xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs = "http://www.w3.org/2000/01/rdf-schema#" xmlns:dc = "http://purl.org/dc/elements/1.1/" > <rdf:Description about="http://example.org/myfoo" dc:title="MyFoo Financial Report" dc:description="$three $bar $thousands $dollars $from 1998 $through 2000" dc:publisher="Example Organization" dc:date="2000-04-11" dc:format="image/svg+xml" dc:language="en" > <dc:creator> <rdf:Bag> <rdf:li>Irving Bird</rdf:li> <rdf:li>Mary Lambert</rdf:li> </rdf:Bag> </dc:creator> </rdf:Description> </rdf:RDF> </metadata> </svg> ��������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/XMP.xml���������������������������������������������������������������000644 �000765 �000024 �00000013724 11153275664 017302� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version='1.0' encoding='UTF-8'?> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='t/images/Nikon.jpg' xmlns:et='http://ns.exiftool.ca/1.0/' et:toolkit='Image::ExifTool 7.62' xmlns:ExifTool='http://ns.exiftool.ca/ExifTool/1.0/' xmlns:File='http://ns.exiftool.ca/File/1.0/' xmlns:IFD0='http://ns.exiftool.ca/EXIF/IFD0/1.0/' xmlns:ExifIFD='http://ns.exiftool.ca/EXIF/ExifIFD/1.0/' xmlns:Nikon='http://ns.exiftool.ca/MakerNotes/Nikon/1.0/' xmlns:InteropIFD='http://ns.exiftool.ca/EXIF/InteropIFD/1.0/' xmlns:IFD1='http://ns.exiftool.ca/EXIF/IFD1/1.0/' xmlns:EXIF='http://ns.exiftool.ca/EXIF/EXIF/1.0/' xmlns:Composite='http://ns.exiftool.ca/Composite/1.0/'> <ExifTool:ExifToolVersion et:tagid=''>7.62</ExifTool:ExifToolVersion> <File:FileName et:tagid=''>Nikon.jpg</File:FileName> <File:Directory et:tagid=''>t/images</File:Directory> <File:FileSize et:tagid=''>1703 bytes</File:FileSize> <File:FileModifyDate et:tagid=''>2006:01:04 14:02:27-05:00</File:FileModifyDate> <File:FileType et:tagid=''>JPEG</File:FileType> <File:MIMEType et:tagid=''>image/jpeg</File:MIMEType> <File:ExifByteOrder et:tagid=''>Little-endian (Intel, II)</File:ExifByteOrder> <File:ImageWidth et:tagid=''>8</File:ImageWidth> <File:ImageHeight et:tagid=''>8</File:ImageHeight> <File:EncodingProcess et:tagid=''>Baseline DCT, Huffman coding</File:EncodingProcess> <File:BitsPerSample et:tagid=''>8</File:BitsPerSample> <File:ColorComponents et:tagid=''>3</File:ColorComponents> <File:YCbCrSubSampling et:tagid=''>YCbCr4:2:0 (2 2)</File:YCbCrSubSampling> <IFD0:ImageDescription et:tagid='270'> </IFD0:ImageDescription> <IFD0:Make et:tagid='271'>NIKON</IFD0:Make> <IFD0:Model et:tagid='272'>E775</IFD0:Model> <IFD0:Orientation et:tagid='274'>Horizontal (normal)</IFD0:Orientation> <IFD0:XResolution et:tagid='282'>300</IFD0:XResolution> <IFD0:YResolution et:tagid='283'>300</IFD0:YResolution> <IFD0:ResolutionUnit et:tagid='296'>inches</IFD0:ResolutionUnit> <IFD0:Software et:tagid='305'>E775v1.3u</IFD0:Software> <IFD0:ModifyDate et:tagid='306'>2001:08:01 12:57:23</IFD0:ModifyDate> <IFD0:YCbCrPositioning et:tagid='531'>Co-sited</IFD0:YCbCrPositioning> <ExifIFD:ExposureTime et:tagid='33434'>1/213</ExifIFD:ExposureTime> <ExifIFD:FNumber et:tagid='33437'>9.4</ExifIFD:FNumber> <ExifIFD:ExposureProgram et:tagid='34850'>Program AE</ExifIFD:ExposureProgram> <ExifIFD:ISO et:tagid='34855'>100</ExifIFD:ISO> <ExifIFD:ExifVersion et:tagid='36864'>0210</ExifIFD:ExifVersion> <ExifIFD:DateTimeOriginal et:tagid='36867'>2001:08:01 12:57:23</ExifIFD:DateTimeOriginal> <ExifIFD:CreateDate et:tagid='36868'>2001:08:01 12:57:23</ExifIFD:CreateDate> <ExifIFD:ComponentsConfiguration et:tagid='37121'>YCbCr</ExifIFD:ComponentsConfiguration> <ExifIFD:CompressedBitsPerPixel et:tagid='37122'>3</ExifIFD:CompressedBitsPerPixel> <ExifIFD:ExposureCompensation et:tagid='37380'>0</ExifIFD:ExposureCompensation> <ExifIFD:MaxApertureValue et:tagid='37381'>3.4</ExifIFD:MaxApertureValue> <ExifIFD:MeteringMode et:tagid='37383'>Multi-segment</ExifIFD:MeteringMode> <ExifIFD:LightSource et:tagid='37384'>Unknown</ExifIFD:LightSource> <ExifIFD:Flash et:tagid='37385'>No Flash</ExifIFD:Flash> <ExifIFD:FocalLength et:tagid='37386'>8.6 mm</ExifIFD:FocalLength> <ExifIFD:UserComment et:tagid='37510'></ExifIFD:UserComment> <ExifIFD:FlashpixVersion et:tagid='40960'>0100</ExifIFD:FlashpixVersion> <ExifIFD:ColorSpace et:tagid='40961'>sRGB</ExifIFD:ColorSpace> <ExifIFD:ExifImageWidth et:tagid='40962'>1600</ExifIFD:ExifImageWidth> <ExifIFD:ExifImageHeight et:tagid='40963'>1200</ExifIFD:ExifImageHeight> <ExifIFD:FileSource et:tagid='41728'>Digital Camera</ExifIFD:FileSource> <ExifIFD:SceneType et:tagid='41729'>Directly photographed</ExifIFD:SceneType> <Nikon:MakerNoteVersion et:tagid='1'>1.00</Nikon:MakerNoteVersion> <Nikon:ISO et:tagid='2'>0</Nikon:ISO> <Nikon:ColorMode et:tagid='3'>Color</Nikon:ColorMode> <Nikon:Quality et:tagid='4'>Fine</Nikon:Quality> <Nikon:WhiteBalance et:tagid='5'>Auto</Nikon:WhiteBalance> <Nikon:Sharpness et:tagid='6'>Auto</Nikon:Sharpness> <Nikon:FocusMode et:tagid='7'>AF-C</Nikon:FocusMode> <Nikon:FlashSetting et:tagid='8'></Nikon:FlashSetting> <Nikon:ISOSelection et:tagid='15'>Auto</Nikon:ISOSelection> <Nikon:ImageAdjustment et:tagid='128'>Normal</Nikon:ImageAdjustment> <Nikon:AuxiliaryLens et:tagid='130'>Off</Nikon:AuxiliaryLens> <Nikon:ManualFocusDistance et:tagid='133'>inf</Nikon:ManualFocusDistance> <Nikon:DigitalZoom et:tagid='134'>1</Nikon:DigitalZoom> <Nikon:AFAreaMode et:tagid='0'>Single Area</Nikon:AFAreaMode> <Nikon:AFPoint et:tagid='1'>Center</Nikon:AFPoint> <Nikon:AFPointsInFocus et:tagid='2'>(none)</Nikon:AFPointsInFocus> <Nikon:SceneMode et:tagid='143'></Nikon:SceneMode> <Nikon:DataDump et:tagid='16' rdf:datatype='http://www.w3.org/2001/XMLSchema#base64Binary'> ATkAgAFEAAAAAP8BAAAAAAJqGAAAAAAAAjEAAA8wAAAR4wAADwsAAA8LAQAf AArcAE4AAAAABpkFwwSSA3YT/QPrAAAAAA4YHAoAAAAAAAAAAAAAAAALDwAA KAANJAABYjEANhAAFxwYIRwk/1MRURBYMgABHQAE/wA= </Nikon:DataDump> <InteropIFD:InteropIndex et:tagid='1'>R98 - DCF basic file (sRGB)</InteropIFD:InteropIndex> <InteropIFD:InteropVersion et:tagid='2'>0100</InteropIFD:InteropVersion> <IFD1:Compression et:tagid='259'>JPEG (old-style)</IFD1:Compression> <IFD1:XResolution et:tagid='282'>300</IFD1:XResolution> <IFD1:YResolution et:tagid='283'>300</IFD1:YResolution> <IFD1:ResolutionUnit et:tagid='296'>inches</IFD1:ResolutionUnit> <IFD1:ThumbnailOffset et:tagid='513'>1426</IFD1:ThumbnailOffset> <IFD1:ThumbnailLength et:tagid='514'>28</IFD1:ThumbnailLength> <Composite:Aperture et:tagid=''>9.4</Composite:Aperture> <Composite:ImageSize et:tagid=''>8x8</Composite:ImageSize> <Composite:ShutterSpeed et:tagid=''>1/213</Composite:ShutterSpeed> <Composite:ThumbnailImage et:tagid=''>&lt;Dummy thumbnail image data&gt;</Composite:ThumbnailImage> <Composite:FocalLength35efl et:tagid=''>8.6 mm</Composite:FocalLength35efl> <Composite:LightValue et:tagid=''>14.2</Composite:LightValue> </rdf:Description> </rdf:RDF> ��������������������������������������������Image-ExifTool-10.10/t/images/XMP.xmp���������������������������������������������������������������000644 �000765 �000024 �00000007316 11432525724 017301� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1.1-111"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:xap="http://ns.adobe.com/xap/1.0/" xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" exif:ExifVersion="0.2.2.0" exif:FlashpixVersion="0.1.0.0" exif:ColorSpace="1" exif:CompressedBitsPerPixel="3/1" exif:PixelXDimension="1136" exif:PixelYDimension="852" exif:DateTimeOriginal="2005-06-09T20:09:27+02:00" exif:DateTimeDigitized="2005-06-09T20:09:27+02:00" exif:ExposureTime="4/10" exif:FNumber="28/10" exif:ShutterSpeedValue="42/32" exif:ApertureValue="95/32" exif:ExposureBiasValue="-3/3" exif:MaxApertureValue="95/32" exif:MeteringMode="5" exif:FocalLength="5800/1000" exif:FocalPlaneXResolution="2272000/224" exif:FocalPlaneYResolution="1704000/168" exif:FocalPlaneResolutionUnit="2" exif:SensingMethod="2" exif:FileSource="3" exif:CustomRendered="0" exif:ExposureMode="1" exif:WhiteBalance="0" exif:DigitalZoomRatio="2272/2272" exif:SceneCaptureType="0" exif:NativeDigest="36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;CE459FE772DF591DDF5F63CA3F2A087B" tiff:Make="Canon" tiff:Model="Canon DIGITAL IXUS 40" tiff:Orientation="1" tiff:XResolution="1800000/10000" tiff:YResolution="1800000/10000" tiff:ResolutionUnit="2" tiff:YCbCrPositioning="1" tiff:ImageWidth="1136" tiff:ImageLength="852" tiff:NativeDigest="256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;D11E7FC551E751BE9E616260834B2A1D" xap:CreateDate="2005-11-21T17:07:14+01:00" xap:ModifyDate="2005-11-21T17:07:14+01:00" xap:MetadataDate="2005-11-21T17:11:31+01:00" xap:CreatorTool="Adobe Photoshop CS2 Windows" xap:Rating="1" xapMM:DocumentID="uuid:7A9636BAA85ADA11B611C7FA524F1F71" xapMM:InstanceID="uuid:7B9636BAA85ADA11B611C7FA524F1F71" dc:format="image/jpeg" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB IEC61966-2.1" photoshop:History=""> <dc:rights> <rdf:Alt> <rdf:li xml:lang='x-default'>© Copyright Phil Harvey</rdf:li> <rdf:li xml:lang='fr'>© Droit d'auteur Phil Harvey</rdf:li> </rdf:Alt> </dc:rights> <dc:subject> <rdf:Bag> <rdf:li>test1</rdf:li> <rdf:li>&amp;-<![CDATA[&amp;]]>-&amp;</rdf:li> </rdf:Bag> </dc:subject> <exif:ComponentsConfiguration> <rdf:Seq> <rdf:li>1</rdf:li> <rdf:li>2</rdf:li> <rdf:li>3</rdf:li> <rdf:li>0</rdf:li> </rdf:Seq> </exif:ComponentsConfiguration> <exif:Flash exif:Fired="False" exif:Return="0" exif:Mode="2" exif:Function="False" exif:RedEyeMode="False"/> <tiff:BitsPerSample> <rdf:Seq> <rdf:li>8</rdf:li> <rdf:li>8</rdf:li> <rdf:li>8</rdf:li> </rdf:Seq> </tiff:BitsPerSample> <xapMM:DerivedFrom stRef:instanceID="adobe:docid:photoshop:f481cc67-d8f5-11d9-a31e-a1606d941d83" stRef:documentID="adobe:docid:photoshop:f481cc67-d8f5-11d9-a31e-a1606d941d83"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/XMP2.xmp��������������������������������������������������������������000644 �000765 �000024 �00000001572 10476036300 017353� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xpacket begin="" id="testing"?><x:xmpmeta xmlns:x="adobe:ns:meta/"><rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:aux="http://ns.adobe.com/exif/1.0/aux/"> <rdf:Description rdf:nodeID="anon0"> <aux:Lens>18.0 - 55.0mm</aux:Lens> <aux:SerialNumber>0123456789</aux:SerialNumber> </rdf:Description> <rdf:Description rdf:nodeID="anon1"> <tiff:ImageLength>2048</tiff:ImageLength> <tiff:ImageWidth>3072</tiff:ImageWidth> </rdf:Description> <rdf:Bag rdf:nodeID="anon2"> <rdf:li>ExifTool</rdf:li> <rdf:li>XMP</rdf:li> <rdf:li>nodeID</rdf:li> <rdf:li>test</rdf:li> </rdf:Bag> <rdf:Description rdf:about="" dc:title="XMP nodeID test (XMP written by f-spot)"> <dc:subject rdf:nodeID="anon2" /> </rdf:Description> </rdf:RDF> </x:xmpmeta><?xpacket end="r"?>��������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/XMP3.xmp��������������������������������������������������������������000644 �000765 �000024 �00000004355 12375365751 017375� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 6.32'> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dd="http://purl.org/dc/elements/1.1/" xmlns:ph="http://owl.phy.queensu.ca/ph/1.0/" xmlns:xxx="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/" xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/" xmlns:stMfs='http://ns.adobe.com/xap/1.0/sType/ManifestItem#' xmlns:stRef='http://ns.adobe.com/xap/1.0/sType/ResourceRef#' xmlns:xmpMM='http://ns.adobe.com/xap/1.0/mm/' xmlns:cc='http://creativecommons.org/ns#'> <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar" dd:title="ExifTool common node, nonstandard namespace prefix, and bad list type tests"> <dd:creator> <rdf:Bag> <rdf:li>bad_list_type_A</rdf:li> <rdf:li>bad_list_type_B</rdf:li> </rdf:Bag> </dd:creator> <ph:supervisor> <rdf:Description rdf:nodeID="abc" ph:food="cookies"> <ph:exclamation>doh!</ph:exclamation> </rdf:Description> </ph:supervisor> <ph:programmer> <rdf:Description rdf:nodeID="abc"> <ph:state>confusion</ph:state> </rdf:Description> </ph:programmer> <ph:tester rdf:nodeID="abc"/> <xxx:CountryCode>CA</xxx:CountryCode> <xxx:Scene> <rdf:Bag> <rdf:li>scene1</rdf:li> </rdf:Bag> </xxx:Scene> <pdfx:Customↂ0020Propertyↂ00201>a custom property value</pdfx:Customↂ0020Propertyↂ00201> <pdfx:Customↂ0020Propertyↂ00202>some other value</pdfx:Customↂ0020Propertyↂ00202> </rdf:Description> <rdf:Description rdf:nodeID="abc" ph:fullName="Phil Harvey"> <ph:homePage rdf:resource="http://owl.phy.queensu.ca/~phil/"/> </rdf:Description> <rdf:Description> <xmpMM:Manifest> <rdf:Seq> <rdf:li rdf:parseType='Resource'> <stMfs:linkForm>EmbedByReference</stMfs:linkForm> <stMfs:reference rdf:parseType='Resource'> <stRef:filePath>C:\some path\file.ext</stRef:filePath> </stMfs:reference> </rdf:li> </rdf:Seq> </xmpMM:Manifest> <cc:attributionName> <rdf:Alt> <rdf:li xml:lang='x-default'>some attr</rdf:li> </rdf:Alt> </cc:attributionName> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/XMP4.xmp��������������������������������������������������������������000644 �000765 �000024 �00000004564 11206262613 017361� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 7.77'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:Iptc4xmpExt='http://iptc.org/std/Iptc4xmpExt/2008-02-29/'> <Iptc4xmpExt:LocationCreated> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <Iptc4xmpExt:City>one</Iptc4xmpExt:City> <Iptc4xmpExt:CountryCode>1</Iptc4xmpExt:CountryCode> </rdf:li> <rdf:li rdf:parseType='Resource'> <Iptc4xmpExt:City>two</Iptc4xmpExt:City> <Iptc4xmpExt:CountryCode>2</Iptc4xmpExt:CountryCode> </rdf:li> <rdf:li rdf:parseType='Resource'> <Iptc4xmpExt:City>three</Iptc4xmpExt:City> </rdf:li> <rdf:li rdf:parseType='Resource'> <Iptc4xmpExt:CountryCode>4</Iptc4xmpExt:CountryCode> </rdf:li> </rdf:Bag> </Iptc4xmpExt:LocationCreated> </rdf:Description> <rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1/'> <dc:contributor> <rdf:Bag> <rdf:li>me</rdf:li> </rdf:Bag> </dc:contributor> <dc:subject> <rdf:Bag> <rdf:li>one</rdf:li> <rdf:li>two</rdf:li> </rdf:Bag> </dc:subject> </rdf:Description> <rdf:Description rdf:about='' xmlns:test='http://ns.test.com/'> <test:StructList2> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <test:Item1>c1-1</test:Item1> <test:Item2>c2-1</test:Item2> </rdf:li> <rdf:li rdf:parseType='Resource'> <test:Item1>c1-2</test:Item1> <test:Item2>c2-2</test:Item2> <test:TestList1> <rdf:Bag> <rdf:li>x1</rdf:li> </rdf:Bag> </test:TestList1> <test:TestList2> <rdf:Bag> <rdf:li>y1</rdf:li> <rdf:li>y2</rdf:li> </rdf:Bag> </test:TestList2> </rdf:li> </rdf:Bag> </test:StructList2> <test:StructList1> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <test:Item1>b1</test:Item1> <test:Item2>b2</test:Item2> </rdf:li> </rdf:Bag> </test:StructList1> <test:BareStruct rdf:parseType='Resource'> <test:Item1>a1</test:Item1> <test:Item2>a2</test:Item2> </test:BareStruct> <test:BareList2> <rdf:Bag> <rdf:li>b1</rdf:li> <rdf:li>b2</rdf:li> </rdf:Bag> </test:BareList2> <test:BareList1> <rdf:Bag> <rdf:li>a1</rdf:li> </rdf:Bag> </test:BareList1> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>��������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/XMP5.xmp��������������������������������������������������������������000644 �000765 �000024 �00000011160 12512210565 017350� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 8.82'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <rdf:Description rdf:about='' xmlns:Iptc4xmpExt='http://iptc.org/std/Iptc4xmpExt/2008-02-29/'> <Iptc4xmpExt:ArtworkOrObject> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <Iptc4xmpExt:AOTitle> <rdf:Alt> <rdf:li xml:lang='x-default'>test</rdf:li> <rdf:li xml:lang='de'>prüfung</rdf:li> <rdf:li xml:lang='fr'>épreuve</rdf:li> </rdf:Alt> </Iptc4xmpExt:AOTitle> </rdf:li> </rdf:Bag> </Iptc4xmpExt:ArtworkOrObject> </rdf:Description> <rdf:Description rdf:about='' xmlns:exif='http://ns.adobe.com/exif/1.0/'> <exif:Flash rdf:parseType='Resource'> <exif:Mode>2</exif:Mode> <exif:Return>0</exif:Return> </exif:Flash> </rdf:Description> <rdf:Description rdf:about='' xmlns:mwg-kw='http://www.metadataworkinggroup.com/schemas/keywords/'> <mwg-kw:Keywords rdf:parseType='Resource'> <mwg-kw:Hierarchy> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <mwg-kw:Children> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <mwg-kw:Keyword>A-2</mwg-kw:Keyword> </rdf:li> </rdf:Bag> </mwg-kw:Children> <mwg-kw:Keyword>A-1</mwg-kw:Keyword> </rdf:li> <rdf:li rdf:parseType='Resource'> <mwg-kw:Children> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <mwg-kw:Keyword>B-2</mwg-kw:Keyword> </rdf:li> </rdf:Bag> </mwg-kw:Children> <mwg-kw:Keyword>B-1</mwg-kw:Keyword> </rdf:li> <rdf:li rdf:parseType='Resource'> <mwg-kw:Keyword>C-1</mwg-kw:Keyword> </rdf:li> </rdf:Bag> </mwg-kw:Hierarchy> </mwg-kw:Keywords> </rdf:Description> <rdf:Description rdf:about='' xmlns:Iptc4xmpExt='http://iptc.org/std/Iptc4xmpExt/2008-02-29/' xmlns:exif='http://ns.adobe.com/exif/1.0/' xmlns:mwg-rs='http://www.metadataworkinggroup.com/schemas/regions/' xmlns:myXMPns='http://ns.exiftool.ca/t/XMP.t' xmlns:rdfs='http://www.w3.org/2000/01/rdf-schema#' xmlns:stArea='http://ns.adobe.com/xmp/sType/Area#' xmlns:xmpRights='http://ns.adobe.com/xap/1.0/rights/'> <mwg-rs:Regions rdf:parseType='Resource'> <mwg-rs:RegionList> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <mwg-rs:Area rdf:parseType='Resource'> <stArea:h>8</stArea:h> <stArea:w>8</stArea:w> <stArea:x>0</stArea:x> <stArea:y>0</stArea:y> </mwg-rs:Area> <mwg-rs:Name>Region 1</mwg-rs:Name> <mwg-rs:Type>Face</mwg-rs:Type> <rdfs:seeAlso rdf:resource='plus:Licensee'/> </rdf:li> <rdf:li rdf:parseType='Resource'> <mwg-rs:Extensions rdf:parseType='Resource'> <Iptc4xmpExt:ArtworkOrObject> <rdf:Bag> <rdf:li rdf:parseType='Resource'> <Iptc4xmpExt:AOTitle> <rdf:Alt> <rdf:li xml:lang='de'>verfänglich</rdf:li> </rdf:Alt> </Iptc4xmpExt:AOTitle> </rdf:li> </rdf:Bag> </Iptc4xmpExt:ArtworkOrObject> <exif:Flash rdf:parseType='Resource'> <exif:Mode>1</exif:Mode> <exif:Return>2</exif:Return> </exif:Flash> <myXMPns:BTestTag rdf:parseType='Resource'> <rdf:type rdf:resource='myXMPns:SomeFunnyType'/> <myXMPns:Field1> <rdf:Bag> <rdf:li> <rdf:Alt> <rdf:li xml:lang='x-default'>this is wild</rdf:li> </rdf:Alt> </rdf:li> </rdf:Bag> </myXMPns:Field1> </myXMPns:BTestTag> <xmpRights:UsageTerms> <rdf:Alt> <rdf:li xml:lang='fr'>libre</rdf:li> </rdf:Alt> </xmpRights:UsageTerms> </mwg-rs:Extensions> </rdf:li> </rdf:Bag> </mwg-rs:RegionList> </mwg-rs:Regions> <myXMPns:BTestTag rdf:parseType='Resource'> <rdf:type rdf:resource='myXMPns:SomeFunnyType'/> <myXMPns:Field1> <rdf:Bag> <rdf:li> <rdf:Alt> <rdf:li xml:lang='en-CA'>eh?</rdf:li> <rdf:li xml:lang='en-US'>huh?</rdf:li> </rdf:Alt> </rdf:li> <rdf:li> <rdf:Alt> <rdf:li xml:lang='en-US'>groovy</rdf:li> <rdf:li xml:lang='fr'>ingénieux</rdf:li> </rdf:Alt> </rdf:li> </rdf:Bag> </myXMPns:Field1> </myXMPns:BTestTag> </rdf:Description> <rdf:Description rdf:about='' xmlns:plus='http://ns.useplus.org/ldf/xmp/1.0/'> <plus:Licensee> <rdf:Seq> <rdf:li rdf:parseType='Resource'> <plus:LicenseeName>Phil</plus:LicenseeName> </rdf:li> </rdf:Seq> </plus:Licensee> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/XMP6.xmp��������������������������������������������������������������000644 �000765 �000024 �00000003204 12533100161 017342� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <!-- using "xmp:xmpmeta" instead of the usual "x:xmpmeta" --> <xmp:xmpmeta xmlns:xmp='adobe:ns:meta/' xmp:xmptk='Image::ExifTool 9.97'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <!-- a non-standard namespace --> <rdf:Description rdf:about='' xmlns:xxxx='http://testtag.com/fish/1.0/'> <xxxx:Test>trout</xxxx:Test> </rdf:Description> <!-- a non-standard namespace using an already defined non-standard prefix --> <rdf:Description rdf:about='' xmlns:xxxx='http://testtag.com/feline/1.0/'> <xxxx:Test>tabby</xxxx:Test> </rdf:Description> <!-- a standard namespace using the proper (but already defined) standard prefix --> <rdf:Description rdf:about='' xmlns:xmp='http://ns.adobe.com/xap/1.0/'> <xmp:Rating>2</xmp:Rating> </rdf:Description> <!-- another standard namespace using the same prefix --> <rdf:Description rdf:about='' xmlns:xmp='http://purl.org/dc/elements/1.1/'> <xmp:subject> <rdf:Bag> <rdf:li>x</rdf:li> </rdf:Bag> </xmp:subject> </rdf:Description> <!-- an already-used standard namespace with a different prefix and a non-standard rdf prefix --> <!-- (note: ExifTool currently processes attributes in order, even though the scope of the xmlns should be from the beginning of the element, which is why "z:about" won't yet work below) --> <z:Description rdf:about='' xmlns:y='http://purl.org/dc/elements/1.1/' xmlns:z='http://www.w3.org/1999/02/22-rdf-syntax-ns#'> <y:title> <z:Alt> <z:li xml:lang='x-default'>a title</z:li> </z:Alt> </y:title> </z:Description> </rdf:RDF> </xmp:xmpmeta> <?xpacket end='w'?>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/ZIP.gz����������������������������������������������������������������000644 �000765 �000024 �00000000107 11274575063 017107� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������‹´øòJtest.txt�This is a test comment�s­ÈL ÉÏÏQH¯Ê,P(I-.á�¦D–Ü������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/t/images/ZIP.zip���������������������������������������������������������������000644 �000765 �000024 �00000000247 11057772361 017275� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������PK �����×N9Fn��������test.txtUT �&®¶H?®¶HUx�õõExifTool test file PK �����×N9Fn������� ��������¤����test.txtUT�&®¶HUx��PK������C���N��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/File/����������������������������������������������������������������������000755 �000765 �000024 �00000000000 12650447263 016021� 5����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/���������������������������������������������������������������������000755 �000765 �000024 �00000000000 12650447262 016163� 5����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/������������������������������������������������������������000755 �000765 �000024 �00000000000 12650447263 017715� 5����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool.pm����������������������������������������������������������000644 �000765 �000024 �00001170414 12650434745 020264� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: ExifTool.pm # # Description: Read and write meta information # # URL: http://owl.phy.queensu.ca/~phil/exiftool/ # # Revisions: Nov. 12/2003 - P. Harvey Created # (See html/history.html for revision history) # # Legal: Copyright (c) 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) # This library is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. #------------------------------------------------------------------------------ package Image::ExifTool; use strict; require 5.004; # require 5.004 for UNIVERSAL::isa (otherwise 5.002 would do) require Exporter; use File::RandomAccess; use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes %allTables @tableOrder $exifAPP1hdr $xmpAPP1hdr $xmpExtAPP1hdr $psAPP13hdr $psAPP13old @loadAllTables %UserDefined $evalWarning %noWriteFile %magicNumber @langs $defaultLang %langName %charsetName %mimeType $swapBytes $swapWords $currentByteOrder %unpackStd %jpegMarker %specialTags); $VERSION = '10.10'; $RELEASE = ''; @ISA = qw(Exporter); %EXPORT_TAGS = ( # all public non-object-oriented functions: Public => [qw( ImageInfo GetTagName GetShortcuts GetAllTags GetWritableTags GetAllGroups GetDeleteGroups GetFileType CanWrite CanCreate AddUserDefinedTags )], # exports not part of the public API, but used by ExifTool modules: DataAccess => [qw( ReadValue GetByteOrder SetByteOrder ToggleByteOrder Get8u Get8s Get16u Get16s Get32u Get32s Get64u GetFloat GetDouble GetFixed32s Write WriteValue Tell Set8u Set8s Set16u Set32u )], Utils => [qw(GetTagTable TagTableKeys GetTagInfoList AddTagToTable HexDump)], Vars => [qw(%allTables @tableOrder @fileTypes)], ); # set all of our EXPORT_TAGS in EXPORT_OK Exporter::export_ok_tags(keys %EXPORT_TAGS); # test for problems that can arise if encoding.pm is used { my $t = "\xff"; die "Incompatible encoding!\n" if ord($t) != 0xff; } # The following functions defined in Image::ExifTool::Writer are declared # here so their prototypes will be available. These Writer routines will be # autoloaded when any of them is called. sub SetNewValue($;$$%); sub SetNewValuesFromFile($$;@); sub GetNewValue($$;$); sub GetNewValues($$;$); sub CountNewValues($); sub SaveNewValues($); sub RestoreNewValues($); sub WriteInfo($$;$$); sub SetFileModifyDate($$;$$$); sub SetFileName($$;$$); sub GetAllTags(;$); sub GetWritableTags(;$); sub GetAllGroups($); sub GetNewGroups($); sub GetDeleteGroups(); sub AddUserDefinedTags($%); # non-public routines below sub InsertTagValues($$$;$); sub IsWritable($); sub GetNewFileName($$); sub LoadAllTables(); sub GetNewTagInfoList($;$); sub GetNewTagInfoHash($@); sub GetLangInfo($$); sub Get64s($$); sub Get64u($$); sub GetExtended($$); sub DecodeBits($$;$); sub EncodeBits($$;$$); sub HexDump($;$%); sub DumpTrailer($$); sub DumpUnknownTrailer($$); sub VerboseInfo($$$%); sub VerboseDir($$;$$); sub VerboseValue($$$;$); sub VPrint($$@); sub Rationalize($;$); sub Write($@); sub WriteTrailerBuffer($$$); sub AddNewTrailers($;@); sub Tell($); sub WriteValue($$;$$$$); sub WriteDirectory($$$;$); sub WriteBinaryData($$$); sub CheckBinaryData($$$); sub WriteTIFF($$$); sub PackUTF8(@); sub UnpackUTF8($); sub SetPreferredByteOrder($); sub CopyBlock($$$); sub CopyFileAttrs($$); sub TimeNow(;$); sub NewGUID(); # other subroutine definitions sub EncodeFileName($$;$); sub Open($*$;$); sub Exists($$); sub IsDirectory($$); sub Rename($$$); sub Unlink($@); sub SetFileTime($$;$$$); sub DoEscape($$); sub ConvertFileSize($); sub ParseArguments($;@); #(defined in attempt to avoid mod_perl problem) sub ReadValue($$$$$;$); # list of main tag tables to load in LoadAllTables() (sub-tables are recursed # automatically). Note: They will appear in this order in the documentation # unless tweaked in BuildTagLookup::GetTableOrder(). @loadAllTables = qw( PhotoMechanic Exif GeoTiff CanonRaw KyoceraRaw Lytro MinoltaRaw PanasonicRaw SigmaRaw JPEG GIMP Jpeg2000 GIF BMP BMP::OS2 PICT PNG MNG DjVu DPX OpenEXR MIFF PGF PSP PhotoCD Radiance PDF PostScript Photoshop::Header FujiFilm::RAF FujiFilm::IFD Samsung::Trailer Sony::SRF2 Sony::SR2SubIFD Sony::PMP ITC ID3 Vorbis Ogg APE APE::NewHeader APE::OldHeader Audible MPC MPEG::Audio MPEG::Video MPEG::Xing M2TS QuickTime QuickTime::ImageFile Matroska MOI MXF DV Flash Flash::FLV Real::Media Real::Audio Real::Metafile RIFF AIFF ASF DICOM MIE HTML XMP::SVG Palm Palm::MOBI Palm::EXTH Torrent EXE EXE::PEVersion EXE::PEString EXE::MachO EXE::PEF EXE::ELF EXE::CHM LNK Font VCard VCard::VCalendar RSRC Rawzor ZIP ZIP::GZIP ZIP::RAR RTF OOXML iWork FLIR::AFF FLIR::FPF ); # alphabetical list of current Lang modules @langs = qw(cs de en en_ca en_gb es fi fr it ja ko nl pl ru sv tr zh_cn zh_tw); $defaultLang = 'en'; # default language # language names %langName = ( cs => 'Czech (ÄŒeÅ¡tina)', de => 'German (Deutsch)', en => 'English', en_ca => 'Canadian English', en_gb => 'British English', es => 'Spanish (Español)', fi => 'Finnish (Suomi)', fr => 'French (Français)', it => 'Italian (Italiano)', ja => 'Japanese (日本語)', ko => 'Korean (한국어)', nl => 'Dutch (Nederlands)', pl => 'Polish (Polski)', ru => 'Russian (РуÑÑкий)', sv => 'Swedish (Svenska)', 'tr'=> 'Turkish (Türkçe)', zh_cn => 'Simplified Chinese (简体中文)', zh_tw => 'Traditional Chinese (ç¹é«”中文)', ); # recognized file types, in the order we test unknown files # Notes: 1) There is no need to test for like types separately here # 2) Put types with weak file signatures at end of list to avoid false matches @fileTypes = qw(JPEG CRW DR4 TIFF GIF MRW RAF X3F JP2 PNG MIE MIFF PS PDF PSD XMP BMP PPM RIFF AIFF ASF MOV MPEG Real SWF PSP FLV OGG FLAC APE MPC MKV MXF DV PMP IND PGF ICC ITC FLIR FPF LFP HTML VRD RTF XCF DSS QTIF FPX PICT ZIP GZIP PLIST RAR BZ2 TAR RWZ EXE EXR HDR CHM LNK WMF AVC DEX DPX RAW Font RSRC M2TS PHP Torrent VCard AA PDB MOI MP3 DICOM PCD); # file types that we can write (edit) my @writeTypes = qw(JPEG TIFF GIF CRW MRW ORF RAF RAW PNG MIE PSD XMP PPM EPS X3F PS PDF ICC VRD DR4 JP2 EXIF AI AIT IND MOV EXV); my %writeTypes; # lookup for writable file types (hash filled if required) # file extensions that we can't write for various base types %noWriteFile = ( TIFF => [ qw(3FR DCR K25 KDC) ], XMP => [ 'SVG' ], JP2 => [ 'J2C', 'JPC' ], ); # file types that we can create from scratch # - must update CanCreate() documentation if this list is changed! my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV); # file type lookup for all recognized file extensions # (if extension may be more than one type, the type is a list where # the writable type should come first if it exists) my %fileTypeLookup = ( '3FR' => ['TIFF', 'Hasselblad RAW format'], '3G2' => ['MOV', '3rd Gen. Partnership Project 2 audio/video'], '3GP' => ['MOV', '3rd Gen. Partnership Project audio/video'], '3GP2'=> '3G2', '3GPP'=> '3GP', AA => ['AA', 'Audible Audiobook'], AAX => ['MOV', 'Audible Enhanced Audiobook'], ACR => ['DICOM','American College of Radiology ACR-NEMA'], ACFM => ['Font', 'Adobe Composite Font Metrics'], AFM => ['Font', 'Adobe Font Metrics'], AMFM => ['Font', 'Adobe Multiple Master Font Metrics'], AI => [['PDF','PS'], 'Adobe Illustrator'], AIF => 'AIFF', AIFC => ['AIFF', 'Audio Interchange File Format Compressed'], AIFF => ['AIFF', 'Audio Interchange File Format'], AIT => 'AI', APE => ['APE', "Monkey's Audio format"], ARW => ['TIFF', 'Sony Alpha RAW format'], ASF => ['ASF', 'Microsoft Advanced Systems Format'], AVC => ['AVC', 'Advanced Video Connection'], # (extensions are actually _AU,_AD,_IM,_ID) AVI => ['RIFF', 'Audio Video Interleaved'], AZW => 'MOBI', # (see http://wiki.mobileread.com/wiki/AZW) AZW3 => 'MOBI', BMP => ['BMP', 'Windows Bitmap'], BTF => ['BTF', 'Big Tagged Image File Format'], #(unofficial) BZ2 => ['BZ2', 'BZIP2 archive'], CHM => ['CHM', 'Microsoft Compiled HTML format'], CIFF => ['CRW', 'Camera Image File Format'], COS => ['COS', 'Capture One Settings'], CR2 => ['TIFF', 'Canon RAW 2 format'], CRW => ['CRW', 'Canon RAW format'], CS1 => ['PSD', 'Sinar CaptureShop 1-Shot RAW'], DC3 => 'DICM', DCM => 'DICM', DCP => ['TIFF', 'DNG Camera Profile'], DCR => ['TIFF', 'Kodak Digital Camera RAW'], DEX => ['DEX', 'Dalvik Executable format'], DFONT=> ['Font', 'Macintosh Data fork Font'], DIB => ['BMP', 'Device Independent Bitmap'], DIC => 'DICM', DICM => ['DICOM','Digital Imaging and Communications in Medicine'], DIVX => ['ASF', 'DivX media format'], DJV => 'DJVU', DJVU => ['AIFF', 'DjVu image'], DLL => ['EXE', 'Windows Dynamic Link Library'], DNG => ['TIFF', 'Digital Negative'], DOC => ['FPX', 'Microsoft Word Document'], DOCM => [['ZIP','FPX'], 'Office Open XML Document Macro-enabled'], # Note: I have seen a password-protected DOCX file which was FPX-like, so I assume # that any other MS Office file could be like this too. The only difference is # that the ZIP and FPX formats are checked first, so if this is wrong, no biggie. DOCX => [['ZIP','FPX'], 'Office Open XML Document'], DOT => ['FPX', 'Microsoft Word Template'], DOTM => [['ZIP','FPX'], 'Office Open XML Document Template Macro-enabled'], DOTX => [['ZIP','FPX'], 'Office Open XML Document Template'], DPX => ['DPX', 'Digital Picture Exchange' ], DR4 => ['DR4', 'Canon VRD version 4 Recipe'], DS2 => ['DSS', 'Digital Speech Standard 2'], DSS => ['DSS', 'Digital Speech Standard'], DV => ['DV', 'Digital Video'], DVB => ['MOV', 'Digital Video Broadcasting'], DYLIB=> ['EXE', 'Mach-O Dynamic Link Library'], EIP => ['ZIP', 'Capture One Enhanced Image Package'], EPS => ['EPS', 'Encapsulated PostScript Format'], EPS2 => 'EPS', EPS3 => 'EPS', EPSF => 'EPS', EPUB => ['ZIP', 'Electronic Publication'], ERF => ['TIFF', 'Epson Raw Format'], EXE => ['EXE', 'Windows executable file'], EXR => ['EXR', 'Open EXR'], EXIF => ['EXIF', 'Exchangable Image File Metadata'], EXV => ['EXV', 'Exiv2 metadata'], F4A => ['MOV', 'Adobe Flash Player 9+ Audio'], F4B => ['MOV', 'Adobe Flash Player 9+ audio Book'], F4P => ['MOV', 'Adobe Flash Player 9+ Protected'], F4V => ['MOV', 'Adobe Flash Player 9+ Video'], FFF => [['TIFF','FLIR'], 'Hasselblad Flexible File Format'], FLAC => ['FLAC', 'Free Lossless Audio Codec'], FLA => ['FPX', 'Macromedia/Adobe Flash project'], FLIR => ['FLIR', 'FLIR File Format'], # (not an actual extension) FLV => ['FLV', 'Flash Video'], FPF => ['FPF', 'FLIR Public image Format'], FPX => ['FPX', 'FlashPix'], GIF => ['GIF', 'Compuserve Graphics Interchange Format'], GZ => 'GZIP', GZIP => ['GZIP', 'GNU ZIP compressed archive'], HDP => ['TIFF', 'Windows HD Photo'], HDR => ['HDR', 'Radiance RGBE High Dynamic Range'], HTM => 'HTML', HTML => ['HTML', 'HyperText Markup Language'], ICAL => 'ICS', ICC => ['ICC', 'International Color Consortium'], ICM => 'ICC', ICS => ['VCard','iCalendar Schedule'], IDML => ['ZIP', 'Adobe InDesign Markup Language'], IIQ => ['TIFF', 'Phase One Intelligent Image Quality RAW'], IND => ['IND', 'Adobe InDesign'], INDD => ['IND', 'Adobe InDesign Document'], INDT => ['IND', 'Adobe InDesign Template'], INX => ['XMP', 'Adobe InDesign Interchange'], ITC => ['ITC', 'iTunes Cover Flow'], J2C => ['JP2', 'JPEG 2000 codestream'], J2K => 'JP2', JNG => ['PNG', 'JPG Network Graphics'], JP2 => ['JP2', 'JPEG 2000 file'], # JP4? - looks like a JPEG but the image data is different JPC => 'J2C', JPE => 'JPEG', JPEG => ['JPEG', 'Joint Photographic Experts Group'], JPF => 'JP2', JPG => 'JPEG', JPM => ['JP2', 'JPEG 2000 compound image'], JPX => ['JP2', 'JPEG 2000 with extensions'], JXR => ['TIFF', 'JPEG XR'], K25 => ['TIFF', 'Kodak DC25 RAW'], KDC => ['TIFF', 'Kodak Digital Camera RAW'], KEY => ['ZIP', 'Apple Keynote presentation'], KTH => ['ZIP', 'Apple Keynote Theme'], LA => ['RIFF', 'Lossless Audio'], LFP => ['LFP', 'Lytro Light Field Picture'], LFR => 'LFP', # (Light Field RAW) LNK => ['LNK', 'Windows shortcut'], M2T => 'M2TS', M2TS => ['M2TS', 'MPEG-2 Transport Stream'], M2V => ['MPEG', 'MPEG-2 Video'], M4A => ['MOV', 'MPEG-4 Audio'], M4B => ['MOV', 'MPEG-4 audio Book'], M4P => ['MOV', 'MPEG-4 Protected'], M4V => ['MOV', 'MPEG-4 Video'], MEF => ['TIFF', 'Mamiya (RAW) Electronic Format'], MIE => ['MIE', 'Meta Information Encapsulation format'], MIF => 'MIFF', MIFF => ['MIFF', 'Magick Image File Format'], MKA => ['MKV', 'Matroska Audio'], MKS => ['MKV', 'Matroska Subtitle'], MKV => ['MKV', 'Matroska Video'], MNG => ['PNG', 'Multiple-image Network Graphics'], MOBI => ['PDB', 'Mobipocket electronic book'], MODD => ['PLIST','Sony Picture Motion metadata'], MOI => ['MOI', 'MOD Information file'], MOS => ['TIFF', 'Creo Leaf Mosaic'], MOV => ['MOV', 'Apple QuickTime movie'], MP3 => ['MP3', 'MPEG-1 Layer 3 audio'], MP4 => ['MOV', 'MPEG-4 video'], MPC => ['MPC', 'Musepack Audio'], MPEG => ['MPEG', 'MPEG-1 or MPEG-2 audio/video'], MPG => 'MPEG', MPO => ['JPEG', 'Extended Multi-Picture format'], MQV => ['MOV', 'Sony Mobile Quicktime Video'], MRW => ['MRW', 'Minolta RAW format'], MTS => 'M2TS', MXF => ['MXF', 'Material Exchange Format'], # NDPI => ['TIFF', 'Hamamatsu NanoZoomer Digital Pathology Image'], NEF => ['TIFF', 'Nikon (RAW) Electronic Format'], NEWER => 'COS', NMBTEMPLATE => ['ZIP','Apple Numbers Template'], NRW => ['TIFF', 'Nikon RAW (2)'], NUMBERS => ['ZIP','Apple Numbers spreadsheet'], ODB => ['ZIP', 'Open Document Database'], ODC => ['ZIP', 'Open Document Chart'], ODF => ['ZIP', 'Open Document Formula'], ODG => ['ZIP', 'Open Document Graphics'], ODI => ['ZIP', 'Open Document Image'], ODP => ['ZIP', 'Open Document Presentation'], ODS => ['ZIP', 'Open Document Spreadsheet'], ODT => ['ZIP', 'Open Document Text file'], OFR => ['RIFF', 'OptimFROG audio'], OGG => ['OGG', 'Ogg Vorbis audio file'], OGV => ['OGG', 'Ogg Video file'], ORF => ['ORF', 'Olympus RAW format'], OTF => ['Font', 'Open Type Font'], PAC => ['RIFF', 'Lossless Predictive Audio Compression'], PAGES => ['ZIP', 'Apple Pages document'], PBM => ['PPM', 'Portable BitMap'], PCD => ['PCD', 'Kodak Photo CD Image Pac'], PCT => 'PICT', PDB => ['PDB', 'Palm Database'], PDF => ['PDF', 'Adobe Portable Document Format'], PEF => ['TIFF', 'Pentax (RAW) Electronic Format'], PFA => ['Font', 'PostScript Font ASCII'], PFB => ['Font', 'PostScript Font Binary'], PFM => ['Font', 'Printer Font Metrics'], PGF => ['PGF', 'Progressive Graphics File'], PGM => ['PPM', 'Portable Gray Map'], PHP => ['PHP', 'PHP Hypertext Preprocessor'], PHP3 => 'PHP', PHP4 => 'PHP', PHP5 => 'PHP', PHPS => 'PHP', PHTML=> 'PHP', PICT => ['PICT', 'Apple PICTure'], PLIST=> ['PLIST','Apple Property List'], PMP => ['PMP', 'Sony DSC-F1 Cyber-Shot PMP'], # should stand for Proprietery Metadata Package ;) PNG => ['PNG', 'Portable Network Graphics'], POT => ['FPX', 'Microsoft PowerPoint Template'], POTM => [['ZIP','FPX'], 'Office Open XML Presentation Template Macro-enabled'], POTX => [['ZIP','FPX'], 'Office Open XML Presentation Template'], PPM => ['PPM', 'Portable Pixel Map'], PPS => ['FPX', 'Microsoft PowerPoint Slideshow'], PPSM => [['ZIP','FPX'], 'Office Open XML Presentation Slideshow Macro-enabled'], PPSX => [['ZIP','FPX'], 'Office Open XML Presentation Slideshow'], PPT => ['FPX', 'Microsoft PowerPoint Presentation'], PPTM => [['ZIP','FPX'], 'Office Open XML Presentation Macro-enabled'], PPTX => [['ZIP','FPX'], 'Office Open XML Presentation'], PRC => ['PDB', 'Palm Database'], PS => ['PS', 'PostScript'], PS2 => 'PS', PS3 => 'PS', PSB => ['PSD', 'Photoshop Large Document'], PSD => ['PSD', 'Photoshop Document'], PSP => ['PSP', 'Paint Shop Pro'], PSPFRAME => 'PSP', PSPIMAGE => 'PSP', PSPSHAPE => 'PSP', PSPTUBE => 'PSP', QIF => 'QTIF', QT => 'MOV', QTI => 'QTIF', QTIF => ['QTIF', 'QuickTime Image File'], RA => ['Real', 'Real Audio'], RAF => ['RAF', 'FujiFilm RAW Format'], RAM => ['Real', 'Real Audio Metafile'], RAR => ['RAR', 'RAR Archive'], RAW => [['RAW','TIFF'], 'Kyocera Contax N Digital RAW or Panasonic RAW'], RIF => 'RIFF', RIFF => ['RIFF', 'Resource Interchange File Format'], RM => ['Real', 'Real Media'], RMVB => ['Real', 'Real Media Variable Bitrate'], RPM => ['Real', 'Real Media Plug-in Metafile'], RSRC => ['RSRC', 'Mac OS Resource'], RTF => ['RTF', 'Rich Text Format'], RV => ['Real', 'Real Video'], RW2 => ['TIFF', 'Panasonic RAW 2'], RWL => ['TIFF', 'Leica RAW'], RWZ => ['RWZ', 'Rawzor compressed image'], SEQ => ['FLIR', 'FLIR image Sequence'], SO => ['EXE', 'Shared Object file'], SR2 => ['TIFF', 'Sony RAW Format 2'], SRF => ['TIFF', 'Sony RAW Format'], SRW => ['TIFF', 'Samsung RAW format'], SVG => ['XMP', 'Scalable Vector Graphics'], SWF => ['SWF', 'Shockwave Flash'], TAR => ['TAR', 'TAR archive'], THM => ['JPEG', 'Canon Thumbnail'], THMX => [['ZIP','FPX'], 'Office Open XML Theme'], TIF => 'TIFF', TIFF => ['TIFF', 'Tagged Image File Format'], TORRENT => ['Torrent', 'BitTorrent description file'], TS => 'M2TS', TTC => ['Font', 'True Type Font Collection'], TTF => ['Font', 'True Type Font'], TUB => 'PSP', VCARD=> ['VCard','Virtual Card'], VCF => 'VCARD', VOB => ['MPEG', 'Video Object'], VRD => ['VRD', 'Canon VRD Recipe Data'], VSD => ['FPX', 'Microsoft Visio Drawing'], WAV => ['RIFF', 'WAVeform (Windows digital audio)'], WDP => ['TIFF', 'Windows Media Photo'], WEBM => ['MKV', 'Google Web Movie'], WEBP => ['RIFF', 'Google Web Picture'], WMA => ['ASF', 'Windows Media Audio'], WMF => ['WMF', 'Windows Metafile Format'], WMV => ['ASF', 'Windows Media Video'], WV => ['RIFF', 'WavePack lossless audio'], X3F => ['X3F', 'Sigma RAW format'], XCF => ['XCF', 'GIMP native image format'], XHTML=> ['HTML', 'Extensible HyperText Markup Language'], XLA => ['FPX', 'Microsoft Excel Add-in'], XLAM => [['ZIP','FPX'], 'Office Open XML Spreadsheet Add-in Macro-enabled'], XLS => ['FPX', 'Microsoft Excel Spreadsheet'], XLSB => [['ZIP','FPX'], 'Office Open XML Spreadsheet Binary'], XLSM => [['ZIP','FPX'], 'Office Open XML Spreadsheet Macro-enabled'], XLSX => [['ZIP','FPX'], 'Office Open XML Spreadsheet'], XLT => ['FPX', 'Microsoft Excel Template'], XLTM => [['ZIP','FPX'], 'Office Open XML Spreadsheet Template Macro-enabled'], XLTX => [['ZIP','FPX'], 'Office Open XML Spreadsheet Template'], XMP => ['XMP', 'Extensible Metadata Platform'], ZIP => ['ZIP', 'ZIP archive'], ); # typical extension for each file type (if different than FileType) # - case is not significant my %fileTypeExt = ( 'Canon 1D RAW' => 'tif', DICOM => 'dcm', FLIR => 'fff', GZIP => 'gz', JPEG => 'jpg', M2TS => 'mts', MPEG => 'mpg', TIFF => 'tif', VCard => 'vcf', ); # descriptions for file types not found in above file extension lookup my %fileDescription = ( DICOM => 'Digital Imaging and Communications in Medicine', XML => 'Extensible Markup Language', 'DJVU (multi-page)' => 'DjVu multi-page image', 'Win32 EXE' => 'Windows 32-bit Executable', 'Win32 DLL' => 'Windows 32-bit Dynamic Link Library', 'Win64 EXE' => 'Windows 64-bit Executable', 'Win64 DLL' => 'Windows 64-bit Dynamic Link Library', ); # MIME types for applicable file types above # (missing entries default to 'application/unknown', but note that other MIME # types may be specified by some modules, eg. QuickTime.pm and RIFF.pm) %mimeType = ( '3FR' => 'image/x-hasselblad-3fr', AA => 'audio/audible', AI => 'application/vnd.adobe.illustrator', AIFF => 'audio/x-aiff', APE => 'audio/x-monkeys-audio', ASF => 'video/x-ms-asf', ARW => 'image/x-sony-arw', BMP => 'image/bmp', BTF => 'image/x-tiff-big', #(NC) (ref http://www.asmail.be/msg0055371937.html) BZ2 => 'application/bzip2', 'Canon 1D RAW' => 'image/x-raw', # (uses .TIF file extension) CHM => 'application/x-chm', CR2 => 'image/x-canon-cr2', CRW => 'image/x-canon-crw', DCR => 'image/x-kodak-dcr', DEX => 'application/octet-stream', DFONT=> 'application/x-dfont', DICOM=> 'application/dicom', DIVX => 'video/divx', DJVU => 'image/vnd.djvu', DNG => 'image/x-adobe-dng', DOC => 'application/msword', DOCM => 'application/vnd.ms-word.document.macroEnabled', DOCX => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', DOT => 'application/msword', DOTM => 'application/vnd.ms-word.template.macroEnabledTemplate', DOTX => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', DPX => 'image/x-dpx', DS2 => 'audio/x-ds2', DSS => 'audio/x-dss', DV => 'video/x-dv', EIP => 'application/x-captureone', #(NC) EPS => 'application/postscript', ERF => 'image/x-epson-erf', EXE => 'application/octet-stream', EXV => 'image/x-exv', FFF => 'image/x-hasselblad-fff', FLA => 'application/vnd.adobe.fla', FLAC => 'audio/flac', FLV => 'video/x-flv', Font => 'application/x-font-type1', # covers PFA, PFB and PFM (not sure about PFM) FPX => 'image/vnd.fpx', GIF => 'image/gif', GZIP => 'application/x-gzip', HDP => 'image/vnd.ms-photo', HDR => 'image/vnd.radiance', HTML => 'text/html', ICC => 'application/vnd.iccprofile', ICS => 'text/calendar', IDML => 'application/vnd.adobe.indesign-idml-package', IIQ => 'image/x-raw', IND => 'application/x-indesign', INX => 'application/x-indesign-interchange', #PH (NC) ITC => 'application/itunes', JNG => 'image/jng', J2C => 'image/x-j2c', #PH (NC) JP2 => 'image/jp2', JPEG => 'image/jpeg', JPM => 'image/jpm', JPX => 'image/jpx', K25 => 'image/x-kodak-k25', KDC => 'image/x-kodak-kdc', LFP => 'image/x-lytro-lfp', #PH (NC) LNK => 'application/octet-stream', M2T => 'video/mpeg', M2TS => 'video/m2ts', MEF => 'image/x-mamiya-mef', MIE => 'application/x-mie', MIFF => 'application/x-magick-image', MKA => 'audio/x-matroska', MKS => 'application/x-matroska', MKV => 'video/x-matroska', MNG => 'video/mng', MOBI => 'application/x-mobipocket-ebook', MOS => 'image/x-raw', MOV => 'video/quicktime', MP3 => 'audio/mpeg', MP4 => 'video/mp4', MPC => 'audio/x-musepack', MPEG => 'video/mpeg', MRW => 'image/x-minolta-mrw', MXF => 'application/mxf', NEF => 'image/x-nikon-nef', NRW => 'image/x-nikon-nrw', ODB => 'application/vnd.oasis.opendocument.database', ODC => 'application/vnd.oasis.opendocument.chart', ODF => 'application/vnd.oasis.opendocument.formula', ODG => 'application/vnd.oasis.opendocument.graphics', ODI => 'application/vnd.oasis.opendocument.image', ODP => 'application/vnd.oasis.opendocument.presentation', ODS => 'application/vnd.oasis.opendocument.spreadsheet', ODT => 'application/vnd.oasis.opendocument.text', OGG => 'audio/x-ogg', OGV => 'video/x-ogg', EXR => 'image/x-exr', ORF => 'image/x-olympus-orf', OTF => 'application/x-font-otf', PBM => 'image/x-portable-bitmap', PCD => 'image/x-photo-cd', PDB => 'application/vnd.palm', PDF => 'application/pdf', PEF => 'image/x-pentax-pef', PFA => 'application/x-font-type1', # (needed if handled by PostScript module) PGF => 'image/pgf', PGM => 'image/x-portable-graymap', PHP => 'application/x-httpd-php', PICT => 'image/pict', PLIST=> 'application/xml', # (binary PLIST format is 'application/x-plist', recognized at run time) PNG => 'image/png', POT => 'application/vnd.ms-powerpoint', POTM => 'application/vnd.ms-powerpoint.template.macroEnabled', POTX => 'application/vnd.openxmlformats-officedocument.presentationml.template', PPM => 'image/x-portable-pixmap', PPS => 'application/vnd.ms-powerpoint', PPSM => 'application/vnd.ms-powerpoint.slideshow.macroEnabled', PPSX => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', PPT => 'application/vnd.ms-powerpoint', PPTM => 'application/vnd.ms-powerpoint.presentation.macroEnabled', PPTX => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', PS => 'application/postscript', PSD => 'application/vnd.adobe.photoshop', PSP => 'image/x-paintshoppro', #(NC) QTIF => 'image/x-quicktime', RA => 'audio/x-pn-realaudio', RAF => 'image/x-fujifilm-raf', RAM => 'audio/x-pn-realaudio', RAR => 'application/x-rar-compressed', RAW => 'image/x-raw', RM => 'application/vnd.rn-realmedia', RMVB => 'application/vnd.rn-realmedia-vbr', RPM => 'audio/x-pn-realaudio-plugin', RSRC => 'application/ResEdit', RTF => 'text/rtf', RV => 'video/vnd.rn-realvideo', RW2 => 'image/x-panasonic-rw2', RWL => 'image/x-leica-rwl', RWZ => 'image/x-rawzor', #(duplicated in Rawzor.pm) SR2 => 'image/x-sony-sr2', SRF => 'image/x-sony-srf', SRW => 'image/x-samsung-srw', SVG => 'image/svg+xml', SWF => 'application/x-shockwave-flash', TAR => 'application/x-tar', THMX => 'application/vnd.ms-officetheme', TIFF => 'image/tiff', Torrent => 'application/x-bittorrent', TTC => 'application/x-font-ttf', TTF => 'application/x-font-ttf', VCard=> 'text/vcard', VSD => 'application/x-visio', WDP => 'image/vnd.ms-photo', WEBM => 'video/webm', WMA => 'audio/x-ms-wma', WMF => 'application/x-wmf', WMV => 'video/x-ms-wmv', X3F => 'image/x-sigma-x3f', XCF => 'image/x-xcf', XLA => 'application/vnd.ms-excel', XLAM => 'application/vnd.ms-excel.addin.macroEnabled', XLS => 'application/vnd.ms-excel', XLSB => 'application/vnd.ms-excel.sheet.binary.macroEnabled', XLSM => 'application/vnd.ms-excel.sheet.macroEnabled', XLSX => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', XLT => 'application/vnd.ms-excel', XLTM => 'application/vnd.ms-excel.template.macroEnabled', XLTX => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', XML => 'application/xml', XMP => 'application/rdf+xml', ZIP => 'application/zip', ); # module names for processing routines of each file type # - undefined entries default to same module name as file type # - module name '' defaults to Image::ExifTool # - module name '0' indicates a recognized but unsupported file my %moduleName = ( AA => 'Audible', AVC => 0, BTF => 'BigTIFF', BZ2 => 0, CRW => 'CanonRaw', CHM => 'EXE', COS => 'CaptureOne', DEX => 0, DOCX => 'OOXML', DR4 => 'CanonVRD', DSS => 'Olympus', EPS => 'PostScript', EXIF => '', EXR => 'OpenEXR', EXV => '', ICC => 'ICC_Profile', IND => 'InDesign', FLV => 'Flash', FPF => 'FLIR', FPX => 'FlashPix', GZIP => 'ZIP', HDR => 'Radiance', JP2 => 'Jpeg2000', JPEG => '', LFP => 'Lytro', MOV => 'QuickTime', MKV => 'Matroska', MP3 => 'ID3', MRW => 'MinoltaRaw', OGG => 'Ogg', ORF => 'Olympus', PDB => 'Palm', PCD => 'PhotoCD', PHP => 0, PMP => 'Sony', PS => 'PostScript', PSD => 'Photoshop', QTIF => 'QuickTime', RAF => 'FujiFilm', RAR => 'ZIP', RAW => 'KyoceraRaw', RWZ => 'Rawzor', SWF => 'Flash', TAR => 0, TIFF => '', VRD => 'CanonVRD', WMF => 0, X3F => 'SigmaRaw', XCF => 'GIMP', ); # quick "magic number" file test used to avoid loading module unnecessarily: # - regular expression evaluated on first 1024 bytes of file # - must match beginning at first byte in file # - this test must not be more stringent than module logic %magicNumber = ( AA => '.{4}\x57\x90\x75\x36', AIFF => '(FORM....AIF[FC]|AT&TFORM)', APE => '(MAC |APETAGEX|ID3)', ASF => '\x30\x26\xb2\x75\x8e\x66\xcf\x11\xa6\xd9\x00\xaa\x00\x62\xce\x6c', AVC => '\+A\+V\+C\+', Torrent => 'd\d+:\w+', BMP => 'BM', BTF => '(II\x2b\0|MM\0\x2b)', BZ2 => 'BZh[1-9]\x31\x41\x59\x26\x53\x59', CHM => 'ITSF.{20}\x10\xfd\x01\x7c\xaa\x7b\xd0\x11\x9e\x0c\0\xa0\xc9\x22\xe6\xec', CRW => '(II|MM).{4}HEAP(CCDR|JPGM)', DEX => "dex\n035\0", DICOM=> '(.{128}DICM|\0[\x02\x04\x06\x08]\0[\0-\x20]|[\x02\x04\x06\x08]\0[\0-\x20]\0)', DOCX => 'PK\x03\x04', DPX => '(SDPX|XPDS)', DR4 => 'IIII\x04\0\x04\0', DSS => '(\x02dss|\x03ds2)', DV => '\x1f\x07\0[\x3f\xbf]', # (not tested if extension recognized) EPS => '(%!PS|%!Ad|\xc5\xd0\xd3\xc6)', EXE => '(MZ|\xca\xfe\xba\xbe|\xfe\xed\xfa[\xce\xcf]|[\xce\xcf]\xfa\xed\xfe|Joy!peff|\x7fELF|#!\s*/\S*bin/|!<arch>\x0a)', EXIF => '(II\x2a\0|MM\0\x2a)', EXR => '\x76\x2f\x31\x01', EXV => '\xff\x01Exiv2', FLAC => '(fLaC|ID3)', FLIR => '[AF]FF\0', FLV => 'FLV\x01', Font => '((\0\x01\0\0|OTTO|true|typ1)[\0\x01]|ttcf\0[\x01\x02]\0\0|\0[\x01\x02]|' . '(.{6})?%!(PS-(AdobeFont-|Bitstream )|FontType1-)|Start(Comp|Master)?FontMetrics)', FPF => 'FPF Public Image Format\0', FPX => '\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1', GIF => 'GIF8[79]a', GZIP => '\x1f\x8b\x08', HDR => '#\?(RADIANCE|RGBE)\x0a', HTML => '(\xef\xbb\xbf)?\s*(?i)<(!DOCTYPE\s+HTML|HTML|\?xml)', # (case insensitive) ICC => '.{12}(scnr|mntr|prtr|link|spac|abst|nmcl|nkpf)(XYZ |Lab |Luv |YCbr|Yxy |RGB |GRAY|HSV |HLS |CMYK|CMY |[2-9A-F]CLR){2}', IND => '\x06\x06\xed\xf5\xd8\x1d\x46\xe5\xbd\x31\xef\xe7\xfe\x74\xb7\x1d', ITC => '.{4}itch', JP2 => '(\0\0\0\x0cjP( |\x1a\x1a)\x0d\x0a\x87\x0a|\xff\x4f\xff\x51\0)', JPEG => '\xff(\xd8\xff|\x01Exiv2)', # (includes EXV so we don't have to add EXV to @fileTypes) LFP => '\x89LFP\x0d\x0a\x1a\x0a', LNK => '.{4}\x01\x14\x02\0{5}\xc0\0{6}\x46', M2TS => '(....)?\x47', MIE => '~[\x10\x18]\x04.0MIE', MIFF => 'id=ImageMagick', MKV => '\x1a\x45\xdf\xa3', MOV => '.{4}(free|skip|wide|ftyp|pnot|PICT|pict|moov|mdat|junk|uuid)', # (duplicated in WriteQuickTime.pl !!) # MP3 => difficult to rule out MPC => '(MP\+|ID3)', MOI => 'V6', MPEG => '\0\0\x01[\xb0-\xbf]', MRW => '\0MR[MI]', MXF => '\x06\x0e\x2b\x34\x02\x05\x01\x01\x0d\x01\x02', # (not tested if extension recognized) OGG => '(OggS|ID3)', ORF => '(II|MM)', PDB => '.{60}(\.pdfADBE|TEXtREAd|BVokBDIC|DB99DBOS|PNRdPPrs|DataPPrs|vIMGView|PmDBPmDB|InfoINDB|ToGoToGo|SDocSilX|JbDbJBas|JfDbJFil|DATALSdb|Mdb1Mdb1|BOOKMOBI|DataPlkr|DataSprd|SM01SMem|TEXtTlDc|InfoTlIf|DataTlMl|DataTlPt|dataTDBP|TdatTide|ToRaTRPW|zTXTGPlm|BDOCWrdS)', # PCD => signature is at byte 2048 PDF => '%PDF-\d+\.\d+', PGF => 'PGF', PHP => '<\?php\s', PICT => '(.{10}|.{522})(\x11\x01|\x00\x11)', PLIST=> '(bplist0|\s*<|\xfe\xff\x00)', PMP => '.{8}\0{3}\x7c.{112}\xff\xd8\xff\xdb', PNG => '(\x89P|\x8aM|\x8bJ)NG\r\n\x1a\n', PPM => 'P[1-6]\s+', PS => '(%!PS|%!Ad|\xc5\xd0\xd3\xc6)', PSD => '8BPS\0[\x01\x02]', PSP => 'Paint Shop Pro Image File\x0a\x1a\0{5}', QTIF => '.{4}(idsc|idat|iicc)', RAF => 'FUJIFILM', RAR => 'Rar!\x1a\x07\0', RAW => '(.{25}ARECOYK|II|MM)', Real => '(\.RMF|\.ra\xfd|pnm://|rtsp://|http://)', RIFF => '(RIFF|LA0[234]|OFR |LPAC|wvpk)', # RIFF plus other variants RSRC => '(....)?\0\0\x01\0', RTF => '[\n\r]*\\{[\n\r]*\\\\rtf', RWZ => 'rawzor', SWF => '[FC]WS[^\0]', TAR => '.{257}ustar( )?\0', # (this doesn't catch old-style tar files) TIFF => '(II|MM)', # don't test magic number (some raw formats are different) VCard=> '(?i)BEGIN:(VCARD|VCALENDAR)\r\n', VRD => 'CANON OPTIONAL DATA\0', WMF => '(\xd7\xcd\xc6\x9a\0\0|\x01\0\x09\0\0\x03)', X3F => 'FOVb', XCF => 'gimp xcf ', XMP => '\0{0,3}(\xfe\xff|\xff\xfe|\xef\xbb\xbf)?\0{0,3}\s*<', ZIP => 'PK\x03\x04', ); # file types with weak magic number recognition my %weakMagic = ( MP3 => 1 ); # file types that are determined by the process proc when FastScan == 3 # (when done, the process proc must exit after SetFileType if FastScan is 3) my %processType = map { $_ => 1 } qw(JPEG TIFF XMP AIFF EXE Font PS Real VCard); # lookup for valid character set names (keys are all lower case) %charsetName = ( # Charset setting alias(es) # ------------------------- -------------------------------------------- utf8 => 'UTF8', cp65001 => 'UTF8', 'utf-8' => 'UTF8', latin => 'Latin', cp1252 => 'Latin', latin1 => 'Latin', latin2 => 'Latin2', cp1250 => 'Latin2', cyrillic => 'Cyrillic', cp1251 => 'Cyrillic', russian => 'Cyrillic', greek => 'Greek', cp1253 => 'Greek', turkish => 'Turkish', cp1254 => 'Turkish', hebrew => 'Hebrew', cp1255 => 'Hebrew', arabic => 'Arabic', cp1256 => 'Arabic', baltic => 'Baltic', cp1257 => 'Baltic', vietnam => 'Vietnam', cp1258 => 'Vietnam', thai => 'Thai', cp874 => 'Thai', macroman => 'MacRoman', cp10000 => 'MacRoman', mac => 'MacRoman', roman => 'MacRoman', maclatin2 => 'MacLatin2', cp10029 => 'MacLatin2', maccyrillic => 'MacCyrillic', cp10007 => 'MacCyrillic', macgreek => 'MacGreek', cp10006 => 'MacGreek', macturkish => 'MacTurkish', cp10081 => 'MacTurkish', macromanian => 'MacRomanian', cp10010 => 'MacRomanian', maciceland => 'MacIceland', cp10079 => 'MacIceland', maccroatian => 'MacCroatian', cp10082 => 'MacCroatian', ); # default group priority for writing # (NOTE: tags in groups not specified here will not be written unless # overridden by the module or specified when writing) my @defaultWriteGroups = qw(EXIF IPTC XMP MakerNotes Photoshop ICC_Profile CanonVRD Adobe); # group hash for ExifTool-generated tags my %allGroupsExifTool = ( 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'ExifTool' ); # special tag names (not used for tag info) %specialTags = map { $_ => 1 } qw( TABLE_NAME SHORT_NAME PROCESS_PROC WRITE_PROC CHECK_PROC GROUPS FORMAT FIRST_ENTRY TAG_PREFIX PRINT_CONV WRITABLE TABLE_DESC NOTES IS_OFFSET IS_SUBDIR EXTRACT_UNKNOWN NAMESPACE PREFERRED SRC_TABLE PRIORITY WRITE_GROUP LANG_INFO VARS DATAMEMBER SET_GROUP1 ); # headers for various segment types $exifAPP1hdr = "Exif\0\0"; $xmpAPP1hdr = "http://ns.adobe.com/xap/1.0/\0"; $xmpExtAPP1hdr = "http://ns.adobe.com/xmp/extension/\0"; $psAPP13hdr = "Photoshop 3.0\0"; $psAPP13old = 'Adobe_Photoshop2.5:'; sub DummyWriteProc { return 1; } # lookup for user lenses defined in @Image::ExifTool::UserDefined::Lenses %Image::ExifTool::userLens = ( ); # queued plug-in tags to add to lookup @Image::ExifTool::pluginTags = ( ); %Image::ExifTool::pluginTags = ( ); my %systemTagsNotes = ( Notes => q{ extracted only if specifically requested or the SystemTags or RequestAll API option is set }, ); # tag information for preview image -- this should be used for all # PreviewImage tags so they are handled properly when reading/writing %Image::ExifTool::previewImageTagInfo = ( Name => 'PreviewImage', Writable => 'undef', # a value of 'none' is ok... WriteCheck => '$val eq "none" ? undef : $self->CheckImage(\$val)', DataTag => 'PreviewImage', # accept either scalar or scalar reference RawConv => '$self->ValidateImage(ref $val ? $val : \$val, $tag)', # we allow preview image to be set to '', but we don't want a zero-length value # in the IFD, so set it temorarily to 'none'. Note that the length is <= 4, # so this value will fit in the IFD so the preview fixup won't be generated. ValueConvInv => '$val eq "" and $val="none"; $val', ); # extra tags that aren't truly EXIF tags, but are generated by the script # Note: any tag in this list with a name corresponding to a Group0 name is # used to write the entire corresponding directory as a block. %Image::ExifTool::Extra = ( GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' }, VARS => { NO_ID => 1 }, # tag ID's aren't meaningful for these tags WRITE_PROC => \&DummyWriteProc, Error => { Priority => 0, Groups => \%allGroupsExifTool, Notes => q{ returns errors that may have occurred while reading or writing a file. Any Error will prevent the file from being processed. Minor errors may be downgraded to warnings with the -m or IgnoreMinorErrors option }, }, Warning => { Priority => 0, Groups => \%allGroupsExifTool, Notes => q{ returns warnings that may have occurred while reading or writing a file. Use the -a or Duplicates option to see all warnings if more than one occurred. Minor warnings may be ignored with the -m or IgnoreMinorErrors option. Minor warnings with a capital "M" in the "[Minor]" designation indicate that the processing is affected by ignoring the warning }, }, Comment => { Notes => 'comment embedded in JPEG, GIF89a or PPM/PGM/PBM image', Writable => 1, WriteGroup => 'Comment', Priority => 0, # to preserve order of JPEG COM segments }, Directory => { Groups => { 1 => 'System' }, Notes => q{ the directory of the file as specified in the call to ExifTool, or "." if no directory was specified. May be written to move the file to another directory that will be created if doesn't already exist }, Writable => 1, Protected => 1, RawConv => '$self->ConvertFileName($val)', # translate backslashes in directory names and add trailing '/' ValueConvInv => '$_ = $self->InverseFileName($val); m{[^/]$} and $_ .= "/"; $_', }, FileName => { Groups => { 1 => 'System' }, Writable => 1, Protected => 1, Notes => q{ may be written with a full path name to set FileName and Directory in one operation. This is such a powerful feature that a TestName tag is provided to allow dry-run tests before actually writing the file name. See L<filename.html|../filename.html> for more information on writing the FileName, Directory and TestName tags }, RawConv => '$self->ConvertFileName($val)', ValueConvInv => '$self->InverseFileName($val)', }, FilePath => { Groups => { 1 => 'System' }, Notes => q{ absolute path of source file. Not generated unless specifically requested or the RequestAll API option is set }, }, TestName => { Writable => 1, WriteOnly => 1, Notes => q{ this write-only tag may be used instead of FileName for dry-run tests of the file renaming feature. Writing this tag prints the old and new file names to the console, but does not affect the file itself }, ValueConvInv => '$self->InverseFileName($val)', }, FileSequence => { Groups => { 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'Other' }, Notes => q{ sequence number for each source file when extracting or copying information, including files that fail the -if condition of the command-line application, beginning at 0 for the first file. Not generated unless specifically requested or the RequestAll API option is set }, }, FileSize => { Groups => { 1 => 'System' }, Notes => q{ note that the print conversion for this tag uses historic prefixes: 1 kB = 1024 bytes, etc. }, PrintConv => \&ConvertFileSize, }, ResourceForkSize => { Groups => { 1 => 'System' }, Notes => q{ size of the file's resource fork if it contains data. Mac OS only. If this tag is generated the ExtractEmbedded option may be used to extract resource-fork information as a sub-document. When writing, the resource fork is preserved by default, but it may be deleted with C<-rsrc:all=> on the command line }, PrintConv => \&ConvertFileSize, }, FileType => { Notes => q{ a short description of the file type. For many file types this is the just the uppercase file extension }, }, FileTypeExtension => { Notes => q{ a common lowercase extension for this file type, or uppercase with the -n option }, PrintConv => 'lc $val', }, FileModifyDate => { Description => 'File Modification Date/Time', Notes => q{ the filesystem modification date/time. Note that ExifTool may not be able to handle filesystem dates before 1970 depending on the limitations of the system's standard libraries }, Groups => { 1 => 'System', 2 => 'Time' }, Writable => 1, # all writable pseudo-tags must be protected so -tagsfromfile fails with # unrecognized files unless a pseudo tag is specified explicitly Protected => 1, Shift => 'Time', ValueConv => 'ConvertUnixTime($val,1)', ValueConvInv => 'GetUnixTime($val,1)', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', }, FileAccessDate => { Description => 'File Access Date/Time', Notes => q{ the date/time of last access of the file. Note that this access time is updated whenever any software, including ExifTool, reads the file }, Groups => { 1 => 'System', 2 => 'Time' }, ValueConv => 'ConvertUnixTime($val,1)', PrintConv => '$self->ConvertDateTime($val)', }, FileCreateDate => { Description => 'File Creation Date/Time', Notes => q{ the filesystem creation date/time. Windows only. Requires Win32API::File and Win32::API for writing. Note that although ExifTool does not currently support FileCreateDate on other systems, the OS X file creation date may be accessed via the MDItemFSCreationDate tag when the MDItemTags API option is set, and may be written indirectly via the FileModifyDate tag by following these steps: 1. Rewrite the file to set the filesystem creation and modification times to the current time, 2. Set FileModifyDate to the desired creation time, then 3. Restore FileModifyDate to its original value }, Groups => { 1 => 'System', 2 => 'Time' }, Writable => 1, Protected => 1, # all writable pseudo-tags must be protected! Shift => 'Time', ValueConv => 'ConvertUnixTime($val,1)', ValueConvInv => q{ if ($^O ne 'MSWin32') { warn "This tag is Windows only\n"; return undef; } return GetUnixTime($val,1); }, PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', }, FileInodeChangeDate => { Description => 'File Inode Change Date/Time', Notes => q{ the date/time when the file's directory information was last changed. Non-Windows systems only }, Groups => { 1 => 'System', 2 => 'Time' }, ValueConv => 'ConvertUnixTime($val,1)', PrintConv => '$self->ConvertDateTime($val)', }, FilePermissions => { Groups => { 1 => 'System' }, Notes => q{ r=read, w=write and x=execute permissions for the file owner, group and others. The ValueConv value is an octal number so bit test operations on this value should be done in octal, eg. 'oct($filePermissions#) & 0200' }, ValueConv => 'sprintf("%.3o", $val & 0777)', PrintConv => sub { my ($mask, $str, $val) = (0400, '', oct(shift)); while ($mask) { foreach (qw(r w x)) { $str .= $val & $mask ? $_ : '-'; $mask >>= 1; } } return $str; }, }, FileAttributes => { Groups => { 1 => 'System' }, Notes => q{ extracted only if specifically requested or the SystemTags or RequestAll API option is set. 2 or 3 values: 0. File type, 1. Attribute bits, 2. Windows attribute bits if Win32API::File is available }, PrintHex => 1, PrintConvColumns => 2, PrintConv => [{ # stat device types (bitmask 0xf000) 0x0000 => 'Unknown', 0x1000 => 'FIFO', 0x2000 => 'Character', 0x3000 => 'Mux Character', 0x4000 => 'Directory', 0x5000 => 'XENIX Named', 0x6000 => 'Block', 0x7000 => 'Mux Block', 0x8000 => 'Regular', 0x9000 => 'VxFS Compressed', 0xa000 => 'Symbolic Link', 0xb000 => 'Solaris Shadow Inode', 0xc000 => 'Socket', 0xd000 => 'Solaris Door', 0xe000 => 'BSD Whiteout', },{ BITMASK => { # stat attribute bits (bitmask 0x0e00) 9 => 'Sticky', 10 => 'Set Group ID', 11 => 'Set User ID', }},{ BITMASK => { # Windows attribute bits 0 => 'Read Only', 1 => 'Hidden', 2 => 'System', 3 => 'Volume Label', 4 => 'Directory', 5 => 'Archive', 6 => 'Device', 7 => 'Normal', 8 => 'Temporary', 9 => 'Sparse File', 10 => 'Reparse Point', 11 => 'Compressed', 12 => 'Offline', 13 => 'Not Content Indexed', 14 => 'Encrypted', }}], }, FileDeviceID => { Groups => { 1 => 'System' }, %systemTagsNotes, PrintConv => '(($val >> 24) & 0xff) . "." . ($val & 0xffffff)', # (major.minor) }, FileDeviceNumber => { Groups => { 1 => 'System' }, %systemTagsNotes }, FileInodeNumber => { Groups => { 1 => 'System' }, %systemTagsNotes }, FileHardLinks => { Groups => { 1 => 'System' }, %systemTagsNotes }, FileUserID => { Groups => { 1 => 'System' }, %systemTagsNotes, PrintConv => 'eval { getpwuid($val) } || $val' }, FileGroupID => { Groups => { 1 => 'System' }, %systemTagsNotes, PrintConv => 'eval { getgrgid($val) } || $val' }, FileBlockSize => { Groups => { 1 => 'System' }, %systemTagsNotes }, FileBlockCount => { Groups => { 1 => 'System' }, %systemTagsNotes }, HardLink => { Writable => 1, WriteOnly => 1, Protected => 1, Notes => q{ this write-only tag is used to create a hard link to the file. If the file is edited, copied, renamed or moved in the same operation as writing HardLink, then the link is made to the updated file. Note that subsequent editing of either the linked file or the original by the exiftool application will break the link unless the -overwrite_original_in_place option is used }, ValueConvInv => '$val=~tr/\\\\/\//; $val', }, MIMEType => { Notes => 'the MIME type of the source file' }, ImageWidth => { Notes => 'the width of the image in number of pixels' }, ImageHeight => { Notes => 'the height of the image in number of pixels' }, XResolution => { Notes => 'the horizontal pixel resolution' }, YResolution => { Notes => 'the vertical pixel resolution' }, MaxVal => { Notes => 'maximum pixel value in PPM or PGM image' }, EXIF => { Notes => 'the full EXIF data block from JPEG, PNG, JP2, MIE and MIFF images', Groups => { 0 => 'EXIF', 1 => 'EXIF' }, Flags => ['Writable' ,'Protected', 'Binary'], WriteCheck => q{ return undef if $val =~ /^(II\x2a\0|MM\0\x2a)/; return 'Invalid EXIF data'; }, }, IPTC => { Notes => 'the full IPTC data block', Groups => { 0 => 'IPTC', 1 => 'IPTC' }, Flags => ['Writable', 'Protected', 'Binary'], Priority => 0, # so main IPTC (which hopefully comes first) takes priority WriteCheck => q{ return undef if $val =~ /^(\x1c|\0+$)/; return 'Invalid IPTC data'; }, }, XMP => { Notes => q{ the XMP data block, but note that extended XMP in JPEG images may be split into multiple blocks }, Groups => { 0 => 'XMP', 1 => 'XMP' }, Flags => ['Writable', 'Protected', 'Binary'], Priority => 0, # so main xmp (which usually comes first) takes priority WriteCheck => q{ require Image::ExifTool::XMP; return Image::ExifTool::XMP::CheckXMP($self, $tagInfo, \$val); }, }, ICC_Profile => { Notes => 'the full ICC_Profile data block', Groups => { 0 => 'ICC_Profile', 1 => 'ICC_Profile' }, Flags => ['Writable' ,'Protected', 'Binary'], WriteCheck => q{ require Image::ExifTool::ICC_Profile; return Image::ExifTool::ICC_Profile::ValidateICC(\$val); }, }, CanonVRD => { Notes => 'the full Canon DPP VRD trailer block', Groups => { 0 => 'CanonVRD', 1 => 'CanonVRD' }, Flags => ['Writable' ,'Protected', 'Binary'], Permanent => 0, # (this is 1 by default for MakerNotes tags) WriteCheck => q{ return undef if $val =~ /^CANON OPTIONAL DATA\0/; return 'Invalid CanonVRD data'; }, }, CanonDR4 => { Notes => 'the full Canon DPP version 4 DR4 block', Groups => { 0 => 'CanonVRD', 1 => 'CanonVRD' }, Flags => ['Writable' ,'Protected', 'Binary'], Permanent => 0, # (this is 1 by default for MakerNotes tags) WriteCheck => q{ return undef if $val =~ /^IIII\x04\0\x04\0/; return 'Invalid CanonDR4 data'; }, }, Adobe => { Notes => q{ the JPEG APP14 Adobe segment. Extracted only if specified. See the L<JPEG Adobe Tags|JPEG.html#Adobe> for more information }, Groups => { 0 => 'APP14', 1 => 'Adobe' }, WriteGroup => 'Adobe', Flags => ['Writable' ,'Protected', 'Binary'], }, CurrentIPTCDigest => { Notes => q{ MD5 digest of existing IPTC data. All zeros if IPTC exists but Digest::MD5 is not installed. Only calculated for IPTC in the standard location as specified by the L<MWG|http://www.metadataworkinggroup.org/>. ExifTool automates the handling of this tag in the MWG module -- see the L<MWG Composite Tags|MWG.html> for details }, ValueConv => 'unpack("H*", $val)', }, PreviewImage => { Notes => 'JPEG-format embedded preview image', Groups => { 2 => 'Preview' }, Writable => 1, WriteCheck => '$self->CheckImage(\$val)', # can't delete, so set to empty string and return no error DelCheck => '$val = ""; return undef', # accept either scalar or scalar reference RawConv => '$self->ValidateImage(ref $val ? $val : \$val, $tag)', }, PreviewPNG => { Groups => { 2 => 'Preview' }, Notes => 'PNG-format embedded preview image', Binary => 1, }, PreviewWMF => { Groups => { 2 => 'Preview' }, Notes => 'WMF-format embedded preview image', Binary => 1, }, ExifByteOrder => { Writable => 1, Notes => q{ represents the byte order of EXIF information. May be written to set the byte order only for newly created EXIF segments }, PrintConv => { II => 'Little-endian (Intel, II)', MM => 'Big-endian (Motorola, MM)', }, }, ExifUnicodeByteOrder => { Writable => 1, WriteOnly => 1, Notes => q{ specifies the byte order to use when writing EXIF Unicode text. The EXIF specification is particularly vague about this byte ordering, and different applications use different conventions. By default ExifTool writes Unicode text in EXIF byte order, but this write-only tag may be used to force a specific order }, PrintConv => { II => 'Little-endian (Intel, II)', MM => 'Big-endian (Motorola, MM)', }, }, ExifToolVersion => { Description => 'ExifTool Version Number', Groups => \%allGroupsExifTool, Notes => 'the version of ExifTool currently running', }, ProcessingTime => { Groups => { 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'Other' }, Notes => q{ the clock time in seconds taken by ExifTool to extract information from this file. Not generated unless specifically requested or the RequestAll API option is set. Requires Time::HiRes }, PrintConv => 'sprintf("%.3f s", $val)', }, RAFVersion => { Notes => 'RAF file version number' }, JPEGDigest => { Notes => q{ an MD5 digest of the JPEG quantization tables is combined with the component sub-sampling values to generate the value of this tag. The result is compared to known values in an attempt to deduce the originating software based only on the JPEG image data. For performance reasons, this tag is generated only if specifically requested }, }, JPEGQualityEstimate => { Notes => q{ an estimate of the IJG JPEG quality setting for the image, calculated from the quantization tables. For performance reasons, this tag is generated only if specifically requested }, }, Now => { Groups => { 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'Time' }, Notes => q{ the current date/time. Useful when setting the tag values, eg. C<"-modifydate<now">. Not generated unless specifically requested or the RequestAll API option is set }, PrintConv => '$self->ConvertDateTime($val)', }, NewGUID => { Groups => { 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'Other' }, Notes => q{ generates a new, random GUID with format YYYYmmdd-HHMM-SSNN-PPPP-RRRRRRRRRRRR, where Y=year, m=month, d=day, H=hour, M=minute, S=second, N=file sequence number in hex, P=process ID in hex, and R=random hex number; without dashes with the -n option. Not generated unless specifically requested or the RequestAll API option is set }, PrintConv => '$val =~ s/(.{8})(.{4})(.{4})(.{4})/$1-$2-$3-$4-/; $val', }, ID3Size => { Notes => 'size of the ID3 data block' }, Geotag => { Writable => 1, WriteOnly => 1, AllowGroup => '(exif|gps|xmp|xmp-exif)', Notes => q{ this write-only tag is used to define the GPS track log data or track log file name. Currently supported track log formats are GPX, NMEA RMC/GGA/GLL, KML, IGC, Garmin XML and TCX, Magellan PMGNTRK, Honeywell PTNTHPR, Winplus Beacon text, and Bramor gEO log files. See L<geotag.html|../geotag.html> for details }, DelCheck => q{ require Image::ExifTool::Geotag; # delete associated tags Image::ExifTool::Geotag::SetGeoValues($self, undef, $wantGroup); }, ValueConvInv => q{ require Image::ExifTool::Geotag; # always warn because this tag is never set (warning is "\n" on success) my $result = Image::ExifTool::Geotag::LoadTrackLog($self, $val); return '' if not defined $result; # deleting geo tags return $result if ref $result; # geotag data hash reference warn "$result\n"; # error string }, }, Geotime => { Writable => 1, WriteOnly => 1, AllowGroup => '(exif|gps|xmp|xmp-exif)', Notes => q{ this write-only tag is used to define a date/time for interpolating a position in the GPS track specified by the Geotag tag. Writing this tag causes GPS information to be written into the EXIF or XMP of the target files. The local system timezone is assumed if the date/time value does not contain a timezone. May be deleted to delete associated GPS tags. A group name of 'EXIF' or 'XMP' may be specified to write or delete only EXIF or XMP GPS tags. The Geotag tag must be assigned before this tag }, DelCheck => q{ require Image::ExifTool::Geotag; # delete associated tags Image::ExifTool::Geotag::SetGeoValues($self, undef, $wantGroup); }, ValueConvInv => q{ require Image::ExifTool::Geotag; warn Image::ExifTool::Geotag::SetGeoValues($self, $val, $wantGroup) . "\n"; return undef; }, }, Geosync => { Writable => 1, WriteOnly => 1, AllowGroup => '(exif|gps|xmp|xmp-exif)', Shift => 'Time', # enables "+=" syntax as well as "=+" Notes => q{ this write-only tag specifies a time difference to add to Geotime for synchronization with the GPS clock. For example, set this to "-12" if the camera clock is 12 seconds faster than GPS time. Input format is "[+-][[[DD ]HH:]MM:]SS[.ss]". Must be set before Geotime to be effective. Additional features allow calculation of time differences and time drifts, and extraction of synchronization times from image files. See the L<geotagging documentation|../geotag.html> for details }, ValueConvInv => q{ require Image::ExifTool::Geotag; return Image::ExifTool::Geotag::ConvertGeosync($self, $val); }, }, MDItemTags => { Groups => { 1 => 'System', 2 => 'Other' }, Notes => q{ not a real tag. On OS X, a whole range of system-specific metadata tags with names starting with "MDItem" may be extracted if specifically requested, or if the MDItemTags API option is set. Requires that the "mdls" utility is available }, }, ); # YCbCrSubSampling values (used by JPEG SOF, EXIF and XMP) %Image::ExifTool::JPEG::yCbCrSubSampling = ( '1 1' => 'YCbCr4:4:4 (1 1)', #PH '2 1' => 'YCbCr4:2:2 (2 1)', #14 in Exif.pm '2 2' => 'YCbCr4:2:0 (2 2)', #14 in Exif.pm '4 1' => 'YCbCr4:1:1 (4 1)', #14 in Exif.pm '4 2' => 'YCbCr4:1:0 (4 2)', #PH '1 2' => 'YCbCr4:4:0 (1 2)', #PH '1 4' => 'YCbCr4:4:1 (1 4)', #JD '2 4' => 'YCbCr4:2:1 (2 4)', #JD ); # define common JPEG segments here to avoid overhead of loading JPEG module # JPEG SOF (start of frame) tags # (ref http://www.w3.org/Graphics/JPEG/itu-t81.pdf) %Image::ExifTool::JPEG::SOF = ( GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' }, NOTES => 'This information is extracted from the JPEG Start Of Frame segment.', VARS => { NO_ID => 1 }, # tag ID's aren't meaningful for these tags EncodingProcess => { PrintHex => 1, PrintConv => { 0x0 => 'Baseline DCT, Huffman coding', 0x1 => 'Extended sequential DCT, Huffman coding', 0x2 => 'Progressive DCT, Huffman coding', 0x3 => 'Lossless, Huffman coding', 0x5 => 'Sequential DCT, differential Huffman coding', 0x6 => 'Progressive DCT, differential Huffman coding', 0x7 => 'Lossless, Differential Huffman coding', 0x9 => 'Extended sequential DCT, arithmetic coding', 0xa => 'Progressive DCT, arithmetic coding', 0xb => 'Lossless, arithmetic coding', 0xd => 'Sequential DCT, differential arithmetic coding', 0xe => 'Progressive DCT, differential arithmetic coding', 0xf => 'Lossless, differential arithmetic coding', } }, BitsPerSample => { }, ImageHeight => { }, ImageWidth => { }, ColorComponents => { }, YCbCrSubSampling => { Notes => 'calculated from components table', PrintConv => \%Image::ExifTool::JPEG::yCbCrSubSampling, }, ); # JPEG JFIF APP0 definitions %Image::ExifTool::JFIF::Main = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, GROUPS => { 0 => 'JFIF', 1 => 'JFIF', 2 => 'Image' }, DATAMEMBER => [ 2, 3, 5 ], 0 => { Name => 'JFIFVersion', Format => 'int8u[2]', PrintConv => 'sprintf("%d.%.2d", split(" ",$val))', Mandatory => 1, }, 2 => { Name => 'ResolutionUnit', Writable => 1, RawConv => '$$self{JFIFResolutionUnit} = $val', PrintConv => { 0 => 'None', 1 => 'inches', 2 => 'cm', }, Priority => -1, Mandatory => 1, }, 3 => { Name => 'XResolution', Format => 'int16u', Writable => 1, Priority => -1, RawConv => '$$self{JFIFXResolution} = $val', Mandatory => 1, }, 5 => { Name => 'YResolution', Format => 'int16u', Writable => 1, Priority => -1, RawConv => '$$self{JFIFYResolution} = $val', Mandatory => 1, }, ); %Image::ExifTool::JFIF::Extension = ( GROUPS => { 0 => 'JFIF', 1 => 'JFIF', 2 => 'Image' }, 0x10 => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, RawConv => '$self->ValidateImage(\$val,$tag)', }, ); # Composite tags (accumulation of all Composite tag tables) %Image::ExifTool::Composite = ( GROUPS => { 0 => 'Composite', 1 => 'Composite' }, TABLE_NAME => 'Image::ExifTool::Composite', SHORT_NAME => 'Composite', VARS => { NO_ID => 1 }, # want empty tagID's for Composite tags WRITE_PROC => \&DummyWriteProc, ); # static private ExifTool variables %allTables = ( ); # list of all tables loaded (except Composite tags) @tableOrder = ( ); # order the tables were loaded #------------------------------------------------------------------------------ # Warning handler routines (warning string stored in $evalWarning) # # Set warning message # Inputs: 0) warning string (undef to reset warning) sub SetWarning($) { $evalWarning = $_[0]; } # Get warning message sub GetWarning() { return $evalWarning; } # Clean unnecessary information (line number, LF) from warning # Inputs: 0) warning string or undef to use current warning # Returns: cleaned warning sub CleanWarning(;$) { my $str = shift; unless (defined $str) { return undef unless defined $evalWarning; $str = $evalWarning; } $str = $1 if $str =~ /(.*) at /s; $str =~ s/\s+$//s; return $str; } #============================================================================== # New - create new ExifTool object # Inputs: 0) reference to exiftool object or ExifTool class name # Returns: blessed ExifTool object ref sub new { local $_; my $that = shift; my $class = ref($that) || $that || 'Image::ExifTool'; my $self = bless {}, $class; # make sure our main Exif tag table has been loaded GetTagTable("Image::ExifTool::Exif::Main"); $self->ClearOptions(); # create default options hash $$self{VALUE} = { }; # must initialize this for warning messages $$self{DEL_GROUP} = { }; # lookup for groups to delete when writing $$self{SAVE_COUNT} = 0; # count calls to SaveNewValues() $$self{FILE_SEQUENCE} = 0; # sequence number for files when reading # initialize our new groups for writing $self->SetNewGroups(@defaultWriteGroups); return $self; } #------------------------------------------------------------------------------ # ImageInfo - return specified information from image file # Inputs: 0) [optional] ExifTool object reference # 1) filename, file reference, or scalar data reference # 2-N) list of tag names to find (or tag list reference or options reference) # Returns: reference to hash of tag/value pairs (with "Error" entry on error) # Notes: # - if no tags names are specified, the values of all tags are returned # - tags may be specified with leading '-' to exclude, or trailing '#' for ValueConv # - can pass a reference to list of tags to find, in which case the list will # be updated with the tags found in the proper case and in the specified order. # - can pass reference to hash specifying options # - returned tag values may be scalar references indicating binary data # - see ClearOptions() below for a list of options and their default values # Examples: # use Image::ExifTool 'ImageInfo'; # my $info = ImageInfo($file, 'DateTimeOriginal', 'ImageSize'); # - or - # my $et = new Image::ExifTool; # my $info = $et->ImageInfo($file, \@tagList, {Sort=>'Group0'} ); sub ImageInfo($;@) { local $_; # get our ExifTool object ($self) or create one if necessary my $self; if (ref $_[0] and UNIVERSAL::isa($_[0],'Image::ExifTool')) { $self = shift; } else { $self = new Image::ExifTool; } my %saveOptions = %{$$self{OPTIONS}}; # save original options # initialize file information $$self{FILENAME} = $$self{RAF} = undef; $self->ParseArguments(@_); # parse our function arguments $self->ExtractInfo(undef); # extract meta information from image my $info = $self->GetInfo(undef); # get requested information $$self{OPTIONS} = \%saveOptions; # restore original options return $info; # return requested information } #------------------------------------------------------------------------------ # Get/set ExifTool options # Inputs: 0) ExifTool object reference, # 1) Parameter name (case insensitive), 2) Value to set the option # 3-N) More parameter/value pairs # Returns: original value of last option specified sub Options($$;@) { local $_; my $self = shift; my $options = $$self{OPTIONS}; my $oldVal; while (@_) { my $param = shift; # fix parameter case if necessary unless (exists $$options{$param}) { my ($fixed) = grep /^$param$/i, keys %$options; if ($fixed) { $param = $fixed; } else { $param =~ s/^Group(\d*)$/Group$1/i; } } $oldVal = $$options{$param}; last unless @_; my $newVal = shift; if ($param eq 'Lang') { # allow this to be set to undef to select the default language $newVal = $defaultLang unless defined $newVal; if ($newVal eq $defaultLang) { $$options{$param} = $newVal; delete $$self{CUR_LANG}; # make sure the language is available } elsif (eval "require Image::ExifTool::Lang::$newVal") { my $xlat = "Image::ExifTool::Lang::${newVal}::Translate"; no strict 'refs'; if (%$xlat) { $$self{CUR_LANG} = \%$xlat; $$options{$param} = $newVal; } } # else don't change Lang } elsif ($param eq 'Exclude' and defined $newVal) { # clone Exclude list and expand shortcuts my @exclude; if (ref $newVal eq 'ARRAY') { @exclude = @$newVal; } else { @exclude = ($newVal); } ExpandShortcuts(\@exclude, 1); # (also remove '#' suffix) $$options{$param} = \@exclude; } elsif ($param =~ /^Charset/ or $param eq 'IPTCCharset') { # only allow valid character sets to be set if ($newVal) { my $charset = $charsetName{lc $newVal}; if ($charset) { $$options{$param} = $charset; # maintain backward-compatibility with old IPTCCharset option $$options{CharsetIPTC} = $charset if $param eq 'IPTCCharset'; } else { warn "Invalid Charset $newVal\n"; } } elsif ($param eq 'CharsetEXIF' or $param eq 'CharsetFileName') { $$options{$param} = $newVal; # only CharsetEXIF and CharsetFileName may be set to a false value } elsif ($param eq 'CharsetQuickTime') { $$options{$param} = 'MacRoman'; # QuickTime defaults to MacRoman } else { $$options{$param} = 'Latin'; # all others default to Latin } } elsif ($param eq 'UserParam') { # allow initialization of entire UserParam hash ref $newVal eq 'HASH' and $$options{$param} = { %$newVal }, next; # set/reset single UserParam parameter if ($newVal =~ /(.*?)=(.*)/s) { $param = lc $1; $newVal = $2; } else { $param = lc $newVal; undef $newVal; } $oldVal = $$options{UserParam}{$param}; if (defined $newVal) { if (length $newVal) { $$options{UserParam}{$param} = $newVal; } else { delete $$options{UserParam}{$param}; } } } elsif ($param eq 'RequestTags') { if (defined $newVal) { # parse list from delimited string if necessary my @reqList = (ref $newVal eq 'ARRAY') ? @$newVal : ($newVal =~ /(?:[-\w]+:)*[-\w?*]+/g); ExpandShortcuts(\@reqList); # add to existing list $$options{$param} or $$options{$param} = [ ]; foreach (@reqList) { push @{$$options{$param}}, lc($2) if /(^|:)([-\w?*]+)#?$/; } } else { $$options{$param} = undef; # clear the list } } else { if ($param eq 'Escape') { # set ESCAPE_PROC if (defined $newVal and $newVal eq 'XML') { require Image::ExifTool::XMP; $$self{ESCAPE_PROC} = \&Image::ExifTool::XMP::EscapeXML; } elsif (defined $newVal and $newVal eq 'HTML') { require Image::ExifTool::HTML; $$self{ESCAPE_PROC} = \&Image::ExifTool::HTML::EscapeHTML; } else { delete $$self{ESCAPE_PROC}; } # must forget saved values since they depend on Escape method $$self{BOTH} = { }; } $$options{$param} = $newVal; } } return $oldVal; } #------------------------------------------------------------------------------ # ClearOptions - set options to default values # Inputs: 0) ExifTool object reference sub ClearOptions($) { local $_; my $self = shift; # create options hash with default values # +-----------------------------------------------------+ # ! DON'T FORGET!! When adding any new option, must ! # ! decide how it is handled in SetNewValuesFromFile() ! # +-----------------------------------------------------+ # (Note: All options must exist in this lookup, even if undefined, # to facilitate case-insensitive options. 'Group#' is handled specially) $$self{OPTIONS} = { Binary => undef, # flag to extract binary values even if tag not specified ByteOrder => undef, # default byte order when creating EXIF information Charset => 'UTF8', # character set for converting Unicode characters CharsetEXIF => undef, # internal EXIF "ASCII" string encoding CharsetFileName => undef, # external encoding for file names CharsetID3 => 'Latin', # internal ID3v1 character set CharsetIPTC => 'Latin', # fallback IPTC character set if no CodedCharacterSet CharsetPhotoshop => 'Latin', # internal encoding for Photoshop resource names CharsetQuickTime => 'MacRoman', # internal QuickTime string encoding Compact => undef, # compact XMP and IPTC data Composite => 1, # flag to calculate Composite tags Compress => undef, # flag to write new values as compressed if possible CoordFormat => undef, # GPS lat/long coordinate format DateFormat => undef, # format for date/time Duplicates => 1, # flag to save duplicate tag values Escape => undef, # escape special characters Exclude => undef, # tags to exclude ExtendedXMP => 1, # strategy for reading extended XMP ExtractEmbedded =>undef,# flag to extract information from embedded documents FastScan => undef, # flag to avoid scanning for trailer Filter => undef, # output filter for all tag values FixBase => undef, # fix maker notes base offsets GeoMaxIntSecs => 1800, # geotag maximum interpolation time (secs) GeoMaxExtSecs => 1800, # geotag maximum extrapolation time (secs) GeoMaxHDOP => undef, # geotag maximum HDOP GeoMaxPDOP => undef, # geotag maximum PDOP GeoMinSats => undef, # geotag minimum satellites GlobalTimeShift => undef, # apply time shift to all extracted date/time values # Group# => undef, # return tags for specified groups in family # HtmlDump => 0, # HTML dump (0-3, higher # = bigger limit) HtmlDumpBase => undef, # base address for HTML dump IgnoreMinorErrors => undef, # ignore minor errors when reading/writing Lang => $defaultLang,# localized language for descriptions etc LargeFileSupport => undef, # flag indicating support of 64-bit file offsets List => undef, # extract lists of PrintConv values into arrays ListItem => undef, # used to return a specific item from lists ListSep => ', ', # list item separator ListSplit => undef, # regex for splitting list-type tag values when writing MakerNotes => undef, # extract maker notes as a block MDItemTags => undef, # extract OS X metadata item tags MissingTagValue =>undef,# value for missing tags when expanded in expressions NoPDFList => undef, # flag to avoid splitting PDF List-type tag values Password => undef, # password for password-protected PDF documents PNGEarlyXMP => undef, # write XMP in PNG images before IDAT chunk PrintConv => 1, # flag to enable print conversion QuickTimeUTC=> undef, # assume that QuickTime date/time tags are stored as UTC RequestAll => undef, # extract all tags that must be specifically requested RequestTags => undef, # extra tags to request (on top of those in the tag list) SavePath => undef, # (undocumented) save family 5 location path ScanForXMP => undef, # flag to scan for XMP information in all files Sort => 'Input', # order to sort found tags (Input, File, Tag, Descr, Group#) Sort2 => 'File', # secondary sort order for tags in a group (File, Tag, Descr) StrictDate => undef, # flag to return undef for invalid date conversions Struct => undef, # return structures as hash references SystemTags => undef, # extract additional File System tags TextOut => \*STDOUT,# file for Verbose/HtmlDump output Unknown => 0, # flag to get values of unknown tags (0-2) UserParam => { }, # user parameters for InsertTagValues() Verbose => 0, # print verbose messages (0-5, higher # = more verbose) WriteMode => 'wcg', # enable all write modes by default XMPAutoConv => 1, # automatic conversion of unknown XMP tag values }; # keep necessary member variables in sync with options delete $$self{CUR_LANG}; delete $$self{ESCAPE_PROC}; # load user-defined default options if (%Image::ExifTool::UserDefined::Options) { foreach (keys %Image::ExifTool::UserDefined::Options) { $self->Options($_, $Image::ExifTool::UserDefined::Options{$_}); } } } #------------------------------------------------------------------------------ # Extract meta information from image # Inputs: 0) ExifTool object reference # 1-N) Same as ImageInfo() # Returns: 1 if this was a valid image, 0 otherwise # Notes: pass an undefined value to avoid parsing arguments # Internal 'ReEntry' option allows this routine to be called recursively sub ExtractInfo($;@) { local $_; my $self = shift; my $options = $$self{OPTIONS}; # pointer to current options my $fast = $$options{FastScan}; my (%saveOptions, $reEntry, $rsize, $type, @startTime); # check for internal ReEntry option to allow recursive calls to ExtractInfo if (ref $_[1] eq 'HASH' and $_[1]{ReEntry} and (ref $_[0] eq 'SCALAR' or ref $_[0] eq 'GLOB')) { # save necessary members for restoring later $reEntry = { RAF => $$self{RAF}, PROCESSED => $$self{PROCESSED}, EXIF_DATA => $$self{EXIF_DATA}, EXIF_POS => $$self{EXIF_POS}, FILE_TYPE => $$self{FILE_TYPE}, }; $$self{RAF} = new File::RandomAccess($_[0]); $$self{PROCESSED} = { }; delete $$self{EXIF_DATA}; delete $$self{EXIF_POS}; } else { if (defined $_[0] or $$options{HtmlDump}) { %saveOptions = %$options; # save original options # require duplicates for html dump $self->Options(Duplicates => 1) if $$options{HtmlDump}; if (defined $_[0]) { # only initialize filename if called with arguments $$self{FILENAME} = undef; # name of file (or '' if we didn't open it) $$self{RAF} = undef; # RandomAccess object reference $self->ParseArguments(@_); # initialize from our arguments } } # initialize ExifTool object members $self->Init(); delete $$self{MAKER_NOTE_FIXUP}; # fixup information for extracted maker notes delete $$self{MAKER_NOTE_BYTE_ORDER}; # return our version number my $reqAll = $$options{RequestAll}; $self->FoundTag('ExifToolVersion', "$VERSION$RELEASE"); $self->FoundTag('Now', TimeNow()) if $$self{REQ_TAG_LOOKUP}{now} or $reqAll; $self->FoundTag('NewGUID', NewGUID()) if $$self{REQ_TAG_LOOKUP}{newguid} or $reqAll; # generate sequence number if necessary if ($$self{REQ_TAG_LOOKUP}{filesequence} or $reqAll) { $self->FoundTag('FileSequence', $$self{FILE_SEQUENCE}); } if ($$self{REQ_TAG_LOOKUP}{processingtime} or $reqAll) { eval { require Time::HiRes; @startTime = Time::HiRes::gettimeofday() }; if (not @startTime and $$self{REQ_TAG_LOOKUP}{processingtime}) { $self->WarnOnce('Install Time::HiRes to generate ProcessingTime'); } } ++$$self{FILE_SEQUENCE}; # count files read } my $filename = $$self{FILENAME}; # image file name ('' if already open) my $raf = $$self{RAF}; # RandomAccess object local *EXIFTOOL_FILE; # avoid clashes with global namespace my $realname = $filename; unless ($raf) { # save file name if (defined $filename and $filename ne '') { unless ($filename eq '-') { # extract file name from pipe if necessary $realname =~ /\|$/ and $realname =~ s/^.*?"(.*?)".*/$1/s; my ($dir, $name); if (eval { require File::Basename }) { $dir = File::Basename::dirname($realname); $name = File::Basename::basename($realname); } else { ($name = $realname) =~ tr/\\/\//; # remove path $dir = length($1) ? $1 : '/' if $name =~ s/(.*)\///; } $self->FoundTag('FileName', $name); $self->FoundTag('Directory', $dir) if defined $dir and length $dir; if ($$self{REQ_TAG_LOOKUP}{filepath} or ($$options{RequestAll} and not $$self{EXCL_TAG_LOOKUP}{filepath})) { local $SIG{'__WARN__'} = \&SetWarning; if (eval { require Cwd }) { my $path = eval { Cwd::abs_path($filename) }; $self->FoundTag('FilePath', $path) if defined $path; } elsif ($$self{REQ_TAG_LOOKUP}{filepath}) { $self->WarnOnce('The Perl Cwd module must be installed to use FilePath'); } } # get size of resource fork on Mac OS $rsize = -s "$filename/..namedfork/rsrc" if $^O eq 'darwin' and not $$self{IN_RESOURCE}; } # open the file if ($self->Open(\*EXIFTOOL_FILE, $filename)) { # create random access file object $raf = new File::RandomAccess(\*EXIFTOOL_FILE); # patch to force pipe to be buffered because seek returns success # in Windows cmd shell pipe even though it really failed $$raf{TESTED} = -1 if $filename eq '-' or $filename =~ /\|$/; $$self{RAF} = $raf; } else { $self->Error('Error opening file'); } } else { $self->Error('No file specified'); } } if ($raf) { my @stat; if ($reEntry) { # we already set these tags } elsif (not $$raf{FILE_PT}) { # get file size from image in memory $self->FoundTag('FileSize', length ${$$raf{BUFF_PT}}); } elsif (-f $$raf{FILE_PT}) { # get file tags if this is a plain file my $fileSize = -s _; @stat = stat _; my ($aTime, $mTime, $cTime) = $self->GetFileTime($$raf{FILE_PT}); $self->FoundTag('FileSize', $fileSize) if defined $fileSize; $self->FoundTag('ResourceForkSize', $rsize) if $rsize; $self->FoundTag('FileModifyDate', $mTime) if defined $mTime; $self->FoundTag('FileAccessDate', $aTime) if defined $aTime; my $cTag = $^O eq 'MSWin32' ? 'FileCreateDate' : 'FileInodeChangeDate'; $self->FoundTag($cTag, $cTime) if defined $cTime; $self->FoundTag('FilePermissions', $stat[2]) if defined $stat[2]; } else { @stat = stat $$raf{FILE_PT}; } # extract more system info if SystemTags option is set if (@stat) { my $sys = $$options{SystemTags} || ($$options{RequestAll} and not defined $$options{SystemTags}); my $req = $$self{REQ_TAG_LOOKUP}; if ($sys or $$req{fileattributes}) { my @attr = ($stat[2] & 0xf000, $stat[2] & 0x0e00); # add Windows file attributes if available if ($^O eq 'MSWin32' and defined $filename and $filename ne '' and $filename ne '-') { local $SIG{'__WARN__'} = \&SetWarning; if (eval { require Win32API::File }) { my $wattr; my $file = $filename; if ($self->EncodeFileName($file)) { $wattr = eval { Win32API::File::GetFileAttributesW($file) }; } else { $wattr = eval { Win32API::File::GetFileAttributes($file) }; } push @attr, $wattr if defined $wattr and $wattr != 0xffffffff; } } $self->FoundTag('FileAttributes', "@attr"); } $self->FoundTag('FileDeviceNumber', $stat[0]) if $sys or $$req{filedevicenumber}; $self->FoundTag('FileInodeNumber', $stat[1]) if $sys or $$req{fileinodenumber}; $self->FoundTag('FileHardLinks', $stat[3]) if $sys or $$req{filehardlinks}; $self->FoundTag('FileUserID', $stat[4]) if $sys or $$req{fileuserid}; $self->FoundTag('FileGroupID', $stat[5]) if $sys or $$req{filegroupid}; $self->FoundTag('FileDeviceID', $stat[6]) if $sys or $$req{filedeviceid}; $self->FoundTag('FileBlockSize', $stat[11]) if $sys or $$req{fileblocksize}; $self->FoundTag('FileBlockCount', $stat[12]) if $sys or $$req{fileblockcount}; } # extract MDItem tags if requested (not extracted with RequestAll for performance reasons) if ($^O eq 'darwin' and ($$options{MDItemTags} || grep /^mditem/i, keys %{$$self{REQ_TAG_LOOKUP}}) and defined $filename and $filename ne '' and $filename ne '-') { my ($fn, $tag, $val); local $SIG{'__WARN__'} = \&SetWarning; undef $evalWarning; ($fn = $filename) =~ s/([`"\$\\])/\\$1/g; # escape necessary characters my @mdls = eval {`mdls "$fn" 2> /dev/null`}; # get OS X metadata unless ($evalWarning) { my $extra = GetTagTable('Image::ExifTool::Extra'); foreach (@mdls) { chomp; if (ref $val ne 'ARRAY') { s/^k(MDItem\w+)\s*= // or next; $tag = $1; $_ eq '(' and $val = [ ], next; # (start of a list) $_ = '' if $_ eq '(null)'; s/^"// and s/"$//; # remove quotes if they exist $val = $_; } elsif ($_ eq ')') { # (end of a list) $_ = $$val[0]; next unless defined $_; } else { # add item to list s/^ //; # remove leading spaces s/,$//; # remove trailing comma $_ = '' if $_ eq '(null)'; s/^"// and s/"$//; # remove quotes if they exist push @$val, $_; next; } # add to Extra tags if not done already unless ($$extra{$tag}) { # check for a date/time format my %tagInfo = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/ ? ( Groups => { 1 => 'System', 2 => 'Time' }, ValueConv => '$val=~tr/-/:/; $val=~s/ ([-+])/$1/; $val', PrintConv => '$self->ConvertDateTime($val)', ) : ( Groups => { 1 => 'System', 2 => 'Other' } ); $tagInfo{Name} = $tag; $tagInfo{List} = 1 if ref $val eq 'ARRAY'; $tagInfo{Groups}{2} = 'Audio' if $tag =~ /Audio/; $tagInfo{Groups}{2} = 'Author' if $tag =~ /(Copyright|Author)/; AddTagToTable($extra, $tag, \%tagInfo); } $self->FoundTag($tag, $val); undef $val; } } } # get list of file types to check my ($tiffType, %noMagic, $recognizedExt); my $ext = $$self{FILE_EXT} = GetFileExtension($realname); # set $recognizedExt if this file type is recognized by extension only $recognizedExt = $ext if defined $ext and not defined $magicNumber{$ext} and defined $moduleName{$ext} and not $moduleName{$ext}; my @fileTypeList = GetFileType($realname); if (@fileTypeList) { # add remaining types to end of list so we test them all my $pat = join '|', @fileTypeList; push @fileTypeList, grep(!/^($pat)$/, @fileTypes); $tiffType = $$self{FILE_EXT}; unless ($fast and $fast == 3) { $noMagic{MXF} = 1; # don't do magic number test on MXF or DV files $noMagic{DV} = 1; } } else { # scan through all recognized file types @fileTypeList = @fileTypes; $tiffType = 'TIFF'; } push @fileTypeList, ''; # end of list marker # initialize the input file for seeking in binary data $raf->BinMode(); # set binary mode before we start reading my $pos = $raf->Tell(); # get file position so we can rewind my %dirInfo = ( RAF => $raf, Base => $pos ); # loop through list of file types to test my ($buff, $seekErr); # read first 1024 bytes of file for testing $raf->Read($buff, 1024) or $buff = ''; $raf->Seek($pos, 0) or $seekErr = 1; until ($seekErr) { $type = shift @fileTypeList; if ($type) { # do quick test for this file type to avoid loading module unnecessarily next if $magicNumber{$type} and $buff !~ /^$magicNumber{$type}/s and not $noMagic{$type}; next if $weakMagic{$type} and defined $recognizedExt; } elsif (not defined $type) { last; } elsif ($recognizedExt) { $type = $recognizedExt; # set type from recognized file extension only } else { # last ditch effort to scan past unknown header for JPEG/TIFF next unless $buff =~ /(\xff\xd8\xff|MM\0\x2a|II\x2a\0)/g; $type = ($1 eq "\xff\xd8\xff") ? 'JPEG' : 'TIFF'; my $skip = pos($buff) - length($1); $dirInfo{Base} = $pos + $skip; $raf->Seek($pos + $skip, 0) or $seekErr = 1, last; $self->Warn("Skipped unknown $skip byte header"); } # save file type in member variable $$self{FILE_TYPE} = $type; $dirInfo{Parent} = ($type eq 'TIFF') ? $tiffType : $type; # don't process the file when FastScan == 3 if ($fast and $fast == 3 and not $processType{$type}) { unless ($weakMagic{$type} and (not $ext or $ext ne $type)) { $self->SetFileType($dirInfo{Parent}); } last; } my $module = $moduleName{$type}; $module = $type unless defined $module; my $func = "Process$type"; # load module if necessary if ($module) { require "Image/ExifTool/$module.pm"; $func = "Image::ExifTool::${module}::$func"; } elsif ($module eq '0') { $self->SetFileType(); $self->Warn('Unsupported file type'); last; } push @{$$self{PATH}}, $type; # save file type in metadata PATH # process the file no strict 'refs'; my $result = &$func($self, \%dirInfo); use strict 'refs'; pop @{$$self{PATH}}; last if $result; # all done if successful # seek back to try again from the same position in the file $raf->Seek($pos, 0) or $seekErr = 1, last; } if ($seekErr) { $self->Error('Error seeking in file'); } elsif ($self->Options('ScanForXMP') and (not defined $type or (not $fast and not $$self{FoundXMP}))) { # scan for XMP $raf->Seek($pos, 0); require Image::ExifTool::XMP; Image::ExifTool::XMP::ScanForXMP($self, $raf) and $type = ''; } if (not defined $type and not $$self{DOC_NUM}) { # if we were given a single image with a known type there # must be a format error since we couldn't read it, otherwise # it is likely we don't support images of this type my $fileType = GetFileType($realname); my $err; if (not $fileType) { $err = 'Unknown file type'; } elsif ($fileType eq 'RAW') { $err = 'Unsupported RAW file type'; } else { $err = 'File format error'; } $self->Error($err); } # extract binary EXIF data block only if requested if (defined $$self{EXIF_DATA} and length $$self{EXIF_DATA} > 16 and ($$self{REQ_TAG_LOOKUP}{exif} or # (not extracted normally, so check TAGS_FROM_FILE) ($$self{TAGS_FROM_FILE} and not $$self{EXCL_TAG_LOOKUP}{exif}))) { $self->FoundTag('EXIF', $$self{EXIF_DATA}); } unless ($reEntry) { $$self{PATH} = [ ]; # reset PATH # calculate Composite tags $self->BuildCompositeTags() if $$options{Composite}; # do our HTML dump if requested if ($$self{HTML_DUMP}) { $raf->Seek(0, 2); # seek to end of file $$self{HTML_DUMP}->FinishTiffDump($self, $raf->Tell()); my $pos = $$options{HtmlDumpBase}; $pos = ($$self{FIRST_EXIF_POS} || 0) unless defined $pos; my $dataPt = defined $$self{EXIF_DATA} ? \$$self{EXIF_DATA} : undef; undef $dataPt if defined $$self{EXIF_POS} and $pos != $$self{EXIF_POS}; my $success = $$self{HTML_DUMP}->Print($raf, $dataPt, $pos, $$options{TextOut}, $$options{HtmlDump}, $$self{FILENAME} ? "HTML Dump ($$self{FILENAME})" : 'HTML Dump'); $self->Warn("Error reading $$self{HTML_DUMP}{ERROR}") if $success < 0; } } if ($filename) { $raf->Close(); # close the file if we opened it # process the resource fork as an embedded file on Mac filesystems if ($rsize and $$options{ExtractEmbedded}) { local *RESOURCE_FILE; if ($self->Open(\*RESOURCE_FILE, "$filename/..namedfork/rsrc")) { $$self{DOC_NUM} = $$self{DOC_COUNT} + 1; $$self{IN_RESOURCE} = 1; $self->ExtractInfo(\*RESOURCE_FILE, { ReEntry => 1 }); close RESOURCE_FILE; delete $$self{IN_RESOURCE}; } else { $self->Warn('Error opening resource fork'); } } } } @startTime and $self->FoundTag('ProcessingTime', Time::HiRes::tv_interval(\@startTime)); # restore original options %saveOptions and $$self{OPTIONS} = \%saveOptions; if ($reEntry) { # restore necessary members when exiting re-entrant code $$self{$_} = $$reEntry{$_} foreach keys %$reEntry; } # ($type may be undef without an Error when processing sub-documents) return 0 if not defined $type or exists $$self{VALUE}{Error}; return 1; } #------------------------------------------------------------------------------ # Get hash of extracted meta information # Inputs: 0) ExifTool object reference # 1-N) options hash reference, tag list reference or tag names # Returns: Reference to information hash # Notes: - pass an undefined value to avoid parsing arguments # - If groups are specified, first groups take precedence if duplicate # tags found but Duplicates option not set. # - tag names may end in '#' to extract ValueConv value sub GetInfo($;@) { local $_; my $self = shift; my %saveOptions; unless (@_ and not defined $_[0]) { %saveOptions = %{$$self{OPTIONS}}; # save original options # must set FILENAME so it isn't parsed from the arguments $$self{FILENAME} = '' unless defined $$self{FILENAME}; $self->ParseArguments(@_); } # get reference to list of tags for which we will return info my ($rtnTags, $byValue, $wildTags) = $self->SetFoundTags(); # build hash of tag information my (%info, %ignored); my $conv = $$self{OPTIONS}{PrintConv} ? 'PrintConv' : 'ValueConv'; foreach (@$rtnTags) { my $val = $self->GetValue($_, $conv); defined $val or $ignored{$_} = 1, next; $info{$_} = $val; } # override specified tags with ValueConv value if necessary if (@$byValue) { # first determine the number of times each non-ValueConv value is used my %nonVal; $nonVal{$_} = ($nonVal{$_} || 0) + 1 foreach @$rtnTags; --$nonVal{$$rtnTags[$_]} foreach @$byValue; # loop through ValueConv tags, updating tag keys and returned values foreach (@$byValue) { my $tag = $$rtnTags[$_]; my $val = $self->GetValue($tag, 'ValueConv'); next unless defined $val; my $vtag = $tag; # generate a new tag key like "Tag #" or "Tag #(1)" $vtag =~ s/( |$)/ #/; unless (defined $$self{VALUE}{$vtag}) { $$self{VALUE}{$vtag} = $$self{VALUE}{$tag}; $$self{TAG_INFO}{$vtag} = $$self{TAG_INFO}{$tag}; $$self{TAG_EXTRA}{$vtag} = $$self{TAG_EXTRA}{$tag}; $$self{FILE_ORDER}{$vtag} = $$self{FILE_ORDER}{$tag}; # remove existing PrintConv entry unless we are using it too delete $info{$tag} unless $nonVal{$tag}; } $$rtnTags[$_] = $vtag; # store ValueConv value with new tag key $info{$vtag} = $val; # return ValueConv value } } # remove ignored tags from the list my $reqTags = $$self{REQUESTED_TAGS} || [ ]; if (%ignored) { if (not @$reqTags) { my @goodTags; foreach (@$rtnTags) { push @goodTags, $_ unless $ignored{$_}; } $rtnTags = $$self{FOUND_TAGS} = \@goodTags; } elsif (@$wildTags) { # only remove tags specified by wildcard my @goodTags; my $i = 0; foreach (@$rtnTags) { if (@$wildTags and $i == $$wildTags[0]) { shift @$wildTags; push @goodTags, $_ unless $ignored{$_}; } else { push @goodTags, $_; } ++$i; } $rtnTags = $$self{FOUND_TAGS} = \@goodTags; } } # return sorted tag list if provided with a list reference if ($$self{IO_TAG_LIST}) { # use file order by default if no tags specified # (no such thing as 'Input' order in this case) my $sort = $$self{OPTIONS}{Sort}; $sort = 'File' unless @$reqTags or ($sort and $sort ne 'Input'); # return tags in specified sort order @{$$self{IO_TAG_LIST}} = $self->GetTagList($rtnTags, $sort, $$self{OPTIONS}{Sort2}); } # restore original options %saveOptions and $$self{OPTIONS} = \%saveOptions; return \%info; } #------------------------------------------------------------------------------ # Combine information from a list of info hashes # Unless Duplicates is enabled, first entry found takes priority # Inputs: 0) ExifTool object reference, 1-N) list of info hash references # Returns: Combined information hash reference sub CombineInfo($;@) { local $_; my $self = shift; my (%combinedInfo, $info, $tag, %haveInfo); if ($$self{OPTIONS}{Duplicates}) { while ($info = shift) { foreach $tag (keys %$info) { $combinedInfo{$tag} = $$info{$tag}; } } } else { while ($info = shift) { foreach $tag (keys %$info) { my $tagName = GetTagName($tag); next if $haveInfo{$tagName}; $haveInfo{$tagName} = 1; $combinedInfo{$tag} = $$info{$tag}; } } } return \%combinedInfo; } #------------------------------------------------------------------------------ # Inputs: 0) ExifTool object reference # 1) [optional] reference to info hash or tag list ref (default is found tags) # 2) [optional] sort order ('File', 'Input', ...) # 3) [optional] secondary sort order # Returns: List of tags in specified order sub GetTagList($;$$$) { local $_; my ($self, $info, $sort, $sort2) = @_; my $foundTags; if (ref $info eq 'HASH') { my @tags = keys %$info; $foundTags = \@tags; } elsif (ref $info eq 'ARRAY') { $foundTags = $info; } my $fileOrder = $$self{FILE_ORDER}; if ($foundTags) { # make sure a FILE_ORDER entry exists for all tags # (note: already generated bogus entries for FOUND_TAGS case below) foreach (@$foundTags) { next if defined $$fileOrder{$_}; $$fileOrder{$_} = 999; } } else { $sort = $info if $info and not $sort; $foundTags = $$self{FOUND_TAGS} || $self->SetFoundTags() or return undef; } $sort or $sort = $$self{OPTIONS}{Sort}; # return original list if no sort order specified return @$foundTags unless $sort and $sort ne 'Input'; if ($sort eq 'Tag' or $sort eq 'Alpha') { return sort @$foundTags; } elsif ($sort =~ /^Group(\d*(:\d+)*)/) { my $family = $1 || 0; # want to maintain a basic file order with the groups # ordered in the way they appear in the file my (%groupCount, %groupOrder); my $numGroups = 0; my $tag; foreach $tag (sort { $$fileOrder{$a} <=> $$fileOrder{$b} } @$foundTags) { my $group = $self->GetGroup($tag, $family); my $num = $groupCount{$group}; $num or $num = $groupCount{$group} = ++$numGroups; $groupOrder{$tag} = $num; } $sort2 or $sort2 = $$self{OPTIONS}{Sort2}; if ($sort2) { if ($sort2 eq 'Tag' or $sort2 eq 'Alpha') { return sort { $groupOrder{$a} <=> $groupOrder{$b} or $a cmp $b } @$foundTags; } elsif ($sort2 eq 'Descr') { my $desc = $self->GetDescriptions($foundTags); return sort { $groupOrder{$a} <=> $groupOrder{$b} or $$desc{$a} cmp $$desc{$b} } @$foundTags; } } return sort { $groupOrder{$a} <=> $groupOrder{$b} or $$fileOrder{$a} <=> $$fileOrder{$b} } @$foundTags; } elsif ($sort eq 'Descr') { my $desc = $self->GetDescriptions($foundTags); return sort { $$desc{$a} cmp $$desc{$b} } @$foundTags; } else { return sort { $$fileOrder{$a} <=> $$fileOrder{$b} } @$foundTags; } } #------------------------------------------------------------------------------ # Get list of found tags in specified sort order # Inputs: 0) ExifTool object reference, 1) sort order ('File', 'Input', ...) # 2) secondary sort order # Returns: List of tag keys in specified order # Notes: If not specified, sort order is taken from OPTIONS sub GetFoundTags($;$$) { local $_; my ($self, $sort, $sort2) = @_; my $foundTags = $$self{FOUND_TAGS} || $self->SetFoundTags() or return undef; return $self->GetTagList($foundTags, $sort, $sort2); } #------------------------------------------------------------------------------ # Get list of requested tags # Inputs: 0) ExifTool object reference # Returns: List of requested tag keys sub GetRequestedTags($) { local $_; return @{$_[0]{REQUESTED_TAGS}}; } #------------------------------------------------------------------------------ # Get tag value # Inputs: 0) ExifTool object reference # 1) tag key (or flattened tagInfo for getting field values, not part of public API) # 2) [optional] Value type: PrintConv, ValueConv, Both, Raw or Rational, the default # is PrintConv or ValueConv, depending on the PrintConv option setting # 3) raw field value (not part of public API) # Returns: Scalar context: tag value or undefined # List context: list of values or empty list sub GetValue($$;$) { local $_; my ($self, $tag, $type) = @_; # plus: ($fieldValue) my (@convTypes, $tagInfo, $valueConv, $both); # figure out what conversions to do if ($type) { return $$self{RATIONAL}{$tag} if $type eq 'Rational'; } else { $type = $$self{OPTIONS}{PrintConv} ? 'PrintConv' : 'ValueConv'; } # start with the raw value my $value = $$self{VALUE}{$tag}; if (not defined $value) { return wantarray ? () : undef unless ref $tag; # get the value of a structure field $tagInfo = $tag; $tag = $$tagInfo{Name}; $value = $_[3]; # (note: type "Both" is not allowed for structure fields) if ($type ne 'Raw') { push @convTypes, 'ValueConv'; push @convTypes, 'PrintConv' unless $type eq 'ValueConv'; } } else { $tagInfo = $$self{TAG_INFO}{$tag}; if ($$tagInfo{Struct} and ref $value) { # must load XMPStruct.pl just in case (should already be loaded if # a structure was extracted, but we could also arrive here if a simple # list of values was stored incorrectly in a Struct tag) require 'Image/ExifTool/XMPStruct.pl'; # convert strucure field values unless ($type eq 'Both') { # (note: ConvertStruct handles the filtering and escaping too if necessary) return Image::ExifTool::XMP::ConvertStruct($self,$tagInfo,$value,$type); } $valueConv = Image::ExifTool::XMP::ConvertStruct($self,$tagInfo,$value,'ValueConv'); $value = Image::ExifTool::XMP::ConvertStruct($self,$tagInfo,$value,'PrintConv'); # (must not save these in $$self{BOTH} because the values may have been escaped) return ($valueConv, $value); } if ($type ne 'Raw') { # use values we calculated already if we stored them $both = $$self{BOTH}{$tag}; if ($both) { if ($type eq 'PrintConv') { $value = $$both[1]; } elsif ($type eq 'ValueConv') { $value = $$both[0]; $value = $$both[1] unless defined $value; } else { ($valueConv, $value) = @$both; } } else { push @convTypes, 'ValueConv'; push @convTypes, 'PrintConv' unless $type eq 'ValueConv'; } } } # do the conversions my (@val, @prt, @raw, $convType); foreach $convType (@convTypes) { # don't convert a scalar reference or structure last if ref $value eq 'SCALAR' and not $$tagInfo{ConvertBinary}; my $conv = $$tagInfo{$convType}; unless (defined $conv) { if ($convType eq 'ValueConv') { next unless $$tagInfo{Binary}; $conv = '\$val'; # return scalar reference for binary values } else { # use PRINT_CONV from tag table if PrintConv doesn't exist next unless defined($conv = $$tagInfo{Table}{PRINT_CONV}); next if exists $$tagInfo{$convType}; } } # save old ValueConv value if we want Both $valueConv = $value if $type eq 'Both' and $convType eq 'PrintConv'; my ($i, $val, $vals, @values, $convList); # split into list if conversion is an array if (ref $conv eq 'ARRAY') { $convList = $conv; $conv = $$convList[0]; my @valList = (ref $value eq 'ARRAY') ? @$value : split ' ', $value; # reorganize list if specified (Note: The writer currently doesn't # relist values, so they may be grouped but the order must not change) my $relist = $$tagInfo{Relist}; if ($relist) { my (@newList, $oldIndex); foreach $oldIndex (@$relist) { my ($newVal, @join); if (ref $oldIndex) { foreach (@$oldIndex) { push @join, $valList[$_] if defined $valList[$_]; } $newVal = join(' ', @join) if @join; } else { $newVal = $valList[$oldIndex]; } push @newList, $newVal if defined $newVal; } $value = \@newList; } else { $value = \@valList; } return wantarray ? () : undef unless @$value; } # initialize array so we can iterate over values in list if (ref $value eq 'ARRAY') { if (defined $$tagInfo{RawJoin}) { $val = join ' ', @$value; } else { $i = 0; $vals = $value; $val = $$vals[0]; } } else { $val = $value; } # loop through all values in list for (;;) { if (defined $conv) { # get values of required tags if this is a Composite tag if (ref $val eq 'HASH' and not @val) { # disable escape of source values so we don't double escape them my $oldEscape = $$self{ESCAPE_PROC}; delete $$self{ESCAPE_PROC}; # temporarily delete filter so it isn't applied to the Require'd values my $oldFilter = $$self{OPTIONS}{Filter}; delete $$self{OPTIONS}{Filter}; foreach (keys %$val) { $raw[$_] = $$self{VALUE}{$$val{$_}}; ($val[$_], $prt[$_]) = $self->GetValue($$val{$_}, 'Both'); next if defined $val[$_] or not $$tagInfo{Require}{$_}; $$self{ESCAPE_PROC} = $oldEscape; return wantarray ? () : undef; } $$self{OPTIONS}{Filter} = $oldFilter if defined $oldFilter; $$self{ESCAPE_PROC} = $oldEscape; # set $val to $val[0], or \@val for a CODE ref conversion $val = ref $conv eq 'CODE' ? \@val : $val[0]; } if (ref $conv eq 'HASH') { # look up converted value in hash my $lc; if (defined($value = $$conv{$val})) { # override with our localized language PrintConv if available if ($$self{CUR_LANG} and $convType eq 'PrintConv' and # (no need to check for lang-alt tag names -- they won't have a PrintConv) ref($lc = $$self{CUR_LANG}{$$tagInfo{Name}}) eq 'HASH' and ($lc = $$lc{PrintConv}) and ($lc = $$lc{$value})) { $value = $self->Decode($lc, 'UTF8'); } } else { if ($$conv{BITMASK}) { $value = DecodeBits($val, $$conv{BITMASK}, $$tagInfo{BitsPerWord}); # override with localized language strings if (defined $value and $$self{CUR_LANG} and $convType eq 'PrintConv' and ref($lc = $$self{CUR_LANG}{$$tagInfo{Name}}) eq 'HASH' and ($lc = $$lc{PrintConv})) { my @vals = split ', ', $value; foreach (@vals) { $_ = $$lc{$_} if defined $$lc{$_}; } $value = join ', ', @vals; } } elsif (not $$conv{OTHER} or # use alternate conversion routine if available not defined($value = &{$$conv{OTHER}}($val, undef, $conv))) { if (($$tagInfo{PrintHex} or ($$tagInfo{Mask} and not defined $$tagInfo{PrintHex})) and $val and IsInt($val) and $convType eq 'PrintConv') { $val = sprintf('0x%x',$val); } $value = "Unknown ($val)"; } } } else { # call subroutine or do eval to convert value local $SIG{'__WARN__'} = \&SetWarning; undef $evalWarning; if (ref $conv eq 'CODE') { $value = &$conv($val, $self); } else { #### eval ValueConv/PrintConv ($val, $self, @val, @prt, @raw) $value = eval $conv; $@ and $evalWarning = $@; } $self->Warn("$convType $tag: " . CleanWarning()) if $evalWarning; } } else { $value = $val; } last unless $vals; # must store a separate copy of each binary data value in the list if (ref $value eq 'SCALAR') { my $tval = $$value; $value = \$tval; } # save this converted value and step to next value in list push @values, $value if defined $value; if (++$i >= scalar(@$vals)) { $value = \@values if @values; last; } $val = $$vals[$i]; $conv = $$convList[$i] if $convList; } # return undefined now if no value return wantarray ? () : undef unless defined $value; # join back into single value if split for conversion list if ($convList and ref $value eq 'ARRAY') { $value = join($convType eq 'PrintConv' ? '; ' : ' ', @$value); } } if ($type eq 'Both') { # save both (unescaped) values because we often need them again # (Composite tags need "Both" and often Require one tag for various Composite tags) $$self{BOTH}{$tag} = [ $valueConv, $value ] unless $both; # escape values if necessary if ($$self{ESCAPE_PROC}) { DoEscape($value, $$self{ESCAPE_PROC}); if (defined $valueConv) { DoEscape($valueConv, $$self{ESCAPE_PROC}); } else { $valueConv = $value; } } elsif (not defined $valueConv) { # $valueConv is undefined if there was no print conversion done $valueConv = $value; } $self->Filter(\$value) if defined $$self{OPTIONS}{Filter}; # return Both values as a list (ValueConv, PrintConv) return ($valueConv, $value); } # escape value if necessary DoEscape($value, $$self{ESCAPE_PROC}) if $$self{ESCAPE_PROC}; # filter if necessary $self->Filter(\$value) if defined $$self{OPTIONS}{Filter} and $type eq 'PrintConv'; if (ref $value eq 'ARRAY') { if (defined $$self{OPTIONS}{ListItem}) { $value = $$value[$$self{OPTIONS}{ListItem}]; } elsif (wantarray) { # return array if requested return @$value; } elsif ($type eq 'PrintConv' and not $$self{OPTIONS}{List} and not ref $$value[0]) { # join PrintConv values in comma-separated string if List option not used # and list contains simple scalars (otherwise return ARRAY ref) $value = join $$self{OPTIONS}{ListSep}, @$value; } } return $value; } #------------------------------------------------------------------------------ # Get tag identification number # Inputs: 0) ExifTool object reference, 1) tag key # Returns: Scalar context: Tag ID if available, otherwise '' # List context: 0) Tag ID (or ''), 1) language code (or undef) sub GetTagID($$) { my ($self, $tag) = @_; my $tagInfo = $$self{TAG_INFO}{$tag}; return '' unless $tagInfo and defined $$tagInfo{TagID}; return ($$tagInfo{TagID}, $$tagInfo{LangCode}) if wantarray; return $$tagInfo{TagID}; } #------------------------------------------------------------------------------ # Get tag table name # Inputs: 0) ExifTool object reference, 1) tag key # Returns: Table name if available, otherwise '' sub GetTableName($$) { my ($self, $tag) = @_; my $tagInfo = $$self{TAG_INFO}{$tag} or return ''; return $$tagInfo{Table}{SHORT_NAME}; } #------------------------------------------------------------------------------ # Get tag index number # Inputs: 0) ExifTool object reference, 1) tag key # Returns: Table index number, or undefined if this tag isn't indexed sub GetTagIndex($$) { my ($self, $tag) = @_; my $tagInfo = $$self{TAG_INFO}{$tag} or return undef; return $$tagInfo{Index}; } #------------------------------------------------------------------------------ # Get description for specified tag # Inputs: 0) ExifTool object reference, 1) tag key # Returns: Tag description # Notes: Will always return a defined value, even if description isn't available sub GetDescription($$) { local $_; my ($self, $tag) = @_; my ($desc, $name); my $tagInfo = $$self{TAG_INFO}{$tag}; # ($tagInfo won't be defined for missing tags extracted with -f) if ($tagInfo) { # use alternate language description if available while ($$self{CUR_LANG}) { $desc = $$self{CUR_LANG}{$$tagInfo{Name}}; if ($desc) { # must look up Description if this tag also has a PrintConv $desc = $$desc{Description} or last if ref $desc; } else { # look up default language of lang-alt tag last unless $$tagInfo{LangCode} and ($name = $$tagInfo{Name}) =~ s/-$$tagInfo{LangCode}$// and $desc = $$self{CUR_LANG}{$name}; $desc = $$desc{Description} or last if ref $desc; $desc .= " ($$tagInfo{LangCode})"; } # escape description if necessary DoEscape($desc, $$self{ESCAPE_PROC}) if $$self{ESCAPE_PROC}; # return description in proper Charset return $self->Decode($desc, 'UTF8'); } $desc = $$tagInfo{Description}; } # just make the tag more readable if description doesn't exist unless ($desc) { $desc = MakeDescription(GetTagName($tag)); # save description in tag information $$tagInfo{Description} = $desc if $tagInfo; } return $desc; } #------------------------------------------------------------------------------ # Get group name for specified tag # Inputs: 0) ExifTool object reference # 1) tag key (or reference to tagInfo hash, not part of the public API) # 2) [optional] group family (-1 to get extended group list, or multiple # families separated by colons to return multiple groups as a string) # Returns: Scalar context: Group name (for family 0 if not otherwise specified) # Array context: Group name if family specified, otherwise list of # group names for each family. Returns '' for undefined tag. # Notes: Mutiple families may be specified with ':' in family argument (eg. '1:2') sub GetGroup($$;$) { local $_; my ($self, $tag, $family) = @_; my ($tagInfo, @groups, @families, $simplify, $byTagInfo, $ex); if (ref $tag eq 'HASH') { $tagInfo = $tag; $tag = $$tagInfo{Name}; # set flag so we don't get extra information for an extracted tag $byTagInfo = 1; } else { $tagInfo = $$self{TAG_INFO}{$tag} || { }; $ex = $$self{TAG_EXTRA}{$tag}; } my $groups = $$tagInfo{Groups}; # fill in default groups unless already done # (after this, Groups 0-2 in tagInfo are guaranteed to be defined) unless ($$tagInfo{GotGroups}) { my $tagTablePtr = $$tagInfo{Table} || { GROUPS => { } }; # construct our group list $groups or $groups = $$tagInfo{Groups} = { }; # fill in default groups foreach (0..2) { $$groups{$_} = $$tagTablePtr{GROUPS}{$_} || '' unless $$groups{$_}; } # set flag indicating group list was built $$tagInfo{GotGroups} = 1; } if (defined $family and $family ne '-1') { if ($family =~ /[^\d]/) { @families = ($family =~ /\d+/g); return(($ex && $$ex{G0}) || $$groups{0}) unless @families; $simplify = 1 unless $family =~ /^:/; undef $family; foreach (0..2) { $groups[$_] = $$groups{$_}; } } else { return(($ex && $$ex{"G$family"}) || $$groups{$family}) if $family == 0 or $family == 2; $groups[1] = $$groups{1}; } } else { return(($ex && $$ex{G0}) || $$groups{0}) unless wantarray; foreach (0..2) { $groups[$_] = $$groups{$_}; } } $groups[3] = 'Main'; $groups[4] = ($tag =~ /\((\d+)\)$/) ? "Copy$1" : ''; # handle dynamic group names if necessary if ($ex and not $byTagInfo) { $groups[0] = $$ex{G0} if $$ex{G0}; $groups[1] = $$ex{G1} =~ /^\+(.*)/ ? "$groups[1]$1" : $$ex{G1} if $$ex{G1}; $groups[3] = 'Doc' . $$ex{G3} if $$ex{G3}; $groups[5] = $$ex{G5} || $groups[1] if defined $$ex{G5}; } if ($family) { return $groups[$family] || '' if $family > 0; # add additional matching group names to list # eg) for MIE-Doc, also add MIE1, MIE1-Doc, MIE-Doc1 and MIE1-Doc1 # and for MIE2-Doc3, also add MIE2, MIE-Doc3, MIE2-Doc and MIE-Doc if ($groups[1] =~ /^MIE(\d*)-(.+?)(\d*)$/) { push @groups, 'MIE' . ($1 || '1'); push @groups, 'MIE' . ($1 ? '' : '1') . "-$2$3"; push @groups, "MIE$1-$2" . ($3 ? '' : '1'); push @groups, 'MIE' . ($1 ? '' : '1') . "-$2" . ($3 ? '' : '1'); } } if (@families) { my @grps; # create list of group names (without identical adjacent groups if simplifying) foreach (@families) { my $grp = $groups[$_] or next; push @grps, $grp unless $simplify and @grps and $grp eq $grps[-1]; } # remove leading "Main:" if simplifying shift @grps if $simplify and @grps > 1 and $grps[0] eq 'Main'; # return colon-separated string of group names return join ':', @grps; } return @groups; } #------------------------------------------------------------------------------ # Get group names for specified tags # Inputs: 0) ExifTool object reference # 1) [optional] information hash reference (default all extracted info) # 2) [optional] group family (default 0) # Returns: List of group names in alphabetical order sub GetGroups($;$$) { local $_; my $self = shift; my $info = shift; my $family; # figure out our arguments if (ref $info ne 'HASH') { $family = $info; $info = $$self{VALUE}; } else { $family = shift; } $family = 0 unless defined $family; # get a list of all groups in specified information my ($tag, %groups); foreach $tag (keys %$info) { $groups{ $self->GetGroup($tag, $family) } = 1; } return sort keys %groups; } #------------------------------------------------------------------------------ # Set priority for group where new values are written # Inputs: 0) ExifTool object reference, # 1-N) group names (reset to default if no groups specified) sub SetNewGroups($;@) { local $_; my ($self, @groups) = @_; @groups or @groups = @defaultWriteGroups; my $count = @groups; my %priority; foreach (@groups) { $priority{lc($_)} = $count--; } $priority{file} = 10; # 'File' group is always written (Comment) $priority{composite} = 10; # 'Composite' group is always written # set write priority (higher # is higher priority) $$self{WRITE_PRIORITY} = \%priority; $$self{WRITE_GROUPS} = \@groups; } #------------------------------------------------------------------------------ # Build Composite tags from Require'd/Desire'd tags # Inputs: 0) ExifTool object reference # Note: Tag values are calculated in alphabetical order unless a tag Require's # or Desire's another Composite tag, in which case the calculation is # deferred until after the other tag is calculated. sub BuildCompositeTags($) { local $_; my $self = shift; $$self{BuildingComposite} = 1; # first, add user-defined Composite tags if necessary if (%UserDefined and $UserDefined{'Image::ExifTool::Composite'}) { AddCompositeTags($UserDefined{'Image::ExifTool::Composite'}, 1); delete $UserDefined{'Image::ExifTool::Composite'}; } my @tagList = sort keys %Image::ExifTool::Composite; my %tagsUsed; my $rawValue = $$self{VALUE}; for (;;) { my %notBuilt; $notBuilt{$_} = 1 foreach @tagList; my @deferredTags; my $tag; COMPOSITE_TAG: foreach $tag (@tagList) { next if $specialTags{$tag}; my $tagInfo = $self->GetTagInfo(\%Image::ExifTool::Composite, $tag); next unless $tagInfo; # put required tags into array and make sure they all exist my $subDoc = ($$tagInfo{SubDoc} and $$self{DOC_COUNT}); my $require = $$tagInfo{Require} || { }; my $desire = $$tagInfo{Desire} || { }; my $inhibit = $$tagInfo{Inhibit} || { }; # loop through sub-documents if necessary my $doc; for (;;) { my (%tagKey, $found, $index); # save Require'd and Desire'd tag values in list for ($index=0; ; ++$index) { my $reqTag = $$require{$index} || $$desire{$index} || $$inhibit{$index}; unless ($reqTag) { # allow Composite with no Require'd or Desire'd tags $found = 1 if $index == 0; last; } # add family 3 group if generating Composite tags for sub-documents # (unless tag already begins with family 3 group name) if ($subDoc and $reqTag !~ /^(Main|Doc\d+):/) { $reqTag = ($doc ? "Doc$doc:" : 'Main:') . $reqTag; } # allow tag group to be specified if ($reqTag =~ /^(.*):(.+)/) { my ($reqGroup, $name) = ($1, $2); if ($reqGroup eq 'Composite' and $notBuilt{$name}) { push @deferredTags, $tag; next COMPOSITE_TAG; } # (CAREFUL! keys may not be sequential if one was deleted) my ($i, @keys); my $key = $name; my $last = ($$self{DUPL_TAG}{$name} || 0); for ($i=0;;) { push @keys, $key if defined $$rawValue{$key}; last if ++$i > $last; $key = "$name ($i)"; } # find first matching tag $key = $self->GroupMatches($reqGroup, \@keys); $reqTag = $key if $key; } elsif ($notBuilt{$reqTag}) { # calculate this tag later if it relies on another # Composite tag which hasn't been calculated yet push @deferredTags, $tag; next COMPOSITE_TAG; } if (defined $$rawValue{$reqTag}) { if ($$inhibit{$index}) { $found = 0; last; } else { $found = 1; } } elsif ($$require{$index}) { $found = 0; last; # don't continue since we require this tag } $tagKey{$index} = $reqTag; } if ($doc) { if ($found) { $$self{DOC_NUM} = $doc; $self->FoundTag($tagInfo, \%tagKey); delete $$self{DOC_NUM}; } next if ++$doc <= $$self{DOC_COUNT}; last; } elsif ($found) { delete $notBuilt{$tag}; # this tag is OK to build now # keep track of all Require'd tag keys foreach (keys %tagKey) { # only tag keys with same name as a Composite tag # can be replaced (also eliminates keys with # instance numbers which can't be replaced either) next unless $Image::ExifTool::Composite{$tagKey{$_}}; my $keyRef = \$tagKey{$_}; $tagsUsed{$$keyRef} or $tagsUsed{$$keyRef} = [ ]; push @{$tagsUsed{$$keyRef}}, $keyRef; } # save reference to tag key lookup as value for Composite tag my $key = $self->FoundTag($tagInfo, \%tagKey); # check to see if we just replaced one of the tag keys we Require'd if (defined $key and $tagsUsed{$key}) { foreach (@{$tagsUsed{$key}}) { $$_ = $$self{MOVED_KEY}; # replace with new tag key } delete $tagsUsed{$key}; # can't be replaced again } } elsif (not defined $found) { delete $notBuilt{$tag}; # tag can't be built anyway } last unless $subDoc; $doc = 1; # continue to process the 1st sub-document } } last unless @deferredTags; if (@deferredTags == @tagList) { # everything was deferred in the last pass, # must be a circular dependency warn "Circular dependency in Composite tags\n"; last; } @tagList = @deferredTags; # calculate deferred tags now } delete $$self{BuildingComposite}; } #------------------------------------------------------------------------------ # Get tag name (removes copy index) # Inputs: 0) Tag key # Returns: Tag name sub GetTagName($) { local $_; $_[0] =~ /^(\S+)/; return $1; } #------------------------------------------------------------------------------ # Get list of shortcuts # Returns: Shortcut list (sorted alphabetically) sub GetShortcuts() { local $_; require Image::ExifTool::Shortcuts; return sort keys %Image::ExifTool::Shortcuts::Main; } #------------------------------------------------------------------------------ # Get file type for specified extension # Inputs: 0) file name or extension (case is not significant), # or FileType value if a description is requested # 1) flag to return long description instead of type ('0' to return any recognized type) # Returns: File type (or desc) or undef if extension not supported or if # description is the same as the input FileType. In array context, # may return more than one file type if the file may be different formats. # Returns list of all supported extensions if no file specified sub GetFileType(;$$) { local $_; my ($file, $desc) = @_; unless (defined $file) { my @types; if (defined $desc and $desc eq '0') { # return all recognized types @types = sort keys %fileTypeLookup; } else { # return all supported types foreach (sort keys %fileTypeLookup) { my $module = $moduleName{$_}; $module = $moduleName{$fileTypeLookup{$_}} unless defined $module; push @types, $_ unless defined $module and $module eq '0'; } } return @types; } my $fileType; my $fileExt = GetFileExtension($file); $fileExt = uc($file) unless $fileExt; $fileExt and $fileType = $fileTypeLookup{$fileExt}; # look up the file type $fileType = $fileTypeLookup{$fileType} if $fileType and not ref $fileType; # return description if specified # (allow input $file to be a FileType for this purpose) if ($desc) { return $fileType ? $$fileType[1] : $fileDescription{$file}; } elsif ($fileType and (not defined $desc or $desc ne '0')) { # return only supported file types my $mod = $moduleName{$$fileType[0]}; undef $fileType if defined $mod and $mod eq '0'; } $fileType or return wantarray ? () : undef; $fileType = $$fileType[0]; # get file type (or list of types) if (wantarray) { return @$fileType if ref $fileType eq 'ARRAY'; } elsif ($fileType) { $fileType = $fileExt if ref $fileType eq 'ARRAY'; } return $fileType; } #------------------------------------------------------------------------------ # Return true if we can write the specified file type # Inputs: 0) file name or ext # Returns: true if writable, 0 if not writable, undef if unrecognized sub CanWrite($) { local $_; my $file = shift or return undef; my ($type) = GetFileType($file) or return undef; if ($noWriteFile{$type}) { # can't write TIFF files with certain extensions (various RAW formats) my $ext = GetFileExtension($file) || uc($file); return grep(/^$ext$/, @{$noWriteFile{$type}}) ? 0 : 1 if $ext; } unless (%writeTypes) { $writeTypes{$_} = 1 foreach @writeTypes; } return $writeTypes{$type}; } #------------------------------------------------------------------------------ # Return true if we can create the specified file type # Inputs: 0) file name or ext # Returns: true if creatable, 0 if not writable, undef if unrecognized sub CanCreate($) { local $_; my $file = shift or return undef; my $ext = GetFileExtension($file) || uc($file); my $type = GetFileType($file) or return undef; return 1 if $createTypes{$ext} or $createTypes{$type}; return 0; } #============================================================================== # Functions below this are not part of the public API # Initialize member variables for reading or writing a new file # Inputs: 0) ExifTool object reference sub Init($) { local $_; my $self = shift; # delete all DataMember variables (lower-case names) foreach (keys %$self) { /[a-z]/ and delete $$self{$_}; } delete $$self{FOUND_TAGS}; # list of found tags delete $$self{EXIF_DATA}; # the EXIF data block delete $$self{EXIF_POS}; # EXIF position in file delete $$self{FIRST_EXIF_POS}; # position of first EXIF in file delete $$self{HTML_DUMP}; # html dump information delete $$self{SET_GROUP0}; # group0 name override delete $$self{SET_GROUP1}; # group1 name override delete $$self{DOC_NUM}; # current embedded document number $$self{DOC_COUNT} = 0; # count of embedded documents processed $$self{BASE} = 0; # base for offsets from start of file $$self{FILE_ORDER} = { }; # * hash of tag order in file ('*' = based on tag key) $$self{VALUE} = { }; # * hash of raw tag values $$self{BOTH} = { }; # * hash for Value/PrintConv values of Require'd tags $$self{RATIONAL} = { }; # * hash of original rational components $$self{TAG_INFO} = { }; # * hash of tag information $$self{TAG_EXTRA} = { }; # * hash of extra tag information (dynamic group names) $$self{PRIORITY} = { }; # * priority of current tags $$self{LIST_TAGS} = { }; # hash of tagInfo refs for active List-type tags $$self{PROCESSED} = { }; # hash of processed directory start positions $$self{DIR_COUNT} = { }; # count various types of directories $$self{DUPL_TAG} = { }; # last-used index for duplicate-tag keys $$self{WARNED_ONCE}= { }; # WarnOnce() warnings already issued $$self{WRITTEN} = { }; # list of tags written (selected tags only) $$self{PATH} = [ ]; # current subdirectory path in file when reading $$self{NUM_FOUND} = 0; # total number of tags found (incl. duplicates) $$self{CHANGED} = 0; # number of tags changed (writer only) $$self{INDENT} = ' '; # initial indent for verbose messages $$self{PRIORITY_DIR} = ''; # the priority directory name $$self{LOW_PRIORITY_DIR} = { PreviewIFD => 1 }; # names of priority 0 directories $$self{TIFF_TYPE} = ''; # type of TIFF data (APP1, TIFF, NEF, etc...) $$self{Make} = ''; # camera make $$self{Model} = ''; # camera model $$self{CameraType} = ''; # Olympus camera type if ($self->Options('HtmlDump')) { require Image::ExifTool::HtmlDump; $$self{HTML_DUMP} = new Image::ExifTool::HtmlDump; } # make sure our TextOut is a file reference $$self{OPTIONS}{TextOut} = \*STDOUT unless ref $$self{OPTIONS}{TextOut}; } #------------------------------------------------------------------------------ # Get tag key for next existing tag # Inputs: 0) ExifTool ref, 1) tag key or case-sensitive tag name # Returns: Key of next existing tag, or undef if no more # Notes: This routine is provided for iterating through duplicate tags in the # ValueConv of Composite tags. sub NextTagKey($$) { my ($self, $tag) = @_; my $i = ($tag =~ s/ \((\d+)\)$//) ? $1 + 1 : 1; $tag = "$tag ($i)"; return $tag if defined $$self{VALUE}{$tag}; return undef; } #------------------------------------------------------------------------------ # Encode file name for calls to system i/o routines # Inputs: 0) ExifTool ref, 1) file name, 2) flag to force conversion # Returns: true if Windows Unicode routines should be used (in which case # the file name will be encoded as a null-terminated UTF-16LE string) sub EncodeFileName($$;$) { my ($self, $file, $force) = @_; my $enc = $$self{OPTIONS}{CharsetFileName}; if ($enc and ($file =~ /[\x80-\xff]/ or $force)) { # encode for use in Windows Unicode functions if necessary if ($^O eq 'MSWin32') { local $SIG{'__WARN__'} = \&SetWarning; if (eval { require Win32API::File }) { # recode as UTF-16LE and add null terminator $_[1] = $self->Decode($file, $enc, undef, 'UTF16', 'II') . "\0\0"; return 1; } $self->WarnOnce('Install Win32API::File for Windows Unicode file support'); } else { # recode as UTF-8 for other platforms if necessary $_[1] = $self->Decode($file, $enc, undef, 'UTF8') unless $enc eq 'UTF8'; } } elsif ($^O eq 'MSWin32' and $file =~ /[\x80-\xff]/) { require Image::ExifTool::XMP; if (Image::ExifTool::XMP::IsUTF8(\$file) < 0) { $self->WarnOnce('FileName encoding not specified'); } } return 0; } #------------------------------------------------------------------------------ # Modified perl open() routine to properly handle special characters in file names # Inputs: 0) ExifTool ref, 1) filehandle, 2) filename, # 3) mode: '<' or undef = read, '>' = write, '+<' = update # Returns: true on success # Note: Must call like "$et->Open(\*FH,$file)", not "$et->Open(FH,$file)" to avoid # "unopened filehandle" errors due to a change in scope of the filehandle sub Open($*$;$) { my ($self, $fh, $file, $mode) = @_; $file =~ s/^([\s&])/.\/$1/; # protect leading whitespace or ampersand # default to read mode ('<') unless input is a pipe $mode = ($file =~ /\|$/ ? '' : '<') unless $mode; if ($mode) { if ($self->EncodeFileName($file)) { # handle Windows Unicode file name local $SIG{'__WARN__'} = \&SetWarning; my ($access, $create); if ($mode eq '>') { eval { $access = Win32API::File::GENERIC_WRITE(); $create = Win32API::File::CREATE_ALWAYS(); } } else { eval { $access = Win32API::File::GENERIC_READ(); $access |= Win32API::File::GENERIC_WRITE() if $mode eq '+<'; # update $create = Win32API::File::OPEN_EXISTING(); } } my $wh = eval { Win32API::File::CreateFileW($file, $access, 0, [], $create, 0, []) }; return undef unless $wh; my $fd = eval { Win32API::File::OsFHandleOpenFd($wh, 0) }; if (not defined $fd or $fd < 0) { eval { Win32API::File::CloseHandle($wh) }; return undef; } $file = "&=$fd"; # specify file by descriptor } else { # add leading space to protect against leading characters like '>' # in file name, and trailing "\0" to protect trailing spaces $file = " $file\0"; } } return open $fh, "$mode$file"; } #------------------------------------------------------------------------------ # Check to see if a file exists (with Windows Unicode support) # Inputs: 0) ExifTool ref, 1) file name # Returns: true if file exists sub Exists($$) { my ($self, $file) = @_; if ($self->EncodeFileName($file)) { local $SIG{'__WARN__'} = \&SetWarning; my $wh = eval { Win32API::File::CreateFileW($file, Win32API::File::GENERIC_READ(), 0, [], Win32API::File::OPEN_EXISTING(), 0, []) }; return 0 unless $wh; eval { Win32API::File::CloseHandle($wh) }; } else { return -e $file; } return 1; } #------------------------------------------------------------------------------ # Return true if file is a directory (with Windows Unicode support) # Inputs: 0) ExifTool ref, 1) file name # Returns: true if file is a directory (false if file isn't, or doesn't exist) sub IsDirectory($$) { my ($et, $file) = @_; if ($et->EncodeFileName($file)) { local $SIG{'__WARN__'} = \&SetWarning; my $attrs = eval { Win32API::File::GetFileAttributesW($file) }; my $dirBit = eval { Win32API::File::FILE_ATTRIBUTE_DIRECTORY() } || 0; return 1 if $attrs and $attrs != 0xffffffff and $attrs & $dirBit; } else { return -d $file; } return 0; } #------------------------------------------------------------------------------ # Get file times (Unix seconds since the epoch) # Inputs: 0) ExifTool ref, 1) file name or ref # Returns: 0) access time, 1) modification time, 2) creation time (or undefs on error) my $k32GetFileTime; sub GetFileTime($$) { my ($self, $file) = @_; # open file by name if necessary unless (ref $file) { local *FH; $self->Open(\*FH, $file) or $self->Warn("GetFileTime error for '$file'"), return (); $file = *FH; # (not \*FH, so *FH will be kept open until $file goes out of scope) } # on Windows, try to work around incorrect file times when daylight saving time is in effect if ($^O eq 'MSWin32') { if (not eval { require Win32::API }) { $self->WarnOnce('Install Win32::API for proper handling of Windows file times'); } elsif (not eval { require Win32API::File }) { $self->WarnOnce('Install Win32API::File for proper handling of Windows file times'); } else { # get Win32 handle, needed for GetFileTime my $win32Handle = eval { Win32API::File::GetOsFHandle($file) }; unless ($win32Handle) { $self->Warn("Win32API::File::GetOsFHandle returned invalid handle"); return (); } # get FILETIME structs my ($atime, $mtime, $ctime, $time); $atime = $mtime = $ctime = pack 'LL', 0, 0; unless ($k32GetFileTime) { return () if defined $k32GetFileTime; $k32GetFileTime = new Win32::API('KERNEL32', 'GetFileTime', 'NPPP', 'I'); unless ($k32GetFileTime) { $self->Warn('Error calling Win32::API::GetFileTime'); $k32GetFileTime = 0; return (); } } unless ($k32GetFileTime->Call($win32Handle, $ctime, $atime, $mtime)) { $self->Warn("Win32::API::GetFileTime returned " . Win32::GetLastError()); return (); } # convert FILETIME structs to Unix seconds foreach $time ($atime, $mtime, $ctime) { my ($lo, $hi) = unpack 'LL', $time; # unpack FILETIME struct # FILETIME is in 100 ns intervals since 0:00 UTC Jan 1, 1601 # (89 leap years between 1601 and 1970) $time = ($hi * 4294967296 + $lo) * 1e-7 - (((1970-1601)*365+89)*24*3600); } return ($atime, $mtime, $ctime); } } # other os (or Windows fallback) return (stat $file)[8, 9, 10]; } #------------------------------------------------------------------------------ # Parse function arguments and set member variables accordingly # Inputs: Same as ImageInfo() # - sets REQUESTED_TAGS, REQ_TAG_LOOKUP, IO_TAG_LIST, FILENAME, RAF, OPTIONS sub ParseArguments($;@) { my $self = shift; my $options = $$self{OPTIONS}; my @oldGroupOpts = grep /^Group/, keys %{$$self{OPTIONS}}; my (@exclude, $wasExcludeOpt); $$self{REQUESTED_TAGS} = [ ]; $$self{REQ_TAG_LOOKUP} = { }; $$self{EXCL_TAG_LOOKUP} = { }; $$self{IO_TAG_LIST} = undef; # handle our input arguments while (@_) { my $arg = shift; if (ref $arg) { if (ref $arg eq 'ARRAY') { $$self{IO_TAG_LIST} = $arg; foreach (@$arg) { if (/^-(.*)/) { push @exclude, $1; } else { push @{$$self{REQUESTED_TAGS}}, $_; } } } elsif (ref $arg eq 'HASH') { my $opt; foreach $opt (keys %$arg) { # a single new group option overrides all old group options if (@oldGroupOpts and $opt =~ /^Group/) { foreach (@oldGroupOpts) { delete $$options{$_}; } undef @oldGroupOpts; } $self->Options($opt, $$arg{$opt}); $opt eq 'Exclude' and $wasExcludeOpt = 1; } } elsif (ref $arg eq 'SCALAR' or UNIVERSAL::isa($arg,'GLOB')) { next if defined $$self{RAF}; # convert image data from UTF-8 to character stream if necessary # (patches RHEL 3 UTF8 LANG problem) if (ref $arg eq 'SCALAR' and $] >= 5.006 and (eval { require Encode; Encode::is_utf8($$arg) } or $@)) { # repack by hand if Encode isn't available my $buff = $@ ? pack('C*',unpack($] < 5.010000 ? 'U0C*' : 'C0C*',$$arg)) : Encode::encode('utf8',$$arg); $arg = \$buff; } $$self{RAF} = new File::RandomAccess($arg); # set filename to empty string to indicate that # we have a file but we didn't open it $$self{FILENAME} = ''; } elsif (UNIVERSAL::isa($arg, 'File::RandomAccess')) { $$self{RAF} = $arg; $$self{FILENAME} = ''; } else { warn "Don't understand ImageInfo argument $arg\n"; } } elsif (defined $$self{FILENAME}) { if ($arg =~ /^-(.*)/) { push @exclude, $1; } else { push @{$$self{REQUESTED_TAGS}}, $arg; } } else { $$self{FILENAME} = $arg; } } # add additional requested tags to lookup if ($$options{RequestTags}) { $$self{REQ_TAG_LOOKUP}{$_} = 1 foreach @{$$options{RequestTags}}; } # expand shortcuts in tag arguments if provided if (@{$$self{REQUESTED_TAGS}}) { ExpandShortcuts($$self{REQUESTED_TAGS}); # initialize lookup for requested tags foreach (@{$$self{REQUESTED_TAGS}}) { /(^|:)([-\w?*]+)#?$/ and $$self{REQ_TAG_LOOKUP}{lc($2)} = 1; } } if (@exclude or $wasExcludeOpt) { # must add existing excluded tags push @exclude, @{$$options{Exclude}} if $$options{Exclude}; $$options{Exclude} = \@exclude; # expand shortcuts in new exclude list ExpandShortcuts($$options{Exclude}, 1); # (also remove '#' suffix) } # generate lookup for excluded tags if ($$options{Exclude}) { foreach (@{$$options{Exclude}}) { /([-\w]+)#?$/ and $$self{EXCL_TAG_LOOKUP}{lc($1)} = 1; } # exclude list is used only for EXCL_TAG_LOOKUP when TAGS_FROM_FILE is set undef $$options{Exclude} if $$self{TAGS_FROM_FILE}; } } #------------------------------------------------------------------------------ # Get list of tags in specified group # Inputs: 0) ExifTool ref, 1) group spec, 2) tag key or reference to list of tag keys # Returns: list of matching tags in list context, or first match in scalar context # Notes: Group spec may contain multiple groups separated by colons, each # possibly with a leading family number sub GroupMatches($$$) { my ($self, $group, $tagList) = @_; $tagList = [ $tagList ] unless ref $tagList; my ($tag, @matches); if ($group =~ /:/) { # check each group name individually (eg. "Author:1IPTC") my @grps = split ':', lc $group; my (@fmys, $g); for ($g=0; $g<@grps; ++$g) { $fmys[$g] = $1 if $grps[$g] =~ s/^(\d+)//; } foreach $tag (@$tagList) { my @groups = $self->GetGroup($tag, -1); for ($g=0; $g<@grps; ++$g) { my $grp = $grps[$g]; next if $grp eq '*' or $grp eq 'all'; if (defined $fmys[$g]) { my $f = $fmys[$g]; last unless $groups[$f] and $grps[$g] eq lc $groups[$f]; } else { last unless grep /^$grps[$g]$/i, @groups; } } if ($g == @grps) { return $tag unless wantarray; push @matches, $tag; } } } else { my $family = ($group =~ s/^(\d+)//) ? $1 : -1; foreach $tag (@$tagList) { my @groups = $self->GetGroup($tag, $family); if (grep(/^$group$/i, @groups)) { return $tag unless wantarray; push @matches, $tag; } } } return wantarray ? @matches : $matches[0]; } #------------------------------------------------------------------------------ # Set list of found tags from previously requested tags # Inputs: 0) ExifTool object reference # Returns: 0) Reference to list of found tag keys (in order of requested tags) # 1) Reference to list of indices for tags requested by value # 2) Reference to list of indices for tags specified by wildcard or "all" # Notes: index lists are returned in increasing order sub SetFoundTags($) { my $self = shift; my $options = $$self{OPTIONS}; my $reqTags = $$self{REQUESTED_TAGS} || [ ]; my $duplicates = $$options{Duplicates}; my $exclude = $$options{Exclude}; my $fileOrder = $$self{FILE_ORDER}; my @groupOptions = sort grep /^Group/, keys %$options; my $doDups = $duplicates || $exclude || @groupOptions; my ($tag, $rtnTags, @byValue, @wildTags); # only return requested tags if specified if (@$reqTags) { $rtnTags or $rtnTags = [ ]; # scan through the requested tags and generate a list of tags we found my $tagHash = $$self{VALUE}; my $reqTag; foreach $reqTag (@$reqTags) { my (@matches, $group, $allGrp, $allTag, $byValue); if ($reqTag =~ /^(.*):(.+)/) { ($group, $tag) = ($1, $2); if ($group =~ /^(\*|all)$/i) { $allGrp = 1; } elsif ($group !~ /^[-\w:]*$/) { $self->Warn("Invalid group name '$group'"); $group = 'invalid'; } } else { $tag = $reqTag; } $byValue = 1 if $tag =~ s/#$// and $$options{PrintConv}; if (defined $$tagHash{$reqTag} and not $doDups) { $matches[0] = $tag; } elsif ($tag =~ /^(\*|all)$/i) { # tag name of '*' or 'all' matches all tags if ($doDups or $allGrp) { @matches = grep(!/#/, keys %$tagHash); } else { @matches = grep(!/ /, keys %$tagHash); } next unless @matches; # don't want entry in list for '*' tag $allTag = 1; } elsif ($tag =~ /[*?]/) { # allow wildcards in tag names $tag =~ s/\*/[-\\w]*/g; $tag =~ s/\?/[-\\w]/g; $tag .= '( \\(.*)?' if $doDups or $allGrp; @matches = grep(/^$tag$/i, keys %$tagHash); next unless @matches; # don't want entry in list for wildcard tags $allTag = 1; } elsif ($doDups or defined $group) { # must also look for tags like "Tag (1)" # (but be sure not to match temporary ValueConv entries like "Tag #") @matches = grep(/^$tag( \(|$)/i, keys %$tagHash); } elsif ($tag =~ /^[-\w]+$/) { # find first matching value # (use in list context to return value instead of count) ($matches[0]) = grep /^$tag$/i, keys %$tagHash; defined $matches[0] or undef @matches; } else { $self->Warn("Invalid tag name '$tag'"); } if (defined $group and not $allGrp) { # keep only specified group @matches = $self->GroupMatches($group, \@matches); next unless @matches or not $allTag; } if (@matches > 1) { # maintain original file order for multiple tags @matches = sort { $$fileOrder{$a} <=> $$fileOrder{$b} } @matches; # return only the highest priority tag unless duplicates wanted unless ($doDups or $allTag or $allGrp) { $tag = shift @matches; my $oldPriority = $$self{PRIORITY}{$tag} || 1; foreach (@matches) { my $priority = $$self{PRIORITY}{$_}; $priority = 1 unless defined $priority; next unless $priority >= $oldPriority; $tag = $_; $oldPriority = $priority || 1; } @matches = ( $tag ); } } elsif (not @matches) { # put entry in return list even without value (value is undef) $matches[0] = $byValue ? "$tag #(0)" : "$tag (0)"; # bogus file order entry to avoid warning if sorting in file order $$self{FILE_ORDER}{$matches[0]} = 9999; } # save indices of tags extracted by value push @byValue, scalar(@$rtnTags) .. (scalar(@$rtnTags)+scalar(@matches)-1) if $byValue; # save indices of wildcard tags push @wildTags, scalar(@$rtnTags) .. (scalar(@$rtnTags)+scalar(@matches)-1) if $allTag; push @$rtnTags, @matches; } } else { # no requested tags, so we want all tags my @allTags; if ($doDups) { @allTags = keys %{$$self{VALUE}}; } else { # only include tag if it doesn't end in a copy number @allTags = grep(!/ /, keys %{$$self{VALUE}}); } $rtnTags = \@allTags; } # filter excluded tags and group options while (($exclude or @groupOptions) and @$rtnTags) { if ($exclude) { my ($pat, %exclude); foreach $pat (@$exclude) { my $group; if ($pat =~ /^(.*):(.+)/) { ($group, $tag) = ($1, $2); if ($group =~ /^(\*|all)$/i) { undef $group; } elsif ($group !~ /^[-\w:]*$/) { $self->Warn("Invalid group name '$group'"); $group = 'invalid'; } } else { $tag = $pat; } my @matches; if ($tag =~ /^(\*|all)$/i) { @matches = @$rtnTags; } else { # allow wildcards in tag names $tag =~ s/\*/[-\\w]*/g; $tag =~ s/\?/[-\\w]/g; @matches = grep(/^$tag( |$)/i, @$rtnTags); } @matches = $self->GroupMatches($group, \@matches) if $group and @matches; $exclude{$_} = 1 foreach @matches; } if (%exclude) { my @filteredTags; $exclude{$_} or push @filteredTags, $_ foreach @$rtnTags; $rtnTags = \@filteredTags; # use new filtered tag list last unless @filteredTags; # all done if nothing left } last if $duplicates and not @groupOptions; } # filter groups if requested, or to remove duplicates my (%keepTags, %wantGroup, $family, $groupOpt); my $allGroups = 1; # build hash of requested/excluded group names for each group family my $wantOrder = 0; foreach $groupOpt (@groupOptions) { $groupOpt =~ /^Group(\d*(:\d+)*)/ or next; $family = $1 || 0; $wantGroup{$family} or $wantGroup{$family} = { }; my $groupList; if (ref $$options{$groupOpt} eq 'ARRAY') { $groupList = $$options{$groupOpt}; } else { $groupList = [ $$options{$groupOpt} ]; } foreach (@$groupList) { # groups have priority in order they were specified ++$wantOrder; my ($groupName, $want); if (/^-(.*)/) { # excluded group begins with '-' $groupName = $1; $want = 0; # we don't want tags in this group } else { $groupName = $_; $want = $wantOrder; # we want tags in this group $allGroups = 0; # don't want all groups if we requested one } $wantGroup{$family}{$groupName} = $want; } } # loop through all tags and decide which ones we want my (@tags, %bestTag); GR_TAG: foreach $tag (@$rtnTags) { my $wantTag = $allGroups; # want tag by default if want all groups foreach $family (keys %wantGroup) { my $group = $self->GetGroup($tag, $family); my $wanted = $wantGroup{$family}{$group}; next unless defined $wanted; next GR_TAG unless $wanted; # skip tag if group excluded # take lowest non-zero want flag next if $wantTag and $wantTag < $wanted; $wantTag = $wanted; } next unless $wantTag; if ($duplicates) { push @tags, $tag; } else { my $tagName = GetTagName($tag); my $bestTag = $bestTag{$tagName}; if (defined $bestTag) { next if $wantTag > $keepTags{$bestTag}; if ($wantTag == $keepTags{$bestTag}) { # want two tags with the same name -- keep the latest one if ($tag =~ / \((\d+)\)$/) { my $tagNum = $1; next if $bestTag !~ / \((\d+)\)$/ or $1 > $tagNum; } } # this tag is better, so delete old best tag delete $keepTags{$bestTag}; } $keepTags{$tag} = $wantTag; # keep this tag (for now...) $bestTag{$tagName} = $tag; # this is our current best tag } } unless ($duplicates) { # construct new tag list with no duplicates, preserving order foreach $tag (@$rtnTags) { push @tags, $tag if $keepTags{$tag}; } } $rtnTags = \@tags; last; } $$self{FOUND_TAGS} = $rtnTags; # save found tags # return reference to found tag keys (and list of indices of tags to extract by value) return wantarray ? ($rtnTags, \@byValue, \@wildTags) : $rtnTags; } #------------------------------------------------------------------------------ # Utility to load our write routines if required (called via AUTOLOAD) # Inputs: 0) autoload function, 1-N) function arguments # Returns: result of function or dies if function not available sub DoAutoLoad(@) { my $autoload = shift; my @callInfo = split(/::/, $autoload); my $file = 'Image/ExifTool/Write'; return if $callInfo[$#callInfo] eq 'DESTROY'; if (@callInfo == 4) { # load Image/ExifTool/WriteMODULE.pl $file .= "$callInfo[2].pl"; } elsif ($callInfo[-1] eq 'ShiftTime') { $file = 'Image/ExifTool/Shift.pl'; # load Shift.pl } else { # load Image/ExifTool/Writer.pl $file .= 'r.pl'; } # attempt to load the package eval { require $file } or die "Error while attempting to call $autoload\n$@\n"; unless (defined &$autoload) { my @caller = caller(0); # reproduce Perl's standard 'undefined subroutine' message: die "Undefined subroutine $autoload called at $caller[1] line $caller[2]\n"; } no strict 'refs'; return &$autoload(@_); # call the function } #------------------------------------------------------------------------------ # AutoLoad our writer routines when necessary # sub AUTOLOAD { return DoAutoLoad($AUTOLOAD, @_); } #------------------------------------------------------------------------------ # Add warning tag # Inputs: 0) ExifTool object reference, 1) warning message # 2) true if minor (2 if behaviour changes when warning is ignored) # Returns: true if warning tag was added sub Warn($$;$) { my ($self, $str, $ignorable) = @_; if ($ignorable) { return 0 if $$self{OPTIONS}{IgnoreMinorErrors}; $str = $ignorable eq '2' ? "[Minor] $str" : "[minor] $str"; } $self->FoundTag('Warning', $str); return 1; } #------------------------------------------------------------------------------ # Add warning tag only once per processed file # Inputs: 0) ExifTool object reference, 1) warning message, 2) true if minor # Returns: true if warning tag was added sub WarnOnce($$;$) { my ($self, $str, $ignorable) = @_; return 0 if $ignorable and $$self{OPTIONS}{IgnoreMinorErrors}; unless ($$self{WARNED_ONCE}{$str}) { $self->Warn($str, $ignorable); $$self{WARNED_ONCE}{$str} = 1; } return 1; } #------------------------------------------------------------------------------ # Add error tag # Inputs: 0) ExifTool object reference, 1) error message, 2) true if minor # Returns: true if error tag was added, otherwise warning was added sub Error($$;$) { my ($self, $str, $ignorable) = @_; if ($$self{DemoteErrors}) { $self->Warn($str) and ++$$self{DemoteErrors}; return 1; } elsif ($ignorable) { $$self{OPTIONS}{IgnoreMinorErrors} and $self->Warn($str), return 0; $str = "[minor] $str"; } $self->FoundTag('Error', $str); return 1; } #------------------------------------------------------------------------------ # Expand shortcuts # Inputs: 0) reference to list of tags, 1) set to remove trailing '#' # Notes: Handles leading '-' for excluded tags, trailing '#' for ValueConv, # multiple group names, and redirected tags sub ExpandShortcuts($;$) { my ($tagList, $removeSuffix) = @_; return unless $tagList and @$tagList; require Image::ExifTool::Shortcuts; # expand shortcuts my $suffix = $removeSuffix ? '' : '#'; my @expandedTags; my ($entry, $tag, $excl); foreach $entry (@$tagList) { # skip things like options hash references in list if (ref $entry) { push @expandedTags, $entry; next; } # remove leading '-' ($excl, $tag) = $entry =~ /^(-?)(.*)/s; my ($post, @post, $pre, $v); # handle redirection if (not $excl and $tag =~ /(.+?)([-+]?[<>].+)/s) { ($tag, $post) = ($1, $2); if ($post =~ /^[-+]?>/ or $post !~ /\$/) { # expand shortcuts in postfix (rhs of redirection) my ($op, $p2, $t2) = ($post =~ /([-+]?[<>])(.+:)?(.+)/); $p2 = '' unless defined $p2; $v = ($t2 =~ s/#$//) ? $suffix : ''; # ValueConv suffix my ($match) = grep /^\Q$t2\E$/i, keys %Image::ExifTool::Shortcuts::Main; if ($match) { foreach (@{$Image::ExifTool::Shortcuts::Main{$match}}) { /^-/ and next; # ignore excluded tags if ($p2 and /(.+:)(.+)/) { push @post, "$op$_$v"; } else { push @post, "$op$p2$_$v"; } } next unless @post; $post = shift @post; } } } else { $post = ''; } # handle group names if ($tag =~ /(.+:)(.+)/) { ($pre, $tag) = ($1, $2); } else { $pre = ''; } $v = ($tag =~ s/#$//) ? $suffix : ''; # ValueConv suffix # loop over all postfixes for (;;) { # expand the tag name my ($match) = grep /^\Q$tag\E$/i, keys %Image::ExifTool::Shortcuts::Main; if ($match) { if ($excl) { # entry starts with '-', so exclude all tags in this shortcut foreach (@{$Image::ExifTool::Shortcuts::Main{$match}}) { /^-/ and next; # ignore excluded exclude tags # group of expanded tag takes precedence if ($pre and /(.+:)(.+)/) { push @expandedTags, "$excl$_"; } else { push @expandedTags, "$excl$pre$_"; } } } elsif (length $pre or length $post or $v) { foreach (@{$Image::ExifTool::Shortcuts::Main{$match}}) { /(-?)(.+:)?(.+)/; if ($2) { # group from expanded tag takes precedence push @expandedTags, "$_$v$post"; } else { push @expandedTags, "$1$pre$3$v$post"; } } } else { push @expandedTags, @{$Image::ExifTool::Shortcuts::Main{$match}}; } } else { push @expandedTags, "$excl$pre$tag$v$post"; } last unless @post; $post = shift @post; } } @$tagList = @expandedTags; } #------------------------------------------------------------------------------ # Add hash of Composite tags to our composites # Inputs: 0) hash reference to table of Composite tags to add or module name, # 1) overwrite existing tag sub AddCompositeTags($;$) { local $_; my ($add, $overwrite) = @_; my $module; unless (ref $add) { $module = $add; $add .= '::Composite'; no strict 'refs'; $add = \%$add; } my $defaultGroups = $$add{GROUPS}; # MUST get the main Composite table so fetching it later doesn't override our TagID's # (which may be different from the table keys if there were duplicates) my $compTable = GetTagTable('Image::ExifTool::Composite'); # make sure default groups are defined in families 0 and 1 if ($defaultGroups) { $$defaultGroups{0} or $$defaultGroups{0} = 'Composite'; $$defaultGroups{1} or $$defaultGroups{1} = 'Composite'; $$defaultGroups{2} or $$defaultGroups{2} = 'Other'; } else { $defaultGroups = $$add{GROUPS} = { 0 => 'Composite', 1 => 'Composite', 2 => 'Other' }; } SetupTagTable($add); # generate Name, TagID, etc my $tagID; foreach $tagID (sort keys %$add) { next if $specialTags{$tagID}; # must skip special tags my $tagInfo = $$add{$tagID}; # tagID's MUST be the exact tag name for logic in BuildCompositeTags() my $tag = $$tagInfo{Name}; $$tagInfo{Module} = $module if $$tagInfo{Writable}; # allow Composite tags with the same name my ($t, $n, $type); while ($$compTable{$tag} and not $overwrite) { $n ? $n += 1 : ($n = 2, $t = $tag); $tag = "${t}-$n"; $$tagInfo{NewTagID} = $tag; # save new ID so we can use it in TagLookup } # convert scalar Require/Desire entries foreach $type ('Require','Desire') { my $req = $$tagInfo{$type} or next; $$tagInfo{$type} = { 0 => $req } if ref($req) ne 'HASH'; } # add this Composite tag to our main Composite table $$tagInfo{Table} = $compTable; # (use the original TagID, even if we changed it, so don't do this:) # $$tagInfo{TagID} = $tag; # save tag under NewTagID in Composite table $$compTable{$tag} = $tagInfo; # set all default groups in tag my $groups = $$tagInfo{Groups}; $groups or $groups = $$tagInfo{Groups} = { }; # fill in default groups foreach (keys %$defaultGroups) { $$groups{$_} or $$groups{$_} = $$defaultGroups{$_}; } # set flag indicating group list was built $$tagInfo{GotGroups} = 1; } } #------------------------------------------------------------------------------ # Add tags to TagLookup (used for writing) # Inputs: 0) source hash of tag definitions, 1) name of destination tag table sub AddTagsToLookup($$) { my ($tagHash, $table) = @_; if (defined &Image::ExifTool::TagLookup::AddTags) { Image::ExifTool::TagLookup::AddTags($tagHash, $table); } elsif (not $Image::ExifTool::pluginTags{$tagHash}) { # queue these tags until TagLookup is loaded push @Image::ExifTool::pluginTags, [ $tagHash, $table ]; # set flag so we don't load same tags twice $Image::ExifTool::pluginTags{$tagHash} = 1; } } #------------------------------------------------------------------------------ # Expand tagInfo Flags # Inputs: 0) tagInfo hash ref # Notes: $$tagInfo{Flags} must be defined to call this routine sub ExpandFlags($) { my $tagInfo = shift; my $flags = $$tagInfo{Flags}; if (ref $flags eq 'ARRAY') { foreach (@$flags) { $$tagInfo{$_} = 1; } } elsif (ref $flags eq 'HASH') { my $key; foreach $key (keys %$flags) { $$tagInfo{$key} = $$flags{$key}; } } else { $$tagInfo{$flags} = 1; } } #------------------------------------------------------------------------------ # Set up tag table (must be done once for each tag table used) # Inputs: 0) Reference to tag table # Notes: - generates 'Name' field from key if it doesn't exist # - stores 'Table' pointer and 'TagID' value # - expands 'Flags' for quick lookup sub SetupTagTable($) { my $tagTablePtr = shift; my ($tagID, $tagInfo); foreach $tagID (TagTableKeys($tagTablePtr)) { my @infoArray = GetTagInfoList($tagTablePtr,$tagID); # process conditional tagInfo arrays foreach $tagInfo (@infoArray) { $$tagInfo{Table} = $tagTablePtr; $$tagInfo{TagID} = $tagID; $$tagInfo{Name} or $$tagInfo{Name} = MakeTagName($tagID); $$tagInfo{Flags} and ExpandFlags($tagInfo); } next unless @infoArray > 1; # add an "Index" member to each tagInfo in a list my $index = 0; foreach $tagInfo (@infoArray) { $$tagInfo{Index} = $index++; } } } #------------------------------------------------------------------------------ # Utilities to check for numerical types # Inputs: 0) value; Returns: true if value is a numerical type # Notes: May change commas to decimals in floats for use in other locales sub IsFloat($) { return 1 if $_[0] =~ /^[+-]?(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/; # allow comma separators (for other locales) return 0 unless $_[0] =~ /^[+-]?(?=\d|,\d)\d*(,\d*)?([Ee]([+-]?\d+))?$/; $_[0] =~ tr/,/./; # but translate ',' to '.' return 1; } sub IsInt($) { return scalar($_[0] =~ /^[+-]?\d+$/); } sub IsHex($) { return scalar($_[0] =~ /^(0x)?[0-9a-f]{1,8}$/i); } sub IsRational($) { return scalar($_[0] =~ m{^[-+]?\d+/\d+$}); } # round floating point value to specified number of significant digits # Inputs: 0) value, 1) number of sig digits; Returns: rounded number sub RoundFloat($$) { my ($val, $sig) = @_; return sprintf("%.${sig}g", $val); } # Convert strings to floating point numbers (or undef) # Inputs: 0-N) list of strings (may be undef) # Returns: last value converted sub ToFloat(@) { local $_; foreach (@_) { next unless defined $_; # (add 0 to convert "0.0" to "0" for tests) $_ = /((?:[+-]?)(?=\d|\.\d)\d*(?:\.\d*)?(?:[Ee](?:[+-]?\d+))?)/ ? $1 + 0 : undef; } return $_[-1]; } #------------------------------------------------------------------------------ # Utility routines to for reading binary data values from file my %unpackMotorola = ( S => 'n', L => 'N', C => 'C', c => 'c' ); my %unpackIntel = ( S => 'v', L => 'V', C => 'C', c => 'c' ); my %unpackRev = ( N => 'V', V => 'N', C => 'C', n => 'v', v => 'n', c => 'c' ); # the following 4 variables are defined in 'use vars' instead of using 'my' # because mod_perl 5.6.1 apparently has a problem with setting file-scope 'my' # variables from within subroutines (ref communication with Pavel Merdin): # $swapBytes - set if EXIF header is not native byte ordering # $swapWords - swap 32-bit words in doubles (ARM quirk) $currentByteOrder = 'MM'; # current byte ordering ('II' or 'MM') %unpackStd = %unpackMotorola; # Swap bytes in data if necessary # Inputs: 0) data, 1) number of bytes # Returns: swapped data sub SwapBytes($$) { return $_[0] unless $swapBytes; my ($val, $bytes) = @_; my $newVal = ''; $newVal .= substr($val, $bytes, 1) while $bytes--; return $newVal; } # Swap words. Inputs: 8 bytes of data, Returns: swapped data sub SwapWords($) { return $_[0] unless $swapWords and length($_[0]) == 8; return substr($_[0],4,4) . substr($_[0],0,4) } # Unpack value, letting unpack() handle byte swapping # Inputs: 0) unpack template, 1) data reference, 2) offset # Returns: unpacked number # - uses value of %unpackStd to determine the unpack template # - can only be called for 'S' or 'L' templates since these are the only # templates for which you can specify the byte ordering. sub DoUnpackStd(@) { $_[2] and return unpack("x$_[2] $unpackStd{$_[0]}", ${$_[1]}); return unpack($unpackStd{$_[0]}, ${$_[1]}); } # same, but with reversed byte order sub DoUnpackRev(@) { my $fmt = $unpackRev{$unpackStd{$_[0]}}; $_[2] and return unpack("x$_[2] $fmt", ${$_[1]}); return unpack($fmt, ${$_[1]}); } # Pack value # Inputs: 0) template, 1) value, 2) data ref (or undef), 3) offset (if data ref) # Returns: packed value sub DoPackStd(@) { my $val = pack($unpackStd{$_[0]}, $_[1]); $_[2] and substr(${$_[2]}, $_[3], length($val)) = $val; return $val; } # same, but with reversed byte order sub DoPackRev(@) { my $val = pack($unpackRev{$unpackStd{$_[0]}}, $_[1]); $_[2] and substr(${$_[2]}, $_[3], length($val)) = $val; return $val; } # Unpack value, handling the byte swapping manually # Inputs: 0) # bytes, 1) unpack template, 2) data reference, 3) offset # Returns: unpacked number # - uses value of $swapBytes to determine byte ordering sub DoUnpack(@) { my ($bytes, $template, $dataPt, $pos) = @_; my $val; if ($swapBytes) { $val = ''; $val .= substr($$dataPt,$pos+$bytes,1) while $bytes--; } else { $val = substr($$dataPt,$pos,$bytes); } defined($val) or return undef; return unpack($template,$val); } # Unpack double value # Inputs: 0) unpack template, 1) data reference, 2) offset # Returns: unpacked number sub DoUnpackDbl(@) { my ($template, $dataPt, $pos) = @_; my $val = substr($$dataPt,$pos,8); defined($val) or return undef; # swap bytes and 32-bit words (ARM quirk) if necessary, then unpack value return unpack($template, SwapWords(SwapBytes($val, 8))); } # Inputs: 0) data reference, 1) offset into data sub Get8s($$) { return DoUnpackStd('c', @_); } sub Get8u($$) { return DoUnpackStd('C', @_); } sub Get16s($$) { return DoUnpack(2, 's', @_); } sub Get16u($$) { return DoUnpackStd('S', @_); } sub Get32s($$) { return DoUnpack(4, 'l', @_); } sub Get32u($$) { return DoUnpackStd('L', @_); } sub GetFloat($$) { return DoUnpack(4, 'f', @_); } sub GetDouble($$) { return DoUnpackDbl('d', @_); } sub Get16uRev($$) { return DoUnpackRev('S', @_); } sub Get32uRev($$) { return DoUnpackRev('L', @_); } # rationals may be a floating point number, 'inf' or 'undef' my ($ratNumer, $ratDenom); sub GetRational32s($$) { my ($dataPt, $pos) = @_; $ratNumer = Get16s($dataPt,$pos); $ratDenom = Get16s($dataPt, $pos + 2) or return $ratNumer ? 'inf' : 'undef'; # round off to a reasonable number of significant figures return RoundFloat($ratNumer / $ratDenom, 7); } sub GetRational32u($$) { my ($dataPt, $pos) = @_; $ratNumer = Get16u($dataPt,$pos); $ratDenom = Get16u($dataPt, $pos + 2) or return $ratNumer ? 'inf' : 'undef'; return RoundFloat($ratNumer / $ratDenom, 7); } sub GetRational64s($$) { my ($dataPt, $pos) = @_; $ratNumer = Get32s($dataPt,$pos); $ratDenom = Get32s($dataPt, $pos + 4) or return $ratNumer ? 'inf' : 'undef'; return RoundFloat($ratNumer / $ratDenom, 10); } sub GetRational64u($$) { my ($dataPt, $pos) = @_; $ratNumer = Get32u($dataPt,$pos); $ratDenom = Get32u($dataPt, $pos + 4) or return $ratNumer ? 'inf' : 'undef'; return RoundFloat($ratNumer / $ratDenom, 10); } sub GetFixed16s($$) { my ($dataPt, $pos) = @_; my $val = Get16s($dataPt, $pos) / 0x100; return int($val * 1000 + ($val<0 ? -0.5 : 0.5)) / 1000; } sub GetFixed16u($$) { my ($dataPt, $pos) = @_; return int((Get16u($dataPt, $pos) / 0x100) * 1000 + 0.5) / 1000; } sub GetFixed32s($$) { my ($dataPt, $pos) = @_; my $val = Get32s($dataPt, $pos) / 0x10000; # remove insignificant digits return int($val * 1e5 + ($val>0 ? 0.5 : -0.5)) / 1e5; } sub GetFixed32u($$) { my ($dataPt, $pos) = @_; # remove insignificant digits return int((Get32u($dataPt, $pos) / 0x10000) * 1e5 + 0.5) / 1e5; } # Inputs: 0) value, 1) data ref, 2) offset sub Set8s(@) { return DoPackStd('c', @_); } sub Set8u(@) { return DoPackStd('C', @_); } sub Set16u(@) { return DoPackStd('S', @_); } sub Set32u(@) { return DoPackStd('L', @_); } sub Set16uRev(@) { return DoPackRev('S', @_); } #------------------------------------------------------------------------------ # Get current byte order ('II' or 'MM') sub GetByteOrder() { return $currentByteOrder; } #------------------------------------------------------------------------------ # Set byte ordering # Inputs: 0) 'MM'=motorola, 'II'=intel (will translate 'BigEndian', 'LittleEndian') # Returns: 1 on success sub SetByteOrder($) { my $order = shift; if ($order eq 'MM') { # big endian (Motorola) %unpackStd = %unpackMotorola; } elsif ($order eq 'II') { # little endian (Intel) %unpackStd = %unpackIntel; } elsif ($order =~ /^Big/i) { $order = 'MM'; %unpackStd = %unpackMotorola; } elsif ($order =~ /^Little/i) { $order = 'II'; %unpackStd = %unpackIntel; } else { return 0; } my $val = unpack('S','A '); my $nativeOrder; if ($val == 0x4120) { # big endian $nativeOrder = 'MM'; } elsif ($val == 0x2041) { # little endian $nativeOrder = 'II'; } else { warn sprintf("Unknown native byte order! (pattern %x)\n",$val); return 0; } $currentByteOrder = $order; # save current byte order # swap bytes if our native CPU byte ordering is not the same as the EXIF $swapBytes = ($order ne $nativeOrder); # little-endian ARM has big-endian words for doubles (thanks Riku Voipio) # (Note: Riku's patch checked for '0ff3', but I think it should be 'f03f' since # 1 is '000000000000f03f' on an x86 -- so check for both, but which is correct?) my $pack1d = pack('d', 1); $swapWords = ($pack1d eq "\0\0\x0f\xf3\0\0\0\0" or $pack1d eq "\0\0\xf0\x3f\0\0\0\0"); return 1; } #------------------------------------------------------------------------------ # Change byte order sub ToggleByteOrder() { SetByteOrder(GetByteOrder() eq 'II' ? 'MM' : 'II'); } #------------------------------------------------------------------------------ # hash lookups for reading values from data my %formatSize = ( int8s => 1, int8u => 1, int16s => 2, int16u => 2, int16uRev => 2, int32s => 4, int32u => 4, int32uRev => 4, int64s => 8, int64u => 8, rational32s => 4, rational32u => 4, rational64s => 8, rational64u => 8, fixed16s => 2, fixed16u => 2, fixed32s => 4, fixed32u => 4, float => 4, double => 8, extended => 10, unicode => 2, complex => 8, string => 1, binary => 1, 'undef' => 1, ifd => 4, ifd64 => 8, ); my %readValueProc = ( int8s => \&Get8s, int8u => \&Get8u, int16s => \&Get16s, int16u => \&Get16u, int16uRev => \&Get16uRev, int32s => \&Get32s, int32u => \&Get32u, int32uRev => \&Get32uRev, int64s => \&Get64s, int64u => \&Get64u, rational32s => \&GetRational32s, rational32u => \&GetRational32u, rational64s => \&GetRational64s, rational64u => \&GetRational64u, fixed16s => \&GetFixed16s, fixed16u => \&GetFixed16u, fixed32s => \&GetFixed32s, fixed32u => \&GetFixed32u, float => \&GetFloat, double => \&GetDouble, extended => \&GetExtended, ifd => \&Get32u, ifd64 => \&Get64u, ); # lookup for all rational types my %isRational = ( rational32u => 1, rational32s => 1, rational64u => 1, rational64s => 1, ); sub FormatSize($) { return $formatSize{$_[0]}; } #------------------------------------------------------------------------------ # Read value from binary data (with current byte ordering) # Inputs: 0) data reference, 1) value offset, 2) format string, # 3) number of values (or undef to use all data) # 4) valid data length relative to offset, 5) optional pointer to returned rational # Returns: converted value, or undefined if data isn't there # or list of values in list context sub ReadValue($$$$$;$) { my ($dataPt, $offset, $format, $count, $size, $ratPt) = @_; my $len = $formatSize{$format}; unless ($len) { warn "Unknown format $format"; $len = 1; } unless ($count) { return '' if defined $count or $size < $len; $count = int($size / $len); } # make sure entry is inside data if ($len * $count > $size) { $count = int($size / $len); # shorten count if necessary $count < 1 and return undef; # return undefined if no data } my @vals; my $proc = $readValueProc{$format}; if (not $proc) { # handle undef/binary/string (also unsupported unicode/complex) $vals[0] = substr($$dataPt, $offset, $count * $len); # truncate string at null terminator if necessary $vals[0] =~ s/\0.*//s if $format eq 'string'; } elsif ($isRational{$format} and $ratPt) { # store rationals separately as string fractions my @rat; for (;;) { push @vals, &$proc($dataPt, $offset); push @rat, "$ratNumer/$ratDenom"; last if --$count <= 0; $offset += $len; } $$ratPt = join(' ',@rat); } else { for (;;) { push @vals, &$proc($dataPt, $offset); last if --$count <= 0; $offset += $len; } } return @vals if wantarray; return join(' ', @vals) if @vals > 1; return $vals[0]; } #------------------------------------------------------------------------------ # Decode string with specified encoding # Inputs: 0) ExifTool object ref, 1) string to decode # 2) source character set name (undef for current Charset) # 3) optional source byte order (2-byte and 4-byte fixed-width sets only) # 4) optional destination character set (defaults to Charset setting) # 5) optional destination byte order (2-byte and 4-byte fixed-width only) # Returns: string in destination encoding # Note: ExifTool ref may be undef if character both character sets are provided # (but in this case no warnings will be issued) sub Decode($$$;$$$) { my ($self, $val, $from, $fromOrder, $to, $toOrder) = @_; $from or $from = $$self{OPTIONS}{Charset}; $to or $to = $$self{OPTIONS}{Charset}; if ($from ne $to and length $val) { require Image::ExifTool::Charset; my $cs1 = $Image::ExifTool::Charset::csType{$from}; my $cs2 = $Image::ExifTool::Charset::csType{$to}; if ($cs1 and $cs2 and not $cs2 & 0x002) { # treat as straight ASCII if no character will need remapping if (($cs1 | $cs2) & 0x680 or $val =~ /[\x80-\xff]/) { my $uni = Image::ExifTool::Charset::Decompose($self, $val, $from, $fromOrder); $val = Image::ExifTool::Charset::Recompose($self, $uni, $to, $toOrder); } } elsif ($self) { my $set = $cs1 ? $to : $from; unless ($$self{"DecodeWarn$set"}) { $self->Warn("Unsupported character set ($set)"); $$self{"DecodeWarn$set"} = 1; } } } return $val; } #------------------------------------------------------------------------------ # Encode string with specified encoding # Inputs: 0) ExifTool object ref, 1) string, 2) destination character set name, # 3) optional destination byte order (2-byte and 4-byte fixed-width sets only) # Returns: string in specified encoding sub Encode($$$;$) { my ($self, $val, $to, $toOrder) = @_; return $self->Decode($val, undef, undef, $to, $toOrder); } #------------------------------------------------------------------------------ # Decode bit mask # Inputs: 0) value to decode, 1) Reference to hash for decoding (or undef) # 2) optional bits per word (defaults to 32) sub DecodeBits($$;$) { my ($vals, $lookup, $bits) = @_; $bits or $bits = 32; my ($val, $i, @bitList); my $num = 0; foreach $val (split ' ', $vals) { for ($i=0; $i<$bits; ++$i) { next unless $val & (1 << $i); my $n = $i + $num; if (not $lookup) { push @bitList, $n; } elsif ($$lookup{$n}) { push @bitList, $$lookup{$n}; } else { push @bitList, "[$n]"; } } $num += $bits; } return '(none)' unless @bitList; return join($lookup ? ', ' : ',', @bitList); } #------------------------------------------------------------------------------ # Validate an extracted image and repair if necessary # Inputs: 0) ExifTool object reference, 1) image reference, 2) tag name or key # Returns: image reference or undef if it wasn't valid # Note: should be called from RawConv, not ValueConv sub ValidateImage($$$) { my ($self, $imagePt, $tag) = @_; return undef if $$imagePt eq 'none'; unless ($$imagePt =~ /^(Binary data|\xff\xd8\xff)/ or # the first byte of the preview of some Minolta cameras is wrong, # so check for this and set it back to 0xff if necessary $$imagePt =~ s/^.(\xd8\xff\xdb)/\xff$1/s or $self->Options('IgnoreMinorErrors')) { # issue warning only if the tag was specifically requested if ($$self{REQ_TAG_LOOKUP}{lc GetTagName($tag)}) { $self->Warn("$tag is not a valid JPEG image",1); return undef; } } return $imagePt; } #------------------------------------------------------------------------------ # Validate a tag name argument (including group name and wildcards, etc) # Inputs: 0) tag name # Returns: true if tag name is valid # - a tag name may contain [-_A-Za-z0-9], but may not start with [-0-9] # - tag names may contain wildcards [?*], and end with a hash [#] # - may have group name prefixes (which may have family number prefix), separated by colons # - a group name may be zero or more characters sub ValidTagName($) { my $tag = shift; return $tag =~ /^(([-\w]*|\d*\*):)*[_a-zA-Z?*][-\w?*]*#?$/; } #------------------------------------------------------------------------------ # Generate a valid tag name based on the tag ID or name # Inputs: 0) tag ID or name # Returns: valid tag name sub MakeTagName($) { my $name = shift; $name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters $name = ucfirst $name; # capitalize first letter $name = "Tag$name" if length($name) < 2; # must at least 2 characters long return $name; } #------------------------------------------------------------------------------ # Make description from a tag name # Inputs: 0) tag name 1) optional tagID to add at end of description # Returns: description sub MakeDescription($;$) { my ($tag, $tagID) = @_; # start with the tag name and force first letter to be upper case my $desc = ucfirst($tag); # translate underlines to spaces $desc =~ tr/_/ /; # remove hex TagID from name (to avoid inserting spaces in the number) $desc =~ s/ (0x[\da-f]+)$//i and $tagID = $1 unless defined $tagID; # put a space between lower/UPPER case and lower/number combinations $desc =~ s/([a-z])([A-Z\d])/$1 $2/g; # put a space between acronyms and words $desc =~ s/([A-Z])([A-Z][a-z])/$1 $2/g; # put spaces after numbers (if more than one character follows the number) $desc =~ s/(\d)([A-Z]\S)/$1 $2/g; # add TagID to description $desc .= ' ' . $tagID if defined $tagID; return $desc; } #------------------------------------------------------------------------------ # Get descriptions for all tags in an array # Inputs: 0) ExifTool ref, 1) reference to list of tag keys # Returns: reference to hash lookup for descriptions # Note: Returned descriptions are NOT escaped by ESCAPE_PROC sub GetDescriptions($$) { local $_; my ($self, $tags) = @_; my %desc; my $oldEscape = $$self{ESCAPE_PROC}; delete $$self{ESCAPE_PROC}; $desc{$_} = $self->GetDescription($_) foreach @$tags; $$self{ESCAPE_PROC} = $oldEscape; return \%desc; } #------------------------------------------------------------------------------ # Apply filter to value(s) if necessary # Inputs: 0) ExifTool ref, 1-N) references to values(s) to filter # Returns: nothing, but changes values if necessary sub Filter($@) { local $_; my $self = shift; return unless defined $$self{OPTIONS}{Filter}; while (@_) { my $valPt = shift; next unless defined $$valPt; if (not ref $$valPt) { $_ = $$valPt; #### eval Filter ($_) eval $$self{OPTIONS}{Filter}; $$valPt = $_; } elsif (ref $$valPt eq 'SCALAR') { my $val = $$$valPt; # make a copy to avoid filtering twice $self->Filter(\$val); $$valPt = \$val; } elsif (ref $$valPt eq 'ARRAY') { my @val = @{$$valPt}; # make a copy to avoid filtering twice $self->Filter(\$_) foreach @val; $$valPt = \@val; } elsif (ref $$valPt eq 'HASH') { my %val = %{$$valPt}; # make a copy to avoid filtering twice $self->Filter(\$val{$_}) foreach keys %val; $$valPt = \%val; } } } #------------------------------------------------------------------------------ # Return printable value # Inputs: 0) ExifTool object reference # 1) value to print, 2) line length limit (undef defaults to 60, 0=unlimited) sub Printable($;$) { my ($self, $outStr, $maxLen) = @_; return '(undef)' unless defined $outStr; $outStr =~ tr/\x01-\x1f\x7f-\xff/./; $outStr =~ s/\x00//g; my $verbose = $$self{OPTIONS}{Verbose}; if ($verbose < 4) { if ($maxLen) { $maxLen = 20 if $maxLen < 20; # minimum length is 20 } elsif (defined $maxLen) { $maxLen = length $outStr; # 0 is unlimited } else { $maxLen = 60; # default maximum is 60 } } else { $maxLen = length $outStr; # limit to 2048 characters if verbose < 5 $maxLen = 2048 if $maxLen > 2048 and $verbose < 5; } # limit length if necessary $outStr = substr($outStr,0,$maxLen-6) . '[snip]' if length($outStr) > $maxLen; return $outStr; } #------------------------------------------------------------------------------ # Convert date/time from Exif format # Inputs: 0) ExifTool object reference, 1) Date/time in EXIF format # Returns: Formatted date/time string sub ConvertDateTime($$) { my ($self, $date) = @_; my $fmt = $$self{OPTIONS}{DateFormat}; my $shift = $$self{OPTIONS}{GlobalTimeShift}; if ($shift) { my $dir = ($shift =~ s/^([-+])// and $1 eq '-') ? -1 : 1; my $offset = $$self{GLOBAL_TIME_OFFSET}; $offset or $offset = $$self{GLOBAL_TIME_OFFSET} = { }; ShiftTime($date, $shift, $dir, $offset); } # only convert date if a format was specified and the date is recognizable if ($fmt) { # separate time zone if it exists my $tz; $date =~ s/([-+]\d{2}:\d{2}|Z)$// and $tz = $1; # a few cameras use incorrect date/time formatting: # - slashes instead of colons in date (RolleiD330, ImpressCam) # - date/time values separated by colon instead of space (Polariod, Sanyo, Sharp, Vivitar) # - single-digit seconds with leading space (HP scanners) my @a = reverse ($date =~ /\d+/g); # be very flexible about date/time format if (@a and $a[-1] >= 1000 and $a[-1] < 3000 and eval { require POSIX }) { shift @a while @a > 6; # remove superfluous entries unshift @a, 1 while @a < 3; # add month and day if necessary unshift @a, 0 while @a < 6; # add h,m,s if necessary $a[5] -= 1900; # base year is 1900 $a[4] -= 1; # base month is 1 # parse %z and %s ourself (to handle time zones properly) if ($fmt =~ /%[sz]/) { # use system time zone unless otherwise specified $tz = TimeZoneString(\@a, TimeLocal(@a)) if not $tz and eval { require Time::Local }; # remove colon, setting to UTC if time zone is not numeric $tz = ($tz and $tz=~/^([-+]\d{2}):(\d{2})$/) ? "$1$2" : '+0000'; $fmt =~ s/(^|[^%])((%%)*)%z/$1$2$tz/g; # convert '%z' format codes if ($fmt =~ /%s/ and eval { require Time::Local }) { # calculate seconds since the Epoch, UTC my $s = Time::Local::timegm(@a) - 60 * ($tz - int($tz/100) * 40); $fmt =~ s/(^|[^%])((%%)*)%s/$1$2$s/g; # convert '%s' format codes } } $date = POSIX::strftime($fmt, @a); # generate the formatted date/time } elsif ($$self{OPTIONS}{StrictDate}) { undef $date; } } return $date; } #------------------------------------------------------------------------------ # Print conversion for time span value # Inputs: 0) time ticks, 1) number of seconds per tick (default 1) # Returns: readable time sub ConvertTimeSpan($;$) { my ($val, $mult) = @_; if (Image::ExifTool::IsFloat($val) and $val != 0) { $val *= $mult if $mult; if ($val < 60) { $val = "$val seconds"; } elsif ($val < 3600) { my $fmt = ($mult and $mult >= 60) ? '%d' : '%.1f'; my $s = ($val == 60 and $mult) ? '' : 's'; $val = sprintf("$fmt minute$s", $val / 60); } elsif ($val < 24 * 3600) { $val = sprintf("%.1f hours", $val / 3600); } else { $val = sprintf("%.1f days", $val / (24 * 3600)); } } return $val; } #------------------------------------------------------------------------------ # Patched timelocal() that fixes ActivePerl timezone bug # Inputs/Returns: same as timelocal() # Notes: must 'require Time::Local' before calling this routine sub TimeLocal(@) { my $tm = Time::Local::timelocal(@_); if ($^O eq 'MSWin32') { # patch for ActivePerl timezone bug my @t2 = localtime($tm); my $t2 = Time::Local::timelocal(@t2); # adjust timelocal() return value to be consistent with localtime() $tm += $tm - $t2; } return $tm; } #------------------------------------------------------------------------------ # Get time zone in minutes # Inputs: 0) localtime array ref, 1) gmtime array ref # Returns: time zone offset in minutes sub GetTimeZone($$) { my ($tm, $gm) = @_; # compute the number of minutes between localtime and gmtime my $min = $$tm[2] * 60 + $$tm[1] - ($$gm[2] * 60 + $$gm[1]); if ($$tm[3] != $$gm[3]) { # account for case where one date wraps to the first of the next month $$gm[3] = $$tm[3] - ($$tm[3]==1 ? 1 : -1) if abs($$tm[3]-$$gm[3]) != 1; # adjust for the +/- one day difference $min += ($$tm[3] - $$gm[3]) * 24 * 60; } # MirBSD patch to round to the nearest 30 minutes because # it includes leap seconds in localtime but not gmtime $min = int($min / 30 + ($min > 0 ? 0.5 : -0.5)) * 30 if $^O eq 'mirbsd'; return $min; } #------------------------------------------------------------------------------ # Get time zone string # Inputs: 0) time zone offset in minutes # or 0) localtime array ref, 1) corresponding time value # Returns: time zone string ("+/-HH:MM") sub TimeZoneString($;$) { my $min = shift; if (ref $min) { my @gm = gmtime(shift); $min = GetTimeZone($min, \@gm); } my $sign = '+'; $min < 0 and $sign = '-', $min = -$min; my $h = int($min / 60); return sprintf('%s%.2d:%.2d', $sign, $h, $min - $h * 60); } #------------------------------------------------------------------------------ # Convert Unix time to EXIF date/time string # Inputs: 0) Unix time value, 1) non-zero to convert to local time # Returns: EXIF date/time string (with timezone for local times) # Notes: fractional seconds are ignored sub ConvertUnixTime($;$) { my ($time, $toLocal) = @_; return '0000:00:00 00:00:00' if $time == 0; $time = int($time + 1e-6) if $time != int($time); # avoid round-off errors my (@tm, $tz); if ($toLocal) { @tm = localtime($time); $tz = TimeZoneString(\@tm, $time); } else { @tm = gmtime($time); $tz = ''; } my $str = sprintf("%4d:%.2d:%.2d %.2d:%.2d:%.2d%s", $tm[5]+1900, $tm[4]+1, $tm[3], $tm[2], $tm[1], $tm[0], $tz); return $str; } #------------------------------------------------------------------------------ # Get Unix time from EXIF-formatted date/time string with optional timezone # Inputs: 0) EXIF date/time string, 1) non-zero if time is local # Returns: Unix time (seconds since 0:00 GMT Jan 1, 1970) or undefined on error sub GetUnixTime($;$) { my ($timeStr, $isLocal) = @_; return 0 if $timeStr eq '0000:00:00 00:00:00'; my @tm = ($timeStr =~ /^(\d+):(\d+):(\d+)\s+(\d+):(\d+):(\d+)/); return undef unless @tm == 6 and eval { require Time::Local }; my $tzsec = 0; # use specified timezone offset (if given) instead of local system time # if we are converting a local time value if ($isLocal and $timeStr =~ /(?:Z|([-+])(\d+):(\d+))$/i) { # use specified timezone if one exists $tzsec = ($2 * 60 + $3) * ($1 eq '-' ? -60 : 60) if $1; undef $isLocal; # convert using GMT corrected for specified timezone } $tm[0] -= 1900; # convert year $tm[1] -= 1; # convert month @tm = reverse @tm; # change to order required by timelocal() return $isLocal ? TimeLocal(@tm) : Time::Local::timegm(@tm) - $tzsec; } #------------------------------------------------------------------------------ # Print conversion for file size # Inputs: 0) file size in bytes # Returns: converted file size sub ConvertFileSize($) { my $val = shift; $val < 2048 and return "$val bytes"; $val < 10240 and return sprintf('%.1f kB', $val / 1024); $val < 2097152 and return sprintf('%.0f kB', $val / 1024); $val < 10485760 and return sprintf('%.1f MB', $val / 1048576); return sprintf('%.0f MB', $val / 1048576); } #------------------------------------------------------------------------------ # Convert seconds to duration string (handles negative durations) # Inputs: 0) floating point seconds # Returns: duration string in form "S.SS s", "MM:SS" or "H:MM:SS" sub ConvertDuration($) { my $time = shift; return $time unless IsFloat($time); return '0 s' if $time == 0; my $sign = ($time > 0 ? '' : (($time = -$time), '-')); return sprintf("$sign%.2f s", $time) if $time < 30; my $h = int($time / 3600); $time -= $h * 3600; my $m = int($time / 60); $time -= $m * 60; if ($h > 24) { my $d = int($h / 24); $h -= $d * 24; $sign = "$sign$d days "; } return sprintf("$sign%d:%.2d:%.2d", $h, $m, int($time)); } #------------------------------------------------------------------------------ # Print conversion for bitrate values # Inputs: 0) bitrate in bits per second # Returns: human-readable bitrate string # Notes: returns input value without formatting if it isn't numerical sub ConvertBitrate($) { my $bitrate = shift; IsFloat($bitrate) or return $bitrate; my @units = ('bps', 'kbps', 'Mbps', 'Gbps'); for (;;) { my $units = shift @units; $bitrate >= 1000 and @units and $bitrate /= 1000, next; my $fmt = $bitrate < 100 ? '%.3g' : '%.0f'; return sprintf("$fmt $units", $bitrate); } } #------------------------------------------------------------------------------ # Convert file name for printing # Inputs: 0) ExifTool ref, 1) file name in CharsetFileName character set # Returns: converted file name in external character set sub ConvertFileName($$) { my ($self, $val) = @_; my $enc = $$self{OPTIONS}{CharsetFileName}; $val = $self->Decode($val, $enc) if $enc; return $val; } #------------------------------------------------------------------------------ # Inverse conversion for file name (encode # Inputs: 0) ExifTool ref, 1) file name in external character set # Returns: file name in CharsetFileName character set sub InverseFileName($$) { my ($self, $val) = @_; my $enc = $$self{OPTIONS}{CharsetFileName}; $val = $self->Encode($val, $enc) if $enc; $val =~ tr/\\/\//; # make sure we are using forward slashes return $val; } #------------------------------------------------------------------------------ # Save information for HTML dump # Inputs: 0) ExifTool hash ref, 1) start offset, 2) data size # 3) comment string, 4) tool tip (or SAME), 5) flags sub HDump($$$$;$$) { my $self = shift; if ($$self{HTML_DUMP}) { my $pos = shift; $pos += $$self{BASE} if $$self{BASE}; $$self{HTML_DUMP}->Add($pos, @_); } } #------------------------------------------------------------------------------ # Identify trailer ending at specified offset from end of file # Inputs: 0) RAF reference, 1) offset from end of file (0 by default) # Returns: Trailer info hash (with RAF and DirName set), # or undef if no recognized trailer was found # Notes: leaves file position unchanged sub IdentifyTrailer($;$) { my $raf = shift; my $offset = shift || 0; my $pos = $raf->Tell(); my ($buff, $type, $len); while ($raf->Seek(-$offset, 2) and ($len = $raf->Tell()) > 0) { # read up to 64 bytes before specified offset from end of file $len = 64 if $len > 64; $raf->Seek(-$len, 1) and $raf->Read($buff, $len) == $len or last; if ($buff =~ /AXS(!|\*).{8}$/s) { $type = 'AFCP'; } elsif ($buff =~ /\xa1\xb2\xc3\xd4$/) { $type = 'FotoStation'; } elsif ($buff =~ /cbipcbbl$/) { $type = 'PhotoMechanic'; } elsif ($buff =~ /^CANON OPTIONAL DATA\0/) { $type = 'CanonVRD'; } elsif ($buff =~ /~\0\x04\0zmie~\0\0\x06.{4}[\x10\x18]\x04$/s or $buff =~ /~\0\x04\0zmie~\0\0\x0a.{8}[\x10\x18]\x08$/s) { $type = 'MIE'; } elsif ($buff =~ /\0\0(QDIOBS|SEFT)$/) { $type = 'Samsung'; } last; } $raf->Seek($pos, 0); # restore original file position return $type ? { RAF => $raf, DirName => $type } : undef; } #------------------------------------------------------------------------------ # Read/rewrite trailer information (including multiple trailers) # Inputs: 0) ExifTool object ref, 1) DirInfo ref: # - requires RAF and DirName # - OutFile is a scalar reference for writing # - scans from current file position if ScanForAFCP is set # Returns: 1 if trailer was processed or couldn't be processed (or written OK) # 0 if trailer was recognized but offsets need fixing (or write error) # - DirName, DirLen, DataPos, Offset, Fixup and OutFile are updated # - preserves current file position and byte order sub ProcessTrailers($$) { my ($self, $dirInfo) = @_; my $dirName = $$dirInfo{DirName}; my $outfile = $$dirInfo{OutFile}; my $offset = $$dirInfo{Offset} || 0; my $fixup = $$dirInfo{Fixup}; my $raf = $$dirInfo{RAF}; my $pos = $raf->Tell(); my $byteOrder = GetByteOrder(); my $success = 1; my $path = $$self{PATH}; for (;;) { # loop through all trailers require "Image/ExifTool/$dirName.pm"; my $proc = "Image::ExifTool::${dirName}::Process$dirName"; my $outBuff; if ($outfile) { # write to local buffer so we can add trailer in proper order later $$outfile and $$dirInfo{OutFile} = \$outBuff, $outBuff = ''; # must generate new fixup if necessary so we can shift # the old fixup separately after we prepend this trailer delete $$dirInfo{Fixup}; } delete $$dirInfo{DirLen}; # reset trailer length $$dirInfo{Offset} = $offset; # set offset from end of file $$dirInfo{Trailer} = 1; # set Trailer flag in case proc cares # add trailer and DirName to SubDirectory PATH push @$path, 'Trailer', $dirName; # read or write this trailer # (proc takes Offset as offset from end of trailer to end of file, # and returns DataPos and DirLen, and Fixup if applicable) no strict 'refs'; my $result = &$proc($self, $dirInfo); use strict 'refs'; # restore PATH (pop last 2 items) splice @$path, -2; # check result if ($outfile) { if ($result > 0) { if ($outBuff) { # write trailers to OutFile in original order $$outfile = $outBuff . $$outfile; # must adjust old fixup start if it exists $$fixup{Start} += length($outBuff) if $fixup; $outBuff = ''; # free memory } if ($$dirInfo{Fixup}) { if ($fixup) { # add fixup for subsequent trailers to the fixup for this trailer # (but first we must adjust for the new start position) $$fixup{Shift} += $$dirInfo{Fixup}{Start}; $$fixup{Start} -= $$dirInfo{Fixup}{Start}; $$dirInfo{Fixup}->AddFixup($fixup); } $fixup = $$dirInfo{Fixup}; # save fixup } } else { $success = 0 if $self->Error("Error rewriting $dirName trailer", 2); last; } } elsif ($result < 0) { # can't continue if we must scan for this trailer $success = 0; last; } last unless $result > 0 and $$dirInfo{DirLen}; # look for next trailer $offset += $$dirInfo{DirLen}; my $nextTrail = IdentifyTrailer($raf, $offset) or last; $dirName = $$dirInfo{DirName} = $$nextTrail{DirName}; $raf->Seek($pos, 0); } SetByteOrder($byteOrder); # restore original byte order $raf->Seek($pos, 0); # restore original file position $$dirInfo{OutFile} = $outfile; # restore original outfile $$dirInfo{Offset} = $offset; # return offset from EOF to start of first trailer $$dirInfo{Fixup} = $fixup; # return fixup information return $success; } #------------------------------------------------------------------------------ # JPEG constants # JPEG marker names %jpegMarker = ( 0x00 => 'NULL', 0x01 => 'TEM', 0xc0 => 'SOF0', # to SOF15, with a few exceptions below 0xc4 => 'DHT', 0xc8 => 'JPGA', 0xcc => 'DAC', 0xd0 => 'RST0', 0xd8 => 'SOI', 0xd9 => 'EOI', 0xda => 'SOS', 0xdb => 'DQT', 0xdc => 'DNL', 0xdd => 'DRI', 0xde => 'DHP', 0xdf => 'EXP', 0xe0 => 'APP0', # to APP15 0xf0 => 'JPG0', 0xfe => 'COM', ); # lookup for size of JPEG marker length word # (2 bytes assumed unless specified here) my %markerLenBytes = ( 0x00 => 0, 0x01 => 0, 0xd0 => 0, 0xd1 => 0, 0xd2 => 0, 0xd3 => 0, 0xd4 => 0, 0xd5 => 0, 0xd6 => 0, 0xd7 => 0, 0xd8 => 0, 0xd9 => 0, 0xda => 0, # J2C 0x30 => 0, 0x31 => 0, 0x32 => 0, 0x33 => 0, 0x34 => 0, 0x35 => 0, 0x36 => 0, 0x37 => 0, 0x38 => 0, 0x39 => 0, 0x3a => 0, 0x3b => 0, 0x3c => 0, 0x3d => 0, 0x3e => 0, 0x3f => 0, 0x4f => 0, 0x92 => 0, 0x93 => 0, # J2C extensions 0x74 => 4, 0x75 => 4, 0x77 => 4, ); #------------------------------------------------------------------------------ # Get JPEG marker name # Inputs: 0) Jpeg number # Returns: marker name sub JpegMarkerName($) { my $marker = shift; my $markerName = $jpegMarker{$marker}; unless ($markerName) { $markerName = $jpegMarker{$marker & 0xf0}; if ($markerName and $markerName =~ /^([A-Z]+)\d+$/) { $markerName = $1 . ($marker & 0x0f); } else { $markerName = sprintf("marker 0x%.2x", $marker); } } return $markerName; } #------------------------------------------------------------------------------ # Adjust directory start position # Inputs: 0) dirInfo ref, 1) start offset # 2) Base for offsets (relative to DataPos, defaults to absolute Base of 0) sub DirStart($$;$) { my ($dirInfo, $start, $base) = @_; $$dirInfo{DirStart} = $start; $$dirInfo{DirLen} -= $start; if (defined $base) { $$dirInfo{Base} = $$dirInfo{DataPos} + $base; $$dirInfo{DataPos} = -$base; # (relative to Base!) } } #------------------------------------------------------------------------------ # Extract metadata from a jpg image # Inputs: 0) ExifTool object reference, 1) dirInfo ref with RAF set # Returns: 1 on success, 0 if this wasn't a valid JPEG file sub ProcessJPEG($$) { local $_; my ($self, $dirInfo) = @_; my ($ch, $s, $length); my $verbose = $$self{OPTIONS}{Verbose}; my $out = $$self{OPTIONS}{TextOut}; my $fast = $$self{OPTIONS}{FastScan}; my $raf = $$dirInfo{RAF}; my $htmlDump = $$self{HTML_DUMP}; my %dumpParms = ( Out => $out ); my ($success, $wantTrailer, $trailInfo, $type); my (@iccChunk, $iccChunkCount, $iccChunksTotal, @flirChunk, $flirCount, $flirTotal); my ($preview, $scalado, @dqt, $subSampling, $dumpEnd, %extendedXMP); # check to be sure this is a valid JPG (or J2C, or EXV) file return 0 unless $raf->Read($s, 2) == 2 and $s =~ /^\xff[\xd8\x4f\x01]/; if ($s eq "\xff\x01") { return 0 unless $raf->Read($s, 5) == 5 and $s eq 'Exiv2'; $type = 'EXV'; } if (not $$self{VALUE}{FileType} or ($$self{DOC_NUM} and $$self{OPTIONS}{ExtractEmbedded})) { $self->SetFileType($type); # set FileType tag return 1 if $fast and $fast == 3; # don't process file when FastScan == 3 $$self{LOW_PRIORITY_DIR}{IFD1} = 1; # lower priority of IFD1 tags } $dumpParms{MaxLen} = 128 if $verbose < 4; if ($htmlDump) { $dumpEnd = $raf->Tell(); my ($n, $t, $m) = $s eq 'Exiv2' ? (7,'EXV','TEM') : (2,'JPEG','SOI'); my $pos = $dumpEnd - $n; $self->HDump(0, $pos, '[unknown header]') if $pos; $self->HDump($pos, $n, "$t header", "$m Marker"); } my $path = $$self{PATH}; my $pn = scalar @$path; # set input record separator to 0xff (the JPEG marker) to make reading quicker local $/ = "\xff"; my ($nextMarker, $nextSegDataPt, $nextSegPos, $combinedSegData); # read file until we reach an end of image (EOI) or start of scan (SOS) Marker: for (;;) { # set marker and data pointer for current segment my $marker = $nextMarker; my $segDataPt = $nextSegDataPt; my $segPos = $nextSegPos; undef $nextMarker; undef $nextSegDataPt; # # read ahead to the next segment unless we have reached EOI, SOS or SOD # unless ($marker and ($marker==0xd9 or ($marker==0xda and not $wantTrailer) or $marker==0x93)) { # read up to next marker (JPEG markers begin with 0xff) my $buff; $raf->ReadLine($buff) or last; # JPEG markers can be padded with unlimited 0xff's for (;;) { $raf->Read($ch, 1) or last Marker; $nextMarker = ord($ch); last unless $nextMarker == 0xff; } # read segment data if it exists if (not defined $markerLenBytes{$nextMarker}) { # read record length word last unless $raf->Read($s, 2) == 2; my $len = unpack('n',$s); # get data length last unless defined($len) and $len >= 2; $nextSegPos = $raf->Tell(); $len -= 2; # subtract size of length word last unless $raf->Read($buff, $len) == $len; $nextSegDataPt = \$buff; # set pointer to our next data } elsif ($markerLenBytes{$nextMarker} == 4) { # handle J2C extensions with 4-byte length word last unless $raf->Read($s, 4) == 4; my $len = unpack('N',$s); # get data length last unless defined($len) and $len >= 4; $nextSegPos = $raf->Tell(); $len -= 4; # subtract size of length word last unless $raf->Seek($len, 1); } # read second segment too if this was the first next unless defined $marker; } # set some useful variables for the current segment my $markerName = JpegMarkerName($marker); $$path[$pn] = $markerName; # # parse the current segment # # handle SOF markers: SOF0-SOF15, except DHT(0xc4), JPGA(0xc8) and DAC(0xcc) if (($marker & 0xf0) == 0xc0 and ($marker == 0xc0 or $marker & 0x03)) { $length = length $$segDataPt; if ($verbose) { print $out "JPEG $markerName ($length bytes):\n"; HexDump($segDataPt, undef, %dumpParms, Addr=>$segPos) if $verbose>2; } elsif ($htmlDump) { $self->HDump($segPos-4, $length+4, "[JPEG $markerName]", undef, 0x08); $dumpEnd = $segPos + $length; } next unless $length >= 6; # extract some useful information my ($p, $h, $w, $n) = unpack('Cn2C', $$segDataPt); my $sof = GetTagTable('Image::ExifTool::JPEG::SOF'); $self->HandleTag($sof, 'ImageWidth', $w); $self->HandleTag($sof, 'ImageHeight', $h); $self->HandleTag($sof, 'EncodingProcess', $marker - 0xc0); $self->HandleTag($sof, 'BitsPerSample', $p); $self->HandleTag($sof, 'ColorComponents', $n); next unless $n == 3 and $length >= 15; my ($i, $hmin, $hmax, $vmin, $vmax); # loop through all components to determine sampling frequency $subSampling = ''; for ($i=0; $i<$n; ++$i) { my $sf = Get8u($segDataPt, 7 + 3 * $i); $subSampling .= sprintf('%.2x', $sf); # isolate horizontal and vertical components my ($hf, $vf) = ($sf >> 4, $sf & 0x0f); unless ($i) { $hmin = $hmax = $hf; $vmin = $vmax = $vf; next; } # determine min/max frequencies $hmin = $hf if $hf < $hmin; $hmax = $hf if $hf > $hmax; $vmin = $vf if $vf < $vmin; $vmax = $vf if $vf > $vmax; } if ($hmin and $vmin) { my ($hs, $vs) = ($hmax / $hmin, $vmax / $vmin); $self->FoundTag($$sof{YCbCrSubSampling}, "$hs $vs"); } next; } elsif ($marker == 0xd9) { # EOI pop @$path; $verbose and print $out "JPEG EOI\n"; my $pos = $raf->Tell(); if ($htmlDump and $dumpEnd) { $self->HDump($dumpEnd, $pos-2-$dumpEnd, '[JPEG Image Data]', undef, 0x08); $self->HDump($pos-2, 2, 'JPEG EOI', undef); $dumpEnd = 0; } $success = 1; # we are here because we are looking for trailer information if ($wantTrailer) { my $start = $$self{PreviewImageStart}; if ($start) { my $buff; # most previews start right after the JPEG EOI, but the Olympus E-20 # preview is 508 bytes into the trailer, the K-M Maxxum 7D preview is # 979 bytes in, and Sony previews can start up to 32 kB into the trailer. # (and Minolta and Sony previews can have a random first byte...) my $scanLen = $$self{Make} =~ /Sony/i ? 65536 : 1024; if ($raf->Read($buff, $scanLen) and ($buff =~ /\xff\xd8\xff./g or ($$self{Make} =~ /(Minolta|Sony)/i and $buff =~ /.\xd8\xff\xdb/g))) { # adjust PreviewImageStart to this location my $actual = $pos + pos($buff) - 4; if ($start ne $actual and $verbose > 1) { print $out "(Fixed PreviewImage location: $start -> $actual)\n"; } # update preview image offsets $$self{VALUE}{PreviewImageStart} = $actual if $$self{VALUE}{PreviewImageStart}; $$self{PreviewImageStart} = $actual; # load preview now if we tried and failed earlier if ($$self{PreviewError} and $$self{PreviewImageLength}) { if ($raf->Seek($actual, 0) and $raf->Read($buff, $$self{PreviewImageLength})) { $self->FoundTag('PreviewImage', $buff); delete $$self{PreviewError}; } } } $raf->Seek($pos, 0); } } # process trailer now or finish processing trailers # and scan for AFCP if necessary my $fromEnd = 0; if ($trailInfo) { $$trailInfo{ScanForAFCP} = 1; # scan now if necessary $self->ProcessTrailers($trailInfo); # save offset from end of file to start of first trailer $fromEnd = $$trailInfo{Offset}; undef $trailInfo; } if ($$self{LeicaTrailer}) { $raf->Seek(0, 2); $$self{LeicaTrailer}{TrailPos} = $pos; $$self{LeicaTrailer}{TrailLen} = $raf->Tell() - $pos - $fromEnd; Image::ExifTool::Panasonic::ProcessLeicaTrailer($self); } # finally, dump remaining information in JPEG trailer if ($verbose or $htmlDump) { my $endPos = $$self{LeicaTrailerPos}; unless ($endPos) { $raf->Seek(0, 2); $endPos = $raf->Tell() - $fromEnd; } $self->DumpUnknownTrailer({ RAF => $raf, DataPos => $pos, DirLen => $endPos - $pos }) if $endPos > $pos; } last; # all done parsing file } elsif ($marker == 0xda) { # SOS pop @$path; # all done with meta information unless we have a trailer $verbose and print $out "JPEG SOS\n"; unless ($fast) { $trailInfo = IdentifyTrailer($raf); # process trailer now unless we are doing verbose dump if ($trailInfo and $verbose < 3 and not $htmlDump) { # process trailers (keep trailInfo to finish processing later # only if we can't finish without scanning from end of file) $self->ProcessTrailers($trailInfo) and undef $trailInfo; } if ($wantTrailer) { # seek ahead and validate preview image my $buff; my $curPos = $raf->Tell(); if ($raf->Seek($$self{PreviewImageStart}, 0) and $raf->Read($buff, 4) == 4 and $buff =~ /^.\xd8\xff[\xc4\xdb\xe0-\xef]/) { undef $wantTrailer; } $raf->Seek($curPos, 0) or last; } # seek ahead and process Leica trailer if ($$self{LeicaTrailer}) { require Image::ExifTool::Panasonic; Image::ExifTool::Panasonic::ProcessLeicaTrailer($self); $wantTrailer = 1 if $$self{LeicaTrailer}; } next if $trailInfo or $wantTrailer or $verbose > 2 or $htmlDump; } # nothing interesting to parse after start of scan (SOS) $success = 1; last; # all done parsing file } elsif ($marker == 0x93) { pop @$path; $verbose and print $out "JPEG SOD\n"; $success = 1; next if $verbose > 2 or $htmlDump; last; # all done parsing file } elsif (defined $markerLenBytes{$marker}) { # handle other stand-alone markers and segments we skipped over $verbose and $marker and print $out "JPEG $markerName\n"; next; } elsif ($marker == 0xdb and length($$segDataPt) and # DQT # save the DQT data only if JPEGDigest has been requested # (Note: this will not work with the application -p option # because we aren't checking the RequestAll API option here. # The reason is that there is too much overhead involved in # the calculation of this tag to make this worth the CPU time.) ($$self{REQ_TAG_LOOKUP}{jpegdigest} or $$self{REQ_TAG_LOOKUP}{jpegqualityestimate})) { my $num = unpack('C',$$segDataPt) & 0x0f; # get table index $dqt[$num] = $$segDataPt if $num < 4; # save for MD5 calculation } # handle all other markers my $dumpType = ''; my ($desc, $tip); $length = length $$segDataPt; if ($verbose) { print $out "JPEG $markerName ($length bytes):\n"; if ($verbose > 2) { my %extraParms = ( Addr => $segPos ); $extraParms{MaxLen} = 128 if $verbose == 4; HexDump($segDataPt, undef, %dumpParms, %extraParms); } } # prepare dirInfo hash for processing this information my %dirInfo = ( Parent => $markerName, DataPt => $segDataPt, DataPos => $segPos, DataLen => $length, DirStart => 0, DirLen => $length, Base => 0, ); if ($marker == 0xe0) { # APP0 (JFIF, JFXX, CIFF, AVI1, Ocad) if ($$segDataPt =~ /^JFIF\0/) { $dumpType = 'JFIF'; DirStart(\%dirInfo, 5); # start at byte 5 SetByteOrder('MM'); my $tagTablePtr = GetTagTable('Image::ExifTool::JFIF::Main'); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); } elsif ($$segDataPt =~ /^JFXX\0\x10/) { $dumpType = 'JFXX'; my $tagTablePtr = GetTagTable('Image::ExifTool::JFIF::Extension'); my $tagInfo = $self->GetTagInfo($tagTablePtr, 0x10); $self->FoundTag($tagInfo, substr($$segDataPt, 6)); } elsif ($$segDataPt =~ /^(II|MM).{4}HEAPJPGM/s) { next if $fast and $fast > 1; # skip processing for very fast $dumpType = 'CIFF'; my %dirInfo = ( RAF => new File::RandomAccess($segDataPt) ); $$self{SET_GROUP1} = 'CIFF'; push @{$$self{PATH}}, 'CIFF'; require Image::ExifTool::CanonRaw; Image::ExifTool::CanonRaw::ProcessCRW($self, \%dirInfo); pop @{$$self{PATH}}; delete $$self{SET_GROUP1}; } elsif ($$segDataPt =~ /^(AVI1|Ocad)/) { $dumpType = $1; SetByteOrder('MM'); my $tagTablePtr = GetTagTable("Image::ExifTool::JPEG::$dumpType"); DirStart(\%dirInfo, 4); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); } } elsif ($marker == 0xe1) { # APP1 (EXIF, XMP, QVCI) # (some Kodak cameras don't put a second "\0", and I have seen an # example where there was a second 4-byte APP1 segment header) if ($$segDataPt =~ /^(.{0,4})Exif\0/is) { undef $dumpType; # (will be dumped here) # this is EXIF data -- # get the data block (into a common variable) my $hdrLen = length($exifAPP1hdr); if (length $1) { $hdrLen += length $1; $self->Warn('Unknown garbage at start of EXIF segment',1); } elsif ($$segDataPt !~ /^Exif\0/) { $self->Warn('Incorrect EXIF segment identifier',1); } DirStart(\%dirInfo, $hdrLen, $hdrLen); if ($htmlDump) { $self->HDump($segPos-4, 4, 'APP1 header', "Data size: $length bytes"); $self->HDump($segPos, $hdrLen, 'Exif header', 'APP1 data type: Exif'); $dumpEnd = $segPos + $length; } # extract the EXIF information (it is in standard TIFF format) $self->ProcessTIFF(\%dirInfo); # avoid looking for preview unless necessary because it really slows # us down -- only look for it if we found pointer, and preview is # outside EXIF, and PreviewImage is specifically requested my $start = $self->GetValue('PreviewImageStart', 'ValueConv'); my $plen = $self->GetValue('PreviewImageLength', 'ValueConv'); if (not $start or not $plen and $$self{PreviewError}) { $start = $$self{PreviewImageStart}; $plen = $$self{PreviewImageLength}; } if ($start and $plen and IsInt($start) and IsInt($plen) and $start + $plen > $$self{EXIF_POS} + length($$self{EXIF_DATA}) and ($$self{REQ_TAG_LOOKUP}{previewimage} or # (extracted normally, so check Binary option) ($$self{OPTIONS}{Binary} and not $$self{EXCL_TAG_LOOKUP}{previewimage}))) { $$self{PreviewImageStart} = $start; $$self{PreviewImageLength} = $plen; $wantTrailer = 1; } } elsif ($$segDataPt =~ /^$xmpExtAPP1hdr/) { # off len -- extended XMP header (75 bytes total): # 0 35 bytes - signature # 35 32 bytes - GUID (MD5 hash of full extended XMP data in ASCII) # 67 4 bytes - total size of extended XMP data # 71 4 bytes - offset for this XMP data portion $dumpType = 'Extended XMP'; if ($length > 75) { my ($size, $off) = unpack('x67N2', $$segDataPt); my $guid = substr($$segDataPt, 35, 32); if ($guid =~ /[^A-Za-z0-9]/) { # (technically, should be uppercase) $self->WarnOnce($tip = 'Invalid extended XMP GUID'); } else { my $extXMP = $extendedXMP{$guid}; if (not $extXMP) { $extXMP = $extendedXMP{$guid} = { }; } elsif ($size != $$extXMP{Size}) { $self->WarnOnce('Inconsistent extended XMP size'); } $$extXMP{Size} = $size; $$extXMP{$off} = substr($$segDataPt, 75); $tip = "Full length: $size\nChunk offset: $off\nChunk length: " . ($length - 75) . "\nGUID: $guid"; # (delay processing extended XMP until after reading all segments) } } else { $self->WarnOnce($tip = 'Invalid extended XMP segment'); } } elsif ($$segDataPt =~ /^QVCI\0/) { $dumpType = 'QVCI'; my $tagTablePtr = GetTagTable('Image::ExifTool::Casio::QVCI'); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); } elsif ($$segDataPt =~ /^FLIR\0/ and $length >= 8) { $dumpType = 'FLIR'; # must concatenate FLIR chunks (note: handle the case where # some software erroneously writes zeros for the chunk counts) my $chunkNum = Get8u($segDataPt, 6); my $chunksTot = Get8u($segDataPt, 7) + 1; # (note the "+ 1"!) $verbose and printf $out "$$self{INDENT}FLIR chunk %d of %d\n", $chunkNum + 1, $chunksTot; if (defined $flirTotal) { # abort parsing FLIR if the total chunk count is inconsistent undef $flirCount if $chunksTot != $flirTotal; } else { $flirCount = 0; $flirTotal = $chunksTot; } if (defined $flirCount) { if (defined $flirChunk[$chunkNum]) { $self->WarnOnce('Duplicate FLIR chunk number(s)'); $flirChunk[$chunkNum] .= substr($$segDataPt, 8); } else { $flirChunk[$chunkNum] = substr($$segDataPt, 8); } # process the FLIR information if we have all of the chunks if (++$flirCount >= $flirTotal) { my $flir = ''; defined $_ and $flir .= $_ foreach @flirChunk; undef @flirChunk; # free memory my $tagTablePtr = GetTagTable('Image::ExifTool::FLIR::FFF'); my %dirInfo = ( DataPt => \$flir, Parent => $markerName, DirName => 'FLIR', ); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); undef $flirCount; # prevent reprocessing } } else { $self->WarnOnce('Invalid or extraneous FLIR chunk(s)'); } } else { # Hmmm. Could be XMP, let's see my $processed; if ($$segDataPt =~ /^http/ or $$segDataPt =~ /^XMP\0/ or $$segDataPt =~ /<exif:/) { $dumpType = 'XMP'; # also try to parse XMP with a non-standard header # (note: this non-standard XMP is ignored when writing) my $start = ($$segDataPt =~ /^$xmpAPP1hdr/) ? length($xmpAPP1hdr) : 0; my $tagTablePtr = GetTagTable('Image::ExifTool::XMP::Main'); DirStart(\%dirInfo, $start); $dirInfo{DirName} = $start ? 'XMP' : 'XML', $processed = $self->ProcessDirectory(\%dirInfo, $tagTablePtr); if ($processed and not $start) { $self->Warn('Non-standard header for APP1 XMP segment'); } } if ($verbose and not $processed) { $self->Warn("Ignored APP1 segment length $length (unknown header)"); } } } elsif ($marker == 0xe2) { # APP2 (ICC Profile, FPXR, MPF, PreviewImage) if ($$segDataPt =~ /^ICC_PROFILE\0/ and $length >= 14) { $dumpType = 'ICC_Profile'; # must concatenate profile chunks (note: handle the case where # some software erroneously writes zeros for the chunk counts) my $chunkNum = Get8u($segDataPt, 12); my $chunksTot = Get8u($segDataPt, 13); $verbose and print $out "$$self{INDENT}ICC_Profile chunk $chunkNum of $chunksTot\n"; if (defined $iccChunksTotal) { # abort parsing ICC_Profile if the total chunk count is inconsistent undef $iccChunkCount if $chunksTot != $iccChunksTotal; } else { $iccChunkCount = 0; $iccChunksTotal = $chunksTot; $self->Warn('ICC_Profile chunk count is zero') if !$chunksTot; } if (defined $iccChunkCount) { if (defined $iccChunk[$chunkNum]) { $self->WarnOnce('Duplicate ICC_Profile chunk number(s)'); $iccChunk[$chunkNum] .= substr($$segDataPt, 14); } else { $iccChunk[$chunkNum] = substr($$segDataPt, 14); } # process profile if we have all of the chunks if (++$iccChunkCount >= $iccChunksTotal) { my $icc_profile = ''; defined $_ and $icc_profile .= $_ foreach @iccChunk; undef @iccChunk; # free memory my $tagTablePtr = GetTagTable('Image::ExifTool::ICC_Profile::Main'); my %dirInfo = ( DataPt => \$icc_profile, DataPos => $segPos + 14, DataLen => length($icc_profile), DirStart => 0, DirLen => length($icc_profile), Parent => $markerName, ); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); undef $iccChunkCount; # prevent reprocessing } } else { $self->WarnOnce('Invalid or extraneous ICC_Profile chunk(s)'); } } elsif ($$segDataPt =~ /^FPXR\0/) { next if $fast and $fast > 1; # skip processing for very fast $dumpType = 'FPXR'; my $tagTablePtr = GetTagTable('Image::ExifTool::FlashPix::Main'); # set flag if this is the last FPXR segment $dirInfo{LastFPXR} = not ($nextMarker==$marker and $$nextSegDataPt=~/^FPXR\0/), $self->ProcessDirectory(\%dirInfo, $tagTablePtr); } elsif ($$segDataPt =~ /^MPF\0/) { undef $dumpType; # (will be dumped here) DirStart(\%dirInfo, 4, 4); $dirInfo{Multi} = 1; # the MP Attribute IFD will be MPF1 if ($htmlDump) { $self->HDump($segPos-4, 4, 'APP2 header', "Data size: $length bytes"); $self->HDump($segPos, 4, 'MPF header', 'APP2 data type: MPF'); $dumpEnd = $segPos + $length; } # extract the MPF information (it is in standard TIFF format) my $tagTablePtr = GetTagTable('Image::ExifTool::MPF::Main'); $self->ProcessTIFF(\%dirInfo, $tagTablePtr); } elsif ($$segDataPt =~ /^(|QVGA\0|BGTH)\xff\xd8\xff[\xdb\xe0\xe1]/) { # Samsung/GE/GoPro="", BenQ DC C1220/Pentacon/Polaroid="QVGA\0", # Digilife DDC-690/Rollei="BGTH" $dumpType = 'Preview Image'; $preview = substr($$segDataPt, length($1)); } elsif ($preview) { $dumpType = 'Preview Image'; $preview .= $$segDataPt; } if ($preview and $nextMarker ne $marker) { $self->FoundTag('PreviewImage', $preview); undef $preview; } } elsif ($marker == 0xe3) { # APP3 (Kodak "Meta", Stim) if ($$segDataPt =~ /^(Meta|META|Exif)\0\0/) { undef $dumpType; # (will be dumped here) DirStart(\%dirInfo, 6, 6); if ($htmlDump) { $self->HDump($segPos-4, 10, 'APP3 Meta header'); $dumpEnd = $segPos + $length; } my $tagTablePtr = GetTagTable('Image::ExifTool::Kodak::Meta'); $self->ProcessTIFF(\%dirInfo, $tagTablePtr); } elsif ($$segDataPt =~ /^Stim\0/) { undef $dumpType; # (will be dumped here) DirStart(\%dirInfo, 6, 6); if ($htmlDump) { $self->HDump($segPos-4, 4, 'APP3 header', "Data size: $length bytes"); $self->HDump($segPos, 5, 'Stim header', 'APP3 data type: Stim'); $dumpEnd = $segPos + $length; } # extract the Stim information (it is in standard TIFF format) my $tagTablePtr = GetTagTable('Image::ExifTool::Stim::Main'); $self->ProcessTIFF(\%dirInfo, $tagTablePtr); } elsif ($$segDataPt =~ /^\xff\xd8\xff\xdb/) { $dumpType = 'PreviewImage'; # (Samsung, HP, BenQ) $preview = $$segDataPt; } if ($preview and $nextMarker ne 0xe4) { # this preview continues in APP4 $self->FoundTag('PreviewImage', $preview); undef $preview; } } elsif ($marker == 0xe4) { # APP4 ("SCALADO", FPXR, PreviewImage) if ($$segDataPt =~ /^SCALADO\0/ and $length >= 16) { $dumpType = 'SCALADO'; my ($num, $idx, $len) = unpack('x8n2N', $$segDataPt); # assume that the segments are in order and just concatinate them $scalado = '' unless defined $scalado; $scalado .= substr($$segDataPt, 16); if ($idx == $num - 1) { if ($len != length $scalado) { $self->Warn('Possibly corrupted APP4 SCALADO data', 1); } my %dirInfo = ( Parent => $markerName, DataPt => \$scalado, ); my $tagTablePtr = GetTagTable('Image::ExifTool::Scalado::Main'); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); undef $scalado; } } elsif ($$segDataPt =~ /^FPXR\0/) { next if $fast and $fast > 1; # skip processing for very fast $dumpType = 'FPXR'; my $tagTablePtr = GetTagTable('Image::ExifTool::FlashPix::Main'); # set flag if this is the last FPXR segment $dirInfo{LastFPXR} = not ($nextMarker==$marker and $$nextSegDataPt=~/^FPXR\0/), $self->ProcessDirectory(\%dirInfo, $tagTablePtr); } elsif ($preview) { # continued Samsung S1060 preview from APP3 $dumpType = 'PreviewImage'; $preview .= $$segDataPt; } # BenQ DC E1050 continues preview in APP5 if ($preview and $nextMarker ne 0xe5) { $self->FoundTag('PreviewImage', $preview); undef $preview; } } elsif ($marker == 0xe5) { # APP5 (Ricoh "RMETA") if ($$segDataPt =~ /^RMETA\0/) { # (NOTE: apparently these may span multiple segments, but I haven't seen # a sample like this, so multi-segment support hasn't yet been implemented) $dumpType = 'Ricoh RMETA'; DirStart(\%dirInfo, 6, 6); my $tagTablePtr = GetTagTable('Image::ExifTool::Ricoh::RMETA'); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); } elsif ($preview) { $dumpType = 'PreviewImage'; $preview .= $$segDataPt; $self->FoundTag('PreviewImage', $preview); undef $preview; } } elsif ($marker == 0xe6) { # APP6 (Toshiba EPPIM, NITF, HP_TDHD) if ($$segDataPt =~ /^EPPIM\0/) { undef $dumpType; # (will be dumped here) DirStart(\%dirInfo, 6, 6); if ($htmlDump) { $self->HDump($segPos-4, 10, 'APP6 EPPIM header'); $dumpEnd = $segPos + $length; } my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::EPPIM'); $self->ProcessTIFF(\%dirInfo, $tagTablePtr); } elsif ($$segDataPt =~ /^NITF\0/) { $dumpType = 'NITF'; SetByteOrder('MM'); my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::NITF'); DirStart(\%dirInfo, 5); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); } elsif ($$segDataPt =~ /^TDHD\x01\0\0\0/ and $length > 12) { # HP Photosmart R837 APP6 "TDHD" segment $dumpType = 'TDHD'; my $tagTablePtr = GetTagTable('Image::ExifTool::HP::TDHD'); # (ignore first TDHD element because size includes 12-byte tag header) DirStart(\%dirInfo, 12); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); } } elsif ($marker == 0xe7) { # APP7 (Pentax, Qualcomm) if ($$segDataPt =~ /^PENTAX \0(II|MM)/) { # found in K-3 images (is this multi-segment??) SetByteOrder($1); undef $dumpType; # (dump this ourself) my $hdrLen = 10; my $tagTablePtr = GetTagTable('Image::ExifTool::Pentax::Main'); DirStart(\%dirInfo, $hdrLen, 0); $dirInfo{DirName} = 'Pentax APP7'; if ($htmlDump) { $self->HDump($segPos-4, 4, 'APP7 header', "Data size: $length bytes"); $self->HDump($segPos, $hdrLen, 'Pentax header', 'APP7 data type: Pentax'); $dumpEnd = $segPos + $length; } $self->ProcessDirectory(\%dirInfo, $tagTablePtr); } elsif ($$segDataPt =~ /^\x1aQualcomm Camera Attributes/) { # found in HP iPAQ_VoiceMessenger $dumpType = 'Qualcomm'; my $tagTablePtr = GetTagTable('Image::ExifTool::Qualcomm::Main'); DirStart(\%dirInfo, 27); $dirInfo{DirName} = 'Qualcomm'; $self->ProcessDirectory(\%dirInfo, $tagTablePtr); } } elsif ($marker == 0xe8) { # APP8 (SPIFF) # my sample SPIFF has 32 bytes of data, but spec states 30 if ($$segDataPt =~ /^SPIFF\0/ and $length == 32) { $dumpType = 'SPIFF'; DirStart(\%dirInfo, 6); my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::SPIFF'); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); } } elsif ($marker == 0xe9) { # APP9 (Media Jukebox) if ($$segDataPt =~ /^Media Jukebox\0/ and $length > 22) { $dumpType = 'MediaJukebox'; # (start parsing after the "<MJMD>") DirStart(\%dirInfo, 22); $dirInfo{DirName} = 'MediaJukebox'; require Image::ExifTool::XMP; my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::MediaJukebox'); $self->ProcessDirectory(\%dirInfo, $tagTablePtr, \&Image::ExifTool::XMP::ProcessXMP); } } elsif ($marker == 0xea) { # APP10 (PhotoStudio Unicode comments) if ($$segDataPt =~ /^UNICODE\0/) { $dumpType = 'PhotoStudio'; my $comment = $self->Decode(substr($$segDataPt,8), 'UCS2', 'MM'); $self->FoundTag('Comment', $comment); } } elsif ($marker == 0xeb) { # APP11 (JPEG-HDR) if ($$segDataPt =~ /^HDR_RI /) { $dumpType = 'JPEG-HDR'; my $dataPt = $segDataPt; if (defined $combinedSegData) { if ($$segDataPt =~ /~\0/g) { $combinedSegData .= substr($$segDataPt,pos($$segDataPt)); } else { $self->Warn('Invalid format for JPEG-HDR extended segment'); } $dataPt = \$combinedSegData; } if ($nextMarker == $marker and $$nextSegDataPt =~ /^HDR_RI /) { $combinedSegData = $$segDataPt unless defined $combinedSegData; } else { my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::HDR'); my %dirInfo = ( DataPt => $dataPt ); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); undef $combinedSegData; } } } elsif ($marker == 0xec) { # APP12 (Ducky, Picture Info) if ($$segDataPt =~ /^Ducky/) { $dumpType = 'Ducky'; DirStart(\%dirInfo, 5); my $tagTablePtr = GetTagTable('Image::ExifTool::APP12::Ducky'); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); } else { my $tagTablePtr = GetTagTable('Image::ExifTool::APP12::PictureInfo'); $self->ProcessDirectory(\%dirInfo, $tagTablePtr) and $dumpType = 'Picture Info'; } } elsif ($marker == 0xed) { # APP13 (Photoshop, Adobe_CM) my $isOld; if ($$segDataPt =~ /^$psAPP13hdr/ or ($$segDataPt =~ /^$psAPP13old/ and $isOld=1)) { $dumpType = 'Photoshop'; # add this data to the combined data if it exists my $dataPt = $segDataPt; if (defined $combinedSegData) { $combinedSegData .= substr($$segDataPt,length($psAPP13hdr)); $dataPt = \$combinedSegData; } # peek ahead to see if the next segment is photoshop data too if ($nextMarker == $marker and $$nextSegDataPt =~ /^$psAPP13hdr/) { # initialize combined data if necessary $combinedSegData = $$segDataPt unless defined $combinedSegData; # (will handle the Photoshop data the next time around) } else { my $hdrLen = $isOld ? 27 : 14; # process APP13 Photoshop record my $tagTablePtr = GetTagTable('Image::ExifTool::Photoshop::Main'); my %dirInfo = ( DataPt => $dataPt, DataPos => $segPos, DataLen => length $$dataPt, DirStart => $hdrLen, # directory starts after identifier DirLen => length($$dataPt) - $hdrLen, Parent => $markerName, ); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); undef $combinedSegData; } } elsif ($$segDataPt =~ /^Adobe_CM/) { $dumpType = 'Adobe_CM'; SetByteOrder('MM'); my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::AdobeCM'); DirStart(\%dirInfo, 8); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); } } elsif ($marker == 0xee) { # APP14 (Adobe) if ($$segDataPt =~ /^Adobe/) { # extract as a block if requested, or if copying tags from file if ($$self{REQ_TAG_LOOKUP}{adobe} or # (not extracted normally, so check TAGS_FROM_FILE) ($$self{TAGS_FROM_FILE} and not $$self{EXCL_TAG_LOOKUP}{adobe})) { $self->FoundTag('Adobe', $$segDataPt); } $dumpType = 'Adobe'; SetByteOrder('MM'); my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::Adobe'); DirStart(\%dirInfo, 5); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); } } elsif ($marker == 0xef) { # APP15 (GraphicConverter) if ($$segDataPt =~ /^Q\s*(\d+)/ and $length == 4) { $dumpType = 'GraphicConverter'; my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::GraphConv'); $self->HandleTag($tagTablePtr, 'Q', $1); } } elsif ($marker == 0xfe) { # COM (JPEG comment) $dumpType = 'Comment'; $$segDataPt =~ s/\0+$//; # some dumb softwares add null terminators $self->FoundTag('Comment', $$segDataPt); } elsif ($marker == 0x64) { # CME (J2C comment and extension) $dumpType = 'Comment'; if ($length > 2) { my $reg = unpack('n', $$segDataPt); # get registration value my $val = substr($$segDataPt, 2); $val = $self->Decode($val, 'Latin') if $reg == 1; # (actually an extension for $reg==65535, but store as binary comment) $self->FoundTag('Comment', ($reg==0 or $reg==65535) ? \$val : $val); } } elsif ($marker == 0x51) { # SIZ (J2C) my ($w, $h) = unpack('x2N2', $$segDataPt); $self->FoundTag('ImageWidth', $w); $self->FoundTag('ImageHeight', $h); } elsif (($marker & 0xf0) != 0xe0) { $dumpType = "$markerName segment"; $desc = "[JPEG $markerName]"; # (other known JPEG segments) } if (defined $dumpType) { if (not $dumpType and $$self{OPTIONS}{Unknown}) { $self->Warn("Unknown $markerName segment", 1); } if ($htmlDump) { $desc or $desc = $markerName . ($dumpType ? " $dumpType" : '') . ' segment'; $self->HDump($segPos-4, $length+4, $desc, $tip, 0x08); $dumpEnd = $segPos + $length; } } undef $$segDataPt; } # process extended XMP now if it existed if (%extendedXMP) { my $guid; # GUID indicated by the last main XMP segment my $goodGuid = $$self{VALUE}{HasExtendedXMP} || ''; # GUID of the extended XMP that we will process ('2' for all) my $readGuid = $$self{OPTIONS}{ExtendedXMP} || 0; $readGuid = $goodGuid if $readGuid eq '1'; foreach $guid (sort keys %extendedXMP) { next unless length $guid == 32; # ignore other (internal) keys my $extXMP = $extendedXMP{$guid}; my ($off, @offsets, $warn); # make sure we have all chunks, and create a list of sorted offsets for ($off=0; $off<$$extXMP{Size}; ) { last unless defined $$extXMP{$off}; push @offsets, $off; $off += length $$extXMP{$off}; } unless ($off == $$extXMP{Size}) { $self->Warn("Incomplete extended XMP (GUID $guid)"); next; } if ($guid eq $readGuid or $readGuid eq '2') { $warn = 'Reading non-' if $guid ne $goodGuid; my $buff = ''; # assemble XMP all together $buff .= $$extXMP{$_} foreach @offsets; my $tagTablePtr = GetTagTable('Image::ExifTool::XMP::Main'); my %dirInfo = ( DataPt => \$buff, Parent => 'APP1', ); $self->ProcessDirectory(\%dirInfo, $tagTablePtr); } else { $warn = 'Ignored '; $warn .= 'non-' if $guid ne $goodGuid; } $self->Warn("${warn}standard extended XMP (GUID $guid)") if $warn; delete $extendedXMP{$guid}; } } # calculate JPEGDigest if requested if (@dqt) { require Image::ExifTool::JPEGDigest; Image::ExifTool::JPEGDigest::Calculate($self, \@dqt, $subSampling); } # issue necessary warnings $self->Warn('Incomplete ICC_Profile record', 1) if defined $iccChunkCount; $self->Warn('Incomplete FLIR record', 1) if defined $flirCount; $self->Warn('Error reading PreviewImage', 1) if $$self{PreviewError}; $success or $self->Warn('JPEG format error'); pop @$path if @$path > $pn; return 1; } #------------------------------------------------------------------------------ # Extract metadata from an Exiv2 EXV file # Inputs: 0) ExifTool object reference, 1) dirInfo ref with RAF set # Returns: 1 on success, 0 if this wasn't a valid JPEG file sub ProcessEXV($$) { my ($self, $dirInfo) = @_; return $self->ProcessJPEG($dirInfo); } #------------------------------------------------------------------------------ # Process EXIF file # Inputs/Returns: same as ProcessTIFF sub ProcessEXIF($$;$) { my ($self, $dirInfo, $tagTablePtr) = @_; return $self->ProcessTIFF($dirInfo, $tagTablePtr); } #------------------------------------------------------------------------------ # Process TIFF data (wrapper for DoProcessTIFF to allow re-entry) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) optional tag table ref # Returns: 1 if this looked like a valid EXIF block, 0 otherwise, or -1 on write error sub ProcessTIFF($$;$) { my ($self, $dirInfo, $tagTablePtr) = @_; my $exifData = $$self{EXIF_DATA}; my $exifPos = $$self{EXIF_POS}; my $rtnVal = $self->DoProcessTIFF($dirInfo, $tagTablePtr); # restore original EXIF information (in case ProcessTIFF is nested) if (defined $exifData) { $$self{EXIF_DATA} = $exifData; $$self{EXIF_POS} = $exifPos; } return $rtnVal; } #------------------------------------------------------------------------------ # Process TIFF data # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) optional tag table ref # Returns: 1 if this looked like a valid EXIF block, 0 otherwise, or -1 on write error sub DoProcessTIFF($$;$) { my ($self, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $fileType = $$dirInfo{Parent} || ''; my $raf = $$dirInfo{RAF}; my $base = $$dirInfo{Base} || 0; my $outfile = $$dirInfo{OutFile}; my ($err, $sig, $canonSig, $otherSig); # attempt to read TIFF header $$self{EXIF_DATA} = ''; if ($raf) { if ($outfile) { $raf->Seek(0, 0) or return 0; if ($base) { $raf->Read($$dataPt, $base) == $base or return 0; Write($outfile, $$dataPt) or $err = 1; } } else { $raf->Seek($base, 0) or return 0; } # extract full EXIF block (for block copy) from EXIF file my $amount = $fileType eq 'EXIF' ? 65536 * 8 : 8; my $n = $raf->Read($$self{EXIF_DATA}, $amount); if ($n < 8) { return 0 if $n or not $outfile or $fileType ne 'EXIF'; # create EXIF file from scratch delete $$self{EXIF_DATA}; undef $raf; } if ($n > 8) { $raf->Seek(8, 0); if ($n == $amount) { $$self{EXIF_DATA} = substr($$self{EXIF_DATA}, 0, 8); $self->Warn('EXIF too large to extract as a block'); #(shouldn't happen) } } } elsif ($dataPt and length $$dataPt) { # save a copy of the EXIF data my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || (length($$dataPt) - $dirStart); $$self{EXIF_DATA} = substr($$dataPt, $dirStart, $dirLen); $self->VerboseDir('TIFF') if $$self{OPTIONS}{Verbose} and length($$self{INDENT}) > 2; } elsif ($outfile) { delete $$self{EXIF_DATA}; # create from scratch } else { $$self{EXIF_DATA} = ''; } unless (defined $$self{EXIF_DATA}) { # create TIFF information from scratch if ($self->SetPreferredByteOrder() eq 'MM') { $$self{EXIF_DATA} = "MM\0\x2a\0\0\0\x08"; } else { $$self{EXIF_DATA} = "II\x2a\0\x08\0\0\0"; } } $$self{FIRST_EXIF_POS} = $base + $$self{BASE} unless defined $$self{FIRST_EXIF_POS}; $$self{EXIF_POS} = $base + $$self{BASE}; $dataPt = \$$self{EXIF_DATA}; # set byte ordering my $byteOrder = substr($$dataPt,0,2); SetByteOrder($byteOrder) or return 0; # verify the byte ordering my $identifier = Get16u($dataPt, 2); # identifier is 0x2a for TIFF (but 0x4f52, 0x5352 or ?? for ORF) # no longer do this because various files use different values # (TIFF=0x2a, RW2/RWL=0x55, HDP=0xbc, BTF=0x2b, ORF=0x4f52/0x5352/0x????) # return 0 unless $identifier == 0x2a; # get offset to IFD0 my $offset = Get32u($dataPt, 4); $offset >= 8 or return 0; if ($raf) { # check for canon or EXIF signature # (Canon CR2 images should have an offset of 16, but it may be # greater if edited by PhotoMechanic) if ($identifier == 0x2a and $offset >= 16) { $raf->Read($sig, 8) == 8 or return 0; $$dataPt .= $sig; if ($sig =~ /^(CR\x02\0|\xba\xb0\xac\xbb|ExifMeta)/) { if ($sig eq 'ExifMeta') { $self->SetFileType($fileType = 'EXIF'); $otherSig = $sig; } else { $fileType = $sig =~ /^CR/ ? 'CR2' : 'Canon 1D RAW'; $canonSig = $sig; } $self->HDump($base+8, 8, "[$fileType header]") if $$self{HTML_DUMP}; } } elsif ($identifier == 0x55 and $fileType =~ /^(RAW|RW2|RWL|TIFF)$/) { # panasonic RAW, RW2 or RWL file my $magic; # test for RW2/RWL magic number if ($offset >= 0x18 and $raf->Read($magic, 16) and $magic eq "\x88\xe7\x74\xd8\xf8\x25\x1d\x4d\x94\x7a\x6e\x77\x82\x2b\x5d\x6a") { $fileType = 'RW2' unless $fileType eq 'RWL'; $self->HDump($base + 8, 16, '[RW2/RWL header]') if $$self{HTML_DUMP}; $otherSig = $magic; # save signature for writing } else { $fileType = 'RAW'; } $tagTablePtr = GetTagTable('Image::ExifTool::PanasonicRaw::Main'); } elsif ($fileType eq 'TIFF') { if ($identifier == 0x2b) { # this looks like a BigTIFF image $raf->Seek(0); require Image::ExifTool::BigTIFF; return 1 if Image::ExifTool::BigTIFF::ProcessBTF($self, $dirInfo); } elsif ($identifier == 0x4f52 or $identifier == 0x5352) { # Olympus ORF image (set FileType now because base type is 'ORF') $self->SetFileType($fileType = 'ORF'); } elsif ($identifier == 0x4352) { $fileType = 'DCP'; } elsif ($byteOrder eq 'II' and ($identifier & 0xff) == 0xbc) { $fileType = 'HDP'; # Windows HD Photo file # check version number my $ver = Get8u($dataPt, 3); if ($ver > 1) { $self->Error("Windows HD Photo version $ver files not yet supported"); return 1; } } } # we have a valid TIFF (or whatever) file if ($fileType and not $$self{VALUE}{FileType}) { my $lookup = $fileTypeLookup{$fileType}; $lookup = $fileTypeLookup{$lookup} unless ref $lookup or not $lookup; # use file extension to pre-determine type if extension is TIFF-based or type is RAW my $baseType = $lookup ? (ref $$lookup[0] ? $$lookup[0][0] : $$lookup[0]) : ''; my $t = ($baseType eq 'TIFF' or $fileType =~ /RAW/) ? $fileType : undef; $self->SetFileType($t); } # don't process file if FastScan == 3 return 1 if not $outfile and $$self{OPTIONS}{FastScan} and $$self{OPTIONS}{FastScan} == 3; } my $ifdName = 'IFD0'; if (not $tagTablePtr or $$tagTablePtr{GROUPS}{0} eq 'EXIF') { $self->FoundTag('ExifByteOrder', $byteOrder); } else { $ifdName = $$tagTablePtr{GROUPS}{1}; } if ($$self{HTML_DUMP}) { my $tip = sprintf("Byte order: %s endian\nIdentifier: 0x%.4x\n$ifdName offset: 0x%.4x", ($byteOrder eq 'II') ? 'Little' : 'Big', $identifier, $offset); $self->HDump($base, 8, 'TIFF header', $tip, 0); } # remember where we found the TIFF data (APP1, APP3, TIFF, NEF, etc...) $$self{TIFF_TYPE} = $fileType; # get reference to the main EXIF table $tagTablePtr or $tagTablePtr = GetTagTable('Image::ExifTool::Exif::Main'); # build directory information hash my %dirInfo = ( Base => $base, DataPt => $dataPt, DataLen => length $$dataPt, DataPos => 0, DirStart => $offset, DirLen => length($$dataPt) - $offset, RAF => $raf, DirName => $ifdName, Parent => $fileType, ImageData=> 'Main', # set flag to get information to copy main image data later Multi => $$dirInfo{Multi}, ); # extract information from the image unless ($outfile) { # process the directory $self->ProcessDirectory(\%dirInfo, $tagTablePtr); # process GeoTiff information if available if ($$self{VALUE}{GeoTiffDirectory}) { require Image::ExifTool::GeoTiff; Image::ExifTool::GeoTiff::ProcessGeoTiff($self); } # process information in recognized trailers if ($raf) { my $trailInfo = IdentifyTrailer($raf); if ($trailInfo) { $$trailInfo{ScanForAFCP} = 1; # scan to find AFCP if necessary $self->ProcessTrailers($trailInfo); } # dump any other known trailer (eg. A100 RAW Data) if ($$self{HTML_DUMP} and $$self{KnownTrailer}) { my $known = $$self{KnownTrailer}; $raf->Seek(0, 2); my $len = $raf->Tell() - $$known{Start}; $len -= $$trailInfo{Offset} if $trailInfo; # account for other trailers $self->HDump($$known{Start}, $len, "[$$known{Name}]") if $len > 0; } } # update FileType if necessary now that we know more about the file if ($$self{DNGVersion} and $$self{VALUE}{FileType} ne 'DNG') { # override whatever FileType we set since we now know it is DNG $self->OverrideFileType('DNG'); } return 1; } # # rewrite the image # if ($$dirInfo{NoTiffEnd}) { delete $$self{TIFF_END}; } else { # initialize TIFF_END so it will be updated by WriteExif() $$self{TIFF_END} = 0; } if ($canonSig) { # write Canon CR2 specially because it has a header we want to preserve, # and possibly trailers added by the Canon utilities and/or PhotoMechanic $dirInfo{OutFile} = $outfile; require Image::ExifTool::CanonRaw; Image::ExifTool::CanonRaw::WriteCR2($self, \%dirInfo, $tagTablePtr) or $err = 1; } else { # write TIFF header (8 bytes [plus optional signature] followed by IFD) if ($fileType eq 'EXIF') { $otherSig = 'ExifMeta'; # force this signature for all EXIF files } elsif (not defined $otherSig) { $otherSig = ''; } my $offset = 8 + length($otherSig); # construct tiff header my $header = substr($$dataPt, 0, 4) . Set32u($offset) . $otherSig; $dirInfo{NewDataPos} = $offset; $dirInfo{HeaderPtr} = \$header; # preserve padding between image data blocks in ORF images # (otherwise dcraw has problems because it assumes fixed block spacing) $dirInfo{PreserveImagePadding} = 1 if $fileType eq 'ORF' or $identifier != 0x2a; my $newData = $self->WriteDirectory(\%dirInfo, $tagTablePtr); if (not defined $newData) { $err = 1; } elsif (length($newData)) { # update header length in case more was added my $hdrLen = length $header; if ($hdrLen != 8) { Set32u($hdrLen, \$header, 4); # also update preview fixup if necessary my $pi = $$self{PREVIEW_INFO}; $$pi{Fixup}{Start} += $hdrLen - 8 if $pi and $$pi{Fixup}; } if ($$self{TIFF_TYPE} eq 'ARW' and not $err) { # write any required ARW trailer and patch other ARW quirks require Image::ExifTool::Sony; my $errStr = Image::ExifTool::Sony::FinishARW($self, $dirInfo, \$newData, $dirInfo{ImageData}); $errStr and $self->Error($errStr); delete $dirInfo{ImageData}; # (was copied by FinishARW) } else { Write($outfile, $header, $newData) or $err = 1; } undef $newData; # free memory } # copy over image data now if necessary if (ref $dirInfo{ImageData} and not $err) { $self->CopyImageData($dirInfo{ImageData}, $outfile) or $err = 1; delete $dirInfo{ImageData}; } } # make local copy of TIFF_END now (it may be reset when processing trailers) my $tiffEnd = $$self{TIFF_END}; delete $$self{TIFF_END}; # rewrite trailers if they exist if ($raf and $tiffEnd and not $err) { my ($buf, $trailInfo); $raf->Seek(0, 2) or $err = 1; my $extra = $raf->Tell() - $tiffEnd; # check for trailer and process if possible for (;;) { last unless $extra > 12; $raf->Seek($tiffEnd); # seek back to end of image $trailInfo = IdentifyTrailer($raf); last unless $trailInfo; my $tbuf = ''; $$trailInfo{OutFile} = \$tbuf; # rewrite trailer(s) $$trailInfo{ScanForAFCP} = 1; # scan for AFCP if necessary # rewrite all trailers to buffer unless ($self->ProcessTrailers($trailInfo)) { undef $trailInfo; $err = 1; last; } # calculate unused bytes before trailer $extra = $$trailInfo{DataPos} - $tiffEnd; last; # yes, the 'for' loop was just a cheap 'goto' } # ignore a single zero byte if used for padding if ($extra > 0 and $tiffEnd & 0x01) { $raf->Seek($tiffEnd, 0) or $err = 1; $raf->Read($buf, 1) or $err = 1; defined $buf and $buf eq "\0" and --$extra, ++$tiffEnd; } if ($extra > 0) { my $known = $$self{KnownTrailer}; if ($$self{DEL_GROUP}{Trailer} and not $known) { $self->VPrint(0, " Deleting unknown trailer ($extra bytes)\n"); ++$$self{CHANGED}; } elsif ($known) { $self->VPrint(0, " Copying $$known{Name} ($extra bytes)\n"); $raf->Seek($tiffEnd, 0) or $err = 1; CopyBlock($raf, $outfile, $extra) or $err = 1; } else { $raf->Seek($tiffEnd, 0) or $err = 1; # preserve unknown trailer only if it contains non-null data # (Photoshop CS adds a trailer with 2 null bytes) my $size = $extra; for (;;) { my $n = $size > 65536 ? 65536 : $size; $raf->Read($buf, $n) == $n or $err = 1, last; if ($buf =~ /[^\0]/) { $self->VPrint(0, " Preserving unknown trailer ($extra bytes)\n"); # copy the trailer since it contains non-null data Write($outfile, "\0"x($extra-$size)) or $err = 1, last if $size != $extra; Write($outfile, $buf) or $err = 1, last; CopyBlock($raf, $outfile, $size-$n) or $err = 1 if $size > $n; last; } $size -= $n; next if $size > 0; $self->VPrint(0, " Deleting blank trailer ($extra bytes)\n"); last; } } } # write trailer buffer if necessary $self->WriteTrailerBuffer($trailInfo, $outfile) or $err = 1 if $trailInfo; # add any new trailers we are creating my $trailPt = $self->AddNewTrailers(); Write($outfile, $$trailPt) or $err = 1 if $trailPt; } # check DNG version if ($$self{DNGVersion}) { my $ver = $$self{DNGVersion}; # currently support up to DNG version 1.4 unless ($ver =~ /^(\d+) (\d+)/ and "$1.$2" <= 1.4) { $ver =~ tr/ /./; $self->Error("DNG Version $ver not yet tested", 1); } } return $err ? -1 : 1; } #------------------------------------------------------------------------------ # Return list of tag table keys (ignoring special keys) # Inputs: 0) reference to tag table # Returns: List of table keys (unsorted) sub TagTableKeys($) { local $_; my $tagTablePtr = shift; my @keyList; foreach (keys %$tagTablePtr) { push(@keyList, $_) unless $specialTags{$_}; } return @keyList; } #------------------------------------------------------------------------------ # GetTagTable # Inputs: 0) table name # Returns: tag table reference, or undefined if not found # Notes: Always use this function instead of requiring module and using table # directly since this function also does the following the first time the table # is loaded: # - requires new module if necessary # - generates default GROUPS hash and Group 0 name from module name # - registers Composite tags if Composite table found # - saves descriptions for tags in specified table # - generates default TAG_PREFIX to be used for unknown tags sub GetTagTable($) { my $tableName = shift or return undef; my $table = $allTables{$tableName}; unless ($table) { no strict 'refs'; unless (%$tableName) { # try to load module for this table if ($tableName =~ /(.*)::/) { my $module = $1; if (eval "require $module") { # load additional XMP modules if required if (not %$tableName and $module eq 'Image::ExifTool::XMP') { require 'Image/ExifTool/XMP2.pl'; } } else { $@ and warn $@; } } unless (%$tableName) { warn "Can't find table $tableName\n"; return undef; } } no strict 'refs'; $table = \%$tableName; use strict 'refs'; $$table{TABLE_NAME} = $tableName; # set table name ($$table{SHORT_NAME} = $tableName) =~ s/^Image::ExifTool:://; # set default group 0 and 1 from module name unless already specified my $defaultGroups = $$table{GROUPS}; $defaultGroups or $defaultGroups = $$table{GROUPS} = { }; unless ($$defaultGroups{0} and $$defaultGroups{1}) { if ($tableName =~ /Image::.*?::([^:]*)/) { $$defaultGroups{0} = $1 unless $$defaultGroups{0}; $$defaultGroups{1} = $1 unless $$defaultGroups{1}; } else { $$defaultGroups{0} = $tableName unless $$defaultGroups{0}; $$defaultGroups{1} = $tableName unless $$defaultGroups{1}; } } $$defaultGroups{2} = 'Other' unless $$defaultGroups{2}; if ($$defaultGroups{0} eq 'XMP' or $$table{NAMESPACE}) { # initialize some XMP table defaults require Image::ExifTool::XMP; Image::ExifTool::XMP::RegisterNamespace($table); # register all table namespaces # set default write/check procs $$table{WRITE_PROC} = \&Image::ExifTool::XMP::WriteXMP unless $$table{WRITE_PROC}; $$table{CHECK_PROC} = \&Image::ExifTool::XMP::CheckXMP unless $$table{CHECK_PROC}; $$table{LANG_INFO} = \&Image::ExifTool::XMP::GetLangInfo unless $$table{LANG_INFO}; } # generate a tag prefix for unknown tags if necessary unless (defined $$table{TAG_PREFIX}) { my $tagPrefix; if ($tableName =~ /Image::.*?::(.*)::Main/ || $tableName =~ /Image::.*?::(.*)/) { ($tagPrefix = $1) =~ s/::/_/g; } else { $tagPrefix = $tableName; } $$table{TAG_PREFIX} = $tagPrefix; } # set up the new table SetupTagTable($table); # add any user-defined tags if (%UserDefined and $UserDefined{$tableName}) { my $tagID; foreach $tagID (TagTableKeys($UserDefined{$tableName})) { next if $specialTags{$tagID}; delete $$table{$tagID}; # replace any existing entry AddTagToTable($table, $tagID, $UserDefined{$tableName}{$tagID}, 1); } } # remember order we loaded the tables in push @tableOrder, $tableName; # insert newly loaded table into list $allTables{$tableName} = $table; } return $table; } #------------------------------------------------------------------------------ # Process an image directory # Inputs: 0) ExifTool object reference, 1) directory information reference # 2) tag table reference, 3) optional reference to processing procedure # Returns: Result from processing (1=success) sub ProcessDirectory($$$;$) { my ($self, $dirInfo, $tagTablePtr, $proc) = @_; return 0 unless $tagTablePtr and $dirInfo; # use default proc from tag table or EXIF proc as fallback if no proc specified $proc or $proc = $$tagTablePtr{PROCESS_PROC} || \&Image::ExifTool::Exif::ProcessExif; # set directory name from default group0 name if not done already my $dirName = $$dirInfo{DirName}; unless ($dirName) { $dirName = $$tagTablePtr{GROUPS}{0}; $dirName = $$tagTablePtr{GROUPS}{1} if $dirName =~ /^APP\d+$/; # (use specific APP name) $$dirInfo{DirName} = $dirName; } # guard against cyclical recursion into the same directory if (defined $$dirInfo{DirStart} and defined $$dirInfo{DataPos} and # directories don't overlap if the length is zero ($$dirInfo{DirLen} or not defined $$dirInfo{DirLen})) { my $addr = $$dirInfo{DirStart} + $$dirInfo{DataPos} + ($$dirInfo{Base}||0); if ($$self{PROCESSED}{$addr}) { $self->Warn("$dirName pointer references previous $$self{PROCESSED}{$addr} directory"); # patch for bug in Windows phone 7.5 O/S that writes incorrect InteropIFD pointer return 0 unless $dirName eq 'GPS' and $$self{PROCESSED}{$addr} eq 'InteropIFD'; } $$self{PROCESSED}{$addr} = $dirName; } my $oldOrder = GetByteOrder(); my $oldIndent = $$self{INDENT}; my $oldDir = $$self{DIR_NAME}; $$self{LIST_TAGS} = { }; # don't build lists across different directories $$self{INDENT} .= '| '; $$self{DIR_NAME} = $dirName; push @{$$self{PATH}}, $dirName; # process the directory my $rtnVal = &$proc($self, $dirInfo, $tagTablePtr); pop @{$$self{PATH}}; $$self{INDENT} = $oldIndent; $$self{DIR_NAME} = $oldDir; SetByteOrder($oldOrder); return $rtnVal; } #------------------------------------------------------------------------------ # Get Metadata path # Inputs: 0) Exiftool object ref # Return: Metadata path string sub MetadataPath($) { my $self = shift; return join '-', @{$$self{PATH}} } #------------------------------------------------------------------------------ # Get standardized file extension # Inputs: 0) file name # Returns: standardized extension (all uppercase), or undefined if no extension sub GetFileExtension($) { my $filename = shift; my $fileExt; if ($filename and $filename =~ /^.*\.([^.]+)$/s) { $fileExt = uc($1); # change extension to upper case # convert TIF extension to TIFF because we use the # extension for the file type tag of TIFF images $fileExt eq 'TIF' and $fileExt = 'TIFF'; } return $fileExt; } #------------------------------------------------------------------------------ # Get list of tag information hashes for given tag ID # Inputs: 0) Tag table reference, 1) tag ID # Returns: Array of tag information references # Notes: Generates tagInfo hash if necessary sub GetTagInfoList($$) { my ($tagTablePtr, $tagID) = @_; my $tagInfo = $$tagTablePtr{$tagID}; if ($specialTags{$tagID}) { # (hopefully this won't happen) warn "Tag $tagID conflicts with internal ExifTool variable in $$tagTablePtr{TABLE_NAME}\n"; } elsif (ref $tagInfo eq 'HASH') { return ($tagInfo); } elsif (ref $tagInfo eq 'ARRAY') { return @$tagInfo; } elsif ($tagInfo) { # create hash with name $tagInfo = $$tagTablePtr{$tagID} = { Name => $tagInfo }; return ($tagInfo); } return (); } #------------------------------------------------------------------------------ # Find tag information, processing conditional tags # Inputs: 0) ExifTool object reference, 1) tagTable pointer, 2) tag ID # 3) optional value reference, 4) optional format type, 5) optional value count # Returns: pointer to tagInfo hash, undefined if none found, or '' if $valPt needed # Notes: You should always call this routine to find a tag in a table because # this routine will evaluate conditional tags. # Arguments 3-5 are only required if the information type allows $valPt, $format and/or # $count in a Condition, and if not given when needed this routine returns ''. sub GetTagInfo($$$;$$$) { my ($self, $tagTablePtr, $tagID) = @_; my ($valPt, $format, $count); my @infoArray = GetTagInfoList($tagTablePtr, $tagID); # evaluate condition my $tagInfo; foreach $tagInfo (@infoArray) { my $condition = $$tagInfo{Condition}; if ($condition) { ($valPt, $format, $count) = splice(@_, 3) if @_ > 3; return '' if $condition =~ /\$(valPt|format|count)\b/ and not defined $valPt; # set old value for use in condition if needed local $SIG{'__WARN__'} = \&SetWarning; undef $evalWarning; #### eval Condition ($self, [$valPt, $format, $count]) unless (eval $condition) { $@ and $evalWarning = $@; $self->Warn("Condition $$tagInfo{Name}: " . CleanWarning()) if $evalWarning; next; } } if ($$tagInfo{Unknown} and not $$self{OPTIONS}{Unknown} and not $$self{OPTIONS}{Verbose}) { # don't return Unknown tags unless that option is set return undef; } # return the tag information we found return $tagInfo; } # generate information for unknown tags (numerical only) if required if (not $tagInfo and ($$self{OPTIONS}{Unknown} or $$self{OPTIONS}{Verbose}) and $tagID =~ /^\d+$/ and not $$self{NO_UNKNOWN}) { my $printConv; if (defined $$tagTablePtr{PRINT_CONV}) { $printConv = $$tagTablePtr{PRINT_CONV}; } else { # limit length of printout (can be very long) $printConv = 'length($val) > 60 ? substr($val,0,55) . "[...]" : $val'; } my $hex = sprintf("0x%.4x", $tagID); my $prefix = $$tagTablePtr{TAG_PREFIX}; $tagInfo = { Name => "${prefix}_$hex", Description => MakeDescription($prefix, $hex), Unknown => 1, Writable => 0, # can't write unknown tags PrintConv => $printConv, }; # add tag information to table AddTagToTable($tagTablePtr, $tagID, $tagInfo); } else { undef $tagInfo; } return $tagInfo; } #------------------------------------------------------------------------------ # Add new tag to table (must use this routine to add new tags to a table) # Inputs: 0) reference to tag table, 1) tag ID # 2) [optional] reference to tag information hash or simply tag name # 3) [optional] flag to avoid adding prefix when generating tag name # Notes: - will not overwrite existing entry in table # - info need contain no entries when this routine is called sub AddTagToTable($$;$$) { my ($tagTablePtr, $tagID, $tagInfo, $noPrefix) = @_; # generate tag info hash if necessary $tagInfo = $tagInfo ? { Name => $tagInfo } : { } unless ref $tagInfo eq 'HASH'; # define necessary entries in information hash if ($$tagInfo{Groups}) { # fill in default groups from table GROUPS foreach (keys %{$$tagTablePtr{GROUPS}}) { next if $$tagInfo{Groups}{$_}; $$tagInfo{Groups}{$_} = $$tagTablePtr{GROUPS}{$_}; } } else { $$tagInfo{Groups} = { %{$$tagTablePtr{GROUPS}} }; } $$tagInfo{Flags} and ExpandFlags($tagInfo); $$tagInfo{GotGroups} = 1, $$tagInfo{Table} = $tagTablePtr; $$tagInfo{TagID} = $tagID; my $name = $$tagInfo{Name}; if (defined $name) { $name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters } else { # construct a name from the tag ID $name = $tagID; $name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters $name = ucfirst $name; # start with uppercase # add prefix if specified my $prefix = $$tagTablePtr{TAG_PREFIX}; if ($prefix and not $noPrefix) { # make description to prevent tagID from getting mangled by MakeDescription() $$tagInfo{Description} = MakeDescription($prefix, $name); $name = "${prefix}_$name"; } } # tag names must be at least 2 characters long and prefer them to start with a letter $name = "Tag$name" if length($name) < 2 or $name !~ /^[A-Z]/i; $$tagInfo{Name} = $name; # add tag to table, but never overwrite existing entries (could potentially happen # if someone thinks there isn't any tagInfo because a condition wasn't satisfied) unless (defined $$tagTablePtr{$tagID} or $specialTags{$tagID}) { $$tagTablePtr{$tagID} = $tagInfo; } } #------------------------------------------------------------------------------ # Handle simple extraction of new tag information # Inputs: 0) ExifTool object ref, 1) tag table reference, 2) tagID, 3) value, # 4-N) parameters hash: Index, DataPt, DataPos, Base, Start, Size, Parent, # TagInfo, ProcessProc, RAF # Returns: tag key or undef if tag not found # Notes: if value is not defined, it is extracted from DataPt using TagInfo # Format and Count if provided sub HandleTag($$$$;%) { my ($self, $tagTablePtr, $tag, $val, %parms) = @_; my $verbose = $$self{OPTIONS}{Verbose}; my $pfmt = $parms{Format}; my $tagInfo = $parms{TagInfo} || $self->GetTagInfo($tagTablePtr, $tag, \$val, $pfmt, $parms{Count}); my $dataPt = $parms{DataPt}; my ($subdir, $format, $count, $size, $noTagInfo, $rational); if ($tagInfo) { $subdir = $$tagInfo{SubDirectory} } else { return undef unless $verbose; $tagInfo = { Name => "tag $tag" }; # create temporary tagInfo hash $noTagInfo = 1; } # read value if not done already (not necessary for subdir) unless (defined $val or ($subdir and not $$tagInfo{Writable})) { my $start = $parms{Start} || 0; my $dLen = $dataPt ? length($$dataPt) : -1; my $size = $parms{Size}; $size = $dLen unless defined $size; # read from data in memory if possible if ($start >= 0 and $start + $size <= $dLen) { $format = $$tagInfo{Format} || $$tagTablePtr{FORMAT}; $format = $pfmt if not $format and $pfmt and $formatSize{$pfmt}; if ($format) { $val = ReadValue($dataPt, $start, $format, $$tagInfo{Count}, $size, \$rational); } else { $val = substr($$dataPt, $start, $size); } } else { $self->Warn("Error extracting value for $$tagInfo{Name}"); return undef; } } # do verbose print if necessary if ($verbose) { undef $tagInfo if $noTagInfo; $parms{Value} = $val; $parms{Value} .= " ($rational)" if defined $rational; $parms{Table} = $tagTablePtr; if ($format) { $count or $count = int(($parms{Size} || 0) / ($formatSize{$format} || 1)); $parms{Format} = $format . "[$count]"; } $self->VerboseInfo($tag, $tagInfo, %parms); } if ($tagInfo) { if ($subdir) { my $subdirStart = $parms{Start}; my $subdirLen = $parms{Size}; if ($$subdir{Start}) { my $valuePtr = 0; #### eval Start ($valuePtr) my $off = eval $$subdir{Start}; $subdirStart += $off; $subdirLen -= $off; } $dataPt or $dataPt = \$val; # process subdirectory information my %dirInfo = ( DirName => $$subdir{DirName} || $$tagInfo{Name}, DataPt => $dataPt, DataLen => length $$dataPt, DataPos => $parms{DataPos}, DirStart => $subdirStart, DirLen => $subdirLen, Parent => $parms{Parent}, Base => $parms{Base}, Multi => $$subdir{Multi}, TagInfo => $tagInfo, RAF => $parms{RAF}, ); my $oldOrder = GetByteOrder(); SetByteOrder($$subdir{ByteOrder}) if $$subdir{ByteOrder}; my $subTablePtr = GetTagTable($$subdir{TagTable}) || $tagTablePtr; $self->ProcessDirectory(\%dirInfo, $subTablePtr, $$subdir{ProcessProc} || $parms{ProcessProc}); SetByteOrder($oldOrder); # return now unless directory is writable as a block return undef unless $$tagInfo{Writable}; } my $key = $self->FoundTag($tagInfo, $val); # save original components of rational numbers $$self{RATIONAL}{$key} = $rational if defined $rational and defined $key; return $key; } return undef; } #------------------------------------------------------------------------------ # Add tag to hash of extracted information # Inputs: 0) ExifTool object reference # 1) reference to tagInfo hash or tag name # 2) data value (or reference to require hash if Composite) # Returns: tag key or undef if no value sub FoundTag($$$) { local $_; my ($self, $tagInfo, $value) = @_; my ($tag, $noListDel); if (ref $tagInfo eq 'HASH') { $tag = $$tagInfo{Name} or warn("No tag name\n"), return undef; } else { $tag = $tagInfo; # look for tag in Extra $tagInfo = $self->GetTagInfo(GetTagTable('Image::ExifTool::Extra'), $tag); # make temporary hash if tag doesn't exist in Extra # (not advised to do this since the tag won't show in list) $tagInfo or $tagInfo = { Name => $tag, Groups => \%allGroupsExifTool }; $$self{OPTIONS}{Verbose} and $self->VerboseInfo(undef, $tagInfo, Value => $value); } # get tag priority my $priority = $$tagInfo{Priority}; unless (defined $priority) { $priority = $$tagInfo{Table}{PRIORITY}; $priority = 0 if not defined $priority and $$tagInfo{Avoid}; } my $valueHash = $$self{VALUE}; if ($$tagInfo{RawConv}) { # initialize @val for use in Composite RawConv expressions my @val; if (ref $value eq 'HASH') { foreach (keys %$value) { $val[$_] = $$valueHash{$$value{$_}}; } } my $conv = $$tagInfo{RawConv}; local $SIG{'__WARN__'} = \&SetWarning; undef $evalWarning; if (ref $conv eq 'CODE') { $value = &$conv($value, $self); } else { my $val = $value; # do this so eval can use $val # NOTE: RawConv is also evaluated in Writer.pl #### eval RawConv ($self, $val, $tag, $tagInfo, $priority) $value = eval $conv; $@ and $evalWarning = $@; } $self->Warn("RawConv $tag: " . CleanWarning()) if $evalWarning; return undef unless defined $value; } # handle duplicate tag names if (defined $$valueHash{$tag}) { # add to list if there is an active list for this tag if ($$self{LIST_TAGS}{$tagInfo}) { $tag = $$self{LIST_TAGS}{$tagInfo}; # use key from previous list tag if (defined $$self{NO_LIST}) { # accumulate list in TAG_EXTRA "NoList" element if (defined $$self{TAG_EXTRA}{$tag}{NoList}) { push @{$$self{TAG_EXTRA}{$tag}{NoList}}, $value; } else { $$self{TAG_EXTRA}{$tag}{NoList} = [ $$valueHash{$tag}, $value ]; } $noListDel = 1; # set flag to delete this tag if re-listed } else { if (ref $$valueHash{$tag} ne 'ARRAY') { $$valueHash{$tag} = [ $$valueHash{$tag} ]; } push @{$$valueHash{$tag}}, $value; return $tag; # return without creating a new entry } } # get next available tag key my $nextInd = $$self{DUPL_TAG}{$tag} = ($$self{DUPL_TAG}{$tag} || 0) + 1; my $nextTag = "$tag ($nextInd)"; # # take tag with highest priority # # promote existing 0-priority tag so it takes precedence over a new 0-tag # (unless old tag was a sub-document and new tag isn't) my $oldPriority = $$self{PRIORITY}{$tag}; unless ($oldPriority) { if ($$self{DOC_NUM} or not $$self{TAG_EXTRA}{$tag} or not $$self{TAG_EXTRA}{$tag}{G3}) { $oldPriority = 1; } else { $oldPriority = 0; # don't promote sub-document tag over main document } } # set priority for this tag if (defined $priority) { # increase 0-priority tags if this is the priority directory $priority = 1 if not $priority and $$self{DIR_NAME} and $$self{DIR_NAME} eq $$self{PRIORITY_DIR}; } elsif ($$self{DIR_NAME} and $$self{LOW_PRIORITY_DIR}{$$self{DIR_NAME}}) { $priority = 0; # default is 0 for a LOW_PRIORITY_DIR } else { $priority = 1; # the normal default } if ($priority >= $oldPriority and not $$self{DOC_NUM} and not $noListDel) { # move existing tag out of the way since this tag is higher priority # (NOTE: any new members added here must also be added to DeleteTag()) $$self{MOVED_KEY} = $nextTag; # used in BuildCompositeTags() $$self{PRIORITY}{$nextTag} = $$self{PRIORITY}{$tag}; $$valueHash{$nextTag} = $$valueHash{$tag}; $$self{FILE_ORDER}{$nextTag} = $$self{FILE_ORDER}{$tag}; my $oldInfo = $$self{TAG_INFO}{$nextTag} = $$self{TAG_INFO}{$tag}; foreach ('TAG_EXTRA','RATIONAL') { if ($$self{$_}{$tag}) { $$self{$_}{$nextTag} = $$self{$_}{$tag}; delete $$self{$_}{$tag}; } } delete $$self{BOTH}{$tag}; # update tag key for list if necessary $$self{LIST_TAGS}{$oldInfo} = $nextTag if $$self{LIST_TAGS}{$oldInfo}; } else { $tag = $nextTag; # don't override the existing tag } $$self{PRIORITY}{$tag} = $priority; $$self{TAG_EXTRA}{$tag}{NoListDel} = 1 if $noListDel; } elsif ($priority) { # set tag priority (only if exists and is non-zero) $$self{PRIORITY}{$tag} = $priority; } # save the raw value, file order, tagInfo ref, group1 name, # and tag key for lists if necessary $$valueHash{$tag} = $value; $$self{FILE_ORDER}{$tag} = ++$$self{NUM_FOUND}; $$self{TAG_INFO}{$tag} = $tagInfo; # set dynamic groups 0, 1 and 3 if necessary $$self{TAG_EXTRA}{$tag}{G0} = $$self{SET_GROUP0} if $$self{SET_GROUP0}; $$self{TAG_EXTRA}{$tag}{G1} = $$self{SET_GROUP1} if $$self{SET_GROUP1}; if ($$self{DOC_NUM}) { $$self{TAG_EXTRA}{$tag}{G3} = $$self{DOC_NUM}; if ($$self{DOC_NUM} =~ /^(\d+)/) { # keep track of maximum 1st-level sub-document number $$self{DOC_COUNT} = $1 unless $$self{DOC_COUNT} >= $1; } } # save path if requested $$self{TAG_EXTRA}{$tag}{G5} = $self->MetadataPath() if $$self{OPTIONS}{SavePath}; # remember this tagInfo if we will be accumulating values in a list # (but don't override earlier list if this may be deleted by NoListDel flag) if ($$tagInfo{List} and not $$self{NO_LIST} and not $noListDel) { $$self{LIST_TAGS}{$tagInfo} = $tag; } return $tag; } #------------------------------------------------------------------------------ # Make current directory the priority directory if not set already # Inputs: 0) ExifTool object reference sub SetPriorityDir($) { my $self = shift; $$self{PRIORITY_DIR} = $$self{DIR_NAME} unless $$self{PRIORITY_DIR}; } #------------------------------------------------------------------------------ # Set family 0 or 1 group name specific to this tag instance # Inputs: 0) ExifTool ref, 1) tag key, 2) group name, 3) family (default 1) sub SetGroup($$$;$) { my ($self, $tagKey, $extra, $fam) = @_; $$self{TAG_EXTRA}{$tagKey}{defined $fam ? "G$fam" : 'G1'} = $extra; } #------------------------------------------------------------------------------ # Delete specified tag # Inputs: 0) ExifTool object ref, 1) tag key sub DeleteTag($$) { my ($self, $tag) = @_; delete $$self{VALUE}{$tag}; delete $$self{FILE_ORDER}{$tag}; delete $$self{TAG_INFO}{$tag}; delete $$self{TAG_EXTRA}{$tag}; delete $$self{PRIORITY}{$tag}; delete $$self{RATIONAL}{$tag}; delete $$self{BOTH}{$tag}; } #------------------------------------------------------------------------------ # Escape all elements of a value # Inputs: 0) value, 1) escape proc sub DoEscape($$) { my ($val, $key); if (not ref $_[0]) { $_[0] = &{$_[1]}($_[0]); } elsif (ref $_[0] eq 'ARRAY') { foreach $val (@{$_[0]}) { DoEscape($val, $_[1]); } } elsif (ref $_[0] eq 'HASH') { foreach $key (keys %{$_[0]}) { DoEscape($_[0]{$key}, $_[1]); } } } #------------------------------------------------------------------------------ # Set the FileType and MIMEType tags # Inputs: 0) ExifTool object reference # 1) Optional file type (uses FILE_TYPE if not specified) # 2) Optional MIME type (uses our lookup if not specified) # 3) Optional recommended extension (converted to lower case; uses FileType if undef) # Notes: Will NOT set file type twice (subsequent calls ignored) sub SetFileType($;$$$) { my ($self, $fileType, $mimeType, $normExt) = @_; unless ($$self{VALUE}{FileType} and not $$self{DOC_NUM}) { my $baseType = $$self{FILE_TYPE}; my $ext = $$self{FILE_EXT}; $fileType or $fileType = $baseType; # handle sub-types which are identified by extension if (defined $ext and $ext ne $fileType and not $$self{DOC_NUM}) { my ($f,$e) = @fileTypeLookup{$fileType,$ext}; if (ref $f eq 'ARRAY' and ref $e eq 'ARRAY' and $$f[0] eq $$e[0]) { # make sure $fileType was a root type and not another sub-type $fileType = $ext if $$f[0] eq $fileType or not $fileTypeLookup{$$f[0]}; } } $mimeType or $mimeType = $mimeType{$fileType}; # use base file type if necessary (except if 'TIFF', which is a special case) $mimeType = $mimeType{$baseType} unless $mimeType or $baseType eq 'TIFF'; unless (defined $normExt) { $normExt = $fileTypeExt{$fileType}; $normExt = $fileType unless defined $normExt; } $self->FoundTag('FileType', $fileType); $self->FoundTag('FileTypeExtension', uc $normExt); $self->FoundTag('MIMEType', $mimeType || 'application/unknown'); } } #------------------------------------------------------------------------------ # Override the FileType and MIMEType tags # Inputs: 0) ExifTool object ref, 1) file type # Notes: does nothing if FileType was not previously defined (ie. when writing) sub OverrideFileType($$) { my ($self, $fileType) = @_; if (defined $$self{VALUE}{FileType} and $fileType ne $$self{VALUE}{FileType}) { $$self{VALUE}{FileType} = $fileType; my $normExt = $fileTypeExt{$fileType}; $normExt = $fileType unless defined $normExt; $$self{VALUE}{FileTypeExtension} = uc $normExt; # only override MIME type if unique for the derived file type $$self{VALUE}{MIMEType} = $mimeType{$fileType} if $mimeType{$fileType}; if ($$self{OPTIONS}{Verbose}) { $self->VPrint(0,"$$self{INDENT}FileType [override] = $fileType\n"); $self->VPrint(0,"$$self{INDENT}MIMEType [override] = $$self{VALUE}{MIMEType}\n"); } } } #------------------------------------------------------------------------------ # Modify the value of the MIMEType tag # Inputs: 0) ExifTool object reference, 1) file or MIME type # Notes: combines existing type with new type: ie) a/b + c/d => c/b-d sub ModifyMimeType($;$) { my ($self, $mime) = @_; $mime =~ m{/} or $mime = $mimeType{$mime} or return; my $old = $$self{VALUE}{MIMEType}; if (defined $old) { my ($a, $b) = split '/', $old; my ($c, $d) = split '/', $mime; $d =~ s/^x-//; $$self{VALUE}{MIMEType} = "$c/$b-$d"; $self->VPrint(0, " Modified MIMEType = $c/$b-$d\n"); } else { $self->FoundTag('MIMEType', $mime); } } #------------------------------------------------------------------------------ # Print verbose output # Inputs: 0) ExifTool ref, 1) verbose level (prints if level > this), 2-N) print args sub VPrint($$@) { my $self = shift; my $level = shift; if ($$self{OPTIONS}{Verbose} and $$self{OPTIONS}{Verbose} > $level) { my $out = $$self{OPTIONS}{TextOut}; print $out @_; print $out "\n" unless $_[-1] =~ /\n$/; } } #------------------------------------------------------------------------------ # Verbose dump # Inputs: 0) ExifTool ref, 1) data ref, 2-N) HexDump options sub VerboseDump($$;%) { my $self = shift; my $dataPt = shift; if ($$self{OPTIONS}{Verbose} and $$self{OPTIONS}{Verbose} > 2) { my %parms = ( Prefix => $$self{INDENT}, Out => $$self{OPTIONS}{TextOut}, MaxLen => $$self{OPTIONS}{Verbose} < 4 ? 96 : undef, ); HexDump($dataPt, undef, %parms, @_); } } #------------------------------------------------------------------------------ # Print data in hex # Inputs: 0) data # Returns: hex string # (this is a convenience function for use in debugging PrintConv statements) sub PrintHex($) { my $val = shift; return join(' ', unpack('H2' x length($val), $val)); } #------------------------------------------------------------------------------ # Extract binary data from file # 0) ExifTool object reference, 1) offset, 2) length, 3) tag name if conditional # Returns: binary data, or undef on error # Notes: Returns "Binary data #### bytes" instead of data unless tag is # specifically requested or the Binary option is set sub ExtractBinary($$$;$) { my ($self, $offset, $length, $tag) = @_; my ($isPreview, $buff); if ($tag) { if ($tag eq 'PreviewImage') { # save PreviewImage start/length in case we want to dump trailer $$self{PreviewImageStart} = $offset; $$self{PreviewImageLength} = $length; $isPreview = 1; } my $lcTag = lc $tag; if ((not $$self{OPTIONS}{Binary} or $$self{EXCL_TAG_LOOKUP}{$lcTag}) and not $$self{OPTIONS}{Verbose} and not $$self{REQ_TAG_LOOKUP}{$lcTag}) { return "Binary data $length bytes"; } } unless ($$self{RAF}->Seek($offset,0) and $$self{RAF}->Read($buff, $length) == $length) { $tag or $tag = 'binary data'; if ($isPreview and not $$self{BuildingComposite}) { $$self{PreviewError} = 1; } else { $self->Warn("Error reading $tag from file", $isPreview); } return undef; } return $buff; } #------------------------------------------------------------------------------ # Process binary data # Inputs: 0) ExifTool object ref, 1) directory information ref, 2) tag table ref # Returns: 1 on success # Notes: dirInfo may contain VarFormatData (reference to empty list) to return # details about any variable-length-format tags in the table (used when writing) sub ProcessBinaryData($$$) { my ($self, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $offset = $$dirInfo{DirStart} || 0; my $size = $$dirInfo{DirLen} || (length($$dataPt) - $offset); my $base = $$dirInfo{Base} || 0; my $verbose = $$self{OPTIONS}{Verbose}; my $unknown = $$self{OPTIONS}{Unknown}; my $dataPos = $$dirInfo{DataPos} || 0; # get default format ('int8u' unless specified) my $defaultFormat = $$tagTablePtr{FORMAT} || 'int8u'; my $increment = $formatSize{$defaultFormat}; unless ($increment) { warn "Unknown format $defaultFormat\n"; $defaultFormat = 'int8u'; $increment = $formatSize{$defaultFormat}; } # prepare list of tag numbers to extract my (@tags, $topIndex); if ($unknown > 1 and defined $$tagTablePtr{FIRST_ENTRY}) { # don't create a stupid number of tags if data is huge my $sizeLimit = $size < 65536 ? $size : 65536; # scan through entire binary table $topIndex = int($sizeLimit/$increment); @tags = ($$tagTablePtr{FIRST_ENTRY}..($topIndex - 1)); # add in floating point tag ID's if they exist my @ftags = grep /\./, TagTableKeys($tagTablePtr); @tags = sort { $a <=> $b } @tags, @ftags if @ftags; } elsif ($$dirInfo{DataMember}) { @tags = @{$$dirInfo{DataMember}}; $verbose = 0; # no verbose output of extracted values when writing } elsif ($$dirInfo{MixedTags}) { # process sorted integer-ID tags only @tags = sort { $a <=> $b } grep /^\d+$/, TagTableKeys($tagTablePtr); } else { # extract known tags in numerical order @tags = sort { ($a < 0 ? $a + 1e9 : $a) <=> ($b < 0 ? $b + 1e9 : $b) } TagTableKeys($tagTablePtr); } $self->VerboseDir('BinaryData', undef, $size) if $verbose; # avoid creating unknown tags for tags that fail condition if Unknown is 1 $$self{NO_UNKNOWN} = 1 if $unknown < 2; my ($index, %val); my $nextIndex = 0; my $varSize = 0; foreach $index (@tags) { my ($tagInfo, $val, $saveNextIndex, $len, $mask, $wasVar, $rational); if ($$tagTablePtr{$index}) { $tagInfo = $self->GetTagInfo($tagTablePtr, $index); unless ($tagInfo) { next unless defined $tagInfo; my $entry = int($index) * $increment + $varSize; if ($entry < 0) { $entry += $size; next if $entry < 0; } next if $entry >= $size; my $more = $size - $entry; $more = 128 if $more > 128; my $v = substr($$dataPt, $entry+$offset, $more); $tagInfo = $self->GetTagInfo($tagTablePtr, $index, \$v); next unless $tagInfo; } next if $$tagInfo{Unknown} and ($$tagInfo{Unknown} > $unknown or $index < $nextIndex); } elsif ($topIndex and $$tagTablePtr{$index - $topIndex}) { $tagInfo = $self->GetTagInfo($tagTablePtr, $index - $topIndex) or next; } else { # don't generate unknown tags in binary tables unless Unknown > 1 next unless $unknown > 1; next if $index < $nextIndex; # skip if data already used $tagInfo = $self->GetTagInfo($tagTablePtr, $index) or next; $$tagInfo{Unknown} = 2; # set unknown to 2 for binary unknowns } # get relative offset of this entry my $entry = int($index) * $increment + $varSize; # allow negative indices to represent bytes from end if ($entry < 0) { $entry += $size; next if $entry < 0; } my $more = $size - $entry; last if $more <= 0; # all done if we have reached the end of data my $count = 1; my $format = $$tagInfo{Format}; if (not $format) { $format = $defaultFormat; } elsif ($format eq 'string') { # string with no specified count runs to end of block $count = $more; } elsif ($format eq 'pstring') { $format = 'string'; $count = Get8u($dataPt, ($entry++)+$offset); --$more; } elsif (not $formatSize{$format}) { if ($format =~ /(.*)\[(.*)\]/) { # handle format count field $format = $1; $count = $2; # evaluate count to allow count to be based on previous values #### eval Format size (%val, $size, $self) $count = eval $count; $@ and warn("Format $$tagInfo{Name}: $@"), next; next if $count < 0; # allow a variable-length value of any format # (note: the next incremental index points to data immediately after # this value, regardless of the size of this value, even if it is zero) if ($format =~ s/^var_//) { $varSize += $count * ($formatSize{$format} || 1) - $increment; $wasVar = 1; # save variable size data if required for writing if ($$dirInfo{VarFormatData}) { push @{$$dirInfo{VarFormatData}}, [ $index, $varSize, $format ]; } # don't extract value if large and we wanted it just to get # the variable-format information when writing next if $$tagInfo{LargeTag} and $$dirInfo{VarFormatData}; } } elsif ($format =~ /^var_/) { # handle variable-length string formats $format = substr($format, 4); pos($$dataPt) = $entry + $offset; undef $count; if ($format eq 'ustring') { $count = pos($$dataPt) - ($entry+$offset) if $$dataPt =~ /\G(..)*?\0\0/sg; $varSize -= 2; # ($count includes base size of 2 bytes) } elsif ($format eq 'pstring') { $count = Get8u($dataPt, ($entry++)+$offset); --$more; } elsif ($format eq 'pstr32') { last if $more < 4; $count = Get32u($dataPt, $entry + $offset); $entry += 4; $more -= 4; } elsif ($format eq 'int16u') { # int16u size of binary data to follow last if $more < 2; $count = Get16u($dataPt, $entry + $offset) + 2; $varSize -= 2; # ($count includes size word) $format = 'undef'; } elsif ($$dataPt =~ /\0/g) { $count = pos($$dataPt) - ($entry+$offset); --$varSize; # ($count includes base size of 1 byte) } $count = $more if not defined $count or $count > $more; $varSize += $count; # shift subsequent indices $val = substr($$dataPt, $entry+$offset, $count); $val = $self->Decode($val, 'UCS2') if $format eq 'ustring'; $val =~ s/\0.*//s unless $format eq 'undef'; # truncate at null $wasVar = 1; # save variable size data if required for writing if ($$dirInfo{VarFormatData}) { push @{$$dirInfo{VarFormatData}}, [ $index, $varSize, $format ]; } } } # hook to allow format, etc to be set dynamically if (defined $$tagInfo{Hook}) { #### eval Hook ($format, $varSize, $size) eval $$tagInfo{Hook}; # save variable size data if required for writing (in case changed by Hook) if ($$dirInfo{VarFormatData}) { $#{$$dirInfo{VarFormatData}} -= 1 if $wasVar; # remove previous entry for this tag push @{$$dirInfo{VarFormatData}}, [ $index, $varSize, $format ]; } } if ($unknown > 1) { # calculate next valid index for unknown tag my $ni = int $index; $ni += (($formatSize{$format} || 1) * $count) / $increment unless $wasVar; $saveNextIndex = $nextIndex; $nextIndex = $ni unless $nextIndex > $ni; } # allow large tags to be excluded from extraction # (provides a work-around for some tight memory situations) next if $$tagInfo{LargeTag} and $$self{EXCL_TAG_LOOKUP}{lc $$tagInfo{Name}}; # read value now if necessary unless (defined $val and not $$tagInfo{SubDirectory}) { $val = ReadValue($dataPt, $entry+$offset, $format, $count, $more, \$rational); $mask = $$tagInfo{Mask}; $val &= $mask if $mask; } if ($verbose and not $$tagInfo{Hidden}) { if (not $$tagInfo{SubDirectory} or $$tagInfo{Format}) { $len = $count * ($formatSize{$format} || 1); $len = $more if $len > $more; } else { $len = $more; } $self->VerboseInfo($index, $tagInfo, Table => $tagTablePtr, Value => $val, DataPt => $dataPt, Size => $len, Start => $entry+$offset, Addr => $entry+$offset+$base+$dataPos, Format => $format, Count => $count, Extra => $mask ? sprintf(', mask 0x%.2x',$mask) : undef, ); } # parse nested BinaryData directories if ($$tagInfo{SubDirectory}) { my $subdir = $$tagInfo{SubDirectory}; my $subTablePtr = GetTagTable($$subdir{TagTable}); # use specified subdirectory length if given if ($$tagInfo{Format} and $formatSize{$format}) { $len = $count * $formatSize{$format}; $len = $more if $len > $more; } else { $len = $more; # directory size is all of remaining data if ($$subTablePtr{PROCESS_PROC} and $$subTablePtr{PROCESS_PROC} eq \&ProcessBinaryData) { # the rest of the data will be printed in the subdirectory $nextIndex = $size / $increment; } } my $subdirBase = $base; if (defined $$subdir{Base}) { #### eval Base ($start,$base) my $start = $entry + $offset + $dataPos; $subdirBase = eval($$subdir{Base}) + $base; } my $start = $$subdir{Start} || 0; my %subdirInfo = ( DataPt => $dataPt, DataPos => $dataPos, DataLen => length $$dataPt, DirStart => $entry + $offset + $start, DirLen => $len - $start, Base => $subdirBase, ); delete $$self{NO_UNKNOWN}; $self->ProcessDirectory(\%subdirInfo, $subTablePtr, $$subdir{ProcessProc}); $$self{NO_UNKNOWN} = 1 if $unknown < 2; next; } if ($$tagInfo{IsOffset} and $$tagInfo{IsOffset} ne '3') { my $et = $self; #### eval IsOffset ($val, $et) $val += $base + $$self{BASE} if eval $$tagInfo{IsOffset}; } $val{$index} = $val; my $oldBase; if ($$tagInfo{SetBase}) { $oldBase = $$self{BASE}; $$self{BASE} += $base; } my $key = $self->FoundTag($tagInfo,$val); $$self{BASE} = $oldBase if defined $oldBase; if ($key) { $$self{RATIONAL}{$key} = $rational if defined $rational; } else { # don't increment nextIndex if we didn't extract a tag $nextIndex = $saveNextIndex if defined $saveNextIndex; } } delete $$self{NO_UNKNOWN}; return 1; } #.............................................................................. # Load .ExifTool_config file from user's home directory # (use of noConfig is now deprecated, use configFile = '' instead) until ($Image::ExifTool::noConfig) { my $file = $Image::ExifTool::configFile; if (not defined $file) { my $config = '.ExifTool_config'; # get our home directory (HOMEDRIVE and HOMEPATH are used in Windows cmd shell) my $home = $ENV{EXIFTOOL_HOME} || $ENV{HOME} || ($ENV{HOMEDRIVE} || '') . ($ENV{HOMEPATH} || '') || '.'; # look for the config file in 1) the home directory, 2) the program dir $file = "$home/$config"; -r $file or $file = ($0 =~ /(.*[\\\/])/ ? $1 : './') . $config; -r $file or last; } else { length $file or last; # filename of "" disables configuration -r $file or warn("Config file not found\n"), last; } eval { require $file }; # load the config file # print warning (minus "Compilation failed" part) $@ and $_=$@, s/Compilation failed.*//s, warn $_; last; } # read user-defined lenses (may have been defined by script instead of config file) if (@Image::ExifTool::UserDefined::Lenses) { foreach (@Image::ExifTool::UserDefined::Lenses) { $Image::ExifTool::userLens{$_} = 1; } } # add user-defined file types if (%Image::ExifTool::UserDefined::FileTypes) { foreach (sort keys %Image::ExifTool::UserDefined::FileTypes) { my $fileInfo = $Image::ExifTool::UserDefined::FileTypes{$_}; my $type = uc $_; ref $fileInfo eq 'HASH' or $fileTypeLookup{$type} = $fileInfo, next; if ($$fileInfo{BaseType}) { if ($$fileInfo{Description}) { $fileTypeLookup{$type} = [ $$fileInfo{BaseType}, $$fileInfo{Description} ]; } else { $fileTypeLookup{$type} = $$fileInfo{BaseType}; } } else { $fileTypeLookup{$type} = [ $type, $$fileInfo{Description} || $type ]; $moduleName{$type} = 0; # not supported if ($$fileInfo{Magic}) { $magicNumber{$type} = $$fileInfo{Magic}; push @fileTypes, $type unless grep /^$type$/, @fileTypes; } } $mimeType{$type} = $$fileInfo{MIMEType} if defined $$fileInfo{MIMEType}; } } #------------------------------------------------------------------------------ 1; # end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool.pod���������������������������������������������������������000644 �000765 �000024 �00000267712 12643772371 020443� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: ExifTool.pod - Documentation for File::ExifTool # # Description: Read and write meta information # # URL: http://owl.phy.queensu.ca/~phil/exiftool/ # # Legal: Copyright (c) 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) # This library is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. #------------------------------------------------------------------------------ =head1 NAME Image::ExifTool - Read and write meta information =head1 SYNOPSIS use Image::ExifTool qw(:Public); # ---- Simple procedural usage ---- # Get hash of meta information tag names/values from an image $info = ImageInfo('a.jpg'); # ---- Object-oriented usage ---- # Create a new Image::ExifTool object $exifTool = new Image::ExifTool; # Extract meta information from an image $exifTool->ExtractInfo($file, \%options); # Get list of tags in the order they were found in the file @tagList = $exifTool->GetFoundTags('File'); # Get the value of a specified tag $value = $exifTool->GetValue($tag, $type); # Get a tag description $description = $exifTool->GetDescription($tag); # Get the group name associated with this tag $group = $exifTool->GetGroup($tag, $family); # Set a new value for a tag $exifTool->SetNewValue($tag, $newValue); # Write new meta information to a file $success = $exifTool->WriteInfo($srcfile, $dstfile); # ...plus a host of other useful methods... =head1 DESCRIPTION Reads and writes meta information in a wide variety of files, including the maker notes of many digital cameras by various manufacturers such as Canon, Casio, FLIR, FujiFilm, GE, HP, JVC/Victor, Kodak, Leaf, Minolta/Konica-Minolta, Nikon, Nintendo, Olympus/Epson, Panasonic/Leica, Pentax/Asahi, Phase One, Reconyx, Ricoh, Samsung, Sanyo, Sigma/Foveon and Sony. Below is a list of file types and meta information formats currently supported by ExifTool (r = read, w = write, c = create): File Types ------------+-------------+-------------+-------------+------------ 3FR r | DVB r/w | KEY r | ORF r/w | RWL r/w 3G2 r/w | DYLIB r | LA r | OTF r | RWZ r 3GP r/w | EIP r | LFP r | PAC r | RM r AA r | EPS r/w | LNK r | PAGES r | SEQ r AAX r/w | EPUB r | M2TS r | PBM r/w | SO r ACR r | ERF r/w | M4A/V r/w | PCD r | SR2 r/w AFM r | EXE r | MEF r/w | PDB r | SRF r AI r/w | EXIF r/w/c | MIE r/w/c | PDF r/w | SRW r/w AIFF r | EXR r | MIFF r | PEF r/w | SVG r APE r | EXV r/w/c | MKA r | PFA r | SWF r ARW r/w | F4A/V r/w | MKS r | PFB r | THM r/w ASF r | FFF r/w | MKV r | PFM r | TIFF r/w AVI r | FLA r | MNG r/w | PGF r | TORRENT r AZW r | FLAC r | MOBI r | PGM r/w | TTC r BMP r | FLV r | MODD r | PLIST r | TTF r BTF r | FPF r | MOI r | PICT r | VCF r CHM r | FPX r | MOS r/w | PMP r | VRD r/w/c COS r | GIF r/w | MOV r/w | PNG r/w | VSD r CR2 r/w | GZ r | MP3 r | PPM r/w | WAV r CRW r/w | HDP r/w | MP4 r/w | PPT r | WDP r/w CS1 r/w | HDR r | MPC r | PPTX r | WEBP r DCM r | HTML r | MPG r | PS r/w | WEBM r DCP r/w | ICC r/w/c | MPO r/w | PSB r/w | WMA r DCR r | ICS r | MQV r/w | PSD r/w | WMV r DFONT r | IDML r | MRW r/w | PSP r | WV r DIVX r | IIQ r/w | MXF r | QTIF r/w | X3F r/w DJVU r | IND r/w | NEF r/w | RA r | XCF r DLL r | INX r | NRW r/w | RAF r/w | XLS r DNG r/w | ITC r | NUMBERS r | RAM r | XLSX r DOC r | J2C r | ODP r | RAR r | XMP r/w/c DOCX r | JNG r/w | ODS r | RAW r/w | ZIP r DPX r | JP2 r/w | ODT r | RIFF r | DR4 r/w/c | JPEG r/w | OFR r | RSRC r | DSS r | K25 r | OGG r | RTF r | DV r | KDC r | OGV r | RW2 r/w | Meta Information ----------------------+----------------------+--------------------- EXIF r/w/c | CIFF r/w | Ricoh RMETA r GPS r/w/c | AFCP r/w | Picture Info r IPTC r/w/c | Kodak Meta r/w | Adobe APP14 r XMP r/w/c | FotoStation r/w | MPF r MakerNotes r/w/c | PhotoMechanic r/w | Stim r Photoshop IRB r/w/c | JPEG 2000 r | DPX r ICC Profile r/w/c | DICOM r | APE r MIE r/w/c | Flash r | Vorbis r JFIF r/w/c | FlashPix r | SPIFF r Ducky APP12 r/w/c | QuickTime r | DjVu r PDF r/w/c | Matroska r | M2TS r PNG r/w/c | MXF r | PE/COFF r Canon VRD r/w/c | PrintIM r | AVCHD r Nikon Capture r/w/c | FLAC r | ZIP r GeoTIFF r/w/c | ID3 r | (and more) =head1 CONFIGURATION User-defined tags can be added via the ExifTool configuration file, or by defining the %Image::ExifTool::UserDefined hash before calling any ExifTool methods. See "ExifTool_config" in the ExifTool distribution for more details. By default ExifTool looks for a configuration file named ".ExifTool_config" first in your home directory, then in the directory of the application script, but a different directory may be specified by setting the EXIFTOOL_HOME environment variable, or a different file may be specified by setting the ExifTool C<configFile> variable before using Image::ExifTool. For example: BEGIN { $Image::ExifTool::configFile = '/Users/phil/myconfig.cfg' } use Image::ExifTool; The configuration feature may also be disabled by setting C<configFile> to an empty string: BEGIN { $Image::ExifTool::configFile = '' } use Image::ExifTool; =head1 EXPORTS Exports nothing by default, but L</ImageInfo> and all static methods may be exported with the C<:Public> export list. =head1 METHODS All ExifTool features are accessed through the methods of the public interface listed below. Other Image::ExifTool methods and modules should not be accessed directly because their interface may change with future versions. None of these methods should ever die or issue warnings to STDERR if called with the proper arguments (with the exception of L</SetNewValue> which may send an error message to STDERR, but only when called in scalar context). Error and warning messages that occur during processing are stored in the values of the Error and Warning tags, and are accessible via the L</GetValue> method to retrieve a single Error or Warning message, or L</GetInfo> to retrieve any number of them. The ExifTool methods are not thread safe. =head2 new Creates a new ExifTool object. $exifTool = new Image::ExifTool; Note that ExifTool uses AUTOLOAD to load non-member methods, so any class using Image::ExifTool as a base class must define an AUTOLOAD which calls Image::ExifTool::DoAutoLoad(). eg) sub AUTOLOAD { Image::ExifTool::DoAutoLoad($AUTOLOAD, @_); } =head2 ImageInfo Read image file and return meta information. This is the one step function for retrieving meta information from an image. Internally, L</ImageInfo> calls L</ExtractInfo> to extract the information, L</GetInfo> to generate the information hash, and L</GetTagList> for the returned tag list. # return meta information for 2 tags only (procedural) $info = ImageInfo($filename, $tag1, $tag2); # return information about an open image file (object-oriented) $info = $exifTool->ImageInfo(\*FILE); # return information from image data in memory for specified tags %options = (PrintConv => 0); @tagList = qw(filename imagesize xmp:creator exif:* -ifd1:*); $info = ImageInfo(\$imageData, \@tagList, \%options); # extract information from an embedded thumbnail image $info = ImageInfo('image.jpg', 'thumbnailimage'); $thumbInfo = ImageInfo($$info{ThumbnailImage}); =over 4 =item Inputs: L</ImageInfo> is very flexible about the input arguments, and interprets them based on their type. It may be called with one or more arguments. The one required argument is either a SCALAR (the image file name), a file reference (a reference to the image file) or a SCALAR reference (a reference to the image in memory). Other arguments are optional. The order of the arguments is not significant, except that the first SCALAR is taken to be the file name unless a file reference or scalar reference comes earlier in the argument list. Below is an explanation of how the L</ImageInfo> function arguments are interpreted: =over 4 =item ExifTool ref L</ImageInfo> may be called with an ExifTool object if desired. Advantages of using the object-oriented form are that options may be set before calling L</ImageInfo>, and the object may be used afterward to access member functions. Must be the first argument if used. =item SCALAR The first scalar argument is taken to be the file name unless an earlier argument specified the image data via a file reference (file ref) or data reference (SCALAR ref). The remaining scalar arguments are names of tags for requested information. All tags are returned if no tags are specified. Tag names are case-insensitive and may be prefixed by optional group names separated by colons. A group name may begin with a family number (eg. '1IPTC:Keywords'), to restrict matches to a specific family. In the tag name, a '?' matches any single character and a '*' matches zero or more characters. Thus 'GROUP:*' represents all tags in a specific group. Wildcards may not be used in group names, with the exception that a group name of '*' may be used to extract all available instances of a tag regardless of the L</Duplicates> setting (eg. '*:WhiteBalance'). Multiple groups may be specified (eg. 'EXIF:Time:*' extracts all EXIF Time tags). And finally, a leading '-' indicates a tag to be excluded (eg. '-IFD1:*'), or a trailing '#' causes the ValueConv value to be returned for this tag. Note that keys in the returned information hash and elements of the returned tag list are not necessarily the same as these tag names because group names are removed, the case may be changed, and an instance number may be added. For this reason it is best to use either the keys of the returned hash or the elements of the returned tag list when accessing the tag values. See L<Image::ExifTool::TagNames|Image::ExifTool::TagNames> for a complete list of ExifTool tag names. =item File ref A reference to an open image file. If you use this method (or a SCALAR reference) to access information in an image, the FileName and Directory tags will not be returned. (Also, a number of the File System tags will not be returned unless it is a plain file.) Image processing begins at the current file position, and on return the file position is unspecified. May be either a standard filehandle, or a reference to a L<File::RandomAccess|File::RandomAccess> object. Note that the file remains open and must be closed by the caller after L</ImageInfo> returns. [Advanced: To allow a non-rewindable stream (eg. a network socket) to be re-read after processing with ExifTool, first wrap the file reference in a L<File::RandomAccess|File::RandomAccess> object, then pass this object to L</ImageInfo>. The L<File::RandomAccess|File::RandomAccess> object will buffer the file if necessary, and may be used to re-read the file after L</ImageInfo> returns.] =item SCALAR ref A reference to image data in memory. =item ARRAY ref Reference to a list of tag names. On entry, any elements in the list are added to the list of requested tags. Tags with names beginning with '-' are excluded. On return, this list is updated to contain an ordered list of tag keys for the returned information. There will be 1:1 correspondence between the requested tags and the returned tag keys only if the L</Duplicates> option is 0 and L</Sort> is 'Input'. (With L</Duplicates> enabled, there may be more entries in the returned list of tag keys, and with other L</Sort> settings the entries may not be in the same order as requested.) If a requested tag doesn't exist, a tag key is still generated, but the tag value is undefined. =item HASH ref Reference to a hash containing the options settings. See L</Options> documentation below for a list of available options. Options specified as arguments to L</ImageInfo> take precedence over L</Options> settings. =back =item Return Values: L</ImageInfo> returns a reference to a hash of tag key/value pairs. The tag keys are identifiers, which are similar to the tag names but may have an appended instance number if multiple tags with the same name were extracted from the image. Many of the ExifTool functions require a tag key as an argument. Use L</GetTagName [static]> to get the tag name for a given tag key. Note that the case of the tag names may not be the same as requested. Here is a simple example to print out the information returned by L</ImageInfo>: foreach (sort keys %$info) { print "$_ => $$info{$_}\n"; } Values of the returned hash are usually simple scalars, but a scalar reference is used to indicate binary data and an array reference may be used to indicate a list. Also, a hash reference may be returned if the L</Struct> option is used. Lists of values are joined by commas into a single string only if the PrintConv option is enabled and the List option is disabled (which are the defaults). Note that binary values are not necessarily extracted unless specifically requested, or the Binary option is enabled and the tag is not specifically excluded. If not extracted the value is a reference to a string of the form "Binary data ##### bytes". The code below gives an example of how to handle these return values, as well as illustrating the use of other ExifTool functions: use Image::ExifTool; my $exifTool = new Image::ExifTool; $exifTool->Options(Unknown => 1); my $info = $exifTool->ImageInfo('a.jpg'); my $group = ''; my $tag; foreach $tag ($exifTool->GetFoundTags('Group0')) { if ($group ne $exifTool->GetGroup($tag)) { $group = $exifTool->GetGroup($tag); print "---- $group ----\n"; } my $val = $info->{$tag}; if (ref $val eq 'SCALAR') { if ($$val =~ /^Binary data/) { $val = "($$val)"; } else { my $len = length($$val); $val = "(Binary data $len bytes)"; } } printf("%-32s : %s\n", $exifTool->GetDescription($tag), $val); } =item Notes: ExifTool returns all values as byte strings of encoded characters. Perl wide characters are not used. See L</CHARACTER ENCODINGS> for details about the encodings. By default, most returned values are encoded in UTF-8. For these, Encode::decode_utf8() may be used to convert to a sequence of logical Perl characters. As well as tags representing information extracted from the image, the following L<Extra tags|Image::ExifTool::TagNames/Extra Tags> generated by ExifTool may be returned: ExifToolVersion - The ExifTool version number. Error - An error message if the image could not be processed. Warning - A warning message if problems were encountered while processing the image. =back =head2 Options Get/set ExifTool options. This function can be called to set the default options for an ExifTool object. Options set this way are in effect for all function calls but may be overridden by options passed as arguments to some functions. Option names are not case sensitive. The default option values may be changed by defining a %Image::ExifTool::UserDefined::Options hash. See the ExifTool_config file in the full ExifTool distribution for examples. # exclude the 'OwnerName' tag from returned information $exifTool->Options(Exclude => 'OwnerName'); # only get information in EXIF or MakerNotes groups $exifTool->Options(Group0 => ['EXIF', 'MakerNotes']); # ignore information from IFD1 $exifTool->Options(Group1 => '-IFD1'); # sort by groups in family 2, and extract unknown tags $exifTool->Options(Sort => 'Group2', Unknown => 1); # reset DateFormat option $exifTool->Options(DateFormat => undef); # do not extract duplicate tag names $oldSetting = $exifTool->Options(Duplicates => 0); # get current Verbose setting $isVerbose = $exifTool->Options('Verbose'); # set a user parameter $exifTool->Options(UserParam => 'MyParam=some value'); =over 4 =item Inputs: 0) ExifTool object reference 1) Option parameter name (case-insensitive) 2) [optional] Option parameter value (may be undef to clear option) 3-N) [optional] Additional parameter/value pairs =item Option Parameters: =over 4 =item Binary Flag to extract the value data for all binary tags. Tag values representing large binary data blocks (eg. ThumbnailImage) are not necessarily extracted unless this option is set or the tag is specifically requested by name. Default is undef. =item ByteOrder The byte order for newly created EXIF segments when writing. Note that if EXIF information already exists, the existing order is maintained. Valid values are 'MM', 'II' and undef. If ByteOrder is not defined (the default), then the maker note byte order is used (if they are being copied), otherwise big-endian ('MM') order is assumed. This can also be set via the L<ExifByteOrder tag|Image::ExifTool::TagNames/Extra Tags>, but the ByteOrder option takes precedence if both are set. =item Charset Character set for encoding character tag values passed to/from ExifTool with code points above U+007F. Default is 'UTF8'. Valid values are listed below, case is not significant: Value Alias(es) Description ----------- --------------- ---------------------------------- UTF8 cp65001, UTF-8 UTF-8 characters Latin cp1252, Latin1 Windows Latin1 (West European) Latin2 cp1250 Windows Latin2 (Central European) Cyrillic cp1251, Russian Windows Cyrillic Greek cp1253 Windows Greek Turkish cp1254 Windows Turkish Hebrew cp1255 Windows Hebrew Arabic cp1256 Windows Arabic Baltic cp1257 Windows Baltic Vietnam cp1258 Windows Vietnamese Thai cp874 Windows Thai MacRoman cp10000, Roman Macintosh Roman MacLatin2 cp10029 Macintosh Latin2 (Central Europe) MacCyrillic cp10007 Macintosh Cyrillic MacGreek cp10006 Macintosh Greek MacTurkish cp10081 Macintosh Turkish MacRomanian cp10010 Macintosh Romanian MacIceland cp10079 Macintosh Icelandic MacCroatian cp10082 Macintosh Croatian Note that this option affects some types of information when reading/writing the file and other types when getting/setting tag values, so it must be defined for both types of access. See the L</CHARACTER ENCODINGS> section for more information about the handling of special characters. =item CharsetEXIF Internal encoding to use for stored EXIF "ASCII" string values. May also be set to undef to pass through EXIF "ASCII" values without recoding. Set to "UTF8" to conform with the MWG recommendation. Default is undef. =item CharsetFileName External character set used for file names passed to ExifTool functions. When set in Windows, this triggers use of Windows wide-character i/o library routines (requires Win32API::File). Default is undef. =item CharsetID3 Internal encoding to assume for ID3v1 strings. By the specification ID3v1 strings should be encoded in ISO 8859-1 (essentially Latin), but some applications may use local encoding instead. Default is 'Latin'. =item CharsetIPTC Fallback internal IPTC character set to assume if IPTC information contains no CodedCharacterSet tag. Possible values are the same as the L</Charset> option. Default is 'Latin'. Note that this option affects some types of information when reading/writing the file and other types when getting/setting tag values, so it must be defined for both types of access. =item CharsetPhotoshop Internal encoding to assume for Photoshop IRB resource names. Default is 'Latin'. =item CharsetQuickTime Internal encoding to assume for QuickTime strings stored with an unspecified encoding. Default is 'MacRoman'. =item Compact Flag to write compact output. Default is undef. The XMP specification suggests that the data be padded with blanks to allow in-place editing. With this flag set the 2kB of padding is not written. Note that this only effects embedded XMP since padding is never written for stand-alone XMP files. =item Composite Flag to generate Composite tags when extracting information. Default is 1. =item Compress Flag to write new values in compressed format if possible. Has no effect unless Compress::Zlib is installed. Default is undef. =item CoordFormat Format for printing GPS coordinates. This is a printf format string with specifiers for degrees, minutes and seconds in that order, however minutes and seconds may be omitted. If the hemisphere is known, a reference direction (N, S, E or W) is appended to each printed coordinate, but adding a C<+> to the first format specifier (eg. C<%+.6f>) prints a signed coordinate instead. For example, the following table gives the output for the same coordinate using various formats: CoordFormat Example Output ------------------- ------------------ q{%d deg %d' %.2f"} 54 deg 59' 22.80" (default for reading) q{%d %d %.8f} 54 59 22.80000000 (default for copying) q{%d deg %.4f min} 54 deg 59.3800 min q{%.6f degrees} 54.989667 degrees Note: To avoid loss of precision, the default coordinate format is different when copying tags with L</SetNewValuesFromFile>. =item DateFormat Format for printing date/time values. See C<strftime> in the L<POSIX> package for details about the format string. The default is similar to a format of "%Y:%m:%d %H:%M:%S". If date can not be converted, value is left unchanged unless the StrictDate option is set. Timezones are ignored. =item Duplicates Flag to return values from tags with duplicate names when extracting information. Default is 1. =item Escape Escape special characters in extracted values for HTML or XML. Also unescapes HTML or XML character entities in input values passed to L</SetNewValue>. Valid settings are 'HTML', 'XML' or undef. Default is undef. =item Exclude Exclude specified tags from tags extracted from an image. The option value is either a tag name or reference to a list of tag names to exclude. The case of tag names is not significant. This option is ignored for specifically requested tags. Tags may also be excluded by preceding their name with a '-' in the arguments to L</ImageInfo>. =item ExtendedXMP This setting affects the reading and editing of extended XMP in JPEG images. According to the XMP specification, extended XMP is only valid if it has the GUID specified by the HasExtendedXMP tag. ExifTool 9.95 and earlier would read extended XMP regardless of GUID, but with the addition of this option in version 9.96 the default behaviour was changed to conform with the XMP specification (to read only extended XMP with the proper GUID). This option should be set to 2 to emulate pre-9.96 behaviour and read all extended XMP. It may also be set to a GUID to read a specific extended XMP, or 0 to ignore extended XMP entirely. 0 - ignore all extended XMP 1 - read extended XMP with valid GUID only (default) 2 - read extended XMP with any GUID <guid> - read extended XMP with a specific GUID =item ExtractEmbedded Flag to extract information from embedded documents in EPS files, embedded EPS information and JPEG and Jpeg2000 images in PDF files, embedded MPF images in JPEG and MPO files, streaming metadata in AVCHD videos, and the resource fork of Mac OS files. Default is undef. =item FastScan Flag to increase speed of extracting information from JPEG images. With this option set to 1, ExifTool will not scan to the end of a JPEG image to check for an AFCP, CanonVRD, FotoStation, PhotoMechanic, MIE or PreviewImage trailer. This also stops the parsing after the first comment in GIF images, and at the audio/video data with RIFF-format files (AVI, WAV, etc), so any trailing metadata (eg. XMP written by some utilities) may be missed. When combined with the ScanForXMP option, prevents scanning for XMP in recognized file types. With a value of 2, ExifTool will also avoid extracting any EXIF MakerNote information. When set to 3, the file is not actually parsed, and only an initial guess at FileType and some pseudo tags are returned. Default is undef. =item Filter Perl expression used to filter values for all tags. The expression acts on the value of the Perl default variable ($_), and changes the value of this variable as required. Applies to all returned values unless PrintConv option is disabled. =item FixBase Fix maker notes base offset. A common problem with image editing software is that offsets in the maker notes are not adjusted properly when the file is modified. This may cause the wrong values to be extracted for some maker note entries when reading the edited file. FixBase specifies an integer value to be added to the maker notes base offset. It may also be set to the empty string ('') for ExifTool will take its best guess at the correct base, or undef (the default) for no base adjustment. =item GeoMaxIntSecs Maximum interpolation time in seconds for geotagging. Geotagging is treated as an extrapolation if the Geotime value lies between two fixes in the same track which are separated by a number of seconds greater than this. Otherwise, the coordinates are calculated as a linear interpolation between the nearest fixes on either side of the Geotime value. Set to 0 to disable interpolation and use the coordinates of the nearest fix instead (provided it is within GeoMaxExtSecs, otherwise geotagging fails). Default is 1800. =item GeoMaxExtSecs Maximum extrapolation time in seconds for geotagging. Geotagging fails if the Geotime value lies outside a GPS track by a number of seconds greater than this. Otherwise, the coordinates of the nearest fix are taken. Default is 1800. =item GeoMaxHDOP Maximum Horizontal (2D) Dilution Of Precision for geotagging. GPS fixes are ignored if the HDOP is greater than this. Default is undef. =item GeoMaxPDOP Maximum Position (3D) Dilution Of Precision for geotagging. GPS fixes are ignored if the PDOP is greater than this. Default is undef. =item GeoMinSats Minimum number of satellites for geotagging. GPS fixes are ignored if the number of acquired satellites is less than this. Default is undef. =item GlobalTimeShift Time shift to apply to all extracted date/time PrintConv values. Does not affect ValueConv values. Value is a date/time shift string (see L<Image::ExifTool::Shift.pl|Image::ExifTool::Shift.pl>), with a leading '-' for negative shifts. Default is undef. =item Group# Extract tags only for specified groups in family # (Group0 assumed if # not given). The option value may be a single group name or a reference to a list of groups. Case is significant in group names. Specify a group to be excluded by preceding group name with a '-'. See L</GetGroup> for a description of group families, and L</GetAllGroups [static]> for lists of group names. =item HtmlDump Dump information in hex to dynamic HTML web page. The value may be 0-3 for increasingly larger limits on the maximum block size. Default is 0. Output goes to the file specified by the TextOut option (\*STDOUT by default). =item HtmlDumpBase Base for HTML dump offsets. If not defined, the EXIF/TIFF base offset is used. Set to 0 for absolute offsets. Default is undef. =item IgnoreMinorErrors Flag to ignore minor errors. Causes minor errors to be downgraded to warnings, and minor warnings to be ignored. This option is provided mainly to allow writing of files when minor errors occur, but by ignoring some minor warnings the behaviour of ExifTool may be changed to allow some questionable operations to proceed (such as extracting thumbnail and preview images even if they don't have a recognizable header). Minor errors and warnings are denoted by "[minor]" at the start of the message, or "[Minor]" (with a capital "M") for warnings that affect processing when ignored. =item Lang Localized language for exiftool tag descriptions, etc. Available languages are given by the Image::ExifTool::Lang module names (eg. 'fr', 'zh_cn'). If the specified language isn't available, the option is not changed. May be set to undef to select the built-in default language. Default is 'en'. =item LargeFileSupport Flag to indicate that 64-bit file offsets are supported on this system. Default is undef. =item List Flag to extract lists of PrintConv values into arrays instead of joining them into a string of values. The L</ListSep> option specifies the separator used when combining values. Default is undef. =item ListItem Return only a specific item from List-type values. A value of 0 returns the first item in the list, 1 return the second item, etc. Negative indices may also be used, with -1 representing the last item in the list. Applies only to the top-level list of nested lists. Default is undef to return all items in the list. =item ListSep Separator string used to join lists of PrintConv values when L</List> option is not set. Default is ', '. =item ListSplit Regular expression used to split values of list-type tags into individual items when writing. (eg. use ',\\s*' to split a comma-separated list.) Default is undef. =item MakerNotes Option to extract MakerNotes and other writable subdirectories (such as PrintIM) as a data block. Normally when the MakerNotes are extracted they are rebuilt to include data outside the boundaries of the original maker note data block, but a value of 2 disables this feature. Possible values are: 0 - Do not extract writable subdirectories (same as default of undef) 1 - Extract and rebuild maker notes into self-contained block 2 - Extract without rebuilding maker notes =item MDItemTags Flag to extract the OS X metadata item tags (see the "mdls" man page for details). =item MissingTagValue Value for missing tags in expressions evaluated by L</SetNewValuesFromFile>. If not set, a minor error is issued for missing values, or the value is set to '' if L</IgnoreMinorErrors> is set. Default is undef. =item NoPDFList Flag to avoid splitting PDF List-type tag values into separate items. Default is undef. =item Password Password for reading/writing password-protected PDF documents. Ignored if a password is not required. Character encoding of the password is determined by the value of the Charset option at processing time. Default is undef. =item PNGEarlyXMP Flag to write XMP in PNG images before the IDAT (image data) chunk. By default, ExifTool adds new XMP to the end of a PNG file (just before IEND). This is allowed by the PNG and XMP specifications, but some utilities seem to ignore XMP if it comes after the image data. The PNGEarlyXMP option causes ExifTool to instead add new XMP before the PNG IDAT chunk. However, since ExifTool uses a single-pass writing algorithm, it has no way to tell if XMP already exists later in the file before writing the new XMP in this location. If this happens, a minor error is issued when the extra XMP is encountered, and the file is not written. Adding the L</IgnoreMinorErrors> option causes the XMP after IDAT to be deleted, thus resolving the conflict (at the expense of possible metadata loss), and allowing the file to be written. The PNGEarlyXMP option is applied automatically when deleting all XMP and writing new XMP back in one step. When reading, this option causes a warning to be issued if standard XMP is found after the IDAT chunk. =item PrintConv Flag to enable automatic print conversion. Also enables inverse print conversion for writing. Default is 1. =item QuickTimeUTC Flag set to assume that QuickTime date/time values are stored as UTC, causing conversion to local time when they are extracted. According to the QuickTime specification date/time values should be UTC, but many digital cameras store local time instead (presumably because they don't know the time zone), so the default is undef. This option also disables the autodetection of incorrect time-zero offsets in QuickTime date/time values, and enforces a time zero of 1904 as per the QuickTime specification. =item RequestAll Flag to request all tags to be extracted. This causes some tags to be generated which normally would not be unless specifically requested (by passing the tag name to L</ImageInfo> or L</ExtractInfo>). Note that this flag is set automatically during a call to L</SetNewValuesFromFile> to make all tags available for copying. Default is undef. =item RequestTags List of additional tags to request in next call to L</ExtractInfo>. This option is useful only for tags which aren't extracted unless specifically requested. Value may be a list reference, a delimited string of tag names (any delimiter is allowed), or undef to clear the current RequestTags list. Case is not significant. Default is undef. =item ScanForXMP Flag to scan all files (even unrecognized formats) for XMP information unless XMP was already found in the file. When combined with the FastScan option, only unrecognized file types are scanned for XMP. Default is undef. =item Sort Specifies order to sort tags in returned list: Input - Sort in same order as input tag arguments (default) File - Sort in order that tags were found in the file Tag - Sort alphabetically by tag name Descr - Sort by tag description (for current Lang setting) Group# - Sort by tag group, where # is zero or more family numbers separated by colons. If # is not specified, Group0 is assumed. See GetGroup for a description of group families. =item Sort2 Secondary sort order used for tags within each group when Sort is 'Group': File - Sort in order tags were found in the file (default) Tag - Sort alphabetically by tag name Descr - Sort by tag description (for current Lang setting) =item StrictDate Flag to return undefined value for any date which can't be converted when the DateFormat option is used. Default is undef. =item Struct Flag to return XMP structures as hash references instead of flattening into individual tags. Has no effect when writing since both flattened and structured tags may always be written. Possible values are: undef - Same as 0 for reading, 2 for copying 0 - Read/copy flattened tags 1 - Read/copy structured tags 2 - Read/copy both flattened and structured tags, but flag flattened tags as 'unsafe' for copying =item SystemTags Flag to extract the following additional File System tags: FileAttributes, FileDeviceNumber, FileInodeNumber, FileHardLinks, FileUserID, FileGroupID, FileDeviceID, FileBlockSize and FileBlockCount. =item TextOut Output file reference for Verbose and HtmlDump options. Default is \*STDOUT. =item Unknown Flag to get the values of unknown tags. If set to 1, unknown tags are extracted from EXIF (or other tagged-format) directories. If set to 2, unknown tags are also extracted from binary data blocks. Default is 0. =item UserParam Special option to set/get user-defined parameters. Useful to allow external input into tag name expressions and ValueConv logic. I<PARAM> is the user-defined parameter name (case insensitive). PARAM - Get parameter PARAM= - Clear parameter PARAM=VALUE - Set parameter User-defined parameters may be accessed in tag name expressions by prefixing the parameter name with a dollar sign, just like normal tags. If called without a parameter name, C<Options('UserParam')> returns a reference to the hash of all user parameters (with lower-case names). =item Verbose Print verbose messages to file specified by TextOut option. Value may be from 0 to 5 for increasingly verbose messages. Default is 0. With the verbose option set, messages are printed to the console as the file is parsed. Level 1 prints the tag names and raw values. Level 2 adds more details about the tags. Level 3 adds a hex dump of the tag data, but with limits on the number of bytes dumped. Levels 4 and 5 remove the dump limit on tag values and JPEG segment data respectively. =item WriteMode Set tag write/create mode. Value is a string of one or more characters from list below. Default is 'wcg'. w - Write existing tags c - Create new tags g - create new Groups as necessary The level of the group differs for different types of metadata. For XMP or IPTC this is the full XMP/IPTC block (the family 0 group), but for EXIF this is the individual IFD (the family 1 group). =item XMPAutoConv Flag to enable automatic conversion for unknown XMP tags with values that look like rational numbers or dates. Default is 1. =back =item Return Values: The original value of the last specified parameter. =back =head2 ClearOptions Reset all options to their default values. Loads user-defined default option values from the %Image::ExifTool::UserDefined::Options hash in the .ExifTool_config file if it exists. $exifTool->ClearOptions(); =over 4 =item Inputs: 0) ExifTool object reference =item Return Values: (none) =back =head2 ExtractInfo Extract all meta information from an image. $success = $exifTool->ExtractInfo('image.jpg', \%options); =over 4 =item Inputs: L</ExtractInfo> takes exactly the same arguments as L</ImageInfo>. The only difference is that a list of tag keys is not returned if an ARRAY reference is given. The following options are effective in the call to L</ExtractInfo>: Binary, Charset, CharsetEXIF, CharsetFileName, CharsetID3, CharsetIPTC, CharsetPhotoshop, CharsetQuickTime, Composite, ExtendedXMP, ExtractEmbedded, FastScan, FixBase, HtmlDump, HtmlDumpBase, IgnoreMinorErrors, Lang, LargeFileSupport, MakerNotes, NoPDFList, PNGEarlyXMP, ScanForXMP, Struct, TextOut, Unknown and Verbose. =item Return Value: 1 if this was a recognized file format, 0 otherwise (and 'Error' tag set). =back =head2 GetInfo L</GetInfo> is called to return meta information after it has been extracted from the image by a previous call to L</ExtractInfo> or L</ImageInfo>. This function may be called repeatedly after a single call to L</ExtractInfo> or L</ImageInfo>. # get image width and height only $info = $exifTool->GetInfo('ImageWidth', 'ImageHeight'); # get all Error and Warning messages $info = $exifTool->GetInfo('Error', 'Warning'); # get information for all tags in list (list updated with tags found) $info = $exifTool->GetInfo(\@ioTagList); # get all information in Author or Location groups $info = $exifTool->GetInfo({Group2 => ['Author', 'Location']}); =over 4 =item Inputs: Inputs are the same as L</ExtractInfo> and L</ImageInfo> except that an image can not be specified. Options in effect are: Charset, CoordFormat, DateFormat, Duplicates, Escape, Exclude, Filter, Group#, GlobalTimeShift, Lang, List, ListItem, ListSep, PrintConv, Sort (if a tag list reference is given) and StrictDate. =item Return Value: Reference to information hash, the same as with L</ImageInfo>. =back =head2 WriteInfo Write meta information to a file. The specified source file is rewritten to the same-type destination file with new information as specified by previous calls to L</SetNewValue>. The necessary segments and/or directories are created in the destination file as required to store the specified information. May be called repeatedly to write the same information to additional files without the need to call L</SetNewValue> again. # add information to a source file, writing output to new file $exifTool->WriteInfo($srcfile, $dstfile); # create XMP data file from scratch $exifTool->WriteInfo(undef, $dstfile, 'XMP'); # overwrite file (you do have backups, right?) $exifTool->WriteInfo($srcfile); =over 4 =item Inputs: 0) ExifTool object reference 1) Source file name, file reference, scalar reference, or undef to create a file from scratch. A reference to a L<File::RandomAccess|File::RandomAccess> object is also allowed as a source, but in this case the destination is not optional. 2) [optional] Destination file name, file reference, scalar reference, or undef to overwrite the original file. May be '-' to write to stdout. 3) [optional] Destination file type. Ignored if a source is defined. =item Return Value: 1 if file was written OK, 2 if file was written but no changes made, 0 on file write error. If an error code is returned, an Error tag is set and GetValue('Error') can be called to obtain the error description. A Warning tag may be set even if this routine is successful. Calling WriteInfo clears any pre-existing Error and Warning tags. $errorMessage = $exifTool->GetValue('Error'); $warningMessage = $exifTool->GetValue('Warning'); =item Notes: The source file name may be undefined to create a file from scratch (currently only XMP, MIE, ICC, VRD, DR4, EXV and EXIF files can be created in this way -- see L</CanCreate> for details). If undefined, the destination file type is required unless the type can be determined from the extension of the destination file name. If a destination file name is given, the specified file must not exist because an existing destination file will not be overwritten. Any new values for FileName, Directory or HardLink are ignored when a destination file name is specified. The destination file name may be undefined to overwrite the original file (make sure you have backups!). In this case, if a source file name is provided, a temporary file is created and renamed to replace the source file if no errors occurred while writing. Otherwise, if a source file reference or scalar reference is used, the image is first written to memory then copied back to replace the original if there were no errors. On Mac OS systems, the file resource fork is preserved if this routine is called with a source file name. =back The following ExifTool options are effective in the call to L</WriteInfo>: ByteOrder, Charset, CharsetEXIF, CharsetFileName, CharsetIPTC, Compact, Compress, FixBase, IgnoreMinorErrors, PNGEarlyXMP and Verbose. =head2 GetTagList Get a sorted list of tags from the specified information hash or tag list. @tags = $exifTool->GetTagList($info, 'Group0'); =over 4 =item Inputs: 0) ExifTool object reference 1) [optional] Information hash reference or tag list reference 2) [optional] Sort order ('Input', 'File', 'Tag', 'Descr' or 'Group#') 3) [optional] Secondary sort order ('File', 'Tag' or 'Descr') If the information hash or tag list reference is not provided, then the list of found tags from the last call to L</ImageInfo>, L</ExtractInfo> or L</GetInfo> is used instead, and the result is the same as if L</GetFoundTags> was called. If sort order is not specified, the sort order is taken from the current options settings. =item Return Values: A list of tag keys in the specified order. =back =head2 GetFoundTags Get list of found tags in specified sort order. The found tags are the tags for the information obtained from the most recent call to L</ImageInfo>, L</ExtractInfo> or L</GetInfo> for this object. @tags = $exifTool->GetFoundTags('File'); =over 4 =item Inputs: 0) ExifTool object reference 1) [optional] Sort order ('Input', 'File', 'Tag', 'Descr' or 'Group#') 2) [optional] Secondary sort order ('File', 'Tag' or 'Descr') If sort order is not specified, the sort order from the ExifTool options is used. =item Return Values: A list of tag keys in the specified order. =back =head2 GetRequestedTags Get list of requested tags. These are the tags that were specified in the arguments of the most recent call to L</ImageInfo>, L</ExtractInfo> or L</GetInfo>, including tags specified via a tag list reference. Shortcut tags are expanded in the list. @tags = $exifTool->GetRequestedTags(); =over 4 =item Inputs: (none) =item Return Values: List of requested tag keys in the same order that the tags were specified. Note that this list will be empty if tags were not specifically requested (ie. If extracting all tags). =back =head2 GetValue Get the value of a specified tag. The returned value is either the human-readable (PrintConv) value, the converted machine-readable (ValueConv) value, or the original raw (Raw) value. If the value type is not specified, the PrintConv value is returned if the PrintConv option is set, otherwise the ValueConv value is returned. The PrintConv values are same as the values returned by L</ImageInfo> and L</GetInfo> in the tag/value hash unless the PrintConv option is disabled. Tags which represent lists of multiple values (as may happen with 'Keywords' for example) are handled specially. In scalar context, the returned PrintConv value for these tags is either a string of values or a list reference (depending on the List option setting), and the ValueConv value is always a list reference. But in list context, L</GetValue> always returns the list itself. Note that L</GetValue> requires a case-sensitive tag key as an argument. To retrieve tag information based on a case-insensitive tag name (with an optional group specifier), use L</GetInfo> instead. # PrintConv example my $val = $exifTool->GetValue($tag); if (ref $val eq 'SCALAR') { print "$tag = (unprintable value)\n"; } else { print "$tag = $val\n"; } # ValueConv examples my $val = $exifTool->GetValue($tag, 'ValueConv'); if (ref $val eq 'ARRAY') { print "$tag is a list of values\n"; } elsif (ref $val eq 'SCALAR') { print "$tag represents binary data\n"; } else { print "$tag is a simple scalar\n"; } my @keywords = $exifTool->GetValue('Keywords', 'ValueConv'); The following options are in effect when L</GetValue> is called: Charset, CoordFormat, DateFormat, Escape, Filter, GlobalTimeShift, Lang, List, ListItem, ListSep, PrintConv and StrictDate. =over 4 =item Inputs: 0) ExifTool object reference 1) Tag key 2) [optional] Value type: 'PrintConv', 'ValueConv', 'Both', 'Raw' or 'Rational' The default value type is 'PrintConv' if the PrintConv option is set, otherwise the default is 'ValueConv'. A value type of 'Both' returns both ValueConv and PrintConv values as a list. 'Rational' returns the raw rational value as a string fraction for rational types, or undef for other types. =item Return Values: The value of the specified tag. If the tag represents a list of multiple values and the List option is disabled then PrintConv returns a string of values, otherwise a reference to the list is returned in scalar context. The list itself is returned in list context. (Unless 'Both' values are requested, in which case two list references are returned, regardless of context.) Values may also be scalar references to binary data, or hash references if the L</Struct> option is set. Note: It is possible for L</GetValue> to return an undefined ValueConv or PrintConv value (or an empty list in list context) even if the tag exists, since it is possible for these conversions to yield undefined values. And the Rational value will be undefined for any non-rational tag. The Raw value should always exist if the tag exists. =back =head2 SetNewValue Set the new value for a tag. The routine may be called multiple times to set the values of many tags before using L</WriteInfo> to write the new values to an image. For list-type tags (like Keywords), either call repeatedly with the same tag name for each value, or call with a reference to the list of values. # set a new value for a tag (errors go to STDERR) $success = $exifTool->SetNewValue($tag, $value); # set a new value and capture any error message ($success, $errStr) = $exifTool->SetNewValue($tag, $value); # delete information for specified tag if it exists in image # (also resets AddValue and DelValue options for this tag) $exifTool->SetNewValue($tag); # reset all values from previous calls to SetNewValue() $exifTool->SetNewValue(); # delete a specific keyword $exifTool->SetNewValue('Keywords', $word, DelValue => 1); # set keywords (a list-type tag) with two new values $exifTool->SetNewValue(Keywords => 'word1'); $exifTool->SetNewValue(Keywords => 'word2'); # equivalent, but set both in one call using an array reference $exifTool->SetNewValue(Keywords => ['word1','word2']); # add a keyword without replacing existing keywords in the file $exifTool->SetNewValue(Keywords => $word, AddValue => 1); # set a tag in a specific group $exifTool->SetNewValue(Headline => $val, Group => 'XMP'); $exifTool->SetNewValue('XMP:Headline' => $val); # (equivalent) # shift original date/time back by 2.5 hours $exifTool->SetNewValue(DateTimeOriginal => '2:30', Shift => -1); # write a tag only if it had a specific value # (the order of the following calls is not significant) $exifTool->SetNewValue(Title => $oldVal, DelValue => 1); $exifTool->SetNewValue(Title => $newVal); # write tag by numerical value $exifTool->SetNewValue(Orientation => 6, Type => 'ValueConv'); $exifTool->SetNewValue('Orientation#' => 6); # (equivalent) # delete all but EXIF tags $exifTool->SetNewValue('*'); # delete all... $exifTool->SetNewValue('EXIF:*', undef, Replace => 2); # ...but EXIF # write structured information as a HASH reference $exifTool->SetNewValue('XMP:Flash' => { mode => 'on', fired => 'true', return => 'not' }); # write structured information as a serialized string $exifTool->SetNewValue('XMP:Flash'=>'{mode=on,fired=true,return=not}'); (See L<http://owl.phy.queensu.ca/~phil/exiftool/struct.html#Serialize> for a description of the structure serialization technique.) =over 4 =item Inputs: 0) ExifTool object reference 1) [optional] Tag key or tag name, or undef to clear all new values. The tag name may be prefixed by one or more family 0, 1 or 2 group names with optional leading family numbers, separated by colons (eg. 'EXIF:Artist', 'XMP:Time:*'), which is equivalent to using a Group option argument. Also, a '#' may be appended to the tag name (eg. 'EXIF:Orientation#'), with the same effect as setting Type to 'ValueConv'. Wildcards ('*' and '?') may be used in the tag name to assign multiple tags simultaneously. A tag name of '*' is special when deleting information, and will delete an entire group even if some individual tags in the group are not writable, but only if a single family 0 or 1 group is specified (otherwise the tags are deleted individually). Use L</GetDeleteGroups> to get a list of deletable group names, and see L<Image::ExifTool::TagNames|Image::ExifTool::TagNames> for a complete list of tag names. 2) [optional] New value for tag. Undefined to delete tag from file. May be a scalar, scalar reference, list reference to set a list of values, or hash reference for a structure. Integer values may be specified as a hexadecimal string (with a leading '0x'), and simple rational values may be specified in fractional form (eg. '4/10'). Structure tags may be specified either as a hash reference or a serialized string (see the last two examples above). 3-N) [optional] SetNewValue option/value pairs (see below). =item SetNewValue Options: =over 4 =item AddValue Specifies that the value be added to an existing list in a file rather than overwriting. Valid settings are 0 (overwrite any existing tag value), 1 (add to an existing list and warn for non-list tags) or 2 (add to existing list and overwrite non-list tags). Default is 0. =item DelValue Delete existing tag from a file if it has the specified value. Option values are 0 or 1. Default is 0. =item EditGroup Create tags in existing groups only. Don't create new group. Valid values are 0 and 1. Effectively removes the 'g' from the ExifTool WriteMode option for this tag only. Default is 0. =item EditOnly Edit tag only if it already exists. Don't create new tag. Valid values are 0 and 1. Effectively removes the 'c' from the ExifTool WriteMode option for this tag only. Default is 0. =item Group Specifies group name where tag should be written. If not specified, tag is written to highest priority group as specified by L</SetNewGroups>. May be one or more family 0, 1 or 2 groups with optional leading family number, separated by colons. Case is not significant. =item NoFlat Treat flattened tags as 'unsafe'. =item NoShortcut Disables default behaviour of looking up tag in shortcuts if not found otherwise. =item Protected Bit mask for tag protection levels to write. Bit 0x01 allows writing of 'unsafe' tags (ie. tags not copied automatically via L</SetNewValuesFromFile>). Bit 0x02 allows writing of 'protected' tags, and should only be used internally by ExifTool. See L<Image::ExifTool::TagNames|Image::ExifTool::TagNames>, for a list of tag names indicating 'unsafe' and 'protected' tags. Default is 0. =item ProtectSaved Avoid setting new values which were saved after the Nth call to L</SaveNewValues>. Has no effect on unsaved values, or values saved before Nth call. Option value is N. Default is undef. =item Replace Flag to replace the previous new values for this tag (ie. replace the values set in previous calls to L</SetNewValue>). This option is most commonly used to replace previously-set new values for list-type tags. Valid values are 0 (set new value normally -- adds to new values for list-type tags), 1 (reset previous new values for this tag and replace with the specified new value) or 2 (reset previous new values only). =item Shift Shift the tag by the specified value. Currently only date/time tags and tags with numerical values may be shifted. Undefined for no shift, 1 for a positive shift, or -1 for a negative shift. A value of 0 causes a positive shift to be applied if the tag is shiftable and AddValue is set, or a negative shift for date/time tags only if DelValue is set. Default is undef. See L<Image::ExifTool::Shift.pl|Image::ExifTool::Shift.pl> for more information. =item Type The type of value being set. Valid values are PrintConv, ValueConv or Raw. Default is PrintConv if the L</PrintConv> Option is set, otherwise ValueConv. =back =item Return Values: In scalar context, returns the number of tags set and error messages are printed to STDERR. In list context, returns the number of tags set, and the error string (which is undefined if there was no error). =item Notes: When deleting groups of tags, the Replace option may be used to exclude specific groups from a mass delete. However, this technique may not be used to exclude individual tags from a group delete (unless a family 2 group was specified in the delete). Instead, use L</SetNewValuesFromFile> to recover the values of individual tags after deleting a group. When deleting all tags from a JPEG image, the APP14 "Adobe" information is not deleted by default because doing so may affect the appearance of the image. However, this information may be deleted by specifying it explicitly, either by group (with 'Adobe:*') or as a block (with 'Adobe'). =back The following ExifTool options are effective in the call to L</SetNewValue>: Charset, Escape, IgnoreMinorErrors, Lang, ListSep, ListSplit, PrintConv, Verbose and WriteMode. =head2 GetNewValue Get the new Raw value for a tag. This is the value set by L</SetNewValue> this is queued to be written to file. List-type tags may return multiple values in list context. $rawVal = $exifTool->GetNewValue($tag); @rawVals = $exifTool->GetNewValue($tag); =over 4 =item Inputs: 0) ExifTool object reference 1) Tag name (case sensitive, may be prefixed by family 0 or 1 group name) =item Return Values: List of new Raw tag values, or first value in list when called in scalar context. The list may be empty either if the tag isn't being written, or if it is being deleted (ie. if L</SetNewValue> was called without a value). =back =head2 SetNewValuesFromFile A very powerful routine that sets new values for tags from information found in a specified file. # set new values from all information in a file... my $info = $exifTool->SetNewValuesFromFile($srcFile); # ...then write these values to another image my $result = $exifTool->WriteInfo($file2, $outFile); # set all new values, preserving original groups $exifTool->SetNewValuesFromFile($srcFile, '*:*'); # set specific information $exifTool->SetNewValuesFromFile($srcFile, @tags); # set new value from a different tag in specific group $exifTool->SetNewValuesFromFile($fp, 'IPTC:Keywords>XMP-dc:Subject'); # add all IPTC keywords to XMP subject list $exifTool->SetNewValuesFromFile($fp, 'IPTC:Keywords+>XMP-dc:Subject'); # set new value from an expression involving other tags $exifTool->SetNewValuesFromFile($file, 'Comment<ISO=$ISO Aperture=$aperture Exposure=$shutterSpeed'); # set keywords list from the values of multiple tags $exifTool->SetNewValuesFromFile($file, { Replace => 0 }, 'keywords<xmp:subject', 'keywords<filename'); # copy all EXIF information, preserving the original IFD # (without '>*.*' tags would be copied to the preferred EXIF IFD) $exifTool->SetNewValuesFromFile($file, 'EXIF:*>*:*'); # copy all tags with names starting with "gps" (note: this is # different than "gps:*" because it will also copy XMP GPS tags) $exifTool->SetNewValuesFromFile($file, 'gps*'); # set FileName from Model, translating questionable characters $exifTool->SetNewValuesFromFile($file, 'filename<${model; tr(/\\\\?*:|"><)(_) }.jpg'); =over 4 =item Inputs: 0) ExifTool object reference 1) File name, file reference, or scalar reference 2-N) [optional] List of tag names to set or options hash references. All writable tags are set if none are specified. The tag names are not case sensitive, and may be prefixed by one or more family 0, 1 or 2 group names with optional leading family numbers, separated by colons (eg. 'exif:iso'). A leading '-' indicates tags to be excluded (eg. '-comment'), or a trailing '#' causes the ValueConv value to be copied (same as setting the Type option to 'ValueConv' for this tag only). Wildcards ('*' and '?') may be used in the tag name. A tag name of '*' is commonly used when a group is specified to copy all tags in the group (eg. 'XMP:*'). A special feature allows tag names of the form 'DSTTAGE<lt>SRCTAG' (or 'SRCTAGE<gt>DSTTAG') to be specified to copy information to a tag with a different name or a specified group. Both 'SRCTAG' and 'DSTTAG' may contain wildcards and/or be prefixed by a group name (eg. 'fileModifyDateE<lt>modifyDate' or 'xmp:*E<lt>*'), and/or suffixed by a '#' to disable print conversion. Copied tags may also be added or deleted from a list with arguments of the form 'DSTTAG+E<lt>SRCTAG' or 'DSTTAG-E<lt>SRCTAG'. Tags are evaluated in order, so exclusions apply only to tags included earlier in the list. An extension of this feature allows the tag value to be set from an expression containing tag names with leading '$' symbols (eg. 'CommentE<lt>the file is $filename'). Braces '{}' may be used around the tag name to separate it from subsequent text, and a '$$' is used to to represent a '$' symbol. The behaviour for missing tags in expressions is defined by the L</MissingTagValue> option. The tag value may be modified via changes to the default input variable ($_) in Perl expressions placed inside the braces and after a semicolon following the tag name. Braces within the expression must be balanced. Multiple options hash references may be passed to set different options for different tags. Options apply to subsequent tags in the argument list. By default, this routine will commute information between same-named tags in different groups, allowing information to be translated between images with different formats. This behaviour may be modified by specifying a group name for extracted tags (even if '*' is used as a group name), in which case the information is written to the original group, unless redirected to a different group. When '*' is used for a group name, by default the family 1 group of the original tag is preserved, but a different family may be specified with a leading family number. (For example, specifying '*:*' copies all information while preserving the original family 1 groups, while '0*:*' preserves the family 0 group.) =item SetNewValuesFromFile Options: The options are the same was for L</SetNewValue>, and are passed directly to L</SetNewValue> internally, with a few exceptions: - The Replace option defaults to 1 instead of 0 as with L</SetNewValue>. - The AddValue or DelValue option is set for individual tags if '+>' or '->' (or '+E<lt>' or '-E<lt>') are used. - The Group option is set for tags where a group name is given. - The Protected flag is set to 1 for individually specified tags. - The Type option also applies to extracted tags. =item Return Values: A hash of information that was set successfully. May include Warning or Error entries if there were problems reading the input file. =item Notes: The PrintConv option applies to this routine, but it normally should be left on to provide more reliable transfer of information between groups. If a preview image exists, it is not copied. The preview image must be transferred separately if desired, in a separate call to L</WriteInfo> When simply copying all information between files of the same type, it is usually desirable to preserve the original groups by specifying '*:*' for the tags to set. The L</Duplicates> option is always in effect for tags extracted from the source file using this routine. The L</Struct> option is enabled by default for tags extracted by this routine. This allows the hierarchy of complex structures to be preserved when copying, but the Struct option may be set to 0 to override this behaviour and copy as flattened tags instead. =back =head2 CountNewValues Return the total number of new values set. $numSet = $exifTool->CountNewValues(); ($numSet, $numPseudo) = $exifTool->CountNewValues(); =over 4 =item Inputs: 0) ExifTool object reference =item Return Values: In scalar context, returns the total number of tags with new values set. In list context, also returns the number of "pseudo" tag values which have been set. "Pseudo" tags are tags like FileName and FileModifyDate which are not contained within the file and can be changed without rewriting the file. =back =head2 SaveNewValues Save state of new values to be later restored by L</RestoreNewValues>. $exifTool->SaveNewValues(); # save state of new values $exifTool->SetNewValue(ISO => 100); # set new value for ISO $exifTool->WriteInfo($src, $dst1); # write ISO + previous new values $exifTool->RestoreNewValues(); # restore previous new values $exifTool->WriteInfo($src, $dst2); # write previous new values only =over 4 =item Inputs: 0) ExifTool object reference =item Return Value: Count of the number of times this routine has been called (N) since the last time the new values were reset. =back =head2 RestoreNewValues Restore new values to the settings that existed when L</SaveNewValues> was last called. May be called repeatedly after a single call to L</SaveNewValues>. See L</SaveNewValues> above for an example. =over 4 =item Inputs: 0) ExifTool object reference =item Return Value: None. =back =head2 SetFileModifyDate Write the filesystem modification or creation time from the new value of the FileModifyDate or FileCreateDate tag. $exifTool->SetNewValue(FileModifyDate => '2000:01:02 03:04:05-05:00', Protected => 1); $result = $exifTool->SetFileModifyDate($file); =over 4 =item Inputs: 0) ExifTool object reference 1) File name 2) [optional] Base time if applying shift (days before $^T) 3) [optional] Tag to write: 'FileModifyDate' (default), or 'FileCreateDate' =item Return Value: 1 if the time was changed, 0 if nothing was done, or -1 if there was an error setting the time. =item Notes: Equivalent to, but more efficient than calling L</WriteInfo> when only the FileModifyDate or FileCreateDate tag has been set. If a timezone is not specified, local time is assumed. When shifting, the time of the original file is used unless the optional base time is specified. The ability to write FileCreateDate is currently restricted to Windows systems only. =back =head2 SetFileName Set the file name and directory, or create a hard link. If not specified, the new file name is derived from the new values of the FileName and Directory tags, or from the HardLink tag if creating a link. If the FileName tag contains a '/', then the file is renamed into a new directory. If FileName ends with '/', then it is taken as a directory name and the file is moved into the new directory. The new value for the Directory tag takes precedence over any directory specified in FileName. $result = $exifTool->SetFileName($file); $result = $exifTool->SetFileName($file, $newName); =over 4 =item Inputs: 0) ExifTool object reference 1) Current file name 2) [optional] New file name 3) [optional] 'Link' to create a hard link instead of renaming the file, or 'Test' to test renaming feature by printing the old and new names instead of changing anything. =item Return Value: 1 if the file name or directory was changed, 0 if nothing was done, or -1 if there was an error renaming the file. =item Notes: Will not overwrite existing files. New directories are created as necessary. =back =head2 SetNewGroups Set the order of the preferred groups when adding new information. In subsequent calls to L</SetNewValue>, new information will be created in the first valid group of this list. This has an impact only if the group is not specified when calling L</SetNewValue> and if the tag name exists in more than one group. The default order is EXIF, IPTC then XMP. Any family 0 group name may be used. Case is not significant. $exifTool->SetNewGroups('XMP','EXIF','IPTC'); =over 4 =item Inputs: 0) ExifTool object reference 1-N) Groups in order of priority. If no groups are specified, the priorities are reset to the defaults. =item Return Value: None. =back =head2 GetNewGroups Get current group priority list. @groups = $exifTool->GetNewGroups(); =over 4 =item Inputs: 0) ExifTool object reference =item Return Values: List of group names in order of write priority. Highest priority first. =back =head2 GetTagID Get the ID for the specified tag. The ID is the IFD tag number in EXIF information, the property name in XMP information, or the data offset in a binary data block. For some tags, such as Composite tags where there is no ID, an empty string is returned. In list context, also returns a language code for the tag if available and different from the default language (eg. with alternate language entries for XMP "lang-alt" tags). $id = $exifTool->GetTagID($tag); ($id, $lang) = $exifTool->GetTagID($tag); =over 4 =item Inputs: 0) ExifTool object reference 1) Tag key =item Return Values: In scalar context, returns the tag ID or '' if there is no ID for this tag. In list context, returns the tag ID (or '') and the language code (or undef). =back =head2 GetDescription Get description for specified tag. This function will always return a defined value. In the case where the description doesn't exist, one is generated from the tag name. =over 4 =item Inputs: 0) ExifTool object reference 1) Tag key =item Return Values: A description for the specified tag. =back =head2 GetGroup Get group name(s) for a specified tag. # return family 0 group name (eg. 'EXIF'); $group = $exifTool->GetGroup($tag, 0); # return all groups (eg. qw{EXIF IFD0 Author Main}) @groups = $exifTool->GetGroup($tag); # return groups as a string (eg. 'Main:IFD0:Author') $group = $exifTool->GetGroup($tag, ':3:1:2'); # return groups as a simplified string (eg. 'IFD0:Author') $group = $exifTool->GetGroup($tag, '3:1:2'); =over 4 =item Inputs: 0) ExifTool object reference 1) Tag key 2) [optional] Group family number, or string of numbers separated by colons =item Return Values: Group name (or '' if tag has no group). If no group family is specified, L</GetGroup> returns the name of the group in family 0 when called in scalar context, or the names of groups for all families in list context. Returns a string of group names separated by colons if the input group family contains a colon. The string is simplified to remove a leading 'Main:' and adjacent identical group names unless the family string begins with a colon. =item Notes: The group family numbers are currently available: 0) Information Type (eg. EXIF, XMP, IPTC) 1) Specific Location (eg. IFD0, XMP-dc) 2) Category (eg. Author, Time) 3) Document Number (eg. Main, Doc1, Doc3-2) 4) Instance Number (eg. Copy1, Copy2, Copy3...) Families 0 and 1 are based on the file structure, and are similar except that family 1 is more specific and sub-divides some groups to give more detail about the specific location where the information was found. For example, the EXIF group is split up based on the specific IFD (Image File Directory), the MakerNotes group is divided into groups for each manufacturer, and the XMP group is separated based on the XMP namespace prefix. Note that only common XMP namespaces are listed in the L<GetAllGroups documentation|/GetAllGroups [static]>, but additional namespaces may be present in some XMP data. Also note that the 'XMP-xmp...' group names may appear in the older form 'XMP-xap...' since these names evolved as the XMP standard was developed. The ICC_Profile group is broken down to give information about the specific ICC_Profile tag from which multiple values were extracted. As well, information extracted from the ICC_Profile header is separated into the ICC-header group. Family 2 classifies information based on the logical category to which the information refers. Family 3 gives the document number for tags extracted from embedded documents, or 'Main' for tags from the main document. (See the L</ExtractEmbedded> option for extracting tags from embedded documents.) Nested sub-documents (if they exist) are indicated by numbers separated with dashes in the group name, to an arbitrary depth. (eg. 'Doc2-3-1' is the 1st sub-sub-document of the 3rd sub-document of the 2nd embedded document of the main file.) Family 4 provides a method for differentiating tags when multiple tags exist with the same name in the same location. The primary instance of a tag (the tag extracted when the Duplicates option is disabled and no group is specified) has no family 4 group name, but additional instances have have family 4 group names of 'Copy1', 'Copy2', 'Copy3', etc. See L</GetAllGroups [static]> for complete lists of group names. =back =head2 GetGroups Get list of group names that exist in the specified information. @groups = $exifTool->GetGroups($info, 2); @groups = $exifTool->GetGroups('3:1'); =over 4 =item Inputs: 0) ExifTool object reference 1) [optional] Info hash ref (default is all extracted info) 2) [optional] Group family number, or string of numbers (default 0) =item Return Values: List of group names in alphabetical order. If information hash is not specified, the group names are returned for all extracted information. See L</GetGroup> for an description of family numbers and family number strings. =back =head2 BuildCompositeTags Builds composite tags from required tags. The composite tags are convenience tags which are derived from the values of other tags. This routine is called automatically by L</ImageInfo> and L</ExtractInfo> if the Composite option is set. =over 4 =item Inputs: 0) ExifTool object reference =item Return Values: (none) =item Notes: Tag values are calculated in alphabetical order unless a tag Require's or Desire's another composite tag, in which case the calculation is deferred until after the other tag is calculated. Composite tags may need to read data from the image for their value to be determined, and for these L</BuildCompositeTags> must be called while the image is available. This is only a problem if L</ImageInfo> is called with a filename (as opposed to a file reference or scalar reference) since in this case the file is closed before L</ImageInfo> returns. Here the Composite option may be used so that L</BuildCompositeTags> is called from within L</ImageInfo>, before the file is closed. =back =head2 GetTagName [static] Get name of tag from tag key. This is a convenience function that strips the embedded instance number, if it exists, from the tag key. Note: "static" in the heading above indicates that the function does not require an ExifTool object reference as the first argument. All functions documented below are also static. $tagName = Image::ExifTool::GetTagName($tag); =over 4 =item Inputs: 0) Tag key =item Return Value: Tag name. This is the same as the tag key but has the instance number removed. =back =head2 GetShortcuts [static] Get a list of shortcut tags. =over 4 =item Inputs: (none) =item Return Values: List of shortcut tags (as defined in Image::ExifTool::Shortcuts). =back =head2 GetAllTags [static] Get list of all available tag names. @tagList = Image::ExifTool::GetAllTags($group); =over 4 =item Inputs: 0) [optional] Group name, or string of group names separated by colons =item Return Values: A list of all available tags in alphabetical order, or all tags in a specified group or intersection of groups. The group name is case insensitive, and any group in families 0-2 may be used except for EXIF family 1 groups (ie. the specific IFD). =back =head2 GetWritableTags [static] Get list of all writable tag names. @tagList = Image::ExifTool::GetWritableTags($group); =over 4 =item Inputs: 0) [optional] Group name, or string of group names separated by colons =item Return Values: A list of all writable tags in alphabetical order. These are the tags for which values may be set through L</SetNewValue>. If a group name is given, returns only writable tags in specified group(s). The group name is case insensitive, and any group in families 0-2 may be used except for EXIF family 1 groups (ie. the specific IFD). =back =head2 GetAllGroups [static] Get list of all group names in specified family. @groupList = Image::ExifTool::GetAllGroups($family); =over 4 =item Inputs: 0) Group family number (0-4) =item Return Values: A list of all groups in the specified family in alphabetical order. =back Here is a complete list of groups for each of these families: =over 4 =item Family 0 (Information Type): AFCP, AIFF, APE, APP0, APP1, APP11, APP12, APP13, APP14, APP15, APP4, APP5, APP6, APP8, ASF, Audible, CanonVRD, Composite, DICOM, DNG, DV, DjVu, Ducky, EXE, EXIF, ExifTool, FLAC, FLIR, File, Flash, FlashPix, Font, FotoStation, GIF, GIMP, GeoTiff, H264, HTML, ICC_Profile, ID3, IPTC, ITC, JFIF, JPEG, Jpeg2000, LNK, Leaf, Lytro, M2TS, MIE, MIFF, MNG, MOI, MPC, MPEG, MPF, MXF, MakerNotes, Matroska, Meta, Ogg, OpenEXR, PDF, PICT, PLIST, PNG, PSP, Palm, PanasonicRaw, PhotoCD, PhotoMechanic, Photoshop, PostScript, PrintIM, QuickTime, RAF, RIFF, RSRC, RTF, Radiance, Rawzor, Real, SVG, SigmaRaw, Stim, Theora, Torrent, VCard, Vorbis, XML, XMP, ZIP =item Family 1 (Specific Location): AC3, AFCP, AIFF, APE, ASF, AVI1, Adobe, AdobeCM, AdobeDNG, Apple, Audible, CIFF, Canon, CanonCustom, CanonRaw, CanonVRD, Casio, Chapter#, Composite, DICOM, DNG, DV, DjVu, DjVu-Meta, Ducky, EPPIM, EXE, EXIF, ExifIFD, ExifTool, FLAC, FLIR, File, Flash, FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GPS, GeoTiff, GlobParamIFD, GraphConv, H264, HP, HTC, HTML, HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv, ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view, ICC_Profile, ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4, IFD0, IFD1, IPTC, IPTC#, ITC, InteropIFD, JFIF, JPEG, JPEG-HDR, JVC, Jpeg2000, KDC_IFD, Kodak, KodakBordersIFD, KodakEffectsIFD, KodakIFD, KyoceraRaw, LNK, Leaf, LeafSubIFD, Leica, Lytro, M2TS, MAC, MIE-Audio, MIE-Camera, MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo, MIE-Image, MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient, MIE-Preview, MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MNG, MOBI, MOI, MPC, MPEG, MPF0, MPImage, MXF, MakerNotes, MakerUnknown, Matroska, MediaJukebox, MetaIFD, Microsoft, Minolta, MinoltaRaw, Motorola, NITF, Nikon, NikonCapture, NikonCustom, NikonScan, Nintendo, Ocad, Ogg, Olympus, OpenEXR, PDF, PICT, PNG, PNG-pHYs, PSP, Palm, Panasonic, PanasonicRaw, Pentax, PhaseOne, PhotoCD, PhotoMechanic, Photoshop, PictureInfo, PostScript, PreviewIFD, PrintIM, ProfileIFD, Qualcomm, QuickTime, RAF, RAF2, RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real, Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4, Real-RA5, Real-RJMD, Reconyx, Ricoh, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD, System, Theora, Torrent, Track#, VCard, VCalendar, Version0, Vorbis, XML, XMP, XMP-DICOM, XMP-GPano, XMP-MP, XMP-MP1, XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album, XMP-apple-fi, XMP-aux, XMP-cc, XMP-cell, XMP-crs, XMP-dc, XMP-dex, XMP-digiKam, XMP-dwc, XMP-exif, XMP-exifEX, XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro, XMP-microsoft, XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-pdf, XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-prism, XMP-prl, XMP-pur, XMP-rdf, XMP-swf, XMP-tiff, XMP-x, XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpMM, XMP-xmpNote, XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg, ZIP =item Family 2 (Category): Audio, Author, Camera, Document, ExifTool, Image, Location, Other, Preview, Printing, Time, Unknown, Video =item Family 3 (Document Number): Doc#, Main =item Family 4 (Instance Number): Copy# =back =head2 GetDeleteGroups [static] Get list of all deletable group names. @delGroups = Image::ExifTool::GetDeleteGroups(); =over 4 =item Inputs: None. =item Return Values: A list of deletable group names in alphabetical order. The current list of deletable group names is: AFCP, APP0, APP1, APP10, APP11, APP12, APP13, APP14, APP15, APP2, APP3, APP4, APP5, APP6, APP7, APP8, APP9, Adobe, CIFF, CanonVRD, Ducky, EXIF, ExifIFD, File, FlashPix, FotoStation, GPS, GlobParamIFD, ICC_Profile, IFD0, IFD1, IPTC, InteropIFD, JFIF, Jpeg2000, MIE, MPF, MakerNotes, Meta, MetaIFD, NikonCapture, PDF, PDF-update, PNG, PhotoMechanic, Photoshop, PrintIM, RMETA, RSRC, SubIFD, Trailer, XML, XML-*, XMP, XMP-* All names in this list are either family 0 or family 1 group names, with the exception of 'Trailer' which allows all trailers in JPEG and TIFF-format images to be deleted at once, including unknown trailers. To schedule a group for deletion, call L</SetNewValue> with an undefined value and a tag name like 'Trailer:*'. Note that the JPEG "APP" groups are special, and are used only to delete application segments which are not associated with another deletable group. For example, deleting 'APP14:*' will delete other APP14 segments, but not the APP14 "Adobe" segment. =back =head2 GetFileType [static] Get type of file given file name. my $type = Image::ExifTool::GetFileType($filename); my $desc = Image::ExifTool::GetFileType($filename, 1); =over 4 =item Inputs: 0) [optional] File name (or just an extension) 1) [optional] Flag to return a description instead of a type. Set to 0 to return type for recognized but unsupported files (otherwise the return value for unsupported files is undef). =item Return Value: A string, based on the file extension, which indicates the basic format of the file. Note that some files may be based on other formats (like many RAW image formats are based on TIFF). In array context, may return more than one file type if the file may be based on different formats. Returns undef if files with this extension are not yet supported by ExifTool. Returns a list of extensions for all supported file types if no input extension is specified (or all recognized file types if the description flag is set to 0). Returns a more detailed description of the specific file format when the description flag is set. =back =head2 CanWrite [static] Can the specified file be written? my $writable = Image::ExifTool::CanWrite($filename); =over 4 =item Inputs: 0) File name or extension =item Return Value: True if ExifTool supports writing files of this type (based on the file extension). =back =head2 CanCreate [static] Can the specified file be created? my $creatable = Image::ExifTool::CanCreate($filename); =over 4 =item Inputs: 0) File name or extension =item Return Value: True if ExifTool can create files with this extension from scratch. Currently, this can only be done with XMP, MIE, ICC, VRD, DR4, EXV and EXIF files. =back =head2 AddUserDefinedTags [static] Add user-defined tags to an existing tag table at run time. This differs from the usual technique of creating user-defined tags via the %Image::ExifTool::UserDefined hash (see the ExifTool_config file in the Image::ExifTool distribution) because it allows tags to be added after the tag table has been initialized. use Image::ExifTool ':Public'; my %tags = ( TestTagID1 => { Name => 'TestTagName1' }, TestTagID2 => { Name => 'TestTagName2' }, ); my $num = AddUserDefinedTags('Image::ExifTool::PDF::Info', %tags); =over 4 =item Inputs: 0) Destination tag table name 1-N) Pairs of tag ID / tag information hash references for the new tags =item Return Value: The number of tags added. =item Notes Pre-existing tags with the same ID will be replaced in the destination table. See lib/Image/ExifTool/README in the full distribution for full details on the elements of the tag information hash. =back =head1 CHARACTER ENCODINGS Certain meta information formats allow coded character sets other than plain ASCII. When reading, most known encodings are converted to the external character set according to the L</Charset> option, or to UTF-8 by default. When writing, the inverse conversions are performed. Alternatively, special characters may be converted to/from HTML character entities with the L</Escape> HTML option. A distinction is made between the external character set visible via the ExifTool API, and the internal character used to store text in the metadata of a file. These character sets may be specified separately as follows: =over 4 =item External Character Sets: The encoding for tag values passed to/from ExifTool API functions is set via the L</Charset> option, which is 'UTF8' by default. The encoding of file names is specified via the L</CharsetFileName> option. By default, L</CharsetFileName> is not defined, and file names passed to ExifTool are used directly in calls to the system i/o routines (which expect UTF-8 strings on Mac/Linux, but default to the system code page on Windows). Setting L</CharsetFileName> causes file names to be converted from the specified encoding to one appropriate for the system. In Windows this also has the effect of activating Unicode filename support via the special Windows wide-character i/o routines if Win32API::File is available. =item Internal Character Sets: The encodings used to store strings in the various metadata formats. These encodings may be changed for certain types of metadata via the L</CharsetEXIF>, L</CharsetID3>, L</CharsetIPTC>, L</CharsetPhotoshop> and L</CharsetQuickTime> options. =back Values are returned as byte strings of encoded characters. Perl wide characters are not used. By default, most returned strings are encoded in UTF-8. For these, Encode::decode_utf8() may be used to convert to a sequence of logical Perl characters. Note that some settings of the PERL_UNICODE environment variable may be incompatible with ExifTool's character handling. More specific details are given below about how character coding is handled for EXIF, IPTC, XMP, PNG, ID3, PDF, Photoshop, QuickTime, AIFF, MIE and Vorbis information: =head2 EXIF Most textual information in EXIF is stored in ASCII format (called "string" in the L<ExifTool tag name documentation|Image::ExifTool::TagNames>). By default ExifTool does not convert these strings. However, it is not uncommon for applications to write UTF-8 or other encodings where ASCII is expected. To deal with these, ExifTool allows the internal EXIF string encoding to be specified with L</CharsetEXIF>, which causes EXIF string values to be converted from the specified character set when reading, and stored with this character set when writing. (The MWG recommends using UTF-8 encoding for EXIF strings, and in keeping with this the L<MWG|Image::ExifTool::MWG> module sets the default internal EXIF string encoding to UTF-8, but note that this will have no effect unless the external encoding is also set to something other than the default of UTF-8.) A few EXIF tags (UserComment, GPSProcessingMethod and GPSAreaInformation) support a designated internal text encoding, with values stored as ASCII, Unicode (UCS-2) or JIS. When reading these tags, ExifTool converts Unicode and JIS to the external character set specified by the L</Charset> option, or to UTF-8 by default. ASCII text is not converted. When writing, text is stored as ASCII unless the string contains special characters, in which case it is converted from the external character set (UTF-8 by default), and stored as Unicode. ExifTool writes Unicode in native EXIF byte ordering by default, but the byte order may be specified by setting the ExifUnicodeByteOrder tag (see the L<Extra Tags documentation|Image::ExifTool::TagNames/Extra Tags>). The EXIF "XP" tags (XPTitle, XPComment, etc) are always stored as little-endian Unicode (UCS-2), and are read and written using the specified character set. =head2 IPTC The value of the IPTC:CodedCharacterSet tag determines how the internal IPTC string values are interpreted. If CodedCharacterSet exists and has a value of 'UTF8' (or 'ESC % G') then string values are assumed to be stored as UTF-8, otherwise Windows Latin1 (cp1252, 'Latin') coding is assumed by default, but this can be changed with the L</CharsetIPTC> option. When reading, these strings are converted to the character set specified by the L</Charset> option. When writing, the inverse conversions are performed. No conversion is done if the internal (IPTC) and external (ExifTool) character sets are the same. Note that ISO 2022 character set shifting is not supported. Instead, a warning is issued and the string is not converted if an ISO 2022 shift code is encountered. See L<http://www.iptc.org/IIM/> for the official IPTC specification. ExifTool may be used to convert IPTC values to a different internal encoding. To do this, all IPTC tags must be rewritten along with the desired value of CodedCharacterSet. For example, the following command changes the internal IPTC encoding to UTF-8 (from Windows Latin1 unless CodedCharacterSet was already 'UTF8'): exiftool -tagsfromfile @ -iptc:all -codedcharacterset=utf8 a.jpg or from Windows Latin2 (cp1250) to UTF-8: exiftool -tagsfromfile @ -iptc:all -codedcharacterset=utf8 \ -charset iptc=latin2 a.jpg and this command changes it back from UTF-8 to Windows Latin1 (cp1252): exiftool -tagsfromfile @ -iptc:all -codedcharacterset= a.jpg or to Windows Latin2: exiftool -tagsfromfile @ -iptc:all -codedcharacterset= \ -charset iptc=latin2 a.jpg Unless CodedCharacterSet is 'UTF8', applications have no reliable way to determine the IPTC character encoding. For this reason, it is recommended that CodedCharacterSet be set to 'UTF8' when creating new IPTC. (Note: Here, "IPTC" Refers to the older IPTC IIM format. The more recent IPTC Core and Extension specifications actually use the XMP format.) =head2 XMP Exiftool reads XMP encoded as UTF-8, UTF-16 or UTF-32, and converts them all to UTF-8 internally. Also, all XML character entity references and numeric character references are converted. When writing, ExifTool always encodes XMP as UTF-8, converting the following 5 characters to XML character references: E<amp> E<lt> E<gt> E<39> E<quot>. By default no further conversion is performed, however if the L</Charset> option is other than 'UTF8' then text is converted to/from a specified character set when reading/writing. =head2 PNG L<PNG TextualData tags|Image::ExifTool::TagNames/"PNG TextualData Tags"> are stored as tEXt, zTXt and iTXt chunks in PNG images. The tEXt and zTXt chunks use ISO 8859-1 encoding, while iTXt uses UTF-8. When reading, ExifTool converts all PNG textual data to the character set specified by the L</Charset> option. When writing, ExifTool generates a tEXt chunk (or zTXt with the L</Compress> option) if the text doesn't contain special characters or if Latin encoding is specified; otherwise an iTXt chunk is used and the text is converted from the specified character set and stored as UTF-8. =head2 JPEG Comment The encoding for the JPEG Comment (COM segment) is not specified, so ExifTool reads/writes this text without conversion. =head2 ID3 The ID3v1 specification officially supports only ISO 8859-1 encoding (a subset of Windows Latin1), although some applications may incorrectly use other character sets. By default ExifTool converts ID3v1 text from Latin to the character set specified by the L</Charset> option. However, the internal ID3v1 charset may be specified with the L</CharsetID3> option. The encoding for ID3v2 information is stored in the file, so ExifTool converts ID3v2 text from this encoding to the character set specified by the L</Charset> option. ExifTool does not currently write ID3 information. =head2 PDF PDF text strings are stored in either PDFDocEncoding (similar to Windows Latin1) or Unicode (UCS-2). When reading, ExifTool converts to the character set specified by the L</Charset> option. When writing, ExifTool encodes input text from the specified character set as Unicode only if the string contains special characters, otherwise PDFDocEncoding is used. =head2 Photoshop Some Photoshop resource names are stored as Pascal strings with unknown encoding. By default, ExifTool assumes MacRoman encoding and converts this to UTF-8, but the internal and external character sets may be specified with L</CharsetPhotoshop> and L</Charset> options respectively. =head2 QuickTime QuickTime text strings may be stored in a variety of poorly document formats. ExifTool does its best to decode these according to the L</Charset> option setting. For some QuickTime strings, ExifTool assumes a default encoding of MacRoman, but this may be changed with the L</CharsetQuickTime> option. =head2 AIFF AIFF strings are assumed to be stored in MacRoman, and are converted according to the L</Charset> option when reading. =head2 MIE MIE strings are stored as either UTF-8 or ISO 8859-1. When reading, UTF-8 strings are converted according to the L</Charset> option, and ISO 8859-1 strings are never converted. When writing, input strings are converted from the specified character set to UTF-8. The resulting strings are stored as UTF-8 if they contain multi-byte UTF-8 character sequences, otherwise they are stored as ISO 8859-1. =head2 Vorbis Vorbis comments are stored as UTF-8, and are converted to the character set specified by the L</Charset> option. =head1 AUTHOR Copyright 2003-2016, Phil Harvey This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Many people have helped in the development of ExifTool through their bug reports, comments and suggestions, and/or additions to the code. See the ACKNOWLEDGEMENTS in the individual Image::ExifTool modules and in html/index.html of the Image::ExifTool distribution package for a list of people who have contributed to this project. =head1 SEE ALSO L<exiftool(1)|exiftool>, L<Image::ExifTool::TagNames(3pm)|Image::ExifTool::TagNames>, L<Image::ExifTool::Shortcuts(3pm)|Image::ExifTool::Shortcuts>, L<Image::ExifTool::Shift.pl|Image::ExifTool::Shift.pl>, L<Image::Info(3pm)|Image::Info>, L<Image::MetaData::JPEG(3pm)|Image::MetaData::JPEG> =cut # end ������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/AES.pm������������������������������������������������������000644 �000765 �000024 �00000045240 12642461257 020670� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: AES.pm # # Description: AES encryption with cipher-block chaining # # Revisions: 2010/10/14 - P. Harvey Created # # References: 1) http://www.hoozi.com/Articles/AESEncryption.htm # 2) http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf # 3) http://www.faqs.org/rfcs/rfc3602.html #------------------------------------------------------------------------------ package Image::ExifTool::AES; use strict; use vars qw($VERSION @ISA @EXPORT_OK); require Exporter; $VERSION = '1.01'; @ISA = qw(Exporter); @EXPORT_OK = qw(Crypt); my $seeded; # flag set if we already seeded random number generator my $nr; # number of rounds in AES cipher my @cbc; # cipher-block chaining bytes # arrays (all unsigned character) to hold intermediate results during encryption my @state = ([],[],[],[]); # the 2-dimensional state array my @RoundKey; # round keys my @sbox = ( 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16, ); # reverse sbox my @rsbox = ( 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d, ); # the round constant word array, $rcon[i], contains the values given by # x to the power (i-1) being powers of x (x is denoted as {02}) in the field GF(2^8) # Note that i starts at 1, not 0). my @rcon = ( 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, ); #------------------------------------------------------------------------------ # This function produces 4*($nr+1) round keys. # The round keys are used in each round to encrypt the states. # Inputs: 0) key string (must be 16, 24 or 32 bytes long) sub KeyExpansion($) { my $key = shift; my @key = unpack 'C*', $key; # convert the key into a byte array my $nk = int(length($key) / 4); # number of 32-bit words in the key $nr = $nk + 6; # number of rounds # temporary variables (all unsigned characters) my ($i,@temp); # The first round key is the key itself. for ($i=0; $i<$nk; ++$i) { @RoundKey[$i*4..$i*4+3] = @key[$i*4..$i*4+3]; } # All other round keys are found from the previous round keys. while ($i < (4 * ($nr+1))) { @temp[0..3] = @RoundKey[($i-1)*4..($i-1)*4+3]; if ($i % $nk == 0) { # rotate the 4 bytes in a word to the left once # [a0,a1,a2,a3] becomes [a1,a2,a3,a0] @temp[0..3] = @temp[1,2,3,0]; # take a four-byte input word and apply the S-box # to each of the four bytes to produce an output word. @temp[0..3] = @sbox[@temp[0..3]]; $temp[0] = $temp[0] ^ $rcon[$i/$nk]; } elsif ($nk > 6 && $i % $nk == 4) { @temp[0..3] = @sbox[@temp[0..3]]; } $RoundKey[$i*4+0] = $RoundKey[($i-$nk)*4+0] ^ $temp[0]; $RoundKey[$i*4+1] = $RoundKey[($i-$nk)*4+1] ^ $temp[1]; $RoundKey[$i*4+2] = $RoundKey[($i-$nk)*4+2] ^ $temp[2]; $RoundKey[$i*4+3] = $RoundKey[($i-$nk)*4+3] ^ $temp[3]; ++$i; } } #------------------------------------------------------------------------------ # This function adds the round key to state. # The round key is added to the state by an XOR function. sub AddRoundKey($) { my $round = shift; my ($i,$j); for ($i=0; $i<4; ++$i) { my $k = $round*16 + $i*4; for ($j=0; $j<4; ++$j) { $state[$j][$i] ^= $RoundKey[$k + $j]; } } } #------------------------------------------------------------------------------ # Substitute the values in the state matrix with values in an S-box sub SubBytes() { my $i; for ($i=0; $i<4; ++$i) { @{$state[$i]}[0..3] = @sbox[@{$state[$i]}[0..3]]; } } sub InvSubBytes() { my $i; for ($i=0; $i<4; ++$i) { @{$state[$i]}[0..3] = @rsbox[@{$state[$i]}[0..3]]; } } #------------------------------------------------------------------------------ # Shift the rows in the state to the left. # Each row is shifted with different offset. # Offset = Row number. So the first row is not shifted. sub ShiftRows() { # rotate first row 1 columns to left @{$state[1]}[0,1,2,3] = @{$state[1]}[1,2,3,0]; # rotate second row 2 columns to left @{$state[2]}[0,1,2,3] = @{$state[2]}[2,3,0,1]; # rotate third row 3 columns to left @{$state[3]}[0,1,2,3] = @{$state[3]}[3,0,1,2]; } sub InvShiftRows() { # rotate first row 1 columns to right @{$state[1]}[0,1,2,3] = @{$state[1]}[3,0,1,2]; # rotate second row 2 columns to right @{$state[2]}[0,1,2,3] = @{$state[2]}[2,3,0,1]; # rotate third row 3 columns to right @{$state[3]}[0,1,2,3] = @{$state[3]}[1,2,3,0]; } #------------------------------------------------------------------------------ # Find the product of {02} and the argument to xtime modulo 0x1b # Note: returns an integer which may need to be trimmed to 8 bits sub xtime($) { return ($_[0]<<1) ^ ((($_[0]>>7) & 1) * 0x1b); } #------------------------------------------------------------------------------ # Multiply numbers in the field GF(2^8) sub Mult($$) { my ($x, $y) = @_; return (($y & 1) * $x) ^ (($y>>1 & 1) * xtime($x)) ^ (($y>>2 & 1) * xtime(xtime($x))) ^ (($y>>3 & 1) * xtime(xtime(xtime($x)))) ^ (($y>>4 & 1) * xtime(xtime(xtime(xtime($x))))); } #------------------------------------------------------------------------------ # Mix the columns of the state matrix sub MixColumns() { my ($i,$t0,$t1,$t2); for ($i=0; $i<4; ++$i) { $t0 = $state[0][$i]; $t2 = $state[0][$i] ^ $state[1][$i] ^ $state[2][$i] ^ $state[3][$i]; $t1 = $state[0][$i] ^ $state[1][$i] ; $t1 = xtime($t1) & 0xff; $state[0][$i] ^= $t1 ^ $t2 ; $t1 = $state[1][$i] ^ $state[2][$i] ; $t1 = xtime($t1) & 0xff; $state[1][$i] ^= $t1 ^ $t2 ; $t1 = $state[2][$i] ^ $state[3][$i] ; $t1 = xtime($t1) & 0xff; $state[2][$i] ^= $t1 ^ $t2 ; $t1 = $state[3][$i] ^ $t0 ; $t1 = xtime($t1) & 0xff; $state[3][$i] ^= $t1 ^ $t2 ; } } sub InvMixColumns() { my $i; for ($i=0; $i<4; ++$i) { my $a = $state[0][$i]; my $b = $state[1][$i]; my $c = $state[2][$i]; my $d = $state[3][$i]; $state[0][$i] = (Mult($a,0x0e) ^ Mult($b,0x0b) ^ Mult($c,0x0d) ^ Mult($d,0x09)) & 0xff; $state[1][$i] = (Mult($a,0x09) ^ Mult($b,0x0e) ^ Mult($c,0x0b) ^ Mult($d,0x0d)) & 0xff; $state[2][$i] = (Mult($a,0x0d) ^ Mult($b,0x09) ^ Mult($c,0x0e) ^ Mult($d,0x0b)) & 0xff; $state[3][$i] = (Mult($a,0x0b) ^ Mult($b,0x0d) ^ Mult($c,0x09) ^ Mult($d,0x0e)) & 0xff; } } #------------------------------------------------------------------------------ # Encrypt (Cipher) or decrypt (InvCipher) a block of data with CBC # Inputs: 0) string to cipher (must be 16 bytes long) # Returns: cipher'd string sub Cipher($) { my @in = unpack 'C*', $_[0]; # unpack input plaintext my ($i, $j, $round); # copy the input PlainText to state array and apply the CBC for ($i=0; $i<4; ++$i) { for ($j=0; $j<4; ++$j) { my $k = $i*4 + $j; $state[$j][$i] = $in[$k] ^ $cbc[$k]; } } # add the First round key to the state before starting the rounds AddRoundKey(0); # there will be $nr rounds; the first $nr-1 rounds are identical for ($round=1; ; ++$round) { SubBytes(); ShiftRows(); if ($round < $nr) { MixColumns(); AddRoundKey($round); } else { # MixColumns() is not used in the last round AddRoundKey($nr); last; } } # the encryption process is over # copy the state array to output array (and save for CBC) for ($i=0; $i<4; ++$i) { for ($j=0; $j<4; ++$j) { $cbc[$i*4+$j] = $state[$j][$i]; } } return pack 'C*', @cbc; # return packed ciphertext } sub InvCipher($) { my @in = unpack 'C*', $_[0]; # unpack input ciphertext my (@out, $i, $j, $round); # copy the input CipherText to state array for ($i=0; $i<4; ++$i) { for ($j=0; $j<4; ++$j) { $state[$j][$i] = $in[$i*4 + $j]; } } # add the First round key to the state before starting the rounds AddRoundKey($nr); # there will be $nr rounds; the first $nr-1 rounds are identical for ($round=$nr-1; ; --$round) { InvShiftRows(); InvSubBytes(); AddRoundKey($round); # InvMixColumns() is not used in the last round last if $round <= 0; InvMixColumns(); } # copy the state array to output array and reverse the CBC for ($i=0; $i<4; ++$i) { for ($j=0; $j<4; ++$j) { my $k = $i*4 + $j; $out[$k] = $state[$j][$i] ^ $cbc[$k]; } } @cbc = @in; # update CBC for next block return pack 'C*', @out; # return packed plaintext } #------------------------------------------------------------------------------ # Encrypt/Decrypt using AES-CBC algorithm (with fixed 16-byte blocks) # Inputs: 0) data reference (with leading 16-byte initialization vector when decrypting) # 1) encryption key (16, 24 or 32 bytes for AES-128, AES-192 or AES-256) # 2) encrypt flag (false for decryption, true with length 16 bytes to # encrypt using this as the CBC IV, or true with other length to # encrypt with a randomly-generated IV) # 3) flag to disable padding # Returns: error string, or undef on success # Notes: encrypts/decrypts data in place (encrypted data returned with leading IV) sub Crypt($$;$$) { my ($dataPt, $key, $encrypt, $noPad) = @_; # validate key length my $keyLen = length $key; unless ($keyLen == 16 or $keyLen == 24 or $keyLen == 32) { return "Invalid AES key length ($keyLen)"; } my $partLen = length($$dataPt) % 16; my ($pos, $i); if ($encrypt) { if (length($encrypt) == 16) { @cbc = unpack 'C*', $encrypt; } else { # generate a random 16-byte CBC initialization vector unless ($seeded) { srand(time() & ($$ + ($$<<15))); $seeded = 1; } for ($i=0; $i<16; ++$i) { $cbc[$i] = int(rand(256)); } $encrypt = pack 'C*', @cbc; } $$dataPt = $encrypt . $$dataPt; # add IV to the start of the data # add required padding so we can recover the # original string length after decryption # (padding bytes have value set to padding length) my $padLen = 16 - $partLen; $$dataPt .= (chr($padLen)) x $padLen unless $padLen == 16 and $noPad; $pos = 16; # start encrypting at byte 16 (after the IV) } elsif ($partLen) { return 'Invalid AES ciphertext length'; } elsif (length $$dataPt >= 32) { # take the CBC initialization vector from the start of the data @cbc = unpack 'C16', $$dataPt; $$dataPt = substr($$dataPt, 16); $pos = 0; # start decrypting from byte 0 (now that IV is removed) } else { $$dataPt = ''; # empty text return undef; } # the KeyExpansion routine must be called before encryption KeyExpansion($key); # loop through the data and convert in blocks my $dataLen = length $$dataPt; my $last = $dataLen - 16; my $func = $encrypt ? \&Cipher : \&InvCipher; while ($pos <= $last) { # cipher this block substr($$dataPt, $pos, 16) = &$func(substr($$dataPt, $pos, 16)); $pos += 16; } unless ($encrypt or $noPad) { # remove padding if necessary (padding byte value gives length of padding) my $padLen = ord(substr($$dataPt, -1, 1)); return 'AES decryption error (invalid pad byte)' if $padLen > 16; $$dataPt = substr($$dataPt, 0, $dataLen - $padLen); } return undef; } 1; # end __END__ =head1 NAME Image::ExifTool::AES - AES encryption with cipher-block chaining =head1 SYNOPSIS use Image::ExifTool::AES qw(Crypt); $err = Crypt(\$plaintext, $key, 1); # encryption $err = Crypt(\$ciphertext, $key); # decryption =head1 DESCRIPTION This module contains an implementation of the AES encryption/decryption algorithms with cipher-block chaining (CBC) and RFC 2898 PKCS #5 padding. This is the AESV2 and AESV3 encryption mode used in PDF documents. =head1 EXPORTS Exports nothing by default, but L</Crypt> may be exported. =head1 METHODS =head2 Crypt Implement AES encryption/decryption with cipher-block chaining. =over 4 =item Inputs: 0) Scalar reference for data to encrypt/decrypt. 1) Encryption key string (must have length 16, 24 or 32). 2) [optional] Encrypt flag (false to decrypt). 3) [optional] Flag to avoid removing padding after decrypting, or to avoid adding 16 bytes of padding before encrypting when data length is already a multiple of 16 bytes. =item Returns: On success, the return value is undefined and the data is encrypted or decrypted as specified. Otherwise returns an error string and the data is left in an indeterminate state. =item Notes: The length of the encryption key dictates the AES mode, with lengths of 16, 24 and 32 bytes resulting in AES-128, AES-192 and AES-256. When encrypting, the input data may be any length and will be padded to an even 16-byte block size using the specified padding technique. If the encrypt flag has length 16, it is used as the initialization vector for the cipher-block chaining, otherwise a random IV is generated. Upon successful return the data will be encrypted, with the first 16 bytes of the data being the CBC IV. When decrypting, the input data begins with the 16-byte CBC initialization vector. =back =head1 BUGS This code is blindingly slow. But in truth, slowing down processing is the main purpose of encryption, so this really can't be considered a bug. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.hoozi.com/Articles/AESEncryption.htm> =item L<http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf> =item L<http://www.faqs.org/rfcs/rfc3602.html> =back =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/AFCP.pm�����������������������������������������������������000644 �000765 �000024 �00000024775 12642461260 020775� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: AFCP.pm # # Description: Read/write AFCP trailer # # Revisions: 12/26/2005 - P. Harvey Created # # References: 1) http://web.archive.org/web/20080828211305/http://www.tocarte.com/media/axs_afcp_spec.pdf #------------------------------------------------------------------------------ package Image::ExifTool::AFCP; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.07'; sub ProcessAFCP($$); %Image::ExifTool::AFCP::Main = ( PROCESS_PROC => \&ProcessAFCP, NOTES => q{ AFCP stands for AXS File Concatenation Protocol, and is a poorly designed protocol for appending information to the end of files. This can be used as an auxiliary technique to store IPTC information in images, but is incompatible with some file formats. ExifTool will read and write (but not create) AFCP IPTC information in JPEG and TIFF images. See L<http://web.archive.org/web/20080828211305/http://www.tocarte.com/media/axs_afcp_spec.pdf> for the AFCP specification. }, IPTC => { SubDirectory => { TagTable => 'Image::ExifTool::IPTC::Main' } }, TEXT => 'Text', Nail => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, # (the specification allows for a variable amount of padding before # the image after a 10-byte header, so look for the JPEG SOI marker, # otherwise assume a fixed 8 bytes of padding) RawConv => q{ pos($val) = 10; my $start = ($val =~ /\xff\xd8\xff/g) ? pos($val) - 3 : 18; my $img = substr($val, $start); return $self->ValidateImage(\$img, $tag); }, }, PrVw => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, RawConv => q{ pos($val) = 10; my $start = ($val =~ /\xff\xd8\xff/g) ? pos($val) - 3 : 18; my $img = substr($val, $start); return $self->ValidateImage(\$img, $tag); }, }, ); #------------------------------------------------------------------------------ # Read/write AFCP information in a file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # (Set 'ScanForAFCP' member in dirInfo to scan from current position for AFCP) # Returns: 1 on success, 0 if this file didn't contain AFCP information # -1 on write error or if the offsets were incorrect on reading # - updates DataPos to point to actual AFCP start if ScanForAFCP is set # - updates DirLen to trailer length # - returns Fixup reference in dirInfo hash when writing sub ProcessAFCP($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $curPos = $raf->Tell(); my $offset = $$dirInfo{Offset} || 0; # offset from end of file my $rtnVal = 0; NoAFCP: for (;;) { my ($buff, $fix, $dirBuff, $valBuff, $fixup, $vers); # look for AXS trailer last unless $raf->Seek(-12-$offset, 2) and $raf->Read($buff, 12) == 12 and $buff =~ /^(AXS(!|\*))/; my $endPos = $raf->Tell(); my $hdr = $1; SetByteOrder($2 eq '!' ? 'MM' : 'II'); my $startPos = Get32u(\$buff, 4); if ($raf->Seek($startPos, 0) and $raf->Read($buff, 12) == 12 and $buff =~ /^$hdr/) { $fix = 0; } else { $rtnVal = -1; # look for start of AXS trailer if 'ScanForAFCP' last unless $$dirInfo{ScanForAFCP} and $raf->Seek($curPos, 0); my $actualPos = $curPos; # first look for header right at current position for (;;) { last if $raf->Read($buff, 12) == 12 and $buff =~ /^$hdr/; last NoAFCP if $actualPos != $curPos; # scan for AXS header (could be after preview image) for (;;) { my $buf2; $raf->Read($buf2, 65536) or last NoAFCP; $buff .= $buf2; if ($buff =~ /$hdr/g) { $actualPos += pos($buff) - length($hdr); last; # ok, now go back and re-read header } $buf2 = substr($buf2, -3); # only need last 3 bytes for next test $actualPos += length($buff) - length($buf2); $buff = $buf2; } last unless $raf->Seek($actualPos, 0); # seek to start of AFCP } # calculate shift for fixing AFCP offsets $fix = $actualPos - $startPos; } # set variables returned in dirInfo hash $$dirInfo{DataPos} = $startPos + $fix; # actual start position $$dirInfo{DirLen} = $endPos - ($startPos + $fix); $rtnVal = 1; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my $outfile = $$dirInfo{OutFile}; if ($outfile) { # allow all AFCP information to be deleted if ($$et{DEL_GROUP}{AFCP}) { $verbose and print $out " Deleting AFCP\n"; ++$$et{CHANGED}; last; } $dirBuff = $valBuff = ''; require Image::ExifTool::Fixup; $fixup = $$dirInfo{Fixup}; $fixup or $fixup = $$dirInfo{Fixup} = new Image::ExifTool::Fixup; $vers = substr($buff, 4, 2); # get version number } else { $et->DumpTrailer($dirInfo) if $verbose or $$et{HTML_DUMP}; } # read AFCP directory data my $numEntries = Get16u(\$buff, 6); my $dir; unless ($raf->Read($dir, 12 * $numEntries) == 12 * $numEntries) { $et->Error('Error reading AFCP directory', 1); last; } if ($verbose > 2 and not $outfile) { my $dat = $buff . $dir; print $out " AFCP Directory:\n"; HexDump(\$dat, undef, Addr => $$dirInfo{DataPos}, Width => 12, Prefix => $$et{INDENT}, Out => $out, ); } $fix and $et->Warn("Adjusted AFCP offsets by $fix", 1); # # process AFCP directory # my $tagTablePtr = GetTagTable('Image::ExifTool::AFCP::Main'); my ($index, $entry); for ($index=0; $index<$numEntries; ++$index) { my $entry = 12 * $index; my $tag = substr($dir, $entry, 4); my $size = Get32u(\$dir, $entry + 4); my $offset = Get32u(\$dir, $entry + 8); if ($size < 0x80000000 and $raf->Seek($offset+$fix, 0) and $raf->Read($buff, $size) == $size) { if ($outfile) { # rewrite this information my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); if ($tagInfo and $$tagInfo{SubDirectory}) { my %subdirInfo = ( DataPt => \$buff, DirStart => 0, DirLen => $size, DataPos => $offset + $fix, Parent => 'AFCP', ); my $subTable = GetTagTable($tagInfo->{SubDirectory}->{TagTable}); my $newDir = $et->WriteDirectory(\%subdirInfo, $subTable); if (defined $newDir) { $size = length $newDir; $buff = $newDir; } } $fixup->AddFixup(length($dirBuff) + 8); $dirBuff .= $tag . Set32u($size) . Set32u(length $valBuff); $valBuff .= $buff; } else { # extract information $et->HandleTag($tagTablePtr, $tag, $buff, DataPt => \$buff, Size => $size, Index => $index, DataPos => $offset + $fix, ); } } else { $et->Warn("Bad AFCP directory"); $rtnVal = -1 if $outfile; last; } } if ($outfile and length($dirBuff)) { my $outPos = Tell($outfile); # get current outfile position # apply fixup to directory pointers my $valPos = $outPos + 12; # start of value data $fixup->{Shift} += $valPos + length($dirBuff); $fixup->ApplyFixup(\$dirBuff); # write the AFCP header, directory, value data and EOF record (with zero checksums) Write($outfile, $hdr, $vers, Set16u(length($dirBuff)/12), Set32u(0), $dirBuff, $valBuff, $hdr, Set32u($outPos), Set32u(0)) or $rtnVal = -1; # complete fixup so the calling routine can apply further shifts $fixup->AddFixup(length($dirBuff) + length($valBuff) + 4); $fixup->{Start} += $valPos; $fixup->{Shift} -= $valPos; } last; } return $rtnVal; } 1; # end __END__ =head1 NAME Image::ExifTool::AFCP - Read/write AFCP trailer =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract information from the AFCP trailer. Although the AFCP specification is compatible with various file formats, ExifTool currently only processes AFCP in JPEG images. =head1 NOTES AFCP is a specification which allows meta information (including IPTC) to be appended to the end of a file. It is a poorly designed protocol because (like TIFF) it uses absolute offsets to specify data locations. This is a huge blunder because it makes the AFCP information dependent on the file length, so it is easily invalidated by image editing software which doesn't recognize the AFCP trailer to fix up these offsets when the file length changes. ExifTool will attempt to fix these invalid offsets if possible. Scanning for AFCP information may be time consuming, especially when reading from a sequential device, since the information is at the end of the file. In these instances, the ExifTool FastScan option may be used to disable scanning for AFCP information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.tocarte.com/media/axs_afcp_spec.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/AFCP Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���Image-ExifTool-10.10/lib/Image/ExifTool/AIFF.pm�����������������������������������������������������000644 �000765 �000024 �00000021404 12642461260 020753� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: AIFF.pm # # Description: Read AIFF meta information # # Revisions: 01/06/2006 - P. Harvey Created # 09/22/2008 - PH Added DjVu support # # References: 1) http://developer.apple.com/documentation/QuickTime/INMAC/SOUND/imsoundmgr.30.htm#pgfId=3190 # 2) http://astronomy.swin.edu.au/~pbourke/dataformats/aiff/ # 3) http://www.mactech.com/articles/mactech/Vol.06/06.01/SANENormalized/ #------------------------------------------------------------------------------ package Image::ExifTool::AIFF; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::ID3; $VERSION = '1.07'; # information for time/date-based tags (time zero is Jan 1, 1904) my %timeInfo = ( Groups => { 2 => 'Time' }, ValueConv => 'ConvertUnixTime($val - ((66 * 365 + 17) * 24 * 3600))', PrintConv => '$self->ConvertDateTime($val)', ); # AIFF info %Image::ExifTool::AIFF::Main = ( GROUPS => { 2 => 'Audio' }, NOTES => q{ Tags extracted from Audio Interchange File Format (AIFF) files. See L<http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/AIFF.html> for the AIFF specification. }, # FORM => 'Format', FVER => { Name => 'FormatVersion', SubDirectory => { TagTable => 'Image::ExifTool::AIFF::FormatVers' }, }, COMM => { Name => 'Common', SubDirectory => { TagTable => 'Image::ExifTool::AIFF::Common' }, }, COMT => { Name => 'Comment', SubDirectory => { TagTable => 'Image::ExifTool::AIFF::Comment' }, }, NAME => { Name => 'Name', ValueConv => '$self->Decode($val, "MacRoman")', }, AUTH => { Name => 'Author', Groups => { 2 => 'Author' }, ValueConv => '$self->Decode($val, "MacRoman")', }, '(c) ' => { Name => 'Copyright', Groups => { 2 => 'Author' }, ValueConv => '$self->Decode($val, "MacRoman")', }, ANNO => { Name => 'Annotation', ValueConv => '$self->Decode($val, "MacRoman")', }, 'ID3 ' => { Name => 'ID3', SubDirectory => { TagTable => 'Image::ExifTool::ID3::Main', ProcessProc => \&Image::ExifTool::ID3::ProcessID3, }, }, # SSND => 'SoundData', # MARK => 'Marker', # INST => 'Instrument', # MIDI => 'MidiData', # AESD => 'AudioRecording', # APPL => 'ApplicationSpecific', ); %Image::ExifTool::AIFF::Common = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Audio' }, FORMAT => 'int16u', 0 => 'NumChannels', 1 => { Name => 'NumSampleFrames', Format => 'int32u' }, 3 => 'SampleSize', 4 => { Name => 'SampleRate', Format => 'extended' }, #3 9 => { Name => 'CompressionType', Format => 'string[4]', PrintConv => { NONE => 'None', ACE2 => 'ACE 2-to-1', ACE8 => 'ACE 8-to-3', MAC3 => 'MAC 3-to-1', MAC6 => 'MAC 6-to-1', sowt => 'Little-endian, no compression', }, }, 11 => { #PH Name => 'CompressorName', Format => 'pstring', ValueConv => '$self->Decode($val, "MacRoman")', }, ); %Image::ExifTool::AIFF::FormatVers = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int32u', 0 => { Name => 'FormatVersionTime', %timeInfo }, ); %Image::ExifTool::AIFF::Comment = ( PROCESS_PROC => \&Image::ExifTool::AIFF::ProcessComment, GROUPS => { 2 => 'Audio' }, 0 => { Name => 'CommentTime', %timeInfo }, 1 => 'MarkerID', 2 => { Name => 'Comment', ValueConv => '$self->Decode($val, "MacRoman")', }, ); %Image::ExifTool::AIFF::Composite = ( Duration => { Require => { 0 => 'AIFF:SampleRate', 1 => 'AIFF:NumSampleFrames', }, RawConv => '($val[0] and $val[1]) ? $val[1] / $val[0] : undef', PrintConv => 'ConvertDuration($val)', }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::AIFF'); #------------------------------------------------------------------------------ # Process AIFF Comment chunk # Inputs: 0) ExifTool object reference, 1) DirInfo reference, 2) tag table ref # Returns: 1 on success sub ProcessComment($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirLen = $$dirInfo{DirLen}; my $verbose = $et->Options('Verbose'); return 0 unless $dirLen > 2; my $numComments = unpack('n',$$dataPt); my $pos = 2; my $i; $verbose and $et->VerboseDir('Comment', $numComments); for ($i=0; $i<$numComments; ++$i) { last if $pos + 8 > $dirLen; my ($time, $markerID, $size) = unpack("x${pos}Nnn", $$dataPt); $et->HandleTag($tagTablePtr, 0, $time); $et->HandleTag($tagTablePtr, 1, $markerID) if $markerID; $pos += 8; last if $pos + $size > $dirLen; my $val = substr($$dataPt, $pos, $size); $et->HandleTag($tagTablePtr, 2, $val); ++$size if $size & 0x01; # account for padding byte if necessary $pos += $size; } } #------------------------------------------------------------------------------ # Extract information from a AIFF file # Inputs: 0) ExifTool object reference, 1) DirInfo reference # Returns: 1 on success, 0 if this wasn't a valid AIFF file sub ProcessAIFF($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $err, $tagTablePtr, $page, $type); # verify this is a valid AIFF file return 0 unless $raf->Read($buff, 12) == 12; my $fast3 = $$et{OPTIONS}{FastScan} && $$et{OPTIONS}{FastScan} == 3; my $pos = 12; # check for DjVu image if ($buff =~ /^AT&TFORM/) { # http://www.djvu.org/ # http://djvu.sourceforge.net/specs/djvu3changes.txt my $buf2; return 0 unless $raf->Read($buf2, 4) == 4 and $buf2 =~ /^(DJVU|DJVM)/; $pos += 4; $buff = substr($buff, 4) . $buf2; $et->SetFileType('DJVU'); return 1 if $fast3; $tagTablePtr = GetTagTable('Image::ExifTool::DjVu::Main'); # modifiy FileType to indicate a multi-page document $$et{VALUE}{FileType} .= " (multi-page)" if $buf2 eq 'DJVM'; $type = 'DjVu'; } else { return 0 unless $buff =~ /^FORM....(AIF(F|C))/s; $et->SetFileType($1); return 1 if $fast3; $tagTablePtr = GetTagTable('Image::ExifTool::AIFF::Main'); $type = 'AIFF'; } SetByteOrder('MM'); my $verbose = $et->Options('Verbose'); # # Read through the IFF chunks # for (;;) { $raf->Read($buff, 8) == 8 or last; $pos += 8; my ($tag, $len) = unpack('a4N', $buff); my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); $et->VPrint(0, "AIFF '$tag' chunk ($len bytes of data):\n"); # AIFF chunks are padded to an even number of bytes my $len2 = $len + ($len & 0x01); if ($tagInfo) { if ($$tagInfo{TypeOnly}) { $len = $len2 = 4; $page = ($page || 0) + 1; $et->VPrint(0, $$et{INDENT} . "Page $page:\n"); } $raf->Read($buff, $len2) >= $len or $err=1, last; unless ($$tagInfo{SubDirectory} or $$tagInfo{Binary}) { $buff =~ s/\0+$//; # remove trailing nulls } $et->HandleTag($tagTablePtr, $tag, $buff, DataPt => \$buff, DataPos => $pos, Start => 0, Size => $len, ); } elsif ($verbose > 2 and $len2 < 1024000) { $raf->Read($buff, $len2) == $len2 or $err = 1, last; HexDump(\$buff, undef, MaxLen => 512); } else { $raf->Seek($len2, 1) or $err=1, last; } $pos += $len2; } $err and $et->Warn("Error reading $type file (corrupted?)"); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::AIFF - Read AIFF meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to extract information from AIFF (Audio Interchange File Format) audio files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://developer.apple.com/documentation/QuickTime/INMAC/SOUND/imsoundmgr.30.htm#pgfId=3190> =item L<http://astronomy.swin.edu.au/~pbourke/dataformats/aiff/> =item L<http://www.mactech.com/articles/mactech/Vol.06/06.01/SANENormalized/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/AIFF Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/APE.pm������������������������������������������������������000644 �000765 �000024 �00000020541 12642461261 020655� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: APE.pm # # Description: Read Monkey's Audio meta information # # Revisions: 11/13/2006 - P. Harvey Created # # References: 1) http://www.monkeysaudio.com/ # 2) http://www.personal.uni-jena.de/~pfk/mpp/sv8/apetag.html #------------------------------------------------------------------------------ package Image::ExifTool::APE; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.04'; # APE metadata blocks %Image::ExifTool::APE::Main = ( GROUPS => { 2 => 'Audio' }, NOTES => q{ Tags found in Monkey's Audio (APE) information. Only a few common tags are listed below, but ExifTool will extract any tag found. ExifTool supports APEv1 and APEv2 tags, as well as ID3 information in APE files, and will also read APE metadata from MP3 and MPC files. }, Album => { }, Artist => { }, Genre => { }, Title => { }, Track => { }, Year => { }, 'Tool Version' => { Name => 'ToolVersion' }, 'Tool Name' => { Name => 'ToolName' }, ); # APE MAC header version 3.97 or earlier %Image::ExifTool::APE::OldHeader = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 1 => 'MAC', 2 => 'Audio' }, FORMAT => 'int16u', NOTES => 'APE MAC audio header for version 3.97 or earlier.', 0 => { Name => 'APEVersion', ValueConv => '$val / 1000', }, 1 => 'CompressionLevel', # 2 => 'FormatFlags', 3 => 'Channels', 4 => { Name => 'SampleRate', Format => 'int32u' }, # 6 => { Name => 'HeaderBytes', Format => 'int32u' }, # WAV header bytes # 8 => { Name => 'TerminatingBytes', Format => 'int32u' }, 10 => { Name => 'TotalFrames', Format => 'int32u' }, 12 => { Name => 'FinalFrameBlocks', Format => 'int32u' }, ); # APE MAC header version 3.98 or later %Image::ExifTool::APE::NewHeader = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 1 => 'MAC', 2 => 'Audio' }, FORMAT => 'int16u', NOTES => 'APE MAC audio header for version 3.98 or later.', 0 => 'CompressionLevel', # 1 => 'FormatFlags', 2 => { Name => 'BlocksPerFrame', Format => 'int32u' }, 4 => { Name => 'FinalFrameBlocks', Format => 'int32u' }, 6 => { Name => 'TotalFrames', Format => 'int32u' }, 8 => 'BitsPerSample', 9 => 'Channels', 10 => { Name => 'SampleRate', Format => 'int32u' }, ); #------------------------------------------------------------------------------ # Make tag info hash for specified tag # Inputs: 0) tag name, 1) tag table ref # - must only call if tag doesn't exist sub MakeTag($$) { my ($tag, $tagTablePtr) = @_; my $name = ucfirst(lc($tag)); # remove invalid characters in tag name and capitalize following letters $name =~ s/[^\w-]+(.?)/\U$1/sg; $name =~ s/([a-z0-9])_([a-z])/$1\U$2/g; my %tagInfo = ( Name => $name ); $tagInfo{Groups} = { 2 => 'Preview' } if $tag =~ /^Cover Art/ and $tag !~ /Desc$/; AddTagToTable($tagTablePtr, $tag, \%tagInfo); } #------------------------------------------------------------------------------ # Extract information from an APE file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # - Just looks for APE trailer if FileType is already set # Returns: 1 on success, 0 if this wasn't a valid APE file sub ProcessAPE($$) { my ($et, $dirInfo) = @_; # must first check for leading/trailing ID3 information unless ($$et{DoneID3}) { require Image::ExifTool::ID3; Image::ExifTool::ID3::ProcessID3($et, $dirInfo) and return 1; } my $raf = $$dirInfo{RAF}; my $verbose = $et->Options('Verbose'); my ($buff, $i, $header, $tagTablePtr, $dataPos, $oldIndent); $$et{DoneAPE} = 1; # check APE signature and process audio information # unless this is some other type of file unless ($$et{VALUE}{FileType}) { $raf->Read($buff, 32) == 32 or return 0; $buff =~ /^(MAC |APETAGEX)/ or return 0; $et->SetFileType(); SetByteOrder('II'); if ($buff =~ /^APETAGEX/) { # we already read the APE header $header = 1; } else { # process the MAC header my $vers = Get16u(\$buff, 4); my $table; if ($vers <= 3970) { $buff = substr($buff, 4); $table = GetTagTable('Image::ExifTool::APE::OldHeader'); } else { my $dlen = Get32u(\$buff, 8); my $hlen = Get32u(\$buff, 12); unless ($dlen & 0x80000000 or $hlen & 0x80000000) { if ($raf->Seek($dlen, 0) and $raf->Read($buff, $hlen) == $hlen) { $table = GetTagTable('Image::ExifTool::APE::NewHeader'); } } } $et->ProcessDirectory( { DataPt => \$buff }, $table) if $table; } } # look for APE trailer unless we already found an APE header unless ($header) { # look for the APE trailer footer... my $footPos = -32; # (...but before the ID3v1 trailer if it exists) $footPos -= 128 if $$et{DoneID3} == 2; $raf->Seek($footPos, 2) or return 1; $raf->Read($buff, 32) == 32 or return 1; $buff =~ /^APETAGEX/ or return 1; SetByteOrder('II'); } # # Read the APE data (we have just read the APE header or footer into $buff) # my ($version, $size, $count, $flags) = unpack('x8V4', $buff); $version /= 1000; $size -= 32; # get size of data only if (($size & 0x80000000) == 0 and ($header or $raf->Seek(-$size-32, 1)) and $raf->Read($buff, $size) == $size) { if ($verbose) { $oldIndent = $$et{INDENT}; $$et{INDENT} .= '| '; $et->VerboseDir("APEv$version", $count, $size); $et->VerboseDump(\$buff, DataPos => $raf->Tell() - $size); } $tagTablePtr = GetTagTable('Image::ExifTool::APE::Main'); $dataPos = $raf->Tell() - $size; } else { $count = -1; } # # Process the APE tags # my $pos = 0; for ($i=0; $i<$count; ++$i) { # read next APE tag last if $pos + 8 > $size; my $len = Get32u(\$buff, $pos); my $flags = Get32u(\$buff, $pos + 4); pos($buff) = $pos + 8; last unless $buff =~ /\G(.*?)\0/sg; my $tag = $1; # avoid conflicts with our special table entries $tag .= '.' if $Image::ExifTool::specialTags{$tag}; $pos = pos($buff); last if $pos + $len > $size; my $val = substr($buff, $pos, $len); MakeTag($tag, $tagTablePtr) unless $$tagTablePtr{$tag}; # handle binary-value tags if (($flags & 0x06) == 0x02) { my $buf2 = $val; $val = \$buf2; # extract cover art description separately (hackitty hack) if ($tag =~ /^Cover Art/) { $buf2 =~ s/^([\x20-\x7f]*)\0//; if ($1) { my $t = "$tag Desc"; my $v = $1; MakeTag($t, $tagTablePtr) unless $$tagTablePtr{$t}; $et->HandleTag($tagTablePtr, $t, $v); } } } $et->HandleTag($tagTablePtr, $tag, $val, Index => $i, DataPt => \$buff, DataPos => $dataPos, Start => $pos, Size => $len, ); $pos += $len; } $i == $count or $et->Warn('Bad APE trailer'); $$et{INDENT} = $oldIndent if defined $oldIndent; return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::APE - Read Monkey's Audio meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from Monkey's Audio (APE) audio files. =head1 BUGS Currently doesn't parse MAC header unless it is at the start of the file. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.monkeysaudio.com/> =item L<http://www.personal.uni-jena.de/~pfk/mpp/sv8/apetag.html> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/APE Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/APP12.pm����������������������������������������������������000644 �000765 �000024 �00000024705 12642461262 021042� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: APP12.pm # # Description: Read APP12 meta information # # Revisions: 10/18/2005 - P. Harvey Created # # References: 1) Heinrich Giesen private communication #------------------------------------------------------------------------------ package Image::ExifTool::APP12; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.13'; sub ProcessAPP12($$$); sub ProcessDucky($$$); sub WriteDucky($$$); # APP12 tags (ref PH) %Image::ExifTool::APP12::PictureInfo = ( PROCESS_PROC => \&ProcessAPP12, GROUPS => { 0 => 'APP12', 1 => 'PictureInfo', 2 => 'Image' }, PRIORITY => 0, NOTES => q{ The JPEG APP12 "Picture Info" segment was used by some older cameras, and contains ASCII-based meta information. Below are some tags which have been observed Agfa and Polaroid images, however ExifTool will extract information from any tags found in this segment. }, FNumber => { ValueConv => '$val=~s/^[A-Za-z ]*//;$val', # Agfa leads with an 'F' PrintConv => 'sprintf("%.1f",$val)', }, Aperture => { PrintConv => 'sprintf("%.1f",$val)', }, TimeDate => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, ValueConv => '$val=~/^\d+$/ ? ConvertUnixTime($val) : $val', PrintConv => '$self->ConvertDateTime($val)', }, Shutter => { Name => 'ExposureTime', ValueConv => '$val * 1e-6', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, shtr => { Name => 'ExposureTime', ValueConv => '$val * 1e-6', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 'Serial#' => { Name => 'SerialNumber', Groups => { 2 => 'Camera' }, }, Flash => { PrintConv => { 0 => 'Off', 1 => 'On' } }, Macro => { PrintConv => { 0 => 'Off', 1 => 'On' } }, StrobeTime => { }, Ytarget => { Name => 'YTarget' }, ylevel => { Name => 'YLevel' }, FocusPos => { }, FocusMode => { }, Quality => { }, ExpBias => 'ExposureCompensation', FWare => 'FirmwareVersion', StrobeTime => { }, Resolution => { }, Protect => { }, ConTake => { }, ImageSize => { PrintConv => '$val=~tr/-/x/;$val' }, ColorMode => { }, Zoom => { }, ZoomPos => { }, LightS => { }, Type => { Name => 'CameraType', Groups => { 2 => 'Camera' }, DataMember => 'CameraType', RawConv => '$self->{CameraType} = $val', }, Version => { Groups => { 2 => 'Camera' } }, ID => { Groups => { 2 => 'Camera' } }, ); # APP12 segment written in Photoshop "Save For Web" images # (from tests with Photoshop 7 files - PH/1) %Image::ExifTool::APP12::Ducky = ( PROCESS_PROC => \&ProcessDucky, WRITE_PROC => \&WriteDucky, GROUPS => { 0 => 'Ducky', 1 => 'Ducky', 2 => 'Image' }, WRITABLE => 'string', NOTES => q{ Photoshop uses the JPEG APP12 "Ducky" segment to store some information in "Save for Web" images. }, 1 => { #PH Name => 'Quality', Priority => 0, Avoid => 1, Writable => 'int32u', ValueConv => 'unpack("N",$val)', # 4-byte integer ValueConvInv => 'pack("N",$val)', PrintConv => '"$val%"', PrintConvInv => '$val=~/(\d+)/ ? $1 : undef', }, 2 => { #1 Name => 'Comment', Priority => 0, Avoid => 1, # (ignore 4-byte character count at start of value) ValueConv => '$self->Decode(substr($val,4),"UCS2","MM")', ValueConvInv => 'pack("N",length $val) . $self->Encode($val,"UCS2","MM")', }, 3 => { #PH Name => 'Copyright', Priority => 0, Avoid => 1, Groups => { 2 => 'Author' }, # (ignore 4-byte character count at start of value) ValueConv => '$self->Decode(substr($val,4),"UCS2","MM")', ValueConvInv => 'pack("N",length $val) . $self->Encode($val,"UCS2","MM")', }, ); #------------------------------------------------------------------------------ # Write APP12 Ducky segment # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: New directory data or undefined on error sub WriteDucky($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access to autoload this package my $dataPt = $$dirInfo{DataPt}; my $pos = $$dirInfo{DirStart}; my $newTags = $et->GetNewTagInfoHash($tagTablePtr); my @addTags = sort { $a <=> $b } keys(%$newTags); my ($dirEnd, %doneTags); if ($dataPt) { $dirEnd = $pos + $$dirInfo{DirLen}; } else { my $tmp = ''; $dataPt = \$tmp; $pos = $dirEnd = 0; } my $newData = ''; SetByteOrder('MM'); # process all data blocks in Ducky segment for (;;) { my ($tag, $len, $val); if ($pos + 4 <= $dirEnd) { $tag = Get16u($dataPt, $pos); $len = Get16u($dataPt, $pos + 2); $pos += 4; if ($pos + $len > $dirEnd) { $et->Warn('Invalid Ducky block length'); return undef; } $val = substr($$dataPt, $pos, $len); $pos += $len; } else { last unless @addTags; $tag = pop @addTags; next if $doneTags{$tag}; } $doneTags{$tag} = 1; my $tagInfo = $$newTags{$tag}; if ($tagInfo) { my $nvHash = $et->GetNewValueHash($tagInfo); my $isNew; if (defined $val) { if ($et->IsOverwriting($nvHash, $val)) { $et->VerboseValue("- Ducky:$$tagInfo{Name}", $val); $isNew = 1; } } else { next unless $$nvHash{IsCreating}; $isNew = 1; } if ($isNew) { $val = $et->GetNewValue($nvHash); ++$$et{CHANGED}; next unless defined $val; # next if tag is being deleted $et->VerboseValue("+ Ducky:$$tagInfo{Name}", $val); } } $newData .= pack('nn', $tag, length $val) . $val; } $newData .= "\0\0" if length $newData; return $newData; } #------------------------------------------------------------------------------ # Process APP12 Ducky segment (ref PH) # Inputs: 0) ExifTool object reference, 1) Directory information ref, 2) tag table ref # Returns: 1 on success, 0 if this wasn't a recognized Ducky segment # Notes: This segment has the following format: # 1) 5 bytes: "Ducky" # 2) multiple data blocks (all integers are big endian): # a) 2 bytes: block type (0=end, 1=Quality, 2=Comment, 3=Copyright) # b) 2 bytes: block length (N) # c) N bytes: block data sub ProcessDucky($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $pos = $$dirInfo{DirStart}; my $dirEnd = $pos + $$dirInfo{DirLen}; SetByteOrder('MM'); # process all data blocks in Ducky segment for (;;) { last if $pos + 4 > $dirEnd; my $tag = Get16u($dataPt, $pos); my $len = Get16u($dataPt, $pos + 2); $pos += 4; if ($pos + $len > $dirEnd) { $et->Warn('Invalid Ducky block length'); last; } my $val = substr($$dataPt, $pos, $len); $et->HandleTag($tagTablePtr, $tag, $val, DataPt => $dataPt, DataPos => $$dirInfo{DataPos}, Start => $pos, Size => $len, ); $pos += $len; } return 1; } #------------------------------------------------------------------------------ # Process APP12 Picture Info segment (ref PH) # Inputs: 0) ExifTool object reference, 1) Directory information ref, 2) tag table ref # Returns: 1 on success, 0 if this wasn't a recognized APP12 sub ProcessAPP12($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || (length($$dataPt) - $dirStart); if ($dirLen != $dirStart + length($$dataPt)) { my $buff = substr($$dataPt, $dirStart, $dirLen); $dataPt = \$buff; } else { pos($$dataPt) = $$dirInfo{DirStart}; } my $verbose = $et->Options('Verbose'); my $success = 0; my $section = ''; pos($$dataPt) = 0; # this regular expression is a bit complex, but basically we are looking for # section headers (eg. "[Camera Info]") and tag/value pairs (eg. "tag=value", # where "value" may contain white space), separated by spaces or CR/LF. # (APP12 uses CR/LF, but Olympus TextualInfo is similar and uses spaces) while ($$dataPt =~ /(\[.*?\]|[\w#-]+=[\x20-\x7e]+?(?=\s*([\n\r\0]|[\w#-]+=|\[|$)))/g) { my $token = $1; # was this a section name? if ($token =~ /^\[(.*)\]/) { $et->VerboseDir($1) if $verbose; $section = ($token =~ /\[(\S+) ?Info\]/i) ? $1 : ''; $success = 1; next; } $et->VerboseDir($$dirInfo{DirName}) if $verbose and not $success; $success = 1; my ($tag, $val) = ($token =~ /(\S+)=(.+)/); my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); $verbose and $et->VerboseInfo($tag, $tagInfo, Value => $val); unless ($tagInfo) { # add new tag to table $tagInfo = { Name => ucfirst $tag }; # put in Camera group if information in "Camera" section $$tagInfo{Groups} = { 2 => 'Camera' } if $section =~ /camera/i; AddTagToTable($tagTablePtr, $tag, $tagInfo); } $et->FoundTag($tagInfo, $val); } return $success; } 1; #end __END__ =head1 NAME Image::ExifTool::APP12 - Read APP12 meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret APP12 meta information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Heinrich Giesen for his help decoding APP12 "Ducky" information. =head1 SEE ALSO L<Image::ExifTool::TagNames/APP12 Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Apple.pm����������������������������������������������������000644 �000765 �000024 �00000007727 12642461263 021326� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Apple.pm # # Description: Apple EXIF maker notes tags # # Revisions: 2013-09-13 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::Apple; use strict; use vars qw($VERSION); use Image::ExifTool::Exif; use Image::ExifTool::PLIST; $VERSION = '1.02'; %Image::ExifTool::Apple::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, NOTES => 'Tags extracted from maker notes of images from the iPhone 5 with iOS 7.', # 0x0001 - int32s: seen 0,1,2,3,4 # 0x0002 - binary plist with a single data object of size 512 bytes (iPhone5s) 0x0003 => { Name => 'RunTime', SubDirectory => { TagTable => 'Image::ExifTool::Apple::RunTime' }, }, # 0x0004 - int32s: normally 1, but 0 for low-light images # 0x0005 - int32s: seen values 147-247, and 100 for blank images # 0x0006 - int32s: seen values 120-258, and 20 for blank images # 0x0007 - int32s: seen 1 # 0x0008 - rational64s[3]: eg) "0.02683717579 -0.7210501641 -0.6948792783" # 0x0009 - int32s: seen 19,531 0x000a => { Name => 'HDRImageType', Writable => 'int32s', PrintConv => { 3 => 'HDR Image', 4 => 'Original Image', }, }, 0x000b => { Name => 'BurstUUID', Writable => 'string', Notes => 'unique ID for all images in a burst', }, # 0x000c - rational64s[2]: eg) "0.1640625 0.19921875" # 0x000d - int32s: 0,1,6 # 0x000e - int32s: 0,1,12 # 0x000f - int32s: 2,3 # 0x0010 - int32s: 1 # 0x0011 - string[37]: some type of UID, eg. "FFCBAC24-E547-4BBC-AF47-38B1A3D845E3\0" (iPhone 6s, iOS 6.1) # 0x0014 - int32s: 1,2,3,5 (iPhone 6s, iOS 6.1) ); # PLIST-format CMTime structure (ref PH) # (CMTime ref https://developer.apple.com/library/ios/documentation/CoreMedia/Reference/CMTime/Reference/reference.html) %Image::ExifTool::Apple::RunTime = ( PROCESS_PROC => \&Image::ExifTool::PLIST::ProcessBinaryPLIST, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, NOTES => q{ This PLIST-format information contains the elements of a CMTime structure representing the amount of time the phone has been running since the last boot, not including standby time. }, timescale => { Name => 'RunTimeScale' }, # (seen 1000000000 --> ns) epoch => { Name => 'RunTimeEpoch' }, # (seen 0) value => { Name => 'RunTimeValue' }, # (should divide by RunTimeScale to get seconds) flags => { Name => 'RunTimeFlags', PrintConv => { BITMASK => { 0 => 'Valid', 1 => 'Has been rounded', 2 => 'Positive infinity', 3 => 'Negative infinity', 4 => 'Indefinite', }}, }, ); # Apple composite tags %Image::ExifTool::Apple::Composite = ( GROUPS => { 2 => 'Camera' }, RunTimeSincePowerUp => { Require => { 0 => 'Apple:RunTimeValue', 1 => 'Apple:RunTimeScale', }, ValueConv => '$val[1] ? $val[0] / $val[1] : undef', PrintConv => 'ConvertDuration($val)', }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::Apple'); 1; # end __END__ =head1 NAME Image::ExifTool::Apple - Apple EXIF maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Apple maker notes in EXIF information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/Apple Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/ASF.pm������������������������������������������������������000644 �000765 �000024 �00000073314 12642461262 020670� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: ASF.pm # # Description: Read ASF/WMA/WMV meta information # # Revisions: 12/23/2005 - P. Harvey Created # # References: 1) http://www.microsoft.com/windows/windowsmedia/format/asfspec.aspx # 2) http://www.adobe.com/devnet/xmp/pdfs/XMPSpecificationPart3.pdf (Oct 2008) #------------------------------------------------------------------------------ package Image::ExifTool::ASF; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; use Image::ExifTool::RIFF; $VERSION = '1.23'; sub ProcessASF($$;$); sub ProcessContentDescription($$$); sub ProcessExtendedContentDescription($$$); sub ProcessMetadata($$$); sub ProcessPicture($$$); sub ProcessCodecList($$$); # GUID definitions my %errorCorrection = ( '20FB5700-5B55-11CF-A8FD-00805F5C442B' => 'No Error Correction', 'BFC3CD50-618F-11CF-8BB2-00AA00B4E220' => 'Audio Spread', ); my %streamType = ( 'F8699E40-5B4D-11CF-A8FD-00805F5C442B' => 'Audio', 'BC19EFC0-5B4D-11CF-A8FD-00805F5C442B' => 'Video', '59DACFC0-59E6-11D0-A3AC-00A0C90348F6' => 'Command', 'B61BE100-5B4E-11CF-A8FD-00805F5C442B' => 'JFIF', '35907DE0-E415-11CF-A917-00805F5C442B' => 'Degradable JPEG', '91BD222C-F21C-497A-8B6D-5AA86BFC0185' => 'File Transfer', '3AFB65E2-47EF-40F2-AC2C-70A90D71D343' => 'Binary', ); my %mutex = ( 'D6E22A00-35DA-11D1-9034-00A0C90349BE' => 'MutexLanguage', 'D6E22A01-35DA-11D1-9034-00A0C90349BE' => 'MutexBitrate', 'D6E22A02-35DA-11D1-9034-00A0C90349BE' => 'MutexUnknown', ); my %bandwidthSharing = ( 'AF6060AA-5197-11D2-B6AF-00C04FD908E9' => 'SharingExclusive', 'AF6060AB-5197-11D2-B6AF-00C04FD908E9' => 'SharingPartial', ); my %typeSpecific = ( '776257D4-C627-41CB-8F81-7AC7FF1C40CC' => 'WebStreamMediaSubtype', 'DA1E6B13-8359-4050-B398-388E965BF00C' => 'WebStreamFormat', ); my %advancedContentEncryption = ( '7A079BB6-DAA4-4e12-A5CA-91D38DC11A8D' => 'DRMNetworkDevices', ); # ASF top level objects %Image::ExifTool::ASF::Main = ( PROCESS_PROC => \&ProcessASF, NOTES => q{ The ASF format is used by Windows WMA and WMV files, and DIVX videos. Tag ID's aren't listed because they are huge 128-bit GUID's that would ruin the formatting of this table. }, '75B22630-668E-11CF-A6D9-00AA0062CE6C' => { Name => 'Header', SubDirectory => { TagTable => 'Image::ExifTool::ASF::Header', Size => 6 }, }, '75B22636-668E-11CF-A6D9-00AA0062CE6C' => 'Data', '33000890-E5B1-11CF-89F4-00A0C90349CB' => 'SimpleIndex', 'D6E229D3-35DA-11D1-9034-00A0C90349BE' => 'Index', 'FEB103F8-12AD-4C64-840F-2A1D2F7AD48C' => 'MediaIndex', '3CB73FD0-0C4A-4803-953D-EDF7B6228F0C' => 'TimecodeIndex', 'BE7ACFCB-97A9-42E8-9C71-999491E3AFAC' => { #2 Name => 'XMP', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' }, }, ); # ASF header objects %Image::ExifTool::ASF::Header = ( PROCESS_PROC => \&ProcessASF, '8CABDCA1-A947-11CF-8EE4-00C00C205365' => { Name => 'FileProperties', SubDirectory => { TagTable => 'Image::ExifTool::ASF::FileProperties' }, }, 'B7DC0791-A9B7-11CF-8EE6-00C00C205365' => { Name => 'StreamProperties', SubDirectory => { TagTable => 'Image::ExifTool::ASF::StreamProperties' }, }, '5FBF03B5-A92E-11CF-8EE3-00C00C205365' => { Name => 'HeaderExtension', SubDirectory => { TagTable => 'Image::ExifTool::ASF::HeaderExtension', Size => 22 }, }, '86D15240-311D-11D0-A3A4-00A0C90348F6' => { Name => 'CodecList', SubDirectory => { TagTable => 'Image::ExifTool::ASF::CodecList' }, }, '1EFB1A30-0B62-11D0-A39B-00A0C90348F6' => 'ScriptCommand', 'F487CD01-A951-11CF-8EE6-00C00C205365' => 'Marker', 'D6E229DC-35DA-11D1-9034-00A0C90349BE' => 'BitrateMutualExclusion', '75B22635-668E-11CF-A6D9-00AA0062CE6C' => 'ErrorCorrection', '75B22633-668E-11CF-A6D9-00AA0062CE6C' => { Name => 'ContentDescription', SubDirectory => { TagTable => 'Image::ExifTool::ASF::ContentDescr' }, }, '2211B3FA-BD23-11D2-B4B7-00A0C955FC6E' => { Name => 'ContentBranding', SubDirectory => { TagTable => 'Image::ExifTool::ASF::ContentBranding' }, }, 'D2D0A440-E307-11D2-97F0-00A0C95EA850' => { Name => 'ExtendedContentDescr', SubDirectory => { TagTable => 'Image::ExifTool::ASF::ExtendedDescr' }, }, '7BF875CE-468D-11D1-8D82-006097C9A2B2' => 'StreamBitrateProps', '2211B3FB-BD23-11D2-B4B7-00A0C955FC6E' => 'ContentEncryption', '298AE614-2622-4C17-B935-DAE07EE9289C' => 'ExtendedContentEncryption', '2211B3FC-BD23-11D2-B4B7-00A0C955FC6E' => 'DigitalSignature', '1806D474-CADF-4509-A4BA-9AABCB96AAE8' => 'Padding', ); %Image::ExifTool::ASF::ContentDescr = ( PROCESS_PROC => \&ProcessContentDescription, GROUPS => { 2 => 'Video' }, 0 => 'Title', 1 => { Name => 'Author', Groups => { 2 => 'Author' } }, 2 => { Name => 'Copyright', Groups => { 2 => 'Author' } }, 3 => 'Description', 4 => 'Rating', ); %Image::ExifTool::ASF::ContentBranding = ( PROCESS_PROC => \&ProcessContentBranding, GROUPS => { 2 => 'Author' }, 0 => { Name => 'BannerImageType', PrintConv => { 0 => 'None', 1 => 'Bitmap', 2 => 'JPEG', 3 => 'GIF', }, }, 1 => { Name => 'BannerImage', Groups => { 2 => 'Preview' }, Binary => 1 }, 2 => 'BannerImageURL', 3 => 'CopyrightURL', ); %Image::ExifTool::ASF::ExtendedDescr = ( PROCESS_PROC => \&ProcessExtendedContentDescription, GROUPS => { 2 => 'Video' }, ASFLeakyBucketPairs => { Binary => 1 }, AspectRatioX => {}, AspectRatioY => {}, Author => { Groups => { 2 => 'Author' } }, AverageLevel => {}, BannerImageData => {}, BannerImageType => {}, BannerImageURL => {}, Bitrate => { PrintConv => 'ConvertBitrate($val)' }, Broadcast => {}, BufferAverage => {}, Can_Skip_Backward => {}, Can_Skip_Forward => {}, Copyright => { Groups => { 2 => 'Author' } }, CopyrightURL => { Groups => { 2 => 'Author' } }, CurrentBitrate => { PrintConv => 'ConvertBitrate($val)' }, Description => {}, DRM_ContentID => {}, DRM_DRMHeader_ContentDistributor => {}, DRM_DRMHeader_ContentID => {}, DRM_DRMHeader_IndividualizedVersion => {}, DRM_DRMHeader_KeyID => {}, DRM_DRMHeader_LicenseAcqURL => {}, DRM_DRMHeader_SubscriptionContentID => {}, DRM_DRMHeader => {}, DRM_IndividualizedVersion => {}, DRM_KeyID => {}, DRM_LASignatureCert => {}, DRM_LASignatureLicSrvCert => {}, DRM_LASignaturePrivKey => {}, DRM_LASignatureRootCert => {}, DRM_LicenseAcqURL => {}, DRM_V1LicenseAcqURL => {}, Duration => { PrintConv => 'ConvertDuration($val)' }, FileSize => {}, HasArbitraryDataStream => {}, HasAttachedImages => {}, HasAudio => {}, HasFileTransferStream => {}, HasImage => {}, HasScript => {}, HasVideo => {}, Is_Protected => {}, Is_Trusted => {}, IsVBR => {}, NSC_Address => {}, NSC_Description => {}, NSC_Email => {}, NSC_Name => {}, NSC_Phone => {}, NumberOfFrames => {}, OptimalBitrate => { PrintConv => 'ConvertBitrate($val)' }, PeakValue => {}, Rating => {}, Seekable => {}, Signature_Name => {}, Stridable => {}, Title => {}, VBRPeak => {}, # "WM/" tags... AlbumArtist => {}, AlbumCoverURL => {}, AlbumTitle => {}, ASFPacketCount => {}, ASFSecurityObjectsSize => {}, AudioFileURL => {}, AudioSourceURL => {}, AuthorURL => { Groups => { 2 => 'Author' } }, BeatsPerMinute => {}, Category => {}, Codec => {}, Composer => {}, Conductor => {}, ContainerFormat => {}, ContentDistributor => {}, ContentGroupDescription => {}, Director => {}, DRM => {}, DVDID => {}, EncodedBy => {}, EncodingSettings => {}, EncodingTime => { Groups => { 2 => 'Time' } }, Genre => {}, GenreID => {}, InitialKey => {}, ISRC => {}, Language => {}, Lyrics => {}, Lyrics_Synchronised => {}, MCDI => {}, MediaClassPrimaryID => { ValueConv => 'Image::ExifTool::ASF::GetGUID($val)' }, MediaClassSecondaryID => { ValueConv => 'Image::ExifTool::ASF::GetGUID($val)' }, MediaCredits => {}, MediaIsDelay => {}, MediaIsFinale => {}, MediaIsLive => {}, MediaIsPremiere => {}, MediaIsRepeat => {}, MediaIsSAP => {}, MediaIsStereo => {}, MediaIsSubtitled => {}, MediaIsTape => {}, MediaNetworkAffiliation => {}, MediaOriginalBroadcastDateTime => { Groups => { 2 => 'Time' } }, MediaOriginalChannel => {}, MediaStationCallSign => {}, MediaStationName => {}, ModifiedBy => {}, Mood => {}, OriginalAlbumTitle => {}, OriginalArtist => {}, OriginalFilename => 'OriginalFileName', OriginalLyricist => {}, OriginalReleaseTime => { Groups => { 2 => 'Time' } }, OriginalReleaseYear => { Groups => { 2 => 'Time' } }, ParentalRating => {}, ParentalRatingReason => {}, PartOfSet => {}, PeakBitrate => { PrintConv => 'ConvertBitrate($val)' }, Period => {}, Picture => { SubDirectory => { TagTable => 'Image::ExifTool::ASF::Picture', }, }, PlaylistDelay => {}, Producer => {}, PromotionURL => {}, ProtectionType => {}, Provider => {}, ProviderCopyright => {}, ProviderRating => {}, ProviderStyle => {}, Publisher => {}, RadioStationName => {}, RadioStationOwner => {}, SharedUserRating => {}, StreamTypeInfo => {}, SubscriptionContentID => {}, SubTitle => 'Subtitle', SubTitleDescription => 'SubtitleDescription', Text => {}, ToolName => {}, ToolVersion => {}, Track => {}, TrackNumber => {}, UniqueFileIdentifier => {}, UserWebURL => {}, VideoClosedCaptioning => {}, VideoFrameRate => {}, VideoHeight => {}, VideoWidth => {}, WMADRCAverageReference => {}, WMADRCAverageTarget => {}, WMADRCPeakReference => {}, WMADRCPeakTarget => {}, WMCollectionGroupID => {}, WMCollectionID => {}, WMContentID => {}, Writer => { Groups => { 2 => 'Author' } }, Year => { Groups => { 2 => 'Time' } }, ); %Image::ExifTool::ASF::Picture = ( PROCESS_PROC => \&ProcessPicture, GROUPS => { 2 => 'Image' }, 0 => { Name => 'PictureType', PrintConv => { # (Note: Duplicated in ID3, ASF and FLAC modules!) 0 => 'Other', 1 => '32x32 PNG Icon', 2 => 'Other Icon', 3 => 'Front Cover', 4 => 'Back Cover', 5 => 'Leaflet', 6 => 'Media', 7 => 'Lead Artist', 8 => 'Artist', 9 => 'Conductor', 10 => 'Band', 11 => 'Composer', 12 => 'Lyricist', 13 => 'Recording Studio or Location', 14 => 'Recording Session', 15 => 'Performance', 16 => 'Capture from Movie or Video', 17 => 'Bright(ly) Colored Fish', 18 => 'Illustration', 19 => 'Band Logo', 20 => 'Publisher Logo', }, }, 1 => 'PictureMIMEType', 2 => 'PictureDescription', 3 => { Name => 'Picture', Groups => { 2 => 'Preview' }, Binary => 1, }, ); %Image::ExifTool::ASF::FileProperties = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, 0 => { Name => 'FileID', Format => 'binary[16]', ValueConv => 'Image::ExifTool::ASF::GetGUID($val)', }, 16 => { Name => 'FileLength', Format => 'int64u' }, 24 => { Name => 'CreationDate', Format => 'int64u', Groups => { 2 => 'Time' }, # time is in 100 ns intervals since 0:00 UTC Jan 1, 1601 ValueConv => q{ # (89 leap years between 1601 and 1970) my $t = $val / 1e7 - (((1970-1601)*365+89)*24*3600); return Image::ExifTool::ConvertUnixTime($t) . 'Z'; }, PrintConv => '$self->ConvertDateTime($val)', }, 32 => { Name => 'DataPackets', Format => 'int64u' }, 40 => { Name => 'PlayDuration', Format => 'int64u', ValueConv => '$val / 1e7', PrintConv => 'ConvertDuration($val)', }, 48 => { Name => 'SendDuration', Format => 'int64u', ValueConv => '$val / 1e7', PrintConv => 'ConvertDuration($val)', }, 56 => { Name => 'Preroll', Format => 'int64u' }, 64 => { Name => 'Flags', Format => 'int32u' }, 68 => { Name => 'MinPacketSize',Format => 'int32u' }, 72 => { Name => 'MaxPacketSize',Format => 'int32u' }, 76 => { Name => 'MaxBitrate', Format => 'int32u', PrintConv => 'ConvertBitrate($val)' }, ); %Image::ExifTool::ASF::StreamProperties = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, NOTES => 'Tags with index 54 and greater are conditional based on the StreamType.', 0 => { Name => 'StreamType', Format => 'binary[16]', RawConv => sub { # set ASF_STREAM_TYPE for use in conditional tags my ($val, $et) = @_; $$et{ASF_STREAM_TYPE} = $streamType{GetGUID($val)} || ''; return $val; }, ValueConv => 'Image::ExifTool::ASF::GetGUID($val)', PrintConv => \%streamType, }, 16 => { Name => 'ErrorCorrectionType', Format => 'binary[16]', ValueConv => 'Image::ExifTool::ASF::GetGUID($val)', PrintConv => \%errorCorrection, }, 32 => { Name => 'TimeOffset', Format => 'int64u', ValueConv => '$val / 1e7', PrintConv => '"$val s"', }, 48 => { Name => 'StreamNumber', Format => 'int16u', PrintConv => '($val & 0x7f) . ($val & 0x8000 ? " (encrypted)" : "")', }, 54 => [ { Condition => '$self->{ASF_STREAM_TYPE} eq "Audio"', Name => 'AudioCodecID', Format => 'int16u', PrintHex => 1, SeparateTable => 'RIFF AudioEncoding', PrintConv => \%Image::ExifTool::RIFF::audioEncoding, }, { Condition => '$self->{ASF_STREAM_TYPE} =~ /^(Video|JFIF|Degradable JPEG)$/', Name => 'ImageWidth', Format => 'int32u', }, ], 56 => { Condition => '$self->{ASF_STREAM_TYPE} eq "Audio"', Name => 'AudioChannels', Format => 'int16u', }, 58 => [ { Condition => '$self->{ASF_STREAM_TYPE} eq "Audio"', Name => 'AudioSampleRate', Format => 'int32u', }, { Condition => '$self->{ASF_STREAM_TYPE} =~ /^(Video|JFIF|Degradable JPEG)$/', Name => 'ImageHeight', Format => 'int32u', }, ], ); %Image::ExifTool::ASF::HeaderExtension = ( PROCESS_PROC => \&ProcessASF, '14E6A5CB-C672-4332-8399-A96952065B5A' => 'ExtendedStreamProps', 'A08649CF-4775-4670-8A16-6E35357566CD' => 'AdvancedMutualExcl', 'D1465A40-5A79-4338-B71B-E36B8FD6C249' => 'GroupMutualExclusion', 'D4FED15B-88D3-454F-81F0-ED5C45999E24' => 'StreamPrioritization', 'A69609E6-517B-11D2-B6AF-00C04FD908E9' => 'BandwidthSharing', '7C4346A9-EFE0-4BFC-B229-393EDE415C85' => 'LanguageList', 'C5F8CBEA-5BAF-4877-8467-AA8C44FA4CCA' => { Name => 'Metadata', SubDirectory => { # have seen some tags same as ExtendedDescr, so use this table - PH TagTable => 'Image::ExifTool::ASF::ExtendedDescr', ProcessProc => \&ProcessMetadata, }, }, '44231C94-9498-49D1-A141-1D134E457054' => { Name => 'MetadataLibrary', SubDirectory => { # have seen some tags same as ExtendedDescr, so use this table - PH TagTable => 'Image::ExifTool::ASF::ExtendedDescr', ProcessProc => \&ProcessMetadata, }, }, 'D6E229DF-35DA-11D1-9034-00A0C90349BE' => 'IndexParameters', '6B203BAD-3F11-48E4-ACA8-D7613DE2CFA7' => 'TimecodeIndexParms', '75B22630-668E-11CF-A6D9-00AA0062CE6C' => 'Compatibility', '43058533-6981-49E6-9B74-AD12CB86D58C' => 'AdvancedContentEncryption', 'ABD3D211-A9BA-11cf-8EE6-00C00C205365' => 'Reserved1', ); %Image::ExifTool::ASF::CodecList = ( PROCESS_PROC => \&ProcessCodecList, VideoCodecName => {}, VideoCodecDescription => {}, AudioCodecName => {}, AudioCodecDescription => {}, OtherCodecName => {}, OtherCodecDescription => {}, ); #------------------------------------------------------------------------------ # Generate GUID from 16 bytes of binary data # Inputs: 0) data # Returns: GUID sub GetGUID($) { # must do some byte swapping my $val = shift; return $val unless length($val) == 16; my $buff = unpack('H*',pack('NnnNN',unpack('VvvNN',$val))); $buff =~ s/(.{8})(.{4})(.{4})(.{4})/$1-$2-$3-$4-/; return uc($buff); } #------------------------------------------------------------------------------ # Process ASF content description # Inputs: 0) ExifTool object reference, 1) dirInfo ref, 2) tag table reference # Returns: 1 on success sub ProcessContentDescription($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirLen = $$dirInfo{DirLen}; return 0 if $dirLen < 10; my @len = unpack('v5', $$dataPt); my $pos = 10; my $tag; foreach $tag (0..4) { my $len = shift @len; next unless $len; return 0 if $pos + $len > $dirLen; my $val = $et->Decode(substr($$dataPt,$pos,$len),'UCS2','II'); $et->HandleTag($tagTablePtr, $tag, $val); $pos += $len; } return 1; } #------------------------------------------------------------------------------ # Process ASF content branding # Inputs: 0) ExifTool object reference, 1) dirInfo ref, 2) tag table reference # Returns: 1 on success sub ProcessContentBranding($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirLen = $$dirInfo{DirLen}; return 0 if $dirLen < 40; # decode banner image type $et->HandleTag($tagTablePtr, 0, unpack('V', $$dataPt)); # decode banner image, banner URL and copyright URL my $pos = 4; my $tag; foreach $tag (1..3) { return 0 if $pos + 4 > $dirLen; my $size = unpack("x${pos}V", $$dataPt); $pos += 4; next unless $size; return 0 if $pos + $size > $dirLen; my $val = substr($$dataPt, $pos, $size); $et->HandleTag($tagTablePtr, $tag, $val); $pos += $size; } return 1; } #------------------------------------------------------------------------------ # Read ASF value # Inputs: 0) ExifTool object ref, 1) data reference, 2) value offset, # 3) format number, 4) size # Returns: converted value sub ReadASF($$$$$) { my ($et, $dataPt, $pos, $format, $size) = @_; my @vals; if ($format == 0) { # unicode string $vals[0] = $et->Decode(substr($$dataPt,$pos,$size),'UCS2','II'); } elsif ($format == 2) { # 4-byte boolean @vals = ReadValue($dataPt, $pos, 'int32u', undef, $size); foreach (@vals) { $_ = $_ ? 'True' : 'False'; } } elsif ($format == 3) { # int32u @vals = ReadValue($dataPt, $pos, 'int32u', undef, $size); } elsif ($format == 4) { # int64u @vals = ReadValue($dataPt, $pos, 'int64u', undef, $size); } elsif ($format == 5) { # int16u @vals = ReadValue($dataPt, $pos, 'int16u', undef, $size); } else { # any other format (including 1, byte array): return raw data $vals[0] = substr($$dataPt,$pos,$size); } return join ' ', @vals; } #------------------------------------------------------------------------------ # Process extended content description # Inputs: 0) ExifTool object reference, 1) dirInfo ref, 2) tag table reference # Returns: 1 on success sub ProcessExtendedContentDescription($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirLen = $$dirInfo{DirLen}; return 0 if $dirLen < 2; my $count = Get16u($dataPt, 0); $et->VerboseDir($dirInfo, $count); my $pos = 2; my $i; for ($i=0; $i<$count; ++$i) { return 0 if $pos + 6 > $dirLen; my $nameLen = unpack("x${pos}v", $$dataPt); $pos += 2; return 0 if $pos + $nameLen + 4 > $dirLen; my $tag = Image::ExifTool::Decode(undef,substr($$dataPt,$pos,$nameLen),'UCS2','II','Latin'); $tag =~ s/^WM\///; # remove leading "WM/" $pos += $nameLen; my ($dType, $dLen) = unpack("x${pos}v2", $$dataPt); $pos += 4; return 0 if $pos + $dLen > $dirLen; my $val = ReadASF($et,$dataPt,$pos,$dType,$dLen); $et->HandleTag($tagTablePtr, $tag, $val, DataPt => $dataPt, Start => $pos, Size => $dLen, ); $pos += $dLen; } return 1; } #------------------------------------------------------------------------------ # Process ASF metadata library (similar to ProcessExtendedContentDescription above) # Inputs: 0) ExifTool object reference, 1) dirInfo ref, 2) tag table reference # Returns: 1 on success sub ProcessMetadata($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirLen = $$dirInfo{DirLen}; return 0 if $dirLen < 2; my $count = Get16u($dataPt, 0); $et->VerboseDir($dirInfo, $count); my $pos = 2; my $i; for ($i=0; $i<$count; ++$i) { return 0 if $pos + 12 > $dirLen; my ($index, $stream, $nameLen, $dType, $dLen) = unpack("x${pos}v4V", $$dataPt); $pos += 12; return 0 if $pos + $nameLen + $dLen > $dirLen; my $tag = Image::ExifTool::Decode(undef,substr($$dataPt,$pos,$nameLen),'UCS2','II','Latin'); $tag =~ s/^WM\///; # remove leading "WM/" $pos += $nameLen; my $val = ReadASF($et,$dataPt,$pos,$dType,$dLen); $et->HandleTag($tagTablePtr, $tag, $val, DataPt => $dataPt, Start => $pos, Size => $dLen, ); $pos += $dLen; } return 1; } #------------------------------------------------------------------------------ # Process WM/Picture preview # Inputs: 0) ExifTool object reference, 1) dirInfo ref, 2) tag table reference # Returns: 1 on success sub ProcessPicture($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart}; my $dirLen = $$dirInfo{DirLen}; return 0 unless $dirLen > 9; # extract picture type and length my ($type, $picLen) = unpack("x${dirStart}CV", $$dataPt); $et->VerboseDir('Picture'); $et->HandleTag($tagTablePtr, 0, $type); # extract mime type and description strings (null-terminated unicode strings) my $n = $dirLen - 5 - $picLen; return 0 if $n & 0x01 or $n < 4; my $str = substr($$dataPt, $dirStart+5, $n); if ($str =~ /^((?:..)*?)\0\0((?:..)*?)\0\0/s) { my ($mime, $desc) = ($1, $2); $et->HandleTag($tagTablePtr, 1, $et->Decode($mime,'UCS2','II')); $et->HandleTag($tagTablePtr, 2, $et->Decode($desc,'UCS2','II')) if length $desc; } $et->HandleTag($tagTablePtr, 3, substr($$dataPt, $dirStart+5+$n, $picLen)); return 1; } #------------------------------------------------------------------------------ # Process codec list # Inputs: 0) ExifTool object reference, 1) dirInfo ref, 2) tag table reference # Returns: 1 on success sub ProcessCodecList($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirLen = $$dirInfo{DirLen}; return 0 if $dirLen < 20; my $count = Get32u($dataPt, 16); $et->VerboseDir($dirInfo, $count); my $pos = 20; my $i; my %codecType = ( 1 => 'Video', 2 => 'Audio' ); for ($i=0; $i<$count; ++$i) { return 0 if $pos + 8 > $dirLen; my $type = ($codecType{Get16u($dataPt, $pos)} || 'Other') . 'Codec'; # stupid Windows programmers: these lengths are in characters (others are in bytes) my $nameLen = Get16u($dataPt, $pos + 2) * 2; $pos += 4; return 0 if $pos + $nameLen + 2 > $dirLen; my $name = $et->Decode(substr($$dataPt,$pos,$nameLen),'UCS2','II'); $et->HandleTag($tagTablePtr, "${type}Name", $name); my $descLen = Get16u($dataPt, $pos + $nameLen) * 2; $pos += $nameLen + 2; return 0 if $pos + $descLen + 2 > $dirLen; my $desc = $et->Decode(substr($$dataPt,$pos,$descLen),'UCS2','II'); $et->HandleTag($tagTablePtr, "${type}Description", $desc); my $infoLen = Get16u($dataPt, $pos + $descLen); $pos += $descLen + 2 + $infoLen; } return 1; } #------------------------------------------------------------------------------ # Extract information from a ASF file # Inputs: 0) ExifTool object reference, 1) dirInfo reference, 2) tag table ref # Returns: 1 on success, 0 if this wasn't a valid ASF file sub ProcessASF($$;$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $raf = $$dirInfo{RAF}; my $verbose = $et->Options('Verbose'); my $rtnVal = 0; my $pos = 0; my ($buff, $err, @parentTable, @childEnd); for (;;) { last unless $raf->Read($buff, 24) == 24; $pos += 24; my $tag = GetGUID(substr($buff,0,16)); unless ($tagTablePtr) { # verify this is a valid ASF file last unless $tag eq '75B22630-668E-11CF-A6D9-00AA0062CE6C'; my $fileType = $$et{FILE_EXT}; $fileType = 'ASF' unless $fileType and $fileType =~ /^(ASF|WMV|WMA|DIVX)$/; $et->SetFileType($fileType); SetByteOrder('II'); $tagTablePtr = GetTagTable('Image::ExifTool::ASF::Main'); $rtnVal = 1; } my $size = Image::ExifTool::Get64u(\$buff, 16) - 24; if ($size < 0) { $err = 'Invalid ASF object size'; last; } if ($size > 0x7fffffff) { if ($size > 0x7fffffff * 4294967296) { $err = 'Invalid ASF object size'; } elsif ($et->Options('LargeFileSupport')) { if ($raf->Seek($size, 1)) { $et->VPrint(0, " Skipped large ASF object ($size bytes)\n"); $pos += $size; next; } $err = 'Error seeking past large ASF object'; } else { $err = 'Large ASF objects not supported (LargeFileSupport not set)'; } last; } # go back to parent tag table if done with previous children if (@childEnd and $pos >= $childEnd[-1]) { pop @childEnd; $tagTablePtr = pop @parentTable; $$et{INDENT} = substr($$et{INDENT},0,-2); } my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); $verbose and $et->VerboseInfo($tag, $tagInfo); if ($tagInfo) { my $subdir = $$tagInfo{SubDirectory}; if ($subdir) { my $subTable = GetTagTable($$subdir{TagTable}); if ($$subTable{PROCESS_PROC} eq \&ProcessASF) { if (defined $$subdir{Size}) { my $s = $$subdir{Size}; if ($verbose > 2) { $raf->Read($buff, $s) == $s or $err = 'Truncated file', last; $et->VerboseDump(\$buff); } elsif (not $raf->Seek($s, 1)) { $err = 'Seek error'; last; } # continue processing linearly using subTable push @parentTable, $tagTablePtr; push @childEnd, $pos + $size; $tagTablePtr = $subTable; $pos += $$subdir{Size}; if ($verbose) { $$et{INDENT} .= '| '; $et->VerboseDir($$tagInfo{Name}); } next; } } elsif ($raf->Read($buff, $size) == $size) { my %subdirInfo = ( DataPt => \$buff, DirStart => 0, DirLen => $size, DirName => $$tagInfo{Name}, ); $et->VerboseDump(\$buff) if $verbose > 2; unless ($et->ProcessDirectory(\%subdirInfo, $subTable, $$subdir{ProcessProc})) { $et->Warn("Error processing $$tagInfo{Name} directory"); } $pos += $size; next; } else { $err = 'Unexpected end of file'; last; } } } if ($verbose > 2) { $raf->Read($buff, $size) == $size or $err = 'Truncated file', last; $et->VerboseDump(\$buff); } elsif (not $raf->Seek($size, 1)) { # skip the block $err = 'Seek error'; last; } $pos += $size; } $err and $et->Warn($err); return $rtnVal; } 1; # end __END__ =head1 NAME Image::ExifTool::ASF - Read ASF/WMA/WMV meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to extract information from Microsoft Advanced Systems Format (ASF) files, including Windows Media Audio (WMA) and Windows Media Video (WMV) files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.microsoft.com/windows/windowsmedia/format/asfspec.aspx> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/ASF Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Audible.pm��������������������������������������������������000644 �000765 �000024 �00000027024 12642461263 021622� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Audible.pm # # Description: Read metadata from Audible audio books # # Revisions: 2015/04/05 - P. Harvey Created # # References: 1) https://github.com/jteeuwen/audible # 2) https://code.google.com/p/pyaudibletags/ # 3) http://wiki.multimedia.cx/index.php?title=Audible_Audio #------------------------------------------------------------------------------ package Image::ExifTool::Audible; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.02'; sub ProcessAudible_meta($$$); sub ProcessAudible_cvrx($$$); %Image::ExifTool::Audible::Main = ( GROUPS => { 2 => 'Audio' }, NOTES => q{ ExifTool will extract any information found in the metadata dictionary of Audible .AA files, even if not listed in the table below. }, # tags found in the metadata dictionary (chunk 2) pubdate => { Name => 'PublishDate', Groups => { 2 => 'Time' } }, pub_date_start => { Name => 'PublishDateStart', Groups => { 2 => 'Time' } }, author => { Name => 'Author', Groups => { 2 => 'Author' } }, copyright => { Name => 'Copyright', Groups => { 2 => 'Author' } }, # also seen (ref PH): # product_id, parent_id, title, provider, narrator, price, description, # long_description, short_title, is_aggregation, title_id, codec, HeaderSeed, # EncryptedBlocks, HeaderKey, license_list, CPUType, license_count, <12 hex digits>, # parent_short_title, parent_title, aggregation_id, short_description, user_alias # information extracted from other chunks _chapter_count => { Name => 'ChapterCount' }, # from chunk 6 _cover_art => { # from chunk 11 Name => 'CoverArt', Groups => { 2 => 'Preview' }, Binary => 1, }, ); # 'tags' atoms observed in Audible .m4b audio books (ref PH) %Image::ExifTool::Audible::tags = ( GROUPS => { 0 => 'QuickTime', 2 => 'Audio' }, NOTES => 'Information found in "tags" atom of Audible M4B audio books.', meta => { Name => 'Audible_meta', SubDirectory => { TagTable => 'Image::ExifTool::Audible::meta' }, }, cvrx => { Name => 'Audible_cvrx', SubDirectory => { TagTable => 'Image::ExifTool::Audible::cvrx' }, }, tseg => { Name => 'Audible_tseg', SubDirectory => { TagTable => 'Image::ExifTool::Audible::tseg' }, }, ); # 'meta' information observed in Audible .m4b audio books (ref PH) %Image::ExifTool::Audible::meta = ( PROCESS_PROC => \&ProcessAudible_meta, GROUPS => { 0 => 'QuickTime', 2 => 'Audio' }, NOTES => 'Information found in Audible M4B "meta" atom.', Album => 'Album', ALBUMARTIST => { Name => 'AlbumArtist', Groups => { 2 => 'Author' } }, Artist => { Name => 'Artist', Groups => { 2 => 'Author' } }, Comment => 'Comment', Genre => 'Genre', itunesmediatype => { Name => 'iTunesMediaType', Description => 'iTunes Media Type' }, SUBTITLE => 'Subtitle', Title => 'Title', TOOL => 'CreatorTool', Year => { Name => 'Year', Groups => { 2 => 'Time' } }, track => 'ChapterName', # (found in 'meta' of 'tseg' atom) ); # 'cvrx' information observed in Audible .m4b audio books (ref PH) %Image::ExifTool::Audible::cvrx = ( PROCESS_PROC => \&ProcessAudible_cvrx, GROUPS => { 0 => 'QuickTime', 2 => 'Audio' }, NOTES => 'Audible cover art information in M4B audio books.', VARS => { NO_ID => 1 }, CoverArtType => 'CoverArtType', CoverArt => { Name => 'CoverArt', Groups => { 2 => 'Preview' }, Binary => 1, }, ); # 'tseg' information observed in Audible .m4b audio books (ref PH) %Image::ExifTool::Audible::tseg = ( GROUPS => { 0 => 'QuickTime', 2 => 'Audio' }, tshd => { Name => 'ChapterNumber', Format => 'int32u', ValueConv => '$val + 1', # start counting from 1 }, meta => { Name => 'Audible_meta2', SubDirectory => { TagTable => 'Image::ExifTool::Audible::meta' }, }, ); #------------------------------------------------------------------------------ # Process Audible 'meta' tags from M4B files (ref PH) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessAudible_meta($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos}; my $dirLen = length $$dataPt; return 0 if $dirLen < 4; my $num = Get32u($dataPt, 0); $et->VerboseDir('Audible_meta', $num); my $pos = 4; my $index; for ($index=0; $index<$num; ++$index) { last if $pos + 3 > $dirLen; my $unk = Get8u($dataPt, $pos); # ? (0x80 or 0x00) last unless $unk eq 0x80 or $unk eq 0x00; my $len = Get16u($dataPt, $pos + 1); # tag length $pos += 3; last if $pos + $len + 6 > $dirLen or not $len; my $tag = substr($$dataPt, $pos, $len); # tag ID my $ver = Get16u($dataPt, $pos + $len); # version? last unless $ver eq 0x0001; my $size = Get32u($dataPt, $pos + $len + 2);# data size $pos += $len + 6; last if $pos + $size > $dirLen; my $val = $et->Decode(substr($$dataPt, $pos, $size), 'UTF8'); unless ($$tagTablePtr{$tag}) { my $name = Image::ExifTool::MakeTagName(($tag =~ /[a-z]/) ? $tag : lc($tag)); AddTagToTable($tagTablePtr, $tag, { Name => $name }); } $et->HandleTag($tagTablePtr, $tag, $val, DataPt => $dataPt, DataPos => $dataPos, Start => $pos, Size => $size, Index => $index, ); $pos += $size; } return 1; } #------------------------------------------------------------------------------ # Process Audible 'cvrx' cover art atom from M4B files (ref PH) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessAudible_cvrx($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos}; my $dirLen = length $$dataPt; return 0 if 0x0a > $dirLen; my $len = Get16u($dataPt, 0x08); return 0 if 0x0a + $len + 6 > $dirLen; my $size = Get32u($dataPt, 0x0a + $len + 2); return 0 if 0x0a + $len + 6 + $size > $dirLen; $et->VerboseDir('Audible_cvrx', undef, $dirLen); $et->HandleTag($tagTablePtr, 'CoverArtType', undef, DataPt => $dataPt, DataPos => $dataPos, Start => 0x0a, Size => $len, ); $et->HandleTag($tagTablePtr, 'CoverArt', undef, DataPt => $dataPt, DataPos => $dataPos, Start => 0x0a + $len + 6, Size => $size, ); return 1; } #------------------------------------------------------------------------------ # Read information from an Audible .AA file # Inputs: 0) ExifTool ref, 1) dirInfo ref # Returns: 1 on success, 0 if this wasn't a valid AA file sub ProcessAA($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $toc, $entry, $i); # check magic number return 0 unless $raf->Read($buff, 16) == 16 and $buff=~/^.{4}\x57\x90\x75\x36/s; # check file size if (defined $$et{VALUE}{FileSize}) { # first 4 bytes of the file should be the filesize unpack('N', $buff) == $$et{VALUE}{FileSize} or return 0; } $et->SetFileType(); SetByteOrder('MM'); my $bytes = 12 * Get32u(\$buff, 8); # table of contents size in bytes $bytes > 0xc00 and $et->Warn('Invalid TOC'), return 1; # read the table of contents $raf->Read($toc, $bytes) == $bytes or $et->Warn('Truncated TOC'), return 1; my $tagTablePtr = GetTagTable('Image::ExifTool::Audible::Main'); # parse table of contents (in $toc) for ($entry=0; $entry<$bytes; $entry+=12) { my $type = Get32u(\$toc, $entry); next unless $type == 2 or $type == 6 or $type == 11; my $offset = Get32u(\$toc, $entry + 4); my $length = Get32u(\$toc, $entry + 8) or next; $raf->Seek($offset, 0) or $et->Warn("Chunk $type seek error"), last; if ($type == 6) { # offset table next if $length < 4 or $raf->Read($buff, 4) != 4; # only read the chapter count $et->HandleTag($tagTablePtr, '_chapter_count', Get32u(\$buff, 0)); next; } # read the chunk $length > 100000000 and $et->Warn("Chunk $type too big"), next; $raf->Read($buff, $length) == $length or $et->Warn("Chunk $type read error"), last; if ($type == 11) { # cover art next if $length < 8; my $len = Get32u(\$buff, 0); my $off = Get32u(\$buff, 4); next if $off < $offset + 8 or $off - $offset + $len > $length; $et->HandleTag($tagTablePtr, '_cover_art', substr($buff, $off-$offset, $len)); next; } # parse metadata dictionary (in $buff) $length < 4 and $et->Warn('Bad dictionary'), next; my $num = Get32u(\$buff, 0); $num > 0x200 and $et->Warn('Bad dictionary count'), next; my $pos = 4; # dictionary starts immediately after count require Image::ExifTool::HTML; # (for UnescapeHTML) $et->VerboseDir('Audible Metadata', $num); for ($i=0; $i<$num; ++$i) { my $tagPos = $pos + 9; # position of tag string $tagPos > $length and $et->Warn('Truncated dictionary'), last; # (1 unknown byte ignored at start of each dictionary entry) my $tagLen = Get32u(\$buff, $pos + 1); # tag string length my $valLen = Get32u(\$buff, $pos + 5); # value string length my $valPos = $tagPos + $tagLen; # position of value string my $nxtPos = $valPos + $valLen; # position of next entry $nxtPos > $length and $et->Warn('Bad dictionary entry'), last; my $tag = substr($buff, $tagPos, $tagLen); my $val = substr($buff, $valPos, $valLen); unless ($$tagTablePtr{$tag}) { my $name = Image::ExifTool::MakeTagName($tag); $name =~ s/_(.)/\U$1/g; # change from underscore-separated to mixed case AddTagToTable($tagTablePtr, $tag, { Name => $name }); } # unescape HTML character references and convert from UTF-8 $val = $et->Decode(Image::ExifTool::HTML::UnescapeHTML($val), 'UTF8'); $et->HandleTag($tagTablePtr, $tag, $val, DataPos => $offset, DataPt => \$buff, Start => $valPos, Size => $valLen, Index => $i, ); $pos = $nxtPos; # step to next dictionary entry } } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::Audible - Read meta information from Audible audio books =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read meta information from Audible audio books. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<https://github.com/jteeuwen/audible> =item L<https://code.google.com/p/pyaudibletags/> =item L<http://wiki.multimedia.cx/index.php?title=Audible_Audio> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Audible Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/BigTIFF.pm��������������������������������������������������000644 �000765 �000024 �00000025166 12642461265 021436� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: BigTIFF.pm # # Description: Read Big TIFF meta information # # Revisions: 07/03/2007 - P. Harvey Created # # References: 1) http://www.awaresystems.be/imaging/tiff/bigtiff.html #------------------------------------------------------------------------------ package Image::ExifTool::BigTIFF; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.06'; my $maxOffset = 0x7fffffff; # currently supported maximum data offset/size #------------------------------------------------------------------------------ # Process Big IFD directory # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, otherwise returns 0 and sets a Warning sub ProcessBigIFD($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $raf = $$dirInfo{RAF}; my $verbose = $$et{OPTIONS}{Verbose}; my $htmlDump = $$et{HTML_DUMP}; my $dirName = $$dirInfo{DirName}; my $dirStart = $$dirInfo{DirStart}; $verbose = -1 if $htmlDump; # mix htmlDump into verbose so we can test for both at once # loop through IFD chain for (;;) { if ($dirStart > $maxOffset and not $et->Options('LargeFileSupport')) { $et->Warn('Huge offsets not supported (LargeFileSupport not set)'); last; } unless ($raf->Seek($dirStart, 0)) { $et->Warn("Bad $dirName offset"); return 0; } my ($dirBuff, $index); unless ($raf->Read($dirBuff, 8) == 8) { $et->Warn("Truncated $dirName count"); return 0; } my $numEntries = Image::ExifTool::Get64u(\$dirBuff, 0); $verbose > 0 and $et->VerboseDir($dirName, $numEntries); my $bsize = $numEntries * 20; if ($bsize > $maxOffset) { $et->Warn('Huge directory counts not yet supported'); last; } my $bufPos = $raf->Tell(); unless ($raf->Read($dirBuff, $bsize) == $bsize) { $et->Warn("Truncated $dirName directory"); return 0; } my $nextIFD; $raf->Read($nextIFD, 8) == 8 or undef $nextIFD; # try to read next IFD pointer if ($htmlDump) { $et->HDump($bufPos-8, 8, "$dirName entries", "Entry count: $numEntries"); if (defined $nextIFD) { my $tip = sprintf("Offset: 0x%.8x", Image::ExifTool::Get64u(\$nextIFD, 0)); $et->HDump($bufPos + 20 * $numEntries, 8, "Next IFD", $tip, 0); } } # loop through all entries in this BigTIFF IFD for ($index=0; $index<$numEntries; ++$index) { my $entry = 20 * $index; my $tagID = Get16u(\$dirBuff, $entry); my $format = Get16u(\$dirBuff, $entry+2); my $count = Image::ExifTool::Get64u(\$dirBuff, $entry+4); my $formatSize = $Image::ExifTool::Exif::formatSize[$format]; unless (defined $formatSize) { $et->HDump($bufPos+$entry,20,"[invalid IFD entry]", "Bad format value: $format", 1); # warn unless the IFD was just padded with zeros $et->Warn(sprintf("Unknown format ($format) for $dirName tag 0x%x",$tagID)); return 0; # assume corrupted IFD } my $formatStr = $Image::ExifTool::Exif::formatName[$format]; my $size = $count * $formatSize; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tagID); next unless defined $tagInfo or $verbose; my $valuePtr = $entry + 12; my ($valBuff, $valBase, $rational); if ($size > 8) { if ($size > $maxOffset) { $et->Warn("Can't handle $dirName entry $index (huge size)"); next; } $valuePtr = Image::ExifTool::Get64u(\$dirBuff, $valuePtr); if ($valuePtr > $maxOffset and not $et->Options('LargeFileSupport')) { $et->Warn("Can't handle $dirName entry $index (LargeFileSupport not set)"); next; } unless ($raf->Seek($valuePtr, 0) and $raf->Read($valBuff, $size) == $size) { $et->Warn("Error reading $dirName entry $index"); next; } $valBase = 0; } else { $valBuff = substr($dirBuff, $valuePtr, $size); $valBase = $bufPos; } if (defined $tagInfo and not $tagInfo) { # GetTagInfo() required the value for a Condition $tagInfo = $et->GetTagInfo($tagTablePtr, $tagID, \$valBuff); } my $val = ReadValue(\$valBuff, 0, $formatStr, $count, $size, \$rational); if ($htmlDump) { my $tval = $val; # show numerator/denominator separately for rational numbers $tval .= " ($rational)" if defined $rational; my ($tagName, $colName); if ($tagID == 0x927c and $dirName eq 'ExifIFD') { $tagName = 'MakerNotes'; } elsif ($tagInfo) { $tagName = $$tagInfo{Name}; } else { $tagName = sprintf("Tag 0x%.4x",$tagID); } my $dname = sprintf("$dirName-%.2d", $index); # build our tool tip my $tip = sprintf("Tag ID: 0x%.4x\n", $tagID) . "Format: $formatStr\[$count]\nSize: $size bytes\n"; if ($size > 8) { $tip .= sprintf("Value offset: 0x%.8x\n", $valuePtr); $colName = "<span class=H>$tagName</span>"; } else { $colName = $tagName; } $tval = substr($tval,0,28) . '[...]' if length($tval) > 32; if ($formatStr =~ /^(string|undef|binary)/) { # translate non-printable characters $tval =~ tr/\x00-\x1f\x7f-\xff/./; } elsif ($tagInfo and Image::ExifTool::IsInt($tval)) { if ($$tagInfo{IsOffset}) { $tval = sprintf('0x%.4x', $tval); } elsif ($$tagInfo{PrintHex}) { $tval = sprintf('0x%x', $tval); } } $tip .= "Value: $tval"; $et->HDump($entry+$bufPos, 20, "$dname $colName", $tip, 1); if ($size > 8) { # add value data block my $flg = ($tagInfo and $$tagInfo{SubDirectory} and $$tagInfo{MakerNotes}) ? 4 : 0; $et->HDump($valuePtr,$size,"$tagName value",'SAME', $flg); } } if ($tagInfo and $$tagInfo{SubIFD}) { # process all SubIFD's as BigTIFF $verbose > 0 and $et->VerboseInfo($tagID, $tagInfo, Table => $tagTablePtr, Index => $index, Value => $val, DataPt => \$valBuff, DataPos => $valBase + $valuePtr, Start => 0, Size => $size, Format => $formatStr, Count => $count, ); my @offsets = split ' ', $val; my $i; for ($i=0; $i<scalar(@offsets); ++$i) { my $subdirName = $$tagInfo{Name}; $subdirName .= $i if $i; my %subdirInfo = ( RAF => $raf, DataPos => 0, DirStart => $offsets[$i], DirName => $subdirName, Parent => $dirInfo, ); $et->ProcessDirectory(\%subdirInfo, $tagTablePtr, \&ProcessBigIFD); } } else { my $tagKey = $et->HandleTag($tagTablePtr, $tagID, $val, Index => $index, DataPt => \$valBuff, DataPos => $valBase + $valuePtr, Start => 0, Size => $size, Format => $formatStr, TagInfo => $tagInfo, RAF => $raf, ); $tagKey and $et->SetGroup($tagKey, $dirName); } } last unless $dirName =~ /^(IFD|SubIFD)(\d*)$/; $dirName = $1 . (($2 || 0) + 1); defined $nextIFD or $et->Warn("Bad $dirName pointer"), return 0; $dirStart = Image::ExifTool::Get64u(\$nextIFD, 0); $dirStart or last; } return 1; } #------------------------------------------------------------------------------ # Extract meta information from a BigTIFF image # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid BigTIFF image sub ProcessBTF($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $buff; return 0 unless $raf->Read($buff, 16) == 16; return 0 unless $buff =~ /^(MM\0\x2b\0\x08\0\0|II\x2b\0\x08\0\0\0)/; if ($$dirInfo{OutFile}) { $et->Error('ExifTool does not support writing of BigTIFF images'); return 1; } $et->SetFileType('BTF'); # set the FileType tag SetByteOrder(substr($buff, 0, 2)); my $offset = Image::ExifTool::Get64u(\$buff, 8); if ($$et{HTML_DUMP}) { my $o = (GetByteOrder() eq 'II') ? 'Little' : 'Big'; $et->HDump(0, 8, "BigTIFF header", "Byte order: $o endian", 0); $et->HDump(8, 8, "IFD0 pointer", sprintf("Offset: 0x%.8x",$offset), 0); } my %dirInfo = ( RAF => $raf, DataPos => 0, DirStart => $offset, DirName => 'IFD0', Parent => 'BigTIFF', ); my $tagTablePtr = GetTagTable('Image::ExifTool::Exif::Main'); $et->ProcessDirectory(\%dirInfo, $tagTablePtr, \&ProcessBigIFD); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::BigTIFF - Read Big TIFF meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to read meta information in BigTIFF images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.awaresystems.be/imaging/tiff/bigtiff.html> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/EXIF Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/BMP.pm������������������������������������������������������000644 �000765 �000024 �00000011664 12642461264 020677� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: BMP.pm # # Description: Read BMP meta information # # Revisions: 07/16/2005 - P. Harvey Created # # References: 1) http://www.fortunecity.com/skyscraper/windows/364/bmpffrmt.html # 2) http://www.fourcc.org/rgb.php #------------------------------------------------------------------------------ package Image::ExifTool::BMP; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.08'; # BMP chunks %Image::ExifTool::BMP::Main = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' }, NOTES => q{ There really isn't much meta information in a BMP file as such, just a bit of image related information. }, # 0 => size of bitmap structure: # 12 bytes => 'OS/2 V1', # 40 bytes => 'Windows V3', # 64 bytes => 'OS/2 V2', # 68 bytes => some bitmap structure in AVI videos # 108 bytes => 'Windows V4', # 124 bytes => 'Windows V5', 4 => { Name => 'ImageWidth', Format => 'int32u', }, 8 => { Name => 'ImageHeight', Format => 'int32s', # (negative when stored in top-to-bottom order) ValueConv => 'abs($val)', }, 12 => { Name => 'Planes', Format => 'int16u', }, 14 => { Name => 'BitDepth', Format => 'int16u', }, 16 => { Name => 'Compression', Format => 'int32u', # (formatted as string[4] for some values in AVI images) ValueConv => '$val > 256 ? unpack("A4",pack("V",$val)) : $val', PrintConv => { 0 => 'None', 1 => '8-Bit RLE', 2 => '4-Bit RLE', 3 => 'Bitfields', 4 => 'JPEG', #2 5 => 'PNG', #2 # pass through ASCII video compression codec ID's OTHER => sub { my $val = shift; # convert non-ascii characters $val =~ s/([\0-\x1f\x7f-\xff])/sprintf('\\x%.2x',ord $1)/eg; return $val; }, }, }, 20 => { Name => 'ImageLength', Format => 'int32u', }, 24 => { Name => 'PixelsPerMeterX', Format => 'int32u', }, 28 => { Name => 'PixelsPerMeterY', Format => 'int32u', }, 32 => { Name => 'NumColors', Format => 'int32u', PrintConv => '$val ? $val : "Use BitDepth"', }, 36 => { Name => 'NumImportantColors', Format => 'int32u', PrintConv => '$val ? $val : "All"', }, ); # OS/2 12-byte bitmap header (ref http://www.fileformat.info/format/bmp/egff.htm) %Image::ExifTool::BMP::OS2 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' }, NOTES => 'Information extracted from OS/2-format BMP images.', # 0 => size of bitmap structure (12) 4 => { Name => 'ImageWidth', Format => 'int16u' }, 6 => { Name => 'ImageHeight', Format => 'int16u' }, 8 => { Name => 'Planes', Format => 'int16u' }, 10 => { Name => 'BitDepth', Format => 'int16u' }, ); #------------------------------------------------------------------------------ # Extract EXIF information from a BMP image # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid BMP file sub ProcessBMP($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $tagTablePtr); # verify this is a valid BMP file return 0 unless $raf->Read($buff, 18) == 18; return 0 unless $buff =~ /^BM/; SetByteOrder('II'); my $len = Get32u(\$buff, 14); return 0 unless $len == 12 or $len >= 40; return 0 unless $raf->Seek(-4, 1) and $raf->Read($buff, $len) == $len; $et->SetFileType(); # set the FileType tag my %dirInfo = ( DataPt => \$buff, DirStart => 0, DirLen => length($buff), ); if ($len == 12) { # old OS/2 format BMP $tagTablePtr = GetTagTable('Image::ExifTool::BMP::OS2'); } else { $tagTablePtr = GetTagTable('Image::ExifTool::BMP::Main'); } $et->ProcessDirectory(\%dirInfo, $tagTablePtr); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::BMP - Read BMP meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read BMP (Windows Bitmap) images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.fortunecity.com/skyscraper/windows/364/bmpffrmt.html> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/BMP Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/BuildTagLookup.pm�������������������������������������������000644 �000765 �000024 �00000332203 12642461265 023142� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: BuildTagLookup.pm # # Description: Utility to build tag lookup tables in Image::ExifTool::TagLookup.pm # # Revisions: 12/31/2004 - P. Harvey Created # 02/15/2005 - PH Added ability to generate TagNames documentation # # Notes: Documentation for the tag tables may either be placed in the # %docs hash below or in a NOTES entry in the table itself, and # individual tags may have their own Notes entry. #------------------------------------------------------------------------------ package Image::ExifTool::BuildTagLookup; use strict; require Exporter; BEGIN { # prevent ExifTool from loading the user config file $Image::ExifTool::configFile = ''; $Image::ExifTool::debug = 1; # enabled debug messages } use vars qw($VERSION @ISA); use Image::ExifTool qw(:Utils :Vars); use Image::ExifTool::Exif; use Image::ExifTool::Shortcuts; use Image::ExifTool::HTML qw(EscapeHTML); use Image::ExifTool::IPTC; use Image::ExifTool::XMP; use Image::ExifTool::Canon; use Image::ExifTool::Nikon; $VERSION = '2.93'; @ISA = qw(Exporter); sub NumbersFirst($$); sub SortedTagTablekeys($); # global variables to control sorting order of table entries my $numbersFirst = 1; # set to -1 to sort numbers last, or 2 to put negative numbers last my $caseInsensitive; # flag to ignore case when sorting tag names # list of all tables in plug-in modules my @pluginTables = ('Image::ExifTool::MWG::Composite'); # colors for html pages my $noteFont = "<span class=n>"; my $noteFontSmall = "<span class='n s'>"; my $docType = q{<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> }; my $homePage = 'http://owl.phy.queensu.ca/~phil/exiftool'; # tweak the ordering of tables in the documentation my %tweakOrder = ( # this => comes after this # ------- ----------------- JPEG => '-', # JPEG comes first IPTC => 'Exif', # put IPTC after EXIF, GPS => 'XMP', # etc... Composite => 'Extra', GeoTiff => 'GPS', CanonVRD=> 'CanonCustom', FLIR => 'Casio', FujiFilm => 'FLIR', Kodak => 'JVC', 'Kodak::IFD' => 'Kodak::Unknown', 'Kodak::TextualInfo' => 'Kodak::IFD', 'Kodak::Processing' => 'Kodak::TextualInfo', Leaf => 'Kodak', Minolta => 'Leaf', Motorola => 'Minolta', Nikon => 'Motorola', NikonCustom => 'Nikon', NikonCapture => 'NikonCustom', Nintendo => 'NikonCapture', Pentax => 'Panasonic', SonyIDC => 'Sony', Unknown => 'SonyIDC', DNG => 'Unknown', PrintIM => 'ICC_Profile', Vorbis => 'Ogg', ID3 => 'PostScript', MinoltaRaw => 'KyoceraRaw', KyoceraRaw => 'CanonRaw', SigmaRaw => 'PanasonicRaw', Lytro => 'SigmaRaw', PhotoMechanic => 'FotoStation', Microsoft => 'PhotoMechanic', 'Microsoft::MP'=> 'Microsoft::MP1', GIMP => 'Microsoft', 'Nikon::CameraSettingsD300' => 'Nikon::ShotInfoD300b', 'Pentax::LensData' => 'Pentax::LensInfo2', 'Sony::SRF2' => 'Sony::SRF', DarwinCore => 'AFCP', 'MWG::Regions' => 'MWG::Composite', 'MWG::Keywords' => 'MWG::Regions', 'MWG::Collections' => 'MWG::Keywords', ); # list of all recognized Format strings # (not a complete list, but this is all we use so far) # (also, formats like "var_X[Y]" are allowed for any valid X) my %formatOK = ( %Image::ExifTool::Exif::formatNumber, 0 => 1, 1 => 1, real => 1, integer => 1, date => 1, boolean => 1, rational => 1, 'lang-alt' => 1, fixed16u => 1, fixed16s => 1, fixed32u => 1, fixed32s => 1, extended => 1, resize => 1, digits => 1, int16uRev => 1, int32uRev => 1, rational32u => 1, rational32s => 1, pstring => 1, var_string => 1, var_int16u => 1, var_pstr32 => 1, # Matroska signed => 1, unsigned => 1, utf8 => 1, ); # Descriptions for the TagNames documentation # (descriptions may also be defined in tag table NOTES) # Note: POD headers in these descriptions start with '~' instead of '=' to keep # from confusing POD parsers which apparently parse inside quoted strings. my %docs = ( PodHeader => q{ ~head1 NAME Image::ExifTool::TagNames - ExifTool tag name documentation ~head1 DESCRIPTION This document contains a complete list of ExifTool tag names, organized into tables based on information type. Tag names are used to reference specific meta information extracted from or written to a file. ~head1 TAG TABLES }, ExifTool => q{ The tables listed below give the names of all tags recognized by ExifTool. }, ExifTool2 => q{ B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each table. A B<Tag ID> is the computer-readable equivalent of a tag name, and is the identifier that is actually stored in the file. B<Index#> refers to the location of a value when found at a fixed position within a data block (B<#> is the multiplier for calculating a byte offset: B<1>, B<2> or B<4>). B<Sequence> gives the order of values for a serial data stream. A B<Tag Name> is the handle by which the information is accessed in ExifTool. In some instances, more than one name may correspond to a single tag ID. In these cases, the actual name used depends on the context in which the information is found. Case is not significant for tag names. A question mark (C<?>) after a tag name indicates that the information is either not understood, not verified, or not very useful -- these tags are not extracted by ExifTool unless the Unknown (-u) option is enabled. Be aware that some tag names are different than the descriptions printed out by default when extracting information with exiftool. To see the tag names instead of the descriptions, use C<exiftool -s>. The B<Writable> column indicates whether the tag is writable by ExifTool. Anything but an C<N> in this column means the tag is writable. A C<Y> indicates writable information that is either unformatted or written using the existing format. Other expressions give details about the information format, and vary depending on the general type of information. The format name may be followed by a number in square brackets to indicate the number of values written, or the number of characters in a fixed-length string (including a null terminator which is added if required). A plus sign (C<+>) after an entry in the B<Writable> column indicates a "list" tag which supports multiple values and allows individual values to be added and deleted. A slash (C</>) indicates an "avoided" tag that is not created when writing if another same-named tag may be created instead. To write these tags, the group should be specified. A tilde (C<~>) indicates a tag this is writable only when the print conversion is disabled (by setting PrintConv to 0, using the -n option, or suffixing the tag name with a C<#> character). An exclamation point (C<!>) indicates a tag that is considered unsafe to write under normal circumstances. These "unsafe" tags are not written unless specified explicitly (ie. wildcards and "all" may not be used), and care should be taken when editing them manually since they may affect the way an image is rendered. An asterisk (C<*>) indicates a "protected" tag which is not writable directly, but is written automatically by ExifTool (often when a corresponding Composite or Extra tag is written). A colon (C<:>) indicates a mandatory tag which may be added automatically when writing. The HTML version of these tables also lists possible B<Values> for discrete-valued tags, as well as B<Notes> for some tags. The B<Values> are listed as the computer-readable and human-readable values on the left and right hand side of an equals sign (C<=>) respectively. The human-readable values are used by default when reading and writing, but the computer-readable values may be accessed by disabling the value conversion with the -n option on the command line, by setting the ValueConv option to 0 in the API, or or on a per-tag basis by adding a hash (C<#>) after the tag name. B<Note>: If you are familiar with common meta-information tag names, you may find that some ExifTool tag names are different than expected. The usual reason for this is to make the tag names more consistent across different types of meta information. To determine a tag name, either consult this documentation or run C<exiftool -s> on a file containing the information in question. I<(This documentation is the result of years of research, testing and reverse engineering, and is the most complete metadata tag list available anywhere on the internet. It is provided not only for ExifTool users, but more importantly as a public service to help augment the collective knowledge, and is often used as a primary source of information in the development of other metadata software. Please help keep this documentation as accurate and complete as possible, and feed any new discoveries back to ExifTool. A big thanks to everyone who has helped with this so far!)> }, EXIF => q{ EXIF stands for "Exchangeable Image File Format". This type of information is formatted according to the TIFF specification, and may be found in JPG, TIFF, PNG, JP2, PGF, MIFF, HDP, PSP and XCF images, as well as many TIFF-based RAW images, and even some AVI and MOV videos. The EXIF meta information is organized into different Image File Directories (IFD's) within an image. The names of these IFD's correspond to the ExifTool family 1 group names. When writing EXIF information, the default B<Group> listed below is used unless another group is specified. The table below lists all EXIF tags. Also listed are TIFF, DNG, HDP and other tags which are not part of the EXIF specification, but may co-exist with EXIF tags in some images. Tags which are part of the EXIF 2.3 specification have an underlined B<Tag Name> in the HTML version of this documentation. See L<http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf> for the official EXIF 2.3 specification. }, GPS => q{ These GPS tags are part of the EXIF standard, and are stored in a separate IFD within the EXIF information. ExifTool is very flexible about the input format when writing lat/long coordinates, and will accept from 1 to 3 floating point numbers (for decimal degrees, degrees and minutes, or degrees, minutes and seconds) separated by just about anything, and will format them properly according to the EXIF specification. Some GPS tags have values which are fixed-length strings. For these, the indicated string lengths include a null terminator which is added automatically by ExifTool. Remember that the descriptive values are used when writing (eg. 'Above Sea Level', not '0') unless the print conversion is disabled (with '-n' on the command line or the PrintConv option in the API, or by suffixing the tag name with a C<#> character). When adding GPS information to an image, it is important to set all of the following tags: GPSLatitude, GPSLatitudeRef, GPSLongitude, GPSLongitudeRef, and GPSAltitude and GPSAltitudeRef if the altitude is known. ExifTool will write the required GPSVersionID tag automatically if new a GPS IFD is added to an image. }, XMP => q{ XMP stands for "Extensible Metadata Platform", an XML/RDF-based metadata format which is being pushed by Adobe. Information in this format can be embedded in many different image file types including JPG, JP2, TIFF, GIF, EPS, PDF, PSD, IND, INX, PNG, DJVU, SVG, PGF, MIFF, XCF, CRW, DNG and a variety of proprietary TIFF-based RAW images, as well as MOV, AVI, ASF, WMV, FLV, SWF and MP4 videos, and WMA and audio formats supporting ID3v2 information. The XMP B<Tag ID>'s aren't listed because in most cases they are identical to the B<Tag Name> (aside from differences in case). Tags with different ID's are mentioned in the B<Notes> column of the HTML version of this document. All XMP information is stored as character strings. The B<Writable> column specifies the information format: C<string> is an unformatted string, C<integer> is a string of digits (possibly beginning with a '+' or '-'), C<real> is a floating point number, C<rational> is entered as a floating point number but stored as two C<integer> strings separated by a '/' character, C<date> is a date/time string entered in the format "YYYY:mm:dd HH:MM:SS[.ss][+/-HH:MM]", C<boolean> is either "True" or "False", C<struct> indicates a structured tag, and C<lang-alt> is a tag that supports alternate languages. When reading, C<struct> tags are extracted only if the Struct (-struct) option is used. Otherwise the corresponding "flattened" tags, indicated by an underline (C<_>) after the B<Writable> type, are extracted. When copying, by default both structured and flattened tags are available, but the flattened tags are considered "unsafe" so they they aren't copied unless specified explicitly. The Struct option may be disabled by setting Struct to 0 via the API or with --struct on the command line to copy only flattened tags, or enabled by setting Struct to 1 via the API or with -struct on the command line to copy only as structures. When writing, the Struct option has no effect, and both structured and flattened tags may be written. See L<http://owl.phy.queensu.ca/~phil/exiftool/struct.html> for more details. Individual languages for C<lang-alt> tags are accessed by suffixing the tag name with a '-', followed by an RFC 3066 language code (eg. "XMP:Title-fr", or "Rights-en-US"). (See L<http://www.ietf.org/rfc/rfc3066.txt> for the RFC 3066 specification.) A C<lang-alt> tag with no language code accesses the "x-default" language, but causes other languages for this tag to be deleted when writing. The "x-default" language code may be specified when writing to preserve other existing languages (eg. "XMP-dc:Description-x-default"). When reading, "x-default" is not specified. The XMP tags are organized according to schema B<Namespace> in the following tables. Note that a few of the longer namespace prefixes given below have been shortened for convenience (since the family 1 group names are derived from these by adding a leading "XMP-"). In cases where a tag name exists in more than one namespace, less common namespaces are avoided when writing. However, any namespace may be written by specifying a family 1 group name for the tag, eg) XMP-exif:Contrast or XMP-crs:Contrast. When deciding on which tags to add to an image, using standard schemas such as L<dc|/XMP dc Tags>, L<xmp|/XMP xmp Tags>, L<iptcCore|/XMP iptcCore Tags> and L<iptcExt|/XMP iptcExt Tags> is recommended if possible. For structures, the heading of the first column is B<Field Name>. Field names are very similar to tag names, except they are used to identify fields inside structures instead of stand-alone tags. See L<the Field Name section of the Structured Information documentation|http://owl.phy.queensu.ca/~phil/exiftool/struct.html#Fields> for more details. ExifTool will extract XMP information even if it is not listed in these tables, but other tags are not writable unless added as user-defined tags in the L<ExifTool config file|../config.html>. For example, the C<pdfx> namespace doesn't have a predefined set of tag names because it is used to store application-defined PDF information, so although this information will be extracted, it is only writable if the corresponding user-defined tags have been created. The tables below list tags from the official XMP specification (with an underlined B<Namespace> in the HTML version of this documentation), as well as extensions from various other sources. See L<http://www.adobe.com/devnet/xmp/> for the official XMP specification. }, IPTC => q{ The tags listed below are part of the International Press Telecommunications Council (IPTC) and the Newspaper Association of America (NAA) Information Interchange Model (IIM). This is an older meta information format, slowly being phased out in favor of XMP -- the newer IPTCCore specification uses XMP format. IPTC information may be found in JPG, TIFF, PNG, MIFF, PS, PDF, PSD, XCF and DNG images. IPTC information is separated into different records, each of which has its own set of tags. See L<http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf> for the official IPTC IIM specification. This specification dictates a length for ASCII (C<string> or C<digits>) and binary (C<undef>) values. These lengths are given in square brackets after the B<Writable> format name. For tags where a range of lengths is allowed, the minimum and maximum lengths are separated by a comma within the brackets. IPTC strings are not null terminated. When writing, ExifTool issues a minor warning and truncates the value if it is longer than allowed by the IPTC specification. Minor errors may be ignored with the IgnoreMinorErrors (-m) option, allowing longer values to be written, but beware that values like this may cause problems for some other IPTC readers. ExifTool will happily read IPTC values of any length. Separate IPTC date and time tags may be written with a combined date/time value and ExifTool automagically takes the appropriate part of the date/time string depending on whether a date or time tag is being written. This is very useful when copying date/time values to IPTC from other metadata formats. IPTC time values include a timezone offset. If written with a value which doesn't include a timezone then the current local timezone offset is used (unless written with a combined date/time, in which case the local timezone offset at the specified date/time is used, which may be different due to changes in daylight savings time). Note that it is not uncommon for IPTC to be found in non-standard locations in JPEG and TIFF-based images. When reading, the family 1 group name has a number added for non-standard IPTC ("IPTC2", "IPTC3", etc), but when writing only "IPTC" may be specified as the group. To keep the IPTC consistent, ExifTool updates tags in all existing IPTC locations, but will create a new IPTC group only in the standard location. }, Photoshop => q{ Photoshop tags are found in PSD and PSB files, as well as inside embedded Photoshop information in many other file types (JPEG, TIFF, PDF, PNG to name a few). Many Photoshop tags are marked as Unknown (indicated by a question mark after the tag name) because the information they provide is not very useful under normal circumstances. These unknown tags are not extracted unless the Unknown (-u) option is used. See L<http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/> for the official specification Photoshop path tags (Tag ID's 0x7d0 to 0xbb5) are not defined by default, but a config file included in the full ExifTool distribution (config_files/photoshop_paths.config) contains the tag definitions to allow access to this information. }, PrintIM => q{ The format of the PrintIM information is known, however no PrintIM tags have been decoded. Use the Unknown (-u) option to extract PrintIM information. }, GeoTiff => q{ ExifTool extracts the following tags from GeoTIFF images. See L<http://www.remotesensing.org/geotiff/spec/geotiffhome.html> for the complete GeoTIFF specification. Also included in the table below are ChartTIFF tags (see L<http://www.charttiff.com/whitepapers.shtml>). GeoTIFF tags are not writable individually, but they may be copied en mass via the block tags GeoTiffDirectory, GeoTiffDoubleParams and GeoTiffAsciiParams. }, JFIF => q{ The following information is extracted from the JPEG JFIF header. See L<http://www.jpeg.org/public/jfif.pdf> for the JFIF 1.02 specification. }, Kodak => q{ Many Kodak models don't store the maker notes in standard IFD format, and these formats vary with different models. Some information has been decoded, but much of the Kodak information remains unknown. }, 'Kodak SpecialEffects' => q{ The Kodak SpecialEffects and Borders tags are found in sub-IFD's within the Kodak JPEG APP3 "Meta" segment. }, Minolta => q{ These tags are used by Minolta, Konica/Minolta as well as some Sony cameras. Minolta doesn't make things easy for decoders because the meaning of some tags and the location where some information is stored is different for different camera models. (Take MinoltaQuality for example, which may be located in 5 different places.) }, Olympus => q{ Tags 0x0000 through 0x0103 are used by some older Olympus cameras, and are the same as Konica/Minolta tags. These tags are also used for some models from other brands such as Acer, BenQ, Epson, Hitachi, HP, Maginon, Minolta, Pentax, Ricoh, Samsung, Sanyo, SeaLife, Sony, Supra and Vivitar. }, Panasonic => q{ These tags are used in Panasonic/Leica cameras. }, Pentax => q{ These tags are used in Pentax/Asahi cameras. }, CanonRaw => q{ These tags apply to CRW-format Canon RAW files and information in the APP0 "CIFF" segment of JPEG images. When writing CanonRaw/CIFF information, the length of the information is preserved (and the new information is truncated or padded as required) unless B<Writable> is C<resize>. Currently, only JpgFromRaw and ThumbnailImage are allowed to change size. CRW images also support the addition of a CanonVRD trailer, which in turn supports XMP. This trailer is created automatically if necessary when ExifTool is used to write XMP to a CRW image. }, NikonCustom => q{ Unfortunately, the NikonCustom settings are stored in a binary data block which changes from model to model. This means that significant effort must be spent in decoding these for each model, usually requiring hundreds of test images from a dedicated Nikon owner. For this reason, the NikonCustom settings have not been decoded for all models. The tables below list the custom settings for the currently supported models. }, Unknown => q{ The following tags are decoded in unsupported maker notes. Use the Unknown (-u) option to display other unknown tags. }, PDF => q{ The tags listed in the PDF tables below are those which are used by ExifTool to extract meta information, but they are only a small fraction of the total number of available PDF tags. See L<http://www.adobe.com/devnet/pdf/pdf_reference.html> for the official PDF specification. ExifTool supports reading and writing PDF documents up to version 1.7 extension level 3, including support for RC4, AES-128 and AES-256 encryption. A Password option is provided to allow processing of password-protected PDF files. ExifTool may be used to write native PDF and XMP metadata to PDF files. It uses an incremental update technique that has the advantages of being both fast and reversible. The original PDF can be easily recovered by deleting the C<PDF-update> pseudo-group (with C<-PDF-update:all=> on the command line). However, there are two main disadvantages to this technique: 1) A linearized PDF file is no longer linearized after the update, so it must be subsequently re-linearized if this is required. 2) All metadata edits are reversible. While this would normally be considered an advantage, it is a potential security problem because old information is never actually deleted from the file. }, DNG => q{ The main DNG tags are found in the EXIF table. The tables below define only information found within structures of these main DNG tag values. See L<http://www.adobe.com/products/dng/> for the official DNG specification. }, MPEG => q{ The MPEG format doesn't specify any file-level meta information. In lieu of this, information is extracted from the first audio and video frame headers in the file. }, Real => q{ ExifTool recognizes three basic types of Real audio/video files: 1) RealMedia (RM, RV and RMVB), 2) RealAudio (RA), and 3) Real Metafile (RAM and RPM). }, Extra => q{ The extra tags represent extra information extracted or generated by ExifTool that is not directly associated with another tag group. The B<Group> column lists the family 1 group name when reading. Tags with a "-" in this column are write-only. Tags in the family 1 "System" group are referred to as "pseudo" tags because they don't represent real metadata in the file. Instead, this information is stored in the directory structure of the filesystem. The five writable "pseudo" tags (FileName, Directory, FileModifyDate, FileCreateDate and HardLink) may be written without modifying the file itself. The TestName tag is used for dry-run testing before writing FileName. }, Composite => q{ The values of the composite tags are B<Derived From> the values of other tags. These are convenience tags which are calculated after all other information is extracted. Only a few of these tags are writable directly, the others are changed by writing the corresponding B<Derived From> tags. User-defined Composite tags, also useful for custom-formatting of tag values, may created via the L<ExifTool configuration file|../config.html>. }, Shortcuts => q{ Shortcut tags are convenience tags that represent one or more other tag names. They are used like regular tags to read and write the information for a specified set of tags. The shortcut tags below have been pre-defined, but user-defined shortcuts may be added via the %Image::ExifTool::UserDefined::Shortcuts lookup in the ~/.ExifTool_config file. See the Image::ExifTool::Shortcuts documentation for more details. }, MWG => q{ The Metadata Working Group (MWG) recommends techniques to allow certain overlapping EXIF, IPTC and XMP tags to be reconciled when reading, and synchronized when writing. The MWG Composite tags below are designed to aid in the implementation of these recommendations. As well, the MWG defines new XMP tags which are listed in the subsequent tables below. See L<http://www.metadataworkinggroup.org/> for the official MWG specification. }, PodTrailer => q{ ~head1 NOTES This document generated automatically by L<Image::ExifTool::BuildTagLookup|Image::ExifTool::BuildTagLookup>. ~head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. ~head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool> ~cut }, ); # notes for Shortcuts tags my %shortcutNotes = ( AllDates => q{ contrary to the shortcut name, this represents only the common EXIF date/time tags. To access all date/time tags, use Time:All instead }, MakerNotes => q{ useful when copying tags between files to either copy the maker notes as a block or prevent it from being copied }, ColorSpaceTags => q{ standard tags which carry color space information. Useful for preserving color space when deleting all other metadata }, CommonIFD0 => q{ common metadata tags found in IFD0 of TIFF-format images. Used to simpify deletion of all metadata from these images. See L<FAQ number 7|../faq.html#Q7> for details }, Unsafe => q{ "unsafe" tags in JPEG images which are normally not copied. Defined here as a shortcut to use when rebuilding JPEG EXIF from scratch. See L<FAQ number 20|../faq.html#Q20> for more information }, LargeTags => q{ large binary data tags which may be excluded to reduce memory usage if memory limitations are a problem }, ); # EXIF table tag ID's which are part of the EXIF 2.3 specification # (used only to add underlines in HTML version of EXIF Tag Table) my %exifSpec = ( 0x100 => 1, 0x212 => 1, 0x9204 => 1, 0xa217 => 1, 0x101 => 1, 0x213 => 1, 0x9205 => 1, 0xa300 => 1, 0x102 => 1, 0x214 => 1, 0x9206 => 1, 0xa301 => 1, 0x103 => 1, 0x8298 => 1, 0x9207 => 1, 0xa302 => 1, 0x106 => 1, 0x829a => 1, 0x9208 => 1, 0xa401 => 1, 0x10e => 1, 0x829d => 1, 0x9209 => 1, 0xa402 => 1, 0x10f => 1, 0x8769 => 1, 0x920a => 1, 0xa403 => 1, 0x110 => 1, 0x8822 => 1, 0x9214 => 1, 0xa404 => 1, 0x111 => 1, 0x8824 => 1, 0x927c => 1, 0xa405 => 1, 0x112 => 1, 0x8825 => 1, 0x9286 => 1, 0xa406 => 1, 0x115 => 1, 0x8827 => 1, 0x9290 => 1, 0xa407 => 1, 0x116 => 1, 0x8828 => 1, 0x9291 => 1, 0xa408 => 1, 0x117 => 1, 0x8830 => 1, 0x9292 => 1, 0xa409 => 1, 0x11a => 1, 0x8831 => 1, 0xa000 => 1, 0xa40a => 1, 0x11b => 1, 0x8832 => 1, 0xa001 => 1, 0xa40b => 1, 0x11c => 1, 0x8833 => 1, 0xa002 => 1, 0xa40c => 1, 0x128 => 1, 0x8834 => 1, 0xa003 => 1, 0xa420 => 1, 0x12d => 1, 0x8835 => 1, 0xa004 => 1, 0xa430 => 1, 0x131 => 1, 0x9000 => 1, 0xa005 => 1, 0xa431 => 1, 0x132 => 1, 0x9003 => 1, 0xa20b => 1, 0xa432 => 1, 0x13b => 1, 0x9004 => 1, 0xa20c => 1, 0xa433 => 1, 0x13e => 1, 0x9101 => 1, 0xa20e => 1, 0xa434 => 1, 0x13f => 1, 0x9102 => 1, 0xa20f => 1, 0xa435 => 1, 0x201 => 1, 0x9201 => 1, 0xa210 => 1, 0x202 => 1, 0x9202 => 1, 0xa214 => 1, 0x211 => 1, 0x9203 => 1, 0xa215 => 1, ); # same thing for RIFF INFO tags found in the EXIF spec my %riffSpec = ( IARL => 1, ICRD => 1, IGNR => 1, IPLT => 1, ISRC => 1, IART => 1, ICRP => 1, IKEY => 1, IPRD => 1, ISRF => 1, ICMS => 1, IDIM => 1, ILGT => 1, ISBJ => 1, ITCH => 1, ICMT => 1, IDPI => 1, IMED => 1, ISFT => 1, ICOP => 1, IENG => 1, INAM => 1, ISHP => 1, ); # same thing for XMP namespaces my %xmpSpec = ( aux => 1, 'x' => 1, crs => 1, xmp => 1, dc => 1, xmpBJ => 1, exif => 1, xmpDM => 1, pdf => 1, xmpMM => 1, pdfx => 1, xmpNote => 1, photoshop => 1, xmpRights => 1, tiff => 1, xmpTPg => 1, ); #------------------------------------------------------------------------------ # New - create new BuildTagLookup object # Inputs: 0) reference to BuildTagLookup object or BuildTagLookup class name sub new { local $_; my $that = shift; my $class = ref($that) || $that || 'Image::ExifTool::BuildTagLookup'; my $self = bless {}, $class; my (%subdirs, %isShortcut, %allStructs); my %count = ( 'unique tag names' => 0, 'total tags' => 0, ); # # loop through all tables, accumulating TagLookup and TagName information # my (%tagNameInfo, %id, %longID, %longName, %shortName, %tableNum, %tagLookup, %tagExists, %noLookup, %tableWritable, %sepTable, %case, %structs, %compositeModules, %isPlugin, %flattened, %structLookup); $self->{TAG_NAME_INFO} = \%tagNameInfo; $self->{ID_LOOKUP} = \%id; $self->{LONG_ID} = \%longID; $self->{LONG_NAME} = \%longName; $self->{SHORT_NAME} = \%shortName; $self->{TABLE_NUM} = \%tableNum; $self->{TAG_LOOKUP} = \%tagLookup; $self->{TAG_EXISTS} = \%tagExists; $self->{FLATTENED} = \%flattened; $self->{TABLE_WRITABLE} = \%tableWritable; $self->{SEPARATE_TABLE} = \%sepTable; $self->{STRUCTURES} = \%structs; $self->{STRUCT_LOOKUP} = \%structLookup; # lookup for Struct hash ref based on Struct name $self->{COMPOSITE_MODULES} = \%compositeModules; $self->{COUNT} = \%count; Image::ExifTool::LoadAllTables(); my @tableNames = sort keys %allTables; # add Shortcuts after other tables push @tableNames, 'Image::ExifTool::Shortcuts::Main'; # add plug-in modules last foreach (@pluginTables) { push @tableNames, $_; $isPlugin{$_} = 1; } my $tableNum = 0; my $et = new Image::ExifTool; my ($tableName, $tag); # create lookup for short table names foreach $tableName (@tableNames) { my $short = $tableName; $short =~ s/^Image::ExifTool:://; $short =~ s/::Main$//; $short =~ s/::/ /; $short =~ s/^(.+)Tags$/\u$1/ unless $short eq 'Nikon AVITags'; $short =~ s/^Exif\b/EXIF/; # change underlines to dashes in XMP-mwg group names # (we used underlines just because Perl variables can't contain dashes) $short =~ s/^XMP mwg_/XMP mwg-/; $shortName{$tableName} = $short; # remember short name $tableNum{$tableName} = $tableNum++; } # validate DICOM UID values foreach (values %Image::ExifTool::DICOM::uid) { next unless /[\0-\x1f\x7f-\xff]/; warn "Warning: Special characters in DICOM UID value ($_)\n"; } # make lookup table to check for shortcut tags foreach $tag (keys %Image::ExifTool::Shortcuts::Main) { my $entry = $Image::ExifTool::Shortcuts::Main{$tag}; # ignore if shortcut tag name includes itself next if ref $entry eq 'ARRAY' and grep /^$tag$/, @$entry; $isShortcut{lc($tag)} = 1; } foreach $tableName (@tableNames) { # create short table name my $short = $shortName{$tableName}; my $info = $tagNameInfo{$tableName} = [ ]; my $isPlugin = $isPlugin{$tableName}; my ($table, $shortcut, %isOffset, %datamember, %hasSubdir); if ($short eq 'Shortcuts') { # can't use GetTagTable() for Shortcuts (not a normal table) $table = \%Image::ExifTool::Shortcuts::Main; $shortcut = 1; } elsif ($isPlugin) { $table = GetTagTable($tableName); # don't add to allTables list because this messes our table order delete $allTables{$tableName}; pop @tableOrder; } else { $table = GetTagTable($tableName); } my $tableNum = $tableNum{$tableName}; my $writeProc = $$table{WRITE_PROC}; my $vars = $$table{VARS} || { }; $longID{$tableName} = 0; $longName{$tableName} = 0; # save all tag names my ($tagID, $binaryTable, $noID, $hexID, $isIPTC, $isXMP); $isIPTC = 1 if $writeProc and $writeProc eq \&Image::ExifTool::IPTC::WriteIPTC; # generate flattened tag names for structure fields if this is an XMP table if ($$table{GROUPS} and $$table{GROUPS}{0} eq 'XMP') { Image::ExifTool::XMP::AddFlattenedTags($table); $isXMP = 1; } $noID = 1 if $isXMP or $short =~ /^(Shortcuts|ASF.*)$/ or $$vars{NO_ID}; $hexID = $$vars{HEX_ID}; my $processBinaryData = ($$table{PROCESS_PROC} and ( $$table{PROCESS_PROC} eq \&Image::ExifTool::ProcessBinaryData or $$table{PROCESS_PROC} eq \&Image::ExifTool::Nikon::ProcessNikonEncrypted)); if ($$vars{ID_LABEL} or $processBinaryData) { my $s = $$table{FORMAT} ? Image::ExifTool::FormatSize($$table{FORMAT}) || 1 : 1; $binaryTable = 1; $id{$tableName} = $$vars{ID_LABEL} || "Index$s"; } elsif ($isIPTC and $$table{PROCESS_PROC}) { #only the main IPTC table has a PROCESS_PROC $id{$tableName} = 'Record'; } elsif (not $noID) { $id{$tableName} = 'Tag ID'; } $caseInsensitive = $isXMP; $numbersFirst = 2; $numbersFirst = -1 if $$table{VARS} and $$table{VARS}{ALPHA_FIRST}; my @keys = SortedTagTableKeys($table); $numbersFirst = 1; my $defFormat = $table->{FORMAT}; # use default format for binary data tables $defFormat = 'int8u' if not $defFormat and $binaryTable; TagID: foreach $tagID (@keys) { my ($tagInfo, @tagNames, $subdir, @values); my (@infoArray, @require, @writeGroup, @writable); if ($shortcut) { # must build a dummy tagInfo list since Shortcuts is not a normal table $tagInfo = { Name => $tagID, Notes => $shortcutNotes{$tagID}, Writable => 1, Require => { }, }; my $i; for ($i=0; $i<@{$$table{$tagID}}; ++$i) { $tagInfo->{Require}->{$i} = $table->{$tagID}->[$i]; } @infoArray = ( $tagInfo ); } else { @infoArray = GetTagInfoList($table,$tagID); } foreach $tagInfo (@infoArray) { my $name = $$tagInfo{Name}; unless ($$tagInfo{SubDirectory} or $$tagInfo{Struct}) { my $lc = lc $name; warn "Different case for $tableName $name $case{$lc}\n" if $case{$lc} and $case{$lc} ne $name; $case{$lc} = $name; } my $format = $$tagInfo{Format}; # validate Name (must not start with a digit or else XML output will not be valid) # (must not start with a dash or exiftool command line may get confused) if ($name !~ /^[_A-Za-z][-\w]+$/ and # single-character subdirectory names are allowed (not $$tagInfo{SubDirectory} or $name !~ /^[_A-Za-z]$/)) { warn "Warning: Invalid tag name $short '$name'\n"; } # validate list type if ($$tagInfo{List} and $$tagInfo{List} !~ /^(1|Alt|Bag|Seq|array|string)$/) { warn "Warning: Unknown List type ($$tagInfo{List}) for $name in $tableName\n"; } # accumulate information for consistency check of BinaryData tables if ($processBinaryData and $$table{WRITABLE}) { # can't currently write tag if Condition accesses $valPt if ($$tagInfo{Condition} and not $$tagInfo{SubDirectory} and $$tagInfo{Condition} =~ /\$valPt/ and ($$tagInfo{Writable} or not defined $$tagInfo{Writable})) { warn "Warning: Tag not writable due to Condition - $short $name\n"; } $isOffset{$tagID} = $name if $$tagInfo{IsOffset}; $hasSubdir{$tagID} = $name if $$tagInfo{SubDirectory}; # require DATAMEMBER for writable var-format tags, Hook and DataMember tags if ($format and $format =~ /^var_/) { $datamember{$tagID} = $name; unless (defined $$tagInfo{Writable} and not $$tagInfo{Writable}) { warn "Warning: Var-format tag is writable - $short $name\n" } # also need DATAMEMBER for tags used in length of var-sized value while ($format =~ /\$val\{(.*?)\}/g) { my $id = $1; $id = hex($id) if $id =~ /^0x/; # convert from hex if necessary $datamember{$id} = $$table{$id}{Name} if ref $$table{$id} eq 'HASH'; unless ($datamember{$id}) { warn "Warning: Unknown ID ($id) used in Format - $short $name\n"; } } } elsif ($$tagInfo{Hook} or ($$tagInfo{RawConv} and $$tagInfo{RawConv} =~ /\$self(->)?\{\w+\}\s*=(?!~)/)) { $datamember{$tagID} = $name; } if ($format and $format =~ /\$val\{/ and ($$tagInfo{Writable} or not defined $$tagInfo{Writable})) { warn "Warning: \$var{} used in Format of writable tag - $short $name\n" } } if ($$tagInfo{Hidden}) { if ($tagInfo == $infoArray[0]) { next TagID; # hide all tags with this ID if first tag in list is hidden } else { next; # only hide this tag } } my $writable; if (defined $$tagInfo{Writable}) { $writable = $$tagInfo{Writable}; # validate Writable unless ($formatOK{$writable} or ($writable =~ /(.*)\[/ and $formatOK{$1})) { warn "Warning: Unknown Writable ($writable) - $short $name\n", } } elsif (not $$tagInfo{SubDirectory}) { $writable = $$table{WRITABLE}; } # validate some characteristics of obvious date/time tags if ($$tagInfo{PrintConv} and $$tagInfo{PrintConv} eq '$self->ConvertDateTime($val)') { my @g = $et->GetGroup($tagInfo); warn "$short $name should be in 'Time' group!\n" unless $g[2] eq 'Time'; if ($writable and not $$tagInfo{Shift} and $g[0] ne 'Composite' and $short ne 'PostScript') { warn "$short $name is not shiftable!\n"; } if ($writable and (not $$tagInfo{PrintConvInv} or $$tagInfo{PrintConvInv} !~ /InverseDateTime/)) { warn "$short $name missing InverseDateTime PrintConvInv\n"; } } elsif ($name =~ /DateTime(?!Stamp)/ and (not $$tagInfo{Groups}{2} or $$tagInfo{Groups}{2} ne 'Time') and $short ne 'DICOM') { warn "$short $name should be in 'Time' group!\n"; } # validate Description (can't contain special characters) if ($$tagInfo{Description} and $$tagInfo{Description} ne EscapeHTML($$tagInfo{Description})) { # this is a problem because the Escape option currently only # escapes descriptions if the default Lang option isn't default warn "$name description contains special characters!\n"; } # generate structure lookup my $struct = $$tagInfo{Struct}; my $strTable; if (ref $struct) { $strTable = $struct; $struct = $$strTable{STRUCT_NAME}; if ($struct) { my $oldTable = $structLookup{$struct}; if ($oldTable and $oldTable ne $strTable) { warn "Duplicate XMP structure with name $struct\n"; } else { $structLookup{$struct} = $strTable; } } else { warn "Missing STRUCT_NAME for structure in $$tagInfo{Name}\n"; undef $strTable; } } elsif ($struct) { $strTable = $structLookup{$struct}; unless ($strTable) { $struct = "XMP $struct" unless $struct =~ / /; warn "Missing $struct structure!\n"; undef $struct; } } # validate SubIFD flag my $subdir = $$tagInfo{SubDirectory}; my $isSub = ($subdir and $$subdir{Start} and $$subdir{Start} =~ /\$val\b/); if ($$tagInfo{SubIFD}) { warn "Warning: Wrong SubDirectory Start for SubIFD tag - $short $name\n" unless $isSub; } else { warn "Warning: SubIFD flag not set for $short $name\n" if $isSub; } if ($$tagInfo{Notes}) { my $note = $$tagInfo{Notes}; # remove leading/trailing blank lines $note =~ s/^\s+//; $note =~ s/\s+$//; # remove leading/trailing spaces on each line $note =~ s/(^[ \t]+|[ \t]+$)//mg; push @values, "($note)"; } elsif ($isXMP and lc $tagID ne lc $name) { # add note about different XMP Tag ID if ($$tagInfo{RootTagInfo}) { push @values, "($tagID)"; } else { push @values,"(called $tagID by the spec)"; } } my $writeGroup; if ($short eq 'Extra') { my @g = $et->GetGroup($tagInfo); $writeGroup = $$tagInfo{WriteOnly} ? '-' : $g[1]; } else { $writeGroup = $$tagInfo{WriteGroup}; } unless ($writeGroup) { $writeGroup = $$table{WRITE_GROUP} if $writable; $writeGroup = '-' unless $writeGroup; } if (defined $format) { # validate Format unless ($formatOK{$format} or $short eq 'PICT' or ($format =~ /^(var_)?(.*)\[/ and $formatOK{$2})) { warn "Warning: Unknown Format ($format) for $short $name\n"; } } else { $format = $defFormat; } if ($subdir) { my $subTable = $$subdir{TagTable} || $tableName; push @values, $shortName{$subTable} } elsif ($struct) { push @values, $struct; $structs{$struct} = 1; } my $type; foreach $type ('Require','Desire') { my $require = $$tagInfo{$type}; if (ref $require) { foreach (sort { $a <=> $b } keys %$require) { push @require, $$require{$_}; } } elsif ($require) { push @require, $require; } } my $printConv = $$tagInfo{PrintConv}; if ($$tagInfo{Mask}) { my $val = $$tagInfo{Mask}; push @values, sprintf('[Mask 0x%.2x]',$val); $$tagInfo{PrintHex} = 1 unless defined $$tagInfo{PrintHex}; # verify that all values are within the mask if (ref $printConv eq 'HASH') { # convert mask if necessary if ($$tagInfo{ValueConv}) { my $v = eval $$tagInfo{ValueConv}; $val = $v if defined $v; } foreach (keys %$printConv) { next if $_ !~ /^\d+$/ or ($_ & $val) == $_; my $hex = sprintf '0x%.2x', $_; warn "$short $name PrintConv value $hex is not in Mask!\n"; } } } if (ref($printConv) =~ /^(HASH|ARRAY)$/) { my (@printConvList, @indexList, $index); if (ref $printConv eq 'ARRAY') { for ($index=0; $index<@$printConv; ++$index) { next if ref $$printConv[$index] ne 'HASH'; next unless %{$$printConv[$index]}; push @printConvList, $$printConv[$index]; push @indexList, $index; # collapse values with identical PrintConv's if (@printConvList >= 2 and $printConvList[-1] eq $printConvList[-2]) { if (ref $indexList[-2]) { push @{$indexList[-2]}, $indexList[-1]; } else { $indexList[-2] = [ $indexList[-2], $indexList[-1] ]; } pop @printConvList; pop @indexList; } } $printConv = shift @printConvList; $index = shift @indexList; } while (defined $printConv) { if (defined $index) { # (print indices of original values if reorganized) my $s = ''; my $idx = $$tagInfo{Relist} ? $tagInfo->{Relist}->[$index] : $index; if (ref $idx) { $s = 's' if @$idx > 1; # collapse consecutive number ranges my ($i, @i, $rngStart); for ($i=0; $i<@$idx; ++$i) { if ($i < @$idx - 1 and $$idx[$i+1] == $$idx[$i] + 1) { $rngStart = $i unless defined $rngStart; next; } push @i, defined($rngStart) ? "$rngStart-$i" : $i; } ($idx = join ', ', @i) =~ s/(.*),/$1 and/; } elsif (not $$tagInfo{Relist}) { while (@printConvList and $printConv eq $printConvList[0]) { shift @printConvList; $index = shift @indexList; } if ($idx != $index) { $idx = "$idx-$index"; $s = 's'; } } push @values, "[Value$s $idx]"; } if ($$tagInfo{SeparateTable}) { $subdir = 1; my $s = $$tagInfo{SeparateTable}; $s = $name if $s eq '1'; # add module name if not specified $s =~ / / or ($short =~ /^(\w+)/ and $s = "$1 $s"); push @values, $s; $sepTable{$s} = $printConv; # add PrintHex flag to PrintConv so we can check it later $$printConv{PrintHex} = 1 if $$tagInfo{PrintHex}; $$printConv{PrintString} = 1 if $$tagInfo{PrintString}; } else { $caseInsensitive = 0; my @pk = sort { NumbersFirst($a,$b) } keys %$printConv; my $n = scalar @values; my ($bits, $i); foreach (@pk) { next if $_ eq ''; $_ eq 'BITMASK' and $bits = $$printConv{$_}, next; $_ eq 'OTHER' and next; my $index; if (($$tagInfo{PrintHex} or $$printConv{BITMASK}) and /^-?\d+$/) { if ($_ >= 0) { $index = sprintf('0x%x', $_); } elsif ($format and $format =~ /int(16|32)/) { # mask off unused bits of signed integer hex value my $mask = { 16 => 0xffff, 32 => 0xffffffff }->{$1}; $index = sprintf('0x%x', $_ & $mask); } else { $index = $_; } } elsif (/^[+-]?(?=\d|\.\d)\d*(\.\d*)?$/ and not $$tagInfo{PrintString}) { $index = $_; } else { $index = $_; # translate unprintable values if ($index =~ s/([\x00-\x1f\x80-\xff])/sprintf("\\x%.2x",ord $1)/eg) { $index = qq{"$index"}; } else { $index = qq{'$index'}; } } push @values, "$index = " . $$printConv{$_}; # validate all PrintConv values if ($$printConv{$_} =~ /[\0-\x1f\x7f-\xff]/) { warn "Warning: Special characters in $short $name PrintConv ($$printConv{$_})\n"; } } if ($bits) { my @pk = sort { NumbersFirst($a,$b) } keys %$bits; foreach (@pk) { push @values, "Bit $_ = " . $$bits{$_}; } } # organize values into columns if specified my $cols = $$tagInfo{PrintConvColumns}; if (not $cols and scalar(@values) - $n >= 6) { # do columns if more than 6 short entries my $maxLen = 0; for ($i=$n; $i<@values; ++$i) { next unless $maxLen < length $values[$i]; $maxLen = length $values[$i]; } my $num = scalar(@values) - $n; $cols = int(50 / ($maxLen + 2)); # (50 chars max width) # have 3 rows minimum --$cols while $cols and $num / $cols < 3; } if ($cols) { my @new = splice @values, $n; my $v = '[!HTML]<table class=cols><tr>'; my $rows = int((scalar(@new) + $cols - 1) / $cols); for ($n=0; ;) { $v .= "\n <td>"; for ($i=0; $i<$rows and $n+$i<@new; ++$i) { $v .= "\n <br>" if $i; $v .= EscapeHTML($new[$n+$i]); } $v .= '</td>'; last if ($n += $rows) >= @new; $v .= '<td>&nbsp;&nbsp;</td>'; # add spaces between columns } push @values, $v . "</tr></table>\n"; } } last unless @printConvList; $printConv = shift @printConvList; $index = shift @indexList; } } elsif ($printConv and $printConv =~ /DecodeBits\(\$val,\s*(\{.*\})\s*\)/s) { $$self{Model} = ''; # needed for Nikon ShootingMode my $bits = eval $1; delete $$self{Model}; if ($@) { warn $@; } else { my @pk = sort { NumbersFirst($a,$b) } keys %$bits; foreach (@pk) { push @values, "Bit $_ = " . $$bits{$_}; } } } if ($subdir and not $$tagInfo{SeparateTable}) { # subdirectories are only writable if specified explicitly my $tw = $$tagInfo{Writable}; $writable = 'Y' if $tw and $writable eq '1'; $writable = '-' . ($tw ? $writable : ''); $writable .= '!' if $tw and ($$tagInfo{Protected} || 0) & 0x01; $writable .= '+' if $$tagInfo{List}; } else { # not writable if we can't do the inverse conversions my $noPrintConvInv; if ($writable) { foreach ('PrintConv','ValueConv') { next unless $$tagInfo{$_}; next if $$tagInfo{$_ . 'Inv'}; next if ref($$tagInfo{$_}) =~ /^(HASH|ARRAY)$/; next if $$tagInfo{WriteAlso}; if ($_ eq 'ValueConv') { undef $writable; } else { $noPrintConvInv = 1; } } } if (not $writable) { $writable = 'N'; } else { $writable eq '1' and $writable = $format ? $format : 'Y'; my $count = $$tagInfo{Count} || 1; # adjust count to Writable size if different than Format if ($writable and $format and $writable ne $format and $Image::ExifTool::Exif::formatNumber{$writable} and $Image::ExifTool::Exif::formatNumber{$format}) { my $n1 = $Image::ExifTool::Exif::formatNumber{$format}; my $n2 = $Image::ExifTool::Exif::formatNumber{$writable}; $count *= $Image::ExifTool::Exif::formatSize[$n1] / $Image::ExifTool::Exif::formatSize[$n2]; } if ($count != 1) { $count = 'n' if $count < 0; $writable .= "[$count]"; } $writable .= '~' if $noPrintConvInv; # add a '*' if this tag is protected or a '!' for unsafe tags if ($$tagInfo{Protected}) { $writable .= '*' if $$tagInfo{Protected} & 0x02; $writable .= '!' if $$tagInfo{Protected} & 0x01; } $writable .= '/' if $$tagInfo{Avoid}; } $writable = "=struct" if $struct; $writable .= '_' if defined $$tagInfo{Flat}; $writable .= '+' if $$tagInfo{List}; $writable .= ':' if $$tagInfo{Mandatory}; # separate tables link like subdirectories (flagged with leading '-') $writable = "-$writable" if $subdir; } # don't duplicate a tag name unless an entry is different my $lcName = lc($name); # check for conflicts with shortcut names if ($isShortcut{$lcName} and $short ne 'Shortcuts' and ($$tagInfo{Writable} or not $$tagInfo{SubDirectory})) { warn "WARNING: $short $name is a shortcut tag!\n"; } $name .= '?' if $$tagInfo{Unknown}; unless (@tagNames and $tagNames[-1] eq $name and $writeGroup[-1] eq $writeGroup and $writable[-1] eq $writable) { push @tagNames, $name; push @writeGroup, $writeGroup; push @writable, $writable; } # # add this tag to the tag lookup unless NO_LOOKUP is set or shortcut or plug-in tag # next if $shortcut or $isPlugin; # count tags if ($$tagInfo{SubDirectory}) { next if $$vars{NO_LOOKUP}; $subdirs{$lcName} or $subdirs{$lcName} = 0; ++$subdirs{$lcName}; } else { ++$count{'total tags'}; unless ($tagExists{$lcName} and (not $subdirs{$lcName} or $subdirs{$lcName} == $tagExists{$lcName})) { ++$count{'unique tag names'} unless $noLookup{$lcName}; } # don't add to tag lookup if specified $$vars{NO_LOOKUP} and $noLookup{$lcName} = 1, next; } $tagExists{$lcName} or $tagExists{$lcName} = 0; ++$tagExists{$lcName}; # only add writable tags to lookup table (for speed) my $wflag = $$tagInfo{Writable}; next unless $writeProc and ($wflag or ($$table{WRITABLE} and not defined $wflag and not $$tagInfo{SubDirectory})); $tagLookup{$lcName} or $tagLookup{$lcName} = { }; # add to lookup for flattened tags if necessary if ($$tagInfo{RootTagInfo}) { $flattened{$lcName} or $flattened{$lcName} = { }; $flattened{$lcName}{$tableNum} = $$tagInfo{RootTagInfo}{TagID}; } # remember number for this table my $tagIDs = $tagLookup{$lcName}->{$tableNum}; # must allow for duplicate tags with the same name in a single table! if ($tagIDs) { if (ref $tagIDs eq 'HASH') { $$tagIDs{$tagID} = 1; next; } elsif ($tagID eq $tagIDs) { next; } else { $tagIDs = { $tagIDs => 1, $tagID => 1 }; } } else { $tagIDs = $tagID; } $tableWritable{$tableName} = 1; $tagLookup{$lcName}->{$tableNum} = $tagIDs; if ($short eq 'Composite' and $$tagInfo{Module}) { $compositeModules{$lcName} = $$tagInfo{Module}; } } # # save TagName information # my $tagIDstr; if ($tagID =~ /^(-)?\d+(\.\d+)?$/) { if ($1) { $tagIDstr = $tagID; } elsif (defined $hexID) { $tagIDstr = $hexID ? sprintf('0x%.4x',$tagID) : $tagID; } elsif (not $2 and not $binaryTable and not $isIPTC and not ($short =~ /^CanonCustom/ and $tagID < 256)) { $tagIDstr = sprintf('0x%.4x',$tagID); } elsif ($tagID < 0x10000) { $tagIDstr = $tagID; } else { $tagIDstr = sprintf('0x%.8x',$tagID); } } elsif ($short eq 'DICOM') { ($tagIDstr = $tagID) =~ s/_/,/; } elsif ($tagID =~ /^0x([0-9a-f]+)\.(\d+)$/) { # DR4 tags like '0x20500.0' $tagIDstr = $tagID; } else { # convert non-printable characters to hex escape sequences if ($tagID =~ s/([\x00-\x1f\x7f-\xff])/'\x'.unpack('H*',$1)/eg) { $tagID =~ s/\\x00/\\0/g; next if $tagID eq 'jP\x1a\x1a'; # ignore abnormal JP2 signature tag $tagIDstr = qq{"$tagID"}; } else { $tagIDstr = "'$tagID'"; } } my $len = length $tagIDstr; $longID{$tableName} = $len if $longID{$tableName} < $len; foreach (@tagNames) { $len = length $_; $longName{$tableName} = $len if $longName{$tableName} < $len; } push @$info, [ $tagIDstr, \@tagNames, \@writable, \@values, \@require, \@writeGroup ]; } # do consistency check of writable BinaryData tables if ($processBinaryData and $$table{WRITABLE}) { my %lookup = ( IS_OFFSET => \%isOffset, IS_SUBDIR => \%hasSubdir, DATAMEMBER => \%datamember, ); my ($var, $tagID); foreach $var (sort keys %lookup) { my $hash = $lookup{$var}; if ($$table{$var}) { foreach $tagID (@{$$table{$var}}) { $$hash{$tagID} and delete($$hash{$tagID}), next; warn "Warning: Extra $var for $short tag $tagID\n"; } } foreach $tagID (sort keys %$hash) { warn "Warning: Missing $var for $short $$hash{$tagID}\n"; } } } } # save information about structures my $strName; foreach $strName (keys %structs) { my $struct = $structLookup{$strName}; my $fullName = ($strName =~ / / ? '' : 'XMP ') . "$strName Struct"; my $info = $tagNameInfo{$fullName} = [ ]; my $tag; foreach $tag (sort keys %$struct) { my $tagInfo = $$struct{$tag}; next unless ref $tagInfo eq 'HASH'; my $writable = $$tagInfo{Writable}; my @vals; unless ($writable) { $writable = $$tagInfo{Struct}; ref $writable and $writable = $$writable{STRUCT_NAME}; if ($writable) { push @vals, $writable; $structs{$writable} = 1; $writable = "=$writable"; } else { $writable = 'string'; } } $writable .= '+' if $$tagInfo{List}; push @$info, [ $tag, [ $$tagInfo{Name} || ucfirst($tag) ], [ $writable ], \@vals, [], [] ]; } } return $self; } #------------------------------------------------------------------------------ # Rewrite this file to build the lookup tables # Inputs: 0) BuildTagLookup object reference # 1) output tag lookup module name (eg. 'lib/Image/ExifTool/TagLookup.pm') # Returns: true on success sub WriteTagLookup($$) { local ($_, *INFILE, *OUTFILE); my ($self, $file) = @_; my $tagLookup = $self->{TAG_LOOKUP}; my $tagExists = $self->{TAG_EXISTS}; my $flattened = $self->{FLATTENED}; my $tableWritable = $self->{TABLE_WRITABLE}; # # open/create necessary files and transfer file headers # my $tmpFile = "${file}_tmp"; open(INFILE, $file) or warn("Can't open $file\n"), return 0; unless (open(OUTFILE, ">$tmpFile")) { warn "Can't create temporary file $tmpFile\n"; close(INFILE); return 0; } my $success; while (<INFILE>) { print OUTFILE $_ or last; if (/^#\+{4} Begin/) { $success = 1; last; } } print OUTFILE "\n# list of tables containing writable tags\n"; print OUTFILE "my \@tableList = (\n"; # # write table list # my @tableNames = sort keys %allTables; my $tableName; my %wrNum; # translate from allTables index to writable tables index my $count = 0; my $num = 0; foreach $tableName (@tableNames) { if ($$tableWritable{$tableName}) { print OUTFILE "\t'$tableName',\n"; $wrNum{$count} = $num++; } $count++; } # # write the tag lookup table # my $tag; # verify that certain critical tag names aren't duplicated foreach $tag (qw{filename directory}) { next unless $$tagLookup{$tag}; my $n = scalar keys %{$$tagLookup{$tag}}; warn "Warning: $n writable '$tag' tags!\n" if $n > 1; } print OUTFILE ");\n\n# lookup for all writable tags\nmy \%tagLookup = (\n"; foreach $tag (sort keys %$tagLookup) { print OUTFILE "\t'$tag' => { "; my @tableNums = sort { $a <=> $b } keys %{$$tagLookup{$tag}}; my (@entries, $tableNum); foreach $tableNum (@tableNums) { my $tagID = $$tagLookup{$tag}{$tableNum}; my $rootID = $$flattened{$tag}{$tableNum}; my $entry; if (ref $tagID eq 'HASH' or $rootID) { $tagID = { $tagID => 1 } unless ref $tagID eq 'HASH'; my @tagIDs = sort keys %$tagID; foreach (@tagIDs) { if (/^\d+$/) { $_ = sprintf('0x%x',$_); } else { my $quot = "'"; # escape non-printable characters in tag ID if necessary $quot = '"' if s/[\x00-\x1f,\x7f-\xff]/sprintf('\\x%.2x',ord($&))/ge; $_ = $quot . $_ . $quot; } } # reference to root structure ID must come first in lookup # (so we can generate the flattened tags just before we need them) unshift @tagIDs, "\\'$rootID'" if $rootID; $entry = '[' . join(',', @tagIDs) . ']'; } elsif ($tagID =~ /^\d+$/) { $entry = sprintf('0x%x',$tagID); } else { $entry = "'$tagID'"; } my $wrNum = $wrNum{$tableNum}; push @entries, "$wrNum => $entry"; } print OUTFILE join(', ', @entries); print OUTFILE " },\n"; } # # write tag exists lookup # print OUTFILE ");\n\n# lookup for non-writable tags to check if the name exists\n"; print OUTFILE "my \%tagExists = (\n"; foreach $tag (sort keys %$tagExists) { next if $$tagLookup{$tag}; print OUTFILE "\t'$tag' => 1,\n"; } # # write module lookup for writable composite tags # my $compositeModules = $self->{COMPOSITE_MODULES}; print OUTFILE ");\n\n# module names for writable Composite tags\n"; print OUTFILE "my \%compositeModules = (\n"; foreach (sort keys %$compositeModules) { print OUTFILE "\t'$_' => '$$compositeModules{$_}',\n"; } print OUTFILE ");\n\n"; # # finish writing TagLookup.pm and clean up # if ($success) { $success = 0; while (<INFILE>) { $success or /^#\+{4} End/ or next; print OUTFILE $_; $success = 1; } } close(INFILE); close(OUTFILE) or $success = 0; # # return success code # if ($success) { local (*ORG, *TMP); # only rename the file if something changed open ORG, $file or return 0; open TMP, $tmpFile or return 0; my ($buff, $buf2, $changed); for (;;) { my $n1 = read ORG, $buff, 65536; my $n2 = read TMP, $buf2, 65536; $n1 eq $n2 or $changed = 1, last; last unless $n1; $buff eq $buf2 or $changed = 1, last; } close ORG; close TMP; if ($changed) { rename($tmpFile, $file) or warn("Error renaming $tmpFile\n"), $success = 0; } else { unlink($tmpFile); } } else { unlink($tmpFile); warn "Error rewriting file\n"; } return $success; } #------------------------------------------------------------------------------ # Sort numbers first numerically, then strings alphabetically (case insensitive) # - two global variables are used to change the sort algorithm: # $numbersFirst: -1 = put numbers after other strings # 1 = put numbers before other strings # 2 = put numbers first, but negative numbers last # $caseInsensitive: flag set for case-insensitive sorting sub NumbersFirst($$) { my ($a, $b) = @_; my $rtnVal; my ($bNum, $bDec); ($bNum, $bDec) = ($1, $3) if $b =~ /^(-?[0-9]+)(\.(\d*))?$/; if ($a =~ /^(-?[0-9]+)(\.(\d*))?$/) { if (defined $bNum) { $bNum += 1e9 if $numbersFirst == 2 and $bNum < 0; my $aInt = $1; $aInt += 1e9 if $numbersFirst == 2 and $aInt < 0; # compare integer part as a number $rtnVal = $aInt <=> $bNum; unless ($rtnVal) { my $aDec = $3 || 0; $bDec or $bDec = 0; # compare decimal part as an integer too # (so that "1.10" comes after "1.9") $rtnVal = $aDec <=> $bDec; } } else { $rtnVal = -$numbersFirst; } } elsif (defined $bNum) { $rtnVal = $numbersFirst; } else { my ($a2, $b2) = ($a, $b); # expand numbers to 3 digits (with restrictions to avoid messing up ascii-hex tags) $a2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $a2 =~ /^(APP|DMC-\w+ )?[.0-9 ]*$/ and length($a2)<16; $b2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $b2 =~ /^(APP|DMC-\w+ )?[.0-9 ]*$/ and length($b2)<16; $caseInsensitive and $rtnVal = (lc($a2) cmp lc($b2)); $rtnVal or $rtnVal = ($a2 cmp $b2); } return $rtnVal; } #------------------------------------------------------------------------------ # Convert our pod-like documentation to pod # (funny, I know, but the pod headings must be hidden to prevent confusing # the pod parser) # Inputs: 0-N) documentation strings sub Doc2Pod($;@) { my $doc = shift; local $_; $doc .= shift while @_; $doc =~ s/\n~/\n=/g; $doc =~ s/L<[^>]+?\|(http[^>]+)>/L<$1>/g; # POD doesn't support text for http links $doc =~ s/L<([^>]+?)\|[^>]+\.html>/$1/g; # remove relative HTML links return $doc; } #------------------------------------------------------------------------------ # Convert our pod-like documentation to html # Inputs: 0) string sub Doc2Html($) { my $doc = EscapeHTML(shift); $doc =~ s/\n\n/<\/p>\n\n<p>/g; $doc =~ s/B&lt;(.*?)&gt;/<b>$1<\/b>/sg; $doc =~ s/C&lt;(.*?)&gt;/<code>$1<\/code>/sg; $doc =~ s/I&lt;(.*?)&gt;/<i>$1<\/i>/sg; # L<some text|http://owl.phy.queensu.ca/~phil/exiftool/struct.html#Fields> --> <a href="../struct.html#Fields">some text</a> $doc =~ s{L&lt;([^&]+?)\|\Q$homePage\E/(.*?)&gt;}{<a href="../$2">$1<\/a>}sg; # L<http://owl.phy.queensu.ca/~phil/exiftool/struct.html> --> <a href="http://owl.phy.queensu.ca/~phil/exiftool/struct.html">http://owl.phy.queensu.ca/~phil/exiftool/struct.html</a> $doc =~ s{L&lt;\Q$homePage\E/(.*?)&gt;}{<a href="../$1">$1<\/a>}sg; # L<XMP DICOM Tags|Image::ExifTool::TagNames/XMP DICOM Tags> --> <a href="XMP.html#DICOM">XMP DICOM Tags</a> # (specify "Image::ExifTool::TagNames" to link to another html file) $doc =~ s{L&lt;([^&]+?)\|Image::ExifTool::TagNames/(\w+) ([^/&|]+) Tags&gt;}{<a href="$2.html#$3">$1</a>}sg; # L<DICOM Tags|Image::ExifTool::TagNames/DICOM Tags> --> <a href="DICOM.html">DICOM Tags</a> $doc =~ s{L&lt;([^&]+?)\|Image::ExifTool::TagNames/(\w+) Tags&gt;}{<a href="$2.html">$1</a>}sg; # L<dc|/XMP dc Tags> --> <a href="#dc">dc</a> # (a relative POD link turns into a relative HTML link) $doc =~ s{L&lt;([^&]+?)\|/\w+ ([^/&|]+) Tags&gt;}{<a href="#$2">$1</a>}sg; # L<sample config file|../config.html> --> <a href="../config.html">sample config file</a> $doc =~ s/L&lt;([^&]+?)\|(.+?)&gt;/<a href="$2">$1<\/a>/sg; # L<http://some.web.site/> --> <a href="http://some.web.site">http://some.web.site</a> $doc =~ s/L&lt;(http.*?)&gt;/<a href="$1">$1<\/a>/sg; return $doc; } #------------------------------------------------------------------------------ # Tweak order of tables # Inputs: 0) table list ref, 1) reference to tweak hash sub TweakOrder($$) { my ($sortedTables, $tweakOrder) = @_; my @tweak = sort keys %$tweakOrder; while (@tweak) { my $table = shift @tweak; my $first = $$tweakOrder{$table}; if ($$tweakOrder{$first}) { push @tweak, $table; # must defer this till later next; } delete $$tweakOrder{$table}; # because the table won't move again my @moving = grep /^Image::ExifTool::$table\b/, @$sortedTables; my @notMoving = grep !/^Image::ExifTool::$table\b/, @$sortedTables; my @after; while (@notMoving) { last if $notMoving[-1] =~ /^Image::ExifTool::$first\b/; unshift @after, pop @notMoving; } @$sortedTables = (@notMoving, @moving, @after); } } #------------------------------------------------------------------------------ # Get a list of sorted tag ID's from a table # Inputs: 0) tag table ref # Returns: list of sorted keys sub SortedTagTableKeys($) { my $table = shift; my $vars = $$table{VARS} || { }; my @keys = TagTableKeys($table); if ($$vars{NO_ID}) { # sort by tag name if ID not shown my ($key, %name); foreach $key (@keys) { my ($tagInfo) = GetTagInfoList($table, $key); $name{$key} = $$tagInfo{Name}; } return sort { $name{$a} cmp $name{$b} or $a cmp $b } @keys; } else { my $sortProc = $$vars{SORT_PROC} || \&NumbersFirst; return sort { &$sortProc($a,$b) } @keys; } } #------------------------------------------------------------------------------ # Get the order that we want to print the tables in the documentation # Inputs: 0-N) Extra tables to add at end # Returns: tables in the order we want sub GetTableOrder(@) { my %gotTable; my @tableNames = @tableOrder; my (@orderedTables, %mainTables, @outOfOrder); my $lastTable = ''; while (@tableNames) { my $tableName = shift @tableNames; next if $gotTable{$tableName}; if ($tableName =~ /^Image::ExifTool::(\w+)::Main/) { $mainTables{$1} = 1; } elsif ($lastTable and not $tableName =~ /^${lastTable}::/) { push @outOfOrder, $tableName; } ($lastTable) = ($tableName =~ /^(Image::ExifTool::\w+)/); push @orderedTables, $tableName; $gotTable{$tableName} = 1; my $table = GetTagTable($tableName); # recursively scan through tables in subdirectories my @moreTables; $caseInsensitive = ($$table{GROUPS} and $$table{GROUPS}{0} eq 'XMP'); $numbersFirst = -1 if $$table{VARS} and $$table{VARS}{ALPHA_FIRST}; my @keys = SortedTagTableKeys($table); $numbersFirst = 1; foreach (@keys) { my @infoArray = GetTagInfoList($table,$_); my $tagInfo; foreach $tagInfo (@infoArray) { my $subdir = $$tagInfo{SubDirectory} or next; $tableName = $$subdir{TagTable} or next; next if $gotTable{$tableName}; # next if table already loaded push @moreTables, $tableName; # must scan this one too } } unshift @tableNames, @moreTables; } # clean up the order for tables which are out of order # (groups all Canon and Kodak tables together) my %fixOrder; foreach (@outOfOrder) { next unless /^Image::ExifTool::(\w+)/; # only re-order tables which have a corresponding main table next unless $mainTables{$1}; $fixOrder{$1} = []; # fix the order of these tables } my (@sortedTables, %fixPos, $pos); foreach (@orderedTables) { if (/^Image::ExifTool::(\w+)/ and $fixOrder{$1}) { my $fix = $fixOrder{$1}; unless (@$fix) { $pos = @sortedTables; $fixPos{$pos} or $fixPos{$pos} = []; push @{$fixPos{$pos}}, $1; } push @{$fix}, $_; } else { push @sortedTables, $_; } } # insert back in better order foreach $pos (sort { $b <=> $a } keys %fixPos) { # (reverse sort) my $fix = $fixPos{$pos}; foreach (@$fix) { splice(@sortedTables, $pos, 0, @{$fixOrder{$_}}); } } # add the extra tables push @sortedTables, @_; # tweak the table order TweakOrder(\@sortedTables, \%tweakOrder); return @sortedTables; } #------------------------------------------------------------------------------ # Open HTMLFILE and print header and description # Inputs: 0) Filename, 1) optional category # Returns: True on success my %createdFiles; sub OpenHtmlFile($;$$) { my ($htmldir, $category, $sepTable) = @_; my ($htmlFile, $head, $title, $url, $class); my $top = ''; if ($category) { my @names = split ' ', $category; $class = shift @names; $htmlFile = "$htmldir/TagNames/$class.html"; $head = $category; if ($head =~ /^\S+ .+ Struct$/) { pop @names; } else { $head .= ($sepTable ? ' Values' : ' Tags'); } ($title = $head) =~ s/ .* / /; @names and $url = join '_', @names; } else { $htmlFile = "$htmldir/TagNames/index.html"; $category = $class = 'ExifTool'; $head = $title = 'ExifTool Tag Names'; } if ($createdFiles{$htmlFile}) { open(HTMLFILE, ">>${htmlFile}_tmp") or return 0; } else { open(HTMLFILE, ">${htmlFile}_tmp") or return 0; print HTMLFILE "$docType<html>\n<head>\n<title>$title</title>\n"; print HTMLFILE "<link rel=stylesheet type='text/css' href='style.css' title='Style'>\n"; print HTMLFILE "</head>\n<body>\n"; if ($category ne $class and $docs{$class}) { print HTMLFILE "<h2 class=top>$class Tags</h2>\n" or return 0; print HTMLFILE '<p>',Doc2Html($docs{$class}),"</p>\n" or return 0; } else { $top = " class=top"; } } $head = "<a name='$url'>$head</a>" if $url; print HTMLFILE "<h2$top>$head</h2>\n" or return 0; print HTMLFILE '<p>',Doc2Html($docs{$category}),"</p>\n" if $docs{$category}; $createdFiles{$htmlFile} = 1; return 1; } #------------------------------------------------------------------------------ # Close all html files and write trailers # Returns: true on success # Inputs: 0) BuildTagLookup object reference sub CloseHtmlFiles($) { my $self = shift; my $preserveDate = $$self{PRESERVE_DATE}; my $success = 1; # get the date my ($sec,$min,$hr,$day,$mon,$yr) = localtime; my @month = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); $yr += 1900; my $date = "$month[$mon] $day, $yr"; my $htmlFile; my $countNewFiles = 0; my $countSameFiles = 0; foreach $htmlFile (keys %createdFiles) { my $tmpFile = $htmlFile . '_tmp'; my $fileDate = $date; if ($preserveDate) { my @lines = `grep '<i>Last revised' $htmlFile`; $fileDate = $1 if @lines and $lines[-1] =~ m{<i>Last revised (.*)</i>}; } open(HTMLFILE, ">>$tmpFile") or $success = 0, next; # write the trailers print HTMLFILE "<hr>\n"; print HTMLFILE "(This document generated automatically by Image::ExifTool::BuildTagLookup)\n"; print HTMLFILE "<br><i>Last revised $fileDate</i>\n"; print HTMLFILE "<p class=lf><a href="; if ($htmlFile =~ /index\.html$/) { print HTMLFILE "'../index.html'>&lt;-- Back to ExifTool home page</a></p>\n"; } else { print HTMLFILE "'index.html'>&lt;-- ExifTool Tag Names</a></p>\n" } print HTMLFILE "</body>\n</html>\n" or $success = 0; close HTMLFILE or $success = 0; # check for differences and only use new file if it was changed # (so the date only gets updated if changes were really made) my $useNewFile; if ($success) { open (TEMPFILE, $tmpFile) or $success = 0, last; if (open (HTMLFILE, $htmlFile)) { while (<HTMLFILE>) { my $newLine = <TEMPFILE>; if (defined $newLine) { next if /^<br><i>Last revised/; next if $_ eq $newLine; } # files are different -- use the new file $useNewFile = 1; last; } $useNewFile = 1 if <TEMPFILE>; close HTMLFILE; } else { $useNewFile = 1; } close TEMPFILE; if ($useNewFile) { ++$countNewFiles; rename $tmpFile, $htmlFile or warn("Error renaming temporary file\n"), $success = 0; } else { ++$countSameFiles; unlink $tmpFile; # erase new file and use existing file } } last unless $success; } # save number of files processed so we can check the results later $self->{COUNT}->{'HTML files changed'} = $countNewFiles; $self->{COUNT}->{'HTML files unchanged'} = $countSameFiles; return $success; } #------------------------------------------------------------------------------ # Write the TagName HTML and POD documentation # Inputs: 0) BuildTagLookup object reference # 1) output pod file (eg. 'lib/Image/ExifTool/TagNames.pod') # 2) output html directory (eg. 'html') # Returns: true on success # Notes: My apologies for the patchwork code, but this is only used to generate the docs. sub WriteTagNames($$) { my ($self, $podFile, $htmldir) = @_; my ($tableName, $short, $url, @sepTables, @structs); my $tagNameInfo = $self->{TAG_NAME_INFO} or return 0; my $idLabel = $self->{ID_LOOKUP}; my $shortName = $self->{SHORT_NAME}; my $sepTable = $self->{SEPARATE_TABLE}; my $structs = $self->{STRUCTURES}; my $structLookup = $self->{STRUCT_LOOKUP}; my $success = 1; my $columns = 6; # number of columns in html index my $percent = int(100 / $columns); # open the file and write the header open(PODFILE, ">$podFile") or return 0; print PODFILE Doc2Pod($docs{PodHeader}, $docs{ExifTool}, $docs{ExifTool2}); mkdir "$htmldir/TagNames"; OpenHtmlFile($htmldir) or return 0; print HTMLFILE "<blockquote>\n"; print HTMLFILE "<table width='100%' class=frame><tr><td>\n"; print HTMLFILE "<table width='100%' class=inner cellspacing=1><tr class=h>\n"; print HTMLFILE "<th colspan=$columns><span class=l>Tag Table Index</span></th></tr>\n"; print HTMLFILE "<tr class=b><td width='$percent%'>\n"; # get the full table list, adding shortcuts and plug-in tables to the end my @tableNames = GetTableOrder('Image::ExifTool::Shortcuts::Main', @pluginTables); # get list of headings and add any missing ones my $heading = 'xxx'; my (@tableIndexNames, @headings); foreach $tableName (@tableNames) { $short = $$shortName{$tableName}; my @names = split ' ', $short; my $class = shift @names; if (@names) { # add heading for tables without a Main unless ($heading eq $class) { $heading = $class; push @tableIndexNames, $heading; push @headings, $heading; } } else { $heading = $short; push @headings, $heading; } push @tableIndexNames, $tableName; } @tableNames = @tableIndexNames; # print html index of headings only my $count = 0; my $lines = int((scalar(@headings) + $columns - 1) / $columns); foreach $tableName (@headings) { if ($count) { if ($count % $lines) { print HTMLFILE "<br>\n"; } else { print HTMLFILE "</td><td width='$percent%'>\n"; } } $short = $$shortName{$tableName}; $short = $tableName unless $short; $url = "$short.html"; print HTMLFILE "<a href='$url'>$short</a>"; ++$count; } print HTMLFILE "\n</td></tr></table></td></tr></table></blockquote>\n"; print HTMLFILE '<p>',Doc2Html($docs{ExifTool2}),"</p>\n"; # write all the tag tables while (@tableNames or @sepTables or @structs) { while (@sepTables) { $tableName = shift @sepTables; my $printConv = $$sepTable{$tableName}; next unless ref $printConv eq 'HASH'; $$sepTable{$tableName} = 1; my $notes = $$printConv{Notes}; if ($notes) { # remove unnecessary whitespace $notes =~ s/^\s+//; $notes =~ s/\s+$//; $notes =~ s/(^[ \t]+|[ \t]+$)//mg; } my $head = $tableName; $head =~ s/^.* //s; close HTMLFILE; if (OpenHtmlFile($htmldir, $tableName, 1)) { print HTMLFILE '<p>', Doc2Html($notes), "</p>\n" if $notes; print HTMLFILE "<blockquote>\n"; print HTMLFILE "<table class=frame><tr><td>\n"; print HTMLFILE "<table class='inner sep' cellspacing=1>\n"; my $align = ' class=r'; my $wid = 0; my @keys; foreach (sort { NumbersFirst($a,$b) } keys %$printConv) { next if /^(Notes|PrintHex|PrintString|OTHER)$/; $align = '' if $align and /[^\d]/; my $w = length($_) + length($$printConv{$_}); $wid = $w if $wid < $w; push @keys, $_; } $wid = length($tableName)+7 if $wid < length($tableName)+7; # print in multiple columns if there is room my $cols = int(110 / ($wid + 4)); $cols = 1 if $cols < 1 or $cols > @keys or @keys < 4; my $rows = int((scalar(@keys) + $cols - 1) / $cols); my ($r, $c); print HTMLFILE '<tr class=h>'; for ($c=0; $c<$cols; ++$c) { print HTMLFILE "<th>Value</th><th>$head</th>"; } print HTMLFILE "</tr>\n"; for ($r=0; $r<$rows; ++$r) { print HTMLFILE '<tr>'; for ($c=0; $c<$cols; ++$c) { my $key = $keys[$r + $c*$rows]; my ($index, $prt); if (defined $key) { $index = $key; $prt = '= ' . EscapeHTML($$printConv{$key}); if ($$printConv{PrintHex}) { $index = sprintf('0x%x',$index); } elsif ($$printConv{PrintString} or $index !~ /^[+-]?(?=\d|\.\d)\d*(\.\d*)?$/) { $index = "'" . EscapeHTML($index) . "'"; } } else { $index = $prt = '&nbsp;'; } my ($ic, $pc); if ($c & 0x01) { $pc = ' class=b'; $ic = $align ? " class='r b'" : $pc; } else { $ic = $align; $pc = ''; } print HTMLFILE "<td$ic>$index</td><td$pc>$prt</td>\n"; } print HTMLFILE '</tr>'; } print HTMLFILE "</table></td></tr></table></blockquote>\n\n"; } } last unless @tableNames or @structs; my $isStruct; if (@structs) { $tableName = shift @structs; next if $$structs{$tableName} == 2; # only list each structure once $$structs{$tableName} = 2; $isStruct = $$structLookup{$tableName}; $isStruct or warn("Missing structure $tableName\n"), next; $tableName = "XMP $tableName" unless $tableName =~ / /; $short = $tableName = "$tableName Struct"; my $maxLen = 0; $maxLen < length and $maxLen = length foreach keys %$isStruct; $$self{LONG_ID}{$tableName} = $maxLen; } else { $tableName = shift @tableNames; $short = $$shortName{$tableName}; unless ($short) { # this is just an index heading print PODFILE "\n=head2 $tableName Tags\n"; print PODFILE Doc2Pod($docs{$tableName}) if $docs{$tableName}; next; } } my $isExif = ($tableName eq 'Image::ExifTool::Exif::Main'); my $isRiff = ($tableName eq 'Image::ExifTool::RIFF::Info'); my $isXmpMain = ($tableName eq 'Image::ExifTool::XMP::Main'); my $info = $$tagNameInfo{$tableName}; my $id = $$idLabel{$tableName}; my ($hid, $showGrp); # widths of the different columns in the POD documentation my ($wID,$wTag,$wReq,$wGrp) = (8,36,24,10); my ($composite, $derived, $notes, $longTags, $wasLong, $prefix); if ($short eq 'Shortcuts') { $derived = '<th>Refers To</th>'; $composite = 2; } elsif ($isStruct) { $derived = ''; $notes = $$isStruct{NOTES}; } else { my $table = GetTagTable($tableName); $notes = $$table{NOTES}; $longTags = $$table{VARS}{LONG_TAGS} if $$table{VARS}; if ($$table{GROUPS}{0} eq 'Composite') { $composite = 1; $derived = '<th>Derived From</th>'; } else { $composite = 0; $derived = ''; } } my $podIdLen = $self->{LONG_ID}->{$tableName}; if ($notes) { # remove unnecessary whitespace $notes =~ s/^\s+//; $notes =~ s/\s+$//; $notes =~ s/(^[ \t]+|[ \t]+$)//mg; if ($notes =~ /leading '(.*?_)' which/) { $prefix = $1; $podIdLen -= length $prefix; } } if ($podIdLen <= $wID) { $podIdLen = $wID; } elsif ($short eq 'DICOM') { $podIdLen = 10; } else { # align tag names in secondary columns if possible my $col = ($podIdLen <= 10) ? 12 : 20; $podIdLen = $col if $podIdLen < $col; } if ($id) { ($hid = "<th>$id</th>") =~ s/ /&nbsp;/g; $wTag -= $podIdLen - $wID; $wID = $podIdLen; my $longTag = $self->{LONG_NAME}->{$tableName}; if ($wTag < $longTag) { if ($wID - $longTag + $wTag >= 6) { # don't let ID column get too narrow $wID -= $longTag - $wTag; $wTag = $longTag; } $wasLong = 1 if $wID <= $self->{LONG_ID}->{$tableName}; } } elsif ($composite) { $wTag += $wID - $wReq; $hid = ''; } else { $wTag += 9; $hid = ''; } if ($short eq 'EXIF' or $short eq 'Extra') { $derived = '<th>Group</th>'; $showGrp = 1; $wGrp += 8 if $short eq 'Extra'; # tweak Group column width for "Extra" tags $wTag -= $wGrp + 1; } my $head = ($short =~ / /) ? 'head3' : 'head2'; my $str = $isStruct ? '' : ' Tags'; print PODFILE "\n=$head $short$str\n"; print PODFILE Doc2Pod($docs{$short}) if $docs{$short}; print PODFILE "\n", Doc2Pod($notes), "\n" if $notes; my $line = "\n"; if ($id) { # shift over 'Index' heading by one character for a bit more balance $id = " $id" if $id eq 'Index'; $line .= sprintf " %-${wID}s", $id; } else { $line .= ' '; } my $tagNameHeading = ($short eq 'XMP') ? 'Namespace' : ($isStruct?'Field':'Tag').' Name'; $line .= sprintf " %-${wTag}s", $tagNameHeading; $line .= sprintf " %-${wReq}s", $composite == 2 ? 'Refers To' : 'Derived From' if $composite; $line .= sprintf " %-${wGrp}s", 'Group' if $showGrp; $line .= ' Writable'; print PODFILE $line; $line =~ s/^(\s*\w.{6}\w) /$1\t/; # change space to tab after long ID label (eg. "Sequence") $line =~ s/\S/-/g; $line =~ s/- -/---/g; $line =~ tr/\t/ /; # change tab back to space print PODFILE $line,"\n"; close HTMLFILE; OpenHtmlFile($htmldir, $short) or $success = 0; print HTMLFILE '<p>',Doc2Html($notes), "</p>\n" if $notes; print HTMLFILE "<blockquote>\n"; print HTMLFILE "<table class=frame><tr><td>\n"; print HTMLFILE "<table class=inner cellspacing=1>\n"; print HTMLFILE "<tr class=h>$hid<th>$tagNameHeading</th>\n"; print HTMLFILE "<th>Writable</th>$derived<th>Values / ${noteFont}Notes</span></th></tr>\n"; my $rowClass = 1; my $infoCount = 0; my $infoList; foreach $infoList (@$info) { ++$infoCount; my ($tagIDstr, $tagNames, $writable, $values, $require, $writeGroup) = @$infoList; my ($align, $idStr, $w, $tip); my $wTag2 = $wTag; if (not $id) { $idStr = ' '; } elsif ($tagIDstr =~ /^-?\d+(\.\d+)?$/) { $w = $wID - 3; $idStr = sprintf " %${w}g ", $tagIDstr; $align = " class=r"; } else { $tagIDstr =~ s/^'$prefix/'/ if $prefix; $w = $wID; my $over = length($tagIDstr) - $w; if ($over > 0) { # shift over tag name if there is room if ($over <= $wTag - length($$tagNames[0])) { $wTag2 -= $over; $w += $over; } else { # put tag name on next line if ID is too long $idStr = " $tagIDstr\n " . (' ' x $w); if ($longTags) { --$longTags; } else { warn "Notice: Split $$tagNames[0] line\n"; } } } $idStr = sprintf " %-${w}s ", $tagIDstr unless defined $idStr; $align = ''; } my @reqs; my @tags = @$tagNames; my @wGrp = @$writeGroup; my @vals = @$writable; my $wrStr = shift @vals; my $subdir; my @masks = grep /^\[Mask 0x[\da-f]+\]/, @$values; my $tag = shift @tags; # if this is a subdirectory or structure, print subdir name (from values) instead of writable if ($wrStr =~ /^[-=]/) { $subdir = 1; if (@masks) { # combine any mask into the format string $wrStr .= " & $1" if $masks[0] =~ /(0x[\da-f]+)/; shift @masks; @vals = grep !/^\[Mask 0x[\da-f]+\]/, @$values; } else { @vals = @$values; } # remove Notes if subdir has Notes as well shift @vals if $vals[0] =~ /^\(/ and @vals >= @$writable; foreach (@vals) { /^\(/ and $_ = '-' } my $i; # fill in any missing entries from non-directory tags for ($i=0; $i<@$writable; ++$i) { $vals[$i] = $$writable[$i] unless defined $vals[$i]; if (@masks) { $vals[$i] .= " & $1" if $masks[0] =~ /(0x[\da-f]+)/; shift @masks; } } if ($$sepTable{$vals[0]}) { $wrStr =~ s/^[-=]//; $wrStr = 'N' unless $wrStr; } elsif ($$structs{$vals[0]}) { my $flags = $wrStr =~ /([+_]+)$/ ? $1 : ''; $wrStr = "$vals[0] Struct$flags"; } else { $wrStr = $vals[0]; } shift @vals; } elsif ($wrStr and $wrStr ne 'N' and @masks) { # fill in missing entries if masks are different my $mask = shift @masks; while (@masks > @vals) { last if $masks[@vals] eq $mask; push @vals, $wrStr; push @tags, $tag if @tags < @vals; } # add Mask to Writable column in POD doc $wrStr .= " & $1" if $mask =~ /(0x[\da-f]+)/; } printf PODFILE "%s%-${wTag2}s", $idStr, $tag; my $tGrp = $wGrp; if ($id and length($tag) > $wTag2) { my $madeRoom; if ($showGrp) { my $wGrp0 = length($wGrp[0] || '-'); if (not $composite and $wGrp > $wGrp0) { $tGrp = $wGrp - (length($tag) - $wTag2); if ($tGrp < length $wGrp0) { $tGrp = length $wGrp0; } else { $madeRoom = 1; } } } warn "Warning: Pushed $tag\n" unless $madeRoom; } printf PODFILE " %-${tGrp}s", shift(@wGrp) || '-' if $showGrp; if ($composite) { @reqs = @$require; $w = $wReq; # Keep writable column in line length($tag) > $wTag2 and $w -= length($tag) - $wTag2; printf PODFILE " %-${w}s", shift(@reqs) || ''; } print PODFILE " $wrStr\n"; my $numTags = scalar @$tagNames; my $n = 0; while (@tags or @reqs or @vals) { my $more = (@tags or @reqs); $line = ' '; $line .= ' 'x($wID+1) if $id; $line .= sprintf("%-${wTag2}s", shift(@tags) || ''); $line .= sprintf(" %-${wReq}s", shift(@reqs) || '') if $composite; $line .= sprintf(" %-${wGrp}s", shift(@wGrp) || '-') if $showGrp; ++$n; if (@vals) { my $val = shift @vals; # use writable if this is a note my $wrStr = $$writable[$n]; if ($subdir and ($val =~ /^\(/ or $val =~ /=/ or ($wrStr and $wrStr !~ /^[-=]/))) { $val = $wrStr; if (defined $val) { $val =~ s/^[-=]//; } else { # done with tag if nothing else to print last unless $more; } } if (defined $val) { $line .= " $val"; if (@masks) { $line .= " & $1" if $masks[0] =~ /(0x[\da-f]+)/; shift @masks; } } } $line =~ s/\s+$//; # trim trailing white space print PODFILE "$line\n"; } my @htmlTags; foreach (@$tagNames) { push @htmlTags, EscapeHTML($_); } if (($isExif and $exifSpec{hex $tagIDstr}) or ($isRiff and $tagIDstr=~/(\w+)/ and $riffSpec{$1}) or ($isXmpMain and $tagIDstr=~/([-\w]+)/ and $xmpSpec{$1})) { # underline "unknown" makernote tags only my $n = $tagIDstr eq '0x927c' ? -1 : 0; $htmlTags[$n] = "<u>$htmlTags[$n]</u>"; } $rowClass = $rowClass ? '' : " class=b"; my $isSubdir; if ($$writable[0] =~ /^[-=]/) { $isSubdir = 1; s/^[-=](.+)/$1/ foreach @$writable; } # add tooltip for hex conversion of Tag ID if ($tagIDstr =~ /^(0x[0-9a-f]+)(\.\d+)?$/i) { $tip = sprintf(" title='$tagIDstr = %u%s'", hex($1), $2||''); } elsif ($tagIDstr =~ /^(\d+)(\.\d*)?$/) { $tip = sprintf(" title='%u = 0x%x'", $1, $1); } else { $tip = ''; # use copyright symbol in QuickTime UserData tags $tagIDstr =~ s/^"\\xa9/"&copy;/; } # add tooltip for special writable attributes my $wtip = ''; my %wattr = ( '_' => 'Flattened', '+' => 'List', '/' => 'Avoided', '~' => 'Writable only with -n', '!' => 'Unsafe', '*' => 'Protected', ':' => 'Mandatory', ); my ($wstr, %hasAttr, @hasAttr); foreach $wstr (@$writable) { next unless $wstr =~ m{([+/~!*:_]+)$}; my @a = split //, $1; foreach (@a) { next if $hasAttr{$_}; push @hasAttr, $_; $hasAttr{$_} = 1; } } if (@hasAttr) { $wtip = " title='"; my $n = 0; foreach (@hasAttr) { $wtip .= "\n" if $n; $wtip .= " $_ = $wattr{$_}"; ++$n; } $wtip .= "'"; } # print this row in the tag table print HTMLFILE "<tr$rowClass>\n"; print HTMLFILE "<td$align$tip>$tagIDstr</td>\n" if $id; print HTMLFILE "<td>", join("\n <br>",@htmlTags), "</td>\n"; print HTMLFILE "<td class=c$wtip>",join('<br>',@$writable),"</td>\n"; print HTMLFILE '<td class=n>',join("\n <br>",@$require),"</td>\n" if $composite; print HTMLFILE "<td class=c>",join('<br>',@$writeGroup),"</td>\n" if $showGrp; print HTMLFILE "<td>"; if (@$values) { if ($isSubdir) { my ($smallNote, @values); foreach (@$values) { if (/^\(/) { # set the note font $smallNote = 1 if $numTags < 2; push @values, ($smallNote ? $noteFontSmall : $noteFont) . "$_</span>"; next; } # make text in square brackets small if (/^\[/) { if (s/^\[!HTML\]//) { push @values, $_; } else { push @values, "<span class=s>$_</span>"; } next; } /=/ and push(@values, $_), next; my @names = split; my $suffix = ' Tags'; if ($$sepTable{$_}) { push @sepTables, $_; $suffix = ' Values'; } # handle structures specially if ($$structs{$_}) { # assume XMP module for this struct unless otherwise specified unshift @names, 'XMP' unless / /; push @structs, $_; # list this later # hack to put Area Struct in with XMP tags, # even though it is only used by the MWG module push @structs, 'Area' if $_ eq 'Dimensions'; $suffix = ' Struct'; } $url = (shift @names) . '.html'; @names and $url .= '#' . join '_', @names; push @values, "--&gt; <a href='$url'>$_$suffix</a>"; } # put small note last $smallNote and push @values, shift @values; print HTMLFILE join("\n <br>",@values); } else { my ($close, $br) = ('', ''); foreach (@$values) { if (s/^\[!HTML\]//) { print HTMLFILE $close if $close; print HTMLFILE $_; $close = $br = ''; } else { if (/^\(/) { # notes can use POD syntax $_ = $noteFont . Doc2Html($_) . "</span>"; } else { $_ = EscapeHTML($_); } $close or $_ = "<span class=s>$_", $close = '</span>'; print HTMLFILE $br, $_; $br = "\n <br>"; } } print HTMLFILE $close if $close; } } else { print HTMLFILE '&nbsp;'; } print HTMLFILE "</td></tr>\n"; } warn "$longTags unaccounted-for long tags in $tableName\n" if $longTags; if ($wasLong and not defined $longTags) { warn "Notice: Long tags in $tableName table\n"; } unless ($infoCount) { print PODFILE " [no tags known]\n"; my $cols = 3; ++$cols if $hid; ++$cols if $derived; print HTMLFILE "<tr><td colspan=$cols class=c><i>[no tags known]</i></td></tr>\n"; } print HTMLFILE "</table></td></tr></table></blockquote>\n\n"; } close(HTMLFILE) or $success = 0; CloseHtmlFiles($self) or $success = 0; print PODFILE Doc2Pod($docs{PodTrailer}) or $success = 0; close(PODFILE) or $success = 0; return $success; } 1; # end __END__ =head1 NAME Image::ExifTool::BuildTagLookup - Build ExifTool tag lookup tables =head1 DESCRIPTION This module is used to generate the tag lookup tables in Image::ExifTool::TagLookup.pm and tag name documentation in Image::ExifTool::TagNames.pod, as well as HTML tag name documentation. It is used before each new ExifTool release to update the lookup tables and documentation, but it is not used otherwise. =head1 SYNOPSIS use Image::ExifTool::BuildTagLookup; $builder = new Image::ExifTool::BuildTagLookup; $ok = $builder->WriteTagLookup('lib/Image/ExifTool/TagLookup.pm'); $ok = $builder->WriteTagNames('lib/Image/ExifTool/TagNames.pod','html'); =head1 MEMBER VARIABLES =over 4 =item PRESERVE_DATE Flag to preserve "Last revised" date in HTML files. Set before calling WriteTagNames(). =item COUNT Reference to hash containing counting statistics. Keys are the descriptions, and values are the numerical counts. Valid after BuildTagLookup object is created, but additional statistics are added by WriteTagNames(). =back =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagLookup(3pm)|Image::ExifTool::TagLookup>, L<Image::ExifTool::TagNames(3pm)|Image::ExifTool::TagNames> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/BZZ.pm������������������������������������������������������000644 �000765 �000024 �00000042725 12642461264 020730� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: BZZ.pm # # Description: Utility to decode BZZ compressed data # # Revisions: 09/22/2008 - P. Harvey Created # # References: 1) http://djvu.sourceforge.net/ # 2) http://www.djvu.org/ # # Notes: This code based on ZPCodec and BSByteStream of DjVuLibre 3.5.21 # (see NOTES documentation below for license/copyright details) #------------------------------------------------------------------------------ package Image::ExifTool::BZZ; use strict; use integer; # IMPORTANT!! use integer arithmetic throughout require Exporter; use vars qw($VERSION @ISA @EXPORT_OK); $VERSION = '1.00'; @ISA = qw(Exporter); @EXPORT_OK = qw(Decode); # constants sub FREQMAX { 4 } sub CTXIDS { 3 } sub MAXBLOCK { 4096 } # This table has been designed for the ZPCoder # by running the following command in file 'zptable.sn': # (fast-crude (steady-mat 0.0035 0.0002) 260))) my @default_ztable_p = ( 0x8000, 0x8000, 0x8000, 0x6bbd, 0x6bbd, 0x5d45, 0x5d45, 0x51b9, 0x51b9, 0x4813, 0x4813, 0x3fd5, 0x3fd5, 0x38b1, 0x38b1, 0x3275, 0x3275, 0x2cfd, 0x2cfd, 0x2825, 0x2825, 0x23ab, 0x23ab, 0x1f87, 0x1f87, 0x1bbb, 0x1bbb, 0x1845, 0x1845, 0x1523, 0x1523, 0x1253, 0x1253, 0x0fcf, 0x0fcf, 0x0d95, 0x0d95, 0x0b9d, 0x0b9d, 0x09e3, 0x09e3, 0x0861, 0x0861, 0x0711, 0x0711, 0x05f1, 0x05f1, 0x04f9, 0x04f9, 0x0425, 0x0425, 0x0371, 0x0371, 0x02d9, 0x02d9, 0x0259, 0x0259, 0x01ed, 0x01ed, 0x0193, 0x0193, 0x0149, 0x0149, 0x010b, 0x010b, 0x00d5, 0x00d5, 0x00a5, 0x00a5, 0x007b, 0x007b, 0x0057, 0x0057, 0x003b, 0x003b, 0x0023, 0x0023, 0x0013, 0x0013, 0x0007, 0x0007, 0x0001, 0x0001, 0x5695, 0x24ee, 0x8000, 0x0d30, 0x481a, 0x0481, 0x3579, 0x017a, 0x24ef, 0x007b, 0x1978, 0x0028, 0x10ca, 0x000d, 0x0b5d, 0x0034, 0x078a, 0x00a0, 0x050f, 0x0117, 0x0358, 0x01ea, 0x0234, 0x0144, 0x0173, 0x0234, 0x00f5, 0x0353, 0x00a1, 0x05c5, 0x011a, 0x03cf, 0x01aa, 0x0285, 0x0286, 0x01ab, 0x03d3, 0x011a, 0x05c5, 0x00ba, 0x08ad, 0x007a, 0x0ccc, 0x01eb, 0x1302, 0x02e6, 0x1b81, 0x045e, 0x24ef, 0x0690, 0x2865, 0x09de, 0x3987, 0x0dc8, 0x2c99, 0x10ca, 0x3b5f, 0x0b5d, 0x5695, 0x078a, 0x8000, 0x050f, 0x24ee, 0x0358, 0x0d30, 0x0234, 0x0481, 0x0173, 0x017a, 0x00f5, 0x007b, 0x00a1, 0x0028, 0x011a, 0x000d, 0x01aa, 0x0034, 0x0286, 0x00a0, 0x03d3, 0x0117, 0x05c5, 0x01ea, 0x08ad, 0x0144, 0x0ccc, 0x0234, 0x1302, 0x0353, 0x1b81, 0x05c5, 0x24ef, 0x03cf, 0x2b74, 0x0285, 0x201d, 0x01ab, 0x1715, 0x011a, 0x0fb7, 0x00ba, 0x0a67, 0x01eb, 0x06e7, 0x02e6, 0x0496, 0x045e, 0x030d, 0x0690, 0x0206, 0x09de, 0x0155, 0x0dc8, 0x00e1, 0x2b74, 0x0094, 0x201d, 0x0188, 0x1715, 0x0252, 0x0fb7, 0x0383, 0x0a67, 0x0547, 0x06e7, 0x07e2, 0x0496, 0x0bc0, 0x030d, 0x1178, 0x0206, 0x19da, 0x0155, 0x24ef, 0x00e1, 0x320e, 0x0094, 0x432a, 0x0188, 0x447d, 0x0252, 0x5ece, 0x0383, 0x8000, 0x0547, 0x481a, 0x07e2, 0x3579, 0x0bc0, 0x24ef, 0x1178, 0x1978, 0x19da, 0x2865, 0x24ef, 0x3987, 0x320e, 0x2c99, 0x432a, 0x3b5f, 0x447d, 0x5695, 0x5ece, 0x8000, 0x8000, 0x5695, 0x481a, 0x481a, 0, 0, 0, 0, 0 ); my @default_ztable_m = ( 0x0000, 0x0000, 0x0000, 0x10a5, 0x10a5, 0x1f28, 0x1f28, 0x2bd3, 0x2bd3, 0x36e3, 0x36e3, 0x408c, 0x408c, 0x48fd, 0x48fd, 0x505d, 0x505d, 0x56d0, 0x56d0, 0x5c71, 0x5c71, 0x615b, 0x615b, 0x65a5, 0x65a5, 0x6962, 0x6962, 0x6ca2, 0x6ca2, 0x6f74, 0x6f74, 0x71e6, 0x71e6, 0x7404, 0x7404, 0x75d6, 0x75d6, 0x7768, 0x7768, 0x78c2, 0x78c2, 0x79ea, 0x79ea, 0x7ae7, 0x7ae7, 0x7bbe, 0x7bbe, 0x7c75, 0x7c75, 0x7d0f, 0x7d0f, 0x7d91, 0x7d91, 0x7dfe, 0x7dfe, 0x7e5a, 0x7e5a, 0x7ea6, 0x7ea6, 0x7ee6, 0x7ee6, 0x7f1a, 0x7f1a, 0x7f45, 0x7f45, 0x7f6b, 0x7f6b, 0x7f8d, 0x7f8d, 0x7faa, 0x7faa, 0x7fc3, 0x7fc3, 0x7fd7, 0x7fd7, 0x7fe7, 0x7fe7, 0x7ff2, 0x7ff2, 0x7ffa, 0x7ffa, 0x7fff, 0x7fff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); my @default_ztable_up = ( 84, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 81, 82, 9, 86, 5, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 82, 99, 76, 101, 70, 103, 66, 105, 106, 107, 66, 109, 60, 111, 56, 69, 114, 65, 116, 61, 118, 57, 120, 53, 122, 49, 124, 43, 72, 39, 60, 33, 56, 29, 52, 23, 48, 23, 42, 137, 38, 21, 140, 15, 142, 9, 144, 141, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 70, 157, 66, 81, 62, 75, 58, 69, 54, 65, 50, 167, 44, 65, 40, 59, 34, 55, 30, 175, 24, 177, 178, 179, 180, 181, 182, 183, 184, 69, 186, 59, 188, 55, 190, 51, 192, 47, 194, 41, 196, 37, 198, 199, 72, 201, 62, 203, 58, 205, 54, 207, 50, 209, 46, 211, 40, 213, 36, 215, 30, 217, 26, 219, 20, 71, 14, 61, 14, 57, 8, 53, 228, 49, 230, 45, 232, 39, 234, 35, 138, 29, 24, 25, 240, 19, 22, 13, 16, 13, 10, 7, 244, 249, 10, 89, 230, 0, 0, 0, 0, 0 ); my @default_ztable_dn = ( 145, 4, 3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 226, 6, 176, 143, 138, 141, 112, 135, 104, 133, 100, 129, 98, 127, 72, 125, 102, 123, 60, 121, 110, 119, 108, 117, 54, 115, 48, 113, 134, 59, 132, 55, 130, 51, 128, 47, 126, 41, 62, 37, 66, 31, 54, 25, 50, 131, 46, 17, 40, 15, 136, 7, 32, 139, 172, 9, 170, 85, 168, 248, 166, 247, 164, 197, 162, 95, 160, 173, 158, 165, 156, 161, 60, 159, 56, 71, 52, 163, 48, 59, 42, 171, 38, 169, 32, 53, 26, 47, 174, 193, 18, 191, 222, 189, 218, 187, 216, 185, 214, 61, 212, 53, 210, 49, 208, 45, 206, 39, 204, 195, 202, 31, 200, 243, 64, 239, 56, 237, 52, 235, 48, 233, 44, 231, 38, 229, 34, 227, 28, 225, 22, 223, 16, 221, 220, 63, 8, 55, 224, 51, 2, 47, 87, 43, 246, 37, 244, 33, 238, 27, 236, 21, 16, 15, 8, 241, 242, 7, 10, 245, 2, 1, 83, 250, 2, 143, 246, 0, 0, 0, 0, 0 ); #------------------------------------------------------------------------------ # New - create new BZZ object # Inputs: 0) reference to BZZ object or BZZ class name # Returns: blessed BZZ object ref sub new { local $_; my $that = shift; my $class = ref($that) || $that || 'Image::ExifTool::BZZ'; return bless {}, $class; } #------------------------------------------------------------------------------ # Initialize BZZ object # Inputs: 0) BZZ object ref, 1) data ref, 2) true for DjVu compatibility sub Init($$) { my ($self, $dataPt, $djvucompat) = @_; # Create machine independent ffz table my $ffzt = $$self{ffzt} = [ ]; my ($i, $j); for ($i=0; $i<256; $i++) { $$ffzt[$i] = 0; for ($j=$i; $j&0x80; $j<<=1) { $$ffzt[$i] += 1; } } # Initialize table $$self{p} = [ @default_ztable_p ]; $$self{'m'} = [ @default_ztable_m ]; $$self{up} = [ @default_ztable_up ]; $$self{dn} = [ @default_ztable_dn ]; # Patch table (and lose DjVu compatibility) unless ($djvucompat) { my ($p, $m, $dn) = ($$self{p}, $$self{'m'}, $$self{dn}); for ($j=0; $j<256; $j++) { my $a = (0x10000 - $$p[$j]) & 0xffff; while ($a >= 0x8000) { $a = ($a<<1) & 0xffff } if ($$m[$j]>0 && $a+$$p[$j]>=0x8000 && $a>=$$m[$j]) { $$dn[$j] = $default_ztable_dn[$default_ztable_dn[$j]]; } } } $$self{ctx} = [ (0) x 300 ]; $$self{DataPt} = $dataPt; $$self{Pos} = 0; $$self{DataLen} = length $$dataPt; $$self{a} = 0; $$self{buffer} = 0; $$self{fence} = 0; $$self{blocksize} = 0; # Read first 16 bits of code if (length($$dataPt) >= 2) { $$self{code} = unpack('n', $$dataPt); $$self{Pos} += 2; } elsif (length($$dataPt) >= 1) { $$self{code} = (unpack('C', $$dataPt) << 8) | 0xff; $$self{Pos}++; } else { $$self{code} = 0xffff; } $$self{byte} = $$self{code} & 0xff; # Preload buffer $$self{delay} = 25; $$self{scount} = 0; # Compute initial fence $$self{fence} = $$self{code} >= 0x8000 ? 0x7fff : $$self{code}; } #------------------------------------------------------------------------------ # Decode data block # Inputs: 0) optional BZZ object ref, 1) optional data ref # Returns: decoded data or undefined on error # Notes: If called without a data ref, an input BZZ object ref must be given and # the BZZ object must have been initialized by a previous call to Init() sub Decode($;$) { # Decode input stream local $_; my $self; if (ref $_[0] and UNIVERSAL::isa($_[0],'Image::ExifTool::BZZ')) { $self = shift; } else { $self = new Image::ExifTool::BZZ; } my $dataPt = shift; if ($dataPt) { $self->Init($dataPt, 1); } else { $dataPt = $$self{DataPt} or return undef; } # Decode block size my $n = 1; my $m = (1 << 24); while ($n < $m) { my $b = $self->decode_sub(0x8000 + ($$self{a}>>1)); $n = ($n<<1) | $b; } $$self{size} = $n - $m; return '' unless $$self{size}; return undef if $$self{size} > MAXBLOCK()*1024; # Allocate if ($$self{blocksize} < $$self{size}) { $$self{blocksize} = $$self{size}; } # Decode Estimation Speed my $fshift = 0; if ($self->decode_sub(0x8000 + ($$self{a}>>1))) { $fshift += 1; $fshift += 1 if $self->decode_sub(0x8000 + ($$self{a}>>1)); } # Prepare Quasi MTF my @mtf = (0..255); my @freq = (0) x FREQMAX(); my $fadd = 4; # Decode my $mtfno = 3; my $markerpos = -1; my $cx = $$self{ctx}; my ($i, @dat); byte: for ($i=0; $i<$$self{size}; $i++) { # dummy loop avoids use of "goto" statement dummy: for (;;) { my $ctxid = CTXIDS() - 1; $ctxid = $mtfno if $ctxid > $mtfno; my $cp = 0; my ($imtf, $bits); for ($imtf=0; $imtf<2; ++$imtf) { if ($self->decoder($$cx[$cp+$ctxid])) { $mtfno = $imtf; $dat[$i] = $mtf[$mtfno]; # (a "goto" here could give a segfault due to a Perl bug) last dummy; # do rotation } $cp += CTXIDS(); } for ($bits=1; $bits<8; ++$bits, $imtf<<=1) { if ($self->decoder($$cx[$cp])) { my $n = 1; my $m = (1 << $bits); while ($n < $m) { my $b = $self->decoder($$cx[$cp+$n]); $n = ($n<<1) | $b; } $mtfno = $imtf + $n - $m; $dat[$i] = $mtf[$mtfno]; last dummy; # do rotation } $cp += $imtf; } $mtfno=256; $dat[$i] = 0; $markerpos=$i; next byte; # no rotation necessary } # Rotate mtf according to empirical frequencies (new!) # Adjust frequencies for overflow $fadd = $fadd + ($fadd >> $fshift); if ($fadd > 0x10000000) { $fadd >>= 24; $_ >>= 24 foreach @freq; } # Relocate new char according to new freq my $fc = $fadd; $fc += $freq[$mtfno] if $mtfno < FREQMAX(); my $k; for ($k=$mtfno; $k>=FREQMAX(); $k--) { $mtf[$k] = $mtf[$k-1]; } for (; $k>0 && $fc>=$freq[$k-1]; $k--) { $mtf[$k] = $mtf[$k-1]; $freq[$k] = $freq[$k-1]; } $mtf[$k] = $dat[$i]; $freq[$k] = $fc; # when "goto" was used, Perl 5.8.6 could segfault here # unless "next" was explicitly stated } # # Reconstruct the string # return undef if $markerpos<1 || $markerpos>=$$self{size}; # Allocate pointers # Prepare count buffer my @count = (0) x 256; my @posn; # Fill count buffer no integer; for ($i=0; $i<$markerpos; $i++) { my $c = $dat[$i]; $posn[$i] = ($c<<24) | ($count[$c]++ & 0xffffff); } $posn[$i++] = 0; # (initialize marker entry just to be safe) for ( ; $i<$$self{size}; $i++) { my $c = $dat[$i]; $posn[$i] = ($c<<24) | ($count[$c]++ & 0xffffff); } use integer; # Compute sorted char positions my $last = 1; for ($i=0; $i<256; $i++) { my $tmp = $count[$i]; $count[$i] = $last; $last += $tmp; } # Undo the sort transform $i = 0; $last = $$self{size}-1; while ($last > 0) { my $n = $posn[$i]; no integer; my $c = $n >> 24; use integer; $dat[--$last] = $c; $i = $count[$c] + ($n & 0xffffff); } # Final check and return decoded data return undef if $i != $markerpos; pop @dat; # (last byte isn't real) return pack 'C*', @dat; } #------------------------------------------------------------------------------ # Inputs: 0) BZZ object ref, 1) ctx # Returns: decoded bit sub decoder($$) { my ($self, $ctx) = @_; my $z = $$self{a} + $self->{p}[$ctx]; if ($z <= $$self{fence}) { $$self{a} = $z; return ($ctx & 1); } # must pass $_[1] so subroutine can modify value (darned C++ pass-by-reference!) return $self->decode_sub($z, $_[1]); } #------------------------------------------------------------------------------ # Inputs: 0) BZZ object ref, 1) z, 2) ctx (or undef) # Returns: decoded bit sub decode_sub($$;$) { my ($self, $z, $ctx) = @_; # ensure that we have at least 16 bits of encoded data available if ($$self{scount} < 16) { # preload byte by byte until we have at least 24 bits while ($$self{scount} <= 24) { if ($$self{Pos} < $$self{DataLen}) { $$self{byte} = ord(substr(${$$self{DataPt}}, $$self{Pos}, 1)); ++$$self{Pos}; } else { $$self{byte} = 0xff; if (--$$self{delay} < 1) { # setting size to zero forces error return from Decode() $$self{size} = 0; return 0; } } $$self{buffer} = ($$self{buffer}<<8) | $$self{byte}; $$self{scount} += 8; } } # Save bit my $a = $$self{a}; my ($bit, $code); if (defined $ctx) { $bit = ($ctx & 1); # Avoid interval reversion my $d = 0x6000 + (($z+$a)>>2); $z = $d if $z > $d; } else { $bit = 0; } # Test MPS/LPS if ($z > ($code = $$self{code})) { $bit ^= 1; # LPS branch $z = 0x10000 - $z; $a += $z; $code += $z; # LPS adaptation $_[2] = $self->{dn}[$ctx] if defined $ctx; # LPS renormalization my $sft = $a>=0xff00 ? $self->{ffzt}[$a&0xff] + 8 : $self->{ffzt}[($a>>8)&0xff]; $$self{scount} -= $sft; $$self{a} = ($a<<$sft) & 0xffff; $code = (($code<<$sft) & 0xffff) | (($$self{buffer}>>$$self{scount}) & ((1<<$sft)-1)); } else { # MPS adaptation $_[2] = $self->{up}[$ctx] if defined $ctx and $a >= $self->{'m'}[$ctx]; # MPS renormalization $$self{scount} -= 1; $$self{a} = ($z<<1) & 0xffff; $code = (($code<<1) & 0xffff) | (($$self{buffer}>>$$self{scount}) & 1); } # Adjust fence and save new code $$self{fence} = $code >= 0x8000 ? 0x7fff : $code; $$self{code} = $code; return $bit; } 1; # end __END__ =head1 NAME Image::ExifTool::BZZ - Utility to decode BZZ compressed data =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to decode BZZ compressed data in DjVu images. =head1 NOTES This code is based on ZPCodec and BSByteStream of DjVuLibre 3.5.21 (see additional copyrights and the first reference below), which are covered under the GNU GPL license. This is implemented as Image::ExifTool::BZZ instead of Compress::BZZ because I am hoping that someone else will write a proper Compress::BZZ module (with compression ability). =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) Copyright 2002, Leon Bottou and Yann Le Cun Copyright 2001, AT&T Copyright 1999-2001, LizardTech Inc. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://djvu.sourceforge.net/> =item L<http://www.djvu.org/> =back =head1 SEE ALSO L<Image::ExifTool::DjVu(3pm)|Image::ExifTool::DjVu>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Canon.pm����������������������������������������������������000644 �000765 �000024 �00001144174 12644762040 021321� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Canon.pm # # Description: Canon EXIF maker notes tags # # Revisions: 11/25/2003 - P. Harvey Created # 12/03/2003 - P. Harvey Decode lots more tags and add CanonAFInfo # 02/17/2004 - Michael Rommel Added IxusAFPoint # 01/27/2005 - P. Harvey Disable validation of CanonAFInfo # 01/30/2005 - P. Harvey Added a few more tags (ref 4) # 02/10/2006 - P. Harvey Decode a lot of new tags (ref 12) # [ongoing] - P. Harvey Constantly decoding new information # # Notes: Must check FocalPlaneX/YResolution values for each new model! # # References: 1) http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html # 2) Michael Rommel private communication (Digital Ixus) # 3) Daniel Pittman private communication (PowerShot S70) # 4) http://www.wonderland.org/crw/ # 5) Juha Eskelinen private communication (20D) # 6) Richard S. Smith private communication (20D) # 7) Denny Priebe private communication (1DmkII) # 8) Irwin Poche private communication # 9) Michael Tiemann private communication (1DmkII) # 10) Volker Gering private communication (1DmkII) # 11) "cip" private communication # 12) Rainer Honle private communication (5D) # 13) http://www.cybercom.net/~dcoffin/dcraw/ # 14) (bozi) http://www.cpanforum.com/threads/2476 and /2563 # 15) http://homepage3.nifty.com/kamisaka/makernote/makernote_canon.htm (2007/11/19) # + http://homepage3.nifty.com/kamisaka/makernote/CanonLens.htm (2007/11/19) # 16) Emil Sit private communication (30D) # 17) http://www.asahi-net.or.jp/~xp8t-ymzk/s10exif.htm # 18) Samson Tai private communication (G7) # 19) Warren Stockton private communication # 20) Bogdan private communication # 21) Heiko Hinrichs private communication # 22) Dave Nicholson private communication (PowerShot S30) # 23) Magne Nilsen private communication (400D) # 24) Wolfgang Hoffmann private communication (40D) # 25) Laurent Clevy private communication # 26) Steve Balcombe private communication # 27) Chris Huebsch private communication (40D) # 28) Hal Williamson private communication (XTi) # 29) Ger Vermeulen private communication # 30) David Pitcher private communication (1DmkIII) # 31) Darryl Zurn private communication (A590IS) # 32) Rich Taylor private communication (5D) # 33) D.J. Cristi private communication # 34) Andreas Huggel and Pascal de Bruijn private communication # 35) Jan Boelsma private communication # 36) Karl-Heinz Klotz private communication (http://www.dslr-forum.de/showthread.php?t=430900) # 37) Vesa Kivisto private communication (30D) # 38) Kurt Garloff private communication (5DmkII) # 39) Irwin Poche private communication (5DmkII) # 40) Jose Oliver-Didier private communication # 41) http://www.cpanforum.com/threads/10730 # 42) Norbert Wasser private communication # 43) Karsten Sote private communication # 44) Hugh Griffiths private communication (5DmkII) # 45) Mark Berger private communication (5DmkII) # 46) Dieter Steiner private communication (7D) # 47) http://www.exiv2.org/ # 48) Tomasz A. Kawecki private communication (550D, firmware 1.0.6, 1.0.8) # 49) http://www.listware.net/201101/digikam-users/49795-digikam-users-re-lens-recognition.html # 50) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3833.0.html # 51) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4110.0.html # 52) Iliah Borg private communication (LibRaw) # 53) Niels Kristian Bech Jensen private communication # JD) Jens Duttke private communication # JR) Jos Roost private communication #------------------------------------------------------------------------------ package Image::ExifTool::Canon; use strict; use vars qw($VERSION %canonModelID %canonLensTypes); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; sub WriteCanon($$$); sub ProcessSerialData($$$); sub ProcessFilters($$$); sub SwapWords($); $VERSION = '3.57'; # Note: Removed 'USM' from 'L' lenses since it is redundant - PH # (or is it? Ref 32 shows 5 non-USM L-type lenses) # --> have relaxed this for new lenses because Canon has been # consistent about keeping "USM" in the model name %canonLensTypes = ( #4 Notes => q{ Decimal values have been added to differentiate lenses which would otherwise have the same LensType, and are used by the Composite LensID tag when attempting to identify the specific lens model. }, -1 => 'n/a', 1 => 'Canon EF 50mm f/1.8', 2 => 'Canon EF 28mm f/2.8', # (3 removed in current Kamisaka list) 3 => 'Canon EF 135mm f/2.8 Soft', #15/32 4 => 'Canon EF 35-105mm f/3.5-4.5 or Sigma Lens', #28 4.1 => 'Sigma UC Zoom 35-135mm f/4-5.6', 5 => 'Canon EF 35-70mm f/3.5-4.5', #32 6 => 'Canon EF 28-70mm f/3.5-4.5 or Sigma or Tokina Lens', #32 6.1 => 'Sigma 18-50mm f/3.5-5.6 DC', #23 6.2 => 'Sigma 18-125mm f/3.5-5.6 DC IF ASP', 6.3 => 'Tokina AF 193-2 19-35mm f/3.5-4.5', 6.4 => 'Sigma 28-80mm f/3.5-5.6 II Macro', #47 7 => 'Canon EF 100-300mm f/5.6L', #15 8 => 'Canon EF 100-300mm f/5.6 or Sigma or Tokina Lens', #32 8.1 => 'Sigma 70-300mm f/4-5.6 [APO] DG Macro', #15 (both APO and non-APO, ref forum2947) 8.2 => 'Tokina AT-X 242 AF 24-200mm f/3.5-5.6', #15 9 => 'Canon EF 70-210mm f/4', #32 9.1 => 'Sigma 55-200mm f/4-5.6 DC', #34 10 => 'Canon EF 50mm f/2.5 Macro or Sigma Lens', #10 (+ LSC Life Size Converter --> 70mm - PH) 10.1 => 'Sigma 50mm f/2.8 EX', #4 10.2 => 'Sigma 28mm f/1.8', 10.3 => 'Sigma 105mm f/2.8 Macro EX', #15 10.4 => 'Sigma 70mm f/2.8 EX DG Macro EF', #Jean-Michel Dubois 11 => 'Canon EF 35mm f/2', #9 13 => 'Canon EF 15mm f/2.8 Fisheye', #9 14 => 'Canon EF 50-200mm f/3.5-4.5L', #32 15 => 'Canon EF 50-200mm f/3.5-4.5', #32 16 => 'Canon EF 35-135mm f/3.5-4.5', #32 17 => 'Canon EF 35-70mm f/3.5-4.5A', #32 18 => 'Canon EF 28-70mm f/3.5-4.5', #32 20 => 'Canon EF 100-200mm f/4.5A', #32 21 => 'Canon EF 80-200mm f/2.8L', 22 => 'Canon EF 20-35mm f/2.8L or Tokina Lens', #32 22.1 => 'Tokina AT-X 280 AF Pro 28-80mm f/2.8 Aspherical', #15 23 => 'Canon EF 35-105mm f/3.5-4.5', #32 24 => 'Canon EF 35-80mm f/4-5.6 Power Zoom', #32 25 => 'Canon EF 35-80mm f/4-5.6 Power Zoom', #32 26 => 'Canon EF 100mm f/2.8 Macro or Other Lens', 26.1 => 'Cosina 100mm f/3.5 Macro AF', 26.2 => 'Tamron SP AF 90mm f/2.8 Di Macro', #15 26.3 => 'Tamron SP AF 180mm f/3.5 Di Macro', #15 26.4 => 'Carl Zeiss Planar T* 50mm f/1.4', #PH 27 => 'Canon EF 35-80mm f/4-5.6', #32 # 27 => 'Carl Zeiss Distagon T* 28mm f/2 ZF', #PH (must be with an adapter, because the ZF version is a Nikon mount) # 27 => 'EMF adapter for Canon EOS digital cameras', #50 (reports MaxFocalLength of 65535) # 27 => optix adapter 28 => 'Canon EF 80-200mm f/4.5-5.6 or Tamron Lens', #32 28.1 => 'Tamron SP AF 28-105mm f/2.8 LD Aspherical IF', #15 28.2 => 'Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical [IF] Macro', #4 # 28.3 => 'Tamron AF 70-300mm f/4.5-5.6 Di LD 1:2 Macro Zoom', #11 28.3 => 'Tamron AF 70-300mm f/4-5.6 Di LD 1:2 Macro', #47 28.4 => 'Tamron AF Aspherical 28-200mm f/3.8-5.6', #14 29 => 'Canon EF 50mm f/1.8 II', 30 => 'Canon EF 35-105mm f/4.5-5.6', #32 31 => 'Canon EF 75-300mm f/4-5.6 or Tamron Lens', #32 31.1 => 'Tamron SP AF 300mm f/2.8 LD IF', #15 32 => 'Canon EF 24mm f/2.8 or Sigma Lens', #10 32.1 => 'Sigma 15mm f/2.8 EX Fisheye', #11 33 => 'Voigtlander or Carl Zeiss Lens', 33.1 => 'Voigtlander Ultron 40mm f/2 SLII Aspherical', #45 33.2 => 'Voigtlander Color Skopar 20mm f/3.5 SLII Aspherical', #50 33.3 => 'Voigtlander APO-Lanthar 90mm f/3.5 SLII Close Focus', #50 33.4 => 'Carl Zeiss Distagon T* 15mm f/2.8 ZE', #PH 33.5 => 'Carl Zeiss Distagon T* 18mm f/3.5 ZE', #PH 33.6 => 'Carl Zeiss Distagon T* 21mm f/2.8 ZE', #PH 33.7 => 'Carl Zeiss Distagon T* 25mm f/2 ZE', #52 33.8 => 'Carl Zeiss Distagon T* 28mm f/2 ZE', #PH 33.9 => 'Carl Zeiss Distagon T* 35mm f/2 ZE', #PH '33.10' => 'Carl Zeiss Distagon T* 35mm f/1.4 ZE', #52 '33.11' => 'Carl Zeiss Planar T* 50mm f/1.4 ZE', #52 '33.12' => 'Carl Zeiss Makro-Planar T* 50mm f/2 ZE', #52 '33.13' => 'Carl Zeiss Makro-Planar T* 100mm f/2 ZE', #52 '33.14' => 'Carl Zeiss Apo-Sonnar T* 135mm f/2 ZE', #JR 35 => 'Canon EF 35-80mm f/4-5.6', #32 36 => 'Canon EF 38-76mm f/4.5-5.6', #32 37 => 'Canon EF 35-80mm f/4-5.6 or Tamron Lens', #32 37.1 => 'Tamron 70-200mm f/2.8 Di LD IF Macro', #PH 37.2 => 'Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical [IF] Macro Model A20', #38 37.3 => 'Tamron SP AF 17-50mm f/2.8 XR Di II VC LD Aspherical [IF]', #34 37.4 => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC LD Aspherical [IF] Macro', #forum2937 38 => 'Canon EF 80-200mm f/4.5-5.6', #32 39 => 'Canon EF 75-300mm f/4-5.6', 40 => 'Canon EF 28-80mm f/3.5-5.6', 41 => 'Canon EF 28-90mm f/4-5.6', #32 42 => 'Canon EF 28-200mm f/3.5-5.6 or Tamron Lens', #32 42.1 => 'Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical [IF] Macro Model A20', #15 43 => 'Canon EF 28-105mm f/4-5.6', #10 44 => 'Canon EF 90-300mm f/4.5-5.6', #32 45 => 'Canon EF-S 18-55mm f/3.5-5.6 [II]', #PH (same ID for version II, ref 20) 46 => 'Canon EF 28-90mm f/4-5.6', #32 47 => 'Zeiss Milvus 35mm f/2 or 50mm f/2', #52 47.1 => 'Zeiss Milvus 50mm f/2 Makro', #52 48 => 'Canon EF-S 18-55mm f/3.5-5.6 IS', #20 49 => 'Canon EF-S 55-250mm f/4-5.6 IS', #23 50 => 'Canon EF-S 18-200mm f/3.5-5.6 IS', 51 => 'Canon EF-S 18-135mm f/3.5-5.6 IS', #PH 52 => 'Canon EF-S 18-55mm f/3.5-5.6 IS II', #PH 53 => 'Canon EF-S 18-55mm f/3.5-5.6 III', #Jon Charnas 54 => 'Canon EF-S 55-250mm f/4-5.6 IS II', #47 94 => 'Canon TS-E 17mm f/4L', #42 95 => 'Canon TS-E 24.0mm f/3.5 L II', #43 124 => 'Canon MP-E 65mm f/2.8 1-5x Macro Photo', #9 125 => 'Canon TS-E 24mm f/3.5L', 126 => 'Canon TS-E 45mm f/2.8', #15 127 => 'Canon TS-E 90mm f/2.8', #15 129 => 'Canon EF 300mm f/2.8L', #32 130 => 'Canon EF 50mm f/1.0L', #10/15 131 => 'Canon EF 28-80mm f/2.8-4L or Sigma Lens', #32 131.1 => 'Sigma 8mm f/3.5 EX DG Circular Fisheye', #15 131.2 => 'Sigma 17-35mm f/2.8-4 EX DG Aspherical HSM', #15 131.3 => 'Sigma 17-70mm f/2.8-4.5 DC Macro', #PH (NC) 131.4 => 'Sigma APO 50-150mm f/2.8 [II] EX DC HSM', #15 ([II] ref PH) 131.5 => 'Sigma APO 120-300mm f/2.8 EX DG HSM', #15 # 'Sigma APO 120-300mm f/2.8 EX DG HSM + 1.4x', #15 # 'Sigma APO 120-300mm f/2.8 EX DG HSM + 2x', #15 131.6 => 'Sigma 4.5mm f/2.8 EX DC HSM Circular Fisheye', #PH 131.7 => 'Sigma 70-200mm f/2.8 APO EX HSM', #PH (http://www.lensrentals.com/blog/2012/08/canon-illumination-correction-and-third-party-lenses) 132 => 'Canon EF 1200mm f/5.6L', #32 134 => 'Canon EF 600mm f/4L IS', #15 135 => 'Canon EF 200mm f/1.8L', 136 => 'Canon EF 300mm f/2.8L', 137 => 'Canon EF 85mm f/1.2L or Sigma or Tamron Lens', #10 137.1 => 'Sigma 18-50mm f/2.8-4.5 DC OS HSM', #PH 137.2 => 'Sigma 50-200mm f/4-5.6 DC OS HSM', #PH 137.3 => 'Sigma 18-250mm f/3.5-6.3 DC OS HSM', #PH (also Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM) 137.4 => 'Sigma 24-70mm f/2.8 IF EX DG HSM', #PH 137.5 => 'Sigma 18-125mm f/3.8-5.6 DC OS HSM', #PH 137.6 => 'Sigma 17-70mm f/2.8-4 DC Macro OS HSM', #forum2819 (Contemporary version has this ID - PH) 137.7 => 'Sigma 17-50mm f/2.8 OS HSM', #47 137.8 => 'Sigma 18-200mm f/3.5-6.3 DC OS HSM [II]', #PH 137.9 => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD', #(model B008)forum3090 '137.10' => 'Sigma 8-16mm f/4.5-5.6 DC HSM', #50-Zwielicht '137.11' => 'Tamron SP 17-50mm f/2.8 XR Di II VC', #50 (model B005) '137.12' => 'Tamron SP 60mm f/2 Macro Di II', #50 (model G005) '137.13' => 'Sigma 10-20mm f/3.5 EX DC HSM', #Gerald Erdmann '137.14' => 'Tamron SP 24-70mm f/2.8 Di VC USD', #PH '137.15' => 'Sigma 18-35mm f/1.8 DC HSM', #David Monro '137.16' => 'Sigma 12-24mm f/4.5-5.6 DG HSM II', #52 138 => 'Canon EF 28-80mm f/2.8-4L', #32 139 => 'Canon EF 400mm f/2.8L', 140 => 'Canon EF 500mm f/4.5L', #32 141 => 'Canon EF 500mm f/4.5L', 142 => 'Canon EF 300mm f/2.8L IS', #15 143 => 'Canon EF 500mm f/4L IS', #15 144 => 'Canon EF 35-135mm f/4-5.6 USM', #26 145 => 'Canon EF 100-300mm f/4.5-5.6 USM', #32 146 => 'Canon EF 70-210mm f/3.5-4.5 USM', #32 147 => 'Canon EF 35-135mm f/4-5.6 USM', #32 148 => 'Canon EF 28-80mm f/3.5-5.6 USM', #32 149 => 'Canon EF 100mm f/2 USM', #9 150 => 'Canon EF 14mm f/2.8L or Sigma Lens', #10 150.1 => 'Sigma 20mm EX f/1.8', #4 150.2 => 'Sigma 30mm f/1.4 DC HSM', #15 150.3 => 'Sigma 24mm f/1.8 DG Macro EX', #15 150.4 => 'Sigma 28mm f/1.8 DG Macro EX', #52 151 => 'Canon EF 200mm f/2.8L', 152 => 'Canon EF 300mm f/4L IS or Sigma Lens', #15 152.1 => 'Sigma 12-24mm f/4.5-5.6 EX DG ASPHERICAL HSM', #15 152.2 => 'Sigma 14mm f/2.8 EX Aspherical HSM', #15 152.3 => 'Sigma 10-20mm f/4-5.6', #14 152.4 => 'Sigma 100-300mm f/4', # (ref Bozi) 153 => 'Canon EF 35-350mm f/3.5-5.6L or Sigma or Tamron Lens', #PH 153.1 => 'Sigma 50-500mm f/4-6.3 APO HSM EX', #15 153.2 => 'Tamron AF 28-300mm f/3.5-6.3 XR LD Aspherical [IF] Macro', 153.3 => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical [IF] Macro Model A14', #15 153.4 => 'Tamron 18-250mm f/3.5-6.3 Di II LD Aspherical [IF] Macro', #PH 154 => 'Canon EF 20mm f/2.8 USM or Zeiss Lens', #15 154.1 => 'Zeiss Milvus 21mm f/2.8', #52 155 => 'Canon EF 85mm f/1.8 USM', 156 => 'Canon EF 28-105mm f/3.5-4.5 USM or Tamron Lens', 156.1 => 'Tamron SP 70-300mm f/4.0-5.6 Di VC USD', #PH (model A005) 160 => 'Canon EF 20-35mm f/3.5-4.5 USM or Tamron or Tokina Lens', 160.1 => 'Tamron AF 19-35mm f/3.5-4.5', #44 160.2 => 'Tokina AT-X 124 AF Pro DX 12-24mm f/4', #49 160.3 => 'Tokina AT-X 107 AF DX 10-17mm f/3.5-4.5 Fisheye', #PH (http://osdir.com/ml/digikam-devel/2011-04/msg00275.html) 160.4 => 'Tokina AT-X 116 AF Pro DX 11-16mm f/2.8', #forum3967 161 => 'Canon EF 28-70mm f/2.8L or Sigma or Tamron Lens', 161.1 => 'Sigma 24-70mm f/2.8 EX', 161.2 => 'Sigma 28-70mm f/2.8 EX', #PH (http://www.breezesys.com/forum/showthread.php?t=3718) 161.3 => 'Sigma 24-60mm f/2.8 EX DG', #PH (http://www.lensrentals.com/blog/2012/08/canon-illumination-correction-and-third-party-lenses) 161.4 => 'Tamron AF 17-50mm f/2.8 Di-II LD Aspherical', #40 161.5 => 'Tamron 90mm f/2.8', 161.6 => 'Tamron SP AF 17-35mm f/2.8-4 Di LD Aspherical IF', #52 (A05) 161.7 => 'Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical [IF] Macro', #52/53 162 => 'Canon EF 200mm f/2.8L', #32 163 => 'Canon EF 300mm f/4L', #32 164 => 'Canon EF 400mm f/5.6L', #32 165 => 'Canon EF 70-200mm f/2.8 L', 166 => 'Canon EF 70-200mm f/2.8 L + 1.4x', 167 => 'Canon EF 70-200mm f/2.8 L + 2x', 168 => 'Canon EF 28mm f/1.8 USM', #15 169 => 'Canon EF 17-35mm f/2.8L or Sigma Lens', #15 169.1 => 'Sigma 18-200mm f/3.5-6.3 DC OS', #23 169.2 => 'Sigma 15-30mm f/3.5-4.5 EX DG Aspherical', #4 169.3 => 'Sigma 18-50mm f/2.8 Macro', #26 169.4 => 'Sigma 50mm f/1.4 EX DG HSM', #PH 169.5 => 'Sigma 85mm f/1.4 EX DG HSM', #Rolando Ruzic 169.6 => 'Sigma 30mm f/1.4 EX DC HSM', #Rodolfo Borges 169.7 => 'Sigma 35mm f/1.4 DG HSM', #PH (also "| A" version, ref forum3833) 170 => 'Canon EF 200mm f/2.8L II', #9 171 => 'Canon EF 300mm f/4L', #15 172 => 'Canon EF 400mm f/5.6L or Sigma Lens', #32 172.1 =>'Sigma 150-600mm f/5-6.3 DG OS HSM | S', #forum3833 173 => 'Canon EF 180mm Macro f/3.5L or Sigma Lens', #9 173.1 => 'Sigma 180mm EX HSM Macro f/3.5', #14 173.2 => 'Sigma APO Macro 150mm f/2.8 EX DG HSM', #14 174 => 'Canon EF 135mm f/2L or Other Lens', #9 174.1 => 'Sigma 70-200mm f/2.8 EX DG APO OS HSM', #PH (probably version II of this lens) 174.2 => 'Sigma 50-500mm f/4.5-6.3 APO DG OS HSM', #forum4031 174.3 => 'Sigma 150-500mm f/5-6.3 APO DG OS HSM', #47 174.4 => 'Zeiss Milvus 100mm f/2 Makro', #52 175 => 'Canon EF 400mm f/2.8L', #32 176 => 'Canon EF 24-85mm f/3.5-4.5 USM', 177 => 'Canon EF 300mm f/4L IS', #9 178 => 'Canon EF 28-135mm f/3.5-5.6 IS', 179 => 'Canon EF 24mm f/1.4L', #20 180 => 'Canon EF 35mm f/1.4L or Other Lens', #9 180.1 => 'Sigma 50mm f/1.4 DG HSM | A', #50 180.2 => 'Sigma 24mm f/1.4 DG HSM | A', #53 180.3 => 'Zeiss Milvus 50mm f/1.4', #52 180.4 => 'Zeiss Milvus 85mm f/1.4', #52 180.5 => 'Zeiss Otus 28mm f/1.4 ZE', #PH 181 => 'Canon EF 100-400mm f/4.5-5.6L IS + 1.4x or Sigma Lens', #15 181.1 => 'Sigma 150-600mm f/5-6.3 DG OS HSM | S + 1.4x', #50 182 => 'Canon EF 100-400mm f/4.5-5.6L IS + 2x or Sigma Lens', 182.1 => 'Sigma 150-600mm f/5-6.3 DG OS HSM | S + 2x', #PH (NC) 183 => 'Canon EF 100-400mm f/4.5-5.6L IS or Sigma Lens', 183.1 => 'Sigma 150mm f/2.8 EX DG OS HSM APO Macro', #50 183.2 => 'Sigma 105mm f/2.8 EX DG OS HSM Macro', #50 183.3 => 'Sigma 180mm f/2.8 EX DG OS HSM APO Macro', #52 183.4 => 'Sigma 150-600mm f/5-6.3 DG OS HSM | C', #47 184 => 'Canon EF 400mm f/2.8L + 2x', #15 185 => 'Canon EF 600mm f/4L IS', #32 186 => 'Canon EF 70-200mm f/4L', #9 187 => 'Canon EF 70-200mm f/4L + 1.4x', #26 188 => 'Canon EF 70-200mm f/4L + 2x', #PH 189 => 'Canon EF 70-200mm f/4L + 2.8x', #32 190 => 'Canon EF 100mm f/2.8 Macro USM', # (+USM ref 42) 191 => 'Canon EF 400mm f/4 DO IS', #9 193 => 'Canon EF 35-80mm f/4-5.6 USM', #32 194 => 'Canon EF 80-200mm f/4.5-5.6 USM', #32 195 => 'Canon EF 35-105mm f/4.5-5.6 USM', #32 196 => 'Canon EF 75-300mm f/4-5.6 USM', #15/32 197 => 'Canon EF 75-300mm f/4-5.6 IS USM', 198 => 'Canon EF 50mm f/1.4 USM or Zeiss Lens', 198.1 => 'Zeiss Otus 55mm f/1.4 ZE', #JR (seen only on Sony camera) 198.2 => 'Zeiss Otus 85mm f/1.4 ZE', #JR (NC) 199 => 'Canon EF 28-80mm f/3.5-5.6 USM', #32 200 => 'Canon EF 75-300mm f/4-5.6 USM', #32 201 => 'Canon EF 28-80mm f/3.5-5.6 USM', #32 202 => 'Canon EF 28-80mm f/3.5-5.6 USM IV', 208 => 'Canon EF 22-55mm f/4-5.6 USM', #32 209 => 'Canon EF 55-200mm f/4.5-5.6', #32 210 => 'Canon EF 28-90mm f/4-5.6 USM', #32 211 => 'Canon EF 28-200mm f/3.5-5.6 USM', #15 212 => 'Canon EF 28-105mm f/4-5.6 USM', #15 213 => 'Canon EF 90-300mm f/4.5-5.6 USM or Tamron Lens', 213.1 => 'Tamron SP 150-600mm f/5-6.3 Di VC USD', #topic5565 (model A011) 213.2 => 'Tamron 16-300mm f/3.5-6.3 Di II VC PZD Macro', #PH (model B016) 213.3 => 'Tamron SP 35mm f/1.8 Di VC USD', #PH (model F012) 213.4 => 'Tamron SP 45mm f/1.8 Di VC USD', #PH (model F013) 214 => 'Canon EF-S 18-55mm f/3.5-5.6 USM', #PH/34 215 => 'Canon EF 55-200mm f/4.5-5.6 II USM', 217 => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD', #47 224 => 'Canon EF 70-200mm f/2.8L IS', #11 225 => 'Canon EF 70-200mm f/2.8L IS + 1.4x', #11 226 => 'Canon EF 70-200mm f/2.8L IS + 2x', #14 227 => 'Canon EF 70-200mm f/2.8L IS + 2.8x', #32 228 => 'Canon EF 28-105mm f/3.5-4.5 USM', #32 229 => 'Canon EF 16-35mm f/2.8L', #PH 230 => 'Canon EF 24-70mm f/2.8L', #9 231 => 'Canon EF 17-40mm f/4L', 232 => 'Canon EF 70-300mm f/4.5-5.6 DO IS USM', #15 233 => 'Canon EF 28-300mm f/3.5-5.6L IS', #PH 234 => 'Canon EF-S 17-85mm f/4-5.6 IS USM or Tokina Lens', #19 234.1 => 'Tokina AT-X 12-28mm f/4 PRO DX', #50 235 => 'Canon EF-S 10-22mm f/3.5-4.5 USM', #15 236 => 'Canon EF-S 60mm f/2.8 Macro USM', #15 237 => 'Canon EF 24-105mm f/4L IS', #15 238 => 'Canon EF 70-300mm f/4-5.6 IS USM', #15 239 => 'Canon EF 85mm f/1.2L II', #15 240 => 'Canon EF-S 17-55mm f/2.8 IS USM', #15 241 => 'Canon EF 50mm f/1.2L', #15 242 => 'Canon EF 70-200mm f/4L IS', #PH 243 => 'Canon EF 70-200mm f/4L IS + 1.4x', #15 244 => 'Canon EF 70-200mm f/4L IS + 2x', #PH 245 => 'Canon EF 70-200mm f/4L IS + 2.8x', #32 246 => 'Canon EF 16-35mm f/2.8L II', #PH 247 => 'Canon EF 14mm f/2.8L II USM', #32 248 => 'Canon EF 200mm f/2L IS or Sigma Lens', #42 248.1 => 'Sigma 24-35mm f/2 DG HSM | A', #JR 249 => 'Canon EF 800mm f/5.6L IS', #35 250 => 'Canon EF 24mm f/1.4L II or Sigma Lens', #41 250.1 => 'Sigma 20mm f/1.4 DG HSM | A', #52 251 => 'Canon EF 70-200mm f/2.8L IS II USM', 252 => 'Canon EF 70-200mm f/2.8L IS II USM + 1.4x', #50 (1.4x Mk II) 253 => 'Canon EF 70-200mm f/2.8L IS II USM + 2x', #PH (NC) 254 => 'Canon EF 100mm f/2.8L Macro IS USM', #42 255 => 'Sigma 24-105mm f/4 DG OS HSM | A or Other Sigma Lens', #50 255.1 => 'Sigma 180mm f/2.8 EX DG OS HSM APO Macro', #50 # Note: LensType 488 (0x1e8) is reported as 232 (0xe8) in 7D CameraSettings 488 => 'Canon EF-S 15-85mm f/3.5-5.6 IS USM', #PH 489 => 'Canon EF 70-300mm f/4-5.6L IS USM', #Gerald Kapounek 490 => 'Canon EF 8-15mm f/4L Fisheye USM', #Klaus Reinfeld (PH added "Fisheye") 491 => 'Canon EF 300mm f/2.8L IS II USM', #42 492 => 'Canon EF 400mm f/2.8L IS II USM', #PH 493 => 'Canon EF 500mm f/4L IS II USM or EF 24-105mm f4L IS USM', #PH 493.1 => 'Canon EF 24-105mm f/4L IS USM', #PH (should recheck this) 494 => 'Canon EF 600mm f/4.0L IS II USM', #PH 495 => 'Canon EF 24-70mm f/2.8L II USM', #PH 496 => 'Canon EF 200-400mm f/4L IS USM', #PH 499 => 'Canon EF 200-400mm f/4L IS USM + 1.4x', #50 502 => 'Canon EF 28mm f/2.8 IS USM', #PH 503 => 'Canon EF 24mm f/2.8 IS USM', #PH 504 => 'Canon EF 24-70mm f/4L IS USM', #PH 505 => 'Canon EF 35mm f/2 IS USM', #PH 506 => 'Canon EF 400mm f/4 DO IS II USM', #42 507 => 'Canon EF 16-35mm f/4L IS USM', #42 508 => 'Canon EF 11-24mm f/4L USM', #PH 747 => 'Canon EF 100-400mm f/4.5-5.6L IS II USM', #JR 750 => 'Canon EF 35mm f/1.4L II USM', #42 # (STM lenses seem to start with 0x10xx) 4142 => 'Canon EF-S 18-135mm f/3.5-5.6 IS STM', 4143 => 'Canon EF-M 18-55mm f/3.5-5.6 IS STM or Tamron Lens', 4143.1 => 'Tamron 18-200mm F/3.5-6.3 Di III VC', #42 4144 => 'Canon EF 40mm f/2.8 STM', #50 4145 => 'Canon EF-M 22mm f/2 STM', #34 4146 => 'Canon EF-S 18-55mm f/3.5-5.6 IS STM', #PH 4147 => 'Canon EF-M 11-22mm f/4-5.6 IS STM', #42 4148 => 'Canon EF-S 55-250mm f/4-5.6 IS STM', #42 4149 => 'Canon EF-M 55-200mm f/4.5-6.3 IS STM', #42 4150 => 'Canon EF-S 10-18mm f/4.5-5.6 IS STM', #42 4152 => 'Canon EF 24-105mm f/3.5-5.6 IS STM', #42 4153 => 'Canon EF-M 15-45mm f/3.5-6.3 IS STM', #PH 4154 => 'Canon EF-S 24mm f/2.8 STM', #52 4156 => 'Canon EF 50mm f/1.8 STM', #42 ); # Canon model ID numbers (PH) %canonModelID = ( 0x1010000 => 'PowerShot A30', 0x1040000 => 'PowerShot S300 / Digital IXUS 300 / IXY Digital 300', 0x1060000 => 'PowerShot A20', 0x1080000 => 'PowerShot A10', 0x1090000 => 'PowerShot S110 / Digital IXUS v / IXY Digital 200', 0x1100000 => 'PowerShot G2', 0x1110000 => 'PowerShot S40', 0x1120000 => 'PowerShot S30', 0x1130000 => 'PowerShot A40', 0x1140000 => 'EOS D30', 0x1150000 => 'PowerShot A100', 0x1160000 => 'PowerShot S200 / Digital IXUS v2 / IXY Digital 200a', 0x1170000 => 'PowerShot A200', 0x1180000 => 'PowerShot S330 / Digital IXUS 330 / IXY Digital 300a', 0x1190000 => 'PowerShot G3', 0x1210000 => 'PowerShot S45', 0x1230000 => 'PowerShot SD100 / Digital IXUS II / IXY Digital 30', 0x1240000 => 'PowerShot S230 / Digital IXUS v3 / IXY Digital 320', 0x1250000 => 'PowerShot A70', 0x1260000 => 'PowerShot A60', 0x1270000 => 'PowerShot S400 / Digital IXUS 400 / IXY Digital 400', 0x1290000 => 'PowerShot G5', 0x1300000 => 'PowerShot A300', 0x1310000 => 'PowerShot S50', 0x1340000 => 'PowerShot A80', 0x1350000 => 'PowerShot SD10 / Digital IXUS i / IXY Digital L', 0x1360000 => 'PowerShot S1 IS', 0x1370000 => 'PowerShot Pro1', 0x1380000 => 'PowerShot S70', 0x1390000 => 'PowerShot S60', 0x1400000 => 'PowerShot G6', 0x1410000 => 'PowerShot S500 / Digital IXUS 500 / IXY Digital 500', 0x1420000 => 'PowerShot A75', 0x1440000 => 'PowerShot SD110 / Digital IXUS IIs / IXY Digital 30a', 0x1450000 => 'PowerShot A400', 0x1470000 => 'PowerShot A310', 0x1490000 => 'PowerShot A85', 0x1520000 => 'PowerShot S410 / Digital IXUS 430 / IXY Digital 450', 0x1530000 => 'PowerShot A95', 0x1540000 => 'PowerShot SD300 / Digital IXUS 40 / IXY Digital 50', 0x1550000 => 'PowerShot SD200 / Digital IXUS 30 / IXY Digital 40', 0x1560000 => 'PowerShot A520', 0x1570000 => 'PowerShot A510', 0x1590000 => 'PowerShot SD20 / Digital IXUS i5 / IXY Digital L2', 0x1640000 => 'PowerShot S2 IS', 0x1650000 => 'PowerShot SD430 / Digital IXUS Wireless / IXY Digital Wireless', 0x1660000 => 'PowerShot SD500 / Digital IXUS 700 / IXY Digital 600', 0x1668000 => 'EOS D60', 0x1700000 => 'PowerShot SD30 / Digital IXUS i Zoom / IXY Digital L3', 0x1740000 => 'PowerShot A430', 0x1750000 => 'PowerShot A410', 0x1760000 => 'PowerShot S80', 0x1780000 => 'PowerShot A620', 0x1790000 => 'PowerShot A610', 0x1800000 => 'PowerShot SD630 / Digital IXUS 65 / IXY Digital 80', 0x1810000 => 'PowerShot SD450 / Digital IXUS 55 / IXY Digital 60', 0x1820000 => 'PowerShot TX1', 0x1870000 => 'PowerShot SD400 / Digital IXUS 50 / IXY Digital 55', 0x1880000 => 'PowerShot A420', 0x1890000 => 'PowerShot SD900 / Digital IXUS 900 Ti / IXY Digital 1000', 0x1900000 => 'PowerShot SD550 / Digital IXUS 750 / IXY Digital 700', 0x1920000 => 'PowerShot A700', 0x1940000 => 'PowerShot SD700 IS / Digital IXUS 800 IS / IXY Digital 800 IS', 0x1950000 => 'PowerShot S3 IS', 0x1960000 => 'PowerShot A540', 0x1970000 => 'PowerShot SD600 / Digital IXUS 60 / IXY Digital 70', 0x1980000 => 'PowerShot G7', 0x1990000 => 'PowerShot A530', 0x2000000 => 'PowerShot SD800 IS / Digital IXUS 850 IS / IXY Digital 900 IS', 0x2010000 => 'PowerShot SD40 / Digital IXUS i7 / IXY Digital L4', 0x2020000 => 'PowerShot A710 IS', 0x2030000 => 'PowerShot A640', 0x2040000 => 'PowerShot A630', 0x2090000 => 'PowerShot S5 IS', 0x2100000 => 'PowerShot A460', 0x2120000 => 'PowerShot SD850 IS / Digital IXUS 950 IS / IXY Digital 810 IS', 0x2130000 => 'PowerShot A570 IS', 0x2140000 => 'PowerShot A560', 0x2150000 => 'PowerShot SD750 / Digital IXUS 75 / IXY Digital 90', 0x2160000 => 'PowerShot SD1000 / Digital IXUS 70 / IXY Digital 10', 0x2180000 => 'PowerShot A550', 0x2190000 => 'PowerShot A450', 0x2230000 => 'PowerShot G9', 0x2240000 => 'PowerShot A650 IS', 0x2260000 => 'PowerShot A720 IS', 0x2290000 => 'PowerShot SX100 IS', 0x2300000 => 'PowerShot SD950 IS / Digital IXUS 960 IS / IXY Digital 2000 IS', 0x2310000 => 'PowerShot SD870 IS / Digital IXUS 860 IS / IXY Digital 910 IS', 0x2320000 => 'PowerShot SD890 IS / Digital IXUS 970 IS / IXY Digital 820 IS', 0x2360000 => 'PowerShot SD790 IS / Digital IXUS 90 IS / IXY Digital 95 IS', 0x2370000 => 'PowerShot SD770 IS / Digital IXUS 85 IS / IXY Digital 25 IS', 0x2380000 => 'PowerShot A590 IS', 0x2390000 => 'PowerShot A580', 0x2420000 => 'PowerShot A470', 0x2430000 => 'PowerShot SD1100 IS / Digital IXUS 80 IS / IXY Digital 20 IS', 0x2460000 => 'PowerShot SX1 IS', 0x2470000 => 'PowerShot SX10 IS', 0x2480000 => 'PowerShot A1000 IS', 0x2490000 => 'PowerShot G10', 0x2510000 => 'PowerShot A2000 IS', 0x2520000 => 'PowerShot SX110 IS', 0x2530000 => 'PowerShot SD990 IS / Digital IXUS 980 IS / IXY Digital 3000 IS', 0x2540000 => 'PowerShot SD880 IS / Digital IXUS 870 IS / IXY Digital 920 IS', 0x2550000 => 'PowerShot E1', 0x2560000 => 'PowerShot D10', 0x2570000 => 'PowerShot SD960 IS / Digital IXUS 110 IS / IXY Digital 510 IS', 0x2580000 => 'PowerShot A2100 IS', 0x2590000 => 'PowerShot A480', 0x2600000 => 'PowerShot SX200 IS', 0x2610000 => 'PowerShot SD970 IS / Digital IXUS 990 IS / IXY Digital 830 IS', 0x2620000 => 'PowerShot SD780 IS / Digital IXUS 100 IS / IXY Digital 210 IS', 0x2630000 => 'PowerShot A1100 IS', 0x2640000 => 'PowerShot SD1200 IS / Digital IXUS 95 IS / IXY Digital 110 IS', 0x2700000 => 'PowerShot G11', 0x2710000 => 'PowerShot SX120 IS', 0x2720000 => 'PowerShot S90', 0x2750000 => 'PowerShot SX20 IS', 0x2760000 => 'PowerShot SD980 IS / Digital IXUS 200 IS / IXY Digital 930 IS', 0x2770000 => 'PowerShot SD940 IS / Digital IXUS 120 IS / IXY Digital 220 IS', 0x2800000 => 'PowerShot A495', 0x2810000 => 'PowerShot A490', 0x2820000 => 'PowerShot A3100 IS / A3150 IS', # (different cameras, same ID) 0x2830000 => 'PowerShot A3000 IS', 0x2840000 => 'PowerShot SD1400 IS / IXUS 130 / IXY 400F', 0x2850000 => 'PowerShot SD1300 IS / IXUS 105 / IXY 200F', 0x2860000 => 'PowerShot SD3500 IS / IXUS 210 / IXY 10S', 0x2870000 => 'PowerShot SX210 IS', 0x2880000 => 'PowerShot SD4000 IS / IXUS 300 HS / IXY 30S', 0x2890000 => 'PowerShot SD4500 IS / IXUS 1000 HS / IXY 50S', 0x2920000 => 'PowerShot G12', 0x2930000 => 'PowerShot SX30 IS', 0x2940000 => 'PowerShot SX130 IS', 0x2950000 => 'PowerShot S95', 0x2980000 => 'PowerShot A3300 IS', 0x2990000 => 'PowerShot A3200 IS', 0x3000000 => 'PowerShot ELPH 500 HS / IXUS 310 HS / IXY 31S', 0x3010000 => 'PowerShot Pro90 IS', 0x3010001 => 'PowerShot A800', 0x3020000 => 'PowerShot ELPH 100 HS / IXUS 115 HS / IXY 210F', 0x3030000 => 'PowerShot SX230 HS', 0x3040000 => 'PowerShot ELPH 300 HS / IXUS 220 HS / IXY 410F', 0x3050000 => 'PowerShot A2200', 0x3060000 => 'PowerShot A1200', 0x3070000 => 'PowerShot SX220 HS', 0x3080000 => 'PowerShot G1 X', 0x3090000 => 'PowerShot SX150 IS', 0x3100000 => 'PowerShot ELPH 510 HS / IXUS 1100 HS / IXY 51S', 0x3110000 => 'PowerShot S100 (new)', 0x3130000 => 'PowerShot SX40 HS', 0x3120000 => 'PowerShot ELPH 310 HS / IXUS 230 HS / IXY 600F', # the Canon page lists the IXY 32S as "Japan only", but many other # sites list the ELPH 500 HS and IXUS 320 HS as being the same model. # I haven't been able to find an IXUS 320 sample, and the ELPH 500 HS # is already associated with other IXUS and IXY models - PH 0x3140000 => 'IXY 32S', # (PowerShot ELPH 500 HS / IXUS 320 HS ??) 0x3160000 => 'PowerShot A1300', 0x3170000 => 'PowerShot A810', 0x3180000 => 'PowerShot ELPH 320 HS / IXUS 240 HS / IXY 420F', 0x3190000 => 'PowerShot ELPH 110 HS / IXUS 125 HS / IXY 220F', 0x3200000 => 'PowerShot D20', 0x3210000 => 'PowerShot A4000 IS', 0x3220000 => 'PowerShot SX260 HS', 0x3230000 => 'PowerShot SX240 HS', 0x3240000 => 'PowerShot ELPH 530 HS / IXUS 510 HS / IXY 1', 0x3250000 => 'PowerShot ELPH 520 HS / IXUS 500 HS / IXY 3', 0x3260000 => 'PowerShot A3400 IS', 0x3270000 => 'PowerShot A2400 IS', 0x3280000 => 'PowerShot A2300', 0x3330000 => 'PowerShot G15', #25 0x3340000 => 'PowerShot SX50', #25 0x3350000 => 'PowerShot SX160 IS', 0x3360000 => 'PowerShot S110 (new)', 0x3370000 => 'PowerShot SX500 IS', 0x3380000 => 'PowerShot N', 0x3390000 => 'IXUS 245 HS / IXY 430F', # (no PowerShot) 0x3400000 => 'PowerShot SX280 HS', 0x3410000 => 'PowerShot SX270 HS', 0x3420000 => 'PowerShot A3500 IS', 0x3430000 => 'PowerShot A2600', 0x3450000 => 'PowerShot A1400', 0x3460000 => 'PowerShot ELPH 130 IS / IXUS 140 / IXY 110F', 0x3470000 => 'PowerShot ELPH 115/120 IS / IXUS 132/135 / IXY 90F/100F', 0x3490000 => 'PowerShot ELPH 330 HS / IXUS 255 HS / IXY 610F', 0x3510000 => 'PowerShot A2500', 0x3540000 => 'PowerShot G16', 0x3550000 => 'PowerShot S120', 0x3560000 => 'PowerShot SX170 IS', 0x3580000 => 'PowerShot SX510 HS', 0x3590000 => 'PowerShot S200 (new)', 0x3600000 => 'IXY 620F', # (no PowerShot or IXUS?) 0x3610000 => 'PowerShot N100', 0x3640000 => 'PowerShot G1 X Mark II', 0x3650000 => 'PowerShot D30', 0x3660000 => 'PowerShot SX700 HS', 0x3670000 => 'PowerShot SX600 HS', 0x3680000 => 'PowerShot ELPH 140 IS / IXUS 150 / IXY 130', 0x3690000 => 'PowerShot ELPH 135 / IXUS 145 / IXY 120', 0x3700000 => 'PowerShot ELPH 340 HS / IXUS 265 HS / IXY 630', 0x3710000 => 'PowerShot ELPH 150 IS / IXUS 155 / IXY 140', 0x3740000 => 'EOS M3', #52 0x3750000 => 'PowerShot SX60 HS', #52/53 0x3760000 => 'PowerShot SX520 HS', #52 0x3770000 => 'PowerShot SX400 IS', 0x3780000 => 'PowerShot G7 X', #52 0x3790000 => 'PowerShot N2', 0x3800000 => 'PowerShot SX530 HS', 0x3820000 => 'PowerShot SX710 HS', 0x3830000 => 'PowerShot SX610 HS', 0x3840000 => 'EOS M10', 0x3850000 => 'PowerShot G3 X', 0x3860000 => 'PowerShot ELPH 165 HS / IXUS 165 / IXY 160', 0x3870000 => 'PowerShot ELPH 160 / IXUS 160', 0x3880000 => 'PowerShot ELPH 350 HS / IXUS 275 HS / IXY 640', 0x3890000 => 'PowerShot ELPH 170 IS / IXUS 170', 0x3910000 => 'PowerShot SX410 IS', 0x3930000 => 'PowerShot G9 X', 0x3950000 => 'PowerShot G5 X', 0x4040000 => 'PowerShot G1', 0x6040000 => 'PowerShot S100 / Digital IXUS / IXY Digital', # (see http://cweb.canon.jp/e-support/faq/answer/digitalcamera/10447-1.html for PowerShot/IXUS/IXY names) 0x4007d673 => 'DC19/DC21/DC22', 0x4007d674 => 'XH A1', 0x4007d675 => 'HV10', 0x4007d676 => 'MD130/MD140/MD150/MD160/ZR850', 0x4007d777 => 'DC50', # (iVIS) 0x4007d778 => 'HV20', # (iVIS) 0x4007d779 => 'DC211', #29 0x4007d77a => 'HG10', 0x4007d77b => 'HR10', #29 (iVIS) 0x4007d77d => 'MD255/ZR950', 0x4007d81c => 'HF11', 0x4007d878 => 'HV30', 0x4007d87c => 'XH A1S', 0x4007d87e => 'DC301/DC310/DC311/DC320/DC330', 0x4007d87f => 'FS100', 0x4007d880 => 'HF10', #29 (iVIS/VIXIA) 0x4007d882 => 'HG20/HG21', # (VIXIA) 0x4007d925 => 'HF21', # (LEGRIA) 0x4007d926 => 'HF S11', # (LEGRIA) 0x4007d978 => 'HV40', # (LEGRIA) 0x4007d987 => 'DC410/DC411/DC420', 0x4007d988 => 'FS19/FS20/FS21/FS22/FS200', # (LEGRIA) 0x4007d989 => 'HF20/HF200', # (LEGRIA) 0x4007d98a => 'HF S10/S100', # (LEGRIA/VIXIA) 0x4007da8e => 'HF R10/R16/R17/R18/R100/R106', # (LEGRIA/VIXIA) 0x4007da8f => 'HF M30/M31/M36/M300/M306', # (LEGRIA/VIXIA) 0x4007da90 => 'HF S20/S21/S200', # (LEGRIA/VIXIA) 0x4007da92 => 'FS31/FS36/FS37/FS300/FS305/FS306/FS307', 0x4007dda9 => 'HF G25', # (LEGRIA) 0x4007dfb4 => 'XC10', # NOTE: some pre-production models may have a model name of # "Canon EOS Kxxx", where "xxx" is the last 3 digits of the model ID below. # This has been observed for the 1DSmkIII/K215 and 400D/K236. 0x80000001 => 'EOS-1D', 0x80000167 => 'EOS-1DS', 0x80000168 => 'EOS 10D', 0x80000169 => 'EOS-1D Mark III', 0x80000170 => 'EOS Digital Rebel / 300D / Kiss Digital', 0x80000174 => 'EOS-1D Mark II', 0x80000175 => 'EOS 20D', 0x80000176 => 'EOS Digital Rebel XSi / 450D / Kiss X2', 0x80000188 => 'EOS-1Ds Mark II', 0x80000189 => 'EOS Digital Rebel XT / 350D / Kiss Digital N', 0x80000190 => 'EOS 40D', 0x80000213 => 'EOS 5D', 0x80000215 => 'EOS-1Ds Mark III', 0x80000218 => 'EOS 5D Mark II', 0x80000219 => 'WFT-E1', 0x80000232 => 'EOS-1D Mark II N', 0x80000234 => 'EOS 30D', 0x80000236 => 'EOS Digital Rebel XTi / 400D / Kiss Digital X', 0x80000241 => 'WFT-E2', 0x80000246 => 'WFT-E3', 0x80000250 => 'EOS 7D', 0x80000252 => 'EOS Rebel T1i / 500D / Kiss X3', 0x80000254 => 'EOS Rebel XS / 1000D / Kiss F', 0x80000261 => 'EOS 50D', 0x80000269 => 'EOS-1D X', 0x80000270 => 'EOS Rebel T2i / 550D / Kiss X4', 0x80000271 => 'WFT-E4', 0x80000273 => 'WFT-E5', 0x80000281 => 'EOS-1D Mark IV', 0x80000285 => 'EOS 5D Mark III', 0x80000286 => 'EOS Rebel T3i / 600D / Kiss X5', 0x80000287 => 'EOS 60D', 0x80000288 => 'EOS Rebel T3 / 1100D / Kiss X50', 0x80000289 => 'EOS 7D Mark II', #52 0x80000297 => 'WFT-E2 II', 0x80000298 => 'WFT-E4 II', 0x80000301 => 'EOS Rebel T4i / 650D / Kiss X6i', 0x80000302 => 'EOS 6D', #25 0x80000324 => 'EOS-1D C', # (NC) 0x80000325 => 'EOS 70D', 0x80000326 => 'EOS Rebel T5i / 700D / Kiss X7i', 0x80000327 => 'EOS Rebel T5 / 1200D / Kiss X70', 0x80000331 => 'EOS M', 0x80000355 => 'EOS M2', 0x80000346 => 'EOS Rebel SL1 / 100D / Kiss X7', 0x80000347 => 'EOS Rebel T6s / 760D / 8000D', 0x80000382 => 'EOS 5DS', 0x80000393 => 'EOS Rebel T6i / 750D / Kiss X8i', 0x80000401 => 'EOS 5DS R', ); my %canonQuality = ( -1 => 'n/a', # (PH, EOS M MOV video) 1 => 'Economy', 2 => 'Normal', 3 => 'Fine', 4 => 'RAW', 5 => 'Superfine', 130 => 'Normal Movie', #22 131 => 'Movie (2)', #PH (7DmkII 1920x1080) ); my %canonImageSize = ( -1 => 'n/a', 0 => 'Large', 1 => 'Medium', 2 => 'Small', 5 => 'Medium 1', #PH 6 => 'Medium 2', #PH 7 => 'Medium 3', #PH 8 => 'Postcard', #PH (SD200 1600x1200 with DateStamp option) 9 => 'Widescreen', #PH (SD900 3648x2048), 22 (HFS200 3264x1840) 10 => 'Medium Widescreen', #22 (HFS200 1920x1080) 14 => 'Small 1', #PH 15 => 'Small 2', #PH 16 => 'Small 3', #PH 128 => '640x480 Movie', #PH (7D 60fps) 129 => 'Medium Movie', #22 130 => 'Small Movie', #22 137 => '1280x720 Movie', #PH (S95 24fps; D60 50fps) 142 => '1920x1080 Movie', #PH (D60 25fps) ); my %canonWhiteBalance = ( # -1='Click", -2='Pasted' ?? - PH 0 => 'Auto', 1 => 'Daylight', 2 => 'Cloudy', 3 => 'Tungsten', 4 => 'Fluorescent', 5 => 'Flash', 6 => 'Custom', 7 => 'Black & White', 8 => 'Shade', 9 => 'Manual Temperature (Kelvin)', 10 => 'PC Set1', #PH 11 => 'PC Set2', #PH 12 => 'PC Set3', #PH 14 => 'Daylight Fluorescent', #3 15 => 'Custom 1', #PH 16 => 'Custom 2', #PH 17 => 'Underwater', #3 18 => 'Custom 3', #PH 19 => 'Custom 4', #PH 20 => 'PC Set4', #PH 21 => 'PC Set5', #PH # 22 - Custom 2? 23 => 'Auto (ambience priority)', #PH (5DS) # 30 - Click White Balance? # 31 - Shot Settings? # 137 - Tungsten? # 138 - White Fluorescent? # 139 - Fluorescent H? # 140 - Manual? ); # picture styles used by the 5D # (styles 0x4X may be downloaded from Canon) # (called "ColorMatrix" in 1D owner manual) my %pictureStyles = ( #12 0x00 => 'None', #PH 0x01 => 'Standard', #15 0x02 => 'Portrait', #15 0x03 => 'High Saturation', #15 0x04 => 'Adobe RGB', #15 0x05 => 'Low Saturation', #15 0x06 => 'CM Set 1', #PH 0x07 => 'CM Set 2', #PH # "ColorMatrix" values end here 0x21 => 'User Def. 1', 0x22 => 'User Def. 2', 0x23 => 'User Def. 3', # "External" styles currently available from Canon are Nostalgia, Clear, # Twilight and Emerald. The "User Def" styles change to these "External" # codes when these styles are installed in the camera 0x41 => 'PC 1', #PH 0x42 => 'PC 2', #PH 0x43 => 'PC 3', #PH 0x81 => 'Standard', 0x82 => 'Portrait', 0x83 => 'Landscape', 0x84 => 'Neutral', 0x85 => 'Faithful', 0x86 => 'Monochrome', 0x87 => 'Auto', #PH 0x88 => 'Fine Detail', #PH ); my %userDefStyles = ( #12/48 Notes => q{ Base style for user-defined picture styles. PC values represent external picture styles which may be downloaded from Canon and installed in the camera. }, 0x41 => 'PC 1', 0x42 => 'PC 2', 0x43 => 'PC 3', 0x81 => 'Standard', 0x82 => 'Portrait', 0x83 => 'Landscape', 0x84 => 'Neutral', 0x85 => 'Faithful', 0x86 => 'Monochrome', 0x87 => 'Auto', #PH ); # picture style tag information for CameraInfo550D my %psConv = ( -559038737 => 'n/a', # = 0xdeadbeef ! LOL OTHER => sub { shift }, ); my %psInfo = ( Format => 'int32s', PrintHex => 1, PrintConv => \%psConv, ); # ValueConv that makes long values binary type my %longBin = ( ValueConv => 'length($val) > 64 ? \$val : $val', ValueConvInv => '$val', ); # conversions, etc for CameraColorCalibration tags my %cameraColorCalibration = ( Format => 'int16s[4]', Unknown => 1, PrintConv => 'sprintf("%4d %4d %4d (%dK)", split(" ",$val))', PrintConvInv => '$val=~s/\s+/ /g; $val=~tr/()K//d; $val', ); # conversions, etc for PowerShot CameraColorCalibration tags my %cameraColorCalibration2 = ( Format => 'int16s[5]', Unknown => 1, PrintConv => 'sprintf("%4d %4d %4d %4d (%dK)", split(" ",$val))', PrintConvInv => '$val=~s/\s+/ /g; $val=~tr/()K//d; $val', ); # conversions, etc for byte-swapped FocusDistance tags my %focusDistanceByteSwap = ( # this is very odd (little-endian number on odd boundary), # but it does seem to work better with my sample images - PH Format => 'int16uRev', ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => '$val > 655.345 ? "inf" : "$val m"', PrintConvInv => '$val =~ s/ ?m$//; IsFloat($val) ? $val : 655.35', ); # common attributes for writable BinaryData directories my %binaryDataAttrs = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, ); my %offOn = ( 0 => 'Off', 1 => 'On' ); #------------------------------------------------------------------------------ # Canon EXIF Maker Notes %Image::ExifTool::Canon::Main = ( WRITE_PROC => \&WriteCanon, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x1 => { Name => 'CanonCameraSettings', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::CameraSettings', }, }, 0x2 => { Name => 'CanonFocalLength', SubDirectory => { TagTable => 'Image::ExifTool::Canon::FocalLength' }, }, 0x3 => { Name => 'CanonFlashInfo', Unknown => 1, }, 0x4 => { Name => 'CanonShotInfo', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::ShotInfo', }, }, 0x5 => { Name => 'CanonPanorama', SubDirectory => { TagTable => 'Image::ExifTool::Canon::Panorama' }, }, 0x6 => { Name => 'CanonImageType', Writable => 'string', Groups => { 2 => 'Image' }, }, 0x7 => { Name => 'CanonFirmwareVersion', Writable => 'string', }, 0x8 => { Name => 'FileNumber', Writable => 'int32u', Groups => { 2 => 'Image' }, PrintConv => '$_=$val,s/(\d+)(\d{4})/$1-$2/,$_', PrintConvInv => '$val=~s/-//g;$val', }, 0x9 => { Name => 'OwnerName', Writable => 'string', # pad to 32 bytes (including null terminator which will be added) # to avoid bug which crashes DPP if length is 4 bytes ValueConvInv => '$val .= "\0" x (31 - length $val) if length $val < 31; $val', }, 0xa => { Name => 'UnknownD30', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::UnknownD30', }, }, 0xc => [ # square brackets for a conditional list { # D30 Name => 'SerialNumber', Condition => '$$self{Model} =~ /EOS D30\b/', Writable => 'int32u', PrintConv => 'sprintf("%.4x%.5d",$val>>16,$val&0xffff)', PrintConvInv => '$val=~/(.*)-?(\d{5})$/ ? (hex($1)<<16)+$2 : undef', }, { # serial number of 1D/1Ds/1D Mark II/1Ds Mark II is usually # displayed w/o leeding zeros (ref 7) (1D uses 6 digits - PH) Name => 'SerialNumber', Condition => '$$self{Model} =~ /EOS-1D/', Writable => 'int32u', PrintConv => 'sprintf("%.6u",$val)', PrintConvInv => '$val', }, { # all other models (D60,300D,350D,REBEL,10D,20D,etc) Name => 'SerialNumber', Writable => 'int32u', PrintConv => 'sprintf("%.10u",$val)', PrintConvInv => '$val', }, ], 0xd => [ { Name => 'CanonCameraInfo1D', # (save size of this record as "CameraInfoCount" for later tests) Condition => '($$self{CameraInfoCount} = $count) and $$self{Model} =~ /\b1DS?$/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo1D' }, }, { Name => 'CanonCameraInfo1DmkII', Condition => '$$self{Model} =~ /\b1Ds? Mark II$/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo1DmkII' }, }, { Name => 'CanonCameraInfo1DmkIIN', Condition => '$$self{Model} =~ /\b1Ds? Mark II N$/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo1DmkIIN' }, }, { Name => 'CanonCameraInfo1DmkIII', Condition => '$$self{Model} =~ /\b1Ds? Mark III$/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo1DmkIII' }, }, { Name => 'CanonCameraInfo1DmkIV', Condition => '$$self{Model} =~ /\b1D Mark IV$/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo1DmkIV' }, }, { Name => 'CanonCameraInfo1DX', Condition => '$$self{Model} =~ /EOS-1D X$/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo1DX' }, }, { Name => 'CanonCameraInfo5D', Condition => '$$self{Model} =~ /EOS 5D$/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo5D' }, }, { Name => 'CanonCameraInfo5DmkII', Condition => '$$self{Model} =~ /EOS 5D Mark II$/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo5DmkII' }, }, { Name => 'CanonCameraInfo5DmkIII', Condition => '$$self{Model} =~ /EOS 5D Mark III$/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo5DmkIII' }, }, { Name => 'CanonCameraInfo6D', Condition => '$$self{Model} =~ /EOS 6D$/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo6D' }, }, { Name => 'CanonCameraInfo7D', Condition => '$$self{Model} =~ /EOS 7D$/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo7D' }, }, { Name => 'CanonCameraInfo40D', Condition => '$$self{Model} =~ /EOS 40D$/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo40D' }, }, { Name => 'CanonCameraInfo50D', Condition => '$$self{Model} =~ /EOS 50D$/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo50D' }, }, { Name => 'CanonCameraInfo60D', Condition => '$$self{Model} =~ /EOS 60D$/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo60D' }, }, { Name => 'CanonCameraInfo70D', Condition => '$$self{Model} =~ /EOS 70D$/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo70D' }, }, { Name => 'CanonCameraInfo450D', Condition => '$$self{Model} =~ /\b(450D|REBEL XSi|Kiss X2)\b/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo450D' }, }, { Name => 'CanonCameraInfo500D', Condition => '$$self{Model} =~ /\b(500D|REBEL T1i|Kiss X3)\b/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo500D' }, }, { Name => 'CanonCameraInfo550D', Condition => '$$self{Model} =~ /\b(550D|REBEL T2i|Kiss X4)\b/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo550D' }, }, { Name => 'CanonCameraInfo600D', Condition => '$$self{Model} =~ /\b(600D|REBEL T3i|Kiss X5)\b/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo600D' }, }, { Name => 'CanonCameraInfo650D', Condition => '$$self{Model} =~ /\b(650D|REBEL T4i|Kiss X6i|700D|Rebel T5i|Kiss X7i)\b/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo650D' }, }, { Name => 'CanonCameraInfo1000D', Condition => '$$self{Model} =~ /\b(1000D|REBEL XS|Kiss F)\b/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo1000D' }, }, { Name => 'CanonCameraInfo1100D', Condition => '$$self{Model} =~ /\b(1100D|REBEL T3|Kiss X50)\b/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfo600D' }, }, { Name => 'CanonCameraInfoPowerShot', # valid if format is int32u[138] or int32u[148] Condition => '$format eq "int32u" and ($count == 138 or $count == 148)', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoPowerShot' }, }, { Name => 'CanonCameraInfoPowerShot2', # valid if format is int32u[162], int32u[167], int32u[171] or int32u[264] Condition => q{ $format eq "int32u" and ($count == 156 or $count == 162 or $count == 167 or $count == 171 or $count == 264) }, SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoPowerShot2' }, }, { Name => 'CanonCameraInfoUnknown32', Condition => '$format =~ /^int32/', # (counts of 72, 85, 86, 93, 94, 96, 104) - PH SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoUnknown32' }, }, { Name => 'CanonCameraInfoUnknown16', Condition => '$format =~ /^int16/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoUnknown16' }, }, { Name => 'CanonCameraInfoUnknown', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoUnknown' }, }, ], 0xe => { Name => 'CanonFileLength', Writable => 'int32u', Groups => { 2 => 'Image' }, }, 0xf => [ { # used by 1DmkII, 1DSmkII and 1DmkIIN Name => 'CustomFunctions1D', Condition => '$$self{Model} =~ /EOS-1D/', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::Functions1D', }, }, { Name => 'CustomFunctions5D', Condition => '$$self{Model} =~ /EOS 5D/', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::Functions5D', }, }, { Name => 'CustomFunctions10D', Condition => '$$self{Model} =~ /EOS 10D/', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::Functions10D', }, }, { Name => 'CustomFunctions20D', Condition => '$$self{Model} =~ /EOS 20D/', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::Functions20D', }, }, { Name => 'CustomFunctions30D', Condition => '$$self{Model} =~ /EOS 30D/', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::Functions30D', }, }, { Name => 'CustomFunctions350D', Condition => '$$self{Model} =~ /\b(350D|REBEL XT|Kiss Digital N)\b/', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::Functions350D', }, }, { Name => 'CustomFunctions400D', Condition => '$$self{Model} =~ /\b(400D|REBEL XTi|Kiss Digital X|K236)\b/', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::Functions400D', }, }, { Name => 'CustomFunctionsD30', Condition => '$$self{Model} =~ /EOS D30\b/', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::FunctionsD30', }, }, { Name => 'CustomFunctionsD60', Condition => '$$self{Model} =~ /EOS D60\b/', SubDirectory => { # the stored size in the D60 apparently doesn't include the size word: Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size-2,$size)', # (D60 custom functions are basically the same as D30) TagTable => 'Image::ExifTool::CanonCustom::FunctionsD30', }, }, { Name => 'CustomFunctionsUnknown', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::FuncsUnknown', }, }, ], 0x10 => { #PH Name => 'CanonModelID', Writable => 'int32u', PrintHex => 1, SeparateTable => 1, PrintConv => \%canonModelID, }, 0x11 => { #PH Name => 'MovieInfo', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::MovieInfo', }, }, 0x12 => { Name => 'CanonAFInfo', # not really a condition -- just need to store the count for later Condition => '$$self{AFInfoCount} = $count', SubDirectory => { # this record does not begin with a length word, so it # has to be validated differently Validate => 'Image::ExifTool::Canon::ValidateAFInfo($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::AFInfo', }, }, 0x13 => { #PH Name => 'ThumbnailImageValidArea', # left,right,top,bottom edges of image in thumbnail, or all zeros for full frame Notes => 'all zeros for full frame', Writable => 'int16u', Count => 4, }, 0x15 => { #PH # display format for serial number Name => 'SerialNumberFormat', Writable => 'int32u', PrintHex => 1, PrintConv => { 0x90000000 => 'Format 1', 0xa0000000 => 'Format 2', }, }, 0x1a => { #15 Name => 'SuperMacro', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On (1)', 2 => 'On (2)', }, }, 0x1c => { #PH (A570IS) Name => 'DateStampMode', Writable => 'int16u', Notes => 'used only in postcard mode', PrintConv => { 0 => 'Off', 1 => 'Date', 2 => 'Date & Time', }, }, 0x1d => { #PH Name => 'MyColors', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::MyColors', }, }, 0x1e => { #PH Name => 'FirmwareRevision', Writable => 'int32u', # as a hex number: 0xAVVVRR00, where (a bit of guessing here...) # A = 'a' for alpha, 'b' for beta? # V = version? (100,101 for normal releases, 100,110,120,130,170 for alpha/beta) # R = revision? (01-07, except 00 for alpha/beta releases) PrintConv => q{ my $rev = sprintf("%.8x", $val); my ($rel, $v1, $v2, $r1, $r2) = ($rev =~ /^(.)(.)(..)0?(.+)(..)$/); my %r = ( a => 'Alpha ', b => 'Beta ', '0' => '' ); $rel = defined $r{$rel} ? $r{$rel} : "Unknown($rel) "; return "$rel$v1.$v2 rev $r1.$r2", }, PrintConvInv => q{ $_=$val; s/Alpha ?/a/i; s/Beta ?/b/i; s/Unknown ?\((.)\)/$1/i; s/ ?rev ?(.)\./0$1/; s/ ?rev ?//; tr/a-fA-F0-9//dc; return hex $_; }, }, # 0x1f - used for red-eye-corrected images - PH (A570IS) # 0x22 - values 1 and 2 are 2 and 1 for flash pics, 0 otherwise - PH (A570IS) 0x23 => { #31 Name => 'Categories', Writable => 'int32u', Format => 'int32u', # (necessary to perform conversion for Condition) Notes => '2 values: 1. always 8, 2. Categories', Count => '2', Condition => '$$valPt =~ /^\x08\0\0\0/', ValueConv => '$val =~ s/^8 //; $val', ValueConvInv => '"8 $val"', PrintConvColumns => 2, PrintConv => { 0 => '(none)', BITMASK => { 0 => 'People', 1 => 'Scenery', 2 => 'Events', 3 => 'User 1', 4 => 'User 2', 5 => 'User 3', 6 => 'To Do', }, }, }, 0x24 => { #PH Name => 'FaceDetect1', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::FaceDetect1', }, }, 0x25 => { #PH Name => 'FaceDetect2', SubDirectory => { TagTable => 'Image::ExifTool::Canon::FaceDetect2', # (can't validate because this record uses a 1-byte count instead of a 2-byte count) }, }, 0x26 => { #PH (A570IS,1DmkIII) Name => 'CanonAFInfo2', Condition => '$$valPt !~ /^\0\0\0\0/', # (data may be all zeros in thumbnail of 60D MOV video) SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::AFInfo2', }, }, 0x27 => { #PH Name => 'ContrastInfo', Condition => '$$valPt =~ /^\x0a\0/', # (seems to be various versions of this information) SubDirectory => { TagTable => 'Image::ExifTool::Canon::ContrastInfo' }, }, # 0x27 - value 1 is 1 for high ISO pictures, 0 otherwise # value 4 is 9 for Flexizone and FaceDetect AF, 1 for Centre AF, 0 otherwise (SX10IS) 0x28 => { #JD # bytes 0-1=sequence number (encrypted), 2-5=date/time (encrypted) (ref JD) Name => 'ImageUniqueID', Format => 'undef', Writable => 'int8u', Groups => { 2 => 'Image' }, RawConv => '$val eq "\0" x 16 ? undef : $val', ValueConv => 'unpack("H*", $val)', ValueConvInv => 'pack("H*", $val)', }, # 0x29 - WBInfo (ref 52, offset 0x6 is int32u[4] WB_GRBGLevels as shot for PowerShot G9) # 0x2d - changes with categories (ref 31) 0x2f => { #PH (G12) Name => 'FaceDetect3', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::FaceDetect3', }, }, 0x35 => { #PH Name => 'TimeInfo', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::TimeInfo', }, }, 0x3c => { #PH (G1XmkII) Name => 'AFInfo3', Condition => '$$self{AFInfo3} = 1', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::AFInfo2', }, }, # 0x44 (ShootInfo) # 0x62 (UserSetting) 0x81 => { #13 Name => 'RawDataOffset', # (can't yet write 1D raw files) # Writable => 'int32u', # Protected => 2, }, 0x83 => { #PH Name => 'OriginalDecisionDataOffset', Writable => 'int32u', OffsetPair => 1, # (just used as a flag, since this tag has no pair) # this is an offset to the original decision data block # (offset relative to start of file in JPEG images, but NOT DNG images!) IsOffset => '$val and $$et{FILE_TYPE} ne "JPEG"', Protected => 2, DataTag => 'OriginalDecisionData', }, 0x90 => { # used by 1D and 1Ds Name => 'CustomFunctions1D', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::Functions1D', }, }, 0x91 => { #PH Name => 'PersonalFunctions', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::PersonalFuncs', }, }, 0x92 => { #PH Name => 'PersonalFunctionValues', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::PersonalFuncValues', }, }, 0x93 => { Name => 'CanonFileInfo', # (ShootInfoEx) SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::FileInfo', }, }, 0x94 => { #PH # AF points for 1D (45 points in 5 rows) Name => 'AFPointsInFocus1D', Notes => 'EOS 1D -- 5 rows: A1-7, B1-10, C1-11, D1-10, E1-7, center point is C6', PrintConv => 'Image::ExifTool::Canon::PrintAFPoints1D($val)', }, 0x95 => { #PH (observed in 5D sample image) Name => 'LensModel', # (LensName) Writable => 'string', }, 0x96 => [ #PH (CMOSNumber) { Name => 'SerialInfo', Condition => '$$self{Model} =~ /EOS 5D/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::SerialInfo' }, }, { Name => 'InternalSerialNumber', Writable => 'string', # remove trailing 0xff's if they exist (Kiss X3) ValueConv => '$val=~s/\xff+$//; $val', ValueConvInv => '$val', }, ], 0x97 => { #PH (also see http://www.freepatentsonline.com/7657116.html) Name => 'DustRemovalData', # (DustDeleteData) Writable => 'undef', Flags => [ 'Binary', 'Protected' ], # 0x00: int8u - Version (0 or 1) # 0x01: int8u - LensInfo ? (1) # 0x02: int8u - AVValue ? (int8u for version 0, int16u for version 1) # 0x03: int8u - POValue ? (int8u for version 0, int16u for version 1) # 0x04: int16u - DustCount # 0x06: int16u - FocalLength ? # 0x08: int16u - LensID ? # 0x0a: int16u - Width # 0x0c: int16u - Height # 0x0e: int16u - RAW_Width # 0x10: int16u - RAW_Height # 0x12: int16u - PixelPitch [um * 1000] # 0x14: int16u - LpfDistance [mm * 1000] # 0x16: int8u - TopOffset # 0x17: int8u - BottomOffset # 0x18: int8u - LeftOffset # 0x19: int8u - RightOffset # 0x1a: int8u - Year [-1900] # 0x1b: int8u - Month # 0x1c: int8u - Day # 0x1d: int8u - Hour # 0x1e: int8u - Minutes # 0x1f: int8u - BrightDiff # Table with DustCount entries: # 0x22: int16u - DustX # 0x24: int16u - DustY # 0x26: int16u - DustSize }, 0x98 => { #PH Name => 'CropInfo', # (ImageSizeOffset) SubDirectory => { TagTable => 'Image::ExifTool::Canon::CropInfo' }, }, 0x99 => { #PH (EOS 1D Mark III, 40D, etc) Name => 'CustomFunctions2', # (CustomFunEx) SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::Functions2', }, }, 0x9a => { #PH Name => 'AspectInfo', # (AspectRatioInfo) SubDirectory => { TagTable => 'Image::ExifTool::Canon::AspectInfo' }, }, 0xa0 => { Name => 'ProcessingInfo', # (DevelopParam) SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::Processing', }, }, 0xa1 => { Name => 'ToneCurveTable', %longBin }, #PH 0xa2 => { Name => 'SharpnessTable', %longBin }, #PH 0xa3 => { Name => 'SharpnessFreqTable', %longBin }, #PH 0xa4 => { Name => 'WhiteBalanceTable', %longBin }, #PH 0xa9 => { Name => 'ColorBalance', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::ColorBalance', }, }, 0xaa => { Name => 'MeasuredColor', # (PresetWBDS) SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::MeasuredColor', }, }, 0xae => { Name => 'ColorTemperature', Writable => 'int16u', }, 0xb0 => { #PH Name => 'CanonFlags', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::Flags', }, }, 0xb1 => { #PH Name => 'ModifiedInfo', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::ModifiedInfo', }, }, 0xb2 => { Name => 'ToneCurveMatching', %longBin }, #PH 0xb3 => { Name => 'WhiteBalanceMatching', %longBin }, #PH 0xb4 => { #PH Name => 'ColorSpace', Writable => 'int16u', PrintConv => { 1 => 'sRGB', 2 => 'Adobe RGB', }, }, 0xb6 => { Name => 'PreviewImageInfo', SubDirectory => { # Note: the first word of this block gives the correct block size in bytes, but # the size is wrong by a factor of 2 in the IFD, so we must account for this Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size/2)', TagTable => 'Image::ExifTool::Canon::PreviewImageInfo', }, }, 0xd0 => { #PH Name => 'VRDOffset', Writable => 'int32u', OffsetPair => 1, # (just used as a flag, since this tag has no pair) Protected => 2, DataTag => 'CanonVRD', Notes => 'offset of VRD "recipe data" if it exists', }, 0xe0 => { #12 Name => 'SensorInfo', # (ImageAreaDesc) SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::SensorInfo', }, }, 0x4001 => [ #13 (WBPacket) { # (int16u[582]) - 20D and 350D Condition => '$count == 582', Name => 'ColorData1', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData1' }, }, { # (int16u[653]) - 1DmkII and 1DSmkII Condition => '$count == 653', Name => 'ColorData2', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData2' }, }, { # (int16u[796]) - 1DmkIIN, 5D, 30D, 400D Condition => '$count == 796', Name => 'ColorData3', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData3' }, }, { # (int16u[692|674|702|1227|1250|1251|1337]) # 40D (692), 1DmkIII (674), 1DSmkIII (702), 450D/1000D (1227) # 50D/5DmkII (1250), 500D/7D_pre-prod/1DmkIV_pre-prod (1251), # 1DmkIV/7D/550D_pre-prod (1337), 550D (1338), 60D/1100D (1346) Condition => q{ $count == 692 or $count == 674 or $count == 702 or $count == 1227 or $count == 1250 or $count == 1251 or $count == 1337 or $count == 1338 or $count == 1346 }, Name => 'ColorData4', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData4' }, }, { # (int16u[5120]) - G10, G7X Condition => '$count == 5120', Name => 'ColorData5', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData5' }, }, { # (int16u[1273|1275]) - 600D (1273), 1200D (1275) Condition => '$count == 1273 or $count == 1275', Name => 'ColorData6', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData6' }, }, { # (int16u[1312|1313|1316]) # 1DX/5DmkIII/650D/700D/M (1312), 6D/70D/100D (1313), # 1DX firmware 1.x (1316), 7DmkII (1506) Condition => '$count == 1312 or $count == 1313 or $count == 1316 or $count == 1506', Name => 'ColorData7', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData7' }, }, { # (int16u[1560] - 5DS/5DSR, ref 52) Condition => '$count == 1560', Name => 'ColorData8', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData8' }, }, { Name => 'ColorDataUnknown', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorDataUnknown' }, }, ], 0x4002 => { #PH # unknown data block in some JPEG and CR2 images # (5kB for most models, but 22kb for 5D and 30D, and 43kB for 5DmkII so Drop it) Name => 'CRWParam', Format => 'undef', Flags => [ 'Unknown', 'Binary', 'Drop' ], }, 0x4003 => { #PH Name => 'ColorInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorInfo' }, }, 0x4005 => { #PH Name => 'Flavor', Notes => 'unknown 49kB block, not copied to JPEG images', # 'Drop' because not found in JPEG images (too large for APP1 anyway) Flags => [ 'Unknown', 'Binary', 'Drop' ], }, 0x4008 => { #PH guess (1DmkIII) Name => 'BlackLevel', # (BasePictStyleOfUser) Unknown => 1, }, # 0x4009 (BasePictStyleOfPC) 0x4010 => { #forum2933 Name => 'CustomPictureStyleFileName', # (PictStyleCaption) Writable => 'string', }, # 0x4011 (PictStyleAppendInfo) # 0x4012 (CustomWBCaption) 0x4013 => { #PH Name => 'AFMicroAdj', # (AFMicroAdjust) SubDirectory => { # Canon DPP 3.13 is known to truncate this data to 0x14 bytes (from 0x2c), # so specifically check for 0x2c to avoid giving a warning in this case Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size,0x2c)', TagTable => 'Image::ExifTool::Canon::AFMicroAdj', }, }, # 0x4014 (similar to 0x83?) 0x4015 => [{ Name => 'VignettingCorr', # (LensPacket) Condition => '$$valPt =~ /^\0/ and $$valPt !~ /^\0\0\0\0/', # (data may be all zeros for 60D) SubDirectory => { # (the size word is at byte 2 in this structure) Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart+2,$size)', TagTable => 'Image::ExifTool::Canon::VignettingCorr', }, },{ Name => 'VignettingCorrUnknown1', Condition => '$$valPt =~ /^[\x01\x02\x10\x20]/ and $$valPt !~ /^\0\0\0\0/', SubDirectory => { # (the size word is at byte 2 in this structure) Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart+2,$size)', TagTable => 'Image::ExifTool::Canon::VignettingCorrUnknown', }, },{ Name => 'VignettingCorrUnknown2', Condition => '$$valPt !~ /^\0\0\0\0/', SubDirectory => { # (the size word is at byte 4 for version 3 of this structure) Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart+4,$size)', TagTable => 'Image::ExifTool::Canon::VignettingCorrUnknown', }, }], 0x4016 => { Name => 'VignettingCorr2', # (ImageCorrectActual) SubDirectory => { # (the size word is actually 4 bytes, but it doesn't matter if little-endian) Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::VignettingCorr2', }, }, 0x4018 => { #PH Name => 'LightingOpt', # (ImageCorrect) SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::LightingOpt', } }, 0x4019 => { #20 Name => 'LensInfo', # (LensInfoForService) SubDirectory => { TagTable => 'Image::ExifTool::Canon::LensInfo', } }, 0x4020 => { #PH Name => 'AmbienceInfo', Condition => '$$valPt !~ /^\0\0\0\0/', # (data may be all zeros for 60D) SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::Ambience', } }, 0x4021 => { #PH Name => 'MultiExp', # (ExifDSTagMultipleExposure) SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::MultiExp', } }, 0x4024 => { #PH Name => 'FilterInfo', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::FilterInfo', } }, 0x4025 => { #PH Name => 'HDRInfo', # (HighDynamicRange) SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::HDRInfo', } }, 0x4028 => { #PH Name => 'AFConfig', # (AFTabInfo) SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::AFConfig', } }, ); #.............................................................................. # Canon camera settings (MakerNotes tag 0x01) # BinaryData (keys are indices into the int16s array) %Image::ExifTool::Canon::CameraSettings = ( %binaryDataAttrs, FORMAT => 'int16s', FIRST_ENTRY => 1, DATAMEMBER => [ 22, 25 ], # necessary for writing GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 1 => { Name => 'MacroMode', PrintConv => { 1 => 'Macro', 2 => 'Normal', }, }, 2 => { Name => 'SelfTimer', # Custom timer mode if bit 0x4000 is set - PH (A570IS) PrintConv => q{ return 'Off' unless $val; return (($val&0xfff) / 10) . ' s' . ($val & 0x4000 ? ', Custom' : ''); }, PrintConvInv => q{ return 0 if $val =~ /^Off/i; $val =~ s/\s*s(ec)?\b//i; $val =~ s/,?\s*Custom$//i ? ($val*10) | 0x4000 : $val*10; }, }, 3 => { Name => 'Quality', PrintConv => \%canonQuality, }, 4 => { Name => 'CanonFlashMode', PrintConv => { -1 => "n/a", # (PH, EOS M MOV video) 0 => 'Off', 1 => 'Auto', 2 => 'On', 3 => 'Red-eye reduction', 4 => 'Slow-sync', 5 => 'Red-eye reduction (Auto)', 6 => 'Red-eye reduction (On)', 16 => 'External flash', # not set in D30 or 300D }, }, 5 => { Name => 'ContinuousDrive', PrintConv => { 0 => 'Single', 1 => 'Continuous', 2 => 'Movie', #PH 3 => 'Continuous, Speed Priority', #PH 4 => 'Continuous, Low', #PH 5 => 'Continuous, High', #PH 6 => 'Silent Single', #PH # ref A: http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5701.msg27843.html#msg27843 9 => 'Single, Silent', #A 10 => 'Continuous, Silent', #A # 11 - seen for SX260 # 32-34 - Self-timer? }, }, 7 => { Name => 'FocusMode', PrintConv => { 0 => 'One-shot AF', 1 => 'AI Servo AF', 2 => 'AI Focus AF', 3 => 'Manual Focus (3)', 4 => 'Single', 5 => 'Continuous', 6 => 'Manual Focus (6)', 16 => 'Pan Focus', #PH # 137 - Single? 256 => 'AF + MF', #PH (NC, EOS M) 512 => 'Movie Snap Focus', #48 519 => 'Movie Servo AF', #PH (NC, EOS M) }, }, 9 => { #PH Name => 'RecordMode', RawConv => '$val==-1 ? undef : $val', #22 PrintConv => { 1 => 'JPEG', 2 => 'CRW+THM', # (300D,etc) 3 => 'AVI+THM', # (30D) 4 => 'TIF', # +THM? (1Ds) (unconfirmed) 5 => 'TIF+JPEG', # (1D) (unconfirmed) 6 => 'CR2', # +THM? (1D,30D,350D) 7 => 'CR2+JPEG', # (S30) 9 => 'MOV', # (S95 MOV) 10 => 'MP4', # (SX280 MP4) }, }, 10 => { Name => 'CanonImageSize', PrintConvColumns => 2, PrintConv => \%canonImageSize, }, 11 => { Name => 'EasyMode', PrintConvColumns => 3, PrintConv => { # references: # A = http://homepage3.nifty.com/kamisaka/makernote/makernote_canon.htm # B = http://www.burren.cx/david/canon.html # C = DPP 3.11.26 0 => 'Full auto', 1 => 'Manual', 2 => 'Landscape', 3 => 'Fast shutter', 4 => 'Slow shutter', 5 => 'Night', # (C='Night Scene') 6 => 'Gray Scale', #PH (A/B/C='Black & White') 7 => 'Sepia', 8 => 'Portrait', 9 => 'Sports', 10 => 'Macro', 11 => 'Black & White', #PH (A='Black & White', B/C='Pan focus') 12 => 'Pan focus', # (A='Pan focus', C='Vivid') 13 => 'Vivid', #PH (A='Vivid', C='Neutral') 14 => 'Neutral', #PH (A='Natural', C='Black & White') 15 => 'Flash Off', #8 (C=<none>) 16 => 'Long Shutter', #PH 17 => 'Super Macro', #PH (C='Macro') 18 => 'Foliage', #PH 19 => 'Indoor', #PH 20 => 'Fireworks', #PH 21 => 'Beach', #PH 22 => 'Underwater', #PH 23 => 'Snow', #PH 24 => 'Kids & Pets', #PH 25 => 'Night Snapshot', #PH 26 => 'Digital Macro', #PH 27 => 'My Colors', #PH 28 => 'Movie Snap', #PH 29 => 'Super Macro 2', #PH 30 => 'Color Accent', #18 31 => 'Color Swap', #18 32 => 'Aquarium', #18 33 => 'ISO 3200', #18 34 => 'ISO 6400', #PH 35 => 'Creative Light Effect', #PH 36 => 'Easy', #PH 37 => 'Quick Shot', #PH 38 => 'Creative Auto', #39 39 => 'Zoom Blur', #PH 40 => 'Low Light', #PH 41 => 'Nostalgic', #PH 42 => 'Super Vivid', #PH (SD4500) 43 => 'Poster Effect', #PH (SD4500) 44 => 'Face Self-timer', #PH 45 => 'Smile', #PH 46 => 'Wink Self-timer', #PH 47 => 'Fisheye Effect', #PH (SX30IS,IXUS240) 48 => 'Miniature Effect', #PH (SD4500) 49 => 'High-speed Burst', #PH 50 => 'Best Image Selection', #PH 51 => 'High Dynamic Range', #PH (S95) 52 => 'Handheld Night Scene', #PH 53 => 'Movie Digest', #PH 54 => 'Live View Control', #PH 55 => 'Discreet', #PH 56 => 'Blur Reduction', #PH 57 => 'Monochrome', #PH (SX260 B&W,Sepia,Blue tone) 58 => 'Toy Camera Effect', #51 59 => 'Scene Intelligent Auto', #PH (T3i) (C='High-speed Burst HQ' !!) 60 => 'High-speed Burst HQ', #PH (C='High-speed Burst HQ', same as 59) 61 => 'Smooth Skin', #51 62 => 'Soft Focus', #PH (SX260,IXUS240) # 83 - seen for EOS M3 night shot (PH) 257 => 'Spotlight', #PH 258 => 'Night 2', #PH 259 => 'Night+', 260 => 'Super Night', #PH 261 => 'Sunset', #PH (SX10IS) 263 => 'Night Scene', #PH 264 => 'Surface', #PH 265 => 'Low Light 2', #PH }, }, 12 => { Name => 'DigitalZoom', PrintConv => { 0 => 'None', 1 => '2x', 2 => '4x', 3 => 'Other', # value obtained from 2*$val[37]/$val[36] }, }, 13 => { Name => 'Contrast', RawConv => '$val == 0x7fff ? undef : $val', %Image::ExifTool::Exif::printParameter, }, 14 => { Name => 'Saturation', RawConv => '$val == 0x7fff ? undef : $val', %Image::ExifTool::Exif::printParameter, }, 15 => { Name => 'Sharpness', RawConv => '$val == 0x7fff ? undef : $val', Notes => q{ some models use a range of -2 to +2 where 0 is normal sharpening, and others use a range of 0 to 7 where 0 is no sharpening }, PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 16 => { Name => 'CameraISO', RawConv => '$val == 0x7fff ? undef : $val', ValueConv => 'Image::ExifTool::Canon::CameraISO($val)', ValueConvInv => 'Image::ExifTool::Canon::CameraISO($val,1)', }, 17 => { Name => 'MeteringMode', PrintConv => { 0 => 'Default', # older Ixus 1 => 'Spot', 2 => 'Average', #PH 3 => 'Evaluative', 4 => 'Partial', 5 => 'Center-weighted average', }, }, 18 => { # this is always 2 for the 300D - PH Name => 'FocusRange', PrintConv => { 0 => 'Manual', 1 => 'Auto', 2 => 'Not Known', 3 => 'Macro', 4 => 'Very Close', #PH 5 => 'Close', #PH 6 => 'Middle Range', #PH 7 => 'Far Range', 8 => 'Pan Focus', 9 => 'Super Macro', #PH 10=> 'Infinity', #PH }, }, 19 => { Name => 'AFPoint', Flags => 'PrintHex', RawConv => '$val==0 ? undef : $val', PrintConv => { 0x2005 => 'Manual AF point selection', 0x3000 => 'None (MF)', 0x3001 => 'Auto AF point selection', 0x3002 => 'Right', 0x3003 => 'Center', 0x3004 => 'Left', 0x4001 => 'Auto AF point selection', 0x4006 => 'Face Detect', #PH (A570IS) }, }, 20 => { Name => 'CanonExposureMode', PrintConv => { 0 => 'Easy', 1 => 'Program AE', 2 => 'Shutter speed priority AE', 3 => 'Aperture-priority AE', 4 => 'Manual', 5 => 'Depth-of-field AE', 6 => 'M-Dep', #PH 7 => 'Bulb', #30 }, }, 22 => { #4 Name => 'LensType', RawConv => '$val ? $$self{LensType}=$val : undef', # don't use if value is zero Notes => 'this value is incorrect for EOS 7D images with lenses of type 256 or greater', SeparateTable => 1, DataMember => 'LensType', ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 23 => { Name => 'MaxFocalLength', Format => 'int16u', # this is a bit tricky, but we need the FocalUnits to convert this to mm RawConvInv => '$val * ($$self{FocalUnits} || 1)', ValueConv => '$val / ($$self{FocalUnits} || 1)', ValueConvInv => '$val', PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm//;$val', }, 24 => { Name => 'MinFocalLength', Format => 'int16u', RawConvInv => '$val * ($$self{FocalUnits} || 1)', ValueConv => '$val / ($$self{FocalUnits} || 1)', ValueConvInv => '$val', PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm//;$val', }, 25 => { Name => 'FocalUnits', # conversion from raw focal length values to mm DataMember => 'FocalUnits', RawConv => '$$self{FocalUnits} = $val', PrintConv => '"$val/mm"', PrintConvInv => '$val=~s/\s*\/?\s*mm//;$val', }, 26 => { #9 Name => 'MaxAperture', RawConv => '$val > 0 ? $val : undef', ValueConv => 'exp(Image::ExifTool::Canon::CanonEv($val)*log(2)/2)', ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(log($val)*2/log(2))', PrintConv => 'sprintf("%.2g",$val)', PrintConvInv => '$val', }, 27 => { #PH Name => 'MinAperture', RawConv => '$val > 0 ? $val : undef', ValueConv => 'exp(Image::ExifTool::Canon::CanonEv($val)*log(2)/2)', ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(log($val)*2/log(2))', PrintConv => 'sprintf("%.2g",$val)', PrintConvInv => '$val', }, 28 => { Name => 'FlashActivity', RawConv => '$val==-1 ? undef : $val', }, 29 => { Name => 'FlashBits', PrintConvColumns => 2, PrintConv => { 0 => '(none)', BITMASK => { 0 => 'Manual', #PH 1 => 'TTL', #PH 2 => 'A-TTL', #PH 3 => 'E-TTL', #PH 4 => 'FP sync enabled', 7 => '2nd-curtain sync used', 11 => 'FP sync used', 13 => 'Built-in', 14 => 'External', #(may not be set in manual mode - ref 37) }, }, }, 32 => { Name => 'FocusContinuous', RawConv => '$val==-1 ? undef : $val', PrintConv => { 0 => 'Single', 1 => 'Continuous', 8 => 'Manual', #22 }, }, 33 => { #PH Name => 'AESetting', RawConv => '$val==-1 ? undef : $val', PrintConv => { 0 => 'Normal AE', 1 => 'Exposure Compensation', 2 => 'AE Lock', 3 => 'AE Lock + Exposure Comp.', 4 => 'No AE', }, }, 34 => { #PH Name => 'ImageStabilization', RawConv => '$val==-1 ? undef : $val', PrintConv => { 0 => 'Off', 1 => 'On', 2 => 'Shoot Only', #15 3 => 'Panning', # (A570IS) 4 => 'Dynamic', # (SX30IS) (was 'On, Video') # (don't know what bit 0x100 indicates) 256 => 'Off (2)', 257 => 'On (2)', 258 => 'Shoot Only (2)', 259 => 'Panning (2)', 260 => 'Dynamic (2)', }, }, 35 => { #PH Name => 'DisplayAperture', RawConv => '$val ? $val : undef', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 36 => 'ZoomSourceWidth', #PH 37 => 'ZoomTargetWidth', #PH 39 => { #22 Name => 'SpotMeteringMode', RawConv => '$val==-1 ? undef : $val', PrintConv => { 0 => 'Center', 1 => 'AF Point', }, }, 40 => { #PH Name => 'PhotoEffect', RawConv => '$val==-1 ? undef : $val', PrintConvColumns => 2, PrintConv => { 0 => 'Off', 1 => 'Vivid', 2 => 'Neutral', 3 => 'Smooth', 4 => 'Sepia', 5 => 'B&W', 6 => 'Custom', 100 => 'My Color Data', }, }, 41 => { #PH (A570IS) Name => 'ManualFlashOutput', PrintHex => 1, PrintConv => { 0 => 'n/a', 0x500 => 'Full', 0x502 => 'Medium', 0x504 => 'Low', 0x7fff => 'n/a', # (EOS models) }, }, # 41 => non-zero for manual flash intensity - PH (A570IS) 42 => { Name => 'ColorTone', RawConv => '$val == 0x7fff ? undef : $val', %Image::ExifTool::Exif::printParameter, }, 46 => { #PH Name => 'SRAWQuality', RawConv => '$val==-1 ? undef : $val', PrintConv => { 0 => 'n/a', 1 => 'sRAW1 (mRAW)', 2 => 'sRAW2 (sRAW)', }, }, # 47 - related to aspect ratio: 100=4:3,70=1:1/16:9,90=3:2,60=4:5 (PH G12) # (roughly image area in percent - 4:3=100%,1:1/16:9=75%,3:2=89%,4:5=60%) ); # focal length information (MakerNotes tag 0x02) %Image::ExifTool::Canon::FocalLength = ( %binaryDataAttrs, FORMAT => 'int16u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0 => { #9 Name => 'FocalType', RawConv => '$val ? $val : undef', # don't use if value is zero PrintConv => { 1 => 'Fixed', 2 => 'Zoom', }, }, 1 => { Name => 'FocalLength', # the EXIF FocalLength is more reliable, so set this priority to zero Priority => 0, RawConv => '$val ? $val : undef', # don't use if value is zero RawConvInv => q{ my $focalUnits = $$self{FocalUnits}; unless ($focalUnits) { $focalUnits = 1; # (this happens when writing FocalLength to CRW images) $self->Warn("FocalUnits not available for FocalLength conversion (1 assumed)"); } return $val * $focalUnits; }, ValueConv => '$val / ($$self{FocalUnits} || 1)', ValueConvInv => '$val', PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm//;$val', }, 2 => [ #4 { Name => 'FocalPlaneXSize', Notes => q{ these focal plane sizes are only valid for some models, and are affected by digital zoom if applied }, # this conversion is valid only for PowerShot models and these EOS models: # D30, D60, 1D, 1DS, 5D, 10D, 20D, 30D, 300D, 350D, and 400D Condition => q{ $$self{Model} !~ /EOS/ or $$self{Model} =~ /\b(1DS?|5D|D30|D60|10D|20D|30D|K236)$/ or $$self{Model} =~ /\b((300D|350D|400D) DIGITAL|REBEL( XTi?)?|Kiss Digital( [NX])?)$/ }, # focal plane image dimensions in 1/1000 inch -- convert to mm RawConv => '$val < 40 ? undef : $val', # must be reasonable ValueConv => '$val * 25.4 / 1000', ValueConvInv => 'int($val * 1000 / 25.4 + 0.5)', PrintConv => 'sprintf("%.2f mm",$val)', PrintConvInv => '$val=~s/\s*mm$//;$val', },{ Name => 'FocalPlaneXUnknown', Unknown => 1, }, ], 3 => [ #4 { Name => 'FocalPlaneYSize', Condition => q{ $$self{Model} !~ /EOS/ or $$self{Model} =~ /\b(1DS?|5D|D30|D60|10D|20D|30D|K236)$/ or $$self{Model} =~ /\b((300D|350D|400D) DIGITAL|REBEL( XTi?)?|Kiss Digital( [NX])?)$/ }, RawConv => '$val < 40 ? undef : $val', # must be reasonable ValueConv => '$val * 25.4 / 1000', ValueConvInv => 'int($val * 1000 / 25.4 + 0.5)', PrintConv => 'sprintf("%.2f mm",$val)', PrintConvInv => '$val=~s/\s*mm$//;$val', },{ Name => 'FocalPlaneYUnknown', Unknown => 1, }, ], ); # Canon shot information (MakerNotes tag 0x04) # BinaryData (keys are indices into the int16s array) %Image::ExifTool::Canon::ShotInfo = ( %binaryDataAttrs, FORMAT => 'int16s', FIRST_ENTRY => 1, DATAMEMBER => [ 19 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 1 => { #PH Name => 'AutoISO', Notes => 'actual ISO used = BaseISO * AutoISO / 100', ValueConv => 'exp($val/32*log(2))*100', ValueConvInv => '32*log($val/100)/log(2)', PrintConv => 'sprintf("%.0f",$val)', PrintConvInv => '$val', }, 2 => { Name => 'BaseISO', Priority => 0, RawConv => '$val ? $val : undef', ValueConv => 'exp($val/32*log(2))*100/32', ValueConvInv => '32*log($val*32/100)/log(2)', PrintConv => 'sprintf("%.0f",$val)', PrintConvInv => '$val', }, 3 => { #9/PH Name => 'MeasuredEV', Notes => q{ this is the Canon name for what could better be called MeasuredLV, and should be close to the calculated LightValue for a proper exposure with most models }, # empirical offset of +5 seems to be good for EOS models, but maybe # the offset should be less by up to 1 EV for some PowerShot models ValueConv => '$val / 32 + 5', ValueConvInv => '($val - 5) * 32', PrintConv => 'sprintf("%.2f",$val)', PrintConvInv => '$val', }, 4 => { #2, 9 Name => 'TargetAperture', RawConv => '$val > 0 ? $val : undef', ValueConv => 'exp(Image::ExifTool::Canon::CanonEv($val)*log(2)/2)', ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(log($val)*2/log(2))', PrintConv => 'sprintf("%.2g",$val)', PrintConvInv => '$val', }, 5 => { #2 Name => 'TargetExposureTime', # ignore obviously bad values (also, -32768 may be used for n/a) # (note that a few models always write 0: DC211, and video models) RawConv => '($val > -1000 and ($val or $$self{Model}=~/(EOS|PowerShot|IXUS|IXY)/))? $val : undef', ValueConv => 'exp(-Image::ExifTool::Canon::CanonEv($val)*log(2))', ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(-log($val)/log(2))', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 6 => { Name => 'ExposureCompensation', ValueConv => 'Image::ExifTool::Canon::CanonEv($val)', ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv($val)', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 7 => { Name => 'WhiteBalance', PrintConv => \%canonWhiteBalance, SeparateTable => 1, }, 8 => { #PH Name => 'SlowShutter', PrintConv => { -1 => 'n/a', 0 => 'Off', 1 => 'Night Scene', 2 => 'On', 3 => 'None', }, }, 9 => { Name => 'SequenceNumber', Description => 'Shot Number In Continuous Burst', Notes => 'valid only for some models', #PH (eg. not the 5DmkIII) }, 10 => { #PH/17 Name => 'OpticalZoomCode', Groups => { 2 => 'Camera' }, Notes => 'for many PowerShot models, a this is 0-6 for wide-tele zoom', # (for many models, 0-6 represent 0-100% zoom, but it is always 8 for # EOS models, and I have seen values of 16,20,28,32 and 39 too...) # - set to 8 for "n/a" by Canon software (ref 22) PrintConv => '$val == 8 ? "n/a" : $val', PrintConvInv => '$val =~ /[a-z]/i ? 8 : $val', }, # 11 - (8 for all EOS samples, [0,8] for other models - PH) 12 => { #37 Name => 'CameraTemperature', Condition => '$$self{Model} =~ /EOS/ and $$self{Model} !~ /EOS-1DS?$/', Groups => { 2 => 'Camera' }, Notes => 'newer EOS models only', # usually zero if not valid for an EOS model (exceptions: 1D, 1DS) RawConv => '$val ? $val : undef', ValueConv => '$val - 128', ValueConvInv => '$val + 128', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, 13 => { #PH Name => 'FlashGuideNumber', RawConv => '$val==-1 ? undef : $val', ValueConv => '$val / 32', ValueConvInv => '$val * 32', }, # AF points for Ixus and IxusV cameras - 02/17/04 M. Rommel (also D30/D60 - PH) 14 => { #2 Name => 'AFPointsInFocus', Notes => 'used by D30, D60 and some PowerShot/Ixus models', Groups => { 2 => 'Camera' }, Flags => 'PrintHex', RawConv => '$val==0 ? undef : $val', PrintConvColumns => 2, PrintConv => { 0x3000 => 'None (MF)', 0x3001 => 'Right', 0x3002 => 'Center', 0x3003 => 'Center+Right', 0x3004 => 'Left', 0x3005 => 'Left+Right', 0x3006 => 'Left+Center', 0x3007 => 'All', }, }, 15 => { Name => 'FlashExposureComp', Description => 'Flash Exposure Compensation', ValueConv => 'Image::ExifTool::Canon::CanonEv($val)', ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv($val)', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 16 => { Name => 'AutoExposureBracketing', PrintConv => { -1 => 'On', 0 => 'Off', 1 => 'On (shot 1)', 2 => 'On (shot 2)', 3 => 'On (shot 3)', }, }, 17 => { Name => 'AEBBracketValue', ValueConv => 'Image::ExifTool::Canon::CanonEv($val)', ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv($val)', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 18 => { #22 Name => 'ControlMode', PrintConv => { 0 => 'n/a', 1 => 'Camera Local Control', # 2 - have seen this for EOS M studio picture 3 => 'Computer Remote Control', }, }, 19 => { Name => 'FocusDistanceUpper', DataMember => 'FocusDistanceUpper', Format => 'int16u', Notes => 'FocusDistance tags are only extracted if FocusDistanceUpper is non-zero', RawConv => '($$self{FocusDistanceUpper} = $val) || undef', ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => '$val > 655.345 ? "inf" : "$val m"', PrintConvInv => '$val =~ s/ ?m$//; IsFloat($val) ? $val : 655.35', }, 20 => { Name => 'FocusDistanceLower', # (seems to be the upper distance for the 400D) Condition => '$$self{FocusDistanceUpper}', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => '$val > 655.345 ? "inf" : "$val m"', PrintConvInv => '$val =~ s/ ?m$//; IsFloat($val) ? $val : 655.35', }, 21 => { Name => 'FNumber', Priority => 0, RawConv => '$val ? $val : undef', # approximate big translation table by simple calculation - PH ValueConv => 'exp(Image::ExifTool::Canon::CanonEv($val)*log(2)/2)', ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(log($val)*2/log(2))', PrintConv => 'sprintf("%.2g",$val)', PrintConvInv => '$val', }, 22 => [ { Name => 'ExposureTime', # encoding is different for 20D and 350D (darn!) # (but note that encoding is the same for TargetExposureTime - PH) Condition => '$$self{Model} =~ /\b(20D|350D|REBEL XT|Kiss Digital N)\b/', Priority => 0, # many models write 0 here in JPEG images (even though 0 is the # value for an exposure time of 1 sec), but apparently a value of 0 # is valid in a CRW image (=1s, D60 sample) RawConv => '($val or $$self{FILE_TYPE} eq "CRW") ? $val : undef', # approximate big translation table by simple calculation - PH ValueConv => 'exp(-Image::ExifTool::Canon::CanonEv($val)*log(2))*1000/32', ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(-log($val*32/1000)/log(2))', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, { Name => 'ExposureTime', Priority => 0, # many models write 0 here in JPEG images (even though 0 is the # value for an exposure time of 1 sec), but apparently a value of 0 # is valid in a CRW image (=1s, D60 sample) RawConv => '($val or $$self{FILE_TYPE} eq "CRW") ? $val : undef', # approximate big translation table by simple calculation - PH ValueConv => 'exp(-Image::ExifTool::Canon::CanonEv($val)*log(2))', ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(-log($val)/log(2))', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, ], 23 => { #37 Name => 'MeasuredEV2', Description => 'Measured EV 2', RawConv => '$val ? $val : undef', ValueConv => '$val / 8 - 6', ValueConvInv => 'int(($val + 6) * 8 + 0.5)', }, 24 => { Name => 'BulbDuration', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, # 25 - (usually 0, but 1 for 2s timer?, 19 for small AVI, 14 for large # AVI, and -6 and -10 for shots 1 and 2 with stitch assist - PH) 26 => { #15 Name => 'CameraType', Groups => { 2 => 'Camera' }, PrintConv => { 0 => 'n/a', 248 => 'EOS High-end', 250 => 'Compact', 252 => 'EOS Mid-range', 255 => 'DV Camera', #PH }, }, 27 => { Name => 'AutoRotate', RawConv => '$val >= 0 ? $val : undef', PrintConv => { -1 => 'n/a', # (set to -1 when rotated by Canon software) 0 => 'None', 1 => 'Rotate 90 CW', 2 => 'Rotate 180', 3 => 'Rotate 270 CW', }, }, 28 => { #15 Name => 'NDFilter', PrintConv => { -1 => 'n/a', 0 => 'Off', 1 => 'On' }, }, 29 => { Name => 'SelfTimer2', RawConv => '$val >= 0 ? $val : undef', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 33 => { #PH (A570IS) Name => 'FlashOutput', RawConv => '($$self{Model}=~/(PowerShot|IXUS|IXY)/ or $val) ? $val : undef', Notes => q{ used only for PowerShot models, this has a maximum value of 500 for models like the A570IS }, }, ); # Canon panorama information (MakerNotes tag 0x05) %Image::ExifTool::Canon::Panorama = ( %binaryDataAttrs, FORMAT => 'int16s', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, # 0 - values: always 1 # 1 - values: 0,256,512(3 sequential L->R images); 0,-256(2 R->L images) 2 => 'PanoramaFrameNumber', #(some models this is always 0) # 3 - values: 160(SX10IS,A570IS); 871(S30) # 4 - values: always 0 5 => { Name => 'PanoramaDirection', PrintConv => { 0 => 'Left to Right', 1 => 'Right to Left', 2 => 'Bottom to Top', 3 => 'Top to Bottom', 4 => '2x2 Matrix (Clockwise)', }, }, ); # D30 color information (MakerNotes tag 0x0a) %Image::ExifTool::Canon::UnknownD30 = ( %binaryDataAttrs, FORMAT => 'int16s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, ); #.............................................................................. # common CameraInfo tag definitions my %ciFNumber = ( Name => 'FNumber', Format => 'int8u', Groups => { 2 => 'Image' }, RawConv => '$val ? $val : undef', ValueConv => 'exp(($val-8)/16*log(2))', ValueConvInv => 'log($val)*16/log(2)+8', PrintConv => 'sprintf("%.2g",$val)', PrintConvInv => '$val', ); my %ciExposureTime = ( Name => 'ExposureTime', Format => 'int8u', Groups => { 2 => 'Image' }, RawConv => '$val ? $val : undef', ValueConv => 'exp(4*log(2)*(1-Image::ExifTool::Canon::CanonEv($val-24)))', ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(1-log($val)/(4*log(2)))+24', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', ); my %ciISO = ( Name => 'ISO', Format => 'int8u', Groups => { 2 => 'Image' }, ValueConv => '100*exp(($val/8-9)*log(2))', ValueConvInv => '(log($val/100)/log(2)+9)*8', PrintConv => 'sprintf("%.0f",$val)', PrintConvInv => '$val', ); my %ciCameraTemperature = ( Name => 'CameraTemperature', Format => 'int8u', ValueConv => '$val - 128', ValueConvInv => '$val + 128', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', ); my %ciMacroMagnification = ( Name => 'MacroMagnification', Notes => 'currently decoded only for the MP-E 65mm f/2.8 1-5x Macro Photo', Condition => '$$self{LensType} and $$self{LensType} == 124', # 75=1x, 44=5x, log relationship ValueConv => 'exp((75-$val) * log(2) * 3 / 40)', ValueConvInv => '$val > 0 ? 75 - log($val) / log(2) * 40 / 3 : undef', PrintConv => 'sprintf("%.1fx",$val)', PrintConvInv => '$val=~s/\s*x//; $val', ); my %ciFocalLength = ( Name => 'FocalLength', Format => 'int16uRev', # (just to make things confusing, the focal lengths are big-endian) # ignore if zero RawConv => '$val ? $val : undef', PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm//;$val', ); my %ciMinFocal = ( Name => 'MinFocalLength', Format => 'int16uRev', # byte order is big-endian PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm//;$val', ); my %ciMaxFocal = ( Name => 'MaxFocalLength', Format => 'int16uRev', # byte order is big-endian PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm//;$val', ); #.............................................................................. # Camera information for 1D and 1DS (MakerNotes tag 0x0d) # (ref 15 unless otherwise noted) %Image::ExifTool::Canon::CameraInfo1D = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, # these tags are not reliable since they change with firmware version GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ Information in the "CameraInfo" records is tricky to decode because the encodings are very different than in other Canon records (even sometimes switching endianness between values within a single camera), plus there is considerable variation in format from model to model. The first table below lists CameraInfo tags for the 1D and 1DS. }, 0x04 => { %ciExposureTime }, #9 0x0a => { Name => 'FocalLength', Format => 'int16u', # ignore if zero RawConv => '$val ? $val : undef', PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm//;$val', }, 0x0d => { #9 Name => 'LensType', Format => 'int16uRev', # value is little-endian SeparateTable => 1, RawConv => '$val ? $val : undef', # don't use if value is zero ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0x0e => { Name => 'MinFocalLength', Format => 'int16u', PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm//;$val', }, 0x10 => { Name => 'MaxFocalLength', Format => 'int16u', PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm//;$val', }, 0x41 => { Name => 'SharpnessFrequency', # PatternSharpness? Condition => '$$self{Model} =~ /\b1D$/', Notes => '1D only', PrintConvColumns => 2, PrintConv => { 0 => 'n/a', 1 => 'Lowest', 2 => 'Low', 3 => 'Standard', 4 => 'High', 5 => 'Highest', }, }, 0x42 => { Name => 'Sharpness', Format => 'int8s', Condition => '$$self{Model} =~ /\b1D$/', Notes => '1D only', }, 0x44 => { Name => 'WhiteBalance', Condition => '$$self{Model} =~ /\b1D$/', Notes => '1D only', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0x47 => { Name => 'SharpnessFrequency', # PatternSharpness? Condition => '$$self{Model} =~ /\b1DS$/', Notes => '1DS only', PrintConvColumns => 2, PrintConv => { 0 => 'n/a', 1 => 'Lowest', 2 => 'Low', 3 => 'Standard', 4 => 'High', 5 => 'Highest', }, }, 0x48 => [ { Name => 'ColorTemperature', Format => 'int16u', Condition => '$$self{Model} =~ /\b1D$/', Notes => '1D only', }, { Name => 'Sharpness', Format => 'int8s', Condition => '$$self{Model} =~ /\b1DS$/', Notes => '1DS only', }, ], 0x4a => { Name => 'WhiteBalance', Condition => '$$self{Model} =~ /\b1DS$/', Notes => '1DS only', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0x4b => { Name => 'PictureStyle', Condition => '$$self{Model} =~ /\b1D$/', Notes => "1D only, called 'Color Matrix' in owner's manual", Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, 0x4e => { Name => 'ColorTemperature', Format => 'int16u', Condition => '$$self{Model} =~ /\b1DS$/', Notes => '1DS only', }, 0x51 => { Name => 'PictureStyle', Condition => '$$self{Model} =~ /\b1DS$/', Notes => '1DS only', Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, ); # Camera information for 1DmkII and 1DSmkII (MakerNotes tag 0x0d) # (ref 15 unless otherwise noted) %Image::ExifTool::Canon::CameraInfo1DmkII = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'CameraInfo tags for the 1DmkII and 1DSmkII.', 0x04 => { %ciExposureTime }, #9 0x09 => { %ciFocalLength }, #9 0x0c => { #9 Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, RawConv => '$val ? $val : undef', # don't use if value is zero ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0x11 => { %ciMinFocal }, #9 0x13 => { %ciMaxFocal }, #9 0x2d => { #9 Name => 'FocalType', PrintConv => { 0 => 'Fixed', 2 => 'Zoom', }, }, 0x36 => { Name => 'WhiteBalance', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0x37 => { Name => 'ColorTemperature', Format => 'int16uRev', }, 0x39 => { Name => 'CanonImageSize', Format => 'int16u', PrintConvColumns => 2, PrintConv => \%canonImageSize, }, 0x66 => { Name => 'JPEGQuality', Notes => 'a number from 1 to 10', }, 0x6c => { #12 Name => 'PictureStyle', Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, 0x6e => { Name => 'Saturation', Format => 'int8s', %Image::ExifTool::Exif::printParameter, }, 0x6f => { Name => 'ColorTone', Format => 'int8s', %Image::ExifTool::Exif::printParameter, }, 0x72 => { Name => 'Sharpness', Format => 'int8s', }, 0x73 => { Name => 'Contrast', Format => 'int8s', %Image::ExifTool::Exif::printParameter, }, 0x75 => { Name => 'ISO', Format => 'string[5]', }, ); # Camera information for the 1DmkIIN (MakerNotes tag 0x0d) # (ref 9 unless otherwise noted) %Image::ExifTool::Canon::CameraInfo1DmkIIN = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'CameraInfo tags for the 1DmkIIN.', 0x04 => { %ciExposureTime }, 0x09 => { %ciFocalLength }, 0x0c => { Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, RawConv => '$val ? $val : undef', # don't use if value is zero ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0x11 => { %ciMinFocal }, 0x13 => { %ciMaxFocal }, 0x36 => { #15 Name => 'WhiteBalance', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0x37 => { #15 Name => 'ColorTemperature', Format => 'int16uRev', }, 0x73 => { #15 Name => 'PictureStyle', Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, 0x74 => { #15 Name => 'Sharpness', Format => 'int8s', }, 0x75 => { #15 Name => 'Contrast', Format => 'int8s', %Image::ExifTool::Exif::printParameter, }, 0x76 => { #15 Name => 'Saturation', Format => 'int8s', %Image::ExifTool::Exif::printParameter, }, 0x77 => { #15 Name => 'ColorTone', Format => 'int8s', %Image::ExifTool::Exif::printParameter, }, 0x79 => { #15 Name => 'ISO', Format => 'string[5]', }, ); # Canon camera information for 1DmkIII and 1DSmkIII (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo1DmkIII = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, IS_SUBDIR => [ 0x2aa ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'CameraInfo tags for the 1DmkIII and 1DSmkIII.', 0x03 => { %ciFNumber }, 0x04 => { %ciExposureTime }, #9 0x06 => { %ciISO }, 0x18 => { %ciCameraTemperature }, #36 0x1b => { %ciMacroMagnification }, #(NC) 0x1d => { %ciFocalLength }, 0x30 => { # <-- (follows pattern /\xbb\xbb(.{64})?\x01\x01\0\0.{4}/s for all models - Dave Coffin) Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x43 => { #21/24 Name => 'FocusDistanceUpper', # (it looks like the focus distances are also odd-byte big-endian) %focusDistanceByteSwap, }, 0x45 => { #21/24 Name => 'FocusDistanceLower', %focusDistanceByteSwap, }, 0x5e => { #15 Name => 'WhiteBalance', Format => 'int16u', PrintConv => \%canonWhiteBalance, SeparateTable => 1, }, 0x62 => { #15 Name => 'ColorTemperature', Format => 'int16u', }, 0x86 => { Name => 'PictureStyle', Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, 0x111 => { #15 Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0x113 => { %ciMinFocal }, 0x115 => { %ciMaxFocal }, 0x136 => { #15 Name => 'FirmwareVersion', Format => 'string[6]', }, 0x172 => { Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x176 => { Name => 'ShutterCount', Notes => 'may be valid only for some 1DmkIII copies, even running the same firmware', Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x17e => { #(NC) Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x2aa => { #48 Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo' }, }, 0x45a => { #29 Name => 'TimeStamp1', Condition => '$$self{Model} =~ /\b1D Mark III$/', Format => 'int32u', Groups => { 2 => 'Time' }, # observed in 1DmkIII firmware 5.3.1 (pre-production), 1.0.3, 1.0.8 Notes => 'only valid for some versions of the 1DmkIII firmware', Shift => 'Time', RawConv => '$val ? $val : undef', ValueConv => 'ConvertUnixTime($val)', ValueConvInv => 'GetUnixTime($val)', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', }, 0x45e => { Name => 'TimeStamp', Format => 'int32u', Groups => { 2 => 'Time' }, # observed in 1DmkIII firmware 1.1.0, 1.1.3 and # 1DSmkIII firmware 1.0.0, 1.0.4, 2.1.2, 2.7.1 Notes => 'valid for the 1DSmkIII and some versions of the 1DmkIII firmware', Shift => 'Time', RawConv => '$val ? $val : undef', ValueConv => 'ConvertUnixTime($val)', ValueConvInv => 'GetUnixTime($val)', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', }, ); # Canon camera information for 1DmkIV (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo1DmkIV = ( %binaryDataAttrs, FIRST_ENTRY => 0, PRIORITY => 0, DATAMEMBER => [ 0x00, 0x56, 0x153 ], IS_SUBDIR => [ 0x368 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ CameraInfo tags for the EOS 1D Mark IV. Indices shown are for firmware versions 1.0.x, but they may be different for other firmware versions. }, 0x00 => { Name => 'FirmwareVersionLookAhead', Hidden => 1, # look ahead to check location of FirmwareVersion string Format => 'undef[0x1fd]', RawConv => q{ my $t = substr($val, 0x1e8, 6); # 1 = firmware 4.2.1 $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirm} = 1, return undef; $t = substr($val, 0x1ed, 6); # 2 = firmware 1.0.4 $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirm} = 2, return undef; $self->Warn('Unrecognized CameraInfo1DmkIV firmware version'); $$self{CanonFirm} = 0; return undef; # not a real tag }, }, 0x03 => { %ciFNumber }, 0x04 => { %ciExposureTime }, 0x06 => { %ciISO }, 0x07 => { Name => 'HighlightTonePriority', PrintConv => \%offOn, }, 0x08 => { Name => 'MeasuredEV2', Description => 'Measured EV 2', RawConv => '$val ? $val : undef', ValueConv => '$val / 8 - 6', ValueConvInv => 'int(($val + 6) * 8 + 0.5)', }, 0x09 => { Name => 'MeasuredEV3', Description => 'Measured EV 3', RawConv => '$val ? $val : undef', ValueConv => '$val / 8 - 6', ValueConvInv => 'int(($val + 6) * 8 + 0.5)', }, 0x15 => { Name => 'FlashMeteringMode', PrintConv => { 0 => 'E-TTL', 3 => 'TTL', 4 => 'External Auto', 5 => 'External Manual', 6 => 'Off', }, }, 0x19 => { %ciCameraTemperature }, 0x1e => { %ciFocalLength }, 0x35 => { Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x54 => { Name => 'FocusDistanceUpper', %focusDistanceByteSwap, }, 0x56 => { Name => 'FocusDistanceLower', %focusDistanceByteSwap, Hook => '$varSize += ($$self{CanonFirm} ? -1 : 0x10000) if $$self{CanonFirm} < 2', }, 0x78 => { Name => 'WhiteBalance', Format => 'int16u', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0x7c => { Name => 'ColorTemperature', Format => 'int16u', }, 0x14f => { Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0x151 => { %ciMinFocal }, 0x153 => { %ciMaxFocal, Hook => '$varSize -= 4 if $$self{CanonFirm} < 2', }, 0x1ed => { Name => 'FirmwareVersion', Format => 'string[6]', Writable => 0, }, 0x22c => { #(NC) Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x238 => { #(NC) Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x368 => { Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo' }, }, ); # Camera information for 1D X (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo1DX = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, DATAMEMBER => [ 0x00, 0x1b, 0x8e, 0x1ab ], IS_SUBDIR => [ 0x3f4 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ CameraInfo tags for the EOS 1D X. Indices shown are for firmware version 1.0.2, but they may be different for other firmware versions. }, 0x00 => { Name => 'FirmwareVersionLookAhead', Hidden => 1, # look ahead to check location of FirmwareVersion string Format => 'undef[0x286]', RawConv => q{ my $t = substr($val, 0x271, 6); # 1 = firmware 5.7.1 $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirm} = 1, return undef; $t = substr($val, 0x279, 6); # 2 = firmware 6.5.1 $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirm} = 2, return undef; $t = substr($val, 0x280, 6); # 3 = firmware 0.0.8/1.0.2/1.1.1 $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirm} = 3, return undef; $self->Warn('Unrecognized CameraInfo1DX firmware version'); $$self{CanonFirm} = 0; return undef; # not a real tag }, }, 0x03 => { %ciFNumber }, 0x04 => { %ciExposureTime }, 0x06 => { %ciISO }, 0x1b => { %ciCameraTemperature, Hook => '$varSize -= 3 if $$self{CanonFirm} < 3', }, 0x23 => { %ciFocalLength }, 0x7d => { Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x8c => { Name => 'FocusDistanceUpper', %focusDistanceByteSwap, }, 0x8e => { Name => 'FocusDistanceLower', %focusDistanceByteSwap, Hook => '$varSize -= 4 if $$self{CanonFirm} < 3', }, 0xbc => { Name => 'WhiteBalance', Format => 'int16u', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0xc0 => { Name => 'ColorTemperature', Format => 'int16u', }, 0xf4 => { Name => 'PictureStyle', Format => 'int8u', Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, 0x1a7 => { Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0x1a9 => { %ciMinFocal }, 0x1ab => { %ciMaxFocal, # add another offset of -8 for firmware 5.7.1, and a large offset # to effectively abort processing for unknown firmware Hook => '$varSize += ($$self{CanonFirm} ? -8 : 0x10000) if $$self{CanonFirm} < 2', }, 0x280 => { Name => 'FirmwareVersion', Format => 'string[6]', Writable => 0, }, 0x2d0 => { # (doesn't seem to work for firmware 2.0.3 - PH) Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x2dc => { #(NC) Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x3f4 => { Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo2' }, }, ); # Camera information for 5D (MakerNotes tag 0x0d) # (ref 12 unless otherwise noted) %Image::ExifTool::Canon::CameraInfo5D = ( %binaryDataAttrs, FORMAT => 'int8s', FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'CameraInfo tags for the EOS 5D.', 0x03 => { %ciFNumber }, #PH 0x04 => { %ciExposureTime }, #9 0x06 => { %ciISO }, #PH 0x0c => { #9 Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, RawConv => '$val ? $val : undef', # don't use if value is zero ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0x17 => { %ciCameraTemperature }, #PH 0x1b => { %ciMacroMagnification }, #PH 0x27 => { #PH Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x28 => { %ciFocalLength }, #15 0x38 => { Name => 'AFPointsInFocus5D', Format => 'int16uRev', PrintConvColumns => 2, PrintConv => { 0 => '(none)', BITMASK => { 0 => 'Center', 1 => 'Top', 2 => 'Bottom', 3 => 'Upper-left', 4 => 'Upper-right', 5 => 'Lower-left', 6 => 'Lower-right', 7 => 'Left', 8 => 'Right', 9 => 'AI Servo1', 10 => 'AI Servo2', 11 => 'AI Servo3', 12 => 'AI Servo4', 13 => 'AI Servo5', 14 => 'AI Servo6', }, }, }, 0x54 => { #15 Name => 'WhiteBalance', Format => 'int16u', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0x58 => { #15 Name => 'ColorTemperature', Format => 'int16u', }, 0x6c => { Name => 'PictureStyle', Format => 'int8u', Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, 0x93 => { %ciMinFocal }, #15 0x95 => { %ciMaxFocal }, #15 0x97 => { #15 Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0xa4 => { #PH Name => 'FirmwareRevision', Format => 'string[8]', }, 0xac => { #PH Name => 'ShortOwnerName', Format => 'string[16]', }, 0xcc => { #PH (NC) Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', }, 0xd0 => { Name => 'FileIndex', Format => 'int16u', Groups => { 2 => 'Image' }, ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0xe8 => 'ContrastStandard', 0xe9 => 'ContrastPortrait', 0xea => 'ContrastLandscape', 0xeb => 'ContrastNeutral', 0xec => 'ContrastFaithful', 0xed => 'ContrastMonochrome', 0xee => 'ContrastUserDef1', 0xef => 'ContrastUserDef2', 0xf0 => 'ContrastUserDef3', # sharpness values are 0-7 0xf1 => 'SharpnessStandard', 0xf2 => 'SharpnessPortrait', 0xf3 => 'SharpnessLandscape', 0xf4 => 'SharpnessNeutral', 0xf5 => 'SharpnessFaithful', 0xf6 => 'SharpnessMonochrome', 0xf7 => 'SharpnessUserDef1', 0xf8 => 'SharpnessUserDef2', 0xf9 => 'SharpnessUserDef3', 0xfa => 'SaturationStandard', 0xfb => 'SaturationPortrait', 0xfc => 'SaturationLandscape', 0xfd => 'SaturationNeutral', 0xfe => 'SaturationFaithful', 0xff => { Name => 'FilterEffectMonochrome', PrintConv => { 0 => 'None', 1 => 'Yellow', 2 => 'Orange', 3 => 'Red', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0x100 => 'SaturationUserDef1', 0x101 => 'SaturationUserDef2', 0x102 => 'SaturationUserDef3', 0x103 => 'ColorToneStandard', 0x104 => 'ColorTonePortrait', 0x105 => 'ColorToneLandscape', 0x106 => 'ColorToneNeutral', 0x107 => 'ColorToneFaithful', 0x108 => { Name => 'ToningEffectMonochrome', PrintConv => { 0 => 'None', 1 => 'Sepia', 2 => 'Blue', 3 => 'Purple', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0x109 => 'ColorToneUserDef1', 0x10a => 'ColorToneUserDef2', 0x10b => 'ColorToneUserDef3', 0x10c => { Name => 'UserDef1PictureStyle', Format => 'int16u', PrintHex => 1, # (only needed for one tag) SeparateTable => 'UserDefStyle', PrintConv => \%userDefStyles, }, 0x10e => { Name => 'UserDef2PictureStyle', Format => 'int16u', SeparateTable => 'UserDefStyle', PrintConv => \%userDefStyles, }, 0x110 => { Name => 'UserDef3PictureStyle', Format => 'int16u', SeparateTable => 'UserDefStyle', PrintConv => \%userDefStyles, }, 0x11c => { Name => 'TimeStamp', Format => 'int32u', Groups => { 2 => 'Time' }, Shift => 'Time', RawConv => '$val ? $val : undef', ValueConv => 'ConvertUnixTime($val)', ValueConvInv => 'GetUnixTime($val)', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', }, ); # Camera information for 5D Mark II (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo5DmkII = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, DATAMEMBER => [ 0x00, 0xea ], IS_SUBDIR => [ 0x2f7 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ CameraInfo tags for the EOS 5D Mark II. Indices shown are for firmware version 1.0.6, but they may be different for other firmware versions. }, 0x00 => { Name => 'FirmwareVersionLookAhead', Hidden => 1, # look ahead to check location of FirmwareVersion string Format => 'undef[0x184]', RawConv => q{ my $t = substr($val, 0x15a, 6); # 1 = firmware 3.4.6/3.6.1 $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirm} = 1, return undef; $t = substr($val, 0x17e, 6); # 2 = firmware 4.1.1/1.0.6 $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirm} = 2, return undef; $self->Warn('Unrecognized CameraInfo5DmkII firmware version'); $$self{CanonFirm} = 0; return undef; # not a real tag }, }, 0x03 => { %ciFNumber }, 0x04 => { %ciExposureTime }, 0x06 => { %ciISO }, 0x07 => { Name => 'HighlightTonePriority', PrintConv => \%offOn, }, 0x1b => { %ciMacroMagnification }, #PH 0x15 => { #PH (580 EX II) Name => 'FlashMeteringMode', PrintConv => { 0 => 'E-TTL', 3 => 'TTL', 4 => 'External Auto', 5 => 'External Manual', 6 => 'Off', }, }, 0x19 => { %ciCameraTemperature }, #36 # 0x1b, 0x1c, 0x1d - same as FileInfo 0x10 - PH 0x1e => { %ciFocalLength }, 0x31 => { Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x50 => { Name => 'FocusDistanceUpper', %focusDistanceByteSwap, }, 0x52 => { Name => 'FocusDistanceLower', %focusDistanceByteSwap, }, 0x6f => { Name => 'WhiteBalance', Format => 'int16u', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0x73 => { Name => 'ColorTemperature', Format => 'int16u', }, 0xa7 => { Name => 'PictureStyle', Format => 'int8u', Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, 0xbd => { Name => 'HighISONoiseReduction', PrintConv => { 0 => 'Standard', 1 => 'Low', 2 => 'Strong', 3 => 'Off', }, }, 0xbf => { Name => 'AutoLightingOptimizer', PrintConv => { 0 => 'Standard', 1 => 'Low', 2 => 'Strong', 3 => 'Off', }, }, 0xe6 => { Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0xe8 => { %ciMinFocal }, 0xea => { %ciMaxFocal, # offset changes after this for different firmware versions Hook => '$varSize += ($$self{CanonFirm} ? -36 : 0x10000) if $$self{CanonFirm} < 2', }, 0x17e => { Name => 'FirmwareVersion', Format => 'string[6]', Writable => 0, # not writable for logic reasons # some firmwares have a null instead of a space after the version number RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', }, 0x1bb => { Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x1c7 => { #(NC) Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x2f7 => { #48 Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo' }, }, ); # Camera information for 5D Mark III (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo5DmkIII = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, DATAMEMBER => [ 0x00, 0x1b, 0x23, 0x8e, 0x157 ], IS_SUBDIR => [ 0x3b0 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ CameraInfo tags for the EOS 5D Mark III. Indices shown are for firmware versions 1.0.x, but they may be different for other firmware versions. }, 0x00 => { Name => 'FirmwareVersionLookAhead', Hidden => 1, # look ahead to check location of FirmwareVersion string Format => 'undef[0x248]', RawConv => q{ my $t = substr($val, 0x22c, 6); # 1 = firmware 4.5.4/4.5.6 $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirm} = 1, return undef; $t = substr($val, 0x22d, 6); # 2 = firmware 5.2.2/5.3.1/5.4.2 $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirm} = 2, return undef; $t = substr($val, 0x23c, 6); # 3 = firmware 1.0.3/1.0.7 $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirm} = 3, return undef; $t = substr($val, 0x242, 6); # 4 = firmware 1.2.1 $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirm} = 4, return undef; $self->Warn('Unrecognized CameraInfo5DmkIII firmware version'); $$self{CanonFirm} = 0; return undef; # not a real tag }, }, 0x03 => { %ciFNumber }, 0x04 => { %ciExposureTime }, 0x06 => { %ciISO }, 0x1b => { %ciCameraTemperature, # decrement $varSize for missing byte after this tag with firmware 5.x and earlier # (and add large offset to effectively abort processing if unknown firmware) Hook => '$varSize += ($$self{CanonFirm} ? -1 : 0x10000) if $$self{CanonFirm} < 3', }, 0x23 => { %ciFocalLength, Hook => q{ $varSize -= 3 if $$self{CanonFirm} == 1; $varSize -= 2 if $$self{CanonFirm} == 2; $varSize += 6 if $$self{CanonFirm} == 4; }, }, 0x7d => { Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x8c => { Name => 'FocusDistanceUpper', %focusDistanceByteSwap, }, 0x8e => { Name => 'FocusDistanceLower', %focusDistanceByteSwap, Hook => '$varSize -= 4 if $$self{CanonFirm} < 3', }, 0xbc => { Name => 'WhiteBalance', Format => 'int16u', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0xc0 => { Name => 'ColorTemperature', Format => 'int16u', }, 0xf4 => { Name => 'PictureStyle', Format => 'int8u', Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, 0x153 => { Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0x155 => { %ciMinFocal }, 0x157 => { %ciMaxFocal, Hook => '$varSize -= 8 if $$self{CanonFirm} < 3', }, 0x164 => { Name => 'LensSerialNumber', Format => 'undef[5]', Priority => 0, ValueConv => 'unpack("H*",$val)', ValueConvInv => 'length($val) < 10 and $val = 0 x (10-length($val)) . $val; pack("H*",$val)', }, 0x23c => { Name => 'FirmwareVersion', Format => 'string[6]', Writable => 0, }, # the 5DmkIII has "User setting1" and "User setting2" file naming options: # - with "User setting1" 4 characters are selectable # - with "User setting2", 3 characters are selectable, and the 4th character # - in the file name corresponds to the image size: # L=large, M=medium, S=small1, T=small2, U=small3, _=movie # - as shipped, the first 4 characters of the file name are unique to the camera 0x28c => { # used for file names like IMG_xxxx.JPG Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x290 => { # used for file names like 2F0Axxxx.JPG and 6T3Cxxxx.JPG Name => 'FileIndex2', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x298 => { #(NC) Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x29c => { #(NC) Name => 'DirectoryIndex2', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x3b0 => { Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo2' }, }, ); # Camera information for 6D (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo6D = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, IS_SUBDIR => [ 0x3c6 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'CameraInfo tags for the EOS 6D.', 0x03 => { %ciFNumber }, 0x04 => { %ciExposureTime }, 0x06 => { %ciISO }, 0x1b => { %ciCameraTemperature }, 0x23 => { %ciFocalLength }, 0x83 => { # (5DmkIII + 6) Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x92 => { # (5DmkIII + 6) Name => 'FocusDistanceUpper', %focusDistanceByteSwap, }, 0x94 => { # (5DmkIII + 6) Name => 'FocusDistanceLower', %focusDistanceByteSwap, }, 0xc2 => { # (5DmkIII + 6) Name => 'WhiteBalance', Format => 'int16u', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0xc6 => { # (5DmkIII + 6) Name => 'ColorTemperature', Format => 'int16u', }, 0xfa => { # (5DmkIII + 6) Name => 'PictureStyle', Format => 'int8u', Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, 0x161 => { # (5DmkIII + 0x0e) Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0x163 => { %ciMinFocal }, # (5DmkIII + 0x0e) 0x165 => { %ciMaxFocal }, # (5DmkIII + 0x0e) 0x256 => { # (5DmkIII + 0x1a) Name => 'FirmwareVersion', Format => 'string[6]', Writable => 0, }, 0x2aa => { # (5DmkIII + 0x16 or 0x1e) Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x2b6 => { #(NC) (5DmkIII + 0x16 or 0x1e) Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x3c6 => { # (5DmkIII + 0x16) Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo2' }, }, ); # Camera information for 7D (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo7D = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, DATAMEMBER => [ 0x00, 0x1e ], IS_SUBDIR => [ 0x327 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ CameraInfo tags for the EOS 7D. Indices shown are for firmware versions 1.0.x, but they may be different for other firmware versions. }, 0x00 => { Name => 'FirmwareVersionLookAhead', Hidden => 1, # look ahead to check location of FirmwareVersion string Format => 'undef[0x1b2]', RawConv => q{ my $t = substr($val, 0x1a8, 6); # 1 = firmware 3.7.5 $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirm} = 1, return undef; $t = substr($val, 0x1ac, 6); # 2 = firmware 1.0.7/1.0.8/1.1.0/1.2.1/1.2.2 $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirm} = 2, return undef; $self->Warn('Unrecognized CameraInfo7D firmware version'); $$self{CanonFirm} = 0; return undef; # not a real tag }, }, 0x03 => { %ciFNumber }, 0x04 => { %ciExposureTime }, 0x06 => { %ciISO }, 0x07 => { Name => 'HighlightTonePriority', PrintConv => \%offOn, }, 0x08 => { #37 Name => 'MeasuredEV2', Description => 'Measured EV 2', RawConv => '$val ? $val : undef', ValueConv => '$val / 8 - 6', ValueConvInv => 'int(($val + 6) * 8 + 0.5)', }, 0x09 => { #37 Name => 'MeasuredEV', Description => 'Measured EV', RawConv => '$val ? $val : undef', ValueConv => '$val / 8 - 6', ValueConvInv => 'int(($val + 6) * 8 + 0.5)', }, 0x15 => { #PH (580 EX II) Name => 'FlashMeteringMode', PrintConv => { 0 => 'E-TTL', 3 => 'TTL', 4 => 'External Auto', 5 => 'External Manual', 6 => 'Off', }, }, 0x19 => { %ciCameraTemperature }, 0x1e => { %ciFocalLength, Hook => '$varSize += ($$self{CanonFirm} ? -4 : 0x10000) if $$self{CanonFirm} < 2', }, 0x35 => { Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x54 => { Name => 'FocusDistanceUpper', %focusDistanceByteSwap, }, 0x56 => { Name => 'FocusDistanceLower', %focusDistanceByteSwap, }, 0x77 => { Name => 'WhiteBalance', Format => 'int16u', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0x7b => { Name => 'ColorTemperature', Format => 'int16u', }, 0xc9 => { Name => 'HighISONoiseReduction', PrintConv => { 0 => 'Standard', 1 => 'Low', 2 => 'Strong', 3 => 'Off', }, }, 0x112 => { Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0x114 => { %ciMinFocal }, 0x116 => { %ciMaxFocal }, 0x1ac => { Name => 'FirmwareVersion', Format => 'string[6]', Writable => 0, # not writable for logic reasons # some firmwares have a null instead of a space after the version number RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', }, 0x1eb => { Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x1f7 => { #(NC) Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x327 => { #48 Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo' }, }, ); # Canon camera information for 40D (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo40D = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, IS_SUBDIR => [ 0x25b ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'CameraInfo tags for the EOS 40D.', 0x03 => { %ciFNumber }, #PH 0x04 => { %ciExposureTime }, #PH 0x06 => { %ciISO }, #PH 0x15 => { #PH (580 EX II) Name => 'FlashMeteringMode', PrintConv => { 0 => 'E-TTL', 3 => 'TTL', 4 => 'External Auto', 5 => 'External Manual', 6 => 'Off', }, }, 0x18 => { %ciCameraTemperature }, #36 0x1b => { %ciMacroMagnification }, #PH 0x1d => { %ciFocalLength }, #PH 0x30 => { #20 Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x43 => { #21/24 Name => 'FocusDistanceUpper', # this is very odd (little-endian number on odd boundary), # but it does seem to work better with my sample images - PH %focusDistanceByteSwap, }, 0x45 => { #21/24 Name => 'FocusDistanceLower', %focusDistanceByteSwap, }, 0x6f => { #15 Name => 'WhiteBalance', Format => 'int16u', PrintConv => \%canonWhiteBalance, SeparateTable => 1, }, 0x73 => { #15 Name => 'ColorTemperature', Format => 'int16u', }, 0xd6 => { #15 Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0xd8 => { %ciMinFocal }, #15 0xda => { %ciMaxFocal }, #15 0xff => { #15 Name => 'FirmwareVersion', Format => 'string[6]', }, 0x133 => { #27 Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', Notes => 'combined with DirectoryIndex to give the Composite FileNumber tag', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x13f => { #27 Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', # yes, minus (opposite to FileIndex) ValueConvInv => '$val + 1', }, 0x25b => { Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo' }, }, 0x92b => { #33 Name => 'LensModel', Format => 'string[64]', }, ); # Canon camera information for 50D (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo50D = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, DATAMEMBER => [ 0x00, 0xee ], IS_SUBDIR => [ 0x2d7 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ CameraInfo tags for the EOS 50D. Indices shown are for firmware versions 1.0.x, but they may be different for other firmware versions. }, 0x00 => { Name => 'FirmwareVersionLookAhead', Hidden => 1, # look ahead to check location of FirmwareVersion string Format => 'undef[0x164]', RawConv => q{ my $t = substr($val, 0x15a, 6); # 1 = firmware 2.6.1 $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirm} = 1, return undef; $t = substr($val, 0x15e, 6); # 2 = firmware 2.9.1/3.1.1/1.0.2/1.0.3 $t =~ /^\d+\.\d+\.\d+/ and $$self{CanonFirm} = 2, return undef; $self->Warn('Unrecognized CameraInfo50D firmware version'); $$self{CanonFirm} = 0; return undef; # not a real tag }, }, 0x03 => { %ciFNumber }, 0x04 => { %ciExposureTime }, 0x06 => { %ciISO }, 0x07 => { Name => 'HighlightTonePriority', PrintConv => \%offOn, }, 0x15 => { #PH (580 EX II) Name => 'FlashMeteringMode', PrintConv => { 0 => 'E-TTL', 3 => 'TTL', 4 => 'External Auto', 5 => 'External Manual', 6 => 'Off', }, }, 0x19 => { %ciCameraTemperature }, #36 0x1e => { %ciFocalLength }, 0x31 => { Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x50 => { #33 Name => 'FocusDistanceUpper', %focusDistanceByteSwap, }, 0x52 => { #33 Name => 'FocusDistanceLower', %focusDistanceByteSwap, }, 0x6f => { Name => 'WhiteBalance', Format => 'int16u', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0x73 => { #33 Name => 'ColorTemperature', Format => 'int16u', }, 0xa7 => { Name => 'PictureStyle', Format => 'int8u', Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, 0xbd => { Name => 'HighISONoiseReduction', PrintConv => { 0 => 'Standard', 1 => 'Low', 2 => 'Strong', 3 => 'Off', }, }, 0xbf => { Name => 'AutoLightingOptimizer', PrintConv => { 0 => 'Standard', 1 => 'Low', 2 => 'Strong', 3 => 'Off', }, }, 0xea => { #33 Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0xec => { %ciMinFocal }, 0xee => { %ciMaxFocal, Hook => '$varSize += ($$self{CanonFirm} ? -4 : 0x10000) if $$self{CanonFirm} < 2', }, 0x15e => { #33 Name => 'FirmwareVersion', Format => 'string[6]', Writable => 0, }, 0x19b => { Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x1a7 => { #(NC) Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x2d7 => { Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo' }, }, ); # Canon camera information for 60D (MakerNotes tag 0x0d) (ref PH) # NOTE: Can probably borrow more 50D tags here, possibly with an offset %Image::ExifTool::Canon::CameraInfo60D = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, IS_SUBDIR => [ 0x321 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'CameraInfo tags for the EOS 60D.', 0x03 => { %ciFNumber }, 0x04 => { %ciExposureTime }, 0x06 => { %ciISO }, 0x19 => { %ciCameraTemperature }, 0x1e => { %ciFocalLength }, 0x36 => { Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x55 => { Name => 'FocusDistanceUpper', %focusDistanceByteSwap, }, 0x57 => { Name => 'FocusDistanceLower', %focusDistanceByteSwap, }, 0x7d => { Name => 'ColorTemperature', Format => 'int16u', }, 0xe8 => { Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0xea => { %ciMinFocal }, 0xec => { %ciMaxFocal }, 0x199 => { # (at this location for firmware 2.8.1 and 1.0.5) Name => 'FirmwareVersion', Format => 'string[6]', Writable => 0, }, 0x1d9 => { Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x1e5 => { #(NC) Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x321 => { Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo2' }, }, ); # Canon camera information for 70D (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo70D = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, IS_SUBDIR => [ 0x3cf ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'CameraInfo tags for the EOS 70D.', 0x03 => { %ciFNumber }, 0x04 => { %ciExposureTime }, 0x06 => { %ciISO }, 0x1b => { %ciCameraTemperature }, 0x23 => { %ciFocalLength }, # 0x36 - focal length again? 0x84 => { Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x93 => { Name => 'FocusDistanceUpper', %focusDistanceByteSwap, }, 0x95 => { Name => 'FocusDistanceLower', %focusDistanceByteSwap, }, 0xc7 => { Name => 'ColorTemperature', Format => 'int16u', }, 0x166 => { Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0x168 => { %ciMinFocal }, 0x16a => { %ciMaxFocal }, 0x25e => { # (at this location for firmware 6.1.2, 1.0.4 and 1.1.1) Name => 'FirmwareVersion', Format => 'string[6]', Writable => 0, }, 0x2b3 => { Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x2bf => { #(NC) Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x3cf => { #48 Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo2' }, }, ); # Canon camera information for 450D (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo450D = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, IS_SUBDIR => [ 0x263 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'CameraInfo tags for the EOS 450D.', 0x03 => { %ciFNumber }, #PH 0x04 => { %ciExposureTime }, #PH 0x06 => { %ciISO }, #PH 0x15 => { #PH (580 EX II) Name => 'FlashMeteringMode', PrintConv => { 0 => 'E-TTL', 3 => 'TTL', 4 => 'External Auto', 5 => 'External Manual', 6 => 'Off', }, }, 0x18 => { %ciCameraTemperature }, #36 0x1b => { %ciMacroMagnification }, #PH 0x1d => { %ciFocalLength }, #PH 0x30 => { #20 Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x43 => { #20 Name => 'FocusDistanceUpper', # this is very odd (little-endian number on odd boundary), # but it does seem to work better with my sample images - PH %focusDistanceByteSwap, }, 0x45 => { #20 Name => 'FocusDistanceLower', %focusDistanceByteSwap, }, 0x6f => { #PH Name => 'WhiteBalance', Format => 'int16u', PrintConv => \%canonWhiteBalance, SeparateTable => 1, }, 0x73 => { #PH Name => 'ColorTemperature', Format => 'int16u', }, 0xde => { #33 Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0x107 => { #PH Name => 'FirmwareVersion', Format => 'string[6]', }, 0x10f => { #20 Name => 'OwnerName', Format => 'string[32]', }, 0x133 => { #20 Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', }, 0x13f => { #20 Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x263 => { #PH Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo' }, }, 0x933 => { #33 Name => 'LensModel', Format => 'string[64]', }, ); # Canon camera information for 500D (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo500D = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, IS_SUBDIR => [ 0x30b ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'CameraInfo tags for the EOS 500D.', 0x03 => { %ciFNumber }, 0x04 => { %ciExposureTime }, 0x06 => { %ciISO }, 0x07 => { Name => 'HighlightTonePriority', PrintConv => \%offOn, }, 0x15 => { #PH (580 EX II) Name => 'FlashMeteringMode', PrintConv => { 0 => 'E-TTL', 3 => 'TTL', 4 => 'External Auto', 5 => 'External Manual', 6 => 'Off', }, }, 0x19 => { %ciCameraTemperature }, 0x1e => { %ciFocalLength }, 0x31 => { Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x50 => { Name => 'FocusDistanceUpper', %focusDistanceByteSwap, }, 0x52 => { Name => 'FocusDistanceLower', %focusDistanceByteSwap, }, 0x73 => { # (50D + 4) Name => 'WhiteBalance', Format => 'int16u', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0x77 => { # (50D + 4) Name => 'ColorTemperature', Format => 'int16u', }, 0xab => { # (50D + 4) Name => 'PictureStyle', Format => 'int8u', Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, 0xbc => { Name => 'HighISONoiseReduction', PrintConv => { 0 => 'Standard', 1 => 'Low', 2 => 'Strong', 3 => 'Off', }, }, 0xbe => { Name => 'AutoLightingOptimizer', PrintConv => { 0 => 'Standard', 1 => 'Low', 2 => 'Strong', 3 => 'Off', }, }, 0xf6 => { Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0xf8 => { %ciMinFocal }, 0xfa => { %ciMaxFocal }, 0x190 => { Name => 'FirmwareVersion', Format => 'string[6]', Writable => 0, RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', }, 0x1d3 => { Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x1df => { #(NC) Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x30b => { Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo' }, }, ); # Canon camera information for 550D (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo550D = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, IS_SUBDIR => [ 0x31c ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'CameraInfo tags for the EOS 550D.', 0x03 => { %ciFNumber }, 0x04 => { %ciExposureTime }, 0x06 => { %ciISO }, 0x07 => { #(NC) Name => 'HighlightTonePriority', PrintConv => \%offOn, }, 0x15 => { #(NC) Name => 'FlashMeteringMode', PrintConv => { 0 => 'E-TTL', 3 => 'TTL', 4 => 'External Auto', 5 => 'External Manual', 6 => 'Off', }, }, 0x19 => { %ciCameraTemperature }, # (500D + 0) 0x1e => { %ciFocalLength }, # (500D + 0) 0x35 => { # (500D + 4) Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x54 => { # (500D + 4) Name => 'FocusDistanceUpper', %focusDistanceByteSwap, }, 0x56 => { # (500D + 4) Name => 'FocusDistanceLower', %focusDistanceByteSwap, }, 0x78 => { # (500D + 5) (NC) Name => 'WhiteBalance', Format => 'int16u', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0x7c => { # (500D + 5) Name => 'ColorTemperature', Format => 'int16u', }, 0xb0 => { # (500D + 5) Name => 'PictureStyle', Format => 'int8u', Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, 0xff => { # (500D + 9) Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0x101 => { %ciMinFocal }, # (500D + 9) 0x103 => { %ciMaxFocal }, # (500D + 9) 0x1a4 => { # (500D + 0x11) Name => 'FirmwareVersion', Format => 'string[6]', Writable => 0, RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', }, 0x1e4 => { # (500D + 0x11) Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x1f0 => { # (500D + 0x11) (NC) Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x31c => { #48 Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo' }, }, ); # Canon camera information for 600D and 1100D (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo600D = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, IS_SUBDIR => [ 0x2fb ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'CameraInfo tags for the EOS 600D and 1100D.', 0x03 => { %ciFNumber }, 0x04 => { %ciExposureTime }, 0x06 => { %ciISO }, 0x07 => { #(NC) Name => 'HighlightTonePriority', PrintConv => \%offOn, }, 0x15 => { #(NC) Name => 'FlashMeteringMode', PrintConv => { 0 => 'E-TTL', 3 => 'TTL', 4 => 'External Auto', 5 => 'External Manual', 6 => 'Off', }, }, 0x19 => { %ciCameraTemperature }, # (60D + 0) 0x1e => { %ciFocalLength }, # (60D + 0) 0x38 => { # (60D + 2) Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x57 => { # (60D + 2, 550D + 3) Name => 'FocusDistanceUpper', %focusDistanceByteSwap, }, 0x59 => { # (60D + 2, 550D + 3) Name => 'FocusDistanceLower', %focusDistanceByteSwap, }, 0x7b => { # (550D + 3) Name => 'WhiteBalance', Format => 'int16u', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0x7f => { # (60D + 2, 550D + 3) Name => 'ColorTemperature', Format => 'int16u', }, 0xb3 => { # (550D + 3) Name => 'PictureStyle', Format => 'int8u', Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, 0xea => { # (60D + 2, 550D + 3) Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0xec => { %ciMinFocal }, # (60D + 2) 0xee => { %ciMaxFocal }, # (60D + 2) 0x19b => { # (60D + 2) Name => 'FirmwareVersion', Format => 'string[6]', Writable => 0, RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', }, 0x1db => { # (60D + 2) (NC) Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x1e7 => { # (60D + 2) (NC) Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x2fb => { Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo2' }, }, ); # Canon camera information for 650D (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo650D = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, IS_SUBDIR => [ 0x390 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'CameraInfo tags for the EOS 650D and 700D.', 0x03 => { %ciFNumber }, 0x04 => { %ciExposureTime }, 0x06 => { %ciISO }, 0x1b => { %ciCameraTemperature }, # (1DX/5DmkIII + 0) 0x23 => { %ciFocalLength }, # (1DX/5DmkIII + 3) # 0x35 - seems to be the same as 0x54 0x7d => { # (1DX/5DmkIII + 3) Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x8c => { # (1DX + 3) Name => 'FocusDistanceUpper', %focusDistanceByteSwap, }, 0x8e => { # (1DX + 3) Name => 'FocusDistanceLower', %focusDistanceByteSwap, }, 0xbc => { # (1DX + 7) Name => 'WhiteBalance', Format => 'int16u', SeparateTable => 1, PrintConv => \%canonWhiteBalance, }, 0xc0 => { # (1DX + 7) Name => 'ColorTemperature', Format => 'int16u', }, 0xf4 => { # (1DX + 7) Name => 'PictureStyle', Format => 'int8u', Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, 0x127 => { Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0x129 => { %ciMinFocal }, 0x12b => { %ciMaxFocal }, 0x21b => { # (650D version 1.0.1) Name => 'FirmwareVersion', Condition => '$$self{Model} =~ /(650D|REBEL T4i|Kiss X6i)\b/', Notes => '650D', Format => 'string[6]', Writable => 0, RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', }, 0x220 => { # (700D version 1.1.1/2.1.1) Name => 'FirmwareVersion', Condition => '$$self{Model} =~ /(700D|Rebel T5i|Kiss X7i)\b/', Notes => '700D', Format => 'string[6]', Writable => 0, RawConv => '$val=~/^\d+\.\d+\.\d+\s*$/ ? $val : undef', }, 0x270 => { # (NC) Name => 'FileIndex', Condition => '$$self{Model} =~ /(650D|REBEL T4i|Kiss X6i)\b/', Notes => '650D', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x274 => { # (NC) Name => 'FileIndex', Condition => '$$self{Model} =~ /(700D|Rebel T5i|Kiss X7i)\b/', Notes => '700D', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x27c => { # (NC) Name => 'DirectoryIndex', Condition => '$$self{Model} =~ /(650D|REBEL T4i|Kiss X6i)\b/', Notes => '650D', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x280 => { # (NC) Name => 'DirectoryIndex', Condition => '$$self{Model} =~ /(700D|Rebel T5i|Kiss X7i)\b/', Notes => '700D', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val - 1', ValueConvInv => '$val + 1', }, 0x390 => { Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo2' }, }, ); # Canon camera information for 1000D (MakerNotes tag 0x0d) (ref PH) %Image::ExifTool::Canon::CameraInfo1000D = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, PRIORITY => 0, IS_SUBDIR => [ 0x267 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'CameraInfo tags for the EOS 1000D.', 0x03 => { %ciFNumber }, #PH 0x04 => { %ciExposureTime }, #PH 0x06 => { %ciISO }, #PH 0x15 => { #PH (580 EX II) Name => 'FlashMeteringMode', PrintConv => { 0 => 'E-TTL', 3 => 'TTL', 4 => 'External Auto', 5 => 'External Manual', 6 => 'Off', }, }, 0x18 => { %ciCameraTemperature }, #36 0x1b => { %ciMacroMagnification }, #PH (NC) 0x1d => { %ciFocalLength }, #PH 0x30 => { #20 Name => 'CameraOrientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, 0x43 => { #20 Name => 'FocusDistanceUpper', %focusDistanceByteSwap, }, 0x45 => { #20 Name => 'FocusDistanceLower', %focusDistanceByteSwap, }, 0x6f => { #PH Name => 'WhiteBalance', Format => 'int16u', PrintConv => \%canonWhiteBalance, SeparateTable => 1, }, 0x73 => { #PH Name => 'ColorTemperature', Format => 'int16u', }, 0xe2 => { #PH Name => 'LensType', Format => 'int16uRev', # value is big-endian SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%canonLensTypes, }, 0xe4 => { %ciMinFocal }, #PH 0xe6 => { %ciMaxFocal }, #PH 0x10b => { #PH Name => 'FirmwareVersion', Format => 'string[6]', }, 0x137 => { #PH (NC) Name => 'DirectoryIndex', Groups => { 2 => 'Image' }, Format => 'int32u', }, 0x143 => { #PH Name => 'FileIndex', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x267 => { #PH Name => 'PictureStyleInfo', SubDirectory => { TagTable => 'Image::ExifTool::Canon::PSInfo' }, }, 0x937 => { #PH Name => 'LensModel', Format => 'string[64]', }, ); # Canon camera information for PowerShot models (MakerNotes tag 0x0d) - PH %Image::ExifTool::Canon::CameraInfoPowerShot = ( %binaryDataAttrs, FORMAT => 'int32s', FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ CameraInfo tags for PowerShot models such as the A450, A460, A550, A560, A570, A630, A640, A650, A710, A720, G7, G9, S5, SD40, SD750, SD800, SD850, SD870, SD900, SD950, SD1000, SX100 and TX1. }, 0x00 => { Name => 'ISO', Groups => { 2 => 'Image' }, ValueConv => '100*exp((($val-411)/96)*log(2))', ValueConvInv => 'log($val/100)/log(2)*96+411', PrintConv => 'sprintf("%.0f",$val)', PrintConvInv => '$val', }, 0x05 => { Name => 'FNumber', Groups => { 2 => 'Image' }, ValueConv => 'exp($val/192*log(2))', ValueConvInv => 'log($val)*192/log(2)', PrintConv => 'sprintf("%.2g",$val)', PrintConvInv => '$val', }, 0x06 => { Name => 'ExposureTime', Groups => { 2 => 'Image' }, ValueConv => 'exp(-$val/96*log(2))', ValueConvInv => '-log($val)*96/log(2)', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x17 => 'Rotation', # usually the same as Orientation (but not always! why?) # 0x25 - flash fired/not fired (ref 37) # 0x26 - related to flash mode? (ref 37) # 0x37 - related to flash strength (ref 37) # 0x38 - pre-flash fired/no fired or flash data collection (ref 37) 135 => { # [-3] <-- index relative to CameraInfoCount Name => 'CameraTemperature', Condition => '$$self{CameraInfoCount} == 138', Notes => 'A450, A460, A550, A630, A640 and A710', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, 145 => { #37 [-3] Name => 'CameraTemperature', Condition => '$$self{CameraInfoCount} == 148', Notes => q{ A560, A570, A650, A720, G7, G9, S5, SD40, SD750, SD800, SD850, SD870, SD900, SD950, SD1000, SX100 and TX1 }, PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, ); # Canon camera information for some PowerShot models (MakerNotes tag 0x0d) - PH %Image::ExifTool::Canon::CameraInfoPowerShot2 = ( %binaryDataAttrs, FORMAT => 'int32s', FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ CameraInfo tags for PowerShot models such as the A470, A480, A490, A495, A580, A590, A1000, A1100, A2000, A2100, A3000, A3100, D10, E1, G10, G11, S90, S95, SD770, SD780, SD790, SD880, SD890, SD940, SD960, SD970, SD980, SD990, SD1100, SD1200, SD1300, SD1400, SD3500, SD4000, SD4500, SX1, SX10, SX20, SX110, SX120, SX130, SX200 and SX210. }, 0x01 => { Name => 'ISO', Groups => { 2 => 'Image' }, ValueConv => '100*exp((($val-411)/96)*log(2))', ValueConvInv => 'log($val/100)/log(2)*96+411', PrintConv => 'sprintf("%.0f",$val)', PrintConvInv => '$val', }, 0x06 => { Name => 'FNumber', Groups => { 2 => 'Image' }, ValueConv => 'exp($val/192*log(2))', ValueConvInv => 'log($val)*192/log(2)', PrintConv => 'sprintf("%.2g",$val)', PrintConvInv => '$val', }, 0x07 => { Name => 'ExposureTime', Groups => { 2 => 'Image' }, ValueConv => 'exp(-$val/96*log(2))', ValueConvInv => '-log($val)*96/log(2)', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x18 => 'Rotation', 153 => { # [-3] <-- index relative to CameraInfoCount Name => 'CameraTemperature', Condition => '$$self{CameraInfoCount} == 156', Notes => 'A470, A580, A590, SD770, SD790, SD890 and SD1100', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, 159 => { # [-3] Name => 'CameraTemperature', Condition => '$$self{CameraInfoCount} == 162', Notes => 'A1000, A2000, E1, G10, SD880, SD990, SX1, SX10 and SX110', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, 164 => { # [-3] Name => 'CameraTemperature', Condition => '$$self{CameraInfoCount} == 167', Notes => 'A480, A1100, A2100, D10, SD780, SD960, SD970, SD1200 and SX200', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, 168 => { # [-3] Name => 'CameraTemperature', Condition => '$$self{CameraInfoCount} == 171', Notes => q{ A490, A495, A3000, A3100, G11, S90, SD940, SD980, SD1300, SD1400, SD3500, SD4000, SX20, SX120 and SX210 }, PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, 261 => { # [-3] Name => 'CameraTemperature', Condition => '$$self{CameraInfoCount} == 264', Notes => 'S95, SD4500 and SX130', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, ); # unknown Canon camera information (MakerNotes tag 0x0d) - PH %Image::ExifTool::Canon::CameraInfoUnknown32 = ( %binaryDataAttrs, FORMAT => 'int32s', FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Unknown CameraInfo tags are divided into 3 tables based on format size.', # This tag may be uncommented, and is useful for generating # lists of models in the "Notes" below... # 0 => { # Name => 'CameraInfoCount', # ValueConv => '$$self{CameraInfoCount}', # }, 71 => { # [-1] <-- index relative to CameraInfoCount Name => 'CameraTemperature', Condition => '$$self{CameraInfoCount} == 72', Notes => 'S1', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, 83 => { # [-2] Name => 'CameraTemperature', Condition => '$$self{CameraInfoCount} == 85', Notes => 'S2', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, 91 => { # [-2 or -3] Name => 'CameraTemperature', Condition => '$$self{CameraInfoCount} == 93 or $$self{CameraInfoCount} == 94', Notes => 'A410, A610, A620, S80, SD30, SD400, SD430, SD450, SD500 and SD550', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, 92 => { # [-4] Name => 'CameraTemperature', Condition => '$$self{CameraInfoCount} == 96', Notes => 'S3', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, 100 => { # [-4] Name => 'CameraTemperature', Condition => '$$self{CameraInfoCount} == 104', Notes => 'A420, A430, A530, A540, A700, SD600, SD630 and SD700', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, -3 => { Name => 'CameraTemperature', Condition => '$$self{CameraInfoCount} > 400', Notes => '3 entries from end of record for most newer camera models', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, # 466 => { # [-3] # Name => 'CameraTemperature', # Condition => '$$self{CameraInfoCount} == 469', # Notes => '100HS, 300HS, 500HS, A1200, A2200, A3200 and A3300', # PrintConv => '"$val C"', # PrintConvInv => '$val=~s/ ?C//; $val', # }, # 503 => { # [-3] # Name => 'CameraTemperature', # Condition => '$$self{CameraInfoCount} == 506', # Notes => 'A800', # PrintConv => '"$val C"', # PrintConvInv => '$val=~s/ ?C//; $val', # }, # 506 => { # [-3] # Name => 'CameraTemperature', # Condition => '$$self{CameraInfoCount} == 509', # Notes => 'SX230HS', # PrintConv => '"$val C"', # PrintConvInv => '$val=~s/ ?C//; $val', # }, # 520 => { # [-3] # Name => 'CameraTemperature', # Condition => '$$self{CameraInfoCount} == 523', # Notes => '310HS, 510HS, G1X, S100 (new), SX40HS and SX150', # PrintConv => '"$val C"', # PrintConvInv => '$val=~s/ ?C//; $val', # }, # 524 => { # [-3] # Name => 'CameraTemperature', # Condition => '$$self{CameraInfoCount} == 527', # Notes => '110HS, 520HS, A2300, A2400, A3400, A4000, D20 and SX260HS', # PrintConv => '"$val C"', # PrintConvInv => '$val=~s/ ?C//; $val', # }, # 532 => { # [-3] # Name => 'CameraTemperature', # Condition => '$$self{CameraInfoCount} == 535', # Notes => 'S110 (new), G15, SX50, SX160IS and SX500IS', # PrintConv => '"$val C"', # PrintConvInv => '$val=~s/ ?C//; $val', # }, # 547 => { # [-3] # Name => 'CameraTemperature', # Condition => '$$self{CameraInfoCount} == 550', # Notes => '130IS, A1400, A2500 and A2600', # PrintConv => '"$val C"', # PrintConvInv => '$val=~s/ ?C//; $val', # }, # 549 => { # [-3] # Name => 'CameraTemperature', # Condition => '$$self{CameraInfoCount} == 552', # Notes => '115IS, 130IS, SX270, SX280, 330HS and A3500', # PrintConv => '"$val C"', # PrintConvInv => '$val=~s/ ?C//; $val', # }, # 552 => { # [-3] # Name => 'CameraTemperature', # Condition => '$$self{CameraInfoCount} == 555', # Notes => 'S200 (new)', # PrintConv => '"$val C"', # PrintConvInv => '$val=~s/ ?C//; $val', # }, # 850 => { # [-3] # Name => 'CameraTemperature', # Condition => '$$self{CameraInfoCount} == 853', # Notes => 'N', # PrintConv => '"$val C"', # PrintConvInv => '$val=~s/ ?C//; $val', # }, # 895 => { # [-3] # Name => 'CameraTemperature', # Condition => '$$self{CameraInfoCount} == 898', # Notes => 'G1XmkII, N100, SX600HS and SX700HS', # PrintConv => '"$val C"', # PrintConvInv => '$val=~s/ ?C//; $val', # }, ); # unknown Canon camera information (MakerNotes tag 0x0d) - PH %Image::ExifTool::Canon::CameraInfoUnknown16 = ( %binaryDataAttrs, FORMAT => 'int16s', FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, ); # unknown Canon camera information (MakerNotes tag 0x0d) - PH %Image::ExifTool::Canon::CameraInfoUnknown = ( %binaryDataAttrs, FORMAT => 'int8s', FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x16b => { Name => 'LensSerialNumber', Condition => '$$self{Model} =~ /^Canon EOS 5DS/', # (good for 5DS and 5DSR) Format => 'undef[5]', Priority => 0, ValueConv => 'unpack("H*",$val)', ValueConvInv => 'length($val) < 10 and $val = 0 x (10-length($val)) . $val; pack("H*",$val)', }, ); # Picture Style information for various cameras (ref 48) %Image::ExifTool::Canon::PSInfo = ( %binaryDataAttrs, FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Custom picture style information for various models.', # (values expected to be "n/a" are flagged as Unknown) 0x00 => { Name => 'ContrastStandard', %psInfo }, 0x04 => { Name => 'SharpnessStandard', %psInfo }, 0x08 => { Name => 'SaturationStandard', %psInfo }, 0x0c => { Name => 'ColorToneStandard', %psInfo }, 0x10 => { Name => 'FilterEffectStandard', %psInfo, Unknown => 1 }, 0x14 => { Name => 'ToningEffectStandard', %psInfo, Unknown => 1 }, 0x18 => { Name => 'ContrastPortrait', %psInfo }, 0x1c => { Name => 'SharpnessPortrait', %psInfo }, 0x20 => { Name => 'SaturationPortrait', %psInfo }, 0x24 => { Name => 'ColorTonePortrait', %psInfo }, 0x28 => { Name => 'FilterEffectPortrait', %psInfo, Unknown => 1 }, 0x2c => { Name => 'ToningEffectPortrait', %psInfo, Unknown => 1 }, 0x30 => { Name => 'ContrastLandscape', %psInfo }, 0x34 => { Name => 'SharpnessLandscape', %psInfo }, 0x38 => { Name => 'SaturationLandscape', %psInfo }, 0x3c => { Name => 'ColorToneLandscape', %psInfo }, 0x40 => { Name => 'FilterEffectLandscape', %psInfo, Unknown => 1 }, 0x44 => { Name => 'ToningEffectLandscape', %psInfo, Unknown => 1 }, 0x48 => { Name => 'ContrastNeutral', %psInfo }, 0x4c => { Name => 'SharpnessNeutral', %psInfo }, 0x50 => { Name => 'SaturationNeutral', %psInfo }, 0x54 => { Name => 'ColorToneNeutral', %psInfo }, 0x58 => { Name => 'FilterEffectNeutral', %psInfo, Unknown => 1 }, 0x5c => { Name => 'ToningEffectNeutral', %psInfo, Unknown => 1 }, 0x60 => { Name => 'ContrastFaithful', %psInfo }, 0x64 => { Name => 'SharpnessFaithful', %psInfo }, 0x68 => { Name => 'SaturationFaithful', %psInfo }, 0x6c => { Name => 'ColorToneFaithful', %psInfo }, 0x70 => { Name => 'FilterEffectFaithful', %psInfo, Unknown => 1 }, 0x74 => { Name => 'ToningEffectFaithful', %psInfo, Unknown => 1 }, 0x78 => { Name => 'ContrastMonochrome', %psInfo }, 0x7c => { Name => 'SharpnessMonochrome', %psInfo }, 0x80 => { Name => 'SaturationMonochrome', %psInfo, Unknown => 1 }, 0x84 => { Name => 'ColorToneMonochrome', %psInfo, Unknown => 1 }, 0x88 => { Name => 'FilterEffectMonochrome',%psInfo, PrintConv => { 0 => 'None', 1 => 'Yellow', 2 => 'Orange', 3 => 'Red', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0x8c => { Name => 'ToningEffectMonochrome',%psInfo, PrintConv => { 0 => 'None', 1 => 'Sepia', 2 => 'Blue', 3 => 'Purple', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0x90 => { Name => 'ContrastUserDef1', %psInfo }, 0x94 => { Name => 'SharpnessUserDef1', %psInfo }, 0x98 => { Name => 'SaturationUserDef1', %psInfo }, 0x9c => { Name => 'ColorToneUserDef1', %psInfo }, 0xa0 => { Name => 'FilterEffectUserDef1', %psInfo, PrintConv => { 0 => 'None', 1 => 'Yellow', 2 => 'Orange', 3 => 'Red', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0xa4 => { Name => 'ToningEffectUserDef1', %psInfo, PrintConv => { 0 => 'None', 1 => 'Sepia', 2 => 'Blue', 3 => 'Purple', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0xa8 => { Name => 'ContrastUserDef2', %psInfo }, 0xac => { Name => 'SharpnessUserDef2', %psInfo }, 0xb0 => { Name => 'SaturationUserDef2', %psInfo }, 0xb4 => { Name => 'ColorToneUserDef2', %psInfo }, 0xb8 => { Name => 'FilterEffectUserDef2', %psInfo, PrintConv => { 0 => 'None', 1 => 'Yellow', 2 => 'Orange', 3 => 'Red', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0xbc => { Name => 'ToningEffectUserDef2', %psInfo, PrintConv => { 0 => 'None', 1 => 'Sepia', 2 => 'Blue', 3 => 'Purple', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0xc0 => { Name => 'ContrastUserDef3', %psInfo }, 0xc4 => { Name => 'SharpnessUserDef3', %psInfo }, 0xc8 => { Name => 'SaturationUserDef3', %psInfo }, 0xcc => { Name => 'ColorToneUserDef3', %psInfo }, 0xd0 => { Name => 'FilterEffectUserDef3', %psInfo, PrintConv => { 0 => 'None', 1 => 'Yellow', 2 => 'Orange', 3 => 'Red', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0xd4 => { Name => 'ToningEffectUserDef3', %psInfo, PrintConv => { 0 => 'None', 1 => 'Sepia', 2 => 'Blue', 3 => 'Purple', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, # base picture style names: 0xd8 => { Name => 'UserDef1PictureStyle', Format => 'int16u', SeparateTable => 'UserDefStyle', PrintConv => \%userDefStyles, }, 0xda => { Name => 'UserDef2PictureStyle', Format => 'int16u', SeparateTable => 'UserDefStyle', PrintConv => \%userDefStyles, }, 0xdc => { Name => 'UserDef3PictureStyle', Format => 'int16u', SeparateTable => 'UserDefStyle', PrintConv => \%userDefStyles, }, ); # Picture Style information for the 60D, etc (ref 48) %Image::ExifTool::Canon::PSInfo2 = ( %binaryDataAttrs, FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Custom picture style information for the EOS 5DmkIII, 60D, 600D and 1100D.', # (values expected to be "n/a" are flagged as Unknown) 0x00 => { Name => 'ContrastStandard', %psInfo }, 0x04 => { Name => 'SharpnessStandard', %psInfo }, 0x08 => { Name => 'SaturationStandard', %psInfo }, 0x0c => { Name => 'ColorToneStandard', %psInfo }, 0x10 => { Name => 'FilterEffectStandard', %psInfo, Unknown => 1 }, 0x14 => { Name => 'ToningEffectStandard', %psInfo, Unknown => 1 }, 0x18 => { Name => 'ContrastPortrait', %psInfo }, 0x1c => { Name => 'SharpnessPortrait', %psInfo }, 0x20 => { Name => 'SaturationPortrait', %psInfo }, 0x24 => { Name => 'ColorTonePortrait', %psInfo }, 0x28 => { Name => 'FilterEffectPortrait', %psInfo, Unknown => 1 }, 0x2c => { Name => 'ToningEffectPortrait', %psInfo, Unknown => 1 }, 0x30 => { Name => 'ContrastLandscape', %psInfo }, 0x34 => { Name => 'SharpnessLandscape', %psInfo }, 0x38 => { Name => 'SaturationLandscape', %psInfo }, 0x3c => { Name => 'ColorToneLandscape', %psInfo }, 0x40 => { Name => 'FilterEffectLandscape', %psInfo, Unknown => 1 }, 0x44 => { Name => 'ToningEffectLandscape', %psInfo, Unknown => 1 }, 0x48 => { Name => 'ContrastNeutral', %psInfo }, 0x4c => { Name => 'SharpnessNeutral', %psInfo }, 0x50 => { Name => 'SaturationNeutral', %psInfo }, 0x54 => { Name => 'ColorToneNeutral', %psInfo }, 0x58 => { Name => 'FilterEffectNeutral', %psInfo, Unknown => 1 }, 0x5c => { Name => 'ToningEffectNeutral', %psInfo, Unknown => 1 }, 0x60 => { Name => 'ContrastFaithful', %psInfo }, 0x64 => { Name => 'SharpnessFaithful', %psInfo }, 0x68 => { Name => 'SaturationFaithful', %psInfo }, 0x6c => { Name => 'ColorToneFaithful', %psInfo }, 0x70 => { Name => 'FilterEffectFaithful', %psInfo, Unknown => 1 }, 0x74 => { Name => 'ToningEffectFaithful', %psInfo, Unknown => 1 }, 0x78 => { Name => 'ContrastMonochrome', %psInfo }, 0x7c => { Name => 'SharpnessMonochrome', %psInfo }, 0x80 => { Name => 'SaturationMonochrome', %psInfo, Unknown => 1 }, 0x84 => { Name => 'ColorToneMonochrome', %psInfo, Unknown => 1 }, 0x88 => { Name => 'FilterEffectMonochrome',%psInfo, PrintConv => { 0 => 'None', 1 => 'Yellow', 2 => 'Orange', 3 => 'Red', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0x8c => { Name => 'ToningEffectMonochrome',%psInfo, PrintConv => { 0 => 'None', 1 => 'Sepia', 2 => 'Blue', 3 => 'Purple', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0x90 => { Name => 'ContrastAuto', %psInfo }, 0x94 => { Name => 'SharpnessAuto', %psInfo }, 0x98 => { Name => 'SaturationAuto', %psInfo }, 0x9c => { Name => 'ColorToneAuto', %psInfo }, 0xa0 => { Name => 'FilterEffectAuto', %psInfo, PrintConv => { 0 => 'None', 1 => 'Yellow', 2 => 'Orange', 3 => 'Red', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0xa4 => { Name => 'ToningEffectAuto', %psInfo, PrintConv => { 0 => 'None', 1 => 'Sepia', 2 => 'Blue', 3 => 'Purple', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0xa8 => { Name => 'ContrastUserDef1', %psInfo }, 0xac => { Name => 'SharpnessUserDef1', %psInfo }, 0xb0 => { Name => 'SaturationUserDef1', %psInfo }, 0xb4 => { Name => 'ColorToneUserDef1', %psInfo }, 0xb8 => { Name => 'FilterEffectUserDef1', %psInfo, PrintConv => { 0 => 'None', 1 => 'Yellow', 2 => 'Orange', 3 => 'Red', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0xbc => { Name => 'ToningEffectUserDef1', %psInfo, PrintConv => { 0 => 'None', 1 => 'Sepia', 2 => 'Blue', 3 => 'Purple', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0xc0 => { Name => 'ContrastUserDef2', %psInfo }, 0xc4 => { Name => 'SharpnessUserDef2', %psInfo }, 0xc8 => { Name => 'SaturationUserDef2', %psInfo }, 0xcc => { Name => 'ColorToneUserDef2', %psInfo }, 0xd0 => { Name => 'FilterEffectUserDef2', %psInfo, PrintConv => { 0 => 'None', 1 => 'Yellow', 2 => 'Orange', 3 => 'Red', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0xd4 => { Name => 'ToningEffectUserDef2', %psInfo, PrintConv => { 0 => 'None', 1 => 'Sepia', 2 => 'Blue', 3 => 'Purple', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0xd8 => { Name => 'ContrastUserDef3', %psInfo }, 0xdc => { Name => 'SharpnessUserDef3', %psInfo }, 0xe0 => { Name => 'SaturationUserDef3', %psInfo }, 0xe4 => { Name => 'ColorToneUserDef3', %psInfo }, 0xe8 => { Name => 'FilterEffectUserDef3', %psInfo, PrintConv => { 0 => 'None', 1 => 'Yellow', 2 => 'Orange', 3 => 'Red', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, 0xec => { Name => 'ToningEffectUserDef3', %psInfo, PrintConv => { 0 => 'None', 1 => 'Sepia', 2 => 'Blue', 3 => 'Purple', 4 => 'Green', -559038737 => 'n/a', # (0xdeadbeef) }, }, # base picture style names: 0xf0 => { Name => 'UserDef1PictureStyle', Format => 'int16u', SeparateTable => 'UserDefStyle', PrintConv => \%userDefStyles, }, 0xf2 => { Name => 'UserDef2PictureStyle', Format => 'int16u', SeparateTable => 'UserDefStyle', PrintConv => \%userDefStyles, }, 0xf4 => { Name => 'UserDef3PictureStyle', Format => 'int16u', SeparateTable => 'UserDefStyle', PrintConv => \%userDefStyles, }, ); # Movie information (MakerNotes tag 0x11) (ref PH) %Image::ExifTool::Canon::MovieInfo = ( %binaryDataAttrs, FORMAT => 'int16u', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, NOTES => 'Tags written by some Canon cameras when recording video.', 1 => { # (older PowerShot AVI) Name => 'FrameRate', RawConv => '$val == 65535 ? undef: $val', ValueConvInv => '$val > 65535 ? 65535 : $val', }, 2 => { # (older PowerShot AVI) Name => 'FrameCount', RawConv => '$val == 65535 ? undef: $val', ValueConvInv => '$val > 65535 ? 65535 : $val', }, # 3 - values: 0x0001 (older PowerShot AVI), 0x4004, 0x4005 4 => { Name => 'FrameCount', Format => 'int32u', }, 6 => { Name => 'FrameRate', Format => 'rational32u', PrintConv => 'int($val * 1000 + 0.5) / 1000', PrintConvInv => '$val', }, # 9/10 - same as 6/7 (FrameRate) 106 => { Name => 'Duration', Format => 'int32u', ValueConv => '$val / 1000', ValueConvInv => '$val * 1000', PrintConv => 'ConvertDuration($val)', PrintConvInv => q{ my @a = ($val =~ /\d+(?:\.\d*)?/g); $val = pop(@a) || 0; # seconds $val += pop(@a) * 60 if @a; # minutes $val += pop(@a) * 3600 if @a; # hours return $val; }, }, 108 => { Name => 'AudioBitrate', Groups => { 2 => 'Audio' }, Format => 'int32u', PrintConv => 'ConvertBitrate($val)', PrintConvInv => q{ $val =~ /^(\d+(?:\.\d*)?) ?([kMG]?bps)?$/ or return undef; return $1 * {bps=>1,kbps=>1000,Mbps=>1000000,Gbps=>1000000000}->{$2 || 'bps'}; }, }, 110 => { Name => 'AudioSampleRate', Groups => { 2 => 'Audio' }, Format => 'int32u', }, 112 => { # (guess) Name => 'AudioChannels', Groups => { 2 => 'Audio' }, Format => 'int32u', }, # 114 - values: 0 (60D), 1 (S95) 116 => { Name => 'VideoCodec', Format => 'undef[4]', # swap bytes if little endian RawConv => 'GetByteOrder() eq "MM" ? $val : pack("N",unpack("V",$val))', RawConvInv => 'GetByteOrder() eq "MM" ? $val : pack("N",unpack("V",$val))', }, # 125 - same as 10 ); # AF information (MakerNotes tag 0x12) - PH %Image::ExifTool::Canon::AFInfo = ( PROCESS_PROC => \&ProcessSerialData, VARS => { ID_LABEL => 'Sequence' }, FORMAT => 'int16u', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ Auto-focus information used by many older Canon models. The values in this record are sequential, and some have variable sizes based on the value of NumAFPoints (which may be 1,5,7,9,15,45 or 53). The AFArea coordinates are given in a system where the image has dimensions given by AFImageWidth and AFImageHeight, and 0,0 is the image center. The direction of the Y axis depends on the camera model, with positive Y upwards for EOS models, but apparently downwards for PowerShot models. }, 0 => { Name => 'NumAFPoints', }, 1 => { Name => 'ValidAFPoints', Notes => 'number of AF points valid in the following information', }, 2 => { Name => 'CanonImageWidth', Groups => { 2 => 'Image' }, }, 3 => { Name => 'CanonImageHeight', Groups => { 2 => 'Image' }, }, 4 => { Name => 'AFImageWidth', Notes => 'size of image in AF coordinates', }, 5 => 'AFImageHeight', 6 => 'AFAreaWidth', 7 => 'AFAreaHeight', 8 => { Name => 'AFAreaXPositions', Format => 'int16s[$val{0}]', }, 9 => { Name => 'AFAreaYPositions', Format => 'int16s[$val{0}]', }, 10 => { Name => 'AFPointsInFocus', Format => 'int16s[int(($val{0}+15)/16)]', PrintConv => 'Image::ExifTool::DecodeBits($val, undef, 16)', }, 11 => [ { Name => 'PrimaryAFPoint', Condition => q{ $$self{Model} !~ /EOS/ and (not $$self{AFInfoCount} or $$self{AFInfoCount} != 36) }, }, { # (some PowerShot 9-point systems put PrimaryAFPoint after 8 unknown values) Name => 'Canon_AFInfo_0x000b', Condition => '$$self{Model} !~ /EOS/', Format => 'int16u[8]', Unknown => 1, }, # (serial processing stops here for EOS cameras) ], 12 => 'PrimaryAFPoint', ); # newer AF information (MakerNotes tag 0x26 and 0x32) - PH (A570IS,1DmkIII,40D and G1XmkII) # (Note: this tag is out of sequence in A570IS maker notes) %Image::ExifTool::Canon::AFInfo2 = ( PROCESS_PROC => \&ProcessSerialData, VARS => { ID_LABEL => 'Sequence' }, FORMAT => 'int16u', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ Newer version of the AFInfo record containing much of the same information (and coordinate confusion) as the older version. In this record, NumAFPoints may be 7, 9, 11, 19, 31, 45 or 61, depending on the camera model. }, 0 => { Name => 'AFInfoSize', Unknown => 1, # normally don't print this out }, 1 => { Name => 'AFAreaMode', PrintConv => { 0 => 'Off (Manual Focus)', 1 => 'AF Point Expansion (surround)', #PH 2 => 'Single-point AF', # 3 - n/a 4 => 'Auto', #forum6237 (AiAF on A570IS) 5 => 'Face Detect AF', 6 => 'Face + Tracking', #PH (NC, EOS M, live view) 7 => 'Zone AF', #46 8 => 'AF Point Expansion (4 point)', #46/PH/forum6237 9 => 'Spot AF', #46 10 => 'AF Point Expansion (8 point)', #forum6237 11 => 'Flexizone Multi', #PH (NC, EOS M, live view) # 12 - also "Flexizone Multi"? (PH) 13 => 'Flexizone Single', #PH (EOS M default, live view) 14 => 'Large Zone AF', #PH/forum6237 (7DmkII) }, }, 2 => { Name => 'NumAFPoints', RawConv => '$$self{NumAFPoints} = $val', # save for later }, 3 => { Name => 'ValidAFPoints', Notes => 'number of AF points valid in the following information', }, 4 => { Name => 'CanonImageWidth', Groups => { 2 => 'Image' }, }, 5 => { Name => 'CanonImageHeight', Groups => { 2 => 'Image' }, }, 6 => { Name => 'AFImageWidth', Notes => 'size of image in AF coordinates', }, 7 => 'AFImageHeight', 8 => { Name => 'AFAreaWidths', Format => 'int16s[$val{2}]', }, 9 => { Name => 'AFAreaHeights', Format => 'int16s[$val{2}]', }, 10 => { Name => 'AFAreaXPositions', Format => 'int16s[$val{2}]', }, 11 => { Name => 'AFAreaYPositions', Format => 'int16s[$val{2}]', }, 12 => { Name => 'AFPointsInFocus', Format => 'int16s[int(($val{2}+15)/16)]', PrintConv => 'Image::ExifTool::DecodeBits($val, undef, 16)', }, 13 => [ { Name => 'AFPointsSelected', Condition => '$$self{Model} =~ /EOS/', Format => 'int16s[int(($val{2}+15)/16)]', PrintConv => 'Image::ExifTool::DecodeBits($val, undef, 16)', }, { Name => 'Canon_AFInfo2_0x000d', Format => 'int16s[int(($val{2}+15)/16)+1]', Unknown => 1, }, ], 14 => { # usually, but not always, the lowest number AF point in focus Name => 'PrimaryAFPoint', Condition => '$$self{Model} !~ /EOS/ and not $$self{AFInfo3}', # (not valid for G1XmkII) }, ); # contrast information (MakerNotes tag 0x27) - PH %Image::ExifTool::Canon::ContrastInfo = ( %binaryDataAttrs, FORMAT => 'int16u', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 4 => { Name => 'IntelligentContrast', PrintHex => 1, PrintConv => { 0x00 => 'Off', 0x08 => 'On', 0xffff => 'n/a', OTHER => sub { # DPP shows "On" for any value except 0xffff when bit 0x08 is set my ($val, $inv) = @_; if ($inv) { $val =~ /(0x[0-9a-f]+)/i or $val =~ /(\d+)/; return $1; } else { return sprintf("On (0x%.2x)",$val) if $val & 0x08; return sprintf("Off (0x%.2x)",$val); } }, }, }, # 6 - 0=normal, 257=i-Contrast On ); # time information (MakerNotes tag 0x35) - PH (1DX, 5DmkIII) %Image::ExifTool::Canon::TimeInfo = ( %binaryDataAttrs, FORMAT => 'int32s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Time' }, # 0 - size (16 bytes) 1 => { Name => 'TimeZone', PrintConv => 'Image::ExifTool::TimeZoneString($val)', PrintConvInv => sub { my $val = shift; $val =~ /^([-+]?)(\d{1,2}):?(\d{2})$/ or return undef; return(($1 eq '-' ? -1 : 1) * ($2 * 60 + $3)); }, }, 2 => { Name => 'TimeZoneCity', PrintConvColumns => 3, PrintConv => { # [square brackets] = actual time zone for each city # (round brackets) = observed time zone values from sample images # --> unobserved entries have not been confirmed! 0 => 'n/a', # (PowerShot models) 1 => 'Chatham Islands', # [+12:45] 2 => 'Wellington', # [+12] (+12:00,DST+0) 3 => 'Solomon Islands', # [+11] 4 => 'Sydney', # [+10] (+11:00,DST+1) 5 => 'Adelaide', # [+9:30] 6 => 'Tokyo', # [+9] (+09:00,DST+0) 7 => 'Hong Kong', # [+8] (+08:00,DST+0) 8 => 'Bangkok', # [+7] (+08:00,DST+1) 9 => 'Yangon', # [+6:30] 10 => 'Dhaka', # [+6] (Canon uses old "Dacca" spelling) 11 => 'Kathmandu', # [+5:45] 12 => 'Delhi', # [+5:30] 13 => 'Karachi', # [+5] 14 => 'Kabul', # [+4:30] 15 => 'Dubai', # [+4] 16 => 'Tehran', # [+3:30] 17 => 'Moscow', # [+4] (+03:00,DST+0) (! changed to +4 permanent DST in 2011) 18 => 'Cairo', # [+2] 19 => 'Paris', # [+1] (+01:10,DST+0; +02:00,DST+1) 20 => 'London', # [0] (+00:00,DST+0) 21 => 'Azores', # [-1] 22 => 'Fernando de Noronha', # [-2] 23 => 'Sao Paulo', # [-3] 24 => 'Newfoundland', # [-3:30] 25 => 'Santiago', # [-4] 26 => 'Caracas', # [-4:30] 27 => 'New York', # [-5] (-05:00,DST+0; -04:00,DST+1) 28 => 'Chicago', # [-6] 29 => 'Denver', # [-7] 30 => 'Los Angeles', # [-8] (-08:00,DST+0; -07:00,DST+1) 31 => 'Anchorage', # [-9] 32 => 'Honolulu', # [-10] 33 => 'Samoa', # [+13] 32766 => '(not set)', # (NC) }, }, 3 => { Name => 'DaylightSavings', PrintConv => { 0 => 'Off', 60 => 'On', }, }, ); # my color mode information (MakerNotes tag 0x1d) - PH (A570IS) %Image::ExifTool::Canon::MyColors = ( %binaryDataAttrs, FORMAT => 'int16u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x02 => { Name => 'MyColorMode', PrintConvColumns => 2, PrintConv => { 0 => 'Off', 1 => 'Positive Film', #15 (SD600) 2 => 'Light Skin Tone', #15 3 => 'Dark Skin Tone', #15 4 => 'Vivid Blue', #15 5 => 'Vivid Green', #15 6 => 'Vivid Red', #15 7 => 'Color Accent', #15 (A610) (NC) 8 => 'Color Swap', #15 (A610) 9 => 'Custom', 12 => 'Vivid', 13 => 'Neutral', 14 => 'Sepia', 15 => 'B&W', }, }, ); # face detect information (MakerNotes tag 0x24) - PH (A570IS) %Image::ExifTool::Canon::FaceDetect1 = ( %binaryDataAttrs, FORMAT => 'int16u', FIRST_ENTRY => 0, DATAMEMBER => [ 0x02 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x02 => { Name => 'FacesDetected', DataMember => 'FacesDetected', RawConv => '$$self{FacesDetected} = $val', }, 0x03 => { Name => 'FaceDetectFrameSize', Format => 'int16u[2]', }, 0x08 => { Name => 'Face1Position', Format => 'int16s[2]', RawConv => '$$self{FacesDetected} < 1 ? undef: $val', Notes => q{ X-Y coordinates for the center of each face in the Face Detect frame at the time of focus lock. "0 0" is the center, and positive X and Y are to the right and downwards respectively }, }, 0x0a => { Name => 'Face2Position', Format => 'int16s[2]', RawConv => '$$self{FacesDetected} < 2 ? undef : $val', }, 0x0c => { Name => 'Face3Position', Format => 'int16s[2]', RawConv => '$$self{FacesDetected} < 3 ? undef : $val', }, 0x0e => { Name => 'Face4Position', Format => 'int16s[2]', RawConv => '$$self{FacesDetected} < 4 ? undef : $val', }, 0x10 => { Name => 'Face5Position', Format => 'int16s[2]', RawConv => '$$self{FacesDetected} < 5 ? undef : $val', }, 0x12 => { Name => 'Face6Position', Format => 'int16s[2]', RawConv => '$$self{FacesDetected} < 6 ? undef : $val', }, 0x14 => { Name => 'Face7Position', Format => 'int16s[2]', RawConv => '$$self{FacesDetected} < 7 ? undef : $val', }, 0x16 => { Name => 'Face8Position', Format => 'int16s[2]', RawConv => '$$self{FacesDetected} < 8 ? undef : $val', }, 0x18 => { Name => 'Face9Position', Format => 'int16s[2]', RawConv => '$$self{FacesDetected} < 9 ? undef : $val', }, ); # more face detect information (MakerNotes tag 0x25) - PH (A570IS) %Image::ExifTool::Canon::FaceDetect2 = ( %binaryDataAttrs, FORMAT => 'int8u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x01 => 'FaceWidth', 0x02 => 'FacesDetected', ); # yet more face detect information (MakerNotes tag 0x2f) - PH (G12) %Image::ExifTool::Canon::FaceDetect3 = ( %binaryDataAttrs, FORMAT => 'int16u', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, # 0 - size (34 bytes) # 1 - 1=4:3/16:9,2=1:1/3:2/4:5 # 2 - normally 1 if faces detected, but sometimes 0 (maybe if face wasn't in captured image?) 3 => 'FacesDetected', # 4 - 240=4:3/4:5/1:1,180=16:9,212=3:2 ); # File number information (MakerNotes tag 0x93) %Image::ExifTool::Canon::FileInfo = ( %binaryDataAttrs, FORMAT => 'int16s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, DATAMEMBER => [ 20 ], 1 => [ { #5 Name => 'FileNumber', Condition => '$$self{Model} =~ /\b(20D|350D|REBEL XT|Kiss Digital N)\b/', Format => 'int32u', # Thanks to Juha Eskelinen for figuring this out: # [this is an odd bit mapping -- it looks like the file number exists as # a 16-bit integer containing the high bits, followed by an 8-bit integer # with the low bits. But it is more convenient to have this in a single # word, so some bit manipulations are necessary... - PH] # The bit pattern of the 32-bit word is: # 31....24 23....16 15.....8 7......0 # 00000000 ffffffff DDDDDDDD ddFFFFFF # 0 = zero bits (not part of the file number?) # f/F = low/high bits of file number # d/D = low/high bits of directory number # The directory and file number are then converted into decimal # and separated by a '-' to give the file number used in the 20D ValueConv => '(($val&0xffc0)>>6)*10000+(($val>>16)&0xff)+(($val&0x3f)<<8)', ValueConvInv => q{ my $d = int($val/10000); my $f = $val - $d * 10000; return (($d<<6) & 0xffc0) + (($f & 0xff)<<16) + (($f>>8) & 0x3f); }, PrintConv => '$_=$val,s/(\d+)(\d{4})/$1-$2/,$_', PrintConvInv => '$val=~s/-//g;$val', }, { #16 Name => 'FileNumber', Condition => '$$self{Model} =~ /\b(30D|400D|REBEL XTi|Kiss Digital X|K236)\b/', Format => 'int32u', Notes => q{ the location of the upper 4 bits of the directory number is a mystery for the EOS 30D, so the reported directory number will be incorrect for original images with a directory number of 164 or greater }, # Thanks to Emil Sit for figuring this out: # [more insane bit maniplations like the 20D/350D above, but this time we # appear to have lost the upper 4 bits of the directory number (this was # verified through tests with directory numbers 100, 222, 801 and 999) - PH] # The bit pattern for the 30D is: (see 20D notes above for more information) # 31....24 23....16 15.....8 7......0 # 00000000 ffff0000 ddddddFF FFFFFFFF # [NOTE: the 4 high order directory bits don't appear in this record, but # I have chosen to write them into bits 16-19 since these 4 zero bits look # very suspicious, and are a convenient place to store this information - PH] ValueConv => q{ my $d = ($val & 0xffc00) >> 10; # we know there are missing bits if directory number is < 100 $d += 0x40 while $d < 100; # (repair the damage as best we can) return $d*10000 + (($val&0x3ff)<<4) + (($val>>20)&0x0f); }, ValueConvInv => q{ my $d = int($val/10000); my $f = $val - $d * 10000; return ($d << 10) + (($f>>4)&0x3ff) + (($f&0x0f)<<20); }, PrintConv => '$_=$val,s/(\d+)(\d{4})/$1-$2/,$_', PrintConvInv => '$val=~s/-//g;$val', }, { #7 (1D, 1Ds) Name => 'ShutterCount', Condition => 'GetByteOrder() eq "MM"', Format => 'int32u', }, { #7 (1DmkII, 1DSmkII, 1DSmkIIN) Name => 'ShutterCount', # ref http://www.luminous-landscape.com/forum/index.php?topic=36469 : Notes => q{ there are reports that the ShutterCount changed when loading a settings file on the 1DSmkII }, Condition => '$$self{Model} =~ /\b1Ds? Mark II\b/', Format => 'int32u', ValueConv => '($val>>16)|(($val&0xffff)<<16)', ValueConvInv => '($val>>16)|(($val&0xffff)<<16)', }, # 5D gives a single byte value (unknown) # 40D stores all zeros ], 3 => { #PH Name => 'BracketMode', PrintConv => { 0 => 'Off', 1 => 'AEB', 2 => 'FEB', 3 => 'ISO', 4 => 'WB', }, }, 4 => 'BracketValue', #PH 5 => 'BracketShotNumber', #PH 6 => { #PH Name => 'RawJpgQuality', RawConv => '$val<=0 ? undef : $val', PrintConv => \%canonQuality, }, 7 => { #PH Name => 'RawJpgSize', RawConv => '$val<0 ? undef : $val', PrintConv => \%canonImageSize, }, 8 => { #PH Name => 'LongExposureNoiseReduction2', Notes => q{ for some modules this gives the long exposure noise reduction applied to the image, but for other models this just reflects the setting independent of whether or not it was applied }, RawConv => '$val<0 ? undef : $val', PrintConv => { 0 => 'Off', 1 => 'On (1D)', 3 => 'On', 4 => 'Auto', }, }, 9 => { #PH Name => 'WBBracketMode', PrintConv => { 0 => 'Off', 1 => 'On (shift AB)', 2 => 'On (shift GM)', }, }, 12 => 'WBBracketValueAB', #PH 13 => 'WBBracketValueGM', #PH 14 => { #PH Name => 'FilterEffect', RawConv => '$val==-1 ? undef : $val', PrintConv => { 0 => 'None', 1 => 'Yellow', 2 => 'Orange', 3 => 'Red', 4 => 'Green', }, }, 15 => { #PH Name => 'ToningEffect', RawConv => '$val==-1 ? undef : $val', PrintConv => { 0 => 'None', 1 => 'Sepia', 2 => 'Blue', 3 => 'Purple', 4 => 'Green', }, }, 16 => { #PH %ciMacroMagnification, # MP-E 65mm on 5DmkII: 44=5x,52~=3.9x,56~=3.3x,62~=2.6x,75=1x # ME-E 65mm on 40D/450D: 72 for all samples (not valid) Condition => q{ $$self{LensType} and $$self{LensType} == 124 and $$self{Model} !~ /\b(40D|450D|REBEL XSi|Kiss X2)\b/ }, Notes => q{ currently decoded only for the MP-E 65mm f/2.8 1-5x Macro Photo, and not valid for all camera models }, }, # 17 - values: 0, 3, 4 # 18 - same as LiveViewShooting for all my samples (5DmkII, 50D) - PH 19 => { #PH # Note: this value is not displayed by Canon ImageBrowser for the following # models with the live view feature: 1DmkIII, 1DSmkIII, 40D, 450D, 1000D # (this tag could be valid only for some firmware versions: # http://www.breezesys.com/forum/showthread.php?p=16980) Name => 'LiveViewShooting', PrintConv => \%offOn, }, 20 => { #47 Name => 'FocusDistanceUpper', DataMember => 'FocusDistanceUpper2', Format => 'int16u', RawConv => '($$self{FocusDistanceUpper2} = $val) || undef', ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => '$val > 655.345 ? "inf" : "$val m"', PrintConvInv => '$val =~ s/ ?m$//; IsFloat($val) ? $val : 655.35', }, 21 => { #47 Name => 'FocusDistanceLower', Condition => '$$self{FocusDistanceUpper2}', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => '$val > 655.345 ? "inf" : "$val m"', PrintConvInv => '$val =~ s/ ?m$//; IsFloat($val) ? $val : 655.35', }, # 22 - values: 0, 1 # 23 - values: 0, 21, 22 25 => { #PH Name => 'FlashExposureLock', PrintConv => \%offOn, }, ); # Internal serial number information (MakerNotes tag 0x96) (ref PH) %Image::ExifTool::Canon::SerialInfo = ( %binaryDataAttrs, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 9 => { Name => 'InternalSerialNumber', Format => 'string', }, ); # Cropping information (MakerNotes tag 0x98) (ref PH) %Image::ExifTool::Canon::CropInfo = ( %binaryDataAttrs, FORMAT => 'int16u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => 'CropLeftMargin', # (NC, may be right) 1 => 'CropRightMargin', 2 => 'CropTopMargin', # (NC, may be bottom) 3 => 'CropBottomMargin', ); # Aspect ratio information (MakerNotes tag 0x9a) (ref PH) %Image::ExifTool::Canon::AspectInfo = ( %binaryDataAttrs, FORMAT => 'int32u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'AspectRatio', PrintConv => { 0 => '3:2', 1 => '1:1', 2 => '4:3', 7 => '16:9', 8 => '4:5', }, }, # (could use better names for these, or the Crop tags above, or both) 1 => 'CroppedImageWidth', 2 => 'CroppedImageHeight', 3 => 'CroppedImageLeft', #forum4138 4 => 'CroppedImageTop', #ditto ); # Color information (MakerNotes tag 0xa0) %Image::ExifTool::Canon::Processing = ( %binaryDataAttrs, FORMAT => 'int16s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 1 => { #PH Name => 'ToneCurve', PrintConv => { 0 => 'Standard', 1 => 'Manual', 2 => 'Custom', }, }, 2 => { #12 Name => 'Sharpness', Notes => 'all models except the 20D and 350D', Condition => '$$self{Model} !~ /\b(20D|350D|REBEL XT|Kiss Digital N)\b/', Priority => 0, # (maybe not as reliable as other sharpness values) }, 3 => { #PH Name => 'SharpnessFrequency', # PatternSharpness? PrintConvColumns => 2, PrintConv => { 0 => 'n/a', 1 => 'Lowest', 2 => 'Low', 3 => 'Standard', 4 => 'High', 5 => 'Highest', }, }, 4 => 'SensorRedLevel', #PH 5 => 'SensorBlueLevel', #PH 6 => 'WhiteBalanceRed', #PH 7 => 'WhiteBalanceBlue', #PH 8 => { #PH Name => 'WhiteBalance', RawConv => '$val < 0 ? undef : $val', PrintConv => \%canonWhiteBalance, SeparateTable => 1, }, 9 => 'ColorTemperature', #6 10 => { #12 Name => 'PictureStyle', Flags => ['PrintHex','SeparateTable'], PrintConv => \%pictureStyles, }, 11 => { #PH Name => 'DigitalGain', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 12 => { #PH Name => 'WBShiftAB', Notes => 'positive is a shift toward amber', }, 13 => { #PH Name => 'WBShiftGM', Notes => 'positive is a shift toward green', }, ); # Color balance information (MakerNotes tag 0xa9) (ref PH) %Image::ExifTool::Canon::ColorBalance = ( %binaryDataAttrs, NOTES => 'These tags are used by the 10D and 300D.', FORMAT => 'int16s', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # red,green1,green2,blue (ref 2) 1 => { Name => 'WB_RGGBLevelsAuto', Format => 'int16s[4]' }, 5 => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' }, 9 => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' }, 13 => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16s[4]' }, 17 => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16s[4]' }, 21 => { Name => 'WB_RGGBLevelsFluorescent',Format => 'int16s[4]' }, 25 => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' }, 29 => { Name => 'WB_RGGBLevelsCustom', Format => 'int16s[4]' }, # (actually black levels for D60, ref 52) 33 => { Name => 'WB_RGGBLevelsKelvin', Format => 'int16s[4]' }, 37 => { Name => 'WB_RGGBBlackLevels', Format => 'int16s[4]' }, #52 ); # Measured color levels (MakerNotes tag 0xaa) (ref 37) %Image::ExifTool::Canon::MeasuredColor = ( %binaryDataAttrs, FORMAT => 'int16u', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 1 => { # this is basically the inverse of WB_RGGBLevelsMeasured (ref 37) Name => 'MeasuredRGGB', Format => 'int16u[4]', }, # 5 - observed values: 0, 1 - PH ); # Flags information (MakerNotes tag 0xb0) (ref PH) %Image::ExifTool::Canon::Flags = ( %binaryDataAttrs, FORMAT => 'int16s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 1 => 'ModifiedParamFlag', ); # Modified information (MakerNotes tag 0xb1) (ref PH) %Image::ExifTool::Canon::ModifiedInfo = ( %binaryDataAttrs, FORMAT => 'int16s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 1 => { Name => 'ModifiedToneCurve', PrintConv => { 0 => 'Standard', 1 => 'Manual', 2 => 'Custom', }, }, 2 => { Name => 'ModifiedSharpness', Notes => '1D and 5D only', Condition => '$$self{Model} =~ /\b(1D|5D)/', }, 3 => { Name => 'ModifiedSharpnessFreq', # ModifiedPatternSharpness? PrintConv => { 0 => 'n/a', 1 => 'Lowest', 2 => 'Low', 3 => 'Standard', 4 => 'High', 5 => 'Highest', }, }, 4 => 'ModifiedSensorRedLevel', 5 => 'ModifiedSensorBlueLevel', 6 => 'ModifiedWhiteBalanceRed', 7 => 'ModifiedWhiteBalanceBlue', 8 => { Name => 'ModifiedWhiteBalance', PrintConv => \%canonWhiteBalance, SeparateTable => 'WhiteBalance', }, 9 => 'ModifiedColorTemp', 10 => { Name => 'ModifiedPictureStyle', PrintHex => 1, SeparateTable => 'PictureStyle', PrintConv => \%pictureStyles, }, 11 => { Name => 'ModifiedDigitalGain', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, ); # Preview image information (MakerNotes tag 0xb6) # - The 300D writes a 1536x1024 preview image that is accessed # through this information - decoded by PH 12/14/03 %Image::ExifTool::Canon::PreviewImageInfo = ( %binaryDataAttrs, FORMAT => 'int32u', FIRST_ENTRY => 1, IS_OFFSET => [ 5 ], # tag 5 is 'IsOffset' GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, # the size of the preview block in 2-byte increments # 0 => { # Name => 'PreviewImageInfoWords', # }, 1 => { Name => 'PreviewQuality', PrintConv => \%canonQuality, }, 2 => { Name => 'PreviewImageLength', OffsetPair => 5, # point to associated offset DataTag => 'PreviewImage', Protected => 2, }, 3 => 'PreviewImageWidth', 4 => 'PreviewImageHeight', 5 => { Name => 'PreviewImageStart', Flags => 'IsOffset', OffsetPair => 2, # associated byte count tagID DataTag => 'PreviewImage', Protected => 2, }, # NOTE: The size of the PreviewImageInfo structure is incorrectly # written as 48 bytes (Count=12, Format=int32u), but only the first # 6 int32u values actually exist ); # Sensor information (MakerNotes tag 0xe0) (ref 12) %Image::ExifTool::Canon::SensorInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int16s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, # Note: Don't make these writable because it confuses Canon decoding software # if these are changed 1 => 'SensorWidth', 2 => 'SensorHeight', 5 => 'SensorLeftBorder', #2 6 => 'SensorTopBorder', #2 7 => 'SensorRightBorder', #2 8 => 'SensorBottomBorder', #2 9 => { #22 Name => 'BlackMaskLeftBorder', Notes => q{ coordinates for the area to the left or right of the image used to calculate the average black level }, }, 10 => 'BlackMaskTopBorder', #22 11 => 'BlackMaskRightBorder', #22 12 => 'BlackMaskBottomBorder', #22 ); # Color data (MakerNotes tag 0x4001, count=582) (ref 12) %Image::ExifTool::Canon::ColorData1 = ( %binaryDataAttrs, NOTES => 'These tags are used by the 20D and 350D.', FORMAT => 'int16s', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, IS_SUBDIR => [ 0x4b ], # 0x00: size of record in bytes - PH # (dcraw 8.81 uses index 0x19 for WB) 0x19 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' }, 0x1d => 'ColorTempAsShot', 0x1e => { Name => 'WB_RGGBLevelsAuto', Format => 'int16s[4]' }, 0x22 => 'ColorTempAuto', 0x23 => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' }, 0x27 => 'ColorTempDaylight', 0x28 => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' }, 0x2c => 'ColorTempShade', 0x2d => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16s[4]' }, 0x31 => 'ColorTempCloudy', 0x32 => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16s[4]' }, 0x36 => 'ColorTempTungsten', 0x37 => { Name => 'WB_RGGBLevelsFluorescent', Format => 'int16s[4]' }, 0x3b => 'ColorTempFluorescent', 0x3c => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' }, 0x40 => 'ColorTempFlash', 0x41 => { Name => 'WB_RGGBLevelsCustom1', Format => 'int16s[4]' }, 0x45 => 'ColorTempCustom1', 0x46 => { Name => 'WB_RGGBLevelsCustom2', Format => 'int16s[4]' }, 0x4a => 'ColorTempCustom2', 0x4b => { #PH Name => 'ColorCalib', Format => 'undef[120]', Unknown => 1, # (all tags are unknown, so we can avoid processing entire directory) Notes => 'A, B, C, Temperature', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCalib' } }, ); # Color data (MakerNotes tag 0x4001, count=653) (ref 12) %Image::ExifTool::Canon::ColorData2 = ( %binaryDataAttrs, NOTES => 'These tags are used by the 1DmkII and 1DSmkII.', FORMAT => 'int16s', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, IS_SUBDIR => [ 0xa4 ], 0x18 => { Name => 'WB_RGGBLevelsAuto', Format => 'int16s[4]' }, 0x1c => 'ColorTempAuto', 0x1d => { Name => 'WB_RGGBLevelsUnknown', Format => 'int16s[4]', Unknown => 1 }, 0x21 => { Name => 'ColorTempUnknown', Unknown => 1 }, # (dcraw 8.81 uses index 0x22 for WB) 0x22 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' }, 0x26 => 'ColorTempAsShot', 0x27 => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' }, 0x2b => 'ColorTempDaylight', 0x2c => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' }, 0x30 => 'ColorTempShade', 0x31 => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16s[4]' }, 0x35 => 'ColorTempCloudy', 0x36 => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16s[4]' }, 0x3a => 'ColorTempTungsten', 0x3b => { Name => 'WB_RGGBLevelsFluorescent',Format => 'int16s[4]' }, 0x3f => 'ColorTempFluorescent', 0x40 => { Name => 'WB_RGGBLevelsKelvin', Format => 'int16s[4]' }, 0x44 => 'ColorTempKelvin', 0x45 => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' }, 0x49 => 'ColorTempFlash', 0x4a => { Name => 'WB_RGGBLevelsUnknown2', Format => 'int16s[4]', Unknown => 1 }, 0x4e => { Name => 'ColorTempUnknown2', Unknown => 1 }, 0x4f => { Name => 'WB_RGGBLevelsUnknown3', Format => 'int16s[4]', Unknown => 1 }, 0x53 => { Name => 'ColorTempUnknown3', Unknown => 1 }, 0x54 => { Name => 'WB_RGGBLevelsUnknown4', Format => 'int16s[4]', Unknown => 1 }, 0x58 => { Name => 'ColorTempUnknown4', Unknown => 1 }, 0x59 => { Name => 'WB_RGGBLevelsUnknown5', Format => 'int16s[4]', Unknown => 1 }, 0x5d => { Name => 'ColorTempUnknown5', Unknown => 1 }, 0x5e => { Name => 'WB_RGGBLevelsUnknown6', Format => 'int16s[4]', Unknown => 1 }, 0x62 => { Name => 'ColorTempUnknown6', Unknown => 1 }, 0x63 => { Name => 'WB_RGGBLevelsUnknown7', Format => 'int16s[4]', Unknown => 1 }, 0x67 => { Name => 'ColorTempUnknown7', Unknown => 1 }, 0x68 => { Name => 'WB_RGGBLevelsUnknown8', Format => 'int16s[4]', Unknown => 1 }, 0x6c => { Name => 'ColorTempUnknown8', Unknown => 1 }, 0x6d => { Name => 'WB_RGGBLevelsUnknown9', Format => 'int16s[4]', Unknown => 1 }, 0x71 => { Name => 'ColorTempUnknown9', Unknown => 1 }, 0x72 => { Name => 'WB_RGGBLevelsUnknown10', Format => 'int16s[4]', Unknown => 1 }, 0x76 => { Name => 'ColorTempUnknown10', Unknown => 1 }, 0x77 => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 }, 0x7b => { Name => 'ColorTempUnknown11', Unknown => 1 }, 0x7c => { Name => 'WB_RGGBLevelsUnknown12', Format => 'int16s[4]', Unknown => 1 }, 0x80 => { Name => 'ColorTempUnknown12', Unknown => 1 }, 0x81 => { Name => 'WB_RGGBLevelsUnknown13', Format => 'int16s[4]', Unknown => 1 }, 0x85 => { Name => 'ColorTempUnknown13', Unknown => 1 }, 0x86 => { Name => 'WB_RGGBLevelsUnknown14', Format => 'int16s[4]', Unknown => 1 }, 0x8a => { Name => 'ColorTempUnknown14', Unknown => 1 }, 0x8b => { Name => 'WB_RGGBLevelsUnknown15', Format => 'int16s[4]', Unknown => 1 }, 0x8f => { Name => 'ColorTempUnknown15', Unknown => 1 }, 0x90 => { Name => 'WB_RGGBLevelsPC1', Format => 'int16s[4]' }, 0x94 => 'ColorTempPC1', 0x95 => { Name => 'WB_RGGBLevelsPC2', Format => 'int16s[4]' }, 0x99 => 'ColorTempPC2', 0x9a => { Name => 'WB_RGGBLevelsPC3', Format => 'int16s[4]' }, 0x9e => 'ColorTempPC3', 0x9f => { Name => 'WB_RGGBLevelsUnknown16', Format => 'int16s[4]', Unknown => 1 }, 0xa3 => { Name => 'ColorTempUnknown16', Unknown => 1 }, 0xa4 => { #PH Name => 'ColorCalib', Format => 'undef[120]', Unknown => 1, Notes => 'A, B, C, Temperature', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCalib' } }, 0x26a => { #PH Name => 'RawMeasuredRGGB', Format => 'int32u[4]', Notes => 'raw MeasuredRGGB values, before normalization', # swap words because the word ordering is big-endian, opposite to the byte ordering ValueConv => \&SwapWords, ValueConvInv => \&SwapWords, }, ); # Color data (MakerNotes tag 0x4001, count=796) (ref 12) %Image::ExifTool::Canon::ColorData3 = ( %binaryDataAttrs, NOTES => 'These tags are used by the 1DmkIIN, 5D, 30D and 400D.', FORMAT => 'int16s', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, IS_SUBDIR => [ 0x85 ], 0x00 => { #PH Name => 'ColorDataVersion', PrintConv => { 1 => '1 (1DmkIIN/5D/30D/400D)', }, }, # 0x01-0x3e: RGGB coefficients, apparently specific to the # individual camera and possibly used for color calibration (ref 37) # (dcraw 8.81 uses index 0x3f for WB) 0x3f => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' }, 0x43 => 'ColorTempAsShot', 0x44 => { Name => 'WB_RGGBLevelsAuto', Format => 'int16s[4]' }, 0x48 => 'ColorTempAuto', # not sure exactly what 'Measured' values mean... 0x49 => { Name => 'WB_RGGBLevelsMeasured', Format => 'int16s[4]' }, 0x4d => 'ColorTempMeasured', 0x4e => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' }, 0x52 => 'ColorTempDaylight', 0x53 => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' }, 0x57 => 'ColorTempShade', 0x58 => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16s[4]' }, 0x5c => 'ColorTempCloudy', 0x5d => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16s[4]' }, 0x61 => 'ColorTempTungsten', 0x62 => { Name => 'WB_RGGBLevelsFluorescent', Format => 'int16s[4]' }, 0x66 => 'ColorTempFluorescent', 0x67 => { Name => 'WB_RGGBLevelsKelvin', Format => 'int16s[4]' }, 0x6b => 'ColorTempKelvin', 0x6c => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' }, 0x70 => 'ColorTempFlash', 0x71 => { Name => 'WB_RGGBLevelsPC1', Format => 'int16s[4]' }, 0x75 => 'ColorTempPC1', 0x76 => { Name => 'WB_RGGBLevelsPC2', Format => 'int16s[4]' }, 0x7a => 'ColorTempPC2', 0x7b => { Name => 'WB_RGGBLevelsPC3', Format => 'int16s[4]' }, 0x7f => 'ColorTempPC3', 0x80 => { Name => 'WB_RGGBLevelsCustom', Format => 'int16s[4]' }, 0x84 => 'ColorTempCustom', 0x85 => { #37 Name => 'ColorCalib', Format => 'undef[120]', Unknown => 1, Notes => 'B, C, A, Temperature', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCalib' } }, 0xc4 => { #52 Name => 'PerChannelBlackLevel', Format => 'int16u[4]', }, # 0xc8-0x1c7: some sort of color table (ref 37) 0x248 => { #37 Name => 'FlashOutput', ValueConv => '$val >= 255 ? 255 : exp(($val-200)/16*log(2))', ValueConvInv => '$val == 255 ? 255 : 200 + log($val)*16/log(2)', PrintConv => '$val == 255 ? "Strobe or Misfire" : sprintf("%.0f%%", $val * 100)', PrintConvInv => '$val =~ /^(\d(\.?\d*))/ ? $1 / 100 : 255', }, 0x249 => { #37 Name => 'FlashBatteryLevel', # calibration points for external flash: 144=3.76V (almost empty), 192=5.24V (full) # - have seen a value of 201 with internal flash PrintConv => '$val ? sprintf("%.2fV", $val * 5 / 186) : "n/a"', PrintConvInv => '$val=~/^(\d+\.\d+)\s*V?$/i ? int($val*186/5+0.5) : 0', }, 0x24a => { #37 Name => 'ColorTempFlashData', # 0 for no external flash, 35980 for 'Strobe or Misfire' # (lower than ColorTempFlash by up to 200 degrees) RawConv => '($val < 2000 or $val > 12000) ? undef : $val', }, # 0x24b: inverse relationship with flash power (ref 37) # 0x286: has value 256 for correct exposure, less for under exposure (seen 96 minimum) (ref 37) 0x287 => { #37 Name => 'MeasuredRGGBData', Format => 'int32u[4]', Notes => 'MeasuredRGGB may be derived from these data values', # swap words because the word ordering is big-endian, opposite to the byte ordering ValueConv => \&SwapWords, ValueConvInv => \&SwapWords, }, # 0x297: ranges from -10 to 30, higher for high ISO (ref 37) ); # Color data (MakerNotes tag 0x4001, count=674|692|702|1227|1250|1251|1337|1338|1346) (ref PH) %Image::ExifTool::Canon::ColorData4 = ( %binaryDataAttrs, NOTES => q{ These tags are used by the 1DmkIII, 1DSmkIII, 1DmkIV, 5DmkII, 7D, 40D, 50D, 60D, 450D, 500D, 550D, 1000D and 1100D. }, FORMAT => 'int16s', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, IS_SUBDIR => [ 0x3f, 0xa8 ], DATAMEMBER => [ 0x00 ], 0x00 => { Name => 'ColorDataVersion', DataMember => 'ColorDataVersion', RawConv => '$$self{ColorDataVersion} = $val', PrintConv => { 2 => '2 (1DmkIII)', 3 => '3 (40D)', 4 => '4 (1DSmkIII)', 5 => '5 (450D/1000D)', 6 => '6 (50D/5DmkII)', 7 => '7 (500D/550D/7D/1DmkIV)', 9 => '9 (60D/1100D)', }, }, # 0x01-0x18: unknown RGGB coefficients (int16s[4]) (50D) # (dcraw 8.81 uses index 0x3f for WB) 0x3f => { Name => 'ColorCoefs', Format => 'undef[210]', # ColorTempUnknown11 is last entry SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCoefs' } }, 0xa8 => { Name => 'ColorCalib', Format => 'undef[120]', Unknown => 1, Notes => 'B, C, A, Temperature', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCalib' } }, 0x0e7 => { Name => 'AverageBlackLevel', Format => 'int16u[4]' }, #52 0x280 => { #PH Name => 'RawMeasuredRGGB', Format => 'int32u[4]', Notes => 'raw MeasuredRGGB values, before normalization', # swap words because the word ordering is big-endian, opposite to the byte ordering ValueConv => \&SwapWords, ValueConvInv => \&SwapWords, }, 0x2b4 => { #52 Name => 'PerChannelBlackLevel', Condition => '$$self{ColorDataVersion} == 4 or $$self{ColorDataVersion} == 5', Format => 'int16u[4]', }, 0x2b8 => { #52 Name => 'NormalWhiteLevel', Condition => '$$self{ColorDataVersion} == 4 or $$self{ColorDataVersion} == 5', Format => 'int16u', RawConv => '$val || undef', }, 0x2b9 => { #52 Name => 'SpecularWhiteLevel', Condition => '$$self{ColorDataVersion} == 4 or $$self{ColorDataVersion} == 5', Format => 'int16u', }, 0x2ba => { #52 Name => 'LinearityUpperMargin', Condition => '$$self{ColorDataVersion} == 4 or $$self{ColorDataVersion} == 5', Format => 'int16u', }, 0x2cb => { #52 Name => 'PerChannelBlackLevel', Condition => '$$self{ColorDataVersion} == 6 or $$self{ColorDataVersion} == 7', Format => 'int16u[4]', }, 0x2cf => [{ #52 Name => 'NormalWhiteLevel', Condition => '$$self{ColorDataVersion} == 6 or $$self{ColorDataVersion} == 7', Format => 'int16u', RawConv => '$val || undef', },{ Name => 'PerChannelBlackLevel', Condition => '$$self{ColorDataVersion} == 9', Format => 'int16u[4]', }], 0x2d0 => { #52 Name => 'SpecularWhiteLevel', Condition => '$$self{ColorDataVersion} == 6 or $$self{ColorDataVersion} == 7', Format => 'int16u', }, 0x2d1 => { #52 Name => 'LinearityUpperMargin', Condition => '$$self{ColorDataVersion} == 6 or $$self{ColorDataVersion} == 7', Format => 'int16u', }, 0x2d3 => { #52 Name => 'NormalWhiteLevel', Condition => '$$self{ColorDataVersion} == 9', Format => 'int16u', RawConv => '$val || undef', }, 0x2d4 => { #52 Name => 'SpecularWhiteLevel', Condition => '$$self{ColorDataVersion} == 9', Format => 'int16u', }, 0x2d5 => { #52 Name => 'LinearityUpperMargin', Condition => '$$self{ColorDataVersion} == 9', Format => 'int16u', }, ); # color coefficients (ref PH) %Image::ExifTool::Canon::ColorCoefs = ( %binaryDataAttrs, FORMAT => 'int16s', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x00 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' }, 0x04 => 'ColorTempAsShot', 0x05 => { Name => 'WB_RGGBLevelsAuto', Format => 'int16s[4]' }, 0x09 => 'ColorTempAuto', 0x0a => { Name => 'WB_RGGBLevelsMeasured', Format => 'int16s[4]' }, 0x0e => 'ColorTempMeasured', # the following Unknown values are set for the 50D and 5DmkII, and the # SRAW images of the 40D, and affect thumbnail display for the 50D/5DmkII # and conversion for all modes of the 40D 0x0f => { Name => 'WB_RGGBLevelsUnknown', Format => 'int16s[4]', Unknown => 1 }, 0x13 => { Name => 'ColorTempUnknown', Unknown => 1 }, 0x14 => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' }, 0x18 => 'ColorTempDaylight', 0x19 => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' }, 0x1d => 'ColorTempShade', 0x1e => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16s[4]' }, 0x22 => 'ColorTempCloudy', 0x23 => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16s[4]' }, 0x27 => 'ColorTempTungsten', 0x28 => { Name => 'WB_RGGBLevelsFluorescent',Format => 'int16s[4]' }, 0x2c => 'ColorTempFluorescent', # (changing the Kelvin values has no effect on image in DPP... why not?) 0x2d => { Name => 'WB_RGGBLevelsKelvin', Format => 'int16s[4]' }, 0x31 => 'ColorTempKelvin', 0x32 => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' }, 0x36 => 'ColorTempFlash', 0x37 => { Name => 'WB_RGGBLevelsUnknown2', Format => 'int16s[4]', Unknown => 1 }, 0x3b => { Name => 'ColorTempUnknown2', Unknown => 1 }, 0x3c => { Name => 'WB_RGGBLevelsUnknown3', Format => 'int16s[4]', Unknown => 1 }, 0x40 => { Name => 'ColorTempUnknown3', Unknown => 1 }, 0x41 => { Name => 'WB_RGGBLevelsUnknown4', Format => 'int16s[4]', Unknown => 1 }, 0x45 => { Name => 'ColorTempUnknown4', Unknown => 1 }, 0x46 => { Name => 'WB_RGGBLevelsUnknown5', Format => 'int16s[4]', Unknown => 1 }, 0x4a => { Name => 'ColorTempUnknown5', Unknown => 1 }, 0x4b => { Name => 'WB_RGGBLevelsUnknown6', Format => 'int16s[4]', Unknown => 1 }, 0x4f => { Name => 'ColorTempUnknown6', Unknown => 1 }, 0x50 => { Name => 'WB_RGGBLevelsUnknown7', Format => 'int16s[4]', Unknown => 1 }, 0x54 => { Name => 'ColorTempUnknown7', Unknown => 1 }, 0x55 => { Name => 'WB_RGGBLevelsUnknown8', Format => 'int16s[4]', Unknown => 1 }, 0x59 => { Name => 'ColorTempUnknown8', Unknown => 1 }, 0x5a => { Name => 'WB_RGGBLevelsUnknown9', Format => 'int16s[4]', Unknown => 1 }, 0x5e => { Name => 'ColorTempUnknown9', Unknown => 1 }, 0x5f => { Name => 'WB_RGGBLevelsUnknown10', Format => 'int16s[4]', Unknown => 1 }, 0x63 => { Name => 'ColorTempUnknown10', Unknown => 1 }, 0x64 => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 }, 0x68 => { Name => 'ColorTempUnknown11', Unknown => 1 }, 0x69 => { Name => 'WB_RGGBLevelsUnknown12', Format => 'int16s[4]', Unknown => 1 }, 0x6d => { Name => 'ColorTempUnknown12', Unknown => 1 }, 0x6e => { Name => 'WB_RGGBLevelsUnknown13', Format => 'int16s[4]', Unknown => 1 }, 0x72 => { Name => 'ColorTempUnknown13', Unknown => 1 }, ); # color calibration (ref 37) %Image::ExifTool::Canon::ColorCalib = ( %binaryDataAttrs, FORMAT => 'int16s', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # these coefficients are in a different order compared to older # models (A,B,C in ColorData1/2 vs. C,A,B in ColorData3/4) - PH # Coefficient A most closely matches the blue curvature, and # coefficient B most closely matches the red curvature, but the match # is not perfect, and I don't know what coefficient C is for (certainly # not a green coefficient) - PH NOTES => q{ Camera color calibration data. For the 20D, 350D, 1DmkII and 1DSmkII the order of the coefficients is A, B, C, Temperature, but for newer models it is B, C, A, Temperature. These tags are extracted only when the Unknown option is used. }, 0x00 => { Name => 'CameraColorCalibration01', %cameraColorCalibration }, 0x04 => { Name => 'CameraColorCalibration02', %cameraColorCalibration }, 0x08 => { Name => 'CameraColorCalibration03', %cameraColorCalibration }, 0x0c => { Name => 'CameraColorCalibration04', %cameraColorCalibration }, 0x10 => { Name => 'CameraColorCalibration05', %cameraColorCalibration }, 0x14 => { Name => 'CameraColorCalibration06', %cameraColorCalibration }, 0x18 => { Name => 'CameraColorCalibration07', %cameraColorCalibration }, 0x1c => { Name => 'CameraColorCalibration08', %cameraColorCalibration }, 0x20 => { Name => 'CameraColorCalibration09', %cameraColorCalibration }, 0x24 => { Name => 'CameraColorCalibration10', %cameraColorCalibration }, 0x28 => { Name => 'CameraColorCalibration11', %cameraColorCalibration }, 0x2c => { Name => 'CameraColorCalibration12', %cameraColorCalibration }, 0x30 => { Name => 'CameraColorCalibration13', %cameraColorCalibration }, 0x34 => { Name => 'CameraColorCalibration14', %cameraColorCalibration }, 0x38 => { Name => 'CameraColorCalibration15', %cameraColorCalibration }, ); # Color data (MakerNotes tag 0x4001, count=5120) (ref PH) %Image::ExifTool::Canon::ColorData5 = ( %binaryDataAttrs, NOTES => 'These tags are used by the PowerShot G10.', FORMAT => 'int16s', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, IS_SUBDIR => [ 0x47 ], # 0x00 - oddly, this isn't ColorDataVersion (probably should have been version 8) 0x47 => { Name => 'ColorCoefs', Format => 'undef[230]', # ColorTempUnknown13 is last entry SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCoefs' } }, 0xba => { Name => 'CameraColorCalibration01', %cameraColorCalibration2, Notes => 'B, C, A, D, Temperature' }, 0xbf => { Name => 'CameraColorCalibration02', %cameraColorCalibration2 }, 0xc4 => { Name => 'CameraColorCalibration03', %cameraColorCalibration2 }, 0xc9 => { Name => 'CameraColorCalibration04', %cameraColorCalibration2 }, 0xce => { Name => 'CameraColorCalibration05', %cameraColorCalibration2 }, 0xd3 => { Name => 'CameraColorCalibration06', %cameraColorCalibration2 }, 0xd8 => { Name => 'CameraColorCalibration07', %cameraColorCalibration2 }, 0xdd => { Name => 'CameraColorCalibration08', %cameraColorCalibration2 }, 0xe2 => { Name => 'CameraColorCalibration09', %cameraColorCalibration2 }, 0xe7 => { Name => 'CameraColorCalibration10', %cameraColorCalibration2 }, 0xec => { Name => 'CameraColorCalibration11', %cameraColorCalibration2 }, 0xf1 => { Name => 'CameraColorCalibration12', %cameraColorCalibration2 }, 0xf6 => { Name => 'CameraColorCalibration13', %cameraColorCalibration2 }, 0xfb => { Name => 'CameraColorCalibration14', %cameraColorCalibration2 }, 0x100=> { Name => 'CameraColorCalibration15', %cameraColorCalibration2 }, 0x108=> { Name => 'PerChannelBlackLevel', Format => 'int16s[4]' }, #52 ); # Color data (MakerNotes tag 0x4001, count=1273|1275) (ref PH) %Image::ExifTool::Canon::ColorData6 = ( %binaryDataAttrs, NOTES => 'These tags are used by the EOS 600D and 1200D.', FORMAT => 'int16s', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, IS_SUBDIR => [ 0xbc ], 0x00 => { Name => 'ColorDataVersion', PrintConv => { 10 => '10 (600D/1200D)', }, }, 0x3f => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' }, 0x43 => 'ColorTempAsShot', 0x44 => { Name => 'WB_RGGBLevelsAuto', Format => 'int16s[4]' }, 0x48 => 'ColorTempAuto', 0x49 => { Name => 'WB_RGGBLevelsMeasured', Format => 'int16s[4]' }, 0x4d => 'ColorTempMeasured', 0x4e => { Name => 'WB_RGGBLevelsUnknown', Format => 'int16s[4]', Unknown => 1 }, 0x52 => { Name => 'ColorTempUnknown', Unknown => 1 }, 0x53 => { Name => 'WB_RGGBLevelsUnknown2', Format => 'int16s[4]', Unknown => 1 }, 0x57 => { Name => 'ColorTempUnknown2', Unknown => 1 }, 0x58 => { Name => 'WB_RGGBLevelsUnknown3', Format => 'int16s[4]', Unknown => 1 }, 0x5c => { Name => 'ColorTempUnknown3', Unknown => 1 }, 0x5d => { Name => 'WB_RGGBLevelsUnknown4', Format => 'int16s[4]', Unknown => 1 }, 0x61 => { Name => 'ColorTempUnknown4', Unknown => 1 }, 0x62 => { Name => 'WB_RGGBLevelsUnknown5', Format => 'int16s[4]', Unknown => 1 }, 0x66 => { Name => 'ColorTempUnknown5', Unknown => 1 }, 0x67 => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' }, 0x6b => 'ColorTempDaylight', 0x6c => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' }, 0x70 => 'ColorTempShade', 0x71 => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16s[4]' }, 0x75 => 'ColorTempCloudy', 0x76 => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16s[4]' }, 0x7a => 'ColorTempTungsten', 0x7b => { Name => 'WB_RGGBLevelsFluorescent',Format => 'int16s[4]' }, 0x7f => 'ColorTempFluorescent', 0x80 => { Name => 'WB_RGGBLevelsKelvin', Format => 'int16s[4]' }, 0x84 => 'ColorTempKelvin', 0x85 => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' }, 0x89 => 'ColorTempFlash', 0x8a => { Name => 'WB_RGGBLevelsUnknown6', Format => 'int16s[4]', Unknown => 1 }, 0x8e => { Name => 'ColorTempUnknown6', Unknown => 1 }, 0x8f => { Name => 'WB_RGGBLevelsUnknown7', Format => 'int16s[4]', Unknown => 1 }, 0x93 => { Name => 'ColorTempUnknown7', Unknown => 1 }, 0x94 => { Name => 'WB_RGGBLevelsUnknown8', Format => 'int16s[4]', Unknown => 1 }, 0x98 => { Name => 'ColorTempUnknown8', Unknown => 1 }, 0x99 => { Name => 'WB_RGGBLevelsUnknown9', Format => 'int16s[4]', Unknown => 1 }, 0x9d => { Name => 'ColorTempUnknown9', Unknown => 1 }, 0x9e => { Name => 'WB_RGGBLevelsUnknown10', Format => 'int16s[4]', Unknown => 1 }, 0xa2 => { Name => 'ColorTempUnknown10', Unknown => 1 }, 0xa3 => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 }, 0xa7 => { Name => 'ColorTempUnknown11', Unknown => 1 }, 0xa8 => { Name => 'WB_RGGBLevelsUnknown12', Format => 'int16s[4]', Unknown => 1 }, 0xac => { Name => 'ColorTempUnknown12', Unknown => 1 }, 0xad => { Name => 'WB_RGGBLevelsUnknown13', Format => 'int16s[4]', Unknown => 1 }, 0xb1 => { Name => 'ColorTempUnknown13', Unknown => 1 }, 0xb2 => { Name => 'WB_RGGBLevelsUnknown14', Format => 'int16s[4]', Unknown => 1 }, 0xb6 => { Name => 'ColorTempUnknown14', Unknown => 1 }, 0xb7 => { Name => 'WB_RGGBLevelsUnknown15', Format => 'int16s[4]', Unknown => 1 }, 0xbb => { Name => 'ColorTempUnknown15', Unknown => 1 }, 0xbc => { Name => 'ColorCalib', Format => 'undef[120]', Unknown => 1, Notes => 'B, C, A, Temperature', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCalib' } }, 0x0fb => { Name => 'AverageBlackLevel', Format => 'int16u[4]' }, #52 0x194 => { #PH Name => 'RawMeasuredRGGB', Format => 'int32u[4]', Notes => 'raw MeasuredRGGB values, before normalization', # swap words because the word ordering is big-endian, opposite to the byte ordering ValueConv => \&SwapWords, ValueConvInv => \&SwapWords, }, 0x1df => { Name => 'PerChannelBlackLevel', Format => 'int16u[4]' }, #52 0x1e3 => { Name => 'NormalWhiteLevel', Format => 'int16u', RawConv => '$val || undef' }, #52 0x1e4 => { Name => 'SpecularWhiteLevel', Format => 'int16u' }, #52 0x1e5 => { Name => 'LinearityUpperMargin', Format => 'int16u' }, #52 ); # Color data (MakerNotes tag 0x4001, count=1312,1313,1316) (ref PH) %Image::ExifTool::Canon::ColorData7 = ( %binaryDataAttrs, NOTES => 'These tags are used by the EOS 1DX, 5DmkIII, 6D, 100D, 650D, 700D, M and 7DmkII.', FORMAT => 'int16s', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, DATAMEMBER => [ 0x00 ], IS_SUBDIR => [ 0xd5 ], 0x00 => { Name => 'ColorDataVersion', DataMember => 'ColorDataVersion', RawConv => '$$self{ColorDataVersion} = $val', PrintConv => { 10 => '10 (1DX/5DmkIII/6D/70D/100D/650D/700D/M)', 11 => '11 (7DmkII/750D/760D)', }, }, # not really sure about the AsShot, Auto and Measured values any more - PH 0x3f => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' }, 0x43 => 'ColorTempAsShot', 0x44 => { Name => 'WB_RGGBLevelsAuto', Format => 'int16s[4]' }, 0x48 => 'ColorTempAuto', 0x49 => { Name => 'WB_RGGBLevelsMeasured', Format => 'int16s[4]' }, 0x4d => 'ColorTempMeasured', 0x4e => { Name => 'WB_RGGBLevelsUnknown', Format => 'int16s[4]', Unknown => 1 }, 0x52 => { Name => 'ColorTempUnknown', Unknown => 1 }, 0x53 => { Name => 'WB_RGGBLevelsUnknown2', Format => 'int16s[4]', Unknown => 1 }, 0x57 => { Name => 'ColorTempUnknown2', Unknown => 1 }, 0x58 => { Name => 'WB_RGGBLevelsUnknown3', Format => 'int16s[4]', Unknown => 1 }, 0x5c => { Name => 'ColorTempUnknown3', Unknown => 1 }, 0x5d => { Name => 'WB_RGGBLevelsUnknown4', Format => 'int16s[4]', Unknown => 1 }, 0x61 => { Name => 'ColorTempUnknown4', Unknown => 1 }, 0x62 => { Name => 'WB_RGGBLevelsUnknown5', Format => 'int16s[4]', Unknown => 1 }, 0x66 => { Name => 'ColorTempUnknown5', Unknown => 1 }, 0x67 => { Name => 'WB_RGGBLevelsUnknown6', Format => 'int16s[4]', Unknown => 1 }, 0x6b => { Name => 'ColorTempUnknown6', Unknown => 1 }, 0x6c => { Name => 'WB_RGGBLevelsUnknown7', Format => 'int16s[4]', Unknown => 1 }, 0x70 => { Name => 'ColorTempUnknown7', Unknown => 1 }, 0x71 => { Name => 'WB_RGGBLevelsUnknown8', Format => 'int16s[4]', Unknown => 1 }, 0x75 => { Name => 'ColorTempUnknown8', Unknown => 1 }, 0x76 => { Name => 'WB_RGGBLevelsUnknown9', Format => 'int16s[4]', Unknown => 1 }, 0x7a => { Name => 'ColorTempUnknown9', Unknown => 1 }, 0x7b => { Name => 'WB_RGGBLevelsUnknown10', Format => 'int16s[4]', Unknown => 1 }, 0x7f => { Name => 'ColorTempUnknown10', Unknown => 1 }, 0x80 => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' }, 0x84 => 'ColorTempDaylight', 0x85 => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' }, 0x89 => 'ColorTempShade', 0x8a => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16s[4]' }, 0x8e => 'ColorTempCloudy', 0x8f => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16s[4]' }, 0x93 => 'ColorTempTungsten', 0x94 => { Name => 'WB_RGGBLevelsFluorescent',Format => 'int16s[4]' }, 0x98 => 'ColorTempFluorescent', 0x99 => { Name => 'WB_RGGBLevelsKelvin', Format => 'int16s[4]' }, 0x9d => 'ColorTempKelvin', 0x9e => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' }, 0xa2 => 'ColorTempFlash', 0xa3 => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 }, 0xa7 => { Name => 'ColorTempUnknown11', Unknown => 1 }, 0xa8 => { Name => 'WB_RGGBLevelsUnknown12', Format => 'int16s[4]', Unknown => 1 }, 0xac => { Name => 'ColorTempUnknown12', Unknown => 1 }, 0xad => { Name => 'WB_RGGBLevelsUnknown13', Format => 'int16s[4]', Unknown => 1 }, 0xb1 => { Name => 'ColorTempUnknown13', Unknown => 1 }, 0xb2 => { Name => 'WB_RGGBLevelsUnknown14', Format => 'int16s[4]', Unknown => 1 }, 0xb6 => { Name => 'ColorTempUnknown14', Unknown => 1 }, 0xb7 => { Name => 'WB_RGGBLevelsUnknown15', Format => 'int16s[4]', Unknown => 1 }, 0xbb => { Name => 'ColorTempUnknown15', Unknown => 1 }, 0xbc => { Name => 'WB_RGGBLevelsUnknown16', Format => 'int16s[4]', Unknown => 1 }, 0xc0 => { Name => 'ColorTempUnknown16', Unknown => 1 }, 0xc1 => { Name => 'WB_RGGBLevelsUnknown17', Format => 'int16s[4]', Unknown => 1 }, 0xc5 => { Name => 'ColorTempUnknown17', Unknown => 1 }, 0xc6 => { Name => 'WB_RGGBLevelsUnknown18', Format => 'int16s[4]', Unknown => 1 }, 0xca => { Name => 'ColorTempUnknown18', Unknown => 1 }, 0xcb => { Name => 'WB_RGGBLevelsUnknown19', Format => 'int16s[4]', Unknown => 1 }, 0xcf => { Name => 'ColorTempUnknown19', Unknown => 1 }, 0xd0 => { Name => 'WB_RGGBLevelsUnknown20', Format => 'int16s[4]', Unknown => 1 }, 0xd4 => { Name => 'ColorTempUnknown20', Unknown => 1 }, 0xd5 => { Name => 'ColorCalib', Format => 'undef[120]', Unknown => 1, Notes => 'B, C, A, Temperature', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCalib' } }, 0x114 => { Name => 'AverageBlackLevel', Format => 'int16u[4]' }, #52 0x1ad => { Name => 'RawMeasuredRGGB', Condition => '$$self{ColorDataVersion} == 10', Format => 'int32u[4]', Notes => 'raw MeasuredRGGB values, before normalization', # swap words because the word ordering is big-endian, opposite to the byte ordering ValueConv => \&SwapWords, ValueConvInv => \&SwapWords, }, 0x1f8 => { #52 Name => 'PerChannelBlackLevel', Condition => '$$self{ColorDataVersion} == 10', Format => 'int16u[4]', }, 0x1fc => { #52 Name => 'NormalWhiteLevel', Condition => '$$self{ColorDataVersion} == 10', Format => 'int16u', RawConv => '$val || undef', }, 0x1fd => { #52 Name => 'SpecularWhiteLevel', Condition => '$$self{ColorDataVersion} == 10', Format => 'int16u', }, 0x1fe => { #52 Name => 'LinearityUpperMargin', Condition => '$$self{ColorDataVersion} == 10', Format => 'int16u', }, 0x26b => { Name => 'RawMeasuredRGGB', Condition => '$$self{ColorDataVersion} == 11', Format => 'int32u[4]', ValueConv => \&SwapWords, ValueConvInv => \&SwapWords, }, 0x2d8 => { Name => 'PerChannelBlackLevel', Condition => '$$self{ColorDataVersion} == 11', Format => 'int16u[4]', }, 0x2dc => { Name => 'NormalWhiteLevel', Condition => '$$self{ColorDataVersion} == 11', Format => 'int16u', RawConv => '$val || undef', }, 0x2dd => { Name => 'SpecularWhiteLevel', Condition => '$$self{ColorDataVersion} == 11', Format => 'int16u', }, 0x2de => { Name => 'LinearityUpperMargin', Condition => '$$self{ColorDataVersion} == 11', Format => 'int16u', }, ); # Color data (MakerNotes tag 0x4001, count=1560) (ref 52) %Image::ExifTool::Canon::ColorData8 = ( %binaryDataAttrs, NOTES => 'These tags are used by the EOS 5DS and EOS 5DS R.', FORMAT => 'int16s', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, IS_SUBDIR => [ 0x107 ], 0x00 => { Name => 'ColorDataVersion', PrintConv => { 12 => '12 (5DS/5DSR)', }, }, 0x3f => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' }, 0x43 => 'ColorTempAsShot', 0x44 => { Name => 'WB_RGGBLevelsAuto', Format => 'int16s[4]' }, 0x48 => 'ColorTempAuto', 0x49 => { Name => 'WB_RGGBLevelsMeasured', Format => 'int16s[4]' }, 0x4d => 'ColorTempMeasured', 0x4e => { Name => 'WB_RGGBLevelsUnknown', Format => 'int16s[4]', Unknown => 1 }, 0x52 => { Name => 'ColorTempUnknown', Unknown => 1 }, 0x53 => { Name => 'WB_RGGBLevelsUnknown2', Format => 'int16s[4]', Unknown => 1 }, 0x57 => { Name => 'ColorTempUnknown2', Unknown => 1 }, 0x58 => { Name => 'WB_RGGBLevelsUnknown3', Format => 'int16s[4]', Unknown => 1 }, 0x5c => { Name => 'ColorTempUnknown3', Unknown => 1 }, 0x5d => { Name => 'WB_RGGBLevelsUnknown4', Format => 'int16s[4]', Unknown => 1 }, 0x61 => { Name => 'ColorTempUnknown4', Unknown => 1 }, 0x62 => { Name => 'WB_RGGBLevelsUnknown5', Format => 'int16s[4]', Unknown => 1 }, 0x66 => { Name => 'ColorTempUnknown5', Unknown => 1 }, 0x67 => { Name => 'WB_RGGBLevelsUnknown6', Format => 'int16s[4]', Unknown => 1 }, 0x6b => { Name => 'ColorTempUnknown6', Unknown => 1 }, 0x6c => { Name => 'WB_RGGBLevelsUnknown7', Format => 'int16s[4]', Unknown => 1 }, 0x70 => { Name => 'ColorTempUnknown7', Unknown => 1 }, 0x71 => { Name => 'WB_RGGBLevelsUnknown8', Format => 'int16s[4]', Unknown => 1 }, 0x75 => { Name => 'ColorTempUnknown8', Unknown => 1 }, 0x76 => { Name => 'WB_RGGBLevelsUnknown9', Format => 'int16s[4]', Unknown => 1 }, 0x7a => { Name => 'ColorTempUnknown9', Unknown => 1 }, 0x7b => { Name => 'WB_RGGBLevelsUnknown10', Format => 'int16s[4]', Unknown => 1 }, 0x7f => { Name => 'ColorTempUnknown10', Unknown => 1 }, 0x80 => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 }, 0x84 => { Name => 'ColorTempUnknown11', Unknown => 1 }, 0x85 => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' }, 0x89 => 'ColorTempDaylight', 0x8a => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' }, 0x8e => 'ColorTempShade', 0x8f => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16s[4]' }, 0x93 => 'ColorTempCloudy', 0x94 => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16s[4]' }, 0x98 => 'ColorTempTungsten', 0x99 => { Name => 'WB_RGGBLevelsFluorescent',Format => 'int16s[4]' }, 0x9d => 'ColorTempFluorescent', 0x9e => { Name => 'WB_RGGBLevelsKelvin', Format => 'int16s[4]' }, 0xa2 => 'ColorTempKelvin', 0xa3 => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' }, 0xa7 => 'ColorTempFlash', 0xa8 => { Name => 'WB_RGGBLevelsUnknown12', Format => 'int16s[4]', Unknown => 1 }, 0xac => { Name => 'ColorTempUnknown12', Unknown => 1 }, 0xad => { Name => 'WB_RGGBLevelsUnknown13', Format => 'int16s[4]', Unknown => 1 }, 0xb1 => { Name => 'ColorTempUnknown13', Unknown => 1 }, 0xb2 => { Name => 'WB_RGGBLevelsUnknown14', Format => 'int16s[4]', Unknown => 1 }, 0xb6 => { Name => 'ColorTempUnknown14', Unknown => 1 }, 0xb7 => { Name => 'WB_RGGBLevelsUnknown15', Format => 'int16s[4]', Unknown => 1 }, 0xbb => { Name => 'ColorTempUnknown15', Unknown => 1 }, 0xbc => { Name => 'WB_RGGBLevelsUnknown16', Format => 'int16s[4]', Unknown => 1 }, 0xc0 => { Name => 'ColorTempUnknown16', Unknown => 1 }, 0xc1 => { Name => 'WB_RGGBLevelsUnknown17', Format => 'int16s[4]', Unknown => 1 }, 0xc5 => { Name => 'ColorTempUnknown17', Unknown => 1 }, 0xc6 => { Name => 'WB_RGGBLevelsUnknown18', Format => 'int16s[4]', Unknown => 1 }, 0xca => { Name => 'ColorTempUnknown18', Unknown => 1 }, 0xcb => { Name => 'WB_RGGBLevelsUnknown19', Format => 'int16s[4]', Unknown => 1 }, 0xcf => { Name => 'ColorTempUnknown19', Unknown => 1 }, 0xd0 => { Name => 'WB_RGGBLevelsUnknown20', Format => 'int16s[4]', Unknown => 1 }, 0xd4 => { Name => 'ColorTempUnknown20', Unknown => 1 }, 0xd5 => { Name => 'WB_RGGBLevelsUnknown21', Format => 'int16s[4]', Unknown => 1 }, 0xd9 => { Name => 'ColorTempUnknown21', Unknown => 1 }, 0xda => { Name => 'WB_RGGBLevelsUnknown22', Format => 'int16s[4]', Unknown => 1 }, 0xde => { Name => 'ColorTempUnknown22', Unknown => 1 }, 0xdf => { Name => 'WB_RGGBLevelsUnknown23', Format => 'int16s[4]', Unknown => 1 }, 0xe3 => { Name => 'ColorTempUnknown23', Unknown => 1 }, 0xe4 => { Name => 'WB_RGGBLevelsUnknown24', Format => 'int16s[4]', Unknown => 1 }, 0xe8 => { Name => 'ColorTempUnknown24', Unknown => 1 }, 0xe9 => { Name => 'WB_RGGBLevelsUnknown25', Format => 'int16s[4]', Unknown => 1 }, 0xed => { Name => 'ColorTempUnknown25', Unknown => 1 }, 0xee => { Name => 'WB_RGGBLevelsUnknown26', Format => 'int16s[4]', Unknown => 1 }, 0xf2 => { Name => 'ColorTempUnknown26', Unknown => 1 }, 0xf3 => { Name => 'WB_RGGBLevelsUnknown27', Format => 'int16s[4]', Unknown => 1 }, 0xf7 => { Name => 'ColorTempUnknown27', Unknown => 1 }, 0xf8 => { Name => 'WB_RGGBLevelsUnknown28', Format => 'int16s[4]', Unknown => 1 }, 0xfc => { Name => 'ColorTempUnknown28', Unknown => 1 }, 0xfd => { Name => 'WB_RGGBLevelsUnknown29', Format => 'int16s[4]', Unknown => 1 }, 0x101 => { Name => 'ColorTempUnknown29', Unknown => 1 }, 0x102 => { Name => 'WB_RGGBLevelsUnknown30', Format => 'int16s[4]', Unknown => 1 }, 0x106 => { Name => 'ColorTempUnknown30', Unknown => 1 }, 0x107 => { Name => 'ColorCalib', Format => 'undef[120]', Unknown => 1, Notes => 'B, C, A, Temperature', SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCalib' } }, 0x146 => { Name => 'AverageBlackLevel', Format => 'int16u[4]' }, 0x30a => { Name => 'PerChannelBlackLevel', Format => 'int16u[4]' }, 0x30e => { Name => 'NormalWhiteLevel', Format => 'int16u', RawConv => '$val || undef' }, 0x30f => { Name => 'SpecularWhiteLevel', Format => 'int16u' }, 0x310 => { Name => 'LinearityUpperMargin', Format => 'int16u' }, ); # Unknown color data (MakerNotes tag 0x4001) %Image::ExifTool::Canon::ColorDataUnknown = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int16s', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x00 => 'ColorDataVersion', ); # Color information (MakerNotes tag 0x4003) (ref PH) %Image::ExifTool::Canon::ColorInfo = ( %binaryDataAttrs, FORMAT => 'int16s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 1 => { Condition => '$$self{Model} =~ /EOS-1D/', Name => 'Saturation', %Image::ExifTool::Exif::printParameter, }, 2 => { Name => 'ColorTone', %Image::ExifTool::Exif::printParameter, }, 3 => { Name => 'ColorSpace', RawConv => '$val ? $val : undef', # ignore tag if zero PrintConv => { 1 => 'sRGB', 2 => 'Adobe RGB', }, }, ); # AF micro-adjustment information (MakerNotes tag 0x4013) (ref PH) %Image::ExifTool::Canon::AFMicroAdj = ( %binaryDataAttrs, FORMAT => 'int32s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 1 => { Name => 'AFMicroAdjMode', PrintConv => { 0 => 'Disable', 1 => 'Adjust all by the same amount', 2 => 'Adjust by lens', }, }, 2 => { Name => 'AFMicroAdjValue', Format => 'rational64s', }, ); # Vignetting correction information (MakerNotes tag 0x4015) %Image::ExifTool::Canon::VignettingCorr = ( %binaryDataAttrs, FORMAT => 'int16s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'This information is found in images from newer EOS models.', 0 => { Name => 'VignettingCorrVersion', Format => 'int8u', Writable => 0, }, 2 => { Name => 'PeripheralLighting', PrintConv => \%offOn, }, 4 => { Name => 'ChromaticAberrationCorr', PrintConv => \%offOn, }, 5 => { Name => 'ChromaticAberrationCorr', PrintConv => \%offOn, }, 6 => 'PeripheralLightingValue', # 10 - flags? 11 => { Name => 'OriginalImageWidth', Notes => 'full size of original image before being rotated or scaled in camera', }, 12 => 'OriginalImageHeight', ); %Image::ExifTool::Canon::VignettingCorrUnknown = ( %binaryDataAttrs, FORMAT => 'int16s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Vignetting correction from PowerShot models.', 0 => { Name => 'VignettingCorrVersion', Format => 'int8u', Writable => 0, }, ); # More Vignetting correction information (MakerNotes tag 0x4016) %Image::ExifTool::Canon::VignettingCorr2 = ( %binaryDataAttrs, FORMAT => 'int32s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 5 => { Name => 'PeripheralLightingSetting', PrintConv => \%offOn, }, 6 => { Name => 'ChromaticAberrationSetting', PrintConv => \%offOn, }, ); # Auto Lighting Optimizater information (MakerNotes tag 0x4018) (ref PH) %Image::ExifTool::Canon::LightingOpt = ( %binaryDataAttrs, FORMAT => 'int32s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'This information is new in images from the EOS 7D.', 1 => { Name => 'PeripheralIlluminationCorr', PrintConv => \%offOn, }, 2 => { Name => 'AutoLightingOptimizer', PrintConv => { 0 => 'Standard', 1 => 'Low', 2 => 'Strong', 3 => 'Off', }, }, 3 => { Name => 'HighlightTonePriority', PrintConv => \%offOn, }, 4 => { Name => 'LongExposureNoiseReduction', PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'On', }, }, 5 => { Name => 'HighISONoiseReduction', PrintConv => { 0 => 'Standard', 1 => 'Low', 2 => 'Strong', 3 => 'Off', }, }, # 6 - related to ChromaticAberrationCorr # 7 - related to DistortionCorrection # 8 - related to PeripheralIlluminationCorr and ChromaticAberrationCorr ); # Lens information (MakerNotes tag 0x4019) (ref 20) %Image::ExifTool::Canon::LensInfo = ( %binaryDataAttrs, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { # this doesn't seem to be valid for some models (eg. 550D, 7D?, 1DmkIV?) Name => 'LensSerialNumber', Notes => q{ apparently this is an internal serial number because it doesn't correspond to the one printed on the lens }, Format => 'undef[5]', Priority => 0, RawConv => '$val=~/^\0\0\0\0/ ? undef : $val', # (rules out 550D and older lenses) ValueConv => 'unpack("H*", $val)', ValueConvInv => 'length($val) < 10 and $val = 0 x (10-length($val)) . $val; pack("H*",$val)', }, ); # Subject mode ambience information (MakerNotes tag 0x4020) (ref PH) %Image::ExifTool::Canon::Ambience = ( %binaryDataAttrs, FORMAT => 'int32s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 1 => { Name => 'AmbienceSelection', PrintConv => { 0 => 'Standard', 1 => 'Vivid', 2 => 'Warm', 3 => 'Soft', 4 => 'Cool', 5 => 'Intense', 6 => 'Brighter', 7 => 'Darker', 8 => 'Monochrome', }, }, ); # Multi-exposure information (MakerNotes tag 0x4021) (ref PH) %Image::ExifTool::Canon::MultiExp = ( %binaryDataAttrs, FORMAT => 'int32s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 1 => { Name => 'MultiExposure', PrintConv => { 0 => 'Off', 1 => 'On', 2 => 'On (RAW)', #52 }, }, 2 => { Name => 'MultiExposureControl', PrintConv => { 0 => 'Additive', 1 => 'Average', 2 => 'Bright (comparative)', 3 => 'Dark (comparative)', }, }, 3 => 'MultiExposureShots', ); my %filterConv = ( PrintConv => { -1 => 'Off', OTHER => sub { my $val=shift; return "On ($val)" }, }, ); # Creative filter information (MakerNotes tag 0x4024) (ref PH) %Image::ExifTool::Canon::FilterInfo = ( PROCESS_PROC => \&ProcessFilters, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Information about creative filter settings.', 0x101 => { Name => 'GrainyBWFilter', Description => 'Grainy B/W Filter', %filterConv, }, 0x201 => { Name => 'SoftFocusFilter', %filterConv }, 0x301 => { Name => 'ToyCameraFilter', %filterConv }, 0x401 => { Name => 'MiniatureFilter', %filterConv }, 0x402 => { Name => 'MiniatureFilterOrientation', PrintConv => { 0 => 'Horizontal', 1 => 'Vertical', }, }, 0x403 => 'MiniatureFilterPosition', 0x404 => 'MiniatureFilterParameter', # but what is the meaning? 0x501 => { Name => 'FisheyeFilter', %filterConv }, # (M2) 0x601 => { Name => 'PaintingFilter', %filterConv }, # (M2) 0x701 => { Name => 'WatercolorFilter', %filterConv }, # (M2) ); # HDR information (MakerNotes tag 0x4025) (ref PH) %Image::ExifTool::Canon::HDRInfo = ( %binaryDataAttrs, FORMAT => 'int32s', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 1 => { Name => 'HDR', PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'On', }, }, 2 => { Name => 'HDREffect', PrintConv => { 0 => 'Natural', 1 => 'Art (standard)', 2 => 'Art (vivid)', 3 => 'Art (bold)', 4 => 'Art (embossed)', }, }, # 3 - maybe related to AutoImageAlign? ); # AF configuration info (MakerNotes tag 0x4027) (ref PH) %Image::ExifTool::Canon::AFConfig = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FORMAT => 'int32s', FIRST_ENTRY => 1, 1 => { Name => 'AFConfigTool', ValueConv => '$val + 1', ValueConvInv => '$val - 1', PrintConv => '"Case $val"', PrintConvInv => '$val=~/(\d+)/ ? $1 : undef', }, 2 => 'AFTrackingSensitivity', 3 => { Name => 'AFAccelDecelTracking', Description => 'AF Accel/Decel Tracking', }, 4 => 'AFPointSwitching', ); # Canon UUID atoms (ref PH, SX280) %Image::ExifTool::Canon::uuid = ( GROUPS => { 0 => 'MakerNotes', 1 => 'Canon', 2 => 'Video' }, NOTES => q{ Tags extracted from the uuid atom of MP4 videos from cameras such as the SX280. }, CNCV => 'CompressorVersion', # CNDM - 4 bytes - 0xff,0xd8,0xff,0xd9 CNTH => { Name => 'CanonCNTH', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CNTH' }, }, ); # Canon CNTH atoms (ref PH) %Image::ExifTool::Canon::CNTH = ( GROUPS => { 0 => 'MakerNotes', 1 => 'Canon', 2 => 'Video' }, NOTES => q{ Canon-specific QuickTime tags found in the CNTH atom of MOV videos from some cameras such as the PowerShot S95. }, CNDA => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Format => 'undef', Notes => 'the full THM image, embedded metadata is extracted as the first sub-document', SetBase => 1, RawConv => q{ $$self{DOC_NUM} = ++$$self{DOC_COUNT}; $self->ExtractInfo(\$val, { ReEntry => 1 }); $$self{DOC_NUM} = 0; return \$val; }, }, ); # Canon CNOP atoms (ref PH) %Image::ExifTool::Canon::CNOP = ( GROUPS => { 0 => 'MakerNotes', 1 => 'Canon', 2 => 'Video' }, # CNFB - 52 bytes (7DmkII) ); # 'skip' atom of Canon MOV videos (ref PH) %Image::ExifTool::Canon::Skip = ( GROUPS => { 0 => 'MakerNotes', 1 => 'Canon', 2 => 'Video' }, NOTES => 'Information found in the "skip" atom of Canon MOV videos.', CNDB => { Name => 'Unknown_CNDB', Unknown => 1, Binary => 1 }, ); # Canon composite tags %Image::ExifTool::Canon::Composite = ( GROUPS => { 2 => 'Camera' }, DriveMode => { Require => { 0 => 'ContinuousDrive', 1 => 'SelfTimer', }, ValueConv => '$val[0] ? 0 : ($val[1] ? 1 : 2)', PrintConv => { 0 => 'Continuous Shooting', 1 => 'Self-timer Operation', 2 => 'Single-frame Shooting', }, }, Lens => { Require => { 0 => 'Canon:MinFocalLength', 1 => 'Canon:MaxFocalLength', }, ValueConv => '$val[0]', PrintConv => 'Image::ExifTool::Canon::PrintFocalRange(@val)', }, Lens35efl => { Description => 'Lens', Require => { 0 => 'Canon:MinFocalLength', 1 => 'Canon:MaxFocalLength', 3 => 'Lens', }, Desire => { 2 => 'ScaleFactor35efl', }, ValueConv => '$val[3] * ($val[2] ? $val[2] : 1)', PrintConv => '$prt[3] . ($val[2] ? sprintf(" (35 mm equivalent: %s)",Image::ExifTool::Canon::PrintFocalRange(@val)) : "")', }, ShootingMode => { Require => { 0 => 'CanonExposureMode', 1 => 'EasyMode', }, Desire => { 2 => 'BulbDuration', }, # most Canon models set CanonExposureMode to Manual (4) for Bulb shots, # but the 1DmkIII uses a value of 7 for Bulb, so use this for other # models too (Note that Canon DPP reports "Manual Exposure" here) ValueConv => '$val[0] ? (($val[0] eq "4" and $val[2]) ? 7 : $val[0]) : $val[1] + 10', PrintConv => '$val eq "7" ? "Bulb" : ($val[0] ? $prt[0] : $prt[1])', }, FlashType => { Notes => q{ may report "Built-in Flash" for some Canon cameras with external flash in manual mode }, Require => { 0 => 'FlashBits', }, RawConv => '$val[0] ? $val : undef', ValueConv => '$val[0]&(1<<14)? 1 : 0', PrintConv => { 0 => 'Built-In Flash', 1 => 'External', }, }, RedEyeReduction => { Require => { 0 => 'CanonFlashMode', 1 => 'FlashBits', }, RawConv => '$val[1] ? $val : undef', ValueConv => '($val[0]==3 or $val[0]==4 or $val[0]==6) ? 1 : 0', PrintConv => { 0 => 'Off', 1 => 'On', }, }, # same as FlashExposureComp, but undefined if no flash ConditionalFEC => { Description => 'Flash Exposure Compensation', Require => { 0 => 'FlashExposureComp', 1 => 'FlashBits', }, RawConv => '$val[1] ? $val : undef', ValueConv => '$val[0]', PrintConv => '$prt[0]', }, # hack to assume 1st curtain unless we see otherwise ShutterCurtainHack => { Description => 'Shutter Curtain Sync', Desire => { 0 => 'ShutterCurtainSync', }, Require => { 1 => 'FlashBits', }, RawConv => '$val[1] ? $val : undef', ValueConv => 'defined($val[0]) ? $val[0] : 0', PrintConv => { 0 => '1st-curtain sync', 1 => '2nd-curtain sync', }, }, WB_RGGBLevels => { Require => { 0 => 'Canon:WhiteBalance', }, Desire => { 1 => 'WB_RGGBLevelsAsShot', # indices of the following entries correspond to Canon:WhiteBalance + 2 2 => 'WB_RGGBLevelsAuto', 3 => 'WB_RGGBLevelsDaylight', 4 => 'WB_RGGBLevelsCloudy', 5 => 'WB_RGGBLevelsTungsten', 6 => 'WB_RGGBLevelsFluorescent', 7 => 'WB_RGGBLevelsFlash', 8 => 'WB_RGGBLevelsCustom', 10 => 'WB_RGGBLevelsShade', 11 => 'WB_RGGBLevelsKelvin', }, ValueConv => '$val[1] ? $val[1] : $val[($val[0] || 0) + 2]', }, ISO => { Priority => 0, # let EXIF:ISO take priority Desire => { 0 => 'Canon:CameraISO', 1 => 'Canon:BaseISO', 2 => 'Canon:AutoISO', }, Notes => 'use CameraISO if numerical, otherwise calculate as BaseISO * AutoISO / 100', ValueConv => q{ return $val[0] if $val[0] and $val[0] =~ /^\d+$/; return undef unless $val[1] and $val[2]; return $val[1] * $val[2] / 100; }, PrintConv => 'sprintf("%.0f",$val)', }, DigitalZoom => { Require => { 0 => 'Canon:ZoomSourceWidth', 1 => 'Canon:ZoomTargetWidth', 2 => 'Canon:DigitalZoom', }, RawConv => q{ ToFloat(@val); return undef unless $val[2] and $val[2] == 3 and $val[0] and $val[1]; return $val[1] / $val[0]; }, PrintConv => 'sprintf("%.2fx",$val)', }, OriginalDecisionData => { Flags => ['Writable','Protected'], WriteGroup => 'MakerNotes', Require => 'OriginalDecisionDataOffset', RawConv => 'Image::ExifTool::Canon::ReadODD($self,$val[0])', }, FileNumber => { Groups => { 2 => 'Image' }, Writable => 1, WriteCheck => '$val=~/\d+-\d+/ ? undef : "Invalid format"', DelCheck => '"Can\'t delete"', Require => { 0 => 'DirectoryIndex', 1 => 'FileIndex', }, WriteAlso => { DirectoryIndex => '$val=~/(\d+)-(\d+)/; $1', FileIndex => '$val=~/(\d+)-(\d+)/; $2', }, ValueConv => q{ # fix the funny things that these numbers do when they wrap over 9999 # (it seems that FileIndex and DirectoryIndex actually store the # numbers from the previous image, so we need special logic # to handle the FileIndex wrap properly) $val[1] = 1 and ++$val[0] if $val[1] == 10000; return sprintf("%.3d-%.4d",@val); }, }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::Canon'); #------------------------------------------------------------------------------ # Return lens name with teleconverter if applicable # Inputs: 0) lens name string, 1) short focal length # Returns: lens string with tc if appropriate sub LensWithTC($$) { my ($lens, $shortFocal) = @_; # add teleconverter multiplication factor if applicable # (and if the LensType doesn't already include one) if (not $lens =~ /x$/ and $lens =~ /(\d+)/) { my $sf = $1; # short focal length my $tc; foreach $tc (1, 1.4, 2, 2.8) { next if abs($shortFocal - $sf * $tc) > 0.9; $lens .= " + ${tc}x" if $tc > 1; last; } } return $lens; } #------------------------------------------------------------------------------ # Attempt to calculate sensor size for Canon cameras # Inputs: 0/1) rational values for FocalPlaneX/YResolution # Returns: Sensor diagonal size in mm, or undef # Notes: This algorithm is fairly reliable, but has been found to give incorrect # values for some firmware versions of the EOS 20D, A310, SD40 and IXUS 65 # (ref http://wyw.dcweb.cn/download.asp?path=&file=jhead-2.96-ccdwidth_hack.zip) sub CalcSensorDiag($$) { my ($xres, $yres) = @_; # most Canon cameras store the sensor size in the denominator if ($xres and $yres) { # assumptions: 1) numerators are image width/height * 1000 # 2) denominators are sensor width/height in inches * 1000 my @xres = split /[ \/]/, $xres; my @yres = split /[ \/]/, $yres; # verify assumptions as best we can: # numerators are always divisible by 1000 if ($xres[0] % 1000 == 0 and $yres[0] % 1000 == 0 and # at least 640x480 pixels (DC models - PH) $xres[0] >= 640000 and $yres[0] >= 480000 and # ... but not too big! $xres[0] < 10000000 and $yres[0] < 10000000 and # minimum sensor size is 0.061 inches (DC models - PH) $xres[1] >= 61 and $xres[1] < 1500 and $yres[1] >= 61 and $yres[1] < 1000) { return sqrt($xres[1]*$xres[1] + $yres[1]*$yres[1]) * 0.0254; } } return undef; } #------------------------------------------------------------------------------ # Attempt to identify the specific lens if multiple lenses have the same LensType # Inputs: 0) PrintConv hash ref, 1) LensType, 2) MinFocalLength, 3) MaxFocalLength # 4) MaxAperture, 5) LensModel # Notes: PrintConv, LensType, MinFocalLength and MaxFocalLength must be defined. # Other inputs are optional. sub PrintLensID(@) { my ($printConv, $lensType, $shortFocal, $longFocal, $maxAperture, $lensModel) = @_; my $lens; $lens = $$printConv{$lensType} unless $lensType eq '-1'; if ($lens) { # return this lens unless other lenses have the same LensType return LensWithTC($lens, $shortFocal) unless $$printConv{"$lensType.1"}; $lens =~ s/ or .*//s; # remove everything after "or" # make list of all possible matching lenses my @lenses = ( $lens ); my $i; for ($i=1; $$printConv{"$lensType.$i"}; ++$i) { push @lenses, $$printConv{"$lensType.$i"}; } my ($tc, @user, @maybe, @likely, @matches); # look for lens in user-defined lenses foreach $lens (@lenses) { push @user, $lens if $Image::ExifTool::userLens{$lens}; } # attempt to determine actual lens foreach $tc (1, 1.4, 2, 2.8) { # loop through teleconverter scaling factors foreach $lens (@lenses) { next unless $lens =~ /(\d+)(?:-(\d+))?mm.*?(?:[fF]\/?)(\d+(?:\.\d+)?)(?:-(\d+(?:\.\d+)?))?/; # ($1=short focal, $2=long focal, $3=max aperture wide, $4=max aperture tele) my ($sf, $lf, $sa, $la) = ($1, $2, $3, $4); # see if we can rule out this lens by focal length or aperture $lf = $sf if $sf and not $lf; $la = $sa if $sa and not $la; # account for converter-specific LensType's (ie. end with " + #.#x") if ($lens =~ / \+ (\d+(\.\d+)?)x$/) { $sf *= $1; $lf *= $1; $sa *= $1; $la *= $1; } next if abs($shortFocal - $sf * $tc) > 0.9; my $tclens = $lens; $tclens .= " + ${tc}x" if $tc > 1; push @maybe, $tclens; next if abs($longFocal - $lf * $tc) > 0.9; push @likely, $tclens; if ($maxAperture) { # (not 100% sure that TC affects MaxAperture, but it should!) next if $maxAperture < $sa * $tc - 0.15; next if $maxAperture > $la * $tc + 0.15; } push @matches, $tclens; } last if @maybe; } if (@user) { # choose the best match if we have more than one if (@user > 1) { my ($try, @good); foreach $try (\@matches, \@likely, \@maybe) { foreach (@$try) { $Image::ExifTool::userLens{$_} and push(@good, $_), next; # check for match with TC string removed next unless /^(.*) \+ \d+(\.\d+)?x$/; $Image::ExifTool::userLens{$1} and push(@good, $_); } return join(' or ', @good) if @good; } } # default to returning the first user-defined lens return LensWithTC($user[0], $shortFocal); } return join(' or ', @matches) if @matches; return join(' or ', @likely) if @likely; return join(' or ', @maybe) if @maybe; } elsif ($lensModel and $lensModel =~ /\d/) { # use lens model as written by the camera if ($printConv eq \%canonLensTypes) { # add "Canon" to the start since the Canon cameras only understand Canon lenses return "Canon $lensModel"; } else { return $lensModel; } } my $str = ''; if ($shortFocal) { $str .= sprintf(' %d', $shortFocal); $str .= sprintf('-%d', $longFocal) if $longFocal and $longFocal != $shortFocal; $str .= 'mm'; } return "Unknown$str" if $lensType eq '-1'; # (careful because Sigma LensType's may not be integer) return "Unknown ($lensType)$str"; } #------------------------------------------------------------------------------ # Swap 16-bit words in 32-bit integers # Inputs: 0) string of integers # Returns: string of word-swapped integers sub SwapWords($) { my @a = split(' ', shift); $_ = (($_ >> 16) | ($_ << 16)) & 0xffffffff foreach @a; return "@a"; } #------------------------------------------------------------------------------ # Validate first word of Canon binary data # Inputs: 0) data pointer, 1) offset, 2-N) list of valid values # Returns: true if data value is the same sub Validate($$@) { my ($dataPt, $offset, @vals) = @_; # the first 16-bit value is the length of the data in bytes my $dataVal = Image::ExifTool::Get16u($dataPt, $offset); my $val; foreach $val (@vals) { return 1 if $val == $dataVal; } return undef; } #------------------------------------------------------------------------------ # Validate CanonAFInfo # Inputs: 0) data pointer, 1) offset, 2) size # Returns: true if data appears valid sub ValidateAFInfo($$$) { my ($dataPt, $offset, $size) = @_; return 0 if $size < 24; # must be at least 24 bytes long (PowerShot Pro1) my $af = Get16u($dataPt, $offset); return 0 if $af !~ /^(1|5|7|9|15|45|53)$/; # check NumAFPoints my $w1 = Get16u($dataPt, $offset + 4); my $h1 = Get16u($dataPt, $offset + 6); return 0 unless $h1 and $w1; my $f1 = $w1 / $h1; # check for normal aspect ratio return 1 if abs($f1 - 1.33) < 0.01 or abs($f1 - 1.67) < 0.01; # ZoomBrowser can modify this for rotated images (ref Joshua Bixby) return 1 if abs($f1 - 0.75) < 0.01 or abs($f1 - 0.60) < 0.01; my $w2 = Get16u($dataPt, $offset + 8); my $h2 = Get16u($dataPt, $offset + 10); return 0 unless $h2 and $w2; # compare aspect ratio with AF image size # (but the Powershot AFImageHeight is odd, hence the test above) return 0 if $w1 eq $h1; my $f2 = $w2 / $h2; return 1 if abs(1-$f1/$f2) < 0.01; return 1 if abs(1-$f1*$f2) < 0.01; return 0; } #------------------------------------------------------------------------------ # Read original decision data from file (variable length) # Inputs: 0) ExifTool object ref, 1) offset in file # Returns: reference to original decision data (or undef if no data) sub ReadODD($$) { my ($et, $offset) = @_; return undef unless $offset; my ($raf, $buff, $buf2, $i, $warn); return undef unless defined($raf = $$et{RAF}); # the data block is a variable length and starts with 0xffffffff # followed a 4-byte (int32u) version number my $pos = $raf->Tell(); if ($raf->Seek($offset, 0) and $raf->Read($buff, 8)==8 and $buff=~/^\xff{4}.\0\0/s) { my $err = 1; # must set byte order in case it is different than current byte order # (we could be reading this after byte order was changed) my $oldOrder = GetByteOrder(); my $version = Get32u(\$buff, 4); if ($version > 20) { ToggleByteOrder(); $version = unpack('N',pack('V',$version)); } if ($version == 1 or # 1Ds (big endian) $version == 2) # 5D/20D (little endian) { # this data is structured as follows: # 4 bytes: all 0xff # 4 bytes: version number (=1 or 2) # 20 bytes: sha1 # 4 bytes: record count # for each record: # | 4 bytes: record number (beginning at 0) # | 4 bytes: block offset # | 4 bytes: block length # | 20 bytes: block sha1 if ($raf->Read($buf2, 24) == 24) { $buff .= $buf2; my $count = Get32u(\$buf2, 20); # read all records if the count is reasonable if ($count and $count < 20 and $raf->Read($buf2, $count * 32) == $count * 32) { $buff .= $buf2; undef $err; } } } elsif ($version == 3) { # newer models (little endian) # this data is structured as follows: # 4 bytes: all 0xff # 4 bytes: version number (=3) # 24 bytes: sha1 A length (=20) + sha1 A # 24 bytes: sha1 B length (=20) + sha1 B # 4 bytes: length of remaining data (including this length word!) # 8 bytes: salt length (=4) + salt ? # 4 bytes: unknown (=3) # 4 bytes: size of file # 4 bytes: unknown (=1 for most models, 2 for 5DmkII) # 4 bytes: unknown (=1) # 4 bytes: unknown (always the same for a given firmware version) # 4 bytes: unknown (random) # 4 bytes: record count # for each record: # | 4 bytes: record number (beginning at 1) # | 8 bytes: salt length (=4) + salt ? # | 24 bytes: sha1 length (=20) + sha1 # | 4 bytes: block count # | for each block: # | | 4 bytes: block offset # | | 4 bytes: block length # followed by zero padding to end of ODD data (~72 bytes) for ($i=0; ; ++$i) { $i == 3 and undef $err, last; # success! $raf->Read($buf2, 4) == 4 or last; $buff .= $buf2; my $len = Get32u(\$buf2, 0); # (the data length includes the length word itself - doh!) $len -= 4 if $i == 2 and $len >= 4; # make sure records are a reasonable size (<= 64kB) $len <= 0x10000 and $raf->Read($buf2, $len) == $len or last; $buff .= $buf2; } } else { $warn = "Unsupported original decision data version $version"; } SetByteOrder($oldOrder); unless ($err) { if ($et->Options('HtmlDump')) { $et->HDump($offset, length $buff, '[OriginalDecisionData]', undef); } $raf->Seek($pos, 0); # restore original file position return \$buff; } } $et->Warn($warn || 'Invalid original decision data'); $raf->Seek($pos, 0); # restore original file position return undef; } #------------------------------------------------------------------------------ # Convert the CameraISO value # Inputs: 0) value, 1) set for inverse conversion sub CameraISO($;$) { my ($val, $inv) = @_; my $rtnVal; my %isoLookup = ( 0 => 'n/a', 14 => 'Auto High', #PH (S3IS) 15 => 'Auto', 16 => 50, 17 => 100, 18 => 200, 19 => 400, 20 => 800, #PH ); if ($inv) { $rtnVal = Image::ExifTool::ReverseLookup($val, \%isoLookup); if (not defined $rtnVal and Image::ExifTool::IsInt($val)) { $rtnVal = ($val & 0x3fff) | 0x4000; } } elsif ($val != 0x7fff) { if ($val & 0x4000) { $rtnVal = $val & 0x3fff; } else { $rtnVal = $isoLookup{$val} || "Unknown ($val)"; } } return $rtnVal; } #------------------------------------------------------------------------------ # Print range of focal lengths # Inputs: 0) short focal, 1) long focal, 2) optional scaling factor sub PrintFocalRange(@) { my ($short, $long, $scale) = @_; $scale or $scale = 1; if ($short == $long) { return sprintf("%.1f mm", $short * $scale); } else { return sprintf("%.1f - %.1f mm", $short * $scale, $long * $scale); } } #------------------------------------------------------------------------------ # Process a serial stream of binary data # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success # Notes: The tagID's for serial stream tags are consecutive indices beginning # at 0, and the corresponding values must be contiguous in memory. # "Unknown" tags must be used to skip padding or unknown values. # (does not yet extract Rational values) sub ProcessSerialData($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $offset = $$dirInfo{DirStart}; my $size = $$dirInfo{DirLen}; my $base = $$dirInfo{Base} || 0; my $verbose = $et->Options('Verbose'); my $dataPos = $$dirInfo{DataPos} || 0; # temporarily set Unknown option so GetTagInfo() will return existing unknown tags # (require to maintain serial data synchronization) my $unknown = $et->Options(Unknown => 1); # but disable unknown tag generation (because processing ends when we run out of tags) $$et{NO_UNKNOWN} = 1; $verbose and $et->VerboseDir('SerialData', undef, $size); # get default format ('int8u' unless specified) my $defaultFormat = $$tagTablePtr{FORMAT} || 'int8u'; my ($index, %val); my $pos = 0; for ($index=0; $$tagTablePtr{$index} and $pos <= $size; ++$index) { my $tagInfo = $et->GetTagInfo($tagTablePtr, $index) or last; my $format = $$tagInfo{Format}; my $count = 1; if ($format) { if ($format =~ /(.*)\[(.*)\]/) { $format = $1; $count = $2; # evaluate count to allow count to be based on previous values #### eval Format (%val, $size) $count = eval $count; $@ and warn("Format $$tagInfo{Name}: $@"), last; } elsif ($format eq 'string') { # allow string with no specified count to run to end of block $count = ($size > $pos) ? $size - $pos : 0; } } else { $format = $defaultFormat; } my $len = (Image::ExifTool::FormatSize($format) || 1) * $count; last if $pos + $len > $size; my $val = ReadValue($dataPt, $pos+$offset, $format, $count, $size-$pos); last unless defined $val; if ($verbose) { $et->VerboseInfo($index, $tagInfo, Index => $index, Table => $tagTablePtr, Value => $val, DataPt => $dataPt, Size => $len, Start => $pos+$offset, Addr => $pos+$offset+$base+$dataPos, Format => $format, Count => $count, ); } $val{$index} = $val; if ($$tagInfo{SubDirectory}) { my $subTablePtr = GetTagTable($$tagInfo{SubDirectory}{TagTable}); my %dirInfo = ( DataPt => \$val, DataPos => $dataPos + $pos, DirStart => 0, DirLen => length($val), ); $et->ProcessDirectory(\%dirInfo, $subTablePtr); } elsif (not $$tagInfo{Unknown} or $unknown) { # don't extract zero-length information $et->FoundTag($tagInfo, $val) if $count; } $pos += $len; } $et->Options(Unknown => $unknown); # restore Unknown option delete $$et{NO_UNKNOWN}; return 1; } #------------------------------------------------------------------------------ # Print 1D AF points # Inputs: 0) value to convert # Focus point pattern: # A1 A2 A3 A4 A5 A6 A7 # B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 # C1 C2 C3 C4 C5 C6 C7 C9 C9 C10 C11 # D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 # E1 E2 E3 E4 E5 E6 E7 sub PrintAFPoints1D($) { my $val = shift; return 'Unknown' unless length $val == 8; # list of focus point values for decoding the first byte of the 8-byte record. # they are the x/y positions of each bit in the AF point mask # (y is upper 3 bits / x is lower 5 bits) my @focusPts = (0,0, 0x04,0x06,0x08,0x0a,0x0c,0x0e,0x10, 0,0, 0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x33, 0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4d,0x50,0x52,0x54, 0x61,0x63,0x65,0x67,0x69,0x6b,0x6d,0x6f,0x71,0x73, 0,0, 0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90, 0,0,0,0,0 ); my $focus = unpack('C',$val); my @bits = split //, unpack('b*',substr($val,1)); my @rows = split //, ' AAAAAAA BBBBBBBBBBCCCCCCCCCCCDDDDDDDDDD EEEEEEE '; my ($focusing, $focusPt, @points); my $lastRow = ''; my $col = 0; foreach $focusPt (@focusPts) { my $row = shift @rows; $col = ($row eq $lastRow) ? $col + 1 : 1; $lastRow = $row; $focusing = "$row$col" if $focus eq $focusPt; push @points, "$row$col" if shift @bits; } $focusing or $focusing = ($focus eq 0xff) ? 'Auto' : sprintf('Unknown (0x%.2x)',$focus); return "$focusing (" . join(',',@points) . ')'; } #------------------------------------------------------------------------------ # Convert Canon hex-based EV (modulo 0x20) to real number # Inputs: 0) value to convert # eg) 0x00 -> 0 # 0x0c -> 0.33333 # 0x10 -> 0.5 # 0x14 -> 0.66666 # 0x20 -> 1 ... etc sub CanonEv($) { my $val = shift; my $sign; # temporarily make the number positive if ($val < 0) { $val = -$val; $sign = -1; } else { $sign = 1; } my $frac = $val & 0x1f; $val -= $frac; # remove fraction # Convert 1/3 and 2/3 codes if ($frac == 0x0c) { $frac = 0x20 / 3; } elsif ($frac == 0x14) { $frac = 0x40 / 3; } return $sign * ($val + $frac) / 0x20; } #------------------------------------------------------------------------------ # Convert number to Canon hex-based EV (modulo 0x20) # Inputs: 0) number # Returns: Canon EV code sub CanonEvInv($) { my $num = shift; my $sign; # temporarily make the number positive if ($num < 0) { $num = -$num; $sign = -1; } else { $sign = 1; } my $val = int($num); my $frac = $num - $val; if (abs($frac - 0.33) < 0.05) { $frac = 0x0c } elsif (abs($frac - 0.67) < 0.05) { $frac = 0x14; } else { $frac = int($frac * 0x20 + 0.5); } return $sign * ($val * 0x20 + $frac); } #------------------------------------------------------------------------------ # Process a creative filter data # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessFilters($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $pos = $$dirInfo{DirStart}; my $dirLen = $$dirInfo{DirLen}; my $dataPos = $$dirInfo{DataPos} || 0; my $end = $pos + $dirLen; my $verbose = $et->Options('Verbose'); return 0 if $dirLen < 8; my $numFilters = Get32u($dataPt, $pos + 4); $verbose and $et->VerboseDir('Creative Filter', $numFilters); $pos += 8; my ($i, $j, $err); for ($i=0; $i<$numFilters; ++$i) { # read filter structure: # 4 bytes - filter number # 4 bytes - filter data length # 4 bytes - number of parameters: # | 4 bytes - parameter ID # | 4 bytes - parameter value count # | 4 bytes * count - parameter values (NC) $pos + 12 > $end and $err = "Truncated data for filter $i", last; my $fnum = Get32u($dataPt, $pos); # (is this an index or an ID?) my $size = Get32u($dataPt, $pos + 4); my $nparm = Get32u($dataPt, $pos + 8); my $nxt = $pos + 4 + $size; $nxt > $end and $err = "Invalid size ($size) for filter $i", last; $verbose and $et->VerboseDir("Filter $fnum", $nparm, $size); $pos += 12; for ($j=0; $j<$nparm; ++$j) { $pos + 12 > $end and $err = "Truncated data for filter $i param $j", last; my $tag = Get32u($dataPt, $pos); my $count = Get32u($dataPt, $pos + 4); $pos += 8; $pos + 4 * $count > $end and $err = "Truncated value for filter $i param $j", last; my $val = ReadValue($dataPt, $pos, 'int32s', $count, 4 * $count); $et->HandleTag($tagTablePtr, $tag, $val, DataPt => $dataPt, DataPos => $dataPos, Start => $pos, Size => 4 * $count, ); $pos += 4 * $count; } $pos = $nxt; # step to next filter } $err and $et->Warn($err, 1); return 1; } #------------------------------------------------------------------------------ # Write Canon maker notes # Inputs: 0) ExifTool object reference, 1) dirInfo ref, 2) tag table ref # Returns: data block (may be empty if no Exif data) or undef on error sub WriteCanon($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access to autoload this package my $dirData = Image::ExifTool::Exif::WriteExif($et, $dirInfo, $tagTablePtr); # add footer which is written by some Canon models (format of a TIFF header) if (defined $dirData and length $dirData and $$dirInfo{Fixup}) { $dirData .= GetByteOrder() . Set16u(42) . Set32u(0); $$dirInfo{Fixup}->AddFixup(length($dirData) - 4); } return $dirData; } #------------------------------------------------------------------------------ 1; # end __END__ =head1 NAME Image::ExifTool::Canon - Canon EXIF maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Canon maker notes in EXIF information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html> =item L<http://www.wonderland.org/crw/> =item L<http://www.cybercom.net/~dcoffin/dcraw/> =item L<http://homepage3.nifty.com/kamisaka/makernote/makernote_canon.htm> =item (...plus lots of testing with my 300D, A570IS and G12!) =back =head1 ACKNOWLEDGEMENTS Thanks Michael Rommel and Daniel Pittman for information they provided about the Digital Ixus and PowerShot S70 cameras, Juha Eskelinen and Emil Sit for figuring out the 20D and 30D FileNumber, Denny Priebe for figuring out a couple of 1D tags, and Michael Tiemann, Rainer Honle, Dave Nicholson, Chris Huebsch, Ger Vermeulen, Darryl Zurn, D.J. Cristi, Bogdan and Vesa Kivisto for decoding a number of new tags. Also thanks to everyone who made contributions to the LensType lookup list or the meanings of other tag values. =head1 SEE ALSO L<Image::ExifTool::TagNames/Canon Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/CanonCustom.pm����������������������������������������������000644 �000765 �000024 �00000230510 12643262553 022504� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: CanonCustom.pm # # Description: Read and write Canon Custom functions # # Revisions: 11/25/2003 - P. Harvey Created # # References: 1) http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html # 2) Christian Koller private communication (20D) # 3) Rainer Honle private communication (5D) # 4) David Pitcher private communication (1DmkIII firmware upgrade) #------------------------------------------------------------------------------ package Image::ExifTool::CanonCustom; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess); use Image::ExifTool::Canon; use Image::ExifTool::Exif; $VERSION = '1.52'; sub ProcessCanonCustom($$$); sub ProcessCanonCustom2($$$); sub WriteCanonCustom($$$); sub WriteCanonCustom2($$$); sub CheckCanonCustom($$$); sub ConvertPFn($); sub ConvertPFnInv($); my %onOff = ( 0 => 'On', 1 => 'Off' ); my %offOn = ( 0 => 'Off', 1 => 'On' ); my %disableEnable = ( 0 => 'Disable', 1 => 'Enable' ); my %enableDisable = ( 0 => 'Enable', 1 => 'Disable' ); my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv ); #------------------------------------------------------------------------------ # Custom functions for the 1D # CanonCustom (keys are custom function number) %Image::ExifTool::CanonCustom::Functions1D = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&ProcessCanonCustom, WRITE_PROC => \&WriteCanonCustom, CHECK_PROC => \&CheckCanonCustom, WRITABLE => 'int8u', NOTES => q{ These custom functions are used by all 1D models up to but not including the Mark III. }, 0 => { Name => 'FocusingScreen', PrintConv => { 0 => 'Ec-N, R', 1 => 'Ec-A,B,C,CII,CIII,D,H,I,L', }, }, 1 => { Name => 'FinderDisplayDuringExposure', PrintConv => \%offOn, }, 2 => { Name => 'ShutterReleaseNoCFCard', Description => 'Shutter Release W/O CF Card', PrintConv => { 0 => 'Yes', 1 => 'No', }, }, 3 => { Name => 'ISOSpeedExpansion', Description => 'ISO Speed Expansion', PrintConv => { 0 => 'No', 1 => 'Yes', }, }, 4 => { Name => 'ShutterAELButton', Description => 'Shutter Button/AEL Button', PrintConv => { 0 => 'AF/AE lock stop', 1 => 'AE lock/AF', 2 => 'AF/AF lock, No AE lock', 3 => 'AE/AF, No AE lock', }, }, 5 => { Name => 'ManualTv', Description => 'Manual Tv/Av For M', PrintConv => { 0 => 'Tv=Main/Av=Control', 1 => 'Tv=Control/Av=Main', 2 => 'Tv=Main/Av=Main w/o lens', 3 => 'Tv=Control/Av=Main w/o lens', }, }, 6 => { Name => 'ExposureLevelIncrements', PrintConv => { 0 => '1/3-stop set, 1/3-stop comp.', 1 => '1-stop set, 1/3-stop comp.', 2 => '1/2-stop set, 1/2-stop comp.', }, }, 7 => { Name => 'USMLensElectronicMF', PrintConv => { 0 => 'Turns on after one-shot AF', 1 => 'Turns off after one-shot AF', 2 => 'Always turned off', }, }, 8 => { Name => 'LCDPanels', Description => 'Top/Back LCD Panels', PrintConv => { 0 => 'Remain. shots/File no.', 1 => 'ISO/Remain. shots', 2 => 'ISO/File no.', 3 => 'Shots in folder/Remain. shots', }, }, 9 => { Name => 'AEBSequenceAutoCancel', Description => 'AEB Sequence/Auto Cancel', PrintConv => { 0 => '0,-,+/Enabled', 1 => '0,-,+/Disabled', 2 => '-,0,+/Enabled', 3 => '-,0,+/Disabled', }, }, 10 => { Name => 'AFPointIllumination', PrintConv => { 0 => 'On', 1 => 'Off', 2 => 'On without dimming', 3 => 'Brighter', }, }, 11 => { Name => 'AFPointSelection', PrintConv => { 0 => 'H=AF+Main/V=AF+Command', 1 => 'H=Comp+Main/V=Comp+Command', 2 => 'H=Command only/V=Assist+Main', 3 => 'H=FEL+Main/V=FEL+Command', }, }, 12 => { Name => 'MirrorLockup', PrintConv => \%disableEnable, }, 13 => { Name => 'AFPointSpotMetering', Description => 'No. AF Points/Spot Metering', PrintConv => { 0 => '45/Center AF point', 1 => '11/Active AF point', 2 => '11/Center AF point', 3 => '9/Active AF point', }, }, 14 => { Name => 'FillFlashAutoReduction', PrintConv => \%enableDisable, }, 15 => { Name => 'ShutterCurtainSync', PrintConv => { 0 => '1st-curtain sync', 1 => '2nd-curtain sync', }, }, 16 => { Name => 'SafetyShiftInAvOrTv', PrintConv => \%disableEnable, }, 17 => { Name => 'AFPointActivationArea', PrintConv => { 0 => 'Single AF point', 1 => 'Expanded (TTL. of 7 AF points)', 2 => 'Automatic expanded (max. 13)', }, }, 18 => { Name => 'SwitchToRegisteredAFPoint', PrintConv => { 0 => 'Assist + AF', 1 => 'Assist', 2 => 'Only while pressing assist', }, }, 19 => { Name => 'LensAFStopButton', PrintConv => { 0 => 'AF stop', 1 => 'AF start', 2 => 'AE lock while metering', 3 => 'AF point: M -> Auto / Auto -> Ctr.', 4 => 'AF mode: ONE SHOT <-> AI SERVO', 5 => 'IS start', }, }, 20 => { Name => 'AIServoTrackingSensitivity', PrintConv => { 0 => 'Standard', 1 => 'Slow', 2 => 'Moderately slow', 3 => 'Moderately fast', 4 => 'Fast', }, }, 21 => { Name => 'AIServoContinuousShooting', PrintConv => { 0 => 'Shooting not possible without focus', 1 => 'Shooting possible without focus', }, }, ); # Custom functions for the 5D (ref 3) %Image::ExifTool::CanonCustom::Functions5D = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&ProcessCanonCustom, WRITE_PROC => \&WriteCanonCustom, CHECK_PROC => \&CheckCanonCustom, WRITABLE => 'int8u', 0 => { Name => 'FocusingScreen', PrintConv => { 0 => 'Ee-A', 1 => 'Ee-D', 2 => 'Ee-S', }, }, 1 => { Name => 'SetFunctionWhenShooting', PrintConv => { 0 => 'Default (no function)', 1 => 'Change quality', 2 => 'Change Parameters', 3 => 'Menu display', 4 => 'Image replay', }, }, 2 => { Name => 'LongExposureNoiseReduction', PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'On', }, }, 3 => { Name => 'FlashSyncSpeedAv', PrintConv => { 0 => 'Auto', 1 => '1/200 Fixed', }, }, 4 => { Name => 'Shutter-AELock', PrintConv => { 0 => 'AF/AE lock', 1 => 'AE lock/AF', 2 => 'AF/AF lock, No AE lock', 3 => 'AE/AF, No AE lock', }, }, 5 => { Name => 'AFAssistBeam', PrintConv => { 0 => 'Emits', 1 => 'Does not emit', }, }, 6 => { Name => 'ExposureLevelIncrements', PrintConv => { 0 => '1/3 Stop', 1 => '1/2 Stop', }, }, 7 => { Name => 'FlashFiring', PrintConv => { 0 => 'Fires', 1 => 'Does not fire', }, }, 8 => { Name => 'ISOExpansion', PrintConv => \%offOn, }, 9 => { Name => 'AEBSequenceAutoCancel', Description => 'AEB Sequence/Auto Cancel', PrintConv => { 0 => '0,-,+/Enabled', 1 => '0,-,+/Disabled', 2 => '-,0,+/Enabled', 3 => '-,0,+/Disabled', }, }, 10 => { Name => 'SuperimposedDisplay', PrintConv => \%onOff, }, 11 => { Name => 'MenuButtonDisplayPosition', PrintConv => { 0 => 'Previous (top if power off)', 1 => 'Previous', 2 => 'Top', }, }, 12 => { Name => 'MirrorLockup', PrintConv => \%disableEnable, }, 13 => { Name => 'AFPointSelectionMethod', PrintConv => { 0 => 'Normal', 1 => 'Multi-controller direct', 2 => 'Quick Control Dial direct', }, }, 14 => { Name => 'ETTLII', Description => 'E-TTL II', PrintConv => { 0 => 'Evaluative', 1 => 'Average', }, }, 15 => { Name => 'ShutterCurtainSync', PrintConv => { 0 => '1st-curtain sync', 1 => '2nd-curtain sync', }, }, 16 => { Name => 'SafetyShiftInAvOrTv', PrintConv => \%disableEnable, }, 17 => { Name => 'AFPointActivationArea', PrintConv => { 0 => 'Standard', 1 => 'Expanded', }, }, 18 => { Name => 'LCDDisplayReturnToShoot', PrintConv => { 0 => 'With Shutter Button only', 1 => 'Also with * etc.', }, }, 19 => { Name => 'LensAFStopButton', PrintConv => { 0 => 'AF stop', 1 => 'AF start', 2 => 'AE lock while metering', 3 => 'AF point: M -> Auto / Auto -> Ctr.', 4 => 'ONE SHOT <-> AI SERVO', 5 => 'IS start', }, }, 20 => { Name => 'AddOriginalDecisionData', PrintConv => \%offOn, }, ); # Custom functions for 10D %Image::ExifTool::CanonCustom::Functions10D = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&ProcessCanonCustom, WRITE_PROC => \&WriteCanonCustom, CHECK_PROC => \&CheckCanonCustom, WRITABLE => 'int8u', 1 => { Name => 'SetButtonWhenShooting', PrintConv => { 0 => 'Normal (disabled)', 1 => 'Image quality', 2 => 'Change parameters', 3 => 'Menu display', 4 => 'Image playback', }, }, 2 => { Name => 'ShutterReleaseNoCFCard', Description => 'Shutter Release W/O CF Card', PrintConv => { 0 => 'Yes', 1 => 'No', }, }, 3 => { Name => 'FlashSyncSpeedAv', PrintConv => { 0 => 'Auto', 1 => '1/200 Fixed', }, }, 4 => { Name => 'Shutter-AELock', PrintConv => { 0 => 'AF/AE lock', 1 => 'AE lock/AF', 2 => 'AF/AF lock, No AE lock', 3 => 'AE/AF, No AE lock', }, }, 5 => { Name => 'AFAssist', Description => 'AF Assist/Flash Firing', PrintConv => { 0 => 'Emits/Fires', 1 => 'Does not emit/Fires', 2 => 'Only ext. flash emits/Fires', 3 => 'Emits/Does not fire', }, }, 6 => { Name => 'ExposureLevelIncrements', PrintConv => { 0 => '1/2 Stop', 1 => '1/3 Stop', }, }, 7 => { Name => 'AFPointRegistration', PrintConv => { 0 => 'Center', 1 => 'Bottom', 2 => 'Right', 3 => 'Extreme Right', 4 => 'Automatic', 5 => 'Extreme Left', 6 => 'Left', 7 => 'Top', }, }, 8 => { Name => 'RawAndJpgRecording', PrintConv => { 0 => 'RAW+Small/Normal', 1 => 'RAW+Small/Fine', 2 => 'RAW+Medium/Normal', 3 => 'RAW+Medium/Fine', 4 => 'RAW+Large/Normal', 5 => 'RAW+Large/Fine', }, }, 9 => { Name => 'AEBSequenceAutoCancel', Description => 'AEB Sequence/Auto Cancel', PrintConv => { 0 => '0,-,+/Enabled', 1 => '0,-,+/Disabled', 2 => '-,0,+/Enabled', 3 => '-,0,+/Disabled', }, }, 10 => { Name => 'SuperimposedDisplay', PrintConv => \%onOff, }, 11 => { Name => 'MenuButtonDisplayPosition', PrintConv => { 0 => 'Previous (top if power off)', 1 => 'Previous', 2 => 'Top', }, }, 12 => { Name => 'MirrorLockup', PrintConv => \%disableEnable, }, 13 => { Name => 'AssistButtonFunction', PrintConv => { 0 => 'Normal', 1 => 'Select Home Position', 2 => 'Select HP (while pressing)', 3 => 'Av+/- (AF point by QCD)', 4 => 'FE lock', }, }, 14 => { Name => 'FillFlashAutoReduction', PrintConv => \%enableDisable, }, 15 => { Name => 'ShutterCurtainSync', PrintConv => { 0 => '1st-curtain sync', 1 => '2nd-curtain sync', }, }, 16 => { Name => 'SafetyShiftInAvOrTv', PrintConv => \%disableEnable, }, 17 => { Name => 'LensAFStopButton', PrintConv => { 0 => 'AF stop', 1 => 'AF start', 2 => 'AE lock while metering', 3 => 'AF point: M->Auto/Auto->ctr', 4 => 'One Shot <-> AI servo', 5 => 'IS start', }, }, ); # Custom functions for the 20D (ref 2) %Image::ExifTool::CanonCustom::Functions20D = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&ProcessCanonCustom, WRITE_PROC => \&WriteCanonCustom, CHECK_PROC => \&CheckCanonCustom, WRITABLE => 'int8u', 0 => { Name => 'SetFunctionWhenShooting', PrintConv => { 0 => 'Default (no function)', 1 => 'Change quality', 2 => 'Change Parameters', 3 => 'Menu display', 4 => 'Image replay', }, }, 1 => { Name => 'LongExposureNoiseReduction', PrintConv => \%offOn, }, 2 => { Name => 'FlashSyncSpeedAv', PrintConv => { 0 => 'Auto', 1 => '1/250 Fixed', }, }, 3 => { Name => 'Shutter-AELock', PrintConv => { 0 => 'AF/AE lock', 1 => 'AE lock/AF', 2 => 'AF/AF lock, No AE lock', 3 => 'AE/AF, No AE lock', }, }, 4 => { Name => 'AFAssistBeam', PrintConv => { 0 => 'Emits', 1 => 'Does not emit', 2 => 'Only ext. flash emits', }, }, 5 => { Name => 'ExposureLevelIncrements', PrintConv => { 0 => '1/3 Stop', 1 => '1/2 Stop', }, }, 6 => { Name => 'FlashFiring', PrintConv => { 0 => 'Fires', 1 => 'Does not fire', }, }, 7 => { Name => 'ISOExpansion', PrintConv => \%offOn, }, 8 => { Name => 'AEBSequenceAutoCancel', Description => 'AEB Sequence/Auto Cancel', PrintConv => { 0 => '0,-,+/Enabled', 1 => '0,-,+/Disabled', 2 => '-,0,+/Enabled', 3 => '-,0,+/Disabled', }, }, 9 => { Name => 'SuperimposedDisplay', PrintConv => \%onOff, }, 10 => { Name => 'MenuButtonDisplayPosition', PrintConv => { 0 => 'Previous (top if power off)', 1 => 'Previous', 2 => 'Top', }, }, 11 => { Name => 'MirrorLockup', PrintConv => \%disableEnable, }, 12 => { Name => 'AFPointSelectionMethod', PrintConv => { 0 => 'Normal', 1 => 'Multi-controller direct', 2 => 'Quick Control Dial direct', }, }, 13 => { Name => 'ETTLII', Description => 'E-TTL II', PrintConv => { 0 => 'Evaluative', 1 => 'Average', }, }, 14 => { Name => 'ShutterCurtainSync', PrintConv => { 0 => '1st-curtain sync', 1 => '2nd-curtain sync', }, }, 15 => { Name => 'SafetyShiftInAvOrTv', PrintConv => \%disableEnable, }, 16 => { Name => 'LensAFStopButton', PrintConv => { 0 => 'AF stop', 1 => 'AF start', 2 => 'AE lock while metering', 3 => 'AF point: M -> Auto / Auto -> Ctr.', 4 => 'ONE SHOT <-> AI SERVO', 5 => 'IS start', }, }, 17 => { Name => 'AddOriginalDecisionData', PrintConv => \%offOn, }, ); # Custom functions for the 30D (PH) %Image::ExifTool::CanonCustom::Functions30D = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&ProcessCanonCustom, WRITE_PROC => \&WriteCanonCustom, CHECK_PROC => \&CheckCanonCustom, WRITABLE => 'int8u', 1 => { Name => 'SetFunctionWhenShooting', PrintConv => { 0 => 'Default (no function)', 1 => 'Change quality', 2 => 'Change Picture Style', 3 => 'Menu display', 4 => 'Image replay', }, }, 2 => { Name => 'LongExposureNoiseReduction', PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'On', }, }, 3 => { Name => 'FlashSyncSpeedAv', PrintConv => { 0 => 'Auto', 1 => '1/250 Fixed', }, }, 4 => { Name => 'Shutter-AELock', PrintConv => { 0 => 'AF/AE lock', 1 => 'AE lock/AF', 2 => 'AF/AF lock, No AE lock', 3 => 'AE/AF, No AE lock', }, }, 5 => { Name => 'AFAssistBeam', PrintConv => { 0 => 'Emits', 1 => 'Does not emit', 2 => 'Only ext. flash emits', }, }, 6 => { Name => 'ExposureLevelIncrements', PrintConv => { 0 => '1/3 Stop', 1 => '1/2 Stop', }, }, 7 => { Name => 'FlashFiring', PrintConv => { 0 => 'Fires', 1 => 'Does not fire', }, }, 8 => { Name => 'ISOExpansion', PrintConv => \%offOn, }, 9 => { Name => 'AEBSequenceAutoCancel', Description => 'AEB Sequence/Auto Cancel', PrintConv => { 0 => '0,-,+/Enabled', 1 => '0,-,+/Disabled', 2 => '-,0,+/Enabled', 3 => '-,0,+/Disabled', }, }, 10 => { Name => 'SuperimposedDisplay', PrintConv => \%onOff, }, 11 => { Name => 'MenuButtonDisplayPosition', PrintConv => { 0 => 'Previous (top if power off)', 1 => 'Previous', 2 => 'Top', }, }, 12 => { Name => 'MirrorLockup', PrintConv => \%disableEnable, }, 13 => { Name => 'AFPointSelectionMethod', PrintConv => { 0 => 'Normal', 1 => 'Multi-controller direct', 2 => 'Quick Control Dial direct', }, }, 14 => { Name => 'ETTLII', Description => 'E-TTL II', PrintConv => { 0 => 'Evaluative', 1 => 'Average', }, }, 15 => { Name => 'ShutterCurtainSync', PrintConv => { 0 => '1st-curtain sync', 1 => '2nd-curtain sync', }, }, 16 => { Name => 'SafetyShiftInAvOrTv', PrintConv => \%disableEnable, }, 17 => { Name => 'MagnifiedView', PrintConv => { 0 => 'Image playback only', 1 => 'Image review and playback', }, }, 18 => { Name => 'LensAFStopButton', PrintConv => { 0 => 'AF stop', 1 => 'AF start', 2 => 'AE lock while metering', 3 => 'AF point: M -> Auto / Auto -> Ctr.', 4 => 'ONE SHOT <-> AI SERVO', 5 => 'IS start', }, }, 19 => { Name => 'AddOriginalDecisionData', PrintConv => \%offOn, }, ); # Custom functions for the 350D (PH) %Image::ExifTool::CanonCustom::Functions350D = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&ProcessCanonCustom, WRITE_PROC => \&WriteCanonCustom, CHECK_PROC => \&CheckCanonCustom, WRITABLE => 'int8u', 0 => { Name => 'SetButtonCrossKeysFunc', PrintConv => { 0 => 'Normal', 1 => 'Set: Quality', 2 => 'Set: Parameter', 3 => 'Set: Playback', 4 => 'Cross keys: AF point select', }, }, 1 => { Name => 'LongExposureNoiseReduction', PrintConv => \%offOn, }, 2 => { Name => 'FlashSyncSpeedAv', PrintConv => { 0 => 'Auto', 1 => '1/200 Fixed', }, }, 3 => { Name => 'Shutter-AELock', PrintConv => { 0 => 'AF/AE lock', 1 => 'AE lock/AF', 2 => 'AF/AF lock, No AE lock', 3 => 'AE/AF, No AE lock', }, }, 4 => { Name => 'AFAssistBeam', PrintConv => { 0 => 'Emits', 1 => 'Does not emit', 2 => 'Only ext. flash emits', }, }, 5 => { Name => 'ExposureLevelIncrements', PrintConv => { 0 => '1/3 Stop', 1 => '1/2 Stop', }, }, 6 => { Name => 'MirrorLockup', PrintConv => \%disableEnable, }, 7 => { Name => 'ETTLII', Description => 'E-TTL II', PrintConv => { 0 => 'Evaluative', 1 => 'Average', }, }, 8 => { Name => 'ShutterCurtainSync', PrintConv => { 0 => '1st-curtain sync', 1 => '2nd-curtain sync', }, }, ); # Custom functions for the 400D (PH) %Image::ExifTool::CanonCustom::Functions400D = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&ProcessCanonCustom, WRITE_PROC => \&WriteCanonCustom, CHECK_PROC => \&CheckCanonCustom, WRITABLE => 'int8u', 0 => { Name => 'SetButtonCrossKeysFunc', PrintConv => { 0 => 'Set: Picture Style', 1 => 'Set: Quality', 2 => 'Set: Flash Exposure Comp', 3 => 'Set: Playback', 4 => 'Cross keys: AF point select', }, }, 1 => { Name => 'LongExposureNoiseReduction', PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'On', }, }, 2 => { Name => 'FlashSyncSpeedAv', PrintConv => { 0 => 'Auto', 1 => '1/200 Fixed', }, }, 3 => { Name => 'Shutter-AELock', PrintConv => { 0 => 'AF/AE lock', 1 => 'AE lock/AF', 2 => 'AF/AF lock, No AE lock', 3 => 'AE/AF, No AE lock', }, }, 4 => { Name => 'AFAssistBeam', PrintConv => { 0 => 'Emits', 1 => 'Does not emit', 2 => 'Only ext. flash emits', }, }, 5 => { Name => 'ExposureLevelIncrements', PrintConv => { 0 => '1/3 Stop', 1 => '1/2 Stop', }, }, 6 => { Name => 'MirrorLockup', PrintConv => \%disableEnable, }, 7 => { Name => 'ETTLII', Description => 'E-TTL II', PrintConv => { 0 => 'Evaluative', 1 => 'Average', }, }, 8 => { Name => 'ShutterCurtainSync', PrintConv => { 0 => '1st-curtain sync', 1 => '2nd-curtain sync', }, }, 9 => { Name => 'MagnifiedView', PrintConv => { 0 => 'Image playback only', 1 => 'Image review and playback', }, }, 10 => { Name => 'LCDDisplayAtPowerOn', PrintConv => { 0 => 'Display', 1 => 'Retain power off status', }, }, ); # Custom functions for the D30/D60 %Image::ExifTool::CanonCustom::FunctionsD30 = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&ProcessCanonCustom, WRITE_PROC => \&WriteCanonCustom, CHECK_PROC => \&CheckCanonCustom, NOTES => 'Custom functions for the EOS D30 and D60.', WRITABLE => 'int8u', 1 => { Name => 'LongExposureNoiseReduction', PrintConv => \%offOn, }, 2 => { Name => 'Shutter-AELock', PrintConv => { 0 => 'AF/AE lock', 1 => 'AE lock/AF', 2 => 'AF/AF lock', 3 => 'AE+release/AE+AF', }, }, 3 => { Name => 'MirrorLockup', PrintConv => \%disableEnable, }, 4 => { Name => 'ExposureLevelIncrements', PrintConv => { 0 => '1/2 Stop', 1 => '1/3 Stop', }, }, 5 => { Name => 'AFAssist', PrintConv => { 0 => 'Emits/Fires', 1 => 'Does not emit/Fires', 2 => 'Only ext. flash emits/Fires', 3 => 'Emits/Does not fire', }, }, 6 => { Name => 'FlashSyncSpeedAv', PrintConv => { 0 => 'Auto', 1 => '1/200 Fixed', }, }, 7 => { Name => 'AEBSequenceAutoCancel', Description => 'AEB Sequence/Auto Cancel', PrintConv => { 0 => '0,-,+/Enabled', 1 => '0,-,+/Disabled', 2 => '-,0,+/Enabled', 3 => '-,0,+/Disabled', }, }, 8 => { Name => 'ShutterCurtainSync', PrintConv => { 0 => '1st-curtain sync', 1 => '2nd-curtain sync', }, }, 9 => { Name => 'LensAFStopButton', PrintConv => { 0 => 'AF Stop', 1 => 'Operate AF', 2 => 'Lock AE and start timer', }, }, 10 => { Name => 'FillFlashAutoReduction', PrintConv => \%enableDisable, }, 11 => { Name => 'MenuButtonReturn', PrintConv => { 0 => 'Top', 1 => 'Previous (volatile)', 2 => 'Previous', }, }, 12 => { Name => 'SetButtonWhenShooting', PrintConv => { 0 => 'Default (no function)', 1 => 'Image quality', 2 => 'Change ISO speed', 3 => 'Change parameters', }, }, 13 => { Name => 'SensorCleaning', PrintConv => \%disableEnable, }, 14 => { Name => 'SuperimposedDisplay', PrintConv => \%onOff, }, 15 => { Name => 'ShutterReleaseNoCFCard', Description => 'Shutter Release W/O CF Card', PrintConv => { 0 => 'Yes', 1 => 'No', }, }, ); # Custom functions for unknown cameras %Image::ExifTool::CanonCustom::FuncsUnknown = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&ProcessCanonCustom, ); # 1D personal function settings (ref PH) %Image::ExifTool::CanonCustom::PersonalFuncs = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, NOTES => 'Personal function settings for the EOS-1D.', FORMAT => 'int16u', FIRST_ENTRY => 1, 1 => { Name => 'PF0CustomFuncRegistration', %convPFn }, 2 => { Name => 'PF1DisableShootingModes', %convPFn }, 3 => { Name => 'PF2DisableMeteringModes', %convPFn }, 4 => { Name => 'PF3ManualExposureMetering', %convPFn }, 5 => { Name => 'PF4ExposureTimeLimits', %convPFn }, 6 => { Name => 'PF5ApertureLimits', %convPFn }, 7 => { Name => 'PF6PresetShootingModes', %convPFn }, 8 => { Name => 'PF7BracketContinuousShoot', %convPFn }, 9 => { Name => 'PF8SetBracketShots', %convPFn }, 10 => { Name => 'PF9ChangeBracketSequence', %convPFn }, 11 => { Name => 'PF10RetainProgramShift', %convPFn }, #12 => { Name => 'PF11Unused', %convPFn }, #13 => { Name => 'PF12Unused', %convPFn }, 14 => { Name => 'PF13DrivePriority', %convPFn }, 15 => { Name => 'PF14DisableFocusSearch', %convPFn }, 16 => { Name => 'PF15DisableAFAssistBeam', %convPFn }, 17 => { Name => 'PF16AutoFocusPointShoot', %convPFn }, 18 => { Name => 'PF17DisableAFPointSel', %convPFn }, 19 => { Name => 'PF18EnableAutoAFPointSel', %convPFn }, 20 => { Name => 'PF19ContinuousShootSpeed', %convPFn }, 21 => { Name => 'PF20LimitContinousShots', %convPFn }, 22 => { Name => 'PF21EnableQuietOperation', %convPFn }, #23 => { Name => 'PF22Unused', %convPFn }, 24 => { Name => 'PF23SetTimerLengths', %convPFn }, 25 => { Name => 'PF24LightLCDDuringBulb', %convPFn }, 26 => { Name => 'PF25DefaultClearSettings', %convPFn }, 27 => { Name => 'PF26ShortenReleaseLag', %convPFn }, 28 => { Name => 'PF27ReverseDialRotation', %convPFn }, 29 => { Name => 'PF28NoQuickDialExpComp', %convPFn }, 30 => { Name => 'PF29QuickDialSwitchOff', %convPFn }, 31 => { Name => 'PF30EnlargementMode', %convPFn }, 32 => { Name => 'PF31OriginalDecisionData', %convPFn }, ); # 1D personal function values (ref PH) %Image::ExifTool::CanonCustom::PersonalFuncValues = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int16u', FIRST_ENTRY => 1, 1 => 'PF1Value', 2 => 'PF2Value', 3 => 'PF3Value', 4 => { Name => 'PF4ExposureTimeMin', RawConv => '$val > 0 ? $val : 0', ValueConv => 'exp(-Image::ExifTool::Canon::CanonEv($val*4)*log(2))*1000/8', ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(-log($val*8/1000)/log(2))/4', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 5 => { Name => 'PF4ExposureTimeMax', RawConv => '$val > 0 ? $val : 0', ValueConv => 'exp(-Image::ExifTool::Canon::CanonEv($val*4)*log(2))*1000/8', ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(-log($val*8/1000)/log(2))/4', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 6 => { Name => 'PF5ApertureMin', RawConv => '$val > 0 ? $val : 0', ValueConv => 'exp(Image::ExifTool::Canon::CanonEv($val*4-32)*log(2)/2)', ValueConvInv => '(Image::ExifTool::Canon::CanonEvInv(log($val)*2/log(2))+32)/4', PrintConv => 'sprintf("%.2g",$val)', PrintConvInv => '$val', }, 7 => { Name => 'PF5ApertureMax', RawConv => '$val > 0 ? $val : 0', ValueConv => 'exp(Image::ExifTool::Canon::CanonEv($val*4-32)*log(2)/2)', ValueConvInv => '(Image::ExifTool::Canon::CanonEvInv(log($val)*2/log(2))+32)/4', PrintConv => 'sprintf("%.2g",$val)', PrintConvInv => '$val', }, 8 => 'PF8BracketShots', 9 => 'PF19ShootingSpeedLow', 10 => 'PF19ShootingSpeedHigh', 11 => 'PF20MaxContinousShots', 12 => 'PF23ShutterButtonTime', 13 => 'PF23FELockTime', 14 => 'PF23PostReleaseTime', 15 => 'PF25AEMode', 16 => 'PF25MeteringMode', 17 => 'PF25DriveMode', 18 => 'PF25AFMode', 19 => 'PF25AFPointSel', 20 => 'PF25ImageSize', 21 => 'PF25WBMode', 22 => 'PF25Parameters', 23 => 'PF25ColorMatrix', 24 => 'PF27Value', ); # Custom functions used by the 1D Mark III and later models (ref PH) %Image::ExifTool::CanonCustom::Functions2 = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&ProcessCanonCustom2, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITE_PROC => \&WriteCanonCustom2, WRITABLE => 'int32s', NOTES => q{ Beginning with the EOS 1D Mark III, Canon finally created a set of custom function tags which are (reasonably) consistent across models. The EOS 1D Mark III has 57 custom function tags divided into four main groups: 1. Exposure (0x0101-0x010f), 2. Image (0x0201-0x0203), Flash Exposure (0x0304-0x0306) and Display (0x0407-0x0409), 3. Auto Focus (0x0501-0x050e) and Drive (0x060f-0x0611), and 4. Operation (0x0701-0x070a) and Others (0x080b-0x0810). The table below lists tags used by the EOS 1D Mark III, as well as newer tags and values added by later models. }, # grouped in 4 groups: # 1) Exposure 0x0101 => [ { Name => 'ExposureLevelIncrements', Condition => '$$self{Model} =~ /\b1Ds?\b/', Notes => '1DmkIII and 1DmkIV', PrintConv => { 0 => '1/3-stop set, 1/3-stop comp.', 1 => '1-stop set, 1/3-stop comp.', 2 => '1/2-stop set, 1/2-stop comp.', }, }, { Name => 'ExposureLevelIncrements', Notes => 'other models', PrintConv => { 0 => '1/3 Stop', 1 => '1/2 Stop', }, }, ], 0x0102 => { Name => 'ISOSpeedIncrements', PrintConv => { 0 => '1/3 Stop', 1 => '1 Stop', }, }, 0x0103 => [ { Name => 'ISOSpeedRange', Condition => '$$self{Model} =~ /\b1D/', Notes => '1DmkIII and 1DmkIV', Count => 3, # (this decoding may not be valid for CR2 images?) ValueConv => [ undef, # this may also be set to "H" (Hi6400) -- is this the -1 value I see? - PH '$val < 2 ? $val : ($val < 1000 ? exp(($val/8-9)*log(2))*100 : 0)', # (educated guess) # this may also be set to "L" (Lo50) -- is this the 1 value I see? - PH '$val < 2 ? $val : ($val < 1000 ? exp(($val/8-9)*log(2))*100 : 0)', # (educated guess) ], ValueConvInv => [ undef, '$val < 2 ? $val : int(8*(log($val/100)/log(2)+9) + 0.5)', '$val < 2 ? $val : int(8*(log($val/100)/log(2)+9) + 0.5)', ], PrintConv => [ \%disableEnable, 'sprintf("Max %.0f",$val)', 'sprintf("Min %.0f",$val)', ], PrintConvInv => [ undef, '$val=~/(-?[\d.]+)/ ? $1 : 0', '$val=~/(-?[\d.]+)/ ? $1 : 0', ], }, { Name => 'ISOExpansion', Notes => 'other models', PrintConv => \%offOn, }, ], 0x0104 => { Name => 'AEBAutoCancel', PrintConv => \%onOff, }, 0x0105 => { Name => 'AEBSequence', Notes => 'value of 2 not used by 40D, 50D, 60D, 5DmkII and 7D', PrintConv => { 0 => '0,-,+', 1 => '-,0,+', 2 => '+,0,-', }, }, 0x0106 => [{ Name => 'AEBShotCount', Condition => '$count == 1', Notes => 'one value for some models...', PrintConv => { 0 => '3 shots', 1 => '2 shots', 2 => '5 shots', 3 => '7 shots', }, },{ Name => 'AEBShotCount', Count => 2, Notes => 'two values for others', PrintConv => { '3 0' => '3 shots', '2 1' => '2 shots', '5 2' => '5 shots', '7 3' => '7 shots', }, }], 0x0107 => { Name => 'SpotMeterLinkToAFPoint', PrintConv => { 0 => 'Disable (use center AF point)', 1 => 'Enable (use active AF point)', }, }, 0x0108 => { Name => 'SafetyShift', Notes => 'value of 2 not used by 40D, 50D, 60D, 5DmkII and 7D', PrintConv => { 0 => 'Disable', 1 => 'Enable (Tv/Av)', 2 => 'Enable (ISO speed)', }, }, 0x0109 => { Name => 'UsableShootingModes', Count => 2, PrintConv => [ \%disableEnable, 'sprintf("Flags 0x%x",$val)', # (M, Tv, Av, P, Bulb) ], PrintConvInv => [ undef, '$val=~/0x([\dA-F]+)/i ? hex($1) : undef', ], }, 0x010a => { Name => 'UsableMeteringModes', Count => 2, PrintConv => [ \%disableEnable, 'sprintf("Flags 0x%x",$val)', # (evaluative,partial,spot,center-weighted average) ], PrintConvInv => [ undef, '$val=~/0x([\dA-F]+)/i ? hex($1) : undef', ], }, 0x010b => { Name => 'ExposureModeInManual', PrintConv => { 0 => 'Specified metering mode', 1 => 'Evaluative metering', 2 => 'Partial metering', 3 => 'Spot metering', 4 => 'Center-weighted average', }, }, 0x010c => { Name => 'ShutterSpeedRange', Count => 3, ValueConv => [ undef, 'exp(-($val/8-7)*log(2))', 'exp(-($val/8-7)*log(2))', ], ValueConvInv => [ undef, 'int(-8*(log($val)/log(2)-7) + 0.5)', 'int(-8*(log($val)/log(2)-7) + 0.5)', ], PrintConv => [ \%disableEnable, '"Hi " . Image::ExifTool::Exif::PrintExposureTime($val)', '"Lo " . Image::ExifTool::Exif::PrintExposureTime($val)', ], PrintConvInv => [ undef, '$val=~m{([\d./]+)} ? eval $1 : 0', '$val=~m{([\d./]+)} ? eval $1 : 0', ], }, 0x010d => { Name => 'ApertureRange', Count => 3, ValueConv => [ undef, 'exp(($val/8-1)*log(2)/2)', 'exp(($val/8-1)*log(2)/2)', ], ValueConvInv => [ undef, 'int(8*(log($val)*2/log(2)+1) + 0.5)', 'int(8*(log($val)*2/log(2)+1) + 0.5)', ], PrintConv => [ \%disableEnable, 'sprintf("Closed %.2g",$val)', 'sprintf("Open %.2g",$val)', ], PrintConvInv => [ undef, '$val=~/([\d.]+)/ ? $1 : 0', '$val=~/([\d.]+)/ ? $1 : 0', ], }, 0x010e => { Name => 'ApplyShootingMeteringMode', Count => 8, PrintConv => [ \%disableEnable ], }, 0x010f => [ { Name => 'FlashSyncSpeedAv', Condition => '$$self{Model} =~ /\b(40D|1Ds Mark III)\b/', Notes => '40D and 1Ds Mark III', PrintConv => { 0 => 'Auto', 1 => '1/250 Fixed', }, }, { Name => 'FlashSyncSpeedAv', Condition => '$$self{Model} =~ /\b(50D|60D|7D)\b/', Notes => '50D, 60D and 7D', PrintConv => { 0 => 'Auto', 1 => '1/250-1/60 Auto', 2 => '1/250 Fixed', }, }, { Name => 'FlashSyncSpeedAv', Condition => '$$self{Model} =~ /\b(450D|XSi|Kiss X2|1000D|XS|Kiss F)\b/', Notes => '450D and 1000D', PrintConv => { 0 => 'Auto', 1 => '1/200 Fixed', }, }, { Name => 'FlashSyncSpeedAv', Condition => '$$self{Model} =~ /\bEOS-1Ds? Mark III\b/', Notes => '1D Mark III and 1Ds Mark III', PrintConv => { 0 => 'Auto', 1 => '1/300 Fixed', }, }, { Name => 'FlashSyncSpeedAv', Condition => '$$self{Model} =~ /\bEOS-1D Mark IV\b/', Notes => '1D Mark IV', PrintConv => { 0 => 'Auto', 1 => '1/300-1/60 Auto', 2 => '1/300 Fixed', }, }, { Name => 'FlashSyncSpeedAv', Notes => '5D Mark II, 5D Mark III, 500D, 550D, 600D and 1100D', PrintConv => { 0 => 'Auto', 1 => '1/200-1/60 Auto', 2 => '1/200 Fixed', }, }, ], 0x0110 => { # new for 1DmkIV Name => 'AEMicroadjustment', Count => 3, PrintConv => [ \%disableEnable ], }, 0x0111 => { # new for 1DmkIV Name => 'FEMicroadjustment', Count => 3, PrintConv => [ \%disableEnable ], }, 0x0112 => { # (5DS) Name => 'SameExposureForNewAperture', PrintConv => { 0 => 'Disable', 1 => 'ISO Speed', 2 => 'Shutter Speed', }, }, #### 2a) Image 0x0201 => { Name => 'LongExposureNoiseReduction', PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'On', }, }, 0x0202 => [ { Name => 'HighISONoiseReduction', Condition => q{ $$self{Model} =~ /\b(50D|60D|5D Mark II|7D|500D|T1i|Kiss X3|550D|T2i|Kiss X4)\b/ or $$self{Model} =~ /\b(600D|T3i|Kiss X5|1100D|T3|Kiss X50)\b/ }, Notes => '50D, 60D, 500D, 550D, 600D, 1100D, 5DmkII and 7D', PrintConv => { 0 => 'Standard', 1 => 'Low', 2 => 'Strong', 3 => 'Off', }, }, { Name => 'HighISONoiseReduction', Notes => 'other models', PrintConv => \%offOn, }, ], 0x0203 => { Name => 'HighlightTonePriority', PrintConv => \%disableEnable }, 0x0204 => [ { Name => 'AutoLightingOptimizer', Condition => '$$self{Model} =~ /\b(50D|5D Mark II|500D|T1i|Kiss X3|1D Mark IV)\b/', Notes => '50D, 500D, 5DmkII and 1DmkIV', PrintConv => { 0 => 'Standard', 1 => 'Low', 2 => 'Strong', 3 => 'Disable', }, }, { Name => 'AutoLightingOptimizer', Notes => 'other models', PrintConv => \%enableDisable, }, ], # 0x0205 - Added in 5DmkII firmware update #### 2b) Flash exposure 0x0304 => { Name => 'ETTLII', Description => 'E-TTL II', PrintConv => { 0 => 'Evaluative', 1 => 'Average', }, }, 0x0305 => { Name => 'ShutterCurtainSync', PrintConv => { 0 => '1st-curtain sync', 1 => '2nd-curtain sync', }, }, 0x0306 => { Name => 'FlashFiring', PrintConv => { 0 => 'Fires', 1 => 'Does not fire', }, }, #### 2c) Display 0x0407 => { Name => 'ViewInfoDuringExposure', PrintConv => \%disableEnable, }, 0x0408 => { Name => 'LCDIlluminationDuringBulb', PrintConv => \%offOn, }, 0x0409 => [ { Name => 'InfoButtonWhenShooting', Condition => '$$self{Model} =~ /\b1Ds? Mark III\b/', Notes => '1D Mark III', PrintConv => { 0 => 'Displays camera settings', 1 => 'Displays shooting functions', }, }, { Name => 'InfoButtonWhenShooting', Notes => '1D Mark IV', PrintConv => { # reversed from earlier models. grr... 0 => 'Displays shooting functions', 1 => 'Displays camera settings', }, }, ], 0x040a => { # new for 5DmkIII Name => 'ViewfinderWarnings', PrintConv => { BITMASK => { # (NC) 0 => 'Monochrome', # (have seen for: 5DmkII, 6D) 1 => 'WB corrected', # (have seen for: 5DmkII, 6D) 2 => 'One-touch image quality', # (have seen for: 5DmkII; doesn't exist for 6D) 3 => 'ISO expansion', # (have seen for: 5DmkII) 4 => 'Spot metering', # (have seen for: 5DmkII, 6D) }}, }, 0x040b => { # new for 5DmkIII Name => 'LVShootingAreaDisplay', PrintConv => { 0 => 'Masked', 1 => 'Outlined', }, }, 0x040c => { # (7DmkII) Name => 'LVShootingAreaDisplay', PrintConv => { 0 => 'Masked', 1 => 'Outlined', }, }, #### 3a) Auto focus 0x0501 => { Name => 'USMLensElectronicMF', PrintConv => { 0 => 'Enable after one-shot AF', 1 => 'Disable after one-shot AF', 2 => 'Disable in AF mode', }, }, 0x0502 => { Name => 'AIServoTrackingSensitivity', PrintConv => { -2 => 'Slow', # (Locked on -2 for 6D) -1 => 'Medium Slow', # (Locked on -1 for 6D) 0 => 'Standard', 1 => 'Medium Fast', # (Responsive +1 for 6D) 2 => 'Fast', # (Responsive +2 for 6D) }, }, 0x0503 => { Name => 'AIServoImagePriority', PrintConv => { 0 => '1: AF, 2: Tracking', 1 => '1: AF, 2: Drive speed', 2 => '1: Release, 2: Drive speed', 3 => '1: Release, 2: Tracking', # 7D/1DmkIV }, }, 0x0504 => { Name => 'AIServoTrackingMethod', PrintConv => { 0 => 'Main focus point priority', 1 => 'Continuous AF track priority', }, }, 0x0505 => { Name => 'LensDriveNoAF', PrintConv => { 0 => 'Focus search on', 1 => 'Focus search off', }, }, 0x0506 => { Name => 'LensAFStopButton', Notes => 'value of 6 not used by 40D, 50D and 5DmkII', PrintConv => { 0 => 'AF stop', 1 => 'AF start', 2 => 'AE lock', 3 => 'AF point: M->Auto/Auto->ctr', 4 => 'One Shot <-> AI servo', 5 => 'IS start', 6 => 'Switch to registered AF point', 7 => 'Spot AF', # 1DmkIV }, }, 0x0507 => { Name => 'AFMicroadjustment', Count => 5, PrintConv => [ { 0 => 'Disable', 1 => 'Adjust all by same amount', 2 => 'Adjust by lens', }, # DECODE OTHER VALUES ], }, 0x0508 => [ { Name => 'AFPointAreaExpansion', Condition => '$$self{Model} =~ /\b5D Mark II\b/', Notes => '5D Mark II', PrintConv => { 0 => 'Disable', 1 => 'Enable', }, }, { Name => 'AFPointAreaExpansion', Condition => '$$self{Model} =~ /\b1Ds Mark III\b/', Notes => '1Ds Mark III', PrintConv => { 0 => 'Disable', 1 => 'Enable (left/right Assist AF points)', 2 => 'Enable (surrounding Assist AF points)', }, }, { Name => 'AFPointAreaExpansion', Notes => 'other models', PrintConv => { 0 => 'Disable', 1 => 'Left/right AF points', 2 => 'Surrounding AF points', 3 => 'All 45 points area', # 1DmkIV }, }, ], 0x0509 => [ { Name => 'SelectableAFPoint', Condition => '$$self{Model} =~ /\b1D Mark IV\b/', Notes => '1D Mark IV', PrintConv => { 0 => '45 points', 1 => '19 points', 2 => '11 points', 3 => 'Inner 9 points', 4 => 'Outer 9 points', }, }, { Name => 'SelectableAFPoint', Notes => 'other models', PrintConv => { 0 => '19 points', 1 => 'Inner 9 points', 2 => 'Outer 9 points', 3 => '19 Points, Multi-controller selectable', #4 4 => 'Inner 9 Points, Multi-controller selectable', #4 5 => 'Outer 9 Points, Multi-controller selectable', #4 }, }, ], 0x050a => [ { Name => 'SwitchToRegisteredAFPoint', Condition => '$$self{Model} =~ /\b1D Mark IV\b/', Notes => '1D Mark IV', PrintConv => { 0 => 'Disable', 1 => 'Switch with multi-controller', 2 => 'Only while AEL is pressed', }, }, { Name => 'SwitchToRegisteredAFPoint', Notes => 'other models', PrintConv => \%disableEnable, }, ], 0x050b => { Name => 'AFPointAutoSelection', PrintConv => { 0 => 'Control-direct:disable/Main:enable', 1 => 'Control-direct:disable/Main:disable', 2 => 'Control-direct:enable/Main:enable', }, }, 0x050c => [ { Name => 'AFPointDisplayDuringFocus', Condition => '$$self{Model} =~ /\b1D\b/', Notes => '1D models', PrintConv => { 0 => 'On', 1 => 'Off', 2 => 'On (when focus achieved)', }, }, { Name => 'AFPointDisplayDuringFocus', Notes => 'other models', # (7D, 70D, 750D, 760D) PrintConv => { 0 => 'Selected (constant)', 1 => 'All (constant)', 2 => 'Selected (pre-AF, focused)', 3 => 'Selected (focused)', 4 => 'Disable display', }, }, ], 0x050d => { Name => 'AFPointBrightness', PrintConv => { 0 => 'Normal', 1 => 'Brighter', }, }, 0x050e => [ { Name => 'AFAssistBeam', Condition => '$$self{Model} =~ /\b(1D Mark IV|6D)\b/', Notes => '1D Mark IV and 6D', PrintConv => { 0 => 'Emits', 1 => 'Does not emit', 2 => 'IR AF assist beam only', }, }, { Name => 'AFAssistBeam', Notes => 'other models; values 2-3 not used by 1DmkIII or 5DmkII, value 3 new for 7D', PrintConv => { 0 => 'Emits', 1 => 'Does not emit', 2 => 'Only ext. flash emits', 3 => 'IR AF assist beam only', # new for 7D }, }, ], 0x050f => [ # new for 40D { Name => 'AFPointSelectionMethod', Condition => '$$self{Model} !~ /\b60D\b/', Notes => '40D, 50D and 5DmkII', PrintConv => { 0 => 'Normal', 1 => 'Multi-controller direct', 2 => 'Quick Control Dial direct', }, }, { Name => 'AFPointSelectionMethod', Notes => '60D', PrintConv => { 0 => 'AF point button: Activate AF Sel; Rear dial: Select AF points', 1 => 'AF point button: Auto selection; Rear dial: Manual selection', }, }, ], 0x0510 => [ # new for 40D { Name => 'VFDisplayIllumination', # (7D quirk, or decoded incorrectly?) Condition => '$$self{Model} =~ /\b7D\b/', Notes => '7D', PrintConv => { 0 => 'Auto', 1 => 'Enable', 2 => 'Disable', }, }, { Name => 'SuperimposedDisplay', Notes => 'other models', PrintConv => \%onOff, }, ], 0x0511 => [ # new for 40D { Name => 'AFDuringLiveView', Condition => '$$self{Model} =~ /\b40D\b/', Notes => '40D', PrintConv => \%disableEnable, }, { Name => 'AFDuringLiveView', Notes => '450D and 1000D', PrintConv => { 0 => 'Disable', 1 => 'Quick mode', 2 => 'Live mode', }, }, ], 0x0512 => { # new for 7D Name => 'SelectAFAreaSelectMode', PrintConv => [ { 0 => 'Disable', 1 => 'Enable', 2 => 'Register', 3 => 'Select AF-modes', }, 'sprintf("Flags 0x%x",$val)', # (70D=Manual 1pt,Manual zone,Auto 19pt) ], PrintConvInv => [ undef, '$val=~/0x([\dA-F]+)/i ? hex($1) : undef', ], }, 0x0513 => { # new for 7D Name => 'ManualAFPointSelectPattern', PrintConv => { 0 => 'Stops at AF area edges', 1 => 'Continuous', }, }, 0x0514 => { # new for 7D Name => 'DisplayAllAFPoints', PrintConv => \%enableDisable, }, 0x0515 => { # new for 7D Name => 'FocusDisplayAIServoAndMF', PrintConv => \%enableDisable, }, 0x0516 => { # new for 7D and 1DmkIV Name => 'OrientationLinkedAFPoint', PrintConv => { 0 => 'Same for vertical and horizontal', 1 => 'Select different AF points', }, }, 0x0517 => { # new for 1DmkIV Name => 'MultiControllerWhileMetering', PrintConv => { 0 => 'Off', 1 => 'AF point selection', }, }, 0x0518 => { # new for 6D Name => 'AccelerationTracking', }, 0x0519 => { # new for 6D Name => 'AIServoFirstImagePriority', PrintConv => { # (NC) -1 => 'Release priority', 0 => 'Equal priority', 1 => 'Focus priority', }, }, 0x051a => { # new for 6D Name => 'AIServoSecondImagePriority', PrintConv => { # (NC) -1 => 'Shooting speed priority', 0 => 'Equal priority', 1 => 'Focus priority', }, }, 0x051b => { # (70D) Name => 'AFAreaSelectMethod', PrintConv => { 0 => 'AF area selection button', 1 => 'Main dial', }, }, 0x051c => { # (750D) Name => 'AutoAFPointColorTracking', PrintConv => { 0 => 'On-Shot AF only', 1 => 'Disable', }, }, 0x051d => { # (750D/760D) Name => 'VFDisplayIllumination', PrintConv => { 0 => 'Auto', 1 => 'Enable', 2 => 'Disable', }, }, #### 3b) Drive 0x060f => { Name => 'MirrorLockup', Notes => 'value of 2 not used by some models', PrintConv => { 0 => 'Disable', 1 => 'Enable', 2 => 'Enable: Down with Set', }, }, 0x0610 => { Name => 'ContinuousShootingSpeed', Count => 3, PrintConv => [ \%disableEnable, '"Hi $val"', '"Lo $val"', ], PrintConvInv => [ undef, '$val=~/(\d+)/ ? $1 : 0', '$val=~/(\d+)/ ? $1 : 0', ], }, 0x0611 => { Name => 'ContinuousShotLimit', Count => 2, PrintConv => [ \%disableEnable, '"$val shots"', ], PrintConvInv => [ undef, '$val=~/(\d+)/ ? $1 : 0', ], }, 0x0612 => { # (1DX) Name => 'RestrictDriveModes', Count => 2, PrintConv => [ \%disableEnable, 'sprintf("Flags 0x%x",$val)', # (Single,Cont Hi,Cont Lo,Timer 10,Timer 2,Silent,Super Hi) ], PrintConvInv => [ undef, '$val=~/0x([\dA-F]+)/i ? hex($1) : undef', ], }, #### 4a) Operation 0x0701 => [ { Name => 'Shutter-AELock', Condition => q{ $$self{Model} =~ /\b(1000D|XS|Kiss F|500D|T1i|Kiss X3|550D|T2i|Kiss X4)\b/ or $$self{Model} =~ /\b(600D|T3i|Kiss X5|1100D|T3|Kiss X50)\b/ }, Notes => '500D, 550D, 600D, 1000D and 1100D', PrintConv => { 0 => 'AF/AE lock', 1 => 'AE lock/AF', 2 => 'AF/AF lock, No AE lock', 3 => 'AE/AF, No AE lock', }, }, { Name => 'AFAndMeteringButtons', Condition => '$$self{Model} =~ /\b60D\b/', Notes => '60D', PrintConv => { 0 => 'Metering start', 1 => 'Metering + AF start', 2 => 'AE lock', 3 => 'AF stop', 4 => 'No function', }, }, { Name => 'ShutterButtonAFOnButton', Notes => 'other models', PrintConv => { 0 => 'Metering + AF start', 1 => 'Metering + AF start/AF stop', 2 => 'Metering start/Meter + AF start', 3 => 'AE lock/Metering + AF start', 4 => 'Metering + AF start/disable', }, }, ], 0x0702 => { Name => 'AFOnAELockButtonSwitch', PrintConv => \%disableEnable, }, 0x0703 => { Name => 'QuickControlDialInMeter', PrintConv => { 0 => 'Exposure comp/Aperture', 1 => 'AF point selection', 2 => 'ISO speed', 3 => 'AF point selection swapped with Exposure comp', #4 4 => 'ISO speed swapped with Exposure comp', #4 }, }, 0x0704 => [ { Name => 'SetButtonWhenShooting', Condition => '$$self{Model} =~ /\b(40D|50D|5D Mark II)\b/', Notes => '40D, 50D and 5DmkII; value of 5 is new for 50D, and 6 is new for 5DmkII', PrintConv => { 0 => 'Normal (disabled)', 1 => 'Image quality', 2 => 'Picture style', 3 => 'Menu display', 4 => 'Image playback', 5 => 'Quick control screen', #50D 6 => 'Record movie (Live View)', #5DmkII }, }, { Name => 'SetButtonWhenShooting', Condition => '$$self{Model} =~ /\b60D\b/', Notes => '60D', PrintConv => { 0 => 'Normal (disabled)', 1 => 'Image quality', 2 => 'Picture style', 3 => 'White balance', 4 => 'Flash exposure compensation', 5 => 'Viewfinder leveling gauge', }, }, { Name => 'SetButtonWhenShooting', Condition => '$$self{Model} =~ /\b(450D|XSi|Kiss X2|550D|T2i|Kiss X4|600D|T3i|Kiss X5)\b/', Notes => '450D, 550D and 600D; value of 5 is new for 550D', PrintConv => { 0 => 'Normal (disabled)', 1 => 'Image quality', 2 => 'Flash exposure compensation', 3 => 'LCD monitor On/Off', 4 => 'Menu display', 5 => 'ISO speed', }, }, { Name => 'SetButtonWhenShooting', Condition => '$$self{Model} =~ /\b(1100D|T3|Kiss X50)\b/', Notes => '1100D', PrintConv => { 0 => 'Normal (disabled)', 1 => 'Image quality', 2 => 'Flash exposure compensation', 3 => 'LCD monitor On/Off', 4 => 'Menu display', 5 => 'Depth-of-field preview', }, }, { Name => 'SetButtonWhenShooting', Condition => '$$self{Model} =~ /\b(1000D|XS|Kiss F)\b/', Notes => '1000D', PrintConv => { 0 => 'LCD monitor On/Off', 1 => 'Image quality', 2 => 'Flash exposure compensation', 3 => 'Menu display', 4 => 'Disabled', }, }, { Name => 'SetButtonWhenShooting', Condition => '$$self{Model} =~ /\b(500D|T1i|Kiss X3)\b/', Notes => '500D', PrintConv => { 0 => 'Quick control screen', 1 => 'Image quality', 2 => 'Flash exposure compensation', 3 => 'LCD monitor On/Off', 4 => 'Menu display', 5 => 'Disabled', }, }, { Name => 'SetButtonWhenShooting', Notes => '1DmkIII and 1DmkIV', PrintConv => { 0 => 'Normal (disabled)', 1 => 'White balance', 2 => 'Image size', 3 => 'ISO speed', 4 => 'Picture style', 5 => 'Record func. + media/folder', 6 => 'Menu display', 7 => 'Image playback', }, }, ], 0x0705 => { Name => 'ManualTv', Description => 'Manual Tv/Av For M', PrintConv => { 0 => 'Tv=Main/Av=Control', 1 => 'Tv=Control/Av=Main', }, }, 0x0706 => { Name => 'DialDirectionTvAv', PrintConv => { 0 => 'Normal', 1 => 'Reversed', }, }, 0x0707 => { Name => 'AvSettingWithoutLens', PrintConv => \%disableEnable, }, 0x0708 => { Name => 'WBMediaImageSizeSetting', PrintConv => { 0 => 'Rear LCD panel', 1 => 'LCD monitor', 2 => 'Off (disable button)', # (1DX) }, }, 0x0709 => { Name => 'LockMicrophoneButton', PrintConv => [{ # called "sound" in 1DmkIII manual, and "memo" in 1DmkIV manual 0 => 'Protect (hold:record memo)', 1 => 'Record memo (protect:disable)', 2 => 'Play memo (hold:record memo)', # new with 1DmkIV 3 => 'Rating (protect/memo:disable)', # new with 1DX }], # (not sure what the 2nd number is -- new for 1DX. Seen a value of 31. # Memo quality may be set to 48kHz or 8kHz through another option that # doesn't seem to be stored separately -- is this it?) }, 0x070a => { Name => 'ButtonFunctionControlOff', PrintConv => { 0 => 'Normal (enable)', 1 => 'Disable main, Control, Multi-control', }, }, 0x070b => { # 50D (also, 5DmkII writes this but it isn't in user guide) Name => 'AssignFuncButton', PrintConv => { 0 => 'LCD brightness', 1 => 'Image quality', 2 => 'Exposure comp./AEB setting', 3 => 'Image jump with main dial', 4 => 'Live view function settings', }, }, 0x070c => { # new for 7D Name => 'CustomControls', # (too much stuff to decode) }, 0x070d => { # new for 1DmkIV Name => 'StartMovieShooting', PrintConv => { 0 => 'Default (from LV)', 1 => 'Quick start (FEL button)', }, }, 0x070e => { # new for 1100D Name => 'FlashButtonFunction', PrintConv => { 0 => 'Raise built-in flash', 1 => 'ISO speed', }, }, 0x070f => { # new for 5DmkIII Name => 'MultiFunctionLock', PrintConv => [ { # (NC) 0 => 'Off', 1 => 'On', # "On (main dial)" for 750D/760D? 2 => 'On (quick control dial)', # (NC) 3 => 'On (main dial and quick control dial)', # (NC) }, { BITMASK => { # (NC) 0 => 'Main dial', 1 => 'Quick control dial', 2 => 'Multi-controller', }}, ], }, 0x710 => { # (M) Name => 'TrashButtonFunction', PrintConv => { 0 => 'Normal (set center AF point)', 1 => 'Depth-of-field preview', }, }, 0x711 => { # (M) Name => 'ShutterReleaseWithoutLens', PrintConv => \%disableEnable, }, #### 4b) Others 0x080b => [ { Name => 'FocusingScreen', Condition => '$$self{Model} =~ /\b(40D|50D|60D)\b/', Notes => '40D, 50D and 60D', PrintConv => { 0 => 'Ef-A', 1 => 'Ef-D', 2 => 'Ef-S', }, }, { Name => 'FocusingScreen', Condition => '$$self{Model} =~ /\b5D Mark II\b/', Notes => '5D Mark II', PrintConv => { 0 => 'Eg-A', 1 => 'Eg-D', 2 => 'Eg-S', }, }, { Name => 'FocusingScreen', Condition => '$$self{Model} =~ /\b6D\b/', Notes => '6D', PrintConv => { 0 => 'Eg-A II', 1 => 'Eg-D', 2 => 'Eg-S', }, }, { Name => 'FocusingScreen', Condition => '$$self{Model} =~ /\b7D Mark II\b/', Notes => '7D Mark II', PrintConv => { 0 => 'Eh-A', 1 => 'Eh-S', }, }, { Name => 'FocusingScreen', Condition => '$$self{Model} =~ /\b1D X\b/', Notes => '1DX', PrintConv => { 0 => 'Ec-CV', 1 => 'Ec-A,B,D,H,I,L', }, }, { Name => 'FocusingScreen', Notes => '1DmkIII, 1DSmkIII and 1DmkIV', PrintConv => { 0 => 'Ec-CIV', 1 => 'Ec-A,B,C,CII,CIII,D,H,I,L', 2 => 'Ec-S', 3 => 'Ec-N,R', }, }, ], 0x080c => { Name => 'TimerLength', Count => 4, PrintConv => [ \%disableEnable, '"6 s: $val"', '"16 s: $val"', '"After release: $val"', ], PrintConvInv => [ undef, '$val=~/(\d+)$/ ? $1 : 0', '$val=~/(\d+)$/ ? $1 : 0', '$val=~/(\d+)$/ ? $1 : 0', ], }, 0x080d => { Name => 'ShortReleaseTimeLag', PrintConv => \%disableEnable, }, 0x080e => { Name => 'AddAspectRatioInfo', PrintConv => { 0 => 'Off', 1 => '6:6', 2 => '3:4', 3 => '4:5', 4 => '6:7', 5 => '10:12', 6 => '5:7', }, }, 0x080f => { Name => 'AddOriginalDecisionData', # called ("image verification" in 1DmkIV manual) PrintConv => \%offOn, }, 0x0810 => { Name => 'LiveViewExposureSimulation', PrintConv => { 0 => 'Disable (LCD auto adjust)', 1 => 'Enable (simulates exposure)', }, }, 0x0811 => { Name => 'LCDDisplayAtPowerOn', PrintConv => { 0 => 'Display', 1 => 'Retain power off status', }, }, 0x0812 => { # (1DX) Name => 'MemoAudioQuality', PrintConv => { 0 => 'High (48 kHz)', 1 => 'Low (8 kHz)', }, }, 0x0813 => { # (5DmkIII) Name => 'DefaultEraseOption', PrintConv => { 0 => 'Cancel selected', 1 => 'Erase selected', }, }, 0x0814 => { # (5DS) Name => 'RetractLensOnPowerOff', PrintConv => \%enableDisable, }, ); #------------------------------------------------------------------------------ # Conversion routines # Inputs: 0) value to convert sub ConvertPfn($) { my $val = shift; return $val ? ($val==1 ? 'On' : "On ($val)") : "Off"; } sub ConvertPfnInv($) { my $val = shift; return $1 if $val =~ /(\d+)/; return 1 if $val =~ /on/i; return 0 if $val =~ /off/i; return undef; } #------------------------------------------------------------------------------ # Read/Write Canon custom 2 directory (new for 1D Mark III) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessCanonCustom2($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $offset = $$dirInfo{DirStart}; my $size = $$dirInfo{DirLen}; my $write = $$dirInfo{Write}; my $verbose = $et->Options('Verbose'); my $newTags; return 0 if $size < 2; # first entry in array must be the size my $len = Get16u($dataPt, $offset); unless ($len == $size and $len >= 8) { $et->Warn('Invalid CanonCustom2 data'); return 0; } # get group count my $count = Get32u($dataPt, $offset + 4); if ($write) { $newTags = $et->GetNewTagInfoHash($tagTablePtr); $et->VPrint(0, " Rewriting CanonCustom2\n"); } elsif ($verbose) { $et->VerboseDir('CanonCustom2', $count); } my $pos = $offset + 8; my $end = $offset + $size; # loop through group records for (; $pos<$end; ) { last if $pos + 12 > $end; my $recNum = Get32u($dataPt, $pos); my $recLen = Get32u($dataPt, $pos + 4); my $recCount = Get32u($dataPt, $pos + 8); last if $recLen < 8; # must be at least 8 bytes for recNum and recLen $pos += 12; my $recPos = $pos; my $recEnd = $pos + $recLen - 8; if ($recEnd > $end) { $et->Warn('Corrupted CanonCustom2 group'); return 0; } if ($verbose and not $write) { $et->VerboseDir("CanonCustom2 group $recNum", $recCount); } my ($i, $num, $tag); for ($i=0; $recPos + 8 < $recEnd; ++$i, $recPos+=4*$num) { $tag = Get32u($dataPt, $recPos); $num = Get32u($dataPt, $recPos + 4); $recPos += 8; last if $recPos + $num * 4 > $recEnd; my $val = ReadValue($dataPt, $recPos, 'int32s', $num, $num * 4); if ($write) { # write new value my $tagInfo = $$newTags{$tag}; next unless $$newTags{$tag}; $tagInfo = $et->GetTagInfo($tagTablePtr, $tag, \$val, undef, $num) or next; my $nvHash = $et->GetNewValueHash($tagInfo) or next; next unless $et->IsOverwriting($nvHash, $val); my $newVal = $et->GetNewValue($nvHash); next unless defined $newVal; # can't delete from a custom table WriteValue($newVal, 'int32s', $num, $dataPt, $recPos); $et->VerboseValue("- CanonCustom:$$tagInfo{Name}", $val); $et->VerboseValue("+ CanonCustom:$$tagInfo{Name}", $newVal); ++$$et{CHANGED}; } else { # save extracted tag my $oldInfo = $$tagTablePtr{$tag}; $et->HandleTag($tagTablePtr, $tag, $val, Index => $i, Format => 'int32u', Count => $num, Size => $num * 4, ); my $tagInfo = $$tagTablePtr{$tag}; # generate properly formatted description if we just added the tag if ($tagInfo and not $oldInfo) { ($$tagInfo{Description} = $$tagInfo{Name}) =~ tr/_/ /; $$tagInfo{Description} =~ s/CanonCustom Functions/Canon Custom Functions /; } } } $pos = $recEnd; } if ($pos != $end) { $et->Warn('Possibly corrupted CanonCustom2 data'); return 0; } return 1; } #------------------------------------------------------------------------------ # Write Canon custom 2 data # Inputs: 0) ExifTool object reference, 1) dirInfo hash ref, 2) tag table ref # Returns: New custom data block or undefined on error sub WriteCanonCustom2($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access to autoload this package my $dataPt = $$dirInfo{DataPt}; # edit a copy of the custom function 2 data my $buff = substr($$dataPt, $$dirInfo{DirStart}, $$dirInfo{DirLen}); my %dirInfo = ( DataPt => \$buff, DirStart => 0, DirLen => $$dirInfo{DirLen}, Write => 1, ); ProcessCanonCustom2($et, \%dirInfo, $tagTablePtr) or return undef; return $buff; } #------------------------------------------------------------------------------ # Process Canon custom directory # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessCanonCustom($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $offset = $$dirInfo{DirStart}; my $size = $$dirInfo{DirLen}; my $verbose = $et->Options('Verbose'); # first entry in array must be the size my $len = Get16u($dataPt,$offset); unless ($len == $size or ($$et{Model}=~/\bD60\b/ and $len+2 == $size)) { $et->Warn("Invalid CanonCustom data"); return 0; } $verbose and $et->VerboseDir('CanonCustom', $size/2-1); my $pos; for ($pos=2; $pos<$size; $pos+=2) { # ($pos is position within custom directory) my $val = Get16u($dataPt,$offset+$pos); my $tag = ($val >> 8); $val = ($val & 0xff); $et->HandleTag($tagTablePtr, $tag, $val, Index => $pos/2-1, Format => 'int8u', Count => 1, Size => 1, ); } return 1; } #------------------------------------------------------------------------------ # Check new value for Canon custom data block # Inputs: 0) ExifTool object reference, 1) tagInfo hash ref, 2) raw value ref # Returns: error string or undef (and may modify value) on success sub CheckCanonCustom($$$) { my ($et, $tagInfo, $valPtr) = @_; return Image::ExifTool::CheckValue($valPtr, 'int8u'); } #------------------------------------------------------------------------------ # Write Canon custom data # Inputs: 0) ExifTool object reference, 1) dirInfo hash ref, 2) tag table ref # Returns: New custom data block or undefined on error sub WriteCanonCustom($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access to autoload this package my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || length($$dataPt) - $dirStart; my $dirName = $$dirInfo{DirName}; my $newData = substr($$dataPt, $dirStart, $dirLen) or return undef; $dataPt = \$newData; # first entry in array must be the size my $len = Get16u($dataPt, 0); unless ($len == $dirLen or ($$et{Model}=~/\bD60\b/ and $len+2 == $dirLen)) { $et->Warn("Invalid CanonCustom data"); return undef; } my $newTags = $et->GetNewTagInfoHash($tagTablePtr); my $pos; for ($pos=2; $pos<$dirLen; $pos+=2) { my $val = Get16u($dataPt, $pos); my $tag = ($val >> 8); my $tagInfo = $$newTags{$tag}; next unless $tagInfo; my $nvHash = $et->GetNewValueHash($tagInfo); $val = ($val & 0xff); next unless $et->IsOverwriting($nvHash, $val); my $newVal = $et->GetNewValue($nvHash); next unless defined $newVal; # can't delete from a custom table Set16u(($newVal & 0xff) + ($tag << 8), $dataPt, $pos); $et->VerboseValue("- $dirName:$$tagInfo{Name}", $val); $et->VerboseValue("+ $dirName:$$tagInfo{Name}", $newVal); ++$$et{CHANGED}; } return $newData; } 1; # end __END__ =head1 NAME Image::ExifTool::CanonCustom - Read and Write Canon custom functions =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION The Canon custom functions meta information is very specific to the camera model, and is found in both the EXIF maker notes and in the Canon RAW files. This module contains the definitions necessary for Image::ExifTool to read this information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html> =back =head1 ACKNOWLEDGEMENTS Thanks to Christian Koller for his work in decoding the 20D custom functions, Rainer Honle for decoding the 5D custom functions and David Pitcher for adding a few undocumented 1DmkIII settings. =head1 SEE ALSO L<Image::ExifTool::TagNames/Canon Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/CanonRaw.pm�������������������������������������������������000644 �000765 �000024 �00000073250 12642461267 021773� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: CanonRaw.pm # # Description: Read Canon RAW (CRW) meta information # # Revisions: 11/25/2003 - P. Harvey Created # 12/02/2003 - P. Harvey Completely reworked and figured out many # more tags # # References: 1) http://www.cybercom.net/~dcoffin/dcraw/ # 2) http://www.wonderland.org/crw/ # 3) http://xyrion.org/ciff/CIFFspecV1R04.pdf # 4) Dave Nicholson private communication (PowerShot S30) #------------------------------------------------------------------------------ package Image::ExifTool::CanonRaw; use strict; use vars qw($VERSION $AUTOLOAD %crwTagFormat); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; use Image::ExifTool::Canon; $VERSION = '1.58'; sub WriteCRW($$); sub ProcessCanonRaw($$$); sub WriteCanonRaw($$$); sub CheckCanonRaw($$$); sub InitMakerNotes($); sub SaveMakerNotes($); sub BuildMakerNotes($$$$$$); # formats for CRW tag types (($tag >> 8) & 0x38) # Note: don't define format for undefined types %crwTagFormat = ( 0x00 => 'int8u', 0x08 => 'string', 0x10 => 'int16u', 0x18 => 'int32u', # 0x20 => 'undef', # 0x28 => 'undef', # 0x30 => 'undef', ); # Canon raw file tag table # Note: Tag ID's have upper 2 bits set to zero, since these 2 bits # just specify the location of the information %Image::ExifTool::CanonRaw::Main = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&ProcessCanonRaw, WRITE_PROC => \&WriteCanonRaw, CHECK_PROC => \&CheckCanonRaw, WRITABLE => 1, 0x0000 => { Name => 'NullRecord', Writable => 'undef' }, #3 0x0001 => { #3 Name => 'FreeBytes', Format => 'undef', Binary => 1, }, 0x0032 => { Name => 'CanonColorInfo1', Writable => 0 }, 0x0805 => [ # this tag is found in more than one directory... { Condition => '$self->{DIR_NAME} eq "ImageDescription"', Name => 'CanonFileDescription', Writable => 'string[32]', }, { Name => 'UserComment', Writable => 'string[256]', }, ], 0x080a => { Name => 'CanonRawMakeModel', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::CanonRaw::MakeModel' }, }, 0x080b => { Name => 'CanonFirmwareVersion', Writable => 'string[32]' }, 0x080c => { Name => 'ComponentVersion', Writable => 'string' }, #3 0x080d => { Name => 'ROMOperationMode', Writable => 'string[8]' }, #3 0x0810 => { Name => 'OwnerName', Writable => 'string[32]' }, 0x0815 => { Name => 'CanonImageType', Writable => 'string[32]' }, 0x0816 => { Name => 'OriginalFileName', Writable => 'string[32]' }, 0x0817 => { Name => 'ThumbnailFileName', Writable => 'string[32]' }, 0x100a => { #3 Name => 'TargetImageType', Writable => 'int16u', PrintConv => { 0 => 'Real-world Subject', 1 => 'Written Document', }, }, 0x1010 => { #3 Name => 'ShutterReleaseMethod', Writable => 'int16u', PrintConv => { 0 => 'Single Shot', 2 => 'Continuous Shooting', }, }, 0x1011 => { #3 Name => 'ShutterReleaseTiming', Writable => 'int16u', PrintConv => { 0 => 'Priority on shutter', 1 => 'Priority on focus', }, }, 0x1016 => { Name => 'ReleaseSetting', Writable => 'int16u' }, #3 0x101c => { Name => 'BaseISO', Writable => 'int16u' }, #3 0x1028=> { #PH Name => 'CanonFlashInfo', Writable => 'int16u', Count => 4, Unknown => 1, }, 0x1029 => { Name => 'CanonFocalLength', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::Canon::FocalLength' }, }, 0x102a => { Name => 'CanonShotInfo', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::Canon::ShotInfo' }, }, 0x102c => { Name => 'CanonColorInfo2', Writable => 0, # for the S30, the following information has been decoded: (ref 4) # offset 66: int32u - shutter half press time in ms # offset 70: int32u - image capture time in ms # offset 74: int16u - custom white balance flag (0=Off, 512=On) }, 0x102d => { Name => 'CanonCameraSettings', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraSettings' }, }, 0x1030 => { #4 Name => 'WhiteSample', Writable => 0, SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonRaw::WhiteSample', }, }, 0x1031 => { Name => 'SensorInfo', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::Canon::SensorInfo' }, }, # this tag has only be verified for the 10D in CRW files, but the D30 and D60 # also produce CRW images and have CustomFunction information in their JPEG's 0x1033 => [ { Name => 'CustomFunctions10D', Condition => '$self->{Model} =~ /EOS 10D/', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::Functions10D', }, }, { Name => 'CustomFunctionsD30', Condition => '$self->{Model} =~ /EOS D30\b/', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::FunctionsD30', }, }, { Name => 'CustomFunctionsD60', Condition => '$self->{Model} =~ /EOS D60\b/', SubDirectory => { # the stored size in the D60 apparently doesn't include the size word: Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size-2,$size)', # (D60 custom functions are basically the same as D30) TagTable => 'Image::ExifTool::CanonCustom::FunctionsD30', }, }, { Name => 'CustomFunctionsUnknown', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonCustom::FuncsUnknown', }, }, ], 0x1038 => { Name => 'CanonAFInfo', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::Canon::AFInfo' }, }, 0x1093 => { Name => 'CanonFileInfo', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::Canon::FileInfo', }, }, 0x10a9 => { Name => 'ColorBalance', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorBalance' }, }, 0x10b5 => { #PH Name => 'RawJpgInfo', SubDirectory => { Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)', TagTable => 'Image::ExifTool::CanonRaw::RawJpgInfo', }, }, 0x10ae => { Name => 'ColorTemperature', Writable => 'int16u', }, 0x10b4 => { Name => 'ColorSpace', Writable => 'int16u', PrintConv => { 1 => 'sRGB', 2 => 'Adobe RGB', 0xffff => 'Uncalibrated', }, }, 0x1803 => { #3 Name => 'ImageFormat', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::CanonRaw::ImageFormat' }, }, 0x1804 => { Name => 'RecordID', Writable => 'int32u' }, #3 0x1806 => { #3 Name => 'SelfTimerTime', Writable => 'int32u', ValueConv => '$val / 1000', ValueConvInv => '$val * 1000', PrintConv => '"$val s"', PrintConvInv => '$val=~s/\s*s.*//;$val', }, 0x1807 => { Name => 'TargetDistanceSetting', Format => 'float', PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm$//;$val', }, 0x180b => [ { # D30 Name => 'SerialNumber', Condition => '$$self{Model} =~ /EOS D30\b/', Writable => 'int32u', PrintConv => 'sprintf("%x-%.5d",$val>>16,$val&0xffff)', PrintConvInv => '$val=~/(.*)-(\d+)/ ? (hex($1)<<16)+$2 : undef', }, { # all EOS models (D30, 10D, 300D) Name => 'SerialNumber', Condition => '$$self{Model} =~ /EOS/', Writable => 'int32u', PrintConv => 'sprintf("%.10d",$val)', PrintConvInv => '$val', }, { # this is not SerialNumber for PowerShot models (but what is it?) - PH Name => 'UnknownNumber', Unknown => 1, }, ], 0x180e => { Name => 'TimeStamp', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::CanonRaw::TimeStamp', }, }, 0x1810 => { Name => 'ImageInfo', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::CanonRaw::ImageInfo', }, }, 0x1813 => { #3 Name => 'FlashInfo', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::CanonRaw::FlashInfo', }, }, 0x1814 => { #3 Name => 'MeasuredEV', Notes => q{ this is the Canon name for what could better be called MeasuredLV, and should be close to the calculated LightValue for a proper exposure with most models }, Format => 'float', ValueConv => '$val + 5', ValueConvInv => '$val - 5', }, 0x1817 => { Name => 'FileNumber', Writable => 'int32u', Groups => { 2 => 'Image' }, PrintConv => '$_=$val;s/(\d+)(\d{4})/$1-$2/;$_', PrintConvInv => '$_=$val;s/-//;$_', }, 0x1818 => { #3 Name => 'ExposureInfo', Groups => { 1 => 'CIFF' }, # (only so CIFF shows up in group lists) Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::CanonRaw::ExposureInfo' }, }, 0x1834 => { #PH Name => 'CanonModelID', Writable => 'int32u', PrintHex => 1, Notes => q{ this is the complete list of model ID numbers, but note that many of these models do not produce CRW images }, SeparateTable => 'Canon CanonModelID', PrintConv => \%Image::ExifTool::Canon::canonModelID, }, 0x1835 => { Name => 'DecoderTable', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::CanonRaw::DecoderTable' }, }, 0x183b => { #PH # display format for serial number Name => 'SerialNumberFormat', Writable => 'int32u', PrintHex => 1, PrintConv => { 0x90000000 => 'Format 1', 0xa0000000 => 'Format 2', }, }, 0x2005 => { Name => 'RawData', Writable => 0, Binary => 1, }, 0x2007 => { Name => 'JpgFromRaw', Groups => { 2 => 'Preview' }, Writable => 'resize', # 'resize' allows this value to change size Permanent => 0, RawConv => '$self->ValidateImage(\$val,$tag)', }, 0x2008 => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Writable => 'resize', # 'resize' allows this value to change size WriteCheck => '$self->CheckImage(\$val)', Permanent => 0, RawConv => '$self->ValidateImage(\$val,$tag)', }, # the following entries are subdirectories # (any 0x28 and 0x30 tag types are handled automatically by the decoding logic) 0x2804 => { Name => 'ImageDescription', SubDirectory => { }, Writable => 0, }, 0x2807 => { #3 Name => 'CameraObject', SubDirectory => { }, Writable => 0, }, 0x3002 => { #3 Name => 'ShootingRecord', SubDirectory => { }, Writable => 0, }, 0x3003 => { #3 Name => 'MeasuredInfo', SubDirectory => { }, Writable => 0, }, 0x3004 => { #3 Name => 'CameraSpecification', SubDirectory => { }, Writable => 0, }, 0x300a => { #3 Name => 'ImageProps', SubDirectory => { }, Writable => 0, }, 0x300b => { Name => 'ExifInformation', SubDirectory => { }, Writable => 0, }, ); # Canon binary data blocks %Image::ExifTool::CanonRaw::MakeModel = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, DATAMEMBER => [ 0, 6 ], # indices of data members to extract when writing WRITABLE => 1, FORMAT => 'string', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # (can't specify a first entry because this isn't # a simple binary table with fixed offsets) 0 => { Name => 'Make', Format => 'string[6]', # "Canon\0" DataMember => 'Make', RawConv => '$self->{Make} = $val', }, 6 => { Name => 'Model', Format => 'string', # no size = to the end of the data Description => 'Camera Model Name', DataMember => 'Model', RawConv => '$self->{Model} = $val', }, ); %Image::ExifTool::CanonRaw::TimeStamp = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int32u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Time' }, 0 => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Shift => 'Time', ValueConv => 'ConvertUnixTime($val)', ValueConvInv => 'GetUnixTime($val)', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', }, 1 => { #3 Name => 'TimeZoneCode', Format => 'int32s', ValueConv => '$val / 3600', ValueConvInv => '$val * 3600', }, 2 => { #3 Name => 'TimeZoneInfo', Notes => 'set to 0x80000000 if TimeZoneCode is valid', }, ); %Image::ExifTool::CanonRaw::ImageFormat = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int32u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0 => { Name => 'FileFormat', Flags => 'PrintHex', PrintConv => { 0x00010000 => 'JPEG (lossy)', 0x00010002 => 'JPEG (non-quantization)', 0x00010003 => 'JPEG (lossy/non-quantization toggled)', 0x00020001 => 'CRW', }, }, 1 => { Name => 'TargetCompressionRatio', Format => 'float', }, ); %Image::ExifTool::CanonRaw::RawJpgInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int16u', FIRST_ENTRY => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, # 0 => 'RawJpgInfoSize', 1 => { #PH Name => 'RawJpgQuality', PrintConv => { 1 => 'Economy', 2 => 'Normal', 3 => 'Fine', 5 => 'Superfine', }, }, 2 => { #PH Name => 'RawJpgSize', PrintConv => { 0 => 'Large', 1 => 'Medium', 2 => 'Small', }, }, 3 => 'RawJpgWidth', #PH 4 => 'RawJpgHeight', #PH ); %Image::ExifTool::CanonRaw::FlashInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'float', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0 => 'FlashGuideNumber', 1 => 'FlashThreshold', ); %Image::ExifTool::CanonRaw::ExposureInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'float', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0 => 'ExposureCompensation', 1 => { Name => 'ShutterSpeedValue', ValueConv => 'abs($val)<100 ? 1/(2**$val) : 0', ValueConvInv => '$val>0 ? -log($val)/log(2) : -100', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 2 => { Name => 'ApertureValue', ValueConv => '2 ** ($val / 2)', ValueConvInv => '$val>0 ? 2*log($val)/log(2) : 0', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, ); %Image::ExifTool::CanonRaw::ImageInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int32u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, # Note: Don't make these writable (except rotation) because it confuses # Canon decoding software if the are changed 0 => 'ImageWidth', #3 1 => 'ImageHeight', #3 2 => { #3 Name => 'PixelAspectRatio', Format => 'float', }, 3 => { Name => 'Rotation', Format => 'int32s', Writable => 'int32s', }, 4 => 'ComponentBitDepth', #3 5 => 'ColorBitDepth', #3 6 => 'ColorBW', #3 ); # ref 4 %Image::ExifTool::CanonRaw::DecoderTable = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FORMAT => 'int32u', FIRST_ENTRY => 0, 0 => 'DecoderTableNumber', 2 => 'CompressedDataOffset', 3 => 'CompressedDataLength', ); # ref 1/4 %Image::ExifTool::CanonRaw::WhiteSample = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FORMAT => 'int16u', FIRST_ENTRY => 1, 1 => 'WhiteSampleWidth', 2 => 'WhiteSampleHeight', 3 => 'WhiteSampleLeftBorder', 4 => 'WhiteSampleTopBorder', 5 => 'WhiteSampleBits', # this is followed by the encrypted white sample values (ref 1) ); #------------------------------------------------------------------------------ # AutoLoad our writer routines when necessary # sub AUTOLOAD { return Image::ExifTool::DoAutoLoad($AUTOLOAD, @_); } #------------------------------------------------------------------------------ # Process Raw file directory # Inputs: 0) ExifTool object reference # 1) directory information reference, 2) tag table reference # Returns: 1 on success sub ProcessCanonRaw($$$) { my ($et, $dirInfo, $rawTagTable) = @_; my $blockStart = $$dirInfo{DirStart}; my $blockSize = $$dirInfo{DirLen}; my $raf = $$dirInfo{RAF} or return 0; my $buff; my $verbose = $et->Options('Verbose'); my $buildMakerNotes = $et->Options('MakerNotes'); # 4 bytes at end of block give directory position within block $raf->Seek($blockStart+$blockSize-4, 0) or return 0; $raf->Read($buff, 4) == 4 or return 0; my $dirOffset = Get32u(\$buff,0) + $blockStart; $raf->Seek($dirOffset, 0) or return 0; $raf->Read($buff, 2) == 2 or return 0; my $entries = Get16u(\$buff,0); # get number of entries in directory # read the directory (10 bytes per entry) $raf->Read($buff, 10 * $entries) == 10 * $entries or return 0; $verbose and $et->VerboseDir('CIFF', $entries); my $index; for ($index=0; $index<$entries; ++$index) { my $pt = 10 * $index; my $tag = Get16u(\$buff, $pt); my $size = Get32u(\$buff, $pt+2); my $valuePtr = Get32u(\$buff, $pt+6); my $ptr = $valuePtr + $blockStart; # all pointers relative to block start if ($tag & 0x8000) { $et->Warn('Bad CRW directory entry'); return 1; } my $tagID = $tag & 0x3fff; # get tag ID my $tagType = ($tag >> 8) & 0x38; # get tag type my $valueInDir = ($tag & 0x4000); # flag for value in directory my $tagInfo = $et->GetTagInfo($rawTagTable, $tagID); if (($tagType==0x28 or $tagType==0x30) and not $valueInDir) { # this type of tag specifies a raw subdirectory my $name; $tagInfo and $name = $$tagInfo{Name}; $name or $name = sprintf("CanonRaw_0x%.4x", $tag); my %subdirInfo = ( DirName => $name, DataLen => 0, DirStart => $ptr, DirLen => $size, Nesting => $$dirInfo{Nesting} + 1, RAF => $raf, Parent => $$dirInfo{DirName}, ); if ($verbose) { my $fakeInfo = { Name => $name, SubDirectory => { } }; $et->VerboseInfo($tagID, $fakeInfo, 'Index' => $index, 'Size' => $size, 'Start' => $ptr, ); } $et->ProcessDirectory(\%subdirInfo, $rawTagTable); next; } my ($valueDataPos, $count, $subdir); my $format = $crwTagFormat{$tagType}; if ($tagInfo) { $subdir = $$tagInfo{SubDirectory}; $format = $$tagInfo{Format} if $$tagInfo{Format}; $count = $$tagInfo{Count}; } # get value data my ($value, $delRawConv); if ($valueInDir) { # is the value data in the directory? # this type of tag stores the value in the 'size' and 'ptr' fields $valueDataPos = $dirOffset + $pt + 4; $size = 8; $value = substr($buff, $pt+2, $size); # set count to 1 by default for normal values in directory $count = 1 if not defined $count and $format and $format ne 'string' and not $subdir; } else { $valueDataPos = $ptr; if ($size <= 512 or ($verbose > 2 and $size <= 65536) or ($tagInfo and ($$tagInfo{SubDirectory} or grep(/^$$tagInfo{Name}$/i, $et->GetRequestedTags()) ))) { # read value if size is small or specifically requested # or if this is a SubDirectory unless ($raf->Seek($ptr, 0) and $raf->Read($value, $size) == $size) { $et->Warn(sprintf("Error reading %d bytes from 0x%x",$size,$ptr)); next; } } else { $value = "Binary data $size bytes"; if ($tagInfo) { if ($et->Options('Binary') or $verbose) { # read the value anyway unless ($raf->Seek($ptr, 0) and $raf->Read($value, $size) == $size) { $et->Warn(sprintf("Error reading %d bytes from 0x%x",$size,$ptr)); next; } } # force this to be a binary (scalar reference) $$tagInfo{RawConv} = '\$val'; $delRawConv = 1; } $size = length $value; undef $format; } } # set count from tagInfo count if necessary if ($format and not $count) { # set count according to format and size my $fnum = $Image::ExifTool::Exif::formatNumber{$format}; my $fsiz = $Image::ExifTool::Exif::formatSize[$fnum]; $count = int($size / $fsiz); } if ($verbose) { my $val = $value; $format and $val = ReadValue(\$val, 0, $format, $count, $size); $et->VerboseInfo($tagID, $tagInfo, Table => $rawTagTable, Index => $index, Value => $val, DataPt => \$value, DataPos => $valueDataPos, Size => $size, Format => $format, Count => $count, ); } if ($buildMakerNotes) { # build maker notes information if requested BuildMakerNotes($et, $tagID, $tagInfo, \$value, $format, $count); } next unless defined $tagInfo; if ($subdir) { my $name = $$tagInfo{Name}; my $newTagTable; if ($$subdir{TagTable}) { $newTagTable = GetTagTable($$subdir{TagTable}); unless ($newTagTable) { warn "Unknown tag table $$subdir{TagTable}\n"; next; } } else { warn "Must specify TagTable for SubDirectory $name\n"; next; } my $subdirStart = 0; #### eval Start () $subdirStart = eval $$subdir{Start} if $$subdir{Start}; my $dirData = \$value; my %subdirInfo = ( Name => $name, DataPt => $dirData, DataLen => $size, DataPos => $valueDataPos, DirStart => $subdirStart, DirLen => $size - $subdirStart, Nesting => $$dirInfo{Nesting} + 1, RAF => $raf, DirName => $name, Parent => $$dirInfo{DirName}, ); #### eval Validate ($dirData, $subdirStart, $size) if (defined $$subdir{Validate} and not eval $$subdir{Validate}) { $et->Warn("Invalid $name data"); } else { $et->ProcessDirectory(\%subdirInfo, $newTagTable, $$subdir{ProcessProc}); } } else { # convert to specified format if necessary $format and $value = ReadValue(\$value, 0, $format, $count, $size); # save the information $et->FoundTag($tagInfo, $value); delete $$tagInfo{RawConv} if $delRawConv; } } return 1; } #------------------------------------------------------------------------------ # get information from raw file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 if this was a valid Canon RAW file sub ProcessCRW($$) { my ($et, $dirInfo) = @_; my ($buff, $sig); my $raf = $$dirInfo{RAF}; my $buildMakerNotes = $et->Options('MakerNotes'); $raf->Read($buff,2) == 2 or return 0; SetByteOrder($buff) or return 0; $raf->Read($buff,4) == 4 or return 0; $raf->Read($sig,8) == 8 or return 0; # get file signature $sig =~ /^HEAP(CCDR|JPGM)/ or return 0; # validate signature my $hlen = Get32u(\$buff, 0); $raf->Seek(0, 2) or return 0; # seek to end of file my $filesize = $raf->Tell() or return 0; # initialize maker note data if building maker notes $buildMakerNotes and InitMakerNotes($et); # set the FileType tag unless already done (eg. APP0 CIFF record in JPEG image) $et->SetFileType(); # build directory information for main raw directory my %dirInfo = ( DataLen => 0, DirStart => $hlen, DirLen => $filesize - $hlen, Nesting => 0, RAF => $raf, Parent => 'CRW', ); # process the raw directory my $rawTagTable = GetTagTable('Image::ExifTool::CanonRaw::Main'); my $oldIndent = $$et{INDENT}; $$et{INDENT} .= '| '; unless (ProcessCanonRaw($et, \%dirInfo, $rawTagTable)) { $et->Warn('CRW file format error'); } $$et{INDENT} = $oldIndent; # finish building maker notes if necessary $buildMakerNotes and SaveMakerNotes($et); # process trailers if they exist in CRW file (not in CIFF information!) if ($$et{FILE_TYPE} eq 'CRW') { my $trailInfo = Image::ExifTool::IdentifyTrailer($raf); $et->ProcessTrailers($trailInfo) if $trailInfo; } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::CanonRaw - Read Canon RAW (CRW) meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret meta information from Canon CRW raw files. These files are written directly by some Canon cameras, and contain meta information similar to that found in the EXIF Canon maker notes. =head1 NOTES The CR2 format written by some Canon cameras is very different the CRW format processed by this module. (CR2 is TIFF-based and uses standard EXIF tags.) =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.cybercom.net/~dcoffin/dcraw/> =item L<http://www.wonderland.org/crw/> =item L<http://xyrion.org/ciff/> =item L<http://owl.phy.queensu.ca/~phil/exiftool/canon_raw.html> =back =head1 ACKNOWLEDGEMENTS Thanks to Dave Nicholson for decoding a number of new tags. =head1 SEE ALSO L<Image::ExifTool::TagNames/CanonRaw Tags>, L<Image::ExifTool::Canon(3pm)|Image::ExifTool::Canon>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/CanonVRD.pm�������������������������������������������������000644 �000765 �000024 �00000225210 12645014764 021667� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: CanonVRD.pm # # Description: Read/write Canon VRD and DR4 information # # Revisions: 2006/10/30 - P. Harvey Created # 2007/10/23 - PH Added new VRD 3.0 tags # 2008/08/29 - PH Added new VRD 3.4 tags # 2008/12/02 - PH Added new VRD 3.5 tags # 2010/06/18 - PH Support variable-length CustomPictureStyle data # 2010/09/14 - PH Added r/w support for XMP in VRD # 2015/05/16 - PH Added DR4 support (DPP 4.1.50.0) # # References: 1) Bogdan private communication (Canon DPP v3.4.1.1) # 2) Gert Kello private communiation (DPP 3.8) #------------------------------------------------------------------------------ package Image::ExifTool::CanonVRD; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Canon; $VERSION = '1.28'; sub ProcessCanonVRD($$;$); sub WriteCanonVRD($$;$); sub ProcessEditData($$$); sub ProcessIHL($$$); sub ProcessIHLExif($$$); sub ProcessDR4($$;$); sub SortDR4($$); # map for adding directories to VRD my %vrdMap = ( XMP => 'CanonVRD', CanonVRD => 'VRD', ); my %noYes = ( PrintConvColumns => 2, PrintConv => { 0 => 'No', 1 => 'Yes' }, ); # DR4 format codes my %vrdFormat = ( 1 => 'int32u', 2 => 'string', 8 => 'int32u', 9 => 'int32s', 13 => 'double', 33 => 'int32u', # (array) 38 => 'double', # (array) # 254 => 'undef', ? 255 => 'undef', ); # empty VRD header/footer for creating VRD from scratch my $blankHeader = "CANON OPTIONAL DATA\0\0\x01\0\0\0\0\0\0"; my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9"; # main tag table blocks in CanonVRD trailer (ref PH) %Image::ExifTool::CanonVRD::Main = ( WRITE_PROC => \&WriteCanonVRD, PROCESS_PROC => \&ProcessCanonVRD, NOTES => q{ Canon Digital Photo Professional writes VRD (Recipe Data) information as a trailer record to JPEG, TIFF, CRW and CR2 images, or as stand-alone VRD or DR4 files. The tags listed below represent information found in these records. The complete VRD/DR4 data record may be accessed as a block using the Extra 'CanonVRD' or 'CanonDR4' tag, but this tag is not extracted or copied unless specified explicitly. }, 0xffff00f4 => { Name => 'EditData', SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::Edit' }, }, 0xffff00f5 => { Name => 'IHLData', SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::IHL' }, }, 0xffff00f6 => { Name => 'XMP', Flags => [ 'Binary', 'Protected' ], Writable => 'undef', # allow writing/deleting as a block SubDirectory => { DirName => 'XMP', TagTable => 'Image::ExifTool::XMP::Main', }, }, 0xffff00f7 => { Name => 'Edit4Data', SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::Edit4' }, }, ); # the VRD edit information is divided into sections %Image::ExifTool::CanonVRD::Edit = ( WRITE_PROC => \&ProcessEditData, PROCESS_PROC => \&ProcessEditData, VARS => { ID_LABEL => 'Index' }, # change TagID label in documentation NOTES => 'Canon VRD edit information.', 0 => { Name => 'VRD1', Size => 0x272, # size of version 1.0 edit information in bytes SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::Ver1' }, }, 1 => { Name => 'VRDStampTool', Size => 0, # size is variable, and obtained from int32u at directory start SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::StampTool' }, }, 2 => { Name => 'VRD2', Size => undef, # size is the remaining edit data SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::Ver2' }, }, ); # Canon DPP version 4 edit information %Image::ExifTool::CanonVRD::Edit4 = ( WRITE_PROC => \&ProcessEditData, PROCESS_PROC => \&ProcessEditData, VARS => { ID_LABEL => 'Index' }, # change TagID label in documentation NOTES => 'Canon DPP version 4 edit information.', 0 => { Name => 'DR4', Size => undef, # size is the remaining edit data SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::DR4' }, }, ); # "IHL Created Optional Item Data" tags (not yet writable) %Image::ExifTool::CanonVRD::IHL = ( PROCESS_PROC => \&ProcessIHL, TAG_PREFIX => 'VRD_IHL', GROUPS => { 2 => 'Image' }, 1 => [ # this contains edited TIFF-format data, with an original IFD at 0x0008 # and an edited IFD with offset given in the TIFF header. { Name => 'IHL_EXIF', Condition => '$self->Options("ExtractEmbedded")', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', ProcessProc => \&ProcessIHLExif, }, },{ Name => 'IHL_EXIF', Notes => q{ extracted as a block if the Unknown option is used, or processed as the first sub-document with the ExtractEmbedded option }, Binary => 1, Unknown => 1, }, ], # 2 - written by DPP 3.0.2.6, and it looks something like edit data, # but I haven't decoded it yet - PH 3 => { # (same size as the PreviewImage with DPP 3.0.2.6) Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Binary => 1, }, 4 => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Binary => 1, }, 5 => { Name => 'RawCodecVersion', ValueConv => '$val =~ s/\0.*//s; $val', # truncate string at null }, 6 => { Name => 'CRCDevelParams', Binary => 1, Unknown => 1, }, ); # VRD version 1 tags (ref PH) %Image::ExifTool::CanonVRD::Ver1 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 2 => 'Image' }, DATAMEMBER => [ 0x002 ], # necessary for writing # # RAW image adjustment # 0x002 => { Name => 'VRDVersion', Format => 'int16u', Writable => 0, DataMember => 'VRDVersion', RawConv => '$$self{VRDVersion} = $val', PrintConv => '$val =~ s/^(\d)(\d*)(\d)$/$1.$2.$3/; $val', }, 0x006 => { Name => 'WBAdjRGGBLevels', Format => 'int16u[4]', }, 0x018 => { Name => 'WhiteBalanceAdj', Format => 'int16u', PrintConvColumns => 2, PrintConv => { 0 => 'Auto', 1 => 'Daylight', 2 => 'Cloudy', 3 => 'Tungsten', 4 => 'Fluorescent', 5 => 'Flash', 8 => 'Shade', 9 => 'Kelvin', 30 => 'Manual (Click)', 31 => 'Shot Settings', }, }, 0x01a => { Name => 'WBAdjColorTemp', Format => 'int16u', }, # 0x01c similar to 0x006 0x024 => { Name => 'WBFineTuneActive', Format => 'int16u', %noYes, }, 0x028 => { Name => 'WBFineTuneSaturation', Format => 'int16u', }, 0x02c => { Name => 'WBFineTuneTone', Format => 'int16u', }, 0x02e => { Name => 'RawColorAdj', Format => 'int16u', PrintConv => { 0 => 'Shot Settings', 1 => 'Faithful', 2 => 'Custom', }, }, 0x030 => { Name => 'RawCustomSaturation', Format => 'int32s', }, 0x034 => { Name => 'RawCustomTone', Format => 'int32s', }, 0x038 => { Name => 'RawBrightnessAdj', Format => 'int32s', ValueConv => '$val / 6000', ValueConvInv => 'int($val * 6000 + ($val < 0 ? -0.5 : 0.5))', PrintConv => 'sprintf("%.2f",$val)', PrintConvInv => '$val', }, 0x03c => { Name => 'ToneCurveProperty', Format => 'int16u', PrintConvColumns => 2, PrintConv => { 0 => 'Shot Settings', 1 => 'Linear', 2 => 'Custom 1', 3 => 'Custom 2', 4 => 'Custom 3', 5 => 'Custom 4', 6 => 'Custom 5', }, }, # 0x040 usually "10 9 2" 0x07a => { Name => 'DynamicRangeMin', Format => 'int16u', }, 0x07c => { Name => 'DynamicRangeMax', Format => 'int16u', }, # 0x0c6 usually "10 9 2" # # RGB image adjustment # 0x110 => { Name => 'ToneCurveActive', Format => 'int16u', %noYes, }, 0x113 => { Name => 'ToneCurveMode', PrintConv => { 0 => 'RGB', 1 => 'Luminance' }, }, 0x114 => { Name => 'BrightnessAdj', Format => 'int8s', }, 0x115 => { Name => 'ContrastAdj', Format => 'int8s', }, 0x116 => { Name => 'SaturationAdj', Format => 'int16s', }, 0x11e => { Name => 'ColorToneAdj', Notes => 'in degrees, so -1 is the same as 359', Format => 'int32s', }, 0x126 => { Name => 'LuminanceCurvePoints', Format => 'int16u[21]', PrintConv => 'Image::ExifTool::CanonVRD::ToneCurvePrint($val)', PrintConvInv => 'Image::ExifTool::CanonVRD::ToneCurvePrintInv($val)', }, 0x150 => { Name => 'LuminanceCurveLimits', Notes => '4 numbers: input and output highlight and shadow points', Format => 'int16u[4]', }, 0x159 => { Name => 'ToneCurveInterpolation', PrintConv => { 0 => 'Curve', 1 => 'Straight' }, }, 0x160 => { Name => 'RedCurvePoints', Format => 'int16u[21]', PrintConv => 'Image::ExifTool::CanonVRD::ToneCurvePrint($val)', PrintConvInv => 'Image::ExifTool::CanonVRD::ToneCurvePrintInv($val)', }, # 0x193 same as 0x159 0x19a => { Name => 'GreenCurvePoints', Format => 'int16u[21]', PrintConv => 'Image::ExifTool::CanonVRD::ToneCurvePrint($val)', PrintConvInv => 'Image::ExifTool::CanonVRD::ToneCurvePrintInv($val)', }, # 0x1cd same as 0x159 0x1d4 => { Name => 'BlueCurvePoints', Format => 'int16u[21]', PrintConv => 'Image::ExifTool::CanonVRD::ToneCurvePrint($val)', PrintConvInv => 'Image::ExifTool::CanonVRD::ToneCurvePrintInv($val)', }, 0x18a => { Name => 'RedCurveLimits', Format => 'int16u[4]', }, 0x1c4 => { Name => 'GreenCurveLimits', Format => 'int16u[4]', }, 0x1fe => { Name => 'BlueCurveLimits', Format => 'int16u[4]', }, # 0x207 same as 0x159 0x20e => { Name => 'RGBCurvePoints', Format => 'int16u[21]', PrintConv => 'Image::ExifTool::CanonVRD::ToneCurvePrint($val)', PrintConvInv => 'Image::ExifTool::CanonVRD::ToneCurvePrintInv($val)', }, 0x238 => { Name => 'RGBCurveLimits', Format => 'int16u[4]', }, # 0x241 same as 0x159 0x244 => { Name => 'CropActive', Format => 'int16u', %noYes, }, 0x246 => { Name => 'CropLeft', Notes => 'crop coordinates in original unrotated image', Format => 'int16u', }, 0x248 => { Name => 'CropTop', Format => 'int16u', }, 0x24a => { Name => 'CropWidth', Format => 'int16u', }, 0x24c => { Name => 'CropHeight', Format => 'int16u', }, 0x25a => { Name => 'SharpnessAdj', Format => 'int16u', }, 0x260 => { Name => 'CropAspectRatio', Format => 'int16u', PrintConv => { 0 => 'Free', 1 => '3:2', 2 => '2:3', 3 => '4:3', 4 => '3:4', 5 => 'A-size Landscape', 6 => 'A-size Portrait', 7 => 'Letter-size Landscape', 8 => 'Letter-size Portrait', 9 => '4:5', 10 => '5:4', 11 => '1:1', 12 => 'Circle', 65535 => 'Custom', }, }, 0x262 => { Name => 'ConstrainedCropWidth', Format => 'float', PrintConv => 'sprintf("%.7g",$val)', PrintConvInv => '$val', }, 0x266 => { Name => 'ConstrainedCropHeight', Format => 'float', PrintConv => 'sprintf("%.7g",$val)', PrintConvInv => '$val', }, 0x26a => { Name => 'CheckMark', Format => 'int16u', PrintConv => { 0 => 'Clear', 1 => 1, 2 => 2, 3 => 3, }, }, 0x26e => { Name => 'Rotation', Format => 'int16u', PrintConv => { 0 => 0, 1 => 90, 2 => 180, 3 => 270, }, }, 0x270 => { Name => 'WorkColorSpace', Format => 'int16u', PrintConv => { 0 => 'sRGB', 1 => 'Adobe RGB', 2 => 'Wide Gamut RGB', 3 => 'Apple RGB', 4 => 'ColorMatch RGB', }, }, # (VRD 1.0.0 edit data ends here -- 0x272 bytes) ); # VRD Stamp Tool tags (ref PH) %Image::ExifTool::CanonVRD::StampTool = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0x00 => { Name => 'StampToolCount', Format => 'int32u', }, ); # VRD version 2 and 3 tags (ref PH) %Image::ExifTool::CanonVRD::Ver2 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, FORMAT => 'int16s', DATAMEMBER => [ 0x58, 0xdc, 0xdf, 0xe0 ], # (required for DataMember and var-format tags) IS_SUBDIR => [ 0xe0 ], GROUPS => { 2 => 'Image' }, NOTES => 'Tags added in DPP version 2.0 and later.', 0x02 => { Name => 'PictureStyle', PrintConvColumns => 2, PrintConv => { 0 => 'Standard', 1 => 'Portrait', 2 => 'Landscape', 3 => 'Neutral', 4 => 'Faithful', 5 => 'Monochrome', 6 => 'Unknown?', # PH (maybe in-camera custom picture style?) 7 => 'Custom', }, }, 0x03 => { Name => 'IsCustomPictureStyle', %noYes }, # 0x08: 3 # 0x09: 4095 # 0x0a: 0 # 0x0b: 4095 # 0x0c: 0 0x0d => 'StandardRawColorTone', 0x0e => 'StandardRawSaturation', 0x0f => 'StandardRawContrast', 0x10 => { Name => 'StandardRawLinear', %noYes }, 0x11 => 'StandardRawSharpness', 0x12 => 'StandardRawHighlightPoint', 0x13 => 'StandardRawShadowPoint', 0x14 => 'StandardOutputHighlightPoint', #2 0x15 => 'StandardOutputShadowPoint', #2 0x16 => 'PortraitRawColorTone', 0x17 => 'PortraitRawSaturation', 0x18 => 'PortraitRawContrast', 0x19 => { Name => 'PortraitRawLinear', %noYes }, 0x1a => 'PortraitRawSharpness', 0x1b => 'PortraitRawHighlightPoint', 0x1c => 'PortraitRawShadowPoint', 0x1d => 'PortraitOutputHighlightPoint', 0x1e => 'PortraitOutputShadowPoint', 0x1f => 'LandscapeRawColorTone', 0x20 => 'LandscapeRawSaturation', 0x21 => 'LandscapeRawContrast', 0x22 => { Name => 'LandscapeRawLinear', %noYes }, 0x23 => 'LandscapeRawSharpness', 0x24 => 'LandscapeRawHighlightPoint', 0x25 => 'LandscapeRawShadowPoint', 0x26 => 'LandscapeOutputHighlightPoint', 0x27 => 'LandscapeOutputShadowPoint', 0x28 => 'NeutralRawColorTone', 0x29 => 'NeutralRawSaturation', 0x2a => 'NeutralRawContrast', 0x2b => { Name => 'NeutralRawLinear', %noYes }, 0x2c => 'NeutralRawSharpness', 0x2d => 'NeutralRawHighlightPoint', 0x2e => 'NeutralRawShadowPoint', 0x2f => 'NeutralOutputHighlightPoint', 0x30 => 'NeutralOutputShadowPoint', 0x31 => 'FaithfulRawColorTone', 0x32 => 'FaithfulRawSaturation', 0x33 => 'FaithfulRawContrast', 0x34 => { Name => 'FaithfulRawLinear', %noYes }, 0x35 => 'FaithfulRawSharpness', 0x36 => 'FaithfulRawHighlightPoint', 0x37 => 'FaithfulRawShadowPoint', 0x38 => 'FaithfulOutputHighlightPoint', 0x39 => 'FaithfulOutputShadowPoint', 0x3a => { Name => 'MonochromeFilterEffect', PrintConv => { -2 => 'None', -1 => 'Yellow', 0 => 'Orange', 1 => 'Red', 2 => 'Green', }, }, 0x3b => { Name => 'MonochromeToningEffect', PrintConv => { -2 => 'None', -1 => 'Sepia', 0 => 'Blue', 1 => 'Purple', 2 => 'Green', }, }, 0x3c => 'MonochromeContrast', 0x3d => { Name => 'MonochromeLinear', %noYes }, 0x3e => 'MonochromeSharpness', 0x3f => 'MonochromeRawHighlightPoint', 0x40 => 'MonochromeRawShadowPoint', 0x41 => 'MonochromeOutputHighlightPoint', 0x42 => 'MonochromeOutputShadowPoint', 0x45 => { Name => 'UnknownContrast', Unknown => 1 }, 0x46 => { Name => 'UnknownLinear', %noYes, Unknown => 1 }, 0x47 => { Name => 'UnknownSharpness', Unknown => 1 }, 0x48 => { Name => 'UnknownRawHighlightPoint', Unknown => 1 }, 0x49 => { Name => 'UnknownRawShadowPoint', Unknown => 1 }, 0x4a => { Name => 'UnknownOutputHighlightPoint',Unknown => 1 }, 0x4b => { Name => 'UnknownOutputShadowPoint', Unknown => 1 }, 0x4c => 'CustomColorTone', 0x4d => 'CustomSaturation', 0x4e => 'CustomContrast', 0x4f => { Name => 'CustomLinear', %noYes }, 0x50 => 'CustomSharpness', 0x51 => 'CustomRawHighlightPoint', 0x52 => 'CustomRawShadowPoint', 0x53 => 'CustomOutputHighlightPoint', 0x54 => 'CustomOutputShadowPoint', 0x58 => { Name => 'CustomPictureStyleData', Format => 'var_int16u', Binary => 1, Notes => 'variable-length data structure', Writable => 0, RawConv => 'length($val) == 2 ? undef : $val', # ignore if no data }, # (VRD 2.0.0 edit data ends here: 178 bytes, index 0x59) 0x5e => [{ Name => 'ChrominanceNoiseReduction', Condition => '$$self{VRDVersion} < 330', Notes => 'VRDVersion prior to 3.3.0', PrintConv => { 0 => 'Off', 58 => 'Low', 100 => 'High', }, },{ #1 Name => 'ChrominanceNoiseReduction', Notes => 'VRDVersion 3.3.0 or later', PrintHex => 1, PrintConvColumns => 4, PrintConv => { 0x00 => 0, 0x10 => 1, 0x21 => 2, 0x32 => 3, 0x42 => 4, 0x53 => 5, 0x64 => 6, 0x74 => 7, 0x85 => 8, 0x96 => 9, 0xa6 => 10, 0xa7 => 11, 0xa8 => 12, 0xa9 => 13, 0xaa => 14, 0xab => 15, 0xac => 16, 0xad => 17, 0xae => 18, 0xaf => 19, 0xb0 => 20, }, }], 0x5f => [{ Name => 'LuminanceNoiseReduction', Condition => '$$self{VRDVersion} < 330', Notes => 'VRDVersion prior to 3.3.0', PrintConv => { 0 => 'Off', 65 => 'Low', 100 => 'High', }, },{ #1 Name => 'LuminanceNoiseReduction', Notes => 'VRDVersion 3.3.0 or later', PrintHex => 1, PrintConvColumns => 4, PrintConv => { 0x00 => 0, 0x41 => 1, 0x64 => 2, 0x6e => 3, 0x78 => 4, 0x82 => 5, 0x8c => 6, 0x96 => 7, 0xa0 => 8, 0xaa => 9, 0xb4 => 10, 0xb5 => 11, 0xb6 => 12, 0xb7 => 13, 0xb8 => 14, 0xb9 => 15, 0xba => 16, 0xbb => 17, 0xbc => 18, 0xbd => 19, 0xbe => 20, }, }], 0x60 => [{ Name => 'ChrominanceNR_TIFF_JPEG', Condition => '$$self{VRDVersion} < 330', Notes => 'VRDVersion prior to 3.3.0', PrintConv => { 0 => 'Off', 33 => 'Low', 100 => 'High', }, },{ #1 Name => 'ChrominanceNR_TIFF_JPEG', Notes => 'VRDVersion 3.3.0 or later', PrintHex => 1, PrintConvColumns => 4, PrintConv => { 0x00 => 0, 0x10 => 1, 0x21 => 2, 0x32 => 3, 0x42 => 4, 0x53 => 5, 0x64 => 6, 0x74 => 7, 0x85 => 8, 0x96 => 9, 0xa6 => 10, 0xa7 => 11, 0xa8 => 12, 0xa9 => 13, 0xaa => 14, 0xab => 15, 0xac => 16, 0xad => 17, 0xae => 18, 0xaf => 19, 0xb0 => 20, }, }], # 0x61: 1 # (VRD 3.0.0 edit data ends here: 196 bytes, index 0x62) 0x62 => { Name => 'ChromaticAberrationOn', %noYes }, 0x63 => { Name => 'DistortionCorrectionOn', %noYes }, 0x64 => { Name => 'PeripheralIlluminationOn', %noYes }, 0x65 => { Name => 'ColorBlur', %noYes }, 0x66 => { Name => 'ChromaticAberration', ValueConv => '$val / 0x400', ValueConvInv => 'int($val * 0x400 + 0.5)', PrintConv => 'sprintf("%.0f%%", $val * 100)', PrintConvInv => 'ToFloat($val) / 100', }, 0x67 => { Name => 'DistortionCorrection', ValueConv => '$val / 0x400', ValueConvInv => 'int($val * 0x400 + 0.5)', PrintConv => 'sprintf("%.0f%%", $val * 100)', PrintConvInv => 'ToFloat($val) / 100', }, 0x68 => { Name => 'PeripheralIllumination', ValueConv => '$val / 0x400', ValueConvInv => 'int($val * 0x400 + 0.5)', PrintConv => 'sprintf("%.0f%%", $val * 100)', PrintConvInv => 'ToFloat($val) / 100', }, 0x69 => { Name => 'AberrationCorrectionDistance', Notes => '100% = infinity', RawConv => '$val == 0x7fff ? undef : $val', ValueConv => '1 - $val / 0x400', ValueConvInv => 'int((1 - $val) * 0x400 + 0.5)', PrintConv => 'sprintf("%.0f%%", $val * 100)', PrintConvInv => 'ToFloat($val) / 100', }, 0x6a => 'ChromaticAberrationRed', 0x6b => 'ChromaticAberrationBlue', 0x6d => { #1 Name => 'LuminanceNR_TIFF_JPEG', Notes => 'val = raw / 10', ValueConv => '$val / 10', ValueConvInv => 'int($val * 10 + 0.5)', }, # (VRD 3.4.0 edit data ends here: 220 bytes, index 0x6e) 0x6e => { Name => 'AutoLightingOptimizerOn', %noYes }, 0x6f => { Name => 'AutoLightingOptimizer', PrintConv => { 100 => 'Low', 200 => 'Standard', 300 => 'Strong', 0x7fff => 'n/a', #1 }, }, # 0x71: 200 # 0x73: 100 # (VRD 3.5.0 edit data ends here: 232 bytes, index 0x74) 0x75 => { Name => 'StandardRawHighlight', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x76 => { Name => 'PortraitRawHighlight', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x77 => { Name => 'LandscapeRawHighlight', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x78 => { Name => 'NeutralRawHighlight', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x79 => { Name => 'FaithfulRawHighlight', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x7a => { Name => 'MonochromeRawHighlight', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x7b => { Name => 'UnknownRawHighlight', Unknown => 1, ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x7c => { Name => 'CustomRawHighlight', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x7e => { Name => 'StandardRawShadow', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x7f => { Name => 'PortraitRawShadow', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x80 => { Name => 'LandscapeRawShadow', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x81 => { Name => 'NeutralRawShadow', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x82 => { Name => 'FaithfulRawShadow', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x83 => { Name => 'MonochromeRawShadow', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x84 => { Name => 'UnknownRawShadow', Unknown => 1, ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x85 => { Name => 'CustomRawShadow', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x8b => { #2 Name => 'AngleAdj', Format => 'int32s', ValueConv => '$val / 100', ValueConvInv => '$val * 100', }, 0x8e => { Name => 'CheckMark2', Format => 'int16u', PrintConvColumns => 2, PrintConv => { 0 => 'Clear', 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, }, }, # (VRD 3.8.0 edit data ends here: 286 bytes, index 0x8f) 0x90 => { Name => 'UnsharpMask', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x92 => 'StandardUnsharpMaskStrength', 0x94 => 'StandardUnsharpMaskFineness', 0x96 => 'StandardUnsharpMaskThreshold', 0x98 => 'PortraitUnsharpMaskStrength', 0x9a => 'PortraitUnsharpMaskFineness', 0x9c => 'PortraitUnsharpMaskThreshold', 0x9e => 'LandscapeUnsharpMaskStrength', 0xa0 => 'LandscapeUnsharpMaskFineness', 0xa2 => 'LandscapeUnsharpMaskThreshold', 0xa4 => 'NeutraUnsharpMaskStrength', 0xa6 => 'NeutralUnsharpMaskFineness', 0xa8 => 'NeutralUnsharpMaskThreshold', 0xaa => 'FaithfulUnsharpMaskStrength', 0xac => 'FaithfulUnsharpMaskFineness', 0xae => 'FaithfulUnsharpMaskThreshold', 0xb0 => 'MonochromeUnsharpMaskStrength', 0xb2 => 'MonochromeUnsharpMaskFineness', 0xb4 => 'MonochromeUnsharpMaskThreshold', 0xb6 => 'CustomUnsharpMaskStrength', 0xb8 => 'CustomUnsharpMaskFineness', 0xba => 'CustomUnsharpMaskThreshold', 0xbc => 'CustomDefaultUnsharpStrength', 0xbe => 'CustomDefaultUnsharpFineness', 0xc0 => 'CustomDefaultUnsharpThreshold', # (VRD 3.9.1 edit data ends here: 392 bytes, index 0xc4) # 0xc9: 3 - some RawSharpness # 0xca: 4095 - some RawHighlightPoint # 0xcb: 0 - some RawShadowPoint # 0xcc: 4095 - some OutputHighlightPoint # 0xcd: 0 - some OutputShadowPoint # 0xd1: 3 - some UnsharpMaskStrength # 0xd3: 7 - some UnsharpMaskFineness # 0xd5: 3,4 - some UnsharpMaskThreshold 0xd6 => { Name => 'CropCircleActive', %noYes }, 0xd7 => 'CropCircleX', 0xd8 => 'CropCircleY', 0xd9 => 'CropCircleRadius', # 0xda: 0, 1 # 0xdb: 100 0xdc => { Name => 'DLOOn', DataMember => 'DLOOn', RawConv => '$$self{DLOOn} = $val', %noYes, }, 0xdd => 'DLOSetting', # (VRD 3.11.0 edit data ends here: 444 bytes, index 0xde) 0xde => { Name => 'DLOShootingDistance', Notes => '100% = infinity', RawConv => '$val == 0x7fff ? undef : $val', ValueConv => '1 - $val / 0x400', ValueConvInv => 'int((1 - $val) * 0x400 + 0.5)', PrintConv => 'sprintf("%.0f%%", $val * 100)', PrintConvInv => 'ToFloat($val) / 100', }, 0xdf => { Name => 'DLODataLength', DataMember => 'DLODataLength', Format => 'int32u', Writable => 0, RawConv => '$$self{DLODataLength} = $val', }, 0xe0 => { # (yes, this overlaps DLODataLength) Name => 'DLOInfo', # - have seen DLODataLengths of 65536,64869 when DLO is Off, so must test DLOOn flag Condition => '$$self{DLOOn}', SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::DLOInfo' }, Hook => '$varSize += $$self{DLODataLength} + 0x16', }, 0xe1 => 'CameraRawColorTone', # (VRD 3.11.2 edit data ends here: 452 bytes, index 0xe2, unless DLO is on) 0xe2 => 'CameraRawSaturation', 0xe3 => 'CameraRawContrast', 0xe4 => { Name => 'CameraRawLinear', %noYes }, 0xe5 => 'CameraRawSharpness', 0xe6 => 'CameraRawHighlightPoint', 0xe7 => 'CameraRawShadowPoint', 0xe8 => 'CameraRawOutputHighlightPoint', 0xe9 => 'CameraRawOutputShadowPoint', ); # DLO tags (ref PH) %Image::ExifTool::CanonVRD::DLOInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 1, FORMAT => 'int16s', GROUPS => { 2 => 'Image' }, NOTES => 'Tags added when DLO (Digital Lens Optimizer) is on.', # 0x01 - seen 3112,3140 0x04 => 'DLOSettingApplied', 0x05 => { Name => 'DLOVersion', #(NC) Format => 'string[10]', }, 0x0a => { Name => 'DLOData', LargeTag => 1, # large tag, so avoid storing unnecessarily Notes => 'variable-length Digital Lens Optimizer data, stored in JPEG-like format', Format => 'undef[$$self{DLODataLength}]', Writable => 0, Binary => 1, }, ); # VRD version 4 tags (ref PH) %Image::ExifTool::CanonVRD::DR4 = ( PROCESS_PROC => \&ProcessDR4, WRITE_PROC => \&ProcessDR4, WRITABLE => 1, GROUPS => { 2 => 'Image' }, VARS => { HEX_ID => 1, SORT_PROC => \&SortDR4 }, NOTES => q{ Tags written by Canon DPP version 4 in CanonVRD trailers and DR4 files. Each tag has three associated flag words which are stored with the directory entry, some of which are extracted as a separate tag, indicated in the table below by a decimal appended to the tag ID (.0, .1 or .2). }, header => { Name => 'DR4Header', SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::DR4Header' }, }, 0x10002 => 'Rotation', # left/right rotation 90,180,270 0x10003 => 'AngleAdj', # crop angle # 0x10018 - fmt=8: 0 # 0x10020 - fmt=2: '' 0x10021 => 'CustomPictureStyle', # (string) 0x10101 => { Name => 'CheckMark', PrintConv => { 0 => 'Clear', 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, }, }, 0x10200 => { Name => 'WorkColorSpace', PrintConv => { 1 => 'sRGB', 2 => 'Adobe RGB', 3 => 'Wide Gamut RGB', 4 => 'Apple RGB', 5 => 'ColorMatch RGB', }, }, # 0x10201 - fmt=9: 0 # 0x10f20 - fmt=9: 350 0x20001 => 'RawBrightnessAdj', 0x20101 => { Name => 'WhiteBalanceAdj', PrintConvColumns => 2, PrintConv => { -1 => 'Manual (Click)', 0 => 'Auto', 1 => 'Daylight', 2 => 'Cloudy', 3 => 'Tungsten', 4 => 'Fluorescent', 5 => 'Flash', 8 => 'Shade', 9 => 'Kelvin', 255 => 'Shot Settings', }, }, 0x20102 => 'WBAdjColorTemp', 0x20105 => 'WBAdjMagentaGreen', 0x20106 => 'WBAdjBlueAmber', 0x20125 => { Name => 'WBAdjRGGBLevels', PrintConv => '$val =~ s/^\d+ //; $val', # remove first integer (14: what is this for?) PrintConvInv => '"14 $val"', }, 0x20200 => { Name => 'GammaLinear', %noYes }, 0x20301 => { Name => 'PictureStyle', PrintHex => 1, PrintConv => { 0x81 => 'Standard', 0x82 => 'Portrait', 0x83 => 'Landscape', 0x84 => 'Neutral', 0x85 => 'Faithful', 0x86 => 'Monochrome', 0x87 => 'Auto', 0x88 => 'Fine Detail', 0xf0 => 'Shot Settings', 0xff => 'Custom', }, }, # 0x20302 - Gamma curve data 0x20303 => 'ContrastAdj', 0x20304 => 'ColorToneAdj', 0x20305 => 'ColorSaturationAdj', 0x20306 => { Name => 'MonochromeToningEffect', PrintConv => { 0 => 'None', 1 => 'Sepia', 2 => 'Blue', 3 => 'Purple', 4 => 'Green', }, }, 0x20307 => { Name => 'MonochromeFilterEffect', PrintConv => { 0 => 'None', 1 => 'Yellow', 2 => 'Orange', 3 => 'Red', 4 => 'Green', }, }, 0x20308 => 'UnsharpMaskStrength', 0x20309 => 'UnsharpMaskFineness', 0x2030a => 'UnsharpMaskThreshold', 0x2030b => 'ShadowAdj', 0x2030c => 'HighlightAdj', 0x20310 => { Name => 'SharpnessAdj', PrintConv => { 0 => 'Sharpness', 1 => 'Unsharp Mask', }, }, '0x20310.0' => { Name => 'SharpnessAdjOn', %noYes }, 0x20311 => 'SharpnessStrength', 0x20400 => { Name => 'ToneCurve', SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::ToneCurve' }, }, '0x20400.1' => { Name => 'ToneCurveOriginal', %noYes }, # 0x20401 - fmt=33 (312 bytes) 0x20410 => 'ToneCurveBrightness', 0x20411 => 'ToneCurveContrast', 0x20500 => { Name => 'AutoLightingOptimizer', PrintConv => { 0 => 'Low', 1 => 'Standard', 2 => 'Strong', }, }, '0x20500.0' => { Name => 'AutoLightingOptimizerOn', Notes => 'ignored if gamma is linear', %noYes, }, # 0x20501 - fmt=13: 0 # 0x20502 - fmt=13: 0 0x20600 => 'LuminanceNoiseReduction', 0x20601 => 'ChrominanceNoiseReduction', # 0x20650 - fmt=9: 0 (JPG images) 0x20701 => { Name => 'ShootingDistance', Notes => '100% = infinity', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.0f%%", $val * 100)', PrintConvInv => 'ToFloat($val) / 100', }, 0x20702 => { Name => 'PeripheralIllumination', PrintConv => 'sprintf "%g", $val', PrintConvInv => '$val', }, '0x20702.0' => { Name => 'PeripheralIlluminationOn', %noYes }, 0x20703 => { Name => 'ChromaticAberration', PrintConv => 'sprintf "%g", $val', PrintConvInv => '$val', }, '0x20703.0' => { Name => 'ChromaticAberrationOn', %noYes }, 0x20704 => { Name => 'ColorBlurOn', %noYes }, 0x20705 => { Name => 'DistortionCorrection', PrintConv => 'sprintf "%g", $val', PrintConvInv => '$val', }, '0x20705.0' => { Name => 'DistortionCorrectionOn', %noYes }, 0x20706 => 'DLOSetting', '0x20706.0' => { Name => 'DLOOn', %noYes }, 0x20707 => { Name => 'ChromaticAberrationRed', PrintConv => 'sprintf "%g", $val', PrintConvInv => '$val', }, 0x20708 => { Name => 'ChromaticAberrationBlue', PrintConv => 'sprintf "%g", $val', PrintConvInv => '$val', }, 0x20709 => { Name => 'DistortionEffect', PrintConv => { 0 => 'Shot Settings', 1 => 'Emphasize Linearity', 2 => 'Emphasize Distance', 3 => 'Emphasize Periphery', 4 => 'Emphasize Center', }, }, # 0x20800 - fmt=1: 0 # 0x20801 - fmt=1: 0 0x20900 => 'ColorHue', 0x20901 => 'SaturationAdj', 0x20910 => 'RedHSL', 0x20911 => 'OrangeHSL', 0x20912 => 'GreenHSL', 0x20913 => 'AquaHSL', 0x20914 => 'BlueHSL', 0x20915 => 'BlueHSL', 0x20916 => 'PurpleHSL', 0x20917 => 'MagentaHSL', 0x20a00 => { Name => 'GammaInfo', SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::GammaInfo' }, }, # 0x20a01 - Auto picture style settings # 0x20a02 - Standard picture style settings # 0x20a03 - Portrait picture style settings # 0x20a04 - Landscape picture style settings # 0x20a05 - Neutral picture style settings # 0x20a06 - Faithful picture style settings # 0x20a07 - Monochrome picture style settings # 0x20a08 - (unknown picture style settings) # 0x20a09 - Custom picture style settings # 0x20a20 - Fine Detail picture style settings 0x30101 => { Name => 'CropAspectRatio', PrintConv => { 0 => 'Free', 1 => 'Custom', 2 => '1:1', 3 => '3:2', 4 => '2:3', 5 => '4:3', 6 => '3:4', 7 => '5:4', 8 => '4:5', 9 => '16:9', 10 => '9:16', }, }, 0x30102 => 'CropAspectRatioCustom', # 0x30103 - fmt=33: "0 0 8" 0xf0100 => { Name => 'CropInfo', SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::CropInfo' }, }, 0xf0500 => { Name => 'CustomPictureStyleData', Binary => 1, }, 0xf0510 => { Name => 'StampInfo', SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::StampInfo' }, }, 0xf0511 => { Name => 'DustInfo', SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::DustInfo' }, }, 0xf0512 => 'LensFocalLength', # 0xf0521 - DLO data # 0xf0520 - DLO data # 0xf0530 - created when dust delete data applied (4 bytes, all zero) # 0xf0600 - fmt=253 (2308 bytes, JPG images) # 0xf0601 - fmt=253 (2308 bytes, JPG images) # 0x1ff52c - values: 129,130,132 (related to custom picture style somehow) # to do: # - find 8-15mm CR2 sample and decode linear distortion effect fine-tune ); # Version 4 header information (ref PH) %Image::ExifTool::CanonVRD::DR4Header = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, FORMAT => 'int32u', GROUPS => { 2 => 'Image' }, # 0 - value: 'IIII' (presumably byte order) # 1 - value: 0x00040004 (currently use this for magic number) # 2 - value: 6 3 => { Name => 'DR4CameraModel', Writable => 'int32u', PrintHex => 1, SeparateTable => 'Canon CameraModelID', PrintConv => \%Image::ExifTool::Canon::canonModelID, }, # 4 - value: 3 # 5 - value: 4 # 6 - value: 5 # 7 - DR4 directory entry count ); # Version 4 RGB tone curve information (ref PH) %Image::ExifTool::CanonVRD::ToneCurve = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, FORMAT => 'int32u', GROUPS => { 2 => 'Image' }, 0x00 => { Name => 'ToneCurveColorSpace', PrintConv => { 0 => 'RGB', 1 => 'Luminance', }, }, 0x01 => { Name => 'ToneCurveShape', PrintConv => { 0 => 'Curve', 1 => 'Straight', }, }, 0x03 => { Name => 'ToneCurveInputRange', Format => 'int32u[2]', Notes => '255 max' }, 0x05 => { Name => 'ToneCurveOutputRange', Format => 'int32u[2]', Notes => '255 max' }, 0x07 => { Name => 'RGBCurvePoints', Format => 'int32u[21]', PrintConv => 'Image::ExifTool::CanonVRD::ToneCurvePrint($val)', PrintConvInv => 'Image::ExifTool::CanonVRD::ToneCurvePrintInv($val)', }, 0x0a => 'ToneCurveX', 0x0b => 'ToneCurveY', 0x2d => { Name => 'RedCurvePoints', Format => 'int32u[21]', PrintConv => 'Image::ExifTool::CanonVRD::ToneCurvePrint($val)', PrintConvInv => 'Image::ExifTool::CanonVRD::ToneCurvePrintInv($val)', }, 0x53 => { Name => 'GreenCurvePoints', Format => 'int32u[21]', PrintConv => 'Image::ExifTool::CanonVRD::ToneCurvePrint($val)', PrintConvInv => 'Image::ExifTool::CanonVRD::ToneCurvePrintInv($val)', }, 0x79 => { Name => 'BlueCurvePoints', Format => 'int32u[21]', PrintConv => 'Image::ExifTool::CanonVRD::ToneCurvePrint($val)', PrintConvInv => 'Image::ExifTool::CanonVRD::ToneCurvePrintInv($val)', }, ); # Version 4 gamma curve information (ref PH) %Image::ExifTool::CanonVRD::GammaInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, FORMAT => 'double', GROUPS => { 2 => 'Image' }, 0x02 => 'GammaContrast', 0x03 => 'GammaColorTone', 0x04 => 'GammaSaturation', 0x05 => 'GammaUnsharpMaskStrength', 0x06 => 'GammaUnsharpMaskFineness', 0x07 => 'GammaUnsharpMaskThreshold', 0x08 => 'GammaSharpnessStrength', 0x09 => 'GammaShadow', 0x0a => 'GammaHighlight', # 0x0b-0x10 are the same as first 6 doubles of tag DR4_0x20302 # 0x0b - value: 14 0x0c => { Name => 'GammaBlackPoint', ValueConv => q{ return 0 if $val <= 0; $val = log($val / 4.6875) / log(2) + 1; return abs($val) > 1e-10 ? $val : 0; }, ValueConvInv => '$val ? exp(($val - 1) * log(2)) * 4.6876 : 0', PrintConv => 'sprintf("%+.3f", $val)', PrintConvInv => '$val', }, 0x0d => { Name => 'GammaWhitePoint', ValueConv => q{ return $val if $val <= 0; $val = log($val / 4.6875) / log(2) - 11.77109325169954; return abs($val) > 1e-10 ? $val : 0; }, ValueConvInv => '$val ? exp(($val + 11.77109325169954) * log(2)) * 4.6875 : 0', PrintConv => 'sprintf("%+.3f", $val)', PrintConvInv => '$val', }, 0x0e => { Name => 'GammaMidPoint', ValueConv => q{ return $val if $val <= 0; $val = log($val / 4.6875) / log(2) - 8; return abs($val) > 1e-10 ? $val : 0; }, ValueConvInv => '$val ? exp(($val + 8) * log(2)) * 4.6876 : 0', PrintConv => 'sprintf("%+.3f", $val)', PrintConvInv => '$val', }, 0x0f => { Name => 'GammaCurveOutputRange', Format => 'double[2]', Notes => '16383 max' }, ); # Version 4 crop information (ref PH) %Image::ExifTool::CanonVRD::CropInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, FORMAT => 'int32s', GROUPS => { 2 => 'Image' }, 0 => { Name => 'CropActive', %noYes }, 1 => 'CropRotatedOriginalWidth', 2 => 'CropRotatedOriginalHeight', 3 => 'CropX', 4 => 'CropY', 5 => 'CropWidth', 6 => 'CropHeight', 8 => { Name => 'CropRotation', Format => 'double', PrintConv => 'sprintf("%.7g",$val)', PrintConvInv => '$val', }, 0x0a => 'CropOriginalWidth', 0x0b => 'CropOriginalHeight', # 0x0c double - value: 100 ); # DR4 Stamp Tool tags (ref PH) %Image::ExifTool::CanonVRD::StampInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, FORMAT => 'int32u', FIRST_ENTRY => 0, 0x02 => 'StampToolCount', ); # DR4 dust delete information (ref PH) %Image::ExifTool::CanonVRD::DustInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, FORMAT => 'int32u', FIRST_ENTRY => 0, 0x02 => { Name => 'DustDeleteApplied', %noYes }, ); #------------------------------------------------------------------------------ # sort DR4 tag ID's for the documentation sub SortDR4($$) { my ($a, $b) = @_; my ($aHex, $aDec, $bHex, $bDec); ($aHex, $aDec) = ($1, $2) if $a =~ /^(0x[0-9a-f]+)?\.?(\d*?)$/; ($bHex, $bDec) = ($1, $2) if $b =~ /^(0x[0-9a-f]+)?\.?(\d*?)$/; if ($aHex) { return 1 unless defined $bDec; # $b is 'header'; return hex($aHex) <=> hex($bHex) || $aDec <=> $bDec if $bHex; return hex($aHex) <=> $bDec || 1; } elsif ($bHex) { return -1 unless defined $aDec; return $aDec <=> hex($bHex) || -1; } else { return 1 unless defined $bDec; return -1 unless defined $aDec; return $aDec <=> $bDec; } } #------------------------------------------------------------------------------ # Tone curve print conversion sub ToneCurvePrint($) { my $val = shift; my @vals = split ' ', $val; return $val unless @vals == 21; my $n = shift @vals; return $val unless $n >= 2 and $n <= 10; $val = ''; while ($n--) { $val and $val .= ' '; $val .= '(' . shift(@vals) . ',' . shift(@vals) . ')'; } return $val; } #------------------------------------------------------------------------------ # Inverse print conversion for tone curve sub ToneCurvePrintInv($) { my $val = shift; my @vals = ($val =~ /\((\d+),(\d+)\)/g); return undef unless @vals >= 4 and @vals <= 20 and not @vals & 0x01; unshift @vals, scalar(@vals) / 2; while (@vals < 21) { push @vals, 0 } return join(' ',@vals); } #------------------------------------------------------------------------------ # Read/Write VRD edit data # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: Reading: 1 on success; Writing: modified edit data, or undef if nothing changed sub ProcessEditData($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access my $dataPt = $$dirInfo{DataPt}; my $pos = $$dirInfo{DirStart}; my $dataPos = $$dirInfo{DataPos}; my $outfile = $$dirInfo{OutFile}; my $dirLen = $$dirInfo{DirLen}; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my $oldChanged = $$et{CHANGED}; $et->VerboseDir('VRD Edit Data', 0, $dirLen) unless $outfile; if ($outfile) { # make a copy for editing in place my $buff = substr($$dataPt, $pos, $dirLen); $dataPt = $$dirInfo{DataPt} = \$buff; $pos = $$dirInfo{DirStart} = 0; } my $dirEnd = $pos + $dirLen; # loop through all records in the edit data my ($recNum, $recLen, $err); for ($recNum=0;; ++$recNum, $pos+=$recLen) { if ($pos + 4 > $dirEnd) { last if $pos == $dirEnd; # all done if we arrived at end $recLen = 0; # just reset record size (will exit loop on test below) } else { $recLen = Get32u($dataPt, $pos); # (DR4 has a null terminator) last if $recLen == 0 and $pos + 4 == $dirEnd; } $pos += 4; # move to start of record if ($pos + $recLen > $dirEnd) { $et->Warn('Possibly corrupt CanonVRD Edit record'); $err = 1; last; } my $saveRecLen = $recLen; if ($verbose > 1 and not $outfile) { printf $out "$$et{INDENT}CanonVRD Edit record ($recLen bytes at offset 0x%x)\n", $pos + $dataPos; if ($recNum and $verbose > 2) { my %parms = ( Start => $pos, Addr => $pos + $dataPos, Out => $out, Prefix => $$et{INDENT}, ); $parms{MaxLen} = $verbose == 3 ? 96 : 2048 if $verbose < 5; HexDump($dataPt, $recLen, %parms); } } # our edit information is the 0th record, so don't process the others next if $recNum; # process VRD edit information my $subTablePtr = $tagTablePtr; my $index; my %subdirInfo = ( DataPt => $dataPt, DataPos => $dataPos, DirStart => $pos, DirLen => $recLen, OutFile => $outfile, ); my $subStart = 0; # loop through various sections of the VRD edit data for ($index=0; ; ++$index) { my $tagInfo = $$subTablePtr{$index} or last; my $subLen; my $maxLen = $recLen - $subStart; if ($$tagInfo{Size}) { $subLen = $$tagInfo{Size}; } elsif (defined $$tagInfo{Size}) { # get size from int32u at $subStart last unless $subStart + 4 <= $recLen; $subLen = Get32u($dataPt, $subStart + $pos); $subStart += 4; # skip the length word } else { $subLen = $maxLen; } $subLen > $maxLen and $subLen = $maxLen; if ($subLen) { my $subTable = GetTagTable($$tagInfo{SubDirectory}{TagTable}); my $subName = $$tagInfo{Name}; $subdirInfo{DirStart} = $subStart + $pos; $subdirInfo{DirLen} = $subLen; $subdirInfo{DirName} = $subName; if ($outfile) { # rewrite this section of the VRD edit information $verbose and print $out " Rewriting Canon $subName\n"; my $newVal = $et->WriteDirectory(\%subdirInfo, $subTable); if ($newVal) { my $sizeDiff = length($newVal) - $subLen; substr($$dataPt, $pos+$subStart, $subLen) = $newVal; if ($sizeDiff) { $subLen = length $newVal; $recLen += $sizeDiff; $dirEnd += $sizeDiff; $dirLen += $sizeDiff; } } } else { $et->VPrint(0, "$$et{INDENT}$subName (SubDirectory) -->\n"); $et->VerboseDump($dataPt, Start => $pos + $subStart, Addr => $dataPos + $pos + $subStart, Len => $subLen, ); # extract tags from this section of the VRD edit information $et->ProcessDirectory(\%subdirInfo, $subTable); } } # next section starts at the end of this one $subStart += $subLen; } if ($outfile and $saveRecLen ne $recLen) { # update record length if necessary Set32u($recLen, $dataPt, $pos - 4) } } if ($outfile) { return undef if $oldChanged == $$et{CHANGED}; return substr($$dataPt, $$dirInfo{DirStart}, $dirLen); } return $err ? 0 : 1; } #------------------------------------------------------------------------------ # Process VRD IHL data # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessIHL($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos}; my $pos = $$dirInfo{DirStart}; my $dirLen = $$dirInfo{DirLen}; my $dirEnd = $pos + $dirLen; $et->VerboseDir('VRD IHL', 0, $dirLen); SetByteOrder('II'); # (make up your mind, Canon!) while ($pos + 48 <= $dirEnd) { my $hdr = substr($$dataPt, $pos, 48); unless ($hdr =~ /^IHL Created Optional Item Data\0\0/) { $et->Warn('Possibly corrupted VRD IHL data'); last; } my $tag = Get32u($dataPt, $pos + 36); my $size = Get32u($dataPt, $pos + 40); # size of data in IHL record my $next = Get32u($dataPt, $pos + 44); # size of complete IHL record if ($size > $next or $pos + 48 + $next > $dirEnd) { $et->Warn(sprintf('Bad size for VRD IHL tag 0x%.4x', $tag)); last; } $pos += 48; $et->HandleTag($tagTablePtr, $tag, substr($$dataPt, $pos, $size), DataPt => $dataPt, DataPos => $dataPos, Start => $pos, Size => $size ); $pos += $next; } return 1; } #------------------------------------------------------------------------------ # Process VRD IHL EXIF data # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessIHLExif($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $$et{DOC_NUM} = 1; # the IHL-edited maker notes may look messed up, but the offsets should be OK my $oldFix = $et->Options(FixBase => 0); my $rtnVal = $et->ProcessTIFF($dirInfo, $tagTablePtr); $et->Options(FixBase => $oldFix); delete $$et{DOC_NUM}; return $rtnVal; } #------------------------------------------------------------------------------ # Wrap DR4 data with the VRD header/footer and edit record # Inputs: 0) DR4 record # Returns: VRD[Edit[DR4]] data sub WrapDR4($) { my $val = shift; my $n = length $val; my $oldOrder = GetByteOrder(); SetByteOrder('MM'); $val = $blankHeader . "\xff\xff\0\xf7" . Set32u($n+8) . Set32u($n) . $val . "\0\0\0\0" . $blankFooter; # update the new VRD length in the header/footer Set32u($n + 16, \$val, 0x18); # (extra 16 bytes for the edit record wrapper) Set32u($n + 16, \$val, length($val) - 0x2c); SetByteOrder($oldOrder); return $val; } #------------------------------------------------------------------------------ # Read/Write DPP version 4 edit data or DR4 file # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: # Reading from memory (not RAF and not IsWriting): 1 on success # Editing from memory (not RAF and IsWriting): modified edit data, or undef if nothing changed # Reading file (RAF and not OutFile): 1 if a valid DR4 file, 0 if not # Writing file (RAF and OutFile): 1 if valid DR4 file, 0 if not, -1 on write error # (serves me right for not having a consistent interface for the various modes of operation) sub ProcessDR4($$;$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access my $dataPt = $$dirInfo{DataPt}; my $raf = $$dirInfo{RAF}; my $outfile = $$dirInfo{OutFile}; my $isWriting = $outfile || $$dirInfo{IsWriting}; my $dataPos = $$dirInfo{DataPos} || 0; my $verbose = $et->Options('Verbose'); my $unknown = $et->Options('Unknown'); my ($pos, $dirLen, $numEntries, $err, $newTags); # write CanonDR4 as a block if specified if ($isWriting) { my $nvHash; my $newVal = $et->GetNewValue('CanonDR4', \$nvHash); if ($newVal) { $et->VPrint(0, " Writing CanonDR4 as a block\n"); $$et{DidCanonVRD} = 1; # set flag so we don't add this twice ++$$et{CHANGED}; if ($outfile) { Write($$dirInfo{OutFile}, $newVal) or return -1; return 1; } else { return $newVal; } } elsif (not $dataPt and ($nvHash or $$et{DEL_GROUP}{CanonVRD})) { $et->Error("Can't delete all CanonDR4 information from a DR4 file"); return 1; } } if ($dataPt) { $pos = $$dirInfo{DirStart} || 0; $dirLen = $$dirInfo{DirLen} || length($$dataPt) - $pos; } else { # load DR4 file into memory my $buff; $raf->Read($buff, 8) == 8 and $buff eq "IIII\x04\0\x04\0" or return 0; $et->SetFileType(); $raf->Seek(0, 2) or return $err = 1; $dirLen = $raf->Tell(); $raf->Seek(0, 0) or return $err = 1; $raf->Read($buff, $dirLen) == $dirLen or $err = 1; $err and $et->Warn('Error reading DR4 file'), return 1; $tagTablePtr = GetTagTable('Image::ExifTool::CanonVRD::DR4'); $dataPt = \$buff; $pos = 0; } my $dirEnd = $pos + $dirLen; if (($$et{TAGS_FROM_FILE} and not $$et{EXCL_TAG_LOOKUP}{canondr4}) or $$et{REQ_TAG_LOOKUP}{canondr4}) { # extract CanonDR4 block if copying tags, or if requested $et->FoundTag('CanonDR4', substr($$dataPt, $pos, $dirLen)); } # version 4 header is 32 bytes (int32u[8]) if ($dirLen < 32) { $err = 1; } else { SetByteOrder(substr($$dataPt, $pos, 2)) or $err = 1; # process the DR4 header my %hdrInfo = ( DataPt => $dataPt, DirStart => $pos, DirLen => 32, DirName => 'DR4Header', ); my $hdrTable = GetTagTable('Image::ExifTool::CanonVRD::DR4Header'); if ($outfile) { my $hdr = $et->WriteDirectory(\%hdrInfo, $hdrTable); substr($$dataPt, $pos, 32) = $hdr if $hdr and length $hdr == 32; } else { $et->VerboseDir('DR4Header', undef, 32); $et->ProcessDirectory(\%hdrInfo, $hdrTable); } # number of entries in the DR4 directory $numEntries = Get32u($dataPt, $pos + 28); $err = 1 if $dirLen < 36 + 28 * $numEntries; } $err and $et->Warn('Invalid DR4 directory'), return $outfile ? undef : 0; if ($outfile) { $newTags = $et->GetNewTagInfoHash($tagTablePtr); } else { $et->VerboseDir('DR4', $numEntries, $dirLen); } my $index; for ($index=0; $index<$numEntries; ++$index) { my ($val, @flg, $i); my $entry = $pos + 36 + 28 * $index; last if $entry + 28 > $dirEnd; my $tag = Get32u($dataPt, $entry); my $fmt = Get32u($dataPt, $entry + 4); $flg[0] = Get32u($dataPt, $entry + 8); $flg[1] = Get32u($dataPt, $entry + 12); $flg[2] = Get32u($dataPt, $entry + 16); my $off = Get32u($dataPt, $entry + 20) + $pos; my $len = Get32u($dataPt, $entry + 24); next if $off + $len >= $dirEnd; my $format = $vrdFormat{$fmt}; if (not $format) { $val = unpack 'H*', substr($$dataPt, $off, $len); $format = 'undef'; } elsif ($format eq 'double' and $len eq 8) { # avoid teeny weeny values $val = ReadValue($dataPt, $off, $format, undef, $len); $val = 0 if abs($val) < 1e-100; } if ($outfile) { # write (binary data) subdirectory if it exists my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); if ($tagInfo and $$tagInfo{SubDirectory}) { my %subdirInfo = ( DataPt => $dataPt, DirStart => $off, DirLen => $len, DirName => $$tagInfo{Name}, ); my $subTablePtr = GetTagTable($$tagInfo{SubDirectory}{TagTable}); my $saveChanged = $$et{CHANGED}; my $dat = $et->WriteDirectory(\%subdirInfo, $subTablePtr); if (defined $dat and length($dat) == $len) { substr($$dataPt, $off, $len) = $dat; } else { $$et{CHANGED} = $saveChanged; # didn't change anything after all } } else { # loop through main tag and flags (don't yet consider flag 2) for ($i=-1; $i<2; ++$i) { $tagInfo = $$newTags{$i>=0 ? sprintf('0x%x.%d',$tag,$i) : $tag}; next unless $tagInfo; if ($i >= 0) { $off = $entry + 8 + 4 * $i; $format = 'int32u'; $len = 4; undef $val; } $val = ReadValue($dataPt, $off, $format, undef, $len) unless defined $val; my $nvHash; my $newVal = $et->GetNewValue($tagInfo, \$nvHash); if ($et->IsOverwriting($nvHash, $val) and defined $newVal) { my $count = int($len / Image::ExifTool::FormatSize($format)); my $rtnVal = WriteValue($newVal, $format, $count, $dataPt, $off); if (defined $rtnVal) { $et->VerboseValue("- CanonVRD:$$tagInfo{Name}", $val); $et->VerboseValue("+ CanonVRD:$$tagInfo{Name}", $newVal); ++$$et{CHANGED}; } } } } next; } $et->HandleTag($tagTablePtr, $tag, $val, DataPt => $dataPt, DataPos => $dataPos, Start => $off, Size => $len, Index => $index, Format => $format, # $flg[0] is on/off flag # $flg[1] "is default" flag? # $flg[2] changed to 0 when some unsharp mask settings were changed Extra => ", fmt=$fmt flags=" . join(',', @flg), ); foreach $i (0..2) { my $flagID = sprintf('0x%x.%d', $tag, $i); $et->HandleTag($tagTablePtr, $flagID, $flg[$i]) if $$tagTablePtr{$flagID}; } } return 1 unless $isWriting; return substr($$dataPt, $pos, $dirLen) unless $raf; return 1 if Write($outfile, substr($$dataPt, $pos, $dirLen)); return -1; } #------------------------------------------------------------------------------ # Read/write Canon VRD file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 if this was a Canon VRD file, 0 otherwise, -1 on write error sub ProcessVRD($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $buff; my $num = $raf->Read($buff, 0x1c); # initialize write directories if necessary $et->InitWriteDirs(\%vrdMap, 'XMP') if $$dirInfo{OutFile}; if (not $num and $$dirInfo{OutFile}) { # create new VRD file from scratch my $newVal = $et->GetNewValue('CanonVRD'); if ($newVal) { $et->VPrint(0, " Writing CanonVRD as a block\n"); Write($$dirInfo{OutFile}, $newVal) or return -1; $$et{DidCanonVRD} = 1; ++$$et{CHANGED}; } else { # allow VRD to be created from individual tags if ($$et{ADD_DIRS}{CanonVRD}) { my $newVal = ''; if (ProcessCanonVRD($et, { OutFile => \$newVal }) > 0) { Write($$dirInfo{OutFile}, $newVal) or return -1; ++$$et{CHANGED}; return 1; } } $et->Error('No CanonVRD information to write'); } } else { $num == 0x1c or return 0; $buff =~ /^CANON OPTIONAL DATA\0/ or return 0; $et->SetFileType(); $$dirInfo{DirName} = 'CanonVRD'; # set directory name for verbose output my $result = ProcessCanonVRD($et, $dirInfo); return $result if $result < 0; $result or $et->Warn('Format error in VRD file'); } return 1; } #------------------------------------------------------------------------------ # Write VRD data record as a block # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: VRD data block (may be empty if no VRD data) # Notes: Increments ExifTool CHANGED flag if changed sub WriteCanonVRD($$;$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access my $nvHash = $et->GetNewValueHash($Image::ExifTool::Extra{CanonVRD}); my $val = $et->GetNewValue($nvHash); $val = '' unless defined $val; return undef unless $et->IsOverwriting($nvHash, $val); ++$$et{CHANGED}; return $val; } #------------------------------------------------------------------------------ # Read/write CanonVRD information (from VRD file or VRD trailer) # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 not valid VRD, or -1 error writing # - updates DataPos to point to start of CanonVRD information # - updates DirLen to existing trailer length sub ProcessCanonVRD($$;$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $raf = $$dirInfo{RAF}; my $offset = $$dirInfo{Offset} || 0; my $outfile = $$dirInfo{OutFile}; my $dataPt = $$dirInfo{DataPt}; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my ($buff, $created, $err, $blockLen, $blockType, %didDir, $fromFile); # # The CanonVRD trailer has a 0x1c-byte header and a 0x40-byte footer, # each beginning with "CANON OPTIONAL DATA\0" and containing an int32u # giving the size of the contained data (at byte 0x18 and 0x14 respectively) # if ($raf) { $fromFile = 1; } else { unless ($dataPt) { return 1 unless $outfile; # create blank VRD data from scratch my $blank = $blankHeader . $blankFooter; $dataPt = \$blank; $verbose and print $out " Creating CanonVRD trailer\n"; $created = 1; } $raf = new File::RandomAccess($dataPt); } # read and validate the footer $raf->Seek(-0x40-$offset, 2) or return 0; $raf->Read($buff, 0x40) == 0x40 or return 0; $buff =~ /^CANON OPTIONAL DATA\0(.{4})/s or return 0; my $dirLen = unpack('N', $1) + 0x5c; # size including header+footer # read and validate the header unless ($dirLen < 0x80000000 and $raf->Seek(-$dirLen, 1) and $raf->Read($buff, 0x1c) == 0x1c and $buff =~ /^CANON OPTIONAL DATA\0/ and $raf->Seek(-0x1c, 1)) { $et->Warn('Bad CanonVRD trailer'); return 0; } # set variables returned in dirInfo hash $$dirInfo{DataPos} = $raf->Tell(); $$dirInfo{DirLen} = $dirLen; if ($outfile and ref $outfile eq 'SCALAR' and not length $$outfile) { # write directly to outfile to avoid duplicating data in memory $$outfile = $$dataPt unless $fromFile; # TRICKY! -- copy to outfile memory buffer and edit in place # (so we must disable all Write() calls for this case) $dataPt = $outfile; } if ($fromFile) { $dataPt = \$buff unless $dataPt; # read VRD data into memory if necessary unless ($raf->Read($$dataPt, $dirLen) == $dirLen) { $$dataPt = '' if $outfile and $outfile eq $dataPt; $et->Warn('Error reading CanonVRD data'); return 0; } } # exit quickly if writing and no CanonVRD tags are being edited if ($outfile and not exists $$et{EDIT_DIRS}{CanonVRD}) { print $out "$$et{INDENT} [nothing changed]\n" if $verbose; return 1 if $outfile eq $dataPt; return Write($outfile, $$dataPt) ? 1 : -1; } my $vrdType = 'VRD'; if ($outfile) { $verbose and not $created and print $out " Rewriting CanonVRD trailer\n"; # delete CanonVRD information if specified my $doDel = $$et{DEL_GROUP}{CanonVRD}; unless ($doDel) { $doDel = 1 if $$et{DEL_GROUP}{Trailer} and $$et{FILE_TYPE} ne 'VRD'; unless ($doDel) { # also delete if writing as a block (will get added back again later) if ($$et{NEW_VALUE}{$Image::ExifTool::Extra{CanonVRD}}) { # delete if this isn't version 4 $doDel = 1 unless $$dataPt =~ /^.{28}\xff\xff\0\xf7/s; } if ($$et{NEW_VALUE}{$Image::ExifTool::Extra{CanonDR4}} and not $doDel) { # delete if this is version 4 $doDel = 1 if $$dataPt =~ /^.{28}\xff\xff\0\xf7/s; } } } if ($doDel) { if ($$et{FILE_TYPE} eq 'VRD') { my $newVal = $et->GetNewValue('CanonVRD'); if ($newVal) { $verbose and print $out " Writing CanonVRD as a block\n"; if ($outfile eq $dataPt) { $$outfile = $newVal; } else { Write($outfile, $newVal) or return -1; } $$et{DidCanonVRD} = 1; ++$$et{CHANGED}; } else { $et->Error("Can't delete all CanonVRD information from a VRD file"); } } else { $verbose and print $out " Deleting CanonVRD trailer\n"; $$outfile = '' if $outfile eq $dataPt; ++$$et{CHANGED}; } return 1; } # write now and return if CanonVRD was set as a block my $val = $et->GetNewValue('CanonVRD'); unless ($val) { $val = $et->GetNewValue('CanonDR4'); $vrdType = 'DR4' if $val; } if ($val) { $verbose and print $out " Writing Canon$vrdType as a block\n"; # must wrap DR4 data with the VRD header/footer and edit record $val = WrapDR4($val) if $vrdType eq 'DR4'; if ($outfile eq $dataPt) { $$outfile = $val; } else { Write($outfile, $val) or return -1; } $$et{DidCanonVRD} = 1; ++$$et{CHANGED}; return 1; } } elsif ($verbose or $$et{HTML_DUMP}) { $et->DumpTrailer($dirInfo) if $$dirInfo{RAF}; } $tagTablePtr = GetTagTable('Image::ExifTool::CanonVRD::Main'); # validate VRD trailer and get position and length of edit record SetByteOrder('MM'); # VRD header/footer is big-endian my $pos = 0x1c; # start at end of header # loop through the VRD blocks for (;;) { my $end = $dirLen - 0x40; # end of last VRD block (and start of footer) if ($pos + 8 > $end) { last if $pos == $end; $blockLen = $end; # mark as invalid } else { $blockType = Get32u($dataPt, $pos); $blockLen = Get32u($dataPt, $pos + 4); } $vrdType = 'DR4' if $blockType eq 0xffff00f7; $pos += 8; # move to start of block if ($pos + $blockLen > $end) { $et->Warn('Possibly corrupt CanonVRD block'); last; } if ($verbose > 1 and not $outfile) { printf $out " CanonVRD block 0x%.8x ($blockLen bytes at offset 0x%x)\n", $blockType, $pos + $$dirInfo{DataPos}; if ($verbose > 2) { my %parms = ( Start => $pos, Addr => $pos + $$dirInfo{DataPos}, Out => $out, Prefix => $$et{INDENT}, ); $parms{MaxLen} = $verbose == 3 ? 96 : 2048 if $verbose < 5; HexDump($dataPt, $blockLen, %parms); } } my $tagInfo = $$tagTablePtr{$blockType}; unless ($tagInfo) { unless ($et->Options('Unknown')) { $pos += $blockLen; # step to next block next; } my $name = sprintf('CanonVRD_0x%.8x', $blockType); my $desc = $name; $desc =~ tr/_/ /; $tagInfo = { Name => $name, Description => $desc, Binary => 1, }; AddTagToTable($tagTablePtr, $blockType, $tagInfo); } if ($$tagInfo{SubDirectory}) { my $subTablePtr = GetTagTable($$tagInfo{SubDirectory}{TagTable}); my %subdirInfo = ( DataPt => $dataPt, DataLen => length $$dataPt, DataPos => $$dirInfo{DataPos}, DirStart => $pos, DirLen => $blockLen, DirName => $$tagInfo{Name}, Parent => 'CanonVRD', OutFile => $outfile, ); if ($outfile) { # set flag indicating we did this directory $didDir{$$tagInfo{Name}} = 1; my ($dat, $diff); if ($$et{NEW_VALUE}{$tagInfo}) { # write as a block $et->VPrint(0, "Writing $$tagInfo{Name} as a block\n"); $dat = $et->GetNewValue($tagInfo); $dat = '' unless defined $dat; ++$$et{CHANGED}; } else { $dat = $et->WriteDirectory(\%subdirInfo, $subTablePtr); } # update data with new directory if (defined $dat) { if (length $dat or $$et{FILE_TYPE} !~ /^(CRW|VRD)$/) { # replace with new block (updating the block length word) substr($$dataPt, $pos-4, $blockLen+4) = Set32u(length $dat) . $dat; } else { # remove block totally (CRW/VRD files only) substr($$dataPt, $pos-8, $blockLen+8) = ''; } # make necessary adjustments if block changes length if (($diff = length($$dataPt) - $dirLen) != 0) { $pos += $diff; $dirLen += $diff; # update the new VRD length in the header/footer Set32u($dirLen - 0x5c, $dataPt, 0x18); Set32u($dirLen - 0x5c, $dataPt, $dirLen - 0x2c); } } } else { # extract as a block if requested $et->ProcessDirectory(\%subdirInfo, $subTablePtr); } } else { $et->HandleTag($tagTablePtr, $blockType, substr($$dataPt, $pos, $blockLen)); } $pos += $blockLen; # step to next block } if ($outfile) { # create XMP block if necessary (CRW/VRD files only) if ($$et{ADD_DIRS}{CanonVRD} and not $didDir{XMP}) { my $subTablePtr = GetTagTable('Image::ExifTool::XMP::Main'); my $dat = $et->WriteDirectory({ Parent => 'CanonVRD' }, $subTablePtr); if ($dat) { my $blockLen = length $dat; substr($$dataPt, -0x40, 0) = Set32u(0xffff00f6) . Set32u(length $dat) . $dat; $dirLen = length $$dataPt; # update the new VRD length in the header/footer Set32u($dirLen - 0x5c, $dataPt, 0x18); Set32u($dirLen - 0x5c, $dataPt, $dirLen - 0x2c); } } # write CanonVRD trailer unless it is empty if (length $$dataPt) { Write($outfile, $$dataPt) or $err = 1 unless $outfile eq $dataPt; } else { $verbose and print $out " Deleting CanonVRD trailer\n"; } } elsif ($vrdType eq 'VRD' and (($$et{TAGS_FROM_FILE} and not $$et{EXCL_TAG_LOOKUP}{canonvrd}) or $$et{REQ_TAG_LOOKUP}{canonvrd})) { # extract CanonVRD block if copying tags, or if requested (and not DR4 info) $et->FoundTag('CanonVRD', $buff); } undef $buff; return $err ? -1 : 1; } 1; # end __END__ =head1 NAME Image::ExifTool::CanonVRD - Read/write Canon VRD and DR4 information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read and write VRD and DR4 Recipe Data information as written by the Canon Digital Photo Professional software. This information is written to VRD and DR4 files, and as a trailer in JPEG, CRW, CR2 and TIFF images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Bogdan and Gert Kello for decoding some tags. =head1 SEE ALSO L<Image::ExifTool::TagNames/CanonVRD Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/CaptureOne.pm�����������������������������������������������000644 �000765 �000024 �00000017550 12642461267 022331� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: CaptureOne.pm # # Description: Read Capture One EIP and COS files # # Revisions: 2009/11/01 - P. Harvey Created # # Notes: The EIP format is a ZIP file containing an image (IIQ or TIFF) # and some settings files (COS). COS files are XML based. #------------------------------------------------------------------------------ package Image::ExifTool::CaptureOne; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::XMP; use Image::ExifTool::ZIP; $VERSION = '1.04'; # CaptureOne COS XML tags # - tags are added dynamically when encountered # - this table is not listed in tag name docs %Image::ExifTool::CaptureOne::Main = ( GROUPS => { 0 => 'XML', 1 => 'XML', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::XMP::ProcessXMP, VARS => { NO_ID => 1 }, ColorCorrections => { ValueConv => '\$val' }, # (long list of floating point numbers) ); #------------------------------------------------------------------------------ # We found an XMP property name/value # Inputs: 0) attribute list ref, 1) attr hash ref, # 2) property name ref, 3) property value ref # Returns: true if value was changed sub HandleCOSAttrs($$$$) { my ($attrList, $attrs, $prop, $valPt) = @_; my $changed; if (not length $$valPt and defined $$attrs{K} and defined $$attrs{V}) { $$prop = $$attrs{K}; $$valPt = $$attrs{V}; # remove these attributes from the list my @attrs = @$attrList; @$attrList = ( ); my $a; foreach $a (@attrs) { if ($a eq 'K' or $a eq 'V') { delete $$attrs{$a}; } else { push @$attrList, $a; } } $changed = 1; } return $changed; } #------------------------------------------------------------------------------ # We found a COS property name/value # Inputs: 0) ExifTool object ref, 1) tag table ref # 2) reference to array of XMP property names (last is current property) # 3) property value, 4) attribute hash ref (not used here) # Returns: 1 if valid tag was found sub FoundCOS($$$$;$) { my ($et, $tagTablePtr, $props, $val, $attrs) = @_; my $tag = $$props[-1]; unless ($$tagTablePtr{$tag}) { $et->VPrint(0, " | [adding $tag]\n"); my $name = ucfirst $tag; $name =~ tr/-_a-zA-Z0-9//dc; return 0 unless length $tag; my %tagInfo = ( Name => $tag ); # try formatting any tag with "Date" in the name as a date # (shouldn't affect non-date tags) if ($name =~ /Date(?![a-z])/) { $tagInfo{Groups} = { 2 => 'Time' }; $tagInfo{ValueConv} = 'Image::ExifTool::XMP::ConvertXMPDate($val,1)'; $tagInfo{PrintConv} = '$self->ConvertDateTime($val)'; } AddTagToTable($tagTablePtr, $tag, \%tagInfo); } # convert from UTF8 to ExifTool Charset $val = $et->Decode($val, "UTF8"); # un-escape XML character entities $val = Image::ExifTool::XMP::UnescapeXML($val); $et->HandleTag($tagTablePtr, $tag, $val); return 0; } #------------------------------------------------------------------------------ # Extract information from a COS file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid XML file sub ProcessCOS($$) { my ($et, $dirInfo) = @_; # process using XMP module, but override handling of attributes and tags $$dirInfo{XMPParseOpts} = { AttrProc => \&HandleCOSAttrs, FoundProc => \&FoundCOS, }; my $tagTablePtr = GetTagTable('Image::ExifTool::CaptureOne::Main'); my $success = $et->ProcessDirectory($dirInfo, $tagTablePtr); delete $$dirInfo{XMLParseArgs}; return $success; } #------------------------------------------------------------------------------ # Extract information from a CaptureOne EIP file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 # Notes: Upon entry to this routine, the file type has already been verified # and the dirInfo hash contains a ZIP element unique to this process proc: # ZIP - reference to Archive::Zip object for this file sub ProcessEIP($$) { my ($et, $dirInfo) = @_; my $zip = $$dirInfo{ZIP}; my ($file, $buff, $status, $member, %parseFile); $et->SetFileType('EIP'); # must catch all Archive::Zip warnings local $SIG{'__WARN__'} = \&Image::ExifTool::ZIP::WarnProc; # find all manifest files my @members = $zip->membersMatching('^manifest\d*.xml$'); # and choose the one with the highest version number (any better ideas?) while (@members) { my $m = shift @members; my $f = $m->fileName(); next if $file and $file gt $f; $member = $m; $file = $f; } # get file names from our chosen manifest file if ($member) { ($buff, $status) = $zip->contents($member); if (not $status) { my $foundImage; while ($buff =~ m{<(RawPath|SettingsPath)>(.*?)</\1>}sg) { $file = $2; next unless $file =~ /\.(cos|iiq|jpe?g|tiff?)$/i; $parseFile{$file} = 1; # set flag to parse this file $foundImage = 1 unless $file =~ /\.cos$/i; } # ignore manifest unless it contained a valid image undef %parseFile unless $foundImage; } } # extract meta information from embedded files my $docNum = 0; @members = $zip->members(); # get all members foreach $member (@members) { # get filename of this ZIP member $file = $member->fileName(); next unless defined $file; $et->VPrint(0, "File: $file\n"); # set the document number and extract ZIP tags $$et{DOC_NUM} = ++$docNum; Image::ExifTool::ZIP::HandleMember($et, $member); if (%parseFile) { next unless $parseFile{$file}; } else { # reading the manifest didn't work, so look for image files in the # root directory and .cos files in the CaptureOne directory next unless $file =~ m{^([^/]+\.(iiq|jpe?g|tiff?)|CaptureOne/.*\.cos)$}i; } # extract the contents of the file # Note: this could use a LOT of memory here for RAW images... ($buff, $status) = $zip->contents($member); $status and $et->Warn("Error extracting $file"), next; if ($file =~ /\.cos$/i) { # process Capture One Settings files my %dirInfo = ( DataPt => \$buff, DirLen => length $buff, DataLen => length $buff, ); ProcessCOS($et, \%dirInfo); } else { # set HtmlDump error if necessary because it doesn't work with embedded files if ($$et{HTML_DUMP}) { $$et{HTML_DUMP}{Error} = "Sorry, can't dump images embedded in ZIP files"; } # process IIQ, JPEG and TIFF images $et->ExtractInfo(\$buff, { ReEntry => 1 }); } undef $buff; # (free memory now) } delete $$et{DOC_NUM}; return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::CaptureOne - Read Capture One EIP and COS files =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from Capture One EIP (Enhanced Image Package) and COS (Capture One Settings) files. =head1 NOTES The EIP format is a ZIP file containing an image (IIQ or TIFF) and some settings files (COS). =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/ZIP Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Casio.pm����������������������������������������������������000644 �000765 �000024 �00000174240 12642461272 021316� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Casio.pm # # Description: Casio EXIF maker notes tags # # Revisions: 12/09/2003 - P. Harvey Created # 09/10/2004 - P. Harvey Added MakerNote2 (thanks to Joachim Loehr) # # References: 1) http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html # 2) Joachim Loehr private communication # 3) http://homepage3.nifty.com/kamisaka/makernote/makernote_casio.htm # 4) http://gvsoft.homedns.org/exif/makernote-casio-type1.html # 5) Robert Chi private communication (EX-F1) # 6) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3701.html # JD) Jens Duttke private communication #------------------------------------------------------------------------------ package Image::ExifTool::Casio; use strict; use vars qw($VERSION); use Image::ExifTool::Exif; $VERSION = '1.37'; # older Casio maker notes (ref 1) %Image::ExifTool::Casio::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x0001 => { Name => 'RecordingMode' , Writable => 'int16u', PrintConv => { 1 => 'Single Shutter', 2 => 'Panorama', 3 => 'Night Scene', 4 => 'Portrait', 5 => 'Landscape', 7 => 'Panorama', #4 10 => 'Night Scene', #4 15 => 'Portrait', #4 16 => 'Landscape', #4 }, }, 0x0002 => { Name => 'Quality', Writable => 'int16u', PrintConv => { 1 => 'Economy', 2 => 'Normal', 3 => 'Fine' }, }, 0x0003 => { Name => 'FocusMode', Writable => 'int16u', PrintConv => { 2 => 'Macro', 3 => 'Auto', 4 => 'Manual', 5 => 'Infinity', 7 => 'Spot AF', #4 }, }, 0x0004 => [ { Name => 'FlashMode', Condition => '$self->{Model} =~ /^QV-(3500EX|8000SX)/', Writable => 'int16u', PrintConv => { 1 => 'Auto', 2 => 'On', 3 => 'Off', 4 => 'Off', #4 5 => 'Red-eye Reduction', #4 }, }, { Name => 'FlashMode', Writable => 'int16u', PrintConv => { 1 => 'Auto', 2 => 'On', 3 => 'Off', 4 => 'Red-eye Reduction', }, }, ], 0x0005 => { Name => 'FlashIntensity', Writable => 'int16u', PrintConv => { 11 => 'Weak', 12 => 'Low', #4 13 => 'Normal', 14 => 'High', #4 15 => 'Strong', }, }, 0x0006 => { Name => 'ObjectDistance', Writable => 'int32u', ValueConv => '$val / 1000', #4 ValueConvInv => '$val * 1000', PrintConv => '"$val m"', PrintConvInv => '$val=~s/\s*m$//;$val', }, 0x0007 => { Name => 'WhiteBalance', Writable => 'int16u', PrintConv => { 1 => 'Auto', 2 => 'Tungsten', 3 => 'Daylight', 4 => 'Fluorescent', 5 => 'Shade', 129 => 'Manual', }, }, # 0x0009 Bulb? (ref unknown) 0x000a => { Name => 'DigitalZoom', Writable => 'int32u', PrintHex => 1, PrintConv => { 0x10000 => 'Off', 0x10001 => '2x', 0x19999 => '1.6x', #4 0x20000 => '2x', #4 0x33333 => '3.2x', #4 0x40000 => '4x', #4 }, }, 0x000b => { Name => 'Sharpness', Writable => 'int16u', PrintConv => { 0 => 'Normal', 1 => 'Soft', 2 => 'Hard', 16 => 'Normal', #4 17 => '+1', #4 18 => '-1', #4 }, }, 0x000c => { Name => 'Contrast', Writable => 'int16u', PrintConv => { 0 => 'Normal', 1 => 'Low', 2 => 'High', 16 => 'Normal', #4 17 => '+1', #4 18 => '-1', #4 }, }, 0x000d => { Name => 'Saturation', Writable => 'int16u', PrintConv => { 0 => 'Normal', 1 => 'Low', 2 => 'High', 16 => 'Normal', #4 17 => '+1', #4 18 => '-1', #4 }, }, 0x0014 => { Name => 'ISO', Writable => 'int16u', Priority => 0, }, 0x0015 => { #JD (Similar to Type2 0x2001) Name => 'FirmwareDate', Writable => 'string', Format => 'undef', # the 'string' contains nulls Count => 18, PrintConv => q{ $_ = $val; if (/^(\d{2})(\d{2})\0\0(\d{2})(\d{2})\0\0(\d{2})(.{2})\0{2}$/) { my $yr = $1 + ($1 < 70 ? 2000 : 1900); my $sec = $6; $val = "$yr:$2:$3 $4:$5"; $val .= ":$sec" if $sec=~/^\d{2}$/; return $val; } tr/\0/./; s/\.+$//; return "Unknown ($_)"; }, PrintConvInv => q{ $_ = $val; if (/^(19|20)(\d{2}):(\d{2}):(\d{2}) (\d{2}):(\d{2})$/) { return "$2$3\0\0$4$5\0\0$6\0\0\0\0"; } elsif (/^Unknown\s*\((.*)\)$/i) { $_ = $1; tr/./\0/; return $_; } else { return undef; } }, }, 0x0016 => { #4 Name => 'Enhancement', Writable => 'int16u', PrintConv => { 1 => 'Off', 2 => 'Red', 3 => 'Green', 4 => 'Blue', 5 => 'Flesh Tones', }, }, 0x0017 => { #4 Name => 'ColorFilter', Writable => 'int16u', PrintConv => { 1 => 'Off', 2 => 'Black & White', 3 => 'Sepia', 4 => 'Red', 5 => 'Green', 6 => 'Blue', 7 => 'Yellow', 8 => 'Pink', 9 => 'Purple', }, }, 0x0018 => { #4 Name => 'AFPoint', Writable => 'int16u', Notes => 'may not be valid for all models', #JD PrintConv => { 1 => 'Center', 2 => 'Upper Left', 3 => 'Upper Right', 4 => 'Near Left/Right of Center', 5 => 'Far Left/Right of Center', 6 => 'Far Left/Right of Center/Bottom', 7 => 'Top Near-left', 8 => 'Near Upper/Left', 9 => 'Top Near-right', 10 => 'Top Left', 11 => 'Top Center', 12 => 'Top Right', 13 => 'Center Left', 14 => 'Center Right', 15 => 'Bottom Left', 16 => 'Bottom Center', 17 => 'Bottom Right', }, }, 0x0019 => { #4 Name => 'FlashIntensity', Writable => 'int16u', PrintConv => { 1 => 'Normal', 2 => 'Weak', 3 => 'Strong', }, }, 0x0e00 => { Name => 'PrintIM', Description => 'Print Image Matching', # crazy I know, but the offset for this value is entry-based # (QV-2100, QV-2900UX, QV-3500EX and QV-4000) even though the # offsets for other values isn't EntryBased => 1, SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main', }, }, ); # ref 2: %Image::ExifTool::Casio::Type2 = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x0002 => { Name => 'PreviewImageSize', Groups => { 2 => 'Image' }, Writable => 'int16u', Count => 2, PrintConv => '$val =~ tr/ /x/; $val', PrintConvInv => '$val =~ tr/x/ /; $val', }, 0x0003 => { Name => 'PreviewImageLength', Groups => { 2 => 'Image' }, OffsetPair => 0x0004, # point to associated offset DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, }, 0x0004 => { Name => 'PreviewImageStart', Groups => { 2 => 'Image' }, Flags => 'IsOffset', OffsetPair => 0x0003, # point to associated byte count DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, }, 0x0008 => { Name => 'QualityMode', Writable => 'int16u', PrintConv => { 0 => 'Economy', 1 => 'Normal', 2 => 'Fine', }, }, 0x0009 => { Name => 'CasioImageSize', Groups => { 2 => 'Image' }, Writable => 'int16u', PrintConv => { 0 => '640x480', 4 => '1600x1200', 5 => '2048x1536', 20 => '2288x1712', 21 => '2592x1944', 22 => '2304x1728', 36 => '3008x2008', }, }, 0x000d => { Name => 'FocusMode', Writable => 'int16u', PrintConv => { 0 => 'Normal', 1 => 'Macro', }, }, 0x0014 => { Name => 'ISO', Writable => 'int16u', Priority => 0, PrintConv => { 3 => 50, 4 => 64, 6 => 100, 9 => 200, }, }, 0x0019 => { Name => 'WhiteBalance', Writable => 'int16u', PrintConv => { 0 => 'Auto', 1 => 'Daylight', 2 => 'Shade', 3 => 'Tungsten', 4 => 'Fluorescent', 5 => 'Manual', }, }, 0x001d => { Name => 'FocalLength', Writable => 'rational64u', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val=~s/\s*mm$//;$val', }, 0x001f => { Name => 'Saturation', Writable => 'int16u', PrintConv => { 0 => 'Low', 1 => 'Normal', 2 => 'High', }, }, 0x0020 => { Name => 'Contrast', Writable => 'int16u', PrintConv => { 0 => 'Low', 1 => 'Normal', 2 => 'High', }, }, 0x0021 => { Name => 'Sharpness', Writable => 'int16u', PrintConv => { 0 => 'Soft', 1 => 'Normal', 2 => 'Hard', }, }, 0x0e00 => { Name => 'PrintIM', Description => 'Print Image Matching', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main', }, }, 0x2000 => { # this image data is also referenced by tags 3 and 4 # (nasty that they double-reference the image!) %Image::ExifTool::previewImageTagInfo, Groups => { 2 => 'Preview' }, }, 0x2001 => { #PH # I downloaded images from 12 different EX-Z50 cameras, and they showed # only 3 distinct dates here (2004:08:31 18:55, 2004:09:13 14:14, and # 2004:11:26 17:07), so I'm guessing this is a firmware version date - PH Name => 'FirmwareDate', Writable => 'string', Format => 'undef', # the 'string' contains nulls Count => 18, PrintConv => q{ $_ = $val; if (/^(\d{2})(\d{2})\0\0(\d{2})(\d{2})\0\0(\d{2})\0{4}$/) { my $yr = $1 + ($1 < 70 ? 2000 : 1900); return "$yr:$2:$3 $4:$5"; } tr/\0/./; s/\.+$//; return "Unknown ($_)"; }, PrintConvInv => q{ $_ = $val; if (/^(19|20)(\d{2}):(\d{2}):(\d{2}) (\d{2}):(\d{2})$/) { return "$2$3\0\0$4$5\0\0$6\0\0\0\0"; } elsif (/^Unknown\s*\((.*)\)$/i) { $_ = $1; tr/./\0/; return $_; } else { return undef; } }, }, 0x2011 => { Name => 'WhiteBalanceBias', Writable => 'int16u', Count => 2, }, 0x2012 => { Name => 'WhiteBalance', Writable => 'int16u', PrintConv => { 0 => 'Manual', 1 => 'Daylight', #3 2 => 'Cloudy', #PH (EX-ZR20, NC) 3 => 'Shade', #3 4 => 'Flash?', 6 => 'Fluorescent', #3 9 => 'Tungsten?', #PH (EX-Z77) 10 => 'Tungsten', #3 12 => 'Flash', }, }, 0x2021 => { #JD (guess) Name => 'AFPointPosition', Writable => 'int16u', Count => 4, PrintConv => q{ my @v = split ' ', $val; return 'n/a' if $v[0] == 65535 or not $v[1] or not $v[3]; sprintf "%.2g %.2g", $v[0]/$v[1], $v[2]/$v[3]; }, }, 0x2022 => { Name => 'ObjectDistance', Writable => 'int32u', ValueConv => '$val >= 0x20000000 ? "inf" : $val / 1000', ValueConvInv => '$val eq "inf" ? 0x20000000 : $val * 1000', PrintConv => '$val eq "inf" ? $val : "$val m"', PrintConvInv => '$val=~s/\s*m$//;$val', }, # 0x2023 looks interesting (values 0,1,2,3,5 in samples) - PH # - 1 for makeup mode shots (portrait?) (EX-Z450) 0x2034 => { Name => 'FlashDistance', Writable => 'int16u', }, # 0x203e - normally 62000, but 62001 for anti-shake mode - PH 0x2076 => { #PH (EX-Z450) # ("Enhancement" was taken already, so call this "SpecialEffect" for lack of a better name) Name => 'SpecialEffectMode', Writable => 'int8u', Count => 3, PrintConv => { '0 0 0' => 'Off', '1 0 0' => 'Makeup', '2 0 0' => 'Mist Removal', '3 0 0' => 'Vivid Landscape', # have also seen '1 1 1', '2 2 4', '4 3 3', '4 4 4' # '0 0 14' and '0 0 42' - premium auto night shot (EX-Z2300) # and '0 0 2' for Art HDR }, }, 0x2089 => [ #PH { Name => 'FaceInfo1', Condition => '$$valPt =~ /^(\0\0|.\x02\x80\x01\xe0)/s', # (EX-H5) SubDirectory => { TagTable => 'Image::ExifTool::Casio::FaceInfo1', ByteOrder => 'BigEndian', }, },{ Name => 'FaceInfo2', Condition => '$$valPt =~ /^\x02\x01/', # (EX-H20G,EX-ZR100) SubDirectory => { TagTable => 'Image::ExifTool::Casio::FaceInfo2', ByteOrder => 'LittleEndian', }, },{ Name => 'FaceInfoUnknown', Unknown => 1, }, ], # 0x208a - also some sort of face detection information - PH 0x211c => { #PH Name => 'FacesDetected', Format => 'int8u', }, 0x3000 => { Name => 'RecordMode', Writable => 'int16u', PrintConv => { 2 => 'Program AE', #3 3 => 'Shutter Priority', #3 4 => 'Aperture Priority', #3 5 => 'Manual', #3 6 => 'Best Shot', #3 17 => 'Movie', #PH (UHQ?) 19 => 'Movie (19)', #PH (HQ?, EX-P505) 20 => 'YouTube Movie', #PH '2 0' => 'Program AE', #PH (NC) '3 0' => 'Shutter Priority', #PH (NC) '4 0' => 'Aperture Priority', #PH (NC) '5 0' => 'Manual', #PH (NC) '6 0' => 'Best Shot', #PH (NC) }, }, 0x3001 => { #3 Name => 'ReleaseMode', Writable => 'int16u', PrintConv => { 1 => 'Normal', 3 => 'AE Bracketing', 11 => 'WB Bracketing', 13 => 'Contrast Bracketing', #(not sure about translation - PH) 19 => 'High Speed Burst', #PH (EX-FH25, 40fps) # have also seen: 2, 7(common), 14, 18 - PH }, }, 0x3002 => { Name => 'Quality', Writable => 'int16u', PrintConv => { 1 => 'Economy', 2 => 'Normal', 3 => 'Fine', }, }, 0x3003 => { Name => 'FocusMode', Writable => 'int16u', PrintConv => { 0 => 'Manual', #(guess at translation) 1 => 'Focus Lock', #(guess at translation) 2 => 'Macro', #3 3 => 'Single-Area Auto Focus', 5 => 'Infinity', #PH 6 => 'Multi-Area Auto Focus', 8 => 'Super Macro', #PH (EX-Z2300) }, }, 0x3006 => { Name => 'HometownCity', Writable => 'string', }, # unfortunately the BestShotMode numbers are model-dependent - PH #http://search.casio-intl.com/search?q=BEST+SHOT+sets+up+the+camera+CASIO+EX+ZR100+BEST+SHOT&btnG=Search&output=xml_no_dtd&oe=UTF-8&ie=UTF-8&site=casio-intl_com&client=search_casio-intl_com&proxystylesheet=search_casio-intl_com # NOTE: BestShotMode is not used unless RecordMode is "Best Shot" 0x3007 => [{ Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "EX-FC100"', Notes => 'EX-FC100', PrintConvColumns => 2, PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Portrait', 3 => 'Scenery', 4 => 'Portrait with Scenery', 5 => 'Children', 6 => 'Sports', 7 => 'Pet', 8 => 'Flower', 9 => 'Natural Green', 10 => 'Autumn Leaves', 11 => 'Sundown', 12 => 'High Speed Night Scene', 13 => 'Night Scene Portrait', 14 => 'Fireworks', 15 => 'High Speed Anti Shake', 16 => 'Multi-motion Image', 17 => 'High Speed Best Selection', 18 => 'Move Out CS', 19 => 'Move In CS', 20 => 'Pre-record Movie', 21 => 'For YouTube', }, },{ Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "EX-FC150"', Notes => 'EX-FC150', PrintConvColumns => 2, PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Expression CS', 3 => 'Baby CS', 4 => 'Child CS', 5 => 'Pet CS', 6 => 'Sports CS', 7 => 'Child High Speed Movie', 8 => 'Pet High Speed Movie', 9 => 'Sports High Speed Movie', 10 => 'Lag Correction', 11 => 'High Speed Lighting', 12 => 'High Speed Night Scene', 13 => 'High Speed Night Scene and Portrait', 14 => 'High Speed Anti Shake', 15 => 'High Speed Best Selection', 16 => 'Portrait', 17 => 'Scenery', 18 => 'Portrait With Scenery', 19 => 'Flower', 20 => 'Natural Green', 21 => 'Autumn Leaves', 22 => 'Sundown', 23 => 'Fireworks', 24 => 'Multi-motion Image', 25 => 'Move Out CS', 26 => 'Move In CS', 27 => 'Pre-record Movie', 28 => 'For YouTube', }, },{ Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "EX-FC200S"', Notes => 'EX-FC200S', PrintConvColumns => 2, PrintConv => { 0 => 'Off', 1 => 'Slow Motion Swing (behind)', 2 => 'Slow Motion Swing (front)', 3 => 'Self Slow Motion (behind)', 4 => 'Self Slow Motion (front)', 5 => 'Swing Burst', 6 => 'HDR', 7 => 'HDR Art', 8 => 'High Speed Night Scene', 9 => 'High Speed Night Scene and Portrait', 10 => 'High Speed Anti Shake', 11 => 'Multi SR Zoom', 12 => 'Blurred Background', 13 => 'Wide Shot', 14 => 'Slide Panorama', 15 => 'High Speed Best Selection', 16 => 'Lag Correction', 17 => 'High Speed CS', 18 => 'Child CS', 19 => 'Pet CS', 20 => 'Sports CS', 21 => 'Child High Speed Movie', 22 => 'Pet High Speed Movie', 23 => 'Sports High Speed Movie', 24 => 'Portrait', 25 => 'Scenery', 26 => 'Portrait with Scenery', 27 => 'Children', 28 => 'Sports', 29 => 'Candlelight Portrait', 30 => 'Party', 31 => 'Pet', 32 => 'Flower', 33 => 'Natural Green', 34 => 'Autumn Leaves', 35 => 'Soft Flowing Water', 36 => 'Splashing Water', 37 => 'Sundown', 38 => 'Fireworks', 39 => 'Food', 40 => 'Text', 41 => 'Collection', 42 => 'Auction', 43 => 'Pre-record Movie', 44 => 'For YouTube', }, },{ Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "EX-FH100"', Notes => 'EX-FH100', PrintConvColumns => 2, PrintConv => { 0 => 'Off', 1 => 'Expression CS', 2 => 'Baby CS', 3 => 'Child CS', 4 => 'Pet CS', 5 => 'Sports CS', 6 => 'Child High Speed Movie', 7 => 'Pet High Speed Movie', 8 => 'Sports High Speed Movie', 9 => 'Lag Correction', 10 => 'High Speed Lighting', 11 => 'High Speed Night Scene', 12 => 'High Speed Night Scene and Portrait', 13 => 'High Speed Anti Shake', 14 => 'High Speed Best Selection', 15 => 'Portrait', 16 => 'Scenery', 17 => 'Portrait With Scenery', 18 => 'Flower', 19 => 'Natural Green', 20 => 'Autumn Leaves', 21 => 'Sundown', 22 => 'Fireworks', 23 => 'Multi-motion Image', 24 => 'Move Out CS', 25 => 'Move In CS', 26 => 'Pre-record Movie', 27 => 'For YouTube', }, },{ Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "EX-G1"', Notes => 'EX-G1', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Auto Best Shot', 3 => 'Dynamic Photo', 4 => 'Interval Snapshot', 5 => 'Interval Movie', 6 => 'Portrait', 7 => 'Scenery', 8 => 'Portrait with Scenery', 9 => 'Underwater', 10 => 'Beach', 11 => 'Snow', 12 => 'Children', 13 => 'Sports', 14 => 'Pet', 15 => 'Flower', 16 => 'Sundown', 17 => 'Night Scene', 18 => 'Night Scene Portrait', 19 => 'Fireworks', 20 => 'Food', 21 => 'For eBay', 22 => 'Multi-motion Image', 23 => 'Pre-record Movie', 24 => 'For YouTube', 25 => 'Voice Recording', }, },{ Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "EX-S10"', Notes => 'EX-S10', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Portrait', 3 => 'Scenery', 4 => 'Portrait with Scenery', 5 => 'Self-portrait (1 person)', 6 => 'Self-portrait (2 people)', 7 => 'Children', 8 => 'Sports', 9 => 'Candlelight Portrait', 10 => 'Party', 11 => 'Pet', 12 => 'Flower', 13 => 'Natural Green', 14 => 'Autumn Leaves', 15 => 'Soft Flowing Water', 16 => 'Splashing Water', 17 => 'Sundown', 18 => 'Night Scene', 19 => 'Night Scene Portrait', 20 => 'Fireworks', 21 => 'Food', 22 => 'Text', 23 => 'Collection', 24 => 'Auction', 25 => 'Backlight', 26 => 'Anti Shake', 27 => 'High Sensitivity', 28 => 'Underwater', 29 => 'Monochrome', 30 => 'Retro', 31 => 'Business Cards', 32 => 'White Board', 33 => 'Silent', 34 => 'Pre-record Movie', 35 => 'For YouTube', 36 => 'Voice Recording', }, },{ Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "EX-S880"', Notes => 'EX-S880', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Portrait', 3 => 'Scenery', 4 => 'Portrait with Scenery', 5 => 'Children', 6 => 'Sports', 7 => 'Candlelight Portrait', 8 => 'Party', 9 => 'Pet', 10 => 'Flower', 11 => 'Natural Green', 12 => 'Autumn Leaves', 13 => 'Soft Flowing Water', # (wrong in documentation) 14 => 'Splashing Water', 15 => 'Sundown', 16 => 'Night Scene', 17 => 'Night Scene Portrait', 18 => 'Fireworks', 19 => 'Food', 20 => 'Text', 21 => 'Collection', 22 => 'Auction', 23 => 'Backlight', 24 => 'Anti Shake', 25 => 'High Sensitivity', 26 => 'Monochrome', 27 => 'Retro', 28 => 'Twilight', 29 => 'Layout (2 images)', 30 => 'Layout (3 images)', 31 => 'Auto Framing', 32 => 'Old Photo', 33 => 'Business Cards', 34 => 'White Board', 35 => 'Silent', 36 => 'Short Movie', 37 => 'Past Movie', 38 => 'For YouTube', 39 => 'Voice Recording', }, },{ Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "EX-Z16"', Notes => 'EX-Z16', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Portrait', 3 => 'Scenery', 4 => 'Portrait with Scenery', 5 => 'Children', 6 => 'Sports', 7 => 'Candlelight Portrait', 8 => 'Party', 9 => 'Pet', 10 => 'Flower', 11 => 'Soft Flowing Water', 12 => 'Sundown', 13 => 'Night Scene', 14 => 'Night Scene Portrait', 15 => 'Fireworks', 16 => 'Food', 17 => 'Text', 18 => 'For eBay', 19 => 'Backlight', 20 => 'Anti Shake', 21 => 'High Sensitivity', 22 => 'For YouTube', 23 => 'Voice Recording', }, },{ Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "EX-Z9"', Notes => 'EX-Z9', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Movie', 3 => 'Portrait', 4 => 'Scenery', 5 => 'Children', 6 => 'Sports', 7 => 'Candlelight Portrait', 8 => 'Party', 9 => 'Pet', 10 => 'Flower', 11 => 'Soft Flowing Water', 12 => 'Sundown', 13 => 'Night Scene', 14 => 'Night Scene Portrait', 15 => 'Fireworks', 16 => 'Food', 17 => 'Text', 18 => 'Auction', 19 => 'Backlight', 20 => 'Anti Shake', 21 => 'High Sensitivity', 22 => 'For YouTube', 23 => 'Voice Recording', }, },{ Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "EX-Z80"', Notes => 'EX-Z80', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Portrait', 3 => 'Scenery', 4 => 'Portrait with Scenery', 5 => 'Pet', 6 => 'Self-portrait (1 person)', 7 => 'Self-portrait (2 people)', 8 => 'Flower', 9 => 'Food', 10 => 'Fashion Accessories', 11 => 'Magazine', 12 => 'Monochrome', 13 => 'Retro', 14 => 'Cross Filter', 15 => 'Pastel', 16 => 'Night Scene', 17 => 'Night Scene Portrait', 18 => 'Party', 19 => 'Sports', 20 => 'Children', 21 => 'Sundown', 22 => 'Fireworks', 23 => 'Underwater', 24 => 'Backlight', 25 => 'High Sensitivity', 26 => 'Auction', 27 => 'White Board', 28 => 'Pre-record Movie', 29 => 'For YouTube', 30 => 'Voice Recording', }, },{ Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} =~ /^EX-Z(100|200)$/', Notes => 'EX-Z100 and EX-Z200', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Auto Best Shot', 3 => 'Portrait', 4 => 'Scenery', 5 => 'Portrait with Scenery', 6 => 'Self-portrait (1 person)', 7 => 'Self-portrait (2 people)', 8 => 'Children', 9 => 'Sports', 10 => 'Candlelight Portrait', 11 => 'Party', 12 => 'Pet', 13 => 'Flower', 14 => 'Natural Green', 15 => 'Autumn Leaves', 16 => 'Soft Flowing Water', 17 => 'Splashing Water', 18 => 'Sundown', 19 => 'Night Scene', 20 => 'Night Scene Portrait', 21 => 'Fireworks', 22 => 'Food', 23 => 'Text', 24 => 'Collection', 25 => 'Auction', 26 => 'Backlight', 27 => 'Anti Shake', 28 => 'High Sensitivity', 29 => 'Underwater', 30 => 'Monochrome', 31 => 'Retro', 32 => 'Twilight', 33 => 'ID Photo', 34 => 'Business Cards', 35 => 'White Board', 36 => 'Silent', 37 => 'Pre-record Movie', 38 => 'For YouTube', 39 => 'Voice Recording', }, },{ Name => 'BestShotMode', Writable => 'int16u', # (Movies have different BestShot numbers for this camera) Condition => '$$self{Model} eq "EX-Z750" and $$self{FILE_TYPE} eq "JPEG"', Notes => 'EX-Z750 JPEG images', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Portrait', 2 => 'Scenery', 3 => 'Portrait with Scenery', 4 => 'Children', 5 => 'Sports', 6 => 'Candlelight Portrait', 7 => 'Party', 8 => 'Pet', 9 => 'Flower', 10 => 'Natural Green', 11 => 'Soft Flowing Water', 12 => 'Splashing Water', 13 => 'Sundown', 14 => 'Night Scene', 15 => 'Night Scene Portrait', 16 => 'Fireworks', 17 => 'Food', 18 => 'Text', 19 => 'Collection', 20 => 'Backlight', 21 => 'Anti Shake', 22 => 'Pastel', 23 => 'Illustration', 24 => 'Cross Filter', 25 => 'Monochrome', 26 => 'Retro', 27 => 'Twilight', 28 => 'Old Photo', 29 => 'ID Photo', 30 => 'Business Cards', 31 => 'White Board', }, },{ Name => 'BestShotMode', Writable => 'int16u', # (Movies have different BestShot numbers for this camera) Condition => '$$self{Model} eq "EX-Z750" and $$self{FILE_TYPE} =~ /^(MOV|AVI)$/', Notes => 'EX-Z750 movies', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Portrait', 2 => 'Scenery', 3 => 'Night Scene', 4 => 'Fireworks', 5 => 'Backlight', 6 => 'Silent', }, },{ Name => 'BestShotMode', Writable => 'int16u', # (Movies have different BestShot numbers for this camera) Condition => '$$self{Model} eq "EX-Z850" and $$self{FILE_TYPE} eq "JPEG"', Notes => 'EX-Z850 JPEG images', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Portrait', 2 => 'Scenery', 3 => 'Portrait with Scenery', 4 => 'Children', 5 => 'Sports', 6 => 'Candlelight Portrait', 7 => 'Party', 8 => 'Pet', 9 => 'Flower', 10 => 'Natural Green', 11 => 'Autumn Leaves', 12 => 'Soft Flowing Water', 13 => 'Splashing Water', 14 => 'Sundown', 15 => 'Night Scene', 16 => 'Night Scene Portrait', 17 => 'Fireworks', 18 => 'Food', 19 => 'Text', 20 => 'Collection', 21 => 'For eBay', 22 => 'Backlight', 23 => 'Anti Shake', 24 => 'High Sensitivity', 25 => 'Pastel', 26 => 'Illustration', 27 => 'Cross Filter', 28 => 'Monochrome', 29 => 'Retro', 30 => 'Twilight', 31 => 'ID Photo', 32 => 'Old Photo', 33 => 'Business Cards', 34 => 'White Board', }, },{ Name => 'BestShotMode', Writable => 'int16u', # (Movies have different BestShot numbers for this camera) Condition => '$$self{Model} eq "EX-Z850" and $$self{FILE_TYPE} =~ /^(MOV|AVI)$/', Notes => 'EX-Z850 movies', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Portrait', 2 => 'Scenery', 3 => 'Night Scene', 4 => 'Fireworks', 5 => 'Backlight', 6 => 'High Sensitivity', 7 => 'Silent', 8 => 'Short Movie', 9 => 'Past Movie', }, },{ Name => 'BestShotMode', Writable => 'int16u', # (Movies have different BestShot numbers for this camera) Condition => '$$self{Model} eq "EX-Z1050"', Notes => 'EX-Z1050', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Movie', 3 => 'Portrait', 4 => 'Scenery', 5 => 'Portrait with Scenery', 6 => 'Children', 7 => 'Sports', 8 => 'Candlelight Portrait', 9 => 'Party', 10 => 'Pet', 11 => 'Flower', 12 => 'Natural Green', 13 => 'Autumn Leaves', 14 => 'Soft Flowing Water', 15 => 'Splashing Water', 16 => 'Sundown', 17 => 'Night Scene', 18 => 'Night Scene Portrait', 19 => 'Fireworks', 20 => 'Food', 21 => 'Text', 22 => 'Collection', 23 => 'For eBay', 24 => 'Backlight', 25 => 'Anti Shake', 26 => 'High Sensitivity', 27 => 'Underwater', 28 => 'Monochrome', 29 => 'Retro', 30 => 'Twilight', 31 => 'Layout (2 images)', 32 => 'Layout (3 images)', 33 => 'Auto Framing', 34 => 'ID Photo', 35 => 'Old Photo', 36 => 'Business Cards', 37 => 'White Board', 38 => 'Voice Recording', }, },{ Name => 'BestShotMode', Writable => 'int16u', # (Movies have different BestShot numbers for this camera) Condition => '$$self{Model} eq "EX-Z1080"', Notes => 'EX-Z1080', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Movie', 3 => 'Portrait', 4 => 'Scenery', 5 => 'Portrait with Scenery', 6 => 'Children', 7 => 'Sports', 8 => 'Candlelight Portrait', 9 => 'Party', 10 => 'Pet', 11 => 'Flower', 12 => 'Natural Green', 13 => 'Autumn Leaves', 14 => 'Soft Flowing Water', 15 => 'Splashing Water', 16 => 'Sundown', 17 => 'Night Scene', 18 => 'Night Scene Portrait', 19 => 'Fireworks', 20 => 'Food', 21 => 'Text', 22 => 'Collection', 23 => 'For eBay', 24 => 'Backlight', 25 => 'Anti Shake', 26 => 'High Sensitivity', 27 => 'Underwater', 28 => 'Monochrome', 29 => 'Retro', 30 => 'Twilight', 31 => 'Layout (2 images)', 32 => 'Layout (3 images)', 33 => 'Auto Framing', 34 => 'ID Photo', 35 => 'Old Photo', 36 => 'Business Cards', 37 => 'White Board', 38 => 'Short Movie', 39 => 'Past Movie', 40 => 'For YouTube', 41 => 'Voice Recording', }, },{ Name => 'BestShotMode', Writable => 'int16u', # (Movies have different BestShot numbers for this camera) Condition => '$$self{Model} eq "EX-Z1200" and $$self{FILE_TYPE} eq "JPEG"', Notes => 'EX-Z1200 JPEG images', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Portrait', 2 => 'Scenery', 3 => 'Portrait with Scenery', 4 => 'Children', 5 => 'Sports', 6 => 'Candlelight Portrait', 7 => 'Party', 8 => 'Pet', 9 => 'Flower', 10 => 'Natural Green', 11 => 'Autumn Leaves', 12 => 'Soft Flowing Water', 13 => 'Splashing Water', 14 => 'Sundown', 15 => 'Night Scene', 16 => 'Night Scene Portrait', 17 => 'Fireworks', 18 => 'Food', 19 => 'Text', 20 => 'Collection', 21 => 'Auction', 22 => 'Backlight', 23 => 'High Sensitivity', 24 => 'Underwater', 25 => 'Monochrome', 26 => 'Retro', 27 => 'Twilight', 28 => 'Layout (2 images)', 29 => 'Layout (3 images)', 30 => 'Auto Framing', 31 => 'ID Photo', 32 => 'Old Photo', 33 => 'Business Cards', 34 => 'White Board', }, },{ Name => 'BestShotMode', Writable => 'int16u', # (Movies have different BestShot numbers for this camera) Condition => '$$self{Model} eq "EX-Z1200" and $$self{FILE_TYPE} =~ /^(MOV|AVI)$/', Notes => 'EX-Z1200 movies', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Portrait', 2 => 'Scenery', 3 => 'Night Scene', 4 => 'Fireworks', 5 => 'Backlight', 6 => 'High Sensitivity', 7 => 'Silent', 8 => 'Short Movie', 9 => 'Past Movie', }, }, # (the following weren't numbered in the documentation: # G1, Z300, Z250, Z85, Z19, Z150, F1, FH20) { Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "EX-Z2000"', Notes => 'EX-Z2000', PrintConvColumns => 3, #http://support.casio.com/download_files/001/faq_pdf/Z2000/EXZ2000_BS_US_a.pdf PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Premium Auto', 3 => 'Dynamic Photo', 4 => 'Portrait', 5 => 'Scenery', 6 => 'Portrait with Scenery', 7 => 'Children', 8 => 'Sports', 9 => 'Candlelight Portrait', 10 => 'Party', 11 => 'Pet', 12 => 'Flower', 13 => 'Natural Green', 14 => 'Autumn Leaves', 15 => 'Soft Flowing Water', 16 => 'Splashing Water', 17 => 'Sundown', 18 => 'Night Scene', 19 => 'Night Scene Portrait', 20 => 'Fireworks', 21 => 'Food', 22 => 'Text', 23 => 'Collection', 24 => 'For eBay', 25 => 'Backlight', 26 => 'High Sensitivity', 27 => 'Oil Painting', 28 => 'Crayon', 29 => 'Water Color', 30 => 'Monochrome', 31 => 'Retro', 32 => 'Twilight', 33 => 'Multi-motion Image', 34 => 'ID Photo', 35 => 'Business Cards', 36 => 'White Board', 37 => 'Silent', 38 => 'Pre-record Movie', 39 => 'For YouTube', 40 => 'Voice Recording', }, },{ Name => 'BestShotMode', Writable => 'int16u', # (Movies have different BestShot numbers for this camera) Condition => '$$self{Model} eq "EX-Z2300"', Notes => 'EX-Z2300', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Premium Auto', 3 => 'Dynamic Photo', 4 => 'Portrait', 5 => 'Scenery', 6 => 'Portrait with Scenery', 7 => 'Children', 8 => 'Sports', 9 => 'Candlelight Portrait', 10 => 'Party', 11 => 'Pet', 12 => 'Flower', 13 => 'Natural Green', 14 => 'Autumn Leaves', 15 => 'Soft Flowing Water', 16 => 'Splashing Water', 17 => 'Sundown', 18 => 'Night Scene', 19 => 'Night Scene Portrait', 20 => 'Fireworks', 21 => 'Food', 22 => 'Text', 23 => 'Collection', 24 => 'Auction', 25 => 'Backlight', 26 => 'High Sensitivity', 27 => 'Oil Painting', 28 => 'Crayon', 29 => 'Water Color', 30 => 'Monochrome', 31 => 'Retro', 32 => 'Twilight', 33 => 'Multi-motion Image', 34 => 'ID Photo', 35 => 'Business Cards', 36 => 'White Board', 37 => 'Silent', 38 => 'Pre-record Movie', 39 => 'For YouTube', 40 => 'Voice Recording', }, },{ Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "EX-Z3000"', Notes => 'EX-Z3000', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'Portrait', 2 => 'Scenery', 3 => 'Portrait With Scenery', 4 => 'Children', 5 => 'Sports', 6 => 'Night Scene', }, },{ Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "EX-ZR100"', Notes => 'EX-ZR100', PrintConvColumns => 2, PrintConv => { 0 => 'Off', 1 => 'Child CS', 2 => 'Pet CS', 3 => 'Sports CS', 4 => 'Child High Speed Movie', 5 => 'Pet High Speed Movie', 6 => 'Sports High Speed Movie', 7 => 'Multi SR Zoom', 8 => 'Lag Correction', 9 => 'High Speed Night Scene', 10 => 'High Speed Night Scene and Portrait', 11 => 'High Speed Anti Shake', 12 => 'Portrait', 13 => 'Scenery', 14 => 'Portrait with Scenery', 15 => 'Children', 16 => 'Sports', 17 => 'Candlelight Portrait', 18 => 'Party', 19 => 'Pet', 20 => 'Flower', 21 => 'Natural Green', 22 => 'Autumn Leaves', 23 => 'Soft Flowing Water', 24 => 'Splashing Water', 25 => 'Sundown', 26 => 'Fireworks', 27 => 'Food', 28 => 'Text', 29 => 'Collection', 30 => 'For eBay', 31 => 'Pre-record Movie', 32 => 'For YouTube', }, },{ Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "EX-ZR200"', Notes => 'EX-ZR200', PrintConvColumns => 2, PrintConv => { 0 => 'Off', 1 => 'High Speed Night Scene', 2 => 'High Speed Night Scene and Portrait', 3 => 'High Speed Anti Shake', 4 => 'Blurred Background', 5 => 'Wide Shot', 6 => 'High Speed Best Selection', 7 => 'Lag Correction', 8 => 'Child CS', 9 => 'Pet CS', 10 => 'Sports CS', 11 => 'Child High Speed Movie', 12 => 'Pet High Speed Movie', 13 => 'Sports High Speed Movie', 14 => 'Portrait', 15 => 'Scenery', 16 => 'Portrait with Scenery', 17 => 'Children', 18 => 'Sports', 19 => 'Candlelight Portrait', 20 => 'Party', 21 => 'Pet', 22 => 'Flower', 23 => 'Natural Green', 24 => 'Autumn Leaves', 25 => 'Soft Flowing Water', 26 => 'Splashing Water', 27 => 'Sundown', 28 => 'Fireworks', 29 => 'Food', 30 => 'Text', 31 => 'Collection', 32 => 'Auction', 33 => 'Pre-record Movie', 34 => 'For YouTube', }, },{ #http://ftp.casio.co.jp/pub/world_manual/qv/en/qv_4000/BS.pdf Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "QV-4000"', Notes => 'QV-4000', PrintConvColumns => 3, PrintConv => { 0 => 'Off', 1 => 'People', 2 => 'Scenery', 3 => 'Flower', 4 => 'Night Scene', 5 => 'Soft Focus', # this camera also supports 100 modes that you can apparently load # from a CD-ROM, but I don't know how these map into these numbers }, },{ #Manfred, email Name => 'BestShotMode', Writable => 'int16u', Condition => '$$self{Model} eq "EX-ZR300"', Notes => 'EX-ZR300', PrintConvColumns => 2, PrintConv => { 1 => 'High Speed Night Shot', 2 => 'Blurred Background', 3 => 'Toy Camera', 4 => 'Soft Focus', 5 => 'Light Tone', 6 => 'Pop', 7 => 'Sepia', 8 => 'Monochrome', 9 => 'Miniature', 10 => 'Wide Shot', 11 => 'High Speed Best Selection', 12 => 'Lag Correction', 13 => 'High Speed Night Scene', 14 => 'High Speed Night Scene and Portrait', 15 => 'High Speed Anti Shake', 16 => 'Portrait', 17 => 'Scenery', 18 => 'Portrait with Scenery', 19 => 'Children', 20 => 'Sports', 21 => 'Candlelight Portrait', 22 => 'Party', 23 => 'Pet', 24 => 'Flower', 25 => 'Natural Green', 26 => 'Autumn Leaves', 27 => 'Soft Flowing Water', 28 => 'Splashing Water', 29 => 'Sundown', 30 => 'Fireworks', 31 => 'Food', 32 => 'Text', 33 => 'Collection', 34 => 'Auction', 35 => 'Prerecord (Movie)', 36 => 'For YouTube', }, },{ Name => 'BestShotMode', Writable => 'int16u', Notes => 'other models not yet decoded', # so we can't use a lookup as usual - PH PrintConv => '$val ? $val : "Off"', PrintConvInv => '$val=~/(\d+)/ ? $1 : 0', }], 0x3008 => { #3 Name => 'AutoISO', Writable => 'int16u', PrintConv => { 1 => 'On', 2 => 'Off', 7 => 'On (high sensitivity)', #PH 8 => 'On (anti-shake)', #PH 10 => 'High Speed', #PH (EX-FC150) }, }, 0x3009 => { #6 Name => 'AFMode', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Spot', 2 => 'Multi', 3 => 'Face Detection', 4 => 'Tracking', # (but saw this for "Family First" mode with EX-Z77 - PH) 5 => 'Intelligent', }, }, 0x3011 => { #3 Name => 'Sharpness', Format => 'int16s', Writable => 'undef', }, 0x3012 => { #3 Name => 'Contrast', Format => 'int16s', Writable => 'undef', }, 0x3013 => { #3 Name => 'Saturation', Format => 'int16s', Writable => 'undef', }, 0x3014 => { Name => 'ISO', Writable => 'int16u', Priority => 0, }, 0x3015 => { Name => 'ColorMode', Writable => 'int16u', PrintConv => { 0 => 'Off', 2 => 'Black & White', #PH (EX-Z400,FH20) 3 => 'Sepia', #PH (EX-Z400) }, }, 0x3016 => { Name => 'Enhancement', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Scenery', #PH (NC) (EX-Z77) 3 => 'Green', #PH (EX-Z77) 5 => 'Underwater', #PH (NC) (EX-Z77) 9 => 'Flesh Tones', #PH (EX-Z77) }, }, 0x3017 => { Name => 'ColorFilter', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Blue', #PH (FH20,Z400) 3 => 'Green', #PH (FH20) 4 => 'Yellow', #PH (FH20) 5 => 'Red', #PH (FH20,Z77) 6 => 'Purple', #PH (FH20,Z77,Z400) 7 => 'Pink', #PH (FH20) }, }, 0x301b => { #PH Name => 'ArtMode', Writable => 'int16u', PrintConv => { 0 => 'Normal', 8 => 'Silent Movie', 39 => 'HDR', # (EX-ZR10) 45 => 'Premium Auto', # (EX-2300) 47 => 'Painting', # (EX-2300) 49 => 'Crayon Drawing', # (EX-2300) 51 => 'Panorama', # (EX-ZR10) 52 => 'Art HDR', # (EX-ZR10,EX-Z3000) 62 => 'High Speed Night Shot', # (EX-ZR20) 64 => 'Monochrome', # (EX-ZR20) 67 => 'Toy Camera', # (EX-ZR20) 68 => 'Pop Art', # (EX-ZR20) 69 => 'Light Tone', # (EX-ZR20) }, }, 0x301c => { #3 Name => 'SequenceNumber', # for continuous shooting Writable => 'int16u', }, 0x301d => { #3 Name => 'BracketSequence', Writable => 'int16u', Count => 2, }, # 0x301e - MultiBracket ? (ref 3) 0x3020 => { #3 Name => 'ImageStabilization', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On', 2 => 'Best Shot', 3 => 'Movie Anti-Shake', # (EX-V7, EX-TR100) # (newer models write 2 numbers here - PH) '0 0' => 'Off', #PH '16 0' => 'Slow Shutter', #PH (EX-Z77) '18 0' => 'Anti-Shake', #PH (EX-Z77) '20 0' => 'High Sensitivity', #PH (EX-Z77) # EX-Z2000 in 'Auto' mode gives '0 3' or '2 3' (ref 6) '0 1' => 'Off (1)', #6 '0 3' => 'CCD Shift', #PH/6 ("Camera AS" in EX-Z2000 manual) '2 1' => 'High Sensitivity', #6 '2 3' => 'CCD Shift + High Sensitivity', #PH (EX-FC150) # have also seen: # '2 0' - EX-Z15 1/60s ISO 200, EX-Z77 1/1000s ISO 50 # '16 1' - EX-Z2300 1/125s ISO 50 }, }, 0x302a => { #PH (EX-Z450) Name => 'LightingMode', #(just guessing here) Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'High Dynamic Range', # (EX-Z77 anti-blur shot) 5 => 'Shadow Enhance Low', #(NC) 6 => 'Shadow Enhance High', #(NC) }, }, 0x302b => { #PH (EX-Z77) Name => 'PortraitRefiner', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => '+1', 2 => '+2', }, }, 0x3030 => { #PH (EX-Z450) Name => 'SpecialEffectLevel', Writable => 'int16u', }, 0x3031 => { #PH (EX-Z450) Name => 'SpecialEffectSetting', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Makeup', 2 => 'Mist Removal', 3 => 'Vivid Landscape', 16 => 'Art Shot', # (EX-Z2300) }, }, 0x3103 => { #5 Name => 'DriveMode', Writable => 'int16u', PrintConvColumns => 2, PrintConv => { OTHER => sub { # handle new values of future models my ($val, $inv) = @_; return $val =~ /(\d+)/ ? $1 : undef if $inv; return "Continuous ($val fps)"; }, 0 => 'Single Shot', #PH (NC) 1 => 'Continuous Shooting', # (1 fps for the EX-F1) 2 => 'Continuous (2 fps)', 3 => 'Continuous (3 fps)', 4 => 'Continuous (4 fps)', 5 => 'Continuous (5 fps)', 6 => 'Continuous (6 fps)', 7 => 'Continuous (7 fps)', 10 => 'Continuous (10 fps)', 12 => 'Continuous (12 fps)', 15 => 'Continuous (15 fps)', 20 => 'Continuous (20 fps)', 30 => 'Continuous (30 fps)', 40 => 'Continuous (40 fps)', #PH (EX-FH25) 60 => 'Continuous (60 fps)', 240 => 'Auto-N', }, }, 0x310b => { #PH (NC) Name => 'ArtModeParameters', Writable => 'int8u', Count => 3, # "0 1 0" = Toy camera 1 # "0 2 0" = Toy camera 1 # "0 3 0" = Toy camera 1 # Have also seen "0 0 0" and "2 0 0" }, 0x4001 => { #PH (AVI videos) Name => 'CaptureFrameRate', Writable => 'int16u', Count => -1, ValueConv => q{ my @v=split(" ",$val); return $val / 1000 if @v == 1; return $v[1] ? "$v[1]-$v[0]" : ($v[0] > 10000 ? $v[0] / 1000 : $v[0]); }, ValueConvInv => '$val <= 60 ? $val * 1000 : int($val) . " 0"', }, # 0x4002 - AVI videos, related to video quality or size - PH 0x4003 => { #PH (AVI and MOV videos) Name => 'VideoQuality', Writable => 'int16u', PrintConv => { 1 => 'Standard', # 2 - could this be LP? 3 => 'HD (720p)', 4 => 'Full HD (1080p)', # (EX-ZR10, 30fps 1920x1080) 5 => 'Low', # used in High Speed modes }, }, ); # face detection information (ref PH) (EX-H5) %Image::ExifTool::Casio::FaceInfo1 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, WRITABLE => 1, FIRST_ENTRY => 0, DATAMEMBER => [ 0 ], NOTES => 'Face-detect tags extracted from models such as the EX-H5.', 0x00 => { # (NC) Name => 'FacesDetected', DataMember => 'FacesDetected', RawConv => '$$self{FacesDetected} = $val', }, 0x01 => { Name => 'FaceDetectFrameSize', Condition => '$$self{FacesDetected} >= 1', # (otherwise zeros) Format => 'int16u[2]', }, 0x0d => { Name => 'Face1Position', Condition => '$$self{FacesDetected} >= 1', Format => 'int16u[4]', Notes => q{ left, top, right and bottom of detected face in coordinates of FaceDetectFrameSize, with increasing Y downwards }, }, # decoding NOT CONFIRMED (NC) for faces 2-10! 0x7c => { Name => 'Face2Position', Condition => '$$self{FacesDetected} >= 2', Format => 'int16u[4]', }, 0xeb => { Name => 'Face3Position', Condition => '$$self{FacesDetected} >= 3', Format => 'int16u[4]', }, 0x15a => { Name => 'Face4Position', Condition => '$$self{FacesDetected} >= 4', Format => 'int16u[4]', }, 0x1c9 => { Name => 'Face5Position', Condition => '$$self{FacesDetected} >= 5', Format => 'int16u[4]', }, 0x238 => { Name => 'Face6Position', Condition => '$$self{FacesDetected} >= 6', Format => 'int16u[4]', }, 0x2a7 => { Name => 'Face7Position', Condition => '$$self{FacesDetected} >= 7', Format => 'int16u[4]', }, 0x316 => { Name => 'Face8Position', Condition => '$$self{FacesDetected} >= 8', Format => 'int16u[4]', }, 0x385 => { Name => 'Face9Position', Condition => '$$self{FacesDetected} >= 9', Format => 'int16u[4]', }, 0x3f4 => { Name => 'Face10Position', Condition => '$$self{FacesDetected} >= 10', Format => 'int16u[4]', }, ); # face detection information (ref PH) (EX-ZR100) %Image::ExifTool::Casio::FaceInfo2 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, WRITABLE => 1, FIRST_ENTRY => 0, DATAMEMBER => [ 2 ], NOTES => 'Face-detect tags extracted from models such as the EX-H20G and EX-ZR100.', 0x02 => { Name => 'FacesDetected', DataMember => 'FacesDetected', RawConv => '$$self{FacesDetected} = $val', }, 0x04 => { Name => 'FaceDetectFrameSize', Condition => '$$self{FacesDetected} >= 1', Format => 'int16u[2]', }, 0x08 => { Name => 'FaceOrientation', Condition => '$$self{FacesDetected} >= 1', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', 3 => 'Rotate 180', # (NC) # (have seen 64 here, but image had no face) }, Notes => 'orientation of face relative to unrotated image', }, # 0x0a - FaceDetectFrameSize again # 0x11 - Face1Detected flag (1=detected) 0x18 => { Name => 'Face1Position', Condition => '$$self{FacesDetected} >= 1', Format => 'int16u[4]', Notes => q{ left, top, right and bottom of detected face in coordinates of FaceDetectFrameSize, with increasing Y downwards }, }, # 0x45 - Face2Detected, etc... 0x4c => { Name => 'Face2Position', Condition => '$$self{FacesDetected} >= 2', Format => 'int16u[4]', }, 0x80 => { Name => 'Face3Position', Condition => '$$self{FacesDetected} >= 3', Format => 'int16u[4]', }, 0xb4 => { Name => 'Face4Position', Condition => '$$self{FacesDetected} >= 4', Format => 'int16u[4]', }, 0xe8 => { Name => 'Face5Position', Condition => '$$self{FacesDetected} >= 5', Format => 'int16u[4]', }, 0x11c => { Name => 'Face6Position', Condition => '$$self{FacesDetected} >= 6', Format => 'int16u[4]', }, 0x150 => { Name => 'Face7Position', Condition => '$$self{FacesDetected} >= 7', Format => 'int16u[4]', }, 0x184 => { Name => 'Face8Position', Condition => '$$self{FacesDetected} >= 8', Format => 'int16u[4]', }, 0x1b8 => { Name => 'Face9Position', Condition => '$$self{FacesDetected} >= 9', Format => 'int16u[4]', }, 0x1ec => { Name => 'Face10Position', Condition => '$$self{FacesDetected} >= 10', Format => 'int16u[4]', }, ); # Casio APP1 QVCI segment found in QV-7000SX images (ref PH) %Image::ExifTool::Casio::QVCI = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, NOTES => q{ This information is found in the APP1 QVCI segment of JPEG images from the Casio QV-7000SX. }, 0x2c => { Name => 'CasioQuality', PrintConv => { 1 => 'Economy', 2 => 'Normal', 3 => 'Fine', 4 => 'Super Fine', }, }, 0x37 => { Name => 'FocalRange', Unknown => 1, }, 0x4d => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Format => 'string[20]', Groups => { 2 => 'Time' }, ValueConv => '$val=~tr/./:/; $val=~s/(\d+:\d+:\d+):/$1 /; $val', PrintConv => '$self->ConvertDateTime($val)', }, 0x62 => { Name => 'ModelType', Format => 'string[7]', }, 0x72 => { # could be serial number or manufacture date in form YYMMDDxx ? Name => 'ManufactureIndex', Format => 'string[9]', }, 0x7c => { Name => 'ManufactureCode', Format => 'string[9]', }, ); # tags in Casio AVI videos (ref PH) %Image::ExifTool::Casio::AVI = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, NOTES => 'This information is found in Casio GV-10 AVI videos.', 0 => { Name => 'Software', # (equivalent to RIFF Software tag) Format => 'string', }, ); 1; # end __END__ =head1 NAME Image::ExifTool::Casio - Casio EXIF maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Casio maker notes in EXIF information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html> =back =head1 ACKNOWLEDGEMENTS Thanks to Joachim Loehr for adding support for the type 2 maker notes, and Jens Duttke and Robert Chi for decoding some tags. =head1 SEE ALSO L<Image::ExifTool::TagNames/Casio Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/����������������������������������������������������000755 �000765 �000024 �00000000000 12650447263 021306� 5����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset.pm��������������������������������������������������000644 �000765 �000024 �00000037150 12643517235 021651� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Charset.pm # # Description: ExifTool character encoding routines # # Revisions: 2009/08/28 - P. Harvey created # 2010/01/20 - P. Harvey complete re-write # 2010/07/16 - P. Harvey added UTF-16 support #------------------------------------------------------------------------------ package Image::ExifTool::Charset; use strict; use vars qw($VERSION %csType); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.09'; my %charsetTable; # character set tables we've loaded # lookup for converting Unicode to 1-byte character sets my %unicode2byte = ( Latin => { # pre-load Latin (cp1252) for speed 0x20ac => 0x80, 0x0160 => 0x8a, 0x2013 => 0x96, 0x201a => 0x82, 0x2039 => 0x8b, 0x2014 => 0x97, 0x0192 => 0x83, 0x0152 => 0x8c, 0x02dc => 0x98, 0x201e => 0x84, 0x017d => 0x8e, 0x2122 => 0x99, 0x2026 => 0x85, 0x2018 => 0x91, 0x0161 => 0x9a, 0x2020 => 0x86, 0x2019 => 0x92, 0x203a => 0x9b, 0x2021 => 0x87, 0x201c => 0x93, 0x0153 => 0x9c, 0x02c6 => 0x88, 0x201d => 0x94, 0x017e => 0x9e, 0x2030 => 0x89, 0x2022 => 0x95, 0x0178 => 0x9f, }, ); # bit flags for all supported character sets # (this number must be correct because it dictates the decoding algorithm!) # 0x001 = character set requires a translation module # 0x002 = inverse conversion not yet supported by Recompose() # 0x080 = some characters with codepoints in the range 0x00-0x7f are remapped # 0x100 = 1-byte fixed-width characters # 0x200 = 2-byte fixed-width characters # 0x400 = 4-byte fixed-width characters # 0x800 = 1- and 2-byte variable-width characters, or 1-byte # fixed-width characters that map into multiple codepoints # Note: In its public interface, ExifTool can currently only support type 0x101 # and lower character sets because strings are only converted if they # contain characters above 0x7f and there is no provision for specifying # the byte order for input/output values %csType = ( UTF8 => 0x100, ASCII => 0x100, # (treated like UTF8) Arabic => 0x101, Baltic => 0x101, Cyrillic => 0x101, Greek => 0x101, Hebrew => 0x101, Latin => 0x101, Latin2 => 0x101, MacCroatian => 0x101, MacCyrillic => 0x101, MacGreek => 0x101, MacIceland => 0x101, MacLatin2 => 0x101, MacRoman => 0x101, MacRomanian => 0x101, MacTurkish => 0x101, Thai => 0x101, Turkish => 0x101, Vietnam => 0x101, MacArabic => 0x103, # (directional characters not supported) PDFDoc => 0x181, Unicode => 0x200, # (UCS2) UCS2 => 0x200, UTF16 => 0x200, Symbol => 0x201, JIS => 0x201, UCS4 => 0x400, MacChineseCN => 0x803, MacChineseTW => 0x803, MacHebrew => 0x803, # (directional characters not supported) MacKorean => 0x803, MacRSymbol => 0x803, MacThai => 0x803, MacJapanese => 0x883, ShiftJIS => 0x883, ); #------------------------------------------------------------------------------ # Load character set module # Inputs: 0) Module name # Returns: Reference to lookup hash, or undef on error sub LoadCharset($) { my $charset = shift; my $conv = $charsetTable{$charset}; unless ($conv) { # load translation module my $module = "Image::ExifTool::Charset::$charset"; no strict 'refs'; if (%$module or eval "require $module") { $conv = $charsetTable{$charset} = \%$module; } } return $conv; } #------------------------------------------------------------------------------ # Does an array contain valid UTF-16 characters? # Inputs: 0) array reference to list of UCS-2 values # Returns: 0=invalid UTF-16, 1=valid UTF-16 with no surrogates, 2=valid UTF-16 with surrogates sub IsUTF16($) { local $_; my $uni = shift; my $surrogate; foreach (@$uni) { my $hiBits = ($_ & 0xfc00); if ($hiBits == 0xfc00) { # check for invalid values in UTF-16 return 0 if $_ == 0xffff or $_ == 0xfffe or ($_ >= 0xfdd0 and $_ <= 0xfdef); } elsif ($surrogate) { return 0 if $hiBits != 0xdc00; $surrogate = 0; } else { return 0 if $hiBits == 0xdc00; $surrogate = 1 if $hiBits == 0xd800; } } return 1 if not defined $surrogate; return 2 unless $surrogate; return 0; } #------------------------------------------------------------------------------ # Decompose string with specified encoding into an array of integer code points # Inputs: 0) ExifTool object ref (or undef), 1) string, 2) character set name, # 3) optional byte order ('II','MM','Unknown' or undef to use ExifTool ordering) # Returns: Reference to array of Unicode values # Notes: Accepts any type of character set # - byte order only used for fixed-width 2-byte and 4-byte character sets # - byte order mark observed and then removed with UCS2 and UCS4 # - no warnings are issued if ExifTool object is not provided sub Decompose($$$;$) { local $_; my ($et, $val, $charset) = @_; # ($byteOrder assigned later if required) my $type = $csType{$charset}; my (@uni, $conv); if ($type & 0x001) { $conv = LoadCharset($charset); unless ($conv) { # (shouldn't happen) $et->Warn("Invalid character set $charset") if $et; return \@uni; # error! } } elsif ($type == 0x100) { # convert ASCII and UTF8 (treat ASCII as UTF8) if ($] < 5.006001) { # do it ourself @uni = Image::ExifTool::UnpackUTF8($val); } else { # handle warnings from malformed UTF-8 undef $Image::ExifTool::evalWarning; local $SIG{'__WARN__'} = \&Image::ExifTool::SetWarning; # (somehow the meaning of "U0" was reversed in Perl 5.10.0!) @uni = unpack($] < 5.010000 ? 'U0U*' : 'C0U*', $val); # issue warning if we had errors if ($Image::ExifTool::evalWarning and $et and not $$et{WarnBadUTF8}) { $et->Warn('Malformed UTF-8 character(s)'); $$et{WarnBadUTF8} = 1; } } return \@uni; # all done! } if ($type & 0x100) { # 1-byte fixed-width characters @uni = unpack('C*', $val); foreach (@uni) { $_ = $$conv{$_} if defined $$conv{$_}; } } elsif ($type & 0x600) { # 2-byte or 4-byte fixed-width characters my $unknown; my $byteOrder = $_[3]; if (not $byteOrder) { $byteOrder = GetByteOrder(); } elsif ($byteOrder eq 'Unknown') { $byteOrder = GetByteOrder(); $unknown = 1; } my $fmt = $byteOrder eq 'MM' ? 'n*' : 'v*'; if ($type & 0x400) { # 4-byte $fmt = uc $fmt; # unpack as 'N*' or 'V*' # honour BOM if it exists $val =~ s/^(\0\0\xfe\xff|\xff\xfe\0\0)// and $fmt = $1 eq "\0\0\xfe\xff" ? 'N*' : 'V*'; undef $unknown; # (byte order logic applies to 2-byte only) } elsif ($val =~ s/^(\xfe\xff|\xff\xfe)//) { $fmt = $1 eq "\xfe\xff" ? 'n*' : 'v*'; undef $unknown; } # convert from UCS2 or UCS4 @uni = unpack($fmt, $val); if (not $conv) { # no translation necessary if ($unknown) { # check the byte order my (%bh, %bl); my ($zh, $zl) = (0, 0); foreach (@uni) { $bh{$_ >> 8} = 1; $bl{$_ & 0xff} = 1; ++$zh unless $_ & 0xff00; ++$zl unless $_ & 0x00ff; } # count the number of unique values in the hi and lo bytes my ($bh, $bl) = (scalar(keys %bh), scalar(keys %bl)); # the byte with the greater number of unique values should be # the low-order byte, otherwise the byte which is zero more # often is likely the high-order byte if ($bh > $bl or ($bh == $bl and $zl > $zh)) { # we guessed wrong, so decode using the other byte order $fmt =~ tr/nvNV/vnVN/; @uni = unpack($fmt, $val); } } # handle surrogate pairs of UTF-16 if ($charset eq 'UTF16') { my $i; for ($i=0; $i<$#uni; ++$i) { next unless ($uni[$i] & 0xfc00) == 0xd800 and ($uni[$i+1] & 0xfc00) == 0xdc00; my $cp = 0x10000 + (($uni[$i] & 0x3ff) << 10) + ($uni[$i+1] & 0x3ff); splice(@uni, $i, 2, $cp); } } } elsif ($unknown) { # count encoding errors as we do the translation my $e1 = 0; foreach (@uni) { defined $$conv{$_} and $_ = $$conv{$_}, next; ++$e1; } # try the other byte order if we had any errors if ($e1) { $fmt = $byteOrder eq 'MM' ? 'v*' : 'n*'; #(reversed) my @try = unpack($fmt, $val); my $e2 = 0; foreach (@try) { defined $$conv{$_} and $_ = $$conv{$_}, next; ++$e2; } # use this byte order if there are fewer errors return \@try if $e2 < $e1; } } else { # translate any characters found in the lookup foreach (@uni) { $_ = $$conv{$_} if defined $$conv{$_}; } } } else { # variable-width characters # unpack into bytes my @bytes = unpack('C*', $val); while (@bytes) { my $ch = shift @bytes; my $cv = $$conv{$ch}; # pass straight through if no translation $cv or push(@uni, $ch), next; # byte translates into single Unicode character ref $cv or push(@uni, $cv), next; # byte maps into multiple Unicode characters ref $cv eq 'ARRAY' and push(@uni, @$cv), next; # handle 2-byte character codes $ch = shift @bytes; if (defined $ch) { if ($$cv{$ch}) { $cv = $$cv{$ch}; ref $cv or push(@uni, $cv), next; push @uni, @$cv; # multiple Unicode characters } else { push @uni, ord('?'); # encoding error unshift @bytes, $ch; } } else { push @uni, ord('?'); # encoding error } } } return \@uni; } #------------------------------------------------------------------------------ # Convert array of code point integers into a string with specified encoding # Inputs: 0) ExifTool ref (or undef), 1) unicode character array ref, # 2) character set (note: not all types are supported) # 3) byte order ('MM' or 'II', multi-byte sets only, defaults to current byte order) # Returns: converted string (truncated at null character if it exists), empty on error # Notes: converts elements of input character array to new code points # - ExifTool ref may be undef provided $charset is defined sub Recompose($$;$$) { local $_; my ($et, $uni, $charset) = @_; # ($byteOrder assigned later if required) my ($outVal, $conv, $inv); $charset or $charset = $$et{OPTIONS}{Charset}; my $csType = $csType{$charset}; if ($csType == 0x100) { # UTF8 (also treat ASCII as UTF8) if ($] >= 5.006001) { # let Perl do it $outVal = pack('C0U*', @$uni); } else { # do it ourself $outVal = Image::ExifTool::PackUTF8(@$uni); } $outVal =~ s/\0.*//s; # truncate at null terminator return $outVal; } # get references to forward and inverse lookup tables if ($csType & 0x801) { $conv = LoadCharset($charset); unless ($conv) { $et->Warn("Missing charset $charset") if $et; return ''; } $inv = $unicode2byte{$charset}; # generate inverse lookup if necessary unless ($inv) { if (not $csType or $csType & 0x802) { $et->Warn("Invalid destination charset $charset") if $et; return ''; } # prepare table to convert from Unicode to 1-byte characters my ($char, %inv); foreach $char (keys %$conv) { $inv{$$conv{$char}} = $char; } $inv = $unicode2byte{$charset} = \%inv; } } if ($csType & 0x100) { # 1-byte fixed-width # convert to specified character set foreach (@$uni) { next if $_ < 0x80; $$inv{$_} and $_ = $$inv{$_}, next; # our tables omit 1-byte characters with the same values as Unicode, # so pass them straight through after making sure there isn't a # different character with this byte value next if $_ < 0x100 and not $$conv{$_}; $_ = ord('?'); # set invalid characters to '?' if ($et and not $$et{EncodingError}) { $et->Warn("Some character(s) could not be encoded in $charset"); $$et{EncodingError} = 1; } } # repack as an 8-bit string and truncate at null $outVal = pack('C*', @$uni); $outVal =~ s/\0.*//s; } else { # 2-byte and 4-byte fixed-width # convert if required if ($inv) { $$inv{$_} and $_ = $$inv{$_} foreach @$uni; } # generate surrogate pairs of UTF-16 if ($charset eq 'UTF16') { my $i; for ($i=0; $i<@$uni; ++$i) { next unless $$uni[$i] >= 0x10000 and $$uni[$i] < 0x10ffff; my $t = $$uni[$i] - 0x10000; my $w1 = 0xd800 + (($t >> 10) & 0x3ff); my $w2 = 0xdc00 + ($t & 0x3ff); splice(@$uni, $i, 1, $w1, $w2); ++$i; # skip surrogate pair } } # pack as 2- or 4-byte integer in specified byte order my $byteOrder = $_[3] || GetByteOrder(); my $fmt = $byteOrder eq 'MM' ? 'n*' : 'v*'; $fmt = uc($fmt) if $csType & 0x400; $outVal = pack($fmt, @$uni); } return $outVal; } 1; # end __END__ =head1 NAME Image::ExifTool::Charset - ExifTool character encoding routines =head1 SYNOPSIS This module is required by Image::ExifTool. =head1 DESCRIPTION This module contains routines used by ExifTool to translate special character sets. Currently, the following character sets are supported: UTF8, UTF16, UCS2, UCS4, Arabic, Baltic, Cyrillic, Greek, Hebrew, JIS, Latin, Latin2, MacArabic, MacChineseCN, MacChineseTW, MacCroatian, MacCyrillic, MacGreek, MacHebrew, MacIceland, MacJapanese, MacKorean, MacLatin2, MacRSymbol, MacRoman, MacRomanian, MacThai, MacTurkish, PDFDoc, RSymbol, ShiftJIS, Symbol, Thai, Turkish, Vietnam However, only some of these character sets are available to the user via ExifTool options -- the multi-byte character sets are used only internally when decoding certain types of information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/DarwinCore.pm�����������������������������������������������000644 �000765 �000024 �00000031676 12642461273 022323� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: DarwinCore.pm # # Description: Darwin Core XMP tags # # Revisions: 2013-01-28 - P. Harvey Created # # References: 1) http://rs.tdwg.org/dwc/index.htm #------------------------------------------------------------------------------ package Image::ExifTool::DarwinCore; use strict; use vars qw($VERSION); use Image::ExifTool::XMP; $VERSION = '1.01'; my %dateTimeInfo = ( # NOTE: Do NOT put "Groups" here because Groups hash must not be common! Writable => 'date', Shift => 'Time', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,undef,1)', ); # Darwin Core tags %Image::ExifTool::DarwinCore::Main = ( GROUPS => { 0 => 'XMP', 1 => 'XMP-dwc', 2 => 'Other' }, NAMESPACE => 'dwc', WRITABLE => 'string', NOTES => q{ Tags defined in the Darwin Core (dwc) XMP namespace. See L<http://rs.tdwg.org/dwc/index.htm> for the official specification. }, Event => { Name => 'DCEvent', # (avoid conflict with XMP-iptcExt:Event) FlatName => 'Event', Struct => { STRUCT_NAME => 'DarwinCore Event', NAMESPACE => 'dwc', day => { Writable => 'integer', Groups => { 2 => 'Time' } }, earliestDate => { %dateTimeInfo, Groups => { 2 => 'Time' } }, endDayOfYear => { Writable => 'integer', Groups => { 2 => 'Time' } }, eventID => { }, eventRemarks => { Writable => 'lang-alt' }, eventTime => { %dateTimeInfo, Groups => { 2 => 'Time' } }, fieldNotes => { }, fieldNumber => { }, habitat => { }, latestDate => { %dateTimeInfo, Groups => { 2 => 'Time' } }, month => { Writable => 'integer', Groups => { 2 => 'Time' } }, samplingEffort => { }, samplingProtocol => { }, startDayOfYear => { Writable => 'integer', Groups => { 2 => 'Time' } }, verbatimEventDate => { Groups => { 2 => 'Time' } }, year => { Writable => 'integer', Groups => { 2 => 'Time' } }, }, }, # tweak a few of the flattened tag names EventEventID => { Name => 'EventID', Flat => 1 }, EventEventRemarks => { Name => 'EventRemarks', Flat => 1 }, EventEventTime => { Name => 'EventTime', Flat => 1 }, GeologicalContext => { FlatName => '', # ('GeologicalContext' is too long) Struct => { STRUCT_NAME => 'DarwinCore GeologicalContext', NAMESPACE => 'dwc', bed => { }, earliestAgeOrLowestStage => { }, earliestEonOrLowestEonothem => { }, earliestEpochOrLowestSeries => { }, earliestEraOrLowestErathem => { }, earliestPeriodOrLowestSystem=> { }, formation => { }, geologicalContextID => { }, group => { }, highestBiostratigraphicZone => { }, latestAgeOrHighestStage => { }, latestEonOrHighestEonothem => { }, latestEpochOrHighestSeries => { }, latestEraOrHighestErathem => { }, latestPeriodOrHighestSystem => { }, lithostratigraphicTerms => { }, lowestBiostratigraphicZone => { }, member => { }, }, }, GeologicalContextBed => { Name => 'GeologicalContextBed', Flat => 1 }, GeologicalContextFormation => { Name => 'GeologicalContextFormation', Flat => 1 }, GeologicalContextGroup => { Name => 'GeologicalContextGroup', Flat => 1 }, GeologicalContextMember => { Name => 'GeologicalContextMember', Flat => 1 }, Identification => { FlatName => '', # ('Identification' is redundant) Struct => { STRUCT_NAME => 'DarwinCore Identification', NAMESPACE => 'dwc', dateIdentified => { %dateTimeInfo, Groups => { 2 => 'Time' } }, identificationID => { }, identificationQualifier => { }, identificationReferences => { }, identificationRemarks => { }, identificationVerificationStatus => { }, identifiedBy => { }, typeStatus => { }, }, }, MeasurementOrFact => { FlatName => '', # ('MeasurementOrFact' is redundant and too long) Struct => { STRUCT_NAME => 'DarwinCore MeasurementOrFact', NAMESPACE => 'dwc', measurementAccuracy => { Format => 'real' }, measurementDeterminedBy => { }, measurementDeterminedDate => { %dateTimeInfo, Groups => { 2 => 'Time' } }, measurementID => { }, measurementMethod => { }, measurementRemarks => { }, measurementType => { }, measurementUnit => { }, measurementValue => { }, }, }, Occurrence => { Struct => { STRUCT_NAME => 'DarwinCore Occurrence', NAMESPACE => 'dwc', associatedMedia => { }, associatedOccurrences => { }, associatedReferences => { }, associatedSequences => { }, associatedTaxa => { }, behavior => { }, catalogNumber => { }, disposition => { }, establishmentMeans => { }, individualCount => { }, individualID => { }, lifeStage => { }, occurrenceDetails => { }, occurrenceID => { }, occurrenceRemarks => { }, occurrenceStatus => { }, otherCatalogNumbers => { }, preparations => { }, previousIdentifications => { }, recordedBy => { }, recordNumber => { }, reproductiveCondition => { }, sex => { }, }, }, OccurrenceOccurrenceRemarks => { Name => 'OccurrenceRemarks', Flat => 1 }, OccurrenceOccurrenceDetails => { Name => 'OccurrenceDetails', Flat => 1 }, OccurrenceOccurrenceID => { Name => 'OccurrenceID', Flat => 1 }, OccurrenceOccurrenceStatus => { Name => 'OccurrenceStatus', Flat => 1 }, Record => { Struct => { STRUCT_NAME => 'DarwinCore Record', NAMESPACE => 'dwc', basisOfRecord => { }, collectionCode => { }, collectionID => { }, dataGeneralizations => { }, datasetID => { }, datasetName => { }, dynamicProperties => { }, informationWithheld => { }, institutionCode => { }, institutionID => { }, ownerInstitutionCode => { }, }, }, ResourceRelationship => { FlatName => '', # ('ResourceRelationship' is redundant and too long) Struct => { STRUCT_NAME => 'DarwinCore ResourceRelationship', NAMESPACE => 'dwc', relatedResourceID => { }, relationshipAccordingTo => { }, relationshipEstablishedDate => { %dateTimeInfo, Groups => { 2 => 'Time' } }, relationshipOfResource => { }, relationshipRemarks => { }, resourceID => { }, resourceRelationshipID => { }, }, }, Taxon => { Struct => { STRUCT_NAME => 'DarwinCore Taxon', NAMESPACE => 'dwc', acceptedNameUsage => { }, acceptedNameUsageID => { }, class => { }, family => { }, genus => { }, higherClassification => { }, infraspecificEpithet => { }, kingdom => { }, nameAccordingTo => { }, nameAccordingToID => { }, namePublishedIn => { }, namePublishedInID => { }, namePublishedInYear => { }, nomenclaturalCode => { }, nomenclaturalStatus => { }, order => { }, originalNameUsage => { }, originalNameUsageID => { }, parentNameUsage => { }, parentNameUsageID => { }, phylum => { }, scientificName => { }, scientificNameAuthorship => { }, scientificNameID => { }, specificEpithet => { }, subgenus => { }, taxonConceptID => { }, taxonID => { }, taxonRank => { }, taxonRemarks => { }, taxonomicStatus => { }, verbatimTaxonRank => { }, vernacularName => { Writable => 'lang-alt' }, }, }, TaxonTaxonConceptID => { Name => 'TaxonConceptID', Flat => 1 }, TaxonTaxonID => { Name => 'TaxonID', Flat => 1 }, TaxonTaxonRank => { Name => 'TaxonRank', Flat => 1 }, TaxonTaxonRemarks => { Name => 'TaxonRemarks', Flat => 1 }, dctermsLocation => { Name => 'DCTermsLocation', Groups => { 2 => 'Location' }, FlatName => 'DC', # ('dctermsLocation' is too long) Struct => { STRUCT_NAME => 'DarwinCore DCTermsLocation', NAMESPACE => 'dwc', continent => { }, coordinatePrecision => { }, coordinateUncertaintyInMeters => { }, country => { }, countryCode => { }, county => { }, decimalLatitude => { }, decimalLongitude => { }, footprintSpatialFit => { }, footprintSRS => { }, footprintWKT => { }, geodeticDatum => { }, georeferencedBy => { }, georeferencedDate => { }, georeferenceProtocol => { }, georeferenceRemarks => { }, georeferenceSources => { }, georeferenceVerificationStatus => { }, higherGeography => { }, higherGeographyID => { }, island => { }, islandGroup => { }, locality => { }, locationAccordingTo => { }, locationID => { }, locationRemarks => { }, maximumDepthInMeters => { }, maximumDistanceAboveSurfaceInMeters => { }, maximumElevationInMeters => { }, minimumDepthInMeters => { }, minimumDistanceAboveSurfaceInMeters => { }, minimumElevationInMeters => { }, municipality => { }, pointRadiusSpatialFit => { }, stateProvince => { }, verbatimCoordinates => { }, verbatimCoordinateSystem => { }, verbatimDepth => { }, verbatimElevation => { }, verbatimLatitude => { }, verbatimLocality => { }, verbatimLongitude => { }, verbatimSRS => { }, waterBody => { }, }, }, ); 1; #end __END__ =head1 NAME Image::ExifTool::DarwinCore - Darwin Core XMP tags =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This file contains tag definitions for the Darwin Core XMP namespace. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://rs.tdwg.org/dwc/index.htm> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/XMP Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/DICOM.pm����������������������������������������������������000644 �000765 �000024 �00000751252 12642461272 021117� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: DICOM.pm # # Description: Read DICOM and ACR-NEMA medical images # # Revisions: 2005/11/09 - P. Harvey Created # 2009/11/19 - P. Harvey Added private GE tags from ref 4 # 2009/12/11 - P. Harvey Updated to DICOM 2008 spec # 2010/04/08 - P. Harvey Updated to DICOM 2009 spec # # References: 1) http://medical.nema.org/ # 2) http://www.sph.sc.edu/comd/rorden/dicom.html # 3) http://www.dclunie.com/ # 4) http://www.gehealthcare.com/usen/interoperability/dicom/docs/2258357r3.pdf #------------------------------------------------------------------------------ package Image::ExifTool::DICOM; use strict; use vars qw($VERSION %uid); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.19'; # DICOM VR (Value Representation) format conversions my %dicomFormat = ( FD => 'double', FL => 'float', OB => 'int8u', OF => 'float', OW => 'int16u', SL => 'int32s', SS => 'int16s', UL => 'int32u', US => 'int16u', ); # VR elements with 32-bit length in explicit VR syntax my %vr32 = ( OB=>1, OW=>1, OF=>1, SQ=>1, UT=>1, UN=>1 ); # data elements with implicit VR regardless of syntax my %implicitVR = ( 'FFFE,E000' => 1, 'FFFE,E00D' => 1, 'FFFE,E0DD' => 1, ); # DICOM tags # Note: "XxxGroupLength" tags are generated automatically if they don't exist %Image::ExifTool::DICOM::Main = ( GROUPS => { 2 => 'Image' }, VARS => { NO_LOOKUP => 1 }, # omit tags from lookup (way too many!) NOTES => q{ The DICOM format is based on the ACR-NEMA specification, but adds a file header and a number of new tags. ExifTool will extract information from either type of file. The Tag ID's in the following table are the tag group and element numbers in hexadecimal, as given in the DICOM specification (see L<http://medical.nema.org/>). The table below contains tags from the DICOM 2009 and earlier specifications plus some vendor-specific private tags. Note that DICOM information may be saved in other file formats using the L<XMP DICOM Tags|Image::ExifTool::TagNames/XMP DICOM Tags>. }, # file meta information group (names end with VR) '0002,0000' => { VR => 'UL', Name => 'FileMetaInfoGroupLength' }, '0002,0001' => { VR => 'OB', Name => 'FileMetaInfoVersion' }, '0002,0002' => { VR => 'UI', Name => 'MediaStorageSOPClassUID' }, '0002,0003' => { VR => 'UI', Name => 'MediaStorageSOPInstanceUID' }, '0002,0010' => { VR => 'UI', Name => 'TransferSyntaxUID' }, '0002,0012' => { VR => 'UI', Name => 'ImplementationClassUID' }, '0002,0013' => { VR => 'SH', Name => 'ImplementationVersionName' }, '0002,0016' => { VR => 'AE', Name => 'SourceApplicationEntityTitle' }, '0002,0100' => { VR => 'UI', Name => 'PrivateInformationCreatorUID' }, '0002,0102' => { VR => 'OB', Name => 'PrivateInformation' }, # directory structuring group '0004,1130' => { VR => 'CS', Name => 'FileSetID' }, '0004,1141' => { VR => 'CS', Name => 'FileSetDescriptorFileID' }, '0004,1142' => { VR => 'CS', Name => 'SpecificCharacterSetOfFile' }, '0004,1200' => { VR => 'UL', Name => 'FirstDirectoryRecordOffset' }, '0004,1202' => { VR => 'UL', Name => 'LastDirectoryRecordOffset' }, '0004,1212' => { VR => 'US', Name => 'FileSetConsistencyFlag' }, '0004,1220' => { VR => 'SQ', Name => 'DirectoryRecordSequence' }, '0004,1400' => { VR => 'UL', Name => 'OffsetOfNextDirectoryRecord' }, '0004,1410' => { VR => 'US', Name => 'RecordInUseFlag' }, '0004,1420' => { VR => 'UL', Name => 'LowerLevelDirectoryEntityOffset' }, '0004,1430' => { VR => 'CS', Name => 'DirectoryRecordType' }, '0004,1432' => { VR => 'UI', Name => 'PrivateRecordUID' }, '0004,1500' => { VR => 'CS', Name => 'ReferencedFileID' }, '0004,1504' => { VR => 'UL', Name => 'MRDRDirectoryRecordOffset' }, '0004,1510' => { VR => 'UI', Name => 'ReferencedSOPClassUIDInFile' }, '0004,1511' => { VR => 'UI', Name => 'ReferencedSOPInstanceUIDInFile' }, '0004,1512' => { VR => 'UI', Name => 'ReferencedTransferSyntaxUIDInFile' }, '0004,151A' => { VR => 'UI', Name => 'ReferencedRelatedSOPClassUIDInFile' }, '0004,1600' => { VR => 'UL', Name => 'NumberOfReferences' }, # identifying group '0008,0000' => { VR => 'UL', Name => 'IdentifyingGroupLength' }, '0008,0001' => { VR => 'UL', Name => 'LengthToEnd' }, '0008,0005' => { VR => 'CS', Name => 'SpecificCharacterSet' }, '0008,0006' => { VR => 'SQ', Name => 'LanguageCodeSequence' }, '0008,0008' => { VR => 'CS', Name => 'ImageType' }, '0008,0010' => { VR => 'CS', Name => 'RecognitionCode' }, '0008,0012' => { VR => 'DA', Name => 'InstanceCreationDate' }, '0008,0013' => { VR => 'TM', Name => 'InstanceCreationTime' }, '0008,0014' => { VR => 'UI', Name => 'InstanceCreatorUID' }, '0008,0016' => { VR => 'UI', Name => 'SOPClassUID' }, '0008,0018' => { VR => 'UI', Name => 'SOPInstanceUID' }, '0008,001A' => { VR => 'UI', Name => 'RelatedGeneralSOPClassUID' }, '0008,001B' => { VR => 'UI', Name => 'OriginalSpecializedSOPClassUID' }, '0008,0020' => { VR => 'DA', Name => 'StudyDate' }, '0008,0021' => { VR => 'DA', Name => 'SeriesDate' }, '0008,0022' => { VR => 'DA', Name => 'AcquisitionDate' }, '0008,0023' => { VR => 'DA', Name => 'ContentDate' }, '0008,0024' => { VR => 'DA', Name => 'OverlayDate' }, '0008,0025' => { VR => 'DA', Name => 'CurveDate' }, '0008,002A' => { VR => 'DT', Name => 'AcquisitionDateTime' }, '0008,0030' => { VR => 'TM', Name => 'StudyTime' }, '0008,0031' => { VR => 'TM', Name => 'SeriesTime' }, '0008,0032' => { VR => 'TM', Name => 'AcquisitionTime' }, '0008,0033' => { VR => 'TM', Name => 'ContentTime' }, '0008,0034' => { VR => 'TM', Name => 'OverlayTime' }, '0008,0035' => { VR => 'TM', Name => 'CurveTime' }, '0008,0040' => { VR => 'US', Name => 'DataSetType' }, '0008,0041' => { VR => 'LO', Name => 'DataSetSubtype' }, '0008,0042' => { VR => 'CS', Name => 'NuclearMedicineSeriesType' }, '0008,0050' => { VR => 'SH', Name => 'AccessionNumber' }, '0008,0052' => { VR => 'CS', Name => 'QueryRetrieveLevel' }, '0008,0054' => { VR => 'AE', Name => 'RetrieveAETitle' }, '0008,0056' => { VR => 'CS', Name => 'InstanceAvailability' }, '0008,0058' => { VR => 'UI', Name => 'FailedSOPInstanceUIDList' }, '0008,0060' => { VR => 'CS', Name => 'Modality' }, '0008,0061' => { VR => 'CS', Name => 'ModalitiesInStudy' }, '0008,0062' => { VR => 'UI', Name => 'SOPClassesInStudy' }, '0008,0064' => { VR => 'CS', Name => 'ConversionType' }, '0008,0068' => { VR => 'CS', Name => 'PresentationIntentType' }, '0008,0070' => { VR => 'LO', Name => 'Manufacturer' }, '0008,0080' => { VR => 'LO', Name => 'InstitutionName' }, '0008,0081' => { VR => 'ST', Name => 'InstitutionAddress' }, '0008,0082' => { VR => 'SQ', Name => 'InstitutionCodeSequence' }, '0008,0090' => { VR => 'PN', Name => 'ReferringPhysicianName' }, '0008,0092' => { VR => 'ST', Name => 'ReferringPhysicianAddress' }, '0008,0094' => { VR => 'SH', Name => 'ReferringPhysicianTelephoneNumber' }, '0008,0096' => { VR => 'SQ', Name => 'ReferringPhysicianIDSequence' }, '0008,0100' => { VR => 'SH', Name => 'CodeValue' }, '0008,0102' => { VR => 'SH', Name => 'CodingSchemeDesignator' }, '0008,0103' => { VR => 'SH', Name => 'CodingSchemeVersion' }, '0008,0104' => { VR => 'LO', Name => 'CodeMeaning' }, '0008,0105' => { VR => 'CS', Name => 'MappingResource' }, '0008,0106' => { VR => 'DT', Name => 'ContextGroupVersion' }, '0008,0107' => { VR => 'DT', Name => 'ContextGroupLocalVersion' }, '0008,010B' => { VR => 'CS', Name => 'ContextGroupExtensionFlag' }, '0008,010C' => { VR => 'UI', Name => 'CodingSchemeUID' }, '0008,010D' => { VR => 'UI', Name => 'ContextGroupExtensionCreatorUID' }, '0008,010F' => { VR => 'CS', Name => 'ContextIdentifier' }, '0008,0110' => { VR => 'SQ', Name => 'CodingSchemeIDSequence' }, '0008,0112' => { VR => 'LO', Name => 'CodingSchemeRegistry' }, '0008,0114' => { VR => 'ST', Name => 'CodingSchemeExternalID' }, '0008,0115' => { VR => 'ST', Name => 'CodingSchemeName' }, '0008,0116' => { VR => 'ST', Name => 'ResponsibleOrganization' }, '0008,0117' => { VR => 'UI', Name => 'ContextUID' }, '0008,0201' => { VR => 'SH', Name => 'TimezoneOffsetFromUTC' }, '0008,1000' => { VR => 'AE', Name => 'NetworkID' }, '0008,1010' => { VR => 'SH', Name => 'StationName' }, '0008,1030' => { VR => 'LO', Name => 'StudyDescription' }, '0008,1032' => { VR => 'SQ', Name => 'ProcedureCodeSequence' }, '0008,103E' => { VR => 'LO', Name => 'SeriesDescription' }, '0008,1040' => { VR => 'LO', Name => 'InstitutionalDepartmentName' }, '0008,1048' => { VR => 'PN', Name => 'PhysiciansOfRecord' }, '0008,1049' => { VR => 'SQ', Name => 'PhysiciansOfRecordIDSequence' }, '0008,1050' => { VR => 'PN', Name => 'PerformingPhysicianName' }, '0008,1052' => { VR => 'SQ', Name => 'PerformingPhysicianIDSequence' }, '0008,1060' => { VR => 'PN', Name => 'NameOfPhysicianReadingStudy' }, '0008,1062' => { VR => 'SQ', Name => 'PhysicianReadingStudyIDSequence' }, '0008,1070' => { VR => 'PN', Name => 'OperatorsName' }, '0008,1072' => { VR => 'SQ', Name => 'OperatorIDSequence' }, '0008,1080' => { VR => 'LO', Name => 'AdmittingDiagnosesDescription' }, '0008,1084' => { VR => 'SQ', Name => 'AdmittingDiagnosesCodeSequence' }, '0008,1090' => { VR => 'LO', Name => 'ManufacturersModelName' }, '0008,1100' => { VR => 'SQ', Name => 'ReferencedResultsSequence' }, '0008,1110' => { VR => 'SQ', Name => 'ReferencedStudySequence' }, '0008,1111' => { VR => 'SQ', Name => 'ReferencedProcedureStepSequence' }, '0008,1115' => { VR => 'SQ', Name => 'ReferencedSeriesSequence' }, '0008,1120' => { VR => 'SQ', Name => 'ReferencedPatientSequence' }, '0008,1125' => { VR => 'SQ', Name => 'ReferencedVisitSequence' }, '0008,1130' => { VR => 'SQ', Name => 'ReferencedOverlaySequence' }, '0008,113A' => { VR => 'SQ', Name => 'ReferencedWaveformSequence' }, '0008,1140' => { VR => 'SQ', Name => 'ReferencedImageSequence' }, '0008,1145' => { VR => 'SQ', Name => 'ReferencedCurveSequence' }, '0008,114A' => { VR => 'SQ', Name => 'ReferencedInstanceSequence' }, '0008,1150' => { VR => 'UI', Name => 'ReferencedSOPClassUID' }, '0008,1155' => { VR => 'UI', Name => 'ReferencedSOPInstanceUID' }, '0008,115A' => { VR => 'UI', Name => 'SOPClassesSupported' }, '0008,1160' => { VR => 'IS', Name => 'ReferencedFrameNumber' }, '0008,1161' => { VR => 'UL', Name => 'SimpleFrameList' }, '0008,1162' => { VR => 'UL', Name => 'CalculatedFrameList' }, '0008,1163' => { VR => 'FD', Name => 'TimeRange' }, '0008,1164' => { VR => 'SQ', Name => 'FrameExtractionSequence' }, '0008,1195' => { VR => 'UI', Name => 'TransactionUID' }, '0008,1197' => { VR => 'US', Name => 'FailureReason' }, '0008,1198' => { VR => 'SQ', Name => 'FailedSOPSequence' }, '0008,1199' => { VR => 'SQ', Name => 'ReferencedSOPSequence' }, '0008,1200' => { VR => 'SQ', Name => 'OtherReferencedStudiesSequence' }, '0008,1250' => { VR => 'SQ', Name => 'RelatedSeriesSequence' }, '0008,2110' => { VR => 'CS', Name => 'LossyImageCompression' }, '0008,2111' => { VR => 'ST', Name => 'DerivationDescription' }, '0008,2112' => { VR => 'SQ', Name => 'SourceImageSequence' }, '0008,2120' => { VR => 'SH', Name => 'StageName' }, '0008,2122' => { VR => 'IS', Name => 'StageNumber' }, '0008,2124' => { VR => 'IS', Name => 'NumberOfStages' }, '0008,2127' => { VR => 'SH', Name => 'ViewName' }, '0008,2128' => { VR => 'IS', Name => 'ViewNumber' }, '0008,2129' => { VR => 'IS', Name => 'NumberOfEventTimers' }, '0008,212A' => { VR => 'IS', Name => 'NumberOfViewsInStage' }, '0008,2130' => { VR => 'DS', Name => 'EventElapsedTimes' }, '0008,2132' => { VR => 'LO', Name => 'EventTimerNames' }, '0008,2133' => { VR => 'SQ', Name => 'EventTimerSequence' }, '0008,2134' => { VR => 'FD', Name => 'EventTimeOffset' }, '0008,2135' => { VR => 'SQ', Name => 'EventCodeSequence' }, '0008,2142' => { VR => 'IS', Name => 'StartTrim' }, '0008,2143' => { VR => 'IS', Name => 'StopTrim' }, '0008,2144' => { VR => 'IS', Name => 'RecommendedDisplayFrameRate' }, '0008,2200' => { VR => 'CS', Name => 'TransducerPosition' }, '0008,2204' => { VR => 'CS', Name => 'TransducerOrientation' }, '0008,2208' => { VR => 'CS', Name => 'AnatomicStructure' }, '0008,2218' => { VR => 'SQ', Name => 'AnatomicRegionSequence' }, '0008,2220' => { VR => 'SQ', Name => 'AnatomicRegionModifierSequence' }, '0008,2228' => { VR => 'SQ', Name => 'PrimaryAnatomicStructureSequence' }, '0008,2229' => { VR => 'SQ', Name => 'AnatomicStructureOrRegionSequence' }, '0008,2230' => { VR => 'SQ', Name => 'AnatomicStructureModifierSequence' }, '0008,2240' => { VR => 'SQ', Name => 'TransducerPositionSequence' }, '0008,2242' => { VR => 'SQ', Name => 'TransducerPositionModifierSequence' }, '0008,2244' => { VR => 'SQ', Name => 'TransducerOrientationSequence' }, '0008,2246' => { VR => 'SQ', Name => 'TransducerOrientationModifierSeq' }, '0008,2253' => { VR => 'SQ', Name => 'AnatomicEntrancePortalCodeSeqTrial' }, '0008,2255' => { VR => 'SQ', Name => 'AnatomicApproachDirCodeSeqTrial' }, '0008,2256' => { VR => 'ST', Name => 'AnatomicPerspectiveDescrTrial' }, '0008,2257' => { VR => 'SQ', Name => 'AnatomicPerspectiveCodeSeqTrial' }, '0008,3001' => { VR => 'SQ', Name => 'AlternateRepresentationSequence' }, '0008,3010' => { VR => 'UI', Name => 'IrradiationEventUID' }, '0008,4000' => { VR => 'LT', Name => 'IdentifyingComments' }, '0008,9007' => { VR => 'CS', Name => 'FrameType' }, '0008,9092' => { VR => 'SQ', Name => 'ReferencedImageEvidenceSequence' }, '0008,9121' => { VR => 'SQ', Name => 'ReferencedRawDataSequence' }, '0008,9123' => { VR => 'UI', Name => 'CreatorVersionUID' }, '0008,9124' => { VR => 'SQ', Name => 'DerivationImageSequence' }, '0008,9154' => { VR => 'SQ', Name => 'SourceImageEvidenceSequence' }, '0008,9205' => { VR => 'CS', Name => 'PixelPresentation' }, '0008,9206' => { VR => 'CS', Name => 'VolumetricProperties' }, '0008,9207' => { VR => 'CS', Name => 'VolumeBasedCalculationTechnique' }, '0008,9208' => { VR => 'CS', Name => 'ComplexImageComponent' }, '0008,9209' => { VR => 'CS', Name => 'AcquisitionContrast' }, '0008,9215' => { VR => 'SQ', Name => 'DerivationCodeSequence' }, '0008,9237' => { VR => 'SQ', Name => 'GrayscalePresentationStateSequence' }, '0008,9410' => { VR => 'SQ', Name => 'ReferencedOtherPlaneSequence' }, '0008,9458' => { VR => 'SQ', Name => 'FrameDisplaySequence' }, '0008,9459' => { VR => 'FL', Name => 'RecommendedDisplayFrameRateInFloat' }, '0008,9460' => { VR => 'CS', Name => 'SkipFrameRangeFlag' }, # GEMS_IDEN_01 (ref 4) '0009,1001' => { VR => 'LO', Name => 'FullFidelity' }, '0009,1002' => { VR => 'SH', Name => 'SuiteID' }, '0009,1004' => { VR => 'SH', Name => 'ProductID' }, '0009,1027' => { VR => 'SL', Name => 'ImageActualDate' }, '0009,1030' => { VR => 'SH', Name => 'ServiceID' }, '0009,1031' => { VR => 'SH', Name => 'MobileLocationNumber' }, '0009,10E3' => { VR => 'UI', Name => 'EquipmentUID' }, '0009,10E6' => { VR => 'SH', Name => 'GenesisVersionNow' }, '0009,10E7' => { VR => 'UL', Name => 'ExamRecordChecksum' }, '0009,10E9' => { VR => 'SL', Name => 'ActualSeriesDataTimeStamp' }, # patient group '0010,0000' => { VR => 'UL', Name => 'PatientGroupLength' }, '0010,0010' => { VR => 'PN', Name => 'PatientName' }, '0010,0020' => { VR => 'LO', Name => 'PatientID' }, '0010,0021' => { VR => 'LO', Name => 'IssuerOfPatientID' }, '0010,0022' => { VR => 'CS', Name => 'TypeOfPatientID' }, '0010,0030' => { VR => 'DA', Name => 'PatientBirthDate' }, '0010,0032' => { VR => 'TM', Name => 'PatientBirthTime' }, '0010,0040' => { VR => 'CS', Name => 'PatientSex' }, '0010,0050' => { VR => 'SQ', Name => 'PatientInsurancePlanCodeSequence' }, '0010,0101' => { VR => 'SQ', Name => 'PatientPrimaryLanguageCodeSeq' }, '0010,0102' => { VR => 'SQ', Name => 'PatientPrimaryLanguageCodeModSeq' }, '0010,1000' => { VR => 'LO', Name => 'OtherPatientIDs' }, '0010,1001' => { VR => 'PN', Name => 'OtherPatientNames' }, '0010,1002' => { VR => 'SQ', Name => 'OtherPatientIDsSequence' }, '0010,1005' => { VR => 'PN', Name => 'PatientBirthName' }, '0010,1010' => { VR => 'AS', Name => 'PatientAge' }, '0010,1020' => { VR => 'DS', Name => 'PatientSize' }, '0010,1030' => { VR => 'DS', Name => 'PatientWeight' }, '0010,1040' => { VR => 'LO', Name => 'PatientAddress' }, '0010,1050' => { VR => 'LO', Name => 'InsurancePlanIdentification' }, '0010,1060' => { VR => 'PN', Name => 'PatientMotherBirthName' }, '0010,1080' => { VR => 'LO', Name => 'MilitaryRank' }, '0010,1081' => { VR => 'LO', Name => 'BranchOfService' }, '0010,1090' => { VR => 'LO', Name => 'MedicalRecordLocator' }, '0010,2000' => { VR => 'LO', Name => 'MedicalAlerts' }, '0010,2110' => { VR => 'LO', Name => 'Allergies' }, '0010,2150' => { VR => 'LO', Name => 'CountryOfResidence' }, '0010,2152' => { VR => 'LO', Name => 'RegionOfResidence' }, '0010,2154' => { VR => 'SH', Name => 'PatientTelephoneNumbers' }, '0010,2160' => { VR => 'SH', Name => 'EthnicGroup' }, '0010,2180' => { VR => 'SH', Name => 'Occupation' }, '0010,21A0' => { VR => 'CS', Name => 'SmokingStatus' }, '0010,21B0' => { VR => 'LT', Name => 'AdditionalPatientHistory' }, '0010,21C0' => { VR => 'US', Name => 'PregnancyStatus' }, '0010,21D0' => { VR => 'DA', Name => 'LastMenstrualDate' }, '0010,21F0' => { VR => 'LO', Name => 'PatientReligiousPreference' }, '0010,2201' => { VR => 'LO', Name => 'PatientSpeciesDescription' }, '0010,2202' => { VR => 'SQ', Name => 'PatientSpeciesCodeSequence' }, '0010,2203' => { VR => 'CS', Name => 'PatientSexNeutered' }, '0010,2210' => { VR => 'CS', Name => 'AnatomicalOrientationType' }, '0010,2292' => { VR => 'LO', Name => 'PatientBreedDescription' }, '0010,2293' => { VR => 'SQ', Name => 'PatientBreedCodeSequence' }, '0010,2294' => { VR => 'SQ', Name => 'BreedRegistrationSequence' }, '0010,2295' => { VR => 'LO', Name => 'BreedRegistrationNumber' }, '0010,2296' => { VR => 'SQ', Name => 'BreedRegistryCodeSequence' }, '0010,2297' => { VR => 'PN', Name => 'ResponsiblePerson' }, '0010,2298' => { VR => 'CS', Name => 'ResponsiblePersonRole' }, '0010,2299' => { VR => 'LO', Name => 'ResponsibleOrganization' }, '0010,4000' => { VR => 'LT', Name => 'PatientComments' }, '0010,9431' => { VR => 'FL', Name => 'ExaminedBodyThickness' }, # GEMS_PATI_01 (ref 4) '0011,1010' => { VR => 'SS', Name => 'PatientStatus' }, # clinical trial group '0012,0010' => { VR => 'LO', Name => 'ClinicalTrialSponsorName' }, '0012,0020' => { VR => 'LO', Name => 'ClinicalTrialProtocolID' }, '0012,0021' => { VR => 'LO', Name => 'ClinicalTrialProtocolName' }, '0012,0030' => { VR => 'LO', Name => 'ClinicalTrialSiteID' }, '0012,0031' => { VR => 'LO', Name => 'ClinicalTrialSiteName' }, '0012,0040' => { VR => 'LO', Name => 'ClinicalTrialSubjectID' }, '0012,0042' => { VR => 'LO', Name => 'ClinicalTrialSubjectReadingID' }, '0012,0050' => { VR => 'LO', Name => 'ClinicalTrialTimePointID' }, '0012,0051' => { VR => 'ST', Name => 'ClinicalTrialTimePointDescription' }, '0012,0060' => { VR => 'LO', Name => 'ClinicalTrialCoordinatingCenter' }, '0012,0062' => { VR => 'CS', Name => 'PatientIdentityRemoved' }, '0012,0063' => { VR => 'LO', Name => 'DeidentificationMethod' }, '0012,0064' => { VR => 'SQ', Name => 'DeidentificationMethodCodeSequence' }, '0012,0071' => { VR => 'LO', Name => 'ClinicalTrialSeriesID' }, '0012,0072' => { VR => 'LO', Name => 'ClinicalTrialSeriesDescription' }, '0012,0084' => { VR => 'CS', Name => 'DistributionType' }, '0012,0085' => { VR => 'CS', Name => 'ConsentForDistributionFlag' }, # acquisition group '0018,0000' => { VR => 'UL', Name => 'AcquisitionGroupLength' }, '0018,0010' => { VR => 'LO', Name => 'ContrastBolusAgent' }, '0018,0012' => { VR => 'SQ', Name => 'ContrastBolusAgentSequence' }, '0018,0014' => { VR => 'SQ', Name => 'ContrastBolusAdministrationRoute' }, '0018,0015' => { VR => 'CS', Name => 'BodyPartExamined' }, '0018,0020' => { VR => 'CS', Name => 'ScanningSequence' }, '0018,0021' => { VR => 'CS', Name => 'SequenceVariant' }, '0018,0022' => { VR => 'CS', Name => 'ScanOptions' }, '0018,0023' => { VR => 'CS', Name => 'MRAcquisitionType' }, '0018,0024' => { VR => 'SH', Name => 'SequenceName' }, '0018,0025' => { VR => 'CS', Name => 'AngioFlag' }, '0018,0026' => { VR => 'SQ', Name => 'InterventionDrugInformationSeq' }, '0018,0027' => { VR => 'TM', Name => 'InterventionDrugStopTime' }, '0018,0028' => { VR => 'DS', Name => 'InterventionDrugDose' }, '0018,0029' => { VR => 'SQ', Name => 'InterventionDrugSequence' }, '0018,002A' => { VR => 'SQ', Name => 'AdditionalDrugSequence' }, '0018,0030' => { VR => 'LO', Name => 'Radionuclide' }, '0018,0031' => { VR => 'LO', Name => 'Radiopharmaceutical' }, '0018,0032' => { VR => 'DS', Name => 'EnergyWindowCenterline' }, '0018,0033' => { VR => 'DS', Name => 'EnergyWindowTotalWidth' }, '0018,0034' => { VR => 'LO', Name => 'InterventionDrugName' }, '0018,0035' => { VR => 'TM', Name => 'InterventionDrugStartTime' }, '0018,0036' => { VR => 'SQ', Name => 'InterventionSequence' }, '0018,0037' => { VR => 'CS', Name => 'TherapyType' }, '0018,0038' => { VR => 'CS', Name => 'InterventionStatus' }, '0018,0039' => { VR => 'CS', Name => 'TherapyDescription' }, '0018,003A' => { VR => 'ST', Name => 'InterventionDescription' }, '0018,0040' => { VR => 'IS', Name => 'CineRate' }, '0018,0042' => { VR => 'CS', Name => 'InitialCineRunState' }, '0018,0050' => { VR => 'DS', Name => 'SliceThickness' }, '0018,0060' => { VR => 'DS', Name => 'KVP' }, '0018,0070' => { VR => 'IS', Name => 'CountsAccumulated' }, '0018,0071' => { VR => 'CS', Name => 'AcquisitionTerminationCondition' }, '0018,0072' => { VR => 'DS', Name => 'EffectiveDuration' }, '0018,0073' => { VR => 'CS', Name => 'AcquisitionStartCondition' }, '0018,0074' => { VR => 'IS', Name => 'AcquisitionStartConditionData' }, '0018,0075' => { VR => 'IS', Name => 'AcquisitionEndConditionData' }, '0018,0080' => { VR => 'DS', Name => 'RepetitionTime' }, '0018,0081' => { VR => 'DS', Name => 'EchoTime' }, '0018,0082' => { VR => 'DS', Name => 'InversionTime' }, '0018,0083' => { VR => 'DS', Name => 'NumberOfAverages' }, '0018,0084' => { VR => 'DS', Name => 'ImagingFrequency' }, '0018,0085' => { VR => 'SH', Name => 'ImagedNucleus' }, '0018,0086' => { VR => 'IS', Name => 'EchoNumber' }, '0018,0087' => { VR => 'DS', Name => 'MagneticFieldStrength' }, '0018,0088' => { VR => 'DS', Name => 'SpacingBetweenSlices' }, '0018,0089' => { VR => 'IS', Name => 'NumberOfPhaseEncodingSteps' }, '0018,0090' => { VR => 'DS', Name => 'DataCollectionDiameter' }, '0018,0091' => { VR => 'IS', Name => 'EchoTrainLength' }, '0018,0093' => { VR => 'DS', Name => 'PercentSampling' }, '0018,0094' => { VR => 'DS', Name => 'PercentPhaseFieldOfView' }, '0018,0095' => { VR => 'DS', Name => 'PixelBandwidth' }, '0018,1000' => { VR => 'LO', Name => 'DeviceSerialNumber' }, '0018,1002' => { VR => 'UI', Name => 'DeviceUID' }, '0018,1003' => { VR => 'LO', Name => 'DeviceID' }, '0018,1004' => { VR => 'LO', Name => 'PlateID' }, '0018,1005' => { VR => 'LO', Name => 'GeneratorID' }, '0018,1006' => { VR => 'LO', Name => 'GridID' }, '0018,1007' => { VR => 'LO', Name => 'CassetteID' }, '0018,1008' => { VR => 'LO', Name => 'GantryID' }, '0018,1010' => { VR => 'LO', Name => 'SecondaryCaptureDeviceID' }, '0018,1011' => { VR => 'LO', Name => 'HardcopyCreationDeviceID' }, '0018,1012' => { VR => 'DA', Name => 'DateOfSecondaryCapture' }, '0018,1014' => { VR => 'TM', Name => 'TimeOfSecondaryCapture' }, '0018,1016' => { VR => 'LO', Name => 'SecondaryCaptureDeviceManufacturer' }, '0018,1017' => { VR => 'LO', Name => 'HardcopyDeviceManufacturer' }, '0018,1018' => { VR => 'LO', Name => 'SecondaryCaptureDeviceModelName' }, '0018,1019' => { VR => 'LO', Name => 'SecondaryCaptureDeviceSoftwareVers' }, '0018,101A' => { VR => 'LO', Name => 'HardcopyDeviceSoftwareVersion' }, '0018,101B' => { VR => 'LO', Name => 'HardcopyDeviceModelName' }, '0018,1020' => { VR => 'LO', Name => 'SoftwareVersion' }, '0018,1022' => { VR => 'SH', Name => 'VideoImageFormatAcquired' }, '0018,1023' => { VR => 'LO', Name => 'DigitalImageFormatAcquired' }, '0018,1030' => { VR => 'LO', Name => 'ProtocolName' }, '0018,1040' => { VR => 'LO', Name => 'ContrastBolusRoute' }, '0018,1041' => { VR => 'DS', Name => 'ContrastBolusVolume' }, '0018,1042' => { VR => 'TM', Name => 'ContrastBolusStartTime' }, '0018,1043' => { VR => 'TM', Name => 'ContrastBolusStopTime' }, '0018,1044' => { VR => 'DS', Name => 'ContrastBolusTotalDose' }, '0018,1045' => { VR => 'IS', Name => 'SyringeCounts' }, '0018,1046' => { VR => 'DS', Name => 'ContrastFlowRate' }, '0018,1047' => { VR => 'DS', Name => 'ContrastFlowDuration' }, '0018,1048' => { VR => 'CS', Name => 'ContrastBolusIngredient' }, '0018,1049' => { VR => 'DS', Name => 'ContrastBolusConcentration' }, '0018,1050' => { VR => 'DS', Name => 'SpatialResolution' }, '0018,1060' => { VR => 'DS', Name => 'TriggerTime' }, '0018,1061' => { VR => 'LO', Name => 'TriggerSourceOrType' }, '0018,1062' => { VR => 'IS', Name => 'NominalInterval' }, '0018,1063' => { VR => 'DS', Name => 'FrameTime' }, '0018,1064' => { VR => 'LO', Name => 'CardiacFramingType' }, '0018,1065' => { VR => 'DS', Name => 'FrameTimeVector' }, '0018,1066' => { VR => 'DS', Name => 'FrameDelay' }, '0018,1067' => { VR => 'DS', Name => 'ImageTriggerDelay' }, '0018,1068' => { VR => 'DS', Name => 'MultiplexGroupTimeOffset' }, '0018,1069' => { VR => 'DS', Name => 'TriggerTimeOffset' }, '0018,106A' => { VR => 'CS', Name => 'SynchronizationTrigger' }, '0018,106C' => { VR => 'US', Name => 'SynchronizationChannel' }, '0018,106E' => { VR => 'UL', Name => 'TriggerSamplePosition' }, '0018,1070' => { VR => 'LO', Name => 'RadiopharmaceuticalRoute' }, '0018,1071' => { VR => 'DS', Name => 'RadiopharmaceuticalVolume' }, '0018,1072' => { VR => 'TM', Name => 'RadiopharmaceuticalStartTime' }, '0018,1073' => { VR => 'TM', Name => 'RadiopharmaceuticalStopTime' }, '0018,1074' => { VR => 'DS', Name => 'RadionuclideTotalDose' }, '0018,1075' => { VR => 'DS', Name => 'RadionuclideHalfLife' }, '0018,1076' => { VR => 'DS', Name => 'RadionuclidePositronFraction' }, '0018,1077' => { VR => 'DS', Name => 'RadiopharmaceuticalSpecActivity' }, '0018,1078' => { VR => 'DT', Name => 'RadiopharmaceuticalStartDateTime' }, '0018,1079' => { VR => 'DT', Name => 'RadiopharmaceuticalStopDateTime' }, '0018,1080' => { VR => 'CS', Name => 'BeatRejectionFlag' }, '0018,1081' => { VR => 'IS', Name => 'LowRRValue' }, '0018,1082' => { VR => 'IS', Name => 'HighRRValue' }, '0018,1083' => { VR => 'IS', Name => 'IntervalsAcquired' }, '0018,1084' => { VR => 'IS', Name => 'IntervalsRejected' }, '0018,1085' => { VR => 'LO', Name => 'PVCRejection' }, '0018,1086' => { VR => 'IS', Name => 'SkipBeats' }, '0018,1088' => { VR => 'IS', Name => 'HeartRate' }, '0018,1090' => { VR => 'IS', Name => 'CardiacNumberOfImages' }, '0018,1094' => { VR => 'IS', Name => 'TriggerWindow' }, '0018,1100' => { VR => 'DS', Name => 'ReconstructionDiameter' }, '0018,1110' => { VR => 'DS', Name => 'DistanceSourceToDetector' }, '0018,1111' => { VR => 'DS', Name => 'DistanceSourceToPatient' }, '0018,1114' => { VR => 'DS', Name => 'EstimatedRadiographicMagnification' }, '0018,1120' => { VR => 'DS', Name => 'GantryDetectorTilt' }, '0018,1121' => { VR => 'DS', Name => 'GantryDetectorSlew' }, '0018,1130' => { VR => 'DS', Name => 'TableHeight' }, '0018,1131' => { VR => 'DS', Name => 'TableTraverse' }, '0018,1134' => { VR => 'CS', Name => 'TableMotion' }, '0018,1135' => { VR => 'DS', Name => 'TableVerticalIncrement' }, '0018,1136' => { VR => 'DS', Name => 'TableLateralIncrement' }, '0018,1137' => { VR => 'DS', Name => 'TableLongitudinalIncrement' }, '0018,1138' => { VR => 'DS', Name => 'TableAngle' }, '0018,113A' => { VR => 'CS', Name => 'TableType' }, '0018,1140' => { VR => 'CS', Name => 'RotationDirection' }, '0018,1141' => { VR => 'DS', Name => 'AngularPosition' }, '0018,1142' => { VR => 'DS', Name => 'RadialPosition' }, '0018,1143' => { VR => 'DS', Name => 'ScanArc' }, '0018,1144' => { VR => 'DS', Name => 'AngularStep' }, '0018,1145' => { VR => 'DS', Name => 'CenterOfRotationOffset' }, '0018,1146' => { VR => 'DS', Name => 'RotationOffset' }, '0018,1147' => { VR => 'CS', Name => 'FieldOfViewShape' }, '0018,1149' => { VR => 'IS', Name => 'FieldOfViewDimensions' }, '0018,1150' => { VR => 'IS', Name => 'ExposureTime' }, '0018,1151' => { VR => 'IS', Name => 'XRayTubeCurrent' }, '0018,1152' => { VR => 'IS', Name => 'Exposure' }, '0018,1153' => { VR => 'IS', Name => 'ExposureInMicroAmpSec' }, '0018,1154' => { VR => 'DS', Name => 'AveragePulseWidth' }, '0018,1155' => { VR => 'CS', Name => 'RadiationSetting' }, '0018,1156' => { VR => 'CS', Name => 'RectificationType' }, '0018,115A' => { VR => 'CS', Name => 'RadiationMode' }, '0018,115E' => { VR => 'DS', Name => 'ImageAreaDoseProduct' }, '0018,1160' => { VR => 'SH', Name => 'FilterType' }, '0018,1161' => { VR => 'LO', Name => 'TypeOfFilters' }, '0018,1162' => { VR => 'DS', Name => 'IntensifierSize' }, '0018,1164' => { VR => 'DS', Name => 'ImagerPixelSpacing' }, '0018,1166' => { VR => 'CS', Name => 'Grid' }, '0018,1170' => { VR => 'IS', Name => 'GeneratorPower' }, '0018,1180' => { VR => 'SH', Name => 'CollimatorGridName' }, '0018,1181' => { VR => 'CS', Name => 'CollimatorType' }, '0018,1182' => { VR => 'IS', Name => 'FocalDistance' }, '0018,1183' => { VR => 'DS', Name => 'XFocusCenter' }, '0018,1184' => { VR => 'DS', Name => 'YFocusCenter' }, '0018,1190' => { VR => 'DS', Name => 'FocalSpots' }, '0018,1191' => { VR => 'CS', Name => 'AnodeTargetMaterial' }, '0018,11A0' => { VR => 'DS', Name => 'BodyPartThickness' }, '0018,11A2' => { VR => 'DS', Name => 'CompressionForce' }, '0018,1200' => { VR => 'DA', Name => 'DateOfLastCalibration' }, '0018,1201' => { VR => 'TM', Name => 'TimeOfLastCalibration' }, '0018,1210' => { VR => 'SH', Name => 'ConvolutionKernel' }, '0018,1240' => { VR => 'IS', Name => 'UpperLowerPixelValues' }, '0018,1242' => { VR => 'IS', Name => 'ActualFrameDuration' }, '0018,1243' => { VR => 'IS', Name => 'CountRate' }, '0018,1244' => { VR => 'US', Name => 'PreferredPlaybackSequencing' }, '0018,1250' => { VR => 'SH', Name => 'ReceiveCoilName' }, '0018,1251' => { VR => 'SH', Name => 'TransmitCoilName' }, '0018,1260' => { VR => 'SH', Name => 'PlateType' }, '0018,1261' => { VR => 'LO', Name => 'PhosphorType' }, '0018,1300' => { VR => 'DS', Name => 'ScanVelocity' }, '0018,1301' => { VR => 'CS', Name => 'WholeBodyTechnique' }, '0018,1302' => { VR => 'IS', Name => 'ScanLength' }, '0018,1310' => { VR => 'US', Name => 'AcquisitionMatrix' }, '0018,1312' => { VR => 'CS', Name => 'InPlanePhaseEncodingDirection' }, '0018,1314' => { VR => 'DS', Name => 'FlipAngle' }, '0018,1315' => { VR => 'CS', Name => 'VariableFlipAngleFlag' }, '0018,1316' => { VR => 'DS', Name => 'SAR' }, '0018,1318' => { VR => 'DS', Name => 'DB-Dt' }, '0018,1400' => { VR => 'LO', Name => 'AcquisitionDeviceProcessingDescr' }, '0018,1401' => { VR => 'LO', Name => 'AcquisitionDeviceProcessingCode' }, '0018,1402' => { VR => 'CS', Name => 'CassetteOrientation' }, '0018,1403' => { VR => 'CS', Name => 'CassetteSize' }, '0018,1404' => { VR => 'US', Name => 'ExposuresOnPlate' }, '0018,1405' => { VR => 'IS', Name => 'RelativeXRayExposure' }, '0018,1450' => { VR => 'DS', Name => 'ColumnAngulation' }, '0018,1460' => { VR => 'DS', Name => 'TomoLayerHeight' }, '0018,1470' => { VR => 'DS', Name => 'TomoAngle' }, '0018,1480' => { VR => 'DS', Name => 'TomoTime' }, '0018,1490' => { VR => 'CS', Name => 'TomoType' }, '0018,1491' => { VR => 'CS', Name => 'TomoClass' }, '0018,1495' => { VR => 'IS', Name => 'NumberOfTomosynthesisSourceImages' }, '0018,1500' => { VR => 'CS', Name => 'PositionerMotion' }, '0018,1508' => { VR => 'CS', Name => 'PositionerType' }, '0018,1510' => { VR => 'DS', Name => 'PositionerPrimaryAngle' }, '0018,1511' => { VR => 'DS', Name => 'PositionerSecondaryAngle' }, '0018,1520' => { VR => 'DS', Name => 'PositionerPrimaryAngleIncrement' }, '0018,1521' => { VR => 'DS', Name => 'PositionerSecondaryAngleIncrement' }, '0018,1530' => { VR => 'DS', Name => 'DetectorPrimaryAngle' }, '0018,1531' => { VR => 'DS', Name => 'DetectorSecondaryAngle' }, '0018,1600' => { VR => 'CS', Name => 'ShutterShape' }, '0018,1602' => { VR => 'IS', Name => 'ShutterLeftVerticalEdge' }, '0018,1604' => { VR => 'IS', Name => 'ShutterRightVerticalEdge' }, '0018,1606' => { VR => 'IS', Name => 'ShutterUpperHorizontalEdge' }, '0018,1608' => { VR => 'IS', Name => 'ShutterLowerHorizontalEdge' }, '0018,1610' => { VR => 'IS', Name => 'CenterOfCircularShutter' }, '0018,1612' => { VR => 'IS', Name => 'RadiusOfCircularShutter' }, '0018,1620' => { VR => 'IS', Name => 'VerticesOfPolygonalShutter' }, '0018,1622' => { VR => 'US', Name => 'ShutterPresentationValue' }, '0018,1623' => { VR => 'US', Name => 'ShutterOverlayGroup' }, '0018,1624' => { VR => 'US', Name => 'ShutterPresentationColorCIELabVal' }, '0018,1700' => { VR => 'CS', Name => 'CollimatorShape' }, '0018,1702' => { VR => 'IS', Name => 'CollimatorLeftVerticalEdge' }, '0018,1704' => { VR => 'IS', Name => 'CollimatorRightVerticalEdge' }, '0018,1706' => { VR => 'IS', Name => 'CollimatorUpperHorizontalEdge' }, '0018,1708' => { VR => 'IS', Name => 'CollimatorLowerHorizontalEdge' }, '0018,1710' => { VR => 'IS', Name => 'CenterOfCircularCollimator' }, '0018,1712' => { VR => 'IS', Name => 'RadiusOfCircularCollimator' }, '0018,1720' => { VR => 'IS', Name => 'VerticesOfPolygonalCollimator' }, '0018,1800' => { VR => 'CS', Name => 'AcquisitionTimeSynchronized' }, '0018,1801' => { VR => 'SH', Name => 'TimeSource' }, '0018,1802' => { VR => 'CS', Name => 'TimeDistributionProtocol' }, '0018,1803' => { VR => 'LO', Name => 'NTPSourceAddress' }, '0018,2001' => { VR => 'IS', Name => 'PageNumberVector' }, '0018,2002' => { VR => 'SH', Name => 'FrameLabelVector' }, '0018,2003' => { VR => 'DS', Name => 'FramePrimaryAngleVector' }, '0018,2004' => { VR => 'DS', Name => 'FrameSecondaryAngleVector' }, '0018,2005' => { VR => 'DS', Name => 'SliceLocationVector' }, '0018,2006' => { VR => 'SH', Name => 'DisplayWindowLabelVector' }, '0018,2010' => { VR => 'DS', Name => 'NominalScannedPixelSpacing' }, '0018,2020' => { VR => 'CS', Name => 'DigitizingDeviceTransportDirection' }, '0018,2030' => { VR => 'DS', Name => 'RotationOfScannedFilm' }, '0018,3100' => { VR => 'CS', Name => 'IVUSAcquisition' }, '0018,3101' => { VR => 'DS', Name => 'IVUSPullbackRate' }, '0018,3102' => { VR => 'DS', Name => 'IVUSGatedRate' }, '0018,3103' => { VR => 'IS', Name => 'IVUSPullbackStartFrameNumber' }, '0018,3104' => { VR => 'IS', Name => 'IVUSPullbackStopFrameNumber' }, '0018,3105' => { VR => 'IS', Name => 'LesionNumber' }, '0018,4000' => { VR => 'LT', Name => 'AcquisitionComments' }, '0018,5000' => { VR => 'SH', Name => 'OutputPower' }, '0018,5010' => { VR => 'LO', Name => 'TransducerData' }, '0018,5012' => { VR => 'DS', Name => 'FocusDepth' }, '0018,5020' => { VR => 'LO', Name => 'ProcessingFunction' }, '0018,5021' => { VR => 'LO', Name => 'PostprocessingFunction' }, '0018,5022' => { VR => 'DS', Name => 'MechanicalIndex' }, '0018,5024' => { VR => 'DS', Name => 'BoneThermalIndex' }, '0018,5026' => { VR => 'DS', Name => 'CranialThermalIndex' }, '0018,5027' => { VR => 'DS', Name => 'SoftTissueThermalIndex' }, '0018,5028' => { VR => 'DS', Name => 'SoftTissueFocusThermalIndex' }, '0018,5029' => { VR => 'DS', Name => 'SoftTissueSurfaceThermalIndex' }, '0018,5030' => { VR => 'DS', Name => 'DynamicRange' }, '0018,5040' => { VR => 'DS', Name => 'TotalGain' }, '0018,5050' => { VR => 'IS', Name => 'DepthOfScanField' }, '0018,5100' => { VR => 'CS', Name => 'PatientPosition' }, '0018,5101' => { VR => 'CS', Name => 'ViewPosition' }, '0018,5104' => { VR => 'SQ', Name => 'ProjectionEponymousNameCodeSeq' }, '0018,5210' => { VR => 'DS', Name => 'ImageTransformationMatrix' }, '0018,5212' => { VR => 'DS', Name => 'ImageTranslationVector' }, '0018,6000' => { VR => 'DS', Name => 'Sensitivity' }, '0018,6011' => { VR => 'SQ', Name => 'SequenceOfUltrasoundRegions' }, '0018,6012' => { VR => 'US', Name => 'RegionSpatialFormat' }, '0018,6014' => { VR => 'US', Name => 'RegionDataType' }, '0018,6016' => { VR => 'UL', Name => 'RegionFlags' }, '0018,6018' => { VR => 'UL', Name => 'RegionLocationMinX0' }, '0018,601A' => { VR => 'UL', Name => 'RegionLocationMinY0' }, '0018,601C' => { VR => 'UL', Name => 'RegionLocationMaxX1' }, '0018,601E' => { VR => 'UL', Name => 'RegionLocationMaxY1' }, '0018,6020' => { VR => 'SL', Name => 'ReferencePixelX0' }, '0018,6022' => { VR => 'SL', Name => 'ReferencePixelY0' }, '0018,6024' => { VR => 'US', Name => 'PhysicalUnitsXDirection' }, '0018,6026' => { VR => 'US', Name => 'PhysicalUnitsYDirection' }, '0018,6028' => { VR => 'FD', Name => 'ReferencePixelPhysicalValueX' }, '0018,602A' => { VR => 'FD', Name => 'ReferencePixelPhysicalValueY' }, '0018,602C' => { VR => 'FD', Name => 'PhysicalDeltaX' }, '0018,602E' => { VR => 'FD', Name => 'PhysicalDeltaY' }, '0018,6030' => { VR => 'UL', Name => 'TransducerFrequency' }, '0018,6031' => { VR => 'CS', Name => 'TransducerType' }, '0018,6032' => { VR => 'UL', Name => 'PulseRepetitionFrequency' }, '0018,6034' => { VR => 'FD', Name => 'DopplerCorrectionAngle' }, '0018,6036' => { VR => 'FD', Name => 'SteeringAngle' }, '0018,6038' => { VR => 'UL', Name => 'DopplerSampleVolumeXPosRetired' }, '0018,6039' => { VR => 'SL', Name => 'DopplerSampleVolumeXPosition' }, '0018,603A' => { VR => 'UL', Name => 'DopplerSampleVolumeYPosRetired' }, '0018,603B' => { VR => 'SL', Name => 'DopplerSampleVolumeYPosition' }, '0018,603C' => { VR => 'UL', Name => 'TMLinePositionX0Retired' }, '0018,603D' => { VR => 'SL', Name => 'TMLinePositionX0' }, '0018,603E' => { VR => 'UL', Name => 'TMLinePositionY0Retired' }, '0018,603F' => { VR => 'SL', Name => 'TMLinePositionY0' }, '0018,6040' => { VR => 'UL', Name => 'TMLinePositionX1Retired' }, '0018,6041' => { VR => 'SL', Name => 'TMLinePositionX1' }, '0018,6042' => { VR => 'UL', Name => 'TMLinePositionY1Retired' }, '0018,6043' => { VR => 'SL', Name => 'TMLinePositionY1' }, '0018,6044' => { VR => 'US', Name => 'PixelComponentOrganization' }, '0018,6046' => { VR => 'UL', Name => 'PixelComponentMask' }, '0018,6048' => { VR => 'UL', Name => 'PixelComponentRangeStart' }, '0018,604A' => { VR => 'UL', Name => 'PixelComponentRangeStop' }, '0018,604C' => { VR => 'US', Name => 'PixelComponentPhysicalUnits' }, '0018,604E' => { VR => 'US', Name => 'PixelComponentDataType' }, '0018,6050' => { VR => 'UL', Name => 'NumberOfTableBreakPoints' }, '0018,6052' => { VR => 'UL', Name => 'TableOfXBreakPoints' }, '0018,6054' => { VR => 'FD', Name => 'TableOfYBreakPoints' }, '0018,6056' => { VR => 'UL', Name => 'NumberOfTableEntries' }, '0018,6058' => { VR => 'UL', Name => 'TableOfPixelValues' }, '0018,605A' => { VR => 'FL', Name => 'TableOfParameterValues' }, '0018,6060' => { VR => 'FL', Name => 'RWaveTimeVector' }, '0018,7000' => { VR => 'CS', Name => 'DetectorConditionsNominalFlag' }, '0018,7001' => { VR => 'DS', Name => 'DetectorTemperature' }, '0018,7004' => { VR => 'CS', Name => 'DetectorType' }, '0018,7005' => { VR => 'CS', Name => 'DetectorConfiguration' }, '0018,7006' => { VR => 'LT', Name => 'DetectorDescription' }, '0018,7008' => { VR => 'LT', Name => 'DetectorMode' }, '0018,700A' => { VR => 'SH', Name => 'DetectorID' }, '0018,700C' => { VR => 'DA', Name => 'DateOfLastDetectorCalibration' }, '0018,700E' => { VR => 'TM', Name => 'TimeOfLastDetectorCalibration' }, '0018,7010' => { VR => 'IS', Name => 'DetectorExposuresSinceCalibration' }, '0018,7011' => { VR => 'IS', Name => 'DetectorExposuresSinceManufactured' }, '0018,7012' => { VR => 'DS', Name => 'DetectorTimeSinceLastExposure' }, '0018,7014' => { VR => 'DS', Name => 'DetectorActiveTime' }, '0018,7016' => { VR => 'DS', Name => 'DetectorActiveOffsetFromExposure' }, '0018,701A' => { VR => 'DS', Name => 'DetectorBinning' }, '0018,7020' => { VR => 'DS', Name => 'DetectorElementPhysicalSize' }, '0018,7022' => { VR => 'DS', Name => 'DetectorElementSpacing' }, '0018,7024' => { VR => 'CS', Name => 'DetectorActiveShape' }, '0018,7026' => { VR => 'DS', Name => 'DetectorActiveDimensions' }, '0018,7028' => { VR => 'DS', Name => 'DetectorActiveOrigin' }, '0018,702A' => { VR => 'LO', Name => 'DetectorManufacturerName' }, '0018,702B' => { VR => 'LO', Name => 'DetectorManufacturersModelName' }, '0018,7030' => { VR => 'DS', Name => 'FieldOfViewOrigin' }, '0018,7032' => { VR => 'DS', Name => 'FieldOfViewRotation' }, '0018,7034' => { VR => 'CS', Name => 'FieldOfViewHorizontalFlip' }, '0018,7040' => { VR => 'LT', Name => 'GridAbsorbingMaterial' }, '0018,7041' => { VR => 'LT', Name => 'GridSpacingMaterial' }, '0018,7042' => { VR => 'DS', Name => 'GridThickness' }, '0018,7044' => { VR => 'DS', Name => 'GridPitch' }, '0018,7046' => { VR => 'IS', Name => 'GridAspectRatio' }, '0018,7048' => { VR => 'DS', Name => 'GridPeriod' }, '0018,704C' => { VR => 'DS', Name => 'GridFocalDistance' }, '0018,7050' => { VR => 'CS', Name => 'FilterMaterial' }, '0018,7052' => { VR => 'DS', Name => 'FilterThicknessMinimum' }, '0018,7054' => { VR => 'DS', Name => 'FilterThicknessMaximum' }, '0018,7060' => { VR => 'CS', Name => 'ExposureControlMode' }, '0018,7062' => { VR => 'LT', Name => 'ExposureControlModeDescription' }, '0018,7064' => { VR => 'CS', Name => 'ExposureStatus' }, '0018,7065' => { VR => 'DS', Name => 'PhototimerSetting' }, '0018,8150' => { VR => 'DS', Name => 'ExposureTimeInMicroSec' }, '0018,8151' => { VR => 'DS', Name => 'XRayTubeCurrentInMicroAmps' }, '0018,9004' => { VR => 'CS', Name => 'ContentQualification' }, '0018,9005' => { VR => 'SH', Name => 'PulseSequenceName' }, '0018,9006' => { VR => 'SQ', Name => 'MRImagingModifierSequence' }, '0018,9008' => { VR => 'CS', Name => 'EchoPulseSequence' }, '0018,9009' => { VR => 'CS', Name => 'InversionRecovery' }, '0018,9010' => { VR => 'CS', Name => 'FlowCompensation' }, '0018,9011' => { VR => 'CS', Name => 'MultipleSpinEcho' }, '0018,9012' => { VR => 'CS', Name => 'MultiPlanarExcitation' }, '0018,9014' => { VR => 'CS', Name => 'PhaseContrast' }, '0018,9015' => { VR => 'CS', Name => 'TimeOfFlightContrast' }, '0018,9016' => { VR => 'CS', Name => 'Spoiling' }, '0018,9017' => { VR => 'CS', Name => 'SteadyStatePulseSequence' }, '0018,9018' => { VR => 'CS', Name => 'EchoPlanarPulseSequence' }, '0018,9019' => { VR => 'FD', Name => 'TagAngleFirstAxis' }, '0018,9020' => { VR => 'CS', Name => 'MagnetizationTransfer' }, '0018,9021' => { VR => 'CS', Name => 'T2Preparation' }, '0018,9022' => { VR => 'CS', Name => 'BloodSignalNulling' }, '0018,9022' => { VR => 'CS', Name => 'BloodSignalNulling' }, '0018,9024' => { VR => 'CS', Name => 'SaturationRecovery' }, '0018,9025' => { VR => 'CS', Name => 'SpectrallySelectedSuppression' }, '0018,9026' => { VR => 'CS', Name => 'SpectrallySelectedExcitation' }, '0018,9027' => { VR => 'CS', Name => 'SpatialPresaturation' }, '0018,9028' => { VR => 'CS', Name => 'Tagging' }, '0018,9029' => { VR => 'CS', Name => 'OversamplingPhase' }, '0018,9030' => { VR => 'FD', Name => 'TagSpacingFirstDimension' }, '0018,9032' => { VR => 'CS', Name => 'GeometryOfKSpaceTraversal' }, '0018,9033' => { VR => 'CS', Name => 'SegmentedKSpaceTraversal' }, '0018,9034' => { VR => 'CS', Name => 'RectilinearPhaseEncodeReordering' }, '0018,9035' => { VR => 'FD', Name => 'TagThickness' }, '0018,9036' => { VR => 'CS', Name => 'PartialFourierDirection' }, '0018,9037' => { VR => 'CS', Name => 'CardiacSynchronizationTechnique' }, '0018,9041' => { VR => 'LO', Name => 'ReceiveCoilManufacturerName' }, '0018,9042' => { VR => 'SQ', Name => 'MRReceiveCoilSequence' }, '0018,9043' => { VR => 'CS', Name => 'ReceiveCoilType' }, '0018,9044' => { VR => 'CS', Name => 'QuadratureReceiveCoil' }, '0018,9045' => { VR => 'SQ', Name => 'MultiCoilDefinitionSequence' }, '0018,9046' => { VR => 'LO', Name => 'MultiCoilConfiguration' }, '0018,9047' => { VR => 'SH', Name => 'MultiCoilElementName' }, '0018,9048' => { VR => 'CS', Name => 'MultiCoilElementUsed' }, '0018,9049' => { VR => 'SQ', Name => 'MRTransmitCoilSequence' }, '0018,9050' => { VR => 'LO', Name => 'TransmitCoilManufacturerName' }, '0018,9051' => { VR => 'CS', Name => 'TransmitCoilType' }, '0018,9052' => { VR => 'FD', Name => 'SpectralWidth' }, '0018,9053' => { VR => 'FD', Name => 'ChemicalShiftReference' }, '0018,9054' => { VR => 'CS', Name => 'VolumeLocalizationTechnique' }, '0018,9058' => { VR => 'US', Name => 'MRAcquisitionFrequencyEncodeSteps' }, '0018,9059' => { VR => 'CS', Name => 'Decoupling' }, '0018,9060' => { VR => 'CS', Name => 'DecoupledNucleus' }, '0018,9061' => { VR => 'FD', Name => 'DecouplingFrequency' }, '0018,9062' => { VR => 'CS', Name => 'DecouplingMethod' }, '0018,9063' => { VR => 'FD', Name => 'DecouplingChemicalShiftReference' }, '0018,9064' => { VR => 'CS', Name => 'KSpaceFiltering' }, '0018,9065' => { VR => 'CS', Name => 'TimeDomainFiltering' }, '0018,9066' => { VR => 'US', Name => 'NumberOfZeroFills' }, '0018,9067' => { VR => 'CS', Name => 'BaselineCorrection' }, '0018,9069' => { VR => 'FD', Name => 'ParallelReductionFactorInPlane' }, '0018,9070' => { VR => 'FD', Name => 'CardiacRRIntervalSpecified' }, '0018,9073' => { VR => 'FD', Name => 'AcquisitionDuration' }, '0018,9074' => { VR => 'DT', Name => 'FrameAcquisitionDateTime' }, '0018,9075' => { VR => 'CS', Name => 'DiffusionDirectionality' }, '0018,9076' => { VR => 'SQ', Name => 'DiffusionGradientDirectionSequence' }, '0018,9077' => { VR => 'CS', Name => 'ParallelAcquisition' }, '0018,9078' => { VR => 'CS', Name => 'ParallelAcquisitionTechnique' }, '0018,9079' => { VR => 'FD', Name => 'InversionTimes' }, '0018,9080' => { VR => 'ST', Name => 'MetaboliteMapDescription' }, '0018,9081' => { VR => 'CS', Name => 'PartialFourier' }, '0018,9082' => { VR => 'FD', Name => 'EffectiveEchoTime' }, '0018,9083' => { VR => 'SQ', Name => 'MetaboliteMapCodeSequence' }, '0018,9084' => { VR => 'SQ', Name => 'ChemicalShiftSequence' }, '0018,9085' => { VR => 'CS', Name => 'CardiacSignalSource' }, '0018,9087' => { VR => 'FD', Name => 'DiffusionBValue' }, '0018,9089' => { VR => 'FD', Name => 'DiffusionGradientOrientation' }, '0018,9090' => { VR => 'FD', Name => 'VelocityEncodingDirection' }, '0018,9091' => { VR => 'FD', Name => 'VelocityEncodingMinimumValue' }, '0018,9093' => { VR => 'US', Name => 'NumberOfKSpaceTrajectories' }, '0018,9094' => { VR => 'CS', Name => 'CoverageOfKSpace' }, '0018,9095' => { VR => 'UL', Name => 'SpectroscopyAcquisitionPhaseRows' }, '0018,9096' => { VR => 'FD', Name => 'ParallelReductFactorInPlaneRetired' }, '0018,9098' => { VR => 'FD', Name => 'TransmitterFrequency' }, '0018,9100' => { VR => 'CS', Name => 'ResonantNucleus' }, '0018,9101' => { VR => 'CS', Name => 'FrequencyCorrection' }, '0018,9103' => { VR => 'SQ', Name => 'MRSpectroscopyFOV-GeometrySequence' }, '0018,9104' => { VR => 'FD', Name => 'SlabThickness' }, '0018,9105' => { VR => 'FD', Name => 'SlabOrientation' }, '0018,9106' => { VR => 'FD', Name => 'MidSlabPosition' }, '0018,9107' => { VR => 'SQ', Name => 'MRSpatialSaturationSequence' }, '0018,9112' => { VR => 'SQ', Name => 'MRTimingAndRelatedParametersSeq' }, '0018,9114' => { VR => 'SQ', Name => 'MREchoSequence' }, '0018,9115' => { VR => 'SQ', Name => 'MRModifierSequence' }, '0018,9117' => { VR => 'SQ', Name => 'MRDiffusionSequence' }, '0018,9118' => { VR => 'SQ', Name => 'CardiacTriggerSequence' }, '0018,9119' => { VR => 'SQ', Name => 'MRAveragesSequence' }, '0018,9125' => { VR => 'SQ', Name => 'MRFOV-GeometrySequence' }, '0018,9126' => { VR => 'SQ', Name => 'VolumeLocalizationSequence' }, '0018,9127' => { VR => 'UL', Name => 'SpectroscopyAcquisitionDataColumns' }, '0018,9147' => { VR => 'CS', Name => 'DiffusionAnisotropyType' }, '0018,9151' => { VR => 'DT', Name => 'FrameReferenceDateTime' }, '0018,9152' => { VR => 'SQ', Name => 'MRMetaboliteMapSequence' }, '0018,9155' => { VR => 'FD', Name => 'ParallelReductionFactorOutOfPlane' }, '0018,9159' => { VR => 'UL', Name => 'SpectroscopyOutOfPlanePhaseSteps' }, '0018,9166' => { VR => 'CS', Name => 'BulkMotionStatus' }, '0018,9168' => { VR => 'FD', Name => 'ParallelReductionFactSecondInPlane' }, '0018,9169' => { VR => 'CS', Name => 'CardiacBeatRejectionTechnique' }, '0018,9170' => { VR => 'CS', Name => 'RespiratoryMotionCompTechnique' }, '0018,9171' => { VR => 'CS', Name => 'RespiratorySignalSource' }, '0018,9172' => { VR => 'CS', Name => 'BulkMotionCompensationTechnique' }, '0018,9173' => { VR => 'CS', Name => 'BulkMotionSignalSource' }, '0018,9174' => { VR => 'CS', Name => 'ApplicableSafetyStandardAgency' }, '0018,9175' => { VR => 'LO', Name => 'ApplicableSafetyStandardDescr' }, '0018,9176' => { VR => 'SQ', Name => 'OperatingModeSequence' }, '0018,9177' => { VR => 'CS', Name => 'OperatingModeType' }, '0018,9178' => { VR => 'CS', Name => 'OperatingMode' }, '0018,9179' => { VR => 'CS', Name => 'SpecificAbsorptionRateDefinition' }, '0018,9180' => { VR => 'CS', Name => 'GradientOutputType' }, '0018,9181' => { VR => 'FD', Name => 'SpecificAbsorptionRateValue' }, '0018,9182' => { VR => 'FD', Name => 'GradientOutput' }, '0018,9183' => { VR => 'CS', Name => 'FlowCompensationDirection' }, '0018,9184' => { VR => 'FD', Name => 'TaggingDelay' }, '0018,9185' => { VR => 'ST', Name => 'RespiratoryMotionCompTechDescr' }, '0018,9186' => { VR => 'SH', Name => 'RespiratorySignalSourceID' }, '0018,9195' => { VR => 'FD', Name => 'ChemicalShiftsMinIntegrateLimitHz' }, '0018,9196' => { VR => 'FD', Name => 'ChemicalShiftsMaxIntegrateLimitHz' }, '0018,9197' => { VR => 'SQ', Name => 'MRVelocityEncodingSequence' }, '0018,9198' => { VR => 'CS', Name => 'FirstOrderPhaseCorrection' }, '0018,9199' => { VR => 'CS', Name => 'WaterReferencedPhaseCorrection' }, '0018,9200' => { VR => 'CS', Name => 'MRSpectroscopyAcquisitionType' }, '0018,9214' => { VR => 'CS', Name => 'RespiratoryCyclePosition' }, '0018,9217' => { VR => 'FD', Name => 'VelocityEncodingMaximumValue' }, '0018,9218' => { VR => 'FD', Name => 'TagSpacingSecondDimension' }, '0018,9219' => { VR => 'SS', Name => 'TagAngleSecondAxis' }, '0018,9220' => { VR => 'FD', Name => 'FrameAcquisitionDuration' }, '0018,9226' => { VR => 'SQ', Name => 'MRImageFrameTypeSequence' }, '0018,9227' => { VR => 'SQ', Name => 'MRSpectroscopyFrameTypeSequence' }, '0018,9231' => { VR => 'US', Name => 'MRAcqPhaseEncodingStepsInPlane' }, '0018,9232' => { VR => 'US', Name => 'MRAcqPhaseEncodingStepsOutOfPlane' }, '0018,9234' => { VR => 'UL', Name => 'SpectroscopyAcqPhaseColumns' }, '0018,9236' => { VR => 'CS', Name => 'CardiacCyclePosition' }, '0018,9239' => { VR => 'SQ', Name => 'SpecificAbsorptionRateSequence' }, '0018,9240' => { VR => 'US', Name => 'RFEchoTrainLength' }, '0018,9241' => { VR => 'US', Name => 'GradientEchoTrainLength' }, '0018,9295' => { VR => 'FD', Name => 'ChemicalShiftsMinIntegrateLimitPPM' }, '0018,9296' => { VR => 'FD', Name => 'ChemicalShiftsMaxIntegrateLimitPPM' }, '0018,9301' => { VR => 'SQ', Name => 'CTAcquisitionTypeSequence' }, '0018,9302' => { VR => 'CS', Name => 'AcquisitionType' }, '0018,9303' => { VR => 'FD', Name => 'TubeAngle' }, '0018,9304' => { VR => 'SQ', Name => 'CTAcquisitionDetailsSequence' }, '0018,9305' => { VR => 'FD', Name => 'RevolutionTime' }, '0018,9306' => { VR => 'FD', Name => 'SingleCollimationWidth' }, '0018,9307' => { VR => 'FD', Name => 'TotalCollimationWidth' }, '0018,9308' => { VR => 'SQ', Name => 'CTTableDynamicsSequence' }, '0018,9309' => { VR => 'FD', Name => 'TableSpeed' }, '0018,9310' => { VR => 'FD', Name => 'TableFeedPerRotation' }, '0018,9311' => { VR => 'FD', Name => 'SpiralPitchFactor' }, '0018,9312' => { VR => 'SQ', Name => 'CTGeometrySequence' }, '0018,9313' => { VR => 'FD', Name => 'DataCollectionCenterPatient' }, '0018,9314' => { VR => 'SQ', Name => 'CTReconstructionSequence' }, '0018,9315' => { VR => 'CS', Name => 'ReconstructionAlgorithm' }, '0018,9316' => { VR => 'CS', Name => 'ConvolutionKernelGroup' }, '0018,9317' => { VR => 'FD', Name => 'ReconstructionFieldOfView' }, '0018,9318' => { VR => 'FD', Name => 'ReconstructionTargetCenterPatient' }, '0018,9319' => { VR => 'FD', Name => 'ReconstructionAngle' }, '0018,9320' => { VR => 'SH', Name => 'ImageFilter' }, '0018,9321' => { VR => 'SQ', Name => 'CTExposureSequence' }, '0018,9322' => { VR => 'FD', Name => 'ReconstructionPixelSpacing' }, '0018,9323' => { VR => 'CS', Name => 'ExposureModulationType' }, '0018,9324' => { VR => 'FD', Name => 'EstimatedDoseSaving' }, '0018,9325' => { VR => 'SQ', Name => 'CTXRayDetailsSequence' }, '0018,9326' => { VR => 'SQ', Name => 'CTPositionSequence' }, '0018,9327' => { VR => 'FD', Name => 'TablePosition' }, '0018,9328' => { VR => 'FD', Name => 'ExposureTimeInMilliSec' }, '0018,9329' => { VR => 'SQ', Name => 'CTImageFrameTypeSequence' }, '0018,9330' => { VR => 'FD', Name => 'XRayTubeCurrentInMilliAmps' }, '0018,9332' => { VR => 'FD', Name => 'ExposureInMilliAmpSec' }, '0018,9333' => { VR => 'CS', Name => 'ConstantVolumeFlag' }, '0018,9334' => { VR => 'CS', Name => 'FluoroscopyFlag' }, '0018,9335' => { VR => 'FD', Name => 'SourceToDataCollectionCenterDist' }, '0018,9337' => { VR => 'US', Name => 'ContrastBolusAgentNumber' }, '0018,9338' => { VR => 'SQ', Name => 'ContrastBolusIngredientCodeSeq' }, '0018,9340' => { VR => 'SQ', Name => 'ContrastAdministrationProfileSeq' }, '0018,9341' => { VR => 'SQ', Name => 'ContrastBolusUsageSequence' }, '0018,9342' => { VR => 'CS', Name => 'ContrastBolusAgentAdministered' }, '0018,9343' => { VR => 'CS', Name => 'ContrastBolusAgentDetected' }, '0018,9344' => { VR => 'CS', Name => 'ContrastBolusAgentPhase' }, '0018,9345' => { VR => 'FD', Name => 'CTDIvol' }, '0018,9346' => { VR => 'SQ', Name => 'CTDIPhantomTypeCodeSequence' }, '0018,9351' => { VR => 'FL', Name => 'CalciumScoringMassFactorPatient' }, '0018,9352' => { VR => 'FL', Name => 'CalciumScoringMassFactorDevice' }, '0018,9353' => { VR => 'FL', Name => 'EnergyWeightingFactor' }, '0018,9360' => { VR => 'SQ', Name => 'CTAdditionalXRaySourceSequence' }, '0018,9401' => { VR => 'SQ', Name => 'ProjectionPixelCalibrationSequence' }, '0018,9402' => { VR => 'FL', Name => 'DistanceSourceToIsocenter' }, '0018,9403' => { VR => 'FL', Name => 'DistanceObjectToTableTop' }, '0018,9404' => { VR => 'FL', Name => 'ObjectPixelSpacingInCenterOfBeam' }, '0018,9405' => { VR => 'SQ', Name => 'PositionerPositionSequence' }, '0018,9406' => { VR => 'SQ', Name => 'TablePositionSequence' }, '0018,9407' => { VR => 'SQ', Name => 'CollimatorShapeSequence' }, '0018,9412' => { VR => 'SQ', Name => 'XA-XRFFrameCharacteristicsSequence' }, '0018,9417' => { VR => 'SQ', Name => 'FrameAcquisitionSequence' }, '0018,9420' => { VR => 'CS', Name => 'XRayReceptorType' }, '0018,9423' => { VR => 'LO', Name => 'AcquisitionProtocolName' }, '0018,9424' => { VR => 'LT', Name => 'AcquisitionProtocolDescription' }, '0018,9425' => { VR => 'CS', Name => 'ContrastBolusIngredientOpaque' }, '0018,9426' => { VR => 'FL', Name => 'DistanceReceptorPlaneToDetHousing' }, '0018,9427' => { VR => 'CS', Name => 'IntensifierActiveShape' }, '0018,9428' => { VR => 'FL', Name => 'IntensifierActiveDimensions' }, '0018,9429' => { VR => 'FL', Name => 'PhysicalDetectorSize' }, '0018,9430' => { VR => 'US', Name => 'PositionOfIsocenterProjection' }, '0018,9432' => { VR => 'SQ', Name => 'FieldOfViewSequence' }, '0018,9433' => { VR => 'LO', Name => 'FieldOfViewDescription' }, '0018,9434' => { VR => 'SQ', Name => 'ExposureControlSensingRegionsSeq' }, '0018,9435' => { VR => 'CS', Name => 'ExposureControlSensingRegionShape' }, '0018,9436' => { VR => 'SS', Name => 'ExposureControlSensRegionLeftEdge' }, '0018,9437' => { VR => 'SS', Name => 'ExposureControlSensRegionRightEdge' }, '0018,9440' => { VR => 'SS', Name => 'CenterOfCircExposControlSensRegion' }, '0018,9441' => { VR => 'US', Name => 'RadiusOfCircExposControlSensRegion' }, '0018,9447' => { VR => 'FL', Name => 'ColumnAngulationPatient' }, '0018,9449' => { VR => 'FL', Name => 'BeamAngle' }, '0018,9451' => { VR => 'SQ', Name => 'FrameDetectorParametersSequence' }, '0018,9452' => { VR => 'FL', Name => 'CalculatedAnatomyThickness' }, '0018,9455' => { VR => 'SQ', Name => 'CalibrationSequence' }, '0018,9456' => { VR => 'SQ', Name => 'ObjectThicknessSequence' }, '0018,9457' => { VR => 'CS', Name => 'PlaneIdentification' }, '0018,9461' => { VR => 'FL', Name => 'FieldOfViewDimensionsInFloat' }, '0018,9462' => { VR => 'SQ', Name => 'IsocenterReferenceSystemSequence' }, '0018,9463' => { VR => 'FL', Name => 'PositionerIsocenterPrimaryAngle' }, '0018,9464' => { VR => 'FL', Name => 'PositionerIsocenterSecondaryAngle' }, '0018,9465' => { VR => 'FL', Name => 'PositionerIsocenterDetRotAngle' }, '0018,9466' => { VR => 'FL', Name => 'TableXPositionToIsocenter' }, '0018,9467' => { VR => 'FL', Name => 'TableYPositionToIsocenter' }, '0018,9468' => { VR => 'FL', Name => 'TableZPositionToIsocenter' }, '0018,9469' => { VR => 'FL', Name => 'TableHorizontalRotationAngle' }, '0018,9470' => { VR => 'FL', Name => 'TableHeadTiltAngle' }, '0018,9471' => { VR => 'FL', Name => 'TableCradleTiltAngle' }, '0018,9472' => { VR => 'SQ', Name => 'FrameDisplayShutterSequence' }, '0018,9473' => { VR => 'FL', Name => 'AcquiredImageAreaDoseProduct' }, '0018,9474' => { VR => 'CS', Name => 'CArmPositionerTabletopRelationship' }, '0018,9476' => { VR => 'SQ', Name => 'XRayGeometrySequence' }, '0018,9477' => { VR => 'SQ', Name => 'IrradiationEventIDSequence' }, '0018,9504' => { VR => 'SQ', Name => 'XRay3DFrameTypeSequence' }, '0018,9506' => { VR => 'SQ', Name => 'ContributingSourcesSequence' }, '0018,9507' => { VR => 'SQ', Name => 'XRay3DAcquisitionSequence' }, '0018,9508' => { VR => 'FL', Name => 'PrimaryPositionerScanArc' }, '0018,9509' => { VR => 'FL', Name => 'SecondaryPositionerScanArc' }, '0018,9510' => { VR => 'FL', Name => 'PrimaryPositionerScanStartAngle' }, '0018,9511' => { VR => 'FL', Name => 'SecondaryPositionerScanStartAngle' }, '0018,9514' => { VR => 'FL', Name => 'PrimaryPositionerIncrement' }, '0018,9515' => { VR => 'FL', Name => 'SecondaryPositionerIncrement' }, '0018,9516' => { VR => 'DT', Name => 'StartAcquisitionDateTime' }, '0018,9517' => { VR => 'DT', Name => 'EndAcquisitionDateTime' }, '0018,9524' => { VR => 'LO', Name => 'ApplicationName' }, '0018,9525' => { VR => 'LO', Name => 'ApplicationVersion' }, '0018,9526' => { VR => 'LO', Name => 'ApplicationManufacturer' }, '0018,9527' => { VR => 'CS', Name => 'AlgorithmType' }, '0018,9528' => { VR => 'LO', Name => 'AlgorithmDescription' }, '0018,9530' => { VR => 'SQ', Name => 'XRay3DReconstructionSequence' }, '0018,9531' => { VR => 'LO', Name => 'ReconstructionDescription' }, '0018,9538' => { VR => 'SQ', Name => 'PerProjectionAcquisitionSequence' }, '0018,9601' => { VR => 'SQ', Name => 'DiffusionBMatrixSequence' }, '0018,9602' => { VR => 'FD', Name => 'DiffusionBValueXX' }, '0018,9603' => { VR => 'FD', Name => 'DiffusionBValueXY' }, '0018,9604' => { VR => 'FD', Name => 'DiffusionBValueXZ' }, '0018,9605' => { VR => 'FD', Name => 'DiffusionBValueYY' }, '0018,9606' => { VR => 'FD', Name => 'DiffusionBValueYZ' }, '0018,9607' => { VR => 'FD', Name => 'DiffusionBValueZZ' }, '0018,9701' => { VR => 'DT', Name => 'DecayCorrectionDateTime' }, '0018,9715' => { VR => 'FD', Name => 'StartDensityThreshold' }, '0018,9722' => { VR => 'FD', Name => 'TerminationTimeThreshold' }, '0018,9725' => { VR => 'CS', Name => 'DetectorGeometry' }, '0018,9727' => { VR => 'FD', Name => 'AxialDetectorDimension' }, '0018,9735' => { VR => 'SQ', Name => 'PETPositionSequence' }, '0018,9739' => { VR => 'US', Name => 'NumberOfIterations' }, '0018,9740' => { VR => 'US', Name => 'NumberOfSubsets' }, '0018,9751' => { VR => 'SQ', Name => 'PETFrameTypeSequence' }, '0018,9756' => { VR => 'CS', Name => 'ReconstructionType' }, '0018,9758' => { VR => 'CS', Name => 'DecayCorrected' }, '0018,9759' => { VR => 'CS', Name => 'AttenuationCorrected' }, '0018,9760' => { VR => 'CS', Name => 'ScatterCorrected' }, '0018,9761' => { VR => 'CS', Name => 'DeadTimeCorrected' }, '0018,9762' => { VR => 'CS', Name => 'GantryMotionCorrected' }, '0018,9763' => { VR => 'CS', Name => 'PatientMotionCorrected' }, '0018,9765' => { VR => 'CS', Name => 'RandomsCorrected' }, '0018,9767' => { VR => 'CS', Name => 'SensitivityCalibrated' }, '0018,9801' => { VR => 'FD', Name => 'DepthsOfFocus' }, '0018,9804' => { VR => 'DT', Name => 'ExclusionStartDatetime' }, '0018,9805' => { VR => 'FD', Name => 'ExclusionDuration' }, '0018,9807' => { VR => 'SQ', Name => 'ImageDataTypeSequence' }, '0018,9808' => { VR => 'CS', Name => 'DataType' }, '0018,980B' => { VR => 'CS', Name => 'AliasedDataType' }, '0018,A001' => { VR => 'SQ', Name => 'ContributingEquipmentSequence' }, '0018,A002' => { VR => 'DT', Name => 'ContributionDateTime' }, '0018,A003' => { VR => 'ST', Name => 'ContributionDescription' }, # GEMS_ACQU_01 (ref 4) '0019,1002' => { VR => 'SL', Name => 'NumberOfCellsIInDetector' }, '0019,1003' => { VR => 'DS', Name => 'CellNumberAtTheta' }, '0019,1004' => { VR => 'DS', Name => 'CellSpacing' }, '0019,100F' => { VR => 'DS', Name => 'HorizFrameOfRef' }, '0019,1011' => { VR => 'SS', Name => 'SeriesContrast' }, '0019,1012' => { VR => 'SS', Name => 'LastPseq' }, '0019,1013' => { VR => 'SS', Name => 'StartNumberForBaseline' }, '0019,1014' => { VR => 'SS', Name => 'EndNumberForBaseline' }, '0019,1015' => { VR => 'SS', Name => 'StartNumberForEnhancedScans' }, '0019,1016' => { VR => 'SS', Name => 'EndNumberForEnhancedScans' }, '0019,1017' => { VR => 'SS', Name => 'SeriesPlane' }, '0019,1018' => { VR => 'LO', Name => 'FirstScanRas' }, '0019,1019' => { VR => 'DS', Name => 'FirstScanLocation' }, '0019,101A' => { VR => 'LO', Name => 'LastScanRas' }, '0019,101B' => { VR => 'DS', Name => 'LastScanLoc' }, '0019,101E' => { VR => 'DS', Name => 'DisplayFieldOfView' }, '0019,1023' => { VR => 'DS', Name => 'TableSpeed' }, '0019,1024' => { VR => 'DS', Name => 'MidScanTime' }, '0019,1025' => { VR => 'SS', Name => 'MidScanFlag' }, '0019,1026' => { VR => 'SL', Name => 'DegreesOfAzimuth' }, '0019,1027' => { VR => 'DS', Name => 'GantryPeriod' }, '0019,102A' => { VR => 'DS', Name => 'XRayOnPosition' }, '0019,102B' => { VR => 'DS', Name => 'XRayOffPosition' }, '0019,102C' => { VR => 'SL', Name => 'NumberOfTriggers' }, '0019,102E' => { VR => 'DS', Name => 'AngleOfFirstView' }, '0019,102F' => { VR => 'DS', Name => 'TriggerFrequency' }, '0019,1039' => { VR => 'SS', Name => 'ScanFOVType' }, '0019,1040' => { VR => 'SS', Name => 'StatReconFlag' }, '0019,1041' => { VR => 'SS', Name => 'ComputeType' }, '0019,1042' => { VR => 'SS', Name => 'SegmentNumber' }, '0019,1043' => { VR => 'SS', Name => 'TotalSegmentsRequested' }, '0019,1044' => { VR => 'DS', Name => 'InterscanDelay' }, '0019,1047' => { VR => 'SS', Name => 'ViewCompressionFactor' }, '0019,104A' => { VR => 'SS', Name => 'TotalNoOfRefChannels' }, '0019,104B' => { VR => 'SL', Name => 'DataSizeForScanData' }, '0019,1052' => { VR => 'SS', Name => 'ReconPostProcflag' }, '0019,1057' => { VR => 'SS', Name => 'CTWaterNumber' }, '0019,1058' => { VR => 'SS', Name => 'CTBoneNumber' }, '0019,105A' => { VR => 'FL', Name => 'AcquisitionDuration' }, '0019,105E' => { VR => 'SL', Name => 'NumberOfChannels' }, '0019,105F' => { VR => 'SL', Name => 'IncrementBetweenChannels' }, '0019,1060' => { VR => 'SL', Name => 'StartingView' }, '0019,1061' => { VR => 'SL', Name => 'NumberOfViews' }, '0019,1062' => { VR => 'SL', Name => 'IncrementBetweenViews' }, '0019,106A' => { VR => 'SS', Name => 'DependantOnNoViewsProcessed' }, '0019,106B' => { VR => 'SS', Name => 'FieldOfViewInDetectorCells' }, '0019,1070' => { VR => 'SS', Name => 'ValueOfBackProjectionButton' }, '0019,1071' => { VR => 'SS', Name => 'SetIfFatqEstimatesWereUsed' }, '0019,1072' => { VR => 'DS', Name => 'ZChanAvgOverViews' }, '0019,1073' => { VR => 'DS', Name => 'AvgOfLeftRefChansOverViews' }, '0019,1074' => { VR => 'DS', Name => 'MaxLeftChanOverViews' }, '0019,1075' => { VR => 'DS', Name => 'AvgOfRightRefChansOverViews' }, '0019,1076' => { VR => 'DS', Name => 'MaxRightChanOverViews' }, '0019,107D' => { VR => 'DS', Name => 'SecondEcho' }, '0019,107E' => { VR => 'SS', Name => 'NumberOfEchoes' }, '0019,107F' => { VR => 'DS', Name => 'TableDelta' }, '0019,1081' => { VR => 'SS', Name => 'Contiguous' }, '0019,1084' => { VR => 'DS', Name => 'PeakSAR' }, '0019,1085' => { VR => 'SS', Name => 'MonitorSAR' }, '0019,1087' => { VR => 'DS', Name => 'CardiacRepetitionTime' }, '0019,1088' => { VR => 'SS', Name => 'ImagesPerCardiacCycle' }, '0019,108A' => { VR => 'SS', Name => 'ActualReceiveGainAnalog' }, '0019,108B' => { VR => 'SS', Name => 'ActualReceiveGainDigital' }, '0019,108D' => { VR => 'DS', Name => 'DelayAfterTrigger' }, '0019,108F' => { VR => 'SS', Name => 'Swappf' }, '0019,1090' => { VR => 'SS', Name => 'PauseInterval' }, '0019,1091' => { VR => 'DS', Name => 'PulseTime' }, '0019,1092' => { VR => 'SL', Name => 'SliceOffsetOnFreqAxis' }, '0019,1093' => { VR => 'DS', Name => 'CenterFrequency' }, '0019,1094' => { VR => 'SS', Name => 'TransmitGain' }, '0019,1095' => { VR => 'SS', Name => 'AnalogReceiverGain' }, '0019,1096' => { VR => 'SS', Name => 'DigitalReceiverGain' }, '0019,1097' => { VR => 'SL', Name => 'BitmapDefiningCVs' }, '0019,1098' => { VR => 'SS', Name => 'CenterFreqMethod' }, '0019,109B' => { VR => 'SS', Name => 'PulseSeqMode' }, '0019,109C' => { VR => 'LO', Name => 'PulseSeqName' }, '0019,109D' => { VR => 'DT', Name => 'PulseSeqDate' }, '0019,109E' => { VR => 'LO', Name => 'InternalPulseSeqName' }, '0019,109F' => { VR => 'SS', Name => 'TransmittingCoil' }, '0019,10A0' => { VR => 'SS', Name => 'SurfaceCoilType' }, '0019,10A1' => { VR => 'SS', Name => 'ExtremityCoilFlag' }, '0019,10A2' => { VR => 'SL', Name => 'RawDataRunNumber' }, '0019,10A3' => { VR => 'UL', Name => 'CalibratedFieldStrength' }, '0019,10A4' => { VR => 'SS', Name => 'SATFatWaterBone' }, '0019,10A5' => { VR => 'DS', Name => 'ReceiveBandwidth' }, '0019,10A7' => { VR => 'DS', Name => 'UserData01' }, '0019,10A8' => { VR => 'DS', Name => 'UserData02' }, '0019,10A9' => { VR => 'DS', Name => 'UserData03' }, '0019,10AA' => { VR => 'DS', Name => 'UserData04' }, '0019,10AB' => { VR => 'DS', Name => 'UserData05' }, '0019,10AC' => { VR => 'DS', Name => 'UserData06' }, '0019,10AD' => { VR => 'DS', Name => 'UserData07' }, '0019,10AE' => { VR => 'DS', Name => 'UserData08' }, '0019,10AF' => { VR => 'DS', Name => 'UserData09' }, '0019,10B0' => { VR => 'DS', Name => 'UserData10' }, '0019,10B1' => { VR => 'DS', Name => 'UserData11' }, '0019,10B2' => { VR => 'DS', Name => 'UserData12' }, '0019,10B3' => { VR => 'DS', Name => 'UserData13' }, '0019,10B4' => { VR => 'DS', Name => 'UserData14' }, '0019,10B5' => { VR => 'DS', Name => 'UserData15' }, '0019,10B6' => { VR => 'DS', Name => 'UserData16' }, '0019,10B7' => { VR => 'DS', Name => 'UserData17' }, '0019,10B8' => { VR => 'DS', Name => 'UserData18' }, '0019,10B9' => { VR => 'DS', Name => 'UserData19' }, '0019,10BA' => { VR => 'DS', Name => 'UserData20' }, '0019,10BB' => { VR => 'DS', Name => 'UserData21' }, '0019,10BC' => { VR => 'DS', Name => 'UserData22' }, '0019,10BD' => { VR => 'DS', Name => 'UserData23' }, '0019,10BE' => { VR => 'DS', Name => 'ProjectionAngle' }, '0019,10C0' => { VR => 'SS', Name => 'SaturationPlanes' }, '0019,10C1' => { VR => 'SS', Name => 'SurfaceCoilIntensity' }, '0019,10C2' => { VR => 'SS', Name => 'SATLocationR' }, '0019,10C3' => { VR => 'SS', Name => 'SATLocationL' }, '0019,10C4' => { VR => 'SS', Name => 'SATLocationA' }, '0019,10C5' => { VR => 'SS', Name => 'SATLocationP' }, '0019,10C6' => { VR => 'SS', Name => 'SATLocationH' }, '0019,10C7' => { VR => 'SS', Name => 'SATLocationF' }, '0019,10C8' => { VR => 'SS', Name => 'SATThicknessR-L' }, '0019,10C9' => { VR => 'SS', Name => 'SATThicknessA-P' }, '0019,10CA' => { VR => 'SS', Name => 'SATThicknessH-F' }, '0019,10CB' => { VR => 'SS', Name => 'PrescribedFlowAxis' }, '0019,10CC' => { VR => 'SS', Name => 'VelocityEncoding' }, '0019,10CD' => { VR => 'SS', Name => 'ThicknessDisclaimer' }, '0019,10CE' => { VR => 'SS', Name => 'PrescanType' }, '0019,10CF' => { VR => 'SS', Name => 'PrescanStatus' }, '0019,10D0' => { VR => 'SH', Name => 'RawDataType' }, '0019,10D2' => { VR => 'SS', Name => 'ProjectionAlgorithm' }, '0019,10D3' => { VR => 'SH', Name => 'ProjectionAlgorithm' }, '0019,10D5' => { VR => 'SS', Name => 'FractionalEcho' }, '0019,10D6' => { VR => 'SS', Name => 'PrepPulse' }, '0019,10D7' => { VR => 'SS', Name => 'CardiacPhases' }, '0019,10D8' => { VR => 'SS', Name => 'VariableEchoflag' }, '0019,10D9' => { VR => 'DS', Name => 'ConcatenatedSAT' }, '0019,10DA' => { VR => 'SS', Name => 'ReferenceChannelUsed' }, '0019,10DB' => { VR => 'DS', Name => 'BackProjectorCoefficient' }, '0019,10DC' => { VR => 'SS', Name => 'PrimarySpeedCorrectionUsed' }, '0019,10DD' => { VR => 'SS', Name => 'OverrangeCorrectionUsed' }, '0019,10DE' => { VR => 'DS', Name => 'DynamicZAlphaValue' }, '0019,10DF' => { VR => 'DS', Name => 'UserData' }, '0019,10E0' => { VR => 'DS', Name => 'UserData' }, '0019,10E2' => { VR => 'DS', Name => 'VelocityEncodeScale' }, '0019,10F2' => { VR => 'SS', Name => 'FastPhases' }, '0019,10F9' => { VR => 'DS', Name => 'TransmissionGain' }, # relationship group '0020,0000' => { VR => 'UL', Name => 'RelationshipGroupLength' }, '0020,000D' => { VR => 'UI', Name => 'StudyInstanceUID' }, '0020,000E' => { VR => 'UI', Name => 'SeriesInstanceUID' }, '0020,0010' => { VR => 'SH', Name => 'StudyID' }, '0020,0011' => { VR => 'IS', Name => 'SeriesNumber' }, '0020,0012' => { VR => 'IS', Name => 'AcquisitionNumber' }, '0020,0013' => { VR => 'IS', Name => 'InstanceNumber' }, '0020,0014' => { VR => 'IS', Name => 'IsotopeNumber' }, '0020,0015' => { VR => 'IS', Name => 'PhaseNumber' }, '0020,0016' => { VR => 'IS', Name => 'IntervalNumber' }, '0020,0017' => { VR => 'IS', Name => 'TimeSlotNumber' }, '0020,0018' => { VR => 'IS', Name => 'AngleNumber' }, '0020,0019' => { VR => 'IS', Name => 'ItemNumber' }, '0020,0020' => { VR => 'CS', Name => 'PatientOrientation' }, '0020,0022' => { VR => 'IS', Name => 'OverlayNumber' }, '0020,0024' => { VR => 'IS', Name => 'CurveNumber' }, '0020,0026' => { VR => 'IS', Name => 'LookupTableNumber' }, '0020,0030' => { VR => 'DS', Name => 'ImagePosition' }, '0020,0032' => { VR => 'DS', Name => 'ImagePositionPatient' }, '0020,0035' => { VR => 'DS', Name => 'ImageOrientation' }, '0020,0037' => { VR => 'DS', Name => 'ImageOrientationPatient' }, '0020,0050' => { VR => 'DS', Name => 'Location' }, '0020,0052' => { VR => 'UI', Name => 'FrameOfReferenceUID' }, '0020,0060' => { VR => 'CS', Name => 'Laterality' }, '0020,0062' => { VR => 'CS', Name => 'ImageLaterality' }, '0020,0070' => { VR => 'LO', Name => 'ImageGeometryType' }, '0020,0080' => { VR => 'CS', Name => 'MaskingImage' }, '0020,0100' => { VR => 'IS', Name => 'TemporalPositionIdentifier' }, '0020,0105' => { VR => 'IS', Name => 'NumberOfTemporalPositions' }, '0020,0110' => { VR => 'DS', Name => 'TemporalResolution' }, '0020,0200' => { VR => 'UI', Name => 'SynchronizationFrameOfReferenceUID' }, '0020,1000' => { VR => 'IS', Name => 'SeriesInStudy' }, '0020,1001' => { VR => 'IS', Name => 'AcquisitionsInSeries' }, '0020,1002' => { VR => 'IS', Name => 'ImagesInAcquisition' }, '0020,1003' => { VR => 'IS', Name => 'ImagesInSeries' }, '0020,1004' => { VR => 'IS', Name => 'AcquisitionsInStudy' }, '0020,1005' => { VR => 'IS', Name => 'ImagesInStudy' }, '0020,1020' => { VR => 'CS', Name => 'Reference' }, '0020,1040' => { VR => 'LO', Name => 'PositionReferenceIndicator' }, '0020,1041' => { VR => 'DS', Name => 'SliceLocation' }, '0020,1070' => { VR => 'IS', Name => 'OtherStudyNumbers' }, '0020,1200' => { VR => 'IS', Name => 'NumberOfPatientRelatedStudies' }, '0020,1202' => { VR => 'IS', Name => 'NumberOfPatientRelatedSeries' }, '0020,1204' => { VR => 'IS', Name => 'NumberOfPatientRelatedInstances' }, '0020,1206' => { VR => 'IS', Name => 'NumberOfStudyRelatedSeries' }, '0020,1208' => { VR => 'IS', Name => 'NumberOfStudyRelatedInstances' }, '0020,1209' => { VR => 'IS', Name => 'NumberOfSeriesRelatedInstances' }, '0020,31xx' => { VR => 'CS', Name => 'SourceImageIDs' }, '0020,3401' => { VR => 'CS', Name => 'ModifyingDeviceID' }, '0020,3402' => { VR => 'CS', Name => 'ModifiedImageID' }, '0020,3403' => { VR => 'DA', Name => 'ModifiedImageDate' }, '0020,3404' => { VR => 'LO', Name => 'ModifyingDeviceManufacturer' }, '0020,3405' => { VR => 'TM', Name => 'ModifiedImageTime' }, '0020,3406' => { VR => 'LO', Name => 'ModifiedImageDescription' }, '0020,4000' => { VR => 'LT', Name => 'ImageComments' }, '0020,5000' => { VR => 'AT', Name => 'OriginalImageIdentification' }, '0020,5002' => { VR => 'CS', Name => 'OriginalImageIdentNomenclature' }, '0020,9056' => { VR => 'SH', Name => 'StackID' }, '0020,9057' => { VR => 'UL', Name => 'InStackPositionNumber' }, '0020,9071' => { VR => 'SQ', Name => 'FrameAnatomySequence' }, '0020,9072' => { VR => 'CS', Name => 'FrameLaterality' }, '0020,9111' => { VR => 'SQ', Name => 'FrameContentSequence' }, '0020,9113' => { VR => 'SQ', Name => 'PlanePositionSequence' }, '0020,9116' => { VR => 'SQ', Name => 'PlaneOrientationSequence' }, '0020,9128' => { VR => 'UL', Name => 'TemporalPositionIndex' }, '0020,9153' => { VR => 'FD', Name => 'TriggerDelayTime' }, '0020,9156' => { VR => 'US', Name => 'FrameAcquisitionNumber' }, '0020,9157' => { VR => 'UL', Name => 'DimensionIndexValues' }, '0020,9158' => { VR => 'LT', Name => 'FrameComments' }, '0020,9161' => { VR => 'UI', Name => 'ConcatenationUID' }, '0020,9162' => { VR => 'US', Name => 'InConcatenationNumber' }, '0020,9163' => { VR => 'US', Name => 'InConcatenationTotalNumber' }, '0020,9164' => { VR => 'UI', Name => 'DimensionOrganizationUID' }, '0020,9165' => { VR => 'AT', Name => 'DimensionIndexPointer' }, '0020,9167' => { VR => 'AT', Name => 'FunctionalGroupPointer' }, '0020,9213' => { VR => 'LO', Name => 'DimensionIndexPrivateCreator' }, '0020,9221' => { VR => 'SQ', Name => 'DimensionOrganizationSequence' }, '0020,9222' => { VR => 'SQ', Name => 'DimensionIndexSequence' }, '0020,9228' => { VR => 'UL', Name => 'ConcatenationFrameOffsetNumber' }, '0020,9238' => { VR => 'LO', Name => 'FunctionalGroupPrivateCreator' }, '0020,9241' => { VR => 'FL', Name => 'NominalPercentageOfCardiacPhase' }, '0020,9245' => { VR => 'FL', Name => 'NominalPercentOfRespiratoryPhase' }, '0020,9246' => { VR => 'FL', Name => 'StartingRespiratoryAmplitude' }, '0020,9247' => { VR => 'CS', Name => 'StartingRespiratoryPhase' }, '0020,9248' => { VR => 'FL', Name => 'EndingRespiratoryAmplitude' }, '0020,9249' => { VR => 'CS', Name => 'EndingRespiratoryPhase' }, '0020,9250' => { VR => 'CS', Name => 'RespiratoryTriggerType' }, '0020,9251' => { VR => 'FD', Name => 'RRIntervalTimeNominal' }, '0020,9252' => { VR => 'FD', Name => 'ActualCardiacTriggerDelayTime' }, '0020,9253' => { VR => 'SQ', Name => 'RespiratorySynchronizationSequence' }, '0020,9254' => { VR => 'FD', Name => 'RespiratoryIntervalTime' }, '0020,9255' => { VR => 'FD', Name => 'NominalRespiratoryTriggerDelayTime' }, '0020,9256' => { VR => 'FD', Name => 'RespiratoryTriggerDelayThreshold' }, '0020,9257' => { VR => 'FD', Name => 'ActualRespiratoryTriggerDelayTime' }, '0020,9301' => { VR => 'FD', Name => 'ImagePositionVolume' }, '0020,9302' => { VR => 'FD', Name => 'ImageOrientationVolume' }, '0020,9308' => { VR => 'FD', Name => 'ApexPosition' }, '0020,9421' => { VR => 'LO', Name => 'DimensionDescriptionLabel' }, '0020,9450' => { VR => 'SQ', Name => 'PatientOrientationInFrameSequence' }, '0020,9453' => { VR => 'LO', Name => 'FrameLabel' }, '0020,9518' => { VR => 'US', Name => 'AcquisitionIndex' }, '0020,9529' => { VR => 'SQ', Name => 'ContributingSOPInstancesRefSeq' }, '0020,9536' => { VR => 'US', Name => 'ReconstructionIndex' }, # GEMS_RELA_01 (ref 4) '0021,1003' => { VR => 'SS', Name => 'SeriesFromWhichPrescribed' }, '0021,1005' => { VR => 'SH', Name => 'GenesisVersionNow' }, '0021,1005' => { VR => 'SH', Name => 'GenesisVersionNow' }, '0021,1007' => { VR => 'UL', Name => 'SeriesRecordChecksum' }, '0021,1018' => { VR => 'SH', Name => 'GenesisVersionNow' }, '0021,1018' => { VR => 'SH', Name => 'GenesisVersionNow' }, '0021,1019' => { VR => 'UL', Name => 'AcqReconRecordChecksum' }, '0021,1019' => { VR => 'UL', Name => 'AcqreconRecordChecksum' }, '0021,1020' => { VR => 'DS', Name => 'TableStartLocation' }, '0021,1035' => { VR => 'SS', Name => 'SeriesFromWhichPrescribed' }, '0021,1036' => { VR => 'SS', Name => 'ImageFromWhichPrescribed' }, '0021,1037' => { VR => 'SS', Name => 'ScreenFormat' }, '0021,104A' => { VR => 'LO', Name => 'AnatomicalReferenceForScout' }, '0021,104F' => { VR => 'SS', Name => 'LocationsInAcquisition' }, '0021,1050' => { VR => 'SS', Name => 'GraphicallyPrescribed' }, '0021,1051' => { VR => 'DS', Name => 'RotationFromSourceXRot' }, '0021,1052' => { VR => 'DS', Name => 'RotationFromSourceYRot' }, '0021,1053' => { VR => 'DS', Name => 'RotationFromSourceZRot' }, '0021,1054' => { VR => 'SH', Name => 'ImagePosition' }, '0021,1055' => { VR => 'SH', Name => 'ImageOrientation' }, '0021,1056' => { VR => 'SL', Name => 'IntegerSlop' }, '0021,1057' => { VR => 'SL', Name => 'IntegerSlop' }, '0021,1058' => { VR => 'SL', Name => 'IntegerSlop' }, '0021,1059' => { VR => 'SL', Name => 'IntegerSlop' }, '0021,105A' => { VR => 'SL', Name => 'IntegerSlop' }, '0021,105B' => { VR => 'DS', Name => 'FloatSlop' }, '0021,105C' => { VR => 'DS', Name => 'FloatSlop' }, '0021,105D' => { VR => 'DS', Name => 'FloatSlop' }, '0021,105E' => { VR => 'DS', Name => 'FloatSlop' }, '0021,105F' => { VR => 'DS', Name => 'FloatSlop' }, '0021,1081' => { VR => 'DS', Name => 'AutoWindowLevelAlpha' }, '0021,1082' => { VR => 'DS', Name => 'AutoWindowLevelBeta' }, '0021,1083' => { VR => 'DS', Name => 'AutoWindowLevelWindow' }, '0021,1084' => { VR => 'DS', Name => 'ToWindowLevelLevel' }, '0021,1090' => { VR => 'SS', Name => 'TubeFocalSpotPosition' }, '0021,1091' => { VR => 'SS', Name => 'BiopsyPosition' }, '0021,1092' => { VR => 'FL', Name => 'BiopsyTLocation' }, '0021,1093' => { VR => 'FL', Name => 'BiopsyRefLocation' }, # ? '0022,0001' => { VR => 'US', Name => 'LightPathFilterPassThroughWavelen' }, '0022,0002' => { VR => 'US', Name => 'LightPathFilterPassBand' }, '0022,0003' => { VR => 'US', Name => 'ImagePathFilterPassThroughWavelen' }, '0022,0004' => { VR => 'US', Name => 'ImagePathFilterPassBand' }, '0022,0005' => { VR => 'CS', Name => 'PatientEyeMovementCommanded' }, '0022,0006' => { VR => 'SQ', Name => 'PatientEyeMovementCommandCodeSeq' }, '0022,0007' => { VR => 'FL', Name => 'SphericalLensPower' }, '0022,0008' => { VR => 'FL', Name => 'CylinderLensPower' }, '0022,0009' => { VR => 'FL', Name => 'CylinderAxis' }, '0022,000A' => { VR => 'FL', Name => 'EmmetropicMagnification' }, '0022,000B' => { VR => 'FL', Name => 'IntraOcularPressure' }, '0022,000C' => { VR => 'FL', Name => 'HorizontalFieldOfView' }, '0022,000D' => { VR => 'CS', Name => 'PupilDilated' }, '0022,000E' => { VR => 'FL', Name => 'DegreeOfDilation' }, '0022,0010' => { VR => 'FL', Name => 'StereoBaselineAngle' }, '0022,0011' => { VR => 'FL', Name => 'StereoBaselineDisplacement' }, '0022,0012' => { VR => 'FL', Name => 'StereoHorizontalPixelOffset' }, '0022,0013' => { VR => 'FL', Name => 'StereoVerticalPixelOffset' }, '0022,0014' => { VR => 'FL', Name => 'StereoRotation' }, '0022,0015' => { VR => 'SQ', Name => 'AcquisitionDeviceTypeCodeSequence' }, '0022,0016' => { VR => 'SQ', Name => 'IlluminationTypeCodeSequence' }, '0022,0017' => { VR => 'SQ', Name => 'LightPathFilterTypeStackCodeSeq' }, '0022,0018' => { VR => 'SQ', Name => 'ImagePathFilterTypeStackCodeSeq' }, '0022,0019' => { VR => 'SQ', Name => 'LensesCodeSequence' }, '0022,001A' => { VR => 'SQ', Name => 'ChannelDescriptionCodeSequence' }, '0022,001B' => { VR => 'SQ', Name => 'RefractiveStateSequence' }, '0022,001C' => { VR => 'SQ', Name => 'MydriaticAgentCodeSequence' }, '0022,001D' => { VR => 'SQ', Name => 'RelativeImagePositionCodeSequence' }, '0022,0020' => { VR => 'SQ', Name => 'StereoPairsSequence' }, '0022,0021' => { VR => 'SQ', Name => 'LeftImageSequence' }, '0022,0022' => { VR => 'SQ', Name => 'RightImageSequence' }, '0022,0030' => { VR => 'FL', Name => 'AxialLengthOfTheEye' }, '0022,0031' => { VR => 'SQ', Name => 'OphthalmicFrameLocationSequence' }, '0022,0032' => { VR => 'FL', Name => 'ReferenceCoordinates' }, '0022,0035' => { VR => 'FL', Name => 'DepthSpatialResolution' }, '0022,0036' => { VR => 'FL', Name => 'MaximumDepthDistortion' }, '0022,0037' => { VR => 'FL', Name => 'AlongScanSpatialResolution' }, '0022,0038' => { VR => 'FL', Name => 'MaximumAlongScanDistortion' }, '0022,0039' => { VR => 'CS', Name => 'OphthalmicImageOrientation' }, '0022,0041' => { VR => 'FL', Name => 'DepthOfTransverseImage' }, '0022,0042' => { VR => 'SQ', Name => 'MydriaticAgentConcUnitsSeq' }, '0022,0048' => { VR => 'FL', Name => 'AcrossScanSpatialResolution' }, '0022,0049' => { VR => 'FL', Name => 'MaximumAcrossScanDistortion' }, '0022,004E' => { VR => 'DS', Name => 'MydriaticAgentConcentration' }, '0022,0055' => { VR => 'FL', Name => 'IlluminationWaveLength' }, '0022,0056' => { VR => 'FL', Name => 'IlluminationPower' }, '0022,0057' => { VR => 'FL', Name => 'IlluminationBandwidth' }, '0022,0058' => { VR => 'SQ', Name => 'MydriaticAgentSequence' }, # GEMS_STDY_01 (ref 4) '0023,1001' => { VR => 'SL', Name => 'NumberOfSeriesInStudy' }, '0023,1002' => { VR => 'SL', Name => 'NumberOfUnarchivedSeries' }, '0023,1010' => { VR => 'SS', Name => 'ReferenceImageField' }, '0023,1050' => { VR => 'SS', Name => 'SummaryImage' }, '0023,1070' => { VR => 'FD', Name => 'StartTimeSecsInFirstAxial' }, '0023,1074' => { VR => 'SL', Name => 'NoofUpdatesToHeader' }, '0023,107D' => { VR => 'SS', Name => 'IndicatesIfStudyHasCompleteInfo' }, '0023,107D' => { VR => 'SS', Name => 'IndicatesIfTheStudyHasCompleteInfo' }, # GEMS_SERS_01 (ref 4) '0025,1006' => { VR => 'SS', Name => 'LastPulseSequenceUsed' }, '0025,1007' => { VR => 'SL', Name => 'ImagesInSeries' }, '0025,1010' => { VR => 'SL', Name => 'LandmarkCounter' }, '0025,1011' => { VR => 'SS', Name => 'NumberOfAcquisitions' }, '0025,1014' => { VR => 'SL', Name => 'IndicatesNoofUpdatesToHeader' }, '0025,1017' => { VR => 'SL', Name => 'SeriesCompleteFlag' }, '0025,1018' => { VR => 'SL', Name => 'NumberOfImagesArchived' }, '0025,1019' => { VR => 'SL', Name => 'LastImageNumberUsed' }, '0025,101A' => { VR => 'SH', Name => 'PrimaryReceiverSuiteAndHost' }, # GEMS_IMAG_01 (ref 4) '0027,1006' => { VR => 'SL', Name => 'ImageArchiveFlag' }, '0027,1010' => { VR => 'SS', Name => 'ScoutType' }, '0027,101C' => { VR => 'SL', Name => 'VmaMamp' }, '0027,101D' => { VR => 'SS', Name => 'VmaPhase' }, '0027,101E' => { VR => 'SL', Name => 'VmaMod' }, '0027,101F' => { VR => 'SL', Name => 'VmaClip' }, '0027,1020' => { VR => 'SS', Name => 'SmartScanOnOffFlag' }, '0027,1030' => { VR => 'SH', Name => 'ForeignImageRevision' }, '0027,1031' => { VR => 'SS', Name => 'ImagingMode' }, '0027,1032' => { VR => 'SS', Name => 'PulseSequence' }, '0027,1033' => { VR => 'SL', Name => 'ImagingOptions' }, '0027,1035' => { VR => 'SS', Name => 'PlaneType' }, '0027,1036' => { VR => 'SL', Name => 'ObliquePlane' }, '0027,1040' => { VR => 'SH', Name => 'RASLetterOfImageLocation' }, '0027,1041' => { VR => 'FL', Name => 'ImageLocation' }, '0027,1042' => { VR => 'FL', Name => 'CenterRCoordOfPlaneImage' }, '0027,1043' => { VR => 'FL', Name => 'CenterACoordOfPlaneImage' }, '0027,1044' => { VR => 'FL', Name => 'CenterSCoordOfPlaneImage' }, '0027,1045' => { VR => 'FL', Name => 'NormalRCoord' }, '0027,1046' => { VR => 'FL', Name => 'NormalACoord' }, '0027,1047' => { VR => 'FL', Name => 'NormalSCoord' }, '0027,1048' => { VR => 'FL', Name => 'RCoordOfTopRightCorner' }, '0027,1049' => { VR => 'FL', Name => 'ACoordOfTopRightCorner' }, '0027,104A' => { VR => 'FL', Name => 'SCoordOfTopRightCorner' }, '0027,104B' => { VR => 'FL', Name => 'RCoordOfBottomRightCorner' }, '0027,104C' => { VR => 'FL', Name => 'ACoordOfBottomRightCorner' }, '0027,104D' => { VR => 'FL', Name => 'SCoordOfBottomRightCorner' }, '0027,1050' => { VR => 'FL', Name => 'TableStartLocation' }, '0027,1051' => { VR => 'FL', Name => 'TableEndLocation' }, '0027,1052' => { VR => 'SH', Name => 'RASLetterForSideOfImage' }, '0027,1053' => { VR => 'SH', Name => 'RASLetterForAnteriorPosterior' }, '0027,1054' => { VR => 'SH', Name => 'RASLetterForScoutStartLoc' }, '0027,1055' => { VR => 'SH', Name => 'RASLetterForScoutEndLoc' }, '0027,1060' => { VR => 'FL', Name => 'ImageDimensionX' }, '0027,1061' => { VR => 'FL', Name => 'ImageDimensionY' }, '0027,1062' => { VR => 'FL', Name => 'NumberOfExcitations' }, # image presentation group '0028,0000' => { VR => 'UL', Name => 'ImagePresentationGroupLength' }, '0028,0002' => { VR => 'US', Name => 'SamplesPerPixel' }, '0028,0003' => { VR => 'US', Name => 'SamplesPerPixelUsed' }, '0028,0004' => { VR => 'CS', Name => 'PhotometricInterpretation' }, '0028,0005' => { VR => 'US', Name => 'ImageDimensions' }, '0028,0006' => { VR => 'US', Name => 'PlanarConfiguration' }, '0028,0008' => { VR => 'IS', Name => 'NumberOfFrames' }, '0028,0009' => { VR => 'AT', Name => 'FrameIncrementPointer' }, '0028,000A' => { VR => 'AT', Name => 'FrameDimensionPointer' }, '0028,0010' => { VR => 'US', Name => 'Rows' }, '0028,0011' => { VR => 'US', Name => 'Columns' }, '0028,0012' => { VR => 'US', Name => 'Planes' }, '0028,0014' => { VR => 'US', Name => 'UltrasoundColorDataPresent' }, '0028,0030' => { VR => 'DS', Name => 'PixelSpacing' }, '0028,0031' => { VR => 'DS', Name => 'ZoomFactor' }, '0028,0032' => { VR => 'DS', Name => 'ZoomCenter' }, '0028,0034' => { VR => 'IS', Name => 'PixelAspectRatio' }, '0028,0040' => { VR => 'CS', Name => 'ImageFormat' }, '0028,0050' => { VR => 'LO', Name => 'ManipulatedImage' }, '0028,0051' => { VR => 'CS', Name => 'CorrectedImage' }, '0028,005F' => { VR => 'LO', Name => 'CompressionRecognitionCode' }, '0028,0060' => { VR => 'CS', Name => 'CompressionCode' }, '0028,0061' => { VR => 'SH', Name => 'CompressionOriginator' }, '0028,0062' => { VR => 'LO', Name => 'CompressionLabel' }, '0028,0063' => { VR => 'SH', Name => 'CompressionDescription' }, '0028,0065' => { VR => 'CS', Name => 'CompressionSequence' }, '0028,0066' => { VR => 'AT', Name => 'CompressionStepPointers' }, '0028,0068' => { VR => 'US', Name => 'RepeatInterval' }, '0028,0069' => { VR => 'US', Name => 'BitsGrouped' }, '0028,0070' => { VR => 'US', Name => 'PerimeterTable' }, '0028,0071' => { VR => 'US', Name => 'PerimeterValue' }, '0028,0080' => { VR => 'US', Name => 'PredictorRows' }, '0028,0081' => { VR => 'US', Name => 'PredictorColumns' }, '0028,0082' => { VR => 'US', Name => 'PredictorConstants' }, '0028,0090' => { VR => 'CS', Name => 'BlockedPixels' }, '0028,0091' => { VR => 'US', Name => 'BlockRows' }, '0028,0092' => { VR => 'US', Name => 'BlockColumns' }, '0028,0093' => { VR => 'US', Name => 'RowOverlap' }, '0028,0094' => { VR => 'US', Name => 'ColumnOverlap' }, '0028,0100' => { VR => 'US', Name => 'BitsAllocated' }, '0028,0101' => { VR => 'US', Name => 'BitsStored' }, '0028,0102' => { VR => 'US', Name => 'HighBit' }, '0028,0103' => { VR => 'US', Name => 'PixelRepresentation', PrintConv => { 0 => 'Unsigned', 1 => 'Signed' } }, '0028,0104' => { VR => 'US', Name => 'SmallestValidPixelValue' }, '0028,0105' => { VR => 'US', Name => 'LargestValidPixelValue' }, '0028,0106' => { VR => 'US', Name => 'SmallestImagePixelValue' }, '0028,0107' => { VR => 'US', Name => 'LargestImagePixelValue' }, '0028,0108' => { VR => 'US', Name => 'SmallestPixelValueInSeries' }, '0028,0109' => { VR => 'US', Name => 'LargestPixelValueInSeries' }, '0028,0110' => { VR => 'US', Name => 'SmallestImagePixelValueInPlane' }, '0028,0111' => { VR => 'US', Name => 'LargestImagePixelValueInPlane' }, '0028,0120' => { VR => 'US', Name => 'PixelPaddingValue' }, '0028,0121' => { VR => 'US', Name => 'PixelPaddingRangeLimit' }, '0028,0200' => { VR => 'US', Name => 'ImageLocation' }, '0028,0300' => { VR => 'CS', Name => 'QualityControlImage' }, '0028,0301' => { VR => 'CS', Name => 'BurnedInAnnotation' }, '0028,0400' => { VR => 'LO', Name => 'TransformLabel' }, '0028,0401' => { VR => 'LO', Name => 'TransformVersionNumber' }, '0028,0402' => { VR => 'US', Name => 'NumberOfTransformSteps' }, '0028,0403' => { VR => 'LO', Name => 'SequenceOfCompressedData' }, '0028,0404' => { VR => 'AT', Name => 'DetailsOfCoefficients' }, '0028,04x2' => { VR => 'LO', Name => 'CoefficientCoding' }, '0028,04x3' => { VR => 'AT', Name => 'CoefficientCodingPointers' }, '0028,0700' => { VR => 'LO', Name => 'DCTLabel' }, '0028,0701' => { VR => 'CS', Name => 'DataBlockDescription' }, '0028,0702' => { VR => 'AT', Name => 'DataBlock' }, '0028,0710' => { VR => 'US', Name => 'NormalizationFactorFormat' }, '0028,0720' => { VR => 'US', Name => 'ZonalMapNumberFormat' }, '0028,0721' => { VR => 'AT', Name => 'ZonalMapLocation' }, '0028,0722' => { VR => 'US', Name => 'ZonalMapFormat' }, '0028,0730' => { VR => 'US', Name => 'AdaptiveMapFormat' }, '0028,0740' => { VR => 'US', Name => 'CodeNumberFormat' }, '0028,08x0' => { VR => 'CS', Name => 'CodeLabel' }, '0028,08x2' => { VR => 'US', Name => 'NumberOfTables' }, '0028,08x3' => { VR => 'AT', Name => 'CodeTableLocation' }, '0028,08x4' => { VR => 'US', Name => 'BitsForCodeWord' }, '0028,08x8' => { VR => 'AT', Name => 'ImageDataLocation' }, '0028,1040' => { VR => 'CS', Name => 'PixelIntensityRelationship' }, '0028,0A02' => { VR => 'CS', Name => 'PixelSpacingCalibrationType' }, '0028,0A04' => { VR => 'LO', Name => 'PixelSpacingCalibrationDescription' }, '0028,1040' => { VR => 'CS', Name => 'PixelIntensityRelationship' }, '0028,1041' => { VR => 'SS', Name => 'PixelIntensityRelationshipSign' }, '0028,1050' => { VR => 'DS', Name => 'WindowCenter' }, '0028,1051' => { VR => 'DS', Name => 'WindowWidth' }, '0028,1052' => { VR => 'DS', Name => 'RescaleIntercept' }, '0028,1053' => { VR => 'DS', Name => 'RescaleSlope' }, '0028,1054' => { VR => 'LO', Name => 'RescaleType' }, '0028,1055' => { VR => 'LO', Name => 'WindowCenterAndWidthExplanation' }, '0028,1056' => { VR => 'CS', Name => 'VOI_LUTFunction' }, '0028,1080' => { VR => 'CS', Name => 'GrayScale' }, '0028,1090' => { VR => 'CS', Name => 'RecommendedViewingMode' }, '0028,1100' => { VR => 'SS', Name => 'GrayLookupTableDescriptor' }, '0028,1101' => { VR => 'SS', Name => 'RedPaletteColorTableDescriptor' }, '0028,1102' => { VR => 'SS', Name => 'GreenPaletteColorTableDescriptor' }, '0028,1103' => { VR => 'SS', Name => 'BluePaletteColorTableDescriptor' }, '0028,1111' => { VR => 'SS', Name => 'LargeRedPaletteColorTableDescr' }, '0028,1112' => { VR => 'SS', Name => 'LargeGreenPaletteColorTableDescr' }, '0028,1113' => { VR => 'SS', Name => 'LargeBluePaletteColorTableDescr' }, '0028,1199' => { VR => 'UI', Name => 'PaletteColorTableUID' }, '0028,1200' => { VR => 'US', Name => 'GrayLookupTableData' }, '0028,1201' => { VR => 'OW', Name => 'RedPaletteColorTableData' }, '0028,1202' => { VR => 'OW', Name => 'GreenPaletteColorTableData' }, '0028,1203' => { VR => 'OW', Name => 'BluePaletteColorTableData' }, '0028,1211' => { VR => 'OW', Name => 'LargeRedPaletteColorTableData', Binary => 1 }, '0028,1212' => { VR => 'OW', Name => 'LargeGreenPaletteColorTableData', Binary => 1 }, '0028,1213' => { VR => 'OW', Name => 'LargeBluePaletteColorTableData', Binary => 1 }, '0028,1214' => { VR => 'UI', Name => 'LargePaletteColorLookupTableUID' }, '0028,1221' => { VR => 'OW', Name => 'SegmentedRedColorTableData' }, '0028,1222' => { VR => 'OW', Name => 'SegmentedGreenColorTableData' }, '0028,1223' => { VR => 'OW', Name => 'SegmentedBlueColorTableData' }, '0028,1300' => { VR => 'CS', Name => 'BreastImplantPresent' }, '0028,1350' => { VR => 'CS', Name => 'PartialView' }, '0028,1351' => { VR => 'ST', Name => 'PartialViewDescription' }, '0028,1352' => { VR => 'SQ', Name => 'PartialViewCodeSequence' }, '0028,135A' => { VR => 'CS', Name => 'SpatialLocationsPreserved' }, '0028,1402' => { VR => 'CS', Name => 'DataPathAssignment' }, '0028,1404' => { VR => 'SQ', Name => 'BlendingLUT1Sequence' }, '0028,1406' => { VR => 'FD', Name => 'BlendingWeightConstant' }, '0028,1408' => { VR => 'OW', Name => 'BlendingLookupTableData' }, '0028,140C' => { VR => 'SQ', Name => 'BlendingLUT2Sequence' }, '0028,140E' => { VR => 'CS', Name => 'DataPathID' }, '0028,140F' => { VR => 'CS', Name => 'RGBLUTTransferFunction' }, '0028,1410' => { VR => 'CS', Name => 'AlphaLUTTransferFunction' }, '0028,2000' => { VR => 'OB', Name => 'ICCProfile' }, '0028,2110' => { VR => 'CS', Name => 'LossyImageCompression' }, '0028,2112' => { VR => 'DS', Name => 'LossyImageCompressionRatio' }, '0028,2114' => { VR => 'CS', Name => 'LossyImageCompressionMethod' }, '0028,3000' => { VR => 'SQ', Name => 'ModalityLUTSequence' }, '0028,3002' => { VR => 'US', Name => 'LUTDescriptor' }, '0028,3003' => { VR => 'LO', Name => 'LUTExplanation' }, '0028,3004' => { VR => 'LO', Name => 'ModalityLUTType' }, '0028,3006' => { VR => 'SS', Name => 'LUTData' }, '0028,3010' => { VR => 'SQ', Name => 'VOILUTSequence' }, '0028,3110' => { VR => 'SQ', Name => 'SoftcopyVOILUTSequence' }, '0028,4000' => { VR => 'LT', Name => 'ImagePresentationComments' }, '0028,5000' => { VR => 'SQ', Name => 'BiPlaneAcquisitionSequence' }, '0028,6010' => { VR => 'US', Name => 'RepresentativeFrameNumber' }, '0028,6020' => { VR => 'US', Name => 'FrameNumbersOfInterest' }, '0028,6022' => { VR => 'LO', Name => 'FrameOfInterestDescription' }, '0028,6023' => { VR => 'CS', Name => 'FrameOfInterestType' }, '0028,6030' => { VR => 'US', Name => 'MaskPointers' }, '0028,6040' => { VR => 'US', Name => 'RWavePointer' }, '0028,6100' => { VR => 'SQ', Name => 'MaskSubtractionSequence' }, '0028,6101' => { VR => 'CS', Name => 'MaskOperation' }, '0028,6102' => { VR => 'US', Name => 'ApplicableFrameRange' }, '0028,6110' => { VR => 'US', Name => 'MaskFrameNumbers' }, '0028,6112' => { VR => 'US', Name => 'ContrastFrameAveraging' }, '0028,6114' => { VR => 'FL', Name => 'MaskSubPixelShift' }, '0028,6120' => { VR => 'SS', Name => 'TIDOffset' }, '0028,6190' => { VR => 'ST', Name => 'MaskOperationExplanation' }, '0028,7FE0' => { VR => 'UT', Name => 'PixelDataProviderURL' }, '0028,9001' => { VR => 'UL', Name => 'DataPointRows' }, '0028,9002' => { VR => 'UL', Name => 'DataPointColumns' }, '0028,9003' => { VR => 'CS', Name => 'SignalDomainColumns' }, '0028,9099' => { VR => 'US', Name => 'LargestMonochromePixelValue' }, '0028,9108' => { VR => 'CS', Name => 'DataRepresentation' }, '0028,9110' => { VR => 'SQ', Name => 'PixelMeasuresSequence' }, '0028,9132' => { VR => 'SQ', Name => 'FrameVOILUTSequence' }, '0028,9145' => { VR => 'SQ', Name => 'PixelValueTransformationSequence' }, '0028,9235' => { VR => 'CS', Name => 'SignalDomainRows' }, '0028,9411' => { VR => 'FL', Name => 'DisplayFilterPercentage' }, '0028,9415' => { VR => 'SQ', Name => 'FramePixelShiftSequence' }, '0028,9416' => { VR => 'US', Name => 'SubtractionItemID' }, '0028,9422' => { VR => 'SQ', Name => 'PixelIntensityRelationshipLUTSeq' }, '0028,9443' => { VR => 'SQ', Name => 'FramePixelDataPropertiesSequence' }, '0028,9444' => { VR => 'CS', Name => 'GeometricalProperties' }, '0028,9445' => { VR => 'FL', Name => 'GeometricMaximumDistortion' }, '0028,9446' => { VR => 'CS', Name => 'ImageProcessingApplied' }, '0028,9454' => { VR => 'CS', Name => 'MaskSelectionMode' }, '0028,9474' => { VR => 'CS', Name => 'LUTFunction' }, '0028,9478' => { VR => 'FL', Name => 'MaskVisibilityPercentage' }, '0028,9501' => { VR => 'SQ', Name => 'PixelShiftSequence' }, '0028,9502' => { VR => 'SQ', Name => 'RegionPixelShiftSequence' }, '0028,9503' => { VR => 'SS', Name => 'VerticesOfTheRegion' }, '0028,9506' => { VR => 'US', Name => 'PixelShiftFrameRange' }, '0028,9507' => { VR => 'US', Name => 'LUTFrameRange' }, '0028,9520' => { VR => 'DS', Name => 'ImageToEquipmentMappingMatrix' }, '0028,9537' => { VR => 'CS', Name => 'EquipmentCoordinateSystemID' }, # GEMS_IMPS_01 (ref 4) '0029,1004' => { VR => 'SL', Name => 'LowerRangeOfPixels1a' }, '0029,1005' => { VR => 'DS', Name => 'LowerRangeOfPixels1b' }, '0029,1006' => { VR => 'DS', Name => 'LowerRangeOfPixels1c' }, '0029,1007' => { VR => 'SL', Name => 'LowerRangeOfPixels1d' }, '0029,1008' => { VR => 'SH', Name => 'LowerRangeOfPixels1e' }, '0029,1009' => { VR => 'SH', Name => 'LowerRangeOfPixels1f' }, '0029,100A' => { VR => 'SS', Name => 'LowerRangeOfPixels1g' }, '0029,1015' => { VR => 'SL', Name => 'LowerRangeOfPixels1h' }, '0029,1016' => { VR => 'SL', Name => 'LowerRangeOfPixels1i' }, '0029,1017' => { VR => 'SL', Name => 'LowerRangeOfPixels2' }, '0029,1018' => { VR => 'SL', Name => 'UpperRangeOfPixels2' }, '0029,101A' => { VR => 'SL', Name => 'LenOfTotHdrInBytes' }, '0029,1026' => { VR => 'SS', Name => 'VersionOfTheHdrStruct' }, '0029,1034' => { VR => 'SL', Name => 'AdvantageCompOverflow' }, '0029,1035' => { VR => 'SL', Name => 'AdvantageCompUnderflow' }, # study group '0032,0000' => { VR => 'UL', Name => 'StudyGroupLength' }, '0032,000A' => { VR => 'CS', Name => 'StudyStatusID' }, '0032,000C' => { VR => 'CS', Name => 'StudyPriorityID' }, '0032,0012' => { VR => 'LO', Name => 'StudyIDIssuer' }, '0032,0032' => { VR => 'DA', Name => 'StudyVerifiedDate' }, '0032,0033' => { VR => 'TM', Name => 'StudyVerifiedTime' }, '0032,0034' => { VR => 'DA', Name => 'StudyReadDate' }, '0032,0035' => { VR => 'TM', Name => 'StudyReadTime' }, '0032,1000' => { VR => 'DA', Name => 'ScheduledStudyStartDate' }, '0032,1001' => { VR => 'TM', Name => 'ScheduledStudyStartTime' }, '0032,1010' => { VR => 'DA', Name => 'ScheduledStudyStopDate' }, '0032,1011' => { VR => 'TM', Name => 'ScheduledStudyStopTime' }, '0032,1020' => { VR => 'LO', Name => 'ScheduledStudyLocation' }, '0032,1021' => { VR => 'AE', Name => 'ScheduledStudyLocationAETitle' }, '0032,1030' => { VR => 'LO', Name => 'ReasonForStudy' }, '0032,1031' => { VR => 'SQ', Name => 'RequestingPhysicianIDSequence' }, '0032,1032' => { VR => 'PN', Name => 'RequestingPhysician' }, '0032,1033' => { VR => 'LO', Name => 'RequestingService' }, '0032,1040' => { VR => 'DA', Name => 'StudyArrivalDate' }, '0032,1041' => { VR => 'TM', Name => 'StudyArrivalTime' }, '0032,1050' => { VR => 'DA', Name => 'StudyCompletionDate' }, '0032,1051' => { VR => 'TM', Name => 'StudyCompletionTime' }, '0032,1055' => { VR => 'CS', Name => 'StudyComponentStatusID' }, '0032,1060' => { VR => 'LO', Name => 'RequestedProcedureDescription' }, '0032,1064' => { VR => 'SQ', Name => 'RequestedProcedureCodeSequence' }, '0032,1070' => { VR => 'LO', Name => 'RequestedContrastAgent' }, '0032,4000' => { VR => 'LT', Name => 'StudyComments' }, # visit group '0038,0004' => { VR => 'SQ', Name => 'ReferencedPatientAliasSequence' }, '0038,0008' => { VR => 'CS', Name => 'VisitStatusID' }, '0038,0010' => { VR => 'LO', Name => 'AdmissionID' }, '0038,0011' => { VR => 'LO', Name => 'IssuerOfAdmissionID' }, '0038,0016' => { VR => 'LO', Name => 'RouteOfAdmissions' }, '0038,001A' => { VR => 'DA', Name => 'ScheduledAdmissionDate' }, '0038,001B' => { VR => 'TM', Name => 'ScheduledAdmissionTime' }, '0038,001C' => { VR => 'DA', Name => 'ScheduledDischargeDate' }, '0038,001D' => { VR => 'TM', Name => 'ScheduledDischargeTime' }, '0038,001E' => { VR => 'LO', Name => 'ScheduledPatientInstitResidence' }, '0038,0020' => { VR => 'DA', Name => 'AdmittingDate' }, '0038,0021' => { VR => 'TM', Name => 'AdmittingTime' }, '0038,0030' => { VR => 'DA', Name => 'DischargeDate' }, '0038,0032' => { VR => 'TM', Name => 'DischargeTime' }, '0038,0040' => { VR => 'LO', Name => 'DischargeDiagnosisDescription' }, '0038,0044' => { VR => 'SQ', Name => 'DischargeDiagnosisCodeSequence' }, '0038,0050' => { VR => 'LO', Name => 'SpecialNeeds' }, '0038,0060' => { VR => 'LO', Name => 'ServiceEpisodeID' }, '0038,0061' => { VR => 'LO', Name => 'IssuerOfServiceEpisodeID' }, '0038,0062' => { VR => 'LO', Name => 'ServiceEpisodeDescription' }, '0038,0100' => { VR => 'SQ', Name => 'PertinentDocumentsSequence' }, '0038,0300' => { VR => 'LO', Name => 'CurrentPatientLocation' }, '0038,0400' => { VR => 'LO', Name => 'PatientInstitutionResidence' }, '0038,0500' => { VR => 'LO', Name => 'PatientState' }, '0038,0502' => { VR => 'SQ', Name => 'PatientClinicalTrialParticipSeq' }, '0038,4000' => { VR => 'LT', Name => 'VisitComments' }, '003A,0004' => { VR => 'CS', Name => 'WaveformOriginality' }, '003A,0005' => { VR => 'US', Name => 'NumberOfWaveformChannels' }, '003A,0010' => { VR => 'UL', Name => 'NumberOfWaveformSamples' }, '003A,001A' => { VR => 'DS', Name => 'SamplingFrequency' }, '003A,0020' => { VR => 'SH', Name => 'MultiplexGroupLabel' }, '003A,0200' => { VR => 'SQ', Name => 'ChannelDefinitionSequence' }, '003A,0202' => { VR => 'IS', Name => 'WaveformChannelNumber' }, '003A,0203' => { VR => 'SH', Name => 'ChannelLabel' }, '003A,0205' => { VR => 'CS', Name => 'ChannelStatus' }, '003A,0208' => { VR => 'SQ', Name => 'ChannelSourceSequence' }, '003A,0209' => { VR => 'SQ', Name => 'ChannelSourceModifiersSequence' }, '003A,020A' => { VR => 'SQ', Name => 'SourceWaveformSequence' }, '003A,020C' => { VR => 'LO', Name => 'ChannelDerivationDescription' }, '003A,0210' => { VR => 'DS', Name => 'ChannelSensitivity' }, '003A,0211' => { VR => 'SQ', Name => 'ChannelSensitivityUnitsSequence' }, '003A,0212' => { VR => 'DS', Name => 'ChannelSensitivityCorrectionFactor' }, '003A,0213' => { VR => 'DS', Name => 'ChannelBaseline' }, '003A,0214' => { VR => 'DS', Name => 'ChannelTimeSkew' }, '003A,0215' => { VR => 'DS', Name => 'ChannelSampleSkew' }, '003A,0218' => { VR => 'DS', Name => 'ChannelOffset' }, '003A,021A' => { VR => 'US', Name => 'WaveformBitsStored' }, '003A,0220' => { VR => 'DS', Name => 'FilterLowFrequency' }, '003A,0221' => { VR => 'DS', Name => 'FilterHighFrequency' }, '003A,0222' => { VR => 'DS', Name => 'NotchFilterFrequency' }, '003A,0223' => { VR => 'DS', Name => 'NotchFilterBandwidth' }, '003A,0230' => { VR => 'FL', Name => 'WaveformDataDisplayScale' }, '003A,0231' => { VR => 'US', Name => 'WaveformDisplayBkgCIELabValue' }, '003A,0240' => { VR => 'SQ', Name => 'WaveformPresentationGroupSequence' }, '003A,0241' => { VR => 'US', Name => 'PresentationGroupNumber' }, '003A,0242' => { VR => 'SQ', Name => 'ChannelDisplaySequence' }, '003A,0244' => { VR => 'US', Name => 'ChannelRecommendDisplayCIELabValue' }, '003A,0245' => { VR => 'FL', Name => 'ChannelPosition' }, '003A,0246' => { VR => 'CS', Name => 'DisplayShadingFlag' }, '003A,0247' => { VR => 'FL', Name => 'FractionalChannelDisplayScale' }, '003A,0248' => { VR => 'FL', Name => 'AbsoluteChannelDisplayScale' }, '003A,0300' => { VR => 'SQ', Name => 'MultiplexAudioChannelsDescrCodeSeq' }, '003A,0301' => { VR => 'IS', Name => 'ChannelIdentificationCode' }, '003A,0302' => { VR => 'CS', Name => 'ChannelMode' }, '0040,0001' => { VR => 'AE', Name => 'ScheduledStationAETitle' }, '0040,0002' => { VR => 'DA', Name => 'ScheduledProcedureStepStartDate' }, '0040,0003' => { VR => 'TM', Name => 'ScheduledProcedureStepStartTime' }, '0040,0004' => { VR => 'DA', Name => 'ScheduledProcedureStepEndDate' }, '0040,0005' => { VR => 'TM', Name => 'ScheduledProcedureStepEndTime' }, '0040,0006' => { VR => 'PN', Name => 'ScheduledPerformingPhysiciansName' }, '0040,0007' => { VR => 'LO', Name => 'ScheduledProcedureStepDescription' }, '0040,0008' => { VR => 'SQ', Name => 'ScheduledProtocolCodeSequence' }, '0040,0009' => { VR => 'SH', Name => 'ScheduledProcedureStepID' }, '0040,000A' => { VR => 'SQ', Name => 'StageCodeSequence' }, '0040,000B' => { VR => 'SQ', Name => 'ScheduledPerformingPhysicianIDSeq' }, '0040,0010' => { VR => 'SH', Name => 'ScheduledStationName' }, '0040,0011' => { VR => 'SH', Name => 'ScheduledProcedureStepLocation' }, '0040,0012' => { VR => 'LO', Name => 'PreMedication' }, '0040,0020' => { VR => 'CS', Name => 'ScheduledProcedureStepStatus' }, '0040,0031' => { VR => 'UT', Name => 'LocalNamespaceEntityID' }, '0040,0032' => { VR => 'UT', Name => 'UniversalEntityID' }, '0040,0033' => { VR => 'CS', Name => 'UniversalEntityIDType' }, '0040,0035' => { VR => 'CS', Name => 'IdentifierTypeCode' }, '0040,0036' => { VR => 'SQ', Name => 'AssigningFacilitySequence' }, '0040,0100' => { VR => 'SQ', Name => 'ScheduledProcedureStepSequence' }, '0040,0220' => { VR => 'SQ', Name => 'ReferencedNonImageCompositeSOPSeq' }, '0040,0241' => { VR => 'AE', Name => 'PerformedStationAETitle' }, '0040,0242' => { VR => 'SH', Name => 'PerformedStationName' }, '0040,0243' => { VR => 'SH', Name => 'PerformedLocation' }, '0040,0244' => { VR => 'DA', Name => 'PerformedProcedureStepStartDate' }, '0040,0245' => { VR => 'TM', Name => 'PerformedProcedureStepStartTime' }, '0040,0250' => { VR => 'DA', Name => 'PerformedProcedureStepEndDate' }, '0040,0251' => { VR => 'TM', Name => 'PerformedProcedureStepEndTime' }, '0040,0252' => { VR => 'CS', Name => 'PerformedProcedureStepStatus' }, '0040,0253' => { VR => 'SH', Name => 'PerformedProcedureStepID' }, '0040,0254' => { VR => 'LO', Name => 'PerformedProcedureStepDescription' }, '0040,0255' => { VR => 'LO', Name => 'PerformedProcedureTypeDescription' }, '0040,0260' => { VR => 'SQ', Name => 'PerformedProtocolCodeSequence' }, '0040,0261' => { VR => 'CS', Name => 'PerformedProtocolType' }, '0040,0270' => { VR => 'SQ', Name => 'ScheduledStepAttributesSequence' }, '0040,0275' => { VR => 'SQ', Name => 'RequestAttributesSequence' }, '0040,0280' => { VR => 'ST', Name => 'CommentsOnPerformedProcedureStep' }, '0040,0281' => { VR => 'SQ', Name => 'ProcStepDiscontinueReasonCodeSeq' }, '0040,0293' => { VR => 'SQ', Name => 'QuantitySequence' }, '0040,0294' => { VR => 'DS', Name => 'Quantity' }, '0040,0295' => { VR => 'SQ', Name => 'MeasuringUnitsSequence' }, '0040,0296' => { VR => 'SQ', Name => 'BillingItemSequence' }, '0040,0300' => { VR => 'US', Name => 'TotalTimeOfFluoroscopy' }, '0040,0301' => { VR => 'US', Name => 'TotalNumberOfExposures' }, '0040,0302' => { VR => 'US', Name => 'EntranceDose' }, '0040,0303' => { VR => 'US', Name => 'ExposedArea' }, '0040,0306' => { VR => 'DS', Name => 'DistanceSourceToEntrance' }, '0040,0307' => { VR => 'DS', Name => 'DistanceSourceToSupport' }, '0040,030E' => { VR => 'SQ', Name => 'ExposureDoseSequence' }, '0040,0310' => { VR => 'ST', Name => 'CommentsOnRadiationDose' }, '0040,0312' => { VR => 'DS', Name => 'XRayOutput' }, '0040,0314' => { VR => 'DS', Name => 'HalfValueLayer' }, '0040,0316' => { VR => 'DS', Name => 'OrganDose' }, '0040,0318' => { VR => 'CS', Name => 'OrganExposed' }, '0040,0320' => { VR => 'SQ', Name => 'BillingProcedureStepSequence' }, '0040,0321' => { VR => 'SQ', Name => 'FilmConsumptionSequence' }, '0040,0324' => { VR => 'SQ', Name => 'BillingSuppliesAndDevicesSequence' }, '0040,0330' => { VR => 'SQ', Name => 'ReferencedProcedureStepSequence' }, '0040,0340' => { VR => 'SQ', Name => 'PerformedSeriesSequence' }, '0040,0400' => { VR => 'LT', Name => 'CommentsOnScheduledProcedureStep' }, '0040,0440' => { VR => 'SQ', Name => 'ProtocolContextSequence' }, '0040,0441' => { VR => 'SQ', Name => 'ContentItemModifierSequence' }, '0040,050A' => { VR => 'LO', Name => 'SpecimenAccessionNumber' }, '0040,0512' => { VR => 'LO', Name => 'ContainerIdentifier' }, '0040,051A' => { VR => 'LO', Name => 'ContainerDescription' }, '0040,0550' => { VR => 'SQ', Name => 'SpecimenSequence' }, '0040,0551' => { VR => 'LO', Name => 'SpecimenIdentifier' }, '0040,0552' => { VR => 'SQ', Name => 'SpecimenDescriptionSequenceTrial' }, '0040,0553' => { VR => 'ST', Name => 'SpecimenDescriptionTrial' }, '0040,0554' => { VR => 'UI', Name => 'SpecimenUID' }, '0040,0555' => { VR => 'SQ', Name => 'AcquisitionContextSequence' }, '0040,0556' => { VR => 'ST', Name => 'AcquisitionContextDescription' }, '0040,059A' => { VR => 'SQ', Name => 'SpecimenTypeCodeSequence' }, '0040,0600' => { VR => 'LO', Name => 'SpecimenShortDescription' }, '0040,06FA' => { VR => 'LO', Name => 'SlideIdentifier' }, '0040,071A' => { VR => 'SQ', Name => 'ImageCenterPointCoordinatesSeq' }, '0040,072A' => { VR => 'DS', Name => 'XOffsetInSlideCoordinateSystem' }, '0040,073A' => { VR => 'DS', Name => 'YOffsetInSlideCoordinateSystem' }, '0040,074A' => { VR => 'DS', Name => 'ZOffsetInSlideCoordinateSystem' }, '0040,08D8' => { VR => 'SQ', Name => 'PixelSpacingSequence' }, '0040,08DA' => { VR => 'SQ', Name => 'CoordinateSystemAxisCodeSequence' }, '0040,08EA' => { VR => 'SQ', Name => 'MeasurementUnitsCodeSequence' }, '0040,09F8' => { VR => 'SQ', Name => 'VitalStainCodeSequenceTrial' }, '0040,1001' => { VR => 'SH', Name => 'RequestedProcedureID' }, '0040,1002' => { VR => 'LO', Name => 'ReasonForRequestedProcedure' }, '0040,1003' => { VR => 'SH', Name => 'RequestedProcedurePriority' }, '0040,1004' => { VR => 'LO', Name => 'PatientTransportArrangements' }, '0040,1005' => { VR => 'LO', Name => 'RequestedProcedureLocation' }, '0040,1006' => { VR => 'SH', Name => 'PlacerOrderNumber-Procedure' }, '0040,1007' => { VR => 'SH', Name => 'FillerOrderNumber-Procedure' }, '0040,1008' => { VR => 'LO', Name => 'ConfidentialityCode' }, '0040,1009' => { VR => 'SH', Name => 'ReportingPriority' }, '0040,100A' => { VR => 'SQ', Name => 'ReasonForRequestedProcedureCodeSeq' }, '0040,1010' => { VR => 'PN', Name => 'NamesOfIntendedRecipientsOfResults' }, '0040,1011' => { VR => 'SQ', Name => 'IntendedRecipientsOfResultsIDSeq' }, '0040,1101' => { VR => 'SQ', Name => 'PersonIdentificationCodeSequence' }, '0040,1102' => { VR => 'ST', Name => 'PersonAddress' }, '0040,1103' => { VR => 'LO', Name => 'PersonTelephoneNumbers' }, '0040,1400' => { VR => 'LT', Name => 'RequestedProcedureComments' }, '0040,2001' => { VR => 'LO', Name => 'ReasonForImagingServiceRequest' }, '0040,2004' => { VR => 'DA', Name => 'IssueDateOfImagingServiceRequest' }, '0040,2005' => { VR => 'TM', Name => 'IssueTimeOfImagingServiceRequest' }, '0040,2006' => { VR => 'SH', Name => 'PlacerOrderNum-ImagingServiceReq' }, '0040,2007' => { VR => 'SH', Name => 'FillerOrderNum-ImagingServiceReq' }, '0040,2008' => { VR => 'PN', Name => 'OrderEnteredBy' }, '0040,2009' => { VR => 'SH', Name => 'OrderEntererLocation' }, '0040,2010' => { VR => 'SH', Name => 'OrderCallbackPhoneNumber' }, '0040,2016' => { VR => 'LO', Name => 'PlacerOrderNum-ImagingServiceReq' }, '0040,2017' => { VR => 'LO', Name => 'FillerOrderNum-ImagingServiceReq' }, '0040,2400' => { VR => 'LT', Name => 'ImagingServiceRequestComments' }, '0040,3001' => { VR => 'LO', Name => 'ConfidentialityOnPatientDataDescr' }, '0040,4001' => { VR => 'CS', Name => 'GenPurposeScheduledProcStepStatus' }, '0040,4002' => { VR => 'CS', Name => 'GenPurposePerformedProcStepStatus' }, '0040,4003' => { VR => 'CS', Name => 'GenPurposeSchedProcStepPriority' }, '0040,4004' => { VR => 'SQ', Name => 'SchedProcessingApplicationsCodeSeq' }, '0040,4005' => { VR => 'DT', Name => 'SchedProcedureStepStartDateAndTime' }, '0040,4006' => { VR => 'CS', Name => 'MultipleCopiesFlag' }, '0040,4007' => { VR => 'SQ', Name => 'PerformedProcessingAppsCodeSeq' }, '0040,4009' => { VR => 'SQ', Name => 'HumanPerformerCodeSequence' }, '0040,4010' => { VR => 'DT', Name => 'SchedProcStepModificationDateTime' }, '0040,4011' => { VR => 'DT', Name => 'ExpectedCompletionDateAndTime' }, '0040,4015' => { VR => 'SQ', Name => 'ResultingGenPurposePerfProcStepSeq' }, '0040,4016' => { VR => 'SQ', Name => 'RefGenPurposeSchedProcStepSeq' }, '0040,4018' => { VR => 'SQ', Name => 'ScheduledWorkitemCodeSequence' }, '0040,4019' => { VR => 'SQ', Name => 'PerformedWorkitemCodeSequence' }, '0040,4020' => { VR => 'CS', Name => 'InputAvailabilityFlag' }, '0040,4021' => { VR => 'SQ', Name => 'InputInformationSequence' }, '0040,4022' => { VR => 'SQ', Name => 'RelevantInformationSequence' }, '0040,4023' => { VR => 'UI', Name => 'RefGenPurSchedProcStepTransUID' }, '0040,4025' => { VR => 'SQ', Name => 'ScheduledStationNameCodeSequence' }, '0040,4026' => { VR => 'SQ', Name => 'ScheduledStationClassCodeSequence' }, '0040,4027' => { VR => 'SQ', Name => 'SchedStationGeographicLocCodeSeq' }, '0040,4028' => { VR => 'SQ', Name => 'PerformedStationNameCodeSequence' }, '0040,4029' => { VR => 'SQ', Name => 'PerformedStationClassCodeSequence' }, '0040,4030' => { VR => 'SQ', Name => 'PerformedStationGeogLocCodeSeq' }, '0040,4031' => { VR => 'SQ', Name => 'RequestedSubsequentWorkItemCodeSeq' }, '0040,4032' => { VR => 'SQ', Name => 'NonDICOMOutputCodeSequence' }, '0040,4033' => { VR => 'SQ', Name => 'OutputInformationSequence' }, '0040,4034' => { VR => 'SQ', Name => 'ScheduledHumanPerformersSequence' }, '0040,4035' => { VR => 'SQ', Name => 'ActualHumanPerformersSequence' }, '0040,4036' => { VR => 'LO', Name => 'HumanPerformersOrganization' }, '0040,4037' => { VR => 'PN', Name => 'HumanPerformerName' }, '0040,4040' => { VR => 'CS', Name => 'RawDataHandling' }, '0040,8302' => { VR => 'DS', Name => 'EntranceDoseInMilliGy' }, '0040,9094' => { VR => 'SQ', Name => 'RefImageRealWorldValueMappingSeq' }, '0040,9096' => { VR => 'SQ', Name => 'RealWorldValueMappingSequence' }, '0040,9098' => { VR => 'SQ', Name => 'PixelValueMappingCodeSequence' }, '0040,9210' => { VR => 'SH', Name => 'LUTLabel' }, '0040,9211' => { VR => 'SS', Name => 'RealWorldValueLastValueMapped' }, '0040,9212' => { VR => 'FD', Name => 'RealWorldValueLUTData' }, '0040,9216' => { VR => 'SS', Name => 'RealWorldValueFirstValueMapped' }, '0040,9224' => { VR => 'FD', Name => 'RealWorldValueIntercept' }, '0040,9225' => { VR => 'FD', Name => 'RealWorldValueSlope' }, '0040,A010' => { VR => 'CS', Name => 'RelationshipType' }, '0040,A027' => { VR => 'LO', Name => 'VerifyingOrganization' }, '0040,A030' => { VR => 'DT', Name => 'VerificationDateTime' }, '0040,A032' => { VR => 'DT', Name => 'ObservationDateTime' }, '0040,A040' => { VR => 'CS', Name => 'ValueType' }, '0040,A043' => { VR => 'SQ', Name => 'ConceptNameCodeSequence' }, '0040,A050' => { VR => 'CS', Name => 'ContinuityOfContent' }, '0040,A073' => { VR => 'SQ', Name => 'VerifyingObserverSequence' }, '0040,A075' => { VR => 'PN', Name => 'VerifyingObserverName' }, '0040,A078' => { VR => 'SQ', Name => 'AuthorObserverSequence' }, '0040,A07A' => { VR => 'SQ', Name => 'ParticipantSequence' }, '0040,A07C' => { VR => 'SQ', Name => 'CustodialOrganizationSequence' }, '0040,A080' => { VR => 'CS', Name => 'ParticipationType' }, '0040,A082' => { VR => 'DT', Name => 'ParticipationDateTime' }, '0040,A084' => { VR => 'CS', Name => 'ObserverType' }, '0040,A088' => { VR => 'SQ', Name => 'VerifyingObserverIdentCodeSequence' }, '0040,A090' => { VR => 'SQ', Name => 'EquivalentCDADocumentSequence' }, '0040,A0B0' => { VR => 'US', Name => 'ReferencedWaveformChannels' }, '0040,A120' => { VR => 'DT', Name => 'DateTime' }, '0040,A121' => { VR => 'DA', Name => 'Date' }, '0040,A122' => { VR => 'TM', Name => 'Time' }, '0040,A123' => { VR => 'PN', Name => 'PersonName' }, '0040,A124' => { VR => 'UI', Name => 'UID' }, '0040,A130' => { VR => 'CS', Name => 'TemporalRangeType' }, '0040,A132' => { VR => 'UL', Name => 'ReferencedSamplePositions' }, '0040,A136' => { VR => 'US', Name => 'ReferencedFrameNumbers' }, '0040,A138' => { VR => 'DS', Name => 'ReferencedTimeOffsets' }, '0040,A13A' => { VR => 'DT', Name => 'ReferencedDateTime' }, '0040,A160' => { VR => 'UT', Name => 'TextValue' }, '0040,A168' => { VR => 'SQ', Name => 'ConceptCodeSequence' }, '0040,A170' => { VR => 'SQ', Name => 'PurposeOfReferenceCodeSequence' }, '0040,A180' => { VR => 'US', Name => 'AnnotationGroupNumber' }, '0040,A195' => { VR => 'SQ', Name => 'ModifierCodeSequence' }, '0040,A300' => { VR => 'SQ', Name => 'MeasuredValueSequence' }, '0040,A301' => { VR => 'SQ', Name => 'NumericValueQualifierCodeSequence' }, '0040,A30A' => { VR => 'DS', Name => 'NumericValue' }, '0040,A353' => { VR => 'ST', Name => 'AddressTrial' }, '0040,A354' => { VR => 'LO', Name => 'TelephoneNumberTrial' }, '0040,A360' => { VR => 'SQ', Name => 'PredecessorDocumentsSequence' }, '0040,A370' => { VR => 'SQ', Name => 'ReferencedRequestSequence' }, '0040,A372' => { VR => 'SQ', Name => 'PerformedProcedureCodeSequence' }, '0040,A375' => { VR => 'SQ', Name => 'CurrentRequestedProcEvidenceSeq' }, '0040,A385' => { VR => 'SQ', Name => 'PertinentOtherEvidenceSequence' }, '0040,A390' => { VR => 'SQ', Name => 'HL7StructuredDocumentRefSeq' }, '0040,A491' => { VR => 'CS', Name => 'CompletionFlag' }, '0040,A492' => { VR => 'LO', Name => 'CompletionFlagDescription' }, '0040,A493' => { VR => 'CS', Name => 'VerificationFlag' }, '0040,A494' => { VR => 'CS', Name => 'ArchiveRequested' }, '0040,A496' => { VR => 'CS', Name => 'PreliminaryFlag' }, '0040,A504' => { VR => 'SQ', Name => 'ContentTemplateSequence' }, '0040,A525' => { VR => 'SQ', Name => 'IdenticalDocumentsSequence' }, '0040,A730' => { VR => 'SQ', Name => 'ContentSequence' }, '0040,B020' => { VR => 'SQ', Name => 'AnnotationSequence' }, '0040,DB00' => { VR => 'CS', Name => 'TemplateIdentifier' }, '0040,DB06' => { VR => 'DT', Name => 'TemplateVersion' }, '0040,DB07' => { VR => 'DT', Name => 'TemplateLocalVersion' }, '0040,DB0B' => { VR => 'CS', Name => 'TemplateExtensionFlag' }, '0040,DB0C' => { VR => 'UI', Name => 'TemplateExtensionOrganizationUID' }, '0040,DB0D' => { VR => 'UI', Name => 'TemplateExtensionCreatorUID' }, '0040,DB73' => { VR => 'UL', Name => 'ReferencedContentItemIdentifier' }, '0040,E001' => { VR => 'ST', Name => 'HL7InstanceIdentifier' }, '0040,E004' => { VR => 'DT', Name => 'HL7DocumentEffectiveTime' }, '0040,E006' => { VR => 'SQ', Name => 'HL7DocumentTypeCodeSequence' }, '0040,E010' => { VR => 'UT', Name => 'RetrieveURI' }, '0040,E011' => { VR => 'UI', Name => 'RetrieveLocationUID' }, '0042,0010' => { VR => 'ST', Name => 'DocumentTitle' }, '0042,0011' => { VR => 'OB', Name => 'EncapsulatedDocument' }, '0042,0012' => { VR => 'LO', Name => 'MIMETypeOfEncapsulatedDocument' }, '0042,0013' => { VR => 'SQ', Name => 'SourceInstanceSequence' }, '0042,0014' => { VR => 'LO', Name => 'ListOfMIMETypes' }, # GEMS_PARM_01 (ref 4) '0043,1001' => { VR => 'SS', Name => 'BitmapOfPrescanOptions' }, '0043,1002' => { VR => 'SS', Name => 'GradientOffsetInX' }, '0043,1003' => { VR => 'SS', Name => 'GradientOffsetInY' }, '0043,1004' => { VR => 'SS', Name => 'GradientOffsetInZ' }, '0043,1005' => { VR => 'SS', Name => 'ImgIsOriginalOrUnoriginal' }, '0043,1006' => { VR => 'SS', Name => 'NumberOfEPIShots' }, '0043,1007' => { VR => 'SS', Name => 'ViewsPerSegment' }, '0043,1008' => { VR => 'SS', Name => 'RespiratoryRateBpm' }, '0043,1009' => { VR => 'SS', Name => 'RespiratoryTriggerPoint' }, '0043,100A' => { VR => 'SS', Name => 'TypeOfReceiverUsed' }, '0043,100B' => { VR => 'DS', Name => 'PeakRateOfChangeOfGradientField' }, '0043,100C' => { VR => 'DS', Name => 'LimitsInUnitsOfPercent' }, '0043,100D' => { VR => 'DS', Name => 'PSDEstimatedLimit' }, '0043,100E' => { VR => 'DS', Name => 'PSDEstimatedLimitInTeslaPerSecond' }, '0043,100F' => { VR => 'DS', Name => 'Saravghead' }, '0043,1010' => { VR => 'US', Name => 'WindowValue' }, '0043,1011' => { VR => 'US', Name => 'TotalInputViews' }, '0043,1012' => { VR => 'SS', Name => 'X-RayChain' }, '0043,1013' => { VR => 'SS', Name => 'DeconKernelParameters' }, '0043,1014' => { VR => 'SS', Name => 'CalibrationParameters' }, '0043,1015' => { VR => 'SS', Name => 'TotalOutputViews' }, '0043,1016' => { VR => 'SS', Name => 'NumberOfOverranges' }, '0043,1017' => { VR => 'DS', Name => 'IBHImageScaleFactors' }, '0043,1018' => { VR => 'DS', Name => 'BBHCoefficients' }, '0043,1019' => { VR => 'SS', Name => 'NumberOfBBHChainsToBlend' }, '0043,101A' => { VR => 'SL', Name => 'StartingChannelNumber' }, '0043,101B' => { VR => 'SS', Name => 'PpscanParameters' }, '0043,101C' => { VR => 'SS', Name => 'GEImageIntegrity' }, '0043,101D' => { VR => 'SS', Name => 'LevelValue' }, '0043,101E' => { VR => 'DS', Name => 'DeltaStartTime' }, '0043,101F' => { VR => 'SL', Name => 'MaxOverrangesInAView' }, '0043,1020' => { VR => 'DS', Name => 'AvgOverrangesAllViews' }, '0043,1021' => { VR => 'SS', Name => 'CorrectedAfterGlowTerms' }, '0043,1025' => { VR => 'SS', Name => 'ReferenceChannels' }, '0043,1026' => { VR => 'US', Name => 'NoViewsRefChansBlocked' }, '0043,1027' => { VR => 'SH', Name => 'ScanPitchRatio' }, '0043,1028' => { VR => 'OB', Name => 'UniqueImageIden' }, '0043,1029' => { VR => 'OB', Name => 'HistogramTables' }, '0043,102A' => { VR => 'OB', Name => 'UserDefinedData' }, '0043,102B' => { VR => 'SS', Name => 'PrivateScanOptions' }, '0043,102C' => { VR => 'SS', Name => 'EffectiveEchoSpacing' }, '0043,102D' => { VR => 'SH', Name => 'StringSlopField1' }, '0043,102E' => { VR => 'SH', Name => 'StringSlopField2' }, '0043,102F' => { VR => 'SS', Name => 'RawDataType' }, '0043,1030' => { VR => 'SS', Name => 'RawDataType' }, '0043,1031' => { VR => 'DS', Name => 'RACordOfTargetReconCenter' }, '0043,1032' => { VR => 'SS', Name => 'RawDataType' }, '0043,1033' => { VR => 'FL', Name => 'NegScanspacing' }, '0043,1034' => { VR => 'IS', Name => 'OffsetFrequency' }, '0043,1035' => { VR => 'UL', Name => 'UserUsageTag' }, '0043,1036' => { VR => 'UL', Name => 'UserFillMapMSW' }, '0043,1037' => { VR => 'UL', Name => 'UserFillMapLSW' }, '0043,1038' => { VR => 'FL', Name => 'User25-48' }, '0043,1039' => { VR => 'IS', Name => 'SlopInt6-9' }, '0043,1040' => { VR => 'FL', Name => 'TriggerOnPosition' }, '0043,1041' => { VR => 'FL', Name => 'DegreeOfRotation' }, '0043,1042' => { VR => 'SL', Name => 'DASTriggerSource' }, '0043,1043' => { VR => 'SL', Name => 'DASFpaGain' }, '0043,1044' => { VR => 'SL', Name => 'DASOutputSource' }, '0043,1045' => { VR => 'SL', Name => 'DASAdInput' }, '0043,1046' => { VR => 'SL', Name => 'DASCalMode' }, '0043,1047' => { VR => 'SL', Name => 'DASCalFrequency' }, '0043,1048' => { VR => 'SL', Name => 'DASRegXm' }, '0043,1049' => { VR => 'SL', Name => 'DASAutoZero' }, '0043,104A' => { VR => 'SS', Name => 'StartingChannelOfView' }, '0043,104B' => { VR => 'SL', Name => 'DASXmPattern' }, '0043,104C' => { VR => 'SS', Name => 'TGGCTriggerMode' }, '0043,104D' => { VR => 'FL', Name => 'StartScanToXrayOnDelay' }, '0043,104E' => { VR => 'FL', Name => 'DurationOfXrayOn' }, '0043,1060' => { VR => 'IS', Name => 'SlopInt10-17' }, '0043,1061' => { VR => 'UI', Name => 'ScannerStudyEntityUID' }, '0043,1062' => { VR => 'SH', Name => 'ScannerStudyID' }, '0043,106f' => { VR => 'DS', Name => 'ScannerTableEntry' }, # ? '0044,0001' => { VR => 'ST', Name => 'ProductPackageIdentifier' }, '0044,0002' => { VR => 'CS', Name => 'SubstanceAdministrationApproval' }, '0044,0003' => { VR => 'LT', Name => 'ApprovalStatusFurtherDescription' }, '0044,0004' => { VR => 'DT', Name => 'ApprovalStatusDateTime' }, '0044,0007' => { VR => 'SQ', Name => 'ProductTypeCodeSequence' }, '0044,0008' => { VR => 'LO', Name => 'ProductName' }, '0044,0009' => { VR => 'LT', Name => 'ProductDescription' }, '0044,000A' => { VR => 'LO', Name => 'ProductLotIdentifier' }, '0044,000B' => { VR => 'DT', Name => 'ProductExpirationDateTime' }, '0044,0010' => { VR => 'DT', Name => 'SubstanceAdministrationDateTime' }, '0044,0011' => { VR => 'LO', Name => 'SubstanceAdministrationNotes' }, '0044,0012' => { VR => 'LO', Name => 'SubstanceAdministrationDeviceID' }, '0044,0013' => { VR => 'SQ', Name => 'ProductParameterSequence' }, '0044,0019' => { VR => 'SQ', Name => 'SubstanceAdminParameterSeq' }, # GEMS_HELIOS_01 (ref 4) '0045,1001' => { VR => 'LO', Name => 'NumberOfMacroRowsInDetector' }, '0045,1002' => { VR => 'FL', Name => 'MacroWidthAtISOCenter' }, '0045,1003' => { VR => 'SS', Name => 'DASType' }, '0045,1004' => { VR => 'SS', Name => 'DASGain' }, '0045,1005' => { VR => 'SS', Name => 'DASTemperature' }, '0045,1006' => { VR => 'CS', Name => 'TableDirectionInOrOut' }, '0045,1007' => { VR => 'FL', Name => 'ZSmoothingFactor' }, '0045,1008' => { VR => 'SS', Name => 'ViewWeightingMode' }, '0045,1009' => { VR => 'SS', Name => 'SigmaRowNumberWhichRowsWereUsed' }, '0045,100A' => { VR => 'FL', Name => 'MinimumDasValueFoundInTheScanData' }, '0045,100B' => { VR => 'FL', Name => 'MaximumOffsetShiftValueUsed' }, '0045,100C' => { VR => 'SS', Name => 'NumberOfViewsShifted' }, '0045,100D' => { VR => 'SS', Name => 'ZTrackingFlag' }, '0045,100E' => { VR => 'FL', Name => 'MeanZError' }, '0045,100F' => { VR => 'FL', Name => 'ZTrackingMaximumError' }, '0045,1010' => { VR => 'SS', Name => 'StartingViewForRow2a' }, '0045,1011' => { VR => 'SS', Name => 'NumberOfViewsInRow2a' }, '0045,1012' => { VR => 'SS', Name => 'StartingViewForRow1a' }, '0045,1013' => { VR => 'SS', Name => 'SigmaMode' }, '0045,1014' => { VR => 'SS', Name => 'NumberOfViewsInRow1a' }, '0045,1015' => { VR => 'SS', Name => 'StartingViewForRow2b' }, '0045,1016' => { VR => 'SS', Name => 'NumberOfViewsInRow2b' }, '0045,1017' => { VR => 'SS', Name => 'StartingViewForRow1b' }, '0045,1018' => { VR => 'SS', Name => 'NumberOfViewsInRow1b' }, '0045,1019' => { VR => 'SS', Name => 'AirFilterCalibrationDate' }, '0045,101A' => { VR => 'SS', Name => 'AirFilterCalibrationTime' }, '0045,101B' => { VR => 'SS', Name => 'PhantomCalibrationDate' }, '0045,101C' => { VR => 'SS', Name => 'PhantomCalibrationTime' }, '0045,101D' => { VR => 'SS', Name => 'ZSlopeCalibrationDate' }, '0045,101E' => { VR => 'SS', Name => 'ZSlopeCalibrationTime' }, '0045,101F' => { VR => 'SS', Name => 'CrosstalkCalibrationDate' }, '0045,1020' => { VR => 'SS', Name => 'CrosstalkCalibrationTime' }, '0045,1021' => { VR => 'SS', Name => 'IterboneOptionFlag' }, '0045,1022' => { VR => 'SS', Name => 'PeristalticFlagOption' }, '0046,0012' => { VR => 'LO', Name => 'LensDescription' }, '0046,0014' => { VR => 'SQ', Name => 'RightLensSequence' }, '0046,0015' => { VR => 'SQ', Name => 'LeftLensSequence' }, '0046,0018' => { VR => 'SQ', Name => 'CylinderSequence' }, '0046,0028' => { VR => 'SQ', Name => 'PrismSequence' }, '0046,0030' => { VR => 'FD', Name => 'HorizontalPrismPower' }, '0046,0032' => { VR => 'CS', Name => 'HorizontalPrismBase' }, '0046,0034' => { VR => 'FD', Name => 'VerticalPrismPower' }, '0046,0036' => { VR => 'CS', Name => 'VerticalPrismBase' }, '0046,0038' => { VR => 'CS', Name => 'LensSegmentType' }, '0046,0040' => { VR => 'FD', Name => 'OpticalTransmittance' }, '0046,0042' => { VR => 'FD', Name => 'ChannelWidth' }, '0046,0044' => { VR => 'FD', Name => 'PupilSize' }, '0046,0046' => { VR => 'FD', Name => 'CornealSize' }, '0046,0060' => { VR => 'FD', Name => 'DistancePupillaryDistance' }, '0046,0062' => { VR => 'FD', Name => 'NearPupillaryDistance' }, '0046,0064' => { VR => 'FD', Name => 'OtherPupillaryDistance' }, '0046,0075' => { VR => 'FD', Name => 'RadiusOfCurvature' }, '0046,0076' => { VR => 'FD', Name => 'KeratometricPower' }, '0046,0077' => { VR => 'FD', Name => 'KeratometricAxis' }, '0046,0092' => { VR => 'CS', Name => 'BackgroundColor' }, '0046,0094' => { VR => 'CS', Name => 'Optotype' }, '0046,0095' => { VR => 'CS', Name => 'OptotypePresentation' }, '0046,0100' => { VR => 'SQ', Name => 'AddNearSequence' }, '0046,0101' => { VR => 'SQ', Name => 'AddIntermediateSequence' }, '0046,0102' => { VR => 'SQ', Name => 'AddOtherSequence' }, '0046,0104' => { VR => 'FD', Name => 'AddPower' }, '0046,0106' => { VR => 'FD', Name => 'ViewingDistance' }, '0046,0125' => { VR => 'CS', Name => 'ViewingDistanceType' }, '0046,0135' => { VR => 'SS', Name => 'VisualAcuityModifiers' }, '0046,0137' => { VR => 'FD', Name => 'DecimalVisualAcuity' }, '0046,0139' => { VR => 'LO', Name => 'OptotypeDetailedDefinition' }, '0046,0146' => { VR => 'FD', Name => 'SpherePower' }, '0046,0147' => { VR => 'FD', Name => 'CylinderPower' }, # calibration group '0050,0004' => { VR => 'CS', Name => 'CalibrationImage' }, '0050,0010' => { VR => 'SQ', Name => 'DeviceSequence' }, '0050,0014' => { VR => 'DS', Name => 'DeviceLength' }, '0050,0015' => { VR => 'FD', Name => 'ContainerComponentWidth' }, '0050,0016' => { VR => 'DS', Name => 'DeviceDiameter' }, '0050,0017' => { VR => 'CS', Name => 'DeviceDiameterUnits' }, '0050,0018' => { VR => 'DS', Name => 'DeviceVolume' }, '0050,0019' => { VR => 'DS', Name => 'InterMarkerDistance' }, '0050,001B' => { VR => 'LO', Name => 'ContainerComponentID' }, '0050,0020' => { VR => 'LO', Name => 'DeviceDescription' }, # nuclear acquisition group '0054,0010' => { VR => 'US', Name => 'EnergyWindowVector' }, '0054,0011' => { VR => 'US', Name => 'NumberOfEnergyWindows' }, '0054,0012' => { VR => 'SQ', Name => 'EnergyWindowInformationSequence' }, '0054,0013' => { VR => 'SQ', Name => 'EnergyWindowRangeSequence' }, '0054,0014' => { VR => 'DS', Name => 'EnergyWindowLowerLimit' }, '0054,0015' => { VR => 'DS', Name => 'EnergyWindowUpperLimit' }, '0054,0016' => { VR => 'SQ', Name => 'RadiopharmaceuticalInformationSeq' }, '0054,0017' => { VR => 'IS', Name => 'ResidualSyringeCounts' }, '0054,0018' => { VR => 'SH', Name => 'EnergyWindowName' }, '0054,0020' => { VR => 'US', Name => 'DetectorVector' }, '0054,0021' => { VR => 'US', Name => 'NumberOfDetectors' }, '0054,0022' => { VR => 'SQ', Name => 'DetectorInformationSequence' }, '0054,0030' => { VR => 'US', Name => 'PhaseVector' }, '0054,0031' => { VR => 'US', Name => 'NumberOfPhases' }, '0054,0032' => { VR => 'SQ', Name => 'PhaseInformationSequence' }, '0054,0033' => { VR => 'US', Name => 'NumberOfFramesInPhase' }, '0054,0036' => { VR => 'IS', Name => 'PhaseDelay' }, '0054,0038' => { VR => 'IS', Name => 'PauseBetweenFrames' }, '0054,0039' => { VR => 'CS', Name => 'PhaseDescription' }, '0054,0050' => { VR => 'US', Name => 'RotationVector' }, '0054,0051' => { VR => 'US', Name => 'NumberOfRotations' }, '0054,0052' => { VR => 'SQ', Name => 'RotationInformationSequence' }, '0054,0053' => { VR => 'US', Name => 'NumberOfFramesInRotation' }, '0054,0060' => { VR => 'US', Name => 'RRIntervalVector' }, '0054,0061' => { VR => 'US', Name => 'NumberOfRRIntervals' }, '0054,0062' => { VR => 'SQ', Name => 'GatedInformationSequence' }, '0054,0063' => { VR => 'SQ', Name => 'DataInformationSequence' }, '0054,0070' => { VR => 'US', Name => 'TimeSlotVector' }, '0054,0071' => { VR => 'US', Name => 'NumberOfTimeSlots' }, '0054,0072' => { VR => 'SQ', Name => 'TimeSlotInformationSequence' }, '0054,0073' => { VR => 'DS', Name => 'TimeSlotTime' }, '0054,0080' => { VR => 'US', Name => 'SliceVector' }, '0054,0081' => { VR => 'US', Name => 'NumberOfSlices' }, '0054,0090' => { VR => 'US', Name => 'AngularViewVector' }, '0054,0100' => { VR => 'US', Name => 'TimeSliceVector' }, '0054,0101' => { VR => 'US', Name => 'NumberOfTimeSlices' }, '0054,0200' => { VR => 'DS', Name => 'StartAngle' }, '0054,0202' => { VR => 'CS', Name => 'TypeOfDetectorMotion' }, '0054,0210' => { VR => 'IS', Name => 'TriggerVector' }, '0054,0211' => { VR => 'US', Name => 'NumberOfTriggersInPhase' }, '0054,0220' => { VR => 'SQ', Name => 'ViewCodeSequence' }, '0054,0222' => { VR => 'SQ', Name => 'ViewModifierCodeSequence' }, '0054,0300' => { VR => 'SQ', Name => 'RadionuclideCodeSequence' }, '0054,0302' => { VR => 'SQ', Name => 'AdministrationRouteCodeSequence' }, '0054,0304' => { VR => 'SQ', Name => 'RadiopharmaceuticalCodeSequence' }, '0054,0306' => { VR => 'SQ', Name => 'CalibrationDataSequence' }, '0054,0308' => { VR => 'US', Name => 'EnergyWindowNumber' }, '0054,0400' => { VR => 'SH', Name => 'ImageID' }, '0054,0410' => { VR => 'SQ', Name => 'PatientOrientationCodeSequence' }, '0054,0412' => { VR => 'SQ', Name => 'PatientOrientationModifierCodeSeq' }, '0054,0414' => { VR => 'SQ', Name => 'PatientGantryRelationshipCodeSeq' }, '0054,0500' => { VR => 'CS', Name => 'SliceProgressionDirection' }, '0054,1000' => { VR => 'CS', Name => 'SeriesType' }, '0054,1001' => { VR => 'CS', Name => 'Units' }, '0054,1002' => { VR => 'CS', Name => 'CountsSource' }, '0054,1004' => { VR => 'CS', Name => 'ReprojectionMethod' }, '0054,1100' => { VR => 'CS', Name => 'RandomsCorrectionMethod' }, '0054,1101' => { VR => 'LO', Name => 'AttenuationCorrectionMethod' }, '0054,1102' => { VR => 'CS', Name => 'DecayCorrection' }, '0054,1103' => { VR => 'LO', Name => 'ReconstructionMethod' }, '0054,1104' => { VR => 'LO', Name => 'DetectorLinesOfResponseUsed' }, '0054,1105' => { VR => 'LO', Name => 'ScatterCorrectionMethod' }, '0054,1200' => { VR => 'DS', Name => 'AxialAcceptance' }, '0054,1201' => { VR => 'IS', Name => 'AxialMash' }, '0054,1202' => { VR => 'IS', Name => 'TransverseMash' }, '0054,1203' => { VR => 'DS', Name => 'DetectorElementSize' }, '0054,1210' => { VR => 'DS', Name => 'CoincidenceWindowWidth' }, '0054,1220' => { VR => 'CS', Name => 'SecondaryCountsType' }, '0054,1300' => { VR => 'DS', Name => 'FrameReferenceTime' }, '0054,1310' => { VR => 'IS', Name => 'PrimaryCountsAccumulated' }, '0054,1311' => { VR => 'IS', Name => 'SecondaryCountsAccumulated' }, '0054,1320' => { VR => 'DS', Name => 'SliceSensitivityFactor' }, '0054,1321' => { VR => 'DS', Name => 'DecayFactor' }, '0054,1322' => { VR => 'DS', Name => 'DoseCalibrationFactor' }, '0054,1323' => { VR => 'DS', Name => 'ScatterFractionFactor' }, '0054,1324' => { VR => 'DS', Name => 'DeadTimeFactor' }, '0054,1330' => { VR => 'US', Name => 'ImageIndex' }, '0054,1400' => { VR => 'CS', Name => 'CountsIncluded' }, '0054,1401' => { VR => 'CS', Name => 'DeadTimeCorrectionFlag' }, '0060,3000' => { VR => 'SQ', Name => 'HistogramSequence' }, '0060,3002' => { VR => 'US', Name => 'HistogramNumberOfBins' }, '0060,3004' => { VR => 'US', Name => 'HistogramFirstBinValue' }, '0060,3006' => { VR => 'US', Name => 'HistogramLastBinValue' }, '0060,3008' => { VR => 'US', Name => 'HistogramBinWidth' }, '0060,3010' => { VR => 'LO', Name => 'HistogramExplanation' }, '0060,3020' => { VR => 'UL', Name => 'HistogramData' }, '0062,0001' => { VR => 'CS', Name => 'SegmentationType' }, '0062,0002' => { VR => 'SQ', Name => 'SegmentSequence' }, '0062,0003' => { VR => 'SQ', Name => 'SegmentedPropertyCategoryCodeSeq' }, '0062,0004' => { VR => 'US', Name => 'SegmentNumber' }, '0062,0005' => { VR => 'LO', Name => 'SegmentLabel' }, '0062,0006' => { VR => 'ST', Name => 'SegmentDescription' }, '0062,0008' => { VR => 'CS', Name => 'SegmentAlgorithmType' }, '0062,0009' => { VR => 'LO', Name => 'SegmentAlgorithmName' }, '0062,000A' => { VR => 'SQ', Name => 'SegmentIdentificationSequence' }, '0062,000B' => { VR => 'US', Name => 'ReferencedSegmentNumber' }, '0062,000C' => { VR => 'US', Name => 'RecommendedDisplayGrayscaleValue' }, '0062,000D' => { VR => 'US', Name => 'RecommendedDisplayCIELabValue' }, '0062,000E' => { VR => 'US', Name => 'MaximumFractionalValue' }, '0062,000F' => { VR => 'SQ', Name => 'SegmentedPropertyTypeCodeSequence' }, '0062,0010' => { VR => 'CS', Name => 'SegmentationFractionalType' }, '0064,0002' => { VR => 'SQ', Name => 'DeformableRegistrationSequence' }, '0064,0003' => { VR => 'UI', Name => 'SourceFrameOfReferenceUID' }, '0064,0005' => { VR => 'SQ', Name => 'DeformableRegistrationGridSequence' }, '0064,0007' => { VR => 'UL', Name => 'GridDimensions' }, '0064,0008' => { VR => 'FD', Name => 'GridResolution' }, '0064,0009' => { VR => 'OF', Name => 'VectorGridData' }, '0064,000F' => { VR => 'SQ', Name => 'PreDeformationMatrixRegistSeq' }, '0064,0010' => { VR => 'SQ', Name => 'PostDeformationMatrixRegistSeq' }, '0066,0001' => { VR => 'UL', Name => 'NumberOfSurfaces' }, '0066,0002' => { VR => 'SQ', Name => 'SurfaceSequence' }, '0066,0003' => { VR => 'UL', Name => 'SurfaceNumber' }, '0066,0004' => { VR => 'LT', Name => 'SurfaceComments' }, '0066,0009' => { VR => 'CS', Name => 'SurfaceProcessing' }, '0066,000A' => { VR => 'FL', Name => 'SurfaceProcessingRatio' }, '0066,000E' => { VR => 'CS', Name => 'FiniteVolume' }, '0066,0010' => { VR => 'CS', Name => 'Manifold' }, '0066,0011' => { VR => 'SQ', Name => 'SurfacePointsSequence' }, '0066,0015' => { VR => 'UL', Name => 'NumberOfSurfacePoints' }, '0066,0016' => { VR => 'OF', Name => 'PointCoordinatesData' }, '0066,0017' => { VR => 'FL', Name => 'PointPositionAccuracy' }, '0066,0018' => { VR => 'FL', Name => 'MeanPointDistance' }, '0066,0019' => { VR => 'FL', Name => 'MaximumPointDistance' }, '0066,001B' => { VR => 'FL', Name => 'AxisOfRotation' }, '0066,001C' => { VR => 'FL', Name => 'CenterOfRotation' }, '0066,001E' => { VR => 'UL', Name => 'NumberOfVectors' }, '0066,001F' => { VR => 'US', Name => 'VectorDimensionality' }, '0066,0020' => { VR => 'FL', Name => 'VectorAccuracy' }, '0066,0021' => { VR => 'OF', Name => 'VectorCoordinateData' }, '0066,0023' => { VR => 'OW', Name => 'TrianglePointIndexList' }, '0066,0024' => { VR => 'OW', Name => 'EdgePointIndexList' }, '0066,0025' => { VR => 'OW', Name => 'VertexPointIndexList' }, '0066,0026' => { VR => 'SQ', Name => 'TriangleStripSequence' }, '0066,0027' => { VR => 'SQ', Name => 'TriangleFanSequence' }, '0066,0028' => { VR => 'SQ', Name => 'LineSequence' }, '0066,0029' => { VR => 'OW', Name => 'PrimitivePointIndexList' }, '0066,002A' => { VR => 'UL', Name => 'SurfaceCount' }, '0066,002F' => { VR => 'SQ', Name => 'AlgorithmFamilyCodeSequ' }, '0066,0031' => { VR => 'LO', Name => 'AlgorithmVersion' }, '0066,0032' => { VR => 'LT', Name => 'AlgorithmParameters' }, '0066,0034' => { VR => 'SQ', Name => 'FacetSequence' }, '0066,0036' => { VR => 'LO', Name => 'AlgorithmName' }, '0070,0001' => { VR => 'SQ', Name => 'GraphicAnnotationSequence' }, '0070,0002' => { VR => 'CS', Name => 'GraphicLayer' }, '0070,0003' => { VR => 'CS', Name => 'BoundingBoxAnnotationUnits' }, '0070,0004' => { VR => 'CS', Name => 'AnchorPointAnnotationUnits' }, '0070,0005' => { VR => 'CS', Name => 'GraphicAnnotationUnits' }, '0070,0006' => { VR => 'ST', Name => 'UnformattedTextValue' }, '0070,0008' => { VR => 'SQ', Name => 'TextObjectSequence' }, '0070,0009' => { VR => 'SQ', Name => 'GraphicObjectSequence' }, '0070,0010' => { VR => 'FL', Name => 'BoundingBoxTopLeftHandCorner' }, '0070,0011' => { VR => 'FL', Name => 'BoundingBoxBottomRightHandCorner' }, '0070,0012' => { VR => 'CS', Name => 'BoundingBoxTextHorizJustification' }, '0070,0014' => { VR => 'FL', Name => 'AnchorPoint' }, '0070,0015' => { VR => 'CS', Name => 'AnchorPointVisibility' }, '0070,0020' => { VR => 'US', Name => 'GraphicDimensions' }, '0070,0021' => { VR => 'US', Name => 'NumberOfGraphicPoints' }, '0070,0022' => { VR => 'FL', Name => 'GraphicData' }, '0070,0023' => { VR => 'CS', Name => 'GraphicType' }, '0070,0024' => { VR => 'CS', Name => 'GraphicFilled' }, '0070,0040' => { VR => 'IS', Name => 'ImageRotationRetired' }, '0070,0041' => { VR => 'CS', Name => 'ImageHorizontalFlip' }, '0070,0042' => { VR => 'US', Name => 'ImageRotation' }, '0070,0050' => { VR => 'US', Name => 'DisplayedAreaTopLeftTrial' }, '0070,0051' => { VR => 'US', Name => 'DisplayedAreaBottomRightTrial' }, '0070,0052' => { VR => 'SL', Name => 'DisplayedAreaTopLeft' }, '0070,0053' => { VR => 'SL', Name => 'DisplayedAreaBottomRight' }, '0070,005A' => { VR => 'SQ', Name => 'DisplayedAreaSelectionSequence' }, '0070,0060' => { VR => 'SQ', Name => 'GraphicLayerSequence' }, '0070,0062' => { VR => 'IS', Name => 'GraphicLayerOrder' }, '0070,0066' => { VR => 'US', Name => 'GraphicLayerRecDisplayGraysclValue' }, '0070,0067' => { VR => 'US', Name => 'GraphicLayerRecDisplayRGBValue' }, '0070,0068' => { VR => 'LO', Name => 'GraphicLayerDescription' }, '0070,0080' => { VR => 'CS', Name => 'ContentLabel' }, '0070,0081' => { VR => 'LO', Name => 'ContentDescription' }, '0070,0082' => { VR => 'DA', Name => 'PresentationCreationDate' }, '0070,0083' => { VR => 'TM', Name => 'PresentationCreationTime' }, '0070,0084' => { VR => 'PN', Name => 'ContentCreatorName' }, '0070,0086' => { VR => 'SQ', Name => 'ContentCreatorIDCodeSequence' }, '0070,0100' => { VR => 'CS', Name => 'PresentationSizeMode' }, '0070,0101' => { VR => 'DS', Name => 'PresentationPixelSpacing' }, '0070,0102' => { VR => 'IS', Name => 'PresentationPixelAspectRatio' }, '0070,0103' => { VR => 'FL', Name => 'PresentationPixelMagRatio' }, '0070,0306' => { VR => 'CS', Name => 'ShapeType' }, '0070,0308' => { VR => 'SQ', Name => 'RegistrationSequence' }, '0070,0309' => { VR => 'SQ', Name => 'MatrixRegistrationSequence' }, '0070,030A' => { VR => 'SQ', Name => 'MatrixSequence' }, '0070,030C' => { VR => 'CS', Name => 'FrameOfRefTransformationMatrixType' }, '0070,030D' => { VR => 'SQ', Name => 'RegistrationTypeCodeSequence' }, '0070,030F' => { VR => 'ST', Name => 'FiducialDescription' }, '0070,0310' => { VR => 'SH', Name => 'FiducialIdentifier' }, '0070,0311' => { VR => 'SQ', Name => 'FiducialIdentifierCodeSequence' }, '0070,0312' => { VR => 'FD', Name => 'ContourUncertaintyRadius' }, '0070,0314' => { VR => 'SQ', Name => 'UsedFiducialsSequence' }, '0070,0318' => { VR => 'SQ', Name => 'GraphicCoordinatesDataSequence' }, '0070,031A' => { VR => 'UI', Name => 'FiducialUID' }, '0070,031C' => { VR => 'SQ', Name => 'FiducialSetSequence' }, '0070,031E' => { VR => 'SQ', Name => 'FiducialSequence' }, '0070,0401' => { VR => 'US', Name => 'GraphicLayerRecomDisplayCIELabVal' }, '0070,0402' => { VR => 'SQ', Name => 'BlendingSequence' }, '0070,0403' => { VR => 'FL', Name => 'RelativeOpacity' }, '0070,0404' => { VR => 'SQ', Name => 'ReferencedSpatialRegistrationSeq' }, '0070,0405' => { VR => 'CS', Name => 'BlendingPosition' }, '0072,0002' => { VR => 'SH', Name => 'HangingProtocolName' }, '0072,0004' => { VR => 'LO', Name => 'HangingProtocolDescription' }, '0072,0006' => { VR => 'CS', Name => 'HangingProtocolLevel' }, '0072,0008' => { VR => 'LO', Name => 'HangingProtocolCreator' }, '0072,000A' => { VR => 'DT', Name => 'HangingProtocolCreationDateTime' }, '0072,000C' => { VR => 'SQ', Name => 'HangingProtocolDefinitionSequence' }, '0072,000E' => { VR => 'SQ', Name => 'HangingProtocolUserIDCodeSequence' }, '0072,0010' => { VR => 'LO', Name => 'HangingProtocolUserGroupName' }, '0072,0012' => { VR => 'SQ', Name => 'SourceHangingProtocolSequence' }, '0072,0014' => { VR => 'US', Name => 'NumberOfPriorsReferenced' }, '0072,0020' => { VR => 'SQ', Name => 'ImageSetsSequence' }, '0072,0022' => { VR => 'SQ', Name => 'ImageSetSelectorSequence' }, '0072,0024' => { VR => 'CS', Name => 'ImageSetSelectorUsageFlag' }, '0072,0026' => { VR => 'AT', Name => 'SelectorAttribute' }, '0072,0028' => { VR => 'US', Name => 'SelectorValueNumber' }, '0072,0030' => { VR => 'SQ', Name => 'TimeBasedImageSetsSequence' }, '0072,0032' => { VR => 'US', Name => 'ImageSetNumber' }, '0072,0034' => { VR => 'CS', Name => 'ImageSetSelectorCategory' }, '0072,0038' => { VR => 'US', Name => 'RelativeTime' }, '0072,003A' => { VR => 'CS', Name => 'RelativeTimeUnits' }, '0072,003C' => { VR => 'SS', Name => 'AbstractPriorValue' }, '0072,003E' => { VR => 'SQ', Name => 'AbstractPriorCodeSequence' }, '0072,0040' => { VR => 'LO', Name => 'ImageSetLabel' }, '0072,0050' => { VR => 'CS', Name => 'SelectorAttributeVR' }, '0072,0052' => { VR => 'AT', Name => 'SelectorSequencePointer' }, '0072,0054' => { VR => 'LO', Name => 'SelectorSeqPointerPrivateCreator' }, '0072,0056' => { VR => 'LO', Name => 'SelectorAttributePrivateCreator' }, '0072,0060' => { VR => 'AT', Name => 'SelectorATValue' }, '0072,0062' => { VR => 'CS', Name => 'SelectorCSValue' }, '0072,0064' => { VR => 'IS', Name => 'SelectorISValue' }, '0072,0066' => { VR => 'LO', Name => 'SelectorLOValue' }, '0072,0068' => { VR => 'LT', Name => 'SelectorLTValue' }, '0072,006A' => { VR => 'PN', Name => 'SelectorPNValue' }, '0072,006C' => { VR => 'SH', Name => 'SelectorSHValue' }, '0072,006E' => { VR => 'ST', Name => 'SelectorSTValue' }, '0072,0070' => { VR => 'UT', Name => 'SelectorUTValue' }, '0072,0072' => { VR => 'DS', Name => 'SelectorDSValue' }, '0072,0074' => { VR => 'FD', Name => 'SelectorFDValue' }, '0072,0076' => { VR => 'FL', Name => 'SelectorFLValue' }, '0072,0078' => { VR => 'UL', Name => 'SelectorULValue' }, '0072,007A' => { VR => 'US', Name => 'SelectorUSValue' }, '0072,007C' => { VR => 'SL', Name => 'SelectorSLValue' }, '0072,007E' => { VR => 'SS', Name => 'SelectorSSValue' }, '0072,0080' => { VR => 'SQ', Name => 'SelectorCodeSequenceValue' }, '0072,0100' => { VR => 'US', Name => 'NumberOfScreens' }, '0072,0102' => { VR => 'SQ', Name => 'NominalScreenDefinitionSequence' }, '0072,0104' => { VR => 'US', Name => 'NumberOfVerticalPixels' }, '0072,0106' => { VR => 'US', Name => 'NumberOfHorizontalPixels' }, '0072,0108' => { VR => 'FD', Name => 'DisplayEnvironmentSpatialPosition' }, '0072,010A' => { VR => 'US', Name => 'ScreenMinimumGrayscaleBitDepth' }, '0072,010C' => { VR => 'US', Name => 'ScreenMinimumColorBitDepth' }, '0072,010E' => { VR => 'US', Name => 'ApplicationMaximumRepaintTime' }, '0072,0200' => { VR => 'SQ', Name => 'DisplaySetsSequence' }, '0072,0202' => { VR => 'US', Name => 'DisplaySetNumber' }, '0072,0203' => { VR => 'LO', Name => 'DisplaySetLabel' }, '0072,0204' => { VR => 'US', Name => 'DisplaySetPresentationGroup' }, '0072,0206' => { VR => 'LO', Name => 'DisplaySetPresentationGroupDescr' }, '0072,0208' => { VR => 'CS', Name => 'PartialDataDisplayHandling' }, '0072,0210' => { VR => 'SQ', Name => 'SynchronizedScrollingSequence' }, '0072,0212' => { VR => 'US', Name => 'DisplaySetScrollingGroup' }, '0072,0214' => { VR => 'SQ', Name => 'NavigationIndicatorSequence' }, '0072,0216' => { VR => 'US', Name => 'NavigationDisplaySet' }, '0072,0218' => { VR => 'US', Name => 'ReferenceDisplaySets' }, '0072,0300' => { VR => 'SQ', Name => 'ImageBoxesSequence' }, '0072,0302' => { VR => 'US', Name => 'ImageBoxNumber' }, '0072,0304' => { VR => 'CS', Name => 'ImageBoxLayoutType' }, '0072,0306' => { VR => 'US', Name => 'ImageBoxTileHorizontalDimension' }, '0072,0308' => { VR => 'US', Name => 'ImageBoxTileVerticalDimension' }, '0072,0310' => { VR => 'CS', Name => 'ImageBoxScrollDirection' }, '0072,0312' => { VR => 'CS', Name => 'ImageBoxSmallScrollType' }, '0072,0314' => { VR => 'US', Name => 'ImageBoxSmallScrollAmount' }, '0072,0316' => { VR => 'CS', Name => 'ImageBoxLargeScrollType' }, '0072,0318' => { VR => 'US', Name => 'ImageBoxLargeScrollAmount' }, '0072,0320' => { VR => 'US', Name => 'ImageBoxOverlapPriority' }, '0072,0330' => { VR => 'FD', Name => 'CineRelativeToRealTime' }, '0072,0400' => { VR => 'SQ', Name => 'FilterOperationsSequence' }, '0072,0402' => { VR => 'CS', Name => 'FilterByCategory' }, '0072,0404' => { VR => 'CS', Name => 'FilterByAttributePresence' }, '0072,0406' => { VR => 'CS', Name => 'FilterByOperator' }, '0072,0432' => { VR => 'US', Name => 'SynchronizedImageBoxList' }, '0072,0434' => { VR => 'CS', Name => 'TypeOfSynchronization' }, '0072,0500' => { VR => 'CS', Name => 'BlendingOperationType' }, '0072,0510' => { VR => 'CS', Name => 'ReformattingOperationType' }, '0072,0512' => { VR => 'FD', Name => 'ReformattingThickness' }, '0072,0514' => { VR => 'FD', Name => 'ReformattingInterval' }, '0072,0516' => { VR => 'CS', Name => 'ReformattingOpInitialViewDir' }, '0072,0520' => { VR => 'CS', Name => 'RenderingType3D' }, '0072,0600' => { VR => 'SQ', Name => 'SortingOperationsSequence' }, '0072,0602' => { VR => 'CS', Name => 'SortByCategory' }, '0072,0604' => { VR => 'CS', Name => 'SortingDirection' }, '0072,0700' => { VR => 'CS', Name => 'DisplaySetPatientOrientation' }, '0072,0702' => { VR => 'CS', Name => 'VOIType' }, '0072,0704' => { VR => 'CS', Name => 'PseudoColorType' }, '0072,0706' => { VR => 'CS', Name => 'ShowGrayscaleInverted' }, '0072,0710' => { VR => 'CS', Name => 'ShowImageTrueSizeFlag' }, '0072,0712' => { VR => 'CS', Name => 'ShowGraphicAnnotationFlag' }, '0072,0714' => { VR => 'CS', Name => 'ShowPatientDemographicsFlag' }, '0072,0716' => { VR => 'CS', Name => 'ShowAcquisitionTechniquesFlag' }, '0072,0717' => { VR => 'CS', Name => 'DisplaySetHorizontalJustification' }, '0072,0718' => { VR => 'CS', Name => 'DisplaySetVerticalJustification' }, '0074,1000' => { VR => 'CS', Name => 'UnifiedProcedureStepState' }, '0074,1002' => { VR => 'SQ', Name => 'UPSProgressInformationSequence' }, '0074,1004' => { VR => 'DS', Name => 'UnifiedProcedureStepProgress' }, '0074,1006' => { VR => 'ST', Name => 'UnifiedProcedureStepProgressDescr' }, '0074,1008' => { VR => 'SQ', Name => 'UnifiedProcedureStepComURISeq' }, '0074,100a' => { VR => 'ST', Name => 'ContactURI' }, '0074,100c' => { VR => 'LO', Name => 'ContactDisplayName' }, '0074,1020' => { VR => 'SQ', Name => 'BeamTaskSequence' }, '0074,1022' => { VR => 'CS', Name => 'BeamTaskType' }, '0074,1024' => { VR => 'IS', Name => 'BeamOrderIndex' }, '0074,1030' => { VR => 'SQ', Name => 'DeliveryVerificationImageSequence' }, '0074,1032' => { VR => 'CS', Name => 'VerificationImageTiming' }, '0074,1034' => { VR => 'CS', Name => 'DoubleExposureFlag' }, '0074,1036' => { VR => 'CS', Name => 'DoubleExposureOrdering' }, '0074,1038' => { VR => 'DS', Name => 'DoubleExposureMeterset' }, '0074,103A' => { VR => 'DS', Name => 'DoubleExposureFieldDelta' }, '0074,1040' => { VR => 'SQ', Name => 'RelatedReferenceRTImageSequence' }, '0074,1042' => { VR => 'SQ', Name => 'GeneralMachineVerificationSequence' }, '0074,1044' => { VR => 'SQ', Name => 'ConventionalMachineVerificationSeq' }, '0074,1046' => { VR => 'SQ', Name => 'IonMachineVerificationSequence' }, '0074,1048' => { VR => 'SQ', Name => 'FailedAttributesSequence' }, '0074,104A' => { VR => 'SQ', Name => 'OverriddenAttributesSequence' }, '0074,104C' => { VR => 'SQ', Name => 'ConventionalControlPointVerifySeq' }, '0074,104E' => { VR => 'SQ', Name => 'IonControlPointVerificationSeq' }, '0074,1050' => { VR => 'SQ', Name => 'AttributeOccurrenceSequence' }, '0074,1052' => { VR => 'AT', Name => 'AttributeOccurrencePointer' }, '0074,1054' => { VR => 'UL', Name => 'AttributeItemSelector' }, '0074,1056' => { VR => 'LO', Name => 'AttributeOccurrencePrivateCreator' }, '0074,1200' => { VR => 'CS', Name => 'ScheduledProcedureStepPriority' }, '0074,1202' => { VR => 'LO', Name => 'WorklistLabel' }, '0074,1204' => { VR => 'LO', Name => 'ProcedureStepLabel' }, '0074,1210' => { VR => 'SQ', Name => 'ScheduledProcessingParametersSeq' }, '0074,1212' => { VR => 'SQ', Name => 'PerformedProcessingParametersSeq' }, '0074,1216' => { VR => 'SQ', Name => 'UPSPerformedProcedureSequence' }, '0074,1220' => { VR => 'SQ', Name => 'RelatedProcedureStepSequence' }, '0074,1222' => { VR => 'LO', Name => 'ProcedureStepRelationshipType' }, '0074,1230' => { VR => 'LO', Name => 'DeletionLock' }, '0074,1234' => { VR => 'AE', Name => 'ReceivingAE' }, '0074,1236' => { VR => 'AE', Name => 'RequestingAE' }, '0074,1238' => { VR => 'LT', Name => 'ReasonForCancellation' }, '0074,1242' => { VR => 'CS', Name => 'SCPStatus' }, '0074,1244' => { VR => 'CS', Name => 'SubscriptionListStatus' }, '0074,1246' => { VR => 'CS', Name => 'UPSListStatus' }, # storage group '0088,0130' => { VR => 'SH', Name => 'StorageMediaFileSetID' }, '0088,0140' => { VR => 'UI', Name => 'StorageMediaFileSetUID' }, '0088,0200' => { VR => 'SQ', Name => 'IconImageSequence' }, '0088,0904' => { VR => 'LO', Name => 'TopicTitle' }, '0088,0906' => { VR => 'ST', Name => 'TopicSubject' }, '0088,0910' => { VR => 'LO', Name => 'TopicAuthor' }, '0088,0912' => { VR => 'LO', Name => 'TopicKeywords' }, '0100,0410' => { VR => 'CS', Name => 'SOPInstanceStatus' }, '0100,0420' => { VR => 'DT', Name => 'SOPAuthorizationDateAndTime' }, '0100,0424' => { VR => 'LT', Name => 'SOPAuthorizationComment' }, '0100,0426' => { VR => 'LO', Name => 'AuthorizationEquipmentCertNumber' }, '0400,0005' => { VR => 'US', Name => 'MACIDNumber' }, '0400,0010' => { VR => 'UI', Name => 'MACCalculationTransferSyntaxUID' }, '0400,0015' => { VR => 'CS', Name => 'MACAlgorithm' }, '0400,0020' => { VR => 'AT', Name => 'DataElementsSigned' }, '0400,0100' => { VR => 'UI', Name => 'DigitalSignatureUID' }, '0400,0105' => { VR => 'DT', Name => 'DigitalSignatureDateTime' }, '0400,0110' => { VR => 'CS', Name => 'CertificateType' }, '0400,0115' => { VR => 'OB', Name => 'CertificateOfSigner' }, '0400,0120' => { VR => 'OB', Name => 'Signature' }, '0400,0305' => { VR => 'CS', Name => 'CertifiedTimestampType' }, '0400,0310' => { VR => 'OB', Name => 'CertifiedTimestamp' }, '0400,0401' => { VR => 'SQ', Name => 'DigitalSignaturePurposeCodeSeq' }, '0400,0402' => { VR => 'SQ', Name => 'ReferencedDigitalSignatureSeq' }, '0400,0403' => { VR => 'SQ', Name => 'ReferencedSOPInstanceMACSeq' }, '0400,0404' => { VR => 'OB', Name => 'MAC' }, '0400,0500' => { VR => 'SQ', Name => 'EncryptedAttributesSequence' }, '0400,0510' => { VR => 'UI', Name => 'EncryptedContentTransferSyntaxUID' }, '0400,0520' => { VR => 'OB', Name => 'EncryptedContent' }, '0400,0550' => { VR => 'SQ', Name => 'ModifiedAttributesSequence' }, '0400,0561' => { VR => 'SQ', Name => 'OriginalAttributesSequence' }, '0400,0562' => { VR => 'DT', Name => 'AttributeModificationDateTime' }, '0400,0563' => { VR => 'LO', Name => 'ModifyingSystem' }, '0400,0564' => { VR => 'LO', Name => 'SourceOfPreviousValues' }, '0400,0565' => { VR => 'CS', Name => 'ReasonForTheAttributeModification' }, '1000,xxx0' => { VR => 'US', Name => 'EscapeTriplet' }, '1000,xxx1' => { VR => 'US', Name => 'RunLengthTriplet' }, '1000,xxx2' => { VR => 'US', Name => 'HuffmanTableSize' }, '1000,xxx3' => { VR => 'US', Name => 'HuffmanTableTriplet' }, '1000,xxx4' => { VR => 'US', Name => 'ShiftTableSize' }, '1000,xxx5' => { VR => 'US', Name => 'ShiftTableTriplet' }, '1010,xxxx' => { VR => 'US', Name => 'ZonalMap' }, '2000,0010' => { VR => 'IS', Name => 'NumberOfCopies' }, '2000,001E' => { VR => 'SQ', Name => 'PrinterConfigurationSequence' }, '2000,0020' => { VR => 'CS', Name => 'PrintPriority' }, '2000,0030' => { VR => 'CS', Name => 'MediumType' }, '2000,0040' => { VR => 'CS', Name => 'FilmDestination' }, '2000,0050' => { VR => 'LO', Name => 'FilmSessionLabel' }, '2000,0060' => { VR => 'IS', Name => 'MemoryAllocation' }, '2000,0061' => { VR => 'IS', Name => 'MaximumMemoryAllocation' }, '2000,0062' => { VR => 'CS', Name => 'ColorImagePrintingFlag' }, '2000,0063' => { VR => 'CS', Name => 'CollationFlag' }, '2000,0065' => { VR => 'CS', Name => 'AnnotationFlag' }, '2000,0067' => { VR => 'CS', Name => 'ImageOverlayFlag' }, '2000,0069' => { VR => 'CS', Name => 'PresentationLUTFlag' }, '2000,006A' => { VR => 'CS', Name => 'ImageBoxPresentationLUTFlag' }, '2000,00A0' => { VR => 'US', Name => 'MemoryBitDepth' }, '2000,00A1' => { VR => 'US', Name => 'PrintingBitDepth' }, '2000,00A2' => { VR => 'SQ', Name => 'MediaInstalledSequence' }, '2000,00A4' => { VR => 'SQ', Name => 'OtherMediaAvailableSequence' }, '2000,00A8' => { VR => 'SQ', Name => 'SupportedImageDisplayFormatSeq' }, '2000,0500' => { VR => 'SQ', Name => 'ReferencedFilmBoxSequence' }, '2000,0510' => { VR => 'SQ', Name => 'ReferencedStoredPrintSequence' }, # film box group '2010,0010' => { VR => 'ST', Name => 'ImageDisplayFormat' }, '2010,0030' => { VR => 'CS', Name => 'AnnotationDisplayFormatID' }, '2010,0040' => { VR => 'CS', Name => 'FilmOrientation' }, '2010,0050' => { VR => 'CS', Name => 'FilmSizeID' }, '2010,0052' => { VR => 'CS', Name => 'PrinterResolutionID' }, '2010,0054' => { VR => 'CS', Name => 'DefaultPrinterResolutionID' }, '2010,0060' => { VR => 'CS', Name => 'MagnificationType' }, '2010,0080' => { VR => 'CS', Name => 'SmoothingType' }, '2010,00A6' => { VR => 'CS', Name => 'DefaultMagnificationType' }, '2010,00A7' => { VR => 'CS', Name => 'OtherMagnificationTypesAvailable' }, '2010,00A8' => { VR => 'CS', Name => 'DefaultSmoothingType' }, '2010,00A9' => { VR => 'CS', Name => 'OtherSmoothingTypesAvailable' }, '2010,0100' => { VR => 'CS', Name => 'BorderDensity' }, '2010,0110' => { VR => 'CS', Name => 'EmptyImageDensity' }, '2010,0120' => { VR => 'US', Name => 'MinDensity' }, '2010,0130' => { VR => 'US', Name => 'MaxDensity' }, '2010,0140' => { VR => 'CS', Name => 'Trim' }, '2010,0150' => { VR => 'ST', Name => 'ConfigurationInformation' }, '2010,0152' => { VR => 'LT', Name => 'ConfigurationInformationDescr' }, '2010,0154' => { VR => 'IS', Name => 'MaximumCollatedFilms' }, '2010,015E' => { VR => 'US', Name => 'Illumination' }, '2010,0160' => { VR => 'US', Name => 'ReflectedAmbientLight' }, '2010,0376' => { VR => 'DS', Name => 'PrinterPixelSpacing' }, '2010,0500' => { VR => 'SQ', Name => 'ReferencedFilmSessionSequence' }, '2010,0510' => { VR => 'SQ', Name => 'ReferencedImageBoxSequence' }, '2010,0520' => { VR => 'SQ', Name => 'ReferencedBasicAnnotationBoxSeq' }, # image box group '2020,0010' => { VR => 'US', Name => 'ImageBoxPosition' }, '2020,0020' => { VR => 'CS', Name => 'Polarity' }, '2020,0030' => { VR => 'DS', Name => 'RequestedImageSize' }, '2020,0040' => { VR => 'CS', Name => 'RequestedDecimate-CropBehavior' }, '2020,0050' => { VR => 'CS', Name => 'RequestedResolutionID' }, '2020,00A0' => { VR => 'CS', Name => 'RequestedImageSizeFlag' }, '2020,00A2' => { VR => 'CS', Name => 'DecimateCropResult' }, '2020,0110' => { VR => 'SQ', Name => 'BasicGrayscaleImageSequence' }, '2020,0111' => { VR => 'SQ', Name => 'BasicColorImageSequence' }, '2020,0130' => { VR => 'SQ', Name => 'ReferencedImageOverlayBoxSequence' }, '2020,0140' => { VR => 'SQ', Name => 'ReferencedVOILUTBoxSequence' }, # annotation group '2030,0010' => { VR => 'US', Name => 'AnnotationPosition' }, '2030,0020' => { VR => 'LO', Name => 'TextString' }, # overlay box group '2040,0010' => { VR => 'SQ', Name => 'ReferencedOverlayPlaneSequence' }, '2040,0011' => { VR => 'US', Name => 'ReferencedOverlayPlaneGroups' }, '2040,0020' => { VR => 'SQ', Name => 'OverlayPixelDataSequence' }, '2040,0060' => { VR => 'CS', Name => 'OverlayMagnificationType' }, '2040,0070' => { VR => 'CS', Name => 'OverlaySmoothingType' }, '2040,0072' => { VR => 'CS', Name => 'OverlayOrImageMagnification' }, '2040,0074' => { VR => 'US', Name => 'MagnifyToNumberOfColumns' }, '2040,0080' => { VR => 'CS', Name => 'OverlayForegroundDensity' }, '2040,0082' => { VR => 'CS', Name => 'OverlayBackgroundDensity' }, '2040,0090' => { VR => 'CS', Name => 'OverlayMode' }, '2040,0100' => { VR => 'CS', Name => 'ThresholdDensity' }, '2040,0500' => { VR => 'SQ', Name => 'ReferencedImageBoxSequence' }, '2050,0010' => { VR => 'SQ', Name => 'PresentationLUTSequence' }, '2050,0020' => { VR => 'CS', Name => 'PresentationLUTShape' }, '2050,0500' => { VR => 'SQ', Name => 'ReferencedPresentationLUTSequence' }, '2100,0010' => { VR => 'SH', Name => 'PrintJobID' }, '2100,0020' => { VR => 'CS', Name => 'ExecutionStatus' }, '2100,0030' => { VR => 'CS', Name => 'ExecutionStatusInfo' }, '2100,0040' => { VR => 'DA', Name => 'CreationDate' }, '2100,0050' => { VR => 'TM', Name => 'CreationTime' }, '2100,0070' => { VR => 'AE', Name => 'Originator' }, '2100,0140' => { VR => 'AE', Name => 'DestinationAE' }, '2100,0160' => { VR => 'SH', Name => 'OwnerID' }, '2100,0170' => { VR => 'IS', Name => 'NumberOfFilms' }, '2100,0500' => { VR => 'SQ', Name => 'ReferencedPrintJobSequence' }, # printer group '2110,0010' => { VR => 'CS', Name => 'PrinterStatus' }, '2110,0020' => { VR => 'CS', Name => 'PrinterStatusInfo' }, '2110,0030' => { VR => 'LO', Name => 'PrinterName' }, '2110,0099' => { VR => 'SH', Name => 'PrintQueueID' }, '2120,0010' => { VR => 'CS', Name => 'QueueStatus' }, # print job group '2120,0050' => { VR => 'SQ', Name => 'PrintJobDescriptionSequence' }, '2120,0070' => { VR => 'SQ', Name => 'ReferencedPrintJobSequence' }, '2130,0010' => { VR => 'SQ', Name => 'PrintManagementCapabilitiesSeq' }, '2130,0015' => { VR => 'SQ', Name => 'PrinterCharacteristicsSequence' }, '2130,0030' => { VR => 'SQ', Name => 'FilmBoxContentSequence' }, '2130,0040' => { VR => 'SQ', Name => 'ImageBoxContentSequence' }, '2130,0050' => { VR => 'SQ', Name => 'AnnotationContentSequence' }, '2130,0060' => { VR => 'SQ', Name => 'ImageOverlayBoxContentSequence' }, '2130,0080' => { VR => 'SQ', Name => 'PresentationLUTContentSequence' }, '2130,00A0' => { VR => 'SQ', Name => 'ProposedStudySequence' }, '2130,00C0' => { VR => 'SQ', Name => 'OriginalImageSequence' }, '2200,0001' => { VR => 'CS', Name => 'LabelFromInfoExtractedFromInstance' }, '2200,0002' => { VR => 'UT', Name => 'LabelText' }, '2200,0003' => { VR => 'CS', Name => 'LabelStyleSelection' }, '2200,0004' => { VR => 'LT', Name => 'MediaDisposition' }, '2200,0005' => { VR => 'LT', Name => 'BarcodeValue' }, '2200,0006' => { VR => 'CS', Name => 'BarcodeSymbology' }, '2200,0007' => { VR => 'CS', Name => 'AllowMediaSplitting' }, '2200,0008' => { VR => 'CS', Name => 'IncludeNonDICOMObjects' }, '2200,0009' => { VR => 'CS', Name => 'IncludeDisplayApplication' }, '2200,000A' => { VR => 'CS', Name => 'SaveCompInstancesAfterMediaCreate' }, '2200,000B' => { VR => 'US', Name => 'TotalNumberMediaPiecesCreated' }, '2200,000C' => { VR => 'LO', Name => 'RequestedMediaApplicationProfile' }, '2200,000D' => { VR => 'SQ', Name => 'ReferencedStorageMediaSequence' }, '2200,000E' => { VR => 'AT', Name => 'FailureAttributes' }, '2200,000F' => { VR => 'CS', Name => 'AllowLossyCompression' }, '2200,0020' => { VR => 'CS', Name => 'RequestPriority' }, '3002,0002' => { VR => 'SH', Name => 'RTImageLabel' }, '3002,0003' => { VR => 'LO', Name => 'RTImageName' }, '3002,0004' => { VR => 'ST', Name => 'RTImageDescription' }, '3002,000A' => { VR => 'CS', Name => 'ReportedValuesOrigin' }, '3002,000C' => { VR => 'CS', Name => 'RTImagePlane' }, '3002,000D' => { VR => 'DS', Name => 'XRayImageReceptorTranslation' }, '3002,000E' => { VR => 'DS', Name => 'XRayImageReceptorAngle' }, '3002,0010' => { VR => 'DS', Name => 'RTImageOrientation' }, '3002,0011' => { VR => 'DS', Name => 'ImagePlanePixelSpacing' }, '3002,0012' => { VR => 'DS', Name => 'RTImagePosition' }, '3002,0020' => { VR => 'SH', Name => 'RadiationMachineName' }, '3002,0022' => { VR => 'DS', Name => 'RadiationMachineSAD' }, '3002,0024' => { VR => 'DS', Name => 'RadiationMachineSSD' }, '3002,0026' => { VR => 'DS', Name => 'RTImageSID' }, '3002,0028' => { VR => 'DS', Name => 'SourceToReferenceObjectDistance' }, '3002,0029' => { VR => 'IS', Name => 'FractionNumber' }, '3002,0030' => { VR => 'SQ', Name => 'ExposureSequence' }, '3002,0032' => { VR => 'DS', Name => 'MetersetExposure' }, '3002,0034' => { VR => 'DS', Name => 'DiaphragmPosition' }, '3002,0040' => { VR => 'SQ', Name => 'FluenceMapSequence' }, '3002,0041' => { VR => 'CS', Name => 'FluenceDataSource' }, '3002,0042' => { VR => 'DS', Name => 'FluenceDataScale' }, '3002,0051' => { VR => 'CS', Name => 'FluenceMode' }, '3002,0052' => { VR => 'SH', Name => 'FluenceModeID' }, '3004,0001' => { VR => 'CS', Name => 'DVHType' }, '3004,0002' => { VR => 'CS', Name => 'DoseUnits' }, '3004,0004' => { VR => 'CS', Name => 'DoseType' }, '3004,0006' => { VR => 'LO', Name => 'DoseComment' }, '3004,0008' => { VR => 'DS', Name => 'NormalizationPoint' }, '3004,000A' => { VR => 'CS', Name => 'DoseSummationType' }, '3004,000C' => { VR => 'DS', Name => 'GridFrameOffsetVector' }, '3004,000E' => { VR => 'DS', Name => 'DoseGridScaling' }, '3004,0010' => { VR => 'SQ', Name => 'RTDoseROISequence' }, '3004,0012' => { VR => 'DS', Name => 'DoseValue' }, '3004,0014' => { VR => 'CS', Name => 'TissueHeterogeneityCorrection' }, '3004,0040' => { VR => 'DS', Name => 'DVHNormalizationPoint' }, '3004,0042' => { VR => 'DS', Name => 'DVHNormalizationDoseValue' }, '3004,0050' => { VR => 'SQ', Name => 'DVHSequence' }, '3004,0052' => { VR => 'DS', Name => 'DVHDoseScaling' }, '3004,0054' => { VR => 'CS', Name => 'DVHVolumeUnits' }, '3004,0056' => { VR => 'IS', Name => 'DVHNumberOfBins' }, '3004,0058' => { VR => 'DS', Name => 'DVHData' }, '3004,0060' => { VR => 'SQ', Name => 'DVHReferencedROISequence' }, '3004,0062' => { VR => 'CS', Name => 'DVHROIContributionType' }, '3004,0070' => { VR => 'DS', Name => 'DVHMinimumDose' }, '3004,0072' => { VR => 'DS', Name => 'DVHMaximumDose' }, '3004,0074' => { VR => 'DS', Name => 'DVHMeanDose' }, '3006,0002' => { VR => 'SH', Name => 'StructureSetLabel' }, '3006,0004' => { VR => 'LO', Name => 'StructureSetName' }, '3006,0006' => { VR => 'ST', Name => 'StructureSetDescription' }, '3006,0008' => { VR => 'DA', Name => 'StructureSetDate' }, '3006,0009' => { VR => 'TM', Name => 'StructureSetTime' }, '3006,0010' => { VR => 'SQ', Name => 'ReferencedFrameOfReferenceSequence' }, '3006,0012' => { VR => 'SQ', Name => 'RTReferencedStudySequence' }, '3006,0014' => { VR => 'SQ', Name => 'RTReferencedSeriesSequence' }, '3006,0016' => { VR => 'SQ', Name => 'ContourImageSequence' }, '3006,0020' => { VR => 'SQ', Name => 'StructureSetROISequence' }, '3006,0022' => { VR => 'IS', Name => 'ROINumber' }, '3006,0024' => { VR => 'UI', Name => 'ReferencedFrameOfReferenceUID' }, '3006,0026' => { VR => 'LO', Name => 'ROIName' }, '3006,0028' => { VR => 'ST', Name => 'ROIDescription' }, '3006,002A' => { VR => 'IS', Name => 'ROIDisplayColor' }, '3006,002C' => { VR => 'DS', Name => 'ROIVolume' }, '3006,0030' => { VR => 'SQ', Name => 'RTRelatedROISequence' }, '3006,0033' => { VR => 'CS', Name => 'RTROIRelationship' }, '3006,0036' => { VR => 'CS', Name => 'ROIGenerationAlgorithm' }, '3006,0038' => { VR => 'LO', Name => 'ROIGenerationDescription' }, '3006,0039' => { VR => 'SQ', Name => 'ROIContourSequence' }, '3006,0040' => { VR => 'SQ', Name => 'ContourSequence' }, '3006,0042' => { VR => 'CS', Name => 'ContourGeometricType' }, '3006,0044' => { VR => 'DS', Name => 'ContourSlabThickness' }, '3006,0045' => { VR => 'DS', Name => 'ContourOffsetVector' }, '3006,0046' => { VR => 'IS', Name => 'NumberOfContourPoints' }, '3006,0048' => { VR => 'IS', Name => 'ContourNumber' }, '3006,0049' => { VR => 'IS', Name => 'AttachedContours' }, '3006,0050' => { VR => 'DS', Name => 'ContourData' }, '3006,0080' => { VR => 'SQ', Name => 'RTROIObservationsSequence' }, '3006,0082' => { VR => 'IS', Name => 'ObservationNumber' }, '3006,0084' => { VR => 'IS', Name => 'ReferencedROINumber' }, '3006,0085' => { VR => 'SH', Name => 'ROIObservationLabel' }, '3006,0086' => { VR => 'SQ', Name => 'RTROIIdentificationCodeSequence' }, '3006,0088' => { VR => 'ST', Name => 'ROIObservationDescription' }, '3006,00A0' => { VR => 'SQ', Name => 'RelatedRTROIObservationsSequence' }, '3006,00A4' => { VR => 'CS', Name => 'RTROIInterpretedType' }, '3006,00A6' => { VR => 'PN', Name => 'ROIInterpreter' }, '3006,00B0' => { VR => 'SQ', Name => 'ROIPhysicalPropertiesSequence' }, '3006,00B2' => { VR => 'CS', Name => 'ROIPhysicalProperty' }, '3006,00B4' => { VR => 'DS', Name => 'ROIPhysicalPropertyValue' }, '3006,00B6' => { VR => 'SQ', Name => 'ROIElementalCompositionSequence' }, '3006,00B7' => { VR => 'US', Name => 'ROIElementalCompAtomicNumber' }, '3006,00B8' => { VR => 'FL', Name => 'ROIElementalCompAtomicMassFraction' }, '3006,00C0' => { VR => 'SQ', Name => 'FrameOfReferenceRelationshipSeq' }, '3006,00C2' => { VR => 'UI', Name => 'RelatedFrameOfReferenceUID' }, '3006,00C4' => { VR => 'CS', Name => 'FrameOfReferenceTransformType' }, '3006,00C6' => { VR => 'DS', Name => 'FrameOfReferenceTransformMatrix' }, '3006,00C8' => { VR => 'LO', Name => 'FrameOfReferenceTransformComment' }, '3008,0010' => { VR => 'SQ', Name => 'MeasuredDoseReferenceSequence' }, '3008,0012' => { VR => 'ST', Name => 'MeasuredDoseDescription' }, '3008,0014' => { VR => 'CS', Name => 'MeasuredDoseType' }, '3008,0016' => { VR => 'DS', Name => 'MeasuredDoseValue' }, '3008,0020' => { VR => 'SQ', Name => 'TreatmentSessionBeamSequence' }, '3008,0021' => { VR => 'SQ', Name => 'TreatmentSessionIonBeamSequence' }, '3008,0022' => { VR => 'IS', Name => 'CurrentFractionNumber' }, '3008,0024' => { VR => 'DA', Name => 'TreatmentControlPointDate' }, '3008,0025' => { VR => 'TM', Name => 'TreatmentControlPointTime' }, '3008,002A' => { VR => 'CS', Name => 'TreatmentTerminationStatus' }, '3008,002B' => { VR => 'SH', Name => 'TreatmentTerminationCode' }, '3008,002C' => { VR => 'CS', Name => 'TreatmentVerificationStatus' }, '3008,0030' => { VR => 'SQ', Name => 'ReferencedTreatmentRecordSequence' }, '3008,0032' => { VR => 'DS', Name => 'SpecifiedPrimaryMeterset' }, '3008,0033' => { VR => 'DS', Name => 'SpecifiedSecondaryMeterset' }, '3008,0036' => { VR => 'DS', Name => 'DeliveredPrimaryMeterset' }, '3008,0037' => { VR => 'DS', Name => 'DeliveredSecondaryMeterset' }, '3008,003A' => { VR => 'DS', Name => 'SpecifiedTreatmentTime' }, '3008,003B' => { VR => 'DS', Name => 'DeliveredTreatmentTime' }, '3008,0040' => { VR => 'SQ', Name => 'ControlPointDeliverySequence' }, '3008,0041' => { VR => 'SQ', Name => 'IonControlPointDeliverySequence' }, '3008,0042' => { VR => 'DS', Name => 'SpecifiedMeterset' }, '3008,0044' => { VR => 'DS', Name => 'DeliveredMeterset' }, '3008,0045' => { VR => 'FL', Name => 'MetersetRateSet' }, '3008,0046' => { VR => 'FL', Name => 'MetersetRateDelivered' }, '3008,0047' => { VR => 'FL', Name => 'ScanSpotMetersetsDelivered' }, '3008,0048' => { VR => 'DS', Name => 'DoseRateDelivered' }, '3008,0050' => { VR => 'SQ', Name => 'TreatmentSummaryCalcDoseRefSeq' }, '3008,0052' => { VR => 'DS', Name => 'CumulativeDoseToDoseReference' }, '3008,0054' => { VR => 'DA', Name => 'FirstTreatmentDate' }, '3008,0056' => { VR => 'DA', Name => 'MostRecentTreatmentDate' }, '3008,005A' => { VR => 'IS', Name => 'NumberOfFractionsDelivered' }, '3008,0060' => { VR => 'SQ', Name => 'OverrideSequence' }, '3008,0061' => { VR => 'AT', Name => 'ParameterSequencePointer' }, '3008,0062' => { VR => 'AT', Name => 'OverrideParameterPointer' }, '3008,0063' => { VR => 'IS', Name => 'ParameterItemIndex' }, '3008,0064' => { VR => 'IS', Name => 'MeasuredDoseReferenceNumber' }, '3008,0065' => { VR => 'AT', Name => 'ParameterPointer' }, '3008,0066' => { VR => 'ST', Name => 'OverrideReason' }, '3008,0068' => { VR => 'SQ', Name => 'CorrectedParameterSequence' }, '3008,006A' => { VR => 'FL', Name => 'CorrectionValue' }, '3008,0070' => { VR => 'SQ', Name => 'CalculatedDoseReferenceSequence' }, '3008,0072' => { VR => 'IS', Name => 'CalculatedDoseReferenceNumber' }, '3008,0074' => { VR => 'ST', Name => 'CalculatedDoseReferenceDescription' }, '3008,0076' => { VR => 'DS', Name => 'CalculatedDoseReferenceDoseValue' }, '3008,0078' => { VR => 'DS', Name => 'StartMeterset' }, '3008,007A' => { VR => 'DS', Name => 'EndMeterset' }, '3008,0080' => { VR => 'SQ', Name => 'ReferencedMeasuredDoseReferenceSeq' }, '3008,0082' => { VR => 'IS', Name => 'ReferencedMeasuredDoseReferenceNum' }, '3008,0090' => { VR => 'SQ', Name => 'ReferencedCalculatedDoseRefSeq' }, '3008,0092' => { VR => 'IS', Name => 'ReferencedCalculatedDoseRefNumber' }, '3008,00A0' => { VR => 'SQ', Name => 'BeamLimitingDeviceLeafPairsSeq' }, '3008,00B0' => { VR => 'SQ', Name => 'RecordedWedgeSequence' }, '3008,00C0' => { VR => 'SQ', Name => 'RecordedCompensatorSequence' }, '3008,00D0' => { VR => 'SQ', Name => 'RecordedBlockSequence' }, '3008,00E0' => { VR => 'SQ', Name => 'TreatmentSummaryMeasuredDoseRefSeq' }, '3008,00F0' => { VR => 'SQ', Name => 'RecordedSnoutSequence' }, '3008,00F2' => { VR => 'SQ', Name => 'RecordedRangeShifterSequence' }, '3008,00F4' => { VR => 'SQ', Name => 'RecordedLateralSpreadingDeviceSeq' }, '3008,00F6' => { VR => 'SQ', Name => 'RecordedRangeModulatorSequence' }, '3008,0100' => { VR => 'SQ', Name => 'RecordedSourceSequence' }, '3008,0105' => { VR => 'LO', Name => 'SourceSerialNumber' }, '3008,0110' => { VR => 'SQ', Name => 'TreatmentSessionAppSetupSeq' }, '3008,0116' => { VR => 'CS', Name => 'ApplicationSetupCheck' }, '3008,0120' => { VR => 'SQ', Name => 'RecordedBrachyAccessoryDeviceSeq' }, '3008,0122' => { VR => 'IS', Name => 'ReferencedBrachyAccessoryDeviceNum' }, '3008,0130' => { VR => 'SQ', Name => 'RecordedChannelSequence' }, '3008,0132' => { VR => 'DS', Name => 'SpecifiedChannelTotalTime' }, '3008,0134' => { VR => 'DS', Name => 'DeliveredChannelTotalTime' }, '3008,0136' => { VR => 'IS', Name => 'SpecifiedNumberOfPulses' }, '3008,0138' => { VR => 'IS', Name => 'DeliveredNumberOfPulses' }, '3008,013A' => { VR => 'DS', Name => 'SpecifiedPulseRepetitionInterval' }, '3008,013C' => { VR => 'DS', Name => 'DeliveredPulseRepetitionInterval' }, '3008,0140' => { VR => 'SQ', Name => 'RecordedSourceApplicatorSequence' }, '3008,0142' => { VR => 'IS', Name => 'ReferencedSourceApplicatorNumber' }, '3008,0150' => { VR => 'SQ', Name => 'RecordedChannelShieldSequence' }, '3008,0152' => { VR => 'IS', Name => 'ReferencedChannelShieldNumber' }, '3008,0160' => { VR => 'SQ', Name => 'BrachyControlPointDeliveredSeq' }, '3008,0162' => { VR => 'DA', Name => 'SafePositionExitDate' }, '3008,0164' => { VR => 'TM', Name => 'SafePositionExitTime' }, '3008,0166' => { VR => 'DA', Name => 'SafePositionReturnDate' }, '3008,0168' => { VR => 'TM', Name => 'SafePositionReturnTime' }, '3008,0200' => { VR => 'CS', Name => 'CurrentTreatmentStatus' }, '3008,0202' => { VR => 'ST', Name => 'TreatmentStatusComment' }, '3008,0220' => { VR => 'SQ', Name => 'FractionGroupSummarySequence' }, '3008,0223' => { VR => 'IS', Name => 'ReferencedFractionNumber' }, '3008,0224' => { VR => 'CS', Name => 'FractionGroupType' }, '3008,0230' => { VR => 'CS', Name => 'BeamStopperPosition' }, '3008,0240' => { VR => 'SQ', Name => 'FractionStatusSummarySequence' }, '3008,0250' => { VR => 'DA', Name => 'TreatmentDate' }, '3008,0251' => { VR => 'TM', Name => 'TreatmentTime' }, '300A,0002' => { VR => 'SH', Name => 'RTPlanLabel' }, '300A,0003' => { VR => 'LO', Name => 'RTPlanName' }, '300A,0004' => { VR => 'ST', Name => 'RTPlanDescription' }, '300A,0006' => { VR => 'DA', Name => 'RTPlanDate' }, '300A,0007' => { VR => 'TM', Name => 'RTPlanTime' }, '300A,0009' => { VR => 'LO', Name => 'TreatmentProtocols' }, '300A,000A' => { VR => 'CS', Name => 'PlanIntent' }, '300A,000B' => { VR => 'LO', Name => 'TreatmentSites' }, '300A,000C' => { VR => 'CS', Name => 'RTPlanGeometry' }, '300A,000E' => { VR => 'ST', Name => 'PrescriptionDescription' }, '300A,0010' => { VR => 'SQ', Name => 'DoseReferenceSequence' }, '300A,0012' => { VR => 'IS', Name => 'DoseReferenceNumber' }, '300A,0013' => { VR => 'UI', Name => 'DoseReferenceUID' }, '300A,0014' => { VR => 'CS', Name => 'DoseReferenceStructureType' }, '300A,0015' => { VR => 'CS', Name => 'NominalBeamEnergyUnit' }, '300A,0016' => { VR => 'LO', Name => 'DoseReferenceDescription' }, '300A,0018' => { VR => 'DS', Name => 'DoseReferencePointCoordinates' }, '300A,001A' => { VR => 'DS', Name => 'NominalPriorDose' }, '300A,0020' => { VR => 'CS', Name => 'DoseReferenceType' }, '300A,0021' => { VR => 'DS', Name => 'ConstraintWeight' }, '300A,0022' => { VR => 'DS', Name => 'DeliveryWarningDose' }, '300A,0023' => { VR => 'DS', Name => 'DeliveryMaximumDose' }, '300A,0025' => { VR => 'DS', Name => 'TargetMinimumDose' }, '300A,0026' => { VR => 'DS', Name => 'TargetPrescriptionDose' }, '300A,0027' => { VR => 'DS', Name => 'TargetMaximumDose' }, '300A,0028' => { VR => 'DS', Name => 'TargetUnderdoseVolumeFraction' }, '300A,002A' => { VR => 'DS', Name => 'OrganAtRiskFullVolumeDose' }, '300A,002B' => { VR => 'DS', Name => 'OrganAtRiskLimitDose' }, '300A,002C' => { VR => 'DS', Name => 'OrganAtRiskMaximumDose' }, '300A,002D' => { VR => 'DS', Name => 'OrganAtRiskOverdoseVolumeFraction' }, '300A,0040' => { VR => 'SQ', Name => 'ToleranceTableSequence' }, '300A,0042' => { VR => 'IS', Name => 'ToleranceTableNumber' }, '300A,0043' => { VR => 'SH', Name => 'ToleranceTableLabel' }, '300A,0044' => { VR => 'DS', Name => 'GantryAngleTolerance' }, '300A,0046' => { VR => 'DS', Name => 'BeamLimitingDeviceAngleTolerance' }, '300A,0048' => { VR => 'SQ', Name => 'BeamLimitingDeviceToleranceSeq' }, '300A,004A' => { VR => 'DS', Name => 'BeamLimitingDevicePositionTol' }, '300A,004B' => { VR => 'FL', Name => 'SnoutPositionTolerance' }, '300A,004C' => { VR => 'DS', Name => 'PatientSupportAngleTolerance' }, '300A,004E' => { VR => 'DS', Name => 'TableTopEccentricAngleTolerance' }, '300A,004F' => { VR => 'FL', Name => 'TableTopPitchAngleTolerance' }, '300A,0050' => { VR => 'FL', Name => 'TableTopRollAngleTolerance' }, '300A,0051' => { VR => 'DS', Name => 'TableTopVerticalPositionTolerance' }, '300A,0052' => { VR => 'DS', Name => 'TableTopLongitudinalPositionTol' }, '300A,0053' => { VR => 'DS', Name => 'TableTopLateralPositionTolerance' }, '300A,0055' => { VR => 'CS', Name => 'RTPlanRelationship' }, '300A,0070' => { VR => 'SQ', Name => 'FractionGroupSequence' }, '300A,0071' => { VR => 'IS', Name => 'FractionGroupNumber' }, '300A,0072' => { VR => 'LO', Name => 'FractionGroupDescription' }, '300A,0078' => { VR => 'IS', Name => 'NumberOfFractionsPlanned' }, '300A,0079' => { VR => 'IS', Name => 'NumberFractionPatternDigitsPerDay' }, '300A,007A' => { VR => 'IS', Name => 'RepeatFractionCycleLength' }, '300A,007B' => { VR => 'LT', Name => 'FractionPattern' }, '300A,0080' => { VR => 'IS', Name => 'NumberOfBeams' }, '300A,0082' => { VR => 'DS', Name => 'BeamDoseSpecificationPoint' }, '300A,0084' => { VR => 'DS', Name => 'BeamDose' }, '300A,0086' => { VR => 'DS', Name => 'BeamMeterset' }, '300A,0088' => { VR => 'FL', Name => 'BeamDosePointDepth' }, '300A,0089' => { VR => 'FL', Name => 'BeamDosePointEquivalentDepth' }, '300A,008A' => { VR => 'FL', Name => 'BeamDosePointSSD' }, '300A,00A0' => { VR => 'IS', Name => 'NumberOfBrachyApplicationSetups' }, '300A,00A2' => { VR => 'DS', Name => 'BrachyAppSetupDoseSpecPoint' }, '300A,00A4' => { VR => 'DS', Name => 'BrachyApplicationSetupDose' }, '300A,00B0' => { VR => 'SQ', Name => 'BeamSequence' }, '300A,00B2' => { VR => 'SH', Name => 'TreatmentMachineName' }, '300A,00B3' => { VR => 'CS', Name => 'PrimaryDosimeterUnit' }, '300A,00B4' => { VR => 'DS', Name => 'SourceAxisDistance' }, '300A,00B6' => { VR => 'SQ', Name => 'BeamLimitingDeviceSequence' }, '300A,00B8' => { VR => 'CS', Name => 'RTBeamLimitingDeviceType' }, '300A,00BA' => { VR => 'DS', Name => 'SourceToBeamLimitingDeviceDistance' }, '300A,00BB' => { VR => 'FL', Name => 'IsocenterToBeamLimitingDeviceDist' }, '300A,00BC' => { VR => 'IS', Name => 'NumberOfLeafJawPairs' }, '300A,00BE' => { VR => 'DS', Name => 'LeafPositionBoundaries' }, '300A,00C0' => { VR => 'IS', Name => 'BeamNumber' }, '300A,00C2' => { VR => 'LO', Name => 'BeamName' }, '300A,00C3' => { VR => 'ST', Name => 'BeamDescription' }, '300A,00C4' => { VR => 'CS', Name => 'BeamType' }, '300A,00C6' => { VR => 'CS', Name => 'RadiationType' }, '300A,00C7' => { VR => 'CS', Name => 'HighDoseTechniqueType' }, '300A,00C8' => { VR => 'IS', Name => 'ReferenceImageNumber' }, '300A,00CA' => { VR => 'SQ', Name => 'PlannedVerificationImageSequence' }, '300A,00CC' => { VR => 'LO', Name => 'ImagingDeviceSpecificAcqParams' }, '300A,00CE' => { VR => 'CS', Name => 'TreatmentDeliveryType' }, '300A,00D0' => { VR => 'IS', Name => 'NumberOfWedges' }, '300A,00D1' => { VR => 'SQ', Name => 'WedgeSequence' }, '300A,00D2' => { VR => 'IS', Name => 'WedgeNumber' }, '300A,00D3' => { VR => 'CS', Name => 'WedgeType' }, '300A,00D4' => { VR => 'SH', Name => 'WedgeID' }, '300A,00D5' => { VR => 'IS', Name => 'WedgeAngle' }, '300A,00D6' => { VR => 'DS', Name => 'WedgeFactor' }, '300A,00D7' => { VR => 'FL', Name => 'TotalWedgeTrayWaterEquivThickness' }, '300A,00D8' => { VR => 'DS', Name => 'WedgeOrientation' }, '300A,00D9' => { VR => 'FL', Name => 'IsocenterToWedgeTrayDistance' }, '300A,00DA' => { VR => 'DS', Name => 'SourceToWedgeTrayDistance' }, '300A,00DB' => { VR => 'FL', Name => 'WedgeThinEdgePosition' }, '300A,00DC' => { VR => 'SH', Name => 'BolusID' }, '300A,00DD' => { VR => 'ST', Name => 'BolusDescription' }, '300A,00E0' => { VR => 'IS', Name => 'NumberOfCompensators' }, '300A,00E1' => { VR => 'SH', Name => 'MaterialID' }, '300A,00E2' => { VR => 'DS', Name => 'TotalCompensatorTrayFactor' }, '300A,00E3' => { VR => 'SQ', Name => 'CompensatorSequence' }, '300A,00E4' => { VR => 'IS', Name => 'CompensatorNumber' }, '300A,00E5' => { VR => 'SH', Name => 'CompensatorID' }, '300A,00E6' => { VR => 'DS', Name => 'SourceToCompensatorTrayDistance' }, '300A,00E7' => { VR => 'IS', Name => 'CompensatorRows' }, '300A,00E8' => { VR => 'IS', Name => 'CompensatorColumns' }, '300A,00E9' => { VR => 'DS', Name => 'CompensatorPixelSpacing' }, '300A,00EA' => { VR => 'DS', Name => 'CompensatorPosition' }, '300A,00EB' => { VR => 'DS', Name => 'CompensatorTransmissionData' }, '300A,00EC' => { VR => 'DS', Name => 'CompensatorThicknessData' }, '300A,00ED' => { VR => 'IS', Name => 'NumberOfBoli' }, '300A,00EE' => { VR => 'CS', Name => 'CompensatorType' }, '300A,00F0' => { VR => 'IS', Name => 'NumberOfBlocks' }, '300A,00F2' => { VR => 'DS', Name => 'TotalBlockTrayFactor' }, '300A,00F3' => { VR => 'FL', Name => 'TotalBlockTrayWaterEquivThickness' }, '300A,00F4' => { VR => 'SQ', Name => 'BlockSequence' }, '300A,00F5' => { VR => 'SH', Name => 'BlockTrayID' }, '300A,00F6' => { VR => 'DS', Name => 'SourceToBlockTrayDistance' }, '300A,00F7' => { VR => 'FL', Name => 'IsocenterToBlockTrayDistance' }, '300A,00F8' => { VR => 'CS', Name => 'BlockType' }, '300A,00F9' => { VR => 'LO', Name => 'AccessoryCode' }, '300A,00FA' => { VR => 'CS', Name => 'BlockDivergence' }, '300A,00FB' => { VR => 'CS', Name => 'BlockMountingPosition' }, '300A,00FC' => { VR => 'IS', Name => 'BlockNumber' }, '300A,00FE' => { VR => 'LO', Name => 'BlockName' }, '300A,0100' => { VR => 'DS', Name => 'BlockThickness' }, '300A,0102' => { VR => 'DS', Name => 'BlockTransmission' }, '300A,0104' => { VR => 'IS', Name => 'BlockNumberOfPoints' }, '300A,0106' => { VR => 'DS', Name => 'BlockData' }, '300A,0107' => { VR => 'SQ', Name => 'ApplicatorSequence' }, '300A,0108' => { VR => 'SH', Name => 'ApplicatorID' }, '300A,0109' => { VR => 'CS', Name => 'ApplicatorType' }, '300A,010A' => { VR => 'LO', Name => 'ApplicatorDescription' }, '300A,010C' => { VR => 'DS', Name => 'CumulativeDoseReferenceCoefficient' }, '300A,010E' => { VR => 'DS', Name => 'FinalCumulativeMetersetWeight' }, '300A,0110' => { VR => 'IS', Name => 'NumberOfControlPoints' }, '300A,0111' => { VR => 'SQ', Name => 'ControlPointSequence' }, '300A,0112' => { VR => 'IS', Name => 'ControlPointIndex' }, '300A,0114' => { VR => 'DS', Name => 'NominalBeamEnergy' }, '300A,0115' => { VR => 'DS', Name => 'DoseRateSet' }, '300A,0116' => { VR => 'SQ', Name => 'WedgePositionSequence' }, '300A,0118' => { VR => 'CS', Name => 'WedgePosition' }, '300A,011A' => { VR => 'SQ', Name => 'BeamLimitingDevicePositionSequence' }, '300A,011C' => { VR => 'DS', Name => 'LeafJawPositions' }, '300A,011E' => { VR => 'DS', Name => 'GantryAngle' }, '300A,011F' => { VR => 'CS', Name => 'GantryRotationDirection' }, '300A,0120' => { VR => 'DS', Name => 'BeamLimitingDeviceAngle' }, '300A,0121' => { VR => 'CS', Name => 'BeamLimitingDeviceRotateDirection' }, '300A,0122' => { VR => 'DS', Name => 'PatientSupportAngle' }, '300A,0123' => { VR => 'CS', Name => 'PatientSupportRotationDirection' }, '300A,0124' => { VR => 'DS', Name => 'TableTopEccentricAxisDistance' }, '300A,0125' => { VR => 'DS', Name => 'TableTopEccentricAngle' }, '300A,0126' => { VR => 'CS', Name => 'TableTopEccentricRotateDirection' }, '300A,0128' => { VR => 'DS', Name => 'TableTopVerticalPosition' }, '300A,0129' => { VR => 'DS', Name => 'TableTopLongitudinalPosition' }, '300A,012A' => { VR => 'DS', Name => 'TableTopLateralPosition' }, '300A,012C' => { VR => 'DS', Name => 'IsocenterPosition' }, '300A,012E' => { VR => 'DS', Name => 'SurfaceEntryPoint' }, '300A,0130' => { VR => 'DS', Name => 'SourceToSurfaceDistance' }, '300A,0134' => { VR => 'DS', Name => 'CumulativeMetersetWeight' }, '300A,0140' => { VR => 'FL', Name => 'TableTopPitchAngle' }, '300A,0142' => { VR => 'CS', Name => 'TableTopPitchRotationDirection' }, '300A,0144' => { VR => 'FL', Name => 'TableTopRollAngle' }, '300A,0146' => { VR => 'CS', Name => 'TableTopRollRotationDirection' }, '300A,0148' => { VR => 'FL', Name => 'HeadFixationAngle' }, '300A,014A' => { VR => 'FL', Name => 'GantryPitchAngle' }, '300A,014C' => { VR => 'CS', Name => 'GantryPitchRotationDirection' }, '300A,014E' => { VR => 'FL', Name => 'GantryPitchAngleTolerance' }, '300A,0180' => { VR => 'SQ', Name => 'PatientSetupSequence' }, '300A,0182' => { VR => 'IS', Name => 'PatientSetupNumber' }, '300A,0183' => { VR => 'LO', Name => 'PatientSetupLabel' }, '300A,0184' => { VR => 'LO', Name => 'PatientAdditionalPosition' }, '300A,0190' => { VR => 'SQ', Name => 'FixationDeviceSequence' }, '300A,0192' => { VR => 'CS', Name => 'FixationDeviceType' }, '300A,0194' => { VR => 'SH', Name => 'FixationDeviceLabel' }, '300A,0196' => { VR => 'ST', Name => 'FixationDeviceDescription' }, '300A,0198' => { VR => 'SH', Name => 'FixationDevicePosition' }, '300A,0199' => { VR => 'FL', Name => 'FixationDevicePitchAngle' }, '300A,019A' => { VR => 'FL', Name => 'FixationDeviceRollAngle' }, '300A,01A0' => { VR => 'SQ', Name => 'ShieldingDeviceSequence' }, '300A,01A2' => { VR => 'CS', Name => 'ShieldingDeviceType' }, '300A,01A4' => { VR => 'SH', Name => 'ShieldingDeviceLabel' }, '300A,01A6' => { VR => 'ST', Name => 'ShieldingDeviceDescription' }, '300A,01A8' => { VR => 'SH', Name => 'ShieldingDevicePosition' }, '300A,01B0' => { VR => 'CS', Name => 'SetupTechnique' }, '300A,01B2' => { VR => 'ST', Name => 'SetupTechniqueDescription' }, '300A,01B4' => { VR => 'SQ', Name => 'SetupDeviceSequence' }, '300A,01B6' => { VR => 'CS', Name => 'SetupDeviceType' }, '300A,01B8' => { VR => 'SH', Name => 'SetupDeviceLabel' }, '300A,01BA' => { VR => 'ST', Name => 'SetupDeviceDescription' }, '300A,01BC' => { VR => 'DS', Name => 'SetupDeviceParameter' }, '300A,01D0' => { VR => 'ST', Name => 'SetupReferenceDescription' }, '300A,01D2' => { VR => 'DS', Name => 'TableTopVerticalSetupDisplacement' }, '300A,01D4' => { VR => 'DS', Name => 'TableTopLongitudinalSetupDisplace' }, '300A,01D6' => { VR => 'DS', Name => 'TableTopLateralSetupDisplacement' }, '300A,0200' => { VR => 'CS', Name => 'BrachyTreatmentTechnique' }, '300A,0202' => { VR => 'CS', Name => 'BrachyTreatmentType' }, '300A,0206' => { VR => 'SQ', Name => 'TreatmentMachineSequence' }, '300A,0210' => { VR => 'SQ', Name => 'SourceSequence' }, '300A,0212' => { VR => 'IS', Name => 'SourceNumber' }, '300A,0214' => { VR => 'CS', Name => 'SourceType' }, '300A,0216' => { VR => 'LO', Name => 'SourceManufacturer' }, '300A,0218' => { VR => 'DS', Name => 'ActiveSourceDiameter' }, '300A,021A' => { VR => 'DS', Name => 'ActiveSourceLength' }, '300A,0222' => { VR => 'DS', Name => 'SourceEncapsulationNomThickness' }, '300A,0224' => { VR => 'DS', Name => 'SourceEncapsulationNomTransmission' }, '300A,0226' => { VR => 'LO', Name => 'SourceIsotopeName' }, '300A,0228' => { VR => 'DS', Name => 'SourceIsotopeHalfLife' }, '300A,0229' => { VR => 'CS', Name => 'SourceStrengthUnits' }, '300A,022A' => { VR => 'DS', Name => 'ReferenceAirKermaRate' }, '300A,022B' => { VR => 'DS', Name => 'SourceStrength' }, '300A,022C' => { VR => 'DA', Name => 'SourceStrengthReferenceDate' }, '300A,022E' => { VR => 'TM', Name => 'SourceStrengthReferenceTime' }, '300A,0230' => { VR => 'SQ', Name => 'ApplicationSetupSequence' }, '300A,0232' => { VR => 'CS', Name => 'ApplicationSetupType' }, '300A,0234' => { VR => 'IS', Name => 'ApplicationSetupNumber' }, '300A,0236' => { VR => 'LO', Name => 'ApplicationSetupName' }, '300A,0238' => { VR => 'LO', Name => 'ApplicationSetupManufacturer' }, '300A,0240' => { VR => 'IS', Name => 'TemplateNumber' }, '300A,0242' => { VR => 'SH', Name => 'TemplateType' }, '300A,0244' => { VR => 'LO', Name => 'TemplateName' }, '300A,0250' => { VR => 'DS', Name => 'TotalReferenceAirKerma' }, '300A,0260' => { VR => 'SQ', Name => 'BrachyAccessoryDeviceSequence' }, '300A,0262' => { VR => 'IS', Name => 'BrachyAccessoryDeviceNumber' }, '300A,0263' => { VR => 'SH', Name => 'BrachyAccessoryDeviceID' }, '300A,0264' => { VR => 'CS', Name => 'BrachyAccessoryDeviceType' }, '300A,0266' => { VR => 'LO', Name => 'BrachyAccessoryDeviceName' }, '300A,026A' => { VR => 'DS', Name => 'BrachyAccessoryDeviceNomThickness' }, '300A,026C' => { VR => 'DS', Name => 'BrachyAccessoryDevNomTransmission' }, '300A,0280' => { VR => 'SQ', Name => 'ChannelSequence' }, '300A,0282' => { VR => 'IS', Name => 'ChannelNumber' }, '300A,0284' => { VR => 'DS', Name => 'ChannelLength' }, '300A,0286' => { VR => 'DS', Name => 'ChannelTotalTime' }, '300A,0288' => { VR => 'CS', Name => 'SourceMovementType' }, '300A,028A' => { VR => 'IS', Name => 'NumberOfPulses' }, '300A,028C' => { VR => 'DS', Name => 'PulseRepetitionInterval' }, '300A,0290' => { VR => 'IS', Name => 'SourceApplicatorNumber' }, '300A,0291' => { VR => 'SH', Name => 'SourceApplicatorID' }, '300A,0292' => { VR => 'CS', Name => 'SourceApplicatorType' }, '300A,0294' => { VR => 'LO', Name => 'SourceApplicatorName' }, '300A,0296' => { VR => 'DS', Name => 'SourceApplicatorLength' }, '300A,0298' => { VR => 'LO', Name => 'SourceApplicatorManufacturer' }, '300A,029C' => { VR => 'DS', Name => 'SourceApplicatorWallNomThickness' }, '300A,029E' => { VR => 'DS', Name => 'SourceApplicatorWallNomTrans' }, '300A,02A0' => { VR => 'DS', Name => 'SourceApplicatorStepSize' }, '300A,02A2' => { VR => 'IS', Name => 'TransferTubeNumber' }, '300A,02A4' => { VR => 'DS', Name => 'TransferTubeLength' }, '300A,02B0' => { VR => 'SQ', Name => 'ChannelShieldSequence' }, '300A,02B2' => { VR => 'IS', Name => 'ChannelShieldNumber' }, '300A,02B3' => { VR => 'SH', Name => 'ChannelShieldID' }, '300A,02B4' => { VR => 'LO', Name => 'ChannelShieldName' }, '300A,02B8' => { VR => 'DS', Name => 'ChannelShieldNominalThickness' }, '300A,02BA' => { VR => 'DS', Name => 'ChannelShieldNominalTransmission' }, '300A,02C8' => { VR => 'DS', Name => 'FinalCumulativeTimeWeight' }, '300A,02D0' => { VR => 'SQ', Name => 'BrachyControlPointSequence' }, '300A,02D2' => { VR => 'DS', Name => 'ControlPointRelativePosition' }, '300A,02D4' => { VR => 'DS', Name => 'ControlPoint3DPosition' }, '300A,02D6' => { VR => 'DS', Name => 'CumulativeTimeWeight' }, '300A,02E0' => { VR => 'CS', Name => 'CompensatorDivergence' }, '300A,02E1' => { VR => 'CS', Name => 'CompensatorMountingPosition' }, '300A,02E2' => { VR => 'DS', Name => 'SourceToCompensatorDistance' }, '300A,02E3' => { VR => 'FL', Name => 'TotalCompTrayWaterEquivThickness' }, '300A,02E4' => { VR => 'FL', Name => 'IsocenterToCompensatorTrayDistance' }, '300A,02E5' => { VR => 'FL', Name => 'CompensatorColumnOffset' }, '300A,02E6' => { VR => 'FL', Name => 'IsocenterToCompensatorDistances' }, '300A,02E7' => { VR => 'FL', Name => 'CompensatorRelStoppingPowerRatio' }, '300A,02E8' => { VR => 'FL', Name => 'CompensatorMillingToolDiameter' }, '300A,02EA' => { VR => 'SQ', Name => 'IonRangeCompensatorSequence' }, '300A,02EB' => { VR => 'LT', Name => 'CompensatorDescription' }, '300A,0302' => { VR => 'IS', Name => 'RadiationMassNumber' }, '300A,0304' => { VR => 'IS', Name => 'RadiationAtomicNumber' }, '300A,0306' => { VR => 'SS', Name => 'RadiationChargeState' }, '300A,0308' => { VR => 'CS', Name => 'ScanMode' }, '300A,030A' => { VR => 'FL', Name => 'VirtualSourceAxisDistances' }, '300A,030C' => { VR => 'SQ', Name => 'SnoutSequence' }, '300A,030D' => { VR => 'FL', Name => 'SnoutPosition' }, '300A,030F' => { VR => 'SH', Name => 'SnoutID' }, '300A,0312' => { VR => 'IS', Name => 'NumberOfRangeShifters' }, '300A,0314' => { VR => 'SQ', Name => 'RangeShifterSequence' }, '300A,0316' => { VR => 'IS', Name => 'RangeShifterNumber' }, '300A,0318' => { VR => 'SH', Name => 'RangeShifterID' }, '300A,0320' => { VR => 'CS', Name => 'RangeShifterType' }, '300A,0322' => { VR => 'LO', Name => 'RangeShifterDescription' }, '300A,0330' => { VR => 'IS', Name => 'NumberOfLateralSpreadingDevices' }, '300A,0332' => { VR => 'SQ', Name => 'LateralSpreadingDeviceSequence' }, '300A,0334' => { VR => 'IS', Name => 'LateralSpreadingDeviceNumber' }, '300A,0336' => { VR => 'SH', Name => 'LateralSpreadingDeviceID' }, '300A,0338' => { VR => 'CS', Name => 'LateralSpreadingDeviceType' }, '300A,033A' => { VR => 'LO', Name => 'LateralSpreadingDeviceDescription' }, '300A,033C' => { VR => 'FL', Name => 'LateralSpreadingDevWaterEquivThick' }, '300A,0340' => { VR => 'IS', Name => 'NumberOfRangeModulators' }, '300A,0342' => { VR => 'SQ', Name => 'RangeModulatorSequence' }, '300A,0344' => { VR => 'IS', Name => 'RangeModulatorNumber' }, '300A,0346' => { VR => 'SH', Name => 'RangeModulatorID' }, '300A,0348' => { VR => 'CS', Name => 'RangeModulatorType' }, '300A,034A' => { VR => 'LO', Name => 'RangeModulatorDescription' }, '300A,034C' => { VR => 'SH', Name => 'BeamCurrentModulationID' }, '300A,0350' => { VR => 'CS', Name => 'PatientSupportType' }, '300A,0352' => { VR => 'SH', Name => 'PatientSupportID' }, '300A,0354' => { VR => 'LO', Name => 'PatientSupportAccessoryCode' }, '300A,0356' => { VR => 'FL', Name => 'FixationLightAzimuthalAngle' }, '300A,0358' => { VR => 'FL', Name => 'FixationLightPolarAngle' }, '300A,035A' => { VR => 'FL', Name => 'MetersetRate' }, '300A,0360' => { VR => 'SQ', Name => 'RangeShifterSettingsSequence' }, '300A,0362' => { VR => 'LO', Name => 'RangeShifterSetting' }, '300A,0364' => { VR => 'FL', Name => 'IsocenterToRangeShifterDistance' }, '300A,0366' => { VR => 'FL', Name => 'RangeShifterWaterEquivThickness' }, '300A,0370' => { VR => 'SQ', Name => 'LateralSpreadingDeviceSettingsSeq' }, '300A,0372' => { VR => 'LO', Name => 'LateralSpreadingDeviceSetting' }, '300A,0374' => { VR => 'FL', Name => 'IsocenterToLateralSpreadingDevDist' }, '300A,0380' => { VR => 'SQ', Name => 'RangeModulatorSettingsSequence' }, '300A,0382' => { VR => 'FL', Name => 'RangeModulatorGatingStartValue' }, '300A,0384' => { VR => 'FL', Name => 'RangeModulatorGatingStopValue' }, '300A,038A' => { VR => 'FL', Name => 'IsocenterToRangeModulatorDistance' }, '300A,0390' => { VR => 'SH', Name => 'ScanSpotTuneID' }, '300A,0392' => { VR => 'IS', Name => 'NumberOfScanSpotPositions' }, '300A,0394' => { VR => 'FL', Name => 'ScanSpotPositionMap' }, '300A,0396' => { VR => 'FL', Name => 'ScanSpotMetersetWeights' }, '300A,0398' => { VR => 'FL', Name => 'ScanningSpotSize' }, '300A,039A' => { VR => 'IS', Name => 'NumberOfPaintings' }, '300A,03A0' => { VR => 'SQ', Name => 'IonToleranceTableSequence' }, '300A,03A2' => { VR => 'SQ', Name => 'IonBeamSequence' }, '300A,03A4' => { VR => 'SQ', Name => 'IonBeamLimitingDeviceSequence' }, '300A,03A6' => { VR => 'SQ', Name => 'IonBlockSequence' }, '300A,03A8' => { VR => 'SQ', Name => 'IonControlPointSequence' }, '300A,03AA' => { VR => 'SQ', Name => 'IonWedgeSequence' }, '300A,03AC' => { VR => 'SQ', Name => 'IonWedgePositionSequence' }, '300A,0401' => { VR => 'SQ', Name => 'ReferencedSetupImageSequence' }, '300A,0402' => { VR => 'ST', Name => 'SetupImageComment' }, '300A,0410' => { VR => 'SQ', Name => 'MotionSynchronizationSequence' }, '300A,0412' => { VR => 'FL', Name => 'ControlPointOrientation' }, '300A,0420' => { VR => 'SQ', Name => 'GeneralAccessorySequence' }, '300A,0421' => { VR => 'SH', Name => 'GeneralAccessoryID' }, '300A,0422' => { VR => 'ST', Name => 'GeneralAccessoryDescription' }, '300A,0423' => { VR => 'CS', Name => 'GeneralAccessoryType' }, '300A,0424' => { VR => 'IS', Name => 'GeneralAccessoryNumber' }, '300C,0002' => { VR => 'SQ', Name => 'ReferencedRTPlanSequence' }, '300C,0004' => { VR => 'SQ', Name => 'ReferencedBeamSequence' }, '300C,0006' => { VR => 'IS', Name => 'ReferencedBeamNumber' }, '300C,0007' => { VR => 'IS', Name => 'ReferencedReferenceImageNumber' }, '300C,0008' => { VR => 'DS', Name => 'StartCumulativeMetersetWeight' }, '300C,0009' => { VR => 'DS', Name => 'EndCumulativeMetersetWeight' }, '300C,000A' => { VR => 'SQ', Name => 'ReferencedBrachyAppSetupSeq' }, '300C,000C' => { VR => 'IS', Name => 'ReferencedBrachyAppSetupNumber' }, '300C,000E' => { VR => 'IS', Name => 'ReferencedSourceNumber' }, '300C,0020' => { VR => 'SQ', Name => 'ReferencedFractionGroupSequence' }, '300C,0022' => { VR => 'IS', Name => 'ReferencedFractionGroupNumber' }, '300C,0040' => { VR => 'SQ', Name => 'ReferencedVerificationImageSeq' }, '300C,0042' => { VR => 'SQ', Name => 'ReferencedReferenceImageSequence' }, '300C,0050' => { VR => 'SQ', Name => 'ReferencedDoseReferenceSequence' }, '300C,0051' => { VR => 'IS', Name => 'ReferencedDoseReferenceNumber' }, '300C,0055' => { VR => 'SQ', Name => 'BrachyReferencedDoseReferenceSeq' }, '300C,0060' => { VR => 'SQ', Name => 'ReferencedStructureSetSequence' }, '300C,006A' => { VR => 'IS', Name => 'ReferencedPatientSetupNumber' }, '300C,0080' => { VR => 'SQ', Name => 'ReferencedDoseSequence' }, '300C,00A0' => { VR => 'IS', Name => 'ReferencedToleranceTableNumber' }, '300C,00B0' => { VR => 'SQ', Name => 'ReferencedBolusSequence' }, '300C,00C0' => { VR => 'IS', Name => 'ReferencedWedgeNumber' }, '300C,00D0' => { VR => 'IS', Name => 'ReferencedCompensatorNumber' }, '300C,00E0' => { VR => 'IS', Name => 'ReferencedBlockNumber' }, '300C,00F0' => { VR => 'IS', Name => 'ReferencedControlPointIndex' }, '300C,00F2' => { VR => 'SQ', Name => 'ReferencedControlPointSequence' }, '300C,00F4' => { VR => 'IS', Name => 'ReferencedStartControlPointIndex' }, '300C,00F6' => { VR => 'IS', Name => 'ReferencedStopControlPointIndex' }, '300C,0100' => { VR => 'IS', Name => 'ReferencedRangeShifterNumber' }, '300C,0102' => { VR => 'IS', Name => 'ReferencedLateralSpreadingDevNum' }, '300C,0104' => { VR => 'IS', Name => 'ReferencedRangeModulatorNumber' }, '300E,0002' => { VR => 'CS', Name => 'ApprovalStatus' }, '300E,0004' => { VR => 'DA', Name => 'ReviewDate' }, '300E,0005' => { VR => 'TM', Name => 'ReviewTime' }, '300E,0008' => { VR => 'PN', Name => 'ReviewerName' }, # text group '4000,0000' => { VR => 'UL', Name => 'TextGroupLength' }, '4000,0010' => { VR => 'LT', Name => 'Arbitrary' }, '4000,4000' => { VR => 'LT', Name => 'TextComments' }, # results group '4008,0040' => { VR => 'SH', Name => 'ResultsID' }, '4008,0042' => { VR => 'LO', Name => 'ResultsIDIssuer' }, '4008,0050' => { VR => 'SQ', Name => 'ReferencedInterpretationSequence' }, '4008,0100' => { VR => 'DA', Name => 'InterpretationRecordedDate' }, '4008,0101' => { VR => 'TM', Name => 'InterpretationRecordedTime' }, '4008,0102' => { VR => 'PN', Name => 'InterpretationRecorder' }, '4008,0103' => { VR => 'LO', Name => 'ReferenceToRecordedSound' }, '4008,0108' => { VR => 'DA', Name => 'InterpretationTranscriptionDate' }, '4008,0109' => { VR => 'TM', Name => 'InterpretationTranscriptionTime' }, '4008,010A' => { VR => 'PN', Name => 'InterpretationTranscriber' }, '4008,010B' => { VR => 'ST', Name => 'InterpretationText' }, '4008,010C' => { VR => 'PN', Name => 'InterpretationAuthor' }, '4008,0111' => { VR => 'SQ', Name => 'InterpretationApproverSequence' }, '4008,0112' => { VR => 'DA', Name => 'InterpretationApprovalDate' }, '4008,0113' => { VR => 'TM', Name => 'InterpretationApprovalTime' }, '4008,0114' => { VR => 'PN', Name => 'PhysicianApprovingInterpretation' }, '4008,0115' => { VR => 'LT', Name => 'InterpretationDiagnosisDescription' }, '4008,0117' => { VR => 'SQ', Name => 'InterpretationDiagnosisCodeSeq' }, '4008,0118' => { VR => 'SQ', Name => 'ResultsDistributionListSequence' }, '4008,0119' => { VR => 'PN', Name => 'DistributionName' }, '4008,011A' => { VR => 'LO', Name => 'DistributionAddress' }, '4008,0200' => { VR => 'SH', Name => 'InterpretationID' }, '4008,0202' => { VR => 'LO', Name => 'InterpretationIDIssuer' }, '4008,0210' => { VR => 'CS', Name => 'InterpretationTypeID' }, '4008,0212' => { VR => 'CS', Name => 'InterpretationStatusID' }, '4008,0300' => { VR => 'ST', Name => 'Impressions' }, '4008,4000' => { VR => 'ST', Name => 'ResultsComments' }, '4FFE,0001' => { VR => 'SQ', Name => 'MACParametersSequence' }, # curve group '50xx,0005' => { VR => 'US', Name => 'CurveDimensions' }, '50xx,0010' => { VR => 'US', Name => 'NumberOfPoints' }, '50xx,0020' => { VR => 'CS', Name => 'TypeOfData' }, '50xx,0022' => { VR => 'LO', Name => 'CurveDescription' }, '50xx,0030' => { VR => 'SH', Name => 'AxisUnits' }, '50xx,0040' => { VR => 'SH', Name => 'AxisLabels' }, '50xx,0103' => { VR => 'US', Name => 'DataValueRepresentation' }, '50xx,0104' => { VR => 'US', Name => 'MinimumCoordinateValue' }, '50xx,0105' => { VR => 'US', Name => 'MaximumCoordinateValue' }, '50xx,0106' => { VR => 'SH', Name => 'CurveRange' }, '50xx,0110' => { VR => 'US', Name => 'CurveDataDescriptor' }, '50xx,0112' => { VR => 'US', Name => 'CoordinateStartValue' }, '50xx,0114' => { VR => 'US', Name => 'CoordinateStepValue' }, '50xx,1001' => { VR => 'CS', Name => 'CurveActivationLayer' }, '50xx,2000' => { VR => 'US', Name => 'AudioType' }, '50xx,2002' => { VR => 'US', Name => 'AudioSampleFormat' }, '50xx,2004' => { VR => 'US', Name => 'NumberOfChannels' }, '50xx,2006' => { VR => 'UL', Name => 'NumberOfSamples' }, '50xx,2008' => { VR => 'UL', Name => 'SampleRate' }, '50xx,200A' => { VR => 'UL', Name => 'TotalTime' }, '50xx,200C' => { VR => 'OW', Name => 'AudioSampleData' }, '50xx,200E' => { VR => 'LT', Name => 'AudioComments' }, '50xx,2500' => { VR => 'LO', Name => 'CurveLabel' }, '50xx,2600' => { VR => 'SQ', Name => 'ReferencedOverlaySequence' }, '50xx,2610' => { VR => 'US', Name => 'ReferencedOverlayGroup' }, '50xx,3000' => { VR => 'OW', Name => 'CurveData' }, '5200,9229' => { VR => 'SQ', Name => 'SharedFunctionalGroupsSequence' }, '5200,9230' => { VR => 'SQ', Name => 'PerFrameFunctionalGroupsSequence' }, '5400,0100' => { VR => 'SQ', Name => 'WaveformSequence' }, '5400,0110' => { VR => 'OB', Name => 'ChannelMinimumValue' }, '5400,0112' => { VR => 'OB', Name => 'ChannelMaximumValue' }, '5400,1004' => { VR => 'US', Name => 'WaveformBitsAllocated' }, '5400,1006' => { VR => 'CS', Name => 'WaveformSampleInterpretation' }, '5400,100A' => { VR => 'OB', Name => 'WaveformPaddingValue' }, '5400,1010' => { VR => 'OB', Name => 'WaveformData' }, '5600,0010' => { VR => 'OF', Name => 'FirstOrderPhaseCorrectionAngle' }, '5600,0020' => { VR => 'OF', Name => 'SpectroscopyData' }, # overlay group '6000,0000' => { VR => 'UL', Name => 'OverlayGroupLength' }, '60xx,0010' => { VR => 'US', Name => 'OverlayRows' }, '60xx,0011' => { VR => 'US', Name => 'OverlayColumns' }, '60xx,0012' => { VR => 'US', Name => 'OverlayPlanes' }, '60xx,0015' => { VR => 'IS', Name => 'NumberOfFramesInOverlay' }, '60xx,0022' => { VR => 'LO', Name => 'OverlayDescription' }, '60xx,0040' => { VR => 'CS', Name => 'OverlayType' }, '60xx,0045' => { VR => 'LO', Name => 'OverlaySubtype' }, '60xx,0050' => { VR => 'SS', Name => 'OverlayOrigin' }, '60xx,0051' => { VR => 'US', Name => 'ImageFrameOrigin' }, '60xx,0052' => { VR => 'US', Name => 'OverlayPlaneOrigin' }, '60xx,0060' => { VR => 'CS', Name => 'OverlayCompressionCode' }, '60xx,0061' => { VR => 'SH', Name => 'OverlayCompressionOriginator' }, '60xx,0062' => { VR => 'SH', Name => 'OverlayCompressionLabel' }, '60xx,0063' => { VR => 'CS', Name => 'OverlayCompressionDescription' }, '60xx,0066' => { VR => 'AT', Name => 'OverlayCompressionStepPointers' }, '60xx,0068' => { VR => 'US', Name => 'OverlayRepeatInterval' }, '60xx,0069' => { VR => 'US', Name => 'OverlayBitsGrouped' }, '60xx,0100' => { VR => 'US', Name => 'OverlayBitsAllocated' }, '60xx,0102' => { VR => 'US', Name => 'OverlayBitPosition' }, '60xx,0110' => { VR => 'CS', Name => 'OverlayFormat' }, '60xx,0200' => { VR => 'US', Name => 'OverlayLocation' }, '60xx,0800' => { VR => 'CS', Name => 'OverlayCodeLabel' }, '60xx,0802' => { VR => 'US', Name => 'OverlayNumberOfTables' }, '60xx,0803' => { VR => 'AT', Name => 'OverlayCodeTableLocation' }, '60xx,0804' => { VR => 'US', Name => 'OverlayBitsForCodeWord' }, '60xx,1001' => { VR => 'CS', Name => 'OverlayActivationLayer' }, '60xx,1100' => { VR => 'US', Name => 'OverlayDescriptorGray' }, '60xx,1101' => { VR => 'US', Name => 'OverlayDescriptorRed' }, '60xx,1102' => { VR => 'US', Name => 'OverlayDescriptorGreen' }, '60xx,1103' => { VR => 'US', Name => 'OverlayDescriptorBlue' }, '60xx,1200' => { VR => 'US', Name => 'OverlaysGray' }, '60xx,1201' => { VR => 'US', Name => 'OverlaysRed' }, '60xx,1202' => { VR => 'US', Name => 'OverlaysGreen' }, '60xx,1203' => { VR => 'US', Name => 'OverlaysBlue' }, '60xx,1301' => { VR => 'IS', Name => 'ROIArea' }, '60xx,1302' => { VR => 'DS', Name => 'ROIMean' }, '60xx,1303' => { VR => 'DS', Name => 'ROIStandardDeviation' }, '60xx,1500' => { VR => 'LO', Name => 'OverlayLabel' }, '60xx,3000' => { VR => 'OB', Name => 'OverlayData' }, '60xx,4000' => { VR => 'LT',Name => 'OverlayComments' }, # pixel data group '7Fxx,0000' => { VR => 'UL', Name => 'PixelDataGroupLength' }, '7Fxx,0010' => { VR => 'OB', Name => 'PixelData', Binary => 1 }, '7Fxx,0011' => { VR => 'US', Name => 'VariableNextDataGroup' }, '7Fxx,0020' => { VR => 'OW', Name => 'VariableCoefficientsSDVN' }, '7Fxx,0030' => { VR => 'OW', Name => 'VariableCoefficientsSDHN' }, '7Fxx,0040' => { VR => 'OW', Name => 'VariableCoefficientsSDDN' }, 'FFFA,FFFA' => { VR => 'SQ', Name => 'DigitalSignaturesSequence' }, 'FFFC,FFFC' => { VR => 'OB', Name => 'DataSetTrailingPadding', Binary => 1 }, # the sequence delimiters have no VR: 'FFFE,E000' => 'StartOfItem', 'FFFE,E00D' => 'EndOfItems', 'FFFE,E0DD' => 'EndOfSequence', ); # table to translate registered UID values to readable strings # (the PrintConv is added dynamically when a 'UI' format tag is extracted) %uid = ( '1.2.840.10008.1.1' => 'Verification SOP Class', '1.2.840.10008.1.2' => 'Implicit VR Little Endian', '1.2.840.10008.1.2.1' => 'Explicit VR Little Endian', '1.2.840.10008.1.2.1.99' => 'Deflated Explicit VR Little Endian', '1.2.840.10008.1.2.2' => 'Explicit VR Big Endian', '1.2.840.10008.1.2.4.50' => 'JPEG Baseline (Process 1)', '1.2.840.10008.1.2.4.51' => 'JPEG Extended (Process 2 & 4)', '1.2.840.10008.1.2.4.52' => 'JPEG Extended (Process 3 & 5)', '1.2.840.10008.1.2.4.53' => 'JPEG Spectral Selection, Non-Hierarchical (Process 6 & 8)', '1.2.840.10008.1.2.4.54' => 'JPEG Spectral Selection, Non-Hierarchical (Process 7 & 9)', '1.2.840.10008.1.2.4.55' => 'JPEG Full Progression, Non-Hierarchical (Process 10 & 12)', '1.2.840.10008.1.2.4.56' => 'JPEG Full Progression, Non-Hierarchical (Process 11 & 13)', '1.2.840.10008.1.2.4.57' => 'JPEG Lossless, Non-Hierarchical (Process 14)', '1.2.840.10008.1.2.4.58' => 'JPEG Lossless, Non-Hierarchical (Process 15) ', '1.2.840.10008.1.2.4.59' => 'JPEG Extended, Hierarchical (Process 16 & 18) ', '1.2.840.10008.1.2.4.60' => 'JPEG Extended, Hierarchical (Process 17 & 19) ', '1.2.840.10008.1.2.4.61' => 'JPEG Spectral Selection, Hierarchical (Process 20 & 22)', '1.2.840.10008.1.2.4.62' => 'JPEG Spectral Selection, Hierarchical (Process 21 & 23)', '1.2.840.10008.1.2.4.63' => 'JPEG Full Progression, Hierarchical (Process 24 & 26)', '1.2.840.10008.1.2.4.64' => 'JPEG Full Progression, Hierarchical (Process 25 & 27)', '1.2.840.10008.1.2.4.65' => 'JPEG Lossless, Hierarchical (Process 28) ', '1.2.840.10008.1.2.4.66' => 'JPEG Lossless, Hierarchical (Process 29) ', '1.2.840.10008.1.2.4.70' => 'JPEG Lossless, Non-Hierarchical, First-Order Prediction (Process 14-1)', '1.2.840.10008.1.2.4.80' => 'JPEG-LS Lossless Image Compression', '1.2.840.10008.1.2.4.81' => 'JPEG-LS Lossy (Near-Lossless) Image Compression', '1.2.840.10008.1.2.4.90' => 'JPEG 2000 Image Compression (Lossless Only)', '1.2.840.10008.1.2.4.91' => 'JPEG 2000 Image Compression', '1.2.840.10008.1.2.4.92' => 'JPEG 2000 Part 2 Multi-component Image Compression (Lossless Only)', '1.2.840.10008.1.2.4.93' => 'JPEG 2000 Part 2 Multi-component Image Compression', '1.2.840.10008.1.2.4.94' => 'JPIP Referenced', '1.2.840.10008.1.2.4.95' => 'JPIP Referenced Deflate', '1.2.840.10008.1.2.4.100' => 'MPEG2 Main Profile @ Main Level', '1.2.840.10008.1.2.5' => 'RLE Lossless', '1.2.840.10008.1.2.6.1' => 'RFC 2557 MIME encapsulation', '1.2.840.10008.1.2.6.2' => 'XML Encoding', '1.2.840.10008.1.3.10' => 'Media Storage Directory Storage', '1.2.840.10008.1.4.1.1' => 'Talairach Brain Atlas Frame of Reference', '1.2.840.10008.1.4.1.2' => 'SPM2 T1 Frame of Reference', '1.2.840.10008.1.4.1.3' => 'SPM2 T2 Frame of Reference', '1.2.840.10008.1.4.1.4' => 'SPM2 PD Frame of Reference', '1.2.840.10008.1.4.1.5' => 'SPM2 EPI Frame of Reference', '1.2.840.10008.1.4.1.6' => 'SPM2 FIL T1 Frame of Reference', '1.2.840.10008.1.4.1.7' => 'SPM2 PET Frame of Reference', '1.2.840.10008.1.4.1.8' => 'SPM2 TRANSM Frame of Reference', '1.2.840.10008.1.4.1.9' => 'SPM2 SPECT Frame of Reference', '1.2.840.10008.1.4.1.10' => 'SPM2 GRAY Frame of Reference', '1.2.840.10008.1.4.1.11' => 'SPM2 WHITE Frame of Reference', '1.2.840.10008.1.4.1.12' => 'SPM2 CSF Frame of Reference', '1.2.840.10008.1.4.1.13' => 'SPM2 BRAINMASK Frame of Reference', '1.2.840.10008.1.4.1.14' => 'SPM2 AVG305T1 Frame of Reference', '1.2.840.10008.1.4.1.15' => 'SPM2 AVG152T1 Frame of Reference', '1.2.840.10008.1.4.1.16' => 'SPM2 AVG152T2 Frame of Reference', '1.2.840.10008.1.4.1.17' => 'SPM2 AVG152PD Frame of Reference', '1.2.840.10008.1.4.1.18' => 'SPM2 SINGLESUBJT1 Frame of Reference', '1.2.840.10008.1.4.2.1' => 'ICBM 452 T1 Frame of Reference', '1.2.840.10008.1.4.2.2' => 'ICBM Single Subject MRI Frame of Reference', '1.2.840.10008.1.9' => 'Basic Study Content Notification SOP Class', '1.2.840.10008.1.20.1' => 'Storage Commitment Push Model SOP Class', '1.2.840.10008.1.20.1.1' => 'Storage Commitment Push Model SOP Instance', '1.2.840.10008.1.20.2' => 'Storage Commitment Pull Model SOP Class ', '1.2.840.10008.1.20.2.1' => 'Storage Commitment Pull Model SOP Instance ', '1.2.840.10008.1.40' => 'Procedural Event Logging SOP Class', '1.2.840.10008.1.40.1' => 'Procedural Event Logging SOP Instance', '1.2.840.10008.1.42' => 'Substance Administration Logging SOP Class', '1.2.840.10008.1.42.1' => 'Substance Administration Logging SOP Instance', '1.2.840.10008.2.6.1' => 'DICOM UID Registry', '1.2.840.10008.2.16.4' => 'DICOM Controlled Terminology', '1.2.840.10008.3.1.1.1' => 'DICOM Application Context Name', '1.2.840.10008.3.1.2.1.1' => 'Detached Patient Management SOP Class', '1.2.840.10008.3.1.2.1.4' => 'Detached Patient Management Meta SOP Class', '1.2.840.10008.3.1.2.2.1' => 'Detached Visit Management SOP Class', '1.2.840.10008.3.1.2.3.1' => 'Detached Study Management SOP Class', '1.2.840.10008.3.1.2.3.2' => 'Study Component Management SOP Class', '1.2.840.10008.3.1.2.3.3' => 'Modality Performed Procedure Step SOP Class', '1.2.840.10008.3.1.2.3.4' => 'Modality Performed Procedure Step Retrieve SOP Class', '1.2.840.10008.3.1.2.3.5' => 'Modality Performed Procedure Step Notification SOP Class', '1.2.840.10008.3.1.2.5.1' => 'Detached Results Management SOP Class', '1.2.840.10008.3.1.2.5.4' => 'Detached Results Management Meta SOP Class', '1.2.840.10008.3.1.2.5.5' => 'Detached Study Management Meta SOP Class', '1.2.840.10008.3.1.2.6.1' => 'Detached Interpretation Management SOP Class', '1.2.840.10008.4.2' => 'Storage Service Class Service Class PS 3.4', '1.2.840.10008.5.1.1.1' => 'Basic Film Session SOP Class', '1.2.840.10008.5.1.1.2' => 'Basic Film Box SOP Class', '1.2.840.10008.5.1.1.4' => 'Basic Grayscale Image Box SOP Class', '1.2.840.10008.5.1.1.4.1' => 'Basic Color Image Box SOP Class', '1.2.840.10008.5.1.1.4.2' => 'Referenced Image Box SOP Class', '1.2.840.10008.5.1.1.9' => 'Basic Grayscale Print ManagementMeta SOP Class', '1.2.840.10008.5.1.1.9.1' => 'Referenced Grayscale Print Management Meta SOP Class', '1.2.840.10008.5.1.1.14' => 'Print Job SOP Class', '1.2.840.10008.5.1.1.15' => 'Basic Annotation Box SOP Class', '1.2.840.10008.5.1.1.16' => 'Printer SOP Class', '1.2.840.10008.5.1.1.16.376' => 'Printer Configuration Retrieval SOP Class', '1.2.840.10008.5.1.1.17' => 'Printer SOP Instance', '1.2.840.10008.5.1.1.17.376' => 'Printer Configuration RetrievalSOP Instance', '1.2.840.10008.5.1.1.18' => 'Basic Color Print Management Meta SOP Class', '1.2.840.10008.5.1.1.18.1' => 'Referenced Color Print Management Meta SOP Class', '1.2.840.10008.5.1.1.22' => 'VOI LUT Box SOP Class', '1.2.840.10008.5.1.1.23' => 'Presentation LUT SOP Class', '1.2.840.10008.5.1.1.24' => 'Image Overlay Box SOP Class', '1.2.840.10008.5.1.1.24.1' => 'Basic Print Image Overlay Box SOP Class', '1.2.840.10008.5.1.1.25' => 'Print Queue SOP Instance', '1.2.840.10008.5.1.1.26' => 'Print Queue Management SOP Class', '1.2.840.10008.5.1.1.27' => 'Stored Print Storage SOP Class', '1.2.840.10008.5.1.1.29' => 'Hardcopy Grayscale Image', '1.2.840.10008.5.1.1.30' => 'Hardcopy Color Image Storage SOP Class', '1.2.840.10008.5.1.1.31' => 'Pull Print Request SOP Class', '1.2.840.10008.5.1.1.32' => 'Pull Stored Print Management Meta SOP Class', '1.2.840.10008.5.1.1.33' => 'Media Creation Management SOP Class', '1.2.840.10008.5.1.4.1.1.1' => 'Computed Radiography Image Storage', '1.2.840.10008.5.1.4.1.1.1.1' => 'Digital X-Ray Image Storage - For Presentation', '1.2.840.10008.5.1.4.1.1.1.1.1' => 'Digital X-Ray Image Storage - For Processing', '1.2.840.10008.5.1.4.1.1.1.2' => 'Digital Mammography X-Ray Image Storage - For Presentation', '1.2.840.10008.5.1.4.1.1.1.2.1' => 'Digital Mammography X-Ray Image Storage - For Processing', '1.2.840.10008.5.1.4.1.1.1.3' => 'Digital Intra-oral X-Ray Image Storage - For Presentation', '1.2.840.10008.5.1.4.1.1.1.3.1' => 'Digital Intra-oral X-Ray Image Storage - For Processing', '1.2.840.10008.5.1.4.1.1.2' => 'CT Image Storage', '1.2.840.10008.5.1.4.1.1.2.1' => 'Enhanced CT Image Storage', '1.2.840.10008.5.1.4.1.1.3' => 'Ultrasound Multi-frame Image Storage ', '1.2.840.10008.5.1.4.1.1.3.1' => 'Ultrasound Multi-frame Image Storage', '1.2.840.10008.5.1.4.1.1.4' => 'MR Image Storage', '1.2.840.10008.5.1.4.1.1.4.1' => 'Enhanced MR Image Storage', '1.2.840.10008.5.1.4.1.1.4.2' => 'MR Spectroscopy Storage', '1.2.840.10008.5.1.4.1.1.5' => 'Nuclear Medicine Image Storage', '1.2.840.10008.5.1.4.1.1.6' => 'Ultrasound Image Storage', '1.2.840.10008.5.1.4.1.1.6.1' => 'Ultrasound Image Storage', '1.2.840.10008.5.1.4.1.1.7' => 'Secondary Capture Image Storage', '1.2.840.10008.5.1.4.1.1.7.1' => 'Multi-frame Single Bit Secondary', '1.2.840.10008.5.1.4.1.1.7.2' => 'Multi-frame Grayscale Byte Secondary Capture Image Storage', '1.2.840.10008.5.1.4.1.1.7.3' => 'Multi-frame Grayscale Word Secondary Capture Image Storage', '1.2.840.10008.5.1.4.1.1.7.4' => 'Multi-frame True Color Secondary Capture Image Storage', '1.2.840.10008.5.1.4.1.1.8' => 'Standalone Overlay Storage', '1.2.840.10008.5.1.4.1.1.9' => 'Standalone Curve Storage', '1.2.840.10008.5.1.4.1.1.9.1' => 'Waveform Storage - Trial (Retired)', '1.2.840.10008.5.1.4.1.1.9.1.1' => '12-lead ECG Waveform Storage', '1.2.840.10008.5.1.4.1.1.9.1.2' => 'General ECG Waveform Storage', '1.2.840.10008.5.1.4.1.1.9.1.3' => 'Ambulatory ECG Waveform Storage', '1.2.840.10008.5.1.4.1.1.9.2.1' => 'Hemodynamic Waveform Storage', '1.2.840.10008.5.1.4.1.1.9.3.1' => 'Cardiac Electrophysiology Waveform Storage', '1.2.840.10008.5.1.4.1.1.9.4.1' => 'Basic Voice Audio Waveform Storage', '1.2.840.10008.5.1.4.1.1.10' => 'Standalone Modality LUT Storage', '1.2.840.10008.5.1.4.1.1.11' => 'Standalone VOI LUT Storage', '1.2.840.10008.5.1.4.1.1.11.1' => 'Grayscale Softcopy Presentation State Storage SOP Class', '1.2.840.10008.5.1.4.1.1.11.2' => 'Color Softcopy Presentation State Storage SOP Class', '1.2.840.10008.5.1.4.1.1.11.3' => 'Pseudo-Color Softcopy Presentation State Storage SOP Class', '1.2.840.10008.5.1.4.1.1.11.4' => 'Blending Softcopy Presentation State Storage SOP Class', '1.2.840.10008.5.1.4.1.1.12.1' => 'X-Ray Angiographic Image Storage', '1.2.840.10008.5.1.4.1.1.12.1.1' => 'Enhanced XA Image Storage', '1.2.840.10008.5.1.4.1.1.12.2' => 'X-Ray Radiofluoroscopic Image Storage', '1.2.840.10008.5.1.4.1.1.12.2.1' => 'Enhanced XRF Image Storage', '1.2.840.10008.5.1.4.1.1.12.3' => 'X-Ray Angiographic Bi-Plane Image Storage ', '1.2.840.10008.5.1.4.1.1.13.1.1' => 'X-Ray 3D Angiographic Image Storage', '1.2.840.10008.5.1.4.1.1.13.1.2' => 'X-Ray 3D Craniofacial Image Storage', '1.2.840.10008.5.1.4.1.1.13.1.3' => 'Breast Tomosynthesis Image Storage', '1.2.840.10008.5.1.4.1.1.14.1' => 'Intravascular Optical Coherence Tomography Image Storage - For Presentation', '1.2.840.10008.5.1.4.1.1.14.2' => 'Intravascular Optical Coherence Tomography Image Storage - For Processing', '1.2.840.10008.5.1.4.1.1.20' => 'Nuclear Medicine Image Storage', '1.2.840.10008.5.1.4.1.1.66' => 'Raw Data Storage', '1.2.840.10008.5.1.4.1.1.66.1' => 'Spatial Registration Storage', '1.2.840.10008.5.1.4.1.1.66.2' => 'Spatial Fiducials Storage', '1.2.840.10008.5.1.4.1.1.66.3' => 'Deformable Spatial Registration Storage', '1.2.840.10008.5.1.4.1.1.66.4' => 'Segmentation Storage', '1.2.840.10008.5.1.4.1.1.67' => 'Real World Value Mapping Storage', '1.2.840.10008.5.1.4.1.1.77.1' => 'VL Image Storage ', '1.2.840.10008.5.1.4.1.1.77.2' => 'VL Multi-frame Image Storage', '1.2.840.10008.5.1.4.1.1.77.1.1' => 'VL Endoscopic Image Storage', '1.2.840.10008.5.1.4.1.1.77.1.1.1' => 'Video Endoscopic Image Storage', '1.2.840.10008.5.1.4.1.1.77.1.2' => 'VL Microscopic Image Storage', '1.2.840.10008.5.1.4.1.1.77.1.2.1' => 'Video Microscopic Image Storage', '1.2.840.10008.5.1.4.1.1.77.1.3' => 'VL Slide-Coordinates Microscopic Image Storage', '1.2.840.10008.5.1.4.1.1.77.1.4' => 'VL Photographic Image Storage', '1.2.840.10008.5.1.4.1.1.77.1.4.1' => 'Video Photographic Image Storage', '1.2.840.10008.5.1.4.1.1.77.1.5.1' => 'Ophthalmic Photography 8 Bit Image Storage', '1.2.840.10008.5.1.4.1.1.77.1.5.2' => 'Ophthalmic Photography 16 Bit Image Storage', '1.2.840.10008.5.1.4.1.1.77.1.5.3' => 'Stereometric Relationship Storage', '1.2.840.10008.5.1.4.1.1.77.1.5.4' => 'Ophthalmic Tomography Image Storage', '1.2.840.10008.5.1.4.1.1.77.1.6' => 'VL Whole Slide Microscopy Image Storage', '1.2.840.10008.5.1.4.1.1.78.1' => 'Lensometry Measurements Storage', '1.2.840.10008.5.1.4.1.1.78.2' => 'Autorefraction Measurements Storage', '1.2.840.10008.5.1.4.1.1.78.3' => 'Keratometry Measurements Storage', '1.2.840.10008.5.1.4.1.1.78.4' => 'Subjective Refraction Measurements Storage', '1.2.840.10008.5.1.4.1.1.78.5' => 'Visual Acuity Measurements Storage', '1.2.840.10008.5.1.4.1.1.78.6' => 'Spectacle Prescription Report Storage', '1.2.840.10008.5.1.4.1.1.78.7' => 'Ophthalmic Axial Measurements Storage', '1.2.840.10008.5.1.4.1.1.78.8' => 'Intraocular Lens Calculations Storage', '1.2.840.10008.5.1.4.1.1.79.1' => 'Macular Grid Thickness and Volume Report Storage SOP Class', '1.2.840.10008.5.1.4.1.1.80.1' => 'Ophthalmic Visual Field Static Perimetry Measurements Storage', '1.2.840.10008.5.1.4.1.1.88.1' => 'Text SR Storage - Trial (Retired)', '1.2.840.10008.5.1.4.1.1.88.2' => 'Audio SR Storage - Trial (Retired)', '1.2.840.10008.5.1.4.1.1.88.3' => 'Detail SR Storage - Trial (Retired)', '1.2.840.10008.5.1.4.1.1.88.4' => 'Comprehensive SR Storage - Trial (Retired)', '1.2.840.10008.5.1.4.1.1.88.11' => 'Basic Text SR', '1.2.840.10008.5.1.4.1.1.88.22' => 'Enhanced SR', '1.2.840.10008.5.1.4.1.1.88.33' => 'Comprehensive SR', '1.2.840.10008.5.1.4.1.1.88.40' => 'Procedure Log Storage', '1.2.840.10008.5.1.4.1.1.88.50' => 'Mammography CAD SR', '1.2.840.10008.5.1.4.1.1.88.59' => 'Key Object Selection Document', '1.2.840.10008.5.1.4.1.1.88.65' => 'Chest CAD SR', '1.2.840.10008.5.1.4.1.1.88.67' => 'X-Ray Radiation Dose SR Storage', '1.2.840.10008.5.1.4.1.1.88.69' => 'Colon CAD SR', '1.2.840.10008.5.1.4.1.1.88.70' => 'Implantation Plan SR Document Storage', '1.2.840.10008.5.1.4.1.1.104.1' => 'Encapsulated PDF Storage', '1.2.840.10008.5.1.4.1.1.104.2' => 'Encapsulated CDA Storage', '1.2.840.10008.5.1.4.1.1.128' => 'Positron Emission Tomography Image Storage', '1.2.840.10008.5.1.4.1.1.129' => 'Standalone PET Curve Storage', '1.2.840.10008.5.1.4.1.1.481.1' => 'RT Image Storage', '1.2.840.10008.5.1.4.1.1.481.2' => 'RT Dose Storage', '1.2.840.10008.5.1.4.1.1.481.3' => 'RT Structure Set Storage', '1.2.840.10008.5.1.4.1.1.481.4' => 'RT Beams Treatment Record Storage', '1.2.840.10008.5.1.4.1.1.481.5' => 'RT Plan Storage', '1.2.840.10008.5.1.4.1.1.481.6' => 'RT Brachy Treatment Record Storage', '1.2.840.10008.5.1.4.1.1.481.7' => 'RT Treatment Summary Record Storage', '1.2.840.10008.5.1.4.1.1.481.8' => 'RT Ion Plan Storage', '1.2.840.10008.5.1.4.1.1.481.9' => 'RT Ion Beams Treatment Record Storage', '1.2.840.10008.5.1.4.1.2.1.1' => 'Patient Root Query/Retrieve Information Model - FIND', '1.2.840.10008.5.1.4.1.2.1.2' => 'Patient Root Query/Retrieve Information Model - MOVE', '1.2.840.10008.5.1.4.1.2.1.3' => 'Patient Root Query/Retrieve Information Model - GET', '1.2.840.10008.5.1.4.1.2.2.1' => 'Study Root Query/Retrieve Information Model - FIND', '1.2.840.10008.5.1.4.1.2.2.2' => 'Study Root Query/Retrieve Information Model - MOVE', '1.2.840.10008.5.1.4.1.2.2.3' => 'Study Root Query/Retrieve Information Model - GET', '1.2.840.10008.5.1.4.1.2.3.1' => 'Patient/Study Only Query/Retrieve Information Model - FIND', '1.2.840.10008.5.1.4.1.2.3.2' => 'Patient/Study Only Query/Retrieve Information Model - MOVE', '1.2.840.10008.5.1.4.1.2.3.3' => 'Patient/Study Only Query/Retrieve Information Model - GET', '1.2.840.10008.5.1.4.31' => 'Modality Worklist Information Model - FIND', '1.2.840.10008.5.1.4.32.1' => 'General Purpose Worklist Information Model - FIND', '1.2.840.10008.5.1.4.32.2' => 'General Purpose Scheduled Procedure Step SOP Class', '1.2.840.10008.5.1.4.32.3' => 'General Purpose Performed Procedure Step SOP Class', '1.2.840.10008.5.1.4.32' => 'General Purpose Worklist Management Meta SOP Class', '1.2.840.10008.5.1.4.33' => 'Instance Availability Notification SOP Class', '1.2.840.10008.5.1.4.34.1' => 'RT Beams Delivery Instruction Storage', '1.2.840.10008.5.1.4.34.2' => 'RT Conventional Machine Verification', '1.2.840.10008.5.1.4.34.3' => 'RT Ion Machine Verification', '1.2.840.10008.5.1.4.34.4' => 'Unified Worklist and Procedure Step Service Class', '1.2.840.10008.5.1.4.34.4.1' => 'Unified Procedure Step - Push SOP Class', '1.2.840.10008.5.1.4.34.4.2' => 'Unified Procedure Step - Watch SOP Class', '1.2.840.10008.5.1.4.34.4.3' => 'Unified Procedure Step - Pull SOP Class', '1.2.840.10008.5.1.4.34.4.4' => 'Unified Procedure Step - Event SOP Class', '1.2.840.10008.5.1.4.34.5' => 'Unified Worklist and Procedure Step SOP Instance', '1.2.840.10008.5.1.4.34.6.1' => 'Unified Procedure Step - Push SOP Class', '1.2.840.10008.5.1.4.34.6.2' => 'Unified Procedure Step - Watch SOP Class', '1.2.840.10008.5.1.4.34.6.3' => 'Unified Procedure Step - Pull SOP Class', '1.2.840.10008.5.1.4.34.6.4' => 'Unified Procedure Step - Event SOP Class', '1.2.840.10008.5.1.4.34.7' => 'RT Beams Delivery Instruction Storage', '1.2.840.10008.5.1.4.34.8' => 'RT Conventional Machine Verification', '1.2.840.10008.5.1.4.34.9' => 'RT Ion Machine Verification', '1.2.840.10008.5.1.4.37.1' => 'General Relevant Patient Information Query', '1.2.840.10008.5.1.4.37.2' => 'Breast Imaging Relevant Patient Information Query', '1.2.840.10008.5.1.4.37.3' => 'Cardiac Relevant Patient Information Query', '1.2.840.10008.5.1.4.38.1' => 'Hanging Protocol Storage', '1.2.840.10008.5.1.4.38.2' => 'Hanging Protocol Information Model - FIND', '1.2.840.10008.5.1.4.38.3' => 'Hanging Protocol Information Model - MOVE', '1.2.840.10008.5.1.4.39.1' => 'Color Palette Storage', '1.2.840.10008.5.1.4.39.2' => 'Color Palette Information Model - FIND', '1.2.840.10008.5.1.4.39.3' => 'Color Palette Information Model - MOVE', '1.2.840.10008.5.1.4.39.4' => 'Color Palette Information Model - GET', '1.2.840.10008.5.1.4.41' => 'Product Characteristics Query SOP Class', '1.2.840.10008.5.1.4.42' => 'Substance Approval Query SOP Class', '1.2.840.10008.5.1.4.43.1' => 'Generic Implant Template Storage', '1.2.840.10008.5.1.4.43.2' => 'Generic Implant Template Information Model - FIND', '1.2.840.10008.5.1.4.43.3' => 'Generic Implant Template Information Model - MOVE', '1.2.840.10008.5.1.4.43.4' => 'Generic Implant Template Information Model - GET', '1.2.840.10008.5.1.4.44.1' => 'Implant Assembly Template Storage', '1.2.840.10008.5.1.4.44.2' => 'Implant Assembly Template Information Model - FIND', '1.2.840.10008.5.1.4.44.3' => 'Implant Assembly Template Information Model - MOVE', '1.2.840.10008.5.1.4.44.4' => 'Implant Assembly Template Information Model - GET', '1.2.840.10008.5.1.4.45.1' => 'Implant Template Group Storage', '1.2.840.10008.5.1.4.45.2' => 'Implant Template Group Information Model - FIND', '1.2.840.10008.5.1.4.45.3' => 'Implant Template Group Information Model - MOVE', '1.2.840.10008.5.1.4.45.4' => 'Implant Template Group Information Model - GET', '1.2.840.10008.15.0.3.1' => 'dicomDeviceName', '1.2.840.10008.15.0.3.2' => 'dicomDescription', '1.2.840.10008.15.0.3.3' => 'dicomManufacturer', '1.2.840.10008.15.0.3.4' => 'dicomManufacturerModelName', '1.2.840.10008.15.0.3.5' => 'dicomSoftwareVersion', '1.2.840.10008.15.0.3.6' => 'dicomVendorData', '1.2.840.10008.15.0.3.7' => 'dicomAETitle', '1.2.840.10008.15.0.3.8' => 'dicomNetworkConnectionReference', '1.2.840.10008.15.0.3.9' => 'dicomApplicationCluster', '1.2.840.10008.15.0.3.10' => 'dicomAssociationInitiator', '1.2.840.10008.15.0.3.11' => 'dicomAssociationAcceptor', '1.2.840.10008.15.0.3.12' => 'dicomHostname', '1.2.840.10008.15.0.3.13' => 'dicomPort', '1.2.840.10008.15.0.3.14' => 'dicomSOPClass', '1.2.840.10008.15.0.3.15' => 'dicomTransferRole', '1.2.840.10008.15.0.3.16' => 'dicomTransferSyntax', '1.2.840.10008.15.0.3.17' => 'dicomPrimaryDeviceType', '1.2.840.10008.15.0.3.18' => 'dicomRelatedDeviceReference', '1.2.840.10008.15.0.3.19' => 'dicomPreferredCalledAETitle', '1.2.840.10008.15.0.3.20' => 'dicomTLSCyphersuite', '1.2.840.10008.15.0.3.21' => 'dicomAuthorizedNodeCertificateReference', '1.2.840.10008.15.0.3.22' => 'dicomThisNodeCertificateReference', '1.2.840.10008.15.0.3.23' => 'dicomInstalled', '1.2.840.10008.15.0.3.24' => 'dicomStationName', '1.2.840.10008.15.0.3.25' => 'dicomDeviceSerialNumber', '1.2.840.10008.15.0.3.26' => 'dicomInstitutionName', '1.2.840.10008.15.0.3.27' => 'dicomInstitutionAddress', '1.2.840.10008.15.0.3.28' => 'dicomInstitutionDepartmentName', '1.2.840.10008.15.0.3.29' => 'dicomIssuerOfPatientID', '1.2.840.10008.15.0.3.30' => 'dicomPreferredCallingAETitle', '1.2.840.10008.15.0.3.31' => 'dicomSupportedCharacterSet', '1.2.840.10008.15.0.4.1' => 'dicomConfigurationRoot', '1.2.840.10008.15.0.4.2' => 'dicomDevicesRoot', '1.2.840.10008.15.0.4.3' => 'dicomUniqueAETitlesRegistryRoot', '1.2.840.10008.15.0.4.4' => 'dicomDevice', '1.2.840.10008.15.0.4.5' => 'dicomNetworkAE', '1.2.840.10008.15.0.4.6' => 'dicomNetworkConnection', '1.2.840.10008.15.0.4.7' => 'dicomUniqueAETitle', '1.2.840.10008.15.0.4.8' => 'dicomTransferCapability', ); #------------------------------------------------------------------------------ # Extract information from a DICOM (DCM) image # Inputs: 0) ExifTool object reference, 1) DirInfo reference # Returns: 1 on success, 0 if this wasn't a valid DICOM file sub ProcessDICOM($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $unknown = $et->Options('Unknown'); my $verbose = $et->Options('Verbose'); my ($hdr, $buff, $implicit, $vr, $len); # # identify the DICOM or ACR-NEMA file # $raf->Read($hdr, 12) == 12 or return 0; # save for ACR identification later $raf->Seek(128, 0) or return 0; # skip to end of DICM header $raf->Read($buff, 4) == 4 or return 0; # read signature if ($buff eq 'DICM') { # file meta information transfer syntax is explicit little endian SetByteOrder('II'); $et->SetFileType('DICOM'); } else { # test for a RAW DCM image (ACR-NEMA format, ie. no header) foreach ('II','MM','') { return 0 unless $_; # no luck identifying the syntax SetByteOrder($_); my $g = Get16u(\$hdr, 0); # expect group number to be small and even next if $g < 2 or $g > 8 or $g & 0x01; my $e = Get16u(\$hdr, 2); next if $e > 0x20; # expect a low element number at start $vr = substr($hdr, 4, 2); # look for explicit VR if ($vr =~ /^[A-Z]{2}$/) { $implicit = 0; if ($vr32{$vr}) { next unless Get16u(\$hdr, 6) == 0; # must be 2 zero bytes $len = Get32u(\$hdr, 8); } else { next if $e == 0 and $vr ne 'UL'; # group length must be UL $len = Get16u(\$hdr, 6); } } else { $implicit = 1; $len = Get32u(\$hdr, 4); } next if $e == 0 and $len != 4; # group length value must be 4 bytes next if $len > 64; # first element shouldn't be too long last; # success! } $raf->Seek(0, 0) or return 0; # rewind to start of file $et->SetFileType('ACR'); } # # process the meta information # my $tagTablePtr = GetTagTable('Image::ExifTool::DICOM::Main'); my $pos = $raf->Tell(); my $err = 1; my ($transferSyntax, $group2end); for (;;) { $raf->Read($buff, 8) == 8 or $err = 0, last; $pos += 8; my $group = Get16u(\$buff, 0); # implement the transfer syntax at the end of the group 2 data if ($transferSyntax and ($group != 0x0002 or ($group2end and $pos > $group2end))) { # 1.2.840.10008.1.2 = implicit VR little endian # 1.2.840.10008.1.2.2 = explicit VR big endian # 1.2.840.10008.1.2.x = explicit VR little endian # 1.2.840.10008.1.2.1.99 = deflated unless ($transferSyntax =~ /^1\.2\.840\.10008\.1\.2(\.\d+)?(\.\d+)?/) { $et->Warn("Unrecognized transfer syntax $transferSyntax"); last; } if (not $1) { $implicit = 1; } elsif ($1 eq '.2') { SetByteOrder('MM'); $group = Get16u(\$buff, 0); # must get group again } elsif ($1 eq '.1' and $2 and $2 eq '.99') { # inflate compressed data stream if (eval { require Compress::Zlib }) { # must use undocumented zlib feature to disable zlib header information # because DICOM deflated data doesn't have the zlib header (ref 3) my $wbits = -Compress::Zlib::MAX_WBITS(); my $inflate = Compress::Zlib::inflateInit(-WindowBits => $wbits); if ($inflate) { $raf->Seek(-8, 1) or last; my $data = ''; while ($raf->Read($buff, 65536)) { my ($buf, $stat) = $inflate->inflate($buff); if ($stat == Compress::Zlib::Z_OK() or $stat == Compress::Zlib::Z_STREAM_END()) { $data .= $buf; last if $stat == Compress::Zlib::Z_STREAM_END(); } else { $et->Warn('Error inflating compressed data stream'); return 1; } } last if length $data < 8; # create new RAF object from inflated data stream $raf = new File::RandomAccess(\$data); # re-read start of stream (now decompressed) $raf->Read($buff, 8) == 8 or last; $group = Get16u(\$buff, 0); } else { $et->Warn('Error initializing inflation'); return 1; } } else { $et->Warn('Install Compress::Zlib to decode compressed data stream'); return 1; } } undef $transferSyntax; } my $element = Get16u(\$buff,2); my $tag = sprintf('%.4X,%.4X', $group, $element); if ($implicit or $implicitVR{$tag}) { # treat everything as string if implicit VR because it # isn't worth it to generate the necessary VR lookup tables # for the thousands of defined data elements $vr = ''; # no VR (treat everything as string) $len = Get32u(\$buff, 4); } else { $vr = substr($buff,4,2); last unless $vr =~ /^[A-Z]{2}$/; if ($vr32{$vr}) { $raf->Read($buff, 4) == 4 or last; $pos += 4; $len = Get32u(\$buff, 0); $len = 0 if $vr eq 'SQ'; # just recurse into sequences } else { $len = Get16u(\$buff, 6); } } if ($len == 0xffffffff) { $len = 0; # don't read value if undefined length if ($verbose) { # start list of items in verbose output $et->VPrint(0, "$$et{INDENT}+ [List of items]\n"); $$et{INDENT} .= '| '; } } # read the element value if ($len) { $raf->Read($buff, $len) == $len or last; $pos += $len; } else { $buff = ''; } # handle tags not found in the table my $tagInfo = $$tagTablePtr{$tag}; unless ($tagInfo) { # accept tag ID's with "x" for a wildcard in the following patterns: # '60xx,1203', '0020,31xx', '0028,04x2', '1000,xxx0', '1010,xxxx' my $xx; if ((($xx = $tag) =~ s/^(..)../$1xx/ and $$tagTablePtr{$xx}) or (($xx = $tag) =~ s/..$/xx/ and $$tagTablePtr{$xx}) or (($xx = $tag) =~ s/.(.)$/x$1/ and $$tagTablePtr{$xx}) or (($xx = $tag) =~ s/...(.)$/xxx$1/ and $$tagTablePtr{$xx}) or (($xx = $tag) =~ s/....$/xxxx/ and $$tagTablePtr{$xx})) { $tag = $xx; $tagInfo = $$tagTablePtr{$xx}; } elsif ($unknown) { # create tag info hash for unknown elements if ($element == 0) { # element zero is group length $tagInfo = { Name => sprintf("Group%.4X_Length", $group), Description => sprintf("Group %.4X Length", $group), }; } else { $tagInfo = { Name => sprintf("DICOM_%.4X_%.4X", $group, $element), Description => sprintf("DICOM %.4X,%.4X", $group, $element), }; } $$tagInfo{Unknown} = 1; AddTagToTable($tagTablePtr, $tag, $tagInfo); } } # get VR from our tag information if implicit $vr = $$tagInfo{VR} || ' ' if $tagInfo and not $vr; if ($element == 0) { $vr = 'UL'; # group length element is always unsigned long } my $val; my $format = $dicomFormat{$vr}; if ($len > 1024) { # treat large data elements as binary data my $binData; my $lcTag = $tagInfo ? lc($$tagInfo{Name}) : 'unknown'; if ($$et{REQ_TAG_LOOKUP}{$lcTag} or ($$et{OPTIONS}{Binary} and not $$et{EXCL_TAG_LOOKUP}{$lcTag})) { $binData = $buff; # must make a copy } else { $binData = "Binary data $len bytes"; } $val = \$binData; } elsif ($format) { $val = ReadValue(\$buff, 0, $format, undef, $len); } else { $val = $buff; $format = 'string'; if ($vr eq 'DA') { # format date values $val =~ s/^(\d{4})(\d{2})(\d{2})/$1:$2:$3/; } elsif ($vr eq 'TM') { # format time values $val =~ s/^(\d{2})(\d{2})(\d{2}.*)/$1:$2:$3/; } elsif ($vr eq 'DT') { # format date/time values $val =~ s/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2}.*)/$1:$2:$3 $4:$5:$6/; } elsif ($vr eq 'AT' and $len == 4) { # convert attribute tag ID to hex format my ($g, $e) = (Get16u(\$buff,0), Get16u(\$buff,2)); $val = sprintf('%.4X,%.4X', $g, $e); } elsif ($vr eq 'UI') { # add PrintConv to translate registered UID's $val =~ s/\0.*//s; # truncate at null $$tagInfo{PrintConv} = \%uid if $uid{$val} and $tagInfo; } } # save the group 2 end position and transfer syntax if ($group == 0x0002) { $element == 0x0000 and $group2end = $pos + $val; $element == 0x0010 and $transferSyntax = $val; } # handle the new tag information $et->HandleTag($tagTablePtr, $tag, $val, DataPt => \$buff, DataPos => $pos - $len, Format => $format, Start => 0, Size => $len, Extra => " ($vr)", ); # stop indenting for list if we reached EndOfItems tag $$et{INDENT} =~ s/..$// if $verbose and $tag eq 'FFFE,E00D'; } $err and $et->Warn('Error reading DICOM file (corrupted?)'); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::DICOM - Read DICOM and ACR-NEMA medical images =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to extract meta information from DICOM (Digital Imaging and Communications in Medicine) DCM and ACR-NEMA (American College of Radiology - National Electrical Manufacturer's Association) ACR medical images. =head1 NOTES Images compressed using the DICOM deflated transfer syntax will be decoded if Compress::Zlib is installed. No translation of special characters sets is done. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://medical.nema.org/> =item L<http://www.sph.sc.edu/comd/rorden/dicom.html> =item L<http://www.dclunie.com/> =item L<http://www.gehealthcare.com/usen/interoperability/dicom/docs/2258357r3.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/DICOM Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/DjVu.pm�����������������������������������������������������000644 �000765 �000024 �00000030406 12642461273 021124� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: DjVu.pm # # Description: Read DjVu archive meta information # # Revisions: 09/25/2008 - P. Harvey Created # # References: 1) http://djvu.sourceforge.net/ (DjVu v3 specification, Nov 2005) # 2) http://www.djvu.org/ # # Notes: DjVu files are recognized and the IFF structure is processed # by Image::ExifTool::AIFF #------------------------------------------------------------------------------ package Image::ExifTool::DjVu; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.05'; sub ParseAnt($); sub ProcessAnt($$$); sub ProcessMeta($$$); sub ProcessBZZ($$$); # DjVu chunks that we parse (ref 4) %Image::ExifTool::DjVu::Main = ( GROUPS => { 2 => 'Image' }, NOTES => q{ Information is extracted from the following chunks in DjVu images. See L<http://www.djvu.org/> for the DjVu specification. }, INFO => { SubDirectory => { TagTable => 'Image::ExifTool::DjVu::Info' }, }, FORM => { TypeOnly => 1, # extract chunk type only, then descend into chunk SubDirectory => { TagTable => 'Image::ExifTool::DjVu::Form' }, }, ANTa => { SubDirectory => { TagTable => 'Image::ExifTool::DjVu::Ant' }, }, ANTz => { Name => 'CompressedAnnotation', SubDirectory => { TagTable => 'Image::ExifTool::DjVu::Ant', ProcessProc => \&ProcessBZZ, } }, INCL => 'IncludedFileID', ); # information in the DjVu INFO chunk %Image::ExifTool::DjVu::Info = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, FORMAT => 'int8u', PRIORITY => 0, # first INFO block takes priority 0 => { Name => 'ImageWidth', Format => 'int16u', }, 2 => { Name => 'ImageHeight', Format => 'int16u', }, 4 => { Name => 'DjVuVersion', Description => 'DjVu Version', Format => 'int8u[2]', # (this may be just one byte as with version 0.16) ValueConv => '$val=~/(\d+) (\d+)/ ? "$2.$1" : "0.$val"', }, 6 => { Name => 'SpatialResolution', Format => 'int16u', ValueConv => '(($val & 0xff)<<8) + ($val>>8)', # (little-endian!) }, 8 => { Name => 'Gamma', ValueConv => '$val / 10', }, 9 => { Name => 'Orientation', Mask => 0x07, # (upper 5 bits reserved) PrintConv => { 1 => 'Horizontal (normal)', 2 => 'Rotate 180', 5 => 'Rotate 90 CW', 6 => 'Rotate 270 CW', }, }, ); # information in the DjVu FORM chunk %Image::ExifTool::DjVu::Form = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'SubfileType', Format => 'undef[4]', Priority => 0, PrintConv => { DJVU => 'Single-page image', DJVM => 'Multi-page document', PM44 => 'Color IW44', BM44 => 'Grayscale IW44', DJVI => 'Shared component', THUM => 'Thumbnail image', }, }, ); # tags found in the DjVu annotation chunk (ANTz or ANTa) %Image::ExifTool::DjVu::Ant = ( PROCESS_PROC => \&Image::ExifTool::DjVu::ProcessAnt, GROUPS => { 2 => 'Image' }, NOTES => 'Information extracted from annotation chunks.', # Note: For speed, ProcessAnt() pre-scans for known tag ID's, so if any # new tags are added here they must also be added to the pre-scan check metadata => { SubDirectory => { TagTable => 'Image::ExifTool::DjVu::Meta' } }, xmp => { Name => 'XMP', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' } }, ); # tags found in the DjVu annotation metadata %Image::ExifTool::DjVu::Meta = ( PROCESS_PROC => \&Image::ExifTool::DjVu::ProcessMeta, GROUPS => { 1 => 'DjVu-Meta', 2 => 'Image' }, NOTES => q{ This table lists the standard DjVu metadata tags, but ExifTool will extract any tags that exist even if they don't appear here. The DjVu v3 documentation endorses tags borrowed from two standards: 1) BibTeX bibliography system tags (all lowercase Tag ID's in the table below), and 2) PDF DocInfo tags (capitalized Tag ID's). }, # BibTeX tags (ref http://en.wikipedia.org/wiki/BibTeX) address => { Groups => { 2 => 'Location' } }, annote => { Name => 'Annotation' }, author => { Groups => { 2 => 'Author' } }, booktitle => { Name => 'BookTitle' }, chapter => { }, crossref => { Name => 'CrossRef' }, edition => { }, eprint => { Name => 'EPrint' }, howpublished=> { Name => 'HowPublished' }, institution => { }, journal => { }, key => { }, month => { Groups => { 2 => 'Time' } }, note => { }, number => { }, organization=> { }, pages => { }, publisher => { }, school => { }, series => { }, title => { }, type => { }, url => { Name => 'URL' }, volume => { }, year => { Groups => { 2 => 'Time' } }, # PDF tags (same as Image::ExifTool::PDF::Info) Title => { }, Author => { Groups => { 2 => 'Author' } }, Subject => { }, Keywords => { }, Creator => { }, Producer => { }, CreationDate => { Name => 'CreateDate', Groups => { 2 => 'Time' }, # RFC 3339 date/time format ValueConv => 'require Image::ExifTool::XMP; Image::ExifTool::XMP::ConvertXMPDate($val)', PrintConv => '$self->ConvertDateTime($val)', }, ModDate => { Name => 'ModifyDate', Groups => { 2 => 'Time' }, ValueConv => 'require Image::ExifTool::XMP; Image::ExifTool::XMP::ConvertXMPDate($val)', PrintConv => '$self->ConvertDateTime($val)', }, Trapped => { # remove leading '/' from '/True' or '/False' ValueConv => '$val=~s{^/}{}; $val', }, ); #------------------------------------------------------------------------------ # Parse DjVu annotation "s-expression" syntax (recursively) # Inputs: 0) data ref (with pos($$dataPt) set to start of annotation) # Returns: reference to list of tokens/references, or undef if no tokens, # and the position in $$dataPt is set to end of last token # Notes: The DjVu annotation syntax is not well documented, so I make # a number of assumptions here! sub ParseAnt($) { my $dataPt = shift; my (@toks, $tok, $more); # (the DjVu annotation syntax really sucks, and requires that every # single token be parsed in order to properly scan through the items) Tok: for (;;) { # find the next token last unless $$dataPt =~ /(\S)/sg; # get next non-space character if ($1 eq '(') { # start of list $tok = ParseAnt($dataPt); } elsif ($1 eq ')') { # end of list $more = 1; last; } elsif ($1 eq '"') { # quoted string $tok = ''; for (;;) { # get string up to the next quotation mark # this doesn't work in perl 5.6.2! grrrr # last Tok unless $$dataPt =~ /(.*?)"/sg; # $tok .= $1; my $pos = pos($$dataPt); last Tok unless $$dataPt =~ /"/sg; $tok .= substr($$dataPt, $pos, pos($$dataPt)-1-$pos); # we're good unless quote was escaped by odd number of backslashes last unless $tok =~ /(\\+)$/ and length($1) & 0x01; $tok .= '"'; # quote is part of the string } # convert C escape sequences (allowed in quoted text) $tok = eval qq{"$tok"}; } else { # key name pos($$dataPt) = pos($$dataPt) - 1; # allow anything in key but whitespace, braces and double quotes # (this is one of those assumptions I mentioned) $$dataPt =~ /([^\s()"]+)/sg; $tok = $1; } push @toks, $tok if defined $tok; } # prevent further parsing unless more after this pos($$dataPt) = length $$dataPt unless $more; return @toks ? \@toks : undef; } #------------------------------------------------------------------------------ # Process DjVu annotation chunk (ANTa or decoded ANTz) # Inputs: 0) ExifTool object reference, 1) DirInfo reference, 2) tag table ref # Returns: 1 on success sub ProcessAnt($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; # quick pre-scan to check for metadata or XMP return 1 unless $$dataPt =~ /\(\s*(metadata|xmp)[\s("]/s; # parse annotations into a tree structure pos($$dataPt) = 0; my $toks = ParseAnt($dataPt) or return 0; # process annotations individually my $ant; foreach $ant (@$toks) { next unless ref $ant eq 'ARRAY' and @$ant >= 2; my $tag = shift @$ant; next if ref $tag or not defined $$tagTablePtr{$tag}; if ($tag eq 'metadata') { # ProcessMeta() takes array reference $et->HandleTag($tagTablePtr, $tag, $ant); } else { next if ref $$ant[0]; # only process simple values $et->HandleTag($tagTablePtr, $tag, $$ant[0]); } } return 1; } #------------------------------------------------------------------------------ # Process DjVu metadata # Inputs: 0) ExifTool object reference, 1) DirInfo reference, 2) tag table ref # Returns: 1 on success # Notes: input dirInfo DataPt is a reference to a list of pre-parsed metadata entries sub ProcessMeta($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; return 0 unless ref $$dataPt eq 'ARRAY'; $et->VerboseDir('Metadata', scalar @$$dataPt); my ($item, $err); foreach $item (@$$dataPt) { # make sure item is a simple tag/value pair $err=1, next unless ref $item eq 'ARRAY' and @$item >= 2 and not ref $$item[0] and not ref $$item[1]; # add any new tags to the table unless ($$tagTablePtr{$$item[0]}) { my $name = $$item[0]; $name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters length $name or $err = 1, next; AddTagToTable($tagTablePtr, $$item[0], { Name => ucfirst($name) }); } $et->HandleTag($tagTablePtr, $$item[0], $$item[1]); } $err and $et->Warn('Ignored invalid metadata entry(s)'); return 1; } #------------------------------------------------------------------------------ # Process BZZ-compressed data (in DjVu images) # Inputs: 0) ExifTool object reference, 1) DirInfo reference, 2) tag table ref # Returns: 1 on success sub ProcessBZZ($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; require Image::ExifTool::BZZ; my $buff = Image::ExifTool::BZZ::Decode($$dirInfo{DataPt}); unless (defined $buff) { $et->Warn("Error decoding $$dirInfo{DirName}"); return 0; } my $verbose = $et->Options('Verbose'); if ($verbose >= 3) { # dump the decoded data in very verbose mode $et->VerboseDir("Decoded $$dirInfo{DirName}", 0, length $buff); $et->VerboseDump(\$buff); } $$dirInfo{DataPt} = \$buff; $$dirInfo{DataLen} = $$dirInfo{DirLen} = length $buff; # process the data using the default process proc for this table my $processProc = $$tagTablePtr{PROCESS_PROC} or return 0; return &$processProc($et, $dirInfo, $tagTablePtr); } 1; # end __END__ =head1 NAME Image::ExifTool::DjVu - Read DjVu meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from DjVu images. Parsing of the DjVu IFF structure is done by Image::ExifTool::AIFF. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://djvu.sourceforge.net/> =item L<http://www.djvu.org/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/DjVu Tags>, L<Image::ExifTool::AIFF(3pm)|Image::ExifTool::AIFF>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/DNG.pm������������������������������������������������������000644 �000765 �000024 �00000076363 12642461272 020677� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: DNG.pm # # Description: Read DNG-specific information # # Revisions: 01/09/2006 - P. Harvey Created # # References: 1) http://www.adobe.com/products/dng/ #------------------------------------------------------------------------------ package Image::ExifTool::DNG; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; use Image::ExifTool::MakerNotes; use Image::ExifTool::CanonRaw; $VERSION = '1.22'; sub ProcessOriginalRaw($$$); sub ProcessAdobeData($$$); sub ProcessAdobeMakN($$$); sub ProcessAdobeCRW($$$); sub ProcessAdobeRAF($$$); sub ProcessAdobeMRW($$$); sub ProcessAdobeSR2($$$); sub ProcessAdobeIFD($$$); sub WriteAdobeStuff($$$); # data in OriginalRawFileData %Image::ExifTool::DNG::OriginalRaw = ( GROUPS => { 2 => 'Image' }, PROCESS_PROC => \&ProcessOriginalRaw, NOTES => q{ This table defines tags extracted from the DNG OriginalRawFileData information. }, 0 => { Name => 'OriginalRawImage', Binary => 1 }, 1 => { Name => 'OriginalRawResource', Binary => 1 }, 2 => 'OriginalRawFileType', 3 => 'OriginalRawCreator', 4 => { Name => 'OriginalTHMImage', Binary => 1 }, 5 => { Name => 'OriginalTHMResource', Binary => 1 }, 6 => 'OriginalTHMFileType', 7 => 'OriginalTHMCreator', ); %Image::ExifTool::DNG::AdobeData = ( #PH GROUPS => { 0 => 'MakerNotes', 1 => 'AdobeDNG', 2 => 'Image' }, PROCESS_PROC => \&ProcessAdobeData, WRITE_PROC => \&WriteAdobeStuff, NOTES => q{ This information is found in the "Adobe" DNGPrivateData. The maker notes ('MakN') are processed by ExifTool, but some information may have been lost by the Adobe DNG Converter. This is because the Adobe DNG Converter (as of version 6.3) doesn't properly handle information referenced from inside the maker notes that lies outside the original maker notes block. This information is lost when only the maker note block is copied to the DNG image. While this doesn't effect all makes of cameras, it is a problem for some major brands such as Olympus and Sony. Other entries in this table represent proprietary information that is extracted from the original RAW image and restructured to a different (but still proprietary) Adobe format. }, MakN => [ ], # (filled in later) 'CRW ' => { Name => 'AdobeCRW', SubDirectory => { TagTable => 'Image::ExifTool::CanonRaw::Main', ProcessProc => \&ProcessAdobeCRW, WriteProc => \&WriteAdobeStuff, }, }, 'MRW ' => { Name => 'AdobeMRW', SubDirectory => { TagTable => 'Image::ExifTool::MinoltaRaw::Main', ProcessProc => \&ProcessAdobeMRW, WriteProc => \&WriteAdobeStuff, }, }, 'SR2 ' => { Name => 'AdobeSR2', SubDirectory => { TagTable => 'Image::ExifTool::Sony::SR2Private', ProcessProc => \&ProcessAdobeSR2, }, }, 'RAF ' => { Name => 'AdobeRAF', SubDirectory => { TagTable => 'Image::ExifTool::FujiFilm::RAF', ProcessProc => \&ProcessAdobeRAF, }, }, 'Pano' => { Name => 'AdobePano', SubDirectory => { TagTable => 'Image::ExifTool::PanasonicRaw::Main', ProcessProc => \&ProcessAdobeIFD, }, }, 'Koda' => { Name => 'AdobeKoda', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::IFD', ProcessProc => \&ProcessAdobeIFD, }, }, 'Leaf' => { Name => 'AdobeLeaf', SubDirectory => { TagTable => 'Image::ExifTool::Leaf::SubIFD', ProcessProc => \&ProcessAdobeIFD, }, }, ); # fill in maker notes { my $tagInfo; my $list = $Image::ExifTool::DNG::AdobeData{MakN}; foreach $tagInfo (@Image::ExifTool::MakerNotes::Main) { unless (ref $tagInfo eq 'HASH') { push @$list, $tagInfo; next; } my %copy = %$tagInfo; delete $copy{Groups}; delete $copy{GotGroups}; delete $copy{Table}; push @$list, \%copy; } } #------------------------------------------------------------------------------ # Process DNG OriginalRawFileData information # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, otherwise returns 0 and sets a Warning sub ProcessOriginalRaw($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $start = $$dirInfo{DirStart}; my $end = $start + $$dirInfo{DirLen}; my $pos = $start; my ($index, $err); SetByteOrder('MM'); # pointers are always big-endian in this structure for ($index=0; $index<8; ++$index) { last if $pos + 4 > $end; my $val = Get32u($dataPt, $pos); $val or $pos += 4, next; # ignore zero values my $tagInfo = $et->GetTagInfo($tagTablePtr, $index); $tagInfo or $err = "Missing DNG tag $index", last; if ($index & 0x02) { # extract a simple file type (tags 2, 3, 6 and 7) $val = substr($$dataPt, $pos, 4); $pos += 4; } else { # extract a compressed data block (tags 0, 1, 4 and 5) my $n = int(($val + 65535) / 65536); my $hdrLen = 4 * ($n + 2); $pos + $hdrLen > $end and $err = '', last; my $tag = $$tagInfo{Name}; # only extract this information if requested (because it takes time) my $lcTag = lc $tag; if (($$et{OPTIONS}{Binary} and not $$et{EXCL_TAG_LOOKUP}{$lcTag}) or $$et{REQ_TAG_LOOKUP}{$lcTag}) { unless (eval { require Compress::Zlib }) { $err = 'Install Compress::Zlib to extract compressed images'; last; } my $i; $val = ''; my $p2 = $pos + Get32u($dataPt, $pos + 4); for ($i=0; $i<$n; ++$i) { # inflate this compressed block my $p1 = $p2; $p2 = $pos + Get32u($dataPt, $pos + ($i + 2) * 4); if ($p1 >= $p2 or $p2 > $end) { $err = 'Bad compressed RAW image'; last; } my $buff = substr($$dataPt, $p1, $p2 - $p1); my ($v2, $stat); my $inflate = Compress::Zlib::inflateInit(); $inflate and ($v2, $stat) = $inflate->inflate($buff); if ($inflate and $stat == Compress::Zlib::Z_STREAM_END()) { $val .= $v2; } else { $err = 'Error inflating compressed RAW image'; last; } } $pos = $p2; } else { $pos + $hdrLen > $end and $err = '', last; my $len = Get32u($dataPt, $pos + $hdrLen - 4); $pos + $len > $end and $err = '', last; $val = substr($$dataPt, $pos + $hdrLen, $len - $hdrLen); $val = "Binary data $len bytes"; $pos += $len; # skip over this block } } $et->FoundTag($tagInfo, $val); } $et->Warn($err || 'Bad OriginalRawFileData') if defined $err; return 1; } #------------------------------------------------------------------------------ # Process Adobe DNGPrivateData directory # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessAdobeData($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos}; my $pos = $$dirInfo{DirStart}; my $end = $$dirInfo{DirLen} + $pos; my $outfile = $$dirInfo{OutFile}; my $verbose = $et->Options('Verbose'); my $htmlDump = $et->Options('HtmlDump'); return 0 unless $$dataPt =~ /^Adobe\0/; unless ($outfile) { $et->VerboseDir($dirInfo); # don't parse makernotes if FastScan > 1 my $fast = $et->Options('FastScan'); return 1 if $fast and $fast > 1; } $htmlDump and $et->HDump($dataPos, 6, 'Adobe DNGPrivateData header'); SetByteOrder('MM'); # always big endian $pos += 6; while ($pos + 8 <= $end) { my ($tag, $size) = unpack("x${pos}a4N", $$dataPt); $pos += 8; last if $pos + $size > $end; my $tagInfo = $$tagTablePtr{$tag}; if ($htmlDump) { my $name = "Adobe$tag"; $name =~ tr/ //d; $et->HDump($dataPos + $pos - 8, 8, "$name header", "Data Size: $size bytes"); # dump non-EXIF format data unless ($tag =~ /^(MakN|SR2 )$/) { $et->HDump($dataPos + $pos, $size, "$name data"); } } if ($verbose and not $outfile) { $tagInfo or $et->VPrint(0, "$$et{INDENT}Unsupported DNGAdobeData record: ($tag)\n"); $et->VerboseInfo($tag, ref $tagInfo eq 'HASH' ? $tagInfo : undef, DataPt => $dataPt, DataPos => $dataPos, Start => $pos, Size => $size, ); } my $value; while ($tagInfo) { my ($subTable, $subName, $processProc); if (ref $tagInfo eq 'HASH') { unless ($$tagInfo{SubDirectory}) { if ($outfile) { # copy value across to outfile $value = substr($$dataPt, $pos, $size); } else { $et->HandleTag($tagTablePtr, $tag, substr($$dataPt, $pos, $size)); } last; } $subTable = GetTagTable($tagInfo->{SubDirectory}->{TagTable}); $subName = $$tagInfo{Name}; $processProc = $tagInfo->{SubDirectory}->{ProcessProc}; } else { $subTable = $tagTablePtr; $subName = 'AdobeMakN'; $processProc = \&ProcessAdobeMakN; } my %dirInfo = ( Base => $$dirInfo{Base}, DataPt => $dataPt, DataPos => $dataPos, DataLen => $$dirInfo{DataLen}, DirStart => $pos, DirLen => $size, DirName => $subName, ); if ($outfile) { $dirInfo{Proc} = $processProc; # WriteAdobeStuff() calls this to do the actual writing $value = $et->WriteDirectory(\%dirInfo, $subTable, \&WriteAdobeStuff); # use old directory if an error occurred defined $value or $value = substr($$dataPt, $pos, $size); } else { # override process proc for MakN $et->ProcessDirectory(\%dirInfo, $subTable, $processProc); } last; } if (defined $value and length $value) { # add "Adobe" header if necessary $$outfile = "Adobe\0" unless $$outfile and length $$outfile; $$outfile .= $tag . pack('N', length $value) . $value; $$outfile .= "\0" if length($value) & 0x01; # pad if necessary } $pos += $size; ++$pos if $size & 0x01; # (darn padding) } $pos == $end or $et->Warn("$pos $end Adobe private data is corrupt"); return 1; } #------------------------------------------------------------------------------ # Process Adobe CRW directory # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, otherwise returns 0 and sets a Warning # Notes: data has 4 byte header (2 for byte order and 2 for entry count) # - this routine would be as simple as ProcessAdobeMRW() below if Adobe hadn't # pulled the bonehead move of reformatting the CRW information sub ProcessAdobeCRW($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $start = $$dirInfo{DirStart}; my $end = $start + $$dirInfo{DirLen}; my $verbose = $et->Options('Verbose'); my $buildMakerNotes = $et->Options('MakerNotes'); my $outfile = $$dirInfo{OutFile}; my ($newTags, $oldChanged); SetByteOrder('MM'); # always big endian return 0 if $$dirInfo{DirLen} < 4; my $byteOrder = substr($$dataPt, $start, 2); return 0 unless $byteOrder =~ /^(II|MM)$/; # initialize maker note data if building maker notes $buildMakerNotes and Image::ExifTool::CanonRaw::InitMakerNotes($et); my $entries = Get16u($dataPt, $start + 2); my $pos = $start + 4; $et->VerboseDir($dirInfo, $entries) unless $outfile; if ($outfile) { # get hash of new tags $newTags = $et->GetNewTagInfoHash($tagTablePtr); $$outfile = substr($$dataPt, $start, 4); $oldChanged = $$et{CHANGED}; } # loop through entries in Adobe CRW information my $index; for ($index=0; $index<$entries; ++$index) { last if $pos + 6 > $end; my $tag = Get16u($dataPt, $pos); my $size = Get32u($dataPt, $pos + 2); $pos += 6; last if $pos + $size > $end; my $value = substr($$dataPt, $pos, $size); my $tagID = $tag & 0x3fff; my $tagType = ($tag >> 8) & 0x38; # get tag type my $format = $Image::ExifTool::CanonRaw::crwTagFormat{$tagType}; my $count; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tagID, \$value); if ($tagInfo) { $format = $$tagInfo{Format} if $$tagInfo{Format}; $count = $$tagInfo{Count}; } # set count to 1 by default for values that were in the directory entry if (not defined $count and $tag & 0x4000 and $format and $format ne 'string') { $count = 1; } # set count from tagInfo count if necessary if ($format and not $count) { # set count according to format and size my $fnum = $Image::ExifTool::Exif::formatNumber{$format}; my $fsiz = $Image::ExifTool::Exif::formatSize[$fnum]; $count = int($size / $fsiz); } $format or $format = 'undef'; SetByteOrder($byteOrder); my $val = ReadValue(\$value, 0, $format, $count, $size); if ($outfile) { if ($tagInfo) { my $subdir = $$tagInfo{SubDirectory}; if ($subdir and $$subdir{TagTable}) { my $name = $$tagInfo{Name}; my $newTagTable = GetTagTable($$subdir{TagTable}); return 0 unless $newTagTable; my $subdirStart = 0; #### eval Start () $subdirStart = eval $$subdir{Start} if $$subdir{Start}; my $dirData = \$value; my %subdirInfo = ( Name => $name, DataPt => $dirData, DataLen => $size, DirStart => $subdirStart, DirLen => $size - $subdirStart, Parent => $$dirInfo{DirName}, ); #### eval Validate ($dirData, $subdirStart, $size) if (defined $$subdir{Validate} and not eval $$subdir{Validate}) { $et->Warn("Invalid $name data"); } else { $subdir = $et->WriteDirectory(\%subdirInfo, $newTagTable); if (defined $subdir and length $subdir) { if ($subdirStart) { # add header before data directory $value = substr($value, 0, $subdirStart) . $subdir; } else { $value = $subdir; } } } } elsif ($$newTags{$tagID}) { my $nvHash = $et->GetNewValueHash($tagInfo); if ($et->IsOverwriting($nvHash, $val)) { my $newVal = $et->GetNewValue($nvHash); my $verboseVal; $verboseVal = $newVal if $verbose > 1; # convert to specified format if necessary if (defined $newVal and $format) { $newVal = WriteValue($newVal, $format, $count); } if (defined $newVal) { $et->VerboseValue("- CanonRaw:$$tagInfo{Name}", $value); $et->VerboseValue("+ CanonRaw:$$tagInfo{Name}", $verboseVal); $value = $newVal; ++$$et{CHANGED}; } } } } # write out new value (always big-endian) SetByteOrder('MM'); # (verified that there is no padding here) $$outfile .= Set16u($tag) . Set32u(length($value)) . $value; } else { $et->HandleTag($tagTablePtr, $tagID, $val, Index => $index, DataPt => $dataPt, DataPos => $$dirInfo{DataPos}, Start => $pos, Size => $size, TagInfo => $tagInfo, ); if ($buildMakerNotes) { # build maker notes information if requested Image::ExifTool::CanonRaw::BuildMakerNotes($et, $tagID, $tagInfo, \$value, $format, $count); } } # (we lost the directory structure, but the second tag 0x0805 # should be in the ImageDescription directory) $$et{DIR_NAME} = 'ImageDescription' if $tagID == 0x0805; SetByteOrder('MM'); $pos += $size; } if ($outfile and (not defined $$outfile or $index != $entries or $$et{CHANGED} == $oldChanged)) { $$et{CHANGED} = $oldChanged; # nothing changed undef $$outfile; # rewrite old directory } if ($index != $entries) { $et->Warn('Truncated CRW notes'); } elsif ($pos < $end) { $et->Warn($end-$pos . ' extra bytes at end of CRW notes'); } # finish building maker notes if necessary if ($buildMakerNotes) { SetByteOrder($byteOrder); Image::ExifTool::CanonRaw::SaveMakerNotes($et); } return 1; } #------------------------------------------------------------------------------ # Process Adobe MRW directory # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, otherwise returns 0 and sets a Warning # Notes: data has 4 byte header (2 for byte order and 2 for entry count) sub ProcessAdobeMRW($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirLen = $$dirInfo{DirLen}; my $dirStart = $$dirInfo{DirStart}; my $outfile = $$dirInfo{OutFile}; # construct fake MRW file my $buff = "\0MRM" . pack('N', $dirLen - 4); # ignore leading byte order and directory count words $buff .= substr($$dataPt, $dirStart + 4, $dirLen - 4); my $raf = new File::RandomAccess(\$buff); my %dirInfo = ( RAF => $raf, OutFile => $outfile ); my $rtnVal = Image::ExifTool::MinoltaRaw::ProcessMRW($et, \%dirInfo); if ($outfile and defined $$outfile and length $$outfile) { # remove MRW header and add Adobe header $$outfile = substr($$dataPt, $dirStart, 4) . substr($$outfile, 8); } return $rtnVal; } #------------------------------------------------------------------------------ # Process Adobe RAF directory # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, otherwise returns 0 and sets a Warning sub ProcessAdobeRAF($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; return 0 if $$dirInfo{OutFile}; # (can't write this yet) my $dataPt = $$dirInfo{DataPt}; my $pos = $$dirInfo{DirStart}; my $dirEnd = $$dirInfo{DirLen} + $pos; my ($readIt, $warn); # set byte order according to first 2 bytes of Adobe RAF data if ($pos + 2 <= $dirEnd and SetByteOrder(substr($$dataPt, $pos, 2))) { $pos += 2; } else { $et->Warn('Invalid DNG RAF data'); return 0; } $et->VerboseDir($dirInfo); # make fake RAF object for processing (same acronym, different meaning) my $raf = new File::RandomAccess($dataPt); my $num = ''; # loop through all records in Adobe RAF data: # 0 - RAF table (not processed) # 1 - first RAF directory # 2 - second RAF directory (if available) for (;;) { last if $pos + 4 > $dirEnd; my $len = Get32u($dataPt, $pos); $pos += 4 + $len; # step to next entry in Adobe RAF record $len or last; # ends with an empty entry $readIt or $readIt = 1, next; # ignore first entry (RAF table) my %dirInfo = ( RAF => $raf, DirStart => $pos - $len, ); $$et{SET_GROUP1} = "RAF$num"; $et->ProcessDirectory(\%dirInfo, $tagTablePtr) or $warn = 1; delete $$et{SET_GROUP1}; $num = ($num || 1) + 1; } $warn and $et->Warn('Possibly corrupt RAF information'); return 1; } #------------------------------------------------------------------------------ # Process Adobe SR2 directory # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, otherwise returns 0 and sets a Warning # Notes: data has 6 byte header (2 for byte order and 4 for original offset) sub ProcessAdobeSR2($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; return 0 if $$dirInfo{OutFile}; # (can't write this yet) my $dataPt = $$dirInfo{DataPt}; my $start = $$dirInfo{DirStart}; my $len = $$dirInfo{DirLen}; return 0 if $len < 6; SetByteOrder('MM'); my $originalPos = Get32u($dataPt, $start + 2); return 0 unless SetByteOrder(substr($$dataPt, $start, 2)); $et->VerboseDir($dirInfo); my $dataPos = $$dirInfo{DataPos}; my $dirStart = $start + 6; # pointer to maker note directory my $dirLen = $len - 6; # initialize subdirectory information my $fix = $dataPos + $dirStart - $originalPos; my %subdirInfo = ( DirName => 'AdobeSR2', Base => $$dirInfo{Base} + $fix, DataPt => $dataPt, DataPos => $dataPos - $fix, DataLen => $$dirInfo{DataLen}, DirStart => $dirStart, DirLen => $dirLen, Parent => $$dirInfo{DirName}, ); if ($et->Options('HtmlDump')) { $et->HDump($dataPos + $start, 6, 'Adobe SR2 data'); } # parse the SR2 directory $et->ProcessDirectory(\%subdirInfo, $tagTablePtr); return 1; } #------------------------------------------------------------------------------ # Process Adobe-mutilated IFD directory # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, otherwise returns 0 and sets a Warning # Notes: data has 2 byte header (byte order of the data) sub ProcessAdobeIFD($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; return 0 if $$dirInfo{OutFile}; # (can't write this yet) my $dataPt = $$dirInfo{DataPt}; my $pos = $$dirInfo{DirStart}; my $dataPos = $$dirInfo{DataPos}; return 0 if $$dirInfo{DirLen} < 4; my $dataOrder = substr($$dataPt, $pos, 2); return 0 unless SetByteOrder($dataOrder); # validate byte order of data # parse the mutilated IFD. This is similar to a TIFF IFD, except: # - data follows directly after Count entry in IFD # - byte order of IFD entires is always big-endian, but byte order of data changes SetByteOrder('MM'); # IFD structure is always big-endian my $entries = Get16u($dataPt, $pos + 2); $et->VerboseDir($dirInfo, $entries); $pos += 4; my $end = $pos + $$dirInfo{DirLen}; my $index; for ($index=0; $index<$entries; ++$index) { last if $pos + 8 > $end; SetByteOrder('MM'); # directory entries always big-endian (doh!) my $tagID = Get16u($dataPt, $pos); my $format = Get16u($dataPt, $pos+2); my $count = Get32u($dataPt, $pos+4); if ($format < 1 or $format > 13) { # warn unless the IFD was just padded with zeros $format and $et->Warn( sprintf("Unknown format ($format) for $$dirInfo{DirName} tag 0x%x",$tagID)); return 0; # must be corrupted } my $size = $Image::ExifTool::Exif::formatSize[$format] * $count; last if $pos + 8 + $size > $end; my $formatStr = $Image::ExifTool::Exif::formatName[$format]; SetByteOrder($dataOrder); # data stored in native order my $val = ReadValue($dataPt, $pos + 8, $formatStr, $count, $size); $et->HandleTag($tagTablePtr, $tagID, $val, Index => $index, DataPt => $dataPt, DataPos => $dataPos, Start => $pos + 8, Size => $size ); $pos += 8 + $size; } if ($index < $entries) { $et->Warn("Truncated $$dirInfo{DirName} directory"); return 0; } return 1; } #------------------------------------------------------------------------------ # Process Adobe MakerNotes directory # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, otherwise returns 0 and sets a Warning # Notes: data has 6 byte header (2 for byte order and 4 for original offset) sub ProcessAdobeMakN($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $start = $$dirInfo{DirStart}; my $len = $$dirInfo{DirLen}; my $outfile = $$dirInfo{OutFile}; return 0 if $len < 6; SetByteOrder('MM'); my $originalPos = Get32u($dataPt, $start + 2); return 0 unless SetByteOrder(substr($$dataPt, $start, 2)); $et->VerboseDir($dirInfo) unless $outfile; my $dataPos = $$dirInfo{DataPos}; my $dirStart = $start + 6; # pointer to maker note directory my $dirLen = $len - 6; my $hdr = substr($$dataPt, $dirStart, $dirLen < 48 ? $dirLen : 48); my $tagInfo = $et->GetTagInfo($tagTablePtr, 'MakN', \$hdr); return 0 unless $tagInfo and $$tagInfo{SubDirectory}; my $subdir = $$tagInfo{SubDirectory}; my $subTable = GetTagTable($$subdir{TagTable}); # initialize subdirectory information my %subdirInfo = ( DirName => 'MakerNotes', Name => $$tagInfo{Name}, # needed for maker notes verbose dump Base => $$dirInfo{Base}, DataPt => $dataPt, DataPos => $dataPos, DataLen => $$dirInfo{DataLen}, DirStart => $dirStart, DirLen => $dirLen, TagInfo => $tagInfo, FixBase => $$subdir{FixBase}, EntryBased=> $$subdir{EntryBased}, Parent => $$dirInfo{DirName}, ); # look for start of maker notes IFD my $loc = Image::ExifTool::MakerNotes::LocateIFD($et,\%subdirInfo); unless (defined $loc) { $et->Warn('Maker notes could not be parsed'); return 0; } if ($et->Options('HtmlDump')) { $et->HDump($dataPos + $start, 6, 'Adobe MakN data'); $et->HDump($dataPos + $dirStart, $loc, "$$tagInfo{Name} header") if $loc; } my $fix = 0; unless ($$subdir{Base}) { # adjust base offset for current maker note position $fix = $dataPos + $dirStart - $originalPos; $subdirInfo{Base} += $fix; $subdirInfo{DataPos} -= $fix; } if ($outfile) { # rewrite the maker notes directory my $fixup = $subdirInfo{Fixup} = new Image::ExifTool::Fixup; my $oldChanged = $$et{CHANGED}; my $buff = $et->WriteDirectory(\%subdirInfo, $subTable); # nothing to do if error writing directory or nothing changed unless (defined $buff and $$et{CHANGED} != $oldChanged) { $$et{CHANGED} = $oldChanged; return 1; } # deleting maker notes if directory is empty unless (length $buff) { $$outfile = ''; return 1; } # apply a one-time fixup to offsets if ($subdirInfo{Relative}) { # shift all offsets to be relative to new base my $baseShift = $dataPos + $dirStart + $$dirInfo{Base} - $subdirInfo{Base}; $fixup->{Shift} += $baseShift; } else { # shift offsets to position of original maker notes $fixup->{Shift} += $originalPos; } # if we wrote the directory as a block the header is already included $loc = 0 if $subdirInfo{BlockWrite}; $fixup->{Shift} += $loc; # adjust for makernotes header $fixup->ApplyFixup(\$buff); # fix up pointer offsets # get copy of original Adobe header (6) and makernotes header ($loc) my $header = substr($$dataPt, $start, 6 + $loc); # add Adobe and makernotes headers to new directory $$outfile = $header . $buff; } else { # parse the maker notes directory $et->ProcessDirectory(\%subdirInfo, $subTable, $$subdir{ProcessProc}); # extract maker notes as a block if specified if ($et->Options('MakerNotes') or $$et{REQ_TAG_LOOKUP}{lc($$tagInfo{Name})}) { my $val; if ($$tagInfo{MakerNotes}) { $subdirInfo{Base} = $$dirInfo{Base} + $fix; $subdirInfo{DataPos} = $dataPos - $fix; $subdirInfo{DirStart} = $dirStart; $subdirInfo{DirLen} = $dirLen; # rebuild the maker notes to identify all offsets that require fixing up $val = Image::ExifTool::Exif::RebuildMakerNotes($et, $subTable, \%subdirInfo); if (not defined $val and $dirLen > 4) { $et->Warn('Error rebuilding maker notes (may be corrupt)'); } } else { # extract this directory as a block if specified return 1 unless $$tagInfo{Writable}; } $val = substr($$dataPt, 20) unless defined $val; $et->FoundTag($tagInfo, $val); } } return 1; } #------------------------------------------------------------------------------ # Write Adobe information (calls appropriate ProcessProc to do the actual work) # Inputs: 0) ExifTool object ref, 1) source dirInfo ref, 2) tag table ref # Returns: new data block (may be empty if directory is deleted) or undef on error sub WriteAdobeStuff($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access my $proc = $$dirInfo{Proc} || \&ProcessAdobeData; my $buff; $$dirInfo{OutFile} = \$buff; &$proc($et, $dirInfo, $tagTablePtr) or undef $buff; return $buff; } 1; # end __END__ =head1 NAME Image::ExifTool::DNG.pm - Read DNG-specific information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to process information in DNG (Digital Negative) images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.adobe.com/products/dng/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/DNG Tags>, L<Image::ExifTool::TagNames/EXIF Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/DPX.pm������������������������������������������������������000644 �000765 �000024 �00000016076 12642461272 020715� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: DPX.pm # # Description: Read DPX meta information # # Revisions: 2013-09-19 - P. Harvey created # # References: 1) http://www.cineon.com/ff_draft.php #------------------------------------------------------------------------------ package Image::ExifTool::DPX; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.02'; # DPX tags %Image::ExifTool::DPX::Main = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' }, NOTES => 'Tags extracted from DPX (Digital Picture Exchange) images.', 0 => { Name => 'ByteOrder', Format => 'undef[4]', PrintConv => { SDPX => 'Big-endian', XPDS => 'Little-endian' } }, 8 => { Name => 'HeaderVersion', Format => 'string[8]' }, # 24 => { Name => 'GenericHeaderSize', Format => 'int32u' }, # = 1664 # 28 => { Name => 'IndustryStandardHeaderSize', Format => 'int32u' }, # = 384 16 => { Name => 'DPXFileSize', Format => 'int32u' }, 20 => { Name => 'DittoKey', Format => 'int32u', PrintConv => { 0 => 'Same', 1 => 'New' } }, 36 => { Name => 'ImageFileName', Format => 'string[100]' }, 136 => { Name => 'CreateDate', Format => 'string[24]', Groups => { 2 => 'Time' }, ValueConv => '$val =~ s/(\d{4}:\d{2}:\d{2}):/$1 /; $val', PrintConv => '$self->ConvertDateTime($val)', }, 160 => { Name => 'Creator', Format => 'string[100]', Groups => { 2 => 'Author' } }, 260 => { Name => 'Project', Format => 'string[200]' }, 460 => { Name => 'Copyright', Format => 'string[200]', Groups => { 2 => 'Author' } }, 660 => { Name => 'EncryptionKey', Format => 'int32u', PrintConv => 'sprintf("%.8x",$val)' }, 768 => { Name => 'Orientation', Format => 'int16u', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Mirror vertical', 2 => 'Mirror horizontal', 3 => 'Rotate 180', 4 => 'Mirror horizontal and rotate 270 CW', 5 => 'Rotate 90 CW', 6 => 'Rotate 270 CW', 7 => 'Mirror horizontal and rotate 90 CW', }, }, 770 => { Name => 'ImageElements', Format => 'int16u' }, 772 => { Name => 'ImageWidth', Format => 'int32u' }, 776 => { Name => 'ImageHeight', Format => 'int32u' }, 780 => { Name => 'DataSign', Format => 'int32u', PrintConv => { 0 => 'Unsigned', 1 => 'Signed' } }, 800 => { Name => 'ComponentsConfiguration', Format => 'int8u', PrintConv => { 0 => 'User-defined single component', 1 => 'Red (R)', 2 => 'Green (G)', 3 => 'Blue (B)', 4 => 'Alpha (matte)', 6 => 'Luminance (Y)', 7 => 'Chrominance (Cb, Cr, subsampled by two)', 8 => 'Depth (Z)', 9 => 'Composite video', 50 => 'R, G, B', 51 => 'R, G, B, Alpha', 52 => 'Alpha, B, G, R', 100 => 'Cb, Y, Cr, Y (4:2:2)', 101 => 'Cb, Y, A, Cr, Y, A (4:2:2:4)', 102 => 'Cb, Y, Cr (4:4:4)', 103 => 'Cb, Y, Cr, A (4:4:4:4)', 150 => 'User-defined 2 component element', 151 => 'User-defined 3 component element', 152 => 'User-defined 4 component element', 153 => 'User-defined 5 component element', 154 => 'User-defined 6 component element', 155 => 'User-defined 7 component element', 156 => 'User-defined 8 component element', }, }, 803 => { Name => 'BitDepth', Format => 'int8u' }, 820 => { Name => 'ImageDescription', Format => 'string[32]' }, 892 => { Name => 'Image2Description', Format => 'string[32]', RawConv => '$val=~/[^\xff]/ ? $val : undef' }, 964 => { Name => 'Image3Description', Format => 'string[32]', RawConv => '$val=~/[^\xff]/ ? $val : undef' }, 1036=> { Name => 'Image4Description', Format => 'string[32]', RawConv => '$val=~/[^\xff]/ ? $val : undef' }, 1108=> { Name => 'Image5Description', Format => 'string[32]', RawConv => '$val=~/[^\xff]/ ? $val : undef' }, 1180=> { Name => 'Image6Description', Format => 'string[32]', RawConv => '$val=~/[^\xff]/ ? $val : undef' }, 1252=> { Name => 'Image7Description', Format => 'string[32]', RawConv => '$val=~/[^\xff]/ ? $val : undef' }, 1324=> { Name => 'Image8Description', Format => 'string[32]', RawConv => '$val=~/[^\xff]/ ? $val : undef' }, # 1408=> { Name => 'XOffset', Format => 'int32u' }, # 1412=> { Name => 'YOffset', Format => 'int32u' }, # 1416=> { Name => 'XCenter', Format => 'float' }, # 1420=> { Name => 'YCenter', Format => 'float' }, # 1424=> { Name => 'XOriginalSize', Format => 'int32u' }, # 1428=> { Name => 'YOriginalSize', Format => 'int32u' }, 1432=> { Name => 'SourceFileName', Format => 'string[100]' }, 1532=> { Name => 'SourceCreateDate', Format => 'string[24]' }, 1556=> { Name => 'InputDeviceName', Format => 'string[32]' }, 1588=> { Name => 'InputDeviceSerialNumber', Format => 'string[32]' }, # 1620=> { Name => 'AspectRatio', Format => 'int32u' }, 1724 => { Name => 'FrameRate', Format => 'float' }, 1732 => { Name => 'FrameID', Format => 'string[32]' }, 1764 => { Name => 'SlateInformation', Format => 'string[100]' }, 2048 => { Name => 'UserID', Format => 'string[32]' }, ); #------------------------------------------------------------------------------ # Extract EXIF information from a DPX image # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid DPX file sub ProcessDPX($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $buff; # verify this is a valid DPX file return 0 unless $raf->Read($buff, 2080) == 2080; return 0 unless $buff =~ /^(SDPX|XPDS)/; SetByteOrder($1 eq 'SDPX' ? 'MM' : 'II'); $et->SetFileType(); # set the FileType tag my $hdrLen = Get32u(\$buff,24) + Get32u(\$buff,28); $hdrLen == 2048 or $et->Warn("Unexpected DPX header length ($hdrLen)"); my %dirInfo = ( DataPt => \$buff, DirStart => 0, DirLen => length($buff), ); my $tagTablePtr = GetTagTable('Image::ExifTool::DPX::Main'); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::DPX - Read DPX meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read metadata from DPX (Digital Picture Exchange) images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.cineon.com/ff_draft.php> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/DPX Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/DV.pm�������������������������������������������������������000644 �000765 �000024 �00000023577 12642461272 020577� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: DV.pm # # Description: Read DV meta information # # Revisions: 2010/12/24 - P. Harvey Created # # References: 1) http://www.ffmpeg.org/ # 2) http://dvswitch.alioth.debian.org/wiki/DV_format/ #------------------------------------------------------------------------------ package Image::ExifTool::DV; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.01'; # DV profiles (ref 1) my @dvProfiles = ( { DSF => 0, VideoSType => 0x0, FrameSize => 120000, VideoFormat => 'IEC 61834, SMPTE-314M - 525/60 (NTSC)', VideoScanType => 'Progressive', Colorimetry => '4:1:1', FrameRate => 30000/1001, ImageHeight => 480, ImageWidth => 720, },{ DSF => 1, VideoSType => 0x0, FrameSize => 144000, VideoFormat => 'IEC 61834 - 625/50 (PAL)', VideoScanType => 'Progressive', Colorimetry => '4:2:0', FrameRate => 25/1, ImageHeight => 576, ImageWidth => 720, },{ DSF => 1, VideoSType => 0x0, FrameSize => 144000, VideoFormat => 'SMPTE-314M - 625/50 (PAL)', VideoScanType => 'Progressive', Colorimetry => '4:1:1', FrameRate => 25/1, ImageHeight => 576, ImageWidth => 720, },{ DSF => 0, VideoSType => 0x4, FrameSize => 240000, VideoFormat => 'DVCPRO50: SMPTE-314M - 525/60 (NTSC) 50 Mbps', VideoScanType => 'Progressive', Colorimetry => '4:2:2', FrameRate => 30000/1001, ImageHeight => 480, ImageWidth => 720, },{ DSF => 1, VideoSType => 0x4, FrameSize => 288000, VideoFormat => 'DVCPRO50: SMPTE-314M - 625/50 (PAL) 50 Mbps', VideoScanType => 'Progressive', Colorimetry => '4:2:2', FrameRate => 25/1, ImageHeight => 576, ImageWidth => 720, },{ DSF => 0, VideoSType => 0x14, FrameSize => 480000, VideoFormat => 'DVCPRO HD: SMPTE-370M - 1080i60 100 Mbps', VideoScanType => 'Interlaced', Colorimetry => '4:2:2', FrameRate => 30000/1001, ImageHeight => 1080, ImageWidth => 1280, },{ DSF => 1, VideoSType => 0x14, FrameSize => 576000, VideoFormat => 'DVCPRO HD: SMPTE-370M - 1080i50 100 Mbps', VideoScanType => 'Interlaced', Colorimetry => '4:2:2', FrameRate => 25/1, ImageHeight => 1080, ImageWidth => 1440, },{ DSF => 0, VideoSType => 0x18, FrameSize => 240000, VideoFormat => 'DVCPRO HD: SMPTE-370M - 720p60 100 Mbps', VideoScanType => 'Progressive', Colorimetry => '4:2:2', FrameRate => 60000/1001, ImageHeight => 720, ImageWidth => 960, },{ DSF => 1, VideoSType => 0x18, FrameSize => 288000, VideoFormat => 'DVCPRO HD: SMPTE-370M - 720p50 100 Mbps', VideoScanType => 'Progressive', Colorimetry => '4:2:2', FrameRate => 50/1, ImageHeight => 720, ImageWidth => 960, },{ DSF => 1, VideoSType => 0x1, FrameSize => 144000, VideoFormat => 'IEC 61883-5 - 625/50 (PAL)', VideoScanType => 'Progressive', Colorimetry => '4:2:0', FrameRate => 25/1, ImageHeight => 576, ImageWidth => 720, }, ); # tags to extract, in the order we want to extract them my @dvTags = ( 'DateTimeOriginal', 'ImageWidth', 'ImageHeight', 'Duration', 'TotalBitrate', 'VideoFormat', 'VideoScanType', 'FrameRate', 'AspectRatio', 'Colorimetry', 'AudioChannels', 'AudioSampleRate', 'AudioBitsPerSample', ); # DV tags %Image::ExifTool::DV::Main = ( GROUPS => { 2 => 'Video' }, VARS => { NO_ID => 1 }, NOTES => 'The following tags are extracted from DV videos.', DateTimeOriginal => { Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, ImageWidth => { }, ImageHeight => { }, Duration => { PrintConv => 'ConvertDuration($val)' }, TotalBitrate => { PrintConv => 'ConvertBitrate($val)' }, VideoFormat => { }, VideoScanType => { }, FrameRate => { PrintConv => 'int($val * 1000 + 0.5) / 1000' }, AspectRatio => { }, Colorimetry => { }, AudioChannels => { Groups => { 2 => 'Audio' } }, AudioSampleRate => { Groups => { 2 => 'Audio' } }, AudioBitsPerSample => { Groups => { 2 => 'Audio' } }, ); #------------------------------------------------------------------------------ # Read information in a DV file (ref 1) # Inputs: 0) ExifTool ref, 1) dirInfo ref # Returns: 1 on success, 0 if this wasn't a valid DV file sub ProcessDV($$) { my ($et, $dirInfo) = @_; local $_; my $raf = $$dirInfo{RAF}; my ($buff, $start, $profile, $tag, $i, $j); $raf->Read($buff, 12000) or return 0; if ($buff =~ /\x1f\x07\0[\x3f\xbf]/sg) { $start = pos($buff) - 4; } else { while ($buff =~ /[\0\xff]\x3f\x07\0.{76}\xff\x3f\x07\x01/sg) { next if pos($buff) - 163 < 0; $start = pos($buff) - 163; last; } return 0 unless defined $start; } my $len = length $buff; # must at least have a full DIF header return 0 if $start + 80 * 6 > $len; $et->SetFileType(); my $pos = $start; my $dsf = Get8u(\$buff, $pos + 3) & 0x80 >> 7; my $stype = Get8u(\$buff, $pos + 80*5 + 48 + 3) & 0x1f; # 576i50 25Mbps 4:1:1 is a special case if ($dsf == 1 && $stype == 0 && Get8u(\$buff, 4) & 0x07) { $profile = $dvProfiles[2]; } else { foreach (@dvProfiles) { next unless $dsf == $$_{DSF} and $stype == $$_{VideoSType}; $profile = $_; last; } $profile or $et->Warn("Unrecognized DV profile"), return 1; } my $tagTablePtr = GetTagTable('Image::ExifTool::DV::Main'); # calculate total bit rate and duration my $byteRate = $$profile{FrameSize} * $$profile{FrameRate}; my $fileSize = $$et{VALUE}{FileSize}; $$profile{TotalBitrate} = 8 * $byteRate; $$profile{Duration} = $fileSize / $byteRate if defined $fileSize; # read DVPack metadata from the VAUX DIF's to extract video tags delete $$profile{DateTimeOriginal}; delete $$profile{AspectRatio}; my ($date, $time, $is16_9); for ($i=1; $i<6; ++$i) { $pos += 80; my $type = Get8u(\$buff, $pos); next unless ($type & 0xf0) == 0x50; # look for VAUX types for ($j=0; $j<15; ++$j) { my $p = $pos + $j * 5 + 3; $type = Get8u(\$buff, $p); if ($type == 0x61) { # video control my $apt = Get8u(\$buff, $start + 4) & 0x07; my $t = Get8u(\$buff, $p + 2); $is16_9 = (($t & 0x07) == 0x02 or (not $apt and ($t & 0x07) == 0x07)); } elsif ($type == 0x62) { # date # mask off unused bits my @d = unpack('C*', substr($buff, $p + 1, 4)); # (ignore timezone in byte 0 until we can test this properly - see ref 2) $date = sprintf('%.2x:%.2x:%.2x', $d[3], $d[2] & 0x1f, $d[1] & 0x3f); if ($date =~ /[a-f]/) { undef $date; # invalid date } else { # add century (this will work until 2089) $date = ($date lt '9' ? '20' : '19') . $date; } undef $time; } elsif ($type == 0x63 and $date) { # time # (ignore frames past second in byte 0 for now - see ref 2) my $val = Get32u(\$buff, $p + 1) & 0x007f7f3f; my @t = unpack('C*', substr($buff, $p + 1, 4)); $time = sprintf('%.2x:%.2x:%.2x', $t[3] & 0x3f, $t[2] & 0x7f, $t[1] & 0x7f); last; } else { undef $time; # must be consecutive } } } if ($date and $time) { $$profile{DateTimeOriginal} = "$date $time"; $$profile{AspectRatio} = $is16_9 ? '16:9' : '5:4' if defined $is16_9; } # read audio tags if available delete $$profile{AudioSampleRate}; delete $$profile{AudioBitsPerSample}; delete $$profile{AudioChannels}; $pos = $start + 80*6 + 80*16*3 + 3; if ($pos + 4 < $len and Get8u(\$buff, $pos) == 0x50) { my $smpls = Get8u(\$buff, $pos + 1); my $freq = (Get8u(\$buff, $pos + 4) >> 3) & 0x07; my $stype = Get8u(\$buff, $pos + 3) & 0x1f; my $quant = Get8u(\$buff, $pos + 4) & 0x07; if ($freq < 3) { $$profile{AudioSampleRate} = {0=>48000, 1=>44100, 2=>32000}->{$freq}; } if ($stype < 3) { $stype = 2 if $stype == 0 and $quant and $freq == 2; $$profile{AudioChannels} = {0=>2, 1=>0, 2=>4, 3=>8}->{$stype}; } $$profile{AudioBitsPerSample} = $quant ? 12 : 16; } # save our metadata foreach $tag (@dvTags) { next unless defined $$profile{$tag}; $et->HandleTag($tagTablePtr, $tag, $$profile{$tag}); } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::DV - Read DV meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read meta information from DV (raw Digital Video) files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://ffmpeg.org/> =item L<http://dvswitch.alioth.debian.org/wiki/DV_format/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/DV Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/EXE.pm������������������������������������������������������000644 �000765 �000024 �00000126341 12642461273 020701� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: EXE.pm # # Description: Read meta information of various executable file formats # # Revisions: 2008/08/28 - P. Harvey Created # 2011/07/12 - P. Harvey Added CHM (ok, not EXE, but it fits here) # # References: 1) http://www.openwatcom.org/ftp/devel/docs/pecoff.pdf # 2) http://support.microsoft.com/kb/65122 # 3) http://www.opensource.apple.com # 4) http://www.skyfree.org/linux/references/ELF_Format.pdf # 5) http://msdn.microsoft.com/en-us/library/ms809762.aspx # 6) http://code.google.com/p/pefile/ # 7) http://www.codeproject.com/KB/DLL/showver.aspx #------------------------------------------------------------------------------ package Image::ExifTool::EXE; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.12'; sub ProcessPEResources($$); sub ProcessPEVersion($$); # PE file resource types (ref 6) my %resourceType = ( 1 => 'Cursor', 2 => 'Bitmap', 3 => 'Icon', 4 => 'Menu', 5 => 'Dialog', 6 => 'String', 7 => 'Font Dir', 8 => 'Font', 9 => 'Accelerator', 10 => 'RC Data', 11 => 'Message Table', 12 => 'Group Cursor', 14 => 'Group Icon', 16 => 'Version', 17 => 'Dialog Include', 19 => 'Plug-n-Play', 20 => 'VxD', 21 => 'Animated Cursor', 22 => 'Animated Icon', 23 => 'HTML', 24 => 'Manifest', ); my %languageCode = ( '0000' => 'Neutral', '007F' => 'Invariant', '0400' => 'Process default', '0401' => 'Arabic', '0402' => 'Bulgarian', '0403' => 'Catalan', '0404' => 'Chinese (Traditional)', '0405' => 'Czech', '0406' => 'Danish', '0407' => 'German', '0408' => 'Greek', '0409' => 'English (U.S.)', '040A' => 'Spanish (Castilian)', '040B' => 'Finnish', '040C' => 'French', '040D' => 'Hebrew', '040E' => 'Hungarian', '040F' => 'Icelandic', '0410' => 'Italian', '0411' => 'Japanese', '0412' => 'Korean', '0413' => 'Dutch', '0414' => 'Norwegian (Bokml)', '0415' => 'Polish', '0416' => 'Portuguese (Brazilian)', '0417' => 'Rhaeto-Romanic', '0418' => 'Romanian', '0419' => 'Russian', '041A' => 'Croato-Serbian (Latin)', '041B' => 'Slovak', '041C' => 'Albanian', '041D' => 'Swedish', '041E' => 'Thai', '041F' => 'Turkish', '0420' => 'Urdu', # 0421-0493 ref 6 '0421' => 'Indonesian', '0422' => 'Ukrainian', '0423' => 'Belarusian', '0424' => 'Slovenian', '0425' => 'Estonian', '0426' => 'Latvian', '0427' => 'Lithuanian', '0428' => 'Maori', '0429' => 'Farsi', '042a' => 'Vietnamese', '042b' => 'Armenian', '042c' => 'Azeri', '042d' => 'Basque', '042e' => 'Sorbian', '042f' => 'Macedonian', '0430' => 'Sutu', '0431' => 'Tsonga', '0432' => 'Tswana', '0433' => 'Venda', '0434' => 'Xhosa', '0435' => 'Zulu', '0436' => 'Afrikaans', '0437' => 'Georgian', '0438' => 'Faeroese', '0439' => 'Hindi', '043a' => 'Maltese', '043b' => 'Saami', '043c' => 'Gaelic', '043e' => 'Malay', '043f' => 'Kazak', '0440' => 'Kyrgyz', '0441' => 'Swahili', '0443' => 'Uzbek', '0444' => 'Tatar', '0445' => 'Bengali', '0446' => 'Punjabi', '0447' => 'Gujarati', '0448' => 'Oriya', '0449' => 'Tamil', '044a' => 'Telugu', '044b' => 'Kannada', '044c' => 'Malayalam', '044d' => 'Assamese', '044e' => 'Marathi', '044f' => 'Sanskrit', '0450' => 'Mongolian', '0456' => 'Galician', '0457' => 'Konkani', '0458' => 'Manipuri', '0459' => 'Sindhi', '045a' => 'Syriac', '0460' => 'Kashmiri', '0461' => 'Nepali', '0465' => 'Divehi', '047f' => 'Invariant', '048f' => 'Esperanto', '0490' => 'Walon', '0491' => 'Cornish', '0492' => 'Welsh', '0493' => 'Breton', '0800' => 'Neutral 2', '0804' => 'Chinese (Simplified)', '0807' => 'German (Swiss)', '0809' => 'English (British)', '080A' => 'Spanish (Mexican)', '080C' => 'French (Belgian)', '0810' => 'Italian (Swiss)', '0813' => 'Dutch (Belgian)', '0814' => 'Norwegian (Nynorsk)', '0816' => 'Portuguese', '081A' => 'Serbo-Croatian (Cyrillic)', '0C07' => 'German (Austrian)', '0C09' => 'English (Australian)', '0C0A' => 'Spanish (Modern)', '0C0C' => 'French (Canadian)', '1009' => 'English (Canadian)', '100C' => 'French (Swiss)', ); # Information extracted from PE COFF (Windows EXE) file header %Image::ExifTool::EXE::Main = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Other' }, FORMAT => 'int16u', NOTES => q{ This module extracts information from various types of Windows, MacOS and Unix executable and library files. The first table below lists information extracted from the header of Windows PE (Portable Executable) EXE files and DLL libraries. }, 0 => { Name => 'MachineType', PrintHex => 1, PrintConv => { 0x014c => 'Intel 386 or later, and compatibles', 0x014d => 'Intel i860', #5 0x0162 => 'MIPS R3000', 0x0166 => 'MIPS little endian (R4000)', 0x0168 => 'MIPS R10000', 0x0169 => 'MIPS little endian WCI v2', 0x0183 => 'Alpha AXP (old)', #5 0x0184 => 'Alpha AXP', 0x01a2 => 'Hitachi SH3', 0x01a3 => 'Hitachi SH3 DSP', 0x01a6 => 'Hitachi SH4', 0x01a8 => 'Hitachi SH5', 0x01c0 => 'ARM little endian', 0x01c2 => 'Thumb', 0x01d3 => 'Matsushita AM33', 0x01f0 => 'PowerPC little endian', 0x01f1 => 'PowerPC with floating point support', 0x0200 => 'Intel IA64', 0x0266 => 'MIPS16', 0x0268 => 'Motorola 68000 series', 0x0284 => 'Alpha AXP 64-bit', 0x0366 => 'MIPS with FPU', 0x0466 => 'MIPS16 with FPU', 0x0ebc => 'EFI Byte Code', 0x8664 => 'AMD AMD64', 0x9041 => 'Mitsubishi M32R little endian', 0xc0ee => 'clr pure MSIL', }, }, 2 => { Name => 'TimeStamp', Format => 'int32u', Groups => { 2 => 'Time' }, ValueConv => 'ConvertUnixTime($val,1)', PrintConv => '$self->ConvertDateTime($val)', }, 10 => { Name => 'PEType', PrintHex => 1, PrintConv => { 0x10b => 'PE32', 0x20b => 'PE32+', }, }, 11 => { Name => 'LinkerVersion', Format => 'int8u[2]', ValueConv => '$val=~tr/ /./; $val', }, 12 => { Name => 'CodeSize', Format => 'int32u', }, 14 => { Name => 'InitializedDataSize', Format => 'int32u', }, 16 => { Name => 'UninitializedDataSize', Format => 'int32u', }, 18 => { Name => 'EntryPoint', Format => 'int32u', PrintConv => 'sprintf("0x%.4x", $val)', }, 30 => { Name => 'OSVersion', Format => 'int16u[2]', ValueConv => '$val=~tr/ /./; $val', }, 32 => { Name => 'ImageVersion', Format => 'int16u[2]', ValueConv => '$val=~tr/ /./; $val', }, 34 => { Name => 'SubsystemVersion', Format => 'int16u[2]', ValueConv => '$val=~tr/ /./; $val', }, 44 => { Name => 'Subsystem', PrintConv => { 0 => 'Unknown', 1 => 'Native', 2 => 'Windows GUI', 3 => 'Windows command line', 5 => 'OS/2 command line', #5 7 => 'POSIX command line', 9 => 'Windows CE GUI', 10 => 'EFI application', 11 => 'EFI boot service', 12 => 'EFI runtime driver', 13 => 'EFI ROM', #6 14 => 'XBOX', #6 }, }, ); # PE file version information (ref 6) %Image::ExifTool::EXE::PEVersion = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Other' }, FORMAT => 'int32u', NOTES => q{ Information extracted from the VS_VERSION_INFO structure of Windows PE files. }, # (boring -- always 0xfeef04bd) #0 => { # Name => 'Signature', # PrintConv => 'sprintf("0x%.4x",$val)', #}, # (boring -- always 1.0) #1 => { # Name => 'StructVersion', # Format => 'int16u[2]', # ValueConv => 'my @a=split(" ",$val); "$a[1].$a[0]"', #}, 2 => { Name => 'FileVersionNumber', Format => 'int16u[4]', ValueConv => 'my @a=split(" ",$val); "$a[1].$a[0].$a[3].$a[2]"', }, 4 => { Name => 'ProductVersionNumber', Format => 'int16u[4]', ValueConv => 'my @a=split(" ",$val); "$a[1].$a[0].$a[3].$a[2]"', }, 6 => { Name => 'FileFlagsMask', PrintConv => 'sprintf("0x%.4x",$val)', }, 7 => { # ref Cygwin /usr/include/w32api/winver.h Name => 'FileFlags', PrintConv => { BITMASK => { 0 => 'Debug', 1 => 'Pre-release', 2 => 'Patched', 3 => 'Private build', 4 => 'Info inferred', 5 => 'Special build', }}, }, 8 => { Name => 'FileOS', PrintHex => 1, PrintConv => { # ref Cygwin /usr/include/w32api/winver.h 0x00001 => 'Win16', 0x00002 => 'PM-16', 0x00003 => 'PM-32', 0x00004 => 'Win32', 0x10000 => 'DOS', 0x20000 => 'OS/2 16-bit', 0x30000 => 'OS/2 32-bit', 0x40000 => 'Windows NT', 0x10001 => 'Windows 16-bit', 0x10004 => 'Windows 32-bit', 0x20002 => 'OS/2 16-bit PM-16', 0x30003 => 'OS/2 32-bit PM-32', 0x40004 => 'Windows NT 32-bit', }, }, 9 => { # ref Cygwin /usr/include/w32api/winver.h Name => 'ObjectFileType', PrintConv => { 0 => 'Unknown', 1 => 'Executable application', 2 => 'Dynamic link library', 3 => 'Driver', 4 => 'Font', 5 => 'VxD', 7 => 'Static library', }, }, 10 => 'FileSubtype', # (these are usually zero, so ignore them) # 11 => 'FileDateMS', # 12 => 'FileDateLS', ); # Windows PE StringFileInfo resource strings # (see http://msdn.microsoft.com/en-us/library/aa381049.aspx) %Image::ExifTool::EXE::PEString = ( GROUPS => { 2 => 'Other' }, VARS => { NO_ID => 1 }, NOTES => q{ Resource strings found in Windows PE files. The B<TagID>'s are not shown because they are the same as the B<Tag Name>. ExifTool will extract any existing StringFileInfo tags even if not listed in this table. }, LanguageCode => { Notes => 'extracted from the StringFileInfo value', # ref http://techsupt.winbatch.com/TS/T000001050F49.html # (also see http://support.bigfix.com/fixlet/documents/WinInspectors-2006-08-10.pdf) # (also see ftp://ftp.dyu.edu.tw/pub/cpatch/faq/tech/tech_nlsnt.txt) # (not a complete set) PrintString => 1, SeparateTable => 1, PrintConv => \%languageCode, }, CharacterSet => { Notes => 'extracted from the StringFileInfo value', # ref http://techsupt.winbatch.com/TS/T000001050F49.html # (also see http://blog.chinaunix.net/u1/41189/showart_345768.html) PrintString => 1, PrintConv => { '0000' => 'ASCII', '03A4' => 'Windows, Japan (Shift - JIS X-0208)', # cp932 '03A8' => 'Windows, Chinese (Simplified)', # cp936 '03B5' => 'Windows, Korea (Shift - KSC 5601)', # cp949 '03B6' => 'Windows, Taiwan (Big5)', # cp950 '04B0' => 'Unicode', # UCS-2 '04E2' => 'Windows, Latin2 (Eastern European)', '04E3' => 'Windows, Cyrillic', '04E4' => 'Windows, Latin1', '04E5' => 'Windows, Greek', '04E6' => 'Windows, Turkish', '04E7' => 'Windows, Hebrew', '04E8' => 'Windows, Arabic', }, }, BuildDate => { Groups => { 2 => 'Time' } }, # (non-standard) BuildVersion => { }, # (non-standard) Comments => { }, CompanyName => { }, Copyright => { }, # (non-standard) FileDescription => { }, FileVersion => { }, InternalName => { }, LegalCopyright => { }, LegalTrademarks => { }, OriginalFilename=> { Name => 'OriginalFileName' }, PrivateBuild => { }, ProductName => { }, ProductVersion => { }, SpecialBuild => { }, ); # Information extracted from Mach-O (Mac OS X) file header %Image::ExifTool::EXE::MachO = ( GROUPS => { 2 => 'Other' }, VARS => { ID_LABEL => 'Index' }, NOTES => q{ Information extracted from Mach-O (Mac OS X) executable files and DYLIB libraries. }, # ref http://www.opensource.apple.com/darwinsource/DevToolsOct2007/cctools-622.9/include/mach/machine.h 0 => 'CPUArchitecture', 1 => 'CPUByteOrder', 2 => 'CPUCount', # ref /System/Library/Frameworks/Kernel.framework/Versions/A/Headers/mach/machine.h 3 => { Name => 'CPUType', List => 1, PrintConv => { # handle 64-bit flag (0x1000000) OTHER => sub { my ($val, $inv, $conv) = @_; my $v = $val & 0xfeffffff; return $$conv{$v} ? "$$conv{$v} 64-bit" : "Unknown ($val)"; }, -1 => 'Any', 1 => 'VAX', 2 => 'ROMP', 4 => 'NS32032', 5 => 'NS32332', 6 => 'MC680x0', 7 => 'x86', 8 => 'MIPS', 9 => 'NS32532', 10 => 'MC98000', 11 => 'HPPA', 12 => 'ARM', 13 => 'MC88000', 14 => 'SPARC', 15 => 'i860 big endian', 16 => 'i860 little endian', 17 => 'RS6000', 18 => 'PowerPC', 255 => 'VEO', }, }, # ref /System/Library/Frameworks/Kernel.framework/Versions/A/Headers/mach/machine.h 4 => { Name => 'CPUSubtype', List => 1, PrintConv => { # handle 64-bit flags on CPUType (0x1000000) and CPUSubtype (0x80000000) OTHER => sub { my ($val, $inv, $conv) = @_; my @v = split ' ', $val; my $v = ($v[0] & 0xfeffffff) . ' ' . ($v[1] & 0x7fffffff); return $$conv{$v} ? "$$conv{$v} 64-bit" : "Unknown ($val)"; }, # in theory, subtype can be -1 for multiple CPU types, # but in practice I'm not sure anyone uses this - PH '1 0' => 'VAX (all)', '1 1' => 'VAX780', '1 2' => 'VAX785', '1 3' => 'VAX750', '1 4' => 'VAX730', '1 5' => 'UVAXI', '1 6' => 'UVAXII', '1 7' => 'VAX8200', '1 8' => 'VAX8500', '1 9' => 'VAX8600', '1 10' => 'VAX8650', '1 11' => 'VAX8800', '1 12' => 'UVAXIII', '2 0' => 'RT (all)', '2 1' => 'RT PC', '2 2' => 'RT APC', '2 3' => 'RT 135', # 32032/32332/32532 subtypes. '4 0' => 'NS32032 (all)', '4 1' => 'NS32032 DPC (032 CPU)', '4 2' => 'NS32032 SQT', '4 3' => 'NS32032 APC FPU (32081)', '4 4' => 'NS32032 APC FPA (Weitek)', '4 5' => 'NS32032 XPC (532)', '5 0' => 'NS32332 (all)', '5 1' => 'NS32332 DPC (032 CPU)', '5 2' => 'NS32332 SQT', '5 3' => 'NS32332 APC FPU (32081)', '5 4' => 'NS32332 APC FPA (Weitek)', '5 5' => 'NS32332 XPC (532)', '6 1' => 'MC680x0 (all)', '6 2' => 'MC68040', '6 3' => 'MC68030', '7 3' => 'i386 (all)', '7 4' => 'i486', '7 132' => 'i486SX', '7 5' => 'i586', '7 22' => 'Pentium Pro', '7 54' => 'Pentium II M3', '7 86' => 'Pentium II M5', '7 103' => 'Celeron', '7 119' => 'Celeron Mobile', '7 8' => 'Pentium III', '7 24' => 'Pentium III M', '7 40' => 'Pentium III Xeon', '7 9' => 'Pentium M', '7 10' => 'Pentium 4', '7 26' => 'Pentium 4 M', '7 11' => 'Itanium', '7 27' => 'Itanium 2', '7 12' => 'Xeon', '7 28' => 'Xeon MP', '8 0' => 'MIPS (all)', '8 1' => 'MIPS R2300', '8 2' => 'MIPS R2600', '8 3' => 'MIPS R2800', '8 4' => 'MIPS R2000a', '8 5' => 'MIPS R2000', '8 6' => 'MIPS R3000a', '8 7' => 'MIPS R3000', '10 0' => 'MC98000 (all)', '10 1' => 'MC98601', '11 0' => 'HPPA (all)', '11 1' => 'HPPA 7100LC', '12 0' => 'ARM (all)', '12 1' => 'ARM A500 ARCH', '12 2' => 'ARM A500', '12 3' => 'ARM A440', '12 4' => 'ARM M4', '12 5' => 'ARM A680/V4T', '12 6' => 'ARM V6', '12 7' => 'ARM V5TEJ', '12 8' => 'ARM XSCALE', '12 9' => 'ARM V7', '13 0' => 'MC88000 (all)', '13 1' => 'MC88100', '13 2' => 'MC88110', '14 0' => 'SPARC (all)', '14 1' => 'SUN 4/260', '14 2' => 'SUN 4/110', '15 0' => 'i860 (all)', '15 1' => 'i860 860', '16 0' => 'i860 little (all)', '16 1' => 'i860 little', '17 0' => 'RS6000 (all)', '17 1' => 'RS6000', '18 0' => 'PowerPC (all)', '18 1' => 'PowerPC 601', '18 2' => 'PowerPC 602', '18 3' => 'PowerPC 603', '18 4' => 'PowerPC 603e', '18 5' => 'PowerPC 603ev', '18 6' => 'PowerPC 604', '18 7' => 'PowerPC 604e', '18 8' => 'PowerPC 620', '18 9' => 'PowerPC 750', '18 10' => 'PowerPC 7400', '18 11' => 'PowerPC 7450', '18 100' => 'PowerPC 970', '255 1' => 'VEO 1', '255 2' => 'VEO 2', }, }, 5 => { Name => 'ObjectFileType', PrintHex => 1, # ref https://svn.red-bean.com/pyobjc/branches/pyobjc-20x-branch/macholib/macholib/mach_o.py PrintConv => { -1 => 'Static library', #PH (internal use only) 1 => 'Relocatable object', 2 => 'Demand paged executable', 3 => 'Fixed VM shared library', 4 => 'Core', 5 => 'Preloaded executable', 6 => 'Dynamically bound shared library', 7 => 'Dynamic link editor', 8 => 'Dynamically bound bundle', 9 => 'Shared library stub for static linking', }, }, ); # Information extracted from PEF (Classic MacOS executable) file header %Image::ExifTool::EXE::PEF = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Other' }, NOTES => q{ Information extracted from PEF (Classic MacOS) executable files and libraries. }, FORMAT => 'int32u', 2 => { Name => 'CPUArchitecture', Format => 'undef[4]', PrintConv => { pwpc => 'PowerPC', m68k => '68000', }, }, 3 => 'PEFVersion', 4 => { Name => 'TimeStamp', Groups => { 2 => 'Time' }, # timestamp is relative to Jan 1, 1904 ValueConv => 'ConvertUnixTime($val - ((66 * 365 + 17) * 24 * 3600))', PrintConv => '$self->ConvertDateTime($val)', }, #5 => 'OldDefVersion', #6 => 'OldImpVersion', #7 => 'CurrentVersion', ); # Information extracted from ELF (Unix executable) file header %Image::ExifTool::EXE::ELF = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Other' }, NOTES => q{ Information extracted from ELF (Unix) executable files and SO libraries. }, 4 => { Name => 'CPUArchitecture', PrintConv => { 1 => '32 bit', 2 => '64 bit', }, }, 5 => { Name => 'CPUByteOrder', PrintConv => { 1 => 'Little endian', 2 => 'Big endian', }, }, 16 => { Name => 'ObjectFileType', Format => 'int16u', PrintConv => { 0 => 'None', 1 => 'Relocatable file', 2 => 'Executable file', 3 => 'Shared object file', 4 => 'Core file', }, }, 18 => { Name => 'CPUType', Format => 'int16u', # ref /usr/include/linux/elf-em.h PrintConv => { 0 => 'None', 1 => 'AT&T WE 32100', 2 => 'SPARC', 3 => 'i386', 4 => 'Motorola 68000', 5 => 'Motorola 88000', 6 => 'i486', 7 => 'i860', 8 => 'MIPS R3000', 10 => 'MIPS R4000', 15 => 'HPPA', 18 => 'Sun v8plus', 20 => 'PowerPC', 21 => 'PowerPC 64-bit', 22 => 'IBM S/390', 23 => 'Cell BE SPU', 42 => 'SuperH', 43 => 'SPARC v9 64-bit', 46 => 'Renesas H8/300,300H,H8S', 50 => 'HP/Intel IA-64', 62 => 'AMD x86-64', 76 => 'Axis Communications 32-bit embedded processor', 87 => 'NEC v850', 88 => 'Renesas M32R', 0x5441 => 'Fujitsu FR-V', 0x9026 => 'Alpha', # (interim value) 0x9041 => 'm32r (old)', 0x9080 => 'v850 (old)', 0xa390 => 'S/390 (old)', }, }, ); # Microsoft compiled help format (ref http://www.russotto.net/chm/chmformat.html) %Image::ExifTool::EXE::CHM = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Other' }, NOTES => 'Tags extracted from Microsoft Compiled HTML files.', FORMAT => 'int32u', 1 => { Name => 'CHMVersion' }, # 2 - total header length # 3 - 1 # 4 - low bits of date/time value plus 42 (ref http://www.nongnu.org/chmspec/latest/ITSF.html) 5 => { Name => 'LanguageCode', SeparateTable => 1, ValueConv => 'sprintf("%.4X", $val)', PrintConv => \%languageCode, }, ); #------------------------------------------------------------------------------ # Extract information from a CHM file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid CHM file sub ProcessCHM($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $buff; return 0 unless $raf->Read($buff, 56) == 56 and $buff =~ /^ITSF.{20}\x10\xfd\x01\x7c\xaa\x7b\xd0\x11\x9e\x0c\0\xa0\xc9\x22\xe6\xec/s; my $tagTablePtr = GetTagTable('Image::ExifTool::EXE::CHM'); $et->SetFileType(); SetByteOrder('II'); $et->ProcessDirectory({ DataPt => \$buff }, $tagTablePtr); return 1; } #------------------------------------------------------------------------------ # Read Unicode string (null terminated) from resource # Inputs: 0) data ref, 1) start offset, 2) data end, 3) optional ExifTool object ref # Returns: 0) Unicode string translated to UTF8, or current CharSet with ExifTool ref # 1) end pos (rounded up to nearest 4 bytes) sub ReadUnicodeStr($$$;$) { my ($dataPt, $pos, $end, $et) = @_; $end = length $$dataPt if $end > length $$dataPt; # (be safe) my $str = ''; while ($pos + 2 <= $end) { my $ch = substr($$dataPt, $pos, 2); $pos += 2; last if $ch eq "\0\0"; $str .= $ch; } $pos += 2 if $pos & 0x03; my $to = $et ? $et->Options('Charset') : 'UTF8'; return (Image::ExifTool::Decode(undef,$str,'UCS2','II',$to), $pos); } #------------------------------------------------------------------------------ # Process Windows PE Version Resource # Inputs: 0) ExifTool object ref, 1) dirInfo ref # Returns: true on success sub ProcessPEVersion($$) { my ($et, $dirInfo) = @_; my $dataPt = $$dirInfo{DataPt}; my $pos = $$dirInfo{DirStart}; my $end = $pos + $$dirInfo{DirLen}; my ($index, $len, $valLen, $type, $string, $strEnd); # get VS_VERSION_INFO for ($index = 0; ; ++$index) { $pos = ($pos + 3) & 0xfffffffc; # align on a 4-byte boundary last if $pos + 6 > $end; $len = Get16u($dataPt, $pos); $valLen = Get16u($dataPt, $pos + 2); $type = Get16u($dataPt, $pos + 4); return 0 unless $len or $valLen; # prevent possible infinite loop ($string, $strEnd) = ReadUnicodeStr($dataPt, $pos + 6, $pos + $len); return 0 if $strEnd + $valLen > $end; unless ($index or $string eq 'VS_VERSION_INFO') { $et->Warn('Invalid Version Info block'); return 0; } if ($string eq 'VS_VERSION_INFO') { # parse the fixed version info $$dirInfo{DirStart} = $strEnd; $$dirInfo{DirLen} = $valLen; my $subTablePtr = GetTagTable('Image::ExifTool::EXE::PEVersion'); $et->ProcessDirectory($dirInfo, $subTablePtr); $pos = $strEnd + $valLen; } elsif ($string eq 'StringFileInfo' and $valLen == 0) { $pos += $len; my $pt = $strEnd; # parse string table my $tagTablePtr = GetTagTable('Image::ExifTool::EXE::PEString'); for ($index = 0; $pt + 6 < $pos; ++$index) { $len = Get16u($dataPt, $pt); $valLen = Get16u($dataPt, $pt + 2); # $type = Get16u($dataPt, $pt + 4); my $entryEnd = $pt + $len; # get tag ID (converted to UTF8) ($string, $pt) = ReadUnicodeStr($dataPt, $pt + 6, $entryEnd); unless ($index) { # separate the language code and character set # (not sure what the CharacterSet tag is for, but the string # values stored here are UCS-2 in all my files even if the # CharacterSet is otherwise) my $char; if (length($string) > 4) { $char = substr($string, 4); $string = substr($string, 0, 4); } $et->HandleTag($tagTablePtr, 'LanguageCode', uc $string); $et->HandleTag($tagTablePtr, 'CharacterSet', uc $char) if $char; next; } my $tag = $string; # create entry in tag table if it doesn't already exist unless ($$tagTablePtr{$tag}) { my $name = $tag; $name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters next unless length $name; AddTagToTable($tagTablePtr, $tag, { Name => $name }); } # get tag value (converted to current Charset) if ($valLen) { ($string, $pt) = ReadUnicodeStr($dataPt, $pt, $entryEnd, $et); } else { $string = ''; } $et->HandleTag($tagTablePtr, $tag, $string); # step to next entry (padded to an even word) $pt = ($entryEnd + 3) & 0xfffffffc; } } else { $pos += $len + $valLen; # ignore other information (for now) } } return 1; } #------------------------------------------------------------------------------ # Process Windows PE Resources # Inputs: 0) ExifTool object ref, 1) dirInfo ref # Returns: true on success sub ProcessPEResources($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $base = $$dirInfo{Base}; my $dirStart = $$dirInfo{DirStart} + $base; my $level = $$dirInfo{Level} || 0; my $verbose = $et->Options('Verbose'); my ($buff, $buf2, $item); return 0 if $level > 10; # protect against deep recursion # read the resource header $raf->Seek($dirStart, 0) and $raf->Read($buff, 16) == 16 or return 0; my $nameEntries = Get16u(\$buff, 12); my $idEntries = Get16u(\$buff, 14); my $count = $nameEntries + $idEntries; $raf->Read($buff, $count * 8) == $count * 8 or return 0; # loop through all resource entries for ($item=0; $item<$count; ++$item) { my $pos = $item * 8; my $name = Get32u(\$buff, $pos); my $entryPos = Get32u(\$buff, $pos + 4); unless ($level) { # set resource type if this is the 0th level directory my $resType = $resourceType{$name} || sprintf('Unknown (0x%x)', $name); # ignore everything but the Version resource unless verbose if ($verbose) { $et->VPrint(0, "$resType resource:\n"); } else { next unless $resType eq 'Version'; } $$dirInfo{ResType} = $resType; } if ($entryPos & 0x80000000) { # is this a directory? # descend into next directory level $$dirInfo{DirStart} = $entryPos & 0x7fffffff; $$dirInfo{Level} = $level + 1; ProcessPEResources($et, $dirInfo) or return 0; --$$dirInfo{Level}; } elsif ($$dirInfo{ResType} eq 'Version' and $level == 2 and not $$dirInfo{GotVersion}) # (only process first Version resource) { # get position of this resource in the file my $buf2; $raf->Seek($entryPos + $base, 0) and $raf->Read($buf2, 16) == 16 or return 0; my $off = Get32u(\$buf2, 0); my $len = Get32u(\$buf2, 4); # determine which section this is in so we can convert the virtual address my ($section, $filePos); foreach $section (@{$$dirInfo{Sections}}) { next unless $off >= $$section{VirtualAddress} and $off < $$section{VirtualAddress} + $$section{Size}; $filePos = $off + $$section{Base} - $$section{VirtualAddress}; last; } return 0 unless $filePos; $raf->Seek($filePos, 0) and $raf->Read($buf2, $len) == $len or return 0; ProcessPEVersion($et, { DataPt => \$buf2, DataLen => $len, DirStart => 0, DirLen => $len, }) or $et->Warn('Possibly corrupt Version resource'); $$dirInfo{GotVersion} = 1; # set flag so we don't do this again } } return 1; } #------------------------------------------------------------------------------ # Process Windows PE file data dictionary # Inputs: 0) ExifTool object ref, 1) dirInfo ref # Returns: true on success sub ProcessPEDict($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $dataPt = $$dirInfo{DataPt}; my $dirLen = length($$dataPt); my ($pos, @sections, %dirInfo); # loop through all sections for ($pos=0; $pos+40<=$dirLen; $pos+=40) { my $name = substr($$dataPt, $pos, 8); my $va = Get32u($dataPt, $pos + 12); my $size = Get32u($dataPt, $pos + 16); my $offset = Get32u($dataPt, $pos + 20); # remember the section offsets for the VirtualAddress lookup later push @sections, { Base => $offset, Size => $size, VirtualAddress => $va }; # save details of the first resource section %dirInfo = ( RAF => $raf, Base => $offset, DirStart => 0, # (relative to Base) DirLen => $size, Sections => \@sections, ) if $name eq ".rsrc\0\0\0" and not %dirInfo; } # process the first resource section ProcessPEResources($et, \%dirInfo) or return 0 if %dirInfo; return 1; } #------------------------------------------------------------------------------ # Extract information from an EXE file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid EXE file sub ProcessEXE($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $buf2, $type, $mime, $ext, $tagTablePtr, %dirInfo); my $size = $raf->Read($buff, 0x40) or return 0; my $fast3 = $$et{OPTIONS}{FastScan} && $$et{OPTIONS}{FastScan} == 3; # # DOS and Windows EXE # if ($buff =~ /^MZ/ and $size == 0x40) { # DOS/Windows executable # validate DOS header # (ref http://www.delphidabbler.com/articles?article=8&part=2) # 0 magic : int16u # Magic number ("MZ") # 2 cblp : int16u # Bytes on last page of file # 4 cp : int16u # Pages in file # 6 crlc : int16u # Relocations # 8 cparhdr : int16u # Size of header in paragraphs # 10 minalloc: int16u # Minimum extra paragraphs needed # 12 maxalloc: int16u # Maximum extra paragraphs needed # 14 ss : int16u # Initial (relative) SS value # 16 sp : int16u # Initial SP value # 18 csum : int16u # Checksum # 20 ip : int16u # Initial IP value # 22 cs : int16u # Initial (relative) CS value # 24 lfarlc : int16u # Address of relocation table # 26 ovno : int16u # Overlay number # 28 res : int16u[4] # Reserved words # 36 oemid : int16u # OEM identifier (for oeminfo) # 38 oeminfo : int16u # OEM info; oemid specific # 40 res2 : int16u[10]# Reserved words # 60 lfanew : int32u; # File address of new exe header SetByteOrder('II'); my ($cblp, $cp, $lfarlc, $lfanew) = unpack('x2v2x18vx34V', $buff); my $fileSize = ($cp - ($cblp ? 1 : 0)) * 512 + $cblp; #(patch to accommodate observed 64-bit files) #return 0 if $fileSize < 0x40 or $fileSize < $lfarlc; return 0 if $fileSize < 0x40; # read the Windows NE, PE or LE (virtual device driver) header #if ($lfarlc == 0x40 and $fileSize > $lfanew + 2 and ... if ($raf->Seek($lfanew, 0) and $raf->Read($buff, 0x40) and $buff =~ /^(NE|PE|LE)/) { if ($1 eq 'NE') { if ($size >= 0x40) { # NE header is 64 bytes (ref 2) # check for DLL my $appFlags = Get16u(\$buff, 0x0c); $ext = $appFlags & 0x80 ? 'DLL' : 'EXE'; $type = "Win16 $ext"; # offset 0x02 is 2 bytes with linker version and revision numbers # offset 0x36 is executable type (2 = Windows) } } elsif ($1 eq 'PE') { # PE header comes at byte 4 in buff: # 4 int16u Machine # 6 int16u NumberOfSections # 8 int32u TimeDateStamp # 12 int32u PointerToSymbolTable # 16 int32u NumberOfSymbols # 20 int16u SizeOfOptionalHeader # 22 int16u Characteristics if ($size >= 24) { # PE header is 24 bytes (plus optional header) my $machine = $Image::ExifTool::EXE::Main{0}{PrintConv}{Get16u(\$buff, 4)} || ''; my $winType = $machine =~ /64/ ? 'Win64' : 'Win32'; my $flags = Get16u(\$buff, 22); $ext = $flags & 0x2000 ? 'DLL' : 'EXE'; $et->SetFileType("$winType $ext", undef, $ext); return 1 if $fast3; # read the rest of the optional header if necessary my $optSize = Get16u(\$buff, 20); my $more = $optSize + 24 - $size; if ($more > 0) { if ($raf->Read($buf2, $more) == $more) { $buff .= $buf2; $size += $more; my $magic = Get16u(\$buff, 24); # verify PE32/PE32+ magic number unless ($magic == 0x10b or $magic == 0x20b) { $et->Warn('Unknown PE magic number'); return 1; } } else { $et->Warn('Error reading optional header'); } } # process PE COFF file header $tagTablePtr = GetTagTable('Image::ExifTool::EXE::Main'); %dirInfo = ( DataPt => \$buff, DataPos => $raf->Tell() - $size, DataLen => $size, DirStart => 4, DirLen => $size, ); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); # process data dictionary my $num = Get16u(\$buff, 6); # NumberOfSections if ($raf->Read($buff, 40 * $num) == 40 * $num) { %dirInfo = ( RAF => $raf, DataPt => \$buff, ); ProcessPEDict($et, \%dirInfo) or $et->Warn('Error processing PE data dictionary'); } return 1; } } else { $type = 'Virtual Device Driver'; $ext = '386'; } } else { $type = 'DOS EXE'; $ext = 'exe'; } # # Mach-O (Mac OS X) # } elsif ($buff =~ /^(\xca\xfe\xba\xbe|\xfe\xed\xfa(\xce|\xcf)|(\xce|\xcf)\xfa\xed\xfe)/ and $size > 12) { # Mach-O executable # (ref http://developer.apple.com/documentation/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html) $tagTablePtr = GetTagTable('Image::ExifTool::EXE::MachO'); if ($1 eq "\xca\xfe\xba\xbe") { SetByteOrder('MM'); $et->SetFileType('Mach-O fat binary executable', undef, ''); return 1 if $fast3; my $count = Get32u(\$buff, 4); # get architecture count my $more = $count * 20 - ($size - 8); if ($more > 0) { unless ($raf->Read($buf2, $more) == $more) { $et->Warn('Error reading fat-arch headers'); return 1; } $buff .= $buf2; $size += $more; } $et->HandleTag($tagTablePtr, 2, $count); my $i; for ($i=0; $i<$count; ++$i) { my $cpuType = Get32s(\$buff, 8 + $i * 20); my $cpuSubtype = Get32u(\$buff, 12 + $i * 20); $et->HandleTag($tagTablePtr, 3, $cpuType); $et->HandleTag($tagTablePtr, 4, "$cpuType $cpuSubtype"); } # load first Mach-O header to get the object file type my $offset = Get32u(\$buff, 16); if ($raf->Seek($offset, 0) and $raf->Read($buf2, 16) == 16) { if ($buf2 =~ /^(\xfe\xed\xfa(\xce|\xcf)|(\xce|\xcf)\xfa\xed\xfe)/) { SetByteOrder($buf2 =~ /^\xfe\xed/ ? 'MM' : 'II'); my $objType = Get32s(\$buf2, 12); $et->HandleTag($tagTablePtr, 5, $objType); } elsif ($buf2 =~ /^!<arch>\x0a/) { # .a libraries use this magic number $et->HandleTag($tagTablePtr, 5, -1); } else { $et->Warn('Unrecognized object file type'); } } else { $et->Warn('Error reading file'); } } elsif ($size >= 16) { $et->SetFileType('Mach-O executable', undef, ''); return 1 if $fast3; my $info = { "\xfe\xed\xfa\xce" => ['32 bit', 'Big endian'], "\xce\xfa\xed\xfe" => ['32 bit', 'Little endian'], "\xfe\xed\xfa\xcf" => ['64 bit', 'Big endian'], "\xcf\xfa\xed\xfe" => ['64 bit', 'Little endian'], }->{substr($buff, 0, 4)}; my $byteOrder = ($buff =~ /^\xfe/) ? 'MM' : 'II'; SetByteOrder($byteOrder); my $cpuType = Get32s(\$buff, 4); my $cpuSubtype = Get32s(\$buff, 8); my $objType = Get32s(\$buff, 12); $et->HandleTag($tagTablePtr, 0, $$info[0]); $et->HandleTag($tagTablePtr, 1, $$info[1]); $et->HandleTag($tagTablePtr, 3, $cpuType); $et->HandleTag($tagTablePtr, 4, "$cpuType $cpuSubtype"); $et->HandleTag($tagTablePtr, 5, $objType); } return 1; # # PEF (classic MacOS) # } elsif ($buff =~ /^Joy!peff/ and $size > 12) { # ref http://developer.apple.com/documentation/mac/pdf/MacOS_RT_Architectures.pdf $et->SetFileType('Classic MacOS executable', undef, ''); return 1 if $fast3; SetByteOrder('MM'); $tagTablePtr = GetTagTable('Image::ExifTool::EXE::PEF'); %dirInfo = ( DataPt => \$buff, DataPos => 0, DataLen => $size, DirStart => 0, DirLen => $size, ); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); return 1; # # ELF (Unix) # } elsif ($buff =~ /^\x7fELF/ and $size >= 16) { $et->SetFileType('ELF executable', undef, ''); return 1 if $fast3; SetByteOrder(Get8u(\$buff,5) == 1 ? 'II' : 'MM'); $tagTablePtr = GetTagTable('Image::ExifTool::EXE::ELF'); %dirInfo = ( DataPt => \$buff, DataPos => 0, DataLen => $size, DirStart => 0, DirLen => $size, ); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); return 1; # # various scripts (perl, sh, etc...) # } elsif ($buff =~ m{^#!\s*/\S*bin/(\w+)}) { my $prog = $1; $prog = $1 if $prog eq 'env' and $buff =~ /\b(perl|python|ruby|php)\b/; $type = "$prog script"; $mime = "text/x-$prog"; $ext = { perl => 'pl', python => 'py', ruby => 'rb', php => 'php', }->{$1}; # use '.sh' for extension of all shell scripts $ext = $prog =~ /sh$/ ? 'sh' : '' unless defined $ext; # # .a libraries # } elsif ($buff =~ /^!<arch>\x0a/) { $type = 'Static library'; $ext = 'a'; } return 0 unless $type; $et->SetFileType($type, $mime, $ext); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::EXE - Read executable file meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from various types of Windows, MacOS and Unix executable and library files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.openwatcom.org/ftp/devel/docs/pecoff.pdf> =item L<http://support.microsoft.com/kb/65122> =item L<http://www.opensource.apple.com> =item L<http://www.skyfree.org/linux/references/ELF_Format.pdf> =item L<http://msdn.microsoft.com/en-us/library/ms809762.aspx> =item L<http://code.google.com/p/pefile/> =item L<http://www.codeproject.com/KB/DLL/showver.aspx> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/EXE Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Exif.pm�����������������������������������������������������000644 �000765 �000024 �00000534005 12642472464 021157� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Exif.pm # # Description: Read EXIF/TIFF meta information # # Revisions: 11/25/2003 - P. Harvey Created # 02/06/2004 - P. Harvey Moved processing functions from ExifTool # 03/19/2004 - P. Harvey Check PreviewImage for validity # 11/11/2004 - P. Harvey Split off maker notes into MakerNotes.pm # 12/13/2004 - P. Harvey Added AUTOLOAD to load write routines # # References: 0) http://www.exif.org/Exif2-2.PDF # 1) http://partners.adobe.com/asn/developer/pdfs/tn/TIFF6.pdf # 2) http://www.adobe.com/products/dng/pdfs/dng_spec_1_3_0_0.pdf # 3) http://www.awaresystems.be/imaging/tiff/tifftags.html # 4) http://www.remotesensing.org/libtiff/TIFFTechNote2.html # 5) http://www.exif.org/dcf.PDF # 6) http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html # 7) http://www.fine-view.com/jp/lab/doc/ps6ffspecsv2.pdf # 8) http://www.ozhiker.com/electronics/pjmt/jpeg_info/meta.html # 9) http://hul.harvard.edu/jhove/tiff-tags.html # 10) http://partners.adobe.com/public/developer/en/tiff/TIFFPM6.pdf # 11) Robert Mucke private communication # 12) http://www.broomscloset.com/closet/photo/exif/TAG2000-22_DIS12234-2.PDF # 13) http://www.microsoft.com/whdc/xps/wmphoto.mspx # 14) http://www.asmail.be/msg0054681802.html # 15) http://crousseau.free.fr/imgfmt_raw.htm # 16) http://www.cybercom.net/~dcoffin/dcraw/ # 17) http://www.digitalpreservation.gov/formats/content/tiff_tags.shtml # 18) http://www.asmail.be/msg0055568584.html # 19) http://libpsd.graphest.com/files/Photoshop%20File%20Formats.pdf # 20) http://tiki-lounge.com/~raf/tiff/fields.html # 21) http://community.roxen.com/developers/idocs/rfc/rfc3949.html # 22) http://tools.ietf.org/html/draft-ietf-fax-tiff-fx-extension1-01 # 23) MetaMorph Stack (STK) Image File Format: # --> ftp://ftp.meta.moleculardevices.com/support/stack/STK.doc # 24) http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf (Exif 2.3) # 25) Vesa Kivisto private communication (7D) # 26) Jeremy Brown private communication # 27) Gregg Lee private communication # 28) http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/cinemadng/pdfs/CinemaDNG_Format_Specification_v1_1.pdf # 29) http://www.libtiff.org # JD) Jens Duttke private communication #------------------------------------------------------------------------------ package Image::ExifTool::Exif; use strict; use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat %lightSource %flash %compression %photometricInterpretation %orientation %subfileType); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::MakerNotes; $VERSION = '3.77'; sub ProcessExif($$$); sub WriteExif($$$); sub CheckExif($$$); sub RebuildMakerNotes($$$); sub EncodeExifText($$); sub ValidateIFD($;$); sub ProcessTiffIFD($$$); sub PrintParameter($$$); sub GetOffList($$$$$); sub PrintLensInfo($); sub ConvertLensInfo($); # size limit for loading binary data block into memory sub BINARY_DATA_LIMIT { return 10 * 1024 * 1024; } # byte sizes for the various EXIF format types below @formatSize = (undef,1,1,2,4,8,1,1,2,4,8,4,8,4,2,8,8,8,8); @formatName = ( undef, 'int8u', 'string', 'int16u', 'int32u', 'rational64u','int8s', 'undef', 'int16s', 'int32s', 'rational64s','float', 'double', 'ifd', 'unicode', 'complex', 'int64u', 'int64s', 'ifd64', # (new BigTIFF formats) ); # hash to look up EXIF format numbers by name # (format types are all lower case) %formatNumber = ( 'int8u' => 1, # BYTE 'string' => 2, # ASCII 'int16u' => 3, # SHORT 'int32u' => 4, # LONG 'rational64u' => 5, # RATIONAL 'int8s' => 6, # SBYTE 'undef' => 7, # UNDEFINED 'binary' => 7, # (same as undef) 'int16s' => 8, # SSHORT 'int32s' => 9, # SLONG 'rational64s' => 10, # SRATIONAL 'float' => 11, # FLOAT 'double' => 12, # DOUBLE 'ifd' => 13, # IFD (with int32u format) 'unicode' => 14, # UNICODE [see Note below] 'complex' => 15, # COMPLEX [see Note below] 'int64u' => 16, # LONG8 [BigTIFF] 'int64s' => 17, # SLONG8 [BigTIFF] 'ifd64' => 18, # IFD8 (with int64u format) [BigTIFF] # Note: unicode and complex types are not yet properly supported by ExifTool. # These are types which have been observed in the Adobe DNG SDK code, but # aren't fully supported there either. We know the sizes, but that's about it. # We don't know if the unicode is null terminated, or the format for complex # (although I suspect it would be two 4-byte floats, real and imaginary). ); # lookup for integer format strings %intFormat = ( 'int8u' => 1, 'int16u' => 3, 'int32u' => 4, 'int8s' => 6, 'int16s' => 8, 'int32s' => 9, 'ifd' => 13, 'int64u' => 16, 'int64s' => 17, 'ifd64' => 18, ); # EXIF LightSource PrintConv values %lightSource = ( 0 => 'Unknown', 1 => 'Daylight', 2 => 'Fluorescent', 3 => 'Tungsten (Incandescent)', 4 => 'Flash', 9 => 'Fine Weather', 10 => 'Cloudy', 11 => 'Shade', 12 => 'Daylight Fluorescent', # (D 5700 - 7100K) 13 => 'Day White Fluorescent', # (N 4600 - 5500K) 14 => 'Cool White Fluorescent', # (W 3800 - 4500K) 15 => 'White Fluorescent', # (WW 3250 - 3800K) 16 => 'Warm White Fluorescent', # (L 2600 - 3250K) 17 => 'Standard Light A', 18 => 'Standard Light B', 19 => 'Standard Light C', 20 => 'D55', 21 => 'D65', 22 => 'D75', 23 => 'D50', 24 => 'ISO Studio Tungsten', 255 => 'Other', ); # EXIF Flash values %flash = ( OTHER => sub { # translate "Off" and "On" when writing my ($val, $inv) = @_; return undef unless $inv and $val =~ /^(off|on)$/i; return lc $val eq 'off' ? 0x00 : 0x01; }, 0x00 => 'No Flash', 0x01 => 'Fired', 0x05 => 'Fired, Return not detected', 0x07 => 'Fired, Return detected', 0x08 => 'On, Did not fire', # not charged up? 0x09 => 'On, Fired', 0x0d => 'On, Return not detected', 0x0f => 'On, Return detected', 0x10 => 'Off, Did not fire', 0x14 => 'Off, Did not fire, Return not detected', 0x18 => 'Auto, Did not fire', 0x19 => 'Auto, Fired', 0x1d => 'Auto, Fired, Return not detected', 0x1f => 'Auto, Fired, Return detected', 0x20 => 'No flash function', 0x30 => 'Off, No flash function', 0x41 => 'Fired, Red-eye reduction', 0x45 => 'Fired, Red-eye reduction, Return not detected', 0x47 => 'Fired, Red-eye reduction, Return detected', 0x49 => 'On, Red-eye reduction', 0x4d => 'On, Red-eye reduction, Return not detected', 0x4f => 'On, Red-eye reduction, Return detected', 0x50 => 'Off, Red-eye reduction', 0x58 => 'Auto, Did not fire, Red-eye reduction', 0x59 => 'Auto, Fired, Red-eye reduction', 0x5d => 'Auto, Fired, Red-eye reduction, Return not detected', 0x5f => 'Auto, Fired, Red-eye reduction, Return detected', ); # TIFF Compression values # (values with format "Xxxxx XXX Compressed" are used to identify RAW file types) %compression = ( 1 => 'Uncompressed', 2 => 'CCITT 1D', 3 => 'T4/Group 3 Fax', 4 => 'T6/Group 4 Fax', 5 => 'LZW', 6 => 'JPEG (old-style)', #3 7 => 'JPEG', #4 8 => 'Adobe Deflate', #3 9 => 'JBIG B&W', #3 10 => 'JBIG Color', #3 99 => 'JPEG', #16 262 => 'Kodak 262', #16 32766 => 'Next', #3 32767 => 'Sony ARW Compressed', #16 32769 => 'Packed RAW', #PH (used by Epson, Nikon, Samsung) 32770 => 'Samsung SRW Compressed', #PH 32771 => 'CCIRLEW', #3 32772 => 'Samsung SRW Compressed 2', #PH (NX3000,NXmini) 32773 => 'PackBits', 32809 => 'Thunderscan', #3 32867 => 'Kodak KDC Compressed', #PH 32895 => 'IT8CTPAD', #3 32896 => 'IT8LW', #3 32897 => 'IT8MP', #3 32898 => 'IT8BL', #3 32908 => 'PixarFilm', #3 32909 => 'PixarLog', #3 32946 => 'Deflate', #3 32947 => 'DCS', #3 34661 => 'JBIG', #3 34676 => 'SGILog', #3 34677 => 'SGILog24', #3 34712 => 'JPEG 2000', #3 34713 => 'Nikon NEF Compressed', #PH 34715 => 'JBIG2 TIFF FX', #20 34718 => 'Microsoft Document Imaging (MDI) Binary Level Codec', #18 34719 => 'Microsoft Document Imaging (MDI) Progressive Transform Codec', #18 34720 => 'Microsoft Document Imaging (MDI) Vector', #18 34892 => 'Lossy JPEG', # (DNG 1.4) 65000 => 'Kodak DCR Compressed', #PH 65535 => 'Pentax PEF Compressed', #Jens ); %photometricInterpretation = ( 0 => 'WhiteIsZero', 1 => 'BlackIsZero', 2 => 'RGB', 3 => 'RGB Palette', 4 => 'Transparency Mask', 5 => 'CMYK', 6 => 'YCbCr', 8 => 'CIELab', 9 => 'ICCLab', #3 10 => 'ITULab', #3 32803 => 'Color Filter Array', #2 32844 => 'Pixar LogL', #3 32845 => 'Pixar LogLuv', #3 34892 => 'Linear Raw', #2 ); %orientation = ( 1 => 'Horizontal (normal)', 2 => 'Mirror horizontal', 3 => 'Rotate 180', 4 => 'Mirror vertical', 5 => 'Mirror horizontal and rotate 270 CW', 6 => 'Rotate 90 CW', 7 => 'Mirror horizontal and rotate 90 CW', 8 => 'Rotate 270 CW', ); %subfileType = ( 0 => 'Full-resolution Image', 1 => 'Reduced-resolution image', 2 => 'Single page of multi-page image', 3 => 'Single page of multi-page reduced-resolution image', 4 => 'Transparency mask', 5 => 'Transparency mask of reduced-resolution image', 6 => 'Transparency mask of multi-page image', 7 => 'Transparency mask of reduced-resolution multi-page image', 0x10001 => 'Alternate reduced-resolution image', # (DNG 1.2) 0xffffffff => 'invalid', #(found in E5700 NEF's) BITMASK => { 0 => 'Reduced resolution', 1 => 'Single page', 2 => 'Transparency mask', 3 => 'TIFF/IT final page', #20 4 => 'TIFF-FX mixed raster content', #20 }, ); # PrintConv for parameter tags %Image::ExifTool::Exif::printParameter = ( PrintConv => { 0 => 'Normal', OTHER => \&Image::ExifTool::Exif::PrintParameter, }, ); # ValueConv that makes long values binary type my %longBin = ( ValueConv => 'length($val) > 64 ? \$val : $val', ValueConvInv => '$val', ); # PrintConv for SampleFormat (0x153) my %sampleFormat = ( 1 => 'Unsigned', # unsigned integer 2 => 'Signed', # two's complement signed integer 3 => 'Float', # IEEE floating point 4 => 'Undefined', 5 => 'Complex int', # complex integer (ref 3) 6 => 'Complex float', # complex IEEE floating point (ref 3) ); # main EXIF tag table %Image::ExifTool::Exif::Main = ( GROUPS => { 0 => 'EXIF', 1 => 'IFD0', 2 => 'Image'}, WRITE_PROC => \&WriteExif, WRITE_GROUP => 'ExifIFD', # default write group SET_GROUP1 => 1, # set group1 name to directory name for all tags in table 0x1 => { Name => 'InteropIndex', Description => 'Interoperability Index', PrintConv => { R98 => 'R98 - DCF basic file (sRGB)', R03 => 'R03 - DCF option file (Adobe RGB)', THM => 'THM - DCF thumbnail file', }, }, 0x2 => { #5 Name => 'InteropVersion', Description => 'Interoperability Version', RawConv => '$val=~s/\0+$//; $val', # (some idiots add null terminators) }, 0x0b => { #PH Name => 'ProcessingSoftware', Notes => 'used by ACD Systems Digital Imaging', }, 0xfe => { Name => 'SubfileType', # set priority directory if this is the full resolution image DataMember => 'SubfileType', RawConv => '$self->SetPriorityDir() if $val eq "0"; $$self{SubfileType} = $val', PrintConv => \%subfileType, }, 0xff => { Name => 'OldSubfileType', # set priority directory if this is the full resolution image RawConv => '$self->SetPriorityDir() if $val eq "1"; $val', PrintConv => { 1 => 'Full-resolution image', 2 => 'Reduced-resolution image', 3 => 'Single page of multi-page image', }, }, 0x100 => { Name => 'ImageWidth', # even though Group 1 is set dynamically we need to register IFD1 once # so it will show up in the group lists Groups => { 1 => 'IFD1' }, # Note: priority 0 tags automatically have their priority increased for the # priority direcory (the directory with a SubfileType of "Full-resolution image") Priority => 0, }, 0x101 => { Name => 'ImageHeight', Notes => 'called ImageLength by the EXIF spec.', Priority => 0, }, 0x102 => { Name => 'BitsPerSample', Priority => 0, }, 0x103 => { Name => 'Compression', DataMember => 'Compression', SeparateTable => 'Compression', RawConv => q{ Image::ExifTool::Exif::IdentifyRawFile($self, $val); return $$self{Compression} = $val; }, PrintConv => \%compression, Priority => 0, }, 0x106 => { Name => 'PhotometricInterpretation', PrintConv => \%photometricInterpretation, Priority => 0, }, 0x107 => { Name => 'Thresholding', PrintConv => { 1 => 'No dithering or halftoning', 2 => 'Ordered dither or halftone', 3 => 'Randomized dither', }, }, 0x108 => 'CellWidth', 0x109 => 'CellLength', 0x10a => { Name => 'FillOrder', PrintConv => { 1 => 'Normal', 2 => 'Reversed', }, }, 0x10d => 'DocumentName', 0x10e => { Name => 'ImageDescription', Priority => 0, }, 0x10f => { Name => 'Make', Groups => { 2 => 'Camera' }, DataMember => 'Make', # remove trailing blanks and save as an ExifTool member variable RawConv => '$val =~ s/\s+$//; $$self{Make} = $val', # NOTE: trailing "blanks" (spaces) are removed from all EXIF tags which # may be "unknown" (filled with spaces) according to the EXIF spec. # This allows conditional replacement with "exiftool -TAG-= -TAG=VALUE". # - also removed are any other trailing whitespace characters }, 0x110 => { Name => 'Model', Description => 'Camera Model Name', Groups => { 2 => 'Camera' }, DataMember => 'Model', # remove trailing blanks and save as an ExifTool member variable RawConv => '$val =~ s/\s+$//; $$self{Model} = $val', }, 0x111 => [ { Condition => q[ $$self{TIFF_TYPE} eq 'MRW' and $$self{DIR_NAME} eq 'IFD0' and $$self{Model} =~ /^DiMAGE A200/ ], Name => 'StripOffsets', IsOffset => 1, OffsetPair => 0x117, # point to associated byte counts # A200 stores this information in the wrong byte order!! ValueConv => '$val=join(" ",unpack("N*",pack("V*",split(" ",$val))));\$val', ByteOrder => 'LittleEndian', }, { Condition => q[ ($$self{TIFF_TYPE} ne 'CR2' or $$self{DIR_NAME} ne 'IFD0') and ($$self{TIFF_TYPE} ne 'DNG' or $$self{DIR_NAME} !~ /^SubIFD[12]$/) ], Name => 'StripOffsets', IsOffset => 1, OffsetPair => 0x117, # point to associated byte counts ValueConv => 'length($val) > 32 ? \$val : $val', }, { Condition => '$$self{DIR_NAME} eq "IFD0"', Name => 'PreviewImageStart', IsOffset => 1, OffsetPair => 0x117, Notes => q{ PreviewImageStart in IFD0 of CR2 images and SubIFD1 of DNG images, and JpgFromRawStart in SubIFD2 of DNG images }, DataTag => 'PreviewImage', Writable => 'int32u', WriteGroup => 'IFD0', WriteCondition => '$$self{TIFF_TYPE} eq "CR2"', Protected => 2, }, { Condition => '$$self{DIR_NAME} eq "SubIFD1"', Name => 'PreviewImageStart', IsOffset => 1, OffsetPair => 0x117, DataTag => 'PreviewImage', Writable => 'int32u', WriteGroup => 'SubIFD1', WriteCondition => '$$self{TIFF_TYPE} eq "DNG"', Protected => 2, }, { Name => 'JpgFromRawStart', IsOffset => 1, OffsetPair => 0x117, DataTag => 'JpgFromRaw', Writable => 'int32u', WriteGroup => 'SubIFD2', WriteCondition => '$$self{TIFF_TYPE} eq "DNG"', Protected => 2, }, ], 0x112 => { Name => 'Orientation', PrintConv => \%orientation, Priority => 0, # so PRIORITY_DIR takes precedence }, 0x115 => { Name => 'SamplesPerPixel', Priority => 0, }, 0x116 => { Name => 'RowsPerStrip', Priority => 0, }, 0x117 => [ { Condition => q[ $$self{TIFF_TYPE} eq 'MRW' and $$self{DIR_NAME} eq 'IFD0' and $$self{Model} =~ /^DiMAGE A200/ ], Name => 'StripByteCounts', OffsetPair => 0x111, # point to associated offset # A200 stores this information in the wrong byte order!! ValueConv => '$val=join(" ",unpack("N*",pack("V*",split(" ",$val))));\$val', ByteOrder => 'LittleEndian', }, { Condition => q[ ($$self{TIFF_TYPE} ne 'CR2' or $$self{DIR_NAME} ne 'IFD0') and ($$self{TIFF_TYPE} ne 'DNG' or $$self{DIR_NAME} !~ /^SubIFD[12]$/) ], Name => 'StripByteCounts', OffsetPair => 0x111, # point to associated offset ValueConv => 'length($val) > 32 ? \$val : $val', }, { Condition => '$$self{DIR_NAME} eq "IFD0"', Name => 'PreviewImageLength', OffsetPair => 0x111, Notes => q{ PreviewImageLength in IFD0 of CR2 images and SubIFD1 of DNG images, and JpgFromRawLength in SubIFD2 of DNG images }, DataTag => 'PreviewImage', Writable => 'int32u', WriteGroup => 'IFD0', WriteCondition => '$$self{TIFF_TYPE} eq "CR2"', Protected => 2, }, { Condition => '$$self{DIR_NAME} eq "SubIFD1"', Name => 'PreviewImageLength', OffsetPair => 0x111, DataTag => 'PreviewImage', Writable => 'int32u', WriteGroup => 'SubIFD1', WriteCondition => '$$self{TIFF_TYPE} eq "DNG"', Protected => 2, }, { Name => 'JpgFromRawLength', OffsetPair => 0x111, DataTag => 'JpgFromRaw', Writable => 'int32u', WriteGroup => 'SubIFD2', WriteCondition => '$$self{TIFF_TYPE} eq "DNG"', Protected => 2, }, ], 0x118 => 'MinSampleValue', 0x119 => 'MaxSampleValue', 0x11a => { Name => 'XResolution', Priority => 0, # so PRIORITY_DIR takes precedence }, 0x11b => { Name => 'YResolution', Priority => 0, }, 0x11c => { Name => 'PlanarConfiguration', PrintConv => { 1 => 'Chunky', 2 => 'Planar', }, Priority => 0, }, 0x11d => 'PageName', 0x11e => 'XPosition', 0x11f => 'YPosition', # FreeOffsets/FreeByteCounts are used by Ricoh for RMETA information # in TIFF images (not yet supported) 0x120 => { Name => 'FreeOffsets', IsOffset => 1, OffsetPair => 0x121, ValueConv => 'length($val) > 32 ? \$val : $val', }, 0x121 => { Name => 'FreeByteCounts', OffsetPair => 0x120, ValueConv => 'length($val) > 32 ? \$val : $val', }, 0x122 => { Name => 'GrayResponseUnit', PrintConv => { #3 1 => 0.1, 2 => 0.001, 3 => 0.0001, 4 => 0.00001, 5 => 0.000001, }, }, 0x123 => { Name => 'GrayResponseCurve', Binary => 1, }, 0x124 => { Name => 'T4Options', PrintConv => { BITMASK => { 0 => '2-Dimensional encoding', 1 => 'Uncompressed', 2 => 'Fill bits added', } }, #3 }, 0x125 => { Name => 'T6Options', PrintConv => { BITMASK => { 1 => 'Uncompressed', } }, #3 }, 0x128 => { Name => 'ResolutionUnit', Notes => 'the value 1 is not standard EXIF', PrintConv => { 1 => 'None', 2 => 'inches', 3 => 'cm', }, Priority => 0, }, 0x129 => 'PageNumber', 0x12c => 'ColorResponseUnit', #9 0x12d => { Name => 'TransferFunction', Binary => 1, }, 0x131 => { Name => 'Software', RawConv => '$val =~ s/\s+$//; $val', # trim trailing blanks }, 0x132 => { Name => 'ModifyDate', Groups => { 2 => 'Time' }, Notes => 'called DateTime by the EXIF spec.', PrintConv => '$self->ConvertDateTime($val)', }, 0x13b => { Name => 'Artist', Groups => { 2 => 'Author' }, Notes => 'becomes a list-type tag when the MWG module is loaded', RawConv => '$val =~ s/\s+$//; $val', # trim trailing blanks }, 0x13c => 'HostComputer', 0x13d => { Name => 'Predictor', PrintConv => { 1 => 'None', 2 => 'Horizontal differencing', }, }, 0x13e => { Name => 'WhitePoint', Groups => { 2 => 'Camera' }, }, 0x13f => { Name => 'PrimaryChromaticities', Priority => 0, }, 0x140 => { Name => 'ColorMap', Format => 'binary', Binary => 1, }, 0x141 => 'HalftoneHints', 0x142 => 'TileWidth', 0x143 => 'TileLength', 0x144 => { Name => 'TileOffsets', IsOffset => 1, OffsetPair => 0x145, ValueConv => 'length($val) > 32 ? \$val : $val', }, 0x145 => { Name => 'TileByteCounts', OffsetPair => 0x144, ValueConv => 'length($val) > 32 ? \$val : $val', }, 0x146 => 'BadFaxLines', #3 0x147 => { #3 Name => 'CleanFaxData', PrintConv => { 0 => 'Clean', 1 => 'Regenerated', 2 => 'Unclean', }, }, 0x148 => 'ConsecutiveBadFaxLines', #3 0x14a => [ { Name => 'SubIFD', # use this opportunity to identify an ARW image, and if so we # must decide if this is a SubIFD or the A100 raw data # (use SubfileType, Compression and FILE_TYPE to identify ARW/SR2, # then call SetARW to finish the job) Condition => q{ $$self{DIR_NAME} ne 'IFD0' or $$self{FILE_TYPE} ne 'TIFF' or $$self{Make} !~ /^SONY/ or not $$self{SubfileType} or $$self{SubfileType} != 1 or not $$self{Compression} or $$self{Compression} != 6 or not require Image::ExifTool::Sony or Image::ExifTool::Sony::SetARW($self, $valPt) }, Groups => { 1 => 'SubIFD' }, Flags => 'SubIFD', SubDirectory => { Start => '$val', MaxSubdirs => 10, # (have seen 5 in a DNG 1.4 image) }, }, { #16 Name => 'A100DataOffset', Notes => 'the data offset in original Sony DSLR-A100 ARW images', DataMember => 'A100DataOffset', RawConv => '$$self{A100DataOffset} = $val', IsOffset => 1, Protected => 2, }, ], 0x14c => { Name => 'InkSet', PrintConv => { #3 1 => 'CMYK', 2 => 'Not CMYK', }, }, 0x14d => 'InkNames', #3 0x14e => 'NumberofInks', #3 0x150 => 'DotRange', 0x151 => 'TargetPrinter', 0x152 => { Name => 'ExtraSamples', PrintConv => { #20 0 => 'Unspecified', 1 => 'Associated Alpha', 2 => 'Unassociated Alpha', }, }, 0x153 => { Name => 'SampleFormat', Notes => 'SamplesPerPixel values', PrintConvColumns => 2, PrintConv => [ \%sampleFormat, \%sampleFormat, \%sampleFormat, \%sampleFormat ], }, 0x154 => 'SMinSampleValue', 0x155 => 'SMaxSampleValue', 0x156 => 'TransferRange', 0x157 => 'ClipPath', #3 0x158 => 'XClipPathUnits', #3 0x159 => 'YClipPathUnits', #3 0x15a => { #3 Name => 'Indexed', PrintConv => { 0 => 'Not indexed', 1 => 'Indexed' }, }, 0x15b => { Name => 'JPEGTables', Binary => 1, }, 0x15f => { #10 Name => 'OPIProxy', PrintConv => { 0 => 'Higher resolution image does not exist', 1 => 'Higher resolution image exists', }, }, # 0x181 => 'Decode', #20 (typo! - should be 0x1b1, ref 21) # 0x182 => 'DefaultImageColor', #20 (typo! - should be 0x1b2, ref 21) 0x190 => { #3 Name => 'GlobalParametersIFD', Groups => { 1 => 'GlobParamIFD' }, Flags => 'SubIFD', SubDirectory => { DirName => 'GlobParamIFD', Start => '$val', MaxSubdirs => 1, }, }, 0x191 => { #3 Name => 'ProfileType', PrintConv => { 0 => 'Unspecified', 1 => 'Group 3 FAX' }, }, 0x192 => { #3 Name => 'FaxProfile', PrintConv => { 0 => 'Unknown', 1 => 'Minimal B&W lossless, S', 2 => 'Extended B&W lossless, F', 3 => 'Lossless JBIG B&W, J', 4 => 'Lossy color and grayscale, C', 5 => 'Lossless color and grayscale, L', 6 => 'Mixed raster content, M', 7 => 'Profile T', #20 255 => 'Multi Profiles', #20 }, }, 0x193 => { #3 Name => 'CodingMethods', PrintConv => { BITMASK => { 0 => 'Unspecified compression', 1 => 'Modified Huffman', 2 => 'Modified Read', 3 => 'Modified MR', 4 => 'JBIG', 5 => 'Baseline JPEG', 6 => 'JBIG color', } }, }, 0x194 => 'VersionYear', #3 0x195 => 'ModeNumber', #3 0x1b1 => 'Decode', #3 0x1b2 => 'DefaultImageColor', #3 (changed to ImageBaseColor, ref 21) 0x1b3 => 'T82Options', #20 0x1b5 => { #19 Name => 'JPEGTables', Binary => 1, }, 0x200 => { Name => 'JPEGProc', PrintConv => { 1 => 'Baseline', 14 => 'Lossless', }, }, 0x201 => [ { Name => 'ThumbnailOffset', Notes => q{ ThumbnailOffset in IFD1 of JPEG and some TIFF-based images, IFD0 of MRW images and AVI and MOV videos, and the SubIFD in IFD1 of SRW images; PreviewImageStart in MakerNotes and IFD0 of ARW and SR2 images; JpgFromRawStart in SubIFD of NEF images and IFD2 of PEF images; and OtherImageStart in everything else }, # thumbnail is found in IFD1 of JPEG and TIFF images, and # IFD0 of EXIF information in FujiFilm AVI (RIFF) and MOV videos Condition => q{ $$self{DIR_NAME} eq 'IFD1' or ($$self{DIR_NAME} eq 'IFD0' and $$self{FILE_TYPE} =~ /^(RIFF|MOV)$/) }, IsOffset => 1, OffsetPair => 0x202, DataTag => 'ThumbnailImage', Writable => 'int32u', WriteGroup => 'IFD1', # according to the EXIF spec. a JPEG-compressed thumbnail image may not # be stored in a TIFF file, but these TIFF-based RAW image formats # use IFD1 for a JPEG-compressed thumbnail: CR2, ARW, SR2 and PEF. # (SRF also stores a JPEG image in IFD1, but it is actually a preview # and we don't yet write SRF anyway) WriteCondition => q{ $$self{FILE_TYPE} ne "TIFF" or $$self{TIFF_TYPE} =~ /^(CR2|ARW|SR2|PEF)$/ }, Protected => 2, }, { Name => 'ThumbnailOffset', # thumbnail in IFD0 of MRW images (Minolta A200) # and IFD0 of NRW images (Nikon Coolpix P6000,P7000,P7100) Condition => '$$self{DIR_NAME} eq "IFD0" and $$self{TIFF_TYPE} =~ /^(MRW|NRW)$/', IsOffset => 1, OffsetPair => 0x202, # A200 uses the wrong base offset for this pointer!! WrongBase => '$$self{Model} =~ /^DiMAGE A200/ ? $$self{MRW_WrongBase} : undef', DataTag => 'ThumbnailImage', Writable => 'int32u', WriteGroup => 'IFD0', WriteCondition => '$$self{FILE_TYPE} =~ /^(MRW|NRW)$/', Protected => 2, }, { Name => 'ThumbnailOffset', # in SubIFD of IFD1 in Samsung SRW images Condition => q{ $$self{TIFF_TYPE} eq 'SRW' and $$self{DIR_NAME} eq 'SubIFD' and $$self{PATH}[-2] eq 'IFD1' }, IsOffset => 1, OffsetPair => 0x202, DataTag => 'ThumbnailImage', Writable => 'int32u', WriteGroup => 'SubIFD', WriteCondition => '$$self{TIFF_TYPE} eq "SRW"', Protected => 2, }, { Name => 'PreviewImageStart', Condition => '$$self{DIR_NAME} eq "MakerNotes"', IsOffset => 1, OffsetPair => 0x202, DataTag => 'PreviewImage', Writable => 'int32u', WriteGroup => 'MakerNotes', # (no WriteCondition necessary because MakerNotes won't be created) Protected => 2, }, { Name => 'PreviewImageStart', # PreviewImage in IFD0 of ARW and SR2 files for all models Condition => '$$self{DIR_NAME} eq "IFD0" and $$self{TIFF_TYPE} =~ /^(ARW|SR2)$/', IsOffset => 1, OffsetPair => 0x202, DataTag => 'PreviewImage', Writable => 'int32u', WriteGroup => 'IFD0', WriteCondition => '$$self{TIFF_TYPE} =~ /^(ARW|SR2)$/', Protected => 2, }, { Name => 'JpgFromRawStart', Condition => '$$self{DIR_NAME} eq "SubIFD"', IsOffset => 1, OffsetPair => 0x202, DataTag => 'JpgFromRaw', Writable => 'int32u', WriteGroup => 'SubIFD', # JpgFromRaw is in SubIFD of NEF, NRW and SRW files WriteCondition => '$$self{TIFF_TYPE} =~ /^(NEF|NRW|SRW)$/', Protected => 2, }, { Name => 'JpgFromRawStart', Condition => '$$self{DIR_NAME} eq "IFD2"', IsOffset => 1, OffsetPair => 0x202, DataTag => 'JpgFromRaw', Writable => 'int32u', WriteGroup => 'IFD2', # JpgFromRaw is in IFD2 of PEF files WriteCondition => '$$self{TIFF_TYPE} eq "PEF"', Protected => 2, }, { Name => 'OtherImageStart', Condition => '$$self{DIR_NAME} eq "SubIFD1"', IsOffset => 1, OffsetPair => 0x202, DataTag => 'OtherImage', Writable => 'int32u', WriteGroup => 'SubIFD1', Protected => 2, Permanent => 1, # (don't add/delete this tag: makes WriteCondition unnecessary) }, { Name => 'OtherImageStart', Condition => '$$self{DIR_NAME} eq "SubIFD2"', IsOffset => 1, OffsetPair => 0x202, DataTag => 'OtherImage', Writable => 'int32u', WriteGroup => 'SubIFD2', Protected => 2, Permanent => 1, # (don't add/delete this tag: makes WriteCondition unnecessary) }, { Name => 'OtherImageStart', IsOffset => 1, OffsetPair => 0x202, }, ], 0x202 => [ { Name => 'ThumbnailLength', Notes => q{ ThumbnailLength in IFD1 of JPEG and some TIFF-based images, IFD0 of MRW images and AVI and MOV videos, and the SubIFD in IFD1 of SRW images; PreviewImageLength in MakerNotes and IFD0 of ARW and SR2 images; JpgFromRawLength in SubIFD of NEF images, and IFD2 of PEF images; and OtherImageLength in everything else }, Condition => q{ $$self{DIR_NAME} eq 'IFD1' or ($$self{DIR_NAME} eq 'IFD0' and $$self{FILE_TYPE} =~ /^(RIFF|MOV)$/) }, OffsetPair => 0x201, DataTag => 'ThumbnailImage', Writable => 'int32u', WriteGroup => 'IFD1', WriteCondition => q{ $$self{FILE_TYPE} ne "TIFF" or $$self{TIFF_TYPE} =~ /^(CR2|ARW|SR2|PEF)$/ }, Protected => 2, }, { Name => 'ThumbnailLength', # thumbnail in IFD0 of MRW images (Minolta A200) # and IFD0 of NRW images (Nikon Coolpix P6000,P7000,P7100) Condition => '$$self{DIR_NAME} eq "IFD0" and $$self{TIFF_TYPE} =~ /^(MRW|NRW)$/', OffsetPair => 0x201, DataTag => 'ThumbnailImage', Writable => 'int32u', WriteGroup => 'IFD0', WriteCondition => '$$self{FILE_TYPE} =~ /^(MRW|NRW)$/', Protected => 2, }, { Name => 'ThumbnailLength', # in SubIFD of IFD1 in Samsung SRW images Condition => q{ $$self{TIFF_TYPE} eq 'SRW' and $$self{DIR_NAME} eq 'SubIFD' and $$self{PATH}[-2] eq 'IFD1' }, OffsetPair => 0x201, DataTag => 'ThumbnailImage', Writable => 'int32u', WriteGroup => 'SubIFD', WriteCondition => '$$self{TIFF_TYPE} eq "SRW"', Protected => 2, }, { Name => 'PreviewImageLength', Condition => '$$self{DIR_NAME} eq "MakerNotes"', OffsetPair => 0x201, DataTag => 'PreviewImage', Writable => 'int32u', WriteGroup => 'MakerNotes', # (no WriteCondition necessary because MakerNotes won't be created) Protected => 2, }, { Name => 'PreviewImageLength', # PreviewImage in IFD0 of ARW and SR2 files for all models Condition => '$$self{DIR_NAME} eq "IFD0" and $$self{TIFF_TYPE} =~ /^(ARW|SR2)$/', OffsetPair => 0x201, DataTag => 'PreviewImage', Writable => 'int32u', WriteGroup => 'IFD0', WriteCondition => '$$self{TIFF_TYPE} =~ /^(ARW|SR2)$/', Protected => 2, }, { Name => 'JpgFromRawLength', Condition => '$$self{DIR_NAME} eq "SubIFD"', OffsetPair => 0x201, DataTag => 'JpgFromRaw', Writable => 'int32u', WriteGroup => 'SubIFD', WriteCondition => '$$self{TIFF_TYPE} =~ /^(NEF|NRW|SRW)$/', Protected => 2, }, { Name => 'JpgFromRawLength', Condition => '$$self{DIR_NAME} eq "IFD2"', OffsetPair => 0x201, DataTag => 'JpgFromRaw', Writable => 'int32u', WriteGroup => 'IFD2', WriteCondition => '$$self{TIFF_TYPE} eq "PEF"', Protected => 2, }, { Name => 'OtherImageLength', Condition => '$$self{DIR_NAME} eq "SubIFD1"', OffsetPair => 0x201, DataTag => 'OtherImage', Writable => 'int32u', WriteGroup => 'SubIFD1', Protected => 2, Permanent => 1, # (don't add/delete this tag: makes WriteCondition unnecessary) }, { Name => 'OtherImageLength', Condition => '$$self{DIR_NAME} eq "SubIFD2"', OffsetPair => 0x201, DataTag => 'OtherImage', Writable => 'int32u', WriteGroup => 'SubIFD2', Protected => 2, Permanent => 1, # (don't add/delete this tag: makes WriteCondition unnecessary) }, { Name => 'OtherImageLength', OffsetPair => 0x201, }, ], 0x203 => 'JPEGRestartInterval', 0x205 => 'JPEGLosslessPredictors', 0x206 => 'JPEGPointTransforms', 0x207 => { Name => 'JPEGQTables', IsOffset => 1, # this tag is not supported for writing, so define an # invalid offset pair to cause a "No size tag" error to be # generated if we try to write a file containing this tag OffsetPair => -1, }, 0x208 => { Name => 'JPEGDCTables', IsOffset => 1, OffsetPair => -1, # (see comment for JPEGQTables) }, 0x209 => { Name => 'JPEGACTables', IsOffset => 1, OffsetPair => -1, # (see comment for JPEGQTables) }, 0x211 => { Name => 'YCbCrCoefficients', Priority => 0, }, 0x212 => { Name => 'YCbCrSubSampling', PrintConvColumns => 2, PrintConv => \%Image::ExifTool::JPEG::yCbCrSubSampling, Priority => 0, }, 0x213 => { Name => 'YCbCrPositioning', PrintConv => { 1 => 'Centered', 2 => 'Co-sited', }, Priority => 0, }, 0x214 => { Name => 'ReferenceBlackWhite', Priority => 0, }, 0x22f => 'StripRowCounts', 0x2bc => { Name => 'ApplicationNotes', # (writable directory!) Writable => 'int8u', Format => 'undef', Flags => [ 'Binary', 'Protected' ], # this could be an XMP block SubDirectory => { DirName => 'XMP', TagTable => 'Image::ExifTool::XMP::Main', }, }, 0x3e7 => 'USPTOMiscellaneous', #20 0x1000 => 'RelatedImageFileFormat', #5 0x1001 => 'RelatedImageWidth', #5 0x1002 => { #5 Name => 'RelatedImageHeight', Notes => 'called RelatedImageLength by the DCF spec.', }, # (0x474x tags written by MicrosoftPhoto) 0x4746 => 'Rating', #PH 0x4747 => { # (written by Digital Image Pro) Name => 'XP_DIP_XML', Format => 'undef', # the following reference indicates this is Unicode: # http://social.msdn.microsoft.com/Forums/en-US/isvvba/thread/ce6edcbb-8fc2-40c6-ad98-85f5d835ddfb ValueConv => '$self->Decode($val,"UCS2","II")', }, 0x4748 => { Name => 'StitchInfo', SubDirectory => { TagTable => 'Image::ExifTool::Microsoft::Stitch', ByteOrder => 'LittleEndian', #PH (NC) }, }, 0x4749 => 'RatingPercent', #PH 0x7035 => 'ChromaticAberrationCorrParams', #forum6509 (Sony A7 ARW) 0x7037 => 'DistortionCorrParams', #forum6509 (Sony A7 ARW) 0x800d => 'ImageID', #10 0x80a3 => { Name => 'WangTag1', Binary => 1 }, #20 0x80a4 => { Name => 'WangAnnotation', Binary => 1 }, 0x80a5 => { Name => 'WangTag3', Binary => 1 }, #20 0x80a6 => { #20 Name => 'WangTag4', PrintConv => 'length($val) <= 64 ? $val : \$val', }, # tags 0x80b8-0x80bb are registered to Island Graphics 0x80b8 => 'ImageReferencePoints', #29 0x80b9 => 'RegionXformTackPoint', #29 0x80ba => 'WarpQuadrilateral', #29 0x80bb => 'AffineTransformMat', #29 0x80e3 => 'Matteing', #9 0x80e4 => 'DataType', #9 0x80e5 => 'ImageDepth', #9 0x80e6 => 'TileDepth', #9 # tags 0x8214-0x8219 are registered to Pixar 0x8214 => 'ImageFullWidth', #29 0x8215 => 'ImageFullHeight', #29 0x8216 => 'TextureFormat', #29 0x8217 => 'WrapModes', #29 0x8218 => 'FovCot', #29 0x8219 => 'MatrixWorldToScreen', #29 0x821a => 'MatrixWorldToCamera', #29 0x827d => 'Model2', #29 (Eastman Kodak) 0x828d => 'CFARepeatPatternDim', #12 0x828e => { Name => 'CFAPattern2', #12 Format => 'int8u', # (written incorrectly as 'undef' in Nikon NRW images) }, 0x828f => { #12 Name => 'BatteryLevel', Groups => { 2 => 'Camera' }, }, 0x8290 => { Name => 'KodakIFD', Groups => { 1 => 'KodakIFD' }, Flags => 'SubIFD', Notes => 'used in various types of Kodak images', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::IFD', DirName => 'KodakIFD', Start => '$val', MaxSubdirs => 1, }, }, 0x8298 => { Name => 'Copyright', Groups => { 2 => 'Author' }, Format => 'undef', Notes => q{ may contain copyright notices for photographer and editor, separated by a newline. As per the EXIF specification, the newline is replaced by a null byte when writing to file, but this may be avoided by disabling the print conversion }, # internally the strings are separated by a null character in this format: # Photographer only: photographer + NULL # Both: photographer + NULL + editor + NULL # Editor only: SPACE + NULL + editor + NULL # (this is done as a RawConv so conditional replaces will work properly) RawConv => sub { my ($val, $self) = @_; $val =~ s/ *\0/\n/; # translate first NULL to a newline, removing trailing blanks $val =~ s/ *\0.*//s; # truncate at second NULL and remove trailing blanks $val =~ s/\n$//; # remove trailing newline if it exists # decode if necessary (note: this is the only non-'string' EXIF value like this) my $enc = $self->Options('CharsetEXIF'); $val = $self->Decode($val,$enc) if $enc; return $val; }, }, 0x829a => { Name => 'ExposureTime', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x829d => { Name => 'FNumber', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', }, 0x82a5 => { #3 Name => 'MDFileTag', Notes => 'tags 0x82a5-0x82ac are used in Molecular Dynamics GEL files', }, 0x82a6 => 'MDScalePixel', #3 0x82a7 => 'MDColorTable', #3 0x82a8 => 'MDLabName', #3 0x82a9 => 'MDSampleInfo', #3 0x82aa => 'MDPrepDate', #3 0x82ab => 'MDPrepTime', #3 0x82ac => 'MDFileUnits', #3 0x830e => 'PixelScale', 0x8335 => 'AdventScale', #20 0x8336 => 'AdventRevision', #20 0x835c => 'UIC1Tag', #23 0x835d => 'UIC2Tag', #23 0x835e => 'UIC3Tag', #23 0x835f => 'UIC4Tag', #23 0x83bb => { #12 Name => 'IPTC-NAA', # (writable directory! -- but see note below) # this should actually be written as 'undef' (see # http://www.awaresystems.be/imaging/tiff/tifftags/iptc.html), # but Photoshop writes it as int32u and Nikon Capture won't read # anything else, so we do the same thing here... Doh! Format => 'undef', # convert binary values as undef Writable => 'int32u', # but write int32u format code in IFD WriteGroup => 'IFD0', Flags => [ 'Binary', 'Protected' ], SubDirectory => { DirName => 'IPTC', TagTable => 'Image::ExifTool::IPTC::Main', }, # Note: This directory may be written as a block via the IPTC-NAA tag, # but this technique is not recommended. Instead, it is better to # write the Extra IPTC tag and let ExifTool decide where it should go. }, 0x847e => 'IntergraphPacketData', #3 0x847f => 'IntergraphFlagRegisters', #3 0x8480 => 'IntergraphMatrix', 0x8481 => 'INGRReserved', #20 0x8482 => { Name => 'ModelTiePoint', Groups => { 2 => 'Location' }, }, 0x84e0 => 'Site', #9 0x84e1 => 'ColorSequence', #9 0x84e2 => 'IT8Header', #9 0x84e3 => { #9 Name => 'RasterPadding', PrintConv => { #20 0 => 'Byte', 1 => 'Word', 2 => 'Long Word', 9 => 'Sector', 10 => 'Long Sector', }, }, 0x84e4 => 'BitsPerRunLength', #9 0x84e5 => 'BitsPerExtendedRunLength', #9 0x84e6 => 'ColorTable', #9 0x84e7 => { #9 Name => 'ImageColorIndicator', PrintConv => { #20 0 => 'Unspecified Image Color', 1 => 'Specified Image Color', }, }, 0x84e8 => { #9 Name => 'BackgroundColorIndicator', PrintConv => { #20 0 => 'Unspecified Background Color', 1 => 'Specified Background Color', }, }, 0x84e9 => 'ImageColorValue', #9 0x84ea => 'BackgroundColorValue', #9 0x84eb => 'PixelIntensityRange', #9 0x84ec => 'TransparencyIndicator', #9 0x84ed => 'ColorCharacterization', #9 0x84ee => { #9 Name => 'HCUsage', PrintConv => { #20 0 => 'CT', 1 => 'Line Art', 2 => 'Trap', }, }, 0x84ef => 'TrapIndicator', #17 0x84f0 => 'CMYKEquivalent', #17 0x8546 => { #11 Name => 'SEMInfo', Notes => 'found in some scanning electron microscope images', }, 0x8568 => { Name => 'AFCP_IPTC', SubDirectory => { # must change directory name so we don't create this directory DirName => 'AFCP_IPTC', TagTable => 'Image::ExifTool::IPTC::Main', }, }, 0x85b8 => 'PixelMagicJBIGOptions', #20 0x85d7 => 'JPLCartoIFD', #exifprobe (NC) 0x85d8 => { Name => 'ModelTransform', Groups => { 2 => 'Location' }, }, 0x8602 => { #16 Name => 'WB_GRGBLevels', Notes => 'found in IFD0 of Leaf MOS images', }, # 0x8603 - Leaf CatchLight color matrix (ref 16) 0x8606 => { Name => 'LeafData', Format => 'undef', # avoid converting huge block to string of int8u's! SubDirectory => { DirName => 'LeafIFD', TagTable => 'Image::ExifTool::Leaf::Main', }, }, 0x8649 => { #19 Name => 'PhotoshopSettings', Format => 'binary', SubDirectory => { DirName => 'Photoshop', TagTable => 'Image::ExifTool::Photoshop::Main', }, }, 0x8769 => { Name => 'ExifOffset', Groups => { 1 => 'ExifIFD' }, SubIFD => 2, SubDirectory => { DirName => 'ExifIFD', Start => '$val', }, }, 0x8773 => { Name => 'ICC_Profile', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main', }, }, 0x877f => { #20 Name => 'TIFF_FXExtensions', PrintConv => { BITMASK => { 0 => 'Resolution/Image Width', 1 => 'N Layer Profile M', 2 => 'Shared Data', 3 => 'B&W JBIG2', 4 => 'JBIG2 Profile M', }}, }, 0x8780 => { #20 Name => 'MultiProfiles', PrintConv => { BITMASK => { 0 => 'Profile S', 1 => 'Profile F', 2 => 'Profile J', 3 => 'Profile C', 4 => 'Profile L', 5 => 'Profile M', 6 => 'Profile T', 7 => 'Resolution/Image Width', 8 => 'N Layer Profile M', 9 => 'Shared Data', 10 => 'JBIG2 Profile M', }}, }, 0x8781 => { #22 Name => 'SharedData', IsOffset => 1, # this tag is not supported for writing, so define an # invalid offset pair to cause a "No size tag" error to be # generated if we try to write a file containing this tag OffsetPair => -1, }, 0x8782 => 'T88Options', #20 0x87ac => 'ImageLayer', 0x87af => { Name => 'GeoTiffDirectory', Format => 'undef', Binary => 1, Notes => q{ these "GeoTiff" tags may read and written as a block, but they aren't extracted unless specifically requested. Byte order changes are handled automatically when copying between TIFF images with different byte order }, RawConv => '$val . GetByteOrder()', # save byte order }, 0x87b0 => { Name => 'GeoTiffDoubleParams', Format => 'undef', Binary => 1, RawConv => '$val . GetByteOrder()', # save byte order }, 0x87b1 => { Name => 'GeoTiffAsciiParams', Binary => 1, }, 0x87be => 'JBIGOptions', #29 0x8822 => { Name => 'ExposureProgram', Groups => { 2 => 'Camera' }, Notes => 'the value of 9 is not standard EXIF, but is used by the Canon EOS 7D', PrintConv => { 0 => 'Not Defined', 1 => 'Manual', 2 => 'Program AE', 3 => 'Aperture-priority AE', 4 => 'Shutter speed priority AE', 5 => 'Creative (Slow speed)', 6 => 'Action (High speed)', 7 => 'Portrait', 8 => 'Landscape', 9 => 'Bulb', #25 }, }, 0x8824 => { Name => 'SpectralSensitivity', Groups => { 2 => 'Camera' }, }, 0x8825 => { Name => 'GPSInfo', Groups => { 1 => 'GPS' }, Flags => 'SubIFD', SubDirectory => { DirName => 'GPS', TagTable => 'Image::ExifTool::GPS::Main', Start => '$val', MaxSubdirs => 1, }, }, 0x8827 => { Name => 'ISO', Notes => q{ called ISOSpeedRatings by EXIF 2.2, then PhotographicSensitivity by the EXIF 2.3 spec. }, PrintConv => '$val=~s/\s+/, /g; $val', }, 0x8828 => { Name => 'Opto-ElectricConvFactor', Notes => 'called OECF by the EXIF spec.', Binary => 1, }, 0x8829 => 'Interlace', #12 0x882a => 'TimeZoneOffset', #12 0x882b => 'SelfTimerMode', #12 0x8830 => { #24 Name => 'SensitivityType', Notes => 'applies to EXIF:ISO tag', PrintConv => { 0 => 'Unknown', 1 => 'Standard Output Sensitivity', 2 => 'Recommended Exposure Index', 3 => 'ISO Speed', 4 => 'Standard Output Sensitivity and Recommended Exposure Index', 5 => 'Standard Output Sensitivity and ISO Speed', 6 => 'Recommended Exposure Index and ISO Speed', 7 => 'Standard Output Sensitivity, Recommended Exposure Index and ISO Speed', }, }, 0x8831 => 'StandardOutputSensitivity', #24 0x8832 => 'RecommendedExposureIndex', #24 0x8833 => 'ISOSpeed', #24 0x8834 => { #24 Name => 'ISOSpeedLatitudeyyy', Description => 'ISO Speed Latitude yyy', }, 0x8835 => { #24 Name => 'ISOSpeedLatitudezzz', Description => 'ISO Speed Latitude zzz', }, 0x885c => 'FaxRecvParams', #9 0x885d => 'FaxSubAddress', #9 0x885e => 'FaxRecvTime', #9 0x8871 => 'FedexEDR', #exifprobe (NC) 0x888a => { #PH Name => 'LeafSubIFD', Format => 'int32u', # Leaf incorrectly uses 'undef' format! Groups => { 1 => 'LeafSubIFD' }, Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Leaf::SubIFD', Start => '$val', }, }, 0x9000 => { Name => 'ExifVersion', RawConv => '$val=~s/\0+$//; $val', # (some idiots add null terminators) }, 0x9003 => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, Notes => 'date/time when original image was taken', PrintConv => '$self->ConvertDateTime($val)', }, 0x9004 => { Name => 'CreateDate', Groups => { 2 => 'Time' }, Notes => 'called DateTimeDigitized by the EXIF spec.', PrintConv => '$self->ConvertDateTime($val)', }, 0x9009 => { # undef[44] (or undef[11]) written by Google Plus uploader - PH Name => 'GooglePlusUploadCode', Format => 'int8u', Count => -1, }, 0x9101 => { Name => 'ComponentsConfiguration', Format => 'int8u', PrintConvColumns => 2, PrintConv => { 0 => '-', 1 => 'Y', 2 => 'Cb', 3 => 'Cr', 4 => 'R', 5 => 'G', 6 => 'B', OTHER => sub { my ($val, $inv, $conv) = @_; my @a = split /,?\s+/, $val; if ($inv) { my %invConv; $invConv{lc $$conv{$_}} = $_ foreach keys %$conv; # strings like "YCbCr" and "RGB" still work for writing @a = $a[0] =~ /(Y|Cb|Cr|R|G|B)/g if @a == 1; foreach (@a) { $_ = $invConv{lc $_}; return undef unless defined $_; } push @a, 0 while @a < 4; } else { foreach (@a) { $_ = $$conv{$_} || "Err ($_)"; } } return join ', ', @a; }, }, }, 0x9102 => 'CompressedBitsPerPixel', # 0x9103 - int16u: 1 (found in Pentax XG-1 samples) 0x9201 => { Name => 'ShutterSpeedValue', Notes => 'displayed in seconds, but stored as an APEX value', Format => 'rational64s', # Leica M8 patch (incorrectly written as rational64u) ValueConv => 'abs($val)<100 ? 2**(-$val) : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x9202 => { Name => 'ApertureValue', Notes => 'displayed as an F number, but stored as an APEX value', ValueConv => '2 ** ($val / 2)', PrintConv => 'sprintf("%.1f",$val)', }, # Wikipedia: BrightnessValue = Bv = Av + Tv - Sv # ExifTool: LightValue = LV = Av + Tv - Sv + 5 (5 is the Sv for ISO 100 in Exif usage) 0x9203 => 'BrightnessValue', 0x9204 => { Name => 'ExposureCompensation', Format => 'rational64s', # Leica M8 patch (incorrectly written as rational64u) Notes => 'called ExposureBiasValue by the EXIF spec.', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', }, 0x9205 => { Name => 'MaxApertureValue', Notes => 'displayed as an F number, but stored as an APEX value', Groups => { 2 => 'Camera' }, ValueConv => '2 ** ($val / 2)', PrintConv => 'sprintf("%.1f",$val)', }, 0x9206 => { Name => 'SubjectDistance', Groups => { 2 => 'Camera' }, PrintConv => '$val =~ /^(inf|undef)$/ ? $val : "${val} m"', }, 0x9207 => { Name => 'MeteringMode', Groups => { 2 => 'Camera' }, PrintConv => { 0 => 'Unknown', 1 => 'Average', 2 => 'Center-weighted average', 3 => 'Spot', 4 => 'Multi-spot', 5 => 'Multi-segment', 6 => 'Partial', 255 => 'Other', }, }, 0x9208 => { Name => 'LightSource', Groups => { 2 => 'Camera' }, SeparateTable => 'LightSource', PrintConv => \%lightSource, }, 0x9209 => { Name => 'Flash', Groups => { 2 => 'Camera' }, Flags => 'PrintHex', SeparateTable => 'Flash', PrintConv => \%flash, }, 0x920a => { Name => 'FocalLength', Groups => { 2 => 'Camera' }, PrintConv => 'sprintf("%.1f mm",$val)', }, # Note: tags 0x920b-0x9217 are duplicates of 0xa20b-0xa217 # (The TIFF standard uses 0xa2xx, but you'll find both in images) 0x920b => { #12 Name => 'FlashEnergy', Groups => { 2 => 'Camera' }, }, 0x920c => 'SpatialFrequencyResponse', #12 (not in Fuji images - PH) 0x920d => 'Noise', #12 0x920e => 'FocalPlaneXResolution', #12 0x920f => 'FocalPlaneYResolution', #12 0x9210 => { #12 Name => 'FocalPlaneResolutionUnit', Groups => { 2 => 'Camera' }, PrintConv => { 1 => 'None', 2 => 'inches', 3 => 'cm', 4 => 'mm', 5 => 'um', }, }, 0x9211 => 'ImageNumber', #12 0x9212 => { #12 Name => 'SecurityClassification', PrintConv => { T => 'Top Secret', S => 'Secret', C => 'Confidential', R => 'Restricted', U => 'Unclassified', }, }, 0x9213 => 'ImageHistory', #12 0x9214 => { Name => 'SubjectArea', Groups => { 2 => 'Camera' }, }, 0x9215 => 'ExposureIndex', #12 0x9216 => 'TIFF-EPStandardID', #12 0x9217 => { #12 Name => 'SensingMethod', Groups => { 2 => 'Camera' }, Notes => 'values 1 and 6 are not standard EXIF', PrintConv => { 1 => 'Monochrome area', #12 (not standard EXIF) 2 => 'One-chip color area', 3 => 'Two-chip color area', 4 => 'Three-chip color area', 5 => 'Color sequential area', 6 => 'Monochrome linear', #12 (not standard EXIF) 7 => 'Trilinear', 8 => 'Color sequential linear', }, }, 0x923a => 'CIP3DataFile', #20 0x923b => 'CIP3Sheet', #20 0x923c => 'CIP3Side', #20 0x923f => 'StoNits', #9 # handle maker notes as a conditional list 0x927c => \@Image::ExifTool::MakerNotes::Main, 0x9286 => { Name => 'UserComment', # I have seen other applications write it incorrectly as 'string' or 'int8u' Format => 'undef', RawConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val,1,$tag)', }, 0x9290 => { Name => 'SubSecTime', Groups => { 2 => 'Time' }, ValueConv => '$val=~s/ +$//; $val', # trim trailing blanks }, 0x9291 => { Name => 'SubSecTimeOriginal', Groups => { 2 => 'Time' }, ValueConv => '$val=~s/ +$//; $val', # trim trailing blanks }, 0x9292 => { Name => 'SubSecTimeDigitized', Groups => { 2 => 'Time' }, ValueConv => '$val=~s/ +$//; $val', # trim trailing blanks }, # The following 3 tags are found in MSOffice TIFF images # References: # http://social.msdn.microsoft.com/Forums/en-US/os_standocs/thread/03086d55-294a-49d5-967a-5303d34c40f8/ # http://blogs.msdn.com/openspecification/archive/2009/12/08/details-of-three-tiff-tag-extensions-that-microsoft-office-document-imaging-modi-software-may-write-into-the-tiff-files-it-generates.aspx # http://www.microsoft.com/downloads/details.aspx?FamilyID=0dbc435d-3544-4f4b-9092-2f2643d64a39&displaylang=en#filelist 0x932f => 'MSDocumentText', 0x9330 => { Name => 'MSPropertySetStorage', Binary => 1, }, 0x9331 => { Name => 'MSDocumentTextPosition', Binary => 1, # (just in case -- don't know what format this is) }, 0x935c => { #3/19 Name => 'ImageSourceData', Binary => 1, Protected => 1, # (because this can be hundreds of megabytes) }, 0x9c9b => { Name => 'XPTitle', Format => 'undef', ValueConv => '$self->Decode($val,"UCS2","II")', }, 0x9c9c => { Name => 'XPComment', Format => 'undef', ValueConv => '$self->Decode($val,"UCS2","II")', }, 0x9c9d => { Name => 'XPAuthor', Groups => { 2 => 'Author' }, Format => 'undef', ValueConv => '$self->Decode($val,"UCS2","II")', }, 0x9c9e => { Name => 'XPKeywords', Format => 'undef', ValueConv => '$self->Decode($val,"UCS2","II")', }, 0x9c9f => { Name => 'XPSubject', Format => 'undef', ValueConv => '$self->Decode($val,"UCS2","II")', }, 0xa000 => { Name => 'FlashpixVersion', RawConv => '$val=~s/\0+$//; $val', # (some idiots add null terminators) }, 0xa001 => { Name => 'ColorSpace', Notes => q{ the value of 0x2 is not standard EXIF. Instead, an Adobe RGB image is indicated by "Uncalibrated" with an InteropIndex of "R03". The values 0xfffd and 0xfffe are also non-standard, and are used by some Sony cameras }, PrintHex => 1, PrintConv => { 1 => 'sRGB', 2 => 'Adobe RGB', 0xffff => 'Uncalibrated', # Sony uses these definitions: (ref JD) # 0xffff => 'Adobe RGB', (conflicts with Uncalibrated) 0xfffe => 'ICC Profile', 0xfffd => 'Wide Gamut RGB', }, }, 0xa002 => { Name => 'ExifImageWidth', Notes => 'called PixelXDimension by the EXIF spec.', }, 0xa003 => { Name => 'ExifImageHeight', Notes => 'called PixelYDimension by the EXIF spec.', }, 0xa004 => 'RelatedSoundFile', 0xa005 => { Name => 'InteropOffset', Groups => { 1 => 'InteropIFD' }, Flags => 'SubIFD', Description => 'Interoperability Offset', SubDirectory => { DirName => 'InteropIFD', Start => '$val', MaxSubdirs => 1, }, }, 0xa20b => { Name => 'FlashEnergy', Groups => { 2 => 'Camera' }, }, 0xa20c => { Name => 'SpatialFrequencyResponse', PrintConv => 'Image::ExifTool::Exif::PrintSFR($val)', }, 0xa20d => 'Noise', 0xa20e => { Name => 'FocalPlaneXResolution', Groups => { 2 => 'Camera' } }, 0xa20f => { Name => 'FocalPlaneYResolution', Groups => { 2 => 'Camera' } }, 0xa210 => { Name => 'FocalPlaneResolutionUnit', Groups => { 2 => 'Camera' }, Notes => 'values 1, 4 and 5 are not standard EXIF', PrintConv => { 1 => 'None', # (not standard EXIF) 2 => 'inches', 3 => 'cm', 4 => 'mm', # (not standard EXIF) 5 => 'um', # (not standard EXIF) }, }, 0xa211 => 'ImageNumber', 0xa212 => 'SecurityClassification', 0xa213 => 'ImageHistory', 0xa214 => { Name => 'SubjectLocation', Groups => { 2 => 'Camera' }, }, 0xa215 => 'ExposureIndex', 0xa216 => 'TIFF-EPStandardID', 0xa217 => { Name => 'SensingMethod', Groups => { 2 => 'Camera' }, PrintConv => { 1 => 'Not defined', 2 => 'One-chip color area', 3 => 'Two-chip color area', 4 => 'Three-chip color area', 5 => 'Color sequential area', 7 => 'Trilinear', 8 => 'Color sequential linear', }, }, 0xa300 => { Name => 'FileSource', PrintConv => { 1 => 'Film Scanner', 2 => 'Reflection Print Scanner', 3 => 'Digital Camera', # handle the case where Sigma incorrectly gives this tag a count of 4 "\3\0\0\0" => 'Sigma Digital Camera', }, }, 0xa301 => { Name => 'SceneType', PrintConv => { 1 => 'Directly photographed', }, }, 0xa302 => { Name => 'CFAPattern', RawConv => 'Image::ExifTool::Exif::DecodeCFAPattern($self, $val)', PrintConv => 'Image::ExifTool::Exif::PrintCFAPattern($val)', }, 0xa401 => { Name => 'CustomRendered', PrintConv => { 0 => 'Normal', 1 => 'Custom', # 4 - Apple iPhone5c horizontal orientation # 6 - Apple iPhone5c panorama }, }, 0xa402 => { Name => 'ExposureMode', Groups => { 2 => 'Camera' }, PrintConv => { 0 => 'Auto', 1 => 'Manual', 2 => 'Auto bracket', # have seen 3 from Samsung EX1, NX30, NX200 - PH }, }, 0xa403 => { Name => 'WhiteBalance', Groups => { 2 => 'Camera' }, # set Priority to zero to keep this WhiteBalance from overriding the # MakerNotes WhiteBalance, since the MakerNotes WhiteBalance and is more # accurate and contains more information (if it exists) Priority => 0, PrintConv => { 0 => 'Auto', 1 => 'Manual', }, }, 0xa404 => { Name => 'DigitalZoomRatio', Groups => { 2 => 'Camera' }, }, 0xa405 => { Name => 'FocalLengthIn35mmFormat', Notes => 'called FocalLengthIn35mmFilm by the EXIF spec.', Groups => { 2 => 'Camera' }, PrintConv => '"$val mm"', }, 0xa406 => { Name => 'SceneCaptureType', Groups => { 2 => 'Camera' }, PrintConv => { 0 => 'Standard', 1 => 'Landscape', 2 => 'Portrait', 3 => 'Night', # 4 - HDR (Samsung GT-I9300) }, }, 0xa407 => { Name => 'GainControl', Groups => { 2 => 'Camera' }, PrintConv => { 0 => 'None', 1 => 'Low gain up', 2 => 'High gain up', 3 => 'Low gain down', 4 => 'High gain down', }, }, 0xa408 => { Name => 'Contrast', Groups => { 2 => 'Camera' }, PrintConv => { 0 => 'Normal', 1 => 'Low', 2 => 'High', }, }, 0xa409 => { Name => 'Saturation', Groups => { 2 => 'Camera' }, PrintConv => { 0 => 'Normal', 1 => 'Low', 2 => 'High', }, }, 0xa40a => { Name => 'Sharpness', Groups => { 2 => 'Camera' }, PrintConv => { 0 => 'Normal', 1 => 'Soft', 2 => 'Hard', }, }, 0xa40b => { Name => 'DeviceSettingDescription', Groups => { 2 => 'Camera' }, Binary => 1, }, 0xa40c => { Name => 'SubjectDistanceRange', Groups => { 2 => 'Camera' }, PrintConv => { 0 => 'Unknown', 1 => 'Macro', 2 => 'Close', 3 => 'Distant', }, }, # 0xa40d - int16u: 0 (GE E1486 TW) # 0xa40e - int16u: 1 (GE E1486 TW) 0xa420 => 'ImageUniqueID', 0xa430 => { #24 Name => 'OwnerName', Notes => 'called CameraOwnerName by the EXIF spec.', }, 0xa431 => { #24 Name => 'SerialNumber', Notes => 'called BodySerialNumber by the EXIF spec.', }, 0xa432 => { #24 Name => 'LensInfo', Notes => q{ 4 rational values giving focal and aperture ranges, called LensSpecification by the EXIF spec. }, # convert to the form "12-20mm f/3.8-4.5" or "50mm f/1.4" PrintConv => \&Image::ExifTool::Exif::PrintLensInfo, }, 0xa433 => 'LensMake', #24 0xa434 => 'LensModel', #24 0xa435 => 'LensSerialNumber', #24 0xa480 => 'GDALMetadata', #3 0xa481 => 'GDALNoData', #3 0xa500 => 'Gamma', 0xafc0 => 'ExpandSoftware', #JD (Opanda) 0xafc1 => 'ExpandLens', #JD (Opanda) 0xafc2 => 'ExpandFilm', #JD (Opanda) 0xafc3 => 'ExpandFilterLens', #JD (Opanda) 0xafc4 => 'ExpandScanner', #JD (Opanda) 0xafc5 => 'ExpandFlashLamp', #JD (Opanda) # # Windows Media Photo / HD Photo (WDP/HDP) tags # 0xbc01 => { #13 Name => 'PixelFormat', PrintHex => 1, Format => 'undef', Notes => q{ tags 0xbc** are used in Windows HD Photo (HDP and WDP) images. The actual PixelFormat values are 16-byte GUID's but the leading 15 bytes, '6fddc324-4e03-4bfe-b1853-d77768dc9', have been removed below to avoid unnecessary clutter }, ValueConv => q{ require Image::ExifTool::ASF; $val = Image::ExifTool::ASF::GetGUID($val); # GUID's are too long, so remove redundant information $val =~ s/^6fddc324-4e03-4bfe-b185-3d77768dc9//i and $val = hex($val); return $val; }, PrintConv => { 0x0d => '24-bit RGB', 0x0c => '24-bit BGR', 0x0e => '32-bit BGR', 0x15 => '48-bit RGB', 0x12 => '48-bit RGB Fixed Point', 0x3b => '48-bit RGB Half', 0x18 => '96-bit RGB Fixed Point', 0x1b => '128-bit RGB Float', 0x0f => '32-bit BGRA', 0x16 => '64-bit RGBA', 0x1d => '64-bit RGBA Fixed Point', 0x3a => '64-bit RGBA Half', 0x1e => '128-bit RGBA Fixed Point', 0x19 => '128-bit RGBA Float', 0x10 => '32-bit PBGRA', 0x17 => '64-bit PRGBA', 0x1a => '128-bit PRGBA Float', 0x1c => '32-bit CMYK', 0x2c => '40-bit CMYK Alpha', 0x1f => '64-bit CMYK', 0x2d => '80-bit CMYK Alpha', 0x20 => '24-bit 3 Channels', 0x21 => '32-bit 4 Channels', 0x22 => '40-bit 5 Channels', 0x23 => '48-bit 6 Channels', 0x24 => '56-bit 7 Channels', 0x25 => '64-bit 8 Channels', 0x2e => '32-bit 3 Channels Alpha', 0x2f => '40-bit 4 Channels Alpha', 0x30 => '48-bit 5 Channels Alpha', 0x31 => '56-bit 6 Channels Alpha', 0x32 => '64-bit 7 Channels Alpha', 0x33 => '72-bit 8 Channels Alpha', 0x26 => '48-bit 3 Channels', 0x27 => '64-bit 4 Channels', 0x28 => '80-bit 5 Channels', 0x29 => '96-bit 6 Channels', 0x2a => '112-bit 7 Channels', 0x2b => '128-bit 8 Channels', 0x34 => '64-bit 3 Channels Alpha', 0x35 => '80-bit 4 Channels Alpha', 0x36 => '96-bit 5 Channels Alpha', 0x37 => '112-bit 6 Channels Alpha', 0x38 => '128-bit 7 Channels Alpha', 0x39 => '144-bit 8 Channels Alpha', 0x08 => '8-bit Gray', 0x0b => '16-bit Gray', 0x13 => '16-bit Gray Fixed Point', 0x3e => '16-bit Gray Half', 0x3f => '32-bit Gray Fixed Point', 0x11 => '32-bit Gray Float', 0x05 => 'Black & White', 0x09 => '16-bit BGR555', 0x0a => '16-bit BGR565', 0x13 => '32-bit BGR101010', 0x3d => '32-bit RGBE', }, }, 0xbc02 => { #13 Name => 'Transformation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Mirror vertical', 2 => 'Mirror horizontal', 3 => 'Rotate 180', 4 => 'Rotate 90 CW', 5 => 'Mirror horizontal and rotate 90 CW', 6 => 'Mirror horizontal and rotate 270 CW', 7 => 'Rotate 270 CW', }, }, 0xbc03 => { #13 Name => 'Uncompressed', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, 0xbc04 => { #13 Name => 'ImageType', PrintConv => { BITMASK => { 0 => 'Preview', 1 => 'Page', } }, }, 0xbc80 => 'ImageWidth', #13 0xbc81 => 'ImageHeight', #13 0xbc82 => 'WidthResolution', #13 0xbc83 => 'HeightResolution', #13 0xbcc0 => { #13 Name => 'ImageOffset', IsOffset => 1, OffsetPair => 0xbcc1, # point to associated byte count }, 0xbcc1 => { #13 Name => 'ImageByteCount', OffsetPair => 0xbcc0, # point to associated offset }, 0xbcc2 => { #13 Name => 'AlphaOffset', IsOffset => 1, OffsetPair => 0xbcc3, # point to associated byte count }, 0xbcc3 => { #13 Name => 'AlphaByteCount', OffsetPair => 0xbcc2, # point to associated offset }, 0xbcc4 => { #13 Name => 'ImageDataDiscard', PrintConv => { 0 => 'Full Resolution', 1 => 'Flexbits Discarded', 2 => 'HighPass Frequency Data Discarded', 3 => 'Highpass and LowPass Frequency Data Discarded', }, }, 0xbcc5 => { #13 Name => 'AlphaDataDiscard', PrintConv => { 0 => 'Full Resolution', 1 => 'Flexbits Discarded', 2 => 'HighPass Frequency Data Discarded', 3 => 'Highpass and LowPass Frequency Data Discarded', }, }, # 0xc427 => 'OceScanjobDesc', #3 0xc428 => 'OceApplicationSelector', #3 0xc429 => 'OceIDNumber', #3 0xc42a => 'OceImageLogic', #3 0xc44f => { Name => 'Annotations', Binary => 1 }, #7/19 0xc4a5 => { Name => 'PrintIM', # (writable directory!) # must set Writable here so this tag will be saved with MakerNotes option Writable => 'undef', WriteGroup => 'IFD0', Binary => 1, # (don't make Binary/Protected because we can't copy individual PrintIM tags anyway) Description => 'Print Image Matching', SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main', }, PrintConvInv => '$val =~ /^PrintIM/ ? $val : undef', # quick validation }, 0xc573 => { #PH Name => 'OriginalFileName', Notes => 'used by some obscure software', # (possibly Swizzy Photosmacker?) # (it is a 'string', but obscure, so don't make it writable) }, 0xc580 => { #20 Name => 'USPTOOriginalContentType', PrintConv => { 0 => 'Text or Drawing', 1 => 'Grayscale', 2 => 'Color', }, }, # 0xc5d8 - found in CR2 images # 0xc5d9 - found in CR2 images # 0xc5e0 - found in CR2 images # # DNG tags 0xc6XX and 0xc7XX (ref 2 unless otherwise stated) # 0xc612 => { Name => 'DNGVersion', Notes => 'tags 0xc612-0xc7b5 are used in DNG images unless otherwise noted', DataMember => 'DNGVersion', RawConv => '$$self{DNGVersion} = $val', PrintConv => '$val =~ tr/ /./; $val', }, 0xc613 => { Name => 'DNGBackwardVersion', PrintConv => '$val =~ tr/ /./; $val', }, 0xc614 => 'UniqueCameraModel', 0xc615 => { Name => 'LocalizedCameraModel', Format => 'string', PrintConv => '$self->Printable($val, 0)', }, 0xc616 => { Name => 'CFAPlaneColor', PrintConv => q{ my @cols = qw(Red Green Blue Cyan Magenta Yellow White); my @vals = map { $cols[$_] || "Unknown($_)" } split(' ', $val); return join(',', @vals); }, }, 0xc617 => { Name => 'CFALayout', PrintConv => { 1 => 'Rectangular', 2 => 'Even columns offset down 1/2 row', 3 => 'Even columns offset up 1/2 row', 4 => 'Even rows offset right 1/2 column', 5 => 'Even rows offset left 1/2 column', # the following are new for DNG 1.3: 6 => 'Even rows offset up by 1/2 row, even columns offset left by 1/2 column', 7 => 'Even rows offset up by 1/2 row, even columns offset right by 1/2 column', 8 => 'Even rows offset down by 1/2 row, even columns offset left by 1/2 column', 9 => 'Even rows offset down by 1/2 row, even columns offset right by 1/2 column', }, }, 0xc618 => { Name => 'LinearizationTable', Binary => 1 }, 0xc619 => 'BlackLevelRepeatDim', 0xc61a => 'BlackLevel', 0xc61b => { Name => 'BlackLevelDeltaH', %longBin }, 0xc61c => { Name => 'BlackLevelDeltaV', %longBin }, 0xc61d => 'WhiteLevel', 0xc61e => 'DefaultScale', 0xc61f => 'DefaultCropOrigin', 0xc620 => 'DefaultCropSize', 0xc621 => 'ColorMatrix1', 0xc622 => 'ColorMatrix2', 0xc623 => 'CameraCalibration1', 0xc624 => 'CameraCalibration2', 0xc625 => 'ReductionMatrix1', 0xc626 => 'ReductionMatrix2', 0xc627 => 'AnalogBalance', 0xc628 => 'AsShotNeutral', 0xc629 => 'AsShotWhiteXY', 0xc62a => 'BaselineExposure', 0xc62b => 'BaselineNoise', 0xc62c => 'BaselineSharpness', 0xc62d => 'BayerGreenSplit', 0xc62e => 'LinearResponseLimit', 0xc62f => { Name => 'CameraSerialNumber', Groups => { 2 => 'Camera' }, }, 0xc630 => { Name => 'DNGLensInfo', Groups => { 2 => 'Camera' }, PrintConv =>\&PrintLensInfo, }, 0xc631 => 'ChromaBlurRadius', 0xc632 => 'AntiAliasStrength', 0xc633 => 'ShadowScale', 0xc634 => [ { Condition => '$$self{TIFF_TYPE} =~ /^(ARW|SR2)$/', Name => 'SR2Private', Groups => { 1 => 'SR2' }, Flags => 'SubIFD', Format => 'int32u', # some utilites have problems unless this is int8u format: # - Adobe Camera Raw 5.3 gives an error # - Apple Preview 10.5.8 gets the wrong white balance FixFormat => 'int8u', # (stupid Sony) SubDirectory => { DirName => 'SR2Private', TagTable => 'Image::ExifTool::Sony::SR2Private', Start => '$val', }, }, { Condition => '$$valPt =~ /^Adobe\0/', Name => 'DNGAdobeData', Flags => [ 'Binary', 'Protected' ], Writable => 'undef', # (writable directory!) (to make it possible to delete this mess) WriteGroup => 'IFD0', NestedHtmlDump => 1, SubDirectory => { TagTable => 'Image::ExifTool::DNG::AdobeData' }, Format => 'undef', # written incorrectly as int8u (change to undef for speed) }, { # Pentax/Samsung models that write AOC maker notes in JPG images: # K-5,K-7,K-m,K-x,K-r,K10D,K20D,K100D,K110D,K200D,K2000,GX10,GX20 # (Note: the following expression also appears in WriteExif.pl) Condition => q{ $$valPt =~ /^(PENTAX |SAMSUNG)\0/ and $$self{Model} =~ /\b(K(-[57mrx]|(10|20|100|110|200)D|2000)|GX(10|20))\b/ }, Name => 'MakerNotePentax', MakerNotes => 1, # (causes "MakerNotes header" to be identified in HtmlDump output) Binary => 1, # Note: Don't make this block-writable for a few reasons: # 1) It would be dangerous (possibly confusing Pentax software) # 2) It is a different format from the JPEG version of MakerNotePentax # 3) It is converted to JPEG format by RebuildMakerNotes() when copying SubDirectory => { TagTable => 'Image::ExifTool::Pentax::Main', Start => '$valuePtr + 10', Base => '$start - 10', ByteOrder => 'Unknown', # easier to do this than read byteorder word }, Format => 'undef', # written incorrectly as int8u (change to undef for speed) }, { # must duplicate the above tag with a different name for more recent # Pentax models which use the "PENTAX" instead of the "AOC" maker notes # in JPG images (needed when copying maker notes from DNG to JPG) Condition => '$$valPt =~ /^(PENTAX |SAMSUNG)\0/', Name => 'MakerNotePentax5', MakerNotes => 1, Binary => 1, SubDirectory => { TagTable => 'Image::ExifTool::Pentax::Main', Start => '$valuePtr + 10', Base => '$start - 10', ByteOrder => 'Unknown', }, Format => 'undef', }, { Name => 'DNGPrivateData', Flags => [ 'Binary', 'Protected' ], Format => 'undef', Writable => 'undef', WriteGroup => 'IFD0', }, ], 0xc635 => { Name => 'MakerNoteSafety', PrintConv => { 0 => 'Unsafe', 1 => 'Safe', }, }, 0xc640 => { #15 Name => 'RawImageSegmentation', # (int16u[3], not writable) Notes => q{ used in segmented Canon CR2 images. 3 numbers: 1. Number of segments minus one; 2. Pixel width of segments except last; 3. Pixel width of last segment }, }, 0xc65a => { Name => 'CalibrationIlluminant1', SeparateTable => 'LightSource', PrintConv => \%lightSource, }, 0xc65b => { Name => 'CalibrationIlluminant2', SeparateTable => 'LightSource', PrintConv => \%lightSource, }, 0xc65c => 'BestQualityScale', 0xc65d => { Name => 'RawDataUniqueID', Format => 'undef', ValueConv => 'uc(unpack("H*",$val))', }, 0xc660 => { #3 Name => 'AliasLayerMetadata', Notes => 'used by Alias Sketchbook Pro', }, 0xc68b => { Name => 'OriginalRawFileName', Format => 'string', # sometimes written as int8u }, 0xc68c => { Name => 'OriginalRawFileData', # (writable directory!) Writable => 'undef', # must be defined here so tag will be extracted if specified WriteGroup => 'IFD0', Flags => [ 'Binary', 'Protected' ], SubDirectory => { TagTable => 'Image::ExifTool::DNG::OriginalRaw', }, }, 0xc68d => 'ActiveArea', 0xc68e => 'MaskedAreas', 0xc68f => { Name => 'AsShotICCProfile', Binary => 1, Writable => 'undef', # must be defined here so tag will be extracted if specified SubDirectory => { DirName => 'AsShotICCProfile', TagTable => 'Image::ExifTool::ICC_Profile::Main', }, }, 0xc690 => 'AsShotPreProfileMatrix', 0xc691 => { Name => 'CurrentICCProfile', Binary => 1, Writable => 'undef', # must be defined here so tag will be extracted if specified SubDirectory => { DirName => 'CurrentICCProfile', TagTable => 'Image::ExifTool::ICC_Profile::Main', }, }, 0xc692 => 'CurrentPreProfileMatrix', 0xc6bf => 'ColorimetricReference', 0xc6d2 => { #JD (Panasonic DMC-TZ5) # this text is UTF-8 encoded (hooray!) - PH (TZ5) Name => 'PanasonicTitle', Format => 'string', # written incorrectly as 'undef' Notes => 'proprietary Panasonic tag used for baby/pet name, etc', # panasonic always records this tag (64 zero bytes), # so ignore it unless it contains valid information RawConv => 'length($val) ? $val : undef', ValueConv => '$self->Decode($val, "UTF8")', }, 0xc6c5 => { Name => 'SRawType', Description => 'SRaw Type' }, #exifprobe (CR2 proprietary) 0xc6d3 => { #PH (Panasonic DMC-FS7) Name => 'PanasonicTitle2', Format => 'string', # written incorrectly as 'undef' Notes => 'proprietary Panasonic tag used for baby/pet name with age', # panasonic always records this tag (128 zero bytes), # so ignore it unless it contains valid information RawConv => 'length($val) ? $val : undef', ValueConv => '$self->Decode($val, "UTF8")', }, # 0xc6dc - int32u[4]: found in CR2 images (PH, 7DmkIII) 0xc6f3 => 'CameraCalibrationSig', 0xc6f4 => 'ProfileCalibrationSig', 0xc6f5 => { Name => 'ProfileIFD', # (ExtraCameraProfiles) Groups => { 1 => 'ProfileIFD' }, Flags => 'SubIFD', SubDirectory => { ProcessProc => \&ProcessTiffIFD, WriteProc => \&ProcessTiffIFD, DirName => 'ProfileIFD', Start => '$val', Base => '$start', # offsets relative to start of TIFF-like header MaxSubdirs => 10, Magic => 0x4352, # magic number for TIFF-like header }, }, 0xc6f6 => 'AsShotProfileName', 0xc6f7 => 'NoiseReductionApplied', 0xc6f8 => 'ProfileName', 0xc6f9 => 'ProfileHueSatMapDims', 0xc6fa => { Name => 'ProfileHueSatMapData1', %longBin }, 0xc6fb => { Name => 'ProfileHueSatMapData2', %longBin }, 0xc6fc => { Name => 'ProfileToneCurve', Binary => 1, }, 0xc6fd => { Name => 'ProfileEmbedPolicy', PrintConv => { 0 => 'Allow Copying', 1 => 'Embed if Used', 2 => 'Never Embed', 3 => 'No Restrictions', }, }, 0xc6fe => 'ProfileCopyright', 0xc714 => 'ForwardMatrix1', 0xc715 => 'ForwardMatrix2', 0xc716 => 'PreviewApplicationName', 0xc717 => 'PreviewApplicationVersion', 0xc718 => 'PreviewSettingsName', 0xc719 => { Name => 'PreviewSettingsDigest', Format => 'undef', ValueConv => 'unpack("H*", $val)', }, 0xc71a => 'PreviewColorSpace', 0xc71b => { Name => 'PreviewDateTime', Groups => { 2 => 'Time' }, ValueConv => q{ require Image::ExifTool::XMP; return Image::ExifTool::XMP::ConvertXMPDate($val); }, }, 0xc71c => { Name => 'RawImageDigest', Format => 'undef', ValueConv => 'unpack("H*", $val)', }, 0xc71d => { Name => 'OriginalRawFileDigest', Format => 'undef', ValueConv => 'unpack("H*", $val)', }, 0xc71e => 'SubTileBlockSize', 0xc71f => 'RowInterleaveFactor', 0xc725 => 'ProfileLookTableDims', 0xc726 => { Name => 'ProfileLookTableData', Binary => 1, }, 0xc740 => { # DNG 1.3 Name => 'OpcodeList1', Binary => 1, # opcodes: # 1 => 'WarpRectilinear', # 2 => 'WarpFisheye', # 3 => 'FixVignetteRadial', # 4 => 'FixBadPixelsConstant', # 5 => 'FixBadPixelsList', # 6 => 'TrimBounds', # 7 => 'MapTable', # 8 => 'MapPolynomial', # 9 => 'GainMap', # 10 => 'DeltaPerRow', # 11 => 'DeltaPerColumn', # 12 => 'ScalePerRow', # 13 => 'ScalePerColumn', }, 0xc741 => { # DNG 1.3 Name => 'OpcodeList2', Binary => 1, }, 0xc74e => { # DNG 1.3 Name => 'OpcodeList3', Binary => 1, }, 0xc761 => 'NoiseProfile', # DNG 1.3 0xc763 => { #28 Name => 'TimeCodes', ValueConv => q{ my @a = split ' ', $val; my @v; push @v, join('.', map { sprintf('%.2x',$_) } splice(@a,0,8)) while @a >= 8; join ' ', @v; }, # Note: Currently ignore the flags: # byte 0 0x80 - color frame # byte 0 0x40 - drop frame # byte 1 0x80 - field phase PrintConv => q{ my @a = map hex, split /[. ]+/, $val; my @v; while (@a >= 8) { my $str = sprintf("%.2x:%.2x:%.2x.%.2x", $a[3]&0x3f, $a[2]&0x7f, $a[1]&0x7f, $a[0]&0x3f); if ($a[3] & 0x80) { # date+timezone exist if BGF2 is set my $tz = $a[7] & 0x3f; my $bz = sprintf('%.2x', $tz); $bz = 100 if $bz =~ /[a-f]/i; # not BCD if ($bz < 26) { $tz = ($bz < 13 ? 0 : 26) - $bz; } elsif ($bz == 32) { $tz = 12.75; } elsif ($bz >= 28 and $bz <= 31) { $tz = 0; # UTC } elsif ($bz < 100) { undef $tz; # undefined or user-defined } elsif ($tz < 0x20) { $tz = (($tz < 0x10 ? 10 : 20) - $tz) - 0.5; } else { $tz = (($tz < 0x30 ? 53 : 63) - $tz) + 0.5; } if ($a[7] & 0x80) { # MJD format (/w UTC time) my ($h,$m,$s,$f) = split /[:.]/, $str; my $jday = sprintf('%x%.2x%.2x', reverse @a[4..6]); $str = ConvertUnixTime(($jday - 40587) * 24 * 3600 + ((($h+$tz) * 60) + $m) * 60 + $s) . ".$f"; $str =~ s/^(\d+):(\d+):(\d+) /$1-$2-${3}T/; } else { # YYMMDD (Note: CinemaDNG 1.1 example seems wrong) my $yr = sprintf('%.2x',$a[6]) + 1900; $yr += 100 if $yr < 1970; $str = sprintf('%d-%.2x-%.2xT%s',$yr,$a[5],$a[4],$str); } $str .= TimeZoneString($tz*60) if defined $tz; } push @v, $str; splice @a, 0, 8; } join ' ', @v; }, }, 0xc764 => { #28 Name => 'FrameRate', PrintConv => 'int($val * 1000 + 0.5) / 1000', }, 0xc772 => { #28 Name => 'TStop', PrintConv => 'join("-", map { sprintf("%.2f",$_) } split " ", $val)', }, 0xc789 => 'ReelName', #28 0xc791 => 'OriginalDefaultFinalSize', # DNG 1.4 0xc792 => { # DNG 1.4 Name => 'OriginalBestQualitySize', Notes => 'called OriginalBestQualityFinalSize by the DNG spec', }, 0xc793 => 'OriginalDefaultCropSize', # DNG 1.4 0xc7a1 => 'CameraLabel', #28 0xc7a3 => { # DNG 1.4 Name => 'ProfileHueSatMapEncoding', PrintConv => { 0 => 'Linear', 1 => 'sRGB', }, }, 0xc7a4 => { # DNG 1.4 Name => 'ProfileLookTableEncoding', PrintConv => { 0 => 'Linear', 1 => 'sRGB', }, }, 0xc7a5 => 'BaselineExposureOffset', # DNG 1.4 0xc7a6 => { # DNG 1.4 Name => 'DefaultBlackRender', PrintConv => { 0 => 'Auto', 1 => 'None', }, }, 0xc7a7 => { # DNG 1.4 Name => 'NewRawImageDigest', Format => 'undef', ValueConv => 'unpack("H*", $val)', }, 0xc7a8 => 'RawToPreviewGain', # DNG 1.4 # 0xc7aa - undocumented DNG tag written by LR4 (int32u[1] - val=256, related to fast load data?) 0xc7b5 => 'DefaultUserCrop', # DNG 1.4 0xea1c => { #13 Name => 'Padding', Binary => 1, Writable => 'undef', # must start with 0x1c 0xea by the WM Photo specification # (not sure what should happen if padding is only 1 byte) # (why does MicrosoftPhoto write "1c ea 00 00 00 08"?) RawConvInv => '$val=~s/^../\x1c\xea/s; $val', }, 0xea1d => { Name => 'OffsetSchema', Notes => "Microsoft's ill-conceived maker note offset difference", # From the Microsoft documentation: # # Any time the "Maker Note" is relocated by Windows, the Exif MakerNote # tag (37500) is updated automatically to reference the new location. In # addition, Windows records the offset (or difference) between the old and # new locations in the Exif OffsetSchema tag (59933). If the "Maker Note" # contains relative references, the developer can add the value in # OffsetSchema to the original references to find the correct information. # # My recommendation is for other developers to ignore this tag because the # information it contains is unreliable. It will be wrong if the image has # been subsequently edited by another application that doesn't recognize the # new Microsoft tag. # # The new tag unfortunately only gives the difference between the new maker # note offset and the original offset. Instead, it should have been designed # to store the original offset. The new offset may change if the image is # edited, which will invalidate the tag as currently written. If instead the # original offset had been stored, the new difference could be easily # calculated because the new maker note offset is known. # # I exchanged emails with a Microsoft technical representative, pointing out # this problem shortly after they released the update (Feb 2007), but so far # they have taken no steps to address this. }, # 0xefee - int16u: 0 - seen this from a WIC-scanned image # tags in the range 0xfde8-0xfe58 have been observed in PS7 files # generated from RAW images. They are all strings with the # tag name at the start of the string. To accomodate these types # of tags, all tags with values above 0xf000 are handled specially # by ProcessExif(). 0xfe00 => { Name => 'KDC_IFD', Groups => { 1 => 'KDC_IFD' }, Flags => 'SubIFD', Notes => 'used in some Kodak KDC images', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::KDC_IFD', DirName => 'KDC_IFD', Start => '$val', }, }, ); # EXIF Composite tags (plus other more general Composite tags) %Image::ExifTool::Exif::Composite = ( GROUPS => { 2 => 'Image' }, ImageSize => { Require => { 0 => 'ImageWidth', 1 => 'ImageHeight', }, Desire => { 2 => 'ExifImageWidth', 3 => 'ExifImageHeight', }, # use ExifImageWidth/Height only for Canon and Phase One TIFF-base RAW images ValueConv => q{ return "$val[2]x$val[3]" if $val[2] and $val[3] and $$self{TIFF_TYPE} =~ /^(CR2|Canon 1D RAW|IIQ|EIP)$/; return "$val[0]x$val[1]" if IsFloat($val[0]) and IsFloat($val[1]); return undef; }, }, Megapixels => { Require => 'ImageSize', ValueConv => 'my @d = ($val =~ /\d+/g); $d[0] * $d[1] / 1000000', PrintConv => 'sprintf("%.*f", ($val >= 1 ? 1 : ($val >= 0.001 ? 3 : 6)), $val)', }, # pick the best shutter speed value ShutterSpeed => { Desire => { 0 => 'ExposureTime', 1 => 'ShutterSpeedValue', 2 => 'BulbDuration', }, ValueConv => '($val[2] and $val[2]>0) ? $val[2] : (defined($val[0]) ? $val[0] : $val[1])', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, Aperture => { Desire => { 0 => 'FNumber', 1 => 'ApertureValue', }, RawConv => '($val[0] || $val[1]) ? $val : undef', ValueConv => '$val[0] || $val[1]', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', }, LightValue => { Notes => 'calculated LV -- similar to exposure value but normalized to ISO 100', Require => { 0 => 'Aperture', 1 => 'ShutterSpeed', 2 => 'ISO', }, ValueConv => 'Image::ExifTool::Exif::CalculateLV($val[0],$val[1],$prt[2])', PrintConv => 'sprintf("%.1f",$val)', }, FocalLength35efl => { #26/PH Description => 'Focal Length', Notes => 'this value may be incorrect if the image has been resized', Groups => { 2 => 'Camera' }, Require => { 0 => 'FocalLength', }, Desire => { 1 => 'ScaleFactor35efl', }, ValueConv => 'ToFloat(@val); ($val[0] || 0) * ($val[1] || 1)', PrintConv => '$val[1] ? sprintf("%.1f mm (35 mm equivalent: %.1f mm)", $val[0], $val) : sprintf("%.1f mm", $val)', }, ScaleFactor35efl => { #26/PH Description => 'Scale Factor To 35 mm Equivalent', Notes => q{ this value and any derived values may be incorrect if the image has been resized }, Groups => { 2 => 'Camera' }, Desire => { 0 => 'FocalLength', 1 => 'FocalLengthIn35mmFormat', 2 => 'Composite:DigitalZoom', 3 => 'FocalPlaneDiagonal', 4 => 'SensorSize', 5 => 'FocalPlaneXSize', 6 => 'FocalPlaneYSize', 7 => 'FocalPlaneResolutionUnit', 8 => 'FocalPlaneXResolution', 9 => 'FocalPlaneYResolution', 10 => 'ExifImageWidth', 11 => 'ExifImageHeight', 12 => 'CanonImageWidth', 13 => 'CanonImageHeight', 14 => 'ImageWidth', 15 => 'ImageHeight', }, ValueConv => 'Image::ExifTool::Exif::CalcScaleFactor35efl($self, @val)', PrintConv => 'sprintf("%.1f", $val)', }, CircleOfConfusion => { Notes => q{ calculated as D/1440, where D is the focal plane diagonal in mm. This value may be incorrect if the image has been resized }, Groups => { 2 => 'Camera' }, Require => 'ScaleFactor35efl', ValueConv => 'sqrt(24*24+36*36) / ($val * 1440)', PrintConv => 'sprintf("%.3f mm",$val)', }, HyperfocalDistance => { Notes => 'this value may be incorrect if the image has been resized', Groups => { 2 => 'Camera' }, Require => { 0 => 'FocalLength', 1 => 'Aperture', 2 => 'CircleOfConfusion', }, ValueConv => q{ ToFloat(@val); return 'inf' unless $val[1] and $val[2]; return $val[0] * $val[0] / ($val[1] * $val[2] * 1000); }, PrintConv => 'sprintf("%.2f m", $val)', }, DOF => { Description => 'Depth Of Field', Notes => 'this value may be incorrect if the image has been resized', Require => { 0 => 'FocalLength', 1 => 'Aperture', 2 => 'CircleOfConfusion', }, Desire => { 3 => 'FocusDistance', # focus distance in metres (0 is infinity) 4 => 'SubjectDistance', 5 => 'ObjectDistance', 6 => 'ApproximateFocusDistance ', 7 => 'FocusDistanceLower', 8 => 'FocusDistanceUpper', }, ValueConv => q{ ToFloat(@val); my ($d, $f) = ($val[3], $val[0]); if (defined $d) { $d or $d = 1e10; # (use large number for infinity) } else { $d = $val[4] || $val[5] || $val[6]; unless (defined $d) { return undef unless defined $val[7] and defined $val[8]; $d = ($val[7] + $val[8]) / 2; } } return 0 unless $f and $val[2]; my $t = $val[1] * $val[2] * ($d * 1000 - $f) / ($f * $f); my @v = ($d / (1 + $t), $d / (1 - $t)); $v[1] < 0 and $v[1] = 0; # 0 means 'inf' return join(' ',@v); }, PrintConv => q{ $val =~ tr/,/./; # in case locale is whacky my @v = split ' ', $val; $v[1] or return sprintf("inf (%.2f m - inf)", $v[0]); my $dof = $v[1] - $v[0]; my $fmt = ($dof>0 and $dof<0.02) ? "%.3f" : "%.2f"; return sprintf("$fmt m ($fmt - $fmt m)",$dof,$v[0],$v[1]); }, }, FOV => { Description => 'Field Of View', Notes => q{ calculated for the long image dimension. This value may be incorrect for fisheye lenses, or if the image has been resized }, Require => { 0 => 'FocalLength', 1 => 'ScaleFactor35efl', }, Desire => { 2 => 'FocusDistance', # (multiply by 1000 to convert to mm) }, # ref http://www.bobatkins.com/photography/technical/field_of_view.html # (calculations below apply to rectilinear lenses only, not fisheye) ValueConv => q{ ToFloat(@val); return undef unless $val[0] and $val[1]; my $corr = 1; if ($val[2]) { my $d = 1000 * $val[2] - $val[0]; $corr += $val[0]/$d if $d > 0; } my $fd2 = atan2(36, 2*$val[0]*$val[1]*$corr); my @fov = ( $fd2 * 360 / 3.14159 ); if ($val[2] and $val[2] > 0 and $val[2] < 10000) { push @fov, 2 * $val[2] * sin($fd2) / cos($fd2); } return join(' ', @fov); }, PrintConv => q{ my @v = split(' ',$val); my $str = sprintf("%.1f deg", $v[0]); $str .= sprintf(" (%.2f m)", $v[1]) if $v[1]; return $str; }, }, # generate DateTimeOriginal from Date and Time Created if not extracted already DateTimeOriginal => { Condition => 'not defined $$self{VALUE}{DateTimeOriginal}', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, Desire => { 0 => 'DateTimeCreated', 1 => 'DateCreated', 2 => 'TimeCreated', }, RawConv => '($val[1] and $val[2]) ? $val : undef', ValueConv => q{ return $val[0] if $val[0] and $val[0]=~/ /; return "$val[1] $val[2]"; }, PrintConv => '$self->ConvertDateTime($val)', }, ThumbnailImage => { Groups => { 2 => 'Preview' }, Writable => 1, WriteCheck => '$self->CheckImage(\$val)', WriteAlso => { # (the 0xfeedfeed values are translated in the Exif write routine) ThumbnailOffset => 'defined $val ? 0xfeedfeed : undef', ThumbnailLength => 'defined $val ? 0xfeedfeed : undef', }, Require => { 0 => 'ThumbnailOffset', 1 => 'ThumbnailLength', }, # retrieve the thumbnail from our EXIF data RawConv => 'Image::ExifTool::Exif::ExtractImage($self,$val[0],$val[1],"ThumbnailImage")', }, PreviewImage => { Groups => { 2 => 'Preview' }, Writable => 1, WriteCheck => '$self->CheckImage(\$val)', DelCheck => '$val = ""; return undef', # can't delete, so set to empty string WriteAlso => { PreviewImageStart => 'defined $val ? 0xfeedfeed : undef', PreviewImageLength => 'defined $val ? 0xfeedfeed : undef', PreviewImageValid => 'defined $val and length $val ? 1 : 0', }, Require => { 0 => 'PreviewImageStart', 1 => 'PreviewImageLength', }, Desire => { 2 => 'PreviewImageValid', # (DNG and A100 ARW may be have 2 preview images) 3 => 'PreviewImageStart (1)', 4 => 'PreviewImageLength (1)', }, # note: extract 2nd preview, but ignore double-referenced preview # (in A100 ARW images, the 2nd PreviewImageLength from IFD0 may be wrong anyway) RawConv => q{ if ($val[3] and $val[4] and $val[0] ne $val[3]) { my %val = ( 0 => 'PreviewImageStart (1)', 1 => 'PreviewImageLength (1)', 2 => 'PreviewImageValid', ); $self->FoundTag($tagInfo, \%val); } return undef if defined $val[2] and not $val[2]; return Image::ExifTool::Exif::ExtractImage($self,$val[0],$val[1],'PreviewImage'); }, }, JpgFromRaw => { Groups => { 2 => 'Preview' }, Writable => 1, WriteCheck => '$self->CheckImage(\$val)', WriteAlso => { JpgFromRawStart => 'defined $val ? 0xfeedfeed : undef', JpgFromRawLength => 'defined $val ? 0xfeedfeed : undef', }, Require => { 0 => 'JpgFromRawStart', 1 => 'JpgFromRawLength', }, RawConv => 'Image::ExifTool::Exif::ExtractImage($self,$val[0],$val[1],"JpgFromRaw")', }, OtherImage => { Groups => { 2 => 'Preview' }, Writable => 1, WriteCheck => '$self->CheckImage(\$val)', DelCheck => '$val = ""; return undef', # can't delete, so set to empty string WriteAlso => { OtherImageStart => 'defined $val ? 0xfeedfeed : undef', OtherImageLength => 'defined $val ? 0xfeedfeed : undef', }, Require => { 0 => 'OtherImageStart', 1 => 'OtherImageLength', }, # retrieve the thumbnail from our EXIF data RawConv => 'Image::ExifTool::Exif::ExtractImage($self,$val[0],$val[1],"OtherImage")', }, PreviewImageSize => { Require => { 0 => 'PreviewImageWidth', 1 => 'PreviewImageHeight', }, ValueConv => '"$val[0]x$val[1]"', }, SubSecDateTimeOriginal => { Description => 'Date/Time Original', Groups => { 2 => 'Time' }, Require => { 0 => 'EXIF:DateTimeOriginal', 1 => 'SubSecTimeOriginal', }, # be careful here just in case there is a timezone following the seconds RawConv => '$val[1]=~/\d/ ? $val : undef', ValueConv => q{ $_ = $val[0]; s/( \d{2}:\d{2}:\d{2})/$1\.$val[1]/; $_; }, PrintConv => '$self->ConvertDateTime($val)', }, SubSecCreateDate => { Description => 'Create Date', Groups => { 2 => 'Time' }, Require => { 0 => 'EXIF:CreateDate', 1 => 'SubSecTimeDigitized', }, RawConv => '$val[1]=~/\d/ ? $val : undef', ValueConv => q{ $_ = $val[0]; s/( \d{2}:\d{2}:\d{2})/$1\.$val[1]/; $_; }, PrintConv => '$self->ConvertDateTime($val)', }, SubSecModifyDate => { Description => 'Modify Date', Groups => { 2 => 'Time' }, Require => { 0 => 'EXIF:ModifyDate', 1 => 'SubSecTime', }, RawConv => '$val[1]=~/\d/ ? $val : undef', ValueConv => q{ $_ = $val[0]; s/( \d{2}:\d{2}:\d{2})/$1\.$val[1]/; $_; }, PrintConv => '$self->ConvertDateTime($val)', }, CFAPattern => { Require => { 0 => 'CFARepeatPatternDim', 1 => 'CFAPattern2', }, # generate CFAPattern ValueConv => q{ my @a = split / /, $val[0]; my @b = split / /, $val[1]; return '?' unless @a==2 and @b==$a[0]*$a[1]; return "$a[0] $a[1] @b"; }, PrintConv => 'Image::ExifTool::Exif::PrintCFAPattern($val)', }, RedBalance => { Groups => { 2 => 'Camera' }, Desire => { 0 => 'WB_RGGBLevels', 1 => 'WB_RGBGLevels', 2 => 'WB_RBGGLevels', 3 => 'WB_GRBGLevels', 4 => 'WB_GRGBLevels', 5 => 'WB_GBRGLevels', 6 => 'WB_RGBLevels', 7 => 'WB_GRBLevels', 8 => 'WB_RBLevels', 9 => 'WBRedLevel', # red 10 => 'WBGreenLevel', }, ValueConv => 'Image::ExifTool::Exif::RedBlueBalance(0,@val)', PrintConv => 'int($val * 1e6 + 0.5) * 1e-6', }, BlueBalance => { Groups => { 2 => 'Camera' }, Desire => { 0 => 'WB_RGGBLevels', 1 => 'WB_RGBGLevels', 2 => 'WB_RBGGLevels', 3 => 'WB_GRBGLevels', 4 => 'WB_GRGBLevels', 5 => 'WB_GBRGLevels', 6 => 'WB_RGBLevels', 7 => 'WB_GRBLevels', 8 => 'WB_RBLevels', 9 => 'WBBlueLevel', # blue 10 => 'WBGreenLevel', }, ValueConv => 'Image::ExifTool::Exif::RedBlueBalance(1,@val)', PrintConv => 'int($val * 1e6 + 0.5) * 1e-6', }, GPSPosition => { Groups => { 2 => 'Location' }, Require => { 0 => 'GPSLatitude', 1 => 'GPSLongitude', }, ValueConv => '"$val[0] $val[1]"', PrintConv => '"$prt[0], $prt[1]"', }, LensID => { Groups => { 2 => 'Camera' }, Require => 'LensType', Desire => { 1 => 'FocalLength', 2 => 'MaxAperture', 3 => 'MaxApertureValue', 4 => 'MinFocalLength', 5 => 'MaxFocalLength', 6 => 'LensModel', 7 => 'LensFocalRange', 8 => 'LensSpec', 9 => 'LensType2', 10 => 'LensFocalLength', # (for Pentax to check for converter) }, Notes => q{ attempt to identify the actual lens from all lenses with a given LensType. Applies only to LensType values with a lookup table. May be configured by adding user-defined lenses }, # this LensID is only valid if the LensType has a PrintConv or is a model name RawConv => q{ my $printConv = $$self{TAG_INFO}{LensType}{PrintConv}; return $val if ref $printConv eq 'HASH' or (ref $printConv eq 'ARRAY' and ref $$printConv[0] eq 'HASH') or $val[0] =~ /(mm|\d\/F)/; return undef; }, ValueConv => '$val', PrintConv => q{ my $pcv; # use LensType2 instead of LensType if available and valid (Sony E-mount lenses) if ($val[9] and $val[9] & 0x8000) { $val[0] = $val[9]; $prt[0] = $prt[9]; $pcv = $$self{TAG_INFO}{LensType2}{PrintConv}; } my $lens = Image::ExifTool::Exif::PrintLensID($self, $prt[0], $pcv, $prt[8], @val); # check for use of lens converter (Pentax K-3) if ($val[10] and $val[1] and $lens) { my $conv = $val[1] / $val[10]; $lens .= sprintf(' + %.1fx converter', $conv) if $conv > 1.1; } return $lens; }, }, ); # table for unknown IFD entries %Image::ExifTool::Exif::Unknown = ( GROUPS => { 0 => 'EXIF', 1 => 'UnknownIFD', 2 => 'Image'}, WRITE_PROC => \&WriteExif, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::Exif'); #------------------------------------------------------------------------------ # AutoLoad our writer routines when necessary # sub AUTOLOAD { return Image::ExifTool::DoAutoLoad($AUTOLOAD, @_); } #------------------------------------------------------------------------------ # Identify RAW file type for some TIFF-based formats using Compression value # Inputs: 0) ExifTool object reference, 1) Compression value # - sets TIFF_TYPE and FileType if identified sub IdentifyRawFile($$) { my ($et, $comp) = @_; if ($$et{FILE_TYPE} eq 'TIFF' and not $$et{IdentifiedRawFile}) { if ($compression{$comp} and $compression{$comp} =~ /^\w+ ([A-Z]{3}) Compressed$/) { $et->OverrideFileType($$et{TIFF_TYPE} = $1); $$et{IdentifiedRawFile} = 1; } } } #------------------------------------------------------------------------------ # Calculate LV (Light Value) # Inputs: 0) Aperture, 1) ShutterSpeed, 2) ISO # Returns: LV value (and converts input values to floating point if necessary) sub CalculateLV($$$) { local $_; # do validity checks on arguments return undef unless @_ >= 3; foreach (@_) { return undef unless $_ and /([+-]?(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?)/ and $1 > 0; $_ = $1; # extract float from any other garbage } # (A light value of 0 is defined as f/1.0 at 1 second with ISO 100) return (2*log($_[0]) - log($_[1]) - log($_[2]/100)) / log(2); } #------------------------------------------------------------------------------ # Calculate scale factor for 35mm effective focal length (ref 26/PH) # Inputs: 0) ExifTool object ref # 1) Focal length # 2) Focal length in 35mm format # 3) Canon digital zoom factor # 4) Focal plane diagonal size (in mm) # 5) Sensor size (X and Y in mm) # 6/7) Focal plane X/Y size (in mm) # 8) focal plane resolution units (1=None,2=inches,3=cm,4=mm,5=um) # 9/10) Focal plane X/Y resolution # 11/12,13/14...) Image width/height in order of precedence (first valid pair is used) # Returns: 35mm conversion factor (or undefined if it can't be calculated) sub CalcScaleFactor35efl { my $et = shift; my $res = $_[7]; # save resolution units (in case they have been converted to string) my $sensXY = $_[4]; Image::ExifTool::ToFloat(@_); my $focal = shift; my $foc35 = shift; return $foc35 / $focal if $focal and $foc35; my $digz = shift || 1; my $diag = shift; my $sens = shift; # calculate Canon sensor size using a dedicated algorithm if ($$et{Make} eq 'Canon') { require Image::ExifTool::Canon; my $canonDiag = Image::ExifTool::Canon::CalcSensorDiag( $$et{RATIONAL}{FocalPlaneXResolution}, $$et{RATIONAL}{FocalPlaneYResolution}, ); $diag = $canonDiag if $canonDiag; } unless ($diag and Image::ExifTool::IsFloat($diag)) { if ($sens and $sensXY =~ / (\d+(\.?\d*)?)$/) { $diag = sqrt($sens * $sens + $1 * $1); } else { undef $diag; my $xsize = shift; my $ysize = shift; if ($xsize and $ysize) { # validate by checking aspect ratio because FocalPlaneX/YSize is not reliable my $a = $xsize / $ysize; if (abs($a-1.3333) < .1 or abs($a-1.5) < .1) { $diag = sqrt($xsize * $xsize + $ysize * $ysize); } } } unless ($diag) { # get number of mm in units (assume inches unless otherwise specified) my %lkup = ( 3=>10, 4=>1, 5=>0.001 , cm=>10, mm=>1, um=>0.001 ); my $units = $lkup{ shift() || $res || '' } || 25.4; my $x_res = shift || return undef; my $y_res = shift || $x_res; Image::ExifTool::IsFloat($x_res) and $x_res != 0 or return undef; Image::ExifTool::IsFloat($y_res) and $y_res != 0 or return undef; my ($w, $h); for (;;) { @_ < 2 and return undef; $w = shift; $h = shift; next unless $w and $h; my $a = $w / $h; last if $a > 0.5 and $a < 2; # stop if we get a reasonable value } # calculate focal plane size in mm $w *= $units / $x_res; $h *= $units / $y_res; $diag = sqrt($w*$w+$h*$h); # make sure size is reasonable return undef unless $diag > 1 and $diag < 100; } } return sqrt(36*36+24*24) * $digz / $diag; } #------------------------------------------------------------------------------ # Print exposure compensation fraction sub PrintFraction($) { my $val = shift; my $str; if (defined $val) { $val *= 1.00001; # avoid round-off errors if (not $val) { $str = '0'; } elsif (int($val)/$val > 0.999) { $str = sprintf("%+d", int($val)); } elsif ((int($val*2))/($val*2) > 0.999) { $str = sprintf("%+d/2", int($val * 2)); } elsif ((int($val*3))/($val*3) > 0.999) { $str = sprintf("%+d/3", int($val * 3)); } else { $str = sprintf("%+.3g", $val); } } return $str; } #------------------------------------------------------------------------------ # Convert fraction or number to floating point value (or 'undef' or 'inf') sub ConvertFraction($) { my $val = shift; if ($val =~ m{([-+]?\d+)/(\d+)}) { $val = $2 ? $1 / $2 : ($1 ? 'inf' : 'undef'); } return $val; } #------------------------------------------------------------------------------ # Convert EXIF text to something readable # Inputs: 0) ExifTool object reference, 1) EXIF text, # 2) [optional] 1 to apply CharsetEXIF to ASCII text, # 3) tag name for warning message (may be argument 2) # Returns: text encoded according to Charset option (with trailing spaces removed) sub ConvertExifText($$;$$) { my ($et, $val, $asciiFlex, $tag) = @_; return $val if length($val) < 8; my $id = substr($val, 0, 8); my $str = substr($val, 8); # Note: allow spaces instead of nulls in the ID codes because # it is fairly common for camera manufacturers to get this wrong # (also handle Canon ZoomBrowser EX 4.5 null followed by 7 bytes of garbage) if ($id =~ /^(ASCII)?(\0|[\0 ]+$)/) { # truncate at null terminator (shouldn't have a null based on the # EXIF spec, but it seems that few people actually read the spec) $str =~ s/\0.*//s; # allow ASCII text to contain any other specified encoding if ($asciiFlex and $asciiFlex eq '1') { my $enc = $et->Options('CharsetEXIF'); $str = $et->Decode($str, $enc) if $enc; } # by the EXIF spec, the following string should be "UNICODE\0", but # apparently Kodak sometimes uses "Unicode\0" in the APP3 "Meta" information. # However, unfortunately Ricoh uses "Unicode\0" in the RR30 EXIF UserComment # when the text is actually ASCII, so only recognize uppercase "UNICODE\0". } elsif ($id =~ /^UNICODE[\0 ]$/) { # MicrosoftPhoto writes as little-endian even in big-endian EXIF, # so we must guess at the true byte ordering $str = $et->Decode($str, 'UTF16', 'Unknown'); } elsif ($id =~ /^JIS[\0 ]{5}$/) { $str = $et->Decode($str, 'JIS', 'Unknown'); } else { $tag = $asciiFlex if $asciiFlex and $asciiFlex ne 1; $et->Warn('Invalid EXIF text encoding' . ($tag ? " for $tag" : '')); $str = $id . $str; } $str =~ s/ +$//; # trim trailing blanks return $str; } #------------------------------------------------------------------------------ # Print conversion for SpatialFrequencyResponse sub PrintSFR($) { my $val = shift; return $val unless length $val > 4; my ($n, $m) = (Get16u(\$val, 0), Get16u(\$val, 2)); my @cols = split /\0/, substr($val, 4), $n+1; my $pos = length($val) - 8 * $n * $m; return $val unless @cols == $n+1 and $pos >= 4; pop @cols; my ($i, $j); for ($i=0; $i<$n; ++$i) { my @rows; for ($j=0; $j<$m; ++$j) { push @rows, Image::ExifTool::GetRational64u(\$val, $pos + 8*($i+$j*$n)); } $cols[$i] .= '=' . join(',',@rows) . ''; } return join '; ', @cols; } #------------------------------------------------------------------------------ # Print numerical parameter value (with sign, or 'Normal' for zero) # Inputs: 0) value, 1) flag for inverse conversion, 2) conversion hash reference sub PrintParameter($$$) { my ($val, $inv, $conv) = @_; return $val if $inv; if ($val > 0) { if ($val > 0xfff0) { # a negative value in disguise? $val = $val - 0x10000; } else { $val = "+$val"; } } return $val; } #------------------------------------------------------------------------------ # Convert parameter back to standard EXIF value # 0,0.00,etc or "Normal" => 0 # -1,-2,etc or "Soft" or "Low" => 1 # +1,+2,1,2,etc or "Hard" or "High" => 2 sub ConvertParameter($) { my $val = shift; my $isFloat = Image::ExifTool::IsFloat($val); # normal is a value of zero return 0 if $val =~ /\bn/i or ($isFloat and $val == 0); # "soft", "low" or any negative number is a value of 1 return 1 if $val =~ /\b(s|l)/i or ($isFloat and $val < 0); # "hard", "high" or any positive number is a value of 2 return 2 if $val =~ /\bh/i or $isFloat; return undef; } #------------------------------------------------------------------------------ # Calculate Red/BlueBalance # Inputs: 0) 0=red, 1=blue, 1-8) WB_RGGB/RGBG/RBGG/GRBG/GRGB/RGB/GRB/RBLevels, # 8) red or blue level, 9) green level my @rggbLookup = ( # indices for R, G, G and B components in input value [ 0, 1, 2, 3 ], # 0 RGGB [ 0, 1, 3, 2 ], # 1 RGBG [ 0, 2, 3, 1 ], # 2 RBGG [ 1, 0, 3, 2 ], # 3 GRBG [ 1, 0, 2, 3 ], # 4 GRGB [ 2, 3, 0, 1 ], # 5 GBRG [ 0, 1, 1, 2 ], # 6 RGB [ 1, 0, 0, 2 ], # 7 GRB [ 0, 256, 256, 1 ], # 8 RB (green level is 256) ); sub RedBlueBalance($@) { my $blue = shift; my ($i, $val, $levels); for ($i=0; $i<@rggbLookup; ++$i) { $levels = shift or next; my @levels = split ' ', $levels; next if @levels < 2; my $lookup = $rggbLookup[$i]; my $g = $$lookup[1]; # get green level or index if ($g < 4) { next if @levels < 3; $g = ($levels[$g] + $levels[$$lookup[2]]) / 2 or next; } elsif ($levels[$$lookup[$blue * 3]] < 4) { $g = 1; # Some Nikon cameras use a scaling factor of 1 (E5700) } $val = $levels[$$lookup[$blue * 3]] / $g; last; } $val = $_[0] / $_[1] if not defined $val and ($_[0] and $_[1]); return $val; } #------------------------------------------------------------------------------ # Print exposure time as a fraction sub PrintExposureTime($) { my $secs = shift; if ($secs < 0.25001 and $secs > 0) { return sprintf("1/%d",int(0.5 + 1/$secs)); } $_ = sprintf("%.1f",$secs); s/\.0$//; return $_; } #------------------------------------------------------------------------------ # Print FNumber sub PrintFNumber($) { my $val = shift; if (Image::ExifTool::IsFloat($val) and $val > 0) { # round to 1 decimal place, or 2 for values < 1.0 $val = sprintf(($val<1 ? "%.2f" : "%.1f"), $val); } return $val; } #------------------------------------------------------------------------------ # Decode raw CFAPattern value # Inputs: 0) ExifTool ref, 1) binary value # Returns: string of numbers sub DecodeCFAPattern($$) { my ($self, $val) = @_; # some panasonic cameras (SV-AS3, SV-AS30) write this in ascii (very odd) if ($val =~ /^[0-6]+$/) { $self->Warn('Incorrectly formatted CFAPattern', 1); $val =~ tr/0-6/\x00-\x06/; } return $val unless length($val) >= 4; my @a = unpack(GetByteOrder() eq 'II' ? 'v2C*' : 'n2C*', $val); my $end = 2 + $a[0] * $a[1]; if ($end > @a) { # try swapping byte order (I have seen this order different than in EXIF) my ($x, $y) = unpack('n2',pack('v2',$a[0],$a[1])); if (@a < 2 + $x * $y) { $self->Warn('Invalid CFAPattern', 1); } else { ($a[0], $a[1]) = ($x, $y); # (can't technically be wrong because the order isn't well defined by the EXIF spec) # $self->Warn('Wrong byte order for CFAPattern'); } } return "@a"; } #------------------------------------------------------------------------------ # Print CFA Pattern sub PrintCFAPattern($) { my $val = shift; my @a = split ' ', $val; return '<truncated data>' unless @a >= 2; return '<zero pattern size>' unless $a[0] and $a[1]; my $end = 2 + $a[0] * $a[1]; return '<invalid pattern size>' if $end > @a; my @cfaColor = qw(Red Green Blue Cyan Magenta Yellow White); my ($pos, $rtnVal) = (2, '['); for (;;) { $rtnVal .= $cfaColor[$a[$pos]] || 'Unknown'; last if ++$pos >= $end; ($pos - 2) % $a[1] and $rtnVal .= ',', next; $rtnVal .= ']['; } return $rtnVal . ']'; } #------------------------------------------------------------------------------ # Print conversion for lens info # Inputs: 0) string of values (min focal, max focal, min F, max F) # Returns: string in the form "12-20mm f/3.8-4.5" or "50mm f/1.4" sub PrintLensInfo($) { my $val = shift; my @vals = split ' ', $val; return $val unless @vals == 4; my $c = 0; foreach (@vals) { Image::ExifTool::IsFloat($_) and ++$c, next; $_ eq 'inf' and $_ = '?', ++$c, next; $_ eq 'undef' and $_ = '?', ++$c, next; } return $val unless $c == 4; $val = $vals[0]; # (the Pentax Q writes zero for upper value of fixed-focal-length lenses) $val .= "-$vals[1]" if $vals[1] and $vals[1] ne $vals[0]; $val .= "mm f/$vals[2]"; $val .= "-$vals[3]" if $vals[3] and $vals[3] ne $vals[2]; return $val; } #------------------------------------------------------------------------------ # Get lens info from lens model string # Inputs: 0) lens string, 1) flag to allow unknown "?" values # Returns: 0) min focal, 1) max focal, 2) min aperture, 3) max aperture # Notes: returns empty list if lens string could not be parsed sub GetLensInfo($;$) { my ($lens, $unk) = @_; # extract focal length and aperture ranges for this lens my $pat = '\\d+(?:\\.\\d+)?'; $pat .= '|\\?' if $unk; return () unless $lens =~ /($pat)(?:-($pat))?\s*mm.*?(?:[fF]\/?\s*)($pat)(?:-($pat))?/; # ($1=short focal, $2=long focal, $3=max aperture wide, $4=max aperture tele) my @a = ($1, $2, $3, $4); $a[1] or $a[1] = $a[0]; $a[3] or $a[3] = $a[2]; if ($unk) { local $_; $_ eq '?' and $_ = 'undef' foreach @a; } return @a; } #------------------------------------------------------------------------------ # Attempt to identify the specific lens if multiple lenses have the same LensType # Inputs: 0) ExifTool object ref, 1) LensType print value, 2) PrintConv hash ref, # 3) LensSpec print value, 4) LensType numerical value, 5) FocalLength, # 6) MaxAperture, 7) MaxApertureValue, 8) MinFocalLength, 9) MaxFocalLength, # 10) LensModel, 11) LensFocalRange, 12) LensSpec sub PrintLensID($$@) { my ($et, $lensTypePrt, $printConv, $lensSpecPrt, $lensType, $focalLength, $maxAperture, $maxApertureValue, $shortFocal, $longFocal, $lensModel, $lensFocalRange, $lensSpec) = @_; # this logic relies on the LensType lookup: return undef unless defined $lensType; # get print conversion hash if necessary $printConv or $printConv = $$et{TAG_INFO}{LensType}{PrintConv}; # just copy LensType PrintConv value if it was a lens name # (Olympus or Panasonic -- just exclude things like Nikon and Leaf LensType) unless (ref $printConv eq 'HASH') { if (ref $printConv eq 'ARRAY' and ref $$printConv[0] eq 'HASH') { $printConv = $$printConv[0]; $lensTypePrt =~ s/;.*//; $lensType =~ s/ .*//; } else { return $lensTypePrt if $lensTypePrt =~ /mm/; return $lensTypePrt if $lensTypePrt =~ s/(\d)\/F/$1mm F/; return undef; } } # get LensSpec information if available (Sony) my ($sf0, $lf0, $sa0, $la0); if ($lensSpecPrt) { ($sf0, $lf0, $sa0, $la0) = GetLensInfo($lensSpecPrt); undef $sf0 unless $sa0; # (make sure aperture isn't zero) } # use MaxApertureValue if MaxAperture is not available $maxAperture = $maxApertureValue unless $maxAperture; if ($lensFocalRange and $lensFocalRange =~ /^(\d+)(?: (?:to )?(\d+))?$/) { ($shortFocal, $longFocal) = ($1, $2 || $1); } if ($$et{Make} eq 'SONY') { # patch for Metabones Canon adapters on Sony cameras (ref Jos Roost) # (the Metabones adapters add 0xef00 or 0x7700 to the high byte # for 2-byte LensType values, so we need to adjust for these) if ($lensType != 0xffff) { require Image::ExifTool::Minolta; if ($Image::ExifTool::Minolta::metabonesID{$lensType & 0xff00}) { $lensType -= ($lensType >= 0xef00 ? 0xef00 : $lensType >= 0xbc00 ? 0xbc00 : 0x7700); require Image::ExifTool::Canon; $printConv = \%Image::ExifTool::Canon::canonLensTypes; $lensTypePrt = $$printConv{$lensType} if $$printConv{$lensType}; } } } elsif ($shortFocal and $longFocal) { # Canon (and some other makes) include makernote information # which allows better lens identification require Image::ExifTool::Canon; return Image::ExifTool::Canon::PrintLensID($printConv, $lensType, $shortFocal, $longFocal, $maxAperture, $lensModel); } my $lens = $$printConv{$lensType}; return ($lensModel || $lensTypePrt) unless $lens; return $lens unless $$printConv{"$lensType.1"}; $lens =~ s/ or .*//s; # remove everything after "or" # make list of all possible matching lenses my @lenses = ( $lens ); my $i; for ($i=1; $$printConv{"$lensType.$i"}; ++$i) { push @lenses, $$printConv{"$lensType.$i"}; } # attempt to determine actual lens my (@matches, @best, @user, $diff); foreach $lens (@lenses) { push @user, $lens if $Image::ExifTool::userLens{$lens}; # sf = short focal # lf = long focal # sa = max aperture at short focal # la = max aperture at long focal my ($sf, $lf, $sa, $la) = GetLensInfo($lens); next unless $sf; # check against LensSpec parameters if available if ($sf0) { next if abs($sf - $sf0) > 0.5 or abs($sa - $sa0) > 0.15 or abs($lf - $lf0) > 0.5 or abs($la - $la0) > 0.15; # the basic parameters match, but also check against additional lens features: # for Sony A and E lenses, the full LensSpec string should match with end of LensType, # excluding any part between () at the end, and preceded by a space (the space # ensures that e.g. Zeiss Loxia 21mm having LensSpec "E 21mm F2.8" will not be # identified as "Sony FE 21mm F2.8 (SEL28F20 + SEL075UWC)") $lensSpecPrt and $lens =~ / \Q$lensSpecPrt\E( \(|$)/ and @best = ( $lens ), last; # exactly-matching Sony lens should have been found above, so only add non-Sony lenses push @best, $lens unless $lens =~ /^Sony /; next; } # adjust focal length and aperture if teleconverter is attached (Minolta) if ($lens =~ / \+ .*? (\d+(\.\d+)?)x( |$)/) { $sf *= $1; $lf *= $1; $sa *= $1; $la *= $1; } # see if we can rule out this lens using FocalLength and MaxAperture if ($focalLength) { next if $focalLength < $sf - 0.5; next if $focalLength > $lf + 0.5; } if ($maxAperture) { # it seems that most manufacturers set MaxAperture and MaxApertureValue # to the maximum aperture (smallest F number) for the current focal length # of the lens, so assume that MaxAperture varies with focal length and find # the closest match (this is somewhat contrary to the EXIF specification which # states "The smallest F number of the lens", without mention of focal length) next if $maxAperture < $sa - 0.15; # (0.15 is arbitrary) next if $maxAperture > $la + 0.15; # now determine the best match for this aperture my $aa; # approximate maximum aperture at this focal length if ($sf == $lf or $sa == $la or $focalLength <= $sf) { # either 1) prime lens, 2) fixed-aperture zoom, or 3) zoom at min focal $aa = $sa; } elsif ($focalLength >= $lf) { $aa = $la; } else { # assume a log-log variation of max aperture with focal length # (see http://regex.info/blog/2006-10-05/263) $aa = exp(log($sa) + (log($la)-log($sa)) / (log($lf)-log($sf)) * (log($focalLength)-log($sf))); # a linear relationship between 1/FocalLength and 1/MaxAperture fits Sony better (ref 27) #$aa = 1 / (1/$sa + (1/$focalLength - 1/$sf) * (1/$la - 1/$sa) / (1/$lf - 1/$sf)); } my $d = abs($maxAperture - $aa); if (defined $diff) { $d > $diff + 0.15 and next; # (0.15 is arbitrary) $d < $diff - 0.15 and undef @best; } $diff = $d; push @best, $lens; } push @matches, $lens; } # return the user-defined lens if it exists if (@user) { # choose the best match if we have more than one if (@user > 1) { my ($try, @good); foreach $try (\@best, \@matches) { $Image::ExifTool::userLens{$_} and push @good, $_ foreach @$try; return join(' or ', @good) if @good; } } return join(' or ', @user); } # return the best match(es) from the possible lenses return join(' or ', @best) if @best; return join(' or ', @matches) if @matches; $lens = $$printConv{$lensType}; return $lensModel if $lensModel and $lens =~ / or /; # (eg. Sony NEX-5N) return $lens; } #------------------------------------------------------------------------------ # translate date into standard EXIF format # Inputs: 0) date # Returns: date in format '2003:10:22' # - bad formats recognized: '2003-10-22','2003/10/22','2003 10 22','20031022' # - removes null terminator if it exists sub ExifDate($) { my $date = shift; $date =~ s/\0$//; # remove any null terminator # separate year:month:day with colons # (have seen many other characters, including nulls, used erroneously) $date =~ s/(\d{4})[^\d]*(\d{2})[^\d]*(\d{2})$/$1:$2:$3/; return $date; } #------------------------------------------------------------------------------ # translate time into standard EXIF format # Inputs: 0) time # Returns: time in format '10:30:55' # - bad formats recognized: '10 30 55', '103055', '103055+0500' # - removes null terminator if it exists # - leaves time zone intact if specified (eg. '10:30:55+05:00') sub ExifTime($) { my $time = shift; $time =~ tr/ /:/; # use ':' (not ' ') as a separator $time =~ s/\0$//; # remove any null terminator # add separators if they don't exist $time =~ s/^(\d{2})(\d{2})(\d{2})/$1:$2:$3/; $time =~ s/([+-]\d{2})(\d{2})\s*$/$1:$2/; # to timezone too return $time; } #------------------------------------------------------------------------------ # extract image from file # Inputs: 0) ExifTool object reference, 1) data offset (in file), 2) data length # 3) [optional] tag name # Returns: Reference to Image if specifically requested or "Binary data" message # Returns undef if there was an error loading the image sub ExtractImage($$$$) { my ($et, $offset, $len, $tag) = @_; my $dataPt = \$$et{EXIF_DATA}; my $dataPos = $$et{EXIF_POS}; my $image; # no image if length is zero, and don't try to extract binary from XMP file return undef if not $len or $$et{FILE_TYPE} eq 'XMP'; # take data from EXIF block if possible if (defined $dataPos and $offset>=$dataPos and $offset+$len<=$dataPos+length($$dataPt)) { $image = substr($$dataPt, $offset-$dataPos, $len); } else { $image = $et->ExtractBinary($offset, $len, $tag); return undef unless defined $image; # patch for incorrect ThumbnailOffset in some Sony DSLR-A100 ARW images if ($tag and $tag eq 'ThumbnailImage' and $$et{TIFF_TYPE} eq 'ARW' and $$et{Model} eq 'DSLR-A100' and $offset < 0x10000 and $image !~ /^(Binary data|\xff\xd8\xff)/) { my $try = $et->ExtractBinary($offset + 0x10000, $len, $tag); if (defined $try and $try =~ /^\xff\xd8\xff/) { $image = $try; $$et{VALUE}{ThumbnailOffset} += 0x10000; $et->Warn('Adjusted incorrect A100 ThumbnailOffset', 1); } } } return $et->ValidateImage(\$image, $tag); } #------------------------------------------------------------------------------ # Process EXIF directory # Inputs: 0) ExifTool object reference # 1) Reference to directory information hash # 2) Pointer to tag table for this directory # Returns: 1 on success, otherwise returns 0 and sets a Warning sub ProcessExif($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos} || 0; my $dataLen = $$dirInfo{DataLen}; my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || $dataLen - $dirStart; my $dirName = $$dirInfo{DirName}; my $base = $$dirInfo{Base} || 0; my $firstBase = $base; my $raf = $$dirInfo{RAF}; my $verbose = $et->Options('Verbose'); my $htmlDump = $$et{HTML_DUMP}; my $success = 1; my ($tagKey, $dirSize, $makerAddr, $strEnc); my $inMakerNotes = $$tagTablePtr{GROUPS}{0} eq 'MakerNotes'; # set encoding to assume for strings $strEnc = $et->Options('CharsetEXIF') if $$tagTablePtr{GROUPS}{0} eq 'EXIF'; # ignore non-standard EXIF while in strict MWG compatibility mode if ($Image::ExifTool::MWG::strict and $dirName eq 'IFD0' and $tagTablePtr eq \%Image::ExifTool::Exif::Main and $$et{FILE_TYPE} =~ /^(JPEG|TIFF|PSD)$/) { my $path = $et->MetadataPath(); unless ($path =~ /^(JPEG-APP1-IFD0|TIFF-IFD0|PSD-EXIFInfo-IFD0)$/) { $et->Warn("Ignored non-standard EXIF at $path"); return 1; } } $verbose = -1 if $htmlDump; # mix htmlDump into verbose so we can test for both at once $dirName eq 'EXIF' and $dirName = $$dirInfo{DirName} = 'IFD0'; $$dirInfo{Multi} = 1 if $dirName =~ /^(IFD0|SubIFD)$/ and not defined $$dirInfo{Multi}; # get a more descriptive name for MakerNote sub-directories my $name = $$dirInfo{Name}; $name = $dirName unless $name and $inMakerNotes and $name !~ /^MakerNote/; my ($numEntries, $dirEnd); if ($dirStart >= 0 and $dirStart <= $dataLen-2) { # make sure data is large enough (patches bug in Olympus subdirectory lengths) $numEntries = Get16u($dataPt, $dirStart); $dirSize = 2 + 12 * $numEntries; $dirEnd = $dirStart + $dirSize; if ($dirSize > $dirLen) { if ($verbose > 0 and not $$dirInfo{SubIFD}) { my $short = $dirSize - $dirLen; $$et{INDENT} =~ s/..$//; # keep indent the same $et->Warn("Short directory size (missing $short bytes)"); $$et{INDENT} .= '| '; } undef $dirSize if $dirEnd > $dataLen; # read from file if necessary } } # read IFD from file if necessary unless ($dirSize) { $success = 0; if ($raf) { # read the count of entries in this IFD my $offset = $dirStart + $dataPos; my ($buff, $buf2); if ($raf->Seek($offset + $base, 0) and $raf->Read($buff,2) == 2) { my $len = 12 * Get16u(\$buff,0); # also read next IFD pointer if available if ($raf->Read($buf2, $len+4) >= $len) { $buff .= $buf2; # make copy of dirInfo since we're going to modify it my %newDirInfo = %$dirInfo; $dirInfo = \%newDirInfo; # update directory parameters for the newly loaded IFD $dataPt = $$dirInfo{DataPt} = \$buff; $dataPos = $$dirInfo{DataPos} = $offset; $dataLen = $$dirInfo{DataLen} = length $buff; $dirStart = $$dirInfo{DirStart} = 0; $dirLen = $$dirInfo{DirLen} = length $buff; $success = 1; } } } unless ($success) { $et->Warn("Bad $name directory"); return 0; } $numEntries = Get16u($dataPt, $dirStart); $dirSize = 2 + 12 * $numEntries; $dirEnd = $dirStart + $dirSize; } $verbose > 0 and $et->VerboseDir($dirName, $numEntries); my $bytesFromEnd = $dataLen - $dirEnd; if ($bytesFromEnd < 4) { unless ($bytesFromEnd==2 or $bytesFromEnd==0) { $et->Warn("Illegal $name directory size ($numEntries entries)"); return 0; } } # fix base offset for maker notes if necessary if (defined $$dirInfo{MakerNoteAddr}) { $makerAddr = $$dirInfo{MakerNoteAddr}; delete $$dirInfo{MakerNoteAddr}; if (Image::ExifTool::MakerNotes::FixBase($et, $dirInfo)) { $base = $$dirInfo{Base}; $dataPos = $$dirInfo{DataPos}; } } if ($htmlDump) { my $longName = $name eq 'MakerNotes' ? ($$dirInfo{Name} || $name) : $name; if (defined $makerAddr) { my $hdrLen = $dirStart + $dataPos + $base - $makerAddr; $et->HDump($makerAddr, $hdrLen, "MakerNotes header", $longName) if $hdrLen > 0; } unless ($$dirInfo{NoDumpEntryCount}) { $et->HDump($dirStart + $dataPos + $base, 2, "$longName entries", "Entry count: $numEntries"); } my $tip; if ($bytesFromEnd >= 4) { my $nxt = ($name =~ /^(.*?)(\d+)$/) ? $1 . ($2 + 1) : 'Next IFD'; $tip = sprintf("$nxt offset: 0x%.4x", Get32u($dataPt, $dirEnd)); } $et->HDump($dirEnd + $dataPos + $base, 4, "Next IFD", $tip, 0); } # patch for Canon EOS 40D firmware 1.0.4 bug (incorrect directory counts) # (must do this before parsing directory or CameraSettings offset will be suspicious) if ($inMakerNotes and $$et{Model} eq 'Canon EOS 40D' and $numEntries) { my $entry = $dirStart + 2 + 12 * ($numEntries - 1); my $fmt = Get16u($dataPt, $entry + 2); if ($fmt < 1 or $fmt > 13) { $et->HDump($entry+$dataPos+$base,12,"[invalid IFD entry]", "Bad format type: $fmt", 1); # adjust the number of directory entries --$numEntries; $dirEnd -= 12; } } # loop through all entries in an EXIF directory (IFD) my ($index, $valEnd, $offList, $offHash); my ($warnCount, $lastID) = (0, -1); for ($index=0; $index<$numEntries; ++$index) { if ($warnCount > 10) { $et->Warn("Too many warnings -- $name parsing aborted", 2) and return 0; } my $entry = $dirStart + 2 + 12 * $index; my $tagID = Get16u($dataPt, $entry); my $format = Get16u($dataPt, $entry+2); my $count = Get32u($dataPt, $entry+4); if ($format < 1 or $format > 13) { $et->HDump($entry+$dataPos+$base,12,"[invalid IFD entry]", "Bad format type: $format", 1); # warn unless the IFD was just padded with zeros if ($format) { $et->Warn("Bad format ($format) for $name entry $index", $inMakerNotes); ++$warnCount; } # assume corrupted IFD if this is our first entry (except Sony ILCE-7M2 firmware 1.21) return 0 unless $index or $$et{Model} eq 'ILCE-7M2'; next; } my $formatStr = $formatName[$format]; # get name of this format my $valueDataPt = $dataPt; my $valueDataPos = $dataPos; my $valueDataLen = $dataLen; my $valuePtr = $entry + 8; # pointer to value within $$dataPt my $tagInfo = $et->GetTagInfo($tagTablePtr, $tagID); my ($origFormStr, $bad, $rational); # hack to patch incorrect count in Kodak SubIFD3 tags if ($count < 2 and ref $$tagTablePtr{$tagID} eq 'HASH' and $$tagTablePtr{$tagID}{FixCount}) { $offList or ($offList, $offHash) = GetOffList($dataPt, $dirStart, $dataPos, $numEntries, $tagTablePtr); my $i = $$offHash{Get32u($dataPt, $valuePtr)}; if (defined $i and $i < $#$offList) { my $oldCount = $count; $count = int(($$offList[$i+1] - $$offList[$i]) / $formatSize[$format]); $origFormStr = $formatName[$format] . '[' . $oldCount . ']' if $oldCount != $count; } } my $size = $count * $formatSize[$format]; my $readSize = $size; if ($size > 4) { if ($size > 0x7fffffff) { $et->Warn(sprintf("Invalid size (%u) for %s tag 0x%.4x", $size, $name, $tagID)); ++$warnCount; next; } $valuePtr = Get32u($dataPt, $valuePtr); # fix valuePtr if necessary if ($$dirInfo{FixOffsets}) { my $wFlag; $valEnd or $valEnd = $dataPos + $dirEnd + 4; #### eval FixOffsets ($valuePtr, $valEnd, $size, $tagID, $wFlag) eval $$dirInfo{FixOffsets}; } my $suspect; # offset shouldn't point into TIFF header $valuePtr < 8 and not $$dirInfo{ZeroOffsetOK} and $suspect = $warnCount; # convert offset to pointer in $$dataPt if ($$dirInfo{EntryBased} or (ref $$tagTablePtr{$tagID} eq 'HASH' and $$tagTablePtr{$tagID}{EntryBased})) { $valuePtr += $entry; } else { $valuePtr -= $dataPos; } # value shouldn't overlap our directory $suspect = $warnCount if $valuePtr < $dirEnd and $valuePtr+$size > $dirStart; # load value from file if necessary if ($valuePtr < 0 or $valuePtr+$size > $dataLen) { # get value by seeking in file if we are allowed my $buff; if ($raf) { # avoid loading large binary data unless necessary # (eg. ImageSourceData -- layers in Photoshop TIFF image) while ($size > BINARY_DATA_LIMIT) { if ($tagInfo) { # make large unknown blocks binary data $$tagInfo{Binary} = 1 if $$tagInfo{Unknown}; last unless $$tagInfo{Binary}; # must read non-binary data last if $$tagInfo{SubDirectory}; # must read SubDirectory data my $lcTag = lc($$tagInfo{Name}); if ($$et{OPTIONS}{Binary} and not $$et{EXCL_TAG_LOOKUP}{$lcTag}) { # read binary data if specified unless tagsFromFile won't use it last unless $$et{TAGS_FROM_FILE} and $$tagInfo{Protected}; } # must read if tag is specified by name last if $$et{REQ_TAG_LOOKUP}{$lcTag}; } else { # must read value if needed for a condition last if defined $tagInfo; } # (note: changing the value without changing $size will cause # a warning in the verbose output, but we need to maintain the # proper size for the htmlDump, so we can't change this) $buff = "Binary data $size bytes"; $readSize = length $buff; last; } # read from file if necessary unless (defined $buff or ($raf->Seek($base + $valuePtr + $dataPos,0) and $raf->Read($buff,$size) == $size)) { $et->Warn("Error reading value for $name entry $index", $inMakerNotes); return 0 unless $inMakerNotes or $htmlDump; ++$warnCount; $buff = '' unless defined $buff; $readSize = length $buff; $bad = 1; } $valueDataLen = length $buff; $valueDataPt = \$buff; $valueDataPos = $valuePtr + $dataPos; $valuePtr = 0; } else { my ($tagStr, $tmpInfo, $leicaTrailer); if ($tagInfo) { $tagStr = $$tagInfo{Name}; $leicaTrailer = $$tagInfo{LeicaTrailer}; } elsif (defined $tagInfo) { $tmpInfo = $et->GetTagInfo($tagTablePtr, $tagID, \ '', $formatStr, $count); if ($tmpInfo) { $tagStr = $$tmpInfo{Name}; $leicaTrailer = $$tmpInfo{LeicaTrailer}; } } if ($tagInfo and $$tagInfo{ChangeBase}) { # adjust base offset for this tag only #### eval ChangeBase ($dirStart,$dataPos) my $newBase = eval $$tagInfo{ChangeBase}; $valuePtr += $newBase; } $tagStr or $tagStr = sprintf("tag 0x%.4x",$tagID); # allow PreviewImage to run outside EXIF data if ($tagStr eq 'PreviewImage' and $$et{RAF}) { my $pos = $$et{RAF}->Tell(); $buff = $et->ExtractBinary($base + $valuePtr + $dataPos, $size, 'PreviewImage'); $$et{RAF}->Seek($pos, 0); $valueDataPt = \$buff; $valueDataPos = $valuePtr + $dataPos; $valueDataLen = $size; $valuePtr = 0; } elsif ($leicaTrailer and $$et{RAF}) { if ($verbose > 0) { $et->VPrint(0, "$$et{INDENT}$index) $tagStr --> (outside APP1 segment)\n"); } if ($et->Options('FastScan')) { $et->Warn('Ignored Leica MakerNote trailer'); } else { require Image::ExifTool::Fixup; $$et{LeicaTrailer} = { TagInfo => $tagInfo || $tmpInfo, Offset => $base + $valuePtr + $dataPos, Size => $size, Fixup => new Image::ExifTool::Fixup, }; } } else { $et->Warn("Bad $name offset for $tagStr"); ++$warnCount; } unless (defined $buff) { $valueDataPt = ''; $valueDataPos = $valuePtr + $dataPos; $valueDataLen = 0; $valuePtr = 0; $bad = 1; } } } # warn about suspect offsets if they didn't already cause another warning if (defined $suspect and $suspect == $warnCount) { my $tagStr = $tagInfo ? $$tagInfo{Name} : sprintf('tag 0x%.4x', $tagID); if ($et->Warn("Suspicious $name offset for $tagStr", $inMakerNotes)) { ++$warnCount; next unless $verbose; } } } # treat single unknown byte as int8u $formatStr = 'int8u' if $format == 7 and $count == 1; my ($val, $subdir, $wrongFormat); if ($tagID > 0xf000 and $tagTablePtr eq \%Image::ExifTool::Exif::Main) { my $oldInfo = $$tagTablePtr{$tagID}; if ((not $oldInfo or (ref $oldInfo eq 'HASH' and $$oldInfo{Condition} and not $$oldInfo{PSRaw})) and not $bad) { # handle special case of Photoshop RAW tags (0xfde8-0xfe58) # --> generate tags from the value if possible $val = ReadValue($valueDataPt,$valuePtr,$formatStr,$count,$readSize); if (defined $val and $val =~ /(.*): (.*)/) { my $tag = $1; $val = $2; $tag =~ s/'s//; # remove 's (so "Owner's Name" becomes "OwnerName") $tag =~ tr/a-zA-Z0-9_//cd; # remove unknown characters if ($tag) { $tagInfo = { Name => $tag, Condition => '$$self{TIFF_TYPE} ne "DCR"', ValueConv => '$_=$val;s/^.*: //;$_', # remove descr PSRaw => 1, # (just as flag to avoid adding this again) }; AddTagToTable($tagTablePtr, $tagID, $tagInfo); # generate conditional list if a conditional tag already existed $$tagTablePtr{$tagID} = [ $oldInfo, $tagInfo ] if $oldInfo; } } } } if (defined $tagInfo and not $tagInfo) { if ($bad) { undef $tagInfo; } else { # GetTagInfo() required the value for a Condition my $tmpVal = substr($$valueDataPt, $valuePtr, $readSize < 128 ? $readSize : 128); # (use original format name in this call -- $formatStr may have been changed to int8u) $tagInfo = $et->GetTagInfo($tagTablePtr, $tagID, \$tmpVal, $formatName[$format], $count); } } # make sure we are handling the 'ifd' format properly if (($format == 13 or $format == 18) and (not $tagInfo or not $$tagInfo{SubIFD})) { my $str = sprintf('%s tag 0x%.4x IFD format not handled', $dirName, $tagID); $et->Warn($str, $inMakerNotes); } if (defined $tagInfo) { my $readFormat = $$tagInfo{Format}; $subdir = $$tagInfo{SubDirectory}; # unless otherwise specified, all SubDirectory data except # EXIF SubIFD offsets should be unformatted $readFormat = 'undef' if $subdir and not $$tagInfo{SubIFD} and not $readFormat; # override EXIF format if specified if ($readFormat) { $formatStr = $readFormat; my $newNum = $formatNumber{$formatStr}; if ($newNum and $newNum != $format) { $origFormStr = $formatName[$format] . '[' . $count . ']'; $format = $newNum; # adjust number of items for new format size $count = int($size / $formatSize[$format]); } } # verify that offset-type values are integral if (($$tagInfo{IsOffset} or $$tagInfo{SubIFD}) and not $intFormat{$formatStr}) { $et->Warn("Wrong format ($formatStr) for $name $$tagInfo{Name}"); next unless $verbose; $wrongFormat = 1; } } else { next unless $verbose; } unless ($bad) { # limit maximum length of data to reformat # (avoids long delays when processing some corrupted files) if ($count > 100000 and $formatStr !~ /^(undef|string|binary)$/) { my $tagName = $tagInfo ? $$tagInfo{Name} : sprintf('tag 0x%.4x', $tagID); if ($tagName ne 'TransferFunction' or $count ne 196608) { my $minor = $count > 2000000 ? 0 : 2; next if $et->Warn("Ignoring $dirName $tagName with excessive count", $minor); } } # convert according to specified format $val = ReadValue($valueDataPt,$valuePtr,$formatStr,$count,$readSize,\$rational); # re-code if necessary if ($strEnc and $formatStr eq 'string' and defined $val) { $val = $et->Decode($val, $strEnc); } } if ($verbose) { my $tval = $val; # also show as a rational $tval .= " ($rational)" if defined $rational; if ($htmlDump) { my ($tagName, $colName); if ($tagID == 0x927c and $dirName eq 'ExifIFD') { $tagName = 'MakerNotes'; } elsif ($tagInfo) { $tagName = $$tagInfo{Name}; } else { $tagName = sprintf("Tag 0x%.4x",$tagID); } my $dname = sprintf("${name}-%.2d", $index); # build our tool tip $size < 0 and $size = $count * $formatSize[$format]; my $fstr = "$formatName[$format]\[$count]"; $fstr = "$origFormStr read as $fstr" if $origFormStr and $origFormStr ne $fstr; $fstr .= ' <-- WRONG' if $wrongFormat; my $tip = sprintf("Tag ID: 0x%.4x\n", $tagID) . "Format: $fstr\nSize: $size bytes\n"; if ($size > 4) { my $offPt = Get32u($dataPt,$entry+8); my $actPt = $valuePtr + $valueDataPos + $base - ($$et{EXIF_POS} || 0); $tip .= sprintf("Value offset: 0x%.4x\n", $offPt); # highlight tag name (red for bad size) my $style = ($bad or not defined $tval) ? 'V' : 'H'; if ($actPt != $offPt) { $tip .= sprintf("Actual offset: 0x%.4x\n", $actPt); my $sign = $actPt < $offPt ? '-' : ''; $tip .= sprintf("Offset base: ${sign}0x%.4x\n", abs($actPt - $offPt)); $style = 'F' if $style eq 'H'; # purple for different offsets } $colName = "<span class=$style>$tagName</span>"; $colName .= ' <span class=V>(odd)</span>' if $offPt & 0x01; } else { $colName = $tagName; } $colName .= ' <span class=V>(err)</span>' if $wrongFormat; $colName .= ' <span class=V>(seq)</span>' if $tagID <= $lastID and not $inMakerNotes; $lastID = $tagID; if (not defined $tval) { $tval = '<bad size/offset>'; } else { $tval = substr($tval,0,28) . '[...]' if length($tval) > 32; if ($formatStr =~ /^(string|undef|binary)/) { # translate non-printable characters $tval =~ tr/\x00-\x1f\x7f-\xff/./; } elsif ($tagInfo and Image::ExifTool::IsInt($tval)) { if ($$tagInfo{IsOffset} or $$tagInfo{SubIFD}) { $tval = sprintf('0x%.4x', $tval); my $actPt = $val + $base - ($$et{EXIF_POS} || 0); if ($actPt != $val) { $tval .= sprintf("\nActual offset: 0x%.4x", $actPt); my $sign = $actPt < $val ? '-' : ''; $tval .= sprintf("\nOffset base: ${sign}0x%.4x", abs($actPt - $val)); } } elsif ($$tagInfo{PrintHex}) { $tval = sprintf('0x%x', $tval); } } } $tip .= "Value: $tval"; $et->HDump($entry+$dataPos+$base, 12, "$dname $colName", $tip, 1); next if $valueDataLen < 0; # don't process bad pointer entry if ($size > 4) { my $exifDumpPos = $valuePtr + $valueDataPos + $base; my $flag = 0; if ($subdir) { if ($$tagInfo{MakerNotes}) { $flag = 0x04; } elsif ($$tagInfo{NestedHtmlDump}) { $flag = $$tagInfo{NestedHtmlDump} == 2 ? 0x10 : 0x04; } } # add value data block (underlining maker notes data) $et->HDump($exifDumpPos,$size,"$tagName value",'SAME', $flag); } } else { if ($tagID <= $lastID and not $inMakerNotes) { $et->Warn(sprintf('Tag ID 0x%.4x out of sequence in %s', $tagID, $dirName)); } $lastID = $tagID; my $fstr = $formatName[$format]; $fstr = "$origFormStr read as $fstr" if $origFormStr; $et->VerboseInfo($tagID, $tagInfo, Table => $tagTablePtr, Index => $index, Value => $tval, DataPt => $valueDataPt, DataPos => $valueDataPos + $base, Size => $size, Start => $valuePtr, Format => $fstr, Count => $count, ); } next if not $tagInfo or $wrongFormat; } next unless defined $val; #.............................................................................. # Handle SubDirectory tag types # if ($subdir) { # don't process empty subdirectories unless ($size) { unless ($$tagInfo{MakerNotes} or $inMakerNotes) { $et->Warn("Empty $$tagInfo{Name} data", 1); } next; } my (@values, $newTagTable, $dirNum, $newByteOrder, $invalid); my $tagStr = $$tagInfo{Name}; if ($$subdir{MaxSubdirs}) { @values = split ' ', $val; # limit the number of subdirectories we parse my $over = @values - $$subdir{MaxSubdirs}; if ($over > 0) { $et->Warn("Ignoring $over $tagStr directories"); splice @values, $$subdir{MaxSubdirs}; } $val = shift @values; } if ($$subdir{TagTable}) { $newTagTable = GetTagTable($$subdir{TagTable}); $newTagTable or warn("Unknown tag table $$subdir{TagTable}"), next; } else { $newTagTable = $tagTablePtr; # use existing table } # loop through all sub-directories specified by this tag for ($dirNum=0; ; ++$dirNum) { my $subdirBase = $base; my $subdirDataPt = $valueDataPt; my $subdirDataPos = $valueDataPos; my $subdirDataLen = $valueDataLen; my $subdirStart = $valuePtr; if (defined $$subdir{Start}) { # set local $valuePtr relative to file $base for eval my $valuePtr = $subdirStart + $subdirDataPos; #### eval Start ($valuePtr, $val) my $newStart = eval($$subdir{Start}); unless (Image::ExifTool::IsInt($newStart)) { $et->Warn("Bad value for $tagStr"); last; } # convert back to relative to $subdirDataPt $newStart -= $subdirDataPos; # adjust directory size if necessary unless ($$tagInfo{SubIFD} or $$subdir{BadOffset}) { $size -= $newStart - $subdirStart; } $subdirStart = $newStart; } # this is a pain, but some maker notes are always a specific # byte order, regardless of the byte order of the file my $oldByteOrder = GetByteOrder(); $newByteOrder = $$subdir{ByteOrder}; if ($newByteOrder) { if ($newByteOrder =~ /^Little/i) { $newByteOrder = 'II'; } elsif ($newByteOrder =~ /^Big/i) { $newByteOrder = 'MM'; } elsif ($$subdir{OffsetPt}) { undef $newByteOrder; warn "Can't have variable byte ordering for SubDirectories using OffsetPt"; last; } elsif ($subdirStart + 2 <= $subdirDataLen) { # attempt to determine the byte ordering by checking # at the number of directory entries. This is an int16u # that should be a reasonable value. my $num = Get16u($subdirDataPt, $subdirStart); if ($num & 0xff00 and ($num>>8) > ($num&0xff)) { # This looks wrong, we shouldn't have this many entries my %otherOrder = ( II=>'MM', MM=>'II' ); $newByteOrder = $otherOrder{$oldByteOrder}; } else { $newByteOrder = $oldByteOrder; } } } else { $newByteOrder = $oldByteOrder; } # set base offset if necessary if ($$subdir{Base}) { # calculate subdirectory start relative to $base for eval my $start = $subdirStart + $subdirDataPos; #### eval Base ($start,$base) $subdirBase = eval($$subdir{Base}) + $base; } # add offset to the start of the directory if necessary if ($$subdir{OffsetPt}) { #### eval OffsetPt ($valuePtr) my $pos = eval $$subdir{OffsetPt}; if ($pos + 4 > $subdirDataLen) { $et->Warn("Bad $tagStr OffsetPt"); last; } SetByteOrder($newByteOrder); $subdirStart += Get32u($subdirDataPt, $pos); SetByteOrder($oldByteOrder); } if ($subdirStart < 0 or $subdirStart + 2 > $subdirDataLen) { # convert $subdirStart back to a file offset if ($raf) { # reset SubDirectory buffer (we will load it later) my $buff = ''; $subdirDataPt = \$buff; $subdirDataLen = $size = length $buff; } else { my $msg = "Bad $tagStr SubDirectory start"; if ($verbose > 0) { if ($subdirStart < 0) { $msg .= " (directory start $subdirStart is before EXIF start)"; } else { my $end = $subdirStart + $size; $msg .= " (directory end is $end but EXIF size is only $subdirDataLen)"; } } $et->Warn($msg); last; } } # must update subdirDataPos if $base changes for this subdirectory $subdirDataPos += $base - $subdirBase; # build information hash for new directory my %subdirInfo = ( Name => $tagStr, Base => $subdirBase, DataPt => $subdirDataPt, DataPos => $subdirDataPos, DataLen => $subdirDataLen, DirStart => $subdirStart, DirLen => $size, RAF => $raf, Parent => $dirName, DirName => $$subdir{DirName}, FixBase => $$subdir{FixBase}, FixOffsets => $$subdir{FixOffsets}, EntryBased => $$subdir{EntryBased}, TagInfo => $tagInfo, SubIFD => $$tagInfo{SubIFD}, Subdir => $subdir, ); # (remember: some cameras incorrectly write maker notes in IFD0) if ($$tagInfo{MakerNotes}) { # don't parse makernotes if FastScan > 1 my $fast = $et->Options('FastScan'); last if $fast and $fast > 1; $subdirInfo{MakerNoteAddr} = $valuePtr + $valueDataPos + $base; $subdirInfo{NoFixBase} = 1 if defined $$subdir{Base}; } # set directory IFD name from group name of family 1 if it exists, # unless the tag is writable as a block in which case group 1 may # have been set automatically if ($$tagInfo{Groups} and not $$tagInfo{Writable}) { $subdirInfo{DirName} = $$tagInfo{Groups}{1}; # number multiple subdirectories $subdirInfo{DirName} =~ s/\d*$/$dirNum/ if $dirNum; } SetByteOrder($newByteOrder); # set byte order for this subdir # validate the subdirectory if necessary my $dirData = $subdirDataPt; # set data pointer to be used in eval #### eval Validate ($val, $dirData, $subdirStart, $size) my $ok = 0; if (defined $$subdir{Validate} and not eval $$subdir{Validate}) { $et->Warn("Invalid $tagStr data"); $invalid = 1; } else { if (not $subdirInfo{DirName} and $inMakerNotes) { $subdirInfo{DirName} = $$tagInfo{Name}; } # process the subdirectory $ok = $et->ProcessDirectory(\%subdirInfo, $newTagTable, $$subdir{ProcessProc}); } # print debugging information if there were errors if (not $ok and $verbose > 1 and $subdirStart != $valuePtr) { my $out = $et->Options('TextOut'); printf $out "%s (SubDirectory start = 0x%x)\n", $$et{INDENT}, $subdirStart; } SetByteOrder($oldByteOrder); # restore original byte swapping @values or last; $val = shift @values; # continue with next subdir } my $doMaker = $et->Options('MakerNotes'); next unless $doMaker or $$et{REQ_TAG_LOOKUP}{lc($tagStr)} or $$tagInfo{BlockExtract}; # extract as a block if specified if ($$tagInfo{MakerNotes}) { # save maker note byte order (if it was significant and valid) if ($$subdir{ByteOrder} and not $invalid) { $$et{MAKER_NOTE_BYTE_ORDER} = defined ($$et{UnknownByteOrder}) ? $$et{UnknownByteOrder} : $newByteOrder; } if ($doMaker and $doMaker eq '2') { # extract maker notes without rebuilding (no fixup information) delete $$et{MAKER_NOTE_FIXUP}; } elsif (not $$tagInfo{NotIFD}) { # this is a pain, but we must rebuild EXIF-typemaker notes to # include all the value data if data was outside the maker notes my %makerDirInfo = ( Name => $tagStr, Base => $base, DataPt => $valueDataPt, DataPos => $valueDataPos, DataLen => $valueDataLen, DirStart => $valuePtr, DirLen => $size, RAF => $raf, Parent => $dirName, DirName => 'MakerNotes', FixOffsets => $$subdir{FixOffsets}, TagInfo => $tagInfo, ); $makerDirInfo{FixBase} = 1 if $$subdir{FixBase}; # rebuild maker notes (creates $$et{MAKER_NOTE_FIXUP}) my $val2 = RebuildMakerNotes($et, $newTagTable, \%makerDirInfo); if (defined $val2) { $val = $val2; } elsif ($size > 4) { $et->Warn('Error rebuilding maker notes (may be corrupt)'); } } } else { # extract this directory as a block if specified next unless $$tagInfo{Writable}; } } #.............................................................................. # convert to absolute offsets if this tag is an offset #### eval IsOffset ($val, $et) if ($$tagInfo{IsOffset} and eval $$tagInfo{IsOffset}) { my $offsetBase = $$tagInfo{IsOffset} eq '2' ? $firstBase : $base; $offsetBase += $$et{BASE}; # handle offsets which use a wrong base (Minolta A200) if ($$tagInfo{WrongBase}) { my $self = $et; #### eval WrongBase ($self) $offsetBase += eval $$tagInfo{WrongBase} || 0; } my @vals = split(' ',$val); foreach $val (@vals) { $val += $offsetBase; } $val = join(' ', @vals); } # save the value of this tag $tagKey = $et->FoundTag($tagInfo, $val); if (defined $tagKey) { # set the group 1 name for tags in specified tables $et->SetGroup($tagKey, $dirName) if $$tagTablePtr{SET_GROUP1}; # save original components of rational numbers (used when copying) $$et{RATIONAL}{$tagKey} = $rational if defined $rational; } } # scan for subsequent IFD's if specified if ($$dirInfo{Multi} and $bytesFromEnd >= 4) { my $offset = Get32u($dataPt, $dirEnd); if ($offset) { my $subdirStart = $offset - $dataPos; # use same directory information for trailing directory, # but change the start location (ProcessDirectory will # test to make sure we don't reprocess the same dir twice) my %newDirInfo = %$dirInfo; $newDirInfo{DirStart} = $subdirStart; # increment IFD number my $ifdNum = $newDirInfo{DirName} =~ s/(\d+)$// ? $1 : 0; $newDirInfo{DirName} .= $ifdNum + 1; # must validate SubIFD1 because the nextIFD pointer is invalid for some RAW formats if ($newDirInfo{DirName} ne 'SubIFD1' or ValidateIFD(\%newDirInfo)) { $$et{INDENT} =~ s/..$//; # keep indent the same my $cur = pop @{$$et{PATH}}; $et->ProcessDirectory(\%newDirInfo, $tagTablePtr) or $success = 0; push @{$$et{PATH}}, $cur; } elsif ($verbose or $$et{TIFF_TYPE} eq 'TIFF') { $et->Warn('Ignored bad IFD linked from SubIFD'); } } } return $success; } 1; # end __END__ =head1 NAME Image::ExifTool::Exif - Read EXIF/TIFF meta information =head1 SYNOPSIS This module is required by Image::ExifTool. =head1 DESCRIPTION This module contains routines required by Image::ExifTool for processing EXIF and TIFF meta information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.exif.org/Exif2-2.PDF> =item L<http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf> =item L<http://partners.adobe.com/asn/developer/pdfs/tn/TIFF6.pdf> =item L<http://partners.adobe.com/public/developer/en/tiff/TIFFPM6.pdf> =item L<http://www.adobe.com/products/dng/pdfs/dng_spec.pdf> =item L<http://www.awaresystems.be/imaging/tiff/tifftags.html> =item L<http://www.remotesensing.org/libtiff/TIFFTechNote2.html> =item L<http://www.exif.org/dcf.PDF> =item L<http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html> =item L<http://www.fine-view.com/jp/lab/doc/ps6ffspecsv2.pdf> =item L<http://www.ozhiker.com/electronics/pjmt/jpeg_info/meta.html> =item L<http://hul.harvard.edu/jhove/tiff-tags.html> =item L<http://www.microsoft.com/whdc/xps/wmphoto.mspx> =item L<http://www.asmail.be/msg0054681802.html> =item L<http://crousseau.free.fr/imgfmt_raw.htm> =item L<http://www.cybercom.net/~dcoffin/dcraw/> =item L<http://www.digitalpreservation.gov/formats/content/tiff_tags.shtml> =item L<http://community.roxen.com/developers/idocs/rfc/rfc3949.html> =item L<http://tools.ietf.org/html/draft-ietf-fax-tiff-fx-extension1-01> =item L<http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/cinemadng/pdfs/CinemaDNG_Format_Specification_v1_1.pdf> =back =head1 ACKNOWLEDGEMENTS Thanks to Jeremy Brown for the 35efl tags, and Matt Madrid for his help with the XP character code conversions. =head1 SEE ALSO L<Image::ExifTool::TagNames/EXIF Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Fixup.pm����������������������������������������������������000644 �000765 �000024 �00000030673 12642461275 021357� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Fixup.pm # # Description: Utility to handle pointer fixups # # Revisions: 01/19/2005 - P. Harvey Created # 04/11/2005 - P. Harvey Allow fixups to be tagged with a marker, # and add new marker-related routines # 06/21/2006 - P. Harvey Patch to work with negative offsets # 07/07/2006 - P. Harvey Added support for 16-bit pointers # 02/19/2013 - P. Harvey Added IsEmpty() # # Data Members: # # Start - Position in data where a zero pointer points to. # Shift - Amount to shift offsets (relative to Start). # Fixups - List of Fixup object references to to shift relative to this Fixup. # Pointers - Hash of references to fixup pointer arrays, keyed by ByteOrder # string (with "2" added if pointer is 16-bit [default is 32-bit], # plus "_$marker" suffix if tagged with a marker name). # # Procedure: # # 1. Create a Fixup object for each data block containing pointers # 2. Call AddFixup with the offset of each pointer in the block # - pointer is assumed int32u with the current byte order # - may also be called with a fixup reference for contained blocks # 3. Add the necessary pointer offset to $$fixup{Shift} # 4. Add data size to $$fixup{Start} if data is added before the block # - automatically also shifts pointers by this amount # 5. Call ApplyFixup to apply the fixup to all pointers # - resets Shift and Start to 0 after applying fixup #------------------------------------------------------------------------------ package Image::ExifTool::Fixup; use strict; use Image::ExifTool qw(GetByteOrder SetByteOrder Get32u Get32s Set32u Get16u Get16s Set16u); use vars qw($VERSION); $VERSION = '1.05'; sub AddFixup($$;$$); sub ApplyFixup($$); sub Dump($;$); #------------------------------------------------------------------------------ # New - create new Fixup object # Inputs: 0) reference to Fixup object or Fixup class name sub new { local $_; my $that = shift; my $class = ref($that) || $that || 'Image::ExifTool::Fixup'; my $self = bless {}, $class; # initialize required members $self->{Start} = 0; $self->{Shift} = 0; return $self; } #------------------------------------------------------------------------------ # Clone this object # Inputs: 0) reference to Fixup object or Fixup class name # Returns: reference to new Fixup object sub Clone($) { my $self = shift; my $clone = new Image::ExifTool::Fixup; $clone->{Start} = $self->{Start}; $clone->{Shift} = $self->{Shift}; my $phash = $self->{Pointers}; if ($phash) { $clone->{Pointers} = { }; my $byteOrder; foreach $byteOrder (keys %$phash) { my @pointers = @{$phash->{$byteOrder}}; $clone->{Pointers}->{$byteOrder} = \@pointers; } } if ($self->{Fixups}) { $clone->{Fixups} = [ ]; my $subFixup; foreach $subFixup (@{$self->{Fixups}}) { push @{$clone->{Fixups}}, $subFixup->Clone(); } } return $clone; } #------------------------------------------------------------------------------ # Add fixup pointer or another fixup object below this one # Inputs: 0) Fixup object reference # 1) Scalar for pointer offset, or reference to Fixup object # 2) Optional marker name for the pointer # 3) Optional pointer format ('int16u' or 'int32u', defaults to 'int32u') # Notes: Byte ordering must be set properly for the pointer being added (must keep # track of the byte order of each offset since MakerNotes may have different byte order!) sub AddFixup($$;$$) { my ($self, $pointer, $marker, $format) = @_; if (ref $pointer) { $self->{Fixups} or $self->{Fixups} = [ ]; push @{$self->{Fixups}}, $pointer; } else { my $byteOrder = GetByteOrder(); if (defined $format) { if ($format eq 'int16u') { $byteOrder .= '2'; } elsif ($format ne 'int32u') { warn "Bad Fixup pointer format $format\n"; } } $byteOrder .= "_$marker" if defined $marker; my $phash = $self->{Pointers}; $phash or $phash = $self->{Pointers} = { }; $phash->{$byteOrder} or $phash->{$byteOrder} = [ ]; push @{$phash->{$byteOrder}}, $pointer; } } #------------------------------------------------------------------------------ # fix up pointer offsets # Inputs: 0) Fixup object reference, 1) data reference # Outputs: Collapses fixup hierarchy into linear lists of fixup pointers sub ApplyFixup($$) { my ($self, $dataPt) = @_; my $start = $self->{Start}; my $shift = $self->{Shift} + $start; # make shift relative to start my $phash = $self->{Pointers}; # fix up pointers in this fixup if ($phash and ($start or $shift)) { my $saveOrder = GetByteOrder(); # save original byte ordering my ($byteOrder, $ptr); foreach $byteOrder (keys %$phash) { SetByteOrder(substr($byteOrder,0,2)); # apply the fixup offset shift (must get as signed integer # to avoid overflow in case it was negative before) my ($get, $set) = ($byteOrder =~ /^(II2|MM2)/) ? (\&Get16s, \&Set16u) : (\&Get32s, \&Set32u); foreach $ptr (@{$phash->{$byteOrder}}) { $ptr += $start; # update pointer to new start location next unless $shift; &$set(&$get($dataPt, $ptr) + $shift, $dataPt, $ptr); } } SetByteOrder($saveOrder); # restore original byte ordering } # recurse into contained fixups if ($self->{Fixups}) { # create our pointer hash if it doesn't exist $phash or $phash = $self->{Pointers} = { }; # loop through all contained fixups my $subFixup; foreach $subFixup (@{$self->{Fixups}}) { # adjust the subfixup start and shift $subFixup->{Start} += $start; $subFixup->{Shift} += $shift - $start; # recursively apply contained fixups ApplyFixup($subFixup, $dataPt); my $shash = $subFixup->{Pointers} or next; # add all pointers to our collapsed lists my $byteOrder; foreach $byteOrder (keys %$shash) { $phash->{$byteOrder} or $phash->{$byteOrder} = [ ]; push @{$phash->{$byteOrder}}, @{$shash->{$byteOrder}}; delete $shash->{$byteOrder}; } delete $subFixup->{Pointers}; } delete $self->{Fixups}; # remove our contained fixups } # reset our Start/Shift for the collapsed fixup $self->{Start} = $self->{Shift} = 0; } #------------------------------------------------------------------------------ # Is this Fixup empty? # Inputs: 0) Fixup object ref # Returns: True if there are no offsets to fix sub IsEmpty($) { my $self = shift; my $phash = $self->{Pointers}; if ($phash) { my $key; foreach $key (keys %$phash) { next unless ref $$phash{$key} eq 'ARRAY'; return 0 if @{$$phash{$key}}; } } return 1; } #------------------------------------------------------------------------------ # Does specified marker exist? # Inputs: 0) Fixup object reference, 1) marker name # Returns: True if fixup contains specified marker name sub HasMarker($$) { my ($self, $marker) = @_; my $phash = $self->{Pointers}; return 0 unless $phash; return 1 if grep /_$marker$/, keys %$phash; return 0 unless $self->{Fixups}; my $subFixup; foreach $subFixup (@{$self->{Fixups}}) { return 1 if $subFixup->HasMarker($marker); } return 0; } #------------------------------------------------------------------------------ # Set all marker pointers to specified value # Inputs: 0) Fixup object reference, 1) data reference # 2) marker name, 3) pointer value, 4) offset to start of data sub SetMarkerPointers($$$$;$) { my ($self, $dataPt, $marker, $value, $startOffset) = @_; my $start = $self->{Start} + ($startOffset || 0); my $phash = $self->{Pointers}; if ($phash) { my $saveOrder = GetByteOrder(); # save original byte ordering my ($byteOrder, $ptr); foreach $byteOrder (keys %$phash) { next unless $byteOrder =~ /^(II|MM)(2?)_$marker$/; SetByteOrder($1); my $set = $2 ? \&Set16u : \&Set32u; foreach $ptr (@{$phash->{$byteOrder}}) { &$set($value, $dataPt, $ptr + $start); } } SetByteOrder($saveOrder); # restore original byte ordering } if ($self->{Fixups}) { my $subFixup; foreach $subFixup (@{$self->{Fixups}}) { $subFixup->SetMarkerPointers($dataPt, $marker, $value, $start); } } } #------------------------------------------------------------------------------ # Get pointer values for specified marker # Inputs: 0) Fixup object reference, 1) data reference, # 2) marker name, 3) offset to start of data # Returns: List of marker pointers in list context, or first marker pointer otherwise sub GetMarkerPointers($$$;$) { my ($self, $dataPt, $marker, $startOffset) = @_; my $start = $self->{Start} + ($startOffset || 0); my $phash = $self->{Pointers}; my @pointers; if ($phash) { my $saveOrder = GetByteOrder(); my ($byteOrder, $ptr); foreach $byteOrder (grep /_$marker$/, keys %$phash) { SetByteOrder(substr($byteOrder,0,2)); my $get = ($byteOrder =~ /^(II2|MM2)/) ? \&Get16u : \&Get32u; foreach $ptr (@{$phash->{$byteOrder}}) { push @pointers, &$get($dataPt, $ptr + $start); } } SetByteOrder($saveOrder); # restore original byte ordering } if ($self->{Fixups}) { my $subFixup; foreach $subFixup (@{$self->{Fixups}}) { push @pointers, $subFixup->GetMarkerPointers($dataPt, $marker, $start); } } return @pointers if wantarray; return $pointers[0]; } #------------------------------------------------------------------------------ # Dump fixup to console for debugging # Inputs: 0) Fixup object reference, 1) optional initial indent string sub Dump($;$) { my ($self, $indent) = @_; $indent or $indent = ''; printf "${indent}Fixup start=0x%x shift=0x%x\n", $self->{Start}, $self->{Shift}; my $phash = $self->{Pointers}; if ($phash) { my $byteOrder; foreach $byteOrder (sort keys %$phash) { print "$indent $byteOrder: ", join(' ',@{$phash->{$byteOrder}}),"\n"; } } if ($self->{Fixups}) { my $subFixup; foreach $subFixup (@{$self->{Fixups}}) { Dump($subFixup, $indent . ' '); } } } 1; # end __END__ =head1 NAME Image::ExifTool::Fixup - Utility to handle pointer fixups =head1 SYNOPSIS use Image::ExifTool::Fixup; $fixup = new Image::ExifTool::Fixup; # add a new fixup to a pointer at the specified offset in data $fixup->AddFixup($offset); # add a new Fixup object to the tree $fixup->AddFixup($subFixup); $fixup->{Start} += $shift1; # shift pointer offsets and values $fixup->{Shift} += $shift2; # shift pointer values only # recursively apply fixups to the specified data $fixup->ApplyFixups(\$data); $fixup->Dump(); # dump debugging information $fixup->IsEmpty(); # return true if no offsets to fix =head1 DESCRIPTION This module contains the code to keep track of pointers in memory and to shift these pointers as required. It is used by ExifTool to maintain the pointers in image file directories (IFD's). =head1 NOTES Keeps track of pointers with different byte ordering, and relies on Image::ExifTool::GetByteOrder() to determine the current byte ordering when adding new pointers to a fixup. Maintains a hierarchical list of fixups so that the whole hierarchy can be shifted by a simple shift at the base. Hierarchy is collapsed to a linear list when ApplyFixups() is called. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/FLAC.pm�����������������������������������������������������000644 �000765 �000024 �00000022460 12642461275 020764� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: FLAC.pm # # Description: Read Free Lossless Audio Codec information # # Revisions: 11/13/2006 - P. Harvey Created # # References: 1) http://flac.sourceforge.net/ #------------------------------------------------------------------------------ package Image::ExifTool::FLAC; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.07'; sub ProcessBitStream($$$); # FLAC metadata blocks %Image::ExifTool::FLAC::Main = ( NOTES => q{ Free Lossless Audio Codec (FLAC) meta information. ExifTool also extracts ID3 information from these files. }, 0 => { Name => 'StreamInfo', SubDirectory => { TagTable => 'Image::ExifTool::FLAC::StreamInfo' }, }, 1 => { Name => 'Padding', Binary => 1, Unknown => 1 }, 2 => { Name => 'Application', Binary => 1, Unknown => 1 }, 3 => { Name => 'SeekTable', Binary => 1, Unknown => 1 }, 4 => { Name => 'VorbisComment', SubDirectory => { TagTable => 'Image::ExifTool::Vorbis::Comments' }, }, 5 => { Name => 'CueSheet', Binary => 1, Unknown => 1 }, 6 => { Name => 'Picture', SubDirectory => { TagTable => 'Image::ExifTool::FLAC::Picture' }, }, # 7-126 - Reserved # 127 - Invalid ); %Image::ExifTool::FLAC::StreamInfo = ( PROCESS_PROC => \&ProcessBitStream, NOTES => 'FLAC is big-endian, so bit 0 is the high-order bit in this table.', GROUPS => { 2 => 'Audio' }, 'Bit000-015' => 'BlockSizeMin', 'Bit016-031' => 'BlockSizeMax', 'Bit032-055' => 'FrameSizeMin', 'Bit056-079' => 'FrameSizeMax', 'Bit080-099' => 'SampleRate', 'Bit100-102' => { Name => 'Channels', ValueConv => '$val + 1', }, 'Bit103-107' => { Name => 'BitsPerSample', ValueConv => '$val + 1', }, 'Bit108-143' => 'TotalSamples', ); %Image::ExifTool::FLAC::Picture = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, FORMAT => 'int32u', 0 => { Name => 'PictureType', PrintConv => { # (Note: Duplicated in ID3, ASF and FLAC modules!) 0 => 'Other', 1 => '32x32 PNG Icon', 2 => 'Other Icon', 3 => 'Front Cover', 4 => 'Back Cover', 5 => 'Leaflet', 6 => 'Media', 7 => 'Lead Artist', 8 => 'Artist', 9 => 'Conductor', 10 => 'Band', 11 => 'Composer', 12 => 'Lyricist', 13 => 'Recording Studio or Location', 14 => 'Recording Session', 15 => 'Performance', 16 => 'Capture from Movie or Video', 17 => 'Bright(ly) Colored Fish', 18 => 'Illustration', 19 => 'Band Logo', 20 => 'Publisher Logo', }, }, 1 => { Name => 'PictureMIMEType', Format => 'var_pstr32', }, 2 => { Name => 'PictureDescription', Format => 'var_pstr32', ValueConv => '$self->Decode($val, "UTF8")', }, 3 => 'PictureWidth', 4 => 'PictureHeight', 5 => 'PictureBitsPerPixel', 6 => 'PictureIndexedColors', 7 => 'PictureLength', 8 => { Name => 'Picture', Groups => { 2 => 'Preview' }, Format => 'undef[$val{7}]', Binary => 1, }, ); # FLAC composite tags %Image::ExifTool::FLAC::Composite = ( Duration => { Require => { 0 => 'FLAC:SampleRate', 1 => 'FLAC:TotalSamples', }, ValueConv => '($val[0] and $val[1]) ? $val[1] / $val[0] : undef', PrintConv => 'ConvertDuration($val)', }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::FLAC'); #------------------------------------------------------------------------------ # Process information in a bit stream # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Notes: Byte order is used to determine the ordering of bits in the stream: # 'MM' = bit 0 is most significant, 'II' = bit 0 is least significant # - can handle arbitrarily wide values (eg. 8-byte or larger integers) sub ProcessBitStream($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos}; my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || (length($$dataPt) - $dirStart); my $verbose = $et->Options('Verbose'); my $byteOrder = GetByteOrder(); my $tag; if ($verbose) { $et->VPrint(0, " + [BitStream directory, $dirLen bytes, '$byteOrder' order]\n"); } foreach $tag (sort keys %$tagTablePtr) { next unless $tag =~ /^Bit(\d+)-?(\d+)?/; my ($b1, $b2) = ($1, $2 || $1); # start/end bit numbers in stream my ($i1, $i2) = (int($b1 / 8), int($b2 / 8)); # start/end byte numbers my ($f1, $f2) = ($b1 % 8, $b2 % 8); # start/end bit numbers within each byte last if $i2 >= $dirLen; my $val = 0; my ($i, $mask, $extra); $extra = ', Mask=0x' if $verbose and ($f1 != 0 or $f2 != 7); if ($byteOrder eq 'MM') { # loop from high byte to low byte for ($i=$i1; $i<=$i2; ++$i) { $mask = 0xff; if ($i == $i1 and $f1) { # mask off high bits in first word (0 is high bit) foreach ((8-$f1) .. 7) { $mask ^= (1 << $_) } } if ($i == $i2 and $f2 < 7) { # mask off low bits in last word (7 is low bit) foreach (0 .. (6-$f2)) { $mask ^= (1 << $_) } } $val = $val * 256 + ($mask & Get8u($dataPt, $i + $dirStart)); $extra .= sprintf('%.2x', $mask) if $extra; } } else { # (FLAC is big-endian, but support little-endian bit streams # so this routine can be used by other modules) # loop from high byte to low byte for ($i=$i2; $i>=$i1; --$i) { $mask = 0xff; if ($i == $i1 and $f1) { # mask off low bits in first word (0 is low bit) foreach (0 .. ($f1-1)) { $mask ^= (1 << $_) } } if ($i == $i2 and $f2 < 7) { # mask off high bits in last word (7 is high bit) foreach (($f2+1) .. 7) { $mask ^= (1 << $_) } } $val = $val * 256 + ($mask & Get8u($dataPt, $i + $dirStart)); $extra .= sprintf('%.2x', $mask) if $extra; } } # shift word down until low bit is in position 0 until ($mask & 0x01) { $val /= 2; $mask >>= 1; } $et->HandleTag($tagTablePtr, $tag, $val, DataPt => $dataPt, DataPos => $dataPos, Start => $dirStart + $i1, Size => $i2 - $i1 + 1, Extra => $extra, ); } return 1; } #------------------------------------------------------------------------------ # Extract information from an Ogg FLAC file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid Ogg FLAC file sub ProcessFLAC($$) { my ($et, $dirInfo) = @_; # must first check for leading/trailing ID3 information unless ($$et{DoneID3}) { require Image::ExifTool::ID3; Image::ExifTool::ID3::ProcessID3($et, $dirInfo) and return 1; } my $raf = $$dirInfo{RAF}; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my ($buff, $err); # check FLAC signature $raf->Read($buff, 4) == 4 and $buff eq 'fLaC' or return 0; $et->SetFileType(); SetByteOrder('MM'); my $tagTablePtr = GetTagTable('Image::ExifTool::FLAC::Main'); for (;;) { # read next metadata block header $raf->Read($buff, 4) == 4 or last; my $flag = unpack('C', $buff); my $size = unpack('N', $buff) & 0x00ffffff; $raf->Read($buff, $size) == $size or $err = 1, last; my $last = $flag & 0x80; # last-metadata-block flag my $tag = $flag & 0x7f; # tag bits if ($verbose) { print $out "FLAC metadata block, type $tag:\n"; $et->VerboseDump(\$buff, DataPos => $raf->Tell() - $size); } $et->HandleTag($tagTablePtr, $tag, undef, DataPt => \$buff, DataPos => $raf->Tell() - $size, ); last if $last; # all done if is set } $err and $et->Warn('Format error in FLAC file'); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::FLAC - Read Free Lossless Audio Codec information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from Free Lossless Audio Codec (FLAC) audio files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://flac.sourceforge.net/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/FLAC Tags>, L<Image::ExifTool::TagNames/Ogg Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Flash.pm����������������������������������������������������000644 �000765 �000024 �00000066776 12642461276 021337� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Flash.pm # # Description: Read Shockwave Flash meta information # # Revisions: 05/16/2006 - P. Harvey Created # 06/07/2007 - PH Added support for FLV (Flash Video) files # 10/23/2008 - PH Added support for XMP in FLV and SWF # # References: 1) http://www.the-labs.com/MacromediaFlash/SWF-Spec/SWFfileformat.html # 2) http://sswf.sourceforge.net/SWFalexref.html # 3) http://osflash.org/flv/ # 4) http://www.irisa.fr/texmex/people/dufouil/ffmpegdoxy/flv_8h.html # 5) http://www.adobe.com/devnet/xmp/pdfs/XMPSpecificationPart3.pdf (Oct 2008) # 6) http://www.adobe.com/devnet/swf/pdf/swf_file_format_spec_v9.pdf # 7) http://help.adobe.com/en_US/FlashMediaServer/3.5_Deving/WS5b3ccc516d4fbf351e63e3d11a0773d56e-7ff6.html # 8) http://www.adobe.com/devnet/flv/pdf/video_file_format_spec_v10.pdf # # Notes: I'll add AMF3 support if someone sends me a FLV with AMF3 data #------------------------------------------------------------------------------ package Image::ExifTool::Flash; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::FLAC; $VERSION = '1.12'; sub ProcessMeta($$$;$); # Meta packets that we process my %processMetaPacket = ( onMetaData => 1, onXMPData => 1 ); # information extracted from SWF header %Image::ExifTool::Flash::Main = ( GROUPS => { 2 => 'Video' }, VARS => { ALPHA_FIRST => 1 }, NOTES => q{ The information below is extracted from SWF (Shockwave Flash) files. Tags with string ID's represent information extracted from the file header. }, FlashVersion => { }, Compressed => { PrintConv => { 0 => 'False', 1 => 'True' } }, ImageWidth => { }, ImageHeight => { }, FrameRate => { }, FrameCount => { }, Duration => { Notes => 'calculated from FrameRate and FrameCount', PrintConv => 'ConvertDuration($val)', }, 69 => { Name => 'FlashAttributes', PrintConv => { BITMASK => { 0 => 'UseNetwork', 3 => 'ActionScript3', 4 => 'HasMetadata', } }, }, 77 => { Name => 'XMP', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' }, }, ); # packets in Flash Video files %Image::ExifTool::Flash::FLV = ( NOTES => q{ Information is extracted from the following packets in FLV (Flash Video) files. }, 0x08 => { Name => 'Audio', BitMask => 0x04, SubDirectory => { TagTable => 'Image::ExifTool::Flash::Audio' }, }, 0x09 => { Name => 'Video', BitMask => 0x01, SubDirectory => { TagTable => 'Image::ExifTool::Flash::Video' }, }, 0x12 => { Name => 'Meta', SubDirectory => { TagTable => 'Image::ExifTool::Flash::Meta' }, }, ); # tags in Flash Video packet header %Image::ExifTool::Flash::Audio = ( PROCESS_PROC => \&Image::ExifTool::FLAC::ProcessBitStream, GROUPS => { 2 => 'Audio' }, NOTES => 'Information extracted from the Flash Audio header.', 'Bit0-3' => { Name => 'AudioEncoding', PrintConv => { 0 => 'PCM-BE (uncompressed)', # PCM-BE according to ref 4 1 => 'ADPCM', 2 => 'MP3', 3 => 'PCM-LE (uncompressed)', #4 4 => 'Nellymoser 16kHz Mono', #8 5 => 'Nellymoser 8kHz Mono', 6 => 'Nellymoser', 7 => 'G.711 A-law logarithmic PCM', #8 8 => 'G.711 mu-law logarithmic PCM', #8 # (9 is reserved, ref 8) 10 => 'AAC', #8 11 => 'Speex', #8 13 => 'MP3 8-Khz', #8 15 => 'Device-specific sound', #8 }, }, 'Bit4-5' => { Name => 'AudioSampleRate', ValueConv => { 0 => 5512, 1 => 11025, 2 => 22050, 3 => 44100, }, }, 'Bit6' => { Name => 'AudioBitsPerSample', ValueConv => '8 * ($val + 1)', }, 'Bit7' => { Name => 'AudioChannels', ValueConv => '$val + 1', PrintConv => { 1 => '1 (mono)', 2 => '2 (stereo)', }, }, ); # tags in Flash Video packet header %Image::ExifTool::Flash::Video = ( PROCESS_PROC => \&Image::ExifTool::FLAC::ProcessBitStream, GROUPS => { 2 => 'Video' }, NOTES => 'Information extracted from the Flash Video header.', 'Bit4-7' => { Name => 'VideoEncoding', PrintConv => { 1 => 'JPEG', #8 2 => 'Sorensen H.263', 3 => 'Screen Video', 4 => 'On2 VP6', 5 => 'On2 VP6 Alpha', #3 6 => 'Screen Video 2', #3 7 => 'H.264', #7 (called "AVC" by ref 8) }, }, ); # tags in Flash META packet (in ActionScript Message Format) %Image::ExifTool::Flash::Meta = ( PROCESS_PROC => \&ProcessMeta, GROUPS => { 2 => 'Video' }, NOTES => q{ Below are a few observed FLV Meta tags, but ExifTool will attempt to extract information from any tag found. }, 'audiocodecid' => { Name => 'AudioCodecID', Groups => { 2 => 'Audio' } }, 'audiodatarate' => { Name => 'AudioBitrate', Groups => { 2 => 'Audio' }, ValueConv => '$val * 1000', PrintConv => 'ConvertBitrate($val)', }, 'audiodelay' => { Name => 'AudioDelay', Groups => { 2 => 'Audio' } }, 'audiosamplerate'=>{ Name => 'AudioSampleRate', Groups => { 2 => 'Audio' } }, 'audiosamplesize'=>{ Name => 'AudioSampleSize', Groups => { 2 => 'Audio' } }, 'audiosize' => { Name => 'AudioSize', Groups => { 2 => 'Audio' } }, 'bytelength' => 'ByteLength', # (youtube) 'canseekontime' => 'CanSeekOnTime', # (youtube) 'canSeekToEnd' => 'CanSeekToEnd', 'creationdate' => { # (not an AMF date type in my sample) Name => 'CreateDate', Groups => { 2 => 'Time' }, ValueConv => '$val=~s/\s+$//; $val', # trim trailing whitespace }, 'createdby' => 'CreatedBy', #7 'cuePoints' => { Name => 'CuePoint', SubDirectory => { TagTable => 'Image::ExifTool::Flash::CuePoint' }, }, 'datasize' => 'DataSize', 'duration' => { Name => 'Duration', PrintConv => 'ConvertDuration($val)', }, 'filesize' => 'FileSizeBytes', 'framerate' => { Name => 'FrameRate', PrintConv => 'int($val * 1000 + 0.5) / 1000', }, 'hasAudio' => { Name => 'HasAudio', Groups => { 2 => 'Audio' } }, 'hasCuePoints' => 'HasCuePoints', 'hasKeyframes' => 'HasKeyFrames', 'hasMetadata' => 'HasMetadata', 'hasVideo' => 'HasVideo', 'height' => 'ImageHeight', 'httphostheader'=> 'HTTPHostHeader', # (youtube) 'keyframesTimes'=> 'KeyFramesTimes', 'keyframesFilepositions' => 'KeyFramePositions', 'lasttimestamp' => 'LastTimeStamp', 'lastkeyframetimestamp' => 'LastKeyFrameTime', 'metadatacreator'=>'MetadataCreator', 'metadatadate' => { Name => 'MetadataDate', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, 'purl' => 'URL', # (youtube) (what does P mean?) 'pmsg' => 'Message', # (youtube) (what does P mean?) 'sourcedata' => 'SourceData', # (youtube) 'starttime' => { # (youtube) Name => 'StartTime', PrintConv => 'ConvertDuration($val)', }, 'stereo' => { Name => 'Stereo', Groups => { 2 => 'Audio' } }, 'totalduration' => { # (youtube) Name => 'TotalDuration', PrintConv => 'ConvertDuration($val)', }, 'totaldatarate' => { # (youtube) Name => 'TotalDataRate', ValueConv => '$val * 1000', PrintConv => 'int($val + 0.5)', }, 'totalduration' => 'TotalDuration', 'videocodecid' => 'VideoCodecID', 'videodatarate' => { Name => 'VideoBitrate', ValueConv => '$val * 1000', PrintConv => 'ConvertBitrate($val)', }, 'videosize' => 'VideoSize', 'width' => 'ImageWidth', # tags in 'onXMPData' packets 'liveXML' => { #5 Name => 'XMP', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' }, }, ); # tags in Flash META CuePoint structure %Image::ExifTool::Flash::CuePoint = ( PROCESS_PROC => \&ProcessMeta, GROUPS => { 2 => 'Video' }, NOTES => q{ These tag names are added to the CuePoint name to generate complete tag names like "CuePoint0Name". }, 'name' => 'Name', 'type' => 'Type', 'time' => 'Time', 'parameters' => { Name => 'Parameter', SubDirectory => { TagTable => 'Image::ExifTool::Flash::Parameter' }, }, ); # tags in Flash META CuePoint Parameter structure %Image::ExifTool::Flash::Parameter = ( PROCESS_PROC => \&ProcessMeta, GROUPS => { 2 => 'Video' }, NOTES => q{ There are no pre-defined parameter tags, but ExifTool will extract any existing parameters, with tag names like "CuePoint0ParameterXxx". }, ); # name lookup for known AMF data types my @amfType = qw(double boolean string object movieClip null undefined reference mixedArray objectEnd array date longString unsupported recordSet XML typedObject AMF3data); # test for AMF structure types (object, mixed array or typed object) my %isStruct = ( 0x03 => 1, 0x08 => 1, 0x10 => 1 ); #------------------------------------------------------------------------------ # Process Flash Video AMF Meta packet (ref 3) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # 3) Set to extract single type/value only # Returns: 1 on success, (or type/value if extracting single value) # Notes: Updates DataPos in dirInfo if extracting single value sub ProcessMeta($$$;$) { my ($et, $dirInfo, $tagTablePtr, $single) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos}; my $dirLen = $$dirInfo{DirLen} || length($$dataPt); my $pos = $$dirInfo{Pos} || 0; my ($type, $val, $rec); $et->VerboseDir('Meta') unless $single; Record: for ($rec=0; ; ++$rec) { last if $pos >= $dirLen; $type = ord(substr($$dataPt, $pos)); ++$pos; if ($type == 0x00 or $type == 0x0b) { # double or date last if $pos + 8 > $dirLen; $val = GetDouble($dataPt, $pos); $pos += 8; if ($type == 0x0b) { # date $val /= 1000; # convert to seconds my $frac = $val - int($val); # fractional seconds # get time zone last if $pos + 2 > $dirLen; my $tz = Get16s($dataPt, $pos); $pos += 2; # construct date/time string $val = Image::ExifTool::ConvertUnixTime(int($val)); if ($frac) { $frac = sprintf('%.6f', $frac); $frac =~ s/(^0|0+$)//g; $val .= $frac; } # add timezone if ($tz < 0) { $val .= '-'; $tz *= -1; } else { $val .= '+'; } $val .= sprintf('%.2d:%.2d', int($tz/60), $tz%60); } } elsif ($type == 0x01) { # boolean last if $pos + 1 > $dirLen; $val = Get8u($dataPt, $pos); $val = { 0 => 'No', 1 => 'Yes' }->{$val} if $val < 2; ++$pos; } elsif ($type == 0x02) { # string last if $pos + 2 > $dirLen; my $len = Get16u($dataPt, $pos); last if $pos + 2 + $len > $dirLen; $val = substr($$dataPt, $pos + 2, $len); $pos += 2 + $len; } elsif ($isStruct{$type}) { # object, mixed array or typed object $et->VPrint(1, " + [$amfType[$type]]\n"); my $getName; $val = ''; # dummy value if ($type == 0x08) { # mixed array # skip last array index for mixed array last if $pos + 4 > $dirLen; $pos += 4; } elsif ($type == 0x10) { # typed object $getName = 1; } for (;;) { # get tag ID (or typed object name) last Record if $pos + 2 > $dirLen; my $len = Get16u($dataPt, $pos); if ($pos + 2 + $len > $dirLen) { $et->Warn("Truncated $amfType[$type] record"); last Record; } my $tag = substr($$dataPt, $pos + 2, $len); $pos += 2 + $len; # first string of a typed object is the object name if ($getName) { $et->VPrint(1," | (object name '$tag')\n"); undef $getName; next; # (ignore name for now) } my $subTablePtr = $tagTablePtr; my $tagInfo = $$subTablePtr{$tag}; # switch to subdirectory table if necessary if ($tagInfo and $$tagInfo{SubDirectory}) { my $subTable = $tagInfo->{SubDirectory}->{TagTable}; # descend into Flash SubDirectory if ($subTable =~ /^Image::ExifTool::Flash::/) { $tag = $$tagInfo{Name}; # use our name for the tag $subTablePtr = GetTagTable($subTable); } } # get object value my $valPos = $pos + 1; $$dirInfo{Pos} = $pos; my $structName = $$dirInfo{StructName}; # add structure name to start of tag name $tag = $structName . ucfirst($tag) if defined $structName; $$dirInfo{StructName} = $tag; # set new structure name my ($t, $v) = ProcessMeta($et, $dirInfo, $subTablePtr, 1); $$dirInfo{StructName} = $structName;# restore original structure name $pos = $$dirInfo{Pos}; # update to new position in packet # all done if this value contained tags last Record unless defined $t and defined $v; next if $isStruct{$t}; # already handled tags in sub-structures next if ref($v) eq 'ARRAY' and not @$v; # ignore empty arrays last if $t == 0x09; # (end of object) if (not $$subTablePtr{$tag} and $tag =~ /^\w+$/) { AddTagToTable($subTablePtr, $tag, { Name => ucfirst($tag) }); $et->VPrint(1, " | (adding $tag)\n"); } $et->HandleTag($subTablePtr, $tag, $v, DataPt => $dataPt, DataPos => $dataPos, Start => $valPos, Size => $pos - $valPos, Format => $amfType[$t] || sprintf('0x%x',$t), ); } # } elsif ($type == 0x04) { # movie clip (not supported) } elsif ($type == 0x05 or $type == 0x06 or $type == 0x09 or $type == 0x0d) { # null, undefined, dirLen of object, or unsupported $val = ''; } elsif ($type == 0x07) { # reference last if $pos + 2 > $dirLen; $val = Get16u($dataPt, $pos); $pos += 2; } elsif ($type == 0x0a) { # array last if $pos + 4 > $dirLen; my $num = Get32u($dataPt, $pos); $$dirInfo{Pos} = $pos + 4; my ($i, @vals); # add array index to compount tag name my $structName = $$dirInfo{StructName}; for ($i=0; $i<$num; ++$i) { $$dirInfo{StructName} = $structName . $i if defined $structName; my ($t, $v) = ProcessMeta($et, $dirInfo, $tagTablePtr, 1); last Record unless defined $v; # save value unless contained in a sub-structure push @vals, $v unless $isStruct{$t}; } $$dirInfo{StructName} = $structName; $pos = $$dirInfo{Pos}; $val = \@vals; } elsif ($type == 0x0c or $type == 0x0f) { # long string or XML last if $pos + 4 > $dirLen; my $len = Get32u($dataPt, $pos); last if $pos + 4 + $len > $dirLen; $val = substr($$dataPt, $pos + 4, $len); $pos += 4 + $len; # } elsif ($type == 0x0e) { # record set (not supported) # } elsif ($type == 0x11) { # AMF3 data (can't add support for this without a test sample) } else { my $t = $amfType[$type] || sprintf('type 0x%x',$type); $et->Warn("AMF $t record not yet supported"); undef $type; # (so we don't print another warning) last; # can't continue } last if $single; # all done if extracting single value unless ($isStruct{$type}) { # only process certain Meta packets if ($type == 0x02 and not $rec) { my $verb = $processMetaPacket{$val} ? 'processing' : 'ignoring'; $et->VPrint(0, " | ($verb $val information)\n"); last unless $processMetaPacket{$val}; } else { # give verbose indication if we ignore a lone value my $t = $amfType[$type] || sprintf('type 0x%x',$type); $et->VPrint(1, " | (ignored lone $t value '$val')\n"); } } } if (not defined $val and defined $type) { $et->Warn(sprintf("Truncated AMF record 0x%x",$type)); } return 1 unless $single; # all done $$dirInfo{Pos} = $pos; # update position return($type,$val); # return single type/value pair } #------------------------------------------------------------------------------ # Read information frame a Flash Video file # Inputs: 0) ExifTool object reference, 1) Directory information reference # Returns: 1 on success, 0 if this wasn't a valid Flash Video file sub ProcessFLV($$) { my ($et, $dirInfo) = @_; my $verbose = $et->Options('Verbose'); my $raf = $$dirInfo{RAF}; my $buff; $raf->Read($buff, 9) == 9 or return 0; $buff =~ /^FLV\x01/ or return 0; SetByteOrder('MM'); $et->SetFileType(); my ($flags, $offset) = unpack('x4CN', $buff); $raf->Seek($offset-9, 1) or return 1 if $offset > 9; $flags &= 0x05; # only look for audio/video my $found = 0; my $tagTablePtr = GetTagTable('Image::ExifTool::Flash::FLV'); for (;;) { $raf->Read($buff, 15) == 15 or last; my $len = unpack('x4N', $buff); my $type = $len >> 24; $len &= 0x00ffffff; my $tagInfo = $et->GetTagInfo($tagTablePtr, $type); if ($verbose > 1) { my $name = $tagInfo ? $$tagInfo{Name} : "type $type"; $et->VPrint(1, "FLV $name packet, len $len\n"); } undef $buff; if ($tagInfo and $$tagInfo{SubDirectory}) { my $mask = $$tagInfo{BitMask}; if ($mask) { # handle audio or video packet unless ($found & $mask) { $found |= $mask; $flags &= ~$mask; if ($len>=1 and $raf->Read($buff, 1) == 1) { $len -= 1; } else { $et->Warn("Bad $$tagInfo{Name} packet"); last; } } } elsif ($raf->Read($buff, $len) == $len) { $len = 0; } else { $et->Warn('Truncated Meta packet'); last; } } if (defined $buff) { $et->HandleTag($tagTablePtr, $type, undef, DataPt => \$buff, DataPos => $raf->Tell() - length($buff), ); } last unless $flags; $raf->Seek($len, 1) or last if $len; } return 1; } #------------------------------------------------------------------------------ # Found a Flash tag # Inputs: 0) ExifTool object ref, 1) tag name, 2) tag value sub FoundFlashTag($$$) { my ($et, $tag, $val) = @_; $et->HandleTag(\%Image::ExifTool::Flash::Main, $tag, $val); } #------------------------------------------------------------------------------ # Read data from possibly compressed file # Inputs: 0) RAF reference, 1) data buffer, 2) bytes to read, 2) compressed flag # Returns: number of bytes read (may be greater than requested bytes if compressed) # - concatenates data to current buffer # - updates compressed flag with reference to inflate object for future calls # (or sets to error message and returns zero on error) sub ReadCompressed($$$$) { my ($raf, $len, $inflate) = ($_[0], $_[2], $_[3]); my $buff; unless ($raf->Read($buff, $len)) { $_[3] = 'Error reading file'; return 0; } # uncompress if necessary if ($inflate) { unless (ref $inflate) { unless (eval { require Compress::Zlib }) { $_[3] = 'Install Compress::Zlib to extract compressed information'; return 0; } $inflate = Compress::Zlib::inflateInit(); unless ($inflate) { $_[3] = 'Error initializing inflate for Flash data'; return 0; } $_[3] = $inflate; # pass inflate object back to caller } my $tmp = $buff; $buff = ''; # read 64 more bytes at a time and inflate until we get enough uncompressed data for (;;) { my ($dat, $stat) = $inflate->inflate($tmp); if ($stat == Compress::Zlib::Z_STREAM_END() or $stat == Compress::Zlib::Z_OK()) { $buff .= $dat; # add inflated data to buffer last if length $buff >= $len or $stat == Compress::Zlib::Z_STREAM_END(); $raf->Read($tmp,64) or last; # must read a bit more data } else { $buff = ''; last; } } $_[3] = 'Error inflating compressed Flash data' unless length $buff; } $_[1] = defined $_[1] ? $_[1] . $buff : $buff; return length $buff; } #------------------------------------------------------------------------------ # Read information frame a Flash file # Inputs: 0) ExifTool object reference, 1) Directory information reference # Returns: 1 on success, 0 if this wasn't a valid Flash file sub ProcessSWF($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $hasMeta); $raf->Read($buff, 8) == 8 or return 0; $buff =~ /^(F|C)WS([^\0])/ or return 0; my ($compressed, $vers) = ($1 eq 'C' ? 1 : 0, ord($2)); SetByteOrder('II'); $et->SetFileType(); GetTagTable('Image::ExifTool::Flash::Main'); # make sure table is initialized FoundFlashTag($et, FlashVersion => $vers); FoundFlashTag($et, Compressed => $compressed); # read the next 64 bytes of the file (and inflate if necessary) $buff = ''; unless (ReadCompressed($raf, $buff, 64, $compressed)) { $et->Warn($compressed) if $compressed; return 1; } # unpack elements of bit-packed Flash Rect structure my $nBits = unpack('C', $buff) >> 3; # bits in x1,x2,y1,y2 elements my $totBits = 5 + $nBits * 4; # total bits in Rect structure my $nBytes = int(($totBits + 7) / 8); # byte length of Rect structure if (length $buff < $nBytes + 4) { $et->Warn('Truncated Flash file'); return 1; } my $bits = unpack("B$totBits", $buff); # isolate Rect elements and convert from ASCII bit strings to integers my @vals = unpack('x5' . "a$nBits" x 4, $bits); # (do conversion the hard way because oct("0b$val") requires Perl 5.6) map { $_ = unpack('N', pack('B32', '0' x (32 - length $_) . $_)) } @vals; # calculate and store ImageWidth/Height FoundFlashTag($et, ImageWidth => ($vals[1] - $vals[0]) / 20); FoundFlashTag($et, ImageHeight => ($vals[3] - $vals[2]) / 20); # get frame rate and count @vals = unpack("x${nBytes}v2", $buff); FoundFlashTag($et, FrameRate => $vals[0] / 256); FoundFlashTag($et, FrameCount => $vals[1]); FoundFlashTag($et, Duration => $vals[1] * 256 / $vals[0]) if $vals[0]; # scan through the tags to find FlashAttributes and XMP $buff = substr($buff, $nBytes + 4); for (;;) { my $buffLen = length $buff; last if $buffLen < 2; my $code = Get16u(\$buff, 0); my $pos = 2; my $tag = $code >> 6; my $size = $code & 0x3f; $et->VPrint(1, "SWF tag $tag ($size bytes):\n"); last unless $tag == 69 or $tag == 77 or $hasMeta; # read enough to get a complete short record if ($pos + $size > $buffLen) { # (read 2 extra bytes if available to get next tag word) unless (ReadCompressed($raf, $buff, $size + 2, $compressed)) { $et->Warn($compressed) if $compressed; return 1; } $buffLen = length $buff; last if $pos + $size > $buffLen; } # read extended record if necessary if ($size == 0x3f) { last if $pos + 4 > $buffLen; $size = Get32u(\$buff, $pos); $pos += 4; last if $size > 1000000; # don't read anything huge if ($pos + $size > $buffLen) { unless (ReadCompressed($raf, $buff, $size + 2, $compressed)) { $et->Warn($compressed) if $compressed; return 1; } $buffLen = length $buff; last if $pos + $size > $buffLen; } $et->VPrint(1, " [extended size $size bytes]\n"); } if ($tag == 69) { # FlashAttributes last unless $size; my $flags = Get8u(\$buff, $pos); FoundFlashTag($et, $tag => $flags); last unless $flags & 0x10; # only continue if we have metadata (XMP) $hasMeta = 1; } elsif ($tag == 77) { # Metadata my $val = substr($buff, $pos, $size); FoundFlashTag($et, $tag => $val); last; } last if $pos + 2 > $buffLen; $buff = substr($buff, $pos); # remove everything before the next tag } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::Flash - Read Shockwave Flash meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read SWF (Shockwave Flash) and FLV (Flash Video) files. =head1 NOTES Flash Video AMF3 support has not yet been added because I haven't yet found a FLV file containing AMF3 information. If someone sends me a sample then I will add AMF3 support. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.the-labs.com/MacromediaFlash/SWF-Spec/SWFfileformat.html> =item L<http://sswf.sourceforge.net/SWFalexref.html> =item L<http://osflash.org/flv/> =item L<http://www.irisa.fr/texmex/people/dufouil/ffmpegdoxy/flv_8h.html> =item L<http://help.adobe.com/en_US/FlashMediaServer/3.5_Deving/WS5b3ccc516d4fbf351e63e3d11a0773d56e-7ff6.html> =item L<http://www.adobe.com/devnet/swf/pdf/swf_file_format_spec_v9.pdf> =item L<http://www.adobe.com/devnet/flv/pdf/video_file_format_spec_v10.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Flash Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��Image-ExifTool-10.10/lib/Image/ExifTool/FlashPix.pm�������������������������������������������������000644 �000765 �000024 �00000214315 12642461277 022001� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: FlashPix.pm # # Description: Read FlashPix meta information # # Revisions: 05/29/2006 - P. Harvey Created # # References: 1) http://www.exif.org/Exif2-2.PDF # 2) http://www.graphcomp.com/info/specs/livepicture/fpx.pdf # 3) http://search.cpan.org/~jdb/libwin32/ # 4) http://msdn.microsoft.com/en-us/library/aa380374.aspx #------------------------------------------------------------------------------ package Image::ExifTool::FlashPix; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; use Image::ExifTool::ASF; # for GetGUID() $VERSION = '1.26'; sub ProcessFPX($$); sub ProcessFPXR($$$); sub ProcessProperties($$$); sub ReadFPXValue($$$$$;$$); sub ProcessHyperlinks($$); sub ProcessContents($$$); sub SetDocNum($$;$$$); # sector type constants sub HDR_SIZE () { 512; } sub DIF_SECT () { 0xfffffffc; } sub FAT_SECT () { 0xfffffffd; } sub END_OF_CHAIN () { 0xfffffffe; } sub FREE_SECT () { 0xffffffff; } # format flags sub VT_VECTOR () { 0x1000; } sub VT_ARRAY () { 0x2000; } sub VT_BYREF () { 0x4000; } sub VT_RESERVED () { 0x8000; } # other constants sub VT_VARIANT () { 12; } sub VT_LPSTR () { 30; } # list of OLE format codes (unsupported codes commented out) my %oleFormat = ( 0 => undef, # VT_EMPTY 1 => undef, # VT_NULL 2 => 'int16s', # VT_I2 3 => 'int32s', # VT_I4 4 => 'float', # VT_R4 5 => 'double', # VT_R8 6 => undef, # VT_CY 7 => 'VT_DATE', # VT_DATE (double, number of days since Dec 30, 1899) 8 => 'VT_BSTR', # VT_BSTR (int32u count, followed by binary string) # 9 => 'VT_DISPATCH', 10 => 'int32s', # VT_ERROR 11 => 'int16s', # VT_BOOL 12 => 'VT_VARIANT', # VT_VARIANT # 13 => 'VT_UNKNOWN', # 14 => 'VT_DECIMAL', 16 => 'int8s', # VT_I1 17 => 'int8u', # VT_UI1 18 => 'int16u', # VT_UI2 19 => 'int32u', # VT_UI4 20 => 'int64s', # VT_I8 21 => 'int64u', # VT_UI8 # 22 => 'VT_INT', # 23 => 'VT_UINT', # 24 => 'VT_VOID', # 25 => 'VT_HRESULT', # 26 => 'VT_PTR', # 27 => 'VT_SAFEARRAY', # 28 => 'VT_CARRAY', # 29 => 'VT_USERDEFINED', 30 => 'VT_LPSTR', # VT_LPSTR (int32u count, followed by string) 31 => 'VT_LPWSTR', # VT_LPWSTR (int32u word count, followed by Unicode string) 64 => 'VT_FILETIME',# VT_FILETIME (int64u, 100 ns increments since Jan 1, 1601) 65 => 'VT_BLOB', # VT_BLOB # 66 => 'VT_STREAM', # 67 => 'VT_STORAGE', # 68 => 'VT_STREAMED_OBJECT', # 69 => 'VT_STORED_OBJECT', # 70 => 'VT_BLOB_OBJECT', 71 => 'VT_CF', # VT_CF 72 => 'VT_CLSID', # VT_CLSID ); # OLE flag codes (high nibble of property type) my %oleFlags = ( 0x1000 => 'VT_VECTOR', 0x2000 => 'VT_ARRAY', # not yet supported 0x4000 => 'VT_BYREF', # ditto 0x8000 => 'VT_RESERVED', ); # byte sizes for supported VT_* format and flag types my %oleFormatSize = ( VT_DATE => 8, VT_BSTR => 4, # (+ string length) VT_VARIANT => 4, # (+ data length) VT_LPSTR => 4, # (+ string length) VT_LPWSTR => 4, # (+ string character length) VT_FILETIME => 8, VT_BLOB => 4, # (+ data length) VT_CF => 4, # (+ data length) VT_CLSID => 16, VT_VECTOR => 4, # (+ vector elements) ); # names for each type of directory entry my @dirEntryType = qw(INVALID STORAGE STREAM LOCKBYTES PROPERTY ROOT); # list of code pages used by Microsoft # (ref http://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx) my %codePage = ( 037 => 'IBM EBCDIC US-Canada', 437 => 'DOS United States', 500 => 'IBM EBCDIC International', 708 => 'Arabic (ASMO 708)', 709 => 'Arabic (ASMO-449+, BCON V4)', 710 => 'Arabic - Transparent Arabic', 720 => 'DOS Arabic (Transparent ASMO)', 737 => 'DOS Greek (formerly 437G)', 775 => 'DOS Baltic', 850 => 'DOS Latin 1 (Western European)', 852 => 'DOS Latin 2 (Central European)', 855 => 'DOS Cyrillic (primarily Russian)', 857 => 'DOS Turkish', 858 => 'DOS Multilingual Latin 1 with Euro', 860 => 'DOS Portuguese', 861 => 'DOS Icelandic', 862 => 'DOS Hebrew', 863 => 'DOS French Canadian', 864 => 'DOS Arabic', 865 => 'DOS Nordic', 866 => 'DOS Russian (Cyrillic)', 869 => 'DOS Modern Greek', 870 => 'IBM EBCDIC Multilingual/ROECE (Latin 2)', 874 => 'Windows Thai (same as 28605, ISO 8859-15)', 875 => 'IBM EBCDIC Greek Modern', 932 => 'Windows Japanese (Shift-JIS)', 936 => 'Windows Simplified Chinese (PRC, Singapore)', 949 => 'Windows Korean (Unified Hangul Code)', 950 => 'Windows Traditional Chinese (Taiwan)', 1026 => 'IBM EBCDIC Turkish (Latin 5)', 1047 => 'IBM EBCDIC Latin 1/Open System', 1140 => 'IBM EBCDIC US-Canada with Euro', 1141 => 'IBM EBCDIC Germany with Euro', 1142 => 'IBM EBCDIC Denmark-Norway with Euro', 1143 => 'IBM EBCDIC Finland-Sweden with Euro', 1144 => 'IBM EBCDIC Italy with Euro', 1145 => 'IBM EBCDIC Latin America-Spain with Euro', 1146 => 'IBM EBCDIC United Kingdom with Euro', 1147 => 'IBM EBCDIC France with Euro', 1148 => 'IBM EBCDIC International with Euro', 1149 => 'IBM EBCDIC Icelandic with Euro', 1200 => 'Unicode UTF-16, little endian', 1201 => 'Unicode UTF-16, big endian', 1250 => 'Windows Latin 2 (Central European)', 1251 => 'Windows Cyrillic', 1252 => 'Windows Latin 1 (Western European)', 1253 => 'Windows Greek', 1254 => 'Windows Turkish', 1255 => 'Windows Hebrew', 1256 => 'Windows Arabic', 1257 => 'Windows Baltic', 1258 => 'Windows Vietnamese', 1361 => 'Korean (Johab)', 10000 => 'Mac Roman (Western European)', 10001 => 'Mac Japanese', 10002 => 'Mac Traditional Chinese', 10003 => 'Mac Korean', 10004 => 'Mac Arabic', 10005 => 'Mac Hebrew', 10006 => 'Mac Greek', 10007 => 'Mac Cyrillic', 10008 => 'Mac Simplified Chinese', 10010 => 'Mac Romanian', 10017 => 'Mac Ukrainian', 10021 => 'Mac Thai', 10029 => 'Mac Latin 2 (Central European)', 10079 => 'Mac Icelandic', 10081 => 'Mac Turkish', 10082 => 'Mac Croatian', 12000 => 'Unicode UTF-32, little endian', 12001 => 'Unicode UTF-32, big endian', 20000 => 'CNS Taiwan', 20001 => 'TCA Taiwan', 20002 => 'Eten Taiwan', 20003 => 'IBM5550 Taiwan', 20004 => 'TeleText Taiwan', 20005 => 'Wang Taiwan', 20105 => 'IA5 (IRV International Alphabet No. 5, 7-bit)', 20106 => 'IA5 German (7-bit)', 20107 => 'IA5 Swedish (7-bit)', 20108 => 'IA5 Norwegian (7-bit)', 20127 => 'US-ASCII (7-bit)', 20261 => 'T.61', 20269 => 'ISO 6937 Non-Spacing Accent', 20273 => 'IBM EBCDIC Germany', 20277 => 'IBM EBCDIC Denmark-Norway', 20278 => 'IBM EBCDIC Finland-Sweden', 20280 => 'IBM EBCDIC Italy', 20284 => 'IBM EBCDIC Latin America-Spain', 20285 => 'IBM EBCDIC United Kingdom', 20290 => 'IBM EBCDIC Japanese Katakana Extended', 20297 => 'IBM EBCDIC France', 20420 => 'IBM EBCDIC Arabic', 20423 => 'IBM EBCDIC Greek', 20424 => 'IBM EBCDIC Hebrew', 20833 => 'IBM EBCDIC Korean Extended', 20838 => 'IBM EBCDIC Thai', 20866 => 'Russian/Cyrillic (KOI8-R)', 20871 => 'IBM EBCDIC Icelandic', 20880 => 'IBM EBCDIC Cyrillic Russian', 20905 => 'IBM EBCDIC Turkish', 20924 => 'IBM EBCDIC Latin 1/Open System with Euro', 20932 => 'Japanese (JIS 0208-1990 and 0121-1990)', 20936 => 'Simplified Chinese (GB2312)', 20949 => 'Korean Wansung', 21025 => 'IBM EBCDIC Cyrillic Serbian-Bulgarian', 21027 => 'Extended Alpha Lowercase (deprecated)', 21866 => 'Ukrainian/Cyrillic (KOI8-U)', 28591 => 'ISO 8859-1 Latin 1 (Western European)', 28592 => 'ISO 8859-2 (Central European)', 28593 => 'ISO 8859-3 Latin 3', 28594 => 'ISO 8859-4 Baltic', 28595 => 'ISO 8859-5 Cyrillic', 28596 => 'ISO 8859-6 Arabic', 28597 => 'ISO 8859-7 Greek', 28598 => 'ISO 8859-8 Hebrew (Visual)', 28599 => 'ISO 8859-9 Turkish', 28603 => 'ISO 8859-13 Estonian', 28605 => 'ISO 8859-15 Latin 9', 29001 => 'Europa 3', 38598 => 'ISO 8859-8 Hebrew (Logical)', 50220 => 'ISO 2022 Japanese with no halfwidth Katakana (JIS)', 50221 => 'ISO 2022 Japanese with halfwidth Katakana (JIS-Allow 1 byte Kana)', 50222 => 'ISO 2022 Japanese JIS X 0201-1989 (JIS-Allow 1 byte Kana - SO/SI)', 50225 => 'ISO 2022 Korean', 50227 => 'ISO 2022 Simplified Chinese', 50229 => 'ISO 2022 Traditional Chinese', 50930 => 'EBCDIC Japanese (Katakana) Extended', 50931 => 'EBCDIC US-Canada and Japanese', 50933 => 'EBCDIC Korean Extended and Korean', 50935 => 'EBCDIC Simplified Chinese Extended and Simplified Chinese', 50936 => 'EBCDIC Simplified Chinese', 50937 => 'EBCDIC US-Canada and Traditional Chinese', 50939 => 'EBCDIC Japanese (Latin) Extended and Japanese', 51932 => 'EUC Japanese', 51936 => 'EUC Simplified Chinese', 51949 => 'EUC Korean', 51950 => 'EUC Traditional Chinese', 52936 => 'HZ-GB2312 Simplified Chinese', 54936 => 'Windows XP and later: GB18030 Simplified Chinese (4 byte)', 57002 => 'ISCII Devanagari', 57003 => 'ISCII Bengali', 57004 => 'ISCII Tamil', 57005 => 'ISCII Telugu', 57006 => 'ISCII Assamese', 57007 => 'ISCII Oriya', 57008 => 'ISCII Kannada', 57009 => 'ISCII Malayalam', 57010 => 'ISCII Gujarati', 57011 => 'ISCII Punjabi', 65000 => 'Unicode (UTF-7)', 65001 => 'Unicode (UTF-8)', ); # test for file extensions which may be variants of the FPX format # (have seen one password-protected DOCX file that is FPX-like, so assume # that all the rest could be as well) my %fpxFileType = ( DOC => 1, DOCX => 1, DOCM => 1, DOT => 1, DOTX => 1, DOTM => 1, POT => 1, POTX => 1, POTM => 1, PPS => 1, PPSX => 1, PPSM => 1, PPT => 1, PPTX => 1, PPTM => 1, THMX => 1, XLA => 1, XLAM => 1, XLS => 1, XLSX => 1, XLSM => 1, XLSB => 1, XLT => 1, XLTX => 1, XLTM => 1, # non MSOffice types FLA => 1, VSD => 1, ); %Image::ExifTool::FlashPix::Main = ( PROCESS_PROC => \&ProcessFPXR, GROUPS => { 2 => 'Image' }, NOTES => q{ The FlashPix file format, introduced in 1996, was developed by Kodak, Hewlett-Packard and Microsoft. Internally the FPX file structure mimics that of an old DOS disk with fixed-sized "sectors" (usually 512 bytes) and a "file allocation table" (FAT). No wonder this image format never became popular. However, some of the structures used in FlashPix streams are part of the EXIF specification, and are still being used in the APP2 FPXR segment of JPEG images by some digital cameras from manufacturers such as FujiFilm, Hewlett-Packard, Kodak and Sanyo. ExifTool extracts FlashPix information from both FPX images and the APP2 FPXR segment of JPEG images. As well, FlashPix information is extracted from DOC, PPT, XLS (Microsoft Word, PowerPoint and Excel) documents, VSD (Microsoft Visio) drawings, and FLA (Macromedia/Adobe Flash project) files since these are based on the same file format as FlashPix (the Windows Compound Binary File format). See L<http://graphcomp.com/info/specs/livepicture/fpx.pdf> for the FlashPix specification. }, "\x05SummaryInformation" => { Name => 'SummaryInfo', SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::SummaryInfo', }, }, "\x05DocumentSummaryInformation" => { Name => 'DocumentInfo', Multi => 1, # flag to process UserDefined information after this SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::DocumentInfo', }, }, "\x01CompObj" => { Name => 'CompObj', SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::CompObj', DirStart => 0x1c, # skip stream header }, }, "\x05Image Info" => { Name => 'ImageInfo', SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::ImageInfo', }, }, "\x05Image Contents" => { Name => 'Image', SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::Image', }, }, "Contents" => { Name => 'Contents', Notes => 'found in FLA files; may contain XMP', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main', ProcessProc => \&ProcessContents, }, }, "ICC Profile 0001" => { Name => 'ICC_Profile', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main', DirStart => 0x1c, # skip stream header }, }, "\x05Extension List" => { Name => 'Extensions', SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::Extensions', }, }, 'Subimage 0000 Header' => { Name => 'SubimageHdr', SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::SubimageHdr', DirStart => 0x1c, # skip stream header }, }, # 'Subimage 0000 Data' "\x05Data Object" => { # plus instance number (eg. " 000000") Name => 'DataObject', SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::DataObject', }, }, # "\x05Data Object Store" => { # plus instance number (eg. " 000000") "\x05Transform" => { # plus instance number (eg. " 000000") Name => 'Transform', SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::Transform', }, }, "\x05Operation" => { # plus instance number (eg. " 000000") Name => 'Operation', SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::Operation', }, }, "\x05Global Info" => { Name => 'GlobalInfo', SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::GlobalInfo', }, }, "\x05Screen Nail" => { # plus class ID (eg. "_bd0100609719a180") Name => 'ScreenNail', Groups => { 2 => 'Other' }, # strip off stream header ValueConv => 'length($val) > 0x1c and $val = substr($val, 0x1c); \$val', }, "\x05Audio Info" => { Name => 'AudioInfo', SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::AudioInfo', }, }, 'Audio Stream' => { # plus instance number (eg. " 000000") Name => 'AudioStream', Groups => { 2 => 'Audio' }, # strip off stream header ValueConv => 'length($val) > 0x1c and $val = substr($val, 0x1c); \$val', }, 'Current User' => { #PH Name => 'CurrentUser', # not sure what the rest of this data is, but extract ASCII name from it - PH ValueConv => q{ return undef if length $val < 12; my ($size,$pos) = unpack('x4VV', $val); my $len = $size - $pos - 4; return undef if $len < 0 or length $val < $size + 8; return substr($val, 8 + $pos, $len); }, }, Preview => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Binary => 1, Notes => 'written by some FujiFilm models', # skip 47-byte Fuji header RawConv => q{ return undef unless length $val > 47; $val = substr($val, 47); return $val =~ /^\xff\xd8\xff/ ? $val : undef; }, }, Property => { Name => 'PreviewInfo', SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::PreviewInfo', ByteOrder => 'BigEndian', }, }, ); # Summary Information properties %Image::ExifTool::FlashPix::SummaryInfo = ( PROCESS_PROC => \&ProcessProperties, GROUPS => { 2 => 'Document' }, NOTES => q{ The Dictionary, CodePage and LocalIndicator tags are common to all FlashPix property tables, even though they are only listed in the SummaryInfo table. }, 0x00 => { Name => 'Dictionary', Groups => { 2 => 'Other' }, Binary => 1 }, 0x01 => { Name => 'CodePage', Groups => { 2 => 'Other' }, PrintConv => \%codePage, }, 0x02 => 'Title', 0x03 => 'Subject', 0x04 => { Name => 'Author', Groups => { 2 => 'Author' } }, 0x05 => 'Keywords', 0x06 => 'Comments', 0x07 => 'Template', 0x08 => { Name => 'LastModifiedBy', Groups => { 2 => 'Author' } }, 0x09 => 'RevisionNumber', 0x0a => { Name => 'TotalEditTime', PrintConv => 'ConvertTimeSpan($val)' }, # (in sec) 0x0b => { Name => 'LastPrinted', Groups => { 2 => 'Time' } }, 0x0c => { Name => 'CreateDate', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, 0x0d => { Name => 'ModifyDate', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, 0x0e => 'Pages', 0x0f => 'Words', 0x10 => 'Characters', 0x11 => { Name => 'ThumbnailClip', # (not a displayable format, so not in the "Preview" group) Binary => 1, }, 0x12 => { Name => 'Software', RawConv => '$$self{Software} = $val', # (use to determine file type) }, 0x13 => { Name => 'Security', # see http://msdn.microsoft.com/en-us/library/aa379255(VS.85).aspx PrintConv => { 0 => 'None', 1 => 'Password protected', 2 => 'Read-only recommended', 4 => 'Read-only enforced', 8 => 'Locked for annotations', }, }, 0x80000000 => { Name => 'LocaleIndicator', Groups => { 2 => 'Other' } }, ); # Document Summary Information properties (ref 4) %Image::ExifTool::FlashPix::DocumentInfo = ( PROCESS_PROC => \&ProcessProperties, GROUPS => { 2 => 'Document' }, NOTES => q{ The DocumentSummaryInformation property set includes a UserDefined property set for which only the Hyperlinks and HyperlinkBase tags are pre-defined. However, ExifTool will also extract any other information found in the UserDefined properties. }, 0x02 => 'Category', 0x03 => 'PresentationTarget', 0x04 => 'Bytes', 0x05 => 'Lines', 0x06 => 'Paragraphs', 0x07 => 'Slides', 0x08 => 'Notes', 0x09 => 'HiddenSlides', 0x0a => 'MMClips', 0x0b => { Name => 'ScaleCrop', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, 0x0c => 'HeadingPairs', 0x0d => 'TitleOfParts', 0x0e => 'Manager', 0x0f => 'Company', 0x10 => { Name => 'LinksUpToDate', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, 0x11 => 'CharCountWithSpaces', # 0x12 ? 0x13 => { #PH (unconfirmed) Name => 'SharedDoc', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, # 0x14 ? # 0x15 ? 0x16 => { Name => 'HyperlinksChanged', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, 0x17 => { #PH (unconfirmed handling of lower 16 bits) Name => 'AppVersion', ValueConv => 'sprintf("%d.%.4d",$val >> 16, $val & 0xffff)', }, '_PID_LINKBASE' => { Name => 'HyperlinkBase', ValueConv => '$self->Decode($val, "UCS2","II")', }, '_PID_HLINKS' => { Name => 'Hyperlinks', RawConv => \&ProcessHyperlinks, }, ); # Image Information properties %Image::ExifTool::FlashPix::ImageInfo = ( PROCESS_PROC => \&ProcessProperties, GROUPS => { 2 => 'Image' }, 0x21000000 => { Name => 'FileSource', PrintConv => { 1 => 'Film Scanner', 2 => 'Reflection Print Scanner', 3 => 'Digital Camera', 4 => 'Video Capture', 5 => 'Computer Graphics', }, }, 0x21000001 => { Name => 'SceneType', PrintConv => { 1 => 'Original Scene', 2 => 'Second Generation Scene', 3 => 'Digital Scene Generation', }, }, 0x21000002 => 'CreationPathVector', 0x21000003 => 'SoftwareRelease', 0x21000004 => 'UserDefinedID', 0x21000005 => 'SharpnessApproximation', 0x22000000 => { Name => 'Copyright', Groups => { 2 => 'Author' } }, 0x22000001 => { Name => 'OriginalImageBroker', Groups => { 2 => 'Author' } }, 0x22000002 => { Name => 'DigitalImageBroker', Groups => { 2 => 'Author' } }, 0x22000003 => { Name => 'Authorship', Groups => { 2 => 'Author' } }, 0x22000004 => { Name => 'IntellectualPropertyNotes', Groups => { 2 => 'Author' } }, 0x23000000 => { Name => 'TestTarget', PrintConv => { 1 => 'Color Chart', 2 => 'Gray Card', 3 => 'Grayscale', 4 => 'Resolution Chart', 5 => 'Inch Scale', 6 => 'Centimeter Scale', 7 => 'Millimeter Scale', 8 => 'Micrometer Scale', }, }, 0x23000002 => 'GroupCaption', 0x23000003 => 'CaptionText', 0x23000004 => 'People', 0x23000007 => 'Things', 0x2300000A => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, 0x2300000B => 'Events', 0x2300000C => 'Places', 0x2300000F => 'ContentDescriptionNotes', 0x24000000 => { Name => 'Make', Groups => { 2 => 'Camera' } }, 0x24000001 => { Name => 'Model', Description => 'Camera Model Name', Groups => { 2 => 'Camera' }, }, 0x24000002 => { Name => 'SerialNumber', Groups => { 2 => 'Camera' } }, 0x25000000 => { Name => 'CreateDate', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, 0x25000001 => { Name => 'ExposureTime', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x25000002 => { Name => 'FNumber', PrintConv => 'sprintf("%.1f",$val)', }, 0x25000003 => { Name => 'ExposureProgram', Groups => { 2 => 'Camera' }, # use PrintConv of corresponding EXIF tag PrintConv => $Image::ExifTool::Exif::Main{0x8822}->{PrintConv}, }, 0x25000004 => 'BrightnessValue', 0x25000005 => 'ExposureCompensation', 0x25000006 => { Name => 'SubjectDistance', Groups => { 2 => 'Camera' }, PrintConv => 'sprintf("%.3f m", $val)', }, 0x25000007 => { Name => 'MeteringMode', Groups => { 2 => 'Camera' }, PrintConv => $Image::ExifTool::Exif::Main{0x9207}->{PrintConv}, }, 0x25000008 => { Name => 'LightSource', Groups => { 2 => 'Camera' }, PrintConv => $Image::ExifTool::Exif::Main{0x9208}->{PrintConv}, }, 0x25000009 => { Name => 'FocalLength', Groups => { 2 => 'Camera' }, PrintConv => 'sprintf("%.1f mm",$val)', }, 0x2500000A => { Name => 'MaxApertureValue', Groups => { 2 => 'Camera' }, ValueConv => '2 ** ($val / 2)', PrintConv => 'sprintf("%.1f",$val)', }, 0x2500000B => { Name => 'Flash', Groups => { 2 => 'Camera' }, PrintConv => { 1 => 'No Flash', 2 => 'Flash Fired', }, }, 0x2500000C => { Name => 'FlashEnergy', Groups => { 2 => 'Camera' }, }, 0x2500000D => { Name => 'FlashReturn', Groups => { 2 => 'Camera' }, PrintConv => { 1 => 'Subject Outside Flash Range', 2 => 'Subject Inside Flash Range', }, }, 0x2500000E => { Name => 'BackLight', PrintConv => { 1 => 'Front Lit', 2 => 'Back Lit 1', 3 => 'Back Lit 2', }, }, 0x2500000F => { Name => 'SubjectLocation', Groups => { 2 => 'Camera' } }, 0x25000010 => 'ExposureIndex', 0x25000011 => { Name => 'SpecialEffectsOpticalFilter', PrintConv => { 1 => 'None', 2 => 'Colored', 3 => 'Diffusion', 4 => 'Multi-image', 5 => 'Polarizing', 6 => 'Split-field', 7 => 'Star', }, }, 0x25000012 => 'PerPictureNotes', 0x26000000 => { Name => 'SensingMethod', Groups => { 2 => 'Camera' }, PrintConv => $Image::ExifTool::Exif::Main{0x9217}->{PrintConv}, }, 0x26000001 => { Name => 'FocalPlaneXResolution', Groups => { 2 => 'Camera' } }, 0x26000002 => { Name => 'FocalPlaneYResolution', Groups => { 2 => 'Camera' } }, 0x26000003 => { Name => 'FocalPlaneResolutionUnit', Groups => { 2 => 'Camera' }, PrintConv => $Image::ExifTool::Exif::Main{0xa210}->{PrintConv}, }, 0x26000004 => 'SpatialFrequencyResponse', 0x26000005 => 'CFAPattern', 0x27000001 => { Name => 'FilmCategory', PrintConv => { 1 => 'Negative B&W', 2 => 'Negative Color', 3 => 'Reversal B&W', 4 => 'Reversal Color', 5 => 'Chromagenic', 6 => 'Internegative B&W', 7 => 'Internegative Color', }, }, 0x26000007 => 'ISO', 0x26000008 => 'Opto-ElectricConvFactor', 0x27000000 => 'FilmBrand', 0x27000001 => 'FilmCategory', 0x27000002 => 'FilmSize', 0x27000003 => 'FilmRollNumber', 0x27000004 => 'FilmFrameNumber', 0x29000000 => 'OriginalScannedImageSize', 0x29000001 => 'OriginalDocumentSize', 0x29000002 => { Name => 'OriginalMedium', PrintConv => { 1 => 'Continuous Tone Image', 2 => 'Halftone Image', 3 => 'Line Art', }, }, 0x29000003 => { Name => 'TypeOfOriginal', PrintConv => { 1 => 'B&W Print', 2 => 'Color Print', 3 => 'B&W Document', 4 => 'Color Document', }, }, 0x28000000 => 'ScannerMake', 0x28000001 => 'ScannerModel', 0x28000002 => 'ScannerSerialNumber', 0x28000003 => 'ScanSoftware', 0x28000004 => { Name => 'ScanSoftwareRevisionDate', Groups => { 2 => 'Time' } }, 0x28000005 => 'ServiceOrganizationName', 0x28000006 => 'ScanOperatorID', 0x28000008 => { Name => 'ScanDate', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, 0x28000009 => { Name => 'ModifyDate', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, 0x2800000A => 'ScannerPixelSize', ); # Image Contents properties %Image::ExifTool::FlashPix::Image = ( PROCESS_PROC => \&ProcessProperties, GROUPS => { 2 => 'Image' }, # VARS storage is used as a hash lookup for tagID's which aren't constant. # The key is a mask for significant bits of the tagID, and the value # is a lookup for tagID's for which this mask is valid. VARS => { # ID's are different for each subimage 0xff00ffff => { 0x02000000=>1, 0x02000001=>1, 0x02000002=>1, 0x02000003=>1, 0x02000004=>1, 0x02000005=>1, 0x02000006=>1, 0x02000007=>1, 0x03000001=>1, }, }, 0x01000000 => 'NumberOfResolutions', 0x01000002 => 'ImageWidth', # width of highest resolution image 0x01000003 => 'ImageHeight', 0x01000004 => 'DefaultDisplayHeight', 0x01000005 => 'DefaultDisplayWidth', 0x01000006 => { Name => 'DisplayUnits', PrintConv => { 0 => 'inches', 1 => 'meters', 2 => 'cm', 3 => 'mm', }, }, 0x02000000 => 'SubimageWidth', 0x02000001 => 'SubimageHeight', 0x02000002 => { Name => 'SubimageColor', # decode only component count and color space of first component ValueConv => 'sprintf("%.2x %.4x", unpack("x4vx4v",$val))', PrintConv => { '01 0000' => 'Opacity Only', '01 8000' => 'Opacity Only (uncalibrated)', '01 0001' => 'Monochrome', '01 8001' => 'Monochrome (uncalibrated)', '03 0002' => 'YCbCr', '03 8002' => 'YCbCr (uncalibrated)', '03 0003' => 'RGB', '03 8003' => 'RGB (uncalibrated)', '04 0002' => 'YCbCr with Opacity', '04 8002' => 'YCbCr with Opacity (uncalibrated)', '04 0003' => 'RGB with Opacity', '04 8003' => 'RGB with Opacity (uncalibrated)', }, }, 0x02000003 => { Name => 'SubimageNumericalFormat', PrintConv => { 17 => '8-bit, Unsigned', 18 => '16-bit, Unsigned', 19 => '32-bit, Unsigned', }, }, 0x02000004 => { Name => 'DecimationMethod', PrintConv => { 0 => 'None (Full-sized Image)', 8 => '8-point Prefilter', }, }, 0x02000005 => 'DecimationPrefilterWidth', 0x02000007 => 'SubimageICC_Profile', 0x03000001 => { Name => 'JPEGTables', Binary => 1 }, 0x03000002 => 'MaxJPEGTableIndex', ); # Extension List properties %Image::ExifTool::FlashPix::Extensions = ( PROCESS_PROC => \&ProcessProperties, GROUPS => { 2 => 'Other' }, VARS => { # ID's are different for each extension type 0x0000ffff => { 0x0001=>1, 0x0002=>1, 0x0003=>1, 0x0004=>1, 0x0005=>1, 0x0006=>1, 0x0007=>1, 0x1000=>1, 0x2000=>1, 0x2001=>1, 0x3000=>1, 0x4000=>1, }, 0x0000f00f => { 0x3001=>1, 0x3002=>1 }, }, 0x10000000 => 'UsedExtensionNumbers', 0x0001 => 'ExtensionName', 0x0002 => 'ExtensionClassID', 0x0003 => { Name => 'ExtensionPersistence', PrintConv => { 0 => 'Always Valid', 1 => 'Invalidated By Modification', 2 => 'Potentially Invalidated By Modification', }, }, 0x0004 => { Name => 'ExtensionCreateDate', Groups => { 2 => 'Time' } }, 0x0005 => { Name => 'ExtensionModifyDate', Groups => { 2 => 'Time' } }, 0x0006 => 'CreatingApplication', 0x0007 => 'ExtensionDescription', 0x1000 => 'Storage-StreamPathname', 0x2000 => 'FlashPixStreamPathname', 0x2001 => 'FlashPixStreamFieldOffset', 0x3000 => 'PropertySetPathname', 0x3001 => 'PropertySetIDCodes', 0x3002 => 'PropertyVectorElements', 0x4000 => 'SubimageResolutions', ); # Subimage Header tags %Image::ExifTool::FlashPix::SubimageHdr = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int32u', # 0 => 'HeaderLength', 1 => 'SubimageWidth', 2 => 'SubimageHeight', 3 => 'SubimageTileCount', 4 => 'SubimageTileWidth', 5 => 'SubimageTileHeight', 6 => 'NumChannels', # 7 => 'TileHeaderOffset', # 8 => 'TileHeaderLength', # ... followed by tile header table ); # Data Object properties %Image::ExifTool::FlashPix::DataObject = ( PROCESS_PROC => \&ProcessProperties, GROUPS => { 2 => 'Other' }, 0x00010000 => 'DataObjectID', 0x00010002 => 'LockedPropertyList', 0x00010003 => 'DataObjectTitle', 0x00010004 => 'LastModifier', 0x00010005 => 'RevisionNumber', 0x00010006 => { Name => 'DataCreateDate', Groups => { 2 => 'Time' } }, 0x00010007 => { Name => 'DataModifyDate', Groups => { 2 => 'Time' } }, 0x00010008 => 'CreatingApplication', 0x00010100 => { Name => 'DataObjectStatus', PrintConv => q{ ($val & 0x0000ffff ? 'Exists' : 'Does Not Exist') . ', ' . ($val & 0xffff0000 ? 'Not ' : '') . 'Purgeable' }, }, 0x00010101 => { Name => 'CreatingTransform', PrintConv => '$val ? $val : "Source Image"', }, 0x00010102 => 'UsingTransforms', 0x10000000 => 'CachedImageHeight', 0x10000001 => 'CachedImageWidth', ); # Transform properties %Image::ExifTool::FlashPix::Transform = ( PROCESS_PROC => \&ProcessProperties, GROUPS => { 2 => 'Other' }, 0x00010000 => 'TransformNodeID', 0x00010001 => 'OperationClassID', 0x00010002 => 'LockedPropertyList', 0x00010003 => 'TransformTitle', 0x00010004 => 'LastModifier', 0x00010005 => 'RevisionNumber', 0x00010006 => { Name => 'TransformCreateDate', Groups => { 2 => 'Time' } }, 0x00010007 => { Name => 'TransformModifyDate', Groups => { 2 => 'Time' } }, 0x00010008 => 'CreatingApplication', 0x00010100 => 'InputDataObjectList', 0x00010101 => 'OutputDataObjectList', 0x00010102 => 'OperationNumber', 0x10000000 => 'ResultAspectRatio', 0x10000001 => 'RectangleOfInterest', 0x10000002 => 'Filtering', 0x10000003 => 'SpatialOrientation', 0x10000004 => 'ColorTwistMatrix', 0x10000005 => 'ContrastAdjustment', ); # Operation properties %Image::ExifTool::FlashPix::Operation = ( PROCESS_PROC => \&ProcessProperties, 0x00010000 => 'OperationID', ); # Global Info properties %Image::ExifTool::FlashPix::GlobalInfo = ( PROCESS_PROC => \&ProcessProperties, 0x00010002 => 'LockedPropertyList', 0x00010003 => 'TransformedImageTitle', 0x00010004 => 'LastModifier', 0x00010100 => 'VisibleOutputs', 0x00010101 => 'MaximumImageIndex', 0x00010102 => 'MaximumTransformIndex', 0x00010103 => 'MaximumOperationIndex', ); # Audio Info properties %Image::ExifTool::FlashPix::AudioInfo = ( PROCESS_PROC => \&ProcessProperties, GROUPS => { 2 => 'Audio' }, ); # MacroMedia flash contents %Image::ExifTool::FlashPix::Contents = ( PROCESS_PROC => \&ProcessProperties, GROUPS => { 2 => 'Image' }, ); # CompObj tags %Image::ExifTool::FlashPix::CompObj = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Other' }, FORMAT => 'int32u', 0 => { Name => 'CompObjUserTypeLen' }, 1 => { Name => 'CompObjUserType', Format => 'string[$val{0}]', RawConv => '$$self{CompObjUserType} = $val', # (use to determine file type) }, ); # FujiFilm "Property" information (ref PH) %Image::ExifTool::FlashPix::PreviewInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, NOTES => 'Preview information written by some FujiFilm models.', FIRST_ENTRY => 0, # values are all constant for for my samples except the two decoded tags # 0x0000: 01 01 00 00 02 01 00 00 00 00 00 00 00 xx xx 01 # 0x0010: 01 00 00 00 00 00 00 xx xx 00 00 00 00 00 00 00 # 0x0020: 00 00 00 00 00 0x0d => { Name => 'PreviewImageWidth', Format => 'int16u', }, 0x17 => { Name => 'PreviewImageHeight', Format => 'int16u', }, ); # composite FlashPix tags %Image::ExifTool::FlashPix::Composite = ( GROUPS => { 2 => 'Image' }, PreviewImage => { Groups => { 2 => 'Preview' }, # extract JPEG preview from ScreenNail if possible Require => { 0 => 'ScreenNail', }, Binary => 1, RawConv => q{ return undef unless $val[0] =~ /\xff\xd8\xff/g; return substr($val[0], pos($val[0])-3); }, }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::FlashPix'); #------------------------------------------------------------------------------ # Process hyperlinks from PID_HYPERLINKS array # (ref http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/dnaro97ta/html/msdn_hyper97.asp) # Inputs: 0) value, 1) ExifTool ref # Returns: list of hyperlinks sub ProcessHyperlinks($$) { my ($val, $et) = @_; # process as an array of VT_VARIANT's my $dirEnd = length $val; return undef if $dirEnd < 4; my $num = Get32u(\$val, 0); my $valPos = 4; my ($i, @vals); for ($i=0; $i<$num; ++$i) { # read VT_BLOB entries as an array of VT_VARIANT's my $value = ReadFPXValue($et, \$val, $valPos, VT_VARIANT, $dirEnd); last unless defined $value; push @vals, $value; } # filter values to extract only the links my @links; for ($i=0; $i<@vals; $i+=6) { push @links, $vals[$i+4]; # get address $links[-1] .= '#' . $vals[$i+5] if length $vals[$i+5]; # add subaddress } return \@links; } #------------------------------------------------------------------------------ # Read FlashPix value # Inputs: 0) ExifTool ref, 1) data ref, 2) value offset, 3) FPX format number, # 4) end offset, 5) flag for no padding, 6) code page # Returns: converted value (or list of values in list context) and updates # value offset to end of value if successful, or returns undef on error sub ReadFPXValue($$$$$;$$) { my ($et, $dataPt, $valPos, $type, $dirEnd, $noPad, $codePage) = @_; my @vals; my $format = $oleFormat{$type & 0x0fff}; while ($format) { my $count = 1; # handle VT_VECTOR types my $flags = $type & 0xf000; if ($flags) { if ($flags == VT_VECTOR) { $noPad = 1; # values don't seem to be padded inside vectors my $size = $oleFormatSize{VT_VECTOR}; last if $valPos + $size > $dirEnd; $count = Get32u($dataPt, $valPos); push @vals, '' if $count == 0; # allow zero-element vector $valPos += 4; } else { # can't yet handle this property flag last; } } unless ($format =~ /^VT_/) { my $size = Image::ExifTool::FormatSize($format) * $count; last if $valPos + $size > $dirEnd; @vals = ReadValue($dataPt, $valPos, $format, $count, $size); # update position to end of value plus padding $valPos += ($count * $size + 3) & 0xfffffffc; last; } my $size = $oleFormatSize{$format}; my ($item, $val); for ($item=0; $item<$count; ++$item) { last if $valPos + $size > $dirEnd; if ($format eq 'VT_VARIANT') { my $subType = Get32u($dataPt, $valPos); $valPos += $size; $val = ReadFPXValue($et, $dataPt, $valPos, $subType, $dirEnd, $noPad, $codePage); last unless defined $val; push @vals, $val; next; # avoid adding $size to $valPos again } elsif ($format eq 'VT_FILETIME') { # convert from time in 100 ns increments to time in seconds $val = 1e-7 * Image::ExifTool::Get64u($dataPt, $valPos); # print as date/time if value is greater than one year (PH hack) my $secDay = 24 * 3600; if ($val > 365 * $secDay) { # shift from Jan 1, 1601 to Jan 1, 1970 my $unixTimeZero = 134774 * $secDay; $val -= $unixTimeZero; # there are a lot of bad programmers out there... my $sec100yr = 100 * 365 * $secDay; if ($val < 0 || $val > $sec100yr) { # some software writes the wrong byte order (but the proper word order) my @w = unpack("x${valPos}NN", $$dataPt); my $v2 = ($w[0] + $w[1] * 4294967296) * 1e-7 - $unixTimeZero; if ($v2 > 0 && $v2 < $sec100yr) { $val = $v2; # also check for wrong time base } elsif ($val < 0 && $val + $unixTimeZero > 0) { $val += $unixTimeZero; } } $val = Image::ExifTool::ConvertUnixTime($val); } } elsif ($format eq 'VT_DATE') { $val = Image::ExifTool::GetDouble($dataPt, $valPos); # shift zero from Dec 30, 1899 to Jan 1, 1970 and convert to secs $val = ($val - 25569) * 24 * 3600 if $val != 0; $val = Image::ExifTool::ConvertUnixTime($val); } elsif ($format =~ /STR$/) { my $len = Get32u($dataPt, $valPos); $len *= 2 if $format eq 'VT_LPWSTR'; # convert to byte count last if $valPos + $len + 4 > $dirEnd; $val = substr($$dataPt, $valPos + 4, $len); if ($format eq 'VT_LPWSTR') { # convert wide string from Unicode $val = $et->Decode($val, 'UCS2'); } elsif ($codePage) { my $charset = $Image::ExifTool::charsetName{"cp$codePage"}; if ($charset) { $val = $et->Decode($val, $charset); } elsif ($codePage eq 1200) { # UTF-16, little endian $val = $et->Decode(undef, 'UCS2', 'II'); } } $val =~ s/\0.*//s; # truncate at null terminator # update position for string length # (the spec states that strings should be padded to align # on even 32-bit boundaries, but this isn't always the case) $valPos += $noPad ? $len : ($len + 3) & 0xfffffffc; } elsif ($format eq 'VT_BLOB' or $format eq 'VT_CF') { my $len = Get32u($dataPt, $valPos); last if $valPos + $len + 4 > $dirEnd; $val = substr($$dataPt, $valPos + 4, $len); # update position for data length plus padding # (does this padding disappear in arrays too?) $valPos += ($len + 3) & 0xfffffffc; } elsif ($format eq 'VT_CLSID') { $val = Image::ExifTool::ASF::GetGUID(substr($$dataPt, $valPos, $size)); } $valPos += $size; # update value pointer to end of value push @vals, $val; } # join VT_ values with commas unless we want an array @vals = ( join $et->Options('ListSep'), @vals ) if @vals > 1 and not wantarray; last; # didn't really want to loop } $_[2] = $valPos; # return updated value position if (wantarray) { return @vals; } elsif (@vals > 1) { return join(' ', @vals); } else { return $vals[0]; } } #------------------------------------------------------------------------------ # Scan for XMP in FLA Contents (ref PH) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success # Notes: FLA format is proprietary and I couldn't find any documentation, # so this routine is entirely based on observations from sample files sub ProcessContents($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $isFLA; # all of my FLA samples contain "Contents" data, an no other FPX-like samples have # this, but check the data for a familiar pattern to be sure this is FLA: the # Contents of all of my FLA samples start with two bytes (0x29,0x38,0x3f,0x43 or 0x47, # then 0x01) followed by a number of zero bytes (from 0x18 to 0x26 of them, related # somehow to the value of the first byte), followed by the string "DocumentPage" $isFLA = 1 if $$dataPt =~ /^..\0+\xff\xff\x01\0\x0d\0CDocumentPage/s; # do a brute-force scan of the "Contents" for UTF-16 XMP # (this may always be little-endian, but allow for either endianness) if ($$dataPt =~ /<\0\?\0x\0p\0a\0c\0k\0e\0t\0 \0b\0e\0g\0i\0n\0=\0['"](\0\xff\xfe|\xfe\xff)/g) { $$dirInfo{DirStart} = pos($$dataPt) - 36; if ($$dataPt =~ /<\0\?\0x\0p\0a\0c\0k\0e\0t\0 \0e\0n\0d\0=\0['"]\0[wr]\0['"]\0\?\0>\0?/g) { $$dirInfo{DirLen} = pos($$dataPt) - $$dirInfo{DirStart}; Image::ExifTool::XMP::ProcessXMP($et, $dirInfo, $tagTablePtr); # override format if not already FLA but XMP-dc:Format indicates it is $isFLA = 1 if $$et{FILE_TYPE} ne 'FLA' and $$et{VALUE}{Format} and $$et{VALUE}{Format} eq 'application/vnd.adobe.fla'; } } $et->OverrideFileType('FLA') if $isFLA; return 1; } #------------------------------------------------------------------------------ # Check FPX byte order mark (BOM) and set byte order appropriately # Inputs: 0) data ref, 1) offset to BOM # Returns: true on success sub CheckBOM($$) { my ($dataPt, $pos) = @_; my $bom = Get16u($dataPt, $pos); return 1 if $bom == 0xfffe; return 0 unless $bom == 0xfeff; ToggleByteOrder(); return 1; } #------------------------------------------------------------------------------ # Process FlashPix properties # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessProperties($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $pos = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || length($$dataPt) - $pos; my $dirEnd = $pos + $dirLen; my $verbose = $et->Options('Verbose'); my $n; if ($dirLen < 48) { $et->Warn('Truncated FPX properties'); return 0; } # check and set our byte order if necessary unless (CheckBOM($dataPt, $pos)) { $et->Warn('Bad FPX property byte order mark'); return 0; } # get position of start of section $pos = Get32u($dataPt, $pos + 44); if ($pos < 48) { $et->Warn('Bad FPX property section offset'); return 0; } for ($n=0; $n<2; ++$n) { my %dictionary; # dictionary to translate user-defined properties my $codePage; last if $pos + 8 > $dirEnd; # read property section header my $size = Get32u($dataPt, $pos); last unless $size; my $numEntries = Get32u($dataPt, $pos + 4); $verbose and $et->VerboseDir('Property Info', $numEntries, $size); if ($pos + 8 + 8 * $numEntries > $dirEnd) { $et->Warn('Truncated property list'); last; } my $index; for ($index=0; $index<$numEntries; ++$index) { my $entry = $pos + 8 + 8 * $index; my $tag = Get32u($dataPt, $entry); my $offset = Get32u($dataPt, $entry + 4); my $valStart = $pos + 4 + $offset; last if $valStart >= $dirEnd; my $valPos = $valStart; my $type = Get32u($dataPt, $pos + $offset); if ($tag == 0) { # read dictionary to get tag name lookup for this property set my $i; for ($i=0; $i<$type; ++$i) { last if $valPos + 8 > $dirEnd; $tag = Get32u($dataPt, $valPos); my $len = Get32u($dataPt, $valPos + 4); $valPos += 8 + $len; last if $valPos > $dirEnd; my $name = substr($$dataPt, $valPos - $len, $len); $name =~ s/\0.*//s; next unless length $name; $dictionary{$tag} = $name; next if $$tagTablePtr{$name}; $tag = $name; $name =~ s/(^| )([a-z])/\U$2/g; # start with uppercase $name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters next unless length $name; $et->VPrint(0, "$$et{INDENT}\[adding $name]\n") if $verbose; AddTagToTable($tagTablePtr, $tag, { Name => $name }); } next; } # use tag name from dictionary if available my ($custom, $val); if (defined $dictionary{$tag}) { $tag = $dictionary{$tag}; $custom = 1; } my @vals = ReadFPXValue($et, $dataPt, $valPos, $type, $dirEnd, undef, $codePage); @vals or $et->Warn('Error reading property value'); $val = @vals > 1 ? \@vals : $vals[0]; my $format = $type & 0x0fff; my $flags = $type & 0xf000; my $formStr = $oleFormat{$format} || "Type $format"; $formStr .= '|' . ($oleFlags{$flags} || sprintf("0x%x",$flags)) if $flags; my $tagInfo; # check for common tag ID's: Dictionary, CodePage and LocaleIndicator # (must be done before masking because masked tags may overlap these ID's) if (not $custom and ($tag == 1 or $tag == 0x80000000)) { # get tagInfo from SummaryInfo table my $summaryTable = GetTagTable('Image::ExifTool::FlashPix::SummaryInfo'); $tagInfo = $et->GetTagInfo($summaryTable, $tag); if ($tag == 1) { $val += 0x10000 if $val < 0; # (may be incorrectly stored as int16s) $codePage = $val; # save code page for translating values } } elsif ($$tagTablePtr{$tag}) { $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); } elsif ($$tagTablePtr{VARS} and not $custom) { # mask off insignificant bits of tag ID if necessary my $masked = $$tagTablePtr{VARS}; my $mask; foreach $mask (keys %$masked) { if ($masked->{$mask}->{$tag & $mask}) { $tagInfo = $et->GetTagInfo($tagTablePtr, $tag & $mask); last; } } } $et->HandleTag($tagTablePtr, $tag, $val, DataPt => $dataPt, Start => $valStart, Size => $valPos - $valStart, Format => $formStr, Index => $index, TagInfo => $tagInfo, Extra => ", type=$type", ); } # issue warning if we hit end of property section prematurely $et->Warn('Truncated property data') if $index < $numEntries; last unless $$dirInfo{Multi}; $pos += $size; } return 1; } #------------------------------------------------------------------------------ # Load chain of sectors from file # Inputs: 0) RAF ref, 1) first sector number, 2) FAT ref, 3) sector size, 4) header size sub LoadChain($$$$$) { my ($raf, $sect, $fatPt, $sectSize, $hdrSize) = @_; return undef unless $raf; my $chain = ''; my ($buff, %loadedSect); for (;;) { last if $sect >= END_OF_CHAIN; return undef if $loadedSect{$sect}; # avoid infinite loop $loadedSect{$sect} = 1; my $offset = $sect * $sectSize + $hdrSize; return undef unless ($offset <= 0x7fffffff or $$raf{LargeFileSupport}) and $raf->Seek($offset, 0) and $raf->Read($buff, $sectSize) == $sectSize; $chain .= $buff; # step to next sector in chain return undef if $sect * 4 > length($$fatPt) - 4; $sect = Get32u($fatPt, $sect * 4); } return $chain; } #------------------------------------------------------------------------------ # Extract information from a JPEG APP2 FPXR segment # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessFPXR($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart}; my $dirLen = $$dirInfo{DirLen}; my $verbose = $et->Options('Verbose'); if ($dirLen < 13) { $et->Warn('FPXR segment too small'); return 0; } # get version and segment type (version is 0 in all my samples) my ($vers, $type) = unpack('x5C2', $$dataPt); if ($type == 1) { # a "Contents List" segment $vers != 0 and $et->Warn("Untested FPXR version $vers"); if ($$et{FPXR}) { $et->Warn('Multiple FPXR contents lists'); delete $$et{FPXR}; } my $numEntries = unpack('x7n', $$dataPt); my @contents; $verbose and $et->VerboseDir('Contents List', $numEntries); my $pos = 9; my $entry; for ($entry = 0; $entry < $numEntries; ++$entry) { if ($pos + 4 > $dirLen) { $et->Warn('Truncated FPXR contents'); return 0; } my ($size, $default) = unpack("x${pos}Na", $$dataPt); pos($$dataPt) = $pos + 5; # according to the spec, this string is little-endian # (very odd, since the size word is big-endian), # and the first char must be '/' unless ($$dataPt =~ m{\G(/\0(..)*?)\0\0}sg) { $et->Warn('Invalid FPXR stream name'); return 0; } # convert stream pathname to ascii my $name = Image::ExifTool::Decode(undef, $1, 'UCS2', 'II', 'Latin'); if ($verbose) { my $psize = ($size == 0xffffffff) ? 'storage' : "$size bytes"; $et->VPrint(0," | $entry) Name: '$name' [$psize]\n"); } # remove directory specification $name =~ s{.*/}{}s; # read storage class ID if necessary my $classID; if ($size == 0xffffffff) { unless ($$dataPt =~ m{(.{16})}sg) { $et->Warn('Truncated FPXR storage class ID'); return 0; } # unpack class ID in case we want to use it sometime $classID = Image::ExifTool::ASF::GetGUID($1); } # find the tagInfo if available my $tagInfo; unless ($$tagTablePtr{$name}) { # remove instance number or class ID from tag if necessary $tagInfo = $et->GetTagInfo($tagTablePtr, $1) if ($name =~ /(.*) \d{6}$/s and $$tagTablePtr{$1}) or ($name =~ /(.*)_[0-9a-f]{16}$/s and $$tagTablePtr{$1}); } # update position in list $pos = pos($$dataPt); # add to our contents list push @contents, { Name => $name, Size => $size, Default => $default, ClassID => $classID, TagInfo => $tagInfo, }; } # save contents list as $et member variable # (must do this last so we don't save list on error) $$et{FPXR} = \@contents; } elsif ($type == 2) { # a "Stream Data" segment # get the contents list index and stream data offset my ($index, $offset) = unpack('x7nN', $$dataPt); my $fpxr = $$et{FPXR}; if ($fpxr and $$fpxr[$index]) { my $obj = $$fpxr[$index]; # extract stream data (after 13-byte header) if (not defined $$obj{Stream}) { # ignore offset for first segment of this type # (in my sample images, this isn't always zero as one would expect) $$obj{Stream} = substr($$dataPt, $dirStart+13); } else { # add data at the proper offset to the stream my $overlap = length($$obj{Stream}) - $offset; my $start = $dirStart + 13; if ($overlap < 0 or $dirLen - $overlap < 13) { $et->WarnOnce("Bad FPXR stream $index offset",1); } else { # ignore any overlapping data in this segment # (this seems to be the convention) $start += $overlap; } # concatenate data with this stream $$obj{Stream} .= substr($$dataPt, $start); } # save value for this tag if stream is complete my $len = length $$obj{Stream}; if ($len >= $$obj{Size}) { $et->VPrint(0, " + [FPXR stream $index, $len bytes]\n") if $verbose; if ($len > $$obj{Size}) { $et->Warn('Extra data in FPXR segment (truncated)'); $$obj{Stream} = substr($$obj{Stream}, 0, $$obj{Size}); } # handle this tag $et->HandleTag($tagTablePtr, $$obj{Name}, $$obj{Stream}, DataPt => \$$obj{Stream}, TagInfo => $$obj{TagInfo}, ); delete $$obj{Stream}; # done with this stream } # hack for improperly stored FujiFilm PreviewImage (stored with no contents list) } elsif ($index == 512 and $dirLen > 60 and ($$et{FujiPreview} or ($dirLen > 64 and substr($$dataPt, $dirStart+60, 4) eq "\xff\xd8\xff\xdb"))) { $$et{FujiPreview} = '' unless defined $$et{FujiPreview}; # recombine PreviewImage, skipping 13-byte FPXR header + 47-byte Fuji header $$et{FujiPreview} .= substr($$dataPt, $dirStart+60); } else { # (Kodak uses index 255 for a free segment in images from some cameras) $et->Warn("Unlisted FPXR segment (index $index)") if $index != 255; } } elsif ($type ne 3) { # not a "Reserved" segment $et->Warn("Unknown FPXR segment (type $type)"); } # clean up if this was the last FPXR segment if ($$dirInfo{LastFPXR}) { if ($$et{FPXR}) { my $obj; foreach $obj (@{$$et{FPXR}}) { next unless defined $$obj{Stream} and length $$obj{Stream}; # parse it even though it isn't the proper length $et->HandleTag($tagTablePtr, $$obj{Name}, $$obj{Stream}, DataPt => \$$obj{Stream}, TagInfo => $$obj{TagInfo}, ); } delete $$et{FPXR}; # delete our temporary variables } if ($$et{FujiPreview}) { $et->FoundTag('PreviewImage', $$et{FujiPreview}); delete $$et{FujiPreview}; } } return 1; } #------------------------------------------------------------------------------ # Set document number for objects # Inputs: 0) object hierarchy hash ref, 1) object index, 2) doc number list ref, # 3) doc numbers used at each level, 4) flag set for metadata levels sub SetDocNum($$;$$$) { my ($hier, $index, $doc, $used, $meta) = @_; my $obj = $$hier{$index} or return; return if exists $$obj{DocNum}; $$obj{DocNum} = $doc; SetDocNum($hier, $$obj{Left}, $doc, $used, $meta) if $$obj{Left}; SetDocNum($hier, $$obj{Right}, $doc, $used, $meta) if $$obj{Right}; if (defined $$obj{Child}) { $used or $used = [ ]; my @subDoc; push @subDoc, @$doc if $doc; # we must dive down 2 levels for each sub-document, so use the # $meta flag to add a sub-document level only for every 2nd generation if ($meta) { my $subNum = ($$used[scalar @subDoc] || 0); $$used[scalar @subDoc] = $subNum; push @subDoc, $subNum; } elsif (@subDoc) { $subDoc[-1] = ++$$used[$#subDoc]; } SetDocNum($hier, $$obj{Child}, \@subDoc, $used, not $meta); } } #------------------------------------------------------------------------------ # Extract information from a FlashPix (FPX) file # Inputs: 0) ExifTool object ref, 1) dirInfo ref # Returns: 1 on success, 0 if this wasn't a valid FPX-format file sub ProcessFPX($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $out, %dumpParms, $oldIndent, $miniStreamBuff); my ($tag, %hier, %objIndex); # read header return 0 unless $raf->Read($buff,HDR_SIZE) == HDR_SIZE; # check signature return 0 unless $buff =~ /^\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1/; # set FileType initially based on file extension (we may override this later) my $fileType = $$et{FILE_EXT}; $fileType = 'FPX' unless $fileType and $fpxFileType{$fileType}; $et->SetFileType($fileType); SetByteOrder(substr($buff, 0x1c, 2) eq "\xff\xfe" ? 'MM' : 'II'); my $tagTablePtr = GetTagTable('Image::ExifTool::FlashPix::Main'); my $verbose = $et->Options('Verbose'); # copy LargeFileSupport option to RAF for use in LoadChain $$raf{LargeFileSupport} = $et->Options('LargeFileSupport'); my $sectSize = 1 << Get16u(\$buff, 0x1e); my $miniSize = 1 << Get16u(\$buff, 0x20); my $fatCount = Get32u(\$buff, 0x2c); # number of FAT sectors my $dirStart = Get32u(\$buff, 0x30); # first directory sector my $miniCutoff = Get32u(\$buff, 0x38); # minimum size for big-FAT streams my $miniStart = Get32u(\$buff, 0x3c); # first sector of mini-FAT my $miniCount = Get32u(\$buff, 0x40); # number of mini-FAT sectors my $difStart = Get32u(\$buff, 0x44); # first sector of DIF chain my $difCount = Get32u(\$buff, 0x48); # number of DIF sectors if ($verbose) { $out = $et->Options('TextOut'); $dumpParms{Out} = $out; $dumpParms{MaxLen} = 96 if $verbose == 3; print $out " Sector size=$sectSize\n FAT: Count=$fatCount\n"; print $out " DIR: Start=$dirStart\n"; print $out " MiniFAT: Mini-sector size=$miniSize Start=$miniStart Count=$miniCount Cutoff=$miniCutoff\n"; print $out " DIF FAT: Start=$difStart Count=$difCount\n"; } # # load the FAT # my $pos = 0x4c; my $endPos = length($buff); my $fat = ''; my $fatCountCheck = 0; for (;;) { while ($pos <= $endPos - 4) { my $sect = Get32u(\$buff, $pos); $pos += 4; next if $sect == FREE_SECT; my $offset = $sect * $sectSize + HDR_SIZE; my $fatSect; unless ($raf->Seek($offset, 0) and $raf->Read($fatSect, $sectSize) == $sectSize) { $et->Error("Error reading FAT from sector $sect"); return 1; } $fat .= $fatSect; ++$fatCountCheck; } last if $difStart >= END_OF_CHAIN; # read next DIF (Dual Indirect FAT) sector my $offset = $difStart * $sectSize + HDR_SIZE; unless ($raf->Seek($offset, 0) and $raf->Read($buff, $sectSize) == $sectSize) { $et->Error("Error reading DIF sector $difStart"); return 1; } # set end of sector information in this DIF $pos = 0; $endPos = $sectSize - 4; # next time around we want to read next DIF in chain $difStart = Get32u(\$buff, $endPos); } if ($fatCountCheck != $fatCount) { $et->Warn("Bad number of FAT sectors (expected $fatCount but found $fatCountCheck)"); } # # load the mini-FAT and the directory # my $miniFat = LoadChain($raf, $miniStart, \$fat, $sectSize, HDR_SIZE); my $dir = LoadChain($raf, $dirStart, \$fat, $sectSize, HDR_SIZE); unless (defined $miniFat and defined $dir) { $et->Error('Error reading mini-FAT or directory stream'); return 1; } if ($verbose) { print $out " FAT [",length($fat)," bytes]:\n"; HexDump(\$fat, undef, %dumpParms) if $verbose > 2; print $out " Mini-FAT [",length($miniFat)," bytes]:\n"; HexDump(\$miniFat, undef, %dumpParms) if $verbose > 2; print $out " Directory [",length($dir)," bytes]:\n"; HexDump(\$dir, undef, %dumpParms) if $verbose > 2; } # # process the directory # if ($verbose) { $oldIndent = $$et{INDENT}; $$et{INDENT} .= '| '; $et->VerboseDir('FPX', undef, length $dir); } my $miniStream; $endPos = length($dir); my $index = 0; for ($pos=0; $pos<=$endPos-128; $pos+=128, ++$index) { # get directory entry type # (0=invalid, 1=storage, 2=stream, 3=lockbytes, 4=property, 5=root) my $type = Get8u(\$dir, $pos + 0x42); next if $type == 0; # skip invalid entries if ($type > 5) { $et->Warn("Invalid directory entry type $type"); last; # rest of directory is probably garbage } # get entry name (note: this is supposed to be length in 2-byte # characters but this isn't what is done in my sample FPX file, so # be very tolerant of this count -- it's null terminated anyway) my $len = Get16u(\$dir, $pos + 0x40); $len > 32 and $len = 32; $tag = Image::ExifTool::Decode(undef, substr($dir,$pos,$len*2), 'UCS2', 'II', 'Latin'); $tag =~ s/\0.*//s; # truncate at null (in case length was wrong) my $sect = Get32u(\$dir, $pos + 0x74); # start sector number my $size = Get32u(\$dir, $pos + 0x78); # stream length # load Ministream (referenced from first directory entry) unless ($miniStream) { $miniStreamBuff = LoadChain($raf, $sect, \$fat, $sectSize, HDR_SIZE); unless (defined $miniStreamBuff) { $et->Warn('Error loading Mini-FAT stream'); last; } $miniStream = new File::RandomAccess(\$miniStreamBuff); } my $tagInfo; if ($$tagTablePtr{$tag}) { $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); } else { # remove instance number or class ID from tag if necessary $tagInfo = $et->GetTagInfo($tagTablePtr, $1) if ($tag =~ /(.*) \d{6}$/s and $$tagTablePtr{$1}) or ($tag =~ /(.*)_[0-9a-f]{16}$/s and $$tagTablePtr{$1}); } my $lSib = Get32u(\$dir, $pos + 0x44); # left sibling my $rSib = Get32u(\$dir, $pos + 0x48); # right sibling my $chld = Get32u(\$dir, $pos + 0x4c); # child directory # save information about object hierachy my ($obj, $sub); $obj = $hier{$index} or $obj = $hier{$index} = { }; $$obj{Left} = $lSib unless $lSib == FREE_SECT; $$obj{Right} = $rSib unless $rSib == FREE_SECT; unless ($chld == FREE_SECT) { $$obj{Child} = $chld; $sub = $hier{$chld} or $sub = $hier{$chld} = { }; $$sub{Parent} = $index; } next unless $tagInfo or $verbose; # load the data for stream types my $extra = ''; my $typeStr = $dirEntryType[$type] || $type; if ($typeStr eq 'STREAM') { if ($size >= $miniCutoff) { # stream is in the main FAT $buff = LoadChain($raf, $sect, \$fat, $sectSize, HDR_SIZE); } elsif ($size) { # stream is in the mini-FAT $buff = LoadChain($miniStream, $sect, \$miniFat, $miniSize, 0); } else { $buff = ''; # an empty stream } unless (defined $buff) { my $name = $tagInfo ? $$tagInfo{Name} : 'unknown'; $et->Warn("Error reading $name stream"); $buff = ''; } } elsif ($typeStr eq 'ROOT') { $buff = $miniStreamBuff; $extra .= ' (Ministream)'; } else { $buff = ''; undef $size; } if ($verbose) { my $flags = Get8u(\$dir, $pos + 0x43); # 0=red, 1=black my $col = { 0 => 'Red', 1 => 'Black' }->{$flags} || $flags; $extra .= " Type=$typeStr Flags=$col"; $extra .= " Left=$lSib" unless $lSib == FREE_SECT; $extra .= " Right=$rSib" unless $rSib == FREE_SECT; $extra .= " Child=$chld" unless $chld == FREE_SECT; $et->VerboseInfo($tag, $tagInfo, Index => $index, Value => $buff, DataPt => \$buff, Extra => $extra, Size => $size, ); } if ($tagInfo and $buff) { my $num = $$et{NUM_FOUND}; my $subdir = $$tagInfo{SubDirectory}; if ($subdir) { my %dirInfo = ( DataPt => \$buff, DirStart => $$subdir{DirStart}, DirLen => length $buff, Multi => $$tagInfo{Multi}, ); my $subTablePtr = GetTagTable($$subdir{TagTable}); $et->ProcessDirectory(\%dirInfo, $subTablePtr, $$subdir{ProcessProc}); } else { $et->FoundTag($tagInfo, $buff); } # save object index number for all found tags my $num2 = $$et{NUM_FOUND}; $objIndex{++$num} = $index while $num < $num2; } } # set document numbers for tags extracted from embedded documents unless ($$et{DOC_NUM}) { # initialize document number for all objects, beginning at root (index 0) SetDocNum(\%hier, 0); # set family 3 group name for all tags in embedded documents my $order = $$et{FILE_ORDER}; my (@pri, $copy, $member); foreach $tag (keys %$order) { my $num = $$order{$tag}; next unless defined $num and $objIndex{$num}; my $obj = $hier{$objIndex{$num}} or next; my $docNums = $$obj{DocNum}; next unless $docNums and @$docNums; $$et{TAG_EXTRA}{$tag}{G3} = join '-', @$docNums; push @pri, $tag unless $tag =~ / /; # save keys for priority sub-doc tags } # swap priority sub-document tags with main document tags if they exist foreach $tag (@pri) { for ($copy=1; ;++$copy) { my $key = "$tag ($copy)"; last unless defined $$et{VALUE}{$key}; my $extra = $$et{TAG_EXTRA}{$key}; next if $extra and $$extra{G3}; # not Main if family 3 group is set foreach $member ('PRIORITY','VALUE','FILE_ORDER','TAG_INFO','TAG_EXTRA') { my $pHash = $$et{$member}; my $t = $$pHash{$tag}; $$pHash{$tag} = $$pHash{$key}; $$pHash{$key} = $t; } last; } } } $$et{INDENT} = $oldIndent if $verbose; # try to better identify the file type if ($$et{VALUE}{FileType} eq 'FPX') { my $val = $$et{CompObjUserType} || $$et{Software}; if ($val) { my %type = ( Word => 'DOC', PowerPoint => 'PPT', Excel => 'XLS' ); my $pat; foreach $pat (sort keys %type) { next unless $val =~ /$pat/; $et->OverrideFileType($type{$pat}); last; } } } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::FlashPix - Read FlashPix meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to extract FlashPix meta information from FPX images, and from the APP2 FPXR segment of JPEG images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.exif.org/Exif2-2.PDF> =item L<http://www.graphcomp.com/info/specs/livepicture/fpx.pdf> =item L<http://search.cpan.org/~jdb/libwin32/> =item L<http://msdn.microsoft.com/en-us/library/aa380374.aspx> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/FlashPix Tags>, L<Image::ExifTool::TagNames/OOXML Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/FLIR.pm�����������������������������������������������������000644 �000765 �000024 �00000156435 12642461275 021025� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: FLIR.pm # # Description: Read FLIR meta information # # Revisions: 2013/03/28 - P. Harvey Created # # References: 1) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4898.0.html # 2) http://www.nuage.ch/site/flir-i7-some-analysis/ # 3) http://www.workswell.cz/manuals/flir/hardware/A3xx_and_A6xx_models/Streaming_format_ThermoVision.pdf # 4) http://support.flir.com/DocDownload/Assets/62/English/1557488%24A.pdf # 5) http://code.google.com/p/dvelib/source/browse/trunk/flirPublicFormat/fpfConverter/Fpfimg.h?spec=svn3&r=3 # 6) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5538.0.html # JD) Jens Duttke private communication # # Glossary: FLIR = Forward Looking Infra Red #------------------------------------------------------------------------------ package Image::ExifTool::FLIR; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.13'; sub ProcessFLIR($$;$); sub ProcessFLIRText($$$); sub ProcessMeasInfo($$$); sub GetImageType($$$); my %temperatureInfo = ( Writable => 'rational64u', Format => 'rational64s', # (have seen negative values) ); # tag information for floating point Kelvin tag my %floatKelvin = ( Format => 'float', ValueConv => '$val - 273.15', PrintConv => 'sprintf("%.1f C",$val)', ); # commonly used tag information elements my %float1f = ( Format => 'float', PrintConv => 'sprintf("%.1f",$val)' ); my %float2f = ( Format => 'float', PrintConv => 'sprintf("%.2f",$val)' ); my %float6f = ( Format => 'float', PrintConv => 'sprintf("%.6f",$val)' ); my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' ); # FLIR makernotes tags (ref PH) %Image::ExifTool::FLIR::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, WRITABLE => 1, PRIORITY => 0, # (unreliable) NOTES => q{ Information extracted from the maker notes of JPEG images from thermal imaging cameras by FLIR Systems Inc. }, 0x01 => { #2 Name => 'ImageTemperatureMax', %temperatureInfo, Notes => q{ these temperatures may be in Celcius, Kelvin or Fahrenheit, but there is no way to tell which }, }, 0x02 => { Name => 'ImageTemperatureMin', %temperatureInfo }, #2 0x03 => { #1 Name => 'Emissivity', Writable => 'rational64u', PrintConv => 'sprintf("%.2f",$val)', PrintConvInv => '$val', }, # 0x04 does not change with temperature units; often 238, 250 or 457 0x04 => { Name => 'UnknownTemperature', %temperatureInfo, Unknown => 1 }, # 0x05,0x06 are unreliable. As written by FLIR tools, these are the # CameraTemperatureRangeMax/Min, but the units vary depending on the # options settings. But as written by some cameras, the values are different. 0x05 => { Name => 'CameraTemperatureRangeMax', %temperatureInfo, Unknown => 1 }, 0x06 => { Name => 'CameraTemperatureRangeMin', %temperatureInfo, Unknown => 1 }, # 0x07 - string[33] (some sort of image ID?) # 0x08 - string[33] # 0x09 - undef (tool info) # 0x0a - int32u: 1 # 0x0f - rational64u: 0/1000 # 0x10,0x11,0x12 - int32u: 0 # 0x13 - rational64u: 0/1000 ); # FLIR FFF tag table (ref PH) %Image::ExifTool::FLIR::FFF = ( GROUPS => { 0 => 'APP1', 2 => 'Image' }, PROCESS_PROC => \&ProcessFLIR, VARS => { ALPHA_FIRST => 1 }, NOTES => q{ Information extracted from FLIR FFF images and the FLIR APP1 segment of JPEG images. These tags may also be extracted from the first frame of an FLIR SEQ file. }, "_header" => { Name => 'FFFHeader', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::Header' }, }, # 0 = free (ref 3) 0x01 => { Name => 'RawData', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::RawData' }, }, # 2 = GainMap (ref 3) # 3 = OffsMap (ref 3) # 4 = DeadMap (ref 3) 0x05 => { #6 Name => 'GainDeadData', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::GainDeadData' }, }, 0x06 => { #6 Name => 'CoarseData', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::CoarseData' }, }, # 7 = ImageMap (ref 3) 0x0e => { Name => 'EmbeddedImage', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::EmbeddedImage' }, }, 0x20 => { Name => 'CameraInfo', # (BasicData - ref 3) SubDirectory => { TagTable => 'Image::ExifTool::FLIR::CameraInfo' }, }, 0x21 => { #6 Name => 'MeasurementInfo', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::MeasInfo' }, }, 0x22 => { Name => 'PaletteInfo', # (ColorPal - ref 3) SubDirectory => { TagTable => 'Image::ExifTool::FLIR::PaletteInfo' }, }, 0x23 => { Name => 'TextInfo', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::TextInfo' }, }, 0x24 => { Name => 'EmbeddedAudioFile', # (sometimes has an unknown 8-byte header) RawConv => q{ return \$val if $val =~ s/^.{0,16}?RIFF/RIFF/s; $self->Warn('Unknown EmbeddedAudioFile format'); return undef; }, }, # 0x27: 01 00 08 00 10 00 00 00 0x28 => { Name => 'PaintData', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::PaintData' }, }, 0x2a => { Name => 'PiP', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::PiP', ByteOrder => 'LittleEndian', }, }, 0x2b => { Name => 'GPSInfo', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::GPSInfo' }, }, 0x2c => { Name => 'MeterLink', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::MeterLink' , ByteOrder => 'LittleEndian' }, }, 0x2e => { Name => 'ParameterInfo', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::ParamInfo' }, }, ); # FFF file header (ref PH) %Image::ExifTool::FLIR::Header = ( GROUPS => { 0 => 'APP1', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FIRST_ENTRY => 0, NOTES => 'Tags extracted from the FLIR FFF/AFF header.', 4 => { Name => 'CreatorSoftware', Format => 'string[16]' }, ); # FLIR raw data record (ref PH) %Image::ExifTool::FLIR::RawData = ( GROUPS => { 0 => 'APP1', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int16u', FIRST_ENTRY => 0, NOTES => q{ The thermal image data may be stored either as raw data, or in PNG format. If stored as raw data, ExifTool adds a TIFF header to allow the data to be viewed as a TIFF image. If stored in PNG format, the PNG image is extracted as-is. Note that most FLIR cameras using the PNG format seem to write the 16-bit raw image data in the wrong byte order. }, 0x00 => { # use this tag only to determine the byte order of the raw data # (the value should be 0x0002 if the byte order is correct) # - always "II" when RawThermalImageType is "TIFF" # - seen both "II" and "MM" when RawThermalImageType is "PNG" Name => 'RawDataByteOrder', Hidden => 1, RawConv => 'ToggleByteOrder() if $val >= 0x0100; undef', }, 0x01 => { Name => 'RawThermalImageWidth', RawConv => '$$self{RawThermalImageWidth} = $val', }, 0x02 => { Name => 'RawThermalImageHeight', RawConv => '$$self{RawThermalImageHeight} = $val', }, # 0x03-0x05: 0 # 0x06: raw image width - 1 # 0x07: 0 # 0x08: raw image height - 1 # 0x09: 0,15,16 # 0x0a: 0,2,3,11,12,13,30 # 0x0b: 0,2 # 0x0c: 0 or a large number # 0x0d: 0,3,4,6 # 0x0e-0x0f: 0 16 => { Name => 'RawThermalImageType', Format => 'undef[$size-0x20]', RawConv => 'Image::ExifTool::FLIR::GetImageType($self, $val, "RawThermalImage")', }, 16.1 => { Name => 'RawThermalImage', Groups => { 2 => 'Preview' }, RawConv => '\$$self{RawThermalImage}', }, ); # GainDeadMap record (ref 6) (see RawData above) %Image::ExifTool::FLIR::GainDeadData = ( GROUPS => { 0 => 'APP1', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int16u', FIRST_ENTRY => 0, NOTES => 'Information found in FFF-format .GAN calibration image files.', 0x00 => { Name => 'GainDeadMapByteOrder', Hidden => 1, RawConv => 'ToggleByteOrder() if $val >= 0x0100; undef', }, 0x01 => { Name => 'GainDeadMapImageWidth', RawConv => '$$self{GainDeadMapImageWidth} = $val', }, 0x02 => { Name => 'GainDeadMapImageHeight', RawConv => '$$self{GainDeadMapImageHeight} = $val', }, 16 => { Name => 'GainDeadMapImageType', Format => 'undef[$size-0x20]', RawConv => 'Image::ExifTool::FLIR::GetImageType($self, $val, "GainDeadMapImage")', }, 16.1 => { Name => 'GainDeadMapImage', RawConv => '\$$self{GainDeadMapImage}', }, ); # CoarseMap record (ref 6) (see RawData above) %Image::ExifTool::FLIR::CoarseData = ( GROUPS => { 0 => 'APP1', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int16u', FIRST_ENTRY => 0, NOTES => 'Information found in FFF-format .CRS correction image files.', 0x00 => { Name => 'CoarseMapByteOrder', Hidden => 1, RawConv => 'ToggleByteOrder() if $val >= 0x0100; undef', }, 0x01 => { Name => 'CoarseMapImageWidth', RawConv => '$$self{CoarseMapImageWidth} = $val', }, 0x02 => { Name => 'CoarseMapImageHeight', RawConv => '$$self{CoarseMapImageHeight} = $val', }, 16 => { Name => 'CoarseMapImageType', Format => 'undef[$size-0x20]', RawConv => 'Image::ExifTool::FLIR::GetImageType($self, $val, "CoarseMapImage")', }, 16.1 => { Name => 'CoarseMapImage', RawConv => '\$$self{CoarseMapImage}', }, ); # "Paint colors" record (ref PH) %Image::ExifTool::FLIR::PaintData = ( GROUPS => { 0 => 'APP1', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int16u', FIRST_ENTRY => 0, NOTES => 'Information generated by FLIR Tools "Paint colors" tool.', 0x01 => { Name => 'PaintByteOrder', Hidden => 1, RawConv => 'ToggleByteOrder() if $val >= 0x0100; undef', }, 0x05 => { Name => 'PaintImageWidth', RawConv => '$$self{PaintImageWidth} = $val', }, 0x06 => { Name => 'PaintImageHeight', RawConv => '$$self{PaintImageHeight} = $val', }, 20 => { Name => 'PaintImageType', Format => 'undef[$size-0x28]', RawConv => 'Image::ExifTool::FLIR::GetImageType($self, $val, "PaintImage")', }, 20.1 => { Name => 'PaintImage', RawConv => '\$$self{PaintImage}', }, ); # FLIR embedded image (ref 1) %Image::ExifTool::FLIR::EmbeddedImage = ( GROUPS => { 0 => 'APP1', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int16u', FIRST_ENTRY => 0, 0 => { # use this tag only to determine the byte order # (the value should be 0x0003 if the byte order is correct) Name => 'EmbeddedImageByteOrder', Format => 'int16u', Hidden => 1, RawConv => 'ToggleByteOrder() if $val >= 0x0100; undef', }, 1 => 'EmbeddedImageWidth', 2 => 'EmbeddedImageHeight', 16 => { Name => 'EmbeddedImageType', Format => 'undef[4]', RawConv => '$val =~ /^\x89PNG/s ? "PNG" : ($val =~ /^\xff\xd8\xff/ ? "JPG" : "DAT")', Notes => q{ "PNG" for PNG image in Y Cb Cr colors, "JPG" for a JPEG image, or "DAT" for other image data }, }, 16.1 => { Name => 'EmbeddedImage', Groups => { 2 => 'Preview' }, Format => 'undef[$size-0x20]', Binary => 1, }, ); # FLIR camera record (ref PH) %Image::ExifTool::FLIR::CameraInfo = ( GROUPS => { 0 => 'APP1', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FIRST_ENTRY => 0, NOTES => q{ FLIR camera information. The Planck tags are variables used in the temperature calculation. See L<http://u88.n24.queensu.ca/exiftool/forum/index.php?topic=4898.msg23972#msg23972> for details. }, 0x00 => { # use this tag only to determine the byte order # (the value should be 0x0002 if the byte order is correct) Name => 'CameraInfoByteOrder', Format => 'int16u', Hidden => 1, RawConv => 'ToggleByteOrder() if $val >= 0x0100; undef', }, # 0x02 - int16u: image width # 0x04 - int16u: image height # 0x0c - int32u: image width - 1 # 0x10 - int32u: image height - 1 0x20 => { Name => 'Emissivity', %float2f }, 0x24 => { Name => 'ObjectDistance', Format => 'float', PrintConv => 'sprintf("%.2f m",$val)' }, 0x28 => { Name => 'ReflectedApparentTemperature', %floatKelvin }, 0x2c => { Name => 'AtmosphericTemperature', %floatKelvin }, 0x30 => { Name => 'IRWindowTemperature', %floatKelvin }, 0x34 => { Name => 'IRWindowTransmission', %float2f }, # 0x38: 0 0x3c => { Name => 'RelativeHumidity', Format => 'float', ValueConv => '$val > 2 ? $val / 100 : $val', # have seen value expressed as percent in FFF file PrintConv => 'sprintf("%.1f %%",$val*100)', }, # 0x40 - float: 0,6 # 0x44,0x48,0x4c: 0 # 0x50 - int32u: 1 # 0x54: 0 0x58 => { Name => 'PlanckR1', %float8g }, #1 0x5c => { Name => 'PlanckB', %float8g }, #1 0x60 => { Name => 'PlanckF', %float8g }, #1 # 0x64,0x68,0x6c: 0 0x070 => { Name => 'AtmosphericTransAlpha1', %float6f }, #1 (value: 0.006569) 0x074 => { Name => 'AtmosphericTransAlpha2', %float6f }, #1 (value: 0.012620) 0x078 => { Name => 'AtmosphericTransBeta1', %float6f }, #1 (value: -0.002276) 0x07C => { Name => 'AtmosphericTransBeta2', %float6f }, #1 (value: -0.006670) 0x080 => { Name => 'AtmosphericTransX', %float6f }, #1 (value: 1.900000) # 0x84,0x88: 0 # 0x8c - float: 0,4,6 0x90 => { Name => 'CameraTemperatureRangeMax', %floatKelvin }, 0x94 => { Name => 'CameraTemperatureRangeMin', %floatKelvin }, 0x98 => { Name => 'UnknownTemperature1', %floatKelvin, Unknown => 1 }, # 50 degrees over camera max 0x9c => { Name => 'UnknownTemperature2', %floatKelvin, Unknown => 1 }, # usually 10 or 20 degrees below camera min 0xa0 => { Name => 'UnknownTemperature3', %floatKelvin, Unknown => 1 }, # same as camera max 0xa4 => { Name => 'UnknownTemperature4', %floatKelvin, Unknown => 1 }, # same as camera min 0xa8 => { Name => 'UnknownTemperature5', %floatKelvin, Unknown => 1 }, # usually 50 or 88 degrees over camera max 0xac => { Name => 'UnknownTemperature6', %floatKelvin, Unknown => 1 }, # usually 10, 20 or 40 degrees below camera min 0xd4 => { Name => 'CameraModel', Format => 'string[32]' }, 0xf4 => { Name => 'CameraPartNumber', Format => 'string[16]' }, #1 0x104 => { Name => 'CameraSerialNumber',Format => 'string[16]' }, #1 0x114 => { Name => 'CameraSoftware', Format => 'string[16]' }, #1/PH (NC) 0x170 => { Name => 'LensModel', Format => 'string[32]' }, # note: it seems that FLIR updated their lenses at some point, so lenses with the same # name may have different part numbers (eg. the FOL38 is either 1196456 or T197089) 0x190 => { Name => 'LensPartNumber', Format => 'string[16]' }, 0x1a0 => { Name => 'LensSerialNumber', Format => 'string[16]' }, 0x1b4 => { Name => 'FieldOfView', Format => 'float', PrintConv => 'sprintf("%.1f deg", $val)' }, #1 # 0x1d0 - int16u: 0,12,24,25,46 # 0x1d2 - int16u: 170,180,190,380,760,52320 0x1ec => { Name => 'FilterModel', Format => 'string[16]' }, 0x1fc => { Name => 'FilterPartNumber', Format => 'string[32]' }, 0x21c => { Name => 'FilterSerialNumber',Format => 'string[32]' }, 0x308 => { Name => 'PlanckO', Format => 'int32s' }, #1 0x30c => { Name => 'PlanckR2', %float8g }, #1 0x338 => { Name => 'RawValueMedian', Format => 'int16u', Groups => { 2 => 'Image' } }, 0x33c => { Name => 'RawValueRange', Format => 'int16u', Groups => { 2 => 'Image' } }, 0x384 => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Format => 'undef[10]', Groups => { 2 => 'Time' }, RawConv => q{ my $tm = Get32u(\$val, 0); my $ss = Get32u(\$val, 4) & 0xffff; my $tz = Get16s(\$val, 8); ConvertUnixTime($tm - $tz * 60) . sprintf('.%.3d', $ss) . TimeZoneString(-$tz); }, PrintConv => '$self->ConvertDateTime($val)', }, 0x390 => { Name => 'FocusStepCount', Format => 'int16u' }, 0x45c => { Name => 'FocusDistance', Format => 'float', PrintConv => 'sprintf("%.1f m",$val)' }, # 0x43c - string: either "Live" or the file name ); # FLIR measurement tools record (ref 6) %Image::ExifTool::FLIR::MeasInfo = ( GROUPS => { 0 => 'APP1', 2 => 'Image' }, PROCESS_PROC => \&ProcessMeasInfo, FORMAT => 'int16u', VARS => { NO_ID => 1 }, NOTES => q{ Tags listed below are only for the first measurement tool, however multiple measurements may be added, and information is extracted for all of them. Tags for subsequent measurements are generated as required with the prefixes "Meas2", "Meas3", etc. }, Meas1Type => { PrintConv => { 1 => 'Spot', 2 => 'Area', 3 => 'Ellipse', 4 => 'Line', 5 => 'Endpoint', #PH (NC, FLIR Tools v2.0 for Mac generates an empty one of these after each Line) 6 => 'Alarm', #PH seen params: "0 1 0 1 9142 0 9142 0" (called "Isotherm" by Mac version) 7 => 'Unused', #PH (NC) (or maybe "Free"?) 8 => 'Difference', }, }, Meas1Params => { Notes => 'Spot=X,Y; Area=X1,Y1,W,H; Ellipse=XC,YC,X1,Y1,X2,Y2; Line=X1,Y1,X2,Y2', }, Meas1Label => { }, ); # FLIR palette record (ref PH/JD) %Image::ExifTool::FLIR::PaletteInfo = ( GROUPS => { 0 => 'APP1', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FIRST_ENTRY => 0, 0x00 => { #JD Name => 'PaletteColors', RawConv => '$$self{PaletteColors} = $val', }, 0x06 => { Name => 'AboveColor', Format => 'int8u[3]', Notes => 'Y Cr Cb color components' }, #JD 0x09 => { Name => 'BelowColor', Format => 'int8u[3]' }, #JD 0x0c => { Name => 'OverflowColor', Format => 'int8u[3]' }, #JD 0x0f => { Name => 'UnderflowColor', Format => 'int8u[3]' }, #JD 0x12 => { Name => 'Isotherm1Color', Format => 'int8u[3]' }, #JD 0x15 => { Name => 'Isotherm2Color', Format => 'int8u[3]' }, #JD 0x1a => { Name => 'PaletteMethod' }, #JD 0x1b => { Name => 'PaletteStretch' }, #JD 0x30 => { Name => 'PaletteFileName', Format => 'string[32]', # (not valid for all images) RawConv => q{ $val =~ s/\0.*//; $val =~ /^[\x20-\x7e]{3,31}$/ ? $val : undef; }, }, 0x50 => { Name => 'PaletteName', Format => 'string[32]', # (not valid for all images) RawConv => q{ $val =~ s/\0.*//; $val =~ /^[\x20-\x7e]{3,31}$/ ? $val : undef; }, }, 0x70 => { Name => 'Palette', Format => 'undef[3*$$self{PaletteColors}]', Notes => 'Y Cr Cb byte values for each palette color', Binary => 1, }, ); # FLIR text information record (ref PH) %Image::ExifTool::FLIR::TextInfo = ( GROUPS => { 0 => 'APP1', 2 => 'Image' }, PROCESS_PROC => \&ProcessFLIRText, VARS => { NO_ID => 1 }, Label0 => { }, Value0 => { }, Label1 => { }, Value1 => { }, Label2 => { }, Value2 => { }, Label3 => { }, Value3 => { }, # (there could be more, and we will generate these on the fly if necessary) ); # FLIR parameter information record (ref PH) %Image::ExifTool::FLIR::ParamInfo = ( GROUPS => { 0 => 'APP1', 2 => 'Image' }, PROCESS_PROC => \&ProcessFLIRText, VARS => { NO_ID => 1 }, Generated => { Name => 'DateTimeGenerated', Description => 'Date/Time Generated', Groups => { 2 => 'Time' }, ValueConv => '$val =~ tr/-/:/; $val', PrintConv => '$self->ConvertDateTime($val)', }, Param0 => { }, Param1 => { }, Param2 => { }, Param3 => { }, # (there could be more, and we will generate these on the fly if necessary) ); # FLIR Picture in Picture record (ref 1) %Image::ExifTool::FLIR::PiP = ( GROUPS => { 0 => 'APP1', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FIRST_ENTRY => 0, NOTES => 'FLIR Picture in Picture tags.', FORMAT => 'int16s', 0x00 => { Name => 'Real2IR', Format => 'float', }, 2 => { Name => 'OffsetX', Notes => 'offset from of insertion point from center', PrintConv => 'sprintf("%+d",$val)', # (add sign for direct use with IM convert) }, 3 => { Name => 'OffsetY', PrintConv => 'sprintf("%+d",$val)', }, 4 => { Name => 'PiPX1', Description => 'PiP X1', Notes => 'crop size for radiometric image', }, 5 => { Name => 'PiPX2', Description => 'PiP X2' }, 6 => { Name => 'PiPY1', Description => 'PiP Y1' }, 7 => { Name => 'PiPY2', Description => 'PiP Y2' }, ); # FLIR GPS record (ref PH/JD) %Image::ExifTool::FLIR::GPSInfo = ( GROUPS => { 0 => 'APP1', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FIRST_ENTRY => 0, 0x58 => { Name => 'GPSMapDatum', Format => 'string[16]', }, ); # humidity meter information # (ref http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5325.0.html) # The %Image::ExifTool::UserDefined hash defines new tags to be added to existing tables. %Image::ExifTool::FLIR::MeterLink = ( GROUPS => { 0 => 'APP1', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FIRST_ENTRY => 0, NOTES => 'Tags containing Meterlink humidity meter information.', 26 => { Name => 'Reading1Units', DataMember => 'Reading1Units', RawConv => '$$self{Reading1Units} = $val', PrintHex => 1, PrintConv => { 0x0d => 'C', 0x1b => '%', 0x1d => 'Relative', 0x24 => 'g/kg', }, }, 28 => { Name => 'Reading1Description', DataMember => 'Reading1Description', RawConv => '$$self{Reading1Description} = $val', PrintConv => { 0 => 'Humidity', 3 => 'Moisture', # Pinless Moisture Readings with INTernal sensor 7 => 'Dew Point', 8 => 'Air Temperature', 9 => 'IR Temperature', 11 => 'Difference Temperature', # Difference Temp: IR-Temp and DewPoint }, }, 32 => { Name => 'Reading1Device', Format => 'string[16]', }, 96 => { Name => 'Reading1Value', Format => 'double', # convert Kelvin -> Celcius and kg/kg -> g/kg ValueConv => q{ return $val - 273.15 if $$self{Reading1Units} == 0x0d and $$self{Reading1Description} != 11; return $val *= 1000 if $$self{Reading1Units} == 0x24; return $val; }, }, # add 100 for subsequent readings 126 => { Name => 'Reading2Units', DataMember => 'Reading2Units', RawConv => '$$self{Reading2Units} = $val', PrintHex => 1, PrintConv => { 0x0d => 'C', 0x1b => '%', 0x1d => 'rel', 0x24 => 'g/kg', }, }, 128 => { Name => 'Reading2Description', DataMember => 'Reading2Description', RawConv => '$$self{Reading2Description} = $val', PrintConv => { 0 => 'Humidity', 3 => 'Moisture', 7 => 'Dew Point', 8 => 'Air Temperature', 9 => 'IR Temperature', 11 => 'Difference Temperature', # Difference Temp: IR-Temp and DewPoint }, }, 132 => { Name => 'Reading2Device', Format => 'string[16]', }, 196 => { Name => 'Reading2Value', Format => 'double', # convert Kelvin -> Celcius and kg/kg -> g/kg ValueConv => q{ return $val - 273.15 if $$self{Reading2Units} == 0x0d and $$self{Reading2Description} != 11; return $val *= 1000 if $$self{Reading2Units} == 0x24; return $val; }, }, 226 => { Name => 'Reading3Units', DataMember => 'Reading3Units', RawConv => '$$self{Reading3Units} = $val', PrintHex => 1, PrintConv => { 0x0d => 'C', 0x1b => '%', 0x1d => 'rel', 0x24 => 'g/kg', }, }, 228 => { Name => 'Reading3Description', DataMember => 'Reading3Description', RawConv => '$$self{Reading3Description} = $val', PrintConv => { 0 => 'Humidity', 3 => 'Moisture', 7 => 'Dew Point', 8 => 'Air Temperature', 9 => 'IR Temperature', 11 => 'Difference Temperature', # Difference Temp: IR-Temp and DewPoint }, }, 232 => { Name => 'Reading3Device', Format => 'string[16]', }, 296 => { Name => 'Reading3Value', Format => 'double', # convert Kelvin -> Celcius and kg/kg -> g/kg ValueConv => q{ return $val - 273.15 if $$self{Reading3Units} == 0x0d and $$self{Reading3Description} != 11; return $val *= 1000 if $$self{Reading3Units} == 0x24; return $val; }, }, 326 => { Name => 'Reading4Units', DataMember => 'Reading4Units', RawConv => '$$self{Reading4Units} = $val', PrintHex => 1, PrintConv => { 0x0d => 'C', 0x1b => '%', 0x1d => 'rel', 0x24 => 'g/kg', }, }, 328 => { Name => 'Reading4Description', DataMember => 'Reading4Description', RawConv => '$$self{Reading4Description} = $val', PrintConv => { 0 => 'Humidity', 3 => 'Moisture', 7 => 'Dew Point', 8 => 'Air Temperature', 9 => 'IR Temperature', 11 => 'Difference Temperature', # Difference Temp: IR-Temp and DewPoint }, }, 332 => { Name => 'Reading4Device', Format => 'string[16]', }, 396 => { Name => 'Reading4Value', Format => 'double', # convert Kelvin -> Celcius and kg/kg -> g/kg ValueConv => q{ return $val - 273.15 if $$self{Reading4Units} == 0x0d and $$self{Reading4Description} != 11; return $val *= 1000 if $$self{Reading4Units} == 0x24; return $val; }, }, ); # FLIR public image format (ref 4/5) %Image::ExifTool::FLIR::FPF = ( GROUPS => { 0 => 'FLIR', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, NOTES => 'Tags extracted from FLIR Public image Format (FPF) files.', 0x20 => { Name => 'FPFVersion', Format => 'int32u' }, 0x24 => { Name => 'ImageDataOffset', Format => 'int32u' }, 0x28 => { Name => 'ImageType', Format => 'int16u', PrintConv => { 0 => 'Temperature', 1 => 'Temperature Difference', 2 => 'Object Signal', 3 => 'Object Signal Difference', }, }, 0x2a => { Name => 'ImagePixelFormat', Format => 'int16u', PrintConv => { 0 => '2-byte short integer', 1 => '4-byte long integer', 2 => '4-byte float', 3 => '8-byte double', }, }, 0x2c => { Name => 'ImageWidth', Format => 'int16u' }, 0x2e => { Name => 'ImageHeight', Format => 'int16u' }, 0x30 => { Name => 'ExternalTriggerCount',Format => 'int32u' }, 0x34 => { Name => 'SequenceFrameNumber',Format => 'int32u' }, 0x78 => { Name => 'CameraModel', Format => 'string[32]', Groups => { 2 => 'Camera' } }, 0x98 => { Name => 'CameraPartNumber', Format => 'string[32]', Groups => { 2 => 'Camera' } }, 0xb8 => { Name => 'CameraSerialNumber', Format => 'string[32]', Groups => { 2 => 'Camera' } }, 0xd8 => { Name => 'CameraTemperatureRangeMin', %floatKelvin, Groups => { 2 => 'Camera' } }, 0xdc => { Name => 'CameraTemperatureRangeMax', %floatKelvin, Groups => { 2 => 'Camera' } }, 0xe0 => { Name => 'LensModel', Format => 'string[32]', Groups => { 2 => 'Camera' } }, 0x100 => { Name => 'LensPartNumber', Format => 'string[32]', Groups => { 2 => 'Camera' } }, 0x120 => { Name => 'LensSerialNumber', Format => 'string[32]', Groups => { 2 => 'Camera' } }, 0x140 => { Name => 'FilterModel', Format => 'string[32]', Groups => { 2 => 'Camera' } }, 0x150 => { Name => 'FilterPartNumber', Format => 'string[32]', Groups => { 2 => 'Camera' } }, 0x180 => { Name => 'FilterSerialNumber',Format => 'string[32]', Groups => { 2 => 'Camera' } }, 0x1e0 => { Name => 'Emissivity', %float2f }, 0x1e4 => { Name => 'ObjectDistance', Format => 'float', PrintConv => 'sprintf("%.2f m",$val)' }, 0x1e8 => { Name => 'ReflectedApparentTemperature', %floatKelvin }, 0x1ec => { Name => 'AtmosphericTemperature', %floatKelvin }, 0x1f0 => { Name => 'RelativeHumidity', Format => 'float', PrintConv => 'sprintf("%.1f %%",$val*100)' }, 0x1f4 => { Name => 'ComputedAtmosphericTrans', %float2f }, 0x1f8 => { Name => 'EstimatedAtmosphericTrans',%float2f }, 0x1fc => { Name => 'ReferenceTemperature', %floatKelvin }, 0x200 => { Name => 'IRWindowTemperature', %floatKelvin, Groups => { 2 => 'Camera' } }, 0x204 => { Name => 'IRWindowTransmission', %float2f, Groups => { 2 => 'Camera' } }, 0x248 => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, Format => 'int32u[7]', ValueConv => 'sprintf("%.4d:%.2d:%.2d %.2d:%.2d:%.2d.%.3d",split(" ",$val))', PrintConv => '$self->ConvertDateTime($val)', }, # Notes (based on ref 4): # 1) The above date/time structure is documented to be 32 bytes for FPFVersion 1, but in # fact it is only 28. Maybe this is why the full header length of my FPFVersion 2 # sample is 892 bytes instead of 896. If this was a documentation error, we are OK, # but if the alignment was really different in version 1, then the temperatures below # will be mis-aligned. I don't have any version 1 samples to check this. # 2) The following temperatures may not always be in Kelvin 0x2a4 => { Name => 'CameraScaleMin', %float1f }, 0x2a8 => { Name => 'CameraScaleMax', %float1f }, 0x2ac => { Name => 'CalculatedScaleMin',%float1f }, 0x2b0 => { Name => 'CalculatedScaleMax',%float1f }, 0x2b4 => { Name => 'ActualScaleMin', %float1f }, 0x2b8 => { Name => 'ActualScaleMax', %float1f }, ); # top-level user data written by FLIR cameras in MP4 videos %Image::ExifTool::FLIR::UserData = ( GROUPS => { 1 => 'FLIR', 2 => 'Camera' }, NOTES => q{ Tags written by some FLIR cameras in a top-level (!) "udta" atom of MP4 videos. }, uuid => [ { Name => 'FLIR_Parts', Condition => '$$valPt=~/^\x43\xc3\x99\x3b\x0f\x94\x42\x4b\x82\x05\x6b\x66\x51\x3f\x48\x5d/s', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::Parts', Start => 16, }, }, { Name => 'FLIR_Serial', Condition => '$$valPt=~/^\x57\xf5\xb9\x3e\x51\xe4\x48\xaf\xa0\xd9\xc3\xef\x1b\x37\xf7\x12/s', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::SerialNums', Start => 16, }, }, { Name => 'FLIR_Params', Condition => '$$valPt=~/^\x41\xe5\xdc\xf9\xe8\x0a\x41\xce\xad\xfe\x7f\x0c\x58\x08\x2c\x19/s', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::Params', Start => 16, }, }, { Name => 'FLIR_UnknownUUID', Condition => '$$valPt=~/^\x57\x45\x20\x50\x2c\xbb\x44\xad\xae\x54\x15\xe9\xb8\x39\xd9\x03/s', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::UnknownUUID', Start => 16, }, }, { Name => 'FLIR_GPS', Condition => '$$valPt=~/^\x7f\x2e\x21\x00\x8b\x46\x49\x18\xaf\xb1\xde\x70\x9a\x74\xf6\xf5/s', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::GPS_UUID', Start => 16, }, }, { Name => 'FLIR_MoreInfo', Condition => '$$valPt=~/^\x2b\x45\x2f\xdc\x74\x35\x40\x94\xba\xee\x22\xa6\xb2\x3a\x7c\xf8/s', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::MoreInfo', Start => 16, }, }, { Name => 'SoftwareComponents', Condition => '$$valPt=~/^\x78\x3f\xc7\x83\x0c\x95\x4b\x00\x8c\xc7\xac\xf1\xec\xb4\xd3\x9a/s', Unknown => 1, ValueConv => 'join " ", unpack "x20N4xZ*", $val', }, { Name => 'FLIR_Unknown', Condition => '$$valPt=~/^\x52\xae\xda\x45\x17\x1e\x48\xb1\x92\x47\x93\xa4\x21\x4e\x43\xf5/s', Unknown => 1, ValueConv => 'unpack "x20C*", $val', }, { Name => 'Units', Condition => '$$valPt=~/^\xf8\xab\x72\x1e\x84\x73\x44\xa0\xb8\xc8\x1b\x04\x82\x6e\x07\x24/s', List => 1, RawConv => 'my @a = split "\0", substr($val, 20); \@a', }, { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Condition => '$$valPt=~/^\x91\xaf\x9b\x93\x45\x9b\x44\x56\x98\xd1\x5e\x76\xea\x01\x04\xac....\xff\xd8\xff/s', RawConv => 'substr($val, 20)', Binary => 1, }, ], ); # uuid 43c3993b0f94424b82056b66513f485d box of MP4 videos (ref PH) %Image::ExifTool::FLIR::Parts = ( GROUPS => { 0 => 'MakerNotes', 1 => 'FLIR', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'undef', NOTES => q{ Tags extracted from the "uuid" box with ID 43c3993b0f94424b82056b66513f485d in FLIR MP4 videos. }, 4 => [ { Name => 'BAHPVer', Condition => '$$valPt =~ /^bahpver\0/', Format => 'undef[$size]', RawConv => 'join " ", split "\0", substr($val, 8)', }, { Name => 'BALPVer', Condition => '$$valPt =~ /^balpver\0/', Format => 'undef[$size]', ValueConv => 'join " ", split "\0", substr($val, 8)', }, { Name => 'Battery', Condition => '$$valPt =~ /^battery\0/', Format => 'undef[$size]', ValueConv => 'join " ", split "\0", substr($val, 8)', }, { Name => 'BAVPVer', Condition => '$$valPt =~ /^bavpver\0/', Format => 'undef[$size]', ValueConv => 'join " ", split "\0", substr($val, 8)', # (the first string corresponds with a lens part number) }, { Name => 'CamCore', Condition => '$$valPt =~ /^camcore\0/', Format => 'undef[$size]', ValueConv => 'join " ", split "\0", substr($val, 8)', }, { Name => 'DetectorBoard', Condition => '$$valPt =~ /^det_board\0/', Format => 'undef[$size]', ValueConv => 'join " ", split "\0", substr($val, 10)', }, { Name => 'Detector', Condition => '$$valPt =~ /^detector\0/', Format => 'undef[$size]', ValueConv => 'join " ", split "\0", substr($val, 9)', }, { Name => 'GIDCVer', Condition => '$$valPt =~ /^gidcver\0/', Format => 'undef[$size]', ValueConv => 'join " ", split "\0", substr($val, 8)', }, { Name => 'GIDPVer', Condition => '$$valPt =~ /^gidpver\0/', Format => 'undef[$size]', ValueConv => 'join " ", split "\0", substr($val, 8)', }, { Name => 'GIPC_CPLD', Condition => '$$valPt =~ /^gipccpld\0/', Format => 'undef[$size]', ValueConv => 'join " ", split "\0", substr($val, 9)', }, { Name => 'GIPCVer', Condition => '$$valPt =~ /^gipcver\0/', Format => 'undef[$size]', ValueConv => 'join " ", split "\0", substr($val, 8)', }, { Name => 'GIXIVer', Condition => '$$valPt =~ /^gixiver\0/', Format => 'undef[$size]', ValueConv => 'join " ", split "\0", substr($val, 8)', }, { Name => 'MainBoard', Condition => '$$valPt =~ /^mainboard\0/', Format => 'undef[$size]', ValueConv => 'join " ", split "\0", substr($val, 10)', }, { Name => 'Optics', Condition => '$$valPt =~ /^optics\0/', Format => 'undef[$size]', ValueConv => 'join " ", split "\0", substr($val, 7)', }, { Name => 'PartNumber', Format => 'undef[$size]', ValueConv => 'join " ", split "\0", $val', }, ], ); # uuid 57f5b93e51e448afa0d9c3ef1b37f712 box of MP4 videos (ref PH) %Image::ExifTool::FLIR::SerialNums = ( GROUPS => { 0 => 'MakerNotes', 1 => 'FLIR', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FIRST_ENTRY => 0, NOTES => q{ Tags extracted from the "uuid" box with ID 57f5b93e51e448afa0d9c3ef1b37f712 in FLIR MP4 videos. }, # (not sure if these offsets are constant) 0x0c => { Name => 'UnknownSerial1', Format => 'string[33]', Unknown => 1 }, 0x2d => { Name => 'UnknownSerial2', Format => 'string[33]', Unknown => 1 }, 0x4e => { Name => 'UnknownSerial3', Format => 'string[33]', Unknown => 1 }, 0x6f => { Name => 'UnknownSerial4', Format => 'string[11]', Unknown => 1 }, 0x7b => { Name => 'UnknownNumber', Format => 'string[3]', Unknown => 1 }, 0x7e => { Name => 'CameraSerialNumber', Format => 'string[9]' }, ); # uuid 41e5dcf9e80a41ceadfe7f0c58082c19 box of MP4 videos (ref PH) %Image::ExifTool::FLIR::Params = ( GROUPS => { 0 => 'MakerNotes', 1 => 'FLIR', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'float', FIRST_ENTRY => 0, NOTES => q{ Tags extracted from the "uuid" box with ID 41e5dcf9e80a41ceadfe7f0c58082c19 in FLIR MP4 videos. }, 1 => { Name => 'ReflectedApparentTemperature', %floatKelvin }, 2 => { Name => 'AtmosphericTemperature', %floatKelvin }, 3 => { Name => 'Emissivity', %float2f }, 4 => { Name => 'ObjectDistance', PrintConv => 'sprintf("%.2f m",$val)' }, 5 => { Name => 'RelativeHumidity', PrintConv => 'sprintf("%.1f %%",$val*100)' }, 6 => { Name => 'EstimatedAtmosphericTrans', %float2f }, 7 => { Name => 'IRWindowTemperature', %floatKelvin }, 8 => { Name => 'IRWindowTransmission', %float2f }, ); # uuid 574520502cbb44adae5415e9b839d903 box of MP4 videos (ref PH) %Image::ExifTool::FLIR::UnknownUUID = ( GROUPS => { 0 => 'MakerNotes', 1 => 'FLIR', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'float', FIRST_ENTRY => 0, NOTES => q{ Tags extracted from the "uuid" box with ID 574520502cbb44adae5415e9b839d903 in FLIR MP4 videos. }, # 1 - 1 # 2 - 0 # 3 - 0 ); # uuid 7f2e21008b464918afb1de709a74f6f5 box of MP4 videos (ref PH) %Image::ExifTool::FLIR::GPS_UUID = ( GROUPS => { 0 => 'MakerNotes', 1 => 'FLIR', 2 => 'Location' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'float', FIRST_ENTRY => 0, NOTES => q{ Tags extracted from the "uuid" box with ID 7f2e21008b464918afb1de709a74f6f5 in FLIR MP4 videos. }, 1 => { Name => 'GPSLatitude', RawConv => 'require Image::ExifTool::GPS; $val', # to load Composite tags and routines PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', }, 2 => { Name => 'GPSLongitude', PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")', }, 3 => { Name => 'GPSAltitude', PrintConv => '$val=int($val*100+0.5)/100;"$val m"', }, # 4 - int32u: 0x0001bf74 # 5 - int32u: 0 # 6 - int32u: 1 ); # uuid 2b452fdc74354094baee22a6b23a7cf8 box of MP4 videos (ref PH) %Image::ExifTool::FLIR::MoreInfo = ( GROUPS => { 0 => 'MakerNotes', 1 => 'FLIR', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FIRST_ENTRY => 0, NOTES => q{ Tags extracted from the "uuid" box with ID 2b452fdc74354094baee22a6b23a7cf8 in FLIR MP4 videos. }, 5 => { Name => 'LensModel', Format => 'string[6]' }, 11 => { Name => 'UnknownTemperature1', %floatKelvin, Unknown => 1 }, # (-14.9 C) 15 => { Name => 'UnknownTemperature2', %floatKelvin, Unknown => 1 }, # (60.0 C) ); # FLIR AFF tag table (ref PH) %Image::ExifTool::FLIR::AFF = ( GROUPS => { 0 => 'FLIR', 1 => 'FLIR', 2 => 'Image' }, NOTES => 'Tags extracted from FLIR "AFF" SEQ images.', VARS => { ALPHA_FIRST => 1 }, "_header" => { Name => 'AFFHeader', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::Header' }, }, 0x01 => { Name => 'AFF1', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::AFF1' }, }, 0x05 => { Name => 'AFF5', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::AFF5' }, }, ); # AFF record type 1 (ref forum?topic=4898.msg27627) %Image::ExifTool::FLIR::AFF1 = ( GROUPS => { 0 => 'FLIR', 1 => 'FLIR', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int16u', FIRST_ENTRY => 0, 0x00 => { # use this tag only to determine the byte order of the raw data # (the value should be 0x0002 if the byte order is correct) Name => 'RawDataByteOrder', Hidden => 1, RawConv => 'ToggleByteOrder() if $val >= 0x0100; undef', }, 0x01 => { Name => 'SensorWidth', Format => 'int16u' }, 0x02 => { Name => 'SensorHeight', Format => 'int16u' }, ); # AFF record type 5 (ref forum?topic=4898.msg27628) %Image::ExifTool::FLIR::AFF5 = ( GROUPS => { 0 => 'FLIR', 1 => 'FLIR', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int16u', FIRST_ENTRY => 0, 0x12 => { # use this tag only to determine the byte order of the raw data # (the value should be 0x0002 if the byte order is correct) Name => 'RawDataByteOrder', Hidden => 1, RawConv => 'ToggleByteOrder() if $val >= 0x0100; undef', }, 0x13 => { Name => 'SensorWidth', Format => 'int16u' }, 0x14 => { Name => 'SensorHeight', Format => 'int16u' }, ); # FLIR composite tags (ref 1) %Image::ExifTool::FLIR::Composite = ( GROUPS => { 1 => 'FLIR', 2 => 'Camera' }, PeakSpectralSensitivity => { Require => 'FLIR:PlanckB', ValueConv => '14387.6515/$val', PrintConv => 'sprintf("%.1f um", $val)', }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::FLIR'); #------------------------------------------------------------------------------ # Get image type from raw image data # Inputs: 0) ExifTool ref, 1) image data, 2) tag name # Returns: image type (PNG, JPG, TIFF or undef) # - image itself is stored in $$et{$tag} sub GetImageType($$$) { my ($et, $val, $tag) = @_; my ($w, $h) = @$et{"${tag}Width","${tag}Height"}; my $type = 'DAT'; # add TIFF header only if this looks like 16-bit raw data # (note: MakeTiffHeader currently works only for little-endian, # and I haven't seen any big-endian samples, but check anwyay) if ($val =~ /^\x89PNG\r\n\x1a\n/) { $type = 'PNG'; } elsif ($val =~ /^\xff\xd8\xff/) { # (haven't seen this, but just in case - PH) $type = 'JPG'; } elsif (length $val != $w * $h * 2) { $et->Warn("Unrecognized FLIR $tag data format"); } elsif (GetByteOrder() eq 'II') { require Image::ExifTool::Sony; $val = Image::ExifTool::Sony::MakeTiffHeader($w,$h,1,16) . $val; $type = 'TIFF'; } else { $et->Warn("Don't yet support big-endian TIFF $tag"); } # save image data $$et{$tag} = $val; return $type; } #------------------------------------------------------------------------------ # Unescape FLIR Unicode character # Inputs: 0) escaped character code # Returns: UTF8 character sub UnescapeFLIR($) { my $char = shift; return $char unless length $char eq 4; # escaped ASCII char (eg. '\\') my $val = hex $char; return chr($val) if $val < 0x80; # simple ASCII return pack('C0U', $val) if $] >= 5.006001; return Image::ExifTool::PackUTF8($val); } #------------------------------------------------------------------------------ # Process FLIR text info record (ref PH) # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessFLIRText($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen}; return 0 if $dirLen < 12; $et->VerboseDir('FLIR Text'); my $dat = substr($$dataPt, $dirStart+12, $dirLen-12); $dat =~ s/\0.*//s; # truncate at null # the parameter text contains an additional header entry... if ($tagTablePtr eq \%Image::ExifTool::FLIR::ParamInfo and $dat =~ /# (Generated) at (.*?)[\n\r]/) { $et->HandleTag($tagTablePtr, $1, $2); } for (;;) { $dat =~ /.(\d+).(label|value|param) (unicode|text) "(.*)"/g or last; my ($tag, $val) = (ucfirst($2) . $1, $4); if ($3 eq 'unicode' and $val =~ /\\/) { # convert escaped Unicode characters (backslash followed by 4 hex digits) $val =~ s/\\([0-9a-fA-F]{4}|.)/UnescapeFLIR($1)/sge; $et->Decode($val, 'UTF8'); } $$tagTablePtr{$tag} or AddTagToTable($tagTablePtr, $tag, { Name => $tag }); $et->HandleTag($tagTablePtr, $tag, $val); } return 1; } #------------------------------------------------------------------------------ # Process FLIR measurement tool record (ref 6) # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success # (code-driven decoding isn't pretty, but sometimes it is necessary) sub ProcessMeasInfo($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart} || 0; my $dataPos = $$dirInfo{DataPos}; my $dirEnd = $dirStart + $$dirInfo{DirLen}; my $verbose = $et->Options('Verbose'); my $pos = $dirStart + 12; return 0 if $pos > $dirEnd; ToggleByteOrder() if Get16u($dataPt, $dirStart) >= 0x100; my ($i, $t, $p); for ($i=1; ; ++$i) { last if $pos + 2 > $dirEnd; my $recLen = Get16u($dataPt, $pos); last if $recLen < 0x28 or $pos + $recLen > $dirEnd; my $pre = 'Meas' . $i; $et->VerboseDir("MeasInfo $i", undef, $recLen); if ($verbose > 2) { HexDump($dataPt, $recLen, Start=>$pos, Prefix=>$$et{INDENT}, DataPos=>$dataPos); } my $coordLen = Get16u($dataPt, $pos+4); # generate tag table entries for this tool if necessary foreach $t ('Type', 'Params', 'Label') { my $tag = $pre . $t; last if $$tagTablePtr{$tag}; my $tagInfo = { Name => $tag }; $$tagInfo{PrintConv} = $$tagTablePtr{"Meas1$t"}{PrintConv}; AddTagToTable($tagTablePtr, $tag, $tagInfo); } # extract measurement tool type $et->HandleTag($tagTablePtr, "${pre}Type", undef, DataPt=>$dataPt, DataPos=>$dataPos, Start=>$pos+0x0a, Size=>2); last if $pos + 0x24 + $coordLen > $dirEnd; # extract measurement parameters $et->HandleTag($tagTablePtr, "${pre}Params", undef, DataPt=>$dataPt, DataPos=>$dataPos, Start=>$pos+0x24, Size=>$coordLen); my @uni; # extract label (sometimes-null-terminated Unicode) for ($p=0x24+$coordLen; $p<$recLen-1; $p+=2) { my $ch = Get16u($dataPt, $p+$pos); # FLIR Tools v2.0 for Mac doesn't properly null-terminate these strings, # so end the string at any funny character last if $ch < 0x20 or $ch > 0x7f; push @uni, $ch; } # convert to the ExifTool character set require Image::ExifTool::Charset; my $val = Image::ExifTool::Charset::Recompose($et, \@uni); $et->HandleTag($tagTablePtr, "${pre}Label", $val, DataPt=>$dataPt, DataPos=>$dataPos, Start=>$pos+0x24+$coordLen, Size=>2*scalar(@uni)); $pos += $recLen; # step to next record } return 1; } #------------------------------------------------------------------------------ # Process FLIR FFF record (ref PH/1/3) # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 if this was a valid FFF record sub ProcessFLIR($$;$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $raf = $$dirInfo{RAF} || new File::RandomAccess($$dirInfo{DataPt}); my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my ($i, $hdr, $buff, $rec); # read and verify FFF header $raf->Read($hdr, 0x40) == 0x40 and $hdr =~ /^([AF]FF)\0/ or return 0; my $type = $1; # set file type if reading from FFF or SEQ file ($tagTablePtr will not be defined) $et->SetFileType($type eq 'FFF' ? 'FLIR' : 'SEQ') unless $tagTablePtr; # FLIR file header (ref 3) # 0x00 - string[4] file format ID = "FFF\0" # 0x04 - string[16] file creator: seen "\0","MTX IR\0","CAMCTRL\0" # 0x14 - int32u file format version = 100 # 0x18 - int32u offset to record directory # 0x1c - int32u number of entries in record directory # 0x20 - int32u next free index ID = 2 # 0x24 - int16u swap pattern = 0 (?) # 0x28 - int16u[7] spares # 0x34 - int32u[2] reserved # 0x3c - int32u checksum # determine byte ordering by validating version number # (in my samples FLIR APP1 is big-endian, FFF files are little-endian) for ($i=0; ; ++$i) { my $ver = Get32u(\$hdr, 0x14); last if $ver >= 100 and $ver < 200; # (have seen 100 and 101 - PH) ToggleByteOrder(); $i and $et->Warn("Unsupported FLIR $type version"), return 1; } # read the FLIR record directory my $pos = Get32u(\$hdr, 0x18); my $num = Get32u(\$hdr, 0x1c); unless ($raf->Seek($pos) and $raf->Read($buff, $num * 0x20) == $num * 0x20) { $et->Warn('Truncated FLIR FFF directory'); return 1; } unless ($tagTablePtr) { $tagTablePtr = GetTagTable("Image::ExifTool::FLIR::$type"); $$et{SET_GROUP0} = 'FLIR'; # (set group 0 to 'FLIR' for FFF files) } # process the header data $et->HandleTag($tagTablePtr, '_header', $hdr); my $oldIndent = $$et{INDENT}; $$et{INDENT} .= '| '; $et->VerboseDir($type, $num); for ($i=0; $i<$num; ++$i) { # FLIR record entry (ref 3): # 0x00 - int16u record type # 0x02 - int16u record subtype: RawData 1=BE, 2=LE, 3=PNG; 1 for other record types # 0x04 - int32u record version: seen 0x64,0x66,0x67,0x68,0x6f,0x104 # 0x08 - int32u index id = 1 # 0x0c - int32u record offset from start of FLIR data # 0x10 - int32u record length # 0x14 - int32u parent = 0 (?) # 0x18 - int32u object number = 0 (?) # 0x1c - int32u checksum: 0 for no checksum my $entry = $i * 0x20; my $recType = Get16u(\$buff, $entry); next if $recType == 0; # ignore free records my $recPos = Get32u(\$buff, $entry + 0x0c); my $recLen = Get32u(\$buff, $entry + 0x10); $verbose and printf $out "%sFLIR Record 0x%.2x, offset 0x%.4x, length 0x%.4x\n", $$et{INDENT}, $recType, $recPos, $recLen; unless ($raf->Seek($recPos) and $raf->Read($rec, $recLen) == $recLen) { $et->Warn('Invalid FLIR record'); last; } if ($$tagTablePtr{$recType}) { $et->HandleTag($tagTablePtr, $recType, undef, DataPt => \$rec, DataPos => $recPos, Start => 0, Size => $recLen, Index => $i, ); } elsif ($verbose > 2) { my %parms = ( DataPos => $recPos, Prefix => $$et{INDENT} ); $parms{MaxLen} = 96 if $verbose < 4; HexDump(\$rec, $recLen, %parms); } } delete $$et{SET_GROUP0}; $$et{INDENT} = $oldIndent; return 1; } #------------------------------------------------------------------------------ # Process FLIR public image format (FPF) file (ref PH/4) # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 if this was a valid FFF file sub ProcessFPF($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $buff; $raf->Read($buff, 892) == 892 and $buff =~ /^FPF Public Image Format\0/ or return 0; # I think these are always little-endian, but check FPFVersion just in case SetByteOrder('II'); ToggleByteOrder() unless Get32u(\$buff, 0x20) & 0xffff; my $tagTablePtr = GetTagTable('Image::ExifTool::FLIR::FPF'); $et->SetFileType(); $et->ProcessDirectory( { DataPt => \$buff, Parent => 'FPF' }, $tagTablePtr); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::FLIR - Read FLIR meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains the definitions to read meta information from FLIR Systems Inc. thermal image files (FFF, FPF and JPEG format). =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4898.0.html> =item L<http://www.nuage.ch/site/flir-i7-some-analysis/> =item L<http://www.workswell.cz/manuals/flir/hardware/A3xx_and_A6xx_models/Streaming_format_ThermoVision.pdf> =item L<http://support.flir.com/DocDownload/Assets/62/English/1557488%24A.pdf> =item L<http://code.google.com/p/dvelib/source/browse/trunk/flirPublicFormat/fpfConverter/Fpfimg.h?spec=svn3&r=3> =item L<http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5538.0.html> =back =head1 ACKNOWLEDGEMENTS Thanks to Tomas for his hard work in decoding much of this information, and to Jens Duttke for getting me started on this format. =head1 SEE ALSO L<Image::ExifTool::TagNames/FLIR Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Font.pm�����������������������������������������������������000644 �000765 �000024 �00000066025 12642461277 021174� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Font.pm # # Description: Read meta information from font files # # Revisions: 2010/01/15 - P. Harvey Created # # References: 1) http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6.html # 2) http://www.microsoft.com/typography/otspec/otff.htm # 3) http://partners.adobe.com/public/developer/opentype/index_font_file.html # 4) http://partners.adobe.com/public/developer/en/font/5178.PFM.pdf # 5) http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/util/MimeMappings.java # 6) http://www.adobe.com/devnet/font/pdfs/5004.AFM_Spec.pdf #------------------------------------------------------------------------------ package Image::ExifTool::Font; use strict; use vars qw($VERSION %ttLang); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.08'; sub ProcessOTF($$); # TrueType 'name' platform codes my %ttPlatform = ( 0 => 'Unicode', 1 => 'Macintosh', 2 => 'ISO', 3 => 'Windows', 4 => 'Custom', ); # convert TrueType 'name' character encoding to ExifTool Charset (ref 1/2) my %ttCharset = ( Macintosh => { 0 => 'MacRoman', 17 => 'MacMalayalam', 1 => 'MacJapanese', 18 => 'MacSinhalese', 2 => 'MacChineseTW', 19 => 'MacBurmese', 3 => 'MacKorean', 20 => 'MacKhmer', 4 => 'MacArabic', 21 => 'MacThai', 5 => 'MacHebrew', 22 => 'MacLaotian', 6 => 'MacGreek', 23 => 'MacGeorgian', 7 => 'MacCyrillic', 24 => 'MacArmenian', # 7=Russian 8 => 'MacRSymbol', 25 => 'MacChineseCN', 9 => 'MacDevanagari', 26 => 'MacTibetan', 10 => 'MacGurmukhi', 27 => 'MacMongolian', 11 => 'MacGujarati', 28 => 'MacGeez', 12 => 'MacOriya', 29 => 'MacCyrillic', # 29=Slavic 13 => 'MacBengali', 30 => 'MacVietnam', 14 => 'MacTamil', 31 => 'MacSindhi', 15 => 'MacTelugu', 32 => '', # 32=uninterpreted 16 => 'MacKannada', }, Windows => { 0 => 'Symbol', 4 => 'Big5', 1 => 'UCS2', 5 => 'Wansung', 2 => 'ShiftJIS', 6 => 'Johab', 3 => 'PRC', 10 => 'UCS4', }, Unicode => { # (we don't currently handle the various Unicode flavours) 0 => 'UCS2', # Unicode 1.0 semantics 1 => 'UCS2', # Unicode 1.1 semantics 2 => 'UCS2', # ISO 10646 semantics 3 => 'UCS2', # Unicode 2.0 and onwards semantics, Unicode BMP only. 4 => 'UCS2', # Unicode 2.0 and onwards semantics, Unicode full repertoire. # 5 => Unicode Variation Sequences (not used in Naming table) }, ISO => { # (deprecated) 0 => 'UTF8', # (7-bit ASCII) 1 => 'UCS2', # ISO 10646 2 => 'Latin', # ISO 8859-1 }, Custom => { }, ); # convert TrueType 'name' language code to ExifTool language code %ttLang = ( # Macintosh language codes (also used by QuickTime.pm) # oddities: # 49 - Cyrllic version 83 - Roman # 50 - Arabic version 84 - Arabic # 146 - with dot above Macintosh => { 0 => 'en', 24 => 'lt', 48 => 'kk', 72 => 'ml', 129 => 'eu', 1 => 'fr', 25 => 'pl', 49 => 'az', 73 => 'kn', 130 => 'ca', 2 => 'de', 26 => 'hu', 50 => 'az', 74 => 'ta', 131 => 'la', 3 => 'it', 27 => 'et', 51 => 'hy', 75 => 'te', 132 => 'qu', 4 => 'nl', 28 => 'lv', 52 => 'ka', 76 => 'si', 133 => 'gn', 5 => 'sv', 29 => 'smi', 53 => 'ro', 77 => 'my', 134 => 'ay', 6 => 'es', 30 => 'fo', 54 => 'ky', 78 => 'km', 135 => 'tt', 7 => 'da', 31 => 'fa', 55 => 'tg', 79 => 'lo', 136 => 'ug', 8 => 'pt', 32 => 'ru', 56 => 'tk', 80 => 'vi', 137 => 'dz', 9 => 'no', 33 => 'zh-CN', 57 => 'mn-MN', 81 => 'id', 138 => 'jv', 10 => 'he', 34 => 'nl', 58 => 'mn-CN', 82 => 'tl', 139 => 'su', 11 => 'ja', 35 => 'ga', 59 => 'ps', 83 => 'ms-MY', 140 => 'gl', 12 => 'ar', 36 => 'sq', 60 => 'ku', 84 => 'ms-BN', 141 => 'af', 13 => 'fi', 37 => 'ro', 61 => 'ks', 85 => 'am', 142 => 'br', 14 => 'iu', 38 => 'cs', 62 => 'sd', 86 => 'ti', 144 => 'gd', 15 => 'is', 39 => 'sk', 63 => 'bo', 87 => 'om', 145 => 'vg', 16 => 'mt', 40 => 'sl', 64 => 'ne', 88 => 'so', 146 => 'ga', 17 => 'tr', 41 => 'yi', 65 => 'sa', 89 => 'sw', 147 => 'rar', 18 => 'hr', 42 => 'sr', 66 => 'mr', 90 => 'rw', 148 => 'el', 19 => 'zh-TW', 43 => 'mk', 67 => 'bn', 91 => 'rn', 149 => 'kl', 20 => 'ur', 44 => 'bg', 68 => 'as', 92 => 'ny', 150 => 'az', 21 => 'hi', 45 => 'uk', 69 => 'gu', 93 => 'mg', 22 => 'th', 46 => 'be', 70 => 'pa', 94 => 'eo', 23 => 'ko', 47 => 'uz', 71 => 'or', 128 => 'cy', }, # Windows language codes (http://msdn.microsoft.com/en-us/library/0h88fahh(VS.85).aspx) # Notes: This isn't an exact science. The reference above gives language codes # which are different from some ISO 639-1 numbers. Also, some Windows language # codes don't appear to have ISO 639-1 equivalents. # 0x0428 - fa by ref above # 0x048c - no ISO equivalent # 0x081a/0x83c - sr-SP # 0x0c0a - modern? # 0x2409 - Carribean country code not found in ISO 3166-1 Windows => { 0x0401 => 'ar-SA', 0x0438 => 'fo', 0x0481 => 'mi', 0x1409 => 'en-NZ', 0x0402 => 'bg', 0x0439 => 'hi', 0x0482 => 'oc', 0x140a => 'es-CR', 0x0403 => 'ca', 0x043a => 'mt', 0x0483 => 'co', 0x140c => 'fr-LU', 0x0404 => 'zh-TW', 0x043b => 'se-NO', 0x0484 => 'gsw', 0x141a => 'bs-BA', 0x0405 => 'cs', 0x043c => 'gd', 0x0485 => 'sah', 0x143b => 'smj-SE', 0x0406 => 'da', 0x043d => 'yi', 0x0486 => 'ny', 0x1801 => 'ar-MA', 0x0407 => 'de-DE', 0x043e => 'ms-MY', 0x0487 => 'rw', 0x1809 => 'en-IE', 0x0408 => 'el', 0x043f => 'kk', 0x048c => 'Dari', 0x180a => 'es-PA', 0x0409 => 'en-US', 0x0440 => 'ky', 0x0801 => 'ar-IQ', 0x180c => 'fr-MC', 0x040a => 'es-ES', 0x0441 => 'sw', 0x0804 => 'zh-CN', 0x181a => 'sr-BA', 0x040b => 'fi', 0x0442 => 'tk', 0x0807 => 'de-CH', 0x183b => 'sma-NO', 0x040c => 'fr-FR', 0x0443 => 'uz-UZ', 0x0809 => 'en-GB', 0x1c01 => 'ar-TN', 0x040d => 'he', 0x0444 => 'tt', 0x080a => 'es-MX', 0x1c09 => 'en-ZA', 0x040e => 'hu', 0x0445 => 'bn-IN', 0x080c => 'fr-BE', 0x1c0a => 'es-DO', 0x040f => 'is', 0x0446 => 'pa', 0x0810 => 'it-CH', 0x1c1a => 'sr-BA', 0x0410 => 'it-IT', 0x0447 => 'gu', 0x0813 => 'nl-BE', 0x1c3b => 'sma-SE', 0x0411 => 'ja', 0x0448 => 'wo', 0x0814 => 'nn', 0x2001 => 'ar-OM', 0x0412 => 'ko', 0x0449 => 'ta', 0x0816 => 'pt-PT', 0x2009 => 'en-JM', 0x0413 => 'nl-NL', 0x044a => 'te', 0x0818 => 'ro-MO', 0x200a => 'es-VE', 0x0414 => 'no-NO', 0x044b => 'kn', 0x0819 => 'ru-MO', 0x201a => 'bs-BA', 0x0415 => 'pl', 0x044c => 'ml', 0x081a => 'sr-RS', 0x203b => 'sms', 0x0416 => 'pt-BR', 0x044d => 'as', 0x081d => 'sv-FI', 0x2401 => 'ar-YE', 0x0417 => 'rm', 0x044e => 'mr', 0x082c => 'az-AZ', 0x2409 => 'en-CB', 0x0418 => 'ro', 0x044f => 'sa', 0x082e => 'dsb', 0x240a => 'es-CO', 0x0419 => 'ru', 0x0450 => 'mn-MN', 0x083b => 'se-SE', 0x243b => 'smn', 0x041a => 'hr', 0x0451 => 'bo', 0x083c => 'ga', 0x2801 => 'ar-SY', 0x041b => 'sk', 0x0452 => 'cy', 0x083e => 'ms-BN', 0x2809 => 'en-BZ', 0x041c => 'sq', 0x0453 => 'km', 0x0843 => 'uz-UZ', 0x280a => 'es-PE', 0x041d => 'sv-SE', 0x0454 => 'lo', 0x0845 => 'bn-BD', 0x2c01 => 'ar-JO', 0x041e => 'th', 0x0456 => 'gl', 0x0850 => 'mn-CN', 0x2c09 => 'en-TT', 0x041f => 'tr', 0x0457 => 'kok', 0x085d => 'iu-CA', 0x2c0a => 'es-AR', 0x0420 => 'ur', 0x045a => 'syr', 0x085f => 'tmh', 0x3001 => 'ar-LB', 0x0421 => 'id', 0x045b => 'si', 0x086b => 'qu-EC', 0x3009 => 'en-ZW', 0x0422 => 'uk', 0x045d => 'iu-CA', 0x0c01 => 'ar-EG', 0x300a => 'es-EC', 0x0423 => 'be', 0x045e => 'am', 0x0c04 => 'zh-HK', 0x3401 => 'ar-KW', 0x0424 => 'sl', 0x0461 => 'ne', 0x0c07 => 'de-AT', 0x3409 => 'en-PH', 0x0425 => 'et', 0x0462 => 'fy', 0x0c09 => 'en-AU', 0x340a => 'es-CL', 0x0426 => 'lv', 0x0463 => 'ps', 0x0c0a => 'es-ES', 0x3801 => 'ar-AE', 0x0427 => 'lt', 0x0464 => 'fil', 0x0c0c => 'fr-CA', 0x380a => 'es-UY', 0x0428 => 'tg', 0x0465 => 'dv', 0x0c1a => 'sr-RS', 0x3c01 => 'ar-BH', 0x042a => 'vi', 0x0468 => 'ha', 0x0c3b => 'se-FI', 0x3c0a => 'es-PY', 0x042b => 'hy', 0x046a => 'yo', 0x0c6b => 'qu-PE', 0x4001 => 'ar-QA', 0x042c => 'az-AZ', 0x046b => 'qu-BO', 0x1001 => 'ar-LY', 0x4009 => 'en-IN', 0x042d => 'eu', 0x046c => 'st', 0x1004 => 'zh-SG', 0x400a => 'es-BO', 0x042e => 'hsb', 0x046d => 'ba', 0x1007 => 'de-LU', 0x4409 => 'en-MY', 0x042f => 'mk', 0x046e => 'lb', 0x1009 => 'en-CA', 0x440a => 'es-SV', 0x0430 => 'st', 0x046f => 'kl', 0x100a => 'es-GT', 0x4809 => 'en-SG', 0x0431 => 'ts', 0x0470 => 'ig', 0x100c => 'fr-CH', 0x480a => 'es-HN', 0x0432 => 'tn', 0x0478 => 'yi', 0x101a => 'hr-BA', 0x4c0a => 'es-NI', 0x0434 => 'xh', 0x047a => 'arn', 0x103b => 'smj-NO',0x500a => 'es-PR', 0x0435 => 'zu', 0x047c => 'moh', 0x1401 => 'ar-DZ', 0x540a => 'es-US', 0x0436 => 'af', 0x047e => 'br', 0x1404 => 'zh-MO', 0x0437 => 'ka', 0x0480 => 'ug', 0x1407 => 'de-LI', }, Unicode => { }, ISO => { }, Custom => { }, ); # eclectic table of tags for various format font files %Image::ExifTool::Font::Main = ( GROUPS => { 2 => 'Document' }, NOTES => q{ This table contains a collection of tags found in font files of various formats. ExifTool current recognizes OTF, TTF, TTC, DFONT, PFA, PFB, PFM, AFM, ACFM and AMFM font files. }, name => { SubDirectory => { TagTable => 'Image::ExifTool::Font::Name' }, }, PFM => { Name => 'PFMHeader', SubDirectory => { TagTable => 'Image::ExifTool::Font::PFM' }, }, PSInfo => { Name => 'PSFontInfo', SubDirectory => { TagTable => 'Image::ExifTool::Font::PSInfo' }, }, AFM => { Name => 'AFM', SubDirectory => { TagTable => 'Image::ExifTool::Font::AFM' }, }, numfonts => 'NumFonts', fontname => 'FontName', postfont => { Name => 'PostScriptFontName', Description => 'PostScript Font Name', }, ); # TrueType name tags (ref 1/2) %Image::ExifTool::Font::Name = ( GROUPS => { 2 => 'Document' }, NOTES => q{ The following tags are extracted from the TrueType font "name" table found in OTF, TTF, TTC and DFONT files. These tags support localized languages by adding a hyphen followed by a language code to the end of the tag name (eg. "Copyright-fr" or "License-en-US"). Tags with no language code use the default language of "en". }, 0 => { Name => 'Copyright', Groups => { 2 => 'Author' } }, 1 => 'FontFamily', 2 => 'FontSubfamily', 3 => 'FontSubfamilyID', 4 => 'FontName', # full name 5 => 'NameTableVersion', 6 => { Name => 'PostScriptFontName', Description => 'PostScript Font Name' }, 7 => 'Trademark', 8 => 'Manufacturer', 9 => 'Designer', 10 => 'Description', 11 => 'VendorURL', 12 => 'DesignerURL', 13 => 'License', 14 => 'LicenseInfoURL', 16 => 'PreferredFamily', 17 => 'PreferredSubfamily', 18 => 'CompatibleFontName', 19 => 'SampleText', 20 => { Name => 'PostScriptFontName', Description => 'PostScript Font Name', }, 21 => 'WWSFamilyName', 22 => 'WWSSubfamilyName', ); # PostScript Font Metric file header (ref 4) %Image::ExifTool::Font::PFM = ( GROUPS => { 2 => 'Document' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, NOTES => 'Tags extracted from the PFM file header.', 0 => { Name => 'PFMVersion', Format => 'int16u', PrintConv => 'sprintf("%x.%.2x",$val>>8,$val&0xff)', }, 6 => { Name => 'Copyright', Format => 'string[60]', Groups => { 2 => 'Author' } }, 66 => { Name => 'FontType', Format => 'int16u' }, 68 => { Name => 'PointSize', Format => 'int16u' }, 70 => { Name => 'YResolution', Format => 'int16u' }, 72 => { Name => 'XResolution', Format => 'int16u' }, 74 => { Name => 'Ascent', Format => 'int16u' }, 76 => { Name => 'InternalLeading', Format => 'int16u' }, 78 => { Name => 'ExternalLeading', Format => 'int16u' }, 80 => { Name => 'Italic' }, 81 => { Name => 'Underline' }, 82 => { Name => 'Strikeout' }, 83 => { Name => 'Weight', Format => 'int16u' }, 85 => { Name => 'CharacterSet' }, 86 => { Name => 'PixWidth', Format => 'int16u' }, 88 => { Name => 'PixHeight', Format => 'int16u' }, 90 => { Name => 'PitchAndFamily' }, 91 => { Name => 'AvgWidth', Format => 'int16u' }, 93 => { Name => 'MaxWidth', Format => 'int16u' }, 95 => { Name => 'FirstChar' }, 96 => { Name => 'LastChar' }, 97 => { Name => 'DefaultChar' }, 98 => { Name => 'BreakChar' }, 99 => { Name => 'WidthBytes', Format => 'int16u' }, # 101 => { Name => 'DeviceTypeOffset', Format => 'int32u' }, # 105 => { Name => 'FontNameOffset', Format => 'int32u' }, # 109 => { Name => 'BitsPointer', Format => 'int32u' }, # 113 => { Name => 'BitsOffset', Format => 'int32u' }, ); # PostScript FontInfo attributes (PFA, PFB) (ref PH) %Image::ExifTool::Font::PSInfo = ( GROUPS => { 2 => 'Document' }, NOTES => 'Tags extracted from PostScript font files (PFA and PFB).', FullName => { }, FamilyName => { Name => 'FontFamily' }, Weight => { }, ItalicAngle => { }, isFixedPitch=> { }, UnderlinePosition => { }, UnderlineThickness => { }, Copyright => { Groups => { 2 => 'Author' } }, Notice => { Groups => { 2 => 'Author' } }, version => { }, FontName => { }, FontType => { }, FSType => { }, ); # Adobe Font Metrics tags (AFM) (ref 6) %Image::ExifTool::Font::AFM = ( GROUPS => { 2 => 'Document' }, NOTES => 'Tags extracted from Adobe Font Metrics files (AFM, ACFM and AMFM).', 'Creation Date' => { Name => 'CreateDate', Groups => { 2 => 'Time' } }, FontName => { }, FullName => { }, FamilyName => { Name => 'FontFamily' }, Weight => { }, Version => { }, Notice => { Groups => { 2 => 'Author' } }, EncodingScheme => { }, MappingScheme => { }, EscChar => { }, CharacterSet=> { }, Characters => { }, IsBaseFont => { }, # VVector => { }, IsFixedV => { }, CapHeight => { }, XHeight => { }, Ascender => { }, Descender => { }, ); #------------------------------------------------------------------------------ # Read information from a TrueType font collection (TTC) (refs 2,3) # Inputs: 0) ExifTool ref, 1) dirInfo ref # Returns: 1 on success, 0 if this wasn't a valid TrueType font collection sub ProcessTTC($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $i); return 0 unless $raf->Read($buff, 12) == 12; return 0 unless $buff =~ /^ttcf\0[\x01\x02]\0\0/; SetByteOrder('MM'); my $num = Get32u(\$buff, 8); # might as well put a limit on the number of fonts we will parse (< 256) return 0 unless $num < 0x100 and $raf->Read($buff, $num * 4) == $num * 4; $et->SetFileType('TTC'); return 1 if $$et{OPTIONS}{FastScan} and $$et{OPTIONS}{FastScan} == 3; my $tagTablePtr = GetTagTable('Image::ExifTool::Font::Main'); $et->HandleTag($tagTablePtr, 'numfonts', $num); # loop through all fonts in the collection for ($i=0; $i<$num; ++$i) { my $n = $i + 1; $et->VPrint(0, "Font $n:\n"); $$et{SET_GROUP1} = "+$n"; my $offset = Get32u(\$buff, $i * 4); $raf->Seek($offset, 0) or last; ProcessOTF($et, $dirInfo) or last; } delete $$et{SET_GROUP1}; return 1; } #------------------------------------------------------------------------------ # Read information from a TrueType font file (OTF or TTF) (refs 1,2) # Inputs: 0) ExifTool ref, 1) dirInfo ref # Returns: 1 on success, 0 if this wasn't a valid TrueType font file sub ProcessOTF($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($tbl, $buff, $pos, $i); my $base = $$dirInfo{Base} || 0; return 0 unless $raf->Read($buff, 12) == 12; return 0 unless $buff =~ /^(\0\x01\0\0|OTTO|true|typ1|\xa5(kbd|lst))[\0\x01]/; $et->SetFileType($1 eq 'OTTO' ? 'OTF' : 'TTF'); return 1 if $$et{OPTIONS}{FastScan} and $$et{OPTIONS}{FastScan} == 3; SetByteOrder('MM'); my $numTables = Get16u(\$buff, 4); return 0 unless $numTables > 0 and $numTables < 0x200; my $len = $numTables * 16; return 0 unless $raf->Read($tbl, $len) == $len; my $verbose = $et->Options('Verbose'); my $oldIndent = $$et{INDENT}; $$et{INDENT} .= '| '; $et->VerboseDir('TrueType', $numTables) if $verbose; for ($pos=0; $pos<$len; $pos+=16) { # look for 'name' table my $tag = substr($tbl, $pos, 4); next unless $tag eq 'name' or $verbose; my $offset = Get32u(\$tbl, $pos + 8); my $size = Get32u(\$tbl, $pos + 12); unless ($raf->Seek($offset+$base, 0) and $raf->Read($buff, $size) == $size) { $et->Warn("Error reading '$tag' data"); next; } if ($verbose) { $tag =~ s/([\0-\x1f\x80-\xff])/sprintf('\x%.2x',ord $1)/ge; my $str = sprintf("%s%d) Tag '%s' (offset 0x%.4x, %d bytes)\n", $$et{INDENT}, $pos/16, $tag, $offset, $size); $et->VPrint(0, $str); $et->VerboseDump(\$buff, Addr => $offset) if $verbose > 2; next unless $tag eq 'name'; } next unless $size >= 8; my $entries = Get16u(\$buff, 2); my $recEnd = 6 + $entries * 12; if ($recEnd > $size) { $et->Warn('Truncated name record'); last; } my $strStart = Get16u(\$buff, 4); if ($strStart < $recEnd or $strStart > $size) { $et->Warn('Invalid string offset'); last; } # parse language-tag record (in format 1 Naming table only) (ref 2) my %langTag; if (Get16u(\$buff, 0) == 1 and $recEnd + 2 <= $size) { my $langTags = Get16u(\$buff, $recEnd); if ($langTags and $recEnd + 2 + $langTags * 4 < $size) { for ($i=0; $i<$langTags; ++$i) { my $pt = $recEnd + 2 + $i * 4; my $langLen = Get16u(\$buff, $pt); # make sure the language string length is reasonable (UTF-16BE) last if $langLen == 0 or $langLen & 0x01 or $langLen > 40; my $langPt = Get16u(\$buff, $pt + 2) + $strStart; last if $langPt + $langLen > $size; my $lang = substr($buff, $langPt, $langLen); $lang = $et->Decode($lang,'UCS2','MM','UTF8'); $lang =~ tr/-_a-zA-Z0-9//dc; # remove naughty characters $langTag{$i + 0x8000} = $lang; } } } my $tagTablePtr = GetTagTable('Image::ExifTool::Font::Name'); $$et{INDENT} .= '| '; $et->VerboseDir('Name', $entries) if $verbose; for ($i=0; $i<$entries; ++$i) { my $pt = 6 + $i * 12; my $platform = Get16u(\$buff, $pt); my $encoding = Get16u(\$buff, $pt + 2); my $langID = Get16u(\$buff, $pt + 4); my $nameID = Get16u(\$buff, $pt + 6); my $strLen = Get16u(\$buff, $pt + 8); my $strPt = Get16u(\$buff, $pt + 10) + $strStart; if ($strPt + $strLen <= $size) { my $val = substr($buff, $strPt, $strLen); my ($lang, $charset, $extra); my $sys = $ttPlatform{$platform}; # translate from specified encoding if ($sys) { $lang = $ttLang{$sys}{$langID} || $langTag{$langID}; $charset = $ttCharset{$sys}{$encoding}; if (not $charset) { if (not defined $charset and not $$et{FontWarn}) { $et->Warn("Unknown $sys character set ($encoding)"); $$et{FontWarn} = 1; } } else { # translate to ExifTool character set $val = $et->Decode($val, $charset); } } else { $et->Warn("Unknown platform ($platform) for name $nameID"); } # get the tagInfo for our specific language (use 'en' for default) my $tagInfo = $et->GetTagInfo($tagTablePtr, $nameID); if ($tagInfo and $lang and $lang ne 'en') { my $langInfo = Image::ExifTool::GetLangInfo($tagInfo, $lang); $tagInfo = $langInfo if $langInfo; } if ($verbose) { $langID > 0x400 and $langID = sprintf('0x%x', $langID); $extra = ", Plat=$platform/" . ($sys || 'Unknown') . ', ' . "Enc=$encoding/" . ($charset || 'Unknown') . ', ' . "Lang=$langID/" . ($lang || 'Unknown'); } $et->HandleTag($tagTablePtr, $nameID, $val, TagInfo => $tagInfo, DataPt => \$buff, DataPos => $offset, Start => $strPt, Size => $strLen, Index => $i, Extra => $extra, ); } } $$et{INDENT} = $oldIndent . '| '; last unless $verbose; } $$et{INDENT} = $oldIndent; return 1; } #------------------------------------------------------------------------------ # Read information from an Adobe Font Metrics file (AFM, ACFM, AMFM) (ref 6) # Inputs: 0) ExifTool ref, 1) dirInfo ref # Returns: 1 on success, 0 if this wasn't a recognized AFM-type file sub ProcessAFM($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $comment); require Image::ExifTool::PostScript; local $/ = Image::ExifTool::PostScript::GetInputRecordSeparator($raf); $raf->ReadLine($buff); return 0 unless $buff =~ /^Start(Comp|Master)?FontMetrics\s+\d+/; my $ftyp = $1 ? ($1 eq 'Comp' ? 'ACFM' : 'AMFM') : 'AFM'; $et->SetFileType($ftyp, 'application/x-font-afm'); return 1 if $$et{OPTIONS}{FastScan} and $$et{OPTIONS}{FastScan} == 3; my $tagTablePtr = GetTagTable('Image::ExifTool::Font::AFM'); for (;;) { $raf->ReadLine($buff) or last; if (defined $comment and $buff !~ /^Comment\s/) { $et->FoundTag('Comment', $comment); undef $comment; } $buff =~ /^(\w+)\s+(.*?)[\x0d\x0a]/ or next; my ($tag, $val) = ($1, $2); if ($tag eq 'Comment' and $val =~ /^(Creation Date):\s+(.*)/) { ($tag, $val) = ($1, $2); } $val =~ s/^\((.*)\)$/$1/; # (some values may be in brackets) if ($tag eq 'Comment') { # concatinate all comments into a single value $comment = defined($comment) ? "$comment\n$val" : $val; next; } unless ($et->HandleTag($tagTablePtr, $tag, $val)) { # end parsing if we start any subsection last if $tag =~ /^Start/ and $tag ne 'StartDirection'; } } return 1; } #------------------------------------------------------------------------------ # Read information from various format font files # Inputs: 0) ExifTool ref, 1) dirInfo ref # Returns: 1 on success, 0 if this wasn't a recognized Font file sub ProcessFont($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $buf2, $rtnVal); return 0 unless $raf->Read($buff, 24) and $raf->Seek(0,0); if ($buff =~ /^(\0\x01\0\0|OTTO|true|typ1)[\0\x01]/) { # OTF, TTF $rtnVal = ProcessOTF($et, $dirInfo); } elsif ($buff =~ /^ttcf\0[\x01\x02]\0\0/) { # TTC $rtnVal = ProcessTTC($et, $dirInfo); } elsif ($buff =~ /^Start(Comp|Master)?FontMetrics\s+\d+/s) { # AFM $rtnVal = ProcessAFM($et, $dirInfo); } elsif ($buff =~ /^(.{6})?%!(PS-(AdobeFont-|Bitstream )|FontType1-)/s) {# PFA, PFB $raf->Seek(6,0) and $et->SetFileType('PFB') if $1; require Image::ExifTool::PostScript; $rtnVal = Image::ExifTool::PostScript::ProcessPS($et, $dirInfo); } elsif ($buff =~ /^\0[\x01\x02]/ and $raf->Seek(0, 2) and # PFM # validate file size $raf->Tell() > 117 and $raf->Tell() == unpack('x2V',$buff) and # read PFM header $raf->Seek(0,0) and $raf->Read($buff,117) == 117 and # validate "DeviceType" string (must be "PostScript\0") SetByteOrder('II') and $raf->Seek(Get32u(\$buff, 101), 0) and # the DeviceType should be "PostScript\0", but FontForge # incorrectly writes "Postscript\0", so ignore case $raf->Read($buf2, 11) == 11 and lc($buf2) eq "postscript\0") { $et->SetFileType('PFM'); return 1 if $$et{OPTIONS}{FastScan} and $$et{OPTIONS}{FastScan} == 3; SetByteOrder('II'); my $tagTablePtr = GetTagTable('Image::ExifTool::Font::Main'); # process the PFM header $et->HandleTag($tagTablePtr, 'PFM', $buff); # extract the font names my $nameOff = Get32u(\$buff, 105); if ($raf->Seek($nameOff, 0) and $raf->Read($buff, 256) and $buff =~ /^([\x20-\xff]+)\0([\x20-\xff]+)\0/) { $et->HandleTag($tagTablePtr, 'fontname', $1); $et->HandleTag($tagTablePtr, 'postfont', $2); } $rtnVal = 1; } else { $rtnVal = 0; } return $rtnVal; } 1; # end __END__ =head1 NAME Image::ExifTool::Font - Read meta information from font files =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains the routines required by Image::ExifTool to read meta information from various format font files. Currently recognized font file types are OTF, TTF, TTC, DFONT, PFA, PFB, PFM, AFM, ACFM and AMFM. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6.html> =item L<http://www.microsoft.com/typography/otspec/otff.htm> =item L<http://partners.adobe.com/public/developer/opentype/index_font_file.html> =item L<http://partners.adobe.com/public/developer/en/font/5178.PFM.pdf> =item L<http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/util/MimeMappings.java> =item L<http://www.adobe.com/devnet/font/pdfs/5004.AFM_Spec.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Font Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/FotoStation.pm����������������������������������������������000644 �000765 �000024 �00000017743 12642461300 022525� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: FotoStation.pm # # Description: Read/write FotoWare FotoStation trailer # # Revisions: 10/28/2006 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::FotoStation; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.04'; sub ProcessFotoStation($$); %Image::ExifTool::FotoStation::Main = ( PROCESS_PROC => \&ProcessFotoStation, WRITE_PROC => \&ProcessFotoStation, GROUPS => { 2 => 'Image' }, NOTES => q{ The following tables define information found in the FotoWare FotoStation trailer. }, 0x01 => { Name => 'IPTC', SubDirectory => { TagTable => 'Image::ExifTool::IPTC::Main', }, }, 0x02 => { Name => 'SoftEdit', SubDirectory => { TagTable => 'Image::ExifTool::FotoStation::SoftEdit', }, }, 0x03 => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Writable => 1, RawConv => '$self->ValidateImage(\$val,$tag)', }, 0x04 => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Writable => 1, RawConv => '$self->ValidateImage(\$val,$tag)', }, ); # crop coordinate conversions my %cropConv = ( ValueConv => '$val / 1000', ValueConvInv => '$val * 1000', PrintConv => '"$val%"', PrintConvInv => '$val=~tr/ %//d; $val', ); # soft crop record %Image::ExifTool::FotoStation::SoftEdit = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int32s', FIRST_ENTRY => 0, GROUPS => { 2 => 'Image' }, 0 => { Name => 'OriginalImageWidth', }, 1 => 'OriginalImageHeight', 2 => 'ColorPlanes', 3 => { Name => 'XYResolution', ValueConv => '$val / 1000', ValueConvInv => '$val * 1000', }, 4 => { Name => 'Rotation', Notes => q{ rotations are stored as degrees CCW * 100, but converted to degrees CW by ExifTool }, # raw value is 0, 9000, 18000 or 27000 ValueConv => '$val ? 360 - $val / 100 : 0', ValueConvInv => '$val ? (360 - $val) * 100 : 0', }, # 5 Validity Check (0x11222211) 6 => { Name => 'CropLeft', %cropConv, }, 7 => { Name => 'CropTop', %cropConv, }, 8 => { Name => 'CropRight', %cropConv, }, 9 => { Name => 'CropBottom', %cropConv, }, 11 => { Name => 'CropRotation', # raw value in the range -4500 to 4500 ValueConv => '-$val / 100', ValueConvInv => '-$val * 100', }, ); #------------------------------------------------------------------------------ # Read/write FotoStation information in a file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this file didn't contain FotoStation information # - updates DataPos to point to start of FotoStation information # - updates DirLen to trailer length sub ProcessFotoStation($$) { my ($et, $dirInfo) = @_; $et or return 1; # allow dummy access to autoload this package my ($buff, $footer, $dirBuff, $tagTablePtr); my $raf = $$dirInfo{RAF}; my $outfile = $$dirInfo{OutFile}; my $offset = $$dirInfo{Offset} || 0; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my $rtnVal = 0; $$dirInfo{DirLen} = 0; # initialize returned trailer length $raf->Seek(-$offset, 2); # seek to specified offset from end of file # loop through FotoStation records for (;;) { # look for trailer signature last unless $raf->Seek(-10, 1) and $raf->Read($footer, 10) == 10; my ($tag, $size, $sig) = unpack('nNN', $footer); last unless $sig == 0xa1b2c3d4 and $size >= 10 and $raf->Seek(-$size, 1); $size -= 10; # size of data only last unless $raf->Read($buff, $size) == $size; $raf->Seek(-$size, 1); # set variables returned in dirInfo hash $$dirInfo{DataPos} = $raf->Tell(); $$dirInfo{DirLen} += $size + 10; unless ($tagTablePtr) { $tagTablePtr = GetTagTable('Image::ExifTool::FotoStation::Main'); SetByteOrder('MM'); # necessary for the binary data $rtnVal = 1; # we found a valid FotoStation trailer } unless ($outfile) { # print verbose trailer information if ($verbose or $$et{HTML_DUMP}) { $et->DumpTrailer({ RAF => $raf, DataPos => $$dirInfo{DataPos}, DirLen => $size + 10, DirName => "FotoStation_$tag", }); } # extract information for this tag $et->HandleTag($tagTablePtr, $tag, $buff, DataPt => \$buff, Start => 0, Size => $size, DataPos => $$dirInfo{DataPos}, ); next; } if ($$et{DEL_GROUP}{FotoStation}) { $verbose and print $out " Deleting FotoStation trailer\n"; $verbose = 0; # no more verbose messages after this ++$$et{CHANGED}; next; } # rewrite this information my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); if ($tagInfo) { my $newVal; my $tagName = $$tagInfo{Name}; if ($$tagInfo{SubDirectory}) { my %subdirInfo = ( DataPt => \$buff, DirStart => 0, DirLen => $size, DataPos => $$dirInfo{DataPos}, DirName => $tagName, Parent => 'FotoStation', ); my $subTable = GetTagTable($tagInfo->{SubDirectory}->{TagTable}); $newVal = $et->WriteDirectory(\%subdirInfo, $subTable); } else { my $nvHash = $et->GetNewValueHash($tagInfo); if ($et->IsOverwriting($nvHash) > 0) { $newVal = $et->GetNewValue($nvHash); $newVal = '' unless defined $newVal; if ($verbose > 1) { my $n = length $newVal; print $out " - FotoStation:$tagName ($size bytes)\n" if $size; print $out " + FotoStation:$tagName ($n bytes)\n" if $n; } ++$$et{CHANGED}; } } if (defined $newVal) { # note: length may be 0 here, but we write the empty record anyway $buff = $newVal; $size = length($newVal) + 10; $footer = pack('nNN', $tag, $size, $sig); } } if (defined $dirBuff) { # maintain original record order $dirBuff = $buff . $footer . $dirBuff; } else { $dirBuff = $buff . $footer; } } # write the modified FotoStation trailer Write($outfile, $dirBuff) or $rtnVal = -1 if $dirBuff; return $rtnVal; } 1; # end __END__ =head1 NAME Image::ExifTool::FotoStation - Read/write FotoWare FotoStation trailer =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read and write information from the FotoWare FotoStation trailer. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Mark Tate for information about the FotoStation data format. =head1 SEE ALSO L<Image::ExifTool::TagNames/FotoStation Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������Image-ExifTool-10.10/lib/Image/ExifTool/FujiFilm.pm�������������������������������������������������000644 �000765 �000024 �00000114142 12650441035 021752� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: FujiFilm.pm # # Description: Read/write FujiFilm maker notes and RAF images # # Revisions: 11/25/2003 - P. Harvey Created # 11/14/2007 - PH Added abilty to write RAF images # # References: 1) http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html # 2) http://homepage3.nifty.com/kamisaka/makernote/makernote_fuji.htm (2007/09/11) # 3) Michael Meissner private communication # 4) Paul Samuelson private communication (S5) # 5) http://www.cybercom.net/~dcoffin/dcraw/ # 6) http://forums.dpreview.com/forums/readflat.asp?forum=1012&thread=31350384 # and http://forum.photome.de/viewtopic.php?f=2&t=353&p=742#p740 # 7) Kai Lappalainen private communication # 8) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5223.0.html # 9) Iliah Borg private communication (LibRaw) # JD) Jens Duttke private communication #------------------------------------------------------------------------------ package Image::ExifTool::FujiFilm; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.53'; sub ProcessFujiDir($$$); sub ProcessFaceRec($$$); # the following RAF version numbers have been tested for writing: my %testedRAF = ( '0100' => 'E550, E900, F770, S5600, S6000fd, S6500fd, HS10/HS11, HS30, S200EXR, X100, XF1, X-Pro1, X-S1, XQ2 Ver1.00', '0101' => 'X-E1, X20 Ver1.01', '0102' => 'S100FS, X10 Ver1.02', '0103' => 'IS Pro Ver1.03', '0104' => 'S5Pro Ver1.04', '0106' => 'S5Pro Ver1.06', '0111' => 'S5Pro Ver1.11', '0114' => 'S9600 Ver1.00', '0159' => 'S2Pro Ver1.00', '0200' => 'X10 Ver2.00', '0212' => 'S3Pro Ver2.12', '0216' => 'S3Pro Ver2.16', # (NC) '0218' => 'S3Pro Ver2.18', '0264' => 'F700 Ver2.00', '0266' => 'S9500 Ver1.01', '0269' => 'S9500 Ver1.02', '0271' => 'S3Pro Ver2.71', # UV/IR model? '0300' => 'X-E2', '0712' => 'S5000 Ver3.00', '0716' => 'S5000 Ver3.00', # (yes, 2 RAF versions with the same Software version) ); my %faceCategories = ( Format => 'int8u', PrintConv => { BITMASK => { 1 => 'Partner', 2 => 'Family', 3 => 'Friend', }}, ); # FujiFilm MakerNotes tags %Image::ExifTool::FujiFilm::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x0 => { Name => 'Version', Writable => 'undef', }, 0x0010 => { #PH (how does this compare to actual serial number?) Name => 'InternalSerialNumber', Writable => 'string', Notes => q{ this number is unique, and contains the date of manufacture, but doesn't necessarily correspond to the camera body number -- this needs to be checked }, # eg) "FPX20017035 592D31313034060427796060110384" # "FPX 20495643 592D313335310701318AD010110047" (F40fd) # yymmdd PrintConv => q{ return $val unless $val=~/^(.*)(\d{2})(\d{2})(\d{2})(.{12})$/; my $yr = $2 + ($2 < 70 ? 2000 : 1900); return "$1 $yr:$3:$4 $5"; }, PrintConvInv => '$_=$val; s/ (19|20)(\d{2}):(\d{2}):(\d{2}) /$2$3$4/; $_', }, 0x1000 => { Name => 'Quality', Writable => 'string', }, 0x1001 => { Name => 'Sharpness', Flags => 'PrintHex', Writable => 'int16u', PrintConv => { 0x01 => 'Soft', 0x02 => 'Soft2', 0x03 => 'Normal', 0x04 => 'Hard', 0x05 => 'Hard2', 0x82 => 'Medium Soft', #2 0x84 => 'Medium Hard', #2 0x8000 => 'Film Simulation', #2 0xffff => 'n/a', #2 }, }, 0x1002 => { Name => 'WhiteBalance', Flags => 'PrintHex', Writable => 'int16u', PrintConv => { 0x0 => 'Auto', 0x100 => 'Daylight', 0x200 => 'Cloudy', 0x300 => 'Daylight Fluorescent', 0x301 => 'Day White Fluorescent', 0x302 => 'White Fluorescent', 0x303 => 'Warm White Fluorescent', #2/PH (S5) 0x304 => 'Living Room Warm White Fluorescent', #2/PH (S5) 0x400 => 'Incandescent', 0x500 => 'Flash', #4 0x600 => 'Underwater', #forum6109 0xf00 => 'Custom', 0xf01 => 'Custom2', #2 0xf02 => 'Custom3', #2 0xf03 => 'Custom4', #2 0xf04 => 'Custom5', #2 # 0xfe0 => 'Gray Point?', #2 0xff0 => 'Kelvin', #4 }, }, 0x1003 => { Name => 'Saturation', Flags => 'PrintHex', Writable => 'int16u', PrintConv => { 0x0 => 'Normal', # # ("Color 0", ref 8) 0x080 => 'Medium High', #2 ("Color +1", ref 8) 0x100 => 'High', # ("Color +2", ref 8) 0x180 => 'Medium Low', #2 ("Color -1", ref 8) 0x200 => 'Low', 0x300 => 'None (B&W)', #2 0x301 => 'B&W Red Filter', #PH/8 0x302 => 'B&W Yellow Filter', #PH (X100) 0x303 => 'B&W Green Filter', #PH/8 0x310 => 'B&W Sepia', #PH (X100) 0x400 => 'Low 2', #8 ("Color -2") 0x8000 => 'Film Simulation', #2 }, }, 0x1004 => { Name => 'Contrast', Flags => 'PrintHex', Writable => 'int16u', PrintConv => { 0x0 => 'Normal', 0x080 => 'Medium High', #2 0x100 => 'High', 0x180 => 'Medium Low', #2 0x200 => 'Low', 0x8000 => 'Film Simulation', #2 }, }, 0x1005 => { #4 Name => 'ColorTemperature', Writable => 'int16u', }, 0x1006 => { #JD Name => 'Contrast', Flags => 'PrintHex', Writable => 'int16u', PrintConv => { 0x0 => 'Normal', 0x100 => 'High', 0x300 => 'Low', }, }, 0x100a => { #2 Name => 'WhiteBalanceFineTune', Writable => 'int32s', Count => 2, PrintConv => 'sprintf("Red %+d, Blue %+d", split(" ", $val))', PrintConvInv => 'my @v=($val=~/-?\d+/g);"@v"', }, 0x100b => { #2 Name => 'NoiseReduction', Flags => 'PrintHex', Writable => 'int16u', PrintConv => { 0x40 => 'Low', 0x80 => 'Normal', 0x100 => 'n/a', #PH (NC) (all X100 samples) }, }, 0x100e => { #PH (X100) Name => 'HighISONoiseReduction', Flags => 'PrintHex', Writable => 'int16u', PrintConv => { 0x000 => 'Normal', # ("NR 0, ref 8) 0x100 => 'Strong', # ("NR+2, ref 8) 0x180 => 'Medium Strong', #8 ("NR+1") 0x200 => 'Weak', # ("NR-2, ref 8) 0x280 => 'Medium Weak', #8 ("NR-1") }, }, 0x1010 => { Name => 'FujiFlashMode', Writable => 'int16u', PrintConv => { 0 => 'Auto', 1 => 'On', 2 => 'Off', 3 => 'Red-eye reduction', 4 => 'External', #JD }, }, 0x1011 => { Name => 'FlashExposureComp', #JD Writable => 'rational64s', }, 0x1020 => { Name => 'Macro', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On', }, }, 0x1021 => { Name => 'FocusMode', Writable => 'int16u', PrintConv => { 0 => 'Auto', 1 => 'Manual', }, }, 0x1022 => { #8/forum6579 Name => 'AFMode', Writable => 'int16u', Notes => '"No" for manual and some AF-multi focus modes', PrintConv => { 0 => 'No', 1 => 'Single Point', 256 => 'Zone', 512 => 'Wide/Tracking', }, }, 0x1023 => { #2 Name => 'FocusPixel', Writable => 'int16u', Count => 2, }, 0x1030 => { Name => 'SlowSync', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On', }, }, 0x1031 => { Name => 'PictureMode', Flags => 'PrintHex', Writable => 'int16u', PrintConv => { 0x0 => 'Auto', 0x1 => 'Portrait', 0x2 => 'Landscape', 0x3 => 'Macro', #JD 0x4 => 'Sports', 0x5 => 'Night Scene', 0x6 => 'Program AE', 0x7 => 'Natural Light', #3 0x8 => 'Anti-blur', #3 0x9 => 'Beach & Snow', #JD 0xa => 'Sunset', #3 0xb => 'Museum', #3 0xc => 'Party', #3 0xd => 'Flower', #3 0xe => 'Text', #3 0xf => 'Natural Light & Flash', #3 0x10 => 'Beach', #3 0x11 => 'Snow', #3 0x12 => 'Fireworks', #3 0x13 => 'Underwater', #3 0x14 => 'Portrait with Skin Correction', #7 0x16 => 'Panorama', #PH (X100) 0x17 => 'Night (tripod)', #7 0x18 => 'Pro Low-light', #7 0x19 => 'Pro Focus', #7 0x1a => 'Portrait 2', #PH (NC, T500, maybe "Smile & Shoot"?) 0x1b => 'Dog Face Detection', #7 0x1c => 'Cat Face Detection', #7 0x40 => 'Advanced Filter', 0x100 => 'Aperture-priority AE', 0x200 => 'Shutter speed priority AE', 0x300 => 'Manual', }, }, 0x1032 => { #8 Name => 'ExposureCount', Writable => 'int16u', Notes => 'number of exposures used for this image', }, 0x1033 => { #6 Name => 'EXRAuto', Writable => 'int16u', PrintConv => { 0 => 'Auto', 1 => 'Manual', }, }, 0x1034 => { #6 Name => 'EXRMode', Writable => 'int16u', PrintHex => 1, PrintConv => { 0x100 => 'HR (High Resolution)', 0x200 => 'SN (Signal to Noise priority)', 0x300 => 'DR (Dynamic Range priority)', }, }, 0x1040 => { #8 Name => 'ShadowTone', Writable => 'int32s', PrintConv => { -32 => 'Hard', -16 => 'Medium-hard', 0 => 'Normal', 16 => 'Medium-soft', 32 => 'Soft', }, }, 0x1041 => { #8 Name => 'HighlightTone', Writable => 'int32s', PrintConv => { -32 => 'Hard', -16 => 'Medium-hard', 0 => 'Normal', 16 => 'Medium-soft', 32 => 'Soft', }, }, 0x1050 => { #forum6109 Name => 'ShutterType', Writable => 'int16u', PrintConv => { 0 => 'Mechanical', 1 => 'Electronic', }, }, 0x1100 => { Name => 'AutoBracketing', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On', 2 => 'No flash & flash', #3 }, }, 0x1101 => { Name => 'SequenceNumber', Writable => 'int16u', }, # (0x1150-0x1152 exist only for Pro Low-light and Pro Focus PictureModes) # 0x1150 - Pro Low-light - val=1; Pro Focus - val=2 (ref 7) # 0x1151 - Pro Low-light - val=4 (number of pictures taken?); Pro Focus - val=2,3 (ref 7) # 0x1152 - Pro Low-light - val=1,3,4 (stacked pictures used?); Pro Focus - val=1,2 (ref 7) 0x1201 => { #forum6109 Name => 'AdvancedFilter', Writable => 'int32u', PrintHex => 1, PrintConv => { 0x10000 => 'Pop Color', 0x20000 => 'Hi Key', 0x30000 => 'Toy Camera', 0x40000 => 'Miniature', 0x50000 => 'Dynamic Tone', 0x60001 => 'Partial Color Red', 0x60002 => 'Partial Color Yellow', 0x60003 => 'Partial Color Green', 0x60004 => 'Partial Color Blue', 0x60005 => 'Partial Color Orange', 0x60006 => 'Partial Color Purple', 0x70000 => 'Soft Focus', 0x90000 => 'Low Key', }, }, 0x1210 => { #2 Name => 'ColorMode', Writable => 'int16u', PrintHex => 1, PrintConv => { 0x00 => 'Standard', 0x10 => 'Chrome', 0x30 => 'B & W', }, }, 0x1300 => { Name => 'BlurWarning', Writable => 'int16u', PrintConv => { 0 => 'None', 1 => 'Blur Warning', }, }, 0x1301 => { Name => 'FocusWarning', Writable => 'int16u', PrintConv => { 0 => 'Good', 1 => 'Out of focus', }, }, 0x1302 => { Name => 'ExposureWarning', Writable => 'int16u', PrintConv => { 0 => 'Good', 1 => 'Bad exposure', }, }, 0x1304 => { #PH Name => 'GEImageSize', Condition => '$$self{Make} =~ /^GENERAL IMAGING/', Writable => 'string', Notes => 'GE models only', }, 0x1400 => { #2 Name => 'DynamicRange', Writable => 'int16u', PrintConv => { 1 => 'Standard', 3 => 'Wide', # the S5Pro has 100%(STD),130%,170%,230%(W1),300%,400%(W2) - PH }, }, 0x1401 => { #2 (this doesn't seem to work for the X100 - PH) Name => 'FilmMode', Writable => 'int16u', PrintHex => 1, PrintConv => { 0x000 => 'F0/Standard (Provia)', 0x100 => 'F1/Studio Portrait', 0x110 => 'F1a/Studio Portrait Enhanced Saturation', 0x120 => 'F1b/Studio Portrait Smooth Skin Tone (Astia)', 0x130 => 'F1c/Studio Portrait Increased Sharpness', 0x200 => 'F2/Fujichrome (Velvia)', 0x300 => 'F3/Studio Portrait Ex', 0x400 => 'F4/Velvia', 0x500 => 'Pro Neg. Std', #PH (X-Pro1) 0x501 => 'Pro Neg. Hi', #PH (X-Pro1) 0x600 => 'Classic Chrome', #forum6109 }, }, 0x1402 => { #2 Name => 'DynamicRangeSetting', Writable => 'int16u', PrintHex => 1, PrintConv => { 0x000 => 'Auto (100-400%)', 0x001 => 'Manual', #(ref http://forum.photome.de/viewtopic.php?f=2&t=353) 0x100 => 'Standard (100%)', 0x200 => 'Wide1 (230%)', 0x201 => 'Wide2 (400%)', 0x8000 => 'Film Simulation', }, }, 0x1403 => { #2 (only valid for manual DR, ref 6) Name => 'DevelopmentDynamicRange', Writable => 'int16u', }, 0x1404 => { #2 Name => 'MinFocalLength', Writable => 'rational64s', }, 0x1405 => { #2 Name => 'MaxFocalLength', Writable => 'rational64s', }, 0x1406 => { #2 Name => 'MaxApertureAtMinFocal', Writable => 'rational64s', }, 0x1407 => { #2 Name => 'MaxApertureAtMaxFocal', Writable => 'rational64s', }, # 0x1408 - values: '0100', 'S100', 'VQ10' # 0x1409 - values: same as 0x1408 # 0x140a - values: 0, 1, 3, 5, 7 0x140b => { #6 Name => 'AutoDynamicRange', Writable => 'int16u', PrintConv => '"$val%"', PrintConvInv => '$val=~s/\s*\%$//; $val', }, 0x1422 => { #8 Name => 'ImageStabilization', Writable => 'int16u', Count => 3, PrintConv => [{ 0 => 'None', 1 => 'Optical', #PH 2 => 'Sensor-shift', #PH 512 => 'Digital', #PH },{ 0 => 'Off', 1 => 'On (mode 1, continuous)', 2 => 'On (mode 2, shooting only)', }], }, 0x1431 => { #forum6109 Name => 'Rating', Groups => { 2 => 'Image' }, Writable => 'int32u', Priority => 0, }, 0x1436 => { #8 Name => 'ImageGeneration', Writable => 'int16u', PrintConv => { 0 => 'Original Image', 1 => 'Re-developed from RAW', }, }, 0x1438 => { #forum6579 (X-T1 firmware version 3) Name => 'ImageCount', Notes => 'may reset to 0 when new firmware is installed', Writable => 'int16u', ValueConv => '$val & 0x7fff', ValueConvInv => '$val | 0x8000', }, 0x3820 => { #PH (HS20EXR MOV) Name => 'FrameRate', Writable => 'int16u', Groups => { 2 => 'Video' }, }, 0x3821 => { #PH (HS20EXR MOV) Name => 'FrameWidth', Writable => 'int16u', Groups => { 2 => 'Video' }, }, 0x3822 => { #PH (HS20EXR MOV) Name => 'FrameHeight', Writable => 'int16u', Groups => { 2 => 'Video' }, }, 0x4100 => { #PH Name => 'FacesDetected', Writable => 'int16u', }, 0x4103 => { #PH Name => 'FacePositions', Writable => 'int16u', Count => -1, Notes => q{ left, top, right and bottom coordinates in full-sized image for each face detected }, }, # 0x4101-0x4105 - exist only if face detection active # 0x4104 - also related to face detection (same number of entries as FacePositions) # 0x4200 - same as 0x4100? # 0x4203 - same as 0x4103 # 0x4204 - same as 0x4104 0x4282 => { #PH Name => 'FaceRecInfo', SubDirectory => { TagTable => 'Image::ExifTool::FujiFilm::FaceRecInfo' }, }, 0x8000 => { #2 Name => 'FileSource', Writable => 'string', }, 0x8002 => { #2 Name => 'OrderNumber', Writable => 'int32u', }, 0x8003 => { #2 Name => 'FrameNumber', Writable => 'int16u', }, 0xb211 => { #PH Name => 'Parallax', # (value set in camera is -0.5 times this value in MPImage2... why?) Writable => 'rational64s', Notes => 'only found in MPImage2 of .MPO images', }, # 0xb212 - also found in MPIMage2 images - PH ); # Face recognition information from FinePix F550EXR (ref PH) %Image::ExifTool::FujiFilm::FaceRecInfo = ( PROCESS_PROC => \&ProcessFaceRec, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, VARS => { NO_ID => 1 }, NOTES => 'Face recognition information.', Face1Name => { }, Face2Name => { }, Face3Name => { }, Face4Name => { }, Face5Name => { }, Face6Name => { }, Face7Name => { }, Face8Name => { }, Face1Category => { %faceCategories }, Face2Category => { %faceCategories }, Face3Category => { %faceCategories }, Face4Category => { %faceCategories }, Face5Category => { %faceCategories }, Face6Category => { %faceCategories }, Face7Category => { %faceCategories }, Face8Category => { %faceCategories }, Face1Birthday => { }, Face2Birthday => { }, Face3Birthday => { }, Face4Birthday => { }, Face5Birthday => { }, Face6Birthday => { }, Face7Birthday => { }, Face8Birthday => { }, ); # tags in RAF images (ref 5) %Image::ExifTool::FujiFilm::RAF = ( PROCESS_PROC => \&ProcessFujiDir, GROUPS => { 0 => 'RAF', 1 => 'RAF', 2 => 'Image' }, PRIORITY => 0, # so the first RAF directory takes precedence NOTES => q{ FujiFilm RAF images contain meta information stored in a proprietary FujiFilm RAF format, as well as EXIF information stored inside an embedded JPEG preview image. The table below lists tags currently decoded from the RAF-format information. }, 0x100 => { Name => 'RawImageFullSize', Format => 'int16u', Groups => { 1 => 'RAF2' }, # (so RAF2 shows up in family 1 list) Count => 2, Notes => 'including borders', ValueConv => 'my @v=reverse split(" ",$val);"@v"', PrintConv => '$val=~tr/ /x/; $val', }, 0x121 => [ { Name => 'RawImageSize', Condition => '$$self{Model} eq "FinePixS2Pro"', Format => 'int16u', Count => 2, ValueConv => q{ my @v=split(" ",$val); $v[0]*=2, $v[1]/=2; return "@v"; }, PrintConv => '$val=~tr/ /x/; $val', }, { Name => 'RawImageSize', Format => 'int16u', Count => 2, # values are height then width, adjusted for the layout ValueConv => q{ my @v=reverse split(" ",$val); $$self{FujiLayout} and $v[0]/=2, $v[1]*=2; return "@v"; }, PrintConv => '$val=~tr/ /x/; $val', }, ], 0x130 => { Name => 'FujiLayout', Format => 'int8u', RawConv => q{ my ($v) = split ' ', $val; $$self{FujiLayout} = $v & 0x80 ? 1 : 0; return $val; }, }, 0x131 => { #5 Name => 'XTransLayout', Description => 'X-Trans Layout', Format => 'int8u', Count => 36, PrintConv => '$val =~ tr/012 /RGB/d; join " ", $val =~ /....../g', }, 0x2000 => { #9 Name => 'WB_GRGBLevelsAuto', Format => 'int16u', Count => 4, # (ignore the duplicate values) }, 0x2100 => { #9 Name => 'WB_GRGBLevelsDaylight', Format => 'int16u', Count => 4, }, 0x2200 => { #9 Name => 'WB_GRGBLevelsCloudy', Format => 'int16u', Count => 4, }, 0x2300 => { #9 Name => 'WB_GRGBLevelsDaylightFluor', Format => 'int16u', Count => 4, }, 0x2301 => { #9 Name => 'WB_GRGBLevelsDayWhiteFluor', Format => 'int16u', Count => 4, }, 0x2302 => { #9 Name => 'WB_GRGBLevelsWhiteFluorescent', Format => 'int16u', Count => 4, }, 0x2310 => { #9 Name => 'WB_GRGBLevelsWarmWhiteFluor', Format => 'int16u', Count => 4, }, 0x2311 => { #9 Name => 'WB_GRGBLevelsLivingRoomWarmWhiteFluor', Format => 'int16u', Count => 4, }, 0x2400 => { #9 Name => 'WB_GRGBLevelsTungsten', Format => 'int16u', Count => 4, }, # 0x2f00 => WB_GRGBLevelsCustom: int32u count, then count * (int16u GRGBGRGB), ref 9 0x2ff0 => { Name => 'WB_GRGBLevels', Format => 'int16u', Count => 4, }, 0x9650 => { #Frank Markesteijn Name => 'RawExposureBias', Format => 'rational32s', }, 0xc000 => { Name => 'RAFData', SubDirectory => { TagTable => 'Image::ExifTool::FujiFilm::RAFData', ByteOrder => 'Little-endian', } }, ); %Image::ExifTool::FujiFilm::RAFData = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, DATAMEMBER => [ 0, 4, 8 ], FIRST_ENTRY => 0, # (FujiFilm image dimensions are REALLY confusing) # --> this needs some cleaning up 0 => { Name => 'RawImageWidth', Format => 'int32u', DataMember => 'FujiWidth', RawConv => '$val < 10000 ? $$self{FujiWidth} = $val : undef', #5 ValueConv => '$$self{FujiLayout} ? ($val / 2) : $val', }, 4 => [ { Name => 'RawImageWidth', Condition => 'not $$self{FujiWidth}', Format => 'int32u', DataMember => 'FujiWidth', RawConv => '$val < 10000 ? $$self{FujiWidth} = $val : undef', #PH ValueConv => '$$self{FujiLayout} ? ($val / 2) : $val', }, { Name => 'RawImageHeight', Format => 'int32u', DataMember => 'FujiHeight', RawConv => '$$self{FujiHeight} = $val', ValueConv => '$$self{FujiLayout} ? ($val * 2) : $val', }, ], 8 => [ { Name => 'RawImageWidth', Condition => 'not $$self{FujiWidth}', Format => 'int32u', DataMember => 'FujiWidth', RawConv => '$val < 10000 ? $$self{FujiWidth} = $val : undef', #PH ValueConv => '$$self{FujiLayout} ? ($val / 2) : $val', }, { Name => 'RawImageHeight', Condition => 'not $$self{FujiHeight}', Format => 'int32u', DataMember => 'FujiHeight', RawConv => '$$self{FujiHeight} = $val', ValueConv => '$$self{FujiLayout} ? ($val * 2) : $val', }, ], 12 => { Name => 'RawImageHeight', Condition => 'not $$self{FujiHeight}', Format => 'int32u', ValueConv => '$$self{FujiLayout} ? ($val * 2) : $val', }, ); # TIFF IFD-format information stored in FujiFilm RAF images (ref 5) %Image::ExifTool::FujiFilm::IFD = ( PROCESS_PROC => \&Image::ExifTool::Exif::ProcessExif, GROUPS => { 0 => 'RAF', 1 => 'FujiIFD', 2 => 'Image' }, NOTES => 'Tags found in the FujiIFD information of RAF images from some models.', 0xf000 => { Name => 'FujiIFD', Groups => { 1 => 'FujiIFD' }, Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::FujiFilm::IFD', DirName => 'FujiSubIFD', Start => '$val', }, }, 0xf001 => 'RawImageFullWidth', 0xf002 => 'RawImageFullHeight', 0xf003 => 'BitsPerSample', # 0xf004 - values: 4 # 0xf005 - values: 1374, 1668 # 0xf006 - some sort of flag indicating packed format? 0xf007 => { Name => 'StripOffsets', IsOffset => 1, OffsetPair => 0xf008, # point to associated byte counts }, 0xf008 => { Name => 'StripByteCounts', OffsetPair => 0xf007, # point to associated offsets }, # 0xf009 - values: 0, 3 0xf00a => 'BlackLevel', #9 # 0xf00b ? 0xf00c => 'WB_GRBLevelsStandard', #9 (GRBXGRBX; X=17 is standard illuminant A, X=21 is D65) 0xf00d => 'WB_GRBLevelsAuto', #9 0xf00e => 'WB_GRBLevels', # 0xf00f ? ); # information found in FFMV atom of MOV videos %Image::ExifTool::FujiFilm::FFMV = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, NOTES => 'Information found in the FFMV atom of MOV videos.', 0 => { Name => 'MovieStreamName', Format => 'string[34]', }, ); # tags in FujiFilm QuickTime videos (ref PH) # (similar information in Kodak,Minolta,Nikon,Olympus,Pentax and Sanyo videos) %Image::ExifTool::FujiFilm::MOV = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, NOTES => 'This information is found in MOV videos from some FujiFilm cameras.', 0x00 => { Name => 'Make', Format => 'string[24]', }, 0x18 => { Name => 'Model', Description => 'Camera Model Name', Format => 'string[16]', }, 0x2e => { # (NC) Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val ? 1 / $val : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x32 => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', }, 0x3a => { # (NC) Name => 'ExposureCompensation', Format => 'rational64s', PrintConv => '$val ? sprintf("%+.1f", $val) : 0', }, ); #------------------------------------------------------------------------------ # decode information from FujiFilm face recognition information # Inputs: 0) ExifTool object reference, 1) dirInfo reference, 2) tag table ref # Returns: 1 sub ProcessFaceRec($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos} + ($$dirInfo{Base} || 0); my $dirStart = $$dirInfo{DirStart}; my $dirLen = $$dirInfo{DirLen}; my $pos = $dirStart; my $end = $dirStart + $dirLen; my ($i, $n, $p, $val); $et->VerboseDir('FaceRecInfo'); for ($i=1; ; ++$i) { last if $pos + 8 > $end; my $off = Get32u($dataPt, $pos) + $dirStart; my $len = Get32u($dataPt, $pos + 4); last if $len==0 or $off>$end or $off+$len>$end or $len < 62; # values observed for each offset (always zero if not listed): # 0=5; 3=1; 4=4; 6=1; 10-13=numbers(constant for a given registered face) # 15=16; 16=3; 18=1; 22=nameLen; 26=1; 27=16; 28=7; 30-33=nameLen(int32u) # 34-37=nameOffset(int32u); 38=32; 39=16; 40=4; 42=1; 46=0,2,4,8(category) # 50=33; 51=16; 52=7; 54-57=dateLen(int32u); 58-61=dateOffset(int32u) $n = Get32u($dataPt, $off + 30); $p = Get32u($dataPt, $off + 34) + $dirStart; last if $p < $dirStart or $p + $n > $end; $val = substr($$dataPt, $p, $n); $et->HandleTag($tagTablePtr, "Face${i}Name", $val, DataPt => $dataPt, DataPos => $dataPos, Start => $p, Size => $n, ); $n = Get32u($dataPt, $off + 54); $p = Get32u($dataPt, $off + 58) + $dirStart; last if $p < $dirStart or $p + $n > $end; $val = substr($$dataPt, $p, $n); $val =~ s/(\d{4})(\d{2})(\d{2})/$1:$2:$2/; $et->HandleTag($tagTablePtr, "Face${i}Birthday", $val, DataPt => $dataPt, DataPos => $dataPos, Start => $p, Size => $n, ); $et->HandleTag($tagTablePtr, "Face${i}Category", undef, DataPt => $dataPt, DataPos => $dataPos, Start => $off + 46, Size => 1, ); $pos += 8; } return 1; } #------------------------------------------------------------------------------ # get information from FujiFilm RAF directory # Inputs: 0) ExifTool object reference, 1) dirInfo reference, 2) tag table ref # Returns: 1 if this was a valid FujiFilm directory sub ProcessFujiDir($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $raf = $$dirInfo{RAF}; my $offset = $$dirInfo{DirStart}; $raf->Seek($offset, 0) or return 0; my ($buff, $index); $raf->Read($buff, 4) or return 0; my $entries = unpack 'N', $buff; $entries < 256 or return 0; $et->Options('Verbose') and $et->VerboseDir('Fuji', $entries); SetByteOrder('MM'); my $pos = $offset + 4; for ($index=0; $index<$entries; ++$index) { $raf->Read($buff,4) or return 0; $pos += 4; my ($tag, $len) = unpack 'nn', $buff; my ($val, $vbuf); $raf->Read($vbuf, $len) or return 0; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); if ($tagInfo and $$tagInfo{Format}) { $val = ReadValue(\$vbuf, 0, $$tagInfo{Format}, $$tagInfo{Count}, $len); next unless defined $val; } elsif ($len == 4) { # interpret unknown 4-byte values as int32u $val = Get32u(\$vbuf, 0); } else { # treat other unknown values as binary data $val = \$vbuf; } $et->HandleTag($tagTablePtr, $tag, $val, Index => $index, DataPt => \$vbuf, DataPos => $pos, Size => $len, TagInfo => $tagInfo, ); $pos += $len; } return 1; } #------------------------------------------------------------------------------ # write information to FujiFilm RAW file (RAF) # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid RAF file, or -1 on write error sub WriteRAF($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($hdr, $jpeg, $outJpeg, $offset, $err, $buff); $raf->Read($hdr,0x94) == 0x94 or return 0; $hdr =~ /^FUJIFILM/ or return 0; my $ver = substr($hdr, 0x3c, 4); $ver =~ /^\d{4}$/ or return 0; # get the position and size of embedded JPEG my ($jpos, $jlen) = unpack('x84NN', $hdr); # check to be sure the JPEG starts in the expected location if ($jpos > 0x94 or $jpos < 0x68 or $jpos & 0x03) { $et->Error("Unsupported or corrupted RAF image (version $ver)"); return 1; } # check to make sure this version of RAF has been tested unless ($testedRAF{$ver}) { $et->Warn("RAF version $ver not yet tested", 1); } # read the embedded JPEG unless ($raf->Seek($jpos, 0) and $raf->Read($jpeg, $jlen) == $jlen) { $et->Error('Error reading RAF meta information'); return 1; } # use same write directories as JPEG $et->InitWriteDirs('JPEG'); # rewrite the embedded JPEG in memory my %jpegInfo = ( Parent => 'RAF', RAF => new File::RandomAccess(\$jpeg), OutFile => \$outJpeg, ); $$et{FILE_TYPE} = 'JPEG'; my $success = $et->WriteJPEG(\%jpegInfo); $$et{FILE_TYPE} = 'RAF'; unless ($success and $outJpeg) { $et->Error("Invalid RAF format"); return 1; } return -1 if $success < 0; # rewrite the RAF image SetByteOrder('MM'); my $jpegLen = length $outJpeg; # pad JPEG to an even 4 bytes (ALWAYS use padding as Fuji does) my $pad = "\0" x (4 - ($jpegLen % 4)); # update JPEG size in header (size without padding) Set32u(length($outJpeg), \$hdr, 0x58); # get pointer to start of the next RAF block my $nextPtr = Get32u(\$hdr, 0x5c); # determine the length of padding at the end of the original JPEG my $oldPadLen = $nextPtr - ($jpos + $jlen); if ($oldPadLen) { if ($oldPadLen > 1000000 or $oldPadLen < 0 or not $raf->Seek($jpos+$jlen, 0) or $raf->Read($buff, $oldPadLen) != $oldPadLen) { $et->Error('Bad RAF pointer at 0x5c'); return 1; } # make sure padding is only zero bytes (can be >100k for HS10) # (have seen non-null padding in X-Pro1) if ($buff =~ /[^\0]/) { return 1 if $et->Error('Non-null bytes found in padding', 2); } } # calculate offset difference due to change in JPEG size my $ptrDiff = length($outJpeg) + length($pad) - ($jlen + $oldPadLen); # update necessary pointers in header foreach $offset (0x5c, 0x64, 0x78, 0x80) { last if $offset >= $jpos; # some versions have a short header my $oldPtr = Get32u(\$hdr, $offset); next unless $oldPtr; # don't update if pointer is zero Set32u($oldPtr + $ptrDiff, \$hdr, $offset); } # write the new header my $outfile = $$dirInfo{OutFile}; Write($outfile, substr($hdr, 0, $jpos)) or $err = 1; # write the updated JPEG plus padding Write($outfile, $outJpeg, $pad) or $err = 1; # copy over the rest of the RAF image unless ($raf->Seek($nextPtr, 0)) { $et->Error('Error reading RAF image'); return 1; } while ($raf->Read($buff, 65536)) { Write($outfile, $buff) or $err = 1, last; } return $err ? -1 : 1; } #------------------------------------------------------------------------------ # get information from FujiFilm RAW file (RAF) # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 if this was a valid RAF file sub ProcessRAF($$) { my ($et, $dirInfo) = @_; my ($buff, $jpeg, $warn, $offset); my $raf = $$dirInfo{RAF}; $raf->Read($buff,0x5c) == 0x5c or return 0; $buff =~ /^FUJIFILM/ or return 0; my ($jpos, $jlen) = unpack('x84NN', $buff); $jpos & 0x8000 and return 0; $raf->Seek($jpos, 0) or return 0; $raf->Read($jpeg, $jlen) == $jlen or return 0; $et->SetFileType(); $et->FoundTag('RAFVersion', substr($buff, 0x3c, 4)); # extract information from embedded JPEG my %dirInfo = ( Parent => 'RAF', RAF => new File::RandomAccess(\$jpeg), ); $$et{BASE} += $jpos; my $rtnVal = $et->ProcessJPEG(\%dirInfo); $$et{BASE} -= $jpos; $et->FoundTag('PreviewImage', \$jpeg) if $rtnVal; # extract information from Fuji RAF and TIFF directories my ($rafNum, $ifdNum) = ('',''); foreach $offset (0x5c, 0x64, 0x78, 0x80) { last if $offset >= $jpos; unless ($raf->Seek($offset, 0) and $raf->Read($buff, 4)) { $warn = 1; last; } my $start = unpack('N',$buff); next unless $start; if ($offset == 0x64 or $offset == 0x80) { # parse FujiIFD directory %dirInfo = ( RAF => $raf, Base => $start, ); $$et{SET_GROUP1} = "FujiIFD$ifdNum"; my $tagTablePtr = GetTagTable('Image::ExifTool::FujiFilm::IFD'); # this is TIFF-format data only for some models, so no warning if it fails $et->ProcessTIFF(\%dirInfo, $tagTablePtr, \&Image::ExifTool::ProcessTIFF); delete $$et{SET_GROUP1}; $ifdNum = ($ifdNum || 1) + 1; } else { # parse RAF directory %dirInfo = ( RAF => $raf, DirStart => $start, ); $$et{SET_GROUP1} = "RAF$rafNum"; my $tagTablePtr = GetTagTable('Image::ExifTool::FujiFilm::RAF'); $et->ProcessDirectory(\%dirInfo, $tagTablePtr) or $warn = 1; delete $$et{SET_GROUP1}; $rafNum = ($rafNum || 1) + 1; } } $warn and $et->Warn('Possibly corrupt RAF information'); return $rtnVal; } 1; # end __END__ =head1 NAME Image::ExifTool::FujiFilm - Read/write FujiFilm maker notes and RAF images =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret FujiFilm maker notes in EXIF information, and to read/write FujiFilm RAW (RAF) images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html> =item L<http://homepage3.nifty.com/kamisaka/makernote/makernote_fuji.htm> =item L<http://www.cybercom.net/~dcoffin/dcraw/> =item (...plus testing with my own FinePix 2400 Zoom) =back =head1 ACKNOWLEDGEMENTS Thanks to Michael Meissner, Paul Samuelson and Jens Duttke for help decoding some FujiFilm information. =head1 SEE ALSO L<Image::ExifTool::TagNames/FujiFilm Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/GE.pm�������������������������������������������������������000644 �000765 �000024 �00000003777 12642461301 020552� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: GE.pm # # Description: General Imaging maker notes tags # # Revisions: 2010-12-14 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::GE; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.00'; sub ProcessGE2($$$); # GE type 1 maker notes (ref PH) # (similar to Kodak::Type11 and Ricoh::Type2) %Image::ExifTool::GE::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ This table lists tags found in the maker notes of some General Imaging camera models. }, # 0x0104 - int32u # 0x0200 - int32u[3] (with invalid offset of 0) 0x0202 => { Name => 'Macro', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On' }, }, # 0x0203 - int16u: 0 # 0x0204 - rational64u: 10/10 # 0x0205 - rational64u: 7.249,7.34,9.47 (changes with camera model) # 0x0206 - int16u[6] (with invalid offset of 0) 0x0207 => { Name => 'GEModel', Format => 'string', }, 0x0300 => { Name => 'GEMake', Format => 'string', }, # 0x0500 - int16u: 0 # 0x0600 - int32u: 0 ); __END__ =head1 NAME Image::ExifTool::GE - General Imaging maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret General Imaging maker notes. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/GE Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �Image-ExifTool-10.10/lib/Image/ExifTool/Geotag.pm���������������������������������������������������000644 �000765 �000024 �00000146622 12642461304 021465� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Geotag.pm # # Description: Geotagging utility routines # # Revisions: 2009/04/01 - P. Harvey Created # 2009/09/27 - PH Added Geosync feature # 2009/06/25 - PH Read Garmin TCX track logs # 2009/09/11 - PH Read ITC GPS track logs # 2012/01/08 - PH Extract orientation information from PTNTHPR # 2012/05/08 - PH Read Winplus Beacon .TXT files # 2015/05/30 - PH Read Bramor gEO log files # # References: 1) http://www.topografix.com/GPX/1/1/ # 2) http://www.gpsinformation.org/dale/nmea.htm#GSA # 3) http://code.google.com/apis/kml/documentation/kmlreference.html # 4) http://www.fai.org/gliding/system/files/tech_spec_gnss.pdf #------------------------------------------------------------------------------ package Image::ExifTool::Geotag; use strict; use vars qw($VERSION); use Image::ExifTool qw(:Public); $VERSION = '1.48'; sub JITTER() { return 2 } # maximum time jitter sub SetGeoValues($$;$); sub PrintFixTime($); sub PrintFix($@); # XML tags that we recognize (keys are forced to lower case) my %xmlTag = ( lat => 'lat', # GPX latitude => 'lat', # Garmin latitudedegrees => 'lat', # Garmin TCX lon => 'lon', # GPX longitude => 'lon', # Garmin longitudedegrees => 'lon', # Garmin TCX ele => 'alt', # GPX elevation => 'alt', # PH alt => 'alt', # PH altitude => 'alt', # Garmin altitudemeters => 'alt', # Garmin TCX 'time' => 'time', # GPX/Garmin fix => 'fixtype', # GPX hdop => 'hdop', # GPX vdop => 'vdop', # GPX pdop => 'pdop', # GPX sat => 'nsats', # GPX when => 'time', # KML coordinates => 'coords', # KML coord => 'coords', # KML, as written by Google Location History course => 'dir', # (written by Arduino) pitch => 'pitch', # (written by Arduino) roll => 'roll', # (written by Arduino) # XML containers (fix is reset at the opening tag of these properties) wpt => '', # GPX trkpt => '', # GPX rtept => '', # GPX trackpoint => '', # Garmin placemark => '', # KML ); # fix information keys which must be interpolated around a circle my %cyclical = (lon => 1, track => 1, dir => 1, roll => 1); # fix information keys for each of our general categories my %fixInfoKeys = ( 'pos' => [ 'lat', 'lon' ], track => [ 'track', 'speed' ], alt => [ 'alt' ], orient => [ 'dir', 'pitch', 'roll' ], ); my %isOrient = ( dir => 1, pitch => 1, roll => 1 ); # test for orientation key my $secPerDay = 24 * 3600; # a useful constant #------------------------------------------------------------------------------ # Load GPS track log file # Inputs: 0) ExifTool ref, 1) track log data or file name # Returns: geotag hash data reference or error string # - the geotag hash has the following members: # Points - hash of GPS fix information hashes keyed by Unix time # Times - list of sorted Unix times (keys of Points hash) # NoDate - flag if some points have no date (ie. referenced to 1970:01:01) # IsDate - flag if some points have date # Has - hash of flags for available information (track, orient, alt) # - the fix information hash may contain: # lat - signed latitude (required) # lon - signed longitude (required) # alt - signed altitude # time - fix time in UTC as XML string # fixtype- type of fix ('none'|'2d'|'3d'|'dgps'|'pps') # pdop - dilution of precision # hdop - horizontal DOP # vdop - vertical DOP # sats - comma-separated list of active satellites # nsats - number of active satellites # track - track heading (deg true) # dir - image direction (deg true) # pitch - pitch angle (deg) # roll - roll angle (deg) # speed - speed (knots) # first - flag set for first fix of track # - concatenates new data with existing track data stored in ExifTool NEW_VALUE # for the Geotag tag sub LoadTrackLog($$;$) { local ($_, $/, *EXIFTOOL_TRKFILE); my ($et, $val) = @_; my ($raf, $from, $time, $isDate, $noDate, $noDateChanged, $lastDate, $dateFlarm); my ($nmeaStart, $fixSecs, @fixTimes, $lastFix, %nmea); my ($canCut, $cutPDOP, $cutHDOP, $cutSats, $e0, $e1, @tmp); unless (eval { require Time::Local }) { return 'Geotag feature requires Time::Local installed'; } # add data to existing track my $geotag = $et->GetNewValue('Geotag') || { }; # get lookup for available information types my $has = $$geotag{Has}; $has or $has = $$geotag{Has} = { 'pos' => 1 }; my $format = ''; # is $val track log data? if ($val =~ /^(\xef\xbb\xbf)?<(\?xml|gpx)[\s>]/) { $format = 'XML'; $/ = '>'; # set input record separator to '>' for XML/GPX data } elsif ($val =~ /(\x0d\x0a|\x0d|\x0a)/) { $/ = $1; } else { # $val is track file name $et->Open(\*EXIFTOOL_TRKFILE, $val) or return "Error opening GPS file '$val'"; $raf = new File::RandomAccess(\*EXIFTOOL_TRKFILE); unless ($raf->Read($_, 256)) { close EXIFTOOL_TRKFILE; return "Empty track file '$val'"; } # look for XML or GPX header (might as well allow UTF-8 BOM) if (/^(\xef\xbb\xbf)?<(\?xml|gpx)[\s>]/) { $format = 'XML'; $/ = '>'; # set input record separator to '>' for XML/GPX data } elsif (/(\x0d\x0a|\x0d|\x0a)/) { $/ = $1; } else { close EXIFTOOL_TRKFILE; return "Invalid track file '$val'"; } $raf->Seek(0,0); $from = "file '$val'"; } unless ($from) { # set up RAF for reading log file in memory $raf = new File::RandomAccess(\$val); $from = 'data'; } # initialize track points lookup my $points = $$geotag{Points}; $points or $points = $$geotag{Points} = { }; # initialize cuts my $maxHDOP = $et->Options('GeoMaxHDOP'); my $maxPDOP = $et->Options('GeoMaxPDOP'); my $minSats = $et->Options('GeoMinSats'); my $isCut = $maxHDOP || $maxPDOP || $minSats; my $numPoints = 0; my $skipped = 0; my $lastSecs = 0; my $fix = { }; for (;;) { $raf->ReadLine($_) or last; # determine file format if (not $format) { if (/^<(\?xml|gpx)[\s>]/) { # look for XML or GPX header $format = 'XML'; # check for NMEA sentence # (must ONLY start with ones that have timestamps! eg. not GSA or PTNTHPR!) } elsif (/^\$(GP(RMC|GGA|GLL|ZDA)|PMGNTRK),/) { $format = 'NMEA'; $nmeaStart = $2 || $1; # save type of first sentence } elsif (/^A(FLA|XSY|FIL)/) { # (don't set format yet because we want to read HFDTE first) $nmeaStart = 'B' ; next; } elsif (/^HFDTE(\d{2})(\d{2})(\d{2})/) { my $year = $3 + ($3 >= 70 ? 1900 : 2000); $dateFlarm = Time::Local::timegm(0,0,0,$1,$2-1,$year-1900); $nmeaStart = 'B' ; $format = 'IGC'; next; } elsif ($nmeaStart and /^B/) { # parse IGC fixes without a date $format = 'IGC'; } elsif (/^TP,D,/) { $format = 'Winplus'; } elsif (/^\s*\d+\s+.*\sypr\s*$/ and (@tmp=split) == 12) { $format = 'Bramor'; } else { # search only first 50 lines of file for a valid fix last if ++$skipped > 50; next; } } # # XML format (GPX, KML, Garmin XML/TCX etc) # if ($format eq 'XML') { my ($arg, $tok, $td); s/\s*=\s*(['"])\s*/=$1/g; # remove unnecessary white space in attributes # Workaround for KML generated by Google Location History: # lat/lon/alt are space-separated; we want commas. s{(\S+)\s+(\S+)\s+(\S+)(</gx:coord>)}{$1,$2,$3$4}; foreach $arg (split) { # parse attributes (eg. GPX 'lat' and 'lon') # (note: ignore namespace prefixes if they exist) if ($arg =~ /^(\w+:)?(\w+)=(['"])(.*?)\3/g) { my $tag = $xmlTag{lc $2}; if ($tag) { $$fix{$tag} = $4; $$has{orient} = 1 if $isOrient{$tag}; } } # loop through XML elements while ($arg =~ m{([^<>]*)<(/)?(\w+:)?(\w+)(>|$)}g) { my $tag = $xmlTag{$tok = lc $4}; # parse as a simple property if this element has a value if (defined $tag and not $tag) { # a containing property was opened or closed if (not $2) { # opened: start a new fix $lastFix = $fix = { }; next; } elsif ($fix and $lastFix and %$fix) { # closed: transfer additional tags from current fix foreach (keys %$fix) { $$lastFix{$_} = $$fix{$_} unless defined $$lastFix{$_}; } undef $lastFix; } } if (length $1) { if ($tag) { if ($tag eq 'coords') { # read KML "Point" coordinates @$fix{'lon','lat','alt'} = split ',', $1; } else { $$fix{$tag} = $1; $$has{orient} = 1 if $isOrient{$tag}; } } next; } elsif ($tok eq 'td') { $td = 1; } # validate and store GPS fix next unless defined $$fix{lat} and defined $$fix{lon} and $$fix{'time'}; unless ($$fix{lat} =~ /^[+-]?\d+\.?\d*/ and $$fix{lon} =~ /^[+-]?\d+\.?\d*/) { $e0 or $et->VPrint(0, "Coordinate format error in $from\n"), $e0 = 1; next; } unless ($$fix{'time'} =~ /^(\d{4})-(\d+)-(\d+)T(\d+):(\d+):(\d+)(\.\d+)?(.*)/) { $e1 or $et->VPrint(0, "Timestamp format error in $from\n"), $e1 = 1; next; } $time = Time::Local::timegm($6,$5,$4,$3,$2-1,$1-1900); $time += $7 if $7; # add fractional seconds my $tz = $8; # adjust for time zone (otherwise assume UTC) # - allow timezone of +-HH:MM, +-H:MM, +-HHMM or +-HH since # the spec is unclear about timezone format if ($tz =~ /^([-+])(\d+):(\d{2})\b/ or $tz =~ /^([-+])(\d{2})(\d{2})?\b/) { $tz = ($2 * 60 + ($3 || 0)) * 60; $tz *= -1 if $1 eq '+'; # opposite sign to change back to UTC $time += $tz; } # validate altitude undef $$fix{alt} if defined $$fix{alt} and $$fix{alt} !~ /^[+-]?\d+\.?\d*/; $isDate = 1; $canCut= 1 if defined $$fix{pdop} or defined $$fix{hdop} or defined $$fix{nsats}; $$has{alt} = 1 if $$fix{alt}; # set "has altitude" flag if appropriate $$points{$time} = $fix; push @fixTimes, $time; # save times of all fixes in order $fix = { }; ++$numPoints; } } # last ditch check KML description for timestamp (assume it is UTC) $$fix{'time'} = "$1T$2Z" if $td and not $$fix{'time'} and /[\s>](\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2}:\d{2}(\.\d+)?)/; next; # # Winplus Beacon text file # } elsif ($format eq 'Winplus') { # TP,D, 44.933666667, -93.186555556, 10/26/2011, 19:07:28, 0 # latitude longitude date time /^TP,D,\s*([-+]?\d+\.\d*),\s*([-+]?\d+\.\d*),\s*(\d+)\/(\d+)\/(\d{4}),\s*(\d+):(\d+):(\d+)/ or next; $$fix{lat} = $1; $$fix{lon} = $2; $time = Time::Local::timegm($8,$7,$6,$4,$3-1,$5-1900); DoneFix: $isDate = 1; $$points{$time} = $fix; push @fixTimes, $time; $fix = { }; ++$numPoints; next; # # Bramor gEO log file # } elsif ($format eq 'Bramor') { # 1 0015 18.723675 50.672752 149 169.31 22/04/2015 07:06:55 169.31 8.88 28.07 ypr # ? index latitude longitude alt track date time dir pitch roll my @parts = split ' ', $_; next unless @parts == 12 and $parts[11] eq 'ypr'; my @d = split m{/}, $parts[6]; # date (dd/mm/YYYY) my @t = split m{:}, $parts[7]; # time (HH:MM:SS) next unless @d == 3 and @t == 3; @$fix{qw(lat lon alt track dir pitch roll)} = @parts[2,3,4,5,8,9,10]; # (add the seconds afterwards in case some models have decimal seconds) $time = Time::Local::timegm(0,$t[1],$t[0],$d[0],$d[1]-1,$d[2]-1900) + $t[2]; # set necessary flags for extra available information @$has{qw(alt track orient)} = (1,1,1); goto DoneFix; # save this fix } my (%fix, $secs, $date, $nmea); if ($format eq 'NMEA') { # ignore unrecognized NMEA sentences next unless /^\$(GP(RMC|GGA|GLL|GSA|ZDA)|PMGNTRK|PTNTHPR),/; $nmea = $2 || $1; } # # IGC (flarm) (ref 4) # if ($format eq 'IGC') { # B0939564531208N00557021EA007670089100207 # BHHMMSSDDMMmmmNDDDMMmmmEAaaaaaAAAAAxxyy # HH MM SS DD MM mmm DDD MM mmm aaaaa AAAAA # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 /^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{3})([NS])(\d{3})(\d{2})(\d{3})([EW])([AV])(\d{5})(\d{5})/ or next; $fix{lat} = ($4 + ($5 + $6/1000)/60) * ($7 eq 'N' ? 1 : -1); $fix{lon} = ($8 + ($9 +$10/1000)/60) * ($11 eq 'E' ? 1 : -1); $fix{alt} = $12 eq 'A' ? $14 : undef; $secs = (($1 * 60) + $2) * 60 + $3; # wrap to next day if necessary if ($dateFlarm) { $dateFlarm += $secPerDay if $secs < $lastSecs - JITTER(); $date = $dateFlarm; } $nmea = 'B'; # # NMEA RMC sentence (contains date) # } elsif ($nmea eq 'RMC') { # $GPRMC,092204.999,A,4250.5589,S,14718.5084,E,0.00,89.68,211200,,*25 # $GPRMC,093657.007,,3652.835020,N,01053.104094,E,1.642,,290913,,,A*0F # $GPRMC,hhmmss.sss,A/V,ddmm.mmmm,N/S,ddmmm.mmmm,E/W,spd(knots),dir(deg),DDMMYY,,*cs /^\$GPRMC,(\d{2})(\d{2})(\d+(\.\d*)?),A?,(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),(\d*\.?\d*),(\d*\.?\d*),(\d{2})(\d{2})(\d+)/ or next; next if $13 > 31 or $14 > 12 or $15 > 99; # validate day/month/year $fix{lat} = (($5 || 0) + $6/60) * ($7 eq 'N' ? 1 : -1); $fix{lon} = (($8 || 0) + $9/60) * ($10 eq 'E' ? 1 : -1); $fix{speed} = $11 if length $11; $fix{track} = $12 if length $12; my $year = $15 + ($15 >= 70 ? 1900 : 2000); $secs = (($1 * 60) + $2) * 60 + $3; $date = Time::Local::timegm(0,0,0,$13,$14-1,$year-1900); # # NMEA GGA sentence (no date) # } elsif ($nmea eq 'GGA') { # $GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*1F # $GPGGA,093657.000,3652.835020,N,01053.104094,E,,8,,166.924,M,40.9,M,,*77 # $GPGGA,hhmmss.sss,ddmm.mmmm,N/S,dddmm.mmmm,E/W,0=invalid,sats,hdop,alt,M,... /^\$GPGGA,(\d{2})(\d{2})(\d+(\.\d*)?),(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),[1-6]?,(\d+)?,(\.\d+|\d+\.?\d*)?,(-?\d+\.?\d*)?,M?,/ or next; $fix{lat} = (($5 || 0) + $6/60) * ($7 eq 'N' ? 1 : -1); $fix{lon} = (($8 || 0) + $9/60) * ($10 eq 'E' ? 1 : -1); @fix{qw(nsats hdop alt)} = ($11,$12,$13); $secs = (($1 * 60) + $2) * 60 + $3; $canCut = 1; # # NMEA GLL sentence (no date) # } elsif ($nmea eq 'GLL') { # $GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D # $GPGLL,ddmm.mmmm,N/S,dddmm.mmmm,E/W,hhmmss.sss,A/V*cs /^\$GPGLL,(\d*?)(\d{1,2}\.\d+),([NS]),(\d*?)(\d{1,2}\.\d+),([EW]),(\d{2})(\d{2})(\d+(\.\d*)?),A/ or next; $fix{lat} = (($1 || 0) + $2/60) * ($3 eq 'N' ? 1 : -1); $fix{lon} = (($4 || 0) + $5/60) * ($6 eq 'E' ? 1 : -1); $secs = (($7 * 60) + $8) * 60 + $9; # # NMEA GSA sentence (satellite status, no date) # } elsif ($nmea eq 'GSA') { # $GPGSA,A,3,04,05,,,,,,,,,,,pdop,hdop,vdop*HH /^\$GPGSA,[AM],([23]),((?:\d*,){11}(?:\d*)),(\d+\.?\d*|\.\d+)?,(\d+\.?\d*|\.\d+)?,(\d+\.?\d*|\.\d+)?\*/ or next; @fix{qw(fixtype sats pdop hdop vdop)} = ($1.'d',$2,$3,$4,$5); # count the number of acquired satellites my @a = ($fix{sats} =~ /\d+/g); $fix{nsats} = scalar @a; $canCut = 1; # # NMEA ZDA sentence (date/time, contains date) # } elsif ($nmea eq 'ZDA') { # $GPZDA,093655.000,29,09,2013,,*58 # $GPZDA,hhmmss.ss,DD,MM,YYYY,tzh,tzm (hhmmss in UTC) /^\$GPZDA,(\d{2})(\d{2})(\d{2}(\.\d*)?),(\d+),(\d+),(\d+)/ or next; $secs = (($1 * 60) + $2) * 60 + $3; $date = Time::Local::timegm(0,0,0,$5,$6-1,$7-1900); # # Magellan eXplorist PMGNTRK (Proprietary MaGellaN TRacK) sentence (optional date) # } elsif ($nmea eq 'PMGNTRK') { # $PMGNTRK,4415.026,N,07631.091,W,00092,M,185031.06,A,,020409*65 # $PMGNTRK,ddmm.mmm,N/S,dddmm.mmm,E/W,alt,F/M,hhmmss.ss,A/V,trkname,DDMMYY*cs /^\$PMGNTRK,(\d+)(\d{2}\.\d+),([NS]),(\d+)(\d{2}\.\d+),([EW]),(-?\d+\.?\d*),([MF]),(\d{2})(\d{2})(\d+(\.\d*)?),A,(?:[^,]*,(\d{2})(\d{2})(\d+))?/ or next; $fix{lat} = ($1 + $2/60) * ($3 eq 'N' ? 1 : -1); $fix{lon} = ($4 + $5/60) * ($6 eq 'E' ? 1 : -1); $fix{alt} = $8 eq 'M' ? $7 : $7 * 12 * 0.0254; $secs = (($9 * 60) + $10) * 60 + $11; if (defined $15) { next if $13 > 31 or $14 > 12 or $15 > 99; # validate day/month/year # optional date is available in PMGNTRK sentence my $year = $15 + ($15 >= 70 ? 1900 : 2000); $date = Time::Local::timegm(0,0,0,$13,$14-1,$year-1900); } # # Honeywell HMR3000 PTNTHPR (Heading Pitch Roll) sentence (no date) # (ref http://www.gpsarea.com/uploadfile/download/introduce/hmr3000_manual.pdf) # } elsif ($nmea eq 'PTNTHPR') { # $PTNTHPR,85.9,N,-0.9,N,0.8,N*HH # $PTNTHPR,heading,heading status,pitch,pitch status,roll,roll status,*cs # status: L=low alarm, M=low warning, N=normal, O=high warning # P=high alarm, C=tuning analog circuit # (ignore this information on any alarm status) /^\$PTNTHPR,(-?[\d.]+),[MNO],(-?[\d.]+),[MNO],(-?[\d.]+),[MNO],/ or next; @fix{qw(dir pitch roll)} = ($1,$2,$3); } else { next; # this shouldn't happen } # remember the NMEA formats we successfully read $nmea{$nmea} = 1; # use last date if necessary (and appropriate) if (defined $secs and not defined $date and defined $lastDate) { # wrap to next day if necessary if ($secs < $lastSecs - JITTER()) { $lastSecs -= $secPerDay; $lastDate += $secPerDay; } # use earlier date only if we are within 10 seconds if ($secs - $lastSecs < 10) { # last date is close, use it for this fix $date = $lastDate; } else { # last date is old, discard it undef $lastDate; undef $lastSecs; } } # save our last date/time if (defined $date) { $lastDate = $date; $lastSecs = $secs; } # # Add NMEA/IGC fix to our lookup # (this is much more complicated than it needs to be because # the stupid NMEA format provides no end-of-fix indication) # # assumptions for each NMEA sentence: # - we only parse a time if we get a lat/lon # - we always get a time if we have a date if ($nmea eq $nmeaStart or (defined $secs and (not defined $fixSecs or # don't combine sentences that are outside 10 seconds apart ($secs >= $fixSecs and $secs - $fixSecs >= 10) or ($secs < $fixSecs and $secs + $secPerDay - $fixSecs >= 10)))) { # start a new fix $fix = \%fix; $fixSecs = $secs; undef $noDateChanged; # does this fix have a date/time or time stamp? if (defined $date) { $fix{isDate} = $isDate = 1; $time = $date + $secs; } elsif (defined $secs) { $time = $secs; $noDate = $noDateChanged = 1; } else { next; # wait until we have a time before adding to lookup } } else { # add new data to existing fix (but don't overwrite earlier values to # keep the coordinates in sync with the fix time) foreach (keys %fix) { $$fix{$_} = $fix{$_} unless defined $$fix{$_}; } if (defined $date) { next if $$fix{isDate}; # move this fix to the proper date if (defined $fixSecs) { delete $$points{$fixSecs}; pop @fixTimes if @fixTimes and $fixTimes[-1] == $fixSecs; --$numPoints; # if we wrapped to the next day since the start of this fix, # we must shift the date back to the day of $fixSecs $date -= $secPerDay if $secs < $fixSecs; } else { $fixSecs = $secs; } $time = $date + $fixSecs; $$fix{isDate} = $isDate = 1; # revert noDate flag if it was set for this fix $noDate = 0 if $noDateChanged; } elsif (defined $secs and not defined $fixSecs) { $time = $fixSecs = $secs; $noDate = $noDateChanged = 1; } else { next; # wait until we have a time } } # add fix to our lookup $$points{$time} = $fix; push @fixTimes, $time; # save time of all fixes in order ++$numPoints; } $raf->Close(); # set date flags if ($noDate and not $$geotag{NoDate}) { if ($isDate) { $et->Warn('Fixes are date-less -- will use time-only interpolation'); } else { $et->Warn('Some fixes are date-less -- may use time-only interpolation'); } $$geotag{NoDate} = 1; } $$geotag{IsDate} = 1 if $isDate; # cut bad fixes if necessary if ($isCut and $canCut) { $cutPDOP = $cutHDOP = $cutSats = 0; my @goodTimes; foreach (@fixTimes) { $fix = $$points{$_} or next; if ($maxPDOP and $$fix{pdop} and $$fix{pdop} > $maxPDOP) { delete $$points{$_}; ++$cutPDOP; } elsif ($maxHDOP and $$fix{hdop} and $$fix{hdop} > $maxHDOP) { delete $$points{$_}; ++$cutHDOP; } elsif ($minSats and defined $$fix{nsats} and $$fix{nsats} ne '' and $$fix{nsats} < $minSats) { delete $$points{$_}; ++$cutSats; } else { push @goodTimes, $_; } } @fixTimes = @goodTimes; # update fix times $numPoints -= $cutPDOP; $numPoints -= $cutHDOP; $numPoints -= $cutSats; } # mark first fix of the track while (@fixTimes) { $fix = $$points{$fixTimes[0]} or shift(@fixTimes), next; $$fix{first} = 1; last; } my $verbose = $et->Options('Verbose'); if ($verbose) { my $out = $et->Options('TextOut'); $format or $format = 'unknown'; print $out "Loaded $numPoints points from $format-format GPS track log $from\n"; print $out "Ignored $cutPDOP points due to GeoMaxPDOP cut\n" if $cutPDOP; print $out "Ignored $cutHDOP points due to GeoMaxHDOP cut\n" if $cutHDOP; print $out "Ignored $cutSats points due to GeoMinSats cut\n" if $cutSats; if ($numPoints and $verbose > 1) { my @lbl = ('start:', 'end: '); # (fixes may be in reverse order in GPX files) @lbl = reverse @lbl if $fixTimes[0] > $fixTimes[-1]; print $out " GPS track $lbl[0] " . PrintFixTime($fixTimes[0]) . "\n"; if ($verbose > 3) { print $out PrintFix($points, $_) foreach @fixTimes; } print $out " GPS track $lbl[1] " . PrintFixTime($fixTimes[-1]) . "\n"; } } if ($numPoints) { # reset timestamp list to force it to be regenerated delete $$geotag{Times}; # set flags for available information $$has{alt} = 1 if $nmea{GGA} or $nmea{PMGNTRK} or $nmea{B}; # alt $$has{track} = 1 if $nmea{RMC}; # track, speed $$has{orient} = 1 if $nmea{PTNTHPR}; # dir, pitch, roll return $geotag; # success! } return "No track points found in GPS $from"; } #------------------------------------------------------------------------------ # Apply Geosync time correction # Inputs: 0) ExifTool ref, 1) Unix UTC time value # Returns: sync time difference (and updates input time), or undef if no sync sub ApplySyncCorr($$) { my ($et, $time) = @_; my $sync = $et->GetNewValue('Geosync'); if (ref $sync eq 'HASH') { my $syncTimes = $$sync{Times}; if ($syncTimes) { # find the nearest 2 sync points my ($i0, $i1) = (0, scalar(@$syncTimes) - 1); while ($i1 > $i0 + 1) { my $pt = int(($i0 + $i1) / 2); if ($time < $$syncTimes[$pt]) { $i1 = $pt; } else { $i0 = $pt; } } my ($t0, $t1) = ($$syncTimes[$i0], $$syncTimes[$i1]); # interpolate/extrapolate to account for linear camera clock drift my $syncPoints = $$sync{Points}; my $f = $t1 == $t0 ? 0 : ($time - $t0) / ($t1 - $t0); $sync = $$syncPoints{$t1} * $f + $$syncPoints{$t0} * (1 - $f); } else { $sync = $$sync{Offset}; # use fixed time offset } $_[1] += $sync; } else { undef $sync; } return $sync; } #------------------------------------------------------------------------------ # Scan outwards for a fix containing the requested parameter # Inputs: 0) name of fix parameter, 1) reference to list of fix times, # 2) reference to fix points hash, 3) index of starting time, # 4) direction to scan (-1 or +1), 5) maximum time difference # Returns: 0) time for fix containing requested information (or undef) # 1) the corresponding fix, 2) the value of the requested fix parameter sub ScanOutwards($$$$$$) { my ($key, $times, $points, $i, $dir, $maxSecs) = @_; my $t0 = $$times[$i]; for (;;) { $i += $dir; last if $i < 0 or $i >= scalar @$times; my $t = $$times[$i]; last if abs($t - $t0) > $maxSecs; # don't look too far my $p = $$points{$t}; my $v = $$p{$key}; return($t,$p,$v) if defined $v; } return(); } #------------------------------------------------------------------------------ # Find nearest fix containing the specified parameter # Inputs: 0) ExifTool ref, 1) name of fix parameter, 2) reference to list of fix times, # 3) reference to fix points hash, 4) index of starting time, # 5) direction to scan (-1, +1 or undef), 6) maximum time difference # Returns: reference to fix hash or undef sub FindFix($$$$$$$) { my ($et, $key, $times, $points, $i, $dir, $maxSecs) = @_; my ($t,$p); if ($dir) { ($t,$p) = ScanOutwards($key, $times, $points, $i, $dir, $maxSecs); } else { my ($t1, $p1) = ScanOutwards($key, $times, $points, $i, -1, $maxSecs); my ($t2, $p2) = ScanOutwards($key, $times, $points, $i, 1, $maxSecs); if (defined $t1) { if (defined $t2) { # both surrounding points are valid, so take the closest one ($t, $p) = ($t - $t1 < $t2 - $t) ? ($t1, $p1) : ($t2, $p2); } else { ($t, $p) = ($t1, $p1); } } elsif (defined $t2) { ($t, $p) = ($t2, $p2); } } if (defined $p and $$et{OPTIONS}{Verbose} > 2) { $et->VPrint(2, " Taking $key from fix:\n", PrintFix($points, $t)) } return $p; } #------------------------------------------------------------------------------ # Set new geotagging values according to date/time # Inputs: 0) ExifTool object ref, 1) date/time value (or undef to delete tags) # 2) optional write group # Returns: error string, or '' on success # Notes: Uses track data stored in ExifTool NEW_VALUE for Geotag tag sub SetGeoValues($$;$) { local $_; my ($et, $val, $writeGroup) = @_; my $geotag = $et->GetNewValue('Geotag'); my $verbose = $et->Options('Verbose'); my ($fix, $time, $fsec, $noDate, $secondTry, $iExt, $iDir); # remove date if none of our fixes had date information $val =~ s/^\S+\s+// if $val and $geotag and not $$geotag{IsDate}; # maximum time (sec) from nearest GPS fix when position is still considered valid my $geoMaxIntSecs = $et->Options('GeoMaxIntSecs'); my $geoMaxExtSecs = $et->Options('GeoMaxExtSecs'); # use 30 minutes for a default defined $geoMaxIntSecs or $geoMaxIntSecs = 1800; defined $geoMaxExtSecs or $geoMaxExtSecs = 1800; my $times = $$geotag{Times}; my $points = $$geotag{Points}; my $has = $$geotag{Has}; my $err = ''; # loop to try date/time value first, then time-only value while (defined $val) { unless (defined $geotag) { $err = 'No GPS track loaded'; last; } unless ($times) { # generate sorted timestamp list for binary search my @times = sort { $a <=> $b } keys %$points; $times = $$geotag{Times} = \@times; } unless ($times and @$times) { $err = 'GPS track is empty'; last; } unless (eval { require Time::Local }) { $err = 'Geotag feature requires Time::Local installed'; last; } # convert date/time to UTC my ($year,$mon,$day,$hr,$min,$sec,$fs,$tz,$t0,$t1,$t2); if ($val =~ /^(\d{4}):(\d+):(\d+)\s+(\d+):(\d+):(\d+)(\.\d*)?(Z|([-+])(\d+):(\d+))?/) { # valid date/time value ($year,$mon,$day,$hr,$min,$sec,$fs,$tz,$t0,$t1,$t2) = ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11); } elsif ($val =~ /^(\d{2}):(\d+):(\d+)(\.\d*)?(Z|([-+])(\d+):(\d+))?/) { # valid time-only value ($hr,$min,$sec,$fs,$tz,$t0,$t1,$t2) = ($1,$2,$3,$4,$5,$6,$7,$8); # use Jan. 2 to avoid going negative after tz adjustment ($year,$mon,$day) = (1970,1,2); $noDate = 1; } else { $err = 'Invalid date/time (use YYYY:mm:dd HH:MM:SS[.ss][+/-HH:MM|Z])'; last; } if ($tz) { $time = Time::Local::timegm($sec,$min,$hr,$day,$mon-1,$year-1900); # use timezone from date/time value if ($tz ne 'Z') { my $tzmin = $t1 * 60 + $t2; $time -= ($t0 eq '-' ? -$tzmin : $tzmin) * 60; } } else { # assume local timezone $time = Image::ExifTool::TimeLocal($sec,$min,$hr,$day,$mon-1,$year-1900); } # add fractional seconds $time += $fs if $fs and $fs ne '.'; # bring UTC time back to Jan. 1 if no date is given $time %= $secPerDay if $noDate; # apply time synchronization if available my $sync = ApplySyncCorr($et, $time); # save fractional seconds string $fsec = ($time =~ /(\.\d+)$/) ? $1 : ''; if ($et->Options('Verbose') > 1 and not $secondTry) { my $out = $et->Options('TextOut'); my $str = ''; $str .= sprintf(" (incl. Geosync offset of %+.3f sec)", $sync) if defined $sync; unless ($tz) { my $tzs = Image::ExifTool::TimeZoneString([$sec,$min,$hr,$day,$mon-1,$year-1900],$time); $str .= " (local timezone is $tzs)"; } print $out ' Geotime value: ' . PrintFixTime($time) . "$str\n"; } # interpolate GPS track at $time if ($time < $$times[0]) { if ($time < $$times[0] - $geoMaxExtSecs) { $err or $err = 'Time is too far before track'; $et->VPrint(2, ' Track start: ', PrintFixTime($$times[0]), "\n") if $verbose > 2; } else { $fix = $$points{$$times[0]}; $iExt = 0; $iDir = 1; $et->VPrint(2, " Taking pos from fix:\n", PrintFix($points, $$times[0])) if $verbose > 2; } } elsif ($time > $$times[-1]) { if ($time > $$times[-1] + $geoMaxExtSecs) { $err or $err = 'Time is too far beyond track'; $et->VPrint(2, ' Track end: ', PrintFixTime($$times[-1]), "\n") if $verbose > 2; } else { $fix = $$points{$$times[-1]}; $iExt = $#$times; $iDir = -1; $et->VPrint(2, " Taking pos from fix:\n", PrintFix($points, $$times[-1])) if $verbose > 2; } } else { # find nearest 2 points in time my ($i0, $i1) = (0, scalar(@$times) - 1); while ($i1 > $i0 + 1) { my $pt = int(($i0 + $i1) / 2); if ($time < $$times[$pt]) { $i1 = $pt; } else { $i0 = $pt; } } # do linear interpolation for position my $t0 = $$times[$i0]; my $t1 = $$times[$i1]; my $p1 = $$points{$t1}; # check to see if we are extrapolating before the first entry in a track my $maxSecs = ($$p1{first} and $geoMaxIntSecs) ? $geoMaxExtSecs : $geoMaxIntSecs; # don't interpolate if fixes are too far apart if ($t1 - $t0 > $maxSecs) { # treat as an extrapolation -- use nearest fix if close enough my $tn; if ($time - $t0 < $t1 - $time) { $tn = $t0; $iExt = $i0; } else { $tn = $t1; $iExt = $i1; } if (abs($time - $tn) > $geoMaxExtSecs) { $err or $err = 'Time is too far from nearest GPS fix'; $et->VPrint(2, ' Nearest fix: ', PrintFixTime($tn), "\n") if $verbose > 2; } else { $fix = $$points{$tn}; $et->VPrint(2, " Taking pos from fix:\n", PrintFix($points, $tn)) if $verbose > 2; } } else { my $f0 = $t1 == $t0 ? 0 : ($time - $t0) / ($t1 - $t0); my $p0 = $$points{$t0}; $et->VPrint(2, " Interpolating between fixes (f=$f0):\n", PrintFix($points, $t0, $t1)) if $verbose > 2; $fix = { }; # loop through available fix information categories # (pos, track, alt, orient) my ($category, $key); Category: foreach $category (qw{pos track alt orient}) { next unless $$has{$category}; my ($f, $p0b, $p1b, $f0b); # loop through specific fix information keys # (lat, lon, alt, track, speed, dir, pitch, roll) foreach $key (@{$fixInfoKeys{$category}}) { my $v0 = $$p0{$key}; my $v1 = $$p1{$key}; if (defined $v0 and defined $v1) { $f = $f0; } elsif (defined $f0b) { $v0 = $$p0b{$key}; $v1 = $$p1b{$key}; next unless defined $v0 and defined $v1; $f = $f0b; } else { # scan outwards looking for fixes with the required information # (NOTE: SHOULD EVENTUALLY DO THIS FOR EXTRAPOLATION TOO!) my ($t0b, $t1b); if (defined $v0) { $t0b = $t0; $p0b = $p0; } else { ($t0b,$p0b,$v0) = ScanOutwards($key,$times,$points,$i0,-1,$maxSecs); next Category unless defined $t0b; } if (defined $v1) { $t1b = $t1; $p1b = $p1; } else { ($t1b,$p1b,$v1) = ScanOutwards($key,$times,$points,$i1,1,$maxSecs); next Category unless defined $t1b; } # re-calculate the interpolation factor $f = $f0b = $t1b == $t0b ? 0 : ($time - $t0b) / ($t1b - $t0b); $et->VPrint(2, " Interpolating $category between fixes (f=$f):\n", PrintFix($points, $t0b, $t1b)) if $verbose > 2; } # must interpolate cyclical values differently if ($cyclical{$key} and abs($v1 - $v0) > 180) { # the acute angle spans the discontinuity, so add # 360 degrees to the smaller angle before interpolating $v0 < $v1 ? $v0 += 360 : $v1 += 360; $$fix{$key} = $v1 * $f + $v0 * (1 - $f); # longitude and roll ranges are -180 to 180, others are 0 to 360 my $max = ($key eq 'lon' or $key eq 'roll') ? 180 : 360; $$fix{$key} -= 360 if $$fix{$key} >= $max; } else { # simple linear interpolation $$fix{$key} = $v1 * $f + $v0 * (1 - $f); } } } } } if ($fix) { $err = ''; # success! } elsif ($$geotag{NoDate} and not $noDate and $val =~ s/^\S+\s+//) { # try again with no date since some of our track points are date-less $secondTry = 1; next; } last; } if ($fix) { my ($gpsDate, $gpsAlt, $gpsAltRef); my @t = gmtime(int $time); my $gpsTime = sprintf('%.2d:%.2d:%.2d', $t[2], $t[1], $t[0]) . $fsec; # write GPSDateStamp if date included in track log, otherwise delete it $gpsDate = sprintf('%.2d:%.2d:%.2d', $t[5]+1900, $t[4]+1, $t[3]) unless $noDate; # write GPSAltitude tags if altitude included in track log, otherwise delete them if (defined $$fix{alt}) { $gpsAlt = abs $$fix{alt}; $gpsAltRef = ($$fix{alt} < 0 ? 1 : 0); } elsif ($$has{alt} and defined $iExt) { my $tFix = FindFix($et,'alt',$times,$points,$iExt,$iDir,$geoMaxExtSecs); if ($tFix) { $gpsAlt = abs $$tFix{alt}; $gpsAltRef = ($$tFix{alt} < 0 ? 1 : 0); } } # set new GPS tag values (EXIF, or XMP if write group is 'xmp') my ($xmp, $exif, @r); my %opts = ( Type => 'ValueConv' ); # write ValueConv values if ($writeGroup) { $opts{Group} = $writeGroup; $xmp = ($writeGroup =~ /xmp/i); $exif = ($writeGroup =~ /^(exif|gps)$/i); } # (capture error messages by calling SetNewValue in list context) @r = $et->SetNewValue(GPSLatitude => $$fix{lat}, %opts); @r = $et->SetNewValue(GPSLongitude => $$fix{lon}, %opts); @r = $et->SetNewValue(GPSAltitude => $gpsAlt, %opts); @r = $et->SetNewValue(GPSAltitudeRef => $gpsAltRef, %opts); if ($$has{track}) { my $tFix = $fix; if (not defined $$fix{track} and defined $iExt) { my $p = FindFix($et,'track',$times,$points,$iExt,$iDir,$geoMaxExtSecs); $tFix = $p if $p; } @r = $et->SetNewValue(GPSTrack => $$tFix{track}, %opts); @r = $et->SetNewValue(GPSTrackRef => (defined $$tFix{track} ? 'T' : undef), %opts); @r = $et->SetNewValue(GPSSpeed => $$tFix{speed}, %opts); @r = $et->SetNewValue(GPSSpeedRef => (defined $$tFix{speed} ? 'N' : undef), %opts); } if ($$has{orient}) { my $tFix = $fix; if (not defined $$fix{dir} and defined $iExt) { my $p = FindFix($et,'dir',$times,$points,$iExt,$iDir,$geoMaxExtSecs); $tFix = $p if $p; } @r = $et->SetNewValue(GPSImgDirection => $$tFix{dir}, %opts); @r = $et->SetNewValue(GPSImgDirectionRef => (defined $$tFix{dir} ? 'T' : undef), %opts); # Note: GPSPitch and GPSRoll are non-standard, and must be user-defined @r = $et->SetNewValue(GPSPitch => $$tFix{pitch}, %opts); @r = $et->SetNewValue(GPSRoll => $$tFix{roll}, %opts); } unless ($xmp) { @r = $et->SetNewValue(GPSLatitudeRef => ($$fix{lat} > 0 ? 'N' : 'S'), %opts); @r = $et->SetNewValue(GPSLongitudeRef => ($$fix{lon} > 0 ? 'E' : 'W'), %opts); @r = $et->SetNewValue(GPSDateStamp => $gpsDate, %opts); @r = $et->SetNewValue(GPSTimeStamp => $gpsTime, %opts); # set options to edit XMP:GPSDateTime only if it already exists $opts{EditOnly} = 1; $opts{Group} = 'XMP'; } unless ($exif) { @r = $et->SetNewValue(GPSDateTime => "$gpsDate $gpsTime", %opts); } } else { my %opts; $opts{Replace} = 2 if defined $val; # remove existing new values $opts{Group} = $writeGroup if $writeGroup; # reset any GPS values we might have already set foreach (qw(GPSLatitude GPSLatitudeRef GPSLongitude GPSLongitudeRef GPSAltitude GPSAltitudeRef GPSDateStamp GPSTimeStamp GPSDateTime GPSTrack GPSTrackRef GPSSpeed GPSSpeedRef GPSImgDirection GPSImgDirectionRef GPSPitch GPSRoll)) { my @r = $et->SetNewValue($_, undef, %opts); } } return $err; } #------------------------------------------------------------------------------ # Convert Geotagging time synchronization value # Inputs: 0) exiftool object ref, # 1) time difference string ("[+-]DD MM:HH:SS.ss"), geosync'd file name, # "GPSTIME@IMAGETIME", or "GPSTIME@FILENAME" # Returns: geosync hash # Notes: calling this routine with more than one geosync'd file causes time drift # correction to be implemented sub ConvertGeosync($$) { my ($et, $val) = @_; my $sync = $et->GetNewValue('Geosync') || { }; my ($syncFile, $gpsTime, $imgTime); if ($val =~ /(.*?)\@(.*)/) { $gpsTime = $1; if (-f $2) { $syncFile = $2; } else { $imgTime = $2; } # (take care because "-f '1:30'" crashes ActivePerl 5.10) } elsif ($val !~ /^\d/ or $val !~ /:/) { $syncFile = $val if -f $val; } if ($gpsTime or defined $syncFile) { # (this is a time synchronization vector) if (defined $syncFile) { # check the following tags in order to obtain the image timestamp my @timeTags = qw(SubSecDateTimeOriginal SubSecCreateDate SubSecModifyDate DateTimeOriginal CreateDate ModifyDate FileModifyDate); my $info = ImageInfo($syncFile, { PrintConv => 0 }, @timeTags, 'GPSDateTime', 'GPSTimeStamp'); $$info{Error} and warn("$$info{Err}\n"), return undef; $gpsTime or $gpsTime = $$info{GPSDateTime} || $$info{GPSTimeStamp}; my $tag; foreach $tag (@timeTags) { if ($$info{$tag}) { $imgTime = $$info{$tag}; $et->VPrint(2, "Geosyncing with $tag from '$syncFile'\n"); last; } } $gpsTime or warn("No GPSTimeStamp in '$syncFile\n"), return undef; $imgTime or warn("No image timestamp in '$syncFile'\n"), return undef; } # add date to date-less timestamps my ($imgDateTime, $gpsDateTime, $noDate); if ($imgTime =~ /^(\d+:\d+:\d+)\s+\d+/) { $imgDateTime = $imgTime; my $date = $1; if ($gpsTime =~ /^\d+:\d+:\d+\s+\d+/) { $gpsDateTime = $gpsTime; } else { $gpsDateTime = "$date $gpsTime"; } } elsif ($gpsTime =~ /^(\d+:\d+:\d+)\s+\d+/) { $imgDateTime = "$1 $imgTime"; $gpsDateTime = $gpsTime; } else { # use a today's date (so hopefully the DST setting will be intuitive) my @tm = localtime; my $date = sprintf('%.4d:%.2d:%.2d', $tm[5]+1900, $tm[4]+1, $tm[3]); $gpsDateTime = "$date $gpsTime"; $imgDateTime = "$date $imgTime"; $noDate = 1; } # calculate Unix seconds since the epoch my $imgSecs = Image::ExifTool::GetUnixTime($imgDateTime, 1); defined $imgSecs or warn("Invalid image time '$imgTime'\n"), return undef; my $gpsSecs = Image::ExifTool::GetUnixTime($gpsDateTime, 1); defined $gpsSecs or warn("Invalid GPS time '$gpsTime'\n"), return undef; # add fractional seconds $gpsSecs += $1 if $gpsTime =~ /(\.\d+)/; $imgSecs += $1 if $imgTime =~ /(\.\d+)/; # shift dates within 12 hours of each other if either timestamp was date-less if ($gpsDateTime ne $gpsTime or $imgDateTime ne $imgTime) { my $diff = ($imgSecs - $gpsSecs) % (24 * 3600); $diff -= 24 * 3600 if $diff > 12 * 3600; $diff += 24 * 3600 if $diff < -12 * 3600; if ($gpsDateTime ne $gpsTime) { $gpsSecs = $imgSecs - $diff; } else { $imgSecs = $gpsSecs + $diff; } } # save the synchronization offset $$sync{Offset} = $gpsSecs - $imgSecs; # save this synchronization point if either timestamp had a date unless ($noDate) { $$sync{Points} or $$sync{Points} = { }; $$sync{Points}{$imgSecs} = $$sync{Offset}; # print verbose output if ($et->Options('Verbose') > 1) { # print GPS and image timestamps in UTC $et->VPrint(1, "Added Geosync point:\n", ' GPS time stamp: ', PrintFixTime($gpsSecs), "\n", ' Image date/time: ', PrintFixTime($imgSecs), "\n"); } # save sorted list of image sync times if we have more than one my @times = keys %{$$sync{Points}}; if (@times > 1) { @times = sort { $a <=> $b } @times; $$sync{Times} = \@times; } } } else { # (this is a simple time difference) my @vals = $val =~ /(?=\d|\.\d)\d*(?:\.\d*)?/g; # (allow decimal values too) @vals or warn("Invalid value (please refer to geotag documentation)\n"), return undef; my $secs = 0; my $mult; foreach $mult (1, 60, 3600, $secPerDay) { $secs += $mult * pop(@vals); last unless @vals; } # set constant sync offset $$sync{Offset} = $val =~ /^\s*-/ ? -$secs : $secs; } return $sync; } #------------------------------------------------------------------------------ # Print fix time # Inputs: 0) time since the epoch # Returns: UTC time string with fractional seconds sub PrintFixTime($) { my $time = $_[0] + 0.0005; # round off to nearest ms my $fsec = int(($time - int($time)) * 1000); return sprintf('%s.%.3d UTC', Image::ExifTool::ConvertUnixTime($time), $fsec); } #------------------------------------------------------------------------------ # Print fix information # Inputs: 0) lookup for all fix points, 1-n) list of fix times # Returns: fix string (including leading indent and trailing newline) sub PrintFix($@) { local $_; my $points = shift; my $str = ''; while (@_) { my $time = shift; $str .= ' ' . PrintFixTime($time) . ' -'; my $fix = $$points{$time}; if ($fix) { foreach (sort keys %$fix) { $str .= " $_=$$fix{$_}" unless $_ eq 'time' or not defined $$fix{$_}; } } $str .= "\n"; } return $str; } #------------------------------------------------------------------------------ 1; # end __END__ =head1 NAME Image::ExifTool::Geotag - Geotagging utility routines =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module loads GPS track logs, interpolates to determine position based on time, and sets new GPS values for geotagging images. Currently supported formats are GPX, NMEA RMC/GGA/GLL, KML, IGC, Garmin XML and TCX, Magellan PMGNTRK, Honeywell PTNTHPR, Winplus Beacon text, and Bramor gEO log files. Methods in this module should not be called directly. Instead, the Geotag feature is accessed by writing the values of the ExifTool Geotag, Geosync and Geotime tags (see the L<Extra Tags|Image::ExifTool::TagNames/Extra Tags> in the tag name documentation). =head1 NOTES To take advantage of attitude information in the PTNTHPR NMEA sentence, two user-defined tags, GPSPitch and GPSRoll, must be active. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.topografix.com/GPX/1/1/> =item L<http://www.gpsinformation.org/dale/nmea.htm#GSA> =item L<http://code.google.com/apis/kml/documentation/kmlreference.html> =item L<http://www.fai.org/gliding/system/files/tech_spec_gnss.pdf> =back =head1 ACKNOWLEDGEMENTS Thanks to Lionel Genet for the ability to read IGC format track logs. =head1 SEE ALSO L<Image::ExifTool::TagNames/Extra Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/GeoTiff.pm��������������������������������������������������000644 �000765 �000024 �00000256431 12642461303 021601� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: GeoTiff.pm # # Description: Read GeoTiff meta information # # Revisions: 02/23/2004 - P. Harvey Created # 02/25/2004 - PH Added new codes from libgeotiff-1.2.1 # 02/01/2007 - PH Added new codes from libgeotiff-1.2.3 # 01/22/2014 - PH Added new code from libgeotiff-1.4.0 # 01/19/2015 - PH Added ChartTIFF tags # # References: 1) ftp://ftp.remotesensing.org/geotiff/libgeotiff/libgeotiff-1.1.4.tar.gz # 2) http://www.charttiff.com/whitepapers.shtml #------------------------------------------------------------------------------ package Image::ExifTool::GeoTiff; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.11'; # format codes for geoTiff directory entries my %geoTiffFormat = ( 0 => 'int16u', 0x87b0 => 'double', 0x87b1 => 'string', ); my %epsg_units = ( 9001 => 'Linear Meter', 9002 => 'Linear Foot', 9003 => 'Linear Foot US Survey', 9004 => 'Linear Foot Modified American', 9005 => 'Linear Foot Clarke', 9006 => 'Linear Foot Indian', 9007 => 'Linear Link', 9008 => 'Linear Link Benoit', 9009 => 'Linear Link Sears', 9010 => 'Linear Chain Benoit', 9011 => 'Linear Chain Sears', 9012 => 'Linear Yard Sears', 9013 => 'Linear Yard Indian', 9014 => 'Linear Fathom', 9015 => 'Linear Mile International Nautical', 9101 => 'Angular Radian', 9102 => 'Angular Degree', 9103 => 'Angular Arc Minute', 9104 => 'Angular Arc Second', 9105 => 'Angular Grad', 9106 => 'Angular Gon', 9107 => 'Angular DMS', 9108 => 'Angular DMS Hemisphere', 32767 => 'User Defined', ); my %epsg_vertcs = ( 0 => 'Undefined', 5001 => 'Airy 1830 ellipsoid', 5002 => 'Airy Modified 1849 ellipsoid', 5003 => 'ANS ellipsoid', 5004 => 'Bessel 1841 ellipsoid', 5005 => 'Bessel Modified ellipsoid', 5006 => 'Bessel Namibia ellipsoid', 5007 => 'Clarke 1858 ellipsoid', 5008 => 'Clarke 1866 ellipsoid', 5010 => 'Clarke 1880 Benoit ellipsoid', 5011 => 'Clarke 1880 IGN ellipsoid', 5012 => 'Clarke 1880 RGS ellipsoid', 5013 => 'Clarke 1880 Arc ellipsoid', 5014 => 'Clarke 1880 SGA 1922 ellipsoid', 5015 => 'Everest 1830 1937 Adjustment ellipsoid', 5016 => 'Everest 1830 1967 Definition ellipsoid', 5017 => 'Everest 1830 1975 Definition ellipsoid', 5018 => 'Everest 1830 Modified ellipsoid', 5019 => 'GRS 1980 ellipsoid', 5020 => 'Helmert 1906 ellipsoid', 5021 => 'INS ellipsoid', 5022 => 'International 1924 ellipsoid', 5023 => 'International 1967 ellipsoid', 5024 => 'Krassowsky 1940 ellipsoid', 5025 => 'NWL 9D ellipsoid', 5026 => 'NWL 10D ellipsoid', 5027 => 'Plessis 1817 ellipsoid', 5028 => 'Struve 1860 ellipsoid', 5029 => 'War Office ellipsoid', 5030 => 'WGS 84 ellipsoid', 5031 => 'GEM 10C ellipsoid', 5032 => 'OSU86F ellipsoid', 5033 => 'OSU91A ellipsoid', 5101 => 'Newlyn', 5102 => 'North American Vertical Datum 1929', 5103 => 'North American Vertical Datum 1988', 5104 => 'Yellow Sea 1956', 5105 => 'Baltic Sea', 5106 => 'Caspian Sea', 32767 => 'User Defined', ); %Image::ExifTool::GeoTiff::Main = ( GROUPS => { 2 => 'Location' }, 1 => { # this isn't a real GeoTiff key, but put it here # so it will appear in tag lists since we generate it below Name => 'GeoTiffVersion', }, 1024 => { Name => 'GTModelType', PrintConv => { 1 => 'Projected', 2 => 'Geographic', 3 => 'Geocentric', 32767 => 'User Defined', }, }, 1025 => { Name => 'GTRasterType', PrintConv => { 1 => 'Pixel Is Area', 2 => 'Pixel Is Point', 32767 => 'User Defined', }, }, 1026 => 'GTCitation', 2048 => { Name => 'GeographicType', PrintConv => { # epsg_gcs 4001 => 'Airy 1830', 4002 => 'Airy Modified 1849', 4003 => 'Australian National Spheroid', 4004 => 'Bessel 1841', 4005 => 'Bessel Modified', 4006 => 'Bessel Namibia', 4007 => 'Clarke 1858', 4008 => 'Clarke 1866', 4009 => 'Clarke 1866 Michigan', 4010 => 'Clarke 1880 Benoit', 4011 => 'Clarke 1880 IGN', 4012 => 'Clarke 1880 RGS', 4013 => 'Clarke 1880 Arc', 4014 => 'Clarke 1880 SGA 1922', 4015 => 'Everest 1830 1937 Adjustment', 4016 => 'Everest 1830 1967 Definition', 4017 => 'Everest 1830 1975 Definition', 4018 => 'Everest 1830 Modified', 4019 => 'GRS 1980', 4020 => 'Helmert 1906', 4021 => 'Indonesian National Spheroid', 4022 => 'International 1924', 4023 => 'International 1967', 4024 => 'Krassowsky 1940', 4025 => 'NWL9D', 4026 => 'NWL10D', 4027 => 'Plessis 1817', 4028 => 'Struve 1860', 4029 => 'War Office', 4030 => 'WGS84', 4031 => 'GEM10C', 4032 => 'OSU86F', 4033 => 'OSU91A', 4034 => 'Clarke 1880', 4035 => 'Sphere', 4120 => 'Greek', 4121 => 'GGRS87', 4123 => 'KKJ', 4124 => 'RT90', 4133 => 'EST92', 4815 => 'Greek Athens', 4201 => 'Adindan', 4202 => 'AGD66', 4203 => 'AGD84', 4204 => 'Ain el Abd', 4205 => 'Afgooye', 4206 => 'Agadez', 4207 => 'Lisbon', 4208 => 'Aratu', 4209 => 'Arc 1950', 4210 => 'Arc 1960', 4211 => 'Batavia', 4212 => 'Barbados', 4213 => 'Beduaram', 4214 => 'Beijing 1954', 4215 => 'Belge 1950', 4216 => 'Bermuda 1957', 4217 => 'Bern 1898', 4218 => 'Bogota', 4219 => 'Bukit Rimpah', 4220 => 'Camacupa', 4221 => 'Campo Inchauspe', 4222 => 'Cape', 4223 => 'Carthage', 4224 => 'Chua', 4225 => 'Corrego Alegre', 4226 => 'Cote d Ivoire', 4227 => 'Deir ez Zor', 4228 => 'Douala', 4229 => 'Egypt 1907', 4230 => 'ED50', 4231 => 'ED87', 4232 => 'Fahud', 4233 => 'Gandajika 1970', 4234 => 'Garoua', 4235 => 'Guyane Francaise', 4236 => 'Hu Tzu Shan', 4237 => 'HD72', 4238 => 'ID74', 4239 => 'Indian 1954', 4240 => 'Indian 1975', 4241 => 'Jamaica 1875', 4242 => 'JAD69', 4243 => 'Kalianpur', 4244 => 'Kandawala', 4245 => 'Kertau', 4246 => 'KOC', 4247 => 'La Canoa', 4248 => 'PSAD56', 4249 => 'Lake', 4250 => 'Leigon', 4251 => 'Liberia 1964', 4252 => 'Lome', 4253 => 'Luzon 1911', 4254 => 'Hito XVIII 1963', 4255 => 'Herat North', 4256 => 'Mahe 1971', 4257 => 'Makassar', 4258 => 'EUREF89', 4259 => 'Malongo 1987', 4260 => 'Manoca', 4261 => 'Merchich', 4262 => 'Massawa', 4263 => 'Minna', 4264 => 'Mhast', 4265 => 'Monte Mario', 4266 => 'M poraloko', 4267 => 'NAD27', 4268 => 'NAD Michigan', 4269 => 'NAD83', 4270 => 'Nahrwan 1967', 4271 => 'Naparima 1972', 4272 => 'GD49', 4273 => 'NGO 1948', 4274 => '73', 4275 => 'NTF', 4276 => 'NSWC 9Z 2', 4277 => 'OSGB 1936', 4278 => 'OSGB70', 4279 => 'OS SN80', 4280 => 'Padang', 4281 => 'Palestine 1923', 4282 => 'Pointe Noire', 4283 => 'GDA94', 4284 => 'Pulkovo 1942', 4285 => 'Qatar', 4286 => 'Qatar 1948', 4287 => 'Qornoq', 4288 => 'Loma Quintana', 4289 => 'Amersfoort', 4290 => 'RT38', 4291 => 'SAD69', 4292 => 'Sapper Hill 1943', 4293 => 'Schwarzeck', 4294 => 'Segora', 4295 => 'Serindung', 4296 => 'Sudan', 4297 => 'Tananarive', 4298 => 'Timbalai 1948', 4299 => 'TM65', 4300 => 'TM75', 4301 => 'Tokyo', 4302 => 'Trinidad 1903', 4303 => 'TC 1948', 4304 => 'Voirol 1875', 4305 => 'Voirol Unifie', 4306 => 'Bern 1938', 4307 => 'Nord Sahara 1959', 4308 => 'Stockholm 1938', 4309 => 'Yacare', 4310 => 'Yoff', 4311 => 'Zanderij', 4312 => 'MGI', 4313 => 'Belge 1972', 4314 => 'DHDN', 4315 => 'Conakry 1905', 4317 => 'Dealul Piscului 1970', 4322 => 'WGS 72', 4324 => 'WGS 72BE', 4326 => 'WGS 84', 4801 => 'Bern 1898 Bern', 4802 => 'Bogota Bogota', 4803 => 'Lisbon Lisbon', 4804 => 'Makassar Jakarta', 4805 => 'MGI Ferro', 4806 => 'Monte Mario Rome', 4807 => 'NTF Paris', 4808 => 'Padang Jakarta', 4809 => 'Belge 1950 Brussels', 4810 => 'Tananarive Paris', 4811 => 'Voirol 1875 Paris', 4812 => 'Voirol Unifie Paris', 4813 => 'Batavia Jakarta', 4901 => 'ATF Paris', 4902 => 'NDG Paris', 32767 => 'User Defined', }, }, 2049 => 'GeogCitation', 2050 => { Name => 'GeogGeodeticDatum', PrintConv => { # epsg_datum, 6001 => 'Airy 1830', 6002 => 'Airy Modified 1849', 6003 => 'Australian National Spheroid', 6004 => 'Bessel 1841', 6005 => 'Bessel Modified', 6006 => 'Bessel Namibia', 6007 => 'Clarke 1858', 6008 => 'Clarke 1866', 6009 => 'Clarke 1866 Michigan', 6010 => 'Clarke 1880 Benoit', 6011 => 'Clarke 1880 IGN', 6012 => 'Clarke 1880 RGS', 6013 => 'Clarke 1880 Arc', 6014 => 'Clarke 1880 SGA 1922', 6015 => 'Everest 1830 1937 Adjustment', 6016 => 'Everest 1830 1967 Definition', 6017 => 'Everest 1830 1975 Definition', 6018 => 'Everest 1830 Modified', 6019 => 'GRS 1980', 6020 => 'Helmert 1906', 6021 => 'Indonesian National Spheroid', 6022 => 'International 1924', 6023 => 'International 1967', 6024 => 'Krassowsky 1960', 6025 => 'NWL9D', 6026 => 'NWL10D', 6027 => 'Plessis 1817', 6028 => 'Struve 1860', 6029 => 'War Office', 6030 => 'WGS84', 6031 => 'GEM10C', 6032 => 'OSU86F', 6033 => 'OSU91A', 6034 => 'Clarke 1880', 6035 => 'Sphere', 6201 => 'Adindan', 6202 => 'Australian Geodetic Datum 1966', 6203 => 'Australian Geodetic Datum 1984', 6204 => 'Ain el Abd 1970', 6205 => 'Afgooye', 6206 => 'Agadez', 6207 => 'Lisbon', 6208 => 'Aratu', 6209 => 'Arc 1950', 6210 => 'Arc 1960', 6211 => 'Batavia', 6212 => 'Barbados', 6213 => 'Beduaram', 6214 => 'Beijing 1954', 6215 => 'Reseau National Belge 1950', 6216 => 'Bermuda 1957', 6217 => 'Bern 1898', 6218 => 'Bogota', 6219 => 'Bukit Rimpah', 6220 => 'Camacupa', 6221 => 'Campo Inchauspe', 6222 => 'Cape', 6223 => 'Carthage', 6224 => 'Chua', 6225 => 'Corrego Alegre', 6226 => 'Cote d Ivoire', 6227 => 'Deir ez Zor', 6228 => 'Douala', 6229 => 'Egypt 1907', 6230 => 'European Datum 1950', 6231 => 'European Datum 1987', 6232 => 'Fahud', 6233 => 'Gandajika 1970', 6234 => 'Garoua', 6235 => 'Guyane Francaise', 6236 => 'Hu Tzu Shan', 6237 => 'Hungarian Datum 1972', 6238 => 'Indonesian Datum 1974', 6239 => 'Indian 1954', 6240 => 'Indian 1975', 6241 => 'Jamaica 1875', 6242 => 'Jamaica 1969', 6243 => 'Kalianpur', 6244 => 'Kandawala', 6245 => 'Kertau', 6246 => 'Kuwait Oil Company', 6247 => 'La Canoa', 6248 => 'Provisional S American Datum 1956', 6249 => 'Lake', 6250 => 'Leigon', 6251 => 'Liberia 1964', 6252 => 'Lome', 6253 => 'Luzon 1911', 6254 => 'Hito XVIII 1963', 6255 => 'Herat North', 6256 => 'Mahe 1971', 6257 => 'Makassar', 6258 => 'European Reference System 1989', 6259 => 'Malongo 1987', 6260 => 'Manoca', 6261 => 'Merchich', 6262 => 'Massawa', 6263 => 'Minna', 6264 => 'Mhast', 6265 => 'Monte Mario', 6266 => 'M poraloko', 6267 => 'North American Datum 1927', 6268 => 'NAD Michigan', 6269 => 'North American Datum 1983', 6270 => 'Nahrwan 1967', 6271 => 'Naparima 1972', 6272 => 'New Zealand Geodetic Datum 1949', 6273 => 'NGO 1948', 6274 => 'Datum 73', 6275 => 'Nouvelle Triangulation Francaise', 6276 => 'NSWC 9Z 2', 6277 => 'OSGB 1936', 6278 => 'OSGB 1970 SN', 6279 => 'OS SN 1980', 6280 => 'Padang 1884', 6281 => 'Palestine 1923', 6282 => 'Pointe Noire', 6283 => 'Geocentric Datum of Australia 1994', 6284 => 'Pulkovo 1942', 6285 => 'Qatar', 6286 => 'Qatar 1948', 6287 => 'Qornoq', 6288 => 'Loma Quintana', 6289 => 'Amersfoort', 6290 => 'RT38', 6291 => 'South American Datum 1969', 6292 => 'Sapper Hill 1943', 6293 => 'Schwarzeck', 6294 => 'Segora', 6295 => 'Serindung', 6296 => 'Sudan', 6297 => 'Tananarive 1925', 6298 => 'Timbalai 1948', 6299 => 'TM65', 6300 => 'TM75', 6301 => 'Tokyo', 6302 => 'Trinidad 1903', 6303 => 'Trucial Coast 1948', 6304 => 'Voirol 1875', 6305 => 'Voirol Unifie 1960', 6306 => 'Bern 1938', 6307 => 'Nord Sahara 1959', 6308 => 'Stockholm 1938', 6309 => 'Yacare', 6310 => 'Yoff', 6311 => 'Zanderij', 6312 => 'Militar Geographische Institut', 6313 => 'Reseau National Belge 1972', 6314 => 'Deutsche Hauptdreiecksnetz', 6315 => 'Conakry 1905', 6317 => 'Dealul Piscului 1970', 6322 => 'WGS72', 6324 => 'WGS72 Transit Broadcast Ephemeris', 6326 => 'WGS84', 6901 => 'Ancienne Triangulation Francaise', 6902 => 'Nord de Guerre', 32767 => 'User Defined', }, }, 2051 => { Name => 'GeogPrimeMeridian', PrintConv => { # epsg_pm 8901 => 'Greenwich', 8902 => 'Lisbon', 8903 => 'Paris', 8904 => 'Bogota', 8905 => 'Madrid', 8906 => 'Rome', 8907 => 'Bern', 8908 => 'Jakarta', 8909 => 'Ferro', 8910 => 'Brussels', 8911 => 'Stockholm', 32767 => 'User Defined', }, }, 2052 => { Name => 'GeogLinearUnits', SeparateTable => 'Units', PrintConv => \%epsg_units, }, 2053 => 'GeogLinearUnitSize', 2054 => { Name => 'GeogAngularUnits', SeparateTable => 'Units', PrintConv => \%epsg_units, }, 2055 => 'GeogAngularUnitSize', 2056 => { Name => 'GeogEllipsoid', PrintConv => { # epsg_ellipse 7001 => 'Airy 1830', 7002 => 'Airy Modified 1849', 7003 => 'Australian National Spheroid', 7004 => 'Bessel 1841', 7005 => 'Bessel Modified', 7006 => 'Bessel Namibia', 7007 => 'Clarke 1858', 7008 => 'Clarke 1866', 7009 => 'Clarke 1866 Michigan', 7010 => 'Clarke 1880 Benoit', 7011 => 'Clarke 1880 IGN', 7012 => 'Clarke 1880 RGS', 7013 => 'Clarke 1880 Arc', 7014 => 'Clarke 1880 SGA 1922', 7015 => 'Everest 1830 1937 Adjustment', 7016 => 'Everest 1830 1967 Definition', 7017 => 'Everest 1830 1975 Definition', 7018 => 'Everest 1830 Modified', 7019 => 'GRS 1980', 7020 => 'Helmert 1906', 7021 => 'Indonesian National Spheroid', 7022 => 'International 1924', 7023 => 'International 1967', 7024 => 'Krassowsky 1940', 7025 => 'NWL 9D', 7026 => 'NWL 10D', 7027 => 'Plessis 1817', 7028 => 'Struve 1860', 7029 => 'War Office', 7030 => 'WGS 84', 7031 => 'GEM 10C', 7032 => 'OSU86F', 7033 => 'OSU91A', 7034 => 'Clarke 1880', 7035 => 'Sphere', 32767 => 'User Defined', }, }, 2057 => 'GeogSemiMajorAxis', 2058 => 'GeogSemiMinorAxis', 2059 => 'GeogInvFlattening', 2060 => { Name => 'GeogAzimuthUnits', SeparateTable => 'Units', PrintConv => \%epsg_units, }, 2061 => 'GeogPrimeMeridianLong', 2062 => 'GeogToWGS84', 3072 => { Name => 'ProjectedCSType', PrintConv => { # epsg_pcs 2100 => 'GGRS87 Greek Grid', 2176 => 'ETRS89 Poland CS2000 zone 5', 2177 => 'ETRS89 Poland CS2000 zone 6', 2177 => 'ETRS89 Poland CS2000 zone 7', 2178 => 'ETRS89 Poland CS2000 zone 8', 2180 => 'ETRS89 Poland CS92', 2204 => 'NAD27 Tennessee', 2205 => 'NAD83 Kentucky North', 2391 => 'KKJ Finland zone 1', 2392 => 'KKJ Finland zone 2', 2393 => 'KKJ Finland zone 3', 2394 => 'KKJ Finland zone 4', 2400 => 'RT90 2 5 gon W', 2600 => 'Lietuvos Koordinoei Sistema 1994', 3053 => 'Hjorsey 1955 Lambert', 3057 => 'ISN93 Lambert 1993', 3300 => 'Estonian Coordinate System of 1992', 20137 => 'Adindan UTM zone 37N', 20138 => 'Adindan UTM zone 38N', 20248 => 'AGD66 AMG zone 48', 20249 => 'AGD66 AMG zone 49', 20250 => 'AGD66 AMG zone 50', 20251 => 'AGD66 AMG zone 51', 20252 => 'AGD66 AMG zone 52', 20253 => 'AGD66 AMG zone 53', 20254 => 'AGD66 AMG zone 54', 20255 => 'AGD66 AMG zone 55', 20256 => 'AGD66 AMG zone 56', 20257 => 'AGD66 AMG zone 57', 20258 => 'AGD66 AMG zone 58', 20348 => 'AGD84 AMG zone 48', 20349 => 'AGD84 AMG zone 49', 20350 => 'AGD84 AMG zone 50', 20351 => 'AGD84 AMG zone 51', 20352 => 'AGD84 AMG zone 52', 20353 => 'AGD84 AMG zone 53', 20354 => 'AGD84 AMG zone 54', 20355 => 'AGD84 AMG zone 55', 20356 => 'AGD84 AMG zone 56', 20357 => 'AGD84 AMG zone 57', 20358 => 'AGD84 AMG zone 58', 20437 => 'Ain el Abd UTM zone 37N', 20438 => 'Ain el Abd UTM zone 38N', 20439 => 'Ain el Abd UTM zone 39N', 20499 => 'Ain el Abd Bahrain Grid', 20538 => 'Afgooye UTM zone 38N', 20539 => 'Afgooye UTM zone 39N', 20700 => 'Lisbon Portugese Grid', 20822 => 'Aratu UTM zone 22S', 20823 => 'Aratu UTM zone 23S', 20824 => 'Aratu UTM zone 24S', 20973 => 'Arc 1950 Lo13', 20975 => 'Arc 1950 Lo15', 20977 => 'Arc 1950 Lo17', 20979 => 'Arc 1950 Lo19', 20981 => 'Arc 1950 Lo21', 20983 => 'Arc 1950 Lo23', 20985 => 'Arc 1950 Lo25', 20987 => 'Arc 1950 Lo27', 20989 => 'Arc 1950 Lo29', 20991 => 'Arc 1950 Lo31', 20993 => 'Arc 1950 Lo33', 20995 => 'Arc 1950 Lo35', 21100 => 'Batavia NEIEZ', 21148 => 'Batavia UTM zone 48S', 21149 => 'Batavia UTM zone 49S', 21150 => 'Batavia UTM zone 50S', 21413 => 'Beijing Gauss zone 13', 21414 => 'Beijing Gauss zone 14', 21415 => 'Beijing Gauss zone 15', 21416 => 'Beijing Gauss zone 16', 21417 => 'Beijing Gauss zone 17', 21418 => 'Beijing Gauss zone 18', 21419 => 'Beijing Gauss zone 19', 21420 => 'Beijing Gauss zone 20', 21421 => 'Beijing Gauss zone 21', 21422 => 'Beijing Gauss zone 22', 21423 => 'Beijing Gauss zone 23', 21473 => 'Beijing Gauss 13N', 21474 => 'Beijing Gauss 14N', 21475 => 'Beijing Gauss 15N', 21476 => 'Beijing Gauss 16N', 21477 => 'Beijing Gauss 17N', 21478 => 'Beijing Gauss 18N', 21479 => 'Beijing Gauss 19N', 21480 => 'Beijing Gauss 20N', 21481 => 'Beijing Gauss 21N', 21482 => 'Beijing Gauss 22N', 21483 => 'Beijing Gauss 23N', 21500 => 'Belge Lambert 50', 21790 => 'Bern 1898 Swiss Old', 21817 => 'Bogota UTM zone 17N', 21818 => 'Bogota UTM zone 18N', 21891 => 'Bogota Colombia 3W', 21892 => 'Bogota Colombia Bogota', 21893 => 'Bogota Colombia 3E', 21894 => 'Bogota Colombia 6E', 22032 => 'Camacupa UTM 32S', 22033 => 'Camacupa UTM 33S', 22191 => 'C Inchauspe Argentina 1', 22192 => 'C Inchauspe Argentina 2', 22193 => 'C Inchauspe Argentina 3', 22194 => 'C Inchauspe Argentina 4', 22195 => 'C Inchauspe Argentina 5', 22196 => 'C Inchauspe Argentina 6', 22197 => 'C Inchauspe Argentina 7', 22332 => 'Carthage UTM zone 32N', 22391 => 'Carthage Nord Tunisie', 22392 => 'Carthage Sud Tunisie', 22523 => 'Corrego Alegre UTM 23S', 22524 => 'Corrego Alegre UTM 24S', 22832 => 'Douala UTM zone 32N', 22992 => 'Egypt 1907 Red Belt', 22993 => 'Egypt 1907 Purple Belt', 22994 => 'Egypt 1907 Ext Purple', 23028 => 'ED50 UTM zone 28N', 23029 => 'ED50 UTM zone 29N', 23030 => 'ED50 UTM zone 30N', 23031 => 'ED50 UTM zone 31N', 23032 => 'ED50 UTM zone 32N', 23033 => 'ED50 UTM zone 33N', 23034 => 'ED50 UTM zone 34N', 23035 => 'ED50 UTM zone 35N', 23036 => 'ED50 UTM zone 36N', 23037 => 'ED50 UTM zone 37N', 23038 => 'ED50 UTM zone 38N', 23239 => 'Fahud UTM zone 39N', 23240 => 'Fahud UTM zone 40N', 23433 => 'Garoua UTM zone 33N', 23700 => 'HD72 EOV', 23846 => 'ID74 UTM zone 46N', 23847 => 'ID74 UTM zone 47N', 23848 => 'ID74 UTM zone 48N', 23849 => 'ID74 UTM zone 49N', 23850 => 'ID74 UTM zone 50N', 23851 => 'ID74 UTM zone 51N', 23852 => 'ID74 UTM zone 52N', 23853 => 'ID74 UTM zone 53N', 23886 => 'ID74 UTM zone 46S', 23887 => 'ID74 UTM zone 47S', 23888 => 'ID74 UTM zone 48S', 23889 => 'ID74 UTM zone 49S', 23890 => 'ID74 UTM zone 50S', 23891 => 'ID74 UTM zone 51S', 23892 => 'ID74 UTM zone 52S', 23893 => 'ID74 UTM zone 53S', 23894 => 'ID74 UTM zone 54S', 23947 => 'Indian 1954 UTM 47N', 23948 => 'Indian 1954 UTM 48N', 24047 => 'Indian 1975 UTM 47N', 24048 => 'Indian 1975 UTM 48N', 24100 => 'Jamaica 1875 Old Grid', 24200 => 'JAD69 Jamaica Grid', 24370 => 'Kalianpur India 0', 24371 => 'Kalianpur India I', 24372 => 'Kalianpur India IIa', 24373 => 'Kalianpur India IIIa', 24374 => 'Kalianpur India IVa', 24382 => 'Kalianpur India IIb', 24383 => 'Kalianpur India IIIb', 24384 => 'Kalianpur India IVb', 24500 => 'Kertau Singapore Grid', 24547 => 'Kertau UTM zone 47N', 24548 => 'Kertau UTM zone 48N', 24720 => 'La Canoa UTM zone 20N', 24721 => 'La Canoa UTM zone 21N', 24818 => 'PSAD56 UTM zone 18N', 24819 => 'PSAD56 UTM zone 19N', 24820 => 'PSAD56 UTM zone 20N', 24821 => 'PSAD56 UTM zone 21N', 24877 => 'PSAD56 UTM zone 17S', 24878 => 'PSAD56 UTM zone 18S', 24879 => 'PSAD56 UTM zone 19S', 24880 => 'PSAD56 UTM zone 20S', 24891 => 'PSAD56 Peru west zone', 24892 => 'PSAD56 Peru central', 24893 => 'PSAD56 Peru east zone', 25000 => 'Leigon Ghana Grid', 25231 => 'Lome UTM zone 31N', 25391 => 'Luzon Philippines I', 25392 => 'Luzon Philippines II', 25393 => 'Luzon Philippines III', 25394 => 'Luzon Philippines IV', 25395 => 'Luzon Philippines V', 25700 => 'Makassar NEIEZ', 25932 => 'Malongo 1987 UTM 32S', 26191 => 'Merchich Nord Maroc', 26192 => 'Merchich Sud Maroc', 26193 => 'Merchich Sahara', 26237 => 'Massawa UTM zone 37N', 26331 => 'Minna UTM zone 31N', 26332 => 'Minna UTM zone 32N', 26391 => 'Minna Nigeria West', 26392 => 'Minna Nigeria Mid Belt', 26393 => 'Minna Nigeria East', 26432 => 'Mhast UTM zone 32S', 26591 => 'Monte Mario Italy 1', 26592 => 'Monte Mario Italy 2', 26632 => 'M poraloko UTM 32N', 26692 => 'M poraloko UTM 32S', 26703 => 'NAD27 UTM zone 3N', 26704 => 'NAD27 UTM zone 4N', 26705 => 'NAD27 UTM zone 5N', 26706 => 'NAD27 UTM zone 6N', 26707 => 'NAD27 UTM zone 7N', 26708 => 'NAD27 UTM zone 8N', 26709 => 'NAD27 UTM zone 9N', 26710 => 'NAD27 UTM zone 10N', 26711 => 'NAD27 UTM zone 11N', 26712 => 'NAD27 UTM zone 12N', 26713 => 'NAD27 UTM zone 13N', 26714 => 'NAD27 UTM zone 14N', 26715 => 'NAD27 UTM zone 15N', 26716 => 'NAD27 UTM zone 16N', 26717 => 'NAD27 UTM zone 17N', 26718 => 'NAD27 UTM zone 18N', 26719 => 'NAD27 UTM zone 19N', 26720 => 'NAD27 UTM zone 20N', 26721 => 'NAD27 UTM zone 21N', 26722 => 'NAD27 UTM zone 22N', 26729 => 'NAD27 Alabama East', 26730 => 'NAD27 Alabama West', 26731 => 'NAD27 Alaska zone 1', 26732 => 'NAD27 Alaska zone 2', 26733 => 'NAD27 Alaska zone 3', 26734 => 'NAD27 Alaska zone 4', 26735 => 'NAD27 Alaska zone 5', 26736 => 'NAD27 Alaska zone 6', 26737 => 'NAD27 Alaska zone 7', 26738 => 'NAD27 Alaska zone 8', 26739 => 'NAD27 Alaska zone 9', 26740 => 'NAD27 Alaska zone 10', 26741 => 'NAD27 California I', 26742 => 'NAD27 California II', 26743 => 'NAD27 California III', 26744 => 'NAD27 California IV', 26745 => 'NAD27 California V', 26746 => 'NAD27 California VI', 26747 => 'NAD27 California VII', 26748 => 'NAD27 Arizona East', 26749 => 'NAD27 Arizona Central', 26750 => 'NAD27 Arizona West', 26751 => 'NAD27 Arkansas North', 26752 => 'NAD27 Arkansas South', 26753 => 'NAD27 Colorado North', 26754 => 'NAD27 Colorado Central', 26755 => 'NAD27 Colorado South', 26756 => 'NAD27 Connecticut', 26757 => 'NAD27 Delaware', 26758 => 'NAD27 Florida East', 26759 => 'NAD27 Florida West', 26760 => 'NAD27 Florida North', 26761 => 'NAD27 Hawaii zone 1', 26762 => 'NAD27 Hawaii zone 2', 26763 => 'NAD27 Hawaii zone 3', 26764 => 'NAD27 Hawaii zone 4', 26765 => 'NAD27 Hawaii zone 5', 26766 => 'NAD27 Georgia East', 26767 => 'NAD27 Georgia West', 26768 => 'NAD27 Idaho East', 26769 => 'NAD27 Idaho Central', 26770 => 'NAD27 Idaho West', 26771 => 'NAD27 Illinois East', 26772 => 'NAD27 Illinois West', 26773 => 'NAD27 Indiana East', 26774 => 'NAD27 BLM 14N feet', 26774 => 'NAD27 Indiana West', 26775 => 'NAD27 BLM 15N feet', 26775 => 'NAD27 Iowa North', 26776 => 'NAD27 BLM 16N feet', 26776 => 'NAD27 Iowa South', 26777 => 'NAD27 BLM 17N feet', 26777 => 'NAD27 Kansas North', 26778 => 'NAD27 Kansas South', 26779 => 'NAD27 Kentucky North', 26780 => 'NAD27 Kentucky South', 26781 => 'NAD27 Louisiana North', 26782 => 'NAD27 Louisiana South', 26783 => 'NAD27 Maine East', 26784 => 'NAD27 Maine West', 26785 => 'NAD27 Maryland', 26786 => 'NAD27 Massachusetts', 26787 => 'NAD27 Massachusetts Is', 26788 => 'NAD27 Michigan North', 26789 => 'NAD27 Michigan Central', 26790 => 'NAD27 Michigan South', 26791 => 'NAD27 Minnesota North', 26792 => 'NAD27 Minnesota Cent', 26793 => 'NAD27 Minnesota South', 26794 => 'NAD27 Mississippi East', 26795 => 'NAD27 Mississippi West', 26796 => 'NAD27 Missouri East', 26797 => 'NAD27 Missouri Central', 26798 => 'NAD27 Missouri West', 26801 => 'NAD Michigan Michigan East', 26802 => 'NAD Michigan Michigan Old Central', 26803 => 'NAD Michigan Michigan West', 26903 => 'NAD83 UTM zone 3N', 26904 => 'NAD83 UTM zone 4N', 26905 => 'NAD83 UTM zone 5N', 26906 => 'NAD83 UTM zone 6N', 26907 => 'NAD83 UTM zone 7N', 26908 => 'NAD83 UTM zone 8N', 26909 => 'NAD83 UTM zone 9N', 26910 => 'NAD83 UTM zone 10N', 26911 => 'NAD83 UTM zone 11N', 26912 => 'NAD83 UTM zone 12N', 26913 => 'NAD83 UTM zone 13N', 26914 => 'NAD83 UTM zone 14N', 26915 => 'NAD83 UTM zone 15N', 26916 => 'NAD83 UTM zone 16N', 26917 => 'NAD83 UTM zone 17N', 26918 => 'NAD83 UTM zone 18N', 26919 => 'NAD83 UTM zone 19N', 26920 => 'NAD83 UTM zone 20N', 26921 => 'NAD83 UTM zone 21N', 26922 => 'NAD83 UTM zone 22N', 26923 => 'NAD83 UTM zone 23N', 26929 => 'NAD83 Alabama East', 26930 => 'NAD83 Alabama West', 26931 => 'NAD83 Alaska zone 1', 26932 => 'NAD83 Alaska zone 2', 26933 => 'NAD83 Alaska zone 3', 26934 => 'NAD83 Alaska zone 4', 26935 => 'NAD83 Alaska zone 5', 26936 => 'NAD83 Alaska zone 6', 26937 => 'NAD83 Alaska zone 7', 26938 => 'NAD83 Alaska zone 8', 26939 => 'NAD83 Alaska zone 9', 26940 => 'NAD83 Alaska zone 10', 26941 => 'NAD83 California 1', 26942 => 'NAD83 California 2', 26943 => 'NAD83 California 3', 26944 => 'NAD83 California 4', 26945 => 'NAD83 California 5', 26946 => 'NAD83 California 6', 26948 => 'NAD83 Arizona East', 26949 => 'NAD83 Arizona Central', 26950 => 'NAD83 Arizona West', 26951 => 'NAD83 Arkansas North', 26952 => 'NAD83 Arkansas South', 26953 => 'NAD83 Colorado North', 26954 => 'NAD83 Colorado Central', 26955 => 'NAD83 Colorado South', 26956 => 'NAD83 Connecticut', 26957 => 'NAD83 Delaware', 26958 => 'NAD83 Florida East', 26959 => 'NAD83 Florida West', 26960 => 'NAD83 Florida North', 26961 => 'NAD83 Hawaii zone 1', 26962 => 'NAD83 Hawaii zone 2', 26963 => 'NAD83 Hawaii zone 3', 26964 => 'NAD83 Hawaii zone 4', 26965 => 'NAD83 Hawaii zone 5', 26966 => 'NAD83 Georgia East', 26967 => 'NAD83 Georgia West', 26968 => 'NAD83 Idaho East', 26969 => 'NAD83 Idaho Central', 26970 => 'NAD83 Idaho West', 26971 => 'NAD83 Illinois East', 26972 => 'NAD83 Illinois West', 26973 => 'NAD83 Indiana East', 26974 => 'NAD83 Indiana West', 26975 => 'NAD83 Iowa North', 26976 => 'NAD83 Iowa South', 26977 => 'NAD83 Kansas North', 26978 => 'NAD83 Kansas South', 26979 => 'NAD83 Kentucky North', 26980 => 'NAD83 Kentucky South', 26981 => 'NAD83 Louisiana North', 26982 => 'NAD83 Louisiana South', 26983 => 'NAD83 Maine East', 26984 => 'NAD83 Maine West', 26985 => 'NAD83 Maryland', 26986 => 'NAD83 Massachusetts', 26987 => 'NAD83 Massachusetts Is', 26988 => 'NAD83 Michigan North', 26989 => 'NAD83 Michigan Central', 26990 => 'NAD83 Michigan South', 26991 => 'NAD83 Minnesota North', 26992 => 'NAD83 Minnesota Cent', 26993 => 'NAD83 Minnesota South', 26994 => 'NAD83 Mississippi East', 26995 => 'NAD83 Mississippi West', 26996 => 'NAD83 Missouri East', 26997 => 'NAD83 Missouri Central', 26998 => 'NAD83 Missouri West', 27038 => 'Nahrwan 1967 UTM 38N', 27039 => 'Nahrwan 1967 UTM 39N', 27040 => 'Nahrwan 1967 UTM 40N', 27120 => 'Naparima UTM 20N', 27200 => 'GD49 NZ Map Grid', 27291 => 'GD49 North Island Grid', 27292 => 'GD49 South Island Grid', 27429 => 'Datum 73 UTM zone 29N', 27500 => 'ATF Nord de Guerre', 27581 => 'NTF France I', 27582 => 'NTF France II', 27583 => 'NTF France III', 27591 => 'NTF Nord France', 27592 => 'NTF Centre France', 27593 => 'NTF Sud France', 27700 => 'British National Grid', 28232 => 'Point Noire UTM 32S', 28348 => 'GDA94 MGA zone 48', 28349 => 'GDA94 MGA zone 49', 28350 => 'GDA94 MGA zone 50', 28351 => 'GDA94 MGA zone 51', 28352 => 'GDA94 MGA zone 52', 28353 => 'GDA94 MGA zone 53', 28354 => 'GDA94 MGA zone 54', 28355 => 'GDA94 MGA zone 55', 28356 => 'GDA94 MGA zone 56', 28357 => 'GDA94 MGA zone 57', 28358 => 'GDA94 MGA zone 58', 28404 => 'Pulkovo Gauss zone 4', 28405 => 'Pulkovo Gauss zone 5', 28406 => 'Pulkovo Gauss zone 6', 28407 => 'Pulkovo Gauss zone 7', 28408 => 'Pulkovo Gauss zone 8', 28409 => 'Pulkovo Gauss zone 9', 28410 => 'Pulkovo Gauss zone 10', 28411 => 'Pulkovo Gauss zone 11', 28412 => 'Pulkovo Gauss zone 12', 28413 => 'Pulkovo Gauss zone 13', 28414 => 'Pulkovo Gauss zone 14', 28415 => 'Pulkovo Gauss zone 15', 28416 => 'Pulkovo Gauss zone 16', 28417 => 'Pulkovo Gauss zone 17', 28418 => 'Pulkovo Gauss zone 18', 28419 => 'Pulkovo Gauss zone 19', 28420 => 'Pulkovo Gauss zone 20', 28421 => 'Pulkovo Gauss zone 21', 28422 => 'Pulkovo Gauss zone 22', 28423 => 'Pulkovo Gauss zone 23', 28424 => 'Pulkovo Gauss zone 24', 28425 => 'Pulkovo Gauss zone 25', 28426 => 'Pulkovo Gauss zone 26', 28427 => 'Pulkovo Gauss zone 27', 28428 => 'Pulkovo Gauss zone 28', 28429 => 'Pulkovo Gauss zone 29', 28430 => 'Pulkovo Gauss zone 30', 28431 => 'Pulkovo Gauss zone 31', 28432 => 'Pulkovo Gauss zone 32', 28464 => 'Pulkovo Gauss 4N', 28465 => 'Pulkovo Gauss 5N', 28466 => 'Pulkovo Gauss 6N', 28467 => 'Pulkovo Gauss 7N', 28468 => 'Pulkovo Gauss 8N', 28469 => 'Pulkovo Gauss 9N', 28470 => 'Pulkovo Gauss 10N', 28471 => 'Pulkovo Gauss 11N', 28472 => 'Pulkovo Gauss 12N', 28473 => 'Pulkovo Gauss 13N', 28474 => 'Pulkovo Gauss 14N', 28475 => 'Pulkovo Gauss 15N', 28476 => 'Pulkovo Gauss 16N', 28477 => 'Pulkovo Gauss 17N', 28478 => 'Pulkovo Gauss 18N', 28479 => 'Pulkovo Gauss 19N', 28480 => 'Pulkovo Gauss 20N', 28481 => 'Pulkovo Gauss 21N', 28482 => 'Pulkovo Gauss 22N', 28483 => 'Pulkovo Gauss 23N', 28484 => 'Pulkovo Gauss 24N', 28485 => 'Pulkovo Gauss 25N', 28486 => 'Pulkovo Gauss 26N', 28487 => 'Pulkovo Gauss 27N', 28488 => 'Pulkovo Gauss 28N', 28489 => 'Pulkovo Gauss 29N', 28490 => 'Pulkovo Gauss 30N', 28491 => 'Pulkovo Gauss 31N', 28492 => 'Pulkovo Gauss 32N', 28600 => 'Qatar National Grid', 28991 => 'RD Netherlands Old', 28992 => 'RD Netherlands New', 29118 => 'SAD69 UTM zone 18N', 29119 => 'SAD69 UTM zone 19N', 29120 => 'SAD69 UTM zone 20N', 29121 => 'SAD69 UTM zone 21N', 29122 => 'SAD69 UTM zone 22N', 29177 => 'SAD69 UTM zone 17S', 29178 => 'SAD69 UTM zone 18S', 29179 => 'SAD69 UTM zone 19S', 29180 => 'SAD69 UTM zone 20S', 29181 => 'SAD69 UTM zone 21S', 29182 => 'SAD69 UTM zone 22S', 29183 => 'SAD69 UTM zone 23S', 29184 => 'SAD69 UTM zone 24S', 29185 => 'SAD69 UTM zone 25S', 29220 => 'Sapper Hill UTM 20S', 29221 => 'Sapper Hill UTM 21S', 29333 => 'Schwarzeck UTM 33S', 29635 => 'Sudan UTM zone 35N', 29636 => 'Sudan UTM zone 36N', 29700 => 'Tananarive Laborde', 29738 => 'Tananarive UTM 38S', 29739 => 'Tananarive UTM 39S', 29800 => 'Timbalai 1948 Borneo', 29849 => 'Timbalai 1948 UTM 49N', 29850 => 'Timbalai 1948 UTM 50N', 29900 => 'TM65 Irish Nat Grid', 30200 => 'Trinidad 1903 Trinidad', 30339 => 'TC 1948 UTM zone 39N', 30340 => 'TC 1948 UTM zone 40N', 30491 => 'Voirol N Algerie ancien', 30492 => 'Voirol S Algerie ancien', 30591 => 'Voirol Unifie N Algerie', 30592 => 'Voirol Unifie S Algerie', 30600 => 'Bern 1938 Swiss New', 30729 => 'Nord Sahara UTM 29N', 30730 => 'Nord Sahara UTM 30N', 30731 => 'Nord Sahara UTM 31N', 30732 => 'Nord Sahara UTM 32N', 31028 => 'Yoff UTM zone 28N', 31121 => 'Zanderij UTM zone 21N', 31291 => 'MGI Austria West', 31292 => 'MGI Austria Central', 31293 => 'MGI Austria East', 31300 => 'Belge Lambert 72', 31491 => 'DHDN Germany zone 1', 31492 => 'DHDN Germany zone 2', 31493 => 'DHDN Germany zone 3', 31494 => 'DHDN Germany zone 4', 31495 => 'DHDN Germany zone 5', 31700 => 'Dealul Piscului 1970 Stereo 70', 32001 => 'NAD27 Montana North', 32002 => 'NAD27 Montana Central', 32003 => 'NAD27 Montana South', 32005 => 'NAD27 Nebraska North', 32006 => 'NAD27 Nebraska South', 32007 => 'NAD27 Nevada East', 32008 => 'NAD27 Nevada Central', 32009 => 'NAD27 Nevada West', 32010 => 'NAD27 New Hampshire', 32011 => 'NAD27 New Jersey', 32012 => 'NAD27 New Mexico East', 32013 => 'NAD27 New Mexico Cent', 32014 => 'NAD27 New Mexico West', 32015 => 'NAD27 New York East', 32016 => 'NAD27 New York Central', 32017 => 'NAD27 New York West', 32018 => 'NAD27 New York Long Is', 32019 => 'NAD27 North Carolina', 32020 => 'NAD27 North Dakota N', 32021 => 'NAD27 North Dakota S', 32022 => 'NAD27 Ohio North', 32023 => 'NAD27 Ohio South', 32024 => 'NAD27 Oklahoma North', 32025 => 'NAD27 Oklahoma South', 32026 => 'NAD27 Oregon North', 32027 => 'NAD27 Oregon South', 32028 => 'NAD27 Pennsylvania N', 32029 => 'NAD27 Pennsylvania S', 32030 => 'NAD27 Rhode Island', 32031 => 'NAD27 South Carolina N', 32033 => 'NAD27 South Carolina S', 32034 => 'NAD27 South Dakota N', 32035 => 'NAD27 South Dakota S', 32036 => 'NAD27 Tennessee', 32037 => 'NAD27 Texas North', 32038 => 'NAD27 Texas North Cen', 32039 => 'NAD27 Texas Central', 32040 => 'NAD27 Texas South Cen', 32041 => 'NAD27 Texas South', 32042 => 'NAD27 Utah North', 32043 => 'NAD27 Utah Central', 32044 => 'NAD27 Utah South', 32045 => 'NAD27 Vermont', 32046 => 'NAD27 Virginia North', 32047 => 'NAD27 Virginia South', 32048 => 'NAD27 Washington North', 32049 => 'NAD27 Washington South', 32050 => 'NAD27 West Virginia N', 32051 => 'NAD27 West Virginia S', 32052 => 'NAD27 Wisconsin North', 32053 => 'NAD27 Wisconsin Cen', 32054 => 'NAD27 Wisconsin South', 32055 => 'NAD27 Wyoming East', 32056 => 'NAD27 Wyoming E Cen', 32057 => 'NAD27 Wyoming W Cen', 32058 => 'NAD27 Wyoming West', 32059 => 'NAD27 Puerto Rico', 32060 => 'NAD27 St Croix', 32100 => 'NAD83 Montana', 32104 => 'NAD83 Nebraska', 32107 => 'NAD83 Nevada East', 32108 => 'NAD83 Nevada Central', 32109 => 'NAD83 Nevada West', 32110 => 'NAD83 New Hampshire', 32111 => 'NAD83 New Jersey', 32112 => 'NAD83 New Mexico East', 32113 => 'NAD83 New Mexico Cent', 32114 => 'NAD83 New Mexico West', 32115 => 'NAD83 New York East', 32116 => 'NAD83 New York Central', 32117 => 'NAD83 New York West', 32118 => 'NAD83 New York Long Is', 32119 => 'NAD83 North Carolina', 32120 => 'NAD83 North Dakota N', 32121 => 'NAD83 North Dakota S', 32122 => 'NAD83 Ohio North', 32123 => 'NAD83 Ohio South', 32124 => 'NAD83 Oklahoma North', 32125 => 'NAD83 Oklahoma South', 32126 => 'NAD83 Oregon North', 32127 => 'NAD83 Oregon South', 32128 => 'NAD83 Pennsylvania N', 32129 => 'NAD83 Pennsylvania S', 32130 => 'NAD83 Rhode Island', 32133 => 'NAD83 South Carolina', 32134 => 'NAD83 South Dakota N', 32135 => 'NAD83 South Dakota S', 32136 => 'NAD83 Tennessee', 32137 => 'NAD83 Texas North', 32138 => 'NAD83 Texas North Cen', 32139 => 'NAD83 Texas Central', 32140 => 'NAD83 Texas South Cen', 32141 => 'NAD83 Texas South', 32142 => 'NAD83 Utah North', 32143 => 'NAD83 Utah Central', 32144 => 'NAD83 Utah South', 32145 => 'NAD83 Vermont', 32146 => 'NAD83 Virginia North', 32147 => 'NAD83 Virginia South', 32148 => 'NAD83 Washington North', 32149 => 'NAD83 Washington South', 32150 => 'NAD83 West Virginia N', 32151 => 'NAD83 West Virginia S', 32152 => 'NAD83 Wisconsin North', 32153 => 'NAD83 Wisconsin Cen', 32154 => 'NAD83 Wisconsin South', 32155 => 'NAD83 Wyoming East', 32156 => 'NAD83 Wyoming E Cen', 32157 => 'NAD83 Wyoming W Cen', 32158 => 'NAD83 Wyoming West', 32161 => 'NAD83 Puerto Rico Virgin Is', 32201 => 'WGS72 UTM zone 1N', 32202 => 'WGS72 UTM zone 2N', 32203 => 'WGS72 UTM zone 3N', 32204 => 'WGS72 UTM zone 4N', 32205 => 'WGS72 UTM zone 5N', 32206 => 'WGS72 UTM zone 6N', 32207 => 'WGS72 UTM zone 7N', 32208 => 'WGS72 UTM zone 8N', 32209 => 'WGS72 UTM zone 9N', 32210 => 'WGS72 UTM zone 10N', 32211 => 'WGS72 UTM zone 11N', 32212 => 'WGS72 UTM zone 12N', 32213 => 'WGS72 UTM zone 13N', 32214 => 'WGS72 UTM zone 14N', 32215 => 'WGS72 UTM zone 15N', 32216 => 'WGS72 UTM zone 16N', 32217 => 'WGS72 UTM zone 17N', 32218 => 'WGS72 UTM zone 18N', 32219 => 'WGS72 UTM zone 19N', 32220 => 'WGS72 UTM zone 20N', 32221 => 'WGS72 UTM zone 21N', 32222 => 'WGS72 UTM zone 22N', 32223 => 'WGS72 UTM zone 23N', 32224 => 'WGS72 UTM zone 24N', 32225 => 'WGS72 UTM zone 25N', 32226 => 'WGS72 UTM zone 26N', 32227 => 'WGS72 UTM zone 27N', 32228 => 'WGS72 UTM zone 28N', 32229 => 'WGS72 UTM zone 29N', 32230 => 'WGS72 UTM zone 30N', 32231 => 'WGS72 UTM zone 31N', 32232 => 'WGS72 UTM zone 32N', 32233 => 'WGS72 UTM zone 33N', 32234 => 'WGS72 UTM zone 34N', 32235 => 'WGS72 UTM zone 35N', 32236 => 'WGS72 UTM zone 36N', 32237 => 'WGS72 UTM zone 37N', 32238 => 'WGS72 UTM zone 38N', 32239 => 'WGS72 UTM zone 39N', 32240 => 'WGS72 UTM zone 40N', 32241 => 'WGS72 UTM zone 41N', 32242 => 'WGS72 UTM zone 42N', 32243 => 'WGS72 UTM zone 43N', 32244 => 'WGS72 UTM zone 44N', 32245 => 'WGS72 UTM zone 45N', 32246 => 'WGS72 UTM zone 46N', 32247 => 'WGS72 UTM zone 47N', 32248 => 'WGS72 UTM zone 48N', 32249 => 'WGS72 UTM zone 49N', 32250 => 'WGS72 UTM zone 50N', 32251 => 'WGS72 UTM zone 51N', 32252 => 'WGS72 UTM zone 52N', 32253 => 'WGS72 UTM zone 53N', 32254 => 'WGS72 UTM zone 54N', 32255 => 'WGS72 UTM zone 55N', 32256 => 'WGS72 UTM zone 56N', 32257 => 'WGS72 UTM zone 57N', 32258 => 'WGS72 UTM zone 58N', 32259 => 'WGS72 UTM zone 59N', 32260 => 'WGS72 UTM zone 60N', 32301 => 'WGS72 UTM zone 1S', 32302 => 'WGS72 UTM zone 2S', 32303 => 'WGS72 UTM zone 3S', 32304 => 'WGS72 UTM zone 4S', 32305 => 'WGS72 UTM zone 5S', 32306 => 'WGS72 UTM zone 6S', 32307 => 'WGS72 UTM zone 7S', 32308 => 'WGS72 UTM zone 8S', 32309 => 'WGS72 UTM zone 9S', 32310 => 'WGS72 UTM zone 10S', 32311 => 'WGS72 UTM zone 11S', 32312 => 'WGS72 UTM zone 12S', 32313 => 'WGS72 UTM zone 13S', 32314 => 'WGS72 UTM zone 14S', 32315 => 'WGS72 UTM zone 15S', 32316 => 'WGS72 UTM zone 16S', 32317 => 'WGS72 UTM zone 17S', 32318 => 'WGS72 UTM zone 18S', 32319 => 'WGS72 UTM zone 19S', 32320 => 'WGS72 UTM zone 20S', 32321 => 'WGS72 UTM zone 21S', 32322 => 'WGS72 UTM zone 22S', 32323 => 'WGS72 UTM zone 23S', 32324 => 'WGS72 UTM zone 24S', 32325 => 'WGS72 UTM zone 25S', 32326 => 'WGS72 UTM zone 26S', 32327 => 'WGS72 UTM zone 27S', 32328 => 'WGS72 UTM zone 28S', 32329 => 'WGS72 UTM zone 29S', 32330 => 'WGS72 UTM zone 30S', 32331 => 'WGS72 UTM zone 31S', 32332 => 'WGS72 UTM zone 32S', 32333 => 'WGS72 UTM zone 33S', 32334 => 'WGS72 UTM zone 34S', 32335 => 'WGS72 UTM zone 35S', 32336 => 'WGS72 UTM zone 36S', 32337 => 'WGS72 UTM zone 37S', 32338 => 'WGS72 UTM zone 38S', 32339 => 'WGS72 UTM zone 39S', 32340 => 'WGS72 UTM zone 40S', 32341 => 'WGS72 UTM zone 41S', 32342 => 'WGS72 UTM zone 42S', 32343 => 'WGS72 UTM zone 43S', 32344 => 'WGS72 UTM zone 44S', 32345 => 'WGS72 UTM zone 45S', 32346 => 'WGS72 UTM zone 46S', 32347 => 'WGS72 UTM zone 47S', 32348 => 'WGS72 UTM zone 48S', 32349 => 'WGS72 UTM zone 49S', 32350 => 'WGS72 UTM zone 50S', 32351 => 'WGS72 UTM zone 51S', 32352 => 'WGS72 UTM zone 52S', 32353 => 'WGS72 UTM zone 53S', 32354 => 'WGS72 UTM zone 54S', 32355 => 'WGS72 UTM zone 55S', 32356 => 'WGS72 UTM zone 56S', 32357 => 'WGS72 UTM zone 57S', 32358 => 'WGS72 UTM zone 58S', 32359 => 'WGS72 UTM zone 59S', 32360 => 'WGS72 UTM zone 60S', 32401 => 'WGS72BE UTM zone 1N', 32402 => 'WGS72BE UTM zone 2N', 32403 => 'WGS72BE UTM zone 3N', 32404 => 'WGS72BE UTM zone 4N', 32405 => 'WGS72BE UTM zone 5N', 32406 => 'WGS72BE UTM zone 6N', 32407 => 'WGS72BE UTM zone 7N', 32408 => 'WGS72BE UTM zone 8N', 32409 => 'WGS72BE UTM zone 9N', 32410 => 'WGS72BE UTM zone 10N', 32411 => 'WGS72BE UTM zone 11N', 32412 => 'WGS72BE UTM zone 12N', 32413 => 'WGS72BE UTM zone 13N', 32414 => 'WGS72BE UTM zone 14N', 32415 => 'WGS72BE UTM zone 15N', 32416 => 'WGS72BE UTM zone 16N', 32417 => 'WGS72BE UTM zone 17N', 32418 => 'WGS72BE UTM zone 18N', 32419 => 'WGS72BE UTM zone 19N', 32420 => 'WGS72BE UTM zone 20N', 32421 => 'WGS72BE UTM zone 21N', 32422 => 'WGS72BE UTM zone 22N', 32423 => 'WGS72BE UTM zone 23N', 32424 => 'WGS72BE UTM zone 24N', 32425 => 'WGS72BE UTM zone 25N', 32426 => 'WGS72BE UTM zone 26N', 32427 => 'WGS72BE UTM zone 27N', 32428 => 'WGS72BE UTM zone 28N', 32429 => 'WGS72BE UTM zone 29N', 32430 => 'WGS72BE UTM zone 30N', 32431 => 'WGS72BE UTM zone 31N', 32432 => 'WGS72BE UTM zone 32N', 32433 => 'WGS72BE UTM zone 33N', 32434 => 'WGS72BE UTM zone 34N', 32435 => 'WGS72BE UTM zone 35N', 32436 => 'WGS72BE UTM zone 36N', 32437 => 'WGS72BE UTM zone 37N', 32438 => 'WGS72BE UTM zone 38N', 32439 => 'WGS72BE UTM zone 39N', 32440 => 'WGS72BE UTM zone 40N', 32441 => 'WGS72BE UTM zone 41N', 32442 => 'WGS72BE UTM zone 42N', 32443 => 'WGS72BE UTM zone 43N', 32444 => 'WGS72BE UTM zone 44N', 32445 => 'WGS72BE UTM zone 45N', 32446 => 'WGS72BE UTM zone 46N', 32447 => 'WGS72BE UTM zone 47N', 32448 => 'WGS72BE UTM zone 48N', 32449 => 'WGS72BE UTM zone 49N', 32450 => 'WGS72BE UTM zone 50N', 32451 => 'WGS72BE UTM zone 51N', 32452 => 'WGS72BE UTM zone 52N', 32453 => 'WGS72BE UTM zone 53N', 32454 => 'WGS72BE UTM zone 54N', 32455 => 'WGS72BE UTM zone 55N', 32456 => 'WGS72BE UTM zone 56N', 32457 => 'WGS72BE UTM zone 57N', 32458 => 'WGS72BE UTM zone 58N', 32459 => 'WGS72BE UTM zone 59N', 32460 => 'WGS72BE UTM zone 60N', 32501 => 'WGS72BE UTM zone 1S', 32502 => 'WGS72BE UTM zone 2S', 32503 => 'WGS72BE UTM zone 3S', 32504 => 'WGS72BE UTM zone 4S', 32505 => 'WGS72BE UTM zone 5S', 32506 => 'WGS72BE UTM zone 6S', 32507 => 'WGS72BE UTM zone 7S', 32508 => 'WGS72BE UTM zone 8S', 32509 => 'WGS72BE UTM zone 9S', 32510 => 'WGS72BE UTM zone 10S', 32511 => 'WGS72BE UTM zone 11S', 32512 => 'WGS72BE UTM zone 12S', 32513 => 'WGS72BE UTM zone 13S', 32514 => 'WGS72BE UTM zone 14S', 32515 => 'WGS72BE UTM zone 15S', 32516 => 'WGS72BE UTM zone 16S', 32517 => 'WGS72BE UTM zone 17S', 32518 => 'WGS72BE UTM zone 18S', 32519 => 'WGS72BE UTM zone 19S', 32520 => 'WGS72BE UTM zone 20S', 32521 => 'WGS72BE UTM zone 21S', 32522 => 'WGS72BE UTM zone 22S', 32523 => 'WGS72BE UTM zone 23S', 32524 => 'WGS72BE UTM zone 24S', 32525 => 'WGS72BE UTM zone 25S', 32526 => 'WGS72BE UTM zone 26S', 32527 => 'WGS72BE UTM zone 27S', 32528 => 'WGS72BE UTM zone 28S', 32529 => 'WGS72BE UTM zone 29S', 32530 => 'WGS72BE UTM zone 30S', 32531 => 'WGS72BE UTM zone 31S', 32532 => 'WGS72BE UTM zone 32S', 32533 => 'WGS72BE UTM zone 33S', 32534 => 'WGS72BE UTM zone 34S', 32535 => 'WGS72BE UTM zone 35S', 32536 => 'WGS72BE UTM zone 36S', 32537 => 'WGS72BE UTM zone 37S', 32538 => 'WGS72BE UTM zone 38S', 32539 => 'WGS72BE UTM zone 39S', 32540 => 'WGS72BE UTM zone 40S', 32541 => 'WGS72BE UTM zone 41S', 32542 => 'WGS72BE UTM zone 42S', 32543 => 'WGS72BE UTM zone 43S', 32544 => 'WGS72BE UTM zone 44S', 32545 => 'WGS72BE UTM zone 45S', 32546 => 'WGS72BE UTM zone 46S', 32547 => 'WGS72BE UTM zone 47S', 32548 => 'WGS72BE UTM zone 48S', 32549 => 'WGS72BE UTM zone 49S', 32550 => 'WGS72BE UTM zone 50S', 32551 => 'WGS72BE UTM zone 51S', 32552 => 'WGS72BE UTM zone 52S', 32553 => 'WGS72BE UTM zone 53S', 32554 => 'WGS72BE UTM zone 54S', 32555 => 'WGS72BE UTM zone 55S', 32556 => 'WGS72BE UTM zone 56S', 32557 => 'WGS72BE UTM zone 57S', 32558 => 'WGS72BE UTM zone 58S', 32559 => 'WGS72BE UTM zone 59S', 32560 => 'WGS72BE UTM zone 60S', 32601 => 'WGS84 UTM zone 1N', 32602 => 'WGS84 UTM zone 2N', 32603 => 'WGS84 UTM zone 3N', 32604 => 'WGS84 UTM zone 4N', 32605 => 'WGS84 UTM zone 5N', 32606 => 'WGS84 UTM zone 6N', 32607 => 'WGS84 UTM zone 7N', 32608 => 'WGS84 UTM zone 8N', 32609 => 'WGS84 UTM zone 9N', 32610 => 'WGS84 UTM zone 10N', 32611 => 'WGS84 UTM zone 11N', 32612 => 'WGS84 UTM zone 12N', 32613 => 'WGS84 UTM zone 13N', 32614 => 'WGS84 UTM zone 14N', 32615 => 'WGS84 UTM zone 15N', 32616 => 'WGS84 UTM zone 16N', 32617 => 'WGS84 UTM zone 17N', 32618 => 'WGS84 UTM zone 18N', 32619 => 'WGS84 UTM zone 19N', 32620 => 'WGS84 UTM zone 20N', 32621 => 'WGS84 UTM zone 21N', 32622 => 'WGS84 UTM zone 22N', 32623 => 'WGS84 UTM zone 23N', 32624 => 'WGS84 UTM zone 24N', 32625 => 'WGS84 UTM zone 25N', 32626 => 'WGS84 UTM zone 26N', 32627 => 'WGS84 UTM zone 27N', 32628 => 'WGS84 UTM zone 28N', 32629 => 'WGS84 UTM zone 29N', 32630 => 'WGS84 UTM zone 30N', 32631 => 'WGS84 UTM zone 31N', 32632 => 'WGS84 UTM zone 32N', 32633 => 'WGS84 UTM zone 33N', 32634 => 'WGS84 UTM zone 34N', 32635 => 'WGS84 UTM zone 35N', 32636 => 'WGS84 UTM zone 36N', 32637 => 'WGS84 UTM zone 37N', 32638 => 'WGS84 UTM zone 38N', 32639 => 'WGS84 UTM zone 39N', 32640 => 'WGS84 UTM zone 40N', 32641 => 'WGS84 UTM zone 41N', 32642 => 'WGS84 UTM zone 42N', 32643 => 'WGS84 UTM zone 43N', 32644 => 'WGS84 UTM zone 44N', 32645 => 'WGS84 UTM zone 45N', 32646 => 'WGS84 UTM zone 46N', 32647 => 'WGS84 UTM zone 47N', 32648 => 'WGS84 UTM zone 48N', 32649 => 'WGS84 UTM zone 49N', 32650 => 'WGS84 UTM zone 50N', 32651 => 'WGS84 UTM zone 51N', 32652 => 'WGS84 UTM zone 52N', 32653 => 'WGS84 UTM zone 53N', 32654 => 'WGS84 UTM zone 54N', 32655 => 'WGS84 UTM zone 55N', 32656 => 'WGS84 UTM zone 56N', 32657 => 'WGS84 UTM zone 57N', 32658 => 'WGS84 UTM zone 58N', 32659 => 'WGS84 UTM zone 59N', 32660 => 'WGS84 UTM zone 60N', 32701 => 'WGS84 UTM zone 1S', 32702 => 'WGS84 UTM zone 2S', 32703 => 'WGS84 UTM zone 3S', 32704 => 'WGS84 UTM zone 4S', 32705 => 'WGS84 UTM zone 5S', 32706 => 'WGS84 UTM zone 6S', 32707 => 'WGS84 UTM zone 7S', 32708 => 'WGS84 UTM zone 8S', 32709 => 'WGS84 UTM zone 9S', 32710 => 'WGS84 UTM zone 10S', 32711 => 'WGS84 UTM zone 11S', 32712 => 'WGS84 UTM zone 12S', 32713 => 'WGS84 UTM zone 13S', 32714 => 'WGS84 UTM zone 14S', 32715 => 'WGS84 UTM zone 15S', 32716 => 'WGS84 UTM zone 16S', 32717 => 'WGS84 UTM zone 17S', 32718 => 'WGS84 UTM zone 18S', 32719 => 'WGS84 UTM zone 19S', 32720 => 'WGS84 UTM zone 20S', 32721 => 'WGS84 UTM zone 21S', 32722 => 'WGS84 UTM zone 22S', 32723 => 'WGS84 UTM zone 23S', 32724 => 'WGS84 UTM zone 24S', 32725 => 'WGS84 UTM zone 25S', 32726 => 'WGS84 UTM zone 26S', 32727 => 'WGS84 UTM zone 27S', 32728 => 'WGS84 UTM zone 28S', 32729 => 'WGS84 UTM zone 29S', 32730 => 'WGS84 UTM zone 30S', 32731 => 'WGS84 UTM zone 31S', 32732 => 'WGS84 UTM zone 32S', 32733 => 'WGS84 UTM zone 33S', 32734 => 'WGS84 UTM zone 34S', 32735 => 'WGS84 UTM zone 35S', 32736 => 'WGS84 UTM zone 36S', 32737 => 'WGS84 UTM zone 37S', 32738 => 'WGS84 UTM zone 38S', 32739 => 'WGS84 UTM zone 39S', 32740 => 'WGS84 UTM zone 40S', 32741 => 'WGS84 UTM zone 41S', 32742 => 'WGS84 UTM zone 42S', 32743 => 'WGS84 UTM zone 43S', 32744 => 'WGS84 UTM zone 44S', 32745 => 'WGS84 UTM zone 45S', 32746 => 'WGS84 UTM zone 46S', 32747 => 'WGS84 UTM zone 47S', 32748 => 'WGS84 UTM zone 48S', 32749 => 'WGS84 UTM zone 49S', 32750 => 'WGS84 UTM zone 50S', 32751 => 'WGS84 UTM zone 51S', 32752 => 'WGS84 UTM zone 52S', 32753 => 'WGS84 UTM zone 53S', 32754 => 'WGS84 UTM zone 54S', 32755 => 'WGS84 UTM zone 55S', 32756 => 'WGS84 UTM zone 56S', 32757 => 'WGS84 UTM zone 57S', 32758 => 'WGS84 UTM zone 58S', 32759 => 'WGS84 UTM zone 59S', 32760 => 'WGS84 UTM zone 60S', 32767 => 'User Defined', }, }, 3073 => 'PCSCitation', 3074 => { Name => 'Projection', PrintConv => { # epsg_proj 10101 => 'Alabama CS27 East', 10102 => 'Alabama CS27 West', 10131 => 'Alabama CS83 East', 10132 => 'Alabama CS83 West', 10201 => 'Arizona Coordinate System east', 10202 => 'Arizona Coordinate System Central', 10203 => 'Arizona Coordinate System west', 10231 => 'Arizona CS83 east', 10232 => 'Arizona CS83 Central', 10233 => 'Arizona CS83 west', 10301 => 'Arkansas CS27 North', 10302 => 'Arkansas CS27 South', 10331 => 'Arkansas CS83 North', 10332 => 'Arkansas CS83 South', 10401 => 'California CS27 I', 10402 => 'California CS27 II', 10403 => 'California CS27 III', 10404 => 'California CS27 IV', 10405 => 'California CS27 V', 10406 => 'California CS27 VI', 10407 => 'California CS27 VII', 10431 => 'California CS83 1', 10432 => 'California CS83 2', 10433 => 'California CS83 3', 10434 => 'California CS83 4', 10435 => 'California CS83 5', 10436 => 'California CS83 6', 10501 => 'Colorado CS27 North', 10502 => 'Colorado CS27 Central', 10503 => 'Colorado CS27 South', 10531 => 'Colorado CS83 North', 10532 => 'Colorado CS83 Central', 10533 => 'Colorado CS83 South', 10600 => 'Connecticut CS27', 10630 => 'Connecticut CS83', 10700 => 'Delaware CS27', 10730 => 'Delaware CS83', 10901 => 'Florida CS27 East', 10902 => 'Florida CS27 West', 10903 => 'Florida CS27 North', 10931 => 'Florida CS83 East', 10932 => 'Florida CS83 West', 10933 => 'Florida CS83 North', 11001 => 'Georgia CS27 East', 11002 => 'Georgia CS27 West', 11031 => 'Georgia CS83 East', 11032 => 'Georgia CS83 West', 11101 => 'Idaho CS27 East', 11102 => 'Idaho CS27 Central', 11103 => 'Idaho CS27 West', 11131 => 'Idaho CS83 East', 11132 => 'Idaho CS83 Central', 11133 => 'Idaho CS83 West', 11201 => 'Illinois CS27 East', 11202 => 'Illinois CS27 West', 11231 => 'Illinois CS83 East', 11232 => 'Illinois CS83 West', 11301 => 'Indiana CS27 East', 11302 => 'Indiana CS27 West', 11331 => 'Indiana CS83 East', 11332 => 'Indiana CS83 West', 11401 => 'Iowa CS27 North', 11402 => 'Iowa CS27 South', 11431 => 'Iowa CS83 North', 11432 => 'Iowa CS83 South', 11501 => 'Kansas CS27 North', 11502 => 'Kansas CS27 South', 11531 => 'Kansas CS83 North', 11532 => 'Kansas CS83 South', 11601 => 'Kentucky CS27 North', 11602 => 'Kentucky CS27 South', 11631 => 'Kentucky CS83 North', 11632 => 'Kentucky CS83 South', 11701 => 'Louisiana CS27 North', 11702 => 'Louisiana CS27 South', 11731 => 'Louisiana CS83 North', 11732 => 'Louisiana CS83 South', 11801 => 'Maine CS27 East', 11802 => 'Maine CS27 West', 11831 => 'Maine CS83 East', 11832 => 'Maine CS83 West', 11900 => 'Maryland CS27', 11930 => 'Maryland CS83', 12001 => 'Massachusetts CS27 Mainland', 12002 => 'Massachusetts CS27 Island', 12031 => 'Massachusetts CS83 Mainland', 12032 => 'Massachusetts CS83 Island', 12101 => 'Michigan State Plane East', 12102 => 'Michigan State Plane Old Central', 12103 => 'Michigan State Plane West', 12111 => 'Michigan CS27 North', 12112 => 'Michigan CS27 Central', 12113 => 'Michigan CS27 South', 12141 => 'Michigan CS83 North', 12142 => 'Michigan CS83 Central', 12143 => 'Michigan CS83 South', 12201 => 'Minnesota CS27 North', 12202 => 'Minnesota CS27 Central', 12203 => 'Minnesota CS27 South', 12231 => 'Minnesota CS83 North', 12232 => 'Minnesota CS83 Central', 12233 => 'Minnesota CS83 South', 12301 => 'Mississippi CS27 East', 12302 => 'Mississippi CS27 West', 12331 => 'Mississippi CS83 East', 12332 => 'Mississippi CS83 West', 12401 => 'Missouri CS27 East', 12402 => 'Missouri CS27 Central', 12403 => 'Missouri CS27 West', 12431 => 'Missouri CS83 East', 12432 => 'Missouri CS83 Central', 12433 => 'Missouri CS83 West', 12501 => 'Montana CS27 North', 12502 => 'Montana CS27 Central', 12503 => 'Montana CS27 South', 12530 => 'Montana CS83', 12601 => 'Nebraska CS27 North', 12602 => 'Nebraska CS27 South', 12630 => 'Nebraska CS83', 12701 => 'Nevada CS27 East', 12702 => 'Nevada CS27 Central', 12703 => 'Nevada CS27 West', 12731 => 'Nevada CS83 East', 12732 => 'Nevada CS83 Central', 12733 => 'Nevada CS83 West', 12800 => 'New Hampshire CS27', 12830 => 'New Hampshire CS83', 12900 => 'New Jersey CS27', 12930 => 'New Jersey CS83', 13001 => 'New Mexico CS27 East', 13002 => 'New Mexico CS27 Central', 13003 => 'New Mexico CS27 West', 13031 => 'New Mexico CS83 East', 13032 => 'New Mexico CS83 Central', 13033 => 'New Mexico CS83 West', 13101 => 'New York CS27 East', 13102 => 'New York CS27 Central', 13103 => 'New York CS27 West', 13104 => 'New York CS27 Long Island', 13131 => 'New York CS83 East', 13132 => 'New York CS83 Central', 13133 => 'New York CS83 West', 13134 => 'New York CS83 Long Island', 13200 => 'North Carolina CS27', 13230 => 'North Carolina CS83', 13301 => 'North Dakota CS27 North', 13302 => 'North Dakota CS27 South', 13331 => 'North Dakota CS83 North', 13332 => 'North Dakota CS83 South', 13401 => 'Ohio CS27 North', 13402 => 'Ohio CS27 South', 13431 => 'Ohio CS83 North', 13432 => 'Ohio CS83 South', 13501 => 'Oklahoma CS27 North', 13502 => 'Oklahoma CS27 South', 13531 => 'Oklahoma CS83 North', 13532 => 'Oklahoma CS83 South', 13601 => 'Oregon CS27 North', 13602 => 'Oregon CS27 South', 13631 => 'Oregon CS83 North', 13632 => 'Oregon CS83 South', 13701 => 'Pennsylvania CS27 North', 13702 => 'Pennsylvania CS27 South', 13731 => 'Pennsylvania CS83 North', 13732 => 'Pennsylvania CS83 South', 13800 => 'Rhode Island CS27', 13830 => 'Rhode Island CS83', 13901 => 'South Carolina CS27 North', 13902 => 'South Carolina CS27 South', 13930 => 'South Carolina CS83', 14001 => 'South Dakota CS27 North', 14002 => 'South Dakota CS27 South', 14031 => 'South Dakota CS83 North', 14032 => 'South Dakota CS83 South', 14100 => 'Tennessee CS27', 14130 => 'Tennessee CS83', 14201 => 'Texas CS27 North', 14202 => 'Texas CS27 North Central', 14203 => 'Texas CS27 Central', 14204 => 'Texas CS27 South Central', 14205 => 'Texas CS27 South', 14231 => 'Texas CS83 North', 14232 => 'Texas CS83 North Central', 14233 => 'Texas CS83 Central', 14234 => 'Texas CS83 South Central', 14235 => 'Texas CS83 South', 14301 => 'Utah CS27 North', 14302 => 'Utah CS27 Central', 14303 => 'Utah CS27 South', 14331 => 'Utah CS83 North', 14332 => 'Utah CS83 Central', 14333 => 'Utah CS83 South', 14400 => 'Vermont CS27', 14430 => 'Vermont CS83', 14501 => 'Virginia CS27 North', 14502 => 'Virginia CS27 South', 14531 => 'Virginia CS83 North', 14532 => 'Virginia CS83 South', 14601 => 'Washington CS27 North', 14602 => 'Washington CS27 South', 14631 => 'Washington CS83 North', 14632 => 'Washington CS83 South', 14701 => 'West Virginia CS27 North', 14702 => 'West Virginia CS27 South', 14731 => 'West Virginia CS83 North', 14732 => 'West Virginia CS83 South', 14801 => 'Wisconsin CS27 North', 14802 => 'Wisconsin CS27 Central', 14803 => 'Wisconsin CS27 South', 14831 => 'Wisconsin CS83 North', 14832 => 'Wisconsin CS83 Central', 14833 => 'Wisconsin CS83 South', 14901 => 'Wyoming CS27 East', 14902 => 'Wyoming CS27 East Central', 14903 => 'Wyoming CS27 West Central', 14904 => 'Wyoming CS27 West', 14931 => 'Wyoming CS83 East', 14932 => 'Wyoming CS83 East Central', 14933 => 'Wyoming CS83 West Central', 14934 => 'Wyoming CS83 West', 15001 => 'Alaska CS27 1', 15002 => 'Alaska CS27 2', 15003 => 'Alaska CS27 3', 15004 => 'Alaska CS27 4', 15005 => 'Alaska CS27 5', 15006 => 'Alaska CS27 6', 15007 => 'Alaska CS27 7', 15008 => 'Alaska CS27 8', 15009 => 'Alaska CS27 9', 15010 => 'Alaska CS27 10', 15031 => 'Alaska CS83 1', 15032 => 'Alaska CS83 2', 15033 => 'Alaska CS83 3', 15034 => 'Alaska CS83 4', 15035 => 'Alaska CS83 5', 15036 => 'Alaska CS83 6', 15037 => 'Alaska CS83 7', 15038 => 'Alaska CS83 8', 15039 => 'Alaska CS83 9', 15040 => 'Alaska CS83 10', 15101 => 'Hawaii CS27 1', 15102 => 'Hawaii CS27 2', 15103 => 'Hawaii CS27 3', 15104 => 'Hawaii CS27 4', 15105 => 'Hawaii CS27 5', 15131 => 'Hawaii CS83 1', 15132 => 'Hawaii CS83 2', 15133 => 'Hawaii CS83 3', 15134 => 'Hawaii CS83 4', 15135 => 'Hawaii CS83 5', 15201 => 'Puerto Rico CS27', 15202 => 'St Croix', 15230 => 'Puerto Rico Virgin Is', 15302 => 'Kentucky CS27', 15303 => 'Kentucky CS83 North', 15914 => 'BLM 14N feet', 15915 => 'BLM 15N feet', 15916 => 'BLM 16N feet', 15917 => 'BLM 17N feet', 16001 => 'UTM zone 1N', 16002 => 'UTM zone 2N', 16003 => 'UTM zone 3N', 16004 => 'UTM zone 4N', 16005 => 'UTM zone 5N', 16006 => 'UTM zone 6N', 16007 => 'UTM zone 7N', 16008 => 'UTM zone 8N', 16009 => 'UTM zone 9N', 16010 => 'UTM zone 10N', 16011 => 'UTM zone 11N', 16012 => 'UTM zone 12N', 16013 => 'UTM zone 13N', 16014 => 'UTM zone 14N', 16015 => 'UTM zone 15N', 16016 => 'UTM zone 16N', 16017 => 'UTM zone 17N', 16018 => 'UTM zone 18N', 16019 => 'UTM zone 19N', 16020 => 'UTM zone 20N', 16021 => 'UTM zone 21N', 16022 => 'UTM zone 22N', 16023 => 'UTM zone 23N', 16024 => 'UTM zone 24N', 16025 => 'UTM zone 25N', 16026 => 'UTM zone 26N', 16027 => 'UTM zone 27N', 16028 => 'UTM zone 28N', 16029 => 'UTM zone 29N', 16030 => 'UTM zone 30N', 16031 => 'UTM zone 31N', 16032 => 'UTM zone 32N', 16033 => 'UTM zone 33N', 16034 => 'UTM zone 34N', 16035 => 'UTM zone 35N', 16036 => 'UTM zone 36N', 16037 => 'UTM zone 37N', 16038 => 'UTM zone 38N', 16039 => 'UTM zone 39N', 16040 => 'UTM zone 40N', 16041 => 'UTM zone 41N', 16042 => 'UTM zone 42N', 16043 => 'UTM zone 43N', 16044 => 'UTM zone 44N', 16045 => 'UTM zone 45N', 16046 => 'UTM zone 46N', 16047 => 'UTM zone 47N', 16048 => 'UTM zone 48N', 16049 => 'UTM zone 49N', 16050 => 'UTM zone 50N', 16051 => 'UTM zone 51N', 16052 => 'UTM zone 52N', 16053 => 'UTM zone 53N', 16054 => 'UTM zone 54N', 16055 => 'UTM zone 55N', 16056 => 'UTM zone 56N', 16057 => 'UTM zone 57N', 16058 => 'UTM zone 58N', 16059 => 'UTM zone 59N', 16060 => 'UTM zone 60N', 16101 => 'UTM zone 1S', 16102 => 'UTM zone 2S', 16103 => 'UTM zone 3S', 16104 => 'UTM zone 4S', 16105 => 'UTM zone 5S', 16106 => 'UTM zone 6S', 16107 => 'UTM zone 7S', 16108 => 'UTM zone 8S', 16109 => 'UTM zone 9S', 16110 => 'UTM zone 10S', 16111 => 'UTM zone 11S', 16112 => 'UTM zone 12S', 16113 => 'UTM zone 13S', 16114 => 'UTM zone 14S', 16115 => 'UTM zone 15S', 16116 => 'UTM zone 16S', 16117 => 'UTM zone 17S', 16118 => 'UTM zone 18S', 16119 => 'UTM zone 19S', 16120 => 'UTM zone 20S', 16121 => 'UTM zone 21S', 16122 => 'UTM zone 22S', 16123 => 'UTM zone 23S', 16124 => 'UTM zone 24S', 16125 => 'UTM zone 25S', 16126 => 'UTM zone 26S', 16127 => 'UTM zone 27S', 16128 => 'UTM zone 28S', 16129 => 'UTM zone 29S', 16130 => 'UTM zone 30S', 16131 => 'UTM zone 31S', 16132 => 'UTM zone 32S', 16133 => 'UTM zone 33S', 16134 => 'UTM zone 34S', 16135 => 'UTM zone 35S', 16136 => 'UTM zone 36S', 16137 => 'UTM zone 37S', 16138 => 'UTM zone 38S', 16139 => 'UTM zone 39S', 16140 => 'UTM zone 40S', 16141 => 'UTM zone 41S', 16142 => 'UTM zone 42S', 16143 => 'UTM zone 43S', 16144 => 'UTM zone 44S', 16145 => 'UTM zone 45S', 16146 => 'UTM zone 46S', 16147 => 'UTM zone 47S', 16148 => 'UTM zone 48S', 16149 => 'UTM zone 49S', 16150 => 'UTM zone 50S', 16151 => 'UTM zone 51S', 16152 => 'UTM zone 52S', 16153 => 'UTM zone 53S', 16154 => 'UTM zone 54S', 16155 => 'UTM zone 55S', 16156 => 'UTM zone 56S', 16157 => 'UTM zone 57S', 16158 => 'UTM zone 58S', 16159 => 'UTM zone 59S', 16160 => 'UTM zone 60S', 16200 => 'Gauss Kruger zone 0', 16201 => 'Gauss Kruger zone 1', 16202 => 'Gauss Kruger zone 2', 16203 => 'Gauss Kruger zone 3', 16204 => 'Gauss Kruger zone 4', 16205 => 'Gauss Kruger zone 5', 17348 => 'Map Grid of Australia 48', 17349 => 'Map Grid of Australia 49', 17350 => 'Map Grid of Australia 50', 17351 => 'Map Grid of Australia 51', 17352 => 'Map Grid of Australia 52', 17353 => 'Map Grid of Australia 53', 17354 => 'Map Grid of Australia 54', 17355 => 'Map Grid of Australia 55', 17356 => 'Map Grid of Australia 56', 17357 => 'Map Grid of Australia 57', 17358 => 'Map Grid of Australia 58', 17448 => 'Australian Map Grid 48', 17449 => 'Australian Map Grid 49', 17450 => 'Australian Map Grid 50', 17451 => 'Australian Map Grid 51', 17452 => 'Australian Map Grid 52', 17453 => 'Australian Map Grid 53', 17454 => 'Australian Map Grid 54', 17455 => 'Australian Map Grid 55', 17456 => 'Australian Map Grid 56', 17457 => 'Australian Map Grid 57', 17458 => 'Australian Map Grid 58', 18031 => 'Argentina 1', 18032 => 'Argentina 2', 18033 => 'Argentina 3', 18034 => 'Argentina 4', 18035 => 'Argentina 5', 18036 => 'Argentina 6', 18037 => 'Argentina 7', 18051 => 'Colombia 3W', 18052 => 'Colombia Bogota', 18053 => 'Colombia 3E', 18054 => 'Colombia 6E', 18072 => 'Egypt Red Belt', 18073 => 'Egypt Purple Belt', 18074 => 'Extended Purple Belt', 18141 => 'New Zealand North Island Nat Grid', 18142 => 'New Zealand South Island Nat Grid', 19900 => 'Bahrain Grid', 19905 => 'Netherlands E Indies Equatorial', 19912 => 'RSO Borneo', 19926 => 'Stereo 70', 32767 => 'User Defined', }, }, 3075 => { Name => 'ProjCoordTrans', PrintConv => { # geo_ctrans 1 => 'Transverse Mercator', 2 => 'Transverse Mercator Modified Alaska', 3 => 'Oblique Mercator', 4 => 'Oblique Mercator Laborde', 5 => 'Oblique Mercator Rosenmund', 6 => 'Oblique Mercator Spherical', # not advisable 7 => 'Mercator', 8 => 'Lambert Conf Conic 2SP', 9 => 'Lambert Conf Conic 1SP', 10 => 'Lambert Azim Equal Area', 11 => 'Albers Equal Area', 12 => 'Azimuthal Equidistant', 13 => 'Equidistant Conic', 14 => 'Stereographic', 15 => 'Polar Stereographic', 16 => 'Oblique Stereographic', # not advisable 17 => 'Equirectangular', 18 => 'Cassini Soldner', 19 => 'Gnomonic', 20 => 'Miller Cylindrical', 21 => 'Orthographic', 22 => 'Polyconic', 23 => 'Robinson', 24 => 'Sinusoidal', 25 => 'VanDerGrinten', 26 => 'New Zealand Map Grid', 27 => 'Transverse Mercator South Orientated', 28 => 'Cylindrical Equal Area', 32767 => 'User Defined', }, }, 3076 => { Name => 'ProjLinearUnits', SeparateTable => 'Units', PrintConv => \%epsg_units, }, 3077 => 'ProjLinearUnitSize', 3078 => 'ProjStdParallel1', 3079 => 'ProjStdParallel2', 3080 => 'ProjNatOriginLong', 3081 => 'ProjNatOriginLat', 3082 => 'ProjFalseEasting', 3083 => 'ProjFalseNorthing', 3084 => 'ProjFalseOriginLong', 3085 => 'ProjFalseOriginLat', 3086 => 'ProjFalseOriginEasting', 3087 => 'ProjFalseOriginNorthing', 3088 => 'ProjCenterLong', 3089 => 'ProjCenterLat', 3090 => 'ProjCenterEasting', 3091 => 'ProjCenterNorthing', 3092 => 'ProjScaleAtNatOrigin', 3093 => 'ProjScaleAtCenter', 3094 => 'ProjAzimuthAngle', 3095 => 'ProjStraightVertPoleLong', 3096 => 'ProjRectifiedGridAngle', 4096 => { Name => 'VerticalCSType', SeparateTable => 'VerticalCS', PrintConv => \%epsg_vertcs, }, 4097 => 'VerticalCitation', 4098 => { Name => 'VerticalDatum', SeparateTable => 'VerticalCS', PrintConv => \%epsg_vertcs, }, 4099 => { Name => 'VerticalUnits', SeparateTable => 'Units', PrintConv => \%epsg_units, }, # # ChartTiff extensions (ref 2) # 47001 => { Name => 'ChartFormat', PrintConv => { 47500 => 'General', 47501 => 'Coastal', 47502 => 'Harbor', 47503 => 'SailingInternational', 47504 => 'SmallCraft Route', 47505 => 'SmallCraftArea', 47506 => 'SmallCraftFolio', 47507 => 'Topographic', 47508 => 'Recreation', 47509 => 'Index', 47510 => 'Inset', }, }, 47002 => 'ChartSource', 47003 => 'ChartSourceEdition', 47004 => 'ChartSourceDate', 47005 => 'ChartCorrDate', 47006 => 'ChartCountryOrigin', 47007 => 'ChartRasterEdition', 47008 => { Name => 'ChartSoundingDatum', PrintConv => { 47600 => 'Equatorial Spring Low Water', 47601 => 'Indian Spring Low Water', 47602 => 'Lowest Astronomical Tide', 47603 => 'Lowest Low Water', 47604 => 'Lowest Normal Low Water', 47605 => 'Mean Higher High Water', 47606 => 'Mean High Water', 47607 => 'Mean High Water Springs', 47608 => 'Mean Lower Low Water', 47609 => 'Mean Lower Low Water Springs', 47610 => 'Mean Low Water', 47611 => 'Mean Sea Level', 47612 => 'Tropic Higher High Water', 47613 => 'Tropic Lower Low Water', }, }, 47009 => { Name => 'ChartDepthUnits', SeparateTable => 'Units', PrintConv => \%epsg_units, }, 47010 => 'ChartMagVar', 47011 => 'ChartMagVarYear', 47012 => 'ChartMagVarAnnChange', 47013 => 'ChartWGSNSShift', 47015 => 'InsetNWPixelX', 47016 => 'InsetNWPixelY', 47017 => 'ChartContourInterval', ); #------------------------------------------------------------------------------ # Inputs: 0) ExifTool object ref # Notes: byte order must be set before calling this routine sub ProcessGeoTiff($) { my $et = shift; my $dirData = $et->GetValue('GeoTiffDirectory', 'ValueConv') or return; # avoid re-processing if another EXIF directory is found $$et{DidGeoTiff} and $$et{DidGeoTiff} eq $dirData and return; $$et{DidGeoTiff} = $dirData; my $doubleData = $et->GetValue('GeoTiffDoubleParams', 'ValueConv'); my $asciiData = $et->GetValue('GeoTiffAsciiParams', 'ValueConv'); my $verbose = $et->Options('Verbose'); if (length($$dirData) >= 8 and length($$dirData) >= 8 * (Get16u($dirData,6) + 1)) { my $version = Get16u($dirData,0); my $revision = Get16u($dirData,2); my $minorRev = Get16u($dirData,4); my $numEntries = Get16u($dirData,6); if ($verbose) { $$et{INDENT} .= '| '; $et->VerboseDir('GeoTiff',$numEntries); } # generate version number tag (not a real GeoTiff tag) my $tagTable = GetTagTable("Image::ExifTool::GeoTiff::Main"); my $tagInfo = $et->GetTagInfo($tagTable, 1); $tagInfo and $et->FoundTag($tagInfo,"$version.$revision.$minorRev"); my $i; for ($i=0; $i<$numEntries; ++$i) { my $pt = 8 * ($i + 1); my $tag = Get16u($dirData, $pt); $tagInfo = $et->GetTagInfo($tagTable, $tag) or next; my $loc = Get16u($dirData, $pt+2); my $count = Get16u($dirData, $pt+4); my $offset = Get16u($dirData, $pt+6); my $format = $geoTiffFormat{$loc}; my ($val, $dataPt); if ($format eq 'double') { # in the double parms if (not $doubleData or length($$doubleData) < 8*($offset+$count)) { $et->Warn("Missing double data for $$tagInfo{Name}"); next; } $dataPt = $doubleData; $offset *= 8; $val = Image::ExifTool::ReadValue($dataPt, $offset, $format, $count, length($$doubleData)-$offset); } elsif ($format eq 'string') { # in the ASCII parms if (not $asciiData or length($$asciiData) < $offset+$count) { $et->Warn("Missing string data for $$tagInfo{Name}"); next; } $dataPt = $asciiData; $val = substr($$dataPt, $offset, $count); $val =~ s/(\0|\|)$//; # remove trailing terminator (NULL or '|') } elsif ($format eq 'int16u') { # use the offset as the value $dataPt = $dirData; $val = $offset; $offset = $pt+6; } else { $et->Warn("Unknown GeoTiff location: $loc"); next; } $verbose and $et->VerboseInfo($tag, $tagInfo, 'Table' => $tagTable, 'Index' => $i, 'Value' => $val, 'DataPt' => $dataPt, 'Start' => $offset, 'Format' => $format, 'Count' => $count, 'Size' => $count * Image::ExifTool::FormatSize($format), ); $et->FoundTag($tagInfo, $val); } if ($verbose) { $$et{INDENT} =~ s/..$//; } } else { $et->Warn('Bad GeoTIFF directory'); } # extract block tags only if requested unless ($$et{OPTIONS}{RequestAll}) { $et->DeleteTag('GeoTiffDirectory') unless $$et{REQ_TAG_LOOKUP}{geotiffdirectory}; $et->DeleteTag('GeoTiffDoubleParams') unless $$et{REQ_TAG_LOOKUP}{geotiffdoubleparams}; $et->DeleteTag('GeoTiffAsciiParams') unless $$et{REQ_TAG_LOOKUP}{geotiffasciiparams}; } } 1; #end __END__ =head1 NAME Image::ExifTool::GeoTiff - Read GeoTiff meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret GeoTiff meta information. GeoTiff information is used in images to specify exact geometric mappings used to transform the image to real world coordinates. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item ftp://ftp.remotesensing.org/geotiff/libgeotiff/libgeotiff-1.1.4.tar.gz =item http://www.charttiff.com/whitepapers.shtml =back =head1 SEE ALSO L<Image::ExifTool::TagNames/GeoTiff Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/GIF.pm������������������������������������������������������000644 �000765 �000024 �00000052622 12642461302 020656� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: GIF.pm # # Description: Read and write GIF meta information # # Revisions: 10/18/2005 - P. Harvey Separated from ExifTool.pm # 05/23/2008 - P. Harvey Added ability to read/write XMP # 10/28/2011 - P. Harvey Added ability to read/write ICC_Profile # # References: 1) http://www.w3.org/Graphics/GIF/spec-gif89a.txt # 2) http://www.adobe.com/devnet/xmp/ # 3) http://graphcomp.com/info/specs/ani_gif.html # 4) http://www.color.org/icc_specs2.html #------------------------------------------------------------------------------ package Image::ExifTool::GIF; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.12'; # road map of directory locations in GIF images my %gifMap = ( XMP => 'GIF', ICC_Profile => 'GIF', ); %Image::ExifTool::GIF::Main = ( GROUPS => { 2 => 'Image' }, VARS => { NO_ID => 1 }, NOTES => q{ This table lists information extracted from GIF images. See L<http://www.w3.org/Graphics/GIF/spec-gif89a.txt> for the official GIF89a specification. }, GIFVersion => { }, FrameCount => { Notes => 'number of animated images' }, Text => { Notes => 'text displayed in image' }, Comment => { # for documentation only -- flag as writable for the docs, but # it won't appear in the TagLookup because there is no WRITE_PROC Writable => 1, }, Duration => { Notes => 'duration of a single animation iteration', PrintConv => 'sprintf("%.2f s",$val)', }, ScreenDescriptor => { SubDirectory => { TagTable => 'Image::ExifTool::GIF::Screen' }, }, # GIF89a application extensions: ExtensionAnimation => { SubDirectory => { TagTable => 'Image::ExifTool::GIF::Animate' }, }, ExtensionXMP => { # (for documentation only) SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' }, }, ExtensionICC => { # (for documentation only) SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' }, }, ); # GIF locical screen descriptor %Image::ExifTool::GIF::Screen = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, NOTES => 'Information extracted from the GIF logical screen descriptor.', 0 => { Name => 'ImageWidth', Format => 'int16u', }, 2 => { Name => 'ImageHeight', Format => 'int16u', }, 4.1 => { Name => 'HasColorMap', Mask => 0x80, PrintConv => { 0x00 => 'No', 0x80 => 'Yes' }, }, 4.2 => { Name => 'ColorResolutionDepth', Mask => 0x70, ValueConv => '($val >> 4) + 1', }, 4.3 => { Name => 'BitsPerPixel', Mask => 0x07, ValueConv => '$val + 1', }, 5 => 'BackgroundColor', ); # GIF Netscape 2.0 animation extension %Image::ExifTool::GIF::Animate = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, NOTES => 'Information extracted from the "NETSCAPE2.0" animation extension.', 2 => { Name => 'AnimationIterations', Format => 'int16u', PrintConv => '$val ? $val : "Infinite"', }, ); #------------------------------------------------------------------------------ # Process meta information in GIF image # Inputs: 0) ExifTool object reference, 1) Directory information ref # Returns: 1 on success, 0 if this wasn't a valid GIF file, or -1 if # an output file was specified and a write error occurred sub ProcessGIF($$) { my ($et, $dirInfo) = @_; my $outfile = $$dirInfo{OutFile}; my $raf = $$dirInfo{RAF}; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my ($a, $s, $ch, $length, $buff); my ($err, $newComment, $setComment, $nvComment); my ($addDirs, %doneDir); my ($frameCount, $delayTime) = (0, 0); # verify this is a valid GIF file return 0 unless $raf->Read($buff, 6) == 6 and $buff =~ /^GIF(8[79]a)$/ and $raf->Read($s, 7) == 7; my $ver = $1; my $rtnVal = 0; my $tagTablePtr = GetTagTable('Image::ExifTool::GIF::Main'); SetByteOrder('II'); if ($outfile) { $et->InitWriteDirs(\%gifMap, 'XMP'); # make XMP the preferred group for GIF $addDirs = $$et{ADD_DIRS}; # determine if we are editing the File:Comment tag my $delGroup = $$et{DEL_GROUP}; $newComment = $et->GetNewValue('Comment', \$nvComment); $setComment = 1 if $nvComment or $$delGroup{File}; # change to GIF 89a if adding comment, XMP or ICC_Profile $buff = 'GIF89a' if $$addDirs{XMP} or $$addDirs{ICC_Profile} or defined $newComment; Write($outfile, $buff, $s) or $err = 1; } else { $et->SetFileType(); # set file type $et->HandleTag($tagTablePtr, 'GIFVersion', $ver); $et->HandleTag($tagTablePtr, 'ScreenDescriptor', $s); } my $flags = Get8u(\$s, 4); if ($flags & 0x80) { # does this image contain a color table? # calculate color table size $length = 3 * (2 << ($flags & 0x07)); $raf->Read($buff, $length) == $length or return 0; # skip color table Write($outfile, $buff) or $err = 1 if $outfile; } # # loop through GIF blocks # Block: for (;;) { last unless $raf->Read($ch, 1); # write out any new metadata now if this isn't an extension block if ($outfile and ord($ch) != 0x21) { # write the comment first if necessary if (defined $newComment and $$nvComment{IsCreating}) { # write comment marker Write($outfile, "\x21\xfe") or $err = 1; $verbose and print $out " + Comment = $newComment\n"; my $len = length($newComment); # write out the comment in 255-byte chunks, each # chunk beginning with a length byte my $n; for ($n=0; $n<$len; $n+=255) { my $size = $len - $n; $size > 255 and $size = 255; my $str = substr($newComment,$n,$size); Write($outfile, pack('C',$size), $str) or $err = 1; } Write($outfile, "\0") or $err = 1; # empty chunk as terminator undef $newComment; undef $nvComment; # delete any other extraneous comments ++$$et{CHANGED}; # increment file changed flag } # add application extension containing XMP block if necessary # (this will place XMP before the first non-extension block) if (exists $$addDirs{XMP} and not defined $doneDir{XMP}) { $doneDir{XMP} = 1; # write new XMP data my $xmpTable = GetTagTable('Image::ExifTool::XMP::Main'); my %dirInfo = ( Parent => 'GIF' ); $verbose and print $out "Creating XMP application extension block:\n"; $buff = $et->WriteDirectory(\%dirInfo, $xmpTable); if (defined $buff and length $buff) { my $lz = pack('C*',1,reverse(0..255),0); Write($outfile, "\x21\xff\x0bXMP DataXMP", $buff, $lz) or $err = 1; ++$doneDir{XMP}; # set to 2 to indicate we added XMP } else { $verbose and print $out " -> no XMP to add\n"; } } # add application extension containing ICC_Profile if necessary if (exists $$addDirs{ICC_Profile} and not defined $doneDir{ICC_Profile}) { $doneDir{ICC_Profile} = 1; # write new ICC_Profile my $iccTable = GetTagTable('Image::ExifTool::ICC_Profile::Main'); my %dirInfo = ( Parent => 'GIF' ); $verbose and print $out "Creating ICC_Profile application extension block:\n"; $buff = $et->WriteDirectory(\%dirInfo, $iccTable); if (defined $buff and length $buff) { my $pos = 0; Write($outfile, "\x21\xff\x0bICCRGBG1012") or $err = 1; my $len = length $buff; while ($pos < $len) { my $n = $len - $pos; $n = 255 if $n > 255; Write($outfile, chr($n), substr($buff, $pos, $n)) or $err = 1; $pos += $n; } Write($outfile, "\0") or $err = 1; # write null terminator ++$doneDir{ICC_Profile}; # set to 2 to indicate we added a new profile } else { $verbose and print $out " -> no ICC_Profile to add\n"; } } } if (ord($ch) == 0x2c) { ++$frameCount; Write($outfile, $ch) or $err = 1 if $outfile; # image descriptor last unless $raf->Read($buff, 8) == 8 and $raf->Read($ch, 1); Write($outfile, $buff, $ch) or $err = 1 if $outfile; if ($verbose) { my ($left, $top, $w, $h) = unpack('v*', $buff); print $out "Image: left=$left top=$top width=$w height=$h\n"; } if (ord($ch) & 0x80) { # does color table exist? $length = 3 * (2 << (ord($ch) & 0x07)); # skip the color table last unless $raf->Read($buff, $length) == $length; Write($outfile, $buff) or $err = 1 if $outfile; } # skip "LZW Minimum Code Size" byte last unless $raf->Read($buff, 1); Write($outfile,$buff) or $err = 1 if $outfile; # skip image blocks for (;;) { last unless $raf->Read($ch, 1); Write($outfile, $ch) or $err = 1 if $outfile; last unless ord($ch); last unless $raf->Read($buff, ord($ch)); Write($outfile,$buff) or $err = 1 if $outfile; } next; # continue with next field } # last if ord($ch) == 0x3b; # normal end of GIF marker unless (ord($ch) == 0x21) { if ($outfile) { Write($outfile, $ch) or $err = 1; # copy the rest of the file while ($raf->Read($buff, 65536)) { Write($outfile, $buff) or $err = 1; } } $rtnVal = 1; last; } # get extension block type/size last unless $raf->Read($s, 2) == 2; # get marker and block size ($a,$length) = unpack("C"x2, $s); if ($a == 0xfe) { # comment extension my $comment = ''; while ($length) { last unless $raf->Read($buff, $length) == $length; if ($verbose > 2 and not $outfile) { HexDump(\$buff, undef, Out => $out); } # add buffer to comment string $comment .= $buff; last unless $raf->Read($ch, 1); # read next block header $length = ord($ch); # get next block size } last if $length; # was a read error if length isn't zero if ($outfile) { my $isOverwriting; if ($setComment) { if ($nvComment) { $isOverwriting = $et->IsOverwriting($nvComment,$comment); # get new comment again (may have been shifted) $newComment = $et->GetNewValue($nvComment) if defined $newComment; } else { # group delete, or deleting additional comments after writing one $isOverwriting = 1; } } if ($isOverwriting) { ++$$et{CHANGED}; # increment file changed flag $et->VerboseValue('- Comment', $comment); $comment = $newComment; $et->VerboseValue('+ Comment', $comment) if defined $comment; undef $nvComment; # just delete remaining comments } else { undef $setComment; # leave remaining comments alone } if (defined $comment) { # write comment marker Write($outfile, "\x21\xfe") or $err = 1; my $len = length($comment); # write out the comment in 255-byte chunks, each # chunk beginning with a length byte my $n; for ($n=0; $n<$len; $n+=255) { my $size = $len - $n; $size > 255 and $size = 255; my $str = substr($comment,$n,$size); Write($outfile, pack('C',$size), $str) or $err = 1; } Write($outfile, "\0") or $err = 1; # empty chunk as terminator } undef $newComment; # don't write the new comment again } else { $rtnVal = 1; $et->FoundTag('Comment', $comment) if $comment; undef $comment; # assume no more than one comment in FastScan mode last if $et->Options('FastScan'); } next; } elsif ($a == 0xff and $length == 0x0b) { # application extension last unless $raf->Read($buff, $length) == $length; if ($verbose) { my @a = unpack('a8a3', $buff); s/\0.*//s foreach @a; print $out "Application Extension: @a\n"; } if ($buff eq 'XMP DataXMP') { # XMP data (ref 2) my $hdr = "$ch$s$buff"; # read XMP data my $xmp = ''; for (;;) { $raf->Read($ch, 1) or last Block; # read next block header $length = ord($ch) or last; # get next block size $raf->Read($buff, $length) == $length or last Block; $xmp .= $ch . $buff; } # get length of XMP without landing zone data # (note that LZ data may not be exactly the same as what we use) my $xmpLen; if ($xmp =~ /<\?xpacket end=['"][wr]['"]\?>/g) { $xmpLen = pos($xmp); } else { $xmpLen = length($xmp); } my %dirInfo = ( DataPt => \$xmp, DataLen => length $xmp, DirLen => $xmpLen, Parent => 'GIF', ); my $xmpTable = GetTagTable('Image::ExifTool::XMP::Main'); if ($outfile) { if ($doneDir{XMP} and $doneDir{XMP} > 1) { $et->Warn('Duplicate XMP block created'); } $buff = $et->WriteDirectory(\%dirInfo, $xmpTable); if (not defined $buff) { # rewrite original XMP with landing zone (adding back null terminator) Write($outfile, $hdr, $xmp, "\0") or $err = 1; $doneDir{XMP} = 1; } elsif (length $buff) { if ($buff =~ /\0/) { # (check just to be safe) $et->Error('XMP contained NULL character'); } else { # write new XMP and landing zone my $lz = pack('C*',1,reverse(0..255),0); Write($outfile, $hdr, $buff, $lz) or $err = 1; } $doneDir{XMP} = 1; } # else we are deleting the XMP } else { $et->ProcessDirectory(\%dirInfo, $xmpTable); } next; } elsif ($buff eq 'ICCRGBG1012') { # ICC_Profile extension (ref 4) my $hdr = "$ch$s$buff"; # read ICC profile data my $icc_profile = ''; for (;;) { $raf->Read($ch, 1) or last Block; # read next block header $length = ord($ch) or last; # get next block size $raf->Read($buff, $length) == $length or last Block; $icc_profile .= $buff; } my %dirInfo = ( DataPt => \$icc_profile, DataLen => length $icc_profile, DirLen => length $icc_profile, Parent => 'GIF', ); my $iccTable = GetTagTable('Image::ExifTool::ICC_Profile::Main'); if ($outfile) { if ($doneDir{ICC_Profile} and $doneDir{ICC_Profile} > 1) { $et->Warn('Duplicate ICC_Profile block created'); } $buff = $et->WriteDirectory(\%dirInfo, $iccTable); # rewrite original ICC_Profile if nothing changed $buff = $icc_profile unless defined $buff; if (length $buff) { # write ICC profile sub-blocks my $pos = 0; Write($outfile, $hdr) or $err = 1; my $len = length $buff; while ($pos < $len) { my $n = $len - $pos; $n = 255 if $n > 255; Write($outfile, chr($n), substr($buff, $pos, $n)) or $err = 1; $pos += $n; } Write($outfile, "\0") or $err = 1; # write null terminator $doneDir{ICC_Profile} = 1; } # else we are deleting the ICC profile } else { $et->ProcessDirectory(\%dirInfo, $iccTable); } next; } elsif ($buff eq 'NETSCAPE2.0') { # animated GIF extension (ref 3) $raf->Read($buff, 5) == 5 or last; # make sure this contains the expected data if ($buff =~ /^\x03\x01(..)\0$/s) { $et->HandleTag($tagTablePtr, 'ExtensionAnimation', $buff); } $raf->Seek(-$length-5, 1) or last; # seek back to start of block } else { # rewind to start of application extension to copy the unknown block $raf->Seek(-$length, 1) or last; } } elsif ($a == 0xf9 and $length == 4) { # graphic control extension last unless $raf->Read($buff, $length) == $length; # sum the indivual delay times my $delay = Get16u(\$buff, 1); $delayTime += $delay; $verbose and printf $out "Graphic Control: delay=%.2f\n", $delay / 100; $raf->Seek(-$length, 1) or last; } elsif ($a == 0x01 and $length == 12) { # plain text extension last unless $raf->Read($buff, $length) == $length; Write($outfile, $ch, $s, $buff) or $err = 1 if $outfile; if ($verbose) { my ($left, $top, $w, $h) = unpack('v4', $buff); print $out "Text: left=$left top=$top width=$w height=$h\n"; } my $text = ''; for (;;) { last unless $raf->Read($ch, 1); $length = ord($ch) or last; last unless $raf->Read($buff, $length) == $length; Write($outfile, $ch, $buff) or $err = 1 if $outfile; # write block $text .= $buff; } Write($outfile, "\0") or $err = 1 if $outfile; # write terminator block $et->HandleTag($tagTablePtr, 'Text', $text); next; } Write($outfile, $ch, $s) or $err = 1 if $outfile; # skip the block while ($length) { last unless $raf->Read($buff, $length) == $length; Write($outfile, $buff) or $err = 1 if $outfile; last unless $raf->Read($ch, 1); # read next block header Write($outfile, $ch) or $err = 1 if $outfile; $length = ord($ch); # get next block size } } unless ($outfile) { $et->HandleTag($tagTablePtr, 'FrameCount', $frameCount) if $frameCount > 1; $et->HandleTag($tagTablePtr, 'Duration', $delayTime/100) if $delayTime; } # set return value to -1 if we only had a write error $rtnVal = -1 if $rtnVal and $err; return $rtnVal; } 1; #end __END__ =head1 NAME Image::ExifTool::GIF - Read and write GIF meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read and write GIF meta information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.w3.org/Graphics/GIF/spec-gif89a.txt> =item L<http://www.adobe.com/devnet/xmp/> =item L<http://graphcomp.com/info/specs/ani_gif.html> =item L<http://www.color.org/icc_specs2.html> =back =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/GIMP.pm�����������������������������������������������������000644 �000765 �000024 �00000016472 12642461302 021010� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: GIMP.pm # # Description: Read meta information from GIMP XCF images # # Revisions: 2010/10/05 - P. Harvey Created # # References: 1) GIMP source code # 2) http://svn.gnome.org/viewvc/gimp/trunk/devel-docs/xcf.txt?view=markup #------------------------------------------------------------------------------ package Image::ExifTool::GIMP; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.02'; sub ProcessParasites($$$); # GIMP XCF properties (ref 2) %Image::ExifTool::GIMP::Main = ( GROUPS => { 2 => 'Image' }, VARS => { ALPHA_FIRST => 1 }, NOTES => q{ The GNU Image Manipulation Program (GIMP) writes these tags in its native XCF (eXperimental Computing Facilty) images. }, header => { SubDirectory => { TagTable => 'Image::ExifTool::GIMP::Header' } }, 17 => { Name => 'Compression', Format => 'int8u', PrintConv => { 0 => 'None', 1 => 'RLE Encoding', 2 => 'Zlib', 3 => 'Fractal', }, }, 19 => { Name => 'Resolution', SubDirectory => { TagTable => 'Image::ExifTool::GIMP::Resolution' }, }, 21 => { Name => 'Parasites', SubDirectory => { TagTable => 'Image::ExifTool::GIMP::Parasite' }, }, ); # information extracted from the XCF file header (ref 2) %Image::ExifTool::GIMP::Header = ( GROUPS => { 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, 9 => { Name => 'XCFVersion', Format => 'string[5]', PrintConv => { 'file' => '0', 'v001' => '1', 'v002' => '2', }, }, 14 => { Name => 'ImageWidth', Format => 'int32u' }, 18 => { Name => 'ImageHeight', Format => 'int32u' }, 22 => { Name => 'ColorMode', Format => 'int32u', PrintConv => { 0 => 'RGB Color', 1 => 'Grayscale', 2 => 'Indexed Color', }, }, ); # XCF resolution data (property type 19) (ref 2) %Image::ExifTool::GIMP::Resolution = ( GROUPS => { 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'float', 0 => 'XResolution', 1 => 'YResolution', ); # XCF "Parasite" data (property type 21) (ref 1/PH) %Image::ExifTool::GIMP::Parasite = ( GROUPS => { 2 => 'Image' }, PROCESS_PROC => \&ProcessParasites, 'gimp-comment' => { Name => 'Comment', Format => 'string', }, 'exif-data' => { Name => 'ExifData', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', ProcessProc => \&Image::ExifTool::ProcessTIFF, Start => 6, # starts after "Exif\0\0" header }, }, 'jpeg-exif-data' => { # (deprecated, untested) Name => 'JPEGExifData', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', ProcessProc => \&Image::ExifTool::ProcessTIFF, Start => 6, }, }, 'iptc-data' => { # (untested) Name => 'IPTCData', SubDirectory => { TagTable => 'Image::ExifTool::IPTC::Main' }, }, 'icc-profile' => { Name => 'ICC_Profile', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' }, }, 'icc-profile-name' => { Name => 'ICCProfileName', Format => 'string', }, 'gimp-metadata' => { Name => 'XMP', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main', Start => 10, # starts after "GIMP_XMP_1" header }, }, ); #------------------------------------------------------------------------------ # Read information in a GIMP XCF parasite data (ref PH) # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessParasites($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $unknown = $et->Options('Unknown') || $et->Options('Verbose'); my $dataPt = $$dirInfo{DataPt}; my $pos = $$dirInfo{DirStart} || 0; my $end = length $$dataPt; $et->VerboseDir('Parasites', undef, $end); for (;;) { last if $pos + 4 > $end; my $size = Get32u($dataPt, $pos); # length of tag string $pos += 4; last if $pos + $size + 8 > $end; my $tag = substr($$dataPt, $pos, $size); $pos += $size; $tag =~ s/\0.*//s; # trim at null terminator # my $flags = Get32u($dataPt, $pos); (ignore flags) $size = Get32u($dataPt, $pos + 4); # length of data $pos += 8; last if $pos + $size > $end; if (not $$tagTablePtr{$tag} and $unknown) { my $name = $tag; $name =~ tr/-_A-Za-z0-9//dc; $name =~ s/^gimp-//; next unless length $name; $name = ucfirst $name; $name =~ s/([a-z])-([a-z])/$1\u$2/g; $name = "GIMP-$name" unless length($name) > 1; AddTagToTable($tagTablePtr, $tag, { Name => $name, Unknown => 1 }); } $et->HandleTag($tagTablePtr, $tag, undef, DataPt => $dataPt, Start => $pos, Size => $size, ); $pos += $size; } return 1; } #------------------------------------------------------------------------------ # Read information in a GIMP XCF document # Inputs: 0) ExifTool ref, 1) dirInfo ref # Returns: 1 on success, 0 if this wasn't a valid XCF file sub ProcessXCF($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $buff; return 0 unless $raf->Read($buff, 26) == 26; return 0 unless $buff =~ /^gimp xcf /; my $tagTablePtr = GetTagTable('Image::ExifTool::GIMP::Main'); my $verbose = $et->Options('Verbose'); $et->SetFileType(); SetByteOrder('MM'); # process the XCF header $et->HandleTag($tagTablePtr, 'header', $buff); # loop through image properties for (;;) { $raf->Read($buff, 8) == 8 or last; my $tag = Get32u(\$buff, 0) or last; my $size = Get32u(\$buff, 4); $verbose and $et->VPrint(0, "XCF property $tag ($size bytes):\n"); unless ($$tagTablePtr{$tag}) { $raf->Seek($size, 1); next; } $raf->Read($buff, $size) == $size or last; $et->HandleTag($tagTablePtr, $tag, undef, DataPt => \$buff, DataPos => $raf->Tell() - $size, Size => $size, ); } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::GIMP - Read meta information from GIMP XCF images =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read meta information from GIMP (GNU Image Manipulation Program) XCF (eXperimental Computing Facility) images. This is the native image format used by the GIMP software. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<GIMP source code> =item L<http://svn.gnome.org/viewvc/gimp/trunk/devel-docs/xcf.txt?view=markup> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/GIMP Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/GPS.pm������������������������������������������������������000644 �000765 �000024 �00000042111 12642461302 020672� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: GPS.pm # # Description: EXIF GPS meta information tags # # Revisions: 12/09/2003 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::GPS; use strict; use vars qw($VERSION); use Image::ExifTool::Exif; $VERSION = '1.44'; my %coordConv = ( ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)', ValueConvInv => 'Image::ExifTool::GPS::ToDMS($self, $val)', PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)', PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val)', ); %Image::ExifTool::GPS::Main = ( GROUPS => { 0 => 'EXIF', 1 => 'GPS', 2 => 'Location' }, WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, WRITE_GROUP => 'GPS', 0x0000 => { Name => 'GPSVersionID', Writable => 'int8u', Mandatory => 1, Count => 4, PrintConv => '$val =~ tr/ /./; $val', PrintConvInv => '$val =~ tr/./ /; $val', }, 0x0001 => { Name => 'GPSLatitudeRef', Writable => 'string', Notes => q{ tags 0x0001-0x0006 used for camera location according to MWG 2.0. ExifTool will also accept a number when writing GPSLatitude -- positive for north latitudes, or negative for south }, Count => 2, PrintConv => { # extract N/S if written from Composite:GPSLatitude # (also allow writing from a signed number) OTHER => sub { my ($val, $inv) = @_; return undef unless $inv; return uc $1 if $val =~ /\b([NS])$/i; return $1 eq '-' ? 'S' : 'N' if $val =~ /^([-+]?)\d+(\.\d*)?$/; return undef; }, N => 'North', S => 'South', }, }, 0x0002 => { Name => 'GPSLatitude', Writable => 'rational64u', Count => 3, %coordConv, }, 0x0003 => { Name => 'GPSLongitudeRef', Writable => 'string', Count => 2, Notes => q{ ExifTool will also accept a number when writing this tag -- positive for east longitudes or negative for west }, PrintConv => { # extract E/W if written from Composite:GPSLongitude # (also allow writing from a signed number) OTHER => sub { my ($val, $inv) = @_; return undef unless $inv; return uc $1 if $val =~ /\b([EW])$/i; return $1 eq '-' ? 'W' : 'E' if $val =~ /^([-+]?)\d+(\.\d*)?$/; return undef; }, E => 'East', W => 'West', }, }, 0x0004 => { Name => 'GPSLongitude', Writable => 'rational64u', Count => 3, %coordConv, }, 0x0005 => { Name => 'GPSAltitudeRef', Writable => 'int8u', Notes => q{ ExifTool will also accept a signed number when writing this tag, beginning with "+" for above sea level, or "-" for below }, PrintConv => { OTHER => sub { my ($val, $inv) = @_; return undef unless $inv and $val =~ /^([-+])/; return($1 eq '-' ? 1 : 0); }, 0 => 'Above Sea Level', 1 => 'Below Sea Level', }, }, 0x0006 => { Name => 'GPSAltitude', Writable => 'rational64u', # extricate unsigned decimal number from string ValueConvInv => '$val=~/((?=\d|\.\d)\d*(?:\.\d*)?)/ ? $1 : undef', PrintConv => '$val =~ /^(inf|undef)$/ ? $val : "$val m"', PrintConvInv => '$val=~s/\s*m$//;$val', }, 0x0007 => { Name => 'GPSTimeStamp', Groups => { 2 => 'Time' }, Writable => 'rational64u', Count => 3, Shift => 'Time', Notes => q{ when writing, date is stripped off if present, and time is adjusted to UTC if it includes a timezone }, ValueConv => 'Image::ExifTool::GPS::ConvertTimeStamp($val)', ValueConvInv => '$val=~tr/:/ /;$val', PrintConv => 'Image::ExifTool::GPS::PrintTimeStamp($val)', # pull time out of any format date/time string # (converting to UTC if a timezone is given) PrintConvInv => sub { my $v = shift; my @tz; if ($v =~ s/([-+])(.*)//s) { # remove timezone my $s = $1 eq '-' ? 1 : -1; # opposite sign to convert back to UTC my $t = $2; @tz = ($s*$1, $s*$2) if $t =~ /^(\d{2}):?(\d{2})\s*$/; } my @a = ($v =~ /((?=\d|\.\d)\d*(?:\.\d*)?)/g); push @a, '00' while @a < 3; if (@tz) { # adjust to UTC $a[-2] += $tz[1]; $a[-3] += $tz[0]; while ($a[-2] >= 60) { $a[-2] -= 60; ++$a[-3] } while ($a[-2] < 0) { $a[-2] += 60; --$a[-3] } $a[-3] = ($a[-3] + 24) % 24; } return "$a[-3]:$a[-2]:$a[-1]"; }, }, 0x0008 => { Name => 'GPSSatellites', Writable => 'string', }, 0x0009 => { Name => 'GPSStatus', Writable => 'string', Count => 2, PrintConv => { A => 'Measurement Active', # Exif2.2 "Measurement in progress" V => 'Measurement Void', # Exif2.2 "Measurement Interoperability" (WTF?) # (meaning for 'V' taken from status code in NMEA GLL and RMC sentences) }, }, 0x000a => { Name => 'GPSMeasureMode', Writable => 'string', Count => 2, PrintConv => { 2 => '2-Dimensional Measurement', 3 => '3-Dimensional Measurement', }, }, 0x000b => { Name => 'GPSDOP', Description => 'GPS Dilution Of Precision', Writable => 'rational64u', }, 0x000c => { Name => 'GPSSpeedRef', Writable => 'string', Count => 2, PrintConv => { K => 'km/h', M => 'mph', N => 'knots', }, }, 0x000d => { Name => 'GPSSpeed', Writable => 'rational64u', }, 0x000e => { Name => 'GPSTrackRef', Writable => 'string', Count => 2, PrintConv => { M => 'Magnetic North', T => 'True North', }, }, 0x000f => { Name => 'GPSTrack', Writable => 'rational64u', }, 0x0010 => { Name => 'GPSImgDirectionRef', Writable => 'string', Count => 2, PrintConv => { M => 'Magnetic North', T => 'True North', }, }, 0x0011 => { Name => 'GPSImgDirection', Writable => 'rational64u', }, 0x0012 => { Name => 'GPSMapDatum', Writable => 'string', }, 0x0013 => { Name => 'GPSDestLatitudeRef', Writable => 'string', Notes => 'tags 0x0013-0x001a used for subject location according to MWG 2.0', Count => 2, PrintConv => { N => 'North', S => 'South', }, }, 0x0014 => { Name => 'GPSDestLatitude', Writable => 'rational64u', Count => 3, %coordConv, }, 0x0015 => { Name => 'GPSDestLongitudeRef', Writable => 'string', Count => 2, PrintConv => { E => 'East', W => 'West', }, }, 0x0016 => { Name => 'GPSDestLongitude', Writable => 'rational64u', Count => 3, %coordConv, }, 0x0017 => { Name => 'GPSDestBearingRef', Writable => 'string', Count => 2, PrintConv => { M => 'Magnetic North', T => 'True North', }, }, 0x0018 => { Name => 'GPSDestBearing', Writable => 'rational64u', }, 0x0019 => { Name => 'GPSDestDistanceRef', Writable => 'string', Count => 2, PrintConv => { K => 'Kilometers', M => 'Miles', N => 'Nautical Miles', }, }, 0x001a => { Name => 'GPSDestDistance', Writable => 'rational64u', }, 0x001b => { Name => 'GPSProcessingMethod', Writable => 'undef', Notes => 'values of "GPS", "CELLID", "WLAN" or "MANUAL" by the EXIF spec.', RawConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val,1,$tag)', RawConvInv => 'Image::ExifTool::Exif::EncodeExifText($self,$val)', }, 0x001c => { Name => 'GPSAreaInformation', Writable => 'undef', RawConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val,1,$tag)', RawConvInv => 'Image::ExifTool::Exif::EncodeExifText($self,$val)', }, 0x001d => { Name => 'GPSDateStamp', Groups => { 2 => 'Time' }, Writable => 'string', Format => 'undef', # (Casio EX-H20G uses "\0" instead of ":" as a separator) Count => 11, Shift => 'Time', Notes => q{ when writing, time is stripped off if present, after adjusting date/time to UTC if time includes a timezone. Format is YYYY:mm:dd }, ValueConv => 'Image::ExifTool::Exif::ExifDate($val)', ValueConvInv => '$val', # pull date out of any format date/time string # (and adjust to UTC if this is a full date/time/timezone value) PrintConvInv => q{ my $secs; if ($val =~ /[-+]/ and ($secs = Image::ExifTool::GetUnixTime($val, 1))) { $val = Image::ExifTool::ConvertUnixTime($secs); } return $val =~ /(\d{4}).*?(\d{2}).*?(\d{2})/ ? "$1:$2:$3" : undef; }, }, 0x001e => { Name => 'GPSDifferential', Writable => 'int16u', PrintConv => { 0 => 'No Correction', 1 => 'Differential Corrected', }, }, 0x001f => { Name => 'GPSHPositioningError', Description => 'GPS Horizontal Positioning Error', PrintConv => '"$val m"', PrintConvInv => '$val=~s/\s*m$//; $val', Writable => 'rational64u', }, # 0xea1c - Nokia Lumina 1020, Samsung GT-I8750, and other Windows 8 # phones write this (padding) in GPS IFD - PH ); # Composite GPS tags %Image::ExifTool::GPS::Composite = ( GROUPS => { 2 => 'Location' }, GPSDateTime => { Description => 'GPS Date/Time', Groups => { 2 => 'Time' }, SubDoc => 1, # generate for all sub-documents Require => { 0 => 'GPS:GPSDateStamp', 1 => 'GPS:GPSTimeStamp', }, ValueConv => '"$val[0] $val[1]Z"', PrintConv => '$self->ConvertDateTime($val)', }, # Note: The following tags are used by other modules # which must therefore require this module as necessary GPSLatitude => { SubDoc => 1, # generate for all sub-documents Require => { 0 => 'GPS:GPSLatitude', 1 => 'GPS:GPSLatitudeRef', }, ValueConv => '$val[1] =~ /^S/i ? -$val[0] : $val[0]', PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', }, GPSLongitude => { SubDoc => 1, # generate for all sub-documents Require => { 0 => 'GPS:GPSLongitude', 1 => 'GPS:GPSLongitudeRef', }, ValueConv => '$val[1] =~ /^W/i ? -$val[0] : $val[0]', PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")', }, GPSAltitude => { SubDoc => 1, # generate for all sub-documents Desire => { 0 => 'GPS:GPSAltitude', 1 => 'GPS:GPSAltitudeRef', 2 => 'XMP:GPSAltitude', 3 => 'XMP:GPSAltitudeRef', }, # Require either GPS:GPSAltitudeRef or XMP:GPSAltitudeRef RawConv => '(defined $val[1] or defined $val[3]) ? $val : undef', ValueConv => q{ my $alt = $val[0]; $alt = $val[2] unless defined $alt; return undef unless defined $alt; return ($val[1] || $val[3]) ? -$alt : $alt; }, PrintConv => q{ $val = int($val * 10) / 10; return ($val =~ s/^-// ? "$val m Below" : "$val m Above") . " Sea Level"; }, }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::GPS'); #------------------------------------------------------------------------------ # Convert GPS timestamp value # Inputs: 0) raw timestamp value string # Returns: EXIF-formatted time string sub ConvertTimeStamp($) { my $val = shift; my ($h,$m,$s) = split ' ', $val; my $f = (($h || 0) * 60 + ($m || 0)) * 60 + ($s || 0); $h = int($f / 3600); $f -= $h * 3600; $m = int($f / 60); $f -= $m * 60; $s = int($f); $f -= $s; $f = int($f * 1000000000 + 0.5); if ($f) { ($f = sprintf(".%.9d", $f)) =~ s/0+$//; } else { $f = '' } return sprintf("%.2d:%.2d:%.2d%s",$h,$m,$s,$f); } #------------------------------------------------------------------------------ # Print GPS timestamp # Inputs: 0) EXIF-formatted time string # Returns: time rounded to the nearest microsecond sub PrintTimeStamp($) { my $val = shift; return $val unless $val =~ s/:(\d{2}\.\d+)$//; my $s = int($1 * 1000000 + 0.5) / 1000000; $s = "0$s" if $s < 10; return "${val}:$s"; } #------------------------------------------------------------------------------ # Convert degrees to DMS, or whatever the current settings are # Inputs: 0) ExifTool reference, 1) Value in degrees, # 2) format code (0=no format, 1=CoordFormat, 2=XMP format) # 3) 'N' or 'E' if sign is significant and N/S/E/W should be added # Returns: DMS string sub ToDMS($$;$$) { my ($et, $val, $doPrintConv, $ref) = @_; my ($fmt, @fmt, $num, $sign); if ($ref) { if ($val < 0) { $val = -$val; $ref = {N => 'S', E => 'W'}->{$ref}; $sign = '-'; } else { $sign = '+'; } $ref = " $ref" unless $doPrintConv and $doPrintConv eq '2'; } else { $val = abs($val); $ref = ''; } if ($doPrintConv) { if ($doPrintConv eq '1') { $fmt = $et->Options('CoordFormat'); if (not $fmt) { $fmt = q{%d deg %d' %.2f"} . $ref; } elsif ($ref) { # use signed value instead of reference direction if specified $fmt =~ s/%\+/$sign%/g or $fmt .= $ref; } else { $fmt =~ s/%\+/%/g; # don't know sign, so don't print it } } else { $fmt = "%d,%.6f$ref"; # use XMP standard format } # count (and capture) the format specifiers (max 3) while ($fmt =~ /(%(%|[^%]*?[diouxXDOUeEfFgGcs]))/g) { next if $1 eq '%%'; push @fmt, $1; last if @fmt >= 3; } $num = scalar @fmt; } else { $num = 3; } my @c; # coordinates (D) or (D,M) or (D,M,S) $c[0] = $val; if ($num > 1) { $c[0] = int($c[0]); $c[1] = ($val - $c[0]) * 60; if ($num > 2) { $c[1] = int($c[1]); $c[2] = ($val - $c[0] - $c[1] / 60) * 3600; } # handle round-off errors to ensure minutes and seconds are # less than 60 (eg. convert "72 59 60.00" to "73 0 0.00") $c[-1] = $doPrintConv ? sprintf($fmt[-1], $c[-1]) : ($c[-1] . ''); if ($c[-1] >= 60) { $c[-1] -= 60; ($c[-2] += 1) >= 60 and $num > 2 and $c[-2] -= 60, $c[-3] += 1; } } return $doPrintConv ? sprintf($fmt, @c) : "@c$ref"; } #------------------------------------------------------------------------------ # Convert to decimal degrees # Inputs: 0) a string containing 1-3 decimal numbers and any amount of other garbage # 1) true if value should be negative if coordinate ends in 'S' or 'W' # Returns: Coordinate in degrees sub ToDegrees($;$) { my ($val, $doSign) = @_; # extract decimal or floating point values out of any other garbage my ($d, $m, $s) = ($val =~ /((?:[+-]?)(?=\d|\.\d)\d*(?:\.\d*)?(?:[Ee][+-]\d+)?)/g); my $deg = ($d || 0) + (($m || 0) + ($s || 0)/60) / 60; # make negative if S or W coordinate $deg = -$deg if $doSign ? $val =~ /[^A-Z](S|W)$/i : $deg < 0; return $deg; } 1; #end __END__ =head1 NAME Image::ExifTool::GPS - EXIF GPS meta information tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret GPS (Global Positioning System) meta information in EXIF data. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<Image::Info|Image::Info> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/GPS Tags>, L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::Info(3pm)|Image::Info> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/H264.pm�����������������������������������������������������000644 �000765 �000024 �00000113537 12645014764 020710� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: H264.pm # # Description: Read meta information from H.264 video # # Revisions: 2010/01/31 - P. Harvey Created # # References: 1) http://www.itu.int/rec/T-REC-H.264/e (T-REC-H.264-200305-S!!PDF-E.pdf) # 2) http://miffteevee.co.uk/documentation/development/H264Parser_8cpp-source.html # 3) http://ffmpeg.org/ # 4) US Patent 2009/0052875 A1 # 5) European Patent (EP2 051 528A1) application no. 07792522.0 filed 08.08.2007 # 6) Dave Nicholson private communication # 7) http://www.freepatentsonline.com/20050076039.pdf # 8) Michael Reitinger private communication (RX100) # # Glossary: RBSP = Raw Byte Sequence Payload #------------------------------------------------------------------------------ package Image::ExifTool::H264; use strict; use vars qw($VERSION %convMake); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.13'; sub ProcessSEI($$); my $parsePictureTiming; # flag to enable parsing of picture timing information (test only) # lookup for camera manufacturer name %convMake = ( 0x0103 => 'Panasonic', 0x0108 => 'Sony', 0x1011 => 'Canon', 0x1104 => 'JVC', #Rob Lewis ); # information extracted from H.264 video streams %Image::ExifTool::H264::Main = ( GROUPS => { 2 => 'Video' }, VARS => { NO_ID => 1 }, NOTES => q{ Tags extracted from H.264 video streams. The metadata for AVCHD videos is stored in this stream. }, ImageWidth => { }, ImageHeight => { }, MDPM => { SubDirectory => { TagTable => 'Image::ExifTool::H264::MDPM' } }, ); # H.264 Supplemental Enhancement Information User Data (ref PH/4) %Image::ExifTool::H264::MDPM = ( GROUPS => { 2 => 'Camera' }, PROCESS_PROC => \&ProcessSEI, TAG_PREFIX => 'MDPM', NOTES => q{ The following tags are decoded from the Modified Digital Video Pack Metadata (MDPM) of the unregistered user data with UUID 17ee8c60f84d11d98cd60800200c9a66 in the H.264 Supplemental Enhancement Information (SEI). I<[Yes, this description is confusing, but nothing compared to the challenge of actually decoding the data!]> This information may exist at regular intervals through the entire video, but only the first occurrence is extracted unless the ExtractEmbedded (-ee) option is used (in which case subsequent occurrences are extracted as sub-documents). }, # (Note: all these are explained in IEC 61834-4, but it costs money so it is useless to me) # 0x00 - ControlCassetteID (ref 7) # 0x01 - ControlTapeLength (ref 7) # 0x02 - ControlTimerActDate (ref 7) # 0x03 - ControlTimerACS_S_S (ref 7) # 0x04-0x05 - ControlPR_StartPoint (ref 7) # 0x06 - ControlTagIDNoGenre (ref 7) # 0x07 - ControlTopicPageHeader (ref 7) # 0x08 - ControlTextHeader (ref 7) # 0x09 - ControlText (ref 7) # 0x0a-0x0b - ControlTag (ref 7) # 0x0c - ControlTeletextInfo (ref 7) # 0x0d - ControlKey (ref 7) # 0x0e-0x0f - ControlZoneEnd (ref 7) # 0x10 - TitleTotalTime (ref 7) # 0x11 - TitleRemainTime (ref 7) # 0x12 - TitleChapterTotalNo (ref 7) 0x13 => { Name => 'TimeCode', Notes => 'hours:minutes:seconds:frames', ValueConv => 'sprintf("%.2x:%.2x:%.2x:%.2x",reverse unpack("C*",$val))', }, # 0x14 - TitleBinaryGroup # 0x15 - TitleCassetteNo (ref 7) # 0x16-0x17 - TitleSoftID (ref 7) # (0x18,0x19 listed as TitleTextHeader/TitleText by ref 7) 0x18 => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, Notes => 'combined with tag 0x19', Combine => 1, # the next tag (0x19) contains the rest of the date # first byte is timezone information: # 0x80 - unused # 0x40 - DST flag # 0x20 - TimeZoneSign # 0x1e - TimeZoneValue # 0x01 - half-hour flag ValueConv => q{ my ($tz, @a) = unpack('C*',$val); return sprintf('%.2x%.2x:%.2x:%.2x %.2x:%.2x:%.2x%s%.2d:%s%s', @a, $tz & 0x20 ? '-' : '+', ($tz >> 1) & 0x0f, $tz & 0x01 ? '30' : '00', $tz & 0x40 ? ' DST' : ''); }, PrintConv => '$self->ConvertDateTime($val)', }, # 0x1a-0x1b - TitleStart (ref 7) # 0x1c-0x1d - TitleReelID (ref 7) # 0x1e-0x1f - TitleEnd (ref 7) # 0x20 - ChapterTotalTime (ref 7) # 0x42 - ProgramRecDTime (ref 7) # 0x50/0x60 - (AAUX/VAUX)Source (ref 7) # 0x51/0x61 - (AAUX/VAUX)SourceControl (ref 7) # 0x52/0x62 - (AAUX/VAUX)RecDate (ref 7) # 0x53/0x63 - (AAUX/VAUX)RecTime (ref 7) # 0x54/0x64 - (AAUX/VAUX)BinaryGroup (ref 7) # 0x55/0x65 - (AAUX/VAUX)ClosedCaption (ref 7) # 0x56/0x66 - (AAUX/VAUX)TR (ref 7) 0x70 => { # ConsumerCamera1 Name => 'Camera1', SubDirectory => { TagTable => 'Image::ExifTool::H264::Camera1' }, }, 0x71 => { # ConsumerCamera2 Name => 'Camera2', SubDirectory => { TagTable => 'Image::ExifTool::H264::Camera2' }, }, # 0x73 Lens - val: 0x75ffffd3,0x0effffd3,0x59ffffd3,0x79ffffd3,0xffffffd3... # 0x74 Gain # 0x75 Pedestal # 0x76 Gamma # 0x77 Detail # 0x7b CameraPreset # 0x7c Flare # 0x7d Shading # 0x7e Knee 0x7f => { # Shutter Name => 'Shutter', SubDirectory => { TagTable => 'Image::ExifTool::H264::Shutter', ByteOrder => 'LittleEndian', # weird }, }, 0xa0 => { Name => 'ExposureTime', Format => 'rational32u', Groups => { 2 => 'Image' }, PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0xa1 => { Name => 'FNumber', Format => 'rational32u', Groups => { 2 => 'Image' }, }, 0xa2 => { Name => 'ExposureProgram', Format => 'int32u', # (guess) PrintConv => { 0 => 'Not Defined', 1 => 'Manual', 2 => 'Program AE', 3 => 'Aperture-priority AE', 4 => 'Shutter speed priority AE', 5 => 'Creative (Slow speed)', 6 => 'Action (High speed)', 7 => 'Portrait', 8 => 'Landscape', }, }, 0xa3 => { Name => 'BrightnessValue', Format => 'rational32s', Groups => { 2 => 'Image' }, }, 0xa4 => { Name => 'ExposureCompensation', Format => 'rational32s', Groups => { 2 => 'Image' }, PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', }, 0xa5 => { Name => 'MaxApertureValue', Format => 'rational32u', ValueConv => '2 ** ($val / 2)', PrintConv => 'sprintf("%.1f",$val)', }, 0xa6 => { Name => 'Flash', Format => 'int32u', # (guess) Flags => 'PrintHex', SeparateTable => 'EXIF Flash', PrintConv => \%Image::ExifTool::Exif::flash, }, 0xa7 => { Name => 'CustomRendered', Format => 'int32u', # (guess) Groups => { 2 => 'Image' }, PrintConv => { 0 => 'Normal', 1 => 'Custom', }, }, 0xa8 => { Name => 'WhiteBalance', Format => 'int32u', # (guess) Priority => 0, PrintConv => { 0 => 'Auto', 1 => 'Manual', }, }, 0xa9 => { Name => 'FocalLengthIn35mmFormat', Format => 'rational32u', PrintConv => '"$val mm"', }, 0xaa => { Name => 'SceneCaptureType', Format => 'int32u', # (guess) PrintConv => { 0 => 'Standard', 1 => 'Landscape', 2 => 'Portrait', 3 => 'Night', }, }, # 0xab-0xaf ExifOption 0xb0 => { Name => 'GPSVersionID', Format => 'int8u', Count => 4, Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => '$val =~ tr/ /./; $val', }, 0xb1 => { Name => 'GPSLatitudeRef', Format => 'string', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { N => 'North', S => 'South', }, }, 0xb2 => { Name => 'GPSLatitude', Format => 'rational32u', Groups => { 1 => 'GPS', 2 => 'Location' }, Notes => 'combined with tags 0xb3 and 0xb4', Combine => 2, # combine the next 2 tags (0xb2=deg, 0xb3=min, 0xb4=sec) ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)', PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)', }, 0xb5 => { Name => 'GPSLongitudeRef', Format => 'string', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { E => 'East', W => 'West', }, }, 0xb6 => { Name => 'GPSLongitude', Format => 'rational32u', Groups => { 1 => 'GPS', 2 => 'Location' }, Combine => 2, # combine the next 2 tags (0xb6=deg, 0xb7=min, 0xb8=sec) Notes => 'combined with tags 0xb7 and 0xb8', ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)', PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)', }, 0xb9 => { Name => 'GPSAltitudeRef', Format => 'int32u', # (guess) Groups => { 1 => 'GPS', 2 => 'Location' }, ValueConv => '$val ? 1 : 0', # because I'm not sure about the Format PrintConv => { 0 => 'Above Sea Level', 1 => 'Below Sea Level', }, }, 0xba => { Name => 'GPSAltitude', Format => 'rational32u', Groups => { 1 => 'GPS', 2 => 'Location' }, }, 0xbb => { Name => 'GPSTimeStamp', Format => 'rational32u', Groups => { 1 => 'GPS', 2 => 'Time' }, Combine => 2, # the next tags (0xbc/0xbd) contain the minutes/seconds Notes => 'combined with tags 0xbc and 0xbd', ValueConv => 'Image::ExifTool::GPS::ConvertTimeStamp($val)', PrintConv => 'Image::ExifTool::GPS::PrintTimeStamp($val)', }, 0xbe => { Name => 'GPSStatus', Format => 'string', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { A => 'Measurement Active', V => 'Measurement Void', }, }, 0xbf => { Name => 'GPSMeasureMode', Format => 'string', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { 2 => '2-Dimensional Measurement', 3 => '3-Dimensional Measurement', }, }, 0xc0 => { Name => 'GPSDOP', Description => 'GPS Dilution Of Precision', Format => 'rational32u', Groups => { 1 => 'GPS', 2 => 'Location' }, }, 0xc1 => { Name => 'GPSSpeedRef', Format => 'string', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { K => 'km/h', M => 'mph', N => 'knots', }, }, 0xc2 => { Name => 'GPSSpeed', Format => 'rational32u', Groups => { 1 => 'GPS', 2 => 'Location' }, }, 0xc3 => { Name => 'GPSTrackRef', Format => 'string', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { M => 'Magnetic North', T => 'True North', }, }, 0xc4 => { Name => 'GPSTrack', Format => 'rational32u', Groups => { 1 => 'GPS', 2 => 'Location' }, }, 0xc5 => { Name => 'GPSImgDirectionRef', Format => 'string', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { M => 'Magnetic North', T => 'True North', }, }, 0xc6 => { Name => 'GPSImgDirection', Format => 'rational32u', Groups => { 1 => 'GPS', 2 => 'Location' }, }, 0xc7 => { Name => 'GPSMapDatum', Format => 'string', Groups => { 1 => 'GPS', 2 => 'Location' }, Combine => 1, # the next tag (0xc8) contains the rest of the string Notes => 'combined with tag 0xc8', }, # 0xc9-0xcf - GPSOption 0xe0 => { Name => 'MakeModel', SubDirectory => { TagTable => 'Image::ExifTool::H264::MakeModel' }, }, # 0xe1-0xef - MakerOption # 0xe1 - val: 0x01000670,0x01000678,0x06ffffff,0x01ffffff,0x01000020,0x01000400... # 0xe2-0xe8 - val: 0x00000000 in many samples 0xe1 => { #6 Name => 'RecInfo', Condition => '$$self{Make} eq "Canon"', Notes => 'Canon only', SubDirectory => { TagTable => 'Image::ExifTool::H264::RecInfo' }, }, 0xe4 => { #PH Name => 'Model', Condition => '$$self{Make} eq "Sony"', Description => 'Camera Model Name', Notes => 'Sony cameras only, combined with tags 0xe5 and 0xe6', Format => 'string', Combine => 2, # (not sure about 0xe6, but include it just in case) RawConv => '$val eq "" ? undef : $val', }, 0xee => { #6 (HFS200) Name => 'FrameInfo', Condition => '$$self{Make} eq "Canon"', Notes => 'Canon only', SubDirectory => { TagTable => 'Image::ExifTool::H264::FrameInfo' }, }, ); # ConsumerCamera1 information (ref PH) %Image::ExifTool::H264::Camera1 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Camera' }, TAG_PREFIX => 'Camera1', PRINT_CONV => 'sprintf("0x%.2x",$val)', FIRST_ENTRY => 0, 0 => { Name => 'ApertureSetting', PrintHex => 1, PrintConv => { 0xff => 'Auto', 0xfe => 'Closed', OTHER => sub { sprintf('%.1f', 2 ** (($_[0] & 0x3f) / 8)) }, }, }, 1 => { Name => 'Gain', Mask => 0x0f, # (0x0f would translate to 42 dB, but this value is used by the Sony # HXR-NX5U for any out-of-range value such as -6 dB or "hyper gain" - PH) ValueConv => '($val - 1) * 3', PrintConv => '$val==42 ? "Out of range" : "$val dB"', }, 1.1 => { Name => 'ExposureProgram', Mask => 0xf0, ValueConv => '$val == 0xf0 ? undef : $val', PrintConv => { 0x00 => 'Program AE', 0x10 => 'Gain', #? 0x20 => 'Shutter speed priority AE', 0x30 => 'Aperture-priority AE', 0x40 => 'Manual', }, }, 2.1 => { Name => 'WhiteBalance', Mask => 0xe0, ValueConv => '$val == 0xe0 ? undef : $val', PrintConv => { 0x00 => 'Auto', 0x20 => 'Hold', 0x40 => '1-Push', 0x60 => 'Daylight', }, }, 3 => { Name => 'Focus', ValueConv => '$val == 0xff ? undef : $val', PrintConv => q{ my $foc = ($val & 0x7e) / (($val & 0x01) ? 40 : 400); return ($val & 0x80 ? 'Manual' : 'Auto') . " ($foc)"; }, }, ); # ConsumerCamera2 information (ref PH) %Image::ExifTool::H264::Camera2 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Camera' }, TAG_PREFIX => 'Camera2', PRINT_CONV => 'sprintf("0x%.2x",$val)', FIRST_ENTRY => 0, 1 => { Name => 'ImageStabilization', PrintHex => 1, PrintConv => { 0 => 'Off', 0x3f => 'On (0x3f)', #8 0xbf => 'Off (0xbf)', #8 0xff => 'n/a', OTHER => sub { my $val = shift; sprintf("%s (0x%.2x)", $val & 0x10 ? "On" : "Off", $val); }, }, }, ); # camera info 0x7f (ref PH) %Image::ExifTool::H264::Shutter = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, TAG_PREFIX => 'Shutter', PRINT_CONV => 'sprintf("0x%.2x",$val)', FIRST_ENTRY => 0, FORMAT => 'int16u', 1.1 => { #6 Name => 'ExposureTime', Mask => 0x7fff, # (what is bit 0x8000 for?) RawConv => '$val == 0x7fff ? undef : $val', #7 ValueConv => '$val / 28125', #PH (Vixia HF G30, ref forum5588) (was $val/33640 until 9.49) PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, ); # camera info 0xe0 (ref PH) %Image::ExifTool::H264::MakeModel = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Camera' }, FORMAT => 'int16u', FIRST_ENTRY => 0, 0 => { Name => 'Make', PrintHex => 1, RawConv => '$$self{Make} = ($Image::ExifTool::H264::convMake{$val} || "Unknown"); $val', PrintConv => \%convMake, }, # 1 => ModelIDCode according to ref 4/5 (I think not - PH) # 1 => { Name => 'ModelIDCode', PrintConv => 'sprintf("%.4x",$val)' }, # vals: 0x0313 - various Pansonic HDC models # 0x0345 - Panasonic HC-V7272 # 0x0414 - Panasonic AG-AF100 # 0x0591 - various Panasonic DMC models # 0x3001 - various Sony DSC, HDR, NEX and SLT models # 0x3003 - various Sony DSC models # 0x3100 - various Sony DSC, ILCE, NEX and SLT models # 0x1000 - Sony HDR-UX1 # 0x2000 - Canon HF100 (60i) # 0x3000 - Canon HF100 (30p) # 0x3101 - Canon HFM300 (PH, all qualities and frame rates) # 0x3102 - Canon HFS200 # 0x4300 - Canon HFG30 ); # camera info 0xe1 (ref 6) %Image::ExifTool::H264::RecInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Camera' }, FORMAT => 'int8u', NOTES => 'Recording information stored by some Canon video cameras.', FIRST_ENTRY => 0, 0 => { Name => 'RecordingMode', PrintConv => { 0x02 => 'XP+', # High Quality 12 Mbps 0x04 => 'SP', # Standard Play 7 Mbps 0x05 => 'LP', # Long Play 5 Mbps 0x06 => 'FXP', # High Quality 17 Mbps 0x07 => 'MXP', # High Quality 24 Mbps }, }, ); # camera info 0xee (ref 6) %Image::ExifTool::H264::FrameInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, FORMAT => 'int8u', NOTES => 'Frame rate information stored by some Canon video cameras.', FIRST_ENTRY => 0, 0 => 'CaptureFrameRate', 1 => 'VideoFrameRate', # 2 - 8=60i, 10=PF30, 74=PF24 (PH, HFM300) ); #============================================================================== # Bitstream functions (used for H264 video) # # Member variables: # Mask = mask for next bit to read (0 when all data has been read) # Pos = byte offset of next word to read # Word = current data word # Len = total data length in bytes # DataPt = data pointer #.............................................................................. #------------------------------------------------------------------------------ # Read next word from bitstream # Inputs: 0) BitStream ref # Returns: true if there is more data (and updates # Mask, Pos and Word for first bit in next word) sub ReadNextWord($) { my $bstr = shift; my $pos = $$bstr{Pos}; if ($pos + 4 <= $$bstr{Len}) { $$bstr{Word} = unpack("x$pos N", ${$$bstr{DataPt}}); $$bstr{Mask} = 0x80000000; $$bstr{Pos} += 4; } elsif ($pos < $$bstr{Len}) { my @bytes = unpack("x$pos C*", ${$$bstr{DataPt}}); my ($word, $mask) = (shift(@bytes), 0x80); while (@bytes) { $word = ($word << 8) | shift(@bytes); $mask <<= 8; } $$bstr{Word} = $word; $$bstr{Mask} = $mask; $$bstr{Pos} = $$bstr{Len}; } else { return 0; } return 1; } #------------------------------------------------------------------------------ # Create a new BitStream object # Inputs: 0) data ref # Returns: BitStream ref, or null if data is empty sub NewBitStream($) { my $dataPt = shift; my $bstr = { DataPt => $dataPt, Len => length($$dataPt), Pos => 0, Mask => 0, }; ReadNextWord($bstr) or undef $bstr; return $bstr; } #------------------------------------------------------------------------------ # Get number of bits remaining in bit stream # Inputs: 0) BitStream ref # Returns: number of bits remaining sub BitsLeft($) { my $bstr = shift; my $bits = 0; my $mask = $$bstr{Mask}; while ($mask) { ++$bits; $mask >>= 1; } return $bits + 8 * ($$bstr{Len} - $$bstr{Pos}); } #------------------------------------------------------------------------------ # Get integer from bitstream # Inputs: 0) BitStream ref, 1) number of bits # Returns: integer (and increments position in bitstream) sub GetIntN($$) { my ($bstr, $bits) = @_; my $val = 0; while ($bits--) { $val <<= 1; ++$val if $$bstr{Mask} & $$bstr{Word}; $$bstr{Mask} >>= 1 and next; ReadNextWord($bstr) or last; } return $val; } #------------------------------------------------------------------------------ # Get Exp-Golomb integer from bitstream # Inputs: 0) BitStream ref # Returns: integer (and increments position in bitstream) sub GetGolomb($) { my $bstr = shift; # first, count the number of zero bits to get the integer bit width my $count = 0; until ($$bstr{Mask} & $$bstr{Word}) { ++$count; $$bstr{Mask} >>= 1 and next; ReadNextWord($bstr) or last; } # then return the adjusted integer return GetIntN($bstr, $count + 1) - 1; } #------------------------------------------------------------------------------ # Get signed Exp-Golomb integer from bitstream # Inputs: 0) BitStream ref # Returns: integer (and increments position in bitstream) sub GetGolombS($) { my $bstr = shift; my $val = GetGolomb($bstr) + 1; return ($val & 1) ? -($val >> 1) : ($val >> 1); } # end bitstream functions #============================================================================== #------------------------------------------------------------------------------ # Decode H.264 scaling matrices # Inputs: 0) BitStream ref # Reference: http://ffmpeg.org/ sub DecodeScalingMatrices($) { my $bstr = shift; if (GetIntN($bstr, 1)) { my ($i, $j); for ($i=0; $i<8; ++$i) { my $size = $i<6 ? 16 : 64; next unless GetIntN($bstr, 1); my ($last, $next) = (8, 8); for ($j=0; $j<$size; ++$j) { $next = ($last + GetGolombS($bstr)) & 0xff if $next; last unless $j or $next; } } } } #------------------------------------------------------------------------------ # Parse H.264 sequence parameter set RBSP (ref 1) # Inputs) 0) ExifTool ref, 1) tag table ref, 2) data ref sub ParseSeqParamSet($$$) { my ($et, $tagTablePtr, $dataPt) = @_; # initialize our bitstream object my $bstr = NewBitStream($dataPt) or return; my ($t, $i, $j, $n); # the messy nature of H.264 encoding makes it difficult to use # data-driven structure parsing, so I code it explicitly (yuck!) $t = GetIntN($bstr, 8); # profile_idc GetIntN($bstr, 16); # constraints and level_idc GetGolomb($bstr); # seq_parameter_set_id if ($t >= 100) { # (ref b) $t = GetGolomb($bstr); # chroma_format_idc if ($t == 3) { GetIntN($bstr, 1); # separate_colour_plane_flag $n = 12; } else { $n = 8; } GetGolomb($bstr); # bit_depth_luma_minus8 GetGolomb($bstr); # bit_depth_chroma_minus8 GetIntN($bstr, 1); # qpprime_y_zero_transform_bypass_flag DecodeScalingMatrices($bstr); } GetGolomb($bstr); # log2_max_frame_num_minus4 $t = GetGolomb($bstr); # pic_order_cnt_type if ($t == 0) { GetGolomb($bstr); # log2_max_pic_order_cnt_lsb_minus4 } elsif ($t == 1) { GetIntN($bstr, 1); # delta_pic_order_always_zero_flag GetGolomb($bstr); # offset_for_non_ref_pic GetGolomb($bstr); # offset_for_top_to_bottom_field $n = GetGolomb($bstr); # num_ref_frames_in_pic_order_cnt_cycle for ($i=0; $i<$n; ++$i) { GetGolomb($bstr); # offset_for_ref_frame[i] } } GetGolomb($bstr); # num_ref_frames GetIntN($bstr, 1); # gaps_in_frame_num_value_allowed_flag my $w = GetGolomb($bstr); # pic_width_in_mbs_minus1 my $h = GetGolomb($bstr); # pic_height_in_map_units_minus1 my $f = GetIntN($bstr, 1); # frame_mbs_only_flag $f or GetIntN($bstr, 1); # mb_adaptive_frame_field_flag GetIntN($bstr, 1); # direct_8x8_inference_flag # convert image size to pixels $w = ($w + 1) * 16; $h = (2 - $f) * ($h + 1) * 16; # account for cropping (if any) $t = GetIntN($bstr, 1); # frame_cropping_flag if ($t) { my $m = 4 - $f * 2; $w -= 4 * GetGolomb($bstr);# frame_crop_left_offset $w -= 4 * GetGolomb($bstr);# frame_crop_right_offset $h -= $m * GetGolomb($bstr);# frame_crop_top_offset $h -= $m * GetGolomb($bstr);# frame_crop_bottom_offset } # quick validity checks (just in case) return unless $$bstr{Mask}; if ($w>=160 and $w<=4096 and $h>=120 and $h<=3072) { $et->HandleTag($tagTablePtr, ImageWidth => $w); $et->HandleTag($tagTablePtr, ImageHeight => $h); # (whew! -- so much work just to get ImageSize!!) } # return now unless interested in picture timing information return unless $parsePictureTiming; # parse vui parameters if they exist GetIntN($bstr, 1) or return; # vui_parameters_present_flag $t = GetIntN($bstr, 1); # aspect_ratio_info_present_flag if ($t) { $t = GetIntN($bstr, 8); # aspect_ratio_idc if ($t == 255) { # Extended_SAR ? GetIntN($bstr, 32); # sar_width/sar_height } } $t = GetIntN($bstr, 1); # overscan_info_present_flag GetIntN($bstr, 1) if $t; # overscan_appropriate_flag $t = GetIntN($bstr, 1); # video_signal_type_present_flag if ($t) { GetIntN($bstr, 4); # video_format/video_full_range_flag $t = GetIntN($bstr, 1); # colour_description_present_flag GetIntN($bstr, 24) if $t; # colour_primaries/transfer_characteristics/matrix_coefficients } $t = GetIntN($bstr, 1); # chroma_loc_info_present_flag if ($t) { GetGolomb($bstr); # chroma_sample_loc_type_top_field GetGolomb($bstr); # chroma_sample_loc_type_bottom_field } $t = GetIntN($bstr, 1); # timing_info_present_flag if ($t) { return if BitsLeft($bstr) < 65; $$et{VUI_units} = GetIntN($bstr, 32); # num_units_in_tick $$et{VUI_scale} = GetIntN($bstr, 32); # time_scale GetIntN($bstr, 1); # fixed_frame_rate_flag } my $hard; for ($j=0; $j<2; ++$j) { $t = GetIntN($bstr, 1); # nal_/vcl_hrd_parameters_present_flag if ($t) { $$et{VUI_hard} = 1; $hard = 1; $n = GetGolomb($bstr); # cpb_cnt_minus1 GetIntN($bstr, 8); # bit_rate_scale/cpb_size_scale for ($i=0; $i<=$n; ++$i) { GetGolomb($bstr); # bit_rate_value_minus1[SchedSelIdx] GetGolomb($bstr); # cpb_size_value_minus1[SchedSelIdx] GetIntN($bstr, 1); # cbr_flag[SchedSelIdx] } GetIntN($bstr, 5); # initial_cpb_removal_delay_length_minus1 $$et{VUI_clen} = GetIntN($bstr, 5); # cpb_removal_delay_length_minus1 $$et{VUI_dlen} = GetIntN($bstr, 5); # dpb_output_delay_length_minus1 $$et{VUI_toff} = GetIntN($bstr, 5); # time_offset_length } } GetIntN($bstr, 1) if $hard; # low_delay_hrd_flag $$et{VUI_pic} = GetIntN($bstr, 1); # pic_struct_present_flag # (don't yet decode the rest of the vui data) } #------------------------------------------------------------------------------ # Parse H.264 picture timing SEI message (payload type 1) (ref 1) # Inputs) 0) ExifTool ref, 1) data ref sub ParsePictureTiming($$) { my ($et, $dataPt) = @_; my $bstr = NewBitStream($dataPt) or return; my ($i, $t, $n); # the specification is very odd on this point: the following delays # exist if the VUI hardware parameters are present, or if # "determined by the application, by some means not specified" -- WTF?? if ($$et{VUI_hard}) { GetIntN($bstr, $$et{VUI_clen} + 1); # cpb_removal_delay GetIntN($bstr, $$et{VUI_dlen} + 1); # dpb_output_delay } if ($$et{VUI_pic}) { $t = GetIntN($bstr, 4); # pic_struct # determine NumClockTS ($n) $n = { 0=>1, 1=>1, 2=>1, 3=>2, 4=>2, 5=>3, 6=>3, 7=>2, 8=>3 }->{$t}; $n or return; for ($i=0; $i<$n; ++$i) { $t = GetIntN($bstr, 1); # clock_timestamp_flag[i] next unless $t; my ($nu, $s, $m, $h, $o); GetIntN($bstr, 2); # ct_type $nu = GetIntN($bstr, 1);# nuit_field_based_flag GetIntN($bstr, 5); # counting_type $t = GetIntN($bstr, 1); # full_timestamp_flag GetIntN($bstr, 1); # discontinuity_flag GetIntN($bstr, 1); # cnt_dropped_flag GetIntN($bstr, 8); # n_frames if ($t) { $s = GetIntN($bstr, 6); # seconds_value $m = GetIntN($bstr, 6); # minutes_value $h = GetIntN($bstr, 5); # hours_value } else { $t = GetIntN($bstr, 1); # seconds_flag if ($t) { $s = GetIntN($bstr, 6); # seconds_value $t = GetIntN($bstr, 1); # minutes_flag if ($t) { $m = GetIntN($bstr, 6); # minutes_value $t = GetIntN($bstr, 1); # hours_flag $h = GetIntN($bstr, 5) if $t; # hours_value } } } if ($$et{VUI_toff}) { $o = GetIntN($bstr, $$et{VUI_toff}); # time_offset } last; # only parse the first clock timestamp found } } } #------------------------------------------------------------------------------ # Process H.264 Supplementary Enhancement Information (ref 1/PH) # Inputs: 0) Exiftool ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 if we processed payload type 5 sub ProcessSEI($$) { my ($et, $dirInfo) = @_; my $dataPt = $$dirInfo{DataPt}; my $end = length($$dataPt); my $pos = 0; my ($type, $size, $index, $t); # scan through SEI payload for type 5 (the unregistered user data) for (;;) { $type = 0; for (;;) { return 0 if $pos >= $end; $t = Get8u($dataPt, $pos++); # payload type $type += $t; last unless $t == 255; } return 0 if $type == 0x80; # terminator (ref PH - maybe byte alignment bits?) $size = 0; for (;;) { return 0 if $pos >= $end; $t = Get8u($dataPt, $pos++); # payload data length $size += $t; last unless $t == 255; } return 0 if $pos + $size > $end; if ($type == 1) { # picture timing information if ($parsePictureTiming) { my $buff = substr($$dataPt, $pos, $size); ParsePictureTiming($et, $dataPt); } } elsif ($type == 5) { # unregistered user data last; # exit loop to process user data now } $pos += $size; } # look for our 16-byte UUID # - plus "MDPM" for "ModifiedDVPackMeta" # - plus "GA94" for closed-caption data (currently not decoded) return 0 unless $size > 20 and substr($$dataPt, $pos, 20) eq "\x17\xee\x8c\x60\xf8\x4d\x11\xd9\x8c\xd6\x08\0\x20\x0c\x9a\x66MDPM"; # load the GPS module because it contains conversion routines and # Composite tags needed for a number of tags we may be extracting require Image::ExifTool::GPS; # # parse the MDPM records in the UUID 17ee8c60f84d11d98cd60800200c9a66 # unregistered user data payload (ref PH) # my $tagTablePtr = GetTagTable('Image::ExifTool::H264::MDPM'); my $oldIndent = $$et{INDENT}; $$et{INDENT} .= '| '; $end = $pos + $size; # end of payload $pos += 20; # skip UUID + "MDPM" my $num = Get8u($dataPt, $pos++); # get entry count my $lastTag = 0; $et->VerboseDir('MDPM', $num) if $et->Options('Verbose'); # walk through entries in the MDPM payload for ($index=0; $index<$num and $pos<$end; ++$index) { my $tag = Get8u($dataPt, $pos); if ($tag <= $lastTag) { # should be in numerical order (PH) $et->Warn('Entries in MDPM directory are out of sequence'); last; } $lastTag = $tag; my $buff = substr($$dataPt, $pos + 1, 4); my $from; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); if ($tagInfo) { # use our own print conversion for Unknown tags if ($$tagInfo{Unknown} and not $$tagInfo{SetPrintConv}) { $$tagInfo{PrintConv} = 'sprintf("0x%.8x", unpack("N", $val))'; $$tagInfo{SetPrintConv} = 1; } # combine with next value(s) if necessary my $combine = $$tagTablePtr{$tag}{Combine}; while ($combine) { last if $pos + 5 >= $end; my $t = Get8u($dataPt, $pos + 5); last if $t != $lastTag + 1; # must be consecutive tag ID's $pos += 5; $buff .= substr($$dataPt, $pos + 1, 4); $from = $index unless defined $from; ++$index; ++$lastTag; --$combine; } $et->HandleTag($tagTablePtr, $tag, undef, TagInfo => $tagInfo, DataPt => \$buff, Size => length($buff), Index => defined $from ? "$from-$index" : $index, ); } $pos += 5; } $$et{INDENT} = $oldIndent; return 1; } #------------------------------------------------------------------------------ # Extract information from H.264 video stream # Inputs: 0) ExifTool ref, 1) data ref # Returns: 0 = done parsing, 1 = we want to parse more of these sub ParseH264Video($$) { my ($et, $dataPt) = @_; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my $tagTablePtr = GetTagTable('Image::ExifTool::H264::Main'); my %parseNalUnit = ( 0x06 => 1, 0x07 => 1 ); # NAL unit types to parse my $foundUserData; my $len = length $$dataPt; my $pos = 0; while ($pos < $len) { my ($nextPos, $end); # find start of next NAL unit if ($$dataPt =~ /(\0{2,3}\x01)/g) { $nextPos = pos $$dataPt; $end = $nextPos - length $1; $pos or $pos = $nextPos, next; } else { last unless $pos; $nextPos = $end = $len; } last if $pos >= $len; # parse NAL unit from $pos to $end my $nal_unit_type = Get8u($dataPt, $pos); ++$pos; # check forbidden_zero_bit $nal_unit_type & 0x80 and $et->Warn('H264 forbidden bit error'), last; $nal_unit_type &= 0x1f; # ignore this NAL unit unless we will parse it $parseNalUnit{$nal_unit_type} or $verbose or $pos = $nextPos, next; # read NAL unit (and convert all 0x000003's to 0x0000 as per spec.) my $buff = ''; pos($$dataPt) = $pos + 1; while ($$dataPt =~ /\0\0\x03/g) { last if pos $$dataPt > $end; $buff .= substr($$dataPt, $pos, pos($$dataPt)-1-$pos); $pos = pos $$dataPt; } $buff .= substr($$dataPt, $pos, $end - $pos); if ($verbose > 1) { printf $out " NAL Unit Type: 0x%x (%d bytes)\n",$nal_unit_type, length $buff; my %parms = ( Out => $out ); $parms{MaxLen} = 96 if $verbose < 4; HexDump(\$buff, undef, %parms) if $verbose > 2; } pos($$dataPt) = $pos = $nextPos; if ($nal_unit_type == 0x06) { # sei_rbsp (supplemental enhancement info) if ($$et{GotNAL06}) { # process only the first SEI unless ExtractEmbedded is set next unless $et->Options('ExtractEmbedded'); $$et{DOC_NUM} = $$et{GotNAL06}; } $foundUserData = ProcessSEI($et, { DataPt => \$buff } ); delete $$et{DOC_NUM}; # keep parsing SEI's until we find the user data next unless $foundUserData; $$et{GotNAL06} = ($$et{GotNAL06} || 0) + 1; } elsif ($nal_unit_type == 0x07) { # sequence_parameter_set_rbsp # process this NAL unit type only once next if $$et{GotNAL07}; $$et{GotNAL07} = 1; ParseSeqParamSet($et, $tagTablePtr, \$buff); } # we were successful, so don't parse this NAL unit type again delete $parseNalUnit{$nal_unit_type}; } # parse one extra H264 frame if we didn't find the user data in this one # (Panasonic cameras don't put the SEI in the first frame) return 0 if $foundUserData or $$et{ParsedH264}; $$et{ParsedH264} = 1; return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::H264 - Read meta information from H.264 video =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to extract information from H.264 video streams. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.itu.int/rec/T-REC-H.264/e> =item L<http://miffteevee.co.uk/documentation/development/H264Parser_8cpp-source.html> =item L<http://ffmpeg.org/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/H264 Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/HP.pm�������������������������������������������������������000644 �000765 �000024 �00000017752 12642461305 020570� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: HP.pm # # Description: Hewlett-Packard maker notes tags # # Revisions: 2007-05-03 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::HP; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.04'; sub ProcessHP($$$); sub ProcessTDHD($$$); # HP EXIF-format maker notes (or is it Vivitar?) %Image::ExifTool::HP::Main = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tables list tags found in the maker notes of some Hewlett-Packard camera models. The first table lists tags found in the EXIF-format maker notes of the PhotoSmart 720 (also used by the Vivitar ViviCam 3705, 3705B and 3715). }, 0x0e00 => { Name => 'PrintIM', Description => 'Print Image Matching', SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main', }, }, ); # other types of HP maker notes %Image::ExifTool::HP::Type2 = ( PROCESS_PROC => \&ProcessHP, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'These tags are used by the PhotoSmart E427.', 'PreviewImage' => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, RawConv => '$self->ValidateImage(\$val,$tag)', }, 'Serial Number' => 'SerialNumber', 'Lens Shading' => 'LensShading', ); %Image::ExifTool::HP::Type4 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'These tags are used by the PhotoSmart M627.', 0x0c => { Name => 'MaxAperture', Format => 'int16u', ValueConv => '$val / 10', }, 0x10 => { Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val / 1e6', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x14 => { Name => 'CameraDateTime', Groups => { 2 => 'Time' }, Format => 'string[20]', }, 0x34 => { Name => 'ISO', Format => 'int16u', }, 0x5c => { Name => 'SerialNumber', Format => 'string[26]', RawConv => '$val =~ s/^SERIAL NUMBER:// ? $val : undef', }, ); %Image::ExifTool::HP::Type6 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'These tags are used by the PhotoSmart M425, M525 and M527.', 0x0c => { Name => 'FNumber', Format => 'int16u', ValueConv => '$val / 10', }, 0x10 => { Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val / 1e6', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x14 => { Name => 'CameraDateTime', Groups => { 2 => 'Time' }, Format => 'string[20]', }, 0x34 => { Name => 'ISO', Format => 'int16u', }, 0x58 => { Name => 'SerialNumber', Format => 'string[26]', RawConv => '$val =~ s/^SERIAL NUMBER:// ? $val : undef', }, ); # proprietary format TDHD data written by Photosmart R837 (ref PH) %Image::ExifTool::HP::TDHD = ( PROCESS_PROC => \&ProcessTDHD, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are extracted from the APP6 "TDHD" segment of Photosmart R837 JPEG images. Many other unknown tags exist in is data, and can be seen with the Unknown (-u) option. }, # (all subdirectories except TDHD and LSLV are automatically recognized # by their "type" word of 0x10001) TDHD => { Name => 'TDHD', SubDirectory => { TagTable => 'Image::ExifTool::HP::TDHD' }, }, LSLV => { Name => 'LSLV', SubDirectory => { TagTable => 'Image::ExifTool::HP::TDHD' }, }, FWRV => 'FirmwareVersion', CMSN => 'SerialNumber', # (unverified) # LTEM - some temperature? ); #------------------------------------------------------------------------------ # Process HP APP6 TDHD metadata (ref PH) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessTDHD($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos}; my $pos = $$dirInfo{DirStart}; my $dirEnd = $pos + $$dirInfo{DirLen}; my $unknown = $et->Options('Unknown') || $et->Options('Verbose'); $et->VerboseDir('TDHD', undef, $$dirInfo{DirLen}); SetByteOrder('II'); while ($pos + 12 < $dirEnd) { my $tag = substr($$dataPt, $pos, 4); my $type = Get32u($dataPt, $pos + 4); my $size = Get32u($dataPt, $pos + 8); $pos += 12; last if $size < 0 or $pos + $size > $dirEnd; if ($type == 0x10001) { # this is a subdirectory containing more tags my %dirInfo = ( DataPt => $dataPt, DataPos => $dataPos, DirStart => $pos, DirLen => $size, ); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); } else { if (not $$tagTablePtr{$tag} and $unknown) { my $name = $tag; $name =~ tr/-_A-Za-z0-9//dc; # remove invalid characters my %tagInfo = ( Name => "HP_TDHD_$name", Unknown => 1, ); # guess format based on data size if ($size == 1) { $tagInfo{Format} = 'int8u'; } elsif ($size == 2) { $tagInfo{Format} = 'int16u'; } elsif ($size == 4) { $tagInfo{Format} = 'int32s'; } elsif ($size > 80) { $tagInfo{Binary} = 1; } AddTagToTable($tagTablePtr, $tag, \%tagInfo); } $et->HandleTag($tagTablePtr, $tag, undef, DataPt => $dataPt, DataPos => $dataPos, Start => $pos, Size => $size, ); } $pos += $size; } return 1; } #------------------------------------------------------------------------------ # Process HP maker notes # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, otherwise returns 0 and sets a Warning sub ProcessHP($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataLen = $$dirInfo{DataLen}; my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || $dataLen - $dirStart; # look for known text-type tags if ($dirStart or $dirLen != length($$dataPt)) { my $buff = substr($$dataPt, $dirStart, $dirLen); $dataPt = \$buff; } my $tagID; # brute-force scan for PreviewImage if ($$tagTablePtr{PreviewImage} and $$dataPt =~ /(\xff\xd8\xff\xdb.*\xff\xd9)/gs) { $et->HandleTag($tagTablePtr, 'PreviewImage', $1); # truncate preview to speed subsequent tag scans my $buff = substr($$dataPt, 0, pos($$dataPt)-length($1)); $dataPt = \$buff; } # scan for other tag ID's foreach $tagID (sort(TagTableKeys($tagTablePtr))) { next if $tagID eq 'PreviewImage'; next unless $$dataPt =~ /$tagID:\s*([\x20-\x7f]+)/i; $et->HandleTag($tagTablePtr, $tagID, $1); } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::HP - Hewlett-Packard maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Hewlett-Packard maker notes. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/HP Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������Image-ExifTool-10.10/lib/Image/ExifTool/HTML.pm�����������������������������������������������������000644 �000765 �000024 �00000053277 12642461305 021027� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: HTML.pm # # Description: Read HTML meta information # # Revisions: 01/30/2007 - P. Harvey Created # # References: 1) http://www.w3.org/TR/html4/ # 2) http://www.daisy.org/publications/specifications/daisy_202.html # 3) http://vancouver-webpages.com/META/metatags.detail.html # 4) http://www.html-reference.com/META.htm #------------------------------------------------------------------------------ package Image::ExifTool::HTML; use strict; use vars qw($VERSION @ISA @EXPORT_OK); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::PostScript; use Image::ExifTool::XMP qw(EscapeXML UnescapeXML); require Exporter; $VERSION = '1.15'; @ISA = qw(Exporter); @EXPORT_OK = qw(EscapeHTML UnescapeHTML); sub SetHTMLCharset($$); # convert HTML charset (lower case) to ExifTool Charset name my %htmlCharset = ( macintosh => 'MacRoman', 'iso-8859-1' => 'Latin', 'utf-8' => 'UTF8', 'windows-1252' => 'Latin', ); # HTML 4 character entity references my %entityNum = ( 'quot' => 34, 'eth' => 240, 'lsquo' => 8216, 'amp' => 38, 'ntilde' => 241, 'rsquo' => 8217, 'apos' => 39, 'ograve' => 242, 'sbquo' => 8218, 'lt' => 60, 'oacute' => 243, 'ldquo' => 8220, 'gt' => 62, 'ocirc' => 244, 'rdquo' => 8221, 'nbsp' => 160, 'otilde' => 245, 'bdquo' => 8222, 'iexcl' => 161, 'ouml' => 246, 'dagger' => 8224, 'cent' => 162, 'divide' => 247, 'Dagger' => 8225, 'pound' => 163, 'oslash' => 248, 'bull' => 8226, 'curren' => 164, 'ugrave' => 249, 'hellip' => 8230, 'yen' => 165, 'uacute' => 250, 'permil' => 8240, 'brvbar' => 166, 'ucirc' => 251, 'prime' => 8242, 'sect' => 167, 'uuml' => 252, 'Prime' => 8243, 'uml' => 168, 'yacute' => 253, 'lsaquo' => 8249, 'copy' => 169, 'thorn' => 254, 'rsaquo' => 8250, 'ordf' => 170, 'yuml' => 255, 'oline' => 8254, 'laquo' => 171, 'OElig' => 338, 'frasl' => 8260, 'not' => 172, 'oelig' => 339, 'euro' => 8364, 'shy' => 173, 'Scaron' => 352, 'image' => 8465, 'reg' => 174, 'scaron' => 353, 'weierp' => 8472, 'macr' => 175, 'Yuml' => 376, 'real' => 8476, 'deg' => 176, 'fnof' => 402, 'trade' => 8482, 'plusmn' => 177, 'circ' => 710, 'alefsym'=> 8501, 'sup2' => 178, 'tilde' => 732, 'larr' => 8592, 'sup3' => 179, 'Alpha' => 913, 'uarr' => 8593, 'acute' => 180, 'Beta' => 914, 'rarr' => 8594, 'micro' => 181, 'Gamma' => 915, 'darr' => 8595, 'para' => 182, 'Delta' => 916, 'harr' => 8596, 'middot' => 183, 'Epsilon'=> 917, 'crarr' => 8629, 'cedil' => 184, 'Zeta' => 918, 'lArr' => 8656, 'sup1' => 185, 'Eta' => 919, 'uArr' => 8657, 'ordm' => 186, 'Theta' => 920, 'rArr' => 8658, 'raquo' => 187, 'Iota' => 921, 'dArr' => 8659, 'frac14' => 188, 'Kappa' => 922, 'hArr' => 8660, 'frac12' => 189, 'Lambda' => 923, 'forall' => 8704, 'frac34' => 190, 'Mu' => 924, 'part' => 8706, 'iquest' => 191, 'Nu' => 925, 'exist' => 8707, 'Agrave' => 192, 'Xi' => 926, 'empty' => 8709, 'Aacute' => 193, 'Omicron'=> 927, 'nabla' => 8711, 'Acirc' => 194, 'Pi' => 928, 'isin' => 8712, 'Atilde' => 195, 'Rho' => 929, 'notin' => 8713, 'Auml' => 196, 'Sigma' => 931, 'ni' => 8715, 'Aring' => 197, 'Tau' => 932, 'prod' => 8719, 'AElig' => 198, 'Upsilon'=> 933, 'sum' => 8721, 'Ccedil' => 199, 'Phi' => 934, 'minus' => 8722, 'Egrave' => 200, 'Chi' => 935, 'lowast' => 8727, 'Eacute' => 201, 'Psi' => 936, 'radic' => 8730, 'Ecirc' => 202, 'Omega' => 937, 'prop' => 8733, 'Euml' => 203, 'alpha' => 945, 'infin' => 8734, 'Igrave' => 204, 'beta' => 946, 'ang' => 8736, 'Iacute' => 205, 'gamma' => 947, 'and' => 8743, 'Icirc' => 206, 'delta' => 948, 'or' => 8744, 'Iuml' => 207, 'epsilon'=> 949, 'cap' => 8745, 'ETH' => 208, 'zeta' => 950, 'cup' => 8746, 'Ntilde' => 209, 'eta' => 951, 'int' => 8747, 'Ograve' => 210, 'theta' => 952, 'there4' => 8756, 'Oacute' => 211, 'iota' => 953, 'sim' => 8764, 'Ocirc' => 212, 'kappa' => 954, 'cong' => 8773, 'Otilde' => 213, 'lambda' => 955, 'asymp' => 8776, 'Ouml' => 214, 'mu' => 956, 'ne' => 8800, 'times' => 215, 'nu' => 957, 'equiv' => 8801, 'Oslash' => 216, 'xi' => 958, 'le' => 8804, 'Ugrave' => 217, 'omicron'=> 959, 'ge' => 8805, 'Uacute' => 218, 'pi' => 960, 'sub' => 8834, 'Ucirc' => 219, 'rho' => 961, 'sup' => 8835, 'Uuml' => 220, 'sigmaf' => 962, 'nsub' => 8836, 'Yacute' => 221, 'sigma' => 963, 'sube' => 8838, 'THORN' => 222, 'tau' => 964, 'supe' => 8839, 'szlig' => 223, 'upsilon'=> 965, 'oplus' => 8853, 'agrave' => 224, 'phi' => 966, 'otimes' => 8855, 'aacute' => 225, 'chi' => 967, 'perp' => 8869, 'acirc' => 226, 'psi' => 968, 'sdot' => 8901, 'atilde' => 227, 'omega' => 969, 'lceil' => 8968, 'auml' => 228, 'thetasym'=>977, 'rceil' => 8969, 'aring' => 229, 'upsih' => 978, 'lfloor' => 8970, 'aelig' => 230, 'piv' => 982, 'rfloor' => 8971, 'ccedil' => 231, 'ensp' => 8194, 'lang' => 9001, 'egrave' => 232, 'emsp' => 8195, 'rang' => 9002, 'eacute' => 233, 'thinsp' => 8201, 'loz' => 9674, 'ecirc' => 234, 'zwnj' => 8204, 'spades' => 9824, 'euml' => 235, 'zwj' => 8205, 'clubs' => 9827, 'igrave' => 236, 'lrm' => 8206, 'hearts' => 9829, 'iacute' => 237, 'rlm' => 8207, 'diams' => 9830, 'icirc' => 238, 'ndash' => 8211, 'iuml' => 239, 'mdash' => 8212, ); my %entityName; # look up entity names by number (built as necessary) # HTML info # (tag ID's are case insensitive and must be all lower case in tables) %Image::ExifTool::HTML::Main = ( GROUPS => { 2 => 'Document' }, NOTES => q{ Meta information extracted from the header of HTML and XHTML files. This is a mix of information found in the C<META> elements, C<XML> element, and the C<TITLE> element. }, dc => { Name => 'DC', SubDirectory => { TagTable => 'Image::ExifTool::HTML::dc' }, }, ncc => { Name => 'NCC', SubDirectory => { TagTable => 'Image::ExifTool::HTML::ncc' }, }, prod => { Name => 'Prod', SubDirectory => { TagTable => 'Image::ExifTool::HTML::prod' }, }, vw96 => { Name => 'VW96', SubDirectory => { TagTable => 'Image::ExifTool::HTML::vw96' }, }, 'http-equiv' => { Name => 'HTTP-equiv', SubDirectory => { TagTable => 'Image::ExifTool::HTML::equiv' }, }, o => { Name => 'Office', SubDirectory => { TagTable => 'Image::ExifTool::HTML::Office' }, }, abstract => { }, author => { }, classification => { }, 'content-language'=>{ Name => 'ContentLanguage' }, copyright => { }, description => { }, distribution => { }, 'doc-class' => { Name => 'DocClass' }, 'doc-rights' => { Name => 'DocRights' }, 'doc-type' => { Name => 'DocType' }, formatter => { }, generator => { }, generatorversion=> { Name => 'GeneratorVersion' }, googlebot => { Name => 'GoogleBot' }, keywords => { List => 1 }, mssmarttagspreventparsing => { Name => 'NoMSSmartTags' }, originator => { }, owner => { }, progid => { Name => 'ProgID' }, rating => { }, refresh => { }, 'resource-type' => { Name => 'ResourceType' }, 'revisit-after' => { Name => 'RevisitAfter' }, robots => { List => 1 }, title => { Notes => "the only extracted tag which isn't from an HTML META element" }, ); # ref 2 %Image::ExifTool::HTML::dc = ( GROUPS => { 1 => 'HTML-dc', 2 => 'Document' }, NOTES => 'Dublin Core schema tags (also used in XMP).', contributor => { Groups => { 2 => 'Author' }, List => 'Bag' }, coverage => { }, creator => { Groups => { 2 => 'Author' }, List => 'Seq' }, date => { Groups => { 2 => 'Time' }, List => 'Seq', PrintConv => '$self->ConvertDateTime($val)', }, description => { }, 'format' => { }, identifier => { }, language => { List => 'Bag' }, publisher => { Groups => { 2 => 'Author' }, List => 'Bag' }, relation => { List => 'Bag' }, rights => { Groups => { 2 => 'Author' } }, source => { Groups => { 2 => 'Author' } }, subject => { List => 'Bag' }, title => { }, type => { List => 'Bag' }, ); # ref 2 %Image::ExifTool::HTML::ncc = ( GROUPS => { 1 => 'HTML-ncc', 2 => 'Document' }, charset => { Name => 'CharacterSet' }, # name changed to avoid conflict with -charset option depth => { }, files => { }, footnotes => { }, generator => { }, kbytesize => { Name => 'KByteSize' }, maxpagenormal => { Name => 'MaxPageNormal' }, multimediatype => { Name => 'MultimediaType' }, narrator => { }, pagefront => { Name => 'PageFront' }, pagenormal => { Name => 'PageNormal' }, pagespecial => { Name => 'PageSpecial' }, prodnotes => { Name => 'ProdNotes' }, producer => { }, produceddate => { Name => 'ProducedDate', Groups => { 2 => 'Time' } }, # YYYY-mm-dd revision => { }, revisiondate => { Name => 'RevisionDate', Groups => { 2 => 'Time' } }, setinfo => { Name => 'SetInfo' }, sidebars => { }, sourcedate => { Name => 'SourceDate', Groups => { 2 => 'Time' } }, sourceedition => { Name => 'SourceEdition' }, sourcepublisher => { Name => 'SourcePublisher' }, sourcerights => { Name => 'SourceRights' }, sourcetitle => { Name => 'SourceTitle' }, tocitems => { Name => 'TOCItems' }, totaltime => { Name => 'Duration' }, # HH:MM:SS ); # ref 3 %Image::ExifTool::HTML::vw96 = ( GROUPS => { 1 => 'HTML-vw96', 2 => 'Document' }, objecttype => { Name => 'ObjectType' }, ); # ref 2 %Image::ExifTool::HTML::prod = ( GROUPS => { 1 => 'HTML-prod', 2 => 'Document' }, reclocation => { Name => 'RecLocation' }, recengineer => { Name => 'RecEngineer' }, ); # ref 3/4 %Image::ExifTool::HTML::equiv = ( GROUPS => { 1 => 'HTTP-equiv', 2 => 'Document' }, NOTES => 'These tags have a family 1 group name of "HTTP-equiv".', 'cache-control' => { Name => 'CacheControl' }, 'content-disposition' => { Name => 'ContentDisposition' }, 'content-language' => { Name => 'ContentLanguage' }, 'content-script-type' => { Name => 'ContentScriptType' }, 'content-style-type' => { Name => 'ContentStyleType' }, # note: setting the HTMLCharset like this will miss any tags which come earlier 'content-type' => { Name => 'ContentType', RawConv => \&SetHTMLCharset }, 'default-style' => { Name => 'DefaultStyle' }, expires => { }, 'ext-cache' => { Name => 'ExtCache' }, imagetoolbar => { Name => 'ImageToolbar' }, lotus => { }, 'page-enter' => { Name => 'PageEnter' }, 'page-exit' => { Name => 'PageExit' }, 'pics-label' => { Name => 'PicsLabel' }, pragma => { }, refresh => { }, 'reply-to' => { Name => 'ReplyTo' }, 'set-cookie' => { Name => 'SetCookie' }, 'site-enter' => { Name => 'SiteEnter' }, 'site-exit' => { Name => 'SiteExit' }, vary => { }, 'window-target' => { Name => 'WindowTarget' }, ); # MS Office namespace (ref PH) %Image::ExifTool::HTML::Office = ( GROUPS => { 1 => 'HTML-office', 2 => 'Document' }, NOTES => 'Tags written by Microsoft Office applications.', Subject => { }, Author => { Groups => { 2 => 'Author' } }, Keywords => { }, Description => { }, Template => { }, LastAuthor => { Groups => { 2 => 'Author' } }, Revision => { Name => 'RevisionNumber' }, TotalTime => { Name => 'TotalEditTime', PrintConv => 'ConvertTimeSpan($val, 60)' }, Created => { Name => 'CreateDate', Groups => { 2 => 'Time' }, ValueConv => 'Image::ExifTool::XMP::ConvertXMPDate($val)', PrintConv => '$self->ConvertDateTime($val)', }, LastSaved => { Name => 'ModifyDate', Groups => { 2 => 'Time' }, ValueConv => 'Image::ExifTool::XMP::ConvertXMPDate($val)', PrintConv => '$self->ConvertDateTime($val)', }, LastSaved => { Name => 'ModifyDate', Groups => { 2 => 'Time' }, ValueConv => 'Image::ExifTool::XMP::ConvertXMPDate($val)', PrintConv => '$self->ConvertDateTime($val)', }, LastPrinted => { Name => 'LastPrinted', Groups => { 2 => 'Time' }, ValueConv => 'Image::ExifTool::XMP::ConvertXMPDate($val)', PrintConv => '$self->ConvertDateTime($val)', }, Pages => { }, Words => { }, Characters => { }, Category => { }, Manager => { }, Company => { }, Lines => { }, Paragraphs => { }, CharactersWithSpaces => { }, Version => { Name => 'RevisionNumber' }, ); #------------------------------------------------------------------------------ # Set HTMLCharset member based on content type # Inputs: 0) content type string, 1) ExifTool ref # Returns: original string sub SetHTMLCharset($$) { my ($val, $et) = @_; $$et{HTMLCharset} = $htmlCharset{lc $1} if $val =~ /charset=['"]?([-\w]+)/; return $val; } #------------------------------------------------------------------------------ # Convert single UTF-8 character to HTML character reference # Inputs: 0) UTF-8 character sequence # Returns: HTML character reference (eg. "&quot;"); # Note: Must be called via EscapeHTML to load name lookup sub EscapeChar($) { my $ch = shift; my $val; if ($] < 5.006001) { ($val) = Image::ExifTool::UnpackUTF8($ch); } else { # the meaning of "U0" is reversed as of Perl 5.10.0! ($val) = unpack($] < 5.010000 ? 'U0U' : 'C0U', $ch); } return '?' unless defined $val; return "&$entityName{$val};" if $entityName{$val}; return sprintf('&#x%x;',$val); } #------------------------------------------------------------------------------ # Escape any special characters for HTML # Inputs: 0) UTF-8 string to be escaped # Returns: escaped string sub EscapeHTML($) { my $str = shift; # escape XML characters $str = EscapeXML($str); # escape other special characters if they exist if ($str =~ /[\x80-\xff]/) { # generate entity name lookup if necessary unless (%entityName) { local $_; foreach (keys %entityNum) { $entityName{$entityNum{$_}} = $_; } delete $entityName{39}; # 'apos' is not valid HTML } # suppress warnings local $SIG{'__WARN__'} = sub { 1 }; # escape any non-ascii characters for HTML $str =~ s/([\xc2-\xf7][\x80-\xbf]+)/EscapeChar($1)/sge; } return $str; } #------------------------------------------------------------------------------ # Unescape all HTML character references # Inputs: 0) string to be unescaped # Returns: unescaped string sub UnescapeHTML($) { return UnescapeXML(shift, \%entityNum); } #------------------------------------------------------------------------------ # Extract information from a HTML file # Inputs: 0) ExifTool object reference, 1) DirInfo reference # Returns: 1 on success, 0 if this wasn't a valid HTML file sub ProcessHTML($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $buff; # validate HTML or XHTML file $raf->Read($buff, 256) or return 0; $buff =~ /^(\xef\xbb\xbf)?\s*<(!DOCTYPE\s+HTML|HTML|\?xml)/i or return 0; $buff =~ /<(!DOCTYPE\s+)?HTML/i or return 0 if $2 eq '?xml'; $et->SetFileType(); $raf->Seek(0,0) or $et->Warn('Seek error'), return 1; local $/ = Image::ExifTool::PostScript::GetInputRecordSeparator($raf); $/ or $et->Warn('Invalid HTML data'), return 1; # extract header information my $doc; while ($raf->ReadLine($buff)) { if (not defined $doc) { # look for 'head' element next unless $buff =~ /<head\b/ig; $doc = substr($buff, pos($buff)); next; } $doc .= $buff; last if $buff =~ m{</head>}i; } return 1 unless defined $doc; # process all elements in header my $tagTablePtr = GetTagTable('Image::ExifTool::HTML::Main'); for (;;) { last unless $doc =~ m{<([\w:.-]+)(.*?)>}sg; my ($tagName, $attrs) = ($1, $2); my $tag = lc($tagName); my ($val, $grp); if ($attrs =~ m{/$}) { # self-contained XHTML tags end in '/>' $val = ''; } else { # look for element close my $pos = pos($doc); my $close = "</$tagName>"; # the following doesn't work on Solaris Perl 5.6.1 due to Perl bug: # if ($doc =~ m{(.*?)</$tagName>}sg) { # $val = $1; if ($doc =~ m{$close}sg) { $val = substr($doc, $pos, pos($doc)-$pos-length($close)); } else { pos($doc) = $pos; next unless $tag eq 'meta'; # META tags don't need to be closed $val = ''; } } my $table = $tagTablePtr; if ($tag eq 'meta') { # parse HTML META element undef $tag; # tag name is in NAME or HTTP-EQUIV attribute if ($attrs =~ /\bname\s*=\s*['"]?([\w:.-]+)/si) { $tagName = $1; } elsif ($attrs =~ /\bhttp-equiv\s*=\s*['"]?([\w:.-]+)/si) { $tagName = "HTTP-equiv.$1"; } else { next; # no name } $tag = lc($tagName) or next; # tag value is in CONTENT attribute if ($attrs =~ /\bcontent\s*=\s*(['"])(.*?)\1/si or $attrs =~ /\bcontent\s*=\s*(['"]?)([\w:.-]+)/si) { $val = $2; } else { next unless length $val; } # isolate group name (separator is '.' in HTML, but ':' in ref 2) if ($tag =~ /^([\w-]+)[:.]([\w-]+)/) { ($grp, $tag) = ($1, $2); my $tagInfo = $et->GetTagInfo($tagTablePtr, $grp); if ($tagInfo and $$tagInfo{SubDirectory}) { $table = GetTagTable($tagInfo->{SubDirectory}->{TagTable}); } else { $tag = "$grp.$tag"; } } } elsif ($tag eq 'xml') { $et->VPrint(0, "Parsing XML\n"); # parse XML tags (quick-and-dirty) my $xml = $val; while ($xml =~ /<([\w-]+):([\w-]+)(\s.*?)?>([^<]*?)<\/\1:\2>/g) { ($grp, $tag, $val) = ($1, $2, $4); my $tagInfo = $et->GetTagInfo($tagTablePtr, $grp); next unless $tagInfo and $$tagInfo{SubDirectory}; $table = GetTagTable($tagInfo->{SubDirectory}->{TagTable}); unless ($$table{$tag}) { my $name = ucfirst $tag; $name =~ s/_x([0-9a-f]{4})_/chr(hex($1))/gie; # convert hex codes $name =~ s/\s(.)/\U$1/g; # capitalize all words in tag name $name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters (also hex code wide chars) AddTagToTable($table, $tag, { Name => $name }); $et->VPrint(0, " [adding $tag '$name']\n"); } $val = $et->Decode($val, $$et{HTMLCharset}) if $$et{HTMLCharset}; $et->HandleTag($table, $tag, UnescapeXML($val)); } next; } else { # the only other element we process is TITLE next unless $tag eq 'title'; } unless ($$table{$tag}) { my $name = $tagName; $name =~ s/\W+(\w)/\u$1/sg; my $info = { Name => $name, Groups => { 0 => 'HTML' } }; $info->{Groups}->{1} = ($grp eq 'http-equiv' ? 'HTTP-equiv' : "HTML-$grp") if $grp; AddTagToTable($table, $tag, $info); $et->VPrint(0, " [adding $tag '$tagName']\n"); } # recode if necessary $val = $et->Decode($val, $$et{HTMLCharset}) if $$et{HTMLCharset}; $val =~ s{\s*$/\s*}{ }sg; # replace linefeeds and indenting spaces $val = UnescapeHTML($val); # unescape HTML character references $et->HandleTag($table, $tag, $val); } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::HTML - Read HTML meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to extract meta information from HTML documents. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.w3.org/TR/html4/> =item L<http://www.daisy.org/publications/specifications/daisy_202.html> =item L<http://vancouver-webpages.com/META/metatags.detail.html> =item L<http://www.html-reference.com/META.htm> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/HTML Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/HtmlDump.pm�������������������������������������������������000644 �000765 �000024 �00000077342 12642461306 022015� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: HtmlDump.pm # # Description: Dump information in hex to HTML page # # Revisions: 12/05/2005 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::HtmlDump; use strict; use vars qw($VERSION); use Image::ExifTool; # only for FinishTiffDump() use Image::ExifTool::HTML qw(EscapeHTML); $VERSION = '1.33'; sub DumpTable($$$;$$$$$); sub Open($$$;@); sub Write($@); my ($bkgStart, $bkgEnd, @bkgSpan); my $htmlHeader1 = <<_END_PART_1_; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/1998/REC-html40-19980424/loose.dtd"> <html> <head> <title> _END_PART_1_ # Note: Don't change font-weight style because it can affect line height my $htmlHeader2 = <<_END_PART_2_; </title> <style type="text/css"> <!-- /* character style ID's */ .D { color: #000000 } /* default color */ .V { color: #ff0000 } /* duplicate block 1 */ .W { color: #004400 } /* normal block 1 */ .X { color: #ff4488 } /* duplicate block 2 */ .Y { color: #448844 } /* normal block 2 */ .U { color: #cc8844 } /* unused data block */ .H { color: #0000ff } /* highlighted tag name */ .F { color: #aa00dd } /* actual offset differs */ .M { text-decoration: underline } /* maker notes data */ .tt { /* tooltip text */ visibility: hidden; position: absolute; white-space: nowrap; top: 0; left: 0; font-family: Verdana, sans-serif; font-size: .7em; padding: 2px 4px; border: 1px solid gray; z-index: 3; } .tb { /* tooltip background */ visibility: hidden; position: absolute; background: #ffffdd; zoom: 1; -moz-opacity: 0.8; -khtml-opacity: 0.8; -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)'; filter: alpha(opacity=80); opacity: 0.8; z-index: 2; } /* table styles */ table.dump { border-top: 1px solid gray; border-bottom: 1px solid gray; } table.dump td { padding: .2em .3em } td.c2 { border-left: 1px solid gray; border-right: 1px solid gray; } pre { margin: 0 } table { font-size: .9em } body { color: black; background: white } --> </style> <script language="JavaScript" type="text/JavaScript"> <!-- Begin // tooltip positioning constants var TMAR = 4; // top/left margins var BMAR = 16; // bottom/right margins (scrollbars may overhang inner dimensions) var XOFF = 10; // x offset from cursor var YOFF = 40; // y offset var YMIN = 10; // minimum y offset var YTOP = 20; // y offset when above cursor // common variables var safari1 = navigator.userAgent.indexOf("Safari/312.6") >= 0; var ie6 = navigator.userAgent.toLowerCase().indexOf('msie 6') >= 0; var mspan = new Array; var hlist, tt, tb; function GetElementsByClass(classname, tagname) { var found = new Array(); var list = document.getElementsByTagName(tagname); var len = list.length; for (var i=0, j=0; i<len; ++i) { var classes = list[i].className.split(' '); for (var k=0; k<classes.length; ++k) { if (classes[k] == classname) { found[j++] = list[i]; break; } } } delete list; return found; } // move tooltip function move(e) { if (!tt) return; if (ie6 && (tt.style.top == '' || tt.style.top == 0) && (tt.style.left == '' || tt.style.left == 0)) { tt.style.width = tt.offsetWidth + 'px'; tt.style.height = tt.offsetHeight + 'px'; } var w, h; // browser inconsistencies make getting window size more complex than it should be, // and even then we don't know if it is smaller due to scrollbar width if (typeof(window.innerWidth) == 'number') { w = window.innerWidth; h = window.innerHeight; } else if (document.documentElement && document.documentElement.clientWidth) { w = document.documentElement.clientWidth; h = document.documentElement.clientHeight; } else { w = document.body.clientWidth; h = document.body.clientHeight; } var x = e.clientX + XOFF; var y = e.clientY + YOFF; if (safari1) { // patch for people still using OS X 10.3.9 x -= document.body.scrollLeft + document.documentElement.scrollLeft; y -= document.body.scrollTop + document.documentElement.scrollTop; } var mx = w - BMAR - tt.offsetWidth; var my = h - BMAR - tt.offsetHeight; if (y > my + YOFF - YMIN) y = e.clientY - YTOP - tt.offsetHeight; if (x > mx) x = mx; if (y > my) y = my; if (x < TMAR) x = TMAR; if (y < TMAR) y = TMAR; x += document.body.scrollLeft + document.documentElement.scrollLeft; y += document.body.scrollTop + document.documentElement.scrollTop; tb.style.width = tt.offsetWidth + 'px'; tb.style.height = tt.offsetHeight + 'px'; tt.style.top = tb.style.top = y + 'px'; tt.style.left = tb.style.left = x + 'px'; tt.style.visibility = tb.style.visibility = 'visible'; } // highlight/unhighlight text function high(e,on) { var targ; if (e.target) targ = e.target; else if (e.srcElement) targ = e.srcElement; if (targ.nodeType == 3) targ = targ.parentNode; // defeat Safari bug if (!targ.name) targ = targ.parentNode; // go up another level if necessary if (targ.name && document.getElementsByName) { // un-highlight current objects if (hlist) { for (var i=0; i<hlist.length; ++i) { hlist[i].style.background = 'transparent'; } hlist = null; } if (tt) { // hide old tooltip tt.style.visibility = tb.style.visibility = 'hidden'; tt = null; } if (on) { if (targ.name.substring(0,1) == 't') { // show our tooltip (ID is different than name to avoid confusing IE) tt = document.getElementById('p' + targ.name.substring(1)); if (tt) { tb = document.getElementById('tb'); move(e); } } // highlight anchor elements with the same name hlist = document.getElementsByName(targ.name); // use class name to highlight span elements if necessary for (var i=0; i<mspan.length; ++i) { if (mspan[i] != targ.name) continue; var slist = GetElementsByClass(targ.name, 'span'); // add elements from hlist collection to our array for (var j=0; j<hlist.length; ++j) { slist[slist.length] = hlist[j]; } hlist = slist; break; } for (var j=0; j<hlist.length; ++j) { hlist[j].style.background = '#ffcc99'; } } } } _END_PART_2_ my $htmlHeader3 = q[ // End ---> </script></head> <body><noscript><b class=V>--&gt; Enable JavaScript for active highlighting and information tool tips! </b></noscript> <table class=dump cellspacing=0 cellpadding=2> <tr><td valign='top'><pre>]; my $preMouse = q(<pre onmouseover="high(event,1)" onmouseout="high(event,0)" onmousemove="move(event)">); #------------------------------------------------------------------------------ # New - create new HtmlDump object # Inputs: 0) reference to HtmlDump object or HtmlDump class name sub new { local $_; my $that = shift; my $class = ref($that) || $that || 'Image::ExifTool::HtmlDump'; return bless { Block => {}, TipNum => 0 }, $class; } #------------------------------------------------------------------------------ # Add information to dump # Inputs: 0) HTML dump hash ref, 1) absolute offset in file, 2) data size, # 3) comment string, 4) tool tip (or SAME to use previous tip), # 5) bit flags (see below) # Bits: 0x01 - print at start of line # 0x02 - print red address # 0x04 - maker notes data ('M'-class span) # 0x08 - limit block length # 0x10 - allow double references # 0x100 - (reserved) # Notes: Block will be shown in 'unused' color if comment string begins with '[' sub Add($$$$;$) { my ($self, $start, $size, $msg, $tip, $flag) = @_; my $block = $$self{Block}; $$block{$start} or $$block{$start} = [ ]; my $htip; if ($tip and $tip eq 'SAME') { $htip = ''; } else { # use message as first line of tip, and make bold unless in brackets $htip = ($msg =~ /^[[(]/) ? $msg : "<b>$msg</b>"; if (defined $tip) { ($tip = EscapeHTML($tip)) =~ s/\n/<br>/g; # HTML-ize tooltip text $htip .= '<br>' . $tip; } # add size if not already done $htip .= "<br>($size bytes)" unless $htip =~ /<br>Size:/; ++$self->{TipNum}; } push @{$$block{$start}}, [ $size, $msg, $htip, $flag, $self->{TipNum} ]; } #------------------------------------------------------------------------------ # Print dump information to HTML page # Inputs: 0) Dump information hash reference, 1) source file RAF reference, # 2) data pointer, 3) data position, 4) output file or scalar reference, # 5) limit level (1-3), 6) title # Returns: non-zero if useful output was generated, # or -1 on error loading data and "ERROR" is set to offending data name # Note: The "Error" member may be set externally to print a specific error # message instead of doing the dump. sub Print($$;$$$$$) { local $_; my ($self, $raf, $dataPt, $dataPos, $outfile, $level, $title) = @_; my ($i, $buff, $rtnVal, $limit, $err); my $block = $$self{Block}; $dataPos = 0 unless $dataPos; $outfile = \*STDOUT unless ref $outfile; $title = 'HtmlDump' unless $title; $level or $level = 0; my $tell = $raf->Tell(); my $pos = 0; my $dataEnd = $dataPos + ($dataPt ? length($$dataPt) : 0); # initialize member variables $$self{Open} = []; $$self{Closed} = []; $$self{TipList} = []; $$self{MSpanList} = []; $$self{Cols} = [ '', '', '', '' ]; # text columns # set dump size limits (limits are 4x smaller if bit 0x08 set in flags) if ($level <= 1) { $limit = 1024; } elsif ($level <= 2) { $limit = 16384; } else { $limit = 256 * 1024 * 1024; # never dump bigger than 256 MB } $$self{Limit} = $limit; # pre-initialize open/closed hashes for all columns for ($i=0; $i<4; ++$i) { $self->{Open}->[$i] = { ID => [ ], Element => { } }; $self->{Closed}->[$i] = { ID => [ ], Element => { } }; } $bkgStart = $bkgEnd = 0; undef @bkgSpan; my $index = 0; # initialize tooltip index my (@names, $wasUnused, @starts); # only do dump if we didn't have a serious error @starts = sort { $a <=> $b } keys %$block unless $$self{Error}; for ($i=0; $i<=@starts; ++$i) { my $start = $starts[$i]; my $parmList; if (defined $start) { $parmList = $$block{$start}; } elsif ($bkgEnd and $pos < $bkgEnd and not defined $wasUnused) { $start = $bkgEnd; # finish last bkg block } else { last; } my $len = $start - $pos; if ($len > 0 and not $wasUnused) { # we have a unused bytes before this data block --$i; # dump the data block next time around # split unused data into 2 blocks if it spans end of a bkg block my ($nextBkgEnd, $bkg); if (not defined $wasUnused and $bkgEnd) { foreach $bkg (@bkgSpan) { next if $pos >= $$bkg{End} + $dataPos or $pos + $len <= $$bkg{End} + $dataPos; $nextBkgEnd = $$bkg{End} unless $nextBkgEnd and $nextBkgEnd < $$bkg{End}; } } if ($nextBkgEnd) { $start = $pos; $len = $nextBkgEnd + $dataPos - $pos; $wasUnused = 0; } else { $start = $pos; # dump the unused bytes now $wasUnused = 1; # avoid re-dumping unused bytes if we get a read error } my $str = ($len > 1) ? "unused $len bytes" : 'pad byte'; $parmList = [ [ $len, "[$str]", undef, 0x108 ] ]; } else { undef $wasUnused; } my $parms; foreach $parms (@$parmList) { my ($len, $msg, $tip, $flag, $tipNum) = @$parms; next unless $len > 0; $flag = 0 unless defined $flag; # generate same name for all blocks indexed by this tooltip my $name; $name = $names[$tipNum] if defined $tipNum; my $idx = $index; if ($name) { # get index from existing ID $idx = substr($name, 1); } else { $name = "t$index"; $names[$tipNum] = $name if defined $tipNum; ++$index; } if ($flag & 0x14) { my %bkg = ( Class => $flag & 0x04 ? "$name M" : $name, Start => $start - $dataPos, End => $start - $dataPos + $len, ); push @bkgSpan, \%bkg; $bkgStart = $bkg{Start} unless $bkgStart and $bkgStart < $bkg{Start}; $bkgEnd = $bkg{End} unless $bkgEnd and $bkgEnd > $bkg{End}; push @{$self->{MSpanList}}, $name; next; } # loop until we read the value properly my ($end, $try); for ($try=0; $try<2; ++$try) { $end = $start + $len; # only load as much of the block as we are going to dump # (read 32 more bytes than necessary just in case there # is only one skipped line that we decide to print) my $size = ($len > $limit + 32) ? $limit / 2 + 16 : $len; if ($start >= $dataPos and $end <= $dataEnd) { $buff = substr($$dataPt, $start-$dataPos, $size); if ($len != $size) { $buff .= substr($$dataPt, $start-$dataPos+$len-$size, $size); } } else { $buff = ''; if ($raf->Seek($start, 0) and $raf->Read($buff, $size) == $size) { # read end of block if ($len != $size) { my $buf2 = ''; unless ($raf->Seek($start+$len-$size, 0) and $raf->Read($buf2, $size) == $size) { $err = $msg; # reset $len to the actual length of available data $raf->Seek(0, 2); $len = $raf->Tell() - $start; $tip .= "<br>Error: Only $len bytes available!" if $tip; next; } $buff .= $buf2; undef $buf2; } } else { $err = $msg; $len = length $buff; $tip .= "<br>Error: Only $len bytes available!" if $tip; } } last; } $tip and $self->{TipList}->[$idx] = $tip; next unless length $buff; # set flag to continue this line if next block is contiguous if ($i+1 < @starts and $parms eq $$parmList[-1] and ($end == $starts[$i+1] or ($end < $starts[$i+1] and $end >= $pos))) { my $nextFlag = $block->{$starts[$i+1]}->[0]->[3] || 0; $flag |= 0x100 unless $flag & 0x01 or $nextFlag & 0x01; } $self->DumpTable($start-$dataPos, \$buff, $msg, $name, $flag, $len, $pos-$dataPos); undef $buff; $pos = $end if $pos < $end; } } $self->Open('',''); # close all open elements $raf->Seek($tell,0); # write output HTML file Write($outfile, $htmlHeader1, $title); if ($self->{Cols}->[0]) { Write($outfile, $htmlHeader2); my $mspan = \@{$$self{MSpanList}}; for ($i=0; $i<@$mspan; ++$i) { Write($outfile, qq(mspan[$i] = "$$mspan[$i]";\n)); } Write($outfile, $htmlHeader3, $self->{Cols}->[0]); Write($outfile, '</pre></td><td valign="top">', $preMouse, $self->{Cols}->[1]); Write($outfile, '</pre></td><td class=c2 valign="top">', $preMouse, $self->{Cols}->[2]); Write($outfile, '</pre></td><td valign="top">', $preMouse, $self->{Cols}->[3]); Write($outfile, "</pre></td></tr></table>\n<div id=tb class=tb> </div>\n"); my $tips = \@{$$self{TipList}}; for ($i=0; $i<@$tips; ++$i) { my $tip = $$tips[$i]; Write($outfile, "<div id=p$i class=tt>$tip</div>\n") if defined $tip; } delete $$self{TipList}; $rtnVal = 1; } else { my $err = $$self{Error} || 'No EXIF or TIFF information found in image'; Write($outfile, "$title</title></head><body>\n$err\n"); $rtnVal = 0; } Write($outfile, "</body></html>\n"); for ($i=0; $i<4; ++$i) { $self->{Cols}->[$i] = ''; # free memory } if ($err) { $err =~ tr/()//d; $$self{ERROR} = $err; return -1; } return $rtnVal; } #------------------------------------------------------------------------------ # Open or close a specified html element # Inputs: 0) HtmlDump object ref, 1) element id, 2) element string, # 3-N) list of column numbers (empty for all columns) # - element id may be '' to close all elements # - element string may be '' to close element by ID (or 0 to close without reopening) # - element id and string may both be 1 to reopen temporarily closed elements sub Open($$$;@) { my ($self, $id, $element, @colNums) = @_; # loop through specified columns @colNums or @colNums = (0 .. $#{$self->{Open}}); my $col; foreach $col (@colNums) { # get information about open elements in this column my $opHash = $self->{Open}->[$col]; my $opElem = $$opHash{Element}; if ($element) { # next if already open next if $$opElem{$id} and $$opElem{$id} eq $element; } elsif ($id and not $$opElem{$id}) { # next if already closed and nothing to reopen next unless $element eq '' and @{$self->{Closed}->[$col]->{ID}}; } my $opID = $$opHash{ID}; my $clHash = $self->{Closed}->[$col]; my $clID = $$clHash{ID}; my $clElem = $$clHash{Element}; # get reference to output column list (use temp list if available) my $cols = $$self{TmpCols} || $$self{Cols}; # close everything down to this element if necessary if ($$opElem{$id} or not $id) { while (@$opID) { my $tid = pop @$opID; my $e = $$opElem{$tid}; $e =~ s/^<(\S+).*/<\/$1>/s; $$cols[$col] .= $e; if ($id eq $tid or not $id) { delete $$opElem{$tid}; last if $id; next; } # add this to the temporarily closed list # (because we really didn't want to close it) push @$clID, $tid; $$clElem{$tid} = $$opElem{$tid}; delete $$opElem{$tid}; } unless ($id) { # forget all temporarily closed elements $clID = $$clHash{ID} = [ ]; $clElem = $$clHash{Element} = { }; } } elsif ($$clElem{$id}) { # delete from the list of temporarily closed elements delete $$clElem{$id}; @$clID = grep !/^$id$/, @$clID; } next if $element eq '0'; # 0 = don't reopen temporarily closed elements # re-open temporarily closed elements while (@$clID) { my $tid = pop @$clID; $$cols[$col] .= $$clElem{$tid}; push @$opID, $tid; $$opElem{$tid} = $$clElem{$tid}; delete $$clElem{$tid}; } # open specified element if ($element and $element ne '1') { $$cols[$col] .= $element; push @$opID, $id; $$opElem{$id} = $element; } } } #------------------------------------------------------------------------------ # Dump a block of data in HTML table form # Inputs: 0) HtmlDump object ref, 1) data position, 2) block pointer, # 3) message, 4) object name, 5) flag, 6) full block length (actual # data may be shorter), 7) data end position sub DumpTable($$$;$$$$$) { my ($self, $pos, $blockPt, $msg, $name, $flag, $len, $endPos) = @_; $len = length $$blockPt unless defined $len; $endPos = 0 unless $endPos; my ($f0, $dblRef, $id); my $skipped = 0; if (($endPos and $pos < $endPos) or $flag & 0x02) { # display double-reference addresses in red $f0 = "<span class=V>"; $dblRef = 1 if $endPos and $pos < $endPos; } else { $f0 = ''; } my @c = ('','','',''); $$self{TmpCols} = \@c; if ($name) { if ($msg and $msg =~ /^\[/) { $id = 'U'; } else { if ($$self{A}) { $id = 'X'; $$self{A} = 0; } else { $id = 'V'; $$self{A} = 1; } ++$id unless $dblRef; } $name = "<a name=$name class=$id>"; $msg and $msg = "$name$msg</a>"; } else { $name = ''; } # use base-relative offsets from now on my $cols = 0; my $p = $pos; if ($$self{Cont}) { $cols = $pos & 0x0f; $c[1] .= ($cols == 8) ? ' ' : ' '; } else { my $addr = $pos < 0 ? sprintf("-%.4x",-$pos) : sprintf("%5.4x",$pos); $self->Open('fgd', $f0, 0); $self->Open('fgd', '', 3); $c[0] .= "$addr"; $p -= $pos & 0x0f unless $flag & 0x01; if ($p < $pos) { $self->Open('bkg', '', 1, 2); # don't underline white space $cols = $pos - $p; my $n = 3 * $cols; ++$n if $cols > 7; $c[1] .= ' ' x $n; $c[2] .= ' ' x $cols; $p = $pos; } } # loop through each column of hex numbers for (;;) { my (@spanClass, @spanCont, $spanClose, $bkg); if ($p >= $bkgStart and $p < $bkgEnd) { foreach $bkg (@bkgSpan) { next unless $p >= $$bkg{Start} and $p < $$bkg{End}; push @spanClass, $$bkg{Class}; if ($p + 1 == $$bkg{End}) { $spanClose = 1; } else { push @spanCont, $$bkg{Class}; # this span continues } } $self->Open('bkg', @spanClass ? "<span class='@spanClass'>" : '', 1, 2); } else { $self->Open('bkg', '', 1, 2); } $self->Open('a', $name, 1, 2); my $ch = substr($$blockPt,$p-$pos-$skipped,1); $c[1] .= sprintf("%.2x", ord($ch)); # make the character HTML-friendly $ch =~ tr/\x00-\x1f\x7f-\xff/./; $ch =~ s/&/&amp;/g; $ch =~ s/>/&gt;/g; $ch =~ s/</&lt;/g; $c[2] .= $ch; ++$p; ++$cols; # close necessary elements if ($spanClose) { my $spanCont = @spanCont ? "<span class='@spanCont'>" : ''; # close without reopening if closing anchor later my $arg = ($p - $pos >= $len) ? 0 : $spanCont; $self->Open('bkg', $arg, 1, 2); } if ($dblRef and $p >= $endPos) { $dblRef = 0; ++$id; $name =~ s/class=\w\b/class=$id/; $f0 = ''; $self->Open('fgd', $f0, 0); } if ($p - $pos >= $len) { $self->Open('a', '', 1, 2); # close our anchor last; } if ($cols < 16) { $c[1] .= ($cols == 8 ? ' ' : ' '); next; } elsif ($flag & 0x01 and $cols < $len) { $c[1] .= ' '; next; # put it all on one line } unless ($$self{Msg}) { $c[3] .= $msg; $msg = ''; } $_ .= "\n" foreach @c; # add CR to all lines $$self{Msg} = 0; # limit data length if specified if ($$self{Limit}) { my $div = ($flag & 0x08) ? 4 : 1; my $lim = $$self{Limit} / (2 * $div) - 16; if ($p - $pos > $lim and $len - $p + $pos > $lim) { my $n = ($len - $p + $pos - $lim) & ~0x0f; if ($n > 16) { # (no use just cutting out one line) $self->Open('bkg', '', 1, 2); # no underline my $note = sprintf "[snip %d lines]", $n / 16; $note = (' ' x (24-length($note)/2)) . $note; $c[0] .= " ...\n"; $c[1] .= $note . (' ' x (48-length($note))) . "\n"; $c[2] .= " [snip] \n"; $c[3] .= "\n"; $p += $n; $skipped += $len - length $$blockPt; } } } $c[0] .= ($p < 0 ? sprintf("-%.4x",-$p) : sprintf("%5.4x",$p)); $cols = 0; } if ($msg) { $msg = " $msg" if $$self{Msg}; $c[3] .= $msg; } if ($flag & 0x100 and $cols < 16) { # continue on same line? $$self{Cont} = 1; $$self{Msg} = 1 if $msg; } else { $_ .= "\n" foreach @c; $$self{Msg} = 0; $$self{Cont} = 0; } # add temporary column data to our real columns my $i; for ($i=0; $i<4; ++$i) { $self->{Cols}->[$i] .= $c[$i]; } delete $$self{TmpCols}; } #------------------------------------------------------------------------------ # Finish dumping of TIFF image data # Inputs: 0) HtmlDump object ref, 1) ExifTool object ref, 2) length of file # (this really belongs in Image::ExifTool::Exif, but is placed here so it # is only compiled when needed) sub FinishTiffDump($$$) { my ($self, $et, $size) = @_; my ($tag, $key, $start, $blockInfo, $i); # list of all indirectly referenced TIFF data tags my %offsetPair = ( StripOffsets => 'StripByteCounts', TileOffsets => 'TileByteCounts', FreeOffsets => 'FreeByteCounts', ThumbnailOffset => 'ThumbnailLength', PreviewImageStart => 'PreviewImageLength', JpgFromRawStart => 'JpgFromRawLength', OtherImageStart => 'OtherImageLength', ImageOffset => 'ImageByteCount', AlphaOffset => 'AlphaByteCount', MPImageStart => 'MPImageLength', IDCPreviewStart => 'IDCPreviewLength', ); # add TIFF data to html dump foreach $tag (keys %offsetPair) { my $info = $et->GetInfo($tag); next unless %$info; # Panasonic hack: StripOffsets is not valid for Panasonic RW2 files, # and StripRowBytes is not valid for some RAW images if ($tag eq 'StripOffsets' and $$et{TAG_INFO}{$tag}{PanasonicHack}) { # use RawDataOffset instead if available since it is valid in RW2 my $info2 = $et->GetInfo('RawDataOffset'); $info2 = $info unless %$info2; my @keys = keys %$info2; my $offset = $$info2{$keys[0]}; my $raf = $$et{RAF}; # ignore StripByteCounts and assume raw data runs to the end of file if (@keys == 1 and $offset =~ /^\d+$/ and $raf) { my $pos = $raf->Tell(); $raf->Seek(0, 2); # seek to end my $len = $raf->Tell() - $offset; $raf->Seek($pos, 0); if ($len > 0) { $self->Add($offset, $len, "(Panasonic raw data)", "Size: $len bytes", 0x08); next; } } } # loop through all offsets tags foreach $key (keys %$info) { my $name = Image::ExifTool::GetTagName($key); my $grp1 = $et->GetGroup($key, 1); my $info2 = $et->GetInfo($offsetPair{$tag}, { Group1 => $grp1 }); my $key2 = $offsetPair{$tag}; $key2 .= $1 if $key =~ /( .*)/; # use same instance number as $tag next unless $$info2{$key2}; my $offsets = $$info{$key}; my $byteCounts = $$info2{$key2}; # ignore primary MPImage (this is the whole JPEG) next if $tag eq 'MPImageStart' and $offsets eq '0'; # (long lists may be SCALAR references) my @offsets = split ' ', (ref $offsets ? $$offsets : $offsets); my @byteCounts = split ' ', (ref $byteCounts ? $$byteCounts : $byteCounts); my $num = scalar @offsets; my $li = 0; my $padBytes = 0; for ($i=0; @offsets and @byteCounts; ++$i) { my $offset = shift @offsets; my $byteCount = shift @byteCounts; my $end = $offset + $byteCount; if (@offsets and @byteCounts) { # show data as contiguous if only normal pad bytes between blocks if ($end & 0x01 and $end + 1 == $offsets[0]) { $end += 1; ++$padBytes; # count them } if ($end == $offsets[0]) { # combine these two blocks $byteCounts[0] += $offsets[0] - $offset; $offsets[0] = $offset; next; } } my $msg = $et->GetGroup($key, 1) . ':' . $tag; $msg =~ s/(Offsets?|Start)$/ /; if ($num > 1) { $msg .= "$li-" if $li != $i; $msg .= "$i "; $li = $i + 1; } $msg .= "data"; my $tip = "Size: $byteCount bytes"; $tip .= ", incl. $padBytes pad bytes" if $padBytes; $self->Add($offset, $byteCount, "($msg)", $tip, 0x08); } } } # find offset of last dumped information, and dump any unknown trailer my $last = 0; my $block = $$self{Block}; foreach $start (keys %$block) { foreach $blockInfo (@{$$block{$start}}) { my $end = $start + $$blockInfo[0]; $last = $end if $last < $end; } } my $diff = $size - $last; if ($diff > 0 and ($last or $et->Options('Unknown'))) { if ($diff > 1 or $size & 0x01) { $self->Add($last, $diff, "[unknown data]", "Size: $diff bytes", 0x08); } else { $self->Add($last, $diff, "[trailing pad byte]", undef, 0x08); } } } #------------------------------------------------------------------------------ # utility routine to write to file or memory # Inputs: 0) file or scalar reference, 1-N) list of stuff to write # Returns: true on success sub Write($@) { my $outfile = shift; if (UNIVERSAL::isa($outfile,'GLOB')) { return print $outfile @_; } elsif (ref $outfile eq 'SCALAR') { $$outfile .= join('', @_); return 1; } return 0; } 1; # end __END__ =head1 NAME Image::ExifTool::HtmlDump - Dump information in hex to HTML page =head1 SYNOPSIS use Image::ExifTool::HtmlDump; my $dump = new Image::ExifTool::HtmlDump; $dump->Add($start, $size, $comment); $dump->Print($dumpInfo, $raf, $dataPt, $dataPos, $outfile); =head1 DESCRIPTION This module contains code used to generate an HTML-based hex dump of information for debugging purposes. This is code is called when the ExifTool 'HtmlDump' option is used. Currently, only EXIF/TIFF and JPEG information is dumped. =head1 BUGS Due to a memory allocation bug in ActivePerl 5.8.x for Windows, this code may run extremely slowly when processing large files with this version of Perl. An HTML 4 compliant browser is needed to properly display the generated HTML page. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/ICC_Profile.pm����������������������������������������������000644 �000765 �000024 �00000101302 12642461306 022321� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: ICC_Profile.pm # # Description: Read ICC Profile meta information # # Revisions: 11/16/2004 - P. Harvey Created # # References: 1) http://www.color.org/icc_specs2.html (ICC.1:2003-09) # 2) http://www.color.org/icc_specs2.html (ICC.1:2001-04) # 3) http://developer.apple.com/documentation/GraphicsImaging/Reference/ColorSync_Manager/ColorSync_Manager.pdf # 4) http://www.color.org/privatetag2007-01.pdf # 5) http://www.color.org/icc_specs2.xalter (approved revisions, 2010-07-16) # # Notes: The ICC profile information is different: the format of each # tag is embedded in the information instead of in the directory # structure. This makes things a bit more complex because I need # an extra level of logic to decode the variable-format tags. #------------------------------------------------------------------------------ package Image::ExifTool::ICC_Profile; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.30'; sub ProcessICC($$); sub ProcessICC_Profile($$$); sub WriteICC_Profile($$;$); sub ProcessMetadata($$$); sub ValidateICC($); # illuminant type definitions my %illuminantType = ( 1 => 'D50', 2 => 'D65', 3 => 'D93', 4 => 'F2', 5 => 'D55', 6 => 'A', 7 => 'Equi-Power (E)', 8 => 'F8', ); my %profileClass = ( scnr => 'Input Device Profile', mntr => 'Display Device Profile', prtr => 'Output Device Profile', 'link'=> 'DeviceLink Profile', spac => 'ColorSpace Conversion Profile', abst => 'Abstract Profile', nmcl => 'NamedColor Profile', nkpf => 'Nikon Input Device Profile (NON-STANDARD!)', # (written by Nikon utilities) ); # ICC_Profile tag table %Image::ExifTool::ICC_Profile::Main = ( GROUPS => { 2 => 'Image' }, PROCESS_PROC => \&ProcessICC_Profile, WRITE_PROC => \&WriteICC_Profile, NOTES => q{ ICC profile information is used in many different file types including JPEG, TIFF, PDF, PostScript, Photoshop, PNG, MIFF, PICT, QuickTime, XCF and some RAW formats. While the tags listed below are not individually writable, the entire profile itself can be accessed via the extra 'ICC_Profile' tag, but this tag is neither extracted nor written unless specified explicitly. See L<http://www.color.org/icc_specs2.xalter> for the official ICC specification. }, A2B0 => 'AToB0', A2B1 => 'AToB1', A2B2 => 'AToB2', bXYZ => 'BlueMatrixColumn', # (called BlueColorant in ref 2) bTRC => { Name => 'BlueTRC', Description => 'Blue Tone Reproduction Curve', }, B2A0 => 'BToA0', B2A1 => 'BToA1', B2A2 => 'BToA2', calt => { Name => 'CalibrationDateTime', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, targ => { Name => 'CharTarget', ValueConv => 'length $val > 128 ? \$val : $val', }, chad => 'ChromaticAdaptation', chrm => { Name => 'Chromaticity', Groups => { 1 => 'ICC_Profile#' }, #(just for the group list) SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Chromaticity', Validate => '$type eq "chrm"', }, }, clro => 'ColorantOrder', clrt => { Name => 'ColorantTable', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::ColorantTable', Validate => '$type eq "clrt"', }, }, clot => { # new in version 4.2 Name => 'ColorantTableOut', Binary => 1, }, cprt => { Name => 'ProfileCopyright', ValueConv => '$val=~s/\0.*//; $val', # may be null terminated }, crdi => 'CRDInfo', #2 dmnd => { Name => 'DeviceMfgDesc', Groups => { 2 => 'Camera' }, }, dmdd => { Name => 'DeviceModelDesc', Groups => { 2 => 'Camera' }, }, devs => { Name => 'DeviceSettings', #2 Groups => { 2 => 'Camera' }, }, gamt => 'Gamut', kTRC => { Name => 'GrayTRC', Description => 'Gray Tone Reproduction Curve', }, gXYZ => 'GreenMatrixColumn', # (called GreenColorant in ref 2) gTRC => { Name => 'GreenTRC', Description => 'Green Tone Reproduction Curve', }, lumi => 'Luminance', meas => { Name => 'Measurement', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Measurement', Validate => '$type eq "meas"', }, }, bkpt => 'MediaBlackPoint', wtpt => 'MediaWhitePoint', ncol => 'NamedColor', #2 ncl2 => 'NamedColor2', resp => 'OutputResponse', pre0 => 'Preview0', pre1 => 'Preview1', pre2 => 'Preview2', desc => 'ProfileDescription', pseq => 'ProfileSequenceDesc', psd0 => 'PostScript2CRD0', #2 psd1 => 'PostScript2CRD1', #2 psd2 => 'PostScript2CRD2', #2 ps2s => 'PostScript2CSA', #2 ps2i => 'PS2RenderingIntent', #2 rXYZ => 'RedMatrixColumn', # (called RedColorant in ref 2) rTRC => { Name => 'RedTRC', Description => 'Red Tone Reproduction Curve', }, scrd => 'ScreeningDesc', scrn => 'Screening', 'bfd '=> { Name => 'UCRBG', Description => 'Under Color Removal and Black Gen.', }, tech => { Name => 'Technology', PrintConv => { fscn => 'Film Scanner', dcam => 'Digital Camera', rscn => 'Reflective Scanner', ijet => 'Ink Jet Printer', twax => 'Thermal Wax Printer', epho => 'Electrophotographic Printer', esta => 'Electrostatic Printer', dsub => 'Dye Sublimation Printer', rpho => 'Photographic Paper Printer', fprn => 'Film Writer', vidm => 'Video Monitor', vidc => 'Video Camera', pjtv => 'Projection Television', 'CRT '=> 'Cathode Ray Tube Display', 'PMD '=> 'Passive Matrix Display', 'AMD '=> 'Active Matrix Display', KPCD => 'Photo CD', imgs => 'Photo Image Setter', grav => 'Gravure', offs => 'Offset Lithography', silk => 'Silkscreen', flex => 'Flexography', mpfs => 'Motion Picture Film Scanner', #5 mpfr => 'Motion Picture Film Recorder', #5 dmpc => 'Digital Motion Picture Camera', #5 dcpj => 'Digital Cinema Projector', #5 }, }, vued => 'ViewingCondDesc', view => { Name => 'ViewingConditions', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::ViewingConditions', Validate => '$type eq "view"', }, }, ciis => 'ColorimetricIntentImageState', #5 scoe => 'SceneColorimetryEstimates', #5 sape => 'SceneAppearanceEstimates', #5 fpce => 'FocalPlaneColorimetryEstimates', #5 rhoc => 'ReflectionHardcopyOrigColorimetry', #5 rpoc => 'ReflectionPrintOutputColorimetry', #5 psid => { #5 Name => 'ProfileSequenceIdentifier', Binary => 1, }, B2D0 => { Name => 'BToD0', Binary => 1 }, #5 B2D1 => { Name => 'BToD1', Binary => 1 }, #5 B2D2 => { Name => 'BToD2', Binary => 1 }, #5 B2D3 => { Name => 'BToD3', Binary => 1 }, #5 D2B0 => { Name => 'DToB0', Binary => 1 }, #5 D2B1 => { Name => 'DToB1', Binary => 1 }, #5 D2B2 => { Name => 'DToB2', Binary => 1 }, #5 D2B3 => { Name => 'DToB3', Binary => 1 }, #5 rig0 => { #5 Name => 'PerceptualRenderingIntentGamut', PrintConv => { prmg => 'Perceptual Reference Medium Gamut', }, }, rig2 => { #5 Name => 'SaturationRenderingIntentGamut', PrintConv => { prmg => 'Perceptual Reference Medium Gamut', }, }, meta => { #5 (EVENTUALLY DECODE THIS ONCE WE HAVE A SAMPLE!!) Name => 'Metadata', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Metadata', Validate => '$type eq "meta"', }, }, # ColorSync custom tags (ref 3) psvm => 'PS2CRDVMSize', vcgt => 'VideoCardGamma', mmod => 'MakeAndModel', dscm => 'ProfileDescriptionML', ndin => 'NativeDisplayInfo', # Microsoft custom tags (ref http://msdn2.microsoft.com/en-us/library/ms536870.aspx) MS00 => 'WCSProfiles', # the following entry represents the ICC profile header, and doesn't # exist as a tag in the directory. It is only in this table to provide # a link so ExifTool can locate the header tags Header => { Name => 'ProfileHeader', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Header', }, }, ); # ICC profile header definition %Image::ExifTool::ICC_Profile::Header = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'ICC_Profile', 1 => 'ICC-header', 2 => 'Image' }, 4 => { Name => 'ProfileCMMType', Format => 'string[4]', }, 8 => { Name => 'ProfileVersion', Format => 'int16s', PrintConv => '($val >> 8).".".(($val & 0xf0)>>4).".".($val & 0x0f)', }, 12 => { Name => 'ProfileClass', Format => 'string[4]', PrintConv => \%profileClass, }, 16 => { Name => 'ColorSpaceData', Format => 'string[4]', }, 20 => { Name => 'ProfileConnectionSpace', Format => 'string[4]', }, 24 => { Name => 'ProfileDateTime', Groups => { 2 => 'Time' }, Format => 'int16u[6]', ValueConv => 'sprintf("%.4d:%.2d:%.2d %.2d:%.2d:%.2d",split(" ",$val));', PrintConv => '$self->ConvertDateTime($val)', }, 36 => { Name => 'ProfileFileSignature', Format => 'string[4]', }, 40 => { Name => 'PrimaryPlatform', Format => 'string[4]', PrintConv => { 'APPL' => 'Apple Computer Inc.', 'MSFT' => 'Microsoft Corporation', 'SGI ' => 'Silicon Graphics Inc.', 'SUNW' => 'Sun Microsystems Inc.', 'TGNT' => 'Taligent Inc.', }, }, 44 => { Name => 'CMMFlags', Format => 'int32u', PrintConv => q[ ($val & 0x01 ? "Embedded, " : "Not Embedded, ") . ($val & 0x02 ? "Not Independent" : "Independent") ], }, 48 => { Name => 'DeviceManufacturer', Format => 'string[4]', # KODA = Kodak }, 52 => { Name => 'DeviceModel', Format => 'string[4]', # ROMM = Refrence Output Medium Metric }, 56 => { Name => 'DeviceAttributes', Format => 'int32u[2]', PrintConv => q[ my @v = split ' ', $val; ($v[1] & 0x01 ? "Transparency, " : "Reflective, ") . ($v[1] & 0x02 ? "Matte, " : "Glossy, ") . ($v[1] & 0x04 ? "Negative, " : "Positive, ") . ($v[1] & 0x08 ? "B&W" : "Color"); ], }, 64 => { Name => 'RenderingIntent', Format => 'int32u', PrintConv => { 0 => 'Perceptual', 1 => 'Media-Relative Colorimetric', 2 => 'Saturation', 3 => 'ICC-Absolute Colorimetric', }, }, 68 => { Name => 'ConnectionSpaceIlluminant', Format => 'fixed32s[3]', # xyz }, 80 => { Name => 'ProfileCreator', Format => 'string[4]', # KODA = Kodak }, 84 => { Name => 'ProfileID', Format => 'int8u[16]', PrintConv => 'Image::ExifTool::ICC_Profile::HexID($val)', }, ); # viewingConditionsType (view) definition %Image::ExifTool::ICC_Profile::ViewingConditions = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'ICC_Profile', 1 => 'ICC-view', 2 => 'Image' }, 8 => { Name => 'ViewingCondIlluminant', Format => 'fixed32s[3]', # xyz }, 20 => { Name => 'ViewingCondSurround', Format => 'fixed32s[3]', # xyz }, 32 => { Name => 'ViewingCondIlluminantType', Format => 'int32u', PrintConv => \%illuminantType, }, ); # measurementType (meas) definition %Image::ExifTool::ICC_Profile::Measurement = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'ICC_Profile', 1 => 'ICC-meas', 2 => 'Image' }, 8 => { Name => 'MeasurementObserver', Format => 'int32u', PrintConv => { 1 => 'CIE 1931', 2 => 'CIE 1964', }, }, 12 => { Name => 'MeasurementBacking', Format => 'fixed32s[3]', # xyz }, 24 => { Name => 'MeasurementGeometry', Format => 'int32u', PrintConv => { 0 => 'Unknown', 1 => '0/45 or 45/0', 2 => '0/d or d/0', }, }, 28 => { Name => 'MeasurementFlare', Format => 'fixed32u', PrintConv => '$val*100 . "%"', # change into a percent }, 32 => { Name => 'MeasurementIlluminant', Format => 'int32u', PrintConv => \%illuminantType, }, ); # chromaticity (chrm) definition %Image::ExifTool::ICC_Profile::Chromaticity = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'ICC_Profile', 1 => 'ICC-chrm', 2 => 'Image' }, 8 => { Name => 'ChromaticityChannels', Format => 'int16u', }, 10 => { Name => 'ChromaticityColorant', Format => 'int16u', PrintConv => { 1 => 'ITU-R BT.709', 2 => 'SMPTE RP145-1994', 3 => 'EBU Tech.3213-E', 4 => 'P22', }, }, # include definitions for 4 channels -- if there are # fewer then the ProcessBinaryData logic won't print them. # If there are more, oh well. 12 => { Name => 'ChromaticityChannel1', Format => 'fixed32u[2]', }, 20 => { Name => 'ChromaticityChannel2', Format => 'fixed32u[2]', }, 28 => { Name => 'ChromaticityChannel3', Format => 'fixed32u[2]', }, 36 => { Name => 'ChromaticityChannel4', Format => 'fixed32u[2]', }, ); # colorantTable (clrt) definition %Image::ExifTool::ICC_Profile::ColorantTable = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'ICC_Profile', 1 => 'ICC-clrt', 2 => 'Image' }, 8 => { Name => 'ColorantCount', Format => 'int32u', }, # include definitions for 3 colorants -- if there are # fewer then the ProcessBinaryData logic won't print them. # If there are more, oh well. 12 => { Name => 'Colorant1Name', Format => 'string[32]', }, 44 => { Name => 'Colorant1Coordinates', Format => 'int16u[3]', }, 50 => { Name => 'Colorant2Name', Format => 'string[32]', }, 82 => { Name => 'Colorant2Coordinates', Format => 'int16u[3]', }, 88 => { Name => 'Colorant3Name', Format => 'string[32]', }, 120 => { Name => 'Colorant3Coordinates', Format => 'int16u[3]', }, ); # metadata (meta) tags %Image::ExifTool::ICC_Profile::Metadata = ( PROCESS_PROC => \&ProcessMetadata, GROUPS => { 0 => 'ICC_Profile', 1 => 'ICC-meta', 2 => 'Image' }, VARS => { NO_ID => 1 }, NOTES => q{ Only these few tags have been pre-defined, but ExifTool will extract any Metadata tags that exist. }, ManufacturerName => { }, MediaColor => { }, MediaWeight => { }, ); #------------------------------------------------------------------------------ # print ICC Profile ID in hex # Inputs: 1) string of numbers # Returns: string of hex digits sub HexID($) { my $val = shift; my @vals = split(' ', $val); # return a simple zero if no MD5 done return 0 unless grep(!/^0/, @vals); $val = ''; foreach (@vals) { $val .= sprintf("%.2x",$_); } return $val; } #------------------------------------------------------------------------------ # get formatted value from ICC tag (which has the type embedded) # Inputs: 0) data reference, 1) offset to tag data, 2) tag data size # Returns: Formatted value or undefined if format not supported # Notes: The following types are handled by BinaryTables: # chromaticityType, colorantTableType, measurementType, viewingConditionsType # The following types are currently not handled (most are large tables): # curveType, lut16Type, lut8Type, lutAtoBType, lutBtoAType, namedColor2Type, # parametricCurveType, profileSeqDescType, responseCurveSet16Type # The multiLocalizedUnicodeType must be handled by the calling routine. sub FormatICCTag($$$) { my ($dataPt, $offset, $size) = @_; my $type; if ($size >= 8) { # get data type from start of tag data $type = substr($$dataPt, $offset, 4); } else { $type = 'err'; } # colorantOrderType if ($type eq 'clro' and $size >= 12) { my $num = Get32u($dataPt, $offset+8); if ($size >= $num + 12) { my $pos = $offset + 12; return join(' ',unpack("x$pos c$num", $$dataPt)); } } # dataType if ($type eq 'data' and $size >= 12) { my $form = Get32u($dataPt, $offset+8); # format 0 is ASCII data $form == 0 and return substr($$dataPt, $offset+12, $size-12); # binary data and other data types treat as binary (ie. don't format) } # dateTimeType if ($type eq 'dtim' and $size >= 20) { return sprintf("%.4d:%.2d:%.2d %.2d:%.2d:%.2d", Get16u($dataPt, $offset+8), Get16u($dataPt, $offset+10), Get16u($dataPt, $offset+12), Get16u($dataPt, $offset+14), Get16u($dataPt, $offset+16), Get16u($dataPt, $offset+18)); } # s15Fixed16ArrayType if ($type eq 'sf32') { return ReadValue($dataPt,$offset+8,'fixed32s',($size-8)/4,$size-8); } # signatureType if ($type eq 'sig ' and $size >= 12) { return substr($$dataPt, $offset+8, 4); } # textType $type eq 'text' and return substr($$dataPt, $offset+8, $size-8); # textDescriptionType (ref 2, replaced by multiLocalizedUnicodeType) if ($type eq 'desc' and $size >= 12) { my $len = Get32u($dataPt, $offset+8); if ($size >= $len + 12) { my $str = substr($$dataPt, $offset+12, $len); $str =~ s/\0.*//s; # truncate at null terminator return $str; } } # u16Fixed16ArrayType if ($type eq 'uf32') { return ReadValue($dataPt,$offset+8,'fixed32u',($size-8)/4,$size-8); } # uInt32ArrayType if ($type eq 'ui32') { return ReadValue($dataPt,$offset+8,'int32u',($size-8)/4,$size-8); } # uInt64ArrayType if ($type eq 'ui64') { return ReadValue($dataPt,$offset+8,'int64u',($size-8)/8,$size-8); } # uInt8ArrayType if ($type eq 'ui08') { return ReadValue($dataPt,$offset+8,'int8u',$size-8,$size-8); } # XYZType if ($type eq 'XYZ ') { my $str = ''; my $pos; for ($pos=8; $pos+12<=$size; $pos+=12) { $str and $str .= ', '; $str .= ReadValue($dataPt,$offset+$pos,'fixed32s',3,$size-$pos); } return $str; } return undef; # data type is not supported } #------------------------------------------------------------------------------ # Process ICC metadata record (ref 5) (UNTESTED!) # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessMetadata($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart}; my $dirLen = $$dirInfo{DirLen}; my $dirEnd = $dirStart + $dirLen; if ($dirLen < 16 or substr($$dataPt, $dirStart, 4) ne 'dict') { $et->Warn('Invalid ICC meta dictionary'); return 0; } my $num = Get32u($dataPt, $dirStart + 8); $et->VerboseDir('Metadata', $num); my $size = Get32u($dataPt, $dirStart + 12); $size < 16 and $et->Warn('Invalid ICC meta record size'), return 0; # NOTE: In the example the minimum offset is 20, # but this doesn't jive with the table (both in ref 5) my $minPtr = 16 + $size * $num; my $index; for ($index=0; $index<$num; ++$index) { my $entry = $dirStart + 16 + $size * $index; if ($entry + $size > $dirEnd) { $et->Warn('Truncated ICC meta dictionary'); last; } my $namePtr = Get32u($dataPt, $entry); my $nameLen = Get32u($dataPt, $entry + 4); my $valuePtr = Get32u($dataPt, $entry + 8); my $valueLen = Get32u($dataPt, $entry + 16); next unless $namePtr and $valuePtr; # ignore if offsets are zero if ($namePtr < $minPtr or $namePtr + $nameLen > $dirLen or $valuePtr < $minPtr or $valuePtr + $valueLen > $dirLen) { $et->Warn('Corrupted ICC meta dictionary'); last; } my $tag = substr($dataPt, $dirStart + $namePtr, $nameLen); my $val = substr($dataPt, $dirStart + $valuePtr, $valueLen); $tag = $et->Decode($tag, 'UTF16', 'MM', 'UTF8'); $val = $et->Decode($val, 'UTF16', 'MM'); # generate tagInfo if it doesn't exist unless ($$tagTablePtr{$tag}) { my $name = ucfirst $tag; $name =~ s/\s+(.)/\u$1/g; $name =~ tr/-_a-zA-Z0-9//dc; next unless length $name; AddTagToTable($tagTablePtr, $tag, { Name => $name }); } $et->HandleTag($tagTablePtr, $tag, $val); } return 1; } #------------------------------------------------------------------------------ # Write ICC profile file # Inputs: 0) ExifTool object reference, 1) Reference to directory information # Returns: 1 on success, 0 if this wasn't a valid ICC file, # or -1 if a write error occurred sub WriteICC($$) { my ($et, $dirInfo) = @_; # first make sure this is a valid ICC file (or no file at all) my $raf = $$dirInfo{RAF}; my $buff; return 0 if $raf->Read($buff, 24) and ValidateICC(\$buff); # now write the new ICC $buff = WriteICC_Profile($et, $dirInfo); if (defined $buff and length $buff) { Write($$dirInfo{OutFile}, $buff) or return -1; } else { $et->Error('No ICC information to write'); } return 1; } #------------------------------------------------------------------------------ # Write ICC data as a block # Inputs: 0) ExifTool object reference, 1) source dirInfo reference, # 2) tag table reference # Returns: ICC data block (may be empty if no ICC data) # Notes: Increments ExifTool CHANGED flag if changed sub WriteICC_Profile($$;$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access my $dirName = $$dirInfo{DirName} || 'ICC_Profile'; # (don't write AsShotICCProfile or CurrentICCProfile here) return undef unless $dirName eq 'ICC_Profile'; my $nvHash = $et->GetNewValueHash($Image::ExifTool::Extra{$dirName}); my $val = $et->GetNewValue($nvHash); $val = '' unless defined $val; return undef unless $et->IsOverwriting($nvHash, $val); ++$$et{CHANGED}; return $val; } #------------------------------------------------------------------------------ # Validate ICC data # Inputs: 0) ICC data reference # Returns: error string or undef on success sub ValidateICC($) { my $valPtr = shift; my $err; length($$valPtr) < 24 and return 'Invalid ICC profile'; $profileClass{substr($$valPtr, 12, 4)} or $err = 'profile class'; my $col = substr($$valPtr, 16, 4); # ColorSpaceData my $con = substr($$valPtr, 20, 4); # ConnectionSpace my $match = '(XYZ |Lab |Luv |YCbr|Yxy |RGB |GRAY|HSV |HLS |CMYK|CMY |[2-9A-F]CLR)'; $col =~ /$match/ or $err = 'color space'; $con =~ /$match/ or $err = 'connection space'; return $err ? "Invalid ICC profile (bad $err)" : undef; } #------------------------------------------------------------------------------ # Process ICC profile file # Inputs: 0) ExifTool object reference, 1) Reference to directory information # Returns: 1 if this was an ICC file sub ProcessICC($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $buff; $raf->Read($buff, 24) == 24 or return 0; # check to see if this is a valid ICC profile file return 0 if ValidateICC(\$buff); $et->SetFileType(); # read the profile my $size = unpack('N', $buff); if ($size < 128 or $size & 0x80000000) { $et->Error("Bad ICC Profile length ($size)"); return 1; } $raf->Seek(0, 0); unless ($raf->Read($buff, $size)) { $et->Error('Truncated ICC profile'); return 1; } my %dirInfo = ( DataPt => \$buff, DataLen => $size, DirStart => 0, DirLen => $size, ); my $tagTablePtr = GetTagTable('Image::ExifTool::ICC_Profile::Main'); return ProcessICC_Profile($et, \%dirInfo, $tagTablePtr); } #------------------------------------------------------------------------------ # Process ICC_Profile APP13 record # Inputs: 0) ExifTool object reference, 1) Reference to directory information # 2) Tag table reference (undefined to read ICC file) # Returns: 1 on success sub ProcessICC_Profile($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen}; my $verbose = $et->Options('Verbose'); return 0 if $dirLen < 4; # extract binary ICC_Profile data block if binary mode or requested if ((($$et{TAGS_FROM_FILE} and not $$et{EXCL_TAG_LOOKUP}{icc_profile}) or $$et{REQ_TAG_LOOKUP}{icc_profile}) and # (don't extract from AsShotICCProfile or CurrentICCProfile) (not $$dirInfo{Name} or $$dirInfo{Name} eq 'ICC_Profile')) { $et->FoundTag('ICC_Profile', substr($$dataPt, $dirStart, $dirLen)); } SetByteOrder('MM'); # ICC_Profile is always big-endian # check length of table my $len = Get32u($dataPt, $dirStart); if ($len != $dirLen or $len < 128) { $et->Warn("Bad length ICC_Profile (length $len)"); return 0 if $len < 128 or $dirLen < $len; } my $pos = $dirStart + 128; # position at start of table my $numEntries = Get32u($dataPt, $pos); if ($numEntries < 1 or $numEntries >= 0x100 or $numEntries * 12 + 132 > $dirLen) { $et->Warn("Bad ICC_Profile table ($numEntries entries)"); return 0; } if ($verbose) { $et->VerboseDir('ICC_Profile', $numEntries, $dirLen); my $fakeInfo = { Name=>'ProfileHeader', SubDirectory => { } }; $et->VerboseInfo(undef, $fakeInfo); } # increment ICC dir count my $dirCount = $$et{DIR_COUNT}{ICC} = ($$et{DIR_COUNT}{ICC} || 0) + 1; $$et{SET_GROUP1} = '+' . $dirCount if $dirCount > 1; # process the header block my %subdirInfo = ( Name => 'ProfileHeader', DataPt => $dataPt, DataLen => $$dirInfo{DataLen}, DirStart => $dirStart, DirLen => 128, Parent => $$dirInfo{DirName}, DirName => 'Header', ); my $newTagTable = GetTagTable('Image::ExifTool::ICC_Profile::Header'); $et->ProcessDirectory(\%subdirInfo, $newTagTable); $pos += 4; # skip item count my $index; for ($index=0; $index<$numEntries; ++$index) { my $tagID = substr($$dataPt, $pos, 4); my $offset = Get32u($dataPt, $pos + 4); my $size = Get32u($dataPt, $pos + 8); $pos += 12; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tagID); # unknown tags aren't generated automatically by GetTagInfo() # if the tagID's aren't numeric, so we must do this manually: if (not $tagInfo and $$et{OPTIONS}{Unknown}) { $tagInfo = { Unknown => 1 }; AddTagToTable($tagTablePtr, $tagID, $tagInfo); } next unless defined $tagInfo; if ($offset + $size > $dirLen) { $et->Warn("Bad ICC_Profile table (truncated)"); last; } my $valuePtr = $dirStart + $offset; my $subdir = $$tagInfo{SubDirectory}; # format the value unless this is a subdirectory my ($value, $fmt); if ($size > 4) { $fmt = substr($$dataPt, $valuePtr, 4); # handle multiLocalizedUnicodeType if ($fmt eq 'mluc' and not $subdir) { next if $size < 28; my $count = Get32u($dataPt, $valuePtr + 8); my $recLen = Get32u($dataPt, $valuePtr + 12); next if $recLen < 12; my $i; for ($i=0; $i<$count; ++$i) { my $recPos = $valuePtr + 16 + $i * $recLen; last if $recPos + $recLen > $valuePtr + $size; my $lang = substr($$dataPt, $recPos, 4); my $langInfo; # validate language code and change to standard case (just in case) if ($lang =~ s/^([a-z]{2})([A-Z]{2})$/\L$1-\U$2/i and $lang ne 'en-US') { $langInfo = Image::ExifTool::GetLangInfo($tagInfo, $lang); } my $strLen = Get32u($dataPt, $recPos + 4); my $strPos = Get32u($dataPt, $recPos + 8); last if $strPos + $strLen > $size; my $str = substr($$dataPt, $valuePtr + $strPos, $strLen); $str = $et->Decode($str, 'UTF16'); $et->HandleTag($tagTablePtr, $tagID, $str, TagInfo => $langInfo || $tagInfo, Table => $tagTablePtr, Index => $index, Value => $str, DataPt => $dataPt, Size => $strLen, Start => $valuePtr + $strPos, Format => "type '$fmt'", ); } $et->Warn("Corrupted $$tagInfo{Name} data") if $i < $count; next; } } else { $fmt = 'err '; } $value = FormatICCTag($dataPt, $valuePtr, $size) unless $subdir; $verbose and $et->VerboseInfo($tagID, $tagInfo, Table => $tagTablePtr, Index => $index, Value => $value, DataPt => $dataPt, Size => $size, Start => $valuePtr, Format => "type '$fmt'", ); if ($subdir) { my $name = $$tagInfo{Name}; undef $newTagTable; if ($$subdir{TagTable}) { $newTagTable = GetTagTable($$subdir{TagTable}); unless ($newTagTable) { warn "Unknown tag table $$subdir{TagTable}\n"; next; } } else { warn "Must specify TagTable for SubDirectory $name\n"; next; } %subdirInfo = ( Name => $name, DataPt => $dataPt, DataPos => $$dirInfo{DataPos}, DataLen => $$dirInfo{DataLen}, DirStart => $valuePtr, DirLen => $size, DirName => $name, Parent => $$dirInfo{DirName}, ); my $type = substr($$dataPt, $valuePtr, 4); #### eval Validate ($type) if (defined $$subdir{Validate} and not eval $$subdir{Validate}) { $et->Warn("Invalid $name data"); } else { $et->ProcessDirectory(\%subdirInfo, $newTagTable, $$subdir{ProcessProc}); } } elsif (defined $value) { $et->FoundTag($tagInfo, $value); } else { $value = substr($$dataPt, $valuePtr, $size); # treat unsupported formats as binary data $$tagInfo{ValueConv} = '\$val' unless defined $$tagInfo{ValueConv}; $et->FoundTag($tagInfo, $value); } } delete $$et{SET_GROUP1}; return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::ICC_Profile - Read ICC Profile meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains the definitions to read information from ICC profiles. ICC (International Color Consortium) profiles are used to translate color data created on one device into another device's native color space. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.color.org/icc_specs2.html> =item L<http://developer.apple.com/documentation/GraphicsImaging/Reference/ColorSync_Manager/ColorSync_Manager.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/ICC_Profile Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/ID3.pm������������������������������������������������������000644 �000765 �000024 �00000151114 12642461310 020623� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: ID3.pm # # Description: Read ID3 meta information # # Revisions: 09/12/2005 - P. Harvey Created # # References: 1) http://www.id3.org/ # 2) http://www.mp3-tech.org/ # 3) http://www.fortunecity.com/underworld/sonic/3/id3tag.html #------------------------------------------------------------------------------ package Image::ExifTool::ID3; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.46'; sub ProcessID3v2($$$); sub ProcessPrivate($$$); sub ProcessSynText($$$); sub ConvertID3v1Text($$); sub ConvertTimeStamp($); # audio formats that we process after an ID3v2 header (in order) my @audioFormats = qw(APE MPC FLAC OGG MP3); # audio formats where the processing proc is in a differently-named module my %audioModule = ( MP3 => 'ID3', OGG => 'Ogg', ); # picture types for 'PIC' and 'APIC' tags # (Note: Duplicated in ID3, ASF and FLAC modules!) my %pictureType = ( 0 => 'Other', 1 => '32x32 PNG Icon', 2 => 'Other Icon', 3 => 'Front Cover', 4 => 'Back Cover', 5 => 'Leaflet', 6 => 'Media', 7 => 'Lead Artist', 8 => 'Artist', 9 => 'Conductor', 10 => 'Band', 11 => 'Composer', 12 => 'Lyricist', 13 => 'Recording Studio or Location', 14 => 'Recording Session', 15 => 'Performance', 16 => 'Capture from Movie or Video', 17 => 'Bright(ly) Colored Fish', 18 => 'Illustration', 19 => 'Band Logo', 20 => 'Publisher Logo', ); my %dateTimeConv = ( ValueConv => 'require Image::ExifTool::XMP; Image::ExifTool::XMP::ConvertXMPDate($val)', PrintConv => '$self->ConvertDateTime($val)', ); # This table is just for documentation purposes %Image::ExifTool::ID3::Main = ( VARS => { NO_ID => 1 }, NOTES => q{ ExifTool extracts ID3 information from MP3, MPEG, AIFF, OGG, FLAC, APE, MPC and RealAudio files. ID3v2 tags which support multiple languages (eg. Comment and Lyrics) are extracted by specifying the tag name, followed by a dash ('-'), then a 3-character ISO 639-2 language code (eg. "Comment-spa"). See L<http://www.id3.org/> for the official ID3 specification and L<http://www.loc.gov/standards/iso639-2/php/code_list.php> for a list of ISO 639-2 language codes. }, ID3v1 => { Name => 'ID3v1', SubDirectory => { TagTable => 'Image::ExifTool::ID3::v1' }, }, ID3v1Enh => { Name => 'ID3v1_Enh', SubDirectory => { TagTable => 'Image::ExifTool::ID3::v1_Enh' }, }, ID3v22 => { Name => 'ID3v2_2', SubDirectory => { TagTable => 'Image::ExifTool::ID3::v2_2' }, }, ID3v23 => { Name => 'ID3v2_3', SubDirectory => { TagTable => 'Image::ExifTool::ID3::v2_3' }, }, ID3v24 => { Name => 'ID3v2_4', SubDirectory => { TagTable => 'Image::ExifTool::ID3::v2_4' }, }, ); # Mapping for ID3v1 Genre numbers my %genre = ( 0 => 'Blues', 1 => 'Classic Rock', 2 => 'Country', 3 => 'Dance', 4 => 'Disco', 5 => 'Funk', 6 => 'Grunge', 7 => 'Hip-Hop', 8 => 'Jazz', 9 => 'Metal', 10 => 'New Age', 11 => 'Oldies', 12 => 'Other', 13 => 'Pop', 14 => 'R&B', 15 => 'Rap', 16 => 'Reggae', 17 => 'Rock', 18 => 'Techno', 19 => 'Industrial', 20 => 'Alternative', 21 => 'Ska', 22 => 'Death Metal', 23 => 'Pranks', 24 => 'Soundtrack', 25 => 'Euro-Techno', 26 => 'Ambient', 27 => 'Trip-Hop', 28 => 'Vocal', 29 => 'Jazz+Funk', 30 => 'Fusion', 31 => 'Trance', 32 => 'Classical', 33 => 'Instrumental', 34 => 'Acid', 35 => 'House', 36 => 'Game', 37 => 'Sound Clip', 38 => 'Gospel', 39 => 'Noise', 40 => 'Alt. Rock', # (was AlternRock) 41 => 'Bass', 42 => 'Soul', 43 => 'Punk', 44 => 'Space', 45 => 'Meditative', 46 => 'Instrumental Pop', 47 => 'Instrumental Rock', 48 => 'Ethnic', 49 => 'Gothic', 50 => 'Darkwave', 51 => 'Techno-Industrial', 52 => 'Electronic', 53 => 'Pop-Folk', 54 => 'Eurodance', 55 => 'Dream', 56 => 'Southern Rock', 57 => 'Comedy', 58 => 'Cult', 59 => 'Gangsta Rap', # (was Gansta) 60 => 'Top 40', 61 => 'Christian Rap', 62 => 'Pop/Funk', 63 => 'Jungle', 64 => 'Native American', 65 => 'Cabaret', 66 => 'New Wave', 67 => 'Psychedelic', # (was misspelt) 68 => 'Rave', 69 => 'Showtunes', 70 => 'Trailer', 71 => 'Lo-Fi', 72 => 'Tribal', 73 => 'Acid Punk', 74 => 'Acid Jazz', 75 => 'Polka', 76 => 'Retro', 77 => 'Musical', 78 => 'Rock & Roll', 79 => 'Hard Rock', # The following genres are Winamp extensions 80 => 'Folk', 81 => 'Folk-Rock', 82 => 'National Folk', 83 => 'Swing', 84 => 'Fast-Fusion', # (was Fast Fusion) 85 => 'Bebop', # (was misspelt) 86 => 'Latin', 87 => 'Revival', 88 => 'Celtic', 89 => 'Bluegrass', 90 => 'Avantgarde', 91 => 'Gothic Rock', 92 => 'Progressive Rock', 93 => 'Psychedelic Rock', 94 => 'Symphonic Rock', 95 => 'Slow Rock', 96 => 'Big Band', 97 => 'Chorus', 98 => 'Easy Listening', 99 => 'Acoustic', 100 => 'Humour', 101 => 'Speech', 102 => 'Chanson', 103 => 'Opera', 104 => 'Chamber Music', 105 => 'Sonata', 106 => 'Symphony', 107 => 'Booty Bass', 108 => 'Primus', 109 => 'Porn Groove', 110 => 'Satire', 111 => 'Slow Jam', 112 => 'Club', 113 => 'Tango', 114 => 'Samba', 115 => 'Folklore', 116 => 'Ballad', 117 => 'Power Ballad', 118 => 'Rhythmic Soul', 119 => 'Freestyle', 120 => 'Duet', 121 => 'Punk Rock', 122 => 'Drum Solo', 123 => 'A Cappella', # (was Acapella) 124 => 'Euro-House', 125 => 'Dance Hall', # ref http://yar.hole.ru/MP3Tech/lamedoc/id3.html 126 => 'Goa', 127 => 'Drum & Bass', 128 => 'Club-House', 129 => 'Hardcore', 130 => 'Terror', 131 => 'Indie', 132 => 'BritPop', 133 => 'Afro-Punk', # (was Negerpunk) 134 => 'Polsk Punk', 135 => 'Beat', 136 => 'Christian Gangsta Rap', # (was Christian Gangsta) 137 => 'Heavy Metal', 138 => 'Black Metal', 139 => 'Crossover', 140 => 'Contemporary Christian', # (was Contemporary C) 141 => 'Christian Rock', 142 => 'Merengue', 143 => 'Salsa', 144 => 'Thrash Metal', 145 => 'Anime', 146 => 'JPop', 147 => 'Synthpop', # (was SynthPop) # ref http://alicja.homelinux.com/~mats/text/Music/MP3/ID3/Genres.txt # (also used to update some Genres above) 148 => 'Abstract', 149 => 'Art Rock', 150 => 'Baroque', 151 => 'Bhangra', 152 => 'Big Beat', 153 => 'Breakbeat', 154 => 'Chillout', 155 => 'Downtempo', 156 => 'Dub', 157 => 'EBM', 158 => 'Eclectic', 159 => 'Electro', 160 => 'Electroclash', 161 => 'Emo', 162 => 'Experimental', 163 => 'Garage', 164 => 'Global', 165 => 'IDM', 166 => 'Illbient', 167 => 'Industro-Goth', 168 => 'Jam Band', 169 => 'Krautrock', 170 => 'Leftfield', 171 => 'Lounge', 172 => 'Math Rock', 173 => 'New Romantic', 174 => 'Nu-Breakz', 175 => 'Post-Punk', 176 => 'Post-Rock', 177 => 'Psytrance', 178 => 'Shoegaze', 179 => 'Space Rock', 180 => 'Trop Rock', 181 => 'World Music', 182 => 'Neoclassical', 183 => 'Audiobook', 184 => 'Audio Theatre', 185 => 'Neue Deutsche Welle', 186 => 'Podcast', 187 => 'Indie Rock', 188 => 'G-Funk', 189 => 'Dubstep', 190 => 'Garage Rock', 191 => 'Psybient', 255 => 'None', # ID3v2 adds some text short forms... CR => 'Cover', RX => 'Remix', ); # Tags for ID3v1 %Image::ExifTool::ID3::v1 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 1 => 'ID3v1', 2 => 'Audio' }, PRIORITY => 0, # let ID3v2 tags replace these if they come later 3 => { Name => 'Title', Format => 'string[30]', ValueConv => 'Image::ExifTool::ID3::ConvertID3v1Text($self,$val)', }, 33 => { Name => 'Artist', Groups => { 2 => 'Author' }, Format => 'string[30]', ValueConv => 'Image::ExifTool::ID3::ConvertID3v1Text($self,$val)', }, 63 => { Name => 'Album', Format => 'string[30]', ValueConv => 'Image::ExifTool::ID3::ConvertID3v1Text($self,$val)', }, 93 => { Name => 'Year', Groups => { 2 => 'Time' }, Format => 'string[4]', }, 97 => { Name => 'Comment', Format => 'string[30]', ValueConv => 'Image::ExifTool::ID3::ConvertID3v1Text($self,$val)', }, 125 => { # ID3v1.1 (ref http://en.wikipedia.org/wiki/ID3#Layout) Name => 'Track', Format => 'int8u[2]', Notes => 'v1.1 addition -- last 2 bytes of v1.0 Comment field', RawConv => '($val =~ s/^0 // and $val) ? $val : undef', }, 127 => { Name => 'Genre', Notes => 'CR and RX are ID3v2 only', Format => 'int8u', PrintConv => \%genre, PrintConvColumns => 3, }, ); # ID3v1 "Enhanced TAG" information (ref 3) %Image::ExifTool::ID3::v1_Enh = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 1 => 'ID3v1_Enh', 2 => 'Audio' }, NOTES => 'ID3 version 1 "Enhanced TAG" information (not part of the official spec).', PRIORITY => 0, # let ID3v2 tags replace these if they come later 4 => { Name => 'Title2', Format => 'string[60]', ValueConv => 'Image::ExifTool::ID3::ConvertID3v1Text($self,$val)', }, 64 => { Name => 'Artist2', Groups => { 2 => 'Author' }, Format => 'string[60]', ValueConv => 'Image::ExifTool::ID3::ConvertID3v1Text($self,$val)', }, 124 => { Name => 'Album2', Format => 'string[60]', ValueConv => 'Image::ExifTool::ID3::ConvertID3v1Text($self,$val)', }, 184 => { Name => 'Speed', Format => 'int8u', PrintConv => { 1 => 'Slow', 2 => 'Medium', 3 => 'Fast', 4 => 'Hardcore', }, }, 185 => { Name => 'Genre', Format => 'string[30]', ValueConv => 'Image::ExifTool::ID3::ConvertID3v1Text($self,$val)', }, 215 => { Name => 'StartTime', Format => 'string[6]', }, 221 => { Name => 'EndTime', Format => 'string[6]', }, ); # Tags for ID2v2.2 %Image::ExifTool::ID3::v2_2 = ( PROCESS_PROC => \&Image::ExifTool::ID3::ProcessID3v2, GROUPS => { 1 => 'ID3v2_2', 2 => 'Audio' }, NOTES => q{ ExifTool extracts mainly text-based tags from ID3v2 information. The tags in the tables below are those extracted by ExifTool, and don't represent a complete list of available ID3v2 tags. ID3 version 2.2 tags. (These are the tags written by iTunes 5.0.) }, CNT => 'PlayCounter', COM => 'Comment', IPL => 'InvolvedPeople', PIC => { Name => 'Picture', Groups => { 2 => 'Preview' }, Binary => 1, Notes => 'the 3 tags below are also extracted from this PIC frame', }, 'PIC-1' => { Name => 'PictureFormat', Groups => { 2 => 'Image' } }, 'PIC-2' => { Name => 'PictureType', Groups => { 2 => 'Image' }, PrintConv => \%pictureType, SeparateTable => 1, }, 'PIC-3' => { Name => 'PictureDescription', Groups => { 2 => 'Image' } }, POP => { Name => 'Popularimeter', PrintConv => '$val=~s/^(.*?) (\d+) (\d+)$/$1 Rating=$2 Count=$3/s; $val', }, SLT => { Name => 'SynLyrics', SubDirectory => { TagTable => 'Image::ExifTool::ID3::SynLyrics' }, }, TAL => 'Album', TBP => 'BeatsPerMinute', TCM => 'Composer', TCO =>{ Name => 'Genre', Notes => 'uses same lookup table as ID3v1 Genre', PrintConv => 'Image::ExifTool::ID3::PrintGenre($val)', }, TCP => { Name => 'Compilation', PrintConv => { 0 => 'No', 1 => 'Yes' } }, # iTunes TCR => { Name => 'Copyright', Groups => { 2 => 'Author' } }, TDA => { Name => 'Date', Groups => { 2 => 'Time' } }, TDY => 'PlaylistDelay', TEN => 'EncodedBy', TFT => 'FileType', TIM => { Name => 'Time', Groups => { 2 => 'Time' } }, TKE => 'InitialKey', TLA => 'Language', TLE => 'Length', TMT => 'Media', TOA => { Name => 'OriginalArtist', Groups => { 2 => 'Author' } }, TOF => 'OriginalFileName', TOL => 'OriginalLyricist', TOR => 'OriginalReleaseYear', TOT => 'OriginalAlbum', TP1 => { Name => 'Artist', Groups => { 2 => 'Author' } }, TP2 => 'Band', TP3 => 'Conductor', TP4 => 'InterpretedBy', TPA => 'PartOfSet', TPB => 'Publisher', TRC => 'ISRC', # (international standard recording code) TRD => 'RecordingDates', TRK => 'Track', TSI => 'Size', TSS => 'EncoderSettings', TT1 => 'Grouping', TT2 => 'Title', TT3 => 'Subtitle', TXT => 'Lyricist', TXX => 'UserDefinedText', TYE => { Name => 'Year', Groups => { 2 => 'Time' } }, ULT => 'Lyrics', WAF => 'FileURL', WAR => { Name => 'ArtistURL', Groups => { 2 => 'Author' } }, WAS => 'SourceURL', WCM => 'CommercialURL', WCP => { Name => 'CopyrightURL', Groups => { 2 => 'Author' } }, WPB => 'PublisherURL', WXX => 'UserDefinedURL', # the following written by iTunes 10.5 (ref PH) RVA => 'RelativeVolumeAdjustment', TST => 'TitleSortOrder', TSA => 'AlbumSortOrder', TSP => 'PerformerSortOrder', TS2 => 'AlbumArtistSortOrder', TSC => 'ComposerSortOrder', ITU => { Name => 'iTunesU', Description => 'iTunes U', Binary => 1, Unknown => 1 }, PCS => { Name => 'Podcast', Binary => 1, Unknown => 1 }, ); # tags common to ID3v2.3 and ID3v2.4 my %id3v2_common = ( # AENC => 'AudioEncryption', # Owner, preview start, preview length, encr data APIC => { Name => 'Picture', Groups => { 2 => 'Preview' }, Binary => 1, Notes => 'the 3 tags below are also extracted from this APIC frame', }, 'APIC-1' => { Name => 'PictureMIMEType', Groups => { 2 => 'Image' } }, 'APIC-2' => { Name => 'PictureType', Groups => { 2 => 'Image' }, PrintConv => \%pictureType, SeparateTable => 1, }, 'APIC-3' => { Name => 'PictureDescription', Groups => { 2 => 'Image' } }, COMM => 'Comment', # COMR => 'Commercial', # ENCR => 'EncryptionMethod', # ETCO => 'EventTimingCodes', # GEOB => 'GeneralEncapsulatedObject', # GRID => 'GroupIdentification', # LINK => 'LinkedInformation', MCDI => { Name => 'MusicCDIdentifier', Binary => 1 }, # MLLT => 'MPEGLocationLookupTable', OWNE => 'Ownership', PCNT => 'PlayCounter', POPM => { Name => 'Popularimeter', PrintConv => '$val=~s/^(.*?) (\d+) (\d+)$/$1 Rating=$2 Count=$3/s; $val', }, # POSS => 'PostSynchronization', PRIV => { Name => 'Private', SubDirectory => { TagTable => 'Image::ExifTool::ID3::Private' }, }, # RBUF => 'RecommendedBufferSize', # RVRB => 'Reverb', SYLT => { Name => 'SynLyrics', SubDirectory => { TagTable => 'Image::ExifTool::ID3::SynLyrics' }, }, # SYTC => 'SynchronizedTempoCodes', TALB => 'Album', TBPM => 'BeatsPerMinute', TCMP => { Name => 'Compilation', PrintConv => { 0 => 'No', 1 => 'Yes' } }, #PH (iTunes) TCOM => 'Composer', TCON =>{ Name => 'Genre', Notes => 'uses same lookup table as ID3v1 Genre', PrintConv => 'Image::ExifTool::ID3::PrintGenre($val)', }, TCOP => { Name => 'Copyright', Groups => { 2 => 'Author' } }, TDLY => 'PlaylistDelay', TENC => 'EncodedBy', TEXT => 'Lyricist', TFLT => 'FileType', TIT1 => 'Grouping', TIT2 => 'Title', TIT3 => 'Subtitle', TKEY => 'InitialKey', TLAN => 'Language', TLEN => { Name => 'Length', ValueConv => '$val / 1000', PrintConv => '"$val s"', }, TMED => 'Media', TOAL => 'OriginalAlbum', TOFN => 'OriginalFileName', TOLY => 'OriginalLyricist', TOPE => { Name => 'OriginalArtist', Groups => { 2 => 'Author' } }, TOWN => 'FileOwner', TPE1 => { Name => 'Artist', Groups => { 2 => 'Author' } }, TPE2 => 'Band', TPE3 => 'Conductor', TPE4 => 'InterpretedBy', TPOS => 'PartOfSet', TPUB => 'Publisher', TRCK => 'Track', TRSN => 'InternetRadioStationName', TRSO => 'InternetRadioStationOwner', TSRC => 'ISRC', # (international standard recording code) TSSE => 'EncoderSettings', TXXX => 'UserDefinedText', # UFID => 'UniqueFileID', (not extracted because it is long and nasty and not very useful) USER => 'TermsOfUse', USLT => 'Lyrics', WCOM => 'CommercialURL', WCOP => 'CopyrightURL', WOAF => 'FileURL', WOAR => { Name => 'ArtistURL', Groups => { 2 => 'Author' } }, WOAS => 'SourceURL', WORS => 'InternetRadioStationURL', WPAY => 'PaymentURL', WPUB => 'PublisherURL', WXXX => 'UserDefinedURL', # # non-standard frames # # the following are written by iTunes 10.5 (ref PH) TSO2 => 'AlbumArtistSortOrder', TSOC => 'ComposerSortOrder', ITNU => { Name => 'iTunesU', Description => 'iTunes U', Binary => 1, Unknown => 1 }, PCST => { Name => 'Podcast', Binary => 1, Unknown => 1 }, # other proprietary Apple tags (ref http://help.mp3tag.de/main_tags.html) TDES => 'PodcastDescription', TGID => 'PodcastID', WFED => 'PodcastURL', TKWD => 'PodcastKeywords', TCAT => 'PodcastCategory', # more non-standard tags (ref http://eyed3.nicfit.net/compliance.html) # NCON - unknown MusicMatch binary data XDOR => { Name => 'OriginalReleaseTime',Groups => { 2 => 'Time' }, %dateTimeConv }, XSOA => 'AlbumSortOrder', XSOP => 'PerformerSortOrder', XSOT => 'TitleSortOrder', XOLY => { Name => 'OlympusDSS', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::DSS' }, }, ); # Tags for ID3v2.3 (http://www.id3.org/id3v2.3.0) %Image::ExifTool::ID3::v2_3 = ( PROCESS_PROC => \&Image::ExifTool::ID3::ProcessID3v2, GROUPS => { 1 => 'ID3v2_3', 2 => 'Audio' }, NOTES => q{ ID3 version 2.3 tags. Includes some non-standard tags written by other software. }, %id3v2_common, # include common tags # EQUA => 'Equalization', IPLS => 'InvolvedPeople', # RVAD => 'RelativeVolumeAdjustment', TDAT => { Name => 'Date', Groups => { 2 => 'Time' } }, TIME => { Name => 'Time', Groups => { 2 => 'Time' } }, TORY => 'OriginalReleaseYear', TRDA => 'RecordingDates', TSIZ => 'Size', TYER => { Name => 'Year', Groups => { 2 => 'Time' } }, ); # Tags for ID3v2.4 (http://www.id3.org/id3v2.4.0-frames) %Image::ExifTool::ID3::v2_4 = ( PROCESS_PROC => \&Image::ExifTool::ID3::ProcessID3v2, GROUPS => { 1 => 'ID3v2_4', 2 => 'Audio' }, NOTES => q{ ID3 version 2.4 tags. Includes some non-standard tags written by other software. }, %id3v2_common, # include common tags # EQU2 => 'Equalization', RVA2 => 'RelativeVolumeAdjustment', # SEEK => 'Seek', # SIGN => 'Signature', TDEN => { Name => 'EncodingTime', Groups => { 2 => 'Time' }, %dateTimeConv }, TDOR => { Name => 'OriginalReleaseTime',Groups => { 2 => 'Time' }, %dateTimeConv }, TDRC => { Name => 'RecordingTime', Groups => { 2 => 'Time' }, %dateTimeConv }, TDRL => { Name => 'ReleaseTime', Groups => { 2 => 'Time' }, %dateTimeConv }, TDTG => { Name => 'TaggingTime', Groups => { 2 => 'Time' }, %dateTimeConv }, TIPL => 'InvolvedPeople', TMCL => 'MusicianCredits', TMOO => 'Mood', TPRO => 'ProducedNotice', TSOA => 'AlbumSortOrder', TSOP => 'PerformerSortOrder', TSOT => 'TitleSortOrder', TSST => 'SetSubtitle', ); # Synchronized lyrics/text %Image::ExifTool::ID3::SynLyrics = ( GROUPS => { 1 => 'ID3', 2 => 'Audio' }, VARS => { NO_ID => 1 }, PROCESS_PROC => \&ProcessSynText, NOTES => 'The following tags are extracted from synchronized lyrics/text frames.', desc => { Name => 'SynchronizedLyricsDescription' }, type => { Name => 'SynchronizedLyricsType', PrintConv => { 0 => 'Other', 1 => 'Lyrics', 2 => 'Text Transcription', 3 => 'Movement/part Name', 4 => 'Events', 5 => 'Chord', 6 => 'Trivia/"pop-up" Information', 7 => 'Web Page URL', 8 => 'Image URL', }, }, text => { Name => 'SynchronizedLyricsText', List => 1, Notes => q{ each list item has a leading time stamp in square brackets. Time stamps may be in seconds with format [MM:SS.ss], or MPEG frames with format [FFFF], depending on how this information was stored }, PrintConv => \&ConvertTimeStamp, }, ); # ID3 PRIV tags (ref PH) %Image::ExifTool::ID3::Private = ( PROCESS_PROC => \&Image::ExifTool::ID3::ProcessPrivate, GROUPS => { 1 => 'ID3', 2 => 'Audio' }, VARS => { NO_ID => 1 }, NOTES => q{ ID3 private (PRIV) tags. ExifTool will decode any private tags found, even if they do not appear in this table. }, XMP => { SubDirectory => { DirName => 'XMP', TagTable => 'Image::ExifTool::XMP::Main', }, }, PeakValue => { ValueConv => 'length($val)==4 ? unpack("V",$val) : \$val', }, AverageLevel => { ValueConv => 'length($val)==4 ? unpack("V",$val) : \$val', }, # Windows Media attributes ("/" in tag ID is converted to "_" by ProcessPrivate) WM_WMContentID => { Name => 'WM_ContentID', ValueConv => 'require Image::ExifTool::ASF; Image::ExifTool::ASF::GetGUID($val)', }, WM_WMCollectionID => { Name => 'WM_CollectionID', ValueConv => 'require Image::ExifTool::ASF; Image::ExifTool::ASF::GetGUID($val)', }, WM_WMCollectionGroupID => { Name => 'WM_CollectionGroupID', ValueConv => 'require Image::ExifTool::ASF; Image::ExifTool::ASF::GetGUID($val)', }, WM_MediaClassPrimaryID => { ValueConv => 'require Image::ExifTool::ASF; Image::ExifTool::ASF::GetGUID($val)', }, WM_MediaClassSecondaryID => { ValueConv => 'require Image::ExifTool::ASF; Image::ExifTool::ASF::GetGUID($val)', }, WM_Provider => { ValueConv => '$self->Decode($val,"UCS2","II")', #PH (NC) }, # there are lots more WM tags that could be decoded if I had samples or documentation - PH # WM/AlbumArtist # WM/AlbumTitle # WM/Category # WM/Composer # WM/Conductor # WM/ContentDistributor # WM/ContentGroupDescription # WM/EncodingTime # WM/Genre # WM/GenreID # WM/InitialKey # WM/Language # WM/Lyrics # WM/MCDI # WM/MediaClassPrimaryID # WM/MediaClassSecondaryID # WM/Mood # WM/ParentalRating # WM/Period # WM/ProtectionType # WM/Provider # WM/ProviderRating # WM/ProviderStyle # WM/Publisher # WM/SubscriptionContentID # WM/SubTitle # WM/TrackNumber # WM/UniqueFileIdentifier # WM/WMCollectionGroupID # WM/WMCollectionID # WM/WMContentID # WM/Writer # WM/Year ); # lookup to check for existence of tags in other ID3 versions my %otherTable = ( \%Image::ExifTool::ID3::v2_4 => \%Image::ExifTool::ID3::v2_3, \%Image::ExifTool::ID3::v2_3 => \%Image::ExifTool::ID3::v2_4, ); # ID3 Composite tags %Image::ExifTool::ID3::Composite = ( GROUPS => { 2 => 'Image' }, DateTimeOriginal => { Description => 'Date/Time Original', Groups => { 2 => 'Time' }, Priority => 0, Desire => { 0 => 'ID3:RecordingTime', 1 => 'ID3:Year', 2 => 'ID3:Date', 3 => 'ID3:Time', }, ValueConv => q{ return $val[0] if $val[0]; return undef unless $val[1]; return $val[1] unless $val[2] and $val[2] =~ /^(\d{2})(\d{2})$/; $val[1] .= ":$1:$2"; return $val[1] unless $val[3] and $val[3] =~ /^(\d{2})(\d{2})$/; return "$val[1] $1:$2"; }, PrintConv => '$self->ConvertDateTime($val)', }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::ID3'); # can't share tagInfo hashes between two tables, so we must make # copies of the necessary hashes { my $tag; foreach $tag (keys %id3v2_common) { next unless ref $id3v2_common{$tag} eq 'HASH'; my %tagInfo = %{$id3v2_common{$tag}}; # must also copy Groups hash if it exists my $groups = $tagInfo{Groups}; $tagInfo{Groups} = { %$groups } if $groups; $Image::ExifTool::ID3::v2_4{$tag} = \%tagInfo; } } #------------------------------------------------------------------------------ # Convert ID3v1 text to exiftool character set # Inputs: 0) ExifTool object ref, 1) text string # Returns: converted text sub ConvertID3v1Text($$) { my ($et, $val) = @_; return $et->Decode($val, $et->Options('CharsetID3')); } #------------------------------------------------------------------------------ # Re-format time stamp in synchronized lyrics # Inputs: 0) synchronized lyrics entry (eg. "[84.030]Da do do do") # Returns: entry with formatted timestamp (eg. "[01:24.03]Da do do do") sub ConvertTimeStamp($) { my $val = shift; # do nothing if this isn't a time stamp (frame count doesn't contain a decimal) return $val unless $val =~ /^\[(\d+\.\d+)\]/g; my $time = $1; # print hours only if more than 60 minutes my $h = int($time / 3600); if ($h) { $time -= $h * 3600; $h = "$h:"; } else { $h = ''; } my $m = int($time / 60); my $s = $time - $m * 60; return sprintf('[%s%.2d:%05.2f]', $h, $m, $s) . substr($val, pos($val)); } #------------------------------------------------------------------------------ # Process ID3 synchronized lyrics/text # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref sub ProcessSynText($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; $et->VerboseDir('SynLyrics', 0, length $$dataPt); return unless length $$dataPt > 6; my ($enc,$lang,$timeCode,$type) = unpack('Ca3CC', $$dataPt); $lang = lc $lang; undef $lang if $lang !~ /^[a-z]{3}$/ or $lang eq 'eng'; pos($$dataPt) = 6; my ($termLen, $pat); if ($enc == 1 or $enc == 2) { $$dataPt =~ /\G(..)*?\0\0/sg or return; $termLen = 2; $pat = '\G(?:..)*?\0\0(....)'; } else { $$dataPt =~ /\0/g or return; $termLen = 1; $pat = '\0(....)'; } my $desc = substr($$dataPt, 6, pos($$dataPt) - 6 - $termLen); $desc = DecodeString($et, $desc, $enc); my $tagInfo = $et->GetTagInfo($tagTablePtr, 'desc'); $tagInfo = Image::ExifTool::GetLangInfo($tagInfo, $lang) if $lang; $et->HandleTag($tagTablePtr, 'type', $type); $et->HandleTag($tagTablePtr, 'desc', $desc, TagInfo => $tagInfo); $tagInfo = $et->GetTagInfo($tagTablePtr, 'text'); $tagInfo = Image::ExifTool::GetLangInfo($tagInfo, $lang) if $lang; for (;;) { my $pos = pos $$dataPt; last unless $$dataPt =~ /$pat/sg; my $time = unpack('N', $1); my $text = substr($$dataPt, $pos, pos($$dataPt) - $pos - 4 - $termLen); $text = DecodeString($et, $text, $enc); my $timeStr; if ($timeCode == 2) { # time in ms $timeStr = sprintf('%.3f', $time / 1000); } else { # time in MPEG frames $timeStr = sprintf('%.4d', $time); $timeStr .= '?' if $timeCode != 1; } $et->HandleTag($tagTablePtr, 'text', "[$timeStr]$text", TagInfo => $tagInfo); } } #------------------------------------------------------------------------------ # Process ID3 PRIV data # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref sub ProcessPrivate($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my ($tag, $start); $et->VerboseDir('PRIV', 0, length $$dataPt); if ($$dataPt =~ /^(.*?)\0/s) { $tag = $1; $start = length($tag) + 1; } else { $tag = ''; $start = 0; } unless ($$tagTablePtr{$tag}) { $tag =~ tr{/ }{_}d; # translate '/' to '_' and remove spaces $tag = 'private' unless $tag =~ /^[-\w]{1,24}$/; unless ($$tagTablePtr{$tag}) { AddTagToTable($tagTablePtr, $tag, { Name => ucfirst($tag), Binary => 1 }); } } my $key = $et->HandleTag($tagTablePtr, $tag, undef, Size => length($$dataPt) - $start, Start => $start, DataPt => $dataPt, ); # set group1 name $et->SetGroup($key, $$et{ID3_Ver}) if $key; } #------------------------------------------------------------------------------ # Print ID3v2 Genre # Inputs: TCON or TCO frame data # Returns: Content type with decoded genre numbers sub PrintGenre($) { my $val = shift; # make sure that %genre has an entry for all numbers we are interested in # (genre numbers are in brackets for ID3v2.2 and v2.3) while ($val =~ /\((\d+)\)/g) { $genre{$1} or $genre{$1} = "Unknown ($1)"; } # (genre numbers are separated by nulls in ID3v2.4, # but nulls are converted to '/' by DecodeString()) while ($val =~ /(?:^|\/)(\d+)(\/|$)/g) { $genre{$1} or $genre{$1} = "Unknown ($1)"; } $val =~ s/\((\d+)\)/\($genre{$1}\)/g; $val =~ s/(^|\/)(\d+)(\/|$)/$1$genre{$2}$3/g; $val =~ s/^\(([^)]+)\)\1?$/$1/; # clean up by removing brackets and duplicates return $val; } #------------------------------------------------------------------------------ # Decode ID3 string # Inputs: 0) ExifTool object reference # 1) string beginning with encoding byte unless specified as argument # 2) optional encoding (0=ISO-8859-1, 1=UTF-16 BOM, 2=UTF-16BE, 3=UTF-8) # Returns: Decoded string in scalar context, or list of strings in list context sub DecodeString($$;$) { my ($et, $val, $enc) = @_; return '' unless length $val; unless (defined $enc) { $enc = unpack('C', $val); $val = substr($val, 1); # remove encoding byte } my @vals; if ($enc == 0 or $enc == 3) { # ISO 8859-1 or UTF-8 $val =~ s/\0+$//; # remove any null padding # (must split before converting because conversion routines truncate at null) @vals = split "\0", $val; foreach $val (@vals) { $val = $et->Decode($val, $enc ? 'UTF8' : 'Latin'); } } elsif ($enc == 1 or $enc == 2) { # UTF-16 with BOM, or UTF-16BE my $bom = "\xfe\xff"; my %order = ( "\xfe\xff" => 'MM', "\xff\xfe", => 'II' ); for (;;) { my $v; # split string at null terminators on word boundaries if ($val =~ s/((..)*?)\0\0//s) { $v = $1; } else { last unless length $val > 1; $v = $val; $val = ''; } $bom = $1 if $v =~ s/^(\xfe\xff|\xff\xfe)//; push @vals, $et->Decode($v, 'UCS2', $order{$bom}); } } else { $val =~ s/\0+$//; return "<Unknown encoding $enc> $val"; } return @vals if wantarray; return join('/',@vals); } #------------------------------------------------------------------------------ # Convert sync-safe integer to a number we can use # Inputs: 0) int32u sync-safe value # Returns: actual number or undef on invalid value sub UnSyncSafe($) { my $val = shift; return undef if $val & 0x80808080; return ($val & 0x0000007f) | (($val & 0x00007f00) >> 1) | (($val & 0x007f0000) >> 2) | (($val & 0x7f000000) >> 3); } #------------------------------------------------------------------------------ # Process ID3v2 information # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref sub ProcessID3v2($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $offset = $$dirInfo{DirStart}; my $size = $$dirInfo{DirLen}; my $vers = $$dirInfo{Version}; my $verbose = $et->Options('Verbose'); my $len; # frame data length $verbose and $et->VerboseDir($tagTablePtr->{GROUPS}->{1}, 0, $size); for (;;$offset+=$len) { my ($id, $flags, $hi); if ($vers < 0x0300) { # version 2.2 frame header is 6 bytes last if $offset + 6 > $size; ($id, $hi, $len) = unpack("x${offset}a3Cn",$$dataPt); last if $id eq "\0\0\0"; $len += $hi << 16; $offset += 6; } else { # version 2.3/2.4 frame header is 10 bytes last if $offset + 10 > $size; ($id, $len, $flags) = unpack("x${offset}a4Nn",$$dataPt); last if $id eq "\0\0\0\0"; $offset += 10; # length is a "sync-safe" integer by the ID3v2.4 specification, but # reportedly some versions of iTunes write this as a normal integer # (ref http://www.id3.org/iTunes) while ($vers >= 0x0400 and $len > 0x7f and not $len & 0x80808080) { my $oldLen = $len; $len = UnSyncSafe($len); if (not defined $len or $offset + $len + 10 > $size) { $et->Warn('Invalid ID3 frame size'); last; } # check next ID to see if it makes sense my $nextID = substr($$dataPt, $offset + $len, 4); last if $$tagTablePtr{$nextID}; # try again with the incorrect length word (patch for iTunes bug) last if $offset + $oldLen + 10 > $size; $nextID = substr($$dataPt, $offset + $len, 4); $len = $oldLen if $$tagTablePtr{$nextID}; last; # yes, "while" was really a "goto" in disguise } } last if $offset + $len > $size; my $tagInfo = $et->GetTagInfo($tagTablePtr, $id); unless ($tagInfo) { my $otherTable = $otherTable{$tagTablePtr}; $tagInfo = $et->GetTagInfo($otherTable, $id) if $otherTable; if ($tagInfo) { $et->WarnOnce("Frame '$id' is not valid for this ID3 version", 1); } else { next unless $verbose or $et->Options('Unknown'); $id =~ tr/-A-Za-z0-9_//dc; $id = 'unknown' unless length $id; unless ($$tagTablePtr{$id}) { $tagInfo = { Name => "ID3_$id", Binary => 1 }; AddTagToTable($tagTablePtr, $id, $tagInfo); } } } # decode v2.3 and v2.4 flags my %flags; if ($flags) { if ($vers < 0x0400) { # version 2.3 flags $flags & 0x80 and $flags{Compress} = 1; $flags & 0x40 and $flags{Encrypt} = 1; $flags & 0x20 and $flags{GroupID} = 1; } else { # version 2.4 flags $flags & 0x40 and $flags{GroupID} = 1; $flags & 0x08 and $flags{Compress} = 1; $flags & 0x04 and $flags{Encrypt} = 1; $flags & 0x02 and $flags{Unsync} = 1; $flags & 0x01 and $flags{DataLen} = 1; } } if ($flags{Encrypt}) { $et->WarnOnce('Encrypted frames currently not supported'); next; } # extract the value my $val = substr($$dataPt, $offset, $len); # reverse the unsynchronization $val =~ s/\xff\x00/\xff/g if $flags{Unsync}; # read grouping identity if ($flags{GroupID}) { length($val) >= 1 or $et->Warn("Short $id frame"), next; $val = substr($val, 1); # (ignore it) } # read data length my $dataLen; if ($flags{DataLen} or $flags{Compress}) { length($val) >= 4 or $et->Warn("Short $id frame"), next; $dataLen = unpack('N', $val); # save the data length word $val = substr($val, 4); } # uncompress data if ($flags{Compress}) { if (eval { require Compress::Zlib }) { my $inflate = Compress::Zlib::inflateInit(); my ($buff, $stat); $inflate and ($buff, $stat) = $inflate->inflate($val); if ($inflate and $stat == Compress::Zlib::Z_STREAM_END()) { $val = $buff; } else { $et->Warn("Error inflating $id frame"); next; } } else { $et->WarnOnce('Install Compress::Zlib to decode compressed frames'); next; } } # validate data length if (defined $dataLen) { $dataLen = UnSyncSafe($dataLen); defined $dataLen or $et->Warn("Invalid length for $id frame"), next; $dataLen == length($val) or $et->Warn("Wrong length for $id frame"), next; } unless ($tagInfo) { $verbose and $et->VerboseInfo($id, $tagInfo, Table => $tagTablePtr, Value => $val, DataPt => $dataPt, DataPos => $$dirInfo{DataPos}, Size => $len, Start => $offset, ); next; } # # decode data in this frame (it is bad form to hard-code these, but the ID3 frame formats # are so variable that it would be more work to define format types for each of them) # my $lang; my $valLen = length($val); # actual value length (after decompression, etc) if ($id =~ /^(TXX|TXXX)$/) { # two encoded strings separated by a null my @vals = DecodeString($et, $val); foreach (0..1) { $vals[$_] = '' unless defined $vals[$_]; } ($val = "($vals[0]) $vals[1]") =~ s/^\(\) //; } elsif ($id =~ /^T/ or $id =~ /^(IPL|IPLS)$/) { $val = DecodeString($et, $val); } elsif ($id =~ /^(WXX|WXXX)$/) { # one encoded string and one Latin string separated by a null my $enc = unpack('C', $val); my $url; if ($enc == 1 or $enc == 2) { ($val, $url) = ($val =~ /^(.(?:..)*?)\0\0(.*)/s); } else { ($val, $url) = ($val =~ /^(..*?)\0(.*)/s); } unless (defined $val and defined $url) { $et->Warn("Invalid $id frame value"); next; } $val = DecodeString($et, $val); $url =~ s/\0.*//s; $val = length($val) ? "($val) $url" : $url; } elsif ($id =~ /^W/) { $val =~ s/\0.*//s; # truncate at null } elsif ($id =~ /^(COM|COMM|ULT|USLT)$/) { $valLen > 4 or $et->Warn("Short $id frame"), next; $lang = substr($val,1,3); my @vals = DecodeString($et, substr($val,4), Get8u(\$val,0)); foreach (0..1) { $vals[$_] = '' unless defined $vals[$_]; } $val = length($vals[0]) ? "($vals[0]) $vals[1]" : $vals[1]; } elsif ($id eq 'USER') { $valLen > 4 or $et->Warn("Short $id frame"), next; $lang = substr($val,1,3); $val = DecodeString($et, substr($val,4), Get8u(\$val,0)); } elsif ($id =~ /^(CNT|PCNT)$/) { $valLen >= 4 or $et->Warn("Short $id frame"), next; my ($cnt, @xtra) = unpack('NC*', $val); $cnt = ($cnt << 8) + $_ foreach @xtra; $val = $cnt; } elsif ($id =~ /^(PIC|APIC)$/) { $valLen >= 4 or $et->Warn("Short $id frame"), next; my ($hdr, $attr); my $enc = unpack('C', $val); if ($enc == 1 or $enc == 2) { $hdr = ($id eq 'PIC') ? ".(...)(.)((?:..)*?)\0\0" : ".(.*?)\0(.)((?:..)*?)\0\0"; } else { $hdr = ($id eq 'PIC') ? ".(...)(.)(.*?)\0" : ".(.*?)\0(.)(.*?)\0"; } # remove header (encoding, image format or MIME type, picture type, description) $val =~ s/^$hdr//s or $et->Warn("Invalid $id frame"), next; my @attrs = ($1, ord($2), DecodeString($et, $3, $enc)); my $i = 1; foreach $attr (@attrs) { # must store descriptions even if they are empty to maintain # sync between copy numbers when multiple images $et->HandleTag($tagTablePtr, "$id-$i", $attr); ++$i; } } elsif ($id eq 'POP' or $id eq 'POPM') { # _email, 00, rating(1), counter(4-N) my ($email, $dat) = ($val =~ /^([^\0]*)\0(.*)$/s); unless (defined $dat and length($dat)) { $et->Warn("Invalid $id frame"); next; } my ($rating, @xtra) = unpack('C*', $dat); my $cnt = 0; $cnt = ($cnt << 8) + $_ foreach @xtra; $val = "$email $rating $cnt"; } elsif ($id eq 'OWNE') { # enc(1), _price, 00, _date(8), Seller my @strs = DecodeString($et, $val); $strs[1] =~ s/^(\d{4})(\d{2})(\d{2})/$1:$2:$3 /s if $strs[1]; # format date $val = "@strs"; } elsif ($id eq 'RVA' or $id eq 'RVAD') { my @dat = unpack('C*', $val); my $flag = shift @dat; my $bits = shift @dat or $et->Warn("Short $id frame"), next; my $bytes = int(($bits + 7) / 8); my @parse = (['Right',0,2,0x01],['Left',1,3,0x02],['Back-right',4,6,0x04], ['Back-left',5,7,0x08],['Center',8,9,0x10],['Bass',10,11,0x20]); $val = ''; while (@parse) { my $elem = shift @parse; my $j = $$elem[2] * $bytes; last if scalar(@dat) < $j + $bytes; my $i = $$elem[1] * $bytes; $val .= ', ' if $val; my ($rel, $pk, $b); for ($rel=0, $pk=0, $b=0; $b<$bytes; ++$b) { $rel = $rel * 256 + $dat[$i + $b]; $pk = $pk * 256 + $dat[$j + $b]; # (peak - not used in printout) } $rel =-$rel unless $flag & $$elem[3]; $val .= sprintf("%+.1f%% %s", 100 * $rel / ((1<<$bits)-1), $$elem[0]); } } elsif ($id eq 'RVA2') { my ($pos, $id) = $val=~/^([^\0]*)\0/s ? (length($1)+1, $1) : (1, ''); my @vals; while ($pos + 4 <= $valLen) { my $type = Get8u(\$val, $pos); my $str = ({ 0 => 'Other', 1 => 'Master', 2 => 'Front-right', 3 => 'Front-left', 4 => 'Back-right', 5 => 'Back-left', 6 => 'Front-centre', 7 => 'Back-centre', 8 => 'Subwoofer', }->{$type} || "Unknown($type)"); my $db = Get16s(\$val,$pos+1) / 512; # convert dB to percent as displayed by iTunes 10.5 # (not sure why I need to divide by 20 instead of 10 as expected - PH) push @vals, sprintf('%+.1f%% %s', 10**($db/20+2)-100, $str); # step to next channel (ignoring peak volume) $pos += 4 + int((Get8u(\$val,$pos+3) + 7) / 8); } $val = join ', ', @vals; $val .= " ($id)" if $id; } elsif ($id eq 'PRIV') { # save version number to set group1 name for tag later $$et{ID3_Ver} = $$tagTablePtr{GROUPS}{1}; $et->HandleTag($tagTablePtr, $id, $val); next; } elsif ($$tagInfo{Format} or $$tagInfo{SubDirectory}) { $et->HandleTag($tagTablePtr, $id, undef, DataPt => \$val); next; } elsif (not $$tagInfo{Binary}) { $et->Warn("Don't know how to handle $id frame"); next; } if ($lang and $lang =~ /^[a-z]{3}$/i and $lang ne 'eng') { $tagInfo = Image::ExifTool::GetLangInfo($tagInfo, lc $lang); } $et->HandleTag($tagTablePtr, $id, $val, TagInfo => $tagInfo, DataPt => $dataPt, DataPos => $$dirInfo{DataPos}, Size => $len, Start => $offset, ); } } #------------------------------------------------------------------------------ # Extract ID3 information from an audio file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this file didn't contain ID3 information # - also processes audio data if any ID3 information was found # - sets ExifTool DoneID3 to 1 when called, or to 2 if an ID3v1 trailer exists sub ProcessID3($$) { my ($et, $dirInfo) = @_; return 0 if $$et{DoneID3}; # avoid infinite recursion $$et{DoneID3} = 1; # allow this to be called with either RAF or DataPt my $raf = $$dirInfo{RAF} || new File::RandomAccess($$dirInfo{DataPt}); my ($buff, %id3Header, %id3Trailer, $hBuff, $tBuff, $eBuff, $tagTablePtr); my $rtnVal = 0; my $hdrEnd = 0; my $id3Len = 0; # read first 3 bytes of file $raf->Seek(0, 0); return 0 unless $raf->Read($buff, 3) == 3; # # identify ID3v2 header # while ($buff =~ /^ID3/) { $rtnVal = 1; $raf->Read($hBuff, 7) == 7 or $et->Warn('Short ID3 header'), last; my ($vers, $flags, $size) = unpack('nCN', $hBuff); $size = UnSyncSafe($size); defined $size or $et->Warn('Invalid ID3 header'), last; my $verStr = sprintf("2.%d.%d", $vers >> 8, $vers & 0xff); if ($vers >= 0x0500) { $et->Warn("Unsupported ID3 version: $verStr"); last; } unless ($raf->Read($hBuff, $size) == $size) { $et->Warn('Truncated ID3 data'); last; } # this flag only indicates use of unsynchronized frames in ID3v2.4 if ($flags & 0x80 and $vers < 0x0400) { # reverse the unsynchronization $hBuff =~ s/\xff\x00/\xff/g; } my $pos = 10; if ($flags & 0x40) { # skip the extended header $size >= 4 or $et->Warn('Bad ID3 extended header'), last; my $len = unpack('N', $hBuff); if ($len > length($hBuff) - 4) { $et->Warn('Truncated ID3 extended header'); last; } $hBuff = substr($hBuff, $len + 4); $pos += $len + 4; } if ($flags & 0x10) { # ignore v2.4 footer (10 bytes long) $raf->Seek(10, 1); } %id3Header = ( DataPt => \$hBuff, DataPos => $pos, DirStart => 0, DirLen => length($hBuff), Version => $vers, DirName => "ID3v$verStr", ); $id3Len += length($hBuff) + 10; if ($vers >= 0x0400) { $tagTablePtr = GetTagTable('Image::ExifTool::ID3::v2_4'); } elsif ($vers >= 0x0300) { $tagTablePtr = GetTagTable('Image::ExifTool::ID3::v2_3'); } else { $tagTablePtr = GetTagTable('Image::ExifTool::ID3::v2_2'); } $hdrEnd = $raf->Tell(); last; } # # read ID3v1 trailer if it exists # if ($raf->Seek(-128, 2) and $raf->Read($tBuff, 128) == 128 and $tBuff =~ /^TAG/) { $$et{DoneID3} = 2; # set to 2 as flag that trailer exists %id3Trailer = ( DataPt => \$tBuff, DataPos => $raf->Tell() - 128, DirStart => 0, DirLen => length($tBuff), ); $id3Len += length($tBuff); $rtnVal = 1; # load 'Enhanced TAG' information if available if ($raf->Seek(-355, 2) and $raf->Read($eBuff, 227) == 227 and $eBuff =~ /^TAG+/) { $id3Trailer{EnhancedTAG} = \$eBuff; } } # # process the the information # if ($rtnVal) { # first process audio data if it exists if ($$dirInfo{RAF}) { my $oldType = $$et{FILE_TYPE}; # save file type # check current file type first my @types = grep /^$oldType$/, @audioFormats; push @types, grep(!/^$oldType$/, @audioFormats); my $type; foreach $type (@types) { # seek to end of ID3 header $raf->Seek($hdrEnd, 0); # set type for this file if we are successful $$et{FILE_TYPE} = $type; my $module = $audioModule{$type} || $type; require "Image/ExifTool/$module.pm" or next; my $func = "Image::ExifTool::${module}::Process$type"; # process the file no strict 'refs'; &$func($et, $dirInfo) and last; use strict 'refs'; } $$et{FILE_TYPE} = $oldType; # restore original file type } # set file type to MP3 if we didn't find audio data $et->SetFileType('MP3'); # record the size of the ID3 metadata $et->FoundTag('ID3Size', $id3Len); # process ID3v2 header if it exists if (%id3Header) { $et->VPrint(0, "$id3Header{DirName}:\n"); $et->ProcessDirectory(\%id3Header, $tagTablePtr); } # process ID3v1 trailer if it exists if (%id3Trailer) { $et->VPrint(0, "ID3v1:\n"); SetByteOrder('MM'); $tagTablePtr = GetTagTable('Image::ExifTool::ID3::v1'); $et->ProcessDirectory(\%id3Trailer, $tagTablePtr); # process "Enhanced TAG" information if available if ($id3Trailer{EnhancedTAG}) { $et->VPrint(0, "ID3v1 Enhanced TAG:\n"); $tagTablePtr = GetTagTable('Image::ExifTool::ID3::v1_Enh'); $id3Trailer{DataPt} = $id3Trailer{EnhancedTAG}; $id3Trailer{DataPos} -= 227; # (227 = length of Enhanced TAG block) $id3Trailer{DirLen} = 227; $et->ProcessDirectory(\%id3Trailer, $tagTablePtr); } } } # return file pointer to start of file to read audio data if necessary $raf->Seek(0, 0); return $rtnVal; } #------------------------------------------------------------------------------ # Extract ID3 information from an MP3 audio file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid MP3 file sub ProcessMP3($$) { my ($et, $dirInfo) = @_; my $rtnVal = 0; # must first check for leading/trailing ID3 information # (and process the rest of the file if found) unless ($$et{DoneID3}) { $rtnVal = ProcessID3($et, $dirInfo); } # check for MPEG A/V data if not already processed above unless ($rtnVal) { my $raf = $$dirInfo{RAF}; my $buff; # # extract information from first audio/video frame headers # (if found in the first $scanLen bytes) # # scan further into a file that should be an MP3 my $scanLen = ($$et{FILE_EXT} and $$et{FILE_EXT} eq 'MP3') ? 8192 : 256; if ($raf->Read($buff, $scanLen)) { require Image::ExifTool::MPEG; if ($buff =~ /\0\0\x01(\xb3|\xc0)/) { # look for A/V headers in first 64kB my $buf2; $raf->Read($buf2, 0x10000 - $scanLen) and $buff .= $buf2; $rtnVal = 1 if Image::ExifTool::MPEG::ParseMPEGAudioVideo($et, \$buff); } else { # look for audio frame sync in first $scanLen bytes # (set MP3 flag to 1 so this will fail unless layer 3 audio) my $ext = $$et{FILE_EXT} || ''; my $mp3 = ($ext eq 'MUS') ? 0 : 1; # MUS files are MP2 $rtnVal = 1 if Image::ExifTool::MPEG::ParseMPEGAudio($et, \$buff, $mp3); } } } # check for an APE trailer if this was a valid A/V file and we haven't already done it if ($rtnVal and not $$et{DoneAPE}) { require Image::ExifTool::APE; Image::ExifTool::APE::ProcessAPE($et, $dirInfo); } return $rtnVal; } 1; # end __END__ =head1 NAME Image::ExifTool::ID3 - Read ID3 meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract ID3 information from audio files. ID3 information is found in MP3 and various other types of audio files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.id3.org/> =item L<http://www.mp3-tech.org/> =item L<http://www.fortunecity.com/underworld/sonic/3/id3tag.html> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/ID3 Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Import.pm���������������������������������������������������000644 �000765 �000024 �00000026561 12642461312 021527� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Import.pm # # Description: Import CSV and JSON database files # # Revisions: 2011-03-05 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::Import; use strict; require Exporter; use vars qw($VERSION @ISA @EXPORT_OK); $VERSION = '1.05'; @ISA = qw(Exporter); @EXPORT_OK = qw(ReadCSV ReadJSON); sub ReadJSONObject($;$); my %unescapeJSON = ( 't'=>"\t", 'n'=>"\n", 'r'=>"\r" ); my $charset; #------------------------------------------------------------------------------ # Read CSV file # Inputs: 0) CSV file name or file ref, 1) database hash ref, 2) missing tag value # Returns: undef on success, or error string # Notes: There are various flavours of CSV, but here we assume that only # double quotes are escaped, and they are escaped by doubling them sub ReadCSV($$;$) { local ($_, $/); my ($file, $database, $missingValue) = @_; my ($buff, @tags, $found, $err, $raf, $openedFile); if (ref $file eq 'GLOB') { $raf = new File::RandomAccess($file); $file = 'CSV file'; } else { open CSVFILE, $file or return "Error opening CSV file '$file'"; binmode CSVFILE; $openedFile = 1; $raf = new File::RandomAccess(\*CSVFILE); } # set input record separator by first newline found in the file # (safe because first line should contain only tag names) while ($raf->Read($buff, 65536)) { $buff =~ /(\x0d\x0a|\x0d|\x0a)/ and $/ = $1, last; } $raf->Seek(0,0); while ($raf->ReadLine($buff)) { my (@vals, $v, $i, %fileInfo); my @toks = split ',', $buff; while (@toks) { ($v = shift @toks) =~ s/^ +//; # remove leading spaces if ($v =~ s/^"//) { # quoted value must end in an odd number of quotes while ($v !~ /("+)\s*$/ or not length($1) & 1) { if (@toks) { $v .= ',' . shift @toks; } else { # read another line from the file $raf->ReadLine($buff) or last; @toks = split ',', $buff; last unless @toks; $v .= shift @toks; } } $v =~ s/"\s*$//; # remove trailing quote and whitespace $v =~ s/""/"/g; # un-escape quotes } else { $v =~ s/[ \n\r]+$//;# remove trailing spaces/newlines } push @vals, $v; } if (@tags) { # save values for each tag for ($i=0; $i<@vals and $i<@tags; ++$i) { next unless length $vals[$i]; # ignore empty entries # delete tag (set value to undef) if value is same as missing tag $fileInfo{$tags[$i]} = (defined $missingValue and $vals[$i] eq $missingValue) ? undef : $vals[$i]; } # figure out the file name to use if ($fileInfo{SourceFile}) { $$database{$fileInfo{SourceFile}} = \%fileInfo; $found = 1; } } else { # the first row should be the tag names foreach (@vals) { # terminate at first blank tag name (eg. extra comma at end of line) last unless length $_; @tags or s/^\xef\xbb\xbf//; # remove UTF-8 BOM if it exists /^[-\w]+(:[-\w+]+)?#?$/ or $err = "Invalid tag name '$_'", last; push(@tags, $_); } last if $err; @tags or $err = 'No tags found', last; } } close CSVFILE if $openedFile; undef $raf; $err = 'No SourceFile column' unless $found or $err; return $err ? "$err in $file" : undef; } #------------------------------------------------------------------------------ # Convert unicode code point to UTF-8 # Inputs: 0) integer Unicode character # Returns: UTF-8 bytes sub ToUTF8($) { require Image::ExifTool::Charset; return Image::ExifTool::Charset::Recompose(undef, [$_[0]], $charset); } #------------------------------------------------------------------------------ # Read JSON object from file # Inputs: 0) JSON file handle, 1) optional file buffer reference # Returns: JSON object (scalar, hash ref, or array ref), or undef on EOF or # empty object or array (and sets $$buffPt to empty string on EOF) # Notes: position in buffer is significant sub ReadJSONObject($;$) { my ($fp, $buffPt) = @_; # initialize buffer if necessary my ($pos, $readMore, $rtnVal, $tok, $key, $didBOM); if ($buffPt) { $pos = pos $$buffPt; } else { my $buff = ''; $buffPt = \$buff; $pos = 0; } Tok: for (;;) { if ($pos >= length $$buffPt or $readMore) { # read another 64kB and add to unparsed data my $offset = length($$buffPt) - $pos; $$buffPt = substr($$buffPt, $pos) if $offset; ($fp and read $fp, $$buffPt, 65536, $offset) or $$buffPt = '', last; unless ($didBOM) { $$buffPt =~ s/^\xef\xbb\xbf//; # remove UTF-8 BOM if it exists $didBOM = 1; } $pos = pos($$buffPt) = 0; $readMore = 0; } unless ($tok) { # skip white space and find next character $$buffPt =~ /(\S)/g or $pos = length($$buffPt), next; $tok = $1; $pos = pos $$buffPt; } # see what type of object this is if ($tok eq '{') { # object (hash) $rtnVal = { } unless defined $rtnVal; for (;;) { # read "KEY":"VALUE" pairs unless (defined $key) { $key = ReadJSONObject($fp, $buffPt); $pos = pos $$buffPt; } # ($key may be undef for empty JSON object) if (defined $key) { # scan to delimiting ':' $$buffPt =~ /(\S)/g or $readMore = 1, next Tok; $1 eq ':' or return undef; # error if not a colon my $val = ReadJSONObject($fp, $buffPt); $pos = pos $$buffPt; return undef unless defined $val; $$rtnVal{$key} = $val; undef $key; } # scan to delimiting ',' or bounding '}' $$buffPt =~ /(\S)/g or $readMore = 1, next Tok; last if $1 eq '}'; # check for end of object $1 eq ',' or return undef; # error if not a comma } } elsif ($tok eq '[') { # array $rtnVal = [ ] unless defined $rtnVal; for (;;) { my $item = ReadJSONObject($fp, $buffPt); $pos = pos $$buffPt; # ($item may be undef for empty array) push @$rtnVal, $item if defined $item; # scan to delimiting ',' or bounding ']' $$buffPt =~ /(\S)/g or $readMore = 1, next Tok; last if $1 eq ']'; # check for end of array $1 eq ',' or return undef; # error if not a comma } } elsif ($tok eq '"') { # quoted string for (;;) { $$buffPt =~ /(\\*)"/g or $readMore = 1, next Tok; last unless length($1) & 1; # check for escaped quote } $rtnVal = substr($$buffPt, $pos, pos($$buffPt)-$pos-1); # unescape characters $rtnVal =~ s/\\u([0-9a-f]{4})/ToUTF8(hex $1)/ige; $rtnVal =~ s/\\(.)/$unescapeJSON{$1}||$1/sge; # decode base64 (binary data) values if ($rtnVal =~ /^base64:[A-Za-z0-9+\/]*={0,2}$/ and length($rtnVal) % 4 == 3) { require Image::ExifTool::XMP; $rtnVal = ${Image::ExifTool::XMP::DecodeBase64(substr($rtnVal,7))}; } } elsif ($tok eq ']' or $tok eq '}' or $tok eq ',') { # return undef for empty object, array, or list item # (empty list item actually not valid JSON) pos($$buffPt) = pos($$buffPt) - 1; } else { # number, 'true', 'false', 'null' $$buffPt =~ /([\s:,\}\]])/g or $readMore = 1, next; pos($$buffPt) = pos($$buffPt) - 1; $rtnVal = $tok . substr($$buffPt, $pos, pos($$buffPt)-$pos); } last; } return $rtnVal; } #------------------------------------------------------------------------------ # Read JSON file # Inputs: 0) JSON file name or file ref, 1) database hash ref, # 2) flag to delete "-" tags, 3) character set # Returns: undef on success, or error string sub ReadJSON($$;$$) { local $_; my ($file, $database, $missingValue, $chset) = @_; my ($fp, $openedFile); # initialize character set for converting "\uHHHH" chars $charset = $chset || 'UTF8'; if (ref $file eq 'GLOB') { $fp = $file; $file = 'JSON file'; } else { open JSONFILE, $file or return "Error opening JSON file '$file'"; binmode JSONFILE; $fp = \*JSONFILE; $openedFile = 1; } my $obj = ReadJSONObject($fp); close $fp if $openedFile; unless (ref $obj eq 'ARRAY') { ref $obj eq 'HASH' or return "Format error in JSON file '$file'"; $obj = [ $obj ]; } my ($info, $found); foreach $info (@$obj) { next unless ref $info eq 'HASH'; # assume a SourceFile of '*' if none specified defined $$info{SourceFile} or $$info{SourceFile} = '*'; if (defined $missingValue) { $$info{$_} eq $missingValue and $$info{$_} = undef foreach keys %$info; } $$database{$$info{SourceFile}} = $info; $found = 1; } return $found ? undef : "No valid JSON objects in '$file'"; } 1; # end __END__ =head1 NAME Image::ExifTool::Import - Import CSV and JSON database files =head1 SYNOPSIS use Image::ExifTool::Import qw(ReadCSV ReadJSON); $err = ReadCSV($csvFile, \%database); $err = ReadJSON($jsonfile, \%database); =head1 DESCRIPTION This module contains routines for importing tag information from CSV (Comma Separated Value) and JSON (JavaScript Object Notation) database files. =head1 EXPORTS Exports nothing by default, but ReadCSV and ReadJSON may be exported. =head1 METHODS =head2 ReadCSV / ReadJSON Read CSV or JSON file into a database hash. =over 4 =item Inputs: 0) CSV file name or file reference. 1) Hash reference for database object. 2) Optional string used to represent an undefined (missing) tag value. (Used for deleting tags.) 3) [ReadJSON only] Optional character set for converting Unicode escape sequences in strings. Defaults to "UTF8". See the ExifTool Charset option for a list of valid settings. =item Return Value: These functions return an error string, or undef on success and populate the database hash with entries from the CSV or JSON file. Entries are keyed based on the SourceFile column of the CSV or JSON information, and are stored as hash lookups of tag name/value for each SourceFile. =back =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/InDesign.pm�������������������������������������������������000644 �000765 �000024 �00000024616 12642461313 021755� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: InDesign.pm # # Description: Read/write meta information in Adobe InDesign files # # Revisions: 2009-06-17 - P. Harvey Created # # References: 1) http://www.adobe.com/devnet/xmp/pdfs/XMPSpecificationPart3.pdf #------------------------------------------------------------------------------ package Image::ExifTool::InDesign; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.04'; # map for writing metadata to InDesign files (currently only write XMP) my %indMap = ( XMP => 'IND', ); # GUID's used in InDesign files my $masterPageGUID = "\x06\x06\xed\xf5\xd8\x1d\x46\xe5\xbd\x31\xef\xe7\xfe\x74\xb7\x1d"; my $objectHeaderGUID = "\xde\x39\x39\x79\x51\x88\x4b\x6c\x8E\x63\xee\xf8\xae\xe0\xdd\x38"; my $objectTrailerGUID = "\xfd\xce\xdb\x70\xf7\x86\x4b\x4f\xa4\xd3\xc7\x28\xb3\x41\x71\x06"; #------------------------------------------------------------------------------ # Read or write meta information in an InDesign file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid InDesign file, or -1 on write error sub ProcessIND($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $outfile = $$dirInfo{OutFile}; my ($hdr, $buff, $buf2, $err, $writeLen, $foundXMP); # validate the InDesign file return 0 unless $raf->Read($hdr, 16) == 16; return 0 unless $hdr eq $masterPageGUID; return 0 unless $raf->Read($buff, 8) == 8; $et->SetFileType($buff eq 'DOCUMENT' ? 'INDD' : 'IND'); # set the FileType tag # read the master pages $raf->Seek(0, 0) or $err = 'Seek error', goto DONE; unless ($raf->Read($buff, 4096) == 4096 and $raf->Read($buf2, 4096) == 4096) { $err = 'Unexpected end of file'; goto DONE; # (goto's can be our friend) } SetByteOrder('II'); unless ($buf2 =~ /^\Q$masterPageGUID/) { $err = 'Second master page is invalid'; goto DONE; } my $seq1 = Get64u(\$buff, 264); my $seq2 = Get64u(\$buf2, 264); # take the most current master page my $curPage = $seq2 > $seq1 ? \$buf2 : \$buff; # byte order of stream data may be different than headers my $streamInt32u = Get8u($curPage, 24); if ($streamInt32u == 1) { $streamInt32u = 'V'; # little-endian int32u } elsif ($streamInt32u == 2) { $streamInt32u = 'N'; # big-endian int32u } else { $err = 'Invalid stream byte order'; goto DONE; } my $pages = Get32u($curPage, 280); $pages < 2 and $err = 'Invalid page count', goto DONE; my $pos = $pages * 4096; if ($pos > 0x7fffffff and not $et->Options('LargeFileSupport')) { $err = 'InDesign files larger than 2 GB not supported (LargeFileSupport not set)'; goto DONE; } if ($outfile) { # make XMP the preferred group for writing $et->InitWriteDirs(\%indMap, 'XMP'); Write($outfile, $buff, $buf2) or $err = 1, goto DONE; my $result = Image::ExifTool::CopyBlock($raf, $outfile, $pos - 8192); unless ($result) { $err = defined $result ? 'Error reading InDesign database' : 1; goto DONE; } $writeLen = 0; } else { $raf->Seek($pos, 0) or $err = 'Seek error', goto DONE; } # scan through the contiguous objects for XMP my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); for (;;) { $raf->Read($hdr, 32) or last; unless (length($hdr) == 32 and $hdr =~ /^\Q$objectHeaderGUID/) { # this must be null padding or we have an error $hdr =~ /^\0+$/ or $err = 'Corrupt file or unsupported InDesign version'; last; } my $len = Get32u(\$hdr, 24); if ($verbose) { printf $out "Contiguous object at offset 0x%x (%d bytes):\n", $raf->Tell(), $len; if ($verbose > 2) { my $len2 = $len < 1024000 ? $len : 1024000; my %parms = (Addr => $raf->Tell()); $parms{MaxLen} = $verbose > 3 ? 1024 : 96 if $verbose < 5; $raf->Seek(-$raf->Read($buff, $len2), 1) or $err = 1; HexDump(\$buff, undef, %parms); } } # check for XMP if stream data is long enough # (56 bytes is just enough for XMP header) if ($len > 56) { $raf->Read($buff, 56) == 56 or $err = 'Unexpected end of file', last; if ($buff =~ /^(....)<\?xpacket begin=(['"])\xef\xbb\xbf\2 id=(['"])W5M0MpCehiHzreSzNTczkc9d\3/s) { my $lenWord = $1; # save length word for writing later $len -= 4; # get length of XMP only $foundXMP = 1; # I have a sample where the XMP is 107 MB, and ActivePerl may run into # memory troubles (with its apparent 1 GB limit) if the XMP is larger # than about 400 MB, so guard against this if ($len > 300 * 1024 * 1024) { my $msg = sprintf('Insanely large XMP (%.0f MB)', $len / (1024 * 1024)); if ($outfile) { $et->Error($msg, 2) and $err = 1, last; } elsif ($et->Options('IgnoreMinorErrors')) { $et->Warn($msg); } else { $et->Warn("$msg. Ignored.", 1); $err = 1; last; } } # load and parse the XMP data unless ($raf->Seek(-52, 1) and $raf->Read($buff, $len) == $len) { $err = 'Error reading XMP stream'; last; } my %dirInfo = ( DataPt => \$buff, Parent => 'IND', NoDelete => 1, # do not allow this to be deleted when writing ); my $tagTablePtr = GetTagTable('Image::ExifTool::XMP::Main'); if ($outfile) { # validate xmp data length (should be same as length in header - 4) my $xmpLen = unpack($streamInt32u, $lenWord); unless ($xmpLen == $len) { $err = "Incorrect XMP stream length ($xmpLen should be $len)"; last; } # make sure that XMP is writable my $classID = Get32u(\$hdr, 20); $classID & 0x40000000 or $err = 'XMP stream is not writable', last; my $xmp = $et->WriteDirectory(\%dirInfo, $tagTablePtr); if ($xmp and length $xmp) { # write new xmp with leading length word $buff = pack($streamInt32u, length $xmp) . $xmp; # update header with new length and invalid checksum Set32u(length($buff), \$hdr, 24); Set32u(0xffffffff, \$hdr, 28); } else { $$et{CHANGED} = 0; # didn't change anything $et->Warn("Can't delete XMP as a block from InDesign file") if defined $xmp; # put length word back at start of stream $buff = $lenWord . $buff; } } else { $et->ProcessDirectory(\%dirInfo, $tagTablePtr); } $len = 0; # we got the full stream (nothing left to read) } else { $len -= 56; # we got 56 bytes of the stream } } else { $buff = ''; # must reset this for writing later } if ($outfile) { # write object header and data Write($outfile, $hdr, $buff) or $err = 1, last; my $result = Image::ExifTool::CopyBlock($raf, $outfile, $len); unless ($result) { $err = defined $result ? 'Truncated stream data' : 1; last; } $writeLen += 32 + length($buff) + $len; } elsif ($len) { # skip over remaining stream data $raf->Seek($len, 1) or $err = 'Seek error', last; } $raf->Read($buff, 32) == 32 or $err = 'Unexpected end of file', last; unless ($buff =~ /^\Q$objectTrailerGUID/) { $err = 'Invalid object trailer'; last; } if ($outfile) { # make sure object UID and ClassID are the same in the trailer substr($hdr,16,8) eq substr($buff,16,8) or $err = 'Non-matching object trailer', last; # write object trailer Write($outfile, $objectTrailerGUID, substr($hdr,16)) or $err = 1, last; $writeLen += 32; } } if ($outfile) { # write null padding if necessary # (InDesign files must be an even number of 4096-byte blocks) my $part = $writeLen % 4096; Write($outfile, "\0" x (4096 - $part)) or $err = 1 if $part; } DONE: if (not $err) { $et->Warn('No XMP stream to edit') if $outfile and not $foundXMP; return 1; # success! } elsif (not $outfile) { # issue warning on read error $et->Warn($err) unless $err eq '1'; } elsif ($err ne '1') { # set error and return success code $et->Error($err); } else { return -1; # write error } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::InDesign - Read/write meta information in Adobe InDesign files =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to read XMP meta information from Adobe InDesign (.IND, .INDD and .INDT) files. =head1 LIMITATIONS 1) Only XMP meta information is processed. 2) A new XMP stream may not be created, so XMP tags may only be written to InDesign files which previously contained XMP. 3) File sizes of greater than 2 GB and are currently not supported because the ability to handle large files like this is system dependent. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.adobe.com/devnet/xmp/pdfs/XMPSpecificationPart3.pdf> =back =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/IPTC.pm�����������������������������������������������������000644 �000765 �000024 �00000113474 12642461310 021012� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: IPTC.pm # # Description: Read IPTC meta information # # Revisions: Jan. 08/2003 - P. Harvey Created # Feb. 05/2004 - P. Harvey Added support for records other than 2 # # References: 1) http://www.iptc.org/IIM/ #------------------------------------------------------------------------------ package Image::ExifTool::IPTC; use strict; use vars qw($VERSION $AUTOLOAD %iptcCharset); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.53'; %iptcCharset = ( "\x1b%G" => 'UTF8', # don't translate these (at least until we handle ISO 2022 shift codes) # because the sets are only designated and not invoked # "\x1b,A" => 'Latin', # G0 = ISO 8859-1 (similar to Latin1, but codes 0x80-0x9f are missing) # "\x1b-A" => 'Latin', # G1 " # "\x1b.A" => 'Latin', # G2 # "\x1b/A" => 'Latin', # G3 ); sub ProcessIPTC($$$); sub WriteIPTC($$$); sub CheckIPTC($$$); sub PrintCodedCharset($); sub PrintInvCodedCharset($); # standard IPTC locations # (MWG specifies locations only for JPEG, TIFF and PSD -- the rest are ExifTool-defined) my %isStandardIPTC = ( 'JPEG-APP13-Photoshop-IPTC' => 1, 'TIFF-IFD0-IPTC' => 1, 'PSD-IPTC' => 1, 'MIE-IPTC' => 1, 'EPS-Photoshop-IPTC' => 1, 'PS-Photoshop-IPTC' => 1, 'EXV-APP13-Photoshop-IPTC' => 1, # set file types to 0 if they have a standard location JPEG => 0, TIFF => 0, PSD => 0, MIE => 0, EPS => 0, PS => 0, EXV => 0, ); my %fileFormat = ( 0 => 'No ObjectData', 1 => 'IPTC-NAA Digital Newsphoto Parameter Record', 2 => 'IPTC7901 Recommended Message Format', 3 => 'Tagged Image File Format (Adobe/Aldus Image data)', 4 => 'Illustrator (Adobe Graphics data)', 5 => 'AppleSingle (Apple Computer Inc)', 6 => 'NAA 89-3 (ANPA 1312)', 7 => 'MacBinary II', 8 => 'IPTC Unstructured Character Oriented File Format (UCOFF)', 9 => 'United Press International ANPA 1312 variant', 10 => 'United Press International Down-Load Message', 11 => 'JPEG File Interchange (JFIF)', 12 => 'Photo-CD Image-Pac (Eastman Kodak)', 13 => 'Bit Mapped Graphics File [.BMP] (Microsoft)', 14 => 'Digital Audio File [.WAV] (Microsoft & Creative Labs)', 15 => 'Audio plus Moving Video [.AVI] (Microsoft)', 16 => 'PC DOS/Windows Executable Files [.COM][.EXE]', 17 => 'Compressed Binary File [.ZIP] (PKWare Inc)', 18 => 'Audio Interchange File Format AIFF (Apple Computer Inc)', 19 => 'RIFF Wave (Microsoft Corporation)', 20 => 'Freehand (Macromedia/Aldus)', 21 => 'Hypertext Markup Language [.HTML] (The Internet Society)', 22 => 'MPEG 2 Audio Layer 2 (Musicom), ISO/IEC', 23 => 'MPEG 2 Audio Layer 3, ISO/IEC', 24 => 'Portable Document File [.PDF] Adobe', 25 => 'News Industry Text Format (NITF)', 26 => 'Tape Archive [.TAR]', 27 => 'Tidningarnas Telegrambyra NITF version (TTNITF DTD)', 28 => 'Ritzaus Bureau NITF version (RBNITF DTD)', 29 => 'Corel Draw [.CDR]', ); # main IPTC tag table # Note: ALL entries in main IPTC table (except PROCESS_PROC) must be SubDirectory # entries, each specifying a TagTable. %Image::ExifTool::IPTC::Main = ( GROUPS => { 2 => 'Image' }, PROCESS_PROC => \&ProcessIPTC, WRITE_PROC => \&WriteIPTC, 1 => { Name => 'IPTCEnvelope', SubDirectory => { TagTable => 'Image::ExifTool::IPTC::EnvelopeRecord', }, }, 2 => { Name => 'IPTCApplication', SubDirectory => { TagTable => 'Image::ExifTool::IPTC::ApplicationRecord', }, }, 3 => { Name => 'IPTCNewsPhoto', SubDirectory => { TagTable => 'Image::ExifTool::IPTC::NewsPhoto', }, }, 7 => { Name => 'IPTCPreObjectData', SubDirectory => { TagTable => 'Image::ExifTool::IPTC::PreObjectData', }, }, 8 => { Name => 'IPTCObjectData', SubDirectory => { TagTable => 'Image::ExifTool::IPTC::ObjectData', }, }, 9 => { Name => 'IPTCPostObjectData', Groups => { 1 => 'IPTC#' }, #(just so this shows up in group list) SubDirectory => { TagTable => 'Image::ExifTool::IPTC::PostObjectData', }, }, 240 => { Name => 'IPTCFotoStation', SubDirectory => { TagTable => 'Image::ExifTool::IPTC::FotoStation', }, }, ); # Record 1 -- EnvelopeRecord %Image::ExifTool::IPTC::EnvelopeRecord = ( GROUPS => { 2 => 'Other' }, WRITE_PROC => \&WriteIPTC, CHECK_PROC => \&CheckIPTC, WRITABLE => 1, 0 => { Name => 'EnvelopeRecordVersion', Format => 'int16u', Mandatory => 1, }, 5 => { Name => 'Destination', Flags => 'List', Groups => { 2 => 'Location' }, Format => 'string[0,1024]', }, 20 => { Name => 'FileFormat', Groups => { 2 => 'Image' }, Format => 'int16u', PrintConv => \%fileFormat, }, 22 => { Name => 'FileVersion', Groups => { 2 => 'Image' }, Format => 'int16u', }, 30 => { Name => 'ServiceIdentifier', Format => 'string[0,10]', }, 40 => { Name => 'EnvelopeNumber', Format => 'digits[8]', }, 50 => { Name => 'ProductID', Flags => 'List', Format => 'string[0,32]', }, 60 => { Name => 'EnvelopePriority', Format => 'digits[1]', PrintConv => { 0 => '0 (reserved)', 1 => '1 (most urgent)', 2 => 2, 3 => 3, 4 => 4, 5 => '5 (normal urgency)', 6 => 6, 7 => 7, 8 => '8 (least urgent)', 9 => '9 (user-defined priority)', }, }, 70 => { Name => 'DateSent', Groups => { 2 => 'Time' }, Format => 'digits[8]', Shift => 'Time', ValueConv => 'Image::ExifTool::Exif::ExifDate($val)', ValueConvInv => 'Image::ExifTool::IPTC::IptcDate($val)', PrintConvInv => 'Image::ExifTool::IPTC::InverseDateOrTime($val)', }, 80 => { Name => 'TimeSent', Groups => { 2 => 'Time' }, Format => 'string[11]', Shift => 'Time', ValueConv => 'Image::ExifTool::Exif::ExifTime($val)', ValueConvInv => 'Image::ExifTool::IPTC::IptcTime($val)', PrintConvInv => 'Image::ExifTool::IPTC::InverseDateOrTime($val)', }, 90 => { Name => 'CodedCharacterSet', Notes => q{ values are entered in the form "ESC X Y[, ...]". The escape sequence for UTF-8 character coding is "ESC % G", but this is displayed as "UTF8" for convenience. Either string may be used when writing. The value of this tag affects the decoding of string values in the Application and NewsPhoto records. This tag is marked as "unsafe" to prevent it from being copied by default in a group operation because existing tags in the destination image may use a different encoding. When creating a new IPTC record from scratch, it is suggested that this be set to "UTF8" if special characters are a possibility }, Protected => 1, Format => 'string[0,32]', # convert ISO 2022 escape sequences to a more readable format PrintConv => \&PrintCodedCharset, PrintConvInv => \&PrintInvCodedCharset, }, 100 => { Name => 'UniqueObjectName', Format => 'string[14,80]', }, 120 => { Name => 'ARMIdentifier', Format => 'int16u', }, 122 => { Name => 'ARMVersion', Format => 'int16u', }, ); # Record 2 -- ApplicationRecord %Image::ExifTool::IPTC::ApplicationRecord = ( GROUPS => { 2 => 'Other' }, WRITE_PROC => \&WriteIPTC, CHECK_PROC => \&CheckIPTC, WRITABLE => 1, 0 => { Name => 'ApplicationRecordVersion', Format => 'int16u', Mandatory => 1, }, 3 => { Name => 'ObjectTypeReference', Format => 'string[3,67]', }, 4 => { Name => 'ObjectAttributeReference', Flags => 'List', Format => 'string[4,68]', }, 5 => { Name => 'ObjectName', Format => 'string[0,64]', }, 7 => { Name => 'EditStatus', Format => 'string[0,64]', }, 8 => { Name => 'EditorialUpdate', Format => 'digits[2]', PrintConv => { '01' => 'Additional language', }, }, 10 => { Name => 'Urgency', Format => 'digits[1]', PrintConv => { 0 => '0 (reserved)', 1 => '1 (most urgent)', 2 => 2, 3 => 3, 4 => 4, 5 => '5 (normal urgency)', 6 => 6, 7 => 7, 8 => '8 (least urgent)', 9 => '9 (user-defined priority)', }, }, 12 => { Name => 'SubjectReference', Flags => 'List', Format => 'string[13,236]', }, 15 => { Name => 'Category', Format => 'string[0,3]', }, 20 => { Name => 'SupplementalCategories', Flags => 'List', Format => 'string[0,32]', }, 22 => { Name => 'FixtureIdentifier', Format => 'string[0,32]', }, 25 => { Name => 'Keywords', Flags => 'List', Format => 'string[0,64]', }, 26 => { Name => 'ContentLocationCode', Flags => 'List', Groups => { 2 => 'Location' }, Format => 'string[3]', }, 27 => { Name => 'ContentLocationName', Flags => 'List', Groups => { 2 => 'Location' }, Format => 'string[0,64]', }, 30 => { Name => 'ReleaseDate', Groups => { 2 => 'Time' }, Format => 'digits[8]', Shift => 'Time', ValueConv => 'Image::ExifTool::Exif::ExifDate($val)', ValueConvInv => 'Image::ExifTool::IPTC::IptcDate($val)', PrintConvInv => 'Image::ExifTool::IPTC::InverseDateOrTime($val)', }, 35 => { Name => 'ReleaseTime', Groups => { 2 => 'Time' }, Format => 'string[11]', Shift => 'Time', ValueConv => 'Image::ExifTool::Exif::ExifTime($val)', ValueConvInv => 'Image::ExifTool::IPTC::IptcTime($val)', PrintConvInv => 'Image::ExifTool::IPTC::InverseDateOrTime($val)', }, 37 => { Name => 'ExpirationDate', Groups => { 2 => 'Time' }, Format => 'digits[8]', Shift => 'Time', ValueConv => 'Image::ExifTool::Exif::ExifDate($val)', ValueConvInv => 'Image::ExifTool::IPTC::IptcDate($val)', PrintConvInv => 'Image::ExifTool::IPTC::InverseDateOrTime($val)', }, 38 => { Name => 'ExpirationTime', Groups => { 2 => 'Time' }, Format => 'string[11]', Shift => 'Time', ValueConv => 'Image::ExifTool::Exif::ExifTime($val)', ValueConvInv => 'Image::ExifTool::IPTC::IptcTime($val)', PrintConvInv => 'Image::ExifTool::IPTC::InverseDateOrTime($val)', }, 40 => { Name => 'SpecialInstructions', Format => 'string[0,256]', }, 42 => { Name => 'ActionAdvised', Format => 'digits[2]', PrintConv => { '' => '', '01' => 'Object Kill', '02' => 'Object Replace', '03' => 'Object Append', '04' => 'Object Reference', }, }, 45 => { Name => 'ReferenceService', Flags => 'List', Format => 'string[0,10]', }, 47 => { Name => 'ReferenceDate', Groups => { 2 => 'Time' }, Flags => 'List', Format => 'digits[8]', Shift => 'Time', ValueConv => 'Image::ExifTool::Exif::ExifDate($val)', ValueConvInv => 'Image::ExifTool::IPTC::IptcDate($val)', PrintConvInv => 'Image::ExifTool::IPTC::InverseDateOrTime($val)', }, 50 => { Name => 'ReferenceNumber', Flags => 'List', Format => 'digits[8]', }, 55 => { Name => 'DateCreated', Groups => { 2 => 'Time' }, Format => 'digits[8]', Shift => 'Time', ValueConv => 'Image::ExifTool::Exif::ExifDate($val)', ValueConvInv => 'Image::ExifTool::IPTC::IptcDate($val)', PrintConvInv => 'Image::ExifTool::IPTC::InverseDateOrTime($val)', }, 60 => { Name => 'TimeCreated', Groups => { 2 => 'Time' }, Format => 'string[11]', Shift => 'Time', ValueConv => 'Image::ExifTool::Exif::ExifTime($val)', ValueConvInv => 'Image::ExifTool::IPTC::IptcTime($val)', PrintConvInv => 'Image::ExifTool::IPTC::InverseDateOrTime($val)', }, 62 => { Name => 'DigitalCreationDate', Groups => { 2 => 'Time' }, Format => 'digits[8]', Shift => 'Time', ValueConv => 'Image::ExifTool::Exif::ExifDate($val)', ValueConvInv => 'Image::ExifTool::IPTC::IptcDate($val)', PrintConvInv => 'Image::ExifTool::IPTC::InverseDateOrTime($val)', }, 63 => { Name => 'DigitalCreationTime', Groups => { 2 => 'Time' }, Format => 'string[11]', Shift => 'Time', ValueConv => 'Image::ExifTool::Exif::ExifTime($val)', ValueConvInv => 'Image::ExifTool::IPTC::IptcTime($val)', PrintConvInv => 'Image::ExifTool::IPTC::InverseDateOrTime($val)', }, 65 => { Name => 'OriginatingProgram', Format => 'string[0,32]', }, 70 => { Name => 'ProgramVersion', Format => 'string[0,10]', }, 75 => { Name => 'ObjectCycle', Format => 'string[1]', PrintConv => { 'a' => 'Morning', 'p' => 'Evening', 'b' => 'Both Morning and Evening', }, }, 80 => { Name => 'By-line', Flags => 'List', Format => 'string[0,32]', Groups => { 2 => 'Author' }, }, 85 => { Name => 'By-lineTitle', Flags => 'List', Format => 'string[0,32]', Groups => { 2 => 'Author' }, }, 90 => { Name => 'City', Format => 'string[0,32]', Groups => { 2 => 'Location' }, }, 92 => { Name => 'Sub-location', Format => 'string[0,32]', Groups => { 2 => 'Location' }, }, 95 => { Name => 'Province-State', Format => 'string[0,32]', Groups => { 2 => 'Location' }, }, 100 => { Name => 'Country-PrimaryLocationCode', Format => 'string[3]', Groups => { 2 => 'Location' }, }, 101 => { Name => 'Country-PrimaryLocationName', Format => 'string[0,64]', Groups => { 2 => 'Location' }, }, 103 => { Name => 'OriginalTransmissionReference', Format => 'string[0,32]', }, 105 => { Name => 'Headline', Format => 'string[0,256]', }, 110 => { Name => 'Credit', Groups => { 2 => 'Author' }, Format => 'string[0,32]', }, 115 => { Name => 'Source', Groups => { 2 => 'Author' }, Format => 'string[0,32]', }, 116 => { Name => 'CopyrightNotice', Groups => { 2 => 'Author' }, Format => 'string[0,128]', }, 118 => { Name => 'Contact', Flags => 'List', Groups => { 2 => 'Author' }, Format => 'string[0,128]', }, 120 => { Name => 'Caption-Abstract', Format => 'string[0,2000]', }, 121 => { Name => 'LocalCaption', Format => 'string[0,256]', # (guess) Notes => q{ I haven't found a reference for the format of tags 121, 184-188 and 225-232, so I have just make them writable as strings with reasonable length. Beware that if this is wrong, other utilities won't be able to read these tags as written by ExifTool }, }, 122 => { Name => 'Writer-Editor', Flags => 'List', Groups => { 2 => 'Author' }, Format => 'string[0,32]', }, 125 => { Name => 'RasterizedCaption', Format => 'undef[7360]', Binary => 1, }, 130 => { Name => 'ImageType', Groups => { 2 => 'Image' }, Format => 'string[2]', }, 131 => { Name => 'ImageOrientation', Groups => { 2 => 'Image' }, Format => 'string[1]', PrintConv => { P => 'Portrait', L => 'Landscape', S => 'Square', }, }, 135 => { Name => 'LanguageIdentifier', Format => 'string[2,3]', }, 150 => { Name => 'AudioType', Format => 'string[2]', PrintConv => { '1A' => 'Mono Actuality', '2A' => 'Stereo Actuality', '1C' => 'Mono Question and Answer Session', '2C' => 'Stereo Question and Answer Session', '1M' => 'Mono Music', '2M' => 'Stereo Music', '1Q' => 'Mono Response to a Question', '2Q' => 'Stereo Response to a Question', '1R' => 'Mono Raw Sound', '2R' => 'Stereo Raw Sound', '1S' => 'Mono Scener', '2S' => 'Stereo Scener', '0T' => 'Text Only', '1V' => 'Mono Voicer', '2V' => 'Stereo Voicer', '1W' => 'Mono Wrap', '2W' => 'Stereo Wrap', }, }, 151 => { Name => 'AudioSamplingRate', Format => 'digits[6]', }, 152 => { Name => 'AudioSamplingResolution', Format => 'digits[2]', }, 153 => { Name => 'AudioDuration', Format => 'digits[6]', }, 154 => { Name => 'AudioOutcue', Format => 'string[0,64]', }, 184 => { Name => 'JobID', Format => 'string[0,64]', # (guess) }, 185 => { Name => 'MasterDocumentID', Format => 'string[0,256]', # (guess) }, 186 => { Name => 'ShortDocumentID', Format => 'string[0,64]', # (guess) }, 187 => { Name => 'UniqueDocumentID', Format => 'string[0,128]', # (guess) }, 188 => { Name => 'OwnerID', Format => 'string[0,128]', # (guess) }, 200 => { Name => 'ObjectPreviewFileFormat', Groups => { 2 => 'Image' }, Format => 'int16u', PrintConv => \%fileFormat, }, 201 => { Name => 'ObjectPreviewFileVersion', Groups => { 2 => 'Image' }, Format => 'int16u', }, 202 => { Name => 'ObjectPreviewData', Groups => { 2 => 'Preview' }, Format => 'undef[0,256000]', Binary => 1, }, 221 => { Name => 'Prefs', Groups => { 2 => 'Image' }, Format => 'string[0,64]', Notes => 'PhotoMechanic preferences', PrintConv => q{ $val =~ s[\s*(\d+):\s*(\d+):\s*(\d+):\s*(\S*)] [Tagged:$1, ColorClass:$2, Rating:$3, FrameNum:$4]; return $val; }, PrintConvInv => q{ $val =~ s[Tagged:\s*(\d+).*ColorClass:\s*(\d+).*Rating:\s*(\d+).*FrameNum:\s*(\S*)] [$1:$2:$3:$4]is; return $val; }, }, 225 => { Name => 'ClassifyState', Format => 'string[0,64]', # (guess) }, 228 => { Name => 'SimilarityIndex', Format => 'string[0,32]', # (guess) }, 230 => { Name => 'DocumentNotes', Format => 'string[0,1024]', # (guess) }, 231 => { Name => 'DocumentHistory', Format => 'string[0,256]', # (guess) }, 232 => { Name => 'ExifCameraInfo', Format => 'string[0,4096]', # (guess) }, 255 => { #PH Name => 'CatalogSets', List => 1, Format => 'string[0,256]', # (guess) Notes => 'written by iView MediaPro', }, ); # Record 3 -- News photo %Image::ExifTool::IPTC::NewsPhoto = ( GROUPS => { 2 => 'Image' }, WRITE_PROC => \&WriteIPTC, CHECK_PROC => \&CheckIPTC, WRITABLE => 1, 0 => { Name => 'NewsPhotoVersion', Format => 'int16u', Mandatory => 1, }, 10 => { Name => 'IPTCPictureNumber', Format => 'string[16]', Notes => '4 numbers: 1-Manufacturer ID, 2-Equipment ID, 3-Date, 4-Sequence', PrintConv => 'Image::ExifTool::IPTC::ConvertPictureNumber($val)', PrintConvInv => 'Image::ExifTool::IPTC::InvConvertPictureNumber($val)', }, 20 => { Name => 'IPTCImageWidth', Format => 'int16u', }, 30 => { Name => 'IPTCImageHeight', Format => 'int16u', }, 40 => { Name => 'IPTCPixelWidth', Format => 'int16u', }, 50 => { Name => 'IPTCPixelHeight', Format => 'int16u', }, 55 => { Name => 'SupplementalType', Format => 'int8u', PrintConv => { 0 => 'Main Image', 1 => 'Reduced Resolution Image', 2 => 'Logo', 3 => 'Rasterized Caption', }, }, 60 => { Name => 'ColorRepresentation', Format => 'int16u', PrintHex => 1, PrintConv => { 0x000 => 'No Image, Single Frame', 0x100 => 'Monochrome, Single Frame', 0x300 => '3 Components, Single Frame', 0x301 => '3 Components, Frame Sequential in Multiple Objects', 0x302 => '3 Components, Frame Sequential in One Object', 0x303 => '3 Components, Line Sequential', 0x304 => '3 Components, Pixel Sequential', 0x305 => '3 Components, Special Interleaving', 0x400 => '4 Components, Single Frame', 0x401 => '4 Components, Frame Sequential in Multiple Objects', 0x402 => '4 Components, Frame Sequential in One Object', 0x403 => '4 Components, Line Sequential', 0x404 => '4 Components, Pixel Sequential', 0x405 => '4 Components, Special Interleaving', }, }, 64 => { Name => 'InterchangeColorSpace', Format => 'int8u', PrintConv => { 1 => 'X,Y,Z CIE', 2 => 'RGB SMPTE', 3 => 'Y,U,V (K) (D65)', 4 => 'RGB Device Dependent', 5 => 'CMY (K) Device Dependent', 6 => 'Lab (K) CIE', 7 => 'YCbCr', 8 => 'sRGB', }, }, 65 => { Name => 'ColorSequence', Format => 'int8u', }, 66 => { Name => 'ICC_Profile', # ...could add SubDirectory support to read into this (if anybody cares) Writable => 0, Binary => 1, }, 70 => { Name => 'ColorCalibrationMatrix', Writable => 0, Binary => 1, }, 80 => { Name => 'LookupTable', Writable => 0, Binary => 1, }, 84 => { Name => 'NumIndexEntries', Format => 'int16u', }, 85 => { Name => 'ColorPalette', Writable => 0, Binary => 1, }, 86 => { Name => 'IPTCBitsPerSample', Format => 'int8u', }, 90 => { Name => 'SampleStructure', Format => 'int8u', PrintConv => { 0 => 'OrthogonalConstangSampling', 1 => 'Orthogonal4-2-2Sampling', 2 => 'CompressionDependent', }, }, 100 => { Name => 'ScanningDirection', Format => 'int8u', PrintConv => { 0 => 'L-R, Top-Bottom', 1 => 'R-L, Top-Bottom', 2 => 'L-R, Bottom-Top', 3 => 'R-L, Bottom-Top', 4 => 'Top-Bottom, L-R', 5 => 'Bottom-Top, L-R', 6 => 'Top-Bottom, R-L', 7 => 'Bottom-Top, R-L', }, }, 102 => { Name => 'IPTCImageRotation', Format => 'int8u', PrintConv => { 0 => 0, 1 => 90, 2 => 180, 3 => 270, }, }, 110 => { Name => 'DataCompressionMethod', Format => 'int32u', }, 120 => { Name => 'QuantizationMethod', Format => 'int8u', PrintConv => { 0 => 'Linear Reflectance/Transmittance', 1 => 'Linear Density', 2 => 'IPTC Ref B', 3 => 'Linear Dot Percent', 4 => 'AP Domestic Analogue', 5 => 'Compression Method Specific', 6 => 'Color Space Specific', 7 => 'Gamma Compensated', }, }, 125 => { Name => 'EndPoints', Writable => 0, Binary => 1, }, 130 => { Name => 'ExcursionTolerance', Format => 'int8u', PrintConv => { 0 => 'Not Allowed', 1 => 'Allowed', }, }, 135 => { Name => 'BitsPerComponent', Format => 'int8u', }, 140 => { Name => 'MaximumDensityRange', Format => 'int16u', }, 145 => { Name => 'GammaCompensatedValue', Format => 'int16u', }, ); # Record 7 -- Pre-object Data %Image::ExifTool::IPTC::PreObjectData = ( # (not actually writable, but used in BuildTagLookup to recognize IPTC tables) WRITE_PROC => \&WriteIPTC, 10 => { Name => 'SizeMode', Format => 'int8u', PrintConv => { 0 => 'Size Not Known', 1 => 'Size Known', }, }, 20 => { Name => 'MaxSubfileSize', Format => 'int32u', }, 90 => { Name => 'ObjectSizeAnnounced', Format => 'int32u', }, 95 => { Name => 'MaximumObjectSize', Format => 'int32u', }, ); # Record 8 -- ObjectData %Image::ExifTool::IPTC::ObjectData = ( WRITE_PROC => \&WriteIPTC, 10 => { Name => 'SubFile', Flags => 'List', Binary => 1, }, ); # Record 9 -- PostObjectData %Image::ExifTool::IPTC::PostObjectData = ( WRITE_PROC => \&WriteIPTC, 10 => { Name => 'ConfirmedObjectSize', Format => 'int32u', }, ); # Record 240 -- FotoStation proprietary data (ref PH) %Image::ExifTool::IPTC::FotoStation = ( GROUPS => { 2 => 'Other' }, WRITE_PROC => \&WriteIPTC, CHECK_PROC => \&CheckIPTC, WRITABLE => 1, ); # IPTC Composite tags %Image::ExifTool::IPTC::Composite = ( GROUPS => { 2 => 'Image' }, DateTimeCreated => { Description => 'Date/Time Created', Groups => { 2 => 'Time' }, Require => { 0 => 'IPTC:DateCreated', 1 => 'IPTC:TimeCreated', }, ValueConv => '"$val[0] $val[1]"', PrintConv => '$self->ConvertDateTime($val)', }, DigitalCreationDateTime => { Description => 'Digital Creation Date/Time', Groups => { 2 => 'Time' }, Require => { 0 => 'IPTC:DigitalCreationDate', 1 => 'IPTC:DigitalCreationTime', }, ValueConv => '"$val[0] $val[1]"', PrintConv => '$self->ConvertDateTime($val)', }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::IPTC'); #------------------------------------------------------------------------------ # AutoLoad our writer routines when necessary # sub AUTOLOAD { return Image::ExifTool::DoAutoLoad($AUTOLOAD, @_); } #------------------------------------------------------------------------------ # Print conversion for CodedCharacterSet # Inputs: 0) value sub PrintCodedCharset($) { my $val = shift; return $iptcCharset{$val} if $iptcCharset{$val}; $val =~ s/(.)/ $1/g; $val =~ s/ \x1b/, ESC/g; $val =~ s/^,? //; return $val; } #------------------------------------------------------------------------------ # Handle CodedCharacterSet # Inputs: 0) ExifTool ref, 1) CodedCharacterSet value # Returns: IPTC character set if translation required (or 'bad' if unknown) sub HandleCodedCharset($$) { my ($et, $val) = @_; my $xlat = $iptcCharset{$val}; unless ($xlat) { if ($val =~ /^\x1b\x25/) { # some unknown character set invoked $xlat = 'bad'; # flag unsupported coding } else { $xlat = $et->Options('CharsetIPTC'); } } # no need to translate if Charset is the same undef $xlat if $xlat eq $et->Options('Charset'); return $xlat; } #------------------------------------------------------------------------------ # Encode or decode coded string # Inputs: 0) ExifTool ref, 1) value ptr, 2) IPTC charset (or 'bad') ref # 3) flag set to decode (read) value from IPTC # Updates value on return sub TranslateCodedString($$$$) { my ($et, $valPtr, $xlatPtr, $read) = @_; if ($$xlatPtr eq 'bad') { $et->Warn('Some IPTC characters not converted (unsupported CodedCharacterSet)'); undef $$xlatPtr; } elsif (not $read) { $$valPtr = $et->Decode($$valPtr, undef, undef, $$xlatPtr); } elsif ($$valPtr !~ /[\x14\x15\x1b]/) { $$valPtr = $et->Decode($$valPtr, $$xlatPtr); } else { # don't yet support reading ISO 2022 shifted character sets $et->WarnOnce('Some IPTC characters not converted (ISO 2022 shifting not supported)'); } } #------------------------------------------------------------------------------ # Is this IPTC in a standard location? # Inputs: 0) Current metadata path string # Returns: true if path is standard, 0 if file type doesn't have standard IPTC, # or undef if IPTC is non-standard sub IsStandardIPTC($) { my $path = shift; return 1 if $isStandardIPTC{$path}; return 0 unless $path =~ /^(\w+)/ and defined $isStandardIPTC{$1}; return undef; # non-standard } #------------------------------------------------------------------------------ # get IPTC info # Inputs: 0) ExifTool object reference, 1) dirInfo reference # 2) reference to tag table # Returns: 1 on success, 0 otherwise sub ProcessIPTC($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $pos = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || 0; my $dirEnd = $pos + $dirLen; my $verbose = $et->Options('Verbose'); my $success = 0; my ($lastRec, $recordPtr, $recordName); $verbose and $dirInfo and $et->VerboseDir('IPTC', 0, $$dirInfo{DirLen}); if ($tagTablePtr eq \%Image::ExifTool::IPTC::Main) { my $path = $et->MetadataPath(); my $isStd = IsStandardIPTC($path); if (defined $isStd and not $$et{DIR_COUNT}{STD_IPTC}) { # set flag to ensure we only have one family 1 "IPTC" group $$et{DIR_COUNT}{STD_IPTC} = 1; # calculate MD5 if Digest::MD5 is available (truly standard IPTC only) if ($isStd) { my $md5; if (eval { require Digest::MD5 }) { if ($pos or $dirLen != length($$dataPt)) { $md5 = Digest::MD5::md5(substr $$dataPt, $pos, $dirLen); } else { $md5 = Digest::MD5::md5($$dataPt); } } else { # a zero digest indicates IPTC exists but we don't have Digest::MD5 $md5 = "\0" x 16; } $et->FoundTag('CurrentIPTCDigest', $md5); } } elsif ($Image::ExifTool::MWG::strict and $$et{FILE_TYPE} =~ /^(JPEG|TIFF|PSD)$/) { # ignore non-standard IPTC while in strict MWG compatibility mode $et->Warn("Ignored non-standard IPTC at $path"); return 1; } else { # extract non-standard IPTC my $count = ($$et{DIR_COUNT}{IPTC} || 0) + 1; # count non-standard IPTC $$et{DIR_COUNT}{IPTC} = $count; $$et{LOW_PRIORITY_DIR}{IPTC} = 1; # lower priority of non-standard IPTC $$et{SET_GROUP1} = '+' . ($count + 1); # add number to family 1 group name } } # begin by assuming default IPTC encoding my $xlat = $et->Options('CharsetIPTC'); undef $xlat if $xlat eq $et->Options('Charset'); # quick check for improperly byte-swapped IPTC if ($dirLen >= 4 and substr($$dataPt, $pos, 1) ne "\x1c" and substr($$dataPt, $pos + 3, 1) eq "\x1c") { $et->Warn('IPTC data was improperly byte-swapped'); my $newData = pack('N*', unpack('V*', substr($$dataPt, $pos, $dirLen) . "\0\0\0")); $dataPt = \$newData; $pos = 0; $dirEnd = $pos + $dirLen; # NOTE: MUST NOT access $dirInfo DataPt, DirStart or DataLen after this! } # extract IPTC as a block if specified if ($$et{REQ_TAG_LOOKUP}{iptc} or ($$et{TAGS_FROM_FILE} and not $$et{EXCL_TAG_LOOKUP}{iptc})) { if ($pos or $dirLen != length($$dataPt)) { $et->FoundTag('IPTC', substr($$dataPt, $pos, $dirLen)); } else { $et->FoundTag('IPTC', $$dataPt); } } while ($pos + 5 <= $dirEnd) { my $buff = substr($$dataPt, $pos, 5); my ($id, $rec, $tag, $len) = unpack("CCCn", $buff); unless ($id == 0x1c) { unless ($id) { # scan the rest of the data an give warning unless all zeros # (iMatch pads the IPTC block with nulls for some reason) my $remaining = substr($$dataPt, $pos, $dirEnd - $pos); last unless $remaining =~ /[^\0]/; } $et->Warn(sprintf('Bad IPTC data tag (marker 0x%x)',$id)); last; } $pos += 5; # step to after field header # handle extended IPTC entry if necessary if ($len & 0x8000) { my $n = $len & 0x7fff; # get num bytes in length field if ($pos + $n > $dirEnd or $n > 8) { $et->VPrint(0, "Invalid extended IPTC entry (dataset $rec:$tag, len $len)\n"); $success = 0; last; } # determine length (a big-endian, variable sized int) for ($len = 0; $n; ++$pos, --$n) { $len = $len * 256 + ord(substr($$dataPt, $pos, 1)); } } if ($pos + $len > $dirEnd) { $et->VPrint(0, "Invalid IPTC entry (dataset $rec:$tag, len $len)\n"); $success = 0; last; } if (not defined $lastRec or $lastRec != $rec) { my $tableInfo = $tagTablePtr->{$rec}; unless ($tableInfo) { $et->WarnOnce("Unrecognized IPTC record $rec (ignored)"); $pos += $len; next; # ignore this entry } my $tableName = $tableInfo->{SubDirectory}->{TagTable}; unless ($tableName) { $et->Warn("No table for IPTC record $rec!"); last; # this shouldn't happen } $recordName = $$tableInfo{Name}; $recordPtr = Image::ExifTool::GetTagTable($tableName); $et->VPrint(0,$$et{INDENT},"-- $recordName record --\n"); $lastRec = $rec; } my $val = substr($$dataPt, $pos, $len); # add tagInfo for all unknown tags: unless ($$recordPtr{$tag}) { # - no Format so format is auto-detected # - no Name so name is generated automatically with decimal tag number AddTagToTable($recordPtr, $tag, { Unknown => 1 }); } my $tagInfo = $et->GetTagInfo($recordPtr, $tag); my $format; # (could use $$recordPtr{FORMAT} if no Format below, but don't do this to # be backward compatible with improperly written PhotoMechanic tags) $format = $$tagInfo{Format} if $tagInfo; # use logic to determine format if not specified unless ($format) { $format = 'int' if $len <= 4 and $len != 3 and $val =~ /[\0-\x08]/; } if ($format) { if ($format =~ /^int/) { if ($len <= 8) { # limit integer conversion to 8 bytes long $val = 0; my $i; for ($i=0; $i<$len; ++$i) { $val = $val * 256 + ord(substr($$dataPt, $pos+$i, 1)); } } } elsif ($format =~ /^string/) { $val =~ s/\0+$//; # some braindead softwares add null terminators if ($rec == 1) { # handle CodedCharacterSet tag $xlat = HandleCodedCharset($et, $val) if $tag == 90; # translate characters if necessary and special characters exist } elsif ($xlat and $rec < 7 and $val =~ /[\x80-\xff]/) { # translate to specified character set TranslateCodedString($et, \$val, \$xlat, 1); } } elsif ($format =~ /^digits/) { $val =~ s/\0+$//; } elsif ($format !~ /^undef/) { warn("Invalid IPTC format: $format"); } } $verbose and $et->VerboseInfo($tag, $tagInfo, Table => $tagTablePtr, Value => $val, DataPt => $dataPt, DataPos => $$dirInfo{DataPos}, Size => $len, Start => $pos, Extra => ", $recordName record", Format => $format, ); $et->FoundTag($tagInfo, $val) if $tagInfo; $success = 1; $pos += $len; # increment to next field } delete $$et{SET_GROUP1}; delete $$et{LOW_PRIORITY_DIR}{IPTC}; return $success; } 1; # end __END__ =head1 NAME Image::ExifTool::IPTC - Read IPTC meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret IPTC (International Press Telecommunications Council) meta information in image files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.iptc.org/IIM/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/IPTC Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/ITC.pm������������������������������������������������������000644 �000765 �000024 �00000015211 12642461311 020661� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: ITC.pm # # Description: Read iTunes Cover Flow meta information # # Revisions: 01/12/2008 - P. Harvey Created # # References: 1) http://www.waldoland.com/dev/Articles/ITCFileFormat.aspx # 2) http://www.falsecognate.org/2007/01/deciphering_the_itunes_itc_fil/ #------------------------------------------------------------------------------ package Image::ExifTool::ITC; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.02'; sub ProcessITC($$); # tags used in ITC files %Image::ExifTool::ITC::Main = ( NOTES => 'This information is found in iTunes Cover Flow data files.', itch => { SubDirectory => { TagTable => 'Image::ExifTool::ITC::Header' } }, item => { SubDirectory => { TagTable => 'Image::ExifTool::ITC::Item' } }, data => { Name => 'ImageData', Notes => 'embedded JPEG or PNG image, depending on ImageType', }, ); # ITC header information %Image::ExifTool::ITC::Header = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0x10 => { Name => 'DataType', Format => 'undef[4]', PrintConv => { artw => 'Artwork' }, }, ); # ITC item information %Image::ExifTool::ITC::Item = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, FORMAT => 'int32u', FIRST_ENTRY => 0, 0 => { Name => 'LibraryID', Format => 'undef[8]', ValueConv => 'uc unpack "H*", $val', }, 2 => { Name => 'TrackID', Format => 'undef[8]', ValueConv => 'uc unpack "H*", $val', }, 4 => { Name => 'DataLocation', Format => 'undef[4]', PrintConv => { down => 'Downloaded Separately', locl => 'Local Music File', }, }, 5 => { Name => 'ImageType', Format => 'undef[4]', ValueConv => { # (not PrintConv because the unconverted JPEG value is nasty) 'PNGf' => 'PNG', "\0\0\0\x0d" => 'JPEG', }, }, 7 => 'ImageWidth', 8 => 'ImageHeight', ); #------------------------------------------------------------------------------ # Process an iTunes Cover Flow (ITC) file # Inputs: 0) ExifTool object reference, 1) Directory information reference # Returns: 1 on success, 0 if this wasn't a valid ITC file sub ProcessITC($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $rtnVal = 0; my ($buff, $err, $pos, $tagTablePtr, %dirInfo); # loop through all blocks in this image for (;;) { # read the block header my $n = $raf->Read($buff, 8); unless ($n == 8) { # no error if we reached the EOF normally undef $err unless $n; last; } my ($size, $tag) = unpack('Na4', $buff); if ($rtnVal) { last unless $size >= 8 and $size < 0x80000000; } else { # check to be sure this is a valid ITC image # (first block must be 'itch') last unless $tag eq 'itch'; last unless $size >= 0x1c and $size < 0x10000; $et->SetFileType(); SetByteOrder('MM'); $rtnVal = 1; # this is an ITC file $err = 1; # format error unless we read to EOF } if ($tag eq 'itch') { $pos = $raf->Tell(); $size -= 8; # size of remaining data in block $raf->Read($buff,$size) == $size or last; # extract header information %dirInfo = ( DirName => 'ITC Header', DataPt => \$buff, DataPos => $pos, ); my $tagTablePtr = GetTagTable('Image::ExifTool::ITC::Header'); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); } elsif ($tag eq 'item') { # don't want to read the entire item data (includes image) $size > 12 or last; $raf->Read($buff, 4) == 4 or last; my $len = unpack('N', $buff); $len >= 0xd0 and $len <= $size or last; $size -= $len; # size of data after item header $len -= 12; # length of remaining item header # read in 4-byte blocks until we find the null terminator # (this is just a guess about how to parse this variable-length part) while ($len >= 4) { $raf->Read($buff, 4) == 4 or last; $len -= 4; last if $buff eq "\0\0\0\0"; } last if $len < 4; $pos = $raf->Tell(); $raf->Read($buff, $len) == $len or last; unless ($len >= 0xb4 and substr($buff, 0xb0, 4) eq 'data') { $et->Warn('Parsing error. Please submit this ITC file for testing'); last; } %dirInfo = ( DirName => 'ITC Item', DataPt => \$buff, DataPos => $pos, ); $tagTablePtr = GetTagTable('Image::ExifTool::ITC::Item'); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); # extract embedded image $pos += $len; if ($size > 0) { $tagTablePtr = GetTagTable('Image::ExifTool::ITC::Main'); my $tagInfo = $et->GetTagInfo($tagTablePtr, 'data'); my $image = $et->ExtractBinary($pos, $size, $$tagInfo{Name}); $et->FoundTag($tagInfo, \$image); # skip the rest of the block if necessary $raf->Seek($pos+$size, 0) or last } elsif ($size < 0) { last; } } else { $et->VPrint(0, "Unknown $tag block ($size bytes)\n"); $raf->Seek($size-8, 1) or last; } } $err and $et->Warn('ITC file format error'); return $rtnVal; } 1; # end __END__ =head1 NAME Image::ExifTool::ITC - Read iTunes Cover Flow meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains the routines required by Image::ExifTool to read meta information (including artwork images) from iTunes Cover Flow files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.waldoland.com/dev/Articles/ITCFileFormat.aspx> =item L<http://www.falsecognate.org/2007/01/deciphering_the_itunes_itc_fil/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/ITC Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/iWork.pm����������������������������������������������������000644 �000765 �000024 �00000016610 12642461342 021345� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: iWork.pm # # Description: Read Apple iWork '09 XML+ZIP files # # Revisions: 2009/11/11 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::iWork; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::XMP; use Image::ExifTool::ZIP; $VERSION = '1.04'; # test for recognized iWork document extensions and outer XML elements my %iWorkType = ( # file extensions NUMBERS => 'NUMBERS', PAGES => 'PAGES', KEY => 'KEY', KTH => 'KTH', NMBTEMPLATE => 'NMBTEMPLATE', # we don't support double extensions -- # "PAGES.TEMPLATE" => 'Apple Pages Template', # outer XML elements 'ls:document' => 'NUMBERS', 'sl:document' => 'PAGES', 'key:presentation' => 'KEY', ); # MIME types for iWork files (Apple has not registered these yet, but these # are my best guess after doing some googling. I'm not 100% sure what "sff" # indicates, but I think it refers to the new "flattened" package format) my %mimeType = ( 'NUMBERS' => 'application/x-iwork-numbers-sffnumbers', 'PAGES' => 'application/x-iwork-pages-sffpages', 'KEY' => 'application/x-iWork-keynote-sffkey', 'NMBTEMPLATE' => 'application/x-iwork-numbers-sfftemplate', 'PAGES.TEMPLATE'=> 'application/x-iwork-pages-sfftemplate', 'KTH' => 'application/x-iWork-keynote-sffkth', ); # iWork tags %Image::ExifTool::iWork::Main = ( GROUPS => { 0 => 'XML', 1 => 'XML', 2 => 'Document' }, PROCESS_PROC => \&Image::ExifTool::XMP::ProcessXMP, VARS => { NO_ID => 1 }, NOTES => q{ The Apple iWork '09 file format is a ZIP archive containing XML files similar to the Office Open XML (OOXML) format. Metadata tags in iWork files are extracted even if they don't appear below. }, authors => { Name => 'Author', Groups => { 2 => 'Author' } }, comment => { }, copyright => { Groups => { 2 => 'Author' } }, keywords => { }, projects => { List => 1 }, title => { }, ); #------------------------------------------------------------------------------ # Generate a tag ID for this XML tag # Inputs: 0) tag property name list ref # Returns: tagID sub GetTagID($) { my $props = shift; return 0 if $$props[-1] =~ /^\w+:ID$/; # ignore ID tags return ($$props[0] =~ /^.*?:(.*)/) ? $1 : $$props[0]; } #------------------------------------------------------------------------------ # We found an XMP property name/value # Inputs: 0) ExifTool object ref, 1) tag table ref # 2) reference to array of XMP property names (last is current property) # 3) property value, 4) attribute hash ref (not used here) # Returns: 1 if valid tag was found sub FoundTag($$$$;$) { my ($et, $tagTablePtr, $props, $val, $attrs) = @_; return 0 unless @$props; my $verbose = $et->Options('Verbose'); $et->VPrint(0, " | - Tag '", join('/',@$props), "'\n") if $verbose > 1; # un-escape XML character entities $val = Image::ExifTool::XMP::UnescapeXML($val); # convert from UTF8 to ExifTool Charset $val = $et->Decode($val, 'UTF8'); my $tag = GetTagID($props) or return 0; # add any unknown tags to table unless ($$tagTablePtr{$tag}) { $et->VPrint(0, " [adding $tag]\n") if $verbose; AddTagToTable($tagTablePtr, $tag, { Name => ucfirst $tag }); } # save the tag $et->HandleTag($tagTablePtr, $tag, $val); return 1; } #------------------------------------------------------------------------------ # Extract information from an iWork file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 # Notes: Upon entry to this routine, the file type has already been verified # as ZIP and the dirInfo hash contains a 'ZIP' Archive::Zip object reference sub Process_iWork($$) { my ($et, $dirInfo) = @_; my $zip = $$dirInfo{ZIP}; my ($type, $index, $indexFile, $status); # try to determine the file type local $SIG{'__WARN__'} = \&Image::ExifTool::ZIP::WarnProc; # trust type given by file extension if available $type = $iWorkType{$$et{FILE_EXT}} if $$et{FILE_EXT}; unless ($type) { # read the index file my @members = $zip->membersMatching('^index\.(xml|apxl)$'); if (@members) { ($index, $status) = $zip->contents($members[0]); unless ($status) { $indexFile = $members[0]->fileName(); if ($index =~ /^\s*<\?xml version=[^<]+<(\w+:\w+)/s) { $type = $iWorkType{$1} if $iWorkType{$1}; } } } $type or $type = 'ZIP'; # assume ZIP by default } $et->SetFileType($type, $mimeType{$type}); my @members = $zip->members(); my $docNum = 0; my $member; foreach $member (@members) { # get filename of this ZIP member my $file = $member->fileName(); next unless defined $file; $et->VPrint(0, "File: $file\n"); # set the document number and extract ZIP tags $$et{DOC_NUM} = ++$docNum; Image::ExifTool::ZIP::HandleMember($et, $member); # process only the index XML and JPEG thumbnail files next unless $file =~ m{^(index\.(xml|apxl)|QuickLook/Thumbnail\.jpg)$}i; # get the file contents if necessary # (CAREFUL! $buff MUST be local since we hand off a value ref to PreviewImage) my ($buff, $buffPt); if ($indexFile and $indexFile eq $file) { # use the index file we already loaded $buffPt = \$index; } else { ($buff, $status) = $zip->contents($member); $status and $et->Warn("Error extracting $file"), next; $buffPt = \$buff; } # extract JPEG as PreviewImage (should only be QuickLook/Thumbnail.jpg) if ($file =~ /\.jpg$/) { $et->FoundTag('PreviewImage', $buffPt); next; } # process "metadata" section of XML index file next unless $$buffPt =~ /<(\w+):metadata>/g; my $ns = $1; my $p1 = pos $$buffPt; next unless $$buffPt =~ m{</${ns}:metadata>}g; # construct XML data from "metadata" section only $$buffPt = '<?xml version="1.0"?>' . substr($$buffPt, $p1, pos($$buffPt)-$p1); my %dirInfo = ( DataPt => $buffPt, DirLen => length $$buffPt, DataLen => length $$buffPt, XMPParseOpts => { FoundProc => \&FoundTag, }, ); my $tagTablePtr = GetTagTable('Image::ExifTool::iWork::Main'); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); undef $$buffPt; # (free memory now) } delete $$et{DOC_NUM}; return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::iWork - Read Apple iWork '09 XML+ZIP files =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from Apple iWork '09 XML+ZIP files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/iWork Tags>, L<Image::ExifTool::TagNames/OOXML Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/JPEG.pm�����������������������������������������������������000644 �000765 �000024 �00000047274 12642461313 021007� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: JPEG.pm # # Description: Definitions for uncommon JPEG segments # # Revisions: 10/06/2006 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::JPEG; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.25'; sub ProcessOcad($$$); sub ProcessJPEG_HDR($$$); # (this main JPEG table is for documentation purposes only) %Image::ExifTool::JPEG::Main = ( NOTES => 'This table lists information extracted by ExifTool from JPEG images.', APP0 => [{ Name => 'JFIF', Condition => '$$valPt =~ /^JFIF\0/', SubDirectory => { TagTable => 'Image::ExifTool::JFIF::Main' }, }, { Name => 'JFXX', Condition => '$$valPt =~ /^JFXX\0\x10/', SubDirectory => { TagTable => 'Image::ExifTool::JFIF::Extension' }, }, { Name => 'CIFF', Condition => '$$valPt =~ /^(II|MM).{4}HEAPJPGM/s', SubDirectory => { TagTable => 'Image::ExifTool::CanonRaw::Main' }, }, { Name => 'AVI1', Condition => '$$valPt =~ /^AVI1/', SubDirectory => { TagTable => 'Image::ExifTool::JPEG::AVI1' }, }, { Name => 'Ocad', Condition => '$$valPt =~ /^Ocad/', SubDirectory => { TagTable => 'Image::ExifTool::JPEG::Ocad' }, }], APP1 => [{ Name => 'EXIF', Condition => '$$valPt =~ /^Exif\0/', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main' }, }, { Name => 'ExtendedXMP', Condition => '$$valPt =~ m{^http://ns.adobe.com/xmp/extension/\0}', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' }, }, { Name => 'XMP', Condition => '$$valPt =~ /^http/ or $$valPt =~ /<exif:/', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' }, }, { Name => 'QVCI', Condition => '$$valPt =~ /^QVCI\0/', SubDirectory => { TagTable => 'Image::ExifTool::Casio::QVCI' }, }, { Name => 'FLIR', Condition => '$$valPt =~ /^FLIR\0/', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::FFF' }, }], APP2 => [{ Name => 'ICC_Profile', Condition => '$$valPt =~ /^ICC_PROFILE\0/', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' }, }, { Name => 'FPXR', Condition => '$$valPt =~ /^FPXR\0/', SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::Main' }, }, { Name => 'MPF', Condition => '$$valPt =~ /^MPF\0/', SubDirectory => { TagTable => 'Image::ExifTool::MPF::Main' }, }, { Name => 'PreviewImage', Condition => '$$valPt =~ /^(|QVGA\0|BGTH)\xff\xd8\xff\xdb/', Notes => 'Samsung APP2 preview image', # (Samsung/GoPro="", BenQ="QVGA\0", Digilife="BGTH") }], APP3 => [{ Name => 'Meta', Condition => '$$valPt =~ /^(Meta|META|Exif)\0\0/', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Meta' }, }, { Name => 'Stim', Condition => '$$valPt =~ /^Stim\0/', SubDirectory => { TagTable => 'Image::ExifTool::Stim::Main' }, }, { Name => 'PreviewImage', # (written by HP R837 and Samsung S1060) Condition => '$$valPt =~ /^\xff\xd8\xff\xdb/', Notes => 'Samsung/HP preview image', # (Samsung, HP, BenQ) }], APP4 => [{ Name => 'Scalado', Condition => '$$valPt =~ /^SCALADO\0/', SubDirectory => { TagTable => 'Image::ExifTool::Scalado::Main' }, }, { Name => 'FPXR', # (non-standard location written by some HP models) Condition => '$$valPt =~ /^FPXR\0/', SubDirectory => { TagTable => 'Image::ExifTool::FlashPix::Main' }, }, { Name => 'PreviewImage', # (eg. Samsung S1060) Notes => 'continued from APP3', }], APP5 => [{ Name => 'RMETA', Condition => '$$valPt =~ /^RMETA\0/', SubDirectory => { TagTable => 'Image::ExifTool::Ricoh::RMETA' }, }, { Name => 'PreviewImage', # (eg. BenQ DC E1050) Notes => 'continued from APP4', }], APP6 => [{ Name => 'EPPIM', Condition => '$$valPt =~ /^EPPIM\0/', SubDirectory => { TagTable => 'Image::ExifTool::JPEG::EPPIM' }, }, { Name => 'NITF', Condition => '$$valPt =~ /^NTIF\0/', SubDirectory => { TagTable => 'Image::ExifTool::JPEG::NITF' }, }, { Name => 'HP_TDHD', # (written by R837) Condition => '$$valPt =~ /^TDHD\x01\0\0\0/', SubDirectory => { TagTable => 'Image::ExifTool::HP::TDHD' }, }], APP7 => [{ Name => 'Pentax', Condition => '$$valPt =~ /^PENTAX \0/', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::Main' }, }, { Name => 'Qualcomm', Condition => '$$valPt =~ /^\x1aQualcomm Camera Attributes/', SubDirectory => { TagTable => 'Image::ExifTool::Qualcomm::Main' }, }], APP8 => { Name => 'SPIFF', Condition => '$$valPt =~ /^SPIFF\0/', SubDirectory => { TagTable => 'Image::ExifTool::JPEG::SPIFF' }, }, APP9 => { Name => 'MediaJukebox', Condition => '$$valPt =~ /^Media Jukebox\0/', SubDirectory => { TagTable => 'Image::ExifTool::JPEG::MediaJukebox' }, }, APP10 => { Name => 'Comment', Condition => '$$valPt =~ /^UNICODE\0/', Notes => 'PhotoStudio Unicode comment', }, APP11 => { Name => 'JPEG-HDR', Condition => '$$valPt =~ /^HDR_RI /', SubDirectory => { TagTable => 'Image::ExifTool::JPEG::HDR' }, }, APP12 => [{ Name => 'PictureInfo', Condition => '$$valPt =~ /(\[picture info\]|Type=)/', SubDirectory => { TagTable => 'Image::ExifTool::APP12::PictureInfo' }, }, { Name => 'Ducky', Condition => '$$valPt =~ /^Ducky/', SubDirectory => { TagTable => 'Image::ExifTool::APP12::Ducky' }, }], APP13 => [{ Name => 'Photoshop', Condition => '$$valPt =~ /^(Photoshop 3.0\0|Adobe_Photoshop2.5)/', SubDirectory => { TagTable => 'Image::ExifTool::Photoshop::Main' }, }, { Name => 'Adobe_CM', Condition => '$$valPt =~ /^Adobe_CM/', SubDirectory => { TagTable => 'Image::ExifTool::JPEG::AdobeCM' }, }], APP14 => { Name => 'Adobe', Condition => '$$valPt =~ /^Adobe/', Writable => 1, # (for docs only) SubDirectory => { TagTable => 'Image::ExifTool::JPEG::Adobe' }, }, APP15 => { Name => 'GraphicConverter', Condition => '$$valPt =~ /^Q\s*(\d+)/', SubDirectory => { TagTable => 'Image::ExifTool::JPEG::GraphConv' }, }, # APP15 - Also unknown "TEXT\0" segment stored by Casio/FujiFilm COM => { Name => 'Comment', # note: flag as writable for documentation, but it won't show up # in the TagLookup as writable because there is no WRITE_PROC Writable => 1, }, SOF => { Name => 'StartOfFrame', SubDirectory => { TagTable => 'Image::ExifTool::JPEG::SOF' }, }, DQT => { Name => 'DefineQuantizationTable', Notes => 'used to calculate the Extra JPEGDigest tag value', }, Trailer => [{ Name => 'AFCP', Condition => '$$valPt =~ /AXS(!|\*).{8}$/s', SubDirectory => { TagTable => 'Image::ExifTool::AFCP::Main' }, }, { Name => 'CanonVRD', Condition => '$$valPt =~ /CANON OPTIONAL DATA\0.{44}$/s', SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::Main' }, }, { Name => 'FotoStation', Condition => '$$valPt =~ /\xa1\xb2\xc3\xd4$/', SubDirectory => { TagTable => 'Image::ExifTool::FotoStation::Main' }, }, { Name => 'PhotoMechanic', Condition => '$$valPt =~ /cbipcbbl$/', SubDirectory => { TagTable => 'Image::ExifTool::PhotoMechanic::Main' }, }, { Name => 'MIE', Condition => q{ $$valPt =~ /~\0\x04\0zmie~\0\0\x06.{4}[\x10\x18]\x04$/s or $$valPt =~ /~\0\x04\0zmie~\0\0\x0a.{8}[\x10\x18]\x08$/s }, SubDirectory => { TagTable => 'Image::ExifTool::MIE::Main' }, }, { Name => 'Samsung', Condition => '$$valPt =~ /QDIOBS$/', SubDirectory => { TagTable => 'Image::ExifTool::Samsung::Trailer' }, }, { Name => 'PreviewImage', Condition => '$$valPt =~ /^\xff\xd8\xff/', Writable => 1, # (for docs only) }], ); # EPPIM APP6 (Toshiba PrintIM) segment (ref PH, from PDR-M700 samples) %Image::ExifTool::JPEG::EPPIM = ( GROUPS => { 0 => 'APP6', 1 => 'EPPIM', 2 => 'Image' }, NOTES => q{ APP6 is used in by the Toshiba PDR-M700 to store a TIFF structure containing PrintIM information. }, 0xc4a5 => { Name => 'PrintIM', # must set Writable here so this tag will be saved with MakerNotes option Writable => 'undef', Description => 'Print Image Matching', SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main', }, }, ); # SPIFF APP8 segment. Refs: # 1) http://www.fileformat.info/format/spiff/ # 2) http://www.jpeg.org/public/spiff.pdf %Image::ExifTool::JPEG::SPIFF = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'APP8', 1 => 'SPIFF', 2 => 'Image' }, NOTES => q{ This information is found in APP8 of SPIFF-style JPEG images (the "official" yet rarely used JPEG file format standard: Still Picture Interchange File Format). See L<http://www.jpeg.org/public/spiff.pdf> for the official specification. }, 0 => { Name => 'SPIFFVersion', Format => 'int8u[2]', PrintConv => '$val =~ tr/ /./; $val', }, 2 => { Name => 'ProfileID', PrintConv => { 0 => 'Not Specified', 1 => 'Continuous-tone Base', 2 => 'Continuous-tone Progressive', 3 => 'Bi-level Facsimile', 4 => 'Continuous-tone Facsimile', }, }, 3 => 'ColorComponents', 6 => { Name => 'ImageHeight', Notes => q{ at index 4 in specification, but there are 2 extra bytes here in my only SPIFF sample, version 1.2 }, Format => 'int32u', }, 10 => { Name => 'ImageWidth', Format => 'int32u', }, 14 => { Name => 'ColorSpace', PrintConv => { 0 => 'Bi-level', 1 => 'YCbCr, ITU-R BT 709, video', 2 => 'No color space specified', 3 => 'YCbCr, ITU-R BT 601-1, RGB', 4 => 'YCbCr, ITU-R BT 601-1, video', 8 => 'Gray-scale', 9 => 'PhotoYCC', 10 => 'RGB', 11 => 'CMY', 12 => 'CMYK', 13 => 'YCCK', 14 => 'CIELab', }, }, 15 => 'BitsPerSample', 16 => { Name => 'Compression', PrintConv => { 0 => 'Uncompressed, interleaved, 8 bits per sample', 1 => 'Modified Huffman', 2 => 'Modified READ', 3 => 'Modified Modified READ', 4 => 'JBIG', 5 => 'JPEG', }, }, 17 => { Name => 'ResolutionUnit', PrintConv => { 0 => 'None', 1 => 'inches', 2 => 'cm', }, }, 18 => { Name => 'YResolution', Format => 'int32u', }, 22 => { Name => 'XResolution', Format => 'int32u', }, ); # Media Jukebox APP9 segment (ref PH) %Image::ExifTool::JPEG::MediaJukebox = ( GROUPS => { 0 => 'XML', 1 => 'MediaJukebox', 2 => 'Image' }, VARS => { NO_ID => 1 }, NOTES => 'Tags found in the XML metadata of the "Media Jukebox" APP9 segment.', Date => { Groups => { 2 => 'Time' }, # convert from days since Dec 30, 1899 to seconds since Jan 1, 1970 ValueConv => 'ConvertUnixTime(($val - (70 * 365 + 17 + 2)) * 24 * 3600)', PrintConv => '$self->ConvertDateTime($val)', }, Album => { }, Caption => { }, Keywords => { }, Name => { }, People => { }, Places => { }, Tool_Name => { }, Tool_Version => { }, ); # JPEG-HDR APP11 information (ref PH, guessed from http://anyhere.com/gward/papers/cic05.pdf) %Image::ExifTool::JPEG::HDR = ( GROUPS => { 0 => 'APP11', 1 => 'JPEG-HDR', 2 => 'Image' }, PROCESS_PROC => \&ProcessJPEG_HDR, TAG_PREFIX => '', # (no prefix for unknown tags) NOTES => 'Information extracted from APP11 of a JPEG-HDR image.', ver => 'JPEG-HDRVersion', # (need names for the next 3 tags) ln0 => { Description => 'Ln0' }, ln1 => { Description => 'Ln1' }, s2n => { Description => 'S2n' }, alp => { Name => 'Alpha' }, # (Alpha/Beta are saturation parameters) bet => { Name => 'Beta' }, cor => { Name => 'CorrectionMethod' }, RatioImage => { Groups => { 2 => 'Preview' }, Notes => 'the embedded JPEG-compressed ratio image', Binary => 1, }, ); # AdobeCM APP13 (no references) %Image::ExifTool::JPEG::AdobeCM = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'APP13', 1 => 'AdobeCM', 2 => 'Image' }, NOTES => q{ The "Adobe_CM" APP13 segment presumably contains color management information, but the meaning of the data is currently unknown. If anyone has an idea about what this means, please let me know. }, FORMAT => 'int16u', 0 => 'AdobeCMType', ); # Adobe APP14 refs: # http://partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf # http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/metadata/doc-files/jpeg_metadata.html#color %Image::ExifTool::JPEG::Adobe = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'APP14', 1 => 'Adobe', 2 => 'Image' }, NOTES => q{ The "Adobe" APP14 segment stores image encoding information for DCT filters. This segment may be copied or deleted as a block using the Extra "Adobe" tag, but note that it is not deleted by default when deleting all metadata because it may affect the appearance of the image. }, FORMAT => 'int16u', 0 => 'DCTEncodeVersion', 1 => { Name => 'APP14Flags0', PrintConv => { 0 => '(none)', BITMASK => { 15 => 'Encoded with Blend=1 downsampling' }, }, }, 2 => { Name => 'APP14Flags1', PrintConv => { 0 => '(none)', BITMASK => { }, }, }, 3 => { Name => 'ColorTransform', Format => 'int8u', PrintConv => { 0 => 'Unknown (RGB or CMYK)', 1 => 'YCbCr', 2 => 'YCCK', }, }, ); # GraphicConverter APP15 (ref PH) %Image::ExifTool::JPEG::GraphConv = ( GROUPS => { 0 => 'APP15', 1 => 'GraphConv', 2 => 'Image' }, NOTES => 'APP15 is used by GraphicConverter to store JPEG quality.', 'Q' => 'Quality', ); # AVI1 APP0 segment (ref http://www.schnarff.com/file-formats/bmp/BMPDIB.TXT) %Image::ExifTool::JPEG::AVI1 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'APP0', 1 => 'AVI1', 2 => 'Image' }, NOTES => 'This information may be found in APP0 of JPEG image data from AVI videos.', FIRST_ENTRY => 0, 0 => { Name => 'InterleavedField', PrintConv => { 0 => 'Not Interleaved', 1 => 'Odd', 2 => 'Even', }, }, ); # Ocad APP0 segment (ref PH) %Image::ExifTool::JPEG::Ocad = ( PROCESS_PROC => \&ProcessOcad, GROUPS => { 0 => 'APP0', 1 => 'Ocad', 2 => 'Image' }, TAG_PREFIX => 'Ocad', FIRST_ENTRY => 0, NOTES => q{ Tags extracted from the JPEG APP0 "Ocad" segment (found in Photobucket images). }, Rev => { Name => 'OcadRevision', Format => 'string[6]', } ); # NITF APP6 segment (National Imagery Transmission Format) # ref http://www.gwg.nga.mil/ntb/baseline/docs/n010697/bwcguide25aug98.pdf %Image::ExifTool::JPEG::NITF = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'APP6', 1 => 'NITF', 2 => 'Image' }, NOTES => q{ Information in APP6 used by the National Imagery Transmission Format. See L<http://www.gwg.nga.mil/ntb/baseline/docs/n010697/bwcguide25aug98.pdf> for the official specification. }, 0 => { Name => 'NITFVersion', Format => 'int8u[2]', ValueConv => 'sprintf("%d.%.2d", split(" ",$val))', }, 2 => { Name => 'ImageFormat', ValueConv => 'chr($val)', PrintConv => { B => 'IMode B' }, }, 3 => { Name => 'BlocksPerRow', Format => 'int16u', }, 5 => { Name => 'BlocksPerColumn', Format => 'int16u', }, 7 => { Name => 'ImageColor', PrintConv => { 0 => 'Monochrome' }, }, 8 => 'BitDepth', 9 => { Name => 'ImageClass', PrintConv => { 0 => 'General Purpose', 4 => 'Tactical Imagery', }, }, 10 => { Name => 'JPEGProcess', PrintConv => { 1 => 'Baseline sequential DCT, Huffman coding, 8-bit samples', 4 => 'Extended sequential DCT, Huffman coding, 12-bit samples', }, }, 11 => 'Quality', 12 => { Name => 'StreamColor', PrintConv => { 0 => 'Monochrome' }, }, 13 => 'StreamBitDepth', 14 => { Name => 'Flags', Format => 'int32u', PrintConv => 'sprintf("0x%x", $val)', }, ); #------------------------------------------------------------------------------ # Extract information from the JPEG APP0 Ocad segment # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessOcad($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; $et->VerboseDir('APP0 Ocad', undef, length $$dataPt); for (;;) { last unless $$dataPt =~ /\$(\w+):([^\0\$]+)/g; my ($tag, $val) = ($1, $2); $val =~ s/^\s+//; $val =~ s/\s+$//; # remove leading/trailing spaces AddTagToTable($tagTablePtr, $tag) unless $$tagTablePtr{$tag}; $et->HandleTag($tagTablePtr, $tag, $val); } return 1; } #------------------------------------------------------------------------------ # Extract information from the JPEG APP0 Ocad segment # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessJPEG_HDR($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; $$dataPt =~ /~\0/g or $et->Warn('Unrecognized JPEG-HDR format'), return 0; my $pos = pos $$dataPt; my $meta = substr($$dataPt, 7, $pos-9); $et->VerboseDir('APP11 JPEG-HDR', undef, length $$dataPt); while ($meta =~ /(\w+)=([^,\s]*)/g) { my ($tag, $val) = ($1, $2); AddTagToTable($tagTablePtr, $tag) unless $$tagTablePtr{$tag}; $et->HandleTag($tagTablePtr, $tag, $val); } $et->HandleTag($tagTablePtr, 'RatioImage', substr($$dataPt, $pos)); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::JPEG - Definitions for uncommon JPEG segments =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool for some uncommon JPEG segments. For speed reasons, definitions for more common JPEG segments are included in the Image::ExifTool module itself. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/JPEG Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Jpeg2000.pm�������������������������������������������������000644 �000765 �000024 �00000075050 12642461315 021444� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Jpeg2000.pm # # Description: Read JPEG 2000 meta information # # Revisions: 02/11/2005 - P. Harvey Created # 06/22/2007 - PH Added write support (EXIF, IPTC and XMP only) # # References: 1) http://www.jpeg.org/public/fcd15444-2.pdf # 2) ftp://ftp.remotesensing.org/jpeg2000/fcd15444-1.pdf #------------------------------------------------------------------------------ package Image::ExifTool::Jpeg2000; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.25'; sub ProcessJpeg2000Box($$$); my %resolutionUnit = ( -3 => 'km', -2 => '100 m', -1 => '10 m', 0 => 'm', 1 => '10 cm', 2 => 'cm', 3 => 'mm', 4 => '0.1 mm', 5 => '0.01 mm', 6 => 'um', ); # map of where information is written in JPEG2000 image my %jp2Map = ( IPTC => 'UUID-IPTC', IFD0 => 'UUID-EXIF', XMP => 'UUID-XMP', 'UUID-IPTC' => 'JP2', 'UUID-EXIF' => 'JP2', 'UUID-XMP' => 'JP2', # jp2h => 'JP2', (not yet functional) # ICC_Profile => 'jp2h', (not yet functional) IFD1 => 'IFD0', EXIF => 'IFD0', # to write EXIF as a block ExifIFD => 'IFD0', GPS => 'IFD0', SubIFD => 'IFD0', GlobParamIFD => 'IFD0', PrintIM => 'IFD0', InteropIFD => 'ExifIFD', MakerNotes => 'ExifIFD', ); # UUID's for writable UUID directories (by tag name) my %uuid = ( 'UUID-EXIF' => 'JpgTiffExif->JP2', 'UUID-IPTC' => "\x33\xc7\xa4\xd2\xb8\x1d\x47\x23\xa0\xba\xf1\xa3\xe0\x97\xad\x38", 'UUID-XMP' => "\xbe\x7a\xcf\xcb\x97\xa9\x42\xe8\x9c\x71\x99\x94\x91\xe3\xaf\xac", # (can't yet write GeoJP2 information) # 'UUID-GeoJP2' => "\xb1\x4b\xf8\xbd\x08\x3d\x4b\x43\xa5\xae\x8c\xd7\xd5\xa6\xce\x03", ); # JPEG2000 codestream markers (ref ISO/IEC FCD15444-1/2) my %j2cMarker = ( 0x4f => 'SOC', # start of codestream 0x51 => 'SIZ', # image and tile size 0x52 => 'COD', # coding style default 0x53 => 'COC', # coding style component 0x55 => 'TLM', # tile-part lengths 0x57 => 'PLM', # packet length, main header 0x58 => 'PLT', # packet length, tile-part header 0x5c => 'QCD', # quantization default 0x5d => 'QCC', # quantization component 0x5e => 'RGN', # region of interest 0x5f => 'POD', # progression order default 0x60 => 'PPM', # packed packet headers, main 0x61 => 'PPT', # packed packet headers, tile-part 0x63 => 'CRG', # component registration 0x64 => 'CME', # comment and extension 0x90 => 'SOT', # start of tile-part 0x91 => 'SOP', # start of packet 0x92 => 'EPH', # end of packet header 0x93 => 'SOD', # start of data # extensions (ref ISO/IEC FCD15444-2) 0x70 => 'DCO', # variable DC offset 0x71 => 'VMS', # visual masking 0x72 => 'DFS', # downsampling factor style 0x73 => 'ADS', # arbitrary decomposition style # 0x72 => 'ATK', # arbitrary transformation kernels ? 0x78 => 'CBD', # component bit depth 0x74 => 'MCT', # multiple component transformation definition 0x75 => 'MCC', # multiple component collection 0x77 => 'MIC', # multiple component intermediate collection 0x76 => 'NLT', # non-linearity point transformation ); # JPEG 2000 "box" (ie. atom) names # Note: only tags with a defined "Format" are extracted %Image::ExifTool::Jpeg2000::Main = ( GROUPS => { 2 => 'Image' }, PROCESS_PROC => \&ProcessJpeg2000Box, WRITE_PROC => \&ProcessJpeg2000Box, PREFERRED => 1, # always add these tags when writing NOTES => q{ The tags below are extracted from JPEG 2000 images, however ExifTool currently writes only EXIF, IPTC and XMP tags in these images. }, 'jP ' => 'JP2Signature', # (ref 1) "jP\x1a\x1a" => 'JP2Signature', # (ref 2) prfl => 'Profile', ftyp => { Name => 'FileType', SubDirectory => { TagTable => 'Image::ExifTool::Jpeg2000::FileType' }, }, rreq => 'ReaderRequirements', jp2h => { Name => 'JP2Header', SubDirectory => { }, }, # JP2Header sub boxes... ihdr => { Name => 'ImageHeader', SubDirectory => { TagTable => 'Image::ExifTool::Jpeg2000::ImageHeader', }, }, bpcc => 'BitsPerComponent', colr => { Name => 'ColorSpecification', SubDirectory => { TagTable => 'Image::ExifTool::Jpeg2000::ColorSpec', }, }, pclr => 'Palette', cdef => 'ComponentDefinition', 'res '=> { Name => 'Resolution', SubDirectory => { }, }, # Resolution sub boxes... resc => { Name => 'CaptureResolution', SubDirectory => { TagTable => 'Image::ExifTool::Jpeg2000::CaptureResolution', }, }, resd => { Name => 'DisplayResolution', SubDirectory => { TagTable => 'Image::ExifTool::Jpeg2000::DisplayResolution', }, }, jpch => { Name => 'CodestreamHeader', SubDirectory => { }, }, # CodestreamHeader sub boxes... 'lbl '=> { Name => 'Label', Format => 'string', }, cmap => 'ComponentMapping', roid => 'ROIDescription', jplh => { Name => 'CompositingLayerHeader', SubDirectory => { }, }, # CompositingLayerHeader sub boxes... cgrp => 'ColorGroup', opct => 'Opacity', creg => 'CodestreamRegistration', dtbl => 'DataReference', ftbl => { Name => 'FragmentTable', Subdirectory => { }, }, # FragmentTable sub boxes... flst => 'FragmentList', cref => 'Cross-Reference', mdat => 'MediaData', comp => 'Composition', copt => 'CompositionOptions', inst => 'InstructionSet', asoc => 'Association', nlst => 'NumberList', bfil => 'BinaryFilter', drep => 'DesiredReproductions', # DesiredReproductions sub boxes... gtso => 'GraphicsTechnologyStandardOutput', chck => 'DigitalSignature', mp7b => 'MPEG7Binary', free => 'Free', jp2c => 'ContiguousCodestream', jp2i => { Name => 'IntellectualProperty', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' }, }, 'xml '=> { Name => 'XML', Writable => 'undef', Flags => [ 'Binary', 'Protected', 'BlockExtract' ], List => 1, Notes => q{ by default, the XML data in this tag is parsed using the ExifTool XMP module to to allow individual tags to be accessed when reading, but it may also be extracted as a block via the "XML" tag, which is also how this tag is written and copied. This is a List-type tag because multiple XML blocks may exist }, SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' }, }, uuid => [ { Name => 'UUID-EXIF', # (this is the EXIF that we create) Condition => '$$valPt=~/^JpgTiffExif->JP2/', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', ProcessProc => \&Image::ExifTool::ProcessTIFF, WriteProc => \&Image::ExifTool::WriteTIFF, DirName => 'EXIF', Start => '$valuePtr + 16', }, }, { Name => 'UUID-EXIF2', # written by Photoshop 7.01+Adobe JPEG2000-plugin v1.5 Condition => '$$valPt=~/^\x05\x37\xcd\xab\x9d\x0c\x44\x31\xa7\x2a\xfa\x56\x1f\x2a\x11\x3e/', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', ProcessProc => \&Image::ExifTool::ProcessTIFF, WriteProc => \&Image::ExifTool::WriteTIFF, DirName => 'EXIF', Start => '$valuePtr + 16', }, }, { Name => 'UUID-IPTC', # (this is the IPTC that we create) Condition => '$$valPt=~/^\x33\xc7\xa4\xd2\xb8\x1d\x47\x23\xa0\xba\xf1\xa3\xe0\x97\xad\x38/', SubDirectory => { TagTable => 'Image::ExifTool::IPTC::Main', Start => '$valuePtr + 16', }, }, { Name => 'UUID-IPTC2', # written by Photoshop 7.01+Adobe JPEG2000-plugin v1.5 Condition => '$$valPt=~/^\x09\xa1\x4e\x97\xc0\xb4\x42\xe0\xbe\xbf\x36\xdf\x6f\x0c\xe3\x6f/', SubDirectory => { TagTable => 'Image::ExifTool::IPTC::Main', Start => '$valuePtr + 16', }, }, { Name => 'UUID-XMP', # ref http://www.adobe.com/products/xmp/pdfs/xmpspec.pdf Condition => '$$valPt=~/^\xbe\x7a\xcf\xcb\x97\xa9\x42\xe8\x9c\x71\x99\x94\x91\xe3\xaf\xac/', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main', Start => '$valuePtr + 16', }, }, { Name => 'UUID-GeoJP2', # ref http://www.remotesensing.org/jpeg2000/ Condition => '$$valPt=~/^\xb1\x4b\xf8\xbd\x08\x3d\x4b\x43\xa5\xae\x8c\xd7\xd5\xa6\xce\x03/', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', ProcessProc => \&Image::ExifTool::ProcessTIFF, Start => '$valuePtr + 16', }, }, { Name => 'UUID-Photoshop', # written by Photoshop 7.01+Adobe JPEG2000-plugin v1.5 Condition => '$$valPt=~/^\x2c\x4c\x01\x00\x85\x04\x40\xb9\xa0\x3e\x56\x21\x48\xd6\xdf\xeb/', SubDirectory => { TagTable => 'Image::ExifTool::Photoshop::Main', Start => '$valuePtr + 16', }, }, { Name => 'UUID-Unknown', }, # also written by Adobe JPEG2000 plugin v1.5: # 3a 0d 02 18 0a e9 41 15 b3 76 4b ca 41 ce 0e 71 - 1 byte (01) # 47 c9 2c cc d1 a1 45 81 b9 04 38 bb 54 67 71 3b - 1 byte (01) # bc 45 a7 74 dd 50 4e c6 a9 f6 f3 a1 37 f4 7e 90 - 4 bytes (00 00 00 32) # d7 c8 c5 ef 95 1f 43 b2 87 57 04 25 00 f5 38 e8 - 4 bytes (00 00 00 32) ], uinf => { Name => 'UUIDInfo', SubDirectory => { }, }, # UUIDInfo sub boxes... ulst => 'UUIDList', 'url '=> { Name => 'URL', Format => 'string', }, ); %Image::ExifTool::Jpeg2000::ImageHeader = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'ImageHeight', Format => 'int32u', }, 4 => { Name => 'ImageWidth', Format => 'int32u', }, 8 => { Name => 'NumberOfComponents', Format => 'int16u', }, 10 => { Name => 'BitsPerComponent', PrintConv => q{ $val == 0xff and return 'Variable'; my $sign = ($val & 0x80) ? 'Signed' : 'Unsigned'; return (($val & 0x7f) + 1) . " Bits, $sign"; }, }, 11 => { Name => 'Compression', PrintConv => { 0 => 'Uncompressed', 1 => 'Modified Huffman', 2 => 'Modified READ', 3 => 'Modified Modified READ', 4 => 'JBIG', 5 => 'JPEG', 6 => 'JPEG-LS', 7 => 'JPEG 2000', 8 => 'JBIG2', }, }, ); # (ref fcd15444-1/2/6.pdf) # (also see http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html) %Image::ExifTool::Jpeg2000::FileType = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, FORMAT => 'int32u', 0 => { Name => 'MajorBrand', Format => 'undef[4]', PrintConv => { 'jp2 ' => 'JPEG 2000 Image (.JP2)', # image/jp2 'jpm ' => 'JPEG 2000 Compound Image (.JPM)', # image/jpm 'jpx ' => 'JPEG 2000 with extensions (.JPX)', # image/jpx }, }, 1 => { Name => 'MinorVersion', Format => 'undef[4]', ValueConv => 'sprintf("%x.%x.%x", unpack("nCC", $val))', }, 2 => { Name => 'CompatibleBrands', Format => 'undef[$size-8]', # ignore any entry with a null, and return others as a list ValueConv => 'my @a=($val=~/.{4}/sg); @a=grep(!/\0/,@a); \@a', }, ); %Image::ExifTool::Jpeg2000::CaptureResolution = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, FORMAT => 'int8s', 0 => { Name => 'CaptureYResolution', Format => 'rational32u', }, 4 => { Name => 'CaptureXResolution', Format => 'rational32u', }, 8 => { Name => 'CaptureYResolutionUnit', SeparateTable => 'ResolutionUnit', PrintConv => \%resolutionUnit, }, 9 => { Name => 'CaptureXResolutionUnit', SeparateTable => 'ResolutionUnit', PrintConv => \%resolutionUnit, }, ); %Image::ExifTool::Jpeg2000::DisplayResolution = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, FORMAT => 'int8s', 0 => { Name => 'DisplayYResolution', Format => 'rational32u', }, 4 => { Name => 'DisplayXResolution', Format => 'rational32u', }, 8 => { Name => 'DisplayYResolutionUnit', SeparateTable => 'ResolutionUnit', PrintConv => \%resolutionUnit, }, 9 => { Name => 'DisplayXResolutionUnit', SeparateTable => 'ResolutionUnit', PrintConv => \%resolutionUnit, }, ); %Image::ExifTool::Jpeg2000::ColorSpec = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, FORMAT => 'int8s', 0 => { Name => 'ColorSpecMethod', RawConv => '$$self{ColorSpecMethod} = $val', PrintConv => { 1 => 'Enumerated', 2 => 'Restricted ICC', 3 => 'Any ICC', 4 => 'Vendor Color', }, }, 1 => 'ColorSpecPrecedence', 2 => { Name => 'ColorSpecApproximation', PrintConv => { 0 => 'Not Specified', 1 => 'Accurate', 2 => 'Exceptional Quality', 3 => 'Reasonable Quality', 4 => 'Poor Quality', }, }, 3 => [ { Name => 'ICC_Profile', Condition => q{ $$self{ColorSpecMethod} == 2 or $$self{ColorSpecMethod} == 3 }, Format => 'undef[$size-3]', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main', }, }, { Name => 'ColorSpace', Condition => '$$self{ColorSpecMethod} == 1', Format => 'int32u', PrintConv => { # ref 15444-2 2002-05-15 0 => 'Bi-level', 1 => 'YCbCr(1)', 3 => 'YCbCr(2)', 4 => 'YCbCr(3)', 9 => 'PhotoYCC', 11 => 'CMY', 12 => 'CMYK', 13 => 'YCCK', 14 => 'CIELab', 15 => 'Bi-level(2)', # (incorrectly listed as 18 in 15444-2 2000-12-07) 16 => 'sRGB', 17 => 'Grayscale', 18 => 'sYCC', 19 => 'CIEJab', 20 => 'e-sRGB', 21 => 'ROMM-RGB', # incorrect in 15444-2 2000-12-07 #22 => 'sRGB based YCbCr', #23 => 'YPbPr(1125/60)', #24 => 'YPbPr(1250/50)', 22 => 'YPbPr(1125/60)', 23 => 'YPbPr(1250/50)', 24 => 'e-sYCC', }, }, { Name => 'ColorSpecData', Format => 'undef[$size-3]', Binary => 1, }, ], ); #------------------------------------------------------------------------------ # Create new JPEG 2000 boxes when writing # (Currently only supports adding top-level Writable JPEG2000 tags and certain UUID boxes) # Inputs: 0) ExifTool object ref, 1) Output file or scalar ref # Returns: 1 on success sub CreateNewBoxes($$) { my ($et, $outfile) = @_; my $addTags = $$et{AddJp2Tags}; my $addDirs = $$et{AddJp2Dirs}; delete $$et{AddJp2Tags}; delete $$et{AddJp2Dirs}; my ($tag, $dirName); # add JPEG2000 tags foreach $tag (sort keys %$addTags) { my $tagInfo = $$addTags{$tag}; my $nvHash = $et->GetNewValueHash($tagInfo); # (native JPEG2000 information is always preferred, so don't check IsCreating) next unless $$tagInfo{List} or $et->IsOverwriting($nvHash) > 0; next if $$nvHash{EditOnly}; my @vals = $et->GetNewValue($nvHash); my $val; foreach $val (@vals) { my $boxhdr = pack('N', length($val) + 8) . $$tagInfo{TagID}; Write($outfile, $boxhdr, $val) or return 0; ++$$et{CHANGED}; $et->VerboseValue("+ Jpeg2000:$$tagInfo{Name}", $val); } } # add UUID boxes foreach $dirName (sort keys %$addDirs) { next unless $uuid{$dirName}; my $tagInfo; foreach $tagInfo (@{$Image::ExifTool::Jpeg2000::Main{uuid}}) { next unless $$tagInfo{Name} eq $dirName; my $subdir = $$tagInfo{SubDirectory}; my $tagTable = GetTagTable($$subdir{TagTable}); my %dirInfo = ( DirName => $$subdir{DirName} || $dirName, Parent => 'JP2', ); # remove "UUID-" from start of directory name to allow appropriate # directories to be written as a block $dirInfo{DirName} =~ s/^UUID-//; my $newdir = $et->WriteDirectory(\%dirInfo, $tagTable, $$subdir{WriteProc}); if (defined $newdir and length $newdir) { my $boxhdr = pack('N', length($newdir) + 24) . 'uuid' . $uuid{$dirName}; Write($outfile, $boxhdr, $newdir) or return 0; last; } } } return 1; } #------------------------------------------------------------------------------ # Process JPEG 2000 box # Inputs: 0) ExifTool object reference, 1) dirInfo reference, 2) Pointer to tag table # Returns: 1 on success when reading, or -1 on write error # (or JP2 box or undef when writing from buffer) sub ProcessJpeg2000Box($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataLen = $$dirInfo{DataLen}; my $dataPos = $$dirInfo{DataPos}; my $dirLen = $$dirInfo{DirLen} || 0; my $dirStart = $$dirInfo{DirStart} || 0; my $base = $$dirInfo{Base} || 0; my $raf = $$dirInfo{RAF}; my $outfile = $$dirInfo{OutFile}; my $dirEnd = $dirStart + $dirLen; my ($err, $outBuff, $verbose); if ($outfile) { unless ($raf) { # buffer output to be used for return value $outBuff = ''; $outfile = \$outBuff; } } else { # (must not set verbose flag when writing!) $verbose = $$et{OPTIONS}{Verbose}; $et->VerboseDir($$dirInfo{DirName}) if $verbose; } # loop through all contained boxes my ($pos, $boxLen); for ($pos=$dirStart; ; $pos+=$boxLen) { my ($boxID, $buff, $valuePtr); my $hdrLen = 8; # the box header length if ($raf) { $dataPos = $raf->Tell() - $base; my $n = $raf->Read($buff,$hdrLen); unless ($n == $hdrLen) { $n and $err = '', last; if ($outfile) { CreateNewBoxes($et, $outfile) or $err = 1; } last; } $dataPt = \$buff; $dirLen = $dirEnd = $hdrLen; $pos = 0; } elsif ($pos >= $dirEnd - $hdrLen) { $err = '' unless $pos == $dirEnd; last; } $boxLen = unpack("x$pos N",$$dataPt); # (length includes header and data) $boxID = substr($$dataPt, $pos+4, 4); $pos += $hdrLen; # move to end of box header if ($boxLen == 1) { # box header contains an additional 8-byte integer for length $hdrLen += 8; if ($raf) { my $buf2; if ($raf->Read($buf2,8) == 8) { $buff .= $buf2; $dirLen = $dirEnd = $hdrLen; } } $pos > $dirEnd - 8 and $err = '', last; my ($hi, $lo) = unpack("x$pos N2",$$dataPt); $hi and $err = "Can't currently handle JPEG 2000 boxes > 4 GB", last; $pos += 8; # move to end of extended-length box header $boxLen = $lo - $hdrLen; # length of remaining box data } elsif ($boxLen == 0) { if ($raf) { if ($outfile) { CreateNewBoxes($et, $outfile) or $err = 1; # copy over the rest of the file Write($outfile, $$dataPt) or $err = 1; while ($raf->Read($buff, 65536)) { Write($outfile, $buff) or $err = 1; } } elsif ($verbose) { my $msg = sprintf("offset 0x%.4x to end of file", $dataPos + $base + $pos); $et->VPrint(0, "$$et{INDENT}- Tag '$boxID' ($msg)\n"); } last; # (ignore the rest of the file when reading) } $boxLen = $dirEnd - $pos; # data runs to end of file } else { $boxLen -= $hdrLen; # length of remaining box data } $boxLen < 0 and $err = 'Invalid JPEG 2000 box length', last; my $tagInfo = $et->GetTagInfo($tagTablePtr, $boxID); unless (defined $tagInfo or $verbose) { # no need to process this box if ($raf) { if ($outfile) { Write($outfile, $$dataPt) or $err = 1; $raf->Read($buff,$boxLen) == $boxLen or $err = '', last; Write($outfile, $buff) or $err = 1; } else { $raf->Seek($boxLen, 1) or $err = 'Seek error', last; } } elsif ($outfile) { Write($outfile, substr($$dataPt, $pos-$hdrLen, $boxLen+$hdrLen)) or $err = '', last; } next; } if ($raf) { # read the box data $dataPos = $raf->Tell() - $base; $raf->Read($buff,$boxLen) == $boxLen or $err = '', last; $valuePtr = 0; $dataLen = $boxLen; } elsif ($pos + $boxLen > $dirEnd) { $err = ''; last; } else { $valuePtr = $pos; } if (defined $tagInfo and not $tagInfo) { # GetTagInfo() required the value for a Condition my $tmpVal = substr($$dataPt, $valuePtr, $boxLen < 128 ? $boxLen : 128); $tagInfo = $et->GetTagInfo($tagTablePtr, $boxID, \$tmpVal); } # delete all UUID boxes and any writable box if deleting all information if ($outfile and $tagInfo) { if ($boxID eq 'uuid' and $$et{DEL_GROUP}{'*'}) { $et->VPrint(0, " Deleting $$tagInfo{Name}\n"); ++$$et{CHANGED}; next; } elsif ($$tagInfo{Writable}) { my $isOverwriting; if ($$et{DEL_GROUP}{Jpeg2000}) { $isOverwriting = 1; } else { my $nvHash = $et->GetNewValueHash($tagInfo); $isOverwriting = $et->IsOverwriting($nvHash); } if ($isOverwriting) { my $val = substr($$dataPt, $valuePtr, $boxLen); $et->VerboseValue("- Jpeg2000:$$tagInfo{Name}", $val); ++$$et{CHANGED}; next; } elsif (not $$tagInfo{List}) { delete $$et{AddJp2Tags}{$boxID}; } } } if ($verbose) { $et->VerboseInfo($boxID, $tagInfo, Table => $tagTablePtr, DataPt => $dataPt, Size => $boxLen, Start => $valuePtr, Addr => $valuePtr + $dataPos + $base, ); next unless $tagInfo; } if ($$tagInfo{SubDirectory}) { my $subdir = $$tagInfo{SubDirectory}; my $subdirStart = $valuePtr; if (defined $$subdir{Start}) { #### eval Start ($valuePtr) $subdirStart = eval($$subdir{Start}); } my $subdirLen = $boxLen - ($subdirStart - $valuePtr); my %subdirInfo = ( Parent => 'JP2', DataPt => $dataPt, DataPos => -$subdirStart, # (relative to Base) DataLen => $dataLen, DirStart => $subdirStart, DirLen => $subdirLen, DirName => $$subdir{DirName} || $$tagInfo{Name}, OutFile => $outfile, Base => $base + $dataPos + $subdirStart, ); # remove "UUID-" prefix to allow appropriate directories to be written as a block $subdirInfo{DirName} =~ s/^UUID-//; my $subTable = GetTagTable($$subdir{TagTable}) || $tagTablePtr; if ($outfile) { # remove this directory from our create list delete $$et{AddJp2Dirs}{$$tagInfo{Name}}; my $newdir; # only edit writable UUID boxes if ($uuid{$$tagInfo{Name}}) { $newdir = $et->WriteDirectory(\%subdirInfo, $subTable, $$subdir{WriteProc}); next if defined $newdir and not length $newdir; # next if deleting the box } # use old box data if not changed defined $newdir or $newdir = substr($$dataPt, $subdirStart, $subdirLen); my $prefixLen = $subdirStart - $valuePtr; my $boxhdr = pack('N', length($newdir) + 8 + $prefixLen) . $boxID; $boxhdr .= substr($$dataPt, $valuePtr, $prefixLen) if $prefixLen; Write($outfile, $boxhdr, $newdir) or $err = 1; } else { # extract as a block if specified $subdirInfo{BlockInfo} = $tagInfo if $$tagInfo{BlockExtract}; unless ($et->ProcessDirectory(\%subdirInfo, $subTable, $$subdir{ProcessProc})) { if ($subTable eq $tagTablePtr) { $err = 'JPEG 2000 format error'; } else { $err = "Unrecognized $$tagInfo{Name} box"; next if $$tagInfo{Name} eq 'XML'; } last; } } } elsif ($$tagInfo{Format} and not $outfile) { # only save tag values if Format was specified my $rational; my $val = ReadValue($dataPt, $valuePtr, $$tagInfo{Format}, undef, $boxLen, \$rational); if (defined $val) { my $key = $et->FoundTag($tagInfo, $val); # save Rational value $$et{RATIONAL}{$key} = $rational if defined $rational and defined $key; } } elsif ($outfile) { my $boxhdr = pack('N', $boxLen + 8) . $boxID; Write($outfile, $boxhdr, substr($$dataPt, $valuePtr, $boxLen)) or $err = 1; } } if (defined $err) { $err or $err = 'Truncated JPEG 2000 box'; if ($outfile) { $et->Error($err) unless $err eq '1'; return $raf ? -1 : undef; } $et->Warn($err); } return $outBuff if $outfile and not $raf; return 1; } #------------------------------------------------------------------------------ # Read/write meta information from a JPEG 2000 image # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid JPEG 2000 file, or -1 on write error sub ProcessJP2($$) { local $_; my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $outfile = $$dirInfo{OutFile}; my $hdr; # check to be sure this is a valid JPG2000 file return 0 unless $raf->Read($hdr,12) == 12; unless ($hdr eq "\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a" or # (ref 1) $hdr eq "\x00\x00\x00\x0cjP\x1a\x1a\x0d\x0a\x87\x0a") # (ref 2) { return 0 unless $hdr =~ /^\xff\x4f\xff\x51\0/; # check for JP2 codestream format if ($outfile) { $et->Error('Writing of J2C files is not yet supported'); return 0 } # add J2C markers if not done already unless ($Image::ExifTool::jpegMarker{0x4f}) { $Image::ExifTool::jpegMarker{$_} = $j2cMarker{$_} foreach keys %j2cMarker; } $et->SetFileType('J2C'); $raf->Seek(0,0); return $et->ProcessJPEG($dirInfo); # decode with JPEG processor } if ($outfile) { Write($outfile, $hdr) or return -1; $et->InitWriteDirs(\%jp2Map); # save list of directories to create my %addDirs = %{$$et{ADD_DIRS}}; $$et{AddJp2Dirs} = \%addDirs; $$et{AddJp2Tags} = $et->GetNewTagInfoHash(\%Image::ExifTool::Jpeg2000::Main); } else { my ($buff, $fileType); # recognize JPX and JPM as unique types of JP2 if ($raf->Read($buff, 12) == 12 and $buff =~ /^.{4}ftyp(.{4})/s) { $fileType = 'JPX' if $1 eq 'jpx '; $fileType = 'JPM' if $1 eq 'jpm '; } $raf->Seek(-length($buff), 1) if defined $buff; $et->SetFileType($fileType); } SetByteOrder('MM'); # JPEG 2000 files are big-endian my %dirInfo = ( RAF => $raf, DirName => 'JP2', OutFile => $$dirInfo{OutFile}, ); my $tagTablePtr = GetTagTable('Image::ExifTool::Jpeg2000::Main'); return $et->ProcessDirectory(\%dirInfo, $tagTablePtr); } 1; # end __END__ =head1 NAME Image::ExifTool::Jpeg2000 - Read JPEG 2000 meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to read JPEG 2000 files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.jpeg.org/public/fcd15444-2.pdf> =item L<ftp://ftp.remotesensing.org/jpeg2000/fcd15444-1.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Jpeg2000 Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/JPEGDigest.pm�����������������������������������������������000644 �000765 �000024 �00000650446 12643267775 022171� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: JPEGDigest.pm # # Description: Calculate JPEGDigest and JPEGQualityEstimate # # Revisions: 2008/09/15 - P. Harvey Created # 2016/01/05 - PH Added calculation of JPEGQualityEstimate # # References: JD) Jens Duttke # 2) Franz Buchinger private communication # 3) https://github.com/ImageMagick/ImageMagick/blob/master/coders/jpeg.c #------------------------------------------------------------------------------ package Image::ExifTool::JPEGDigest; use strict; use vars qw($VERSION); $VERSION = '1.05'; # the print conversion for the JPEGDigest tag my %PrintConv = ( #JD # No DQT defined 'd41d8cd98f00b204e9800998ecf8427e' => 'No DQT defined', # Tested with: # - Independent JPEG Group library (used by many applications) X3 (Win) # - Different subsamplings possible # - Dynamic Photo HDR 3.0 (Win) # - Fixed to quality 92? # - Fixed subsampling of 111111? # - FixFoto (Win) # - These DQTs are only used for the Quality settings 24 to 100 # - Different subsamplings possible # - Subsampling of 221111 is default # - GraphicConverter 4.4.4 (Mac) # - Using the JPEG 6.0 library # - Fixed subsampling to 221111 # - IrfanView 4.10 (Win) # - Subsampling 111111 with option "Disable subsampling", otherwise 221111 # - Quality mode 0 doesn't exist here # - Jasc Paint Shop Pro Version 5.01 (Win) # - Fixed subsampling of 221111 # - Use reversed Quality values (0 or 1 = 99; 2 = 98; 3 = 97 etc.) # - Microsoft GDI+ Version 5.1.3102.2180 (Win) # - Fixed subsampling of 221111 (or is that just the default subsampling?) # - Photomatix pro 3.0 (Win) # - Fixed subsampling to 221111 # IJG library 'f83c5bc303fa1f74265863c2c6844edf' => 'Independent JPEG Group library (used by many applications), Quality 0 or 1', '1e81ee25c96cdf46f44a9b930780f8c0' => 'Independent JPEG Group library (used by many applications), Quality 2', '205d4a597e68f2da78137e52f39d2728' => 'Independent JPEG Group library (used by many applications), Quality 3', '81a936d8371a7d59da428fcfc349850f' => 'Independent JPEG Group library (used by many applications), Quality 4', '610772f3cf75c2fd89214fafbd7617a6' => 'Independent JPEG Group library (used by many applications), Quality 5', '577ec8895d884612d064771e84cf231f' => 'Independent JPEG Group library (used by many applications), Quality 6', '7dc25cc528116e25dd1aeb590dd7cb66' => 'Independent JPEG Group library (used by many applications), Quality 7', 'e3cc8a85db1a32e81650b9668b98644a' => 'Independent JPEG Group library (used by many applications), Quality 8', 'e2408846813c1f5c7f5ce3cf69e741c4' => 'Independent JPEG Group library (used by many applications), Quality 9', 'e800426d2ef8d3cda13a0b41f1b2cc5a' => 'Independent JPEG Group library (used by many applications), Quality 10', '8ef467e72e5006d1b48209e7b5d94541' => 'Independent JPEG Group library (used by many applications), Quality 11', 'af6a08d0742aa8ed6bae2f1c374e7931' => 'Independent JPEG Group library (used by many applications), Quality 12', 'e002d9728c73f60e4d0509e1cea9af43' => 'Independent JPEG Group library (used by many applications), Quality 13', '1eb8b98bef8b062e4bc10cffea2d8372' => 'Independent JPEG Group library (used by many applications), Quality 14', '99d933a8a9ece6f2ee65757aa81ef5bd' => 'Independent JPEG Group library (used by many applications), Quality 15', 'c7d0f7dee5631d01bc55b7c598805d98' => 'Independent JPEG Group library (used by many applications), Quality 16', '71555bee8d64c9dfca3cefa9dd332472' => 'Independent JPEG Group library (used by many applications), Quality 17', '5009778c2a1df1deeb040c85fb9d0db2' => 'Independent JPEG Group library (used by many applications), Quality 18', '81339d89e8294729c69fc096f1a448f3' => 'Independent JPEG Group library (used by many applications), Quality 19', '82028a770d9e45d64d6aa26faee97e72' => 'Independent JPEG Group library (used by many applications), Quality 20', '3ebb7aa9113b3e1628f55732de7dae7f' => 'Independent JPEG Group library (used by many applications), Quality 21', '704c1868fe865f1038aa2bd0697f71a0' => 'Independent JPEG Group library (used by many applications), Quality 22', '555fd108ab97e641fcfefee4bda6a306' => 'Independent JPEG Group library (used by many applications), Quality 23', 'f1d9a0410c5ea11613569783625f5cf3' => 'Independent JPEG Group library (used by many applications), Quality 24', 'ce378a14d52ee5752ded23b5a444f75e' => 'Independent JPEG Group library (used by many applications), Quality 25', '3f243aacd371617b69f1e1eacadbbe2e' => 'Independent JPEG Group library (used by many applications), Quality 26', 'c70a1df73760a88deb890003cdab3bfe' => 'Independent JPEG Group library (used by many applications), Quality 27', 'aa5e05f96c53f6bc498f5016b1113651' => 'Independent JPEG Group library (used by many applications), Quality 28', '740d4a06f4d0f774c6aac95719673793' => 'Independent JPEG Group library (used by many applications), Quality 29', '1426dd9c1c8098936f395e201f1eb56d' => 'Independent JPEG Group library (used by many applications), Quality 30', '891a53bb6a5261a2c076cf8931c3660e' => 'Independent JPEG Group library (used by many applications), Quality 31', '1c87cb13f4b7a5ed45b09fc4f0e52d68' => 'Independent JPEG Group library (used by many applications), Quality 32', '2457f78378c5efdac8e1ef619a4285cd' => 'Independent JPEG Group library (used by many applications), Quality 33', '20f79a557d4edb1917d243d00a7a9ba8' => 'Independent JPEG Group library (used by many applications), Quality 34', 'e06d44ffef23792c88f215a5b2ed9478' => 'Independent JPEG Group library (used by many applications), Quality 35', 'df1b50991b82b66c82dc856cf82383da' => 'Independent JPEG Group library (used by many applications), Quality 36', 'ffd6e30af6d99997d38ec3e303687e25' => 'Independent JPEG Group library (used by many applications), Quality 37', 'ed923fdb1e5009215a49c0d92061c3b0' => 'Independent JPEG Group library (used by many applications), Quality 38', 'aaf1ebc6949569327f95cf7da78ee7bc' => 'Independent JPEG Group library (used by many applications), Quality 39', '0fe5225afaf055efd8453426c00e81e1' => 'Independent JPEG Group library (used by many applications), Quality 40', 'a79e66299883be78b02ceaaf9159c320' => 'Independent JPEG Group library (used by many applications), Quality 41', 'c9f10fb6d352cc8a8967e7e96a64862c' => 'Independent JPEG Group library (used by many applications), Quality 42', '6dc3abbdd52b2f26b790ddb33b82099a' => 'Independent JPEG Group library (used by many applications), Quality 43', '29572be1991c210fabacaeb658a74844' => 'Independent JPEG Group library (used by many applications), Quality 44', '0c9f89a3728234e0e85645c968d1d84a' => 'Independent JPEG Group library (used by many applications), Quality 45', 'a5e5355ae60c569dec306eb971a49276' => 'Independent JPEG Group library (used by many applications), Quality 46', '4a2605b7c5b1bc99b6715342de7b6562' => 'Independent JPEG Group library (used by many applications), Quality 47', '6af4053465275c1b1b2d5c97f4d841aa' => 'Independent JPEG Group library (used by many applications), Quality 48', '905a0b1688644902f6a65d872d68a9db' => 'Independent JPEG Group library (used by many applications), Quality 49', 'ffcd5eab8daeced571d59d4cdcc002c4' => 'Independent JPEG Group library (used by many applications), Quality 50', '76806382fa57818da2e406a0dc23ce20' => 'Independent JPEG Group library (used by many applications), Quality 51', '7c71a5eb9408b93be3ea6cf9be1d31ea' => 'Independent JPEG Group library (used by many applications), Quality 52', 'ccf3f63196092667f97c2ff723481a21' => 'Independent JPEG Group library (used by many applications), Quality 53', 'acc5e596cc4eb156b83eb89190b289a7' => 'Independent JPEG Group library (used by many applications), Quality 54', 'a16e53aa41aa66124557c0b976d73734' => 'Independent JPEG Group library (used by many applications), Quality 55', '2101fdf5c6f6e92943bc16ccf8aa46a8' => 'Independent JPEG Group library (used by many applications), Quality 56', 'aaa2026d750590e466d9198f20b888e4' => 'Independent JPEG Group library (used by many applications), Quality 57', 'fcd8c97cf6004230444ce21dab8a167f' => 'Independent JPEG Group library (used by many applications), Quality 58', '318081abf5329c90d984c2214d69f097' => 'Independent JPEG Group library (used by many applications), Quality 59', '95348adff2bf5a88f3967e9237fc571e' => 'Independent JPEG Group library (used by many applications), Quality 60; Pentax Better', 'e22b26930415798b7ecf2b060c1cdc2a' => 'Independent JPEG Group library (used by many applications), Quality 61', '3e646bfadb62d25ae8404b179e93e74e' => 'Independent JPEG Group library (used by many applications), Quality 62', '34bf5c46342f2a514f8ae562e520ece0' => 'Independent JPEG Group library (used by many applications), Quality 63', 'fc9f2bd278075ea89d482e1f9e66738f' => 'Independent JPEG Group library (used by many applications), Quality 64', 'b55f27c368f119f25957c8e0036b27f8' => 'Independent JPEG Group library (used by many applications), Quality 65', '5f7b9af6d66eaf12874aa680e7b0d31b' => 'Independent JPEG Group library (used by many applications), Quality 66', 'a78fd0f1183b268b2fdfa23308c3ad44' => 'Independent JPEG Group library (used by many applications), Quality 67', '61814a2eca233e10b0ba26881551fb50' => 'Independent JPEG Group library (used by many applications), Quality 68', 'ce0f36a3d870b24f9816634000ea2d2e' => 'Independent JPEG Group library (used by many applications), Quality 69', 'f7cba1affebd362a322abd45ce580e56' => 'Independent JPEG Group library (used by many applications), Quality 70', '7b85fffdf97680de53e49788712c50de' => 'Independent JPEG Group library (used by many applications), Quality 71', '4abd7dbca7735c987eb899b0f8646ce4' => 'Independent JPEG Group library (used by many applications), Quality 72', '167959a11aff7940df84ed9f3379ed0a' => 'Independent JPEG Group library (used by many applications), Quality 73', 'd61807da54a72c4651466049c9f67541' => 'Independent JPEG Group library (used by many applications), Quality 74', '2851eea5e15f1b977c1496a77c884b4f' => 'Independent JPEG Group library (used by many applications), Quality 75', 'b095631a0665a515d9aa290639f6672b' => 'Independent JPEG Group library (used by many applications), Quality 76', '0ee4ea4687d3c57d060e3afd2559b7bb' => 'Independent JPEG Group library (used by many applications), Quality 77', '37e999828e5bc43ee4a470bf29ea97b7' => 'Independent JPEG Group library (used by many applications), Quality 78', 'dd9b9d09a624deab730d9bd5b8825baa' => 'Independent JPEG Group library (used by many applications), Quality 79', '5319a82dc93c1ee5c8d2265e4f1fb60e' => 'Independent JPEG Group library (used by many applications), Quality 80', '6fa04ba1184e986c4da3df8141e05a42' => 'Independent JPEG Group library (used by many applications), Quality 81', '1d099901cfe37674e4aeb2cdbddf0703' => 'Independent JPEG Group library (used by many applications), Quality 82', '8cc04e05813c028683e3cb8e6eab79eb' => 'Independent JPEG Group library (used by many applications), Quality 83', '3eafbf05c0dd233b385856065e456c11' => 'Independent JPEG Group library (used by many applications), Quality 84', '98dec36fe95ed7c1772d9ed67a67e260' => 'Independent JPEG Group library (used by many applications), Quality 85', 'a1ee06d19dcb62c7467768d1ba73cf12' => 'Independent JPEG Group library (used by many applications), Quality 86', '643ad95753c261eacc5ea3f4c9e4d469' => 'Independent JPEG Group library (used by many applications), Quality 87', '2557828257dd798ad636df350c685a26' => 'Independent JPEG Group library (used by many applications), Quality 88', 'a5b4bbf018828a3d00e54ab72a175fdc' => 'Independent JPEG Group library (used by many applications), Quality 89', '50325a7b6e0a9b7f9aea8f5a6f7f31aa' => 'Independent JPEG Group library (used by many applications), Quality 90', 'c0cf6b0c508a35a13acd8c912548a269' => 'Independent JPEG Group library (used by many applications), Quality 91', 'ff0aa07a220cd8973a4b86f3ecd4325b' => 'Independent JPEG Group library (used by many applications), Quality 92', 'f251d4554524d22f94a34668ab17957c' => 'Independent JPEG Group library (used by many applications), Quality 93', 'cd993be55bad60bb539df0cc2d7f9f6f' => 'Independent JPEG Group library (used by many applications), Quality 94', 'adf507352f9ce218a4605700459d597f' => 'Independent JPEG Group library (used by many applications), Quality 95', '9e9e3e22af4e41ea4ec1b8f656f28f42' => 'Independent JPEG Group library (used by many applications), Quality 96', 'b9f5c003ef62cbd8fc93be6679c1c3bc' => 'Independent JPEG Group library (used by many applications), Quality 97', '95b6a316836182441b12039279872ec3' => 'Independent JPEG Group library (used by many applications), Quality 98', 'b9b1ce23552e2f82b95b48de20065ed3' => 'Independent JPEG Group library (used by many applications), Quality 99', 'a97591462e9b2339efd4f88ca97bb471' => 'Independent JPEG Group library (used by many applications), Quality 100', # Independent JPEG Group library (Grayscale) # # Tested with: # - Corel PhotoImpact X3 (Win) # - IrfanView (Win) # - Quality mode 0 doesn't exist here '185893c53196f6156d458a84e1135c43:11' => 'Independent JPEG Group library (used by many applications), Quality 0 or 1 (Grayscale)', 'b41ccbe66e41a05de5e68832c07969a7:11' => 'Independent JPEG Group library (used by many applications), Quality 2 (Grayscale)', 'efa024d741ecc5204e7edd4f590a7a25:11' => 'Independent JPEG Group library (used by many applications), Quality 3 (Grayscale)', '3396344724a1868ada2330ebaeb9448e:11' => 'Independent JPEG Group library (used by many applications), Quality 4 (Grayscale)', '14276fffb98deb42b7dbce30abb8425f:11' => 'Independent JPEG Group library (used by many applications), Quality 5 (Grayscale)', 'a99e2826c10d0922ce8942c5437f53a6:11' => 'Independent JPEG Group library (used by many applications), Quality 6 (Grayscale)', '0d3de456aa5cbb8a2578208250aa9b88:11' => 'Independent JPEG Group library (used by many applications), Quality 7 (Grayscale)', 'fa987940fdedbe883cc0e9fcc907f89e:11' => 'Independent JPEG Group library (used by many applications), Quality 8 (Grayscale)', '1c9bb67190ee64e82d3c67f7943bf4a4:11' => 'Independent JPEG Group library (used by many applications), Quality 9 (Grayscale)', '57d20578d190b04c7667b10d3df241bb:11' => 'Independent JPEG Group library (used by many applications), Quality 10 (Grayscale)', '619fd49197f0403ce13d86cffec46419:11' => 'Independent JPEG Group library (used by many applications), Quality 11 (Grayscale)', '327f47dd8f999b2bbb3bb25c43cf5be5:11' => 'Independent JPEG Group library (used by many applications), Quality 12 (Grayscale)', 'e4e5bc705c40cfaffff6565f16fe98a9:11' => 'Independent JPEG Group library (used by many applications), Quality 13 (Grayscale)', '6c64fa9ad302624a826f04ecc80459be:11' => 'Independent JPEG Group library (used by many applications), Quality 14 (Grayscale)', '039a3f0e101f1bcdb6bb81478cf7ae6b:11' => 'Independent JPEG Group library (used by many applications), Quality 15 (Grayscale)', 'c23b08c94d7537c9447691d54ae1080c:11' => 'Independent JPEG Group library (used by many applications), Quality 16 (Grayscale)', '200107bc0174104bbf1d4653c4b05058:11' => 'Independent JPEG Group library (used by many applications), Quality 17 (Grayscale)', '72abfdc6e65b32ded2cd7ac77a04f447:11' => 'Independent JPEG Group library (used by many applications), Quality 18 (Grayscale)', '1799a236c36da0b30729d9005ca7c7f9:11' => 'Independent JPEG Group library (used by many applications), Quality 19 (Grayscale)', 'c33a667bff7f590655d196010c5e39f3:11' => 'Independent JPEG Group library (used by many applications), Quality 20 (Grayscale)', 'b1dc98f6a2f8828f8432872da43e7d94:11' => 'Independent JPEG Group library (used by many applications), Quality 21 (Grayscale)', '07318a0acfebe9086f0e04a4c4f5398a:11' => 'Independent JPEG Group library (used by many applications), Quality 22 (Grayscale)', 'a295b7163305f327a5a45ae177a0a19c:11' => 'Independent JPEG Group library (used by many applications), Quality 23 (Grayscale)', 'c741c1b134cf81ab69acc81f15a67137:11' => 'Independent JPEG Group library (used by many applications), Quality 24 (Grayscale)', 'a68893776502a591548c7b5bece13e1b:11' => 'Independent JPEG Group library (used by many applications), Quality 25 (Grayscale)', '111848d9e41f6f408ef70841f90c0519:11' => 'Independent JPEG Group library (used by many applications), Quality 26 (Grayscale)', '886374ceebcfd4dfed200b0b34b4baca:11' => 'Independent JPEG Group library (used by many applications), Quality 27 (Grayscale)', '666dd95fd0e20f5c20bc44d78d528869:11' => 'Independent JPEG Group library (used by many applications), Quality 28 (Grayscale)', '1aa58cb85dda84de2ddf436667124dcd:11' => 'Independent JPEG Group library (used by many applications), Quality 29 (Grayscale)', '9d321ab2bdda6f3cb76d2d88838aa8c3:11' => 'Independent JPEG Group library (used by many applications), Quality 30 (Grayscale)', '6ad87d648101c268f83fa379d4c773f2:11' => 'Independent JPEG Group library (used by many applications), Quality 31 (Grayscale)', 'cdf8e921300f27a4af7661a2de16e91a:11' => 'Independent JPEG Group library (used by many applications), Quality 32 (Grayscale)', '3f48672e37b6dd2e571b222e4b7ff97d:11' => 'Independent JPEG Group library (used by many applications), Quality 33 (Grayscale)', 'a53a7d4cc86d01f4c1b867270c9c078f:11' => 'Independent JPEG Group library (used by many applications), Quality 34 (Grayscale)', '09ec03f5096df106c692123f3fd34296:11' => 'Independent JPEG Group library (used by many applications), Quality 35 (Grayscale)', 'a946498fd1902c9de87a1f5182966742:11' => 'Independent JPEG Group library (used by many applications), Quality 36 (Grayscale)', '5d650a1d38108fd79d4f336ba8e254c2:11' => 'Independent JPEG Group library (used by many applications), Quality 37 (Grayscale)', '81d620f1b470fd535b26544b4ea20643:11' => 'Independent JPEG Group library (used by many applications), Quality 38 (Grayscale)', '892788bdf8cbef5c6fbd7019a079bf8e:11' => 'Independent JPEG Group library (used by many applications), Quality 39 (Grayscale)', 'cf3929fd4c1e5c28b7f137f982178ad1:11' => 'Independent JPEG Group library (used by many applications), Quality 40 (Grayscale)', '31f288945896ed839f1d936bff06fb03:11' => 'Independent JPEG Group library (used by many applications), Quality 41 (Grayscale)', 'e0c38f0c5e6562445d4e92bae51713be:11' => 'Independent JPEG Group library (used by many applications), Quality 42 (Grayscale)', '18fa29d1164984883a6af76377b60d5a:11' => 'Independent JPEG Group library (used by many applications), Quality 43 (Grayscale)', 'eff737b226fbce48c42625c5bf9dabb6:11' => 'Independent JPEG Group library (used by many applications), Quality 44 (Grayscale)', 'b900f91ee8697255d5daebce858caaeb:11' => 'Independent JPEG Group library (used by many applications), Quality 45 (Grayscale)', 'ab2f8513823067af242f7e3c04a88a9c:11' => 'Independent JPEG Group library (used by many applications), Quality 46 (Grayscale)', '60b682c4d412f5255efbaa32787c46ca:11' => 'Independent JPEG Group library (used by many applications), Quality 47 (Grayscale)', 'ea50813e06203c2ad1165252bcb99a1d:11' => 'Independent JPEG Group library (used by many applications), Quality 48 (Grayscale)', 'f6308a717437d3653b0751ebf511db0f:11' => 'Independent JPEG Group library (used by many applications), Quality 49 (Grayscale)', '7c8242581553e818ef243fc680879a19:11' => 'Independent JPEG Group library (used by many applications), Quality 50 (Grayscale)', 'fc41ab8251718977bc6676f502f457e0:11' => 'Independent JPEG Group library (used by many applications), Quality 51 (Grayscale)', '606c4c78c0226646bf4d3c5a5898fb17:11' => 'Independent JPEG Group library (used by many applications), Quality 52 (Grayscale)', '0e6c6a5440d33d25f1c25836a45cfa69:11' => 'Independent JPEG Group library (used by many applications), Quality 53 (Grayscale)', '7464b2361e5b5f5a9ba74a87475dda91:11' => 'Independent JPEG Group library (used by many applications), Quality 54 (Grayscale)', 'aeaa2ca48eabb3088ebb713b3c4e1a67:11' => 'Independent JPEG Group library (used by many applications), Quality 55 (Grayscale)', '3f36450b0ba074578391e77f7340cef0:11' => 'Independent JPEG Group library (used by many applications), Quality 56 (Grayscale)', 'be232444027e83db6f8d8b79d078442e:11' => 'Independent JPEG Group library (used by many applications), Quality 57 (Grayscale)', '712c145d6472a2b315b2ecfb916d1590:11' => 'Independent JPEG Group library (used by many applications), Quality 58 (Grayscale)', 'ae3dd4568cc71c47d068cf831c66b59d:11' => 'Independent JPEG Group library (used by many applications), Quality 59 (Grayscale)', 'b290e52c21a435fede4586636ef5e287:11' => 'Independent JPEG Group library (used by many applications), Quality 60 (Grayscale)', 'a09ca4c4391e0221396a08f229a65f9d:11' => 'Independent JPEG Group library (used by many applications), Quality 61 (Grayscale)', '0818578fc5fc571b4f8d5ffefc9dc0d8:11' => 'Independent JPEG Group library (used by many applications), Quality 62 (Grayscale)', '7c685e2916555eda34cb37a1e71adc6a:11' => 'Independent JPEG Group library (used by many applications), Quality 63 (Grayscale)', '69c6b9440342adfc0db89a6c91aba332:11' => 'Independent JPEG Group library (used by many applications), Quality 64 (Grayscale)', 'd5d484b68e25b44288e67e699829695c:11' => 'Independent JPEG Group library (used by many applications), Quality 65 (Grayscale)', 'de8310d09116a7a62965f3e0e43ef525:11' => 'Independent JPEG Group library (used by many applications), Quality 66 (Grayscale)', 'e4735f63e88baf04599afc034e690845:11' => 'Independent JPEG Group library (used by many applications), Quality 67 (Grayscale)', 'b4ef810b14dee9c6d6d8cace98f799a6:11' => 'Independent JPEG Group library (used by many applications), Quality 68 (Grayscale)', '52886ef80147c9a136e20b2bc3b76f52:11' => 'Independent JPEG Group library (used by many applications), Quality 69 (Grayscale)', '9c62dbc848be82ef91219ba9843998be:11' => 'Independent JPEG Group library (used by many applications), Quality 70 (Grayscale)', 'bfe8c1c73eea84b85673487a82f67627:11' => 'Independent JPEG Group library (used by many applications), Quality 71 (Grayscale)', 'ea445840d29c51009a2a8cd49b96ccee:11' => 'Independent JPEG Group library (used by many applications), Quality 72 (Grayscale)', '71c1a56890fff9b0a095fa5a1c96132b:11' => 'Independent JPEG Group library (used by many applications), Quality 73 (Grayscale)', 'f080b02331ac8adf03de2281042d2b49:11' => 'Independent JPEG Group library (used by many applications), Quality 74 (Grayscale)', 'd0eaa368737f17f6037757d393a22599:11' => 'Independent JPEG Group library (used by many applications), Quality 75 (Grayscale)', '303663905d055b77bb547fe0b0beb9c5:11' => 'Independent JPEG Group library (used by many applications), Quality 76 (Grayscale)', '5cdf1d5bbe19375ad5c7237273dddede:11' => 'Independent JPEG Group library (used by many applications), Quality 77 (Grayscale)', 'd64e7ff8292fd77131932864d3c9ce7c:11' => 'Independent JPEG Group library (used by many applications), Quality 78 (Grayscale)', '12b4cc13891c5aef3dadb3405b6fa65d:11' => 'Independent JPEG Group library (used by many applications), Quality 79 (Grayscale)', 'b008cd63591f8fd366f77d2b224b9c9c:11' => 'Independent JPEG Group library (used by many applications), Quality 80 (Grayscale)', '49b6e472c7d5ecead593c6009768e765:11' => 'Independent JPEG Group library (used by many applications), Quality 81 (Grayscale)', 'bce6fa61623ad4f65ff3fec1528cb026:11' => 'Independent JPEG Group library (used by many applications), Quality 82 (Grayscale)', 'c2b037bf9f5e5baba804d7bbbb2dc73b:11' => 'Independent JPEG Group library (used by many applications), Quality 83 (Grayscale)', '7fe7b339c6ffc62b984eeab4b0df9168:11' => 'Independent JPEG Group library (used by many applications), Quality 84 (Grayscale)', '274bbeb0ac3939f90c578ebb1f5a9eef:11' => 'Independent JPEG Group library (used by many applications), Quality 85 (Grayscale)', '0a0268c655d616b0e4af2851533aa3af:11' => 'Independent JPEG Group library (used by many applications), Quality 86 (Grayscale)', '52318e260c0d6b3dbee85c87f9b94e63:11' => 'Independent JPEG Group library (used by many applications), Quality 87 (Grayscale)', 'b64cc19a0f81a506ed5bcfb9c131c8fe:11' => 'Independent JPEG Group library (used by many applications), Quality 88 (Grayscale)', 'd8c54333eb475b8db9f32f11fe96337e:11' => 'Independent JPEG Group library (used by many applications), Quality 89 (Grayscale)', '12fe6b9bfd20f4d7f0ac2a221c566c45:11' => 'Independent JPEG Group library (used by many applications), Quality 90 (Grayscale)', '12aefbf7689633c83da714c9f0e90e05:11' => 'Independent JPEG Group library (used by many applications), Quality 91 (Grayscale)', 'a3a96add050fc51a2b3ce59a9a491034:11' => 'Independent JPEG Group library (used by many applications), Quality 92 (Grayscale)', '7b0242bd9aaeab4962f5d5b39b9a4027:11' => 'Independent JPEG Group library (used by many applications), Quality 93 (Grayscale)', '12fc29c1d8940c93a47ee9d927a17561:11' => 'Independent JPEG Group library (used by many applications), Quality 94 (Grayscale)', 'e1fedef5184beeb7b0f5c055c7ae1d31:11' => 'Independent JPEG Group library (used by many applications), Quality 95 (Grayscale)', 'ae9202355f603776794d3e62c43578d6:11' => 'Independent JPEG Group library (used by many applications), Quality 96 (Grayscale)', '36da00bae6cd81d1f97e32748c07e33f:11' => 'Independent JPEG Group library (used by many applications), Quality 97 (Grayscale)', '54dc50b16e7cc9bc383eb9e73e85e199:11' => 'Independent JPEG Group library (used by many applications), Quality 98 (Grayscale)', '23a59c4f9ec045faf9f8379b3ca302bb:11' => 'Independent JPEG Group library (used by many applications), Quality 99 (Grayscale)', 'bbd2dbcfe20b59e981e9a42cd1eb6ece:11' => 'Independent JPEG Group library (used by many applications), Quality 100 (Grayscale)', # Tested with Adobe Photoshop Lightroom 1.4.1 (Win) - "Export" '683506a889c78d9bc230a0c7ee5f62f3:221111' => 'Adobe Lightroom, Quality 0% - 7%', 'bc490651af6592cd1dbbbc4fa2cfa1fb:221111' => 'Adobe Lightroom, Quality 8% - 15%', 'ce4286d9f07999524c3c7472b065c5ab:221111' => 'Adobe Lightroom, Quality 16% - 23%', 'cbfbfef12aead8841585ef605c789b9f:221111' => 'Adobe Lightroom, Quality 24% - 30%', 'a0772e73dec2bdc4057c27da47bff376:221111' => 'Adobe Lightroom, Quality 31% - 38%', '7ef06dbde538346b8b01c6b538ca70c6:221111' => 'Adobe Lightroom, Quality 39% - 46%', '0ff225f58a214f79d1d85d78f6f5dab8:221111' => 'Adobe Lightroom, Quality 47% - 53%', '8a8603650fa5ae5fdcf4b2eaf0b23638:111111' => 'Adobe Lightroom, Quality 54% - 61%', '44f583ed6b65cb8ba915ec5df051616c:111111' => 'Adobe Lightroom, Quality 62% - 69%', 'de94c5591bafc7456ccaef430271b907:111111' => 'Adobe Lightroom, Quality 70% - 76%', 'a6841b35e9ffefa5d83a0445dddd2621:111111' => 'Adobe Lightroom, Quality 77% - 84%', '6e3f6a3a5a1eae6155331d42d6f968dd:111111' => 'Adobe Lightroom, Quality 85% - 92%', '5379e0133d4439b6f7c7039fc7f7734f:111111' => 'Adobe Lightroom, Quality 93% - 100%', # Adobe Photoshop Lightroom 2.1 (Win) - "Export" # (0-23% equal to Lightroom 1.4.1) '8453391d3adf377c46a1a0cee08c35c3:221111' => 'Adobe Lightroom, Quality 24% - 30%', 'f8ede291b1272576d1580e333d30103e:221111' => 'Adobe Lightroom, Quality 31% - 38%', 'de0fb6d13e12e8df26140dd74691bf0f:221111' => 'Adobe Lightroom, Quality 39% - 46%', '0d5b0af72561f68c671731f22d9e41e2:221111' => 'Adobe Lightroom, Quality 47% - 53%', 'b9fd15fd52408af5ea2a5045227233d8:111111' => 'Adobe Lightroom, Quality 54% - 61%', '27472e3714251402d5509438505611c3:111111' => 'Adobe Lightroom, Quality 62% - 69%', '34a599dff2b6aaed12143938b7374f2f:111111' => 'Adobe Lightroom, Quality 70% - 76%', '5c508e529d045b6f0c800e29ba2d6ab5:111111' => 'Adobe Lightroom, Quality 77% - 84%', '42bfe52476bf07f1ed0e6451903cc9ee:111111' => 'Adobe Lightroom, Quality 85% - 92%', '4c3c425b4024b68c0de03904a825bc35:111111' => 'Adobe Lightroom, Quality 93% - 100%', # Tested with Adobe Photoshop CS2 Version 9.0.2 (Win) - "Save as..." (RGB/CYMK) '683506a889c78d9bc230a0c7ee5f62f3:221111' => 'Adobe Photoshop, Quality 0', 'bc490651af6592cd1dbbbc4fa2cfa1fb:221111' => 'Adobe Photoshop, Quality 1', 'ce4286d9f07999524c3c7472b065c5ab:221111' => 'Adobe Photoshop, Quality 2', 'cbfbfef12aead8841585ef605c789b9f:221111' => 'Adobe Photoshop, Quality 3', 'a0772e73dec2bdc4057c27da47bff376:221111' => 'Adobe Photoshop, Quality 4', '7ef06dbde538346b8b01c6b538ca70c6:221111' => 'Adobe Photoshop, Quality 5', '0ff225f58a214f79d1d85d78f6f5dab8:221111' => 'Adobe Photoshop, Quality 6', '8a8603650fa5ae5fdcf4b2eaf0b23638:111111' => 'Adobe Photoshop, Quality 7', '44f583ed6b65cb8ba915ec5df051616c:111111' => 'Adobe Photoshop, Quality 8', 'de94c5591bafc7456ccaef430271b907:111111' => 'Adobe Photoshop, Quality 9', 'a6841b35e9ffefa5d83a0445dddd2621:111111' => 'Adobe Photoshop, Quality 10', '6e3f6a3a5a1eae6155331d42d6f968dd:111111' => 'Adobe Photoshop, Quality 11', '5379e0133d4439b6f7c7039fc7f7734f:111111' => 'Adobe Photoshop, Quality 12', # Tested with Adobe Photoshop CS2 Version 9.0.2 (Win) - "Save as..." (Grayscale) '3b0b5975a0e1c9d732c93e1b37a6978b:11' => 'Adobe Photoshop, Quality 0', 'f4d19ed563e2d0519d6a547088771ddb:11' => 'Adobe Photoshop, Quality 1', 'e9ef286567fd84a1f479b35ca00db43c:11' => 'Adobe Photoshop, Quality 2', 'b39cafdb459a42749be3f6459a596677:11' => 'Adobe Photoshop, Quality 3', 'b3f215deea48e982e205619af279205f:11' => 'Adobe Photoshop, Quality 4', 'fccd63ce166e198065eaae05c8d78407:11' => 'Adobe Photoshop, Quality 5', '0a50266ad8d1dff11c90cd1480c0a2be:11' => 'Adobe Photoshop, Quality 6', '6579941db0216f41f0a20de9b626538a:11' => 'Adobe Photoshop, Quality 7', '57aa47876e10c6b4f35ecb8889e55ad9:11' => 'Adobe Photoshop, Quality 8', '076598d43c5186f6d7a1020b64b93625:11' => 'Adobe Photoshop, Quality 9', '37132e8ea81137fdf26ce30926ab8100:11' => 'Adobe Photoshop, Quality 10', '46f55ee294723cee9faa816549b3cfa7:11' => 'Adobe Photoshop, Quality 11', '7b83284f61decf47ab3f8f7361c18943:11' => 'Adobe Photoshop, Quality 12', # Tested with Adobe Photoshop CS2 Version 9.0.2 (Win) - "Save for web..." '9ac881c536e509675e5cf3795a85d9de:221111' => 'Adobe Photoshop, Save for web, Quality 0', '3521d793fd9d2d9aac85dc4f0be40290:221111' => 'Adobe Photoshop, Save for web, Quality 1', '041c9e3cf0d34a8b89539e3115bca31b:221111' => 'Adobe Photoshop, Save for web, Quality 2', '029b3a6f0b92af6786d753788eafabfe:221111' => 'Adobe Photoshop, Save for web, Quality 3', '6cdd3762e346b16a59af4bddb213b07a:221111' => 'Adobe Photoshop, Save for web, Quality 4', '84a69c0b43505dd0cbc25d640873b5b9:221111' => 'Adobe Photoshop, Save for web, Quality 5', '7254c012821f2bc866d7d6dd7906c92d:221111' => 'Adobe Photoshop, Save for web, Quality 6', '428ba2c747ea4e495ff3c7ff44a988d2:221111' => 'Adobe Photoshop, Save for web, Quality 7', '42cb001aea7e24d239f6c2fcbd861862:221111' => 'Adobe Photoshop, Save for web, Quality 8', 'a3698813ce90772a30b6eb9a7deb3f4a:221111' => 'Adobe Photoshop, Save for web, Quality 9', '301158b292e3232856a765486da26fa6:221111' => 'Adobe Photoshop, Save for web, Quality 10', '8d9edea9287aa919e433b620f61468dc:221111' => 'Adobe Photoshop, Save for web, Quality 11', 'c1e0554d8a6ed003eb98e068429b56b9:221111' => 'Adobe Photoshop, Save for web, Quality 12', '0e0a151e0a52097cbd7683c9385e3a7c:221111' => 'Adobe Photoshop, Save for web, Quality 13', '911e66f21fe242cc74e0a5738b0330bd:221111' => 'Adobe Photoshop, Save for web, Quality 14', '028fafd94aa66ee269f58d800c89d838:221111' => 'Adobe Photoshop, Save for web, Quality 15', '866b8adb1ce7c9dc0e58b7c1e013280f:221111' => 'Adobe Photoshop, Save for web, Quality 16', '7f712aecf513621f635a007aadda61af:221111' => 'Adobe Photoshop, Save for web, Quality 17', '38f26622a54ba22accac05f7c0a3b307:221111' => 'Adobe Photoshop, Save for web, Quality 18', 'd241d5165e64e98024b47dfbf76be88c:221111' => 'Adobe Photoshop, Save for web, Quality 19', 'afb31cfed194d4e125bde8fd4755bb8a:221111' => 'Adobe Photoshop, Save for web, Quality 20', '0d501a036c984d2caf49fd298b2d0d16:221111' => 'Adobe Photoshop, Save for web, Quality 21', '9e992f35767c4aa023b8afd243b247bf:221111' => 'Adobe Photoshop, Save for web, Quality 22', '0a80e5bf01a9c5650384dfe1a428f61d:221111' => 'Adobe Photoshop, Save for web, Quality 23', '2501aad23cdf94b25c6df0ab6984b6e0:221111' => 'Adobe Photoshop, Save for web, Quality 24', '09c168d2e075070d3a2535e7f2e455df:221111' => 'Adobe Photoshop, Save for web, Quality 25', '63190207beeb805306f7d0bcc3898cb3:221111' => 'Adobe Photoshop, Save for web, Quality 26', 'e47902bc7ba3037921010c568648c8c3:221111' => 'Adobe Photoshop, Save for web, Quality 27', '410ed63b6e5225d8b99da6272fd6069b:221111' => 'Adobe Photoshop, Save for web, Quality 28', 'b40f3f3c46d70a560e2033fadd8c7bb5:221111' => 'Adobe Photoshop, Save for web, Quality 29', '45148ae63b12ccaa6fb5a487ca7620e9:221111' => 'Adobe Photoshop, Save for web, Quality 30', '5180e51bd58432c7b51a305ed0c24d1b:221111' => 'Adobe Photoshop, Save for web, Quality 31', 'c5c472d899462bbe31da9aa8c072c0bc:221111' => 'Adobe Photoshop, Save for web, Quality 32', '28cdbc95898e02dd0ffc45ba48596ca7:221111' => 'Adobe Photoshop, Save for web, Quality 33', '42cd88e0eb3c14a705b952550ec2eacd:221111' => 'Adobe Photoshop, Save for web, Quality 34', '78a2a442aac5cca7fa2ef5a8bd96219e:221111' => 'Adobe Photoshop, Save for web, Quality 35', '96bce854134a2fccfcb68dca6687cd51:221111' => 'Adobe Photoshop, Save for web, Quality 36', 'fefd00ec4610895e4294de690f5977e9:221111' => 'Adobe Photoshop, Save for web, Quality 37', 'd71c8ddb9117920304d83a6f8b7832a4:221111' => 'Adobe Photoshop, Save for web, Quality 38', '1727e720300403e5f315b5e17ef84d3f:221111' => 'Adobe Photoshop, Save for web, Quality 39', '8fb05e3c3b0a7404ff6ca54f952d2a5e:221111' => 'Adobe Photoshop, Save for web, Quality 40', '328ab751ea48f5a8bc7c4b8628138ce0:221111' => 'Adobe Photoshop, Save for web, Quality 41', 'd9653333a3af8842dd4b72856ac4ef4e:221111' => 'Adobe Photoshop, Save for web, Quality 42', '276da99e50e1b39134e13826789d655e:221111' => 'Adobe Photoshop, Save for web, Quality 43', '23f2bd2d96ec531815609503dae4a2b0:221111' => 'Adobe Photoshop, Save for web, Quality 44', 'bafe2a89809f23bc7367e9a819570728:221111' => 'Adobe Photoshop, Save for web, Quality 45', '6bfdcd36327406f801be86d0e8ca6b60:221111' => 'Adobe Photoshop, Save for web, Quality 46', 'eb8e5c42d31b916737ac21dffd6f012b:221111' => 'Adobe Photoshop, Save for web, Quality 47', 'e57a9878be74473990343573c6585f79:221111' => 'Adobe Photoshop, Save for web, Quality 48', '91dfacd928ce717cb135c6da03afd907:221111' => 'Adobe Photoshop, Save for web, Quality 49', '16c443478b9417d44893f8748d49b790:221111' => 'Adobe Photoshop, Save for web, Quality 50', '84de345dcf710f937a39a0b631b87fc4:111111' => 'Adobe Photoshop, Save for web, Quality 51', 'bdd6043e7f5a5f1512b99b2394a075e2:111111' => 'Adobe Photoshop, Save for web, Quality 52', 'c7614d3d384a02630721be335062ef75:111111' => 'Adobe Photoshop, Save for web, Quality 53', '42d6f71aace3de2ccfdd8348b0198704:111111' => 'Adobe Photoshop, Save for web, Quality 54', '84d5f059ce3e1b78d91355e1e86e2d1a:111111' => 'Adobe Photoshop, Save for web, Quality 55', '5881004f575752d77ee00e767d848e51:111111' => 'Adobe Photoshop, Save for web, Quality 56', '0cb697537acde3d2e85078377461a8e0:111111' => 'Adobe Photoshop, Save for web, Quality 57', 'b2762ffa5c0a1799fb2e9ad6dfd2171a:111111' => 'Adobe Photoshop, Save for web, Quality 58', '2b7a6a83259aa9967e098d3e70f1ee09:111111' => 'Adobe Photoshop, Save for web, Quality 59', '6123a3685e1012af5a0d024de1ce0304:111111' => 'Adobe Photoshop, Save for web, Quality 60', 'd08c8435de33f2c186aa2dd9cba3e874:111111' => 'Adobe Photoshop, Save for web, Quality 61', 'e69be2174dbbfb952e54576fbdfe6c14:111111' => 'Adobe Photoshop, Save for web, Quality 62', '2ec2d5c10641952fce5c435b331b8872:111111' => 'Adobe Photoshop, Save for web, Quality 63', '98201e1185b7069f1247ac3cdc56c824:111111' => 'Adobe Photoshop, Save for web, Quality 64', '8fc0325d05c9199bc1e2dec417c3a55e:111111' => 'Adobe Photoshop, Save for web, Quality 65', '016600f44a61cc5a5673c9bad85e23a3:111111' => 'Adobe Photoshop, Save for web, Quality 66', '91d7b4300c98c726aff7b19cbe098a3e:111111' => 'Adobe Photoshop, Save for web, Quality 67', 'f9b83ba21b86a3d4ddb507e3edce490c:111111' => 'Adobe Photoshop, Save for web, Quality 68', 'd312a23c8ecb3bf59bc11bbe17d79e55:111111' => 'Adobe Photoshop, Save for web, Quality 69', '240fffe5f8e2d8f3345b8175f9cb0a40:111111' => 'Adobe Photoshop, Save for web, Quality 70', 'ba60a642bfb1a184c11e5561581d7115:111111' => 'Adobe Photoshop, Save for web, Quality 71', 'c901580e589f58d309f8b50590cfe214:111111' => 'Adobe Photoshop, Save for web, Quality 72', 'c244f94d84a016840c6ef06250c58ade:111111' => 'Adobe Photoshop, Save for web, Quality 73', '3589227bdd85f880f3337b492e895c5d:111111' => 'Adobe Photoshop, Save for web, Quality 74', 'cae6fd91a423ff181d50bb9c26a0d392:111111' => 'Adobe Photoshop, Save for web, Quality 75', '7d8ee11ca66d2c22ff9ed1f778b5dbac:111111' => 'Adobe Photoshop, Save for web, Quality 76', 'a16371762ce48953d42dfb5b77d1bfc6:111111' => 'Adobe Photoshop, Save for web, Quality 77', '204b111d4aaa85b430e86273a63fd004:111111' => 'Adobe Photoshop, Save for web, Quality 78', '6a243ac0b8575c2ed962070cd7d39e04:111111' => 'Adobe Photoshop, Save for web, Quality 79', '51879d6e5178d2282d5e8276ed4e2439:111111' => 'Adobe Photoshop, Save for web, Quality 80', 'ca683ab6caaa3132bf661a0ebf32ef4e:111111' => 'Adobe Photoshop, Save for web, Quality 81', '5399adc3f21ecb30c96d6a94b38ab74c:111111' => 'Adobe Photoshop, Save for web, Quality 82', '43eb3b161279ccc1fb4f9cbe7b92398f:111111' => 'Adobe Photoshop, Save for web, Quality 83', '2d387641f4e94b6986908b3770fb762e:111111' => 'Adobe Photoshop, Save for web, Quality 84', '75ee5a0fd61559c6bf8e6ebc920c93b0:111111' => 'Adobe Photoshop, Save for web, Quality 85', '60d17e041a23d47b96c5aac86180a022:111111' => 'Adobe Photoshop, Save for web, Quality 86', '8e5290b1d12832ad259de92a53e1ef4e:111111' => 'Adobe Photoshop, Save for web, Quality 87', 'dc19a48af9051bbdc54cf7e88c03f13e:111111' => 'Adobe Photoshop, Save for web, Quality 88', 'c3fbc85c803ddc81c8882c03330b5b15:111111' => 'Adobe Photoshop, Save for web, Quality 89', '5e016a2d28f8ad3e7e27e4e2981031d2:111111' => 'Adobe Photoshop, Save for web, Quality 90', 'ef4fa43f4d548e0687c4d4151a0bf1bd:111111' => 'Adobe Photoshop, Save for web, Quality 91', '00f03e367cd316b71de360c6e7af0e6b:111111' => 'Adobe Photoshop, Save for web, Quality 92', '982fc46fd167df238fbf23494a1ce761:111111' => 'Adobe Photoshop, Save for web, Quality 93', '6fd7b56ac6b58dc861e6021815fb5704:111111' => 'Adobe Photoshop, Save for web, Quality 94', 'c6d9120293c8435cf6b40574b45756bb:111111' => 'Adobe Photoshop, Save for web, Quality 95', '1e133f4bf9f7c7c1e0accf44c0b1107d:111111' => 'Adobe Photoshop, Save for web, Quality 96', 'fb91d6a8a1b72388d68130f551698865:111111' => 'Adobe Photoshop, Save for web, Quality 97', '4ea4e07900e04a3bd7572d4b59aa7a74:111111' => 'Adobe Photoshop, Save for web, Quality 98', '15e1d2321b96b355d4ad109a8d2fe882:111111' => 'Adobe Photoshop, Save for web, Quality 99', '234d8f310d75effc9f77beb1d3847f49:111111' => 'Adobe Photoshop, Save for web, Quality 100', # Adobe Photoshop Express (Release build number: 481589) 'aeb34eb083acc888770d65e691497bcf:111111' => 'Adobe Photoshop Express, Original Size', # Apple QuickTime (Color) # # Tested with: # - QuickTime 7.5.0 (Win) # - QuickTime 7.5.0 (Mac) # - QuickTime 7.4.1 (Mac) # - GraphicConverter 4.4.4 (Mac) # - Using the QuickTime library # - Fixed subsampling to 221111 # - Use a subset of 101 of the 1024 values 'dbdc6a6f3c9ffff19e67cfad2cc51ae4:221111' => 'Apple QuickTime, Quality 0-63 (0-6%)', '23bd5edb6224e03e2f7c282e04986553:221111' => 'Apple QuickTime, Quality 64-80 (6-8%)', '69747272d4079b78c2ee2ef0f5e63f30:221111' => 'Apple QuickTime, Quality 81-92 (8-9%)', '4f50903ec9314f739e460c79552a20c5:221111' => 'Apple QuickTime, Quality 93-101 (9-10%)', '2535e621267a9ff2e2d09148643e3389:221111' => 'Apple QuickTime, Quality 102-109 (10-11%)', '46a125048b572576eed271816b2cbad2:221111' => 'Apple QuickTime, Quality 110-116 (11%)', 'ce05e4b45c53a6e321d9cf1061c62128:221111' => 'Apple QuickTime, Quality 117-122 (11-12%)', 'c3b80241282d06ac5114f2750089589a:221111' => 'Apple QuickTime, Quality 123-127 (12%)', '9d91481900305fb9ad09339f0924f690:221111' => 'Apple QuickTime, Quality 128-133 (13%)', '348f4874d57ae6aae04ef96132374913:221111' => 'Apple QuickTime, Quality 134-137 (13%)', '4e3daadebe0517955b1c86fb1fbc1dc1:221111' => 'Apple QuickTime, Quality 138-142 (13-14%)', '599b6ad93f32b9d5ce67e1622338c379:221111' => 'Apple QuickTime, Quality 143-146 (14%)', '66aeb0f03343673eeed6462e0ce9e1aa:221111' => 'Apple QuickTime, Quality 147-150 (14-15%)', '13570e05da917fe51235ef66a295bc78:221111' => 'Apple QuickTime, Quality 151-154 (15%)', '25e399a9cf70fe7a13867b40ac2c3416:221111' => 'Apple QuickTime, Quality 155-157 (15%)', '25eb3d27e65659435a89e401edfab65f:221111' => 'Apple QuickTime, Quality 158-161 (15-16%)', 'c3bb3c557e70b56a890b07236348518b:221111' => 'Apple QuickTime, Quality 162-164 (16%)', '792e93c41ac63451068b887b11ad0c2e:221111' => 'Apple QuickTime, Quality 165-167 (16%)', '35af99d11406974cf2ffa6676801b10c:221111' => 'Apple QuickTime, Quality 168-170 (16-17%)', '606e5652fc33c6a02328f0bd23ee9751:221111' => 'Apple QuickTime, Quality 171-173 (17%)', '9b62a9e4544cbc1033c67732ea0bbb08:221111' => 'Apple QuickTime, Quality 174-176 (17%)', '93ef48999d5659763a33c45a2a0fa784:221111' => 'Apple QuickTime, Quality 177-179 (17%)', '01b48291bfeccf2fadab996816225b9b:221111' => 'Apple QuickTime, Quality 180-182 (18%)', '613ef896fc4af5baad36e2680968a7ba:221111' => 'Apple QuickTime, Quality 183-184 (18%)', '758d37a9d3b91c0ba383d23f5a080d8f:221111' => 'Apple QuickTime, Quality 185-187 (18%)', '34457d32b9531f04696a52969e02dc1a:221111' => 'Apple QuickTime, Quality 188-189 (18%)', '6634cdad61e7a8e6fb3a4ba1a0416256:221111' => 'Apple QuickTime, Quality 190-191 (19%)', 'e5b0739f8e02c6d481e0cdafe7326ae2:221111' => 'Apple QuickTime, Quality 192-194 (19%)', 'fca91c73d4275748587f97b472b59280:221111' => 'Apple QuickTime, Quality 195-196 (19%)', '7dc9316230c4f197fb5d1b36f09cd883:221111' => 'Apple QuickTime, Quality 197-198 (19%)', '13d6536913342860ab993be8b141f644:221111' => 'Apple QuickTime, Quality 199-201 (19-20%)', 'd835580b2be669d4aa6c68ead27c0c2f:221111' => 'Apple QuickTime, Quality 202-203 (20%)', '1e91365abfe1d9f7a008c363c834a66e:221111' => 'Apple QuickTime, Quality 204-205 (20%)', '6f7825365b673f9eb2ac050d27a21d1b:221111' => 'Apple QuickTime, Quality 206-207 (20%)', '2a98c0b884281080eefcdf98dd33fd6b:221111' => 'Apple QuickTime, Quality 208-209 (20%)', '0ffe7e9fc17393a338b95c345052b7c5:221111' => 'Apple QuickTime, Quality 210-211 (21%)', '9dd5c9717d0fd45486af4d26e59ebb35:221111' => 'Apple QuickTime, Quality 212-213 (21%)', '0ef85155f08194f8fed3f4e7197126e6:221111' => 'Apple QuickTime, Quality 214-215 (21%)', '35886289b5c8921f7932f895d7f1855d:221111' => 'Apple QuickTime, Quality 216-217 (21%)', '1d7ac617d70b1880be9c7ba16f96a3ec:221111' => 'Apple QuickTime, Quality 218 (21%)', 'b26a53dce1477ac3970335df110bb240:221111' => 'Apple QuickTime, Quality 219-220 (21%)', 'a333be9f2b13b53bfdf64bf5665f8e55:221111' => 'Apple QuickTime, Quality 221-222 (22%)', 'f1e8d9b3d66fa34ec9a51a987b48a159:221111' => 'Apple QuickTime, Quality 223-224 (22%)', '20f37f34a9fd18089aa58fe77493a7b7:221111' => 'Apple QuickTime, Quality 225 (22%)', 'b80e56d3ed0c4a8e1c6bb0c5a1d45ca9:221111' => 'Apple QuickTime, Quality 226-227 (22%)', 'd14411ab659ac68209ee8c75b941cb48:221111' => 'Apple QuickTime, Quality 228-229 (22%)', 'a5da49ac5bfe27aafda44bae107ae1c5:221111' => 'Apple QuickTime, Quality 230 (22%)', '9aa9359126240c0712610121371f870c:221111' => 'Apple QuickTime, Quality 231-232 (23%)', '5975500a23ab9a547ba149bf1aaa1893:221111' => 'Apple QuickTime, Quality 233-234 (23%)', 'd03a4790dd96a862113b1a2408103ad6:221111' => 'Apple QuickTime, Quality 235 (23%)', '44d2a7baaf1e3f8c3d45e4e6272a39b1:221111' => 'Apple QuickTime, Quality 236-237 (23%)', '7755ba223679105c184be0ada8c99f92:221111' => 'Apple QuickTime, Quality 238 (23%)', '1ea3f373d0adf989e8416ecb11c38608:221111' => 'Apple QuickTime, Quality 239-240 (23%)', '12196a46c697fbb88d8bef279b52b106:221111' => 'Apple QuickTime, Quality 241 (24%)', '2183a6f77fe72f5c70726244dcabc963:221111' => 'Apple QuickTime, Quality 242-243 (24%)', 'd1ca3a3723c1385d2989b199a7a30557:221111' => 'Apple QuickTime, Quality 244 (24%)', 'd83207842d60965f9d194d89f3281ccd:221111' => 'Apple QuickTime, Quality 245-246 (24%)', '6ae041573525edd42e800e1b61d4313c:221111' => 'Apple QuickTime, Quality 247 (24%)', '6c42d12564d1c5706653a8ddb5375192:221111' => 'Apple QuickTime, Quality 248-249 (24%)', '671a071a1b17f49a774da3893f7199c7:221111' => 'Apple QuickTime, Quality 250 (24%)', 'fb3c0cc15ad21b6c19576dd8d7d29a0e:221111' => 'Apple QuickTime, Quality 251 (25%)', 'c9ce3dc3d0567f631e463cc3ff1b2e30:221111' => 'Apple QuickTime, Quality 252-253 (25%)', 'b309a0dc90b16ac01f0798a04c3127e8:221111' => 'Apple QuickTime, Quality 254 (25%)', 'cd15038a76bd8752c3afd14669816c2e:221111' => 'Apple QuickTime, Quality 255 (25%)', 'd275e9aebd39cf411496caf6e54d0c5f:221111' => 'Apple QuickTime, Quality 256-257 (25%)', '5e75328df5dadca132bb83e0883ce522:221111' => 'Apple QuickTime, Quality 258 (25%)', 'b04cbc1812939770d59461982cd9d32d:221111' => 'Apple QuickTime, Quality 259 (25%)', 'ddf1f3b922ea51f6f4ca3cb6863eeae0:221111' => 'Apple QuickTime, Quality 260-261 (25%)', '5532e398abb0a455b528659e59c7cfd7:221111' => 'Apple QuickTime, Quality 262 (26%)', 'f9bff3eeb4e94fb9ab4820184b0b6058:221111' => 'Apple QuickTime, Quality 263 (26%)', '081da80ed314194b571ff9880a7c11d3:221111' => 'Apple QuickTime, Quality 264-265 (26%)', '178aa0138d7a08be081aeff794956a71:221111' => 'Apple QuickTime, Quality 266 (26%)', '78bb04e3ced3eee51c78e94b421ecc26:221111' => 'Apple QuickTime, Quality 267 (26%)', '17782e930dc2cba42da909d95278fe9b:221111' => 'Apple QuickTime, Quality 268 (26%)', '093b011ce21ae794d3eca7c64eecf5b6:221111' => 'Apple QuickTime, Quality 269 (26%)', '4bf515768d1a06e4c529ebae3e03b4b5:221111' => 'Apple QuickTime, Quality 270-271 (26%)', '3dd79429ada0455422ff6605c1727456:221111' => 'Apple QuickTime, Quality 272 (27%)', '4be1504b9732d1d9f6265d0616bad21b:221111' => 'Apple QuickTime, Quality 273 (27%)', 'b2118dc8e8b1762cc634e135a2a1893c:221111' => 'Apple QuickTime, Quality 274 (27%)', '70d843457698f46db30181ac616deb75:221111' => 'Apple QuickTime, Quality 275 (27%)', 'f3c42f077883313db21c72bd240de05f:221111' => 'Apple QuickTime, Quality 276 (27%)', '56e9a02eb25508a9f71ad1a7cb9f9f4d:221111' => 'Apple QuickTime, Quality 277-278 (27%)', '1d956197da5eb19ffe8855a0e2a52c98:221111' => 'Apple QuickTime, Quality 279 (27%)', '3e37de5c00962684feba769939fce685:221111' => 'Apple QuickTime, Quality 280 (27%)', '5628aeb29bb04d9c5073bc1caf371f01:221111' => 'Apple QuickTime, Quality 281 (27%)', 'a2e7b219d18177294378485759215f72:221111' => 'Apple QuickTime, Quality 282 (28%)', '537f40d0aae588fbce4cde9ba148604d:221111' => 'Apple QuickTime, Quality 283 (28%)', '14b7d58b539ad8d6f1c4f8fd82c91358:221111' => 'Apple QuickTime, Quality 284 (28%)', '58b302794024b9842657bbe7cb667577:221111' => 'Apple QuickTime, Quality 285 (28%)', '4be64c2782cbb36b757cdcadd756498a:221111' => 'Apple QuickTime, Quality 286 (28%)', '6c947f09bc02f87b257a26f9f5c77a77:221111' => 'Apple QuickTime, Quality 287 (28%)', '663b8a9dbd00efa78281f5028b35c503:221111' => 'Apple QuickTime, Quality 288 (28%)', 'e5deb190a5e17492a01e8136afdfd6c1:221111' => 'Apple QuickTime, Quality 289 (28%)', 'ba36e1298ce7fed908ee3e02b83ae7c3:221111' => 'Apple QuickTime, Quality 290 (28%)', 'bc4abc4600f2efc0bdead1e4be78801b:221111' => 'Apple QuickTime, Quality 291-292 (28-29%)', '43887ad276efb9ca8e8110498b38d814:221111' => 'Apple QuickTime, Quality 293 (29%)', '3050624718ce9acc06f85c2fa0208cc7:221111' => 'Apple QuickTime, Quality 294 (29%)', 'f6d9c8699e54823040b66c4b8e1361aa:221111' => 'Apple QuickTime, Quality 295 (29%)', 'a9b2875fc3c21e7b998969c57f74fa7a:221111' => 'Apple QuickTime, Quality 296 (29%)', 'b9be740b8a374a52808ad5ef6db2bfe7:221111' => 'Apple QuickTime, Quality 297 (29%)', '63f9786c6a9b8ef87c791818ddaba058:221111' => 'Apple QuickTime, Quality 298 (29%)', 'a65113fd3b66ef137f9b1144367f731b:221111' => 'Apple QuickTime, Quality 299 (29%)', 'ee58773aa7b774040d650365937cf173:221111' => 'Apple QuickTime, Quality 300 (29%)', '29a9ee0cae41784d90fa74d7cd240a3e:221111' => 'Apple QuickTime, Quality 301 (29%)', '369e1cfc338b45a239cb7db09778037e:221111' => 'Apple QuickTime, Quality 302 (29%)', '131ddd6eec5f51e825cf7afd9c7ab3b2:221111' => 'Apple QuickTime, Quality 303 (30%)', '88a2772be7b74a5a9b7ebbea28ddde47:221111' => 'Apple QuickTime, Quality 304 (30%)', '83e206dafb515f20a4b9a0c16f770940:221111' => 'Apple QuickTime, Quality 305 (30%)', 'dddc3adae44a64457b05416affc2502e:221111' => 'Apple QuickTime, Quality 306 (30%)', 'ff0758d87a0cbdb323fb93bf9ed1fdff:221111' => 'Apple QuickTime, Quality 307 (30%)', 'b1b1a08ebaf13142b731c95771d97226:221111' => 'Apple QuickTime, Quality 308 (30%)', 'd6e206f8224d6a3582fb1066b511437b:221111' => 'Apple QuickTime, Quality 309 (30%)', '2926d6bf5a27174bd9057bd6198413cd:221111' => 'Apple QuickTime, Quality 310 (30%)', '5d1b5e80f9777a636d1d5cb402fcfc32:221111' => 'Apple QuickTime, Quality 311 (30%)', 'ae39c8775a10e34accdf2bba3bffc483:221111' => 'Apple QuickTime, Quality 312 (30%)', 'bc6d3a9f349a97c5cde3f8fa4e1b5beb:221111' => 'Apple QuickTime, Quality 313 (31%)', '91bd468ca96fe548a7df9646b51880d1:221111' => 'Apple QuickTime, Quality 314 (31%)', '104c3b63e4ca667a4ee2e4250340052c:221111' => 'Apple QuickTime, Quality 315 (31%)', '64b80be38604eaecc99236b1f74a99f8:221111' => 'Apple QuickTime, Quality 316 (31%)', '284efada45882694778e65969f761478:221111' => 'Apple QuickTime, Quality 317 (31%)', 'd8bd88390c27b2b05a0784eafd4b31ef:221111' => 'Apple QuickTime, Quality 318 (31%)', '99bf8158a4060d354b521f3d6f5648ac:221111' => 'Apple QuickTime, Quality 319 (31%)', '96c9e3cd827097ec03edc458fc1053e4:221111' => 'Apple QuickTime, Quality 320 (31%)', '272b5b12f7701be4cceba51e9d5dbf13:221111' => 'Apple QuickTime, Quality 321 (31%)', 'dcc3ffcda228ab283d53e1dc2cb739ef:221111' => 'Apple QuickTime, Quality 322-324 (31-32%)', 'c44701e8185306f5e6d09be16a2b0fbd:221111' => 'Apple QuickTime, Quality 325 (32%)', '476a1ebd043ed59e56d18dd6d08777d7:221111' => 'Apple QuickTime, Quality 326 (32%)', '26831dfc8d0dc1d202d50d6cf7b4f4a4:221111' => 'Apple QuickTime, Quality 327 (32%)', '00f929d549fdd9f89fbb10303445cc2c:221111' => 'Apple QuickTime, Quality 328 (32%)', '030736cda242f0583a7064cb60cc026e:221111' => 'Apple QuickTime, Quality 329 (32%)', '825fb58744c6c2432d232f5fb83a9597:221111' => 'Apple QuickTime, Quality 330 (32%)', '0bac94d5b6ef090da7875e294a7f8040:221111' => 'Apple QuickTime, Quality 331 (32%)', '16de07616490b8439576d837c74aefbe:221111' => 'Apple QuickTime, Quality 332 (32%)', '8190e844832ee8ea97492b509c728de4:221111' => 'Apple QuickTime, Quality 333 (33%)', '0bb6bf7365676f75d285bb38a40b8e3f:221111' => 'Apple QuickTime, Quality 334 (33%)', '04710d4ba5233b4f82bd260263f9e992:221111' => 'Apple QuickTime, Quality 335 (33%)', 'fcb49e821b83f8436d450b03f1b1f182:221111' => 'Apple QuickTime, Quality 336 (33%)', '1bca645051a125cd2c3af262074f70e7:221111' => 'Apple QuickTime, Quality 337 (33%)', '7a5c04b63f9fe6af176efef387ba1f03:221111' => 'Apple QuickTime, Quality 338 (33%)', '24fff8dcfdc8640225fff020ad869c18:221111' => 'Apple QuickTime, Quality 339 (33%)', '08549fa433585b86d6eab75b6dcb1fe3:221111' => 'Apple QuickTime, Quality 340 (33%)', 'caabe462a50217592c74902def037c07:221111' => 'Apple QuickTime, Quality 341 (33%)', '757e97f3490ebc5b74fd63792fb23992:221111' => 'Apple QuickTime, Quality 342 (33%)', 'aa6072a632f7bae361c8d371aa022c57:221111' => 'Apple QuickTime, Quality 343 (33%)', '03809d08372d3a9fd86ff254854f45b7:221111' => 'Apple QuickTime, Quality 344 (34%)', 'bdebcafc7b5f6b7fea114943e042df5e:221111' => 'Apple QuickTime, Quality 345 (34%)', '555dc90fb10df448f37c67ee7ec31bc2:221111' => 'Apple QuickTime, Quality 346 (34%)', 'a2f2a404cd1c2278ef65f2a27c0365e0:221111' => 'Apple QuickTime, Quality 347 (34%)', 'aee867276d6dc4ed4b682a454815acd1:221111' => 'Apple QuickTime, Quality 348 (34%)', '8f2f9e8433104cedb50c3e54577fcd00:221111' => 'Apple QuickTime, Quality 349 (34%)', '84c2067991afbb6851204f21f5d132ea:221111' => 'Apple QuickTime, Quality 350 (34%)', '2d2a77bf6078ab4f07261c76b637b597:221111' => 'Apple QuickTime, Quality 351 (34%)', 'fc9d0f82571701e8b4cf764125ac0d2e:221111' => 'Apple QuickTime, Quality 352 (34%)', '75d4ffdc6c10675cb1b5bd002d4e0e41:221111' => 'Apple QuickTime, Quality 353 (34%)', '4b96c3457701c201f90d56af1a82d43b:221111' => 'Apple QuickTime, Quality 354 (35%)', 'a56edeb9e571dc790a429c26ebc59976:221111' => 'Apple QuickTime, Quality 355 (35%)', '3673ce9ec4f6f916009d39282ff3a8d7:221111' => 'Apple QuickTime, Quality 356 (35%)', 'b7279ade733ff1c88073971cebe6edd8:221111' => 'Apple QuickTime, Quality 357 (35%)', 'b35f3358027aa4d2cca0c64425aa8f1b:221111' => 'Apple QuickTime, Quality 358 (35%)', '854d2e536bc92a9e2e3db3ff2c18e138:221111' => 'Apple QuickTime, Quality 359 (35%)', '48b6aa4f0258162cceb9d43e19c96043:221111' => 'Apple QuickTime, Quality 360 (35%)', '1dfb48b5955cf2a50011f52b9a05f1a4:221111' => 'Apple QuickTime, Quality 361 (35%)', 'd67da3fcbac8975acffe7f1ab088f646:221111' => 'Apple QuickTime, Quality 362 (35%)', '7be7bded72d0ade6f907e3adcf62b391:221111' => 'Apple QuickTime, Quality 363 (35%)', '02c0554e4a004ceaddd0d7772e68a38b:221111' => 'Apple QuickTime, Quality 364 (36%)', 'e7b9303f785f78a2cb27f83616c18726:221111' => 'Apple QuickTime, Quality 365 (36%)', '4a4a154781db3f5f500e8cf177a4b446:221111' => 'Apple QuickTime, Quality 366 (36%)', '7e4b44f2900a405e7b85090af7d40298:221111' => 'Apple QuickTime, Quality 367 (36%)', '76aa290370382de8a3516f73389f9350:221111' => 'Apple QuickTime, Quality 368 (36%)', '912779b5b7c935f2b533af0f400402f3:221111' => 'Apple QuickTime, Quality 369 (36%)', '91c7f694fbf07321037a838c3a4d6e7d:221111' => 'Apple QuickTime, Quality 370 (36%)', 'f98a4286abf1cbe8bf46fba1e78cec61:221111' => 'Apple QuickTime, Quality 371 (36%)', '2fbbcce5a035d6215e4851a0ae63481f:221111' => 'Apple QuickTime, Quality 372 (36%)', '8d8fab3b6b7386a4e81f10c15a7abaa5:221111' => 'Apple QuickTime, Quality 373 (36%)', '82e672854d7e00d47a988855b95d2f7f:221111' => 'Apple QuickTime, Quality 374 (37%)', '9fffe6b2fbbce23598c19e6cd177adb0:221111' => 'Apple QuickTime, Quality 375 (37%)', '3f69293a4abeb2201004e7241fe22c75:221111' => 'Apple QuickTime, Quality 376 (37%)', 'a01d3a7766c7c593a79ff6c63433860a:221111' => 'Apple QuickTime, Quality 377 (37%)', '787ed74c3d5570c03f98804bc9d0c448:221111' => 'Apple QuickTime, Quality 378 (37%)', '12239aa16bb4091d8f873f9536e40371:221111' => 'Apple QuickTime, Quality 379 (37%)', 'f45d495d3b470eadba70bcca888042b3:221111' => 'Apple QuickTime, Quality 380 (37%)', '97346edee67c3afea7823c72e57cb6c5:221111' => 'Apple QuickTime, Quality 381 (37%)', '5b35e4bc9cbbc353b8e4b73132324088:221111' => 'Apple QuickTime, Quality 382 (37%)', 'a43b370edaaee853bb16e46ee4a002e8:221111' => 'Apple QuickTime, Quality 383 (37%)', '7f3d110973a4d7d5824724c4e577b407:221111' => 'Apple QuickTime, Quality 384 (38%)', '0e36104efe90a5a77e9b686d0a6528ab:221111' => 'Apple QuickTime, Quality 385 (38%)', '0bc0941c2a59d9a12b66d1d34117cfd7:221111' => 'Apple QuickTime, Quality 386 (38%)', '342e3bddb81140ea9df00400a46461d7:221111' => 'Apple QuickTime, Quality 387 (38%)', 'ad8bbd6b23b87950d1b76278fbb7de87:221111' => 'Apple QuickTime, Quality 388 (38%)', 'd58f5d339b69e1296911a3387cc664a4:221111' => 'Apple QuickTime, Quality 389 (38%)', 'c740804ef8493bb467744e1cdb8882c1:221111' => 'Apple QuickTime, Quality 390 (38%)', 'ab975404bdb713bb6a58ac560330aaf1:221111' => 'Apple QuickTime, Quality 391 (38%)', 'eb68a0ff9c83267e5fb5e998365b4480:221111' => 'Apple QuickTime, Quality 392 (38%)', '9c1865e7fdc0289dc5fe8f4c1f65577e:221111' => 'Apple QuickTime, Quality 393 (38%)', '21db4122ad8183006542018e53e0c653:221111' => 'Apple QuickTime, Quality 394 (38%)', '734255167cbd052200fb4c474f05bcd9:221111' => 'Apple QuickTime, Quality 395 (39%)', 'e5dcd017a9734f9f0e18b515c7fa1787:221111' => 'Apple QuickTime, Quality 396 (39%)', 'c58a47c2e3dc737b9591420812b9cc27:221111' => 'Apple QuickTime, Quality 397 (39%)', 'ea25d0beaa91434a14348fb60f5cff31:221111' => 'Apple QuickTime, Quality 398 (39%)', '21f8a4a67742edcde0ac854522028c9f:221111' => 'Apple QuickTime, Quality 399 (39%)', '8b8dc34912d8b18742a7670be4b1c867:221111' => 'Apple QuickTime, Quality 400 (39%)', 'f7adac1fb54bb1fc566b66822122a9c6:221111' => 'Apple QuickTime, Quality 401 (39%)', '0fe0c7e65c0696d9e76ad819d61e44ae:221111' => 'Apple QuickTime, Quality 402 (39%)', '6dabf05ddc213b650ff08aa9a8cb9f50:221111' => 'Apple QuickTime, Quality 403 (39%)', '226788e417078cdcc5aa989379b9e824:221111' => 'Apple QuickTime, Quality 404 (39%)', '9366dde6c37f4cac36a8e8cea4d5f51c:221111' => 'Apple QuickTime, Quality 405 (40%)', '3ce5057aaf0ff155ee69d66591c8290d:221111' => 'Apple QuickTime, Quality 406 (40%)', '58fe81014a9ee26a7bd393c8e31f4011:221111' => 'Apple QuickTime, Quality 407 (40%)', '41e44bae14ab49d1b0f06438d34cb316:221111' => 'Apple QuickTime, Quality 408 (40%)', '80ccbe5645cc62ebd4ae7b2128b42d91:221111' => 'Apple QuickTime, Quality 409 (40%)', 'b08af3cffd1904e8a8cfbbba71077069:221111' => 'Apple QuickTime, Quality 410 (40%)', 'abb56efe234d4b8fdf50016a19c63684:221111' => 'Apple QuickTime, Quality 411 (40%)', 'e41806d0928fbb5552225e10db7b55d0:221111' => 'Apple QuickTime, Quality 412 (40%)', 'ae9de0a8343d730e2e6a358849c29a4e:221111' => 'Apple QuickTime, Quality 413 (40%)', 'b83146f54d17b2c8e242f7f36dc36f19:221111' => 'Apple QuickTime, Quality 414 (40%)', 'a748fdfe8d6dc9493253908410e517eb:221111' => 'Apple QuickTime, Quality 415 (41%)', 'd4bb4c59b5284630a4c716a0290d9091:221111' => 'Apple QuickTime, Quality 416 (41%)', 'de93dd8ab7918b25f191923f4a43a5c2:221111' => 'Apple QuickTime, Quality 417 (41%)', '0807f8b3b41b01054509858fa74dcf4d:221111' => 'Apple QuickTime, Quality 418 (41%)', 'efd780e10dcd0ab8ca0a0f4f3cb215d3:221111' => 'Apple QuickTime, Quality 419 (41%)', '2ec3d0ec37690e40f009b7a9f9b17c49:221111' => 'Apple QuickTime, Quality 420 (41%)', 'a4680e71907e5c6f7b18e20e46286412:221111' => 'Apple QuickTime, Quality 421 (41%)', '8e54abf2320cca661b6dd67b7658c9f3:221111' => 'Apple QuickTime, Quality 422 (41%)', '00f76480eafd05aa5267053aec3aa122:221111' => 'Apple QuickTime, Quality 423 (41%)', '849bce1254b14d44e24a6b419c385597:221111' => 'Apple QuickTime, Quality 424 (41%)', '8a91452f2df82874183be50601242106:221111' => 'Apple QuickTime, Quality 425 (42%)', 'a670182cd48f37dd16652db878791a7a:221111' => 'Apple QuickTime, Quality 426 (42%)', 'c2afe9aca67de0276a6fb507861c3e80:221111' => 'Apple QuickTime, Quality 427 (42%)', '18836b72e5399e2a19cd6420562ab1ff:221111' => 'Apple QuickTime, Quality 428 (42%)', 'cb207af75faf8ee1ef0ca3caa593bb69:221111' => 'Apple QuickTime, Quality 429 (42%)', '7a318965f27e3c09d11f53cbb10a872b:221111' => 'Apple QuickTime, Quality 430 (42%)', 'b0a501129cb83e54f97006610ec9ed64:221111' => 'Apple QuickTime, Quality 431 (42%)', 'f1a8af8c0abe4b3423d5ac8c6273a7ca:221111' => 'Apple QuickTime, Quality 432 (42%)', '56224ea0ac2fccb92cbe9702896f9796:221111' => 'Apple QuickTime, Quality 433 (42%)', '2f2101a8450c617a09ccad472c275b88:221111' => 'Apple QuickTime, Quality 434 (42%)', '13e218420429e2c94d4b9474ab03f8e4:221111' => 'Apple QuickTime, Quality 435 (42%)', '41061e1cdb97926ed5bded3da11af209:221111' => 'Apple QuickTime, Quality 436 (43%)', 'cc3e4dc4e190d00a12bd03199efdcc6d:221111' => 'Apple QuickTime, Quality 437 (43%)', '36b2371ec6df13143af12d600232c2ab:221111' => 'Apple QuickTime, Quality 438 (43%)', '71d0e3444a4c82cf39048ba8cf7b1d5f:221111' => 'Apple QuickTime, Quality 439 (43%)', '9f48e71f610caa47b94d3e474608cb3d:221111' => 'Apple QuickTime, Quality 440 (43%)', 'dcecd4f366d521e118e94d87ef915caa:221111' => 'Apple QuickTime, Quality 441 (43%)', 'cf0a070dc9b4a8983b50f8e3f105b857:221111' => 'Apple QuickTime, Quality 442 (43%)', '5504a428191bc87e5c1ba4b5e9984a37:221111' => 'Apple QuickTime, Quality 443 (43%)', 'de6a322383022ee8d966e848a2df4f28:221111' => 'Apple QuickTime, Quality 444 (43%)', '163be99e863436e9b3d32615785ec8e1:221111' => 'Apple QuickTime, Quality 445 (43%)', '958185c48000065b5b8d03b0f975d95b:221111' => 'Apple QuickTime, Quality 446 (44%)', '2d719cb263e284fc8621bbec1fe52cd5:221111' => 'Apple QuickTime, Quality 447 (44%)', '8f0f54955cf19689f38df36715908b76:221111' => 'Apple QuickTime, Quality 448 (44%)', '737c61e006222488645fa2e007f83f3c:221111' => 'Apple QuickTime, Quality 449 (44%)', 'bb342113b57cf66ce0cf3a09fae5fd16:221111' => 'Apple QuickTime, Quality 450 (44%)', 'cd3ed5b396580d8e9f0cb7b78baed8b8:221111' => 'Apple QuickTime, Quality 451 (44%)', 'e7914fbf6c9b2a127af3676726e6bd8b:221111' => 'Apple QuickTime, Quality 452 (44%)', '377a7b50c2d7484255bbbf537bf9fa86:221111' => 'Apple QuickTime, Quality 453 (44%)', '09f9009406d2fe8dfa1b35236f8b1bdb:221111' => 'Apple QuickTime, Quality 454 (44%)', '78b0e590ea36cb11c495097049022d2e:221111' => 'Apple QuickTime, Quality 455 (44%)', '984c0f34636e6197b508265f17cbd6c9:221111' => 'Apple QuickTime, Quality 456 (45%)', '7fca22065811c0efe6599a15ca38f05e:221111' => 'Apple QuickTime, Quality 457 (45%)', 'd55d9744065708d7b6fa7fb6e8eb2453:221111' => 'Apple QuickTime, Quality 458 (45%)', '63ef900bf59d41003a0e0602baa60681:221111' => 'Apple QuickTime, Quality 459 (45%)', 'e8b31dbd18c91229a3c40356efeb2622:221111' => 'Apple QuickTime, Quality 460 (45%)', '8cb1bb16c6fa524199dad5513386d225:221111' => 'Apple QuickTime, Quality 461 (45%)', 'c53438ece0552cedb1ec0d50ad2d5dbe:221111' => 'Apple QuickTime, Quality 462 (45%)', '5db6302d7e68c1a274139033681b8fcc:221111' => 'Apple QuickTime, Quality 463 (45%)', 'acd1d5ec1787c9d346d87c281a7b6da0:221111' => 'Apple QuickTime, Quality 464-465 (45%)', 'e66c03f97b19213f385136f014c78ac1:221111' => 'Apple QuickTime, Quality 466-467 (46%)', '23816ed847127a41e3c7f52e04072e41:221111' => 'Apple QuickTime, Quality 468 (46%)', 'ebce337e9ef5a07775cebe40d7623862:221111' => 'Apple QuickTime, Quality 469 (46%)', '09563e47ab174b05fb19f722e9aa43c3:221111' => 'Apple QuickTime, Quality 470 (46%)', '545e14e832fb81f032526a9efcbf2450:221111' => 'Apple QuickTime, Quality 471 (46%)', 'edda5d6ae456d4cdccec80e390ac9279:221111' => 'Apple QuickTime, Quality 472 (46%)', '9a43fc0aa6223673c32a49fb76d6525c:221111' => 'Apple QuickTime, Quality 473 (46%)', 'bdaf3e68c2925cbaad3864359fdbbb77:221111' => 'Apple QuickTime, Quality 474 (46%)', '4f83a1a8338a8e6e70eaa58cd236f62a:221111' => 'Apple QuickTime, Quality 475 (46%)', '879b320cfd6e27b2e283b573483bda81:221111' => 'Apple QuickTime, Quality 476 (46%)', '2748fa249a86361b1b5f0662a88abdb3:221111' => 'Apple QuickTime, Quality 477 (47%)', '32eb803f68d72719267a1313548e7180:221111' => 'Apple QuickTime, Quality 478 (47%)', '771eeb43856b1821a271b0aa8398a243:221111' => 'Apple QuickTime, Quality 479 (47%)', '653c5006512bb3aaa1e6a4e77078b630:221111' => 'Apple QuickTime, Quality 480 (47%)', 'c5c102ba5f004d49656f424d89e9773c:221111' => 'Apple QuickTime, Quality 481 (47%)', 'd5220fcfa99764e440684fbac6273cff:221111' => 'Apple QuickTime, Quality 482 (47%)', 'd300f18258f46060d89c994dbc370131:221111' => 'Apple QuickTime, Quality 483 (47%)', '60258dcc1e3a81858d176080ef774730:221111' => 'Apple QuickTime, Quality 484 (47%)', '8bda9fb1ed75249ac5b2feaad7b51d2f:221111' => 'Apple QuickTime, Quality 485 (47%)', '9e334af92d75ab7d4ea1a9816840ea73:221111' => 'Apple QuickTime, Quality 486 (47%)', 'c40a38c96832a6042c6ddfc9754c1d6d:221111' => 'Apple QuickTime, Quality 487 (48%)', '30be130aa27d0b91d6f55ed9b1cd6c84:221111' => 'Apple QuickTime, Quality 488 (48%)', '3601e95d6cd507065d46b3f058229d91:221111' => 'Apple QuickTime, Quality 489 (48%)', '9127f8ddd20e583523bc848e99061126:221111' => 'Apple QuickTime, Quality 490 (48%)', '0d605d279c48a74ef71a24e89ca426a8:221111' => 'Apple QuickTime, Quality 491 (48%)', 'a5cd2d8592e1c45b67cfb3009d07fb49:221111' => 'Apple QuickTime, Quality 492 (48%)', 'e346ce6e3bee6abff16420f5ba95ceb9:221111' => 'Apple QuickTime, Quality 493 (48%)', '03295b26893cab9c7dea4ec15ed56d08:221111' => 'Apple QuickTime, Quality 494 (48%)', '76af24fe94edf8f3992e38c1dd6eebce:221111' => 'Apple QuickTime, Quality 495 (48%)', '3c58e82299d87346d37023ea015f3e80:221111' => 'Apple QuickTime, Quality 496 (48%)', 'aa8940194463b7adc14f20dbee9c6a75:221111' => 'Apple QuickTime, Quality 497 (49%)', '68a808b23bfa8096e04006171926b72c:221111' => 'Apple QuickTime, Quality 498 (49%)', '34c0043b98d09193beda0cf5d1ada274:221111' => 'Apple QuickTime, Quality 499 (49%)', '5881bb3c6e7e2ac43983b4b1e947a6c3:221111' => 'Apple QuickTime, Quality 500 (49%)', 'a0a7061bc100f051a3c5470559661138:221111' => 'Apple QuickTime, Quality 501 (49%)', '62e6812d1f7935adddd1a69227cdf626:221111' => 'Apple QuickTime, Quality 502 (49%)', '94f6dbd754fb4ba3c92698d5f08084f9:221111' => 'Apple QuickTime, Quality 503 (49%)', 'b7257ba67e4b38b7ccdca2a65d60c970:221111' => 'Apple QuickTime, Quality 504 (49%)', '5a19d6130b03080dfedef45b6415f4f8:221111' => 'Apple QuickTime, Quality 505 (49%)', '2b3262e10b1563600a5f0738fec342ed:221111' => 'Apple QuickTime, Quality 506 (49%)', '295cb1e2772312ba5cd546966d1aa70d:221111' => 'Apple QuickTime, Quality 507 (50%)', 'c910bcb7b9e8967b87cfa08229d9ca34:221111' => 'Apple QuickTime, Quality 508 (50%)', '61c8506b490d5e596151b951ffa7a14f:221111' => 'Apple QuickTime, Quality 509 (50%)', 'ae15629cecc940fef9f24ad9f207fa10:221111' => 'Apple QuickTime, Quality 510 (50%)', 'c8ef3c50ca99c44ea13f1692ac1190dc:221111' => 'Apple QuickTime, Quality 511 (50%)', '50500b1272433ef5c9c96f16069fbdf1:221111' => 'Apple QuickTime, Quality 512 (50%)', 'e41e5416e21dbfb5a41f006b3485f5bb:221111' => 'Apple QuickTime, Quality 513 (50%)', 'd606add3e7590885ac8978af6d09a2aa:221111' => 'Apple QuickTime, Quality 514 (50%)', 'cc3936c39c298ef67d9196d0254b0c19:221111' => 'Apple QuickTime, Quality 515 (50%)', 'e83f8505dc3f5f46b37e22b590f71b98:221111' => 'Apple QuickTime, Quality 516 (50%)', '2a8e27e03b6e1555335c91231c452bba:221111' => 'Apple QuickTime, Quality 517 (50%)', '52ab880d25db7b36137e2a3c04987c9a:221111' => 'Apple QuickTime, Quality 518 (51%)', 'ce2335cc1f8289deda620877f50fd90d:221111' => 'Apple QuickTime, Quality 519 (51%)', 'bbad0e19b252268530df19c563aa9176:221111' => 'Apple QuickTime, Quality 520 (51%)', '3184b71ca26bfe0c80811cf10423fa92:221111' => 'Apple QuickTime, Quality 521 (51%)', '37802f44dab089a35e03b94a298b19da:221111' => 'Apple QuickTime, Quality 522 (51%)', '5e528bd6778792490c6cf292cf9ba8df:221111' => 'Apple QuickTime, Quality 523 (51%)', 'fbe0f5b89f266ff382f2b14c70a83097:221111' => 'Apple QuickTime, Quality 524 (51%)', 'a4bfd80e0c8b9ae7a1114d79a7b63ad6:221111' => 'Apple QuickTime, Quality 525 (51%)', 'abdf532dc2005805db7d8d0214227146:221111' => 'Apple QuickTime, Quality 526 (51%)', '2a7ec778642b15b8bce238f7b63ef537:221111' => 'Apple QuickTime, Quality 527 (51%)', '70073f02f04ee893510bceb09e411d53:221111' => 'Apple QuickTime, Quality 528 (52%)', '345d210b180a45bd23b0c7931c59c263:221111' => 'Apple QuickTime, Quality 529 (52%)', 'ddbc4e6566bbcc74b6205526393ef468:221111' => 'Apple QuickTime, Quality 530 (52%)', '420af34c4f718cc0a10de5285140b6e0:221111' => 'Apple QuickTime, Quality 531 (52%)', '16b6c2d8688113b1a28afbbc57f46f80:221111' => 'Apple QuickTime, Quality 532-533 (52%)', '4a2a0e381fed49e5d5ba074998652561:221111' => 'Apple QuickTime, Quality 534 (52%)', '50f1255f2424b2de5b930751ddf24842:221111' => 'Apple QuickTime, Quality 535 (52%)', '80f2c05e2ad3524f18dd55bac10ee2e3:221111' => 'Apple QuickTime, Quality 536 (52%)', '6c0916ab5aa02602cc682bcdbc22369e:221111' => 'Apple QuickTime, Quality 537 (52%)', 'f7e5656e1f2cf036e9a57a6c02373398:221111' => 'Apple QuickTime, Quality 538 (53%)', '92044affd220e31ee953aff021144b29:221111' => 'Apple QuickTime, Quality 539 (53%)', '2bafe4b75b8a105d72e981b21fe3b6cf:221111' => 'Apple QuickTime, Quality 540 (53%)', 'ca0e84028714f19cf20cb868d1cd346c:221111' => 'Apple QuickTime, Quality 541 (53%)', 'db1ae392a31d30cd5564dc7bbea24019:221111' => 'Apple QuickTime, Quality 542 (53%)', '4417e739b9244781987769c2177abc6f:221111' => 'Apple QuickTime, Quality 543 (53%)', 'f1de58c1c6a48dc36ce7e8c69636539c:221111' => 'Apple QuickTime, Quality 544 (53%)', '10c931d7bff7bfcc20e37f0868887228:221111' => 'Apple QuickTime, Quality 545 (53%)', 'e082971717023e667f3d922bbccf089b:221111' => 'Apple QuickTime, Quality 546 (53%)', '5a285190351b16fee0eb14778280d74f:221111' => 'Apple QuickTime, Quality 547 (53%)', 'aad0e2cd42c5adaec41080a05be4ffdc:221111' => 'Apple QuickTime, Quality 548 (54%)', 'de802b8c64d7f854081c7df6ed345b43:221111' => 'Apple QuickTime, Quality 549 (54%)', '82f45d11d651d93a67995965b94aa649:221111' => 'Apple QuickTime, Quality 550 (54%)', '617c4c853344ef079f4a1f1062672e8c:221111' => 'Apple QuickTime, Quality 551-552 (54%)', '90d96923be1883e6ee15a9d0d32a114c:221111' => 'Apple QuickTime, Quality 553 (54%)', '307c47179fdad179b5f962228c115db8:221111' => 'Apple QuickTime, Quality 554 (54%)', 'a4683813bdf6e2bd429c4c5676128384:221111' => 'Apple QuickTime, Quality 555 (54%)', '8e3cfc2fc9cfbba0f6aed9850504ebb6:221111' => 'Apple QuickTime, Quality 556 (54%)', 'a8f8928c72b69049e1da7639e977c9c7:221111' => 'Apple QuickTime, Quality 557 (54%)', '1fb4c8af2d70cdeecab3fd9fc882e0ce:221111' => 'Apple QuickTime, Quality 558 (54%)', '98ddda3b0ada32ce919b9af9df4054dd:221111' => 'Apple QuickTime, Quality 559 (55%)', 'b43ab5c404469c416e853e52497b3f0d:221111' => 'Apple QuickTime, Quality 560 (55%)', 'd9696efa02b9de813caf8d684b06346f:221111' => 'Apple QuickTime, Quality 561 (55%)', 'be63c4e967eff819bd8a052a561a4576:221111' => 'Apple QuickTime, Quality 562 (55%)', 'f984581f90913e44f3898fffd8fce8b0:221111' => 'Apple QuickTime, Quality 563 (55%)', '082779cf55f6b922036f11b74df54110:221111' => 'Apple QuickTime, Quality 564 (55%)', '066fd6cb3a5dd994fc6159987afde581:221111' => 'Apple QuickTime, Quality 565 (55%)', '133351a0f39427f1199312585cd6c997:221111' => 'Apple QuickTime, Quality 566 (55%)', '6c23da63c864f1433ec198ae202e56f0:221111' => 'Apple QuickTime, Quality 567 (55%)', '7d1819ccce2756fcf6dfbb67565c2552:221111' => 'Apple QuickTime, Quality 568 (55%)', 'd9794fa54e2ef47be48b972cdca910c2:221111' => 'Apple QuickTime, Quality 569 (56%)', '085db73bd47194c8fdf567fc619c3b62:221111' => 'Apple QuickTime, Quality 570 (56%)', '9866add6e1d251e1d4c40793f4300dce:221111' => 'Apple QuickTime, Quality 571 (56%)', '1b9e7e39831b05b058025ae0a7482d44:221111' => 'Apple QuickTime, Quality 572 (56%)', 'a8b52e666bd3d81404c0f8915ac18b43:221111' => 'Apple QuickTime, Quality 573 (56%)', 'e34d11f979458a87492b57eabfd4f4ea:221111' => 'Apple QuickTime, Quality 574 (56%)', '4295c1330dec60585760cbb05b79662d:221111' => 'Apple QuickTime, Quality 575 (56%)', '9205cc28769d94d6d00c25804ac70a88:221111' => 'Apple QuickTime, Quality 576 (56%)', 'b5648f13228d20fd7ae81965394f7515:221111' => 'Apple QuickTime, Quality 577 (56%)', 'c8f02bf550c40daa39b28911a4ef5a69:221111' => 'Apple QuickTime, Quality 578 (56%)', 'c2b23a91d377ce2d99ac4109f2740069:221111' => 'Apple QuickTime, Quality 579 (57%)', 'c0cecb47363aff00a2764a915f95cd35:221111' => 'Apple QuickTime, Quality 580 (57%)', 'fc0d8f17be060220464fe7bc0a2d754e:221111' => 'Apple QuickTime, Quality 581 (57%)', '63b59904874e5e427ddecb37e12f90c7:221111' => 'Apple QuickTime, Quality 582 (57%)', 'df6535865562ce7cbf08e9368e991a95:221111' => 'Apple QuickTime, Quality 583 (57%)', '74523ad3424dcff6aa697c3ce433ad4e:221111' => 'Apple QuickTime, Quality 584 (57%)', 'cbdec670ec6d9105277434b304226920:221111' => 'Apple QuickTime, Quality 585 (57%)', '68783ed0a7956cf0b7a1b2787e756213:221111' => 'Apple QuickTime, Quality 586 (57%)', 'a431976a61e281e7b9d808f094b74d2e:221111' => 'Apple QuickTime, Quality 587 (57%)', '8e2a66454fb149552d4538d53ec033aa:221111' => 'Apple QuickTime, Quality 588 (57%)', '49222c4a3be01e93baad695bba63b254:221111' => 'Apple QuickTime, Quality 589 (58%)', 'ab8fe796c87f9f61cedbfa64af9f5dec:221111' => 'Apple QuickTime, Quality 590 (58%)', '9bfe788e7ae4bc9cbe76d36f9a2b1b5e:221111' => 'Apple QuickTime, Quality 591 (58%)', '22b5f11b635ea5484469708cd7e6e3d9:221111' => 'Apple QuickTime, Quality 592 (58%)', '44e36eb25c6f9e313ef2a8f4c520c335:221111' => 'Apple QuickTime, Quality 593 (58%)', 'c71aa81fb12b378dd31a1ca128942f76:221111' => 'Apple QuickTime, Quality 594 (58%)', 'e56ca8f4da20395ec1f87d380198fa0a:221111' => 'Apple QuickTime, Quality 595 (58%)', '38f4d508dcf9c82d9488b42a2487b191:221111' => 'Apple QuickTime, Quality 596 (58%)', '3da1e7270e0900a17a0a4ff8d3c9a488:221111' => 'Apple QuickTime, Quality 597 (58%)', '900fee18a5f6d1dc3fd856d3d92f5414:221111' => 'Apple QuickTime, Quality 598 (58%)', '3c724d4b5d8cbe203ebbf92ea8e22808:221111' => 'Apple QuickTime, Quality 599 (58%)', 'e7e7befa282a985a0532634f360df7db:221111' => 'Apple QuickTime, Quality 600 (59%)', '1f21bf5b7e0e79c229ef4d06fc9d3cc8:221111' => 'Apple QuickTime, Quality 601 (59%)', '3bb09b202acd618286d26a33f688f7c7:221111' => 'Apple QuickTime, Quality 602 (59%)', '9717c5a17cbffdfaa2e5d3769b87fbc5:221111' => 'Apple QuickTime, Quality 603 (59%)', 'ffa7874d293c62ecc55c098b8f305ae1:221111' => 'Apple QuickTime, Quality 604 (59%)', 'e68841bf28d33d749d0031bfe3a5219c:221111' => 'Apple QuickTime, Quality 605 (59%)', '5862c8c2b241a9760f6804d970eefd66:221111' => 'Apple QuickTime, Quality 606 (59%)', '1d069604250e871bd92a4a24c7be2bd5:221111' => 'Apple QuickTime, Quality 607 (59%)', '3806bcbefd350e8791be95dfc62bab27:221111' => 'Apple QuickTime, Quality 608 (59%)', '490b035a665ef80c7b48804461d55b7f:221111' => 'Apple QuickTime, Quality 609 (59%)', 'bd6943a8c92a14e74d2b24052a19400a:221111' => 'Apple QuickTime, Quality 610 (60%)', '93e725418f46b2a70723523bef0979fe:221111' => 'Apple QuickTime, Quality 611 (60%)', '5b66fa5c0c1ba746289747229193cfb0:221111' => 'Apple QuickTime, Quality 612 (60%)', '1bdac971e8cddd198ad3123849370037:221111' => 'Apple QuickTime, Quality 613 (60%)', '20f7b70185f4b324a8451ac4657c1d66:221111' => 'Apple QuickTime, Quality 614 (60%)', '86ab18d6c1359a424f303fcfd0930df2:221111' => 'Apple QuickTime, Quality 615 (60%)', '0d70031c9962dba7c39da59ada2f1660:221111' => 'Apple QuickTime, Quality 616-617 (60%)', '9cb9a256b6deb481cf13e5230fe87dbb:221111' => 'Apple QuickTime, Quality 618-619 (60%)', 'cb34e1a0e18a4dd7ffe823f9c92b3622:221111' => 'Apple QuickTime, Quality 620 (61%)', 'ac015afc1d80314edd832aebfb495d25:221111' => 'Apple QuickTime, Quality 621 (61%)', '4974cc7044768888244b324449a238ab:221111' => 'Apple QuickTime, Quality 622 (61%)', 'bc4541f5bc4d58b99b53d24f3f520b32:221111' => 'Apple QuickTime, Quality 623 (61%)', 'ec2fd56a50df0e42498018d441a3aa75:221111' => 'Apple QuickTime, Quality 624 (61%)', '153a6f0994d16003aa4f1112e6757467:221111' => 'Apple QuickTime, Quality 625 (61%)', 'ed6b90ca62ed648d1102e1c506a0af26:221111' => 'Apple QuickTime, Quality 626 (61%)', '18593e50c21c8ad521b30933ef7479b1:221111' => 'Apple QuickTime, Quality 627 (61%)', '6f96ed52a987d67e8d950b2627d3fbc2:221111' => 'Apple QuickTime, Quality 628 (61%)', 'e76d86e8de4f0bf9e58cd389e0a8c117:221111' => 'Apple QuickTime, Quality 629 (61%)', '4fa27c83741226576ac6359cd4f6248e:221111' => 'Apple QuickTime, Quality 630 (62%)', 'be010732a7783ee345548a1eb95d024a:221111' => 'Apple QuickTime, Quality 631 (62%)', '6700663d4ebaeb394bfd3c85597347b5:221111' => 'Apple QuickTime, Quality 632 (62%)', '34dba33043aa5ee317b7649242e702b1:221111' => 'Apple QuickTime, Quality 633 (62%)', '821d7e59bcf756171b7644ec5736266e:221111' => 'Apple QuickTime, Quality 634 (62%)', 'd81683c0458d9ad72751530d6fbc1389:221111' => 'Apple QuickTime, Quality 635 (62%)', '4c04d6fe904a4b6ff8b25c9f0e9f0a16:221111' => 'Apple QuickTime, Quality 636 (62%)', '8efda55d6186d9867189c5cb572c5413:221111' => 'Apple QuickTime, Quality 637 (62%)', '25497c83113bd738e89d91bd48d7086c:221111' => 'Apple QuickTime, Quality 638 (62%)', '84c8e142e6d27734b126f76653b9199d:221111' => 'Apple QuickTime, Quality 639 (62%)', 'bdaf13038b56b5701f60300528f8a89c:221111' => 'Apple QuickTime, Quality 640-641 (63%)', 'b015ada43293b8d5bd2a8f288f8fb928:221111' => 'Apple QuickTime, Quality 642 (63%)', '8134ff0c4713cc1ef4a25ff60b49ac54:221111' => 'Apple QuickTime, Quality 643 (63%)', '967fc5c3ece2b69662257c76397416c9:221111' => 'Apple QuickTime, Quality 644 (63%)', 'd01a38e0f568d2a7b6b71f8fa63b8bcc:221111' => 'Apple QuickTime, Quality 645 (63%)', '5229288e448311401bb284133ac7d48c:221111' => 'Apple QuickTime, Quality 646 (63%)', '76d22de881d1b95b491689b589743b7a:221111' => 'Apple QuickTime, Quality 647 (63%)', 'c81b03b0291d2277461a551ed6861252:221111' => 'Apple QuickTime, Quality 648-649 (63%)', 'ebb774b4e106d1a9df5824958d4e5a95:221111' => 'Apple QuickTime, Quality 650 (63%)', '9ed53fb5bc8e397daf9409251c0a0a6c:221111' => 'Apple QuickTime, Quality 651 (64%)', '87d40f2e4dad34fa435c62af6817dc18:221111' => 'Apple QuickTime, Quality 652 (64%)', '0b933cf90e62682da926267d6356ac2b:221111' => 'Apple QuickTime, Quality 653 (64%)', '2c4a4cb841ee92aa3a2b4c93467ba7a8:221111' => 'Apple QuickTime, Quality 654 (64%)', '8a6ba56597670b7adb70901eca278049:221111' => 'Apple QuickTime, Quality 655 (64%)', 'd1ef25928fd4eefe131ffcfc249b9f8a:221111' => 'Apple QuickTime, Quality 656 (64%)', '8c85462b5a01db09bcbf304d7be1d543:221111' => 'Apple QuickTime, Quality 657 (64%)', '19c03533b9b2e3304a0b02d9b1054497:221111' => 'Apple QuickTime, Quality 658 (64%)', 'd2baa8fbc56f0970f820c376c6065d41:221111' => 'Apple QuickTime, Quality 659 (64%)', 'e6a0a679a13a99de16e13c6ea2829deb:221111' => 'Apple QuickTime, Quality 660-661 (64-65%)', '8e4f695afcf2a06254561e5e22b7a80b:221111' => 'Apple QuickTime, Quality 662 (65%)', 'd053fd2c67ce96b0ecf9ffc4b7f7775d:221111' => 'Apple QuickTime, Quality 663 (65%)', '326c33f64f96592487d2bfdd198738bf:221111' => 'Apple QuickTime, Quality 664 (65%)', '1ff8f5ff33353a3ee0b6dc8fbb6321a0:221111' => 'Apple QuickTime, Quality 665 (65%)', '14a5534e4216458662a43101d56d84c8:221111' => 'Apple QuickTime, Quality 666 (65%)', '0643b87475939754c8d56825cd96242f:221111' => 'Apple QuickTime, Quality 667 (65%)', '45c46a02a434d8ea759742907bfa0ee5:221111' => 'Apple QuickTime, Quality 668 (65%)', '2916d9453b885ee4123e6e3ee94ccbc7:221111' => 'Apple QuickTime, Quality 669-671 (65-66%)', 'b8fca611f92cbc459fe21e11f0214328:221111' => 'Apple QuickTime, Quality 672-673 (66%)', 'f40fb322c4bde68a2902c86c613af841:221111' => 'Apple QuickTime, Quality 674 (66%)', '1cbd419717a2916b53f9f504ec1167ca:221111' => 'Apple QuickTime, Quality 675 (66%)', '79f546689b548868a904f50214928aa1:221111' => 'Apple QuickTime, Quality 676 (66%)', '8ff6f2d4369155b0474417b00c3c4ac9:221111' => 'Apple QuickTime, Quality 677 (66%)', 'c60dbbefd4f215b9359dd004f4fb0fd3:221111' => 'Apple QuickTime, Quality 678 (66%)', 'c192d5847d1146a31db621263a9ce2f5:221111' => 'Apple QuickTime, Quality 679 (66%)', '4a2361c48a583f6df779d1e6088ed83c:221111' => 'Apple QuickTime, Quality 680 (66%)', '6c6260b84a3a588614d65133430289ea:221111' => 'Apple QuickTime, Quality 681 (67%)', '6773f3db56ae831012dbe43c1650571a:221111' => 'Apple QuickTime, Quality 682 (67%)', '813b89236cfe429fe534361f28ace015:221111' => 'Apple QuickTime, Quality 683 (67%)', '363b54d38094e5f2e2d63c50870ae76c:221111' => 'Apple QuickTime, Quality 684 (67%)', '7b17607b9954c37e525b1fbc35271553:221111' => 'Apple QuickTime, Quality 685 (67%)', '8b1138e2d88033d42698a386a2e8605b:221111' => 'Apple QuickTime, Quality 686 (67%)', 'c029b8a48e3c93f7c0367f2a149491c7:221111' => 'Apple QuickTime, Quality 687 (67%)', 'a36199f5a090de94b10a32fbe05f2916:221111' => 'Apple QuickTime, Quality 688-689 (67%)', 'a873e49b871c32bcaf8e3c6622744e70:221111' => 'Apple QuickTime, Quality 690 (67%)', 'b9d16f36087d4cca70eef1512c4be569:221111' => 'Apple QuickTime, Quality 691 (67%)', 'd5994dbe056ea3544b3256a7a6b53749:221111' => 'Apple QuickTime, Quality 692 (68%)', '0106cf02dcf4109cc6f02fa4ec0e2700:221111' => 'Apple QuickTime, Quality 693 (68%)', '7d71776416a8771d10e3c2e6dc6a5f21:221111' => 'Apple QuickTime, Quality 694-695 (68%)', 'c1557f789acc622c8858be4dfbc53c31:221111' => 'Apple QuickTime, Quality 696 (68%)', '5a54f085c1780cadb13a7dea8347c7c6:221111' => 'Apple QuickTime, Quality 697 (68%)', '04a5bb959bc203221e72e6575ff39602:221111' => 'Apple QuickTime, Quality 698 (68%)', '116e3d5fee4e3a695c0f79c09c89ff84:221111' => 'Apple QuickTime, Quality 699 (68%)', '145bfd5481e99e18c4c3707228557fa5:221111' => 'Apple QuickTime, Quality 700 (68%)', '19ceef79e864691318beea6502ddc3e1:221111' => 'Apple QuickTime, Quality 701 (68%)', 'dd0a023941d7bfd118d272f4f925e6e2:221111' => 'Apple QuickTime, Quality 702 (69%)', '81f039d6a0ded8227dc51273d153b295:221111' => 'Apple QuickTime, Quality 703-704 (69%)', '9a7ebf265afce16abaa6ca2fbb550b63:221111' => 'Apple QuickTime, Quality 705 (69%)', '8d0fed09156984328f90f9f19fb5a079:221111' => 'Apple QuickTime, Quality 706 (69%)', 'be7c72e09c46622b0d2b93e170a03e17:221111' => 'Apple QuickTime, Quality 707 (69%)', '50a510968effffab80bed1d08c6c5ccc:221111' => 'Apple QuickTime, Quality 708 (69%)', 'da2501a6f59b2256adb0833b58b504f2:221111' => 'Apple QuickTime, Quality 709 (69%)', '2a1b83345108443a090cdab4c83143fb:221111' => 'Apple QuickTime, Quality 710 (69%)', 'e7f293f640878b53fe95a7cb0b1dcc83:221111' => 'Apple QuickTime, Quality 711-712 (69-70%)', 'd9e0a4c08ef5d7f72eecce74c94c054d:221111' => 'Apple QuickTime, Quality 713 (70%)', 'c5774ffb4573926fd03d4175818c0e5d:221111' => 'Apple QuickTime, Quality 714 (70%)', 'e2b368a164b67e15598683f9f184bd77:221111' => 'Apple QuickTime, Quality 715 (70%)', 'f30792e8fad278c3e1677b5f5b74c682:221111' => 'Apple QuickTime, Quality 716-717 (70%)', '6f6bfc10750e6717cc3791a9ea1d7569:221111' => 'Apple QuickTime, Quality 718-719 (70%)', '5e3981a937c61480451d5bdc253e5472:221111' => 'Apple QuickTime, Quality 720 (70%)', 'c4fb82f47a7b002d5cab421592ae4972:221111' => 'Apple QuickTime, Quality 721 (70%)', 'a6c4a173169d168e003839e51f035661:221111' => 'Apple QuickTime, Quality 722 (71%)', '72df283a5c07671eba341500a3fc18f1:221111' => 'Apple QuickTime, Quality 723 (71%)', 'dfb203555c34fe146c526350e11309eb:221111' => 'Apple QuickTime, Quality 724 (71%)', '033472a8a855fab8cd8f6a5788dd07c8:221111' => 'Apple QuickTime, Quality 725 (71%)', '5b8a79eec9b7eb7755deb7f2c189e94a:221111' => 'Apple QuickTime, Quality 726 (71%)', 'ad3aad027e3829959ebeb6288bfab268:221111' => 'Apple QuickTime, Quality 727 (71%)', '2234156f0550a047700c2a08459c8242:221111' => 'Apple QuickTime, Quality 728 (71%)', '0c0351c3a444b851cd105dd5cc4db59c:221111' => 'Apple QuickTime, Quality 729 (71%)', 'c10fca5e6f66238ab09f7e8105f54e39:221111' => 'Apple QuickTime, Quality 730 (71%)', '74cc07bbb7049d59aff0c4965d4d5084:221111' => 'Apple QuickTime, Quality 731 (71%)', 'ce9ad8466ffd84b91039326e8688c44a:221111' => 'Apple QuickTime, Quality 732-733 (71-72%)', 'e4b0c56d41f4af9e10971876ad7ad56d:221111' => 'Apple QuickTime, Quality 734 (72%)', '96076425ecc546ec028d0eab48332756:221111' => 'Apple QuickTime, Quality 735 (72%)', 'ba49b0656894f3c76d852223721b3b1f:221111' => 'Apple QuickTime, Quality 736 (72%)', 'ae5c6eab0d57249acbcb8b1990b2602f:221111' => 'Apple QuickTime, Quality 737-738 (72%)', '72f08842473a6c504469d341259e5cd7:221111' => 'Apple QuickTime, Quality 739-740 (72%)', 'c9f953acdfc1f5afdbb9e9f74692d23e:221111' => 'Apple QuickTime, Quality 741 (72%)', '5a1b57a2583acf5c2428cd62fe24b773:221111' => 'Apple QuickTime, Quality 742 (72%)', '6a9ead8b2339567482a172a581e86c15:221111' => 'Apple QuickTime, Quality 743-744 (73%)', '513d9e9dabbb480eb60f7ef76b1d755e:221111' => 'Apple QuickTime, Quality 745 (73%)', 'b99bdcd0145833d52b916e71f2c20a04:221111' => 'Apple QuickTime, Quality 746 (73%)', 'ff084566430a3ed4733cd59aec26a55d:221111' => 'Apple QuickTime, Quality 747 (73%)', '76bcc27918d8f12b343e6e5a41108781:221111' => 'Apple QuickTime, Quality 748 (73%)', '7bf7022a7c12b3b7ea085b46158253e6:221111' => 'Apple QuickTime, Quality 749 (73%)', '4baf3b1df2426fbdac3d0aaa0503ee94:221111' => 'Apple QuickTime, Quality 750 (73%)', 'bb0180b9eda074c3f913c8ada3d4c1ad:221111' => 'Apple QuickTime, Quality 751 (73%)', 'c5fcb1748f616ac97794d34b1b93616e:221111' => 'Apple QuickTime, Quality 752-753 (73-74%)', '0da77ccec22a9cff9a049a47e86d3502:221111' => 'Apple QuickTime, Quality 754 (74%)', 'c31f71de437dc301d34f847d95267d9e:221111' => 'Apple QuickTime, Quality 755 (74%)', '01137dc7ef90f0aee15362c221f7b1d3:221111' => 'Apple QuickTime, Quality 756-758 (74%)', '026780f2172c289bc1ff73a34c6aee57:221111' => 'Apple QuickTime, Quality 759-760 (74%)', '3fab8f2b141f95a989fc4b046ad825cb:221111' => 'Apple QuickTime, Quality 761 (74%)', 'cd091eeb9d27d9dc7cdb5bff73572679:221111' => 'Apple QuickTime, Quality 762 (74%)', 'ad2221ee8bb94a3558ed16766efaec4f:221111' => 'Apple QuickTime, Quality 763 (75%)', '8a4ff70dce3efc9312ff7239e79b6bc9:221111' => 'Apple QuickTime, Quality 764 (75%)', 'b8d1fcda3a19d00788c2be73fd4c2c8e:221111' => 'Apple QuickTime, Quality 765-766 (75%)', '3af16b87c33bb2e48152e249beb9147b:221111' => 'Apple QuickTime, Quality 767 (75%)', '3af16b87c33bb2e48152e249beb9147b:211111' => 'Apple QuickTime, Quality 768 (75%)', '683270dbffdc5cd2d4e6cb841f17b206:211111' => 'Apple QuickTime, Quality 769 (75%)', '285bdd58fac87b174a22d2a93d69cd7c:211111' => 'Apple QuickTime, Quality 770 (75%)', '312e047b5d9076cd1e126f3dbce928e5:211111' => 'Apple QuickTime, Quality 771 (75%)', '99458d7a01a39fe126592d9afb1402ce:211111' => 'Apple QuickTime, Quality 772 (75%)', 'b4633256b0e0d5e2a5021f01ebabc105:211111' => 'Apple QuickTime, Quality 773 (75%)', '90d39fd222f9114f613a315a894283ca:211111' => 'Apple QuickTime, Quality 774 (76%)', '61b1d4a02498b7467f2c8e8cfebdfae9:211111' => 'Apple QuickTime, Quality 775-776 (76%)', '987ebcbd20b633b40241fcd30266e986:211111' => 'Apple QuickTime, Quality 777 (76%)', '31e214243395b008048469d4bc4dc780:211111' => 'Apple QuickTime, Quality 778 (76%)', 'db5b3a078a942131b5d86bc189baac24:211111' => 'Apple QuickTime, Quality 779 (76%)', 'ec440a2ffcbce8895beb663b36975073:211111' => 'Apple QuickTime, Quality 780-781 (76%)', '93d7ac97a931be74c7fe849edc482ea1:211111' => 'Apple QuickTime, Quality 782 (76%)', '3974d72e6831171ec970bbb09b9cc506:211111' => 'Apple QuickTime, Quality 783 (76%)', '07bd22218437079a86ce0b93ffa9cc90:211111' => 'Apple QuickTime, Quality 784 (77%)', '32757023bb5e7f703acf737a5a29c9d6:211111' => 'Apple QuickTime, Quality 785-786 (77%)', '6096eb584b99a587f5527e20473aa9d1:211111' => 'Apple QuickTime, Quality 787 (77%)', 'c6d134475eb85bd454f2ee5153366c51:211111' => 'Apple QuickTime, Quality 788 (77%)', 'a3ba20f325ff36f874d633919185f92d:211111' => 'Apple QuickTime, Quality 789 (77%)', 'af10133169e143a2b3634c48dede9440:211111' => 'Apple QuickTime, Quality 790 (77%)', '9dbb8223620e7f25ca3292849f7aa025:211111' => 'Apple QuickTime, Quality 791-792 (77%)', '5071640a38c5898dd5d2043346fd23e1:211111' => 'Apple QuickTime, Quality 793-795 (77-78%)', '60a0ca27f3e7289d97c033ca217899cc:211111' => 'Apple QuickTime, Quality 796-798 (78%)', 'f7a5ea485a254cba0d39cdeaf89ad344:211111' => 'Apple QuickTime, Quality 799 (78%)', 'd8cd0ca367d9afaf9a1aca0415da5361:211111' => 'Apple QuickTime, Quality 800 (78%)', '87fb3c7402ba4edcda34b71696d2b0e3:211111' => 'Apple QuickTime, Quality 801 (78%)', 'f8df76525f7f97d2e89173989e6786af:211111' => 'Apple QuickTime, Quality 802-804 (78-79%)', '64677161baed1c47d2fdd6eefd779583:211111' => 'Apple QuickTime, Quality 805 (79%)', 'ca39dde8e9b4ccd6261b28e089181639:211111' => 'Apple QuickTime, Quality 806-807 (79%)', 'e6c99d520b86fd6f5eb513d1a084324e:211111' => 'Apple QuickTime, Quality 808 (79%)', '9e048c787b12b9ab47d6166e81bc8bda:211111' => 'Apple QuickTime, Quality 809 (79%)', '03c035b39889356e0b10805d8549a1f7:211111' => 'Apple QuickTime, Quality 810 (79%)', '15de51ede231cfbe123daa42a1a46070:211111' => 'Apple QuickTime, Quality 811-813 (79%)', '725bcc59a6f5a1436dfa0dfd96cdcf44:211111' => 'Apple QuickTime, Quality 814 (79%)', 'd00103d50108e8be370a78d47f51aba0:211111' => 'Apple QuickTime, Quality 815 (80%)', '1c4c74ccc581b11050cfe18792246e5e:211111' => 'Apple QuickTime, Quality 816 (80%)', 'b63e97c56859f2476ed3f15f40775fb5:211111' => 'Apple QuickTime, Quality 817 (80%)', 'aac2510e3cd617eb2cd60e7dc6f5d252:211111' => 'Apple QuickTime, Quality 818 (80%)', '028caa124d0837dd9b1a64028e4f2965:211111' => 'Apple QuickTime, Quality 819 (80%)', '0440231d1a4a1187bffaa5b5576827f9:211111' => 'Apple QuickTime, Quality 820 (80%)', '6f879b2b5642ee3d01faf3410a721e2d:211111' => 'Apple QuickTime, Quality 821 (80%)', '4642245b427d5dd5c1c3766c323204ac:211111' => 'Apple QuickTime, Quality 822-824 (80%)', '8bd486eb557ae8f39948775aba222731:211111' => 'Apple QuickTime, Quality 825 (81%)', '8bc4e4bec8e9b193c11ad90c7f8bfaf3:211111' => 'Apple QuickTime, Quality 826 (81%)', 'f54c2ea8437408238f6c181a355af6cb:211111' => 'Apple QuickTime, Quality 827-829 (81%)', '0f58458f2b9959dbc57b4868200c0432:211111' => 'Apple QuickTime, Quality 830-832 (81%)', '24f95056dce30d11bad39b33ab271262:211111' => 'Apple QuickTime, Quality 833-834 (81%)', 'bad6fdd8761fb9d0921384013acf783f:211111' => 'Apple QuickTime, Quality 835 (82%)', '8c482fe6aef2a59a94cb779e6795e512:211111' => 'Apple QuickTime, Quality 836 (82%)', '50b309f18bcf477742aa491ea55af777:211111' => 'Apple QuickTime, Quality 837 (82%)', '92a9e0d027a1b2e5f7e49f7ffd96277e:211111' => 'Apple QuickTime, Quality 838-839 (82%)', 'a6df2748a4972d4323f0386820ce35a4:211111' => 'Apple QuickTime, Quality 840 (82%)', '9ffb80389e2eed2301e6b07860c2fbd7:211111' => 'Apple QuickTime, Quality 841 (82%)', '6042038094d7f4ad72c61c2a2e7a467f:211111' => 'Apple QuickTime, Quality 842 (82%)', '78d004490e822405acded09846135e50:211111' => 'Apple QuickTime, Quality 843 (82%)', 'a589d880de576ed888c57814ccea47a0:211111' => 'Apple QuickTime, Quality 844 (82%)', 'beee113eea5950b8211cdc49e5a04099:211111' => 'Apple QuickTime, Quality 845 (83%)', 'f04fed79cdc47709d649187cfcc7e342:211111' => 'Apple QuickTime, Quality 846-849 (83%)', 'edb0be7fcce943c28d02ff78ae600afb:211111' => 'Apple QuickTime, Quality 850 (83%)', '0e9648c1f28b99a377dcf7deec6450e6:211111' => 'Apple QuickTime, Quality 851-852 (83%)', '2dffe433bbb9c81b05e569afd3d9b585:211111' => 'Apple QuickTime, Quality 853 (83%)', '0ef4f8fa922f87f1be646fccaa0ef42e:211111' => 'Apple QuickTime, Quality 854 (83%)', '4b799df6fc9476102f890343080e66f5:211111' => 'Apple QuickTime, Quality 855-856 (83-84%)', '53a66cb32deb83c855f36b26527f4c10:211111' => 'Apple QuickTime, Quality 857 (84%)', '151d7cd5a95929d45c6790beb87705fe:211111' => 'Apple QuickTime, Quality 858 (84%)', 'bc2afe0a9c7c68b8d84bd231209be3e2:211111' => 'Apple QuickTime, Quality 859-860 (84%)', 'b9d66564ab9c4bb0910eb228aa9a48e1:211111' => 'Apple QuickTime, Quality 861-863 (84%)', '6808ca55a29fcb9c15db1925a84370c3:211111' => 'Apple QuickTime, Quality 864 (84%)', 'ee5b4ed7f04821d1e3a509d7565cb10d:211111' => 'Apple QuickTime, Quality 865 (84%)', 'd38be79f7c8c6c27a3268275b144add6:211111' => 'Apple QuickTime, Quality 866 (85%)', '59eedef87f255db058b5ba0b1d3a4ce8:211111' => 'Apple QuickTime, Quality 867 (85%)', '5e5530c45def7006a7f672ce5778513d:211111' => 'Apple QuickTime, Quality 868 (85%)', 'b09abfa40fc6607dc26d8b5df48c72fc:211111' => 'Apple QuickTime, Quality 869 (85%)', 'cfc78404529f2b81b16d3f25fc96e8f4:211111' => 'Apple QuickTime, Quality 870 (85%)', '14c62682032efe8dc2de80c9330c6206:211111' => 'Apple QuickTime, Quality 871-872 (85%)', 'ffadac945c3420537e21e67ab3a843d6:211111' => 'Apple QuickTime, Quality 873-875 (85%)', 'e67a8a7e92a9f03413e9a67b99624b8b:211111' => 'Apple QuickTime, Quality 876-877 (86%)', 'ba4af3bb30dda0a7be4c04ff1ebbd9ef:211111' => 'Apple QuickTime, Quality 878-880 (86%)', '3eedb8a357141ff5ae765fd3be2b232f:211111' => 'Apple QuickTime, Quality 881-886 (86-87%)', '127b0599fc6804909a33832be7a9dd36:211111' => 'Apple QuickTime, Quality 887 (87%)', 'b697448eec21ef07f3111b62d592c423:211111' => 'Apple QuickTime, Quality 888-890 (87%)', 'a08a6b6535f292518b5ff6d0d05ae187:211111' => 'Apple QuickTime, Quality 891-893 (87%)', 'a439b365c2d0cf1fbaad2e42d331d759:211111' => 'Apple QuickTime, Quality 894 (87%)', 'bf0c20b20af6473b7c4a338ba57d1a96:211111' => 'Apple QuickTime, Quality 895 (87%)', '09cf94311753aa9796ffd720749c51f7:211111' => 'Apple QuickTime, Quality 896 (88%)', 'a60bbd6538af00192c411020d7494a1d:211111' => 'Apple QuickTime, Quality 897-898 (88%)', 'df8ea903695e76e4b1466bdd3a3480c7:211111' => 'Apple QuickTime, Quality 899 (88%)', 'eb4eb617beaa4f23acf41167742806fc:211111' => 'Apple QuickTime, Quality 900-901 (88%)', '591c923a44c635c33769704c9cfa6ab7:211111' => 'Apple QuickTime, Quality 902 (88%)', '960caf85ef273541ac2e76c9554dc860:211111' => 'Apple QuickTime, Quality 903 (88%)', '22c77ec6f4e8f75d48f98473abe62e59:211111' => 'Apple QuickTime, Quality 904-905 (88%)', 'fc8d384969030e7bc0255d34a7a5c0b0:211111' => 'Apple QuickTime, Quality 906 (88%)', '42e7323506b113685e82e6d42664626f:211111' => 'Apple QuickTime, Quality 907-908 (89%)', '7163b345b90553e246296a48b46cc0b3:211111' => 'Apple QuickTime, Quality 909-910 (89%)', '52f25cf8c4d610dffcc45681def8fb49:211111' => 'Apple QuickTime, Quality 911-914 (89%)', '5554cfd817a2713a690b957145b088ed:211111' => 'Apple QuickTime, Quality 915-917 (89-90%)', '6ef0b71a5676c4645a3166b9c34744fa:211111' => 'Apple QuickTime, Quality 918-920 (90%)', '1228da2b97793a88a41542ddcfca7ad2:211111' => 'Apple QuickTime, Quality 921-922 (90%)', '9060906039e9ff37171ba48d908f6ad5:211111' => 'Apple QuickTime, Quality 923-924 (90%)', '6eb301fb89e7d625129b77a53fe30dcc:211111' => 'Apple QuickTime, Quality 925-926 (90%)', 'ad5399708089baad5891319303ba92df:211111' => 'Apple QuickTime, Quality 927 (91%)', 'afd16e145464c7c5a3cd703017b4ef7a:211111' => 'Apple QuickTime, Quality 928 (91%)', '4271405c840705072a102d7e18b374d9:211111' => 'Apple QuickTime, Quality 929 (91%)', '72a91837a63fa7444416bc00a05d988b:211111' => 'Apple QuickTime, Quality 930 (91%)', '8fe3845bafb06ee4de1a6f75c2a42e9b:211111' => 'Apple QuickTime, Quality 931 (91%)', '8d3b678651ec71f27e3727718123f354:211111' => 'Apple QuickTime, Quality 932-933 (91%)', '36d42b031eea0c9f626f15533e72162a:211111' => 'Apple QuickTime, Quality 934-936 (91%)', '789076781ff1e18154091f2460c1bab5:211111' => 'Apple QuickTime, Quality 937-938 (92%)', '07464723ecfd8e5ed8fd6904e9d15a23:211111' => 'Apple QuickTime, Quality 939 (92%)', '0efd0d9423b440cfc8efacf2e4dfcb7f:211111' => 'Apple QuickTime, Quality 940 (92%)', '80409b38f84336548b62e337a850e9cb:211111' => 'Apple QuickTime, Quality 941-943 (92%)', '5fa6bb26309d43ca6c89d6cc776a68a4:211111' => 'Apple QuickTime, Quality 944-946 (92%)', '705064f644ac4b24884500a40ad0f7cf:211111' => 'Apple QuickTime, Quality 947-948 (92-93%)', 'c181c79bc41cf5fe11e6f253242ce2c4:211111' => 'Apple QuickTime, Quality 949-951 (93%)', '1a7da03994ee019a30dbd37117761467:211111' => 'Apple QuickTime, Quality 952-954 (93%)', '070620a25578b4a38ed0c09d6d512de8:211111' => 'Apple QuickTime, Quality 955 (93%)', '6a092d8fd56ca0e852d74bd86cfc4f47:211111' => 'Apple QuickTime, Quality 956-957 (93%)', '66e85870faf72f4f3fe25486409b286a:211111' => 'Apple QuickTime, Quality 958 (94%)', '31365833a4d7d0ef2c1db9b90e515f7f:211111' => 'Apple QuickTime, Quality 959-961 (94%)', '2edccd94198ab5a459a8396d9a0be4aa:211111' => 'Apple QuickTime, Quality 962 (94%)', 'ca0bf66c467278f9d5ca5301840e7a7f:211111' => 'Apple QuickTime, Quality 963-967 (94%)', '261bdba7fe6d8bca5302e4e93b52c1fb:211111' => 'Apple QuickTime, Quality 968-970 (95%)', '762f9501e83d58307d1e102ddb343207:211111' => 'Apple QuickTime, Quality 971 (95%)', 'ba18a8f4175bdedfea7af9bf5fe8dd9c:211111' => 'Apple QuickTime, Quality 972-973 (95%)', 'd1a8052e7152e0c35d167e9e56418eb7:211111' => 'Apple QuickTime, Quality 974 (95%)', '32682ece28c3bee7754fde6fec109b47:211111' => 'Apple QuickTime, Quality 975-977 (95%)', 'a8780d0f85eef638c6a448e57b157378:211111' => 'Apple QuickTime, Quality 978-979 (96%)', 'b79ff1a16807a48a31d457ad7e0b94f2:211111' => 'Apple QuickTime, Quality 980-984 (96%)', '2bf80ea6a878f7ecb88ea827b58c98f8:211111' => 'Apple QuickTime, Quality 985-987 (96%)', 'add779ad00786bd2ccb9dcc226386b1a:211111' => 'Apple QuickTime, Quality 988-991 (96-97%)', '56c4efb597cc30275229486199e60f70:211111' => 'Apple QuickTime, Quality 992-993 (97%)', 'c2df556e8ede9fb199b9a16e01279c6b:211111' => 'Apple QuickTime, Quality 994-996 (97%)', '6af868a0eececd267495f749a38b4f95:211111' => 'Apple QuickTime, Quality 997-998 (97%)', 'c92c755320e7ce8f46f644b90b7907e8:211111' => 'Apple QuickTime, Quality 999-1000 (98%)', '6fcbaaa11108d1712bad5410b3db5b91:211111' => 'Apple QuickTime, Quality 1001-1002 (98%)', 'f7d803e16f0c66df7d46747715b1ae24:211111' => 'Apple QuickTime, Quality 1003 (98%)', '7f51ebf21174bcd3b027ae3cc77c4459:211111' => 'Apple QuickTime, Quality 1004 (98%)', 'f2423a8ae68a49cc6191a2ec80367893:211111' => 'Apple QuickTime, Quality 1005-1006 (98%)', 'f97cd4c7b1125556dc3eb57fc494e6b5:211111' => 'Apple QuickTime, Quality 1007-1009 (98-99%)', '389e1ca056b1bd05dd29ecaecae5b4ae:211111' => 'Apple QuickTime, Quality 1010-1013 (99%)', '43f9929d00af93968662983b891364d8:211111' => 'Apple QuickTime, Quality 1014-1016 (99%)', '7e1453eec55a8c40166b2d8985ad6bdc:211111' => 'Apple QuickTime, Quality 1017 (99%)', '31697e4b294a13e35ab8d55d3a9612ca:211111' => 'Apple QuickTime, Quality 1018-1020 (99-100%)', 'ec76274ff22c07e53299ad34633ba88f:211111' => 'Apple QuickTime, Quality 1021-1023 (100%)', '7f8b33a26e7f35a6eaf2e95df81e1cca:111111' => 'Apple QuickTime, Quality 1024 (Lossless)', # Apple QuickTime (Grayscale) # # Tested with: # - QuickTime 7.5.0 (Win) '7e6246d9be5273b979beb680b284e7b8:11' => 'Apple QuickTime, Quality 0-63 (0-6%)', 'caf33ddc94762bf60a8c5e5024550b21:11' => 'Apple QuickTime, Quality 64-80 (6-8%)', '042ae0dbef2b1e91c4eb36e66a39b5b9:11' => 'Apple QuickTime, Quality 81-92 (8-9%)', 'bdcc7abca09941326c079bb3bc30de4d:11' => 'Apple QuickTime, Quality 93-101 (9-10%)', '8edf0677ca6be750511593fad835bbb5:11' => 'Apple QuickTime, Quality 102-109 (10-11%)', 'dd54b4e3d8801f3a7969be542d165c6b:11' => 'Apple QuickTime, Quality 110-116 (11%)', 'c00374dece11c3cab5f2c3bf9621d365:11' => 'Apple QuickTime, Quality 117-122 (11-12%)', 'a2e3baa02454492ef811619ac18c65da:11' => 'Apple QuickTime, Quality 123-127 (12%)', '8f699e4439175f5f0cf0f903040fb3c5:11' => 'Apple QuickTime, Quality 128-133 (13%)', '50f9224c87a32486851bdbd3e686fd5b:11' => 'Apple QuickTime, Quality 134-137 (13%)', 'cccd5f36920fbe8ad77da2214f8ab6ed:11' => 'Apple QuickTime, Quality 138-142 (13-14%)', '8bc7e3b8f24507e284075ebeb272c3f4:11' => 'Apple QuickTime, Quality 143-146 (14%)', 'bc156b933365b88e5ba9f1bd4b2fee4e:11' => 'Apple QuickTime, Quality 147-150 (14-15%)', 'a50ff29c6c2a7e73f742ca94678956ba:11' => 'Apple QuickTime, Quality 151-154 (15%)', 'd0a67359275cf9e2e8f35de79d2e28ae:11' => 'Apple QuickTime, Quality 155-157 (15%)', '37914b5d31e7f0f13066e5292c07c305:11' => 'Apple QuickTime, Quality 158-161 (15-16%)', '340aeb15b2b6c05968bb2c6e3d85cbed:11' => 'Apple QuickTime, Quality 162-164 (16%)', 'bc93228921ec863e90850325cfd90dd2:11' => 'Apple QuickTime, Quality 165-167 (16%)', 'd5c95455812515ad4855ed725d5bf2d9:11' => 'Apple QuickTime, Quality 168-170 (16-17%)', 'd018c811df2390446b43cc702888864c:11' => 'Apple QuickTime, Quality 171-173 (17%)', '824a9788f50aad6ca26ada301cae5c72:11' => 'Apple QuickTime, Quality 174-176 (17%)', 'd35254d58224b1b6babda94d7f1a5ffe:11' => 'Apple QuickTime, Quality 177-179 (17%)', '4177be1c82543b32bf6578dc3a78d49d:11' => 'Apple QuickTime, Quality 180-182 (18%)', '88b94edfd7a6c7aadac520905e6cfa0a:11' => 'Apple QuickTime, Quality 183-184 (18%)', '589b1ef8cc8bece150218e4646d9dfd6:11' => 'Apple QuickTime, Quality 185-187 (18%)', 'a6c15a75ab70e28c78e6084f909523bf:11' => 'Apple QuickTime, Quality 188-189 (18%)', 'd052e48078f986c715e68f502d371ccc:11' => 'Apple QuickTime, Quality 190-191 (19%)', '7d4205e3d4e0b6c7071a418c9b5840cb:11' => 'Apple QuickTime, Quality 192-194 (19%)', '2200d1873e51bf812bdcb57c10c6c14b:11' => 'Apple QuickTime, Quality 195-196 (19%)', '395ef59782311cd2081887c78c40c4bc:11' => 'Apple QuickTime, Quality 197-198 (19%)', 'd33d12dc779097bee959fefac6de9a3e:11' => 'Apple QuickTime, Quality 199-201 (19-20%)', '64ff54dc33f610e3705cae31428ce43d:11' => 'Apple QuickTime, Quality 202-203 (20%)', 'dbee605b07dfe30c992622877dffb049:11' => 'Apple QuickTime, Quality 204-205 (20%)', 'aa5a427657696f05da789e1516b8c2ff:11' => 'Apple QuickTime, Quality 206-207 (20%)', 'cf8fce0d4bde00a2feb680bb52667c8f:11' => 'Apple QuickTime, Quality 208-209 (20%)', '81ac42cc63416f7c66cd2a51a8801cbd:11' => 'Apple QuickTime, Quality 210-211 (21%)', '5e55cc3328e61e88b9f2a49af4ec2268:11' => 'Apple QuickTime, Quality 212-213 (21%)', 'ef938a0533502fe19f311d46c43fa86c:11' => 'Apple QuickTime, Quality 214-215 (21%)', 'f841cbd6a77d64924ab19845219f3399:11' => 'Apple QuickTime, Quality 216-217 (21%)', '98b684f30055c84ba5734e29f7b98b5f:11' => 'Apple QuickTime, Quality 218 (21%)', '8d4f697b3a2baaecc8765f31f54a76ae:11' => 'Apple QuickTime, Quality 219-220 (21%)', '6fc283989bb3a8c91f6c4384df2fa25d:11' => 'Apple QuickTime, Quality 221-222 (22%)', 'dccca51d261b315120f069697872377d:11' => 'Apple QuickTime, Quality 223-224 (22%)', '5869e4a9592a7900e740b09fe19261a1:11' => 'Apple QuickTime, Quality 225 (22%)', 'ebd575cf069eb906d2f2b2e202f67247:11' => 'Apple QuickTime, Quality 226-227 (22%)', '7ed52852c280b97fd44def8434d84051:11' => 'Apple QuickTime, Quality 228-229 (22%)', '984d291debac8a0caeaccccea5fbfbdf:11' => 'Apple QuickTime, Quality 230 (22%)', '9b2247e0f55b4485e7c55a04ee6a801c:11' => 'Apple QuickTime, Quality 231-232 (23%)', 'd2a1887cf45aecd63d838e585dbb5794:11' => 'Apple QuickTime, Quality 233-234 (23%)', '6bb5ab15f80beebcb73fae0ef089fa61:11' => 'Apple QuickTime, Quality 235 (23%)', '281f65a19e5de33d9ff5f3afeda06973:11' => 'Apple QuickTime, Quality 236-237 (23%)', '563f732877b2c654d571c269bbb36a40:11' => 'Apple QuickTime, Quality 238 (23%)', 'fa11118bb9f90b1464e34c785d0da357:11' => 'Apple QuickTime, Quality 239-240 (23%)', '8dc4cff27c3c5196b4bc8905ef32f119:11' => 'Apple QuickTime, Quality 241 (24%)', '2ac28889e4ad4724d49f8b4c36b0cece:11' => 'Apple QuickTime, Quality 242-243 (24%)', '5cbeb8f83a47b6a5e8711fe0ea7c42d7:11' => 'Apple QuickTime, Quality 244 (24%)', 'd5d329f5687d154e4ceeb48697b848ba:11' => 'Apple QuickTime, Quality 245-246 (24%)', 'd3eaad34ae4fc8a3ac6330c1c9dceb28:11' => 'Apple QuickTime, Quality 247 (24%)', '29b74834ce7570b9c175d0200e75316e:11' => 'Apple QuickTime, Quality 248-249 (24%)', '850f2b2aaa99ad390bc9443be1b587dc:11' => 'Apple QuickTime, Quality 250 (24%)', '036d2395718f99bf916486e1af42cb92:11' => 'Apple QuickTime, Quality 251 (25%)', 'e9275719ef4cb335f9dfed63c3737f0e:11' => 'Apple QuickTime, Quality 252-253 (25%)', 'dfcbd3df5c6b96106e6348b77f89c56a:11' => 'Apple QuickTime, Quality 254 (25%)', 'f9ef906cd67c9f9b62514a6ac1f8bd3f:11' => 'Apple QuickTime, Quality 255 (25%)', '469d14cef27dbb7c1f6f49324c077852:11' => 'Apple QuickTime, Quality 256-257 (25%)', '65d7471a913f6cc87e9dc65ea594606b:11' => 'Apple QuickTime, Quality 258 (25%)', '6b590185b5d6ecbc1d79c2624a0d5319:11' => 'Apple QuickTime, Quality 259 (25%)', 'fbf3d8d87f68077aa95e5e40047c1607:11' => 'Apple QuickTime, Quality 260-261 (25%)', '7e3999424de8a8f6bb84e3cfc07628e8:11' => 'Apple QuickTime, Quality 262 (26%)', '6c0476ba4b3fcc4675cfab20d3c96368:11' => 'Apple QuickTime, Quality 263 (26%)', '0bb76dd0e08175a90343a9c7dab48bfa:11' => 'Apple QuickTime, Quality 264-265 (26%)', '83c8ceab43dedde06d8068e5b8ccdc2b:11' => 'Apple QuickTime, Quality 266 (26%)', '5aee693372b77c9721dba9d3596e371c:11' => 'Apple QuickTime, Quality 267 (26%)', '1312bc5c7456856400f43749d407fb9f:11' => 'Apple QuickTime, Quality 268 (26%)', '3f01645e33791ef09fbeb6c0e63db6a9:11' => 'Apple QuickTime, Quality 269 (26%)', '785c36a6aa2bedd207cb1fa450a5e6d4:11' => 'Apple QuickTime, Quality 270-271 (26%)', '84788c494352a07ab54f360f4a2a3d34:11' => 'Apple QuickTime, Quality 272 (27%)', 'bf29abfdf0086437452e2ca220e69cae:11' => 'Apple QuickTime, Quality 273 (27%)', 'c7da2e951711b8b1314a7c531e09cbdc:11' => 'Apple QuickTime, Quality 274 (27%)', 'fb549f21b7ad3b556bc91165b3067a77:11' => 'Apple QuickTime, Quality 275 (27%)', '0a7497e67acef345c655f79fd00b26de:11' => 'Apple QuickTime, Quality 276 (27%)', '1e2be0dde2c5d2216bca879a3f89c565:11' => 'Apple QuickTime, Quality 277-278 (27%)', 'd09f78b68290ff6b470720ead4d79b15:11' => 'Apple QuickTime, Quality 279 (27%)', '5b54396a8a725e49e9bd4c9883b151df:11' => 'Apple QuickTime, Quality 280 (27%)', 'f60d4afe566a641f0187a42ca6462560:11' => 'Apple QuickTime, Quality 281 (27%)', 'b69090d1ab951e6355ab193b1f20bf48:11' => 'Apple QuickTime, Quality 282 (28%)', '7ce7d00283cada911c3ebc347680bc7d:11' => 'Apple QuickTime, Quality 283 (28%)', '2502314c1b957a0e4f911d17db770a01:11' => 'Apple QuickTime, Quality 284 (28%)', '100f3392aa8292fb78548513a619671a:11' => 'Apple QuickTime, Quality 285 (28%)', 'af683de3118ab595c41b5796b57a9540:11' => 'Apple QuickTime, Quality 286 (28%)', '1228f1572d76b53658f4042bda8e99a2:11' => 'Apple QuickTime, Quality 287 (28%)', 'e9c647b8bf2d7535d259eed6fbabe206:11' => 'Apple QuickTime, Quality 288 (28%)', '9ab0afefad0e6bb7c3c1a8bca0c3f987:11' => 'Apple QuickTime, Quality 289 (28%)', 'b6900aafebce0e59136abb701eacb1e5:11' => 'Apple QuickTime, Quality 290 (28%)', 'a3c40b635e584c8f49d6b6b110846fee:11' => 'Apple QuickTime, Quality 291-292 (28-29%)', '80175a9dbb871d045c738fdeb6fcbdc7:11' => 'Apple QuickTime, Quality 293 (29%)', 'c79231716eff96853fe03a26c1c38120:11' => 'Apple QuickTime, Quality 294 (29%)', '8f96a0f2af7f1f1b0b2d4895bced1326:11' => 'Apple QuickTime, Quality 295 (29%)', 'ba3c103d00719e795b093ac7a75e6fac:11' => 'Apple QuickTime, Quality 296 (29%)', '42fd2864197991a38b3f80374a69d4e9:11' => 'Apple QuickTime, Quality 297 (29%)', '76bc1d777c94b680683610218732eb11:11' => 'Apple QuickTime, Quality 298 (29%)', '8b9e19fe69d7c7e1989018aca76c0aea:11' => 'Apple QuickTime, Quality 299 (29%)', 'd3c0e7437c630f3bed0867737c5f1921:11' => 'Apple QuickTime, Quality 300 (29%)', 'a8ecf55a88fd0e1b29646207aff8c36f:11' => 'Apple QuickTime, Quality 301 (29%)', 'eaffe0714878be5fb67a914f5bb79fef:11' => 'Apple QuickTime, Quality 302 (29%)', 'a6a49ea0300157ecb401ce45d7f1f850:11' => 'Apple QuickTime, Quality 303 (30%)', 'fc28ca358af7cd55dc78853e4288f26d:11' => 'Apple QuickTime, Quality 304 (30%)', '61cb5e93e3e69f6929d97653824733b0:11' => 'Apple QuickTime, Quality 305 (30%)', '2cba6ba1aede8c791ada1acaba8c162e:11' => 'Apple QuickTime, Quality 306 (30%)', 'c1bcc3db9f417dc52595f2bb224e30d7:11' => 'Apple QuickTime, Quality 307 (30%)', '2273274a8d695da4bebff145cbcbafcc:11' => 'Apple QuickTime, Quality 308 (30%)', 'e8bdbff8c7908e36c51e1344c0e99746:11' => 'Apple QuickTime, Quality 309 (30%)', 'ffb8ea8efdb22c5c8256cc4e4008f11c:11' => 'Apple QuickTime, Quality 310 (30%)', 'a1a8f92dc00c42877eb9a1d7462f8408:11' => 'Apple QuickTime, Quality 311 (30%)', '723c2a2de195391f2db06456e9345c5b:11' => 'Apple QuickTime, Quality 312 (30%)', '916225049ab8d411a5e0138ea9087e37:11' => 'Apple QuickTime, Quality 313 (31%)', '3b0315316de45b649bd8ba5b5471ab81:11' => 'Apple QuickTime, Quality 314 (31%)', '6cf948e65c9d32279c757394a4f5b77e:11' => 'Apple QuickTime, Quality 315 (31%)', '4c4b7fc28e54a2bbdccd90d3618f01e8:11' => 'Apple QuickTime, Quality 316 (31%)', '767c20d7d54970b0974f205c790d7d04:11' => 'Apple QuickTime, Quality 317 (31%)', '81c1ce1c7d15394d95eaf2d6bd1495e3:11' => 'Apple QuickTime, Quality 318 (31%)', '6547daee398d39f773742be92ef2d0d0:11' => 'Apple QuickTime, Quality 319 (31%)', '65edf81f975f01a7b3ad1c16a1af64cb:11' => 'Apple QuickTime, Quality 320 (31%)', 'f8948967aeda9fb6ca1637a082ed04db:11' => 'Apple QuickTime, Quality 321 (31%)', '2444e1c407a9965fb5ea2dafd269911f:11' => 'Apple QuickTime, Quality 322-324 (31-32%)', '7c8242581553e818ef243fc680879a19:11' => 'Apple QuickTime, Quality 325 (32%)', 'e2fe91d57078586f15b09e3b9c8cd3fa:11' => 'Apple QuickTime, Quality 326 (32%)', '0740db8af7951c1363f2c8d75462d378:11' => 'Apple QuickTime, Quality 327 (32%)', '3c1ff7ebab192163b4578e7dfcf63ce6:11' => 'Apple QuickTime, Quality 328 (32%)', '705ae76b905302bd9f3b78cc8d1cb28f:11' => 'Apple QuickTime, Quality 329 (32%)', '9438633929a283aac168f415d8ca44d6:11' => 'Apple QuickTime, Quality 330 (32%)', '68799ccfa08e2f55b5be79264d3ca58a:11' => 'Apple QuickTime, Quality 331 (32%)', '9bda57f21c56ea0dc971164b8dc56394:11' => 'Apple QuickTime, Quality 332 (32%)', 'f9988c61ae580fcfc8bf929134b07c2e:11' => 'Apple QuickTime, Quality 333 (33%)', '59faa8c6fb70d4cf42765a92c1c7afc1:11' => 'Apple QuickTime, Quality 334 (33%)', '277982593a55786fe424c80a17224cd7:11' => 'Apple QuickTime, Quality 335 (33%)', 'c2a8a67d050b22a0673ee9ad6685a540:11' => 'Apple QuickTime, Quality 336 (33%)', '040e09f495355470a44c580bca654693:11' => 'Apple QuickTime, Quality 337 (33%)', '93173762094b6b506aa495e022ced65f:11' => 'Apple QuickTime, Quality 338 (33%)', '281c39340554f672ff62c65e0bf1036b:11' => 'Apple QuickTime, Quality 339 (33%)', '82d40afcb23ac10dba01bbab101da176:11' => 'Apple QuickTime, Quality 340 (33%)', 'f56a4679494e5af4692381caa63b9062:11' => 'Apple QuickTime, Quality 341 (33%)', '78787c9f0aae4ab8d15ab47eaea5035c:11' => 'Apple QuickTime, Quality 342 (33%)', 'a1664b510ce4c6aa3588cdbc327a6f57:11' => 'Apple QuickTime, Quality 343 (33%)', 'f6150beda200179d9744527637e52baa:11' => 'Apple QuickTime, Quality 344 (34%)', '620244f053fef313466fbcb232077aca:11' => 'Apple QuickTime, Quality 345 (34%)', '91c1b36d4411306ba3afaea0658f1ad8:11' => 'Apple QuickTime, Quality 346 (34%)', '0381b4e34e700adecd618afdcfb5513e:11' => 'Apple QuickTime, Quality 347 (34%)', '4d8f909ee8cb53e0386eb09c1591099b:11' => 'Apple QuickTime, Quality 348 (34%)', 'f7425d5d0a0207e6dfaa0ee7c35d4ec6:11' => 'Apple QuickTime, Quality 349 (34%)', '8d0663f8149a308365e18bdeb8c867e8:11' => 'Apple QuickTime, Quality 350 (34%)', '4fa58542b5953534072b6dc1085deadf:11' => 'Apple QuickTime, Quality 351 (34%)', '2358594d2a85b48dc0bd03e024dec9bd:11' => 'Apple QuickTime, Quality 352 (34%)', 'b9594c8100236f288cdc01e6488cbc41:11' => 'Apple QuickTime, Quality 353 (34%)', '3542444d51fa859ed5af78a1f5fc4f36:11' => 'Apple QuickTime, Quality 354 (35%)', '7c95c94440f652232530fe4c411be1a2:11' => 'Apple QuickTime, Quality 355 (35%)', '8361a9dbb5d93ad098a0ce2091b0bdf5:11' => 'Apple QuickTime, Quality 356 (35%)', '44c8e4d0d7678034cb206609652ffeef:11' => 'Apple QuickTime, Quality 357 (35%)', '4694896b11fb898106e30fd4ed50cded:11' => 'Apple QuickTime, Quality 358 (35%)', '9ddc6134fe65ea64048fdfd27c82bed7:11' => 'Apple QuickTime, Quality 359 (35%)', 'c60f75f7e09f0454db9cc48392a7eeed:11' => 'Apple QuickTime, Quality 360 (35%)', '151731e5cd38be847f4dad794c023a69:11' => 'Apple QuickTime, Quality 361 (35%)', '0468ecbf6fc1303467adfdcab8edfe6d:11' => 'Apple QuickTime, Quality 362 (35%)', 'debd5adf671e3b907c10155cc910dcc1:11' => 'Apple QuickTime, Quality 363 (35%)', '6385ee79b090ea430190dbe1ee93ddca:11' => 'Apple QuickTime, Quality 364 (36%)', '67ed20f2fe283549dae4ba40860c3777:11' => 'Apple QuickTime, Quality 365 (36%)', 'e168523157ee45551ba30378d597dfd6:11' => 'Apple QuickTime, Quality 366 (36%)', 'd0cbe6c7372724a802d0183c6de66f8b:11' => 'Apple QuickTime, Quality 367 (36%)', '38a1f9d86241eb3b96d5d42bc6587598:11' => 'Apple QuickTime, Quality 368 (36%)', '4dc4b433113acbde9d77a4cbad69bb14:11' => 'Apple QuickTime, Quality 369 (36%)', '186948d91ea43a64f874ebb9dee44564:11' => 'Apple QuickTime, Quality 370 (36%)', '786aa4e46172ac65e10b230f3dcaadb2:11' => 'Apple QuickTime, Quality 371 (36%)', 'ac76c6ebb64c843736fc765a03674d94:11' => 'Apple QuickTime, Quality 372 (36%)', '38a60cdb8033a9f90027895eab0c40ba:11' => 'Apple QuickTime, Quality 373 (36%)', 'ce48f7fb2ba9edee46c3f4839b40ef60:11' => 'Apple QuickTime, Quality 374 (37%)', '7b3058792db9876a86c65ec44c0261b3:11' => 'Apple QuickTime, Quality 375 (37%)', '5e983407295808e244f6bdece469c8be:11' => 'Apple QuickTime, Quality 376 (37%)', '68ff8bfc0e15c93586ef6b4cf347469c:11' => 'Apple QuickTime, Quality 377 (37%)', '9d4a8c44917390e56bca2352a8a4b1be:11' => 'Apple QuickTime, Quality 378 (37%)', '36e7560256c5ffd285a1ca0f6d4bf97d:11' => 'Apple QuickTime, Quality 379 (37%)', 'a88bad671d80cf6a70bd6e37be9c95c9:11' => 'Apple QuickTime, Quality 380 (37%)', '23ab27876006666358e95d9c1104bcd0:11' => 'Apple QuickTime, Quality 381 (37%)', 'b87750acf49940bf1f01f6a134a600b1:11' => 'Apple QuickTime, Quality 382 (37%)', '731fa7404c090db157030e40804604b6:11' => 'Apple QuickTime, Quality 383 (37%)', '442c2664c07af1ec15d86581f43aab0b:11' => 'Apple QuickTime, Quality 384 (38%)', '145c52a48a9b2e954e785c3f8df5c27e:11' => 'Apple QuickTime, Quality 385 (38%)', '55d37ee1e3c8d12a70e67206fa1c9b0c:11' => 'Apple QuickTime, Quality 386 (38%)', '60880ff1f7bfe6a85cd80c2d4582395b:11' => 'Apple QuickTime, Quality 387 (38%)', '85fc5daf51e6cbb04352016c817e5714:11' => 'Apple QuickTime, Quality 388 (38%)', 'd7c835210eec5a8bedb3a18d32cbe066:11' => 'Apple QuickTime, Quality 389 (38%)', '315e7fee22864b37b1b7670957f259fe:11' => 'Apple QuickTime, Quality 390 (38%)', '46dd3917c1473ed0f8fc3f1e6f08416d:11' => 'Apple QuickTime, Quality 391 (38%)', '1e93645e6163af46937c35a18b55c601:11' => 'Apple QuickTime, Quality 392 (38%)', 'ba1a32697c0ae4e76a78f4b5624a8ce0:11' => 'Apple QuickTime, Quality 393 (38%)', '68a0d6250be9df2c05556ff59988c499:11' => 'Apple QuickTime, Quality 394 (38%)', '13b1310840627eddaf435e9feffebebe:11' => 'Apple QuickTime, Quality 395 (39%)', '2e420a34dcf01dab91fd8509d4dbaab5:11' => 'Apple QuickTime, Quality 396 (39%)', 'eef3afec34329517513541a8509b7aab:11' => 'Apple QuickTime, Quality 397 (39%)', '80bdd75a2fc87b5288bc77763481df83:11' => 'Apple QuickTime, Quality 398 (39%)', 'e230e3ac7c740f3e8fe6bc74fff72c10:11' => 'Apple QuickTime, Quality 399 (39%)', '68b07a219cda4b9fc9a8507b788d8230:11' => 'Apple QuickTime, Quality 400 (39%)', 'f1c23475d19d9e950dbc4086902365a3:11' => 'Apple QuickTime, Quality 401 (39%)', 'dc2af4340202aa481491b86539888720:11' => 'Apple QuickTime, Quality 402 (39%)', '495aeee0f43a596938c98c5364feb2ee:11' => 'Apple QuickTime, Quality 403 (39%)', '8319dfe3caedea6988e5024b0196d317:11' => 'Apple QuickTime, Quality 404 (39%)', 'd62cd17e8e04ebd568a8f5abc38cad4a:11' => 'Apple QuickTime, Quality 405 (40%)', '047e1711c44262f352034452d0b0d07b:11' => 'Apple QuickTime, Quality 406 (40%)', '552bf986ae119444955ded5f485d5dc4:11' => 'Apple QuickTime, Quality 407 (40%)', 'd39329b38fdcabe9e1ae5f1b205c825a:11' => 'Apple QuickTime, Quality 408 (40%)', 'bf2904a3e3870a2b4d060e0863530d92:11' => 'Apple QuickTime, Quality 409 (40%)', '1acceb7ae4f9edbb835006d97ca30094:11' => 'Apple QuickTime, Quality 410 (40%)', '5de50c687a6e885634bf16adfd75e6bc:11' => 'Apple QuickTime, Quality 411 (40%)', 'd92c5bba7cfd1bfbb8c662c1a27ca413:11' => 'Apple QuickTime, Quality 412 (40%)', 'cea44b5645cd1dbf469c8ae5600e4ff5:11' => 'Apple QuickTime, Quality 413 (40%)', '5caf3989a757842c716220e4e426bde2:11' => 'Apple QuickTime, Quality 414 (40%)', 'fd2f7a6518c12848a9ecdb1c3beb1fa8:11' => 'Apple QuickTime, Quality 415 (41%)', 'de0547c872fed9c9c75c8fec2fe010e6:11' => 'Apple QuickTime, Quality 416 (41%)', '6cf4dfbe3df89d9728e0f34b7b145223:11' => 'Apple QuickTime, Quality 417 (41%)', 'd94d79b70686d3e2568d61d07e5819eb:11' => 'Apple QuickTime, Quality 418 (41%)', '9ec82f50503769a9bb17e876594833b6:11' => 'Apple QuickTime, Quality 419 (41%)', '4a39b0ae55f0eaa5672f00015cae2d40:11' => 'Apple QuickTime, Quality 420 (41%)', '42bae7ef4a41562b2e98d74248f4f22e:11' => 'Apple QuickTime, Quality 421 (41%)', '8c0ea132cfacf212c518ad297229be34:11' => 'Apple QuickTime, Quality 422 (41%)', 'c1af7f1a3716bef087124306b068605c:11' => 'Apple QuickTime, Quality 423 (41%)', 'd3ea3c519f92dd870fed03f63cabf05e:11' => 'Apple QuickTime, Quality 424 (41%)', '0442196d850319833f27df632e92f064:11' => 'Apple QuickTime, Quality 425 (42%)', '8c372e99fa96d2598e431f8137e47da6:11' => 'Apple QuickTime, Quality 426 (42%)', '9bade640c3fcb807ed1322479f9e7f1c:11' => 'Apple QuickTime, Quality 427 (42%)', '8015ad9fa22d6565ca61ce9979f3663f:11' => 'Apple QuickTime, Quality 428 (42%)', '09a13f94022839a24065b82d5f4ffdbd:11' => 'Apple QuickTime, Quality 429 (42%)', '0e570bc627acaee0962472a1a646816b:11' => 'Apple QuickTime, Quality 430 (42%)', 'be7e7114f08e1775ca9676d2feeeccca:11' => 'Apple QuickTime, Quality 431 (42%)', '44be972c54cd64be7524a133a7395401:11' => 'Apple QuickTime, Quality 432 (42%)', 'b2f7b5e3007387aa22df74e82e916195:11' => 'Apple QuickTime, Quality 433 (42%)', '5c13c8db3a0b590f4fa3ec462b8890c3:11' => 'Apple QuickTime, Quality 434 (42%)', '2733a3cb2e0a2313b74d686437fa3ae2:11' => 'Apple QuickTime, Quality 435 (42%)', '66309175abaa59d6246237a77ce9eb76:11' => 'Apple QuickTime, Quality 436 (43%)', '6a2eb9f07f3c96365a06d91da171e673:11' => 'Apple QuickTime, Quality 437 (43%)', 'e395118c42b6492dd4d9d30754f0a697:11' => 'Apple QuickTime, Quality 438 (43%)', '7a75abc5c5ec8cc0fa43f239ab048c08:11' => 'Apple QuickTime, Quality 439 (43%)', 'c558f3407dc549c902efad68c54920de:11' => 'Apple QuickTime, Quality 440 (43%)', '49cd1849b501868260d8a3b1e96d8625:11' => 'Apple QuickTime, Quality 441 (43%)', 'f7d70cfab7ff888c97078d277fa01307:11' => 'Apple QuickTime, Quality 442 (43%)', 'f06ddea698cebe653bdd0c208c3d8c95:11' => 'Apple QuickTime, Quality 443 (43%)', '73478bb7714d1d2342bbf22c5fdc04d6:11' => 'Apple QuickTime, Quality 444 (43%)', '24406aee81b89ea50881ae71f878d0ec:11' => 'Apple QuickTime, Quality 445 (43%)', 'e3e88302627b6743725cace74ddb17f9:11' => 'Apple QuickTime, Quality 446 (44%)', '3fb9c046dff30dcb4128df984532d6ba:11' => 'Apple QuickTime, Quality 447 (44%)', 'c9a4b04bc8e580608014b6f3111322d7:11' => 'Apple QuickTime, Quality 448 (44%)', '7749ec06b1f1b1be30aa58dbef838d49:11' => 'Apple QuickTime, Quality 449 (44%)', 'c0a54e87a2ef1c163311bcc1abf85214:11' => 'Apple QuickTime, Quality 450 (44%)', 'f20a253d2513f4d8f2cfeea980852820:11' => 'Apple QuickTime, Quality 451 (44%)', '6538fc6f5f1744b40c0b8b5bc7179983:11' => 'Apple QuickTime, Quality 452 (44%)', '68a4a67af696f82bbbb7db15a16c0c46:11' => 'Apple QuickTime, Quality 453 (44%)', 'e477932560b308940ac7439eed9f63da:11' => 'Apple QuickTime, Quality 454 (44%)', 'fd732b0493e7ff16da4bde7faa88e22d:11' => 'Apple QuickTime, Quality 455 (44%)', '61884dc8b93e63c07bb487a6e29d6fb7:11' => 'Apple QuickTime, Quality 456 (45%)', '67515a725833d40535a54b4ef9551e05:11' => 'Apple QuickTime, Quality 457 (45%)', 'cc6bb734b742b0631ab6562a329e1603:11' => 'Apple QuickTime, Quality 458 (45%)', '1801686a97836f690ce3d5523ffcfa9a:11' => 'Apple QuickTime, Quality 459 (45%)', 'f73f690cacd5d4e247f59964ad0f43b9:11' => 'Apple QuickTime, Quality 460 (45%)', '853946ede6a624136546ec5b68ecdc49:11' => 'Apple QuickTime, Quality 461 (45%)', 'f05c48d79edbefdb4d260dc23cf258e6:11' => 'Apple QuickTime, Quality 462 (45%)', '8dc8361e94137f5466c8dd1f9aa06781:11' => 'Apple QuickTime, Quality 463 (45%)', '6c121faf4784a5a93fbf7fff4470dea4:11' => 'Apple QuickTime, Quality 464-465 (45%)', 'd0eaa368737f17f6037757d393a22599:11' => 'Apple QuickTime, Quality 466-467 (46%)', '9c6f5faa1009cafe8bc3060fe18d4b60:11' => 'Apple QuickTime, Quality 468 (46%)', 'ac47d493602dddace7844a9bc962e5ed:11' => 'Apple QuickTime, Quality 469 (46%)', '24784b5651e1790242c01de522a6e05b:11' => 'Apple QuickTime, Quality 470 (46%)', 'adbb56f1f0e0392392f9c7a38351a9ec:11' => 'Apple QuickTime, Quality 471 (46%)', '6e0952a44c37bc2d98dbede4ec429c99:11' => 'Apple QuickTime, Quality 472 (46%)', '20c7942ddec30475a182cb281f12bc03:11' => 'Apple QuickTime, Quality 473 (46%)', '4080277d75b20871d00ebc01ffbdb848:11' => 'Apple QuickTime, Quality 474 (46%)', '4f15f7e4c56e7a75c0fe5454ab7e8f72:11' => 'Apple QuickTime, Quality 475 (46%)', 'ff82adb92189413246aee9a992eb2013:11' => 'Apple QuickTime, Quality 476 (46%)', '16df79eb7c5f062aeebde385fbce1553:11' => 'Apple QuickTime, Quality 477 (47%)', 'df02b0ea9dab7d291950b6cfc65c4bb1:11' => 'Apple QuickTime, Quality 478 (47%)', '4ca8ec2a0c651e0508aab3b153cfee23:11' => 'Apple QuickTime, Quality 479 (47%)', 'bbbae155e558e9d37686ec34bd065a53:11' => 'Apple QuickTime, Quality 480 (47%)', '9bf86a5ec6e5382f214e07364a62b1b3:11' => 'Apple QuickTime, Quality 481 (47%)', '41d873034f29b298d899b48cd321c93f:11' => 'Apple QuickTime, Quality 482 (47%)', '52092035b4e3fd45de3298c4d641385a:11' => 'Apple QuickTime, Quality 483 (47%)', '70e5babe9507bae6725e401a36903070:11' => 'Apple QuickTime, Quality 484 (47%)', '3cfa966dde2536c83c921aa250b978b3:11' => 'Apple QuickTime, Quality 485 (47%)', 'b0144b1d2671d145d29812ebcebd863d:11' => 'Apple QuickTime, Quality 486 (47%)', '2a6a136faaf1f13c2b80dcb4786d90b2:11' => 'Apple QuickTime, Quality 487 (48%)', '3a6eac793d818f378e7b24826c9115cc:11' => 'Apple QuickTime, Quality 488 (48%)', '4a78c6570fc84378e3334bfcd8a5680f:11' => 'Apple QuickTime, Quality 489 (48%)', '0709c0afc0eae932a50903e56ec95ad2:11' => 'Apple QuickTime, Quality 490 (48%)', 'b013b5c9b7bafc9dcad9a1e87fc629ff:11' => 'Apple QuickTime, Quality 491 (48%)', '7cb380e582317b8387037450cc68db5e:11' => 'Apple QuickTime, Quality 492 (48%)', 'f94618c1a011209cb3b060887c7e244e:11' => 'Apple QuickTime, Quality 493 (48%)', '649a90949cab8f45d3ecef78068165d1:11' => 'Apple QuickTime, Quality 494 (48%)', '70e105a22b036f7c1ce0b5d02fa1c34e:11' => 'Apple QuickTime, Quality 495 (48%)', '18c10ea6fe5918e09daf1a3a7a74e678:11' => 'Apple QuickTime, Quality 496 (48%)', '23822cafcc61ce2a52691f1fc963ff18:11' => 'Apple QuickTime, Quality 497 (49%)', '5bb2cf3e6721c2dd8eb3341f9bff4159:11' => 'Apple QuickTime, Quality 498 (49%)', 'e55b5345d9668d1b11b657537f707072:11' => 'Apple QuickTime, Quality 499 (49%)', '4cbebcb06d1003e29429e9d5c9445919:11' => 'Apple QuickTime, Quality 500 (49%)', '916b16f020b2b21e4c8114da8c05d584:11' => 'Apple QuickTime, Quality 501 (49%)', '98abef3366c7f451e44f5c2799e2be6d:11' => 'Apple QuickTime, Quality 502 (49%)', 'f8e99ed03828752f16c51bb8c9887e9e:11' => 'Apple QuickTime, Quality 503 (49%)', 'eef05c558c1aba5cf2891fb13ee07167:11' => 'Apple QuickTime, Quality 504 (49%)', 'cb5fc7927d88ac99f556b2dd7985eaf9:11' => 'Apple QuickTime, Quality 505 (49%)', 'f0e3f635bbcf96654812e8c78b227701:11' => 'Apple QuickTime, Quality 506 (49%)', '234c9cf6d7fe671b52c3ec5a20046ec8:11' => 'Apple QuickTime, Quality 507 (50%)', '9dfcc9ae3baee4bb4ad63abf2f740275:11' => 'Apple QuickTime, Quality 508 (50%)', 'b1f1b6519991ac7696b233dd9b9de6b5:11' => 'Apple QuickTime, Quality 509 (50%)', 'dba2f5203ffecada66a8bf9b1272f1eb:11' => 'Apple QuickTime, Quality 510 (50%)', '367b3d63cddc0cd27e58030c2b8f1aaa:11' => 'Apple QuickTime, Quality 511 (50%)', 'c28ab3fd6480c92028327957228c0a11:11' => 'Apple QuickTime, Quality 512 (50%)', '6bc9ebaf9f3ed62ec8818076f6f81c7f:11' => 'Apple QuickTime, Quality 513 (50%)', '3bbfcd817441d2267a49bf76b48c5f47:11' => 'Apple QuickTime, Quality 514 (50%)', '27e6ed2cecfebe31eb3d66128c926562:11' => 'Apple QuickTime, Quality 515 (50%)', '3cf112c5843f98410599ea2a197e5cf6:11' => 'Apple QuickTime, Quality 516 (50%)', '2821aae8108df4bd98e5eaa451a351d2:11' => 'Apple QuickTime, Quality 517 (50%)', '798f48b6dbe3f1cd7b40b03fae8d2611:11' => 'Apple QuickTime, Quality 518 (51%)', '67a7c8896d03a030b56130e1f9c5caad:11' => 'Apple QuickTime, Quality 519 (51%)', '4bf1b53c292dec3f7cf3c020a3a9d911:11' => 'Apple QuickTime, Quality 520 (51%)', '2bfe0ace876b80be6f601a1703187d94:11' => 'Apple QuickTime, Quality 521 (51%)', '7590bc1a40090163a101bfd28daa3fc2:11' => 'Apple QuickTime, Quality 522 (51%)', '118c7b118b1df404c90cfb1d10cf2a77:11' => 'Apple QuickTime, Quality 523 (51%)', '86cfac24ca9f4ab254f882ad399ea758:11' => 'Apple QuickTime, Quality 524 (51%)', '0268c3e9e3e1c3e6eb25fe0d31940c7f:11' => 'Apple QuickTime, Quality 525 (51%)', '9beb1b7c55129a34c850c359d7263457:11' => 'Apple QuickTime, Quality 526 (51%)', '0cec2c8f96c092bd6e7cf0f7ea294c99:11' => 'Apple QuickTime, Quality 527 (51%)', 'd8c5179c2419775f43e9a7899bacddd7:11' => 'Apple QuickTime, Quality 528 (52%)', '9ce50f6e0b00d2e601f2fcc151abc4d8:11' => 'Apple QuickTime, Quality 529 (52%)', '80db52b1671d32d8bd3126bf1d7db8ec:11' => 'Apple QuickTime, Quality 530 (52%)', 'f3ef06f90579eaf1008e07b94e818a40:11' => 'Apple QuickTime, Quality 531 (52%)', '3c85026793f58eb45141847a27854fe2:11' => 'Apple QuickTime, Quality 532-533 (52%)', 'e3042cbd43d2067ae92e1a8ce3f2c5a1:11' => 'Apple QuickTime, Quality 534 (52%)', 'dd71fdab3d46341a9b6ca0b6c6929d23:11' => 'Apple QuickTime, Quality 535 (52%)', 'a451c79ccddcd543a80e1ce0449dcb0d:11' => 'Apple QuickTime, Quality 536 (52%)', '2da67fe5f0bb3c8b10403295895fb154:11' => 'Apple QuickTime, Quality 537 (52%)', '4f72f3cdc82d433e7f749be8036d4ce0:11' => 'Apple QuickTime, Quality 538 (53%)', 'da29cc9a4d5fd7e0dc36a2dd0c70e84f:11' => 'Apple QuickTime, Quality 539 (53%)', '63f61a0d3c4f1ace8ebe5b6ae23e3f25:11' => 'Apple QuickTime, Quality 540 (53%)', 'fde14219617069bbf6b26dcb42036de7:11' => 'Apple QuickTime, Quality 541 (53%)', 'c84313bc621c6d05999510fa57c56d05:11' => 'Apple QuickTime, Quality 542 (53%)', '92658d4c879d6e48bfda1a6e9f49ef8d:11' => 'Apple QuickTime, Quality 543 (53%)', '3deffd01a1c03929873dddd86a5339f1:11' => 'Apple QuickTime, Quality 544 (53%)', 'e76c1b26bbd196efe2e793e27727704d:11' => 'Apple QuickTime, Quality 545 (53%)', '9f3289994c790a10ecb2d93021677840:11' => 'Apple QuickTime, Quality 546 (53%)', 'f7493b01895b7880c651841c73678d33:11' => 'Apple QuickTime, Quality 547 (53%)', '3c9d094741c995c2c0ac9daf14c4e683:11' => 'Apple QuickTime, Quality 548 (54%)', '8c0e1d4cd6138817963af6ca149cb5d5:11' => 'Apple QuickTime, Quality 549 (54%)', 'd781cc6f686fc7c7b9b6eef90fab4d87:11' => 'Apple QuickTime, Quality 550 (54%)', '7dd6377a907070b1ca7e05f770ca2aab:11' => 'Apple QuickTime, Quality 551-552 (54%)', 'c2d5e2e93ec191015d8181c9e25387d8:11' => 'Apple QuickTime, Quality 553 (54%)', '65d20361f4ba0725cf150c7ae2033776:11' => 'Apple QuickTime, Quality 554 (54%)', '2d7eb8eb9df9f4831a843626f4fc7e19:11' => 'Apple QuickTime, Quality 555 (54%)', 'ce0e14187fec73f57242becd633a89a3:11' => 'Apple QuickTime, Quality 556 (54%)', '140cc5a99ef865e318a217ea069aa84d:11' => 'Apple QuickTime, Quality 557 (54%)', '0db59bd18beb49f9beb901f3435e22a5:11' => 'Apple QuickTime, Quality 558 (54%)', '78d19da8de8095644aa31fb409033fe7:11' => 'Apple QuickTime, Quality 559 (55%)', '00687c4e4852ed1cd446c09a3764e505:11' => 'Apple QuickTime, Quality 560 (55%)', 'f3795398903c82e1beababf95d3a8413:11' => 'Apple QuickTime, Quality 561 (55%)', 'b749b90354443bf17da7a67a5ad53397:11' => 'Apple QuickTime, Quality 562 (55%)', 'c722656df4bb0651821cd90880953a20:11' => 'Apple QuickTime, Quality 563 (55%)', '4d17c873e65b9d398f27735b0020c777:11' => 'Apple QuickTime, Quality 564 (55%)', '067a76c2e5386ae85f9187e3e2134621:11' => 'Apple QuickTime, Quality 565 (55%)', '09b689f7d0c1d4bb0d96d06c02b8dcf8:11' => 'Apple QuickTime, Quality 566 (55%)', 'ffc0192eb5a182370a641cffe9b1d71f:11' => 'Apple QuickTime, Quality 567 (55%)', '3af2163438180050bbcf123d4f4587d3:11' => 'Apple QuickTime, Quality 568 (55%)', '3bdb097a9791f3ce6d7bbc4d6a194aa4:11' => 'Apple QuickTime, Quality 569 (56%)', '8c1fead15819016583650eff5a4f5bda:11' => 'Apple QuickTime, Quality 570 (56%)', '967aeb5bc4d75a0d5c0998bbfb282982:11' => 'Apple QuickTime, Quality 571 (56%)', 'cdd7bd689f14d5f7c3ea790f6f09ae64:11' => 'Apple QuickTime, Quality 572 (56%)', '6a20041beb5b67d38525bb7507ffeb49:11' => 'Apple QuickTime, Quality 573 (56%)', '2bf57fbe54370c4d917f259631af033e:11' => 'Apple QuickTime, Quality 574 (56%)', 'd2e983c44eae2983f48f526992fbbfb4:11' => 'Apple QuickTime, Quality 575 (56%)', 'c5bb48d86e26ac496bb4b4bc888cc06a:11' => 'Apple QuickTime, Quality 576 (56%)', 'a595c40b5dbd45557c3c8d23ebee5e24:11' => 'Apple QuickTime, Quality 577 (56%)', 'f2d84e1114ef85682818b96720d439b5:11' => 'Apple QuickTime, Quality 578 (56%)', '332d9c49c5b32ae2addbb06a1e32fd49:11' => 'Apple QuickTime, Quality 579 (57%)', '19c5c7c0270bd36c49f695475a62c293:11' => 'Apple QuickTime, Quality 580 (57%)', '6516e60b3995e21b6750ebca1ddcfee5:11' => 'Apple QuickTime, Quality 581 (57%)', '8daf4a87b28106876529a549cf1040b8:11' => 'Apple QuickTime, Quality 582 (57%)', '6b37d6acc52259bf972a41e84dea7754:11' => 'Apple QuickTime, Quality 583 (57%)', '588666e111892f10ca3f17bc362d9276:11' => 'Apple QuickTime, Quality 584 (57%)', '9ec2859c370f557783903608748e7fb1:11' => 'Apple QuickTime, Quality 585 (57%)', '18e3ac85da74fe92ab5da3d5f7614e09:11' => 'Apple QuickTime, Quality 586 (57%)', 'da4c88f145393972fbe9d3f40838cab9:11' => 'Apple QuickTime, Quality 587 (57%)', '8ae7d2b569c437904a20a10bbd21fe89:11' => 'Apple QuickTime, Quality 588 (57%)', 'fc6dfb9669566b249cb03228aeb020c3:11' => 'Apple QuickTime, Quality 589 (58%)', '198f3a32e4036d7c37fbc0c343d883af:11' => 'Apple QuickTime, Quality 590 (58%)', '876ec039f82e49b925b232843b4703d4:11' => 'Apple QuickTime, Quality 591 (58%)', '673b05962b8255cbc9bdbbc48965b4b7:11' => 'Apple QuickTime, Quality 592 (58%)', '02e9a58edf45d75be000dee144316c66:11' => 'Apple QuickTime, Quality 593 (58%)', '2abebf7a61009c5c1aa9516539b9084e:11' => 'Apple QuickTime, Quality 594 (58%)', 'fe44d8625d6242f4b5deb82be8ccaacf:11' => 'Apple QuickTime, Quality 595 (58%)', '66529cc8ef9694e6a37e8787d0f160fd:11' => 'Apple QuickTime, Quality 596 (58%)', '2129ee2bff47bfa8a8bb79ea9fb67b92:11' => 'Apple QuickTime, Quality 597 (58%)', 'ccb55ec1549a51212859495e104c626b:11' => 'Apple QuickTime, Quality 598 (58%)', '05e53fb216ba4a1734eefaccd249d8e2:11' => 'Apple QuickTime, Quality 599 (58%)', 'f4923d7b7dedd365646169e720eee427:11' => 'Apple QuickTime, Quality 600 (59%)', 'c0f2265630bdf5f29e8c95df25c89edb:11' => 'Apple QuickTime, Quality 601 (59%)', '0fdd23e8274090da3c925a3db7303adf:11' => 'Apple QuickTime, Quality 602 (59%)', 'a5bcbd80472fdf697db770ac78d6a4e3:11' => 'Apple QuickTime, Quality 603 (59%)', 'b157c4aabba2816f391c8f76ca3d4072:11' => 'Apple QuickTime, Quality 604 (59%)', 'b8ef26dabc2d81a8ba13b1f49ea711d3:11' => 'Apple QuickTime, Quality 605 (59%)', '8a983844f9b0aec26fc8ac75a258e3ac:11' => 'Apple QuickTime, Quality 606 (59%)', '44ced96f11e3a410201beed353a864cf:11' => 'Apple QuickTime, Quality 607 (59%)', '4a14a3e37c89e5a7570f672b1970ca55:11' => 'Apple QuickTime, Quality 608 (59%)', 'e5ec78e112e3ba6463de24b3518347eb:11' => 'Apple QuickTime, Quality 609 (59%)', '29b7cdc7a570b950457d20541c22c4ce:11' => 'Apple QuickTime, Quality 610 (60%)', '470c0c761e2bb5e314a7112f3d64b277:11' => 'Apple QuickTime, Quality 611 (60%)', 'ced483058f2abf19df0f7935dafd217a:11' => 'Apple QuickTime, Quality 612 (60%)', '8a202c89c57e77f50e1df27a3be7d5b7:11' => 'Apple QuickTime, Quality 613 (60%)', '7eb9fe0338a7b802860a60e0088418fd:11' => 'Apple QuickTime, Quality 614 (60%)', 'ac25112c596d62f95518af109457975c:11' => 'Apple QuickTime, Quality 615 (60%)', 'f57e9a5f1d8dea7fd83a1b5840243686:11' => 'Apple QuickTime, Quality 616-617 (60%)', '0eef5c6ff8ba65ff799081a9c96a2297:11' => 'Apple QuickTime, Quality 618-619 (60%)', '05f98e12bfa14ba6347fb43f2241ba43:11' => 'Apple QuickTime, Quality 620 (61%)', '91885755c780ebe16b1278a0359eda83:11' => 'Apple QuickTime, Quality 621 (61%)', 'b44cb1ca15fc9e3a27420df2ddae5879:11' => 'Apple QuickTime, Quality 622 (61%)', 'ae6c2112dd560530b7bacc8bfa9fb7f6:11' => 'Apple QuickTime, Quality 623 (61%)', 'd3b05f3cd78e0ac3ab37a02152e22831:11' => 'Apple QuickTime, Quality 624 (61%)', 'b0c2c3f76d848ee2e8f47a9a90131a21:11' => 'Apple QuickTime, Quality 625 (61%)', '752fbc15f77a8c2149f5ae6bf49204b8:11' => 'Apple QuickTime, Quality 626 (61%)', '9c34d3dedfe47d95edabdcbc5568a2a8:11' => 'Apple QuickTime, Quality 627 (61%)', '252ba8a31aeb601e23b3a70f9af7abc1:11' => 'Apple QuickTime, Quality 628 (61%)', '359038cd7c45242e96e176e91210922d:11' => 'Apple QuickTime, Quality 629 (61%)', '8ab83dc2e7ca8b9db1f3b0ab500f3aca:11' => 'Apple QuickTime, Quality 630 (62%)', '21c9f9a0ff71d4528ef7a19d2cfd0b6c:11' => 'Apple QuickTime, Quality 631 (62%)', 'a62fb887c209e0fab99fcb7ac81137a2:11' => 'Apple QuickTime, Quality 632 (62%)', 'e454ca92aca849d59b873d9be817baea:11' => 'Apple QuickTime, Quality 633 (62%)', '9ad6008e7b4f8478043bfa54e1d9e48e:11' => 'Apple QuickTime, Quality 634 (62%)', '45b20f0b0d7d88d8330354212af2e087:11' => 'Apple QuickTime, Quality 635 (62%)', 'b0a00ffee2e55457cd999bba2d07f63e:11' => 'Apple QuickTime, Quality 636 (62%)', '5dfcb96d9a1186f662c6adb38bb9520a:11' => 'Apple QuickTime, Quality 637 (62%)', 'd973f38c501796adff40c4f70cbd8885:11' => 'Apple QuickTime, Quality 638 (62%)', 'dcfe5898ec101a8b2bf98330445dd1bf:11' => 'Apple QuickTime, Quality 639 (62%)', '2b81eecf0fecd33679adac27e79ef3f4:11' => 'Apple QuickTime, Quality 640-641 (63%)', '5aad44c55bf4f6dc538eaca006cafac2:11' => 'Apple QuickTime, Quality 642 (63%)', '7079c2d71ff33e7c4e8efdece23c307b:11' => 'Apple QuickTime, Quality 643 (63%)', 'a5f724e9d7148f1a84ee597f45c33141:11' => 'Apple QuickTime, Quality 644 (63%)', '3ae705fae9e895eda345d482525215e3:11' => 'Apple QuickTime, Quality 645 (63%)', '7cbd635e5fee8bbd290b0d383b03da5a:11' => 'Apple QuickTime, Quality 646 (63%)', '0f125e2c5ee6b123cf67b586ea23d422:11' => 'Apple QuickTime, Quality 647 (63%)', '87eac5c1375cca9aa16eba0704616a7b:11' => 'Apple QuickTime, Quality 648-649 (63%)', 'aa83fd556c569ddcd81e0cc1ba866373:11' => 'Apple QuickTime, Quality 650 (63%)', 'dab4fa97da49aa37889185c5b43917c1:11' => 'Apple QuickTime, Quality 651 (64%)', '51ad55cb254f36748123ca83f43556f4:11' => 'Apple QuickTime, Quality 652 (64%)', '86e707c017682fe08213216d064b1b51:11' => 'Apple QuickTime, Quality 653 (64%)', '3730182602996b4a1d540eb3fd970072:11' => 'Apple QuickTime, Quality 654 (64%)', '1bf7a5d7477ad75b9c7b281de622d53b:11' => 'Apple QuickTime, Quality 655 (64%)', '82b4bc7c4a832b620e810311a33c9771:11' => 'Apple QuickTime, Quality 656 (64%)', '6502d634e5bf3f849e9d382886fc32fe:11' => 'Apple QuickTime, Quality 657 (64%)', 'a10e87fa030f8177a4f59f8d16a20afd:11' => 'Apple QuickTime, Quality 658 (64%)', '338a78a7658ff3c1de33d88aa0ab7c74:11' => 'Apple QuickTime, Quality 659 (64%)', '4c30c4399ef4bb2920601d940ed404eb:11' => 'Apple QuickTime, Quality 660-661 (64-65%)', 'ab7cfb73667875854893982a8cfcfab9:11' => 'Apple QuickTime, Quality 662 (65%)', '7bff346b97abf46ca005af4e74b560fa:11' => 'Apple QuickTime, Quality 663 (65%)', '2eae93ed601a50284ee31c20651584cb:11' => 'Apple QuickTime, Quality 664 (65%)', 'e566eaef7eacd6c7161feebf4cec79e8:11' => 'Apple QuickTime, Quality 665 (65%)', 'a9f461d3bca42dfab57c834fa5f34419:11' => 'Apple QuickTime, Quality 666 (65%)', '2b394105d4dd418e79b32e66496679d4:11' => 'Apple QuickTime, Quality 667 (65%)', 'c65677d79e37baf57767e10d7b7f1ce8:11' => 'Apple QuickTime, Quality 668 (65%)', '688c7dca6b12c22a21e0caf1a0336c80:11' => 'Apple QuickTime, Quality 669-671 (65-66%)', '20d4b3c9e3c292c68181974704fe5048:11' => 'Apple QuickTime, Quality 672-673 (66%)', '3bc3948025869f25b143aa517b2154ac:11' => 'Apple QuickTime, Quality 674 (66%)', '8a2ae82991917070de49cc48d104446f:11' => 'Apple QuickTime, Quality 675 (66%)', 'b5424d9dce37dd5c9e0e38bcc775f48e:11' => 'Apple QuickTime, Quality 676 (66%)', '28f718af4edb0069a1fdab00f6ea978d:11' => 'Apple QuickTime, Quality 677 (66%)', '910416483a49503202cbe3ecee33afc9:11' => 'Apple QuickTime, Quality 678 (66%)', '153196d4f99569f9bbd3fe0e96d2909c:11' => 'Apple QuickTime, Quality 679 (66%)', '919a38ebb9fc0bcba388643a9b3ef27c:11' => 'Apple QuickTime, Quality 680 (66%)', 'ef511ac2c9d7153c16e3e1846325b727:11' => 'Apple QuickTime, Quality 681 (67%)', 'e8b4ef8f94d89c59c855758a73ec451f:11' => 'Apple QuickTime, Quality 682 (67%)', 'a09fe2e60a7ff12e1e5ca00afa9719ef:11' => 'Apple QuickTime, Quality 683 (67%)', 'e56cf84423c16869a9a4fd6605b15ba4:11' => 'Apple QuickTime, Quality 684 (67%)', 'f64d88456f97a65fe562eb69e619782a:11' => 'Apple QuickTime, Quality 685 (67%)', '8cbf6cda8ae0249fb91c1ff5ab788a04:11' => 'Apple QuickTime, Quality 686 (67%)', 'f0ebdd8d44ac1a80727041a087553847:11' => 'Apple QuickTime, Quality 687 (67%)', 'c8f917220d6285cda6428a2cf6a9a1b3:11' => 'Apple QuickTime, Quality 688-689 (67%)', '83ff61ebceff5f888b9615b250aa7b76:11' => 'Apple QuickTime, Quality 690 (67%)', 'a2d1de53a0882047287a954f86bc783d:11' => 'Apple QuickTime, Quality 691 (67%)', 'c78717ac2705274888912f349eeb2c8e:11' => 'Apple QuickTime, Quality 692 (68%)', 'e032225ecdcf1d91d85626df59a2d0c6:11' => 'Apple QuickTime, Quality 693 (68%)', 'ebf82c50697d66a6913727095299f192:11' => 'Apple QuickTime, Quality 694-695 (68%)', 'bcc29022955cc7532b08640ab118259c:11' => 'Apple QuickTime, Quality 696 (68%)', '6a87dd29703c2b3ef80f1b5d2cc8d26a:11' => 'Apple QuickTime, Quality 697 (68%)', '91c9d96e11d96e10b328a5f18960247b:11' => 'Apple QuickTime, Quality 698 (68%)', '6eeaaacec8edc933b68602b01d16204e:11' => 'Apple QuickTime, Quality 699 (68%)', 'c638d9151dc650993b56f4effc0fe19c:11' => 'Apple QuickTime, Quality 700 (68%)', 'c67d246229fcc0dd1b974f7df556d247:11' => 'Apple QuickTime, Quality 701 (68%)', '7a52e3960831057d58e9b1ba03b87cf3:11' => 'Apple QuickTime, Quality 702 (69%)', '907e599e3c462b498e936dfc35b20bb9:11' => 'Apple QuickTime, Quality 703-704 (69%)', '65bf1ddc176fe4002a7a2ecaac60e58c:11' => 'Apple QuickTime, Quality 705 (69%)', '40e59fdb430180502ceacf7b4034eff8:11' => 'Apple QuickTime, Quality 706 (69%)', '4205aec34791d70be03b90ab1e54ef8c:11' => 'Apple QuickTime, Quality 707 (69%)', '5c0a83e613d3bdd9ec7e86983f75b5be:11' => 'Apple QuickTime, Quality 708 (69%)', 'b3ebdf0376c9c48cca51ea8b550f6c51:11' => 'Apple QuickTime, Quality 709 (69%)', '72161116404ed3cb449674760d0e4776:11' => 'Apple QuickTime, Quality 710 (69%)', '35b3697c265e35185e9463aac6ce9b2d:11' => 'Apple QuickTime, Quality 711-712 (69-70%)', '85adcc8c52c25334a9e7ea9d79433f8d:11' => 'Apple QuickTime, Quality 713 (70%)', '8f72f67948f264bdbd33107c33b1e0a0:11' => 'Apple QuickTime, Quality 714 (70%)', 'c25ed5069735a3f9677ee494108a52bc:11' => 'Apple QuickTime, Quality 715 (70%)', 'fd3167b1cdcfa1bdd37a4841d37b1624:11' => 'Apple QuickTime, Quality 716-717 (70%)', 'a02b6b8286cf6d036961911e98bd8f89:11' => 'Apple QuickTime, Quality 718-719 (70%)', 'd876e8934da14a985abda0ebe722bbee:11' => 'Apple QuickTime, Quality 720 (70%)', '31852b7659883eade6e273ac61ef0262:11' => 'Apple QuickTime, Quality 721 (70%)', 'de3aa6ed96eaf3ed3cd3ea70a2f75002:11' => 'Apple QuickTime, Quality 722 (71%)', 'f178977e9e0133711f395943816d26aa:11' => 'Apple QuickTime, Quality 723 (71%)', '18fce3103e312ce26252ec4af6cd1350:11' => 'Apple QuickTime, Quality 724 (71%)', 'fdf6b04a2d8ac06d3fe64d1dceba4cd9:11' => 'Apple QuickTime, Quality 725 (71%)', '6a37c2572bb47dff514aa4b343c104b5:11' => 'Apple QuickTime, Quality 726 (71%)', 'fdbe851f6e559bc17ce3610b91e7fead:11' => 'Apple QuickTime, Quality 727 (71%)', '9fee7fc42e670d6e30a5e9fcf696241d:11' => 'Apple QuickTime, Quality 728 (71%)', '5aedf3816a813ed63b0521b0c384a677:11' => 'Apple QuickTime, Quality 729 (71%)', 'c1278992838bdd62e71bf41c20126a5f:11' => 'Apple QuickTime, Quality 730 (71%)', '791e3897f6ac92fb5e708b28dbd361b1:11' => 'Apple QuickTime, Quality 731 (71%)', 'd5b2902ae3fcd87e1521da86585e7b3a:11' => 'Apple QuickTime, Quality 732-733 (71-72%)', 'a99810db58e835fe4b213d707dc0b754:11' => 'Apple QuickTime, Quality 734 (72%)', 'e8032085aa55f664f7f74201ac10bb99:11' => 'Apple QuickTime, Quality 735 (72%)', '488e5d04f779b15c53f76e67cccdb2ed:11' => 'Apple QuickTime, Quality 736 (72%)', '548a841c0a8c3b2beeb134c6c3b922fc:11' => 'Apple QuickTime, Quality 737-738 (72%)', 'cfe4549eb2dd81684920aa32b598260c:11' => 'Apple QuickTime, Quality 739-740 (72%)', 'b6ff9215f87e4b053aaee36381f59005:11' => 'Apple QuickTime, Quality 741 (72%)', 'd1c8c1e1fc2bfb776d2ee1aace3fc6f9:11' => 'Apple QuickTime, Quality 742 (72%)', '365693ebd558aebc31a79a1abff9709d:11' => 'Apple QuickTime, Quality 743-744 (73%)', '0233ba670d2891e75da3ce5e7664cb67:11' => 'Apple QuickTime, Quality 745 (73%)', 'a91f5f8e8d743e52169d965992c5021e:11' => 'Apple QuickTime, Quality 746 (73%)', '1a0487e7e1a8f4ade97b2e8a4cab46ec:11' => 'Apple QuickTime, Quality 747 (73%)', '5a2311c438c7183f6cd1f45c10e5783a:11' => 'Apple QuickTime, Quality 748 (73%)', '2750f3df7a97d6007d6a17f5dd27790a:11' => 'Apple QuickTime, Quality 749 (73%)', '74fddf6faaf251b28a00b4d0cd9e5621:11' => 'Apple QuickTime, Quality 750 (73%)', 'ea65bdd87f78f7507fe6098473cbe0c9:11' => 'Apple QuickTime, Quality 751 (73%)', '26d087368a13e3aca9ca13a54bcc648f:11' => 'Apple QuickTime, Quality 752-753 (73-74%)', '5664c6ca557bc75526f59bea6aebde51:11' => 'Apple QuickTime, Quality 754 (74%)', 'ff7a6007b6aab26f3c72c715ce487d72:11' => 'Apple QuickTime, Quality 755 (74%)', '912804912a3914f0b470b29495810d8c:11' => 'Apple QuickTime, Quality 756-758 (74%)', '6537be61d21f1b6ded3253fdd84f599b:11' => 'Apple QuickTime, Quality 759-760 (74%)', '72d947637340246a35ff3ee969fd613f:11' => 'Apple QuickTime, Quality 761 (74%)', '8c5c788bd53945222fc98f1a6155004c:11' => 'Apple QuickTime, Quality 762 (74%)', '9fa9c3d1041911322544aef0298695ba:11' => 'Apple QuickTime, Quality 763 (75%)', '33113dc71a90e8db06b43dadfe36b020:11' => 'Apple QuickTime, Quality 764 (75%)', '55e0cf02a898abf8e224e2e9cf6e6ca5:11' => 'Apple QuickTime, Quality 765-766 (75%)', '4f00127e7931d668a7b472c8a669925a:11' => 'Apple QuickTime, Quality 767-768 (75%)', '32aa33dc6de46b7c5c5948b0ae06cb0e:11' => 'Apple QuickTime, Quality 769 (75%)', 'a2b6067d9e5731be8029e17c00d7e043:11' => 'Apple QuickTime, Quality 770 (75%)', 'cb6bc96131c4a5f762b5e5f79e7c4b66:11' => 'Apple QuickTime, Quality 771 (75%)', 'e582a5f93f66cf34facfba5918a1d9e2:11' => 'Apple QuickTime, Quality 772 (75%)', '54ab2e8fbd7c4ecac9eba5fb02a5ccd9:11' => 'Apple QuickTime, Quality 773 (75%)', 'c71131cb485b59faf920d11982f7d454:11' => 'Apple QuickTime, Quality 774 (76%)', 'c18239304e22bd19e3c8a21f9875ba39:11' => 'Apple QuickTime, Quality 775-776 (76%)', '8278e4f14c7bf6efd2a847ef40f392e3:11' => 'Apple QuickTime, Quality 777 (76%)', '6c0e396c705a59ec610a22f11466621b:11' => 'Apple QuickTime, Quality 778 (76%)', 'a0c4d0114c04c89c879d9dc03463b347:11' => 'Apple QuickTime, Quality 779 (76%)', 'c804929d3963c7427fa143e0d1e8c94e:11' => 'Apple QuickTime, Quality 780-781 (76%)', 'e331a0dd2c53616c2881bb381fc4c1e2:11' => 'Apple QuickTime, Quality 782 (76%)', '24ec8f0996e5e8d4dd7019d2b6063290:11' => 'Apple QuickTime, Quality 783 (76%)', '36e9cb02d3ef245a3e15272c5071b0ee:11' => 'Apple QuickTime, Quality 784 (77%)', 'b691578c1d6b16687fe2df12843d0642:11' => 'Apple QuickTime, Quality 785-786 (77%)', 'ecbf939a145939d5aa48fc3c9e19cfe8:11' => 'Apple QuickTime, Quality 787 (77%)', '9440b11ee5eb970a3ea6de9353099761:11' => 'Apple QuickTime, Quality 788 (77%)', '282914c43bab6e5c62f3caaf549f1510:11' => 'Apple QuickTime, Quality 789-790 (77%)', '040c8ed8b19485d8677b964b03bc9929:11' => 'Apple QuickTime, Quality 791-792 (77%)', 'd9e503dc2dd4f6493be988ecb0f44f2c:11' => 'Apple QuickTime, Quality 793-795 (77-78%)', '64d056c9e5e558d6c04d07d9d21aa7a3:11' => 'Apple QuickTime, Quality 796-798 (78%)', '498f446de17202060a4752434df1ed7b:11' => 'Apple QuickTime, Quality 799 (78%)', '5519e1c07692f51d0ee421ede78fb907:11' => 'Apple QuickTime, Quality 800 (78%)', '511c5bddc18566a2544732291920caf3:11' => 'Apple QuickTime, Quality 801 (78%)', '659f7466f80a8034f74a00ba07b8c3fb:11' => 'Apple QuickTime, Quality 802-804 (78-79%)', 'fb64b35fe4021c34f16cf5bb1e59c0e8:11' => 'Apple QuickTime, Quality 805 (79%)', '54fcb6649f5ba51c32c68970797e41ea:11' => 'Apple QuickTime, Quality 806-807 (79%)', '80ef22ca4475af1bbb8963ac511144d7:11' => 'Apple QuickTime, Quality 808 (79%)', 'ccdf1a403ec068ad21ee78686a86dd10:11' => 'Apple QuickTime, Quality 809 (79%)', '1487f0cfc64949393aee2eab71b6b72c:11' => 'Apple QuickTime, Quality 810 (79%)', 'a8be3b3791e958d092b3e37286802e0c:11' => 'Apple QuickTime, Quality 811-813 (79%)', 'f9176b3ef0b4038c6c52b30ba033eb7f:11' => 'Apple QuickTime, Quality 814 (79%)', '60264e35250325032bf7866ca8beaf58:11' => 'Apple QuickTime, Quality 815 (80%)', '5efe038d405e029badcea4c8ee2bfc88:11' => 'Apple QuickTime, Quality 816 (80%)', '717cbe19ae1dc9f72c86ef518aefea16:11' => 'Apple QuickTime, Quality 817 (80%)', '9f490145dcc00db3e57014d41d2f99f2:11' => 'Apple QuickTime, Quality 818 (80%)', '120b93a6ab4a1e8c78578e86e3ef837f:11' => 'Apple QuickTime, Quality 819 (80%)', '9d765f3947408b2c6f26163d7b072895:11' => 'Apple QuickTime, Quality 820 (80%)', 'a9c018e06868989776a81650300bcfce:11' => 'Apple QuickTime, Quality 821 (80%)', '2c6581e20fa5393b3dd4d58f0df01957:11' => 'Apple QuickTime, Quality 822-824 (80%)', '925b6581f0ae2f288530b00168152b80:11' => 'Apple QuickTime, Quality 825 (81%)', 'c94e09eec2df4a41b2806c23d9939cb6:11' => 'Apple QuickTime, Quality 826 (81%)', '68d5ce8ce1a9e337ee9630dadad0650e:11' => 'Apple QuickTime, Quality 827-829 (81%)', 'f73704219e174961963f0fcd832b09a8:11' => 'Apple QuickTime, Quality 830-832 (81%)', 'b783df92ec8a787b1eae4e05888b184b:11' => 'Apple QuickTime, Quality 833-834 (81%)', '55cd2cad99821382b1bd78355980b1d1:11' => 'Apple QuickTime, Quality 835 (82%)', '9ebd96ea70c2bcf4f377a175c71baf2c:11' => 'Apple QuickTime, Quality 836 (82%)', '12d303b2e6a467b4f20a34e695f9da7e:11' => 'Apple QuickTime, Quality 837 (82%)', '8711d6e1c56049c0e643bc6cf19a735c:11' => 'Apple QuickTime, Quality 838-839 (82%)', '88558d6e9a513ff713945bd60ed19cc7:11' => 'Apple QuickTime, Quality 840 (82%)', '25b45d6c1668613a61b81c6b60fa158a:11' => 'Apple QuickTime, Quality 841 (82%)', 'b2f95d6a0eec4de39e0964a3b7303e9f:11' => 'Apple QuickTime, Quality 842 (82%)', '631548841b70e871ee16009737dd4b9c:11' => 'Apple QuickTime, Quality 843-844 (82%)', '7fac641c5b795e68ca8cfae4466a19c7:11' => 'Apple QuickTime, Quality 845 (83%)', 'a15a74418a924874c5f3d2ca20e7af90:11' => 'Apple QuickTime, Quality 846-849 (83%)', 'e4d76c3cd4d36b72537a2234a3597933:11' => 'Apple QuickTime, Quality 850 (83%)', '36f1ec430bae8e5c72af6388e2a4d807:11' => 'Apple QuickTime, Quality 851-852 (83%)', 'b558f097ed59f547d2b370a73145caf9:11' => 'Apple QuickTime, Quality 853 (83%)', 'ceecacb651d0e01e9b1c78cde2d7835a:11' => 'Apple QuickTime, Quality 854 (83%)', '82a9cce34fb9c7c3c0ab908533a9a9bf:11' => 'Apple QuickTime, Quality 855-856 (83-84%)', 'e93244fdb14bb27a2c30ee133b3e9f5e:11' => 'Apple QuickTime, Quality 857 (84%)', '7a12ccd01bfdd2cf3b8ee2df498b8ae0:11' => 'Apple QuickTime, Quality 858 (84%)', 'd0d6f781130c0fecd985df78c15c5c16:11' => 'Apple QuickTime, Quality 859-860 (84%)', '1c19e4fde384a33f208074c73775d990:11' => 'Apple QuickTime, Quality 861-863 (84%)', '8fb281fcf4d481e59e1c15ed51ef8f19:11' => 'Apple QuickTime, Quality 864 (84%)', 'c3f615274e58eb887a2aa75acad436ff:11' => 'Apple QuickTime, Quality 865 (84%)', '9146c5df73615b0f2a470521bab7e4c4:11' => 'Apple QuickTime, Quality 866 (85%)', 'ac2d99dd3ff609760c207419312e7b30:11' => 'Apple QuickTime, Quality 867 (85%)', '7c7d225760bce3b4e479aca8bcd2b850:11' => 'Apple QuickTime, Quality 868 (85%)', '9da4a7e310cb44578b009e78458d3b19:11' => 'Apple QuickTime, Quality 869 (85%)', '1ae782c12797f5e5c9b083099148e43a:11' => 'Apple QuickTime, Quality 870 (85%)', '193ace8d9e274bb9188b1a9a7bdee777:11' => 'Apple QuickTime, Quality 871-872 (85%)', '9160a8eeb898a05dcb02206603a45a65:11' => 'Apple QuickTime, Quality 873-877 (85-86%)', '0443da2c934e95fca0df8a0a1433eea4:11' => 'Apple QuickTime, Quality 878-880 (86%)', 'fa99ff1ecc29c5caa95fa62189fca670:11' => 'Apple QuickTime, Quality 881-886 (86-87%)', 'd9a914baea5468bb52c09d1d0b5bd131:11' => 'Apple QuickTime, Quality 887 (87%)', '6c0ac535ec30285b609e0b8ca18e4dc0:11' => 'Apple QuickTime, Quality 888-890 (87%)', 'dffb0a244fa54783569693edf84d1cda:11' => 'Apple QuickTime, Quality 891-893 (87%)', '507b49a59dce17c02dc16fcb329352eb:11' => 'Apple QuickTime, Quality 894 (87%)', 'dd757185a44c3d6222e9d16a0c2ee890:11' => 'Apple QuickTime, Quality 895 (87%)', 'f3526abe33de71ad0eb728c9d446b545:11' => 'Apple QuickTime, Quality 896 (88%)', '34466385e7bf9b2708adf19be1eb3c2d:11' => 'Apple QuickTime, Quality 897-898 (88%)', 'e43438348a912a2210261472d1a747ab:11' => 'Apple QuickTime, Quality 899 (88%)', '184d01e77f6239f63fd6ab6d36761e64:11' => 'Apple QuickTime, Quality 900-901 (88%)', '26005cdf9397dcce883660aeecb0426b:11' => 'Apple QuickTime, Quality 902 (88%)', '09321d810a54503da7ad7b8e883227ea:11' => 'Apple QuickTime, Quality 903 (88%)', 'd6438ea5a93b6d4d0ba26de7c56f2634:11' => 'Apple QuickTime, Quality 904-905 (88%)', 'ddc90333cb2279aa533a339710bd81ef:11' => 'Apple QuickTime, Quality 906 (88%)', '14a352b80a350e2df6b2bc444ccc74f6:11' => 'Apple QuickTime, Quality 907-908 (89%)', '91a7f0747ed633f481918a83b1a7c77c:11' => 'Apple QuickTime, Quality 909-914 (89%)', 'a3bb9728b3dfa7002364659db0c420fc:11' => 'Apple QuickTime, Quality 915-917 (89-90%)', '9df94f927ffc1f3345923232691fab3b:11' => 'Apple QuickTime, Quality 918-920 (90%)', '259764d950c1f1e399cdb27e159c8985:11' => 'Apple QuickTime, Quality 921-922 (90%)', '73313d816524749545292ed2284c804c:11' => 'Apple QuickTime, Quality 923-924 (90%)', '449ed4370a849e0f736b57ee7ccab942:11' => 'Apple QuickTime, Quality 925-926 (90%)', 'bd1f81bd50cf9859eb0ae6d2dbf75d09:11' => 'Apple QuickTime, Quality 927 (91%)', '820db98d1ee91bb648e7a05498a340b0:11' => 'Apple QuickTime, Quality 928 (91%)', '93c1ba0af1f50d889cb5e2364be3a056:11' => 'Apple QuickTime, Quality 929 (91%)', 'cc96e1c8906353c4023bc7e6b72bb684:11' => 'Apple QuickTime, Quality 930 (91%)', 'eb728dc3105ddb5a0597384b54ed948c:11' => 'Apple QuickTime, Quality 931 (91%)', 'dc0278d78fa5c8daf84f8c2672f582c6:11' => 'Apple QuickTime, Quality 932-933 (91%)', '1a603cba63dbba0d0815fc7319271b93:11' => 'Apple QuickTime, Quality 934-936 (91%)', '3d8f4957eab9756993a78efe08ba3798:11' => 'Apple QuickTime, Quality 937-938 (92%)', 'cef5a49e1834c316a4a9e7dca8d69157:11' => 'Apple QuickTime, Quality 939 (92%)', 'ca21386b17f3866a235fca4b6e72b124:11' => 'Apple QuickTime, Quality 940 (92%)', 'ec662935c494c5abd6f6c907f77be65c:11' => 'Apple QuickTime, Quality 941-943 (92%)', '190a54eb1127ee87231795bc3d661b5a:11' => 'Apple QuickTime, Quality 944-946 (92%)', 'e78229129afca214a07ad978262c545e:11' => 'Apple QuickTime, Quality 947-951 (92-93%)', 'c31cb63954b137b62c5fe35379235e2e:11' => 'Apple QuickTime, Quality 952-954 (93%)', '25ca43baa972ad9c82128606cd383805:11' => 'Apple QuickTime, Quality 955 (93%)', '334c67d739adf957d1620201cb7a521c:11' => 'Apple QuickTime, Quality 956-957 (93-93%)', '29c42d951dc84d62bd134bec71bf731b:11' => 'Apple QuickTime, Quality 958 (94%)', 'fa6f80883480ab3ddea8ee2f6796a14b:11' => 'Apple QuickTime, Quality 959-961 (94%)', 'e40f6a9a3daf4bfc42aedcb9107076ea:11' => 'Apple QuickTime, Quality 962 (94%)', 'd26a06f6114d83714e3b64b6dbe97e6f:11' => 'Apple QuickTime, Quality 963-967 (94%)', 'c40848be9d1d1018747630cdac2d7294:11' => 'Apple QuickTime, Quality 968-970 (95%)', 'ab2b6d0624f294bf4e53e34208caeaa6:11' => 'Apple QuickTime, Quality 971 (95%)', 'b6ea2f838fa1942a21e41f6bba417782:11' => 'Apple QuickTime, Quality 972-973 (95%)', 'ff765e75c06c9db34f66ae7ee0202d05:11' => 'Apple QuickTime, Quality 974 (95%)', 'c33573208ef877f1bc9a64f595e00c4d:11' => 'Apple QuickTime, Quality 975-977 (95%)', '6528da6df208ce35fd84dccabc81d4da:11' => 'Apple QuickTime, Quality 978-979 (96%)', '420d094d00a4a8aec94c5667254d2053:11' => 'Apple QuickTime, Quality 980-984 (96%)', '427271dd1e2a3d7a7ce54af73d9e6c77:11' => 'Apple QuickTime, Quality 985-987 (96%)', '99589fb7d66a29f15d9ff0f37235e7a2:11' => 'Apple QuickTime, Quality 988-991 (96-97%)', '98fddd9e5862e06385b46a016597c02f:11' => 'Apple QuickTime, Quality 992-993 (97%)', '381d1ca1d61986f28cfd6da0fca348da:11' => 'Apple QuickTime, Quality 994-996 (97%)', '11a232fa9de634fadde1869007baab9c:11' => 'Apple QuickTime, Quality 997-998 (97%)', '02374d6405239e8fe5ab939b92f4fd03:11' => 'Apple QuickTime, Quality 999-1000 (98%)', 'f91cfb708c99c2fef0f7148976514f44:11' => 'Apple QuickTime, Quality 1001-1002 (98%)', '83f3452abc7906930b228c29a4320089:11' => 'Apple QuickTime, Quality 1003 (98%)', '4379016ba81dc331ffd5f9a8ab5b6399:11' => 'Apple QuickTime, Quality 1004 (98%)', 'e2cccecebc01c7d8a4fca2dab682ba8f:11' => 'Apple QuickTime, Quality 1005-1009 (98-99%)', '8d4b2a14a176d63e509684aa4246dabb:11' => 'Apple QuickTime, Quality 1010-1013 (99%)', '40a7c1d8f58612f4470c2531768d93b5:11' => 'Apple QuickTime, Quality 1014-1016 (99%)', '8392742f8f5971ed08c7520d0e9c81f3:11' => 'Apple QuickTime, Quality 1017 (99%)', '14040c7711b6fa62383da3edc9ade1b7:11' => 'Apple QuickTime, Quality 1018-1020 (99-100%)', '22ccf9c976b36da34f48385a09b1951b:11' => 'Apple QuickTime, Quality 1021-1023 (100%)', '4aa632db3be6b6e85565c1fe66cb22d1:11' => 'Apple QuickTime, Quality 1024 (lossless)', # Apple Aperture 2.1.3 (ref 2) '60cb2afa0cfa7395635a9360fc690b46:221111' => 'Apple Aperture Quality 0', '6b9be09d6ec6491a20c2827dbeb678c0:221111' => 'Apple Aperture Quality 1', 'dbb17a02e661f2475411fc1dc37902ef:221111' => 'Apple Aperture Quality 2', '8a5df2b5337bf8251c3f66f6adbb5262:221111' => 'Apple Aperture Quality 3', '3841f0f3be30520a1a57f41c449588ee:221111' => 'Apple Aperture Quality 4', '2b1dba266c728a9f46d06e6e5c247953:221111' => 'Apple Aperture Quality 5', # 'Independent JPEG Group library (used by many applications), Quality 91' => 'Apple Aperture Quality 6', '93818f3a0e6d491500cb62e1f683da22:221111' => 'Apple Aperture Quality 7', '8c0c36696a99fd889e0f0c7d64824f3c:221111' => 'Apple Aperture Quality 8', '043645382c79035b6f2afc62d373a37f:221111' => 'Apple Aperture Quality 9', '558d017ce6d5b5282ce76727fe99b91e:221111' => 'Apple Aperture Quality 10', '0b52b82694040193aee10e8074cd7ad5:221111' => 'Apple Aperture Quality 11', # 'Independent JPEG Group library (used by many applications), Quality 100' => 'Apple Aperture Quality 12', # Tested with Corel Paint Shop Pro PHOTO X2 (Win) - Different subsamplings possible '1c78c0daaa0bbfd4a1678b5569b0fa13' => 'Corel Paint Shop Pro PHOTO, Quality 1', '5ffdd2e918ec293efc79083703737290' => 'Corel Paint Shop Pro PHOTO, Quality 2', '4ed4751d772933938600c4e7560bf19c' => 'Corel Paint Shop Pro PHOTO, Quality 3', 'f647f0fb4320c61f52e2a79d12bbc8cc' => 'Corel Paint Shop Pro PHOTO, Quality 4', '6194167174dfcb4a769cf26f5c7a018d' => 'Corel Paint Shop Pro PHOTO, Quality 5', '6120ded86d4cc42cd7ca2131b1f51fad' => 'Corel Paint Shop Pro PHOTO, Quality 6', 'c07a6430e56ef16a0526673398e87ac6' => 'Corel Paint Shop Pro PHOTO, Quality 7', '507cc511e561916efa3b49228ffc8c9a' => 'Corel Paint Shop Pro PHOTO, Quality 8', '612941a50f2c0992938bc13106caf228' => 'Corel Paint Shop Pro PHOTO, Quality 9', '7624f08396d811fdb6f1ead575e67e58' => 'Corel Paint Shop Pro PHOTO, Quality 10', 'e215df38e258b3d8bceb57aa64388d26' => 'Corel Paint Shop Pro PHOTO, Quality 11', '78f66ee0bc442950808e25daa02a2b02' => 'Corel Paint Shop Pro PHOTO, Quality 12', '14efb0bb5124910a37bcbd5f06de9aa9' => 'Corel Paint Shop Pro PHOTO, Quality 13', 'd61168238621bd221ef1eb3dcbe270a3' => 'Corel Paint Shop Pro PHOTO, Quality 14', 'e2d2755891b4e4bc5f7c8d76dcbb0d53' => 'Corel Paint Shop Pro PHOTO, Quality 15', 'f6c4502144a2e5c82c07994d3cd01665' => 'Corel Paint Shop Pro PHOTO, Quality 16', '78801638505e95827c2f7cc0c7ef78f4' => 'Corel Paint Shop Pro PHOTO, Quality 17', 'e8ff3d165b4c028c18ec8a8f940a12a1' => 'Corel Paint Shop Pro PHOTO, Quality 18', '984c359b9fbcc4d6f805946aa23ae708' => 'Corel Paint Shop Pro PHOTO, Quality 19', 'd1dc48d911055bc533779d6e086f7242' => 'Corel Paint Shop Pro PHOTO, Quality 20', 'd7437a18e86ac2832d73204acd82aa89' => 'Corel Paint Shop Pro PHOTO, Quality 21', 'bceaee6c1a150006b3643de6942ccfa3' => 'Corel Paint Shop Pro PHOTO, Quality 22', 'c448e6817efa9acdad225e60ed0013f9' => 'Corel Paint Shop Pro PHOTO, Quality 23', '904f231c98f390400ba7ae17c252813f' => 'Corel Paint Shop Pro PHOTO, Quality 24', 'ccd6708ca1dbd66a23d40cee635a0f76' => 'Corel Paint Shop Pro PHOTO, Quality 25', '10d87624d888b75b29e156be8dad35f4' => 'Corel Paint Shop Pro PHOTO, Quality 26', '8558c6d41f03db192198dceefbd1e89b' => 'Corel Paint Shop Pro PHOTO, Quality 27', '058fc759cff9d615f91d9ffb4b46436a' => 'Corel Paint Shop Pro PHOTO, Quality 28', '5c606e0f7168a78fd8d0c91646c801a3' => 'Corel Paint Shop Pro PHOTO, Quality 29', 'e9555e593a6fd9aeee399de16080cd61' => 'Corel Paint Shop Pro PHOTO, Quality 30', '2c2726484978a15d3d756d43b0baa290' => 'Corel Paint Shop Pro PHOTO, Quality 31', '8b1d11d31bc9445278cf9af55b0c156b' => 'Corel Paint Shop Pro PHOTO, Quality 32', 'aa4a5528ae18ecd36ec052014b91f651' => 'Corel Paint Shop Pro PHOTO, Quality 33', '9a26194b114b7db253601ff80b03da9a' => 'Corel Paint Shop Pro PHOTO, Quality 34', '3fa780a3dff1d787f7d883585a46dcfb' => 'Corel Paint Shop Pro PHOTO, Quality 35', '0a899361ed0d51e224dc535ceb02f9a1' => 'Corel Paint Shop Pro PHOTO, Quality 36', '3a2ab96a6ad9612e1377ddc822f02ddd' => 'Corel Paint Shop Pro PHOTO, Quality 37', '315f4faadd967e72d730155091c4912f' => 'Corel Paint Shop Pro PHOTO, Quality 38', '5f6e3a66672d6e4c41b1689996ca57d3' => 'Corel Paint Shop Pro PHOTO, Quality 39', '9503a86793e86d1fca3d8797548fa243' => 'Corel Paint Shop Pro PHOTO, Quality 40', '3b95f11bd77cb8af977c09d5851131f8' => 'Corel Paint Shop Pro PHOTO, Quality 41', 'ececf8dfa473110534b506db58d98f15' => 'Corel Paint Shop Pro PHOTO, Quality 42', 'cfe3144d4f8048a0507269a9d8a85993' => 'Corel Paint Shop Pro PHOTO, Quality 43', 'eb9d48d135b2c61c51fc3f23b0001b4d' => 'Corel Paint Shop Pro PHOTO, Quality 44', 'b08313a6919d308e50b806f138a8a2a1' => 'Corel Paint Shop Pro PHOTO, Quality 45', '7c34e6e7fe2cc760fa5c3ed812a8b74c' => 'Corel Paint Shop Pro PHOTO, Quality 46', '90ece7123e8d614d9aab55eaba6dd7da' => 'Corel Paint Shop Pro PHOTO, Quality 47', '6d79fe623c4c5320bdbe4d3026f4e71a' => 'Corel Paint Shop Pro PHOTO, Quality 48', 'a7e85552c3e5e40288891d225f308590' => 'Corel Paint Shop Pro PHOTO, Quality 49', '67b9a678d9f669167c5b4bf12422ad50' => 'Corel Paint Shop Pro PHOTO, Quality 50', '1fab112b17e94f53e94a9208e9091b7b' => 'Corel Paint Shop Pro PHOTO, Quality 51', '4971237e046795a030a99a0e8d2c5acb' => 'Corel Paint Shop Pro PHOTO, Quality 52', 'f3e1672b93ff159231c51b1b157e45fd' => 'Corel Paint Shop Pro PHOTO, Quality 53', '6e9cfb8131373c3d1873e3f497e46b64' => 'Corel Paint Shop Pro PHOTO, Quality 54', '9155c8acf8322e8af898272c694fa1d6' => 'Corel Paint Shop Pro PHOTO, Quality 55', '52b20edc779f206f2aed50610971f181' => 'Corel Paint Shop Pro PHOTO, Quality 56', 'ad801813f822ef9774801ab4d9145a61' => 'Corel Paint Shop Pro PHOTO, Quality 57', '07259679e2a842478df97c7f0ddd4df3' => 'Corel Paint Shop Pro PHOTO, Quality 58', '67db25c57803c34b065736f46f6afadb' => 'Corel Paint Shop Pro PHOTO, Quality 59', 'c7498fc4b3802b290a452631dd1e1b63' => 'Corel Paint Shop Pro PHOTO, Quality 60', '3f7b04c7952f96d2624813ed9896f128' => 'Corel Paint Shop Pro PHOTO, Quality 61', 'd5ec901d20f3887007d0f4cfb7d1460d' => 'Corel Paint Shop Pro PHOTO, Quality 62', '61bb38e23040b6a8b0e8721e6d6eff66' => 'Corel Paint Shop Pro PHOTO, Quality 63', '48fac53d9d168eab3ce9b6edc4b9fcb1' => 'Corel Paint Shop Pro PHOTO, Quality 64', '8cb101a5ae986e45cc31a9e19a35535d' => 'Corel Paint Shop Pro PHOTO, Quality 65', '0e08dc629e883530cb2ae78c90f125b3' => 'Corel Paint Shop Pro PHOTO, Quality 66', '5134762d2d4baac8711a52e76730591c' => 'Corel Paint Shop Pro PHOTO, Quality 67', '14b57dc6d5381fd0a743c7bd8b28bed1' => 'Corel Paint Shop Pro PHOTO, Quality 68', '9d398f1b1f40b7aaec1bd9cdb6922530' => 'Corel Paint Shop Pro PHOTO, Quality 69', 'c7e68d88bee5c2ee4b61a11bc2e68c80' => 'Corel Paint Shop Pro PHOTO, Quality 70', '917fe67f6ded5decac1820642239622c' => 'Corel Paint Shop Pro PHOTO, Quality 71', '362c3e0c08f6951018cde7b412cd513f' => 'Corel Paint Shop Pro PHOTO, Quality 72', 'd91cd4a2dcd1a29e6ef652ebcfdd58d7' => 'Corel Paint Shop Pro PHOTO, Quality 73', '11f5fbd5e74e5c5e305b95dbbc4356a8' => 'Corel Paint Shop Pro PHOTO, Quality 74', 'bf010771f909049fc5fceedcaa0f917c' => 'Corel Paint Shop Pro PHOTO, Quality 75', 'a455a3149812ba6951a016ee6114f9da' => 'Corel Paint Shop Pro PHOTO, Quality 76', '42e0c4082ec4d026c77d19a053a983f4' => 'Corel Paint Shop Pro PHOTO, Quality 77', '326bd5938e2db7de9250a9fb0efc6692' => 'Corel Paint Shop Pro PHOTO, Quality 78', 'a3e2cc4ea95cda49501bc73c494e9420' => 'Corel Paint Shop Pro PHOTO, Quality 79', '8c89043f00678bb5c68ee90390c1b43b' => 'Corel Paint Shop Pro PHOTO, Quality 80', 'fc5812ad9a4cd0122eb1c63f0ac3b5a3' => 'Corel Paint Shop Pro PHOTO, Quality 81', '84dbe33962674aab86e03681ac3bd35f' => 'Corel Paint Shop Pro PHOTO, Quality 82', 'b6b80a78472dca05c9135702e96fdad9' => 'Corel Paint Shop Pro PHOTO, Quality 83', '01f997907a4c1dfd1e6b00aca9ff5d80' => 'Corel Paint Shop Pro PHOTO, Quality 84', '8431e86434062b325c519fd836353cd0' => 'Corel Paint Shop Pro PHOTO, Quality 85', '15f375a620952738ff21ff4aa496b8f7' => 'Corel Paint Shop Pro PHOTO, Quality 86', '7b0f02aa96271376d3f81658d98fb1df' => 'Corel Paint Shop Pro PHOTO, Quality 87', '86e7666b05bd1fc130fbf4b48f854288' => 'Corel Paint Shop Pro PHOTO, Quality 88', '6af05d547e8911fe2d1f2b4d968a477e' => 'Corel Paint Shop Pro PHOTO, Quality 89', '8baa876790518bf509dd09093759331d' => 'Corel Paint Shop Pro PHOTO, Quality 90', 'eb7d90d291044d1bd8f40ca1b3ce0ddf' => 'Corel Paint Shop Pro PHOTO, Quality 91', '6f338385a8f2cd2dd3420a4f6138a206' => 'Corel Paint Shop Pro PHOTO, Quality 92', 'b0a0fd1ec2dd366ad00d3e83d6dedec2' => 'Corel Paint Shop Pro PHOTO, Quality 93', 'e09026128c9880b44ac71224f477cd3b' => 'Corel Paint Shop Pro PHOTO, Quality 94', 'd0a8f50ff547da69a57eeb892e194cff' => 'Corel Paint Shop Pro PHOTO, Quality 95', '7849ba902d96273b5ac7b6eb98f4d009' => 'Corel Paint Shop Pro PHOTO, Quality 96', '379f9f196d4190298a732ab9a7031001' => 'Corel Paint Shop Pro PHOTO, Quality 97', 'c3d1601f84ec3adfbc8ca17883ef6378' => 'Corel Paint Shop Pro PHOTO, Quality 98', '1f5e87bec674bdd7dff166c2ea9ca004' => 'Corel Paint Shop Pro PHOTO, Quality 99', # Tested with FixFoto Version 2.90 Build 136 (Win) - different subsamplings possible '866dd04cb0fe2e00cda7395162480117' => 'FixFoto, Quality 0 or 1', '1e400ba25fa835e2771772bbfb15b94b' => 'FixFoto, Quality 2', '302ff1ad1a50d0f01a82cc88f286c649' => 'FixFoto, Quality 3', '1343a117f5fab26d556a3e7558366591' => 'FixFoto, Quality 4', '8fbb8cc5368224625689df80bf4d2a04' => 'FixFoto, Quality 5', 'a371d1ffc8d85d502854a356f3b0ea74' => 'FixFoto, Quality 6', 'a9a0a5000cd6fb322960a4c45cf1d032' => 'FixFoto, Quality 7', 'aaac84043224d33e1d3a1723b653b0cd' => 'FixFoto, Quality 8', '701e4820f6d0b68e67b6a2b90a7baa0c' => 'FixFoto, Quality 9', '877d03a5abf5b6c4ad03c39afd97f4a2' => 'FixFoto, Quality 10', 'b3d9bdc2090200537fb42f4d69631150' => 'FixFoto, Quality 11', '3cf156d54120b53057f56e9f38ee2896' => 'FixFoto, Quality 12', '69fe5c29b9d5e4c823f8a082ab7b3285' => 'FixFoto, Quality 13', 'cf8573af40ced1793dcbc2346f969240' => 'FixFoto, Quality 14', '22944c3bc03d6adea8d6819f914452c3' => 'FixFoto, Quality 15', 'd768df38fb51c4b9977e5d7185f97a6c' => 'FixFoto, Quality 16', '7ef2cd2b66d51fe80d94d5db427ee9ef' => 'FixFoto, Quality 17', 'ed3d3b9ff9faf0009e44b9803f6295d7' => 'FixFoto, Quality 18', '70a0b15e2e5f97e0a9333a2011afe5cd' => 'FixFoto, Quality 19', 'd798b707a6b83eb54664abe0833b46aa' => 'FixFoto, Quality 20', 'bf68d1866b75cea8f99cf2fc46f9d686' => 'FixFoto, Quality 21', 'b98b8adb8f1f78b65800efe6c329ceab' => 'FixFoto, Quality 22', 'c063344185079018af9fcf161a3fdf98' => 'FixFoto, Quality 23', # Tested with Nikon Capture NX Version 2.0.0 (Win) '0ef9d9f62ab68807eedf6cb8c2ec120b:221111' => 'Nikon Capture NX, Quality 0', 'efbc50df45bc1d1fbbbd29c3e5de04b2:221111' => 'Nikon Capture NX, Quality 1', 'cbde745c78fd546d6e83dd7512ebe863:221111' => 'Nikon Capture NX, Quality 2', '33731f743fc28e9d81e542f0ed7cdfba:221111' => 'Nikon Capture NX, Quality 3', '866fcb1296d7da02b4ad31afb242f25f:221111' => 'Nikon Capture NX, Quality 4', 'cfbe44397240092d3a67241a23342528:221111' => 'Nikon Capture NX, Quality 5', 'a4b8b3408ae302ae81f125e972901131:221111' => 'Nikon Capture NX, Quality 6', '3a6cefd4f43c513fdf0858f26afeab5a:221111' => 'Nikon Capture NX, Quality 7', '1e861ce223babf95bc795e18cbdb49d1:221111' => 'Nikon Capture NX, Quality 8', '4d5b512d8bc173f14e6a3cf8574f670a:221111' => 'Nikon Capture NX, Quality 9', '9b1e6d379d3030dfa313bcaedc1ef3c7:221111' => 'Nikon Capture NX, Quality 10', 'e39b60fcecf3221d14c62dc13ddf4726:221111' => 'Nikon Capture NX, Quality 11', '3654bbf4a45e0c0758a82a075b3f77cc:221111' => 'Nikon Capture NX, Quality 12', '4f5889173779409ec604622a1894ab4a:221111' => 'Nikon Capture NX, Quality 13', '738685b86b80ff0e8b562102d1b58f71:221111' => 'Nikon Capture NX, Quality 14', '48a53035374c08e6490893d8113ed6b3:221111' => 'Nikon Capture NX, Quality 15', '03651ac1d15043f77949a63ac3762584:221111' => 'Nikon Capture NX, Quality 16', '27811b28d02bd417857904f0a9e1ed58:221111' => 'Nikon Capture NX, Quality 17', '03201bd5642a451d99b99bfd10fc42df:221111' => 'Nikon Capture NX, Quality 18', '67d5eb5f55c9a5baa0a67d42a841d77b:221111' => 'Nikon Capture NX, Quality 19', '18392b08bf8cf788a579f376297c3334:221111' => 'Nikon Capture NX, Quality 20', 'de0c784b75953851dc370f4daecfa1a9:221111' => 'Nikon Capture NX, Quality 21', '75f260644b87a9779188126da8709e7f:221111' => 'Nikon Capture NX, Quality 22', 'c44701e8185306f5e6d09be16a2b0fbd:221111' => 'Nikon Capture NX, Quality 23', '086e5ce1149e14efd9e424956734fe05:221111' => 'Nikon Capture NX, Quality 24', 'aad1109d9c49b8170feac125148b2a50:221111' => 'Nikon Capture NX, Quality 25', 'c97965ce5392623f668a386b30e41cee:221111' => 'Nikon Capture NX, Quality 26', 'd9dadfb6f0a25765abe00e69857c5520:221111' => 'Nikon Capture NX, Quality 27', '0ee9ca02a1fe8a17b6e50a2e86d19a7c:221111' => 'Nikon Capture NX, Quality 28', '88b1726a20759f29eecfa2b129773127:221111' => 'Nikon Capture NX, Quality 29', '70a311935ed066da954897fad5079377:221111' => 'Nikon Capture NX, Quality 30', 'aa2d374bbab2a30e00c1863264588a42:221111' => 'Nikon Capture NX, Quality 31', '097b684846696b3a8bbdf2bd2f9ded9c:221111' => 'Nikon Capture NX, Quality 32', 'bb313d5398065376c7765092fc8ea0f0:221111' => 'Nikon Capture NX, Quality 33', 'aa049fdc1387851a664143df0408f55c:221111' => 'Nikon Capture NX, Quality 34', '087c1c1a368adc82900d83235f432d3f:221111' => 'Nikon Capture NX, Quality 35', '7dec6568dbad7a70622c994a326957e2:221111' => 'Nikon Capture NX, Quality 36', 'd2e14d8ba7d38f7544b569eea7221255:221111' => 'Nikon Capture NX, Quality 37', 'ce6bcb98c5f9358594f5934e64b4ecc3:221111' => 'Nikon Capture NX, Quality 38', '4785aafc8471873402819e423b8969a9:221111' => 'Nikon Capture NX, Quality 39', '66ae78a749b520b35d4daf4531df8ae5:221111' => 'Nikon Capture NX, Quality 40', '946d9f9346a0c65eec478945ad3d6143:221111' => 'Nikon Capture NX, Quality 41', 'f46e96afa026233c1662c9114feb61e9:221111' => 'Nikon Capture NX, Quality 42', '96a267e050b6d8a13439f8a9bb89722c:221111' => 'Nikon Capture NX, Quality 43', '27c301566e155f700b01906a43473ffe:221111' => 'Nikon Capture NX, Quality 44', 'ceff136f6dd88242500bfd639cb0c003:221111' => 'Nikon Capture NX, Quality 45', '939b804eefc95158a934bb48e3f3b545:221111' => 'Nikon Capture NX, Quality 46', '06186292fe0ccaaeb5999319a366c4b4:221111' => 'Nikon Capture NX, Quality 47', 'e456c998dc126c1efad013eb7b0186c1:221111' => 'Nikon Capture NX, Quality 48', 'ef0cd1902fb1afe284468a67eaffd078:221111' => 'Nikon Capture NX, Quality 49', 'f4693035f8db19e0788f41255c3c052e:221111' => 'Nikon Capture NX, Quality 50', '40c6f2886cdca8f19a654ce321ea993e:221111' => 'Nikon Capture NX, Quality 51', 'e9387b4065bba8570375d6535ab2124b:221111' => 'Nikon Capture NX, Quality 52', 'f3a55e422a4ab829b2c1f5a1784ce9f6:221111' => 'Nikon Capture NX, Quality 53', '2fff3c6e48247992d1543d9e5c679759:221111' => 'Nikon Capture NX, Quality 54', '5a1849b49122ff09949f1d355b4f9eaa:221111' => 'Nikon Capture NX, Quality 55', 'a582968bb1890620ffbae916ebafcb64:221111' => 'Nikon Capture NX, Quality 56', '81597eb992e32e186d2b5565bbe4ae3a:221111' => 'Nikon Capture NX, Quality 57', '7364416ce4f2a9282efdbe052574527b:221111' => 'Nikon Capture NX, Quality 58', '5301c2bcae09fd4305e47ffc56b2c8a7:221111' => 'Nikon Capture NX, Quality 59', '5a1849b49122ff09949f1d355b4f9eaa:211111' => 'Nikon Capture NX, Quality 60', '9be2446f168941ff42d9fc7441f2429b:211111' => 'Nikon Capture NX, Quality 61', 'bbba80e58afae43278e287021d4f1499:211111' => 'Nikon Capture NX, Quality 62', '2a9ae394dc32a418960522cbe9c6df24:211111' => 'Nikon Capture NX, Quality 63', '67fbe0dce139b6db1813e30bbbceccf3:211111' => 'Nikon Capture NX, Quality 64', '17bce376f588ebf2b3e9002a337c239d:211111' => 'Nikon Capture NX, Quality 65', 'cd2c6c01d8eb8d985086b54e2269278a:211111' => 'Nikon Capture NX, Quality 66', '34b25782fc089616807bbbe7f7cd8413:211111' => 'Nikon Capture NX, Quality 67', '37b8bbab382a228eabb0dc64c0edcb0f:211111' => 'Nikon Capture NX, Quality 68', 'b163f35baed567d70aa2536695558724:211111' => 'Nikon Capture NX, Quality 69', '251eb2d7903f63b168348ec483ba499a:211111' => 'Nikon Capture NX, Quality 70', '42e7cdf33b9067a7124dd27020704f9a:211111' => 'Nikon Capture NX, Quality 71', '032678d9de74e5530896c28079f666af:211111' => 'Nikon Capture NX, Quality 72', '30d7b6db02954dfc4ce47a089d0f40d9:211111' => 'Nikon Capture NX, Quality 73', '5c1a40094128ac76eab0405dcb4ae3c7:211111' => 'Nikon Capture NX, Quality 74', '2706b8b0cf6686148e285b6d3e44dd72:211111' => 'Nikon Capture NX, Quality 75', '6ca4a27cb36f35ab84b0e2df06bb32f4:211111' => 'Nikon Capture NX, Quality 76', '6f9cae52d3f47f514f7c927314455a5a:211111' => 'Nikon Capture NX, Quality 77', 'c0204862b8aafa2c286c7b58d755c31f:211111' => 'Nikon Capture NX, Quality 78', 'd8ef40736b072f09bead5f73f5ec1372:211111' => 'Nikon Capture NX, Quality 79', '8c389c29eca238b3b331f65f7e124a27:111111' => 'Nikon Capture NX, Quality 80', '6f9cae52d3f47f514f7c927314455a5a:111111' => 'Nikon Capture NX, Quality 81', '8e1ceace8fafe31282393d8677e76994:111111' => 'Nikon Capture NX, Quality 82', '60f75a915647ed50d1724179d50a35d2:111111' => 'Nikon Capture NX, Quality 83', 'df54eb20ec90f41f1e6c37e241ee381c:111111' => 'Nikon Capture NX, Quality 84', '5522213c915e2af3ad01ee2ec27ee3ed:111111' => 'Nikon Capture NX, Quality 85', '08c063f0997262d9977df4b44e682d82:111111' => 'Nikon Capture NX, Quality 86', 'd2e34c70872ac119dda6bdeeb36bf229:111111' => 'Nikon Capture NX, Quality 87', 'e5abf48ce0cc2b4a3db7eca3a1112b7a:111111' => 'Nikon Capture NX, Quality 88', 'b69dcb672088f296323d891219464ad8:111111' => 'Nikon Capture NX, Quality 89', 'b6d1c6efb27ea721577888b5f981ad7b:111111' => 'Nikon Capture NX, Quality 90', 'b023f424f81c8cbbab20119c06163dce:111111' => 'Nikon Capture NX, Quality 91', '77f680490d08697cb0f11ff3fe76b7e8:111111' => 'Nikon Capture NX, Quality 92', '1860106097672532e7ebc2026d7f9681:111111' => 'Nikon Capture NX, Quality 93', '0c7d4861b3bee5d766a93f2d34027bfa:111111' => 'Nikon Capture NX, Quality 94', '3adf9a0b85a4000243bbf833cd8e6966:111111' => 'Nikon Capture NX, Quality 95', '9530dfffc5574606841a597212ec25b4:111111' => 'Nikon Capture NX, Quality 96', 'c7294290fe26155147072f9041705cfb:111111' => 'Nikon Capture NX, Quality 97', 'c24c44a4dadd77c15e0b4c741a2d4bd5:111111' => 'Nikon Capture NX, Quality 98', '36016cd5527c505ef3bbba8b3e22f9db:111111' => 'Nikon Capture NX, Quality 99', 'c9309ab058680151be5f97e6c54dc687:111111' => 'Nikon Capture NX, Quality 100', # Tested with ACDsee PhotoEditor 4.0.208c-de (Win) '2ab2f6a116ca6fc0bbf188b19b9de967' => 'ACD Systems Digital Imaging, Quality 0 or 1', 'f4f9d5c07c78e8700a6f3def0782a18e' => 'ACD Systems Digital Imaging, Quality 2', '66fc410ab8f71a7fdef86fd70b742dc1' => 'ACD Systems Digital Imaging, Quality 3', '8e763b5b9255df1f4cb7b9732e99c210' => 'ACD Systems Digital Imaging, Quality 4', 'fd3eed19f6667ab0bedfa3263390ce25' => 'ACD Systems Digital Imaging, Quality 5 or 6', 'dc0dc92085037072e27247f64af0f22d' => 'ACD Systems Digital Imaging, Quality 7', '233ed690eb7e9008c20ed16e79aa3eb5' => 'ACD Systems Digital Imaging, Quality 8', '684649f6c1590f5a912a827a6d8bfc6b' => 'ACD Systems Digital Imaging, Quality 9', 'ed6aec096e8776b483b2c2b3d7e15d76' => 'ACD Systems Digital Imaging, Quality 10 or 11', '9cd85933ddb1101d9b859a19e9a30334' => 'ACD Systems Digital Imaging, Quality 12', '222a8769205a592ec834b6f5fc654a21' => 'ACD Systems Digital Imaging, Quality 13', '29f957e2a0af0f44d271c3c4e27eec4b' => 'ACD Systems Digital Imaging, Quality 14', 'c46c764191f9c3db2bfe8d134512bcd8' => 'ACD Systems Digital Imaging, Quality 15 or 16', '56caa684ce7eb0b1cf662e1c88ed1614' => 'ACD Systems Digital Imaging, Quality 17', 'cedc5208c6e1cbffd8be0e47bfd76698' => 'ACD Systems Digital Imaging, Quality 18', 'dec0717305bae8309a934e1d6a251d88' => 'ACD Systems Digital Imaging, Quality 19', '8c85e0e8f41257e2cd739a5b158ec218' => 'ACD Systems Digital Imaging, Quality 20 or 21', '6ae7ab4e6d5e0e67006cca59c70f843c' => 'ACD Systems Digital Imaging, Quality 22', '840be626ed18db6cdef3c5c357e24d34' => 'ACD Systems Digital Imaging, Quality 23', 'd48c2b9e514e25fcc4b3f2408d168d72' => 'ACD Systems Digital Imaging, Quality 24', 'b9eb63b89c80c71f4eac8c6e27d272f1' => 'ACD Systems Digital Imaging, Quality 25 or 26', 'bcd4d36a9db91a51d1a571f71f8230d4' => 'ACD Systems Digital Imaging, Quality 27', 'ac2f66ab2559019fcf021b9a32b049ab' => 'ACD Systems Digital Imaging, Quality 28', '4208fca702ec702bd5d41c8231883057' => 'ACD Systems Digital Imaging, Quality 29', 'fa620c67ab09a4c0d1c5b8e65ade361e' => 'ACD Systems Digital Imaging, Quality 30 or 31', '679dea81c8d4563e07efac4fab6b89ca' => 'ACD Systems Digital Imaging, Quality 32', '43ceb0c1a5d94d55ee20dc3a168498b2' => 'ACD Systems Digital Imaging, Quality 33', 'a9cc8a19ae25bc024c3d92d84c13c7a5' => 'ACD Systems Digital Imaging, Quality 34', 'e3e7280c8a9e82d31e22d24d5b733580' => 'ACD Systems Digital Imaging, Quality 35 or 36', 'a06d250213e349005897bd6fa5bebca8' => 'ACD Systems Digital Imaging, Quality 37', '40d08b823fa60b838dd9998d1e2b550a' => 'ACD Systems Digital Imaging, Quality 38', '4998abefc838e35cf0180395309e2e33' => 'ACD Systems Digital Imaging, Quality 39', '280205c47c8d3706c2f36b1986e9b149' => 'ACD Systems Digital Imaging, Quality 40 or 41', '8534b67f8115ddc0296623a1ed3fc8ec' => 'ACD Systems Digital Imaging, Quality 42', '292b83b37765408b65f496cddd3f96ea' => 'ACD Systems Digital Imaging, Quality 43', 'cae0c8eb9a11a1f6eb7eca9651d8dbc0' => 'ACD Systems Digital Imaging, Quality 44', '078db0d0bffafa44def2e8b85eec26f6' => 'ACD Systems Digital Imaging, Quality 45 or 46', '6a26a11cc28df00e01d5979e2e0fb4f7' => 'ACD Systems Digital Imaging, Quality 47', 'b41b3d226ba21244b8070ba719ec721a' => 'ACD Systems Digital Imaging, Quality 48', '9a8a54328e297faa0a546c46145c9aa8' => 'ACD Systems Digital Imaging, Quality 49', '256e617be51dade18503fcbbe87cd4a6' => 'ACD Systems Digital Imaging, Quality 50 or 51', '064f160a8504465551738c9071f3850f' => 'ACD Systems Digital Imaging, Quality 52', '5aef4c0bc6a5c8f1baded29946a56310' => 'ACD Systems Digital Imaging, Quality 53', 'c20f4841a1ff7e393af8f6ea4124403c' => 'ACD Systems Digital Imaging, Quality 54', '14afe9b58e0eacef42db61e1d7fdd09c' => 'ACD Systems Digital Imaging, Quality 55 or 56', '147598404233439485574200e253f88e' => 'ACD Systems Digital Imaging, Quality 57', '17479c1e73d2c062872c871db80d949b' => 'ACD Systems Digital Imaging, Quality 58', 'd237b1202f88ba8183bc1cb69dd4be66' => 'ACD Systems Digital Imaging, Quality 59', 'fc923f2d38e0e549134e1ec86f58149a' => 'ACD Systems Digital Imaging, Quality 60 or 61', '93b4929d4a3b955f4996ab7e3b6fbe53' => 'ACD Systems Digital Imaging, Quality 62', '054f418c24a6a733186a27aa739dc93a' => 'ACD Systems Digital Imaging, Quality 63', '0df2be705ae86e5de1e508db95efb182' => 'ACD Systems Digital Imaging, Quality 64', 'c1978a445de1173b5039b0cf8d8a91fe' => 'ACD Systems Digital Imaging, Quality 65 or 66', '3d8e25b74d0d9be662f26ec5fed6fe94' => 'ACD Systems Digital Imaging, Quality 67', '8887b718c97e0d80ed8d9a198387e2eb' => 'ACD Systems Digital Imaging, Quality 68', '8cdb9100cfbb246d440d469e72ce37a6' => 'ACD Systems Digital Imaging, Quality 69', '379efafa6e71a90ccfcb57073d0bc5c8' => 'ACD Systems Digital Imaging, Quality 70 or 71', 'e1e122ebb2733a5ccdb5ff1cdce86d4d' => 'ACD Systems Digital Imaging, Quality 72', '41dd47887a2b87e22ad3bbacc022374e' => 'ACD Systems Digital Imaging, Quality 73', 'a0a30c816d5d47a91c66e5645eb5fdb8' => 'ACD Systems Digital Imaging, Quality 74', '731f7ffedba80407d039c1db5a785f95' => 'ACD Systems Digital Imaging, Quality 75 or 76', '7cfd092a41a0e1c029e82467cb4c034f' => 'ACD Systems Digital Imaging, Quality 77', 'f1b005980104aac41b49973beed9c8c2' => 'ACD Systems Digital Imaging, Quality 78', 'ba12dbfbd652c9cde69822996bdb2139' => 'ACD Systems Digital Imaging, Quality 79', 'd3784280d08a8df51e607bde8c8b5ead' => 'ACD Systems Digital Imaging, Quality 80 or 81', '7ed560efea0b44168d910a73fab9204c' => 'ACD Systems Digital Imaging, Quality 82', 'deaa8bbd7c5414b93d8029aa14a76d3a' => 'ACD Systems Digital Imaging, Quality 83', '9ae3a57ce98290176c4700baaff5661f' => 'ACD Systems Digital Imaging, Quality 84', 'cb99b9bd30ae36929755fee9208ab36b' => 'ACD Systems Digital Imaging, Quality 85 or 86', '75ff62bbf17aa1762dd15677e961ce67' => 'ACD Systems Digital Imaging, Quality 87', 'd4f1922c71a6c96a530a9a8268fbc63b' => 'ACD Systems Digital Imaging, Quality 88', 'ec994ef421efd6bc78671858b9f942ad' => 'ACD Systems Digital Imaging, Quality 89', '5ca52e1ffe2c84660d7377c33c88ad53' => 'ACD Systems Digital Imaging, Quality 90 or 91', '5522213c915e2af3ad01ee2ec27ee3ed' => 'ACD Systems Digital Imaging, Quality 92', '21aa1a0036251eecfffd24e37d7ce3dd' => 'ACD Systems Digital Imaging, Quality 93', '3233b63fc39fbbaa9af364e8a33862ff' => 'ACD Systems Digital Imaging, Quality 94', '1860106097672532e7ebc2026d7f9681' => 'ACD Systems Digital Imaging, Quality 95 or 96', '0c7d4861b3bee5d766a93f2d34027bfa' => 'ACD Systems Digital Imaging, Quality 97', 'c9309ab058680151be5f97e6c54dc687' => 'ACD Systems Digital Imaging, Quality 98', 'ffe6bb565b2c9008ab917c57ba94cd67' => 'ACD Systems Digital Imaging, Quality 99', 'd6390cc36d2f03c1d2dd13d6910ca46b' => 'ACD Systems Digital Imaging, Quality 100; Pentax K20D/OptioE60 Premium', # StereoPhoto Maker Version 3.25 - Option "No compression ghosting" activated '185893c53196f6156d458a84e1135c43:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 1', 'b41ccbe66e41a05de5e68832c07969a7:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 2', 'efa024d741ecc5204e7edd4f590a7a25:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 3', '3396344724a1868ada2330ebaeb9448e:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 4', '14276fffb98deb42b7dbce30abb8425f:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 5', 'a99e2826c10d0922ce8942c5437f53a6:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 6', '0d3de456aa5cbb8a2578208250aa9b88:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 7', 'fa987940fdedbe883cc0e9fcc907f89e:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 8', '1c9bb67190ee64e82d3c67f7943bf4a4:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 9', '57d20578d190b04c7667b10d3df241bb:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 10', '619fd49197f0403ce13d86cffec46419:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 11', '327f47dd8f999b2bbb3bb25c43cf5be5:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 12', 'e4e5bc705c40cfaffff6565f16fe98a9:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 13', '6c64fa9ad302624a826f04ecc80459be:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 14', '039a3f0e101f1bcdb6bb81478cf7ae6b:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 15', 'c23b08c94d7537c9447691d54ae1080c:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 16', '200107bc0174104bbf1d4653c4b05058:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 17', '72abfdc6e65b32ded2cd7ac77a04f447:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 18', '1799a236c36da0b30729d9005ca7c7f9:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 19', 'c33a667bff7f590655d196010c5e39f3:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 20', 'b1dc98f6a2f8828f8432872da43e7d94:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 21', '07318a0acfebe9086f0e04a4c4f5398a:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 22', 'a295b7163305f327a5a45ae177a0a19c:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 23', 'c741c1b134cf81ab69acc81f15a67137:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 24', 'a68893776502a591548c7b5bece13e1b:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 25', '111848d9e41f6f408ef70841f90c0519:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 26', '886374ceebcfd4dfed200b0b34b4baca:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 27', '666dd95fd0e20f5c20bc44d78d528869:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 28', '1aa58cb85dda84de2ddf436667124dcd:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 29', '9d321ab2bdda6f3cb76d2d88838aa8c3:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 30', '6ad87d648101c268f83fa379d4c773f2:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 31', 'cdf8e921300f27a4af7661a2de16e91a:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 32', '3f48672e37b6dd2e571b222e4b7ff97d:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 33', 'a53a7d4cc86d01f4c1b867270c9c078f:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 34', '09ec03f5096df106c692123f3fd34296:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 35', 'a946498fd1902c9de87a1f5182966742:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 36', '5d650a1d38108fd79d4f336ba8e254c2:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 37', '81d620f1b470fd535b26544b4ea20643:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 38', '892788bdf8cbef5c6fbd7019a079bf8e:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 39', 'cf3929fd4c1e5c28b7f137f982178ad1:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 40', '31f288945896ed839f1d936bff06fb03:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 41', 'e0c38f0c5e6562445d4e92bae51713be:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 42', '18fa29d1164984883a6af76377b60d5a:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 43', 'eff737b226fbce48c42625c5bf9dabb6:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 44', 'b900f91ee8697255d5daebce858caaeb:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 45', 'ab2f8513823067af242f7e3c04a88a9c:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 46', '60b682c4d412f5255efbaa32787c46ca:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 47', 'ea50813e06203c2ad1165252bcb99a1d:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 48', 'f6308a717437d3653b0751ebf511db0f:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 49', '7c8242581553e818ef243fc680879a19:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 50', 'fc41ab8251718977bc6676f502f457e0:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 51', '606c4c78c0226646bf4d3c5a5898fb17:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 52', '0e6c6a5440d33d25f1c25836a45cfa69:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 53', '7464b2361e5b5f5a9ba74a87475dda91:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 54', 'aeaa2ca48eabb3088ebb713b3c4e1a67:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 55', '3f36450b0ba074578391e77f7340cef0:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 56', 'be232444027e83db6f8d8b79d078442e:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 57', '712c145d6472a2b315b2ecfb916d1590:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 58', 'ae3dd4568cc71c47d068cf831c66b59d:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 59', 'b290e52c21a435fede4586636ef5e287:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 60', 'a09ca4c4391e0221396a08f229a65f9d:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 61', '0818578fc5fc571b4f8d5ffefc9dc0d8:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 62', '7c685e2916555eda34cb37a1e71adc6a:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 63', '69c6b9440342adfc0db89a6c91aba332:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 64', 'd5d484b68e25b44288e67e699829695c:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 65', 'de8310d09116a7a62965f3e0e43ef525:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 66', 'e4735f63e88baf04599afc034e690845:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 67', 'b4ef810b14dee9c6d6d8cace98f799a6:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 68', '52886ef80147c9a136e20b2bc3b76f52:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 69', '9c62dbc848be82ef91219ba9843998be:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 70', 'bfe8c1c73eea84b85673487a82f67627:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 71', 'ea445840d29c51009a2a8cd49b96ccee:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 72', '71c1a56890fff9b0a095fa5a1c96132b:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 73', 'f080b02331ac8adf03de2281042d2b49:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 74', 'd0eaa368737f17f6037757d393a22599:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 75', '303663905d055b77bb547fe0b0beb9c5:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 76', '5cdf1d5bbe19375ad5c7237273dddede:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 77', 'd64e7ff8292fd77131932864d3c9ce7c:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 78', '12b4cc13891c5aef3dadb3405b6fa65d:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 79', 'b008cd63591f8fd366f77d2b224b9c9c:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 80', '49b6e472c7d5ecead593c6009768e765:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 81', 'bce6fa61623ad4f65ff3fec1528cb026:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 82', 'c2b037bf9f5e5baba804d7bbbb2dc73b:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 83', '7fe7b339c6ffc62b984eeab4b0df9168:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 84', '274bbeb0ac3939f90c578ebb1f5a9eef:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 85', '0a0268c655d616b0e4af2851533aa3af:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 86', '52318e260c0d6b3dbee85c87f9b94e63:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 87', 'b64cc19a0f81a506ed5bcfb9c131c8fe:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 88', 'd8c54333eb475b8db9f32f11fe96337e:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 89', '12fe6b9bfd20f4d7f0ac2a221c566c45:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 90', '12aefbf7689633c83da714c9f0e90e05:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 91', 'a3a96add050fc51a2b3ce59a9a491034:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 92', '7b0242bd9aaeab4962f5d5b39b9a4027:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 93', '12fc29c1d8940c93a47ee9d927a17561:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 94', 'e1fedef5184beeb7b0f5c055c7ae1d31:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 95', 'ae9202355f603776794d3e62c43578d6:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 96', '36da00bae6cd81d1f97e32748c07e33f:111111' => 'StereoPhoto Maker, No compression ghosting, Quality 97', # Tested with FujiFilm FinePixViewer Ver 5.4.11G (Win) '3a8a34631e388e39d13616d003f05957:211111' => 'FinePixViewer, Basic', 'b6a2598792fd87b7eb0c094cbd52862f:211111' => 'FinePixViewer, Fine', '4ee61c39b97558a273f310e085d0bdd2:211111' => 'FinePixViewer, Normal', # Tested with Canon Digital Photo Professional Version 3.4.1.1 (Win) '252482232ff1c8cf77db4f0c6402f858:211111' => 'Canon Digital Photo Professional, Quality 1', 'ec6c55677b94970bc09f70265f1d5b55:211111' => 'Canon Digital Photo Professional, Quality 2', 'a1085c167f1cd610258fe38c8a84a8b9:211111' => 'Canon Digital Photo Professional, Quality 3', '8ab1119f4ed4941736cb8ec1796f5674:211111' => 'Canon Digital Photo Professional, Quality 4', 'e66c03f97b19213f385136f014c78ac1:211111' => 'Canon Digital Photo Professional, Quality 5', 'a2f4b6ac52f87791380bdfe38ae333e1:211111' => 'Canon Digital Photo Professional, Quality 6', 'fe85b802c5779dcf45ea4bb7749ee886:211111' => 'Canon Digital Photo Professional, Quality 7', '35686967efa5fb333fb8f4844efc33a3:211111' => 'Canon Digital Photo Professional, Quality 8', 'a5894172d7ec5f0c1550934c9e9385c9:211111' => 'Canon Digital Photo Professional, Quality 9', 'd6390cc36d2f03c1d2dd13d6910ca46b:211111' => 'Canon Digital Photo Professional, Quality 10', # Tested with Canon ZoomBrowser EX 6.1.1.21 (Win) 'e66c03f97b19213f385136f014c78ac1:211111' => 'Canon ZoomBrowser, Low', 'bf72e4d4aacbdaeb86fd3f67c8df2667:211111' => 'Canon ZoomBrowser, Medium', 'd6390cc36d2f03c1d2dd13d6910ca46b:211111' => 'Canon ZoomBrowser, Highest', 'aeb34eb083acc888770d65e691497bcf:211111' => 'Canon ZoomBrowser, High', # Tested with PENTAX PHOTO Laboratory 3.51 (Win) '76d958276bf2cac3c36b7d9a677094a7:211111' => 'PENTAX PHOTO Laboratory, Highest compression', 'bf72e4d4aacbdaeb86fd3f67c8df2667:211111' => 'PENTAX PHOTO Laboratory, High compression', 'fa8720d025f2a164542b6a8e31112991:211111' => 'PENTAX PHOTO Laboratory, Medium quality', 'f3235a7d187d083b7b7ead949653f730:211111' => 'PENTAX PHOTO Laboratory, High quality', 'd6390cc36d2f03c1d2dd13d6910ca46b:211111' => 'PENTAX PHOTO Laboratory, Highest quality', # Tested with Sony Image Data Converter SR Version 2.0.00.08150 (Win) 'd6390cc36d2f03c1d2dd13d6910ca46b:211111' => 'Sony Image Data Suite, Quality 1 (high quality)', 'aeb34eb083acc888770d65e691497bcf:211111' => 'Sony Image Data Suite, Quality 2', '524742ca0cff64ecc0c7d7413e7d4b8d:211111' => 'Sony Image Data Suite, Quality 3', 'c44701e8185306f5e6d09be16a2b0fbd:211111' => 'Sony Image Data Suite, Quality 4 (high compression)', # Devices # Canon '0147c5088beb16642f9754f8671f13b3:211111' => 'Canon PowerShot, Fine', '586b40c7d4b95e11309636703e81fbe9:211111' => 'Canon EOS 20D, Fine', '6640ae3bb6f646013769b182c74931b5:211111' => 'Canon PowerShot, Normal', '83d6d7dd7ace56feeeb65b88accae1bc:211111' => 'Canon PowerShot, Normal Small', 'b8548a302585d78a0c269b54bff86541:211111' => 'Canon PowerShot, Fine Small', '9d125046484461bbc155d8eff6d4e8f0:211111' => 'Canon PowerShot, Superfine (A430/A460)', '0e618a0e79b4d540da1f6e07fcdce354:211111' => 'Canon PowerShot, Superfine Small', 'd255f70a910a2d0039f4e792d2c01210:211111' => 'Canon PowerShot, Superfine Medium2', '8bc267b04a54c02fdee1f4fdf0bcce83:211111' => 'Canon EOS 1DmkIII/5DmkII/40D/1000D, Fine', '17cb779485969589a5c7eb07a5d53247:211111' => 'Canon EOS 1DmkIII, Fine (pre-production)', 'ee1c033afaf4cd5263ff2b1c1ff8966c:211111' => 'Canon PowerShot, Superfine', 'a92912eb3c81e5c873d49433264af842:211111' => 'Canon EOS 30D/40D/50D/300D, Normal', '0cec88a0cd8fe35720e78cdcdbdadef6:121111' => 'Canon EOS 1DmkII, Fine (A)', '72cdcc91e3ddc2c3d17c20173b75c5ef:211111' => 'Canon EOS 1DmkII, Fine (B)', '483b5288e4256aa8ff96d6ccb96eba43:211111' => 'Canon EOS 1DmkII, Fine (C)', 'ea2f997a0261bab501bf122b04cbc859:211111' => 'Canon EOS 1DSmkII, Fine', '98af13526b7e4bbf73a9fb11a8fa789d:121111' => 'Canon EOS 1DSmkII, Fine (vertical)', '9e6abfb26d3b95b8cd2f710e78def947:121111' => 'Canon EOS 300D, Fine (vertical)', '4d6b36e81fe30c67dd53edb4d7c05422:121111' => 'Canon EOS 40D, Fine (vertical)', '92c1557deaa14f1cdaf92cf0531487f1:121111' => 'Canon EOS 1D/1DS, Fine', 'db8d4df12405d0d69eb25f06a963ac5b:211111' => 'Canon DV', 'eaead98bbdfde35210f48286662e8ad2:211111' => 'Canon DV Hi-Res', '74f0ef9476707be45f06951ca9a809ba:211111' => 'Canon DV/Optura/Elura, Superfine', # HTC 'bf72e4d4aacbdaeb86fd3f67c8df2667:221111' => 'HTC Touch Diamond P3700, Quality Unknown', # Konica/Minolta 'b5c213a3785c4c62b25d8f8c30758593:211111' => 'Konica/Minolta DYNAX 7D, Fine', # Nikon '118a60a90c56bcb363fdd93b911a3371:211111' => 'Nikon D50 / D80, Fine', '457b05fd0787a8e29bd43cd65911d6ca:211111' => 'Nikon D80, Basic', '5701582a0da2e9e8dcd923a5cf877494:211111' => 'Nikon D50, Fine', '662bd7fb9dff6426e310f9261a3703d0:211111' => 'Nikon D50, Fine', 'e06eb7848ec8766239ff014aa8b62e49:211111' => 'Nikon D80, Normal', '9e201a496a3700a77d9102c0dd0f8dbf:211111' => 'Nikon D300, Basic', # Panasonic '07d3cd227395b060a132411cbfc22593:211111' => 'Panasonic DMC-FZ50, High (A)', '118a60a90c56bcb363fdd93b911a3371:211111' => 'Panasonic DMC-FZ50/TZ3, High (A)', '1b8d04b1d56a4c0c811a0d3a68e86d06:211111' => 'Panasonic DMC-FZ50, High (B)', '1e619cbdee1f8ff196d34dad9140876f:211111' => 'Panasonic DMC-FZ50, High (C)', '493abc7f4b392a0341bfcac091edb8f8:211111' => 'Panasonic DMC-FZ30, High (B)', '4aa883c43840de7f0d090284120c69bc:211111' => 'Panasonic DMC-FZ50, High (D)', '7eafb9874384d391836e64911e912295:211111' => 'Panasonic DMC-FZ50, High (E)', '82b56237e4eccde035edff4a5abdba44:211111' => 'Panasonic DMC-FZ50, High (F)', '8335023e5a1ee8df80d52327b0556c44:211111' => 'Panasonic DMC-FZ30, High (C)', '8c105b3669931607853fa5ba4fffb839:211111' => 'Panasonic DMC-FZ30, High (D)', '8ecfb959bc76e5d6703f3f3bba2c5529:211111' => 'Panasonic DMC-FZ30, High (E)', '96eda111b2153648b3f27d6c1a9ec48f:211111' => 'Panasonic DMC-FZ50/TZ3, High (B)', '99f76923cfbd774febea883b603b8103:211111' => 'Panasonic DMC-FZ30, High (F)', '9b3475b865b9d31e433538460b75a588:211111' => 'Panasonic DMC-FZ10, High', '9eb7cdfd07099c1bb8e2c6c04b20b8ba:211111' => 'Panasonic DMC-FZ30, High (G)', '9fc030294fa5c4044dbb0cb461b0cf93:211111' => 'Panasonic DMC-TZ5, High (A)', 'a8779af4cb8afa2def1d346a9b16e81a:211111' => 'Panasonic DMC-TZ5, High (B)', 'bebd334aca511e2a2b6c60f43f9e6cf1:211111' => 'Panasonic DMC-FZ30, High (H)', 'c871ce0851d4647f226b2dcfd49fe9a9:211111' => 'Panasonic DMC-L1, Very High', 'eb625c64e32314f51dc4286564a71f7b:211111' => 'Panasonic DMC-FZ10, High', # Pentax # (K10D uses same DQT tables for different qualities) '1027a4af6a2a07e58bbd6df5b197d44e:211111' => 'Pentax K10D (A)', '17a77c2574ff5b72b3284f57977187f3:211111' => 'Pentax K10D (B)', '1aee684c7eb75320d988f6296c4c16ea:211111' => 'Pentax K10D (C)', '32386501afff88b45432b23fe41593e8:211111' => 'Pentax K10D (D)', '35ad02c3d8237a074b67423c39d3d61c:211111' => 'Pentax K10D (E)', '39d929c095f37a90e7d083db40e8642d:211111' => 'Pentax K10D (F)', '4127433151f74654762b1ef3293781f4:211111' => 'Pentax K10D (G)', '599a7794c32b9d60e80426909ed40a09:211111' => 'Pentax K10D (H)', '641812174c82d5b62ec86c33bd852204:211111' => 'Pentax K10D (I)', '76d958276bf2cac3c36b7d9a677094a7:211111' => 'Pentax K10D (J)', '79b07131be4827795315bf42c65212f2:211111' => 'Pentax K10D (K)', '836448ef538366adb50202927b53808a:211111' => 'Pentax K10D (L)', '8f70e4a31ad4584043ddc655eca17e89:211111' => 'Pentax K10D (M)', '90d3c964eaf6e4bd12cf5ca791a7d753:211111' => 'Pentax K10D (N)', '994a9f2060976d95719ca7064be3a99c:211111' => 'Pentax K10D (0)', '994a9f2060976d95719ca7064be3a99c:211111' => 'Pentax K10D/K20D (P)', '9971f02a466c47d640e8f20a2e4b55b9:211111' => 'Pentax K10D (Q)', 'a16626c285e5a2290d331f99f4eec774:211111' => 'Pentax K10D (R)', 'a64569d6387a118992e44e41aaeac27e:211111' => 'Pentax K10D (S)', 'a8055a53fda7f9a0e387026c81960aa4:211111' => 'Pentax K10D (T)', 'ab50a9f53a44ffecc54efe1cb7c6620a:211111' => 'Pentax K10D (U)', 'aeb34eb083acc888770d65e691497bcf:211111' => 'Pentax K10D (V)', 'af2a112c30fa29213a402dbd3c2b2d3a:211111' => 'Pentax K10D (W)', 'bb4475a9e14464eb4682fd81cceb1f91:211111' => 'Pentax K10D (X)', 'bf72e4d4aacbdaeb86fd3f67c8df2667:211111' => 'Pentax K10D (Y)', '0a953ba56b59fa0bbbdac0162ea1c96b:211111' => 'Pentax K10D (Z)', '387354b46b9726f33da5c0c1a0c383a0:211111' => 'Pentax K10D/K20D (AA)', '4e7f4e5cd15f4fc089ab25890619dc60:211111' => 'Pentax K10D (AB)', '6518270228fd20730740a08cc8a171f6:211111' => 'Pentax K10D (AC)', '72bce7df55635509eb6468fc6406941d:211111' => 'Pentax K10D (AD)', '7cafc25f204fc4ddf39d86e2f0f07b62:211111' => 'Pentax K10D (AE)', '811e5b0229f0e8baf4b40cd2d8777550:211111' => 'Pentax K10D (AF)', '9282a1cec6bbd1232b3673091164d43d:211111' => 'Pentax K10D (AG)', 'c59a4cf0beedbfd1b102dc3d3c8e73ac:211111' => 'Pentax K10D (AH)', 'd97b27b45fdbe82a79364e0939adbf90:121111' => 'Pentax K10D (AI)', 'db87a4c5c1d4e03dc6645bcf0535a930:211111' => 'Pentax K10D (AJ)', 'f9a93cb70da7bbe87e35cd9980a5fd47:211111' => 'Pentax K10D (AK)', 'ff6a158f803e42bfbf9f702c016b84b3:211111' => 'Pentax K10D (AL)', 'ff6d4a4a60a1c5e032e7fb7d9c91f817:211111' => 'Pentax K10D (AM)', 'dca5476d81d0ceca97f480fecd09b23c:211111' => 'Pentax K10D (AN)', 'efbe7634221900639b3c072395c61bef:211111' => 'Pentax K10D (AO)', 'f4dba22dd251350a21f8122f2777e7b0:211111' => 'Pentax K10D (AP)', 'f90135fcff0e1720dda86e9ad718c0c0:211111' => 'Pentax K10D (AQ)', 'fa3d7753be7b329ab9961657cbc65386:211111' => 'Pentax K10D (AR)', 'fa8720d025f2a164542b6a8e31112991:211111' => 'Pentax K10D (AS)', '2941d12ef34511d96b659ba30d682cd1:211111' => 'Pentax K10D (AT)', '2aa82b6717f1cdfe6b6d60a4486b5671:211111' => 'Pentax K10D (AU)', '2aa82b6717f1cdfe6b6d60a4486b5671:211111' => 'Pentax K10D (AV)', '3527616df6f26a3ab36b80a8d885fc07:211111' => 'Pentax K10D (AW)', '3527616df6f26a3ab36b80a8d885fc07:211111' => 'Pentax K10D (AX)', '3527616df6f26a3ab36b80a8d885fc07:211111' => 'Pentax K10D (AY)', '5ea9e766888399a41f3f1a3c5c15cd90:211111' => 'Pentax K10D (AZ)', 'f83d978290d0699054eabb0a7811c7a4:211111' => 'Pentax K10D (BA)', 'f83d978290d0699054eabb0a7811c7a4:211111' => 'Pentax K10D (BB)', 'fa8720d025f2a164542b6a8e31112991:211111' => 'Pentax K10D/K100D', '586b40c7d4b95e11309636703e81fbe9:211111' => 'Pentax K20D/K200D/Optio 230, Best; Canon EOS 10D/300D/350D, Fine', 'b73481179da895f3b9ecea1737054a9c:211111' => 'Pentax K20D, Best (B)', 'b8fce00f93108e7db57a012c51fad341:211111' => 'Pentax K20D, Best (C)', '5ee766b90badc8fed5a5386e78a80783:211111' => 'Pentax *istDS, Good (edit in camera)', 'd528fac9b63536ff52041745945dcb09:211111' => 'Pentax *istDS, Better (edit in camera)', 'd6390cc36d2f03c1d2dd13d6910ca46b:211111' => 'Pentax *istDS, Best (edit in camera)', 'dc149d41f08d16cb9d52a5bdd487a67e:121111' => 'Pentax *istD/K100Dsuper/Optio300GS, Best', 'e10030f09a14acdd647eff13c0bf333a:211111' => 'Pentax *istD/DS/DS2/K100D/Optio330GS/33L, Best', 'ef0cd1902fb1afe284468a67eaffd078:211111' => 'Pentax *istDS/K100D/K100Dsuper, Good', 'f1262dfcada6e6c2cd4b9fa7e881233b:211111' => 'Pentax *istDL/DS, Better', 'f3235a7d187d083b7b7ead949653f730:211111' => 'Pentax K20D/K200D, Best (D)', '6686cddc46088f0987e7476861fbfb47:211111' => 'Pentax K2000, Best (A)', '5910b8431fdd8ab93ce258f366c4b867:211111' => 'Pentax K2000, Best (B)', 'c8bfcc60aeec937300405f59373be4ef:211111' => 'Pentax K2000, Best (C)', '689a0e3511f2aea75637f46e6af9fd9f:211111' => 'Pentax Optio A40, Best (edit in camera)', '8d14598ae9cc1b7f5357424a19d05a71:211111' => 'Pentax Optio A30/A40, Good', 'a4cb8a3a000484b37c4373cde1170091:211111' => 'Pentax Optio A30/A40/S10/S12, Best', '0ac5cb651c496369d0e924ae070b7c53:211111' => 'Pentax Optio A40, Better (edit in camera)', '1068be028c278941bd8abf3b0021655e:211111' => 'Pentax Optio A40, Good (edit in camera)', '336eeeb78e386bf66fe6325b4a0fcfa6:211111' => 'Pentax Optio A40, Better', 'ae2efaf1a96a4fdcfa9003b9aa963ae4:221111' => 'Pentax Optio 330, Best (vertical)', '3803d7f6b7aed64c658c21dbb2bc0797:221111' => 'Pentax Optio 330, Best', '353bf09900feb764885329e7bebfd95e:211111' => 'Pentax Optio 330GS, Good', '6c2bc41a4b6ad1e20655ffcc0dfd2c41:221111' => 'Pentax Optio 330RS, Fine', 'e9206045838e9f5f9bd207744254e96d:221111' => 'Pentax Optio 430, Best', '759fb7011e13fa5f975bb668f5b94d8b:211111' => 'Pentax Optio 550/750Z/M60/X, Best', '637103ef9d8e84f8345f8218f158fc3c:211111' => 'Pentax Optio 550/M10/T30/W30, Best', '23f2a5970523c5f7fd2ab7fa3b09dff9:211111' => 'Pentax Optio 550/555/M20/M30/W10/W20, Best', '8d2f02a07bad6b5cec48466036fef319:121111' => 'Pentax Optio 550, Better', '27297008a89ee49804f0859ea6435878:211111' => 'Pentax Optio MX, Best', '6cfe3833aadd87487afc11129d8cb2aa:221111' => 'Pentax Optio S, Better', 'fcef35c97674aeb26c67e539b726057f:221111' => 'Pentax Optio S, Best (A)', '13b2644cdad6f75767667e8ea5c218a3:221111' => 'Pentax Optio S, Best (B)', '310b70bc4fac884f64a07040a4b87468:221111' => 'Pentax Optio S, Best (C)', 'aa05fbe795d86a1063c55865e8613536:221111' => 'Pentax Optio S, Best (D)', 'd57ac6956e4fe86c386f0eef00a5e021:221111' => 'Pentax Optio S, Best (E)', '28782f5ee24fe983fe90b9438b39ae2e:221111' => 'Pentax Optio S4, Best', '804bd63907214e005f01fb65a2bb00e6:221111' => 'Pentax Optio S4i, Best', '84285f5b3248884488e5142b8c7210e2:211111' => 'Pentax Optio S6, Good', 'e97694f0093de13987a335e131b30eb0:221111' => 'Pentax Optio SVi, Best', '037d043c8a8d5332c28d59f71a0dcfd2:211111' => 'Pentax Optio E35', 'dd8ad8ce688c4248f924022c38d3228c:211111' => 'Pentax Optio 43WR, Good', 'e55e0c1adbbca8b9d100881248050eb5:211111' => 'Pentax Optio 43WR, Better', '7770d784d852b3333f9213713e481125:211111' => 'Pentax Optio 450, Best', '61d311bde22762ae0e88b768e835eced:211111' => 'Pentax Optio 33WR/M50, Best', 'bc066ff3fbea8a290c6f9882687945e0:221111' => 'Pentax Optio 430RS, Fine', 'b6bd9f956309a20e3a56294077536391:211111' => 'Pentax Optio A10/S7, Best', 'a4ecd6b77f06671530942783c3595aca:211111' => 'Pentax Optio A20, Best', '40f66b0a209f24716320636b776dda94:211111' => 'Pentax Optio E30/E40, Best', '59a868b3d11d9cdc87859c02757e13bb:211111' => 'Pentax Optio E50, Best', '9570584f017ed2c4f0fb91782b51faa9:211111' => 'Pentax Optio M40/Z10, Best', '5a74f09fb2586fa000c42e98e3b9f2d8:211111' => 'Pentax Optio T10', '0867bdf854d1fbb141411de518a66ba6:211111' => 'Pentax Optio T20 (A)', 'f74b3853185743c111ccb13e6febdc21:211111' => 'Pentax Optio T20 (B)', 'b6640d3879f9922708d23e6adb3d61c9:211111' => 'Pentax Optio V10, Best', '253467dc35dfbb32cb3d619fc635d689:211111' => 'Pentax Optio V20/W60, Best', # Sony '6bd350bf5df27ed1b5bf1d83fa9d021f:211111' => 'Sony DSLR-A700, Fine', ); #------------------------------------------------------------------------------ # Estimate JPEG quality from quantization tables (ref 3) # Inputs: 0) 1) DQT segments array ref # Returns: JPEG quality, or undefined if it can't be calculated sub EstimateQuality($) { local $_; my $dqtList = shift; my ($i, $dqt, @qtbl, $quality, @hash, @sums); # unpack DQT segments and sum quantization tables my $sum=0; DQT: foreach $dqt (@$dqtList) { next unless defined $dqt; for ($i=1; $i+64<=length($dqt); $i+=65) { my @qt = unpack("x$i C64", $dqt); $sum += $_ foreach @qt; push @qtbl, \@qt; last DQT if @qtbl >= 4; } } return undef unless @qtbl; my $qval = $qtbl[0][2] + $qtbl[0][53]; if (@qtbl > 1) { # color JPEG $qval += $qtbl[1][0] + $qtbl[1][63]; @hash =( 1020, 1015, 932, 848, 780, 735, 702, 679, 660, 645, 632, 623, 613, 607, 600, 594, 589, 585, 581, 571, 555, 542, 529, 514, 494, 474, 457, 439, 424, 410, 397, 386, 373, 364, 351, 341, 334, 324, 317, 309, 299, 294, 287, 279, 274, 267, 262, 257, 251, 247, 243, 237, 232, 227, 222, 217, 213, 207, 202, 198, 192, 188, 183, 177, 173, 168, 163, 157, 153, 148, 143, 139, 132, 128, 125, 119, 115, 108, 104, 99, 94, 90, 84, 79, 74, 70, 64, 59, 55, 49, 45, 40, 34, 30, 25, 20, 15, 11, 6, 4 ); @sums = ( 32640, 32635, 32266, 31495, 30665, 29804, 29146, 28599, 28104, 27670, 27225, 26725, 26210, 25716, 25240, 24789, 24373, 23946, 23572, 22846, 21801, 20842, 19949, 19121, 18386, 17651, 16998, 16349, 15800, 15247, 14783, 14321, 13859, 13535, 13081, 12702, 12423, 12056, 11779, 11513, 11135, 10955, 10676, 10392, 10208, 9928, 9747, 9564, 9369, 9193, 9017, 8822, 8639, 8458, 8270, 8084, 7896, 7710, 7527, 7347, 7156, 6977, 6788, 6607, 6422, 6236, 6054, 5867, 5684, 5495, 5305, 5128, 4945, 4751, 4638, 4442, 4248, 4065, 3888, 3698, 3509, 3326, 3139, 2957, 2775, 2586, 2405, 2216, 2037, 1846, 1666, 1483, 1297, 1109, 927, 735, 554, 375, 201, 128 ); } else { # greyscale JPEG @hash = ( 510, 505, 422, 380, 355, 338, 326, 318, 311, 305, 300, 297, 293, 291, 288, 286, 284, 283, 281, 280, 279, 278, 277, 273, 262, 251, 243, 233, 225, 218, 211, 205, 198, 193, 186, 181, 177, 172, 168, 164, 158, 156, 152, 148, 145, 142, 139, 136, 133, 131, 129, 126, 123, 120, 118, 115, 113, 110, 107, 105, 102, 100, 97, 94, 92, 89, 87, 83, 81, 79, 76, 74, 70, 68, 66, 63, 61, 57, 55, 52, 50, 48, 44, 42, 39, 37, 34, 31, 29, 26, 24, 21, 18, 16, 13, 11, 8, 6, 3, 2 ); @sums = ( 16320, 16315, 15946, 15277, 14655, 14073, 13623, 13230, 12859, 12560, 12240, 11861, 11456, 11081, 10714, 10360, 10027, 9679, 9368, 9056, 8680, 8331, 7995, 7668, 7376, 7084, 6823, 6562, 6345, 6125, 5939, 5756, 5571, 5421, 5240, 5086, 4976, 4829, 4719, 4616, 4463, 4393, 4280, 4166, 4092, 3980, 3909, 3835, 3755, 3688, 3621, 3541, 3467, 3396, 3323, 3247, 3170, 3096, 3021, 2952, 2874, 2804, 2727, 2657, 2583, 2509, 2437, 2362, 2290, 2211, 2136, 2068, 1996, 1915, 1858, 1773, 1692, 1620, 1552, 1477, 1398, 1326, 1251, 1179, 1109, 1031, 961, 884, 814, 736, 667, 592, 518, 441, 369, 292, 221, 151, 86, 64 ); } for ($i=0; $i<100; ++$i) { next if $qval < $hash[$i] and $sum < $sums[$i]; $quality = $i + 1 if ($qval <= $hash[$i] and $sum <= $sums[$i]) or $i >= 50; last; } return $quality; } #------------------------------------------------------------------------------ # Calculate JPEGDigest and/or JPEGQualityEstimate # Inputs: 0) ExifTool object ref, 1) DQT segments array ref, 2) subsampling string sub Calculate($$$) { my ($et, $dqtList, $subSampling) = @_; # estimate JPEG quality if requested if ($$et{REQ_TAG_LOOKUP}{jpegqualityestimate}) { my $quality = EstimateQuality($dqtList); $quality = '<unknown>' unless defined $quality; $et->FoundTag('JPEGQualityEstimate', $quality); } return unless $$et{REQ_TAG_LOOKUP}{jpegdigest} and $subSampling; unless (eval { require Digest::MD5 }) { $et->Warn('Digest::MD5 must be installed to calculate JPEGDigest'); return; } # create a string of DQT tables (in indexed order), separated by zero bytes my $dqt = ''; my $dat; foreach $dat (@$dqtList) { next unless $dat; $dqt .= "\0" if $dqt; $dqt .= $dat; } # generate ASCII-hex string of DQT MD5 digest my $md5 = unpack 'H*', Digest::MD5::md5($dqt); # add sub-sampling string unless we get a match without it $md5 .= ':' . $subSampling unless $PrintConv{$md5}; # add print conversion for JPEGDigest dynamically so it doesn't # bulk up the documentation and slow down loading unnecessarily $Image::ExifTool::Extra{JPEGDigest}{PrintConv} = \%PrintConv; $et->FoundTag('JPEGDigest', $md5); } 1; # end __END__ =head1 NAME Image::ExifTool::JPEGDigest - Calculate JPEGDigest and JPEGQualityEstimate =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains a lookup for values of the JPEG DQT digest, allowing some image identification from JPEG data alone. It also calculates an estimated JPEG quality if requested. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<https://github.com/ImageMagick/ImageMagick/blob/master/coders/jpeg.c> =back =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke for most of the work that went into this module, and to Franz Buchinger for the values he added. =head1 SEE ALSO L<Image::ExifTool::TagNames/JPEG Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/JVC.pm������������������������������������������������������000644 �000765 �000024 �00000007115 12642461315 020674� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: JVC.pm # # Description: JVC EXIF maker notes tags # # Revisions: 12/21/2005 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::JVC; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.03'; sub ProcessJVCText($$$); # JVC EXIF-based maker notes %Image::ExifTool::JVC::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'JVC EXIF maker note tags.', #0x0001 - almost always '2', but '3' for GR-DV700 samples 0x0002 => { #PH Name => 'CPUVersions', # remove trailing nulls/spaces and split at remaining nulls/spaces ValueConv => '$_=$val; s/(\s*\0)+$//; s/(\s*\0)+/, /g; $_', }, 0x0003 => { #PH Name => 'Quality', PrintConv => { 0 => 'Low', 1 => 'Normal', 2 => 'Fine', }, }, ); # JVC text-based maker notes %Image::ExifTool::JVC::Text = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&ProcessJVCText, NOTES => 'JVC/Victor text-based maker note tags.', VER => 'MakerNoteVersion', #PH QTY => { #PH Name => 'Quality', PrintConv => { STND => 'Normal', STD => 'Normal', FINE => 'Fine', }, }, ); #------------------------------------------------------------------------------ # Process JVC text-based maker notes # Inputs: 0) ExifTool object reference # 1) Reference to directory information hash # 2) Pointer to tag table for this directory # Returns: 1 on success, otherwise returns 0 and sets a Warning sub ProcessJVCText($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart} || 0; my $dataLen = $$dirInfo{DataLen}; my $dirLen = $$dirInfo{DirLen} || $dataLen - $dirStart; my $verbose = $et->Options('Verbose'); my $data = substr($$dataPt, $dirStart, $dirLen); # validate text maker notes unless ($data =~ /^VER:/) { $et->Warn('Bad JVC text maker notes'); return 0; } while ($data =~ m/([A-Z]+):(.{3,4})/sg) { my ($tag, $val) = ($1, $2); my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); $et->VerboseInfo($tag, $tagInfo, Table => $tagTablePtr, Value => $val, ) if $verbose; unless ($tagInfo) { next unless $$et{OPTIONS}{Unknown}; $tagInfo = { Name => "JVC_Text_$tag", Unknown => 1, PrintConv => 'length($val) > 60 ? substr($val,0,55) . "[...]" : $val', }; # add tag information to table AddTagToTable($tagTablePtr, $tag, $tagInfo); } $et->FoundTag($tagInfo, $val); } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::JVC - JVC EXIF maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains routines used by Image::ExifTool to interpret JVC maker notes. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/JVC Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Kodak.pm����������������������������������������������������000644 �000765 �000024 �00000203657 12642461316 021315� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Kodak.pm # # Description: Kodak EXIF maker notes and APP3 "Meta" tags # # Revisions: 03/28/2005 - P. Harvey Created # # References: 1) http://search.cpan.org/dist/Image-MetaData-JPEG/ # 2) http://www.ozhiker.com/electronics/pjmt/jpeg_info/meta.html # 3) http://www.cybercom.net/~dcoffin/dcraw/ # 4) Iliah Borg private communication (LibRaw) # # Notes: There really isn't much public information about Kodak formats. # The only source I could find was Image::MetaData::JPEG, which # didn't provide information about decoding the tag values. So # this module represents a lot of work downloading sample images # (about 100MB worth!), and testing with my daughter's CX4200. #------------------------------------------------------------------------------ package Image::ExifTool::Kodak; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.41'; sub ProcessKodakIFD($$$); sub ProcessKodakText($$$); sub WriteKodakIFD($$$); # Kodak type 1 maker notes (ref 1) %Image::ExifTool::Kodak::Main = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, NOTES => q{ The table below contains the most common set of Kodak tags. The following Kodak camera models have been tested and found to use these tags: C360, C663, C875, CX6330, CX6445, CX7330, CX7430, CX7525, CX7530, DC4800, DC4900, DX3500, DX3600, DX3900, DX4330, DX4530, DX4900, DX6340, DX6440, DX6490, DX7440, DX7590, DX7630, EasyShare-One, LS420, LS443, LS633, LS743, LS753, V530, V550, V570, V603, V610, V705, Z650, Z700, Z710, Z730, Z740, Z760 and Z7590. }, WRITABLE => 1, FIRST_ENTRY => 8, 0x00 => { Name => 'KodakModel', Format => 'string[8]', }, 0x09 => { Name => 'Quality', PrintConv => { #PH 1 => 'Fine', 2 => 'Normal', }, }, 0x0a => { Name => 'BurstMode', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x0c => { Name => 'KodakImageWidth', Format => 'int16u', }, 0x0e => { Name => 'KodakImageHeight', Format => 'int16u', }, 0x10 => { Name => 'YearCreated', Groups => { 2 => 'Time' }, Format => 'int16u', }, 0x12 => { Name => 'MonthDayCreated', Groups => { 2 => 'Time' }, Format => 'int8u[2]', ValueConv => 'sprintf("%.2d:%.2d",split(" ", $val))', ValueConvInv => '$val=~tr/:./ /;$val', }, 0x14 => { Name => 'TimeCreated', Groups => { 2 => 'Time' }, Format => 'int8u[4]', Shift => 'Time', ValueConv => 'sprintf("%.2d:%.2d:%.2d.%.2d",split(" ", $val))', ValueConvInv => '$val=~tr/:./ /;$val', }, 0x18 => { Name => 'BurstMode2', Format => 'int16u', Unknown => 1, # not sure about this tag (or other 'Unknown' tags) }, 0x1b => { Name => 'ShutterMode', PrintConv => { #PH 0 => 'Auto', 8 => 'Aperture Priority', 32 => 'Manual?', }, }, 0x1c => { Name => 'MeteringMode', PrintConv => { #PH 0 => 'Multi-segment', 1 => 'Center-weighted average', 2 => 'Spot', }, }, 0x1d => 'SequenceNumber', 0x1e => { Name => 'FNumber', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => 'int($val * 100 + 0.5)', }, 0x20 => { Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val / 1e5', ValueConvInv => '$val * 1e5', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x24 => { Name => 'ExposureCompensation', Format => 'int16s', ValueConv => '$val / 1000', ValueConvInv => '$val * 1000', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x26 => { Name => 'VariousModes', Format => 'int16u', Unknown => 1, }, 0x28 => { Name => 'Distance1', Format => 'int32u', Unknown => 1, }, 0x2c => { Name => 'Distance2', Format => 'int32u', Unknown => 1, }, 0x30 => { Name => 'Distance3', Format => 'int32u', Unknown => 1, }, 0x34 => { Name => 'Distance4', Format => 'int32u', Unknown => 1, }, 0x38 => { Name => 'FocusMode', PrintConv => { 0 => 'Normal', 2 => 'Macro', }, }, 0x3a => { Name => 'VariousModes2', Format => 'int16u', Unknown => 1, }, 0x3c => { Name => 'PanoramaMode', Format => 'int16u', Unknown => 1, }, 0x3e => { Name => 'SubjectDistance', Format => 'int16u', Unknown => 1, }, 0x40 => { Name => 'WhiteBalance', Priority => 0, PrintConv => { #PH 0 => 'Auto', 1 => 'Flash?', 2 => 'Tungsten', 3 => 'Daylight', }, }, 0x5c => { Name => 'FlashMode', Flags => 'PrintHex', # various models express this number differently PrintConv => { #PH 0x00 => 'Auto', 0x01 => 'Fill Flash', 0x02 => 'Off', 0x03 => 'Red-Eye', 0x10 => 'Fill Flash', 0x20 => 'Off', 0x40 => 'Red-Eye?', }, }, 0x5d => { Name => 'FlashFired', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, 0x5e => { Name => 'ISOSetting', Format => 'int16u', PrintConv => '$val ? $val : "Auto"', PrintConvInv => '$val=~/^\d+$/ ? $val : 0', }, 0x60 => { Name => 'ISO', Format => 'int16u', }, 0x62 => { Name => 'TotalZoom', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', }, 0x64 => { Name => 'DateTimeStamp', Format => 'int16u', PrintConv => '$val ? "Mode $val" : "Off"', PrintConvInv => '$val=~tr/0-9//dc; $val ? $val : 0', }, 0x66 => { Name => 'ColorMode', Format => 'int16u', Flags => 'PrintHex', # various models express this number differently PrintConv => { #PH 0x01 => 'B&W', 0x02 => 'Sepia', 0x03 => 'B&W Yellow Filter', 0x04 => 'B&W Red Filter', 0x20 => 'Saturated Color', 0x40 => 'Neutral Color', 0x100 => 'Saturated Color', 0x200 => 'Neutral Color', 0x2000 => 'B&W', 0x4000 => 'Sepia', }, }, 0x68 => { Name => 'DigitalZoom', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', }, 0x6b => { Name => 'Sharpness', Format => 'int8s', %Image::ExifTool::Exif::printParameter, }, ); # Kodak type 2 maker notes (ref PH) %Image::ExifTool::Kodak::Type2 = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, NOTES => q{ These tags are used by the Kodak DC220, DC260, DC265 and DC290, Hewlett-Packard PhotoSmart 618, C500 and C912, Pentax EI-200 and EI-2000, and Minolta EX1500Z. }, WRITABLE => 1, FIRST_ENTRY => 0, 0x08 => { Name => 'KodakMaker', Format => 'string[32]', }, 0x28 => { Name => 'KodakModel', Format => 'string[32]', }, 0x6c => { Name => 'KodakImageWidth', Format => 'int32u', }, 0x70 => { Name => 'KodakImageHeight', Format => 'int32u', }, ); # Kodak type 3 maker notes (ref PH) %Image::ExifTool::Kodak::Type3 = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, NOTES => 'These tags are used by the DC240, DC280, DC3400 and DC5000.', WRITABLE => 1, FIRST_ENTRY => 0, 0x0c => { Name => 'YearCreated', Groups => { 2 => 'Time' }, Format => 'int16u', }, 0x0e => { Name => 'MonthDayCreated', Groups => { 2 => 'Time' }, Format => 'int8u[2]', ValueConv => 'sprintf("%.2d:%.2d",split(" ", $val))', ValueConvInv => '$val=~tr/:./ /;$val', }, 0x10 => { Name => 'TimeCreated', Groups => { 2 => 'Time' }, Format => 'int8u[4]', Shift => 'Time', ValueConv => 'sprintf("%2d:%.2d:%.2d.%.2d",split(" ", $val))', ValueConvInv => '$val=~tr/:./ /;$val', }, 0x1e => { Name => 'OpticalZoom', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', }, 0x37 => { Name => 'Sharpness', Format => 'int8s', %Image::ExifTool::Exif::printParameter, }, 0x38 => { Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val / 1e5', ValueConvInv => '$val * 1e5', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x3c => { Name => 'FNumber', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => 'int($val * 100 + 0.5)', }, 0x4e => { Name => 'ISO', Format => 'int16u', }, ); # Kodak type 4 maker notes (ref PH) %Image::ExifTool::Kodak::Type4 = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, NOTES => 'These tags are used by the DC200 and DC215.', WRITABLE => 1, FIRST_ENTRY => 0, 0x20 => { Name => 'OriginalFileName', Format => 'string[12]', }, ); # Kodak type 5 maker notes (ref PH) %Image::ExifTool::Kodak::Type5 = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, NOTES => q{ These tags are used by the CX4200, CX4210, CX4230, CX4300, CX4310, CX6200 and CX6230. }, WRITABLE => 1, FIRST_ENTRY => 0, 0x14 => { Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val / 1e5', ValueConvInv => '$val * 1e5', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x1a => { Name => 'WhiteBalance', PrintConv => { 1 => 'Daylight', 2 => 'Flash', 3 => 'Tungsten', }, }, 0x1c => { Name => 'FNumber', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => 'int($val * 100 + 0.5)', }, 0x1e => { Name => 'ISO', Format => 'int16u', }, 0x20 => { Name => 'OpticalZoom', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', }, 0x22 => { Name => 'DigitalZoom', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', }, 0x27 => { Name => 'FlashMode', PrintConv => { 0 => 'Auto', 1 => 'On', 2 => 'Off', 3 => 'Red-Eye', }, }, 0x2a => { Name => 'ImageRotated', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, 0x2b => { Name => 'Macro', PrintConv => { 0 => 'On', 1 => 'Off' }, }, ); # Kodak type 6 maker notes (ref PH) %Image::ExifTool::Kodak::Type6 = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, NOTES => 'These tags are used by the DX3215 and DX3700.', WRITABLE => 1, FIRST_ENTRY => 0, 0x10 => { Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val / 1e5', ValueConvInv => '$val * 1e5', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x14 => { Name => 'ISOSetting', Format => 'int32u', Unknown => 1, }, 0x18 => { Name => 'FNumber', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => 'int($val * 100 + 0.5)', }, 0x1a => { Name => 'ISO', Format => 'int16u', }, 0x1c => { Name => 'OpticalZoom', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', }, 0x1e => { Name => 'DigitalZoom', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', }, 0x22 => { Name => 'Flash', Format => 'int16u', PrintConv => { 0 => 'No Flash', 1 => 'Fired', }, }, ); # Kodak type 7 maker notes (ref PH) %Image::ExifTool::Kodak::Type7 = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, NOTES => q{ The maker notes of models such as the C340, C433, CC533, LS755, V803 and V1003 seem to start with the camera serial number. The C310, C315, C330, C643, C743, CD33, CD43, CX7220 and CX7300 maker notes are also decoded using this table, although the strings for these cameras don't conform to the usual Kodak serial number format, and instead have the model name followed by 8 digits. }, 0 => { # (not confirmed) Name => 'SerialNumber', Format => 'string[16]', ValueConv => '$val=~s/\s+$//; $val', # remove trailing whitespace ValueConvInv => '$val', }, ); # Kodak IFD-format maker notes (ref PH) %Image::ExifTool::Kodak::Type8 = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ Kodak models such as the ZD710, P712, P850, P880, V1233, V1253, V1275, V1285, Z612, Z712, Z812, Z885 use standard TIFF IFD format for the maker notes. In keeping with Kodak's strategy of inconsistent makernotes, models such as the M380, M1033, M1093, V1073, V1273, Z1012, Z1085 and Z8612 also use these tags, but these makernotes begin with a TIFF header instead of an IFD entry count and use relative instead of absolute offsets. There is a large amount of information stored in these maker notes (apparently with much duplication), but relatively few tags have so far been decoded. }, 0xfc00 => [{ Name => 'SubIFD0', Condition => '$format eq "undef"', Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set NestedHtmlDump => 2, # (so HtmlDump doesn't show these as double-referenced) SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SubIFD0', Base => '$start', ProcessProc => \&ProcessKodakIFD, WriteProc => \&WriteKodakIFD, }, },{ Name => 'SubIFD0', Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SubIFD0', Start => '$val', # (odd but true: the Base for this SubIFD is different than 0xfc01-0xfc06) }, }], # SubIFD1 and higher data is preceded by a TIFF byte order mark to indicate # the byte ordering used. Beginning with the M580, these subdirectories are # stored as 'undef' data rather than as a standard EXIF SubIFD. 0xfc01 => [{ Name => 'SubIFD1', Condition => '$format eq "undef"', Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SubIFD1', Base => '$start', }, },{ Name => 'SubIFD1', Condition => '$$valPt ne "\0\0\0\0"', # may be zero if dir doesn't exist Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SubIFD1', Start => '$val', Base => '$start', }, }], 0xfc02 => [{ Name => 'SubIFD2', Condition => '$format eq "undef"', Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SubIFD2', Base => '$start', }, },{ Name => 'SubIFD2', Condition => '$$valPt ne "\0\0\0\0"', # may be zero if dir doesn't exist Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SubIFD2', Start => '$val', Base => '$start', }, }], 0xfc03 => [{ Name => 'SubIFD3', Condition => '$format eq "undef"', Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SubIFD3', Base => '$start', }, },{ Name => 'SubIFD3', Condition => '$$valPt ne "\0\0\0\0"', # may be zero if dir doesn't exist Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SubIFD3', Start => '$val', Base => '$start', }, }], # (SubIFD4 has the pointer zeroed in my samples, but support it # in case it is used by future models -- ignored if pointer is zero) 0xfc04 => [{ Name => 'SubIFD4', Condition => '$format eq "undef"', Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SubIFD4', Base => '$start', }, },{ Name => 'SubIFD4', Condition => '$$valPt ne "\0\0\0\0"', # may be zero if dir doesn't exist Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SubIFD4', Start => '$val', Base => '$start', }, }], 0xfc05 => [{ Name => 'SubIFD5', Condition => '$format eq "undef"', Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SubIFD5', Base => '$start', }, },{ Name => 'SubIFD5', Condition => '$$valPt ne "\0\0\0\0"', # may be zero if dir doesn't exist Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SubIFD5', Start => '$val', Base => '$start', }, }], 0xfc06 => [{ # new for the M580 Name => 'SubIFD6', Condition => '$format eq "undef"', Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SubIFD6', Base => '$start', }, },{ Name => 'SubIFD6', Condition => '$$valPt ne "\0\0\0\0"', # may be zero if dir doesn't exist Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SubIFD6', Start => '$val', Base => '$start', }, }], 0xfcff => { Name => 'SubIFD255', Condition => '$format eq "undef"', Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SubIFD0', # (uses the same Base as the main MakerNote IFD) }, }, 0xff00 => { Name => 'CameraInfo', Condition => '$$valPt ne "\0\0\0\0"', # may be zero if dir doesn't exist Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::CameraInfo', Start => '$val', # (uses the same Base as the main MakerNote IFD) }, }, ); # Kodak type 9 maker notes (ref PH) %Image::ExifTool::Kodak::Type9 = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, NOTES => q{ These tags are used by the Kodak C140, C180, C913, C1013, M320, M340 and M550, as well as various cameras marketed by other manufacturers. }, 0x0c => [ { Name => 'FNumber', Condition => '$$self{Make} =~ /Kodak/i', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => 'int($val * 100 + 0.5)', },{ Name => 'FNumber', Format => 'int16u', ValueConv => '$val / 10', ValueConvInv => 'int($val * 10 + 0.5)', }, ], 0x10 => { Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val / 1e6', ValueConvInv => '$val * 1e6', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x14 => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, Format => 'string[20]', Shift => 'Time', ValueConv => '$val=~s{/}{:}g; $val', ValueConvInv => '$val=~s{^(\d{4}):(\d{2}):}{$1/$2/}; $val', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,0)', }, 0x34 => { Name => 'ISO', Format => 'int16u', }, 0x57 => { Name => 'FirmwareVersion', Condition => '$$self{Make} =~ /Kodak/i', Format => 'string[16]', Notes => 'Kodak only', }, 0xa8 => { Name => 'UnknownNumber', # (was SerialNumber, but not unique for all cameras. eg. C1013) Condition => '$$self{Make} =~ /Kodak/i and $$valPt =~ /^([A-Z0-9]{1,11}\0|[A-Z0-9]{12})/i', Format => 'string[12]', Notes => 'Kodak only', Writable => 0, }, 0xc4 => { Name => 'UnknownNumber', # (confirmed NOT to be serial number for Easyshare Mini - PH) Condition => '$$self{Make} =~ /Kodak/i and $$valPt =~ /^([A-Z0-9]{1,11}\0|[A-Z0-9]{12})/i', Format => 'string[12]', Notes => 'Kodak only', Writable => 0, }, ); # more Kodak IFD-format maker notes (ref PH) %Image::ExifTool::Kodak::Type10 = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PRIORITY => 0, NOTES => q{ Another variation of the IFD-format type, this time with just a byte order indicator instead of a full TIFF header. These tags are used by the Z980. }, # 0x01 int16u - always 0 0x02 => { Name => 'PreviewImageSize', Writable => 'int16u', Count => 2, }, # 0x03 int32u - ranges from about 33940 to 40680 # 0x04 int32u - always 18493 # 0x06 undef[4] - 07 d9 04 11 # 0x07 undef[3] - varies # 0x08 int16u - 1 (mostly), 2 # 0x09 int16u - 255 # 0x0b int16u[2] - '0 0' (mostly), '20 0', '21 0', '1 0' # 0x0c int16u - 1 (mostly), 3, 259, 260 # 0x0d int16u - 0 # 0x0e int16u - 0, 1, 2 (MeteringMode? 0=Partial, 1,2=Multi) # 0x0f int16u - 0, 5 (MeteringMode? 0=Multi, 5=Partial) # 0x10 int16u - ranges from about 902 to 2308 0x12 => { Name => 'ExposureTime', Writable => 'int32u', ValueConv => '$val / 1e5', ValueConvInv => '$val * 1e5', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x13 => { Name => 'FNumber', Writable => 'int16u', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x14 => { Name => 'ISO', Writable => 'int16u', ValueConv => 'exp($val/3*log(2))*25', ValueConvInv => '3*log($val/25)/log(2)', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, # 0x15 int16u - 18-25 (SceneMode? 21=auto, 24=Aperture Priority, 19=high speed) # 0x16 int16u - 50 # 0x17 int16u - 0, 65535 (MeteringMode? 0=Multi, 65535=Partial) # 0x19 int16u - 0, 4 (WhiteBalance? 0=Auto, 4=Manual) # 0x1a int16u - 0, 65535 # 0x1b int16u - 416-696 # 0x1c int16u - 251-439 (low when 0x1b is high) 0x1d => { Name => 'FocalLength', Writable => 'int32u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm//;$val', }, # 0x1e int16u - 100 # 0x1f int16u - 0, 1 # 0x20,0x21 int16u - 1 # 0x27 undef[4] - fe ff ff ff # 0x32 undef[4] - 00 00 00 00 # 0x61 int32u[2] - '0 0' or '34050 0' # 0x62 int8u - 0, 1 # 0x63 int8u - 1 # 0x64,0x65 int8u - 0, 1, 2 # 0x66 int32u - 0 # 0x67 int32u - 3 # 0x68 int32u - 0 # 0x3fe undef[2540] ); # Kodak PixPro S-1 maker notes (ref PH) # (similar to Ricoh::Type2 and GE::Main) %Image::ExifTool::Kodak::Type11 = ( # (can't currently write these) GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES =>q{ These tags are found in models such as the PixPro S-1. They are not writable because the inconsistency of Kodak maker notes is beginning to get on my nerves. }, 0x0203 => { Name => 'PictureEffect', PrintConv => { 0 => 'None', 3 => 'Monochrome', 9 => 'Kodachrome', }, }, # 0x0204 - ExposureComp or FlashExposureComp maybe? 0x0207 => 'KodakModel', 0x0300 => 'KodakMake', 0x0308 => 'LensSerialNumber', 0x0309 => 'LensModel', ); # Kodak SubIFD0 tags (ref PH) %Image::ExifTool::Kodak::SubIFD0 = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'SubIFD0 through SubIFD5 tags are written a number of newer Kodak models.', 0xfa02 => { Name => 'SceneMode', Writable => 'int16u', Notes => 'may not be valid for some models', # eg. M580? PrintConvColumns => 2, PrintConv => { 1 => 'Sport', 3 => 'Portrait', 4 => 'Landscape', 6 => 'Beach', 7 => 'Night Portrait', 8 => 'Night Landscape', 9 => 'Snow', 10 => 'Text', 11 => 'Fireworks', 12 => 'Macro', 13 => 'Museum', 16 => 'Children', 17 => 'Program', 18 => 'Aperture Priority', 19 => 'Shutter Priority', 20 => 'Manual', 25 => 'Back Light', 28 => 'Candlelight', 29 => 'Sunset', 31 => 'Panorama Left-right', 32 => 'Panorama Right-left', 33 => 'Smart Scene', 34 => 'High ISO', }, }, # 0xfa04 - values: 0 (normally), 2 (panorama shots) # 0xfa0f - values: 0 (normally), 1 (macro?) # 0xfa11 - some sort of FNumber (x 100) 0xfa19 => { Name => 'SerialNumber', # (verified with Z712 - PH) Writable => 'string', }, 0xfa1d => { Name => 'KodakImageWidth', Writable => 'int16u', }, 0xfa1e => { Name => 'KodakImageHeight', Writable => 'int16u', }, 0xfa20 => { Name => 'SensorWidth', Writable => 'int16u', }, 0xfa21 => { Name => 'SensorHeight', Writable => 'int16u', }, 0xfa23 => { Name => 'FNumber', Writable => 'int16u', Priority => 0, ValueConv => '$val / 100', ValueConvInv => '$val * 100', }, 0xfa24 => { Name => 'ExposureTime', Writable => 'int32u', Priority => 0, ValueConv => '$val / 1e5', ValueConvInv => '$val * 1e5', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0xfa2e => { Name => 'ISO', Writable => 'int16u', Priority => 0, }, 0xfa3d => { Name => 'OpticalZoom', Writable => 'int16u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => 'sprintf("%.2f",$val)', PrintConvInv => '$val=~s/ ?x//; $val', }, 0xfa46 => { Name => 'ISO', Writable => 'int16u', Priority => 0, }, # 0xfa4c - related to focal length (1=wide, 32=full zoom) 0xfa51 => { Name => 'KodakImageWidth', Writable => 'int16u', }, 0xfa52 => { Name => 'KodakImageHeight', Writable => 'int16u', }, 0xfa54 => { Name => 'ThumbnailWidth', Writable => 'int16u', }, 0xfa55 => { Name => 'ThumbnailHeight', Writable => 'int16u', }, 0xfa57 => { Name => 'PreviewImageWidth', Writable => 'int16u', }, 0xfa58 => { Name => 'PreviewImageHeight', Writable => 'int16u', }, ); # Kodak SubIFD1 tags (ref PH) %Image::ExifTool::Kodak::SubIFD1 = ( PROCESS_PROC => \&ProcessKodakIFD, WRITE_PROC => \&WriteKodakIFD, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x0027 => { Name => 'ISO', Writable => 'int16u', Priority => 0, }, 0x0028 => { Name => 'ISO', Writable => 'int16u', Priority => 0, }, ); my %sceneModeUsed = ( 0 => 'Program', 2 => 'Aperture Priority', 3 => 'Shutter Priority', 4 => 'Manual', 5 => 'Portrait', 6 => 'Sport', 7 => 'Children', 8 => 'Museum', 10 => 'High ISO', 11 => 'Text', 12 => 'Macro', 13 => 'Back Light', 16 => 'Landscape', 17 => 'Night Landscape', 18 => 'Night Portrait', 19 => 'Snow', 20 => 'Beach', 21 => 'Fireworks', 22 => 'Sunset', 23 => 'Candlelight', 28 => 'Panorama', ); # Kodak SubIFD2 tags (ref PH) %Image::ExifTool::Kodak::SubIFD2 = ( PROCESS_PROC => \&ProcessKodakIFD, WRITE_PROC => \&WriteKodakIFD, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x6002 => { Name => 'SceneModeUsed', Writable => 'int32u', PrintConvColumns => 2, PrintConv => \%sceneModeUsed, }, 0x6006 => { Name => 'OpticalZoom', Writable => 'int32u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => 'sprintf("%.2f",$val)', PrintConvInv => '$val=~s/ ?x//; $val', }, # 0x6009 - some sort of FNumber (x 100) 0x6103 => { Name => 'MaxAperture', Writable => 'int32u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', }, 0xf002 => { Name => 'SceneModeUsed', Writable => 'int32u', PrintConvColumns => 2, PrintConv => \%sceneModeUsed, }, 0xf006 => { Name => 'OpticalZoom', Writable => 'int32u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => 'sprintf("%.2f",$val)', PrintConvInv => '$val=~s/ ?x//; $val', }, # 0xf009 - some sort of FNumber (x 100) 0xf103 => { Name => 'FNumber', Writable => 'int32u', Priority => 0, ValueConv => '$val / 100', ValueConvInv => '$val * 100', }, 0xf104 => { Name => 'ExposureTime', Writable => 'int32u', Priority => 0, ValueConv => '$val / 1e6', ValueConvInv => '$val * 1e6', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0xf105 => { Name => 'ISO', Writable => 'int32u', Priority => 0, ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, ); # Kodak SubIFD3 tags (ref PH) %Image::ExifTool::Kodak::SubIFD3 = ( PROCESS_PROC => \&ProcessKodakIFD, WRITE_PROC => \&WriteKodakIFD, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x1000 => { Name => 'OpticalZoom', Writable => 'int16u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => 'sprintf("%.2f",$val)', PrintConvInv => '$val=~s/ ?x//; $val', }, # 0x1002 - related to focal length (1=wide, 32=full zoom) # 0x1006 - pictures remaining? (gradually decreases as pictures are taken) # # the following unknown Kodak tags in subIFD3 may store an IFD count of 0 or 1 instead # of the correct value (which changes from model to model). This bad count is fixed # with the "FixCount" patch. Models known to have this problem include: # M380, M1033, M1093IS, V1073, V1233, V1253, V1273, V1275, V1285, Z612, Z712, # Z812, Z885, Z915, Z950, Z1012IS, Z1085IS, ZD710 # 0x2007 => { Name => 'Kodak_SubIFD3_0x2007', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x2008 => { Name => 'Kodak_SubIFD3_0x2008', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x2009 => { Name => 'Kodak_SubIFD3_0x2009', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x200a => { Name => 'Kodak_SubIFD3_0x200a', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x200b => { Name => 'Kodak_SubIFD3_0x200b', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x3020 => { Name => 'Kodak_SubIFD3_0x3020', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x3030 => { Name => 'Kodak_SubIFD3_0x3030', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x3040 => { Name => 'Kodak_SubIFD3_0x3040', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x3050 => { Name => 'Kodak_SubIFD3_0x3050', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x3060 => { Name => 'Kodak_SubIFD3_0x3060', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x8001 => { Name => 'Kodak_SubIFD3_0x8001', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x8002 => { Name => 'Kodak_SubIFD3_0x8002', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x8003 => { Name => 'Kodak_SubIFD3_0x8003', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x8004 => { Name => 'Kodak_SubIFD3_0x8004', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x8005 => { Name => 'Kodak_SubIFD3_0x8005', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x8006 => { Name => 'Kodak_SubIFD3_0x8006', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x8007 => { Name => 'Kodak_SubIFD3_0x8007', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x8008 => { Name => 'Kodak_SubIFD3_0x8008', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x8009 => { Name => 'Kodak_SubIFD3_0x8009', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x800a => { Name => 'Kodak_SubIFD3_0x800a', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x800b => { Name => 'Kodak_SubIFD3_0x800b', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, 0x800c => { Name => 'Kodak_SubIFD3_0x800c', Flags => [ 'FixCount', 'Unknown', 'Hidden' ], }, ); # Kodak SubIFD4 tags (ref PH) %Image::ExifTool::Kodak::SubIFD4 = ( PROCESS_PROC => \&ProcessKodakIFD, WRITE_PROC => \&WriteKodakIFD, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, ); # Kodak SubIFD5 tags (ref PH) %Image::ExifTool::Kodak::SubIFD5 = ( PROCESS_PROC => \&ProcessKodakIFD, WRITE_PROC => \&WriteKodakIFD, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x000f => { Name => 'OpticalZoom', Writable => 'int16u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => 'sprintf("%.2f",$val)', PrintConvInv => '$val=~s/ ?x//; $val', }, ); # Kodak SubIFD6 tags (ref PH) %Image::ExifTool::Kodak::SubIFD6 = ( PROCESS_PROC => \&ProcessKodakIFD, WRITE_PROC => \&WriteKodakIFD, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'SubIFD6 is written by the M580.', ); # Decoded from P712, P850 and P880 samples (ref PH) %Image::ExifTool::Kodak::CameraInfo = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'These tags are used by the P712, P850 and P880.', 0xf900 => { Name => 'SensorWidth', Writable => 'int16u', Notes => 'effective sensor size', }, 0xf901 => { Name => 'SensorHeight', Writable => 'int16u', }, 0xf902 => { Name => 'BayerPattern', Writable => 'string', }, 0xf903 => { Name => 'SensorFullWidth', Writable => 'int16u', Notes => 'includes black border?', }, 0xf904 => { Name => 'SensorFullHeight', Writable => 'int16u', }, 0xf907 => { Name => 'KodakImageWidth', Writable => 'int16u', }, 0xf908 => { Name => 'KodakImageHeight', Writable => 'int16u', }, 0xfa00 => { Name => 'KodakInfoType', Writable => 'string', }, 0xfa04 => { Name => 'SerialNumber', # (unverified) Writable => 'string', }, 0xfd04 => { Name => 'FNumber', Writable => 'int16u', Priority => 0, ValueConv => '$val / 100', ValueConvInv => '$val * 100', }, 0xfd05 => { Name => 'ExposureTime', Writable => 'int32u', Priority => 0, ValueConv => '$val / 1e6', ValueConvInv => '$val * 1e6', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0xfd06 => { Name => 'ISO', Writable => 'int16u', Priority => 0, }, ); # treat unknown maker notes as binary data (allows viewing with -U) %Image::ExifTool::Kodak::Unknown = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FIRST_ENTRY => 0, ); # tags found in the KodakIFD (in IFD0 of KDC, DCR, TIFF and JPEG images) (ref PH) %Image::ExifTool::Kodak::IFD = ( GROUPS => { 0 => 'MakerNotes', 1 => 'KodakIFD', 2 => 'Image'}, WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITE_GROUP => 'KodakIFD', SET_GROUP1 => 1, NOTES => q{ These tags are found in a separate IFD of JPEG, TIFF, DCR and KDC images from some older Kodak models such as the DC50, DC120, DCS760C, DCS Pro 14N, 14nx, SLR/n, Pro Back and Canon EOS D2000. }, # 0x0000: int8u[4] - values: "1 0 0 0" (DC50), "1 1 0 0" (DC120) 0x0001 => { # (related to EV but exact meaning unknown) Name => 'UnknownEV', Writable => 'rational64u', Unknown => 1, }, # 0x0002: int8u - values: 0 0x0003 => { Name => 'ExposureValue', Writable => 'rational64u', }, # 0x0004: rational64u - values: 2.875,3.375,3.625,4,4.125,7.25 # 0x0005: int8u - values: 0 # 0x0006: int32u[12] - ? # 0x0007: int32u[3] - values: "65536 67932 69256" 0x03e9 => { Name => 'OriginalFileName', Writable => 'string' }, 0x03eb => 'SensorLeftBorder', 0x03ec => 'SensorTopBorder', 0x03ed => 'SensorImageWidth', 0x03ee => 'SensorImageHeight', 0x03f1 => { Name => 'TextualInfo', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::TextualInfo', }, }, # 0x03f2 - FlashMode (ref 4) # 0x03f3 - FlashCompensation (ref 4) # 0x03f8 - MinAperture (ref 4) # 0x03f9 - MaxAperture (ref 4) 0x03fc => { #3 Name => 'WhiteBalance', Writable => 'int16u', Priority => 0, PrintConv => { }, # no values yet known }, 0x03fd => { #3 Name => 'Processing', Condition => '$count == 72', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Processing', }, }, 0x0401 => { Name => 'Time', Groups => { 2 => 'Time' }, Writable => 'string', }, 0x0406 => { #4 Name => 'CameraTemperature', # (when count is 2, values seem related to temperature, but are not Celius) Condition => '$count == 1', Groups => { 2 => 'Camera' }, Writable => 'rational64s', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, 0x0407 => { #4 Name => 'AdapterVoltage', Groups => { 2 => 'Camera' }, Writable => 'rational64u', }, 0x0408 => { #4 Name => 'BatteryVoltage', Groups => { 2 => 'Camera' }, Writable => 'rational64u', }, 0x0414 => { Name => 'NCDFileInfo', Writable => 'string' }, 0x0846 => { #3 Name => 'ColorTemperature', Writable => 'int16u', }, 0x0848 => 'WB_RGBLevelsDaylight', #4 0x0849 => 'WB_RGBLevelsTungsten', #4 0x084a => 'WB_RGBLevelsFluorescent', #4 0x084b => 'WB_RGBLevelsFlash', #4 0x084c => 'WB_RGBLevelsCustom', #4 0x084d => 'WB_RGBLevelsAuto', #4 0x0852 => 'WB_RGBMul0', #3 0x0853 => 'WB_RGBMul1', #3 0x0854 => 'WB_RGBMul2', #3 0x0855 => 'WB_RGBMul3', #3 0x085c => { Name => 'WB_RGBCoeffs0', Binary => 1 }, #3 0x085d => { Name => 'WB_RGBCoeffs1', Binary => 1 }, #3 0x085e => { Name => 'WB_RGBCoeffs2', Binary => 1 }, #3 0x085f => { Name => 'WB_RGBCoeffs3', Binary => 1 }, #3 # 0x089d => true analogue ISO values possible (ref 4) # 0x089e => true analogue ISO used at capture (ref 4) # 0x089f => ISO calibration gain (ref 4) # 0x08a0 => ISO calibration gain table (ref 4) # 0x08a1 => exposure headroom coefficient (ref 4) 0x0903 => { Name => 'BaseISO', Writable => 'rational64u' }, #4 (ISO before digital gain) # 0x090d: linear table (ref 3) 0x09ce => { Name => 'SensorSerialNumber', Writable => 'string', Groups => { 2 => 'Camera' } }, #4 # 0x0c81: some sort of date (manufacture date?) - PH 0x0ce5 => { Name => 'FirmwareVersion', Writable => 'string', Groups => { 2 => 'Camera' } }, 0x0e4c => { #4 Name => 'KodakLook', Format => 'undef', Writable => 'string', ValueConv => '$val=~tr/\0/\n/; $val', ValueConvInv => '$val=~tr/\n/\0/; $val', }, 0x1389 => { Name => 'InputProfile', Writable => 'undef', Binary => 1 }, #4 0x138a => { Name => 'KodakLookProfile', Writable => 'undef', Binary => 1 }, #4 0x138b => { Name => 'OutputProfile', Writable => 'undef', Binary => 1 }, #4 # 0x1390: value: "DCSProSLRn" (tone curve name?) - PH 0x1391 => { Name => 'ToneCurveFileName',Writable => 'string' }, 0x1784 => { Name => 'ISO', Writable => 'int32u' }, #3 ); # contains WB adjust set in software (ref 3) %Image::ExifTool::Kodak::Processing = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int16u', FIRST_ENTRY => 0, 20 => { Name => 'WB_RGBLevels', Format => 'int16u[3]', ValueConv => q{ my @a = split ' ',$val; foreach (@a) { $_ = 2048 / $_ if $_; } return join ' ', @a; } }, ); # tags found in the Kodak KDC_IFD (in IFD0 of KDC images) (ref 3) %Image::ExifTool::Kodak::KDC_IFD = ( GROUPS => { 0 => 'MakerNotes', 1 => 'KDC_IFD', 2 => 'Image'}, WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITE_GROUP => 'KDC_IFD', SET_GROUP1 => 1, NOTES => q{ These tags are found in a separate IFD of KDC images from some newer Kodak models such as the P880 and Z1015IS. }, 0xfa00 => { Name => 'SerialNumber', #PH (unverified) Writable => 'string', }, 0xfa0d => { Name => 'WhiteBalance', Writable => 'int8u', PrintConv => { #PH 0 => 'Auto', 1 => 'Fluorescent', # (NC) 2 => 'Tungsten', # (NC) 3 => 'Daylight', # (NC) 6 => 'Shade', # (NC, called "Open Shade" by Kodak) }, }, # the following tags are numbered for use in the Composite tag lookup 0xfa25 => 'WB_RGBLevelsAuto', 0xfa27 => 'WB_RGBLevelsTungsten', # (NC) 0xfa28 => 'WB_RGBLevelsFluorescent', # (NC) 0xfa29 => 'WB_RGBLevelsDaylight', # (NC) 0xfa2a => 'WB_RGBLevelsShade', # (NC) ); # textual-based Kodak TextualInfo tags (not found in KDC images) (ref PH) %Image::ExifTool::Kodak::TextualInfo = ( GROUPS => { 0 => 'MakerNotes', 1 => 'Kodak', 2 => 'Image'}, PROCESS_PROC => \&ProcessKodakText, NOTES => q{ Below is a list of tags which have been observed in the Kodak TextualInfo data, however ExifTool will extract information from any tags found here. }, 'Actual Compensation' => 'ActualCompensation', 'AF Function' => 'AFMode', # values: "S" (=Single?, then maybe C for Continuous, M for Manual?) - PH 'Aperture' => { Name => 'Aperture', ValueConv => '$val=~s/^f//i; $val', }, 'Auto Bracket' => 'AutoBracket', 'Brightness Value' => 'BrightnessValue', 'Camera' => 'CameraModel', 'Camera body' => 'CameraBody', 'Compensation' => 'ExposureCompensation', 'Date' => { Name => 'Date', Groups => { 2 => 'Time' }, }, 'Exposure Bias' => 'ExposureBias', 'Exposure Mode' => { Name => 'ExposureMode', PrintConv => { 'M' => 'Manual', 'A' => 'Aperture Priority', #(NC -- I suppose this could be "Auto" too) 'S' => 'Shutter Priority', #(NC) 'P' => 'Program', #(NC) 'B' => 'Bulb', #(NC) # have seen "Manual (M)" written by DCS760C - PH }, }, 'Firmware Version' => 'FirmwareVersion', 'Flash Compensation' => 'FlashExposureComp', 'Flash Fired' => 'FlashFired', 'Flash Sync Mode' => 'FlashSyncMode', 'Focal Length' => { Name => 'FocalLength', PrintConv => '"$val mm"', }, 'Height' => 'KodakImageHeight', 'Image Number' => 'ImageNumber', 'ISO' => 'ISO', 'ISO Speed' => 'ISO', 'Max Aperture' => { Name => 'MaxAperture', ValueConv => '$val=~s/^f//i; $val', }, 'Meter Mode' => 'MeterMode', 'Min Aperture' => { Name => 'MinAperture', ValueConv => '$val=~s/^f//i; $val', }, 'Popup Flash' => 'PopupFlash', 'Serial Number' => 'SerialNumber', 'Shooting Mode' => 'ShootingMode', 'Shutter' => 'ShutterSpeed', 'Temperature' => 'Temperature', # with a value of 15653, what could this be? - PH 'Time' => { Name => 'Time', Groups => { 2 => 'Time' }, }, 'White balance' => 'WhiteBalance', 'Width' => 'KodakImageWidth', '_other_info' => { Name => 'OtherInfo', Notes => 'any other information without a tag name', }, ); # Kodak APP3 "Meta" tags (ref 2) %Image::ExifTool::Kodak::Meta = ( GROUPS => { 0 => 'Meta', 1 => 'MetaIFD', 2 => 'Image'}, WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITE_GROUP => 'MetaIFD', # default write group NOTES => q{ These tags are found in the APP3 "Meta" segment of JPEG images from Kodak cameras such as the DC280, DC3400, DC5000, MC3, M580, Z950 and Z981. The structure of this segment is similar to the APP1 "Exif" segment, but a different set of tags is used. }, 0xc350 => 'FilmProductCode', 0xc351 => 'ImageSourceEK', 0xc352 => 'CaptureConditionsPAR', 0xc353 => { Name => 'CameraOwner', Writable => 'undef', RawConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val,$tag)', RawConvInv => 'Image::ExifTool::Exif::EncodeExifText($self,$val)', }, 0xc354 => { Name => 'SerialNumber', Writable => 'undef', Groups => { 2 => 'Camera' }, RawConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val,$tag)', #PH RawConvInv => 'Image::ExifTool::Exif::EncodeExifText($self,$val)', }, 0xc355 => 'UserSelectGroupTitle', 0xc356 => 'DealerIDNumber', 0xc357 => 'CaptureDeviceFID', 0xc358 => 'EnvelopeNumber', 0xc359 => 'FrameNumber', 0xc35a => 'FilmCategory', 0xc35b => 'FilmGencode', 0xc35c => 'ModelAndVersion', 0xc35d => 'FilmSize', 0xc35e => 'SBA_RGBShifts', 0xc35f => 'SBAInputImageColorspace', 0xc360 => 'SBAInputImageBitDepth', 0xc361 => { Name => 'SBAExposureRecord', Binary => 1, }, 0xc362 => { Name => 'UserAdjSBA_RGBShifts', Binary => 1, }, 0xc363 => 'ImageRotationStatus', 0xc364 => 'RollGuidElements', 0xc365 => 'MetadataNumber', 0xc366 => 'EditTagArray', 0xc367 => 'Magnification', # 0xc36b - string[8]: "1.0" 0xc36c => 'NativeXResolution', 0xc36d => 'NativeYResolution', 0xc36e => { Name => 'KodakEffectsIFD', Flags => 'SubIFD', Groups => { 1 => 'KodakEffectsIFD' }, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::SpecialEffects', Start => '$val', }, }, 0xc36f => { Name => 'KodakBordersIFD', Flags => 'SubIFD', Groups => { 1 => 'KodakBordersIFD' }, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Borders', Start => '$val', }, }, 0xc37a => 'NativeResolutionUnit', 0xc418 => 'SourceImageDirectory', 0xc419 => 'SourceImageFileName', 0xc41a => 'SourceImageVolumeName', 0xc46c => 'PrintQuality', 0xc46e => 'ImagePrintStatus', # 0cx46f - int16u: 1 ); # Kodak APP3 "Meta" Special Effects sub-IFD (ref 2) %Image::ExifTool::Kodak::SpecialEffects = ( GROUPS => { 0 => 'Meta', 1 => 'KodakEffectsIFD', 2 => 'Image'}, WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, 0 => 'DigitalEffectsVersion', 1 => { Name => 'DigitalEffectsName', PrintConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val,"DigitalEffectsName")', }, 2 => 'DigitalEffectsType', ); # Kodak APP3 "Meta" Borders sub-IFD (ref 2) %Image::ExifTool::Kodak::Borders = ( GROUPS => { 0 => 'Meta', 1 => 'KodakBordersIFD', 2 => 'Image'}, WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, 0 => 'BordersVersion', 1 => { Name => 'BorderName', PrintConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val,"BorderName")', }, 2 => 'BorderID', 3 => 'BorderLocation', 4 => 'BorderType', 8 => 'WatermarkType', ); # tags in Kodak MOV videos (ref PH) # (similar information in Kodak,Minolta,Nikon,Olympus,Pentax and Sanyo videos) %Image::ExifTool::Kodak::MOV = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, NOTES => q{ This information is found in the TAGS atom of MOV videos from Kodak models such as the P880. }, 0 => { Name => 'Make', Format => 'string[21]', }, 0x16 => { Name => 'Model', Format => 'string[42]', }, 0x40 => { Name => 'ModelType', Format => 'string[8]', }, # (01 00 at offset 0x48) 0x4e => { Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val ? 10 / $val : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x52 => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', }, 0x5a => { Name => 'ExposureCompensation', Format => 'rational64s', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', }, # 0x6c => 'WhiteBalance', ? 0x70 => { Name => 'FocalLength', Format => 'rational64u', PrintConv => 'sprintf("%.1f mm",$val)', }, ); # Kodak DcMD atoms (ref PH) %Image::ExifTool::Kodak::DcMD = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, NOTES => 'Metadata directory found in MOV and MP4 videos from some Kodak cameras.', Cmbo => { Name => 'CameraByteOrder', PrintConv => { II => 'Little-endian (Intel, II)', MM => 'Big-endian (Motorola, MM)', }, }, CMbo => { # (as written by Kodak Playsport video camera) Name => 'CameraByteOrder', PrintConv => { II => 'Little-endian (Intel, II)', MM => 'Big-endian (Motorola, MM)', }, }, DcME => { Name => 'DcME', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::DcME', }, }, DcEM => { Name => 'DcEM', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::DcEM', }, }, ); # Kodak DcME atoms (ref PH) %Image::ExifTool::Kodak::DcME = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, # Mtmd - 24 bytes: ("00 00 00 00 00 00 00 01" x 3) # Keyw - keywords? (six bytes all zero) # Rate - 2 bytes: 00 00 ); # Kodak DcEM atoms (ref PH) %Image::ExifTool::Kodak::DcEM = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, # Mtmd - 24 bytes: ("00 00 00 00 00 00 00 01" x 3) # Csat - 16 bytes: 00 06 00 00 62 00 61 00 73 00 69 00 63 00 00 00 [....b.a.s.i.c...] # Ksre - 8 bytes: 00 01 00 00 00 00 ); # tags in "free" atom of Kodak M5370 MP4 videos (ref PH) %Image::ExifTool::Kodak::Free = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, NOTES => q{ Information stored in the "free" atom of Kodak MP4 videos. (VERY bad form for Kodak to store useful information in an atom intended for unused space!) }, # (2012/01/19: Kodak files for bankruptcy -- this is poetic metadata justice) Seri => { Name => 'SerialNumber', # byte 0 is string length; byte 1 is zero; string starts at byte 2 ValueConv => 'substr($val, 2, unpack("C",$val))', }, SVer => { Name => 'FirmwareVersion', ValueConv => 'substr($val, 2, unpack("C",$val))', }, # Clor - 2 bytes: 0 1 (?) # CapM - 2 bytes: 0 1 (capture mode? = exposure mode?) # WBMD - 2 bytes: 0 0 (white balance?) Expc => { # (NC) Name => 'ExposureCompensation', Format => 'int16s', ValueConv => '$val / 3', # (guess) PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', }, # Zone - 2 bytes: 0 2 (time zone? focus zone?) # FoMD - 2 bytes: 0 0 (focus mode?) # Shap - 2 bytes: 0 2 (sharpness?) Expo => { Name => 'ExposureTime', Format => 'rational32u', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, FNum => { Name => 'FNumber', Format => 'int16u', ValueConv => '$val / 100', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', }, ISOS => { Name => 'ISO', Format => 'int16u' }, StSV => { Name => 'ShutterSpeedValue', Format => 'int16s', ValueConv => 'abs($val)<100 ? 2**(-$val/3) : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, AprV => { Name => 'ApertureValue', Format => 'int16s', ValueConv => '2 ** ($val / 2000)', PrintConv => 'sprintf("%.1f",$val)', }, BrtV => { # (NC) Name => 'BrightnessValue', Format => 'int32s', ValueConv => '$val / 1000', # (guess) }, FoLn => { Name => 'FocalLength', Groups => { 2 => 'Camera' }, Format => 'int16u', PrintConv => 'sprintf("%.1f mm",$val)', }, FL35 => { Name => 'FocalLengthIn35mmFormat', Groups => { 2 => 'Camera' }, Format => 'int16u', PrintConv => '"$val mm"', }, Scrn => { Name => 'PreviewInfo', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Scrn' }, }, ); # tags in "frea" atom of Kodak PixPro SP360 MP4 videos (ref PH) %Image::ExifTool::Kodak::frea = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, NOTES => 'Information stored in the "frea" atom of Kodak PixPro SP360 MP4 videos.', # tima - 4 bytes: 0 0 0 0x20 thma => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Binary => 1 }, scra => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Binary => 1 }, ); # preview information in free/Scrn atom of MP4 videos (ref PH) %Image::ExifTool::Kodak::Scrn = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int16u', 0 => 'PreviewImageWidth', 1 => 'PreviewImageHeight', 2 => { Name => 'PreviewImageLength', Format => 'int32u' }, 4 => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Format => 'undef[$val{2}]', RawConv => '$self->ValidateImage(\$val, $tag)', }, ); # Kodak composite tags %Image::ExifTool::Kodak::Composite = ( GROUPS => { 2 => 'Camera' }, DateCreated => { Groups => { 2 => 'Time' }, Require => { 0 => 'Kodak:YearCreated', 1 => 'Kodak:MonthDayCreated', }, ValueConv => '"$val[0]:$val[1]"', }, WB_RGBLevels => { Require => { 0 => 'KDC_IFD:WhiteBalance', }, # indices of the following entries are KDC_IFD:WhiteBalance + 1 Desire => { 1 => 'WB_RGBLevelsAuto', 2 => 'WB_RGBLevelsFluorescent', 3 => 'WB_RGBLevelsTungsten', 4 => 'WB_RGBLevelsDaylight', 5 => 'WB_RGBLevels4', 6 => 'WB_RGBLevels5', 7 => 'WB_RGBLevelsShade', }, ValueConv => '$val[$val[0] + 1]', }, WB_RGBLevels2 => { Name => 'WB_RGBLevels', Require => { 0 => 'KodakIFD:WhiteBalance', 1 => 'WB_RGBMul0', 2 => 'WB_RGBMul1', 3 => 'WB_RGBMul2', 4 => 'WB_RGBMul3', 5 => 'WB_RGBCoeffs0', 6 => 'WB_RGBCoeffs1', 7 => 'WB_RGBCoeffs2', 8 => 'WB_RGBCoeffs3', }, # indices of the following entries are KDC_IFD:WhiteBalance + 1 Desire => { 9 => 'KodakIFD:ColorTemperature', 10 => 'Kodak:WB_RGBLevels', }, ValueConv => 'Image::ExifTool::Kodak::CalculateRGBLevels(@val)', }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::Kodak'); #------------------------------------------------------------------------------ # Calculate RGB levels from associated tags (ref 3) # Inputs: 0) KodakIFD:WhiteBalance, 1-4) WB_RGBMul0-3, 5-8) WB_RGBCoeffs0-3 # 9) (optional) KodakIFD:ColorTemperature, 10) (optional) Kodak:WB_RGBLevels # Returns: WB_RGBLevels or undef sub CalculateRGBLevels(@) { return undef if $_[10]; # use existing software levels if they exist my $wbi = $_[0]; return undef if $wbi < 0 or $wbi > 3; my @mul = split ' ', $_[$wbi + 1], 13; # (only use the first 12 coeffs) my @coefs = split ' ', ${$_[$wbi + 5]}; # (extra de-reference for Binary data) my $wbtemp100 = ($_[9] || 6500) / 100; return undef unless @mul >= 3 and @coefs >= 12; my ($i, $c, $n, $num, @cam_mul); for ($c=$n=0; $c<3; ++$c) { for ($num=$i=0; $i<4; ++$i) { $num += $coefs[$n++] * ($wbtemp100 ** $i); } $cam_mul[$c] = 2048 / ($num * $mul[$c]); } return join(' ', @cam_mul); } #------------------------------------------------------------------------------ # Process Kodak textual TextualInfo # Inputs: 0) ExifTool object ref, 1) dirInfo hash ref, 2) tag table ref # Returns: 1 on success sub ProcessKodakText($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || length($$dataPt) - $dirStart; my $data = substr($$dataPt, $dirStart, $dirLen); $data =~ s/\0.*//s; # truncate at null if it exists my @lines = split /[\n\r]+/, $data; my ($line, $success, @other, $tagInfo); $et->VerboseDir('Kodak Text'); foreach $line (@lines) { if ($line =~ /(.*?):\s*(.*)/) { my ($tag, $val) = ($1, $2); if ($$tagTablePtr{$tag}) { $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); } else { my $tagName = $tag; $tagName =~ s/([A-Z])\s+([A-Za-z])/${1}_\U$2/g; $tagName =~ s/([a-z])\s+([A-Za-z0-9])/${1}\U$2/g; $tagName =~ s/\s+//g; $tagName =~ s/[^-\w]+//g; # delete remaining invalid characters $tagName = 'NoName' unless $tagName; $tagInfo = { Name => $tagName }; AddTagToTable($tagTablePtr, $tag, $tagInfo); } $et->HandleTag($tagTablePtr, $tag, $val, TagInfo => $tagInfo); $success = 1; } else { # strip off leading/trailing white space and ignore blank lines push @other, $1 if $line =~ /^\s*(\S.*?)\s*$/; } } if ($success) { if (@other) { $tagInfo = $et->GetTagInfo($tagTablePtr, '_other_info'); $et->FoundTag($tagInfo, \@other); } } else { $et->Warn("Can't parse Kodak TextualInfo data", 1); } return $success; } #------------------------------------------------------------------------------ # Process Kodak IFD (with leading byte order mark) # Inputs: 0) ExifTool object ref, 1) dirInfo hash ref, 2) tag table ref # Returns: 1 on success, otherwise returns 0 and sets a Warning sub ProcessKodakIFD($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dirStart = $$dirInfo{DirStart} || 0; return 1 if $dirStart <= 0 or $dirStart + 2 > $$dirInfo{DataLen}; my $byteOrder = substr(${$$dirInfo{DataPt}}, $dirStart, 2); unless (Image::ExifTool::SetByteOrder($byteOrder)) { $et->Warn("Invalid Kodak $$dirInfo{Name} directory"); return 1; } $$dirInfo{DirStart} += 2; # skip byte order mark $$dirInfo{DirLen} -= 2; if ($$et{HTML_DUMP}) { my $base = $$dirInfo{Base} + $$dirInfo{DataPos}; $et->HDump($dirStart+$base, 2, "Byte Order Mark"); } return Image::ExifTool::Exif::ProcessExif($et, $dirInfo, $tagTablePtr); } #------------------------------------------------------------------------------ # Write Kodak IFD (with leading byte order mark) # Inputs: 0) ExifTool object ref, 1) source dirInfo ref, 2) tag table ref # Returns: Exif data block (may be empty if no Exif data) or undef on error sub WriteKodakIFD($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dirStart = $$dirInfo{DirStart} || 0; return '' if $dirStart <= 0 or $dirStart + 2 > $$dirInfo{DataLen}; my $byteOrder = substr(${$$dirInfo{DataPt}}, $dirStart, 2); return '' unless Image::ExifTool::SetByteOrder($byteOrder); $$dirInfo{DirStart} += 2; # skip byte order mark $$dirInfo{DirLen} -= 2; my $buff = Image::ExifTool::Exif::WriteExif($et, $dirInfo, $tagTablePtr); return $buff unless defined $buff and length $buff; # apply one-time fixup for length of byte order mark if ($$dirInfo{Fixup}) { $dirInfo->{Fixup}->{Shift} += 2; $$dirInfo{Fixup}->ApplyFixup(\$buff); delete $$dirInfo{Fixup}; } return Image::ExifTool::GetByteOrder() . $buff; } 1; # end __END__ =head1 NAME Image::ExifTool::Kodak - Kodak EXIF maker notes and APP3 "Meta" tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Kodak maker notes EXIF meta information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<Image::MetaData::JPEG|Image::MetaData::JPEG> =item L<http://www.ozhiker.com/electronics/pjmt/jpeg_info/meta.html> =item L<http://www.cybercom.net/~dcoffin/dcraw/> =item (...plus lots of testing with my daughter's CX4200!) =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Kodak Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/KyoceraRaw.pm�����������������������������������������������000644 �000765 �000024 �00000010474 12642461316 022324� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: KyoceraRaw.pm # # Description: Read Kyocera RAW meta information # # Revisions: 02/17/2006 - P. Harvey Created # # References: 1) http://www.cybercom.net/~dcoffin/dcraw/ #------------------------------------------------------------------------------ package Image::ExifTool::KyoceraRaw; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.03'; sub ProcessRAW($$); # utility to reverse order of characters in a string sub ReverseString($) { pack('C*',reverse unpack('C*',shift)) } # Contax N Digital tags (ref PH) %Image::ExifTool::KyoceraRaw::Main = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Tags for Kyocera Contax N Digital RAW images.', 0x01 => { Name => 'FirmwareVersion', Format => 'string[10]', ValueConv => \&ReverseString, }, 0x0c => { Name => 'Model', Format => 'string[12]', ValueConv => \&ReverseString, }, 0x19 => { #1 Name => 'Make', Format => 'string[7]', ValueConv => \&ReverseString, }, 0x21 => { #1 Name => 'DateTimeOriginal', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, Format => 'string[20]', ValueConv => \&ReverseString, PrintConv => '$self->ConvertDateTime($val)', }, 0x34 => { Name => 'ISO', Groups => { 2 => 'Image' }, Format => 'int32u', PrintConv => { 7 => 25, 8 => 32, 9 => 40, 10 => 50, 11 => 64, 12 => 80, 13 => 100, 14 => 125, 15 => 160, 16 => 200, 17 => 250, 18 => 320, 19 => 400, }, }, 0x38 => { Name => 'ExposureTime', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '2**($val / 8) / 16000', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x3c => { #1 Name => 'WB_RGGBLevels', Groups => { 2 => 'Image' }, Format => 'int32u[4]', }, 0x58 => { Name => 'FNumber', Groups => { 2 => 'Image' }, Format => 'int32u', ValueConv => '2**($val/16)', PrintConv => 'sprintf("%.2g",$val)', }, 0x68 => { Name => 'MaxAperture', Format => 'int32u', ValueConv => '2**($val/16)', PrintConv => 'sprintf("%.2g",$val)', }, 0x70 => { Name => 'FocalLength', Format => 'int32u', PrintConv => '"$val mm"', }, 0x7c => { Name => 'Lens', Format => 'string[32]', }, ); #------------------------------------------------------------------------------ # Extract information from Kyocera RAW image # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 if this was a valid Kyocera RAW image sub ProcessRAW($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $size = 156; # size of header my $buff; $raf->Read($buff, $size) == $size or return 0; # validate Make string ('KYOCERA' reversed) substr($buff, 0x19, 7) eq 'ARECOYK' or return 0; $et->SetFileType(); SetByteOrder('MM'); my %dirInfo = ( DataPt => \$buff, DataPos => 0, DataLen => $size, DirStart => 0, DirLen => $size, ); my $tagTablePtr = GetTagTable('Image::ExifTool::KyoceraRaw::Main'); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::KyoceraRaw - Read Kyocera RAW meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read meta information from Kyocera Contax N Digital RAW images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.cybercom.net/~dcoffin/dcraw/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/KyoceraRaw Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/�������������������������������������������������������000755 �000765 �000024 �00000000000 12650447263 020576� 5����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Leaf.pm�����������������������������������������������������000644 �000765 �000024 �00000040501 12642461316 021116� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Leaf.pm # # Description: Read Creo Leaf EXIF meta information # # Revisions: 09/28/2005 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::Leaf; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.06'; sub ProcessLeaf($$$); %Image::ExifTool::Leaf::Main = ( PROCESS_PROC => \&ProcessLeaf, GROUPS => { 0 => 'Leaf', 2 => 'Camera' }, NOTES => q{ These tags are found in .MOS images from Leaf digital camera backs as written by Creo Leaf Capture. They exist within the Leaf-specific directory structure of EXIF tag 0x8606. The tables below list observed Leaf tags, however ExifTool will extract any tags found in the Leaf directories even if they don't appear in these tables. }, icc_camera_profile => { Name => 'ICC_Profile', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main', }, }, icc_rgb_ws_profile => { Name => 'RGB_Profile', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main', }, }, camera_profile => { Name => 'CameraProfile', SubDirectory => { TagTable => 'Image::ExifTool::Leaf::CameraProfile', }, }, JPEG_preview_data => { %Image::ExifTool::previewImageTagInfo, Groups => { 2 => 'Preview' }, }, JPEG_preview_info => 'PreviewInfo', icc_camera_to_tone_space_flow => { Name => 'ToneSpaceFlow', Description => 'ICC To Tone Space Flow', Format => 'int16u', }, icc_camera_to_tone_matrix => { Name => 'ToneMatrix', Description => 'ICC To Tone Matrix', Format => 'int8u', Binary => 1, }, PDA_histogram_data => { Name => 'PDAHistogram', Binary => 1, }, pattern_ratation_angle => { Name => 'PatternAngle', Description => 'Pattern Rotation Angle', Format => 'int16u', Notes => '"ratation" is not a typo', }, back_serial_number => { Name => 'BackSerial', Description => 'Back Serial Number', PrintConv => '$val =~ s/ .*//s; $val', }, image_offset => { Format => 'int16u' }, ); %Image::ExifTool::Leaf::CameraProfile = ( PROCESS_PROC => \&ProcessLeaf, GROUPS => { 0 => 'Leaf', 2 => 'Camera' }, CamProf_version => 'CameraProfileVersion', CamProf_name => 'CameraName', CamProf_type => 'CameraType', CamProf_back_type => 'CameraBackType', CamProf_back_type => { Name => 'CameraBackType', }, CamProf_capture_profile => { SubDirectory => { TagTable => 'Image::ExifTool::Leaf::CaptureProfile', }, }, CamProf_image_profile => { SubDirectory => { TagTable => 'Image::ExifTool::Leaf::ImageProfile', }, }, ); %Image::ExifTool::Leaf::CaptureProfile = ( PROCESS_PROC => \&ProcessLeaf, GROUPS => { 0 => 'Leaf', 2 => 'Image' }, CaptProf_version => {}, CaptProf_name => {}, CaptProf_type => {}, CaptProf_back_type => {}, CaptProf_serial_number => { Name => 'CaptureSerial', Description => 'Capture Serial Number', PrintConv => '$val =~ s/ .*//s; $val', }, CaptProf_image_offset => {}, CaptProf_luminance_consts => {}, CaptProf_xy_offset_info => 'XYOffsetInfo', CaptProf_color_matrix => {}, CaptProf_reconstruction_type=> {}, CaptProf_image_fields => {}, CaptProf_image_bounds => {}, CaptProf_number_of_planes => {}, CaptProf_raw_data_rotation => {}, CaptProf_color_averages => {}, CaptProf_mosaic_pattern => {}, CaptProf_dark_correction_type=>{}, CaptProf_right_dark_rect => {}, CaptProf_left_dark_rect => {}, CaptProf_center_dark_rect => {}, CaptProf_CCD_rect => {}, CaptProf_CCD_valid_rect => {}, CaptProf_CCD_video_rect => {}, ); %Image::ExifTool::Leaf::ImageProfile = ( PROCESS_PROC => \&ProcessLeaf, GROUPS => { 0 => 'Leaf', 2 => 'Image' }, ImgProf_version => {}, ImgProf_name => {}, ImgProf_type => {}, ImgProf_back_type => {}, ImgProf_shoot_setup => { SubDirectory => { TagTable => 'Image::ExifTool::Leaf::ShootSetup', }, }, ImgProf_image_status => {}, ImgProf_rotation_angle => {}, ); %Image::ExifTool::Leaf::ShootSetup = ( PROCESS_PROC => \&ProcessLeaf, GROUPS => { 0 => 'Leaf', 2 => 'Image' }, ShootObj_version => {}, ShootObj_name => {}, ShootObj_type => {}, ShootObj_back_type => {}, ShootObj_capture_setup => { SubDirectory => { TagTable => 'Image::ExifTool::Leaf::CaptureSetup', }, }, ShootObj_color_setup => { SubDirectory => { TagTable => 'Image::ExifTool::Leaf::ColorSetup', }, }, ShootObj_save_setup => { SubDirectory => { TagTable => 'Image::ExifTool::Leaf::SaveSetup', }, }, ShootObj_camera_setup => { SubDirectory => { TagTable => 'Image::ExifTool::Leaf::CameraSetup', }, }, ShootObj_look_header => { SubDirectory => { TagTable => 'Image::ExifTool::Leaf::LookHeader', }, }, ); %Image::ExifTool::Leaf::CaptureSetup = ( PROCESS_PROC => \&ProcessLeaf, GROUPS => { 0 => 'Leaf', 2 => 'Image' }, CaptureObj_version => {}, CaptureObj_name => {}, CaptureObj_type => {}, CaptureObj_back_type => {}, CaptureObj_neutals => { SubDirectory => { TagTable => 'Image::ExifTool::Leaf::Neutrals', }, }, CaptureObj_selection => { SubDirectory => { TagTable => 'Image::ExifTool::Leaf::Selection', }, }, CaptureObj_tone_curve => { SubDirectory => { TagTable => 'Image::ExifTool::Leaf::ToneCurve', }, }, CaptureObj_sharpness => { SubDirectory => { TagTable => 'Image::ExifTool::Leaf::Sharpness', }, }, CaptureObj_single_quality => {}, CaptureObj_Multi_quality => {}, ); %Image::ExifTool::Leaf::Neutrals = ( PROCESS_PROC => \&ProcessLeaf, GROUPS => { 0 => 'Leaf', 2 => 'Image' }, NeutObj_version => {}, NeutObj_name => {}, NeutObj_type => {}, NeutObj_back_type => {}, NeutObj_neutrals => {}, NeutObj_color_casts => {}, NeutObj_shadow_end_points => {}, NeutObj_highlight_end_points => {}, ); %Image::ExifTool::Leaf::Selection = ( PROCESS_PROC => \&ProcessLeaf, GROUPS => { 0 => 'Leaf', 2 => 'Image' }, SelObj_version => {}, SelObj_name => {}, SelObj_type => {}, SelObj_back_type => {}, SelObj_rect => {}, SelObj_resolution => {}, SelObj_scale => {}, SelObj_locks => {}, SelObj_orientation => {}, ); %Image::ExifTool::Leaf::ToneCurve = ( PROCESS_PROC => \&ProcessLeaf, GROUPS => { 0 => 'Leaf', 2 => 'Image' }, ToneObj_version => {}, ToneObj_name => {}, ToneObj_type => {}, ToneObj_back_type => {}, ToneObj_npts => {}, ToneObj_tones => {}, ToneObj_gamma => {}, ); %Image::ExifTool::Leaf::Sharpness = ( PROCESS_PROC => \&ProcessLeaf, GROUPS => { 0 => 'Leaf', 2 => 'Image' }, SharpObj_version => {}, SharpObj_name => {}, SharpObj_type => {}, SharpObj_back_type => {}, SharpObj_sharp_method => {}, SharpObj_data_len => {}, SharpObj_sharp_info => {}, ); %Image::ExifTool::Leaf::ColorSetup = ( PROCESS_PROC => \&ProcessLeaf, GROUPS => { 0 => 'Leaf', 2 => 'Image' }, ColorObj_version => {}, ColorObj_name => {}, ColorObj_type => {}, ColorObj_back_type => {}, ColorObj_has_ICC => {}, ColorObj_input_profile => {}, ColorObj_output_profile => {}, ColorObj_color_mode => {}, ColorObj_color_type => {}, ); %Image::ExifTool::Leaf::SaveSetup = ( PROCESS_PROC => \&ProcessLeaf, GROUPS => { 0 => 'Leaf', 2 => 'Other' }, SaveObj_version => {}, SaveObj_name => {}, SaveObj_type => {}, SaveObj_back_type => {}, SaveObj_leaf_auto_active=> {}, SaveObj_leaf_hot_folder => {}, SaveObj_leaf_output_file_type => {}, SaveObj_leaf_auto_base_name => {}, SaveObj_leaf_save_selection => {}, SaveObj_leaf_open_proc_HDR => {}, SaveObj_std_auto_active => {}, SaveObj_std_hot_folder => {}, SaveObj_std_output_file_type => {}, SaveObj_std_output_color_mode => {}, SaveObj_std_output_bit_depth => {}, SaveObj_std_base_name => {}, SaveObj_std_save_selection => {}, SaveObj_std_oxygen => {}, SaveObj_std_open_in_photoshop => {}, SaveObj_std_scaled_output => {}, SaveObj_std_sharpen_output => {}, ); %Image::ExifTool::Leaf::CameraSetup = ( PROCESS_PROC => \&ProcessLeaf, GROUPS => { 0 => 'Leaf', 2 => 'Camera' }, CameraObj_version => {}, CameraObj_name => {}, CameraObj_type => {}, CameraObj_back_type => {}, CameraObj_ISO_speed => {}, CameraObj_strobe => {}, CameraObj_camera_type => {}, CameraObj_lens_type => {}, CameraObj_lens_ID => {}, ); %Image::ExifTool::Leaf::LookHeader = ( PROCESS_PROC => \&ProcessLeaf, GROUPS => { 0 => 'Leaf', 2 => 'Other' }, LookHead_version => {}, LookHead_name => {}, LookHead_type => {}, LookHead_back_type => {}, ); # tag table for any unknown Leaf directories %Image::ExifTool::Leaf::Unknown = ( PROCESS_PROC => \&ProcessLeaf, GROUPS => { 0 => 'Leaf', 2 => 'Unknown' }, ); # table for Leaf SubIFD entries %Image::ExifTool::Leaf::SubIFD = ( GROUPS => { 0 => 'MakerNotes', 1 => 'LeafSubIFD', 2 => 'Image'}, WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, NOTES => q{ Leaf writes a TIFF-format sub-IFD inside IFD0 of a MOS image. No tags in this sub-IFD are currently known, except for tag 0x8606 which really shouldn't be here anyway (so it doesn't appear in the table below) because it duplicates a reference to the same data of tag 0x8606 in IFD0. }, ); # prepare Leaf tables by generating tag 'Name' and table 'NOTES' { my @tableList = ( 'Image::ExifTool::Leaf::Main' ); my ($tag, %doneTable); # keep prefix in tag name of common tags my %keepPrefix = ( Version=>1, Name=>1, Type=>1, BackType=>1 ); while (@tableList) { my $table = shift @tableList; next if $doneTable{$table}; my $prefix = ($table =~ /::Main$/) ? undef : ''; $doneTable{$table} = 1; no strict 'refs'; $table = \%$table; use strict 'refs'; foreach $tag (keys %$table) { my $tagInfo = $$table{$tag}; next unless ref $tagInfo eq 'HASH'; next if $tag eq 'GROUPS'; if (defined $prefix and not $prefix) { ($prefix = $tag) =~ s/_.*//; } unless ($$tagInfo{Name}) { my $name; ($name = $tag) =~ s/_(.)/\U$1/g; if ($prefix) { $name =~ s/^$prefix//; $name = $prefix . $name if $keepPrefix{$name}; } $$tagInfo{Name} = ucfirst($name); } next unless $$tagInfo{SubDirectory}; my $subTable = $tagInfo->{SubDirectory}->{TagTable}; next unless $subTable =~ /::Leaf::/; push @tableList, $subTable; } next unless $prefix; $$table{NOTES} = "All B<Tag ID>'s in the following table have a " . "leading '${prefix}_' which\nhas been removed.\n"; } } #------------------------------------------------------------------------------ # Process Leaf information # Inputs: 0) ExifTool object reference # 1) Reference to directory information hash # 2) Pointer to tag table for this directory # Returns: 1 on success, otherwise returns 0 and sets a Warning sub ProcessLeaf($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || $$dirInfo{DataLen} - $dirStart; my $dirEnd = $dirStart + $dirLen; my $verbose = $et->Options('Verbose'); my $pos = $dirStart; my $hdrLen = 52; # header length for PKTS information my $success; $verbose and $et->VerboseDir('Leaf'); for (;;) { last if $pos + $hdrLen > $dirEnd; my $header = substr($$dataPt, $pos, $hdrLen); last unless substr($header, 0, 4) eq 'PKTS'; $success = 1; my $size = Get32u(\$header, 48); $pos += $hdrLen; if ($pos + $size > $dirEnd) { $et->Warn('Truncated Leaf data'); last; } my $tag = substr($header, 8, 40); $tag =~ s/\0.*//s; next unless $tag; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); # generate tag info for unknown tags my $val; if ($tagInfo and $$tagInfo{Format}) { $val = ReadValue($dataPt, $pos, $$tagInfo{Format}, undef, $size); } else { $val = substr($$dataPt, $pos, $size); } unless ($tagInfo) { my $name = ucfirst($tag); $name =~ s/_(.)/\U$1/g; if ($val =~ /^PKTS\0\0\0\x01/) { # also unpack unknown directories $tagInfo = { Name => $name, SubDirectory => { TagTable => 'Image::ExifTool::Leaf::Unknown' }, }; } elsif ($tagTablePtr ne \%Image::ExifTool::Leaf::Main or $et->Options('Unknown')) { $tagInfo = { Name => $name, Writable => 0, PrintConv => 'length($val) > 60 ? substr($val,0,55) . "[...]" : $val', }; # make tags in main table unknown because they tend to be binary $$tagInfo{Unknown} = 1 if $tagTablePtr eq \%Image::ExifTool::Leaf::Main; } $tagInfo and AddTagToTable($tagTablePtr, $tag, $tagInfo); } if ($verbose) { $et->VerboseInfo($tag, $tagInfo, Table => $tagTablePtr, Value => $val, DataPt => $dataPt, DataPos => $$dirInfo{DataPos}, Size => $size, Start => $pos, ); } if ($tagInfo) { if ($$tagInfo{SubDirectory}) { my %subdirInfo = ( DataPt => $dataPt, DirLen => $size, DirStart => $pos, DataPos => $$dirInfo{DataPos}, DirName => 'Leaf PKTS', ); my $subTable = GetTagTable($tagInfo->{SubDirectory}->{TagTable}); $et->ProcessDirectory(\%subdirInfo, $subTable); } else { $val =~ tr/\n/ /; # translate newlines to spaces $val =~ s/\0+$//; # remove null terminators $et->FoundTag($tagInfo, $val); } } $pos += $size; } $success or $et->Warn('Bad format Leaf data'); return $success; } 1; # end __END__ =head1 NAME Image::ExifTool::Leaf - Read Creo Leaf EXIF meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret meta information from Leaf digital camera backs written by Creo Leaf Capture. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/Leaf Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/LNK.pm������������������������������������������������������000644 �000765 �000024 �00000054024 12642461316 020700� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: LNK.pm # # Description: Read meta information from MS Shell Link files # # Revisions: 2009/09/19 - P. Harvey Created # # References: 1) http://msdn.microsoft.com/en-us/library/dd871305(PROT.10).aspx # 2) http://www.i2s-lab.com/Papers/The_Windows_Shortcut_File_Format.pdf #------------------------------------------------------------------------------ package Image::ExifTool::LNK; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.07'; sub ProcessItemID($$$); sub ProcessLinkInfo($$$); # Information extracted from LNK (Windows Shortcut) files %Image::ExifTool::LNK::Main = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Other' }, VARS => { HEX_ID => 1 }, # print hex ID's in documentation NOTES => 'Information extracted from MS Shell Link (Windows shortcut) files.', # maybe the Flags aren't very useful to the user (since they are # mainly structural), but extract them anyway for completeness 0x14 => { Name => 'Flags', Format => 'int32u', PrintConv => { BITMASK => { 0 => 'IDList', 1 => 'LinkInfo', 2 => 'Description', 3 => 'RelativePath', 4 => 'WorkingDir', 5 => 'CommandArgs', 6 => 'IconFile', 7 => 'Unicode', 8 => 'NoLinkInfo', 9 => 'ExpString', 10 => 'SeparateProc', 12 => 'DarwinID', 13 => 'RunAsUser', 14 => 'ExpIcon', 15 => 'NoPidAlias', 17 => 'RunWithShim', 18 => 'NoLinkTrack', 19 => 'TargetMetadata', 20 => 'NoLinkPathTracking', 21 => 'NoKnownFolderTracking', 22 => 'NoKnownFolderAlias', 23 => 'LinkToLink', 24 => 'UnaliasOnSave', 25 => 'PreferEnvPath', 26 => 'KeepLocalIDList', }}, }, 0x18 => { Name => 'FileAttributes', Format => 'int32u', PrintConv => { BITMASK => { 0 => 'Read-only', 1 => 'Hidden', 2 => 'System', 3 => 'Volume', #(not used) 4 => 'Directory', 5 => 'Archive', 6 => 'Encrypted?', #(ref 2, not used in XP) 7 => 'Normal', 8 => 'Temporary', 9 => 'Sparse', 10 => 'Reparse point', 11 => 'Compressed', 12 => 'Offline', 13 => 'Not indexed', 14 => 'Encrypted', }}, }, 0x1c => { Name => 'CreateDate', Format => 'int64u', Groups => { 2 => 'Time' }, # convert time from 100-ns intervals since Jan 1, 1601 RawConv => '$val ? $val : undef', ValueConv => '$val=$val/1e7-11644473600; ConvertUnixTime($val,1)', PrintConv => '$self->ConvertDateTime($val)', }, 0x24 => { Name => 'AccessDate', Format => 'int64u', Groups => { 2 => 'Time' }, RawConv => '$val ? $val : undef', ValueConv => '$val=$val/1e7-11644473600; ConvertUnixTime($val,1)', PrintConv => '$self->ConvertDateTime($val)', }, 0x2c => { Name => 'ModifyDate', Format => 'int64u', Groups => { 2 => 'Time' }, RawConv => '$val ? $val : undef', ValueConv => '$val=$val/1e7-11644473600; ConvertUnixTime($val,1)', PrintConv => '$self->ConvertDateTime($val)', }, 0x34 => { Name => 'TargetFileSize', Format => 'int32u', }, 0x38 => { Name => 'IconIndex', Format => 'int32u', PrintConv => '$val ? $val : "(none)"', }, 0x3c => { Name => 'RunWindow', Format => 'int32u', PrintConv => { 0 => 'Hide', 1 => 'Normal', 2 => 'Show Minimized', 3 => 'Show Maximized', 4 => 'Show No Activate', 5 => 'Show', 6 => 'Minimized', 7 => 'Show Minimized No Activate', 8 => 'Show NA', 9 => 'Restore', 10 => 'Show Default', }, }, 0x40 => { Name => 'HotKey', Format => 'int32u', PrintHex => 1, PrintConv => { OTHER => sub { my $val = shift; my $ch = $val & 0xff; if (chr $ch =~ /^[A-Z0-9]$/) { $ch = chr $ch; } elsif ($ch >= 0x70 and $ch <= 0x87) { $ch = 'F' . ($ch - 0x6f); } elsif ($ch == 0x90) { $ch = 'Num Lock'; } elsif ($ch == 0x91) { $ch = 'Scroll Lock'; } else { $ch = sprintf('Unknown (0x%x)', $ch); } $ch = "Alt-$ch" if $val & 0x400; $ch = "Control-$ch" if $val & 0x200; $ch = "Shift-$ch" if $val & 0x100; return $ch; }, 0x00 => '(none)', # these entries really only for documentation 0x90 => 'Num Lock', 0x91 => 'Scroll Lock', "0x30'-'0x39" => "0-9", "0x41'-'0x5a" => "A-Z", "0x70'-'0x87" => "F1-F24", 0x100 => 'Shift', 0x200 => 'Control', 0x400 => 'Alt', }, }, # note: tags 0x10xx are synthesized tag ID's 0x10000 => { Name => 'ItemID', SubDirectory => { TagTable => 'Image::ExifTool::LNK::ItemID' }, }, 0x20000 => { Name => 'LinkInfo', SubDirectory => { TagTable => 'Image::ExifTool::LNK::LinkInfo' }, }, 0x30004 => 'Description', 0x30008 => 'RelativePath', 0x30010 => 'WorkingDirectory', 0x30020 => 'CommandLineArguments', 0x30040 => 'IconFileName', # note: tags 0xa000000x are actually ID's (not indices) 0xa0000000 => { Name => 'UnknownData', SubDirectory => { TagTable => 'Image::ExifTool::LNK::UnknownData' }, }, 0xa0000001 => { Name => 'EnvVarData', SubDirectory => { TagTable => 'Image::ExifTool::LNK::UnknownData' }, }, 0xa0000002 => { Name => 'ConsoleData', SubDirectory => { TagTable => 'Image::ExifTool::LNK::ConsoleData' }, }, 0xa0000003 => { Name => 'TrackerData', SubDirectory => { TagTable => 'Image::ExifTool::LNK::TrackerData' }, }, 0xa0000004 => { Name => 'ConsoleFEData', SubDirectory => { TagTable => 'Image::ExifTool::LNK::ConsoleFEData' }, }, 0xa0000005 => { Name => 'SpecialFolderData', SubDirectory => { TagTable => 'Image::ExifTool::LNK::UnknownData' }, }, 0xa0000006 => { Name => 'DarwinData', SubDirectory => { TagTable => 'Image::ExifTool::LNK::UnknownData' }, }, 0xa0000007 => { Name => 'IconEnvData', SubDirectory => { TagTable => 'Image::ExifTool::LNK::UnknownData' }, }, 0xa0000008 => { Name => 'ShimData', SubDirectory => { TagTable => 'Image::ExifTool::LNK::UnknownData' }, }, 0xa0000009 => { Name => 'PropertyStoreData', SubDirectory => { TagTable => 'Image::ExifTool::LNK::UnknownData' }, }, 0xa000000b => { Name => 'KnownFolderData', SubDirectory => { TagTable => 'Image::ExifTool::LNK::UnknownData' }, }, 0xa000000c => { Name => 'VistaIDListData', SubDirectory => { TagTable => 'Image::ExifTool::LNK::UnknownData' }, }, ); %Image::ExifTool::LNK::ItemID = ( GROUPS => { 2 => 'Other' }, PROCESS_PROC => \&ProcessItemID, # (can't find any documentation on these items) 0x0032 => { Name => 'Item0032', SubDirectory => { TagTable => 'Image::ExifTool::LNK::Item0032' }, }, ); %Image::ExifTool::LNK::Item0032 = ( GROUPS => { 2 => 'Other' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, 0x0e => { Name => 'TargetFileDOSName', Format => 'var_string', }, #not at a fixed offset -- offset is given by last 2 bytes of the item + 0x14 #0x22 => { # Name => 'TargetFileName', # Format => 'var_ustring', #}, ); %Image::ExifTool::LNK::LinkInfo = ( GROUPS => { 2 => 'Other' }, PROCESS_PROC => \&ProcessLinkInfo, FORMAT => 'int32u', VARS => { NO_ID => 1 }, VolumeID => { }, DriveType => { PrintConv => { 0 => 'Unknown', 1 => 'Invalid Root Path', 2 => 'Removable Media', 3 => 'Fixed Disk', 4 => 'Remote Drive', 5 => 'CD-ROM', 6 => 'Ram Disk', }, }, DriveSerialNumber => { }, VolumeLabel => { }, LocalBasePath => { }, CommonNetworkRelLink => { }, CommonPathSuffix => { }, NetName => { }, DeviceName => { }, NetProviderType => { PrintHex => 1, PrintConv => { 0x1a0000 => 'AVID', 0x1b0000 => 'DOCUSPACE', 0x1c0000 => 'MANGOSOFT', 0x1d0000 => 'SERNET', 0x1e0000 => 'RIVERFRONT1', 0x1f0000 => 'RIVERFRONT2', 0x200000 => 'DECORB', 0x210000 => 'PROTSTOR', 0x220000 => 'FJ_REDIR', 0x230000 => 'DISTINCT', 0x240000 => 'TWINS', 0x250000 => 'RDR2SAMPLE', 0x260000 => 'CSC', 0x270000 => '3IN1', 0x290000 => 'EXTENDNET', 0x2a0000 => 'STAC', 0x2b0000 => 'FOXBAT', 0x2c0000 => 'YAHOO', 0x2d0000 => 'EXIFS', 0x2e0000 => 'DAV', 0x2f0000 => 'KNOWARE', 0x300000 => 'OBJECT_DIRE', 0x310000 => 'MASFAX', 0x320000 => 'HOB_NFS', 0x330000 => 'SHIVA', 0x340000 => 'IBMAL', 0x350000 => 'LOCK', 0x360000 => 'TERMSRV', 0x370000 => 'SRT', 0x380000 => 'QUINCY', 0x390000 => 'OPENAFS', 0x3a0000 => 'AVID1', 0x3b0000 => 'DFS', }, }, ); %Image::ExifTool::LNK::UnknownData = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Other' }, ); %Image::ExifTool::LNK::ConsoleData = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Other' }, 0x08 => { Name => 'FillAttributes', Format => 'int16u', PrintConv => 'sprintf("0x%.2x", $val)', }, 0x0a => { Name => 'PopupFillAttributes', Format => 'int16u', PrintConv => 'sprintf("0x%.2x", $val)', }, 0x0c => { Name => 'ScreenBufferSize', Format => 'int16u[2]', PrintConv => '$val=~s/ / x /; $val', }, 0x10 => { Name => 'WindowSize', Format => 'int16u[2]', PrintConv => '$val=~s/ / x /; $val', }, 0x14 => { Name => 'WindowOrigin', Format => 'int16u[2]', PrintConv => '$val=~s/ / x /; $val', }, 0x20 => { Name => 'FontSize', Format => 'int16u[2]', PrintConv => '$val=~s/ / x /; $val', }, 0x24 => { Name => 'FontFamily', Format => 'int32u', PrintHex => 1, PrintConv => { 0 => "Don't Care", 0x10 => 'Roman', 0x20 => 'Swiss', 0x30 => 'Modern', 0x40 => 'Script', 0x50 => 'Decorative', }, }, 0x28 => { Name => 'FontWeight', Format => 'int32u', }, 0x2c => { Name => 'FontName', Format => 'undef[64]', RawConv => q{ $val = $self->Decode($val, 'UCS2'); $val =~ s/\0.*//s; return length($val) ? $val : undef; }, }, 0x6c => { Name => 'CursorSize', Format => 'int32u', }, 0x70 => { Name => 'FullScreen', Format => 'int32u', PrintConv => '$val ? "Yes" : "No"', }, 0x74 => { #PH (MISSING FROM MS DOCUMENTATION! -- screws up subsequent offsets) Name => 'QuickEdit', Format => 'int32u', PrintConv => '$val ? "Yes" : "No"', }, 0x78 => { Name => 'InsertMode', Format => 'int32u', PrintConv => '$val ? "Yes" : "No"', }, 0x7c => { Name => 'WindowOriginAuto', Format => 'int32u', PrintConv => '$val ? "Yes" : "No"', }, 0x80 => { Name => 'HistoryBufferSize', Format => 'int32u', }, 0x84 => { Name => 'NumHistoryBuffers', Format => 'int32u', }, 0x88 => { Name => 'RemoveHistoryDuplicates', Format => 'int32u', PrintConv => '$val ? "Yes" : "No"', }, ); %Image::ExifTool::LNK::TrackerData = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Other' }, 0x10 => { Name => 'MachineID', Format => 'var_string', }, ); %Image::ExifTool::LNK::ConsoleFEData = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Other' }, 0x08 => { Name => 'CodePage', Format => 'int32u', }, ); #------------------------------------------------------------------------------ # Extract null-terminated ASCII or Unicode string from buffer # Inputs: 0) buffer ref, 1) start position, 2) flag for unicode string # Return: string or undef if start position is outside bounds sub GetString($$;$) { my ($dataPt, $pos, $unicode) = @_; return undef if $pos >= length($$dataPt); pos($$dataPt) = $pos; return $1 if ($unicode ? $$dataPt=~/\G((?:..)*?)\0\0/sg : $$dataPt=~/\G(.*?)\0/sg); return substr($$dataPt, $pos); } #------------------------------------------------------------------------------ # Process item ID data # Inputs: 0) ExifTool object reference, 1) dirInfo reference, 2) tag table ref # Returns: 1 on success sub ProcessItemID($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataLen = length $$dataPt; my $pos = 0; my %opts = ( DataPt => $dataPt, DataPos => $$dirInfo{DataPos}, ); $et->VerboseDir('ItemID', undef, $dataLen); for (;;) { last if $pos + 4 >= $dataLen; my $size = Get16u($dataPt, $pos); last if $size < 2 or $pos + $size > $dataLen; my $tag = Get16u($dataPt, $pos+2); # (just a guess -- may not be a tag at all) AddTagToTable($tagTablePtr, $tag, { Name => sprintf('Item%.4x', $tag), SubDirectory => { TagTable => 'Image::ExifTool::LNK::UnknownData' }, }) unless $$tagTablePtr{$tag}; $et->HandleTag($tagTablePtr, $tag, undef, %opts, Start => $pos, Size => $size); $pos += $size; } } #------------------------------------------------------------------------------ # Process link information data # Inputs: 0) ExifTool object reference, 1) dirInfo reference, 2) tag table ref # Returns: 1 on success sub ProcessLinkInfo($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataLen = length $$dataPt; return 0 if $dataLen < 0x20; my $hdrLen = Get32u($dataPt, 4); my $lif = Get32u($dataPt, 8); # link info flags my %opts = ( DataPt => $dataPt, DataPos => $$dirInfo{DataPos}, Size => 4, # (typical value size) ); my ($off, $unicode, $pos, $val, $size); $et->VerboseDir('LinkInfo', undef, $dataLen); if ($lif & 0x01) { # read Volume ID $off = Get32u($dataPt, 0x0c); if ($off + 0x20 <= $dataLen) { # my $len = Get32u($dataPt, $off); $et->HandleTag($tagTablePtr, 'DriveType', undef, %opts, Start=>$off+4); $pos = Get32u($dataPt, $off + 0x0c); if ($pos == 0x14) { # use VolumeLabelOffsetUnicode instead $pos = Get32u($dataPt, $off + 0x10); $unicode = 1; } $pos += $off; $val = GetString($dataPt, $pos, $unicode); if (defined $val) { $size = length $val; $val = $et->Decode($val, 'UCS2') if $unicode; $et->HandleTag($tagTablePtr, 'VolumeLabel', $val, %opts, Start=>$pos, Size=>$size); } } # read local base path if ($hdrLen >= 0x24) { $pos = Get32u($dataPt, 0x1c); $unicode = 1; } else { $pos = Get32u($dataPt, 0x10); undef $unicode; } $val = GetString($dataPt, $pos, $unicode); if (defined $val) { $size = length $val; $val = $et->Decode($val, 'UCS2') if $unicode; $et->HandleTag($tagTablePtr, 'LocalBasePath', $val, %opts, Start=>$pos, Size=>$size); } } if ($lif & 0x02) { # read common network relative link $off = Get32u($dataPt, 0x14); if ($off and $off + 0x14 <= $dataLen) { my $siz = Get32u($dataPt, $off); $pos = Get32u($dataPt, $off + 0x08); if ($pos > 0x14 and $siz >= 0x18) { $pos = Get32u($dataPt, $off + 0x14); $unicode = 1; } else { undef $unicode; } $val = GetString($dataPt, $pos, $unicode); if (defined $val) { $size = length $val; $val = $et->Decode($val, 'UCS2') if $unicode; $et->HandleTag($tagTablePtr, 'NetName', $val, %opts, Start=>$pos, Size=>$size); } my $flg = Get32u($dataPt, $off + 0x04); if ($flg & 0x01) { $pos = Get32u($dataPt, $off + 0x0c); if ($pos > 0x14 and $siz >= 0x1c) { $pos = Get32u($dataPt, $off + 0x18); $unicode = 1; } else { undef $unicode; } $val = GetString($dataPt, $pos, $unicode); if (defined $val) { $size = length $val; $val = $et->Decode($val, 'UCS2') if $unicode; $et->HandleTag($tagTablePtr, 'DeviceName', $val, %opts, Start=>$pos, Size=>$size); } } if ($flg & 0x02) { $val = Get32u($dataPt, $off + 0x10); $et->HandleTag($tagTablePtr, 'NetProviderType', $val, %opts, Start=>$off + 0x10); } } } return 1; } #------------------------------------------------------------------------------ # Extract information from a MS Shell Link (Windows shortcut) file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid LNK file sub ProcessLNK($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $buf2, $len, $i); # read LNK file header $raf->Read($buff, 0x4c) == 0x4c or return 0; $buff =~ /^.{4}\x01\x14\x02\0{5}\xc0\0{6}\x46/s or return 0; $len = unpack('V', $buff); $len >= 0x4c or return 0; if ($len > 0x4c) { $raf->Read($buf2, $len - 0x4c) == $len - 0x4c or return 0; $buff .= $buf2; } $et->SetFileType(); SetByteOrder('II'); my $tagTablePtr = GetTagTable('Image::ExifTool::LNK::Main'); my %dirInfo = ( DataPt => \$buff, DataPos => 0, DataLen => length $buff, DirLen => length $buff, ); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); my $flags = Get32u(\$buff, 0x14); # read link target ID list if ($flags & 0x01) { $raf->Read($buff, 2) or return 1; $len = unpack('v', $buff); $raf->Read($buff, $len) == $len or return 1; $et->HandleTag($tagTablePtr, 0x10000, undef, DataPt => \$buff, DataPos => $raf->Tell() - $len, Size => $len, ); } # read link information if ($flags & 0x02) { $raf->Read($buff, 4) or return 1; $len = unpack('V', $buff); return 1 if $len < 4; $raf->Read($buf2, $len - 4) == $len - 4 or return 1; $buff .= $buf2; $et->HandleTag($tagTablePtr, 0x20000, undef, DataPt => \$buff, DataPos => $raf->Tell() - $len, Size => $len, ); } # read string data my @strings = qw(Description RelativePath WorkingDirectory CommandLineArguments IconFileName); for ($i=0; $i<@strings; ++$i) { my $mask = 0x04 << $i; next unless $flags & $mask; $raf->Read($buff, 2) or return 1; $len = unpack('v', $buff); $len *= 2 if $flags & 0x80; # characters are 2 bytes if Unicode flag is set $raf->Read($buff, $len) or return 1; my $val; $val = $et->Decode($buff, 'UCS2') if $flags & 0x80; $et->HandleTag($tagTablePtr, 0x30000 | $mask, $val, DataPt => \$buff, DataPos => $raf->Tell() - $len, Size => $len, ); } # read extra data while ($raf->Read($buff, 4) == 4) { $len = unpack('V', $buff); last if $len < 4; $len -= 4; $raf->Read($buf2, $len) == $len or last; next unless $len > 4; $buff .= $buf2; my $tag = Get32u(\$buff, 4); my $tagInfo = $$tagTablePtr{$tag}; unless (ref $tagInfo eq 'HASH' and $$tagInfo{SubDirectory}) { $tagInfo = $$tagTablePtr{0xa0000000}; } $et->HandleTag($tagTablePtr, $tag, undef, DataPt => \$buff, DataPos => $raf->Tell() - $len - 4, TagInfo => $tagInfo, ); } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::LNK - Read MS Shell Link (.LNK) meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information MS Shell Link (Windows shortcut) files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://msdn.microsoft.com/en-us/library/dd871305(PROT.10).aspx> =item L<http://www.i2s-lab.com/Papers/The_Windows_Shortcut_File_Format.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/LNK Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lytro.pm����������������������������������������������������000644 �000765 �000024 �00000017277 12642461316 021376� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Lytro.pm # # Description: Read Lytro LFP files # # Revisions: 2014-07-17 - P. Harvey Created # # References: 1) http://optics.miloush.net/lytro/TheFileFormat.aspx #------------------------------------------------------------------------------ package Image::ExifTool::Lytro; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Import; $VERSION = '1.02'; sub ExtractTags($$$); # Lytro LFP tags (ref PH) %Image::ExifTool::Lytro::Main = ( GROUPS => { 2 => 'Camera' }, VARS => { NO_ID => 1 }, NOTES => q{ Tag definitions for Lytro Light Field Picture (LFP) files. ExifTool extracts the full JSON metadata blocks, as well as breaking them down into individual tags. All available tags are extracted from the JSON metadata, even if they don't appear in the table below. }, JSONMetadata => { Notes => 'the full JSON-format metadata blocks', Binary => 1, List => 1, }, EmbeddedImage => { Notes => 'JPEG image embedded in LFP files written by Lytro Desktop', Groups => { 2 => 'Preview' }, Binary => 1, }, Type => { Name => 'CameraType' }, CameraMake => { Name => 'Make' }, CameraModel => { Name => 'Model', Description => 'Camera Model Name' }, CameraSerialNumber => { Name => 'SerialNumber'}, CameraFirmware => { Name => 'FirmwareVersion'}, DevicesAccelerometerSampleArrayTime => { Name => 'AccelerometerTime'}, DevicesAccelerometerSampleArrayX => { Name => 'AccelerometerX'}, DevicesAccelerometerSampleArrayY => { Name => 'AccelerometerY'}, DevicesAccelerometerSampleArrayZ => { Name => 'AccelerometerZ'}, DevicesClockZuluTime => { Name => 'DateTimeOriginal', Groups => { 2 => 'Time' }, ValueConv => 'require Image::ExifTool::XMP; Image::ExifTool::XMP::ConvertXMPDate($val)', PrintConv => '$self->ConvertDateTime($val)', }, DevicesLensFNumber => { Name => 'FNumber', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', }, DevicesLensFocalLength => { Name => 'FocalLength', ValueConv => '$val * 1000', # convert from metres to mm PrintConv => 'sprintf("%.1f mm",$val)', }, DevicesLensTemperature => { Name => 'LensTemperature', PrintConv => 'sprintf("%.1f C",$val)', }, DevicesSocTemperature => { Name => 'SocTemperature', PrintConv => 'sprintf("%.1f C",$val)', }, DevicesShutterFrameExposureDuration => { Name => 'FrameExposureTime', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, DevicesShutterPixelExposureDuration => { Name => 'ExposureTime', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, DevicesSensorPixelPitch => { Name => 'FocalPlaneXResolution', Notes => 'Y resolution is the same as X resolution', ValueConv => '25.4 / $val / 1000', # convert from metres to pixels/inch }, DevicesSensorSensorSerial => { Name => 'SensorSerialNumber'}, DevicesSensorIso => { Name => 'ISO' }, ImageLimitExposureBias => { Groups => { 2 => 'Image' }, PrintConv => 'sprintf("%+.1f", $val)' }, ImageModulationExposureBias => { Groups => { 2 => 'Image' }, PrintConv => 'sprintf("%+.1f", $val)' }, ImageOrientation => { Name => 'Orientation', Groups => { 2 => 'Image' }, PrintConv => { 1 => 'Horizontal (normal)', }, }, ); #------------------------------------------------------------------------------ # Extract tags from a parsed JSON hash # Inputs: 0) ExifTool ref, 1) tag hash ref, 2) base tag name sub ExtractTags($$$) { my ($et, $meta, $parent) = @_; ref $meta eq 'HASH' or $et->Warn('Invalid LFP metadata'), return; my ($key, $val, $name, $tagTablePtr); foreach $key (sort keys %$meta) { my $tag = $parent . ucfirst($key); foreach $val (ref $$meta{$key} eq 'ARRAY' ? @{$$meta{$key}} : $$meta{$key}) { ref $val eq 'HASH' and ExtractTags($et, $val, $tag), next; $tagTablePtr or $tagTablePtr = GetTagTable('Image::ExifTool::Lytro::Main'); unless ($$tagTablePtr{$tag}) { ($name = $tag) =~ s/[^-_a-zA-Z0-9](.?)/\U$1/g; $name =~ s/ParametersVendorContentComLytroTags//; my %tagInfo; $tagInfo{Groups} = { 2 => 'Image' } unless $name =~ s/^Devices//; $tagInfo{List} = 1 if ref $$meta{$key} eq 'ARRAY'; $tagInfo{Name} = $name; my $str = $tag eq $name ? '' : " as $name"; $et->VPrint(0, " [adding $tag$str]\n"); AddTagToTable($tagTablePtr, $tag, \%tagInfo); } $et->HandleTag($tagTablePtr, $tag, $val); } } } #------------------------------------------------------------------------------ # Process segments from a Lytro LFP image # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid Lytro image sub ProcessLFP($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $verbose = $et->Options('Verbose'); my ($buff, $id, %dumpParms); # validate the Lytro file header return 0 unless $raf->Read($buff, 16) == 16 and $buff =~ /^\x89LFP\x0d\x0a\x1a\x0a/; $et->SetFileType(); # set the FileType tag SetByteOrder('MM'); if ($verbose > 2) { %dumpParms = ( Out => $$et{OPTIONS}{TextOut} ); $dumpParms{MaxLen} = 128 if $verbose < 4; } my $tagTablePtr = GetTagTable('Image::ExifTool::Lytro::Main'); while ($raf->Read($buff, 16) == 16) { $buff =~ /^\x89LF/ or $et->Warn('LFP format error'), last; my $size = Get32u(\$buff, 12); $size & 0x80000000 and $et->Warn('Invalid LFP segment size'), last; $raf->Read($id, 80) == 80 or $et->Warn('Truncated LFP segment'), last; # ignore the sha1 if ($verbose) { $id =~ s/\0.*//s; $et->VPrint(0, substr($buff,1,3), " segment ($size bytes, $id)\n"); } if ($size > 20000000) { $raf->Seek($size, 1) or $et->Warn('Seek error in LFP file'), last; } else { $raf->Read($buff,$size) == $size or $et->Warn('Truncated LFP data'), last; HexDump(\$buff, undef, %dumpParms, Addr=>$raf->Tell()-$size) if $verbose > 2; if ($buff =~ /^\{\s+"/) { # JSON metadata? pos($buff) = 0; $et->HandleTag($tagTablePtr, 'JSONMetadata', $buff); my $meta = Image::ExifTool::Import::ReadJSONObject(undef, \$buff); ExtractTags($et, $meta, ''); } elsif ($buff =~ /^\xff\xd8\xff/) { # embedded JPEG image? $et->HandleTag($tagTablePtr, 'EmbeddedImage', $buff); } } # skip padding if necessary my $pad = 16 - ($size % 16); $raf->Seek($pad, 1) if $pad != 16; } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::Lytro - Read Lytro LFP files =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to read metadata from Lytro Light Field Picture (LFP) files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://optics.miloush.net/lytro/TheFileFormat.aspx> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Lytro Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/M2TS.pm�����������������������������������������������������000644 �000765 �000024 �00000070562 12642461316 021006� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: M2TS.pm # # Description: Read M2TS (AVCHD) meta information # # Revisions: 2009/07/03 - P. Harvey Created # # References: 1) http://neuron2.net/library/mpeg2/iso13818-1.pdf # 2) http://www.blu-raydisc.com/Assets/Downloadablefile/BD-RE_Part3_V2.1_WhitePaper_080406-15271.pdf # 3) http://www.videohelp.com/forum/archive/reading-avchd-playlist-files-bdmv-playlist-mpl-t358888.html # 4) http://en.wikipedia.org/wiki/MPEG_transport_stream # 5) http://www.dunod.com/documents/9782100493463/49346_DVB.pdf # 6) http://trac.handbrake.fr/browser/trunk/libhb/stream.c # 7) http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=04560141 # 8) http://www.w6rz.net/xport.zip # # Notes: Variable names containing underlines are the same as in ref 1. # # Glossary: PES = Packetized Elementary Stream # PAT = Program Association Table # PMT = Program Map Table # PCR = Program Clock Reference # PID = Packet Identifier # # To Do: - parse PCR to obtain average bitrates? #------------------------------------------------------------------------------ package Image::ExifTool::M2TS; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.11'; # program map table "stream_type" lookup (ref 6/1) my %streamType = ( 0x00 => 'Reserved', 0x01 => 'MPEG-1 Video', 0x02 => 'MPEG-2 Video', 0x03 => 'MPEG-1 Audio', 0x04 => 'MPEG-2 Audio', 0x05 => 'ISO 13818-1 private sections', 0x06 => 'ISO 13818-1 PES private data', 0x07 => 'ISO 13522 MHEG', 0x08 => 'ISO 13818-1 DSM-CC', 0x09 => 'ISO 13818-1 auxiliary', 0x0A => 'ISO 13818-6 multi-protocol encap', 0x0B => 'ISO 13818-6 DSM-CC U-N msgs', 0x0C => 'ISO 13818-6 stream descriptors', 0x0D => 'ISO 13818-6 sections', 0x0E => 'ISO 13818-1 auxiliary', 0x0F => 'MPEG-2 AAC Audio', 0x10 => 'MPEG-4 Video', 0x11 => 'MPEG-4 LATM AAC Audio', 0x12 => 'MPEG-4 generic', 0x13 => 'ISO 14496-1 SL-packetized', 0x14 => 'ISO 13818-6 Synchronized Download Protocol', # 0x15-0x7F => 'ISO 13818-1 Reserved', 0x1b => 'H.264 Video', 0x80 => 'DigiCipher II Video', 0x81 => 'A52/AC-3 Audio', 0x82 => 'HDMV DTS Audio', 0x83 => 'LPCM Audio', 0x84 => 'SDDS Audio', 0x85 => 'ATSC Program ID', 0x86 => 'DTS-HD Audio', 0x87 => 'E-AC-3 Audio', 0x8a => 'DTS Audio', 0x91 => 'A52b/AC-3 Audio', 0x92 => 'DVD_SPU vls Subtitle', 0x94 => 'SDDS Audio', 0xa0 => 'MSCODEC Video', 0xea => 'Private ES (VC-1)', # 0x80-0xFF => 'User Private', ); # "table_id" values (ref 5) my %tableID = ( 0x00 => 'Program Association', 0x01 => 'Conditional Access', 0x02 => 'Program Map', 0x03 => 'Transport Stream Description', 0x40 => 'Actual Network Information', 0x41 => 'Other Network Information', 0x42 => 'Actual Service Description', 0x46 => 'Other Service Description', 0x4a => 'Bouquet Association', 0x4e => 'Actual Event Information - Present/Following', 0x4f => 'Other Event Information - Present/Following', 0x50 => 'Actual Event Information - Schedule', #(also 0x51-0x5f) 0x60 => 'Other Event Information - Schedule', # (also 0x61-0x6f) 0x70 => 'Time/Date', 0x71 => 'Running Status', 0x72 => 'Stuffing', 0x73 => 'Time Offset', 0x7e => 'Discontinuity Information', 0x7f => 'Selection Information', # 0x80-0xfe => 'User Defined', ); # PES stream ID's for which a syntax field does not exist my %noSyntax = ( 0xbc => 1, # program_stream_map 0xbe => 1, # padding_stream 0xbf => 1, # private_stream_2 0xf0 => 1, # ECM_stream 0xf1 => 1, # EMM_stream 0xf2 => 1, # DSMCC_stream 0xf8 => 1, # ITU-T Rec. H.222.1 type E stream 0xff => 1, # program_stream_directory ); # information extracted from the MPEG-2 transport stream %Image::ExifTool::M2TS::Main = ( GROUPS => { 2 => 'Video' }, VARS => { NO_ID => 1 }, NOTES => q{ The MPEG-2 transport stream is used as a container for many different audio/video formats (including AVCHD). This table lists information extracted from M2TS files. }, VideoStreamType => { PrintHex => 1, PrintConv => \%streamType, SeparateTable => 'StreamType', }, AudioStreamType => { PrintHex => 1, PrintConv => \%streamType, SeparateTable => 'StreamType', }, Duration => { Notes => q{ the -fast option may be used to avoid scanning to the end of file to calculate the Duration }, ValueConv => '$val / 27000000', # (clock is 27MHz) PrintConv => 'ConvertDuration($val)', }, # the following tags are for documentation purposes only _AC3 => { SubDirectory => { TagTable => 'Image::ExifTool::M2TS::AC3' } }, _H264 => { SubDirectory => { TagTable => 'Image::ExifTool::H264::Main' } }, ); # information extracted from AC-3 audio streams %Image::ExifTool::M2TS::AC3 = ( GROUPS => { 1 => 'AC3', 2 => 'Audio' }, VARS => { NO_ID => 1 }, NOTES => 'Tags extracted from AC-3 audio streams.', AudioSampleRate => { PrintConv => { 0 => '48000', 1 => '44100', 2 => '32000', }, }, AudioBitrate => { PrintConvColumns => 2, ValueConv => { 0 => 32000, 1 => 40000, 2 => 48000, 3 => 56000, 4 => 64000, 5 => 80000, 6 => 96000, 7 => 112000, 8 => 128000, 9 => 160000, 10 => 192000, 11 => 224000, 12 => 256000, 13 => 320000, 14 => 384000, 15 => 448000, 16 => 512000, 17 => 576000, 18 => 640000, 32 => '32000 max', 33 => '40000 max', 34 => '48000 max', 35 => '56000 max', 36 => '64000 max', 37 => '80000 max', 38 => '96000 max', 39 => '112000 max', 40 => '128000 max', 41 => '160000 max', 42 => '192000 max', 43 => '224000 max', 44 => '256000 max', 45 => '320000 max', 46 => '384000 max', 47 => '448000 max', 48 => '512000 max', 49 => '576000 max', 50 => '640000 max', }, PrintConv => 'ConvertBitrate($val)', }, SurroundMode => { PrintConv => { 0 => 'Not indicated', 1 => 'Not Dolby surround', 2 => 'Dolby surround', }, }, AudioChannels => { PrintConvColumns => 2, PrintConv => { 0 => '1 + 1', 1 => 1, 2 => 2, 3 => 3, 4 => '2/1', 5 => '3/1', 6 => '2/2', 7 => '3/2', 8 => 1, 9 => '2 max', 10 => '3 max', 11 => '4 max', 12 => '5 max', 13 => '6 max', }, }, ); #------------------------------------------------------------------------------ # Extract information from AC-3 audio stream # Inputs: 0) ExifTool ref, 1) data ref # Reference: http://www.atsc.org/standards/a_52b.pdf sub ParseAC3Audio($$) { my ($et, $dataPt) = @_; if ($$dataPt =~ /\x0b\x77..(.)/sg) { my $sampleRate = ord($1) >> 6; my $tagTablePtr = GetTagTable('Image::ExifTool::M2TS::AC3'); $et->HandleTag($tagTablePtr, AudioSampleRate => $sampleRate); } } #------------------------------------------------------------------------------ # Extract information from AC-3 stream descriptor # Inputs: 0) ExifTool ref, 1) data ref # Reference: http://www.atsc.org/standards/a_52b.pdf # Note: This information is duplicated in the Audio stream, but it # is somewhat easier to extract it from the descriptor instead sub ParseAC3Descriptor($$) { my ($et, $dataPt) = @_; return if length $$dataPt < 3; my @v = unpack('C3', $$dataPt); my $tagTablePtr = GetTagTable('Image::ExifTool::M2TS::AC3'); # $et->HandleTag($tagTablePtr, 'AudioSampleRate', $v[0] >> 5); $et->HandleTag($tagTablePtr, 'AudioBitrate', $v[1] >> 2); $et->HandleTag($tagTablePtr, 'SurroundMode', $v[1] & 0x03); $et->HandleTag($tagTablePtr, 'AudioChannels', ($v[2] >> 1) & 0x0f); # don't (yet) decode any more (language codes, etc) } #------------------------------------------------------------------------------ # Parse PID stream data # Inputs: 0) Exiftool ref, 1) PID number, 2) PID type, 3) PID name, 4) data ref # Returns: 0=stream parsed OK, # 1=stream parsed but we want to parse more of these, # -1=can't parse yet because we don't know the type sub ParsePID($$$$$) { my ($et, $pid, $type, $pidName, $dataPt) = @_; # can't parse until we know the type (Program Map Table may be later in the stream) return -1 unless defined $type; my $verbose = $et->Options('Verbose'); if ($verbose > 1) { my $out = $et->Options('TextOut'); printf $out "Parsing stream 0x%.4x (%s)\n", $pid, $pidName; my %parms = ( Out => $out ); $parms{MaxLen} = 96 if $verbose < 4; HexDump($dataPt, undef, %parms) if $verbose > 2; } my $more = 0; if ($type == 0x01 or $type == 0x02) { # MPEG-1/MPEG-2 Video require Image::ExifTool::MPEG; Image::ExifTool::MPEG::ParseMPEGAudioVideo($et, $dataPt); } elsif ($type == 0x03 or $type == 0x04) { # MPEG-1/MPEG-2 Audio require Image::ExifTool::MPEG; Image::ExifTool::MPEG::ParseMPEGAudio($et, $dataPt); } elsif ($type == 0x1b) { # H.264 Video require Image::ExifTool::H264; $more = Image::ExifTool::H264::ParseH264Video($et, $dataPt); # force parsing additional H264 frames with ExtractEmbedded option $more = 1 if $et->Options('ExtractEmbedded'); } elsif ($type == 0x81 or $type == 0x87 or $type == 0x91) { # AC-3 audio ParseAC3Audio($et, $dataPt); } return $more; } #------------------------------------------------------------------------------ # Extract information from a M2TS file # Inputs: 0) ExifTool object reference, 1) DirInfo reference # Returns: 1 on success, 0 if this wasn't a valid M2TS file sub ProcessM2TS($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $pLen, $upkPrefix, $j, $fileType, $eof); my (%pmt, %pidType, %data, %sectLen); my ($startTime, $endTime, $backScan, $maxBack); my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); # read first packet return 0 unless $raf->Read($buff, 8) == 8; # test for magic number (sync byte is the only thing we can safely check) return 0 unless $buff =~ /^(....)?\x47/s; unless ($1) { $pLen = 188; # no timecode $fileType = 'M2T'; # (just as a way to tell there is no timecode) $upkPrefix = 'N'; } else { $pLen = 192; # 188-byte transport packet + leading 4-byte timecode (ref 4) $upkPrefix = 'x4N'; } $et->SetFileType($fileType); SetByteOrder('MM'); $raf->Seek(0,0); # rewind to start my $tagTablePtr = GetTagTable('Image::ExifTool::M2TS::Main'); # PID lookup strings (will add to this with entries from program map table) my %pidName = ( 0 => 'Program Association Table', 1 => 'Conditional Access Table', 2 => 'Transport Stream Description Table', 0x1fff => 'Null Packet', ); my %didPID = ( 1 => 0, 2 => 0, 0x1fff => 0 ); my %needPID = ( 0 => 1 ); # lookup for stream PID's that we still need to parse my $prePos = $pLen - 188; # byte position of packet prefix my $readSize = 64 * $pLen; # read 64 packets at once my $pEnd = 0; my $i = 0; $buff = ''; # parse packets from MPEG-2 Transport Stream for (;;) { unless (%needPID) { last unless defined $startTime; # seek backwards to find last PCR if (defined $backScan) { last if defined $endTime; $backScan -= $pLen; last if $backScan < $maxBack; } else { undef $endTime; last if $et->Options('FastScan'); $verbose and print "[Starting backscan for last PCR]\n"; # calculate position of last complete packet my $fwdPos = $raf->Tell(); $raf->Seek(0, 2) or last; my $fsize = $raf->Tell(); my $nPack = int($fsize / $pLen); $backScan = ($nPack - 1) * $pLen - $fsize; # set limit on how far back we will go $maxBack = $fwdPos - $fsize; $maxBack = -256000 if $maxBack < -256000; } $raf->Seek($backScan, 2) or last; } my $pos = $pEnd; # read more if necessary if ($pos + $pLen > length $buff) { $raf->Read($buff, $readSize) >= $pLen or $eof = 1, last; $pos = $pEnd = 0; } $pEnd += $pLen; # decode the packet prefix $pos += $prePos; my $prefix = unpack("x${pos}N", $buff); # (use unpack instead of Get32u for speed) # validate sync byte unless (($prefix & 0xff000000) == 0x47000000) { $et->Warn('Synchronization error') unless defined $backScan; last; } # my $transport_error_indicator = $prefix & 0x00800000; my $payload_unit_start_indicator = $prefix & 0x00400000; # my $transport_priority = $prefix & 0x00200000; my $pid =($prefix & 0x001fff00) >> 8; # packet ID # my $transport_scrambling_control = $prefix & 0x000000c0; my $adaptation_field_exists = $prefix & 0x00000020; my $payload_data_exists = $prefix & 0x00000010; # my $continuity_counter = $prefix & 0x0000000f; if ($verbose > 1) { print $out "Transport packet $i:\n"; ++$i; HexDump(\$buff, $pLen, Addr => $i * $pLen, Out => $out, Start => $pos - $prePos) if $verbose > 2; my $str = $pidName{$pid} ? " ($pidName{$pid})" : ''; printf $out " Timecode: 0x%.4x\n", Get32u(\$buff, 0) if $pLen == 192; printf $out " Packet ID: 0x%.4x$str\n", $pid; printf $out " Start Flag: %s\n", $payload_unit_start_indicator ? 'Yes' : 'No'; } $pos += 4; # handle adaptation field if ($adaptation_field_exists) { my $len = Get8u(\$buff, $pos++); $pos + $len > $pEnd and $et->Warn('Invalid adaptation field length'), last; # read PCR value for calculation of Duration if ($len > 6) { my $flags = Get8u(\$buff, $pos); if ($flags & 0x10) { # PCR_flag # combine 33-bit program_clock_reference_base and 9-bit extension my $pcrBase = Get32u(\$buff, $pos + 1); my $pcrExt = Get16u(\$buff, $pos + 5); # ignore separate programs (PID's) and store just the # first and last timestamps found in the file (is this OK?) $endTime = 300 * (2 * $pcrBase + ($pcrExt >> 15)) + ($pcrExt & 0x01ff); $startTime = $endTime unless defined $startTime; } } $pos += $len; } # all done with this packet unless it carries a payload # or if we are just looking for the last timestamp next unless $payload_data_exists and not defined $backScan; # decode payload data if ($pid == 0 or # program association table defined $pmt{$pid}) # program map table(s) { # must interpret pointer field if payload_unit_start_indicator is set my $buf2; if ($payload_unit_start_indicator) { # skip to start of section my $pointer_field = Get8u(\$buff, $pos); $pos += 1 + $pointer_field; $pos >= $pEnd and $et->Warn('Bad pointer field'), last; $buf2 = substr($buff, $pEnd-$pLen, $pLen); $pos -= $pEnd - $pLen; } else { # not the start of a section next unless $sectLen{$pid}; my $more = $sectLen{$pid} - length($data{$pid}); my $size = $pLen - $pos; $size = $more if $size > $more; $data{$pid} .= substr($buff, $pos, $size); next unless $size == $more; # we have the complete section now, so put into $buf2 for parsing $buf2 = $data{$pid}; $pos = 0; delete $data{$pid}; delete $sectLen{$pid}; } my $slen = length($buf2); # section length $pos + 8 > $slen and $et->Warn("Truncated payload"), last; # validate table ID my $table_id = Get8u(\$buf2, $pos); my $name = ($tableID{$table_id} || sprintf('Unknown (0x%x)',$table_id)) . ' Table'; my $expectedID = $pid ? 0x02 : 0x00; unless ($table_id == $expectedID) { $verbose > 1 and print $out " (skipping $name)\n"; delete $needPID{$pid}; $didPID{$pid} = 1; next; } # validate section syntax indicator for parsed tables (PAT, PMT) my $section_syntax_indicator = Get8u(\$buf2, $pos + 1) & 0xc0; $section_syntax_indicator == 0x80 or $et->Warn("Bad $name"), last; my $section_length = Get16u(\$buf2, $pos + 1) & 0x0fff; $section_length > 1021 and $et->Warn("Invalid $name length"), last; if ($slen < $section_length + 3) { # (3 bytes for table_id + section_length) # must wait until we have the full section $data{$pid} = substr($buf2, $pos); $sectLen{$pid} = $section_length + 3; next; } my $program_number = Get16u(\$buf2, $pos + 3); my $section_number = Get8u(\$buf2, $pos + 6); my $last_section_number = Get8u(\$buf2, $pos + 7); if ($verbose > 1) { print $out " $name length: $section_length\n"; print $out " Program No: $program_number\n" if $pid; printf $out " Stream ID: 0x%x\n", $program_number if not $pid; print $out " Section No: $section_number\n"; print $out " Last Sect.: $last_section_number\n"; } my $end = $pos + $section_length + 3 - 4; # (don't read 4-byte CRC) $pos += 8; if ($pid == 0) { # decode PAT (Program Association Table) while ($pos <= $end - 4) { my $program_number = Get16u(\$buf2, $pos); my $program_map_PID = Get16u(\$buf2, $pos + 2) & 0x1fff; $pmt{$program_map_PID} = $program_number; # save our PMT PID's my $str = "Program $program_number Map"; $pidName{$program_map_PID} = $str; $needPID{$program_map_PID} = 1 unless $didPID{$program_map_PID}; $verbose and printf $out " PID(0x%.4x) --> $str\n", $program_map_PID; $pos += 4; } } else { # decode PMT (Program Map Table) $pos + 4 > $slen and $et->Warn('Truncated PMT'), last; my $pcr_pid = Get16u(\$buf2, $pos) & 0x1fff; my $program_info_length = Get16u(\$buf2, $pos + 2) & 0x0fff; my $str = "Program $program_number Clock Reference"; $pidName{$pcr_pid} = $str; $verbose and printf $out " PID(0x%.4x) --> $str\n", $pcr_pid; $pos += 4; $pos + $program_info_length > $slen and $et->Warn('Truncated program info'), last; # dump program information descriptors if verbose if ($verbose > 1) { for ($j=0; $j<$program_info_length-2; ) { my $descriptor_tag = Get8u(\$buf2, $pos + $j); my $descriptor_length = Get8u(\$buf2, $pos + $j + 1); $j += 2; last if $j + $descriptor_length > $program_info_length; my $desc = substr($buf2, $pos+$j, $descriptor_length); $j += $descriptor_length; $desc =~ s/([\x00-\x1f\x80-\xff])/sprintf("\\x%.2x",ord $1)/eg; printf $out " Program Descriptor: Type=0x%.2x \"$desc\"\n", $descriptor_tag; }} $pos += $program_info_length; # skip descriptors (for now) while ($pos <= $end - 5) { my $stream_type = Get8u(\$buf2, $pos); my $elementary_pid = Get16u(\$buf2, $pos + 1) & 0x1fff; my $es_info_length = Get16u(\$buf2, $pos + 3) & 0x0fff; my $str = $streamType{$stream_type}; $str or $str = ($stream_type < 0x7f ? 'Reserved' : 'Private'); $str = sprintf('%s (0x%.2x)', $str, $stream_type); $str = "Program $program_number $str"; $verbose and printf $out " PID(0x%.4x) --> $str\n", $elementary_pid; if ($str =~ /(Audio|Video)/) { unless ($pidName{$elementary_pid}) { $et->HandleTag($tagTablePtr, $1 . 'StreamType', $stream_type) } # we want to parse all Audio and Video streams $needPID{$elementary_pid} = 1 unless $didPID{$elementary_pid}; } # save PID type and name string $pidName{$elementary_pid} = $str; $pidType{$elementary_pid} = $stream_type; $pos += 5; $pos + $es_info_length > $slen and $et->Warn('Trunacted ES info'), $pos = $end, last; # parse elementary stream descriptors for ($j=0; $j<$es_info_length-2; ) { my $descriptor_tag = Get8u(\$buf2, $pos + $j); my $descriptor_length = Get8u(\$buf2, $pos + $j + 1); $j += 2; last if $j + $descriptor_length > $es_info_length; my $desc = substr($buf2, $pos+$j, $descriptor_length); $j += $descriptor_length; if ($verbose > 1) { my $dstr = $desc; $dstr =~ s/([\x00-\x1f\x80-\xff])/sprintf("\\x%.2x",ord $1)/eg; printf $out " ES Descriptor: Type=0x%.2x \"$dstr\"\n", $descriptor_tag; } # parse type-specific descriptor information (once) unless ($didPID{$pid}) { if ($descriptor_tag == 0x81) { # AC-3 ParseAC3Descriptor($et, \$desc); } } } $pos += $es_info_length; } } # $pos = $end + 4; # skip CRC } elsif (not defined $didPID{$pid}) { # save data from the start of each elementary stream if ($payload_unit_start_indicator) { if (defined $data{$pid}) { # we must have a whole section, so parse now my $more = ParsePID($et, $pid, $pidType{$pid}, $pidName{$pid}, \$data{$pid}); # start fresh even if we couldn't process this PID yet delete $data{$pid}; unless ($more) { delete $needPID{$pid}; $didPID{$pid} = 1; next; } # set flag indicating we found this PID but we still want more $needPID{$pid} = -1; } # check for a PES header next if $pos + 6 > $pEnd; my $start_code = Get32u(\$buff, $pos); next unless ($start_code & 0xffffff00) == 0x00000100; my $stream_id = $start_code & 0xff; if ($verbose > 1) { my $pes_packet_length = Get16u(\$buff, $pos + 4); printf $out " Stream ID: 0x%.2x\n", $stream_id; print $out " Packet Len: $pes_packet_length\n"; } $pos += 6; unless ($noSyntax{$stream_id}) { next if $pos + 3 > $pEnd; # validate PES syntax my $syntax = Get8u(\$buff, $pos) & 0xc0; $syntax == 0x80 or $et->Warn('Bad PES syntax'), next; # skip PES header my $pes_header_data_length = Get8u(\$buff, $pos + 2); $pos += 3 + $pes_header_data_length; next if $pos >= $pEnd; } $data{$pid} = substr($buff, $pos, $pEnd-$pos); } else { next unless defined $data{$pid}; # accumulate data for each elementary stream $data{$pid} .= substr($buff, $pos, $pEnd-$pos); } # save only the first 256 bytes of most streams, except for # unknown or H.264 streams where we save 1 kB my $saveLen = (not $pidType{$pid} or $pidType{$pid} == 0x1b) ? 1024 : 256; if (length($data{$pid}) >= $saveLen) { my $more = ParsePID($et, $pid, $pidType{$pid}, $pidName{$pid}, \$data{$pid}); next if $more < 0; # wait for program map table (hopefully not too long) delete $data{$pid}; $more and $needPID{$pid} = -1, next; # parse more of these delete $needPID{$pid}; $didPID{$pid} = 1; } next; } if ($needPID{$pid}) { # we found and parsed a section with this PID, so # delete from the lookup of PID's we still need to parse delete $needPID{$pid}; $didPID{$pid} = 1; } } # calculate Duration if available if (defined $startTime and defined $endTime and $startTime != $endTime) { $endTime += 0x80000000 * 1200 if $startTime > $endTime; # handle 33-bit wrap $et->HandleTag($tagTablePtr, 'Duration', $endTime - $startTime); } if ($verbose) { my @need; foreach (keys %needPID) { push @need, sprintf('0x%.2x',$_) if $needPID{$_} > 0; } if (@need) { @need = sort @need; print $out "End of file. Missing PID(s): @need\n"; } else { my $what = $eof ? 'of file' : 'scan'; print $out "End $what. All PID's parsed.\n"; } } # parse any remaining partial PID streams my $pid; foreach $pid (sort keys %data) { ParsePID($et, $pid, $pidType{$pid}, $pidName{$pid}, \$data{$pid}); delete $data{$pid}; } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::M2TS - Read M2TS (AVCHD) meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to extract information from MPEG-2 transport streams, such as those used by AVCHD video. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://neuron2.net/library/mpeg2/iso13818-1.pdf> =item L<http://www.blu-raydisc.com/Assets/Downloadablefile/BD-RE_Part3_V2.1_WhitePaper_080406-15271.pdf> =item L<http://www.videohelp.com/forum/archive/reading-avchd-playlist-files-bdmv-playlist-mpl-t358888.html> =item L<http://en.wikipedia.org/wiki/MPEG_transport_stream> =item L<http://www.dunod.com/documents/9782100493463/49346_DVB.pdf> =item L<http://trac.handbrake.fr/browser/trunk/libhb/stream.c> =item L<http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=04560141> =item L<http://www.w6rz.net/xport.zip> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/M2TS Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/MakerNotes.pm�����������������������������������������������000644 �000765 �000024 �00000203116 12642461320 022315� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MakerNotes.pm # # Description: Read and write EXIF maker notes # # Revisions: 11/11/2004 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::MakerNotes; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess); use Image::ExifTool::Exif; sub ProcessUnknown($$$); sub ProcessUnknownOrPreview($$$); sub ProcessCanon($$$); sub ProcessGE2($$$); sub ProcessKodakPatch($$$); sub WriteUnknownOrPreview($$$); sub FixLeicaBase($$;$); $VERSION = '1.97'; my $debug; # set to 1 to enable debugging code # conditional list of maker notes # Notes: # - This is NOT a normal tag table! # - All byte orders are now specified because we can now # write maker notes into a file with different byte ordering! # - Put these in alphabetical order to make TagNames documentation nicer. @Image::ExifTool::MakerNotes::Main = ( # decide which MakerNotes to use (based on camera make/model) { Name => 'MakerNoteApple', Condition => '$$valPt =~ /^Apple iOS\0/', SubDirectory => { TagTable => 'Image::ExifTool::Apple::Main', ByteOrder => 'Unknown', Start => '$valuePtr + 14', Base => '$start - 14', }, }, { # this maker notes starts with a standard TIFF header at offset 0x0a # (must check Nikon signature first because Nikon Capture NX can generate # NEF images containing Nikon maker notes from JPEG images of any camera model) Name => 'MakerNoteNikon', Condition => '$$valPt=~/^Nikon\x00\x02/', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::Main', Start => '$valuePtr + 18', Base => '$start - 8', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteCanon', # (starts with an IFD) Condition => '$$self{Make} =~ /^Canon/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::Main', ProcessProc => \&ProcessCanon, ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteCasio', # do negative lookahead assertion just to get tags # in a nice order for documentation # (starts with an IFD) Condition => '$$self{Make}=~/^CASIO/ and $$valPt!~/^(QVC|DCI)\0/', SubDirectory => { TagTable => 'Image::ExifTool::Casio::Main', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteCasio2', # (starts with "QVC\0" [Casio] or "DCI\0" [Concord]) # (also found in AVI and MOV videos) Condition => '$$valPt =~ /^(QVC|DCI)\0/', SubDirectory => { TagTable => 'Image::ExifTool::Casio::Type2', Start => '$valuePtr + 6', ByteOrder => 'Unknown', FixBase => 1, # necessary for AVI and MOV videos }, }, { Name => 'MakerNoteFLIR', # (starts with IFD, Make is 'FLIR Systems AB' or 'FLIR Systems') Condition => '$$self{Make} =~ /^FLIR Systems/', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::Main', Start => '$valuePtr', ByteOrder => 'Unknown', }, }, { # The Fuji maker notes use a structure similar to a self-contained # TIFF file, but with "FUJIFILM" instead of the standard TIFF header Name => 'MakerNoteFujiFilm', # (starts with "FUJIFILM" -- also used by some Leica, Minolta and Sharp models) # (GE FujiFilm models start with "GENERALE") Condition => '$$valPt =~ /^(FUJIFILM|GENERALE)/', SubDirectory => { TagTable => 'Image::ExifTool::FujiFilm::Main', # there is an 8-byte maker tag (FUJIFILM) we must skip over OffsetPt => '$valuePtr+8', # the pointers are relative to the subdirectory start # (before adding the offsetPt) - PH Base => '$start', ByteOrder => 'LittleEndian', }, }, { Name => 'MakerNoteGE', Condition => '$$valPt =~ /^GE(\0\0|NIC\0)/', SubDirectory => { TagTable => 'Image::ExifTool::GE::Main', Start => '$valuePtr + 18', FixBase => 1, AutoFix => 1, ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteGE2', Condition => '$$valPt =~ /^GE\x0c\0\0\0\x16\0\0\0/', # Note: we will get a "Maker notes could not be parsed" warning when writing # these maker notes because they aren't currently supported for writing SubDirectory => { TagTable => 'Image::ExifTool::FujiFilm::Main', ProcessProc => \&ProcessGE2, Start => '$valuePtr + 12', Base => '$start - 6', ByteOrder => 'LittleEndian', # hard patch for crazy offsets FixOffsets => '$valuePtr -= 210 if $tagID >= 0x1303', }, }, { Name => 'MakerNoteHasselblad', Condition => '$$self{Make} eq "Hasselblad"', SubDirectory => { TagTable => 'Image::ExifTool::Unknown::Main', ByteOrder => 'Unknown', Start => '$valuePtr', Base => 0, # (avoids warnings since maker notes are not self-contained) }, }, # (the GE X5 has really messed up EXIF-like maker notes starting with # "GENIC\x0c\0" --> currently not decoded) { Name => 'MakerNoteHP', # PhotoSmart 720 (also Vivitar 3705, 3705B and 3715) Condition => '$$valPt =~ /^(Hewlett-Packard|Vivitar)/', SubDirectory => { TagTable => 'Image::ExifTool::HP::Main', ProcessProc => \&ProcessUnknown, ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteHP2', # PhotoSmart E427 # (this type of maker note also used by BenQ, Mustek, Sanyo, Traveler and Vivitar) Condition => '$$valPt =~ /^610[\0-\4]/', NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::HP::Type2', Start => '$valuePtr', ByteOrder => 'LittleEndian', }, }, { Name => 'MakerNoteHP4', # PhotoSmart M627 Condition => '$$valPt =~ /^IIII\x04\0/', NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::HP::Type4', Start => '$valuePtr', ByteOrder => 'LittleEndian', }, }, { Name => 'MakerNoteHP6', # PhotoSmart M425, M525 and M527 Condition => '$$valPt =~ /^IIII\x06\0/', NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::HP::Type6', Start => '$valuePtr', ByteOrder => 'LittleEndian', }, }, { Name => 'MakerNoteISL', # (used in Samsung GX20 samples) Condition => '$$valPt =~ /^ISLMAKERNOTE000\0/', # this maker notes starts with a TIFF-like header at offset 0x10 SubDirectory => { TagTable => 'Image::ExifTool::Unknown::Main', Start => '$valuePtr + 24', Base => '$start - 8', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteJVC', Condition => '$$valPt=~/^JVC /', SubDirectory => { TagTable => 'Image::ExifTool::JVC::Main', Start => '$valuePtr + 4', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteJVCText', Condition => '$$self{Make}=~/^(JVC|Victor)/ and $$valPt=~/^VER:/', NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::JVC::Text', }, }, { Name => 'MakerNoteKodak1a', Condition => '$$self{Make}=~/^EASTMAN KODAK/ and $$valPt=~/^KDK INFO/', NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Main', Start => '$valuePtr + 8', ByteOrder => 'BigEndian', }, }, { Name => 'MakerNoteKodak1b', Condition => '$$self{Make}=~/^EASTMAN KODAK/ and $$valPt=~/^KDK/', NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Main', Start => '$valuePtr + 8', ByteOrder => 'LittleEndian', }, }, { # used by various Kodak, HP, Pentax and Minolta models Name => 'MakerNoteKodak2', Condition => q{ $$valPt =~ /^.{8}Eastman Kodak/s or $$valPt =~ /^\x01\0[\0\x01]\0\0\0\x04\0[a-zA-Z]{4}/ }, NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Type2', ByteOrder => 'BigEndian', }, }, { # not much to key on here, but we know the # upper byte of the year should be 0x07: Name => 'MakerNoteKodak3', Condition => q{ $$self{Make} =~ /^EASTMAN KODAK/ and $$valPt =~ /^(?!MM|II).{12}\x07/s and $$valPt !~ /^(MM|II|AOC)/ }, NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Type3', ByteOrder => 'BigEndian', }, }, { Name => 'MakerNoteKodak4', Condition => q{ $$self{Make} =~ /^Eastman Kodak/ and $$valPt =~ /^.{41}JPG/s and $$valPt !~ /^(MM|II|AOC)/ }, NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Type4', ByteOrder => 'BigEndian', }, }, { Name => 'MakerNoteKodak5', Condition => q{ $$self{Make}=~/^EASTMAN KODAK/ and ($$self{Model}=~/CX(4200|4230|4300|4310|6200|6230)/ or # try to pick up similar models we haven't tested yet $$valPt=~/^\0(\x1a\x18|\x3a\x08|\x59\xf8|\x14\x80)\0/) }, NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Type5', ByteOrder => 'BigEndian', }, }, { Name => 'MakerNoteKodak6a', Condition => q{ $$self{Make}=~/^EASTMAN KODAK/ and $$self{Model}=~/DX3215/ }, NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Type6', ByteOrder => 'BigEndian', }, }, { Name => 'MakerNoteKodak6b', Condition => q{ $$self{Make}=~/^EASTMAN KODAK/ and $$self{Model}=~/DX3700/ }, NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Type6', ByteOrder => 'LittleEndian', }, }, { Name => 'MakerNoteKodak7', # look for something that looks like a serial number # (confirmed serial numbers have the format KXXXX########, but we also # accept other strings from sample images that may be serial numbers) Condition => q{ $$self{Make}=~/Kodak/i and $$valPt =~ /^[CK][A-Z\d]{3} ?[A-Z\d]{1,2}\d{2}[A-Z\d]\d{4}[ \0]/ }, NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Type7', ByteOrder => 'LittleEndian', }, }, { Name => 'MakerNoteKodak8a', # IFD-format maker notes: look for reasonable number of # entries and check format and count of first IFD entry Condition => q{ $$self{Make}=~/Kodak/i and ($$valPt =~ /^\0[\x02-\x7f]..\0[\x01-\x0c]\0\0/s or $$valPt =~ /^[\x02-\x7f]\0..[\x01-\x0c]\0..\0\0/s) }, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Type8', ProcessProc => \&ProcessUnknown, ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteKodak8b', # these maker notes have an extra 2 bytes after the entry count # (this is handled by the patch). Also, the IFD uses a Format 13, # which is some 2-byte format (not Float, as decoded by ExifTool) # - written by the PixPro AZ251, AZ361, AZ262, AZ521 Condition => q{ $$self{Make}=~/Kodak/i and $$valPt =~ /^MM\0\x2a\0\0\0\x08\0.\0\0/ }, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Type8', ProcessProc => \&ProcessKodakPatch, ByteOrder => 'BigEndian', Start => '$valuePtr + 8', Base => '$start - 8', }, }, { Name => 'MakerNoteKodak8c', # TIFF-format maker notes Condition => q{ $$self{Make}=~/Kodak/i and $$valPt =~ /^(MM\0\x2a\0\0\0\x08|II\x2a\0\x08\0\0\0)/ }, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Type8', ProcessProc => \&ProcessUnknown, ByteOrder => 'Unknown', Start => '$valuePtr + 8', Base => '$start - 8', }, }, { Name => 'MakerNoteKodak9', # test header and Kodak:DateTimeOriginal Condition => '$$valPt =~ m{^IIII[\x02\x03]\0.{14}\d{4}/\d{2}/\d{2} }s', NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Type9', ByteOrder => 'LittleEndian', }, }, { Name => 'MakerNoteKodak10', # yet another type of Kodak IFD-format maker notes: # this type begins with a byte order indicator, # followed immediately by the IFD Condition => q{ $$self{Make}=~/Kodak/i and $$valPt =~ /^(MM\0[\x02-\x7f]|II[\x02-\x7f]\0)/ }, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Type10', ProcessProc => \&ProcessUnknown, ByteOrder => 'Unknown', Start => '$valuePtr + 2', }, }, { Name => 'MakerNoteKodak11', # these maker notes have an extra 2 bytes after the entry count # - written by the PixPro S-1 (Note: Make is "JK Imaging, Ltd.", so check Model for "Kodak") Condition => q{ $$self{Model}=~/Kodak/i and $$valPt =~ /^II\x2a\0\x08\0\0\0.\0\0\0/ }, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Type11', ProcessProc => \&ProcessKodakPatch, ByteOrder => 'LittleEndian', Start => '$valuePtr + 8', Base => '$start - 8', }, }, { Name => 'MakerNoteKodakUnknown', Condition => '$$self{Make}=~/Kodak/i and $$valPt!~/^AOC\0/', NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Unknown', ByteOrder => 'BigEndian', }, }, { Name => 'MakerNoteKyocera', # (starts with "KYOCERA") Condition => '$$valPt =~ /^KYOCERA/', SubDirectory => { TagTable => 'Image::ExifTool::Unknown::Main', Start => '$valuePtr + 22', Base => '$start + 2', EntryBased => 1, ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteMinolta', Condition => q{ $$self{Make}=~/^(Konica Minolta|Minolta)/i and $$valPt !~ /^(MINOL|CAMER|MLY0|KC|\+M\+M|\xd7)/ }, SubDirectory => { TagTable => 'Image::ExifTool::Minolta::Main', ByteOrder => 'Unknown', }, }, { # the DiMAGE E323 (MINOL) and E500 (CAMER), and some models # of Mustek, Pentax, Ricoh and Vivitar (CAMER). Name => 'MakerNoteMinolta2', Condition => '$$valPt =~ /^(MINOL|CAMER)\0/ and $$self{OlympusCAMER} = 1', SubDirectory => { # these models use Olympus tags in the range 0x200-0x221 plus 0xf00 TagTable => 'Image::ExifTool::Olympus::Main', Start => '$valuePtr + 8', ByteOrder => 'Unknown', }, }, { # /^MLY0/ - DiMAGE G400, G500, G530, G600 # /^KC/ - Revio KD-420Z, DiMAGE E203 # /^+M+M/ - DiMAGE E201 # /^\xd7/ - DiMAGE RD3000 Name => 'MakerNoteMinolta3', Condition => '$$self{Make} =~ /^(Konica Minolta|Minolta)/i', Binary => 1, Notes => 'not EXIF-based', }, { Name => 'MakerNoteMotorola', Condition => '$$valPt=~/^MOT\0/', SubDirectory => { TagTable => 'Image::ExifTool::Motorola::Main', Start => '$valuePtr + 8', Base => '$start - 8', ByteOrder => 'Unknown', }, }, { # older Nikon maker notes Name => 'MakerNoteNikon2', Condition => '$$valPt=~/^Nikon\x00\x01/', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::Type2', Start => '$valuePtr + 8', ByteOrder => 'LittleEndian', }, }, { # headerless Nikon maker notes Name => 'MakerNoteNikon3', Condition => '$$self{Make}=~/^NIKON/i', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::Main', ByteOrder => 'Unknown', # most are little-endian, but D1 is big }, }, { Name => 'MakerNoteNintendo', # (starts with an IFD) Condition => '$$self{Make} eq "Nintendo"', SubDirectory => { TagTable => 'Image::ExifTool::Nintendo::Main', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteOlympus', # (if Make is 'SEIKO EPSON CORP.', starts with "EPSON\0") # (if Make is 'OLYMPUS OPTICAL CO.,LTD' or 'OLYMPUS CORPORATION', # starts with "OLYMP\0") Condition => '$$valPt =~ /^(OLYMP|EPSON)\0/', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::Main', Start => '$valuePtr + 8', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteOlympus2', # new Olympus maker notes start with "OLYMPUS\0" Condition => '$$valPt =~ /^OLYMPUS\0/', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::Main', Start => '$valuePtr + 12', Base => '$start - 12', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteLeica', # (starts with "LEICA\0\0\0") Condition => '$$self{Make} eq "LEICA"', SubDirectory => { # many Leica models use the same format as Panasonic TagTable => 'Image::ExifTool::Panasonic::Main', Start => '$valuePtr + 8', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteLeica2', # used by the M8 # (starts with "LEICA\0\0\0") Condition => '$$self{Make} =~ /^Leica Camera AG/ and $$valPt =~ /^LEICA\0\0\0/', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Leica2', # (the offset base is different in JPEG and DNG images, but we # can copy makernotes from one to the other, so we need special # logic to decide which base to apply) ProcessProc => \&FixLeicaBase, Start => '$valuePtr + 8', Base => '$start', # (- 8 for DNG images!) ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteLeica3', # used by the R8 and R9 # (starts with IFD) Condition => q{ $$self{Make} =~ /^Leica Camera AG/ and $$valPt !~ /^LEICA/ and $$self{Model} ne "S2" and $$self{Model} ne "LEICA M (Typ 240)" }, SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Leica3', Start => '$valuePtr', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteLeica4', # used by the M9/M-Monochrom # (M9 and M Monochrom start with "LEICA0\x03\0") Condition => '$$self{Make} =~ /^Leica Camera AG/ and $$valPt =~ /^LEICA0/', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Leica4', Start => '$valuePtr + 8', Base => '$start - 8', # (yay! Leica fixed the M8 problem) ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteLeica5', # used by the X1/X2/X VARIO/T # (X1 starts with "LEICA\0\x01\0", Make is "LEICA CAMERA AG") # (X2 starts with "LEICA\0\x05\0", Make is "LEICA CAMERA AG") # (X VARIO starts with "LEICA\0\x04\0", Make is "LEICA CAMERA AG") # (T (Typ 701) starts with "LEICA\0\0x6", Make is "LEICA CAMERA AG") # (X (Typ 113) starts with "LEICA\0\0x7", Make is "LEICA CAMERA AG") Condition => '$$valPt =~ /^LEICA\0[\x01\x04\x05\x06\x07]\0/', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Leica5', Start => '$valuePtr + 8', Base => '$start - 8', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteLeica6', # used by the S2, M (Typ 240) and S (Typ 006) # (starts with "LEICA\0\x02\xff", Make is "Leica Camera AG", but test the # model names separately because the maker notes data may not be loaded # at the time this is tested if they are in a JPEG trailer. Also, this # header is used by the M Monochrom (Type 246), with different offsets.) Condition => q{ ($$self{Make} eq 'Leica Camera AG' and ($$self{Model} eq 'S2' or $$self{Model} eq 'LEICA M (Typ 240)' or $$self{Model} eq 'LEICA S (Typ 006)')) }, DataTag => 'LeicaTrailer', # (generates fixup name for this tag) LeicaTrailer => 1, # flag to special-case this tag in the Exif code SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Leica6', Start => '$valuePtr + 8', ByteOrder => 'Unknown', # NOTE: Leica uses absolute file offsets when this maker note is stored # as a JPEG trailer -- this case is handled by ProcessLeicaTrailer in # Panasonic.pm, and any "Base" defined here is ignored for this case. # ExifTool may also create S2/M maker notes inside the APP1 segment when # copying from other files, and for this the normal EXIF offsets are used, # Base should not be defined! }, }, { Name => 'MakerNoteLeica7', # used by the M Monochrom (Typ 246) # (starts with "LEICA\0\x02\xff", Make is "Leica Camera AG") Condition => '$$valPt =~ /^LEICA\0\x02\xff/', DataTag => 'LeicaTrailer', # (generates fixup name for this tag) LeicaTrailer => 1, # flag to special-case this tag in the Exif code SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Leica6', Start => '$valuePtr + 8', ByteOrder => 'Unknown', Base => '-$base', # uses absolute file offsets }, }, { Name => 'MakerNoteLeica8', # used by the Q (Type 116) # (Q (Typ 116) starts with "LEICA\0\x08\0", Make is "LEICA CAMERA AG") # (SL (Typ 601) starts with "LEICA\0\x09\0", Make is "LEICA CAMERA AG") Condition => '$$valPt =~ /^LEICA\0[\x08\x09]\0/', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Leica5', Start => '$valuePtr + 8', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteLeica9', # used by the M9/M-Monochrom # (M9 and M Monochrom start with "LEICA0\x03\0") Condition => '$$self{Make} =~ /^Leica Camera AG/ and $$valPt =~ /^LEICA\0\x02\0/', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Leica9', Start => '$valuePtr + 8', Base => '$start - 8', ByteOrder => 'Unknown', }, }, { Name => 'MakerNotePanasonic', # (starts with "Panasonic\0") Condition => '$$valPt=~/^Panasonic/', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Main', Start => '$valuePtr + 12', ByteOrder => 'Unknown', }, }, { Name => 'MakerNotePanasonic2', # (starts with "Panasonic\0") Condition => '$$self{Make}=~/^Panasonic/ and $$valPt=~/^MKE/', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Type2', ByteOrder => 'LittleEndian', }, }, { Name => 'MakerNotePentax', # (starts with "AOC\0", but so does MakerNotePentax3) # (also used by some Samsung models) Condition => q{ $$valPt=~/^AOC\0/ and $$self{Model} !~ /^PENTAX Optio ?[34]30RS\s*$/ }, SubDirectory => { TagTable => 'Image::ExifTool::Pentax::Main', # process as Unknown maker notes because the start offset and # byte ordering are so variable ProcessProc => \&ProcessUnknown, # offsets can be totally whacky for Pentax maker notes, # so attempt to fix the offset base if possible FixBase => 1, ByteOrder => 'Unknown', }, }, { Name => 'MakerNotePentax2', # (starts with an IFD) # Casio-like maker notes used only by the Optio 330 and 430 Condition => '$$self{Make}=~/^Asahi/ and $$valPt!~/^AOC\0/', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::Type2', ProcessProc => \&ProcessUnknown, FixBase => 1, ByteOrder => 'Unknown', }, }, { Name => 'MakerNotePentax3', # (starts with "AOC\0", like the more common Pentax maker notes) # Casio maker notes used only by the Optio 330RS and 430RS Condition => '$$self{Make}=~/^Asahi/', SubDirectory => { TagTable => 'Image::ExifTool::Casio::Type2', ProcessProc => \&ProcessUnknown, FixBase => 1, ByteOrder => 'Unknown', }, }, { Name => 'MakerNotePentax4', # (starts with 3 or 4 digits) # HP2-like text-based maker notes used by Optio E20 Condition => '$$self{Make}=~/^PENTAX/ and $$valPt=~/^\d{3}/', NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::Pentax::Type4', Start => '$valuePtr', ByteOrder => 'LittleEndian', }, }, { Name => 'MakerNotePentax5', # (starts with "PENTAX \0") # used by cameras such as the Q, Optio S1, RS1500 and WG-1 Condition => '$$valPt=~/^PENTAX \0/', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::Main', Start => '$valuePtr + 10', Base => '$start - 10', ByteOrder => 'Unknown', }, }, { Name => 'MakerNotePentax6', # (starts with "S1\0\0\0\0\0\0\x0c\0\0\0") Condition => '$$valPt=~/^S1\0{6}\x0c\0{3}/', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::S1', Start => '$valuePtr + 12', Base => '$start - 12', ByteOrder => 'Unknown', }, }, { Name => 'MakerNotePhaseOne', # Starts with: 'IIIITwaR' or 'IIIICwaR' (have seen both written by P25) # (have also seen code which expects 'MMMMRawT') Condition => q{ return undef unless $$valPt =~ /^(IIII.waR|MMMMRaw.)/s; $self->OverrideFileType($$self{TIFF_TYPE} = 'IIQ') if $count > 1000000; return 1; }, NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::PhaseOne::Main' }, PutFirst => 1, # place immediately after TIFF header }, { Name => 'MakerNoteReconyx', Condition => q{ $$valPt =~ /^\x01\xf1([\x02\x03]\x00)?/ and ($1 or $$self{Make} eq "RECONYX") }, SubDirectory => { TagTable => 'Image::ExifTool::Reconyx::Main', ByteOrder => 'Little-endian', }, }, { Name => 'MakerNoteRicoh', # (my test R50 image starts with " \x02\x01" - PH) Condition => q{ $$self{Make} =~ /^(PENTAX )?RICOH/ and $$valPt =~ /^(Ricoh| |MM\0\x2a|II\x2a\0)/i and $$valPt !~ /^(MM\0\x2a\0\0\0\x08\0.\0\0|II\x2a\0\x08\0\0\0.\0\0\0)/s and $$self{Model} ne 'RICOH WG-M1' }, SubDirectory => { TagTable => 'Image::ExifTool::Ricoh::Main', Start => '$valuePtr + 8', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteRicoh2', # (the Ricoh HZ15 starts with "MM\0\x2a" and the Pentax XG-1 starts with "II\x2a\0", # but an extra 2 bytes of padding after the IFD entry count prevents these from # being processed as a standard IFD. Note that the offsets for the HZ15 are all # zeros, but they seem to be mostly OK for the XG-1) Condition => q{ $$self{Make} =~ /^(PENTAX )?RICOH/ and ($$self{Model} eq 'RICOH WG-M1' or $$valPt =~ /^(MM\0\x2a\0\0\0\x08\0.\0\0|II\x2a\0\x08\0\0\0.\0\0\0)/s) }, SubDirectory => { TagTable => 'Image::ExifTool::Ricoh::Type2', Start => '$valuePtr + 8', Base => '$start - 8', ByteOrder => 'Unknown', ProcessProc => \&ProcessKodakPatch, }, }, { Name => 'MakerNoteRicohText', Condition => '$$self{Make}=~/^RICOH/', NotIFD => 1, SubDirectory => { TagTable => 'Image::ExifTool::Ricoh::Text', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteSamsung1a', # Samsung STMN maker notes WITHOUT PreviewImage Condition => '$$valPt =~ /^STMN\d{3}.\0{4}/s', Binary => 1, Notes => 'Samsung "STMN" maker notes without PreviewImage', }, { Name => 'MakerNoteSamsung1b', # Samsung STMN maker notes WITH PreviewImage Condition => '$$valPt =~ /^STMN\d{3}/', SubDirectory => { TagTable => 'Image::ExifTool::Samsung::Main', }, }, { Name => 'MakerNoteSamsung2', # Samsung EXIF-format maker notes Condition => q{ $$self{Make} eq 'SAMSUNG' and ($$self{TIFF_TYPE} eq 'SRW' or $$valPt=~/^(\0.\0\x01\0\x07\0{3}\x04|.\0\x01\0\x07\0\x04\0{3})0100/s) }, SubDirectory => { TagTable => 'Image::ExifTool::Samsung::Type2', # Samsung is very inconsistent here, and uses absolute offsets for some # models and relative offsets for others, so process as Unknown ProcessProc => \&ProcessUnknown, FixBase => 1, ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteSanyo', # (starts with "SANYO\0") Condition => '$$self{Make}=~/^SANYO/ and $$self{Model}!~/^(C4|J\d|S\d)\b/', SubDirectory => { TagTable => 'Image::ExifTool::Sanyo::Main', Validate => '$val =~ /^SANYO/', Start => '$valuePtr + 8', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteSanyoC4', # The C4 offsets are wrong by 12, so they must be fixed Condition => '$$self{Make}=~/^SANYO/ and $$self{Model}=~/^C4\b/', SubDirectory => { TagTable => 'Image::ExifTool::Sanyo::Main', Validate => '$val =~ /^SANYO/', Start => '$valuePtr + 8', FixBase => 1, ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteSanyoPatch', # The J1, J2, J4, S1, S3 and S4 offsets are completely screwy Condition => '$$self{Make}=~/^SANYO/', SubDirectory => { TagTable => 'Image::ExifTool::Sanyo::Main', Validate => '$val =~ /^SANYO/', Start => '$valuePtr + 8', ByteOrder => 'Unknown', FixOffsets => 'Image::ExifTool::Sanyo::FixOffsets($valuePtr, $valEnd, $size, $tagID, $wFlag)', }, }, { Name => 'MakerNoteSigma', # (starts with "SIGMA\0") Condition => '$$self{Make}=~/^(SIGMA|FOVEON)/', SubDirectory => { TagTable => 'Image::ExifTool::Sigma::Main', Validate => '$val =~ /^(SIGMA|FOVEON)/', Start => '$valuePtr + 10', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteSony', # (starts with "SONY DSC \0" or "SONY CAM \0") # (TF1 starts with "\0\0SONY PIC\0") # (Hasselblad models start with "VHAB \0") Condition => '$$valPt=~/^(SONY (DSC|CAM|MOBILE)|\0\0SONY PIC\0|VHAB \0)/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Main', Start => '$valuePtr + 12', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteSony2', # (starts with "SONY PI\0" -- DSC-S650/S700/S750) Condition => '$$valPt=~/^SONY PI\0/ and $$self{OlympusCAMER}=1', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::Main', Start => '$valuePtr + 12', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteSony3', # (starts with "PREMI\0" -- DSC-S45/S500) Condition => '$$valPt=~/^(PREMI)\0/ and $$self{OlympusCAMER}=1', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::Main', Start => '$valuePtr + 8', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteSony4', # (starts with "SONY PIC\0" -- DSC-H200/J20/W370/W510, MHS-TS20) Condition => '$$valPt=~/^SONY PIC\0/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::PIC' }, }, { Name => 'MakerNoteSony5', # used in SR2 and ARW images Condition => '$$self{Make}=~/^SONY/ and $$valPt!~/^\x01\x00/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Main', Start => '$valuePtr', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteSonyEricsson', Condition => '$$valPt =~ /^SEMC MS\0/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Ericsson', Start => '$valuePtr + 20', Base => '$start - 8', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteSonySRF', Condition => '$$self{Make}=~/^SONY/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::SRF', Start => '$valuePtr', ByteOrder => 'Unknown', }, }, { Name => 'MakerNoteUnknownText', Condition => '$$valPt =~ /^[\x09\x0d\x0a\x20-\x7e]+\0*$/', Notes => 'unknown text-based maker notes', # show as binary if it is too long ValueConv => 'length($val) > 64 ? \$val : $val', ValueConvInv => '$val', }, { Name => 'MakerNoteUnknownBinary', # "LSI1\0" - SilverFast Condition => '$$valPt =~ /^LSI1\0/', Notes => 'unknown binary maker notes', Binary => 1, }, { Name => 'MakerNoteUnknown', PossiblePreview => 1, SubDirectory => { TagTable => 'Image::ExifTool::Unknown::Main', ProcessProc => \&ProcessUnknownOrPreview, WriteProc => \&WriteUnknownOrPreview, ByteOrder => 'Unknown', FixBase => 2, }, }, ); # insert writable properties so we can write our maker notes my $tagInfo; foreach $tagInfo (@Image::ExifTool::MakerNotes::Main) { $$tagInfo{Writable} = 'undef'; $$tagInfo{Format} = 'undef', # (make sure we don't convert this when reading) $$tagInfo{WriteGroup} = 'ExifIFD'; $$tagInfo{Groups} = { 1 => 'MakerNotes' }; next unless $$tagInfo{SubDirectory}; # make all SubDirectory tags block-writable $$tagInfo{Binary} = 1, $$tagInfo{MakerNotes} = 1; } #------------------------------------------------------------------------------ # Get normal offset of value data from end of maker note IFD # Inputs: 0) ExifTool object reference # Returns: Array: 0) relative flag (undef for no change) # 1) normal offset from end of IFD to first value (empty if unknown) # 2-N) other possible offsets used by some models # Notes: Directory size should be validated before calling this routine sub GetMakerNoteOffset($) { my $et = shift; # figure out where we expect the value data based on camera type my $make = $$et{Make}; my $model = $$et{Model}; my ($relative, @offsets); # normally value data starts 4 bytes after end of directory, so this is the default. # offsets of 0 and 4 are always allowed even if not specified, # but the first offset specified is the one used when writing if ($make =~ /^Canon/) { push @offsets, ($model =~ /\b(20D|350D|REBEL XT|Kiss Digital N)\b/) ? 6 : 4; # some Canon models (FV-M30, Optura50, Optura60) leave 24 unused bytes # at the end of the IFD (2 spare IFD entries?) push @offsets, 28 if $model =~ /\b(FV\b|OPTURA)/; # some Canon PowerShot models leave 12 unused bytes push @offsets, 16 if $model =~ /(PowerShot|IXUS|IXY)/; } elsif ($make =~ /^CASIO/) { # Casio AVI and MOV images use no padding, and their JPEG's use 4, # except some models like the EX-S770,Z65,Z70,Z75 and Z700 which use 16, # and the EX-Z35 which uses 2 (grrrr...) push @offsets, $$et{FILE_TYPE} =~ /^(RIFF|MOV)$/ ? 0 : (4, 16, 2); } elsif ($make =~ /^(General Imaging Co.|GEDSC IMAGING CORP.)/i) { push @offsets, 0; } elsif ($make =~ /^KYOCERA/) { push @offsets, 12; } elsif ($make =~ /^Leica Camera AG/) { if ($model eq 'S2') { # lots of empty space before first value in S2 images push @offsets, 4, ($$et{FILE_TYPE} eq 'JPEG' ? 286 : 274); } elsif ($model eq 'LEICA M MONOCHROM (Typ 246)') { push @offsets, 4, 130; } elsif ($model eq 'LEICA M (Typ 240)') { push @offsets, 4, 118; } elsif ($model =~ /^(R8|R9|M8)\b/) { push @offsets, 6; } else { push @offsets, 4; } } elsif ($make =~ /^OLYMPUS/ and $model =~ /^E-(1|300|330)\b/) { push @offsets, 16; } elsif ($make =~ /^OLYMPUS/ and # these Olympus models are just weird $model =~ /^(C2500L|C-1Z?|C-5000Z|X-2|C720UZ|C725UZ|C150|C2Z|E-10|E-20|FerrariMODEL2003|u20D|u10D)\b/) { # no expected offset --> determine offset empirically via FixBase() } elsif ($make =~ /^(Panasonic|JVC)\b/) { push @offsets, 0; } elsif ($make =~ /^SONY/) { # earlier DSLR and "PREMI" models use an offset of 4 if ($model =~ /^(DSLR-.*|SLT-A(33|35|55V)|NEX-(3|5|C3|VG10E))$/ or $$et{OlympusCAMER}) { push @offsets, 4; } else { push @offsets, 0; } } elsif ($make eq 'FUJIFILM') { # some models have offset of 6, so allow that too (A345,A350,A360,A370) push @offsets, 4, 6; } elsif ($make =~ /^TOSHIBA/) { # similar to Canon, can also have 24 bytes of padding push @offsets, 0, 24; } elsif ($make =~ /^PENTAX/) { push @offsets, 4; # the Pentax addressing mode is determined automatically, but # sometimes the algorithm gets it wrong, but Pentax always uses # absolute addressing, so force it to be absolute $relative = 0; } elsif ($make =~ /^Konica Minolta/i) { # patch for DiMAGE X50, Xg, Z2 and Z10 push @offsets, 4, -16; } elsif ($make =~ /^Minolta/) { # patch for DiMAGE 7, X20 and Z1 push @offsets, 4, -8, -12; } else { push @offsets, 4; # the normal offset } return ($relative, @offsets); } #------------------------------------------------------------------------------ # Get hash of value offsets / block sizes # Inputs: 0) Data pointer, 1) offset to start of directory, # 2) hash ref to return value pointers based on tag ID # Returns: 0) hash reference: keys are offsets, values are block sizes # 1) same thing, but with keys adjusted for value-based offsets # Notes: Directory size should be validated before calling this routine # - calculates MIN and MAX offsets in entry-based hash sub GetValueBlocks($$;$) { my ($dataPt, $dirStart, $tagPtr) = @_; my $numEntries = Get16u($dataPt, $dirStart); my ($index, $valPtr, %valBlock, %valBlkAdj, $end); for ($index=0; $index<$numEntries; ++$index) { my $entry = $dirStart + 2 + 12 * $index; my $format = Get16u($dataPt, $entry+2); last if $format < 1 or $format > 13; my $count = Get32u($dataPt, $entry+4); my $size = $count * $Image::ExifTool::Exif::formatSize[$format]; next if $size <= 4; $valPtr = Get32u($dataPt, $entry+8); $tagPtr and $$tagPtr{Get16u($dataPt, $entry)} = $valPtr; # save location and size of longest block at this offset unless (defined $valBlock{$valPtr} and $valBlock{$valPtr} > $size) { $valBlock{$valPtr} = $size; } # adjust for case of value-based offsets $valPtr += 12 * $index; unless (defined $valBlkAdj{$valPtr} and $valBlkAdj{$valPtr} > $size) { $valBlkAdj{$valPtr} = $size; my $end = $valPtr + $size; if (defined $valBlkAdj{MIN}) { # save minimum only if it has a value of 12 or greater $valBlkAdj{MIN} = $valPtr if $valBlkAdj{MIN} < 12 or $valBlkAdj{MIN} > $valPtr; $valBlkAdj{MAX} = $end if $valBlkAdj{MAX} > $end; } else { $valBlkAdj{MIN} = $valPtr; $valBlkAdj{MAX} = $end; } } } return(\%valBlock, \%valBlkAdj); } #------------------------------------------------------------------------------ # Fix base for value offsets in maker notes IFD (if necessary) # Inputs: 0) ExifTool object ref, 1) DirInfo hash ref # Return: amount of base shift (and $dirInfo Base and DataPos are updated, # FixedBy is set if offsets fixed, and Relative or EntryBased may be set) sub FixBase($$) { local $_; my ($et, $dirInfo) = @_; # don't fix base if fixing offsets individually or if we don't want to fix them return 0 if $$dirInfo{FixOffsets} or $$dirInfo{NoFixBase}; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos}; my $dirStart = $$dirInfo{DirStart} || 0; my $entryBased = $$dirInfo{EntryBased}; my $dirName = $$dirInfo{DirName}; my $fixBase = $et->Options('FixBase'); my $setBase = (defined $fixBase and $fixBase ne '') ? 1 : 0; my ($fix, $fixedBy, %tagPtr); # get hash of value block positions my ($valBlock, $valBlkAdj) = GetValueBlocks($dataPt, $dirStart, \%tagPtr); return 0 unless %$valBlock; # get sorted list of value offsets my @valPtrs = sort { $a <=> $b } keys %$valBlock; # # handle special case of Canon maker notes with TIFF footer containing original offset # if ($$et{Make} =~ /^Canon/ and $$dirInfo{DirLen} > 8) { my $footerPos = $dirStart + $$dirInfo{DirLen} - 8; my $footer = substr($$dataPt, $footerPos, 8); if ($footer =~ /^(II\x2a\0|MM\0\x2a)/ and # check for TIFF footer substr($footer,0,2) eq GetByteOrder()) # validate byte ordering { my $oldOffset = Get32u(\$footer, 4); my $newOffset = $dirStart + $dataPos; if ($setBase) { $fix = $fixBase; } else { $fix = $newOffset - $oldOffset; return 0 unless $fix; # Picasa and ACDSee have a bug where they update other offsets without # updating the TIFF footer (PH - 2009/02/25), so test for this case: # validate Canon maker note footer fix by checking offset of last value my $maxPt = $valPtrs[-1] + $$valBlock{$valPtrs[-1]}; # compare to end of maker notes, taking 8-byte footer into account my $endDiff = $dirStart + $$dirInfo{DirLen} - ($maxPt - $dataPos) - 8; # ignore footer offset only if end difference is exactly correct # (allow for possible padding byte, although I have never seen this) if (not $endDiff or $endDiff == 1) { $et->Warn('Canon maker note footer may be invalid (ignored)',1); return 0; } } $et->Warn("Adjusted $dirName base by $fix",1); $$dirInfo{FixedBy} = $fix; $$dirInfo{Base} += $fix; $$dirInfo{DataPos} -= $fix; return $fix; } } # # analyze value offsets to see if they need fixing. The first task is to determine # the minimum valid offset used (this is tricky, because we have to weed out bad # offsets written by some cameras) # my $minPt = $$dirInfo{MinOffset} = $valPtrs[0]; # if life were simple, this would be it my $ifdLen = 2 + 12 * Get16u($$dirInfo{DataPt}, $dirStart); my $ifdEnd = $dirStart + $ifdLen; my ($relative, @offsets) = GetMakerNoteOffset($et); my $makeDiff = $offsets[0]; my $verbose = $et->Options('Verbose'); my ($diff, $shift); # calculate expected minimum value offset my $expected = $dataPos + $ifdEnd + (defined $makeDiff ? $makeDiff : 4); $debug and print "$expected expected\n"; # zero our counters my ($countNeg12, $countZero, $countOverlap) = (0, 0, 0); my ($valPtr, $last); foreach $valPtr (@valPtrs) { printf("%d - %d (%d)\n", $valPtr, $valPtr + $$valBlock{$valPtr}, $valPtr - ($last || 0)) if $debug; if (defined $last) { my $gap = $valPtr - $last; if ($gap == 0 or $gap == 1) { ++$countZero; } elsif ($gap == -12 and not $entryBased) { # you get this when value offsets are relative to the IFD entry ++$countNeg12; } elsif ($gap < 0) { # any other negative difference indicates overlapping values ++$countOverlap if $valPtr; # (but ignore zero value pointers) } elsif ($gap >= $ifdLen) { # ignore previous minimum if we took a jump to near the expected value # (some values can be stored before the IFD) $minPt = $valPtr if abs($valPtr - $expected) <= 4; } # an offset less than 12 is surely garbage, so ignore it $minPt = $valPtr if $minPt < 12; } $last = $valPtr + $$valBlock{$valPtr}; } # could this IFD be using entry-based offsets? if ((($countNeg12 > $countZero and $$valBlkAdj{MIN} >= $ifdLen - 2) or ($$valBlkAdj{MIN} == $ifdLen - 2 or $$valBlkAdj{MIN} == $ifdLen + 2) ) and $$valBlkAdj{MAX} <= $$dirInfo{DirLen}-2) { # looks like these offsets are entry-based, so use the offsets # which have been correcting for individual entry position $entryBased = 1; $verbose and $et->Warn("$dirName offsets are entry-based",1); } else { # calculate offset difference from end of IFD to first value $diff = ($minPt - $dataPos) - $ifdEnd; $shift = 0; $countOverlap and $et->Warn("Overlapping $dirName values",1); if ($entryBased) { $et->Warn("$dirName offsets do NOT look entry-based",1); undef $entryBased; undef $relative; } # use PrintIM tag to do special check for correct absolute offsets if ($tagPtr{0xe00}) { my $ptr = $tagPtr{0xe00} - $dataPos; return 0 if $ptr > 0 and $ptr <= length($$dataPt) - 8 and substr($$dataPt, $ptr, 8) eq "PrintIM\0"; } # allow a range of reasonable differences for Unknown maker notes if ($$dirInfo{FixBase} and $$dirInfo{FixBase} == 2) { return 0 if $diff >=0 and $diff <= 24; } # ******** (used for testing to extract differences) ******** # $et->FoundTag('Diff', $diff); # $et->FoundTag('MakeDiff',$makeDiff); } # # handle entry-based offsets # if ($entryBased) { $debug and print "--> entry-based!\n"; # most of my entry-based samples have first value immediately # after last IFD entry (ie. no padding or next IFD pointer) $makeDiff = 0; push @offsets, 4; # but some do have a next IFD pointer # corrected entry-based offsets are relative to start of first entry my $expected = 12 * Get16u($$dirInfo{DataPt}, $dirStart); $diff = $$valBlkAdj{MIN} - $expected; # set up directory to read values with entry-based offsets # (ignore everything and set base to start of first entry) $shift = $dataPos + $dirStart + 2; $$dirInfo{Base} += $shift; $$dirInfo{DataPos} -= $shift; $$dirInfo{EntryBased} = 1; $$dirInfo{Relative} = 1; # entry-based offsets are relative delete $$dirInfo{FixBase}; # no automatic base fix undef $fixBase unless $setBase; } # # return without doing shift if offsets look OK # unless ($setBase) { # don't try to fix offsets for whacky cameras return $shift unless defined $makeDiff; # normal value data starts 4 bytes after IFD, but allow 0 or 4... return $shift if $diff == 0 or $diff == 4; # also check for allowed make-specific differences foreach (@offsets) { return $shift if $diff == $_; } } # # apply the fix, or issue a warning # # use default padding of 4 bytes unless already specified $makeDiff = 4 unless defined $makeDiff; $fix = $makeDiff - $diff; # assume standard diff for this make if ($$dirInfo{FixBase}) { # set flag if offsets are relative (base is at or above directory start) if ($dataPos - $fix + $dirStart <= 0) { $$dirInfo{Relative} = (defined $relative) ? $relative : 1; } if ($setBase) { $fixedBy = $fixBase; $fix += $fixBase; } } elsif (defined $fixBase) { $fix = $fixBase if $fixBase ne ''; $fixedBy = $fix; } else { # print warning unless difference looks reasonable if ($diff < 0 or $diff > 16 or ($diff & 0x01)) { $et->Warn("Possibly incorrect maker notes offsets (fix by $fix?)",1); } # don't do the fix (but we already adjusted base if entry-based) return $shift; } if (defined $fixedBy) { $et->Warn("Adjusted $dirName base by $fixedBy",1); $$dirInfo{FixedBy} = $fixedBy; } $$dirInfo{Base} += $fix; $$dirInfo{DataPos} -= $fix; return $fix + $shift; } #------------------------------------------------------------------------------ # Find start of IFD in unknown maker notes # Inputs: 0) reference to directory information # Returns: offset to IFD on success, undefined otherwise # - dirInfo may contain TagInfo reference for tag associated with directory # - on success, updates DirStart, DirLen, Base and DataPos in dirInfo # - also sets Relative flag in dirInfo if offsets are relative to IFD # Note: Changes byte ordering! sub LocateIFD($$) { my ($et, $dirInfo) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart} || 0; # (ignore MakerNotes DirLen since sometimes this is incorrect) my $size = $$dirInfo{DataLen} - $dirStart; my $dirLen = defined $$dirInfo{DirLen} ? $$dirInfo{DirLen} : $size; my $tagInfo = $$dirInfo{TagInfo}; my $ifdOffsetPos; # the IFD should be within the first 32 bytes # (Kyocera sets the current record at 22 bytes) my ($firstTry, $lastTry) = (0, 32); # make sure Base and DataPos are defined $$dirInfo{Base} or $$dirInfo{Base} = 0; $$dirInfo{DataPos} or $$dirInfo{DataPos} = 0; # # use tag information (if provided) to determine directory location # if ($tagInfo and $$tagInfo{SubDirectory}) { my $subdir = $$tagInfo{SubDirectory}; unless ($$subdir{ProcessProc} and ($$subdir{ProcessProc} eq \&ProcessUnknown or $$subdir{ProcessProc} eq \&ProcessUnknownOrPreview)) { # look for the IFD at the "Start" specified in our SubDirectory information my $valuePtr = $dirStart; my $newStart = $dirStart; if (defined $$subdir{Start}) { #### eval Start ($valuePtr) $newStart = eval($$subdir{Start}); } if ($$subdir{Base}) { # calculate subdirectory start relative to $base for eval my $start = $newStart + $$dirInfo{DataPos}; my $base = $$dirInfo{Base} || 0; #### eval Base ($start,$base) my $baseShift = eval($$subdir{Base}); # shift directory base (note: we may do this again below # if an OffsetPt is defined, but that doesn't matter since # the base shift is relative to DataPos, which we set too) $$dirInfo{Base} += $baseShift; $$dirInfo{DataPos} -= $baseShift; # this is a relative directory if Base depends on $start if ($$subdir{Base} =~ /\$start\b/) { $$dirInfo{Relative} = 1; # hack to fix Leica quirk if ($$subdir{ProcessProc} and $$subdir{ProcessProc} eq \&FixLeicaBase) { my $oldStart = $$dirInfo{DirStart}; $$dirInfo{DirStart} = $newStart; FixLeicaBase($et, $dirInfo); $$dirInfo{DirStart} = $oldStart; } } } # add offset to the start of the directory if necessary if ($$subdir{OffsetPt}) { if ($$subdir{ByteOrder} =~ /^Little/i) { SetByteOrder('II'); } elsif ($$subdir{ByteOrder} =~ /^Big/i) { SetByteOrder('MM'); } else { warn "Can't have variable byte ordering for SubDirectories using OffsetPt\n"; return undef; } #### eval OffsetPt ($valuePtr) $ifdOffsetPos = eval($$subdir{OffsetPt}) - $dirStart; } # pinpoint position to look for this IFD $firstTry = $lastTry = $newStart - $dirStart; } } # # scan for something that looks like an IFD # if ($dirLen >= 14 + $firstTry) { # minimum size for an IFD my $offset; IFD_TRY: for ($offset=$firstTry; $offset<=$lastTry; $offset+=2) { last if $offset + 14 > $dirLen; # 14 bytes is minimum size for an IFD my $pos = $dirStart + $offset; # # look for a standard TIFF header (Nikon uses it, others may as well), # if (SetByteOrder(substr($$dataPt, $pos, 2)) and Get16u($dataPt, $pos + 2) == 0x2a) { $ifdOffsetPos = 4; } if (defined $ifdOffsetPos) { # get pointer to IFD my $ptr = Get32u($dataPt, $pos + $ifdOffsetPos); if ($ptr >= $ifdOffsetPos + 4 and $ptr + $offset + 14 <= $dirLen) { # shift directory start and shorten dirLen accordingly $$dirInfo{DirStart} += $ptr + $offset; $$dirInfo{DirLen} -= $ptr + $offset; # shift pointer base to the start of the TIFF header my $shift = $$dirInfo{DataPos} + $dirStart + $offset; $$dirInfo{Base} += $shift; $$dirInfo{DataPos} -= $shift; $$dirInfo{Relative} = 1; # set "relative offsets" flag return $ptr + $offset; } undef $ifdOffsetPos; } # # look for a standard IFD (starts with 2-byte entry count) # my $num = Get16u($dataPt, $pos); next unless $num; # number of entries in an IFD should be between 1 and 255 if (!($num & 0xff)) { # lower byte is zero -- byte order could be wrong ToggleByteOrder(); $num >>= 8; } elsif ($num & 0xff00) { # upper byte isn't zero -- not an IFD next; } my $bytesFromEnd = $size - ($offset + 2 + 12 * $num); if ($bytesFromEnd < 4) { next unless $bytesFromEnd == 2 or $bytesFromEnd == 0; } # do a quick validation of all format types my $index; for ($index=0; $index<$num; ++$index) { my $entry = $pos + 2 + 12 * $index; my $format = Get16u($dataPt, $entry+2); my $count = Get32u($dataPt, $entry+4); unless ($format) { # patch for buggy Samsung NX200 JPEG MakerNotes entry count if ($num == 23 and $index == 21 and $$et{Make} eq 'SAMSUNG') { Set16u(21, $dataPt, $pos); # really 21 IFD entries! $et->Warn('Fixed incorrect Makernote entry count', 1); last; } # allow everything to be zero if not first entry # because some manufacturers pad with null entries next unless $count or $index == 0; # patch for Canon EOS 40D firmware 1.0.4 bug: allow zero format for last entry next if $index==$num-1 and $$et{Model}=~/EOS 40D/; } # patch for Sony cameras like the DSC-P10 that have invalid MakerNote entries next if $num == 12 and $$et{Make} eq 'SONY' and $index >= 8; # (would like to verify tag ID, but some manufactures don't # sort entries in order of tag ID so we don't have much of # a handle to verify this field) # verify format next IFD_TRY if $format < 1 or $format > 13; # count must be reasonable (can't test for zero count because # cameras like the 1DmkIII use this value) next IFD_TRY if $count & 0xff000000; # extra tests to avoid mis-identifying Samsung makernotes (GT-I9000, etc) next unless $num == 1; my $valueSize = $count * $Image::ExifTool::Exif::formatSize[$format]; if ($valueSize > 4) { next IFD_TRY if $valueSize > $size; my $valuePtr = Get32u($dataPt, $entry+8); next IFD_TRY if $valuePtr > 0x10000; } } $$dirInfo{DirStart} += $offset; # update directory start $$dirInfo{DirLen} -= $offset; return $offset; # success!! } } return undef; } #------------------------------------------------------------------------------ # Fix base offset for Leica maker notes # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, and updates $dirInfo if necessary for new directory sub FixLeicaBase($$;$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart} || 0; # get hash of value block positions my ($valBlock, $valBlkAdj) = GetValueBlocks($dataPt, $dirStart); if (%$valBlock) { # get sorted list of value offsets my @valPtrs = sort { $a <=> $b } keys %$valBlock; my $numEntries = Get16u($dataPt, $dirStart); my $diff = $valPtrs[0] - ($numEntries * 12 + 4); if ($diff > 8) { $$dirInfo{Base} -= 8; $$dirInfo{DataPos} += 8; } } my $success = 1; if ($tagTablePtr) { $success = Image::ExifTool::Exif::ProcessExif($et, $dirInfo, $tagTablePtr); } return $success; } #------------------------------------------------------------------------------ # Process Canon maker notes # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessCanon($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; # identify Canon MakerNote footer in HtmlDump # (this code moved from FixBase so it also works for Adobe MakN in DNG images) if ($$et{HTML_DUMP} and $$dirInfo{DirLen} > 8) { my $dataPos = $$dirInfo{DataPos}; my $dirStart = $$dirInfo{DirStart} || 0; my $footerPos = $dirStart + $$dirInfo{DirLen} - 8; my $footer = substr(${$$dirInfo{DataPt}}, $footerPos, 8); if ($footer =~ /^(II\x2a\0|MM\0\x2a)/ and substr($footer,0,2) eq GetByteOrder()) { my $oldOffset = Get32u(\$footer, 4); my $newOffset = $dirStart + $dataPos; my $str = sprintf('Original maker note offset: 0x%.4x', $oldOffset); if ($oldOffset != $newOffset) { $str .= sprintf("\nCurrent maker note offset: 0x%.4x", $newOffset); } my $filePos = ($$dirInfo{Base} || 0) + $dataPos + $footerPos; $et->HDump($filePos, 8, '[Canon MakerNotes footer]', $str); } } # process as normal return Image::ExifTool::Exif::ProcessExif($et, $dirInfo, $tagTablePtr); } #------------------------------------------------------------------------------ # Process GE type 2 maker notes # Inputs: 0) ExifTool object ref, 1) DirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessGE2($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt} or return 0; my $dirStart = $$dirInfo{DirStart} || 0; # these maker notes are missing the IFD entry count, but they # always have 25 entries, so write the entry count manually Set16u(25, $dataPt, $dirStart); return Image::ExifTool::Exif::ProcessExif($et, $dirInfo, $tagTablePtr); } #------------------------------------------------------------------------------ # Process broken Kodak type 8b maker notes # Inputs: 0) ExifTool object ref, 1) DirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessKodakPatch($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt} or return 0; my $dirStart = $$dirInfo{DirStart} || 0; # these maker notes have 2 extra bytes after the entry count, so fix this return 0 unless $$dirInfo{DirLen} > 2; Set16u(Get16u($dataPt,$dirStart), $dataPt, $dirStart+2); $$dirInfo{DirStart} += 2; return Image::ExifTool::Exif::ProcessExif($et, $dirInfo, $tagTablePtr); } #------------------------------------------------------------------------------ # Process unknown maker notes or PreviewImage # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, and updates $dirInfo if necessary for new directory sub ProcessUnknownOrPreview($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart}; my $dirLen = $$dirInfo{DirLen}; # check to see if this is a preview image if ($dirLen > 6 and substr($$dataPt, $dirStart, 3) eq "\xff\xd8\xff") { $et->VerboseDir('PreviewImage'); if ($$et{HTML_DUMP}) { my $pos = $$dirInfo{DataPos} + $$dirInfo{Base} + $dirStart; $et->HDump($pos, $dirLen, '(MakerNotes:PreviewImage data)', "Size: $dirLen bytes") } $et->FoundTag('PreviewImage', substr($$dataPt, $dirStart, $dirLen)); return 1; } return ProcessUnknown($et, $dirInfo, $tagTablePtr); } #------------------------------------------------------------------------------ # Write unknown maker notes or PreviewImage # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: directory data, '' to delete, or undef on error sub WriteUnknownOrPreview($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart}; my $dirLen = $$dirInfo{DirLen}; my $newVal; # check to see if this is a preview image if ($dirLen > 6 and substr($$dataPt, $dirStart, 3) eq "\xff\xd8\xff") { if ($$et{NEW_VALUE}{$Image::ExifTool::Extra{PreviewImage}}) { # write or delete new preview (if deleted, it can't currently be added back again) $newVal = $et->GetNewValue('PreviewImage') || ''; if ($et->Options('Verbose') > 1) { $et->VerboseValue("- MakerNotes:PreviewImage", substr($$dataPt, $dirStart, $dirLen)); $et->VerboseValue("+ MakerNotes:PreviewImage", $newVal) if $newVal; } ++$$et{CHANGED}; } else { $newVal = substr($$dataPt, $dirStart, $dirLen); } } else { # rewrite MakerNote IFD $newVal = Image::ExifTool::Exif::WriteExif($et, $dirInfo, $tagTablePtr); } return $newVal; } #------------------------------------------------------------------------------ # Process unknown maker notes assuming it is in EXIF IFD format # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, and updates $dirInfo if necessary for new directory sub ProcessUnknown($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $success = 0; my $loc = LocateIFD($et, $dirInfo); if (defined $loc) { $$et{UnknownByteOrder} = GetByteOrder(); if ($et->Options('Verbose') > 1) { my $out = $et->Options('TextOut'); my $indent = $$et{INDENT}; $indent =~ s/\| $/ /; printf $out "${indent}Found IFD at offset 0x%.4x in maker notes:\n", $$dirInfo{DirStart} + $$dirInfo{DataPos} + $$dirInfo{Base}; } $success = Image::ExifTool::Exif::ProcessExif($et, $dirInfo, $tagTablePtr); } else { $$et{UnknownByteOrder} = ''; # indicates we tried but didn't set byte order $et->Warn("Unrecognized $$dirInfo{DirName}", 1); } return $success; } 1; # end __END__ =head1 NAME Image::ExifTool::MakerNotes - Read and write EXIF maker notes =head1 SYNOPSIS This module is required by Image::ExifTool. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret maker notes in EXIF information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames(3pm)|Image::ExifTool::TagNames>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Matroska.pm�������������������������������������������������000644 �000765 �000024 �00000101167 12642461321 022032� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Matroska.pm # # Description: Read meta information from Matroska multimedia files # # Revisions: 05/26/2010 - P. Harvey Created # # References: 1) http://www.matroska.org/technical/specs/index.html #------------------------------------------------------------------------------ package Image::ExifTool::Matroska; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.07'; my %noYes = ( 0 => 'No', 1 => 'Yes' ); # Matroska tags # Note: The tag ID's in the Matroska documentation include the length designation # (the upper bits), which is not included in the tag ID's below %Image::ExifTool::Matroska::Main = ( GROUPS => { 2 => 'Video' }, VARS => { NO_LOOKUP => 1 }, # omit tags from lookup NOTES => q{ The following tags are extracted from Matroska multimedia container files. This container format is used by file types such as MKA, MKV, MKS and WEBM. For speed, ExifTool extracts tags only up to the first Cluster unless the Verbose (-v) or Unknown = 2 (-U) option is used. See L<http://www.matroska.org/technical/specs/index.html> for the official Matroska specification. }, # supported Format's: signed, unsigned, float, date, string, utf8 # (or undef by default) # # EBML Header # 0xa45dfa3 => { Name => 'EBMLHeader', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x286 => { Name => 'EBMLVersion', Format => 'unsigned' }, 0x2f7 => { Name => 'EBMLReadVersion', Format => 'unsigned' }, 0x2f2 => { Name => 'EBMLMaxIDLength', Format => 'unsigned', Unknown => 1 }, 0x2f3 => { Name => 'EBMLMaxSizeLength', Format => 'unsigned', Unknown => 1 }, 0x282 => { Name => 'DocType', Format => 'string', # override FileType for "webm" files RawConv => '$self->OverrideFileType("WEBM") if $val eq "webm"; $val', }, 0x287 => { Name => 'DocTypeVersion', Format => 'unsigned' }, 0x285 => { Name => 'DocTypeReadVersion',Format => 'unsigned' }, # # General # 0x3f => { Name => 'CRC-32', Binary => 1, Unknown => 1 }, 0x6c => { Name => 'Void', NoSave => 1, Unknown => 1 }, # # Signature # 0xb538667 => { Name => 'SignatureSlot', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x3e8a => { Name => 'SignatureAlgo', Format => 'unsigned' }, 0x3e9a => { Name => 'SignatureHash', Format => 'unsigned' }, 0x3ea5 => { Name =>'SignaturePublicKey',Binary => 1, Unknown => 1 }, 0x3eb5 => { Name => 'Signature', Binary => 1, Unknown => 1 }, 0x3e5b => { Name => 'SignatureElements', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x3e7b => { Name => 'SignatureElementList', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x2532 => { Name => 'SignedElement', Binary => 1, Unknown => 1 }, # # Segment # 0x8538067 => { Name => 'SegmentHeader', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x14d9b74 => { Name => 'SeekHead', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0xdbb => { Name => 'Seek', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x13ab => { Name => 'SeekID', Binary => 1, Unknown => 1 }, 0x13ac => { Name => 'SeekPosition', Format => 'unsigned', Unknown => 1 }, # # Segment Info # 0x549a966 => { Name => 'Info', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x33a4 => { Name => 'SegmentUID', Binary => 1, Unknown => 1 }, 0x3384 => { Name => 'SegmentFileName', Format => 'utf8' }, 0x1cb923 => { Name => 'PrevUID', Binary => 1, Unknown => 1 }, 0x1c83ab => { Name => 'PrevFileName', Format => 'utf8' }, 0x1eb923 => { Name => 'NextUID', Binary => 1, Unknown => 1 }, 0x1e83bb => { Name => 'NextFileName', Format => 'utf8' }, 0x0444 => { Name => 'SegmentFamily', Binary => 1, Unknown => 1 }, 0x2924 => { Name => 'ChapterTranslate', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x29fc => { Name => 'ChapterTranslateEditionUID',Format => 'unsigned', Unknown => 1 }, 0x29bf => { Name => 'ChapterTranslateCodec', Format => 'unsigned', PrintConv => { 0 => 'Matroska Script', 1 => 'DVD Menu' }, }, 0x29a5 => { Name => 'ChapterTranslateID',Binary => 1, Unknown => 1 }, 0xad7b1 => { Name => 'TimecodeScale', Format => 'unsigned', RawConv => '$$self{TimecodeScale} = $val', ValueConv => '$val / 1e9', PrintConv => '($val * 1000) . " ms"', }, 0x489 => { Name => 'Duration', Format => 'float', ValueConv => '$$self{TimecodeScale} ? $val * $$self{TimecodeScale} / 1e9 : $val', PrintConv => '$$self{TimecodeScale} ? ConvertDuration($val) : $val', }, 0x461 => { Name => 'DateTimeOriginal', # called "DateUTC" by the spec Description => 'Date/Time Original', Groups => { 2 => 'Time' }, Format => 'date', PrintConv => '$self->ConvertDateTime($val)', }, 0x3ba9 => { Name => 'Title', Format => 'utf8' }, 0xd80 => { Name => 'MuxingApp', Format => 'utf8' }, 0x1741 => { Name => 'WritingApp', Format => 'utf8' }, # # Cluster # 0xf43b675 => { Name => 'Cluster', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x67 => { Name => 'TimeCode', Format => 'unsigned', Unknown => 1, ValueConv => '$$self{TimecodeScale} ? $val * $$self{TimecodeScale} / 1e9 : $val', PrintConv => '$$self{TimecodeScale} ? ConvertDuration($val) : $val', }, 0x1854 => { Name => 'SilentTracks', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x18d7 => { Name => 'SilentTrackNumber',Format => 'unsigned' }, 0x27 => { Name => 'Position', Format => 'unsigned' }, 0x2b => { Name => 'PrevSize', Format => 'unsigned' }, 0x23 => { Name => 'SimpleBlock', NoSave => 1, Unknown => 1 }, 0x20 => { Name => 'BlockGroup', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x21 => { Name => 'Block', NoSave => 1, Unknown => 1 }, 0x22 => { Name => 'BlockVirtual', NoSave => 1, Unknown => 1 }, 0x35a1 => { Name => 'BlockAdditions', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x26 => { Name => 'BlockMore', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x6e => { Name => 'BlockAddID', Format => 'unsigned', Unknown => 1 }, 0x25 => { Name => 'BlockAdditional', NoSave => 1, Unknown => 1 }, 0x1b => { Name => 'BlockDuration', Format => 'unsigned', Unknown => 1, ValueConv => '$$self{TimecodeScale} ? $val * $$self{TimecodeScale} / 1e9 : $val', PrintConv => '$$self{TimecodeScale} ? "$val s" : $val', }, 0x7a => { Name => 'ReferencePriority',Format => 'unsigned', Unknown => 1 }, 0x7b => { Name => 'ReferenceBlock', Format => 'signed', Unknown => 1, ValueConv => '$$self{TimecodeScale} ? $val * $$self{TimecodeScale} / 1e9 : $val', PrintConv => '$$self{TimecodeScale} ? "$val s" : $val', }, 0x7d => { Name => 'ReferenceVirtual', Format => 'signed', Unknown => 1 }, 0x24 => { Name => 'CodecState', Binary => 1, Unknown => 1 }, 0x0e => { Name => 'Slices', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x68 => { Name => 'TimeSlice', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x4c => { Name => 'LaceNumber', Format => 'unsigned', Unknown => 1 }, 0x4d => { Name => 'FrameNumber', Format => 'unsigned', Unknown => 1 }, 0x4b => { Name => 'BlockAdditionalID',Format => 'unsigned', Unknown => 1 }, 0x4e => { Name => 'Delay', Format => 'unsigned', Unknown => 1 }, 0x4f => { Name => 'ClusterDuration', Format => 'unsigned', Unknown => 1 }, 0x2f => { Name => 'EncryptedBlock', NoSave => 1, Unknown => 1 }, # # Tracks # 0x654ae6b => { Name => 'Tracks', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x2e => { Name => 'TrackEntry', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x57 => { Name => 'TrackNumber', Format => 'unsigned' }, 0x33c5 => { Name => 'TrackUID', Format => 'unsigned', Unknown => 1 }, 0x03 => { Name => 'TrackType', Format => 'unsigned', PrintHex => 1, # remember types of all tracks encountered, as well as the current track type RawConv => '$$self{TrackTypes}{$val} = 1; $$self{TrackType} = $val', PrintConv => { 0x01 => 'Video', 0x02 => 'Audio', 0x03 => 'Complex', # (audio+video) 0x10 => 'Logo', 0x11 => 'Subtitle', 0x12 => 'Buttons', 0x20 => 'Control', }, }, 0x39 => { Name => 'TrackUsed', Format => 'unsigned', PrintConv => \%noYes }, 0x08 => { Name => 'TrackDefault', Format => 'unsigned', PrintConv => \%noYes }, 0x15aa => { Name => 'TrackForced', Format => 'unsigned', PrintConv => \%noYes }, 0x1c => { Name => 'TrackLacing', Format => 'unsigned', Unknown => 1, PrintConv => \%noYes, }, 0x2de7 => { Name => 'MinCache', Format => 'unsigned', Unknown => 1 }, 0x2df8 => { Name => 'MaxCache', Format => 'unsigned', Unknown => 1 }, 0x3e383 => [ { Name => 'VideoFrameRate', Condition => '$$self{TrackType} and $$self{TrackType} == 0x01', Format => 'unsigned', ValueConv => '$val ? 1e9 / $val : 0', PrintConv => 'int($val * 1000 + 0.5) / 1000', },{ Name => 'DefaultDuration', Format => 'unsigned', ValueConv => '$val / 1e9', PrintConv => '($val * 1000) . " ms"', } ], 0x3314f => { Name => 'TrackTimecodeScale',Format => 'float' }, 0x137f => { Name => 'TrackOffset', Format => 'signed', Unknown => 1 }, 0x15ee => { Name => 'MaxBlockAdditionID',Format => 'unsigned', Unknown => 1 }, 0x136e => { Name => 'TrackName', Format => 'utf8' }, 0x2b59c => { Name => 'TrackLanguage', Format => 'string' }, 0x06 => [ { Name => 'VideoCodecID', Condition => '$$self{TrackType} and $$self{TrackType} == 0x01', Format => 'string', },{ Name => 'AudioCodecID', Condition => '$$self{TrackType} and $$self{TrackType} == 0x02', Format => 'string', },{ Name => 'CodecID', Format => 'string', } ], 0x23a2 => { Name => 'CodecPrivate', Binary => 1, Unknown => 1 }, 0x58688 => [ { Name => 'VideoCodecName', Condition => '$$self{TrackType} and $$self{TrackType} == 0x01', Format => 'utf8', },{ Name => 'AudioCodecName', Condition => '$$self{TrackType} and $$self{TrackType} == 0x02', Format => 'utf8', },{ Name => 'CodecName', Format => 'utf8', } ], 0x3446 => { Name => 'TrackAttachmentUID',Format => 'unsigned' }, 0x1a9697=>{ Name => 'CodecSettings', Format => 'utf8' }, 0x1b4040=>{ Name => 'CodecInfoURL', Format => 'string' }, 0x6b240 =>{ Name => 'CodecDownloadURL', Format => 'string' }, 0x2a => { Name => 'CodecDecodeAll', Format => 'unsigned', PrintConv => \%noYes }, 0x2fab => { Name => 'TrackOverlay', Format => 'unsigned', Unknown => 1 }, 0x2624 => { Name => 'TrackTranslate', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x26fc => { Name => 'TrackTranslateEditionUID',Format => 'unsigned', Unknown => 1 }, 0x26bf => { Name => 'TrackTranslateCodec', Format => 'unsigned', PrintConv => { 0 => 'Matroska Script', 1 => 'DVD Menu' }, }, 0x26a5 => { Name => 'TrackTranslateTrackID', Binary => 1, Unknown => 1 }, # # Video # 0x60 => { Name => 'Video', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x1a => { Name => 'VideoScanType', Format => 'unsigned', PrintConv => { 0 => 'Progressive', 1 => 'Interlaced', }, }, 0x13b8 => { Name => 'Stereo3DMode', Format => 'unsigned', Printconv => { 0 => 'Mono', 1 => 'Right Eye', 2 => 'Left Eye', 3 => 'Both Eyes', }, }, 0x30 => { Name => 'ImageWidth', Format => 'unsigned' }, 0x3a => { Name => 'ImageHeight', Format => 'unsigned' }, 0x14aa => { Name => 'CropBottom', Format => 'unsigned' }, 0x14bb => { Name => 'CropTop', Format => 'unsigned' }, 0x14cc => { Name => 'CropLeft', Format => 'unsigned' }, 0x14dd => { Name => 'CropRight', Format => 'unsigned' }, 0x14b0 => { Name => 'DisplayWidth', Format => 'unsigned' }, 0x14ba => { Name => 'DisplayHeight', Format => 'unsigned' }, 0x14b2 => { Name => 'DisplayUnit', Format => 'unsigned', PrintConv => { 0 => 'Pixels', 1 => 'cm', 2 => 'inches', }, }, 0x14b3 => { Name => 'AspectRatioType', Format => 'unsigned', PrintConv => { 0 => 'Free Resizing', 1 => 'Keep Aspect Ratio', 2 => 'Fixed', }, }, 0xeb524 => { Name => 'ColorSpace', Binary => 1, Unknown => 1 }, 0xfb523 => { Name => 'Gamma', Format => 'float' }, 0x383e3 => { Name => 'FrameRate', Format => 'float' }, # # Audio # 0x61 => { Name => 'Audio', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x35 => { Name => 'AudioSampleRate', Format => 'float', Groups => { 2 => 'Audio' } }, 0x38b5 => { Name => 'OutputAudioSampleRate',Format => 'float', Groups => { 2 => 'Audio' } }, 0x1f => { Name => 'AudioChannels', Format => 'unsigned', Groups => { 2 => 'Audio' } }, 0x3d7b => { Name => 'ChannelPositions', Binary => 1, Unknown => 1, Groups => { 2 => 'Audio' }, }, 0x2264 => { Name => 'AudioBitsPerSample', Format => 'unsigned', Groups => { 2 => 'Audio' } }, # # Content Encoding # 0x2d80 => { Name => 'ContentEncodings', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x2240 => { Name => 'ContentEncoding', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x1031 => { Name => 'ContentEncodingOrder', Format => 'unsigned', Unknown => 1 }, 0x1032 => { Name => 'ContentEncodingScope', Format => 'unsigned', Unknown => 1 }, 0x1033 => { Name => 'ContentEncodingType', Format => 'unsigned', PrintConv => { 0 => 'Compression', 1 => 'Encryption' }, }, 0x1034 => { Name => 'ContentCompression', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x254 => { Name => 'ContentCompressionAlgorithm', Format => 'unsigned', PrintConv => { 0 => 'zlib', 1 => 'bzlib', 2 => 'lzo1x', 3 => 'Header Stripping', }, }, 0x255 => { Name => 'ContentCompressionSettings',Binary => 1, Unknown => 1 }, 0x1035 => { Name => 'ContentEncryption', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x7e1 => { Name => 'ContentEncryptionAlgorithm', Format => 'unsigned', PrintConv => { 0 => 'Not Encrypted', 1 => 'DES', 2 => '3DES', 3 => 'Twofish', 4 => 'Blowfish', 5 => 'AES', }, }, 0x7e2 => { Name => 'ContentEncryptionKeyID',Binary => 1, Unknown => 1 }, 0x7e3 => { Name => 'ContentSignature', Binary => 1, Unknown => 1 }, 0x7e4 => { Name => 'ContentSignatureKeyID', Binary => 1, Unknown => 1 }, 0x7e5 => { Name => 'ContentSignatureAlgorithm', Format => 'unsigned', PrintConv => { 0 => 'Not Signed', 1 => 'RSA', }, }, 0x7e6 => { Name => 'ContentSignatureHashAlgorithm', Format => 'unsigned', PrintConv => { 0 => 'Not Signed', 1 => 'SHA1-160', 2 => 'MD5', }, }, # # Cues # 0xc53bb6b => { Name => 'Cues', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x3b => { Name => 'CuePoint', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x33 => { Name => 'CueTime', Format => 'unsigned', Unknown => 1, ValueConv => '$$self{TimecodeScale} ? $val * $$self{TimecodeScale} / 1e9 : $val', PrintConv => '$$self{TimecodeScale} ? ConvertDuration($val) : $val', }, 0x37 => { Name => 'CueTrackPositions', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x77 => { Name => 'CueTrack', Format => 'unsigned', Unknown => 1 }, 0x71 => { Name => 'CueClusterPosition',Format => 'unsigned', Unknown => 1 }, 0x1378 => { Name => 'CueBlockNumber', Format => 'unsigned', Unknown => 1 }, 0x6a => { Name => 'CueCodecState', Format => 'unsigned', Unknown => 1 }, 0x5b => { Name => 'CueReference', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x16 => { Name => 'CueRefTime', Format => 'unsigned', Unknown => 1, ValueConv => '$$self{TimecodeScale} ? $val * $$self{TimecodeScale} / 1e9 : $val', PrintConv => '$$self{TimecodeScale} ? ConvertDuration($val) : $val', }, 0x17 => { Name => 'CueRefCluster', Format => 'unsigned', Unknown => 1 }, 0x135f=> { Name => 'CueRefNumber', Format => 'unsigned', Unknown => 1 }, 0x6b => { Name => 'CueRefCodecState', Format => 'unsigned', Unknown => 1 }, # # Attachments # 0x941a469 => { Name => 'Attachments', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x21a7 => { Name => 'AttachedFile', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x67e => { Name => 'AttachedFileDescription',Format => 'utf8' }, 0x66e => { Name => 'AttachedFileName', Format => 'utf8' }, 0x660 => { Name => 'AttachedFileMIMEType', Format => 'string' }, 0x65c => { Name => 'AttachedFileData', Binary => 1 }, 0x6ae => { Name => 'AttachedFileUID', Format => 'unsigned' }, 0x675 => { Name => 'AttachedFileReferral', Binary => 1, Unknown => 1 }, # # Chapters # 0x43a770 => { Name => 'Chapters', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x5b9 => { Name => 'EditionEntry', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x5bc => { Name => 'EditionUID', Format => 'unsigned', Unknown => 1 }, 0x5bd => { Name => 'EditionFlagHidden', Format => 'unsigned', Unknown => 1 }, 0x5db => { Name => 'EditionFlagDefault',Format => 'unsigned', Unknown => 1 }, 0x5dd => { Name => 'EditionFlagOrdered',Format => 'unsigned', Unknown => 1 }, 0x36 => { Name => 'ChapterAtom', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x33c4 => { Name => 'ChapterUID', Format => 'unsigned', Unknown => 1 }, 0x11 => { Name => 'ChapterTimeStart', Groups => { 1 => 'Chapter#' }, Format => 'unsigned', ValueConv => '$val / 1e9', PrintConv => 'ConvertDuration($val)', }, 0x12 => { Name => 'ChapterTimeEnd', Format => 'unsigned', ValueConv => '$val / 1e9', PrintConv => 'ConvertDuration($val)', }, 0x18 => { Name => 'ChapterFlagHidden', Format => 'unsigned', Unknown => 1 }, 0x598 => { Name => 'ChapterFlagEnabled',Format => 'unsigned', Unknown => 1 }, 0x2e67=> { Name => 'ChapterSegmentUID', Binary => 1, Unknown => 1 }, 0x2ebc=> { Name => 'ChapterSegmentEditionUID', Binary => 1, Unknown => 1 }, 0x23c3 => { Name => 'ChapterPhysicalEquivalent', Format => 'unsigned', PrintConv => { 10 => 'Index', 20 => 'Track', 30 => 'Session', 40 => 'Layer', 50 => 'Side', 60 => 'CD / DVD', 70 => 'Set / Package', }, }, 0x0f => { Name => 'ChapterTrack', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x09 => { Name => 'ChapterTrackNumber', Format => 'unsigned', Unknown => 1 }, 0x00 => { Name => 'ChapterDisplay', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x05 => { Name => 'ChapterString', Format => 'utf8' }, 0x37c => { Name => 'ChapterLanguage', Format => 'string' }, 0x37e => { Name => 'ChapterCountry', Format => 'string' }, 0x2944 => { Name => 'ChapterProcess', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x2955 => { Name => 'ChapterProcessCodecID', Format => 'unsigned', Unknown => 1, PrintConv => { 0 => 'Matroska', 1 => 'DVD' }, }, 0x50d => { Name => 'ChapterProcessPrivate', Binary => 1, Unknown => 1 }, 0x2911 => { Name => 'ChapterProcessCommand', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x2922 => { Name => 'ChapterProcessTime', Format => 'unsigned', Unknown => 1, PrintConv => { 0 => 'For Duration of Chapter', 1 => 'Before Chapter', 2 => 'After Chapter', }, }, 0x2933 => { Name => 'ChapterProcessData', Binary => 1, Unknown => 1 }, # # Tags # 0x254c367 => { Name => 'Tags', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x3373 => { Name => 'Tag', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x23c0 => { Name => 'Targets', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x28ca => { Name => 'TargetTypeValue', Format => 'unsigned' }, 0x23ca => { Name => 'TargetType', Format => 'string' }, 0x23c5 => { Name => 'TagTrackUID', Format => 'unsigned', Unknown => 1 }, 0x23c9 => { Name => 'TagEditionUID', Format => 'unsigned', Unknown => 1 }, 0x23c4 => { Name => 'TagChapterUID', Format => 'unsigned', Unknown => 1 }, 0x23c6 => { Name => 'TagAttachmentUID', Format => 'unsigned', Unknown => 1 }, 0x27c8 => { Name => 'SimpleTag', SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' }, }, 0x5a3 => { Name => 'TagName', Format => 'utf8' }, 0x47a => { Name => 'TagLanguage', Format => 'string' }, 0x484 => { Name => 'TagDefault', Format => 'unsigned', PrintConv => \%noYes }, 0x487 => { Name => 'TagString', Format => 'utf8' }, 0x485 => { Name => 'TagBinary', Binary => 1 }, ); #------------------------------------------------------------------------------ # Get variable-length Matroska integer # Inputs: 0) data buffer, 1) position in data # Returns: integer value and updates position, -1 for unknown/reserved value, # or undef if no data left sub GetVInt($$) { return undef if $_[1] >= length $_[0]; my $val = ord(substr($_[0], $_[1]++)); my $num = 0; unless ($val) { return undef if $_[1] >= length $_[0]; $val = ord(substr($_[0], $_[1]++)); return undef unless $val; # can't be this large! $num += 7; # 7 more bytes to read (we just read one) } my $mask = 0x7f; while ($val == ($val & $mask)) { $mask >>= 1; ++$num; } $val = ($val & $mask); my $unknown = ($val == $mask); return undef if $_[1] + $num > length $_[0]; while ($num) { my $b = ord(substr($_[0], $_[1]++)); $unknown = 0 if $b != 0xff; $val = $val * 256 + $b; --$num; } return $unknown ? -1 : $val; } #------------------------------------------------------------------------------ # Read information from a Matroska multimedia file (MKV, MKA, MKS) # Inputs: 0) ExifTool object reference, 1) Directory information reference # Returns: 1 on success, 0 if this wasn't a valid Matroska file sub ProcessMKV($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $buf2, @dirEnd, $trackIndent, %trackTypes); $raf->Read($buff, 4) == 4 or return 0; return 0 unless $buff =~ /^\x1a\x45\xdf\xa3/; # read in 64kB blocks (already read 4 bytes) $raf->Read($buff, 65532) or return 0; my $dataLen = length $buff; my ($pos, $dataPos) = (0, 4); # verify header length my $hlen = GetVInt($buff, $pos); return 0 unless $hlen and $hlen > 0; $pos + $hlen > $dataLen and $et->Warn('Truncated Matroska header'), return 1; $et->SetFileType(); SetByteOrder('MM'); my $tagTablePtr = GetTagTable('Image::ExifTool::Matroska::Main'); # set flag to process entire file (otherwise we stop at the first Cluster) my $verbose = $et->Options('Verbose'); my $processAll = ($verbose or $et->Options('Unknown') > 1); $$et{TrackTypes} = \%trackTypes; # store Track types reference my $oldIndent = $$et{INDENT}; my $chapterNum = 0; # loop over all Matroska elements for (;;) { while (@dirEnd and $pos + $dataPos >= $dirEnd[-1][0]) { pop @dirEnd; # use INDENT to decide whether or not we are done this Track element delete $$et{SET_GROUP1} if $trackIndent and $trackIndent eq $$et{INDENT}; $$et{INDENT} = substr($$et{INDENT}, 0, -2); } # read more if we are getting close to the end of our buffer # (24 more bytes should be enough to read this element header) if ($pos + 24 > $dataLen and $raf->Read($buf2, 65536)) { $buff = substr($buff, $pos) . $buf2; undef $buf2; $dataPos += $pos; $dataLen = length $buff; $pos = 0; } my $tag = GetVInt($buff, $pos); last unless defined $tag and $tag >= 0; my $size = GetVInt($buff, $pos); last unless defined $size; my $unknownSize; $size < 0 and $unknownSize = 1, $size = 1e20; if (@dirEnd and $pos + $dataPos + $size > $dirEnd[-1][0]) { $et->Warn("Invalid or corrupted $dirEnd[-1][1] master element"); $pos = $dirEnd[-1][0] - $dataPos; if ($pos < 0 or $pos > $dataLen) { $buff = ''; $dataPos += $pos; $dataLen = 0; $pos = 0; $raf->Seek($dataPos, 0) or last; } next; } my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); # just fall through into the contained EBML elements if ($tagInfo and $$tagInfo{SubDirectory}) { # stop processing at first cluster unless we are in verbose mode last if $$tagInfo{Name} eq 'Cluster' and not $processAll; $$et{INDENT} .= '| '; $et->VerboseDir($$tagTablePtr{$tag}{Name}, undef, $size); push @dirEnd, [ $pos + $dataPos + $size, $$tagInfo{Name} ]; if ($$tagInfo{Name} eq 'ChapterAtom') { $$et{SET_GROUP1} = 'Chapter' . (++$chapterNum); $trackIndent = $$et{INDENT}; } next; } last if $unknownSize; if ($pos + $size > $dataLen) { # how much more do we need to read? my $more = $pos + $size - $dataLen; # just skip unknown and large data blocks if (not $tagInfo or $more > 10000000) { # don't try to skip very large blocks unless LargeFileSupport is enabled last if $more > 0x80000000 and not $et->Options('LargeFileSupport'); $raf->Seek($more, 1) or last; $buff = ''; $dataPos += $dataLen + $more; $dataLen = 0; $pos = 0; next; } else { # read data in multiples of 64kB $more = (int($more / 65536) + 1) * 65536; if ($raf->Read($buf2, $more)) { $buff = substr($buff, $pos) . $buf2; undef $buf2; $dataPos += $pos; $dataLen = length $buff; $pos = 0; } last if $pos + $size > $dataLen; } } unless ($tagInfo) { # ignore the element $pos += $size; next; } my $val; if ($$tagInfo{Format}) { my $fmt = $$tagInfo{Format}; if ($fmt eq 'string' or $fmt eq 'utf8') { ($val = substr($buff, $pos, $size)) =~ s/\0.*//s; $val = $et->Decode($val, 'UTF8') if $fmt eq 'utf8'; } elsif ($fmt eq 'float') { if ($size == 4) { $val = GetFloat(\$buff, $pos); } elsif ($size == 8) { $val = GetDouble(\$buff, $pos); } else { $et->Warn("Illegal float size ($size)"); } } else { my @vals = unpack("x${pos}C$size", $buff); $val = 0; if ($fmt eq 'signed' or $fmt eq 'date') { my $over = 1; foreach (@vals) { $val = $val * 256 + $_; $over *= 256; } # interpret negative numbers $val -= $over if $vals[0] & 0x80; # convert dates (nanoseconds since 2001:01:01) if ($fmt eq 'date') { my $t = $val / 1e9; my $f = $t - int($t); # fractional seconds $f =~ s/^\d+//; # remove leading zero # (8 leap days between 1970 and 2001) $t += (((2001-1970)*365+8)*24*3600); $val = Image::ExifTool::ConvertUnixTime($t) . $f . 'Z'; } } else { # must be unsigned $val = $val * 256 + $_ foreach @vals; } } # set group1 to Track/Chapter number if ($$tagInfo{Name} eq 'TrackNumber') { $$et{SET_GROUP1} = 'Track' . $val; $trackIndent = $$et{INDENT}; } } my %parms = ( DataPt => \$buff, DataPos => $dataPos, Start => $pos, Size => $size, ); if ($$tagInfo{NoSave}) { $et->VerboseInfo($tag, $tagInfo, Value => $val, %parms) if $verbose; } else { $et->HandleTag($tagTablePtr, $tag, $val, %parms); } $pos += $size; # step to next element } $$et{INDENT} = $oldIndent; delete $$et{SET_GROUP1}; # override file type if necessary based on existing track types unless ($trackTypes{0x01} or $trackTypes{0x03}) { # video or complex? if ($trackTypes{0x02}) { # audio? $et->OverrideFileType('MKA'); } elsif ($trackTypes{0x11}) { # subtitle? $et->OverrideFileType('MKS'); } } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::Matroska - Read meta information from Matroska files =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read meta information from Matroska multimedia files (MKA, MKV, MKS and WEBM). =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.matroska.org/technical/specs/index.html> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Matroska Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Microsoft.pm������������������������������������������������000644 �000765 �000024 �00000126156 12642461321 022223� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Microsoft.pm # # Description: Definitions for custom Microsoft tags # # Revisions: 2010/10/01 - P. Harvey Created # 2011/10/05 - PH Added ProcessXtra() # # References: 1) http://research.microsoft.com/en-us/um/redmond/groups/ivm/hdview/hdmetadataspec.htm #------------------------------------------------------------------------------ package Image::ExifTool::Microsoft; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::XMP; $VERSION = '1.17'; sub ProcessXtra($$$); # tags written by Microsoft HDView (ref 1) %Image::ExifTool::Microsoft::Stitch = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'float', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, NOTES => q{ Information found in the Microsoft custom EXIF tag 0x4748, as written by Windows Live Photo Gallery. }, 0 => { Name => 'PanoramicStitchVersion', Format => 'int32u', }, 1 => { Name => 'PanoramicStitchCameraMotion', Format => 'int32u', PrintConv => { 2 => 'Rigid Scale', 3 => 'Affine', 4 => '3D Rotation', 5 => 'Homography', }, }, 2 => { Name => 'PanoramicStitchMapType', Format => 'int32u', PrintConv => { 0 => 'Perspective', 1 => 'Horizontal Cylindrical', 2 => 'Horizontal Spherical', 257 => 'Vertical Cylindrical', 258 => 'Vertical Spherical', }, }, 3 => 'PanoramicStitchTheta0', 4 => 'PanoramicStitchTheta1', 5 => 'PanoramicStitchPhi0', 6 => 'PanoramicStitchPhi1', ); # Microsoft Photo schema properties (MicrosoftPhoto) (ref PH) %Image::ExifTool::Microsoft::XMP = ( %Image::ExifTool::XMP::xmpTableDefaults, GROUPS => { 0 => 'XMP', 1 => 'XMP-microsoft', 2 => 'Image' }, NAMESPACE => 'MicrosoftPhoto', TABLE_DESC => 'XMP Microsoft', VARS => { NO_ID => 1 }, NOTES => q{ Microsoft Photo 1.0 schema XMP tags. This is likely not a complete list, but represents tags which have been observed in sample images. The actual namespace prefix is "MicrosoftPhoto", but ExifTool shortens this to "XMP-microsoft" in the family 1 group name. }, CameraSerialNumber => { }, DateAcquired => { Groups => { 2 => 'Time' }, %Image::ExifTool::XMP::dateTimeInfo }, FlashManufacturer => { }, FlashModel => { }, LastKeywordIPTC => { List => 'Bag' }, LastKeywordXMP => { List => 'Bag' }, LensManufacturer => { }, LensModel => { Avoid => 1 }, Rating => { Name => 'RatingPercent', Notes => q{ called Rating by the spec. XMP-xmp:Rating values of 1,2,3,4 and 5 stars correspond to RatingPercent values of 1,25,50,75 and 99 respectively }, }, CreatorAppId => { Name => 'CreatorAppID' }, CreatorOpenWithUIOptions => { }, ); # Microsoft Photo 1.1 schema properties (MP1 - written as 'prefix0' by MSPhoto) (ref PH) %Image::ExifTool::Microsoft::MP1 = ( %Image::ExifTool::XMP::xmpTableDefaults, GROUPS => { 0 => 'XMP', 1 => 'XMP-MP1', 2 => 'Image' }, NAMESPACE => 'MP1', TABLE_DESC => 'XMP Microsoft Photo', VARS => { NO_ID => 1 }, NOTES => q{ Microsoft Photo 1.1 schema XMP tags which have been observed. }, PanoramicStitchCameraMotion => { PrintConv => { 'RigidScale' => 'Rigid Scale', 'Affine' => 'Affine', '3DRotation' => '3D Rotation', 'Homography' => 'Homography', }, }, PanoramicStitchMapType => { PrintConv => { 'Perspective' => 'Perspective', 'Horizontal-Cylindrical' => 'Horizontal Cylindrical', 'Horizontal-Spherical' => 'Horizontal Spherical', 'Vertical-Cylindrical' => 'Vertical Cylindrical', 'Vertical-Spherical' => 'Vertical Spherical', }, }, PanoramicStitchPhi0 => { Writable => 'real' }, PanoramicStitchPhi1 => { Writable => 'real' }, PanoramicStitchTheta0 => { Writable => 'real' }, PanoramicStitchTheta1 => { Writable => 'real' }, WhiteBalance0 => { Writable => 'real' }, WhiteBalance1 => { Writable => 'real' }, WhiteBalance2 => { Writable => 'real' }, Brightness => { Avoid => 1 }, Contrast => { Avoid => 1 }, CameraModelID => { Avoid => 1 }, ExposureCompensation => { Avoid => 1 }, PipelineVersion => { }, StreamType => { }, ); # Microsoft Photo 1.2 schema properties (MP) (ref PH) # (also ref http://msdn.microsoft.com/en-us/library/windows/desktop/ee719905(v=vs.85).aspx) my %sRegions = ( STRUCT_NAME => 'Microsoft Regions', NAMESPACE => 'MPReg', NOTES => q{ Note that PersonLiveIdCID element is called PersonLiveCID according to the Microsoft specification, but in practice their software actually writes PersonLiveIdCID, so ExifTool uses this too. }, Rectangle => { }, PersonDisplayName => { }, PersonEmailDigest => { }, PersonLiveIdCID => { }, # (see http://130.15.24.88/exiftool/forum/index.php?topic=4274.msg20368#msg20368) PersonSourceID => { }, ); %Image::ExifTool::Microsoft::MP = ( %Image::ExifTool::XMP::xmpTableDefaults, GROUPS => { 0 => 'XMP', 1 => 'XMP-MP', 2 => 'Image' }, NAMESPACE => 'MP', TABLE_DESC => 'XMP Microsoft Photo', VARS => { NO_ID => 1 }, NOTES => q{ Microsoft Photo 1.2 schema XMP tags which have been observed. }, RegionInfo => { Name => 'RegionInfoMP', Struct => { STRUCT_NAME => 'Microsoft RegionInfo', NAMESPACE => 'MPRI', Regions => { Struct => \%sRegions, List => 'Bag' }, DateRegionsValid => { Writable => 'date', Shift => 'Time', Groups => { 2 => 'Time'}, PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,undef,1)', }, }, }, # remove "MP" from tag name (was added only to avoid conflict with XMP-mwg-rs:RegionInfo) RegionInfoRegions => { Flat => 1, Name => 'RegionInfoRegions' }, RegionInfoDateRegionsValid => { Flat => 1, Name => 'RegionInfoDateRegionsValid' }, # shorten flattened Regions tag names to make them easier to use RegionInfoRegionsRectangle => { Flat => 1, Name => 'RegionRectangle' }, RegionInfoRegionsPersonDisplayName => { Flat => 1, Name => 'RegionPersonDisplayName' }, RegionInfoRegionsPersonEmailDigest => { Flat => 1, Name => 'RegionPersonEmailDigest' }, RegionInfoRegionsPersonLiveIdCID => { Flat => 1, Name => 'RegionPersonLiveIdCID' }, RegionInfoRegionsPersonSourceID => { Flat => 1, Name => 'RegionPersonSourceID' }, ); # Xtra tags written in MP4 files written by Microsoft Windows Media Player # (ref http://msdn.microsoft.com/en-us/library/windows/desktop/dd562330(v=VS.85).aspx) # Note: These tags are closely related to Image::ExifTool::ASF::ExtendedDescr %Image::ExifTool::Microsoft::Xtra = ( PROCESS_PROC => \&ProcessXtra, GROUPS => { 0 => 'QuickTime', 2 => 'Video' }, VARS => { NO_ID => 1 }, NOTES => q{ Tags extracted from the Microsoft "Xtra" atom of QuickTime videos. Tag ID's are not shown because some are unruly GUID's. }, Abstract => { }, AcquisitionTime => { Groups => { 2 => 'Time' } }, AcquisitionTimeDay => { Groups => { 2 => 'Time' } }, AcquisitionTimeMonth => { Groups => { 2 => 'Time' } }, AcquisitionTimeYear => { Groups => { 2 => 'Time' } }, AcquisitionTimeYearMonth => { Groups => { 2 => 'Time' } }, AcquisitionTimeYearMonthDay => { Groups => { 2 => 'Time' } }, AlbumArtistSortOrder => { }, AlbumID => { }, AlbumIDAlbumArtist => { }, AlbumTitleSortOrder => { }, AlternateSourceURL => { }, AudioBitrate => { }, AudioFormat => { }, Author => { Groups => { 2 => 'Author' } }, AuthorSortOrder => { }, AverageLevel => { }, Bitrate => { }, BuyNow => { }, BuyTickets => { }, CallLetters => { }, CameraManufacturer => { }, CameraModel => { }, CDTrackEnabled => { }, Channels => { }, chapterNum => { }, Comment => { }, ContentDistributorDuration => { }, Copyright => { Groups => { 2 => 'Author' } }, Count => { }, CurrentBitrate => { }, Description => { }, DisplayArtist => { }, DLNAServerUDN => { }, DLNASourceURI => { }, DRMKeyID => { }, DRMIndividualizedVersion => { }, DTCPIPHost => { }, DTCPIPPort => { }, Duration => { }, DVDID => { }, Event => { }, FileSize => { }, FileType => { }, FourCC => { }, FormatTag => { }, FrameRate => { }, Frequency => { }, IsNetworkFeed => { }, Is_Protected => 'IsProtected', IsVBR => { }, LeadPerformer => { }, LibraryID => { }, LibraryName => { }, Location => { }, MediaContentTypes => { }, MediaType => { }, ModifiedBy => { }, MoreInfo => { }, PartOfSet => { }, PeakValue => { }, PixelAspectRatioX => { }, PixelAspectRatioY => { }, PlaylistIndex => { }, Provider => { }, ProviderLogoURL => { }, ProviderURL => { }, RadioBand => { }, RadioFormat => { }, RatingOrg => { }, RecordingTime => { Groups => { 2 => 'Time' } }, RecordingTimeDay => { Groups => { 2 => 'Time' } }, RecordingTimeMonth => { Groups => { 2 => 'Time' } }, RecordingTimeYear => { Groups => { 2 => 'Time' } }, RecordingTimeYearMonth => { Groups => { 2 => 'Time' } }, RecordingTimeYearMonthDay => { Groups => { 2 => 'Time' } }, ReleaseDate => { Groups => { 2 => 'Time' } }, ReleaseDateDay => { Groups => { 2 => 'Time' } }, ReleaseDateMonth => { Groups => { 2 => 'Time' } }, ReleaseDateYear => { Groups => { 2 => 'Time' } }, ReleaseDateYearMonth => { Groups => { 2 => 'Time' } }, ReleaseDateYearMonthDay => { Groups => { 2 => 'Time' } }, RequestState => { }, ShadowFilePath => { }, SourceURL => { }, Subject => { }, SyncState => { }, Sync01 => { }, Sync02 => { }, Sync03 => { }, Sync04 => { }, Sync05 => { }, Sync06 => { }, Sync07 => { }, Sync08 => { }, Sync09 => { }, Sync10 => { }, Sync11 => { }, Sync12 => { }, Sync13 => { }, Sync14 => { }, Sync15 => { }, Sync16 => { }, SyncOnly => { }, Temporary => { }, Title => { }, titleNum => { }, TitleSortOrder => { }, TotalDuration => { }, TrackingID => { }, UserCustom1 => { }, UserCustom2 => { }, UserEffectiveRating => { }, UserLastPlayedTime => { }, UserPlayCount => { }, UserPlaycountAfternoon => { }, UserPlaycountEvening => { }, UserPlaycountMorning => { }, UserPlaycountNight => { }, UserPlaycountWeekday => { }, UserPlaycountWeekend => { }, UserRating => { }, UserServiceRating => { }, VideoBitrate => { }, VideoFormat => { }, 'WM/AlbumArtist' => 'AlbumArtist', 'WM/AlbumCoverURL' => 'AlbumCoverURL', 'WM/AlbumTitle' => 'AlbumTitle', 'WM/BeatsPerMinute' => 'BeatsPerMinute', 'WM/Category' => 'Category', 'WM/Composer' => 'Composer', 'WM/Conductor' => 'Conductor', 'WM/ContentDistributor' => 'ContentDistributor', 'WM/ContentDistributorType' => 'ContentDistributorType', 'WM/ContentGroupDescription'=> 'ContentGroupDescription', 'WM/Director' => 'Director', 'WM/EncodingTime' => { Name => 'EncodingTime', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, 'WM/Genre' => 'Genre', 'WM/GenreID' => 'GenreID', 'WM/InitialKey' => 'InitialKey', 'WM/Language' => 'Language', 'WM/Lyrics' => 'Lyrics', 'WM/MCDI' => 'MCDI', 'WM/MediaClassPrimaryID' => { Name => 'MediaClassPrimaryID', PrintConv => { #http://msdn.microsoft.com/en-us/library/windows/desktop/dd757960(v=vs.85).aspx 'D1607DBC-E323-4BE2-86A1-48A42A28441E' => 'Music', 'DB9830BD-3AB3-4FAB-8A37-1A995F7FF74B' => 'Video', '01CD0F29-DA4E-4157-897B-6275D50C4F11' => 'Audio (not music)', 'FCF24A76-9A57-4036-990D-E35DD8B244E1' => 'Other (not audio or video)', }, }, 'WM/MediaClassSecondaryID' => { Name => 'MediaClassSecondaryID', PrintConv => { #http://msdn.microsoft.com/en-us/library/windows/desktop/dd757960(v=vs.85).aspx 'E0236BEB-C281-4EDE-A36D-7AF76A3D45B5' => 'Audio Book', '3A172A13-2BD9-4831-835B-114F6A95943F' => 'Spoken Word', '6677DB9B-E5A0-4063-A1AD-ACEB52840CF1' => 'Audio News', '1B824A67-3F80-4E3E-9CDE-F7361B0F5F1B' => 'Talk Show', '1FE2E091-4E1E-40CE-B22D-348C732E0B10' => 'Video News', 'D6DE1D88-C77C-4593-BFBC-9C61E8C373E3' => 'Web-based Video', '00033368-5009-4AC3-A820-5D2D09A4E7C1' => 'Sound Clip from Game', 'F24FF731-96FC-4D0F-A2F5-5A3483682B1A' => 'Song from Game', 'E3E689E2-BA8C-4330-96DF-A0EEEFFA6876' => 'Music Video', 'B76628F4-300D-443D-9CB5-01C285109DAF' => 'Home Movie', 'A9B87FC9-BD47-4BF0-AC4F-655B89F7D868' => 'Feature Film', 'BA7F258A-62F7-47A9-B21F-4651C42A000E' => 'TV Show', '44051B5B-B103-4B5C-92AB-93060A9463F0' => 'Corporate Video', '0B710218-8C0C-475E-AF73-4C41C0C8F8CE' => 'Home Video from Pictures', '00000000-0000-0000-0000-000000000000' => 'Unknown Content', #PH }, }, 'WM/MediaOriginalBroadcastDateTime' => { Name => 'MediaOriginalBroadcastDateTime', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, 'WM/MediaOriginalChannel' => 'MediaOriginalChannel', 'WM/MediaStationName' => 'MediaStationName', 'WM/Mood' => 'Mood', 'WM/OriginalAlbumTitle' => 'OriginalAlbumTitle', 'WM/OriginalArtist' => 'OriginalArtist', 'WM/OriginalLyricist' => 'OriginalLyricist', 'WM/ParentalRating' => 'ParentalRating', 'WM/PartOfSet' => 'PartOfSet', 'WM/Period' => 'Period', 'WM/Producer' => 'Producer', 'WM/ProtectionType' => 'ProtectionType', 'WM/Provider' => 'Provider', 'WM/ProviderRating' => 'ProviderRating', 'WM/ProviderStyle' => 'ProviderStyle', 'WM/Publisher' => 'Publisher', 'WM/SharedUserRating' => 'SharedUserRating', 'WM/SubscriptionContentID' => 'SubscriptionContentID', 'WM/SubTitle' => 'Subtitle', 'WM/SubTitleDescription' => 'SubtitleDescription', 'WM/TrackNumber' => 'TrackNumber', 'WM/UniqueFileIdentifier' => 'UniqueFileIdentifier', 'WM/VideoFrameRate' => 'VideoFrameRate', 'WM/VideoHeight' => 'VideoHeight', 'WM/VideoWidth' => 'VideoWidth', 'WM/WMCollectionGroupID' => 'WMCollectionGroupID', 'WM/WMCollectionID' => 'WMCollectionID', 'WM/WMContentID' => 'WMContentID', 'WM/WMShadowFileSourceDRMType' => 'WMShadowFileSourceDRMType', 'WM/WMShadowFileSourceFileType' => 'WMShadowFileSourceFileType', 'WM/Writer' => 'Writer', 'WM/Year' => { Name => 'Year', Groups => { 2 => 'Time' } }, # I can't find documentation for the following tags in videos, # but the tag ID's correspond to Microsoft property GUID+ID's # References: # http://msdn.microsoft.com/en-us/library/cc251929%28v=prot.10%29.aspx # http://multi-rename-script.googlecode.com/svn-history/r4/trunk/plugins/ShellDetails/ShellDetails.ini # I have observed only 1 so far: '{2CBAA8F5-D81F-47CA-B17A-F8D822300131} 100' => { Name => 'DateAcquired', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, # the following have not yet been observed... '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 10' => 'Name', '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 12' => 'Size', '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 4' => 'Type', '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 14' => { Name => 'DateModified', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 15' => { Name => 'DateCreated', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 16' => { Name => 'DateAccessed', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 13' => 'Attributes', '{D8C3986F-813B-449C-845D-87B95D674ADE} 2' => 'Status', '{9B174B34-40FF-11D2-A27E-00C04FC30871} 4' => 'Owner', '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 4' => { Name => 'Author', Groups => { 2 => 'Author' }, }, '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 2' => 'Title', '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 3' => 'Subject', '{D5CDD502-2E9C-101B-9397-08002B2CF9AE} 2' => 'Category', '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 14' => 'Pages', '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 6' => 'Comments', '{64440492-4C8B-11D1-8B70-080036B11A03} 11' => { Name => 'Copyright', Groups => { 2 => 'Author' }, }, '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 2' => 'Artist', '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 4' => 'AlbumTitle', '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 5' => { Name => 'Year', Groups => { 2 => 'Time' }, }, '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 7' => 'TrackNumber', '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 11' => 'Genre', '{64440490-4C8B-11D1-8B70-080036B11A03} 3' => 'Duration', '{64440490-4C8B-11D1-8B70-080036B11A03} 4' => 'Bitrate', '{AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED} 2' => 'Protected', '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 272' => 'CameraModel', '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 36867' => { Name => 'DatePictureTaken', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, '{6444048F-4C8B-11D1-8B70-080036B11A03} 13' => 'Dimensions', '{6444048F-4C8B-11D1-8B70-080036B11A03} 3' => 'Untitled0', '{6444048F-4C8B-11D1-8B70-080036B11A03} 4' => 'Untitled1', '{6D748DE2-8D38-4CC3-AC60-F009B057C557} 2' => 'EpisodeName', '{6D748DE2-8D38-4CC3-AC60-F009B057C557} 3' => 'ProgramDescription', '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 12' => 'Untitled2', '{64440490-4C8B-11D1-8B70-080036B11A03} 6' => 'AudioSampleSize', '{64440490-4C8B-11D1-8B70-080036B11A03} 5' => 'AudioSampleRate', '{64440490-4C8B-11D1-8B70-080036B11A03} 7' => 'Channels', '{D5CDD502-2E9C-101B-9397-08002B2CF9AE} 15' => 'Company', '{0CEF7D53-FA64-11D1-A203-0000F81FEDEE} 3' => 'Description', '{0CEF7D53-FA64-11D1-A203-0000F81FEDEE} 4' => 'FileVersion', '{0CEF7D53-FA64-11D1-A203-0000F81FEDEE} 7' => 'ProductName', '{0CEF7D53-FA64-11D1-A203-0000F81FEDEE} 8' => 'ProductVersion', '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 5' => 'Keywords', '{28636AA6-953D-11D2-B5D6-00C04FD918D0} 11' => 'Type', '{6D24888F-4718-4BDA-AFED-EA0FB4386CD8} 100' => 'OfflineStatus', '{A94688B6-7D9F-4570-A648-E3DFC0AB2B3F} 100' => 'OfflineAvailability', '{28636AA6-953D-11D2-B5D6-00C04FD918D0} 9' => 'PerceivedType', '{1E3EE840-BC2B-476C-8237-2ACD1A839B22} 3' => 'Kinds', '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 36' => 'Conductors', '{64440492-4C8B-11D1-8B70-080036B11A03} 9' => 'Rating', '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 271' => 'CameraMaker', '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 18' => 'ProgramName', '{293CA35A-09AA-4DD2-B180-1FE245728A52} 100' => 'Duration', '{BFEE9149-E3E2-49A7-A862-C05988145CEC} 100' => 'IsOnline', '{315B9C8D-80A9-4EF9-AE16-8E746DA51D70} 100' => 'IsRecurring', '{F6272D18-CECC-40B1-B26A-3911717AA7BD} 100' => 'Location', '{D55BAE5A-3892-417A-A649-C6AC5AAAEAB3} 100' => 'OptionalAttendeeAddresses', '{09429607-582D-437F-84C3-DE93A2B24C3C} 100' => 'OptionalAttendees', '{744C8242-4DF5-456C-AB9E-014EFB9021E3} 100' => 'OrganizerAddress', '{AAA660F9-9865-458E-B484-01BC7FE3973E} 100' => 'OrganizerName', '{72FC5BA4-24F9-4011-9F3F-ADD27AFAD818} 100' => 'ReminderTime', '{0BA7D6C3-568D-4159-AB91-781A91FB71E5} 100' => 'RequiredAttendeeAddresses', '{B33AF30B-F552-4584-936C-CB93E5CDA29F} 100' => 'RequiredAttendees', '{00F58A38-C54B-4C40-8696-97235980EAE1} 100' => 'Resources', '{5BF396D4-5EB2-466F-BDE9-2FB3F2361D6E} 100' => 'Free-busyStatus', '{9B174B35-40FF-11D2-A27E-00C04FC30871} 3' => 'TotalSize', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 9' => 'AccountName', '{28636AA6-953D-11D2-B5D6-00C04FD918D0} 5' => 'Computer', '{9AD5BADB-CEA7-4470-A03D-B84E51B9949E} 100' => 'Anniversary', '{CD102C9C-5540-4A88-A6F6-64E4981C8CD1} 100' => 'AssistantsName', '{9A93244D-A7AD-4FF8-9B99-45EE4CC09AF6} 100' => 'AssistantsPhone', '{176DC63C-2688-4E89-8143-A347800F25E9} 47' => 'Birthday', '{730FB6DD-CF7C-426B-A03F-BD166CC9EE24} 100' => 'BusinessAddress', '{402B5934-EC5A-48C3-93E6-85E86A2D934E} 100' => 'BusinessCity', '{B0B87314-FCF6-4FEB-8DFF-A50DA6AF561C} 100' => 'BusinessCountry-Region', '{BC4E71CE-17F9-48D5-BEE9-021DF0EA5409} 100' => 'BusinessPOBox', '{E1D4A09E-D758-4CD1-B6EC-34A8B5A73F80} 100' => 'BusinessPostalCode', '{446F787F-10C4-41CB-A6C4-4D0343551597} 100' => 'BusinessStateOrProvince', '{DDD1460F-C0BF-4553-8CE4-10433C908FB0} 100' => 'BusinessStreet', '{91EFF6F3-2E27-42CA-933E-7C999FBE310B} 100' => 'BusinessFax', '{56310920-2491-4919-99CE-EADB06FAFDB2} 100' => 'BusinessHomePage', '{6A15E5A0-0A1E-4CD7-BB8C-D2F1B0C929BC} 100' => 'BusinessPhone', '{BF53D1C3-49E0-4F7F-8567-5A821D8AC542} 100' => 'CallbackNumber', '{8FDC6DEA-B929-412B-BA90-397A257465FE} 100' => 'CarPhone', '{D4729704-8EF1-43EF-9024-2BD381187FD5} 100' => 'Children', '{8589E481-6040-473D-B171-7FA89C2708ED} 100' => 'CompanyMainPhone', '{FC9F7306-FF8F-4D49-9FB6-3FFE5C0951EC} 100' => 'Department', '{F8FA7FA3-D12B-4785-8A4E-691A94F7A3E7} 100' => 'E-mailAddress', '{38965063-EDC8-4268-8491-B7723172CF29} 100' => 'E-mail2', '{644D37B4-E1B3-4BAD-B099-7E7C04966ACA} 100' => 'E-mail3', '{84D8F337-981D-44B3-9615-C7596DBA17E3} 100' => 'E-mailList', '{CC6F4F24-6083-4BD4-8754-674D0DE87AB8} 100' => 'E-mailDisplayName', '{F1A24AA7-9CA7-40F6-89EC-97DEF9FFE8DB} 100' => 'FileAs', '{14977844-6B49-4AAD-A714-A4513BF60460} 100' => 'FirstName', '{635E9051-50A5-4BA2-B9DB-4ED056C77296} 100' => 'FullName', '{3C8CEE58-D4F0-4CF9-B756-4E5D24447BCD} 100' => 'Gender', '{176DC63C-2688-4E89-8143-A347800F25E9} 70' => 'GivenName', '{5DC2253F-5E11-4ADF-9CFE-910DD01E3E70} 100' => 'Hobbies', '{98F98354-617A-46B8-8560-5B1B64BF1F89} 100' => 'HomeAddress', '{176DC63C-2688-4E89-8143-A347800F25E9} 65' => 'HomeCity', '{08A65AA1-F4C9-43DD-9DDF-A33D8E7EAD85} 100' => 'HomeCountry-Region', '{7B9F6399-0A3F-4B12-89BD-4ADC51C918AF} 100' => 'HomePOBox', '{8AFCC170-8A46-4B53-9EEE-90BAE7151E62} 100' => 'HomePostalCode', '{C89A23D0-7D6D-4EB8-87D4-776A82D493E5} 100' => 'HomeStateOrProvince', '{0ADEF160-DB3F-4308-9A21-06237B16FA2A} 100' => 'HomeStreet', '{660E04D6-81AB-4977-A09F-82313113AB26} 100' => 'HomeFax', '{176DC63C-2688-4E89-8143-A347800F25E9} 20' => 'HomePhone', '{D68DBD8A-3374-4B81-9972-3EC30682DB3D} 100' => 'IMAddresses', '{F3D8F40D-50CB-44A2-9718-40CB9119495D} 100' => 'Initials', '{176DC63C-2688-4E89-8143-A347800F25E9} 6' => 'JobTitle', '{97B0AD89-DF49-49CC-834E-660974FD755B} 100' => 'Label', '{8F367200-C270-457C-B1D4-E07C5BCD90C7} 100' => 'LastName', '{C0AC206A-827E-4650-95AE-77E2BB74FCC9} 100' => 'MailingAddress', '{176DC63C-2688-4E89-8143-A347800F25E9} 71' => 'MiddleName', '{176DC63C-2688-4E89-8143-A347800F25E9} 35' => 'CellPhone', '{176DC63C-2688-4E89-8143-A347800F25E9} 74' => 'Nickname', '{176DC63C-2688-4E89-8143-A347800F25E9} 7' => 'OfficeLocation', '{508161FA-313B-43D5-83A1-C1ACCF68622C} 100' => 'OtherAddress', '{6E682923-7F7B-4F0C-A337-CFCA296687BF} 100' => 'OtherCity', '{8F167568-0AAE-4322-8ED9-6055B7B0E398} 100' => 'OtherCountry-Region', '{8B26EA41-058F-43F6-AECC-4035681CE977} 100' => 'OtherPOBox', '{95C656C1-2ABF-4148-9ED3-9EC602E3B7CD} 100' => 'OtherPostalCode', '{71B377D6-E570-425F-A170-809FAE73E54E} 100' => 'OtherStateOrProvince', '{FF962609-B7D6-4999-862D-95180D529AEA} 100' => 'OtherStreet', '{D6304E01-F8F5-4F45-8B15-D024A6296789} 100' => 'Pager', '{176DC63C-2688-4E89-8143-A347800F25E9} 69' => 'PersonalTitle', '{C8EA94F0-A9E3-4969-A94B-9C62A95324E0} 100' => 'City', '{E53D799D-0F3F-466E-B2FF-74634A3CB7A4} 100' => 'Country-Region', '{DE5EF3C7-46E1-484E-9999-62C5308394C1} 100' => 'POBox', '{18BBD425-ECFD-46EF-B612-7B4A6034EDA0} 100' => 'PostalCode', '{F1176DFE-7138-4640-8B4C-AE375DC70A6D} 100' => 'StateOrProvince', '{63C25B20-96BE-488F-8788-C09C407AD812} 100' => 'Street', '{176DC63C-2688-4E89-8143-A347800F25E9} 48' => 'PrimaryE-mail', '{176DC63C-2688-4E89-8143-A347800F25E9} 25' => 'PrimaryPhone', '{7268AF55-1CE4-4F6E-A41F-B6E4EF10E4A9} 100' => 'Profession', '{9D2408B6-3167-422B-82B0-F583B7A7CFE3} 100' => 'Spouse', '{176DC63C-2688-4E89-8143-A347800F25E9} 73' => 'Suffix', '{AAF16BAC-2B55-45E6-9F6D-415EB94910DF} 100' => 'TTY-TTDPhone', '{C554493C-C1F7-40C1-A76C-EF8C0614003E} 100' => 'Telex', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 18' => 'Webpage', '{D5CDD502-2E9C-101B-9397-08002B2CF9AE} 27' => 'Status', '{D5CDD502-2E9C-101B-9397-08002B2CF9AE} 26' => 'ContentType', '{43F8D7B7-A444-4F87-9383-52271C9B915C} 100' => { Name => 'DateArchived', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, '{72FAB781-ACDA-43E5-B155-B2434F85E678} 100' => { Name => 'DateCompleted', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 18258' => { Name => 'DateImported', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, '{276D7BB0-5B34-4FB0-AA4B-158ED12A1809} 100' => 'ClientID', '{F334115E-DA1B-4509-9B3D-119504DC7ABB} 100' => 'Contributors', '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 11' => 'LastPrinted', '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 13' => { Name => 'DateLastSaved', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, '{1E005EE6-BF27-428B-B01C-79676ACD2870} 100' => 'Division', '{E08805C8-E395-40DF-80D2-54F0D6C43154} 100' => 'DocumentID', '{D5CDD502-2E9C-101B-9397-08002B2CF9AE} 7' => 'Slides', '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 10' => 'TotalEditingTime', '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 15' => 'WordCount', '{3F8472B5-E0AF-4DB2-8071-C53FE76AE7CE} 100' => 'DueDate', '{C75FAA05-96FD-49E7-9CB4-9F601082D553} 100' => 'EndDate', '{28636AA6-953D-11D2-B5D6-00C04FD918D0} 12' => 'FileCount', '{41CF5AE0-F75A-4806-BD87-59C7D9248EB9} 100' => 'WindowsFileName', '{67DF94DE-0CA7-4D6F-B792-053A3E4F03CF} 100' => 'FlagColor', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 12' => 'FlagStatus', '{9B174B35-40FF-11D2-A27E-00C04FC30871} 2' => 'SpaceFree', '{6444048F-4C8B-11D1-8B70-080036B11A03} 7' => 'BitDepth', '{6444048F-4C8B-11D1-8B70-080036B11A03} 5' => 'HorizontalResolution', '{6444048F-4C8B-11D1-8B70-080036B11A03} 6' => 'VerticalResolution', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 11' => 'Importance', '{F23F425C-71A1-4FA8-922F-678EA4A60408} 100' => 'IsAttachment', '{5CDA5FC8-33EE-4FF3-9094-AE7BD8868C4D} 100' => 'IsDeleted', '{5DA84765-E3FF-4278-86B0-A27967FBDD03} 100' => 'HasFlag', '{A6F360D2-55F9-48DE-B909-620E090A647C} 100' => 'IsCompleted', '{346C8BD1-2E6A-4C45-89A4-61B78E8E700F} 100' => 'Incomplete', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 10' => 'ReadStatus', '{EF884C5B-2BFE-41BB-AAE5-76EEDF4F9902} 100' => 'Shared', '{D0A04F0A-462A-48A4-BB2F-3706E88DBD7D} 100' => { Name => 'Creator', Groups => { 2 => 'Author' }, }, '{F7DB74B4-4287-4103-AFBA-F1B13DCD75CF} 100' => { Name => 'Date', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 2' => 'FolderName', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 6' => 'FolderPath', '{DABD30ED-0043-4789-A7F8-D013A4736622} 100' => 'Folder', '{D4D0AA16-9948-41A4-AA85-D97FF9646993} 100' => 'Participants', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 7' => 'Path', '{DEA7C82C-1D89-4A66-9427-A4E3DEBABCB1} 100' => 'ContactNames', '{95BEB1FC-326D-4644-B396-CD3ED90E6DDF} 100' => 'EntryType', '{D5CDD502-2E9C-101B-9397-08002B2CF9AE} 28' => 'Language', '{5CBF2787-48CF-4208-B90E-EE5E5D420294} 23' => { Name => 'DateVisited', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, '{5CBF2787-48CF-4208-B90E-EE5E5D420294} 21' => 'Description', '{B9B4B3FC-2B51-4A42-B5D8-324146AFCF25} 3' => 'LinkStatus', '{B9B4B3FC-2B51-4A42-B5D8-324146AFCF25} 2' => 'LinkTarget', '{5CBF2787-48CF-4208-B90E-EE5E5D420294} 2' => 'URL', '{2E4B640D-5019-46D8-8881-55414CC5CAA0} 100' => 'MediaCreated', '{DE41CC29-6971-4290-B472-F59F2E2F31E2} 100' => { Name => 'DateReleased', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, '{64440492-4C8B-11D1-8B70-080036B11A03} 36' => 'EncodedBy', '{64440492-4C8B-11D1-8B70-080036B11A03} 22' => 'Producers', '{64440492-4C8B-11D1-8B70-080036B11A03} 30' => 'Publisher', '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 38' => 'Subtitle', '{64440492-4C8B-11D1-8B70-080036B11A03} 34' => 'UserWebURL', '{64440492-4C8B-11D1-8B70-080036B11A03} 23' => 'Writers', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 21' => 'Attachments', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 2' => 'BccAddresses', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 3' => 'BccNames', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 4' => 'CcAddresses', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 5' => 'CcNames', '{DC8F80BD-AF1E-4289-85B6-3DFC1B493992} 100' => 'ConversationID', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 20' => { Name => 'DateReceived', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 19' => { Name => 'DateSent', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 13' => 'FromAddresses', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 14' => 'FromNames', '{9C1FCF74-2D97-41BA-B4AE-CB2E3661A6E4} 8' => 'HasAttachments', '{0BE1C8E7-1981-4676-AE14-FDD78F05A6E7} 100' => 'SenderAddress', '{0DA41CFA-D224-4A18-AE2F-596158DB4B3A} 100' => 'SenderName', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 15' => 'Store', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 16' => 'ToAddresses', '{BCCC8A3C-8CEF-42E5-9B1C-C69079398BC7} 100' => 'ToDoTitle', '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 17' => 'ToNames', '{FDF84370-031A-4ADD-9E91-0D775F1C6605} 100' => 'Mileage', '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 13' => 'AlbumArtist', '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 35' => 'Beats-per-minute', '{64440492-4C8B-11D1-8B70-080036B11A03} 19' => 'Composers', '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 34' => 'InitialKey', '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 39' => 'Mood', '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 37' => 'PartOfSet', '{64440492-4C8B-11D1-8B70-080036B11A03} 31' => 'Period', '{4776CAFA-BCE4-4CB1-A23E-265E76D8EB11} 100' => 'Color', '{64440492-4C8B-11D1-8B70-080036B11A03} 21' => 'ParentalRating', '{10984E0A-F9F2-4321-B7EF-BAF195AF4319} 100' => 'ParentalRatingReason', '{9B174B35-40FF-11D2-A27E-00C04FC30871} 5' => 'SpaceUsed', '{D35F743A-EB2E-47F2-A286-844132CB1427} 100' => 'ExifVersion', '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 18248' => 'Event', '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 37380' => 'ExposureBias', '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 34850' => 'ExposureProgram', '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 33434' => 'ExposureTime', '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 33437' => 'F-stop', '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 37385' => 'FlashMode', '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 37386' => 'FocalLength', '{A0E74609-B84D-4F49-B860-462BD9971F98} 100' => 'FocalLength35mm', '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 34855' => 'ISOSpeed', '{E6DDCAF7-29C5-4F0A-9A68-D19412EC7090} 100' => 'LensMaker', '{E1277516-2B5F-4869-89B1-2E585BD38B7A} 100' => 'LensModel', '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 37384' => 'LightSource', '{08F6D7C2-E3F2-44FC-AF1E-5AA5C81A2D3E} 100' => 'MaxAperture', '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 37383' => 'MeteringMode', '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 274' => 'Orientation', '{6D217F6D-3F6A-4825-B470-5F03CA2FBE9B} 100' => 'ProgramMode', '{49237325-A95A-4F67-B211-816B2D45D2E0} 100' => 'Saturation', '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 37382' => 'SubjectDistance', '{EE3D3D8A-5381-4CFA-B13B-AAF66B5F4EC9} 100' => 'WhiteBalance', '{9C1FCF74-2D97-41BA-B4AE-CB2E3661A6E4} 5' => 'Priority', '{39A7F922-477C-48DE-8BC8-B28441E342E3} 100' => 'Project', '{6D748DE2-8D38-4CC3-AC60-F009B057C557} 7' => 'ChannelNumber', '{6D748DE2-8D38-4CC3-AC60-F009B057C557} 12' => 'ClosedCaptioning', '{6D748DE2-8D38-4CC3-AC60-F009B057C557} 13' => 'Rerun', '{6D748DE2-8D38-4CC3-AC60-F009B057C557} 14' => 'SAP', '{4684FE97-8765-4842-9C13-F006447B178C} 100' => 'BroadcastDate', '{A5477F61-7A82-4ECA-9DDE-98B69B2479B3} 100' => 'RecordingTime', '{6D748DE2-8D38-4CC3-AC60-F009B057C557} 5' => 'StationCallSign', '{1B5439E7-EBA1-4AF8-BDD7-7AF1D4549493} 100' => 'StationName', '{560C36C0-503A-11CF-BAA1-00004C752A9A} 2' => 'AutoSummary', '{560C36C0-503A-11CF-BAA1-00004C752A9A} 3' => 'Summary', '{49691C90-7E17-101A-A91C-08002B2ECDA9} 3' => 'SearchRanking', '{F8D3F6AC-4874-42CB-BE59-AB454B30716A} 100' => 'Sensitivity', '{EF884C5B-2BFE-41BB-AAE5-76EEDF4F9902} 200' => 'SharedWith', '{668CDFA5-7A1B-4323-AE4B-E527393A1D81} 100' => 'Source', '{48FD6EC8-8A12-4CDF-A03E-4EC5A511EDDE} 100' => 'StartDate', '{D37D52C6-261C-4303-82B3-08B926AC6F12} 100' => 'BillingInformation', '{084D8A0A-E6D5-40DE-BF1F-C8820E7C877C} 100' => 'Complete', '{08C7CC5F-60F2-4494-AD75-55E3E0B5ADD0} 100' => 'TaskOwner', '{28636AA6-953D-11D2-B5D6-00C04FD918D0} 14' => 'TotalFileSize', '{0CEF7D53-FA64-11D1-A203-0000F81FEDEE} 9' => 'LegalTrademarks', '{64440491-4C8B-11D1-8B70-080036B11A03} 10' => 'VideoCompression', '{64440492-4C8B-11D1-8B70-080036B11A03} 20' => 'Directors', '{64440491-4C8B-11D1-8B70-080036B11A03} 8' => 'DataRate', '{64440491-4C8B-11D1-8B70-080036B11A03} 4' => 'FrameHeight', '{64440491-4C8B-11D1-8B70-080036B11A03} 6' => 'FrameRate', '{64440491-4C8B-11D1-8B70-080036B11A03} 3' => 'FrameWidth', '{64440491-4C8B-11D1-8B70-080036B11A03} 43' => 'TotalBitrate', ); #------------------------------------------------------------------------------ # Extract information from Xtra MP4 atom # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success # Reference: http://code.google.com/p/mp4v2/ [since removed from trunk] sub ProcessXtra($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{Base} || 0; my $dataLen = $$dirInfo{DataLen}; my $pos = 0; $et->VerboseDir('Xtra', 0, $dataLen); for (;;) { last if $pos + 4 > $dataLen; my $size = Get32u($dataPt, $pos); # (includes $size word) last if $size < 8 or $pos + $size > $dataLen; my $tagLen = Get32u($dataPt, $pos + 4); last if $tagLen + 18 > $size; my $tag = substr($$dataPt, $pos + 8, $tagLen); # (version flags according to the reference, but looks more like a count - PH) my $count = Get32u($dataPt, $pos + $tagLen + 8); my ($i, $valPos, $valLen, $valType, $val, $format, @vals); # point to start of first value (after 4-byte length and 2-byte type) $valPos = $pos + $tagLen + 18; for ($i=0; ;) { # (stored value includes size of $valLen and $valType, so subtract 6) $valLen = Get32u($dataPt, $valPos - 6) - 6; my $more = $pos + $size - $valPos - $valLen; last if $more < 0; $valType = Get16u($dataPt, $valPos - 2); $val = substr($$dataPt, $valPos, $valLen); # Note: all dumb Microsoft values are little-endian inside a big-endian-format file SetByteOrder('II'); if ($valType == 8) { $format = 'Unicode'; $val = $et->Decode($val, 'UCS2'); } elsif ($valType == 19 and $valLen == 8) { $format = 'int64u'; $val = Get64u(\$val, 0); } elsif ($valType == 21 and $valLen == 8) { $format = 'date'; $val = Get64u(\$val, 0); # convert time from 100 ns intervals since Jan 1, 1601 $val = $val * 1e-7 - 11644473600 if $val; # (the Nikon S100 uses UTC timezone, same as ASF - PH) $val = Image::ExifTool::ConvertUnixTime($val) . 'Z'; } elsif ($valType == 72 and $valLen == 16) { $format = 'GUID'; $val = uc unpack('H*',pack('NnnNN',unpack('VvvNN',$val))); $val =~ s/(.{8})(.{4})(.{4})(.{4})/$1-$2-$3-$4-/; } elsif ($valType == 65 && $valLen > 4) { #PH (empirical) $format = 'variant'; require Image::ExifTool::FlashPix; my $vPos = $valPos; # (necessary because ReadFPXValue updates this) # read entry as a VT_VARIANT (use FlashPix module for this) $val = Image::ExifTool::FlashPix::ReadFPXValue($et, $dataPt, $vPos, Image::ExifTool::FlashPix::VT_VARIANT(), $valPos+$valLen, 1); } else { $format = "Unknown($valType)"; } SetByteOrder('MM'); # back to native QuickTime byte ordering last if ++$i >= $count or $more < 6; push @vals, $val; undef $val; $valPos += $valLen + 6; # step to next value } if (@vals) { push @vals, $val if defined $val; $val = \@vals; $valPos = $pos + $tagLen + 18; $valLen = $size - 18 - $tagLen; } if ($tagLen > 0 and $valLen > 0) { my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); unless ($tagInfo) { # generate tag information for unrecognized tags my $name = $tag; $name =~ s{^WM/}{}; # $name =~ tr/-_A-Za-z0-9//dc; if ($name =~ /^[-\w]+$/) { $tagInfo = { Name => ucfirst($name) }; AddTagToTable($tagTablePtr, $tag, $tagInfo); $et->VPrint(0, $$et{INDENT}, "[adding Microsoft:$tag]\n"); } } $et->HandleTag($tagTablePtr, $tag, $val, TagInfo => $tagInfo, DataPt => $dataPt, DataPos => $dataPos, Start => $valPos, Size => $valLen, Format => $format, Extra => " count=$count type=$valType", ); } $pos += $size; # step to next entry } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::Microsoft - Definitions for custom Microsoft tags =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Microsoft-specific EXIF and XMP tags. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://research.microsoft.com/en-us/um/redmond/groups/ivm/hdview/hdmetadataspec.htm> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Microsoft Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/MIE.pm������������������������������������������������������000644 �000765 �000024 �00000313510 12642461317 020665� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MIE.pm # # Description: Read/write MIE meta information # # Revisions: 11/18/2005 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::MIE; use strict; use vars qw($VERSION %tableDefaults); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; use Image::ExifTool::GPS; $VERSION = '1.45'; sub ProcessMIE($$); sub ProcessMIEGroup($$$); sub WriteMIEGroup($$$); sub CheckMIE($$$); sub GetLangInfo($$); # local variables my $hasZlib; # 1=Zlib available, 0=no Zlib my %mieCode; # reverse lookup for MIE format names my $doneMieMap; # flag indicating we added user-defined groups to %mieMap # MIE format codes my %mieFormat = ( 0x00 => 'undef', 0x10 => 'MIE', 0x18 => 'MIE', 0x20 => 'string', # ASCII (ISO 8859-1) 0x28 => 'utf8', 0x29 => 'utf16', 0x2a => 'utf32', 0x30 => 'string_list', 0x38 => 'utf8_list', 0x39 => 'utf16_list', 0x3a => 'utf32_list', 0x40 => 'int8u', 0x41 => 'int16u', 0x42 => 'int32u', 0x43 => 'int64u', 0x48 => 'int8s', 0x49 => 'int16s', 0x4a => 'int32s', 0x4b => 'int64s', 0x52 => 'rational32u', 0x53 => 'rational64u', 0x5a => 'rational32s', 0x5b => 'rational64s', 0x61 => 'fixed16u', 0x62 => 'fixed32u', 0x69 => 'fixed16s', 0x6a => 'fixed32s', 0x72 => 'float', 0x73 => 'double', 0x80 => 'free', ); # map of MIE directory locations my %mieMap = ( 'MIE-Meta' => 'MIE', 'MIE-Audio' => 'MIE-Meta', 'MIE-Camera' => 'MIE-Meta', 'MIE-Doc' => 'MIE-Meta', 'MIE-Geo' => 'MIE-Meta', 'MIE-Image' => 'MIE-Meta', 'MIE-MakerNotes' => 'MIE-Meta', 'MIE-Preview' => 'MIE-Meta', 'MIE-Thumbnail' => 'MIE-Meta', 'MIE-Video' => 'MIE-Meta', 'MIE-Flash' => 'MIE-Camera', 'MIE-Lens' => 'MIE-Camera', 'MIE-Orient' => 'MIE-Camera', 'MIE-Extender' => 'MIE-Lens', 'MIE-GPS' => 'MIE-Geo', 'MIE-UTM' => 'MIE-Geo', 'MIE-Canon' => 'MIE-MakerNotes', EXIF => 'MIE-Meta', XMP => 'MIE-Meta', IPTC => 'MIE-Meta', ICC_Profile => 'MIE-Meta', ID3 => 'MIE-Meta', CanonVRD => 'MIE-Canon', IFD0 => 'EXIF', IFD1 => 'IFD0', ExifIFD => 'IFD0', GPS => 'IFD0', SubIFD => 'IFD0', GlobParamIFD => 'IFD0', PrintIM => 'IFD0', InteropIFD => 'ExifIFD', MakerNotes => 'ExifIFD', ); # convenience variables for common tagInfo entries my %binaryConv = ( Writable => 'undef', Binary => 1, ); my %dateInfo = ( Shift => 'Time', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', ); my %noYes = ( 0 => 'No', 1 => 'Yes' ); my %offOn = ( 0 => 'Off', 1 => 'On' ); # default entries for MIE tag tables %tableDefaults = ( PROCESS_PROC => \&ProcessMIE, WRITE_PROC => \&ProcessMIE, CHECK_PROC => \&CheckMIE, LANG_INFO => \&GetLangInfo, WRITABLE => 'string', PREFERRED => 1, ); # MIE info %Image::ExifTool::MIE::Main = ( %tableDefaults, GROUPS => { 1 => 'MIE-Main' }, WRITE_GROUP => 'MIE-Main', NOTES => q{ MIE is a flexible format which may be used as a stand-alone meta information format, for encapsulation of other files and information, or as a trailer appended to other file formats. The tables below represent currently defined MIE tags, however ExifTool will also extract any other information present in a MIE file. When writing MIE information, some special features are supported: 1) String values may be written as ASCII (ISO 8859-1) or UTF-8. ExifTool automatically detects the presence of wide characters and treats the string appropriately. Internally, UTF-8 text may be converted to UTF-16 or UTF-32 and stored in this format in the file if it is more compact. 2) All MIE string-value tags support localized text. Localized values are written by adding a language/country code to the tag name in the form C<TAG-xx_YY>, where C<TAG> is the tag name, C<xx> is a 2-character lower case ISO 639-1 language code, and C<YY> is a 2-character upper case ISO 3166-1 alpha 2 country code (eg. C<Title-en_US>). But as usual, the user interface is case-insensitive, and ExifTool will write the correct case to the file. 3) Some numerical MIE tags allow units of measurement to be specified. For these tags, units may be added in brackets immediately following the value (eg. C<55(mi/h)>). If no units are specified, the default units are written. See L<http://owl.phy.queensu.ca/~phil/exiftool/MIE1.1-20070121.pdf> for the official MIE specification. }, '0Type' => { Name => 'SubfileType', Notes => q{ the capitalized common extension for this type of file. If the extension has a dot-3 abbreviation, then the longer version is used here. For instance, JPEG and TIFF are used, not JPG and TIF }, }, '0Vers' => { Name => 'MIEVersion', Notes => 'version 1.1 is assumed if not specified', }, '1Directory' => { Name => 'SubfileDirectory', Notes => 'original directory for the file', }, '1Name' => { Name => 'SubfileName', Notes => 'the file name, including extension if it exists', }, '2MIME' => { Name => 'SubfileMIMEType' }, Meta => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Meta', DirName => 'MIE-Meta', }, }, data => { Name => 'SubfileData', Notes => 'the subfile data', %binaryConv, }, rsrc => { Name => 'SubfileResource', Notes => 'subfile resource fork if it exists', %binaryConv, }, zmd5 => { Name => 'MD5Digest', Notes => q{ 16-byte MD5 digest written in binary form or as a 32-character hex-encoded ASCII string. Value is an MD5 digest of the entire 0MIE group as it would be with the digest value itself set to all null bytes }, }, zmie => { Name => 'TrailerSignature', Writable => 'undef', Notes => q{ used as the last element in the main "0MIE" group to identify a MIE trailer when appended to another type of file. ExifTool will create this tag if set to any value, but always with an empty data block }, ValueConvInv => '""', # data block must be empty }, ); # MIE meta information group %Image::ExifTool::MIE::Meta = ( %tableDefaults, GROUPS => { 1 => 'MIE-Meta', 2 => 'Image' }, WRITE_GROUP => 'MIE-Meta', Audio => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Audio', DirName => 'MIE-Audio', }, }, Camera => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Camera', DirName => 'MIE-Camera', }, }, Document => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Doc', DirName => 'MIE-Doc', }, }, EXIF => { SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', ProcessProc => \&Image::ExifTool::ProcessTIFF, WriteProc => \&Image::ExifTool::WriteTIFF, }, }, Geo => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Geo', DirName => 'MIE-Geo', }, }, ICCProfile => { Name => 'ICC_Profile', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' }, }, ID3 => { SubDirectory => { TagTable => 'Image::ExifTool::ID3::Main' } }, IPTC => { SubDirectory => { TagTable => 'Image::ExifTool::IPTC::Main' } }, Image => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Image', DirName => 'MIE-Image', }, }, MakerNotes => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::MakerNotes', DirName => 'MIE-MakerNotes', }, }, Preview => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Preview', DirName => 'MIE-Preview', }, }, Thumbnail => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Thumbnail', DirName => 'MIE-Thumbnail', }, }, Video => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Video', DirName => 'MIE-Video', }, }, XMP => { SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' } }, ); # MIE document information %Image::ExifTool::MIE::Doc = ( %tableDefaults, GROUPS => { 1 => 'MIE-Doc', 2 => 'Document' }, WRITE_GROUP => 'MIE-Doc', NOTES => 'Information describing the main document, image or file.', Author => { Groups => { 2 => 'Author' } }, Comment => { }, Contributors=> { Groups => { 2 => 'Author' }, List => 1 }, Copyright => { Groups => { 2 => 'Author' } }, CreateDate => { Groups => { 2 => 'Time' }, %dateInfo }, EMail => { Name => 'Email', Groups => { 2 => 'Author' } }, Keywords => { List => 1 }, ModifyDate => { Groups => { 2 => 'Time' }, %dateInfo }, OriginalDate=> { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, %dateInfo, }, Phone => { Name => 'PhoneNumber', Groups => { 2 => 'Author' } }, References => { List => 1 }, Software => { }, Title => { }, URL => { }, ); # MIE geographic information %Image::ExifTool::MIE::Geo = ( %tableDefaults, GROUPS => { 1 => 'MIE-Geo', 2 => 'Location' }, WRITE_GROUP => 'MIE-Geo', NOTES => 'Information related to geographic location.', Address => { }, City => { }, Country => { }, GPS => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::GPS', DirName => 'MIE-GPS', }, }, PostalCode => { }, State => { Notes => 'state or province' }, UTM => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::UTM', DirName => 'MIE-UTM', }, }, ); # MIE GPS information %Image::ExifTool::MIE::GPS = ( %tableDefaults, GROUPS => { 1 => 'MIE-GPS', 2 => 'Location' }, WRITE_GROUP => 'MIE-GPS', Altitude => { Name => 'GPSAltitude', Writable => 'rational64s', Units => [ qw(m ft) ], Notes => q{'m' above sea level unless 'ft' specified}, }, Bearing => { Name => 'GPSDestBearing', Writable => 'rational64s', Units => [ qw(deg deg{mag}) ], Notes => q{'deg' CW from true north unless 'deg{mag}' specified}, }, Datum => { Name => 'GPSMapDatum', Notes => 'WGS-84 assumed if not specified' }, Differential => { Name => 'GPSDifferential', Writable => 'int8u', PrintConv => { 0 => 'No Correction', 1 => 'Differential Corrected', }, }, Distance => { Name => 'GPSDestDistance', Writable => 'rational64s', Units => [ qw(km mi nmi) ], Notes => q{'km' unless 'mi' or 'nmi' specified}, }, Heading => { Name => 'GPSTrack', Writable => 'rational64s', Units => [ qw(deg deg{mag}) ], Notes => q{'deg' CW from true north unless 'deg{mag}' specified}, }, Latitude => { Name => 'GPSLatitude', Writable => 'rational64s', Count => -1, Notes => q{ 1 to 3 numbers: degrees, minutes then seconds. South latitudes are stored as all negative numbers, but may be entered as positive numbers with a trailing 'S' for convenience. For example, these are all equivalent: "-40 -30", "-40.5", "40 30 0.00 S" }, ValueConv => 'Image::ExifTool::GPS::ToDegrees($val, 1)', ValueConvInv => 'Image::ExifTool::GPS::ToDMS($self, $val, 0)', PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1)', }, Longitude => { Name => 'GPSLongitude', Writable => 'rational64s', Count => -1, Notes => q{ 1 to 3 numbers: degrees, minutes then seconds. West longitudes are negative, but may be entered as positive numbers with a trailing 'W' }, ValueConv => 'Image::ExifTool::GPS::ToDegrees($val, 1)', ValueConvInv => 'Image::ExifTool::GPS::ToDMS($self, $val, 0)', PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")', PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1)', }, MeasureMode => { Name => 'GPSMeasureMode', Writable => 'int8u', PrintConv => { 2 => '2-D', 3 => '3-D' }, }, Satellites => 'GPSSatellites', Speed => { Name => 'GPSSpeed', Writable => 'rational64s', Units => [ qw(km/h mi/h m/s kn) ], Notes => q{'km/h' unless 'mi/h', 'm/s' or 'kn' specified}, }, DateTime => { Name => 'GPSDateTime', Groups => { 2 => 'Time' }, %dateInfo }, ); # MIE UTM information %Image::ExifTool::MIE::UTM = ( %tableDefaults, GROUPS => { 1 => 'MIE-UTM', 2 => 'Location' }, WRITE_GROUP => 'MIE-UTM', Datum => { Name => 'UTMMapDatum', Notes => 'WGS-84 assumed if not specified' }, Easting => { Name => 'UTMEasting' }, Northing => { Name => 'UTMNorthing' }, Zone => { Name => 'UTMZone', Writable => 'int8s' }, ); # MIE image information %Image::ExifTool::MIE::Image = ( %tableDefaults, GROUPS => { 1 => 'MIE-Image', 2 => 'Image' }, WRITE_GROUP => 'MIE-Image', '0Type' => { Name => 'FullSizeImageType', Notes => 'JPEG if not specified' }, '1Name' => { Name => 'FullSizeImageName' }, BitDepth => { Name => 'BitDepth', Writable => 'int16u' }, ColorSpace => { Notes => 'standard ColorSpace values are "sRGB" and "Adobe RGB"' }, Components => { Name => 'ComponentsConfiguration', Notes => 'string composed of R, G, B, Y, Cb and Cr', }, Compression => { Name => 'CompressionRatio', Writable => 'rational32u' }, ImageSize => { Writable => 'int16u', Count => -1, Notes => '2 or 3 values, for number of XY or XYZ pixels', PrintConv => '$val=~tr/ /x/;$val', PrintConvInv => '$val=~tr/x/ /;$val', }, Resolution => { Writable => 'rational64u', Units => [ qw(/in /cm /deg /arcmin /arcsec), '' ], Count => -1, Notes => q{ 1 to 3 values. A single value for equal resolution in all directions, or separate X, Y and Z values if necessary. Units are '/in' unless '/cm', '/deg', '/arcmin', '/arcsec' or '' specified }, PrintConv => '$val=~tr/ /x/;$val', PrintConvInv => '$val=~tr/x/ /;$val', }, data => { Name => 'FullSizeImage', Groups => { 2 => 'Preview' }, %binaryConv, RawConv => '$self->ValidateImage(\$val,$tag)', }, ); # MIE preview image %Image::ExifTool::MIE::Preview = ( %tableDefaults, GROUPS => { 1 => 'MIE-Preview', 2 => 'Image' }, WRITE_GROUP => 'MIE-Preview', '0Type' => { Name => 'PreviewImageType', Notes => 'JPEG if not specified' }, '1Name' => { Name => 'PreviewImageName' }, ImageSize => { Name => 'PreviewImageSize', Writable => 'int16u', Count => -1, Notes => '2 or 3 values, for number of XY or XYZ pixels', PrintConv => '$val=~tr/ /x/;$val', PrintConvInv => '$val=~tr/x/ /;$val', }, data => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, %binaryConv, RawConv => '$self->ValidateImage(\$val,$tag)', }, ); # MIE thumbnail image %Image::ExifTool::MIE::Thumbnail = ( %tableDefaults, GROUPS => { 1 => 'MIE-Thumbnail', 2 => 'Image' }, WRITE_GROUP => 'MIE-Thumbnail', '0Type' => { Name => 'ThumbnailImageType', Notes => 'JPEG if not specified' }, '1Name' => { Name => 'ThumbnailImageName' }, ImageSize => { Name => 'ThumbnailImageSize', Writable => 'int16u', Count => -1, Notes => '2 or 3 values, for number of XY or XYZ pixels', PrintConv => '$val=~tr/ /x/;$val', PrintConvInv => '$val=~tr/x/ /;$val', }, data => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, %binaryConv, RawConv => '$self->ValidateImage(\$val,$tag)', }, ); # MIE audio information %Image::ExifTool::MIE::Audio = ( %tableDefaults, GROUPS => { 1 => 'MIE-Audio', 2 => 'Audio' }, WRITE_GROUP => 'MIE-Audio', NOTES => q{ For the Audio group (and any other group containing a 'data' element), tags refer to the contained data if present, otherwise they refer to the main SubfileData. The C<0Type> and C<1Name> elements should exist only if C<data> is present. }, '0Type' => { Name => 'RelatedAudioFileType', Notes => 'MP3 if not specified' }, '1Name' => { Name => 'RelatedAudioFileName' }, SampleBits => { Writable => 'int16u' }, Channels => { Writable => 'int8u' }, Compression => { Name => 'AudioCompression' }, Duration => { Writable => 'rational64u', PrintConv => 'ConvertDuration($val)' }, SampleRate => { Writable => 'int32u' }, data => { Name => 'RelatedAudioFile', %binaryConv }, ); # MIE video information %Image::ExifTool::MIE::Video = ( %tableDefaults, GROUPS => { 1 => 'MIE-Video', 2 => 'Video' }, WRITE_GROUP => 'MIE-Video', '0Type' => { Name => 'RelatedVideoFileType', Notes => 'MOV if not specified' }, '1Name' => { Name => 'RelatedVideoFileName' }, Codec => { }, Duration => { Writable => 'rational64u', PrintConv => 'ConvertDuration($val)' }, data => { Name => 'RelatedVideoFile', %binaryConv }, ); # MIE camera information %Image::ExifTool::MIE::Camera = ( %tableDefaults, GROUPS => { 1 => 'MIE-Camera', 2 => 'Camera' }, WRITE_GROUP => 'MIE-Camera', Brightness => { Writable => 'int8s' }, ColorTemperature=> { Writable => 'int32u' }, ColorBalance => { Writable => 'rational64u', Count => 3, Notes => 'RGB scaling factors', }, Contrast => { Writable => 'int8s' }, DigitalZoom => { Writable => 'rational64u' }, ExposureComp => { Name => 'ExposureCompensation', Writable => 'rational64s' }, ExposureMode => { }, ExposureTime => { Writable => 'rational64u', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, Flash => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Flash', DirName => 'MIE-Flash', }, }, FirmwareVersion => { }, FocusMode => { }, ISO => { Writable => 'int16u' }, ISOSetting => { Writable => 'int16u', Notes => '0 = Auto, otherwise manual ISO speed setting', }, ImageNumber => { Writable => 'int32u' }, ImageQuality => { Notes => 'Economy, Normal, Fine, Super Fine or Raw' }, ImageStabilization => { Writable => 'int8u', %offOn }, Lens => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Lens', DirName => 'MIE-Lens', }, }, Make => { }, MeasuredEV => { Writable => 'rational64s' }, Model => { }, OwnerName => { }, Orientation => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Orient', DirName => 'MIE-Orient', }, }, Saturation => { Writable => 'int8s' }, SensorSize => { Writable => 'rational64u', Count => 2, Notes => 'width and height of active sensor area in mm', }, SerialNumber => { }, Sharpness => { Writable => 'int8s' }, ShootingMode => { }, ); # Camera orientation information %Image::ExifTool::MIE::Orient = ( %tableDefaults, GROUPS => { 1 => 'MIE-Orient', 2 => 'Camera' }, WRITE_GROUP => 'MIE-Orient', NOTES => 'These tags describe the camera orientation.', Azimuth => { Writable => 'rational64s', Units => [ qw(deg deg{mag}) ], Notes => q{'deg' CW from true north unless 'deg{mag}' specified}, }, Declination => { Writable => 'rational64s' }, Elevation => { Writable => 'rational64s' }, RightAscension => { Writable => 'rational64s' }, Rotation => { Writable => 'rational64s', Notes => 'CW rotation angle of camera about lens axis', }, ); # MIE camera lens information %Image::ExifTool::MIE::Lens = ( %tableDefaults, GROUPS => { 1 => 'MIE-Lens', 2 => 'Camera' }, WRITE_GROUP => 'MIE-Lens', NOTES => q{ All recorded lens parameters (focal length, aperture, etc) include the effects of the extender if present. }, Extender => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Extender', DirName => 'MIE-Extender', }, }, FNumber => { Writable => 'rational64u' }, FocalLength => { Writable => 'rational64u', Notes => 'all focal lengths in mm' }, FocusDistance => { Writable => 'rational64u', Units => [ qw(m ft) ], Notes => q{'m' unless 'ft' specified}, }, Make => { Name => 'LensMake' }, MaxAperture => { Writable => 'rational64u' }, MaxApertureAtMaxFocal => { Writable => 'rational64u' }, MaxFocalLength => { Writable => 'rational64u' }, MinAperture => { Writable => 'rational64u' }, MinFocalLength => { Writable => 'rational64u' }, Model => { Name => 'LensModel' }, OpticalZoom => { Writable => 'rational64u' }, SerialNumber => { Name => 'LensSerialNumber' }, ); # MIE lens extender information %Image::ExifTool::MIE::Extender = ( %tableDefaults, GROUPS => { 1 => 'MIE-Extender', 2 => 'Camera' }, WRITE_GROUP => 'MIE-Extender', Magnification => { Name => 'ExtenderMagnification', Writable => 'rational64s' }, Make => { Name => 'ExtenderMake' }, Model => { Name => 'ExtenderModel' }, SerialNumber => { Name => 'ExtenderSerialNumber' }, ); # MIE camera flash information %Image::ExifTool::MIE::Flash = ( %tableDefaults, GROUPS => { 1 => 'MIE-Flash', 2 => 'Camera' }, WRITE_GROUP => 'MIE-Flash', ExposureComp => { Name => 'FlashExposureComp', Writable => 'rational64s' }, Fired => { Name => 'FlashFired', Writable => 'int8u', PrintConv => \%noYes }, GuideNumber => { Name => 'FlashGuideNumber' }, Make => { Name => 'FlashMake' }, Mode => { Name => 'FlashMode' }, Model => { Name => 'FlashModel' }, SerialNumber => { Name => 'FlashSerialNumber' }, Type => { Name => 'FlashType', Notes => '"Internal" or "External"' }, ); # MIE maker notes information %Image::ExifTool::MIE::MakerNotes = ( %tableDefaults, GROUPS => { 1 => 'MIE-MakerNotes' }, WRITE_GROUP => 'MIE-MakerNotes', NOTES => q{ MIE maker notes are contained within separate groups for each manufacturer to avoid name conflicts. }, Canon => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Canon', DirName => 'MIE-Canon', }, }, Casio => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Unknown' } }, FujiFilm => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Unknown' } }, Kodak => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Unknown' } }, KonicaMinolta=>{ SubDirectory => { TagTable => 'Image::ExifTool::MIE::Unknown' } }, Nikon => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Unknown' } }, Olympus => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Unknown' } }, Panasonic => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Unknown' } }, Pentax => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Unknown' } }, Ricoh => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Unknown' } }, Sigma => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Unknown' } }, Sony => { SubDirectory => { TagTable => 'Image::ExifTool::MIE::Unknown' } }, ); # MIE Canon-specific information %Image::ExifTool::MIE::Canon = ( %tableDefaults, GROUPS => { 1 => 'MIE-Canon' }, WRITE_GROUP => 'MIE-Canon', VRD => { Name => 'CanonVRD', SubDirectory => { TagTable => 'Image::ExifTool::CanonVRD::Main' }, }, ); %Image::ExifTool::MIE::Unknown = ( PROCESS_PROC => \&ProcessMIE, GROUPS => { 1 => 'MIE-Unknown' }, ); #------------------------------------------------------------------------------ # Add user-defined MIE groups to %mieMap # Inputs: none; Returns: nothing, but sets $doneMieMap flag sub UpdateMieMap() { $doneMieMap = 1; # set flag so we only do this once return unless %Image::ExifTool::UserDefined; my ($tableName, @tables, %doneTable, $tagID); # get list of top-level MIE tables with user-defined tags foreach $tableName (keys %Image::ExifTool::UserDefined) { next unless $tableName =~ /^Image::ExifTool::MIE::/; my $userTable = $Image::ExifTool::UserDefined{$tableName}; my $tagTablePtr = GetTagTable($tableName) or next; # copy the WRITE_GROUP from the actual table $$userTable{WRITE_GROUP} = $$tagTablePtr{WRITE_GROUP}; # add to list of tables to process $doneTable{$tableName} = 1; push @tables, [$tableName, $userTable]; } # recursively add all user-defined groups to MIE map while (@tables) { my ($tableName, $tagTablePtr) = @{shift @tables}; my $parent = $$tagTablePtr{WRITE_GROUP}; $parent or warn("No WRITE_GROUP for $tableName\n"), next; $mieMap{$parent} or warn("$parent is not in MIE map\n"), next; foreach $tagID (TagTableKeys($tagTablePtr)) { my $tagInfo = $$tagTablePtr{$tagID}; next unless ref $tagInfo eq 'HASH' and $$tagInfo{SubDirectory}; my $subTableName = $tagInfo->{SubDirectory}->{TagTable}; my $subTablePtr = GetTagTable($subTableName) or next; # only care about MIE tables next unless $$subTablePtr{PROCESS_PROC} and $$subTablePtr{PROCESS_PROC} eq \&ProcessMIE; my $group = $$subTablePtr{WRITE_GROUP}; $group or warn("No WRITE_GROUP for $subTableName\n"), next; if ($mieMap{$group} and $mieMap{$group} ne $parent) { warn("$group already has different parent ($mieMap{$group})\n"), next; } $mieMap{$group} = $parent; # add to map # process tables within this one too $doneTable{$subTableName} and next; $doneTable{$subTableName} = 1; push @tables, [$subTableName, $subTablePtr]; } } } #------------------------------------------------------------------------------ # Get localized version of tagInfo hash # Inputs: 0) tagInfo hash ref, 1) locale code (eg. "en_CA") # Returns: new tagInfo hash ref, or undef if invalid sub GetLangInfo($$) { my ($tagInfo, $langCode) = @_; # check for properly formatted language code return undef unless $langCode =~ /^[a-z]{2}([-_])[A-Z]{2}$/; # use '_' as a separator, but recognize '_' or '-' $langCode =~ tr/-/_/ if $1 eq '-'; # can only set locale on string types return undef if $$tagInfo{Writable} and $$tagInfo{Writable} ne 'string'; return Image::ExifTool::GetLangInfo($tagInfo, $langCode); } #------------------------------------------------------------------------------ # return true if we have Zlib::Compress # Inputs: 0) ExifTool object ref, 1) verb for what you want to do with the info # Returns: 1 if Zlib available, 0 otherwise sub HasZlib($$) { unless (defined $hasZlib) { $hasZlib = eval { require Compress::Zlib }; unless ($hasZlib) { $hasZlib = 0; $_[0]->Warn("Install Compress::Zlib to $_[1] compressed information"); } } return $hasZlib; } #------------------------------------------------------------------------------ # Get format code for MIE group element with current byte order # Inputs: 0) [optional] true to convert result to chr() # Returns: format code sub MIEGroupFormat(;$) { my $chr = shift; my $format = GetByteOrder() eq 'MM' ? 0x10 : 0x18; return $chr ? chr($format) : $format; } #------------------------------------------------------------------------------ # ReadValue() with added support for UTF formats (utf8, utf16 and utf32) # Inputs: 0) data reference, 1) value offset, 2) format string, # 3) number of values (or undef to use all data) # 4) valid data length relative to offset, 5) returned rational ref # Returns: converted value, or undefined if data isn't there # or list of values in list context # Notes: all string formats are converted to UTF8 sub ReadMIEValue($$$$$;$) { my ($dataPt, $offset, $format, $count, $size, $ratPt) = @_; my $val; if ($format =~ /^(utf(8|16|32)|string)/) { if ($1 eq 'utf8' or $1 eq 'string') { # read the 8-bit string $val = substr($$dataPt, $offset, $size); # (as of ExifTool 7.62, leave string values unconverted) } else { # convert to UTF8 my $fmt; if (GetByteOrder() eq 'MM') { $fmt = ($1 eq 'utf16') ? 'n' : 'N'; } else { $fmt = ($1 eq 'utf16') ? 'v' : 'V'; } my @unpk = unpack("x$offset$fmt$size",$$dataPt); if ($] >= 5.006001) { $val = pack('C0U*', @unpk); } else { $val = Image::ExifTool::PackUTF8(@unpk); } } # truncate at null unless this is a list # (strings shouldn't have a null, but just in case) $val =~ s/\0.*//s unless $format =~ /_list$/; } else { $format = 'undef' if $format eq 'free'; # read 'free' as 'undef' return ReadValue($dataPt, $offset, $format, $count, $size, $ratPt); } return $val; } #------------------------------------------------------------------------------ # validate raw values for writing # Inputs: 0) ExifTool object ref, 1) tagInfo hash ref, 2) raw value ref # Returns: error string or undef (and possibly changes value) on success sub CheckMIE($$$) { my ($et, $tagInfo, $valPtr) = @_; my $format = $$tagInfo{Writable} || $tagInfo->{Table}->{WRITABLE}; my $err; return 'No writable format' if not $format or $format eq '1'; # handle units if supported by this tag my $ulist = $$tagInfo{Units}; if ($ulist and $$valPtr =~ /(.*)\((.*)\)$/) { my ($val, $units) = ($1, $2); ($units) = grep /^$units$/i, @$ulist; defined $units or return 'Allowed units: (' . join('|', @$ulist) . ')'; $err = Image::ExifTool::CheckValue(\$val, $format, $$tagInfo{Count}); # add units back onto value $$valPtr = "$val($units)" unless $err; } elsif ($format !~ /^(utf|string|undef)/ and $$valPtr =~ /\)$/) { return 'Units not supported'; } else { if ($format eq 'string' and $$et{OPTIONS}{Charset} ne 'UTF8' and $$valPtr =~ /[\x80-\xff]/) { # convert from Charset to UTF-8 $$valPtr = $et->Encode($$valPtr,'UTF8'); } $err = Image::ExifTool::CheckValue($valPtr, $format, $$tagInfo{Count}); } return $err; } #------------------------------------------------------------------------------ # Rewrite a MIE directory # Inputs: 0) ExifTool object reference, 1) DirInfo reference, 2) tag table ptr # Returns: undef on success, otherwise error message (empty message if nothing to write) sub WriteMIEGroup($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $outfile = $$dirInfo{OutFile}; my $dirName = $$dirInfo{DirName}; my $toWrite = $$dirInfo{ToWrite} || ''; my $raf = $$dirInfo{RAF}; my $verbose = $et->Options('Verbose'); my $optCompress = $et->Options('Compress'); my $out = $et->Options('TextOut'); my ($msg, $err, $ok, $sync, $delGroup); my $tag = ''; my $deletedTag = ''; # count each MIE directory found and make name for this specific instance my ($grp1, %isWriting); my $cnt = $$et{MIE_COUNT}; my $grp = $tagTablePtr->{GROUPS}->{1}; my $n = $$cnt{'MIE-Main'} || 0; if ($grp eq 'MIE-Main') { $$cnt{$grp} = ++$n; ($grp1 = $grp) =~ s/MIE-/MIE$n-/; } else { ($grp1 = $grp) =~ s/MIE-/MIE$n-/; my $m = $$cnt{$grp1} = ($$cnt{$grp1} || 0) + 1; $isWriting{"$grp$m"} = 1; # eg. 'MIE-Doc2' $isWriting{$grp1} = 1; # eg. 'MIE1-Doc' $grp1 .= $m; } # build lookup for all valid group names for this MIE group $isWriting{$grp} = 1; # eg. 'MIE-Doc' $isWriting{$grp1} = 1; # eg. 'MIE1-Doc2' $isWriting{"MIE$n"} = 1; # eg. 'MIE1' # determine if we are deleting this group if (%{$$et{DEL_GROUP}}) { $delGroup = 1 if $$et{DEL_GROUP}{MIE} or $$et{DEL_GROUP}{$grp} or $$et{DEL_GROUP}{$grp1} or $$et{DEL_GROUP}{"MIE$n"}; } # prepare lookups and lists for writing my $newTags = $et->GetNewTagInfoHash($tagTablePtr); my ($addDirs, $editDirs) = $et->GetAddDirHash($tagTablePtr, $dirName); my @editTags = sort keys %$newTags, keys %$editDirs; $verbose and print $out $raf ? 'Writing' : 'Creating', " $grp1:\n"; # loop through elements in MIE group MieElement: for (;;) { my ($format, $tagLen, $valLen, $units, $oldHdr, $buff); my $lastTag = $tag; if ($raf) { # read first 4 bytes of element header my $n = $raf->Read($oldHdr, 4); if ($n != 4) { last if $n or defined $sync; undef $raf; # all done reading $ok = 1; } } if ($raf) { ($sync, $format, $tagLen, $valLen) = unpack('aC3', $oldHdr); $sync eq '~' or $msg = 'Invalid sync byte', last; # read tag name if ($tagLen) { $raf->Read($tag, $tagLen) == $tagLen or last; $oldHdr .= $tag; # add tag to element header $et->Warn("MIE tag '$tag' out of sequence") if $tag lt $lastTag; # separate units from tag name if they exist $units = $1 if $tag =~ s/\((.*)\)$//; } else { $tag = ''; } # get multi-byte value length if necessary if ($valLen > 252) { # calculate number of bytes in extended DataLength my $n = 1 << (256 - $valLen); $raf->Read($buff, $n) == $n or last; $oldHdr .= $buff; # add to old header my $fmt = 'int' . ($n * 8) . 'u'; $valLen = ReadValue(\$buff, 0, $fmt, 1, $n); if ($valLen > 0x7fffffff) { $msg = "Can't write $tag (DataLength > 2GB not yet supported)"; last; } } # don't rewrite free bytes or information in deleted groups if ($format eq 0x80 or ($delGroup and $tagLen and ($format & 0xf0) != 0x10)) { $raf->Seek($valLen, 1) or $msg = 'Seek error', last; if ($verbose > 1) { my $free = ($format eq 0x80) ? ' free' : ''; print $out " - $grp1:$tag ($valLen$free bytes)\n"; } ++$$et{CHANGED} if $delGroup; next; } } else { # no more elements to read $tagLen = $valLen = 0; $tag = ''; } # # write necessary new tags and process directories # while (@editTags) { last if $tagLen and $editTags[0] gt $tag; # we are writing the new tag now my ($newVal, $writable, $oldVal, $newFormat, $compress); my $newTag = shift @editTags; my $newInfo = $$editDirs{$newTag}; if ($newInfo) { # create the new subdirectory or rewrite existing non-MIE directory my $subTablePtr = GetTagTable($newInfo->{SubDirectory}->{TagTable}); unless ($subTablePtr) { $et->Warn("No tag table for $newTag $$newInfo{Name}"); next; } my %subdirInfo; my $isMieGroup = ($$subTablePtr{WRITE_PROC} and $$subTablePtr{WRITE_PROC} eq \&ProcessMIE); if ($newTag eq $tag) { # make sure that either both or neither old and new tags are MIE groups if ($isMieGroup xor ($format & 0xf3) == 0x10) { $et->Warn("Tag '$tag' not expected type"); next; # don't write our new tag } # uncompress existing directory into $oldVal since we are editing it if ($format & 0x04) { last unless HasZlib($et, 'edit'); $raf->Read($oldVal, $valLen) == $valLen or last MieElement; my $stat; my $inflate = Compress::Zlib::inflateInit(); $inflate and ($oldVal, $stat) = $inflate->inflate($oldVal); unless ($inflate and $stat == Compress::Zlib::Z_STREAM_END()) { $msg = "Error inflating $tag"; last MieElement; } $compress = 1; $valLen = length $oldVal; # uncompressed value length } } else { # don't create this directory unless necessary next unless $$addDirs{$newTag}; } if ($isMieGroup) { my $hdr; if ($newTag eq $tag) { # rewrite existing directory later unless it was compressed last unless $compress; # rewrite directory to '$newVal' $newVal = ''; %subdirInfo = ( OutFile => \$newVal, RAF => new File::RandomAccess(\$oldVal), ); } elsif ($optCompress and not $$dirInfo{IsCompressed}) { # write to memory so we can compress the new MIE group $compress = 1; %subdirInfo = ( OutFile => \$newVal, ); } else { $hdr = '~' . MIEGroupFormat(1) . chr(length($newTag)) . "\0" . $newTag; %subdirInfo = ( OutFile => $outfile, ToWrite => $toWrite . $hdr, ); } $subdirInfo{DirName} = $newInfo->{SubDirectory}->{DirName} || $newTag; $subdirInfo{Parent} = $dirName; # don't compress elements of an already compressed group $subdirInfo{IsCompressed} = $$dirInfo{IsCompressed} || $compress; $msg = WriteMIEGroup($et, \%subdirInfo, $subTablePtr); last MieElement if $msg; # message is defined but empty if nothing was written if (defined $msg) { undef $msg; # not a problem if nothing was written next; } elsif (not $compress) { # group was written already $toWrite = ''; next; } elsif (length($newVal) <= 4) { # terminator only? $verbose and print $out "Deleted compressed $grp1 (empty)\n"; next MieElement if $newTag eq $tag; # deleting the directory next; # not creating the new directory } $writable = 'undef'; $newFormat = MIEGroupFormat(); } else { if ($newTag eq $tag) { unless ($compress) { # read and edit existing directory $raf->Read($oldVal, $valLen) == $valLen or last MieElement; } %subdirInfo = ( DataPt => \$oldVal, DataLen => $valLen, DirName => $$newInfo{Name}, DataPos => $$dirInfo{IsCompressed} ? undef : $raf->Tell() - $valLen, DirStart=> 0, DirLen => $valLen, ); # write Compact subdirectories if we will compress the data if (($compress or $optCompress or $$dirInfo{IsCompressed}) and eval { require Compress::Zlib }) { $subdirInfo{Compact} = 1; } } $subdirInfo{Parent} = $dirName; my $writeProc = $newInfo->{SubDirectory}->{WriteProc}; # reset processed lookup to avoid errors in case of multiple EXIF blocks $$et{PROCESSED} = { }; $newVal = $et->WriteDirectory(\%subdirInfo, $subTablePtr, $writeProc); if (defined $newVal) { if ($newVal eq '') { next MieElement if $newTag eq $tag; # deleting the directory next; # not creating the new directory } } else { next unless defined $oldVal; $newVal = $oldVal; # just copy over the old directory } $writable = 'undef'; $newFormat = 0x00; # all other directories are 'undef' format } } else { # get the new tag information $newInfo = $$newTags{$newTag}; my $nvHash = $et->GetNewValueHash($newInfo); my @newVals; # write information only to specified group my $writeGroup = $$nvHash{WriteGroup}; last unless $isWriting{$writeGroup}; # if tag existed, must decide if we want to overwrite the value if ($newTag eq $tag) { my $isOverwriting; my $isList = $$newInfo{List}; if ($isList) { last if $$nvHash{CreateOnly}; $isOverwriting = -1; # force processing list elements individually } else { $isOverwriting = $et->IsOverwriting($nvHash); last unless $isOverwriting; } my ($val, $cmpVal); if ($isOverwriting < 0 or $verbose > 1) { # check to be sure we can uncompress the value if necessary HasZlib($et, 'edit') or last if $format & 0x04; # read the old value $raf->Read($oldVal, $valLen) == $valLen or last MieElement; # uncompress if necessary if ($format & 0x04) { my $stat; my $inflate = Compress::Zlib::inflateInit(); # must save original compressed value in case we decide # not to overwrite it later $cmpVal = $oldVal; $inflate and ($oldVal, $stat) = $inflate->inflate($oldVal); unless ($inflate and $stat == Compress::Zlib::Z_STREAM_END()) { $msg = "Error inflating $tag"; last MieElement; } $valLen = length $oldVal; # update value length } # convert according to specified format my $formatStr = $mieFormat{$format & 0xfb} || 'undef'; $val = ReadMIEValue(\$oldVal, 0, $formatStr, undef, $valLen); if ($isOverwriting < 0 and defined $val) { # handle list values individually if ($isList) { my (@vals, $v); if ($formatStr =~ /_list$/) { @vals = split "\0", $val; } else { @vals = $val; } # keep any list items that we aren't overwriting foreach $v (@vals) { next if $et->IsOverwriting($nvHash, $v); push @newVals, $v; } } else { # test to see if we really want to overwrite the value $isOverwriting = $et->IsOverwriting($nvHash, $val); } } } if ($isOverwriting) { # skip the old value if we didn't read it already unless (defined $oldVal) { $raf->Seek($valLen, 1) or $msg = 'Seek error'; } if ($verbose > 1) { $val .= "($units)" if defined $units; $et->VerboseValue("- $grp1:$$newInfo{Name}", $val); } $deletedTag = $tag; # remember that we deleted this tag ++$$et{CHANGED}; # we deleted the old value } else { if (defined $oldVal) { # write original compressed value $oldVal = $cmpVal if defined $cmpVal; } else { $raf->Read($oldVal, $valLen) == $valLen or last MieElement; } # write the old value now Write($outfile, $toWrite, $oldHdr, $oldVal) or $err = 1; $toWrite = ''; next MieElement; } unless (@newVals) { # unshift the new tag info to write it later unshift @editTags, $newTag; next MieElement; # get next element from file } } else { # write new value if creating, or if List and list existed, or # if tag was previously deleted next unless $$nvHash{IsCreating} or (($newTag eq $lastTag and ($$newInfo{List} or $deletedTag eq $lastTag) and not $$nvHash{EditOnly})); } # get the new value to write (undef to delete) push @newVals, $et->GetNewValue($nvHash); next unless @newVals; $writable = $$newInfo{Writable} || $$tagTablePtr{WRITABLE}; if ($writable eq 'string') { # join multiple values into a single string $newVal = join "\0", @newVals; # write string as UTF-8,16 or 32 if value contains valid UTF-8 codes require Image::ExifTool::XMP; my $isUTF8 = Image::ExifTool::XMP::IsUTF8(\$newVal); if ($isUTF8 > 0) { $writable = 'utf8'; # write UTF-16 or UTF-32 if it is more compact my $to = $isUTF8 > 1 ? 'UCS4' : 'UCS2'; my $tmp = Image::ExifTool::Decode(undef,$newVal,'UTF8',undef,$to); if (length $tmp < length $newVal) { $newVal = $tmp; $writable = ($isUTF8 > 1) ? 'utf32' : 'utf16'; } } # write as a list if we have multiple values $writable .= '_list' if @newVals > 1; } else { # should only be one element in the list $newVal = shift @newVals; } $newFormat = $mieCode{$writable}; unless (defined $newFormat) { $msg = "Bad format '$writable' for $$newInfo{Name}"; next MieElement; } } # write the new or edited element while (defined $newFormat) { my $valPt = \$newVal; # remove units from value and add to tag name if supported by this tag if ($$newInfo{Units}) { my $val2; if ($$valPt =~ /(.*)\((.*)\)$/) { $val2 = $1; $newTag .= "($2)"; } else { $val2 = $$valPt; # add default units my $ustr = '(' . $newInfo->{Units}->[0] . ')'; $newTag .= $ustr; $$valPt .= $ustr; } $valPt = \$val2; } # convert value if necessary if ($writable !~ /^(utf|string|undef)/) { my $val3 = WriteValue($$valPt, $writable, $$newInfo{Count}); defined $val3 or $et->Warn("Error writing $newTag"), last; $valPt = \$val3; } my $len = length $$valPt; # compress value before writing if required if (($compress or $optCompress) and not $$dirInfo{IsCompressed} and HasZlib($et, 'write')) { my $deflate = Compress::Zlib::deflateInit(); my $val4; if ($deflate) { $val4 = $deflate->deflate($$valPt); $val4 .= $deflate->flush() if defined $val4; } if (defined $val4) { my $len4 = length $val4; my $saved = $len - $len4; # only use compressed data if it is smaller if ($saved > 0) { $verbose and print $out " [$newTag compression saved $saved bytes]\n"; $newFormat |= 0x04; # set compressed bit $len = $len4; # set length $valPt = \$val4; # set value pointer } elsif ($verbose) { print $out " [$newTag compression saved $saved bytes -- written uncompressed]\n"; } } else { $et->Warn("Error deflating $newTag (written uncompressed)"); } } # calculate the DataLength code my $extLen; if ($len < 253) { $extLen = ''; } elsif ($len < 65536) { $extLen = Set16u($len); $len = 255; } elsif ($len <= 0x7fffffff) { $extLen = Set32u($len); $len = 254; } else { $et->Warn("Can't write $newTag (DataLength > 2GB not yet suppported)"); last; # don't write this tag } # write this element (with leading MIE group element if not done already) my $hdr = $toWrite . '~' . chr($newFormat) . chr(length $newTag); Write($outfile, $hdr, chr($len), $newTag, $extLen, $$valPt) or $err = 1; $toWrite = ''; # we changed a tag unless just editing a subdirectory unless ($$editDirs{$newTag}) { $et->VerboseValue("+ $grp1:$$newInfo{Name}", $newVal); ++$$et{CHANGED}; } last; # didn't want to loop anyway } next MieElement if defined $oldVal; } # # rewrite existing element or descend into uncompressed MIE group # # all done this MIE group if we reached the terminator element unless ($tagLen) { # skip over existing terminator data (if any) last if $valLen and not $raf->Seek($valLen, 1); $ok = 1; # write group terminator if necessary unless ($toWrite) { # write end-of-group terminator element my $term = "~\0\0\0"; unless ($$dirInfo{Parent}) { # write extended terminator for file-level group my $len = ref $outfile eq 'SCALAR' ? length($$outfile) : tell $outfile; $len += 10; # include length of terminator itself if ($len and $len <= 0x7fffffff) { $term = "~\0\0\x06" . Set32u($len) . MIEGroupFormat(1) . "\x04"; } } Write($outfile, $term) or $err = 1; } last; } # descend into existing uncompressed MIE group if ($format == 0x10 or $format == 0x18) { my ($subTablePtr, $dirName); my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); if ($tagInfo and $$tagInfo{SubDirectory}) { $dirName = $tagInfo->{SubDirectory}->{DirName}; my $subTable = $tagInfo->{SubDirectory}->{TagTable}; $subTablePtr = $subTable ? GetTagTable($subTable) : $tagTablePtr; } else { $subTablePtr = GetTagTable('Image::ExifTool::MIE::Unknown'); } my $hdr = '~' . chr($format) . chr(length $tag) . "\0" . $tag; my %subdirInfo = ( DirName => $dirName || $tag, RAF => $raf, ToWrite => $toWrite . $hdr, OutFile => $outfile, Parent => $dirName, IsCompressed => $$dirInfo{IsCompressed}, ); my $oldOrder = GetByteOrder(); SetByteOrder($format & 0x08 ? 'II' : 'MM'); $msg = WriteMIEGroup($et, \%subdirInfo, $subTablePtr); SetByteOrder($oldOrder); last if $msg; if (defined $msg) { undef $msg; # no problem if nothing written } else { $toWrite = ''; } next; } # just copy existing element my $oldVal; $raf->Read($oldVal, $valLen) == $valLen or last; if ($toWrite) { Write($outfile, $toWrite) or $err = 1; $toWrite = ''; } Write($outfile, $oldHdr, $oldVal) or $err = 1; } # return error message if ($err) { $msg = 'Error writing file'; } elsif (not $ok and not $msg) { $msg = 'Unexpected end of file'; } elsif (not $msg and $toWrite) { $msg = ''; # flag for nothing written $verbose and print $out "Deleted $grp1 (empty)\n"; } return $msg; } #------------------------------------------------------------------------------ # Process MIE directory # Inputs: 0) ExifTool object reference, 1) DirInfo reference, 2) tag table ref # Returns: undef on success, or error message if there was a problem # Notes: file pointer is positioned at the MIE end on entry sub ProcessMIEGroup($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $raf = $$dirInfo{RAF}; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my $notUTF8 = ($$et{OPTIONS}{Charset} ne 'UTF8'); my ($msg, $buff, $ok, $oldIndent, $mime); my $lastTag = ''; # get group 1 names: $grp doesn't have numbers (eg. 'MIE-Doc'), # and $grp1 does (eg. 'MIE1-Doc1') my $cnt = $$et{MIE_COUNT}; my $grp1 = $tagTablePtr->{GROUPS}->{1}; my $n = $$cnt{'MIE-Main'} || 0; if ($grp1 eq 'MIE-Main') { $$cnt{$grp1} = ++$n; $grp1 =~ s/MIE-/MIE$n-/ if $n > 1; } else { $grp1 =~ s/MIE-/MIE$n-/ if $n > 1; $$cnt{$grp1} = ($$cnt{$grp1} || 0) + 1; $grp1 .= $$cnt{$grp1} if $$cnt{$grp1} > 1; } # set group1 name for all tags extracted from this group $$et{SET_GROUP1} = $grp1; if ($verbose) { $oldIndent = $$et{INDENT}; $$et{INDENT} .= '| '; $et->VerboseDir($grp1); } my $wasCompressed = $$dirInfo{WasCompressed}; # process all MIE elements for (;;) { $raf->Read($buff, 4) == 4 or last; my ($sync, $format, $tagLen, $valLen) = unpack('aC3', $buff); $sync eq '~' or $msg = 'Invalid sync byte', last; # read tag name my ($tag, $units); if ($tagLen) { $raf->Read($tag, $tagLen) == $tagLen or last; $et->Warn("MIE tag '$tag' out of sequence") if $tag lt $lastTag; $lastTag = $tag; # separate units from tag name if they exist $units = $1 if $tag =~ s/\((.*)\)$//; } else { $tag = ''; } # get multi-byte value length if necessary if ($valLen > 252) { my $n = 1 << (256 - $valLen); $raf->Read($buff, $n) == $n or last; my $fmt = 'int' . ($n * 8) . 'u'; $valLen = ReadValue(\$buff, 0, $fmt, 1, $n); if ($valLen > 0x7fffffff) { $msg = "Can't read $tag (DataLength > 2GB not yet supported)"; last; } } # all done if we reached the group terminator unless ($tagLen) { # skip over terminator data block $ok = 1 unless $valLen and not $raf->Seek($valLen, 1); last; } # get tag information hash unless this is free space my ($tagInfo, $value); while ($format != 0x80) { $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); last if $tagInfo; # extract tags with locale code if ($tag =~ /\W/) { if ($tag =~ /^(\w+)-([a-z]{2}_[A-Z]{2})$/) { my ($baseTag, $langCode) = ($1, $2); $tagInfo = $et->GetTagInfo($tagTablePtr, $baseTag); $tagInfo = GetLangInfo($tagInfo, $langCode) if $tagInfo; last if $tagInfo; } else { $et->Warn('Invalid MIE tag name'); last; } } # extract unknown tags if specified $tagInfo = { Name => $tag, Writable => 0, PrintConv => 'length($val) > 60 ? substr($val,0,55) . "[...]" : $val', }; AddTagToTable($tagTablePtr, $tag, $tagInfo); last; } # read value and uncompress if necessary my $formatStr = $mieFormat{$format & 0xfb} || 'undef'; if ($tagInfo or ($formatStr eq 'MIE' and $format & 0x04)) { $raf->Read($value, $valLen) == $valLen or last; if ($format & 0x04) { if ($verbose) { print $out "$$et{INDENT}\[Tag '$tag' $valLen bytes compressed]\n"; } next unless HasZlib($et, 'decode'); my $stat; my $inflate = Compress::Zlib::inflateInit(); $inflate and ($value, $stat) = $inflate->inflate($value); unless ($inflate and $stat == Compress::Zlib::Z_STREAM_END()) { $et->Warn("Error inflating $tag"); next; } $valLen = length $value; $wasCompressed = 1; } } # process this tag if ($formatStr eq 'MIE') { # process MIE directory my ($subTablePtr, $dirName); if ($tagInfo and $$tagInfo{SubDirectory}) { $dirName = $tagInfo->{SubDirectory}->{DirName}; my $subTable = $tagInfo->{SubDirectory}->{TagTable}; $subTablePtr = $subTable ? GetTagTable($subTable) : $tagTablePtr; } else { $subTablePtr = GetTagTable('Image::ExifTool::MIE::Unknown'); } if ($verbose) { my $order = ', byte order ' . GetByteOrder(); $et->VerboseInfo($tag, $tagInfo, Size => $valLen, Extra => $order); } my %subdirInfo = ( DirName => $dirName || $tag, RAF => $raf, Parent => $$dirInfo{DirName}, WasCompressed => $wasCompressed, ); # read from uncompressed data instead if necessary $subdirInfo{RAF} = new File::RandomAccess(\$value) if $valLen; my $oldOrder = GetByteOrder(); SetByteOrder($format & 0x08 ? 'II' : 'MM'); $msg = ProcessMIEGroup($et, \%subdirInfo, $subTablePtr); SetByteOrder($oldOrder); $$et{SET_GROUP1} = $grp1; # restore this group1 name last if $msg; } else { # process MIE data format types if ($tagInfo) { my $rational; # extract tag value my $val = ReadMIEValue(\$value, 0, $formatStr, undef, $valLen, \$rational); unless (defined $val) { $et->Warn("Error reading $tag value"); $val = '<err>'; } # save type or mime type $mime = $val if $tag eq '0Type' or $tag eq '2MIME'; if ($verbose) { my $count; my $s = Image::ExifTool::FormatSize($formatStr); if ($s and $formatStr !~ /^(utf|string|undef)/) { $count = $valLen / $s; } $et->VerboseInfo($lastTag, $tagInfo, DataPt => \$value, DataPos => $raf->Tell() - $valLen, Size => $valLen, Format => $formatStr, Value => $val, Count => $count, ); } if ($$tagInfo{SubDirectory}) { my $subTablePtr = GetTagTable($tagInfo->{SubDirectory}->{TagTable}); my %subdirInfo = ( DirName => $$tagInfo{Name}, DataPt => \$value, DataLen => $valLen, DirStart=> 0, DirLen => $valLen, Parent => $$dirInfo{DirName}, WasCompressed => $wasCompressed, ); # set DataPos and Base for uncompressed information only unless ($wasCompressed) { $subdirInfo{DataPos} = 0; # (relative to Base) $subdirInfo{Base} = $raf->Tell() - $valLen; } # reset PROCESSED lookup for each MIE directory # (there is no possibility of double-processing a MIE directory) $$et{PROCESSED} = { }; my $processProc = $tagInfo->{SubDirectory}->{ProcessProc}; delete $$et{SET_GROUP1}; delete $$et{NO_LIST}; $et->ProcessDirectory(\%subdirInfo, $subTablePtr, $processProc); $$et{SET_GROUP1} = $grp1; $$et{NO_LIST} = 1; } else { # convert to specified character set if necessary if ($notUTF8 and $formatStr =~ /^(utf|string)/) { $val = $et->Decode($val, 'UTF8'); } if ($formatStr =~ /_list$/) { # split list value into separate strings my @vals = split "\0", $val; $val = \@vals; } if (defined $units) { $val = "@$val" if ref $val; # convert string list to number list # add units to value if specified $val .= "($units)" if defined $units; } my $key = $et->FoundTag($tagInfo, $val); $$et{RATIONAL}{$key} = $rational if defined $rational and defined $key; } } else { # skip over unknown information or free bytes $raf->Seek($valLen, 1) or $msg = 'Seek error', last; $verbose and $et->VerboseInfo($tag, undef, Size => $valLen); } } } # modify MIME type if necessary $mime and not $$dirInfo{Parent} and $et->ModifyMimeType($mime); $ok or $msg or $msg = 'Unexpected end of file'; $verbose and $$et{INDENT} = $oldIndent; return $msg; } #------------------------------------------------------------------------------ # Read/write a MIE file # Inputs: 0) ExifTool object reference, 1) DirInfo reference # Returns: 1 on success, 0 if this wasn't a valid MIE file, or -1 on write error # - process as a trailer if "Trailer" flag set in dirInfo sub ProcessMIE($$) { my ($et, $dirInfo) = @_; return 1 unless defined $et; my $raf = $$dirInfo{RAF}; my $outfile = $$dirInfo{OutFile}; my ($buff, $err, $msg, $pos, $end, $isCreating); my $numDocs = 0; # # process as a trailer (from end of file) if specified # if ($$dirInfo{Trailer}) { my $offset = $$dirInfo{Offset} || 0; # offset from end of file $raf->Seek(-10 - $offset, 2) or return 0; for (;;) { # read and validate last 10 bytes $raf->Read($buff, 10) == 10 or last; last unless $buff =~ /~\0\0\x06.{4}(\x10|\x18)(\x04)$/s or $buff =~ /(\x10|\x18)(\x08)$/s; SetByteOrder($1 eq "\x10" ? 'MM' : 'II'); my $len = ($2 eq "\x04") ? Get32u(\$buff, 4) : Get64u(\$buff, 0); my $curPos = $raf->Tell() or last; last if $len < 12 or $len > $curPos; # validate element header if 8-byte offset was used if ($2 eq "\x08") { last if $len < 14; $raf->Seek($curPos - 14, 0) and $raf->Read($buff, 4) or last; last unless $buff eq "~\0\0\x0a"; } # looks like a good group, so remember start position $pos = $curPos - $len; $end = $curPos unless $end; # seek to 10 bytes from end of previous group $raf->Seek($pos - 10, 0) or last; } # seek to start of first MIE group return 0 unless defined $pos and $raf->Seek($pos, 0); # update DataPos and DirLen for ProcessTrailers() $$dirInfo{DataPos} = $pos; $$dirInfo{DirLen} = $end - $pos; if ($outfile and $$et{DEL_GROUP}{MIE}) { # delete the trailer $et->VPrint(0," Deleting MIE trailer\n"); ++$$et{CHANGED}; return 1; } elsif ($et->Options('Verbose') or $$et{HTML_DUMP}) { $et->DumpTrailer($dirInfo); } } # # loop through all documents in MIE file # for (;;) { # look for "0MIE" group element my $num = $raf->Read($buff, 8); if ($num == 8) { # verify file identifier if ($buff =~ /^~(\x10|\x18)\x04(.)0MIE/s) { SetByteOrder($1 eq "\x10" ? 'MM' : 'II'); my $len = ord($2); # skip extended DataLength if it exists if ($len > 252 and not $raf->Seek(1 << (256 - $len), 1)) { $msg = 'Seek error'; last; } } else { return 0 unless $numDocs; # not a MIE file if ($buff =~ /^~/) { $msg = 'Non-standard file-level MIE element'; } else { $msg = 'Invalid MIE file-level data'; } } } elsif ($numDocs) { last unless $num; # OK, all done with file $msg = 'Truncated MIE element header'; } else { return 0 if $num or not $outfile; # we have the ability to create a MIE file from scratch $buff = ''; # start from nothing # set byte order according to preferences $et->SetPreferredByteOrder(); $isCreating = 1; } if ($msg) { last if $$dirInfo{Trailer}; # allow other trailers after MIE if ($outfile) { $et->Error($msg); } else { $et->Warn($msg); } last; } # this is a new MIE document -- increment document count unless ($numDocs) { # this is a valid MIE file (unless a trailer on another file) $et->SetFileType(); $$et{NO_LIST} = 1; # handle lists ourself $$et{MIE_COUNT} = { }; undef $hasZlib; } ++$numDocs; # process the MIE groups recursively, beginning with the main MIE group my $tagTablePtr = GetTagTable('Image::ExifTool::MIE::Main'); my %subdirInfo = ( DirName => 'MIE', RAF => $raf, OutFile => $outfile, # don't define Parent so WriteMIEGroup() writes extended terminator ); if ($outfile) { # generate lookup for MIE format codes if not done already unless (%mieCode) { foreach (keys %mieFormat) { $mieCode{$mieFormat{$_}} = $_; } } # update %mieMap with user-defined MIE groups UpdateMieMap() unless $doneMieMap; # initialize write directories, with MIE tags taking priority # (note that this may re-initialize directories when writing trailer # to another type of image, but this is OK because we are done writing # the other format by the time we start writing the trailer) $et->InitWriteDirs(\%mieMap, 'MIE'); $subdirInfo{ToWrite} = '~' . MIEGroupFormat(1) . "\x04\xfe0MIE\0\0\0\0"; $msg = WriteMIEGroup($et, \%subdirInfo, $tagTablePtr); if ($msg) { $et->Error($msg); $err = 1; last; } elsif (defined $msg and $isCreating) { last; } } else { $msg = ProcessMIEGroup($et, \%subdirInfo, $tagTablePtr); if ($msg) { $et->Warn($msg); last; } } } delete $$et{NO_LIST}; delete $$et{MIE_COUNT}; delete $$et{SET_GROUP1}; return $err ? -1 : 1; } 1; # end __END__ =head1 NAME Image::ExifTool::MIE - Read/write MIE meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to read and write information in MIE files. =head1 WHAT IS MIE? MIE stands for "Meta Information Encapsulation". The MIE format is an extensible, dedicated meta information format which supports storage of binary as well as textual meta information. MIE can be used to encapsulate meta information from many sources and bundle it together with any type of file. =head2 Features Below is very subjective score card comparing the features of a number of common file and meta information formats, and comparing them to MIE. The following features are rated for each format with a score of 0 to 10: 1) Extensible (can incorporate user-defined information). 2) Meaningful tag ID's (hint to meaning of unknown information). 3) Sequential read/write ability (streamable). 4) Hierarchical information structure. 5) Easy to implement reader/writer/editor. 6) Order of information well defined. 7) Large data lengths supported: >64kB (+5) and >4GB (+5). 8) Localized text strings. 9) Multiple documents in a single file. 10) Compact format doesn't squander disk space or bandwidth. 11) Compressed meta information supported. 12) Relocatable data elements (ie. no fixed offsets). 13) Binary meta information (+7) with variable byte order (+3). 14) Mandatory tags not required (an unnecessary complication). 15) Append information to end of file without editing. Feature number Total Format 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Score ------ --------------------------------------------- ----- MIE 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 150 PDF 10 10 0 10 0 0 10 0 10 10 10 0 7 10 10 97 PNG 10 10 10 0 8 0 5 10 0 10 10 10 0 10 0 93 XMP 10 10 10 10 2 0 10 10 10 0 0 10 0 10 0 92 AIFF 0 5 10 10 10 0 5 0 0 10 0 10 7 10 0 77 RIFF 0 5 10 10 10 0 5 0 0 10 0 10 7 10 0 77 JPEG 10 0 10 0 10 0 0 0 0 10 0 10 7 10 0 67 EPS 10 10 10 0 0 0 10 0 10 0 0 5 0 10 0 65 CIFF 0 0 0 10 10 0 5 0 0 10 0 10 10 10 0 65 TIFF 0 0 0 10 5 10 5 0 10 10 0 0 10 0 0 60 EXIF 0 0 0 10 5 10 0 0 0 10 0 0 10 0 0 45 IPTC 0 0 10 0 8 0 0 0 0 10 0 10 7 0 0 45 By design, MIE ranks highest by a significant margin. Other formats with reasonable scores are PDF, PNG and XMP, but each has significant weak points. What may be surprising is that TIFF, EXIF and IPTC rank so low. As well as scoring high in all these features, the MIE format has the unique ability to encapsulate any other type of file, and provides a non-invasive method of adding meta information to a file. The meta information is logically separated from the original file data, which is extremely important because meta information is routinely lost when files are edited. Also, the MIE format supports multiple files by simple concatenation, enabling all kinds of wonderful features such as linear databases, edit histories or non-intrusive file updates. This ability can also be leveraged to allow MIE-format trailers to be added to some other file types. =head1 MIE 1.1 FORMAT SPECIFICATION (2007-01-21) =head2 File Structure A MIE file consists of a series of MIE elements. A MIE element may contain either data or a group of MIE elements, providing a hierarchical format for storing data. Each MIE element is identified by a human-readable tag name, and may store data from zero to 2^64-1 bytes in length. =head2 File Signature The first element in the MIE file must be an uncompressed MIE group element with a tag name of "0MIE". This restriction allows the first 8 bytes of a MIE file to be used to identify a MIE format file. The following table lists the two possible initial byte sequences for a MIE-format file (the first for big-endian, and the second for little-endian byte ordering): Byte Number: 0 1 2 3 4 5 6 7 C Characters: ~ \x10 \x04 ? 0 M I E or ~ \x18 \x04 ? 0 M I E Hexadecimal: 7e 10 04 ? 30 4d 49 45 or 7e 18 04 ? 30 4d 49 45 Decimal: 126 16 4 ? 48 77 73 69 or 126 24 4 ? 48 77 73 69 Note that byte 1 may have one of the two possible values (0x10 or 0x18), and byte 3 may have any value (0x00 to 0xff). =head2 Element Structure 1 byte SyncByte = 0x7e (decimal 126, character '~') 1 byte FormatCode (see below) 1 byte TagLength (T) 1 byte DataLength (gives D if DataLength < 253) T bytes TagName (T given by TagLength) 2 bytes DataLength2 [exists only if DataLength == 255 (0xff)] 4 bytes DataLength4 [exists only if DataLength == 254 (0xfe)] 8 bytes DataLength8 [exists only if DataLength == 253 (0xfd)] D bytes DataBlock (D given by DataLength) The minimum element length is 4 bytes (for a group terminator). The maximum DataBlock size is 2^64-1 bytes. TagLength and DataLength are unsigned integers, and the byte ordering for multi-byte DataLength fields is specified by the containing MIE group element. The SyncByte is byte aligned, so no padding is added to align on an N-byte boundary. =head3 FormatCode The format code is a bitmask that defines the format of the data: 7654 3210 ++++ ---- FormatType ---- +--- TypeModifier ---- -+-- Compressed ---- --++ FormatSize =over 4 =item FormatType (bitmask 0xf0): 0x00 - other (or unknown) data 0x10 - MIE group 0x20 - text string 0x30 - list of null-separated text strings 0x40 - integer 0x50 - rational 0x60 - fixed point 0x70 - floating point 0x80 - free space =item TypeModifier (bitmask 0x08): Modifies the meaning of certain FormatTypes (0x00-0x60): 0x08 - other data sensitive to MIE group byte order 0x18 - MIE group with little-endian byte ordering 0x28 - UTF encoded text string 0x38 - UTF encoded text string list 0x48 - signed integer 0x58 - signed rational (denominator is always unsigned) 0x68 - signed fixed-point =item Compressed (bitmask 0x04): If this bit is set, the data block is compressed using Zlib deflate. An entire MIE group may be compressed, with the exception of file-level groups. =item FormatSize (bitmask 0x03): Gives the byte size of each data element: 0x00 - 8 bits (1 byte) 0x01 - 16 bits (2 bytes) 0x02 - 32 bits (4 bytes) 0x03 - 64 bits (8 bytes) The number of bytes in a single value for this format is given by 2**FormatSize (or 1 << FormatSize). The number of values is the data length divided by this number of bytes. It is an error if the data length is not an even multiple of the format size in bytes. =back The following is a list of all currently defined MIE FormatCode values for uncompressed data (add 0x04 to each value for compressed data): 0x00 - other data (insensitive to MIE group byte order) (1) 0x01 - other 16-bit data (may be byte swapped) 0x02 - other 32-bit data (may be byte swapped) 0x03 - other 64-bit data (may be byte swapped) 0x08 - other data (sensitive to MIE group byte order) (1) 0x10 - MIE group with big-endian values (1) 0x18 - MIE group with little-endian values (1) 0x20 - ASCII (ISO 8859-1) string (2,3) 0x28 - UTF-8 string (2,3,4) 0x29 - UTF-16 string (2,3,4) 0x2a - UTF-32 string (2,3,4) 0x30 - ASCII (ISO 8859-1) string list (3,5) 0x38 - UTF-8 string list (3,4,5) 0x39 - UTF-16 string list (3,4,5) 0x3a - UTF-32 string list (3,4,5) 0x40 - unsigned 8-bit integer 0x41 - unsigned 16-bit integer 0x42 - unsigned 32-bit integer 0x43 - unsigned 64-bit integer (6) 0x48 - signed 8-bit integer 0x49 - signed 16-bit integer 0x4a - signed 32-bit integer 0x4b - signed 64-bit integer (6) 0x52 - unsigned 32-bit rational (16-bit numerator then denominator) (7) 0x53 - unsigned 64-bit rational (32-bit numerator then denominator) (7) 0x5a - signed 32-bit rational (denominator is unsigned) (7) 0x5b - signed 64-bit rational (denominator is unsigned) (7) 0x61 - unsigned 16-bit fixed-point (high 8 bits is integer part) (8) 0x62 - unsigned 32-bit fixed-point (high 16 bits is integer part) (8) 0x69 - signed 16-bit fixed-point (high 8 bits is signed integer) (8) 0x6a - signed 32-bit fixed-point (high 16 bits is signed integer) (8) 0x72 - 32-bit IEEE float (not recommended for portability reasons) 0x73 - 64-bit IEEE double (not recommended for portability reasons) (6) 0x80 - free space (value data does not contain useful information) Notes: =over 4 =item 1. The byte ordering specified by the MIE group TypeModifier applies to the MIE group element as well as all elements within the group. Data for all FormatCodes except 0x08 (other data, sensitive to byte order) may be transferred between MIE groups with different byte order by byte swapping the uncompressed data according to the specified data format. The following list illustrates the byte-swapping pattern, based on FormatSize, for all format types except rational (FormatType 0x50). FormatSize Change in Byte Sequence -------------- ----------------------------------- 0x00 (8 bits) 0 1 2 3 4 5 6 7 --> 0 1 2 3 4 5 6 7 (no change) 0x01 (16 bits) 0 1 2 3 4 5 6 7 --> 1 0 3 2 5 4 7 6 0x02 (32 bits) 0 1 2 3 4 5 6 7 --> 3 2 1 0 7 6 5 4 0x03 (64 bits) 0 1 2 3 4 5 6 7 --> 7 6 5 4 3 2 1 0 Rational values consist of two integers, so they are swapped as the next lower FormatSize. For example, a 32-bit rational (FormatSize 0x02, and FormatCode 0x52 or 0x5a) is swapped as two 16-bit values (ie. as if it had FormatSize 0x01). =item 2. The TagName of a string element may have an 6-character suffix to indicate a specific locale. (eg. "Title-en_US", or "Keywords-de_DE"). =item 3. Text strings are not normally null terminated, however they may be padded with one or more null characters to the end of the data block to allow strings to be edited within fixed-length data blocks. Newlines in the text are indicated by a single LF (0x0a) character. =item 4. UTF strings must not begin with a byte order mark (BOM) since the byte order and byte size are specified by the MIE format. If a BOM is found, it should be treated as a zero-width non-breaking space. =item 5. A list of text strings separated by null characters. These lists must not be null padded or null terminated, since this would be interpreted as additional zero-length strings. For ASCII and UTF-8 strings, the null character is a single zero (0x00) byte. For UTF-16 or UTF-32 strings, the null character is 2 or 4 zero bytes respectively. =item 6. 64-bit integers and doubles are subject to the specified byte ordering for both 32-bit words and bytes within these words. For instance, the high order byte is always the first byte if big-endian, and the eighth byte if little-endian. This means that some swapping is always necessary for these values on systems where the byte order differs from the word order (eg. some ARM systems), regardless of the endian-ness of the stored values. =item 7. Rational values are treated as two separate integers. The numerator always comes first regardless of the byte ordering. In a signed rational value, only the numerator is signed. The denominator of all rational values is unsigned (eg. a signed 64-bit rational of 0x80000000/0x80000000 evaluates to -1, not +1). =item 8. 32-bit fixed point values are converted to floating point by treating them as an integer and dividing by an appropriate value. eg) 16-bit fixed value = 16-bit integer value / 256.0 32-bit fixed value = 32-bit integer value / 65536.0 =back =head3 TagLength Gives the length of the TagName string. Any value between 0 and 255 is valid, but the TagLength of 0 is valid only for the MIE group terminator. =head3 DataLength DataLength is an unsigned byte that gives the number of bytes in the data block. A value between 0 and 252 gives the data length directly, and numbers from 253 to 255 are reserved for extended DataLength codes. Codes of 255, 254 and 253 indicate that the element contains an additional 2, 4 or 8 byte unsigned integer representing the data length. 0-252 - length of data block 255 (0xff) - use DataLength2 254 (0xfe) - use DataLength4 253 (0xfd) - use DataLength8 A DataLength of zero is valid for any element except a compressed MIE group. A zero DataLength for an uncompressed MIE group indicates that the group length is unknown. For other elements, a zero length indicates there is no associated data. A terminator element must have a DataLength of 0, 6 or 10, and may not use an extended DataLength. =head3 TagName The TagName string is 0 to 255 bytes long, and is composed of the ASCII characters A-Z, a-z, 0-9 and underline ('_'). Also, a dash ('-') is used to separate the language/country code in the TagName of a localized text string, and a units string (possibly containing other ASCII characters) may be appear in brackets at the end of the TagName. The TagName string is NOT null terminated. A MIE element with a tag string of zero length is reserved for the group terminator. MIE elements are sorted alphabetically by TagName within each group. Multiple elements with the same TagName are allowed, even within the same group. TagNames should be meaningful. Case is significant. Words should be lowercase with an uppercase first character, and acronyms should be all upper case. The underline ("_") is provided to allow separation of two acronyms or two numbers, but it shouldn't be used unless necessary. No separation is necessary between an acronym and a word (eg. "ISOSetting"). All TagNames should start with an uppercase letter. An exception to this rule allows tags to begin with a digit (0-9) if they must come before other tags in the sort order, or a lowercase letter (a-z) if they must come after. For instance, the '0Type' element begins with a digit so it comes before, and the 'data' element begins with a lowercase letter so that it comes after meta information tags in the main "0MIE" group. Tag names for localized text strings have an 6-character suffix with the following format: The first character is a dash ('-'), followed by a 2-character lower case ISO 639-1 language code, then an underline ('_'), and ending with a 2-character upper case ISO 3166-1 alpha 2 country code. (eg. "-en_US", "-en_GB", "-de_DE" or "-fr_FR". Note that "GB", and not "UK" is the code for Great Britain, although "UK" should be recognized for compatibility reasons.) The suffix is included when sorting the tags alphabetically, so the default locale (with no tag-name suffix) always comes first. If the country is unknown or not applicable, a country code of "XX" should be used. Tags with numerical values may allow units of measurement to be specified. The units string is stored in brackets at the end of the tag name, and is composed of zero or more ASCII characters in the range 0x21 to 0x7d, excluding the bracket characters 0x28 and 0x29. (eg. "Resolution(/cm)" or "SpecificHeat(J/kg.K)".) See L<Image::ExifTool::MIEUnits> for details. Unit strings are not localized, and may not be used in combination with localized text strings. Sets of tags which would require a common prefix should be added in a separate MIE group instead of adding the prefix to all tag names. For example, instead of these TagName's: ExternalFlashType ExternalFlashSerialNumber ExternalFlashFired one would instead designate a separate "ExternalFlash" MIE group to contain the following elements: Type SerialNumber Fired =head3 DataLength2/4/8 These extended DataLength fields exist only if DataLength is 255, 254 or 253, and are respectively 2, 4 or 8 byte unsigned integers giving the data block length. One of these values must be used if the data block is larger than 252 bytes, but they may be used if desired for smaller blocks too (although this may add a few unnecessary bytes to the MIE element). =head3 DataBlock The data value for the MIE element. The format of the data is given by the FormatCode. For MIE group elements, the data includes all contained elements and the group terminator. =head2 MIE groups All MIE data elements must be contained within a group. A group begins with a MIE group element, and ends with a group terminator. Groups may be nested in a hierarchy to arbitrary depth. A MIE group element is identified by a format code of 0x10 (big endian byte ordering) or 0x18 (little endian). The group terminator is distinguished by a zero TagLength (it is the only element allowed to have a zero TagLength), and has a FormatCode of 0x00. The MIE group element is permitted to have a zero DataLength only if the data is uncompressed. This special value indicates that the group length is unknown (otherwise the minimum value for DataLength is 4, corresponding the the minimum group size which includes a terminator of at least 4 bytes). If DataLength is zero, all elements in the group must be parsed until the group terminator is found. If non-zero, DataLength includes the length of all elements contained within the group, including the group terminator. Use of a non-zero DataLength is encouraged because it allows readers quickly skip over entire MIE groups. For compressed groups DataLength must be non-zero, and is the length of the compressed group data (which includes the compressed group terminator). =head3 Group Terminator The group terminator has a FormatCode and TagLength of zero. The terminator DataLength must be 0, 6 or 10 bytes, and extended DataLength codes may not be used. With a zero DataLength, the byte sequence for a terminator is "7e 00 00 00" (hex). With a DataLength of 6 or 10 bytes, the terminator data block contains information about the length and byte ordering of the preceding group. This additional information is recommended for file-level groups, and is used in multi-document MIE files and MIE trailers to allow the file to be scanned backwards from the end. (This may also allow some documents to be recovered if part of the file is corrupted.) The structure of this optional terminator data block is as follows: 4 or 8 bytes GroupLength (unsigned integer) 1 byte ByteOrder (0x10 or 0x18, same as MIE group) 1 byte GroupLengthSize (0x04 or 0x08) The ByteOrder and GroupLengthSize values give the byte ordering and size of the GroupLength integer. The GroupLength value is the total length of the entire MIE group ending with this terminator, including the opening MIE group element and the terminator itself. =head3 File-level MIE groups File-level MIE groups may NOT be compressed. All elements in a MIE file are contained within a special group with a TagName of "0MIE". The purpose of the "OMIE" group is to provide a unique signature at the start of the file, and to encapsulate information allowing files to be easily combined. The "0MIE" group must be terminated like any other group, but it is recommended that the terminator of a file-level group include the optional data block (defined above) to provide information about the group length and byte order. It is valid to have more than one "0MIE" group at the file level, allowing multiple documents in a single MIE file. Furthermore, the MIE structure enables multi-document files to be generated by simply concatenating two or more MIE files. =head2 Scanning Backwards through a MIE File The steps below give an algorithm to quickly locate the last document in a MIE file: =over 4 =item 1. Read the last 10 bytes of the file. (Note that a valid MIE file may be as short as 12 bytes long, but a file this length contains only an an empty MIE group.) =item 2. If the last byte of the file is zero, then it is not possible to scan backward through the file, so the file must be scanned from the beginning. Otherwise, proceed to the next step. =item 3. If the last byte is 4 or 8, the terminator contains information about the byte ordering and length of the group. Otherwise, stop here because this isn't a valid MIE file. =item 4. The next-to-last byte must be either 0x10 indicating big-endian byte ordering or 0x18 for little-endian ordering, otherwise this isn't a valid MIE file. =item 5. The value of the preceding 4 or 8 bytes gives the length of the complete file-level MIE group (GroupLength). This length includes both the leading MIE group element and the terminator element itself. The value is an unsigned integer with a byte length given in step 3), and a byte order from step 4). From the current file position (at the end of the data read in step 1), seek backward by this number of bytes to find the start of the MIE group element for this document. =back This algorithm may be repeated again beginning at this point in the file to locate the next-to-last document, etc. The table below lists all 5 valid patterns for the last 14 bytes of a file-level MIE group, with all numbers in hex. The comments indicate the length and byte ordering of GroupLength (xx) if available: ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 7e 00 00 00 - (no GroupLength) ?? ?? ?? ?? 7e 00 00 06 xx xx xx xx 10 04 - 4 bytes, big endian ?? ?? ?? ?? 7e 00 00 06 xx xx xx xx 18 04 - 4 bytes, little endian 7e 00 00 0a xx xx xx xx xx xx xx xx 10 08 - 8 bytes, big endian 7e 00 00 0a xx xx xx xx xx xx xx xx 18 08 - 8 bytes, little endian =head2 Trailer Signature The MIE format may be used for trailer information appended to other types of files. When this is done, a signature must appear at the end of the main MIE group to uniquely identify the MIE format trailer. To achieve this, a "zmie" trailer signature is written as the last element in the main "0MIE" group. This element has a FormatCode of 0, a TagLength of 4, a DataLength of 0, and a TagName of "zmie". With this signature, the hex byte sequence "7e 00 04 00 7a 6d 69 65" appears immediately before the final group terminator, and the last 22 bytes of the trailer correspond to one of the following 4 patterns (where the trailer length is given by "xx", as above): ?? ?? ?? ?? 7e 00 04 00 7a 6d 69 65 7e 00 00 06 xx xx xx xx 10 04 ?? ?? ?? ?? 7e 00 04 00 7a 6d 69 65 7e 00 00 06 xx xx xx xx 18 04 7e 00 04 00 7a 6d 69 65 7e 00 00 0a xx xx xx xx xx xx xx xx 10 08 7e 00 04 00 7a 6d 69 65 7e 00 00 0a xx xx xx xx xx xx xx xx 18 08 Note that the zero-DataLength terminator may not be used here because the trailer length must be known for seeking backwards from the end of the file. Multiple trailers may be appended to the same file using this technique. =head2 MIE Data Values MIE data values for a given tag are usually not restricted to a specific FormatCode. Any value may be represented in any appropriate format, including numbers represented in string (ASCII or UTF) form. It is preferred that closely related values with the same format are written to a single tag instead of using multiple tags. This improves localization of like values and decreases MIE element overhead. For instance, instead of separate ImageWidth and ImageHeight tags, a single ImageSize tag is defined. Tags which may take on a discrete set of values should have meaningful values if possible. This improves the extensibility of the format and allows a more reasonable interpretation of unrecognized values. =head3 Numerical Representation Integer and floating point numbers may be represented in binary or string form. In string form, integers are a series of digits with an optional leading sign (eg. "[+|-]DDDDDD"), and multiple values are separated by a single space character (eg. "23 128 -32"). Floating point numbers are similar but may also contain a decimal point and/or a signed exponent with a leading 'e' character (eg. "[+|-]DD[.DDDDDD][e(+|-)EEE]"). The string "inf" is used to represent infinity. One advantage of numerical strings is that they can have an arbitrarily high precision because the possible number of significant digits is virtually unlimited. Note that numerical values may have associated units of measurement which are specified in the L</TagName> string. =head3 Date/Time Format All MIE dates are strings in the form "YYYY:mm:dd HH:MM:SS.ss+HH:MM". The fractional seconds (".ss") are optional, and if included may contain any number of significant digits (unlike all other fields which are a fixed number of digits and must be padded with leading zeros if necessary). The timezone ("+HH:MM" or "-HH:MM") is recommended but not required. If not given, the local system timezone is assumed. =head2 MIME Type The basic MIME type for a MIE file is "application/x-mie", however the specific MIME type depends on the type of subfile, and is obtained by adding "x-mie-" to the MIME type of the subfile. For example, with a subfile of type "image/jpeg", the MIE file MIME type is "image/x-mie-jpeg". But note that the "x-" is not duplicated if the subfile MIME type already starts with "x-". So a subfile with MIME type "image/x-raw" is contained within a MIE file of type "image/x-mie-raw", not "image/x-mie-x-raw". In the case of multiple documents in a MIE file, the MIME type is taken from the first document. Regardless of the subfile type, all MIE-format files should have a filename extension of ".MIE". =head2 Levels of Support Basic MIE reader/writer applications may choose not to provide support for some advanced features of the MIE format. Features which may not be supported by all software are: =over 4 =item Compression Software not supporting compression must ignore compressed elements and groups, but should be able to process the remaining information. =item Large data lengths Some software may limit the maximum size of a MIE group or element. Historically, a limit of 2GB may be imposed by some systems. However, 8-byte data lengths should be supported by all applications provided the value doesn't exceed the system limit. (eg. For systems with a 2GB limit, 8-byte data lengths should be supported if the upper 17 bits are all zero.) If a data length above the system limit is encountered, it may be necessary for the application to stop processing if it can not seek to the next element in the file. =back =head1 EXAMPLES This section gives examples for working with MIE information using ExifTool. =head2 Encapsulating Information with Data in a MIE File The following command encapsulates any file recognized by ExifTool inside a MIE file, and initializes MIE tags from information within the file: exiftool -o new.mie -tagsfromfile FILE '-mie:all<all' \ '-subfilename<filename' '-subfiletype<filetype' \ '-subfilemimetype<mimetype' '-subfiledata<=FILE' where C<FILE> is the name of the file. For unrecognized files, this command may be used: exiftool -o new.mie -subfilename=FILE -subfiletype=TYPE \ -subfilemimetype=MIME '-subfiledata<=FILE' where C<TYPE> and C<MIME> represent the source file type and MIME type respectively. =head2 Adding a MIE Trailer to a File The MIE format may also be used to store information in a trailer appended to another type of file. Beware that trailers may not be compatible with all file formats, but JPEG and TIFF are two formats where additional trailer information doesn't create any problems for normal parsing of the file. Also note that this technique has the disadvantage that trailer information is commonly lost if the file is subsequently edited by other software. Creating a MIE trailer with ExifTool is a two-step process since ExifTool can't currently be used to add a MIE trailer directly. The example below illustrates the steps for adding a MIE trailer with a small preview image (C<small.jpg>) to a destination JPEG image (C<dst.jpg>). Step 1) Create a MIE file with a TrailerSignature containing the desired information: exiftool -o new.mie -trailersignature=1 -tagsfromfile small.jpg \ '-previewimagetype<filetype' '-previewimagesize<imagesize' \ '-previewimagename<filename' '-previewimage<=small.jpg' Step 2) Append the MIE information to another file. In Unix, this can be done with the 'cat' command: cat new.mie >> dst.jpg Once added, ExifTool may be used to edit or delete a MIE trailer in a JPEG or TIFF image. =head2 Multiple MIE Documents in a Single File The MIE specification allows multiple MIE documents (or trailers) to exist in a single file. A file like this may be created by simply concatenating MIE documents. ExifTool may be used to access information in a specific document by adding a copy number to the MIE group name. For example: # write the Author tag in the second MIE document exiftool -mie2:author=phil test.mie # delete the first MIE document from a file exiftool -mie1:all= test.mie =head2 Units of Measurement Some MIE tags allow values to be specified in different units of measurement. In the MIE file format these units are combined with the tag name, but when using ExifTool they are specified in brackets after the value: exiftool -mie:gpsaltitude='7500(ft)' test.mie If no units are provided, the default units are written. =head2 Localized Text Localized text values are accessed by adding a language/country code to the tag name. For example: exiftool -comment-en_us='this is a comment' test.mie =head1 REVISIONS 2010-04-05 - Fixed "Format Size" Note 7 to give the correct number of bits in the example rational value 2007-01-21 - Specified LF character (0x0a) for text newline sequence 2007-01-19 - Specified ISO 8859-1 character set for extended ASCII codes 2007-01-01 - Improved wording of Step 5 for scanning backwards in MIE file 2006-12-30 - Added EXAMPLES section and note about UTF BOM 2006-12-20 - MIE 1.1: Changed meaning of TypeModifier bit (0x08) for unknown data (FormatType 0x00), and documented byte swapping 2006-12-14 - MIE 1.0: Added Data Values and Numerical Representations sections, and added ability to specify units in tag names 2006-11-09 - Added Levels of Support section 2006-11-03 - Added Trailer Signature 2005-11-18 - Original specification created =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The MIE format itself is also copyright Phil Harvey, and is covered by the same free-use license. =head1 REFERENCES =over 4 =item L<http://owl.phy.queensu.ca/~phil/exiftool/MIE1.1-20070121.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/MIE Tags>, L<Image::ExifTool::MIEUnits>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/MIEUnits.pod������������������������������������������������000644 �000765 �000024 �00000033265 12642461317 022064� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ =head1 NAME Image::ExifTool::MIEUnits - MIE units documentation =head1 DESCRIPTION The MIE format allows units of measurement to be specified in brackets at the end of a MIE tag name (eg. "Volume(m3)"). This document describes the standard MIE units abbreviations. =head1 SYNTAX The units string may contain any ASCII characters in the range 0x21 ('!') to 0x7d ('}'), excepting the bracket characters (0x28 and 0x29). An empty string is allowed, and indicates a dimensionless value. L<Standard units|/STANDARD UNITS> should be used where possible. In the standard units, an underline ('_') is used to indicate a subscript, and multiple words may be separated with a hyphen ('-'). Exponents should be positive, and require no separator (eg. "m2" for square meters). L<Prefixes|/PREFIXES> may be added to the standard units (eg. "cm") except when the resulting name conflicts with another standard unit. Multiplication is indicated by '.', and division by '/'. Reciprocal units (ie. the multiplicative inverse) are obtained through division rather than the use of negative exponents (eg. "/in", not "in-1"). In MIE units, multiplication has precedence over division, so everything to the right of a '/' is in the denominator. (See L</EXAMPLES> for a few examples.) Below is a table summarizing the special characters used in MIE units strings. . multiplication / division (used for negative exponents) - word separator _ subscript {} annotation [] used to avoid name conflicts if necessary 0-9 exponentiation =head1 STANDARD UNITS dimensionless [G] Newtonian constant of gravitation (unclassified) [g] standard acceleration of free fall (acceleration) [h] Planck constant (action) [k] Boltzmann constant (unclassified) {cfu} colony forming units (number) {rbc} red blood cell count (number) {tbl} tablets (number) {tot} particles total count (number) % percent (fraction) 10^N the number ten for arbitrary powers (number) A Ampere (electric current) a year (time) a_g mean Gregorian year (time) a_j mean Julian year (time) a_t tropical year (time) acr acre, U.S. (area) acr_br acre, British (area) Ao Angstrom (length) APL-U APL unit (biologic activity of anticardiolipin IgA) ar are (area) arb-U arbitrary unit (arbitrary) arcmin minute of arc (plane angle) arcsec second of arc (plane angle) atm standard atmosphere (pressure) att technical atmosphere (pressure) AU astronomic unit (length) b barn (action area) B bel (level) B-kW bel kilowatt (power level) B-mV bel millivolt (electric potential level) B-SPL bel sound pressure (pressure level) B-uV bel microvolt (electric potential level) B-V bel volt (electric potential level) B-W bel watt (power level) bar bar (pressure) bbl barrel (fluid volume) Bd baud (signal transmission rate) bdsk-U Bodansky unit (biologic activity of phosphatase) beth-U Bethesda unit (biologic activity of factor VIII inhibitor) bf board foot (volume) Bi Biot (electric current) bit bit (amount of information) Bq Becquerel (radioactivity) Btu British thermal unit (energy) Btu_39 British thermal unit at 39 degF (energy) Btu_59 British thermal unit at 59 degF (energy) Btu_60 British thermal unit at 60 degF (energy) Btu_IT international table British thermal unit (energy) Btu_m mean British thermal unit (energy) Btu_th thermochemical British thermal unit (energy) bu bushel, U.S. (dry volume) bu_br bushel, British (volume) By byte (amount of information) C Coulomb (electric charge) c velocity of light (velocity) cal calorie (energy) Cal nutrition label Calories (energy) cal_15 calorie at 15 degC (energy) cal_20 calorie at 20 degC (energy) cal_IT international table calorie (energy) cal_m mean calorie (energy) cal_th thermochemical calorie (energy) car_Au carat of gold alloys (mass fraction) car_m metric carat (mass) cd candela (luminous intensity) Cel degree Celsius (temperature) Ch Charriere (gauge of catheters) ch Gunter's chain, U.S. (length) ch_br Gunter's chain, British (length) Ci Curie (radioactivity) cicero cicero (length) circ circle (plane angle) cml circular mil, international (area) cr cord, international (volume) crd_us cord, U.S. (fluid volume) cup_us cup (volume) d day (time) deg degree (plane angle) deg{mag} degree from magnetic north (plane angle) degF degree Fahrenheit (temperature) didot didot (length) diop diopter (refraction of a lens) dpt dry pint, U.S. (dry volume) dqt dry quart, U.S. (dry volume) dr dram (mass) dr_ap dram, apothecary (mass) drp drop (volume) dye-U Dye unit (biologic activity of amylase) dyn dyne (force) e elementary charge (electric charge) eps_0 permittivity of vacuum (electric permittivity) eq equivalents (amount of substance) erg erg (energy) eV electronvolt (energy) F Farad (electric capacitance) fdr fluid dram, U.S. (fluid volume) fdr_br fluid dram, British (volume) foz fluid ounce, U.S. (fluid volume) foz_br fluid ounce, British (volume) ft foot, international (length) ft_br foot, British (length) ft_us foot, U.S. (length) fth fathom, international (length) fth_br fathom, British (length) fth_us fathom, U.S. (length) fur furlong, U.S. (length) G Gauss (magnetic flux density) g gram (mass) g.m/{H-B} gram meter per heartbeat (prop. to ventricular stroke work) g% gram percent (mass fraction) Gal Gal (acceleration) gal gallon, U.S. (fluid volume) gal_br gallon, British (volume) gal_wi historical winchester gallon (dry volume) Gb Gilbert (magnetic tension) gf gram-force (force) gil gill, U.S. (fluid volume) gil_br gill, British (volume) gon gon (plane angle) GPL-U GPL unit (biologic activity of anticardiolipin IgG) gr grain (mass) Gy Gray (energy dose) H Henry (inductance) h hour (time) hd hand, international (height of horses) hnsf-U Hounsfield unit (x-ray attenuation) HP horsepower (power) hp_C homeopathic potency of centesimal series (homeopathic potency) hp_X homeopathic potency of decimal series (homeopathic potency) HPF high power field (view area in microscope) Hz Herz (frequency) in inch, international (length) in_br inch, British (length) in_us inch, U.S. (length) in-H2O inch of water column (pressure) in-Hg inch of mercury column (pressure) iU international unit (arbitrary) J Joule (energy) K Kelvin (temperature) ka-U King-Armstrong unit (biologic activity of phosphatase) kat katal (catalytic activity) kg{wet-tis} kilogram of wet tissue (mass) kn knot, international (velocity) kn_br knot, British (velocity) knk-U Kunkel unit (arbitrary biologic activity) Ky Kayser (lineic number) l liter (volume) L liter (volume) lb pound (mass) lb_ap pound, apothecary (mass) lb_tr pound, troy (mass) lbf pound force (force) lcwt long hunderdweight (mass) ligne ligne (length) lk link for Gunter's chain, U.S. (length) lk_br link for Gunter's chain, British (length) lm lumen (luminous flux) Lmb Lambert (brightness) lne line (length) LPF low power field (view area in microscope) lton long ton (mass) lx lux (illuminance) ly light-year (length) m meter (length) m_e electron mass (mass) m_p proton mass (mass) m-H2O meter of water column (pressure) m-Hg meter of mercury column (pressure) mclg-U Mac Lagan unit (arbitrary biologic activity) mesh mesh, international (lineic number) MET metabolic equivalent (metabolic cost of physical activity) mg{creat} milligram of creatinine (mass) mho mho (electric conductance) mi mile, international (statute mile) (length) mi_br mile, British (length) mi_us mile, U.S. (length) mil mil, international (length) mil_us mil, U.S. (length) min minute (time) min_br minim, British (volume) min_us minim, U.S. (fluid volume) mo month (time) mo_g mean Gregorian month (time) mo_j mean Julian month (time) mo_s synodal month (time) mol mole (amount of substance) MPL-U MPL unit (biologic activity of anticardiolipin IgM) mu_0 permeability of vacuum (magnetic permeability) Mx Maxwell (flux of magnetic induction) N Newton (force) nmi nautical mile, international (length) nmi_br nautical mile, British (length) Np neper (level) Oe Oersted (magnetic field intensity) Ohm Ohm (electric resistance) osm osmole of dissolved particles (amount of substance) oz ounce (mass) oz_ap ounce, apothecary (mass) oz_tr ounce, troy (mass) P Poise (dynamic viscosity) Pa Pascal (pressure) pc parsec (length) pc_br pace (length) pca pica (length) pca_pr Printer's pica (length) pH pH (acidity) ph phot (illuminance) pi the number pi (number) pied pied (length) pk peck, U.S. (dry volume) pk_br peck, British (volume) pnt point (length) pnt_pr Printer's point (length) pouce pouce (length) ppb parts per billion (fraction) ppm parts per million (fraction) ppth parts per thousand (fraction) pptr parts per trillion (fraction) PRU peripheral vascular resistance unit (fluid resistance) psi pound per square inch (pressure) pt pint, U.S. (fluid volume) pt_br pint, British (volume) pwt_tr pennyweight (mass) qt quart, U.S. (fluid volume) qt_br quart, British (volume) R Roentgen (ion dose) rad radian (plane angle) RAD radiation absorbed dose (energy dose) rch Ramden's chain, U.S. (length) rd rod, U.S. (length) rd_br rod, British (length) REM radiation equivalent man (dose equivalent) rlk_us link for Ramden's chain (length) s second (time) S Siemens (electric conductance) sb stilb (lum. intensity density) sc_ap scruple, apothecary (mass) sct section (area) scwt short hundredweight (mass) smgy-U Somogyi unit (biologic activity of amylase) sph spere (solid angle) sr streadian (solid angle) st stere (volume) St Stokes (kinematic viscosity) ston short ton (mass) stone stone (mass) Sv Sievert (dose equivalent) Sv-U Svedberg unit (sedimentation coefficient) T Tesla (magnetic flux density) t tonne (mass) tb-U tuberculin unit (biologic activity of tuberculin) tbs tablespoon, U.S. (volume) todd-U Todd unit (biologic activity antistreptolysin O) tsp teaspoon, U.S. (volume) twp township (area) u unified atomic mass unit (mass) U Unit (catalytic activity) USP-U U.S. Pharmacopeia unit (arbitrary) V Volt (electric potential) W Watt (power) Wb Weber (magnetic flux) wk week (time) yd yard, international (length) yd_br yard, British (length) yd_us yard, U.S. (length) =head1 PREFIXES Standard SI prefixes: y yocto (10^-24) z zepto (10^-21) a atto (10^-18) f femto (10^-15) p pico (10^-12) n nano (10^-9) u micro (10^-6) m milli (10^-3) c centi (10^-2) d deci (10^-1) da deka (10) h hecto (10^2) k kilo (10^3) G giga (10^9) M mega (10^6) T tera (10^12) P peta (10^15) E exa (10^18) Z zetta (10^21) Y yotta (10^24) Binary power prefixes: Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti tebi (2^40) =head1 EXAMPLES A few examples of combined units strings: /cm3 per cubic centimeter in2 square inches kg.m/s2 Newtons (N) m3/kg.s2 units of [G] 10^100 googols =head1 HISTORY 2006-12-14 - PH Created =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://aurora.regenstrief.org/UCUM/> =back =head1 SEE ALSO L<Image::ExifTool::MIE(3pm)|Image::ExifTool::MIE>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/MIFF.pm�����������������������������������������������������000644 �000765 �000024 �00000022060 12642461317 020771� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MIFF.pm # # Description: Read Magick Image File Format meta information # # Revisions: 06/10/2005 - P. Harvey Created # # References: 1) http://www.imagemagick.org/script/miff.php # 2) http://www.cs.uni.edu/Help/ImageMagick/www/miff.html #------------------------------------------------------------------------------ package Image::ExifTool::MIFF; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.07'; # MIFF chunks %Image::ExifTool::MIFF::Main = ( GROUPS => { 2 => 'Image' }, NOTES => q{ The MIFF (Magick Image File Format) format allows aribrary tag names to be used. Only the standard tag names are listed below, however ExifTool will decode any tags found in the image. }, 'background-color' => 'BackgroundColor', 'blue-primary' => 'BluePrimary', 'border-color' => 'BorderColor', 'matt-color' => 'MattColor', class => 'Class', colors => 'Colors', colorspace => 'ColorSpace', columns => 'ImageWidth', compression => 'Compression', delay => 'Delay', depth => 'Depth', dispose => 'Dispose', gamma => 'Gamma', 'green-primary' => 'GreenPrimary', id => 'ID', iterations => 'Iterations', label => 'Label', matte => 'Matte', montage => 'Montage', packets => 'Packets', page => 'Page', # profile tags. Note the SubDirectory is not used by ProcessMIFF(), # but is inserted for documentation purposes only 'profile-APP1' => [ # [this list is just for the sake of the documentation] { Name => 'APP1_Profile', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', }, }, { Name => 'APP1_Profile', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main', }, }, ], 'profile-exif' => { # haven't seen this, but it would make sense - PH Name => 'EXIF_Profile', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', }, }, 'profile-icc' => { Name => 'ICC_Profile', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main', }, }, 'profile-iptc' => { Name => 'IPTC_Profile', SubDirectory => { TagTable => 'Image::ExifTool::Photoshop::Main', }, }, 'profile-xmp' => { # haven't seen this, but it would make sense - PH Name => 'XMP_Profile', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main', }, }, 'red-primary' => 'RedPrimary', 'rendering-intent' => 'RenderingIntent', resolution => 'Resolution', rows => 'ImageHeight', scene => 'Scene', signature => 'Signature', units => 'Units', 'white-point' => 'WhitePoint', ); #------------------------------------------------------------------------------ # Extract meta information from a MIFF image # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid MIFF image sub ProcessMIFF($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $verbose = $$et{OPTIONS}{Verbose}; my ($hdr, $buff); # validate the MIFF file (note: MIFF files _may_ begin with other # characters, but this starting sequence is strongly suggested.) return 0 unless $raf->Read($hdr, 14) == 14; return 0 unless $hdr eq 'id=ImageMagick'; $et->SetFileType(); # set the FileType tag # set end-of-line character sequence to read to end of the TEXT # section for new-type MIFF files (text ends with Colon+Ctrl-Z) # Old MIFF files end with Colon+Linefeed, so this will likely # slurp those entire files, which will be slower, but will work # OK except that the profile information won't be decoded local $/ = ":\x1a"; my $mode = ''; my @profiles; if ($raf->ReadLine($buff)) { chomp $buff; # remove end-of-line chars my $tagTablePtr = GetTagTable('Image::ExifTool::MIFF::Main'); my @entries = split ' ', $buff; unshift @entries, $hdr; # put the ID back in my ($tag, $val); foreach (@entries) { if ($mode eq 'com') { $mode = '' if /\}$/; next; } elsif (/^\{/) { $mode = 'com'; # read to the end of the comment next; } if ($mode eq 'val') { $val .= " $_"; # join back together with a space next unless /\}$/; $mode = ''; $val =~ s/(^\{|\}$)//g; # remove braces } elsif (/(.+)=(.+)/) { ($tag, $val) = ($1, $2); if ($val =~ /^\{/) { $mode = 'val'; # read to the end of the value data next; } } elsif (/^:/) { # this could be the end of an old-style MIFF file last; } else { # something we don't recognize -- stop parsing here $et->Warn('Unrecognized MIFF data'); last; } my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); unless ($tagInfo) { $tagInfo = { Name => $tag }; AddTagToTable($tagTablePtr, $tag, $tagInfo); } $verbose and $et->VerboseInfo($tag, $tagInfo, Table => $tagTablePtr, DataPt => \$val, ); # handle profile tags specially if ($tag =~ /^profile-(.*)/) { push @profiles, [$1, $val]; } else { $et->FoundTag($tagInfo, $val); } } } # process profile information foreach (@profiles) { my ($type, $len) = @{$_}; unless ($len =~ /^\d+$/) { $et->Warn("Invalid length for $type profile"); last; # don't try to read the rest } unless ($raf->Read($buff, $len) == $len) { $et->Warn("Error reading $type profile ($len bytes)"); next; } my $processed = 0; my %dirInfo = ( Parent => 'PNG', DataPt => \$buff, DataPos => $raf->Tell() - $len, DataLen => $len, DirStart => 0, DirLen => $len, ); if ($type eq 'icc') { # ICC Profile information my $tagTablePtr = GetTagTable('Image::ExifTool::ICC_Profile::Main'); $processed = $et->ProcessDirectory(\%dirInfo, $tagTablePtr); } elsif ($type eq 'iptc') { if ($buff =~ /^8BIM/) { # Photoshop information my $tagTablePtr = GetTagTable('Image::ExifTool::Photoshop::Main'); $processed = $et->ProcessDirectory(\%dirInfo, $tagTablePtr); } # I haven't seen 'exif' or 'xmp' profile types yet, but I have seen them # in newer PNG files so presumably they are possible here as well - PH } elsif ($type eq 'APP1' or $type eq 'exif' or $type eq 'xmp') { if ($buff =~ /^$Image::ExifTool::exifAPP1hdr/) { # APP1 EXIF my $hdrLen = length($Image::ExifTool::exifAPP1hdr); $dirInfo{DirStart} += $hdrLen; $dirInfo{DirLen} -= $hdrLen; # use the usual position for EXIF data: 12 bytes from start of file # (this may be wrong, but I can't see where the PNG stores this information) $dirInfo{Base} = 12; # this is the usual value $processed = $et->ProcessTIFF(\%dirInfo); } elsif ($buff =~ /^$Image::ExifTool::xmpAPP1hdr/) { # APP1 XMP my $hdrLen = length($Image::ExifTool::xmpAPP1hdr); my $tagTablePtr = GetTagTable('Image::ExifTool::XMP::Main'); $dirInfo{DirStart} += $hdrLen; $dirInfo{DirLen} -= $hdrLen; $processed = $et->ProcessDirectory(\%dirInfo, $tagTablePtr); } } unless ($processed) { $et->Warn("Unknown MIFF $type profile data"); if ($verbose) { $et->VerboseDir($type, 0, $len); $et->VerboseDump(\$buff); } } } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::MIFF - Read Magick Image File Format meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to read MIFF (Magick Image File Format) images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.imagemagick.org/script/miff.php> =item L<http://www.cs.uni.edu/Help/ImageMagick/www/miff.html> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/MIFF Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Minolta.pm��������������������������������������������������000644 �000765 �000024 �00000307126 12642461321 021657� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Minolta.pm # # Description: Minolta EXIF maker notes tags # # Revisions: 04/06/2004 - P. Harvey Created # 09/09/2005 - P. Harvey Added ability to write MRW files # # References: 1) http://www.dalibor.cz/minolta/makernote.htm # 2) Jay Al-Saadi private communication (testing with A2) # 3) Shingo Noguchi, PhotoXP (http://www.daifukuya.com/photoxp/) # 4) Niels Kristian Bech Jensen private communication # 5) http://www.cybercom.net/~dcoffin/dcraw/ # 6) Pedro Corte-Real private communication # 7) ExifTool forum post by bronek (http://www.cpanforum.com/posts/1118) # 8) http://www.chauveau-central.net/mrw-format/ # 9) CPAN Forum post by 'geve' (http://www.cpanforum.com/threads/2168) # 10) http://homepage3.nifty.com/kamisaka/makernote/makernote_km.htm # 11) http://www.dyxum.com/dforum/forum_posts.asp?TID=6371&PN=1 and # http://www.dyxum.com/dAdmin/lenses/MakerNoteList_Public.asp?stro=makr # http://dyxum.com/dforum/forum_posts.asp?TID=23435&PN=2 # 12) http://www.minolta-forum.de/forum/index.php?showtopic=14914 # 13) http://www.mhohner.de/minolta/lenses.php # 14) Jeffery Small private communication (tests with 7D) # 15) http://homepage3.nifty.com/kamisaka/makernote/makernote_sony.htm # 16) Thomas Kassner private communication # 17) Mladen Sever private communication # 18) Olaf Ulrich private communication # 19) Lukasz Stelmach private communication # 20) Igal Milchtaich private communication (A100 firmware 1.04) # 21) Jean-Michel Dubois private communication # 22) http://www.mi-fo.de/forum/index.php?act=attach&type=post&id=6024 # 23) Marcin Krol private communication # 24) http://cpanforum.com/threads/12291 # 26) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3521.0.html # 27) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3833.0.html # 28) Michael Reitinger private communication (RX100) # 29) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4086.0.html # 30) Iliah Borg private communication (LibRaw) # JD) Jens Duttke private communication # JR) Jos Roost private communication #------------------------------------------------------------------------------ package Image::ExifTool::Minolta; use strict; use vars qw($VERSION %minoltaLensTypes %minoltaTeleconverters %minoltaColorMode %sonyColorMode %minoltaSceneMode %afStatusInfo %metabonesID); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '2.29'; # Full list of product codes for Sony-compatible Minolta lenses # (ref http://www.kb.sony.com/selfservice/documentLink.do?externalId=C1000570) # NOTE: Unfortunately, these product codes sometimes do not match the first 4 # digits of the lens ID # 2578 AF 16mm F2.8 FISH-EYE # 2579 AF 20mm F2.8 # 2641 AF 20mm F2.8 NEW # 2566 AF 24mm F2.8 # 2642 AF 24mm F2.8 NEW # 2596 AF 28mm F2 # 2668 AF 28mm F2 NEW # 2557 AF 28mm F2.8 # 2591 AF 35mm F1.4 G # 2666 AF 35mm F1.4 G NEW # 2597 AF 35mm F2 # 2667 AF 35mm F2 NEW # 2562 AF 50mm F1.4 # 2662 AF 50mm F1.4 NEW # 2550 AF 50mm F1.7 # 2613 AF 50mm F1.7 NEW # 2592 AF 85mm F1.4 # 2629 AF 85mm F1.4 G # 2677 AF 85mm F1.4 G (D) # 2689 AF 85mm F1.4 G (D) Limited # 2598 AF 100mm F2 # 2648 AF 100mm F2.8 SOFT # 2556 AF 135mm F2.8 # 2656 STF 135mm F2.8 [T4.5] # 2593 AF APO 20 0mm F2.8 # 2612 High Speed AF APO 200mm F2.8 G # 2563 AF APO 300mm F2.8 # 2608 High Speed AF APO 300mm F2.8 G # 2674 AF APO 300mm F2.8 G(D) SSM # 2640 AF APO 300mm F4 G # 2651 AF APO 400mm F4.5 G # 2572 AF REFLEX 500mm F8 # 2565 AF APO 600mm F4 # 2609 High Speed AF APO 600mm F4 G # 2564 AF MACRO 50mm F2.8 # 2638 AF MACRO 50mm F2.8 NEW # 2675 AF MACRO 50mm F2.8 (D) # 2646 AF MACRO 50mm F3.5 # 2581 AF MACRO 100mm F2.8 # 2639 AF MACRO 100mm F2.8 NEW # 2676 AF MACRO 100mm F2.8 (D) # 2658 AF APO TE LE MACRO 200mm F4 G # 2594 AF MACRO ZOOM 1x-3x F1.7-2.8 # 2695 AF 17-35mm F2.8-4 (D) # 2654 AF 17-35mm F3.5 G # 2657 AF 20-35mm F3.5-4.5 # 2558 AF 24-50mm F4 # 2632 AF 24-50mm F4 NEW # 2636 AF 24-85mm F3.5-4.5 # 2660 AF 24-85mm F3.5-4.5 NEW # 2672 AF 24-105mm F3.5-4.5 (D) # 2620 AF 28-70mm F2.8 G # 2696 AF 28-75mm F2.8 (D) # 2659 AF 28-80mm F3.5-5.6 # 2670 AF 28-80mm F3.5-5.6 II # 2683 AF 28-80mm F3.5-5.6 (D) # 2633 AF 28-80mm F4-5.6 # 2552 AF 28-85mm F3.5-4.5 # 2586 AF 28-85mm F3.5-4.5 NEW # 2692 AF 28-100mm F3.5-5.6 (D) # 2635 AF 28-105mm F3.5-4.5 # 2661 AF 28-105mm F3.5-4.5 NEW # 2553 AF 28-135mm F4-4.5 # 2551 AF 35-70mm F4 # 2643 AF 35-70mm F3.5-4.5 # 2652 AF 35-70mm F3.5-4.5 NEW # 2605 AF 35-80mm F4-5.6 # 2671 AF 35-80mm F4.5-5.6 II # 2554 AF 35-105mm F3.5-4.5 # 2585 AF 35-105mm F3.5-4.5 # 2682 AF APO 70-200mm F2.8 G (D) SSM # 2588 AF 70-210mm F4.5-5.6 # 2555 AF 70-210mm F4 # 2634 AF 70-210mm F4.5-5.6 NEW # 2669 AF 70-210mm F4.5-5.6 II # 2561 AF 75-300mm F4.5-5.6 # 2649 AF 75-300mm F4.5-5.6 NEW # 2665 AF 75-300mm F4.5-5.6 II # 2684 AF 75-300mm F4.5-5.6 (D) # 2589 AF APO 80-200mm F2.8 # 2628 High-Speed AF APO 80-200mm F2.8 G # 2604 AF 80-200mm F4.5-5.6 # 2560 AF 100-200mm F4.5 # 2606 AF 100-300mm F4.5-5.6 # 2631 AF APO 100-300mm F4.5-5.6 # 2681 AF APO 100-300mm F4.5-5.6 (D) # 2644 AF APO 100-400mm F4.5-6.7 # 2618 AF Xi 28-80mm F4-5.6 # 2615 AF Xi 28-105mm F3.5-4.5 # 2624 AF PZ 35-80mm F4-5.6 # 2616 AF Xi 35-200mm F4.5-5.6 # 2619 AF Xi 80-200mm F4.5-5.6 # 2621 AF Xi 100-300mm F4.5-5.6 # 2698 AF DT 11-18mm F4.5-5.6 (D) # 2697 AF DT 18-70mm F3.5-5.6 (D) # 2699 AF DT 18-200mm F3.5-6.3 (D) # 2590 1.4x TELE CONVERTER APO # 2601 2x TELE CONVERTER APO # 2610 1.4x TELE CONVERTER APO II # 2611 2x TELE CONVERTER APO II # 2687 1.4x TELE CONVERTER APO (D) # 2688 2x TELE CONVERTER APO (D) # high bytes in Sony LensID's identifying Metabones adapters and high bytes of Canon LensID's %metabonesID = ( 0xef00 => \ 'Metabones Adapter', # with Canon LensID 0x00xx 0xf000 => 0xef00, # with Canon LensID 0x01xx 0xf100 => 0xef00, # with Canon LensID 0x02xx 0xff00 => 0xef00, # with Canon LensID 0x10xx 0x7700 => \ 'Metabones Speed Booster', # with Canon LensID 0x00xx 0x7800 => 0x7700, # with Canon LensID 0x01xx 0x7900 => 0x7700, # with Canon LensID 0x02xx 0x8700 => 0x7700, # with Canon LensID 0x10xx 0xbc00 => \ 'Metabones Speed Booster Ultra', # with Canon LensID 0x00xx 0xbd00 => 0xbc00, # with Canon LensID 0x01xx 0xbe00 => 0xbc00, # with Canon LensID 0x02xx 0xcc00 => 0xbc00, # with Canon LensID 0x10xx ); # lens ID numbers (ref 3) # ("New" and "II" appear in brackets if original version also has this LensType) %minoltaLensTypes = ( Notes => q{ Decimal values have been added to differentiate lenses which would otherwise have the same LensType, and are used by the Composite LensID tag when attempting to identify the specific lens model. "New" or "II" appear in brackets if the original version of the lens has the same LensType. Special logic is employed to identify the attached lens when a Metabones Canon EF adapter is used. }, OTHER => sub { my ($val, $inv) = @_; return undef if $inv; my $id = $val & 0xff00; # Note: Metabones Smart Adapter firmware versions before 31 kill # the high byte for 2-byte Canon LensType values, so the reported lens # will be incorrect for these my $mb = $metabonesID{$id} or return undef; ref $mb or $id = $mb, $mb = $metabonesID{$id}; require Image::ExifTool::Canon; my $lens = $Image::ExifTool::Canon::canonLensTypes{$val - $id}; return $lens ? "$lens + $$mb" : undef; }, 0 => 'Minolta AF 28-85mm F3.5-4.5 New', # New added (ref 13/18) 1 => 'Minolta AF 80-200mm F2.8 HS-APO G', 2 => 'Minolta AF 28-70mm F2.8 G', 3 => 'Minolta AF 28-80mm F4-5.6', 4 => 'Minolta AF 85mm F1.4G', #exiv2 0.23 5 => 'Minolta AF 35-70mm F3.5-4.5 [II]', # (original and II, ref 13) 6 => 'Minolta AF 24-85mm F3.5-4.5 [New]', # (original and New, ref 13) # 7 => 'AF 100-400mm F4.5-6.7 (D)', ?? 7 => 'Minolta AF 100-300mm F4.5-5.6 APO [New] or 100-400mm or Sigma Lens', 7.1 => 'Minolta AF 100-400mm F4.5-6.7 APO', #JD 7.2 => 'Sigma AF 100-300mm F4 EX DG IF', #JD 8 => 'Minolta AF 70-210mm F4.5-5.6 [II]', # (original and II, ref 13) 9 => 'Minolta AF 50mm F3.5 Macro', 10 => 'Minolta AF 28-105mm F3.5-4.5 [New]', # (original and New, ref 13) 11 => 'Minolta AF 300mm F4 HS-APO G', 12 => 'Minolta AF 100mm F2.8 Soft Focus', 13 => 'Minolta AF 75-300mm F4.5-5.6 (New or II)', # (II and New, ref 13) 14 => 'Minolta AF 100-400mm F4.5-6.7 APO', 15 => 'Minolta AF 400mm F4.5 HS-APO G', 16 => 'Minolta AF 17-35mm F3.5 G', 17 => 'Minolta AF 20-35mm F3.5-4.5', 18 => 'Minolta AF 28-80mm F3.5-5.6 II', 19 => 'Minolta AF 35mm F1.4 G', # G added (ref 18), but not New as per ref 13 20 => 'Minolta/Sony 135mm F2.8 [T4.5] STF', # 20 => 'Sony 135mm F2.8 [T4.5] STF (SAL135F28)', (ref JR) 22 => 'Minolta AF 35-80mm F4-5.6 II', # II added (ref 13) 23 => 'Minolta AF 200mm F4 Macro APO G', 24 => 'Minolta/Sony AF 24-105mm F3.5-4.5 (D) or Sigma or Tamron Lens', # 24 => 'Sony 24-105mm F3.5-4.5 (SAL24105)', (ref JR) 24.1 => 'Sigma 18-50mm F2.8', 24.2 => 'Sigma 17-70mm F2.8-4.5 (D)', 24.3 => 'Sigma 20-40mm F2.8 EX DG Aspherical IF', #JD/22 24.4 => 'Sigma 18-200mm F3.5-6.3 DC', #22 24.5 => 'Sigma DC 18-125mm F4-5,6 D', #exiv2 0.23 # 24.6 => 'Tamron SP AF 28-75mm F2.8 XR Di (IF) Macro', #JD 24.6 => 'Tamron SP AF 28-75mm F2.8 XR Di LD Aspherical [IF] Macro', #4 (Model A09) 25 => 'Minolta AF 100-300mm F4.5-5.6 APO (D) or Sigma Lens', 25.1 => 'Sigma 100-300mm F4 EX (APO (D) or D IF)', #JD 25.2 => 'Sigma 70mm F2.8 EX DG Macro', #JD 25.3 => 'Sigma 20mm F1.8 EX DG Aspherical RF', #19 25.4 => 'Sigma 30mm F1.4 EX DC', #21/27 25.5 => 'Sigma 24mm F1.8 EX DG ASP Macro', #Florian Knorn 27 => 'Minolta AF 85mm F1.4 G (D)', # added (D) (ref 13) 28 => 'Minolta/Sony AF 100mm F2.8 Macro (D) or Tamron Lens', # 28 => 'Sony 100mm F2.8 Macro (SAL100M28)', (ref 18/JR) 28.1 => 'Tamron SP AF 90mm F2.8 Di Macro', #JD (Model 272E) 28.2 => 'Tamron SP AF 180mm F3.5 Di LD [IF] Macro', #27 (Model B01) ("SP" moved - ref JR) 29 => 'Minolta/Sony AF 75-300mm F4.5-5.6 (D)', # Sony added (ref 13) # 29 => 'Sony 75-300mm F4.5-5.6 (SAL75300)', (ref JR) 30 => 'Minolta AF 28-80mm F3.5-5.6 (D) or Sigma Lens', 30.1 => 'Sigma AF 10-20mm F4-5.6 EX DC', #JD 30.2 => 'Sigma AF 12-24mm F4.5-5.6 EX DG', 30.3 => 'Sigma 28-70mm EX DG F2.8', #16 30.4 => 'Sigma 55-200mm F4-5.6 DC', #JD 31 => 'Minolta/Sony AF 50mm F2.8 Macro (D) or F3.5', # 31 => 'Sony 50mm F2.8 Macro (SAL50M28)', (ref JR) 31.1 => 'Minolta/Sony AF 50mm F3.5 Macro', 32 => 'Minolta/Sony AF 300mm F2.8 G or 1.5x Teleconverter', #13/18 # 32 => 'Minolta AF 300mm F2.8 G (D) SSM', (ref 13) # 32 => 'Sony 300mm F2.8 G (SAL300F28G)', (ref 18/JR) 33 => 'Minolta/Sony AF 70-200mm F2.8 G', # 33 => 'Sony 70-200mm F2.8 G (SAL70200G)', (ref JR) # 33 => 'Minolta AF 70-200mm F2.8 G (D) SSM' (ref 13) 35 => 'Minolta AF 85mm F1.4 G (D) Limited', 36 => 'Minolta AF 28-100mm F3.5-5.6 (D)', 38 => 'Minolta AF 17-35mm F2.8-4 (D)', # (Konica Minolta, ref 13) 39 => 'Minolta AF 28-75mm F2.8 (D)', # (Konica Minolta, ref 13) 40 => 'Minolta/Sony AF DT 18-70mm F3.5-5.6 (D)', # (Konica Minolta, ref 13) # 40 => 'Sony DT 18-70mm F3.5-5.6 (SAL1870)', (ref JR) #40.1 => 'Sony AF DT 18-200mm F3.5-6.3', #11 (anomaly? - PH) 41 => 'Minolta/Sony AF DT 11-18mm F4.5-5.6 (D) or Tamron Lens', # (Konica Minolta, ref 13) # 41 => 'Sony DT 11-18mm F4.5-5.6 (SAL1118)', (ref JR) 41.1 => 'Tamron SP AF 11-18mm F4.5-5.6 Di II LD Aspherical IF', #JD (Model A13) 42 => 'Minolta/Sony AF DT 18-200mm F3.5-6.3 (D)', # Sony added (ref 13) (Konica Minolta, ref 13) # 42 => 'Sony DT 18-200mm F3.5-6.3 (SAL18200)', (ref JR) 43 => 'Sony 35mm F1.4 G (SAL35F14G)', # changed from Minolta to Sony (ref 13/18/JR) (but ref 11 shows both!) 44 => 'Sony 50mm F1.4 (SAL50F14)', # changed from Minolta to Sony (ref 13/18/JR) 45 => 'Carl Zeiss Planar T* 85mm F1.4 ZA (SAL85F14Z)', #JR 46 => 'Carl Zeiss Vario-Sonnar T* DT 16-80mm F3.5-4.5 ZA (SAL1680Z)', #JR 47 => 'Carl Zeiss Sonnar T* 135mm F1.8 ZA (SAL135F18Z)', #JR 48 => 'Carl Zeiss Vario-Sonnar T* 24-70mm F2.8 ZA SSM (SAL2470Z) or ZA SSM II', #11/JR 48.1 => 'Carl Zeiss Vario-Sonnar T* 24-70mm F2.8 ZA SSM II (SAL2470Z2)', #JR 49 => 'Sony DT 55-200mm F4-5.6 (SAL55200)', #JD/JR 50 => 'Sony DT 18-250mm F3.5-6.3 (SAL18250)', #11/JR 51 => 'Sony DT 16-105mm F3.5-5.6 (SAL16105)', #11/JR #51.1 => 'Sony AF DT 55-200mm F4-5.5', #11 (anomaly? - PH) 52 => 'Sony 70-300mm F4.5-5.6 G SSM (SAL70300G) or G SSM II or Tamron Lens', #JD 52.1 => 'Sony 70-300mm F4.5-5.6 G SSM II (SAL70300G2)', #JR 52.2 => 'Tamron SP 70-300mm F4-5.6 Di USD', #JR,4 (Model A005) 53 => 'Sony 70-400mm F4-5.6 G SSM (SAL70400G)', #17(/w correction by Stephen Bishop)/JR 54 => 'Carl Zeiss Vario-Sonnar T* 16-35mm F2.8 ZA SSM (SAL1635Z) or ZA SSM II', #17/JR 54.1 => 'Carl Zeiss Vario-Sonnar T* 16-35mm F2.8 ZA SSM II (SAL1635Z2)', #JR 55 => 'Sony DT 18-55mm F3.5-5.6 SAM (SAL1855) or SAM II', #PH 55.1 => 'Sony DT 18-55mm F3.5-5.6 SAM II (SAL18552)', #JR 56 => 'Sony DT 55-200mm F4-5.6 SAM (SAL55200-2)', #22/JR 57 => 'Sony DT 50mm F1.8 SAM (SAL50F18) or Tamron Lens or Commlite CM-EF-NEX adapter', #22/JR 57.1 => 'Tamron SP AF 60mm F2 Di II LD [IF] Macro 1:1', # (Model G005) (ref http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3858.0.html) 57.2 => 'Tamron 18-270mm F3.5-6.3 Di II PZD', #27 (Model B008) # (note: the Commlite CM-EF-NEX adapter also appears to give LensType 57, ref JR) 58 => 'Sony DT 30mm F2.8 Macro SAM (SAL30M28)', #22/JR 59 => 'Sony 28-75mm F2.8 SAM (SAL2875)', #21/JR 60 => 'Carl Zeiss Distagon T* 24mm F2 ZA SSM (SAL24F20Z)', #17/JR 61 => 'Sony 85mm F2.8 SAM (SAL85F28)', #17/JR 62 => 'Sony DT 35mm F1.8 SAM (SAL35F18)', #PH/JR 63 => 'Sony DT 16-50mm F2.8 SSM (SAL1650)', #17/JR 64 => 'Sony 500mm F4 G SSM (SAL500F40G)', #29 65 => 'Sony DT 18-135mm F3.5-5.6 SAM (SAL18135)', #JR 66 => 'Sony 300mm F2.8 G SSM II (SAL300F28G2)', #29 67 => 'Sony 70-200mm F2.8 G SSM II (SAL70200G2)', #JR 68 => 'Sony DT 55-300mm F4.5-5.6 SAM (SAL55300)', #29 69 => 'Sony 70-400mm F4-5.6 G SSM II (SAL70400G2)', #JR 70 => 'Carl Zeiss Planar T* 50mm F1.4 ZA SSM (SAL50F14Z)', #JR 128 => 'Tamron or Sigma Lens (128)', 128.1 => 'Tamron AF 18-200mm F3.5-6.3 XR Di II LD Aspherical [IF] Macro', #JR (Model A14) # was 128.1 => 'Tamron 18-200mm F3.5-6.3', 128.2 => 'Tamron AF 28-300mm F3.5-6.3 XR Di LD Aspherical [IF] Macro', #JR (Model A061) # was 128.2 => 'Tamron 28-300mm F3.5-6.3', 128.3 => 'Tamron 80-300mm F3.5-6.3', 128.4 => 'Tamron AF 28-200mm F3.8-5.6 XR Di Aspherical [IF] Macro', #JD (Model A031) # also Tamron AF 28-200mm F3.8-5.6 Aspherical', #30 (Model 71D) # and 'Tamron AF 28-200mm F3.8-5.6 LD Aspherical [IF] Super', #30 (Model 171D) 128.5 => 'Tamron SP AF 17-35mm F2.8-4 Di LD Aspherical IF', #JD (Model A05) 128.6 => 'Sigma AF 50-150mm F2.8 EX DC APO HSM II', #JD 128.7 => 'Sigma 10-20mm F3.5 EX DC HSM', #11 (Model 202-205) 128.8 => 'Sigma 70-200mm F2.8 II EX DG APO MACRO HSM', #24 128.9 => 'Sigma 10mm F2.8 EX DC HSM Fisheye', #Florian Knorn # (yes, '128.10'. My condolences to typed languages that use this database - PH) '128.10' => 'Sigma 50mm F1.4 EX DG HSM', #Florian Knorn '128.11' => 'Sigma 85mm F1.4 EX DG HSM', #27 '128.12' => 'Sigma 24-70mm F2.8 IF EX DG HSM', #27 '128.13' => 'Sigma 18-250mm F3.5-6.3 DC OS HSM', #27 '128.14' => 'Sigma 17-50mm F2.8 EX DC HSM', #Exiv2 '128.15' => 'Sigma 17-70mm F2.8-4 DC Macro HSM', #JR '128.16' => 'Sigma 150mm F2.8 EX DG OS HSM APO Macro', #Marcus Holland-Moritz '128.17' => 'Sigma 150-500mm F5-6.3 APO DG OS HSM', #30 '128.18' => 'Tamron AF 28-105mm F4-5.6 [IF]', #30 (Model 179D) '128.19' => 'Sigma 35mm F1.4 DG HSM', #JR '128.20' => 'Sigma 18-35mm F1.8 DC HSM', #JR 129 => 'Tamron Lens (129)', 129.1 => 'Tamron 200-400mm F5.6 LD', #12 (LD ref 23) 129.2 => 'Tamron 70-300mm F4-5.6 LD', #12 131 => 'Tamron 20-40mm F2.7-3.5 SP Aspherical IF', #23 (Model 266D) 135 => 'Vivitar 28-210mm F3.5-5.6', #16 136 => 'Tokina EMZ M100 AF 100mm F3.5', #JD 137 => 'Cosina 70-210mm F2.8-4 AF', #11 138 => 'Soligor 19-35mm F3.5-4.5', #11 139 => 'Tokina AF 28-300mm F4-6.3', #30 142 => 'Voigtlander 70-300mm F4.5-5.6', #JD 146 => 'Voigtlander Macro APO-Lanthar 125mm F2.5 SL', #JD 194 => 'Tamron SP AF 17-50mm F2.8 XR Di II LD Aspherical [IF]', #23 (Model A16) 203 => 'Tamron SP 70-200mm F2.8 Di USD', #JR (Model A009) 204 => 'Tamron SP 24-70mm F2.8 Di USD', #JR (Model A007) 213 => 'Tamron 16-300mm F3.5-6.3 Di II PZD', #JR (Model B016) 214 => 'Tamron SP 150-600mm F5-6.3 Di USD', #JR (Model A011) 224 => 'Tamron SP 90mm F2.8 Di Macro 1:1 USD', #JR (Model F004) 255 => 'Tamron Lens (255)', 255.1 => 'Tamron SP AF 17-50mm F2.8 XR Di II LD Aspherical', # (Model A16) 255.2 => 'Tamron AF 18-250mm F3.5-6.3 XR Di II LD', #JD (Model A18?) #? 225.2 => 'Tamron AF 18-250mm F3.5-6.3 Di II LD Aspherical [IF] Macro', #JR (Model A18) 255.3 => 'Tamron AF 55-200mm F4-5.6 Di II LD Macro', # (Model A15) (added "LD Macro", ref 23) 255.4 => 'Tamron AF 70-300mm F4-5.6 Di LD Macro 1:2', # (Model A17) 255.5 => 'Tamron SP AF 200-500mm F5.0-6.3 Di LD IF', # (Model A08) 255.6 => 'Tamron SP AF 10-24mm F3.5-4.5 Di II LD Aspherical IF', #22 (Model B001) 255.7 => 'Tamron SP AF 70-200mm F2.8 Di LD IF Macro', #22 (Model A001) 255.8 => 'Tamron SP AF 28-75mm F2.8 XR Di LD Aspherical IF', #24 (Model A09) 255.9 => 'Tamron AF 90-300mm F4.5-5.6 Telemacro', #Fredrik Agert 25501 => 'Minolta AF 50mm F1.7', #7 25511 => 'Minolta AF 35-70mm F4 or Other Lens', 25511.1 => 'Sigma UC AF 28-70mm F3.5-4.5', #12/16(HighSpeed-AF) 25511.2 => 'Sigma AF 28-70mm F2.8', #JD 25511.3 => 'Sigma M-AF 70-200mm F2.8 EX Aspherical', #12 25511.4 => 'Quantaray M-AF 35-80mm F4-5.6', #JD 25511.5 => 'Tokina 28-70mm F2.8-4.5 AF', #30 25521 => 'Minolta AF 28-85mm F3.5-4.5 or Other Lens', # not New (ref 18) 25521.1 => 'Tokina 19-35mm F3.5-4.5', #3 25521.2 => 'Tokina 28-70mm F2.8 AT-X', #7 25521.3 => 'Tokina 80-400mm F4.5-5.6 AT-X AF II 840', #JD 25521.4 => 'Tokina AF PRO 28-80mm F2.8 AT-X 280', #JD 25521.5 => 'Tokina AT-X PRO [II] AF 28-70mm F2.6-2.8 270', #24 (original + II versions) 25521.6 => 'Tamron AF 19-35mm F3.5-4.5', #JD (Model A10) 25521.7 => 'Angenieux AF 28-70mm F2.6', #JD 25521.8 => 'Tokina AT-X 17 AF 17mm F3.5', #27 25521.9 => 'Tokina 20-35mm F3.5-4.5 II AF', #30 25531 => 'Minolta AF 28-135mm F4-4.5 or Sigma Lens', 25531.1 => 'Sigma ZOOM-alpha 35-135mm F3.5-4.5', #16 25531.2 => 'Sigma 28-105mm F2.8-4 Aspherical', #JD 25531.3 => 'Sigma 28-105mm F4-5.6 UC', #JR 25541 => 'Minolta AF 35-105mm F3.5-4.5', #13 25551 => 'Minolta AF 70-210mm F4 Macro or Sigma Lens', 25551.1 => 'Sigma 70-210mm F4-5.6 APO', #7 25551.2 => 'Sigma M-AF 70-200mm F2.8 EX APO', #6 25551.3 => 'Sigma 75-200mm F2.8-3.5', #22 25561 => 'Minolta AF 135mm F2.8', 25571 => 'Minolta/Sony AF 28mm F2.8', # Sony added (ref 18) # 25571 => 'Sony 28mm F2.8 (SAL28F28)', (ref 18/JR) 25581 => 'Minolta AF 24-50mm F4', 25601 => 'Minolta AF 100-200mm F4.5', 25611 => 'Minolta AF 75-300mm F4.5-5.6 or Sigma Lens', #13 25611.1 => 'Sigma 70-300mm F4-5.6 DL Macro', #12 (also DG version ref 27, and APO version ref JR) 25611.2 => 'Sigma 300mm F4 APO Macro', #3/7 25611.3 => 'Sigma AF 500mm F4.5 APO', #JD 25611.4 => 'Sigma AF 170-500mm F5-6.3 APO Aspherical', #JD 25611.5 => 'Tokina AT-X AF 300mm F4', #JD 25611.6 => 'Tokina AT-X AF 400mm F5.6 SD', #22 25611.7 => 'Tokina AF 730 II 75-300mm F4.5-5.6', #JD 25611.8 => 'Sigma 800mm F5.6 APO', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3472.0.html 25611.9 => 'Sigma AF 400mm F5.6 APO Macro', #27 25621 => 'Minolta AF 50mm F1.4 [New]', # original and New, not Sony (ref 13/18) 25631 => 'Minolta AF 300mm F2.8 APO or Sigma Lens', # changed G to APO (ref 13) 25631.1 => 'Sigma AF 50-500mm F4-6.3 EX DG APO', #JD 25631.2 => 'Sigma AF 170-500mm F5-6.3 APO Aspherical', #JD (also DG version, ref 27) 25631.3 => 'Sigma AF 500mm F4.5 EX DG APO', #JD 25631.4 => 'Sigma 400mm F5.6 APO', #22 25641 => 'Minolta AF 50mm F2.8 Macro or Sigma Lens', 25641.1 => 'Sigma 50mm F2.8 EX Macro', #11 25651 => 'Minolta AF 600mm F4', 25661 => 'Minolta AF 24mm F2.8 or Sigma Lens', 25661.1 => 'Sigma 17-35mm F2.8-4 EX Aspherical', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3789.msg17679.html#msg17679 25721 => 'Minolta/Sony AF 500mm F8 Reflex', # 25721 => 'Sony 500mm F8 Reflex (SAL500F80)', (ref JR) 25781 => 'Minolta/Sony AF 16mm F2.8 Fisheye or Sigma Lens', # Sony added (ref 13/18) # 25781 => 'Sony 16mm F2.8 Fisheye (SAL16F28)', (ref 18/JR) 25781.1 => 'Sigma 8mm F4 EX [DG] Fisheye', 25781.2 => 'Sigma 14mm F3.5', 25781.3 => 'Sigma 15mm F2.8 Fisheye', #JD (writes 16mm to EXIF) 25791 => 'Minolta/Sony AF 20mm F2.8 or Tokina Lens', # Sony added (ref 11) # 25791 => 'Sony 20mm F2.8 (SAL20F28)', (ref JR) 25791.1 => 'Tokina AT-X Pro DX 11-16mm F2.8', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3593.0.html 25811 => 'Minolta AF 100mm F2.8 Macro [New] or Sigma or Tamron Lens', # not Sony (ref 13/18) 25811.1 => 'Sigma AF 90mm F2.8 Macro', #JD 25811.2 => 'Sigma AF 105mm F2.8 EX [DG] Macro', #JD 25811.3 => 'Sigma 180mm F5.6 Macro', 25811.4 => 'Sigma 180mm F3.5 EX DG Macro', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3789.msg17679.html#msg17679 25811.5 => 'Tamron 90mm F2.8 Macro', 25851 => 'Beroflex 35-135mm F3.5-4.5', #16 25858 => 'Minolta AF 35-105mm F3.5-4.5 New or Tamron Lens', 25858.1 => 'Tamron 24-135mm F3.5-5.6', # (Model 190D) 25881 => 'Minolta AF 70-210mm F3.5-4.5', 25891 => 'Minolta AF 80-200mm F2.8 APO or Tokina Lens', 25891.1 => 'Tokina 80-200mm F2.8', # 25901 - Note: only get this with older 1.4x and lenses with 5-digit LensTypes (ref 27) # 25901 - also "Minolta AF 200mm F2.8 HS-APO G + Minolta AF 1.4x APO" 25901 => 'Minolta AF 200mm F2.8 G APO + Minolta AF 1.4x APO or Other Lens + 1.4x', #26 25901.1 => 'Minolta AF 600mm F4 HS-APO G + Minolta AF 1.4x APO', #27 25911 => 'Minolta AF 35mm F1.4', #(from Sony list) (not G as per ref 13) 25921 => 'Minolta AF 85mm F1.4 G (D)', 25931 => 'Minolta AF 200mm F2.8 G APO', 25941 => 'Minolta AF 3x-1x F1.7-2.8 Macro', 25961 => 'Minolta AF 28mm F2', 25971 => 'Minolta AF 35mm F2 [New]', #13 25981 => 'Minolta AF 100mm F2', # 26011 - Note: only get this with older 2x and lenses with 5-digit LensTypes (ref 27) # 26011 - also "Minolta AF 200mm F2.8 HS-APO G + Minolta AF 2x APO" 26011 => 'Minolta AF 200mm F2.8 G APO + Minolta AF 2x APO or Other Lens + 2x', #26 26011.1 => 'Minolta AF 600mm F4 HS-APO G + Minolta AF 2x APO', #27 26041 => 'Minolta AF 80-200mm F4.5-5.6', 26051 => 'Minolta AF 35-80mm F4-5.6', #(from Sony list) 26061 => 'Minolta AF 100-300mm F4.5-5.6', # not (D) (ref 13/18) 26071 => 'Minolta AF 35-80mm F4-5.6', #13 26081 => 'Minolta AF 300mm F2.8 HS-APO G', # HS-APO added (ref 13/18) 26091 => 'Minolta AF 600mm F4 HS-APO G', 26121 => 'Minolta AF 200mm F2.8 HS-APO G', 26131 => 'Minolta AF 50mm F1.7 New', 26151 => 'Minolta AF 28-105mm F3.5-4.5 xi', # xi, not Power Zoom (ref 13/18) 26161 => 'Minolta AF 35-200mm F4.5-5.6 xi', # xi, not Power Zoom (ref 13/18) 26181 => 'Minolta AF 28-80mm F4-5.6 xi', # xi, not Power Zoom (ref 13/18) 26191 => 'Minolta AF 80-200mm F4.5-5.6 xi', # xi, not Power Zoom (ref 13/18) 26201 => 'Minolta AF 28-70mm F2.8 G', #11 26211 => 'Minolta AF 100-300mm F4.5-5.6 xi', # xi, not Power Zoom (ref 13/18) 26241 => 'Minolta AF 35-80mm F4-5.6 Power Zoom', 26281 => 'Minolta AF 80-200mm F2.8 G', #11 26291 => 'Minolta AF 85mm F1.4 New', 26311 => 'Minolta/Sony AF 100-300mm F4.5-5.6 APO', #11 26321 => 'Minolta AF 24-50mm F4 New', 26381 => 'Minolta AF 50mm F2.8 Macro New', 26391 => 'Minolta AF 100mm F2.8 Macro', 26411 => 'Minolta/Sony AF 20mm F2.8 New', # Sony added (ref 13) 26421 => 'Minolta AF 24mm F2.8 New', 26441 => 'Minolta AF 100-400mm F4.5-6.7 APO', #11 26621 => 'Minolta AF 50mm F1.4 New', 26671 => 'Minolta AF 35mm F2 New', 26681 => 'Minolta AF 28mm F2 New', 26721 => 'Minolta AF 24-105mm F3.5-4.5 (D)', #11 # 30464: newer firmware versions of the Speed Booster report type 30464 (=0x7700) # - this is the base to which the Canon LensType is added 30464 => 'Metabones Canon EF Speed Booster', #Metabones 45671 => 'Tokina 70-210mm F4-5.6', #22 45711 => 'Vivitar 70-210mm F4.5-5.6', #30 45741 => '2x Teleconverter or Tamron or Tokina Lens', #18 45741.1 => 'Tamron SP AF 90mm F2.5', #JD 45741.2 => 'Tokina RF 500mm F8.0 x2', #JD 45741.3 => 'Tokina 300mm F2.8 x2', 45751 => '1.4x Teleconverter', #18 45851 => 'Tamron SP AF 300mm F2.8 LD IF', #11 45861 => 'Tamron SP AF 35-105mm F2.8 LD Aspherical IF', #Fredrik Agert 45871 => 'Tamron AF 70-210mm F2.8 SP LD', #Fabio Suprani # 48128: the Speed Booster Ultra appears to report type 48128 (=0xbc00) # - this is the base to which the Canon LensType is added 48128 => 'Metabones Canon EF Speed Booster Ultra', #JR # 61184: older firmware versions of both the Speed Booster and the Smart Adapter # report type 61184 (=0xef00), and add only the lower byte of the Canon LensType (ref JR). # For newer firmware versions this is only used by the Smart Adapter, and # the full Canon LensType code is added - PH # the metabones adapter translates Canon L -> G, II -> II, USM -> SSM, IS -> OSS (ref JR) 61184 => 'Metabones Canon EF Adapter or Other Adapter', #JR (also Fotodiox or Viltrox) # all M42-type lenses give a value of 65535 (and FocalLength=0, FNumber=1) 65535 => 'E-Mount, T-Mount, Other Lens or no lens', #JD/JR # # Sony E-type lenses (NOTE: these should be kept in sync with %sonyLensTypes2 of Sony.pm) # 65535.1 => 'Sony E 16mm F2.8', #PH (32784 - SEL16F28) 65535.2 => 'Sony E 18-55mm F3.5-5.6 OSS', #PH (32785 - SEL1855) 65535.3 => 'Sony E 55-210mm F4.5-6.3 OSS', #PH (32786 - SEL55210) 65535.4 => 'Sony E 18-200mm F3.5-6.3 OSS', #PH (32787 - SEL18200) 65535.5 => 'Sony E 30mm F3.5 Macro', #JR (32788 - SEL30M35) 65535.6 => 'Sony E 24mm F1.8 ZA', #PH (32789 - SEL24F18Z) 65535.7 => 'Sony E 50mm F1.8 OSS', #PH (32790 - SEL50F18) 65535.8 => 'Sony E 16-70mm F4 ZA OSS', #JR (32791 - SEL1670Z) 65535.9 => 'Sony E 10-18mm F4 OSS', #PH (32792 - SEL1018) '65535.10' => 'Sony E PZ 16-50mm F3.5-5.6 OSS', #PH (32793 - SELP1650) '65535.11' => 'Sony FE 35mm F2.8 ZA', #JR (32794 - SEL35F28Z) '65535.12' => 'Sony FE 24-70mm F4 ZA OSS', #JR (32795 - SEL2470Z) '65535.13' => 'Sony E 18-200mm F3.5-6.3 OSS LE', #JR (32797 - SEL18200LE) '65535.14' => 'Sony E 20mm F2.8', #PH (32798 - SEL20F28) '65535.15' => 'Sony E 35mm F1.8 OSS', #JR (32799 - SEL35F18) '65535.16' => 'Sony E PZ 18-105mm F4 G OSS', #JR (32800 - SELP18105G) '65535.17' => 'Sony FE 90mm F2.8 Macro G OSS', #JR (32802 - SEL90M28G) '65535.18' => 'Sony E 18-50mm F4-5.6', #JR (32803 - SEL1850) '65535.19' => 'Sony E PZ 18-200mm F3.5-6.3 OSS', #JR (32807 - SELP18200) '65535.20' => 'Sony FE 55mm F1.8 ZA', #JR (32808 - SEL55F18Z) '65535.21' => 'Sony FE 70-200mm F4 G OSS', #JR (32810 - SEL70200G) '65535.22' => 'Sony FE 16-35mm F4 ZA OSS', #JR (32811 - SEL1635Z) '65535.23' => 'Sony FE 28-70mm F3.5-5.6 OSS', #JR (32813 - SEL2870) '65535.24' => 'Sony FE 35mm F1.4 ZA', #JR (32814 - SEL35F14Z) '65535.25' => 'Sony FE 24-240mm F3.5-6.3 OSS', #JR (32815 - SEL24240) '65535.26' => 'Sony FE 28mm F2', #JR (32816 - SEL28F20) '65535.27' => 'Sony FE PZ 28-135mm F4 G OSS', #JR (32817 - SELP28135G) '65535.28' => 'Sony FE 21mm F2.8 (SEL28F20 + SEL075UWC)', #JR # (32826 - SEL28F20 + SEL075UWC Ultra-wide converter) '65535.29' => 'Sony FE 16mm F3.5 Fisheye (SEL28F20 + SEL057FEC)', #JR # (32827 - SEL28F20 + SEL057FEC Fisheye converter) # # 3rd party E lenses # '65535.30' => 'Sigma 19mm F2.8 [EX] DN', #JR '65535.31' => 'Sigma 30mm F2.8 [EX] DN', #JR '65535.32' => 'Sigma 60mm F2.8 DN', #JR '65535.33' => 'Tamron 18-200mm F3.5-6.3 Di III VC', #JR (Model B011) '65535.34' => 'Zeiss Batis 25mm F2', #JR '65535.35' => 'Zeiss Batis 85mm F1.8', #JR '65535.36' => 'Zeiss Loxia 21mm F2.8', #JR '65535.37' => 'Zeiss Loxia 35mm F2', #JR '65535.38' => 'Zeiss Loxia 50mm F2', #JR '65535.39' => 'Zeiss Touit 12mm F2.8', #JR '65535.40' => 'Zeiss Touit 32mm F1.8', #JR '65535.41' => 'Zeiss Touit 50mm F2.8 Macro', #JR # # other lenses # '65535.42' => 'Arax MC 35mm F2.8 Tilt+Shift', #JD '65535.43' => 'Arax MC 80mm F2.8 Tilt+Shift', #JD '65535.44' => 'Zenitar MF 16mm F2.8 Fisheye M42', #JD '65535.45' => 'Samyang 500mm Mirror F8.0', #19 '65535.46' => 'Pentacon Auto 135mm F2.8', #19 '65535.47' => 'Pentacon Auto 29mm F2.8', #19 '65535.48' => 'Helios 44-2 58mm F2.0', #19 ); %minoltaTeleconverters = ( 0x00 => 'None', 0x04 => 'Minolta/Sony AF 1.4x APO (D) (0x04)', # (Andy Johnson, A77 APO and APO D) 0x05 => 'Minolta/Sony AF 2x APO (D) (0x05)', # (Andy Johnson, A77 APO D) 0x48 => 'Minolta/Sony AF 2x APO (D)', # 0x48 => 'Sony 2x Teleconverter (SAL20TC)', (ref JR) 0x50 => 'Minolta AF 2x APO II', 0x60 => 'Minolta AF 2x APO',#26 0x88 => 'Minolta/Sony AF 1.4x APO (D)', # 0x88 => 'Sony 1.4x Teleconverter (SAL14TC)', (ref JR) 0x90 => 'Minolta AF 1.4x APO II', 0xa0 => 'Minolta AF 1.4x APO',#26 ); %minoltaColorMode = ( 0 => 'Natural color', 1 => 'Black & White', 2 => 'Vivid color', 3 => 'Solarization', 4 => 'Adobe RGB', 5 => 'Sepia', #10 9 => 'Natural', #10 12 => 'Portrait', #10 13 => 'Natural sRGB', 14 => 'Natural+ sRGB', 15 => 'Landscape', #10 16 => 'Evening', #10 17 => 'Night Scene', #10 18 => 'Night Portrait', #10 0x84 => 'Embed Adobe RGB', ); %sonyColorMode = ( #15 0 => 'Standard', 1 => 'Vivid', #PH 2 => 'Portrait', 3 => 'Landscape', 4 => 'Sunset', 5 => 'Night View/Portrait', #(portrait if flash is on) 6 => 'B&W', 7 => 'Adobe RGB', 12 => 'Neutral', # Sony 13 => 'Clear', #JR (NC) 14 => 'Deep', #JR 15 => 'Light', #JR (NC) 16 => 'Autumn Leaves', #JR (NC) 17 => 'Sepia', #JR 100 => 'Neutral', #JD 101 => 'Clear', #JD 102 => 'Deep', #JD 103 => 'Light', #JD 104 => 'Night View', #JD 105 => 'Autumn Leaves', #JD 0xffffffff => 'n/a', #PH ); %minoltaSceneMode = ( 0 => 'Standard', 1 => 'Portrait', 2 => 'Text', 3 => 'Night Scene', 4 => 'Sunset', 5 => 'Sports', 6 => 'Landscape', 7 => 'Night Portrait', #JD 8 => 'Macro', 9 => 'Super Macro', 16 => 'Auto', # (RX100 'Intelligent Auto' - PH) 17 => 'Night View/Portrait', 18 => 'Sweep Panorama', #PH (SLT-A55V) 19 => 'Handheld Night Shot', #PH 20 => 'Anti Motion Blur', #PH 21 => 'Cont. Priority AE', #PH 22 => 'Auto+', 23 => '3D Sweep Panorama', #PH (SLT-A55V) 24 => 'Superior Auto', #28 25 => 'High Sensitivity', #28 26 => 'Fireworks', #28 27 => 'Food', #28 28 => 'Pet', #28 33 => 'HDR', #JR 0xffff => 'n/a', #PH ); # tag information for AFStatus tags (ref 20) %afStatusInfo = ( Format => 'int16s', # 0=in focus, -32768=out of focus, -ve=front focus, +ve=back focus PrintConvColumns => 2, PrintConv => { 0 => 'In Focus', -32768 => 'Out of Focus', OTHER => sub { my ($val, $inv) = @_; $inv and $val =~ /([-+]?\d+)/, return $1; return $val < 0 ? "Front Focus ($val)" : "Back Focus (+$val)"; }, }, ); my %exposureIndicator = ( 0 => 'Not Indicated', 1 => 'Under Scale', 119 => 'Bottom of Scale', 120 => '-2.0', 121 => '-1.7', 122 => '-1.5', 123 => '-1.3', 124 => '-1.0', 125 => '-0.7', 126 => '-0.5', 127 => '-0.3', 128 => '0', 129 => '+0.3', 130 => '+0.5', 131 => '+0.7', 132 => '+1.0', 133 => '+1.3', 134 => '+1.5', 135 => '+1.7', 136 => '+2.0', 253 => 'Top of Scale', 254 => 'Over Scale', ); my %onOff = ( 0 => 'On', 1 => 'Off' ); my %offOn = ( 0 => 'Off', 1 => 'On' ); # Minolta tag table %Image::ExifTool::Minolta::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x0000 => { Name => 'MakerNoteVersion', Writable => 'undef', Count => 4, }, 0x0001 => { Name => 'MinoltaCameraSettingsOld', SubDirectory => { TagTable => 'Image::ExifTool::Minolta::CameraSettings', ByteOrder => 'BigEndian', }, }, 0x0003 => { Name => 'MinoltaCameraSettings', # These camera settings are different for the DiMAGE X31 Condition => '$self->{Model} ne "DiMAGE X31"', SubDirectory => { TagTable => 'Image::ExifTool::Minolta::CameraSettings', ByteOrder => 'BigEndian', }, }, 0x0004 => { #8 Name => 'MinoltaCameraSettings7D', SubDirectory => { TagTable => 'Image::ExifTool::Minolta::CameraSettings7D', ByteOrder => 'BigEndian', }, }, 0x0010 => { #20 (count: 256) Name => 'CameraInfoA100', Condition => '$$self{Model} eq "DSLR-A100"', SubDirectory => { TagTable => 'Image::ExifTool::Minolta::CameraInfoA100', ByteOrder => 'LittleEndian', }, }, # it appears that image stabilization is on if this tag exists (ref 2), # but it is an 8kB binary data block! 0x0018 => [ { Name => 'ISInfoA100', Condition => '$self->{Model} eq "DSLR-A100"', SubDirectory => { TagTable => 'Image::ExifTool::Minolta::ISInfoA100', ByteOrder => 'BigEndian', }, },{ Name => 'ImageStabilization', Condition => '$self->{Model} =~ /^DiMAGE (A1|A2|X1)$/', Notes => q{ a block of binary data which exists in DiMAGE A2 (and A1/X1?) images only if image stabilization is enabled }, ValueConv => '"On"', }, ], 0x0020 => { Name => 'WBInfoA100', Condition => '$$self{Model} eq "DSLR-A100"', Notes => 'currently decoded only for the Sony A100', SubDirectory => { TagTable => 'Image::ExifTool::Minolta::WBInfoA100', ByteOrder => 'BigEndian', }, }, 0x0040 => { Name => 'CompressedImageSize', Writable => 'int32u', }, 0x0081 => { # JPEG preview found in DiMAGE 7 images %Image::ExifTool::previewImageTagInfo, Groups => { 2 => 'Preview' }, Permanent => 1, # don't add this to a file }, 0x0088 => { Name => 'PreviewImageStart', Flags => 'IsOffset', OffsetPair => 0x0089, # point to associated byte count DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, # Note: Sony also uses this tag in A100 ARW images, but it points # to the same data as JpgFromRaw }, 0x0089 => { Name => 'PreviewImageLength', OffsetPair => 0x0088, # point to associated offset DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, }, 0x0100 => { #10 Name => 'SceneMode', Writable => 'int32u', PrintConv => \%minoltaSceneMode, }, 0x0101 => [ { Name => 'ColorMode', Condition => '$self->{Make} !~ /^SONY/', Priority => 0, # Other ColorMode is more reliable for A2 Writable => 'int32u', PrintConv => \%minoltaColorMode, }, { #15 Name => 'ColorMode', Writable => 'int32u', Notes => 'Sony models', PrintConv => \%sonyColorMode, }, ], 0x0102 => { Name => 'MinoltaQuality', Writable => 'int32u', # PrintConv strings conform with Minolta reference manual (ref 4) # (note that Minolta calls an uncompressed TIFF image "Super fine") PrintConv => { 0 => 'Raw', 1 => 'Super Fine', 2 => 'Fine', 3 => 'Standard', 4 => 'Economy', 5 => 'Extra fine', }, }, # (0x0103 is the same as 0x0102 above) -- this is true for some # cameras (A2/7Hi), but not others - PH 0x0103 => [ { Name => 'MinoltaQuality', Writable => 'int32u', Condition => '$self->{Model} =~ /^DiMAGE (A2|7Hi)$/', Notes => 'quality for DiMAGE A2/7Hi', Priority => 0, # lower priority because this doesn't work for A200 PrintConv => { #4 0 => 'Raw', 1 => 'Super Fine', 2 => 'Fine', 3 => 'Standard', 4 => 'Economy', 5 => 'Extra fine', }, }, { #PH Name => 'MinoltaImageSize', Writable => 'int32u', Condition => '$self->{Model} !~ /^DiMAGE A200$/', Notes => 'image size for other models except A200', PrintConv => { 1 => '1600x1200', 2 => '1280x960', 3 => '640x480', 5 => '2560x1920', 6 => '2272x1704', 7 => '2048x1536', }, }, ], 0x0104 => { #14 Name => 'FlashExposureComp', Description => 'Flash Exposure Compensation', Writable => 'rational64s', }, 0x0105 => { #10 Name => 'Teleconverter', Writable => 'int32u', PrintHex => 1, PrintConv => \%minoltaTeleconverters, }, 0x0107 => { #8 Name => 'ImageStabilization', Writable => 'int32u', PrintConv => { 1 => 'Off', 5 => 'On', }, }, 0x0109 => { #20 Name => 'RawAndJpgRecording', Writable => 'int32u', PrintConv => \%offOn, }, 0x010a => { Name => 'ZoneMatching', Writable => 'int32u', PrintConv => { 0 => 'ISO Setting Used', 1 => 'High Key', 2 => 'Low Key', }, }, 0x010b => { Name => 'ColorTemperature', Writable => 'int32u', }, 0x010c => { #3 (Alpha 7) Name => 'LensType', Writable => 'int32u', SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%minoltaLensTypes, }, # 0x010e - WhiteBalance according to ref #10 0x0111 => { #20 Name => 'ColorCompensationFilter', Writable => 'int32s', Notes => 'ranges from -2 for green to +2 for magenta', }, 0x0112 => { #PH (from Sony tags, NC) Name => 'WhiteBalanceFineTune', Format => 'int32s', Writable => 'int32u', }, 0x0113 => { #PH Name => 'ImageStabilization', Condition => '$self->{Model} eq "DSLR-A100"', Notes => 'valid for Sony A100 only', Writable => 'int32u', PrintConv => \%offOn, }, 0x0114 => [ { #8 Name => 'MinoltaCameraSettings5D', Condition => '$self->{Model} =~ /^(DYNAX 5D|MAXXUM 5D|ALPHA SWEET)/', SubDirectory => { TagTable => 'Image::ExifTool::Minolta::CameraSettings5D', ByteOrder => 'BigEndian', }, }, { #PH Name => 'CameraSettingsA100', Condition => '$self->{Model} eq "DSLR-A100"', SubDirectory => { TagTable => 'Image::ExifTool::Minolta::CameraSettingsA100', ByteOrder => 'BigEndian', # required because order differs for ARW and JPG images }, }, ], 0x0115 => { #20 Name => 'WhiteBalance', Writable => 'int32u', PrintHex => 1, PrintConv => { 0x00 => 'Auto', 0x01 => 'Color Temperature/Color Filter', 0x10 => 'Daylight', 0x20 => 'Cloudy', 0x30 => 'Shade', 0x40 => 'Tungsten', 0x50 => 'Flash', 0x60 => 'Fluorescent', 0x70 => 'Custom', }, }, 0x0e00 => { Name => 'PrintIM', Description => 'Print Image Matching', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main', }, }, 0x0f00 => { Name => 'MinoltaCameraSettings2', Writable => 0, Binary => 1, }, ); %Image::ExifTool::Minolta::CameraSettings = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, PRIORITY => 0, # not as reliable as other tags GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FORMAT => 'int32u', FIRST_ENTRY => 0, NOTES => q{ There is some variability in CameraSettings information between different models (and sometimes even between different firmware versions), so this information may not be as reliable as it should be. Because of this, tags in the following tables are set to lower priority to prevent them from superceding the values of same-named tags in other locations when duplicate tags are disabled. }, 1 => { Name => 'ExposureMode', PrintConv => { 0 => 'Program', 1 => 'Aperture Priority', 2 => 'Shutter Priority', 3 => 'Manual', }, }, 2 => { Name => 'FlashMode', PrintConv => { 0 => 'Fill flash', 1 => 'Red-eye reduction', 2 => 'Rear flash sync', 3 => 'Wireless', 4 => 'Off?', #PH }, }, 3 => { Name => 'WhiteBalance', PrintConv => 'Image::ExifTool::Minolta::ConvertWhiteBalance($val)', }, 4 => { Name => 'MinoltaImageSize', PrintConv => { 0 => 'Full', 1 => '1600x1200', 2 => '1280x960', 3 => '640x480', 6 => '2080x1560', #PH (A2) 7 => '2560x1920', #PH (A2) 8 => '3264x2176', #PH (A2) }, }, 5 => { Name => 'MinoltaQuality', PrintConv => { #4 0 => 'Raw', 1 => 'Super Fine', 2 => 'Fine', 3 => 'Standard', 4 => 'Economy', 5 => 'Extra Fine', }, }, 6 => { Name => 'DriveMode', PrintConv => { 0 => 'Single', 1 => 'Continuous', 2 => 'Self-timer', 4 => 'Bracketing', 5 => 'Interval', 6 => 'UHS continuous', 7 => 'HS continuous', }, }, 7 => { Name => 'MeteringMode', PrintConv => { 0 => 'Multi-segment', 1 => 'Center-weighted average', 2 => 'Spot', }, }, 8 => { Name => 'ISO', ValueConv => '2 ** (($val-48)/8) * 100', ValueConvInv => '48 + 8*log($val/100)/log(2)', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, 9 => { Name => 'ExposureTime', ValueConv => '2 ** ((48-$val)/8)', ValueConvInv => '48 - 8*log($val)/log(2)', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 10 => { Name => 'FNumber', ValueConv => '2 ** (($val-8)/16)', ValueConvInv => '8 + 16*log($val)/log(2)', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 11 => { Name => 'MacroMode', PrintConv => { 0 => 'Off', 1 => 'On', }, }, 12 => { Name => 'DigitalZoom', PrintConv => { 0 => 'Off', 1 => 'Electronic magnification', 2 => '2x', }, }, 13 => { Name => 'ExposureCompensation', ValueConv => '$val/3 - 2', ValueConvInv => '($val + 2) * 3', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 14 => { Name => 'BracketStep', PrintConv => { 0 => '1/3 EV', 1 => '2/3 EV', 2 => '1 EV', }, }, 16 => 'IntervalLength', 17 => 'IntervalNumber', 18 => { Name => 'FocalLength', ValueConv => '$val / 256', ValueConvInv => '$val * 256', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val=~s/\s*mm$//;$val', }, 19 => { Name => 'FocusDistance', ValueConv => '$val / 1000', ValueConvInv => '$val * 1000', PrintConv => '$val ? "$val m" : "inf"', PrintConvInv => '$val eq "inf" ? 0 : $val =~ s/\s*m$//, $val', }, 20 => { Name => 'FlashFired', PrintConv => { 0 => 'No', 1 => 'Yes', }, }, 21 => { Name => 'MinoltaDate', Groups => { 2 => 'Time' }, Shift => 'Time', ValueConv => 'sprintf("%4d:%.2d:%.2d",$val>>16,($val&0xff00)>>8,$val&0xff)', ValueConvInv => 'my @a=($val=~/(\d+):(\d+):(\d+)/); @a ? ($a[0]<<16)+($a[1]<<8)+$a[2] : undef', }, 22 => { Name => 'MinoltaTime', Groups => { 2 => 'Time' }, Shift => 'Time', ValueConv => 'sprintf("%.2d:%.2d:%.2d",$val>>16,($val&0xff00)>>8,$val&0xff)', ValueConvInv => 'my @a=($val=~/(\d+):(\d+):(\d+)/); @a ? ($a[0]<<16)+($a[1]<<8)+$a[2] : undef', }, 23 => { Name => 'MaxAperture', ValueConv => '2 ** (($val-8)/16)', ValueConvInv => '8 + 16*log($val)/log(2)', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 26 => { Name => 'FileNumberMemory', PrintConv => \%offOn, }, 27 => 'LastFileNumber', 28 => { Name => 'ColorBalanceRed', ValueConv => '$val / 256', ValueConvInv => '$val * 256', }, 29 => { Name => 'ColorBalanceGreen', ValueConv => '$val / 256', ValueConvInv => '$val * 256', }, 30 => { Name => 'ColorBalanceBlue', ValueConv => '$val / 256', ValueConvInv => '$val * 256', }, 31 => { Name => 'Saturation', ValueConv => '$val - ($self->{Model}=~/DiMAGE A2/ ? 5 : 3)', ValueConvInv => '$val + ($self->{Model}=~/DiMAGE A2/ ? 5 : 3)', %Image::ExifTool::Exif::printParameter, }, 32 => { Name => 'Contrast', ValueConv => '$val - ($self->{Model}=~/DiMAGE A2/ ? 5 : 3)', ValueConvInv => '$val + ($self->{Model}=~/DiMAGE A2/ ? 5 : 3)', %Image::ExifTool::Exif::printParameter, }, 33 => { Name => 'Sharpness', PrintConv => { 0 => 'Hard', 1 => 'Normal', 2 => 'Soft', }, }, 34 => { Name => 'SubjectProgram', PrintConv => { 0 => 'None', 1 => 'Portrait', 2 => 'Text', 3 => 'Night portrait', 4 => 'Sunset', 5 => 'Sports action', }, }, 35 => { Name => 'FlashExposureComp', Description => 'Flash Exposure Compensation', ValueConv => '($val - 6) / 3', ValueConvInv => '$val * 3 + 6', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 36 => { Name => 'ISOSetting', PrintConv => { 0 => 100, 1 => 200, 2 => 400, 3 => 800, 4 => 'Auto', 5 => 64, }, }, 37 => { Name => 'MinoltaModelID', PrintConv => { 0 => 'DiMAGE 7, X1, X21 or X31', 1 => 'DiMAGE 5', 2 => 'DiMAGE S304', 3 => 'DiMAGE S404', 4 => 'DiMAGE 7i', 5 => 'DiMAGE 7Hi', 6 => 'DiMAGE A1', 7 => 'DiMAGE A2 or S414', }, }, 38 => { Name => 'IntervalMode', PrintConv => { 0 => 'Still Image', 1 => 'Time-lapse Movie', }, }, 39 => { Name => 'FolderName', PrintConv => { 0 => 'Standard Form', 1 => 'Data Form', }, }, 40 => { Name => 'ColorMode', PrintConv => { 0 => 'Natural color', 1 => 'Black & White', 2 => 'Vivid color', 3 => 'Solarization', 4 => 'Adobe RGB', }, }, 41 => { Name => 'ColorFilter', ValueConv => '$val - ($self->{Model}=~/DiMAGE A2/ ? 5 : 3)', ValueConvInv => '$val + ($self->{Model}=~/DiMAGE A2/ ? 5 : 3)', }, 42 => 'BWFilter', 43 => { Name => 'InternalFlash', PrintConv => { 0 => 'No', 1 => 'Fired', }, }, 44 => { Name => 'Brightness', ValueConv => '$val/8 - 6', ValueConvInv => '($val + 6) * 8', }, 45 => 'SpotFocusPointX', 46 => 'SpotFocusPointY', 47 => { Name => 'WideFocusZone', PrintConv => { 0 => 'No zone', 1 => 'Center zone (horizontal orientation)', 2 => 'Center zone (vertical orientation)', 3 => 'Left zone', 4 => 'Right zone', }, }, 48 => { Name => 'FocusMode', PrintConv => { 0 => 'AF', 1 => 'MF', }, }, 49 => { Name => 'FocusArea', PrintConv => { 0 => 'Wide Focus (normal)', 1 => 'Spot Focus', }, }, 50 => { Name => 'DECPosition', PrintConv => { 0 => 'Exposure', 1 => 'Contrast', 2 => 'Saturation', 3 => 'Filter', }, }, # 7Hi only: 51 => { Name => 'ColorProfile', Condition => '$self->{Model} eq "DiMAGE 7Hi"', Notes => 'DiMAGE 7Hi only', PrintConv => { 0 => 'Not Embedded', 1 => 'Embedded', }, }, # (the following may be entry 51 for other models?) 52 => { Name => 'DataImprint', Condition => '$self->{Model} eq "DiMAGE 7Hi"', Notes => 'DiMAGE 7Hi only', PrintConv => { 0 => 'None', 1 => 'YYYY/MM/DD', 2 => 'MM/DD/HH:MM', 3 => 'Text', 4 => 'Text + ID#', }, }, 63 => { #9 Name => 'FlashMetering', PrintConv => { 0 => 'ADI (Advanced Distance Integration)', 1 => 'Pre-flash TTL', 2 => 'Manual flash control', }, }, ); # Camera settings used by the 7D (ref 8) %Image::ExifTool::Minolta::CameraSettings7D = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FORMAT => 'int16u', FIRST_ENTRY => 0, 0x00 => { Name => 'ExposureMode', PrintConv => { 0 => 'Program', 1 => 'Aperture Priority', 2 => 'Shutter Priority', 3 => 'Manual', 4 => 'Auto', 5 => 'Program-shift A', 6 => 'Program-shift S', }, }, 0x02 => { #PH Name => 'MinoltaImageSize', PrintConv => { 0 => 'Large', 1 => 'Medium', 2 => 'Small', }, }, 0x03 => { Name => 'MinoltaQuality', PrintConv => { 0 => 'RAW', 16 => 'Fine', #PH 32 => 'Normal', #PH 34 => 'RAW+JPEG', 48 => 'Economy', #PH }, }, 0x04 => { Name => 'WhiteBalance', PrintConv => { 0 => 'Auto', 1 => 'Daylight', 2 => 'Shade', 3 => 'Cloudy', 4 => 'Tungsten', 5 => 'Fluorescent', 0x100 => 'Kelvin', 0x200 => 'Manual', }, }, 0x0e => { Name => 'FocusMode', PrintConv => { 0 => 'AF-S', 1 => 'AF-C', # Note: these two are reversed in ref 8 3 => 'Manual', #JD 4 => 'AF-A', #JD }, }, 0x10 => { Name => 'AFPoints', PrintConv => { 0 => '(none)', BITMASK => { 0 => 'Center', 1 => 'Top', 2 => 'Top-right', 3 => 'Right', 4 => 'Bottom-right', 5 => 'Bottom', 6 => 'Bottom-left', 7 => 'Left', 8 => 'Top-left', }, }, }, 0x15 => { Name => 'Flash', PrintConv => \%offOn, }, 0x16 => { #10 Name => 'FlashMode', PrintConv => { 0 => 'Normal', 1 => 'Red-eye reduction', 2 => 'Rear flash sync', }, }, 0x1c => { Name => 'ISOSetting', PrintConv => { 0 => 'Auto', #10 1 => 100, 3 => 200, 4 => 400, 5 => 800, 6 => 1600, 7 => 3200, }, }, 0x1e => { Name => 'ExposureCompensation', Format => 'int16s', ValueConv => '$val / 24', ValueConvInv => '$val * 24', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x25 => { Name => 'ColorSpace', PrintConv => { 0 => 'Natural sRGB', 1 => 'Natural+ sRGB', 4 => 'Adobe RGB', }, }, 0x26 => { Name => 'Sharpness', ValueConv => '$val - 10', ValueConvInv => '$val + 10', }, 0x27 => { Name => 'Contrast', ValueConv => '$val - 10', ValueConvInv => '$val + 10', }, 0x28 => { Name => 'Saturation', ValueConv => '$val - 10', ValueConvInv => '$val + 10', }, 0x2d => 'FreeMemoryCardImages', 0x3f => { Format => 'int16s', Name => 'ColorTemperature', ValueConv => '$val * 100', ValueConvInv => '$val / 100', }, 0x40 => { #10 Name => 'HueAdjustment', ValueConv => '$val - 10', ValueConvInv => '$val + 10', }, 0x46 => { Name => 'Rotation', PrintConv => { 72 => 'Horizontal (normal)', 76 => 'Rotate 90 CW', 82 => 'Rotate 270 CW', }, }, 0x47 => { Name => 'FNumber', ValueConv => '2 ** (($val-8)/16)', ValueConvInv => '8 + 16*log($val)/log(2)', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0x48 => { Name => 'ExposureTime', ValueConv => '2 ** ((48-$val)/8)', ValueConvInv => '48 - 8*log($val)/log(2)', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x4a => 'FreeMemoryCardImages', 0x5e => { Name => 'ImageNumber', Notes => q{ this information may appear at index 98 (0x62), depending on firmware version }, ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x60 => { Name => 'NoiseReduction', PrintConv => \%offOn, }, 0x62 => { Name => 'ImageNumber2', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0x71 => { Name => 'ImageStabilization', PrintConv => \%offOn, }, 0x75 => { Name => 'ZoneMatchingOn', PrintConv => \%offOn, }, ); # Camera settings used by the 5D (ref 8) %Image::ExifTool::Minolta::CameraSettings5D = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FORMAT => 'int16u', FIRST_ENTRY => 0, 0x0a => { Name => 'ExposureMode', PrintConv => { 0 => 'Program', 1 => 'Aperture Priority', 2 => 'Shutter Priority', 3 => 'Manual', 4 => 'Auto?', 4131 => 'Connected Copying?', }, }, 0x0c => { #PH Name => 'MinoltaImageSize', PrintConv => { 0 => 'Large', 1 => 'Medium', 2 => 'Small', }, }, 0x0d => { Name => 'MinoltaQuality', PrintConv => { 0 => 'RAW', 16 => 'Fine', #PH 32 => 'Normal', #PH 34 => 'RAW+JPEG', 48 => 'Economy', #PH }, }, 0x0e => { Name => 'WhiteBalance', PrintConv => { 0 => 'Auto', 1 => 'Daylight', 2 => 'Cloudy', 3 => 'Shade', 4 => 'Tungsten', 5 => 'Fluorescent', 6 => 'Flash', 0x100 => 'Kelvin', 0x200 => 'Manual', }, }, # 0x0f-0x11 something to do with WB RGB levels as shot? (PH) # 0x12-0x17 RGB levels for other WB modes (with G missing)? (PH) 0x1f => { #PH Name => 'Flash', PrintConv => { 0 => 'Did not fire', 1 => 'Fired', }, }, 0x20 => { #10 Name => 'FlashMode', PrintConv => { 0 => 'Normal', 1 => 'Red-eye reduction', 2 => 'Rear flash sync', }, }, 0x25 => { Name => 'MeteringMode', PrintConv => { 0 => 'Multi-segment', 1 => 'Center-weighted average', 2 => 'Spot', }, }, 0x26 => { Name => 'ISOSetting', PrintConv => { 0 => 'Auto', 1 => 100, 3 => 200, 4 => 400, 5 => 800, 6 => 1600, 7 => 3200, 8 => '200 (Zone Matching High)', 10 => '80 (Zone Matching Low)', }, }, # looks wrong: # 0x28 => { #10 # Name => 'ExposureCompensation', # ValueConv => '$val / 24', # ValueConvInv => '$val * 24', # }, 0x2f => { #10 Name => 'ColorSpace', PrintConv => { 0 => 'Natural sRGB', 1 => 'Natural+ sRGB', 2 => 'Monochrome', 4 => 'Adobe RGB (ICC)', 5 => 'Adobe RGB', }, }, 0x30 => { Name => 'Sharpness', ValueConv => '$val - 10', ValueConvInv => '$val + 10', }, 0x31 => { Name => 'Contrast', ValueConv => '$val - 10', ValueConvInv => '$val + 10', }, 0x32 => { Name => 'Saturation', ValueConv => '$val - 10', ValueConvInv => '$val + 10', }, 0x35 => { #PH Name => 'ExposureTime', ValueConv => '2 ** ((48-$val)/8)', ValueConvInv => '48 - 8*log($val)/log(2)', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x36 => { #PH Name => 'FNumber', ValueConv => '2 ** (($val-8)/16)', ValueConvInv => '8 + 16*log($val)/log(2)', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0x37 => 'FreeMemoryCardImages', # 0x38 definitely not related to exposure comp as in ref 8 (PH) 0x49 => { #PH Name => 'ColorTemperature', Format => 'int16s', ValueConv => '$val * 100', ValueConvInv => '$val / 100', }, 0x4a => { #10 Name => 'HueAdjustment', ValueConv => '$val - 10', ValueConvInv => '$val + 10', }, 0x50 => { Name => 'Rotation', PrintConv => { 72 => 'Horizontal (normal)', 76 => 'Rotate 90 CW', 82 => 'Rotate 270 CW', }, }, 0x53 => { Name => 'ExposureCompensation', ValueConv => '$val / 100 - 3', ValueConvInv => '($val + 3) * 100', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x54 => 'FreeMemoryCardImages', 0x65 => { #10 Name => 'Rotation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', }, }, # 0x66 maybe program mode or some setting like this? (PH) 0x6e => { #10 Name => 'ColorTemperature', Format => 'int16s', ValueConv => '$val * 100', ValueConvInv => '$val / 100', }, 0x71 => { #10 Name => 'PictureFinish', PrintConv => { 0 => 'Natural', 1 => 'Natural+', 2 => 'Portrait', 3 => 'Wind Scene', 4 => 'Evening Scene', 5 => 'Night Scene', 6 => 'Night Portrait', 7 => 'Monochrome', 8 => 'Adobe RGB', 9 => 'Adobe RGB (ICC)', }, }, # 0x95 FlashStrength? (PH) # 0xa4 similar information to 0x27, except with different values 0xae => { Name => 'ImageNumber', ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 0xb0 => { Name => 'NoiseReduction', PrintConv => \%offOn, }, 0xbd => { Name => 'ImageStabilization', PrintConv => \%offOn, }, ); # Camera settings used by the Sony DSLR-A100 (ref 20) %Image::ExifTool::Minolta::CameraInfoA100 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, NOTES => 'Camera information for the Sony DSLR-A100.', WRITABLE => 1, PRIORITY => 0, # may not be as reliable as other information GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, 0x01 => { #PH Name => 'AFSensorActive', PrintConv => { 0 => 'Top-right', 1 => 'Bottom-right', 2 => 'Bottom', 3 => 'Middle Horizontal', 4 => 'Center Vertical', 5 => 'Top', 6 => 'Top-left', 7 => 'Bottom-left', }, }, 0x02 => { Name => 'AFStatusActiveSensor', %afStatusInfo, Notes => q{ the focus status at shutter release. May not reflect the status after focusing if the image is focused then recomposed }, }, 0x04 => { Name => 'AFStatusTop-right', %afStatusInfo }, 0x06 => { Name => 'AFStatusBottom-right', %afStatusInfo }, 0x08 => { Name => 'AFStatusBottom', %afStatusInfo }, 0x0a => { Name => 'AFStatusMiddleHorizontal', %afStatusInfo, Notes => q{ any of the three horizontal sensors at the middle of the focus frame: Left, Center or Right }, }, 0x0c => { Name => 'AFStatusCenterVertical', %afStatusInfo }, 0x0e => { Name => 'AFStatusTop', %afStatusInfo }, 0x10 => { Name => 'AFStatusTop-left', %afStatusInfo }, 0x12 => { Name => 'AFStatusBottom-left', %afStatusInfo }, 0x14 => { Name => 'FocusLocked', # (Focus can be locked in all modes other than Manual and Continuous, # and the latter can be overridden by pushing the Spot AF button) PrintConv => { 0 => 'Manual Focus', 4 => 'No', 16 => 'Continuous Focus', 64 => 'Yes', }, }, 0x15 => { Name => 'AFPoint', PrintConvColumns => 2, PrintConv => { 0 => 'Auto', 1 => 'Center', 2 => 'Top', 3 => 'Top-right', 4 => 'Right', 5 => 'Bottom-right', 6 => 'Bottom', 7 => 'Bottom-left', 8 => 'Left', 9 => 'Top-left', }, }, 0x16 => { Name => 'AFMode', PrintConv => { 0 => 'DMF', 1 => 'AF-S', 2 => 'AF-C', 3 => 'AF-A', }, }, 0x2d => { Name => 'AFStatusLeft', %afStatusInfo }, 0x2f => { Name => 'AFStatusCenterHorizontal',%afStatusInfo }, 0x31 => { Name => 'AFStatusRight', %afStatusInfo }, 0x33 => { Name => 'AFAreaMode', PrintConv => { 0 => 'Wide', 1 => 'Local', 2 => 'Spot', }, }, ); # Image stabilization inforamtion used by the Sony DSLR-A100 (ref 20) %Image::ExifTool::Minolta::ISInfoA100 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, NOTES => 'Image stabilization information for the Sony DSLR-A100.', WRITABLE => 1, PRIORITY => 0, # may not be as reliable as other information GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, 0 => { Name => 'ImageStabilization', Format => 'int16u', PrintHex => 1, PrintConv => { 0x0000 => 'Off', 0x2784 => 'On', }, }, ); # Camera settings used by the Sony DSLR-A100 (ref PH) %Image::ExifTool::Minolta::CameraSettingsA100 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, NOTES => 'Camera settings information for the Sony DSLR-A100.', WRITABLE => 1, PRIORITY => 0, # may not be as reliable as other information GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FORMAT => 'int16u', FIRST_ENTRY => 0, 0x00 => { #15 Name => 'ExposureMode', PrintHex => 1, PrintConv => { 0 => 'Program', 1 => 'Aperture Priority', 2 => 'Shutter Priority', 3 => 'Manual', 4 => 'Auto', 5 => 'Program Shift A', #20 6 => 'Program Shift S', #20 0x1013 => 'Portrait', 0x1023 => 'Sports', #20 0x1033 => 'Sunset', #20 0x1043 => 'Night View/Portrait', #20 0x1053 => 'Landscape', 0x1083 => 'Macro', #20 }, }, 0x01 => { #15 Name => 'ExposureCompensationSetting', # (differs from ExposureCompensation for exposure bracketing shots, ref 20) ValueConv => '$val / 100 - 3', ValueConvInv => 'int(($val + 3) * 100 + 0.5)', }, 0x05 => { #20 (requires external flash) Name => 'HighSpeedSync', PrintConv => \%offOn, }, 0x06 => { #20 Name => 'ShutterSpeedSetting', Notes => 'used only in M and S exposure modes', ValueConv => '$val ? 2 ** (6 - $val/8) : 0', ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0', PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }, 0x07 => { #20 Name => 'ApertureSetting', Notes => 'used only in M and A exposure modes', ValueConv => '2 ** (($val/8 - 1) / 2)', ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', PrintConvInv => '$val', }, 0x08 => { #20 Name => 'ExposureTime', ValueConv => '$val ? 2 ** (6 - $val/8) : 0', ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0', PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }, 0x09 => { #15/20 Name => 'FNumber', ValueConv => '2 ** (($val/8 - 1) / 2)', ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', PrintConvInv => '$val', }, 0x0a => { #20 Name => 'DriveMode2', # (one of these is probably DriveModeSetting like Sony - PH) PrintHex => 1, PrintConv => { 0x000 => 'Self-timer 10 sec', 0x001 => 'Continuous', 0x302 => 'Single-frame Bracketing Low', 0x702 => 'Single-frame Bracketing High', 0x303 => 'Continous Bracketing Low', 0x703 => 'Continuous Bracketing High', 0x004 => 'Self-timer 2 sec', 0x005 => 'Single Frame', 0x008 => 'White Balance Bracketing Low', 0x009 => 'White Balance Bracketing High', }, }, 0x0b => { #15 Name => 'WhiteBalance', PrintHex => 1, PrintConv => { 0 => 'Auto', 1 => 'Daylight', 2 => 'Cloudy', 3 => 'Shade', 4 => 'Tungsten', 5 => 'Fluorescent', 6 => 'Flash', 0x100 => 'Kelvin', 0x200 => 'Manual', }, }, 0x0c => { #20 Name => 'FocusMode', PrintConv => { 0 => 'AF-S', 1 => 'AF-C', 4 => 'AF-A', 5 => 'Manual', 6 => 'DMF', }, }, 0x0d => { #20 Name => 'AFPointSelected', # (v8.88: renamed from LocalAFAreaPoint) # (9-point centre-cross AF system, ref JR) PrintConv => { 1 => 'Center', 2 => 'Top', 3 => 'Top-right', 4 => 'Right', 5 => 'Bottom-right', 6 => 'Bottom', 7 => 'Bottom-left', 8 => 'Left', 9 => 'Top-left', }, }, 0x0e => { #20 Name => 'AFAreaMode', PrintConv => { 0 => 'Wide', 1 => 'Local', 2 => 'Spot', }, }, 0x0f => { #20 Name => 'FlashMode', PrintConv => { 0 => 'Auto', 2 => 'Rear Sync', 3 => 'Wireless', 4 => 'Fill Flash', }, }, 0x10 => { #20 Name => 'FlashExposureCompSet', Description => 'Flash Exposure Comp. Setting', # (may differ from FlashExposureComp for flash bracketing shots) ValueConv => '$val / 100 - 3', ValueConvInv => 'int(($val + 3) * 100 + 0.5)', }, 0x12 => { #15/20 Name => 'MeteringMode', PrintConv => { 0 => 'Multi-segment', 1 => 'Center-weighted average', 2 => 'Spot', }, }, 0x13 => { #15/20 Name => 'ISOSetting', PrintConv => { 0 => 'Auto', 48 => 100, 56 => 200, 64 => 400, 72 => 800, 80 => 1600, 174 => '80 (Zone Matching Low)', 184 => '200 (Zone Matching High)', }, }, 0x14 => { #15/20 Name => 'ZoneMatchingMode', PrintConv => { 0 => 'Off', 1 => 'Standard', 2 => 'Advanced', }, }, 0x15 => { #15/20 Name => 'DynamicRangeOptimizer', # this and the Sony tag 0xb025 DynamicRangeOptimizer give the actual mode # applied to the image. The Minolta CameraSettingsA100 0x0027 tag gives # the setting. There is a longish list of scenarios in which, regardless # of the latter, DRO is not applied (ref 20) Notes => 'as applied to image', PrintConv => { 0 => 'Off', 1 => 'Standard', 2 => 'Advanced', }, }, 0x16 => { #15 Name => 'ColorMode', PrintConv => { 0 => 'Standard', 1 => 'Vivid', 2 => 'Portrait', 3 => 'Landscape', 4 => 'Sunset', 5 => 'Night Scene', 7 => 'B&W', 8 => 'Adobe RGB', }, }, 0x17 => { # 15/20 Name => 'ColorSpace', PrintConv => { 0 => 'sRGB', 2 => 'B&W', #PH (A100) 5 => 'Adobe RGB', }, }, 0x18 => { #15 Name => 'Sharpness', ValueConv => '$val - 10', ValueConvInv => '$val + 10', %Image::ExifTool::Exif::printParameter, }, 0x19 => { #15 Name => 'Contrast', ValueConv => '$val - 10', ValueConvInv => '$val + 10', %Image::ExifTool::Exif::printParameter, }, 0x1a => { #15 Name => 'Saturation', ValueConv => '$val - 10', ValueConvInv => '$val + 10', %Image::ExifTool::Exif::printParameter, }, 0x1c => { #20 Name => 'FlashMetering', PrintConv => { 0 => 'ADI (Advanced Distance Integration)', 1 => 'Pre-flash TTL', }, }, 0x1d => { #20 Name => 'PrioritySetupShutterRelease', PrintConv => { 0 => 'AF', 1 => 'Release', }, }, 0x1e => { #PH Name => 'DriveMode', PrintConv => { 0 => 'Single Frame', 1 => 'Continuous', 2 => 'Self-timer', 3 => 'Continuous Bracketing', 4 => 'Single-Frame Bracketing', 5 => 'White Balance Bracketing', }, }, 0x1f => { #20 Name => 'SelfTimerTime', PrintConv => { 0 => '10 s', 4 => '2 s', }, }, 0x20 => { #20 Name => 'ContinuousBracketing', PrintHex => 1, PrintConv => { 0x303 => 'Low', 0x703 => 'High', }, }, 0x21 => { #20 Name => 'SingleFrameBracketing', PrintHex => 1, PrintConv => { 0x302 => 'Low', 0x702 => 'High', }, }, 0x22 => { #20 Name => 'WhiteBalanceBracketing', PrintHex => 1, PrintConv => { 0x08 => 'Low', 0x09 => 'High', }, }, 0x023 => { #20 Name => 'WhiteBalanceSetting', PrintHex => 1, # (not sure what bit 0x8000 indicates) PrintConv => { 0 => 'Auto', 1 => 'Preset', 2 => 'Custom', 3 => 'Color Temperature/Color Filter', 0x8001 => 'Preset', 0x8002 => 'Custom', 0x8003 => 'Color Temperature/Color Filter', }, }, 0x24 => { #20 Name => 'PresetWhiteBalance', PrintConv => { 1 => 'Daylight', 2 => 'Cloudy', 3 => 'Shade', 4 => 'Tungsten', 5 => 'Fluorescent', 6 => 'Flash', }, }, 0x25 => { #20 Name => 'ColorTemperatureSetting', PrintConv => { 0 => 'Temperature', 2 => 'Color Filter', }, }, 0x26 => { #20 Name => 'CustomWBSetting', PrintConv => { 0 => 'Setup', 1 => 'Recall', }, }, 0x27 => { #20 Name => 'DynamicRangeOptimizerSetting', Notes => 'as set in camera', PrintConv => { 0 => 'Off', 1 => 'Standard', 2 => 'Advanced', }, }, 0x32 => 'FreeMemoryCardImages', #20 0x34 => 'CustomWBRedLevel', #20 0x35 => 'CustomWBGreenLevel', #20 0x36 => 'CustomWBBlueLevel', #20 0x37 => { #20 Name => 'CustomWBError', PrintConv => { 0 => 'OK', 1 => 'Error', }, }, 0x38 => { #20 Name => 'WhiteBalanceFineTune', Format => 'int16s', }, 0x39 => { #20 Name => 'ColorTemperature', ValueConv => '$val * 100', ValueConvInv => '$val / 100', }, 0x3a => { #20 Name => 'ColorCompensationFilter', Format => 'int16s', Notes => 'ranges from -2 for green to +2 for magenta', }, 0x3b => { #20 Name => 'SonyImageSize', PrintConv => { 0 => 'Standard', 1 => 'Medium', 2 => 'Small', }, }, 0x3c => { #20 Name => 'SonyQuality', PrintConv => { 0 => 'RAW', 32 => 'Fine', 34 => 'RAW + JPEG', 48 => 'Standard', }, }, 0x3d => { #20 Name => 'InstantPlaybackTime', PrintConv => '"$val s"', PrintConvInv => '$val=~s/\s*s//; $val', }, 0x3e => { #20 Name => 'InstantPlaybackSetup', PrintConv => { 0 => 'Image and Information', 1 => 'Image Only', # 2 appears to be unused 3 => 'Image and Histogram', }, }, 0x3f => { #PH Name => 'NoiseReduction', PrintConv => \%offOn, }, 0x40 => { #20 Name => 'EyeStartAF', PrintConv => \%onOff, }, 0x41 => { #20 Name => 'RedEyeReduction', PrintConv => \%offOn, }, 0x42 => { #20 Name => 'FlashDefault', PrintConv => { 0 => 'Auto', 1 => 'Fill Flash', }, }, 0x43 => { #20 Name => 'AutoBracketOrder', PrintConv => { 0 => '0 - +', 1 => '- 0 +', }, }, 0x44 => { #20 Name => 'FocusHoldButton', PrintConv => { 0 => 'Focus Hold', 1 => 'DOF Preview', }, }, 0x45 => { #20 Name => 'AELButton', PrintConv => { 0 => 'Hold', 1 => 'Toggle', 2 => 'Spot Hold', 3 => 'Spot Toggle', }, }, 0x46 => { #20 Name => 'ControlDialSet', PrintConv => { 0 => 'Shutter Speed', 1 => 'Aperture', }, }, 0x47 => { #20 Name => 'ExposureCompensationMode', PrintConv => { 0 => 'Ambient and Flash', 1 => 'Ambient Only', }, }, 0x48 => { #20 Name => 'AFAssist', PrintConv => \%onOff, }, 0x49 => { #20 Name => 'CardShutterLock', PrintConv => \%onOff, }, 0x4a => { #20 Name => 'LensShutterLock', PrintConv => \%onOff, }, 0x4b => { #20 Name => 'AFAreaIllumination', PrintConv => { 0 => '0.3 s', 1 => '0.6 s', 2 => 'Off', }, }, 0x4c => { #20 Name => 'MonitorDisplayOff', PrintConv => { 0 => 'Automatic', 1 => 'Manual', }, }, 0x4d => { #20 Name => 'RecordDisplay', PrintConv => { 0 => 'Auto Rotate', 1 => 'Horizontal', }, }, 0x4e => { #20 Name => 'PlayDisplay', PrintConv => { 0 => 'Auto Rotate', 1 => 'Manual Rotate', }, }, 0x50 => { #20 Name => 'ExposureIndicator', SeparateTable => 'ExposureIndicator', PrintConv => \%exposureIndicator, }, 0x51 => { #20 Name => 'AELExposureIndicator', Notes => 'also indicates exposure for next shot when bracketing', SeparateTable => 'ExposureIndicator', PrintConv => \%exposureIndicator, }, 0x52 => { #20 Name => 'ExposureBracketingIndicatorLast', Notes => 'indicator for last shot when bracketing', SeparateTable => 'ExposureIndicator', PrintConv => \%exposureIndicator, }, 0x53 => { #20 Name => 'MeteringOffScaleIndicator', Notes => 'two flashing triangles when under or over metering scale', PrintConv => { 0 => 'Within Range', 1 => 'Under/Over Range', 255 => 'Out of Range', }, }, 0x54 => { #20 Name => 'FlashExposureIndicator', SeparateTable => 'ExposureIndicator', PrintConv => \%exposureIndicator, }, 0x55 => { #20 Name => 'FlashExposureIndicatorNext', Notes => 'indicator for next shot when bracketing', SeparateTable => 'ExposureIndicator', PrintConv => \%exposureIndicator, }, 0x56 => { #20 Name => 'FlashExposureIndicatorLast', Notes => 'indicator for last shot when bracketing', SeparateTable => 'ExposureIndicator', PrintConv => \%exposureIndicator, }, 0x58 => { #20 Name => 'FocusModeSwitch', PrintConv => { 0 => 'AF', 1 => 'MF', }, }, 0x59 => { #20 Name => 'FlashType', PrintConv => { 0 => 'Off', 1 => 'Built-in', # (also when built-in flash is a trigger in wireless mode) 2 => 'External', }, }, 0x5a => { #15 Name => 'Rotation', PrintConv => { 0 => 'Horizontal (Normal)', 1 => 'Rotate 270 CW', 2 => 'Rotate 90 CW', }, }, 0x5b => { #20 Name => 'AELock', PrintConv => \%offOn, }, 0x57 => { #15 Name => 'ImageStabilization', PrintConv => \%offOn, }, 0x5e => { #15 Name => 'ColorTemperature', ValueConv => '$val * 100', ValueConvInv => '$val / 100', }, 0x5f => { #20 Name => 'ColorCompensationFilter', Format => 'int16s', Notes => 'ranges from -2 for green to +2 for magenta', }, 0x60 => { #20 Name => 'BatteryState', PrintConv => { 3 => 'Very Low', 4 => 'Low', 5 => 'Half Full', 6 => 'Sufficient Power Remaining', }, }, ); # white balance information stored by the Sony DSLR-A100 (ref 20) %Image::ExifTool::Minolta::WBInfoA100 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, NOTES => 'White balance information for the Sony DSLR-A100.', WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, PRIORITY => 0, 0x0e => { Name => 'DriveMode', PrintConv => { 0 => 'Self-timer 10 sec', 1 => 'Continuous', 2 => 'Single-frame Exposure Bracketing', 3 => 'Continuous Exposure Bracketing', 4 => 'Self-Timer 2 sec', 5 => 'Single Frame', 8 => 'White Balance Bracketing Low', 9 => 'White Balance Bracketing High', }, }, 0x10 => { Name => 'Rotation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 270 CW', 2 => 'Rotate 90 CW', }, }, 0x14 => { Name => 'ImageStabilizationSetting', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x15 => { Name => 'DynamicRangeOptimizerMode', PrintConv => { 0 => 'Off', 1 => 'Standard', 2 => 'Advanced', }, }, 0x2a => { Name => 'ExposureCompensationMode', PrintConv => { 0 => 'Ambient and Flash', 1 => 'Ambient Only', }, }, 0x2b => 'WBBracketShotNumber', 0x2c => { Name => 'WhiteBalanceBracketing', PrintConv => { 0 => 'Off', 1 => 'Low', 2 => 'High', }, }, 0x2d => 'ExposureBracketShotNumber', 0x31 => { Name => 'FlashFunction', Format => 'int16u', PrintHex => 1, PrintConv => { 0x0000 => 'No flash', 0x0300 => 'Built-in flash', # (the following refers to an external flash) 0x1205 => 'Manual', 0x120e => 'Strobe', #0x122e => ? 0x128e => 'Fill flash, Pre-flash TTL', 0x12ae => 'Bounce flash', 0x140e => 'Rear sync, ADI', 0x148e => 'Fill flash, ADI', 0x1580 => 'Wireless', # 0x17ae => ? 0x178e => 'HSS', }, }, 0x34 => { Name => 'ExposureMode', Format => 'int16u', PrintHex => 1, PrintConvColumns => 2, PrintConv => { 0x0000 => 'Program', 0x0001 => 'Aperture Priority', 0x0002 => 'Shutter Priority', 0x0003 => 'Manual', 0x0004 => 'Auto', 0x0005 => 'Program Shift A', 0x0006 => 'Program Shift S', 0x1013 => 'Portrait', 0x1023 => 'Sports', 0x1033 => 'Sunset', 0x1043 => 'Night View/Portrait', 0x1053 => 'Landscape', 0x1083 => 'Macro', }, }, 0x36 => { Name => 'ColorMode', Format => 'int16u', PrintConv => { 0x00 => 'Standard', 0x01 => 'Vivid', 0x02 => 'Portrait', 0x03 => 'Landscape', 0x04 => 'Sunset', 0x05 => 'Night View', 0x07 => 'B&W', 0x08 => 'Adobe RGB', }, }, 0x38 => { Name => 'AverageLV', Format => 'int16u', Notes => 'arithmetic mean of the readings from the 40 honeycomb segments', ValueConv => '($val-106)/8', ValueConvInv => '$val * 8 + 106', }, # 0x3a - int16u: Approx FocusDistance in metres (0x0f50=inf) 0x3c => { Name => 'FrameNumber', # Numbers > 1 appear in continuous and continuous bracketing drive modes, # as well as WB bracketing. }, 0x96 => { Name => 'WB_RGBLevels', Format => 'int16u[3]' }, 0xae => { Name => 'WB_GBRGLevels', Format => 'int16u[4]' }, 0xc0 => { Name => 'WB_RedLevelsTungsten', Notes => '7 values for adjustments of -3 through +3', Format => 'int16u[7]', }, 0xce => { Name => 'WB_BlueLevelsTungsten', Format => 'int16u[7]' }, 0xdc => { Name => 'WB_RedLevelsDaylight', Format => 'int16u[7]' }, 0xea => { Name => 'WB_BlueLevelsDaylight', Format => 'int16u[7]' }, 0xf8 => { Name => 'WB_RedLevelsCloudy', Format => 'int16u[7]' }, 0x106 => { Name => 'WB_BlueLevelsCloudy', Format => 'int16u[7]' }, 0x114 => { Name => 'WB_RedLevelsFlash', Format => 'int16u[7]' }, 0x122 => { Name => 'WB_BlueLevelsFlash', Format => 'int16u[7]' }, 0x14c => { Name => 'WB_RedLevelsFluorescent', Format => 'int16u[7]', Notes => q{ white balance red presets for fluorescent -2 through +4: -2=Fluorescent, -1=WhiteFluorescent, 0=CoolWhiteFluorescent, +1=DayWhiteFluorescent and +3=DaylightFluorescent }, }, 0x15a => { Name => 'WB_BlueLevelsFluorescent', Format => 'int16u[7]' }, 0x168 => { Name => 'WB_RedLevelsShade', Format => 'int16u[7]' }, 0x176 => { Name => 'WB_BlueLevelsShade', Format => 'int16u[7]' }, 0x188 => { Name => 'WB_RedLevel6500K', Format => 'int16u' }, 0x18a => { Name => 'WB_BlueLevel6500K', Format => 'int16u' }, 0x18c => { Name => 'WB_RedLevelCustom', Format => 'int16u' }, 0x18e => { Name => 'WB_BlueLevelCustom', Format => 'int16u' }, 0x198 => { Name => 'WB_RedLevel3500K', Format => 'int16u' }, 0x19a => { Name => 'WB_BlueLevel3500K', Format => 'int16u' }, 0x1be => { Name => 'WB_RedLevelsKelvin', Format => 'int16u[75]', Notes => 'values for 2500-9900 K, in increments of 100 K', }, 0x254 => { Name => 'WB_BlueLevelsKelvin', Format => 'int16u[75]' }, 0x304 => { Name => 'WB_RBLevelsFlash', Format => 'int16u[2]' }, 0x308 => { Name => 'WB_RBLevelsCoolWhiteF', Format => 'int16u[2]' }, 0x3e8 => { Name => 'WB_RBLevelsTungsten', Format => 'int16u[2]' }, 0x3ec => { Name => 'WB_RBLevelsDaylight', Format => 'int16u[2]' }, 0x3f0 => { Name => 'WB_RBLevelsCloudy', Format => 'int16u[2]' }, 0x3f4 => { Name => 'WB_RBLevelsFlash', Format => 'int16u[2]' }, 0x3fc => { Name => 'WB_RedLevelsFluorescent', Format => 'int16u[7]' }, 0x40a => { Name => 'WB_BlueLevelsFluorescent', Format => 'int16u[7]' }, 0x418 => { Name => 'WB_RBLevelsShade', Format => 'int16u[2]' }, 0x420 => { Name => 'WB_RBLevels6500K', Format => 'int16u[2]' }, 0x424 => { Name => 'WB_RBLevelsCustom', Format => 'int16u[2]' }, 0x430 => { Name => 'WB_RBLevels3500K', Format => 'int16u[2]' }, 0x528 => { Name => 'WB_RBLevelsDaylight', Format => 'int16u[2]' }, 0x546 => { Name => 'WB_RGBLevels', Format => 'int16u[3]' }, 0x628 => { Name => 'AEMeteringSegments', Format => 'int8u[40]', Notes => q{ metering values from the 40 honeycomb segments, converted to LV. The first value is for the outer cell, then the values are given row by row, from top to bottom, with each row scanned left-to-right. The 21st value is the middle cell, which gives the spot metering }, ValueConv => sub { join ' ', map( { ($_ - 106) / 8 } split(' ',$_[0]) ) }, ValueConvInv => sub { join ' ', map( { int($_ * 8 + 106.5) } split(' ',$_[0]) ) }, }, 0x690 => { Name => 'MeasuredLV', Notes => 'measured light value based on MeteringMode', ValueConv => '($val-106)/8', ValueConvInv => '$val * 8 + 106', }, 0x691 => { Name => 'BrightnessValue', ValueConv => '($val-106)/8', ValueConvInv => '$val * 8 + 106', }, # 0x87f - int8u: 33mm Equivalent magnification (FocusDistance = (1.5 * $val + 1) * FocalLength) (255=inf) 0x104c => { # (9600 bytes: 4 sets of 40x30 int16u values in the range 0-8191) Name => 'TiffMeteringImage', Format => 'undef[9600]', Notes => q{ 13-bit RBGG (?) 40x30 pixels, presumably metering info, converted to a 16-bit TIFF image; }, ValueConv => sub { my ($val, $et) = @_; return undef unless length $val >= 9600; return \ "Binary data 7404 bytes" unless $et->Options('Binary'); my @dat = unpack('n*', $val); # for Big-endian # TIFF header for a 16-bit RGB 10dpi 40x30 image $val = Image::ExifTool::Sony::MakeTiffHeader(40,30,3,16,10); # re-order data to RGB pixels my ($i, @val); for ($i=0; $i<40*30; ++$i) { # data is 13-bit (max 8191), shift left to fill 16 bits # (typically, this gives a very dark image since the data should # really be anti-logged to convert from EV to perceived brightness) # push @val, $dat[$i]<<3, $dat[$i+2400]<<3, $dat[$i+1200]<<3; push @val, int(5041.1*log($dat[$i]+1)/log(2)), int(5041.1*log($dat[$i+2400]+1)/log(2)), int(5041.1*log($dat[$i+1200]+1)/log(2)); } $val .= pack('v*', @val); # add TIFF strip data return \$val; }, }, 0x49b8 => { Name => 'ExposureTime', ValueConv => '$val ? 2 ** (6 - $val/8) : 0', ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0', PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }, 0x49ba => { Name => 'ISO', ValueConv => '2 ** (($val-48)/8) * 100', ValueConvInv => '48 + 8*log($val/100)/log(2)', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, 0x49bb => { # (http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3688.0.html) # if this value is the 35mm equivalent magnification, then the formula could # be (1.5 * 2**($val/16-5)+1) * FocalLength, but this tends to underestimate # distance by about 18% (ref 20) (255=inf) Name => 'FocusDistance', ValueConv => '2**(($val-126)/16)', ValueConvInv => 'log($val)/log(2)*16+126', PrintConv => '$val > 266 ? "inf" : sprintf("%.2f m", $val)', PrintConvInv => '$val=~s/ ?m//; $val=~/inf/i ? 267 : $val', }, 0x49bd => { Name => 'LensType', Format => 'int16uRev', SeparateTable => 1, ValueConvInv => 'int($val)', # (must truncate decimal part) PrintConv => \%minoltaLensTypes, }, 0x49c0 => { Name => 'ExposureCompensation', # (in exposure bracketing, this is the actual value used) Format => 'int8s', ValueConv => '$val / 8', ValueConvInv => '$val * 8', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x49c1 => { Name => 'FlashExposureComp', Description => 'Flash Exposure Compensation', Format => 'int8s', ValueConv => '$val / 8', ValueConvInv => '$val * 8', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x49c2 => { Name => 'ImageStabilization', PrintConv => \%offOn, }, 0x49c3 => { Name => 'BrightnessValue', ValueConv => '($val-106)/8', ValueConvInv => '$val * 8 + 106', }, 0x49c5 => { Name => 'MaxAperture', ValueConv => '2 ** (($val-8)/16)', ValueConvInv => '8 + 16*log($val)/log(2)', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, # 0x49c6 - gives focal length using same formula as 0x49bb 0x49c7 => { Name => 'FNumber', ValueConv => '2 ** (($val-8)/16)', ValueConvInv => '8 + 16*log($val)/log(2)', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0x49dc => { Name => 'InternalSerialNumber', Format => 'string[12]', }, ); # tags in Konica Minolta MOV videos (ref PH) # (similar information in Kodak,Minolta,Nikon,Olympus,Pentax and Sanyo videos) %Image::ExifTool::Minolta::MOV1 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, NOTES => q{ This information is found in MOV videos from some Konica Minolta models such as the DiMage Z10 and X50. }, 0 => { Name => 'Make', Format => 'string[32]', }, 0x20 => { Name => 'ModelType', Format => 'string[8]', }, # (01 00 at offset 0x28) 0x2e => { Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val ? 10 / $val : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x32 => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', }, 0x3a => { Name => 'ExposureCompensation', Format => 'rational64s', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', }, # 0x4c => 'WhiteBalance', ? 0x50 => { Name => 'FocalLength', Format => 'rational64u', PrintConv => 'sprintf("%.1f mm",$val)', }, ); # tags in Minolta MOV videos (ref PH) # (similar information in Kodak,Minolta,Nikon,Olympus,Pentax and Sanyo videos) %Image::ExifTool::Minolta::MOV2 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, NOTES => q{ This information is found in MOV videos from some Minolta models such as the DiMAGE X and Xt. }, 0 => { Name => 'Make', Format => 'string[32]', }, 0x18 => { Name => 'ModelType', Format => 'string[8]', }, # (01 00 at offset 0x20) 0x26 => { Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val ? 10 / $val : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x2a => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', }, 0x32 => { Name => 'ExposureCompensation', Format => 'rational64s', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', }, # 0x44 => 'WhiteBalance', ? 0x48 => { Name => 'FocalLength', Format => 'rational64u', PrintConv => 'sprintf("%.1f mm",$val)', }, ); # more tags in Minolta MOV videos (ref PH) %Image::ExifTool::Minolta::MMA = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ This information is found in MOV videos from Minolta models such as the DiMAGE A2, S414 and 7Hi. }, 0 => { Name => 'Make', Format => 'string[20]', }, 20 => { Name => 'SoftwareVersion', Format => 'string[16]', }, ); # basic Minolta white balance lookup my %minoltaWhiteBalance = ( 0 => 'Auto', 1 => 'Daylight', 2 => 'Cloudy', 3 => 'Tungsten', 5 => 'Custom', 7 => 'Fluorescent', 8 => 'Fluorescent 2', 11 => 'Custom 2', 12 => 'Custom 3', # the following come from tests with the A2 (ref 2) 0x0800000 => 'Auto', 0x1800000 => 'Daylight', 0x2800000 => 'Cloudy', 0x3800000 => 'Tungsten', 0x4800000 => 'Flash', 0x5800000 => 'Fluorescent', 0x6800000 => 'Shade', 0x7800000 => 'Custom1', 0x8800000 => 'Custom2', 0x9800000 => 'Custom3', ); #------------------------------------------------------------------------------ # PrintConv for Minolta white balance sub ConvertWhiteBalance($) { my $val = shift; my $printConv = $minoltaWhiteBalance{$val}; unless (defined $printConv) { if ($val & 0xffff0000) { # the A2 values can be shifted by += 3 settings, where # each setting adds or subtracts 0x0010000 (ref 2) my $type = ($val & 0xff000000) + 0x800000; if ($minoltaWhiteBalance{$type}) { $printConv = $minoltaWhiteBalance{$type} . sprintf("%+.8g", ($val - $type) / 0x10000); } else { $printConv = sprintf("Unknown (0x%x)", $val); } } else { $printConv = sprintf("Unknown ($val)"); } } return $printConv; } 1; # end __END__ =head1 NAME Image::ExifTool::Minolta - Minolta EXIF maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Minolta and Konica-Minolta maker notes in EXIF information, and to read and write Minolta RAW (MRW) images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.dalibor.cz/minolta/makernote.htm> =item L<http://www.cybercom.net/~dcoffin/dcraw/> =back =head1 ACKNOWLEDGEMENTS Thanks to Jay Al-Saadi, Niels Kristian Bech Jensen, Shingo Noguchi, Pedro Corte-Real, Jeffery Small, Jens Duttke, Thomas Kassner, Mladen Sever, Olaf Ulrich, Lukasz Stelmach, Igal Milchtaich, Jos Roost and Michael Reitinger for the information they provided, and for everyone who helped with the LensType list. =head1 SEE ALSO L<Image::ExifTool::TagNames/Minolta Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/MinoltaRaw.pm�����������������������������������������������000644 �000765 �000024 �00000040221 12642461321 022317� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MinoltaRaw.pm # # Description: Read/write Konica-Minolta RAW (MRW) meta information # # Revisions: 03/11/2006 - P. Harvey Split out from Minolta.pm # # References: 1) http://www.cybercom.net/~dcoffin/dcraw/ # 2) http://www.chauveau-central.net/mrw-format/ # 3) Igal Milchtaich private communication (A100) #------------------------------------------------------------------------------ package Image::ExifTool::MinoltaRaw; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Minolta; $VERSION = '1.14'; sub ProcessMRW($$;$); sub WriteMRW($$;$); # Minolta MRW tags %Image::ExifTool::MinoltaRaw::Main = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::MinoltaRaw::ProcessMRW, WRITE_PROC => \&Image::ExifTool::MinoltaRaw::WriteMRW, NOTES => 'These tags are used in Minolta RAW format (MRW) images.', "\0TTW" => { # TIFF Tags Name => 'MinoltaTTW', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', # this EXIF information starts with a TIFF header ProcessProc => \&Image::ExifTool::ProcessTIFF, WriteProc => \&Image::ExifTool::WriteTIFF, }, }, "\0PRD" => { # Raw Picture Dimensions Name => 'MinoltaPRD', SubDirectory => { TagTable => 'Image::ExifTool::MinoltaRaw::PRD' }, }, "\0WBG" => { # White Balance Gains Name => 'MinoltaWBG', SubDirectory => { TagTable => 'Image::ExifTool::MinoltaRaw::WBG' }, }, "\0RIF" => { # Requested Image Format Name => 'MinoltaRIF', SubDirectory => { TagTable => 'Image::ExifTool::MinoltaRaw::RIF' }, }, # "\0CSA" is padding ); # Minolta MRW PRD information (ref 2) %Image::ExifTool::MinoltaRaw::PRD = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, 0 => { Name => 'FirmwareID', Format => 'string[8]', }, 8 => { Name => 'SensorHeight', Format => 'int16u', }, 10 => { Name => 'SensorWidth', Format => 'int16u', }, 12 => { Name => 'ImageHeight', Format => 'int16u', }, 14 => { Name => 'ImageWidth', Format => 'int16u', }, 16 => { Name => 'RawDepth', Format => 'int8u', }, 17 => { Name => 'BitDepth', Format => 'int8u', }, 18 => { Name => 'StorageMethod', Format => 'int8u', PrintConv => { 82 => 'Padded', 89 => 'Linear', }, }, 23 => { Name => 'BayerPattern', Format => 'int8u', PrintConv => { # 0 - seen in some Sony A850 ARW images 1 => 'RGGB', 4 => 'GBRG', }, }, ); # Minolta MRW WBG information (ref 2) %Image::ExifTool::MinoltaRaw::WBG = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, 0 => { Name => 'WBScale', Format => 'int8u[4]', }, 4 => [ { Condition => '$$self{Model} =~ /DiMAGE A200\b/', Name => 'WB_GBRGLevels', Format => 'int16u[4]', Notes => 'DiMAGE A200', }, { Name => 'WB_RGGBLevels', Format => 'int16u[4]', Notes => 'other models', }, ], ); # Minolta MRW RIF information (ref 2) %Image::ExifTool::MinoltaRaw::RIF = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, FIRST_ENTRY => 0, 1 => { Name => 'Saturation', Format => 'int8s', }, 2 => { Name => 'Contrast', Format => 'int8s', }, 3 => { Name => 'Sharpness', Format => 'int8s', }, 4 => { Name => 'WBMode', PrintConv => 'Image::ExifTool::MinoltaRaw::ConvertWBMode($val)', }, 5 => { Name => 'ProgramMode', PrintConv => { 0 => 'None', 1 => 'Portrait', 2 => 'Text', 3 => 'Night Portrait', 4 => 'Sunset', 5 => 'Sports', # have seen these values in Sony ARW images: - PH # 7, 128, 129, 160 }, }, 6 => { Name => 'ISOSetting', RawConv => '$val == 255 ? undef : $val', PrintConv => { #3 0 => 'Auto', 48 => 100, 56 => 200, 64 => 400, 72 => 800, 80 => 1600, 174 => '80 (Zone Matching Low)', 184 => '200 (Zone Matching High)', OTHER => sub { my ($val, $inv) = @_; return int(2 ** (($val-48)/8) * 100 + 0.5) unless $inv; return 48 + 8*log($val/100)/log(2) if Image::ExifTool::IsFloat($val); return undef; }, }, #ValueConv => '2 ** (($val-48)/8) * 100', #ValueConvInv => '48 + 8*log($val/100)/log(2)', #PrintConv => 'int($val + 0.5)', #PrintConvInv => '$val', }, 7 => [ { Name => 'ColorMode', Condition => '$$self{Make} !~ /^SONY/', Priority => 0, Writable => 'int32u', PrintConv => \%Image::ExifTool::Minolta::minoltaColorMode, }, { #3 Name => 'ColorMode', Condition => '$$self{Model} eq "DSLR-A100"', Writable => 'int32u', Notes => 'Sony A100', Priority => 0, PrintHex => 1, PrintConv => \%Image::ExifTool::Minolta::sonyColorMode, }, ], # NOTE: some of these WB_RBLevels may apply to other models too... 8 => { #3 Name => 'WB_RBLevelsTungsten', Condition => '$$self{Model} eq "DSLR-A100"', Format => 'int16u[2]', Notes => 'these WB_RBLevels currently decoded only for the Sony A100', }, 12 => { #3 Name => 'WB_RBLevelsDaylight', Condition => '$$self{Model} eq "DSLR-A100"', Format => 'int16u[2]', }, 16 => { #3 Name => 'WB_RBLevelsCloudy', Condition => '$$self{Model} eq "DSLR-A100"', Format => 'int16u[2]', }, 20 => { #3 Name => 'WB_RBLevelsCoolWhiteF', Condition => '$$self{Model} eq "DSLR-A100"', Format => 'int16u[2]', }, 24 => { #3 Name => 'WB_RBLevelsFlash', Condition => '$$self{Model} eq "DSLR-A100"', Format => 'int16u[2]', }, 28 => { #3 Name => 'WB_RBLevelsUnknown', Condition => '$$self{Model} eq "DSLR-A100"', Format => 'int16u[2]', Unknown => 1, }, 32 => { #3 Name => 'WB_RBLevelsShade', Condition => '$$self{Model} eq "DSLR-A100"', Format => 'int16u[2]', }, 36 => { #3 Name => 'WB_RBLevelsDaylightF', Condition => '$$self{Model} eq "DSLR-A100"', Format => 'int16u[2]', }, 40 => { #3 Name => 'WB_RBLevelsDayWhiteF', Condition => '$$self{Model} eq "DSLR-A100"', Format => 'int16u[2]', }, 44 => { #3 Name => 'WB_RBLevelsWhiteF', Condition => '$$self{Model} eq "DSLR-A100"', Format => 'int16u[2]', }, 56 => { Name => 'ColorFilter', Condition => '$$self{Make} !~ /^SONY/', Format => 'int8s', Notes => 'Minolta models', }, 57 => 'BWFilter', 58 => { Name => 'ZoneMatching', Condition => '$$self{Make} !~ /^SONY/', Priority => 0, Notes => 'Minolta models', PrintConv => { 0 => 'ISO Setting Used', 1 => 'High Key', 2 => 'Low Key', }, }, 59 => { Name => 'Hue', Format => 'int8s', }, 60 => { Name => 'ColorTemperature', Condition => '$$self{Make} !~ /^SONY/', Notes => 'Minolta models', ValueConv => '$val * 100', ValueConvInv => '$val / 100', }, 74 => { #3 Name => 'ZoneMatching', Condition => '$$self{Make} =~ /^SONY/', Priority => 0, Notes => 'Sony models', PrintConv => { 0 => 'ISO Setting Used', 1 => 'High Key', 2 => 'Low Key', }, }, 76 => { #3 Name => 'ColorTemperature', Condition => '$$self{Model} eq "DSLR-A100"', Notes => 'A100', ValueConv => '$val * 100', ValueConvInv => '$val / 100', PrintConv => '$val ? $val : "Auto"', PrintConvInv => '$val=~/Auto/i ? 0 : $val', }, 77 => { #3 Name => 'ColorFilter', Condition => '$$self{Model} eq "DSLR-A100"', Notes => 'A100', }, 78 => { #3 Name => 'ColorTemperature', Condition => '$$self{Model} =~ /^DSLR-A(200|700)$/', Notes => 'A200 and A700', ValueConv => '$val * 100', ValueConvInv => '$val / 100', PrintConv => '$val ? $val : "Auto"', PrintConvInv => '$val=~/Auto/i ? 0 : $val', }, 79 => { #3 Name => 'ColorFilter', Condition => '$$self{Model} =~ /^DSLR-A(200|700)$/', Notes => 'A200 and A700', }, 80 => { #3 Name => 'RawDataLength', Condition => '$$self{Model} eq "DSLR-A100"', Format => 'int32u', Notes => 'A100', Writable => 0, }, ); #------------------------------------------------------------------------------ # PrintConv for WBMode sub ConvertWBMode($) { my $val = shift; my %mrwWB = ( 0 => 'Auto', 1 => 'Daylight', 2 => 'Cloudy', 3 => 'Tungsten', 4 => 'Flash/Fluorescent', 5 => 'Fluorescent', 6 => 'Shade', 7 => 'User 1', 8 => 'User 2', 9 => 'User 3', 10 => 'Temperature', ); my $lo = $val & 0x0f; my $wbstr = $mrwWB{$lo} || "Unknown ($lo)"; my $hi = $val >> 4; $wbstr .= ' (' . ($hi - 8) . ')' if $hi >= 6 and $hi <=12; return $wbstr; } #------------------------------------------------------------------------------ # Write MRW directory (eg. in ARW images) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) optional tag table ref # Returns: new MRW data or undef on error sub WriteMRW($$;$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access my $buff = ''; $$dirInfo{OutFile} = \$buff; ProcessMRW($et, $dirInfo, $tagTablePtr) > 0 or undef $buff; return $buff; } #------------------------------------------------------------------------------ # Read or write Minolta MRW file # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) optional tag table ref # Returns: 1 on success, 0 if this wasn't a valid MRW file, or -1 on write error # Notes: File pointer must be set to start of MRW in RAF upon entry sub ProcessMRW($$;$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $raf = $$dirInfo{RAF}; my $outfile = $$dirInfo{OutFile}; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my ($data, $err, $outBuff); if ($$dirInfo{DataPt}) { # make a RAF object for MRW information extracted from other file types $raf = new File::RandomAccess($$dirInfo{DataPt}); # MRW information in DNG images may not start at beginning of data block $raf->Seek($$dirInfo{DirStart}, 0) if $$dirInfo{DirStart}; } $raf->Read($data,8) == 8 or return 0; # "\0MRM" for big-endian (MRW images), and # "\0MRI" for little-endian (MRWInfo in ARW images) $data =~ /^\0MR([MI])/ or return 0; my $hdr = "\0MR$1"; SetByteOrder($1 . $1); $et->SetFileType(); $tagTablePtr = GetTagTable('Image::ExifTool::MinoltaRaw::Main'); if ($outfile) { $et->InitWriteDirs('TIFF'); # use same write dirs as TIFF $outBuff = ''; } my $pos = $raf->Tell(); my $offset = Get32u(\$data, 4) + $pos; my $rtnVal = 1; $verbose and printf $out " [MRW Data Offset: 0x%x]\n", $offset; # loop through MRW segments (ref 1) while ($pos < $offset) { $raf->Read($data,8) == 8 or $err = 1, last; $pos += 8; my $tag = substr($data, 0, 4); my $len = Get32u(\$data, 4); if ($verbose) { print $out "MRW ",$et->Printable($tag)," segment ($len bytes):\n"; if ($verbose > 2) { $raf->Read($data,$len) == $len and $raf->Seek($pos,0) or $err = 1, last; $et->VerboseDump(\$data); } } my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); if ($tagInfo and $$tagInfo{SubDirectory}) { my $subTable = GetTagTable($tagInfo->{SubDirectory}->{TagTable}); my $buff; # save shift for values stored with wrong base offset $$et{MRW_WrongBase} = -($raf->Tell()); $raf->Read($buff, $len) == $len or $err = 1, last; my %subdirInfo = ( DataPt => \$buff, DataLen => $len, DataPos => $pos, DirStart => 0, DirLen => $len, DirName => $$tagInfo{Name}, Parent => 'MRW', NoTiffEnd => 1, # no end-of-TIFF check ); if ($outfile) { my $writeProc = $tagInfo->{SubDirectory}->{WriteProc}; my $val = $et->WriteDirectory(\%subdirInfo, $subTable, $writeProc); if (defined $val and length $val) { # pad to an even 4 bytes (can't hurt, and it seems to be the standard) $val .= "\0" x (4 - (length($val) & 0x03)) if length($val) & 0x03; $outBuff .= $tag . Set32u(length $val) . $val; } elsif (not defined $val) { $outBuff .= $data . $buff; # copy over original information } } else { my $processProc = $tagInfo->{SubDirectory}->{ProcessProc}; $et->ProcessDirectory(\%subdirInfo, $subTable, $processProc); } } elsif ($outfile) { # add this segment to the output buffer my $buff; $raf->Read($buff, $len) == $len or $err = 1, last; $outBuff .= $data . $buff; } else { # skip this segment $raf->Seek($pos+$len, 0) or $err = 1, last; } $pos += $len; } $pos == $offset or $err = 1; # meta information length check if ($outfile) { # write the file header then the buffered meta information Write($outfile, $hdr, Set32u(length $outBuff), $outBuff) or $rtnVal = -1; # copy over image data while ($raf->Read($outBuff, 65536)) { Write($outfile, $outBuff) or $rtnVal = -1; } # Sony IDC utility corrupts MRWInfo when writing ARW images, # so make this a minor error for these images $err and $et->Error("MRW format error", $$et{TIFF_TYPE} eq 'ARW'); } else { $err and $et->Warn("MRW format error"); } return $rtnVal; } 1; # end __END__ =head1 NAME Image::ExifTool::MinoltaRaw - Read/write Konica-Minolta RAW (MRW) information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read and write Konica-Minolta RAW (MRW) images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.cybercom.net/~dcoffin/dcraw/> =item L<http://www.chauveau-central.net/mrw-format/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/MinoltaRaw Tags>, L<Image::ExifTool::Minolta(3pm)|Image::ExifTool::Minolta>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/MNG.pm������������������������������������������������������000644 �000765 �000024 �00000040337 12642461317 020700� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MNG.pm # # Description: MNG and JNG meta information tags # # Revisions: 06/23/2005 - P. Harvey Created # # References: 1) http://www.libpng.org/pub/mng/ #------------------------------------------------------------------------------ package Image::ExifTool::MNG; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.00'; # MNG chunks %Image::ExifTool::MNG::Main = ( GROUPS => { 2 => 'Image' }, NOTES => q{ This table contains definitions for tags found in MNG and JNG images. MNG is a superset of PNG and JNG, so a MNG image may contain any of these tags as well as any PNG tags. Conversely, only some of these tags are valid for JNG images. }, BACK => { Name => 'Background', SubDirectory => { TagTable => 'Image::ExifTool::MNG::Background' }, }, BASI => { Name => 'BasisObject', SubDirectory => { TagTable => 'Image::ExifTool::MNG::BasisObject' }, }, CLIP => { Name => 'ClipObjects', SubDirectory => { TagTable => 'Image::ExifTool::MNG::ClipObjects' }, }, CLON => { Name => 'CloneObject', SubDirectory => { TagTable => 'Image::ExifTool::MNG::CloneObject' }, }, DBYK => { Name => 'DropByKeyword', Binary => 1, }, DEFI => { Name => 'DefineObject', SubDirectory => { TagTable => 'Image::ExifTool::MNG::DefineObject' }, }, DHDR => { Name => 'DeltaPNGHeader', SubDirectory => { TagTable => 'Image::ExifTool::MNG::DeltaPNGHeader' }, }, DISC => { Name => 'DiscardObjects', ValueConv => 'join(" ",unpack("n*",$val))', }, DROP => { Name => 'DropChunks', ValueConv => 'join(" ",$val=~/..../g)', }, # ENDL eXPi => { Name => 'ExportImage', SubDirectory => { TagTable => 'Image::ExifTool::MNG::ExportImage' }, }, fPRI => { Name => 'FramePriority', SubDirectory => { TagTable => 'Image::ExifTool::MNG::FramePriority' }, }, FRAM => { Name => 'Frame', Binary => 1, }, # IJNG # IPNG # JDAA (JNG) # JDAT (JNG) JHDR => { # (JNG) Name => 'JNGHeader', SubDirectory => { TagTable => 'Image::ExifTool::MNG::JNGHeader' }, }, # JSEP (JNG) LOOP => { Name => 'Loop', SubDirectory => { TagTable => 'Image::ExifTool::MNG::Loop' }, }, MAGN => { Name => 'MagnifyObject', SubDirectory => { TagTable => 'Image::ExifTool::MNG::MagnifyObject' }, }, # MEND MHDR => { Name => 'MNGHeader', SubDirectory => { TagTable => 'Image::ExifTool::MNG::MNGHeader' }, }, MOVE => { Name => 'MoveObjects', SubDirectory => { TagTable => 'Image::ExifTool::MNG::MoveObjects' }, }, nEED => { Name => 'ResourcesNeeded', Binary => 1, }, ORDR => { Name => 'OrderingRestrictions', Binary => 1, }, PAST => { Name => 'PasteImage', SubDirectory => { TagTable => 'Image::ExifTool::MNG::PasteImage' }, }, pHYg => { Name => 'GlobalPixelSize', SubDirectory => { TagTable => 'Image::ExifTool::PNG::PhysicalPixel' }, }, PPLT => { Name => 'PartialPalette', Binary => 1, }, PROM => { Name => 'PromoteParent', SubDirectory => { TagTable => 'Image::ExifTool::MNG::PromoteParent' }, }, SAVE => { Name => 'SaveObjects', Binary => 1, }, SEEK => { Name => 'SeekPoint', ValueConv => '$val=~s/\0.*//s; $val', }, SHOW => { Name => 'ShowObjects', SubDirectory => { TagTable => 'Image::ExifTool::MNG::ShowObjects' }, }, TERM => { Name => 'TerminationAction', SubDirectory => { TagTable => 'Image::ExifTool::MNG::TerminationAction' }, }, ); # MNG MHDR chunk %Image::ExifTool::MNG::MNGHeader = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, FORMAT => 'int32u', 0 => 'ImageWidth', 1 => 'ImageHeight', 2 => 'TicksPerSecond', 3 => 'NominalLayerCount', 4 => 'NominalFrameCount', 5 => 'NominalPlayTime', 6 => { Name => 'SimplicityProfile', PrintConv => 'sprintf("0x%.8x", $val)', }, ); # MNG BASI chunk %Image::ExifTool::MNG::BasisObject = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'ImageWidth', Format => 'int32u', }, 4 => { Name => 'ImageHeight', Format => 'int32u', }, 8 => 'BitDepth', 9 => { Name => 'ColorType', RawConv => '$Image::ExifTool::PNG::colorType = $val', PrintConv => { 0 => 'Grayscale', 2 => 'RGB', 3 => 'Palette', 4 => 'Grayscale with Alpha', 6 => 'RGB with Alpha', }, }, 10 => { Name => 'Compression', PrintConv => { 0 => 'Deflate/Inflate' }, }, 11 => { Name => 'Filter', PrintConv => { 0 => 'Adaptive' }, }, 12 => { Name => 'Interlace', PrintConv => { 0 => 'Noninterlaced', 1 => 'Adam7 Interlace' }, }, 13 => { Name => 'RedSample', Format => 'int32u', }, 17 => { Name => 'GreenSample', Format => 'int32u', }, 21 => { Name => 'BlueSample', Format => 'int32u', }, 25 => { Name => 'AlphaSample', Format => 'int32u', }, 26 => 'Viewable', ); # MNG LOOP chunk %Image::ExifTool::MNG::Loop = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => 'NestLevel', 1 => { Name => 'IterationCount', Format => 'int32u', }, 5 => { Name => 'TerminationCondition', PrintConv => { 0 => 'Deterministic, not cacheable', 1 => 'Decoder discretion, not cacheable', 2 => 'User discretion, not cacheable', 3 => 'External signal, not cacheable', 4 => 'Deterministic, cacheable', 5 => 'Decoder discretion, cacheable', 6 => 'User discretion, cacheable', 7 => 'External signal, cacheable', }, }, 6 => { Name => 'IterationMinMax', Format => 'int32u[2]', }, 14 => { Name => 'SignalNumber', Format => 'int32u', }, ); # MNG DEFI chunk %Image::ExifTool::MNG::DefineObject = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'ObjectID', Format => 'int16u', }, 2 => 'DoNotShow', 3 => 'ConcreteFlag', 4 => { Name => 'XYLocation', Format => 'int32u[2]', }, 12 => { Name => 'ClippingBoundary', Format => 'int32u[4]', }, ); # MNG CLON chunk %Image::ExifTool::MNG::CloneObject = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'SourceID', Format => 'int16u', }, 2 => { Name => 'CloneID', Format => 'int16u', }, 4 => { Name => 'CloneType', PrintConv => { 0 => 'Full', 1 => 'Parital', 2 => 'Renumber object' }, }, 5 => 'DoNotShow', 6 => 'ConcreteFlag', 7 => { Name => 'LocalDeltaType', PrintConv => { 0 => 'Absolute', 1 => 'Relative' }, }, 8 => { Name => 'DeltaXY', Format => 'int32u[2]', }, ); # MNG PAST chunk %Image::ExifTool::MNG::PasteImage = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'DestinationID', Format => 'int16u', }, 2 => { Name => 'TargetDeltaType', PrintConv => { 0 => 'Absolute', 1 => 'Relative' }, }, 3 => { Name => 'TargetXY', Format => 'int32u[2]', }, 11 => { Name => 'SourceID', Format => 'int16u', }, 13 => { Name => 'CompositionMode', PrintConv => { 0 => 'Over', 1 => 'Replace', 2 => 'Under' }, }, 14 => { Name => 'Orientation', PrintConv => { 0 => 'Same as source', 2 => 'Flipped left-right, then up-down', 4 => 'Flipped left-right', 6 => 'Flipped up-down', 8 => 'Tiled', }, }, 15 => { Name => 'OffsetOrigin', PrintConv => { 0 => 'Desination Origin', 1 => 'Target Origin' }, }, 16 => { Name => 'OffsetXY', Format => 'int32u[2]', }, 24 => { Name => 'BoundaryOrigin', PrintConv => { 0 => 'Desination Origin', 1 => 'Target Origin' }, }, 25 => { Name => 'PastClippingBoundary', Format => 'int32u[4]', }, ); my %magMethod = ( 0 => 'No Magnification', 1 => 'Pixel Replication', 2 => 'Linear Interpolation', 3 => 'Closest Pixel', 4 => 'Color Linear Interpolation and Alpha Closest Pixel', 5 => 'Color Closest Pixel and Alpha Linear Interpolation', ); # MNG MAGN chunk %Image::ExifTool::MNG::MagnifyObject = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'FirstObjectID', Format => 'int16u', }, 2 => { Name => 'LastObjectID', Format => 'int16u', }, 4 => { Name => 'XMethod', PrintConv => \%magMethod, }, 5 => { Name => 'XMag', Format => 'int16u', }, 7 => { Name => 'YMag', Format => 'int16u', }, 9 => { Name => 'LeftMag', Format => 'int16u', }, 11 => { Name => 'RightMag', Format => 'int16u', }, 13 => { Name => 'TopMag', Format => 'int16u', }, 15 => { Name => 'BottomMag', Format => 'int16u', }, 17 => { Name => 'YMethod', PrintConv => \%magMethod, }, ); # MNG TERM chunk %Image::ExifTool::MNG::TerminationAction = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'TerminationAction', PrintConv => { 0 => 'Show Last Frame', 1 => 'Display Nothing', 2 => 'Show First Frame', 3 => 'Repeat Sequence', }, }, 1 => { Name => 'IterationEndAction', PrintConv => { 0 => 'Show Last Frame', 1 => 'Display Nothing', 2 => 'Show First Frame', }, }, 2 => { Name => 'Delay', Format => 'int32u', }, 6 => { Name => 'IterationMax', Format => 'int32u', }, ); # MNG BACK chunk %Image::ExifTool::MNG::Background = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'BackgroundColor', Format => 'int16u[3]', }, 6 => { Name => 'MandatoryBackground', PrintConv => { 0 => 'Color and Image Advisory', 1 => 'Color Mandatory, Image Advisory', 2 => 'Color Advisory, Image Mandatory', 3 => 'Color and Image Mandatory', }, }, 7 => { Name => 'BackgroundImageID', Format => 'int16u', }, 9 => { Name => 'BackgroundTiling', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, ); # MNG MOVE chunk %Image::ExifTool::MNG::MoveObjects = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'FirstObject', Format => 'int16u', }, 2 => { Name => 'LastObject', Format => 'int16u', }, 4 => { Name => 'DeltaType', PrintConv => { 0 => 'Absolute', 1 => 'Relative' }, }, 5 => { Name => 'DeltaXY', Format => 'int32u[2]', }, ); # MNG CLIP chunk %Image::ExifTool::MNG::ClipObjects = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'FirstObject', Format => 'int16u', }, 2 => { Name => 'LastObject', Format => 'int16u', }, 4 => { Name => 'DeltaType', PrintConv => { 0 => 'Absolute', 1 => 'Relative' }, }, 5 => { Name => 'ClipBoundary', Format => 'int32u[4]', }, ); # MNG SHOW chunk %Image::ExifTool::MNG::ShowObjects = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'FirstObject', Format => 'int16u', }, 2 => { Name => 'LastObject', Format => 'int16u', }, 4 => 'ShowMode', ); # MNG eXPI chunk %Image::ExifTool::MNG::ExportImage = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'SnapshotID', Format => 'int16u', }, 2 => { Name => 'SnapshotName', Format => 'string', }, ); # MNG fPRI chunk %Image::ExifTool::MNG::FramePriority = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'DeltaType', PrintConv => { 0 => 'Absolute', 1 => 'Relative' }, }, 2 => 'Priority', ); # MNG DHDR chunk %Image::ExifTool::MNG::DeltaPNGHeader = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'ObjectID', Format => 'int16u', }, 2 => { Name => 'ImageType', PrintConv => { 0 => 'Unspecified', 1 => 'PNG', 2 => 'JNG', }, }, 3 => { Name => 'DeltaType', PrintConv => { 0 => 'Full Replacement', 1 => 'Pixel Addition', 2 => 'Alpha Addition', 3 => 'Color Addition', 4 => 'Pixel Replacement', 5 => 'Alpha Replacement', 6 => 'Color Replacement', 7 => 'No Change', }, }, 4 => { Name => 'BlockSize', Format => 'int32u[2]', }, 12 => { Name => 'BlockLocation', Format => 'int32u[2]', }, ); # MNG PROM chunk %Image::ExifTool::MNG::PromoteParent = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => 'NewColorType', 1 => 'NewBitDepth', 2 => { Name => 'FillMethod', PrintConv => { 0 => 'Bit Replication', 1 => 'Zero Fill' }, }, ); # JNG JHDR chunk %Image::ExifTool::MNG::JNGHeader = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'ImageWidth', Format => 'int32u', }, 4 => { Name => 'ImageHeight', Format => 'int32u', }, 8 => { Name => 'ColorType', PrintConv => { 8 => 'Gray', 10 => 'Color', 12 => 'Gray Alpha', 14 => 'Color Alpha', }, }, 9 => 'BitDepth', 10 => { Name => 'Compression', PrintConv => { 8 => 'Huffman-coded baseline JPEG' }, }, 11 => { Name => 'Interlace', PrintConv => { 0 => 'Sequential', 8 => 'Progressive' }, }, 12 => 'AlphaBitDepth', 13 => { Name => 'AlphaCompression', PrintConv => { 0 => 'MNG Grayscale IDAT', 8 => 'JNG 8-bit Grayscale JDAA', }, }, 14 => { Name => 'AlphaFilter', PrintConv => { 0 => 'Adaptive MNG (N/A for JPEG)' }, }, 15 => { Name => 'AlphaInterlace', PrintConv => { 0 => 'Noninterlaced' }, }, ); 1; # end __END__ =head1 NAME Image::ExifTool::MNG - MNG and JNG meta information tags =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read MNG (Multi-image Network Graphics) and JNG (JPEG Network Graphics) images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.libpng.org/pub/mng/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/MNG Tags>, L<Image::ExifTool::TagNames/PNG Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/MOI.pm������������������������������������������������������000644 �000765 �000024 �00000010145 12642461317 020675� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MOI.pm # # Description: Read MOI meta information # # Revisions: 2014/12/15 - P. Harvey Created # # References: 1) https://en.wikipedia.org/wiki/MOI_(file_format) #------------------------------------------------------------------------------ package Image::ExifTool::MOI; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.02'; # MOI tags (ref 1) %Image::ExifTool::MOI::Main = ( GROUPS => { 2 => 'Video' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, NOTES => q{ MOI files store information about associated MOD or TOD files, and are written by some JVC, Canon and Panasonic camcorders. }, 0x00 => { Name => 'MOIVersion', Format => 'string[2]' }, # 0x02 => { Name => 'MOIFileSize', Format => 'int32u' }, 0x06 => { Name => 'DateTimeOriginal', Format => 'undef[8]', Groups => { 2 => 'Time' }, ValueConv => sub { my $val = shift; return undef unless length($val) >= 8; my @v = unpack('nCCCCn', $val); $v[5] /= 1000; return sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%06.3f', @v); }, PrintConv => '$self->ConvertDateTime($val)', }, 0x0e => { Name => 'Duration', Format => 'int32u', ValueConv => '$val / 1000', PrintConv => 'ConvertDuration($val)', }, 0x80 => { Name => 'AspectRatio', Format => 'int8u', PrintConv => q{ my $lo = ($val & 0x0f); my $hi = ($val >> 4); my $aspect; if ($lo < 2) { $aspect = '4:3'; } elsif ($lo == 4 or $lo == 5) { $aspect = '16:9'; } else { $aspect = 'Unknown'; } if ($hi == 4) { $aspect .= ' NTSC'; } elsif ($hi == 5) { $aspect .= ' PAL'; } return $aspect; }, }, 0x84 => { Name => 'AudioCodec', Format => 'int16u', Groups => { 2 => 'Audio' }, PrintHex => 1, PrintConv => { 0x00c1 => 'AC3', 0x4001 => 'MPEG', }, }, 0x86 => { Name => 'AudioBitrate', Format => 'int8u', Groups => { 2 => 'Audio' }, ValueConv => '$val * 16000 + 48000', PrintConv => 'ConvertBitrate($val)', }, 0xda => { Name => 'VideoBitrate', Format => 'int16u', PrintHex => 1, ValueConv => { 0x5896 => '8500000', 0x813d => '5500000', }, PrintConv => 'ConvertBitrate($val)', }, ); #------------------------------------------------------------------------------ # Validate and extract metadata from MOI file # Inputs: 0) ExifTool ref, 1) dirInfo ref # Returns: 1 on success, 0 if this wasn't a valid MOI file sub ProcessMOI($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $buff; # read enough to allow skipping over run-in if it exists $raf->Read($buff, 256) == 256 and $buff =~ /^V6/ or return 0; if (defined $$et{VALUE}{FileSize}) { my $size = unpack('x2N', $buff); $size == $$et{VALUE}{FileSize} or return 0; } $et->SetFileType(); SetByteOrder('MM'); my $tagTablePtr = GetTagTable('Image::ExifTool::MOI::Main'); return $et->ProcessBinaryData({ DataPt => \$buff }, $tagTablePtr); } 1; # end __END__ =head1 NAME Image::ExifTool::MOI - Read MOI meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read meta information from MOI files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<https://en.wikipedia.org/wiki/MOI_(file_format)> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/MOI Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Motorola.pm�������������������������������������������������000644 �000765 �000024 �00000003156 12642461321 022044� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Motorola.pm # # Description: Read Motorola meta information # # Revisions: 2015/10/29 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::Motorola; use strict; use vars qw($VERSION); use Image::ExifTool::Exif; $VERSION = '1.00'; # Motorola makernotes tags (ref PH) %Image::ExifTool::Motorola::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, WRITABLE => 1, # 0x5570 - some sort of picture mode (auto,hdr) # 0x6400 - HDR? (OFF,ON) # 0x6410 - HDR? (NO,YES) # 0x6420 - only exists in HDR images 0x665e => { Name => 'Sensor', Writable => 'string' }, # (eg. "BACK,IMX230") # 0x6700 - serial number? 0x6705 => { Name => 'ManufactureDate', Writable => 'string' }, # (NC, eg. "03Jun2015") # 0x6706 - serial number? ); 1; # end __END__ =head1 NAME Image::ExifTool::Motorola - Read Motorola meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains the definitions to read meta information from Motorola cell phone images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/Motorola Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/MPC.pm������������������������������������������������������000644 �000765 �000024 �00000010071 12642461317 020666� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MPC.pm # # Description: Read Musepack audio meta information # # Revisions: 11/14/2006 - P. Harvey Created # # References: 1) http://www.musepack.net/ #------------------------------------------------------------------------------ package Image::ExifTool::MPC; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::FLAC; $VERSION = '1.01'; # MPC metadata blocks %Image::ExifTool::MPC::Main = ( PROCESS_PROC => \&Image::ExifTool::FLAC::ProcessBitStream, GROUPS => { 2 => 'Audio' }, NOTES => q{ Tags used in Musepack (MPC) audio files. ExifTool also extracts ID3 and APE information from these files. }, 'Bit032-063' => 'TotalFrames', 'Bit080-081' => { Name => 'SampleRate', PrintConv => { 0 => 44100, 1 => 48000, 2 => 37800, 3 => 32000, }, }, 'Bit084-087' => { Name => 'Quality', PrintConv => { 1 => 'Unstable/Experimental', 5 => '0', 6 => '1', 7 => '2 (Telephone)', 8 => '3 (Thumb)', 9 => '4 (Radio)', 10 => '5 (Standard)', 11 => '6 (Xtreme)', 12 => '7 (Insane)', 13 => '8 (BrainDead)', 14 => '9', 15 => '10', }, }, 'Bit088-093' => 'MaxBand', 'Bit096-111' => 'ReplayGainTrackPeak', 'Bit112-127' => 'ReplayGainTrackGain', 'Bit128-143' => 'ReplayGainAlbumPeak', 'Bit144-159' => 'ReplayGainAlbumGain', 'Bit179' => { Name => 'FastSeek', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, 'Bit191' => { Name => 'Gapless', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, 'Bit216-223' => { Name => 'EncoderVersion', PrintConv => '$val =~ s/(\d)(\d)(\d)$/$1.$2.$3/; $val', }, ); #------------------------------------------------------------------------------ # Extract information from an MPC file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # - Just looks for MPC trailer if FileType is already set # Returns: 1 on success, 0 if this wasn't a valid MPC file sub ProcessMPC($$) { my ($et, $dirInfo) = @_; # must first check for leading ID3 information unless ($$et{DoneID3}) { require Image::ExifTool::ID3; Image::ExifTool::ID3::ProcessID3($et, $dirInfo) and return 1; } my $raf = $$dirInfo{RAF}; my $buff; # check MPC signature $raf->Read($buff, 32) == 32 and $buff =~ /^MP\+(.)/s or return 0; my $vers = ord($1) & 0x0f; $et->SetFileType(); # extract audio information (currently only from version 7 MPC files) if ($vers == 0x07) { SetByteOrder('II'); my $pos = $raf->Tell() - 32; if ($et->Options('Verbose')) { $et->VPrint(0, "MPC Header (32 bytes):\n"); $et->VerboseDump(\$buff, DataPos => $pos); } my $tagTablePtr = GetTagTable('Image::ExifTool::MPC::Main'); my %dirInfo = ( DataPt => \$buff, DataPos => $pos ); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); } else { $et->Warn('Audio info currently not extracted from this version MPC file'); } # process APE trailer if it exists require Image::ExifTool::APE; Image::ExifTool::APE::ProcessAPE($et, $dirInfo); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::MPC - Read Musepack audio meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from Musepack (MPC) audio files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.musepack.net/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/MPC Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/MPEG.pm�����������������������������������������������������000644 �000765 �000024 �00000054557 12642461317 021020� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MPEG.pm # # Description: Read MPEG-1 and MPEG-2 meta information # # Revisions: 05/11/2006 - P. Harvey Created # # References: 1) http://www.mp3-tech.org/ # 2) http://www.getid3.org/ # 3) http://dvd.sourceforge.net/dvdinfo/dvdmpeg.html # 4) http://ffmpeg.org/ # 5) http://sourceforge.net/projects/mediainfo/ #------------------------------------------------------------------------------ package Image::ExifTool::MPEG; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.15'; %Image::ExifTool::MPEG::Audio = ( GROUPS => { 2 => 'Audio' }, 'Bit11-12' => { Name => 'MPEGAudioVersion', RawConv => '$self->{MPEG_Vers} = $val', PrintConv => { 0 => 2.5, 2 => 2, 3 => 1, }, }, 'Bit13-14' => { Name => 'AudioLayer', RawConv => '$self->{MPEG_Layer} = $val', PrintConv => { 1 => 3, 2 => 2, 3 => 1, }, }, # Bit 15 indicates CRC protection 'Bit16-19' => [ { Name => 'AudioBitrate', Condition => '$self->{MPEG_Vers} == 3 and $self->{MPEG_Layer} == 3', Notes => 'version 1, layer 1', PrintConvColumns => 3, ValueConv => { 0 => 'free', 1 => 32000, 2 => 64000, 3 => 96000, 4 => 128000, 5 => 160000, 6 => 192000, 7 => 224000, 8 => 256000, 9 => 288000, 10 => 320000, 11 => 352000, 12 => 384000, 13 => 416000, 14 => 448000, }, PrintConv => 'ConvertBitrate($val)', }, { Name => 'AudioBitrate', Condition => '$self->{MPEG_Vers} == 3 and $self->{MPEG_Layer} == 2', Notes => 'version 1, layer 2', PrintConvColumns => 3, ValueConv => { 0 => 'free', 1 => 32000, 2 => 48000, 3 => 56000, 4 => 64000, 5 => 80000, 6 => 96000, 7 => 112000, 8 => 128000, 9 => 160000, 10 => 192000, 11 => 224000, 12 => 256000, 13 => 320000, 14 => 384000, }, PrintConv => 'ConvertBitrate($val)', }, { Name => 'AudioBitrate', Condition => '$self->{MPEG_Vers} == 3 and $self->{MPEG_Layer} == 1', Notes => 'version 1, layer 3', PrintConvColumns => 3, ValueConv => { 0 => 'free', 1 => 32000, 2 => 40000, 3 => 48000, 4 => 56000, 5 => 64000, 6 => 80000, 7 => 96000, 8 => 112000, 9 => 128000, 10 => 160000, 11 => 192000, 12 => 224000, 13 => 256000, 14 => 320000, }, PrintConv => 'ConvertBitrate($val)', }, { Name => 'AudioBitrate', Condition => '$self->{MPEG_Vers} != 3 and $self->{MPEG_Layer} == 3', Notes => 'version 2 or 2.5, layer 1', PrintConvColumns => 3, ValueConv => { 0 => 'free', 1 => 32000, 2 => 48000, 3 => 56000, 4 => 64000, 5 => 80000, 6 => 96000, 7 => 112000, 8 => 128000, 9 => 144000, 10 => 160000, 11 => 176000, 12 => 192000, 13 => 224000, 14 => 256000, }, PrintConv => 'ConvertBitrate($val)', }, { Name => 'AudioBitrate', Condition => '$self->{MPEG_Vers} != 3 and $self->{MPEG_Layer}', Notes => 'version 2 or 2.5, layer 2 or 3', PrintConvColumns => 3, ValueConv => { 0 => 'free', 1 => 8000, 2 => 16000, 3 => 24000, 4 => 32000, 5 => 40000, 6 => 48000, 7 => 56000, 8 => 64000, 9 => 80000, 10 => 96000, 11 => 112000, 12 => 128000, 13 => 144000, 14 => 160000, }, PrintConv => 'ConvertBitrate($val)', }, ], 'Bit20-21' => [ { Name => 'SampleRate', Condition => '$self->{MPEG_Vers} == 3', Notes => 'version 1', PrintConv => { 0 => 44100, 1 => 48000, 2 => 32000, }, }, { Name => 'SampleRate', Condition => '$self->{MPEG_Vers} == 2', Notes => 'version 2', PrintConv => { 0 => 22050, 1 => 24000, 2 => 16000, }, }, { Name => 'SampleRate', Condition => '$self->{MPEG_Vers} == 0', Notes => 'version 2.5', PrintConv => { 0 => 11025, 1 => 12000, 2 => 8000, }, }, ], # Bit 22 - padding flag # Bit 23 - private bit 'Bit24-25' => { Name => 'ChannelMode', RawConv => '$self->{MPEG_Mode} = $val', PrintConv => { 0 => 'Stereo', 1 => 'Joint Stereo', 2 => 'Dual Channel', 3 => 'Single Channel', }, }, 'Bit26' => { Name => 'MSStereo', Condition => '$self->{MPEG_Layer} == 1', Notes => 'layer 3', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 'Bit27' => { Name => 'IntensityStereo', Condition => '$self->{MPEG_Layer} == 1', Notes => 'layer 3', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 'Bit26-27' => { Name => 'ModeExtension', Condition => '$self->{MPEG_Layer} > 1', Notes => 'layer 1 or 2', PrintConv => { 0 => 'Bands 4-31', 1 => 'Bands 8-31', 2 => 'Bands 12-31', 3 => 'Bands 16-31', }, }, 'Bit28' => { Name => 'CopyrightFlag', PrintConv => { 0 => 'False', 1 => 'True', }, }, 'Bit29' => { Name => 'OriginalMedia', PrintConv => { 0 => 'False', 1 => 'True', }, }, 'Bit30-31' => { Name => 'Emphasis', PrintConv => { 0 => 'None', 1 => '50/15 ms', 2 => 'reserved', 3 => 'CCIT J.17', }, }, ); %Image::ExifTool::MPEG::Video = ( GROUPS => { 2 => 'Video' }, 'Bit00-11' => 'ImageWidth', 'Bit12-23' => 'ImageHeight', 'Bit24-27' => { Name => 'AspectRatio', ValueConv => { 1 => 1, 2 => 0.6735, 3 => 0.7031, 4 => 0.7615, 5 => 0.8055, 6 => 0.8437, 7 => 0.8935, 8 => 0.9157, 9 => 0.9815, 10 => 1.0255, 11 => 1.0695, 12 => 1.0950, 13 => 1.1575, 14 => 1.2015, }, PrintConv => { 1 => '1:1', 0.6735 => '0.6735', 0.7031 => '16:9, 625 line, PAL', 0.7615 => '0.7615', 0.8055 => '0.8055', 0.8437 => '16:9, 525 line, NTSC', 0.8935 => '0.8935', 0.9157 => '4:3, 625 line, PAL, CCIR601', 0.9815 => '0.9815', 1.0255 => '1.0255', 1.0695 => '1.0695', 1.0950 => '4:3, 525 line, NTSC, CCIR601', 1.1575 => '1.1575', 1.2015 => '1.2015', }, }, 'Bit28-31' => { Name => 'FrameRate', ValueConv => { 1 => 23.976, 2 => 24, 3 => 25, 4 => 29.97, 5 => 30, 6 => 50, 7 => 59.94, 8 => 60, }, PrintConv => '"$val fps"', }, 'Bit32-49' => { Name => 'VideoBitrate', ValueConv => '$val eq 0x3ffff ? "Variable" : $val * 400', PrintConv => 'ConvertBitrate($val)', }, # these tags not very interesting #'Bit50' => 'MarkerBit', #'Bit51-60' => 'VBVBufferSize', #'Bit61' => 'ConstrainedParamFlag', #'Bit62' => 'IntraQuantMatrixFlag', ); %Image::ExifTool::MPEG::Xing = ( GROUPS => { 2 => 'Audio' }, VARS => { NO_ID => 1 }, NOTES => 'These tags are extracted from the Xing/Info frame.', 1 => { Name => 'VBRFrames' }, 2 => { Name => 'VBRBytes' }, 3 => { Name => 'VBRScale' }, 4 => { Name => 'Encoder' }, 5 => { Name => 'LameVBRQuality' }, 6 => { Name => 'LameQuality' }, 7 => { # (for documentation only) Name => 'LameHeader', SubDirectory => { TagTable => 'Image::ExifTool::MPEG::Lame' }, }, ); # Lame header tags (ref 5) %Image::ExifTool::MPEG::Lame = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Audio' }, NOTES => 'Tags extracted from Lame 3.90 or later header.', 9 => { Name => 'LameMethod', Mask => 0x0f, PrintConv => { 1 => 'CBR', 2 => 'ABR', 3 => 'VBR (old/rh)', 4 => 'VBR (new/mtrh)', 5 => 'VBR (old/rh)', 6 => 'VBR', 8 => 'CBR (2-pass)', 9 => 'ABR (2-pass)', }, }, 10 => { Name => 'LameLowPassFilter', ValueConv => '$val * 100', PrintConv => '($val / 1000) . " kHz"', }, # 19 - EncodingFlags 20 => { Name => 'LameBitrate', ValueConv => '$val * 1000', PrintConv => 'ConvertBitrate($val)', }, 24 => { Name => 'LameStereoMode', Mask => 0x1c, ValueConv => '$val >> 2', PrintConv => { 0 => 'Mono', 1 => 'Stereo', 2 => 'Dual Channels', 3 => 'Joint Stereo', 4 => 'Forced Joint Stereo', 6 => 'Auto', 7 => 'Intensity Stereo', }, }, ); # composite tags %Image::ExifTool::MPEG::Composite = ( Duration => { Groups => { 2 => 'Video' }, Require => { 0 => 'FileSize', }, Desire => { 1 => 'ID3Size', 2 => 'MPEG:AudioBitrate', 3 => 'MPEG:VideoBitrate', 4 => 'MPEG:VBRFrames', 5 => 'MPEG:SampleRate', 6 => 'MPEG:MPEGAudioVersion', }, Priority => -1, # (don't want to replace any other Duration tag) ValueConv => q{ if ($val[4] and defined $val[5] and defined $val[6]) { # calculate from number of VBR audio frames my $mfs = $prt[5] / ($val[6] == 3 ? 144 : 72); # calculate using VBR length return 8 * $val[4] / $mfs; } # calculate duration as file size divided by total bitrate # (note: this is only approximate!) return undef unless $val[2] or $val[3]; return undef if $val[2] and not $val[2] =~ /^\d+$/; return undef if $val[3] and not $val[3] =~ /^\d+$/; return (8 * ($val[0] - ($val[1]||0))) / (($val[2]||0) + ($val[3]||0)); }, PrintConv => 'ConvertDuration($val) . " (approx)"', }, AudioBitrate => { Groups => { 2 => 'Audio' }, Notes => 'calculated for variable-bitrate MPEG audio', Require => { 0 => 'MPEG:MPEGAudioVersion', 1 => 'MPEG:SampleRate', 2 => 'MPEG:VBRBytes', 3 => 'MPEG:VBRFrames', }, ValueConv => q{ return undef unless $val[3]; my $mfs = $prt[1] / ($val[0] == 3 ? 144 : 72); return $mfs * $val[2] / $val[3]; }, PrintConv => 'ConvertBitrate($val)', }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::MPEG'); #------------------------------------------------------------------------------ # Process information in an MPEG audio or video frame header # Inputs: 0) ExifTool object ref, 1) tag table ref, 2-N) list of 32-bit data words sub ProcessFrameHeader($$@) { my ($et, $tagTablePtr, @data) = @_; my $tag; foreach $tag (sort keys %$tagTablePtr) { next unless $tag =~ /^Bit(\d{2})-?(\d{2})?/; my ($b1, $b2) = ($1, $2 || $1); my $index = int($b1 / 32); my $word = $data[$index]; my $mask = 0; foreach (0 .. ($b2 - $b1)) { $mask += (1 << $_); } my $val = ($word >> (31 + 32*$index - $b2)) & $mask; $et->HandleTag($tagTablePtr, $tag, $val); } } #------------------------------------------------------------------------------ # Read MPEG audio frame header # Inputs: 0) ExifTool object reference, 1) Reference to audio data # 2) flag set if we are trying to recognized MP3 file only # Returns: 1 on success, 0 if no audio header was found sub ParseMPEGAudio($$;$) { my ($et, $buffPt, $mp3) = @_; my ($word, $pos); my $ext = $$et{FILE_EXT} || ''; for (;;) { # find frame sync return 0 unless $$buffPt =~ m{(\xff.{3})}sg; $word = unpack('N', $1); # get audio frame header word unless (($word & 0xffe00000) == 0xffe00000) { pos($$buffPt) = pos($$buffPt) - 2; # next possible location for frame sync next; } # validate header as much as possible if (($word & 0x180000) == 0x080000 or # 01 is a reserved version ID ($word & 0x060000) == 0x000000 or # 00 is a reserved layer description ($word & 0x00f000) == 0x000000 or # 0000 is the "free" bitrate index ($word & 0x00f000) == 0x00f000 or # 1111 is a bad bitrate index ($word & 0x000c00) == 0x000c00 or # 11 is a reserved sampling frequency ($word & 0x000003) == 0x000002 or # 10 is a reserved emphasis (($mp3 and ($word & 0x060000) != 0x020000))) # must be layer 3 for MP3 { # give up easily unless this really should be an MP3 file return 0 unless $ext eq 'MP3'; pos($$buffPt) = pos($$buffPt) - 1; next; } $pos = pos($$buffPt); last; } # set file type if not done already $et->SetFileType(); my $tagTablePtr = GetTagTable('Image::ExifTool::MPEG::Audio'); ProcessFrameHeader($et, $tagTablePtr, $word); # extract the VBR information (ref MP3::Info) my ($v, $m) = ($$et{MPEG_Vers}, $$et{MPEG_Mode}); while (defined $v and defined $m) { my $len = length $$buffPt; $pos += $v == 3 ? ($m == 3 ? 17 : 32) : ($m == 3 ? 9 : 17); last if $pos + 8 > $len; my $buff = substr($$buffPt, $pos, 8); last unless $buff =~ /^(Xing|Info)/; my $xingTable = GetTagTable('Image::ExifTool::MPEG::Xing'); my $vbrScale; my $flags = unpack('x4N', $buff); my $isVBR = ($buff !~ /^Info/); # Info frame is not VBR (ref 5) $pos += 8; if ($flags & 0x01) { # VBRFrames last if $pos + 4 > $len; $et->HandleTag($xingTable, 1, unpack("x${pos}N", $$buffPt)) if $isVBR; $pos += 4; } if ($flags & 0x02) { # VBRBytes last if $pos + 4 > $len; $et->HandleTag($xingTable, 2, unpack("x${pos}N", $$buffPt)) if $isVBR; $pos += 4; } if ($flags & 0x04) { # VBR_TOC last if $pos + 100 > $len; # (ignore toc for now) $pos += 100; } if ($flags & 0x08) { # VBRScale last if $pos + 4 > $len; $vbrScale = unpack("x${pos}N", $$buffPt); $et->HandleTag($xingTable, 3, $vbrScale) if $isVBR; $pos += 4; } # process Lame header (ref 5) if ($flags & 0x10) { # Lame last if $pos + 348 > $len; } elsif ($pos + 4 <= $len) { my $lib = substr($$buffPt, $pos, 4); unless ($lib eq 'LAME' or $lib eq 'GOGO') { # attempt to identify other encoders my $n; if (index($$buffPt, 'RCA mp3PRO Encoder') >= 0) { $lib = 'RCA mp3PRO'; } elsif (($n = index($$buffPt, 'THOMSON mp3PRO Encoder')) >= 0) { $lib = 'Thomson mp3PRO'; $n += 22; $lib .= ' ' . substr($$buffPt, $n, 6) if length($$buffPt) - $n >= 6; } elsif (index($$buffPt, 'MPGE') >= 0) { $lib = 'Gogo (<3.0)'; } else { last; } $et->HandleTag($xingTable, 4, $lib); last; } } my $lameLen = $len - $pos; last if $lameLen < 9; my $enc = substr($$buffPt, $pos, 9); if ($enc ge 'LAME3.90') { $et->HandleTag($xingTable, 4, $enc); if ($vbrScale <= 100) { $et->HandleTag($xingTable, 5, int((100 - $vbrScale) / 10)); $et->HandleTag($xingTable, 6, (100 - $vbrScale) % 10); } my %dirInfo = ( DataPt => $buffPt, DirStart => $pos, DirLen => length($$buffPt) - $pos, ); my $subTablePtr = GetTagTable('Image::ExifTool::MPEG::Lame'); $et->ProcessDirectory(\%dirInfo, $subTablePtr); } else { $et->HandleTag($xingTable, 4, substr($$buffPt, $pos, 20)); } last; # (didn't want to loop anyway) } return 1; } #------------------------------------------------------------------------------ # Read MPEG video frame header # Inputs: 0) ExifTool object reference, 1) Reference to video data # Returns: 1 on success, 0 if no video header was found sub ProcessMPEGVideo($$) { my ($et, $buffPt) = @_; return 0 unless length $$buffPt >= 4; my ($w1, $w2) = unpack('N2', $$buffPt); # validate as much as possible if (($w1 & 0x000000f0) == 0x00000000 or # 0000 is a forbidden aspect ratio ($w1 & 0x000000f0) == 0x000000f0 or # 1111 is a reserved aspect ratio ($w1 & 0x0000000f) == 0 or # frame rate must be 1-8 ($w1 & 0x0000000f) > 8) { return 0; } # set file type if not done already $et->SetFileType('MPEG') unless $$et{VALUE}{FileType}; my $tagTablePtr = GetTagTable('Image::ExifTool::MPEG::Video'); ProcessFrameHeader($et, $tagTablePtr, $w1, $w2); return 1; } #------------------------------------------------------------------------------ # Read MPEG audio and video frame headers # Inputs: 0) ExifTool object reference, 1) Reference to audio/video data # Returns: 1 on success, 0 if no video header was found # To Do: Properly parse MPEG streams: # 0xb7 - sequence end # 0xb9 - end code # 0xba - pack start code # 0xbb - system header # 0xbc - program map <-- should parse this # 0xbd - private stream 1 --> for VOB, this contains sub-streams: # 0x20-0x3f - pictures # 0x80-0x87 - audio (AC3,DTS,SDDS) # 0xa0-0xa7 - audio (LPCM) # 0xbe - padding # 0xbf - private stream 2 # 0xc0-0xdf - audio stream # 0xe0-0xef - video stream sub ParseMPEGAudioVideo($$) { my ($et, $buffPt) = @_; my (%found, $didHdr); my $rtnVal = 0; my %proc = ( audio => \&ParseMPEGAudio, video => \&ProcessMPEGVideo ); delete $$et{AudioBitrate}; delete $$et{VideoBitrate}; while ($$buffPt =~ /\0\0\x01(\xb3|\xc0)/g) { my $type = $1 eq "\xb3" ? 'video' : 'audio'; unless ($didHdr) { # make sure we didn't miss an audio frame sync before this (eg. MP3 file) # (the last byte of the 4-byte MP3 audio frame header word may be zero, # but the 2nd last must be non-zero, so we need only check to pos-3) my $buff = substr($$buffPt, 0, pos($$buffPt) - 3); $found{audio} = 1 if ParseMPEGAudio($et, \$buff); $didHdr = 1; } next if $found{$type}; my $len = length($$buffPt) - pos($$buffPt); last if $len < 4; $len > 256 and $len = 256; my $dat = substr($$buffPt, pos($$buffPt), $len); # process MPEG audio or video if (&{$proc{$type}}($et, \$dat)) { $rtnVal = 1; $found{$type} = 1; # done if we found audio and video last if scalar(keys %found) == 2; } } return $rtnVal; } #------------------------------------------------------------------------------ # Read information from an MPEG file # Inputs: 0) ExifTool object reference, 1) Directory information reference # Returns: 1 on success, 0 if this wasn't a valid MPEG file sub ProcessMPEG($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $buff; $raf->Read($buff, 4) == 4 or return 0; return 0 unless $buff =~ /^\0\0\x01[\xb0-\xbf]/; $et->SetFileType(); $raf->Seek(0,0); $raf->Read($buff, 65536*4) or return 0; return ParseMPEGAudioVideo($et, \$buff); } 1; # end __END__ =head1 NAME Image::ExifTool::MPEG - Read MPEG-1 and MPEG-2 meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read MPEG-1 and MPEG-2 audio/video files. =head1 NOTES Since ISO charges money for the official MPEG specification, this module is based on unofficial sources which may be incomplete, inaccurate or outdated. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.mp3-tech.org/> =item L<http://www.getid3.org/> =item L<http://dvd.sourceforge.net/dvdinfo/dvdmpeg.html> =item L<http://ffmpeg.org/> =item L<http://sourceforge.net/projects/mediainfo/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/MPEG Tags>, L<MP3::Info(3pm)|MP3::Info>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/MPF.pm������������������������������������������������������000644 �000765 �000024 �00000021660 12642461317 020677� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MPF.pm # # Description: Read Multi-Picture Format information # # Revisions: 06/12/2009 - P. Harvey Created # # References: 1) http://www.cipa.jp/std/documents/e/DC-007_E.pdf #------------------------------------------------------------------------------ package Image::ExifTool::MPF; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.12'; sub ProcessMPImageList($$$); # Tags found in MPF APP2 segment in JPEG images %Image::ExifTool::MPF::Main = ( GROUPS => { 0 => 'MPF', 1 => 'MPF0', 2 => 'Image'}, NOTES => q{ These tags are part of the CIPA Multi-Picture Format specification, and are found in the APP2 "MPF" segment of JPEG images. MPImage data referenced from this segment is stored as a JPEG trailer. The MPF tags are not writable, however the MPF segment may be deleted as a group (with "MPF:All") but then the JPEG trailer should also be deleted (with "Trailer:All"). See L<http://www.cipa.jp/std/documents/e/DC-007_E.pdf> for the official specification. }, 0xb000 => 'MPFVersion', 0xb001 => 'NumberOfImages', 0xb002 => { Name => 'MPImageList', SubDirectory => { TagTable => 'Image::ExifTool::MPF::MPImage', ProcessProc => \&ProcessMPImageList, }, }, 0xb003 => { Name => 'ImageUIDList', Binary => 1, }, 0xb004 => 'TotalFrames', 0xb101 => 'MPIndividualNum', 0xb201 => { Name => 'PanOrientation', PrintHex => 1, Notes => 'long integer is split into 4 bytes', ValueConv => 'join(" ",unpack("C*",pack("N",$val)))', PrintConv => [ '"$val rows"', '"$val columns"', { 0 => '[unused]', 1 => 'Start at top right', 2 => 'Start at top left', 3 => 'Start at bottom left', 4 => 'Start at bottom right', }, { 0x01 => 'Left to right', 0x02 => 'Right to left', 0x03 => 'Top to bottom', 0x04 => 'Bottom to top', 0x10 => 'Clockwise', 0x20 => 'Counter clockwise', 0x30 => 'Zigzag (row start)', 0x40 => 'Zigzag (column start)', }, ], }, 0xb202 => 'PanOverlapH', 0xb203 => 'PanOverlapV', 0xb204 => 'BaseViewpointNum', 0xb205 => 'ConvergenceAngle', 0xb206 => 'BaselineLength', 0xb207 => 'VerticalDivergence', 0xb208 => 'AxisDistanceX', 0xb209 => 'AxisDistanceY', 0xb20a => 'AxisDistanceZ', 0xb20b => 'YawAngle', 0xb20c => 'PitchAngle', 0xb20d => 'RollAngle', ); # Tags found in MPImage structure %Image::ExifTool::MPF::MPImage = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, #WRITE_PROC => \&Image::ExifTool::WriteBinaryData, #CHECK_PROC => \&Image::ExifTool::CheckBinaryData, #WRITABLE => 1, GROUPS => { 0 => 'MPF', 1 => 'MPImage', 2 => 'Image'}, NOTES => q{ The first MPF "Large Thumbnail" image is extracted as PreviewImage, and the rest of the embedded MPF images are extracted as MPImage#. The ExtractEmbedded (-ee) option may be used to extract information from these embedded images. }, 0.1 => { Name => 'MPImageFlags', Format => 'int32u', Mask => 0xf8000000, PrintConv => { BITMASK => { 29 => 'Representative image', 30 => 'Dependent child image', 31 => 'Dependent parent image', }}, }, 0.2 => { Name => 'MPImageFormat', Format => 'int32u', Mask => 0x07000000, PrintConv => { 0 => 'JPEG', }, }, 0.3 => { Name => 'MPImageType', Format => 'int32u', Mask => 0x00ffffff, PrintHex => 1, PrintConv => { 0x000000 => 'Undefined', 0x010001 => 'Large Thumbnail (VGA equivalent)', 0x010002 => 'Large Thumbnail (full HD equivalent)', 0x020001 => 'Multi-frame Panorama', 0x020002 => 'Multi-frame Disparity', 0x020003 => 'Multi-angle', 0x030000 => 'Baseline MP Primary Image', }, }, 4 => { Name => 'MPImageLength', Format => 'int32u', }, 8 => { Name => 'MPImageStart', Format => 'int32u', IsOffset => '$val', }, 12 => { Name => 'DependentImage1EntryNumber', Format => 'int16u', }, 14 => { Name => 'DependentImage2EntryNumber', Format => 'int16u', }, ); # extract MP Images as composite tags %Image::ExifTool::MPF::Composite = ( GROUPS => { 2 => 'Preview' }, MPImage => { Require => { 0 => 'MPImageStart', 1 => 'MPImageLength', 2 => 'MPImageType', }, Notes => q{ the first MPF "Large Thumbnail" is extracted as PreviewImage, and the rest of the embedded MPF images are extracted as MPImage#. The ExtractEmbedded option may be used to extract information from these embedded images. }, # extract all MPF images (not just one) RawConv => q{ require Image::ExifTool::MPF; Image::ExifTool::MPF::ExtractMPImages($self); }, }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::MPF'); #------------------------------------------------------------------------------ # Extract all MP images # Inputs: 0) ExifTool object ref # Returns: undef sub ExtractMPImages($) { my $et = shift; my $ee = $et->Options('ExtractEmbedded'); my $saveBinary = $et->Options('Binary'); my ($i, $didPreview, $xtra); for ($i=1; $xtra or not defined $xtra; ++$i) { # run through MP images in the same order they were extracted $xtra = defined $$et{VALUE}{"MPImageStart ($i)"} ? " ($i)" : ''; my $off = $et->GetValue("MPImageStart$xtra", 'ValueConv'); my $len = $et->GetValue("MPImageLength$xtra", 'ValueConv'); if ($off and $len) { my $type = $et->GetValue("MPImageType$xtra", 'ValueConv'); my $tag = "MPImage$i"; # store first "Large Thumbnail" as a PreviewImage if (not $didPreview and $type and ($type & 0x0f0000) == 0x010000) { $tag = 'PreviewImage'; $didPreview = 1; } $et->Options('Binary', 1) if $ee; my $val = Image::ExifTool::Exif::ExtractImage($et, $off, $len, $tag); $et->Options('Binary', $saveBinary) if $ee; next unless defined $val; unless ($Image::ExifTool::Extra{$tag}) { AddTagToTable(\%Image::ExifTool::Extra, $tag, { Name => $tag, Groups => { 0 => 'Composite', 1 => 'Composite', 2 => 'Preview'}, }); } my $key = $et->FoundTag($tag, $val); # set groups for PreviewImage if ($tag eq 'PreviewImage') { $et->SetGroup($key, 'Composite', 0); $et->SetGroup($key, 'Composite'); } # extract information from MP images if ExtractEmbedded option used if ($ee) { my $oldBase = $$et{BASE}; $$et{BASE} = $off; $$et{DOC_NUM} = $i; $et->ExtractInfo($val, { ReEntry => 1 }); delete $$et{DOC_NUM}; $$et{BASE} = $oldBase; } } } return undef; } #------------------------------------------------------------------------------ # Process MP Entry list # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessMPImageList($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $num = int($$dirInfo{DirLen} / 16); # (16 bytes per MP Entry) $$dirInfo{DirLen} = 16; my ($i, $success); my $oldG1 = $$et{SET_GROUP1}; for ($i=0; $i<$num; ++$i) { $$et{SET_GROUP1} = '+' . ($i + 1); $success = $et->ProcessBinaryData($dirInfo, $tagTablePtr); $$dirInfo{DirStart} += 16; } $$et{SET_GROUP1} = $oldG1; return $success; } 1; # end __END__ =head1 NAME Image::ExifTool::MPF - Read Multi-Picture Format information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains tag definitions and routines to read Multi-Picture Format (MPF) information from JPEG images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.cipa.jp/std/documents/e/DC-007_E.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/MPF Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/MWG.pm������������������������������������������������������000644 �000765 �000024 �00000073525 12642461320 020710� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MWG.pm # # Description: Metadata Working Group support # # Revisions: 2009/10/21 - P. Harvey Created # # References: 1) http://www.metadataworkinggroup.org/ #------------------------------------------------------------------------------ package Image::ExifTool::MWG; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; use Image::ExifTool::XMP; $VERSION = '1.16'; sub RecoverTruncatedIPTC($$$); sub ListToString($); sub StringToList($$); sub OverwriteStringList($$$$); my $mwgLoaded; # flag set if we alreaded Load()ed the MWG tags # MWG Composite tags %Image::ExifTool::MWG::Composite = ( GROUPS => { 0 => 'Composite', 1 => 'MWG', 2 => 'Image' }, VARS => { NO_ID => 1 }, NOTES => q{ The table below lists special Composite tags which are used to access other tags based on the MWG 2.0 recommendations. These tags are only accessible when explicitly loaded, but this is done automatically by the exiftool application if MWG is specified as a group for any tag on the command line, or manually with the C<-use MWG> option. Via the API, the MWG Composite tags are loaded by calling "C<Image::ExifTool::MWG::Load()>". When reading, the value of each MWG tag is B<Derived From> the specified tags based on the MWG guidelines. When writing, the appropriate associated tags are written. The value of the IPTCDigest tag is updated automatically when the IPTC is changed if either the IPTCDigest tag didn't exist beforehand or its value agreed with the original IPTC digest (indicating that the XMP is synchronized with the IPTC). IPTC information is written only if the original file contained IPTC. Loading the MWG module activates "strict MWG conformance mode", which has the effect of causing EXIF, IPTC and XMP in non-standard locations to be ignored when reading, as per the MWG recommendations. Instead, a "Warning" tag is generated when non-standard metadata is encountered. This feature may be disabled by setting C<$Image::ExifTool::MWG::strict = 0> in the L<ExifTool config file|../config.html> (or from your Perl script when using the API). Note that the behaviour when writing is not changed: ExifTool always creates new records only in the standard location, but writes new tags to any EXIF/IPTC/XMP records that exist. Contrary to the EXIF specification, the MWG recommends that EXIF "ASCII" string values be stored as UTF-8. To honour this, the exiftool application sets the default internal EXIF string encoding to "UTF8" when the MWG module is loaded, but via the API this must be done manually by setting the CharsetEXIF option. A complication of the MWG specification is that although the MWG:Creator property may consist of multiple values, the associated EXIF tag (EXIF:Artist) is only a simple string. To resolve this discrepancy the MWG recommends a technique which allows a list of values to be stored in a string by using a semicolon-space separator (with quotes around values if necessary). When the MWG module is loaded, ExifTool automatically implements this policy and changes EXIF:Artist to a list-type tag. }, Keywords => { Flags => ['Writable','List'], Desire => { 0 => 'IPTC:Keywords', # (64-character limit) 1 => 'XMP-dc:Subject', 2 => 'CurrentIPTCDigest', 3 => 'IPTCDigest', }, RawConv => q{ return $val[1] if not defined $val[2] or (defined $val[1] and (not defined $val[3] or $val[2] eq $val[3])); return Image::ExifTool::MWG::RecoverTruncatedIPTC($val[0], $val[1], 64); }, DelCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteAlso => { # only write Keywords if IPTC exists (eg. set EditGroup option) 'IPTC:Keywords' => '$opts{EditGroup} = 1; $val', 'XMP-dc:Subject' => '$val', }, }, Description => { Writable => 1, Desire => { 0 => 'EXIF:ImageDescription', 1 => 'IPTC:Caption-Abstract', # (2000-character limit) 2 => 'XMP-dc:Description', 3 => 'CurrentIPTCDigest', 4 => 'IPTCDigest', }, RawConv => q{ return $val[0] if defined $val[0] and $val[0] !~ /^ *$/; return $val[2] if not defined $val[3] or (defined $val[2] and (not defined $val[4] or $val[3] eq $val[4])); return Image::ExifTool::MWG::RecoverTruncatedIPTC($val[1], $val[2], 2000); }, DelCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteAlso => { 'EXIF:ImageDescription' => '$val', 'IPTC:Caption-Abstract' => '$opts{EditGroup} = 1; $val', 'XMP-dc:Description' => '$val', }, }, DateTimeOriginal => { Description => 'Date/Time Original', Groups => { 2 => 'Time' }, Notes => '"creation date of the intellectual content being shown" - MWG', Writable => 1, Desire => { 0 => 'EXIF:DateTimeOriginal', 1 => 'EXIF:SubSecTimeOriginal', 2 => 'IPTC:DateCreated', 3 => 'IPTC:TimeCreated', 4 => 'XMP-photoshop:DateCreated', 5 => 'CurrentIPTCDigest', 6 => 'IPTCDigest', }, # must check for validity in RawConv to avoid hiding a same-named tag, # but IPTC dates use a ValueConv so we need to derive the value there RawConv => '(defined $val[0] or defined $val[2] or defined $val[4]) ? $val : undef', ValueConv => q{ if (defined $val[0] and $val[0] !~ /^[: ]*$/) { return ($val[1] and $val[1] !~ /^ *$/) ? "$val[0].$val[1]" : $val[0]; } return $val[4] if not defined $val[5] or (defined $val[4] and (not defined $val[6] or $val[5] eq $val[6])); return $val[3] ? "$val[2] $val[3]" : $val[2] if $val[2]; return undef; }, PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,undef,1)', DelCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteAlso => { # set EXIF date/time values according to PrintConv option instead # of defaulting to Type=ValueConv to allow reformatting to be applied 'EXIF:DateTimeOriginal' => 'delete $opts{Type}; $val', 'EXIF:SubSecTimeOriginal' => 'delete $opts{Type}; $val', 'IPTC:DateCreated' => '$opts{EditGroup} = 1; $val', 'IPTC:TimeCreated' => '$opts{EditGroup} = 1; $val', 'XMP-photoshop:DateCreated' => '$val', }, }, CreateDate => { Groups => { 2 => 'Time' }, Notes => '"creation date of the digital representation" - MWG', Writable => 1, Desire => { 0 => 'EXIF:CreateDate', 1 => 'EXIF:SubSecTimeDigitized', 2 => 'IPTC:DigitalCreationDate', 3 => 'IPTC:DigitalCreationTime', 4 => 'XMP-xmp:CreateDate', 5 => 'CurrentIPTCDigest', 6 => 'IPTCDigest', }, RawConv => '(defined $val[0] or defined $val[2] or defined $val[4]) ? $val : undef', ValueConv => q{ if (defined $val[0] and $val[0] !~ /^[: ]*$/) { return ($val[1] and $val[1] !~ /^ *$/) ? "$val[0].$val[1]" : $val[0]; } return $val[4] if not defined $val[5] or (defined $val[4] and (not defined $val[6] or $val[5] eq $val[6])); return $val[3] ? "$val[2] $val[3]" : $val[2] if $val[2]; return undef; }, PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,undef,1)', DelCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteAlso => { 'EXIF:CreateDate' => 'delete $opts{Type}; $val', 'EXIF:SubSecTimeDigitized' => 'delete $opts{Type}; $val', 'IPTC:DigitalCreationDate' => '$opts{EditGroup} = 1; $val', 'IPTC:DigitalCreationTime' => '$opts{EditGroup} = 1; $val', 'XMP-xmp:CreateDate' => '$val', }, }, ModifyDate => { Groups => { 2 => 'Time' }, Notes => '"modification date of the digital image file" - MWG', Writable => 1, Desire => { 0 => 'EXIF:ModifyDate', 1 => 'EXIF:SubSecTime', 2 => 'XMP-xmp:ModifyDate', 3 => 'CurrentIPTCDigest', 4 => 'IPTCDigest', }, RawConv => q{ if (defined $val[0] and $val[0] !~ /^[: ]*$/) { return ($val[1] and $val[1] !~ /^ *$/) ? "$val[0].$val[1]" : $val[0]; } return $val[2] if not defined $val[3] or not defined $val[4] or $val[3] eq $val[4]; return undef; }, PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,undef,1)', # return empty string from check routines so this tag will never be set # (only WriteAlso tags are written), the only difference is a -v2 message DelCheck => '""', WriteCheck => '""', WriteAlso => { 'EXIF:ModifyDate' => 'delete $opts{Type}; $val', 'EXIF:SubSecTime' => 'delete $opts{Type}; $val', 'XMP-xmp:ModifyDate' => '$val', }, }, Orientation => { Writable => 1, Require => 'EXIF:Orientation', ValueConv => '$val', PrintConv => \%Image::ExifTool::Exif::orientation, DelCheck => '""', WriteCheck => '""', WriteAlso => { 'EXIF:Orientation' => '$val', }, }, Rating => { Writable => 1, Require => 'XMP-xmp:Rating', ValueConv => '$val', DelCheck => '""', WriteCheck => '""', WriteAlso => { 'XMP-xmp:Rating' => '$val', }, }, Copyright => { Groups => { 2 => 'Author' }, Writable => 1, Desire => { 0 => 'EXIF:Copyright', 1 => 'IPTC:CopyrightNotice', # (128-character limit) 2 => 'XMP-dc:Rights', 3 => 'CurrentIPTCDigest', 4 => 'IPTCDigest', }, RawConv => q{ return $val[0] if defined $val[0] and $val[0] !~ /^ *$/; return $val[2] if not defined $val[3] or (defined $val[2] and (not defined $val[4] or $val[3] eq $val[4])); return Image::ExifTool::MWG::RecoverTruncatedIPTC($val[1], $val[2], 128); }, DelCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteAlso => { 'EXIF:Copyright' => '$val', 'IPTC:CopyrightNotice' => '$opts{EditGroup} = 1; $val', 'XMP-dc:Rights' => '$val', }, }, Creator => { Groups => { 2 => 'Author' }, Flags => ['Writable','List'], Desire => { 0 => 'EXIF:Artist', 1 => 'IPTC:By-line', # (32-character limit) 2 => 'XMP-dc:Creator', 3 => 'CurrentIPTCDigest', 4 => 'IPTCDigest', }, RawConv => q{ return $val[0] if defined $val[0] and $val[0] !~ /^ *$/; return $val[2] if not defined $val[3] or (defined $val[2] and (not defined $val[4] or $val[3] eq $val[4])); return Image::ExifTool::MWG::RecoverTruncatedIPTC($val[1], $val[2], 32); }, DelCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteAlso => { 'EXIF:Artist' => '$val', 'IPTC:By-line' => '$opts{EditGroup} = 1; $val', 'XMP-dc:Creator' => '$val', }, }, Country => { Groups => { 2 => 'Location' }, Writable => 1, Desire => { 0 => 'IPTC:Country-PrimaryLocationName', # (64-character limit) 1 => 'XMP-photoshop:Country', 2 => 'XMP-iptcExt:LocationShownCountryName', 3 => 'CurrentIPTCDigest', 4 => 'IPTCDigest', }, RawConv => q{ my $xmpVal = $val[2] || $val[1]; return $xmpVal if not defined $val[3] or (defined $xmpVal and (not defined $val[4] or $val[3] eq $val[4])); return Image::ExifTool::MWG::RecoverTruncatedIPTC($val[0], $xmpVal, 64); }, DelCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteAlso => { 'IPTC:Country-PrimaryLocationName' => '$opts{EditGroup} = 1; $val', 'XMP-photoshop:Country' => '$val', # (legacy) 'XMP-iptcExt:LocationShownCountryName' => '$val', }, }, State => { Groups => { 2 => 'Location' }, Writable => 1, Desire => { 0 => 'IPTC:Province-State', # (32-character limit) 1 => 'XMP-photoshop:State', 2 => 'XMP-iptcExt:LocationShownProvinceState', 3 => 'CurrentIPTCDigest', 4 => 'IPTCDigest', }, RawConv => q{ my $xmpVal = $val[2] || $val[1]; return $xmpVal if not defined $val[3] or (defined $xmpVal and (not defined $val[4] or $val[3] eq $val[4])); return Image::ExifTool::MWG::RecoverTruncatedIPTC($val[0], $xmpVal, 32); }, DelCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteAlso => { 'IPTC:Province-State' => '$opts{EditGroup} = 1; $val', 'XMP-photoshop:State' => '$val', # (legacy) 'XMP-iptcExt:LocationShownProvinceState' => '$val', }, }, City => { Groups => { 2 => 'Location' }, Writable => 1, Desire => { 0 => 'IPTC:City', # (32-character limit) 1 => 'XMP-photoshop:City', 2 => 'XMP-iptcExt:LocationShownCity', 3 => 'CurrentIPTCDigest', 4 => 'IPTCDigest', }, RawConv => q{ my $xmpVal = $val[2] || $val[1]; return $xmpVal if not defined $val[3] or (defined $xmpVal and (not defined $val[4] or $val[3] eq $val[4])); return Image::ExifTool::MWG::RecoverTruncatedIPTC($val[0], $xmpVal, 32); }, DelCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteAlso => { 'IPTC:City' => '$opts{EditGroup} = 1; $val', 'XMP-photoshop:City' => '$val', # (legacy) 'XMP-iptcExt:LocationShownCity' => '$val', }, }, Location => { Groups => { 2 => 'Location' }, Writable => 1, Desire => { 0 => 'IPTC:Sub-location', # (32-character limit) 1 => 'XMP-iptcCore:Location', 2 => 'XMP-iptcExt:LocationShownSublocation', 3 => 'CurrentIPTCDigest', 4 => 'IPTCDigest', }, RawConv => q{ my $xmpVal = $val[2] || $val[1]; return $xmpVal if not defined $val[3] or (defined $xmpVal and (not defined $val[4] or $val[3] eq $val[4])); return Image::ExifTool::MWG::RecoverTruncatedIPTC($val[0], $xmpVal, 32); }, DelCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteCheck => 'Image::ExifTool::MWG::ReconcileIPTCDigest($self)', WriteAlso => { 'IPTC:Sub-location' => '$opts{EditGroup} = 1; $val', 'XMP-iptcCore:Location' => '$val', # (legacy) 'XMP-iptcExt:LocationShownSublocation' => '$val', }, }, ); # MWG XMP structures my %sExtensions = ( STRUCT_NAME => 'MWG Extensions', NAMESPACE => undef, # variable namespace NOTES => q{ This structure may contain any top-level XMP tags, but none have been pre-defined in ExifTool. Since no flattened tags have been pre-defined, RegionExtensions is writable only as a structure (eg. C<{xmp-dc:creator=me,rating=5}>). Fields for this structure are identified using the standard ExifTool tag name (with optional leading group name, and/or trailing language code, and/or trailing C<#> symbol to disable print conversion). }, ); my %sRegionStruct = ( STRUCT_NAME => 'MWG RegionStruct', NAMESPACE => 'mwg-rs', Area => { Struct => \%Image::ExifTool::XMP::sArea }, Type => { PrintConv => { Face => 'Face', Pet => 'Pet', Focus => 'Focus', BarCode => 'BarCode', }, }, Name => { }, Description => { }, FocusUsage => { PrintConv => { EvaluatedUsed => 'Evaluated, Used', EvaluatedNotUsed => 'Evaluated, Not Used', NotEvaluatedNotUsed => 'Not Evaluated, Not Used', }, }, BarCodeValue=> { }, Extensions => { Struct => \%sExtensions }, Rotation => { # (observed in LR6 XMP) Writable => 'real', Notes => 'RegionsRegionListRotation, not part of MWG 2.0 spec', }, seeAlso => { Namespace => 'rdfs', Resource => 1 }, ); my %sKeywordStruct; %sKeywordStruct = ( STRUCT_NAME => 'MWG KeywordStruct', NAMESPACE => 'mwg-kw', Keyword => { }, Applied => { Writable => 'boolean' }, Children => { Struct => \%sKeywordStruct, List => 'Bag' }, ); # MWG 2.0 XMP region namespace tags %Image::ExifTool::MWG::Regions = ( %Image::ExifTool::XMP::xmpTableDefaults, GROUPS => { 0 => 'XMP', 1 => 'XMP-mwg-rs', 2 => 'Image' }, NAMESPACE => 'mwg-rs', NOTES => q{ Image region metadata defined by the MWG 2.0 specification. These tags belong to the ExifTool XMP-mwg-rs group, and as such they may be accessed without the need to load the MWG Composite tags above. See L<http://www.metadataworkinggroup.org/> for the official specification. }, Regions => { Name => 'RegionInfo', FlatName => 'Region', Struct => { STRUCT_NAME => 'MWG RegionInfo', NAMESPACE => 'mwg-rs', RegionList => { FlatName => 'Region', Struct => \%sRegionStruct, List => 'Bag', }, AppliedToDimensions => { Struct => \%Image::ExifTool::XMP::sDimensions }, }, }, RegionsRegionList => { Flat => 1, Name => 'RegionList' }, ); # MWG 2.0 XMP hierarchical keyword namespace tags %Image::ExifTool::MWG::Keywords = ( %Image::ExifTool::XMP::xmpTableDefaults, GROUPS => { 0 => 'XMP', 1 => 'XMP-mwg-kw', 2 => 'Image' }, NAMESPACE => 'mwg-kw', NOTES => q{ Hierarchical keywords metadata defined by the MWG 2.0 specification. These tags belong to the ExifTool XMP-mwg-kw group. ExifTool unrolls keyword structures to an arbitrary depth of 6 to allow individual levels to be accessed with different tag names, and to avoid infinite recursion. See L<http://www.metadataworkinggroup.org/> for the official specification. }, # arbitrarily define only the first 6 levels of the keyword hierarchy Keywords => { Name => 'KeywordInfo', Struct => { STRUCT_NAME => 'MWG KeywordInfo', NAMESPACE => 'mwg-kw', Hierarchy => { Struct => \%sKeywordStruct, List => 'Bag' }, }, }, KeywordsHierarchy => { Name => 'HierarchicalKeywords', Flat => 1 }, KeywordsHierarchyKeyword => { Name => 'HierarchicalKeywords1', Flat => 1 }, KeywordsHierarchyApplied => { Name => 'HierarchicalKeywords1Applied', Flat => 1 }, KeywordsHierarchyChildren => { Name => 'HierarchicalKeywords1Children', Flat => 1 }, KeywordsHierarchyChildrenKeyword => { Name => 'HierarchicalKeywords2', Flat => 1 }, KeywordsHierarchyChildrenApplied => { Name => 'HierarchicalKeywords2Applied', Flat => 1 }, KeywordsHierarchyChildrenChildren => { Name => 'HierarchicalKeywords2Children', Flat => 1 }, KeywordsHierarchyChildrenChildrenKeyword => { Name => 'HierarchicalKeywords3', Flat => 1 }, KeywordsHierarchyChildrenChildrenApplied => { Name => 'HierarchicalKeywords3Applied', Flat => 1 }, KeywordsHierarchyChildrenChildrenChildren => { Name => 'HierarchicalKeywords3Children', Flat => 1 }, KeywordsHierarchyChildrenChildrenChildrenKeyword => { Name => 'HierarchicalKeywords4', Flat => 1 }, KeywordsHierarchyChildrenChildrenChildrenApplied => { Name => 'HierarchicalKeywords4Applied', Flat => 1 }, KeywordsHierarchyChildrenChildrenChildrenChildren => { Name => 'HierarchicalKeywords4Children', Flat => 1 }, KeywordsHierarchyChildrenChildrenChildrenChildrenKeyword => { Name => 'HierarchicalKeywords5', Flat => 1 }, KeywordsHierarchyChildrenChildrenChildrenChildrenApplied => { Name => 'HierarchicalKeywords5Applied', Flat => 1 }, KeywordsHierarchyChildrenChildrenChildrenChildrenChildren => { Name => 'HierarchicalKeywords5Children', Flat => 1, NoSubStruct => 1 }, # break infinite recursion KeywordsHierarchyChildrenChildrenChildrenChildrenChildrenKeyword => { Name => 'HierarchicalKeywords6', Flat => 1 }, KeywordsHierarchyChildrenChildrenChildrenChildrenChildrenApplied => { Name => 'HierarchicalKeywords6Applied', Flat => 1 }, ); # MWG 2.0 XMP collections namespace tags %Image::ExifTool::MWG::Collections = ( %Image::ExifTool::XMP::xmpTableDefaults, GROUPS => { 0 => 'XMP', 1 => 'XMP-mwg-coll', 2 => 'Image' }, NAMESPACE => 'mwg-coll', NOTES => q{ Collections metadata defined by the MWG 2.0 specification. These tags belong to the ExifTool XMP-mwg-coll group. See L<http://www.metadataworkinggroup.org/> for the official specification. }, Collections => { FlatName => '', List => 'Bag', Struct => { STRUCT_NAME => 'MWG CollectionInfo', NAMESPACE => 'mwg-coll', CollectionName => { }, CollectionURI => { }, }, }, ); #------------------------------------------------------------------------------ # Load the MWG Composite tags sub Load() { return if $mwgLoaded; # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::MWG'); # must also add to lookup so we can write them # (since MWG tags aren't in the tag lookup by default) Image::ExifTool::AddTagsToLookup(\%Image::ExifTool::MWG::Composite, 'Image::ExifTool::Composite'); # modify EXIF:Artist to behave as a list-type tag my $artist = $Image::ExifTool::Exif::Main{0x13b}; $$artist{List} = 1; $$artist{IsOverwriting} = \&OverwriteStringList; $$artist{RawConv} = \&StringToList; # enable MWG strict mode if not set already # (causes non-standard EXIF, IPTC and XMP to be ignored) $Image::ExifTool::MWG::strict = 1 unless defined $Image::ExifTool::MWG::strict; $mwgLoaded = 1; } #------------------------------------------------------------------------------ # Change a list of values to a string using MWG rules # Inputs: 0)reference to list of values # Returns: string of values (and may reformat list entries) sub ListToString($) { my $vals = shift; foreach (@$vals) { # double all quotes in value and quote the value if it begins # with a quote or contains a semicolon-space separator if (/^"/ or /; /) { s/"/""/g; # double all quotes $_ = qq{"$_"}; # quote the value } } return join('; ', @$vals); } #------------------------------------------------------------------------------ # Change a string value to a list of values using MWG rules # Inputs: 0) string of values, 1) ExifTool ref # Returns: value or list reference if more than one value # Notes: Sets Warning tag on error sub StringToList($$) { my ($str, $et) = @_; my (@vals, $inQuotes); my @t = split '; ', $str, -1; foreach (@t) { my $wasQuotes = $inQuotes; $inQuotes = 1 if not $inQuotes and s/^"//; if ($inQuotes) { # remove the last quote and reset the inQuotes flag if # the value ended in an odd number of quotes $inQuotes = 0 if s/((^|[^"])("")*)"$/$1/; s/""/"/g; # un-double the contained quotes } if ($wasQuotes) { # previous separator was quoted, so concatinate with previous value $vals[-1] .= '; ' . $_; } else { push @vals, $_; } } $et->Warn('Incorrectly quoted MWG string-list value') if $inQuotes; return @vals > 1 ? \@vals : $vals[0]; } #------------------------------------------------------------------------------ # Handle logic for overwriting EXIF string-type list tag # Inputs: 0) new value hash ref, 1) new value hash ref, # 2) old string value (or undef if it didn't exist), 3) new value ref # Returns: 1 and sets the new value for the tag sub OverwriteStringList($$$$) { local $_; my ($et, $nvHash, $val, $newValuePt) = @_; my (@new, $delIndex); if ($$nvHash{DelValue} and defined $val) { # preserve specified old values my $old = StringToList($val, $et); my @old = ref $old eq 'ARRAY' ? @$old : $old; if (@{$$nvHash{DelValue}}) { my %del; $del{$_} = 1 foreach @{$$nvHash{DelValue}}; foreach (@old) { $del{$_} or push(@new, $_), next; $delIndex or $delIndex = scalar @new; } } else { push @new, @old; } } # add new values (at location of deleted values, if any) if ($$nvHash{Value}) { if (defined $delIndex) { splice @new, $delIndex, 0, @{$$nvHash{Value}}; } else { push @new, @{$$nvHash{Value}}; } } if (@new) { # convert back to string format $$newValuePt = ListToString(\@new); } else { $$newValuePt = undef; # delete the tag } return 1; } #------------------------------------------------------------------------------ # Reconcile IPTC digest after writing an MWG tag # Inputs: 0) ExifTool object ref # Returns: empty string sub ReconcileIPTCDigest($) { my $et = shift; # set new value for IPTCDigest if not done already unless ($Image::ExifTool::Photoshop::iptcDigestInfo and $$et{NEW_VALUE}{$Image::ExifTool::Photoshop::iptcDigestInfo}) { # write new IPTCDigest only if it doesn't exist or # is the same as the digest of the original IPTC my @a; # (capture warning messages) @a = $et->SetNewValue('Photoshop:IPTCDigest', 'old', Protected => 1, DelValue => 1); @a = $et->SetNewValue('Photoshop:IPTCDigest', 'new', Protected => 1); } return ''; } #------------------------------------------------------------------------------ # Recover strings which were truncated by IPTC dataset length limit # Inputs: 0) IPTC value, 1) XMP value, 2) length limit # Notes: handles the case where IPTC and/or XMP values are lists sub RecoverTruncatedIPTC($$$) { my ($iptc, $xmp, $limit) = @_; return $iptc unless defined $xmp; if (ref $iptc) { $xmp = [ $xmp ] unless ref $xmp; my ($i, @vals); for ($i=0; $i<@$iptc; ++$i) { push @vals, RecoverTruncatedIPTC($$iptc[$i], $$xmp[$i], $limit); } return \@vals; } elsif (defined $iptc and length $iptc == $limit) { $xmp = $$xmp[0] if ref $xmp; # take first element of list return $xmp if length $xmp > $limit and $iptc eq substr($xmp, 0, $limit); } return $iptc; } 1; # end __END__ =head1 NAME Image::ExifTool::MWG - Metadata Working Group support =head1 SYNOPSIS # enable MWG Composite tags use Image::ExifTool::MWG; Image::ExifTool::MWG::Load(); # enable MWG strict mode $Image::ExifTool::MWG::strict = 1; # disable MWG strict mode $Image::ExifTool::MWG::strict = 0; =head1 DESCRIPTION The MWG module contains Composite tag definitions which are designed to simplify implementation of the Metadata Working Group guidelines. These special MWG Composite tags are enabled by calling the Load() method: use Image::ExifTool::MWG; Image::ExifTool::MWG::Load(); By default, loading the MWG Composite tags enables "strict MWG conformance" unless previously enabled or disabled by the user. In this mode, ExifTool will generate a Warning instead of extracting EXIF, IPTC and XMP from non-standard locations. The strict mode may be disabled or enabled at any time by setting the MWG "strict" flag to 0 or 1. eg) $Image::ExifTool::MWG::strict = 0; This module also contains the MWG XMP tags which are loaded automatically by ExifTool as required, and are independent of the MWG Composite tags which must be loaded explicitly as described above. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.metadataworkinggroup.org/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/MWG Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/MXF.pm������������������������������������������������������000644 �000765 �000024 �00000771352 12642461320 020713� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MXF.pm # # Description: Read MXF meta information # # Revisions: 2010/12/15 - P. Harvey Created # # References: 1) http://sourceforge.net/projects/mxflib/ # 2) http://www.aafassociation.org/downloads/whitepapers/MXFPhysicalview.pdf # 3) http://archive.nlm.nih.gov/pubs/pearson/MJ2_Metadata2005.pdf # 4) http://www.aafassociation.org/downloads/specifications/AMWA-AS-03-Delivery-Spec-1_0.pdf # 5) http://paul-sampson.ca/private/s385m.pdf # 6) http://avwiki.nl/documents/eg41.pdf # 7) http://avwiki.nl/documents/eg42.pdf # 8) http://rhea.tele.ucl.ac.be:8081/Plone/Members/egoray/thesaurus-dictionnaire-metadata/ # a) S335M Dictionary structure.pdf # b) S330M UMID.PDF # 9) http://www.smpte-ra.org/mdd/RP210v12-publication-20100623.xls # 10) http://www.amwa.tv/downloads/specifications/aafobjectspec-v1.1.pdf # 11) http://www.mog-solutions.com/img_upload/PDF/XML%20Schema%20for%20MXF%20Metadata.pdf # 12) http://www.freemxf.org/freemxf_board/viewtopic.php?p=545&sid=00a5c17e07d828c1e93ecdbaed3076f7 # # Notes: 1) The alternate language support is dependent on the serialization # sequence. Specifically the InstanceUID's must come before any # text in an alternate language set, and these sets must come # after the language definitions. # # 2) UTF-16 surrogate pairs are not handled properly. # # 3) This code is not tested for files larger than 2 GB, # but in theory this should be OK with 64-bit Perl. #------------------------------------------------------------------------------ package Image::ExifTool::MXF; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.07'; sub ProcessPrimer($$$); sub ProcessLocalSet($$$); sub ConvLatLon($); sub ReadMXFValue($$$); sub SetGroups($$;$$); sub ConvertDurations($$); # list of currently decoded MXF value types my %knownType = ( Alt => 1, Lon => 1, UL => 1, AUID => 1, PackageID => 1, UMID => 1, BatchOfUL => 1, Position => 1, 'UTF-16' => 1, Boolean => 1, ProductVersion => 1, UUID => 1, GUID => 1, StrongReference => 1, VersionType => 1, Hex => 1, StrongReferenceArray => 1, WeakReference => 1, Label => 1, StrongReferenceBatch => 1, Lat => 1, Timestamp => 1, Length => 1, UID => 1, ); # common tag info parameters my %header = ( IsHeader => 1, SubDirectory => { TagTable => 'Image::ExifTool::MXF::Header', ProcessProc => \&Image::ExifTool::ProcessBinaryData, }, ); my %localSet = ( SubDirectory => { TagTable => 'Image::ExifTool::MXF::Main' }, ); my %timestamp = ( Type => 'Timestamp', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', ); my %geoLat = ( Groups => { 2 => 'Location' }, PrintConv => 'require Image::ExifTool::GPS; Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', ); my %geoLon = ( Groups => { 2 => 'Location' }, PrintConv => 'require Image::ExifTool::GPS; Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")', ); my %geoLatLon = ( Groups => { 2 => 'Location' }, PrintConv => q{ require Image::ExifTool::GPS; my ($lat, $lon) = split ' ', $val; $lat = Image::ExifTool::GPS::ToDMS($self, $lat, 1, 'N'); $lon = Image::ExifTool::GPS::ToDMS($self, $lon, 1, 'E'); return "$lat, $lon"; }, ); my %duration = ( IsDuration => 1, # flag used to correct durations by the appropriate EditRate RawConv => '$val > 1e18 ? undef : $val', # (all 0xff's) PrintConv => 'ConvertDuration($val)', ); # ComponentDataDefinition values my %componentDataDef = ( PrintConv => { '060e2b34.0401.0101.01030201.01000000' => 'SMPTE 12M Timecode Track', '060e2b34.0401.0101.01030201.02000000' => 'SMPTE 12M Timecode Track with active user bits', '060e2b34.0401.0101.01030201.03000000' => 'SMPTE 309M Timecode Track', '060e2b34.0401.0101.01030201.10000000' => 'Descriptive Metadata Track', '060e2b34.0401.0101.01030202.01000000' => 'Picture Essence Track', '060e2b34.0401.0101.01030202.02000000' => 'Sound Essence Track', '060e2b34.0401.0101.01030202.03000000' => 'Data Essence Track', }, ); # MXF tags (ref 1) # Note: The Binary flag is automatically set for all Unknown tags with unknown Type %Image::ExifTool::MXF::Main = ( GROUPS => { 2 => 'Video' }, VARS => { NO_LOOKUP => 1, NO_ID => 1 }, # tag ID's are too bulky NOTES => q{ Tags extracted from Material Exchange Format files. Tag ID's are not listed because they are bulky 16-byte binary values. }, # '060a2b34.0101.0101.01010100.00000000' => { Name => 'UMIDVideo', Type => 'Node' }, # '060a2b34.0101.0101.01010110.00000000' => { Name => 'UMIDVideo', Unknown => 1 }, # '060a2b34.0101.0101.01010111.00000000' => { Name => 'UMIDVideo', Unknown => 1 }, # '060a2b34.0101.0101.01010112.00000000' => { Name => 'UMIDVideo', Unknown => 1 }, # '060a2b34.0101.0101.01010120.00000000' => { Name => 'UMIDVideo', Unknown => 1 }, # '060a2b34.0101.0101.01010121.00000000' => { Name => 'UMIDVideo', Unknown => 1 }, # '060a2b34.0101.0101.01010122.00000000' => { Name => 'UMIDVideo', Unknown => 1 }, # '060a2b34.0101.0101.01010200.00000000' => { Name => 'UMIDAudio', Type => 'Node' }, # '060a2b34.0101.0101.01010210.00000000' => { Name => 'UMIDAudio', Unknown => 1 }, # '060a2b34.0101.0101.01010211.00000000' => { Name => 'UMIDAudio', Unknown => 1 }, # '060a2b34.0101.0101.01010212.00000000' => { Name => 'UMIDAudio', Unknown => 1 }, # '060a2b34.0101.0101.01010220.00000000' => { Name => 'UMIDAudio', Unknown => 1 }, # '060a2b34.0101.0101.01010221.00000000' => { Name => 'UMIDAudio', Unknown => 1 }, # '060a2b34.0101.0101.01010222.00000000' => { Name => 'UMIDAudio', Unknown => 1 }, # '060a2b34.0101.0101.01010300.00000000' => { Name => 'UMIDData', Type => 'Node' }, # '060a2b34.0101.0101.01010310.00000000' => { Name => 'UMIDData', Unknown => 1 }, # '060a2b34.0101.0101.01010311.00000000' => { Name => 'UMIDData', Unknown => 1 }, # '060a2b34.0101.0101.01010312.00000000' => { Name => 'UMIDData', Unknown => 1 }, # '060a2b34.0101.0101.01010320.00000000' => { Name => 'UMIDData', Unknown => 1 }, # '060a2b34.0101.0101.01010321.00000000' => { Name => 'UMIDData', Unknown => 1 }, # '060a2b34.0101.0101.01010322.00000000' => { Name => 'UMIDData', Unknown => 1 }, # '060a2b34.0101.0101.01010400.00000000' => { Name => 'UMIDSystem', Type => 'Node' }, # '060a2b34.0101.0101.01010410.00000000' => { Name => 'UMIDSystem', Unknown => 1 }, # '060a2b34.0101.0101.01010411.00000000' => { Name => 'UMIDSystem', Unknown => 1 }, # '060a2b34.0101.0101.01010412.00000000' => { Name => 'UMIDSystem', Unknown => 1 }, # '060a2b34.0101.0101.01010420.00000000' => { Name => 'UMIDSystem', Unknown => 1 }, # '060a2b34.0101.0101.01010421.00000000' => { Name => 'UMIDSystem', Unknown => 1 }, # '060a2b34.0101.0101.01010422.00000000' => { Name => 'UMIDSystem', Unknown => 1 }, # '060e2b34.0101.0101.00000000.00000000' => { Name => 'Elements', Type => 'Node' }, # '060e2b34.0101.0101.01000000.00000000' => { Name => 'Identifiers', Type => 'Node' }, # '060e2b34.0101.0101.01010000.00000000' => { Name => 'GloballyUniqueIdentifiers', Type => 'Node' }, # '060e2b34.0101.0101.01011000.00000000' => { Name => 'InternationalBroadcastingOrganizationIdentifiers', Type => 'Node' }, '060e2b34.0101.0101.01011001.00000000' => { Name => 'OrganizationID', Format => 'string' }, # '060e2b34.0101.0101.01011003.00000000' => { Name => 'ProgramIdentifiers', Type => 'Node' }, '060e2b34.0101.0101.01011003.01000000' => { Name => 'UPID', Unknown => 1 }, '060e2b34.0101.0101.01011003.02000000' => { Name => 'UPN', Unknown => 1 }, # '060e2b34.0101.0101.01011004.00000000' => { Name => 'PhysicalMediaIdentifiers', Type => 'Node' }, # '060e2b34.0101.0101.01011004.01000000' => { Name => 'TapeIdentifiers', Type => 'Node' }, '060e2b34.0101.0101.01011004.01010000' => { Name => 'IBTN', Unknown => 1 }, # '060e2b34.0101.0101.01011100.00000000' => { Name => 'InternationalStandardIdentifiers', Type => 'Node' }, '060e2b34.0101.0101.01011101.00000000' => { Name => 'ISAN', Unknown => 1 }, '060e2b34.0101.0101.01011102.00000000' => { Name => 'ISBN', Unknown => 1 }, '060e2b34.0101.0101.01011103.00000000' => { Name => 'ISSN', Unknown => 1 }, '060e2b34.0101.0101.01011104.00000000' => { Name => 'ISWC', Unknown => 1 }, '060e2b34.0101.0101.01011105.00000000' => { Name => 'ISMN', Unknown => 1 }, '060e2b34.0101.0101.01011106.00000000' => { Name => 'ISCI', Unknown => 1 }, '060e2b34.0101.0101.01011107.00000000' => { Name => 'ISRC', Unknown => 1 }, '060e2b34.0101.0101.01011108.00000000' => { Name => 'ISRN', Unknown => 1 }, '060e2b34.0101.0101.01011109.00000000' => { Name => 'ISBD', Unknown => 1 }, '060e2b34.0101.0101.0101110a.00000000' => { Name => 'ISTC', Unknown => 1 }, # '060e2b34.0101.0101.01011300.00000000' => { Name => 'InternationalStandardCompoundIdentifiers', Type => 'Node' }, '060e2b34.0101.0101.01011301.00000000' => { Name => 'SICI', Unknown => 1 }, '060e2b34.0101.0101.01011302.00000000' => { Name => 'BICI', Unknown => 1 }, '060e2b34.0101.0101.01011303.00000000' => { Name => 'AICI', Unknown => 1 }, '060e2b34.0101.0101.01011304.00000000' => { Name => 'PII', Unknown => 1 }, # '060e2b34.0101.0101.01011500.00000000' => { Name => 'ObjectIdentifiers', Type => 'Node' }, '060e2b34.0101.0101.01011501.00000000' => { Name => 'DOI', Unknown => 1 }, '060e2b34.0101.0101.01011502.00000000' => { Name => 'InstanceUID', Type => 'GUID', Unknown => 1 }, '060e2b34.0101.0101.01011510.00000000' => { Name => 'PackageID', Type => 'PackageID', Unknown => 1 }, # '060e2b34.0101.0101.01012000.00000000' => { Name => 'DeviceIdentifiers', Type => 'Node' }, '060e2b34.0101.0101.01012001.00000000' => { Name => 'DeviceDesignation', Format => 'string' }, '060e2b34.0101.0101.01012003.00000000' => { Name => 'DeviceModel', Format => 'string' }, '060e2b34.0101.0101.01012004.00000000' => { Name => 'DeviceSerialNumber', Format => 'string' }, # '060e2b34.0101.0101.01020000.00000000' => { Name => 'GloballyUniqueLocators', Type => 'Node' }, # '060e2b34.0101.0101.01020100.00000000' => { Name => 'UniformResourceLocators', Type => 'Node' }, '060e2b34.0101.0101.01020101.00000000' => { Name => 'URL', Format => 'string' }, '060e2b34.0101.0101.01020101.01000000' => { Name => 'URL', Type => 'UTF-16' }, '060e2b34.0101.0101.01020102.00000000' => { Name => 'PURL', Format => 'string' }, '060e2b34.0101.0101.01020103.00000000' => { Name => 'URN', Format => 'string' }, # '060e2b34.0101.0101.01030000.00000000' => { Name => 'LocallyUniqueIdentifiers', Type => 'Node' }, # '060e2b34.0101.0101.01030100.00000000' => { Name => 'AdministrativeIdentifiers', Type => 'Node' }, '060e2b34.0101.0101.01030101.00000000' => { Name => 'TransmissionID', Format => 'string' }, '060e2b34.0101.0101.01030102.00000000' => { Name => 'ArchiveID', Format => 'string' }, '060e2b34.0101.0101.01030103.00000000' => { Name => 'ItemID', Format => 'string' }, '060e2b34.0101.0101.01030104.00000000' => { Name => 'AccountingReferenceNumber', Format => 'string' }, '060e2b34.0101.0101.01030105.00000000' => { Name => 'TrafficID', Format => 'string' }, # '060e2b34.0101.0101.01030200.00000000' => { Name => 'LocalPhysicalMediaIdentifiers', Type => 'Node' }, # '060e2b34.0101.0101.01030201.00000000' => { Name => 'LocalFilmID', Type => 'Node' }, '060e2b34.0101.0101.01030201.01000000' => { Name => 'ReelOrRollNumber', Format => 'string' }, # '060e2b34.0101.0101.01030202.00000000' => { Name => 'LocalTapeIdentifiers', Type => 'Node' }, '060e2b34.0101.0101.01030202.01000000' => { Name => 'LocalTapeNumber', Format => 'string' }, # '060e2b34.0101.0101.01030300.00000000' => { Name => 'LocalObjectIdentifiers', Type => 'Node' }, '060e2b34.0101.0101.01030301.00000000' => { Name => 'LUID', Format => 'int32u' }, '060e2b34.0101.0101.01030302.01000000' => { Name => 'PackageName', Type => 'UTF-16' }, # '060e2b34.0101.0101.01040000.00000000' => { Name => 'LocallyUniqueLocators', Type => 'Node' }, # '060e2b34.0101.0101.01040100.00000000' => { Name => 'MediaLocators', Type => 'Node' }, '060e2b34.0101.0101.01040101.00000000' => { Name => 'LocalFilePath', Format => 'string' }, # '060e2b34.0101.0101.01040700.00000000' => { Name => 'FilmLocators', Type => 'Node' }, '060e2b34.0101.0101.01040701.00000000' => { Name => 'EdgeCode', Format => 'string' }, '060e2b34.0101.0101.01040702.00000000' => { Name => 'FrameCode', Format => 'string' }, '060e2b34.0101.0101.01040703.00000000' => { Name => 'KeyCode', Type => 'KeyCode', Unknown => 1 }, '060e2b34.0101.0101.01040704.00000000' => { Name => 'InkNumber', Format => 'string' }, # '060e2b34.0101.0101.01041000.00000000' => { Name => 'ProxyLocators', Type => 'Node' }, '060e2b34.0101.0101.01041001.00000000' => { Name => 'KeyText', Format => 'string' }, '060e2b34.0101.0101.01041002.00000000' => { Name => 'KeyFrame', Format => 'string' }, '060e2b34.0101.0101.01041003.00000000' => { Name => 'KeySound', Format => 'string' }, '060e2b34.0101.0101.01041004.00000000' => { Name => 'KeyDataOrProgram', Format => 'string' }, # '060e2b34.0101.0101.01050000.00000000' => { Name => 'Titles', Type => 'Node' }, '060e2b34.0101.0101.01050100.00000000' => { Name => 'TitleKind', Format => 'string' }, '060e2b34.0101.0101.01050200.00000000' => { Name => 'MainTitle', Format => 'string' }, '060e2b34.0101.0101.01050300.00000000' => { Name => 'SecondaryTitle', Format => 'string' }, '060e2b34.0101.0101.01050400.00000000' => { Name => 'SeriesNumber', Format => 'string' }, '060e2b34.0101.0101.01050500.00000000' => { Name => 'EpisodeNumber', Format => 'string' }, '060e2b34.0101.0101.01050600.00000000' => { Name => 'SceneNumber', Format => 'string' }, '060e2b34.0101.0101.01050700.00000000' => { Name => 'TakeNumber', Format => 'int16u' }, # '060e2b34.0101.0101.01100000.00000000' => { Name => 'IntellectualPropertyRightsIdentifiers', Type => 'Node' }, # '060e2b34.0101.0101.01100100.00000000' => { Name => 'SUISACISACIPI', Type => 'Node' }, '060e2b34.0101.0101.01100101.00000000' => { Name => 'CISACLegalEntityID', Unknown => 1 }, # '060e2b34.0101.0101.01100200.00000000' => { Name => 'AGICOAIdentifers', Type => 'Node' }, '060e2b34.0101.0101.01100201.00000000' => { Name => 'AGICOAID', Unknown => 1 }, # '060e2b34.0101.0101.02000000.00000000' => { Name => 'ADMINISTRATION', Type => 'Node' }, # '060e2b34.0101.0101.02010000.00000000' => { Name => 'Supplier', Type => 'Node' }, '060e2b34.0101.0101.02010100.00000000' => { Name => 'SourceOrganization', Format => 'string' }, '060e2b34.0101.0101.02010200.00000000' => { Name => 'SupplyContractNumber', Format => 'string' }, '060e2b34.0101.0101.02010300.00000000' => { Name => 'OriginalProducerName', Format => 'string' }, # '060e2b34.0101.0101.02020000.00000000' => { Name => 'Product', Type => 'Node' }, '060e2b34.0101.0101.02020100.00000000' => { Name => 'TotalEpisodeCount', Format => 'int16u' }, # '060e2b34.0101.0101.02050000.00000000' => { Name => 'Rights', Type => 'Node' }, # '060e2b34.0101.0101.02050100.00000000' => { Name => 'Copyright', Type => 'Node' }, '060e2b34.0101.0101.02050101.00000000' => { Name => 'CopyrightStatus', Format => 'string' }, '060e2b34.0101.0101.02050102.00000000' => { Name => 'CopyrightOwnerName', Format => 'string' }, # '060e2b34.0101.0101.02050200.00000000' => { Name => 'IntellectualRights', Type => 'Node' }, '060e2b34.0101.0101.02050201.00000000' => { Name => 'IntellectualPropertyDescription', Format => 'string' }, '060e2b34.0101.0101.02050202.00000000' => { Name => 'IntellectualPropertyRights', Format => 'string' }, # '060e2b34.0101.0101.02050300.00000000' => { Name => 'LegalPersonalities', Type => 'Node' }, '060e2b34.0101.0101.02050301.00000000' => { Name => 'Rightsholder', Format => 'string' }, '060e2b34.0101.0101.02050302.00000000' => { Name => 'RightsManagementAuthority', Format => 'string' }, '060e2b34.0101.0101.02050303.00000000' => { Name => 'InterestedPartyName', Format => 'string' }, # '060e2b34.0101.0101.02050400.00000000' => { Name => 'IntellectualPropertyRightsOptions', Type => 'Node' }, '060e2b34.0101.0101.02050401.00000000' => { Name => 'MaximumUseCount', Format => 'int16u' }, '060e2b34.0101.0101.02050402.00000000' => { Name => 'LicenseOptionsDescription', Format => 'string' }, # '060e2b34.0101.0101.02060000.00000000' => { Name => 'FinancialInformation', Type => 'Node' }, # '060e2b34.0101.0101.02060100.00000000' => { Name => 'Currencies', Type => 'Node' }, '060e2b34.0101.0101.02060101.00000000' => { Name => 'CurrencyCode', Format => 'string' }, # '060e2b34.0101.0101.02060200.00000000' => { Name => 'PaymentsAndCosts', Type => 'Node' }, '060e2b34.0101.0101.02060201.00000000' => { Name => 'RoyaltyPaymentInformation', Format => 'string' }, # '060e2b34.0101.0101.02060300.00000000' => { Name => 'Income', Type => 'Node' }, '060e2b34.0101.0101.02060301.00000000' => { Name => 'RoyaltyIncomeInformation', Format => 'string' }, # '060e2b34.0101.0101.02070000.00000000' => { Name => 'AccessControl', Type => 'Node' }, '060e2b34.0101.0101.02070100.00000000' => { Name => 'RestrictionsonUse', Format => 'string' }, '060e2b34.0101.0101.02070200.00000000' => { Name => 'ExCCIData', Type => 'DataBlock', Unknown => 1 }, # '060e2b34.0101.0101.02080000.00000000' => { Name => 'Security', Type => 'Node' }, # '060e2b34.0101.0101.02080100.00000000' => { Name => 'SystemAccess', Type => 'Node' }, '060e2b34.0101.0101.02080101.00000000' => { Name => 'UserName', Format => 'string' }, '060e2b34.0101.0101.02080101.01000000' => { Name => 'UserName', Type => 'UTF-16' }, '060e2b34.0101.0101.02080102.00000000' => { Name => 'Password', Format => 'string' }, '060e2b34.0101.0101.02080102.01000000' => { Name => 'Password', Type => 'UTF-16' }, # '060e2b34.0101.0101.02090000.00000000' => { Name => 'Encryption', Type => 'Node' }, # '060e2b34.0101.0101.02090100.00000000' => { Name => 'FilmEncryption', Type => 'Node' }, # '060e2b34.0101.0101.02090101.00000000' => { Name => 'ScramblingKeys', Type => 'Node' }, '060e2b34.0101.0101.02090101.01000000' => { Name => 'ScramblingKeyKind', Format => 'string' }, '060e2b34.0101.0101.02090101.02000000' => { Name => 'ScramblingKeyValue', Format => 'int8u' }, # '060e2b34.0101.0101.02100000.00000000' => { Name => 'PublicationOutlet', Type => 'Node' }, # '060e2b34.0101.0101.02100100.00000000' => { Name => 'Broadcast', Type => 'Node' }, # '060e2b34.0101.0101.02100101.00000000' => { Name => 'Broadcaster', Type => 'Node' }, '060e2b34.0101.0101.02100101.01000000' => { Name => 'BroadcastOrganizationName', Format => 'string' }, '060e2b34.0101.0101.02100101.02000000' => { Name => 'BroadcastChannel', Format => 'string' }, '060e2b34.0101.0101.02100101.03000000' => { Name => 'BroadcastMediumKind', Format => 'string' }, '060e2b34.0101.0101.02100101.05000000' => { Name => 'BroadcastRegion', Format => 'string' }, # '060e2b34.0101.0101.02200000.00000000' => { Name => 'BroadcastAndRepeatInformation', Type => 'Node' }, # '060e2b34.0101.0101.02200100.00000000' => { Name => 'BroadcastFlags', Type => 'Node' }, '060e2b34.0101.0101.02200101.00000000' => { Name => 'FirstBroadcastFlag', Type => 'Boolean' }, # '060e2b34.0101.0101.02200200.00000000' => { Name => 'RepeatNumbers', Type => 'Node' }, '060e2b34.0101.0101.02200201.00000000' => { Name => 'CurrentRepeatNumber', Format => 'int16u' }, '060e2b34.0101.0101.02200202.00000000' => { Name => 'PreviousRepeatNumber', Format => 'int16u' }, # '060e2b34.0101.0101.02200300.00000000' => { Name => 'Ratings', Type => 'Node' }, '060e2b34.0101.0101.02200301.00000000' => { Name => 'AudienceRating', Format => 'int32u' }, '060e2b34.0101.0101.02200302.00000000' => { Name => 'AudienceReach', Format => 'int32u' }, # '060e2b34.0101.0101.02300000.00000000' => { Name => 'ParticipatingParties', Type => 'Node' }, # '060e2b34.0101.0101.02300100.00000000' => { Name => 'IndividualsAndGroups', Type => 'Node' }, '060e2b34.0101.0101.02300101.00000000' => { Name => 'NatureOfPersonality', Format => 'string' }, # '060e2b34.0101.0101.02300102.00000000' => { Name => 'Production', Type => 'Node' }, '060e2b34.0101.0101.02300102.01000000' => { Name => 'ContributionStatus', Format => 'string' }, # '060e2b34.0101.0101.02300103.00000000' => { Name => 'SupportAndAdministrationDetails', Type => 'Node' }, '060e2b34.0101.0101.02300103.01000000' => { Name => 'SupportOrAdministrationStatus', Format => 'string' }, # '060e2b34.0101.0101.02300200.00000000' => { Name => 'OrganizationsAndPublicBodies', Type => 'Node' }, '060e2b34.0101.0101.02300201.00000000' => { Name => 'OrganizationKind', Format => 'string' }, # '060e2b34.0101.0101.02300202.00000000' => { Name => 'ProductionOrganizationOrPublicBody', Type => 'Node' }, '060e2b34.0101.0101.02300202.01000000' => { Name => 'ProductionOrganizationRole', Format => 'string' }, # '060e2b34.0101.0101.02300203.00000000' => { Name => 'SupportAndAdministrationOrganizationOrPublicBody', Type => 'Node' }, '060e2b34.0101.0101.02300203.01000000' => { Name => 'SupportOrganizationRole', Format => 'string' }, # '060e2b34.0101.0101.02300500.00000000' => { Name => 'JobFunctionInformation', Type => 'Node' }, '060e2b34.0101.0101.02300501.00000000' => { Name => 'JobFunctionName', Format => 'string' }, '060e2b34.0101.0101.02300502.00000000' => { Name => 'RoleName', Format => 'string' }, # '060e2b34.0101.0101.02300600.00000000' => { Name => 'ContactInformation', Type => 'Node' }, '060e2b34.0101.0101.02300601.00000000' => { Name => 'ContactKind', Format => 'string' }, '060e2b34.0101.0101.02300602.00000000' => { Name => 'ContactDepartmentName', Format => 'string' }, # '060e2b34.0101.0101.02300603.00000000' => { Name => 'PersonOrOrganizationDetails', Type => 'Node' }, # '060e2b34.0101.0101.02300603.01000000' => { Name => 'PersonNames', Type => 'Node' }, '060e2b34.0101.0101.02300603.01010000' => { Name => 'FamilyName', Format => 'string' }, '060e2b34.0101.0101.02300603.01020000' => { Name => 'FirstGivenName', Format => 'string' }, '060e2b34.0101.0101.02300603.01030000' => { Name => 'SecondGivenName', Format => 'string' }, '060e2b34.0101.0101.02300603.01040000' => { Name => 'ThirdGivenName', Format => 'string' }, # '060e2b34.0101.0101.02300603.02000000' => { Name => 'GroupNames', Type => 'Node' }, '060e2b34.0101.0101.02300603.02010000' => { Name => 'MainName', Format => 'string' }, '060e2b34.0101.0101.02300603.02020000' => { Name => 'SupplementaryName', Format => 'string' }, # '060e2b34.0101.0101.02300603.03000000' => { Name => 'OrganizationNames', Type => 'Node' }, '060e2b34.0101.0101.02300603.03010000' => { Name => 'OrganizationMainName', Format => 'string' }, '060e2b34.0101.0101.02300603.03020000' => { Name => 'SupplementaryOrganizationName', Format => 'string' }, # '060e2b34.0101.0101.03000000.00000000' => { Name => 'Interpretive', Type => 'Node' }, # '060e2b34.0101.0101.03010000.00000000' => { Name => 'Fundamental', Type => 'Node' }, # '060e2b34.0101.0101.03010100.00000000' => { Name => 'CountriesAndLanguages', Type => 'Node' }, # '060e2b34.0101.0101.03010101.00000000' => { Name => 'CountryAndRegionCodes', Type => 'Node' }, '060e2b34.0101.0101.03010101.01000000' => { Name => 'ISO3166CountryCode', Format => 'string' }, # '060e2b34.0101.0101.03010102.00000000' => { Name => 'LanguageCodes', Type => 'Node' }, '060e2b34.0101.0101.03010102.01000000' => { Name => 'ISO639-1LanguageCode', Format => 'string' }, # '060e2b34.0101.0101.03010201.00000000' => { Name => 'SystemInterpretations', Type => 'Node' }, '060e2b34.0101.0101.03010201.01000000' => { Name => 'OperatingSystemInterpretations', Format => 'int8u' }, '060e2b34.0101.0101.03010201.02000000' => { Name => 'ByteOrder', #PH (was int16s, but I have seen "II") Format => 'string', PrintConv => { II => 'Little-endian (Intel, II)', MM => 'Big-endian (Motorola, MM)', }, }, '060e2b34.0101.0101.03010201.03000000' => { Name => 'EssenceIsIdentified', Type => 'Boolean' }, # '060e2b34.0101.0101.03010300.00000000' => { Name => 'FundamentalDimensions', Type => 'Node' }, # '060e2b34.0101.0101.03010301.00000000' => { Name => 'Length', Type => 'Node' }, '060e2b34.0101.0101.03010301.01000000' => { Name => 'LengthSystemName', Format => 'string' }, '060e2b34.0101.0101.03010301.02000000' => { Name => 'LengthUnitKind', Format => 'string' }, # '060e2b34.0101.0101.03010302.00000000' => { Name => 'Angles', Type => 'Node' }, '060e2b34.0101.0101.03010302.01000000' => { Name => 'AngularUnitKind', Format => 'string' }, # '060e2b34.0101.0101.03010303.00000000' => { Name => 'Time', Type => 'Node' }, '060e2b34.0101.0101.03010303.01000000' => { Name => 'TimeSystemOffset', Format => 'string' }, '060e2b34.0101.0101.03010303.02000000' => { Name => 'TimeUnitKind', Format => 'string' }, # '060e2b34.0101.0101.03010304.00000000' => { Name => 'Mass', Type => 'Node' }, # '060e2b34.0101.0101.03010305.00000000' => { Name => 'Energy', Type => 'Node' }, # '060e2b34.0101.0101.03020000.00000000' => { Name => 'HumanAssignedDescriptors', Type => 'Node' }, # '060e2b34.0101.0101.03020100.00000000' => { Name => 'Categorization', Type => 'Node' }, # '060e2b34.0101.0101.03020101.00000000' => { Name => 'ContentClassification', Type => 'Node' }, '060e2b34.0101.0101.03020101.01000000' => { Name => 'ContentCodingSystem', Format => 'string' }, '060e2b34.0101.0101.03020101.02000000' => { Name => 'ProgramKind', Format => 'string' }, '060e2b34.0101.0101.03020101.03000000' => { Name => 'Genre', Format => 'string' }, '060e2b34.0101.0101.03020101.04000000' => { Name => 'TargetAudience', Format => 'string' }, # '060e2b34.0101.0101.03020102.00000000' => { Name => 'CatalogingAndIndexing', Type => 'Node' }, '060e2b34.0101.0101.03020102.01000000' => { Name => 'CatalogDataStatus', Format => 'string' }, '060e2b34.0101.0101.03020102.02000000' => { Name => 'ThesaurusName', Format => 'string' }, '060e2b34.0101.0101.03020102.03000000' => { Name => 'Theme', Format => 'string' }, '060e2b34.0101.0101.03020102.04000000' => { Name => 'ContentClassification', Format => 'string' }, '060e2b34.0101.0101.03020102.05000000' => { Name => 'Keywords', Format => 'string' }, '060e2b34.0101.0101.03020102.06000000' => { Name => 'KeyFrames', Format => 'string' }, '060e2b34.0101.0101.03020102.07000000' => { Name => 'KeySounds', Format => 'string' }, '060e2b34.0101.0101.03020102.08000000' => { Name => 'KeyData', Format => 'string' }, # '060e2b34.0101.0101.03020106.00000000' => { Name => 'TextualDescription', Type => 'Node' }, '060e2b34.0101.0101.03020106.01000000' => { Name => 'Abstract', Format => 'string' }, '060e2b34.0101.0101.03020106.02000000' => { Name => 'Purpose', Format => 'string' }, '060e2b34.0101.0101.03020106.03000000' => { Name => 'Description', Format => 'string' }, '060e2b34.0101.0101.03020106.04000000' => { Name => 'ColorDescriptor', Format => 'string' }, '060e2b34.0101.0101.03020106.05000000' => { Name => 'FormatDescriptor', Format => 'string' }, # '060e2b34.0101.0101.03020107.00000000' => { Name => 'Stratum', Type => 'Node' }, '060e2b34.0101.0101.03020107.01000000' => { Name => 'StratumKind', Format => 'string' }, # '060e2b34.0101.0101.03020200.00000000' => { Name => 'Assessments', Type => 'Node' }, # '060e2b34.0101.0101.03020201.00000000' => { Name => 'Awards', Type => 'Node' }, '060e2b34.0101.0101.03020201.01000000' => { Name => 'IndividualAwardName', Format => 'string' }, '060e2b34.0101.0101.03020201.02000000' => { Name => 'ProgramAwardName', Format => 'string' }, # '060e2b34.0101.0101.03020202.00000000' => { Name => 'QualitativeValues', Type => 'Node' }, '060e2b34.0101.0101.03020202.01000000' => { Name => 'AssetValue', Format => 'string' }, '060e2b34.0101.0101.03020202.02000000' => { Name => 'ContentValue', Format => 'string' }, '060e2b34.0101.0101.03020202.03000000' => { Name => 'CulturalValue', Format => 'string' }, '060e2b34.0101.0101.03020202.04000000' => { Name => 'AestheticValue', Format => 'string' }, '060e2b34.0101.0101.03020202.05000000' => { Name => 'HistoricalValue', Format => 'string' }, '060e2b34.0101.0101.03020202.06000000' => { Name => 'TechnicalValue', Format => 'string' }, '060e2b34.0101.0101.03020202.07000000' => { Name => 'OtherValues', Format => 'string' }, # '060e2b34.0101.0101.03020300.00000000' => { Name => 'TechnicalCommentsAndDescriptions', Type => 'Node' }, # '060e2b34.0101.0101.03020301.00000000' => { Name => 'ObjectCommentsAndDescriptions', Type => 'Node' }, # '060e2b34.0101.0101.03030000.00000000' => { Name => 'Machine-AssignedOrComputedDescriptions', Type => 'Node' }, # '060e2b34.0101.0101.03030100.00000000' => { Name => 'AutomatedCategorization', Type => 'Node' }, # '060e2b34.0101.0101.03030101.00000000' => { Name => 'AutomatedContentClassification', Type => 'Node' }, # '060e2b34.0101.0101.03030102.00000000' => { Name => 'AutomatedCatalogingAndIndexing', Type => 'Node' }, '060e2b34.0101.0101.03030102.01000000' => { Name => 'CatalogDataStatus', Format => 'string' }, '060e2b34.0101.0101.03030102.02000000' => { Name => 'CatalogingSystemName', Format => 'string' }, '060e2b34.0101.0101.03030102.06000000' => { Name => 'ComputedKeywords', Format => 'string' }, '060e2b34.0101.0101.03030102.07000000' => { Name => 'ComputedKeyFrames', Format => 'string' }, '060e2b34.0101.0101.03030102.08000000' => { Name => 'ComputedKeySounds', Format => 'string' }, '060e2b34.0101.0101.03030102.09000000' => { Name => 'ComputedKeyData', Format => 'string' }, # '060e2b34.0101.0101.03030106.00000000' => { Name => 'ComputedTextualDescription', Type => 'Node' }, # '060e2b34.0101.0101.03030107.00000000' => { Name => 'AutomatedStratum', Type => 'Node' }, '060e2b34.0101.0101.03030107.01000000' => { Name => 'ComputedStratumKind', Format => 'string' }, # '060e2b34.0101.0101.03030300.00000000' => { Name => 'ComputedTechnicalCommentsAndDescriptions', Type => 'Node' }, # '060e2b34.0101.0101.03030301.00000000' => { Name => 'ComputedObjectCommentsAndDescriptions', Type => 'Node' }, # '060e2b34.0101.0101.04000000.00000000' => { Name => 'PARAMETRIC', Type => 'Node' }, # '060e2b34.0101.0101.04010000.00000000' => { Name => 'VideoAndImageEssenceCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04010100.00000000' => { Name => 'FundamentalImageCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04010101.00000000' => { Name => 'AspectRatios', Type => 'Node' }, '060e2b34.0101.0101.04010101.01000000' => { Name => 'PresentationAspectRatio', Format => 'rational64s' }, '060e2b34.0101.0101.04010101.02000000' => { Name => 'CaptureAspectRatio', Format => 'string' }, # '060e2b34.0101.0101.04010200.00000000' => { Name => 'ImageSourceCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04010201.00000000' => { Name => 'Opto-ElectronicFormulation', Type => 'Node' }, # '060e2b34.0101.0101.04010201.01000000' => { Name => 'TransferCharacteristics', Type => 'Node' }, '060e2b34.0101.0101.04010201.01010000' => { Name => 'CaptureGammaEquation', Format => 'string' }, '060e2b34.0101.0101.04010201.01010100' => { Name => 'CaptureGammaEquation', Format => 'rational64s' }, '060e2b34.0101.0101.04010201.01020000' => { Name => 'LumaEquation', Format => 'string' }, '060e2b34.0101.0101.04010201.01030000' => { Name => 'ColorimetryCode', Format => 'string' }, '060e2b34.0101.0101.04010201.01040000' => { Name => 'SignalFormCode', Format => 'string' }, # '060e2b34.0101.0101.04010300.00000000' => { Name => 'VideoAndImageScanningParameters', Type => 'Node' }, # '060e2b34.0101.0101.04010301.00000000' => { Name => 'TemporalParameters', Type => 'Node' }, '060e2b34.0101.0101.04010301.01000000' => { Name => 'ColorFieldCode', Format => 'int8u' }, '060e2b34.0101.0101.04010301.02000000' => { Name => 'FieldRate', Format => 'int16u' }, '060e2b34.0101.0101.04010301.03000000' => { Name => 'FrameRate', Format => 'int16u' }, '060e2b34.0101.0101.04010301.04000000' => { Name => 'FrameLayout', Format => 'int8u' }, '060e2b34.0101.0101.04010301.05000000' => { Name => 'SamplingStructureCode', Format => 'string' }, # '060e2b34.0101.0101.04010302.00000000' => { Name => 'VerticalParameters', Type => 'Node' }, '060e2b34.0101.0101.04010302.01000000' => { Name => 'TotalLinesperFrame', Format => 'int16u' }, '060e2b34.0101.0101.04010302.02000000' => { Name => 'ActiveLinesperFrame', Format => 'int16u' }, '060e2b34.0101.0101.04010302.03000000' => { Name => 'LeadingLines', Format => 'int32s' }, '060e2b34.0101.0101.04010302.04000000' => { Name => 'TrailingLines', Format => 'int32s' }, # '060e2b34.0101.0101.04010303.00000000' => { Name => 'HorizontalParameters', Type => 'Node' }, # '060e2b34.0101.0101.04010400.00000000' => { Name => 'AnalogVideoCodingCharacteristics', Type => 'Node' }, '060e2b34.0101.0101.04010401.00000000' => { Name => 'AnalogVideoSystemName', Format => 'string' }, # '060e2b34.0101.0101.04010500.00000000' => { Name => 'DigitalVideoAndImageCodingParameters', Type => 'Node' }, # '060e2b34.0101.0101.04010501.00000000' => { Name => 'DigitalVideoAndImageSamplingParameters', Type => 'Node' }, '060e2b34.0101.0101.04010501.01000000' => { Name => 'LuminanceSampleRate', Format => 'int8u' }, '060e2b34.0101.0101.04010501.02000000' => { Name => 'ActiveSamplesperLine', Format => 'int16u' }, '060e2b34.0101.0101.04010501.03000000' => { Name => 'TotalSamplesperLine', Format => 'int16u' }, '060e2b34.0101.0101.04010501.04000000' => { Name => 'SamplingHierarchyCode', Format => 'string' }, '060e2b34.0101.0101.04010501.05000000' => { Name => 'HorizontalSubsampling', Format => 'int32u' }, '060e2b34.0101.0101.04010501.06000000' => { Name => 'ColorSiting', Format => 'int8u' }, '060e2b34.0101.0101.04010501.07000000' => { Name => 'SampledHeight', Format => 'int32u' }, '060e2b34.0101.0101.04010501.08000000' => { Name => 'SampledWidth', Format => 'int32u' }, '060e2b34.0101.0101.04010501.09000000' => { Name => 'SampledXOffset', Format => 'int32s' }, '060e2b34.0101.0101.04010501.0a000000' => { Name => 'SampledYOffset', Format => 'int32s' }, '060e2b34.0101.0101.04010501.0b000000' => { Name => 'DisplayHeight', Format => 'int32u' }, '060e2b34.0101.0101.04010501.0c000000' => { Name => 'DisplayWidth', Format => 'int32u' }, '060e2b34.0101.0101.04010501.0d000000' => { Name => 'DisplayXOffset', Format => 'int32s' }, '060e2b34.0101.0101.04010501.0e000000' => { Name => 'DisplayYOffset', Format => 'int32s' }, '060e2b34.0101.0101.04010501.0f000000' => { Name => 'FilteringCode', Format => 'string' }, # '060e2b34.0101.0101.04010502.00000000' => { Name => 'DigitalVideoAndImageStorageParameters', Type => 'Node' }, '060e2b34.0101.0101.04010502.01000000' => { Name => 'ImageHeight', Format => 'int32u' }, # (renamed from StoredHeight) '060e2b34.0101.0101.04010502.02000000' => { Name => 'ImageWidth', Format => 'int32u' }, # (renamed from StoredWidth) # '060e2b34.0101.0101.04010503.00000000' => { Name => 'DigitalQuantizationAndLevelParameters', Type => 'Node' }, '060e2b34.0101.0101.04010503.01000000' => { Name => 'BitsPerPixel', Format => 'int8u' }, '060e2b34.0101.0101.04010503.02000000' => { Name => 'RoundingMethodCode', Format => 'string' }, '060e2b34.0101.0101.04010503.03000000' => { Name => 'BlackReferenceLevel', Format => 'int32u' }, '060e2b34.0101.0101.04010503.04000000' => { Name => 'WhiteReferenceLevel', Format => 'int32u' }, # '060e2b34.0101.0101.04010600.00000000' => { Name => 'DigitalVideoAndImageCompressionParameters', Type => 'Node' }, # '060e2b34.0101.0101.04010602.00000000' => { Name => 'MPEGCodingParameters', Type => 'Node' }, # '060e2b34.0101.0101.04010602.01000000' => { Name => 'MPEG-2CodingParameters', Type => 'Node' }, '060e2b34.0101.0101.04010602.01010000' => { Name => 'FieldFrameTypeCode', Format => 'string' }, # '060e2b34.0101.0101.04010800.00000000' => { Name => 'Film-to-VideoCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04010801.00000000' => { Name => 'FilmPulldownCharacteristics', Type => 'Node' }, '060e2b34.0101.0101.04010801.01000000' => { Name => 'PulldownSequence', Type => 'PulldownKind', Unknown => 1 }, '060e2b34.0101.0101.04010801.02000000' => { Name => 'PulldownFieldDominance', Type => 'Boolean' }, '060e2b34.0101.0101.04010801.03000000' => { Name => 'VideoAndFilmFrameRelationship', Format => 'int8u' }, # '060e2b34.0101.0101.04010802.00000000' => { Name => 'FilmFrameRates', Type => 'Node' }, '060e2b34.0101.0101.04010802.01000000' => { Name => 'CaptureFilmFrameRate', Format => 'string' }, '060e2b34.0101.0101.04010802.02000000' => { Name => 'TransferFilmFrameRate', Format => 'string' }, # '060e2b34.0101.0101.04011000.00000000' => { Name => 'ImageTestParameters', Type => 'Node' }, # '060e2b34.0101.0101.04011001.00000000' => { Name => 'VideoTestParameters', Type => 'Node' }, '060e2b34.0101.0101.04011001.01000000' => { Name => 'VideoTestParameter', Format => 'string' }, '060e2b34.0101.0101.04011001.02000000' => { Name => 'VideoTestResult', Format => 'float' }, '060e2b34.0101.0101.04011001.03000000' => { Name => 'VideoTestResult', Format => 'int32u' }, # '060e2b34.0101.0101.04011002.00000000' => { Name => 'FilmTestParameters', Type => 'Node' }, '060e2b34.0101.0101.04011002.01000000' => { Name => 'FilmTestParameter', Format => 'string' }, '060e2b34.0101.0101.04011002.02000000' => { Name => 'FilmTestResult', Format => 'float' }, '060e2b34.0101.0101.04011002.03000000' => { Name => 'FilmTestResult', Type => 'SIMSBF', Unknown => 1, Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.04020000.00000000' => { Name => 'AudioEssenceCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04020100.00000000' => { Name => 'FundamentalAudioCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04020101.00000000' => { Name => 'AudioFormulation', Type => 'Node' }, '060e2b34.0101.0101.04020101.01000000' => { Name => 'ElectrospatialFormulation', Format => 'int8u', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0101.04020101.02000000' => { Name => 'FilteringApplied', Format => 'string', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0101.04020101.03000000' => { Name => 'AudioReferenceLevel', Format => 'int8s', Groups => { 2 => 'Audio' } }, # '060e2b34.0101.0101.04020101.10000000' => { Name => 'AudioMix', Type => 'Node' }, '060e2b34.0101.0101.04020101.10010000' => { Name => 'AudioMonoChannelCount', Format => 'int8u', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0101.04020101.10020000' => { Name => 'AudioStereoChannelCount', Format => 'int8u', Groups => { 2 => 'Audio' } }, # '060e2b34.0101.0101.04020200.00000000' => { Name => 'AnalogAudioCodingParameters', Type => 'Node' }, '060e2b34.0101.0101.04020201.00000000' => { Name => 'AnalogSystem', Format => 'string', Groups => { 2 => 'Audio' } }, # '060e2b34.0101.0101.04020300.00000000' => { Name => 'DigitalAudioCodingParameters', Type => 'Node' }, # '060e2b34.0101.0101.04020301.00000000' => { Name => 'DigitalSamplingParameters', Type => 'Node' }, '060e2b34.0101.0101.04020301.01000000' => { Name => 'AudioSampleRate', Format => 'int8u', Groups => { 2 => 'Audio' } }, # '060e2b34.0101.0101.04020302.00000000' => { Name => 'DigitalAudioStorageParameters', Type => 'Node' }, # '060e2b34.0101.0101.04020303.00000000' => { Name => 'DigitalAudioQuantizationAndLevelParameters', Type => 'Node' }, '060e2b34.0101.0101.04020303.01000000' => { Name => 'BitsPerSample', Format => 'int8u', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0101.04020303.02000000' => { Name => 'RoundingLaw', Format => 'string', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0101.04020303.03000000' => { Name => 'Dither', Format => 'string', Groups => { 2 => 'Audio' } }, # '060e2b34.0101.0101.04020400.00000000' => { Name => 'DigitalAudioCompressionParameters', Type => 'Node' }, # '060e2b34.0101.0101.04020403.00000000' => { Name => 'MPEGAudioCodingParameters', Type => 'Node' }, # '060e2b34.0101.0101.04020403.01000000' => { Name => 'MPEG-1AudioCodingParameters', Type => 'Node' }, # '060e2b34.0101.0101.04020800.00000000' => { Name => 'FilmSoundSource', Type => 'Node' }, '060e2b34.0101.0101.04020801.00000000' => { Name => 'OpticalTrack', Format => 'string' }, '060e2b34.0101.0101.04020802.00000000' => { Name => 'MagneticTrack', Format => 'string' }, # '060e2b34.0101.0101.04021000.00000000' => { Name => 'AudioTestParameters', Type => 'Node' }, '060e2b34.0101.0101.04021001.00000000' => { Name => 'Signal-to-NoiseRatio', Format => 'float', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0101.04021002.00000000' => { Name => 'Weighting', Format => 'string', Groups => { 2 => 'Audio' } }, # '060e2b34.0101.0101.04030000.00000000' => { Name => 'DataEssenceCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04030100.00000000' => { Name => 'FundamentalDataEssenceParameters', Type => 'Node' }, # '060e2b34.0101.0101.04030200.00000000' => { Name => 'AnalogDataEssenceCodingParameters', Type => 'Node' }, '060e2b34.0101.0101.04030201.00000000' => { Name => 'AnalogDataCodingKind', Format => 'string' }, # '060e2b34.0101.0101.04030300.00000000' => { Name => 'DigitalDataEssenceCodingParameters', Type => 'Node' }, # '060e2b34.0101.0101.04031000.00000000' => { Name => 'DataEssenceTestParameters', Type => 'Node' }, # '060e2b34.0101.0101.04040000.00000000' => { Name => 'MetadataCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04040100.00000000' => { Name => 'FundamentalMetadataCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04040101.00000000' => { Name => 'TimecodeCharacteristics', Type => 'Node' }, '060e2b34.0101.0101.04040101.01000000' => { Name => 'TimecodeKind', Format => 'string' }, '060e2b34.0101.0101.04040101.02000000' => { Name => 'TimecodeTimebase', Format => 'int8u' }, '060e2b34.0101.0101.04040101.03000000' => { Name => 'TimecodeUserBitsFlag', Type => 'Boolean' }, '060e2b34.0101.0101.04040101.04000000' => { Name => 'IncludeSync', Type => 'Boolean' }, '060e2b34.0101.0101.04040101.05000000' => { Name => 'DropFrame', Type => 'Boolean' }, # '060e2b34.0101.0101.04040200.00000000' => { Name => 'AnalogMetadataCodingCharacteristics', Type => 'Node' }, '060e2b34.0101.0101.04040201.00000000' => { Name => 'TimecodeSourceKind', Format => 'int8u' }, '060e2b34.0101.0101.04040202.00000000' => { Name => 'AnalogMetadataCarrier', Format => 'string' }, # '060e2b34.0101.0101.04040300.00000000' => { Name => 'DigitalMetadataCodingCharacteristics', Type => 'Node' }, '060e2b34.0101.0101.04040301.00000000' => { Name => 'DigitalMetadataCarrier', Format => 'string' }, # '060e2b34.0101.0101.04041000.00000000' => { Name => 'MetadataTestParameters', Type => 'Node' }, # '060e2b34.0101.0101.04050000.00000000' => { Name => 'MonitoringAndControlCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04050100.00000000' => { Name => 'FundamentalMonitoringAndControlCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04050200.00000000' => { Name => 'AnalogMonitoringAndControlCodingCharacteristics', Type => 'Node' }, '060e2b34.0101.0101.04050201.00000000' => { Name => 'AnalogMonitoringAndControlCodingKind', Format => 'string' }, # '060e2b34.0101.0101.04050300.00000000' => { Name => 'DigitalMonitoringAndControlCodingParameters', Type => 'Node' }, # '060e2b34.0101.0101.04050301.00000000' => { Name => 'DigitalMonitoringAndControlSamplingParameters', Type => 'Node' }, # '060e2b34.0101.0101.04051000.00000000' => { Name => 'MonitoringAndControlTestParameters', Type => 'Node' }, # '060e2b34.0101.0101.04060000.00000000' => { Name => 'GeneralCodingCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04060100.00000000' => { Name => 'GeneralEssenceCodingCharacteristics', Type => 'Node' }, '060e2b34.0101.0101.04060101.00000000' => { Name => 'SampleRate', Format => 'rational64s' }, '060e2b34.0101.0101.04060102.00000000' => { Name => 'EssenceLength', Type => 'Length', %duration }, # '060e2b34.0101.0101.04080000.00000000' => { Name => 'ObjectCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04100000.00000000' => { Name => 'MediumCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04100100.00000000' => { Name => 'StorageMediumParameters', Type => 'Node' }, # '060e2b34.0101.0101.04100101.00000000' => { Name => 'TapeMediumParameters', Type => 'Node' }, # '060e2b34.0101.0101.04100102.00000000' => { Name => 'DiscMediumParameters', Type => 'Node' }, # '060e2b34.0101.0101.04100103.00000000' => { Name => 'FilmMediumParameters', Type => 'Node' }, # '060e2b34.0101.0101.04100103.01000000' => { Name => 'GenericFilmMediumParameters', Type => 'Node' }, '060e2b34.0101.0101.04100103.01010000' => { Name => 'FilmColorProcess', Format => 'string' }, '060e2b34.0101.0101.04100103.01020000' => { Name => 'EdgeCodeFormat', Type => 'EdgeType', Unknown => 1 }, '060e2b34.0101.0101.04100103.01040000' => { Name => 'FilmFormatName', Format => 'string' }, '060e2b34.0101.0101.04100103.01050000' => { Name => 'FilmStockKind', Format => 'string' }, '060e2b34.0101.0101.04100103.01060000' => { Name => 'FilmStockManufacturerName', Format => 'string' }, # '060e2b34.0101.0101.04100103.02000000' => { Name => 'SpecificFilmMediumParameters', Type => 'Node' }, '060e2b34.0101.0101.04100103.02010000' => { Name => 'PhysicalMediaLength', Type => 'UIMSBF', Unknown => 1, Groups => { 2 => 'Time' } }, '060e2b34.0101.0101.04100103.02020000' => { Name => 'FilmCaptureAperture', Format => 'string' }, # '060e2b34.0101.0101.04200000.00000000' => { Name => 'DeviceCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04200100.00000000' => { Name => 'CameraCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04200101.00000000' => { Name => 'ImageCharacteristics', Type => 'Node' }, '060e2b34.0101.0101.04200101.01000000' => { Name => 'ImageCategory', Format => 'string' }, # '060e2b34.0101.0101.04200102.01000000' => { Name => 'ImageDevices', Type => 'Node' }, '060e2b34.0101.0101.04200102.01010000' => { Name => 'ImageSourceDeviceKind', Format => 'string' }, # '060e2b34.0101.0101.04200200.00000000' => { Name => 'OpticalCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.04200201.00000000' => { Name => 'OpticalTestParameters', Type => 'Node' }, # '060e2b34.0101.0101.04200201.01000000' => { Name => 'OpticalDeviceParameters', Type => 'Node' }, '060e2b34.0101.0101.04200201.01010000' => { Name => 'OpticalTestParameterName', Format => 'string' }, '060e2b34.0101.0101.04200201.01020000' => { Name => 'OpticalTestResult', Format => 'float' }, '060e2b34.0101.0101.04200201.01030000' => { Name => 'OpticalTestResult', Format => 'int32s' }, # '060e2b34.0101.0101.04200300.00000000' => { Name => 'MicrophoneCharacteristics', Type => 'Node' }, '060e2b34.0101.0101.04200301.00000000' => { Name => 'SensorType', Format => 'string' }, '060e2b34.0101.0101.04200302.00000000' => { Name => 'PolarCharacteristic', Format => 'string' }, # '060e2b34.0101.0101.05000000.00000000' => { Name => 'PROCESS', Type => 'Node' }, # '060e2b34.0101.0101.05010000.00000000' => { Name => 'GeneralProcessIndicators', Type => 'Node' }, # '060e2b34.0101.0101.05010100.00000000' => { Name => 'ProcessFundamentals', Type => 'Node' }, '060e2b34.0101.0101.05010101.00000000' => { Name => 'IntegrationIndication', Format => 'string' }, '060e2b34.0101.0101.05010102.00000000' => { Name => 'EventIndication', Format => 'string' }, '060e2b34.0101.0101.05010103.00000000' => { Name => 'QualityFlag', Type => 'Boolean' }, '060e2b34.0101.0101.05010105.00000000' => { Name => 'PhysicalInstanceKind', Format => 'string' }, # '060e2b34.0101.0101.05010200.00000000' => { Name => 'ContentCapture', Type => 'Node' }, '060e2b34.0101.0101.05010201.00000000' => { Name => 'DigitalOrAnalogOrigination', Format => 'string' }, # '060e2b34.0101.0101.05010202.00000000' => { Name => 'VideoOrImageCaptureProcess', Type => 'Node' }, # '060e2b34.0101.0101.05010203.00000000' => { Name => 'FilmCaptureProcess', Type => 'Node' }, # '060e2b34.0101.0101.05010204.00000000' => { Name => 'AudioCaptureProcess', Type => 'Node' }, '060e2b34.0101.0101.05010204.01000000' => { Name => 'MicrophonePlacementTechniques', Format => 'string', Groups => { 2 => 'Audio' } }, # '060e2b34.0101.0101.05010205.00000000' => { Name => 'DataCaptureProcess', Type => 'Node' }, # '060e2b34.0101.0101.05010300.00000000' => { Name => 'Manipulation', Type => 'Node' }, '060e2b34.0101.0101.05010301.00000000' => { Name => 'SimpleFlaggingCount', Format => 'int16u' }, '060e2b34.0101.0101.05010302.00000000' => { Name => 'CopyCount', Format => 'int8u' }, '060e2b34.0101.0101.05010303.00000000' => { Name => 'CloneCount', Format => 'int8u' }, '060e2b34.0101.0101.05010304.00000000' => { Name => 'Work-in-ProgressFlag', Type => 'Boolean' }, # '060e2b34.0101.0101.05020000.00000000' => { Name => 'CompressionProcessing', Type => 'Node' }, # '060e2b34.0101.0101.05020100.00000000' => { Name => 'VideoOrImageCompression', Type => 'Node' }, '060e2b34.0101.0101.05020101.00000000' => { Name => 'VideoOrImageCompressionAlgorithm', Format => 'string' }, # '060e2b34.0101.0101.05020102.00000000' => { Name => 'MPEGProcessing', Type => 'Node' }, # '060e2b34.0101.0101.05020102.01000000' => { Name => 'MPEG-2Processing', Type => 'Node' }, '060e2b34.0101.0101.05020102.01010000' => { Name => 'SplicingMetadata', Unknown => 1 }, # '060e2b34.0101.0101.05020200.00000000' => { Name => 'AudioCompression', Type => 'Node' }, '060e2b34.0101.0101.05020201.00000000' => { Name => 'AudioCompressionAlgorithm', Format => 'string', Groups => { 2 => 'Audio' } }, # '060e2b34.0101.0101.05020300.00000000' => { Name => 'DataEssenceCompression', Type => 'Node' }, # '060e2b34.0101.0101.05020400.00000000' => { Name => 'MetadataCompression', Type => 'Node' }, # '060e2b34.0101.0101.05030000.00000000' => { Name => 'NoiseReductionProcessing', Type => 'Node' }, # '060e2b34.0101.0101.05030100.00000000' => { Name => 'VideoNoiseReduction', Type => 'Node' }, '060e2b34.0101.0101.05030101.00000000' => { Name => 'VideoNoiseReductionAlgorithm', Format => 'string' }, # '060e2b34.0101.0101.05030200.00000000' => { Name => 'AudioNoiseReduction', Type => 'Node' }, '060e2b34.0101.0101.05030201.00000000' => { Name => 'AudioNoiseReductionAlgorithm', Format => 'string', Groups => { 2 => 'Audio' } }, # '060e2b34.0101.0101.05200000.00000000' => { Name => 'EnhancementOrModification', Type => 'Node' }, # '060e2b34.0101.0101.05200100.00000000' => { Name => 'ImageEssenceProcessing', Type => 'Node' }, '060e2b34.0101.0101.05200101.00000000' => { Name => 'EnhancementOrModificationDescription', Format => 'string' }, # '060e2b34.0101.0101.05200200.00000000' => { Name => 'VideoProcessOrSettings', Type => 'Node' }, '060e2b34.0101.0101.05200201.00000000' => { Name => 'VideoDeviceKind', Format => 'string' }, '060e2b34.0101.0101.05200202.00000000' => { Name => 'VideoDeviceParameterName', Format => 'string' }, '060e2b34.0101.0101.05200203.00000000' => { Name => 'VideoDeviceParameterSetting', Format => 'string' }, # '060e2b34.0101.0101.05200300.00000000' => { Name => 'AudioEssenceProcessing', Type => 'Node' }, '060e2b34.0101.0101.05200301.00000000' => { Name => 'AudioEnhancementOrModificationDescription', Format => 'string', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0101.05200302.00000000' => { Name => 'AudioFirstMix-DownProcess', Format => 'string', Groups => { 2 => 'Audio' } }, # '060e2b34.0101.0101.05200400.00000000' => { Name => 'AudioProcessorSettings', Type => 'Node' }, '060e2b34.0101.0101.05200401.00000000' => { Name => 'AudioDeviceKind', Format => 'string', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0101.05200402.00000000' => { Name => 'AudioDeviceParameter', Format => 'string', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0101.05200403.00000000' => { Name => 'AudioDeviceParameterSetting', Format => 'string', Groups => { 2 => 'Audio' } }, # '060e2b34.0101.0101.05200500.00000000' => { Name => 'DataEssenceProcessing', Type => 'Node' }, '060e2b34.0101.0101.05200501.00000000' => { Name => 'DataEnhancementOrModificationDescription', Format => 'string' }, # '060e2b34.0101.0101.05200600.00000000' => { Name => 'DataProcessorSettings', Type => 'Node' }, '060e2b34.0101.0101.05200601.00000000' => { Name => 'DataDeviceKind', Format => 'string' }, '060e2b34.0101.0101.05200602.00000000' => { Name => 'DataDeviceParameterName', Format => 'string' }, '060e2b34.0101.0101.05200603.00000000' => { Name => 'DataDeviceParameterSetting', Format => 'string' }, # '060e2b34.0101.0101.05200700.00000000' => { Name => 'MetadataProcessing', Type => 'Node' }, # '060e2b34.0101.0101.05200800.00000000' => { Name => 'MetadataProcessorSettings', Type => 'Node' }, # '060e2b34.0101.0101.05300000.00000000' => { Name => 'EditingInformation', Type => 'Node' }, # '060e2b34.0101.0101.05300100.00000000' => { Name => 'EditingVersionInformation', Type => 'Node' }, # '060e2b34.0101.0101.05300200.00000000' => { Name => 'EditingDecisionInformation', Type => 'Node' }, '060e2b34.0101.0101.05300201.00000000' => { Name => 'DefaultFadeType', Type => 'FadeType', Unknown => 1 }, # '060e2b34.0101.0101.05300300.00000000' => { Name => 'EditingMatteInformation', Type => 'Node' }, # '060e2b34.0101.0101.05300400.00000000' => { Name => 'EditingEventInformation', Type => 'Node' }, '060e2b34.0101.0101.05300401.00000000' => { Name => 'ActiveState', Type => 'Boolean' }, # '060e2b34.0101.0101.05300500.00000000' => { Name => 'EditingEffectInformation', Type => 'Node' }, '060e2b34.0101.0101.05300501.00000000' => { Name => 'Fade-InType', Type => 'FadeType', Unknown => 1 }, '060e2b34.0101.0101.05300502.00000000' => { Name => 'Fade-OutType', Type => 'FadeType', Unknown => 1 }, '060e2b34.0101.0101.05300503.00000000' => { Name => 'SpeedChangeEffectFlag', Type => 'Boolean' }, '060e2b34.0101.0101.05300504.00000000' => { Name => 'InputSegmentCount', Format => 'int32s' }, '060e2b34.0101.0101.05300505.00000000' => { Name => 'Bypass', Format => 'int32u' }, # '060e2b34.0101.0101.05300600.00000000' => { Name => 'EditingWebInformation', Type => 'Node' }, # '060e2b34.0101.0101.05300700.00000000' => { Name => 'EditingUserNotes', Type => 'Node' }, # '060e2b34.0101.0101.05400000.00000000' => { Name => 'ProcessingHistory', Type => 'Node' }, # '060e2b34.0101.0101.05400100.00000000' => { Name => 'VideoCompressionHistory', Type => 'Node' }, '060e2b34.0101.0101.05400101.00000000' => { Name => 'VideoCompressionAlgorithm', Format => 'string' }, '060e2b34.0101.0101.05400102.00000000' => { Name => 'MPEGVideoRecodingDataset', Unknown => 1 }, # '060e2b34.0101.0101.05400200.00000000' => { Name => 'AudioCompressionHistory', Type => 'Node' }, '060e2b34.0101.0101.05400201.00000000' => { Name => 'UpstreamAudioCompressionAlgorithm', Format => 'string', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0101.05400202.00000000' => { Name => 'MPEGAudioRecodingDataset', Unknown => 1, Groups => { 2 => 'Audio' } }, # '060e2b34.0101.0101.05400300.00000000' => { Name => 'DataCompressionHistory', Type => 'Node' }, # '060e2b34.0101.0101.05400400.00000000' => { Name => 'MetadataCompressionHistory', Type => 'Node' }, # '060e2b34.0101.0101.06000000.00000000' => { Name => 'RELATIONAL', Type => 'Node' }, # '060e2b34.0101.0101.06010000.00000000' => { Name => 'GenericRelationships', Type => 'Node' }, # '060e2b34.0101.0101.06010100.00000000' => { Name => 'EssenceAndMetadataRelationships', Type => 'Node' }, # '060e2b34.0101.0101.06010101.00000000' => { Name => 'EssenceToEssenceRelationships', Type => 'Node' }, # '060e2b34.0101.0101.06010102.00000000' => { Name => 'MetadataToEssenceRelationships', Type => 'Node' }, # '060e2b34.0101.0101.06010103.00000000' => { Name => 'MetadataToMetadataRelationships', Type => 'Node' }, # '060e2b34.0101.0101.06010104.00000000' => { Name => 'ObjectToObjectRelationships', Type => 'Node' }, # '060e2b34.0101.0101.06010105.00000000' => { Name => 'MetadataToObjectRelationships', Type => 'Node' }, # '060e2b34.0101.0101.06020000.00000000' => { Name => 'RelatedProductionMaterial', Type => 'Node' }, '060e2b34.0101.0101.06020100.00000000' => { Name => 'ProgramSupportMaterialReference', Format => 'string' }, '060e2b34.0101.0101.06020200.00000000' => { Name => 'AdvertisingMaterialReference', Format => 'string' }, '060e2b34.0101.0101.06020300.00000000' => { Name => 'ProgramCommercialMaterialReference', Format => 'string' }, # '060e2b34.0101.0101.06080000.00000000' => { Name => 'StreamAndStorageRelationships', Type => 'Node' }, # '060e2b34.0101.0101.06080100.00000000' => { Name => 'StreamRelationships', Type => 'Node' }, # '060e2b34.0101.0101.06080200.00000000' => { Name => 'StorageRelationships', Type => 'Node' }, '060e2b34.0101.0101.06080201.00000000' => { Name => 'ContiguousDataFlag', Type => 'Boolean' }, # '060e2b34.0101.0101.06100000.00000000' => { Name => 'NumericalSequence', Type => 'Node' }, '060e2b34.0101.0101.06100100.00000000' => { Name => 'PositionInSequence', Format => 'int32u' }, '060e2b34.0101.0101.06100200.00000000' => { Name => 'RelativePositionInSequenceOffset', Format => 'int32s' }, '060e2b34.0101.0101.06100300.00000000' => { Name => 'RelativePositionInSequenceName', Format => 'string' }, # '060e2b34.0101.0101.07000000.00000000' => { Name => 'SPATIO-TEMPORAL', Type => 'Node' }, # '060e2b34.0101.0101.07010000.00000000' => { Name => 'PositionAndSpaceVectors', Type => 'Node' }, # '060e2b34.0101.0101.07010100.00000000' => { Name => 'PositionalSystemInformation', Type => 'Node' }, '060e2b34.0101.0101.07010101.00000000' => { Name => 'ImageCoordinateSystem', Format => 'string' }, '060e2b34.0101.0101.07010102.00000000' => { Name => 'MapDatumUsed', Format => 'string' }, # '060e2b34.0101.0101.07010200.00000000' => { Name => 'PositionalInformation', Type => 'Node' }, # '060e2b34.0101.0101.07010201.00000000' => { Name => 'AbsolutePosition', Type => 'Node' }, # '060e2b34.0101.0101.07010201.01000000' => { Name => 'LocalDatumAbsolutePosition', Type => 'Node' }, '060e2b34.0101.0101.07010201.01010000' => { Name => 'LocalDatumAbsolutePositionAccuracy', Format => 'float' }, # '060e2b34.0101.0101.07010201.02000000' => { Name => 'DeviceAbsolutePosition', Type => 'Node' }, '060e2b34.0101.0101.07010201.02010000' => { Name => 'DeviceAbsolutePositionalAccuracy', Format => 'float' }, '060e2b34.0101.0101.07010201.02020000' => { Name => 'DeviceAltitude', Format => 'float', Groups => { 2 => 'Location' }, PrintConv => '$val m' }, '060e2b34.0101.0101.07010201.02020100' => { Name => 'DeviceAltitude', Type => 'Alt', Groups => { 2 => 'Location' }, PrintConv => '$val m' }, '060e2b34.0101.0101.07010201.02040000' => { Name => 'DeviceLatitude', Format => 'float', %geoLat }, '060e2b34.0101.0101.07010201.02040100' => { Name => 'DeviceLatitude', Type => 'Lat', %geoLat }, '060e2b34.0101.0101.07010201.02060000' => { Name => 'DeviceLongitude', Format => 'float', %geoLon }, '060e2b34.0101.0101.07010201.02060100' => { Name => 'DeviceLongitude', Type => 'Lon', %geoLon }, '060e2b34.0101.0101.07010201.02100000' => { Name => 'DeviceXDimension', Format => 'float' }, '060e2b34.0101.0101.07010201.02110000' => { Name => 'DeviceYDimension', Format => 'float' }, # '060e2b34.0101.0101.07010201.03000000' => { Name => 'SubjectAbsolutePosition', Type => 'Node' }, '060e2b34.0101.0101.07010201.03010000' => { Name => 'FramePositionalAccuracy', Format => 'float' }, '060e2b34.0101.0101.07010201.03020000' => { Name => 'FrameCenterLatitude', Format => 'double', %geoLat }, '060e2b34.0101.0101.07010201.03030000' => { Name => 'FrameCenterLatitude', Format => 'string', %geoLat, ValueConv => \&ConvLatLon }, '060e2b34.0101.0101.07010201.03040000' => { Name => 'FrameCenterLongitude', Format => 'double', %geoLon }, '060e2b34.0101.0101.07010201.03050000' => { Name => 'FrameCenterLongitude', Format => 'string', %geoLon, ValueConv => \&ConvLatLon }, '060e2b34.0101.0101.07010201.03060000' => { Name => 'FrameCenterLatitudeLongitude', Format => 'string', %geoLatLon, ValueConv => \&ConvLatLon }, # '060e2b34.0101.0101.07010202.00000000' => { Name => 'RelativePosition', Type => 'Node' }, # '060e2b34.0101.0101.07010202.01000000' => { Name => 'LocalDatumRelativePosition', Type => 'Node' }, '060e2b34.0101.0101.07010202.01010000' => { Name => 'LocalDatumRelativePositionAccuracy', Format => 'float' }, # '060e2b34.0101.0101.07010202.02000000' => { Name => 'DeviceRelativePosition', Type => 'Node' }, '060e2b34.0101.0101.07010202.02010000' => { Name => 'DeviceRelativePositionalAccuracy', Format => 'float' }, '060e2b34.0101.0101.07010202.02020000' => { Name => 'DeviceRelativePositionX', Format => 'float' }, '060e2b34.0101.0101.07010202.02030000' => { Name => 'DeviceRelativePositionY', Format => 'float' }, '060e2b34.0101.0101.07010202.02040000' => { Name => 'DeviceRelativePositionZ', Format => 'float' }, # '060e2b34.0101.0101.07010202.03000000' => { Name => 'SubjectRelativePosition', Type => 'Node' }, '060e2b34.0101.0101.07010202.03010000' => { Name => 'SubjectRelativePositionalAccuracy', Format => 'float' }, # '060e2b34.0101.0101.07010203.00000000' => { Name => 'ImagePositionalInformation', Type => 'Node' }, '060e2b34.0101.0101.07010203.01000000' => { Name => 'PositionWithinViewportImageXCoordinate', Format => 'int16s' }, '060e2b34.0101.0101.07010203.02000000' => { Name => 'PositionWithinViewportImageYCoordinate', Format => 'int16s' }, '060e2b34.0101.0101.07010203.03000000' => { Name => 'SourceImageCenterXCoordinate', Format => 'int16s' }, '060e2b34.0101.0101.07010203.04000000' => { Name => 'SourceImageCenterYCoordinate', Format => 'int16s' }, '060e2b34.0101.0101.07010203.05000000' => { Name => 'ViewportImageCenterCCoordinate', Format => 'int16s' }, '060e2b34.0101.0101.07010203.06000000' => { Name => 'ViewportImageCenterYCoordinate', Format => 'int16s' }, # '060e2b34.0101.0101.07010300.00000000' => { Name => 'RateAndDirectionOfPositionalChange', Type => 'Node' }, # '060e2b34.0101.0101.07010301.00000000' => { Name => 'AbsoluteRateAndDirectionOfPositionalChange', Type => 'Node' }, # '060e2b34.0101.0101.07010301.01000000' => { Name => 'DeviceRateAndDirectionOfPositionalChange', Type => 'Node' }, '060e2b34.0101.0101.07010301.01010000' => { Name => 'DeviceAbsoluteSpeed', Format => 'float' }, '060e2b34.0101.0101.07010301.01020000' => { Name => 'DeviceAbsoluteHeading', Format => 'float' }, # '060e2b34.0101.0101.07010301.02000000' => { Name => 'SubjectRateAndDirectionOfPositionalChange', Type => 'Node' }, '060e2b34.0101.0101.07010301.02010000' => { Name => 'SubjectAbsoluteSpeed', Format => 'float' }, '060e2b34.0101.0101.07010301.02020000' => { Name => 'SubjectAbsoluteHeading', Format => 'float' }, # '060e2b34.0101.0101.07010302.00000000' => { Name => 'RelativeRateAndDirectionOfPositionalChange', Type => 'Node' }, # '060e2b34.0101.0101.07010302.01000000' => { Name => 'DeviceRelativeRateAndDirectionOfPositionalChange', Type => 'Node' }, '060e2b34.0101.0101.07010302.01010000' => { Name => 'DeviceRelativeSpeed', Format => 'float' }, '060e2b34.0101.0101.07010302.01020000' => { Name => 'DeviceRelativeHeading', Format => 'float' }, # '060e2b34.0101.0101.07010302.02000000' => { Name => 'SubjectRelativeRateAndDirectionOfPositionalChange', Type => 'Node' }, '060e2b34.0101.0101.07010302.02010000' => { Name => 'SubjectRelativeSpeed', Format => 'float' }, '060e2b34.0101.0101.07010302.02020000' => { Name => 'SubjectRelativeHeading', Format => 'float' }, # '060e2b34.0101.0101.07010800.00000000' => { Name => 'DistanceMeasurements', Type => 'Node' }, # '060e2b34.0101.0101.07010801.00000000' => { Name => 'DeviceToSubjectDistance', Type => 'Node' }, '060e2b34.0101.0101.07010801.01000000' => { Name => 'SlantRange', Format => 'float' }, # '060e2b34.0101.0101.07010900.00000000' => { Name => 'Dimensions', Type => 'Node' }, # '060e2b34.0101.0101.07010901.00000000' => { Name => 'DeviceDimensions', Type => 'Node' }, # '060e2b34.0101.0101.07010902.00000000' => { Name => 'SubjectDimensions', Type => 'Node' }, '060e2b34.0101.0101.07010902.01000000' => { Name => 'TargetWidth', Format => 'float' }, # '060e2b34.0101.0101.07010903.00000000' => { Name => 'LocationDimensions', Type => 'Node' }, # '060e2b34.0101.0101.07010904.00000000' => { Name => 'MediaDimensions', Type => 'Node' }, # '060e2b34.0101.0101.07010904.01000000' => { Name => 'ImageDimensions', Type => 'Node' }, # '060e2b34.0101.0101.07010904.01010000' => { Name => 'Pan-and-ScanImageDimensions', Type => 'Node' }, '060e2b34.0101.0101.07010904.01010100' => { Name => 'ViewportHeight', Format => 'int16u' }, '060e2b34.0101.0101.07010904.01010200' => { Name => 'ViewportWidth', Format => 'int16u' }, # '060e2b34.0101.0101.07011000.00000000' => { Name => 'AngularSpecifications', Type => 'Node' }, # '060e2b34.0101.0101.07011001.00000000' => { Name => 'DeviceAngles', Type => 'Node' }, '060e2b34.0101.0101.07011001.01000000' => { Name => 'SensorRollAngle', Format => 'float' }, '060e2b34.0101.0101.07011001.02000000' => { Name => 'AngleToNorth', Format => 'float' }, '060e2b34.0101.0101.07011001.03000000' => { Name => 'ObliquityAngle', Format => 'float' }, # '060e2b34.0101.0101.07011002.00000000' => { Name => 'SubjectAngles', Type => 'Node' }, # '060e2b34.0101.0101.07012000.00000000' => { Name => 'AbstractLocations', Type => 'Node' }, # '060e2b34.0101.0101.07012001.00000000' => { Name => 'PlaceNames', Type => 'Node' }, # '060e2b34.0101.0101.07012001.01000000' => { Name => 'AbstractNames', Type => 'Node' }, '060e2b34.0101.0101.07012001.01010000' => { Name => 'PlaceKeyword', Format => 'string' }, # '060e2b34.0101.0101.07012001.02000000' => { Name => 'CountryCodes', Type => 'Node' }, '060e2b34.0101.0101.07012001.02010000' => { Name => 'ObjectCountryCode', Format => 'string' }, '060e2b34.0101.0101.07012001.02020000' => { Name => 'ShootingCountryCode', Format => 'string' }, '060e2b34.0101.0101.07012001.02030000' => { Name => 'SettingCountryCode', Format => 'string' }, '060e2b34.0101.0101.07012001.02040000' => { Name => 'CopyrightLicenseCountryCode', Format => 'string' }, '060e2b34.0101.0101.07012001.02050000' => { Name => 'IntellectualPropertyLicenseCountryCode', Format => 'string' }, # '060e2b34.0101.0101.07012001.03000000' => { Name => 'Regions', Type => 'Node' }, '060e2b34.0101.0101.07012001.03010000' => { Name => 'ObjectRegionCode', Format => 'string' }, '060e2b34.0101.0101.07012001.03020000' => { Name => 'ShootingRegionCode', Format => 'string' }, '060e2b34.0101.0101.07012001.03030000' => { Name => 'SettingRegionCode', Format => 'string' }, '060e2b34.0101.0101.07012001.03040000' => { Name => 'CopyrightLicenseRegionCode', Format => 'string' }, '060e2b34.0101.0101.07012001.03050000' => { Name => 'IntellectualPropertyLicenseRegionCode', Format => 'string' }, # '060e2b34.0101.0101.07012001.04000000' => { Name => 'Addresses', Type => 'Node' }, # '060e2b34.0101.0101.07012001.04010000' => { Name => 'PostalAddresses', Type => 'Node' }, '060e2b34.0101.0101.07012001.04010100' => { Name => 'RoomNumber', Format => 'string' }, '060e2b34.0101.0101.07012001.04010200' => { Name => 'StreetNumber', Format => 'string' }, '060e2b34.0101.0101.07012001.04010300' => { Name => 'StreetName', Format => 'string' }, '060e2b34.0101.0101.07012001.04010400' => { Name => 'PostalTown', Format => 'string' }, '060e2b34.0101.0101.07012001.04010500' => { Name => 'CityName', Format => 'string' }, '060e2b34.0101.0101.07012001.04010600' => { Name => 'StateOrProvinceOrCountyName', Format => 'string' }, '060e2b34.0101.0101.07012001.04010700' => { Name => 'PostalCode', Format => 'string' }, '060e2b34.0101.0101.07012001.04010800' => { Name => 'CountryName', Format => 'string' }, # '060e2b34.0101.0101.07012001.04020000' => { Name => 'SettingAddresses', Type => 'Node' }, '060e2b34.0101.0101.07012001.04020100' => { Name => 'SettingRoomNumber', Format => 'string' }, '060e2b34.0101.0101.07012001.04020200' => { Name => 'SettingStreetNumberOrBuildingName', Format => 'string' }, '060e2b34.0101.0101.07012001.04020300' => { Name => 'SettingStreetName', Format => 'string' }, '060e2b34.0101.0101.07012001.04020400' => { Name => 'SettingTownName', Format => 'string' }, '060e2b34.0101.0101.07012001.04020500' => { Name => 'SettingCityName', Format => 'string' }, '060e2b34.0101.0101.07012001.04020600' => { Name => 'SettingStateOrProvinceOrCountyName', Format => 'string' }, '060e2b34.0101.0101.07012001.04020700' => { Name => 'SettingPostalCode', Format => 'string' }, '060e2b34.0101.0101.07012001.04020800' => { Name => 'SettingCountryName', Format => 'string' }, # '060e2b34.0101.0101.07012001.10030000' => { Name => 'ElectronicAddressInformation', Type => 'Node' }, '060e2b34.0101.0101.07012001.10030100' => { Name => 'TelephoneNumber', Format => 'string' }, '060e2b34.0101.0101.07012001.10030200' => { Name => 'FaxNumber', Format => 'string' }, '060e2b34.0101.0101.07012001.10030300' => { Name => 'E-mailAddress', Format => 'string' }, # '060e2b34.0101.0101.07012002.00000000' => { Name => 'PlaceDescriptions', Type => 'Node' }, '060e2b34.0101.0101.07012002.01000000' => { Name => 'SettingDescription', Format => 'string' }, # '060e2b34.0101.0101.07020000.00000000' => { Name => 'Temporal', Type => 'Node' }, # '060e2b34.0101.0101.07020100.00000000' => { Name => 'DatesAndTimes', Type => 'Node' }, # '060e2b34.0101.0101.07020101.00000000' => { Name => 'GeneralDatesAndTimes', Type => 'Node' }, # '060e2b34.0101.0101.07020101.01000000' => { Name => 'UserDateTime', Type => 'Node' }, '060e2b34.0101.0101.07020101.01010000' => { Name => 'UTCUserDateTime', Format => 'string', Groups => { 2 => 'Time' } }, '060e2b34.0101.0101.07020101.01020000' => { Name => 'LocalUserDateTime', Format => 'string', Groups => { 2 => 'Time' } }, '060e2b34.0101.0101.07020101.01030000' => { Name => 'SMPTE309MUserDateTime', Type => 'UILSBF', Unknown => 1, Groups => { 2 => 'Time' } }, '060e2b34.0101.0101.07020101.01040000' => { Name => 'SMPTE12MUserDateTime', Type => 'UILSBF', Unknown => 1, Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020102.00000000' => { Name => 'AbsoluteDatesAndTimes', Type => 'Node' }, # '060e2b34.0101.0101.07020102.01000000' => { Name => 'MaterialStartTrueDateTime', Type => 'Node' }, '060e2b34.0101.0101.07020102.01010000' => { Name => 'UTCStartDateTime', Format => 'string', Groups => { 2 => 'Time' } }, '060e2b34.0101.0101.07020102.01020000' => { Name => 'LocalStartDateTime', Format => 'string', Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020102.02000000' => { Name => 'MaterialStartTimeAddress', Type => 'Node' }, '060e2b34.0101.0101.07020102.02010000' => { Name => 'TimecodeStartDateTime', Type => 'UILSBF', Unknown => 1, Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020102.03000000' => { Name => 'MaterialEndTrueDateTime', Type => 'Node' }, '060e2b34.0101.0101.07020102.03010000' => { Name => 'UTCEndDateTime', Format => 'string', Groups => { 2 => 'Time' } }, '060e2b34.0101.0101.07020102.03020000' => { Name => 'LocalEndDateTime', Format => 'string', Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020102.04000000' => { Name => 'MaterialEndTimeAddress', Type => 'Node' }, '060e2b34.0101.0101.07020102.04010000' => { Name => 'TimecodeEndDateTime', Type => 'UILSBF', Unknown => 1, Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020102.05000000' => { Name => 'MaterialOccurrenceTrueDateTime', Type => 'Node' }, '060e2b34.0101.0101.07020102.05010000' => { Name => 'UTCLastModifyDate', Format => 'string', Groups => { 2 => 'Time' } }, '060e2b34.0101.0101.07020102.05020000' => { Name => 'LocalLastModifyDate', Format => 'string', Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020102.06000000' => { Name => 'MaterialOccurrenceTimeAddress', Type => 'Node' }, '060e2b34.0101.0101.07020102.06010000' => { Name => 'TimecodeLastModifyDate', Type => 'UILSBF', Unknown => 1, Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020102.07000000' => { Name => 'EventStartTrueDateTime', Type => 'Node' }, '060e2b34.0101.0101.07020102.07010000' => { Name => 'UTCEventStartDateTime', Format => 'string', Groups => { 2 => 'Time' } }, '060e2b34.0101.0101.07020102.07020000' => { Name => 'LocalEventStartDateTime', Format => 'string', Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020102.08000000' => { Name => 'EventStartTimeAddress', Type => 'Node' }, '060e2b34.0101.0101.07020102.08010000' => { Name => 'TimecodeEventStartDateTime', Type => 'UILSBF', Unknown => 1, Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020102.09000000' => { Name => 'EventEndTrueDateTime', Type => 'Node' }, '060e2b34.0101.0101.07020102.09010000' => { Name => 'UTCEventEndDateTime', Format => 'string', Groups => { 2 => 'Time' } }, '060e2b34.0101.0101.07020102.09020000' => { Name => 'LocalEventEndDateTime', Format => 'string', Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020102.0a000000' => { Name => 'EventEndTimeAddress', Type => 'Node' }, '060e2b34.0101.0101.07020102.0a010000' => { Name => 'TimecodeEventEndDateTime', Type => 'UILSBF', Unknown => 1, Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020103.00000000' => { Name => 'RelativeTimes', Type => 'Node' }, # '060e2b34.0101.0101.07020103.01000000' => { Name => 'MaterialStartRelativeTimes', Type => 'Node' }, '060e2b34.0101.0101.07020103.01010000' => { Name => 'StartTimeRelativeToReference', Format => 'string' }, '060e2b34.0101.0101.07020103.01020000' => { Name => 'StartTimecodeRelativeToReference', Type => 'UILSBF', Unknown => 1, Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020103.02000000' => { Name => 'MaterialEndRelativeTimes', Type => 'Node' }, '060e2b34.0101.0101.07020103.02010000' => { Name => 'MaterialEndTimeOffset', Format => 'string' }, '060e2b34.0101.0101.07020103.02020000' => { Name => 'MaterialEndTimecodeOffset', Type => 'UILSBF', Unknown => 1, Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020103.03000000' => { Name => 'EventStartRelativeTimes', Type => 'Node' }, '060e2b34.0101.0101.07020103.03010000' => { Name => 'EventStartTimeOffset', Format => 'string' }, '060e2b34.0101.0101.07020103.03020000' => { Name => 'EventStartTimecodeOffset', Type => 'UILSBF', Unknown => 1, Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020103.04000000' => { Name => 'EventEndRelativeTimes', Type => 'Node' }, '060e2b34.0101.0101.07020103.04010000' => { Name => 'EventEndTimeOffset', Format => 'string' }, '060e2b34.0101.0101.07020103.04020000' => { Name => 'EventEndTimecodeOffset', Type => 'UILSBF', Unknown => 1, Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020103.10000000' => { Name => 'Offsets', Type => 'Node' }, # '060e2b34.0101.0101.07020103.10010000' => { Name => 'MaterialOffsets', Type => 'Node' }, '060e2b34.0101.0101.07020103.10010100' => { Name => 'FrameCountOffset', Format => 'int32u' }, # '060e2b34.0101.0101.07020108.00000000' => { Name => 'SettingDateAndTime', Type => 'Node' }, '060e2b34.0101.0101.07020108.01000000' => { Name => 'TimePeriodName', Format => 'string' }, # '060e2b34.0101.0101.07020110.00000000' => { Name => 'ProcessDateTime', Type => 'Node' }, # '060e2b34.0101.0101.07020110.01000000' => { Name => 'CreateDate', Type => 'Node' }, '060e2b34.0101.0101.07020110.01010000' => { Name => 'LocalCreationDateTime', Format => 'string', Groups => { 2 => 'Time' } }, '060e2b34.0101.0101.07020110.01020000' => { Name => 'TimecodeCreationDateTime', Type => 'UILSBF', Unknown => 1, Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020110.02000000' => { Name => 'ModifyDate', Type => 'Node' }, '060e2b34.0101.0101.07020110.02010000' => { Name => 'LocalModifyDate', Format => 'string', Groups => { 2 => 'Time' } }, '060e2b34.0101.0101.07020110.02020000' => { Name => 'TimecodeModifyDate', Type => 'UILSBF', Unknown => 1, Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020200.00000000' => { Name => 'Durations', Type => 'Node' }, # '060e2b34.0101.0101.07020201.00000000' => { Name => 'AbsoluteDurations', Type => 'Node' }, # '060e2b34.0101.0101.07020201.01000000' => { Name => 'EditTimelineDurations', Type => 'Node' }, '060e2b34.0101.0101.07020201.01010000' => { Name => 'FrameCount', Format => 'int32u' }, # '060e2b34.0101.0101.07020201.01040000' => { Name => 'VideoDurations', Type => 'Node' }, # '060e2b34.0101.0101.07020201.01050000' => { Name => 'AudioDurations', Type => 'Node' }, # '060e2b34.0101.0101.07020201.02000000' => { Name => 'MaterialAbsoluteDurations', Type => 'Node' }, '060e2b34.0101.0101.07020201.02010000' => { Name => 'MaterialAbsoluteDuration', Format => 'string' }, '060e2b34.0101.0101.07020201.02020000' => { Name => 'MaterialAbsoluteDuration', Type => 'UILSBF', Unknown => 1, Groups => { 2 => 'Time' } }, '060e2b34.0101.0101.07020201.02030000' => { Name => 'TextlessBlackDuration', Format => 'int32u' }, # '060e2b34.0101.0101.07020201.03000000' => { Name => 'EventAbsoluteDurations', Type => 'Node' }, '060e2b34.0101.0101.07020201.03010000' => { Name => 'EventAbsoluteDurationFrameCount', Format => 'int32u' }, '060e2b34.0101.0101.07020201.03020000' => { Name => 'EventAbsoluteDuration', Format => 'string' }, '060e2b34.0101.0101.07020201.03030000' => { Name => 'EventAbsoluteDuration', Type => 'UILSBF', Unknown => 1, Groups => { 2 => 'Time' } }, # '060e2b34.0101.0101.07020202.00000000' => { Name => 'RelativeScalingDurations', Type => 'Node' }, # '060e2b34.0101.0101.07020300.00000000' => { Name => 'Delay', Type => 'Node' }, # '060e2b34.0101.0101.07020301.00000000' => { Name => 'EncodingAndDecoding', Type => 'Node' }, # '060e2b34.0101.0101.07020301.01000000' => { Name => 'CodecDelay', Type => 'Node' }, # '060e2b34.0101.0101.07020301.02000000' => { Name => 'EncodingDelay', Type => 'Node' }, # '060e2b34.0101.0101.07020301.03000000' => { Name => 'DecodingDelay', Type => 'Node' }, '060e2b34.0101.0101.07020301.03010000' => { Name => 'BufferDelay', Unknown => 1 }, # '060e2b34.0101.0101.07020500.00000000' => { Name => 'Latency', Type => 'Node' }, # '060e2b34.0101.0101.07020600.00000000' => { Name => 'ShutterCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.07020601.00000000' => { Name => 'ShutterCharacteristics', Type => 'Node' }, # '060e2b34.0101.0101.07020601.01000000' => { Name => 'ShutterSpeed', Type => 'Node' }, # '060e2b34.0101.0101.07020601.02000000' => { Name => 'ShutterGating', Type => 'Node' }, # '060e2b34.0101.0101.0d000000.00000000' => { Name => 'UserOrganizationRegisteredForPublicUse', Type => 'Node' }, # '060e2b34.0101.0101.0d010000.00000000' => { Name => 'AAFAssociation', Type => 'Node' }, # '060e2b34.0101.0101.0d010100.00000000' => { Name => 'AAFAttributes', Type => 'Node' }, # '060e2b34.0101.0101.0d010101.00000000' => { Name => 'AAFInformationAttributes', Type => 'Node' }, # '060e2b34.0101.0101.0d010101.01000000' => { Name => 'AAFInformationAttributesVersion1', Type => 'Node' }, # '060e2b34.0101.0101.0d010101.01010000' => { Name => 'EnumeratedAttributes', Type => 'Node' }, # tags from ref 4 (untested) '060e2b34.0101.0101.0d010401.03010100' => { Name => 'ProgramIdentifier', Type => 'UTF-16' }, '060e2b34.0101.0101.0d010401.03010200' => { Name => 'ProgramIdentifierString', Type => 'UTF-16' }, '060e2b34.0101.0101.0d010401.03010300' => { Name => 'ShimName', Type => 'UTF-16' }, '060e2b34.0101.0101.0d010401.03010400' => { Name => 'SignalStandard', Type => 'UTF-16' }, '060e2b34.0101.0101.0d010401.03010500' => { Name => 'IntendedAFD', Type => 'UTF-16' }, '060e2b34.0101.0101.0d010401.03010600' => { Name => 'SlateTitle', Type => 'UTF-16' }, '060e2b34.0101.0101.0d010401.03010700' => { Name => 'NOLACode', Type => 'UTF-16' }, '060e2b34.0101.0101.0d010401.03010800' => { Name => 'Rating', Type => 'UTF-16' }, '060e2b34.0101.0101.0d010401.03010900' => { Name => 'NielsenStreamIdentifier', Type => 'UTF-16' }, # '060e2b34.0101.0101.0d0b0100.00000000' => { Name => 'ProductionFramework', Type => 'Node' }, '060e2b34.0101.0101.0d0b0101.00000000' => { Name => 'IsRecording', Type => 'Boolean' }, '060e2b34.0101.0101.0d0b0102.00000000' => { Name => 'IsLiveProduction', Type => 'Boolean' }, '060e2b34.0101.0101.0d0b0103.00000000' => { Name => 'IsLiveTransmission', Type => 'Boolean' }, '060e2b34.0101.0101.0d0b0104.00000000' => { Name => 'IsDubbed', Type => 'Boolean' }, '060e2b34.0101.0101.0d0b0105.00000000' => { Name => 'IsVoiceover', Type => 'Boolean' }, '060e2b34.0101.0101.0d0b0106.00000000' => { Name => 'HasAudioWatermark', Type => 'Boolean', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0101.0d0b0107.00000000' => { Name => 'AudioWatermarkKind', Type => 'UTF-16', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0101.0d0b0108.00000000' => { Name => 'HasVideoWatermark', Type => 'Boolean' }, '060e2b34.0101.0101.0d0b0109.00000000' => { Name => 'VideoWatermarkKind', Type => 'UTF-16' }, # '060e2b34.0101.0101.0d0b0200.00000000' => { Name => 'Subtitling', Type => 'Node' }, '060e2b34.0101.0101.0d0b0201.00000000' => { Name => 'SubtitlesPresent', Type => 'Boolean' }, # '060e2b34.0101.0101.0d0b0300.00000000' => { Name => 'CaptionTitles', Type => 'Node' }, '060e2b34.0101.0101.0d0b0301.00000000' => { Name => 'CaptionTitles', Type => 'Boolean' }, '060e2b34.0101.0101.0d0b0302.00000000' => { Name => 'CaptionsViaTeletext', Type => 'Boolean' }, '060e2b34.0101.0101.0d0b0303.00000000' => { Name => 'TextlessMaterial', Type => 'Boolean' }, # '060e2b34.0101.0101.0d0b0400.00000000' => { Name => 'AudioParameters', Type => 'Node' }, '060e2b34.0101.0101.0d0b0401.00000000' => { Name => 'AudioReferenceLevel', Format => 'string', Groups => { 2 => 'Audio' } }, # '060e2b34.0101.0101.0d0b0500.00000000' => { Name => 'StorageMedia', Type => 'Node' }, '060e2b34.0101.0101.0d0b0501.00000000' => { Name => 'StorageDeviceKind', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0502.00000000' => { Name => 'StorageMediaKind', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0503.00000000' => { Name => 'StorageMediaID', Type => 'UTF-16' }, # '060e2b34.0101.0101.0d0b0600.00000000' => { Name => 'BroadcastScheduleInformation', Type => 'Node' }, '060e2b34.0101.0101.0d0b0601.00000000' => { Name => 'BroadcastDate', %timestamp }, '060e2b34.0101.0101.0d0b0602.00000000' => { Name => 'BroadcastTime', %timestamp }, '060e2b34.0101.0101.0d0b0603.00000000' => { Name => 'IsRepeat', Type => 'Boolean' }, '060e2b34.0101.0101.0d0b0604.00000000' => { Name => 'FirstTransmissionInfo', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0605.00000000' => { Name => 'TeletextSubtitlesAvailable', Type => 'Boolean' }, '060e2b34.0101.0101.0d0b0606.00000000' => { Name => 'SeasonEpisodeNumber', Format => 'string' }, '060e2b34.0101.0101.0d0b0607.00000000' => { Name => 'SeasonEpisodeTitle', Format => 'string' }, '060e2b34.0101.0101.0d0b0608.00000000' => { Name => 'EPGProgramSynopsis', Type => 'UTF-16' }, # '060e2b34.0101.0101.0d0b0700.00000000' => { Name => 'Classification', Type => 'Node' }, '060e2b34.0101.0101.0d0b0701.00000000' => { Name => 'ContentClassification', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0702.00000000' => { Name => 'DVBParentalRating', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0703.00000000' => { Name => 'ContentMaturityRating', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0704.00000000' => { Name => 'ContentMaturityDescription', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0705.00000000' => { Name => 'ContentMaturityGraphic', Type => 'UTF-16' }, # '060e2b34.0101.0101.0d0b0800.00000000' => { Name => 'Contract', Type => 'Node' }, '060e2b34.0101.0101.0d0b0801.00000000' => { Name => 'ContractEntity', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0802.00000000' => { Name => 'ContractTypeLink', Type => 'UTF-16' }, # '060e2b34.0101.0101.0d0b0900.00000000' => { Name => 'Rights', Type => 'Node' }, '060e2b34.0101.0101.0d0b0901.00000000' => { Name => 'ConsumerRightsToCopy', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0902.00000000' => { Name => 'BroadcasterRightsToCopy', Type => 'UTF-16' }, # '060e2b34.0101.0101.0d0b0a00.00000000' => { Name => 'ProductionKeyPeople', Type => 'Node' }, '060e2b34.0101.0101.0d0b0a01.00000000' => { Name => 'DirectorName', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0a02.00000000' => { Name => 'ProducerName', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0a03.00000000' => { Name => 'FemaleLeadActressName', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0a04.00000000' => { Name => 'MaleLeadActorName', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0a05.00000000' => { Name => 'PresenterName', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0a06.00000000' => { Name => 'MainSponsorName', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0a07.00000000' => { Name => 'VoiceTalentName', Type => 'UTF-16' }, # '060e2b34.0101.0101.0d0b0b00.00000000' => { Name => 'Address', Type => 'Node' }, '060e2b34.0101.0101.0d0b0b01.00000000' => { Name => 'PostboxNumber', Type => 'UTF-16' }, '060e2b34.0101.0101.0d0b0b02.00000000' => { Name => 'PostCodeForPostbox', Type => 'UTF-16' }, # '060e2b34.0101.0101.0e000000.00000000' => { Name => 'PrivateUse', Type => 'Node' }, # '060e2b34.0101.0101.0e010000.00000000' => { Name => 'MISBSystems', Type => 'Node' }, # '060e2b34.0101.0101.0e010100.00000000' => { Name => 'MISBSystemsStreams', Type => 'Node' }, # '060e2b34.0101.0101.0e010200.00000000' => { Name => 'MISBSystemsAttributes', Type => 'Node' }, # '060e2b34.0101.0101.0e010300.00000000' => { Name => 'MISBSystemsComposites', Type => 'Node' }, # '060e2b34.0101.0101.0e010400.00000000' => { Name => 'MISBSystemsIdentifiers', Type => 'Node' }, # '060e2b34.0101.0101.0e020000.00000000' => { Name => 'ASPA', Type => 'Node' }, # '060e2b34.0101.0101.0e020100.00000000' => { Name => 'ASPAStreams', Type => 'Node' }, # '060e2b34.0101.0101.0e020200.00000000' => { Name => 'ASPAAttributes', Type => 'Node' }, # '060e2b34.0101.0101.0e020201.00000000' => { Name => 'ASPARelationalAttributes', Type => 'Node' }, # '060e2b34.0101.0101.0e020202.00000000' => { Name => 'ASPAInformationAttributes', Type => 'Node' }, # '060e2b34.0101.0101.0e020300.00000000' => { Name => 'ASPAComposites', Type => 'Node' }, # '060e2b34.0101.0101.0e020400.00000000' => { Name => 'ASPAIdentifiers', Type => 'Node' }, # '060e2b34.0101.0101.0e030000.00000000' => { Name => 'MISBClassified', Type => 'Node' }, # '060e2b34.0101.0101.0e030100.00000000' => { Name => 'MISBClassifiedStreams', Type => 'Node' }, # '060e2b34.0101.0101.0e030200.00000000' => { Name => 'MISBClassifiedAttributes', Type => 'Node' }, # '060e2b34.0101.0101.0e030300.00000000' => { Name => 'MISBClassifiedComposites', Type => 'Node' }, # '060e2b34.0101.0101.0e030400.00000000' => { Name => 'MISBClassifiedIdentifiers', Type => 'Node' }, # '060e2b34.0101.0101.0f000000.00000000' => { Name => 'EXPERIMENTALMETADATA', Type => 'Node' }, # '060e2b34.0101.0101.43000000.00000000' => { Name => 'Legacy315M', Type => 'Node' }, '060e2b34.0101.0102.01011003.03000000' => { Name => 'ProgramNumber', Format => 'string' }, '060e2b34.0101.0102.01011503.00000000' => { Name => 'DefinitionObjectID', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0102.01012005.00000000' => { Name => 'IEEEDeviceID', Format => 'int8u' }, '060e2b34.0101.0102.01030106.00000000' => { Name => 'ProjectNumber', Format => 'string' }, '060e2b34.0101.0102.01030201.02000000' => { Name => 'EdgeCodeHeader', Type => 'DataValue', Unknown => 1 }, # '060e2b34.0101.0102.01030400.00000000' => { Name => 'NetworkAndStreamIdentifiers', Type => 'Node' }, '060e2b34.0101.0102.01030401.00000000' => { Name => 'ChannelHandle', Format => 'int16s' }, '060e2b34.0101.0102.01040102.00000000' => { Name => 'PhysicalMediaLocation', Format => 'string' }, '060e2b34.0101.0102.01040102.01000000' => { Name => 'MediaLocation', Type => 'UTF-16' }, '060e2b34.0101.0102.01040103.00000000' => { Name => 'TrackNumber', Format => 'int32u' }, # '060e2b34.0101.0102.01040900.00000000' => { Name => 'SynchronizationLocators', Type => 'Node' }, '060e2b34.0101.0102.01040901.00000000' => { Name => 'EdgeCodeStart', Type => 'Position', %duration }, '060e2b34.0101.0102.01050800.00000000' => { Name => 'VersionTitle', Format => 'string' }, # '060e2b34.0101.0102.01070000.00000000' => { Name => 'LocalIdentifiers', Type => 'Node' }, # '060e2b34.0101.0102.01070100.00000000' => { Name => 'PackageIdentifiers', Type => 'Node' }, '060e2b34.0101.0102.01070101.00000000' => { Name => 'TrackID', Format => 'int32u' }, '060e2b34.0101.0102.01070102.00000000' => { Name => 'TrackName', Format => 'string' }, '060e2b34.0101.0102.01070102.01000000' => { Name => 'TrackName', Type => 'UTF-16' }, '060e2b34.0101.0102.01070102.03000000' => { Name => 'DefinitionObjectName', Format => 'string' }, '060e2b34.0101.0102.01070102.03010000' => { Name => 'DefinitionObjectName', Type => 'UTF-16' }, '060e2b34.0101.0102.01070103.00000000' => { Name => 'ContentPackageMetadataLink', Format => 'int8u' }, '060e2b34.0101.0102.01070104.00000000' => { Name => 'DefinedName', Format => 'string' }, '060e2b34.0101.0102.01070104.01000000' => { Name => 'DefinedName', Type => 'UTF-16' }, # '060e2b34.0101.0102.010a0000.00000000' => { Name => 'OrganizationIdentifiers', Type => 'Node' }, # '060e2b34.0101.0102.010a0100.00000000' => { Name => 'ManufacturerIdentifiers', Type => 'Node' }, # '060e2b34.0101.0102.010a0101.00000000' => { Name => 'ManufacturerIdentifiers', Type => 'Node' }, '060e2b34.0101.0102.010a0101.01000000' => { Name => 'DeviceManufacturerName', Format => 'string' }, '060e2b34.0101.0102.010a0101.01010000' => { Name => 'DeviceManufacturerName', Type => 'UTF-16' }, '060e2b34.0101.0102.010a0101.03000000' => { Name => 'ManufacturerID', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0102.010a0102.00000000' => { Name => 'IEEEManufacturerID', Type => 'Hex' }, '060e2b34.0101.0102.010a0103.00000000' => { Name => 'AAFManufacturerID', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0102.02010400.00000000' => { Name => 'SupplyingDepartmentName', Format => 'string' }, '060e2b34.0101.0102.02200303.00000000' => { Name => 'AudienceShare', Format => 'float' }, '060e2b34.0101.0102.02200304.00000000' => { Name => 'AudienceAppreciation', Format => 'float' }, '060e2b34.0101.0102.02300603.01050000' => { Name => 'Salutation', Format => 'string' }, '060e2b34.0101.0102.02300603.01060000' => { Name => 'HonorsAndQualifications', Format => 'string' }, # '060e2b34.0101.0102.03010200.00000000' => { Name => 'DataInterpretationsAndDefinitions', Type => 'Node' }, '060e2b34.0101.0102.03010201.04000000' => { Name => 'ObjectModelVersion', Format => 'int32u' }, '060e2b34.0101.0102.03010201.05000000' => { Name => 'SDKVersion', Type => 'VersionType' }, # '060e2b34.0101.0102.03010202.00000000' => { Name => 'PropertyDefinitions', Type => 'Node' }, '060e2b34.0101.0102.03010202.01000000' => { Name => 'IsOptional', Type => 'Boolean' }, '060e2b34.0101.0102.03010202.02000000' => { Name => 'IsSearchable', Type => 'Boolean' }, # '060e2b34.0101.0102.03010202.03000000' => { Name => 'PropertyDefaults', Type => 'Node' }, '060e2b34.0101.0102.03010202.03010000' => { Name => 'UseDefaultValue', Type => 'Boolean' }, '060e2b34.0101.0102.03010202.03020000' => { Name => 'DefaultDataValue', Type => 'Indirect', Unknown => 1 }, # '060e2b34.0101.0102.03010203.00000000' => { Name => 'TypeDefinition', Type => 'Node' }, '060e2b34.0101.0102.03010203.01000000' => { Name => 'Size', Format => 'int8u' }, '060e2b34.0101.0102.03010203.02000000' => { Name => 'IsSigned', Type => 'Boolean' }, '060e2b34.0101.0102.03010203.03000000' => { Name => 'ElementCount', Format => 'int32u' }, '060e2b34.0101.0102.03010203.04000000' => { Name => 'ElementNameList', Type => 'UTF-16' }, '060e2b34.0101.0102.03010203.05000000' => { Name => 'TypeDefinitionElementValueList', Format => 'int64s' }, '060e2b34.0101.0102.03010203.06000000' => { Name => 'MemberNameList', Type => 'UTF-16' }, '060e2b34.0101.0102.03010203.07000000' => { Name => 'ExtendibleElementNameList', Type => 'UTF-16' }, '060e2b34.0101.0102.03010203.08000000' => { Name => 'TypeDefinitionExtendibleElementValues', Type => 'AUIDArray', Unknown => 1 }, '060e2b34.0101.0102.03010203.0b000000' => { Name => 'TargetSet', Type => 'AUIDArray', Unknown => 1 }, # '060e2b34.0101.0102.03010210.00000000' => { Name => 'KLVInterpretations', Type => 'Node' }, '060e2b34.0101.0102.03010210.01000000' => { Name => 'FillerData', Format => 'undef', Unknown => 1 }, '060e2b34.0101.0102.03010210.02000000' => { Name => 'KLVDataValue', Type => 'Opaque', Unknown => 1 }, '060e2b34.0101.0102.03010210.03000000' => { Name => 'PackageKLVData', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0102.03010210.04000000' => { Name => 'ComponentKLVData', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0102.03020102.09000000' => { Name => 'AssignedCategoryName', Format => 'string' }, '060e2b34.0101.0102.03020102.09010000' => { Name => 'AssignedCategoryName', Type => 'UTF-16' }, '060e2b34.0101.0102.03020102.0a000000' => { Name => 'AssignedCategoryValue', Format => 'string' }, '060e2b34.0101.0102.03020102.0a010000' => { Name => 'AssignedCategoryValue', Type => 'UTF-16' }, '060e2b34.0101.0102.03020102.0b000000' => { Name => 'ShotList', Format => 'string' }, '060e2b34.0101.0102.03020102.0c000000' => { Name => 'PackageUserComments', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0102.03020102.0d000000' => { Name => 'Cue-InWords', Format => 'string' }, '060e2b34.0101.0102.03020102.0e000000' => { Name => 'Cue-OutWords', Format => 'string' }, '060e2b34.0101.0102.03020301.01000000' => { Name => 'ObjectKind', Format => 'string' }, '060e2b34.0101.0102.03020301.01010000' => { Name => 'ObjectKind', Type => 'UTF-16' }, '060e2b34.0101.0102.03020301.02000000' => { Name => 'ObjectDescription', Format => 'string' }, '060e2b34.0101.0102.03020301.02010000' => { Name => 'ObjectDescription', Type => 'UTF-16' }, # '060e2b34.0101.0102.03020400.00000000' => { Name => 'DescriptiveNames', Type => 'Node' }, # '060e2b34.0101.0102.03020401.01000000' => { Name => 'GenericObjectNames', Type => 'Node' }, '060e2b34.0101.0102.03020401.01010000' => { Name => 'ObjectName', Format => 'string' }, '060e2b34.0101.0102.03020401.02010000' => { Name => 'MetadataItemName', Type => 'UTF-16' }, # '060e2b34.0101.0102.03020500.00000000' => { Name => 'EditorialCommentsAndDescriptions', Type => 'Node' }, '060e2b34.0101.0102.03020501.00000000' => { Name => 'ShotCommentKind', Format => 'string' }, '060e2b34.0101.0102.03020502.00000000' => { Name => 'ShotComment', Format => 'string' }, '060e2b34.0101.0102.03030301.01000000' => { Name => 'ComputedObjectKind', Format => 'string' }, '060e2b34.0101.0102.03030301.01010000' => { Name => 'ComputedObjectKind', Type => 'UTF-16' }, '060e2b34.0101.0102.03030301.02000000' => { Name => 'VersionNumberString', Format => 'string' }, '060e2b34.0101.0102.03030301.02010000' => { Name => 'VersionNumberString', Type => 'UTF-16' }, '060e2b34.0101.0102.03030301.03000000' => { Name => 'VersionNumber', Type => 'VersionType' }, # '060e2b34.0101.0102.03030302.00000000' => { Name => 'DerivedSummaryInformation', Type => 'Node' }, '060e2b34.0101.0102.03030302.01000000' => { Name => 'WAVESummary', Type => 'DataValue', Unknown => 1 }, '060e2b34.0101.0102.03030302.02000000' => { Name => 'AIFCSummary', Type => 'DataValue', Unknown => 1 }, '060e2b34.0101.0102.03030302.03000000' => { Name => 'TIFFSummary', Type => 'DataValue', Unknown => 1 }, '060e2b34.0101.0102.04010101.03000000' => { Name => 'ViewportAspectRatio', Format => 'rational64s' }, '060e2b34.0101.0102.04010201.01010200' => { Name => 'CaptureGammaEquation', Type => 'UL', Unknown => 1 }, '060e2b34.0101.0102.04010201.01030100' => { Name => 'ColorimetryCode', Type => 'ColorimetryCode', Unknown => 1 }, '060e2b34.0101.0102.04010201.01100000' => { Name => 'PresentationGammaEquation', Format => 'string' }, '060e2b34.0101.0102.04010201.01100100' => { Name => 'PresentationGammaEquation', Type => 'PresentationGamma', Unknown => 1 }, '060e2b34.0101.0102.04010301.06000000' => { Name => 'FieldDominance', Format => 'int8u' }, '060e2b34.0101.0102.04010302.05000000' => { Name => 'VideoLineMap', Format => 'int32s' }, '060e2b34.0101.0102.04010401.01000000' => { Name => 'AnalogVideoSystemName', Type => 'VideoSignalType', Unknown => 1 }, '060e2b34.0101.0102.04010501.10000000' => { Name => 'VerticalSub-sampling', Format => 'int32u' }, '060e2b34.0101.0102.04010503.01010000' => { Name => 'BitsPerPixel', Format => 'int32u' }, '060e2b34.0101.0102.04010503.05000000' => { Name => 'ColorRangeLevels', Format => 'int32u' }, '060e2b34.0101.0102.04010503.06000000' => { Name => 'PixelLayout', Type => 'RGBALayout', Unknown => 1 }, '060e2b34.0101.0102.04010503.07000000' => { Name => 'AlphaSampleDepth', Format => 'int32u' }, '060e2b34.0101.0102.04010503.08000000' => { Name => 'Palette', Type => 'DataValue', Unknown => 1 }, '060e2b34.0101.0102.04010503.09000000' => { Name => 'PaletteLayout', Type => 'RGBALayout', Unknown => 1 }, '060e2b34.0101.0102.04010503.0a000000' => { Name => 'ComponentDepth', Format => 'int32u' }, '060e2b34.0101.0102.04010601.00000000' => { Name => 'VideoCodingSchemeID', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0102.04010802.03000000' => { Name => 'RoundedCaptureFilmFrameRate', Format => 'int32u' }, '060e2b34.0101.0102.04020301.02000000' => { Name => 'AudioAverageBitrate', Format => 'float', PrintConv => 'ConvertBitrate($val)', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0102.04020301.03000000' => { Name => 'AudioFixedBitrateFlag', Type => 'Boolean', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0102.04020401.00000000' => { Name => 'CodingLawKind', Format => 'string' }, '060e2b34.0101.0102.04020402.00000000' => { Name => 'AudioCodingSchemeID', Type => 'AUID', Unknown => 1, Groups => { 2 => 'Audio' } }, '060e2b34.0101.0102.04020403.01010000' => { Name => 'LayerNumber', Format => 'int8u' }, '060e2b34.0101.0102.04040101.02010000' => { Name => 'TimecodeTimebase', Format => 'rational64s' }, '060e2b34.0101.0102.04040101.02060000' => { Name => 'RoundedTimecodeTimebase', Format => 'int16u' }, # '060e2b34.0101.0102.04070000.00000000' => { Name => 'GeneralEssenceAndDataParameters', Type => 'Node' }, '060e2b34.0101.0102.04070100.00000000' => { Name => 'ComponentDataDefinition', Type => 'WeakReference', %componentDataDef }, '060e2b34.0101.0102.04070200.00000000' => { Name => 'StreamData', Type => 'DataStream', Unknown => 1 }, '060e2b34.0101.0102.04070300.00000000' => { Name => 'TimecodeStreamData', Type => 'DataStream', Unknown => 1 }, '060e2b34.0101.0102.04090101.00000000' => { Name => 'RecordedFormat', Type => 'UTF-16' }, '060e2b34.0101.0102.04100101.01000000' => { Name => 'TapeShellKind', Format => 'string' }, '060e2b34.0101.0102.04100101.01010000' => { Name => 'TapeShellKind', Type => 'UTF-16' }, '060e2b34.0101.0102.04100101.02000000' => { Name => 'TapeFormulation', Format => 'string' }, '060e2b34.0101.0102.04100101.02010000' => { Name => 'TapeFormulation', Type => 'UTF-16' }, '060e2b34.0101.0102.04100101.03000000' => { Name => 'TapeCapacity', Format => 'int32u' }, '060e2b34.0101.0102.04100101.04000000' => { Name => 'TapeManufacturer', Format => 'string' }, '060e2b34.0101.0102.04100101.04010000' => { Name => 'TapeManufacturer', Type => 'UTF-16' }, '060e2b34.0101.0102.04100101.05000000' => { Name => 'TapeStock', Format => 'string' }, '060e2b34.0101.0102.04100101.05010000' => { Name => 'TapeStock', Type => 'UTF-16' }, '060e2b34.0101.0102.04100101.06000000' => { Name => 'TapeBatchNumber', Format => 'string' }, '060e2b34.0101.0102.04100101.06010000' => { Name => 'TapeBatchNumber', Type => 'UTF-16' }, '060e2b34.0101.0102.04100103.01030000' => { Name => 'PerforationsPerFrame', Format => 'int8u' }, '060e2b34.0101.0102.04100103.01030100' => { Name => 'PerforationsPerFrame', Format => 'rational64s' }, '060e2b34.0101.0102.04100103.01040100' => { Name => 'FilmFormatName', Type => 'UTF-16' }, '060e2b34.0101.0102.04100103.01040200' => { Name => 'FilmFormatName', Type => 'FilmFormat', Unknown => 1 }, '060e2b34.0101.0102.04100103.01050100' => { Name => 'FilmStockKind', Type => 'UTF-16' }, '060e2b34.0101.0102.04100103.01060100' => { Name => 'FilmStockManufacturerName', Type => 'UTF-16' }, '060e2b34.0101.0102.04100103.01070000' => { Name => 'FilmBatchNumber', Format => 'string' }, '060e2b34.0101.0102.04100103.01070100' => { Name => 'FilmBatchNumber', Type => 'UTF-16' }, '060e2b34.0101.0102.04100103.01080000' => { Name => 'FilmGauge', Type => 'FilmType', Unknown => 1 }, '060e2b34.0101.0102.04100103.01090000' => { Name => 'EdgeCodeFilmGauge', Type => 'FilmType', Unknown => 1 }, '060e2b34.0101.0102.04100103.02030000' => { Name => 'ExposedAspectRatio', Format => 'rational64s' }, # '060e2b34.0101.0102.04180000.00000000' => { Name => 'MemoryStorageCharacteristics', Type => 'Node' }, # '060e2b34.0101.0102.04180100.00000000' => { Name => 'MemoryStorageAlignmentCharacteristics', Type => 'Node' }, '060e2b34.0101.0102.04180101.00000000' => { Name => 'ImageAlignmentOffset', Format => 'int32u' }, '060e2b34.0101.0102.04180102.00000000' => { Name => 'ImageStartOffset', Format => 'int32u' }, '060e2b34.0101.0102.04180103.00000000' => { Name => 'ImageEndOffset', Format => 'int32u' }, '060e2b34.0101.0102.04180104.00000000' => { Name => 'PaddingBits', Format => 'int16s' }, '060e2b34.0101.0102.04200201.01040000' => { Name => 'FocalLength', Format => 'float', PrintConv => 'sprintf("%.1f mm",$val)' }, '060e2b34.0101.0102.04200201.01050000' => { Name => 'SensorSize', Format => 'string' }, '060e2b34.0101.0102.04200201.01060000' => { Name => 'FNumber', Format => 'float' }, '060e2b34.0101.0102.04200201.01070000' => { Name => 'SensorTypeCode', Format => 'string' }, '060e2b34.0101.0102.04200201.01080000' => { Name => 'FieldOfViewHorizontal', Format => 'float' }, '060e2b34.0101.0102.04200201.01090000' => { Name => 'AnamorphicLensCharacteristic', Format => 'string' }, # '060e2b34.0101.0102.05020103.00000000' => { Name => 'JPEGProcessing', Type => 'Node' }, # '060e2b34.0101.0102.05020103.01000000' => { Name => 'TIFFJPEGProcessing', Type => 'Node' }, '060e2b34.0101.0102.05020103.01010000' => { Name => 'UniformDataFlag', Type => 'Boolean' }, '060e2b34.0101.0102.05020103.01020000' => { Name => 'JPEGTableID', Type => 'JPEGTableIDType', Unknown => 1 }, # '060e2b34.0101.0102.05020103.02000000' => { Name => 'JFIF_JPEGProcessing', Type => 'Node' }, '060e2b34.0101.0102.05200102.00000000' => { Name => 'AlphaTransparency', Format => 'int8u', PrintConv => { 0 => 'Not Inverted', 1 => 'Inverted' }, }, # '060e2b34.0101.0102.05200701.00000000' => { Name => 'ModificationInformation', Type => 'Node' }, '060e2b34.0101.0102.05200701.01000000' => { Name => 'GenerationID', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0102.05200701.02000000' => { Name => 'ApplicationSupplierName', Format => 'string' }, '060e2b34.0101.0102.05200701.02010000' => { Name => 'ApplicationSupplierName', Type => 'UTF-16' }, '060e2b34.0101.0102.05200701.03000000' => { Name => 'ApplicationName', Format => 'string' }, '060e2b34.0101.0102.05200701.03010000' => { Name => 'ApplicationName', Type => 'UTF-16' }, '060e2b34.0101.0102.05200701.04000000' => { Name => 'ApplicationVersionNumber', Type => 'ProductVersion' }, '060e2b34.0101.0102.05200701.05000000' => { Name => 'ApplicationVersionString', Format => 'string' }, '060e2b34.0101.0102.05200701.05010000' => { Name => 'ApplicationVersionString', Type => 'UTF-16' }, '060e2b34.0101.0102.05200701.06000000' => { Name => 'ApplicationPlatform', Format => 'string' }, '060e2b34.0101.0102.05200701.06010000' => { Name => 'ApplicationPlatform', Type => 'UTF-16' }, '060e2b34.0101.0102.05200701.07000000' => { Name => 'ApplicationProductID', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0102.05200701.08000000' => { Name => 'LinkedGenerationID', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0102.05200701.09000000' => { Name => 'ContainerVersion', Type => 'ProductVersion' }, '060e2b34.0101.0102.05200701.0a000000' => { Name => 'ToolkitVersion', Type => 'ProductVersion' }, # '060e2b34.0101.0102.05200900.00000000' => { Name => 'CodeProcessorSettings', Type => 'Node' }, '060e2b34.0101.0102.05200901.00000000' => { Name => 'Plug-InCategoryID', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0102.05200902.00000000' => { Name => 'Plug-InPlatformID', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0102.05200903.00000000' => { Name => 'MinimumSupportedPlatformVersion', Type => 'VersionType' }, '060e2b34.0101.0102.05200904.00000000' => { Name => 'MaximumSupportedPlatformVersion', Type => 'VersionType' }, '060e2b34.0101.0102.05200905.00000000' => { Name => 'Plug-InEngineID', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0102.05200906.00000000' => { Name => 'MinimumSupportedEngineVersion', Type => 'VersionType' }, '060e2b34.0101.0102.05200907.00000000' => { Name => 'MaximumSupportedEngineVersion', Type => 'VersionType' }, '060e2b34.0101.0102.05200908.00000000' => { Name => 'Plug-InAPIID', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0102.05200909.00000000' => { Name => 'MinimumAPIVersion', Type => 'VersionType' }, '060e2b34.0101.0102.0520090a.00000000' => { Name => 'MaximumAPIVersion', Type => 'VersionType' }, '060e2b34.0101.0102.0520090b.00000000' => { Name => 'Software-OnlySupportFlag', Type => 'Boolean' }, '060e2b34.0101.0102.0520090c.00000000' => { Name => 'HardwareAcceleratorFlag', Type => 'Boolean' }, '060e2b34.0101.0102.0520090d.00000000' => { Name => 'Plug-InLocatorSet', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0102.0520090e.00000000' => { Name => 'AuthenticationFlag', Type => 'Boolean' }, '060e2b34.0101.0102.0520090f.00000000' => { Name => 'AssociatedMetadataDefinition', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0102.05300402.00000000' => { Name => 'EventTrackEditRate', Format => 'rational64s' }, '060e2b34.0101.0102.05300403.00000000' => { Name => 'DefaultFadeEditRate', Format => 'rational64s' }, '060e2b34.0101.0102.05300404.00000000' => { Name => 'EditingEventComment', Format => 'string' }, '060e2b34.0101.0102.05300404.01000000' => { Name => 'EditingEventComment', Type => 'UTF-16' }, '060e2b34.0101.0102.05300405.00000000' => { Name => 'EditRate', Format => 'rational64s' }, '060e2b34.0101.0102.05300506.00000000' => { Name => 'OperationDefinitionID', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.05300507.00000000' => { Name => 'Value', Type => 'Indirect', Unknown => 1 }, '060e2b34.0101.0102.05300508.00000000' => { Name => 'EditHint', Type => 'EditHintType', Unknown => 1 }, '060e2b34.0101.0102.05300509.00000000' => { Name => 'OperationDataDefinition', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.0530050a.00000000' => { Name => 'OperationCategory', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0102.0530050b.00000000' => { Name => 'DisplayUnits', Format => 'string' }, '060e2b34.0101.0102.0530050b.01000000' => { Name => 'DisplayUnits', Type => 'UTF-16' }, '060e2b34.0101.0102.0530050c.00000000' => { Name => 'BypassOverride', Format => 'int32u' }, '060e2b34.0101.0102.0530050d.00000000' => { Name => 'TimepointValue', Type => 'Indirect', Unknown => 1 }, '060e2b34.0101.0102.05300601.00000000' => { Name => 'BeginAnchor', Format => 'string' }, '060e2b34.0101.0102.05300601.01000000' => { Name => 'BeginAnchor', Type => 'UTF-16' }, '060e2b34.0101.0102.05300602.00000000' => { Name => 'EndAnchor', Format => 'string' }, '060e2b34.0101.0102.05300602.01000000' => { Name => 'EndAnchor', Type => 'UTF-16' }, # '060e2b34.0101.0102.05401000.00000000' => { Name => 'TransferHistory', Type => 'Node' }, # '060e2b34.0101.0102.05401001.00000000' => { Name => 'ImageTransferHistory', Type => 'Node' }, '060e2b34.0101.0102.05401001.01000000' => { Name => 'FilmToVideoTransferDirection', Type => 'PulldownDirection', Unknown => 1 }, '060e2b34.0101.0102.05401001.02000000' => { Name => 'FilmToVideoTransferKind', Type => 'PulldownKind', Unknown => 1 }, '060e2b34.0101.0102.05401001.03000000' => { Name => 'FilmToVideoTransferPhase', Type => 'PhaseFrameType', Unknown => 1 }, '060e2b34.0101.0102.06010101.01000000' => { Name => 'TeletextSubtitlesFlag', Type => 'Boolean' }, '060e2b34.0101.0102.06010101.02000000' => { Name => 'SubtitleDatafileFlag', Type => 'Boolean' }, '060e2b34.0101.0102.06010101.03000000' => { Name => 'ClosedCaptionSubtitlesFlag', Type => 'Boolean' }, '060e2b34.0101.0102.06010102.01000000' => { Name => 'SampleIndex', Type => 'DataStream', Unknown => 1 }, '060e2b34.0101.0102.06010103.01000000' => { Name => 'SourcePackageID', Type => 'PackageID', Unknown => 1 }, '060e2b34.0101.0102.06010103.02000000' => { Name => 'SourceTrackID', Format => 'int32u' }, '060e2b34.0101.0102.06010103.03000000' => { Name => 'RelativeScope', Format => 'int32u' }, '060e2b34.0101.0102.06010103.04000000' => { Name => 'RelativeTrack', Format => 'int32u' }, # '060e2b34.0101.0102.06010104.01000000' => { Name => 'WeakReferences', Type => 'Node' }, '060e2b34.0101.0102.06010104.01010000' => { Name => 'ObjectClass', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.01020000' => { Name => 'EssenceContainerFormat', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.01030000' => { Name => 'CodecDefinition', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.01040000' => { Name => 'ParameterDefinition', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.01050000' => { Name => 'Interpolation', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.01060000' => { Name => 'ParameterDataType', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.01070000' => { Name => 'CodecEssenceDescriptor', Type => 'WeakReference', Unknown => 1 }, # '060e2b34.0101.0102.06010104.02000000' => { Name => 'StrongReferences', Type => 'Node' }, '060e2b34.0101.0102.06010104.02010000' => { Name => 'ContentStorage', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.02020000' => { Name => 'Dictionary', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.02030000' => { Name => 'EssenceDescription', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.02040000' => { Name => 'Sequence', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.02050000' => { Name => 'TransitionEffect', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.02060000' => { Name => 'EffectRendering', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.02070000' => { Name => 'InputSegment', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.02080000' => { Name => 'StillFrame', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.02090000' => { Name => 'Selected', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.020a0000' => { Name => 'Annotation', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0102.06010104.020b0000' => { Name => 'ManufacturerInformationObject', Type => 'StrongReference', Unknown => 1 }, # '060e2b34.0101.0102.06010104.03000000' => { Name => 'WeakReferencesBatches', Type => 'Node' }, '060e2b34.0101.0102.06010104.03010000' => { Name => 'CodecEssenceKinds', Type => 'WeakReferenceBatch', Unknown => 1 }, '060e2b34.0101.0102.06010104.03020000' => { Name => 'OperationParameters', Type => 'WeakReferenceBatch', Unknown => 1 }, # '060e2b34.0101.0102.06010104.04000000' => { Name => 'WeakReferencesArrays', Type => 'Node' }, '060e2b34.0101.0102.06010104.04010000' => { Name => 'DegradedEffects', Type => 'WeakReferenceArray', Unknown => 1 }, # '060e2b34.0101.0102.06010104.05000000' => { Name => 'StrongReferencesBatches', Type => 'Node' }, '060e2b34.0101.0102.06010104.05010000' => { Name => 'Packages', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0102.06010104.05020000' => { Name => 'EssenceData', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0102.06010104.05030000' => { Name => 'OperationDefinitions', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0102.06010104.05040000' => { Name => 'ParameterDefinitions', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0102.06010104.05050000' => { Name => 'DataDefinitions', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0102.06010104.05060000' => { Name => 'Plug-InDefinitions', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0102.06010104.05070000' => { Name => 'CodecDefinitions', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0102.06010104.05080000' => { Name => 'ContainerDefinitions', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0102.06010104.05090000' => { Name => 'InterpolationDefinitions', Type => 'StrongReferenceBatch', Unknown => 1 }, # '060e2b34.0101.0102.06010104.06000000' => { Name => 'StrongReferencesArrays', Type => 'Node' }, '060e2b34.0101.0102.06010104.06010000' => { Name => 'AvailableRepresentations', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0102.06010104.06020000' => { Name => 'InputSegments', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0102.06010104.06030000' => { Name => 'EssenceLocators', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0102.06010104.06040000' => { Name => 'IdentificationList', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0102.06010104.06050000' => { Name => 'Tracks', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0102.06010104.06060000' => { Name => 'ControlPointList', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0102.06010104.06070000' => { Name => 'PackageTracks', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0102.06010104.06080000' => { Name => 'Alternates', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0102.06010104.06090000' => { Name => 'ComponentsInSequence', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0102.06010104.060a0000' => { Name => 'Parameters', Type => 'StrongReferenceBatch', Unknown => 1 }, # '060e2b34.0101.0102.06010106.00000000' => { Name => 'EssenceToObjectRelationships', Type => 'Node' }, '060e2b34.0101.0102.06010106.01000000' => { Name => 'LinkedPackageID', Type => 'PackageID', Unknown => 1 }, # '060e2b34.0101.0102.06010107.00000000' => { Name => 'ObjectDictionaryToMetadataRelationships', Type => 'Node' }, '060e2b34.0101.0102.06010107.01000000' => { Name => 'ParentClass', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010107.02000000' => { Name => 'Properties', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0102.06010107.03000000' => { Name => 'IsConcrete', Type => 'Boolean' }, '060e2b34.0101.0102.06010107.04000000' => { Name => 'PropertyType', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010107.05000000' => { Name => 'LocalID', Format => 'int16u' }, '060e2b34.0101.0102.06010107.06000000' => { Name => 'IsUniqueIdentifier', Type => 'Boolean' }, '060e2b34.0101.0102.06010107.07000000' => { Name => 'ClassDefinitions', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0102.06010107.08000000' => { Name => 'TypeDefinitions', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0102.06010107.09000000' => { Name => 'TargetClassOfStrongReference', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010107.0a000000' => { Name => 'TargetClassOfWeakReference', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010107.0b000000' => { Name => 'EnumerationUnderlyingIntegerType', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010107.0c000000' => { Name => 'FixedArrayElementType', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010107.0d000000' => { Name => 'VariableArrayElementType', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010107.0e000000' => { Name => 'SetElementType', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010107.0f000000' => { Name => 'StringElementType', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010107.10000000' => { Name => 'StreamElementType', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010107.11000000' => { Name => 'MemberTypes', Type => 'WeakReferenceArray', Unknown => 1 }, '060e2b34.0101.0102.06010107.12000000' => { Name => 'RenamedType', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0102.06010107.13000000' => { Name => 'DictionaryIdentifier', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0102.06010107.14000000' => { Name => 'DictionaryDescription', Format => 'string' }, '060e2b34.0101.0102.06010107.14010000' => { Name => 'DictionaryDescription', Type => 'UTF-16' }, # '060e2b34.0101.0102.06080101.00000000' => { Name => 'ContinuityCounts', Type => 'Node' }, '060e2b34.0101.0102.06080101.01000000' => { Name => 'BlockContinuityCount', Format => 'int16u' }, # '060e2b34.0101.0102.06080102.00000000' => { Name => 'StreamPositionalRelationships', Type => 'Node' }, '060e2b34.0101.0102.06080102.01000000' => { Name => 'StreamPositionIndicator', Format => 'int8u' }, # '060e2b34.0101.0102.06080202.00000000' => { Name => 'StorageOffsets', Type => 'Node' }, '060e2b34.0101.0102.07020103.01030000' => { Name => 'Origin', Format => 'int64s', %duration }, '060e2b34.0101.0102.07020103.01040000' => { Name => 'StartTimeRelativeToReference', Format => 'int64s', %duration }, '060e2b34.0101.0102.07020103.01050000' => { Name => 'StartTimecode', Format => 'int64s', %duration }, '060e2b34.0101.0102.07020103.01060000' => { Name => 'CutPoint', Format => 'int64s', %duration }, '060e2b34.0101.0102.07020103.03030000' => { Name => 'EventStart', Type => 'Position', %duration }, # '060e2b34.0101.0102.07020103.10020000' => { Name => 'EditOffsets', Type => 'Node' }, '060e2b34.0101.0102.07020103.10020100' => { Name => 'ControlPointTime', Format => 'rational64s' }, '060e2b34.0101.0102.07020110.01030000' => { Name => 'CreateDate', %timestamp }, '060e2b34.0101.0102.07020110.02030000' => { Name => 'ModifyDate', %timestamp }, '060e2b34.0101.0102.07020110.02040000' => { Name => 'ContainerLastModifyDate', %timestamp }, '060e2b34.0101.0102.07020110.02050000' => { Name => 'PackageLastModifyDate', %timestamp }, '060e2b34.0101.0102.07020201.01030000' => { Name => 'Duration', Type => 'Length', %duration }, '060e2b34.0101.0102.07020201.01050100' => { Name => 'DefaultFadeDuration', Type => 'Length', %duration }, '060e2b34.0101.0102.07020201.01050200' => { Name => 'Fade-InDuration', Type => 'Length', %duration }, '060e2b34.0101.0102.07020201.01050300' => { Name => 'Fade-OutDuration', Type => 'Length', %duration }, '060e2b34.0101.0102.0d010101.01010100' => { Name => 'TapeFormat', Type => 'TapeFormatType', Unknown => 1 }, '060e2b34.0101.0103.01011001.01000000' => { Name => 'OrganizationID', Type => 'UTF-16' }, '060e2b34.0101.0103.01011504.00000000' => { Name => 'GlobalNumber', Format => 'string' }, '060e2b34.0101.0103.01012007.00000000' => { Name => 'DeviceIDKind', Format => 'string' }, '060e2b34.0101.0103.01012008.00000000' => { Name => 'DeviceKind', Format => 'string' }, '060e2b34.0101.0103.01012008.02000000' => { Name => 'DeviceKindCode', Format => 'string' }, # '060e2b34.0101.0103.01012100.00000000' => { Name => 'PlatformIdentifiers', Type => 'Node' }, '060e2b34.0101.0103.01012101.00000000' => { Name => 'PlatformDesignation', Format => 'string' }, '060e2b34.0101.0103.01012102.00000000' => { Name => 'PlatformModel', Format => 'string' }, '060e2b34.0101.0103.01012103.00000000' => { Name => 'PlatformSerialNumber', Format => 'string' }, '060e2b34.0101.0103.01030107.00000000' => { Name => 'LocalTargetID', Format => 'string' }, # '060e2b34.0101.0103.01030203.00000000' => { Name => 'DiskIdentifiers', Type => 'Node' }, # '060e2b34.0101.0103.01030203.01000000' => { Name => 'MagneticDisks', Type => 'Node' }, '060e2b34.0101.0103.01030203.01010000' => { Name => 'MagneticDiskNumber', Format => 'string' }, # '060e2b34.0101.0103.01030203.02000000' => { Name => 'OpticalDiscs', Type => 'Node' }, '060e2b34.0101.0103.01030203.02010000' => { Name => 'OpticalDiscNumber', Format => 'string' }, '060e2b34.0101.0103.01030402.00000000' => { Name => 'StreamID', Format => 'int8u' }, '060e2b34.0101.0103.01030403.00000000' => { Name => 'TransportStreamID', Format => 'int16u' }, # '060e2b34.0101.0103.01030500.00000000' => { Name => 'OrganizationalProgramIdentifiers', Type => 'Node' }, '060e2b34.0101.0103.01030501.00000000' => { Name => 'OrganizationalProgramNumber', Format => 'string' }, '060e2b34.0101.0103.01030501.01000000' => { Name => 'OrganizationalProgramNumber', Type => 'UTF-16' }, # '060e2b34.0101.0103.01030600.00000000' => { Name => 'MetadataIdentifiers', Type => 'Node' }, '060e2b34.0101.0103.01030601.00000000' => { Name => 'ItemDesignatorID', Type => 'SMPTE336M', Unknown => 1 }, '060e2b34.0101.0103.01040101.01000000' => { Name => 'LocalFilePath', Type => 'UTF-16' }, '060e2b34.0101.0103.01050101.00000000' => { Name => 'TitleKind', Type => 'UTF-16' }, '060e2b34.0101.0103.01050201.00000000' => { Name => 'MainTitle', Type => 'UTF-16' }, '060e2b34.0101.0103.01050301.00000000' => { Name => 'SecondaryTitle', Type => 'UTF-16' }, '060e2b34.0101.0103.01050401.00000000' => { Name => 'SeriesNumber', Type => 'UTF-16' }, '060e2b34.0101.0103.01050501.00000000' => { Name => 'EpisodeNumber', Type => 'UTF-16' }, '060e2b34.0101.0103.01050601.00000000' => { Name => 'SceneNumber', Type => 'UTF-16' }, '060e2b34.0101.0103.01050801.00000000' => { Name => 'VersionTitle', Type => 'UTF-16' }, '060e2b34.0101.0103.01050900.00000000' => { Name => 'MissionID', Format => 'string' }, '060e2b34.0101.0103.01050901.00000000' => { Name => 'MissionID', Type => 'UTF-16' }, # '060e2b34.0101.0103.01100300.00000000' => { Name => 'MusicIndustryIdentifiers', Type => 'Node' }, '060e2b34.0101.0103.01100301.00000000' => { Name => 'RecordingLabelName', Format => 'string' }, '060e2b34.0101.0103.01100301.01000000' => { Name => 'RecordingLabelName', Type => 'UTF-16' }, '060e2b34.0101.0103.01100302.00000000' => { Name => 'CollectionName', Format => 'string' }, '060e2b34.0101.0103.01100302.01000000' => { Name => 'CollectionName', Type => 'UTF-16' }, '060e2b34.0101.0103.01100303.00000000' => { Name => 'OriginCode', Format => 'string' }, '060e2b34.0101.0103.01100304.00000000' => { Name => 'MainCatalogNumber', Format => 'string' }, '060e2b34.0101.0103.01100305.00000000' => { Name => 'CatalogPrefixNumber', Format => 'string' }, '060e2b34.0101.0103.01100306.00000000' => { Name => 'SideNumber', Format => 'string' }, '060e2b34.0101.0103.01100307.00000000' => { Name => 'RecordedTrackNumber', Format => 'string' }, '060e2b34.0101.0103.02020200.00000000' => { Name => 'SeriesinaSeriesGroupCount', Format => 'int16u' }, '060e2b34.0101.0103.02020300.00000000' => { Name => 'ProgrammingGroupKind', Format => 'string' }, # '060e2b34.0101.0103.02030000.00000000' => { Name => 'Purchaser', Type => 'Node' }, '060e2b34.0101.0103.02030100.00000000' => { Name => 'PurchasingOrganizationName', Format => 'string' }, '060e2b34.0101.0103.02030200.00000000' => { Name => 'SalesContractNumber', Format => 'string' }, '060e2b34.0101.0103.02030400.00000000' => { Name => 'PurchasingDepartment', Format => 'string' }, # '060e2b34.0101.0103.02040000.00000000' => { Name => 'ContractDescriptions', Type => 'Node' }, '060e2b34.0101.0103.02040100.00000000' => { Name => 'ContractType', Format => 'string' }, '060e2b34.0101.0103.02040101.00000000' => { Name => 'ContractTypeCode', Format => 'string' }, '060e2b34.0101.0103.02040200.00000000' => { Name => 'ContractClauseDescription', Format => 'string' }, '060e2b34.0101.0103.02040300.00000000' => { Name => 'ContractLineCode', Format => 'string' }, '060e2b34.0101.0103.02040301.00000000' => { Name => 'ContractLineName', Format => 'string' }, '060e2b34.0101.0103.02040400.00000000' => { Name => 'ContractTermsOfBusiness', Format => 'string' }, '060e2b34.0101.0103.02040500.00000000' => { Name => 'ContractInstallmentPercentage', Format => 'float' }, '060e2b34.0101.0103.02040600.00000000' => { Name => 'Jurisdiction', Format => 'string' }, '060e2b34.0101.0103.02050101.01000000' => { Name => 'CopyrightStatus', Type => 'UTF-16' }, '060e2b34.0101.0103.02050102.01000000' => { Name => 'CopyrightOwnerName', Type => 'UTF-16' }, '060e2b34.0101.0103.02050201.01000000' => { Name => 'IntellectualPropertyDescription', Type => 'UTF-16' }, '060e2b34.0101.0103.02050202.01000000' => { Name => 'IntellectualPropertyRights', Type => 'UTF-16' }, '060e2b34.0101.0103.02050301.01000000' => { Name => 'Rightsholder', Type => 'UTF-16' }, '060e2b34.0101.0103.02050302.01000000' => { Name => 'RightsManagementAuthority', Type => 'UTF-16' }, '060e2b34.0101.0103.02050403.00000000' => { Name => 'RightsConditionDescription', Format => 'string' }, '060e2b34.0101.0103.02050403.01000000' => { Name => 'RightsConditionDescription', Type => 'UTF-16' }, '060e2b34.0101.0103.02060101.01000000' => { Name => 'CurrencyName', Format => 'string' }, '060e2b34.0101.0103.02060202.00000000' => { Name => 'TotalPayment', Format => 'string' }, '060e2b34.0101.0103.02060203.00000000' => { Name => 'PayeeAccountName', Format => 'string' }, '060e2b34.0101.0103.02060204.00000000' => { Name => 'PayeeAccountNumber', Format => 'string' }, '060e2b34.0101.0103.02060205.00000000' => { Name => 'PayeeAccountSortCode', Format => 'string' }, '060e2b34.0101.0103.02060302.00000000' => { Name => 'TotalIncome', Format => 'string' }, '060e2b34.0101.0103.02060303.00000000' => { Name => 'PayerAccountName', Format => 'string' }, '060e2b34.0101.0103.02060304.00000000' => { Name => 'PayerAccountNumber', Format => 'string' }, '060e2b34.0101.0103.02060305.00000000' => { Name => 'PayerAccountSortCode', Format => 'string' }, # '060e2b34.0101.0103.02080200.00000000' => { Name => 'Classification', Type => 'Node' }, '060e2b34.0101.0103.02080201.00000000' => { Name => 'SecurityClassification', Format => 'string' }, '060e2b34.0101.0103.02080202.00000000' => { Name => 'SecurityClassificationCaveats', Format => 'string' }, '060e2b34.0101.0103.02080203.00000000' => { Name => 'ClassifiedBy', Format => 'string' }, '060e2b34.0101.0103.02080204.00000000' => { Name => 'ClassificationReason', Format => 'string' }, '060e2b34.0101.0103.02080205.00000000' => { Name => 'DeclassificationDate', Format => 'string', Groups => { 2 => 'Time' } }, '060e2b34.0101.0103.02080206.00000000' => { Name => 'DerivedFrom', Format => 'string' }, '060e2b34.0101.0103.02080207.00000000' => { Name => 'ClassificationComment', Format => 'string' }, '060e2b34.0101.0103.02080208.00000000' => { Name => 'ClassificationAndMarkingSystem', Format => 'string' }, '060e2b34.0101.0103.02100101.01010000' => { Name => 'BroadcastOrganizationName', Type => 'UTF-16' }, '060e2b34.0101.0103.02100101.02010000' => { Name => 'BroadcastServiceName', Type => 'UTF-16' }, '060e2b34.0101.0103.02100101.03020000' => { Name => 'BroadcastMediumCode', Format => 'string' }, '060e2b34.0101.0103.02100101.04010000' => { Name => 'BroadcastRegion', Type => 'UTF-16' }, '060e2b34.0101.0103.02300101.01000000' => { Name => 'NatureOfPersonality', Type => 'UTF-16' }, '060e2b34.0101.0103.02300102.01010000' => { Name => 'ContributionStatus', Type => 'UTF-16' }, '060e2b34.0101.0103.02300103.01010000' => { Name => 'SupportOrAdministrationStatus', Type => 'UTF-16' }, '060e2b34.0101.0103.02300201.01000000' => { Name => 'OrganizationKind', Type => 'UTF-16' }, '060e2b34.0101.0103.02300202.01010000' => { Name => 'ProductionOrganizationRole', Type => 'UTF-16' }, '060e2b34.0101.0103.02300203.01010000' => { Name => 'SupportOrganizationRole', Type => 'UTF-16' }, '060e2b34.0101.0103.02300501.01000000' => { Name => 'JobFunctionName', Type => 'UTF-16' }, '060e2b34.0101.0103.02300501.02000000' => { Name => 'JobFunctionCode', Format => 'string' }, '060e2b34.0101.0103.02300502.01000000' => { Name => 'RoleName', Type => 'UTF-16' }, '060e2b34.0101.0103.02300503.00000000' => { Name => 'JobTitle', Format => 'string' }, '060e2b34.0101.0103.02300503.01000000' => { Name => 'JobTitle', Type => 'UTF-16' }, '060e2b34.0101.0103.02300601.01000000' => { Name => 'ContactKind', Type => 'UTF-16' }, '060e2b34.0101.0103.02300602.01000000' => { Name => 'ContactDepartmentName', Type => 'UTF-16' }, '060e2b34.0101.0103.02300603.01010100' => { Name => 'FamilyName', Type => 'UTF-16' }, '060e2b34.0101.0103.02300603.01020100' => { Name => 'FirstGivenName', Type => 'UTF-16' }, '060e2b34.0101.0103.02300603.01030100' => { Name => 'SecondGivenName', Type => 'UTF-16' }, '060e2b34.0101.0103.02300603.01040100' => { Name => 'ThirdGivenName', Type => 'UTF-16' }, '060e2b34.0101.0103.02300603.01070000' => { Name => 'PersonDescription', Format => 'string' }, '060e2b34.0101.0103.02300603.01070100' => { Name => 'PersonDescription', Type => 'UTF-16' }, '060e2b34.0101.0103.02300603.02010100' => { Name => 'MainName', Type => 'UTF-16' }, '060e2b34.0101.0103.02300603.02020100' => { Name => 'SupplementaryName', Type => 'UTF-16' }, '060e2b34.0101.0103.02300603.03010100' => { Name => 'OrganizationMainName', Type => 'UTF-16' }, '060e2b34.0101.0103.02300603.03020100' => { Name => 'SupplementaryOrganizationName', Type => 'UTF-16' }, '060e2b34.0101.0103.03010101.02000000' => { Name => 'RegionCode', Format => 'string' }, # '060e2b34.0101.0103.03010101.10000000' => { Name => 'CountryAndRegionNames', Type => 'Node' }, '060e2b34.0101.0103.03010101.10010000' => { Name => 'CountryName', Format => 'string' }, '060e2b34.0101.0103.03010101.10010100' => { Name => 'CountryName', Type => 'UTF-16' }, '060e2b34.0101.0103.03010101.10020000' => { Name => 'RegionName', Format => 'string' }, '060e2b34.0101.0103.03010101.10020100' => { Name => 'RegionName', Type => 'UTF-16' }, # '060e2b34.0101.0103.03010102.10000000' => { Name => 'LanguageNames', Type => 'Node' }, '060e2b34.0101.0103.03010102.10010000' => { Name => 'LanguageName', Format => 'string' }, '060e2b34.0101.0103.03010102.10010100' => { Name => 'LanguageName', Type => 'UTF-16' }, '060e2b34.0101.0103.03010210.05000000' => { Name => 'TerminatingFillerData', Format => 'int8u' }, '060e2b34.0101.0103.03010303.03000000' => { Name => 'TimingBiasCorrection', Format => 'float' }, '060e2b34.0101.0103.03010303.04000000' => { Name => 'TimingBiasCorrectionDescription', Format => 'string' }, '060e2b34.0101.0103.03020101.03010000' => { Name => 'Genre', Type => 'UTF-16' }, '060e2b34.0101.0103.03020101.04010000' => { Name => 'TargetAudience', Type => 'UTF-16' }, '060e2b34.0101.0103.03020101.10000000' => { Name => 'ProgramMaterialClassificationCode', Format => 'string' }, '060e2b34.0101.0103.03020102.03010000' => { Name => 'Theme', Type => 'UTF-16' }, '060e2b34.0101.0103.03020102.04010000' => { Name => 'SubjectName', Format => 'string' }, '060e2b34.0101.0103.03020102.04020000' => { Name => 'SubjectName', Type => 'UTF-16' }, '060e2b34.0101.0103.03020102.05010000' => { Name => 'Keywords', Type => 'UTF-16' }, '060e2b34.0101.0103.03020102.0f000000' => { Name => 'KeyFrameSampleCount', Format => 'int32u' }, '060e2b34.0101.0103.03020106.01010000' => { Name => 'Abstract', Type => 'UTF-16' }, '060e2b34.0101.0103.03020106.02010000' => { Name => 'Purpose', Type => 'UTF-16' }, '060e2b34.0101.0103.03020106.03010000' => { Name => 'Description', Type => 'UTF-16' }, '060e2b34.0101.0103.03020106.04010000' => { Name => 'ColorDescriptor', Type => 'UTF-16' }, '060e2b34.0101.0103.03020106.05010000' => { Name => 'FormatDescriptor', Type => 'UTF-16' }, '060e2b34.0101.0103.03020106.06000000' => { Name => 'IntentDescriptor', Format => 'string' }, '060e2b34.0101.0103.03020106.06010000' => { Name => 'IntentDescriptor', Type => 'UTF-16' }, '060e2b34.0101.0103.03020106.07000000' => { Name => 'TextualDescriptionKind', Format => 'string' }, '060e2b34.0101.0103.03020106.07010000' => { Name => 'TextualDescriptionKind', Type => 'UTF-16' }, '060e2b34.0101.0103.03020201.03000000' => { Name => 'FestivalName', Format => 'string' }, '060e2b34.0101.0103.03020301.02020000' => { Name => 'ObjectDescriptionCode', Format => 'string' }, # '060e2b34.0101.0103.03020302.00000000' => { Name => 'GeneralComments', Type => 'Node' }, '060e2b34.0101.0103.03020302.01000000' => { Name => 'DescriptionKind', Format => 'string' }, '060e2b34.0101.0103.03020302.01010000' => { Name => 'DescriptionKind', Type => 'UTF-16' }, '060e2b34.0101.0103.03020302.02000000' => { Name => 'DescriptiveComment', Format => 'string' }, '060e2b34.0101.0103.03020302.02010000' => { Name => 'DescriptiveComment', Type => 'UTF-16' }, # '060e2b34.0101.0103.03020401.00000000' => { Name => 'ObjectNames', Type => 'Node' }, # '060e2b34.0101.0103.03020600.00000000' => { Name => 'Human-AssignedContextDescriptions', Type => 'Node' }, '060e2b34.0101.0103.03020601.00000000' => { Name => 'ContextDescription', Format => 'string' }, '060e2b34.0101.0103.03030102.06010000' => { Name => 'ComputedKeywords', Type => 'UTF-16' }, '060e2b34.0101.0103.03030301.04000000' => { Name => 'ObjectIdentificationConfidence', Format => 'int16u' }, '060e2b34.0101.0103.03030301.05000000' => { Name => 'ObjectHorizontalAverageDimension', Format => 'int32u' }, '060e2b34.0101.0103.03030301.06000000' => { Name => 'ObjectVerticalAverageDimension', Format => 'int32u' }, '060e2b34.0101.0103.03030301.07000000' => { Name => 'ObjectAreaDimension', Format => 'int32u' }, '060e2b34.0101.0103.04010101.04000000' => { Name => 'HorizontalActionSafePercentage', Format => 'float' }, '060e2b34.0101.0103.04010101.05000000' => { Name => 'VerticalActionSafePercentage', Format => 'float' }, '060e2b34.0101.0103.04010101.06000000' => { Name => 'HorizontalGraphicsSafePercentage', Format => 'float' }, '060e2b34.0101.0103.04010101.07000000' => { Name => 'VerticalGraphicsSafePercentage', Format => 'float' }, '060e2b34.0101.0103.04010101.08000000' => { Name => 'PerceivedDisplayFormatName', Format => 'string' }, '060e2b34.0101.0103.04010101.08010000' => { Name => 'PerceivedDisplayFormatCode', Format => 'string' }, '060e2b34.0101.0103.04010201.01050000' => { Name => 'VideoColorKind', Format => 'string' }, '060e2b34.0101.0103.04010301.07000000' => { Name => 'PictureDisplayRate', Format => 'int16u' }, '060e2b34.0101.0103.04010501.11000000' => { Name => 'VideoAverageBitrate', Format => 'float', PrintConv => 'ConvertBitrate($val)' }, '060e2b34.0101.0103.04010501.12000000' => { Name => 'VideoFixedBitrate', Type => 'Boolean' }, # '060e2b34.0101.0103.04010b00.00000000' => { Name => 'VideoFileFormats', Type => 'Node' }, '060e2b34.0101.0103.04010b01.00000000' => { Name => 'DigitalVideoFileFormat', Format => 'string' }, '060e2b34.0101.0103.04020401.01000000' => { Name => 'CodingLawName', Format => 'string' }, '060e2b34.0101.0103.04020402.01000000' => { Name => 'AudioCodingSchemeCode', Format => 'string', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0103.04020402.02000000' => { Name => 'AudioCodingSchemeName', Format => 'string', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0103.04030301.00000000' => { Name => 'DigitalEncodingBitrate', Format => 'int32u', PrintConv => 'ConvertBitrate($val)' }, '060e2b34.0101.0103.04030302.00000000' => { Name => 'DataEssenceCodingID', Type => 'AUID', Unknown => 1 }, # '060e2b34.0101.0103.040f0000.00000000' => { Name => 'StorageCharacteristics', Type => 'Node' }, '060e2b34.0101.0103.040f0100.00000000' => { Name => 'StorageKind', Format => 'string' }, '060e2b34.0101.0103.040f0101.00000000' => { Name => 'StorageKind', Type => 'UTF-16' }, '060e2b34.0101.0103.040f0102.00000000' => { Name => 'StorageKindCode', Format => 'string' }, # '060e2b34.0101.0103.04100101.10000000' => { Name => 'TapeMediumFundamentalParameters', Type => 'Node' }, '060e2b34.0101.0103.04100101.10010000' => { Name => 'TapePartitionCapacity', Format => 'int64u' }, # '060e2b34.0101.0103.04100102.01000000' => { Name => 'DiscMediumFundamentalParameters', Type => 'Node' }, '060e2b34.0101.0103.04100102.02000000' => { Name => 'DiscPartitionCapacity', Format => 'int64u' }, '060e2b34.0101.0103.04200201.01040100' => { Name => 'FocalLength', Format => 'int32u', ValueConv => '$val/10' }, '060e2b34.0101.0103.04200201.01080100' => { Name => 'FieldOfViewHorizontal', Format => 'int16u', ValueConv => '$val/10' }, '060e2b34.0101.0103.04200201.010a0000' => { Name => 'FieldOfViewVertical', Format => 'int16u', ValueConv => '$val/10' }, # '060e2b34.0101.0103.04300000.00000000' => { Name => 'SystemCharacteristics', Type => 'Node' }, '060e2b34.0101.0103.04300100.00000000' => { Name => 'SystemNameOrNumber', Format => 'string' }, '060e2b34.0101.0103.05010104.00000000' => { Name => 'LogoFlag', Type => 'Boolean' }, '060e2b34.0101.0103.05010106.00000000' => { Name => 'GraphicKind', Format => 'string' }, '060e2b34.0101.0103.05010107.00000000' => { Name => 'GraphicUsageKind', Format => 'string' }, '060e2b34.0101.0103.05010401.00000000' => { Name => 'SignatureTuneFlag', Type => 'Boolean' }, '060e2b34.0101.0103.05010402.00000000' => { Name => 'BackgroundMusicFlag', Type => 'Boolean' }, # '060e2b34.0101.0103.06030000.00000000' => { Name => 'RelatedProductionContent', Type => 'Node' }, # '060e2b34.0101.0103.06030500.00000000' => { Name => 'RelatedTextualContent', Type => 'Node' }, '060e2b34.0101.0103.06030501.00000000' => { Name => 'ProductionScriptReference', Format => 'string' }, '060e2b34.0101.0103.06030501.01000000' => { Name => 'ProductionScriptReference', Type => 'UTF-16' }, '060e2b34.0101.0103.06030502.00000000' => { Name => 'TranscriptReference', Format => 'string' }, '060e2b34.0101.0103.06030502.01000000' => { Name => 'TranscriptReference', Type => 'UTF-16' }, '060e2b34.0101.0103.07010103.00000000' => { Name => 'HorizontalDatum', Format => 'string' }, '060e2b34.0101.0103.07010104.00000000' => { Name => 'VerticalDatum', Format => 'string' }, '060e2b34.0101.0103.07010201.02040200' => { Name => 'DeviceLatitude', Format => 'double', %geoLat }, '060e2b34.0101.0103.07010201.02060200' => { Name => 'DeviceLongitude', Format => 'double', %geoLon }, '060e2b34.0101.0103.07010201.03020200' => { Name => 'FrameCenterLatitude', Format => 'double', %geoLat }, '060e2b34.0101.0103.07010201.03040200' => { Name => 'FrameCenterLongitude', Format => 'double', %geoLon }, '060e2b34.0101.0103.07010201.03070000' => { Name => 'CornerLatitudePoint1', Format => 'string', %geoLat, ValueConv => \&ConvLatLon }, '060e2b34.0101.0103.07010201.03070100' => { Name => 'CornerLatitudePoint1', Format => 'double', %geoLat }, '060e2b34.0101.0103.07010201.03080000' => { Name => 'CornerLatitudePoint2', Format => 'string', %geoLat }, '060e2b34.0101.0103.07010201.03080100' => { Name => 'CornerLatitudePoint2', Format => 'double', %geoLat }, '060e2b34.0101.0103.07010201.03090000' => { Name => 'CornerLatitudePoint3', Format => 'string', %geoLat }, '060e2b34.0101.0103.07010201.03090100' => { Name => 'CornerLatitudePoint3', Format => 'double', %geoLat }, '060e2b34.0101.0103.07010201.030a0000' => { Name => 'CornerLatitudePoint4', Format => 'string' }, '060e2b34.0101.0103.07010201.030a0100' => { Name => 'CornerLatitudePoint4', Format => 'double', %geoLat }, '060e2b34.0101.0103.07010201.030b0000' => { Name => 'CornerLongitudePoint1', Format => 'string' }, '060e2b34.0101.0103.07010201.030b0100' => { Name => 'CornerLongitudePoint1', Format => 'double', %geoLon }, '060e2b34.0101.0103.07010201.030c0000' => { Name => 'CornerLongitudePoint2', Format => 'string' }, '060e2b34.0101.0103.07010201.030c0100' => { Name => 'CornerLongitudePoint2', Format => 'double', %geoLon }, '060e2b34.0101.0103.07010201.030d0000' => { Name => 'CornerLongitudePoint3', Format => 'string' }, '060e2b34.0101.0103.07010201.030d0100' => { Name => 'CornerLongitudePoint3', Format => 'double', %geoLon }, '060e2b34.0101.0103.07010201.030e0000' => { Name => 'CornerLongitudePoint4', Format => 'string' }, '060e2b34.0101.0103.07010201.030e0100' => { Name => 'CornerLongitudePoint4', Format => 'double', %geoLon }, '060e2b34.0101.0103.07010801.02000000' => { Name => 'SubjectDistance', Format => 'float' }, '060e2b34.0101.0103.07012001.01010100' => { Name => 'PlaceKeyword', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.02010100' => { Name => 'ObjectCountryCode', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.02060000' => { Name => 'ObjectCountryCodeMethod', Format => 'string' }, '060e2b34.0101.0103.07012001.02070000' => { Name => 'CountryCodeMethod', Format => 'string' }, '060e2b34.0101.0103.07012001.02080000' => { Name => 'Non-USClassifyingCountryCode', Format => 'string' }, '060e2b34.0101.0103.07012001.02090000' => { Name => 'ReleasableCountryCode', Format => 'string' }, '060e2b34.0101.0103.07012001.03010100' => { Name => 'ObjectRegionName', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.03020100' => { Name => 'ShootingRegionName', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.03030100' => { Name => 'SettingRegionName', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.03040100' => { Name => 'CopyrightLicenseRegionName', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.03050100' => { Name => 'IntellectualPropertyLicenseRegionName', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04010101' => { Name => 'RoomNumber', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04010201' => { Name => 'StreetNumber', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04010301' => { Name => 'StreetName', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04010401' => { Name => 'PostalTown', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04010501' => { Name => 'CityName', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04010601' => { Name => 'StateOrProvinceOrCountyName', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04010701' => { Name => 'PostalCode', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04010801' => { Name => 'CountryName', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04020101' => { Name => 'SettingRoomNumber', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04020201' => { Name => 'SettingStreetNumberOrBuildingName', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04020301' => { Name => 'SettingStreetName', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04020401' => { Name => 'SettingTownName', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04020501' => { Name => 'SettingCityName', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04020601' => { Name => 'SettingStateOrProvinceOrCountyName', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04020701' => { Name => 'SettingPostalCode', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.04020801' => { Name => 'SettingCountryName', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.10030101' => { Name => 'TelephoneNumber', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.10030201' => { Name => 'FaxNumber', Type => 'UTF-16' }, '060e2b34.0101.0103.07012001.10030301' => { Name => 'E-mailAddress', Type => 'UTF-16' }, '060e2b34.0101.0103.07012002.01010000' => { Name => 'SettingDescription', Type => 'UTF-16' }, '060e2b34.0101.0103.07020101.01050000' => { Name => 'POSIXMicroseconds', Format => 'int64u' }, # '060e2b34.0101.0103.07020103.10030000' => { Name => 'EventOffsets', Type => 'Node' }, '060e2b34.0101.0103.07020103.10030100' => { Name => 'EventElapsedTimeToStart', Format => 'string' }, '060e2b34.0101.0103.07020103.10030200' => { Name => 'EventElapsedTimeToEnd', Format => 'string' }, '060e2b34.0101.0104.01011002.00000000' => { Name => 'OrganizationIDKind', Format => 'string' }, '060e2b34.0101.0104.01011002.01000000' => { Name => 'OrganizationIDKind', Type => 'UTF-16' }, # '060e2b34.0101.0104.01020200.00000000' => { Name => 'RegistryLocators', Type => 'Node' }, '060e2b34.0101.0104.01020201.00000000' => { Name => 'SMPTEUL', Type => 'UL', Unknown => 1 }, # '060e2b34.0101.0104.01020210.00000000' => { Name => 'RegistryLocatorGroups', Type => 'Node' }, # '060e2b34.0101.0104.01020210.01000000' => { Name => 'RegistryLocatorOrderedGroup', Type => 'Node' }, '060e2b34.0101.0104.01020210.01010000' => { Name => 'EssenceContainerArray', Type => 'Array of UL', Unknown => 1 }, '060e2b34.0101.0104.01030404.00000000' => { Name => 'EssenceStreamID', Format => 'int32u' }, '060e2b34.0101.0104.01030405.00000000' => { Name => 'IndexStreamID', Format => 'int32u' }, '060e2b34.0101.0104.01050a00.00000000' => { Name => 'WorkingTitle', Format => 'string' }, '060e2b34.0101.0104.01050a01.00000000' => { Name => 'WorkingTitle', Type => 'UTF-16' }, '060e2b34.0101.0104.01050b00.00000000' => { Name => 'OriginalTitle', Format => 'string' }, '060e2b34.0101.0104.01050b01.00000000' => { Name => 'OriginalTitle', Type => 'UTF-16' }, '060e2b34.0101.0104.01050c00.00000000' => { Name => 'ClipNumber', Format => 'string' }, '060e2b34.0101.0104.01050c01.00000000' => { Name => 'ClipNumber', Type => 'UTF-16' }, '060e2b34.0101.0104.01070105.00000000' => { Name => 'DescriptiveMetadataTrackIDs', Format => 'int32u' }, # '060e2b34.0101.0104.01080000.00000000' => { Name => 'GenericIdentifiers', Type => 'Node' }, '060e2b34.0101.0104.01080100.00000000' => { Name => 'IdentifierKind', Format => 'string' }, '060e2b34.0101.0104.01080200.00000000' => { Name => 'IdentifierValue', Format => 'int8u' }, # '060e2b34.0101.0104.010a0200.00000000' => { Name => 'GeneralOrganizationIdentifiers', Type => 'Node' }, '060e2b34.0101.0104.010a0201.00000000' => { Name => 'OrganizationCode', Format => 'string' }, '060e2b34.0101.0104.010a0201.01000000' => { Name => 'OrganizationCode', Type => 'UTF-16' }, '060e2b34.0101.0104.02010500.00000000' => { Name => 'SupplierIdentificationKind', Format => 'string' }, '060e2b34.0101.0104.02010600.00000000' => { Name => 'SupplierIdentificationValue', Format => 'string' }, '060e2b34.0101.0104.02010700.00000000' => { Name => 'SupplierAccountNumber', Format => 'string' }, '060e2b34.0101.0104.02010800.00000000' => { Name => 'SupplierAccountName', Format => 'string' }, '060e2b34.0101.0104.02010801.00000000' => { Name => 'SupplierAccountName', Type => 'UTF-16' }, '060e2b34.0101.0104.02020400.00000000' => { Name => 'EpisodeStartNumber', Format => 'int16u' }, '060e2b34.0101.0104.02020500.00000000' => { Name => 'EpisodeEndNumber', Format => 'int16u' }, '060e2b34.0101.0104.02030500.00000000' => { Name => 'PurchaserIdentificationKind', Format => 'string' }, '060e2b34.0101.0104.02030600.00000000' => { Name => 'PurchaserIdentificationValue', Format => 'string' }, '060e2b34.0101.0104.02030700.00000000' => { Name => 'PurchaserAccountNumber', Format => 'string' }, '060e2b34.0101.0104.02030800.00000000' => { Name => 'PurchaserAccountName', Format => 'string' }, '060e2b34.0101.0104.02030801.00000000' => { Name => 'PurchaserAccountName', Type => 'UTF-16' }, '060e2b34.0101.0104.02040102.00000000' => { Name => 'ContractType', Type => 'UTF-16' }, '060e2b34.0101.0104.02040201.00000000' => { Name => 'ContractClauseDescription', Type => 'UTF-16' }, '060e2b34.0101.0104.02040302.00000000' => { Name => 'ContractLineName', Type => 'UTF-16' }, '060e2b34.0101.0104.02040401.00000000' => { Name => 'ContractTermsOfBusiness', Type => 'UTF-16' }, '060e2b34.0101.0104.02040601.00000000' => { Name => 'Jurisdiction', Type => 'UTF-16' }, '060e2b34.0101.0104.02060102.00000000' => { Name => 'TotalCurrencyAmount', Format => 'double' }, '060e2b34.0101.0104.02060103.00000000' => { Name => 'InstallmentNumber', Format => 'int16u' }, # '060e2b34.0101.0104.020a0000.00000000' => { Name => 'IdentifiersAndLocatorsAdministrationAuthorities', Type => 'Node' }, '060e2b34.0101.0104.020a0100.00000000' => { Name => 'IdentifierIssuingAuthority', Format => 'string' }, # '060e2b34.0101.0104.02100200.00000000' => { Name => 'Publication', Type => 'Node' }, # '060e2b34.0101.0104.02100201.00000000' => { Name => 'GeneralPublication', Type => 'Node' }, '060e2b34.0101.0104.02100201.01000000' => { Name => 'PublishingOrganizationName', Format => 'string' }, '060e2b34.0101.0104.02100201.01010000' => { Name => 'PublishingOrganizationName', Type => 'UTF-16' }, '060e2b34.0101.0104.02100201.02000000' => { Name => 'PublishingServiceName', Format => 'string' }, '060e2b34.0101.0104.02100201.02010000' => { Name => 'PublishingServiceName', Type => 'UTF-16' }, '060e2b34.0101.0104.02100201.03000000' => { Name => 'PublishingMediumName', Format => 'string' }, '060e2b34.0101.0104.02100201.03010000' => { Name => 'PublishingMediumName', Type => 'UTF-16' }, '060e2b34.0101.0104.02100201.04000000' => { Name => 'PublishingRegionName', Format => 'string' }, '060e2b34.0101.0104.02100201.04010000' => { Name => 'PublishingRegionName', Type => 'UTF-16' }, '060e2b34.0101.0104.02300603.01050100' => { Name => 'Salutation', Type => 'UTF-16' }, '060e2b34.0101.0104.02300603.01060100' => { Name => 'HonorsAndQualifications', Type => 'UTF-16' }, '060e2b34.0101.0104.02300603.01080000' => { Name => 'OtherGivenNames', Format => 'string' }, '060e2b34.0101.0104.02300603.01080100' => { Name => 'OtherGivenNames', Type => 'UTF-16' }, '060e2b34.0101.0104.02300603.01090000' => { Name => 'AlternateName', Format => 'string' }, '060e2b34.0101.0104.02300603.01090100' => { Name => 'AlternateName', Type => 'UTF-16' }, # '060e2b34.0101.0104.03010102.02000000' => { Name => 'TextLanguageCodes', Type => 'Node' }, '060e2b34.0101.0104.03010102.02010000' => { Name => 'ISO639TextLanguageCode', Format => 'string', LanguageCode => 1 }, '060e2b34.0101.0104.03010102.02020000' => { Name => 'ISO639CaptionsLanguageCode', Format => 'string' }, # '060e2b34.0101.0104.03010102.03000000' => { Name => 'SpokenLanguageCodes', Type => 'Node' }, '060e2b34.0101.0104.03010102.03010000' => { Name => 'PrimarySpokenLanguageCode', Format => 'string' }, '060e2b34.0101.0104.03010102.03020000' => { Name => 'SecondarySpokenLanguageCode', Format => 'string' }, '060e2b34.0101.0104.03010102.03030000' => { Name => 'PrimaryOriginalLanguageCode', Format => 'string' }, '060e2b34.0101.0104.03010102.03040000' => { Name => 'SecondaryOriginalLanguageCode', Format => 'string' }, '060e2b34.0101.0104.03010201.06000000' => { Name => 'MajorVersion', Format => 'int16u' }, '060e2b34.0101.0104.03010201.07000000' => { Name => 'MinorVersion', Format => 'int16u' }, '060e2b34.0101.0104.03010201.08000000' => { Name => 'SectorSize', Format => 'int32u' }, '060e2b34.0101.0104.03010203.09000000' => { Name => 'ElementLength', Format => 'int32u' }, '060e2b34.0101.0104.03020102.02010000' => { Name => 'ThesaurusName', Type => 'UTF-16' }, '060e2b34.0101.0104.03020102.0d010000' => { Name => 'Cue-InWords', Type => 'UTF-16' }, '060e2b34.0101.0104.03020102.0e010000' => { Name => 'Cue-OutWords', Type => 'UTF-16' }, '060e2b34.0101.0104.03020102.10000000' => { Name => 'KeypointKind', Format => 'string' }, '060e2b34.0101.0104.03020102.10010000' => { Name => 'KeypointKind', Type => 'UTF-16' }, '060e2b34.0101.0104.03020102.11000000' => { Name => 'KeypointValue', Format => 'string' }, '060e2b34.0101.0104.03020102.11010000' => { Name => 'KeypointValue', Type => 'UTF-16' }, '060e2b34.0101.0104.03020201.03010000' => { Name => 'FestivalName', Type => 'UTF-16' }, '060e2b34.0101.0104.03020201.04000000' => { Name => 'AwardName', Format => 'string' }, '060e2b34.0101.0104.03020201.04010000' => { Name => 'AwardName', Type => 'UTF-16' }, '060e2b34.0101.0104.03020201.05000000' => { Name => 'AwardCategory', Format => 'string' }, '060e2b34.0101.0104.03020201.05010000' => { Name => 'AwardCategory', Type => 'UTF-16' }, '060e2b34.0101.0104.03020503.00000000' => { Name => 'SlateInformation', Type => 'UTF-16' }, '060e2b34.0101.0104.04020301.04000000' => { Name => 'LockedIndicator', Type => 'Boolean' }, '060e2b34.0101.0104.04020303.04000000' => { Name => 'BitsPerAudioSample', Format => 'int32u', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0104.04030101.00000000' => { Name => 'CaptionKind', Format => 'string' }, '060e2b34.0101.0104.04030101.01000000' => { Name => 'CaptionKind', Type => 'UTF-16' }, # '060e2b34.0101.0104.04040400.00000000' => { Name => 'IndexingMetadataCodingCharacteristics', Type => 'Node' }, # '060e2b34.0101.0104.04040401.00000000' => { Name => 'IntraEditUnitIndexing', Type => 'Node' }, '060e2b34.0101.0104.04040401.01000000' => { Name => 'SliceCount', Format => 'int8u' }, '060e2b34.0101.0104.04040401.02000000' => { Name => 'SliceNumber', Format => 'int8u' }, '060e2b34.0101.0104.04040401.03000000' => { Name => 'ElementDelta', Format => 'int32u' }, '060e2b34.0101.0104.04040401.04000000' => { Name => 'PositionTableIndexing', Format => 'int8s' }, '060e2b34.0101.0104.04040401.05000000' => { Name => 'SliceOffsetList', Type => 'UInt32Array', Unknown => 1 }, '060e2b34.0101.0104.04040401.08000000' => { Name => 'PosTableArray', Unknown => 1 }, # '060e2b34.0101.0104.04040402.00000000' => { Name => 'InterEditUnitIndexing', Type => 'Node' }, '060e2b34.0101.0104.04040402.01000000' => { Name => 'StreamOffset', Format => 'int64u' }, '060e2b34.0101.0104.04040402.02000000' => { Name => 'EditUnitFlags', Format => 'int8u' }, '060e2b34.0101.0104.04040402.03000000' => { Name => 'TemporalOffset', Format => 'int8s' }, '060e2b34.0101.0104.04040402.04000000' => { Name => 'AnchorOffset', Format => 'int8s' }, # '060e2b34.0101.0104.04060200.00000000' => { Name => 'GeneralEssenceContainerCharacteristics', Type => 'Node' }, '060e2b34.0101.0104.04060201.00000000' => { Name => 'EditUnitLength', Format => 'int32u' }, # '060e2b34.0101.0104.04060800.00000000' => { Name => 'GeneralMetadataCodingCharacteristics', Type => 'Node' }, # '060e2b34.0101.0104.04060900.00000000' => { Name => 'GeneralMetadataContainerCharacteristics', Type => 'Node' }, '060e2b34.0101.0104.04060901.00000000' => { Name => 'HeaderByteCount', Format => 'int64u' }, '060e2b34.0101.0104.04060902.00000000' => { Name => 'IndexByteCount', Format => 'int64u' }, # '060e2b34.0101.0104.04061000.00000000' => { Name => 'GeneralDataCodingCharacteristics', Type => 'Node' }, '060e2b34.0101.0104.04061001.00000000' => { Name => 'PackLength', Format => 'int32u' }, # '060e2b34.0101.0104.04200102.00000000' => { Name => 'ImagerCharacteristics', Type => 'Node' }, '060e2b34.0101.0104.05010101.01000000' => { Name => 'IntegrationIndication', Type => 'UTF-16' }, '060e2b34.0101.0104.05010102.01000000' => { Name => 'EventIndication', Type => 'UTF-16' }, '060e2b34.0101.0104.05010107.01000000' => { Name => 'GraphicUsageKind', Type => 'UTF-16' }, '060e2b34.0101.0104.06010104.01080000' => { Name => 'PrimaryPackage', Type => 'WeakReference', Unknown => 1 }, # '060e2b34.0101.0104.06010104.02400000' => { Name => 'StrongReferencingToDescriptiveMetadataSets', Type => 'Node' }, '060e2b34.0101.0104.06010104.03030000' => { Name => 'DescriptiveMetadataSets', Type => 'WeakReferenceBatch', Unknown => 1 }, '060e2b34.0101.0104.06010104.04020000' => { Name => 'DescriptiveMetadataSetReferences', Type => 'WeakReferenceArray', Unknown => 1 }, # '060e2b34.0101.0104.06010104.05400000' => { Name => 'StrongReferencesToDescriptiveMetadataBatches', Type => 'Node' }, '060e2b34.0101.0104.06010104.060b0000' => { Name => 'FileDescriptors', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0104.06080102.01010000' => { Name => 'StreamPositionIndicator', Format => 'int16u' }, '060e2b34.0101.0104.06080102.01020000' => { Name => 'StreamPositionIndicator', Format => 'int32u' }, '060e2b34.0101.0104.06080102.01030000' => { Name => 'StreamPositionIndicator', Format => 'int64u' }, '060e2b34.0101.0104.06080202.01000000' => { Name => 'OffsetToMetadata', Format => 'int32s' }, '060e2b34.0101.0104.06080202.01010000' => { Name => 'OffsetToMetadata', Format => 'int64s' }, '060e2b34.0101.0104.06080202.02000000' => { Name => 'OffsetToIndexTable', Format => 'int32s' }, '060e2b34.0101.0104.06080202.02010000' => { Name => 'OffsetToIndexTable', Format => 'int64s' }, # '060e2b34.0101.0104.06090000.00000000' => { Name => 'DataRelationships', Type => 'Node' }, # '060e2b34.0101.0104.06090200.00000000' => { Name => 'LocalDataRelationships', Type => 'Node' }, # '060e2b34.0101.0104.06090201.00000000' => { Name => 'DataOffsets', Type => 'Node' }, '060e2b34.0101.0104.06090201.01000000' => { Name => 'ByteOffset', Format => 'int64u' }, '060e2b34.0101.0104.06090201.02000000' => { Name => 'ReversePlay', Format => 'int64u' }, # '060e2b34.0101.0104.06101000.00000000' => { Name => 'RelativeNumericalSequences', Type => 'Node' }, '060e2b34.0101.0104.06101001.00000000' => { Name => 'FirstNumberInSequence', Format => 'int32u' }, '060e2b34.0101.0104.06101001.01000000' => { Name => 'FirstNumberInSequence', Format => 'int64u' }, '060e2b34.0101.0104.06101002.00000000' => { Name => 'PreviousNumberInSequence', Format => 'int32u' }, '060e2b34.0101.0104.06101002.01000000' => { Name => 'PreviousNumberInSequence', Format => 'int64u' }, '060e2b34.0101.0104.06101003.00000000' => { Name => 'CurrentNumberInSequence', Format => 'int32u' }, '060e2b34.0101.0104.06101003.01000000' => { Name => 'CurrentNumberInSequence', Format => 'int64u' }, '060e2b34.0101.0104.06101004.00000000' => { Name => 'NextNumberInSequence', Format => 'int32u' }, '060e2b34.0101.0104.06101004.01000000' => { Name => 'NextNumberInSequence', Format => 'int64u' }, '060e2b34.0101.0104.06101005.00000000' => { Name => 'LastNumberInSequence', Format => 'int32u' }, '060e2b34.0101.0104.06101005.01000000' => { Name => 'LastNumberInSequence', Format => 'int64u' }, # '060e2b34.0101.0104.07012001.10000000' => { Name => 'ElectronicAddressVarieties', Type => 'Node' }, '060e2b34.0101.0104.07012001.10030400' => { Name => 'CentralTelephoneNumber', Format => 'string' }, '060e2b34.0101.0104.07012001.10030500' => { Name => 'MobileTelephoneNumber', Format => 'string' }, '060e2b34.0101.0104.07012001.10030600' => { Name => 'URL', Format => 'string' }, '060e2b34.0101.0104.07012002.02000000' => { Name => 'LocationDescription', Format => 'string' }, '060e2b34.0101.0104.07012002.02010000' => { Name => 'LocationDescription', Type => 'UTF-16' }, '060e2b34.0101.0104.07012002.03000000' => { Name => 'LocationKind', Format => 'string' }, '060e2b34.0101.0104.07012002.03010000' => { Name => 'LocationKind', Type => 'UTF-16' }, '060e2b34.0101.0104.07020102.07010100' => { Name => 'UTCEventStartDateTime', %timestamp }, '060e2b34.0101.0104.07020102.07020100' => { Name => 'LocalEventStartDateTime', %timestamp }, '060e2b34.0101.0104.07020102.09010100' => { Name => 'UTCEventEndDateTime', %timestamp }, '060e2b34.0101.0104.07020102.09020100' => { Name => 'LocalEventEndDateTime', %timestamp }, '060e2b34.0101.0104.07020103.01070000' => { Name => 'KeyTimePoint', Format => 'int64u' }, '060e2b34.0101.0104.07020108.01010000' => { Name => 'TimePeriodName', Type => 'UTF-16' }, '060e2b34.0101.0104.07020108.02000000' => { Name => 'SettingDateTime', %timestamp }, # '060e2b34.0101.0104.07020120.00000000' => { Name => 'AdministrativeDateTime', Type => 'Node' }, '060e2b34.0101.0104.07020120.01000000' => { Name => 'ContractDateTime', %timestamp }, '060e2b34.0101.0104.07020120.02000000' => { Name => 'RightsStartDateTime', %timestamp }, '060e2b34.0101.0104.07020120.03000000' => { Name => 'RightsStopDateTime', %timestamp }, '060e2b34.0101.0104.07020120.04000000' => { Name => 'PaymentDueDateTime', %timestamp }, # '060e2b34.0101.0105.01010500.00000000' => { Name => 'UMIDPicture', Type => 'Node' }, # '060e2b34.0101.0105.01010600.00000000' => { Name => 'UMIDMultiPicture', Type => 'Node' }, # '060e2b34.0101.0105.01010800.00000000' => { Name => 'UMIDSound', Type => 'Node' }, # '060e2b34.0101.0105.01010900.00000000' => { Name => 'UMIDMultiSound', Type => 'Node' }, # '060e2b34.0101.0105.01010b00.00000000' => { Name => 'UMIDSingleData', Type => 'Node' }, # '060e2b34.0101.0105.01010c00.00000000' => { Name => 'UMIDMultiData', Type => 'Node' }, # '060e2b34.0101.0105.01010d00.00000000' => { Name => 'UMIDMixed', Type => 'Node' }, # '060e2b34.0101.0105.01010f00.00000000' => { Name => 'UMIDGeneral', Type => 'Node' }, '060e2b34.0101.0105.01011508.00000000' => { Name => 'ClipID', Type => 'UMID' }, '060e2b34.0101.0105.01012008.01000000' => { Name => 'DeviceKind', Type => 'UTF-16' }, '060e2b34.0101.0105.0101200c.00000000' => { Name => 'DeviceAssetNumber', Format => 'string' }, '060e2b34.0101.0105.01020202.00000000' => { Name => 'IdentificationUL', Type => 'UL', Unknown => 1 }, '060e2b34.0101.0105.01020203.00000000' => { Name => 'OperationalPatternUL', Type => 'UL', Unknown => 1 }, # '060e2b34.0101.0105.01020210.02000000' => { Name => 'RegistryLocatorUnorderedGroups', Type => 'Node' }, '060e2b34.0101.0105.01020210.02010000' => { Name => 'EssenceContainers', Type => 'BatchOfUL', Unknown => 1 }, '060e2b34.0101.0105.01020210.02020000' => { Name => 'DescriptiveMetadataSchemes', Type => 'BatchOfUL', Unknown => 1 }, '060e2b34.0101.0105.01030108.00000000' => { Name => 'ProjectName', Format => 'string' }, '060e2b34.0101.0105.01030108.01000000' => { Name => 'ProjectName', Type => 'UTF-16' }, '060e2b34.0101.0105.01030602.00000000' => { Name => 'LocalTagValue', Format => 'int16u' }, '060e2b34.0101.0105.01030603.00000000' => { Name => 'LocalTagUniqueID', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0105.01050d00.00000000' => { Name => 'BrandMainTitle', Format => 'string' }, '060e2b34.0101.0105.01050d01.00000000' => { Name => 'BrandMainTitle', Type => 'UTF-16' }, '060e2b34.0101.0105.01050e00.00000000' => { Name => 'BrandOriginalTitle', Format => 'string' }, '060e2b34.0101.0105.01050e01.00000000' => { Name => 'BrandOriginalTitle', Type => 'UTF-16' }, '060e2b34.0101.0105.01050f00.00000000' => { Name => 'FrameworkTitle', Format => 'string' }, '060e2b34.0101.0105.01050f01.00000000' => { Name => 'FrameworkTitle', Type => 'UTF-16' }, '060e2b34.0101.0105.01070106.00000000' => { Name => 'SourceTrackIDs', Format => 'int32u' }, '060e2b34.0101.0105.01070107.00000000' => { Name => 'ShotTrackIDs', Format => 'int32u' }, '060e2b34.0101.0105.02020301.00000000' => { Name => 'ProgrammingGroupKind', Type => 'UTF-16' }, '060e2b34.0101.0105.02020600.00000000' => { Name => 'ProgrammingGroupTitle', Format => 'string' }, '060e2b34.0101.0105.02020601.00000000' => { Name => 'ProgrammingGroupTitle', Type => 'UTF-16' }, '060e2b34.0101.0105.020a0101.00000000' => { Name => 'IdentifierIssuingAuthority', Type => 'UTF-16' }, '060e2b34.0101.0105.02300603.010a0000' => { Name => 'LinkingName', Format => 'string' }, '060e2b34.0101.0105.02300603.010a0100' => { Name => 'LinkingName', Type => 'UTF-16' }, '060e2b34.0101.0105.02300603.010b0000' => { Name => 'NameSuffix', Format => 'string' }, '060e2b34.0101.0105.02300603.010b0100' => { Name => 'NameSuffix', Type => 'UTF-16' }, '060e2b34.0101.0105.02300603.010c0000' => { Name => 'FormerFamilyName', Format => 'string' }, '060e2b34.0101.0105.02300603.010c0100' => { Name => 'FormerFamilyName', Type => 'UTF-16' }, '060e2b34.0101.0105.02300603.010d0000' => { Name => 'Nationality', Format => 'string' }, '060e2b34.0101.0105.02300603.010d0100' => { Name => 'Nationality', Type => 'UTF-16' }, '060e2b34.0101.0105.02300603.010e0000' => { Name => 'Citizenship', Format => 'string' }, '060e2b34.0101.0105.02300603.010e0100' => { Name => 'Citizenship', Type => 'UTF-16' }, '060e2b34.0101.0105.03010102.02030000' => { Name => 'FrameworkTextLanguageCode', Format => 'string', LanguageCode => 1 }, '060e2b34.0101.0105.03010201.09000000' => { Name => 'KAGSize', Format => 'int32u' }, '060e2b34.0101.0105.03010201.0a000000' => { Name => 'ReversedByteOrder', Type => 'Boolean' }, # '060e2b34.0101.0105.0301020a.00000000' => { Name => 'NameValueConstructInterpretations', Type => 'Node' }, '060e2b34.0101.0105.0301020a.01000000' => { Name => 'ItemName', Format => 'string' }, '060e2b34.0101.0105.0301020a.01010000' => { Name => 'ItemName', Type => 'UTF-16' }, '060e2b34.0101.0105.0301020a.02000000' => { Name => 'ItemValue', Format => 'string' }, '060e2b34.0101.0105.0301020a.02010000' => { Name => 'ItemValue', Type => 'UTF-16' }, # '060e2b34.0101.0105.03010220.00000000' => { Name => 'XMLConstructsAndInterpretations', Type => 'Node' }, '060e2b34.0101.0105.03010220.01000000' => { Name => 'XMLDocumentText', Type => 'Indirect', Unknown => 1 }, '060e2b34.0101.0105.03010220.01010000' => { Name => 'XMLDocumentText', Format => 'string' }, '060e2b34.0101.0105.03010220.01020000' => { Name => 'XMLDocumentText', Type => 'UTF-16' }, '060e2b34.0101.0105.03010220.01030000' => { Name => 'XMLDocumentText', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0105.03020102.15000000' => { Name => 'FrameworkThesaurusName', Format => 'string' }, '060e2b34.0101.0105.03020102.15010000' => { Name => 'FrameworkThesaurusName', Type => 'UTF-16' }, '060e2b34.0101.0105.03020106.08000000' => { Name => 'GroupSynopsis', Format => 'string' }, '060e2b34.0101.0105.03020106.08010000' => { Name => 'GroupSynopsis', Type => 'UTF-16' }, '060e2b34.0101.0105.03020106.09000000' => { Name => 'AnnotationSynopsis', Format => 'string' }, '060e2b34.0101.0105.03020106.09010000' => { Name => 'AnnotationSynopsis', Type => 'UTF-16' }, '060e2b34.0101.0105.03020106.0a000000' => { Name => 'AnnotationDescription', Format => 'string' }, '060e2b34.0101.0105.03020106.0a010000' => { Name => 'AnnotationDescription', Type => 'UTF-16' }, '060e2b34.0101.0105.03020106.0b000000' => { Name => 'ScriptingKind', Format => 'string' }, '060e2b34.0101.0105.03020106.0b010000' => { Name => 'ScriptingKind', Type => 'UTF-16' }, '060e2b34.0101.0105.03020106.0c000000' => { Name => 'ScriptingText', Format => 'string' }, '060e2b34.0101.0105.03020106.0c010000' => { Name => 'ScriptingText', Type => 'UTF-16' }, '060e2b34.0101.0105.03020106.0d000000' => { Name => 'ShotDescription', Format => 'string' }, '060e2b34.0101.0105.03020106.0d010000' => { Name => 'ShotDescription', Type => 'UTF-16' }, '060e2b34.0101.0105.03020106.0e000000' => { Name => 'AnnotationKind', Format => 'string' }, '060e2b34.0101.0105.03020106.0e010000' => { Name => 'AnnotationKind', Type => 'UTF-16' }, '060e2b34.0101.0105.03020106.0f000000' => { Name => 'RelatedMaterialDescription', Format => 'string' }, '060e2b34.0101.0105.03020106.0f010000' => { Name => 'RelatedMaterialDescription', Type => 'UTF-16' }, '060e2b34.0101.0105.03020504.00000000' => { Name => 'ClipKind', Type => 'UTF-16' }, # '060e2b34.0101.0105.03030310.00000000' => { Name => 'DeviceCommentsAndDescriptions', Type => 'Node' }, '060e2b34.0101.0105.03030310.01000000' => { Name => 'DeviceUsageDescription', Format => 'string' }, '060e2b34.0101.0105.03030310.01010000' => { Name => 'DeviceUsageDescription', Type => 'UTF-16' }, '060e2b34.0101.0105.04010302.07000000' => { Name => 'DisplayF2Offset', Format => 'int32s' }, '060e2b34.0101.0105.04010302.08000000' => { Name => 'StoredF2Offset', Format => 'int32s' }, '060e2b34.0101.0105.04010302.09000000' => { Name => 'ActiveFormatDescriptor', Format => 'int8u' }, '060e2b34.0101.0105.04010302.0a000000' => { Name => 'LineNumber', Format => 'int32u' }, # '060e2b34.0101.0105.04010404.00000000' => { Name => 'VideoScanningCharacteristics', Type => 'Node' }, '060e2b34.0101.0105.04010404.01000000' => { Name => 'ScanningDirection', Format => 'int8u' }, '060e2b34.0101.0105.04010503.0b000000' => { Name => 'ComponentMaximumRef', Format => 'int32u' }, '060e2b34.0101.0105.04010503.0c000000' => { Name => 'ComponentMinimumRef', Format => 'int32u' }, '060e2b34.0101.0105.04010503.0d000000' => { Name => 'AlphaMaximumRef', Format => 'int32u' }, '060e2b34.0101.0105.04010503.0e000000' => { Name => 'AlphaMinimumRef', Format => 'int32u' }, # '060e2b34.0101.0105.04010504.00000000' => { Name => 'DigitalVideoAndImageSignalTypeIdentifiers', Type => 'Node' }, '060e2b34.0101.0105.04010504.01000000' => { Name => 'VideoPayloadIdentifier', Format => 'int8u' }, '060e2b34.0101.0105.04010504.02000000' => { Name => 'VideoPayloadIdentifier2002', Format => 'int8u' }, '060e2b34.0101.0105.04010602.01020000' => { Name => 'SingleSequenceFlag', Type => 'Boolean' }, '060e2b34.0101.0105.04010602.01030000' => { Name => 'ConstantBPictureFlag', Type => 'Boolean' }, '060e2b34.0101.0105.04010602.01040000' => { Name => 'CodedContentScanningKind', Type => 'int8u', PrintConv => { 0 => 'Unknown', 1 => 'Progressive', 2 => 'Interlaced', 3 => 'Mixed' }, }, '060e2b34.0101.0105.04010602.01050000' => { Name => 'LowDelayIndicator', Type => 'Boolean' }, '060e2b34.0101.0105.04010602.01060000' => { Name => 'ClosedGOPIndicator', Type => 'Boolean' }, '060e2b34.0101.0105.04010602.01070000' => { Name => 'IdenticalGOPIndicator', Type => 'Boolean' }, '060e2b34.0101.0105.04010602.01080000' => { Name => 'MaximumGOPSize', Format => 'int16u' }, '060e2b34.0101.0105.04010602.01090000' => { Name => 'MaximumBPictureCount', Format => 'int16u' }, '060e2b34.0101.0105.04010602.010a0000' => { Name => 'ProfileAndLevel', Format => 'int8u' }, '060e2b34.0101.0105.04010602.010b0000' => { Name => 'Bitrate', Format => 'int32u', PrintConv => 'ConvertBitrate($val)' }, '060e2b34.0101.0105.04020101.04000000' => { Name => 'ChannelCount', Format => 'int32u', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0105.04020301.01010000' => { Name => 'AudioSampleRate', Format => 'rational64s', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0105.04020301.05000000' => { Name => 'PeakEnvelope', Format => 'int8u', Groups => { 2 => 'Audio' } }, '060e2b34.0101.0105.04020301.0e000000' => { Name => 'PeakEnvelopeData', Type => 'Stream', Unknown => 1, Groups => { 2 => 'Audio' } }, '060e2b34.0101.0105.04020302.01000000' => { Name => 'BlockAlign', Format => 'int16u' }, '060e2b34.0101.0105.04020302.02000000' => { Name => 'SequenceOffset', Format => 'int8u' }, '060e2b34.0101.0105.04020302.03000000' => { Name => 'BlockStartOffset', Format => 'int16u' }, '060e2b34.0101.0105.04020302.05000000' => { Name => 'FileSecurityReport', Format => 'int32u' }, '060e2b34.0101.0105.04020302.06000000' => { Name => 'FileSecurityWave', Format => 'int32u' }, '060e2b34.0101.0105.04020303.05000000' => { Name => 'AverageBytesPerSecond', Format => 'int32u', Groups => { 2 => 'Audio' } }, # '060e2b34.0101.0105.04020500.00000000' => { Name => 'DigitalAudioProcessingParameters', Type => 'Node' }, # '060e2b34.0101.0105.04020501.00000000' => { Name => 'AES-3ProcessingParameters', Type => 'Node' }, '060e2b34.0101.0105.04020501.01000000' => { Name => 'AuxiliaryBitsMode', Format => 'int8u' }, '060e2b34.0101.0105.04020501.02000000' => { Name => 'ChannelStatusMode', Format => 'undef', RawConv => 'length($val) > 8 ? join(" ",unpack("x8C*",$val)) : undef', # convert just the first value for now PrintConv => [{ 0 => 'No Channel Status Data', 1 => 'AES3 Minimum', 2 => 'AES3 Standard', 3 => 'Fixed 24 Bytes in FixedChannelStatusData', 4 => 'Stream of Data in MXF Header Metadata', 5 => 'Stream of Data Multiplexed within MXF Body', }], }, '060e2b34.0101.0105.04020501.03000000' => { Name => 'FixedChannelStatusData', Type => 'Array of bytes', Unknown => 1 }, '060e2b34.0101.0105.04020501.04000000' => { Name => 'UserDataMode', Type => 'EnumeratedArray', Unknown => 1 }, '060e2b34.0101.0105.04020501.05000000' => { Name => 'FixedUserData', Type => 'Array of bytes', Unknown => 1 }, '060e2b34.0101.0105.04020501.06000000' => { Name => 'Emphasis', Format => 'int8u' }, # '060e2b34.0101.0105.04020502.00000000' => { Name => 'BWFProcessingParameters', Type => 'Node' }, '060e2b34.0101.0105.04020502.01000000' => { Name => 'BextCodingHistory', Format => 'string' }, '060e2b34.0101.0105.04020502.01010000' => { Name => 'BextCodingHistory', Type => 'UTF-16' }, '060e2b34.0101.0105.04020502.02000000' => { Name => 'QltyBasicData', Format => 'string' }, '060e2b34.0101.0105.04020502.02010000' => { Name => 'QltyBasicData', Type => 'UTF-16' }, '060e2b34.0101.0105.04020502.03000000' => { Name => 'QltyStartOfModulation', Format => 'string' }, '060e2b34.0101.0105.04020502.03010000' => { Name => 'QltyStartOfModulation', Type => 'UTF-16' }, '060e2b34.0101.0105.04020502.04000000' => { Name => 'QltyQualityEvent', Format => 'string' }, '060e2b34.0101.0105.04020502.04010000' => { Name => 'QltyQualityEvent', Type => 'UTF-16' }, '060e2b34.0101.0105.04020502.05000000' => { Name => 'QltyEndOfModulation', Format => 'string' }, '060e2b34.0101.0105.04020502.05010000' => { Name => 'QltyEndOfModulation', Type => 'UTF-16' }, '060e2b34.0101.0105.04020502.06000000' => { Name => 'QltyQualityParameter', Format => 'string' }, '060e2b34.0101.0105.04020502.06010000' => { Name => 'QltyQualityParameter', Type => 'UTF-16' }, '060e2b34.0101.0105.04020502.07000000' => { Name => 'QltyOperatorComment', Format => 'string' }, '060e2b34.0101.0105.04020502.07010000' => { Name => 'QltyOperatorComment', Type => 'UTF-16' }, '060e2b34.0101.0105.04020502.08000000' => { Name => 'QltyCueSheet', Format => 'string' }, '060e2b34.0101.0105.04020502.08010000' => { Name => 'QltyCueSheet', Type => 'UTF-16' }, # '060e2b34.0101.0105.04020700.00000000' => { Name => 'GeneralProcessingParameters', Type => 'Node' }, '060e2b34.0101.0105.04020701.00000000' => { Name => 'DialNorm', Format => 'int8s' }, '060e2b34.0101.0105.04030302.00000000' => { Name => 'DataEssenceCoding', Type => 'Label' }, # '060e2b34.0101.0105.04040102.00000000' => { Name => 'GeneralDateTimeCodingCharacteristics', Type => 'Node' }, '060e2b34.0101.0105.04040102.01000000' => { Name => 'DateTimeRate', Format => 'rational64s', Groups => { 2 => 'Time' } }, '060e2b34.0101.0105.04040102.02000000' => { Name => 'DateTimeDropFrameFlag', Type => 'Boolean', Groups => { 2 => 'Time' } }, '060e2b34.0101.0105.04040102.03000000' => { Name => 'DateTimeEmbeddedFlag', Type => 'Boolean', Groups => { 2 => 'Time' } }, '060e2b34.0101.0105.04040102.04000000' => { Name => 'DateTimeKind', Type => 'UL', Unknown => 1, Groups => { 2 => 'Time' } }, '060e2b34.0101.0105.04040401.06000000' => { Name => 'DeltaEntryArray', Type => 'ArrayOfDeltaEntry', Unknown => 1 }, '060e2b34.0101.0105.04040401.07000000' => { Name => 'PositionTableCount', Format => 'int8u' }, '060e2b34.0101.0105.04040401.08000000' => { Name => 'PositionTable', Type => 'ArrayOfRational', Unknown => 1 }, '060e2b34.0101.0105.04040402.05000000' => { Name => 'IndexEntryArray', Type => 'ArrayOfIndexEntry', Unknown => 1 }, '060e2b34.0101.0105.04050113.00000000' => { Name => 'SignalStandard', Format => 'int8u' }, '060e2b34.0101.0105.04070101.00000000' => { Name => 'DataDefinition', Type => 'UL', Unknown => 1 }, # '060e2b34.0101.0105.04090000.00000000' => { Name => 'FormatCharacteristics', Type => 'Node' }, '060e2b34.0101.0105.04090100.00000000' => { Name => 'RecordedFormat', Format => 'string' }, '060e2b34.0101.0105.05010302.01000000' => { Name => 'GenerationCopyNumber', Format => 'int16u' }, '060e2b34.0101.0105.05010303.01000000' => { Name => 'GenerationCloneNumber', Format => 'int16u' }, # '060e2b34.0101.0105.05010400.00000000' => { Name => 'MusicFlags', Type => 'Node' }, '060e2b34.0101.0105.05010403.00000000' => { Name => 'ThemeMusicFlag', Type => 'Boolean' }, '060e2b34.0101.0105.05010404.00000000' => { Name => 'InsertMusicFlag', Type => 'Boolean' }, '060e2b34.0101.0105.05300406.00000000' => { Name => 'IndexEditRate', Format => 'rational64s' }, '060e2b34.0101.0105.06010103.05000000' => { Name => 'LinkedTrackID', Format => 'int32u' }, '060e2b34.0101.0105.06010104.01020100' => { Name => 'EssenceContainerFormat', Type => 'UL', Unknown => 1 }, '060e2b34.0101.0105.06010104.01030100' => { Name => 'CodecDefinition', Type => 'UL', Unknown => 1 }, '060e2b34.0101.0105.06010104.020c0000' => { Name => 'DescriptiveMetadataFramework', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0105.06010104.02400500' => { Name => 'GroupSet', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0105.06010104.02401c00' => { Name => 'BankDetailsSet', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0105.06010104.02401d00' => { Name => 'ImageFormatSet', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0105.06010104.02402000' => { Name => 'ProcessingSet', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0105.06010104.02402100' => { Name => 'ProjectSet', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0105.06010104.02402200' => { Name => 'ContactsListSet', Type => 'StrongReference', Unknown => 1 }, # '060e2b34.0101.0105.06010104.02402300' => { Name => 'CueWordsSets', Type => 'Node' }, '060e2b34.0101.0105.06010104.02402301' => { Name => 'AnnotationCueWordsSet', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0105.06010104.02402302' => { Name => 'ShotCueWordsSet', Type => 'StrongReference', Unknown => 1 }, # '060e2b34.0101.0105.06010104.03400000' => { Name => 'WeakReferencingToDescriptiveMetadataSets', Type => 'Node' }, # '060e2b34.0101.0105.06010104.03401300' => { Name => 'ParticipantRoleSets', Type => 'Node' }, '060e2b34.0101.0105.06010104.03401301' => { Name => 'AwardParticipantSets', Type => 'GlobalReferenceBatch (Participant)', Unknown => 1 }, '060e2b34.0101.0105.06010104.03401302' => { Name => 'ContractParticipantSets', Type => 'GlobalReferenceBatch (Participant)', Unknown => 1 }, '060e2b34.0101.0105.06010104.03401400' => { Name => 'PersonSets', Type => 'GlobalReferenceBatch (Participant)', Unknown => 1 }, # '060e2b34.0101.0105.06010104.03401500' => { Name => 'OrganizationSets', Type => 'Node' }, '060e2b34.0101.0105.06010104.03401501' => { Name => 'ParticipantOrganizationSets', Type => 'GlobalReferenceBatch (Organisation)', Unknown => 1 }, '060e2b34.0101.0105.06010104.03401502' => { Name => 'PersonOrganizationSets', Type => 'GlobalReferenceBatch (Organisation)', Unknown => 1 }, '060e2b34.0101.0105.06010104.03401600' => { Name => 'LocationSets', Type => 'GlobalReferenceBatch (Location)', Unknown => 1 }, '060e2b34.0101.0105.06010104.05400400' => { Name => 'TitlesSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05400500' => { Name => 'GroupSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05400600' => { Name => 'IdentificationSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05400700' => { Name => 'EpisodicItemSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05400800' => { Name => 'BrandingSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05400900' => { Name => 'EventSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05400a00' => { Name => 'PublicationSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05400b00' => { Name => 'AwardSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05400c00' => { Name => 'CaptionDescriptionSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05400d00' => { Name => 'AnnotationSets', Type => 'StrongReferenceBatch', Unknown => 1 }, # '060e2b34.0101.0105.06010104.05400e00' => { Name => 'SettingPeriodSets', Type => 'Node' }, '060e2b34.0101.0105.06010104.05400e01' => { Name => 'ProductionSettingPeriodSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05400e02' => { Name => 'SceneSettingPeriodSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05400f00' => { Name => 'ScriptingSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05401000' => { Name => 'ClassificationSets', Type => 'StrongReferenceBatch', Unknown => 1 }, # '060e2b34.0101.0105.06010104.05401100' => { Name => 'ShotSets', Type => 'Node' }, '060e2b34.0101.0105.06010104.05401101' => { Name => 'SceneShotSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05401102' => { Name => 'ClipShotSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05401200' => { Name => 'KeyPointSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05401300' => { Name => 'ShotParticipantRoleSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05401400' => { Name => 'ShotPersonSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05401500' => { Name => 'OrganizationSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05401600' => { Name => 'ShotLocationSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05401700' => { Name => 'AddressSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05401800' => { Name => 'CommunicationSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05401900' => { Name => 'ContractSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05401a00' => { Name => 'RightsSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05401b00' => { Name => 'PaymentsSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05401e00' => { Name => 'DeviceParametersSets', Type => 'StrongReferenceBatch', Unknown => 1 }, # '060e2b34.0101.0105.06010104.05401f00' => { Name => 'NameValueSets', Type => 'Node' }, '060e2b34.0101.0105.06010104.05401f01' => { Name => 'ClassificationNameValueSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05401f02' => { Name => 'ContactNameValueSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.05401f03' => { Name => 'DeviceParameterNameValueSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0105.06010104.060c0000' => { Name => 'MetadataServerLocators', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0105.06010104.060d0000' => { Name => 'RelatedMaterialLocators', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0105.06010107.15000000' => { Name => 'LocalTagEntries', Type => 'LocalTagEntryBatch', Unknown => 1 }, '060e2b34.0101.0105.06100400.00000000' => { Name => 'TotalNumberInSequence', Format => 'int32u' }, '060e2b34.0101.0105.07012001.04011100' => { Name => 'RoomOrSuiteName', Format => 'string' }, '060e2b34.0101.0105.07012001.04011101' => { Name => 'RoomOrSuiteName', Type => 'UTF-16' }, '060e2b34.0101.0105.07012001.04011200' => { Name => 'BuildingName', Format => 'string' }, '060e2b34.0101.0105.07012001.04011201' => { Name => 'BuildingName', Type => 'UTF-16' }, '060e2b34.0101.0105.07012001.10030601' => { Name => 'URL', Type => 'UTF-16' }, # '060e2b34.0101.0105.07020102.07100000' => { Name => 'DefinedEventStartTrueDateTime', Type => 'Node' }, '060e2b34.0101.0105.07020102.07100100' => { Name => 'LocalFestivalDateTime', Format => 'string', Groups => { 2 => 'Time' } }, '060e2b34.0101.0105.07020103.01090000' => { Name => 'ShotStartPosition', Type => 'Position', %duration }, '060e2b34.0101.0105.07020103.010a0000' => { Name => 'IndexingStartPosition', Type => 'Position', %duration }, '060e2b34.0101.0105.07020103.010b0000' => { Name => 'EventOrigin', Type => 'Position', %duration }, '060e2b34.0101.0105.07020108.03000000' => { Name => 'SettingPeriodDescription', Format => 'string' }, '060e2b34.0101.0105.07020108.03010000' => { Name => 'SettingPeriodDescription', Type => 'UTF-16' }, '060e2b34.0101.0105.07020201.01020000' => { Name => 'IndexDuration', Type => 'Length', %duration }, '060e2b34.0101.0105.07020201.02040000' => { Name => 'ShotDuration', Type => 'Length', %duration }, # '060e2b34.0101.0105.0d020000.00000000' => { Name => 'EBU_UER', Type => 'Node' }, # '060e2b34.0101.0105.0d030000.00000000' => { Name => 'Pro-MPEGForum', Type => 'Node' }, # '060e2b34.0101.0106.0e040000.00000000' => { Name => 'Avid', Type => 'Node' }, # '060e2b34.0101.0106.0e050000.00000000' => { Name => 'CNN', Type => 'Node' }, # '060e2b34.0101.0106.0e050100.00000000' => { Name => 'CNNMediaIdentifiers', Type => 'Node' }, # '060e2b34.0101.0106.0e050101.00000000' => { Name => 'CNNLegacyMediaIdentifiers', Type => 'Node' }, # '060e2b34.0101.0106.0e050200.00000000' => { Name => 'CNNAttributes', Type => 'Node' }, # '060e2b34.0101.0106.0e050201.00000000' => { Name => 'CNNRelationalAttributes', Type => 'Node' }, # '060e2b34.0101.0106.0e050202.00000000' => { Name => 'CNNInformationAttributes', Type => 'Node' }, # '060e2b34.0101.0106.0e050300.00000000' => { Name => 'CNNMetadataSets', Type => 'Node' }, # '060e2b34.0101.0106.0e060000.00000000' => { Name => 'Sony', Type => 'Node' }, '060e2b34.0101.0107.01011509.00000000' => { Name => 'ExtendedClipID', Type => 'UMID' }, '060e2b34.0101.0107.0101150a.00000000' => { Name => 'ClipIDArray', Type => 'UMID Array', Unknown => 1 }, '060e2b34.0101.0107.0101150b.00000000' => { Name => 'ExtendedClipIDArray', Type => 'UMID Array', Unknown => 1 }, '060e2b34.0101.0107.01040104.00000000' => { Name => 'TrackNumberBatch', Format => 'int32u' }, '060e2b34.0101.0107.03010102.02110000' => { Name => 'ExtendedTextLanguageCode', Format => 'string', LanguageCode => 1 }, '060e2b34.0101.0107.03010102.02120000' => { Name => 'ExtendedCaptionsLanguageCode', Format => 'string' }, '060e2b34.0101.0107.03010102.02130000' => { Name => 'FrameworkExtendedTextLanguageCode', Format => 'string', LanguageCode => 1 }, '060e2b34.0101.0107.03010102.03110000' => { Name => 'PrimaryExtendedSpokenLanguageCode', Format => 'string' }, '060e2b34.0101.0107.03010102.03120000' => { Name => 'SecondaryExtendedSpokenLanguageCode', Format => 'string' }, '060e2b34.0101.0107.03010102.03130000' => { Name => 'OriginalExtendedSpokenPrimaryLanguageCode', Format => 'string' }, '060e2b34.0101.0107.03010102.03140000' => { Name => 'SecondaryOriginalExtendedSpokenLanguageCode', Format => 'string' }, '060e2b34.0101.0107.03010210.06000000' => { Name => 'KLVMetadataSequence', Type => 'Sequence of KLV packets', Unknown => 1 }, '060e2b34.0101.0107.03010210.07000000' => { Name => 'PackageAttributes', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0107.03010210.08000000' => { Name => 'ComponentAttributes', Type => 'StrongReferenceArray', Unknown => 1 }, # '060e2b34.0101.0107.03010220.02000000' => { Name => 'XMLBiMConstructsInMultipleStreams', Type => 'Node' }, # '060e2b34.0101.0107.03010220.02010000' => { Name => 'MPEG7BiMDecoderInitFrames', Type => 'Node' }, '060e2b34.0101.0107.03010220.02010100' => { Name => 'MPEG7BiMDecoderInitFrame1', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0107.03010220.02010200' => { Name => 'MPEG7BiMDecoderInitFrame2', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0107.03010220.02010300' => { Name => 'MPEG7BiMDecoderInitFrame3', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0107.03010220.02010400' => { Name => 'MPEG7BiMDecoderInitFrame4', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0107.03010220.02010500' => { Name => 'MPEG7BiMDecoderInitFrame5', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0107.03010220.02010600' => { Name => 'MPEG7BiMDecoderInitFrame6', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0107.03010220.02010700' => { Name => 'MPEG7BiMDecoderInitFrame7', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0107.03010220.02010800' => { Name => 'MPEG7BiMDecoderInitFrame8', Type => 'ByteStream', Unknown => 1 }, # '060e2b34.0101.0107.03010220.02020000' => { Name => 'MPEG7BiMAccessUnitFrames', Type => 'Node' }, '060e2b34.0101.0107.03010220.02020100' => { Name => 'MPEG7BiMAccessUnitFrame1', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0107.03010220.02020200' => { Name => 'MPEG7BiMAccessUnitFrame2', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0107.03010220.02020300' => { Name => 'MPEG7BiMAccessUnitFrame3', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0107.03010220.02020400' => { Name => 'MPEG7BiMAccessUnitFrame4', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0107.03010220.02020500' => { Name => 'MPEG7BiMAccessUnitFrame5', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0107.03010220.02020600' => { Name => 'MPEG7BiMAccessUnitFrame6', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0107.03010220.02020700' => { Name => 'MPEG7BiMAccessUnitFrame7', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0107.03010220.02020800' => { Name => 'MPEG7BiMAccessUnitFrame8', Type => 'ByteStream', Unknown => 1 }, '060e2b34.0101.0107.03020102.16000000' => { Name => 'ComponentUserComments', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0107.03020501.01000000' => { Name => 'ShotCommentKind', Type => 'UTF-16' }, '060e2b34.0101.0107.03020502.01000000' => { Name => 'ShotComment', Type => 'UTF-16' }, # '060e2b34.0101.0107.04010202.00000000' => { Name => 'SensorParameters', Type => 'Node' }, '060e2b34.0101.0107.04010202.01000000' => { Name => 'SensorMode', Format => 'string' }, '060e2b34.0101.0107.04020101.05000000' => { Name => 'ChannelAssignment', Type => 'UL', Unknown => 1 }, '060e2b34.0101.0107.04040402.06000000' => { Name => 'ContentPackageIndexArray', Type => 'ArrayOfIndexEntry', Unknown => 1 }, # '060e2b34.0101.0107.04040403.00000000' => { Name => 'VideoIndexParameters', Type => 'Node' }, '060e2b34.0101.0107.04040403.01000000' => { Name => 'VideoIndexArray', Type => 'Array of bytes', Unknown => 1 }, '060e2b34.0101.0107.04060202.00000000' => { Name => 'ApproximateImageContainerSize', Format => 'int32u' }, '060e2b34.0101.0107.04060801.00000000' => { Name => 'MetadataEncodingSchemeCode', Format => 'string' }, '060e2b34.0101.0107.04090200.00000000' => { Name => 'MIMEMediaType', Format => 'string' }, '060e2b34.0101.0107.04090201.00000000' => { Name => 'MIMEMediaType', Type => 'UTF-16' }, '060e2b34.0101.0107.04200201.010a0100' => { Name => 'FieldOfViewVerticalFP', Format => 'float' }, '060e2b34.0101.0107.05010108.00000000' => { Name => 'PackageUsageKind', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.0107.06010103.06000000' => { Name => 'ChannelID', Format => 'int32u' }, '060e2b34.0101.0107.06010103.07000000' => { Name => 'ChannelIDs', Format => 'int32u' }, '060e2b34.0101.0107.06010104.01090000' => { Name => 'KLVDataType', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.0107.06010104.03040000' => { Name => 'KLVDataParentProperties', Type => 'WeakReferenceBatch', Unknown => 1 }, '060e2b34.0101.0107.06010104.03050000' => { Name => 'TaggedValueParentProperties', Type => 'WeakReferenceBatch', Unknown => 1 }, '060e2b34.0101.0107.06010104.03401303' => { Name => 'AnnotationParticipantSets', Type => 'GlobalReferenceBatch', Unknown => 1 }, '060e2b34.0101.0107.06010104.050a0000' => { Name => 'KLVDataDefinitions', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0107.06010104.050b0000' => { Name => 'TaggedValueDefinitions', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0107.06010104.05401f04' => { Name => 'AddressNameValueSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0107.07010201.02300000' => { Name => 'NMEADocumentText', Format => 'string' }, '060e2b34.0101.0107.07011001.04000000' => { Name => 'PlatformRollAngle', Format => 'float' }, '060e2b34.0101.0107.07011001.05000000' => { Name => 'PlatformPitchAngle', Format => 'float' }, '060e2b34.0101.0107.07011001.06000000' => { Name => 'PlatformHeadingAngle', Format => 'float' }, '060e2b34.0101.0107.07012001.04011300' => { Name => 'AddressLine', Format => 'string' }, '060e2b34.0101.0107.07012001.04011301' => { Name => 'AddressLine', Type => 'UTF-16' }, '060e2b34.0101.0107.07012001.04011400' => { Name => 'PlaceName', Format => 'string' }, '060e2b34.0101.0107.07012001.04011401' => { Name => 'PlaceName', Type => 'UTF-16' }, '060e2b34.0101.0107.07012001.04011500' => { Name => 'GeographicalCoordinates', Type => '12-byte Spatial Coordinate', Unknown => 1 }, '060e2b34.0101.0107.07012001.04011600' => { Name => 'AstronomicalBodyName', Format => 'string' }, '060e2b34.0101.0107.07012001.04011601' => { Name => 'AstronomicalBodyName', Type => 'UTF-16' }, '060e2b34.0101.0107.07020102.08020000' => { Name => 'TimecodeArray', Type => 'Array of timecodes', Unknown => 1 }, '060e2b34.0101.0107.07020103.010c0000' => { Name => 'MarkIn', Type => 'Position', %duration }, '060e2b34.0101.0107.07020103.010d0000' => { Name => 'UserPosition', Type => 'Position', %duration }, '060e2b34.0101.0107.07020103.02030000' => { Name => 'MarkOut', Type => 'Position', %duration }, '060e2b34.0101.0107.07020110.01040000' => { Name => 'ClipCreationDateTime', %timestamp }, '060e2b34.0101.0107.07020201.02050000' => { Name => 'VideoClipDuration', Format => 'int32u' }, # '060e2b34.0101.0107.0d040000.00000000' => { Name => 'BBC', Type => 'Node' }, # '060e2b34.0101.0107.0d050000.00000000' => { Name => 'IRT', Type => 'Node' }, # '060e2b34.0101.0107.0e070000.00000000' => { Name => 'IdeasUnlimitedTV', Type => 'Node' }, # '060e2b34.0101.0107.0e080000.00000000' => { Name => 'IPV', Type => 'Node' }, # '060e2b34.0101.0107.0e090000.00000000' => { Name => 'Dolby', Type => 'Node' }, # '060e2b34.0101.0108.01011540.00000000' => { Name => 'GloballyUniqueObjectIdentifiers', Type => 'Node' }, # '060e2b34.0101.0108.01011540.01000000' => { Name => 'GloballyUniqueHumanIdentifiers', Type => 'Node' }, '060e2b34.0101.0108.01011540.01010000' => { Name => 'ParticipantID', Type => 'UID', Unknown => 1 }, '060e2b34.0101.0108.01011540.01020000' => { Name => 'ContactID', Type => 'UID', Unknown => 1 }, '060e2b34.0101.0108.01020104.00000000' => { Name => 'DefaultNamespaceURI', Format => 'string' }, '060e2b34.0101.0108.01020104.01000000' => { Name => 'DefaultNamespaceURI', Type => 'UTF-16' }, '060e2b34.0101.0108.01020105.00000000' => { Name => 'NamespaceURI', Format => 'string' }, '060e2b34.0101.0108.01020105.01000000' => { Name => 'NamespaceURI', Type => 'UTF-16' }, '060e2b34.0101.0108.01020106.00000000' => { Name => 'NamespaceURIs', Format => 'string' }, '060e2b34.0101.0108.01020106.01000000' => { Name => 'NamespaceURIs', Type => 'UTF-16' }, '060e2b34.0101.0108.01030604.00000000' => { Name => 'HTMLDOCTYPE', Format => 'string' }, '060e2b34.0101.0108.01030604.01000000' => { Name => 'HTMLDOCTYPE', Type => 'UTF-16' }, '060e2b34.0101.0108.01030605.00000000' => { Name => 'NamespacePrefix', Format => 'string' }, '060e2b34.0101.0108.01030605.01000000' => { Name => 'NamespacePrefix', Type => 'UTF-16' }, '060e2b34.0101.0108.01030606.00000000' => { Name => 'NamespacePrefixes', Format => 'string' }, '060e2b34.0101.0108.01030606.01000000' => { Name => 'NamespacePrefixes', Type => 'UTF-16' }, '060e2b34.0101.0108.02050404.00000000' => { Name => 'RightsComment', Format => 'string' }, '060e2b34.0101.0108.02050404.01000000' => { Name => 'RightsComment', Type => 'UTF-16' }, '060e2b34.0101.0108.03020201.06000000' => { Name => 'NominationCategory', Format => 'string' }, '060e2b34.0101.0108.03020201.06010000' => { Name => 'NominationCategory', Type => 'UTF-16' }, '060e2b34.0101.0108.04020301.06000000' => { Name => 'PeakEnvelopeVersion', Format => 'int32u' }, '060e2b34.0101.0108.04020301.07000000' => { Name => 'PeakEnvelopeFormat', Format => 'int32u' }, '060e2b34.0101.0108.04020301.08000000' => { Name => 'PointsPerPeakValue', Format => 'int32u' }, '060e2b34.0101.0108.04020301.09000000' => { Name => 'PeakEnvelopeBlockSize', Format => 'int32u' }, '060e2b34.0101.0108.04020301.0a000000' => { Name => 'PeakChannelCount', Format => 'int32u' }, '060e2b34.0101.0108.04020301.0b000000' => { Name => 'PeakFrameCount', Format => 'int32u' }, '060e2b34.0101.0108.04020301.0c000000' => { Name => 'PeakOfPeaksPosition', Type => 'Position', %duration }, '060e2b34.0101.0108.04020301.0d000000' => { Name => 'PeakEnvelopeTimestamp', Format => 'int32u' }, '060e2b34.0101.0108.04020301.0e000000' => { Name => 'PeakEnvelopeData', Type => 'Stream', Unknown => 1 }, '060e2b34.0101.0108.04060802.00000000' => { Name => 'RIFFChunkID', Format => 'int32u' }, '060e2b34.0101.0108.04060903.00000000' => { Name => 'RIFFChunkLength', Format => 'int32u' }, '060e2b34.0101.0108.04070400.00000000' => { Name => 'RIFFChunkData', Type => 'DataStream', Unknown => 1 }, '060e2b34.0101.0108.04090300.00000000' => { Name => 'MIMECharSet', Format => 'string' }, '060e2b34.0101.0108.04090301.00000000' => { Name => 'MIMECharSet', Type => 'UTF-16' }, '060e2b34.0101.0108.04090400.00000000' => { Name => 'MIMEEncoding', Format => 'string' }, '060e2b34.0101.0108.04090401.00000000' => { Name => 'MIMEEncoding', Type => 'UTF-16' }, '060e2b34.0101.0108.06010103.08000000' => { Name => 'MonoSourceTrackIDs', Format => 'int32u' }, '060e2b34.0101.0108.06010104.010a0000' => { Name => 'CompositionRendering', Type => 'PackageID', Unknown => 1 }, '060e2b34.0101.0108.06010104.03401304' => { Name => 'CaptionsDescriptionParticipantSets', Type => 'GlobalReferenceBatch', Unknown => 1 }, '060e2b34.0101.0108.06010104.05400d01' => { Name => 'EventAnnotationSets', Type => 'StrongReferenceBatch', Unknown => 1 }, '060e2b34.0101.0108.06010104.060e0000' => { Name => 'ScriptingLocators', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0108.06010104.060f0000' => { Name => 'UnknownBWFChunks', Type => 'StrongReferenceArray', Unknown => 1 }, # '060e2b34.0101.0108.0e0a0000.00000000' => { Name => 'SnellAndWilcox', Type => 'Node' }, '060e2b34.0101.0109.01011511.00000000' => { Name => 'CryptographicContextID', Type => 'UUID', Unknown => 1 }, '060e2b34.0101.0109.01012101.01000000' => { Name => 'PlatformDesignation', Type => 'UTF-16' }, '060e2b34.0101.0109.01030107.01000000' => { Name => 'LocalTargetID', Type => 'UTF-16' }, '060e2b34.0101.0109.01030109.00000000' => { Name => 'NITFLayerTargetID', Format => 'string' }, '060e2b34.0101.0109.01030109.01000000' => { Name => 'NITFLayerTargetID', Type => 'UTF-16' }, '060e2b34.0101.0109.01030302.00000000' => { Name => 'PackageName', Format => 'string' }, '060e2b34.0101.0109.01030406.00000000' => { Name => 'RP217DataStreamPID', Format => 'int16u' }, '060e2b34.0101.0109.01030407.00000000' => { Name => 'RP217VideoStreamPID', Format => 'int16u' }, '060e2b34.0101.0109.02010101.00000000' => { Name => 'SourceOrganization', Type => 'UTF-16' }, '060e2b34.0101.0109.02010301.00000000' => { Name => 'OriginalProducerName', Type => 'UTF-16' }, '060e2b34.0101.0109.02080201.01000000' => { Name => 'SecurityClassification', Type => 'UTF-16' }, '060e2b34.0101.0109.02080202.01000000' => { Name => 'SecurityClassificationCaveats', Type => 'UTF-16' }, '060e2b34.0101.0109.02080207.01000000' => { Name => 'ClassificationComment', Type => 'UTF-16' }, # '060e2b34.0101.0109.02090200.00000000' => { Name => 'DataEncryption', Type => 'Node' }, # '060e2b34.0101.0109.02090201.00000000' => { Name => 'DataEncryptionAlgorithms', Type => 'Node' }, # '060e2b34.0101.0109.02090202.00000000' => { Name => 'DataHashingAlgorithms', Type => 'Node' }, # '060e2b34.0101.0109.02090300.00000000' => { Name => 'DigitalCinemaEncryption', Type => 'Node' }, # '060e2b34.0101.0109.02090301.00000000' => { Name => 'DigitalCinemaEncryptionAlgorithms', Type => 'Node' }, '060e2b34.0101.0109.02090301.01000000' => { Name => 'CipherAlgorithm', Type => 'UL', Unknown => 1 }, '060e2b34.0101.0109.02090301.02000000' => { Name => 'CryptographicKeyID', Type => 'UUID', Unknown => 1 }, '060e2b34.0101.0109.02090301.03000000' => { Name => 'EncryptedSourceValue', Type => 'DataValue', Unknown => 1 }, # '060e2b34.0101.0109.02090302.00000000' => { Name => 'DigitalCinemaHashingAlgorithms', Type => 'Node' }, '060e2b34.0101.0109.02090302.01000000' => { Name => 'MICAlgorithm', Type => 'UL', Unknown => 1 }, '060e2b34.0101.0109.02090302.02000000' => { Name => 'MIC', Type => 'DataValue', Unknown => 1 }, '060e2b34.0101.0109.03010102.01010000' => { Name => 'ISO639-1LanguageCode', Type => 'UTF-16' }, '060e2b34.0101.0109.03020106.10000000' => { Name => 'JFIFMarkerDescription', Format => 'string' }, '060e2b34.0101.0109.03020106.10010000' => { Name => 'JFIFMarkerDescription', Type => 'UTF-16' }, '060e2b34.0101.0109.03020106.11000000' => { Name => 'HTMLMetaDescription', Format => 'string' }, '060e2b34.0101.0109.03020106.11010000' => { Name => 'HTMLMetaDescription', Type => 'UTF-16' }, '060e2b34.0101.0109.03020401.02000000' => { Name => 'MetadataItemName', Format => 'string' }, '060e2b34.0101.0109.04010201.01060000' => { Name => 'ColorPrimaries', Format => 'string' }, '060e2b34.0101.0109.04010201.01060100' => { Name => 'ColorPrimaries', Type => 'ColorPrimariesType', Unknown => 1 }, '060e2b34.0101.0109.04060203.00000000' => { Name => 'ProductFormat', Format => 'string' }, '060e2b34.0101.0109.04060203.01000000' => { Name => 'ProductFormat', Type => 'UTF-16' }, '060e2b34.0101.0109.04061002.00000000' => { Name => 'SourceLength', Format => 'int64u' }, '060e2b34.0101.0109.04200102.01010100' => { Name => 'ImageSourceDeviceKind', Type => 'UTF-16' }, '060e2b34.0101.0109.06010102.02000000' => { Name => 'SourceContainerFormat', Type => 'UL', Unknown => 1 }, '060e2b34.0101.0109.06010102.03000000' => { Name => 'SourceKey', Type => 'UL', Unknown => 1 }, '060e2b34.0101.0109.06010103.09000000' => { Name => 'DynamicSourcePackageID', Type => 'PackageID', Unknown => 1 }, '060e2b34.0101.0109.06010103.0a000000' => { Name => 'DynamicSourceTrackIDs', Format => 'int32u' }, '060e2b34.0101.0109.06010103.0b000000' => { Name => 'SourceIndex', Type => 'Indirect', Unknown => 1 }, '060e2b34.0101.0109.06010103.0c000000' => { Name => 'SourceSpecies', Type => 'Indirect', Unknown => 1 }, '060e2b34.0101.0109.06010103.0d000000' => { Name => 'SourceValue', Type => 'Indirect', Unknown => 1 }, '060e2b34.0101.0109.06010104.020d0000' => { Name => 'CryptographicContextObject', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.0109.06010104.06100000' => { Name => 'Sub-descriptors', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.0109.06010106.02000000' => { Name => 'EncryptedTrackFileID', Type => 'UUID', Unknown => 1 }, '060e2b34.0101.0109.06010106.03000000' => { Name => 'CryptographicContextLink', Type => 'UUID', Unknown => 1 }, '060e2b34.0101.0109.06090201.03000000' => { Name => 'PlaintextOffset', Format => 'int64u' }, '060e2b34.0101.0109.06100500.00000000' => { Name => 'TripletSequenceNumber', Format => 'int64u' }, '060e2b34.0101.0109.07010201.030f0000' => { Name => 'BoundingRectangle', Type => 'Geographic Rectangle', Unknown => 1 }, '060e2b34.0101.0109.07010201.03100000' => { Name => 'GeographicLocation', Type => 'Geographic Polygon', Unknown => 1 }, '060e2b34.0101.0109.07010201.03110000' => { Name => 'GeographicPolygonCoordinates', Type => 'Array of GeographicCoordinate', Unknown => 1 }, '060e2b34.0101.0109.07010201.03120000' => { Name => 'GeographicAreaNorthwest', Type => 'GeographicCoordinate', Unknown => 1 }, '060e2b34.0101.0109.07010201.03130000' => { Name => 'GeographicAreaSoutheast', Type => 'GeographicCoordinate', Unknown => 1 }, '060e2b34.0101.0109.07010201.03140000' => { Name => 'GeographicAreaSourceDatum', Format => 'string' }, '060e2b34.0101.0109.07010201.03150000' => { Name => 'GeographicPolygonSourceDatum', Format => 'string' }, '060e2b34.0101.0109.07012001.02070100' => { Name => 'CountryCodeMethod', Type => 'UTF-16' }, '060e2b34.0101.0109.07012001.02080100' => { Name => 'ClassifyingCountryCode', Type => 'UTF-16' }, '060e2b34.0101.0109.07012001.02090100' => { Name => 'ReleasableCountryCode', Type => 'UTF-16' }, '060e2b34.0101.0109.07020102.01010100' => { Name => 'UTCStartDateTime', Type => 'UTF-16', Groups => { 2 => 'Time' } }, '060e2b34.0101.0109.07020102.01030000' => { Name => 'UTCInstantDateTime', Format => 'string', Groups => { 2 => 'Time' } }, '060e2b34.0101.0109.07020102.01030100' => { Name => 'UTCInstantDateTime', Type => 'UTF-16', Groups => { 2 => 'Time' } }, '060e2b34.0101.0109.07020102.05010100' => { Name => 'UTCLastModifyDate', Type => 'UTF-16', Groups => { 2 => 'Time' } }, '060e2b34.0101.0109.07020501.00000000' => { Name => 'ToleranceMode', Type => 'ToleranceModeType', Unknown => 1 }, '060e2b34.0101.0109.07020502.00000000' => { Name => 'ToleranceWindow', Type => 'Indirect', Unknown => 1 }, '060e2b34.0101.0109.07020503.00000000' => { Name => 'ToleranceInterpolationMethod', Type => 'WeakReferenceInterpolationDefinition', Unknown => 1 }, # '060e2b34.0101.0109.0d060000.00000000' => { Name => 'ARIB', Type => 'Node' }, # '060e2b34.0101.0109.0d070000.00000000' => { Name => 'AMIA', Type => 'Node' }, # '060e2b34.0101.0109.0e0b0000.00000000' => { Name => 'OmneonVideoNetworks', Type => 'Node' }, # '060e2b34.0101.0109.0e0c0000.00000000' => { Name => 'AscentMediaGroup', Type => 'Node' }, # '060e2b34.0101.0109.0e0c0100.00000000' => { Name => 'Published', Type => 'Node' }, # '060e2b34.0101.0109.0e0d0000.00000000' => { Name => 'Quantel', Type => 'Node' }, # '060e2b34.0101.0109.0e0e0000.00000000' => { Name => 'Panasonic', Type => 'Node' }, '060e2b34.0101.010a.04010502.03000000' => { Name => 'VBILineCount', Format => 'int16u' }, '060e2b34.0101.010a.04010502.04000000' => { Name => 'StoredVBILineNumber', Format => 'int16u' }, '060e2b34.0101.010a.04010502.05000000' => { Name => 'VBIWrappingType', Format => 'int8u' }, '060e2b34.0101.010a.04010502.06000000' => { Name => 'VBIPayloadSampleCount', Format => 'int16u' }, '060e2b34.0101.010a.04010502.07000000' => { Name => 'VBIPayloadByteArray', Format => 'int8u' }, '060e2b34.0101.010a.04010502.08000000' => { Name => 'ANCPacketCount', Format => 'int16u' }, '060e2b34.0101.010a.04010502.09000000' => { Name => 'StoredANCLineNumber', Format => 'int16u' }, '060e2b34.0101.010a.04010502.0a000000' => { Name => 'ANCWrappingType', Format => 'int8u' }, '060e2b34.0101.010a.04010502.0b000000' => { Name => 'ANCPayloadSampleCount', Format => 'int16u' }, '060e2b34.0101.010a.04010502.0c000000' => { Name => 'ANCPayloadByteArray', Format => 'int8u' }, '060e2b34.0101.010a.04010503.0f000000' => { Name => 'VBIPayloadSampleCoding', Format => 'int8u' }, '060e2b34.0101.010a.04010503.10000000' => { Name => 'ANCPayloadSampleCoding', Format => 'int8u' }, # '060e2b34.0101.010a.04010603.00000000' => { Name => 'JPEG2000CodingParameters', Type => 'Node' }, '060e2b34.0101.010a.04010603.01000000' => { Name => 'Rsiz', Format => 'int16u' }, '060e2b34.0101.010a.04010603.02000000' => { Name => 'Xsiz', Format => 'int32u' }, '060e2b34.0101.010a.04010603.03000000' => { Name => 'Ysiz', Format => 'int32u' }, '060e2b34.0101.010a.04010603.04000000' => { Name => 'XOsiz', Format => 'int32u' }, '060e2b34.0101.010a.04010603.05000000' => { Name => 'YOsiz', Format => 'int32u' }, '060e2b34.0101.010a.04010603.06000000' => { Name => 'XTsiz', Format => 'int32u' }, '060e2b34.0101.010a.04010603.07000000' => { Name => 'YTsiz', Format => 'int32u' }, '060e2b34.0101.010a.04010603.08000000' => { Name => 'XTOsiz', Format => 'int32u' }, '060e2b34.0101.010a.04010603.09000000' => { Name => 'YTOsiz', Format => 'int32u' }, '060e2b34.0101.010a.04010603.0a000000' => { Name => 'Csiz', Format => 'int16u' }, '060e2b34.0101.010a.04010603.0b000000' => { Name => 'PictureComponentSizing', Type => 'J2K ComponentSizingArray', Unknown => 1 }, '060e2b34.0101.010a.04010603.0c000000' => { Name => 'CodingStyleDefault', Type => 'J2K CodingStyleDefault', Unknown => 1 }, '060e2b34.0101.010a.04010603.0d000000' => { Name => 'QuantizationDefault', Type => 'J2K QuantizationDefault', Unknown => 1 }, '060e2b34.0101.010a.04020403.01020000' => { Name => 'MPEGAudioBitrate', Format => 'int32u', PrintConv => 'ConvertBitrate($val)', Groups => { 2 => 'Audio' } }, '060e2b34.0101.010a.04060204.00000000' => { Name => 'CBEStartOffset', Format => 'int64u' }, '060e2b34.0101.010a.04060205.00000000' => { Name => 'VBEEndOffset', Format => 'int64u' }, '060e2b34.0101.010a.06010104.02100000' => { Name => 'SubDescriptor', Unknown => 1 }, '060e2b34.0101.010a.06010104.06100000' => { Name => 'SubDescriptors', Unknown => 1 }, '060e2b34.0101.010a.06010107.16000000' => { Name => 'RootMetaDictionary', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.010a.06010107.17000000' => { Name => 'RootPreface', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.010a.06010107.18000000' => { Name => 'RootObjectDirectory', Type => 'Array of bytes', Unknown => 1 }, '060e2b34.0101.010a.06010107.19000000' => { Name => 'RootFormatVersion', Format => 'int32u' }, '060e2b34.0101.010a.07010201.03160000' => { Name => 'FrameCenterElevation', Format => 'float' }, '060e2b34.0101.010a.07020103.010e0000' => { Name => 'PackageMarkInPosition', Type => 'Position', %duration }, '060e2b34.0101.010a.07020103.02040000' => { Name => 'PackageMarkOutPosition', Type => 'Position', %duration }, # '060e2b34.0101.010a.0d080000.00000000' => { Name => 'PBS', Type => 'Node' }, # '060e2b34.0101.010a.0e0f0000.00000000' => { Name => 'GrassValley', Type => 'Node' }, # '060e2b34.0101.010a.0e100000.00000000' => { Name => 'DoremiLabs', Type => 'Node' }, # '060e2b34.0101.010a.0e110000.00000000' => { Name => 'EVSBroadcastEquipment', Type => 'Node' }, # '060e2b34.0101.010a.0e120000.00000000' => { Name => 'TurnerBroadcastingSystem', Type => 'Node' }, '060e2b34.0101.010c.0101110b.00000000' => { Name => 'Ad-ID', Unknown => 1 }, '060e2b34.0101.010c.01011512.00000000' => { Name => 'ResourceID', Type => 'UUID', Unknown => 1 }, '060e2b34.0101.010c.01011513.00000000' => { Name => 'AncillaryResourceID', Type => 'UUID', Unknown => 1 }, '060e2b34.0101.010c.01020210.02030000' => { Name => 'ApplicationSchemeBatch', Type => 'BatchOfUL', Unknown => 1 }, # '060e2b34.0101.010c.02100202.00000000' => { Name => 'RegisterPublicationInformation', Type => 'Node' }, '060e2b34.0101.010c.02100202.01000000' => { Name => 'RegisterKind', Type => 'RegisterType', Unknown => 1 }, '060e2b34.0101.010c.02100202.02000000' => { Name => 'RegisterVersion', Type => 'Hex' }, '060e2b34.0101.010c.02100202.03000000' => { Name => 'RegisterEditorName', Type => 'UTF-16' }, '060e2b34.0101.010c.02100202.04000000' => { Name => 'RegisterStatusKind', Type => 'RegisterStatusType', Unknown => 1 }, # '060e2b34.0101.010c.02100203.00000000' => { Name => 'RegisterItem', Type => 'Node' }, '060e2b34.0101.010c.02100203.01000000' => { Name => 'RegisterItemName', Type => 'UTF-16' }, '060e2b34.0101.010c.02100203.02000000' => { Name => 'RegisterItemDefinition', Type => 'UTF-16' }, '060e2b34.0101.010c.02100203.03000000' => { Name => 'RegisterItemSymbol', Type => 'SymbolType', Unknown => 1 }, '060e2b34.0101.010c.02100203.04000000' => { Name => 'RegisterItemDefiningDocumentName', Type => 'UTF-16' }, '060e2b34.0101.010c.02100203.05000000' => { Name => 'RegisterItemUL', Type => 'UniversalLabelType', Unknown => 1 }, '060e2b34.0101.010c.02100203.06000000' => { Name => 'RegisterItemNotes', Type => 'UTF-16' }, '060e2b34.0101.010c.02100203.07000000' => { Name => 'RegisterItemIntroductionVersion', Format => 'int8u' }, '060e2b34.0101.010c.02100203.08000000' => { Name => 'RegisterItemHierarchyLevel', Format => 'int16u' }, # '060e2b34.0101.010c.02100203.09000000' => { Name => 'RegisterWildcardFlag', Type => 'Node' }, '060e2b34.0101.010c.02100203.0a000000' => { Name => 'RegisterEntryStatus', Type => 'EntryStatusType', Unknown => 1 }, # '060e2b34.0101.010c.02100204.00000000' => { Name => 'RegisterAdministration', Type => 'Node' }, '060e2b34.0101.010c.02100204.01000000' => { Name => 'RegisterAction', Type => 'UTF-16' }, '060e2b34.0101.010c.02100204.02000000' => { Name => 'RegisterApproverName', Type => 'UTF-16' }, '060e2b34.0101.010c.02100204.03000000' => { Name => 'RegisterCreationTime', %timestamp }, '060e2b34.0101.010c.02100204.04000000' => { Name => 'RegistrantName', Type => 'UTF-16' }, '060e2b34.0101.010c.02100204.05000000' => { Name => 'RegisterItemOriginatorName', Type => 'UTF-16' }, '060e2b34.0101.010c.02100204.06000000' => { Name => 'RegisterUserName', Type => 'UTF-16' }, '060e2b34.0101.010c.02100204.07000000' => { Name => 'RegisterUserTime', %timestamp }, '060e2b34.0101.010c.02100204.08000000' => { Name => 'RegisterAdministrationNotes', Type => 'UTF-16' }, '060e2b34.0101.010c.04010101.09000000' => { Name => 'AFDAndBarData', Unknown => 1 }, '060e2b34.0101.010c.04010101.0a000000' => { Name => 'PanScanInformation', Unknown => 1 }, # '060e2b34.0101.010c.04010604.00000000' => { Name => 'VC-1PictureEssenceDescriptors', Type => 'Node' }, '060e2b34.0101.010c.04010604.01000000' => { Name => 'VC-1InitializationMetadata', Type => 'DataStream', Unknown => 1 }, '060e2b34.0101.010c.04010604.02000000' => { Name => 'VC-1SingleSequence', Type => 'Boolean' }, '060e2b34.0101.010c.04010604.03000000' => { Name => 'VC-1CodedContentType', Format => 'int8u' }, '060e2b34.0101.010c.04010604.04000000' => { Name => 'VC-1IdenticalGOP', Type => 'Boolean' }, '060e2b34.0101.010c.04010604.05000000' => { Name => 'VC-1MaximumGOP', Format => 'int16u' }, '060e2b34.0101.010c.04010604.06000000' => { Name => 'VC-1BPictureCount', Format => 'int16u' }, '060e2b34.0101.010c.04010604.07000000' => { Name => 'VC-1AverageBitrate', Format => 'int32u', PrintConv => 'ConvertBitrate($val)' }, '060e2b34.0101.010c.04010604.08000000' => { Name => 'VC-1MaximumBitrate', Format => 'int32u', PrintConv => 'ConvertBitrate($val)' }, '060e2b34.0101.010c.04010604.09000000' => { Name => 'VC-1Profile', Format => 'int8u' }, '060e2b34.0101.010c.04010604.0a000000' => { Name => 'VC-1Level', Format => 'int8u' }, '060e2b34.0101.010c.04020501.07000000' => { Name => 'LinkedTimecodeTrackID', Type => 'UInt32Array', Unknown => 1 }, '060e2b34.0101.010c.04020501.08000000' => { Name => 'SMPTE337MDataStreamNumber', Format => 'int8u' }, '060e2b34.0101.010c.04060803.00000000' => { Name => 'ApplicationScheme', Type => 'UL', Unknown => 1 }, '060e2b34.0101.010c.04060804.00000000' => { Name => 'DescriptiveMetadataScheme', Type => 'UL', Unknown => 1 }, '060e2b34.0101.010c.04090500.00000000' => { Name => 'UCSEncoding', Type => 'UTF-16' }, '060e2b34.0101.010c.05200701.0b000000' => { Name => 'LinkedApplicationPlug-InInstanceID', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.010c.05200701.0c000000' => { Name => 'LinkedDescriptiveFrameworkPlug-InID', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.010c.05200701.0d000000' => { Name => 'ApplicationPlug-InInstanceID', Type => 'UUID', Unknown => 1 }, '060e2b34.0101.010c.05200701.0e000000' => { Name => 'DescriptiveMetadataPlug-InID', Type => 'UUID', Unknown => 1 }, '060e2b34.0101.010c.05200701.0f000000' => { Name => 'ApplicationEnvironmentID', Type => 'UTF-16' }, '060e2b34.0101.010c.05200701.10000000' => { Name => 'DescriptiveMetadataApplicationEnvironmentID', Type => 'UTF-16' }, '060e2b34.0101.010c.05200701.11000000' => { Name => 'LinkedDescriptiveObjectPlug-InID', Type => 'WeakReference', Unknown => 1 }, '060e2b34.0101.010c.06010103.0e000000' => { Name => 'TimebaseReferenceTrackID', Format => 'int32u' }, '060e2b34.0101.010c.06010104.010b0000' => { Name => 'ObjectClassDefinition', Type => 'AUID', Unknown => 1 }, '060e2b34.0101.010c.06010104.020e0000' => { Name => 'ApplicationPlug-InBatch', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.010c.06010104.020f0000' => { Name => 'PackageMarker', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.010c.06010104.02100000' => { Name => 'PackageTimelineMarkerRef', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.010c.06010104.02110000' => { Name => 'RegisterAdministrationObject', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.010c.06010104.02120000' => { Name => 'RegisterEntryAdministrationObject', Type => 'StrongReference', Unknown => 1 }, '060e2b34.0101.010c.06010104.03060000' => { Name => 'GenericPayloads', Type => 'WeakReferenceBatch', Unknown => 1 }, '060e2b34.0101.010c.06010104.06110000' => { Name => 'RegisterEntryArray', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.010c.06010104.06120000' => { Name => 'RegisterAdministrationArray', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.010c.06010104.06130000' => { Name => 'ApplicationInformationArray', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.010c.06010104.06140000' => { Name => 'RegisterChildEntryArray', Type => 'StrongReferenceArray', Unknown => 1 }, '060e2b34.0101.010c.07020101.01060000' => { Name => 'RegisterReleaseDateTime', %timestamp }, '060e2b34.0101.010c.07020101.01070000' => { Name => 'RegisterItemStatusChangeDateTime', %timestamp }, # '060e2b34.0101.010c.0d090000.00000000' => { Name => 'ASC', Type => 'Node' }, # '060e2b34.0101.010c.0d0a0000.00000000' => { Name => 'AES', Type => 'Node' }, # '060e2b34.0101.010c.0d0b0000.00000000' => { Name => 'DutchGuild', Type => 'Node' }, # '060e2b34.0101.010c.0e130000.00000000' => { Name => 'NLTechnologyLLC', Type => 'Node' }, # '060e2b34.0101.010c.0e140000.00000000' => { Name => 'HarrisCorporation', Type => 'Node' }, # data types (not used as tag ID's, right?) # '060e2b34.0104.0101.01010100.00000000' => { Name => 'UInt8' }, # '060e2b34.0104.0101.01010200.00000000' => { Name => 'UInt16' }, # '060e2b34.0104.0101.01010300.00000000' => { Name => 'UInt32' }, # '060e2b34.0104.0101.01010400.00000000' => { Name => 'UInt64' }, # '060e2b34.0104.0101.01010500.00000000' => { Name => 'Int8' }, # '060e2b34.0104.0101.01010600.00000000' => { Name => 'Int16' }, # '060e2b34.0104.0101.01010700.00000000' => { Name => 'Int32' }, # '060e2b34.0104.0101.01010800.00000000' => { Name => 'Int64' }, # '060e2b34.0104.0101.01012001.00000000' => { Name => 'Position' }, # '060e2b34.0104.0101.01012002.00000000' => { Name => 'LengthType' }, # '060e2b34.0104.0101.01030100.00000000' => { Name => 'AUID' }, # '060e2b34.0104.0101.01030200.00000000' => { Name => 'PackageID' }, # '060e2b34.0104.0101.01040100.00000000' => { Name => 'Boolean' }, # '060e2b34.0104.0101.01100100.00000000' => { Name => 'UTF16' }, # '060e2b34.0104.0101.01100200.00000000' => { Name => 'UTF16String' }, # '060e2b34.0104.0101.01100300.00000000' => { Name => 'ISO7' }, # '060e2b34.0104.0101.01100400.00000000' => { Name => 'ISO7String' }, # '060e2b34.0104.0101.01200500.00000000' => { Name => 'UTF7String' }, # '060e2b34.0104.0101.01300100.00000000' => { Name => 'UMID' }, # '060e2b34.0104.0101.0201010e.00000000' => { Name => 'RGBACode' }, # '060e2b34.0104.0101.02010125.00000000' => { Name => 'ChannelStatusModeType' }, # '060e2b34.0104.0101.03010100.00000000' => { Name => 'Rational' }, # '060e2b34.0104.0101.03010101.00000000' => { Name => 'Numerator' }, # '060e2b34.0104.0101.03010102.00000000' => { Name => 'Denominator' }, # '060e2b34.0104.0101.03010200.00000000' => { Name => 'ProductVersionType' }, # '060e2b34.0104.0101.03010201.00000000' => { Name => 'Major' }, # '060e2b34.0104.0101.03010202.00000000' => { Name => 'Minor' }, # '060e2b34.0104.0101.03010203.00000000' => { Name => 'Patch' }, # '060e2b34.0104.0101.03010204.00000000' => { Name => 'Build' }, # '060e2b34.0104.0101.03010205.00000000' => { Name => 'Release' }, # '060e2b34.0104.0101.03010300.00000000' => { Name => 'VersionType' }, # '060e2b34.0104.0101.03010400.00000000' => { Name => 'RGBALayoutItem' }, # '060e2b34.0104.0101.03010501.00000000' => { Name => 'Year' }, # '060e2b34.0104.0101.03010502.00000000' => { Name => 'Month' }, # '060e2b34.0104.0101.03010503.00000000' => { Name => 'Day' }, # '060e2b34.0104.0101.03010601.00000000' => { Name => 'Hours' }, # '060e2b34.0104.0101.03010602.00000000' => { Name => 'Minutes' }, # '060e2b34.0104.0101.03010603.00000000' => { Name => 'Seconds' }, # '060e2b34.0104.0101.03010604.00000000' => { Name => 'msBy4' }, # '060e2b34.0104.0101.03010700.00000000' => { Name => 'Timestamp' }, # '060e2b34.0104.0101.04010100.00000000' => { Name => 'UInt8Array' }, # '060e2b34.0104.0101.04010300.00000000' => { Name => 'Int32Array' }, # '060e2b34.0104.0101.04010400.00000000' => { Name => 'Int64Array' }, # '060e2b34.0104.0101.04010600.00000000' => { Name => 'AUIDArray' }, # '060e2b34.0104.0101.04020100.00000000' => { Name => 'RGBALayout' }, # '060e2b34.0104.0101.04020200.00000000' => { Name => 'RationalArray' }, # '060e2b34.0104.0101.04030200.00000000' => { Name => 'UInt32Batch' }, # '060e2b34.0104.0101.04100100.00000000' => { Name => 'DataValue' }, # '060e2b34.0104.0101.04100200.00000000' => { Name => 'Stream' }, # '060e2b34.0104.0101.04100300.00000000' => { Name => 'Indirect' }, # '060e2b34.0104.0101.04100400.00000000' => { Name => 'Opaque' }, # '060e2b34.0104.0101.05010000.00000000' => { Name => 'WeakRef' }, # '060e2b34.0104.0101.05020000.00000000' => { Name => 'StrongRef' }, # '060e2b34.0104.0101.05021400.00000000' => { Name => 'StrongReferenceTrack' }, # '060e2b34.0104.0101.05060500.00000000' => { Name => 'StrongReferenceVectorTrack' }, # '060e2b34.0204.0107.0d010301.027e0100' => { Name => 'EncryptedTriplet' }, '060e2b34.0205.0101.0d010201.01020100' => { Name => 'OpenHeader', %header }, '060e2b34.0205.0101.0d010201.01020200' => { Name => 'ClosedHeader', %header }, '060e2b34.0205.0101.0d010201.01020300' => { Name => 'OpenCompleteHeader', %header }, '060e2b34.0205.0101.0d010201.01020400' => { Name => 'ClosedCompleteHeader', %header }, '060e2b34.0205.0101.0d010201.01030100' => { Name => 'OpenBodyPartition', Unknown => 1 }, '060e2b34.0205.0101.0d010201.01030200' => { Name => 'ClosedBodyPartition', Unknown => 1 }, '060e2b34.0205.0101.0d010201.01030300' => { Name => 'OpenCompleteBodyPartition', Unknown => 1 }, '060e2b34.0205.0101.0d010201.01030400' => { Name => 'ClosedCompleteBodyPartition', Unknown => 1 }, '060e2b34.0205.0101.0d010201.01040200' => { Name => 'Footer', Unknown => 1 }, '060e2b34.0205.0101.0d010201.01040400' => { Name => 'CompleteFooter', Unknown => 1 }, '060e2b34.0205.0101.0d010201.01050100' => { Name => 'Primer', SubDirectory => { TagTable => 'Image::ExifTool::MXF::Main', ProcessProc => \&ProcessPrimer } }, '060e2b34.0205.0101.0d010201.01110000' => { Name => 'RandomIndexMetadataV10', Type => 'FixedPack', Unknown => 1 }, '060e2b34.0205.0101.0d010201.01110100' => { Name => 'RandomIndexMetadata', Type => 'FixedPack', Unknown => 1 }, '060e2b34.0206.0101.0d010200.00000000' => { Name => 'PartitionMetadata', Type => 'FixedPack', Unknown => 1 }, '060e2b34.0253.0101.0d010101.01010200' => { Name => 'StructuralComponent', %localSet }, '060e2b34.0253.0101.0d010101.01010f00' => { Name => 'SequenceSet', %localSet }, # Note: SourceClip is actually a local set, but it isn't decoded because it has a Duration # tag which gets confused with the other Duration tags (also, my technique of determining # the corresponding EditRate doesn't seem to work for this Duration) '060e2b34.0253.0101.0d010101.01011100' => { Name => 'SourceClip', Unknown => 1 }, '060e2b34.0253.0101.0d010101.01011400' => { Name => 'TimecodeComponent', %localSet }, '060e2b34.0253.0101.0d010101.01011800' => { Name => 'ContentStorageSet', %localSet }, '060e2b34.0253.0101.0d010101.01012300' => { Name => 'EssenceContainerDataSet', %localSet }, '060e2b34.0253.0101.0d010101.01012500' => { Name => 'FileDescriptor', %localSet }, '060e2b34.0253.0101.0d010101.01012700' => { Name => 'GenericPictureEssenceDescriptor', %localSet }, '060e2b34.0253.0101.0d010101.01012800' => { Name => 'CDCIEssenceDescriptor', %localSet }, '060e2b34.0253.0101.0d010101.01012900' => { Name => 'RGBAEssenceDescriptor', %localSet }, '060e2b34.0253.0101.0d010101.01012f00' => { Name => 'Preface', %localSet }, '060e2b34.0253.0101.0d010101.01013000' => { Name => 'Identification', %localSet }, '060e2b34.0253.0101.0d010101.01013200' => { Name => 'NetworkLocator', %localSet }, '060e2b34.0253.0101.0d010101.01013300' => { Name => 'TextLocator', %localSet }, '060e2b34.0253.0101.0d010101.01013400' => { Name => 'GenericPackage', %localSet }, '060e2b34.0253.0101.0d010101.01013600' => { Name => 'MaterialPackage', %localSet }, '060e2b34.0253.0101.0d010101.01013700' => { Name => 'SourcePackage', %localSet }, '060e2b34.0253.0101.0d010101.01013800' => { Name => 'GenericTrack', %localSet }, '060e2b34.0253.0101.0d010101.01013900' => { Name => 'EventTrack', %localSet }, '060e2b34.0253.0101.0d010101.01013a00' => { Name => 'StaticTrack', %localSet }, '060e2b34.0253.0101.0d010101.01013b00' => { Name => 'Track', %localSet }, '060e2b34.0253.0101.0d010101.01014100' => { Name => 'DMSegment', %localSet }, '060e2b34.0253.0101.0d010101.01014200' => { Name => 'GenericSoundEssenceDescriptor', %localSet }, '060e2b34.0253.0101.0d010101.01014300' => { Name => 'GenericDataEssenceDescriptor', %localSet }, '060e2b34.0253.0101.0d010101.01014400' => { Name => 'MultipleDescriptor', %localSet }, '060e2b34.0253.0101.0d010101.01014500' => { Name => 'DMSourceClip', %localSet }, '060e2b34.0253.0101.0d010101.01014700' => { Name => 'AES3PCMDescriptor', %localSet }, '060e2b34.0253.0101.0d010101.01014800' => { Name => 'WaveAudioDescriptor', %localSet }, '060e2b34.0253.0101.0d010101.01015100' => { Name => 'MPEG2VideoDescriptor', %localSet }, '060e2b34.0253.0101.0d010101.01015a00' => { Name => 'JPEG2000PictureSubDescriptor', %localSet }, '060e2b34.0253.0101.0d010101.01015b00' => { Name => 'VBIDataDescriptor', %localSet }, # ignore the index table sets because they contain no useful metadata '060e2b34.0253.0101.0d010201.01100000' => { Name => 'V10IndexTableSegment', Unknown => 1 }, '060e2b34.0253.0101.0d010201.01100100' => { Name => 'IndexTableSegment', Unknown => 1 }, '060e2b34.0253.0101.0d010400.00000000' => { Name => 'DMSet', %localSet }, '060e2b34.0253.0101.0d010401.00000000' => { Name => 'DMFramework', %localSet }, # DMS1 local sets (ref 12) '060e2b34.0253.0101.0d010401.01010100' => { Name => 'ProductionFramework', %localSet }, '060e2b34.0253.0101.0d010401.01010200' => { Name => 'ClipFramework', %localSet }, '060e2b34.0253.0101.0d010401.01010300' => { Name => 'SceneFramework', %localSet }, '060e2b34.0253.0101.0d010401.01100100' => { Name => 'Titles', %localSet }, '060e2b34.0253.0101.0d010401.01110100' => { Name => 'Identification', %localSet }, '060e2b34.0253.0101.0d010401.01120100' => { Name => 'GroupRelationship', %localSet }, '060e2b34.0253.0101.0d010401.01130100' => { Name => 'Branding', %localSet }, '060e2b34.0253.0101.0d010401.01140100' => { Name => 'Event', %localSet }, '060e2b34.0253.0101.0d010401.01140200' => { Name => 'Publication', %localSet }, '060e2b34.0253.0101.0d010401.01150100' => { Name => 'Award', %localSet }, '060e2b34.0253.0101.0d010401.01160100' => { Name => 'CaptionDescription', %localSet }, '060e2b34.0253.0101.0d010401.01170100' => { Name => 'Annotation', %localSet }, '060e2b34.0253.0101.0d010401.01170200' => { Name => 'SettingPeriod', %localSet }, '060e2b34.0253.0101.0d010401.01170300' => { Name => 'Scripting', %localSet }, '060e2b34.0253.0101.0d010401.01170400' => { Name => 'Classification', %localSet }, '060e2b34.0253.0101.0d010401.01170500' => { Name => 'Shot', %localSet }, '060e2b34.0253.0101.0d010401.01170600' => { Name => 'KeyPoint', %localSet }, '060e2b34.0253.0101.0d010401.01170800' => { Name => 'CueWords', %localSet }, '060e2b34.0253.0101.0d010401.01180100' => { Name => 'Participant', %localSet }, '060e2b34.0253.0101.0d010401.01190100' => { Name => 'ContactsList', %localSet }, '060e2b34.0253.0101.0d010401.011a0200' => { Name => 'Person', %localSet }, '060e2b34.0253.0101.0d010401.011a0300' => { Name => 'Organisation', %localSet }, '060e2b34.0253.0101.0d010401.011a0400' => { Name => 'Location', %localSet }, '060e2b34.0253.0101.0d010401.011b0100' => { Name => 'Address', %localSet }, '060e2b34.0253.0101.0d010401.011b0200' => { Name => 'Communications', %localSet }, '060e2b34.0253.0101.0d010401.011c0100' => { Name => 'Contract', %localSet }, '060e2b34.0253.0101.0d010401.011c0200' => { Name => 'Rights', %localSet }, '060e2b34.0253.0101.0d010401.011d0100' => { Name => 'PictureFormat', %localSet }, '060e2b34.0253.0101.0d010401.011e0100' => { Name => 'DeviceParameters', %localSet }, '060e2b34.0253.0101.0d010401.011f0100' => { Name => 'NameValue', %localSet }, '060e2b34.0253.0101.0d010401.01200100' => { Name => 'Processing', %localSet }, '060e2b34.0253.0101.0d010401.01200200' => { Name => 'Projects', %localSet }, '060e2b34.0253.0101.0d010401.02010000' => { Name => 'CryptographicFramework', %localSet }, '060e2b34.0253.0101.0d010401.02020000' => { Name => 'CryptographicContext', %localSet }, '060e2b34.0253.0101.7f000000.00000000' => { Name => 'DefaultObject', Unknown => 1 }, '060e2b34.0401.0107.02090201.01000000' => { Name => 'CipherAlgorithmAES128CBC', Type => 'Label', Unknown => 1 }, '060e2b34.0401.0107.02090202.01000000' => { Name => 'HMACAlgorithmSHA1128', Type => 'Label', Unknown => 1 }, '060e2b34.0401.0107.0d010301.020b0100' => { Name => 'EncryptedContainerLabel', Type => 'Label', Unknown => 1 }, '060e2b34.0401.0107.0d010401.02010100' => { Name => 'CryptographicFrameworkLabel', Type => 'Label', Unknown => 1 }, ); # header information %Image::ExifTool::MXF::Header = ( GROUPS => { 2 => 'Video' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, 0 => { Name => 'MXFVersion', Format => 'int16u[2]', ValueConv => '$val =~ tr/ /./; $val', }, # 4 - int32u: KAGSize # 8 - int64u: bytes from first header # 16 - int64u: bytes from previous partition 24 => { # bytes to footer from start of header Name => 'FooterPosition', Format => 'int64u', RawConv => '$$self{MXFInfo}{FooterPos} = $val; undef', }, 32 => { # number of bytes in header, beginning at the start of the Primer Name => 'HeaderSize', Format => 'int64u', # use this opportinity to also save our header type RawConv => q{ $$self{MXFInfo}{HeaderType} = $$self{DIR_NAME}; $$self{MXFInfo}{HeaderSize} = $val; return undef; # I don't think anyone would care about this }, }, # ...plus more stuff we don't care about ); #------------------------------------------------------------------------------ # Convert 16 bytes to UL format # Inputs: 0) 16-byte value # Returns: UL string sub UL($) { return join('.', unpack('H8H4H4H8H8', shift));; } #------------------------------------------------------------------------------ # Convert latitude and/or longitude in [d]ddmmss(N|S|E|W) format # Inputs: 0) string value to convert # Returns: numerical lat and/or long sub ConvLatLon($) { my $val = shift; my (@convVal, $ne); foreach $ne ('NS','EW') { next unless $val =~ /(\d{2,3})(\d{2})(\d{2})([$ne])/; push @convVal, $1 + ($2 + $3 / 60) / 60 * (($4 eq 'N' or $4 eq 'E') ? 1 : -1); } return join ' ', @convVal; } #------------------------------------------------------------------------------ # Read MXF-specific Format types # Inputs: 0) ExifTool ref, 1) value, 2) MXF value type # Returns: formatted value # Note: All types recognized here should be defined in the %knownType lookup sub ReadMXFValue($$$) { my ($et, $val, $type) = @_; my $len = length($val); local $_; if ($type eq 'UTF-16') { $val = $et->Decode($val, 'UCS2'); # (until we handle UTF-16 properly) } elsif ($type eq 'ProductVersion') { my @a = unpack('n*', $val); push @a, 0 while @a < 5; $a[4] = { 0 => 'unknown', 1 => 'released', 2 => 'debug', 3 => 'patched', 4 => 'beta', 5 => 'private build' }->{$a[4]} || "unknown $a[4]"; $val = join('.', @a[0..3]) . ' ' . $a[4]; } elsif ($type eq 'VersionType') { $val = join('.',unpack('C*',$val)); } elsif ($type eq 'Timestamp') { my @a = unpack('nC*',$val); my @max = (3000,12,31,24,59,59,249); foreach (@a) { last unless @max and $_ <= $max[0]; shift @max; } if (@max) { $val = 'Invalid (0x' . unpack('H*',$val) . ')'; } else { $a[6] *= 4; $val = sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d.%.3d', @a); } } elsif ($type eq 'Position' or $type eq 'Length') { $val = Get64u(\$val, 0); } elsif ($type eq 'Boolean') { $val = $val eq "\0" ? 'False' : 'True'; } elsif ($type =~ /^(Alt|Lat|Lon)$/ and $len == 4) { # split into nibbles after swapping byte order (see reference 8b) $val = unpack('H*', pack('N', unpack('V', $val))); if ($type eq 'Alt') { # drop satellite information and only support altitudes up to +/-99999 m $val = "$val (from earth centre)" unless $val =~ s/^[abc]..// or $val =~ s/^[def]../-/; } else { $val =~ s/(...)/$1./; # insert decimal point after 3rd character if ($type eq 'Lat') { $val =~ s/^f/-/; # south with first digit = 0 } else { $val =~ s/^e/-/; # east with first digit = 0 $val =~ s/^f/-1/; # east with first digit = 1 } } } elsif ($type =~ /(Array|Batch)/ and $len > 16) { my ($count, $size) = unpack('NN', $val); # validate data length $len == 8 + $count * $size or $et->WarnOnce("Bad array or batch size"); my ($i, @a); for ($i=0; $i<$count; ++$i) { my $pos = 8 + $i * $size; last if $pos + $size > $len; push @a, substr($val, $pos, $size); } if ($type =~ /^StrongReference/) { $_ = join('-', unpack('H8H4H4H4H12', $_)) foreach @a; } elsif ($type eq 'BatchOfUL' or $type =~ /^WeakReference/) { $_ = ReadMXFValue($et, $_, 'UL') foreach @a; } $val = \@a; } elsif ($len == 32) { # 32-byte types include UMID, PackageID $val = join('.', unpack('H8H4H4H8', $val)) . ' ' . join(' ', unpack('x12H2H6', $val)) . ' ' . join('-', unpack('x16H8H4H4H4H12', $val)); } elsif ($len == 16) { # convert remaining 16-byte known types as GUID or UL # - this covers all UID's, UL, Label, WeakReference, StrongReference if ($type eq 'UL' or $type eq 'WeakReference') { # reverse high/low word if a reversed GUID is stored in a UL type # (see ref 8b, section 5.5.8) # - a GUID will have high bit of byte 8 set (reversed, this is in byte 0) return UL($val) unless unpack('C', $val) & 0x80; $val = substr($val, 8) . substr($val, 0, 8); } $val = join('-', unpack('H8H4H4H4H12', $val)); # compact GUID format } else { # Note: a 64-byte extended UMID contains date/time, GPS coordinates, etc, # which would could be decoded here (ref 8b, section 5)... $val = unpack('H*', $val); } return $val; } #------------------------------------------------------------------------------ # Process MXF Primer (to build lookup for translating local tag ID's) # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessPrimer($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $end = $$dirInfo{DirLen}; return 0 unless $end > 8; my $count = Get32u($dataPt, 0); my $size = Get32u($dataPt, 4); return 0 unless $size >= 18; $et->VerboseDir('MXF Primer', $count); my $verbose = $et->Options('Verbose'); my $primer = $$et{MXFInfo}{Primer}; my $pos = 8; my $i; for ($i=0; $i<$count; ++$i) { last if $pos + $size > $end; my $local = Get16u($dataPt, $pos); my $global = UL(substr($$dataPt, $pos + 2, 16)); $pos += $size; # save this entry in the primer lookup table $$primer{$local} = $global; # print lookup details in verbose mode next unless $verbose; my $indx = $i . ')'; $indx .= ' ' if length($indx) < 3; $et->VPrint(0, sprintf(" | $indx 0x%.4x => '$global'\n", $local)); } return 1; } #------------------------------------------------------------------------------ # Read tags from an MXF local set # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessLocalSet($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; local $_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos}; my $end = $$dirInfo{DirLen}; my $mxfInfo = $$et{MXFInfo}; my $primer = $$mxfInfo{Primer}; my (@strongRef, @groups, $instance, $editRate, $trackID, $langCode, $textLang); $et->VerboseDir('MXF LocalSet', undef, $end); # loop through all tags in this local set my $pos = 0; while ($pos + 4 < $end) { my $loc = Get16u($dataPt, $pos); # get key (local tag ID) my $len = Get16u($dataPt, $pos + 2); # get length $pos += 4; last if $pos + $len > $end; my $tag = $$primer{$loc}; my ($extra, $val, $type, $langInfo); if ($tag and $$tagTablePtr{$tag}) { $extra = sprintf(', Local 0x%.4x', $loc); } else { $tag = $loc; # $et->WarnOnce('Missing local key for at least one tag'); $extra = ', NOT IN PRIMER!'; } my $tagInfo = $$tagTablePtr{$tag}; # handle our MXF-specific format types if ($tagInfo) { $type = $$tagInfo{Type}; if ($type and $knownType{$type}) { $val = ReadMXFValue($et, substr($$dataPt, $pos, $len), $type); push @strongRef, (ref $val ? @$val : $val) if $type =~ /^StrongReference/; # remember instance UID of this local set if ($$tagInfo{Name} eq 'InstanceUID') { $instance = $val; # set language code for text # (only works if InstanceUID comes before text) $textLang = $$mxfInfo{$instance}{LangCode} if $$mxfInfo{$instance}; } elsif ($type eq 'UTF-16' and $textLang) { $langInfo = Image::ExifTool::GetLangInfo($tagInfo, $textLang); } } } # get tagInfo ref the standard way to handle Unknown tags $tagInfo = $langInfo || $et->GetTagInfo($tagTablePtr, $tag); # set Binary flag to extract all unknown-format tags as Binary data if ($tagInfo and $$tagInfo{Unknown} and not defined $$tagInfo{Binary}) { $$tagInfo{Binary} = not ($$tagInfo{Format} or ($type and $knownType{$type})); } my $key = $et->HandleTag($tagTablePtr, $tag, $val, Extra => $extra, TagInfo => $tagInfo, DataPt => $dataPt, DataPos => $dataPos, Start => $pos, Size => $len, ProcessProc => \&ProcessLocalSet, ); $pos += $len; next unless $key; # save information to allow later fixup of durations and group1 names # (necessary because we don't have all the information we need # to do this on the fly when the file is parsed linearly) push @groups, $$et{TAG_EXTRA}{$key}; next unless $tagInfo; my $name = $$tagInfo{Name}; if ($$tagInfo{IsDuration}) { $$mxfInfo{FixDuration}{$key} = 1; } elsif ($$tagInfo{LanguageCode}) { $langCode = $$et{VALUE}{$key}; } elsif ($name eq 'EditRate') { $editRate = $$et{VALUE}{$key}; } elsif ($name =~ /TrackID$/) { $trackID = $$et{VALUE}{$key}; unless ($$mxfInfo{Group1}{$trackID}) { # save lookup to convert TrackID to our group 1 name $$mxfInfo{Group1}{$trackID} = 'Track' . ++$$mxfInfo{NumTracks}; } } } # save object information now that we know the instance UID if ($instance) { my $objInfo = $$mxfInfo{$instance}; if ($objInfo) { push @{$$objInfo{StrongRef}}, @strongRef; push @{$$objInfo{Groups}}, @groups; } else { $objInfo = $$mxfInfo{$instance} = { StrongRef => \@strongRef, Groups => \@groups, }; } # save instance UID's in groups hash (used to remove duplicates later) $$_{UID} = $instance foreach @groups; $$objInfo{Name} = $$et{DIR_NAME}; $$objInfo{TrackID} = $trackID if defined $trackID; $$objInfo{EditRate} = $editRate if $editRate; if ($langCode) { $$objInfo{LangCode} = $langCode; } else { $langCode = $$objInfo{LangCode}; } if ($langCode) { # pre-set language code in all children my $ul; foreach $ul (@{$$objInfo{StrongRef}}) { my $obj = $$mxfInfo{$ul}; $obj or $obj = $$mxfInfo{$ul} = { StrongRef => [], Groups => [], Name => 'XXX' }; $$obj{LangCode} = $langCode; } } # save instance UID's of Preface's push @{$$mxfInfo{Preface}}, $instance if $$et{DIR_NAME} eq 'Preface'; } return 1; } #------------------------------------------------------------------------------ # Walk MXF tree to set group names # Inputs: 0) MXF information hash ref, 1) object instance UID, # 2) path information hash ref (only for group 5 names), 3) track ID number # Notes: also generates lookup table for EditRate based on group 1 name # and the instance UID of the SequenceSet with the preferred Duration value sub SetGroups($$;$$) { my ($mxfInfo, $instance, $pathInfo, $trackID) = @_; my $objInfo = $$mxfInfo{$instance}; return unless $objInfo and not $$objInfo{DidGroups}; $$objInfo{DidGroups} = 1; # avoid reprocessing this object $trackID = $$objInfo{TrackID} if defined $$objInfo{TrackID}; my ($ul, $g1, $g5, $groups, $path, $nameCount, $setSource); # generate group 1 name for different tracks if (defined $trackID) { $$objInfo{TrackID} = $trackID; $g1 = $$mxfInfo{Group1}{$trackID}; # build a lookup to determine edit rates based on group 1 name my $editRate = $$objInfo{EditRate}; $$mxfInfo{EditRate}{$g1} = $editRate if defined $editRate; # save the TimeCodeComponent instance UID (for determining Duration later) if ($$objInfo{Name} eq 'TimecodeComponent') { my $inWhat = $$mxfInfo{InSource} ? 'Source' : 'Other'; $$mxfInfo{BestDuration}{$inWhat} = $instance; } } # set flag if we are in the SourcePackage (contains our preferred TimecodeComponent) my $name = $$objInfo{Name}; $setSource = $$mxfInfo{InSource} = 1 if $name eq 'SourcePackage'; # generate group 5 path names if requested if ($pathInfo) { $nameCount = $$pathInfo{NameCount} || { }; $path = $$pathInfo{Path}; $$nameCount{$name} = ($$nameCount{$name} || 0) + 1; push @$path, $name . $$nameCount{$name}; $g5 = join '-', @$path; $$pathInfo{NameCount} = { }; # use new name count for child objects } foreach $groups (@{$$objInfo{Groups}}) { $$groups{G1} = $g1 if $g1; $$groups{G5} = $g5 if $g5; } # walk through remaining objects in tree foreach $ul (@{$$objInfo{StrongRef}}) { SetGroups($mxfInfo, $ul, $pathInfo, $trackID); } if ($pathInfo) { pop @$path; $$pathInfo{NameCount} = $nameCount; } delete $$mxfInfo{InSource} if $setSource; } #------------------------------------------------------------------------------ # Convert all duration values to seconds # Inputs: 0) ExifTool object ref, 1) MXF information hash ref sub ConvertDurations($$) { my ($et, $mxfInfo) = @_; my $valueHash = $$et{VALUE}; my $infoHash = $$et{TAG_INFO}; my $tagExtra = $$et{TAG_EXTRA}; my $editHash = $$mxfInfo{EditRate}; my ($tag, $key, $i); foreach $tag (keys %{$$mxfInfo{FixDuration}}) { # loop through all instances of this tag name for ($i=0, $key=$tag; ; ++$i, $key="$tag ($i)") { my $tagInfo = $$infoHash{$key} or last; next unless $$tagInfo{IsDuration}; # test IsDuration flag to be sure my $g1 = $$tagExtra{$key}{G1} or next; my $editRate = $$editHash{$g1}; $$valueHash{$key} /= $editRate if $editRate; } } } #------------------------------------------------------------------------------ # Read information in a MXF file # Inputs: 0) ExifTool ref, 1) dirInfo ref # Returns: 1 on success, 0 if this wasn't a valid MXF file sub ProcessMXF($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $verbose = $et->Options('Verbose'); my $unknown = $et->Options('Unknown'); my ($buff, $preface, $n, $headerEnd, $footerPos); # read enough to allow skipping over run-in if it exists $raf->Read($buff, 65547) or return 0; $buff =~ /\x06\x0e\x2b\x34\x02\x05\x01\x01\x0d\x01\x02/g or return 0; my $start = pos($buff) - 11; $et->SetFileType(); SetByteOrder('MM'); $raf->Seek($start, 0) or $et->Warn('Seek error'), return 1; my $tagTablePtr = GetTagTable('Image::ExifTool::MXF::Main'); # determine header length and type # initialize MXF information lookups my %mxfInfo = ( Primer => { }, # convert local keys to global UL Group1 => { }, # group 1 names base on TrackID NumTracks => 0, # counts number of tracks in file FixDuration => { }, # names of all Duration tags that need fixing Preface => [ ], # instance UID's for all Preface objects ); $$et{MXFInfo} = \%mxfInfo; # set group 1 name for all tags (so we can overwrite with track number later) $$et{SET_GROUP1} = 'MXF'; for (;;) { my $pos = $raf->Tell(); # did we just finish parsing the header partition? if ($headerEnd and $pos >= $headerEnd) { # all done if it was a closed and complete header last if $mxfInfo{HeaderType} eq 'ClosedCompleteHeader' and not $verbose; undef $headerEnd; # (only test this once) # skip directly to footer if possible if ($footerPos and $footerPos > $pos and (not $verbose or not $unknown)) { $et->VPrint(0, "[Skipping to footer. Use Unknown option to parse body partitions]\n"); $raf->Seek($footerPos, 0) or last; $pos = $footerPos; } } # read the next KLV Key and first byte of Value $raf->Read($buff, 17) == 17 or last; my $tag = substr($buff, 0, 16); # get KLV Key (global tag ID) my $len = Get8u(\$buff, 16); # get KLV Length my $n; if ($len >= 0x80) { $n = $len & 0x7f; $raf->Read($buff, $n) == $n or last; $len = 0; foreach $b (unpack 'C*', $buff) { $len = $len * 256 + $b; } } else { $n = 0; } # convert tag ID to ASCII UL notation my $ul = UL($tag); my $tagInfo = $$tagTablePtr{$ul}; if (not $tagInfo and $ul =~ /^060e2b34\.0253\.0101\.(0d|0f)/ and ($1 eq '0d' or $verbose or $unknown)) { # generate some unknown set tags automatically my $name = $1 eq '0d' ? 'UserOrganizationPublicUse' : 'Experimental'; $tagInfo = { Name => $name, %localSet }; AddTagToTable($tagTablePtr, $ul, $tagInfo); } my ($val, $dataPt); if ($tagInfo and not $$tagInfo{Unknown} and $len < 10000000) { # save information about header/footer positions for skipping over body partitions if ($$tagInfo{Name} eq 'Primer' and $mxfInfo{HeaderSize}) { # footer position relative to header start and only valid if non-zero $footerPos = $start + $mxfInfo{FooterPos} if $mxfInfo{FooterPos}; # header length is relative to start of Primer $headerEnd = $pos + $mxfInfo{HeaderSize}; } elsif ($$tagInfo{IsHeader}) { # save position of header start to allow calculation of footer position $start = $pos; } $raf->Read($buff, $len) == $len or last; # get KLV Value $dataPt = \$buff; my $type = $$tagInfo{Type}; $val = ReadMXFValue($et, $buff, $type) if $type and $knownType{$type}; } elsif (($tagInfo and (not $$tagInfo{Unknown} or $unknown)) or $verbose) { if ($tagInfo) { # set Binary flag to extract all unknown-format tags as Binary data if ($$tagInfo{Unknown} and not defined $$tagInfo{Binary}) { my $type = $$tagInfo{Type}; $$tagInfo{Binary} = not ($$tagInfo{Format} or ($type and $knownType{$type})); } } else { my $id = unpack 'H*', $tag; $tagInfo = { Name => "MXF_$id", Description => "MXF $id", }; # note: don't add unknown tags to table because we don't # want them to be extracted with the Unknown option } # read the first 64kB max my $n = $len < 65536 ? $len : 65536; $raf->Read($val, $n) == $n or last; $dataPt = \$val; my $more = $len - $n; $raf->Seek($more, 1) or last if $more; } else { $raf->Seek($len, 1) or last; # skip this value next; } $et->HandleTag($tagTablePtr, $ul, $val, TagInfo => $tagInfo, DataPt => $dataPt, DataPos => $pos + 17 + $n, Size => $len, ProcessProc => \&ProcessLocalSet, ); } # walk entire MXF object tree to fix family 1 group names my ($pathInfo, $tag, %did, %bestDur); $pathInfo = { Path => [ 'MXF' ] } if $et->Options('SavePath'); foreach $preface (@{$mxfInfo{Preface}}) { SetGroups(\%mxfInfo, $preface, $pathInfo); } # convert Duration values to seconds based on the appropriate EditRate ConvertDurations($et, \%mxfInfo); # remove tags to keep only the one from the most recent instance of the object my $tagExtra = $$et{TAG_EXTRA}; my $fileOrder = $$et{FILE_ORDER}; # also determine our best Duration value if ($mxfInfo{BestDuration}) { my $instance = $mxfInfo{BestDuration}{Source} || $mxfInfo{BestDuration}{Other}; $instance and $bestDur{"Duration $instance"} = 1; } # process tags in reverse order to preserve the last found of each identical tag foreach $tag (sort { $$fileOrder{$b} <=> $$fileOrder{$a} } keys %$tagExtra) { my $instance = $$tagExtra{$tag}{UID} or next; delete $$tagExtra{$tag}{UID}; # (no longer needed) $tag =~ /^(\S+)/; # get tag name without index number my $utag = "$1 $instance"; # instance-specific tag name if ($did{$utag}) { Image::ExifTool::DeleteTag($et, $tag); # delete the duplicate } else { $did{$utag} = 1; if ($bestDur{$utag}) { # save best duration value my $val = $$et{VALUE}{$tag}; $et->HandleTag($tagTablePtr, '060e2b34.0101.0102.07020201.01030000', $val); } } } # clean up and return delete $$et{SET_GROUP1}; delete $$et{MXFInfo}; return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::MXF - Read MXF meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read meta information from MXF (Material Exchange Format) files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://sourceforge.net/projects/mxflib/> =item L<http://www.aafassociation.org/downloads/whitepapers/MXFPhysicalview.pdf> =item L<http://archive.nlm.nih.gov/pubs/pearson/MJ2_Metadata2005.pdf> =item L<http://www.aafassociation.org/downloads/specifications/AMWA-AS-03-Delivery-Spec-1_0.pdf> =item L<http://paul-sampson.ca/private/s385m.pdf> =item L<http://avwiki.nl/documents/eg41.pdf> =item L<http://avwiki.nl/documents/eg42.pdf> =item L<http://www.amwa.tv/downloads/specifications/aafobjectspec-v1.1.pdf> =item L<http://www.smpte-ra.org/mdd/RP210v12-publication-20100623.xls> =item L<http://rhea.tele.ucl.ac.be:8081/Plone/Members/egoray/thesaurus-dictionnaire-metadata/> =item L<http://www.mog-solutions.com/img_upload/PDF/XML%20Schema%20for%20MXF%20Metadata.pdf> =item L<http://www.freemxf.org/freemxf_board/viewtopic.php?p=545&sid=00a5c17e07d828c1e93ecdbaed3076f7> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/MXF Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Nikon.pm����������������������������������������������������000644 �000765 �000024 �00000755551 12643467606 021360� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Nikon.pm # # Description: Nikon EXIF maker notes tags # # Revisions: 12/09/2003 - P. Harvey Created # 05/17/2004 - P. Harvey Added information from Joseph Heled # 09/21/2004 - P. Harvey Changed tag 2 to ISOUsed & added PrintConv # 12/01/2004 - P. Harvey Added default PRINT_CONV # 01/01/2005 - P. Harvey Decode preview image and preview IFD # 03/35/2005 - T. Christiansen additions # 05/10/2005 - P. Harvey Decode encrypted lens data # [ongoing] - P. Harvey Constantly decoding new information # # References: 1) http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html # 2) Joseph Heled private communication (tests with D70) # 3) Thomas Walter private communication (tests with Coolpix 5400) # 4) http://www.cybercom.net/~dcoffin/dcraw/ # 5) Brian Ristuccia private communication (tests with D70) # 6) Danek Duvall private communication (tests with D70) # 7) Tom Christiansen private communication (tests with D70) # 8) Robert Rottmerhusen private communication # 9) http://members.aol.com/khancock/pilot/nbuddy/ # 10) Werner Kober private communication (D2H, D2X, D100, D70, D200, D90) # 11) http://www.rottmerhusen.com/objektives/lensid/thirdparty.html # 12) http://libexif.sourceforge.net/internals/mnote-olympus-tag_8h-source.html # 13) Roger Larsson private communication (tests with D200) # 14) http://homepage3.nifty.com/kamisaka/makernote/makernote_nikon.htm (2007/09/15) # 15) http://tomtia.plala.jp/DigitalCamera/MakerNote/index.asp # 16) Jeffrey Friedl private communication (D200 with firmware update) # 17) http://www.wohlberg.net/public/software/photo/nstiffexif/ # and Brendt Wohlberg private communication # 18) Anonymous user private communication (D70, D200, D2x) # 19) Bruce Stevens private communication # 20) Vladimir Sauta private communication (D80) # 21) Gregor Dorlars private communication (D300) # 22) Tanel Kuusk private communication # 23) Alexandre Naaman private communication (D3) # 24) Geert De Soete private communication # 25) Niels Kristian Bech Jensen private communication # 26) Bozi (http://www.cpanforum.com/posts/8983) # 27) Jens Kriese private communication # 28) Warren Hatch private communication (D3v2.00 with SB-800 and SB-900) # 29) Anonymous contribution 2011/05/25 (D700, D7000) # 30) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3833.30.html # 31) Michael Relt private communication # 32) Stefan http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4494.0.html # 33) Iliah Borg private communication (LibRaw) # 34) Stewart Bennett private communication (D4S, D810) # 35) David Puschel private communication # JD) Jens Duttke private communication #------------------------------------------------------------------------------ package Image::ExifTool::Nikon; use strict; use vars qw($VERSION %nikonLensIDs %nikonTextEncoding); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '3.14'; sub LensIDConv($$$); sub ProcessNikonAVI($$$); sub ProcessNikonMOV($$$); sub FormatString($); sub ProcessNikonCaptureEditVersions($$$); sub PrintAFPoints($$); sub PrintAFPointsInv($$$); sub PrintAFPointsGrid($$); sub PrintAFPointsGridInv($$$); sub GetAFPointGrid($$;$); # nikon lens ID numbers (ref 8/11) %nikonLensIDs = ( Notes => q{ The Nikon LensID is constructed as a Composite tag from the raw hex values of 8 other tags: LensIDNumber, LensFStops, MinFocalLength, MaxFocalLength, MaxApertureAtMinFocal, MaxApertureAtMaxFocal, MCUVersion and LensType, in that order. (source: L<http://www.rottmerhusen.com/objektives/lensid/thirdparty.html>.) Multiple lenses with the same LensID are differentiated by decimal values in the list below. The user-defined "Lenses" list may be used to specify the lens for ExifTool to choose in these cases (see the L<sample config file|../config.html> for details). }, OTHER => \&LensIDConv, # Note: Sync this list with Robert's Perl version at # http://www.rottmerhusen.com/objektives/lensid/files/exif/fmountlens.p.txt # (hex digits must be uppercase in keys below) '01 58 50 50 14 14 02 00' => 'AF Nikkor 50mm f/1.8', '01 58 50 50 14 14 05 00' => 'AF Nikkor 50mm f/1.8', '02 42 44 5C 2A 34 02 00' => 'AF Zoom-Nikkor 35-70mm f/3.3-4.5', '02 42 44 5C 2A 34 08 00' => 'AF Zoom-Nikkor 35-70mm f/3.3-4.5', '03 48 5C 81 30 30 02 00' => 'AF Zoom-Nikkor 70-210mm f/4', '04 48 3C 3C 24 24 03 00' => 'AF Nikkor 28mm f/2.8', '05 54 50 50 0C 0C 04 00' => 'AF Nikkor 50mm f/1.4', '06 54 53 53 24 24 06 00' => 'AF Micro-Nikkor 55mm f/2.8', '07 40 3C 62 2C 34 03 00' => 'AF Zoom-Nikkor 28-85mm f/3.5-4.5', '08 40 44 6A 2C 34 04 00' => 'AF Zoom-Nikkor 35-105mm f/3.5-4.5', '09 48 37 37 24 24 04 00' => 'AF Nikkor 24mm f/2.8', '0A 48 8E 8E 24 24 03 00' => 'AF Nikkor 300mm f/2.8 IF-ED', '0A 48 8E 8E 24 24 05 00' => 'AF Nikkor 300mm f/2.8 IF-ED N', '0B 48 7C 7C 24 24 05 00' => 'AF Nikkor 180mm f/2.8 IF-ED', '0D 40 44 72 2C 34 07 00' => 'AF Zoom-Nikkor 35-135mm f/3.5-4.5', '0E 48 5C 81 30 30 05 00' => 'AF Zoom-Nikkor 70-210mm f/4', '0F 58 50 50 14 14 05 00' => 'AF Nikkor 50mm f/1.8 N', '10 48 8E 8E 30 30 08 00' => 'AF Nikkor 300mm f/4 IF-ED', '11 48 44 5C 24 24 08 00' => 'AF Zoom-Nikkor 35-70mm f/2.8', '12 48 5C 81 30 3C 09 00' => 'AF Nikkor 70-210mm f/4-5.6', '13 42 37 50 2A 34 0B 00' => 'AF Zoom-Nikkor 24-50mm f/3.3-4.5', '14 48 60 80 24 24 0B 00' => 'AF Zoom-Nikkor 80-200mm f/2.8 ED', '15 4C 62 62 14 14 0C 00' => 'AF Nikkor 85mm f/1.8', '17 3C A0 A0 30 30 0F 00' => 'Nikkor 500mm f/4 P ED IF', '17 3C A0 A0 30 30 11 00' => 'Nikkor 500mm f/4 P ED IF', '18 40 44 72 2C 34 0E 00' => 'AF Zoom-Nikkor 35-135mm f/3.5-4.5 N', '1A 54 44 44 18 18 11 00' => 'AF Nikkor 35mm f/2', '1B 44 5E 8E 34 3C 10 00' => 'AF Zoom-Nikkor 75-300mm f/4.5-5.6', '1C 48 30 30 24 24 12 00' => 'AF Nikkor 20mm f/2.8', '1D 42 44 5C 2A 34 12 00' => 'AF Zoom-Nikkor 35-70mm f/3.3-4.5 N', '1E 54 56 56 24 24 13 00' => 'AF Micro-Nikkor 60mm f/2.8', '1F 54 6A 6A 24 24 14 00' => 'AF Micro-Nikkor 105mm f/2.8', '20 48 60 80 24 24 15 00' => 'AF Zoom-Nikkor 80-200mm f/2.8 ED', '21 40 3C 5C 2C 34 16 00' => 'AF Zoom-Nikkor 28-70mm f/3.5-4.5', '22 48 72 72 18 18 16 00' => 'AF DC-Nikkor 135mm f/2', '23 30 BE CA 3C 48 17 00' => 'Zoom-Nikkor 1200-1700mm f/5.6-8 P ED IF', '24 48 60 80 24 24 1A 02' => 'AF Zoom-Nikkor 80-200mm f/2.8D ED', '25 48 44 5C 24 24 1B 02' => 'AF Zoom-Nikkor 35-70mm f/2.8D', '25 48 44 5C 24 24 3A 02' => 'AF Zoom-Nikkor 35-70mm f/2.8D', '25 48 44 5C 24 24 52 02' => 'AF Zoom-Nikkor 35-70mm f/2.8D', '26 40 3C 5C 2C 34 1C 02' => 'AF Zoom-Nikkor 28-70mm f/3.5-4.5D', '27 48 8E 8E 24 24 1D 02' => 'AF-I Nikkor 300mm f/2.8D IF-ED', '27 48 8E 8E 24 24 F1 02' => 'AF-I Nikkor 300mm f/2.8D IF-ED + TC-14E', '27 48 8E 8E 24 24 E1 02' => 'AF-I Nikkor 300mm f/2.8D IF-ED + TC-17E', '27 48 8E 8E 24 24 F2 02' => 'AF-I Nikkor 300mm f/2.8D IF-ED + TC-20E', '28 3C A6 A6 30 30 1D 02' => 'AF-I Nikkor 600mm f/4D IF-ED', '28 3C A6 A6 30 30 F1 02' => 'AF-I Nikkor 600mm f/4D IF-ED + TC-14E', '28 3C A6 A6 30 30 E1 02' => 'AF-I Nikkor 600mm f/4D IF-ED + TC-17E', '28 3C A6 A6 30 30 F2 02' => 'AF-I Nikkor 600mm f/4D IF-ED + TC-20E', '2A 54 3C 3C 0C 0C 26 02' => 'AF Nikkor 28mm f/1.4D', '2B 3C 44 60 30 3C 1F 02' => 'AF Zoom-Nikkor 35-80mm f/4-5.6D', '2C 48 6A 6A 18 18 27 02' => 'AF DC-Nikkor 105mm f/2D', '2D 48 80 80 30 30 21 02' => 'AF Micro-Nikkor 200mm f/4D IF-ED', '2E 48 5C 82 30 3C 22 02' => 'AF Nikkor 70-210mm f/4-5.6D', '2E 48 5C 82 30 3C 28 02' => 'AF Nikkor 70-210mm f/4-5.6D', '2F 48 30 44 24 24 29 02.1' => 'AF Zoom-Nikkor 20-35mm f/2.8D IF', '30 48 98 98 24 24 24 02' => 'AF-I Nikkor 400mm f/2.8D IF-ED', '30 48 98 98 24 24 F1 02' => 'AF-I Nikkor 400mm f/2.8D IF-ED + TC-14E', '30 48 98 98 24 24 E1 02' => 'AF-I Nikkor 400mm f/2.8D IF-ED + TC-17E', '30 48 98 98 24 24 F2 02' => 'AF-I Nikkor 400mm f/2.8D IF-ED + TC-20E', '31 54 56 56 24 24 25 02' => 'AF Micro-Nikkor 60mm f/2.8D', '32 54 6A 6A 24 24 35 02.1' => 'AF Micro-Nikkor 105mm f/2.8D', '33 48 2D 2D 24 24 31 02' => 'AF Nikkor 18mm f/2.8D', '34 48 29 29 24 24 32 02' => 'AF Fisheye Nikkor 16mm f/2.8D', '35 3C A0 A0 30 30 33 02' => 'AF-I Nikkor 500mm f/4D IF-ED', '35 3C A0 A0 30 30 F1 02' => 'AF-I Nikkor 500mm f/4D IF-ED + TC-14E', '35 3C A0 A0 30 30 E1 02' => 'AF-I Nikkor 500mm f/4D IF-ED + TC-17E', '35 3C A0 A0 30 30 F2 02' => 'AF-I Nikkor 500mm f/4D IF-ED + TC-20E', '36 48 37 37 24 24 34 02' => 'AF Nikkor 24mm f/2.8D', '37 48 30 30 24 24 36 02' => 'AF Nikkor 20mm f/2.8D', '38 4C 62 62 14 14 37 02' => 'AF Nikkor 85mm f/1.8D', '3A 40 3C 5C 2C 34 39 02' => 'AF Zoom-Nikkor 28-70mm f/3.5-4.5D', '3B 48 44 5C 24 24 3A 02' => 'AF Zoom-Nikkor 35-70mm f/2.8D N', '3C 48 60 80 24 24 3B 02' => 'AF Zoom-Nikkor 80-200mm f/2.8D ED', #25 '3D 3C 44 60 30 3C 3E 02' => 'AF Zoom-Nikkor 35-80mm f/4-5.6D', '3E 48 3C 3C 24 24 3D 02' => 'AF Nikkor 28mm f/2.8D', '3F 40 44 6A 2C 34 45 02' => 'AF Zoom-Nikkor 35-105mm f/3.5-4.5D', '41 48 7C 7C 24 24 43 02' => 'AF Nikkor 180mm f/2.8D IF-ED', '42 54 44 44 18 18 44 02' => 'AF Nikkor 35mm f/2D', '43 54 50 50 0C 0C 46 02' => 'AF Nikkor 50mm f/1.4D', '44 44 60 80 34 3C 47 02' => 'AF Zoom-Nikkor 80-200mm f/4.5-5.6D', '45 40 3C 60 2C 3C 48 02' => 'AF Zoom-Nikkor 28-80mm f/3.5-5.6D', '46 3C 44 60 30 3C 49 02' => 'AF Zoom-Nikkor 35-80mm f/4-5.6D N', '47 42 37 50 2A 34 4A 02' => 'AF Zoom-Nikkor 24-50mm f/3.3-4.5D', '48 48 8E 8E 24 24 4B 02' => 'AF-S Nikkor 300mm f/2.8D IF-ED', '48 48 8E 8E 24 24 F1 02' => 'AF-S Nikkor 300mm f/2.8D IF-ED + TC-14E', '48 48 8E 8E 24 24 E1 02' => 'AF-S Nikkor 300mm f/2.8D IF-ED + TC-17E', '48 48 8E 8E 24 24 F2 02' => 'AF-S Nikkor 300mm f/2.8D IF-ED + TC-20E', '49 3C A6 A6 30 30 4C 02' => 'AF-S Nikkor 600mm f/4D IF-ED', '49 3C A6 A6 30 30 F1 02' => 'AF-S Nikkor 600mm f/4D IF-ED + TC-14E', '49 3C A6 A6 30 30 E1 02' => 'AF-S Nikkor 600mm f/4D IF-ED + TC-17E', '49 3C A6 A6 30 30 F2 02' => 'AF-S Nikkor 600mm f/4D IF-ED + TC-20E', '4A 54 62 62 0C 0C 4D 02' => 'AF Nikkor 85mm f/1.4D IF', '4B 3C A0 A0 30 30 4E 02' => 'AF-S Nikkor 500mm f/4D IF-ED', '4B 3C A0 A0 30 30 F1 02' => 'AF-S Nikkor 500mm f/4D IF-ED + TC-14E', '4B 3C A0 A0 30 30 E1 02' => 'AF-S Nikkor 500mm f/4D IF-ED + TC-17E', '4B 3C A0 A0 30 30 F2 02' => 'AF-S Nikkor 500mm f/4D IF-ED + TC-20E', '4C 40 37 6E 2C 3C 4F 02' => 'AF Zoom-Nikkor 24-120mm f/3.5-5.6D IF', '4D 40 3C 80 2C 3C 62 02' => 'AF Zoom-Nikkor 28-200mm f/3.5-5.6D IF', '4E 48 72 72 18 18 51 02' => 'AF DC-Nikkor 135mm f/2D', '4F 40 37 5C 2C 3C 53 06' => 'IX-Nikkor 24-70mm f/3.5-5.6', '50 48 56 7C 30 3C 54 06' => 'IX-Nikkor 60-180mm f/4-5.6', '52 54 44 44 18 18 00 00' => 'Zeiss Milvus 35mm f/2', #33 '53 48 60 80 24 24 57 02' => 'AF Zoom-Nikkor 80-200mm f/2.8D ED', '53 48 60 80 24 24 60 02' => 'AF Zoom-Nikkor 80-200mm f/2.8D ED', '54 44 5C 7C 34 3C 58 02' => 'AF Zoom-Micro Nikkor 70-180mm f/4.5-5.6D ED', '54 44 5C 7C 34 3C 61 02' => 'AF Zoom-Micro Nikkor 70-180mm f/4.5-5.6D ED', '54 54 50 50 18 18 00 00' => 'Zeiss Milvus 50mm f/2 Makro', #33 '56 48 5C 8E 30 3C 5A 02' => 'AF Zoom-Nikkor 70-300mm f/4-5.6D ED', '56 54 68 68 18 18 00 00' => 'Zeiss Milvus 100mm f/2 Makro', #33 '59 48 98 98 24 24 5D 02' => 'AF-S Nikkor 400mm f/2.8D IF-ED', '59 48 98 98 24 24 F1 02' => 'AF-S Nikkor 400mm f/2.8D IF-ED + TC-14E', '59 48 98 98 24 24 E1 02' => 'AF-S Nikkor 400mm f/2.8D IF-ED + TC-17E', '59 48 98 98 24 24 F2 02' => 'AF-S Nikkor 400mm f/2.8D IF-ED + TC-20E', '5A 3C 3E 56 30 3C 5E 06' => 'IX-Nikkor 30-60mm f/4-5.6', '5B 44 56 7C 34 3C 5F 06' => 'IX-Nikkor 60-180mm f/4.5-5.6', '5D 48 3C 5C 24 24 63 02' => 'AF-S Zoom-Nikkor 28-70mm f/2.8D IF-ED', '5E 48 60 80 24 24 64 02' => 'AF-S Zoom-Nikkor 80-200mm f/2.8D IF-ED', '5F 40 3C 6A 2C 34 65 02' => 'AF Zoom-Nikkor 28-105mm f/3.5-4.5D IF', '60 40 3C 60 2C 3C 66 02' => 'AF Zoom-Nikkor 28-80mm f/3.5-5.6D', #(http://www.exif.org/forum/topic.asp?TOPIC_ID=16) '61 44 5E 86 34 3C 67 02' => 'AF Zoom-Nikkor 75-240mm f/4.5-5.6D', '63 48 2B 44 24 24 68 02' => 'AF-S Nikkor 17-35mm f/2.8D IF-ED', '64 00 62 62 24 24 6A 02' => 'PC Micro-Nikkor 85mm f/2.8D', '65 44 60 98 34 3C 6B 0A' => 'AF VR Zoom-Nikkor 80-400mm f/4.5-5.6D ED', '66 40 2D 44 2C 34 6C 02' => 'AF Zoom-Nikkor 18-35mm f/3.5-4.5D IF-ED', '67 48 37 62 24 30 6D 02' => 'AF Zoom-Nikkor 24-85mm f/2.8-4D IF', '68 42 3C 60 2A 3C 6E 06' => 'AF Zoom-Nikkor 28-80mm f/3.3-5.6G', '69 48 5C 8E 30 3C 6F 06' => 'AF Zoom-Nikkor 70-300mm f/4-5.6G', '6A 48 8E 8E 30 30 70 02' => 'AF-S Nikkor 300mm f/4D IF-ED', '6B 48 24 24 24 24 71 02' => 'AF Nikkor ED 14mm f/2.8D', '6D 48 8E 8E 24 24 73 02' => 'AF-S Nikkor 300mm f/2.8D IF-ED II', '6E 48 98 98 24 24 74 02' => 'AF-S Nikkor 400mm f/2.8D IF-ED II', '6F 3C A0 A0 30 30 75 02' => 'AF-S Nikkor 500mm f/4D IF-ED II', '70 3C A6 A6 30 30 76 02' => 'AF-S Nikkor 600mm f/4D IF-ED II', '72 48 4C 4C 24 24 77 00' => 'Nikkor 45mm f/2.8 P', '74 40 37 62 2C 34 78 06' => 'AF-S Zoom-Nikkor 24-85mm f/3.5-4.5G IF-ED', '75 40 3C 68 2C 3C 79 06' => 'AF Zoom-Nikkor 28-100mm f/3.5-5.6G', '76 58 50 50 14 14 7A 02' => 'AF Nikkor 50mm f/1.8D', '77 48 5C 80 24 24 7B 0E' => 'AF-S VR Zoom-Nikkor 70-200mm f/2.8G IF-ED', '78 40 37 6E 2C 3C 7C 0E' => 'AF-S VR Zoom-Nikkor 24-120mm f/3.5-5.6G IF-ED', '79 40 3C 80 2C 3C 7F 06' => 'AF Zoom-Nikkor 28-200mm f/3.5-5.6G IF-ED', '7A 3C 1F 37 30 30 7E 06.1' => 'AF-S DX Zoom-Nikkor 12-24mm f/4G IF-ED', '7B 48 80 98 30 30 80 0E' => 'AF-S VR Zoom-Nikkor 200-400mm f/4G IF-ED', '7D 48 2B 53 24 24 82 06' => 'AF-S DX Zoom-Nikkor 17-55mm f/2.8G IF-ED', '7F 40 2D 5C 2C 34 84 06' => 'AF-S DX Zoom-Nikkor 18-70mm f/3.5-4.5G IF-ED', '80 48 1A 1A 24 24 85 06' => 'AF DX Fisheye-Nikkor 10.5mm f/2.8G ED', '81 54 80 80 18 18 86 0E' => 'AF-S VR Nikkor 200mm f/2G IF-ED', '82 48 8E 8E 24 24 87 0E' => 'AF-S VR Nikkor 300mm f/2.8G IF-ED', '83 00 B0 B0 5A 5A 88 04' => 'FSA-L2, EDG 65, 800mm F13 G', '89 3C 53 80 30 3C 8B 06' => 'AF-S DX Zoom-Nikkor 55-200mm f/4-5.6G ED', '8A 54 6A 6A 24 24 8C 0E' => 'AF-S VR Micro-Nikkor 105mm f/2.8G IF-ED', #10 # when the TC-20 III 2x teleconverter is used with the above lens, the following have been observed: # 8A 4D 6A 6A 24 24 8C 0E # 8A 4E 6A 6A 24 24 8C 0E # 8A 50 6A 6A 24 24 8C 0E # 8A 51 6A 6A 24 24 8C 0E # 8A 52 6A 6A 24 24 8C 0E # 8A 53 6A 6A 24 24 8C 0E # 8A 54 6A 6A 24 24 8C 0E (same as without the TC) '8B 40 2D 80 2C 3C 8D 0E' => 'AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED', '8B 40 2D 80 2C 3C FD 0E' => 'AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED [II]', #20 '8C 40 2D 53 2C 3C 8E 06' => 'AF-S DX Zoom-Nikkor 18-55mm f/3.5-5.6G ED', '8D 44 5C 8E 34 3C 8F 0E' => 'AF-S VR Zoom-Nikkor 70-300mm f/4.5-5.6G IF-ED', #10 '8F 40 2D 72 2C 3C 91 06' => 'AF-S DX Zoom-Nikkor 18-135mm f/3.5-5.6G IF-ED', '90 3B 53 80 30 3C 92 0E' => 'AF-S DX VR Zoom-Nikkor 55-200mm f/4-5.6G IF-ED', '92 48 24 37 24 24 94 06' => 'AF-S Zoom-Nikkor 14-24mm f/2.8G ED', '93 48 37 5C 24 24 95 06' => 'AF-S Zoom-Nikkor 24-70mm f/2.8G ED', '94 40 2D 53 2C 3C 96 06' => 'AF-S DX Zoom-Nikkor 18-55mm f/3.5-5.6G ED II', #10 (D40) '95 4C 37 37 2C 2C 97 02' => 'PC-E Nikkor 24mm f/3.5D ED', '95 00 37 37 2C 2C 97 06' => 'PC-E Nikkor 24mm f/3.5D ED', #JD '96 48 98 98 24 24 98 0E' => 'AF-S VR Nikkor 400mm f/2.8G ED', '97 3C A0 A0 30 30 99 0E' => 'AF-S VR Nikkor 500mm f/4G ED', '98 3C A6 A6 30 30 9A 0E' => 'AF-S VR Nikkor 600mm f/4G ED', '99 40 29 62 2C 3C 9B 0E' => 'AF-S DX VR Zoom-Nikkor 16-85mm f/3.5-5.6G ED', '9A 40 2D 53 2C 3C 9C 0E' => 'AF-S DX VR Zoom-Nikkor 18-55mm f/3.5-5.6G', '9B 54 4C 4C 24 24 9D 02' => 'PC-E Micro Nikkor 45mm f/2.8D ED', '9B 00 4C 4C 24 24 9D 06' => 'PC-E Micro Nikkor 45mm f/2.8D ED', '9C 54 56 56 24 24 9E 06' => 'AF-S Micro Nikkor 60mm f/2.8G ED', '9D 54 62 62 24 24 9F 02' => 'PC-E Micro Nikkor 85mm f/2.8D', '9D 00 62 62 24 24 9F 06' => 'PC-E Micro Nikkor 85mm f/2.8D', '9E 40 2D 6A 2C 3C A0 0E' => 'AF-S DX VR Zoom-Nikkor 18-105mm f/3.5-5.6G ED', #PH/10 '9F 58 44 44 14 14 A1 06' => 'AF-S DX Nikkor 35mm f/1.8G', #27 'A0 54 50 50 0C 0C A2 06' => 'AF-S Nikkor 50mm f/1.4G', 'A1 40 18 37 2C 34 A3 06' => 'AF-S DX Nikkor 10-24mm f/3.5-4.5G ED', 'A2 48 5C 80 24 24 A4 0E' => 'AF-S Nikkor 70-200mm f/2.8G ED VR II', 'A3 3C 29 44 30 30 A5 0E' => 'AF-S Nikkor 16-35mm f/4G ED VR', 'A4 54 37 37 0C 0C A6 06' => 'AF-S Nikkor 24mm f/1.4G ED', 'A5 40 3C 8E 2C 3C A7 0E' => 'AF-S Nikkor 28-300mm f/3.5-5.6G ED VR', 'A6 48 8E 8E 24 24 A8 0E' => 'AF-S VR Nikkor 300mm f/2.8G IF-ED II', 'A7 4B 62 62 2C 2C A9 0E' => 'AF-S DX Micro Nikkor 85mm f/3.5G ED VR', 'A8 48 80 98 30 30 AA 0E' => 'AF-S VR Zoom-Nikkor 200-400mm f/4G IF-ED II', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3218.msg15495.html#msg15495 'A9 54 80 80 18 18 AB 0E' => 'AF-S Nikkor 200mm f/2G ED VR II', 'AA 3C 37 6E 30 30 AC 0E' => 'AF-S Nikkor 24-120mm f/4G ED VR', 'AC 38 53 8E 34 3C AE 0E' => 'AF-S DX VR Nikkor 55-300mm f/4.5-5.6G ED', 'AD 3C 2D 8E 2C 3C AF 0E' => 'AF-S DX Nikkor 18-300mm f/3.5-5.6G ED VR', 'AE 54 62 62 0C 0C B0 06' => 'AF-S Nikkor 85mm f/1.4G', 'AF 54 44 44 0C 0C B1 06' => 'AF-S Nikkor 35mm f/1.4G', 'B0 4C 50 50 14 14 B2 06' => 'AF-S Nikkor 50mm f/1.8G', 'B1 48 48 48 24 24 B3 06' => 'AF-S DX Micro Nikkor 40mm f/2.8G', #27 'B2 48 5C 80 30 30 B4 0E' => 'AF-S Nikkor 70-200mm f/4G ED VR', #35 'B3 4C 62 62 14 14 B5 06' => 'AF-S Nikkor 85mm f/1.8G', 'B4 40 37 62 2C 34 B6 0E' => 'AF-S VR Zoom-Nikkor 24-85mm f/3.5-4.5G IF-ED', #30 'B5 4C 3C 3C 14 14 B7 06' => 'AF-S Nikkor 28mm f/1.8G', #30 'B7 44 60 98 34 3C B9 0E' => 'AF-S Nikkor 80-400mm f/4.5-5.6G ED VR', 'B8 40 2D 44 2C 34 BA 06' => 'AF-S Nikkor 18-35mm f/3.5-4.5G ED', 'A0 40 2D 74 2C 3C BB 0E' => 'AF-S DX Nikkor 18-140mm f/3.5-5.6G ED VR', #PH 'A1 54 55 55 0C 0C BC 06' => 'AF-S Nikkor 58mm f/1.4G', #33 'A2 40 2D 53 2C 3C BD 0E' => 'AF-S DX VR Nikkor 18-55mm f/3.5-5.6G II', 'A4 40 2D 8E 2C 40 BF 0E' => 'AF-S DX Nikkor 18-300mm f/3.5-6.3G ED VR', 'A5 4C 44 44 14 14 C0 06' => 'AF-S Nikkor 35mm f/1.8G', #35 'A7 3C 53 80 30 3C C2 0E' => 'AF-S DX Nikkor 55-200mm f/4-5.6G ED VR II', #33 'A8 48 8E 8E 30 30 C3 4E' => 'AF-S Nikkor 300mm f/4E PF ED VR', #35 'A8 48 8E 8E 30 30 C3 0E' => 'AF-S Nikkor 300mm f/4E PF ED VR', #30 'A9 4C 31 31 14 14 C4 06' => 'AF-S Nikkor 20mm f/1.8G ED', #30 'AA 48 37 5C 24 24 C5 4E' => 'AF-S Nikkor 24-70mm f/2.8E ED VR', 'AC 3C A6 A6 30 30 C7 4E' => 'AF-S Nikkor 600mm f/4E FL ED VR', #PH 'AD 48 28 60 24 30 C8 4E' => 'AF-S VR DX 16-80mm f/2.8-4.0E ED', 'AE 3C 80 A0 3C 3C C9 4E' => 'AF-S Nikkor 200-500mm f/5.6E ED VR', #PH 'AE 3C 80 A0 3C 3C C9 0E' => 'AF-S Nikkor 200-500mm f/5.6E ED VR', 'AF 4C 37 37 14 14 CC 06' => 'AF-S Nikkor 24mm f/1.8G ED', #33 '01 00 00 00 00 00 02 00' => 'TC-16A', '01 00 00 00 00 00 08 00' => 'TC-16A', '00 00 00 00 00 00 F1 0C' => 'TC-14E [II] or Sigma APO Tele Converter 1.4x EX DG or Kenko Teleplus PRO 300 DG 1.4x', '00 00 00 00 00 00 F2 18' => 'TC-20E [II] or Sigma APO Tele Converter 2x EX DG or Kenko Teleplus PRO 300 DG 2.0x', '00 00 00 00 00 00 E1 12' => 'TC-17E II', 'FE 47 00 00 24 24 4B 06' => 'Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye', #JD '26 48 11 11 30 30 1C 02' => 'Sigma 8mm F4 EX Circular Fisheye', '79 40 11 11 2C 2C 1C 06' => 'Sigma 8mm F3.5 EX Circular Fisheye', #JD 'DC 48 19 19 24 24 4B 06' => 'Sigma 10mm F2.8 EX DC HSM Fisheye', '02 3F 24 24 2C 2C 02 00' => 'Sigma 14mm F3.5', '48 48 24 24 24 24 4B 02' => 'Sigma 14mm F2.8 EX Aspherical HSM', '26 48 27 27 24 24 1C 02' => 'Sigma 15mm F2.8 EX Diagonal Fisheye', 'EA 48 27 27 24 24 1C 02' => 'Sigma 15mm F2.8 EX Diagonal Fisheye', #30 '26 58 31 31 14 14 1C 02' => 'Sigma 20mm F1.8 EX DG Aspherical RF', '26 58 37 37 14 14 1C 02' => 'Sigma 24mm F1.8 EX DG Aspherical Macro', 'E1 58 37 37 14 14 1C 02' => 'Sigma 24mm F1.8 EX DG Aspherical Macro', '02 46 37 37 25 25 02 00' => 'Sigma 24mm F2.8 Super Wide II Macro', '26 58 3C 3C 14 14 1C 02' => 'Sigma 28mm F1.8 EX DG Aspherical Macro', '48 54 3E 3E 0C 0C 4B 06' => 'Sigma 30mm F1.4 EX DC HSM', 'F8 54 3E 3E 0C 0C 4B 06' => 'Sigma 30mm F1.4 EX DC HSM', #JD '91 54 44 44 0C 0C 4B 06' => 'Sigma 35mm F1.4 DG HSM', #30 'DE 54 50 50 0C 0C 4B 06' => 'Sigma 50mm F1.4 EX DG HSM', '88 54 50 50 0C 0C 4B 06' => 'Sigma 50mm F1.4 DG HSM | A', '02 48 50 50 24 24 02 00' => 'Sigma Macro 50mm F2.8', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4027.0.html '32 54 50 50 24 24 35 02' => 'Sigma Macro 50mm F2.8 EX DG', 'E3 54 50 50 24 24 35 02' => 'Sigma Macro 50mm F2.8 EX DG', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3215.0.html '79 48 5C 5C 24 24 1C 06' => 'Sigma Macro 70mm F2.8 EX DG', #JD '9B 54 62 62 0C 0C 4B 06' => 'Sigma 85mm F1.4 EX DG HSM', '02 48 65 65 24 24 02 00' => 'Sigma Macro 90mm F2.8', '32 54 6A 6A 24 24 35 02.2' => 'Sigma Macro 105mm F2.8 EX DG', #JD 'E5 54 6A 6A 24 24 35 02' => 'Sigma Macro 105mm F2.8 EX DG', '97 48 6A 6A 24 24 4B 0E' => 'Sigma Macro 105mm F2.8 EX DG OS HSM', '48 48 76 76 24 24 4B 06' => 'Sigma APO Macro 150mm F2.8 EX DG HSM', 'F5 48 76 76 24 24 4B 06' => 'Sigma APO Macro 150mm F2.8 EX DG HSM', #24 '99 48 76 76 24 24 4B 0E' => 'Sigma APO Macro 150mm F2.8 EX DG OS HSM', #(Christian Hesse) '48 4C 7C 7C 2C 2C 4B 02' => 'Sigma APO Macro 180mm F3.5 EX DG HSM', '48 4C 7D 7D 2C 2C 4B 02' => 'Sigma APO Macro 180mm F3.5 EX DG HSM', '48 54 8E 8E 24 24 4B 02' => 'Sigma APO 300mm F2.8 EX DG HSM', 'FB 54 8E 8E 24 24 4B 02' => 'Sigma APO 300mm F2.8 EX DG HSM', #26 '26 48 8E 8E 30 30 1C 02' => 'Sigma APO Tele Macro 300mm F4', '02 2F 98 98 3D 3D 02 00' => 'Sigma APO 400mm F5.6', '26 3C 98 98 3C 3C 1C 02' => 'Sigma APO Tele Macro 400mm F5.6', '02 37 A0 A0 34 34 02 00' => 'Sigma APO 500mm F4.5', #19 '48 44 A0 A0 34 34 4B 02' => 'Sigma APO 500mm F4.5 EX HSM', 'F1 44 A0 A0 34 34 4B 02' => 'Sigma APO 500mm F4.5 EX DG HSM', '02 34 A0 A0 44 44 02 00' => 'Sigma APO 500mm F7.2', '02 3C B0 B0 3C 3C 02 00' => 'Sigma APO 800mm F5.6', '48 3C B0 B0 3C 3C 4B 02' => 'Sigma APO 800mm F5.6 EX HSM', '9E 38 11 29 34 3C 4B 06' => 'Sigma 8-16mm F4.5-5.6 DC HSM', 'A1 41 19 31 2C 2C 4B 06' => 'Sigma 10-20mm F3.5 EX DC HSM', '48 3C 19 31 30 3C 4B 06' => 'Sigma 10-20mm F4-5.6 EX DC HSM', 'F9 3C 19 31 30 3C 4B 06' => 'Sigma 10-20mm F4-5.6 EX DC HSM', #JD '48 38 1F 37 34 3C 4B 06' => 'Sigma 12-24mm F4.5-5.6 EX DG Aspherical HSM', 'F0 38 1F 37 34 3C 4B 06' => 'Sigma 12-24mm F4.5-5.6 EX DG Aspherical HSM', '96 38 1F 37 34 3C 4B 06' => 'Sigma 12-24mm F4.5-5.6 II DG HSM', #Jurgen Sahlberg '26 40 27 3F 2C 34 1C 02' => 'Sigma 15-30mm F3.5-4.5 EX DG Aspherical DF', '48 48 2B 44 24 30 4B 06' => 'Sigma 17-35mm F2.8-4 EX DG Aspherical HSM', '26 54 2B 44 24 30 1C 02' => 'Sigma 17-35mm F2.8-4 EX Aspherical', '9D 48 2B 50 24 24 4B 0E' => 'Sigma 17-50mm F2.8 EX DC OS HSM', '8F 48 2B 50 24 24 4B 0E' => 'Sigma 17-50mm F2.8 EX DC OS HSM', #http://dev.exiv2.org/boards/3/topics/1747 '7A 47 2B 5C 24 34 4B 06' => 'Sigma 17-70mm F2.8-4.5 DC Macro Asp. IF HSM', '7A 48 2B 5C 24 34 4B 06' => 'Sigma 17-70mm F2.8-4.5 DC Macro Asp. IF HSM', '7F 48 2B 5C 24 34 1C 06' => 'Sigma 17-70mm F2.8-4.5 DC Macro Asp. IF', '8E 3C 2B 5C 24 30 4B 0E' => 'Sigma 17-70mm F2.8-4 DC Macro OS HSM Contemporary', 'A0 48 2A 5C 24 30 4B 0E' => 'Sigma 17-70mm F2.8-4 DC Macro OS HSM', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5170.0.html '8B 4C 2D 44 14 14 4B 06' => 'Sigma 18-35mm F1.8 DC HSM', #30/25 '26 40 2D 44 2B 34 1C 02' => 'Sigma 18-35mm F3.5-4.5 Aspherical', '26 48 2D 50 24 24 1C 06' => 'Sigma 18-50mm F2.8 EX DC', '7F 48 2D 50 24 24 1C 06' => 'Sigma 18-50mm F2.8 EX DC Macro', #25 '7A 48 2D 50 24 24 4B 06' => 'Sigma 18-50mm F2.8 EX DC Macro', 'F6 48 2D 50 24 24 4B 06' => 'Sigma 18-50mm F2.8 EX DC Macro', 'A4 47 2D 50 24 34 4B 0E' => 'Sigma 18-50mm F2.8-4.5 DC OS HSM', '26 40 2D 50 2C 3C 1C 06' => 'Sigma 18-50mm F3.5-5.6 DC', '7A 40 2D 50 2C 3C 4B 06' => 'Sigma 18-50mm F3.5-5.6 DC HSM', '26 40 2D 70 2B 3C 1C 06' => 'Sigma 18-125mm F3.5-5.6 DC', 'CD 3D 2D 70 2E 3C 4B 0E' => 'Sigma 18-125mm F3.8-5.6 DC OS HSM', '26 40 2D 80 2C 40 1C 06' => 'Sigma 18-200mm F3.5-6.3 DC', 'FF 40 2D 80 2C 40 4B 06' => 'Sigma 18-200mm F3.5-6.3 DC', #30 '7A 40 2D 80 2C 40 4B 0E' => 'Sigma 18-200mm F3.5-6.3 DC OS HSM', 'ED 40 2D 80 2C 40 4B 0E' => 'Sigma 18-200mm F3.5-6.3 DC OS HSM', #JD '90 40 2D 80 2C 40 4B 0E' => 'Sigma 18-200mm F3.5-6.3 II DC OS HSM', #JohnHelour 'A5 40 2D 88 2C 40 4B 0E' => 'Sigma 18-250mm F3.5-6.3 DC OS HSM', # LensFStops varies with FocalLength for this lens (ref 2): '92 2C 2D 88 2C 40 4B 0E' => 'Sigma 18-250mm F3.5-6.3 DC Macro OS HSM', #2 # '92 2C 2D 88 2C 40 4B 0E' (250mm) # '92 2B 2D 88 2C 40 4B 0E' (210mm) # '92 2C 2D 88 2C 40 4B 0E' (185mm) # '92 2D 2D 88 2C 40 4B 0E' (155mm) # '92 2E 2D 88 2C 40 4B 0E' (130mm) # '92 2F 2D 88 2C 40 4B 0E' (105mm) # '92 30 2D 88 2C 40 4B 0E' (90mm) # '92 32 2D 88 2C 40 4B 0E' (75mm) # '92 33 2D 88 2C 40 4B 0E' (62mm) # '92 35 2D 88 2C 40 4B 0E' (52mm) # '92 37 2D 88 2C 40 4B 0E' (44mm) # '92 39 2D 88 2C 40 4B 0E' (38mm) # '92 3A 2D 88 2C 40 4B 0E' (32mm) # '92 3E 2D 88 2C 40 4B 0E' (22mm) # '92 40 2D 88 2C 40 4B 0E' (18mm) '26 48 31 49 24 24 1C 02' => 'Sigma 20-40mm F2.8', '02 3A 37 50 31 3D 02 00' => 'Sigma 24-50mm F4-5.6 UC', '26 48 37 56 24 24 1C 02' => 'Sigma 24-60mm F2.8 EX DG', 'B6 48 37 56 24 24 1C 02' => 'Sigma 24-60mm F2.8 EX DG', 'A6 48 37 5C 24 24 4B 06' => 'Sigma 24-70mm F2.8 IF EX DG HSM', #JD '26 54 37 5C 24 24 1C 02' => 'Sigma 24-70mm F2.8 EX DG Macro', '67 54 37 5C 24 24 1C 02' => 'Sigma 24-70mm F2.8 EX DG Macro', 'E9 54 37 5C 24 24 1C 02' => 'Sigma 24-70mm F2.8 EX DG Macro', '26 40 37 5C 2C 3C 1C 02' => 'Sigma 24-70mm F3.5-5.6 Aspherical HF', '8A 3C 37 6A 30 30 4B 0E' => 'Sigma 24-105mm F4 DG OS HSM', #33 '26 54 37 73 24 34 1C 02' => 'Sigma 24-135mm F2.8-4.5', '02 46 3C 5C 25 25 02 00' => 'Sigma 28-70mm F2.8', '26 54 3C 5C 24 24 1C 02' => 'Sigma 28-70mm F2.8 EX', '26 48 3C 5C 24 24 1C 06' => 'Sigma 28-70mm F2.8 EX DG', '79 48 3C 5C 24 24 1C 06' => 'Sigma 28-70mm F2.8 EX DG', #30 ("D" removed) '26 48 3C 5C 24 30 1C 02' => 'Sigma 28-70mm F2.8-4 DG', '02 3F 3C 5C 2D 35 02 00' => 'Sigma 28-70mm F3.5-4.5 UC', '26 40 3C 60 2C 3C 1C 02' => 'Sigma 28-80mm F3.5-5.6 Mini Zoom Macro II Aspherical', '26 40 3C 65 2C 3C 1C 02' => 'Sigma 28-90mm F3.5-5.6 Macro', '26 48 3C 6A 24 30 1C 02' => 'Sigma 28-105mm F2.8-4 Aspherical', '26 3E 3C 6A 2E 3C 1C 02' => 'Sigma 28-105mm F3.8-5.6 UC-III Aspherical IF', '26 40 3C 80 2C 3C 1C 02' => 'Sigma 28-200mm F3.5-5.6 Compact Aspherical Hyperzoom Macro', '26 40 3C 80 2B 3C 1C 02' => 'Sigma 28-200mm F3.5-5.6 Compact Aspherical Hyperzoom Macro', '26 3D 3C 80 2F 3D 1C 02' => 'Sigma 28-300mm F3.8-5.6 Aspherical', '26 41 3C 8E 2C 40 1C 02' => 'Sigma 28-300mm F3.5-6.3 DG Macro', 'E6 41 3C 8E 2C 40 1C 02' => 'Sigma 28-300mm F3.5-6.3 DG Macro', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3301.0.html '26 40 3C 8E 2C 40 1C 02' => 'Sigma 28-300mm F3.5-6.3 Macro', '02 3B 44 61 30 3D 02 00' => 'Sigma 35-80mm F4-5.6', '02 40 44 73 2B 36 02 00' => 'Sigma 35-135mm F3.5-4.5 a', '7A 47 50 76 24 24 4B 06' => 'Sigma 50-150mm F2.8 EX APO DC HSM', 'FD 47 50 76 24 24 4B 06' => 'Sigma 50-150mm F2.8 EX APO DC HSM II', '98 48 50 76 24 24 4B 0E' => 'Sigma 50-150mm F2.8 EX APO DC OS HSM', #30 '48 3C 50 A0 30 40 4B 02' => 'Sigma 50-500mm F4-6.3 EX APO RF HSM', '9F 37 50 A0 34 40 4B 0E' => 'Sigma 50-500mm F4.5-6.3 DG OS HSM', #16 '26 3C 54 80 30 3C 1C 06' => 'Sigma 55-200mm F4-5.6 DC', '7A 3B 53 80 30 3C 4B 06' => 'Sigma 55-200mm F4-5.6 DC HSM', '48 54 5C 80 24 24 4B 02' => 'Sigma 70-200mm F2.8 EX APO IF HSM', '7A 48 5C 80 24 24 4B 06' => 'Sigma 70-200mm F2.8 EX APO DG Macro HSM II', 'EE 48 5C 80 24 24 4B 06' => 'Sigma 70-200mm F2.8 EX APO DG Macro HSM II', #JD '9C 48 5C 80 24 24 4B 0E' => 'Sigma 70-200mm F2.8 EX DG OS HSM', #Rolando Ruzic '02 46 5C 82 25 25 02 00' => 'Sigma 70-210mm F2.8 APO', #JD '02 40 5C 82 2C 35 02 00' => 'Sigma APO 70-210mm F3.5-4.5', '26 3C 5C 82 30 3C 1C 02' => 'Sigma 70-210mm F4-5.6 UC-II', '26 3C 5C 8E 30 3C 1C 02' => 'Sigma 70-300mm F4-5.6 DG Macro', '56 3C 5C 8E 30 3C 1C 02' => 'Sigma 70-300mm F4-5.6 APO Macro Super II', 'E0 3C 5C 8E 30 3C 4B 06' => 'Sigma 70-300mm F4-5.6 APO DG Macro HSM', #22 'A3 3C 5C 8E 30 3C 4B 0E' => 'Sigma 70-300mm F4-5.6 DG OS', '02 37 5E 8E 35 3D 02 00' => 'Sigma 75-300mm F4.5-5.6 APO', '02 3A 5E 8E 32 3D 02 00' => 'Sigma 75-300mm F4.0-5.6', '77 44 61 98 34 3C 7B 0E' => 'Sigma 80-400mm F4.5-5.6 EX OS', '48 48 68 8E 30 30 4B 02' => 'Sigma APO 100-300mm F4 EX IF HSM', 'F3 48 68 8E 30 30 4B 02' => 'Sigma APO 100-300mm F4 EX IF HSM', '48 54 6F 8E 24 24 4B 02' => 'Sigma APO 120-300mm F2.8 EX DG HSM', '7A 54 6E 8E 24 24 4B 02' => 'Sigma APO 120-300mm F2.8 EX DG HSM', 'FA 54 6E 8E 24 24 4B 02' => 'Sigma APO 120-300mm F2.8 EX DG HSM', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,2787.0.html 'CF 38 6E 98 34 3C 4B 0E' => 'Sigma APO 120-400mm F4.5-5.6 DG OS HSM', '26 44 73 98 34 3C 1C 02' => 'Sigma 135-400mm F4.5-5.6 APO Aspherical', 'CE 34 76 A0 38 40 4B 0E' => 'Sigma 150-500mm F5-6.3 DG OS APO HSM', #JD '81 34 76 A6 38 40 4B 0E' => 'Sigma 150-600mm F5-6.3 DG OS HSM | S', #Jaap Voets '82 34 76 A6 38 40 4B 0E' => 'Sigma 150-600mm F5-6.3 DG OS HSM | C', '26 40 7B A0 34 40 1C 02' => 'Sigma APO 170-500mm F5-6.3 Aspherical RF', 'A7 49 80 A0 24 24 4B 06' => 'Sigma APO 200-500mm F2.8 EX DG', '48 3C 8E B0 3C 3C 4B 02' => 'Sigma APO 300-800mm F5.6 EX DG HSM', # '00 47 25 25 24 24 00 02' => 'Tamron SP AF 14mm f/2.8 Aspherical (IF) (69E)', 'E8 4C 44 44 14 14 DF 0E' => 'Tamron SP 35mm f/1.8 VC', #35 'F4 54 56 56 18 18 84 06' => 'Tamron SP AF 60mm f/2.0 Di II Macro 1:1 (G005)', #24 '1E 5D 64 64 20 20 13 00' => 'Tamron SP AF 90mm f/2.5 (52E)', '20 5A 64 64 20 20 14 00' => 'Tamron SP AF 90mm f/2.5 Macro (152E)', '22 53 64 64 24 24 E0 02' => 'Tamron SP AF 90mm f/2.8 Macro 1:1 (72E)', '32 53 64 64 24 24 35 02' => 'Tamron SP AF 90mm f/2.8 [Di] Macro 1:1 (172E/272E)', 'F8 55 64 64 24 24 84 06' => 'Tamron SP AF 90mm f/2.8 Di Macro 1:1 (272NII)', 'F8 54 64 64 24 24 DF 06' => 'Tamron SP AF 90mm f/2.8 Di Macro 1:1 (272NII)', 'FE 54 64 64 24 24 DF 0E' => 'Tamron SP 90mm f/2.8 Di VC USD Macro 1:1 (F004)', #Jurgen Sahlberg '00 4C 7C 7C 2C 2C 00 02' => 'Tamron SP AF 180mm f/3.5 Di Model (B01)', '21 56 8E 8E 24 24 14 00' => 'Tamron SP AF 300mm f/2.8 LD-IF (60E)', '27 54 8E 8E 24 24 1D 02' => 'Tamron SP AF 300mm f/2.8 LD-IF (360E)', 'F6 3F 18 37 2C 34 84 06' => 'Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical (IF) (B001)', 'F6 3F 18 37 2C 34 DF 06' => 'Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical (IF) (B001)', #30 '00 36 1C 2D 34 3C 00 06' => 'Tamron SP AF 11-18mm f/4.5-5.6 Di II LD Aspherical (IF) (A13)', 'E9 48 27 3E 24 24 DF 0E' => 'Tamron SP 15-30mm f/2.8 Di VC USD (A012)', #33 'EA 40 29 8E 2C 40 DF 0E' => 'Tamron AF 16-300mm f/3.5-6.3 Di II VC PZD (B016)', '07 46 2B 44 24 30 03 02' => 'Tamron SP AF 17-35mm f/2.8-4 Di LD Aspherical (IF) (A05)', '00 53 2B 50 24 24 00 06' => 'Tamron SP AF 17-50mm f/2.8 XR Di II LD Aspherical (IF) (A16)', #PH '00 54 2B 50 24 24 00 06' => 'Tamron SP AF 17-50mm f/2.8 XR Di II LD Aspherical (IF) (A16NII)', 'FB 54 2B 50 24 24 84 06' => 'Tamron SP AF 17-50mm f/2.8 XR Di II LD Aspherical (IF) (A16NII)', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3787.0.html 'F3 54 2B 50 24 24 84 0E' => 'Tamron SP AF 17-50mm f/2.8 XR Di II VC LD Aspherical (IF) (B005)', '00 3F 2D 80 2B 40 00 06' => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) (A14)', '00 3F 2D 80 2C 40 00 06' => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14)', '00 40 2D 80 2C 40 00 06' => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14NII)', #25 'FC 40 2D 80 2C 40 DF 06' => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14NII)', #PH (NC) '00 40 2D 88 2C 40 62 06' => 'Tamron AF 18-250mm f/3.5-6.3 Di II LD Aspherical (IF) Macro (A18)', '00 40 2D 88 2C 40 00 06' => 'Tamron AF 18-250mm f/3.5-6.3 Di II LD Aspherical (IF) Macro (A18NII)', #JD 'F5 40 2C 8A 2C 40 40 0E' => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC LD Aspherical (IF) Macro (B003)', 'F0 3F 2D 8A 2C 40 DF 0E' => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD (B008)', '07 40 2F 44 2C 34 03 02' => 'Tamron AF 19-35mm f/3.5-4.5 (A10)', '07 40 30 45 2D 35 03 02' => 'Tamron AF 19-35mm f/3.5-4.5 (A10)', '00 49 30 48 22 2B 00 02' => 'Tamron SP AF 20-40mm f/2.7-3.5 (166D)', '0E 4A 31 48 23 2D 0E 02' => 'Tamron SP AF 20-40mm f/2.7-3.5 (166D)', 'FE 48 37 5C 24 24 DF 0E' => 'Tamron SP 24-70mm f/2.8 Di VC USD (A007)', #24 '45 41 37 72 2C 3C 48 02' => 'Tamron SP AF 24-135mm f/3.5-5.6 AD Aspherical (IF) Macro (190D)', '33 54 3C 5E 24 24 62 02' => 'Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical (IF) Macro (A09)', 'FA 54 3C 5E 24 24 84 06' => 'Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical (IF) Macro (A09NII)', #JD 'FA 54 3C 5E 24 24 DF 06' => 'Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical (IF) Macro (A09NII)', '10 3D 3C 60 2C 3C D2 02' => 'Tamron AF 28-80mm f/3.5-5.6 Aspherical (177D)', '45 3D 3C 60 2C 3C 48 02' => 'Tamron AF 28-80mm f/3.5-5.6 Aspherical (177D)', '00 48 3C 6A 24 24 00 02' => 'Tamron SP AF 28-105mm f/2.8 LD Aspherical IF (176D)', '4D 3E 3C 80 2E 3C 62 02' => 'Tamron AF 28-200mm F/3.8-5.6 XR Aspherical (IF) Macro (A03N)', '0B 3E 3D 7F 2F 3D 0E 00' => 'Tamron AF 28-200mm f/3.8-5.6 (71D)', '0B 3E 3D 7F 2F 3D 0E 02' => 'Tamron AF 28-200mm f/3.8-5.6D (171D)', '12 3D 3C 80 2E 3C DF 02' => 'Tamron AF 28-200mm f/3.8-5.6 AF Aspherical LD (IF) (271D)', '4D 41 3C 8E 2B 40 62 02' => 'Tamron AF 28-300mm f/3.5-6.3 XR Di LD Aspherical (IF) (A061)', '4D 41 3C 8E 2C 40 62 02' => 'Tamron AF 28-300mm f/3.5-6.3 XR LD Aspherical (IF) (185D)', 'F9 40 3C 8E 2C 40 40 0E' => 'Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical (IF) Macro (A20)', '00 47 53 80 30 3C 00 06' => 'Tamron AF 55-200mm f/4-5.6 Di II LD (A15)', 'F7 53 5C 80 24 24 84 06' => 'Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)', 'FE 53 5C 80 24 24 84 06' => 'Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)', 'F7 53 5C 80 24 24 40 06' => 'Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)', # 'FE 54 5C 80 24 24 DF 0E' => 'Tamron SP AF 70-200mm f/2.8 Di VC USD (A009)', 'FE 54 5C 80 24 24 DF 0E' => 'Tamron SP 70-200mm f/2.8 Di VC USD (A009)', #25 '69 48 5C 8E 30 3C 6F 02' => 'Tamron AF 70-300mm f/4-5.6 LD Macro 1:2 (572D/772D)', '69 47 5C 8E 30 3C 00 02' => 'Tamron AF 70-300mm f/4-5.6 Di LD Macro 1:2 (A17N)', '00 48 5C 8E 30 3C 00 06' => 'Tamron AF 70-300mm f/4-5.6 Di LD Macro 1:2 (A17NII)', #JD 'F1 47 5C 8E 30 3C DF 0E' => 'Tamron SP 70-300mm f/4-5.6 Di VC USD (A005)', 'EB 40 76 A6 38 40 DF 0E' => 'Tamron SP AF 150-600mm f/5-6.3 VC USD (A011)', '20 3C 80 98 3D 3D 1E 02' => 'Tamron AF 200-400mm f/5.6 LD IF (75D)', '00 3E 80 A0 38 3F 00 02' => 'Tamron SP AF 200-500mm f/5-6.3 Di LD (IF) (A08)', '00 3F 80 A0 38 3F 00 02' => 'Tamron SP AF 200-500mm f/5-6.3 Di (A08)', # '00 40 2B 2B 2C 2C 00 02' => 'Tokina AT-X 17 AF PRO (AF 17mm f/3.5)', '00 47 44 44 24 24 00 06' => 'Tokina AT-X M35 PRO DX (AF 35mm f/2.8 Macro)', '00 54 68 68 24 24 00 02' => 'Tokina AT-X M100 AF PRO D (AF 100mm f/2.8 Macro)', '27 48 8E 8E 30 30 1D 02' => 'Tokina AT-X 304 AF (AF 300mm f/4.0)', '00 54 8E 8E 24 24 00 02' => 'Tokina AT-X 300 AF PRO (AF 300mm f/2.8)', '12 3B 98 98 3D 3D 09 00' => 'Tokina AT-X 400 AF SD (AF 400mm f/5.6)', '00 40 18 2B 2C 34 00 06' => 'Tokina AT-X 107 AF DX Fisheye (AF 10-17mm f/3.5-4.5)', '00 48 1C 29 24 24 00 06' => 'Tokina AT-X 116 PRO DX (AF 11-16mm f/2.8)', '7A 48 1C 29 24 24 7E 06' => 'Tokina AT-X 116 PRO DX II (AF 11-16mm f/2.8)', '7A 48 1C 30 24 24 7E 06' => 'Tokina AT-X 11-20 F2.8 PRO DX (AF 11-20mm f/2.8)', '00 3C 1F 37 30 30 00 06' => 'Tokina AT-X 124 AF PRO DX (AF 12-24mm f/4)', '7A 3C 1F 37 30 30 7E 06.2' => 'Tokina AT-X 124 AF PRO DX II (AF 12-24mm f/4)', '7A 3C 1F 3C 30 30 7E 06' => 'Tokina AT-X 12-28 PRO DX (AF 12-28mm F/4)', '00 48 29 3C 24 24 00 06' => 'Tokina AT-X 16-28 AF PRO FX (AF 16-28mm f/2.8)', '00 48 29 50 24 24 00 06' => 'Tokina AT-X 165 PRO DX (AF 16-50mm f/2.8)', '00 40 2A 72 2C 3C 00 06' => 'Tokina AT-X 16.5-135 DX (AF 16.5-135mm F3.5-5.6)', '00 3C 2B 44 30 30 00 06' => 'Tokina AT-X 17-35 F4 PRO FX (AF 17-35mm f/4)', '2F 40 30 44 2C 34 29 02.2' => 'Tokina AF 193 (AF 19-35mm f/3.5-4.5)', '2F 48 30 44 24 24 29 02.2' => 'Tokina AT-X 235 AF PRO (AF 20-35mm f/2.8)', '2F 40 30 44 2C 34 29 02.1' => 'Tokina AF 235 II (AF 20-35mm f/3.5-4.5)', '00 48 37 5C 24 24 00 06' => 'Tokina AT-X 24-70 F2.8 PRO FX (AF 24-70mm f/2.8)', '00 40 37 80 2C 3C 00 02' => 'Tokina AT-X 242 AF (AF 24-200mm f/3.5-5.6)', '25 48 3C 5C 24 24 1B 02.1' => 'Tokina AT-X 270 AF PRO II (AF 28-70mm f/2.6-2.8)', '25 48 3C 5C 24 24 1B 02.2' => 'Tokina AT-X 287 AF PRO SV (AF 28-70mm f/2.8)', '07 48 3C 5C 24 24 03 00' => 'Tokina AT-X 287 AF (AF 28-70mm f/2.8)', '07 47 3C 5C 25 35 03 00' => 'Tokina AF 287 SD (AF 28-70mm f/2.8-4.5)', '07 40 3C 5C 2C 35 03 00' => 'Tokina AF 270 II (AF 28-70mm f/3.5-4.5)', '00 48 3C 60 24 24 00 02' => 'Tokina AT-X 280 AF PRO (AF 28-80mm f/2.8)', '25 44 44 8E 34 42 1B 02' => 'Tokina AF 353 (AF 35-300mm f/4.5-6.7)', '00 48 50 72 24 24 00 06' => 'Tokina AT-X 535 PRO DX (AF 50-135mm f/2.8)', '00 3C 5C 80 30 30 00 0E' => 'Tokina AT-X 70-200 F4 FX VCM-S (AF 70-200mm f/4)', '00 48 5C 80 30 30 00 0E' => 'Tokina AT-X 70-200 F4 FX VCM-S (AF 70-200mm f/4)', '12 44 5E 8E 34 3C 09 00' => 'Tokina AF 730 (AF 75-300mm F4.5-5.6)', '14 54 60 80 24 24 0B 00' => 'Tokina AT-X 828 AF (AF 80-200mm f/2.8)', '24 54 60 80 24 24 1A 02' => 'Tokina AT-X 828 AF PRO (AF 80-200mm f/2.8)', '24 44 60 98 34 3C 1A 02' => 'Tokina AT-X 840 AF-II (AF 80-400mm f/4.5-5.6)', '00 44 60 98 34 3C 00 02' => 'Tokina AT-X 840 D (AF 80-400mm f/4.5-5.6)', '14 48 68 8E 30 30 0B 00' => 'Tokina AT-X 340 AF (AF 100-300mm f/4)', # '06 3F 68 68 2C 2C 06 00' => 'Cosina AF 100mm F3.5 Macro', '07 36 3D 5F 2C 3C 03 00' => 'Cosina AF Zoom 28-80mm F3.5-5.6 MC Macro', '07 46 3D 6A 25 2F 03 00' => 'Cosina AF Zoom 28-105mm F2.8-3.8 MC', '12 36 5C 81 35 3D 09 00' => 'Cosina AF Zoom 70-210mm F4.5-5.6 MC Macro', '12 39 5C 8E 34 3D 08 02' => 'Cosina AF Zoom 70-300mm F4.5-5.6 MC Macro', '12 3B 68 8D 3D 43 09 02' => 'Cosina AF Zoom 100-300mm F5.6-6.7 MC Macro', # '12 38 69 97 35 42 09 02' => 'Promaster Spectrum 7 100-400mm F4.5-6.7', # '00 40 31 31 2C 2C 00 00' => 'Voigtlander Color Skopar 20mm F3.5 SLII Aspherical', '00 48 3C 3C 24 24 00 00' => 'Voigtlander Color Skopar 28mm F2.8 SL II', '00 54 48 48 18 18 00 00' => 'Voigtlander Ultron 40mm F2 SLII Aspherical', '00 54 55 55 0C 0C 00 00' => 'Voigtlander Nokton 58mm F1.4 SLII', '00 40 64 64 2C 2C 00 00' => 'Voigtlander APO-Lanthar 90mm F3.5 SLII Close Focus', # '00 40 2D 2D 2C 2C 00 00' => 'Carl Zeiss Distagon T* 3.5/18 ZF.2', '00 48 32 32 24 24 00 00' => 'Carl Zeiss Distagon T* 2.8/21 ZF.2', '00 54 3C 3C 18 18 00 00' => 'Carl Zeiss Distagon T* 2/28 ZF.2', '00 54 44 44 0C 0C 00 00' => 'Carl Zeiss Distagon T* 1.4/35 ZF.2', '00 54 44 44 18 18 00 00' => 'Carl Zeiss Distagon T* 2/35 ZF.2', '00 54 50 50 0C 0C 00 00' => 'Carl Zeiss Planar T* 1.4/50 ZF.2', '00 54 50 50 18 18 00 00' => 'Carl Zeiss Makro-Planar T* 2/50 ZF.2', '00 54 62 62 0C 0C 00 00' => 'Carl Zeiss Planar T* 1.4/85 ZF.2', '00 54 68 68 18 18 00 00' => 'Carl Zeiss Makro-Planar T* 2/100 ZF.2', '00 54 72 72 18 18 00 00' => 'Carl Zeiss Apo Sonnar T* 2/135 ZF.2', '00 54 53 53 0C 0C 00 00' => 'Zeiss Otus 1.4/55', #33 '01 54 62 62 0C 0C 00 00' => 'Zeiss Otus 1.4/85', '52 54 44 44 18 18 00 00' => 'Zeiss Milvus 35mm f/2', '53 54 50 50 0C 0C 00 00' => 'Zeiss Milvus 50mm f/1.4', #33 '54 54 50 50 18 18 00 00' => 'Zeiss Milvus 50mm f/2 Macro', '55 54 62 62 0C 0C 00 00' => 'Zeiss Milvus 85mm f/1.4', #33 '56 54 68 68 18 18 00 00' => 'Zeiss Milvus 100mm f/2 Macro', # '00 54 56 56 30 30 00 00' => 'Coastal Optical Systems 60mm 1:4 UV-VIS-IR Macro Apo', # '4A 40 11 11 2C 0C 4D 02' => 'Samyang 8mm f/3.5 Fish-Eye CS', '4A 48 1E 1E 24 0C 4D 02' => 'Samyang 12mm f/2.8 ED AS NCS Fish-Eye', #Jurgen Sahlberg '4A 48 24 24 24 0C 4D 02' => 'Samyang AE 14mm f/2.8 ED AS IF UMC', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3150.0.html '4A 54 29 29 18 0C 4D 02' => 'Samyang 16mm F2.0 ED AS UMC CS', #Jon Bloom (by email) '4A 60 44 44 0C 0C 4D 02' => 'Samyang 35mm f/1.4 AS UMC', '4A 60 62 62 0C 0C 4D 02' => 'Samyang AE 85mm f/1.4 AS IF UMC', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,2888.0.html # '02 40 44 5C 2C 34 02 00' => 'Exakta AF 35-70mm 1:3.5-4.5 MC', # '07 3E 30 43 2D 35 03 00' => 'Soligor AF Zoom 19-35mm 1:3.5-4.5 MC', '03 43 5C 81 35 35 02 00' => 'Soligor AF C/D Zoom UMCS 70-210mm 1:4.5', '12 4A 5C 81 31 3D 09 00' => 'Soligor AF C/D Auto Zoom+Macro 70-210mm 1:4-5.6 UMCS', '12 36 69 97 35 42 09 00' => 'Soligor AF Zoom 100-400mm 1:4.5-6.7 MC', # '00 00 00 00 00 00 00 01' => 'Manual Lens No CPU', # '00 00 48 48 53 53 00 01' => 'Loreo 40mm F11-22 3D Lens in a Cap 9005', #PH '00 47 10 10 24 24 00 00' => 'Fisheye Nikkor 8mm f/2.8 AiS', '00 47 3C 3C 24 24 00 00' => 'Nikkor 28mm f/2.8 AiS', #35 # '00 54 44 44 0C 0C 00 00' => 'Nikkor 35mm f/1.4 AiS', comment out in favour of Zeiss with same ID because this lens is rare (requires CPU upgrade) '00 57 50 50 14 14 00 00' => 'Nikkor 50mm f/1.8 AI', #35 '00 48 50 50 18 18 00 00' => 'Nikkor H 50mm f/2', '00 48 68 68 24 24 00 00' => 'Series E 100mm f/2.8', '00 4C 6A 6A 20 20 00 00' => 'Nikkor 105mm f/2.5 AiS', '00 48 80 80 30 30 00 00' => 'Nikkor 200mm f/4 AiS', '00 40 11 11 2C 2C 00 00' => 'Samyang 8mm f/3.5 Fish-Eye', '00 58 64 64 20 20 00 00' => 'Soligor C/D Macro MC 90mm f/2.5', ); # text encoding used in LocationInfo (ref PH) %nikonTextEncoding = ( 0 => 'n/a', 1 => 'UTF8', # UTF16 is a guess here: it could also be Unicode or JIS, # but I chose UTF16 due to the similarity with the QuickTime stringEncoding 2 => 'UTF16', ); # flash firmware decoding (ref JD) my %flashFirmware = ( '0 0' => 'n/a', '1 1' => '1.01 (SB-800 or Metz 58 AF-1)', '1 3' => '1.03 (SB-800)', '2 1' => '2.01 (SB-800)', '2 4' => '2.04 (SB-600)', '2 5' => '2.05 (SB-600)', '3 1' => '3.01 (SU-800 Remote Commander)', '4 1' => '4.01 (SB-400)', '4 2' => '4.02 (SB-400)', '4 4' => '4.04 (SB-400)', '5 1' => '5.01 (SB-900)', '5 2' => '5.02 (SB-900)', '6 1' => '6.01 (SB-700)', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5034.0.html '7 1' => '7.01 (SB-910)', #PH OTHER => sub { my ($val, $inv) = @_; return sprintf('%d.%.2d (Unknown model)', split(' ', $val)) unless $inv; return "$1 $2" if $val =~ /(\d+)\.(\d+)/; return '0 0'; }, ); # flash Guide Number (GN) distance settings (ref 28) my %flashGNDistance = ( 0 => 0, 19 => '2.8 m', 1 => '0.1 m', 20 => '3.2 m', 2 => '0.2 m', 21 => '3.6 m', 3 => '0.3 m', 22 => '4.0 m', 4 => '0.4 m', 23 => '4.5 m', 5 => '0.5 m', 24 => '5.0 m', 6 => '0.6 m', 25 => '5.6 m', 7 => '0.7 m', 26 => '6.3 m', 8 => '0.8 m', 27 => '7.1 m', 9 => '0.9 m', 28 => '8.0 m', 10 => '1.0 m', 29 => '9.0 m', 11 => '1.1 m', 30 => '10.0 m', 12 => '1.3 m', 31 => '11.0 m', 13 => '1.4 m', 32 => '13.0 m', 14 => '1.6 m', 33 => '14.0 m', 15 => '1.8 m', 34 => '16.0 m', 16 => '2.0 m', 35 => '18.0 m', 17 => '2.2 m', 36 => '20.0 m', 18 => '2.5 m', 255 => 'n/a', ); # flash control mode values (ref JD) my %flashControlMode = ( 0x00 => 'Off', 0x01 => 'iTTL-BL', 0x02 => 'iTTL', 0x03 => 'Auto Aperture', 0x04 => 'Automatic', #28 0x05 => 'GN (distance priority)', #28 (Guide Number, but called "GN" in manual) 0x06 => 'Manual', 0x07 => 'Repeating Flash', ); my %retouchValues = ( #PH 0 => 'None', 3 => 'B & W', 4 => 'Sepia', 5 => 'Trim', 6 => 'Small Picture', 7 => 'D-Lighting', 8 => 'Red Eye', 9 => 'Cyanotype', 10 => 'Sky Light', 11 => 'Warm Tone', 12 => 'Color Custom', 13 => 'Image Overlay', 14 => 'Red Intensifier', 15 => 'Green Intensifier', 16 => 'Blue Intensifier', 17 => 'Cross Screen', 18 => 'Quick Retouch', 19 => 'NEF Processing', 23 => 'Distortion Control', 25 => 'Fisheye', 26 => 'Straighten', 29 => 'Perspective Control', 30 => 'Color Outline', 31 => 'Soft Filter', 32 => 'Resize', #31 33 => 'Miniature Effect', 34 => 'Skin Softening', # (S9200) 35 => 'Selected Frame', #31 (frame exported from MOV) 37 => 'Color Sketch', #31 38 => 'Selective Color', # (S9200) 40 => 'Drawing', # (S9200) ); # AF point indices for models with 51 focus points, eg. D3 (ref JD/PH) # A1 A2 A3 A4 A5 A6 A7 A8 A9 # B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 # C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 # D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 # E1 E2 E3 E4 E5 E6 E7 E8 E9 my %afPoints51 = ( 1 => 'C6', 11 => 'C5', 21 => 'C9', 31 => 'C11',41 => 'A2', 51 => 'D1', 2 => 'B6', 12 => 'B5', 22 => 'B9', 32 => 'B11',42 => 'D3', 3 => 'A5', 13 => 'A4', 23 => 'A8', 33 => 'D11',43 => 'E2', 4 => 'D6', 14 => 'D5', 24 => 'D9', 34 => 'C4', 44 => 'C2', 5 => 'E5', 15 => 'E4', 25 => 'E8', 35 => 'B4', 45 => 'B2', 6 => 'C7', 16 => 'C8', 26 => 'C10',36 => 'A3', 46 => 'A1', 7 => 'B7', 17 => 'B8', 27 => 'B10',37 => 'D4', 47 => 'D2', 8 => 'A6', 18 => 'A7', 28 => 'A9', 38 => 'E3', 48 => 'E1', 9 => 'D7', 19 => 'D8', 29 => 'D10',39 => 'C3', 49 => 'C1', 10 => 'E6', 20 => 'E7', 30 => 'E9', 40 => 'B3', 50 => 'B1', ); # AF point indices for models with 39 focus points, eg. D7000 (ref 29) # A1 A2 A3 # B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 # C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 # D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 # E1 E2 E3 my %afPoints39 = ( 1 => 'C6', 11 => 'C5', 21 => 'D9', 31 => 'C3', 2 => 'B6', 12 => 'B5', 22 => 'C10',32 => 'B3', 3 => 'A2', 13 => 'A1', 23 => 'B10',33 => 'D3', 4 => 'D6', 14 => 'D5', 24 => 'D10',34 => 'C2', 5 => 'E2', 15 => 'E1', 25 => 'C11',35 => 'B2', 6 => 'C7', 16 => 'C8', 26 => 'B11',36 => 'D2', 7 => 'B7', 17 => 'B8', 27 => 'D11',37 => 'C1', 8 => 'A3', 18 => 'D8', 28 => 'C4', 38 => 'B1', 9 => 'D7', 19 => 'C9', 29 => 'B4', 39 => 'D1', 10 => 'E3', 20 => 'B9', 30 => 'D4', ); # AF point indices for models with 135 focus points, eg. 1J1 (ref PH) # - 9 rows (A-I) with 15 columns (1-15), center is E8 # - odd columns, columns 2 and 14, and the remaining corner points are # not used in 41-point mode my %afPoints135 = ( 1 => 'E8', 28 => 'E10', 55 => 'E13', 82 => 'E6', 109 => 'E3', 2 => 'D8', 29 => 'D10', 56 => 'D13', 83 => 'D6', 110 => 'D3', 3 => 'C8', 30 => 'C10', 57 => 'C13', 84 => 'C6', 111 => 'C3', 4 => 'B8', 31 => 'B10', 58 => 'B13', 85 => 'B6', 112 => 'B3', 5 => 'A8', 32 => 'A10', 59 => 'A13', 86 => 'A6', 113 => 'A3', 6 => 'F8', 33 => 'F10', 60 => 'F13', 87 => 'F6', 114 => 'F3', 7 => 'G8', 34 => 'G10', 61 => 'G13', 88 => 'G6', 115 => 'G3', 8 => 'H8', 35 => 'H10', 62 => 'H13', 89 => 'H6', 116 => 'H3', 9 => 'I8', 36 => 'I10', 63 => 'I13', 90 => 'I6', 117 => 'I3', 10 => 'E9', 37 => 'E11', 64 => 'E14', 91 => 'E5', 118 => 'E2', 11 => 'D9', 38 => 'D11', 65 => 'D14', 92 => 'D5', 119 => 'D2', 12 => 'C9', 39 => 'C11', 66 => 'C14', 93 => 'C5', 120 => 'C2', 13 => 'B9', 40 => 'B11', 67 => 'B14', 94 => 'B5', 121 => 'B2', 14 => 'A9', 41 => 'A11', 68 => 'A14', 95 => 'A5', 122 => 'A2', 15 => 'F9', 42 => 'F11', 69 => 'F14', 96 => 'F5', 123 => 'F2', 16 => 'G9', 43 => 'G11', 70 => 'G14', 97 => 'G5', 124 => 'G2', 17 => 'H9', 44 => 'H11', 71 => 'H14', 98 => 'H5', 125 => 'H2', 18 => 'I9', 45 => 'I11', 72 => 'I14', 99 => 'I5', 126 => 'I2', 19 => 'E7', 46 => 'E12', 73 => 'E15', 100 => 'E4', 127 => 'E1', 20 => 'D7', 47 => 'D12', 74 => 'D15', 101 => 'D4', 128 => 'D1', 21 => 'C7', 48 => 'C12', 75 => 'C15', 102 => 'C4', 129 => 'C1', 22 => 'B7', 49 => 'B12', 76 => 'B15', 103 => 'B4', 130 => 'B1', 23 => 'A7', 50 => 'A12', 77 => 'A15', 104 => 'A4', 131 => 'A1', 24 => 'F7', 51 => 'F12', 78 => 'F15', 105 => 'F4', 132 => 'F1', 25 => 'G7', 52 => 'G12', 79 => 'G15', 106 => 'G4', 133 => 'G1', 26 => 'H7', 53 => 'H12', 80 => 'H15', 107 => 'H4', 134 => 'H1', 27 => 'I7', 54 => 'I12', 81 => 'I15', 108 => 'I4', 135 => 'I1', ); my %offOn = ( 0 => 'Off', 1 => 'On' ); # common attributes for writable BinaryData directories my %binaryDataAttrs = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, ); # Nikon maker note tags %Image::ExifTool::Nikon::Main = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikon, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikon, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PRINT_CONV => \&FormatString, 0x0001 => { #2 # the format differs for different models. for D70, this is a string '0210', # but for the E775 it is binary: "\x00\x01\x00\x00" Name => 'MakerNoteVersion', Writable => 'undef', Count => 4, # convert to string if binary ValueConv => '$_=$val; /^[\x00-\x09]/ and $_=join("",unpack("CCCC",$_)); $_', ValueConvInv => '$val', PrintConv => '$_=$val;s/^(\d{2})/$1\./;s/^0//;$_', PrintConvInv => '$_=$val;s/\.//;"0$_"', }, 0x0002 => { # this is the ISO actually used by the camera # (may be different than ISO setting if auto) Name => 'ISO', Writable => 'int16u', Count => 2, Priority => 0, # the EXIF ISO is more reliable Groups => { 2 => 'Image' }, # D300 sets this to undef with 4 zero bytes when LO ISO is used - PH RawConv => '$val eq "\0\0\0\0" ? undef : $val', # first number is 1 for "Hi ISO" modes (H0.3, H0.7 and H1.0 on D80) - PH PrintConv => '$_=$val;s/^0 //;s/^1 (\d+)/Hi $1/;$_', PrintConvInv => '$_=$val;/^\d+/ ? "0 $_" : (s/Hi ?//i ? "1 $_" : $_)', }, # Note: we attempt to fix the case of these string values (typically written in all caps) 0x0003 => { Name => 'ColorMode', Writable => 'string' }, 0x0004 => { Name => 'Quality', Writable => 'string' }, 0x0005 => { Name => 'WhiteBalance', Writable => 'string' }, 0x0006 => { Name => 'Sharpness', Writable => 'string' }, 0x0007 => { Name => 'FocusMode', Writable => 'string' }, # FlashSetting (better named FlashSyncMode, ref 28) values: # "Normal", "Slow", "Rear Slow", "RED-EYE", "RED-EYE SLOW" 0x0008 => { Name => 'FlashSetting', Writable => 'string' }, # FlashType observed values: # internal: "Built-in,TTL", "Built-in,RPT", "Comdr.", "NEW_TTL" # external: "Optional,TTL", "Optional,RPT", "Optional,M", "Comdr." # both: "Built-in,TTL&Comdr." # no flash: "" 0x0009 => { Name => 'FlashType', Writable => 'string' }, #2 (count varies by model - PH) # 0x000a - rational values: 5.6 to 9.33 - found in Coolpix models - PH # (seems constant for a given camera model, but not correlated with scale factor) 0x000b => { #2 Name => 'WhiteBalanceFineTune', Writable => 'int16s', Count => -1, # older models write 1 value, newer DSLR's write 2 - PH }, 0x000c => { # (D1X) Name => 'WB_RBLevels', Writable => 'rational64u', Count => 4, # (not sure what the last 2 values are for) }, 0x000d => { #15 Name => 'ProgramShift', Writable => 'undef', Count => 4, ValueConv => 'my ($a,$b,$c)=unpack("c3",$val); $c ? $a*($b/$c) : 0', ValueConvInv => q{ my $a = int($val*6 + ($val>0 ? 0.5 : -0.5)); $a<-128 or $a>127 ? undef : pack("c4",$a,1,6,0); }, PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x000e => { Name => 'ExposureDifference', Writable => 'undef', Count => 4, ValueConv => 'my ($a,$b,$c)=unpack("c3",$val); $c ? $a*($b/$c) : 0', ValueConvInv => q{ my $a = int($val*12 + ($val>0 ? 0.5 : -0.5)); $a<-128 or $a>127 ? undef : pack("c4",$a,1,12,0); }, PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, 0x000f => { Name => 'ISOSelection', Writable => 'string' }, #2 0x0010 => { Name => 'DataDump', Writable => 0, Binary => 1, }, 0x0011 => { Name => 'PreviewIFD', Groups => { 1 => 'PreviewIFD', 2 => 'Image' }, Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::PreviewIFD', Start => '$val', }, }, 0x0012 => { #2 (camera setting: combination of command dial and menus - PH) Name => 'FlashExposureComp', Description => 'Flash Exposure Compensation', Writable => 'undef', Count => 4, # (includes the built-in compensation for FlashType "Built-in,TTL&Comdr.") Notes => q{ may be set even if flash does not fire. Does not include the effect of flash bracketing. }, ValueConv => 'my ($a,$b,$c)=unpack("c3",$val); $c ? $a*($b/$c) : 0', ValueConvInv => q{ my $a = int($val*6 + ($val>0 ? 0.5 : -0.5)); $a<-128 or $a>127 ? undef : pack("c4",$a,1,6,0); }, PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, # D70 - another ISO tag 0x0013 => { #2 Name => 'ISOSetting', Writable => 'int16u', Count => 2, PrintConv => '$_=$val;s/^0 //;$_', PrintConvInv => '"0 $val"', }, 0x0014 => [ { #4 Name => 'ColorBalanceA', Condition => '$format eq "undef" and $count == 2560', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ColorBalanceA', ByteOrder => 'BigEndian', }, }, { #PH Name => 'NRWData', Condition => '$$valPt =~ /^NRW/', # starts with "NRW 0100" Notes => 'large unknown block in NRW images, not copied to JPEG images', # 'Drop' because not found in JPEG images (too large for APP1 anyway) Flags => [ 'Unknown', 'Binary', 'Drop' ], }, ], # 0x0015 - string[8]: "AUTO " # D70 Image boundary?? top x,y bot-right x,y 0x0016 => { #2 Name => 'ImageBoundary', Writable => 'int16u', Count => 4, }, 0x0017 => { #28 Name => 'ExternalFlashExposureComp', #PH (setting from external flash unit) Writable => 'undef', Count => 4, ValueConv => 'my ($a,$b,$c)=unpack("c3",$val); $c ? $a*($b/$c) : 0', ValueConvInv => q{ my $a = int($val*6 + ($val>0 ? 0.5 : -0.5)); $a<-128 or $a>127 ? undef : pack("c4",$a,1,6,0); }, PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x0018 => { #5 Name => 'FlashExposureBracketValue', Writable => 'undef', Count => 4, ValueConv => 'my ($a,$b,$c)=unpack("c3",$val); $c ? $a*($b/$c) : 0', ValueConvInv => q{ my $a = int($val*6 + ($val>0 ? 0.5 : -0.5)); $a<-128 or $a>127 ? undef : pack("c4",$a,1,6,0); }, PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0x0019 => { #5 Name => 'ExposureBracketValue', Writable => 'rational64s', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x001a => { #PH Name => 'ImageProcessing', Writable => 'string', }, 0x001b => { #15 Name => 'CropHiSpeed', Writable => 'int16u', Count => 7, PrintConv => q{ my @a = split ' ', $val; return "Unknown ($val)" unless @a == 7; $a[0] = $a[0] ? "On" : "Off"; return "$a[0] ($a[1]x$a[2] cropped to $a[3]x$a[4] at pixel $a[5],$a[6])"; } }, 0x001c => { #28 (D3 "the application of CSb6 to the selected metering mode") Name => 'ExposureTuning', Writable => 'undef', Count => 3, ValueConv => 'my ($a,$b,$c)=unpack("c3",$val); $c ? $a*($b/$c) : 0', ValueConvInv => q{ my $a = int($val*6 + ($val>0 ? 0.5 : -0.5)); $a<-128 or $a>127 ? undef : pack("c3",$a,1,6); }, PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x001d => { #4 Name => 'SerialNumber', # Note: this has been known to change even if the serial number on the body # stays the same if some parts of the camera were replaced by Nikon service Writable => 'string', Protected => 1, Notes => q{ this value is used as a key to decrypt other information -- writing this tag causes the other information to be re-encrypted with the new key }, PrintConv => undef, # disable default PRINT_CONV }, 0x001e => { #14 Name => 'ColorSpace', Writable => 'int16u', PrintConv => { 1 => 'sRGB', 2 => 'Adobe RGB', }, }, 0x001f => { #PH Name => 'VRInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::VRInfo' }, }, 0x0020 => { #16 Name => 'ImageAuthentication', Writable => 'int8u', PrintConv => \%offOn, }, 0x0021 => { #PH Name => 'FaceDetect', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::FaceDetect' }, }, 0x0022 => { #21 Name => 'ActiveD-Lighting', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Low', 3 => 'Normal', 5 => 'High', 7 => 'Extra High', #10 8 => 'Extra High 1', #PH 9 => 'Extra High 2', #PH 10 => 'Extra High 3', #PH 11 => 'Extra High 4', #PH 0xffff => 'Auto', #10 }, }, 0x0023 => { #PH (D300, but also found in D3,D3S,D3X,D90,D300S,D700,D3000,D5000) Name => 'PictureControlData', Writable => 'undef', Permanent => 0, Flags => [ 'Binary', 'Protected' ], SubDirectory => { TagTable => 'Image::ExifTool::Nikon::PictureControl' }, }, 0x0024 => { #JD Name => 'WorldTime', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::WorldTime', # (CaptureNX does flip the byte order of this record) }, }, 0x0025 => { #PH Name => 'ISOInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ISOInfo', ByteOrder => 'BigEndian', }, }, 0x002a => { #23 (this tag added with D3 firmware 1.10 -- also written by Nikon utilities) Name => 'VignetteControl', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Low', 3 => 'Normal', 5 => 'High', }, }, 0x002b => { #PH Name => 'DistortInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::DistortInfo', ByteOrder => 'BigEndian', #(NC) }, }, 0x002c => { #29 (D7000) Name => 'UnknownInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::UnknownInfo', ByteOrder => 'BigEndian', #(NC) }, }, 0x0032 => { #PH Name => 'UnknownInfo2', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::UnknownInfo2', ByteOrder => 'BigEndian', #(NC) }, }, # 0x0034 - Nikon 1 models only, values: 0,16,33 0x0035 => { #32 Name => 'HDRInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::HDRInfo' }, }, # 0x0037 - int32u (1V models only): an image count maybe? - PH 0x0039 => { Name => 'LocationInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::LocationInfo' }, }, 0x003d => { #33 Name => 'BlackLevel', Writable => 'int16u', Count => 4, # (may need to divide by 4 for some images, eg. D3300/D5300, 12 bit - ref 33) }, 0x0080 => { Name => 'ImageAdjustment', Writable => 'string' }, 0x0081 => { Name => 'ToneComp', Writable => 'string' }, #2 0x0082 => { Name => 'AuxiliaryLens', Writable => 'string' }, 0x0083 => { Name => 'LensType', Writable => 'int8u', # credit to Tom Christiansen (ref 7) for figuring this out... PrintConv => q[$_ = $val ? Image::ExifTool::DecodeBits($val, { 0 => 'MF', 1 => 'D', 2 => 'G', 3 => 'VR', # bit 4 set for Nikon 1 lenses - PH # bit 5 set for FT-1 adapter? - PH # bit 6 set for FL lenses? - PH }) : 'AF'; # remove commas and change "D G" to just "G" s/,//g; s/\bD G\b/G/; $_ ], PrintConvInv => q[ my $bits = 0; $bits |= 0x01 if $val =~ /\bMF\b/i; $bits |= 0x02 if $val =~ /\bD\b/i; $bits |= 0x06 if $val =~ /\bG\b/i; $bits |= 0x08 if $val =~ /\bVR\b/i; return $bits; ], }, 0x0084 => { #2 Name => "Lens", Writable => 'rational64u', Count => 4, # short focal, long focal, aperture at short focal, aperture at long focal PrintConv => \&Image::ExifTool::Exif::PrintLensInfo, PrintConvInv => \&Image::ExifTool::Exif::ConvertLensInfo, }, 0x0085 => { Name => 'ManualFocusDistance', Writable => 'rational64u', }, 0x0086 => { Name => 'DigitalZoom', Writable => 'rational64u', }, 0x0087 => { #5 Name => 'FlashMode', Writable => 'int8u', PrintConv => { 0 => 'Did Not Fire', 1 => 'Fired, Manual', #14 3 => 'Not Ready', #28 7 => 'Fired, External', #14 8 => 'Fired, Commander Mode', 9 => 'Fired, TTL Mode', }, }, 0x0088 => [ { Name => 'AFInfo', Condition => '$$self{Model} =~ /^NIKON D/i', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AFInfo', ByteOrder => 'BigEndian', }, }, { Name => 'AFInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AFInfo', ByteOrder => 'LittleEndian', }, }, ], 0x0089 => { #5 Name => 'ShootingMode', Writable => 'int16u', # the meaning of bit 5 seems to change: For the D200 it indicates "Auto ISO" - PH Notes => 'for the D70, Bit 5 = Unused LE-NR Slowdown', # credit to Tom Christiansen (ref 7) for figuring this out... # The (new?) bit 5 seriously complicates our life here: after firmwareB's # 1.03, bit 5 turns on when you ask for BUT DO NOT USE the long-range # noise reduction feature, probably because even not using it, it still # slows down your drive operation to 50% (1.5fps max not 3fps). But no # longer does !$val alone indicate single-frame operation. - TC, D70 PrintConv => q[ $_ = ''; unless ($val & 0x87) { return 'Single-Frame' unless $val; $_ = 'Single-Frame, '; } return $_ . Image::ExifTool::DecodeBits($val, { 0 => 'Continuous', 1 => 'Delay', 2 => 'PC Control', 3 => 'Self-timer', #forum6281 (NC) 4 => 'Exposure Bracketing', 5 => $$self{Model}=~/D70\b/ ? 'Unused LE-NR Slowdown' : 'Auto ISO', 6 => 'White-Balance Bracketing', 7 => 'IR Control', 8 => 'D-Lighting Bracketing', #forum6281 (NC) }); ], }, # 0x008a - called "AutoBracketRelease" by ref 15 [but this seems wrong] # values: 0,255 (when writing NEF only), or 1,2 (when writing JPEG or JPEG+NEF) # --> makes odd, repeating pattern in sequential NEF images (ref 28) 0x008b => { #8 Name => 'LensFStops', ValueConv => 'my ($a,$b,$c)=unpack("C3",$val); $c ? $a*($b/$c) : 0', ValueConvInv => 'my $a=int($val*12+0.5);$a<256 ? pack("C4",$a,1,12,0) : undef', PrintConv => 'sprintf("%.2f", $val)', PrintConvInv => '$val', Writable => 'undef', Count => 4, }, 0x008c => { Name => 'ContrastCurve', #JD Writable => 'undef', Flags => [ 'Binary', 'Protected' ], }, # ColorHue: MODE1/MODE1a=sRGB, MODE2=Adobe RGB, MODE3a=more saturated sRGB # --> should really be called ColorSpace or ColorMode, but that would conflict with other tags 0x008d => { Name => 'ColorHue' , Writable => 'string' }, #2 # SceneMode takes on the following values: PORTRAIT, PARTY/INDOOR, NIGHT PORTRAIT, # BEACH/SNOW, LANDSCAPE, SUNSET, NIGHT SCENE, MUSEUM, FIREWORKS, CLOSE UP, COPY, # BACK LIGHT, PANORAMA ASSIST, SPORT, DAWN/DUSK 0x008f => { Name => 'SceneMode', Writable => 'string' }, #2 # LightSource shows 3 values COLORED SPEEDLIGHT NATURAL. # (SPEEDLIGHT when flash goes. Have no idea about difference between other two.) 0x0090 => { Name => 'LightSource', Writable => 'string' }, #2 0x0091 => [ #18 { #PH Condition => '$$valPt =~ /^0209/', Name => 'ShotInfoD40', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD40', DecryptStart => 4, DecryptLen => 748, ByteOrder => 'BigEndian', }, }, { Condition => '$$valPt =~ /^0208/', Name => 'ShotInfoD80', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD80', DecryptStart => 4, DecryptLen => 764, # (Capture NX can change the makernote byte order, but this stays big-endian) ByteOrder => 'BigEndian', }, }, { #PH (D90, firmware 1.00) Condition => '$$valPt =~ /^0213/', Name => 'ShotInfoD90', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD90', DecryptStart => 4, DecryptLen => 0x398, ByteOrder => 'BigEndian', }, }, { #PH (D3, firmware 0.37 and 1.00) Condition => '$$valPt =~ /^0210/ and $count == 5399', Name => 'ShotInfoD3a', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD3a', DecryptStart => 4, DecryptLen => 0x318, ByteOrder => 'BigEndian', }, }, { #PH (D3, firmware 1.10, 2.00 and 2.01 [count 5408], and 2.02 [count 5412]) Condition => '$$valPt =~ /^0210/ and ($count == 5408 or $count == 5412)', Name => 'ShotInfoD3b', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD3b', DecryptStart => 4, DecryptLen => 0x321, ByteOrder => 'BigEndian', }, }, { #PH (D3X, firmware 1.00) Condition => '$$valPt =~ /^0214/ and $count == 5409', Name => 'ShotInfoD3X', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD3X', DecryptStart => 4, DecryptLen => 0x323, ByteOrder => 'BigEndian', }, }, { #PH (D3S, firmware 0.16 and 1.00) Condition => '$$valPt =~ /^0218/ and ($count == 5356 or $count == 5388)', Name => 'ShotInfoD3S', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD3S', DecryptStart => 4, DecryptLen => 0x2e9, ByteOrder => 'BigEndian', }, }, { #JD (D300, firmware 0.25 and 1.00) # D3 and D300 use the same version number, but the length is different Condition => '$$valPt =~ /^0210/ and $count == 5291', Name => 'ShotInfoD300a', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD300a', DecryptStart => 4, DecryptLen => 813, ByteOrder => 'BigEndian', }, }, { #PH (D300, firmware version 1.10) # yet again the same ShotInfoVersion for different data Condition => '$$valPt =~ /^0210/ and $count == 5303', Name => 'ShotInfoD300b', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD300b', DecryptStart => 4, DecryptLen => 825, ByteOrder => 'BigEndian', }, }, { #PH (D300S, firmware version 1.00) # yet again the same ShotInfoVersion for different data Condition => '$$valPt =~ /^0216/ and $count == 5311', Name => 'ShotInfoD300S', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD300S', DecryptStart => 4, DecryptLen => 827, ByteOrder => 'BigEndian', }, }, # 0225 - D600 { #29 (D700 firmware version 1.02f) Condition => '$$valPt =~ /^0212/ and $count == 5312', Name => 'ShotInfoD700', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD700', DecryptStart => 4, DecryptLen => 0x358, ByteOrder => 'BigEndian', }, }, { #PH (D800 firmware 1.01a) Condition => '$$valPt =~ /^0222/', Name => 'ShotInfoD800', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD800', DecryptStart => 4, DecryptLen => 0x720, ByteOrder => 'BigEndian', }, }, { #28 (D810 firmware 1.01) Condition => '$$valPt =~ /^0233/', Name => 'ShotInfoD810', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD810', DecryptStart => 4, # initially only decrypt enough to extract CustomSettingsOffset DecryptLen => 0x40, # then decrypt through to the end of the custom settings DecryptMore => 'Get32u(\$data, 0x40) + 53 + 4', ByteOrder => 'LittleEndian', }, }, # 0217 - D3000 # 0219 - D3100 # 0224 - D3200 { #PH Condition => '$$valPt =~ /^0215/ and $count == 6745', Name => 'ShotInfoD5000', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD5000', DecryptStart => 4, DecryptLen => 0x39a, ByteOrder => 'BigEndian', }, }, { #PH Condition => '$$valPt =~ /^0221/ and $count == 8902', Name => 'ShotInfoD5100', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD5100', DecryptStart => 4, DecryptLen => 0x430, ByteOrder => 'BigEndian', }, }, { #PH Condition => '$$valPt =~ /^0226/ and $count == 11587', Name => 'ShotInfoD5200', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD5200', DecryptStart => 4, DecryptLen => 0xd00, ByteOrder => 'BigEndian', }, }, { #29 (D7000 firmware version 1.01b) Condition => '$$valPt =~ /^0220/', Name => 'ShotInfoD7000', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD7000', DecryptStart => 4, DecryptLen => 0x448, ByteOrder => 'BigEndian', }, }, { # (D4 firmware version 1.00g) Condition => '$$valPt =~ /^0223/', Name => 'ShotInfoD4', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD4', DecryptStart => 4, DecryptLen => 0x789, ByteOrder => 'BigEndian', }, }, { # (D4S firmware version 1.00d and 1.01a) Condition => '$$valPt =~ /^0231/', Name => 'ShotInfoD4S', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfoD4S', DecryptStart => 4, DecryptLen => 0x3517, ByteOrder => 'LittleEndian', }, }, # 0227 - D7100 { Condition => '$$valPt =~ /^02/', Name => 'ShotInfo02xx', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfo', ProcessProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WriteProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, DecryptStart => 4, DecryptLen => 0x251, ByteOrder => 'BigEndian', }, }, { Name => 'ShotInfoUnknown', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ShotInfo', ByteOrder => 'BigEndian', }, }, ], 0x0092 => { #2 Name => 'HueAdjustment', Writable => 'int16s', }, # 0x0093 - ref 15 calls this Saturation, but this is wrong - PH 0x0093 => { #21 Name => 'NEFCompression', Writable => 'int16u', PrintConv => { 1 => 'Lossy (type 1)', # (older models) 2 => 'Uncompressed', #JD - D100 (even though TIFF compression is set!) 3 => 'Lossless', 4 => 'Lossy (type 2)', 6 => 'Uncompressed (reduced to 12 bit)', #33 8 => 'Small', #33 }, }, 0x0094 => { Name => 'Saturation', Writable => 'int16s' }, 0x0095 => { Name => 'NoiseReduction', Writable => 'string' }, # (long exposure NR) 0x0096 => { Name => 'NEFLinearizationTable', # same table as DNG LinearizationTable (ref JD) Writable => 'undef', Flags => [ 'Binary', 'Protected' ], }, 0x0097 => [ #4 # (NOTE: these are byte-swapped by NX when byte order changes) { Condition => '$$valPt =~ /^0100/', # (D100 and Coolpix models) Name => 'ColorBalance0100', SubDirectory => { Start => '$valuePtr + 72', TagTable => 'Image::ExifTool::Nikon::ColorBalance1', }, }, { Condition => '$$valPt =~ /^0102/', # (D2H) Name => 'ColorBalance0102', SubDirectory => { Start => '$valuePtr + 10', TagTable => 'Image::ExifTool::Nikon::ColorBalance2', }, }, { Condition => '$$valPt =~ /^0103/', # (D70/D70s) Name => 'ColorBalance0103', # D70: at file offset 'tag-value + base + 20', 4 16 bits numbers, # v[0]/v[1] , v[2]/v[3] are the red/blue multipliers. SubDirectory => { Start => '$valuePtr + 20', TagTable => 'Image::ExifTool::Nikon::ColorBalance3', }, }, { Condition => '$$valPt =~ /^0205/', # (D50) Name => 'ColorBalance0205', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ColorBalance2', ProcessProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WriteProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, DecryptStart => 4, DecryptLen => 22, # 284 bytes encrypted, but don't need to decrypt it all DirOffset => 14, }, }, { # (D3/D3X/D300/D700=0209,D300S=0212,D3S=0214) Condition => '$$valPt =~ /^02(09|12|14)/', Name => 'ColorBalance0209', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ColorBalance4', ProcessProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WriteProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, DecryptStart => 284, DecryptLen => 18, # 324 bytes encrypted, but don't need to decrypt it all DirOffset => 10, }, }, { # (D2X/D2Xs=0204,D2Hs=0206,D200=0207,D40/D40X/D80=0208,D60=0210) Condition => '$$valPt =~ /^02(\d{2})/ and $1 < 11', Name => 'ColorBalance02', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ColorBalance2', ProcessProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WriteProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, DecryptStart => 284, DecryptLen => 14, # don't need to decrypt it all DirOffset => 6, }, }, { Condition => '$$valPt =~ /^0211/', # (D90/D5000) Name => 'ColorBalance0211', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ColorBalance4', ProcessProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WriteProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, DecryptStart => 284, DecryptLen => 24, # don't need to decrypt it all DirOffset => 16, }, }, { Condition => '$$valPt =~ /^0213/', # (D3000) Name => 'ColorBalance0213', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ColorBalance2', ProcessProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WriteProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, DecryptStart => 284, DecryptLen => 18, # don't need to decrypt it all DirOffset => 10, }, }, { # (D3100=0215,D7000/D5100=0216,D4/D800/D3200=0217) Condition => '$$valPt =~ /^021[567]/', Name => 'ColorBalance0215', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ColorBalance4', ProcessProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WriteProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, DecryptStart => 284, DecryptLen => 12, # don't need to decrypt it all DirOffset => 4, }, }, { # (D5200/D7100=0218, D5300=0219, D610/Df=0220, D3300=0221, CoolpixA=0601) Name => 'ColorBalanceUnknown02', Condition => '$$valPt =~ /^0[26]/', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ColorBalanceUnknown', ProcessProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, DecryptStart => 284, DecryptLen => 10, # (arbitrary) }, }, { # (1J1/1J2/1V1=0400, 1V2=0401, 1J3/1S1=0402, 1AW1=0403) Name => 'ColorBalanceUnknown04', Condition => '$$valPt =~ /^04/', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ColorBalanceUnknown', ProcessProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, DecryptStart => 4, DecryptLen => 10, # (arbitrary) }, }, { # (CoolpixP7700/P7800=0500, CoolpixP330/P520=0502) Name => 'ColorBalanceUnknown', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ColorBalanceUnknown' }, }, ], 0x0098 => [ { #8 Condition => '$$valPt =~ /^0100/', # D100, D1X - PH Name => 'LensData0100', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::LensData00' }, }, { #8 Condition => '$$valPt =~ /^0101/', # D70, D70s - PH Name => 'LensData0101', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::LensData01' }, }, # note: this information is encrypted if the version is 02xx { #8 # 0201 - D200, D2Hs, D2X and D2Xs # 0202 - D40, D40X and D80 # 0203 - D300 Condition => '$$valPt =~ /^020[1-3]/', Name => 'LensData0201', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::LensData01', ProcessProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WriteProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, DecryptStart => 4, }, }, { #PH Condition => '$$valPt =~ /^0204/', # D90, D7000 Name => 'LensData0204', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::LensData0204', ProcessProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WriteProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, DecryptStart => 4, }, }, { Condition => '$$valPt =~ /^0400/', # 1J1, 1V1 Name => 'LensData0400', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::LensData0400', ProcessProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WriteProc => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, DecryptStart => 4, }, }, { # (1J1/1V1=0400) Name => 'LensDataUnknown', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::LensDataUnknown', }, }, ], 0x0099 => { #2/15 Name => 'RawImageCenter', Writable => 'int16u', Count => 2, }, 0x009a => { #10 Name => 'SensorPixelSize', Writable => 'rational64u', Count => 2, PrintConv => '$val=~s/ / x /;"$val um"', PrintConvInv => '$val=~tr/a-zA-Z/ /;$val', }, 0x009c => { #14 # L2/L3 has these modes (from owner's manual): - PH # Portrait Assist: FACE-PRIORITY AF,PORTRAIT,PORTRAIT LEFT,PORTRAIT RIGHT, # PORTRAIT CLOSE-UP,PORTRAIT COUPLE,PORTRAIT-FIGURE # Landscape Assist:LANDSCAPE,SCENIC VIEW,ARCHITECTURE,GROUP RIGHT,GROUP LEFT # Sports Assist: SPORTS,SPORT SPECTATOR,SPORT COMPOSITE # P7100 has test modes: - PH # CREATIVE MONOCHROME,PAINTING,CROSS PROCESS,SOFT,NOSTALGIC SEPIA, # HIGH KEY,LOW KEY,SELECTIVE COLOR,ZOOM EXPOSURE EXP.,DEFOCUS DURING Name => 'SceneAssist', Writable => 'string', }, 0x009e => { #JD Name => 'RetouchHistory', Writable => 'int16u', Count => 10, # trim off extra "None" values ValueConv => '$val=~s/( 0)+$//; $val', ValueConvInv => 'my $n=($val=~/ \d+/g);$n < 9 ? $val . " 0" x (9-$n) : $val', PrintConvColumns => 2, PrintConv => [ \%retouchValues, \%retouchValues, \%retouchValues, \%retouchValues, \%retouchValues, \%retouchValues, \%retouchValues, \%retouchValues, \%retouchValues, \%retouchValues, ], }, 0x00a0 => { Name => 'SerialNumber', Writable => 'string' }, #2 0x00a2 => { # size of compressed image data plus EOI segment (ref 10) Name => 'ImageDataSize', Writable => 'int32u', }, # 0x00a3 - int8u: 0 (All DSLR's but D1,D1H,D1X,D100) # 0x00a4 - version number found only in NEF images from DSLR models except the # D1,D1X,D2H and D100. Value is "0200" for all available samples except images # edited by Nikon Capture Editor 4.3.1 W and 4.4.2 which have "0100" - PH 0x00a5 => { #15 Name => 'ImageCount', Writable => 'int32u', }, 0x00a6 => { #15 Name => 'DeletedImageCount', Writable => 'int32u', }, # the sum of 0xa5 and 0xa6 is equal to 0xa7 ShutterCount (D2X,D2Hs,D2H,D200, ref 10) 0x00a7 => { # Number of shots taken by camera so far (ref 2) Name => 'ShutterCount', Writable => 'int32u', Protected => 1, Notes => q{ this value is used as a key to decrypt other information -- writing this tag causes the other information to be re-encrypted with the new key }, }, 0x00a8 => [#JD { Name => 'FlashInfo0100', Condition => '$$valPt =~ /^010[01]/', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::FlashInfo0100' }, }, { Name => 'FlashInfo0102', Condition => '$$valPt =~ /^0102/', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::FlashInfo0102' }, }, { Name => 'FlashInfo0103', # (0104 for D7000, 0105 for D800) Condition => '$$valPt =~ /^010[345]/', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::FlashInfo0103' }, }, { Name => 'FlashInfoUnknown', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::FlashInfoUnknown' }, }, ], 0x00a9 => { Name => 'ImageOptimization',Writable => 'string' },#2 0x00aa => { Name => 'Saturation', Writable => 'string' }, #2 0x00ab => { Name => 'VariProgram', Writable => 'string' }, #2 (scene mode for DSLR's - PH) 0x00ac => { Name => 'ImageStabilization',Writable=> 'string' }, #14 0x00ad => { Name => 'AFResponse', Writable => 'string' }, #14 0x00b0 => { #PH Name => 'MultiExposure', Condition => '$$valPt =~ /^0100/', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::MultiExposure' }, }, 0x00b1 => { #14/PH/JD (D80) Name => 'HighISONoiseReduction', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Minimal', # for high ISO (>800) when setting is "Off" 2 => 'Low', # Low,Normal,High take effect for ISO > 400 3 => 'Medium Low', 4 => 'Normal', 5 => 'Medium High', 6 => 'High', }, }, # 0x00b2 (string: "NORMAL ", 0xc3's, 0xff's or 0x20's) 0x00b3 => { #14 Name => 'ToningEffect', Writable => 'string', }, 0x00b6 => { #PH Name => 'PowerUpTime', Groups => { 2 => 'Time' }, Shift => 'Time', # not clear whether "powered up" means "turned on" or "power applied" - PH Notes => 'date/time when camera was last powered up', Writable => 'undef', # must use RawConv so byte order is correct RawConv => sub { my $val = shift; return $val if length $val < 7; my $shrt = GetByteOrder() eq 'II' ? 'v' : 'n'; my @date = unpack("${shrt}C5", $val); return sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d', @date); }, RawConvInv => sub { my $val = shift; my $shrt = GetByteOrder() eq 'II' ? 'v' : 'n'; my @date = ($val =~ /\d+/g); return pack("${shrt}C6", @date, 0); }, PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,0)', }, 0x00b7 => { #JD Name => 'AFInfo2', # (this structure may be byte swapped when rewritten by CaptureNX) SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AFInfo2' }, }, 0x00b8 => [{ #PH Name => 'FileInfo', # unfortunately, some newer models write this as little-endian # (and CaptureNX can change the byte order of the maker notes, # but leaves this structure unchanged) # - it will be an ongoing pain to keep this list of models up-to-date, # so if only one ordering yields valid DirectoryNumber and FileNumber values, # use it, otherwise default to a-priori knowledge of the camera model # (assume that a valid DirectoryNumber is 100-999, and a valid FileNumber # is 0000-9999, although I have some samples with a DirectoryNumber of 99) Condition => q{ if (length($$valPt) >= 0) { my ($dir, $file) = unpack('x6vv', $$valPt); my $littleEndian = ($dir >= 100 and $dir <= 999 and $file <= 9999); ($dir, $file) = unpack('x6nn', $$valPt); my $bigEndian = ($dir >= 100 and $dir <= 999 and $file <= 9999); return $littleEndian if $littleEndian xor $bigEndian; } return $$self{Model} =~ /^NIKON (D4S|D750|D810|D3300|D5200|D5300|D5500|D7100)$/; }, SubDirectory => { TagTable => 'Image::ExifTool::Nikon::FileInfo', ByteOrder => 'LittleEndian', }, },{ Name => 'FileInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::FileInfo', ByteOrder => 'BigEndian', }, }], 0x00b9 => { #28 Name => 'AFTune', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AFTune' }, }, # 0x00ba - custom curve data? (ref 28?) (only in NEF images) 0x00bb => { #forum6281 Name => 'RetouchInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::RetouchInfo' }, }, # 0x00bc - NEFThumbnail? (forum6281) 0x00bd => { #PH (P6000) Name => 'PictureControlData', Writable => 'undef', Permanent => 0, Flags => [ 'Binary', 'Protected' ], SubDirectory => { TagTable => 'Image::ExifTool::Nikon::PictureControl' }, }, 0x00c3 => { Name => 'BarometerInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::BarometerInfo', ByteOrder => 'LittleEndian', }, }, 0x0e00 => { Name => 'PrintIM', Description => 'Print Image Matching', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main', }, }, # 0x0e01 - In D70 NEF files produced by Nikon Capture, the data for this tag extends 4 bytes # past the end of the maker notes. Very odd. I hope these 4 bytes aren't useful because # they will get lost by any utility that blindly copies the maker notes (not ExifTool) - PH 0x0e01 => { Name => 'NikonCaptureData', Writable => 'undef', Permanent => 0, # (Drop because may be too large for JPEG images) Flags => [ 'Binary', 'Protected', 'Drop' ], Notes => q{ this data is dropped when copying Nikon MakerNotes since it may be too large to fit in the EXIF segment of a JPEG image, but it may be copied as a block into existing Nikon MakerNotes later if desired }, SubDirectory => { DirName => 'NikonCapture', TagTable => 'Image::ExifTool::NikonCapture::Main', }, }, # 0x0e05 written by Nikon Capture to NEF files, values of 1 and 2 - PH 0x0e09 => { #12 Name => 'NikonCaptureVersion', Writable => 'string', PrintConv => undef, }, # 0x0e0e is in D70 Nikon Capture files (not out-of-the-camera D70 files) - PH 0x0e0e => { #PH Name => 'NikonCaptureOffsets', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::CaptureOffsets', Validate => '$val =~ /^0100/', Start => '$valuePtr + 4', }, }, 0x0e10 => { #17 Name => 'NikonScanIFD', Groups => { 1 => 'NikonScan', 2 => 'Image' }, Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::Scan', Start => '$val', }, }, 0x0e13 => [{ # PH/http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,2737.0.html Name => 'NikonCaptureEditVersions', Condition => '$self->Options("ExtractEmbedded")', Notes => q{ the ExtractEmbedded option may be used to decode settings from the stored edit versions, otherwise this is extracted as a binary data block }, Writable => 'undef', Permanent => 0, Drop => 1, # (may be too large for JPEG images) SubDirectory => { DirName => 'NikonCaptureEditVersions', TagTable => 'Image::ExifTool::NikonCapture::Main', ProcessProc => \&ProcessNikonCaptureEditVersions, WriteProc => sub { return undef }, # (writing not yet supported) }, },{ Name => 'NikonCaptureEditVersions', Writable => 'undef', Permanent => 0, Flags => [ 'Binary', 'Protected', 'Drop' ], }], 0x0e1d => { #JD Name => 'NikonICCProfile', Flags => [ 'Binary', 'Protected' ], Writable => 'undef', # must be defined here so tag will be extracted if specified WriteCheck => q{ require Image::ExifTool::ICC_Profile; return Image::ExifTool::ICC_Profile::ValidateICC(\$val); }, SubDirectory => { DirName => 'NikonICCProfile', TagTable => 'Image::ExifTool::ICC_Profile::Main', }, }, 0x0e1e => { #PH Name => 'NikonCaptureOutput', Writable => 'undef', Permanent => 0, Flags => [ 'Binary', 'Protected' ], SubDirectory => { TagTable => 'Image::ExifTool::Nikon::CaptureOutput', Validate => '$val =~ /^0100/', }, }, 0x0e22 => { #28 Name => 'NEFBitDepth', Writable => 'int16u', Count => 4, Protected => 1, PrintConv => { '0 0 0 0' => 'n/a (JPEG)', '8 8 8 0' => '8 x 3', # TIFF RGB '16 16 16 0' => '16 x 3', # TIFF 16-bit RGB '12 0 0 0' => 12, '14 0 0 0' => 14, }, }, ); # NikonScan IFD entries (ref 17) %Image::ExifTool::Nikon::Scan = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITE_GROUP => 'NikonScan', WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 1 => 'NikonScan', 2 => 'Image' }, VARS => { MINOR_ERRORS => 1 }, # this IFD is non-essential and often corrupted NOTES => 'This information is written by the Nikon Scan software.', 0x02 => { Name => 'FilmType', Writable => 'string', }, 0x40 => { Name => 'MultiSample', Writable => 'string' }, 0x41 => { Name => 'BitDepth', Writable => 'int16u' }, 0x50 => { Name => 'MasterGain', Writable => 'rational64s', PrintConv => 'sprintf("%.2f",$val)', PrintConvInv => '$val', }, 0x51 => { Name => 'ColorGain', Writable => 'rational64s', Count => 3, PrintConv => 'sprintf("%.2f %.2f %.2f",split(" ",$val))', PrintConvInv => '$val', }, 0x60 => { Name => 'ScanImageEnhancer', Writable => 'int32u', PrintConv => \%offOn, }, 0x100 => { Name => 'DigitalICE', Writable => 'string' }, 0x110 => { Name => 'ROCInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ROC' }, }, 0x120 => { Name => 'GEMInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::GEM' }, }, 0x200 => { Name => 'DigitalDEEShadowAdj', Writable => 'int32u' }, 0x201 => { Name => 'DigitalDEEThreshold', Writable => 'int32u' }, 0x202 => { Name => 'DigitalDEEHighlightAdj',Writable => 'int32u' }, ); # ref 17 %Image::ExifTool::Nikon::ROC = ( %binaryDataAttrs, FORMAT => 'int32u', GROUPS => { 0 => 'MakerNotes', 1 => 'NikonScan', 2 => 'Image' }, 0 => { Name => 'DigitalROC', ValueConv => '$val / 10', ValueConvInv => 'int($val * 10)', }, ); # ref 17 %Image::ExifTool::Nikon::GEM = ( %binaryDataAttrs, FORMAT => 'int32u', GROUPS => { 0 => 'MakerNotes', 1 => 'NikonScan', 2 => 'Image' }, 0 => { Name => 'DigitalGEM', ValueConv => '$val<95 ? $val/20-1 : 4', ValueConvInv => '$val == 4 ? 95 : int(($val + 1) * 20)', }, ); # Vibration Reduction information - PH (D300) %Image::ExifTool::Nikon::VRInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added 0 => { Name => 'VRInfoVersion', Format => 'undef[4]', Writable => 0, }, 4 => { Name => 'VibrationReduction', PrintConv => { 0 => 'n/a', # (1V1 with a non-VR lens) 1 => 'On', 2 => 'Off', }, }, # 5 - values: 0, 1 (VR On), 2 (VR Off) 6 => { Name => 'VRMode', PrintConv => { 0 => 'Normal', # 1 - seen this for 1V1 - PH 2 => 'Active', # (1J1) }, }, # 7 - values: 0, 1 ); # Face detection information - PH (S8100) %Image::ExifTool::Nikon::FaceDetect = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, FORMAT => 'int16u', DATAMEMBER => [ 0x03 ], 0x01 => { Name => 'FaceDetectFrameSize', Format => 'int16u[2]', }, 0x03 => { Name => 'FacesDetected', DataMember => 'FacesDetected', RawConv => '$$self{FacesDetected} = $val', }, 0x04 => { Name => 'Face1Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 1 ? undef : $val', Notes => q{ top, left, width and height of face detect area in coordinates of FaceDetectFrameSize }, }, 0x08 => { Name => 'Face2Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 2 ? undef : $val', }, 0x0c => { Name => 'Face3Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 3 ? undef : $val', }, 0x10 => { Name => 'Face4Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 4 ? undef : $val', }, 0x14 => { Name => 'Face5Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 5 ? undef : $val', }, 0x18 => { Name => 'Face6Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 6 ? undef : $val', }, 0x1c => { Name => 'Face7Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 7 ? undef : $val', }, 0x20 => { Name => 'Face8Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 8 ? undef : $val', }, 0x24 => { Name => 'Face9Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 9 ? undef : $val', }, 0x28 => { Name => 'Face10Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 10 ? undef : $val', }, 0x2c => { Name => 'Face11Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 11 ? undef : $val', }, 0x30 => { Name => 'Face12Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 12 ? undef : $val', }, ); # Picture Control information - PH (D300,P6000) %Image::ExifTool::Nikon::PictureControl = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added 0 => { Name => 'PictureControlVersion', Format => 'undef[4]', Writable => 0, }, 4 => { Name => 'PictureControlName', Format => 'string[20]', # make lower case with a leading capital for each word PrintConv => \&FormatString, PrintConvInv => 'uc($val)', }, 24 => { Name => 'PictureControlBase', Format => 'string[20]', PrintConv => \&FormatString, PrintConvInv => 'uc($val)', }, # beginning at byte 44, there is some interesting information. # here are the observed bytes for each PictureControlMode: # 44 45 46 47 48 49 50 51 52 53 54 55 56 57 # STANDARD 00 01 00 00 00 80 83 80 80 80 80 ff ff ff # NEUTRAL 03 c2 00 00 00 ff 82 80 80 80 80 ff ff ff # VIVID 00 c3 00 00 00 80 84 80 80 80 80 ff ff ff # MONOCHROME 06 4d 00 01 02 ff 82 80 80 ff ff 80 80 ff # Neutral2 03 c2 01 00 02 ff 80 7f 81 00 7f ff ff ff (custom) # (note that up to 9 different custom picture controls can be stored) # --> bytes 44 and 45 are swapped if CaptureNX changes the byte order # 48 => { #21 Name => 'PictureControlAdjust', PrintConv => { 0 => 'Default Settings', 1 => 'Quick Adjust', 2 => 'Full Control', }, }, 49 => { Name => 'PictureControlQuickAdjust', # settings: -2 to +2 (n/a for Neutral and Monochrome modes) DelValue => 0xff, ValueConv => '$val - 0x80', ValueConvInv => '$val + 0x80', PrintConv => 'Image::ExifTool::Nikon::PrintPC($val)', PrintConvInv => 'Image::ExifTool::Nikon::PrintPCInv($val)', }, 50 => { Name => 'Sharpness', # settings: 0 to 9, Auto ValueConv => '$val - 0x80', ValueConvInv => '$val + 0x80', PrintConv => 'Image::ExifTool::Nikon::PrintPC($val,"No Sharpening","%d")', PrintConvInv => 'Image::ExifTool::Nikon::PrintPCInv($val)', }, 51 => { Name => 'Contrast', # settings: -3 to +3, Auto ValueConv => '$val - 0x80', ValueConvInv => '$val + 0x80', PrintConv => 'Image::ExifTool::Nikon::PrintPC($val)', PrintConvInv => 'Image::ExifTool::Nikon::PrintPCInv($val)', }, 52 => { Name => 'Brightness', # settings: -1 to +1 ValueConv => '$val - 0x80', ValueConvInv => '$val + 0x80', PrintConv => 'Image::ExifTool::Nikon::PrintPC($val)', PrintConvInv => 'Image::ExifTool::Nikon::PrintPCInv($val)', }, 53 => { Name => 'Saturation', # settings: -3 to +3, Auto (n/a for Monochrome mode) DelValue => 0xff, ValueConv => '$val - 0x80', ValueConvInv => '$val + 0x80', PrintConv => 'Image::ExifTool::Nikon::PrintPC($val)', PrintConvInv => 'Image::ExifTool::Nikon::PrintPCInv($val)', }, 54 => { Name => 'HueAdjustment', # settings: -3 to +3 (n/a for Monochrome mode) DelValue => 0xff, ValueConv => '$val - 0x80', ValueConvInv => '$val + 0x80', PrintConv => 'Image::ExifTool::Nikon::PrintPC($val,"None")', PrintConvInv => 'Image::ExifTool::Nikon::PrintPCInv($val)', }, 55 => { Name => 'FilterEffect', # settings: Off,Yellow,Orange,Red,Green (n/a for color modes) DelValue => 0xff, PrintHex => 1, PrintConv => { 0x80 => 'Off', 0x81 => 'Yellow', 0x82 => 'Orange', 0x83 => 'Red', 0x84 => 'Green', 0xff => 'n/a', }, }, 56 => { Name => 'ToningEffect', # settings: B&W,Sepia,Cyanotype,Red,Yellow,Green,Blue-Green,Blue, # Purple-Blue,Red-Purple (n/a for color modes) DelValue => 0xff, PrintHex => 1, PrintConvColumns => 2, PrintConv => { 0x80 => 'B&W', 0x81 => 'Sepia', 0x82 => 'Cyanotype', 0x83 => 'Red', 0x84 => 'Yellow', 0x85 => 'Green', 0x86 => 'Blue-green', 0x87 => 'Blue', 0x88 => 'Purple-blue', 0x89 => 'Red-purple', 0xff => 'n/a', # 0x04 - seen for D810 (PH) }, }, 57 => { #21 Name => 'ToningSaturation', # settings: B&W,Sepia,Cyanotype,Red,Yellow,Green,Blue-Green,Blue, # Purple-Blue,Red-Purple (n/a unless ToningEffect is used) DelValue => 0xff, ValueConv => '$val - 0x80', ValueConvInv => '$val + 0x80', PrintConv => '$val==0x7f ? "n/a" : $val', PrintConvInv => 'Image::ExifTool::Nikon::PrintPCInv($val)', }, ); # World Time information - JD (D300) %Image::ExifTool::Nikon::WorldTime = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Time' }, 0 => { Name => 'TimeZone', Format => 'int16s', PrintConv => q{ my $sign = $val < 0 ? '-' : '+'; my $h = int(abs($val) / 60); sprintf("%s%.2d:%.2d", $sign, $h, abs($val)-60*$h); }, PrintConvInv => q{ $val =~ /([-+]?)(\d+):(\d+)/ or return undef; return $1 . ($2 * 60 + $3); }, }, 2 => { Name => 'DaylightSavings', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, 3 => { Name => 'DateDisplayFormat', PrintConv => { 0 => 'Y/M/D', 1 => 'M/D/Y', 2 => 'D/M/Y', }, }, ); # ISO information - PH (D300) %Image::ExifTool::Nikon::ISOInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'ISO', Notes => 'val = 100 * 2**(raw/12-5)', Priority => 0, # because people like to see rounded-off values if they exist ValueConv => '100*exp(($val/12-5)*log(2))', ValueConvInv => '(log($val/100)/log(2)+5)*12', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, # 1 - 0x01 # 2 - 0x0c (probably the ISO divisor above) # 3 - 0x00 4 => { Name => 'ISOExpansion', Format => 'int16u', PrintHex => 1, PrintConvColumns => 2, PrintConv => { 0x000 => 'Off', 0x101 => 'Hi 0.3', 0x102 => 'Hi 0.5', 0x103 => 'Hi 0.7', 0x104 => 'Hi 1.0', 0x105 => 'Hi 1.3', # (Hi 1.3-1.7 may be possible with future models) 0x106 => 'Hi 1.5', 0x107 => 'Hi 1.7', 0x108 => 'Hi 2.0', #(NC) - D3 should have this mode 0x109 => 'Hi 2.3', #33 0x10a => 'Hi 2.5', #33 0x10b => 'Hi 2.7', #33 0x10c => 'Hi 3.0', #33 0x10d => 'Hi 3.3', #33 0x10e => 'Hi 3.5', #33 0x10f => 'Hi 3.7', #33 0x110 => 'Hi 4.0', #33 0x201 => 'Lo 0.3', 0x202 => 'Lo 0.5', 0x203 => 'Lo 0.7', 0x204 => 'Lo 1.0', }, }, # bytes 6-11 same as 0-4 in my samples (why is this duplicated?) 6 => { Name => 'ISO2', Notes => 'val = 100 * 2**(raw/12-5)', ValueConv => '100*exp(($val/12-5)*log(2))', ValueConvInv => '(log($val/100)/log(2)+5)*12', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, # 7 - 0x01 # 8 - 0x0c (probably the ISO divisor above) # 9 - 0x00 10 => { Name => 'ISOExpansion2', Format => 'int16u', PrintHex => 1, PrintConvColumns => 2, PrintConv => { 0x000 => 'Off', 0x101 => 'Hi 0.3', 0x102 => 'Hi 0.5', 0x103 => 'Hi 0.7', 0x104 => 'Hi 1.0', 0x105 => 'Hi 1.3', # (Hi 1.3-1.7 may be possible with future models) 0x106 => 'Hi 1.5', 0x107 => 'Hi 1.7', 0x108 => 'Hi 2.0', #(NC) - D3 should have this mode 0x201 => 'Lo 0.3', 0x202 => 'Lo 0.5', 0x203 => 'Lo 0.7', 0x204 => 'Lo 1.0', }, }, # bytes 12-13: 00 00 ); # distortion information - PH (D5000) %Image::ExifTool::Nikon::DistortInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'DistortionVersion', Format => 'undef[4]', Writable => 0, Unknown => 1, }, 4 => { Name => 'AutoDistortionControl', PrintConv => { 0 => 'Off', 1 => 'On', 2 => 'On (underwater)', # (1AW1) }, }, ); # unknown information - PH (D7000) %Image::ExifTool::Nikon::UnknownInfo = ( %binaryDataAttrs, FORMAT => 'int32u', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'UnknownInfoVersion', Condition => '$$valPt =~ /^\d{4}/', Format => 'undef[4]', Writable => 0, Unknown => 1, }, # (bytes 6/7 and 8/9 are swapped if CaptureNX changes the byte order) ); # more unknown information - PH (D7000) %Image::ExifTool::Nikon::UnknownInfo2 = ( %binaryDataAttrs, FORMAT => 'int32u', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'UnknownInfo2Version', Condition => '$$valPt =~ /^\d{4}/', Format => 'undef[4]', Writable => 0, Unknown => 1, }, # (byte 4 may be changed from 1 to 0 when rewritten by CaptureNX) ); # Nikon AF information (ref 13) %Image::ExifTool::Nikon::AFInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'AFAreaMode', PrintConv => { 0 => 'Single Area', 1 => 'Dynamic Area', 2 => 'Dynamic Area (closest subject)', 3 => 'Group Dynamic', 4 => 'Single Area (wide)', 5 => 'Dynamic Area (wide)', }, }, 1 => { Name => 'AFPoint', Notes => 'in some focus modes this value is not meaningful', PrintConvColumns => 2, PrintConv => { 0 => 'Center', 1 => 'Top', 2 => 'Bottom', 3 => 'Mid-left', 4 => 'Mid-right', 5 => 'Upper-left', 6 => 'Upper-right', 7 => 'Lower-left', 8 => 'Lower-right', 9 => 'Far Left', 10 => 'Far Right', }, }, 2 => { Name => 'AFPointsInFocus', Format => 'int16u', PrintConvColumns => 2, PrintConv => { 0 => '(none)', 0x7ff => 'All 11 Points', BITMASK => { 0 => 'Center', 1 => 'Top', 2 => 'Bottom', 3 => 'Mid-left', 4 => 'Mid-right', 5 => 'Upper-left', 6 => 'Upper-right', 7 => 'Lower-left', 8 => 'Lower-right', 9 => 'Far Left', 10 => 'Far Right', }, }, }, ); # Nikon AF information for D3 and D300 (ref JD) %Image::ExifTool::Nikon::AFInfo2 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, DATAMEMBER => [ 0, 4, 6 ], NOTES => "These tags are written by Nikon DSLR's which have the live view feature.", # NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added 0 => { Name => 'AFInfo2Version', Format => 'undef[4]', Writable => 0, RawConv => '$$self{AFInfo2Version} = $val', }, 4 => { #PH Name => 'ContrastDetectAF', RawConv => '$$self{ContrastDetectAF} = $val', PrintConv => \%offOn, Notes => 'this is Off for the hybrid AF used in Nikon 1 models', }, 5 => [ { Name => 'AFAreaMode', Condition => 'not $$self{ContrastDetectAF}', Notes => 'ContrastDetectAF Off', PrintConv => { 0 => 'Single Area', # (called "Single Point" in manual - PH) 1 => 'Dynamic Area', #PH 2 => 'Dynamic Area (closest subject)', #PH 3 => 'Group Dynamic', #PH 4 => 'Dynamic Area (9 points)', #JD/28 5 => 'Dynamic Area (21 points)', #28 6 => 'Dynamic Area (51 points)', #28 7 => 'Dynamic Area (51 points, 3D-tracking)', #PH/28 8 => 'Auto-area', 9 => 'Dynamic Area (3D-tracking)', #PH (D5000 "3D-tracking (11 points)") 10 => 'Single Area (wide)', #PH 11 => 'Dynamic Area (wide)', #PH 12 => 'Dynamic Area (wide, 3D-tracking)', #PH 128 => 'Single', #PH (1J1,1J2,1J3,1J4,1S1,1S2,1V2,1V3) 129 => 'Auto (41 points)', #PH (1J1,1J2,1J3,1J4,1S1,1S2,1V1,1V2,1V3,AW1) 130 => 'Subject Tracking (41 points)', #PH (1J1,1J4,1J3) 131 => 'Face Priority (41 points)', #PH (1J1,1J3,1S1,1V2,AW1) # 134 - seen for 1V1[PhaseDetectAF=0] (PH) # 135 - seen for 1J2[PhaseDetectAF=4] (PH) }, }, { #PH (D3/D90/D5000) Name => 'AFAreaMode', Notes => 'ContrastDetectAF On', PrintConv => { 0 => 'Contrast-detect', # (D3) 1 => 'Contrast-detect (normal area)', # (D90/D5000) # (D90 and D5000 give value of 2 when set to 'Face Priority' and # 'Subject Tracking', but I didn't have a face to shoot at or a # moving subject to track so perhaps this value changes dynamically) 2 => 'Contrast-detect (wide area)', # (D90/D5000) 3 => 'Contrast-detect (face priority)', # (ViewNX) 4 => 'Contrast-detect (subject tracking)', # (ViewNX) 128 => 'Single', #PH (1V3) 129 => 'Auto (41 points)', #PH (NC) 130 => 'Subject Tracking (41 points)', #PH (NC) 131 => 'Face Priority (41 points)', #PH (NC) }, }, ], 6 => { Name => 'PhaseDetectAF', #JD(AutoFocus), PH(PhaseDetectAF) Notes => 'PrimaryAFPoint and AFPointsUsed below are only valid when this is On', RawConv => '$$self{PhaseDetectAF} = $val', PrintConv => { # [observed AFAreaMode values in square brackets for each PhaseDetectAF value] 0 => 'Off', 1 => 'On (51-point)', #PH 2 => 'On (11-point)', #PH 3 => 'On (39-point)', #29 (D7000) 4 => 'On (73-point)', #PH (1J1[128/129],1J2[128/129/135],1J3/1S1/1V2[128/129/131],1V1[129],AW1[129/131]) 5 => 'On (5)', #PH (1S2[128/129], 1J4/1V3[129]) 6 => 'On (105-point)', #PH (1J4/1V3[128/130]) }, }, 7 => [ { #PH/JD Name => 'PrimaryAFPoint', Condition => '$$self{PhaseDetectAF} < 2', Notes => 'models with 51-point AF: D3, D3S, D3X, D300, D300S, D700 and D800', PrintConvColumns => 5, PrintConv => { 0 => '(none)', %afPoints51, 1 => 'C6 (Center)', # (add " (Center)" to central point) }, }, { #10 Name => 'PrimaryAFPoint', Notes => 'models with 11-point AF: D90, D3000, D3100, D5000 and D5100', Condition => '$$self{PhaseDetectAF} == 2', PrintConvColumns => 2, PrintConv => { 0 => '(none)', 1 => 'Center', 2 => 'Top', 3 => 'Bottom', 4 => 'Mid-left', 5 => 'Upper-left', 6 => 'Lower-left', 7 => 'Far Left', 8 => 'Mid-right', 9 => 'Upper-right', 10 => 'Lower-right', 11 => 'Far Right', }, }, { #29 Name => 'PrimaryAFPoint', Condition => '$$self{PhaseDetectAF} == 3', Notes => 'models with 39-point AF: D600 and D7000', PrintConvColumns => 5, PrintConv => { 0 => '(none)', %afPoints39, 1 => 'C6 (Center)', # (add " (Center)" to central point) }, }, { #PH Name => 'PrimaryAFPoint', Condition => '$$self{PhaseDetectAF} == 4', Notes => 'Nikon 1 models with older 135-point AF and 73-point phase-detect AF', PrintConvColumns => 5, PrintConv => { 0 => '(none)', %afPoints135, 1 => 'E8 (Center)', # (add " (Center)" to central point) }, }, { #PH (NC) Name => 'PrimaryAFPoint', Condition => '$$self{PhaseDetectAF} == 5', Notes => q{ Nikon 1 models with newer 135-point AF and 73-point phase-detect AF -- 9 rows (B-J) and 15 columns (1-15), inside a grid of 11 rows by 15 columns. The points are numbered sequentially, with F8 at the center }, PrintConv => { 0 => '(none)', 82 => 'F8 (Center)', OTHER => sub { my ($val, $inv) = @_; return GetAFPointGrid($val, 15, $inv); }, }, }, { #PH Name => 'PrimaryAFPoint', Condition => '$$self{PhaseDetectAF} == 6', Notes => q{ Nikon 1 models with 171-point AF and 105-point phase-detect AF -- 9 rows (B-J) and 19 columns (2-20), inside a grid of 11 rows by 21 columns. The points are numbered sequentially, with F11 at the center }, PrintConv => { 0 => '(none)', #22 => 'B2 (Top-left)', #40 => 'B20 (Top-right)', 115 => 'F11 (Center)', #190 => 'J2 (Bottom-left)', #208 => 'J20 (Bottom-right)', OTHER => sub { my ($val, $inv) = @_; return GetAFPointGrid($val, 21, $inv); }, }, }, { Name => 'PrimaryAFPoint', Notes => 'future models?...', PrintConv => { 0 => '(none)', 1 => 'Center', }, }, ], 8 => [ { #JD/PH Name => 'AFPointsUsed', Condition => '$$self{PhaseDetectAF} < 2', Notes => q{ models with 51-point AF -- 5 rows: A1-9, B1-11, C1-11, D1-11, E1-9. Center point is C6 }, Format => 'undef[7]', ValueConv => 'join(" ", unpack("H2"x7, $val))', ValueConvInv => '$val=~tr/ //d; pack("H*",$val)', PrintConv => sub { PrintAFPoints(shift, \%afPoints51); }, PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints51, 7); }, }, { #10 Name => 'AFPointsUsed', Condition => '$$self{PhaseDetectAF} == 2', Notes => 'models with 11-point AF', # read as int16u in little-endian byte order Format => 'undef[2]', ValueConv => 'unpack("v",$val)', ValueConvInv => 'pack("v",$val)', PrintConvColumns => 2, PrintConv => { 0 => '(none)', 0x7ff => 'All 11 Points', BITMASK => { 0 => 'Center', 1 => 'Top', 2 => 'Bottom', 3 => 'Mid-left', 4 => 'Upper-left', 5 => 'Lower-left', 6 => 'Far Left', 7 => 'Mid-right', 8 => 'Upper-right', 9 => 'Lower-right', 10 => 'Far Right', }, }, }, { #29/PH Name => 'AFPointsUsed', Condition => '$$self{PhaseDetectAF} == 3', Notes => q{ models with 39-point AF -- 5 rows: A1-3, B1-11, C1-11, D1-11, E1-3. Center point is C6 }, Format => 'undef[7]', ValueConv => 'join(" ", unpack("H2"x7, $val))', ValueConvInv => '$val=~tr/ //d; pack("H*",$val)', PrintConv => sub { PrintAFPoints(shift, \%afPoints39); }, PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints39, 7); }, }, { #PH (1AW1,1J1,1J2,1J3,1S1,1V1,1V2) Name => 'AFPointsUsed', Condition => '$$self{PhaseDetectAF} == 4', Notes => q{ older models with 135-point AF -- 9 rows (A-I) and 15 columns (1-15). Center point is E8. The odd-numbered columns, columns 2 and 14, and the remaining corner points are not used for 41-point AF mode }, Format => 'undef[17]', ValueConv => 'join(" ", unpack("H2"x17, $val))', ValueConvInv => '$val=~tr/ //d; pack("H*",$val)', PrintConv => sub { PrintAFPoints(shift, \%afPoints135); }, PrintConvInv => sub { PrintAFPointsInv(shift, \%afPoints135, 17); }, }, { #PH (1S2) Name => 'AFPointsUsed', Condition => '$$self{PhaseDetectAF} == 5', Notes => q{ newer models with 135-point AF -- 9 rows (B-J) and 15 colums (1-15). Center point is F8 }, Format => 'undef[21]', ValueConv => 'join(" ", unpack("H2"x21, $val))', ValueConvInv => '$val=~tr/ //d; pack("H*",$val)', PrintConv => sub { PrintAFPointsGrid(shift, 15); }, PrintConvInv => sub { PrintAFPointsGridInv(shift, 15, 21); }, }, { #PH (1J4,1V3) Name => 'AFPointsUsed', Condition => '$$self{PhaseDetectAF} == 6', Notes => q{ models with 171-point AF -- 9 rows (B-J) and 19 columns (2-20). Center point is F10 }, Format => 'undef[29]', ValueConv => 'join(" ", unpack("H2"x29, $val))', ValueConvInv => '$val=~tr/ //d; pack("H*",$val)', PrintConv => sub { PrintAFPointsGrid(shift, 21); }, PrintConvInv => sub { PrintAFPointsGridInv(shift, 21, 29); }, }, { Name => 'AFPointsUsed', Format => 'undef[7]', ValueConv => 'join(" ", unpack("H2"x7, $val))', ValueConvInv => '$val=~tr/ //d; pack("H*",$val)', PrintConv => '"Unknown ($val)"', PrintConvInv => '$val=~s/Unknown \\((.*)\\)/$1/; $val', }, ], 0x10 => { #PH (D90 and D5000) Name => 'AFImageWidth', Condition => '$$self{AFInfo2Version} eq "0100"', Format => 'int16u', RawConv => '$val ? $val : undef', Notes => 'this and the following tags are valid only for contrast-detect AF', }, 0x12 => { #PH Name => 'AFImageHeight', Condition => '$$self{AFInfo2Version} eq "0100"', Format => 'int16u', RawConv => '$val ? $val : undef', }, 0x14 => { #PH Name => 'AFAreaXPosition', Condition => '$$self{AFInfo2Version} eq "0100"', Notes => 'center of AF area in AFImage coordinates', Format => 'int16u', RawConv => '$val ? $val : undef', }, 0x16 => { #PH Name => 'AFAreaYPosition', Condition => '$$self{AFInfo2Version} eq "0100"', Format => 'int16u', RawConv => '$val ? $val : undef', }, # AFAreaWidth/Height for the D90 and D5000: # 352x288 (AF normal area), # 704x576 (AF face priority, wide area, subject tracking) 0x18 => { #PH Name => 'AFAreaWidth', Condition => '$$self{AFInfo2Version} eq "0100"', Format => 'int16u', Notes => 'size of AF area in AFImage coordinates', RawConv => '$val ? $val : undef', }, 0x1a => { #PH Name => 'AFAreaHeight', Condition => '$$self{AFInfo2Version} eq "0100"', Format => 'int16u', RawConv => '$val ? $val : undef', }, 0x1c => { #PH Name => 'ContrastDetectAFInFocus', Condition => '$$self{AFInfo2Version} eq "0100"', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, # 0x1d - always zero (with or without live view) ); # Nikon AF fine-tune information (ref 28) %Image::ExifTool::Nikon::AFTune = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'AFFineTune', PrintConv => { 0 => 'Off', # (don't know what the difference between 1 and 2 is) 1 => 'On (1)', 2 => 'On (2)', }, }, 1 => { Name => 'AFFineTuneIndex', Notes => 'index of saved lens', PrintConv => '$val == 255 ? "n/a" : $val', PrintConvInv => '$val eq "n/a" ? 255 : $val', }, 2 => { Name => 'AFFineTuneAdj', Priority => 0, # so other value takes priority if it exists Notes => 'may only be valid for saved lenses', Format => 'int8s', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, ); # Nikon NEF processing information (ref forum6281) %Image::ExifTool::Nikon::RetouchInfo = ( %binaryDataAttrs, FORMAT => 'int8s', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, DATAMEMBER => [ 0 ], 0 => { Name => 'RetouchInfoVersion', Format => 'undef[4]', Writable => 0, RawConv => '$$self{RetouchInfoVersion} = $val', }, # 4 - RetouchExposureComp (+$val/6 or -$val/6?) 5 => { Name => 'RetouchNEFProcessing', Condition => '$$self{RetouchInfoVersion} ge "0200"', PrintConv => { -1 => 'Off', 1 => 'On', }, }, ); # Nikon File information - D60, D3 and D300 (ref PH) %Image::ExifTool::Nikon::FileInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, FORMAT => 'int16u', 0 => { Name => 'FileInfoVersion', Format => 'undef[4]', Writable => 0, }, 3 => { Name => 'DirectoryNumber', PrintConv => 'sprintf("%.3d", $val)', PrintConvInv => '$val', }, 4 => { Name => 'FileNumber', PrintConv => 'sprintf("%.4d", $val)', PrintConvInv => '$val', }, ); # ref PH %Image::ExifTool::Nikon::BarometerInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Location' }, 0 => { Name => 'BarometerInfoVersion', Format => 'undef[4]', Writable => 0, }, 6 => { Name => 'Altitude', Format => 'int32s', PrintConv => '"$val m"', # (always stored as metres) PrintConvInv => '$val=~s/\s*m$//; $val', }, # 10: int16u - values: 0 (display in metres?), 18 (display in feet?) ); # ref PH %Image::ExifTool::Nikon::CaptureOffsets = ( PROCESS_PROC => \&ProcessNikonCaptureOffsets, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 1 => 'IFD0_Offset', 2 => 'PreviewIFD_Offset', 3 => 'SubIFD_Offset', ); # ref PH (Written by capture NX) %Image::ExifTool::Nikon::CaptureOutput = ( %binaryDataAttrs, FORMAT => 'int32u', GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, # 1 = 1 2 => 'OutputImageWidth', 3 => 'OutputImageHeight', 4 => 'OutputResolution', # 5 = 1 ); # ref 4 %Image::ExifTool::Nikon::ColorBalanceA = ( %binaryDataAttrs, FORMAT => 'int16u', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 624 => { Name => 'RedBalance', ValueConv => '$val / 256', ValueConvInv => '$val * 256', Protected => 1, }, 625 => { Name => 'BlueBalance', ValueConv => '$val / 256', ValueConvInv => '$val * 256', Protected => 1, }, ); # ref 4 %Image::ExifTool::Nikon::ColorBalance1 = ( %binaryDataAttrs, FORMAT => 'int16u', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'WB_RBGGLevels', Format => 'int16u[4]', Protected => 1, }, ); # ref 4 %Image::ExifTool::Nikon::ColorBalance2 = ( %binaryDataAttrs, FORMAT => 'int16u', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'This information is encrypted for most camera models.', 0 => { Name => 'WB_RGGBLevels', Format => 'int16u[4]', Protected => 1, }, ); # ref 4 %Image::ExifTool::Nikon::ColorBalance3 = ( %binaryDataAttrs, FORMAT => 'int16u', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'WB_RGBGLevels', Format => 'int16u[4]', Protected => 1, }, ); # ref 4 %Image::ExifTool::Nikon::ColorBalance4 = ( %binaryDataAttrs, FORMAT => 'int16u', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'WB_GRBGLevels', Format => 'int16u[4]', Protected => 1, }, ); %Image::ExifTool::Nikon::ColorBalanceUnknown = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'ColorBalanceVersion', Format => 'undef[4]', }, ); %Image::ExifTool::Nikon::Type2 = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x0003 => 'Quality', 0x0004 => 'ColorMode', 0x0005 => 'ImageAdjustment', 0x0006 => 'CCDSensitivity', 0x0007 => 'WhiteBalance', 0x0008 => 'Focus', 0x000A => 'DigitalZoom', 0x000B => 'Converter', ); # these are standard EXIF tags, but they are duplicated here so we can # set the family 0 group to 'MakerNotes' and set the MINOR_ERRORS flag %Image::ExifTool::Nikon::PreviewIFD = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 1 => 'PreviewIFD', 2 => 'Image'}, VARS => { MINOR_ERRORS => 1 }, # this IFD is non-essential and often corrupted # (these tags are priority 0 by default because PreviewIFD is flagged in LOW_PRIORITY_DIR) 0xfe => { # (not used by Nikon, but SRW images also use this table) Name => 'SubfileType', DataMember => 'SubfileType', RawConv => '$$self{SubfileType} = $val', PrintConv => \%Image::ExifTool::Exif::subfileType, }, 0x103 => { Name => 'Compression', SeparateTable => 'EXIF Compression', PrintConv => \%Image::ExifTool::Exif::compression, }, 0x11a => 'XResolution', 0x11b => 'YResolution', 0x128 => { Name => 'ResolutionUnit', PrintConv => { 1 => 'None', 2 => 'inches', 3 => 'cm', }, }, 0x201 => { Name => 'PreviewImageStart', Flags => [ 'IsOffset', 'Permanent' ], OffsetPair => 0x202, DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, }, 0x202 => { Name => 'PreviewImageLength', Flags => 'Permanent' , OffsetPair => 0x201, DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, }, 0x213 => { Name => 'YCbCrPositioning', PrintConv => { 1 => 'Centered', 2 => 'Co-sited', }, }, ); # these are duplicated enough times to make it worthwhile to define them centrally my %nikonApertureConversions = ( ValueConv => '2**($val/24)', ValueConvInv => '$val>0 ? 24*log($val)/log(2) : 0', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', ); my %nikonFocalConversions = ( ValueConv => '5 * 2**($val/24)', ValueConvInv => '$val>0 ? 24*log($val/5)/log(2) : 0', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val=~s/\s*mm$//;$val', ); # Version 100 Nikon lens data %Image::ExifTool::Nikon::LensData00 = ( %binaryDataAttrs, NOTES => 'This structure is used by the D100, and D1X with firmware version 1.1.', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added 0x00 => { Name => 'LensDataVersion', Format => 'undef[4]', Writable => 0, }, 0x06 => { #8 Name => 'LensIDNumber', Notes => 'see LensID values below', }, 0x07 => { #8 Name => 'LensFStops', ValueConv => '$val / 12', ValueConvInv => '$val * 12', PrintConv => 'sprintf("%.2f", $val)', PrintConvInv => '$val', }, 0x08 => { #8/9 Name => 'MinFocalLength', %nikonFocalConversions, }, 0x09 => { #8/9 Name => 'MaxFocalLength', %nikonFocalConversions, }, 0x0a => { #8 Name => 'MaxApertureAtMinFocal', %nikonApertureConversions, }, 0x0b => { #8 Name => 'MaxApertureAtMaxFocal', %nikonApertureConversions, }, 0x0c => 'MCUVersion', #8 ); # Nikon lens data (note: needs decrypting if LensDataVersion is 020x) %Image::ExifTool::Nikon::LensData01 = ( %binaryDataAttrs, NOTES => q{ Nikon encrypts the LensData information below if LensDataVersion is 0201 or higher, but the decryption algorithm is known so the information can be extracted. }, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added 0x00 => { Name => 'LensDataVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { #8 Name => 'ExitPupilPosition', ValueConv => '$val ? 2048 / $val : $val', ValueConvInv => '$val ? 2048 / $val : $val', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val=~s/\s*mm$//; $val', }, 0x05 => { #8 Name => 'AFAperture', %nikonApertureConversions, }, 0x08 => { #8 # this seems to be 2 values: the upper nibble gives the far focus # range and the lower nibble gives the near focus range. The values # are in the range 1-N, where N is lens-dependent. A value of 0 for # the far focus range indicates infinity. (ref JD) Name => 'FocusPosition', PrintConv => 'sprintf("0x%02x", $val)', PrintConvInv => '$val', }, 0x09 => { #8/9 # With older AF lenses this does not work... (ref 13) # eg) AF Nikkor 50mm f/1.4 => 48 (0x30) # AF Zoom-Nikkor 35-105mm f/3.5-4.5 => @35mm => 15 (0x0f), @105mm => 141 (0x8d) Notes => 'this focus distance is approximate, and not very accurate for some lenses', Name => 'FocusDistance', ValueConv => '0.01 * 10**($val/40)', # in m ValueConvInv => '$val>0 ? 40*log($val*100)/log(10) : 0', PrintConv => '$val ? sprintf("%.2f m",$val) : "inf"', PrintConvInv => '$val eq "inf" ? 0 : $val =~ s/\s*m$//, $val', }, 0x0a => { #8/9 Name => 'FocalLength', Priority => 0, %nikonFocalConversions, }, 0x0b => { #8 Name => 'LensIDNumber', Notes => 'see LensID values below', }, 0x0c => { #8 Name => 'LensFStops', ValueConv => '$val / 12', ValueConvInv => '$val * 12', PrintConv => 'sprintf("%.2f", $val)', PrintConvInv => '$val', }, 0x0d => { #8/9 Name => 'MinFocalLength', %nikonFocalConversions, }, 0x0e => { #8/9 Name => 'MaxFocalLength', %nikonFocalConversions, }, 0x0f => { #8 Name => 'MaxApertureAtMinFocal', %nikonApertureConversions, }, 0x10 => { #8 Name => 'MaxApertureAtMaxFocal', %nikonApertureConversions, }, 0x11 => 'MCUVersion', #8 0x12 => { #8 Name => 'EffectiveMaxAperture', %nikonApertureConversions, }, ); # Nikon lens data (note: needs decrypting) %Image::ExifTool::Nikon::LensData0204 = ( %binaryDataAttrs, NOTES => q{ Nikon encrypts the LensData information below if LensDataVersion is 0201 or higher, but the decryption algorithm is known so the information can be extracted. }, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added 0x00 => { Name => 'LensDataVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { #8 Name => 'ExitPupilPosition', ValueConv => '$val ? 2048 / $val : $val', ValueConvInv => '$val ? 2048 / $val : $val', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val=~s/\s*mm$//; $val', }, 0x05 => { #8 Name => 'AFAperture', %nikonApertureConversions, }, 0x08 => { #8 # this seems to be 2 values: the upper nibble gives the far focus # range and the lower nibble gives the near focus range. The values # are in the range 1-N, where N is lens-dependent. A value of 0 for # the far focus range indicates infinity. (ref JD) Name => 'FocusPosition', PrintConv => 'sprintf("0x%02x", $val)', PrintConvInv => '$val', }, # --> extra byte at position 0x09 in this version of LensData (PH) 0x0a => { #8/9 # With older AF lenses this does not work... (ref 13) # eg) AF Nikkor 50mm f/1.4 => 48 (0x30) # AF Zoom-Nikkor 35-105mm f/3.5-4.5 => @35mm => 15 (0x0f), @105mm => 141 (0x8d) Notes => 'this focus distance is approximate, and not very accurate for some lenses', Name => 'FocusDistance', ValueConv => '0.01 * 10**($val/40)', # in m ValueConvInv => '$val>0 ? 40*log($val*100)/log(10) : 0', PrintConv => '$val ? sprintf("%.2f m",$val) : "inf"', PrintConvInv => '$val eq "inf" ? 0 : $val =~ s/\s*m$//, $val', }, 0x0b => { #8/9 Name => 'FocalLength', Priority => 0, %nikonFocalConversions, }, 0x0c => { #8 Name => 'LensIDNumber', Notes => 'see LensID values below', }, 0x0d => { #8 Name => 'LensFStops', ValueConv => '$val / 12', ValueConvInv => '$val * 12', PrintConv => 'sprintf("%.2f", $val)', PrintConvInv => '$val', }, 0x0e => { #8/9 Name => 'MinFocalLength', %nikonFocalConversions, }, 0x0f => { #8/9 Name => 'MaxFocalLength', %nikonFocalConversions, }, 0x10 => { #8 Name => 'MaxApertureAtMinFocal', %nikonApertureConversions, }, 0x11 => { #8 Name => 'MaxApertureAtMaxFocal', %nikonApertureConversions, }, 0x12 => 'MCUVersion', #8 0x13 => { #8 Name => 'EffectiveMaxAperture', %nikonApertureConversions, }, ); # Nikon lens data version 0400 (note: needs decrypting) (ref PH) %Image::ExifTool::Nikon::LensData0400 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Tags extracted from the encrypted lens data of Nikon 1 models.', 0x00 => { Name => 'LensDataVersion', Format => 'string[4]', Writable => 0, }, 0x18a => { #PH Name => 'LensModel', Format => 'string[64]', }, ); # Unknown Nikon lens data (note: data may need decrypting after byte 4) %Image::ExifTool::Nikon::LensDataUnknown = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x00 => { Name => 'LensDataVersion', Format => 'string[4]', }, ); # shot information (encrypted in some cameras) - ref 18 %Image::ExifTool::Nikon::ShotInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, DATAMEMBER => [ 0 ], NOTES => q{ This information is encrypted for ShotInfoVersion 02xx, and some tags are only valid for specific models. }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, RawConv => '$$self{ShotInfoVersion} = $val; $val =~ /^\d+$/ ? $val : undef', }, 0x04 => { Name => 'FirmwareVersion', Format => 'string[5]', Writable => 0, RawConv => '$val =~ /^\d\.\d+.$/ ? $val : undef', }, 0x10 => { Name => 'DistortionControl', Condition => '$$self{Model} =~ /P6000\b/', Notes => 'P6000', PrintConv => \%offOn, }, 0x66 => { Name => 'VR_0x66', Condition => '$$self{ShotInfoVersion} eq "0204"', Format => 'int8u', Unknown => 1, Notes => 'D2X, D2Xs (unverified)', PrintConv => { 0 => 'Off', 1 => 'On (normal)', 2 => 'On (active)', }, }, # 6a, 6e not correct for 0103 (D70), 0207 (D200) 0x6a => { Name => 'ShutterCount', Condition => '$$self{ShotInfoVersion} eq "0204"', Format => 'int32u', Priority => 0, Notes => 'D2X, D2Xs', }, 0x6e => { Name => 'DeletedImageCount', Condition => '$$self{ShotInfoVersion} eq "0204"', Format => 'int32u', Priority => 0, Notes => 'D2X, D2Xs', }, 0x75 => { #JD Name => 'VibrationReduction', Condition => '$$self{ShotInfoVersion} eq "0207"', Format => 'int8u', Notes => 'D200', PrintConv => { 0 => 'Off', # (not sure what the different values represent, but values # of 1 and 2 have even been observed for non-VR lenses!) 1 => 'On (1)', #PH 2 => 'On (2)', #PH 3 => 'On (3)', #PH (rare -- only seen once) }, }, 0x82 => { # educated guess, needs verification Name => 'VibrationReduction', Condition => '$$self{ShotInfoVersion} eq "0204"', Format => 'int8u', Notes => 'D2X, D2Xs', PrintConv => { 0 => 'Off', 1 => 'On', }, }, 0x157 => { #JD Name => 'ShutterCount', Condition => '$$self{ShotInfoVersion} eq "0205"', Format => 'undef[2]', Priority => 0, Notes => 'D50', # treat as a 2-byte big-endian integer ValueConv => 'unpack("n", $val)', ValueConvInv => 'pack("n",$val)', }, 0x1ae => { #JD Name => 'VibrationReduction', Condition => '$$self{ShotInfoVersion} eq "0205"', Format => 'int8u', Notes => 'D50', PrintHex => 1, PrintConv => { 0x00 => 'n/a', 0x0c => 'Off', 0x0f => 'On', }, }, 0x24d => { #PH Name => 'ShutterCount', Condition => '$$self{ShotInfoVersion} eq "0211"', Notes => 'D60', Format => 'int32u', Priority => 0, }, # note: DecryptLen currently set to 0x251 ); # shot information for D40 and D40X (encrypted) - ref PH %Image::ExifTool::Nikon::ShotInfoD40 = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 729 ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'These tags are extracted from encrypted data in D40 and D40X images.', 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 582 => { Name => 'ShutterCount', Format => 'int32u', Priority => 0, }, 586.1 => { #JD Name => 'VibrationReduction', Mask => 0x08, PrintConv => { 0x00 => 'Off', 0x08 => 'On', }, }, 729 => { #JD Name => 'CustomSettingsD40', Format => 'undef[12]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD40', }, }, # note: DecryptLen currently set to 748 ); # shot information for D80 (encrypted) - ref JD %Image::ExifTool::Nikon::ShotInfoD80 = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 748 ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'These tags are extracted from encrypted data in D80 images.', 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 586 => { Name => 'ShutterCount', Format => 'int32u', Priority => 0, }, # split 590 into a few different tags 590.1 => { Name => 'Rotation', Mask => 0x07, PrintConv => { 0x00 => 'Horizontal', 0x01 => 'Rotated 270 CW', 0x02 => 'Rotated 90 CW', 0x03 => 'Rotated 180', }, }, 590.2 => { Name => 'VibrationReduction', Mask => 0x18, PrintConv => { 0x00 => 'Off', 0x18 => 'On', }, }, 590.3 => { Name => 'FlashFired', Mask => 0xe0, PrintConv => { BITMASK => { 6 => 'Internal', 7 => 'External', }}, }, 708 => { Name => 'NikonImageSize', Mask => 0xf0, PrintConv => { 0x00 => 'Large (10.0 M)', 0x10 => 'Medium (5.6 M)', 0x20 => 'Small (2.5 M)', }, }, 708.1 => { Name => 'ImageQuality', Mask => 0x0f, PrintConv => { 0 => 'NEF (RAW)', 1 => 'JPEG Fine', 2 => 'JPEG Normal', 3 => 'JPEG Basic', 4 => 'NEF (RAW) + JPEG Fine', 5 => 'NEF (RAW) + JPEG Normal', 6 => 'NEF (RAW) + JPEG Basic', }, }, 748 => { #JD Name => 'CustomSettingsD80', Format => 'undef[17]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD80', }, }, # note: DecryptLen currently set to 764 ); # shot information for D90 (encrypted) - ref PH %Image::ExifTool::Nikon::ShotInfoD90 = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 0x374 ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are extracted from encrypted data in images from the D90 with firmware 1.00. }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { Name => 'FirmwareVersion', Format => 'string[5]', Writable => 0, }, 0x2b5 => { #JD (same value found at offset 0x39, 0x2bf, 0x346) Name => 'ISO2', ValueConv => '100*exp(($val/12-5)*log(2))', ValueConvInv => '(log($val/100)/log(2)+5)*12', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, 0x2d5 => { Name => 'ShutterCount', Format => 'int32u', Priority => 0, }, 0x374 => { Name => 'CustomSettingsD90', Format => 'undef[36]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD90', }, }, # note: DecryptLen currently set to 0x398 ); # shot information for the D3 firmware 0.37 and 1.00 (encrypted) - ref PH %Image::ExifTool::Nikon::ShotInfoD3a = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 0x301 ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are extracted from encrypted data in images from the D3 with firmware 1.00 and earlier. }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x256 => { #JD (same value found at offset 0x26b) Name => 'ISO2', ValueConv => '100*exp(($val/12-5)*log(2))', ValueConvInv => '(log($val/100)/log(2)+5)*12', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, 0x276 => { #JD Name => 'ShutterCount', Format => 'int32u', Priority => 0, }, 723.1 => { Name => 'NikonImageSize', Mask => 0x18, PrintConv => { 0x00 => 'Large', 0x08 => 'Medium', 0x10 => 'Small', }, }, 723.2 => { Name => 'ImageQuality', Mask => 0x07, PrintConv => { 0 => 'NEF (RAW) + JPEG Fine', 1 => 'NEF (RAW) + JPEG Norm', 2 => 'NEF (RAW) + JPEG Basic', 3 => 'NEF (RAW)', 4 => 'TIF (RGB)', 5 => 'JPEG Fine', 6 => 'JPEG Normal', 7 => 'JPEG Basic', }, }, 0x301 => { #(NC) Name => 'CustomSettingsD3', Format => 'undef[24]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD3', }, }, # note: DecryptLen currently set to 0x318 ); # shot information for the D3 firmware 1.10, 2.00 and 2.01 (encrypted) - ref PH %Image::ExifTool::Nikon::ShotInfoD3b = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 0x30a ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, DATAMEMBER => [ 4 ], NOTES => q{ These tags are extracted from encrypted data in images from the D3 with firmware 1.10, 2.00, 2.01 and 2.02. }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { Name => 'FirmwareVersion', Format => 'string[5]', Writable => 0, RawConv => '$$self{FirmwareVersion} = $val', }, 0x10 => { #28 Name => 'ImageArea', PrintConv => { 0 => 'FX (36.0 x 23.9 mm)', 1 => 'DX (23.5 x 15.6 mm)', 2 => '5:4 (30.0 x 23.9 mm)', }, }, 0x25d => { Name => 'ISO2', ValueConv => '100*exp(($val/12-5)*log(2))', ValueConvInv => '(log($val/100)/log(2)+5)*12', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, 0x27d => { Name => 'ShutterCount', Condition => '$$self{FirmwareVersion} =~ /^1.01/', Notes => 'firmware 1.10', Format => 'int32u', Priority => 0, }, 0x27f => { Name => 'ShutterCount', Condition => '$$self{FirmwareVersion} =~ /^2.0/', Notes => 'firmware 2.00, 2.01 and 2.02', Format => 'int32u', Priority => 0, }, 732.1 => { #28 Name => 'NikonImageSize', Mask => 0x18, PrintConv => { 0x00 => 'Large', 0x08 => 'Medium', 0x10 => 'Small', }, }, 732.2 => { #28 Name => 'ImageQuality', Mask => 0x07, PrintConv => { 0 => 'NEF (RAW) + JPEG Fine', 1 => 'NEF (RAW) + JPEG Norm', 2 => 'NEF (RAW) + JPEG Basic', 3 => 'NEF (RAW)', 4 => 'TIF (RGB)', 5 => 'JPEG Fine', 6 => 'JPEG Normal', 7 => 'JPEG Basic', }, }, 0x28a => { #28 Name => 'PreFlashReturnStrength', Notes => 'valid in TTL and TTL-BL flash control modes', # this is used to set the flash power using this relationship # for the SB-800 and SB-900: # $val < 140 ? 2**(0.08372*$val-12.352) : $val }, 0x30a => { # tested with firmware 2.00 Name => 'CustomSettingsD3', Format => 'undef[24]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD3', }, }, # note: DecryptLen currently set to 0x321 ); # shot information for the D3X firmware 1.00 (encrypted) - ref PH %Image::ExifTool::Nikon::ShotInfoD3X = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 0x30b ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are extracted from encrypted data in images from the D3X with firmware 1.00. }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { Name => 'FirmwareVersion', Format => 'string[5]', Writable => 0, }, 0x25d => { Name => 'ISO2', ValueConv => '100*exp(($val/12-5)*log(2))', ValueConvInv => '(log($val/100)/log(2)+5)*12', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, 0x280 => { Name => 'ShutterCount', Format => 'int32u', Priority => 0, }, 0x30b => { #(NC) Name => 'CustomSettingsD3X', Format => 'undef[24]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD3', }, }, # note: DecryptLen currently set to 0x323 ); # shot information for the D3S firmware 0.16 and 1.00 (encrypted) - ref PH %Image::ExifTool::Nikon::ShotInfoD3S = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 0x2ce ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are extracted from encrypted data in images from the D3S with firmware 1.00 and earlier. }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { Name => 'FirmwareVersion', Format => 'string[5]', Writable => 0, }, 0x10 => { #28 Name => 'ImageArea', PrintConv => { 0 => 'FX (36x24)', 1 => 'DX (24x16)', 2 => '5:4 (30x24)', 3 => '1.2x (30x20)', }, }, 0x221 => { Name => 'ISO2', ValueConv => '100*exp(($val/12-5)*log(2))', ValueConvInv => '(log($val/100)/log(2)+5)*12', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, 0x242 => { Name => 'ShutterCount', Format => 'int32u', Priority => 0, }, 0x2ce => { #(NC) Name => 'CustomSettingsD3S', Format => 'undef[27]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD3', }, }, # note: DecryptLen currently set to 0x2e9 ); # shot information for the D300 firmware 1.00 (encrypted) - ref JD %Image::ExifTool::Nikon::ShotInfoD300a = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 790 ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are extracted from encrypted data in images from the D300 with firmware 1.00 and earlier. }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 604 => { Name => 'ISO2', ValueConv => '100*exp(($val/12-5)*log(2))', ValueConvInv => '(log($val/100)/log(2)+5)*12', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, 633 => { Name => 'ShutterCount', Format => 'int32u', Priority => 0, }, 721 => { #PH Name => 'AFFineTuneAdj', Format => 'int16u', PrintHex => 1, PrintConvColumns => 3, # thanks to Neil Nappe for the samples to decode this!... # (have seen various unknown values here when flash is enabled, but # these are yet to be decoded: 0x2e,0x619,0xd0d,0x103a,0x2029 - PH) PrintConv => { 0x403e => '+20', 0x303e => '+19', 0x203e => '+18', 0x103e => '+17', 0x003e => '+16', 0xe03d => '+15', 0xc03d => '+14', 0xa03d => '+13', 0x803d => '+12', 0x603d => '+11', 0x403d => '+10', 0x203d => '+9', 0x003d => '+8', 0xc03c => '+7', 0x803c => '+6', 0x403c => '+5', 0x003c => '+4', 0x803b => '+3', 0x003b => '+2', 0x003a => '+1', 0x0000 => '0', 0x00c6 => '-1', 0x00c5 => '-2', 0x80c5 => '-3', 0x00c4 => '-4', 0x40c4 => '-5', 0x80c4 => '-6', 0xc0c4 => '-7', 0x00c3 => '-8', 0x20c3 => '-9', 0x40c3 => '-10', 0x60c3 => '-11', 0x80c3 => '-12', 0xa0c3 => '-13', 0xc0c3 => '-14', 0xe0c3 => '-15', 0x00c2 => '-16', 0x10c2 => '-17', 0x20c2 => '-18', 0x30c2 => '-19', 0x40c2 => '-20', }, }, 790 => { Name => 'CustomSettingsD300', Format => 'undef[24]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD3', }, }, # note: DecryptLen currently set to 813 ); # shot information for the D300 firmware 1.10 (encrypted) - ref PH %Image::ExifTool::Nikon::ShotInfoD300b = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, DATAMEMBER => [ 4 ], IS_SUBDIR => [ 802 ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are extracted from encrypted data in images from the D300 with firmware 1.10. }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { #PH Name => 'FirmwareVersion', DataMember => 'FirmwareVersion', Format => 'string[5]', Writable => 0, RawConv => '$$self{FirmwareVersion} = $val', }, 613 => { Name => 'ISO2', ValueConv => '100*exp(($val/12-5)*log(2))', ValueConvInv => '(log($val/100)/log(2)+5)*12', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, 644 => { Name => 'ShutterCount', Format => 'int32u', Priority => 0, }, 732 => [{ Name => 'AFFineTuneAdj', Condition => '$$self{FirmwareVersion} eq "1.10B"', Notes => 'firmware version 1.10B', Format => 'int16u', PrintHex => 1, PrintConvColumns => 3, # thanks to Michael Tapes for the samples to decode this!... PrintConv => { 0xe03e => '+20', 0xc83e => '+19', 0xb03e => '+18', 0x983e => '+17', 0x803e => '+16', 0x683e => '+15', 0x503e => '+14', 0x383e => '+13', 0x203e => '+12', 0x083e => '+11', 0xe03d => '+10', 0xb03d => '+9', 0x803d => '+8', 0x503d => '+7', 0x203d => '+6', 0xe03c => '+5', 0x803c => '+4', 0x203c => '+3', 0x803b => '+2', 0x803a => '+1', 0x0000 => '0', 0x80c6 => '-1', 0x80c5 => '-2', 0x20c4 => '-3', 0x80c4 => '-4', 0xe0c4 => '-5', 0x20c3 => '-6', 0x50c3 => '-7', 0x80c3 => '-8', 0xb0c3 => '-9', 0xe0c3 => '-10', 0x08c2 => '-11', 0x20c2 => '-12', 0x38c2 => '-13', 0x50c2 => '-14', 0x68c2 => '-15', 0x80c2 => '-16', 0x98c2 => '-17', 0xb0c2 => '-18', 0xc8c2 => '-19', 0xe0c2 => '-20', }, },{ Name => 'AFFineTuneAdj', Notes => 'other versions', Format => 'int16u', PrintHex => 1, PrintConvColumns => 3, # thanks to Stuart Solomon for the samples to decode this!... PrintConv => { 0x903e => '+20', 0x7c3e => '+19', 0x683e => '+18', 0x543e => '+17', 0x403e => '+16', 0x2c3e => '+15', 0x183e => '+14', 0x043e => '+13', 0xe03d => '+12', 0xb83d => '+11', 0x903d => '+10', 0x683d => '+9', 0x403d => '+8', 0x183d => '+7', 0xe03c => '+6', 0x903c => '+5', 0x403c => '+4', 0xe03b => '+3', 0x403b => '+2', 0x403a => '+1', 0x0000 => '0', 0x40c6 => '-1', 0x40c5 => '-2', 0xe0c5 => '-3', 0x40c4 => '-4', 0x90c4 => '-5', 0xe0c4 => '-6', 0x18c3 => '-7', 0x40c3 => '-8', 0x68c3 => '-9', 0x90c3 => '-10', 0xb8c3 => '-11', 0xe0c3 => '-12', 0x04c2 => '-13', 0x18c2 => '-14', 0x2cc2 => '-15', 0x40c2 => '-16', 0x54c2 => '-17', 0x68c2 => '-18', 0x7cc2 => '-19', 0x90c2 => '-20', }, }], 802 => { Name => 'CustomSettingsD300', Format => 'undef[24]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD3', }, }, # note: DecryptLen currently set to 825 ); # shot information for the D300S firmware 1.00 (encrypted) - ref PH %Image::ExifTool::Nikon::ShotInfoD300S = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 804 ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are extracted from encrypted data in images from the D300S with firmware 1.00. }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { Name => 'FirmwareVersion', Format => 'string[5]', Writable => 0, }, 613 => { Name => 'ISO2', ValueConv => '100*exp(($val/12-5)*log(2))', ValueConvInv => '(log($val/100)/log(2)+5)*12', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, 646 => { Name => 'ShutterCount', Format => 'int32u', Priority => 0, }, 804 => { #(NC) Name => 'CustomSettingsD300S', Format => 'undef[24]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD3', }, }, # note: DecryptLen currently set to 827 ); # shot information for the D700 firmware 1.02f (encrypted) - ref 29 %Image::ExifTool::Nikon::ShotInfoD700 = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 804 ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are extracted from encrypted data in images from the D700 with firmware 1.02f. }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { Name => 'FirmwareVersion', Format => 'string[5]', Writable => 0, }, 613 => { # 0x265 Name => 'ISO2', ValueConv => '100*exp(($val/12-5)*log(2))', ValueConvInv => '(log($val/100)/log(2)+5)*12', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, 0x287 => { Name => 'ShutterCount', Format => 'int32u', Priority => 0, }, 804 => { # 0x324 (NC) Name => 'CustomSettingsD700', Format => 'undef[48]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD700', }, }, # note: DecryptLen currently set to 852 ); # shot information for the D5000 firmware 1.00 (encrypted) - ref PH %Image::ExifTool::Nikon::ShotInfoD5000 = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 0x378 ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are extracted from encrypted data in images from the D5000 with firmware 1.00. }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { Name => 'FirmwareVersion', Format => 'string[5]', Writable => 0, }, 0x2b5 => { # (also found at 0x2c0) Name => 'ISO2', ValueConv => '100*exp(($val/12-5)*log(2))', ValueConvInv => '(log($val/100)/log(2)+5)*12', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, 0x2d6 => { Name => 'ShutterCount', Format => 'int32u', Priority => 0, }, 0x378 => { Name => 'CustomSettingsD5000', Format => 'undef[34]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD5000', }, }, # note: DecryptLen currently set to 0x39a ); # shot information for the D5100 firmware 1.00f (encrypted) - ref PH %Image::ExifTool::Nikon::ShotInfoD5100 = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 0x407 ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { Name => 'FirmwareVersion', Format => 'string[5]', Writable => 0, }, 0x321 => { Name => 'ShutterCount', Format => 'int32u', Priority => 0, }, 0x407 => { Name => 'CustomSettingsD5100', Format => 'undef[34]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD5100', }, }, # note: DecryptLen currently set to 0x430 ); # shot information for the D5200 firmware 1.00 (encrypted) - ref PH %Image::ExifTool::Nikon::ShotInfoD5200 = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 0xcd5 ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { Name => 'FirmwareVersion', Format => 'string[5]', Writable => 0, }, # 0x101 - 2=VR Off, 3=VR On # 0x13d - 0=VR On, 1=VR Off 0xbd8 => { Name => 'ShutterCount', Format => 'int32u', Priority => 0, }, # 0xcd2 - 12=VR Off, 15=VR On 0xcd5 => { Name => 'CustomSettingsD5200', Format => 'undef[34]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD5200', }, }, # note: DecryptLen currently set to 0xd00 ); # shot information for the D7000 firmware 1.01d (encrypted) - ref 29 %Image::ExifTool::Nikon::ShotInfoD7000 = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 1028 ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are extracted from encrypted data in images from the D7000 with firmware 1.01b. }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { Name => 'FirmwareVersion', Format => 'string[5]', Writable => 0, }, #613 => { # Name => 'ISO2', # ValueConv => '100*exp(($val/12-5)*log(2))', # ValueConvInv => '(log($val/100)/log(2)+5)*12', # PrintConv => 'int($val + 0.5)', # PrintConvInv => '$val', #}, 0x320 => { # 800 Name => 'ShutterCount', Format => 'int32u', Priority => 0, }, 0x404 => { # 1028 (NC) Name => 'CustomSettingsD7000', Format => 'undef[48]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD7000', }, }, ); # shot information for the D800 firmware 1.01a (encrypted) - ref PH %Image::ExifTool::Nikon::ShotInfoD800 = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 0x6ec ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'These tags are extracted from encrypted data in images from the D800.', 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { Name => 'FirmwareVersion', Format => 'string[5]', Writable => 0, }, 0x4c0 => { Name => 'RepeatingFlashOutputExternal', ValueConv => '2 ** (-$val/6)', ValueConvInv => '$val > 0 ? -6*log($val)/log(2) : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x4c2 => { Name => 'RepeatingFlashRateExternal', DelValue => 0, RawConv => '$val || undef', PrintConv => '"$val Hz"', PrintConvInv => '$val=~/(\d+)/; $1 || 0', }, 0x4c3 => { Name => 'RepeatingFlashCountExternal', DelValue => 0, RawConv => '$val || undef', }, 0x4d2 => { Name => 'FlashExposureComp2', Notes => 'includes the effect of flash bracketing', Format => 'int8s', ValueConv => '-$val/6', ValueConvInv => '-6 * $val', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, # 0x4d4 - FEC again, doesn't include bracketing this time (internal?) # (not fully decoded, and duplicated in custom settings) # 0x4d9 => { # Name => 'FlashControlBuilt-in', # PrintConv => { # 1 => 'TTL', # 6 => 'Manual', # 7 => 'Repeating Flash', # }, # }, 0x4da => { Name => 'RepeatingFlashRateBuilt-in', DelValue => 0, RawConv => '$val || undef', PrintConv => '"$val Hz"', PrintConvInv => '$val=~/(\d+)/; $1 || 0', }, 0x4db => { Name => 'RepeatingFlashCountBuilt-in', DelValue => 0, RawConv => '$val || undef', }, # 1294.1 => { # (0x4dc) # Name => 'FlashModeBuilt-in', # Mask => 0x0f, # PrintConv => { # 0 => 'Front-curtain Sync', # 1 => 'Red-eye Reduction', # 2 => 'Redy-eye Reduction with Slow Sync', # 3 => 'Slow Sync', # 4 => 'Rear-curtain Sync', # 5 => 'Rear-curtain Sync 2', # got this in P exposure mode # }, # }, # 1294.2 => { # (0x4dc) # Name => 'ExposureMode2', # Mask => 0xf0, # PrintConv => { # 0x00 => 'Program', # 0x10 => 'Aperture Priority', # 0x30 => 'Manual', # }, # }, # 0x511 - related to FlashSyncSpeed 0x51c => 'SequenceNumber', # 0x4ba+0x63 - interesting # 0x4ba+0x68 - general downward trend # 0x4ba+0x7b - FlashControlBuilt-in: 8=TTL, 72=Manual # (not reliable) # 1346.1 => { # (0x542) # Name => 'RepeatingFlashOutputBuilt-in', # DelValue => 112, # Mask => 0xfc, # RawConv => '$val == 112 ? undef : 2 ** ($val/12-7)', # ValueConvInv => '$val > 0 ? (log($val)/log(2)+7)*12 : 0', # PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', # PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', # }, 0x5fb => { Name => 'ShutterCount', Format => 'int32u', }, 0x6ec => { Name => 'CustomSettingsD800', Format => 'undef[48]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD800', }, }, # note: DecryptLen currently set to 0x720 ); # shot information for the D810 firmware 1.00(PH)/1.01 (encrypted) - ref 28 %Image::ExifTool::Nikon::ShotInfoD810 = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, DATAMEMBER => [ 0x40, 0x175e ], IS_SUBDIR => [ 0x18ab ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'These tags are extracted from encrypted data in images from the D810.', 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { Name => 'FirmwareVersion', Format => 'string[5]', Writable => 0, }, # 0x0c - number of entries in offset table (= 0x21) # 0x10 - int32u[val 0x0c]: offset table 0x40 => { Name => 'CustomSettingsOffset', # (relative offset from start of ShotInfo data) DataMember => 'CustomSettingsOffset', Format => 'int32u', Writable => 0, RawConv => '$$self{CustomSettingsOffset} = $val', }, 0x175e => { Name => 'D810MeteringMode', Mask => 0x03, PrintConv => { 0 => 'Matrix', 1 => 'Center', 2 => 'Spot', 3 => 'Highlight' }, Hook => '$varSize += $$self{CustomSettingsOffset} - 0x18ab', }, 0x18ab => { # (actual offset adjusted by Hook above) Name => 'CustomSettingsD810', Notes => 'actual offset determined by CustomSettingsOffset', Format => 'undef[53]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD810', }, }, # note: DecryptMore currently set to 53+4 bytes after CustomSettingsOffset ); # shot information for the D4 firmware 1.00g (ref PH) %Image::ExifTool::Nikon::ShotInfoD4 = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, IS_SUBDIR => [ 0x0751 ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are extracted from encrypted data in images from the D4. }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { Name => 'FirmwareVersion', Format => 'string[5]', Writable => 0, }, 0x0751 => { #PH (NC) Name => 'CustomSettingsD4', # (seems to work for 1.00g and 1.02b) Format => 'undef[56]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD4' }, }, # note: DecryptLen currently set to 0x789 ); # shot information for the D4S firmware 1.01a (ref 28, encrypted) %Image::ExifTool::Nikon::ShotInfoD4S = ( PROCESS_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, WRITE_PROC => \&Image::ExifTool::Nikon::ProcessNikonEncrypted, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, VARS => { ID_LABEL => 'Index' }, DATAMEMBER => [ 4 ], IS_SUBDIR => [ 0x189d, 0x193d ], WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are extracted from encrypted data in images from the D4S. }, 0x00 => { Name => 'ShotInfoVersion', Format => 'string[4]', Writable => 0, }, 0x04 => { Name => 'FirmwareVersion', DataMember => 'FirmwareVersion', Format => 'string[5]', Writable => 0, RawConv => '$$self{FirmwareVersion} = $val', }, 0x189d => { #PH (NC) Name => 'CustomSettingsD4S', Condition => '$$self{FirmwareVersion} =~ /^1.00/', Notes => 'firmware version 1.00', Format => 'undef[56]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD4' }, }, 0x18c2 => { # CSf1-c (no idea why it is so far away from the rest of the settings) Name => 'MultiSelectorLiveViewMode', Groups => { 1 => 'NikonCustom' }, Condition => '$$self{FirmwareVersion} !~ /^1.00/', Mask => 0xc0, PrintConv => { 0x00 => 'Reset', 0x40 => 'Zoom', 0xc0 => 'None', }, }, 0x193d => { Name => 'CustomSettingsD4S', Condition => '$$self{FirmwareVersion} !~ /^1.00/', Notes => 'firmware version 1.01', Format => 'undef[56]', SubDirectory => { TagTable => 'Image::ExifTool::NikonCustom::SettingsD4' }, }, 0x350b => { Name => 'RollAngle', Format => 'fixed32u', Notes => 'converted to degrees of clockwise camera rotation', ValueConv => '$val < 180 ? -$val : 360 - $val', ValueConvInv => '$val <= 0 ? -$val : 360 - $val', PrintConv => 'sprintf("%.1f", $val)', PrintConvInv => '$val', }, 0x350f => { Name => 'PitchAngle', Format => 'fixed32u', Notes => 'converted to degrees of upward camera tilt', ValueConv => '$val <= 180 ? $val : $val - 360', ValueConvInv => '$val >= 0 ? $val : $val + 360', PrintConv => 'sprintf("%.1f", $val)', PrintConvInv => '$val', }, 0x3513 => { Name => 'YawAngle', Format => 'fixed32u', Notes => 'the camera pitch angle when shooting in portrait orientation', ValueConv => '$val <= 180 ? $val : $val - 360', ValueConvInv => '$val >= 0 ? $val : $val + 360', PrintConv => 'sprintf("%.1f", $val)', PrintConvInv => '$val', }, # note: DecryptLen currently set to 0x3517 ); # Flash information (ref JD) %Image::ExifTool::Nikon::FlashInfo0100 = ( %binaryDataAttrs, DATAMEMBER => [ 9.2, 15, 16 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are used by the D2H, D2Hs, D2X, D2Xs, D50, D70, D70s, D80 and D200. }, # NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added 0 => { Name => 'FlashInfoVersion', Format => 'string[4]', Writable => 0, }, 4 => { #PH Name => 'FlashSource', PrintConv => { 0 => 'None', 1 => 'External', 2 => 'Internal', }, }, # 5 - values: 46,48,50,54,78 6 => { Format => 'int8u[2]', Name => 'ExternalFlashFirmware', SeparateTable => 'FlashFirmware', PrintConv => \%flashFirmware, }, 8 => { Name => 'ExternalFlashFlags', PrintConv => { 0 => '(none)', BITMASK => { 0 => 'Fired', #28 2 => 'Bounce Flash', #PH 4 => 'Wide Flash Adapter', 5 => 'Dome Diffuser', #28 }, }, }, 9.1 => { Name => 'FlashCommanderMode', Mask => 0x80, PrintConv => { 0x00 => 'Off', 0x80 => 'On', }, }, 9.2 => { Name => 'FlashControlMode', Mask => 0x7f, DataMember => 'FlashControlMode', RawConv => '$$self{FlashControlMode} = $val', PrintConv => \%flashControlMode, SeparateTable => 'FlashControlMode', }, 10 => [ { Name => 'FlashOutput', Condition => '$$self{FlashControlMode} >= 0x06', ValueConv => '2 ** (-$val/6)', ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0', PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)', PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1', }, { Name => 'FlashCompensation', Format => 'int8s', Priority => 0, ValueConv => '-$val/6', ValueConvInv => '-6 * $val', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, ], 11 => { Name => 'FlashFocalLength', RawConv => '$val ? $val : undef', PrintConv => '"$val mm"', PrintConvInv => '$val=~/(\d+)/; $1 || 0', }, 12 => { Name => 'RepeatingFlashRate', RawConv => '$val ? $val : undef', PrintConv => '"$val Hz"', PrintConvInv => '$val=~/(\d+)/; $1 || 0', }, 13 => { Name => 'RepeatingFlashCount', RawConv => '$val ? $val : undef', }, 14 => { #PH Name => 'FlashGNDistance', SeparateTable => 1, PrintConv => \%flashGNDistance, }, 15 => { Name => 'FlashGroupAControlMode', Mask => 0x0f, DataMember => 'FlashGroupAControlMode', RawConv => '$$self{FlashGroupAControlMode} = $val', PrintConv => \%flashControlMode, SeparateTable => 'FlashControlMode', }, 16 => { Name => 'FlashGroupBControlMode', Mask => 0x0f, DataMember => 'FlashGroupBControlMode', RawConv => '$$self{FlashGroupBControlMode} = $val', PrintConv => \%flashControlMode, SeparateTable => 'FlashControlMode', }, 17 => [ { Name => 'FlashGroupAOutput', Condition => '$$self{FlashGroupAControlMode} >= 0x06', ValueConv => '2 ** (-$val/6)', ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0', PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)', PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1', }, { Name => 'FlashGroupACompensation', Format => 'int8s', ValueConv => '-$val/6', ValueConvInv => '-6 * $val', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, ], 18 => [ { Name => 'FlashGroupBOutput', Condition => '$$self{FlashGroupBControlMode} >= 0x06', ValueConv => '2 ** (-$val/6)', ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0', PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)', PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1', }, { Name => 'FlashGroupBCompensation', Format => 'int8s', ValueConv => '-$val/6', ValueConvInv => '-6 * $val', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, ], ); # Flash information for D40, D40x, D3 and D300 (ref JD) %Image::ExifTool::Nikon::FlashInfo0102 = ( %binaryDataAttrs, DATAMEMBER => [ 9.2, 16.1, 17.1, 17.2 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are used by the D3 (firmware 1.x), D40, D40X, D60 and D300 (firmware 1.00). }, # NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added 0 => { Name => 'FlashInfoVersion', Format => 'string[4]', Writable => 0, }, 4 => { #PH Name => 'FlashSource', PrintConv => { 0 => 'None', 1 => 'External', 2 => 'Internal', }, }, # 5 - values: 46,48,50,54,78 6 => { Format => 'int8u[2]', Name => 'ExternalFlashFirmware', SeparateTable => 'FlashFirmware', PrintConv => \%flashFirmware, }, 8 => { Name => 'ExternalFlashFlags', PrintConv => { BITMASK => { 0 => 'Fired', #28 2 => 'Bounce Flash', #PH 4 => 'Wide Flash Adapter', 5 => 'Dome Diffuser', #28 }}, }, 9.1 => { Name => 'FlashCommanderMode', Mask => 0x80, PrintConv => { 0x00 => 'Off', 0x80 => 'On', }, }, 9.2 => { Name => 'FlashControlMode', Mask => 0x7f, DataMember => 'FlashControlMode', RawConv => '$$self{FlashControlMode} = $val', PrintConv => \%flashControlMode, SeparateTable => 'FlashControlMode', }, 10 => [ { Name => 'FlashOutput', Condition => '$$self{FlashControlMode} >= 0x06', ValueConv => '2 ** (-$val/6)', ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0', PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)', PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1', }, { Name => 'FlashCompensation', # this is the compensation from the camera (0x0012) for "Built-in" FlashType, or # the compensation from the external unit (0x0017) for "Optional" FlashType - PH Format => 'int8s', Priority => 0, ValueConv => '-$val/6', ValueConvInv => '-6 * $val', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, ], 12 => { Name => 'FlashFocalLength', RawConv => '$val ? $val : undef', PrintConv => '"$val mm"', PrintConvInv => '$val=~/(\d+)/; $1 || 0', }, 13 => { Name => 'RepeatingFlashRate', RawConv => '$val ? $val : undef', PrintConv => '"$val Hz"', PrintConvInv => '$val=~/(\d+)/; $1 || 0', }, 14 => { Name => 'RepeatingFlashCount', RawConv => '$val ? $val : undef', }, 15 => { #PH Name => 'FlashGNDistance', SeparateTable => 1, PrintConv => \%flashGNDistance, }, 16.1 => { Name => 'FlashGroupAControlMode', Mask => 0x0f, Notes => 'note: group A tags may apply to the built-in flash settings for some models', DataMember => 'FlashGroupAControlMode', RawConv => '$$self{FlashGroupAControlMode} = $val', PrintConv => \%flashControlMode, SeparateTable => 'FlashControlMode', }, 17.1 => { Name => 'FlashGroupBControlMode', Mask => 0xf0, Notes => 'note: group B tags may apply to group A settings for some models', DataMember => 'FlashGroupBControlMode', RawConv => '$$self{FlashGroupBControlMode} = $val', ValueConv => '$val >> 4', ValueConvInv => '$val << 4', PrintConv => \%flashControlMode, SeparateTable => 'FlashControlMode', }, 17.2 => { #PH Name => 'FlashGroupCControlMode', Mask => 0x0f, Notes => 'note: group C tags may apply to group B settings for some models', DataMember => 'FlashGroupCControlMode', RawConv => '$$self{FlashGroupCControlMode} = $val', PrintConv => \%flashControlMode, SeparateTable => 'FlashControlMode', }, 18 => [ { Name => 'FlashGroupAOutput', Condition => '$$self{FlashGroupAControlMode} >= 0x06', ValueConv => '2 ** (-$val/6)', ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0', PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)', PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1', }, { Name => 'FlashGroupACompensation', Format => 'int8s', ValueConv => '-$val/6', ValueConvInv => '-6 * $val', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, ], 19 => [ { Name => 'FlashGroupBOutput', Condition => '$$self{FlashGroupBControlMode} >= 0x60', ValueConv => '2 ** (-$val/6)', ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0', PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)', PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1', }, { Name => 'FlashGroupBCompensation', Format => 'int8s', ValueConv => '-$val/6', ValueConvInv => '-6 * $val', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, ], 20 => [ #PH { Name => 'FlashGroupCOutput', Condition => '$$self{FlashGroupCControlMode} >= 0x06', ValueConv => '2 ** (-$val/6)', ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0', PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)', PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1', }, { Name => 'FlashGroupCCompensation', Format => 'int8s', ValueConv => '-$val/6', ValueConvInv => '-6 * $val', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, ], ); # Flash information for D90 and D700 (ref PH) # - confirmed in detail for D800 (0105) - PH %Image::ExifTool::Nikon::FlashInfo0103 = ( %binaryDataAttrs, DATAMEMBER => [ 9.2, 17.1, 18.1, 18.2 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are used by the D3 (firmware 2.x), D3X, D3S, D4, D90, D300 (firmware 1.10), D300S, D600, D700, D800, D3000, D3100, D3200, D5000, D5100, D5200, D7000. }, # NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added 0 => { Name => 'FlashInfoVersion', Format => 'string[4]', Writable => 0, }, 4 => { #PH Name => 'FlashSource', PrintConv => { 0 => 'None', 1 => 'External', 2 => 'Internal', }, }, # 5 - values: 46,48,50,54,78 6 => { Format => 'int8u[2]', Name => 'ExternalFlashFirmware', SeparateTable => 'FlashFirmware', PrintConv => \%flashFirmware, }, 8 => { Name => 'ExternalFlashFlags', PrintConv => { BITMASK => { 0 => 'Fired', #28 2 => 'Bounce Flash', #PH 4 => 'Wide Flash Adapter', 5 => 'Dome Diffuser', #28 }}, }, 9.1 => { Name => 'FlashCommanderMode', Mask => 0x80, PrintConv => { 0x00 => 'Off', 0x80 => 'On', }, }, 9.2 => { Name => 'FlashControlMode', Mask => 0x7f, DataMember => 'FlashControlMode', RawConv => '$$self{FlashControlMode} = $val', PrintConv => \%flashControlMode, SeparateTable => 'FlashControlMode', }, 10 => [ { Name => 'FlashOutput', Condition => '$$self{FlashControlMode} >= 0x06', ValueConv => '2 ** (-$val/6)', ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0', PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)', PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1', }, { Name => 'FlashCompensation', # this is the compensation from the camera (0x0012) for "Built-in" FlashType, or # the compensation from the external unit (0x0017) for "Optional" FlashType - PH Format => 'int8s', Priority => 0, ValueConv => '-$val/6', ValueConvInv => '-6 * $val', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, ], 12 => { #JD Name => 'FlashFocalLength', RawConv => '($val and $val != 255) ? $val : undef', PrintConv => '"$val mm"', PrintConvInv => '$val=~/(\d+)/; $1 || 0', }, 13 => { #JD Name => 'RepeatingFlashRate', RawConv => '($val and $val != 255) ? $val : undef', PrintConv => '"$val Hz"', PrintConvInv => '$val=~/(\d+)/; $1 || 0', }, 14 => { #JD Name => 'RepeatingFlashCount', RawConv => '($val and $val != 255) ? $val : undef', }, 15 => { #28 Name => 'FlashGNDistance', SeparateTable => 1, PrintConv => \%flashGNDistance, }, 16 => { #28 Name => 'FlashColorFilter', PrintConv => { 0x00 => 'None', 1 => 'FL-GL1', 2 => 'FL-GL2', 9 => 'TN-A1', 10 => 'TN-A2', 65 => 'Red', 66 => 'Blue', 67 => 'Yellow', 68 => 'Amber', }, }, 17.1 => { Name => 'FlashGroupAControlMode', Mask => 0x0f, Notes => 'note: group A tags may apply to the built-in flash settings for some models', DataMember => 'FlashGroupAControlMode', RawConv => '$$self{FlashGroupAControlMode} = $val', PrintConv => \%flashControlMode, SeparateTable => 'FlashControlMode', }, 18.1 => { Name => 'FlashGroupBControlMode', Mask => 0xf0, Notes => 'note: group B tags may apply to group A settings for some models', DataMember => 'FlashGroupBControlMode', RawConv => '$$self{FlashGroupBControlMode} = $val', ValueConv => '$val >> 4', ValueConvInv => '$val << 4', PrintConv => \%flashControlMode, SeparateTable => 'FlashControlMode', }, 18.2 => { #PH Name => 'FlashGroupCControlMode', Mask => 0x0f, Notes => 'note: group C tags may apply to group B settings for some models', DataMember => 'FlashGroupCControlMode', RawConv => '$$self{FlashGroupCControlMode} = $val', PrintConv => \%flashControlMode, SeparateTable => 'FlashControlMode', }, 19 => [ { Name => 'FlashGroupAOutput', Condition => '$$self{FlashGroupAControlMode} >= 0x06', ValueConv => '2 ** (-$val/6)', ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0', PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)', PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1', }, { Name => 'FlashGroupACompensation', Format => 'int8s', ValueConv => '-$val/6', ValueConvInv => '-6 * $val', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, ], 20 => [ { Name => 'FlashGroupBOutput', Condition => '$$self{FlashGroupBControlMode} >= 0x60', ValueConv => '2 ** (-$val/6)', ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0', PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)', PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1', }, { Name => 'FlashGroupBCompensation', Format => 'int8s', ValueConv => '-$val/6', ValueConvInv => '-6 * $val', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, ], 21 => [ #PH { Name => 'FlashGroupCOutput', Condition => '$$self{FlashGroupCControlMode} >= 0x06', ValueConv => '2 ** (-$val/6)', ValueConvInv => '$val>0 ? -6*log($val)/log(2) : 0', PrintConv => '$val>0.99 ? "Full" : sprintf("%.0f%%",$val*100)', PrintConvInv => '$val=~/(\d+)/ ? $1/100 : 1', }, { Name => 'FlashGroupCCompensation', Format => 'int8s', ValueConv => '-$val/6', ValueConvInv => '-6 * $val', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, ], 0x1b => { #PH Name => 'ExternalFlashCompensation', Format => 'int8s', Priority => 0, ValueConv => '-$val/6', ValueConvInv => '-6 * $val', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x1d => { #PH Name => 'FlashExposureComp3', Format => 'int8s', # (does not include the built-in compensation for FlashType "Built-in,TTL&Comdr.") Notes => 'does not include the effect of flash bracketing', Priority => 0, ValueConv => '-$val/6', ValueConvInv => '-6 * $val', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x27 => { #PH (same as ShotInfoD800 0x4d2 but also valid for repeating flash) Name => 'FlashExposureComp4', Format => 'int8s', Notes => 'includes the effect of flash bracketing. Valid for repeating flash', Priority => 0, ValueConv => '-$val/6', ValueConvInv => '-6 * $val', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, # 0x2b - related to flash power (PH, D800, 96=full,62=1/4,2=1/128) ); # Unknown Flash information %Image::ExifTool::Nikon::FlashInfoUnknown = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'FlashInfoVersion', Format => 'string[4]', Writable => 0, }, ); # Multi exposure / image overlay information (ref PH) %Image::ExifTool::Nikon::MultiExposure = ( %binaryDataAttrs, FORMAT => 'int32u', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # NOTE: Must set ByteOrder in SubDirectory if any multi-byte integer tags added 0 => { Name => 'MultiExposureVersion', Format => 'string[4]', Writable => 0, }, 1 => { Name => 'MultiExposureMode', PrintConv => { 0 => 'Off', 1 => 'Multiple Exposure', 2 => 'Image Overlay', 3 => 'HDR', #31 }, }, 2 => 'MultiExposureShots', 3 => { Name => 'MultiExposureAutoGain', PrintConv => \%offOn, }, ); # HDR information (ref 32) %Image::ExifTool::Nikon::HDRInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Location' }, 0 => { Name => 'HDRInfoVersion', Format => 'string[4]', }, 4 => { Name => 'HDR', PrintConv => { 0 => 'Off', 1 => 'On', 48 => 'Auto', #PH (NC) }, }, 5 => { Name => 'HDRLevel', PrintConv => { 0 => 'Auto', 1 => '1 EV', 2 => '2 EV', 3 => '3 EV', # 5 - seen for 1J4 255 => 'n/a', #PH }, }, 6 => { Name => 'HDRSmoothing', PrintConv => { 0 => 'Off', 1 => 'Normal', 2 => 'Low', 3 => 'High', 48 => 'Auto', #PH (NC) 255 => 'n/a', #PH }, }, 7 => { #PH (P330, HDRInfoVersion=0101) Name => 'HDRLevel2', PrintConv => { 0 => 'Auto', 1 => '1 EV', 2 => '2 EV', 3 => '3 EV', 255 => 'n/a', }, }, ); # location information (ref PH) %Image::ExifTool::Nikon::LocationInfo = ( %binaryDataAttrs, DATAMEMBER => [ 4 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Location' }, NOTES => 'Tags written by some Nikon GPS-equipped cameras like the AW100.', 0 => { Name => 'LocationInfoVersion', Format => 'undef[4]', }, 4 => { Name => 'TextEncoding', DataMember => 'TextEncoding', RawConv => q{ $$self{TextEncoding} = $Image::ExifTool::Nikon::nikonTextEncoding{$val} if $val; return $val; }, PrintConv => \%Image::ExifTool::Nikon::nikonTextEncoding, }, # (the CountryCode and Location tag names chosen to correspond with XMP::iptcCore) 5 => { Name => 'CountryCode', Format => 'undef[3]', ValueConv => '$val=~s/\0.*//s; $val', # truncate at null ValueConvInv => '$val', }, 8 => 'POILevel', #forum5782 9 => { Name => 'Location', Format => 'undef[70]', RawConv => '$$self{TextEncoding} ? $self->Decode($val,$$self{TextEncoding},"MM") : $val', RawConvInv => '$$self{TextEncoding} ? $self->Encode($val,$$self{TextEncoding},"MM") : $val', }, ); # tags in Nikon QuickTime videos (PH - observations with Coolpix S3) # (similar information in Kodak,Minolta,Nikon,Olympus,Pentax and Sanyo videos) %Image::ExifTool::Nikon::MOV = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, NOTES => q{ This information is found in MOV and QT videos from some Nikon cameras. }, 0x00 => { Name => 'Make', Format => 'string[24]', }, 0x18 => { Name => 'Model', Description => 'Camera Model Name', Format => 'string[8]', }, # (01 00 at offset 0x20) 0x26 => { Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val ? 10 / $val : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x2a => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', }, 0x32 => { Name => 'ExposureCompensation', Format => 'rational64s', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', }, 0x44 => { Name => 'WhiteBalance', Format => 'int16u', PrintConv => { 0 => 'Auto', 1 => 'Daylight', 2 => 'Shade', 3 => 'Fluorescent', #2 4 => 'Tungsten', 5 => 'Manual', }, }, 0x48 => { Name => 'FocalLength', Format => 'rational64u', PrintConv => 'sprintf("%.1f mm",$val)', }, 0xaf => { Name => 'Software', Format => 'string[16]', }, 0xdf => { # (this is a guess ... could also be offset 0xdb) Name => 'ISO', Format => 'int16u', RawConv => '$val < 50 ? undef : $val', # (not valid for Coolpix L10) }, ); # Nikon metadata in AVI videos (PH) %Image::ExifTool::Nikon::AVI = ( NOTES => 'Nikon-specific RIFF tags found in AVI videos.', GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, nctg => { Name => 'NikonTags', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AVITags' }, }, ncth => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Binary => 1, }, ncvr => { Name => 'NikonVers', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AVIVers' }, }, ncvw => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, RawConv => 'length($val) ? $val : undef', Binary => 1, }, ); # version information in AVI videos (PH) %Image::ExifTool::Nikon::AVIVers = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, PROCESS_PROC => \&ProcessNikonAVI, FORMAT => 'string', 0x01 => 'MakerNoteType', 0x02 => { Name => 'MakerNoteVersion', Format => 'int8u', ValueConv => 'my @a = reverse split " ", $val; join ".", @a;', }, ); # tags in AVI videos (PH) %Image::ExifTool::Nikon::AVITags = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&ProcessNikonAVI, FORMAT => 'string', NOTES => q{ These tags and the AVIVer tags below are found in proprietary-format records of Nikon AVI videos. }, 0x03 => 'Make', 0x04 => 'Model', 0x05 => { Name => 'Software', Format => 'undef', ValueConv => '$val =~ tr/\0//d; $val', }, 0x06 => 'Equipment', # "NIKON DIGITAL CAMERA" 0x07 => { # (guess) Name => 'Orientation', Format => 'int16u', Groups => { 2 => 'Image' }, PrintConv => \%Image::ExifTool::Exif::orientation, }, 0x08 => { Name => 'ExposureTime', Format => 'rational64u', Groups => { 2 => 'Image' }, PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x09 => { Name => 'FNumber', Format => 'rational64u', Groups => { 2 => 'Image' }, PrintConv => 'sprintf("%.1f",$val)', }, 0x0a => { Name => 'ExposureCompensation', Format => 'rational64s', Groups => { 2 => 'Image' }, PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', }, 0x0b => { Name => 'MaxApertureValue', Format => 'rational64u', ValueConv => '2 ** ($val / 2)', PrintConv => 'sprintf("%.1f",$val)', }, 0x0c => { Name => 'MeteringMode', # (guess) Format => 'int16u', PrintConv => { 0 => 'Unknown', 1 => 'Average', 2 => 'Center-weighted average', 3 => 'Spot', 4 => 'Multi-spot', 5 => 'Multi-segment', 6 => 'Partial', 255 => 'Other', }, }, 0x0d => { # val: 0 Name => 'Nikon_AVITags_0x000d', Format => 'int16u', Flags => [ 'Hidden', 'Unknown' ], }, 0x0e => { # val: 0 Name => 'Nikon_AVITags_0x000e', Format => 'int16u', Flags => [ 'Hidden', 'Unknown' ], }, 0x0f => { Name => 'FocalLength', Format => 'rational64u', PrintConv => 'sprintf("%.1f mm",$val)', }, 0x10 => { Name => 'XResolution', Format => 'rational64u', Groups => { 2 => 'Image' }, }, 0x11 => { Name => 'YResolution', Format => 'rational64u', Groups => { 2 => 'Image' }, }, 0x12 => { Name => 'ResolutionUnit', Format => 'int16u', Groups => { 2 => 'Image' }, PrintConv => { 1 => 'None', 2 => 'inches', 3 => 'cm', }, }, 0x13 => { Name => 'DateTimeOriginal', # (guess) Description => 'Date/Time Original', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, 0x14 => { Name => 'CreateDate', # (guess) Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, 0x15 => { Name => 'Nikon_AVITags_0x0015', Format => 'int16u', Flags => [ 'Hidden', 'Unknown' ], }, 0x16 => { Name => 'Duration', Format => 'rational64u', PrintConv => '"$val s"', }, 0x17 => { # val: 1 Name => 'Nikon_AVITags_0x0017', Format => 'int16u', Flags => [ 'Hidden', 'Unknown' ], }, 0x18 => 'FocusMode', 0x19 => { # vals: -5, -2, 3, 5, 6, 8, 11, 12, 14, 20, 22 Name => 'Nikon_AVITags_0x0019', Format => 'int32s', Flags => [ 'Hidden', 'Unknown' ], }, 0x1b => { # vals: 1 (640x480), 1.25 (320x240) Name => 'DigitalZoom', Format => 'rational64u', }, 0x1c => { # (same as Nikon_0x000a) Name => 'Nikon_AVITags_0x001c', Format => 'rational64u', Flags => [ 'Hidden', 'Unknown' ], }, 0x1d => 'ColorMode', 0x1e => { # string[8] - val: "AUTO" Name => 'Sharpness', # (guess, could also be ISOSelection) }, 0x1f => { # string[16] - val: "AUTO" Name => 'WhiteBalance', # (guess, could also be ImageAdjustment) }, 0x20 => { # string[4] - val: "OFF" Name => 'NoiseReduction', # (guess) }, 0x801a => { # val: 0 (why is the 0x8000 bit set in the ID?) Name => 'Nikon_AVITags_0x801a', Format => 'int32s', Flags => [ 'Hidden', 'Unknown' ], } ); # Nikon NCDT atoms (ref PH) %Image::ExifTool::Nikon::NCDT = ( GROUPS => { 0 => 'MakerNotes', 1 => 'Nikon', 2 => 'Video' }, NOTES => q{ Nikon-specific QuickTime tags found in the NCDT atom of MOV videos from various Nikon models. }, NCHD => { Name => 'MakerNoteVersion', Format => 'undef', ValueConv => q{ $val =~ s/\0$//; # remove trailing null $val =~ s/([\0-\x1f])/'.'.ord($1)/ge; $val =~ s/\./ /; return $val; }, }, NCTG => { Name => 'NikonTags', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::NCTG' }, }, NCTH => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Format => 'undef', Binary => 1, }, NCVW => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Format => 'undef', Binary => 1, }, NCDB => { # (often 0 bytes long, or 4 null bytes) Name => 'NikonNCDB', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::NCDB' }, } ); # Nikon NCDB tags from MOV videos (ref PH) %Image::ExifTool::Nikon::NCDB = ( GROUPS => { 0 => 'MakerNotes', 1 => 'Nikon', 2 => 'Video' }, # OP01 - 320 bytes, starts with "0200" (D600,D610,D810,D3200,D5200) # - 638 bytes, starts with "0200" (D7100) # OP02 - 2048 bytes, starts with "0200" (D810) ); # Nikon NCTG tags from MOV videos (ref PH) %Image::ExifTool::Nikon::NCTG = ( PROCESS_PROC => \&ProcessNikonMOV, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are found in proprietary-format records of the NCTG atom in MOV videos from some Nikon cameras. }, 0x01 => 'Make', 0x02 => 'Model', 0x03 => 'Software', 0x11 => { Name => 'CreateDate', #(guess, but matches QuickTime CreateDate) Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, 0x12 => { Name => 'DateTimeOriginal', #(guess, but time is 1 sec before tag 0x11) Description => 'Date/Time Original', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, 0x13 => { Name => 'FrameCount', # int32u[2]: "467 0", "1038 0", "1127 0" ValueConv => '$val =~ s/ 0$//; $val', # (not sure what the extra "0" is for) }, # 0x14 - int32u[2]: "0 0" # 0x15 - int32u[2]: "0 0" 0x16 => { Name => 'FrameRate', Groups => { 2 => 'Video' }, PrintConv => 'int($val * 1000 + 0.5) / 1000', }, # 0x17 - rational62u: same value as FrameRate # 0x18 - int16u: 1, 2 # 0x21 - int16u: 1, 2 0x22 => { Name => 'FrameWidth', Groups => { 2 => 'Video' }, }, 0x23 => { Name => 'FrameHeight', Groups => { 2 => 'Video' }, }, # 0x24 - int16u: 1, 2 # 0x31 - int16u: 0, 1, 2 0x32 => { #(guess) Name => 'AudioChannels', Groups => { 2 => 'Audio' }, }, 0x33 => { Name => 'AudioBitsPerSample', Groups => { 2 => 'Audio' }, }, 0x34 => { Name => 'AudioSampleRate', Groups => { 2 => 'Audio' }, }, # 0x1001 - int16s: 0 # 0x1011 - int32u: 0 # 0x1012 - int32u: 0 # 0x1021 - int32u[32]: all zeros # # 0x110**** tags correspond to 0x**** tags in Exif::Main # 0x110829a => { #34 Name => 'ExposureTime', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x110829d => { #34 Name => 'FNumber', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', }, 0x1108822 => { Name => 'ExposureProgram', PrintConv => { 0 => 'Not Defined', 1 => 'Manual', 2 => 'Program AE', 3 => 'Aperture-priority AE', 4 => 'Shutter speed priority AE', 5 => 'Creative (Slow speed)', 6 => 'Action (High speed)', 7 => 'Portrait', 8 => 'Landscape', # 9 => 'Bulb', # (non-standard Canon value) }, }, 0x1109204 => { Name => 'ExposureCompensation', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', }, 0x1109207 => { Name => 'MeteringMode', PrintConv => { 0 => 'Unknown', 1 => 'Average', 2 => 'Center-weighted average', 3 => 'Spot', 4 => 'Multi-spot', 5 => 'Multi-segment', 6 => 'Partial', 255 => 'Other', }, }, 0x110920a => { #34 Name => 'FocalLength', PrintConv => 'sprintf("%.1f mm",$val)', }, 0x110a434 => 'LensModel', # # 0x120**** tags correspond to 0x**** tags in GPS::Main # 0x1200000 => { Name => 'GPSVersionID', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => '$val =~ tr/ /./; $val', }, 0x1200001 => { Name => 'GPSLatitudeRef', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { N => 'North', S => 'South', }, }, 0x1200002 => { Name => 'GPSLatitude', Groups => { 1 => 'GPS', 2 => 'Location' }, ValueConv => q{ require Image::ExifTool::GPS; Image::ExifTool::GPS::ToDegrees($val); }, PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)', }, 0x1200003 => { Name => 'GPSLongitudeRef', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { E => 'East', W => 'West', }, }, 0x1200004 => { Name => 'GPSLongitude', Groups => { 1 => 'GPS', 2 => 'Location' }, ValueConv => q{ require Image::ExifTool::GPS; Image::ExifTool::GPS::ToDegrees($val); }, PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)', }, 0x1200005 => { Name => 'GPSAltitudeRef', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { 0 => 'Above Sea Level', 1 => 'Below Sea Level', }, }, 0x1200006 => { Name => 'GPSAltitude', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => '$val =~ /^(inf|undef)$/ ? $val : "$val m"', }, 0x1200007 => { Name => 'GPSTimeStamp', Groups => { 1 => 'GPS', 2 => 'Time' }, ValueConv => q{ require Image::ExifTool::GPS; Image::ExifTool::GPS::ConvertTimeStamp($val); }, PrintConv => 'Image::ExifTool::GPS::PrintTimeStamp($val)', }, 0x1200008 => { Name => 'GPSSatellites', Groups => { 1 => 'GPS', 2 => 'Location' }, }, 0x1200010 => { Name => 'GPSImgDirectionRef', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { M => 'Magnetic North', T => 'True North', }, }, 0x1200011 => { Name => 'GPSImgDirection', Groups => { 1 => 'GPS', 2 => 'Location' }, }, 0x1200012 => { Name => 'GPSMapDatum', Groups => { 1 => 'GPS', 2 => 'Location' }, }, 0x120001d => { Name => 'GPSDateStamp', Groups => { 1 => 'GPS', 2 => 'Time' }, ValueConv => 'Image::ExifTool::Exif::ExifDate($val)', }, # # 0x200**** tags correspond to 0x**** tags in Nikon::Main # 0x2000001 => { Name => 'MakerNoteVersion', PrintConv => '$_=$val;s/^(\d{2})/$1\./;s/^0//;$_', }, 0x2000005 => 'WhiteBalance', 0x2000007 => { Name => 'FocusMode', Writable => 'string' }, #34 0x200000b => 'WhiteBalanceFineTune', 0x200001b => { Name => 'CropHiSpeed', Writable => 'int16u', Count => 7, PrintConv => q{ my @a = split ' ', $val; return "Unknown ($val)" unless @a == 7; $a[0] = $a[0] ? "On" : "Off"; return "$a[0] ($a[1]x$a[2] cropped to $a[3]x$a[4] at pixel $a[5],$a[6])"; } }, 0x200001e => { Name => 'ColorSpace', PrintConv => { 1 => 'sRGB', 2 => 'Adobe RGB', }, }, 0x200001f => { Name => 'VRInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::VRInfo' }, }, 0x2000023 => { Name => 'PictureControlData', Flags => [ 'Binary', 'Protected' ], SubDirectory => { TagTable => 'Image::ExifTool::Nikon::PictureControl' }, }, 0x2000024 => { Name => 'WorldTime', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::WorldTime' }, }, 0x2000025 => { #34 Name => 'ISOInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::ISOInfo', ByteOrder => 'BigEndian', }, }, 0x200002c => { Name => 'UnknownInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::UnknownInfo' }, }, # 0x200002d - int16u[3]: "512 0 0" 0x2000032 => { Name => 'UnknownInfo2', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::UnknownInfo' }, }, 0x2000039 => { Name => 'LocationInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::LocationInfo' }, }, 0x2000083 => { Name => 'LensType', # credit to Tom Christiansen (ref 7) for figuring this out... PrintConv => q[$_ = $val ? Image::ExifTool::DecodeBits($val, { 0 => 'MF', 1 => 'D', 2 => 'G', 3 => 'VR', }) : 'AF'; # remove commas and change "D G" to just "G" s/,//g; s/\bD G\b/G/; $_ ], }, 0x2000084 => { Name => "Lens", # short focal, long focal, aperture at short focal, aperture at long focal PrintConv => \&Image::ExifTool::Exif::PrintLensInfo, }, 0x2000087 => { Name => 'FlashMode', Writable => 'int8u', PrintConv => { 0 => 'Did Not Fire', 1 => 'Fired, Manual', #14 3 => 'Not Ready', #28 7 => 'Fired, External', #14 8 => 'Fired, Commander Mode', 9 => 'Fired, TTL Mode', }, }, # 0x20000a8 - Flash Info (seen 0107 - not yet decoded, PH) 0x20000ab => { Name => 'VariProgram', Writable => 'string' }, #2 (scene mode for DSLR's - PH) 0x20000b1 => { #34 Name => 'HighISONoiseReduction', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Minimal', # for high ISO (>800) when setting is "Off" 2 => 'Low', # Low,Normal,High take effect for ISO > 400 3 => 'Medium Low', 4 => 'Normal', 5 => 'Medium High', 6 => 'High', }, }, 0x20000b7 => { Name => 'AFInfo2', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AFInfo2' }, }, ); # Nikon composite tags %Image::ExifTool::Nikon::Composite = ( GROUPS => { 2 => 'Camera' }, LensSpec => { Description => 'Lens', Require => { 0 => 'Nikon:Lens', 1 => 'Nikon:LensType', }, ValueConv => '"$val[0] $val[1]"', PrintConv => '"$prt[0] $prt[1]"', }, LensID => { SeparateTable => 'Nikon LensID', # print values in a separate table Require => { 0 => 'Nikon:LensIDNumber', 1 => 'LensFStops', 2 => 'MinFocalLength', 3 => 'MaxFocalLength', 4 => 'MaxApertureAtMinFocal', 5 => 'MaxApertureAtMaxFocal', 6 => 'MCUVersion', 7 => 'Nikon:LensType', }, # construct lens ID string as per ref 11 ValueConv => 'sprintf("%.2X"." %.2X"x7, @raw)', PrintConv => \%nikonLensIDs, }, AutoFocus => { Require => { 0 => 'Nikon:PhaseDetectAF', 1 => 'Nikon:ContrastDetectAF', }, ValueConv => '($val[0] or $val[1]) ? 1 : 0', PrintConv => \%offOn, }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::Nikon'); #------------------------------------------------------------------------------ # Process Nikon AVI tags (D5000 videos) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessNikonAVI($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $pos = $$dirInfo{DirStart} || 0; my $dirEnd = $pos + $$dirInfo{DirLen}; $et->VerboseDir($dirInfo, undef, $$dirInfo{DirLen}); SetByteOrder('II'); while ($pos + 4 <= $dirEnd) { my $tag = Get16u($dataPt, $pos); my $size = Get16u($dataPt, $pos + 2); $pos += 4; last if $pos + $size > $dirEnd; $et->HandleTag($tagTablePtr, $tag, undef, DataPt => $dataPt, Start => $pos, Size => $size, ); $pos += $size; } return 1; } #------------------------------------------------------------------------------ # Print conversion for Nikon AF points # Inputs: 0) value to convert (as a string of hex bytes), # 1) lookup for AF point bit number (starting at 1) sub PrintAFPoints($$) { my ($val, $afPoints) = @_; my ($i, $j, @points); $val =~ tr/ //d; # remove spaces from hex string my @dat = unpack 'C*', pack 'H*', $val; # convert to array of bytes # loop through all bytes to find active AF points for ($i=0; $i<=@dat; ++$i) { next unless $dat[$i]; for ($j=0; $j<8; ++$j) { next unless $dat[$i] & (1 << $j); my $point = $$afPoints{$i*8 + $j + 1}; push @points, $point if defined $point; } } return '(none)' unless @points; # sort the points and return as comma-separated string return join ',', sort { return $a cmp $b if length($a) == length($b); return substr($a,0,1).'0'.substr($a,1,1) cmp $b if length($a) == 2; return $a cmp substr($b,0,1).'0'.substr($b,1,1); } @points; } #------------------------------------------------------------------------------ # Inverse print conversion for AF points # Inputs: 0) AF point string, 1) AF point lookup, 2) size of data # Returns: AF point data as a string of hex bytes sub PrintAFPointsInv($$$) { my ($val, $afPoints, $size) = @_; my @points = ($val =~ /[A-Za-z]\d+/g); my @dat = (0) x $size; if (@points) { my (%bitNum, $point); $bitNum{$$afPoints{$_}} = $_ foreach keys %$afPoints; # build reverse lookup foreach $point (@points) { my $bitNum = $bitNum{uc $point} or next; my $byte = int(($bitNum - 1) / 8); $dat[$byte] |= (1 << (($bitNum - 1) % 8)); } } return join(" ", unpack("H2"x$size, pack('C*', @dat))); } #------------------------------------------------------------------------------ # Get AF point name for grid-type AF # Inputs: 0) AF point number, 1) number of columns, 2) true for inverse conversion # Returns: AF point name, or undef sub GetAFPointGrid($$;$) { my ($val, $ncol, $inv) = @_; if ($inv) { return undef unless $val =~ /^([A-J])(\d+)$/i; return (ord(uc($1))-65) * $ncol + $2 - 1; } else { my $row = int(($val + 0.5) / $ncol); my $col = $val - $ncol * $row + 1; return chr(65+$row) . $col; } } #------------------------------------------------------------------------------ # Print conversion for grid-type AF points # Inputs: 0) value to convert (as a string of hex bytes), # 1) number of columns in grid sub PrintAFPointsGrid($$) { my ($val, $ncol) = @_; my ($i, $j, @points); $val =~ tr/ //d; # remove spaces from hex string my @dat = unpack 'C*', pack 'H*', $val; # convert to array of bytes # loop through all bytes to find active AF points for ($i=0; $i<@dat; ++$i) { next unless $dat[$i]; for ($j=0; $j<8; ++$j) { next unless $dat[$i] & (1 << $j); my $point = GetAFPointGrid($i*8 + $j, $ncol); push @points, $point if defined $point; } } return '(none)' unless @points; return join ',', @points; # return as comma-separated string } #------------------------------------------------------------------------------ # Inverse print conversion for AF points # Inputs: 0) AF point string, 1) number of columns, 2) size of data # Returns: AF point data as a string of hex bytes sub PrintAFPointsGridInv($$$) { my ($val, $ncol, $size) = @_; my @points = ($val =~ /[A-Za-z]\d+/g); my @dat = (0) x $size; foreach (@points) { my $n = GetAFPointGrid($_, $ncol, 1); next unless defined $n; my $byte = int($n / 8); next if $byte > $size; $dat[$byte] |= (1 << ($n - $byte * 8)); } return join(" ", unpack("H2"x$size, pack('C*', @dat))); } #------------------------------------------------------------------------------ # Print PictureControl value # Inputs: 0) value (with 0x80 subtracted), # 1) 'Normal' (0 value) string (default 'Normal') # 2) format string for numbers (default '%+d') # Returns: PrintConv value sub PrintPC($;$$) { my ($val, $norm, $fmt) = @_; return $norm || 'Normal' if $val == 0; return 'n/a' if $val == 0x7f; return 'Auto' if $val == -128; # -127 = custom curve created in Camera Control Pro (show as "User" by D3) - ref 28 return 'User' if $val == -127; #28 return sprintf($fmt || '%+d', $val); } #------------------------------------------------------------------------------ # Inverse of PrintPC # Inputs: 0) PrintConv value (after subracting 0x80 from raw value) # Returns: unconverted value # Notes: raw values: 0=Auto, 1=User, 0xff=n/a, ... 0x7f=-1, 0x80=0, 0x81=1, ... sub PrintPCInv($) { my $val = shift; return $val if $val =~ /^[-+]?\d+$/; return 0x7f if $val =~ /n\/a/i; return -128 if $val =~ /auto/i; return -127 if $val =~ /user/i; #28 return 0; } #------------------------------------------------------------------------------ # Convert unknown LensID values # Inputs: 0) value, 1) flag for inverse conversion, 2) PrintConv hash ref sub LensIDConv($$$) { my ($val, $inv, $conv) = @_; return undef if $inv; # multiple lenses with the same LensID are distinguished by decimal values if ($$conv{"$val.1"}) { my ($i, @vals, @user); for ($i=1; ; ++$i) { my $lens = $$conv{"$val.$i"} or last; if ($Image::ExifTool::userLens{$lens}) { push @user, $lens; } else { push @vals, $lens; } } return join(' or ', @user) if @user; return join(' or ', @vals); } # Sigma has been changing the LensID on some new lenses # and with some Sigma lenses the LensFStops changes! (argh!) my $pat = $val; $pat =~ s/^\w+ \w+/.. ../; my @ids = sort grep /^$pat$/, keys %$conv; if (@ids) { # first try different LensFStops (2nd value) ($pat = $val) =~ s/ \w+/ ../; my @good = grep /^$pat$/, @ids; return $$conv{$good[0]} if @good; # then try different LensType (1st value) ($pat = $val) =~ s/^\w+/../; @good = grep /^$pat$/, @ids; return "Unknown ($val) $$conv{$good[0]} ?" if @good; } return undef; } #------------------------------------------------------------------------------ # Clean up formatting of string values # Inputs: 0) string value # Returns: formatted string value # - removes trailing spaces and changes case to something more sensible sub FormatString($) { my $str = shift; # limit string length (can be very long for some unknown tags) if (length($str) > 60) { $str = substr($str,0,55) . "[...]"; } else { $str =~ s/\s+$//; # remove trailing white space # Don't change case of non-words (no vowels) if ($str =~ /[AEIOUY]/) { # change all letters but the first to lower case, # but only in words containing a vowel if ($str =~ s/\b([AEIOUY])([A-Z]+)/$1\L$2/g) { $str =~ s/\bAf\b/AF/; # patch for "AF" # patch for a number of models that write improper string # terminator for ImageStabilization (VR-OFF, VR-ON) $str =~ s/ +.$//s; } if ($str =~ s/\b([A-Z])([A-Z]*[AEIOUY][A-Z]*)/$1\L$2/g) { $str =~ s/\bRaw\b/RAW/; # patch for "RAW" } } } return $str; } #------------------------------------------------------------------------------ # decoding tables from ref 4 my @xlat = ( [ 0xc1,0xbf,0x6d,0x0d,0x59,0xc5,0x13,0x9d,0x83,0x61,0x6b,0x4f,0xc7,0x7f,0x3d,0x3d, 0x53,0x59,0xe3,0xc7,0xe9,0x2f,0x95,0xa7,0x95,0x1f,0xdf,0x7f,0x2b,0x29,0xc7,0x0d, 0xdf,0x07,0xef,0x71,0x89,0x3d,0x13,0x3d,0x3b,0x13,0xfb,0x0d,0x89,0xc1,0x65,0x1f, 0xb3,0x0d,0x6b,0x29,0xe3,0xfb,0xef,0xa3,0x6b,0x47,0x7f,0x95,0x35,0xa7,0x47,0x4f, 0xc7,0xf1,0x59,0x95,0x35,0x11,0x29,0x61,0xf1,0x3d,0xb3,0x2b,0x0d,0x43,0x89,0xc1, 0x9d,0x9d,0x89,0x65,0xf1,0xe9,0xdf,0xbf,0x3d,0x7f,0x53,0x97,0xe5,0xe9,0x95,0x17, 0x1d,0x3d,0x8b,0xfb,0xc7,0xe3,0x67,0xa7,0x07,0xf1,0x71,0xa7,0x53,0xb5,0x29,0x89, 0xe5,0x2b,0xa7,0x17,0x29,0xe9,0x4f,0xc5,0x65,0x6d,0x6b,0xef,0x0d,0x89,0x49,0x2f, 0xb3,0x43,0x53,0x65,0x1d,0x49,0xa3,0x13,0x89,0x59,0xef,0x6b,0xef,0x65,0x1d,0x0b, 0x59,0x13,0xe3,0x4f,0x9d,0xb3,0x29,0x43,0x2b,0x07,0x1d,0x95,0x59,0x59,0x47,0xfb, 0xe5,0xe9,0x61,0x47,0x2f,0x35,0x7f,0x17,0x7f,0xef,0x7f,0x95,0x95,0x71,0xd3,0xa3, 0x0b,0x71,0xa3,0xad,0x0b,0x3b,0xb5,0xfb,0xa3,0xbf,0x4f,0x83,0x1d,0xad,0xe9,0x2f, 0x71,0x65,0xa3,0xe5,0x07,0x35,0x3d,0x0d,0xb5,0xe9,0xe5,0x47,0x3b,0x9d,0xef,0x35, 0xa3,0xbf,0xb3,0xdf,0x53,0xd3,0x97,0x53,0x49,0x71,0x07,0x35,0x61,0x71,0x2f,0x43, 0x2f,0x11,0xdf,0x17,0x97,0xfb,0x95,0x3b,0x7f,0x6b,0xd3,0x25,0xbf,0xad,0xc7,0xc5, 0xc5,0xb5,0x8b,0xef,0x2f,0xd3,0x07,0x6b,0x25,0x49,0x95,0x25,0x49,0x6d,0x71,0xc7 ], [ 0xa7,0xbc,0xc9,0xad,0x91,0xdf,0x85,0xe5,0xd4,0x78,0xd5,0x17,0x46,0x7c,0x29,0x4c, 0x4d,0x03,0xe9,0x25,0x68,0x11,0x86,0xb3,0xbd,0xf7,0x6f,0x61,0x22,0xa2,0x26,0x34, 0x2a,0xbe,0x1e,0x46,0x14,0x68,0x9d,0x44,0x18,0xc2,0x40,0xf4,0x7e,0x5f,0x1b,0xad, 0x0b,0x94,0xb6,0x67,0xb4,0x0b,0xe1,0xea,0x95,0x9c,0x66,0xdc,0xe7,0x5d,0x6c,0x05, 0xda,0xd5,0xdf,0x7a,0xef,0xf6,0xdb,0x1f,0x82,0x4c,0xc0,0x68,0x47,0xa1,0xbd,0xee, 0x39,0x50,0x56,0x4a,0xdd,0xdf,0xa5,0xf8,0xc6,0xda,0xca,0x90,0xca,0x01,0x42,0x9d, 0x8b,0x0c,0x73,0x43,0x75,0x05,0x94,0xde,0x24,0xb3,0x80,0x34,0xe5,0x2c,0xdc,0x9b, 0x3f,0xca,0x33,0x45,0xd0,0xdb,0x5f,0xf5,0x52,0xc3,0x21,0xda,0xe2,0x22,0x72,0x6b, 0x3e,0xd0,0x5b,0xa8,0x87,0x8c,0x06,0x5d,0x0f,0xdd,0x09,0x19,0x93,0xd0,0xb9,0xfc, 0x8b,0x0f,0x84,0x60,0x33,0x1c,0x9b,0x45,0xf1,0xf0,0xa3,0x94,0x3a,0x12,0x77,0x33, 0x4d,0x44,0x78,0x28,0x3c,0x9e,0xfd,0x65,0x57,0x16,0x94,0x6b,0xfb,0x59,0xd0,0xc8, 0x22,0x36,0xdb,0xd2,0x63,0x98,0x43,0xa1,0x04,0x87,0x86,0xf7,0xa6,0x26,0xbb,0xd6, 0x59,0x4d,0xbf,0x6a,0x2e,0xaa,0x2b,0xef,0xe6,0x78,0xb6,0x4e,0xe0,0x2f,0xdc,0x7c, 0xbe,0x57,0x19,0x32,0x7e,0x2a,0xd0,0xb8,0xba,0x29,0x00,0x3c,0x52,0x7d,0xa8,0x49, 0x3b,0x2d,0xeb,0x25,0x49,0xfa,0xa3,0xaa,0x39,0xa7,0xc5,0xa7,0x50,0x11,0x36,0xfb, 0xc6,0x67,0x4a,0xf5,0xa5,0x12,0x65,0x7e,0xb0,0xdf,0xaf,0x4e,0xb3,0x61,0x7f,0x2f ] ); # Decrypt Nikon data block (ref 4) # Inputs: 0) reference to data block, 1) serial number key, 2) shutter count key # 4) optional start offset (default 0) # 5) optional number of bytes to decode (default to the end of the data) # Returns: data block with specified data decrypted sub Decrypt($$$;$$) { my ($dataPt, $serial, $count, $start, $len) = @_; my ($i, $dat); $start or $start = 0; my $maxLen = length($$dataPt) - $start; $len = $maxLen if not defined $len or $len > $maxLen; return $$dataPt if $len <= 0; my $key = 0; for ($i=0; $i<4; ++$i) { $key ^= ($count >> ($i*8)) & 0xff; } my $ci = $xlat[0][$serial & 0xff]; my $cj = $xlat[1][$key]; my $ck = 0x60; my @data = unpack("x${start}C$len", $$dataPt); foreach $dat (@data) { $cj = ($cj + $ci * $ck) & 0xff; $ck = ($ck + 1) & 0xff; $dat ^= $cj; } my $end = $start + $len; my $pre = $start ? substr($$dataPt, 0, $start) : ''; my $post = $end < length($$dataPt) ? substr($$dataPt, $end) : ''; return $pre . pack('C*',@data) . $post; } #------------------------------------------------------------------------------ # Get serial number for use as a decryption key # Inputs: 0) ExifTool object ref, 1) serial number string # Returns: serial key integer or undef if no serial number provided sub SerialKey($$) { my ($et, $serial) = @_; # use serial number as key if integral return $serial if not defined $serial or $serial =~ /^\d+$/; return 0x22 if $$et{Model} =~ /\bD50$/; # D50 (ref 8) return 0x60; # D200 (ref 10), D40X (ref PH), etc } #------------------------------------------------------------------------------ # Read Nikon NCTG tags in MOV videos # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessNikonMOV($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos}; my $pos = $$dirInfo{DirStart}; my $end = $pos + $$dirInfo{DirLen}; $et->VerboseDir($$dirInfo{DirName}, 0, $$dirInfo{DirLen}); while ($pos + 8 < $end) { my $tag = Get32u($dataPt, $pos); my $fmt = Get16u($dataPt, $pos + 4); # (same format code as EXIF) my $count = Get16u($dataPt, $pos + 6); $pos += 8; my $fmtStr = $Image::ExifTool::Exif::formatName[$fmt]; unless ($fmtStr) { $et->Warn(sprintf("Unknown format ($fmt) for $$dirInfo{DirName} tag 0x%x",$tag)); last; } my $size = $count * $Image::ExifTool::Exif::formatSize[$fmt]; if ($pos + $size > $end) { $et->Warn(sprintf("Truncated data for $$dirInfo{DirName} tag 0x%x",$tag)); last; } my $rational; my $val = ReadValue($dataPt, $pos, $fmtStr, $count, $size, \$rational); my $key = $et->HandleTag($tagTablePtr, $tag, $val, DataPt => $dataPt, DataPos => $dataPos, Format => $fmtStr, Start => $pos, Size => $size, ); $$et{RATIONAL}{$key} = $rational if $rational and $key; $pos += $size; # is this padded to an even offset???? } return 1; } #------------------------------------------------------------------------------ # Read/Write Nikon Encrypted data block # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success when reading, or new directory when writing (IsWriting set) sub ProcessNikonEncrypted($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access my $serial = $$et{NikonSerialKey}; my $count = $$et{NikonCountKey}; unless (defined $serial and defined $count) { if (defined $serial or defined $count) { my $missing = defined $serial ? 'ShutterCount' : 'SerialNumber'; $et->Warn("Can't decrypt Nikon information (no $missing key)"); } delete $$et{NikonSerialKey}; delete $$et{NikonCountKey}; return 0; } my $verbose = $$dirInfo{IsWriting} ? 0 : $et->Options('Verbose'); my $tagInfo = $$dirInfo{TagInfo}; my $dirStart = $$dirInfo{DirStart}; my $data = substr(${$$dirInfo{DataPt}}, $dirStart, $$dirInfo{DirLen}); my ($start, $len, $more, $offset, $byteOrder, $recrypt, $newSerial, $newCount); # must re-encrypt when writing if serial number or shutter count changes if ($$dirInfo{IsWriting}) { if ($$et{NewNikonSerialKey}) { $newSerial = $$et{NewNikonSerialKey}; $recrypt = 1; } if ($$et{NewNikonCountKey}) { $newCount = $$et{NewNikonCountKey}; $recrypt = 1; } } if ($tagInfo and $$tagInfo{SubDirectory}) { $start = $$tagInfo{SubDirectory}{DecryptStart}; # may decrypt only part of the information to save time if ($verbose < 3 and $et->Options('Unknown') < 2 and not $recrypt) { $len = $$tagInfo{SubDirectory}{DecryptLen}; $more = $$tagInfo{SubDirectory}{DecryptMore}; } $offset = $$tagInfo{SubDirectory}{DirOffset}; $byteOrder = $$tagInfo{SubDirectory}{ByteOrder}; } $start or $start = 0; if (defined $offset) { # offset, if specified, is relative to start of encrypted data $offset += $start; } else { $offset = 0; } my $maxLen = length($data) - $start; # decrypt all the data unless DecryptLen is given unless ($len and $len < $maxLen) { $len = $maxLen; undef $more; # (can't decrypt more than this) } $data = Decrypt(\$data, $serial, $count, $start, $len); # set appropriate byte ordering before evaluating DecryptMore my $oldOrder = GetByteOrder(); SetByteOrder($byteOrder) if $byteOrder; if ($more) { #### eval DecryptMore ($data) my $moreLen = eval $more; $moreLen = $maxLen if $moreLen > $maxLen; # re-decrypt with new length if ($len < $moreLen) { $len = $moreLen; $data = substr(${$$dirInfo{DataPt}}, $dirStart, $$dirInfo{DirLen}); $data = Decrypt(\$data, $serial, $count, $start, $len); } } if ($verbose > 2) { $et->VerboseDir("Decrypted $$tagInfo{Name}"); $et->VerboseDump(\$data, Prefix => $$et{INDENT} . ' ', DataPos => $dirStart + $$dirInfo{DataPos} + ($$dirInfo{Base} || 0), ); } # process the decrypted information my %subdirInfo = ( DataPt => \$data, DirStart => $offset, DirLen => length($data) - $offset, DirName => $$dirInfo{DirName}, DataPos => $$dirInfo{DataPos} + $dirStart, Base => $$dirInfo{Base}, ); my $rtnVal; if ($$dirInfo{IsWriting}) { my $changed = $$et{CHANGED}; $rtnVal = $et->WriteBinaryData(\%subdirInfo, $tagTablePtr); # must re-encrypt if serial number or shutter count changes if ($recrypt) { $serial = $newSerial if defined $newSerial; $count = $newCount if defined $newCount; ++$$et{CHANGED}; } if ($changed == $$et{CHANGED}) { undef $rtnVal; # nothing changed so use original data } else { # add back any un-encrypted data at start $rtnVal = substr($data, 0, $offset) . $rtnVal if $offset; # re-encrypt data (symmetrical algorithm) $rtnVal = Decrypt(\$rtnVal, $serial, $count, $start, $len); } } else { $rtnVal = $et->ProcessBinaryData(\%subdirInfo, $tagTablePtr); } SetByteOrder($oldOrder); return $rtnVal; } #------------------------------------------------------------------------------ # Pre-scan EXIF directory to extract specific tags # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) required tagID hash ref # Returns: 1 if directory was scanned successfully sub PrescanExif($$$) { my ($et, $dirInfo, $tagHash) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos} || 0; my $dataLen = $$dirInfo{DataLen}; my $dirStart = $$dirInfo{DirStart} || 0; my $base = $$dirInfo{Base} || 0; my $raf = $$dirInfo{RAF}; my ($index, $numEntries, $data, $buff); # get number of entries in IFD if ($dirStart >= 0 and $dirStart <= $dataLen-2) { $numEntries = Get16u($dataPt, $dirStart); # reset $numEntries to read from file if necessary undef $numEntries if $dirStart + 2 + 12 * $numEntries > $dataLen; } # read IFD from file if necessary unless ($numEntries) { $raf or return 0; $dataPos += $dirStart; # read data from the start of the directory $raf->Seek($dataPos + $base, 0) and $raf->Read($data, 2) == 2 or return 0; $numEntries = Get16u(\$data, 0); my $len = 12 * $numEntries; $raf->Read($buff, $len) == $len or return 0; $data .= $buff; # update variables for the newly loaded IFD (already updated dataPos) $dataPt = \$data; $dataLen = length $data; $dirStart = 0; } # loop through necessary IFD entries my ($lastTag) = sort { $b <=> $a } keys %$tagHash; # (reverse sort) for ($index=0; $index<$numEntries; ++$index) { my $entry = $dirStart + 2 + 12 * $index; my $tagID = Get16u($dataPt, $entry); last if $tagID > $lastTag; # (assuming tags are in order) next unless exists $$tagHash{$tagID}; # only extract required tags my $format = Get16u($dataPt, $entry+2); next if $format < 1 or $format > 13; my $count = Get32u($dataPt, $entry+4); my $size = $count * $Image::ExifTool::Exif::formatSize[$format]; my $formatStr = $Image::ExifTool::Exif::formatName[$format]; my $valuePtr = $entry + 8; # pointer to value within $$dataPt if ($size > 4) { next if $size > 0x1000000; # set a reasonable limit on data size (16MB) $valuePtr = Get32u($dataPt, $valuePtr); # convert offset to pointer in $$dataPt # (don't yet handle EntryBased or FixOffsets) $valuePtr -= $dataPos; if ($valuePtr < 0 or $valuePtr+$size > $dataLen) { next unless $raf and $raf->Seek($base + $valuePtr + $dataPos,0) and $raf->Read($buff,$size) == $size; $$tagHash{$tagID} = ReadValue(\$buff,0,$formatStr,$count,$size); next; } } $$tagHash{$tagID} = ReadValue($dataPt,$valuePtr,$formatStr,$count,$size); } return 1; } #------------------------------------------------------------------------------ # Process Nikon Capture history data # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessNikonCaptureEditVersions($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; require Image::ExifTool::NikonCapture; return Image::ExifTool::NikonCapture::ProcessNikonCaptureEditVersions($et, $dirInfo, $tagTablePtr); } #------------------------------------------------------------------------------ # Process Nikon Capture Offsets IFD (ref PH) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success # Notes: This isn't a normal IFD, but is close... sub ProcessNikonCaptureOffsets($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart}; my $dirLen = $$dirInfo{DirLen}; my $success = 0; return 0 unless $dirLen > 2; my $count = Get16u($dataPt, $dirStart); return 0 unless $count and $count * 12 + 2 <= $dirLen; if ($et->Options('Verbose')) { $et->VerboseDir('NikonCaptureOffsets', $count); } my $index; for ($index=0; $index<$count; ++$index) { my $pos = $dirStart + 12 * $index + 2; my $tagID = Get32u($dataPt, $pos); my $value = Get32u($dataPt, $pos + 4); $et->HandleTag($tagTablePtr, $tagID, $value, Index => $index, DataPt => $dataPt, Start => $pos, Size => 12, ) and $success = 1; } return $success; } #------------------------------------------------------------------------------ # Read/write Nikon MakerNotes directory # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, otherwise returns 0 and sets a Warning when reading # or new directory when writing (IsWriting set in dirInfo) sub ProcessNikon($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access # pre-scan IFD to get SerialNumber (0x001d) and ShutterCount (0x00a7) for use in decryption my %needTags = ( 0x001d => 0, 0x00a7 => undef ); PrescanExif($et, $dirInfo, \%needTags); $$et{NikonSerialKey} = SerialKey($et, $needTags{0x001d}); $$et{NikonCountKey} = $needTags{0x00a7}; # process Nikon makernotes my $rtnVal; if ($$dirInfo{IsWriting}) { # get new decryptino keys if they are being changed my $serial = $et->GetNewValue($Image::ExifTool::Nikon::Main{0x001d}); my $count = $et->GetNewValue($Image::ExifTool::Nikon::Main{0x00a7}); $$et{NewNikonSerialKey} = SerialKey($et, $serial); $$et{NewNikonCountKey} = $count; $rtnVal = Image::ExifTool::Exif::WriteExif($et, $dirInfo, $tagTablePtr); delete $$et{NewNikonSerialKey}; delete $$et{NewNikonCountKey}; } else { $rtnVal = Image::ExifTool::Exif::ProcessExif($et, $dirInfo, $tagTablePtr); } delete $$et{NikonSerialKey}; delete $$et{NikonCountKey}; return $rtnVal; } 1; # end __END__ =head1 NAME Image::ExifTool::Nikon - Nikon EXIF maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Nikon maker notes in EXIF information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html> =item L<http://www.cybercom.net/~dcoffin/dcraw/> =item L<http://members.aol.com/khancock/pilot/nbuddy/> =item L<http://www.rottmerhusen.com/objektives/lensid/thirdparty.html> =item L<http://homepage3.nifty.com/kamisaka/makernote/makernote_nikon.htm> =item L<http://www.wohlberg.net/public/software/photo/nstiffexif/> =item (...plus lots of testing with Best Buy store demos!) =back =head1 ACKNOWLEDGEMENTS Thanks to Joseph Heled, Thomas Walter, Brian Ristuccia, Danek Duvall, Tom Christiansen, Robert Rottmerhusen, Werner Kober, Roger Larsson, Jens Duttke, Gregor Dorlars, Neil Nappe, Alexandre Naaman, Brendt Wohlberg and Warren Hatch for their help figuring out some Nikon tags, and to everyone who helped contribute to the LensID list. =head1 SEE ALSO L<Image::ExifTool::TagNames/Nikon Tags>, L<Image::ExifTool::TagNames/NikonCapture Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/NikonCapture.pm���������������������������������������������000644 �000765 �000024 �00000070204 12642461322 022651� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: NikonCapture.pm # # Description: Read/write Nikon Capture information # # Revisions: 11/08/2005 - P. Harvey Created # 10/10/2008 - P. Harvey Updated for Capture NX 2 # 16/04/2011 - P. Harvey Decode NikonCaptureEditVersions # # References: 1) http://www.cybercom.net/~dcoffin/dcraw/ # 2) Iliah Borg private communication (LibRaw) #------------------------------------------------------------------------------ package Image::ExifTool::NikonCapture; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.14'; sub ProcessNikonCapture($$$); # common print conversions my %offOn = ( 0 => 'Off', 1 => 'On' ); my %noYes = ( 0 => 'No', 1 => 'Yes' ); my %unsharpColor = ( 0 => 'RGB', 1 => 'Red', 2 => 'Green', 3 => 'Blue', 4 => 'Yellow', 5 => 'Magenta', 6 => 'Cyan', ); # Nikon Capture data (ref PH) %Image::ExifTool::NikonCapture::Main = ( PROCESS_PROC => \&ProcessNikonCapture, WRITE_PROC => \&WriteNikonCapture, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, NOTES => q{ This information is written by the Nikon Capture software in tag 0x0e01 of the maker notes of NEF images. }, # 0x007ddc9d contains contrast information 0x008ae85e => { Name => 'LCHEditor', Writable => 'int8u', PrintConv => \%offOn, }, 0x0c89224b => { Name => 'ColorAberrationControl', Writable => 'int8u', PrintConv => \%offOn, }, 0x116fea21 => { Name => 'HighlightData', SubDirectory => { TagTable => 'Image::ExifTool::NikonCapture::HighlightData', }, }, 0x2175eb78 => { Name => 'D-LightingHQ', Writable => 'int8u', PrintConv => \%offOn, }, 0x2fc08431 => { Name => 'StraightenAngle', Writable => 'double', }, 0x374233e0 => { Name => 'CropData', SubDirectory => { TagTable => 'Image::ExifTool::NikonCapture::CropData', }, }, 0x39c456ac => { Name => 'PictureCtrl', SubDirectory => { TagTable => 'Image::ExifTool::NikonCapture::PictureCtrl', }, }, 0x3cfc73c6 => { Name => 'RedEyeData', SubDirectory => { TagTable => 'Image::ExifTool::NikonCapture::RedEyeData', }, }, 0x3d136244 => { Name => 'EditVersionName', Writable => 'string', # (null terminated) }, # 0x3e726567 added when I rotated by 90 degrees 0x416391c6 => { Name => 'QuickFix', Writable => 'int8u', PrintConv => \%offOn, }, 0x56a54260 => { Name => 'Exposure', SubDirectory => { TagTable => 'Image::ExifTool::NikonCapture::Exposure', }, }, 0x5f0e7d23 => { Name => 'ColorBooster', Writable => 'int8u', PrintConv => \%offOn, }, 0x6a6e36b6 => { Name => 'D-LightingHQSelected', Writable => 'int8u', PrintConv => \%noYes, }, 0x753dcbc0 => { Name => 'NoiseReduction', Writable => 'int8u', PrintConv => \%offOn, }, 0x76a43200 => { Name => 'UnsharpMask', Writable => 'int8u', PrintConv => \%offOn, }, 0x76a43201 => { Name => 'Curves', Writable => 'int8u', PrintConv => \%offOn, }, 0x76a43202 => { Name => 'ColorBalanceAdj', Writable => 'int8u', PrintConv => \%offOn, }, 0x76a43203 => { Name => 'AdvancedRaw', Writable => 'int8u', PrintConv => \%offOn, }, 0x76a43204 => { Name => 'WhiteBalanceAdj', Writable => 'int8u', PrintConv => \%offOn, }, 0x76a43205 => { Name => 'VignetteControl', Writable => 'int8u', PrintConv => \%offOn, }, 0x76a43206 => { Name => 'FlipHorizontal', Writable => 'int8u', PrintConv => \%noYes, }, 0x76a43207 => { # rotation angle in degrees Name => 'Rotation', Writable => 'int16u', }, 0x083a1a25 => { Name => 'HistogramXML', Writable => 'undef', Binary => 1, AdjustSize => 4, # patch Nikon bug }, 0x84589434 => { Name => 'BrightnessData', SubDirectory => { TagTable => 'Image::ExifTool::NikonCapture::Brightness', }, }, # 0x88f55e48 - related to QuickFix 0x890ff591 => { Name => 'D-LightingHQData', SubDirectory => { TagTable => 'Image::ExifTool::NikonCapture::DLightingHQ', }, }, 0x926f13e0 => { Name => 'NoiseReductionData', SubDirectory => { TagTable => 'Image::ExifTool::NikonCapture::NoiseReduction', }, }, 0x9ef5f6e0 => { Name => 'IPTCData', SubDirectory => { TagTable => 'Image::ExifTool::IPTC::Main', }, }, # 0xa7264a72 - related to QuickFix 0xab5eca5e => { Name => 'PhotoEffects', Writable => 'int8u', PrintConv => \%offOn, }, 0xac6bd5c0 => { Name => 'VignetteControlIntensity', Writable => 'int16s', }, 0xb0384e1e => { Name => 'PhotoEffectsData', SubDirectory => { TagTable => 'Image::ExifTool::NikonCapture::PhotoEffects', }, }, 0xb999a36f => { Name => 'ColorBoostData', SubDirectory => { TagTable => 'Image::ExifTool::NikonCapture::ColorBoost', }, }, 0xbf3c6c20 => { Name => 'WBAdjData', SubDirectory => { TagTable => 'Image::ExifTool::NikonCapture::WBAdjData', }, }, 0xce5554aa => { Name => 'D-LightingHS', Writable => 'int8u', PrintConv => \%offOn, }, 0xe2173c47 => { Name => 'PictureControl', Writable => 'int8u', PrintConv => \%offOn, }, 0xe37b4337 => { Name => 'D-LightingHSData', SubDirectory => { TagTable => 'Image::ExifTool::NikonCapture::DLightingHS', }, }, 0xe42b5161 => { Name => 'UnsharpData', SubDirectory => { TagTable => 'Image::ExifTool::NikonCapture::UnsharpData', }, }, 0xe9651831 => { Name => 'PhotoEffectHistoryXML', Binary => 1, Writable => 'undef', }, 0xfe28a44f => { Name => 'AutoRedEye', Writable => 'int8u', PrintConv => \%offOn, # (have seen a value of 28 here for older software?) }, 0xfe443a45 => { Name => 'ImageDustOff', Writable => 'int8u', PrintConv => \%offOn, }, ); %Image::ExifTool::NikonCapture::UnsharpData = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int8u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0 => 'UnsharpCount', 19 => { Name => 'Unsharp1Color', Format => 'int16u', PrintConv => \%unsharpColor }, 23 => { Name => 'Unsharp1Intensity', Format => 'int16u' }, 25 => { Name => 'Unsharp1HaloWidth', Format => 'int16u' }, 27 => 'Unsharp1Threshold', 46 => { Name => 'Unsharp2Color', Format => 'int16u', PrintConv => \%unsharpColor }, 50 => { Name => 'Unsharp2Intensity', Format => 'int16u' }, 52 => { Name => 'Unsharp2HaloWidth', Format => 'int16u' }, 54 => 'Unsharp2Threshold', 73 => { Name => 'Unsharp3Color', Format => 'int16u', PrintConv => \%unsharpColor }, 77 => { Name => 'Unsharp3Intensity', Format => 'int16u' }, 79 => { Name => 'Unsharp3HaloWidth', Format => 'int16u' }, 81 => 'Unsharp3Threshold', 100 => { Name => 'Unsharp4Color', Format => 'int16u', PrintConv => \%unsharpColor }, 104 => { Name => 'Unsharp4Intensity', Format => 'int16u' }, 106 => { Name => 'Unsharp4HaloWidth', Format => 'int16u' }, 108 => 'Unsharp4Threshold', # there could be more, but I grow bored of this... :P ); %Image::ExifTool::NikonCapture::DLightingHS = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int32u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0 => 'D-LightingHSAdjustment', 1 => 'D-LightingHSColorBoost', ); %Image::ExifTool::NikonCapture::DLightingHQ = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int32u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0 => 'D-LightingHQShadow', 1 => 'D-LightingHQHighlight', 2 => 'D-LightingHQColorBoost', ); %Image::ExifTool::NikonCapture::ColorBoost = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int8u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0 => { Name => 'ColorBoostType', PrintConv => { 0 => 'Nature', 1 => 'People', }, }, 1 => { Name => 'ColorBoostLevel', Format => 'int32u', }, ); %Image::ExifTool::NikonCapture::WBAdjData = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int8u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x00 => { Name => 'WBAdjRedBalance', Format => 'double', }, 0x08 => { Name => 'WBAdjBlueBalance', Format => 'double', }, 0x10 => { Name => 'WBAdjMode', PrintConv => { 1 => 'Use Gray Point', 2 => 'Recorded Value', 3 => 'Use Temperature', 4 => 'Calculate Automatically', 5 => 'Auto2', #2 6 => 'Underwater', #2 7 => 'Auto1', }, }, 0x14 => { #2 Name => 'WBAdjLighting', Format => 'int16u', PrintHex => 1, PrintConv => { 0x000 => 'None', 0x100 => 'Incandescent', 0x200 => 'Daylight (direct sunlight)', 0x201 => 'Daylight (shade)', 0x202 => 'Daylight (cloudy)', 0x300 => 'Standard Fluorescent (warm white)', 0x301 => 'Standard Fluorescent (3700K)', 0x302 => 'Standard Fluorescent (cool white)', 0x303 => 'Standard Fluorescent (5000K)', 0x304 => 'Standard Fluorescent (daylight)', 0x305 => 'Standard Fluorescent (high temperature mercury vapor)', 0x400 => 'High Color Rendering Fluorescent (warm white)', 0x401 => 'High Color Rendering Fluorescent (3700K)', 0x402 => 'High Color Rendering Fluorescent (cool white)', 0x403 => 'High Color Rendering Fluorescent (5000K)', 0x404 => 'High Color Rendering Fluorescent (daylight)', 0x500 => 'Flash', 0x501 => 'Flash (FL-G1 filter)', 0x502 => 'Flash (FL-G2 filter)', 0x503 => 'Flash (TN-A1 filter)', 0x504 => 'Flash (TN-A2 filter)', 0x600 => 'Sodium Vapor Lamps', # 0x1002 => seen for WBAdjMode modes of Underwater and Calculate Automatically }, }, 0x18 => { Name => 'WBAdjTemperature', Format => 'int16u', }, 0x25 => { Name => 'WBAdjTint', Format => 'int32s', }, ); %Image::ExifTool::NikonCapture::PhotoEffects = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int8u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0 => { Name => 'PhotoEffectsType', PrintConv => { 0 => 'None', 1 => 'B&W', 2 => 'Sepia', 3 => 'Tinted', }, }, 4 => { Name => 'PhotoEffectsRed', Format => 'int16s', }, 6 => { Name => 'PhotoEffectsGreen', Format => 'int16s', }, 8 => { Name => 'PhotoEffectsBlue', Format => 'int16s', }, ); %Image::ExifTool::NikonCapture::Brightness = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int8u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0 => { Name => 'BrightnessAdj', Format => 'double', ValueConv => '$val * 50', ValueConvInv => '$val / 50', }, 8 => { Name => 'EnhanceDarkTones', PrintConv => \%offOn, }, ); %Image::ExifTool::NikonCapture::NoiseReduction = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int8u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x04 => { Name => 'EdgeNoiseReduction', PrintConv => \%offOn, }, 0x05 => { Name => 'ColorMoireReductionMode', PrintConv => { 0 => 'Off', 1 => 'Low', 2 => 'Medium', 3 => 'High', }, }, 0x09 => { Name => 'NoiseReductionIntensity', Format => 'int32u', }, 0x0d => { Name => 'NoiseReductionSharpness', Format => 'int32u', }, 0x11 => { Name => 'NoiseReductionMethod', Format => 'int16u', PrintConv => { 0 => 'Faster', 1 => 'Better Quality', 2 => 'Better Quality 2013', }, }, 0x15 => { Name => 'ColorMoireReduction', PrintConv => \%offOn, }, 0x17 => { Name => 'NoiseReduction', PrintConv => \%offOn, }, 0x18 => { Name => 'ColorNoiseReductionIntensity', Format => 'int32u', }, 0x1c => { Name => 'ColorNoiseReductionSharpness', Format => 'int32u', }, ); %Image::ExifTool::NikonCapture::CropData = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int8u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x1e => { Name => 'CropLeft', Format => 'double', ValueConv => '$val / 2', ValueConvInv => '$val * 2', }, 0x26 => { Name => 'CropTop', Format => 'double', ValueConv => '$val / 2', ValueConvInv => '$val * 2', }, 0x2e => { Name => 'CropRight', Format => 'double', ValueConv => '$val / 2', ValueConvInv => '$val * 2', }, 0x36 => { Name => 'CropBottom', Format => 'double', ValueConv => '$val / 2', ValueConvInv => '$val * 2', }, 0x8e => { Name => 'CropOutputWidthInches', Format => 'double', }, 0x96 => { Name => 'CropOutputHeightInches', Format => 'double', }, 0x9e => { Name => 'CropScaledResolution', Format => 'double', }, 0xae => { Name => 'CropSourceResolution', Format => 'double', ValueConv => '$val / 2', ValueConvInv => '$val * 2', }, 0xb6 => { Name => 'CropOutputResolution', Format => 'double', }, 0xbe => { Name => 'CropOutputScale', Format => 'double', }, 0xc6 => { Name => 'CropOutputWidth', Format => 'double', }, 0xce => { Name => 'CropOutputHeight', Format => 'double', }, 0xd6 => { Name => 'CropOutputPixels', Format => 'double', }, ); %Image::ExifTool::NikonCapture::PictureCtrl = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int8u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x00 => { Name => 'PictureControlActive', PrintConv => \%offOn, }, 0x13 => { Name => 'PictureControlMode', Format => 'string[16]', }, # 0x29 changes with Hue and Sharpening 0x2a => { Name => 'QuickAdjust', ValueConv => '$val - 128', ValueConvInv => '$val + 128', }, 0x2b => { Name => 'SharpeningAdj', ValueConv => '$val ? $val - 128 : "Auto"', ValueConvInv => '$val=~/\d/ ? $val + 128 : 0', }, 0x2c => { Name => 'ContrastAdj', ValueConv => '$val ? $val - 128 : "Auto"', ValueConvInv => '$val=~/\d/ ? $val + 128 : 0', }, 0x2d => { Name => 'BrightnessAdj', ValueConv => '$val ? $val - 128 : "Auto"', # no "Auto" mode (yet) for this setting ValueConvInv => '$val=~/\d/ ? $val + 128 : 0', }, 0x2e => { Name => 'SaturationAdj', ValueConv => '$val ? $val - 128 : "Auto"', ValueConvInv => '$val=~/\d/ ? $val + 128 : 0', }, 0x2f => { Name => 'HueAdj', ValueConv => '$val - 128', ValueConvInv => '$val + 128', }, # 0x37 changed from 0 to 2 when Picture Control is enabled (and no active DLighting) ); %Image::ExifTool::NikonCapture::RedEyeData = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int8u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0 => { Name => 'RedEyeCorrection', PrintConv => { 0 => 'Off', 1 => 'Automatic', 2 => 'Click on Eyes', }, }, ); %Image::ExifTool::NikonCapture::Exposure = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int8u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x00 => { Name => 'ExposureAdj', Format => 'int16s', ValueConv => '$val / 100', ValueConvInv => '$val * 100', }, 0x12 => { Name => 'ExposureAdj2', Format => 'double', PrintConv => 'sprintf("%.4f", $val)', PrintConvInv => '$val', }, 0x24 => { Name => 'ActiveD-Lighting', PrintConv => \%offOn, }, 0x25 => { Name => 'ActiveD-LightingMode', PrintConv => { 0 => 'Unchanged', 1 => 'Off', 2 => 'Low', 3 => 'Normal', 4 => 'High', 6 => 'Extra High', 7 => 'Extra High 1', 8 => 'Extra High 2', }, }, ); %Image::ExifTool::NikonCapture::HighlightData = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int8s', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0 => 'ShadowProtection', 1 => 'SaturationAdj', 6 => 'HighlightProtection', ); #------------------------------------------------------------------------------ # write Nikon Capture data (ref 1) # Inputs: 0) ExifTool object reference, 1) reference to directory information # 2) pointer to tag table # Returns: 1 on success sub WriteNikonCapture($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access to autoload this package # no need to edit this information unless necessary unless ($$et{EDIT_DIRS}{MakerNotes} or $$et{EDIT_DIRS}{IPTC}) { return undef; } my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart}; my $dirLen = $$dirInfo{DirLen}; if ($dirLen < 22) { $et->Warn('Short Nikon Capture Data',1); return undef; } # make sure the capture data is properly contained SetByteOrder('II'); my $tagID = Get32u($dataPt, $dirStart); # sometimes size includes 18 header bytes, and other times it doesn't (eg. ViewNX 2.1.1) my $size = Get32u($dataPt, $dirStart + 18); my $pad = $dirLen - $size - 18; unless ($tagID == 0x7a86a940 and ($pad >= 0 or $pad == -18)) { $et->Warn('Unrecognized Nikon Capture Data header'); return undef; } # determine if there is any data after this block if ($pad > 0) { $pad = substr($$dataPt, $dirStart + 18 + $size, $pad); $dirLen = $size + 18; } else { $pad = ''; } my $outBuff = ''; my $pos; my $newTags = $et->GetNewTagInfoHash($tagTablePtr); my $dirEnd = $dirStart + $dirLen; # loop through all entries in the Nikon Capture data for ($pos=$dirStart+22; $pos+22<$dirEnd; $pos+=22+$size) { $tagID = Get32u($dataPt, $pos); $size = Get32u($dataPt, $pos + 18) - 4; last if $size < 0 or $pos + 22 + $size > $dirEnd; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tagID); if ($tagInfo) { my $newVal; if ($$tagInfo{SubDirectory}) { # rewrite the subdirectory my %subdirInfo = ( DataPt => $dataPt, DirStart => $pos + 22, DirLen => $size, ); my $subTable = GetTagTable($tagInfo->{SubDirectory}->{TagTable}); # ignore minor errors in IPTC since there is typically trailing garbage my $oldSetting = $et->Options('IgnoreMinorErrors'); $$tagInfo{Name} =~ /IPTC/ and $et->Options(IgnoreMinorErrors => 1); # rewrite the directory $newVal = $et->WriteDirectory(\%subdirInfo, $subTable); # restore our original options $et->Options(IgnoreMinorErrors => $oldSetting); } elsif ($$newTags{$tagID}) { # get new value for this tag if we are writing it my $format = $$tagInfo{Format} || $$tagInfo{Writable}; my $oldVal = ReadValue($dataPt,$pos+22,$format,1,$size); my $nvHash = $et->GetNewValueHash($tagInfo); if ($et->IsOverwriting($nvHash, $oldVal)) { my $val = $et->GetNewValue($tagInfo); $newVal = WriteValue($val, $$tagInfo{Writable}) if defined $val; if (defined $newVal and length $newVal) { ++$$et{CHANGED}; } else { undef $newVal; $et->Warn("Can't delete $$tagInfo{Name}"); } } } if (defined $newVal) { next unless length $newVal; # don't write zero length information # write the new value $outBuff .= substr($$dataPt, $pos, 18); $outBuff .= Set32u(length($newVal) + 4); $outBuff .= $newVal; next; } } # rewrite the existing information $outBuff .= substr($$dataPt, $pos, 22 + $size); } unless ($pos == $dirEnd) { if ($pos == $dirEnd - 4) { # it seems that sometimes (NX2) the main block size is wrong by 4 bytes # (did they forget to include the size word?) $outBuff .= substr($$dataPt, $pos, 4); } else { $et->Warn('Nikon Capture Data improperly terminated',1); return undef; } } # add the header and return the new directory return substr($$dataPt, $dirStart, 18) . Set32u(length($outBuff) + 4) . $outBuff . $pad; } #------------------------------------------------------------------------------ # process Nikon Capture data (ref 1) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessNikonCaptureEditVersions($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart}; my $dirLen = $$dirInfo{DirLen}; my $dirEnd = $dirStart + $dirLen; my $verbose = $et->Options('Verbose'); SetByteOrder('II'); return 0 unless $dirLen > 4; my $num = Get32u($dataPt, $dirStart); my $pos = $dirStart + 4; $verbose and $et->VerboseDir('NikonCaptureEditVersions', $num); while ($num) { last if $pos + 4 > $dirEnd; my $len = Get32u($dataPt, $pos); last if $pos + $len + 4 > $dirEnd; my %dirInfo = ( DirName => 'NikonCapture', Parent => 'NikonCaptureEditVersions', DataPt => $dataPt, DirStart => $pos + 4, DirLen => $len, ); $$et{DOC_NUM} = ++$$et{DOC_COUNT}; $et->ProcessDirectory(\%dirInfo, $tagTablePtr); --$num; $pos += $len + 4; } delete $$et{DOC_NUM}; return 1; } #------------------------------------------------------------------------------ # process Nikon Capture data (ref 1) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessNikonCapture($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart}; my $dirLen = $$dirInfo{DirLen}; my $dirEnd = $dirStart + $dirLen; my $verbose = $et->Options('Verbose'); my $success = 0; SetByteOrder('II'); $verbose and $et->VerboseDir('NikonCapture', 0, $dirLen); my $pos; for ($pos=$dirStart+22; $pos+22<$dirEnd; ) { my $tagID = Get32u($dataPt, $pos); my $size = Get32u($dataPt, $pos + 18) - 4; $pos += 22; last if $size < 0 or $pos + $size > $dirEnd; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tagID); if ($tagInfo or $verbose) { my ($format, $value); # (note that Writable will be 0 for Unknown tags) $tagInfo and $format = ($$tagInfo{Format} || $$tagInfo{Writable}); # generate a reasonable default format type for short values if (not $format and ($size == 1 or $size == 2 or $size == 4)) { $format = 'int' . ($size * 8) . 'u'; } if ($format) { my $count = 1; if ($format eq 'string' or $format eq 'undef') { # patch Nikon bug in size of some values (HistogramXML) $size += $$tagInfo{AdjustSize} if $tagInfo and $$tagInfo{AdjustSize}; $count = $size; } $value = ReadValue($dataPt,$pos,$format,$count,$size); } elsif ($size == 1) { $value = substr($$dataPt, $pos, $size); } $et->HandleTag($tagTablePtr, $tagID, $value, DataPt => $dataPt, DataPos => $$dirInfo{DataPos}, Base => $$dirInfo{Base}, Start => $pos, Size => $size, ) and $success = 1; } $pos += $size; } return $success; } 1; # end __END__ =head1 NAME Image::ExifTool::NikonCapture - Read/write Nikon Capture information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains routines to read and write Nikon Capture information in the maker notes of NEF images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.cybercom.net/~dcoffin/dcraw/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/NikonCapture Tags>, L<Image::ExifTool::TagNames/Nikon Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/NikonCustom.pm����������������������������������������������000644 �000765 �000024 �00000541072 12642461322 022526� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: NikonCustom.pm # # Description: Read and write Nikon Custom settings # # Revisions: 2009/11/25 - P. Harvey Created # # References: 1) Warren Hatch private communication (D3 with SB-800 and SB-900) # 2) Anonymous contribution 2011/05/25 (D700, D7000) # JD) Jens Duttke private communication #------------------------------------------------------------------------------ package Image::ExifTool::NikonCustom; use strict; use vars qw($VERSION); $VERSION = '1.12'; # custom settings for the D80 (encrypted) - ref JD %Image::ExifTool::NikonCustom::SettingsD80 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Custom settings for the Nikon D80.', 0.1 => { # CS1 Name => 'Beep', Mask => 0x80, PrintConv => { 0x00 => 'On', 0x80 => 'Off', }, }, 0.2 => { # CS4 Name => 'AFAssist', Mask => 0x40, PrintConv => { 0x00 => 'On', 0x40 => 'Off', }, }, 0.3 => { # CS5 Name => 'NoMemoryCard', Mask => 0x20, PrintConv => { 0x00 => 'Release Locked', 0x20 => 'Enable Release', }, }, 0.4 => { # CS6 Name => 'ImageReview', Mask => 0x10, PrintConv => { 0x00 => 'On', 0x10 => 'Off', }, }, 0.5 => { # CS17 Name => 'Illumination', Mask => 0x08, PrintConv => { 0x00 => 'Off', 0x08 => 'On', }, }, 0.6 => { # CS11 Name => 'MainDialExposureComp', Mask => 0x04, PrintConv => { 0x00 => 'Off', 0x04 => 'On', }, }, 0.7 => { # CS10 Name => 'EVStepSize', Mask => 0x01, PrintConv => { 0x00 => '1/3 EV', 0x01 => '1/2 EV', }, }, 1.1 => { # CS7 Name => 'AutoISO', Mask => 0x40, PrintConv => { 0x00 => 'Off', 0x40 => 'On', }, }, 1.2 => { # CS7-a Name => 'AutoISOMax', Mask => 0x30, PrintConv => { 0x00 => 200, 0x10 => 400, 0x20 => 800, 0x30 => 1600, }, }, 1.3 => { # CS7-b Name => 'AutoISOMinShutterSpeed', Mask => 0x0f, PrintConvColumns => 2, PrintConv => { 0x00 => '1/125 s', 0x01 => '1/100 s', 0x02 => '1/80 s', 0x03 => '1/60 s', 0x04 => '1/40 s', 0x05 => '1/30 s', 0x06 => '1/15 s', 0x07 => '1/8 s', 0x08 => '1/4 s', 0x09 => '1/2 s', 0x0a => '1 s', }, }, 2.1 => { # CS13 Name => 'AutoBracketSet', Mask => 0xc0, PrintConv => { 0x00 => 'AE & Flash', 0x40 => 'AE Only', 0x80 => 'Flash Only', 0xc0 => 'WB Bracketing', }, }, 2.2 => { # CS14 Name => 'AutoBracketOrder', Mask => 0x20, PrintConv => { 0x00 => '0,-,+', 0x20 => '-,0,+', }, }, 3.1 => { # CS27 Name => 'MonitorOffTime', Mask => 0xe0, PrintConv => { 0x00 => '5 s', 0x20 => '10 s', 0x40 => '20 s', 0x60 => '1 min', 0x80 => '5 min', 0xa0 => '10 min', }, }, 3.2 => { # CS28 Name => 'MeteringTime', Mask => 0x1c, PrintConv => { 0x00 => '4 s', 0x04 => '6 s', 0x08 => '8 s', 0x0c => '16 s', 0x10 => '30 s', 0x14 => '30 min', }, }, 3.3 => { # CS29 Name => 'SelfTimerTime', Mask => 0x03, PrintConv => { 0x00 => '2 s', 0x01 => '5 s', 0x02 => '10 s', 0x03 => '20 s', }, }, 4.1 => { # CS18 Name => 'AELockButton', Mask => 0x1e, PrintConv => { 0x00 => 'AE/AF Lock', 0x02 => 'AE Lock Only', 0x04 => 'AF Lock Only', 0x06 => 'AE Lock (hold)', 0x08 => 'AF-ON', 0x0a => 'FV Lock', 0x0c => 'Focus Area Selection', 0x0e => 'AE-L/AF-L/AF Area', 0x10 => 'AE-L/AF Area', 0x12 => 'AF-L/AF Area', 0x14 => 'AF-ON/AF Area', }, }, 4.2 => { # CS19 Name => 'AELock', Mask => 0x01, PrintConv => { 0x00 => 'Off', 0x01 => 'On', }, }, 4.3 => { # CS30 Name => 'RemoteOnDuration', Mask => 0xc0, PrintConv => { 0x00 => '1 min', 0x40 => '5 min', 0x80 => '10 min', 0xc0 => '15 min', }, }, 5.1 => { # CS15 Name => 'CommandDials', Mask => 0x80, PrintConv => { 0x00 => 'Standard (Main Shutter, Sub Aperture)', 0x80 => 'Reversed (Main Aperture, Sub Shutter)', }, }, 5.2 => { # CS16 Name => 'FunctionButton', Mask => 0x78, PrintConv => { 0x00 => 'ISO Display', 0x08 => 'Framing Grid', 0x10 => 'AF-area Mode', 0x18 => 'Center AF Area', 0x20 => 'FV Lock', 0x28 => 'Flash Off', 0x30 => 'Matrix Metering', 0x38 => 'Center-weighted', 0x40 => 'Spot Metering', }, }, 6.1 => { # CS8 Name => 'GridDisplay', Mask => 0x80, PrintConv => { 0x00 => 'Off', 0x80 => 'On', }, }, 6.2 => { # CS9 Name => 'ViewfinderWarning', Mask => 0x40, PrintConv => { 0x00 => 'On', 0x40 => 'Off', }, }, 6.3 => { # CS12 Name => 'CenterWeightedAreaSize', Mask => 0x0c, PrintConv => { 0x00 => '6 mm', 0x04 => '8 mm', 0x08 => '10 mm', }, }, 6.4 => { # CS31 Name => 'ExposureDelayMode', Mask => 0x20, PrintConv => { 0x00 => 'Off', 0x20 => 'On', }, }, 6.5 => { # CS32 Name => 'MB-D80Batteries', Mask => 0x03, PrintConv => { 0x00 => 'LR6 (AA Alkaline)', 0x01 => 'HR6 (AA Ni-MH)', 0x02 => 'FR6 (AA Lithium)', 0x03 => 'ZR6 (AA Ni-Mg)', }, }, 7.1 => { # CS23 Name => 'FlashWarning', Mask => 0x80, PrintConv => { 0x00 => 'On', 0x80 => 'Off', }, }, 7.2 => { # CS24 Name => 'FlashShutterSpeed', Mask => 0x78, ValueConv => '2 ** (($val >> 3) - 6)', ValueConvInv => '$val>0 ? int(log($val)/log(2)+6+0.5) << 3 : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 7.3 => { # CS25 Name => 'AutoFP', Mask => 0x04, PrintConv => { 0x00 => 'Off', 0x04 => 'On', }, }, 7.4 => { # CS26 Name => 'ModelingFlash', Mask => 0x02, PrintConv => { 0x00 => 'Off', 0x02 => 'On', }, }, 8.1 => { # CS22 Name => 'InternalFlash', Mask => 0xc0, PrintConv => { 0x00 => 'TTL', 0x40 => 'Manual', 0x80 => 'Repeating Flash', 0xc0 => 'Commander Mode', }, }, 8.2 => { # CS22-a Name => 'ManualFlashOutput', Mask => 0x07, ValueConv => '2 ** (-$val)', ValueConvInv => '$val > 0 ? -log($val)/log(2) : 0', PrintConv => q{ return 'Full' if $val > 0.99; Image::ExifTool::Exif::PrintExposureTime($val); }, PrintConvInv => '$val=~/F/i ? 1 : Image::ExifTool::Exif::ConvertFraction($val)', }, 9.1 => { # CS22-b Name => 'RepeatingFlashOutput', Mask => 0x70, ValueConv => '2 ** (-($val>>4)-2)', ValueConvInv => '$val > 0 ? int(-log($val)/log(2)-2+0.5)<<4 : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 9.2 => { # CS22-c Name => 'RepeatingFlashCount', Mask => 0x0f, ValueConv => '$val < 10 ? $val + 1 : 5 * ($val - 7)', ValueConvInv => '$val <= 10 ? $val - 1 : $val / 5 + 7', }, 10.1 => { # CS22-d Name => 'RepeatingFlashRate', Mask => 0xf0, ValueConv => 'my $v=($val>>4); $v < 10 ? $v + 1 : 10 * ($v - 8)', ValueConvInv => 'int(($val <= 10 ? $val - 1 : $val / 10 + 8) + 0.5) << 4', PrintConv => '"$val Hz"', PrintConvInv => '$val=~/(\d+)/; $1 || 0', }, 10.2 => { # CS22-n Name => 'CommanderChannel', Mask => 0x03, ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 11.1 => { # CS22-e Name => 'CommanderInternalFlash', Mask => 0xc0, PrintConv => { 0x00 => 'TTL', 0x40 => 'Manual', 0x80 => 'Off', }, }, 11.2 => { # CS22-h Name => 'CommanderGroupAMode', Mask => 0x30, PrintConv => { 0x00 => 'TTL', 0x10 => 'Auto Aperture', 0x20 => 'Manual', 0x30 => 'Off', }, }, 11.3 => { # CS22-k Name => 'CommanderGroupBMode', Mask => 0x0c, PrintConv => { 0x00 => 'TTL', 0x04 => 'Auto Aperture', 0x08 => 'Manual', 0x0c => 'Off', }, }, 12.1 => { # CS22-f Name => 'CommanderInternalTTLComp', Mask => 0x1f, ValueConv => '($val - 9) / 3', ValueConvInv => '$val * 3 + 9', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, 12.2 => { # CS22-g Name => 'CommanderInternalManualOutput', Mask => 0xe0, ValueConv => '2 ** (-($val>>5))', ValueConvInv => '$val > 0 ? int(-log($val)/log(2)+0.5) << 5 : 0', PrintConv => q{ return 'Full' if $val > 0.99; Image::ExifTool::Exif::PrintExposureTime($val); }, PrintConvInv => '$val=~/F/i ? 1 : Image::ExifTool::Exif::ConvertFraction($val)', }, 13.1 => { # CS22-i Name => 'CommanderGroupA_TTL-AAComp', Mask => 0x1f, ValueConv => '($val - 9) / 3', ValueConvInv => '$val * 3 + 9', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, 13.2 => { # CS22-j Name => 'CommanderGroupAManualOutput', Mask => 0xe0, ValueConv => '2 ** (-($val>>5))', ValueConvInv => '$val > 0 ? int(-log($val)/log(2)+0.5) << 5 : 0', PrintConv => q{ return 'Full' if $val > 0.99; Image::ExifTool::Exif::PrintExposureTime($val); }, PrintConvInv => '$val=~/F/i ? 1 : Image::ExifTool::Exif::ConvertFraction($val)', }, 14.1 => { # CS22-l Name => 'CommanderGroupB_TTL-AAComp', Mask => 0x1f, ValueConv => '($val - 9) / 3', ValueConvInv => '$val * 3 + 9', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, 14.2 => { # CS22-m Name => 'CommanderGroupBManualOutput', Mask => 0xe0, ValueConv => '2 ** (-($val>>5))', ValueConvInv => '$val > 0 ? int(-log($val)/log(2)+0.5) << 5 : 0', PrintConv => q{ return 'Full' if $val > 0.99; Image::ExifTool::Exif::PrintExposureTime($val); }, PrintConvInv => '$val=~/F/i ? 1 : Image::ExifTool::Exif::ConvertFraction($val)', }, 15.1 => { # CS3 Name => 'CenterAFArea', Mask => 0x80, PrintConv => { 0x00 => 'Normal Zone', 0x80 => 'Wide Zone', }, }, 15.2 => { # CS20 Name => 'FocusAreaSelection', Mask => 0x04, PrintConv => { 0x00 => 'No Wrap', 0x04 => 'Wrap', }, }, 15.3 => { # CS21 Name => 'AFAreaIllumination', Mask => 0x03, PrintConv => { 0x00 => 'Auto', 0x01 => 'Off', 0x02 => 'On', }, }, 16.1 => { # CS2 Name => 'AFAreaModeSetting', Mask => 0xc0, PrintConv => { 0x00 => 'Single Area', 0x40 => 'Dynamic Area', 0x80 => 'Auto-area', }, }, ); # custom settings for the D40 (encrypted) - ref JD %Image::ExifTool::NikonCustom::SettingsD40 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Custom settings for the Nikon D40.', 0.1 => { # CS1 Name => 'Beep', Mask => 0x80, PrintConv => { 0x00 => 'On', 0x80 => 'Off', }, }, 0.2 => { # CS9 Name => 'AFAssist', Mask => 0x40, PrintConv => { 0x00 => 'On', 0x40 => 'Off', }, }, 0.3 => { # CS6 Name => 'NoMemoryCard', Mask => 0x20, PrintConv => { 0x00 => 'Release Locked', 0x20 => 'Enable Release', }, }, 0.4 => { # CS7 Name => 'ImageReview', Mask => 0x10, PrintConv => { 0x00 => 'On', 0x10 => 'Off', }, }, 1.1 => { # CS10-a Name => 'AutoISO', Mask => 0x80, PrintConv => { 0x00 => 'Off', 0x80 => 'On', }, }, 1.2 => { # CS10-b Name => 'AutoISOMax', Mask => 0x30, PrintConv => { 0x10 => 400, 0x20 => 800, 0x30 => 1600, }, }, 1.3 => { # CS10-c Name => 'AutoISOMinShutterSpeed', Mask => 0x07, PrintConvColumns => 2, PrintConv => { 0x00 => '1/125 s', 0x01 => '1/60 s', 0x02 => '1/30 s', 0x03 => '1/15 s', 0x04 => '1/8 s', 0x05 => '1/4 s', 0x06 => '1/2 s', 0x07 => '1 s', }, }, 2.1 => { # CS15-b Name => 'ImageReviewTime', Mask => 0x07, PrintConv => { 0x00 => '4 s', 0x01 => '8 s', 0x02 => '20 s', 0x03 => '1 min', 0x04 => '10 min', }, }, 3.1 => { # CS15-a Name => 'MonitorOffTime', Mask => 0xe0, PrintConv => { 0x00 => '4 s', 0x20 => '8 s', 0x40 => '20 s', 0x60 => '1 min', 0x80 => '10 min', }, }, 3.2 => { # CS15-c Name => 'MeteringTime', Mask => 0x1c, PrintConv => { 0x00 => '4 s', 0x04 => '8 s', 0x08 => '20 s', 0x0c => '1 min', 0x10 => '30 min', }, }, 3.3 => { # CS16 Name => 'SelfTimerTime', Mask => 0x03, PrintConv => { 0x00 => '2 s', 0x01 => '5 s', 0x02 => '10 s', 0x03 => '20 s', }, }, 3.4 => { # CS17 Name => 'RemoteOnDuration', Mask => 0xc0, PrintConv => { 0x00 => '1 min', 0x40 => '5 min', 0x80 => '10 min', 0xc0 => '15 min', }, }, 4.1 => { # CS12 Name => 'AELockButton', Mask => 0x0e, PrintConv => { 0x00 => 'AE/AF Lock', 0x02 => 'AE Lock Only', 0x04 => 'AF Lock Only', 0x06 => 'AE Lock (hold)', 0x08 => 'AF-ON', }, }, 4.2 => { # CS13 Name => 'AELock', Mask => 0x01, PrintConv => { 0x00 => 'Off', 0x01 => 'On', }, }, 5.1 => { # CS4 Name => 'ShootingModeSetting', Mask => 0x70, PrintConv => { 0x00 => 'Single Frame', 0x10 => 'Continuous', 0x20 => 'Self-timer', 0x30 => 'Delayed Remote', 0x40 => 'Quick-response Remote', }, }, 5.2 => { # CS11 Name => 'TimerFunctionButton', Mask => 0x07, PrintConv => { 0x00 => 'Shooting Mode', 0x01 => 'Image Quality/Size', 0x02 => 'ISO', 0x03 => 'White Balance', 0x04 => 'Self-timer', }, }, 6.1 => { # CS5 Name => 'Metering', Mask => 0x03, PrintConv => { 0x00 => 'Matrix', 0x01 => 'Center-weighted', 0x02 => 'Spot', }, }, 8.1 => { # CS14-a Name => 'InternalFlash', Mask => 0x10, PrintConv => { 0x00 => 'TTL', 0x10 => 'Manual', }, }, 8.2 => { # CS14-b Name => 'ManualFlashOutput', Mask => 0x07, ValueConv => '2 ** (-$val)', ValueConvInv => '$val > 0 ? -log($val)/log(2) : 0', PrintConv => q{ return 'Full' if $val > 0.99; Image::ExifTool::Exif::PrintExposureTime($val); }, PrintConvInv => '$val=~/F/i ? 1 : Image::ExifTool::Exif::ConvertFraction($val)', }, 9 => { # CS8 Name => 'FlashLevel', Format => 'int8s', ValueConv => '$val / 6', ValueConvInv => '$val * 6', PrintConv => 'sprintf("%+.1f",$val)', PrintConvInv => '$val', }, 10.1 => { # CS2 Name => 'FocusModeSetting', # (may differ from FocusMode if lens switch is set to Manual) Mask => 0xc0, PrintConv => { 0x00 => 'Manual', 0x40 => 'AF-S', 0x80 => 'AF-C', 0xc0 => 'AF-A', }, }, 11.1 => { # CS3 Name => 'AFAreaModeSetting', # (may differ from AFAreaMode for Manual focus) Mask => 0x30, PrintConv => { 0x00 => 'Single Area', 0x10 => 'Dynamic Area', 0x20 => 'Closest Subject', }, } ); # D90 custom settings (ref PH) %Image::ExifTool::NikonCustom::SettingsD90 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Custom settings for the D90.', # Missing: # CSe2 RepeatingFlashRate (needs verification) # CommanderInternalFlash, CommanderGroupAMode, CommanderGroupBMode, # CommanderChannel, CommanderInternalManualOutput, # CommanderGroupAManualOutput, CommanderGroupBManualOutput # CommanderGroupA_TTL-AAComp, CommanderGroupB_TTL-AAComp, # CSe4 AutoBracketSet (some values need verification) # CSf2 OKButton ("Not Used" value needs verification) # CSf5-b CommandDialsChangeMainSub # CSf5-c CommandDialsMenuAndPlayback 0.1 => { # CSf1 Name => 'LightSwitch', Mask => 0x08, PrintConv => { 0x00 => 'LCD Backlight', 0x08 => 'LCD Backlight and Shooting Information', }, }, 2.1 => { # CSa1 Name => 'AFAreaModeSetting', Mask => 0x60, PrintConv => { 0x00 => 'Single Area', 0x20 => 'Dynamic Area', 0x40 => 'Auto-area', 0x60 => '3D-tracking (11 points)', }, }, 2.2 => { # CSa2 Name => 'CenterFocusPoint', Mask => 0x10, PrintConv => { 0x00 => 'Normal Zone', 0x10 => 'Wide Zone', }, }, 2.3 => { # CSa3 Name => 'AFAssist', Mask => 0x01, PrintConv => { 0x00 => 'On', 0x01 => 'Off' }, }, 2.4 => { # CSa4 Name => 'AFPointIllumination', Mask => 0x06, PrintConv => { 0x00 => 'Auto', 0x02 => 'On', 0x04 => 'Off', }, }, 2.5 => { # CSa5 Name => 'FocusPointWrap', Mask => 0x08, PrintConv => { 0x00 => 'No Wrap', 0x08 => 'Wrap', }, }, 3.1 => { # CSa6 Name => 'AELockForMB-D80', Mask => 0x1c, PrintConv => { 0x00 => 'AE Lock Only', 0x04 => 'AF Lock Only', 0x08 => 'AE Lock (hold)', 0x0c => 'AF-On', 0x10 => 'FV Lock', 0x14 => 'Focus Point Selection', 0x1c => 'AE/AF Lock', }, }, 3.2 => { # CSd12 Name => 'MB-D80BatteryType', Mask => 0x03, PrintConv => { 0x00 => 'LR6 (AA alkaline)', 0x01 => 'HR6 (AA Ni-MH)', 0x02 => 'FR6 (AA lithium)', 0x03 => 'ZR6 (AA Ni-Mn)', }, }, 4.1 => { # CSd1 Name => 'Beep', Mask => 0x40, PrintConv => { 0x40 => 'On', 0x00 => 'Off', }, }, 4.2 => { # CSd2 Name => 'GridDisplay', Mask => 0x02, PrintConv => { 0x00 => 'Off', 0x02 => 'On' }, }, 4.3 => { # CSd3 Name => 'ISODisplay', Mask => 0x0c, PrintConv => { 0x00 => 'Show ISO/Easy ISO', 0x04 => 'Show ISO Sensitivity', 0x0c => 'Show Frame Count', }, }, 4.4 => { # CSd4 Name => 'ViewfinderWarning', Mask => 0x01, PrintConv => { 0x00 => 'On', 0x01 => 'Off' }, }, 4.5 => { # CSf6 Name => 'NoMemoryCard', Mask => 0x20, PrintConv => { 0x00 => 'Release Locked', 0x20 => 'Enable Release', }, }, 5.1 => { # CSd5 Name => 'ScreenTips', Mask => 0x04, PrintConv => { 0x00 => 'Off', 0x04 => 'On' }, }, 5.2 => { # CSd7 Name => 'FileNumberSequence', Mask => 0x08, PrintConv => { 0x00 => 'On', 0x08 => 'Off' }, }, 5.3 => { # CSd8 Name => 'ShootingInfoDisplay', Mask => 0xc0, PrintConv => { 0x00 => 'Auto', 0x80 => 'Manual (dark on light)', 0xc0 => 'Manual (light on dark)', }, }, 5.4 => { # CSd9 Name => 'LCDIllumination', Mask => 0x20, PrintConv => { 0x00 => 'Off', 0x20 => 'On' }, }, 6.1 => { # CSb2 Name => 'EasyExposureComp', Mask => 0x01, PrintConv => { 0x00 => 'Off', 0x01 => 'On' }, }, 6.2 => { # CSf7 Name => 'ReverseIndicators', Mask => 0x80, PrintConv => { 0x00 => '+ 0 -', 0x80 => '- 0 +', }, }, 7.1 => { # CSb1 Name => 'ExposureControlStepSize', Mask => 0x40, PrintConv => { 0x00 => '1/3 EV', 0x40 => '1/2 EV', }, }, 8.1 => { # CSb3 Name => 'CenterWeightedAreaSize', Mask => 0x60, PrintConv => { 0x00 => '6 mm', 0x20 => '8 mm', 0x40 => '10 mm', }, }, 8.2 => { # CSb4-a Name => 'FineTuneOptMatrixMetering', Mask => 0x0f, ValueConv => '($val > 0x7 ? $val - 0x10 : $val) / 6', ValueConvInv => 'int($val*6+($val>0?0.5:-0.5)) & 0x0f', PrintConv => '$val ? sprintf("%+.2f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 9.1 => { # CSb4-b Name => 'FineTuneOptCenterWeighted', Mask => 0xf0, ValueConv => '($val > 0x70 ? $val - 0x100 : $val) / 0x60', ValueConvInv => '(int($val*6+($val>0?0.5:-0.5))<<4) & 0xf0', PrintConv => '$val ? sprintf("%+.2f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 9.2 => { # CSb4-c Name => 'FineTuneOptSpotMetering', Mask => 0x0f, ValueConv => '($val > 0x7 ? $val - 0x10 : $val) / 6', ValueConvInv => 'int($val*6+($val>0?0.5:-0.5)) & 0x0f', PrintConv => '$val ? sprintf("%+.2f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 11.1 => { # CSd6 Name => 'CLModeShootingSpeed', Mask => 0x07, PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val', }, 11.2 => { # CSd10 Name => 'ExposureDelayMode', Mask => 0x40, PrintConv => { 0x00 => 'Off', 0x40 => 'On', }, }, 13.1 => { # CSe4 Name => 'AutoBracketSet', Mask => 0xe0, #(NC) PrintConv => { 0x00 => 'AE & Flash', # default 0x20 => 'AE Only', 0x40 => 'Flash Only', #(NC) 0x60 => 'WB Bracketing', #(NC) 0x80 => 'Active D-Lighting', #(NC) }, }, 13.2 => { # CSe6 Name => 'AutoBracketOrder', Mask => 0x10, PrintConv => { 0x00 => '0,-,+', 0x10 => '-,0,+', }, }, 14.1 => { # CSf3 Name => 'FuncButton', Mask => 0x78, PrintConv => { 0x08 => 'Framing Grid', 0x10 => 'AF-area Mode', 0x18 => 'Center Focus Point', 0x20 => 'FV Lock', # default 0x28 => 'Flash Off', 0x30 => 'Matrix Metering', 0x38 => 'Center-weighted Metering', 0x40 => 'Spot Metering', 0x48 => 'My Menu Top', 0x50 => '+ NEF (RAW)', }, }, 16.1 => { # CSf2 Name => 'OKButton', Mask => 0x18, PrintConv => { 0x08 => 'Select Center Focus Point', 0x10 => 'Highlight Active Focus Point', 0x18 => 'Not Used', #(NC) 0x00 => 'Not Used', #(NC) }, }, 17.1 => { # CSf4 Name => 'AELockButton', Mask => 0x38, PrintConv => { 0x00 => 'AE/AF Lock', 0x08 => 'AE Lock Only', 0x10 => 'AF Lock Only', #(NC) 0x18 => 'AE Lock (hold)', #(NC) 0x20 => 'AF-ON', #(NC) 0x28 => 'FV Lock', #(NC) }, }, 18.1 => { # CSf5-a Name => 'CommandDialsReverseRotation', Mask => 0x80, PrintConv => { 0x00 => 'No', 0x80 => 'Yes' }, }, 18.2 => { # CSc1 Name => 'ShutterReleaseButtonAE-L', Mask => 0x02, PrintConv => { 0x00 => 'Off', 0x02 => 'On' }, }, 19.1 => { # CSc2 Name => 'MeteringTime', Mask => 0xf0, PrintConvColumns => 2, PrintConv => { 0x00 => '4 s', 0x10 => '6 s', # default 0x20 => '8 s', 0x30 => '16 s', 0x40 => '30 s', 0x50 => '1 min', 0x60 => '5 min', 0x70 => '10 min', 0x80 => '30 min', }, }, 19.2 => { # CSc5 Name => 'RemoteOnDuration', Mask => 0x03, PrintConv => { 0x00 => '1 min', 0x01 => '5 min', 0x02 => '10 min', 0x03 => '15 min', }, }, 20.1 => { # CSc3-a Name => 'SelfTimerTime', Mask => 0xc0, PrintConv => { 0x00 => '2 s', 0x40 => '5 s', 0x80 => '10 s', # default 0xc0 => '20 s', }, }, 20.2 => { # CSc3-b Name => 'SelfTimerShotCount', Mask => 0x1e, ValueConv => '$val >> 1', ValueConvInv => '$val << 1', }, 21.1 => { # CSc4-a Name => 'PlaybackMonitorOffTime', Mask => 0x1c, PrintConv => { 0x00 => '4 s', 0x04 => '10 s', # default 0x08 => '20 s', 0x0c => '1 min', 0x10 => '5 min', 0x14 => '10 min', }, }, 21.2 => { # CSc4-d Name => 'ImageReviewTime', Mask => 0xe0, PrintConv => { 0x00 => '4 s', # default 0x20 => '10 s', 0x40 => '20 s', 0x60 => '1 min', 0x80 => '5 min', 0xa0 => '10 min', }, }, 22.1 => { # CSc4-b Name => 'MenuMonitorOffTime', Mask => 0xe0, PrintConv => { 0x00 => '4 s', 0x20 => '10 s', 0x40 => '20 s', # default 0x60 => '1 min', 0x80 => '5 min', 0xa0 => '10 min', }, }, 22.2 => { # CSc4-c Name => 'ShootingInfoMonitorOffTime', Mask => 0x1c, PrintConv => { 0x00 => '4 s', 0x04 => '10 s', # default 0x08 => '20 s', 0x0c => '1 min', 0x10 => '5 min', 0x14 => '10 min', }, }, 23.1 => { # CSe1 Name => 'FlashShutterSpeed', Mask => 0x0f, PrintConvColumns => 2, PrintConv => { 0x00 => '1/60 s', # default 0x01 => '1/30 s', 0x02 => '1/15 s', 0x03 => '1/8 s', 0x04 => '1/4 s', 0x05 => '1/2 s', 0x06 => '1 s', 0x07 => '2 s', 0x08 => '4 s', 0x09 => '8 s', 0x0a => '15 s', 0x0b => '30 s', }, }, 24.1 => { # CSe2-a Name => 'InternalFlash', Mask => 0xc0, PrintConv => { 0x00 => 'TTL', 0x40 => 'Manual', 0x80 => 'Repeating Flash', 0xc0 => 'Commander Mode', }, }, 24.2 => { # CSe2-b Name => 'ManualFlashOutput', Mask => 0x1f, ValueConv => '2 ** (-$val/3)', ValueConvInv => '$val > 0 ? -3*log($val)/log(2) : 0', PrintConv => q{ return 'Full' if $val > 0.99; Image::ExifTool::Exif::PrintExposureTime($val); }, PrintConvInv => '$val=~/F/i ? 1 : Image::ExifTool::Exif::ConvertFraction($val)', }, 25.1 => { # CSe2-ca Name => 'RepeatingFlashOutput', Mask => 0x70, ValueConv => '2 ** (-($val>>4)-2)', ValueConvInv => '$val > 0 ? int(-log($val)/log(2)-2+0.5)<<4 : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 25.2 => { # CSe2-cb Name => 'RepeatingFlashCount', Mask => 0x0f, ValueConv => '$val < 10 ? $val + 1 : 5 * ($val - 7)', ValueConvInv => '$val <= 10 ? $val - 1 : $val / 5 + 7', }, 26.1 => { # CSe2-cc (NC) Name => 'RepeatingFlashRate', Mask => 0xf0, ValueConv => 'my $v=($val>>4); $v < 10 ? $v + 1 : 10 * ($v - 8)', ValueConvInv => 'int(($val <= 10 ? $val - 1 : $val / 10 + 8) + 0.5) << 4', PrintConv => '"$val Hz"', PrintConvInv => '$val=~/(\d+)/; $1 || 0', }, 31.1 => { # CSd11 Name => 'FlashWarning', Mask => 0x80, PrintConv => { 0x00 => 'On', 0x80 => 'Off', }, }, 31.2 => { # CSe2-ea Name => 'CommanderInternalTTLComp', Mask => 0x1f, ValueConv => '($val - 9) / 3', ValueConvInv => '$val * 3 + 9', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, 31.3 => { # CSe3 Name => 'ModelingFlash', Mask => 0x20, PrintConv => { 0x00 => 'On', 0x20 => 'Off' }, }, 31.4 => { # CSe5 Name => 'AutoFP', Mask => 0x40, PrintConv => { 0x00 => 'Off', 0x40 => 'On', }, }, 32.1 => { # CSe2-eb Name => 'CommanderGroupA_TTLComp', Mask => 0x1f, ValueConv => '($val - 9) / 3', ValueConvInv => '$val * 3 + 9', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, 33.1 => { # CSe2-ec Name => 'CommanderGroupB_TTLComp', Mask => 0x1f, ValueConv => '($val - 9) / 3', ValueConvInv => '$val * 3 + 9', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, 34.1 => { # CSa7 Name => 'LiveViewAF', Mask => 0xc0, PrintConv => { 0x00 => 'Face Priority', #(NC) 0x40 => 'Wide Area', 0x80 => 'Normal Area', }, }, ); # D300 (ref JD) and D3 (ref 1/PH) custom settings %Image::ExifTool::NikonCustom::SettingsD3 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Custom settings for the D3, D3S, D3X, D300 and D300S.', # these settings have been decoded using the D3 and D300, and # extrapolated to the other models, but these haven't yet been # verified, and the following custom settings are missing: # CSf1-d (D3X,D3S) MultiSelectorLiveView # CSf1 (D300S) LightSwitch 0.1 => { #1 Name => 'CustomSettingsBank', Mask => 0x03, PrintConv => { 0 => 'A', 1 => 'B', 2 => 'C', 3 => 'D', }, }, 0.2 => { #1 Name => 'CustomSettingsAllDefault', Notes => '"No" if any custom setting for this bank was changed from the default', Mask => 0x80, PrintConv => { 0x00 => 'Yes', 0x80 => 'No' }, }, 1.1 => { # CSa1 Name => 'AF-CPrioritySelection', Mask => 0xc0, PrintConv => { 0x00 => 'Release', 0x40 => 'Release + Focus', 0x80 => 'Focus', }, }, 1.2 => { # CSa2 Name => 'AF-SPrioritySelection', Mask => 0x20, PrintConv => { 0x00 => 'Focus', 0x20 => 'Release', }, }, 1.3 => { # CSa8 Name => 'AFPointSelection', Mask => 0x10, PrintConv => { 0x00 => '51 Points', 0x10 => '11 Points', }, }, 1.4 => { # CSa3 Name => 'DynamicAFArea', Mask => 0x0c, PrintConv => { 0x00 => '9 Points', 0x04 => '21 Points', 0x08 => '51 Points', 0x0c => '51 Points (3D-tracking)', }, }, 1.5 => { # CSa4 Name => 'FocusTrackingLockOn', Condition => '$$self{Model} !~ /D3S\b/', Notes => 'not D3S', Mask => 0x03, PrintConv => { 0x00 => 'Long', 0x01 => 'Normal', 0x02 => 'Short', 0x03 => 'Off', }, }, 2.1 => { # CSa5 Name => 'AFActivation', Mask => 0x80, PrintConv => { 0x00 => 'Shutter/AF-On', 0x80 => 'AF-On Only', }, }, 2.2 => { # CSa7 Name => 'FocusPointWrap', Mask => 0x08, PrintConv => { 0x00 => 'No Wrap', 0x08 => 'Wrap', }, }, 2.3 => [ # CSa6 { Name => 'AFPointIllumination', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3', Mask => 0x60, PrintConv => { 0x00 => 'On in Continuous Shooting and Manual Focusing', 0x20 => 'On During Manual Focusing', 0x40 => 'On in Continuous Shooting Modes', 0x60 => 'Off', }, }, { Name => 'AFPointIllumination', Notes => 'D300', Mask => 0x06, PrintConv => { 0x00 => 'Auto', 0x02 => 'Off', 0x04 => 'On', }, }, ], 2.4 => { # CSa6-b (D3, added by firmware update) Name => 'AFPointBrightness', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3 only', Mask => 0x06, PrintConv => { 0x00 => 'Low', 0x02 => 'Normal', 0x04 => 'High', 0x06 => 'Extra High', }, }, 2.5 => { # CSa9 (D300) Name => 'AFAssist', Condition => '$$self{Model} =~ /D300S?\b/', Notes => 'D300 only', Mask => 0x01, PrintConv => { 0x00 => 'On', 0x01 => 'Off' }, }, 3.1 => { # CSa9 (D3) Name => 'AFOnButton', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3 only', Mask => 0x07, PrintConv => { 0 => 'AF On', 1 => 'AE/AF Lock', 2 => 'AE Lock Only', 3 => 'AE Lock (reset on release)', 4 => 'AE Lock (hold)', 5 => 'AF Lock Only', }, }, 3.2 => { # CSa10 (D3) Name => 'VerticalAFOnButton', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3 only', Mask => 0x70, PrintConv => { 0x00 => 'AF On', 0x10 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x30 => 'AE Lock (reset on release)', 0x40 => 'AE Lock (hold)', 0x50 => 'AF Lock Only', 0x70 => 'Same as AF On', }, }, 3.3 => { # CSa10 (D300) Name => 'AF-OnForMB-D10', Condition => '$$self{Model} =~ /D300S?\b/', Notes => 'D300 only', Mask => 0x70, PrintConv => { 0x00 => 'AF-On', 0x10 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x30 => 'AE Lock (reset on release)', 0x40 => 'AE Lock (hold)', 0x50 => 'AF Lock Only', 0x60 => 'Same as FUNC Button', }, }, 4.1 => { # CSa4 (D3S) Name => 'FocusTrackingLockOn', Condition => '$$self{Model} =~ /D3S\b/', Notes => 'D3S only', Mask => 0x07, PrintConv => { 0x00 => '5 (Long)', 0x01 => '4', 0x02 => '3 (Normal)', 0x03 => '2', 0x04 => '1 (Short)', 0x05 => 'Off', }, }, 4.2 => { # CSf7 (D3S) Name => 'AssignBktButton', Condition => '$$self{Model} =~ /D3S\b/', Notes => 'D3S only', Mask => 0x08, PrintConv => { 0x00 => 'Auto Bracketing', 0x08 => 'Multiple Exposure', }, }, 4.3 => { # CSf1-c (D3S) (ref 1) Name => 'MultiSelectorLiveView', Condition => '$$self{Model} =~ /D3S\b/', Notes => 'D3S only', Mask => 0xc0, PrintConv => { 0x00 => 'Reset', 0x40 => 'Zoom On/Off', 0x80 => 'Start Movie Recording', 0xc0 => 'Not Used', }, }, 4.4 => { # CSf1-c2 (D3S) (ref 1) Name => 'InitialZoomLiveView', Condition => '$$self{Model} =~ /D3S\b/', Notes => 'D3S only', Mask => 0x30, PrintConv => { 0x00 => 'Low Magnification', 0x10 => 'Medium Magnification', 0x20 => 'High Magnification', }, }, 6.1 => { # CSb1 Name => 'ISOStepSize', Mask => 0xc0, PrintConv => { 0x00 => '1/3 EV', 0x40 => '1/2 EV', 0x80 => '1 EV', }, }, 6.2 => { # CSb2 Name => 'ExposureControlStepSize', Mask => 0x30, PrintConv => { 0x00 => '1/3 EV', 0x10 => '1/2 EV', 0x20 => '1 EV', }, }, 6.3 => { # CSb3 Name => 'ExposureCompStepSize', Mask => 0x0c, PrintConv => { 0x00 => '1/3 EV', 0x04 => '1/2 EV', 0x08 => '1 EV', }, }, 6.4 => { # CSb4 Name => 'EasyExposureCompensation', Mask => 0x03, PrintConv => { 0x00 => 'Off', 0x01 => 'On', 0x02 => 'On (auto reset)', }, }, 7.1 => [ # CSb5 { Name => 'CenterWeightedAreaSize', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3', Mask => 0xe0, PrintConv => { 0x00 => '8 mm', 0x20 => '12 mm', 0x40 => '15 mm', 0x60 => '20 mm', 0x80 => 'Average', }, }, { Name => 'CenterWeightedAreaSize', Notes => 'D300', Mask => 0xe0, PrintConv => { 0x00 => '6 mm', 0x20 => '8 mm', 0x40 => '10 mm', 0x60 => '13 mm', 0x80 => 'Average', }, }, ], 7.2 => { # CSb6-b Name => 'FineTuneOptCenterWeighted', Mask => 0x0f, ValueConv => '($val > 0x7 ? $val - 0x10 : $val) / 6', ValueConvInv => 'int($val*6+($val>0?0.5:-0.5)) & 0x0f', PrintConv => '$val ? sprintf("%+.2f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 8.1 => { # CSb6-a Name => 'FineTuneOptMatrixMetering', Mask => 0xf0, ValueConv => '($val > 0x70 ? $val - 0x100 : $val) / 0x60', ValueConvInv => '(int($val*6+($val>0?0.5:-0.5))<<4) & 0xf0', PrintConv => '$val ? sprintf("%+.2f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 8.2 => { # CSb6-c Name => 'FineTuneOptSpotMetering', Mask => 0x0f, ValueConv => '($val > 0x7 ? $val - 0x10 : $val) / 6', ValueConvInv => 'int($val*6+($val>0?0.5:-0.5)) & 0x0f', PrintConv => '$val ? sprintf("%+.2f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 9.1 => { # CSf1-a, CSf2-a (D300S) Name => 'MultiSelectorShootMode', Mask => 0xc0, PrintConv => { 0x00 => 'Select Center Focus Point', 0x40 => 'Highlight Active Focus Point', 0x80 => 'Not Used', }, }, 9.2 => { # CSf1-b, CSf2-b (D300S) Name => 'MultiSelectorPlaybackMode', Condition => '$$self{Model} !~ /D3S\b/', Notes => 'all models except D3S', # (not confirmed for D3X) Mask => 0x30, PrintConv => { 0x00 => 'Thumbnail On/Off', 0x10 => 'View Histograms', 0x20 => 'Zoom On/Off', 0x30 => 'Choose Folder', }, }, 9.3 => [ # CSf1-b2, CSf2-b2 (D300S) { Name => 'InitialZoomSetting', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3', Mask => 0x0c, PrintConv => { #1 0x00 => 'High Magnification', 0x04 => 'Medium Magnification', 0x08 => 'Low Magnification', }, }, { Name => 'InitialZoomSetting', Notes => 'D300', Mask => 0x0c, PrintConv => { #JD 0x00 => 'Low Magnification', 0x04 => 'Medium Magnification', 0x08 => 'High Magnification', }, }, ], 9.4 => { # CSf2 (D300,D3), CSf3 (D300S) Name => 'MultiSelector', Mask => 0x01, PrintConv => { 0x00 => 'Do Nothing', 0x01 => 'Reset Meter-off Delay', }, }, 10.1 => { # CSd9 (D300,D3S), CSd10 (D300S), CSd8 (D3) Name => 'ExposureDelayMode', Mask => 0x40, PrintConv => { 0x00 => 'Off', 0x40 => 'On' }, }, 10.2 => { # CSd4 (D300), CDs5 (D300S), CSd2-a (D3) Name => 'CLModeShootingSpeed', Mask => 0x07, PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val', }, 10.3 => { # (D3 CSd2-b) Name => 'CHModeShootingSpeed', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3 only', Mask => 0x30, PrintConv => { 0x00 => '9 fps', 0x10 => '10 fps', 0x20 => '11 fps', }, }, 11 => { # CSd5 (D300), CSd6 (D300S), CSd3 (D3) Name => 'MaxContinuousRelease', # values: 1-100 (D300), 1-130 (D3) }, 12.1 => { # CSf10, CSf11 (D3S,D300S) Name => 'ReverseIndicators', Mask => 0x20, PrintConv => { 0x00 => '+ 0 -', 0x20 => '- 0 +', }, }, 12.2 => [ # CSd6 (D300), CSd7 (D300S), CSd4 (D3) { Name => 'FileNumberSequence', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3', Mask => 0x02, PrintConv => { 0x00 => 'On', 0x02 => 'Off' }, }, { Name => 'FileNumberSequence', Notes => 'D300', Mask => 0x08, PrintConv => { 0x00 => 'On', 0x08 => 'Off' }, }, ], 12.3 => { # CSd5-a (D3) Name => 'RearDisplay', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3 only', Mask => 0x80, PrintConv => { 0x00 => 'ISO', 0x80 => 'Exposures Remaining', }, }, 12.4 => { # CSd5-b (D3) Name => 'ViewfinderDisplay', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3 only', Mask => 0x40, PrintConv => { 0x00 => 'Frame Count', 0x40 => 'Exposures Remaining', }, }, 12.5 => { # CSd11 (D300), CSd12 (D300S) Name => 'BatteryOrder', Condition => '$$self{Model} =~ /D300S?\b/', Notes => 'D300 only', Mask => 0x04, PrintConv => { 0x00 => 'MB-D10 First', 0x04 => 'Camera Battery First', }, }, 12.6 => { # CSd10 (D300), CSd11 (D300S) Name => 'MB-D10Batteries', Condition => '$$self{Model} =~ /D300S?\b/', Notes => 'D300 only', Mask => 0x03, PrintConv => { 0x00 => 'LR6 (AA alkaline)', 0x01 => 'HR6 (AA Ni-MH)', 0x02 => 'FR6 (AA lithium)', 0x03 => 'ZR6 (AA Ni-Mn)', }, }, 12.7 => { # CSd7 (D3S), CSd4, (D300S) Name => 'ScreenTips', Condition => '$$self{Model} =~ /(D3S|D300S)\b/', Mask => 0x10, PrintConv => { 0x00 => 'On', 0x10 => 'Off', }, }, 13.1 => { # CSd1 Name => 'Beep', Mask => 0xc0, PrintConv => { 0x00 => 'High', 0x40 => 'Low', 0x80 => 'Off', }, }, 13.2 => { # CSd7 (D300), CSd8 (D300S), CSd6 (D3) Name => 'ShootingInfoDisplay', Mask => 0x30, PrintConv => { 0x00 => 'Auto', #JD (D300) 0x10 => 'Auto', #1 (D3) 0x20 => 'Manual (dark on light)', 0x30 => 'Manual (light on dark)', }, }, 13.3 => { # CSd2 (D300) Name => 'GridDisplay', Condition => '$$self{Model} =~ /D300S?\b/', Notes => 'D300 only', Mask => 0x02, PrintConv => { 0x00 => 'Off', 0x02 => 'On' }, }, 13.4 => { # CSd3 (D300) Name => 'ViewfinderWarning', Condition => '$$self{Model} =~ /D300S?\b/', Notes => 'D300 only', Mask => 0x01, PrintConv => { 0x00 => 'On', 0x01 => 'Off' }, }, 13.5 => { # CSf1-b (D3S) (ref 1) Name => 'MultiSelectorPlaybackMode', Condition => '$$self{Model} =~ /D3S\b/', Notes => 'D3S only', Mask => 0x03, PrintConv => { 0x00 => 'Thumbnail On/Off', 0x01 => 'View Histograms', 0x02 => 'Zoom On/Off', }, }, 14.1 => [ # CSf5-a (ref 1), CSf6-a (D300S) { Name => 'PreviewButton', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3', Mask => 0xf8, PrintConv => { 0x00 => 'None', 0x08 => 'Preview', 0x10 => 'FV Lock', 0x18 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x28 => 'AE Lock (reset on release)', 0x30 => 'AE Lock (hold)', 0x38 => 'AF Lock Only', 0x40 => 'Flash Off', 0x48 => 'Bracketing Burst', 0x50 => 'Matrix Metering', 0x58 => 'Center-weighted Metering', 0x60 => 'Spot Metering', 0x68 => 'Virtual Horizon', # 0x70 not used 0x78 => 'Playback', 0x80 => 'My Menu Top', }, }, { #PH Name => 'FuncButton', Notes => 'D300', Mask => 0xf8, PrintConv => { 0x00 => 'None', 0x08 => 'Preview', 0x10 => 'FV Lock', 0x18 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x28 => 'AE Lock (reset on release)', 0x30 => 'AE Lock (hold)', 0x38 => 'AF Lock Only', # 0x40 not used 0x48 => 'Flash Off', 0x50 => 'Bracketing Burst', 0x58 => 'Matrix Metering', 0x60 => 'Center-weighted Metering', 0x68 => 'Spot Metering', 0x70 => 'Playback', #PH (guess) 0x78 => 'My Menu Top', #PH (guess) 0x80 => '+ NEF (RAW)', #PH (guess) }, }, ], 14.2 => [ # CSf5-b (PH,NC), CSf6-b (D300S) { Name => 'PreviewButtonPlusDials', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3', Mask => 0x07, PrintConv => { 0 => 'None', 1 => 'Choose Image Area (FX/DX/5:4)', 2 => 'One Step Speed/Aperture', 3 => 'Choose Non-CPU Lens Number', # n/a 4 => 'Focus Point Selection', 5 => 'Choose Image Area (FX/DX)', 6 => 'Shooting Bank Menu', 7 => 'Dynamic AF Area', #PH (D3S,D3X,NC) }, }, { #PH Name => 'FuncButtonPlusDials', Notes => 'D300', Mask => 0x07, PrintConv => { 0 => 'None', 2 => 'One Step Speed/Aperture', 3 => 'Choose Non-CPU Lens Number', 5 => 'Auto Bracketing', 6 => 'Dynamic AF Area', }, }, ], 15.1 => [ # CSf4-a (ref 1), CSf5-a (D300S) { Name => 'FuncButton', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3', Mask => 0xf8, PrintConv => { 0x00 => 'None', 0x08 => 'Preview', 0x10 => 'FV Lock', 0x18 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x28 => 'AE Lock (reset on release)', 0x30 => 'AE Lock (hold)', 0x38 => 'AF Lock Only', 0x40 => 'Flash Off', 0x48 => 'Bracketing Burst', 0x50 => 'Matrix Metering', 0x58 => 'Center-weighted Metering', 0x60 => 'Spot Metering', 0x68 => 'Virtual Horizon', # 0x70 not used 0x78 => 'Playback', 0x80 => 'My Menu Top', }, }, { #PH Name => 'PreviewButton', Notes => 'D300', Mask => 0xf8, PrintConv => { 0x00 => 'None', 0x08 => 'Preview', 0x10 => 'FV Lock', 0x18 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x28 => 'AE Lock (reset on release)', 0x30 => 'AE Lock (hold)', 0x38 => 'AF Lock Only', # 0x40 not used 0x48 => 'Flash Off', 0x50 => 'Bracketing Burst', 0x58 => 'Matrix Metering', 0x60 => 'Center-weighted Metering', 0x68 => 'Spot Metering', 0x70 => 'Playback', #PH (guess) 0x78 => 'My Menu Top', #PH (guess) 0x80 => '+ NEF (RAW)', #PH (guess) }, }, ], 15.2 => [ # CSf4-b (ref 1), CSf5-b (D300S) { Name => 'FuncButtonPlusDials', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3', Mask => 0x07, PrintConv => { 0 => 'None', 1 => 'Choose Image Area (FX/DX/5:4)', 2 => 'One Step Speed/Aperture', 3 => 'Choose Non-CPU Lens Number', 4 => 'Focus Point Selection', #(NC) 5 => 'Choose Image Area (FX/DX)', 6 => 'Shooting Bank Menu', 7 => 'Dynamic AF Area', #PH (D3S,D3X,NC) }, }, { #PH Name => 'PreviewButtonPlusDials', Notes => 'D300', Mask => 0x07, PrintConv => { 0 => 'None', 2 => 'One Step Speed/Aperture', 3 => 'Choose Non-CPU Lens Number', 5 => 'Auto Bracketing', 6 => 'Dynamic AF Area', }, }, ], 16.1 => [ # CSf6-a (ref 1), CSf7-a (D300S) { Name => 'AELockButton', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3', Mask => 0xf8, PrintConv => { 0x00 => 'None', 0x08 => 'Preview', 0x10 => 'FV Lock', 0x18 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x28 => 'AE Lock (reset on release)', 0x30 => 'AE Lock (hold)', 0x38 => 'AF Lock Only', 0x40 => 'Flash Off', 0x48 => 'Bracketing Burst', 0x50 => 'Matrix Metering', 0x58 => 'Center-weighted Metering', 0x60 => 'Spot Metering', 0x68 => 'Virtual Horizon', 0x70 => 'AF On', # (AE-L/AF-L button only) 0x78 => 'Playback', 0x80 => 'My Menu Top', }, }, { #PH Name => 'AELockButton', Notes => 'D300', Mask => 0xf8, PrintConv => { 0x00 => 'None', 0x08 => 'Preview', 0x10 => 'FV Lock', 0x18 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x28 => 'AE Lock (reset on release)', 0x30 => 'AE Lock (hold)', 0x38 => 'AF Lock Only', 0x40 => 'AF On', # (AE-L/AF-L button only) 0x48 => 'Flash Off', 0x50 => 'Bracketing Burst', 0x58 => 'Matrix Metering', 0x60 => 'Center-weighted Metering', 0x68 => 'Spot Metering', 0x70 => 'Playback', #PH (guess) 0x78 => 'My Menu Top', #PH (guess) 0x80 => '+ NEF (RAW)', #PH (guess) }, }, ], 16.2 => [ # CSf6-b (ref 1), CSf7-b (D300S) { Name => 'AELockButtonPlusDials', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3', Mask => 0x07, PrintConv => { 0 => 'None', 1 => 'Choose Image Area (FX/DX/5:4)', 2 => 'One Step Speed/Aperture', 3 => 'Choose Non-CPU Lens Number', # n/c 4 => 'Focus Point Selection', #(NC) 5 => 'Choose Image Area (FX/DX)', 6 => 'Shooting Bank Menu', 7 => 'Dynamic AF Area', #PH (D3S,D3X,NC) }, }, { #PH Name => 'AELockButtonPlusDials', Notes => 'D300', Mask => 0x07, PrintConv => { 0 => 'None', # n/a 2 => 'One Step Speed/Aperture', 3 => 'Choose Non-CPU Lens Number', 5 => 'Auto Bracketing', #(NC) 6 => 'Dynamic AF Area', }, }, ], 17.1 => { # CSf7-a, CSf8-a (D3S,D300S) Name => 'CommandDialsReverseRotation', Mask => 0x80, PrintConv => { 0x00 => 'No', 0x80 => 'Yes' }, }, 17.2 => { # CSf7-b, CSf8-b (D3S,D300S) Name => 'CommandDialsChangeMainSub', Mask => 0x40, PrintConv => { 0x00 => 'Off', 0x40 => 'On' }, }, 17.3 => { # CSf7-c, CSf8-c (D3S,D300S) Name => 'CommandDialsApertureSetting', Mask => 0x20, PrintConv => { 0x00 => 'Sub-command Dial', 0x20 => 'Aperture Ring', }, }, 17.4 => { # CSf7-d, CSf8-d (D3S,D300S) Name => 'CommandDialsMenuAndPlayback', Mask => 0x10, PrintConv => { 0x00 => 'Off', 0x10 => 'On' }, }, 17.5 => { # CSd8 (D300,D3S), CSd9 (D300S), CSd7 (D3) Name => 'LCDIllumination', Mask => 0x08, PrintConv => { 0x00 => 'Off', 0x08 => 'On' }, }, 17.6 => { # CSf3, CSf4 (D300S) Name => 'PhotoInfoPlayback', Mask => 0x04, PrintConv => { 0x00 => 'Info Up-down, Playback Left-right', 0x04 => 'Info Left-right, Playback Up-down', }, }, 17.7 => { # CSc1 Name => 'ShutterReleaseButtonAE-L', Mask => 0x02, PrintConv => { 0x00 => 'Off', 0x02 => 'On' }, }, 17.8 => { # CSf8, CSf9 (D3S,D300S) Name => 'ReleaseButtonToUseDial', Mask => 0x01, PrintConv => { 0x00 => 'No', 0x01 => 'Yes' }, }, 18.1 => { # CSc3 Name => 'SelfTimerTime', Mask => 0x18, PrintConv => { 0x00 => '2 s', 0x08 => '5 s', 0x10 => '10 s', 0x18 => '20 s', }, }, 18.2 => { # CSc4 Name => 'MonitorOffTime', # NOTE: The D3S and D300S have separate settings for Playback, # Image Review, Menus, and Information Display times Mask => 0x07, PrintConv => { 0x00 => '10 s', 0x01 => '20 s', 0x02 => '1 min', 0x03 => '5 min', 0x04 => '10 min', }, }, 20.1 => [ # CSe1 { Name => 'FlashSyncSpeed', Condition => '$$self{Model} =~ /D3[SX]?\b/', Notes => 'D3', Mask => 0xe0, PrintConv => { 0x00 => '1/250 s (auto FP)', 0x20 => '1/250 s', 0x40 => '1/200 s', 0x60 => '1/160 s', 0x80 => '1/125 s', 0xa0 => '1/100 s', 0xc0 => '1/80 s', 0xe0 => '1/60 s', }, }, { Name => 'FlashSyncSpeed', Notes => 'D300', Mask => 0xf0, PrintConv => { 0x00 => '1/320 s (auto FP)', 0x10 => '1/250 s (auto FP)', 0x20 => '1/250 s', 0x30 => '1/200 s', 0x40 => '1/160 s', 0x50 => '1/125 s', 0x60 => '1/100 s', 0x70 => '1/80 s', 0x80 => '1/60 s', }, }, ], 20.2 => { # CSe2 Name => 'FlashShutterSpeed', Mask => 0x0f, PrintConvColumns => 2, PrintConv => { 0x00 => '1/60 s', 0x01 => '1/30 s', 0x02 => '1/15 s', 0x03 => '1/8 s', 0x04 => '1/4 s', 0x05 => '1/2 s', 0x06 => '1 s', 0x07 => '2 s', 0x08 => '4 s', 0x09 => '8 s', 0x0a => '15 s', 0x0b => '30 s', }, }, 21.1 => [{ # CSe5 (D300), CSe4 (D3) Name => 'AutoBracketSet', Condition => '$$self{Model} !~ /(D3S|D300S)\b/', Notes => 'D3 and D300', Mask => 0xc0, PrintConv => { 0x00 => 'AE & Flash', 0x40 => 'AE Only', 0x80 => 'Flash Only', 0xc0 => 'WB Bracketing', }, },{ # CSe4 (D3S) (NC for D300S) Name => 'AutoBracketSet', Notes => 'D3S and D300S', Mask => 0xe0, PrintConv => { 0x00 => 'AE & Flash', 0x20 => 'AE Only', 0x40 => 'Flash Only', 0x60 => 'WB Bracketing', # D3S/D300S have an "ADL Bracketing" setting - PH 0x80 => 'ADL Bracketing', }, }], 21.2 => [{ # CSe6 (D300), CSe5 (D3) Name => 'AutoBracketModeM', Condition => '$$self{Model} !~ /(D3S|D300S)\b/', Notes => 'D3 and D300', Mask => 0x30, PrintConv => { 0x00 => 'Flash/Speed', 0x10 => 'Flash/Speed/Aperture', 0x20 => 'Flash/Aperture', 0x30 => 'Flash Only', }, },{ # CSe5 (D3S) Name => 'AutoBracketModeM', Notes => 'D3S and D300S', Mask => 0x18, PrintConv => { 0x00 => 'Flash/Speed', 0x08 => 'Flash/Speed/Aperture', 0x10 => 'Flash/Aperture', 0x18 => 'Flash Only', }, }], 21.3 => [{ # CSe7 (D300), CSe6 (D3) Name => 'AutoBracketOrder', Condition => '$$self{Model} !~ /(D3S|D300S)\b/', Notes => 'D3 and D300', Mask => 0x08, PrintConv => { 0x00 => '0,-,+', 0x08 => '-,0,+', }, },{ # CSe6 (D3S) Name => 'AutoBracketOrder', Notes => 'D3S and D300S', Mask => 0x04, PrintConv => { 0x00 => '0,-,+', 0x04 => '-,0,+', }, }], 21.4 => { # CSe4 (D300), CSe3 (D3) Name => 'ModelingFlash', Mask => 0x01, PrintConv => { 0x00 => 'On', 0x01 => 'Off' }, }, 22.1 => { # CSf9, CSf10 (D3S,D300S) Name => 'NoMemoryCard', Mask => 0x80, PrintConv => { 0x00 => 'Release Locked', 0x80 => 'Enable Release', }, }, 22.2 => { # CSc2 Name => 'MeteringTime', Mask => 0x0f, PrintConvColumns => 2, PrintConv => { 0x00 => '4 s', 0x01 => '6 s', 0x02 => '8 s', 0x03 => '16 s', 0x04 => '30 s', 0x05 => '1 min', 0x06 => '5 min', 0x07 => '10 min', 0x08 => '30 min', 0x09 => 'No Limit', }, }, 23.1 => { # CSe3 Name => 'InternalFlash', Mask => 0xc0, PrintConv => { 0x00 => 'TTL', 0x40 => 'Manual', 0x80 => 'Repeating Flash', 0xc0 => 'Commander Mode', }, }, 25.1 => { #1 CSc4-d (D3S) Name => 'ImageReviewTime', Mask => 0xe0, PrintConv => { 0x00 => '4 s', 0x20 => '10 s', 0x40 => '20 s', 0x60 => '1 min', 0x80 => '5 min', 0xa0 => '10 min', }, }, 25.2 => { #1 CSc4-a (D3S) Name => 'PlaybackMonitorOffTime', Mask => 0x1c, PrintConv => { 0x00 => '4 s', 0x04 => '10 s', 0x08 => '20 s', 0x0c => '1 min', 0x10 => '5 min', 0x14 => '10 min', }, }, 26.1 => { #1 CSc4-b (D3S) Name => 'MenuMonitorOffTime', Mask => 0xe0, PrintConv => { 0x00 => '4 s', 0x20 => '10 s', 0x40 => '20 s', 0x60 => '1 min', 0x80 => '5 min', 0xa0 => '10 min', }, }, 26.2 => { #1 CSc4-c (D3S) Name => 'ShootingInfoMonitorOffTime', Mask => 0x1c, PrintConv => { 0x00 => '4 s', 0x04 => '10 s', 0x08 => '20 s', 0x0c => '1 min', 0x10 => '5 min', 0x14 => '10 min', }, }, ); # D700 custom settings (ref 2) %Image::ExifTool::NikonCustom::SettingsD700 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, DATAMEMBER => [ 16.1 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Custom settings for the D700.', 0.1 => { #1 Name => 'CustomSettingsBank', Mask => 0x03, PrintConv => { 0 => 'A', 1 => 'B', 2 => 'C', 3 => 'D', }, }, 0.2 => { #1 Name => 'CustomSettingsAllDefault', Notes => '"No" if any custom setting for this bank was changed from the default', Mask => 0x80, PrintConv => { 0x00 => 'Yes', 0x80 => 'No' }, }, 1.1 => { # CSa1 Name => 'AF-CPrioritySelection', Mask => 0xc0, PrintConv => { 0x00 => 'Release', 0x40 => 'Release + Focus', 0x80 => 'Focus', }, }, 1.2 => { # CSa2 Name => 'AF-SPrioritySelection', Mask => 0x20, PrintConv => { 0x00 => 'Focus', 0x20 => 'Release', }, }, 1.3 => { # CSa8 Name => 'AFPointSelection', Mask => 0x10, PrintConv => { 0x00 => '51 Points', 0x10 => '11 Points', }, }, 1.4 => { # CSa3 Name => 'DynamicAFArea', Mask => 0x0c, PrintConv => { 0x00 => '9 Points', 0x04 => '21 Points', 0x08 => '51 Points', 0x0c => '51 Points (3D-tracking)', }, }, 2.1 => { # CSa5 Name => 'AFActivation', Mask => 0x80, PrintConv => { 0x00 => 'Shutter/AF-On', 0x80 => 'AF-On Only', }, }, 2.2 => { # CSa7 Name => 'FocusPointWrap', Mask => 0x08, PrintConv => { 0x00 => 'No Wrap', 0x08 => 'Wrap', }, }, 2.3 => { # CSa6 Name => 'AFPointIllumination', Mask => 0x06, PrintConv => { 0x00 => 'Auto', 0x02 => 'Off', 0x04 => 'On', }, }, 2.4 => { # CSa9 Name => 'AFAssist', Mask => 0x01, PrintConv => { 0x00 => 'On', 0x01 => 'Off' }, }, 3.1 => { # CSa4 Name => 'FocusTrackingLockOn', Mask => 0x07, PrintConv => { 0x00 => '3 Normal', 0x01 => '4', 0x02 => '5 Long', 0x03 => '2', 0x04 => '1 Short', 0x05 => 'Off', }, }, 3.2 => { # CSa10 Name => 'AF-OnForMB-D10', Mask => 0x70, PrintConv => { 0x00 => 'AF-On', 0x10 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x30 => 'AE Lock (reset on release)', 0x40 => 'AE Lock (hold)', 0x50 => 'AF Lock Only', 0x60 => 'Same as FUNC Button', }, }, 4.1 => { # CSb1 Name => 'ISOStepSize', Mask => 0xc0, PrintConv => { 0x00 => '1/3 EV', 0x40 => '1/2 EV', 0x80 => '1 EV', }, }, 4.2 => { # CSb2 Name => 'ExposureControlStepSize', Mask => 0x30, PrintConv => { 0x00 => '1/3 EV', 0x10 => '1/2 EV', 0x20 => '1 EV', }, }, 4.3 => { # CSb3 Name => 'ExposureCompStepSize', Mask => 0x0c, PrintConv => { 0x00 => '1/3 EV', 0x04 => '1/2 EV', 0x08 => '1 EV', }, }, 4.4 => { # CSb4 Name => 'EasyExposureCompensation', Mask => 0x03, PrintConv => { 0x00 => 'Off', 0x01 => 'On', 0x02 => 'On (auto reset)', }, }, 5.1 => { # CSb5 Name => 'CenterWeightedAreaSize', Mask => 0x70, PrintConv => { 0x00 => '8 mm', 0x10 => '12 mm', 0x20 => '15 mm', 0x30 => '20 mm', 0x40 => 'Average', }, }, 6.1 => { # CSb6-a Name => 'FineTuneOptMatrixMetering', Mask => 0xf0, ValueConv => '($val > 0x70 ? $val - 0x100 : $val) / 0x60', ValueConvInv => '(int($val*6+($val>0?0.5:-0.5))<<4) & 0xf0', PrintConv => '$val ? sprintf("%+.2f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 6.2 => { # CSb6-c Name => 'FineTuneOptSpotMetering', Mask => 0x0f, ValueConv => '($val > 0x7 ? $val - 0x10 : $val) / 6', ValueConvInv => 'int($val*6+($val>0?0.5:-0.5)) & 0x0f', PrintConv => '$val ? sprintf("%+.2f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 7.1 => { # CSc1 Name => 'ShutterReleaseButtonAE-L', Mask => 0x80, PrintConv => { 0x00 => 'Off', 0x80 => 'On' }, }, 7.2 => { # CSc3 Name => 'SelfTimerTime', Mask => 0x30, PrintConv => { 0x00 => '2 s', 0x10 => '5 s', 0x20 => '10 s', 0x30 => '20 s', }, }, 7.3 => { # CSc2 Name => 'MeteringTime', Mask => 0x0f, PrintConvColumns => 2, PrintConv => { 0x00 => '4 s', 0x01 => '6 s', 0x02 => '8 s', 0x03 => '16 s', 0x04 => '30 s', 0x05 => '1 min', 0x06 => '5 min', 0x07 => '10 min', 0x08 => '30 min', 0x09 => 'No Limit', }, }, 8.1 => { # CSc4-a Name => 'PlaybackMonitorOffTime', Mask => 0x38, PrintConv => { 0x00 => '4 s', 0x08 => '10 s', 0x10 => '20 s', 0x18 => '1 min', 0x20 => '5 min', 0x28 => '10 min', }, }, 8.2 => { # CSc4-b Name => 'MenuMonitorOffTime', Mask => 0x07, PrintConv => { 0x00 => '4 s', 0x01 => '10 s', 0x02 => '20 s', 0x03 => '1 min', 0x04 => '5 min', 0x05 => '10 min', }, }, 9.1 => { # CSc4-c Name => 'ShootingInfoMonitorOffTime', Mask => 0x38, PrintConv => { 0x00 => '4 s', 0x08 => '10 s', 0x10 => '20 s', 0x18 => '1 min', 0x20 => '5 min', 0x28 => '10 min', }, }, 9.2 => { # CSc4-d Name => 'ImageReviewTime', Mask => 0x07, PrintConv => { 0x00 => '4 s', 0x01 => '10 s', 0x02 => '20 s', 0x03 => '1 min', 0x04 => '5 min', 0x05 => '10 min', }, }, 10.1 => { # CSd1 Name => 'Beep', Mask => 0xc0, PrintConv => { 0x00 => 'High', 0x40 => 'Low', 0x80 => 'Off', }, }, 10.2 => { # CSd7 Name => 'ShootingInfoDisplay', Mask => 0x30, PrintConv => { 0x00 => 'Auto', #JD (D300) 0x10 => 'Auto', #1 (D3) 0x20 => 'Manual (dark on light)', 0x30 => 'Manual (light on dark)', }, }, 10.3 => { # CSd8 Name => 'LCDIllumination', Mask => 0x08, PrintConv => { 0x00 => 'Off', 0x08 => 'On' }, }, 10.4 => { # CSd9 Name => 'ExposureDelayMode', Mask => 0x04, PrintConv => { 0x00 => 'Off', 0x04 => 'On' }, }, 10.5 => { # CSd2 Name => 'GridDisplay', Mask => 0x02, PrintConv => { 0x00 => 'Off', 0x02 => 'On' }, }, 11.1 => { # CSd6 Name => 'FileNumberSequence', Mask => 0x40, PrintConv => { 0x00 => 'On', 0x40 => 'Off' }, }, 11.2 => { # CSd4 Name => 'CLModeShootingSpeed', Mask => 0x07, PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val', }, 12 => { # CSd5 Name => 'MaxContinuousRelease', # values: 1-100 }, 13.1 => { # CSd3 Name => 'ScreenTips', Mask => 0x08, PrintConv => { 0x08 => 'On', 0x00 => 'Off' }, }, 13.2 => { # CSd11 Name => 'BatteryOrder', Mask => 0x04, PrintConv => { 0x00 => 'MB-D10 First', 0x04 => 'Camera Battery First', }, }, 13.3 => { # CSd10 Name => 'MB-D10BatteryType', Mask => 0x03, PrintConv => { 0x00 => 'LR6 (AA alkaline)', 0x01 => 'HR6 (AA Ni-MH)', 0x02 => 'FR6 (AA lithium)', 0x03 => 'ZR6 (AA Ni-Mn)', }, }, 15.1 => { # CSe1 Name => 'FlashSyncSpeed', Mask => 0xf0, PrintConv => { 0x00 => '1/320 s (auto FP)', 0x10 => '1/250 s (auto FP)', 0x20 => '1/250 s', 0x30 => '1/200 s', 0x40 => '1/160 s', 0x50 => '1/125 s', 0x60 => '1/100 s', 0x70 => '1/80 s', 0x80 => '1/60 s', }, }, 15.2 => { # CSe2 Name => 'FlashShutterSpeed', Mask => 0x0f, PrintConvColumns => 2, PrintConv => { 0x00 => '1/60 s', 0x01 => '1/30 s', 0x02 => '1/15 s', 0x03 => '1/8 s', 0x04 => '1/4 s', 0x05 => '1/2 s', 0x06 => '1 s', 0x07 => '2 s', 0x08 => '4 s', 0x09 => '8 s', 0x0a => '15 s', 0x0b => '30 s', }, }, 16.1 => { # CSe3 Name => 'FlashControlBuilt-in', # Note If set the Manual, Repeating Flash, Commander Mode # does not decode the detail settings. Mask => 0xc0, RawConv => '$$self{FlashControlBuiltin} = $val', PrintConv => { 0x00 => 'TTL', 0x40 => 'Manual', 0x80 => 'Repeating Flash', 0xc0 => 'Commander Mode', }, }, 16.2 => { # CSe3-b Name => 'ManualFlashOutput', Condition => '$$self{FlashControlBuiltin} == 0x40', Mask => 0x1f, ValueConv => '2 ** (-$val/3)', ValueConvInv => '$val > 0 ? -3*log($val)/log(2) : 0', PrintConv => q{ return 'Full' if $val > 0.99; Image::ExifTool::Exif::PrintExposureTime($val); }, PrintConvInv => '$val=~/F/i ? 1 : Image::ExifTool::Exif::ConvertFraction($val)', }, 17.1 => { # CSe3-ca Name => 'RepeatingFlashOutput', Condition => '$$self{FlashControlBuiltin} == 0x80', Mask => 0x70, ValueConv => '2 ** (-($val>>4)-2)', ValueConvInv => '$val > 0 ? int(-log($val)/log(2)-2+0.5)<<4 : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 17.2 => { # CSe3-cb Name => 'RepeatingFlashCount', Condition => '$$self{FlashControlBuiltin} == 0x80', Mask => 0x0f, ValueConv => '$val < 10 ? $val + 1 : 5 * ($val - 7)', ValueConvInv => '$val <= 10 ? $val - 1 : $val / 5 + 7', }, 18.1 => { # CSe3-cc (NC) Name => 'RepeatingFlashRate', Condition => '$$self{FlashControlBuiltin} == 0x80', Mask => 0xf0, ValueConv => 'my $v=($val>>4); $v < 10 ? $v + 1 : 10 * ($v - 8)', ValueConvInv => 'int(($val <= 10 ? $val - 1 : $val / 10 + 8) + 0.5) << 4', PrintConv => '"$val Hz"', PrintConvInv => '$val=~/(\d+)/; $1 || 0', }, 18.2 => { # CSe3-dd Name => 'CommanderInternalTTLChannel', Condition => '$$self{FlashControlBuiltin} == 0xc0', Mask => 0x03, PrintConv => { 0x00 => '1 ch', 0x01 => '2 ch', 0x02 => '3 ch', 0x03 => '4 ch', }, }, 20.1 => { # CSe3-da Name => 'CommanderInternalTTLCompBuiltin', Condition => '$$self{FlashControlBuiltin} == 0xc0', Mask => 0x1f, ValueConv => '($val - 9) / 3', ValueConvInv => '$val * 3 + 9', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, 21.1 => { # CSe3-db Name => 'CommanderInternalTTLCompGroupA', Condition => '$$self{FlashControlBuiltin} == 0xc0', Mask => 0x1f, ValueConv => '($val - 9) / 3', ValueConvInv => '$val * 3 + 9', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, 22.1 => { # CSe3-dc Name => 'CommanderInternalTTLCompGroupB', Condition => '$$self{FlashControlBuiltin} == 0xc0', Mask => 0x1f, ValueConv => '($val - 9) / 3', ValueConvInv => '$val * 3 + 9', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, 26.1 => { # CSe5 Name => 'AutoBracketSet', Mask => 0xc0, PrintConv => { 0x00 => 'AE & Flash', 0x40 => 'AE Only', 0x80 => 'Flash Only', 0xc0 => 'WB Bracketing', }, }, 26.2 => { # CSe6 Name => 'AutoBracketModeM', Mask => 0x30, PrintConv => { 0x00 => 'Flash/Speed', 0x10 => 'Flash/Speed/Aperture', 0x20 => 'Flash/Aperture', 0x30 => 'Flash Only', }, }, 26.3 => { # CSe7 Name => 'AutoBracketOrder', Mask => 0x08, PrintConv => { 0x00 => '0,-,+', 0x08 => '-,0,+', }, }, 26.4 => { # CSe4 Name => 'ModelingFlash', Mask => 0x01, PrintConv => { 0x00 => 'On', 0x01 => 'Off' }, }, 27.1 => { # CSf2-a Name => 'MultiSelectorShootMode', Mask => 0xc0, PrintConv => { 0x00 => 'Select Center Focus Point', 0x40 => 'Highlight Active Focus Point', 0x80 => 'Not Used', }, }, 27.2 => { # CSf2-b Name => 'MultiSelectorPlaybackMode', Mask => 0x30, PrintConv => { 0x00 => 'Thumbnail On/Off', 0x10 => 'View Histograms', 0x20 => 'Zoom On/Off', 0x30 => 'Choose Folder', }, }, 27.3 => { # CSf2-b2 Name => 'InitialZoomSetting', Mask => 0x0c, PrintConv => { #1 0x00 => 'Low Magnification', 0x04 => 'Medium Magnification', 0x08 => 'High Magnification', }, }, 27.4 => { # CSf3 Name => 'MultiSelector', Mask => 0x01, PrintConv => { 0x00 => 'Do Nothing', 0x01 => 'Reset Meter-off Delay', }, }, 28.1 => { # CSf5-a Name => 'FuncButton', Mask => 0xf8, PrintConv => { 0x00 => 'None', 0x08 => 'Preview', 0x10 => 'FV Lock', 0x18 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x28 => 'AE Lock (reset on release)', 0x30 => 'AE Lock (hold)', 0x38 => 'AF Lock Only', # 0x40 not used 0x48 => 'Flash Off', 0x50 => 'Bracketing Burst', 0x58 => 'Matrix Metering', 0x60 => 'Center-weighted Metering', 0x68 => 'Spot Metering', 0x70 => 'My Menu Top', 0x78 => 'Live View', 0x80 => '+ NEF (RAW)', 0x88 => 'Virtual Horizon', }, }, 29.1 => { # CSf6-a Name => 'PreviewButton', Mask => 0xf8, PrintConv => { 0x00 => 'None', 0x08 => 'Preview', 0x10 => 'FV Lock', 0x18 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x28 => 'AE Lock (reset on release)', 0x30 => 'AE Lock (hold)', 0x38 => 'AF Lock Only', 0x40 => 'AF-ON', 0x48 => 'Flash Off', 0x50 => 'Bracketing Burst', 0x58 => 'Matrix Metering', 0x60 => 'Center-weighted Metering', 0x68 => 'Spot Metering', 0x70 => 'My Menu Top', 0x78 => 'Live View', 0x80 => '+ NEF (RAW)', 0x88 => 'Virtual Horizon', }, }, 30.1 => { # CSf7-a Name => 'AELockButton', Notes => 'D300', Mask => 0xf8, PrintConv => { 0x00 => 'None', 0x08 => 'Preview', 0x10 => 'FV Lock', 0x18 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x28 => 'AE Lock (reset on release)', 0x30 => 'AE Lock (hold)', 0x38 => 'AF Lock Only', 0x40 => 'AF-ON', 0x48 => 'Flash Off', 0x50 => 'Bracketing Burst', 0x58 => 'Matrix Metering', 0x60 => 'Center-weighted Metering', 0x68 => 'Spot Metering', 0x70 => 'My Menu Top', 0x78 => 'Live View', 0x80 => '+ NEF (RAW)', 0x88 => 'Virtual Horizon', }, }, 31.1 => { # CSf5-b Name => 'FuncButtonPlusDials', Mask => 0x70, PrintConv => { 0x00 => 'None', 0x10 => 'Choose Image Area', 0x20 => 'One Step Speed/Aperture', 0x30 => 'Choose Non-CPU Lens Number', # n/a 0x40 => 'Focus Point Selection', 0x50 => 'Auto bracketing', 0x60 => 'Dynamic AF Area', 0x70 => 'Shutter speed & Aperture lock', }, }, 31.2 => { # CSf6-b Name => 'PreviewButtonPlusDials', Mask => 0x07, PrintConv => { 0x00 => 'None', 0x01 => 'Choose Image Area', 0x02 => 'One Step Speed/Aperture', 0x03 => 'Choose Non-CPU Lens Number', # n/a 0x04 => 'Focus Point Selection', 0x05 => 'Auto bracketing', 0x06 => 'Dynamic AF Area', 0x07 => 'Shutter speed & Aperture lock', }, }, 32.1 => { # CSf7-b Name => 'AELockButtonPlusDials', Mask => 0x70, PrintConv => { 0x00 => 'None', 0x10 => 'Choose Image Area', 0x20 => 'One Step Speed/Aperture', 0x30 => 'Choose Non-CPU Lens Number', # n/a 0x40 => 'Focus Point Selection', 0x50 => 'Auto bracketing', 0x60 => 'Dynamic AF Area', 0x70 => 'Shutter speed & Aperture lock', }, }, 33.1 => { # CSf9-a Name => 'CommandDialsReverseRotation', Mask => 0x80, PrintConv => { 0x00 => 'No', 0x80 => 'Yes' }, }, 33.2 => { # CSf9-b Name => 'CommandDialsChangeMainSub', Mask => 0x40, PrintConv => { 0x00 => 'Off', 0x40 => 'On' }, }, 33.3 => { # CSf9-c Name => 'CommandDialsApertureSetting', Mask => 0x20, PrintConv => { 0x00 => 'Sub-command Dial', 0x20 => 'Aperture Ring', }, }, 33.4 => { # CSf9-d Name => 'CommandDialsMenuAndPlayback', Mask => 0x10, PrintConv => { 0x00 => 'Off', 0x10 => 'On' }, }, 33.5 => { # CSf12 Name => 'ReverseIndicators', Mask => 0x08, PrintConv => { 0x00 => '+ 0 -', 0x08 => '- 0 +', }, }, 33.6 => { # CSf4 Name => 'PhotoInfoPlayback', Mask => 0x04, PrintConv => { 0x00 => 'Off', 0x04 => 'On' }, }, 33.7 => { # CSf11 Name => 'NoMemoryCard', Mask => 0x02, PrintConv => { 0x00 => 'Release Locked', 0x02 => 'Enable Release', }, }, 33.8 => { # CSf10 Name => 'ReleaseButtonToUseDial', Mask => 0x01, PrintConv => { 0x00 => 'No', 0x01 => 'Yes' }, }, ); # D800 custom settings (ref PH) %Image::ExifTool::NikonCustom::SettingsD800 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, DATAMEMBER => [ 23.1 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Custom settings for the D800 and D800E.', 12.1 => { # CSe5 Name => 'AutoBracketingSet', Mask => 0xe0, #(NC) PrintConv => { 0x00 => 'AE & Flash', # default 0x20 => 'AE Only', #(NC) 0x40 => 'Flash Only', 0x60 => 'WB Bracketing', #(NC) 0x80 => 'Active D-Lighting', #(NC) }, }, 12.2 => { # CSe7 Name => 'AutoBracketOrder', Mask => 0x10, PrintConv => { 0x00 => '0,-,+', 0x10 => '-,0,+', }, }, 12.3 => { # CSe6 Name => 'AutoBracketingMode', Mask => 0x0c, PrintConv => { 0x00 => 'Flash/Speed', 0x04 => 'Flash/Speed/Aperture', 0x08 => 'Flash/Aperture', 0x0c => 'Flash Only', }, }, # 21 - 100 (MaxContinuousRelease?) 22.1 => { # CSe1 Name => 'FlashSyncSpeed', Mask => 0xf0, PrintConv => { 0x00 => '1/320 s (auto FP)', 0x10 => '1/250 s (auto FP)', 0x20 => '1/250 s', 0x30 => '1/200 s', 0x40 => '1/160 s', 0x50 => '1/125 s', 0x60 => '1/100 s', 0x70 => '1/80 s', 0x80 => '1/60 s', }, }, 22.2 => { # CSe2 Name => 'FlashShutterSpeed', Mask => 0x0f, PrintConvColumns => 2, PrintConv => { 0x00 => '1/60 s', 0x01 => '1/30 s', 0x02 => '1/15 s', 0x03 => '1/8 s', 0x04 => '1/4 s', 0x05 => '1/2 s', 0x06 => '1 s', 0x07 => '2 s', 0x08 => '4 s', 0x09 => '8 s', 0x0a => '15 s', 0x0b => '30 s', }, }, 23.1 => { # CSe3 Name => 'FlashControlBuilt-in', Mask => 0xc0, RawConv => '$$self{FlashControlBuiltin} = $val', PrintConv => { 0x00 => 'TTL', 0x40 => 'Manual', 0x80 => 'Repeating Flash', 0xc0 => 'Commander Mode', }, }, 23.2 => { # CSe3-b Name => 'ManualFlashOutput', Condition => '$$self{FlashControlBuiltin} == 0x40', Mask => 0x1f, ValueConv => '2 ** (-$val/3)', ValueConvInv => '$val > 0 ? -3*log($val)/log(2) : 0', PrintConv => q{ return 'Full' if $val > 0.99; Image::ExifTool::Exif::PrintExposureTime($val); }, PrintConvInv => '$val=~/F/i ? 1 : Image::ExifTool::Exif::ConvertFraction($val)', }, 24.1 => { # CSe3-ca Name => 'RepeatingFlashOutput', Condition => '$$self{FlashControlBuiltin} == 0x80', Mask => 0x70, ValueConv => '2 ** (-($val>>4)-2)', ValueConvInv => '$val > 0 ? int(-log($val)/log(2)-2+0.5)<<4 : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 24.2 => { # CSe3-cb Name => 'RepeatingFlashCount', Condition => '$$self{FlashControlBuiltin} == 0x80', Mask => 0x0f, ValueConv => '$val < 10 ? $val + 1 : 5 * ($val - 7)', ValueConvInv => '$val <= 10 ? $val - 1 : $val / 5 + 7', }, 25.1 => { # CSe3-cc Name => 'RepeatingFlashRate', Condition => '$$self{FlashControlBuiltin} == 0x80', Mask => 0xf0, ValueConv => 'my $v=($val>>4); $v < 10 ? $v + 1 : 10 * ($v - 8)', ValueConvInv => 'int(($val <= 10 ? $val - 1 : $val / 10 + 8) + 0.5) << 4', PrintConv => '"$val Hz"', PrintConvInv => '$val=~/(\d+)/; $1 || 0', }, 25.2 => { # CSe3 Name => 'CommanderChannel', Mask => 0x03, ValueConv => '$val + 1', ValueConvInv => '$val - 1', }, 27.1 => { # CSe3 Name => 'CommanderInternalFlash', Mask => 0xc0, PrintConv => { 0x00 => 'TTL', 0x40 => 'Manual', 0x80 => 'Off', }, }, 27.2 => { # CSe3 Name => 'CommanderInternalManualOutput', Mask => 0x1f, ValueConv => '2 ** (-$val/3)', ValueConvInv => '$val > 0 ? int(-log($val)/log(2) * 3 + 0.5): 0', PrintConv => q{ return 'Full' if $val > 0.99; Image::ExifTool::Exif::PrintExposureTime($val); }, PrintConvInv => '$val=~/F/i ? 1 : Image::ExifTool::Exif::ConvertFraction($val)', }, 28.1 => { # CSe3 Name => 'CommanderGroupAMode', Mask => 0xc0, PrintConv => { 0x00 => 'TTL', 0x40 => 'Auto Aperture', 0x80 => 'Manual', 0xc0 => 'Off', }, }, 28.2 => { # CSe3 Name => 'CommanderGroupAManualOutput', Mask => 0x1f, ValueConv => '2 ** (-$val/3)', ValueConvInv => '$val > 0 ? int(-log($val)/log(2) * 3 + 0.5): 0', PrintConv => q{ return 'Full' if $val > 0.99; Image::ExifTool::Exif::PrintExposureTime($val); }, PrintConvInv => '$val=~/F/i ? 1 : Image::ExifTool::Exif::ConvertFraction($val)', }, 29.1 => { # CSe3 Name => 'CommanderGroupBMode', Mask => 0xc0, PrintConv => { 0x00 => 'TTL', 0x40 => 'Auto Aperture', 0x80 => 'Manual', 0xc0 => 'Off', }, }, 29.2 => { # CSe3 Name => 'CommanderGroupBManualOutput', Mask => 0x1f, ValueConv => '2 ** (-$val/3)', ValueConvInv => '$val > 0 ? int(-log($val)/log(2) * 3 + 0.5): 0', PrintConv => q{ return 'Full' if $val > 0.99; Image::ExifTool::Exif::PrintExposureTime($val); }, PrintConvInv => '$val=~/F/i ? 1 : Image::ExifTool::Exif::ConvertFraction($val)', }, 30.1 => { # CSe4 Name => 'ModelingFlash', Mask => 0x20, PrintConv => { 0x00 => 'On', 0x20 => 'Off' }, }, 30.2 => { # CSe3 Name => 'CommanderInternalTTLComp', Mask => 0x1f, ValueConv => '($val - 9) / 3', ValueConvInv => '$val * 3 + 9', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, 31.1 => { # CSe3 Name => 'CommanderGroupA_TTL-AAComp', Mask => 0x1f, ValueConv => '($val - 9) / 3', ValueConvInv => '$val * 3 + 9', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, 32.1 => { # CSe3 Name => 'CommanderGroupB_TTL-AAComp', Mask => 0x1f, ValueConv => '($val - 9) / 3', ValueConvInv => '$val * 3 + 9', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, # 47 - related to flash ); # D810 custom settings (ref 1) %Image::ExifTool::NikonCustom::SettingsD810 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, DATAMEMBER => [ 24.1 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Custom settings for the D810', 0.1 => { # CSf1 Name => 'LightSwitch', Mask => 0x08, PrintConv => { 0x00 => 'LCD Backlight', 0x08 => 'LCD Backlight and Shooting Information', }, }, 0.2 => { Name => 'CustomSettingsBank', Mask => 0x03, PrintConv => { 0 => 'A', 1 => 'B', 2 => 'C', 3 => 'D', }, }, 1.1 => { #CSa1 Name => 'AF-CPrioritySelection', Mask => 0xc0, PrintConv => { 0x00 => 'Release', 0x40 => 'Release + Focus', 0x80 => 'Focus', }, }, 1.2 => { # CSa2 Name => 'AF-SPrioritySelection', Mask => 0x20, PrintConv => { 0x00 => 'Focus', 0x20 => 'Release', }, }, 1.3 => { # CSa7 Name => 'AFPointSelection', Mask => 0x10, PrintConv => { 0x00 => '51 Points', 0x10 => '11 Points', }, }, 1.4 => { # CSa3 Name => 'FocusTrackingLockOn', Mask => 0x07, PrintConv => { 0x00 => 'Off', 0x01 => '1 (Short)', 0x02 => '2', 0x03 => '3 (Normal)', 0x04 => '4', 0x05 => '5 (Long)', }, }, 2.1 => { # CSa4 Name => 'AFActivation', Mask => 0x80, PrintConv => { 0x00 => 'Shutter/AF-On', 0x80 => 'AF-On Only', }, }, 2.2 => { # CSa7 Name => 'FocusPointWrap', Mask => 0x08, PrintConv => { 0x00 => 'No Wrap', 0x08 => 'Wrap', }, }, 2.3 => { # CSa6 Name => 'AFPointBrightness', Mask => 0x06, PrintConv => { 0x00 => 'Auto', 0x02 => 'On', 0x04 => 'Off', }, }, 2.4 => { # CSa10 Name => 'AFAssist', Mask => 0x01, PrintConv => { 0x00 => 'On', 0x01 => 'Off', }, }, 3.1 => { # CSd13 Name => 'BatteryOrder', Mask => 0x40, PrintConv => { 0x00 => 'MB-D12 First', 0x40 => 'Camera Battery First', }, }, 3.2 => { # CSd12 Name => 'MB-D12BatteryType', Mask => 0x03, PrintConv => { 0x00 => 'LR6 (AA alkaline)', 0x01 => 'HR6 (AA Ni-MH)', 0x02 => 'FR6 (AA lithium)', }, }, 4.1 => { # CSd1-b Name => 'Pitch', Mask => 0x40, PrintConv => { 0x00 => 'High', 0x40 => 'Low' }, }, 4.2 => { # CSf11 Name => 'NoMemoryCard', Mask => 0x20, PrintConv => { 0x00 => 'Release Locked', 0x20 => 'Enable Release', }, }, 4.3 => { # CSd8 Name => 'ISODisplay', Mask => 0x0c, PrintConv => { 0x00 => 'Show ISO/Easy ISO', 0x04 => 'Show ISO Sensitivity', 0x0c => 'Show Frame Count', }, }, 4.4 => { # CSd7 Name => 'GridDisplay', Mask => 0x02, PrintConv => { 0x00 => 'On', 0x02 => 'Off' }, }, 5.1 => { # CSd10 Name => 'ShootingInfoDisplay', Mask => 0xc0, PrintConv => { 0x00 => 'Not Set', # observed on a new camera prior to applying a setting for the first time 0x40 => 'Auto', 0x80 => 'Manual (dark on light)', 0xc0 => 'Manual (light on dark)', }, }, 5.2 => { # CSd11 Name => 'LCDIllumination', Mask => 0x20, PrintConv => { 0x00 => 'Off', 0x20 => 'On' }, }, 5.3 => { # CSd5 Name => 'ElectronicFront-CurtainShutter', Mask => 0x08, PrintConv => { 0x00 => 'Off', 0x08 => 'On' }, }, 5.4 => { # CSd9 Name => 'ScreenTips', Mask => 0x04, PrintConv => { 0x00 => 'Off', 0x04 => 'On' }, }, 5.5 => { # CSd1-a Name => 'Beep', Mask => 0x03, PrintConv => { 0x00 => 'Off', 0x01 => 'Low', 0x02 => 'Medium', 0x03 => 'High', }, }, 6.1 => { # CSf12 Name => 'ReverseIndicators', Mask => 0x80, PrintConv => { 0x00 => '+ 0 -', 0x80 => '- 0 +', }, }, 6.2 => { # CSf9-a Name => 'CommandDialsReverseRotation', Mask => 0x18, PrintConv => { 0x00 => 'No', 0x08 => 'Shutter Speed & Aperture', 0x10 => 'Exposure Compensation', 0x18 => 'Exposure Compensation, Shutter Speed & Aperture', }, }, 6.3 => { # CSb4 Name => 'EasyExposureCompensation', Mask => 0x03, PrintConv => { 0x00 => 'Off', 0x01 => 'On', 0x02 => 'On (auto reset)', }, }, 7.1 => { # CSb2 Name => 'ExposureControlStepSize', Mask => 0xc0, PrintConv => { 0x00 => '1/3 EV', 0x40 => '1/2 EV', 0x80 => '1 EV', }, }, 7.2 => { # CSb1 Name => 'ISOStepSize', Mask => 0x30, PrintConv => { 0x00 => '1/3 EV', 0x10 => '1/2 EV', 0x20 => '1 EV', }, }, 7.3 => { # CSb3 Name => 'ExposureCompStepSize', Mask => 0x0c, PrintConv => { 0x00 => '1/3 EV', 0x04 => '1/2 EV', 0x08 => '1 EV', }, }, 8.1 => { # CSb6 Name => 'CenterWeightedAreaSize', Mask => 0xe0, PrintConv => { 0x00 => '8 mm', 0x20 => '12 mm', 0x40 => '15 mm', 0x60 => '20 mm', 0x80 => 'Average', }, }, 8.2 => { # CSb7-a Name => 'FineTuneOptMatrixMetering', Mask => 0x0f, ValueConv => '($val > 0x7 ? $val - 0x10 : $val) / 6', ValueConvInv => 'int($val*6+($val>0?0.5:-0.5)) & 0x0f', PrintConv => '$val ? sprintf("%+.2f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 9.1 => { # CSb7-b Name => 'FineTuneOptCenterWeighted', Mask => 0xf0, ValueConv => '($val > 0x70 ? $val - 0x100 : $val) / 0x60', ValueConvInv => '(int($val*6+($val>0?0.5:-0.5))<<4) & 0xf0', PrintConv => '$val ? sprintf("%+.2f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 9.2 => { # CSb7-c Name => 'FineTuneOptSpotMetering', Mask => 0x0f, ValueConv => '($val > 0x7 ? $val - 0x10 : $val) / 6', ValueConvInv => 'int($val*6+($val>0?0.5:-0.5)) & 0x0f', PrintConv => '$val ? sprintf("%+.2f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 10.1 => { # CSf2-a Name => 'MultiSelectorShootMode', Mask => 0xc0, PrintConv => { 0x00 => 'Select Center Focus Point (Reset)', 0x40 => 'Highlight Active Focus Point', 0x80 => 'Preset Focus Point (Pre)', 0xc0 => 'Not Used (None)', }, }, 10.2 => { # CSf2-b Name => 'MultiSelectorPlaybackMode', Mask => 0x30, PrintConv => { 0x00 => 'Thumbnail On/Off', 0x10 => 'View Histograms', 0x20 => 'Zoom On/Off', 0x30 => 'Choose Folder', }, }, 10.3 => { # CSf3 Name => 'MultiSelector', Mask => 0x01, PrintConv => { 0x00 => 'Do Nothing', 0x01 => 'Reset Meter-off Delay', }, }, 11.1 => { # CSd4 Name => 'ExposureDelayMode', Mask => 0xc0, PrintConv => { 0x00 => 'Off', 0x40 => '1 s', 0x80 => '2 s', 0xc0 => '3 s', }, }, 11.2 => { # CSd2 Name => 'CLModeShootingSpeed', Mask => 0x0f, PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val', }, 12.1 => { # CSd3 Name => 'MaxContinuousRelease', # values: 1-100 }, 13.1 => { # CSe6 Name => 'AutoBracketSet', Mask => 0xe0, PrintConv => { 0x00 => 'AE & Flash', 0x20 => 'AE Only', 0x40 => 'Flash Only', 0x60 => 'WB Bracketing', 0x80 => 'Active D-Lighting', }, }, 13.2 => { # CSe8 Name => 'AutoBracketOrder', Mask => 0x10, PrintConv => { 0x00 => '0,-,+', 0x10 => '-,0,+', }, }, 13.3 => { # CSe7 Name => 'AutoBracketModeM', Mask => 0x0c, PrintConv => { 0x00 => 'Flash/Speed', 0x04 => 'Flash/Speed/Aperture', 0x08 => 'Flash/Aperture', 0x0c => 'Flash Only', }, }, 14.1 => { # CSf4-a Name => 'FuncButton', Mask => 0x1f, PrintConv => { 0 => 'None', 1 => 'Preview', 2 => 'FV Lock', 3 => 'AE/AF Lock', 4 => 'AE Lock Only', 5 => 'AE Lock (reset on release)', 6 => 'AE Lock (hold)', 7 => 'AF Lock Only', 8 => 'AF-On', 10 => 'Bracketing Burst', 11 => 'Matrix Metering', 12 => 'Center-weighted Metering', 13 => 'Spot Metering', 14 => 'Playback', 15 => 'My Menu Top Item', 16 => '+NEF(RAW)', 17 => 'Virtual Horizon', 19 => 'Grid Display', # values 19 and 20 are swapped from the D4s encodings 20 => 'My Menu', 21 => 'Disable Synchronized Release', 22 => 'Remote Release Only', 26 => 'Flash Disable/Enable', 27 => 'Highlight-weighted Metering', # new value with D810 }, }, 15.1 => { # CSf5-a Name => 'PreviewButton', Mask => 0x1f, PrintConv => { 0 => 'None', 1 => 'Preview', 2 => 'FV Lock', 3 => 'AE/AF Lock', 4 => 'AE Lock Only', 5 => 'AE Lock (reset on release)', 6 => 'AE Lock (hold)', 7 => 'AF Lock Only', 8 => 'AF-On', 10 => 'Bracketing Burst', 11 => 'Matrix Metering', 12 => 'Center-weighted Metering', 13 => 'Spot Metering', 14 => 'Playback', 15 => 'My Menu Top Item', 16 => '+NEF(RAW)', 17 => 'Virtual Horizon', 19 => 'Grid Display', # values 19 and 20 are swapped from the D4s encodings 20 => 'My Menu', 21 => 'Disable Synchronized Release', 22 => 'Remote Release Only', 26 => 'Flash Disable/Enable', 27 => 'Highlight-weighted Metering', # new value with D810 }, }, 16.1 => { # CSf8 Name => 'AssignBktButton', Mask => 0x07, PrintConv => { 0 => 'Auto Bracketing', 1 => 'Multiple Exposure', 2 => 'HDR (high dynamic range)', 3 => 'None', }, }, 17.1 => { # CSf6-a Name => 'AELockButton', Mask => 0x1f, PrintConv => { 0 => 'None', 1 => 'Preview', 2 => 'FV Lock', 3 => 'AE/AF Lock', 4 => 'AE Lock Only', 5 => 'AE Lock (reset on release)', 6 => 'AE Lock (hold)', 7 => 'AF Lock Only', 8 => 'AF-On', 10 => 'Bracketing Burst', 11 => 'Matrix Metering', 12 => 'Center-weighted Metering', 13 => 'Spot Metering', 14 => 'Playback', 15 => 'My Menu Top Item', 16 => '+NEF(RAW)', 17 => 'Virtual Horizon', 19 => 'Grid Display', # values 19 and 20 are swapped from the D4s encodings 20 => 'My Menu', 21 => 'Disable Synchronized Release', 22 => 'Remote Release Only', 26 => 'Flash Disable/Enable', 27 => 'Highlight-weighted Metering', # new value with D810 }, }, 18.1 => { # CSf9-b Name => 'CommandDialsChangeMainSub', Mask => 0xe0, PrintConv => { 0x00 => 'Autofocus Off, Exposure Off', 0x20 => 'Autofocus Off, Exposure On', 0x40 => 'Autofocus Off, Exposure On (Mode A)', 0x80 => 'Autofocus On, Exposure Off', 0xa0 => 'Autofocus On, Exposure On', 0xc0 => 'Autofocus On, Exposure On (Mode A)', }, }, 18.2 => { # CSf9-d Name => 'CommandDialsMenuAndPlayback', Mask => 0x18, PrintConv => { 0x00 => 'On', 0x08 => 'Off', 0x10 => 'On (Image Review Excluded)', }, }, 18.3 => { # CSf9-c Name => 'CommandDialsApertureSetting', Mask => 0x04, PrintConv => { 0x00 => 'Sub-command Dial', 0x04 => 'Aperture Ring', }, }, 18.4 => { # CSc1 Name => 'ShutterReleaseButtonAE-L', Mask => 0x02, PrintConv => { 0x00 => 'Off', 0x02 => 'On' }, }, 18.5 => { # CSf10 Name => 'ReleaseButtonToUseDial', Mask => 0x01, PrintConv => { 0x00 => 'No', 0x01 => 'Yes' }, }, 19.1 => { # CSc2 Name => 'StandbyTimer', Mask => 0xf0, PrintConv => { 0x00 => '4 s', 0x10 => '6 s', 0x30 => '10 s', 0x50 => '30 s', 0x60 => '1 min', 0x70 => '5 min', 0x80 => '10 min', 0x90 => '30 min', }, }, 20.1 => { # CSc3-a Name => 'SelfTimerTime', Mask => 0xc0, PrintConv => { 0x00 => '2 s', 0x40 => '5 s', 0x80 => '10 s', 0xc0 => '20 s', }, }, 20.2 => { # CSc3-c Name => 'SelfTimerShotInterval', Mask => 0x30, PrintConv => { 0x00 => '0.5 s', 0x10 => '1 s', 0x20 => '2 s', 0x30 => '3 s', }, }, 20.3 => { # CSc3-b Name => 'SelfTimerShotCount', Mask => 0x0f, }, 21.1 => { # CSc4-d Name => 'ImageReviewMonitorOffTime', # note: decode changed from D4s Mask => 0xe0, PrintConv => { 0x00 => '2 s', 0x20 => '4 s', 0x60 => '10 s', 0x80 => '20 s', 0xa0 => '1 min', 0xc0 => '5 min', 0xe0 => '10 min', }, }, 21.2 => { # CSc4-e # note: decode changed from D4s Name => 'LiveViewMonitorOffTime', Mask => 0x1c, PrintConv => { 0x04 => '5 min', 0x08 => '10 min', 0x0c => '15 min', 0x10 => '20 min', 0x14 => '30 min', 0x18 => 'No Limit', }, }, 22.1 => { # CSc4-b # note: decode changed from D4s Name => 'MenuMonitorOffTime', Mask => 0xe0, PrintConv => { 0x00 => '4 s', 0x40 => '10 s', 0x80 => '20 s', 0xa0 => '1 min', 0xc0 => '5 min', 0xe0 => '10 min', }, }, 22.2 => { # CSc4-c # note: decode changed from D4s Name => 'ShootingInfoMonitorOffTime', Mask => 0x1c, PrintConv => { 0x00 => '4 s', 0x08 => '10 s', 0x10 => '20 s', 0x14 => '1 min', 0x18 => '5 min', 0x1c => '10 min', }, }, 23.1 => { # CSe1 Name => 'FlashSyncSpeed', Mask => 0xf0, PrintConv => { 0x00 => '1/320 s (auto FP)', 0x20 => '1/250 s (auto FP)', 0x30 => '1/250 s', 0x50 => '1/200 s', 0x60 => '1/160 s', 0x70 => '1/125 s', 0x80 => '1/100 s', 0x90 => '1/80 s', 0xa0 => '1/60 s', }, }, 23.2 => { # CSe2 Name => 'FlashShutterSpeed', Mask => 0x0f, PrintConvColumns => 2, PrintConv => { 0x00 => '1/60 s', 0x01 => '1/30 s', 0x02 => '1/15 s', 0x03 => '1/8 s', 0x04 => '1/4 s', 0x05 => '1/2 s', 0x06 => '1 s', 0x07 => '2 s', 0x08 => '4 s', 0x09 => '8 s', 0x0a => '15 s', 0x0b => '30 s', }, }, 24.1 => { # CSe3 Name => 'FlashControlBuilt-in', Mask => 0xc0, RawConv => '$$self{FlashControlBuiltin} = $val', PrintConv => { 0x00 => 'TTL', 0x40 => 'Manual', 0x80 => 'Repeating Flash', 0xc0 => 'Commander Mode', }, }, 31.1 => { # CSe5 Name => 'ModelingFlash', Mask => 0x20, PrintConv => { 0x00 => 'On', 0x20 => 'Off', }, }, 36.1 => { # CSc4-a Name => 'PlaybackMonitorOffTime', Mask => 0xe0, PrintConv => { 0x00 => '4 s', 0x20 => '10 s', 0x40 => '20 s', 0x60 => '1 min', 0x80 => '5 min', 0xa0 => '10 min', }, }, 37.1 => { # CSf2-c Name => 'MultiSelectorLiveView', Mask => 0xc0, PrintConv => { 0x00 => 'Reset', 0x40 => 'Zoom', 0xc0 => 'Not Used', }, }, 38.1 => { # CSf7-a Name => 'ShutterSpeedLock', Mask => 0x80, PrintConv => { 0x00 => 'Off', 0x80 => 'On', }, }, 38.2 => { # CSf7-b Name => 'ApertureLock', Mask => 0x40, PrintConv => { 0x00 => 'Off', 0x40 => 'On', }, }, 38.3 => { # CSg4 Name => 'MovieShutterButton', Mask => 0x20, PrintConv => { 0x00 => 'Take Photo', 0x20 => 'Record Movies', }, }, 38.4 => { # CSe4 Name => 'FlashExposureCompArea', Mask => 0x04, PrintConv => { 0x00 => 'Entire frame', 0x04 => 'Background only', }, }, 40.1 => { # CSg3 Name => 'MovieAELockButtonAssignment', Mask => 0x0f, PrintConv => { 0 => 'None', 3 => 'Index Marking', 4 => 'View Photo Shooting Info', 5 => 'AE/AF Lock', 6 => 'AE Lock Only', 7 => 'AE Lock (hold)', 8 => 'AF Lock Only', }, }, 41.1 => { # CSg1 Name => 'MovieFunctionButton', Mask => 0x70, PrintConv => { 0x00 => 'None', 0x10 => 'Power Aperture (open)', # bit '02' is also toggled on for this setting 0x30 => 'Index Marking', 0x40 => 'View Photo Shooting Info', }, }, 41.2 => { # CSg2 Name => 'MoviePreviewButton', Mask => 0x07, PrintConv => { 0x00 => 'None', 0x02 => 'Power Aperture (open)', # bit '10' is also toggled on for this setting 0x03 => 'Index Marking', 0x04 => 'View Photo Shooting Info', }, }, 42.1 => { # CSf4-b Name => 'FuncButtonPlusDials', Mask => 0x0f, PrintConv => { 0 => 'None', 1 => 'Choose Image Area (FX/DX/5:4)', 2 => 'Shutter Speed & Aperture Lock', 3 => 'One Step Speed / Aperture', 4 => 'Choose Non-CPU Lens Number', 5 => 'Active D-Lighting', 8 => 'Exposure Delay Mode', }, }, 43.1 => { # CSf5-b Name => 'PreviewButtonPlusDials', Mask => 0x0f, PrintConv => { 0 => 'None', 1 => 'Choose Image Area (FX/DX/5:4)', 2 => 'Shutter Speed & Aperture Lock', 3 => 'One Step Speed / Aperture', 4 => 'Choose Non-CPU Lens Number', 5 => 'Active D-Lighting', 8 => 'Exposure Delay Mode', }, }, 44.1 => { # CSf6-b Name => 'AELockButtonPlusDials', Mask => 0x0f, PrintConv => { 0 => 'None', 1 => 'Choose Image Area (FX/DX/5:4)', 2 => 'Shutter Speed & Aperture Lock', 4 => 'Choose Non-CPU Lens Number', 8 => 'Exposure Delay Mode', }, }, 45.1 => { # CSf13 Name => 'AssignMovieRecordButton', Mask => 0x0f, PrintConv => { 0 => 'None', 1 => 'Choose Image Area (FX/DX/5:4)', 2 => 'Shutter Speed & Aperture Lock', 9 => 'White Balance', 10 => 'ISO Sensitivity', }, }, 46.1 => { # CSb7-d Name => 'FineTuneOptHighlightWeighted', Mask => 0x0f, ValueConv => '($val > 0x7 ? $val - 0x10 : $val) / 6', ValueConvInv => 'int($val*6+($val>0?0.5:-0.5)) & 0x0f', PrintConv => '$val ? sprintf("%+.2f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 47.1 => { # CSa5-b Name => 'DynamicAreaAFDisplay', Mask => 0x80, PrintConv => { 0x00 => 'Off', 0x80 => 'On', }, }, 47.2 => { # CSa5-a # moved with D810 Name => 'AFPointIllumination', Mask => 0x40, PrintConv => { 0x00 => 'Off', 0x40 => 'On During Manual Focusing', }, }, 47.3 => { # CSa9 Name => 'StoreByOrientation', Mask => 0x18, PrintConv => { 0x00 => 'Off', 0x08 => 'Focus Point', 0x10 => 'Focus Point and AF-area mode', }, }, 47.4 => { # CSa5-c Name => 'GroupAreaAFIllumination', Mask => 0x04, PrintConv => { 0x00 => 'Squares', # moved with D810 0x04 => 'Dots', }, }, 48.1 => { # CSb5 Name => 'MatrixMetering', Mask => 0x80, PrintConv => { 0x00 => 'Face Detection On', 0x80 => 'Face Detection Off', }, }, 48.2 => { # CSf14 Name => 'LiveViewButtonOptions', Mask => 0x30, PrintConv => { 0x00 => 'Enable', 0x20 => 'Disable', }, }, 48.3 => { # CSa12 Name => 'AFModeRestrictions', Mask => 0x03, PrintConv => { 0x00 => 'No Restrictions', 0x01 => 'AF-C', 0x02 => 'AF-S', }, }, 49.1 => { # CSa11 Name => 'LimitAFAreaModeSelection', Mask => 0x7e, PrintConv => { 0 => 'No Restrictions', BITMASK => { 1 => 'Auto-area', 2 => 'Group-area', 3 => '3D-tracking', 4 => 'Dynamic area (51 points)', 5 => 'Dynamic area (21 points)', 6 => 'Dynamic area (9 points)', }, }, }, 50.1 => { # CSf15 Name => 'AF-OnForMB-D12', Mask => 0x07, PrintConv => { 0 => 'AE/AF Lock', 1 => 'AE Lock Only', 2 => 'AF Lock Only', 3 => 'AE Lock (hold)', 4 => 'AE Lock (reset)', 5 => 'AF-On', 6 => 'FV Lock', 7 => 'Same As Fn Button', }, }, 51.1 => { # CSf16 Name => 'AssignRemoteFnButton', Mask => 0x1f, PrintConv => { 0 => 'None', 1 => 'Preview', 2 => 'FV Lock', 3 => 'AE/AF Lock', 4 => 'AE Lock Only', 5 => 'AE Lock (reset on release)', 7 => 'AF Lock Only', 8 => 'AF-On', 16 => '+NEF(RAW)', 25 => 'Live View', 26 => 'Flash Disable/Enable', }, }, 52.1 => { # CSf17 Name => 'LensFocusFunctionButtons', Mask => 0x3f, PrintConv => { 3 => 'AE/AF Lock', 4 => 'AE Lock Only', 7 => 'AF Lock Only', 21 => 'Disable Synchronized Release', 22 => 'Remote Release Only', 24 => 'Preset focus Point', 26 => 'Flash Disable/Enable', 32 => 'AF-Area Mode: Single-point AF', 33 => 'AF-Area Mode: Dynamic-area AF (9 points)', 34 => 'AF-Area Mode: Dynamic-area AF (21 points)', 35 => 'AF-Area Mode: Dynamic-area AF (51 points)', 36 => 'AF-Area Mode: Group-area AF', 37 => 'AF-Area Mode: Auto area AF', }, }, ); # D5000 custom settings (ref PH) %Image::ExifTool::NikonCustom::SettingsD5000 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Custom settings for the D5000.', # Missing/Incomplete settings: # CSd7 - LiveViewDisplayOptions [couldn't find in data - try again with live view shots] 0.1 => { # CSa1 Name => 'AFAreaModeSetting', Mask => 0x60, PrintConv => { 0x00 => 'Single Area', 0x20 => 'Dynamic Area', 0x40 => 'Auto-area', 0x60 => '3D-tracking (11 points)', }, }, 0.2 => { # CSa2 Name => 'AFAssist', Mask => 0x01, PrintConv => { 0 => 'On', 1 => 'Off', }, }, 2.1 => { # CSd1 Name => 'Beep', Mask => 0xc0, PrintConv => { 0x00 => 'Off', 0x40 => 'Low', 0x80 => 'High', }, }, 2.2 => { # CSd2 Name => 'GridDisplay', Mask => 0x02, PrintConv => { 0x00 => 'On', 0x02 => 'Off', }, }, 2.3 => { # CSd3 Name => 'ISODisplay', Mask => 0x08, PrintConv => { 0x08 => 'Off', 0x00 => 'On', }, }, 2.4 => { # CSf4 Name => 'NoMemoryCard', Mask => 0x20, PrintConv => { 0x00 => 'Release Locked', 0x20 => 'Enable Release', }, }, 3.1 => { # CSd4 Name => 'FileNumberSequence', Mask => 0x08, PrintConv => { 0x00 => 'On', 0x08 => 'Off' }, }, 4.1 => { # CSa4 Name => 'RangeFinder', Mask => 0x10, PrintConv => { 0x00 => 'Off', 0x10 => 'On' }, }, 4.2 => { # CSd6 Name => 'DateImprint', Mask => 0x08, PrintConv => { 0x00 => 'Off', 0x08 => 'On', }, }, 4.3 => { # CSf5 Name => 'ReverseIndicators', Mask => 0x80, PrintConv => { 0x00 => '+ 0 -', 0x80 => '- 0 +', }, }, 5.1 => { # CSb1 Name => 'EVStepSize', Mask => 0x40, PrintConv => { 0x00 => '1/3 EV', 0x40 => '1/2 EV', }, }, 9.1 => { # CSd5 Name => 'ExposureDelayMode', Mask => 0x40, PrintConv => { 0x00 => 'Off', 0x40 => 'On', }, }, 11.1 => { # CSe2 Name => 'AutoBracketSet', Mask => 0xc0, PrintConv => { 0x00 => 'Exposure', # (NOTE: the following are reversed in the D5100 -- is this correct?) 0x40 => 'Active D-Lighting', #(NC) 0x80 => 'WB Bracketing', }, }, 12.1 => { # CSf1 Name => 'TimerFunctionButton', Mask => 0x38, PrintConv => { 0x00 => 'Self-timer', 0x08 => 'Release Mode', 0x10 => 'Image Quality/Size', #(NC) 0x18 => 'ISO', #(NC) 0x20 => 'White Balance', #(NC) 0x28 => 'Active D-Lighting', #(NC) 0x30 => '+ NEF (RAW)', 0x38 => 'Auto Bracketing', }, }, 15.1 => { # CSf2 Name => 'AELockButton', Mask => 0x38, PrintConv => { 0x00 => 'AE/AF Lock', 0x08 => 'AE Lock Only', #(NC) 0x10 => 'AF Lock Only', #(NC) 0x18 => 'AE Lock (hold)', 0x20 => 'AF-ON', }, }, 16.1 => { # CSc1 Name => 'ShutterReleaseButtonAE-L', Mask => 0x02, PrintConv => { 0x00 => 'Off', 0x02 => 'On' }, }, 16.2 => { # CSf3 Name => 'CommandDialsReverseRotation', Mask => 0x80, PrintConv => { 0x00 => 'No', 0x80 => 'Yes' }, }, 17.1 => { # CSc2-c Name => 'MeteringTime', Mask => 0x70, PrintConv => { 0x00 => '4 s', 0x10 => '8 s', 0x20 => '20 s', 0x30 => '1 min', 0x40 => '30 min', }, }, 17.2 => { # CSc4 Name => 'RemoteOnDuration', Mask => 0x03, PrintConv => { 0x00 => '1 min', 0x01 => '5 min', 0x02 => '10 min', 0x03 => '15 min', }, }, 18.1 => { # CSc3-a Name => 'SelfTimerTime', Mask => 0xc0, PrintConv => { 0x00 => '2 s', 0x40 => '5 s', 0x80 => '10 s', 0xc0 => '20 s', }, }, 18.2 => { # CSc3-b Name => 'SelfTimerShotCount', Mask => 0x1e, ValueConv => '$val >> 1', ValueConvInv => '$val << 1', }, 19.1 => { # CSc2-b Name => 'ImageReviewTime', Mask => 0xe0, PrintConv => { 0x00 => '4 s', 0x20 => '8 s', 0x40 => '20 s', 0x60 => '1 min', 0x80 => '10 min', }, }, 20.1 => { # CSc2-a Name => 'PlaybackMenusTime', Mask => 0xe0, PrintConv => { 0x00 => '8 s', 0x20 => '12 s', 0x40 => '20 s', 0x60 => '1 min', 0x80 => '10 min', }, }, 22.1 => { # CSe1-a Name => 'InternalFlash', Mask => 0xc0, PrintConv => { 0x00 => 'TTL', 0x40 => 'Manual', }, }, 22.2 => { # CSe1-b Name => 'ManualFlashOutput', Mask => 0x1f, ValueConv => '2 ** (-$val/3)', ValueConvInv => '$val > 0 ? -3*log($val)/log(2) : 0', PrintConv => q{ return 'Full' if $val > 0.99; Image::ExifTool::Exif::PrintExposureTime($val); }, PrintConvInv => '$val=~/F/i ? 1 : Image::ExifTool::Exif::ConvertFraction($val)', }, 32.1 => { # CSa3 Name => 'LiveViewAF', Mask => 0x60, PrintConv => { 0x00 => 'Face Priority', 0x20 => 'Wide Area', 0x40 => 'Normal Area', 0x60 => 'Subject Tracking', }, }, ); # D5100 custom settings (ref PH) %Image::ExifTool::NikonCustom::SettingsD5100 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Custom settings for the D5100.', 0.1 => { # CSa1 Name => 'AF-CPrioritySelection', Mask => 0x80, PrintConv => { 0x00 => 'Release', 0x80 => 'Focus', }, }, 1.1 => { # CSa2 Name => 'AFAssist', Mask => 0x01, PrintConv => { 0 => 'On', 1 => 'Off', }, }, 3.1 => { # CSd1 Name => 'Beep', Mask => 0xc0, PrintConv => { 0x00 => 'Off', 0x40 => 'Low', 0x80 => 'High', }, }, 3.2 => { # CSf4 Name => 'NoMemoryCard', Mask => 0x20, PrintConv => { 0x00 => 'Release Locked', 0x20 => 'Enable Release', }, }, 3.3 => { # CSd2 Name => 'ISODisplay', Mask => 0x08, PrintConv => { 0x00 => 'On', 0x08 => 'Off', }, }, 4.1 => { # CSd3 Name => 'FileNumberSequence', Mask => 0x08, PrintConv => { 0x00 => 'On', 0x08 => 'Off' }, }, 5.1 => { # CSa3 Name => 'RangeFinder', Mask => 0x10, PrintConv => { 0x00 => 'Off', 0x10 => 'On' }, }, # (it looks like CSd5 DateImprint is not stored) 5.2 => { # CSf5 Name => 'ReverseIndicators', Mask => 0x80, PrintConv => { 0x00 => '+ 0 -', 0x80 => '- 0 +', }, }, 6.1 => { # CSb1 Name => 'EVStepSize', Mask => 0x40, PrintConv => { 0x00 => '1/3 EV', 0x40 => '1/2 EV', }, }, 10.1 => { # CSd4 Name => 'ExposureDelayMode', Mask => 0x40, PrintConv => { 0x00 => 'Off', 0x40 => 'On', }, }, 12.1 => { # CSe2 Name => 'AutoBracketSet', Mask => 0xc0, PrintConv => { 0x00 => 'Exposure', # (NOTE: the following are reversed from the D5000 -- is D5000 correct?) 0x40 => 'WB Bracketing', 0x80 => 'Active D-Lighting', }, }, 13.1 => { # CSf1 Name => 'TimerFunctionButton', Mask => 0x38, PrintConv => { 0x00 => 'Self-timer', 0x08 => 'Release Mode', 0x10 => 'Image Quality/Size', 0x18 => 'ISO', 0x20 => 'White Balance', 0x28 => 'Active D-Lighting', 0x30 => '+ NEF (RAW)', 0x38 => 'Auto Bracketing', }, }, 16.1 => { # CSf2 Name => 'AELockButton', Mask => 0x38, PrintConv => { 0x00 => 'AE/AF Lock', 0x08 => 'AE Lock Only', 0x10 => 'AF Lock Only', 0x18 => 'AE Lock (hold)', 0x20 => 'AF-ON', }, }, 17.1 => { # CSc1 Name => 'ShutterReleaseButtonAE-L', Mask => 0x02, PrintConv => { 0x00 => 'Off', 0x02 => 'On' }, }, 17.2 => { # CSf3 Name => 'CommandDialsReverseRotation', Mask => 0x80, PrintConv => { 0x00 => 'No', 0x80 => 'Yes' }, }, 18.1 => { # CSc2-d Name => 'MeteringTime', Mask => 0x70, PrintConv => { 0x00 => '4 s', 0x10 => '8 s', 0x20 => '20 s', #(NC) 0x30 => '1 min', 0x40 => '30 min', #(NC) }, }, 18.2 => { # CSc4 Name => 'RemoteOnDuration', Mask => 0x03, PrintConv => { 0x00 => '1 min', 0x01 => '5 min', 0x02 => '10 min', #(NC) 0x03 => '20 min', # (but picture in manual shows 15 min) }, }, 19.1 => { # CSc3-a Name => 'SelfTimerTime', Mask => 0xc0, PrintConv => { 0x00 => '2 s', 0x40 => '5 s', 0x80 => '10 s', 0xc0 => '20 s', }, }, 19.2 => { # CSc3-b Name => 'SelfTimerShotCount', Mask => 0x0f, }, 20.1 => { # CSc2-b Name => 'ImageReviewTime', Mask => 0xe0, PrintConv => { 0x00 => '4 s', 0x20 => '8 s', #(NC) 0x40 => '20 s', 0x60 => '1 min', #(NC) 0x80 => '10 min', #(NC) }, }, 20.2 => { # CSc2-c Name => 'LiveViewMonitorOffTime', Mask => 0x1c, PrintConv => { 0x00 => '3 min', 0x04 => '5 min', #(NC) 0x08 => '10 min', 0x0c => '15 min', #(NC) 0x10 => '20 min', #(NC) 0x14 => '30 min', #(NC) }, }, 21.1 => { # CSc2-a Name => 'PlaybackMenusTime', Mask => 0xe0, PrintConv => { 0x00 => '8 s', #(NC) 0x20 => '12 s', 0x40 => '20 s', 0x60 => '1 min', 0x80 => '10 min', #(NC) }, }, 23.1 => { # CSe1-a Name => 'InternalFlash', Mask => 0xc0, PrintConv => { 0x00 => 'TTL', 0x40 => 'Manual', }, }, 23.1 => { # CSe1-b Name => 'ManualFlashOutput', Mask => 0x1f, ValueConv => '2 ** (-$val/3)', ValueConvInv => '$val > 0 ? -3*log($val)/log(2) : 0', PrintConv => q{ return 'Full' if $val > 0.99; Image::ExifTool::Exif::PrintExposureTime($val); }, PrintConvInv => '$val=~/F/i ? 1 : Image::ExifTool::Exif::ConvertFraction($val)', }, ); # D5200 custom settings (ref PH) %Image::ExifTool::NikonCustom::SettingsD5200 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Custom settings for the D5200.', 0.1 => { # CSa1 Name => 'AF-CPrioritySelection', Mask => 0x80, PrintConv => { 0x00 => 'Release', 0x80 => 'Focus', }, }, 0.2 => { # CSa2 Name => 'NumberOfFocusPoints', Mask => 0x10, PrintConv => { 0x00 => '39 Points', 0x10 => '11 Points', }, }, 1.1 => { # CSa3 Name => 'AFAssist', Mask => 0x01, PrintConv => { 0 => 'On', 1 => 'Off', }, }, 3.1 => { # CSd1 Name => 'Beep', Mask => 0xc0, PrintConv => { 0x00 => 'Off', 0x40 => 'Low', 0x80 => 'High', }, }, 3.2 => { # CSf4 Name => 'NoMemoryCard', Mask => 0x20, PrintConv => { 0x00 => 'Release Locked', 0x20 => 'Enable Release', }, }, 3.3 => { # CSd3 Name => 'ISODisplay', Mask => 0x08, PrintConv => { 0x00 => 'On', 0x08 => 'Off', }, }, 4.1 => { # CSd3 Name => 'FileNumberSequence', Mask => 0x08, PrintConv => { 0x00 => 'On', 0x08 => 'Off' }, }, 5.1 => { # CSa4 Name => 'RangeFinder', Mask => 0x04, PrintConv => { 0x00 => 'Off', 0x04 => 'On' }, }, 5.2 => { # CSf3-a Name => 'ReverseExposureCompDial', Mask => 0x10, PrintConv => { 0x00 => 'No', 0x10 => 'Yes' }, }, 5.3 => { # CSf3-b Name => 'ReverseShutterSpeedAperture', Mask => 0x08, PrintConv => { 0x00 => 'No', 0x08 => 'Yes' }, }, 5.4 => { # CSf5 Name => 'ReverseIndicators', Mask => 0x80, PrintConv => { 0x00 => '+ 0 -', 0x80 => '- 0 +', }, }, 6.1 => { # CSb1 Name => 'EVStepSize', Mask => 0x40, # (bit 0x04 also changes) PrintConv => { 0x00 => '1/3 EV', 0x40 => '1/2 EV', }, }, 10.1 => { # CSd5 Name => 'ExposureDelayMode', Mask => 0x40, PrintConv => { 0x00 => 'Off', 0x40 => 'On', }, }, 12.1 => { # CSe2 Name => 'AutoBracketSet', Mask => 0xc0, PrintConv => { 0x00 => 'Exposure', # (NOTE: the following are reversed from the D5000 -- is D5000 correct?) 0x40 => 'WB Bracketing', 0x80 => 'Active D-Lighting', }, }, 13.1 => { # CSf1 Name => 'FunctionButton', Mask => 0x1f, PrintConv => { 0x03 => 'AE/AF Lock', 0x04 => 'AE Lock Only', 0x06 => 'AE Lock (hold)', 0x07 => 'AF Lock Only', 0x08 => 'AF-ON', 0x10 => '+ NEF (RAW)', 0x12 => 'Active D-Lighting', 0x19 => 'Live View', 0x1a => 'Image Quality', 0x1b => 'ISO', 0x1c => 'White Balance', 0x1d => 'HDR', 0x1e => 'Auto Bracketing', 0x1f => 'AF-area Mode', }, }, 16.1 => { # CSf2 Name => 'AELockButton', Mask => 0x0f, PrintConv => { 0x03 => 'AE/AF Lock', 0x04 => 'AE Lock Only', 0x06 => 'AE Lock (hold)', 0x07 => 'AF Lock Only', 0x08 => 'AF-ON', }, }, 17.1 => { # CSc1 Name => 'ShutterReleaseButtonAE-L', Mask => 0x02, PrintConv => { 0x00 => 'Off', 0x02 => 'On' }, }, 18.1 => { # CSc2-d Name => 'StandbyTimer', Mask => 0xe0, PrintConv => { 0x00 => '4 s', 0x20 => '8 s', 0x40 => '20 s', 0x60 => '1 min', 0x80 => '30 min', }, }, 18.2 => { # CSc4 Name => 'RemoteOnDuration', Mask => 0x03, PrintConv => { 0x00 => '1 min', 0x01 => '5 min', 0x02 => '10 min', 0x03 => '15 min', }, }, 19.1 => { # CSc3-a Name => 'SelfTimerTime', Mask => 0xc0, PrintConv => { 0x00 => '2 s', 0x40 => '5 s', 0x80 => '10 s', 0xc0 => '20 s', }, }, 19.2 => { # CSc3-b Name => 'SelfTimerShotCount', Mask => 0x0f, }, 20.1 => { # CSc2-b Name => 'ImageReviewTime', Mask => 0xe0, PrintConv => { 0x20 => '4 s', 0x40 => '8 s', 0x80 => '20 s', 0xa0 => '1 min', 0xe0 => '10 min', }, }, 20.2 => { # CSc2-c Name => 'LiveViewMonitorOffTime', Mask => 0x1c, PrintConv => { 0x04 => '5 min', 0x08 => '10 min', 0x0c => '15 min', 0x10 => '20 min', 0x14 => '30 min', }, }, 21.1 => { # CSc2-a Name => 'PlaybackMenusTime', Mask => 0xe0, PrintConv => { 0x20 => '8 s', 0x80 => '20 s', 0xa0 => '1 min', 0xc0 => '5 min', 0xe0 => '10 min', }, }, 23.1 => { # CSe1-a Name => 'InternalFlash', Mask => 0xc0, PrintConv => { 0x00 => 'TTL', 0x40 => 'Manual', }, }, 23.2 => { # CSe1-b Name => 'ManualFlashOutput', Mask => 0x1f, ValueConv => '2 ** (-$val/3)', ValueConvInv => '$val > 0 ? -3*log($val)/log(2) : 0', PrintConv => q{ return 'Full' if $val > 0.99; Image::ExifTool::Exif::PrintExposureTime($val); }, PrintConvInv => '$val=~/F/i ? 1 : Image::ExifTool::Exif::ConvertFraction($val)', }, ); # D7000 custom settings (ref 2) %Image::ExifTool::NikonCustom::SettingsD7000 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, DATAMEMBER => [ 23.1 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Custom settings for the D7000.', 0.1 => { # CSa1 Name => 'AF-CPrioritySelection', Mask => 0x80, PrintConv => { 0x00 => 'Release', 0x80 => 'Focus', }, }, 0.2 => { # CSa2 Name => 'AF-SPrioritySelection', Mask => 0x20, PrintConv => { 0x00 => 'Focus', 0x20 => 'Release', }, }, 0.3 => { # CSa6 Name => 'NumberOfFocusPoints', Mask => 0x10, PrintConv => { 0x00 => '39 Points', 0x10 => '11 Points', }, }, 0.4 => { # CSa3 Name => 'FocusTrackingLockOn', Mask => 0x07, PrintConv => { 0x05 => '5 Long', 0x04 => '4', 0x03 => '3 Normal', 0x02 => '2', 0x01 => '1 Short', 0x00 => 'Off', }, }, 1.2 => { # CSa5 Name => 'FocusPointWrap', Mask => 0x08, PrintConv => { 0x00 => 'No Wrap', 0x08 => 'Wrap', }, }, 1.3 => { # CSa4 Name => 'AFPointIllumination', Mask => 0x06, PrintConv => { 0x00 => 'Auto', 0x02 => 'On', 0x04 => 'Off', }, }, 1.4 => { # CSa7 Name => 'AFAssist', Mask => 0x01, PrintConv => { 0x00 => 'On', 0x01 => 'Off' }, }, 2.1 => { # CSd14 Name => 'BatteryOrder', Mask => 0x40, PrintConv => { 0x00 => 'MB-D11 First', 0x40 => 'Camera Battery First', }, }, 2.2 => { # CSa10 Name => 'AF-OnForMB-D11', Mask => 0x1c, PrintConv => { 0x00 => 'AE/AF Lock', 0x04 => 'AE Lock Only', 0x08 => 'AF Lock Only', 0x0c => 'AE Lock (hold)', 0x10 => 'AF-ON', 0x14 => 'FV Lock', 0x18 => 'Same as FUNC Button', }, }, 2.3 => { # CSd13 Name => 'MB-D11BatteryType', Mask => 0x03, PrintConv => { 0x00 => 'LR6 (AA alkaline)', 0x01 => 'Ni-MH (AA Ni-MH)', 0x02 => 'FR6 (AA lithium)', }, }, 3.1 => { # CSd1-b Name => 'BeepPitch', Mask => 0xc0, PrintConv => { 0x00 => 'Off', 0x40 => 'Low', 0x80 => 'High', }, }, 3.2 => { # CSf8 Name => 'NoMemoryCard', Mask => 0x20, PrintConv => { 0x00 => 'Release Locked', 0x20 => 'Enable Release', }, }, 3.3 => { # CSd3 Name => 'ISODisplay', Mask => 0x0c, PrintConv => { 0x00 => 'Show ISO/Easy ISO', 0x04 => 'Show ISO Sensitivity', 0x0c => 'Show Frame Count', }, }, 3.4 => { # CSd2 Name => 'GridDisplay', Mask => 0x02, PrintConv => { 0x00 => 'On', 0x02 => 'Off' }, }, 3.5 => { # CSd4 Name => 'ViewfinderWarning', Mask => 0x01, PrintConv => { 0x00 => 'On', 0x01 => 'Off' }, }, 4.1 => { # CSd9 Name => 'ShootingInfoDisplay', Mask => 0xc0, PrintConv => { 0x00 => 'Auto', 0x80 => 'Manual (dark on light)', 0xc0 => 'Manual (light on dark)', }, }, 4.2 => { # CSd10 Name => 'LCDIllumination', Mask => 0x20, PrintConv => { 0x00 => 'Off', 0x20 => 'On' }, }, 4.3 => { # CSd8 Name => 'FileNumberSequence', Mask => 0x08, PrintConv => { 0x00 => 'On', 0x08 => 'Off' }, }, 4.4 => { # CSd5 Name => 'ScreenTips', Mask => 0x04, PrintConv => { 0x00 => 'Off', 0x04 => 'On' }, }, 4.5 => { # CSd1-a Name => 'BeepVolume', Mask => 0x03, PrintConv => { 0x00 => 'Off', 0x01 => '1', 0x02 => '2', 0x03 => '3', }, }, 5.1 => { # CSf9 Name => 'ReverseIndicators', Mask => 0x80, PrintConv => { 0x00 => '+ 0 -', 0x80 => '- 0 +', }, }, 5.2 => { # CSb3 Name => 'EasyExposureCompensation', Mask => 0x03, PrintConv => { 0x00 => 'Off', 0x01 => 'On', 0x02 => 'On Auto Reset', }, }, 6.1 => { # CSb2 Name => 'ExposureControlStep', Mask => 0x40, PrintConv => { 0x00 => '1/3 EV', 0x40 => '1/2 EV', }, }, 6.2 => { # CSb1 Name => 'ISOSensitivityStep', Mask => 0x10, PrintConv => { 0x00 => '1/3 EV', 0x10 => '1/2 EV', }, }, 7.1 => { # CSb4 Name => 'CenterWeightedAreaSize', Mask => 0xe0, PrintConv => { 0x00 => '6 mm', 0x20 => '8 mm', 0x40 => '10 mm', 0x60 => '13 mm', 0x80 => 'Average', }, }, 10.1 => { # CSd11 Name => 'ExposureDelayMode', Mask => 0x40, PrintConv => { 0x00 => 'Off', 0x40 => 'On', }, }, 10.2 => { # CSd6 Name => 'CLModeShootingSpeed', Mask => 0x07, PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val', }, 11 => { # CSd7 Name => 'MaxContinuousRelease', # values: 1-100 }, 12.1 => { # CSe5 Name => 'AutoBracketSet', Mask => 0xe0, #(NC) PrintConv => { 0x00 => 'AE & Flash', # default 0x20 => 'AE Only', 0x40 => 'Flash Only', #(NC) 0x60 => 'WB Bracketing', #(NC) 0x80 => 'Active D-Lighting', #(NC) }, }, 12.2 => { # CSe6 Name => 'AutoBracketOrder', Mask => 0x10, PrintConv => { 0x00 => '0,-,+', 0x10 => '-,0,+', }, }, 13.1 => { # CSf3 Name => 'FuncButton', Mask => 0xf8, PrintConv => { 0x00 => 'Grid Display', 0x08 => 'FV Lock', 0x10 => 'Flash Off', 0x18 => 'Matrix Metering', 0x20 => 'Center-weighted Metering', 0x28 => 'Spot Metering', 0x30 => 'My Menu Top', 0x38 => '+ NEF (RAW)', 0x40 => 'Active D-Lighting', 0x48 => 'Preview', 0x50 => 'AE/AF Lock', 0x58 => 'AE Lock Only', 0x60 => 'AF Lock Only', 0x68 => 'AE Lock (hold)', 0x70 => 'Bracketing Burst', 0x78 => 'Playback', 0x80 => '1EV Step Speed/Aperture', 0x88 => 'Choose Non-CPU Lens', 0x90 => 'Virtual Horizon', 0x98 => 'Start Movie Recording', }, }, 14.1 => { # CSf4 Name => 'PreviewButton', Mask => 0xf8, PrintConv => { 0x00 => 'Grid Display', 0x08 => 'FV Lock', 0x10 => 'Flash Off', 0x18 => 'Matrix Metering', 0x20 => 'Center-weighted Metering', 0x28 => 'Spot Metering', 0x30 => 'My Menu Top', 0x38 => '+ NEF (RAW)', 0x40 => 'Active D-Lighting', 0x48 => 'Preview', 0x50 => 'AE/AF Lock', 0x58 => 'AE Lock Only', 0x60 => 'AF Lock Only', 0x68 => 'AE Lock (hold)', 0x70 => 'Bracketing Burst', 0x78 => 'Playback', 0x80 => '1EV Step Speed/Aperture', 0x88 => 'Choose Non-CPU Lens', 0x90 => 'Virtual Horizon', 0x98 => 'Start Movie Recording', }, }, 16.1 => { # CSf5 Name => 'AELockButton', Mask => 0x38, PrintConv => { 0x00 => 'AE/AF Lock', 0x08 => 'AE Lock Only', 0x10 => 'AF Lock Only', 0x18 => 'AE Lock (hold)', 0x20 => 'AF-ON', 0x28 => 'FV Lock', }, }, 15.1 => { # CSf2 Name => 'OKButton', Mask => 0x18, PrintConv => { 0x08 => 'Select Center Focus Point', 0x10 => 'Highlight Active Focus Point', 0x18 => 'Not Used', #(NC) 0x00 => 'Off', #(NC) }, }, 17.1 => { # CSf6-a Name => 'CommandDialsReverseRotation', Mask => 0x80, PrintConv => { 0x00 => 'No', 0x80 => 'Yes' }, }, 17.2 => { # CSf6-b Name => 'CommandDialsChangeMainSub', Mask => 0x60, PrintConv => { 0x00 => 'Off', 0x20 => 'On', 0x40 => 'On (A mode only)', }, }, 17.3 => { # CSf6-c Name => 'CommandDialsApertureSetting', Mask => 0x04, PrintConv => { 0x00 => 'Sub-command Dial', 0x04 => 'Aperture Ring', }, }, 17.4 => { # CSf6-d Name => 'CommandDialsMenuAndPlayback', Mask => 0x18, PrintConv => { 0x00 => 'On', 0x10 => 'On (Image Review Exclude)', 0x08 => 'Off', }, }, 17.5 => { # CSc1 Name => 'ShutterReleaseButtonAE-L', Mask => 0x02, PrintConv => { 0x00 => 'Off', 0x02 => 'On' }, }, 17.6 => { # CSf7 Name => 'ReleaseButtonToUseDial', Mask => 0x01, PrintConv => { 0x00 => 'No', 0x01 => 'Yes' }, }, 18.1 => { # CSc2 Name => 'MeteringTime', Mask => 0xf0, PrintConvColumns => 2, PrintConv => { 0x00 => '4 s', 0x10 => '6 s', # default 0x20 => '8 s', 0x30 => '16 s', 0x40 => '30 s', 0x50 => '1 min', 0x60 => '5 min', 0x70 => '10 min', 0x80 => '30 min', 0x90 => 'No Limit', }, }, 18.2 => { # CSc5 Name => 'RemoteOnDuration', Mask => 0x03, PrintConv => { 0x00 => '1 min', 0x01 => '5 min', 0x02 => '10 min', 0x03 => '15 min', }, }, 19.1 => { # CSc3-a Name => 'SelfTimerTime', Mask => 0xc0, PrintConv => { 0x00 => '2 s', 0x40 => '5 s', 0x80 => '10 s', # default 0xc0 => '20 s', }, }, 19.2 => { # CSc3-c Name => 'SelfTimerInterval', Mask => 0x30, PrintConv => { 0x00 => '0.5 s', 0x10 => '1 s', 0x20 => '2 s', # default 0x30 => '3 s', }, }, 19.3 => { # CSc3-b Name => 'SelfTimerShotCount', Mask => 0x0f, }, 20.1 => { # CSc4-d Name => 'ImageReviewTime', Mask => 0xe0, PrintConv => { #(NC) 0x00 => '4 s', 0x20 => '10 s', # default 0x40 => '20 s', 0x60 => '1 min', 0x80 => '5 min', 0xa0 => '10 min', }, }, 20.2 => { # CSc4-e Name => 'LiveViewMonitorOffTime', Mask => 0x1c, PrintConv => { #(NC) 0x00 => '4 s', 0x04 => '10 s', # default 0x08 => '20 s', 0x0c => '1 min', 0x10 => '5 min', 0x14 => '10 min', }, }, 21.1 => { # CSc4-b Name => 'MenuMonitorOffTime', Mask => 0xe0, PrintConv => { 0x00 => '4 s', 0x20 => '10 s', # default 0x40 => '20 s', 0x60 => '1 min', 0x80 => '5 min', 0xa0 => '10 min', }, }, 21.2 => { # CSc4-c Name => 'ShootingInfoMonitorOffTime', Mask => 0x1c, PrintConv => { #(NC) 0x00 => '4 s', 0x04 => '10 s', # default 0x08 => '20 s', 0x0c => '1 min', 0x10 => '5 min', 0x14 => '10 min', }, }, 22.1 => { # CSe1 Name => 'FlashSyncSpeed', Mask => 0xf0, PrintConv => { 0x00 => '1/320 s (auto FP)', 0x10 => '1/250 s (auto FP)', 0x20 => '1/250 s', 0x30 => '1/200 s', 0x40 => '1/160 s', 0x50 => '1/125 s', 0x60 => '1/100 s', 0x70 => '1/80 s', 0x80 => '1/60 s', }, }, 22.2 => { # CSe2 Name => 'FlashShutterSpeed', Mask => 0x0f, PrintConvColumns => 2, PrintConv => { 0x00 => '1/60 s', 0x01 => '1/30 s', 0x02 => '1/15 s', 0x03 => '1/8 s', 0x04 => '1/4 s', 0x05 => '1/2 s', 0x06 => '1 s', 0x07 => '2 s', 0x08 => '4 s', 0x09 => '8 s', 0x0a => '15 s', 0x0b => '30 s', }, }, 23.1 => { # CSe3 Name => 'FlashControlBuilt-in', Mask => 0xc0, RawConv => '$$self{FlashControlBuiltin} = $val', PrintConv => { 0x00 => 'TTL', 0x40 => 'Manual', 0x80 => 'Repeating Flash', 0xc0 => 'Commander Mode', }, }, 23.2 => { # CSe3-b Name => 'ManualFlashOutput', Condition => '$$self{FlashControlBuiltin} == 0x40', Mask => 0x1f, ValueConv => '2 ** (-$val/3)', ValueConvInv => '$val > 0 ? -3*log($val)/log(2) : 0', PrintConv => q{ return 'Full' if $val > 0.99; Image::ExifTool::Exif::PrintExposureTime($val); }, PrintConvInv => '$val=~/F/i ? 1 : Image::ExifTool::Exif::ConvertFraction($val)', }, 24.1 => { # CSe3-ca Name => 'RepeatingFlashOutput', Condition => '$$self{FlashControlBuiltin} == 0x80', Mask => 0x70, ValueConv => '2 ** (-($val>>4)-2)', ValueConvInv => '$val > 0 ? int(-log($val)/log(2)-2+0.5)<<4 : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 24.2 => { # CSe3-cb Name => 'RepeatingFlashCount', Condition => '$$self{FlashControlBuiltin} == 0x80', Mask => 0x0f, ValueConv => '$val < 10 ? $val + 1 : 5 * ($val - 7)', ValueConvInv => '$val <= 10 ? $val - 1 : $val / 5 + 7', }, 25.1 => { # CSe3-cc (NC) Name => 'RepeatingFlashRate', Condition => '$$self{FlashControlBuiltin} == 0x80', Mask => 0xf0, ValueConv => 'my $v=($val>>4); $v < 10 ? $v + 1 : 10 * ($v - 8)', ValueConvInv => 'int(($val <= 10 ? $val - 1 : $val / 10 + 8) + 0.5) << 4', PrintConv => '"$val Hz"', PrintConvInv => '$val=~/(\d+)/; $1 || 0', }, 26.1 => { # CSe3-da Name => 'CommanderInternalTTLCompBuiltin', Condition => '$$self{FlashControlBuiltin} == 0xc0', Mask => 0x1f, ValueConv => '($val - 9) / 3', ValueConvInv => '$val * 3 + 9', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, 27.1 => { # CSe3-db Name => 'CommanderInternalTTLCompGroupA', Condition => '$$self{FlashControlBuiltin} == 0xc0', Mask => 0x1f, ValueConv => '($val - 9) / 3', ValueConvInv => '$val * 3 + 9', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, 28.1 => { # CSe3-dc Name => 'CommanderInternalTTLCompGroupB', Condition => '$$self{FlashControlBuiltin} == 0xc0', Mask => 0x1f, ValueConv => '($val - 9) / 3', ValueConvInv => '$val * 3 + 9', PrintConv => '$val ? sprintf("%+.1f",$val) : 0', PrintConvInv => '$val', }, 30.1 => { # CSd11 Name => 'FlashWarning', Mask => 0x80, PrintConv => { 0x00 => 'On', 0x80 => 'Off', }, }, 30.2 => { # CSe4 Name => 'ModelingFlash', Mask => 0x20, PrintConv => { 0x00 => 'On', 0x20 => 'Off' }, }, 34.1 => { # CSa8-b Name => 'LiveViewAFAreaMode', Mask => 0x60, PrintConv => { 0x00 => 'Face-Priority', 0x20 => 'NormalArea', 0x40 => 'WideArea', 0x60 => 'SubjectTracking', }, }, 34.2 => { # CSa8-a Name => 'LiveViewAFMode', Mask => 0x02, PrintConv => { 0x00 => 'AF-C', 0x02 => 'AF-F', }, }, 35.1 => { # CSc4-a Name => 'PlaybackMonitorOffTime', Mask => 0xe0, PrintConv => { 0x00 => '4 s', 0x20 => '10 s', # default 0x40 => '20 s', 0x60 => '1 min', 0x80 => '5 min', 0xa0 => '10 min', }, }, ); # D4/D4S custom settings (ref 1, decoded from D4S) %Image::ExifTool::NikonCustom::SettingsD4 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Custom settings for the D4 and D4S.', 0.1 => { Name => 'CustomSettingsBank', Mask => 0x03, PrintConv => { 0 => 'A', 1 => 'B', 2 => 'C', 3 => 'D', }, }, 1.1 => { #CSa1 Name => 'AF-CPrioritySelection', Mask => 0xc0, PrintConv => { 0x00 => 'Release', 0x40 => 'Release + Focus', 0x80 => 'Focus', 0xc0 => 'Focus + Release', }, }, 1.2 => { # CSa2 Name => 'AF-SPrioritySelection', Mask => 0x20, PrintConv => { 0x00 => 'Focus', 0x20 => 'Release', }, }, 1.3 => { # CSa7 Name => 'AFPointSelection', Mask => 0x10, PrintConv => { 0x00 => '51 Points', 0x10 => '11 Points', }, }, 1.4 => { # CSa3 Name => 'FocusTrackingLockOn', Mask => 0x07, PrintConv => { 0x00 => 'Off', 0x01 => '1 (Short)', 0x02 => '2', 0x03 => '3 (Normal)', 0x04 => '4', 0x05 => '5 (Long)', }, }, 2.1 => { # CSa4 Name => 'AFActivation', Mask => 0x80, PrintConv => { 0x00 => 'Shutter/AF-On', 0x80 => 'AF-On Only', }, }, 2.2 => { # CSa6 Name => 'FocusPointWrap', Mask => 0x08, PrintConv => { 0x00 => 'No Wrap', 0x08 => 'Wrap', }, }, 4.1 => { # CSd1-b Name => 'Pitch', Mask => 0x40, PrintConv => { 0x00 => 'High', 0x40 => 'Low' }, }, 4.2 => { # CSf12 Name => 'NoMemoryCard', Mask => 0x20, PrintConv => { 0x00 => 'Release Locked', 0x20 => 'Enable Release', }, }, 4.3 => { # CSd6 Name => 'GridDisplay', Mask => 0x02, PrintConv => { 0x00 => 'On', 0x02 => 'Off' }, }, 5.1 => { # CSd9 Name => 'ShootingInfoDisplay', Mask => 0xc0, PrintConv => { # 0x00 - seen for D4 (PH) 0x40 => 'Auto', 0x80 => 'Manual (dark on light)', 0xc0 => 'Manual (light on dark)', }, }, 5.2 => { # CSd10 Name => 'LCDIllumination', Mask => 0x20, PrintConv => { 0x00 => 'Off', 0x20 => 'On' }, }, 5.3 => { # CSd8 Name => 'ScreenTips', Mask => 0x04, PrintConv => { 0x00 => 'Off', 0x04 => 'On' }, }, 5.4 => { # CSd1-a Name => 'Beep', Mask => 0x03, PrintConv => { 0x00 => 'Off', 0x01 => 'Low', 0x02 => 'Medium', 0x03 => 'High', }, }, 6.1 => { # CSf13 Name => 'ReverseIndicators', Mask => 0x80, PrintConv => { 0x00 => '+ 0 -', 0x80 => '- 0 +', }, }, 6.2 => { # CSd7-a Name => 'RearDisplay', Mask => 0x40, PrintConv => { 0x00 => 'ISO', 0x40 => 'Exposures Remaining', }, }, 6.3 => { # CSd7-b Name => 'ViewfinderDisplay', Mask => 0x20, PrintConv => { 0x00 => 'Frame Count', 0x20 => 'Exposures Remaining', }, }, 6.4 => { # CSd10-a Name => 'CommandDialsReverseRotation', Mask => 0x18, PrintConv => { 0x00 => 'No', 0x08 => 'Shutter Speed & Aperture', 0x10 => 'Exposure Compensation', 0x18 => 'Exposure Compensation, Shutter Speed & Aperture', }, }, 6.5 => { # CSb4 Name => 'EasyExposureCompensation', Mask => 0x03, PrintConv => { 0x00 => 'Off', 0x01 => 'On', 0x02 => 'On (auto reset)', }, }, 7.1 => { # CSb2 Name => 'ExposureControlStepSize', Mask => 0xc0, PrintConv => { 0x00 => '1/3 EV', 0x40 => '1/2 EV', 0x80 => '1 EV', }, }, 7.2 => { # CSb1 Name => 'ISOStepSize', Mask => 0x30, PrintConv => { 0x00 => '1/3 EV', 0x10 => '1/2 EV', 0x20 => '1 EV', }, }, 7.3 => { # CSb3 Name => 'ExposureCompStepSize', Mask => 0x0c, PrintConv => { 0x00 => '1/3 EV', 0x04 => '1/2 EV', 0x08 => '1 EV', }, }, 8.1 => { # CSb6 (CSb5 for D4) Name => 'CenterWeightedAreaSize', Mask => 0xe0, PrintConv => { 0x00 => '8 mm', 0x20 => '12 mm', 0x40 => '15 mm', 0x60 => '20 mm', 0x80 => 'Average', }, }, 8.2 => { # CSb7-a Name => 'FineTuneOptMatrixMetering', Mask => 0x0f, ValueConv => '($val > 0x7 ? $val - 0x10 : $val) / 6', ValueConvInv => 'int($val*6+($val>0?0.5:-0.5)) & 0x0f', PrintConv => '$val ? sprintf("%+.2f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 9.1 => { # CSb7-b Name => 'FineTuneOptCenterWeighted', Mask => 0xf0, ValueConv => '($val > 0x70 ? $val - 0x100 : $val) / 0x60', ValueConvInv => '(int($val*6+($val>0?0.5:-0.5))<<4) & 0xf0', PrintConv => '$val ? sprintf("%+.2f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 9.2 => { # CSb7-c Name => 'FineTuneOptSpotMetering', Mask => 0x0f, ValueConv => '($val > 0x7 ? $val - 0x10 : $val) / 6', ValueConvInv => 'int($val*6+($val>0?0.5:-0.5)) & 0x0f', PrintConv => '$val ? sprintf("%+.2f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 10.1 => { # CSf1-a Name => 'MultiSelectorShootMode', Mask => 0xc0, PrintConv => { 0x00 => 'Select Center Focus Point (Reset)', 0x80 => 'Preset Focus Point (Pre)', 0xc0 => 'Not Used (None)', }, }, 10.2 => { # CSf1-b Name => 'MultiSelectorPlaybackMode', Mask => 0x30, PrintConv => { 0x00 => 'Thumbnail On/Off', 0x10 => 'View Histograms', 0x20 => 'Zoom On/Off', 0x30 => 'Choose Folder', }, }, 10.3 => { # CSf2 Name => 'MultiSelector', Mask => 0x01, PrintConv => { 0x00 => 'Do Nothing', 0x01 => 'Reset Meter-off Delay', }, }, 11.1 => { # CSd4 Name => 'ExposureDelayMode', Mask => 0xc0, PrintConv => { 0x00 => 'Off', 0x40 => '1 s', 0x80 => '2 s', 0xc0 => '3 s', }, }, 11.2 => { # CSd2-a Name => 'CHModeShootingSpeed', Mask => 0x10, PrintConv => { 0x00 => '10 fps', 0x10 => '11 fps', }, }, 11.3 => { # CSd2-b Name => 'CLModeShootingSpeed', Mask => 0x0f, PrintConv => '"$val fps"', PrintConvInv => '$val=~s/\s*fps//i; $val', }, 12 => { # CSd3 Name => 'MaxContinuousRelease', # values: 1-200 }, 13.1 => { # CSe6 Name => 'AutoBracketSet', Mask => 0xe0, PrintConv => { 0x00 => 'AE & Flash', 0x20 => 'AE Only', 0x40 => 'Flash Only', 0x60 => 'WB Bracketing', 0x80 => 'Active D-Lighting', }, }, 13.2 => { # CSe8 Name => 'AutoBracketOrder', Mask => 0x10, PrintConv => { 0x00 => '0,-,+', 0x10 => '-,0,+', }, }, 13.3 => { # CSe7 Name => 'AutoBracketModeM', Mask => 0x0c, PrintConv => { 0x00 => 'Flash/Speed', 0x04 => 'Flash/Speed/Aperture', 0x08 => 'Flash/Aperture', 0x0c => 'Flash Only', }, }, 14.1 => { # CSf3-a Name => 'FuncButton', Mask => 0xf8, PrintConv => { 0x00 => 'None', 0x08 => 'Preview', 0x10 => 'FV Lock', 0x18 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x28 => 'AE Lock (reset on release)', 0x30 => 'AE Lock (hold)', 0x38 => 'AF Lock Only', 0x40 => 'AF-On', 0x50 => 'Bracketing Burst', 0x58 => 'Matrix Metering', 0x60 => 'Center-weighted Metering', 0x68 => 'Spot Metering', 0x70 => 'Playback', 0x78 => 'My Menu Top Item', 0x80 => '+NEF(RAW)', 0x88 => 'Virtual Horizon', 0x90 => 'My Menu', 0xa0 => 'Grid Display', 0xa8 => 'Disable Synchronized Release', 0xb0 => 'Remote Release Only', 0xd0 => 'Flash Disable/Enable', }, }, 14.2 => { # CSf3-b Name => 'FuncButtonPlusDials', Mask => 0x07, PrintConv => { 0 => 'None', 1 => 'Choose Image Area (FX/DX/5:4)', 2 => 'Shutter Speed & Aperture Lock', 3 => 'One Step Speed / Aperture', 4 => 'Choose Non-CPU Lens Number', 5 => 'Active D-Lighting', 6 => 'Shooting Bank Menu', }, }, 15.1 => { # CSf4-a Name => 'PreviewButton', Mask => 0xf8, PrintConv => { 0x00 => 'None', 0x08 => 'Preview', 0x10 => 'FV Lock', 0x18 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x28 => 'AE Lock (reset on release)', 0x30 => 'AE Lock (hold)', 0x38 => 'AF Lock Only', 0x40 => 'AF-On', 0x50 => 'Bracketing Burst', 0x58 => 'Matrix Metering', 0x60 => 'Center-weighted Metering', 0x68 => 'Spot Metering', 0x70 => 'Playback', 0x78 => 'My Menu Top Item', 0x80 => '+NEF(RAW)', 0x88 => 'Virtual Horizon', 0x90 => 'My Menu', 0xa0 => 'Grid Display', 0xa8 => 'Disable Synchronized Release', 0xb0 => 'Remote Release Only', 0xd0 => 'Flash Disable/Enable', }, }, 15.2 => { # CSf4-b Name => 'PreviewButtonPlusDials', Mask => 0x07, PrintConv => { 0 => 'None', 1 => 'Choose Image Area (FX/DX/5:4)', 2 => 'Shutter Speed & Aperture Lock', 3 => 'One Step Speed / Aperture', 4 => 'Choose Non-CPU Lens Number', 5 => 'Active D-Lighting', 6 => 'Shooting Bank Menu', }, }, 16.1 => { # CSf9 Name => 'AssignBktButton', Mask => 0x07, PrintConv => { 0 => 'Auto Bracketing', 1 => 'Multiple Exposure', 2 => 'HDR (high dynamic range)', 3 => 'None', }, }, 18.1 => { # CSf10-b Name => 'CommandDialsChangeMainSub', Mask => 0xe0, PrintConv => { 0x00 => 'Autofocus Off, Exposure Off', 0x20 => 'Autofocus Off, Exposure On', 0x40 => 'Autofocus Off, Exposure On (Mode A)', 0x80 => 'Autofocus On, Exposure Off', 0xa0 => 'Autofocus On, Exposure On', 0xc0 => 'Autofocus On, Exposure On (Mode A)', }, }, 18.2 => { # CSf10-d Name => 'CommandDialsMenuAndPlayback', Mask => 0x18, PrintConv => { 0x00 => 'On', 0x08 => 'Off', 0x10 => 'On (Image Review Excluded)', }, }, 18.3 => { # CSf10-c Name => 'CommandDialsApertureSetting', Mask => 0x04, PrintConv => { 0x00 => 'Sub-command Dial', 0x04 => 'Aperture Ring', }, }, 18.4 => { # CSc1 Name => 'ShutterReleaseButtonAE-L', Mask => 0x02, PrintConv => { 0x00 => 'Off', 0x02 => 'On' }, }, 18.5 => { # CSf11 Name => 'ReleaseButtonToUseDial', Mask => 0x01, PrintConv => { 0x00 => 'No', 0x01 => 'Yes' }, }, 19.1 => { # CSc2 Name => 'StandbyTimer', Mask => 0xf0, PrintConv => { 0x00 => '4 s', 0x10 => '6 s', 0x30 => '10 s', 0x50 => '30 s', 0x60 => '1 min', 0x70 => '5 min', 0x80 => '10 min', 0x90 => '30 min', }, }, 20.1 => { # CSc3-a Name => 'SelfTimerTime', Mask => 0xc0, PrintConv => { 0x00 => '2 s', 0x40 => '5 s', 0x80 => '10 s', 0xc0 => '20 s', }, }, 20.2 => { # CSc3-b Name => 'SelfTimerShotCount', Mask => 0x0f, }, 20.3 => { # CSc3-c Name => 'SelfTimerShotInterval', Mask => 0x30, PrintConv => { 0x00 => '0.5 s', 0x10 => '1 s', 0x20 => '2 s', 0x30 => '3 s', }, }, 21.1 => { # CSc4-d Name => 'ImageReviewMonitorOffTime', Mask => 0xe0, PrintConv => { 0x00 => '2 s', 0x20 => '4 s', 0x40 => '10 s', 0x60 => '20 s', 0x80 => '1 min', 0xa0 => '5 min', 0xc0 => '10 min', }, }, 21.2 => { # CSc4-e Name => 'LiveViewMonitorOffTime', Mask => 0x1c, PrintConv => { 0x00 => '5 min', 0x04 => '10 min', 0x08 => '15 min', 0x0c => '20 min', 0x10 => '30 min', 0x14 => 'No Limit', }, }, 22.1 => { # CSc4-b Name => 'MenuMonitorOffTime', Mask => 0xe0, PrintConv => { 0x00 => '4 s', 0x20 => '10 s', 0x40 => '20 s', 0x60 => '1 min', 0x80 => '5 min', 0xa0 => '10 min', }, }, 22.2 => { # CSc4-c Name => 'ShootingInfoMonitorOffTime', Mask => 0x1c, PrintConv => { 0x00 => '4 s', 0x04 => '10 s', 0x08 => '20 s', 0x0c => '1 min', 0x10 => '5 min', 0x14 => '10 min', }, }, 23.1 => { # CSe1 Name => 'FlashSyncSpeed', Mask => 0xf0, PrintConv => { # 0x00 - seen for D4 (PH) 0x10 => '1/250 s (auto FP)', 0x20 => '1/250 s', 0x30 => '1/200 s', 0x40 => '1/160 s', 0x50 => '1/125 s', 0x60 => '1/100 s', 0x70 => '1/80 s', 0x80 => '1/60 s', }, }, 23.2 => { # CSe2 Name => 'FlashShutterSpeed', Mask => 0x0f, PrintConvColumns => 2, PrintConv => { 0x00 => '1/60 s', 0x01 => '1/30 s', 0x02 => '1/15 s', 0x03 => '1/8 s', 0x04 => '1/4 s', 0x05 => '1/2 s', 0x06 => '1 s', 0x07 => '2 s', 0x08 => '4 s', 0x09 => '8 s', 0x0a => '15 s', 0x0b => '30 s', }, }, 31.1 => { # CSe5 Name => 'ModelingFlash', Mask => 0x20, PrintConv => { 0x00 => 'On', 0x20 => 'Off', }, }, 36.1 => { # CSc4-a Name => 'PlaybackMonitorOffTime', Mask => 0xe0, PrintConv => { 0x00 => '4 s', 0x20 => '10 s', 0x40 => '20 s', 0x60 => '1 min', 0x80 => '5 min', 0xa0 => '10 min', }, }, 37.1 => { # CSf15 Name => 'PlaybackZoom', Mask => 0x01, PrintConv => { 0x00 => 'Use Separate Zoom Buttons', 0x01 => 'Use Either Zoom Button with Command Dial', }, }, 38.1 => { # CSf8-a Name => 'ShutterSpeedLock', Mask => 0x80, PrintConv => { 0x00 => 'Off', 0x80 => 'On', }, }, 38.2 => { # CSf8-b Name => 'ApertureLock', Mask => 0x40, PrintConv => { 0x00 => 'Off', 0x40 => 'On', }, }, 38.3 => { # CSg4 Name => 'MovieShutterButton', Mask => 0x30, PrintConv => { 0x00 => 'Take Photo', 0x10 => 'Record Movies', 0x20 => 'Live Frame Grab', }, }, 38.4 => { # CSe4 Name => 'FlashExposureCompArea', Mask => 0x04, PrintConv => { 0x00 => 'Entire frame', 0x04 => 'Background only', }, }, 41.1 => { # CSg1-a Name => 'MovieFunctionButton', Mask => 0x70, PrintConv => { 0x00 => 'None', 0x10 => 'Power Aperture (open)', # bit '02' is also toggled on for this setting 0x30 => 'Index Marking', 0x40 => 'View Photo Shooting Info', }, }, 41.2 => { # CSg2-a Name => 'MoviePreviewButton', Mask => 0x07, PrintConv => { 0x00 => 'None', 0x02 => 'Power Aperture (open)', # bit '10' is also toggled on for this setting 0x03 => 'Index Marking', 0x04 => 'View Photo Shooting Info', }, }, 42.1 => { # CSf14 Name => 'VerticalMultiSelector', Mask => 0x60, PrintConv => { 0x00 => 'Same as Multi-Selector with Info(U/D) & Playback(R/L)', 0x20 => 'Same as Multi-Selector with Info(R/L) & Playback(U/D)', 0x40 => 'Focus Point Selection', }, }, 42.2 => { # CSf7-a Name => 'VerticalFuncButton', Mask => 0x1f, PrintConv => { 0 => 'None', 1 => 'Preview', 2 => 'FV Lock', 3 => 'AE/AF Lock', 4 => 'AE Lock Only', 5 => 'AE Lock (reset on release)', 6 => 'AE Lock (hold)', 7 => 'AF Lock Only', 10 => 'Bracketing Burst', 11 => 'Matrix Metering', 12 => 'Center-weighted Metering', 13 => 'Spot Metering', 14 => 'Playback', 15 => 'My Menu Top Item', 16 => '+NEF(RAW)', 17 => 'Virtual Horizon', 18 => 'My Menu', 20 => 'Grid Display', 26 => 'Flash Disable/Enable', }, }, 43.1 => { # CSf7-b Name => 'VerticalFuncButtonPlusDials', Mask => 0xf0, PrintConv => { 0x00 => 'None', 0x10 => 'Choose Image Area (FX/DX/5:4)', 0x20 => 'Shutter Speed & Aperture Lock', 0x30 => 'One Step Speed / Aperture', 0x40 => 'Choose Non-CPU Lens Number', 0x50 => 'Active D-Lighting', 0x60 => 'Shooting Bank Menu', 0x70 => 'ISO Sensitivity', 0x80 => 'Exposure Mode', 0x90 => 'Exposure Compensation', 0xa0 => 'Metering', }, }, 43.2 => { # CSf16 Name => 'AssignMovieRecordButton', Mask => 0x07, PrintConv => { 0x00 => 'None', 0x01 => 'Choose Image Area (FX/DX/5:4)', 0x02 => 'Shutter Speed & Aperture Lock', 0x03 => 'ISO Sensitivity', 0x04 => 'Shooting Bank Menu', }, }, 46.1 => { # CSa5-c Name => 'DynamicAreaAFDisplay', Mask => 0x80, PrintConv => { 0x00 => 'Off', 0x80 => 'On', }, }, 46.2 => { # CSa5-a Name => 'AFPointIllumination', Mask => 0x60, PrintConv => { 0x00 => 'Off', 0x20 => 'On in Continuous Shooting Modes', 0x40 => 'On During Manual Focusing', 0x60 => 'On in Continuous Shooting and Manual Focusing', }, }, 46.3 => { # CSa10 (D4 is slightly different -- needs checking) Name => 'StoreByOrientation', Mask => 0x18, PrintConv => { 0x00 => 'Off', 0x08 => 'Focus Point', 0x10 => 'Focus Point and AF-area mode', }, }, 46.4 => { # CSa5-d Name => 'GroupAreaAFIllumination', Mask => 0x04, PrintConv => { 0x00 => 'Squares', 0x04 => 'Dots', }, }, 46.5 => { # CSa5-b Name => 'AFPointBrightness', Mask => 0x03, PrintConv => { 0x00 => 'Low', 0x01 => 'Normal', 0x02 => 'High', 0x03 => 'Extra High', }, }, 47.1 => { # CSa8 Name => 'AFOnButton', Mask => 0x70, PrintConv => { 0x00 => 'AF On', 0x10 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x30 => 'AE Lock (reset on release)', 0x40 => 'AE Lock (hold)', 0x50 => 'AF Lock Only', 0x60 => 'None', }, }, 47.2 => { # CSa9 Name => 'VerticalAFOnButton', Mask => 0x07, PrintConv => { 0 => 'Same as AF On', 1 => 'AF On', 2 => 'AE/AF Lock', 3 => 'AE Lock Only', 4 => 'AE Lock (reset on release)', 5 => 'AE Lock (hold)', 6 => 'AF Lock Only', 7 => 'None', }, }, 48.1 => { # CSf5 Name => 'SubSelectorAssignment', Mask => 0x80, PrintConv => { 0x00 => 'Focus Point Selection', 0x80 => 'Same As Multi-selector', }, }, 48.2 => { # CSg3-a Name => 'MovieSubSelectorAssignment', Mask => 0x07, PrintConv => { 0 => 'None', 1 => 'Index Marking', 2 => 'AE/AF Lock', 3 => 'AE Lock Only', 4 => 'AE Lock (hold)', 5 => 'AF Lock Only', 6 => 'View Photo Shooting Info', }, }, 49.1 => { # CSf6-a Name => 'SubSelector', Mask => 0xf8, PrintConv => { 0x00 => 'None', 0x08 => 'Preview', 0x10 => 'FV Lock', 0x18 => 'AE/AF Lock', 0x20 => 'AE Lock Only', 0x28 => 'AE Lock (reset on release)', 0x30 => 'AE Lock (hold)', 0x38 => 'AF Lock Only', 0x40 => 'AF-On', # 0x48 - seen for D4 (PH) 0x50 => 'Bracketing Burst', 0x58 => 'Matrix Metering', 0x60 => 'Center-weighted Metering', 0x68 => 'Spot Metering', 0x70 => 'Playback', 0x78 => 'My Menu Top Item', 0x80 => '+NEF(RAW)', 0x88 => 'Virtual Horizon', 0x90 => 'My Menu', 0x98 => 'Reset', # value appears to be specific to this control at this time 0xa0 => 'Grid Display', 0xa8 => 'Disable Synchronized Release', 0xb0 => 'Remote Release Only', 0xb8 => 'Preview', # value appears to be specific to this control at this time 0xd0 => 'Flash Disable/Enable', }, }, 49.2 => { # CSf6-b Name => 'SubSelectorPlusDials', Mask => 0x07, PrintConv => { # (not all values from CSf3-b/CSf4-b are available for CSf6-b) 0 => 'None', 1 => 'Choose Image Area (FX/DX/5:4)', 2 => 'Shutter Speed & Aperture Lock', # 3 => 'One Step Speed / Aperture', # (not available) 4 => 'Choose Non-CPU Lens Number', # 5 => 'Active D-Lighting', # (not available) 6 => 'Shooting Bank Menu', }, }, 50.1 => { # CSb5 Name => 'MatrixMetering', Condition => '$$self{Model} =~ /\bD4S/', Notes => 'D4S only', Mask => 0x80, PrintConv => { 0x00 => 'Face Detection On', 0x80 => 'Face Detection Off', }, }, 50.2 => { # CSf17 Name => 'LiveViewButtonOptions', Condition => '$$self{Model} =~ /\bD4S/', Notes => 'D4S only', Mask => 0x30, PrintConv => { 0x00 => 'Enable', 0x10 => 'Enable (standby time active)', 0x20 => 'Disable', }, }, 50.3 => { # CSa12 Name => 'AFModeRestrictions', Condition => '$$self{Model} =~ /\bD4S/', Notes => 'D4S only', Mask => 0x03, PrintConv => { 0x00 => 'Off', 0x01 => 'AF-C', 0x02 => 'AF-S', }, }, 51.1 => { # CSa11 Name => 'LimitAFAreaModeSelection', Condition => '$$self{Model} =~ /\bD4S/', Notes => 'D4S only', Mask => 0x7e, PrintConv => { 0 => 'No Restrictions', BITMASK => { 1 => 'Auto-area', 2 => 'Group-area', 3 => '3D-tracking', 4 => 'Dynamic area (51 points)', 5 => 'Dynamic area (21 points)', 6 => 'Dynamic area (9 points)', }, }, }, 52.1 => { # CSg1-b Name => 'MovieFunctionButtonPlusDials', Mask => 0x10, PrintConv => { 0x00 => 'None', 0x10 => 'Choose Image Area', }, }, 52.2 => { # CSg2-b Name => 'MoviePreviewButtonPlusDials', Mask => 0x01, PrintConv => { 0x00 => 'None', 0x01 => 'Choose Image Area', }, }, 53.1 => { # CSg3-b Name => 'MovieSubSelectorAssignmentPlusDials', Mask => 0x10, PrintConv => { 0x00 => 'None', 0x10 => 'Choose Image Area', }, }, 54.1 => { # CSf18 Name => 'AssignRemoteFnButton', Condition => '$$self{Model} =~ /\bD4S/', Notes => 'D4S only', Mask => 0x1f, PrintConv => { 0 => 'None', 1 => 'Preview', 2 => 'FV Lock', 3 => 'AE/AF Lock', 4 => 'AE Lock Only', 5 => 'AE Lock (reset on release)', 7 => 'AF Lock Only', 8 => 'AF-On', 16 => '+NEF(RAW)', 25 => 'Live View', 26 => 'Flash Disable/Enable', }, }, 55.1 => { # CSf19 Name => 'LensFocusFunctionButtons', Condition => '$$self{Model} =~ /\bD4S/', Notes => 'D4S only', Mask => 0x3f, PrintConv => { 3 => 'AE/AF Lock', 4 => 'AE Lock Only', 7 => 'AF Lock Only', 21 => 'Disable Synchronized Release', 22 => 'Remote Release Only', 24 => 'Preset focus Point', 26 => 'Flash Disable/Enable', 32 => 'AF-Area Mode: Single-point AF', 33 => 'AF-Area Mode: Dynamic-area AF (9 points)', 34 => 'AF-Area Mode: Dynamic-area AF (21 points)', 35 => 'AF-Area Mode: Dynamic-area AF (51 points)', 36 => 'AF-Area Mode: Group-area AF', 37 => 'AF-Area Mode: Auto area AF', }, }, ); 1; # end __END__ =head1 NAME Image::ExifTool::NikonCustom - Read and Write Nikon custom settings =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION The Nikon custom functions are very specific to the camera model (and sometimes even change with firmware version). The information is stored as unformatted binary data in the ShotInfo record of the Nikon MakerNotes. This module contains the definitions necessary for Image::ExifTool to decode this information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke and Warren Hatch for their help decoding the D300 and D3 custom settings. And thanks to the customer service personnel at Best Buy for not bugging me while I spent lots of time playing with their cameras. =head1 SEE ALSO L<Image::ExifTool::TagNames/Nikon Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Nintendo.pm�������������������������������������������������000644 �000765 �000024 �00000006373 12642461323 022034� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Nintendo.pm # # Description: Nintendo EXIF maker notes tags # # Revisions: 2014/03/25 - P. Harvey Created # # References: 1) http://3dbrew.org/wiki/MPO #------------------------------------------------------------------------------ package Image::ExifTool::Nintendo; use strict; use vars qw($VERSION); use Image::ExifTool::Exif; $VERSION = '1.00'; %Image::ExifTool::Nintendo::Main = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, # 0x1000 - undef[28] # 0x1001 - undef[8] # 0x1100 - undef[80] (found in MPO files) 0x1101 => { Name => 'CameraInfo', SubDirectory => { TagTable => 'Image::ExifTool::Nintendo::CameraInfo', ByteOrder => 'Little-endian', }, }, ); # Nintendo MPO info (ref 1) %Image::ExifTool::Nintendo::CameraInfo = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, PRIORITY => 0, FORMAT => 'int8u', FIRST_ENTRY => 0, 0x00 => { # "3DS1" Name => 'ModelID', Format => 'undef[4]', }, # 0x04 - int32u: 1,2,4,5 0x08 => { Name => 'TimeStamp', Format => 'int32u', Groups => { 2 => 'Time' }, Shift => 'Time', # zero time is 2000/01/01 (10957 days after Unix time zero) ValueConv => 'ConvertUnixTime($val + 10957 * 24 * 3600)', ValueConvInv => 'GetUnixTime($val) - 10957 * 24 * 3600', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', }, # 0x10 - int32u: title ID low # 0x14 - int32u: flags 0x18 => { Name => 'InternalSerialNumber', Groups => { 2 => 'Camera' }, Format => 'undef[4]', ValueConv => '"0x" . unpack("H*",$val)', ValueConvInv => '$val=~s/^0x//; pack("H*",$val)', }, 0x28 => { Name => 'Parallax', Format => 'float', PrintConv => 'sprintf("%.2f", $val)', PrintConvInv => '$val', }, 0x30 => { Name => 'Category', Format => 'int16u', PrintHex => 1, PrintConv => { 0x0000 => '(none)', 0x1000 => 'Mii', 0x2000 => 'Man', 0x4000 => 'Woman', }, }, # 0x32 - int16u: filter ); 1; # end __END__ =head1 NAME Image::ExifTool::Nintendo - Nintendo EXIF maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Nintendo maker notes EXIF meta information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://3dbrew.org/wiki/MPO> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Nintendo Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Ogg.pm������������������������������������������������������000644 �000765 �000024 �00000021002 12642461323 020754� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Ogg.pm # # Description: Read Ogg meta information # # Revisions: 2011/07/13 - P. Harvey Created (split from Vorbis.pm) # # References: 1) http://www.xiph.org/vorbis/doc/ # 2) http://flac.sourceforge.net/ogg_mapping.html # 3) http://www.theora.org/doc/Theora.pdf #------------------------------------------------------------------------------ package Image::ExifTool::Ogg; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.01'; my $MAX_PACKETS = 2; # maximum packets to scan from each stream at start of file # Information types recognizedi in Ogg files %Image::ExifTool::Ogg::Main = ( NOTES => q{ ExifTool extracts the following types of information from Ogg files. See L<http://www.xiph.org/vorbis/doc/> for the Ogg specification. }, # (these are for documentation purposes only, and aren't used by the code below) vorbis => { SubDirectory => { TagTable => 'Image::ExifTool::Vorbis::Main' } }, theora => { SubDirectory => { TagTable => 'Image::ExifTool::Theora::Main' } }, FLAC => { SubDirectory => { TagTable => 'Image::ExifTool::FLAC::Main' } }, ID3 => { SubDirectory => { TagTable => 'Image::ExifTool::ID3::Main' } }, ); #------------------------------------------------------------------------------ # Process Ogg packet # Inputs: 0) ExifTool object ref, 1) data ref # Returns: 1 on success sub ProcessPacket($$) { my ($et, $dataPt) = @_; my $rtnVal = 0; if ($$dataPt =~ /^(.)(vorbis|theora)/s) { my ($tag, $type) = (ord($1), ucfirst($2)); # this is an OGV file if it contains Theora video $et->OverrideFileType('OGV') if $type eq 'Theora' and $$et{FILE_TYPE} eq 'OGG'; my $tagTablePtr = GetTagTable("Image::ExifTool::${type}::Main"); my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); return 0 unless $tagInfo and $$tagInfo{SubDirectory}; my $subdir = $$tagInfo{SubDirectory}; my %dirInfo = ( DataPt => $dataPt, DirName => $$tagInfo{Name}, DirStart => 7, ); my $table = GetTagTable($$subdir{TagTable}); # set group1 so Theoris comments can be distinguised from Vorbis comments $$et{SET_GROUP1} = $type if $type eq 'Theora'; SetByteOrder($$subdir{ByteOrder}) if $$subdir{ByteOrder}; $rtnVal = $et->ProcessDirectory(\%dirInfo, $table); SetByteOrder('II'); delete $$et{SET_GROUP1}; } return $rtnVal; } #------------------------------------------------------------------------------ # Extract information from an Ogg file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid Ogg file sub ProcessOGG($$) { my ($et, $dirInfo) = @_; # must first check for leading/trailing ID3 information unless ($$et{DoneID3}) { require Image::ExifTool::ID3; Image::ExifTool::ID3::ProcessID3($et, $dirInfo) and return 1; } my $raf = $$dirInfo{RAF}; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my ($success, $page, $packets, $streams, $stream) = (0,0,0,0,''); my ($buff, $flag, %val, $numFlac, %streamPage); for (;;) { # must read ahead to next page to see if it is a continuation # (this code would be a lot simpler if the continuation flag # was on the leading instead of the trailing page!) if ($raf and $raf->Read($buff, 28) == 28) { # validate magic number unless ($buff =~ /^OggS/) { $success and $et->Warn('Lost synchronization'); last; } unless ($success) { # set file type and initialize on first page $success = 1; $et->SetFileType(); SetByteOrder('II'); } $flag = Get8u(\$buff, 5); # page flag $stream = Get32u(\$buff, 14); # stream serial number if ($flag & 0x02) { ++$streams; # count start-of-stream pages $streamPage{$stream} = $page = 0; } else { $page = $streamPage{$stream}; } ++$packets unless $flag & 0x01; # keep track of packet count } else { # all done unless we have to process our last packet last unless %val; ($stream) = sort keys %val; # take a stream $flag = 0; # no continuation undef $raf; # flag for done reading } if (defined $numFlac) { # stop to process FLAC headers if we hit the end of file last unless $raf; --$numFlac; # one less header packet to read } else { # can finally process previous packet from this stream # unless this is a continuation page if (defined $val{$stream} and not $flag & 0x01) { ProcessPacket($et, \$val{$stream}); delete $val{$stream}; # only read the first $MAX_PACKETS packets from each stream if ($packets > $MAX_PACKETS * $streams or not defined $raf) { last unless %val; # all done (success!) } } # stop processing Ogg if we have scanned enough packets last if $packets > $MAX_PACKETS * $streams and not %val; } # continue processing the current page my $pageNum = Get32u(\$buff, 18); # page sequence number my $nseg = Get8u(\$buff, 26); # number of segments # calculate total data length my $dataLen = Get8u(\$buff, 27); if ($nseg) { $raf->Read($buff, $nseg-1) == $nseg-1 or last; my @segs = unpack('C*', $buff); # could check that all these (but the last) are 255... foreach (@segs) { $dataLen += $_ } } if (defined $page) { if ($page == $pageNum) { $streamPage{$stream} = ++$page; } else { $et->Warn('Missing page(s) in Ogg file'); undef $page; delete $streamPage{$stream}; } } # read page data $raf->Read($buff, $dataLen) == $dataLen or last; if ($verbose > 1) { printf $out "Page %d, stream 0x%x, flag 0x%x (%d bytes)\n", $pageNum, $stream, $flag, $dataLen; $et->VerboseDump(\$buff, DataPos => $raf->Tell() - $dataLen); } if (defined $val{$stream}) { $val{$stream} .= $buff; # add this continuation page } elsif (not $flag & 0x01) { # ignore remaining pages of a continued packet # ignore the first page of any packet we aren't parsing if ($buff =~ /^(.)(vorbis|theora)/s) { $val{$stream} = $buff; # save this page } elsif ($buff =~ /^\x7fFLAC..(..)/s) { $numFlac = unpack('n',$1); $val{$stream} = substr($buff, 9); } } if (defined $numFlac) { # stop to process FLAC headers if we have them all last if $numFlac <= 0; } elsif (defined $val{$stream} and $flag & 0x04) { # process Ogg packet now if end-of-stream bit is set ProcessPacket($et, \$val{$stream}); delete $val{$stream}; } } if (defined $numFlac and defined $val{$stream}) { # process FLAC headers as if it was a complete FLAC file require Image::ExifTool::FLAC; my %dirInfo = ( RAF => new File::RandomAccess(\$val{$stream}) ); Image::ExifTool::FLAC::ProcessFLAC($et, \%dirInfo); } return $success; } 1; # end __END__ =head1 NAME Image::ExifTool::Ogg - Read Ogg meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from Ogg bitstream container files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.xiph.org/vorbis/doc/> =item L<http://flac.sourceforge.net/ogg_mapping.html> =item L<http://www.theora.org/doc/Theora.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Ogg Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Olympus.pm��������������������������������������������������000644 �000765 �000024 �00000403717 12643231632 021730� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Olympus.pm # # Description: Olympus/Epson EXIF maker notes tags # # Revisions: 12/09/2003 - P. Harvey Created # 11/11/2004 - P. Harvey Added Epson support # # References: 1) http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html # 2) http://www.cybercom.net/~dcoffin/dcraw/ # 3) http://www.ozhiker.com/electronics/pjmt/jpeg_info/olympus_mn.html # 4) Markku HŠnninen private communication (tests with E-1) # 5) RŽmi Guyomarch from http://forums.dpreview.com/forums/read.asp?forum=1022&message=12790396 # 6) Frank Ledwon private communication (tests with E/C-series cameras) # 7) Michael Meissner private communication # 8) Shingo Noguchi, PhotoXP (http://www.daifukuya.com/photoxp/) # 9) Mark Dapoz private communication # 10) Lilo Huang private communication (E-330) # 11) http://olypedia.de/Olympus_Makernotes (May 30, 2013) # 12) Ioannis Panagiotopoulos private communication (E-510) # 13) Chris Shaw private communication (E-3) # 14) Viktor Lushnikov private communication (E-400) # 15) Yrjo Rauste private communication (E-30) # 16) Godfrey DiGiorgi private communcation (E-P1) + http://forums.dpreview.com/forums/read.asp?message=33187567 # 17) Martin Hibers private communication # 18) Tomasz Kawecki private communication # 19) Brad Grier private communication # 20) Niels Kristian Bech Jensen private communication # 21) Iliah Borg private communication (LibRaw) # 22) Herbert Kauer private communication #------------------------------------------------------------------------------ package Image::ExifTool::Olympus; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; use Image::ExifTool::APP12; $VERSION = '2.36'; sub PrintLensInfo($$$); my %offOn = ( 0 => 'Off', 1 => 'On' ); # lookup for Olympus LensType values # (as of ExifTool 9.15, this was the complete list of chipped lenses at www.four-thirds.org) my %olympusLensTypes = ( Notes => q{ The numerical values below are given in hexadecimal. (Prior to ExifTool 9.15 these were in decimal.) }, '0 00 00' => 'None', # Olympus lenses (also Kenko Tokina) '0 01 00' => 'Olympus Zuiko Digital ED 50mm F2.0 Macro', '0 01 01' => 'Olympus Zuiko Digital 40-150mm F3.5-4.5', #8 '0 01 10' => 'Olympus M.Zuiko Digital ED 14-42mm F3.5-5.6', #PH (E-P1 pre-production) '0 02 00' => 'Olympus Zuiko Digital ED 150mm F2.0', '0 02 10' => 'Olympus M.Zuiko Digital 17mm F2.8 Pancake', #PH (E-P1 pre-production) '0 03 00' => 'Olympus Zuiko Digital ED 300mm F2.8', '0 03 10' => 'Olympus M.Zuiko Digital ED 14-150mm F4.0-5.6 [II]', #11 (The second version of this lens seems to have the same lens ID number as the first version #20) '0 04 10' => 'Olympus M.Zuiko Digital ED 9-18mm F4.0-5.6', #11 '0 05 00' => 'Olympus Zuiko Digital 14-54mm F2.8-3.5', '0 05 01' => 'Olympus Zuiko Digital Pro ED 90-250mm F2.8', #9 '0 05 10' => 'Olympus M.Zuiko Digital ED 14-42mm F3.5-5.6 L', #11 (E-PL1) '0 06 00' => 'Olympus Zuiko Digital ED 50-200mm F2.8-3.5', '0 06 01' => 'Olympus Zuiko Digital ED 8mm F3.5 Fisheye', #9 '0 06 10' => 'Olympus M.Zuiko Digital ED 40-150mm F4.0-5.6', #PH '0 07 00' => 'Olympus Zuiko Digital 11-22mm F2.8-3.5', '0 07 01' => 'Olympus Zuiko Digital 18-180mm F3.5-6.3', #6 '0 07 10' => 'Olympus M.Zuiko Digital ED 12mm F2.0', #PH '0 08 01' => 'Olympus Zuiko Digital 70-300mm F4.0-5.6', #7 (seen as release 1 - PH) '0 08 10' => 'Olympus M.Zuiko Digital ED 75-300mm F4.8-6.7', #PH '0 09 10' => 'Olympus M.Zuiko Digital 14-42mm F3.5-5.6 II', #PH (E-PL2) '0 10 01' => 'Kenko Tokina Reflex 300mm F6.3 MF Macro', #20 '0 10 10' => 'Olympus M.Zuiko Digital ED 12-50mm F3.5-6.3 EZ', #PH '0 11 10' => 'Olympus M.Zuiko Digital 45mm F1.8', #17 '0 12 10' => 'Olympus M.Zuiko Digital ED 60mm F2.8 Macro', #20 '0 13 10' => 'Olympus M.Zuiko Digital 14-42mm F3.5-5.6 II R', #PH/20 '0 14 10' => 'Olympus M.Zuiko Digital ED 40-150mm F4.0-5.6 R', #19 # '0 14 10.1' => 'Olympus M.Zuiko Digital ED 14-150mm F4.0-5.6 II', #11 (questionable & unconfirmed -- all samples I can find are '0 3 10' - PH) '0 15 00' => 'Olympus Zuiko Digital ED 7-14mm F4.0', '0 15 10' => 'Olympus M.Zuiko Digital ED 75mm F1.8', #PH '0 16 10' => 'Olympus M.Zuiko Digital 17mm F1.8', #20 '0 17 00' => 'Olympus Zuiko Digital Pro ED 35-100mm F2.0', #7 '0 18 00' => 'Olympus Zuiko Digital 14-45mm F3.5-5.6', '0 18 10' => 'Olympus M.Zuiko Digital ED 75-300mm F4.8-6.7 II', #20 '0 19 10' => 'Olympus M.Zuiko Digital ED 12-40mm F2.8 Pro', #PH '0 20 00' => 'Olympus Zuiko Digital 35mm F3.5 Macro', #9 '0 20 10' => 'Olympus M.Zuiko Digital ED 40-150mm F2.8 Pro', #20 '0 21 10' => 'Olympus M.Zuiko Digital ED 14-42mm F3.5-5.6 EZ', #20 '0 22 00' => 'Olympus Zuiko Digital 17.5-45mm F3.5-5.6', #9 '0 22 10' => 'Olympus M.Zuiko Digital 25mm F1.8', #20 '0 23 00' => 'Olympus Zuiko Digital ED 14-42mm F3.5-5.6', #PH '0 23 10' => 'Olympus M.Zuiko Digital ED 7-14mm F2.8 Pro', #20 '0 24 00' => 'Olympus Zuiko Digital ED 40-150mm F4.0-5.6', #PH '0 24 10' => 'Olympus M.Zuiko Digital ED 300mm F4.0 IS Pro', #20 '0 25 10' => 'Olympus M.Zuiko Digital ED 8mm F1.8 Fisheye Pro', #20 '0 30 00' => 'Olympus Zuiko Digital ED 50-200mm F2.8-3.5 SWD', #7 '0 31 00' => 'Olympus Zuiko Digital ED 12-60mm F2.8-4.0 SWD', #7 '0 32 00' => 'Olympus Zuiko Digital ED 14-35mm F2.0 SWD', #PH '0 33 00' => 'Olympus Zuiko Digital 25mm F2.8', #PH '0 34 00' => 'Olympus Zuiko Digital ED 9-18mm F4.0-5.6', #7 '0 35 00' => 'Olympus Zuiko Digital 14-54mm F2.8-3.5 II', #PH # Sigma lenses '1 01 00' => 'Sigma 18-50mm F3.5-5.6 DC', #8 '1 01 10' => 'Sigma 30mm F2.8 EX DN', #20 '1 02 00' => 'Sigma 55-200mm F4.0-5.6 DC', '1 02 10' => 'Sigma 19mm F2.8 EX DN', #20 '1 03 00' => 'Sigma 18-125mm F3.5-5.6 DC', '1 03 10' => 'Sigma 30mm F2.8 DN | A', #20 '1 04 00' => 'Sigma 18-125mm F3.5-5.6 DC', #7 '1 04 10' => 'Sigma 19mm F2.8 DN | A', #20 '1 05 00' => 'Sigma 30mm F1.4 EX DC HSM', #10 '1 05 10' => 'Sigma 60mm F2.8 DN | A', #20 '1 06 00' => 'Sigma APO 50-500mm F4.0-6.3 EX DG HSM', #6 '1 07 00' => 'Sigma Macro 105mm F2.8 EX DG', #PH '1 08 00' => 'Sigma APO Macro 150mm F2.8 EX DG HSM', #PH '1 09 00' => 'Sigma 18-50mm F2.8 EX DC Macro', #20 '1 10 00' => 'Sigma 24mm F1.8 EX DG Aspherical Macro', #PH '1 11 00' => 'Sigma APO 135-400mm F4.5-5.6 DG', #11 '1 12 00' => 'Sigma APO 300-800mm F5.6 EX DG HSM', #11 '1 13 00' => 'Sigma 30mm F1.4 EX DC HSM', #11 '1 14 00' => 'Sigma APO 50-500mm F4.0-6.3 EX DG HSM', #11 '1 15 00' => 'Sigma 10-20mm F4.0-5.6 EX DC HSM', #11 '1 16 00' => 'Sigma APO 70-200mm F2.8 II EX DG Macro HSM', #11 '1 17 00' => 'Sigma 50mm F1.4 EX DG HSM', #11 # Panasonic/Leica lenses '2 01 00' => 'Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.', #11 '2 01 10' => 'Lumix G Vario 14-45mm F3.5-5.6 Asph. Mega OIS', #16 '2 02 00' => 'Leica D Summilux 25mm F1.4 Asph.', #11 '2 02 10' => 'Lumix G Vario 45-200mm F4.0-5.6 Mega OIS', #16 '2 03 00' => 'Leica D Vario Elmar 14-50mm F3.8-5.6 Asph. Mega OIS', #11 '2 03 01' => 'Leica D Vario Elmar 14-50mm F3.8-5.6 Asph.', #14 (L10 kit) '2 03 10' => 'Lumix G Vario HD 14-140mm F4.0-5.8 Asph. Mega OIS', #16 '2 04 00' => 'Leica D Vario Elmar 14-150mm F3.5-5.6', #13 '2 04 10' => 'Lumix G Vario 7-14mm F4.0 Asph.', #PH (E-P1 pre-production) '2 05 10' => 'Lumix G 20mm F1.7 Asph.', #16 '2 06 10' => 'Leica DG Macro-Elmarit 45mm F2.8 Asph. Mega OIS', #PH '2 07 10' => 'Lumix G Vario 14-42mm F3.5-5.6 Asph. Mega OIS', #20 '2 08 10' => 'Lumix G Fisheye 8mm F3.5', #PH '2 09 10' => 'Lumix G Vario 100-300mm F4.0-5.6 Mega OIS', #11 '2 10 10' => 'Lumix G 14mm F2.5 Asph.', #17 '2 11 10' => 'Lumix G 12.5mm F12 3D', #20 (H-FT012) '2 12 10' => 'Leica DG Summilux 25mm F1.4 Asph.', #20 '2 13 10' => 'Lumix G X Vario PZ 45-175mm F4.0-5.6 Asph. Power OIS', #20 '2 14 10' => 'Lumix G X Vario PZ 14-42mm F3.5-5.6 Asph. Power OIS', #20 '2 15 10' => 'Lumix G X Vario 12-35mm F2.8 Asph. Power OIS', #PH '2 16 10' => 'Lumix G Vario 45-150mm F4.0-5.6 Asph. Mega OIS', #20 '2 17 10' => 'Lumix G X Vario 35-100mm F2.8 Power OIS', #PH '2 18 10' => 'Lumix G Vario 14-42mm F3.5-5.6 II Asph. Mega OIS', #20 '2 19 10' => 'Lumix G Vario 14-140mm F3.5-5.6 Asph. Power OIS', #20 '2 20 10' => 'Lumix G Vario 12-32mm F3.5-5.6 Asph. Mega OIS', #20 '2 21 10' => 'Leica DG Nocticron 42.5mm F1.2 Asph. Power OIS', #20 '2 22 10' => 'Leica DG Summilux 15mm F1.7 Asph.', #20 # '2 23 10' => 'Lumix G Vario 35-100mm F4.0-5.6 Asph. Mega OIS', #20 (guess) '2 24 10' => 'Lumix G Macro 30mm F2.8 Asph. Mega OIS', #20 '2 25 10' => 'Lumix G 42.5mm F1.7 Asph. Power OIS', #20 '3 01 00' => 'Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.', #11 '3 02 00' => 'Leica D Summilux 25mm F1.4 Asph.', #11 # Tamron lenses '5 01 10' => 'Tamron 14-150mm F3.5-5.8 Di III', #20 (model C001) ); # lookup for Olympus camera types (ref PH) my %olympusCameraTypes = ( Notes => q{ These values are currently decoded only for Olympus models. Models with Olympus-style maker notes from other brands such as Acer, BenQ, Hitachi, HP, Premier, Konica-Minolta, Maginon, Ricoh, Rollei, SeaLife, Sony, Supra, Vivitar are not listed. }, D4028 => 'X-2,C-50Z', D4029 => 'E-20,E-20N,E-20P', D4034 => 'C720UZ', D4040 => 'E-1', D4041 => 'E-300', D4083 => 'C2Z,D520Z,C220Z', D4106 => 'u20D,S400D,u400D', D4120 => 'X-1', D4122 => 'u10D,S300D,u300D', D4125 => 'AZ-1', D4141 => 'C150,D390', D4193 => 'C-5000Z', D4194 => 'X-3,C-60Z', D4199 => 'u30D,S410D,u410D', D4205 => 'X450,D535Z,C370Z', D4210 => 'C160,D395', D4211 => 'C725UZ', D4213 => 'FerrariMODEL2003', D4216 => 'u15D', D4217 => 'u25D', D4220 => 'u-miniD,Stylus V', D4221 => 'u40D,S500,uD500', D4231 => 'FerrariMODEL2004', D4240 => 'X500,D590Z,C470Z', D4244 => 'uD800,S800', D4256 => 'u720SW,S720SW', D4261 => 'X600,D630,FE5500', D4262 => 'uD600,S600', D4301 => 'u810/S810', # (yes, "/". Olympus is not consistent in the notation) D4302 => 'u710,S710', D4303 => 'u700,S700', D4304 => 'FE100,X710', D4305 => 'FE110,X705', D4310 => 'FE-130,X-720', D4311 => 'FE-140,X-725', D4312 => 'FE150,X730', D4313 => 'FE160,X735', D4314 => 'u740,S740', D4315 => 'u750,S750', D4316 => 'u730/S730', D4317 => 'FE115,X715', D4321 => 'SP550UZ', D4322 => 'SP510UZ', D4324 => 'FE170,X760', D4326 => 'FE200', D4327 => 'FE190/X750', # (also SX876) D4328 => 'u760,S760', D4330 => 'FE180/X745', # (also SX875) D4331 => 'u1000/S1000', D4332 => 'u770SW,S770SW', D4333 => 'FE240/X795', D4334 => 'FE210,X775', D4336 => 'FE230/X790', D4337 => 'FE220,X785', D4338 => 'u725SW,S725SW', D4339 => 'FE250/X800', D4341 => 'u780,S780', D4343 => 'u790SW,S790SW', D4344 => 'u1020,S1020', D4346 => 'FE15,X10', D4348 => 'FE280,X820,C520', D4349 => 'FE300,X830', D4350 => 'u820,S820', D4351 => 'u1200,S1200', D4352 => 'FE270,X815,C510', D4353 => 'u795SW,S795SW', D4354 => 'u1030SW,S1030SW', D4355 => 'SP560UZ', D4356 => 'u1010,S1010', D4357 => 'u830,S830', D4359 => 'u840,S840', D4360 => 'FE350WIDE,X865', D4361 => 'u850SW,S850SW', D4362 => 'FE340,X855,C560', D4363 => 'FE320,X835,C540', D4364 => 'SP570UZ', D4366 => 'FE330,X845,C550', D4368 => 'FE310,X840,C530', D4370 => 'u1050SW,S1050SW', D4371 => 'u1060,S1060', D4372 => 'FE370,X880,C575', D4374 => 'SP565UZ', D4377 => 'u1040,S1040', D4378 => 'FE360,X875,C570', D4379 => 'FE20,X15,C25', D4380 => 'uT6000,ST6000', D4381 => 'uT8000,ST8000', D4382 => 'u9000,S9000', D4384 => 'SP590UZ', D4385 => 'FE3010,X895', D4386 => 'FE3000,X890', D4387 => 'FE35,X30', D4388 => 'u550WP,S550WP', D4390 => 'FE5000,X905', D4391 => 'u5000', D4392 => 'u7000,S7000', D4396 => 'FE5010,X915', D4397 => 'FE25,X20', D4398 => 'FE45,X40', D4401 => 'XZ-1', D4402 => 'uT6010,ST6010', D4406 => 'u7010,S7010 / u7020,S7020', D4407 => 'FE4010,X930', D4408 => 'X560WP', D4409 => 'FE26,X21', D4410 => 'FE4000,X920,X925', D4411 => 'FE46,X41,X42', D4412 => 'FE5020,X935', D4413 => 'uTough-3000', D4414 => 'StylusTough-6020', D4415 => 'StylusTough-8010', D4417 => 'u5010,S5010', D4418 => 'u7040,S7040', D4419 => 'u9010,S9010', D4423 => 'FE4040', D4424 => 'FE47,X43', D4426 => 'FE4030,X950', D4428 => 'FE5030,X965,X960', D4430 => 'u7030,S7030', D4432 => 'SP600UZ', D4434 => 'SP800UZ', D4439 => 'FE4020,X940', D4442 => 'FE5035', D4448 => 'FE4050,X970', D4450 => 'FE5050,X985', D4454 => 'u-7050', D4464 => 'T10,X27', D4470 => 'FE5040,X980', D4472 => 'TG-310', D4474 => 'TG-610', D4476 => 'TG-810', D4478 => 'VG145,VG140,D715', D4479 => 'VG130,D710', D4480 => 'VG120,D705', D4482 => 'VR310,D720', D4484 => 'VR320,D725', D4486 => 'VR330,D730', D4488 => 'VG110,D700', D4490 => 'SP-610UZ', D4492 => 'SZ-10', D4494 => 'SZ-20', D4496 => 'SZ-30MR', D4498 => 'SP-810UZ', D4500 => 'SZ-11', D4504 => 'TG-615', D4508 => 'TG-620', D4510 => 'TG-820', D4512 => 'TG-1', D4516 => 'SH-21', D4519 => 'SZ-14', D4520 => 'SZ-31MR', D4521 => 'SH-25MR', D4523 => 'SP-720UZ', D4529 => 'VG170', D4531 => 'XZ-2', D4535 => 'SP-620UZ', D4536 => 'TG-320', D4537 => 'VR340,D750', D4538 => 'VG160,X990,D745', D4541 => 'SZ-12', D4545 => 'VH410', D4546 => 'XZ-10', #21 D4547 => 'TG-2', D4548 => 'TG-830', D4549 => 'TG-630', D4550 => 'SH-50', D4553 => 'SZ-16,DZ-105', D4562 => 'SP-820UZ', D4566 => 'SZ-15', D4572 => 'STYLUS1', D4574 => 'TG-3', D4575 => 'TG-850', D4579 => 'SP-100EE', D4580 => 'SH-60', D4581 => 'SH-1', D4582 => 'TG-835', D4585 => 'SH-2', D4586 => 'TG-4', D4809 => 'C2500L', D4842 => 'E-10', D4856 => 'C-1', D4857 => 'C-1Z,D-150Z', D4587 => 'TG-860', DCHC => 'D500L', DCHT => 'D600L / D620L', K0055 => 'AIR-A01', S0003 => 'E-330', S0004 => 'E-500', S0009 => 'E-400', S0010 => 'E-510', S0011 => 'E-3', S0013 => 'E-410', S0016 => 'E-420', S0017 => 'E-30', S0018 => 'E-520', S0019 => 'E-P1', S0023 => 'E-620', S0026 => 'E-P2', S0027 => 'E-PL1', S0029 => 'E-450', S0030 => 'E-600', S0032 => 'E-P3', S0033 => 'E-5', S0034 => 'E-PL2', S0036 => 'E-M5', S0038 => 'E-PL3', S0039 => 'E-PM1', S0040 => 'E-PL1s', S0042 => 'E-PL5', S0043 => 'E-PM2', S0044 => 'E-P5', S0045 => 'E-PL6', S0046 => 'E-PL7', #21 S0047 => 'E-M1', S0051 => 'E-M10', S0052 => 'E-M5MarkII', #21 S0059 => 'E-M10MarkII', SR45 => 'D220', SR55 => 'D320L', SR83 => 'D340L', SR85 => 'C830L,D340R', SR852 => 'C860L,D360L', SR872 => 'C900Z,D400Z', SR874 => 'C960Z,D460Z', SR951 => 'C2000Z', SR952 => 'C21', SR953 => 'C21T.commu', SR954 => 'C2020Z', SR955 => 'C990Z,D490Z', SR956 => 'C211Z', SR959 => 'C990ZS,D490Z', SR95A => 'C2100UZ', SR971 => 'C100,D370', SR973 => 'C2,D230', SX151 => 'E100RS', SX351 => 'C3000Z / C3030Z', SX354 => 'C3040Z', SX355 => 'C2040Z', SX357 => 'C700UZ', SX358 => 'C200Z,D510Z', SX374 => 'C3100Z,C3020Z', SX552 => 'C4040Z', SX553 => 'C40Z,D40Z', SX556 => 'C730UZ', SX558 => 'C5050Z', SX571 => 'C120,D380', SX574 => 'C300Z,D550Z', SX575 => 'C4100Z,C4000Z', SX751 => 'X200,D560Z,C350Z', SX752 => 'X300,D565Z,C450Z', SX753 => 'C750UZ', SX754 => 'C740UZ', SX755 => 'C755UZ', SX756 => 'C5060WZ', SX757 => 'C8080WZ', SX758 => 'X350,D575Z,C360Z', SX759 => 'X400,D580Z,C460Z', SX75A => 'AZ-2ZOOM', SX75B => 'D595Z,C500Z', SX75C => 'X550,D545Z,C480Z', SX75D => 'IR-300', SX75F => 'C55Z,C5500Z', SX75G => 'C170,D425', SX75J => 'C180,D435', SX771 => 'C760UZ', SX772 => 'C770UZ', SX773 => 'C745UZ', SX774 => 'X250,D560Z,C350Z', SX775 => 'X100,D540Z,C310Z', SX776 => 'C460ZdelSol', SX777 => 'C765UZ', SX77A => 'D555Z,C315Z', SX851 => 'C7070WZ', SX852 => 'C70Z,C7000Z', SX853 => 'SP500UZ', SX854 => 'SP310', SX855 => 'SP350', SX873 => 'SP320', SX875 => 'FE180/X745', # (also D4330) SX876 => 'FE190/X750', # (also D4327) # other brands # 4MP9Q3 => 'Camera 4MP-9Q3' # 4MP9T2 => 'BenQ DC C420 / Camera 4MP-9T2' # 5MP9Q3 => 'Camera 5MP-9Q3', # 5MP9X9 => 'Camera 5MP-9X9', # '5MP-9T'=> 'Camera 5MP-9T3', # '5MP-9Y'=> 'Camera 5MP-9Y2', # '6MP-9U'=> 'Camera 6MP-9U9', # 7MP9Q3 => 'Camera 7MP-9Q3', # '8MP-9U'=> 'Camera 8MP-9U4', # CE5330 => 'Acer CE-5330', # 'CP-853'=> 'Acer CP-8531', # CS5531 => 'Acer CS5531', # DC500 => 'SeaLife DC500', # DC7370 => 'Camera 7MP-9GA', # DC7371 => 'Camera 7MP-9GM', # DC7371 => 'Hitachi HDC-751E', # DC7375 => 'Hitachi HDC-763E / Rollei RCP-7330X / Ricoh Caplio RR770 / Vivitar ViviCam 7330', # 'DC E63'=> 'BenQ DC E63+', # 'DC P86'=> 'BenQ DC P860', # DS5340 => 'Maginon Performic S5 / Premier 5MP-9M7', # DS5341 => 'BenQ E53+ / Supra TCM X50 / Maginon X50 / Premier 5MP-9P8', # DS5346 => 'Premier 5MP-9Q2', # E500 => 'Konica Minolta DiMAGE E500', # MAGINO => 'Maginon X60', # Mz60 => 'HP Photosmart Mz60', # Q3DIGI => 'Camera 5MP-9Q3', # SLIMLI => 'Supra Slimline X6', # V8300s => 'Vivitar V8300s', ); # ArtFilter, ArtFilterEffect and MagicFilter values (ref PH) my %filters = ( 0 => 'Off', 1 => 'Soft Focus', # (XZ-1) 2 => 'Pop Art', # (SZ-10 magic filter 1,SZ-31MR,E-M5,E-PL3) 3 => 'Pale & Light Color', 4 => 'Light Tone', 5 => 'Pin Hole', # (SZ-10 magic filter 2,SZ-31MR,E-PL3) 6 => 'Grainy Film', 9 => 'Diorama', 10 => 'Cross Process', 12 => 'Fish Eye', # (SZ-10 magic filter 3) 13 => 'Drawing', # (SZ-10 magic filter 4) 14 => 'Gentle Sepia', # (E-5) 15 => 'Pale & Light Color II', #forum6269 ('Tender Light' ref 11) 16 => 'Pop Art II', #11 (E-PL3 "(dark)" - PH) 17 => 'Pin Hole II', #11 (E-PL3 "(color 2)" - PH) 18 => 'Pin Hole III', #11 (E-M5, E-PL3 "(color 3)" - PH) 19 => 'Grainy Film II', #11 20 => 'Dramatic Tone', # (XZ-1,SZ-31MR) 21 => 'Punk', # (SZ-10 magic filter 6) 22 => 'Soft Focus 2', # (SZ-10 magic filter 5) 23 => 'Sparkle', # (SZ-10 magic filter 7) 24 => 'Watercolor', # (SZ-10 magic filter 8) 25 => 'Key Line', # (E-M5) 26 => 'Key Line II', #forum6269 27 => 'Miniature', # (SZ-31MR) 28 => 'Reflection', # (TG-820,SZ-31MR) 29 => 'Fragmented', # (TG-820,SZ-31MR) 31 => 'Cross Process II', #forum6269 32 => 'Dramatic Tone II', #forum6269 (Dramatic Tone B&W for E-M5) 33 => 'Watercolor I', # ('Watercolor I' for EM-1 ref forum6269, 'Watercolor II' for E-PM2 ref PH) 34 => 'Watercolor II', #forum6269 35 => 'Diorama II', #forum6269 36 => 'Vintage', #forum6269 37 => 'Vintage II', #forum6269 38 => 'Vintage III', #forum6269 39 => 'Partial Color', #forum6269 40 => 'Partial Color II', #forum6269 41 => 'Partial Color III', #forum6269 ); # tag information for WAV "Index" tags my %indexInfo = ( Format => 'int32u', RawConv => '$val == 0xffffffff ? undef : $val', ValueConv => '$val / 1000', PrintConv => 'ConvertDuration($val)', ); # Olympus tags %Image::ExifTool::Olympus::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # # Tags 0x0000 through 0x0103 are the same as Konica/Minolta cameras (ref 3) # (removed 0x0101-0x0103 because they weren't supported by my samples - PH) # 0x0000 => { Name => 'MakerNoteVersion', Writable => 'undef', }, 0x0001 => { Name => 'MinoltaCameraSettingsOld', SubDirectory => { TagTable => 'Image::ExifTool::Minolta::CameraSettings', ByteOrder => 'BigEndian', }, }, 0x0003 => { Name => 'MinoltaCameraSettings', SubDirectory => { TagTable => 'Image::ExifTool::Minolta::CameraSettings', ByteOrder => 'BigEndian', }, }, 0x0040 => { Name => 'CompressedImageSize', Writable => 'int32u', }, 0x0081 => { Name => 'PreviewImageData', Binary => 1, Writable => 0, }, 0x0088 => { Name => 'PreviewImageStart', Flags => 'IsOffset', OffsetPair => 0x0089, # point to associated byte count DataTag => 'PreviewImage', Writable => 0, Protected => 2, }, 0x0089 => { Name => 'PreviewImageLength', OffsetPair => 0x0088, # point to associated offset DataTag => 'PreviewImage', Writable => 0, Protected => 2, }, 0x0100 => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Writable => 'undef', WriteCheck => '$self->CheckImage(\$val)', Binary => 1, }, 0x0104 => { Name => 'BodyFirmwareVersion', Writable => 'string' }, #11 # # end Konica/Minolta tags # 0x0200 => { Name => 'SpecialMode', Notes => q{ 3 numbers: 1. Shooting mode: 0=Normal, 2=Fast, 3=Panorama; 2. Sequence Number; 3. Panorama Direction: 1=Left-right, 2=Right-left, 3=Bottom-Top, 4=Top-Bottom }, Writable => 'int32u', Count => 3, PrintConv => sub { #3 my $val = shift; my @v = split ' ', $val; return $val unless @v >= 3; my @v0 = ('Normal','Unknown (1)','Fast','Panorama'); my @v2 = ('(none)','Left to Right','Right to Left','Bottom to Top','Top to Bottom'); $val = $v0[$v[0]] || "Unknown ($v[0])"; $val .= ", Sequence: $v[1]"; $val .= ', Panorama: ' . ($v2[$v[2]] || "Unknown ($v[2])"); return $val; }, }, 0x0201 => { Name => 'Quality', Writable => 'int16u', Notes => q{ Quality values are decoded based on the CameraType tag. All types represent SQ, HQ and SHQ as sequential integers, but in general SX-type cameras start with a value of 0 for SQ while others start with 1 }, # These values are different for different camera types # (can't have Condition based on CameraType because it isn't known # when this tag is extracted) PrintConv => sub { my ($val, $self) = @_; my %t1 = ( # all SX camera types except SX151 0 => 'SQ (Low)', 1 => 'HQ (Normal)', 2 => 'SHQ (Fine)', 6 => 'RAW', #PH - C5050WZ ); my %t2 = ( # all other types (except D4322, ref 22) 1 => 'SQ (Low)', 2 => 'HQ (Normal)', 3 => 'SHQ (Fine)', 4 => 'RAW', 5 => 'Medium-Fine', #PH 6 => 'Small-Fine', #PH 33 => 'Uncompressed', #PH - C2100Z ); my $conv = $self->{CameraType} =~ /^(SX(?!151\b)|D4322)/ ? \%t1 : \%t2; return $$conv{$val} ? $$conv{$val} : "Unknown ($val)"; }, # (no PrintConvInv because we don't know CameraType at write time) }, 0x0202 => { Name => 'Macro', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On', 2 => 'Super Macro', #6 }, }, 0x0203 => { #6 Name => 'BWMode', Description => 'Black And White Mode', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On', 6 => '(none)', #22 }, }, 0x0204 => { Name => 'DigitalZoom', Writable => 'rational64u', PrintConv => '$val=~/\./ or $val.=".0"; $val', PrintConvInv => '$val', }, 0x0205 => { #6 Name => 'FocalPlaneDiagonal', Writable => 'rational64u', PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm$//;$val', }, 0x0206 => { Name => 'LensDistortionParams', Writable => 'int16s', Count => 6 }, #6 0x0207 => { #PH (was incorrectly FirmwareVersion, ref 1/3) Name => 'CameraType', Condition => '$$valPt ne "NORMAL"', # FE240, SP510, u730 and u1000 write this Writable => 'string', DataMember => 'CameraType', RawConv => '$self->{CameraType} = $val', SeparateTable => 'CameraType', ValueConv => '$val =~ s/\s+$//; $val', # ("SX151 " has trailing space) ValueConvInv => '$val', PrintConv => \%olympusCameraTypes, Priority => 0, # 'NORMAL' for some models: u730,SP510UZ,u1000,FE240 }, 0x0208 => { Name => 'TextInfo', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::TextInfo', }, }, 0x0209 => { Name => 'CameraID', Format => 'string', # this really should have been a string }, 0x020b => { Name => 'EpsonImageWidth', Writable => 'int16u' }, #PH 0x020c => { Name => 'EpsonImageHeight', Writable => 'int16u' }, #PH 0x020d => { Name => 'EpsonSoftware', Writable => 'string' }, #PH 0x0280 => { #PH %Image::ExifTool::previewImageTagInfo, Groups => { 2 => 'Preview' }, Notes => 'found in ERF and JPG images from some Epson models', Format => 'undef', Writable => 'int8u', }, 0x0300 => { Name => 'PreCaptureFrames', Writable => 'int16u' }, #6 0x0301 => { Name => 'WhiteBoard', Writable => 'int16u' }, #11 0x0302 => { #6 Name => 'OneTouchWB', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On', 2 => 'On (Preset)', }, }, 0x0303 => { Name => 'WhiteBalanceBracket', Writable => 'int16u' }, #11 0x0304 => { Name => 'WhiteBalanceBias', Writable => 'int16u' }, #11 # 0x0305 => 'PrintMatching', ? #11 0x0401 => { #21 Name => 'BlackLevel', Condition => '$format eq "int32u" and $count == 4', Writable => 'int32u', Count => 4, Notes => 'found in Epson ERF images', }, # 0x0402 - BitCodedAutoFocus (ref 11) 0x0403 => { #11 Name => 'SceneMode', Writable => 'int16u', PrintConvColumns => 2, PrintConv => { 0 => 'Normal', 1 => 'Standard', 2 => 'Auto', 3 => 'Intelligent Auto', #PH (guess, u7040) 4 => 'Portrait', 5 => 'Landscape+Portrait', 6 => 'Landscape', 7 => 'Night Scene', 8 => 'Night+Portrait', 9 => 'Sport', 10 => 'Self Portrait', 11 => 'Indoor', 12 => 'Beach & Snow', 13 => 'Beach', 14 => 'Snow', 15 => 'Self Portrait+Self Timer', 16 => 'Sunset', 17 => 'Cuisine', 18 => 'Documents', 19 => 'Candle', 20 => 'Fireworks', 21 => 'Available Light', 22 => 'Vivid', 23 => 'Underwater Wide1', 24 => 'Underwater Macro', 25 => 'Museum', 26 => 'Behind Glass', 27 => 'Auction', 28 => 'Shoot & Select1', 29 => 'Shoot & Select2', 30 => 'Underwater Wide2', 31 => 'Digital Image Stabilization', 32 => 'Face Portrait', 33 => 'Pet', 34 => 'Smile Shot', 35 => 'Quick Shutter', 43 => 'Hand-held Starlight', #PH (SH-21) 100 => 'Panorama', #PH (SH-21) 101 => 'Magic Filter', #PH 103 => 'HDR', #PH (XZ-2) }, }, 0x0404 => { Name => 'SerialNumber', Writable => 'string' }, #PH (D595Z, C7070WZ) 0x0405 => { Name => 'Firmware', Writable => 'string' }, #11 0x0e00 => { # (AFFieldCoord for models XZ-2 and XZ-10, ref 11) Name => 'PrintIM', Description => 'Print Image Matching', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main', }, }, 0x0f00 => { Name => 'DataDump', Writable => 0, Binary => 1, }, 0x0f01 => { #6 Name => 'DataDump2', Writable => 0, Binary => 1, }, 0x0f04 => { Name => 'ZoomedPreviewStart', # NOTE: this tag is currently not updated properly when the image is rewritten! OffsetPair => 0xf05, DataTag => 'ZoomedPreviewImage', Writable => 'int32u', Protected => 2, }, 0x0f05 => { Name => 'ZoomedPreviewLength', OffsetPair => 0xf04, DataTag => 'ZoomedPreviewImage', Writable => 'int32u', Protected => 2, }, 0x0f06 => { Name => 'ZoomedPreviewSize', Writable => 'int16u', Count => 2, }, 0x1000 => { #6 Name => 'ShutterSpeedValue', Writable => 'rational64s', Priority => 0, ValueConv => 'abs($val)<100 ? 2**(-$val) : 0', ValueConvInv => '$val>0 ? -log($val)/log(2) : -100', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x1001 => { #6 Name => 'ISOValue', Writable => 'rational64s', Priority => 0, ValueConv => '100 * 2 ** ($val - 5)', ValueConvInv => '$val>0 ? log($val/100)/log(2)+5 : 0', PrintConv => 'int($val * 100 + 0.5) / 100', PrintConvInv => '$val', }, 0x1002 => { #6 Name => 'ApertureValue', Writable => 'rational64s', Priority => 0, ValueConv => '2 ** ($val / 2)', ValueConvInv => '$val>0 ? 2*log($val)/log(2) : 0', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0x1003 => { #6 Name => 'BrightnessValue', Writable => 'rational64s', Priority => 0, }, 0x1004 => { #3 Name => 'FlashMode', Writable => 'int16u', PrintConv => { 2 => 'On', #PH 3 => 'Off', #PH }, }, 0x1005 => { #6 Name => 'FlashDevice', Writable => 'int16u', PrintConv => { 0 => 'None', 1 => 'Internal', 4 => 'External', 5 => 'Internal + External', }, }, 0x1006 => { #6 Name =>'ExposureCompensation', Writable => 'rational64s', }, 0x1007 => { Name => 'SensorTemperature',Writable => 'int16s' }, #6 (E-10, E-20 and C2500L - numbers usually around 30-40) 0x1008 => { Name => 'LensTemperature', Writable => 'int16s' }, #6 0x1009 => { Name => 'LightCondition', Writable => 'int16u' }, #11 0x100a => { #11 Name => 'FocusRange', Writable => 'int16u', PrintConv => { 0 => 'Normal', 1 => 'Macro', }, }, 0x100b => { #6 Name => 'FocusMode', Writable => 'int16u', PrintConv => { 0 => 'Auto', 1 => 'Manual', }, }, 0x100c => { #6 Name => 'ManualFocusDistance', Writable => 'rational64u', PrintConv => '"$val mm"', #11 PrintConvInv => '$val=~s/\s*mm$//; $val', }, 0x100d => { Name => 'ZoomStepCount', Writable => 'int16u' }, #6 0x100e => { Name => 'FocusStepCount', Writable => 'int16u' }, #6 0x100f => { #6 Name => 'Sharpness', Writable => 'int16u', Priority => 0, PrintConv => { 0 => 'Normal', 1 => 'Hard', 2 => 'Soft', }, }, 0x1010 => { Name => 'FlashChargeLevel', Writable => 'int16u' }, #6 0x1011 => { #3 Name => 'ColorMatrix', Writable => 'int16u', Format => 'int16s', Count => 9, }, 0x1012 => { Name => 'BlackLevel', Writable => 'int16u', Count => 4 }, #3 0x1013 => { #11 Name => 'ColorTemperatureBG', Writable => 'int16u', Unknown => 1, # (doesn't look like a temperature) }, 0x1014 => { #11 Name => 'ColorTemperatureRG', Writable => 'int16u', Unknown => 1, # (doesn't look like a temperature) }, 0x1015 => { #6 Name => 'WBMode', Writable => 'int16u', Count => 2, PrintConvColumns => 2, PrintConv => { '1' => 'Auto', '1 0' => 'Auto', '1 2' => 'Auto (2)', '1 4' => 'Auto (4)', '2 2' => '3000 Kelvin', '2 3' => '3700 Kelvin', '2 4' => '4000 Kelvin', '2 5' => '4500 Kelvin', '2 6' => '5500 Kelvin', '2 7' => '6500 Kelvin', '2 8' => '7500 Kelvin', '3 0' => 'One-touch', }, }, 0x1017 => { #2 Name => 'RedBalance', Writable => 'int16u', Count => 2, ValueConv => '$val=~s/ .*//; $val / 256', ValueConvInv => '$val*=256;"$val 64"', }, 0x1018 => { #2 Name => 'BlueBalance', Writable => 'int16u', Count => 2, ValueConv => '$val=~s/ .*//; $val / 256', ValueConvInv => '$val*=256;"$val 64"', }, 0x1019 => { Name => 'ColorMatrixNumber', Writable => 'int16u' }, #11 # 0x101a is same as CameraID ("OLYMPUS DIGITAL CAMERA") for C2500L - PH 0x101a => { Name => 'SerialNumber', Writable => 'string' }, #3 0x101b => { #11 Name => 'ExternalFlashAE1_0', Writable => 'int32u', Unknown => 1, # (what are these?) }, 0x101c => { Name => 'ExternalFlashAE2_0', Writable => 'int32u', Unknown => 1 }, #11 0x101d => { Name => 'InternalFlashAE1_0', Writable => 'int32u', Unknown => 1 }, #11 0x101e => { Name => 'InternalFlashAE2_0', Writable => 'int32u', Unknown => 1 }, #11 0x101f => { Name => 'ExternalFlashAE1', Writable => 'int32u', Unknown => 1 }, #11 0x1020 => { Name => 'ExternalFlashAE2', Writable => 'int32u', Unknown => 1 }, #11 0x1021 => { Name => 'InternalFlashAE1', Writable => 'int32u', Unknown => 1 }, #11 0x1022 => { Name => 'InternalFlashAE2', Writable => 'int32u', Unknown => 1 }, #11 0x1023 => { Name => 'FlashExposureComp', Writable => 'rational64s' }, #6 0x1024 => { Name => 'InternalFlashTable', Writable => 'int16u' }, #11 0x1025 => { Name => 'ExternalFlashGValue', Writable => 'rational64s' }, #11 0x1026 => { #6 Name => 'ExternalFlashBounce', Writable => 'int16u', PrintConv => { 0 => 'No', 1 => 'Yes', }, }, 0x1027 => { Name => 'ExternalFlashZoom', Writable => 'int16u' }, #6 0x1028 => { Name => 'ExternalFlashMode', Writable => 'int16u' }, #6 0x1029 => { #3 Name => 'Contrast', Writable => 'int16u', PrintConv => { #PH (works with E1) 0 => 'High', 1 => 'Normal', 2 => 'Low', }, }, 0x102a => { Name => 'SharpnessFactor', Writable => 'int16u' }, #3 0x102b => { Name => 'ColorControl', Writable => 'int16u', Count => 6 }, #3 0x102c => { Name => 'ValidBits', Writable => 'int16u', Count => 2 }, #3 0x102d => { Name => 'CoringFilter', Writable => 'int16u' }, #3 0x102e => { Name => 'OlympusImageWidth', Writable => 'int32u' }, #PH 0x102f => { Name => 'OlympusImageHeight', Writable => 'int32u' }, #PH 0x1030 => { Name => 'SceneDetect', Writable => 'int16u' }, #11 0x1031 => { #11 Name => 'SceneArea', Writable => 'int32u', Count => 8, Unknown => 1, # (numbers don't make much sense?) }, # 0x1032 HAFFINAL? #11 0x1033 => { #11 Name => 'SceneDetectData', Writable => 'int32u', Count => 720, Binary => 1, Unknown => 1, # (but what does it mean?) }, 0x1034 => { Name => 'CompressionRatio', Writable => 'rational64u' }, #3 0x1035 => { #6 Name => 'PreviewImageValid', Writable => 'int32u', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, 0x1036 => { #6 Name => 'PreviewImageStart', Flags => 'IsOffset', OffsetPair => 0x1037, # point to associated byte count DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, }, 0x1037 => { #6 # (may contain data from multiple previews - PH, FE320) Name => 'PreviewImageLength', OffsetPair => 0x1036, # point to associated offset DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, }, 0x1038 => { Name => 'AFResult', Writable => 'int16u' }, #11 0x1039 => { #6 Name => 'CCDScanMode', Writable => 'int16u', PrintConv => { 0 => 'Interlaced', 1 => 'Progressive', }, }, 0x103a => { #6 Name => 'NoiseReduction', Writable => 'int16u', PrintConv => \%offOn, }, 0x103b => { Name => 'FocusStepInfinity', Writable => 'int16u' }, #6 0x103c => { Name => 'FocusStepNear', Writable => 'int16u' }, #6 0x103d => { Name => 'LightValueCenter', Writable => 'rational64s' }, #11 0x103e => { Name => 'LightValuePeriphery', Writable => 'rational64s' }, #11 0x103f => { #11 Name => 'FieldCount', Writable => 'int16u', Unknown => 1, # (but what does it mean?) }, # # Olympus really screwed up the format of the following subdirectories (for the # E-1 and E-300 anyway). Not only is the subdirectory value data not included in # the size, but also the count is 2 bytes short for the subdirectory itself # (presumably the Olympus programmers forgot about the 2-byte entry count at the # start of the subdirectory). This mess is straightened out and these subdirs # are written properly when ExifTool rewrites the file. Note that this problem # has been fixed by Olympus in the new-style IFD maker notes since a standard # SubIFD offset value is used. As written by the camera, the old style # directories have format 'undef' or 'string', and the new style has format # 'ifd'. However, some older versions of exiftool may have rewritten the new # style as 'int32u', so handle both cases. - PH # 0x2010 => [ #PH { Name => 'Equipment', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, # (so HtmlDump doesn't show these as double-referenced) SubDirectory => { TagTable => 'Image::ExifTool::Olympus::Equipment', ByteOrder => 'Unknown', }, }, { Name => 'EquipmentIFD', Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::Equipment', Start => '$val', }, }, ], 0x2020 => [ #PH { Name => 'CameraSettings', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::CameraSettings', ByteOrder => 'Unknown', }, }, { Name => 'CameraSettingsIFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::CameraSettings', Start => '$val', }, }, ], 0x2030 => [ #PH { Name => 'RawDevelopment', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::RawDevelopment', ByteOrder => 'Unknown', }, }, { Name => 'RawDevelopmentIFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::RawDevelopment', Start => '$val', }, }, ], 0x2031 => [ #11 { Name => 'RawDev2', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::RawDevelopment2', ByteOrder => 'Unknown', }, }, { Name => 'RawDev2IFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::RawDevelopment2', Start => '$val', }, }, ], 0x2040 => [ #PH { Name => 'ImageProcessing', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::ImageProcessing', ByteOrder => 'Unknown', }, }, { Name => 'ImageProcessingIFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::ImageProcessing', Start => '$val', }, }, ], 0x2050 => [ #PH { Name => 'FocusInfo', Condition => '$format ne "ifd" and $format ne "int32u" and not $$self{OlympusCAMER}', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FocusInfo', ByteOrder => 'Unknown', }, }, { Name => 'FocusInfoIFD', Condition => 'not $$self{OlympusCAMER}', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FocusInfo', Start => '$val', }, }, { # ASCII-based camera parameters if makernotes starts with "CAMER\0" # (or for Sony models starting with "SONY PI\0" or "PREMI\0") Name => 'CameraParameters', Writable => 'undef', Binary => 1, }, ], 0x2100 => [ { #11 Name => 'Olympus2100', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', }, }, { #PH Name => 'Olympus2100IFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', Start => '$val', }, }, ], 0x2200 => [ { #11 Name => 'Olympus2200', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', }, }, { #PH Name => 'Olympus2200IFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', Start => '$val', }, }, ], 0x2300 => [ { #11 Name => 'Olympus2300', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', }, }, { #PH Name => 'Olympus2300IFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', Start => '$val', }, }, ], 0x2400 => [ { #11 Name => 'Olympus2400', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', }, }, { #PH Name => 'Olympus2400IFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', Start => '$val', }, }, ], 0x2500 => [ { #11 Name => 'Olympus2500', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', }, }, { #PH Name => 'Olympus2500IFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', Start => '$val', }, }, ], 0x2600 => [ { #11 Name => 'Olympus2600', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', }, }, { #PH Name => 'Olympus2600IFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', Start => '$val', }, }, ], 0x2700 => [ { #11 Name => 'Olympus2700', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', }, }, { #PH Name => 'Olympus2700IFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', Start => '$val', }, }, ], 0x2800 => [ { #11 Name => 'Olympus2800', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', }, }, { #PH Name => 'Olympus2800IFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', Start => '$val', }, }, ], 0x2900 => [ { #11 Name => 'Olympus2900', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', }, }, { #PH Name => 'Olympus2900IFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::FETags', ByteOrder => 'Unknown', Start => '$val', }, }, ], 0x3000 => [ { #6 Name => 'RawInfo', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::RawInfo', ByteOrder => 'Unknown', }, }, { #PH Name => 'RawInfoIFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::RawInfo', Start => '$val', }, }, ], 0x4000 => [ #PH { Name => 'MainInfo', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::Main', ByteOrder => 'Unknown', }, }, { Name => 'MainInfoIFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::Main', Start => '$val', }, }, ], 0x5000 => [ #PH { Name => 'UnknownInfo', Condition => '$format ne "ifd" and $format ne "int32u"', NestedHtmlDump => 2, SubDirectory => { TagTable => 'Image::ExifTool::Olympus::UnknownInfo', ByteOrder => 'Unknown', }, }, { Name => 'UnknownInfoIFD', Groups => { 1 => 'MakerNotes' }, Flags => 'SubIFD', FixFormat => 'ifd', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::UnknownInfo', Start => '$val', }, }, ], ); # TextInfo tags %Image::ExifTool::Olympus::TextInfo = ( PROCESS_PROC => \&Image::ExifTool::APP12::ProcessAPP12, NOTES => q{ This information is in text format (similar to APP12 information, but with spaces instead of linefeeds). Below are tags which have been observed, but any information found here will be extracted, even if the tag is not listed. }, GROUPS => { 0 => 'MakerNotes', 1 => 'Olympus', 2 => 'Image' }, Resolution => { }, Type => { Name => 'CameraType', Groups => { 2 => 'Camera' }, DataMember => 'CameraType', RawConv => '$self->{CameraType} = $val', SeparateTable => 'CameraType', PrintConv => \%olympusCameraTypes, }, ); # Olympus Equipment IFD %Image::ExifTool::Olympus::Equipment = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x000 => { #PH Name => 'EquipmentVersion', Writable => 'undef', RawConv => '$val=~s/\0+$//; $val', # (may be null terminated) Count => 4, }, 0x100 => { #6 Name => 'CameraType2', Writable => 'string', Count => 6, SeparateTable => 'CameraType', PrintConv => \%olympusCameraTypes, }, 0x101 => { #PH Name => 'SerialNumber', Writable => 'string', Count => 32, PrintConv => '$val=~s/\s+$//;$val', PrintConvInv => 'pack("A31",$val)', # pad with spaces to 31 chars }, 0x102 => { #6 Name => 'InternalSerialNumber', Notes => '16 digits: 0-3=model, 4=year, 5-6=month, 8-12=unit number', Writable => 'string', Count => 32, }, 0x103 => { #6 Name => 'FocalPlaneDiagonal', Writable => 'rational64u', PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm$//;$val', }, 0x104 => { #6 Name => 'BodyFirmwareVersion', Writable => 'int32u', PrintConv => '$val=sprintf("%x",$val);$val=~s/(.{3})$/\.$1/;$val', PrintConvInv => '$val=sprintf("%.3f",$val);$val=~s/\.//;hex($val)', }, 0x201 => { #6 Name => 'LensType', Writable => 'int8u', Count => 6, Notes => q{ 6 numbers: 0. Make, 1. Unknown, 2. Model, 3. Sub-model, 4-5. Unknown. Only the Make, Model and Sub-model are used to identify the lens type }, SeparateTable => 'LensType', # Have seen these values for the unknown numbers: # 1: 0 # 4: 0, 2(Olympus lenses for which I have also seen 0 for this number) # 5: 0, 16(new Lumix lenses) ValueConv => 'my @a=split(" ",$val); sprintf("%x %.2x %.2x",@a[0,2,3])', # set unknown values to zero when writing ValueConvInv => 'my @a=split(" ",$val); hex($a[0])." 0 ".hex($a[1])." ".hex($a[2])." 0 0"', PrintConv => \%olympusLensTypes, }, # apparently the first 3 digits of the lens s/n give the type (ref 4): # 010 = 50macro # 040 = EC-14 # 050 = 14-54 # 060 = 50-200 # 080 = EX-25 # 101 = FL-50 # 272 = EC-20 #7 0x202 => { #PH Name => 'LensSerialNumber', Writable => 'string', Count => 32, PrintConv => '$val=~s/\s+$//;$val', PrintConvInv => 'pack("A31",$val)', # pad with spaces to 31 chars }, 0x203 => { Name => 'LensModel', Writable => 'string' }, #17 0x204 => { #6 Name => 'LensFirmwareVersion', Writable => 'int32u', PrintConv => '$val=sprintf("%x",$val);$val=~s/(.{3})$/\.$1/;$val', PrintConvInv => '$val=sprintf("%.3f",$val);$val=~s/\.//;hex($val)', }, 0x205 => { #11 Name => 'MaxApertureAtMinFocal', Writable => 'int16u', ValueConv => '$val ? sqrt(2)**($val/256) : 0', ValueConvInv => '$val>0 ? int(512*log($val)/log(2)+0.5) : 0', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0x206 => { #5 Name => 'MaxApertureAtMaxFocal', Writable => 'int16u', ValueConv => '$val ? sqrt(2)**($val/256) : 0', ValueConvInv => '$val>0 ? int(512*log($val)/log(2)+0.5) : 0', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0x207 => { Name => 'MinFocalLength', Writable => 'int16u' }, #PH 0x208 => { Name => 'MaxFocalLength', Writable => 'int16u' }, #PH 0x20a => { #9 Name => 'MaxAperture', # (at current focal length) Writable => 'int16u', ValueConv => '$val ? sqrt(2)**($val/256) : 0', ValueConvInv => '$val>0 ? int(512*log($val)/log(2)+0.5) : 0', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0x20b => { #11 Name => 'LensProperties', Writable => 'int16u', PrintConv => 'sprintf("0x%x",$val)', PrintConvInv => '$val', }, 0x301 => { #6 Name => 'Extender', Writable => 'int8u', Count => 6, Notes => q{ 6 numbers: 0. Make, 1. Unknown, 2. Model, 3. Sub-model, 4-5. Unknown. Only the Make and Model are used to identify the extender }, ValueConv => 'my @a=split(" ",$val); sprintf("%x %.2x",@a[0,2])', ValueConvInv => 'my @a=split(" ",$val); hex($a[0])." 0 ".hex($a[1])." 0 0 0"', PrintConv => { '0 00' => 'None', '0 04' => 'Olympus Zuiko Digital EC-14 1.4x Teleconverter', '0 08' => 'Olympus EX-25 Extension Tube', '0 10' => 'Olympus Zuiko Digital EC-20 2.0x Teleconverter', #7 }, }, 0x302 => { Name => 'ExtenderSerialNumber', Writable => 'string', Count => 32 }, #4 0x303 => { Name => 'ExtenderModel', Writable => 'string' }, #9 0x304 => { #6 Name => 'ExtenderFirmwareVersion', Writable => 'int32u', PrintConv => '$val=sprintf("%x",$val);$val=~s/(.{3})$/\.$1/;$val', PrintConvInv => '$val=sprintf("%.3f",$val);$val=~s/\.//;hex($val)', }, 0x403 => { #http://dev.exiv2.org/issues/870 Name => 'ConversionLens', Writable => 'string', # (observed values: '','TCON','FCON','WCON') }, 0x1000 => { #6 Name => 'FlashType', Writable => 'int16u', PrintConv => { 0 => 'None', 2 => 'Simple E-System', 3 => 'E-System', }, }, 0x1001 => { #6 Name => 'FlashModel', Writable => 'int16u', PrintConvColumns => 2, PrintConv => { 0 => 'None', 1 => 'FL-20', # (or subtronic digital or Inon UW flash, ref 11) 2 => 'FL-50', # (or Metzblitz+SCA or Cullmann 34, ref 11) 3 => 'RF-11', 4 => 'TF-22', 5 => 'FL-36', 6 => 'FL-50R', #11 (or Metz mecablitz digital) 7 => 'FL-36R', #11 9 => 'FL-14', #11 11 => 'FL-600R', #11 }, }, 0x1002 => { #6 Name => 'FlashFirmwareVersion', Writable => 'int32u', PrintConv => '$val=sprintf("%x",$val);$val=~s/(.{3})$/\.$1/;$val', PrintConvInv => '$val=sprintf("%.3f",$val);$val=~s/\.//;hex($val)', }, 0x1003 => { Name => 'FlashSerialNumber', Writable => 'string', Count => 32 }, #4 ); # Olympus camera settings IFD %Image::ExifTool::Olympus::CameraSettings = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x000 => { #PH Name => 'CameraSettingsVersion', Writable => 'undef', RawConv => '$val=~s/\0+$//; $val', # (may be null terminated) Count => 4, }, 0x100 => { #6 Name => 'PreviewImageValid', Writable => 'int32u', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, 0x101 => { #PH Name => 'PreviewImageStart', Flags => 'IsOffset', OffsetPair => 0x102, DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, }, 0x102 => { #PH Name => 'PreviewImageLength', OffsetPair => 0x101, DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, }, 0x200 => { #4 Name => 'ExposureMode', Writable => 'int16u', PrintConv => { 1 => 'Manual', 2 => 'Program', #6 3 => 'Aperture-priority AE', 4 => 'Shutter speed priority AE', 5 => 'Program-shift', #6 } }, 0x201 => { #6 Name => 'AELock', Writable => 'int16u', PrintConv => \%offOn, }, 0x202 => { #PH/4 Name => 'MeteringMode', Writable => 'int16u', PrintConv => { 2 => 'Center-weighted average', 3 => 'Spot', 5 => 'ESP', 261 => 'Pattern+AF', #6 515 => 'Spot+Highlight control', #6 1027 => 'Spot+Shadow control', #6 }, }, 0x203 => { Name => 'ExposureShift', Writable => 'rational64s' }, #11 (some models only) 0x204 => { #11 (XZ-1) Name => 'NDFilter', PrintConv => \%offOn, }, 0x300 => { #6 Name => 'MacroMode', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On', 2 => 'Super Macro', #11 }, }, 0x301 => { #6 Name => 'FocusMode', Writable => 'int16u', Count => -1, Notes => '1 or 2 values', PrintConv => [{ 0 => 'Single AF', 1 => 'Sequential shooting AF', 2 => 'Continuous AF', 3 => 'Multi AF', 4 => 'Face detect', #11 10 => 'MF', }, { 0 => '(none)', BITMASK => { #11 0 => 'S-AF', 2 => 'C-AF', 4 => 'MF', 5 => 'Face detect', 6 => 'Imager AF', 7 => 'Live View Magnification Frame', 8 => 'AF sensor', }, }], }, 0x302 => { #6 Name => 'FocusProcess', Writable => 'int16u', Count => -1, Notes => '1 or 2 values', PrintConv => [{ 0 => 'AF Not Used', 1 => 'AF Used', }], # 2nd value written only by some models (u1050SW, u9000, uT6000, uT6010, # uT8000, E-30, E-420, E-450, E-520, E-620, E-P1 and E-P2): - PH # observed values when "AF Not Used": 0, 16 # observed values when "AF Used": 64, 96(face detect on), 256 }, 0x303 => { #6 Name => 'AFSearch', Writable => 'int16u', PrintConv => { 0 => 'Not Ready', 1 => 'Ready', }, }, 0x304 => { #PH/4 Name => 'AFAreas', Notes => 'coordinates range from 0 to 255', Writable => 'int32u', Count => 64, PrintConv => 'Image::ExifTool::Olympus::PrintAFAreas($val)', }, 0x0305 => { #PH Name => 'AFPointSelected', Notes => 'coordinates expressed as a percent', Writable => 'rational64s', Count => 5, ValueConv => '$val =~ s/\S* //; $val', # ignore first undefined value ValueConvInv => '"undef $val"', PrintConv => q{ return 'n/a' if $val =~ /undef/; sprintf("(%d%%,%d%%) (%d%%,%d%%)", map {$_ * 100} split(" ",$val)); }, PrintConvInv => q{ return 'undef undef undef undef' if $val eq 'n/a'; my @nums = $val =~ /\d+(?:\.\d+)?/g; return undef unless @nums == 4; join ' ', map {$_ / 100} @nums; }, }, 0x306 => { #11 Name => 'AFFineTune', Writable => 'int8u', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x307 => { #15 Name => 'AFFineTuneAdj', Format => 'int16s', Count => 3, # not sure what the 3 values mean }, 0x400 => { #6 Name => 'FlashMode', Writable => 'int16u', PrintConv => { 0 => 'Off', BITMASK => { 0 => 'On', 1 => 'Fill-in', 2 => 'Red-eye', 3 => 'Slow-sync', 4 => 'Forced On', 5 => '2nd Curtain', }, }, }, 0x401 => { Name => 'FlashExposureComp', Writable => 'rational64s' }, #6 # 0x402 - FlashMode? bit0=TTL, bit1=auto, bit2=SuperFP (ref 11) 0x403 => { #11 Name => 'FlashRemoteControl', Writable => 'int16u', PrintHex => 1, PrintConvColumns => 2, PrintConv => { 0 => 'Off', 0x01 => 'Channel 1, Low', 0x02 => 'Channel 2, Low', 0x03 => 'Channel 3, Low', 0x04 => 'Channel 4, Low', 0x09 => 'Channel 1, Mid', 0x0a => 'Channel 2, Mid', 0x0b => 'Channel 3, Mid', 0x0c => 'Channel 4, Mid', 0x11 => 'Channel 1, High', 0x12 => 'Channel 2, High', 0x13 => 'Channel 3, High', 0x14 => 'Channel 4, High', }, }, 0x404 => { #11 Name => 'FlashControlMode', Writable => 'int16u', Count => -1, Notes => '3 or 4 values', PrintConv => [{ 0 => 'Off', 3 => 'TTL', 4 => 'Auto', 5 => 'Manual', }], }, 0x405 => { #11 Name => 'FlashIntensity', Writable => 'rational64s', Count => -1, Notes => '3 or 4 values', PrintConv => { OTHER => sub { shift }, 'undef undef undef' => 'n/a', 'undef undef undef undef' => 'n/a (x4)', }, }, 0x406 => { #11 Name => 'ManualFlashStrength', Writable => 'rational64s', Count => -1, Notes => '3 or 4 values', PrintConv => { OTHER => sub { shift }, 'undef undef undef' => 'n/a', 'undef undef undef undef' => 'n/a (x4)', }, }, 0x500 => { #6 Name => 'WhiteBalance2', Writable => 'int16u', PrintConv => { 0 => 'Auto', 1 => 'Auto (Keep Warm Color Off)', #21 16 => '7500K (Fine Weather with Shade)', 17 => '6000K (Cloudy)', 18 => '5300K (Fine Weather)', 20 => '3000K (Tungsten light)', 21 => '3600K (Tungsten light-like)', 22 => 'Auto Setup', #21 23 => '5500K (Flash)', #21 33 => '6600K (Daylight fluorescent)', 34 => '4500K (Neutral white fluorescent)', 35 => '4000K (Cool white fluorescent)', 36 => 'White Fluorescent', #21 48 => '3600K (Tungsten light-like)', 67 => 'Underwater', #21 256 => 'One Touch WB 1', #21 257 => 'One Touch WB 2', #21 258 => 'One Touch WB 3', #21 259 => 'One Touch WB 4', #21 512 => 'Custom WB 1', #21 513 => 'Custom WB 2', #21 514 => 'Custom WB 3', #21 515 => 'Custom WB 4', #21 }, }, 0x501 => { #PH/4 Name => 'WhiteBalanceTemperature', Writable => 'int16u', PrintConv => '$val ? $val : "Auto"', PrintConvInv => '$val=~/^\d+$/ ? $val : 0', }, 0x502 => { #PH/4 Name => 'WhiteBalanceBracket', Writable => 'int16s', }, 0x503 => { #PH/4/6 Name => 'CustomSaturation', Writable => 'int16s', Count => 3, Notes => '3 numbers: 1. CS Value, 2. Min, 3. Max', PrintConv => q{ my ($a,$b,$c)=split ' ',$val; if ($self->{Model} =~ /^E-1\b/) { $a-=$b; $c-=$b; return "CS$a (min CS0, max CS$c)"; } else { return "$a (min $b, max $c)"; } }, }, 0x504 => { #PH/4 Name => 'ModifiedSaturation', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'CM1 (Red Enhance)', 2 => 'CM2 (Green Enhance)', 3 => 'CM3 (Blue Enhance)', 4 => 'CM4 (Skin Tones)', }, }, 0x505 => { #PH/4 Name => 'ContrastSetting', Writable => 'int16s', Count => 3, Notes => 'value, min, max', PrintConv => 'my @v=split " ",$val; "$v[0] (min $v[1], max $v[2])"', PrintConvInv => '$val=~tr/-0-9 //dc;$val', }, 0x506 => { #PH/4 Name => 'SharpnessSetting', Writable => 'int16s', Count => 3, Notes => 'value, min, max', PrintConv => 'my @v=split " ",$val; "$v[0] (min $v[1], max $v[2])"', PrintConvInv => '$val=~tr/-0-9 //dc;$val', }, 0x507 => { #PH/4 Name => 'ColorSpace', Writable => 'int16u', PrintConv => { #6 0 => 'sRGB', 1 => 'Adobe RGB', 2 => 'Pro Photo RGB', }, }, 0x509 => { #6 Name => 'SceneMode', Writable => 'int16u', PrintConvColumns => 2, PrintConv => { 0 => 'Standard', 6 => 'Auto', #6 7 => 'Sport', 8 => 'Portrait', 9 => 'Landscape+Portrait', 10 => 'Landscape', 11 => 'Night Scene', 12 => 'Self Portrait', #11 13 => 'Panorama', #6 14 => '2 in 1', #11 15 => 'Movie', #11 16 => 'Landscape+Portrait', #6 17 => 'Night+Portrait', 18 => 'Indoor', #11 (Party - PH) 19 => 'Fireworks', 20 => 'Sunset', 21 => 'Beauty Skin', #PH 22 => 'Macro', 23 => 'Super Macro', #11 24 => 'Food', #11 25 => 'Documents', 26 => 'Museum', 27 => 'Shoot & Select', #11 28 => 'Beach & Snow', 29 => 'Self Protrait+Timer', #11 30 => 'Candle', 31 => 'Available Light', #11 32 => 'Behind Glass', #11 33 => 'My Mode', #11 34 => 'Pet', #11 35 => 'Underwater Wide1', #6 36 => 'Underwater Macro', #6 37 => 'Shoot & Select1', #11 38 => 'Shoot & Select2', #11 39 => 'High Key', 40 => 'Digital Image Stabilization', #6 41 => 'Auction', #11 42 => 'Beach', #11 43 => 'Snow', #11 44 => 'Underwater Wide2', #6 45 => 'Low Key', #6 46 => 'Children', #6 47 => 'Vivid', #11 48 => 'Nature Macro', #6 49 => 'Underwater Snapshot', #11 50 => 'Shooting Guide', #11 54 => 'Face Portrait', #11 57 => 'Bulb', #11 59 => 'Smile Shot', #11 60 => 'Quick Shutter', #11 63 => 'Slow Shutter', #11 64 => 'Bird Watching', #11 65 => 'Multiple Exposure', #11 66 => 'e-Portrait', #11 67 => 'Soft Background Shot', #11 142 => 'Hand-held Starlight', #PH (SH-21) 154 => 'HDR', #PH (XZ-2) }, }, 0x50a => { #PH/4/6 Name => 'NoiseReduction', Writable => 'int16u', PrintConv => { 0 => '(none)', BITMASK => { 0 => 'Noise Reduction', 1 => 'Noise Filter', 2 => 'Noise Filter (ISO Boost)', 3 => 'Auto', #11 }, }, }, 0x50b => { #6 Name => 'DistortionCorrection', Writable => 'int16u', PrintConv => \%offOn, }, 0x50c => { #PH/4 Name => 'ShadingCompensation', Writable => 'int16u', PrintConv => \%offOn, }, 0x50d => { Name => 'CompressionFactor', Writable => 'rational64u' }, #PH/4 0x50f => { #6 Name => 'Gradation', Writable => 'int16s', Notes => '3 or 4 values', Count => -1, Relist => [ [0..2], 3 ], # join values 0-2 for PrintConv PrintConv => [{ '0 0 0' => 'n/a', #PH (?) '-1 -1 1' => 'Low Key', '0 -1 1' => 'Normal', '1 -1 1' => 'High Key', },{ 0 => 'User-Selected', 1 => 'Auto-Override', }], }, 0x520 => { #6 Name => 'PictureMode', Writable => 'int16u', Notes => '1 or 2 values', Count => -1, PrintConv => [{ 1 => 'Vivid', 2 => 'Natural', 3 => 'Muted', 4 => 'Portrait', 5 => 'i-Enhance', #11 256 => 'Monotone', 512 => 'Sepia', }], }, 0x521 => { #6 Name => 'PictureModeSaturation', Writable => 'int16s', Count => 3, Notes => 'value, min, max', PrintConv => 'my @v=split " ",$val; "$v[0] (min $v[1], max $v[2])"', PrintConvInv => '$val=~tr/-0-9 //dc;$val', }, 0x522 => { #6 Name => 'PictureModeHue', Writable => 'int16s', Unknown => 1, # (needs verification) }, 0x523 => { #6 Name => 'PictureModeContrast', Writable => 'int16s', Count => 3, Notes => 'value, min, max', PrintConv => 'my @v=split " ",$val; "$v[0] (min $v[1], max $v[2])"', PrintConvInv => '$val=~tr/-0-9 //dc;$val', }, 0x524 => { #6 Name => 'PictureModeSharpness', # verified as the Sharpness setting in the Picture Mode menu for the E-410 Writable => 'int16s', Count => 3, Notes => 'value, min, max', PrintConv => 'my @v=split " ",$val; "$v[0] (min $v[1], max $v[2])"', PrintConvInv => '$val=~tr/-0-9 //dc;$val', }, 0x525 => { #6 Name => 'PictureModeBWFilter', Writable => 'int16s', PrintConvColumns => 2, PrintConv => { 0 => 'n/a', 1 => 'Neutral', 2 => 'Yellow', 3 => 'Orange', 4 => 'Red', 5 => 'Green', }, }, 0x526 => { #6 Name => 'PictureModeTone', Writable => 'int16s', PrintConvColumns => 2, PrintConv => { 0 => 'n/a', 1 => 'Neutral', 2 => 'Sepia', 3 => 'Blue', 4 => 'Purple', 5 => 'Green', }, }, 0x527 => { #12 Name => 'NoiseFilter', Writable => 'int16s', Count => 3, PrintConv => { '0 0 0' => 'n/a', #PH (?) '-2 -2 1' => 'Off', '-1 -2 1' => 'Low', '0 -2 1' => 'Standard', '1 -2 1' => 'High', }, }, 0x529 => { #PH Name => 'ArtFilter', Writable => 'int16u', Count => 4, PrintConvColumns => 2, PrintConv => [ \%filters ], }, 0x52c => { #PH Name => 'MagicFilter', Writable => 'int16u', Count => 4, # (2nd number is 0, 1280 or 1792, 3rd/4th are 0) # (1792 observed for E-5 Gentle Sepia and XZ-1 Dramatic Tone) PrintConvColumns => 2, PrintConv => [ \%filters ], }, 0x52d => { #11 Name => 'PictureModeEffect', Writable => 'int16s', Count => 3, PrintConv => { '0 0 0' => 'n/a', #PH (?) '-1 -1 1' => 'Low', '0 -1 1' => 'Standard', '1 -1 1' => 'High', }, }, 0x52e => { #11/PH Name => 'ToneLevel', PrintConv => [ undef, # ? '"Highlights $val"', undef, # (highlights min) undef, # (highlights max) undef, # ? '"Shadows $val"', undef, # (shadows min) undef, # (shadows max) ] }, 0x52f => { #PH Name => 'ArtFilterEffect', Writable => 'int16u', Count => 20, PrintHex => 1, PrintConvColumns => 2, PrintConv => [ \%filters, undef, undef, undef, { # there are 5 available art filter effects for the E-PL3... 0x0000 => 'No Effect', 0x8010 => 'Star Light', 0x8020 => 'Pin Hole', 0x8030 => 'Frame', 0x8040 => 'Soft Focus', 0x8050 => 'White Edge', 0x8060 => 'B&W', # (NC - E-PL2 with "Grainy Film" filter) # (E-PL2 also has "Pict. Tone" effect) }, ], }, 0x600 => { #PH/4 Name => 'DriveMode', Writable => 'int16u', Count => -1, Notes => '2 or 3 numbers: 1. Mode, 2. Shot number, 3. Mode bits', PrintConv => q{ my ($a,$b,$c) = split ' ',$val; return 'Single Shot' unless $a; if ($a == 5 and defined $c) { $a = DecodeBits($c, { #6 0 => 'AE', 1 => 'WB', 2 => 'FL', 3 => 'MF', 6 => 'Focus', #PH }) . ' Bracketing'; $a =~ s/, /+/g; } else { my %a = ( 1 => 'Continuous Shooting', 2 => 'Exposure Bracketing', 3 => 'White Balance Bracketing', 4 => 'Exposure+WB Bracketing', #6 ); $a = $a{$a} || "Unknown ($a)"; } return "$a, Shot $b"; }, }, 0x601 => { #6 Name => 'PanoramaMode', Writable => 'int16u', Notes => '2 numbers: 1. Mode, 2. Shot number', PrintConv => q{ my ($a,$b) = split ' ',$val; return 'Off' unless $a; my %a = ( 1 => 'Left to Right', 2 => 'Right to Left', 3 => 'Bottom to Top', 4 => 'Top to Bottom', ); return ($a{$a} || "Unknown ($a)") . ', Shot ' . $b; }, }, 0x603 => { #PH/4 Name => 'ImageQuality2', Writable => 'int16u', PrintConv => { 1 => 'SQ', 2 => 'HQ', 3 => 'SHQ', 4 => 'RAW', 5 => 'SQ (5)', # (E-500) }, }, 0x604 => { #PH Name => 'ImageStabilization', Writable => 'int32u', DataMember => 'ImageStabilization', RawConv => '$$self{ImageStabilization} = $val', PrintConv => { 0 => 'Off', 1 => 'On, Mode 1', 2 => 'On, Mode 2', 3 => 'On, Mode 3', 4 => 'On, Mode 4', # (NC, E-P5) }, }, 0x804 => { #PH (E-M1 with firmware update) Name => 'StackedImage', Writable => 'int32u', Count => 2, PrintConv => { '0 0' => 'No', '9 8' => 'Focus-stacked (8 images)', }, }, 0x900 => { #11 Name => 'ManometerPressure', Writable => 'int16u', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => '"$val kPa"', PrintConvInv => '$val=~s/ ?kPa//i; $val', }, 0x901 => { #PH (u770SW) # 2 numbers: 1st looks like meters above sea level, 2nd is usually 3x the 1st (feet?) Name => 'ManometerReading', Writable => 'int32s', Count => 2, ValueConv => 'my @a=split(" ",$val); $_ /= 10 foreach @a; "@a"', ValueConvInv => 'my @a=split(" ",$val); $_ *= 10 foreach @a; "@a"', PrintConv => '$val=~s/(\S+) (\S+)/$1 m, $2 ft/; $val', PrintConvInv => '$val=~s/ ?(m|ft)//gi; $val', }, 0x902 => { #11 Name => 'ExtendedWBDetect', Writable => 'int16u', PrintConv => \%offOn, }, 0x903 => { #11 Name => 'RollAngle', Notes => 'converted to degrees of clockwise camera rotation', Writable => 'int16s', Count => 2, # (second value is 0 if level gauge is off) # negate to express as clockwise rotation ValueConv => '$val=~s/ 1$// ? -$val/10 : "n/a"', ValueConvInv => 'IsFloat($val) ? sprintf("%.0f 1",-$val*10) : "0 0"', }, 0x904 => { #11 Name => 'PitchAngle', Notes => 'converted to degrees of upward camera tilt', Writable => 'int16s', Count => 2, # (second value is 0 if level gauge is off) ValueConv => '$val =~ s/ 1$// ? $val / 10 : "n/a"', ValueConvInv => 'IsFloat($val) ? sprintf("%.0f 1",$val*10) : "0 0"', }, 0x908 => { #PH (NC, E-M1) Name => 'DateTimeUTC', Writable => 'string', Groups => { 2 => 'Time' }, Shift => 'Time', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,undef,1)', }, ); # Olympus RAW processing IFD (ref 6) %Image::ExifTool::Olympus::RawDevelopment = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x000 => { #PH Name => 'RawDevVersion', Writable => 'undef', RawConv => '$val=~s/\0+$//; $val', # (may be null terminated) Count => 4, }, 0x100 => { Name => 'RawDevExposureBiasValue', Writable => 'rational64s' }, 0x101 => { Name => 'RawDevWhiteBalanceValue', Writable => 'int16u' }, 0x102 => { Name => 'RawDevWBFineAdjustment', Writable => 'int16s' }, 0x103 => { Name => 'RawDevGrayPoint', Writable => 'int16u', Count => 3 }, 0x104 => { Name => 'RawDevSaturationEmphasis', Writable => 'int16s', Count => 3 }, 0x105 => { Name => 'RawDevMemoryColorEmphasis', Writable => 'int16u' }, 0x106 => { Name => 'RawDevContrastValue', Writable => 'int16s', Count => 3 }, 0x107 => { Name => 'RawDevSharpnessValue', Writable => 'int16s', Count => 3 }, 0x108 => { Name => 'RawDevColorSpace', Writable => 'int16u', PrintConv => { #11 0 => 'sRGB', 1 => 'Adobe RGB', 2 => 'Pro Photo RGB', }, }, 0x109 => { Name => 'RawDevEngine', Writable => 'int16u', PrintConv => { #11 0 => 'High Speed', 1 => 'High Function', 2 => 'Advanced High Speed', 3 => 'Advanced High Function', }, }, 0x10a => { Name => 'RawDevNoiseReduction', Writable => 'int16u', PrintConv => { #11 0 => '(none)', BITMASK => { 0 => 'Noise Reduction', 1 => 'Noise Filter', 2 => 'Noise Filter (ISO Boost)', }, }, }, 0x10b => { Name => 'RawDevEditStatus', Writable => 'int16u', PrintConv => { #11 0 => 'Original', 1 => 'Edited (Landscape)', 6 => 'Edited (Portrait)', 8 => 'Edited (Portrait)', }, }, 0x10c => { Name => 'RawDevSettings', Writable => 'int16u', PrintConv => { #11 0 => '(none)', BITMASK => { 0 => 'WB Color Temp', 1 => 'WB Gray Point', 2 => 'Saturation', 3 => 'Contrast', 4 => 'Sharpness', 5 => 'Color Space', 6 => 'High Function', 7 => 'Noise Reduction', }, }, }, ); # Olympus RAW processing B IFD (ref 11) %Image::ExifTool::Olympus::RawDevelopment2 = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x000 => { Name => 'RawDevVersion', Writable => 'undef', RawConv => '$val=~s/\0+$//; $val', # (may be null terminated) Count => 4, }, 0x100 => { Name => 'RawDevExposureBiasValue', Writable => 'rational64s' }, 0x101 => { Name => 'RawDevWhiteBalance', Writable => 'int16u', PrintConv => { 1 => 'Color Temperature', 2 => 'Gray Point', }, }, 0x102 => { Name => 'RawDevWhiteBalanceValue', Writable => 'int16u' }, 0x103 => { Name => 'RawDevWBFineAdjustment', Writable => 'int16s' }, 0x104 => { Name => 'RawDevGrayPoint', Writable => 'int16u', Count => 3 }, 0x105 => { Name => 'RawDevContrastValue', Writable => 'int16s', Count => 3 }, 0x106 => { Name => 'RawDevSharpnessValue', Writable => 'int16s', Count => 3 }, 0x107 => { Name => 'RawDevSaturationEmphasis', Writable => 'int16s', Count => 3 }, 0x108 => { Name => 'RawDevMemoryColorEmphasis', Writable => 'int16u' }, 0x109 => { Name => 'RawDevColorSpace', Writable => 'int16u', PrintConv => { 0 => 'sRGB', 1 => 'Adobe RGB', 2 => 'Pro Photo RGB', }, }, 0x10a => { Name => 'RawDevNoiseReduction', Writable => 'int16u', PrintConv => { 0 => '(none)', BITMASK => { 0 => 'Noise Reduction', 1 => 'Noise Filter', 2 => 'Noise Filter (ISO Boost)', }, }, }, 0x10b => { Name => 'RawDevEngine', Writable => 'int16u', PrintConv => { 0 => 'High Speed', 1 => 'High Function', }, }, 0x10c => { Name => 'RawDevPictureMode', Writable => 'int16u', PrintConv => { 1 => 'Vivid', 2 => 'Natural', 3 => 'Muted', 256 => 'Monotone', 512 => 'Sepia', }, }, 0x10d => { Name => 'RawDevPMSaturation', Writable => 'int16s', Count => 3 }, 0x10e => { Name => 'RawDevPMContrast', Writable => 'int16s', Count => 3 }, 0x10f => { Name => 'RawDevPMSharpness', Writable => 'int16s', Count => 3 }, 0x110 => { Name => 'RawDevPM_BWFilter', Writable => 'int16u', PrintConv => { 1 => 'Neutral', 2 => 'Yellow', 3 => 'Orange', 4 => 'Red', 5 => 'Green', }, }, 0x111 => { Name => 'RawDevPMPictureTone', Writable => 'int16u', PrintConv => { 1 => 'Neutral', 2 => 'Sepia', 3 => 'Blue', 4 => 'Purple', 5 => 'Green', }, }, 0x112 => { Name => 'RawDevGradation', Writable => 'int16s', Count => 3 }, 0x113 => { Name => 'RawDevSaturation3', Writable => 'int16s', Count => 3 }, #(NC Count) 0x119 => { Name => 'RawDevAutoGradation', Writable => 'int16u', PrintConv => \%offOn }, 0x120 => { Name => 'RawDevPMNoiseFilter', Writable => 'int16u' }, #(NC format) 0x121 => { #PH (E-P5) Name => 'RawDevArtFilter', Writable => 'int16u', Count => 4, PrintConvColumns => 2, PrintConv => [ \%filters ], }, ); # Olympus Image processing IFD %Image::ExifTool::Olympus::ImageProcessing = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x000 => { #PH Name => 'ImageProcessingVersion', Writable => 'undef', RawConv => '$val=~s/\0+$//; $val', # (may be null terminated) Count => 4, }, 0x100 => { Name => 'WB_RBLevels', Writable => 'int16u', Count => 2 }, #6 # 0x101 - in-camera AutoWB unless it is all 0's or all 256's (ref 21) 0x102 => { Name => 'WB_RBLevels3000K', Writable => 'int16u', Count => 2 }, #11 0x103 => { Name => 'WB_RBLevels3300K', Writable => 'int16u', Count => 2 }, #11 0x104 => { Name => 'WB_RBLevels3600K', Writable => 'int16u', Count => 2 }, #11 0x105 => { Name => 'WB_RBLevels3900K', Writable => 'int16u', Count => 2 }, #11 0x106 => { Name => 'WB_RBLevels4000K', Writable => 'int16u', Count => 2 }, #11 0x107 => { Name => 'WB_RBLevels4300K', Writable => 'int16u', Count => 2 }, #11 0x108 => { Name => 'WB_RBLevels4500K', Writable => 'int16u', Count => 2 }, #11 0x109 => { Name => 'WB_RBLevels4800K', Writable => 'int16u', Count => 2 }, #11 0x10a => { Name => 'WB_RBLevels5300K', Writable => 'int16u', Count => 2 }, #11 0x10b => { Name => 'WB_RBLevels6000K', Writable => 'int16u', Count => 2 }, #11 0x10c => { Name => 'WB_RBLevels6600K', Writable => 'int16u', Count => 2 }, #11 0x10d => { Name => 'WB_RBLevels7500K', Writable => 'int16u', Count => 2 }, #11 0x10e => { Name => 'WB_RBLevelsCWB1', Writable => 'int16u', Count => 2 }, #11 0x10f => { Name => 'WB_RBLevelsCWB2', Writable => 'int16u', Count => 2 }, #11 0x110 => { Name => 'WB_RBLevelsCWB3', Writable => 'int16u', Count => 2 }, #11 0x111 => { Name => 'WB_RBLevelsCWB4', Writable => 'int16u', Count => 2 }, #11 0x113 => { Name => 'WB_GLevel3000K', Writable => 'int16u' }, #11 0x114 => { Name => 'WB_GLevel3300K', Writable => 'int16u' }, #11 0x115 => { Name => 'WB_GLevel3600K', Writable => 'int16u' }, #11 0x116 => { Name => 'WB_GLevel3900K', Writable => 'int16u' }, #11 0x117 => { Name => 'WB_GLevel4000K', Writable => 'int16u' }, #11 0x118 => { Name => 'WB_GLevel4300K', Writable => 'int16u' }, #11 0x119 => { Name => 'WB_GLevel4500K', Writable => 'int16u' }, #11 0x11a => { Name => 'WB_GLevel4800K', Writable => 'int16u' }, #11 0x11b => { Name => 'WB_GLevel5300K', Writable => 'int16u' }, #11 0x11c => { Name => 'WB_GLevel6000K', Writable => 'int16u' }, #11 0x11d => { Name => 'WB_GLevel6600K', Writable => 'int16u' }, #11 0x11e => { Name => 'WB_GLevel7500K', Writable => 'int16u' }, #11 0x11f => { Name => 'WB_GLevel', Writable => 'int16u' }, #11 # 0x121 = WB preset for flash (about 6000K) (ref 21) # 0x125 = WB preset for underwater (ref 21) 0x200 => { #6 Name => 'ColorMatrix', Writable => 'int16u', Format => 'int16s', Count => 9, }, # color matrices (ref 11): # 0x0201-0x020d are sRGB color matrices # 0x020e-0x021a are Adobe RGB color matrices # 0x021b-0x0227 are ProPhoto RGB color matrices # 0x0228 and 0x0229 are ColorMatrix for E-330 # 0x0250-0x0252 are sRGB color matrices # 0x0253-0x0255 are Adobe RGB color matrices # 0x0256-0x0258 are ProPhoto RGB color matrices 0x300 => { Name => 'Enhancer', Writable => 'int16u' }, #11 0x301 => { Name => 'EnhancerValues', Writable => 'int16u', Count => 7 }, #11 0x310 => { Name => 'CoringFilter', Writable => 'int16u' }, #11 0x311 => { Name => 'CoringValues', Writable => 'int16u', Count => 7 }, #11 0x600 => { Name => 'BlackLevel2', Writable => 'int16u', Count => 4 }, #11 0x610 => { Name => 'GainBase', Writable => 'int16u' }, #11 0x611 => { Name => 'ValidBits', Writable => 'int16u', Count => 2 }, #4/6 0x612 => { Name => 'CropLeft', Writable => 'int16u', Count => 2 }, #11 0x613 => { Name => 'CropTop', Writable => 'int16u', Count => 2 }, #11 0x614 => { Name => 'CropWidth', Writable => 'int32u' }, #PH/11 0x615 => { Name => 'CropHeight', Writable => 'int32u' }, #PH/11 0x635 => { #PH (data starts with "CMIO\x01\0") Name => 'UnknownBlock1', Writable => 'undef', Notes => 'large unknown data block in ORF images but not JPG images', # 'Drop' because too large for APP1 in JPEG images Flags => [ 'Unknown', 'Binary', 'Drop' ], }, 0x636 => { #PH (data starts with "CMIO\x01\0") Name => 'UnknownBlock2', Writable => 'undef', Notes => 'large unknown data block in ORF images but not JPG images', # 'Drop' because too large for APP1 in JPEG images Flags => [ 'Unknown', 'Binary', 'Drop' ], }, # 0x800 LensDistortionParams, float[9] (ref 11) # 0x801 LensShadingParams, int16u[16] (ref 11) 0x0805 => { #21 Name => 'SensorCalibration', Notes => '2 numbers: 1. recommended maximum, 2. calibration midpoint', Writable => 'int16s', Count => 2, }, # 0x1010-0x1012 are the processing options used in camera or in # Olympus software, which 0x050a-0x050c are in-camera only (ref 6) 0x1010 => { #PH/4 Name => 'NoiseReduction2', Writable => 'int16u', PrintConv => { 0 => '(none)', BITMASK => { 0 => 'Noise Reduction', 1 => 'Noise Filter', 2 => 'Noise Filter (ISO Boost)', }, }, }, 0x1011 => { #6 Name => 'DistortionCorrection2', Writable => 'int16u', PrintConv => \%offOn, }, 0x1012 => { #PH/4 Name => 'ShadingCompensation2', Writable => 'int16u', PrintConv => \%offOn, }, 0x101c => { #11 Name => 'MultipleExposureMode', Writable => 'int16u', Count => 2, PrintConv => [{ 0 => 'Off', 2 => 'On (2 frames)', 3 => 'On (3 frames)', }], }, 0x1103 => { #PH Name => 'UnknownBlock3', Writable => 'undef', Notes => 'large unknown data block in ORF images but not JPG images', # 'Drop' because too large for APP1 in JPEG images Flags => [ 'Unknown', 'Binary', 'Drop' ], }, 0x1104 => { #PH (overlaps data for 0x1103 in E-M5 ORF images) Name => 'UnknownBlock4', Writable => 'undef', Notes => 'large unknown data block in ORF images but not JPG images', # 'Drop' because too large for APP1 in JPEG images Flags => [ 'Unknown', 'Binary', 'Drop' ], }, 0x1112 => { #11 Name => 'AspectRatio', Writable => 'int8u', Count => 2, PrintConv => { # '0 0' - have seen this with a 16:9 XZ-1 image - PH '1 1' => '4:3', '1 4' => '1:1', #PH (E-P5 Storyboard effect, does this indicate 4:3 converted to 6:6?) '2 1' => '3:2 (RAW)', #forum6285 '2 2' => '3:2', '3 1' => '16:9 (RAW)', #forum6285 '3 3' => '16:9', '4 1' => '1:1 (RAW)', #forum6285 '4 4' => '6:6', '5 5' => '5:4', '6 6' => '7:6', '7 7' => '6:5', '8 8' => '7:5', '9 1' => '3:4 (RAW)', #forum6285 '9 9' => '3:4', }, }, 0x1113 => { Name => 'AspectFrame', Writable => 'int16u', Count => 4 }, #11 0x1200 => { #11/PH Name => 'FacesDetected', Writable => 'int32u', Count => -1, Notes => '2 or 3 values', }, 0x1201 => { #11/PH Name => 'FaceDetectArea', Writable => 'int16s', Count => -1, # (varies with model) Binary => 1, # (too long) Notes => q{ for models with 2 values in FacesDetected this gives X/Y coordinates in the FaceDetectFrame for all 4 corners of the face rectangle. For models with 3 values in FacesDetected this gives X/Y coordinates, size and rotation angle of the face detect square }, }, 0x1202 => { Name => 'MaxFaces', Writable => 'int32u', Count => 3 }, #PH 0x1203 => { #PH Name => 'FaceDetectFrameSize', Writable => 'int16u', Count => 6, Notes => 'width/height of the full face detect frame', }, 0x1207 => { #PH Name => 'FaceDetectFrameCrop', Writable => 'int16s', Count => 12, Notes => 'X/Y offset and width/height of the cropped face detect frame', }, 0x1306 => { #PH (NC, E-M1) Name => 'CameraTemperature', Writable => 'int16u', Format => 'int16s', #(NC) ValueConv => '$val ? $val : undef', # zero for some models (how to differentiate from 0 C?) Notes => 'this seems to be in degrees C only for some models', }, # 0x1905 - focal length (PH, E-M1) ); # Olympus Focus Info IFD %Image::ExifTool::Olympus::FocusInfo = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x000 => { #PH Name => 'FocusInfoVersion', Writable => 'undef', RawConv => '$val=~s/\0+$//; $val', # (may be null terminated) Count => 4, }, 0x209 => { #PH/4 Name => 'AutoFocus', Writable => 'int16u', PrintConv => \%offOn, Unknown => 1, #6 }, 0x210 => { Name => 'SceneDetect', Writable => 'int16u' }, #11 0x211 => { #11 Name => 'SceneArea', Writable => 'int32u', Count => 8, Unknown => 1, # (numbers don't make much sense?) }, 0x212 => { #11 Name => 'SceneDetectData', Writable => 'int32u', Count => 720, Binary => 1, Unknown => 1, # (but what does it mean?) }, # 0x214 - int16u: normally 0, but 1 for E-M1 focus-bracketing, and have seen 1 and 256 at other times 0x300 => { Name => 'ZoomStepCount', Writable => 'int16u' }, #6 0x301 => { Name => 'FocusStepCount', Writable => 'int16u' }, #11 0x303 => { Name => 'FocusStepInfinity', Writable => 'int16u' }, #11 0x304 => { Name => 'FocusStepNear', Writable => 'int16u' }, #11 0x305 => { #4 Name => 'FocusDistance', Writable => 'rational64u', # this rational value looks like it is in mm when the denominator is # 1 (E-1), and cm when denominator is 10 (E-300), so if we ignore the # denominator we are consistently in mm - PH Format => 'int32u', Count => 2, ValueConv => q{ my ($a,$b) = split ' ',$val; return 0 if $a == 0xffffffff; return $a / 1000; }, ValueConvInv => q{ return '4294967295 1' unless $val; $val = int($val * 1000 + 0.5); return "$val 1"; }, PrintConv => '$val ? "$val m" : "inf"', PrintConvInv => '$val eq "inf" ? 0 : $val=~s/\s*m$//, $val', }, 0x308 => [ # NEED A BETTER WAY TO DETERMINE WHICH MODELS USE WHICH ENCODING! { Name => 'AFPoint', Condition => '$$self{Model} =~ /E-(3|5|30)\b/', Writable => 'int16u', PrintHex => 1, # decoded by ref 6 Notes => q{ for the E-3, E-5 and E-30 the value is separated into 2 parts: low 5 bits give AF point, upper bits give AF target selection mode }, ValueConv => '($val & 0x1f) . " " . ($val & 0xffe0)', ValueConvInv => 'my @v=split(" ",$val); @v == 2 ? $v[0] + $v[1] : $val', PrintConvColumns => 2, PrintConv => [ { 0x00 => '(none)', 0x01 => 'Top-left (horizontal)', 0x02 => 'Top-center (horizontal)', 0x03 => 'Top-right (horizontal)', 0x04 => 'Left (horizontal)', 0x05 => 'Mid-left (horizontal)', 0x06 => 'Center (horizontal)', 0x07 => 'Mid-right (horizontal)', 0x08 => 'Right (horizontal)', 0x09 => 'Bottom-left (horizontal)', 0x0a => 'Bottom-center (horizontal)', 0x0b => 'Bottom-right (horizontal)', 0x0c => 'Top-left (vertical)', 0x0d => 'Top-center (vertical)', 0x0e => 'Top-right (vertical)', 0x0f => 'Left (vertical)', 0x10 => 'Mid-left (vertical)', 0x11 => 'Center (vertical)', 0x12 => 'Mid-right (vertical)', 0x13 => 'Right (vertical)', 0x14 => 'Bottom-left (vertical)', 0x15 => 'Bottom-center (vertical)', 0x16 => 'Bottom-right (vertical)', 0x1f => 'n/a', #PH (NC, E-3) }, { 0x00 => 'Single Target', 0x40 => 'All Target', 0x80 => 'Dynamic Single Target', 0xe0 => 'n/a', #PH (NC, E-3) } ], },{ #PH (models with 7-point AF) Name => 'AFPoint', Condition => '$$self{Model} =~ /E-(520|600|620)\b/', Notes => 'models with 7-point AF', Writable => 'int16u', PrintHex => 1, ValueConv => '($val & 0x1f) . " " . ($val & 0xffe0)', ValueConvInv => 'my @v=split(" ",$val); @v == 2 ? $v[0] + $v[1] : $val', PrintConv => [ { 0x00 => '(none)', 0x01 => 'Center', # need to fill this in... }, { 0x00 => 'Single Target', 0x40 => 'All Target', # (guess) }, ] },{ #11 Name => 'AFPoint', Writable => 'int16u', Notes => 'other models', RawConv => '($val or $$self{Model} ne "E-P1") ? $val : undef', PrintConv => { # (E-P1 always writes 0, maybe other models do too - PH) 0 => 'Left (or n/a)', 1 => 'Center (horizontal)', #6 (E-510) 2 => 'Right', 3 => 'Center (vertical)', #6 (E-510) 255 => 'None', }, } ], # 0x31a Continuous AF parameters? 0x328 => { #PH Name => 'AFInfo', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::AFInfo' }, }, # 0x1200-0x1209 Flash information: 0x1201 => { #6 Name => 'ExternalFlash', Writable => 'int16u', Count => 2, PrintConv => { '0 0' => 'Off', '1 0' => 'On', }, }, 0x1203 => { #11 Name => 'ExternalFlashGuideNumber', Writable => 'rational64s', Unknown => 1, # (needs verification) }, 0x1204 => { #11(reversed)/7 Name => 'ExternalFlashBounce', Writable => 'int16u', PrintConv => { 0 => 'Bounce or Off', 1 => 'Direct', }, }, 0x1205 => { Name => 'ExternalFlashZoom', Writable => 'rational64u' }, #11 (ref converts to mm using table) 0x1208 => { #6 Name => 'InternalFlash', Writable => 'int16u', Count => -1, PrintConv => { '0' => 'Off', '1' => 'On', '0 0' => 'Off', '1 0' => 'On', }, }, 0x1209 => { #6 Name => 'ManualFlash', Writable => 'int16u', Count => 2, Notes => '2 numbers: 1. 0=Off, 1=On, 2. Flash strength', PrintConv => q{ my ($a,$b) = split ' ',$val; return 'Off' unless $a; $b = ($b == 1) ? 'Full' : "1/$b"; return "On ($b strength)"; }, }, 0x120a => { #PH Name => 'MacroLED', Writable => 'int16u', PrintConv => \%offOn, }, 0x1500 => [{ #6 Name => 'SensorTemperature', # (Stylus 1 stores values like "34 0 0") Condition => '$$self{Model} =~ /E-(1|M5)\b/ || $count != 1', Writable => 'int16s', PrintConv => '$val=~s/ 0 0$//; "$val C"', PrintConvInv => '$val=~s/ ?C$//; $val', },{ Name => 'SensorTemperature', Writable => 'int16s', RawConv => '($val and $val ne "-32768") ? $val : undef', # ignore 0 and -32768 # ValueConv => '-2*(($val/135)**2)+55', #11 ValueConv => '84 - 3 * $val / 26', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5423.0.html ValueConvInv => 'int((84 - $val) * 26 / 3 + 0.5)', PrintConv => 'sprintf("%.1f C",$val)', PrintConvInv => '$val=~s/ ?C$//; $val', # data from test shots by Eric Sibert: # E-510 E-620 # Raw Ambient Raw Ambient # --- ------- --- ------- # 534 22.7 518 22.7 # 550 20.6 531 19.3 # 552 20.8 533 17.9 # 558 19.3 582 17.2 # 564 19.1 621 12.3 # 567 17.8 634 9.7 # 576 18.6 650 8.0 # 582 17.2 660 7.7 # 599 13.8 703 3.3 # 631 10.7 880 -20.6 # 642 12.4 880 -20.6 # 652 9.6 892 -24.4 # 692 5.2 892 -22.7 # 714 3.3 # 895 -19.8 # 895 -19.2 # 900 -21.7 }], 0x1600 => { # ref http://fourthirdsphoto.com/vbb/showpost.php?p=107607&postcount=15 Name => 'ImageStabilization', # (the other value is more reliable, so ignore this totally if the other exists) Condition => 'not defined $$self{ImageStabilization}', Writable => 'undef', # if the first 4 bytes are non-zero, then bit 0x01 of byte 44 # gives the stabilization mode PrintConv => q{ $val =~ /^\0{4}/ ? 'Off' : 'On, ' . (unpack('x44C',$val) & 0x01 ? 'Mode 1' : 'Mode 2') }, }, # 0x102a same as Subdir4-0x300 ); # AF information (ref PH) %Image::ExifTool::Olympus::AFInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, # 0x2a - int8u: ImagerAFMode? 0=Manual, 1=Auto # 0x30 - int16u: AFAreaXPosition? # 0x32 - int16u: AFAreaWidth? (202) # 0x34 - int16u: AFAreaYPosition? # 0x36 - int16u: AFAreaHeight? (50) # (AF area positions above give the top-left coordinates of the AF area in the # AF frame. Increasing Y is downwards, and the AF frame size is about 1280x256) ); # Olympus raw information tags (ref 6) %Image::ExifTool::Olympus::RawInfo = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, NOTES => 'These tags are found only in ORF images of some models (eg. C8080WZ).', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x000 => { Name => 'RawInfoVersion', Writable => 'undef', RawConv => '$val=~s/\0+$//; $val', # (may be null terminated) Count => 4, }, 0x100 => { Name => 'WB_RBLevelsUsed', Writable => 'int16u', Count => 2 }, 0x110 => { Name => 'WB_RBLevelsAuto', Writable => 'int16u', Count => 2 }, 0x120 => { Name => 'WB_RBLevelsShade', Writable => 'int16u', Count => 2 }, 0x121 => { Name => 'WB_RBLevelsCloudy', Writable => 'int16u', Count => 2 }, 0x122 => { Name => 'WB_RBLevelsFineWeather', Writable => 'int16u', Count => 2 }, 0x123 => { Name => 'WB_RBLevelsTungsten', Writable => 'int16u', Count => 2 }, 0x124 => { Name => 'WB_RBLevelsEveningSunlight',Writable => 'int16u', Count => 2 }, 0x130 => { Name => 'WB_RBLevelsDaylightFluor', Writable => 'int16u', Count => 2 }, 0x131 => { Name => 'WB_RBLevelsDayWhiteFluor', Writable => 'int16u', Count => 2 }, 0x132 => { Name => 'WB_RBLevelsCoolWhiteFluor', Writable => 'int16u', Count => 2 }, 0x133 => { Name => 'WB_RBLevelsWhiteFluorescent',Writable => 'int16u', Count => 2 }, 0x200 => { Name => 'ColorMatrix2', Format => 'int16s', Writable => 'int16u', Count => 9, }, # 0x240 => 'ColorMatrixDefault', ? # 0x250 => 'ColorMatrixSaturation', ? # 0x251 => 'ColorMatrixHue', ? # 0x252 => 'ColorMatrixContrast', ? # 0x300 => sharpness-related # 0x301 => list of sharpness-related values 0x310 => { Name => 'CoringFilter', Writable => 'int16u' }, 0x311 => { Name => 'CoringValues', Writable => 'int16u', Count => 11 }, 0x600 => { Name => 'BlackLevel2', Writable => 'int16u', Count => 4 }, 0x601 => { Name => 'YCbCrCoefficients', Notes => 'stored as int16u[6], but extracted as rational32u[3]', Format => 'rational32u', }, 0x611 => { Name => 'ValidPixelDepth', Writable => 'int16u', Count => 2 }, 0x612 => { Name => 'CropLeft', Writable => 'int16u' }, #11 0x613 => { Name => 'CropTop', Writable => 'int16u' }, #11 0x614 => { Name => 'CropWidth', Writable => 'int32u' }, 0x615 => { Name => 'CropHeight', Writable => 'int32u' }, 0x1000 => { Name => 'LightSource', Writable => 'int16u', PrintConv => { 0 => 'Unknown', 16 => 'Shade', 17 => 'Cloudy', 18 => 'Fine Weather', 20 => 'Tungsten (Incandescent)', 22 => 'Evening Sunlight', 33 => 'Daylight Fluorescent', 34 => 'Day White Fluorescent', 35 => 'Cool White Fluorescent', 36 => 'White Fluorescent', 256 => 'One Touch White Balance', 512 => 'Custom 1-4', }, }, # the following 5 tags all have 3 values: val, min, max 0x1001 => { Name => 'WhiteBalanceComp', Writable => 'int16s', Count => 3 }, 0x1010 => { Name => 'SaturationSetting', Writable => 'int16s', Count => 3 }, 0x1011 => { Name => 'HueSetting', Writable => 'int16s', Count => 3 }, 0x1012 => { Name => 'ContrastSetting', Writable => 'int16s', Count => 3 }, 0x1013 => { Name => 'SharpnessSetting', Writable => 'int16s', Count => 3 }, # settings written by Camedia Master 4.x 0x2000 => { Name => 'CMExposureCompensation', Writable => 'rational64s' }, 0x2001 => { Name => 'CMWhiteBalance', Writable => 'int16u' }, 0x2002 => { Name => 'CMWhiteBalanceComp', Writable => 'int16s' }, 0x2010 => { Name => 'CMWhiteBalanceGrayPoint', Writable => 'int16u', Count => 3 }, 0x2020 => { Name => 'CMSaturation', Writable => 'int16s', Count => 3 }, 0x2021 => { Name => 'CMHue', Writable => 'int16s', Count => 3 }, 0x2022 => { Name => 'CMContrast', Writable => 'int16s', Count => 3 }, 0x2023 => { Name => 'CMSharpness', Writable => 'int16s', Count => 3 }, ); # Olympus unknown information tags %Image::ExifTool::Olympus::UnknownInfo = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, ); # Tags found only in some FE models %Image::ExifTool::Olympus::FETags = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ Some FE models write a large number of tags here, but most of this information remains unknown. }, 0x0100 => { Name => 'BodyFirmwareVersion', Writable => 'string', }, ); # tags in Olympus QuickTime videos (ref PH) # (similar information in Kodak,Minolta,Nikon,Olympus,Pentax and Sanyo videos) %Image::ExifTool::Olympus::MOV1 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, NOTES => q{ This information is found in MOV videos from Olympus models such as the D540Z, D595Z, FE100, FE110, FE115, FE170 and FE200. }, 0x00 => { Name => 'Make', Format => 'string[24]', }, 0x18 => { Name => 'Model', Description => 'Camera Model Name', Format => 'string[8]', SeparateTable => 'CameraType', PrintConv => \%olympusCameraTypes, }, # (01 00 at offset 0x20) 0x26 => { Name => 'ExposureUnknown', Unknown => 1, Format => 'int32u', # this conversion doesn't work for all models (eg. gives "1/100000") ValueConv => '$val ? 10 / $val : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x2a => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', }, 0x32 => { #(NC) Name => 'ExposureCompensation', Format => 'rational64s', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', }, # 0x44 => WhiteBalance ? 0x48 => { Name => 'FocalLength', Format => 'rational64u', PrintConv => 'sprintf("%.1f mm",$val)', }, # 0xb1 => 'ISO', #(I don't think this works - PH) ); # tags in Olympus QuickTime videos (ref PH) # (similar information in Kodak,Minolta,Nikon,Olympus,Pentax and Sanyo videos) %Image::ExifTool::Olympus::MOV2 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, NOTES => q{ This information is found in MOV videos from Olympus models such as the FE120, FE140 and FE190. }, 0x00 => { Name => 'Make', Format => 'string[24]', }, 0x18 => { Name => 'Model', Description => 'Camera Model Name', Format => 'string[24]', Notes => 'the actual model name, no decoding necessary', }, # (01 00 at offset 0x30) 0x36 => { Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val ? 10 / $val : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x3a => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', }, 0x42 => { #(NC) Name => 'ExposureCompensation', Format => 'rational64s', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', }, 0x58 => { Name => 'FocalLength', Format => 'rational64u', PrintConv => 'sprintf("%.1f mm",$val)', }, 0xc1 => { Name => 'ISO', Format => 'int16u', }, ); # tags in Olympus MP4 videos (ref PH) %Image::ExifTool::Olympus::MP4 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, NOTES => q{ This information is found in MP4 videos from Olympus models such as the u7040 and u9010. }, 0x00 => { Name => 'Make', Format => 'string[24]', }, 0x18 => { Name => 'Model', Description => 'Camera Model Name', Format => 'string[24]', Notes => 'oddly different than CameraType values in JPEG images by the same camera', PrintConv => { SG472 => 'u7040,S7040', SG473 => 'u9010,S9010', SG475 => 'SP800UZ', SG551 => 'SZ-30MR', SG553 => 'SP-610UZ', SG554 => 'SZ-10', SG555 => 'SZ-20', SG573 => 'SZ-14', SG575 => 'SP-620UZ', }, }, 0x28 => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', }, 0x30 => { #(NC) Name => 'ExposureCompensation', Format => 'rational64s', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', }, # 0x38 - int32u: 3 # 0x3c - int32u: 1 # 0x40 - int16u: 5 # 0x42 - int16u: 0,4,9 # 0x64 - int32u: 0,6000,12000 # 0x48 - int32u: 100 (ISO?) 0x68 => { Name => 'MovableInfo', Condition => '$$valPt =~ /^DIGI/', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::MovableInfo' }, }, 0x72 => { Name => 'MovableInfo', Condition => '$$valPt =~ /^DIGI/', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::MovableInfo' }, }, ); # yet a different QuickTime TAGS format (PH, E-M5) %Image::ExifTool::Olympus::MOV3 = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'QuickTime information found in the TAGS atom of MOV videos from the E-M5.', OLYM => { Name => 'OlympusAtom', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::OLYM2' }, }, ); # yet a different QuickTime OLYM atom format (PH, E-M5) %Image::ExifTool::Olympus::OLYM2 = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, prms => { Name => 'MakerNotes', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::prms' }, }, thmb =>{ Name => 'ThumbInfo', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::thmb2' }, }, scrn =>{ Name => 'PreviewInfo', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::scrn2' }, }, ); # the "prms" atom in E-M5 MOV videos (PH, E-M5) %Image::ExifTool::Olympus::prms = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, NOTES => q{ Information extracted from the "prms" atom in MOV videos from Olympus models such as the OM E-M5. }, 0x12 => { Name => 'Make', Format => 'string[24]', }, 0x2c => { Name => 'Model', Description => 'Camera Model Name', Format => 'string[24]', SeparateTable => 'CameraType', PrintConv => \%olympusCameraTypes, }, 0x83 => { Name => 'DateTime1', Format => 'string[24]', Groups => { 2 => 'Time' }, }, 0x9d => { Name => 'DateTime2', Format => 'string[24]', Groups => { 2 => 'Time' }, }, ); # yet a different "thmb" atom format (PH, E-M5) %Image::ExifTool::Olympus::thmb2 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'ThumbnailWidth', Format => 'int16u', }, 2 => { Name => 'ThumbnailHeight', Format => 'int16u', }, 4 => { Name => 'ThumbnailLength', Format => 'int32u', }, 8 => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Format => 'undef[$val{4}]', Notes => '160x120 JPEG thumbnail image', RawConv => '$self->ValidateImage(\$val,$tag)', }, ); # yet a different "scrn" atom format (PH, E-M5) %Image::ExifTool::Olympus::scrn2 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # 0 => int16u: 1 - number of preview images? 2 => { Name => 'OlympusPreview', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::scrn' }, }, ); # movable information found in MP4 videos %Image::ExifTool::Olympus::MovableInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, 0x04 => { #(NC) Name => 'ISO', Format => 'int32u', }, 0x2c => { Name => 'EncoderVersion', Format => 'string[16]', }, 0x3c => { Name => 'DecoderVersion', Format => 'string[16]', }, 0x83 => { Name => 'Thumbnail', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::Thumbnail', Base => '$start', # (use a separate table because of this) }, }, ); # thumbnail image information found in MP4 videos (similar in Olympus,Samsung,Sanyo) (ref PH) %Image::ExifTool::Olympus::Thumbnail = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, FORMAT => 'int32u', 1 => 'ThumbnailWidth', 2 => 'ThumbnailHeight', 3 => 'ThumbnailLength', 4 => { Name => 'ThumbnailOffset', IsOffset => 1 }, ); # thumbnail information found in 'thmb' atom of MP4 videos from the TG-810 (ref PH) %Image::ExifTool::Olympus::thmb = ( NOTES => 'Information extracted from the "thmb" atom of Olympus MP4 videos.', PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'ThumbnailLength', Format => 'int32u', }, 4 => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Format => 'undef[$val{0}]', Notes => '160x120 JPEG thumbnail image', RawConv => '$self->ValidateImage(\$val,$tag)', }, ); # thumbnail information found in 'scrn' atom of MP4 videos from the TG-810 (ref PH) %Image::ExifTool::Olympus::scrn = ( NOTES => 'Information extracted from the "scrn" atom of Olympus MP4 videos.', PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'PreviewImageLength', Format => 'int32u', }, 4 => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Format => 'undef[$val{0}]', Notes => '640x480 JPEG preview image', RawConv => '$self->ValidateImage(\$val,$tag)', }, ); # information in OLYM atom of MP4 videos from the TG-810 (ref PH) %Image::ExifTool::Olympus::OLYM = ( NOTES => 'Tags found in the OLYM atom of MP4 videos from the TG-810.', PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x0e => { Name => 'Make', Format => 'string[26]', }, 0x28 => { Name => 'Model', Description => 'Camera Model Name', Format => 'string[24]', SeparateTable => 'CameraType', PrintConv => \%olympusCameraTypes, }, 0x5a => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', }, 0x7f => { Name => 'DateTimeOriginal', #(NC) Format => 'string[24]', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, 0x99 => { Name => 'DateTime2', Format => 'string[24]', Groups => { 2 => 'Time' }, }, 0x109 => { Name => 'ThumbnailWidth', Format => 'int16u', }, 0x10b => { Name => 'ThumbnailHeight', Format => 'int16u', }, ); # tags in Olympus AVI videos (ref PH) # (very similar to Pentax::Junk2 tags) %Image::ExifTool::Olympus::AVI = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, NOTES => 'This information is found in Olympus AVI videos.', 0x12 => { Name => 'Make', Format => 'string[24]', }, 0x2c => { Name => 'Model', Description => 'Camera Model Name', Format => 'string[24]', SeparateTable => 'CameraType', PrintConv => \%olympusCameraTypes, }, 0x5e => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', }, 0x83 => { Name => 'DateTime1', Format => 'string[24]', Groups => { 2 => 'Time' }, }, 0x9d => { Name => 'DateTime2', Format => 'string[24]', Groups => { 2 => 'Time' }, }, 0x129 => { Name => 'ThumbInfo', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::thmb2' }, }, ); # tags in WAV files from Olympus PCM linear recorders (ref 18) %Image::ExifTool::Olympus::WAV = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Audio' }, FIRST_ENTRY => 0, NOTES => q{ This information is found in WAV files from Olympus PCM linear recorders like the LS-5, LS-10, LS-11. }, 0x0c => { Name => 'Model', Description => 'Camera Model Name', Format => 'string[16]', }, 0x1c => { Name => 'FileNumber', Format => 'int32u', PrintConv => 'sprintf("%.4d", $val)', }, 0x26 => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, Format => 'undef[12]', Notes => 'time at start of recording', ValueConv => q{ return undef unless $val =~ /^(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/; my $y = $1 < 70 ? "20$1" : "19$1"; return "$y:$2:$3 $4:$5:$6"; }, PrintConv => '$self->ConvertDateTime($val)', }, 0x32 => { Name => 'DateTimeEnd', Groups => { 2 => 'Time' }, Format => 'undef[12]', Notes => 'time at end of recording', ValueConv => q{ return undef unless $val =~ /^(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/; my $y = $1 < 70 ? "20$1" : "19$1"; return "$y:$2:$3 $4:$5:$6"; }, PrintConv => '$self->ConvertDateTime($val)', }, 0x3e => { Name => 'RecordingTime', Format => 'undef[6]', ValueConv => '$val =~ s/^(\d{2})(\d{2})/$1:$2:/; $val', }, 0x200 => { Name => 'Duration', Format => 'int32u', ValueConv => '$val / 1000', PrintConv => 'ConvertDuration($val)', }, 0x20a => { Name => 'Index01', %indexInfo }, 0x214 => { Name => 'Index02', %indexInfo }, 0x21e => { Name => 'Index03', %indexInfo }, 0x228 => { Name => 'Index04', %indexInfo }, 0x232 => { Name => 'Index05', %indexInfo }, 0x23c => { Name => 'Index06', %indexInfo }, 0x246 => { Name => 'Index07', %indexInfo }, 0x250 => { Name => 'Index08', %indexInfo }, 0x25a => { Name => 'Index09', %indexInfo }, 0x264 => { Name => 'Index10', %indexInfo }, 0x26e => { Name => 'Index11', %indexInfo }, 0x278 => { Name => 'Index12', %indexInfo }, 0x282 => { Name => 'Index13', %indexInfo }, 0x28c => { Name => 'Index14', %indexInfo }, 0x296 => { Name => 'Index15', %indexInfo }, 0x2a0 => { Name => 'Index16', %indexInfo }, ); # DSS information written by Olympus voice recorders (ref PH) %Image::ExifTool::Olympus::DSS = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Audio' }, FIRST_ENTRY => 0, NOTES => q{ Information extracted from DSS/DS2 files and the ID3 XOLY frame of MP3 files written by some Olympus voice recorders. }, # 0 - file format: # "\x02dss"(DSS file and XOLY frame in MP3 file) # "\x03ds2"(DS2 file) # "\x03mp3"(ID3 XOLY frame in MP3 file) 12 => { Name => 'Model', Format => 'string[16]' }, # (name truncated by some models) 38 => { Name => 'StartTime', Format => 'string[12]', Groups => { 2 => 'Time' }, ValueConv => '$val =~ s/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/20$1:$2:$3 $4:$5:$6/; $val', PrintConv => '$self->ConvertDateTime($val)', }, 50 => { Name => 'EndTime', Format => 'string[12]', Groups => { 2 => 'Time' }, ValueConv => '$val =~ s/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/20$1:$2:$3 $4:$5:$6/; $val', PrintConv => '$self->ConvertDateTime($val)', }, 62 => { Name => 'Duration', Format => 'string[6]', ValueConv => '$val =~ /(\d{2})(\d{2})(\d{2})/ ? ($1 * 60 + $2) * 60 + $3 : undef', PrintConv => 'ConvertDuration($val)', }, 798 => { # (ref http://search.cpan.org/~rgibson/Audio-DSS-0.02/) Name => 'Comment', Format => 'string[100]', }, ); # Olympus composite tags %Image::ExifTool::Olympus::Composite = ( GROUPS => { 2 => 'Camera' }, ExtenderStatus => { Notes => q{ Olympus cameras have the quirk that they may retain the extender settings after the extender is removed until the camera is powered off. This tag is an attempt to represent the actual status of the extender. }, Require => { 0 => 'Olympus:Extender', 1 => 'Olympus:LensType', 2 => 'MaxApertureValue', }, ValueConv => 'Image::ExifTool::Olympus::ExtenderStatus($val[0],$prt[1],$val[2])', PrintConv => { 0 => 'Not attached', 1 => 'Attached', 2 => 'Removed', }, }, ZoomedPreviewImage => { Groups => { 2 => 'Preview' }, Require => { 0 => 'ZoomedPreviewStart', 1 => 'ZoomedPreviewLength', }, RawConv => 'Image::ExifTool::Exif::ExtractImage($self,$val[0],$val[1],"ZoomedPreviewImage")', }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::Olympus'); #------------------------------------------------------------------------------ # Determine if the extender (EX-25/EC-14) was really attached (ref 9) # Inputs: 0) Extender, 1) LensType string, 2) MaxApertureAtMaxFocal # Returns: 0=not attached, 1=attached, 2=could have been removed # Notes: Olympus has a bug in the in-camera firmware which results in the # extender information being cached and written into the EXIF data even after # the extender has been removed. You must power cycle the camera to prevent it # from writing the cached extender information into the EXIF data. sub ExtenderStatus($$$) { my ($extender, $lensType, $maxAperture) = @_; my @info = split ' ', $extender; # validate that extender identifier is reasonable return 0 unless @info >= 2 and hex($info[1]); # if it's not an EC-14 (id '0 04') then assume it was really attached # (other extenders don't seem to affect the reported max aperture) return 1 if "$info[0] $info[1]" ne '0 04'; # get the maximum aperture for this lens (in $1) $lensType =~ / F(\d+(\.\d+)?)/ or return 1; # If the maximum aperture at the maximum focal length is greater than the # known max/max aperture of the lens, then the extender must be attached return ($maxAperture - $1 > 0.2) ? 1 : 2; } #------------------------------------------------------------------------------ # Print AF points # Inputs: 0) AF point data (string of integers) # Notes: I'm just guessing that the 2nd and 4th bytes are the Y coordinates, # and that more AF points will show up in the future (derived from E-1 images, # and the E-1 uses just one of 3 possible AF points, all centered in Y) - PH sub PrintAFAreas($) { my $val = shift; my @points = split ' ', $val; my %afPointNames = ( 0x36794285 => 'Left', 0x79798585 => 'Center', 0xBD79C985 => 'Right', ); $val = ''; my $pt; foreach $pt (@points) { next unless $pt; $val and $val .= ', '; $afPointNames{$pt} and $val .= $afPointNames{$pt} . ' '; my @coords = unpack('C4',pack('N',$pt)); $val .= "($coords[0],$coords[1])-($coords[2],$coords[3])"; } $val or $val = 'none'; return $val; } #------------------------------------------------------------------------------ # Extract information from a DSS/DS2 voice recorder audio file or ID3 XOLY frame # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success sub ProcessDSS($$;$) { my ($et, $dirInfo) = @_; # allow this to be called with either RAF or DataPt my $raf = $$dirInfo{RAF}; if ($raf) { my $buff; $raf->Read($buff, 898) > 68 or return 0; $buff =~ /^(\x02dss|\x03ds2)/ or return 0; $dirInfo = { DataPt => \$buff }; $et->SetFileType(uc substr $buff, 1, 3); } my $tagTablePtr = GetTagTable('Image::ExifTool::Olympus::DSS'); return $et->ProcessBinaryData($dirInfo, $tagTablePtr); } #------------------------------------------------------------------------------ # Process ORF file # Inputs: 0) ExifTool object reference, 1) directory information reference # Returns: 1 if this looked like a valid ORF file, 0 otherwise sub ProcessORF($$) { my ($et, $dirInfo) = @_; return $et->ProcessTIFF($dirInfo); } 1; # end __END__ =head1 NAME Image::ExifTool::Olympus - Olympus/Epson maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Olympus or Epson maker notes in EXIF information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html> =item L<http://www.cybercom.net/~dcoffin/dcraw/> =item L<http://www.ozhiker.com/electronics/pjmt/jpeg_info/olympus_mn.html> =item L<http://olypedia.de/Olympus_Makernotes> =back =head1 ACKNOWLEDGEMENTS Thanks to Markku Hanninen, Remi Guyomarch, Frank Ledwon, Michael Meissner, Mark Dapoz, Ioannis Panagiotopoulos and Tomasz Kawecki for their help figuring out some Olympus tags, and Lilo Huang, Chris Shaw and Viktor Lushnikov for adding to the LensType list. =head1 SEE ALSO L<Image::ExifTool::TagNames/Olympus Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/OOXML.pm����������������������������������������������������000644 �000765 �000024 �00000033133 12642461323 021146� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: OOXML.pm # # Description: Read Office Open XML+ZIP files # # Revisions: 2009/10/31 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::OOXML; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::XMP; use Image::ExifTool::ZIP; $VERSION = '1.07'; # test for recognized OOXML document extensions my %isOOXML = ( DOCX => 1, DOCM => 1, DOTX => 1, DOTM => 1, POTX => 1, POTM => 1, PPSX => 1, PPSM => 1, PPTX => 1, PPTM => 1, THMX => 1, XLAM => 1, XLSX => 1, XLSM => 1, XLSB => 1, XLTX => 1, XLTM => 1, ); # generate reverse lookup for file type based on MIME my %fileType; { my $type; foreach $type (keys %isOOXML) { $fileType{$Image::ExifTool::mimeType{$type}} = $type; } } # XML attributes to queue my %queuedAttrs; my %queueAttrs = ( fmtid => 1, pid => 1, name => 1, ); # keep track of items in a vector (to accumulate as a list) my $vectorCount; my @vectorVals; # Office Open XML tags %Image::ExifTool::OOXML::Main = ( GROUPS => { 0 => 'XML', 1 => 'XML', 2 => 'Document' }, PROCESS_PROC => \&Image::ExifTool::XMP::ProcessXMP, VARS => { NO_ID => 1 }, NOTES => q{ The Office Open XML (OOXML) format was introduced with Microsoft Office 2007 and is used by file types such as DOCX, PPTX and XLSX. These are essentially ZIP archives containing XML files. The table below lists some tags which have been observed in OOXML documents, but ExifTool will extract any tags found from XML files of the OOXML document properties ("docProps") directory. B<Tips:> 1) Structural ZIP tags may be ignored (if desired) with C<--ZIP:all> on the command line. 2) Tags may be grouped by their document number in the ZIP archive with the C<-g3> or C<-G3> option. }, # These tags all have 1:1 correspondence with FlashPix tags except for: # OOXML FlashPix # --------------- ------------- # DocSecurity Security # Application Software # dc:Description Comments # dc:Creator Author Application => { }, AppVersion => { }, category => { }, Characters => { }, CharactersWithSpaces => { }, CheckedBy => { }, Client => { }, Company => { }, created => { Name => 'CreateDate', Groups => { 2 => 'Time' }, Format => 'date', PrintConv => '$self->ConvertDateTime($val)', }, createdType => { Hidden => 1, RawConv => 'undef' }, # ignore this XML type name DateCompleted => { Groups => { 2 => 'Time' }, Format => 'date', PrintConv => '$self->ConvertDateTime($val)', }, Department => { }, Destination => { }, Disposition => { }, Division => { }, DocSecurity => { # (http://msdn.microsoft.com/en-us/library/documentformat.openxml.extendedproperties.documentsecurity.aspx) PrintConv => { 0 => 'None', 1 => 'Password protected', 2 => 'Read-only recommended', 4 => 'Read-only enforced', 8 => 'Locked for annotations', }, }, DocumentNumber=> { }, Editor => { Groups => { 2 => 'Author'} }, ForwardTo => { }, Group => { }, HeadingPairs=> { }, HiddenSlides=> { }, HyperlinkBase=>{ }, HyperlinksChanged => { PrintConv => { 'false' => 'No', 'true' => 'Yes' } }, keywords => { }, Language => { }, lastModifiedBy => { Groups => { 2 => 'Author'} }, lastPrinted => { Groups => { 2 => 'Time' }, Format => 'date', PrintConv => '$self->ConvertDateTime($val)', }, Lines => { }, LinksUpToDate=>{ PrintConv => { 'false' => 'No', 'true' => 'Yes' } }, Mailstop => { }, Manager => { }, Matter => { }, MMClips => { }, modified => { Name => 'ModifyDate', Groups => { 2 => 'Time' }, Format => 'date', PrintConv => '$self->ConvertDateTime($val)', }, modifiedType=> { Hidden => 1, RawConv => 'undef' }, # ignore this XML type name Notes => { }, Office => { }, Owner => { Groups => { 2 => 'Author'} }, Pages => { }, Paragraphs => { }, PresentationFormat => { }, Project => { }, Publisher => { }, Purpose => { }, ReceivedFrom=> { }, RecordedBy => { }, RecordedDate=> { Groups => { 2 => 'Time' }, Format => 'date', PrintConv => '$self->ConvertDateTime($val)', }, Reference => { }, revision => { Name => 'RevisionNumber' }, ScaleCrop => { PrintConv => { 'false' => 'No', 'true' => 'Yes' } }, SharedDoc => { PrintConv => { 'false' => 'No', 'true' => 'Yes' } }, Slides => { }, Source => { }, Status => { }, TelephoneNumber => { }, Template => { }, TitlesOfParts=>{ }, TotalTime => { Name => 'TotalEditTime', PrintConv => 'ConvertTimeSpan($val, 60)', }, Typist => { }, Words => { }, ); #------------------------------------------------------------------------------ # Generate a tag ID for this XML tag # Inputs: 0) tag property name list ref # Returns: tagID and outtermost interesting namespace (or '' if no namespace) sub GetTagID($) { my $props = shift; my ($tag, $prop, $namespace); foreach $prop (@$props) { # split name into namespace and property name # (Note: namespace can be '' for property qualifiers) my ($ns, $nm) = ($prop =~ /(.*?):(.*)/) ? ($1, $2) : ('', $prop); next if $ns eq 'vt'; # ignore 'vt' properties if (defined $tag) { $tag .= ucfirst($nm); # add to tag name } elsif ($prop ne 'Properties' and $prop ne 'cp:coreProperties' and $prop ne 'property') { $tag = $nm; # save namespace of first property to contribute to tag name $namespace = $ns unless $namespace; } } return ($tag, $namespace || ''); } #------------------------------------------------------------------------------ # We found an XMP property name/value # Inputs: 0) ExifTool object ref, 1) tag table ref # 2) reference to array of XMP property names (last is current property) # 3) property value, 4) attribute hash ref (not used here) # Returns: 1 if valid tag was found sub FoundTag($$$$;$) { my ($et, $tagTablePtr, $props, $val, $attrs) = @_; return 0 unless @$props; my $verbose = $et->Options('Verbose'); my $tag = $$props[-1]; $et->VPrint(0, " | - Tag '", join('/',@$props), "'\n") if $verbose > 1; # un-escape XML character entities $val = Image::ExifTool::XMP::UnescapeXML($val); # convert OOXML-escaped characters (eg. "_x0000d_" is a newline) $val =~ s/_x([0-9a-f]{4})_/Image::ExifTool::PackUTF8(hex($1))/gie; # convert from UTF8 to ExifTool Charset $val = $et->Decode($val, 'UTF8'); # queue this attribute for later if necessary if ($queueAttrs{$tag}) { $queuedAttrs{$tag} = $val; return 0; } my $ns; ($tag, $ns) = GetTagID($props); if (not $tag) { # all properties are in ignored namespaces # so 'name' from our queued attributes for the tag my $name = $queuedAttrs{name} or return 0; $name =~ s/(^| )([a-z])/$1\U$2/g; # start words with uppercase ($tag = $name) =~ tr/-_a-zA-Z0-9//dc; return 0 unless length $tag; unless ($$tagTablePtr{$tag}) { my %tagInfo = ( Name => $tag, Description => $name, ); # format as a date/time value if type is 'vt:filetime' if ($$props[-1] eq 'vt:filetime') { $tagInfo{Groups} = { 2 => 'Time' }, $tagInfo{Format} = 'date', $tagInfo{PrintConv} = '$self->ConvertDateTime($val)'; } $et->VPrint(0, " | [adding $tag]\n") if $verbose; AddTagToTable($tagTablePtr, $tag, \%tagInfo); } } elsif ($tag eq 'xmlns') { # ignore namespaces (for now) return 0; } elsif (ref $Image::ExifTool::XMP::Main{$ns} eq 'HASH' and $Image::ExifTool::XMP::Main{$ns}{SubDirectory}) { # use standard XMP table if it exists my $table = $Image::ExifTool::XMP::Main{$ns}{SubDirectory}{TagTable}; no strict 'refs'; if ($table and %$table) { $tagTablePtr = Image::ExifTool::GetTagTable($table); } } elsif (@$props > 2 and grep /^vt:vector$/, @$props) { # handle vector properties (accumulate as lists) if ($$props[-1] eq 'vt:size') { $vectorCount = $val; undef @vectorVals; return 0; } elsif ($$props[-1] eq 'vt:baseType') { return 0; # ignore baseType } elsif ($vectorCount) { --$vectorCount; if ($vectorCount) { push @vectorVals, $val; return 0; } $val = [ @vectorVals, $val ] if @vectorVals; # Note: we will lose any improper-sized vector elements here } } # add any unknown tags to table if ($$tagTablePtr{$tag}) { my $tagInfo = $$tagTablePtr{$tag}; if (ref $tagInfo eq 'HASH') { # reformat date/time values my $fmt = $$tagInfo{Format} || $$tagInfo{Writable} || ''; $val = Image::ExifTool::XMP::ConvertXMPDate($val) if $fmt eq 'date'; } } else { $et->VPrint(0, " [adding $tag]\n") if $verbose; AddTagToTable($tagTablePtr, $tag, { Name => ucfirst $tag }); } # save the tag $et->HandleTag($tagTablePtr, $tag, $val); # start fresh for next tag undef $vectorCount; undef %queuedAttrs; return 1; } #------------------------------------------------------------------------------ # Extract information from an OOXML file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 # Notes: Upon entry to this routine, the file type has already been verified # and the dirInfo hash contains 2 elements unique to this process proc: # MIME - mime type of main document from "[Content_Types].xml" # ZIP - reference to Archive::Zip object for this file sub ProcessDOCX($$) { my ($et, $dirInfo) = @_; my $zip = $$dirInfo{ZIP}; my $tagTablePtr = GetTagTable('Image::ExifTool::OOXML::Main'); my $mime = $$dirInfo{MIME} || $Image::ExifTool::mimeType{DOCX}; # set the file type ('DOCX' by default) my $fileType = $fileType{$mime}; if ($fileType) { # THMX is a special case because its contents.main MIME types is PPTX if ($fileType eq 'PPTX' and $$et{FILE_EXT} and $$et{FILE_EXT} eq 'THMX') { $fileType = 'THMX'; } } else { $et->VPrint(0, "Unrecognized MIME type: $mime\n"); # get MIME type according to file extension $fileType = $$et{FILE_EXT}; # default to 'DOCX' if this isn't a known OOXML extension $fileType = 'DOCX' unless $fileType and $isOOXML{$fileType}; } $et->SetFileType($fileType); # must catch all Archive::Zip warnings local $SIG{'__WARN__'} = \&Image::ExifTool::ZIP::WarnProc; # extract meta information from all files in ZIP "docProps" directory my $docNum = 0; my @members = $zip->members(); my $member; foreach $member (@members) { # get filename of this ZIP member my $file = $member->fileName(); next unless defined $file; $et->VPrint(0, "File: $file\n"); # set the document number and extract ZIP tags $$et{DOC_NUM} = ++$docNum; Image::ExifTool::ZIP::HandleMember($et, $member); # process only XML and JPEG/WMF thumbnail images in "docProps" directory next unless $file =~ m{^docProps/(.*\.xml|(thumbnail\.(jpe?g|wmf)))$}i; # get the file contents (CAREFUL! $buff MUST be local since we hand off a value ref) my ($buff, $status) = $zip->contents($member); $status and $et->Warn("Error extracting $file"), next; # extract docProps/thumbnail.(jpg|mwf) as PreviewImage|PreviewMWF if ($file =~ /\.(jpe?g|wmf)$/i) { my $tag = $file =~ /\.wmf$/i ? 'PreviewWMF' : 'PreviewImage'; $et->FoundTag($tag, \$buff); next; } # process XML files (docProps/app.xml, docProps/core.xml, docProps/custom.xml) my %dirInfo = ( DataPt => \$buff, DirLen => length $buff, DataLen => length $buff, XMPParseOpts => { FoundProc => \&FoundTag, }, ); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); undef $buff; # (free memory now) } delete $$et{DOC_NUM}; return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::OOXML - Read Office Open XML+ZIP files =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from Office Open XML files. This is the format of Word, Excel and PowerPoint files written by Microsoft Office 2007 -- essentially ZIP archives of XML files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/OOXML Tags>, L<Image::ExifTool::TagNames/FlashPix Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/OpenEXR.pm��������������������������������������������������000644 �000765 �000024 �00000024413 12642461324 021532� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: OpenEXR.pm # # Description: Read OpenEXR meta information # # Revisions: 2011/12/10 - P. Harvey Created # # References: 1) http://www.openexr.com/ #------------------------------------------------------------------------------ package Image::ExifTool::OpenEXR; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.01'; # supported EXR value format types (other types are extracted as undef binary data) my %formatType = ( box2f => 'float[4]', box2i => 'int32s[4]', chlist => 1, chromaticities => 'float[8]', compression => 'int8u', double => 'double', envmap => 'int8u', float => 'float', 'int' => 'int32s', keycode => 'int32s[7]', lineOrder => 'int8u', m33f => 'float[9]', m44f => 'float[16]', rational => 'rational64s', string => 'string', # incorrect in specification! (no leading int) stringvector => 1, tiledesc => 1, timecode => 'int32u[2]', v2f => 'float[2]', v2i => 'int32s[2]', v3f => 'float[3]', v3i => 'int32s[3]', ); # OpenEXR tags %Image::ExifTool::OpenEXR::Main = ( GROUPS => { 2 => 'Image' }, NOTES => q{ Information extracted from EXR images. See L<http://www.openexr.com/> for the official specification. }, _ver => { Name => 'EXRVersion' }, _lay => { Name => 'Layout', PrintHex => 1, PrintConv => { 0 => 'Scan Lines', 0x200 => 'Tiles' }, }, adoptedNeutral => { }, altitude => { Name => 'GPSAltitude', Groups => { 2 => 'Location' }, PrintConv => q{ $val = int($val * 10) / 10; return ($val =~ s/^-// ? "$val m Below" : "$val m Above") . " Sea Level"; }, }, aperture => { PrintConv => 'sprintf("%.1f",$val)' }, channels => { }, chromaticities => { }, capDate => { Name => 'DateTimeOriginal', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, comments => { }, compression => { PrintConvColumns => 2, PrintConv => { 0 => 'None', 1 => 'RLE', 2 => 'ZIPS', 3 => 'ZIP', 4 => 'PIZ', 5 => 'PXR24', 6 => 'B44', 7 => 'B44A', }, }, dataWindow => { }, displayWindow => { }, envmap => { Name => 'EnvironmentMap', PrintConv => { 0 => 'Latitude/Longitude', 1 => 'Cube', }, }, expTime => { Name => 'ExposureTime', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, focus => { Name => 'FocusDistance', PrintConv => '"$val m"', }, framesPerSecond => { }, keyCode => { }, isoSpeed => { Name => 'ISO' }, latitude => { Name => 'GPSLatitude', Groups => { 2 => 'Location' }, RawConv => 'require Image::ExifTool::GPS; $val', # to load Composite tags and routines PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', }, lineOrder => { PrintConv => { 0 => 'Increasing Y', 1 => 'Decreasing Y', 2 => 'Random Y', }, }, longitude => { Name => 'GPSLongitude', Groups => { 2 => 'Location' }, RawConv => 'require Image::ExifTool::GPS; $val', # to load Composite tags and routines PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")', }, lookModTransform => { }, multiView => { }, owner => { Groups => { 2 => 'Author' } }, pixelAspectRatio => { }, preview => { }, renderingTransform => { }, screenWindowCenter => { }, screenWindowWidth => { }, tiles => { }, timeCode => { }, utcOffset => { Name => 'TimeZone', Groups => { 2 => 'Time' }, PrintConv => 'TimeZoneString($val / 60)', }, whiteLuminance => { }, worldToCamera => { }, worldToNDC => { }, wrapmodes => { Name => 'WrapModes' }, xDensity => { Name => 'XResolution' }, # also observed: # ilut ); #------------------------------------------------------------------------------ # Extract information from an OpenEXR file # Inputs: 0) ExifTool object reference, 1) DirInfo reference # Returns: 1 on success, 0 if this wasn't a valid OpenEXR file sub ProcessEXR($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $verbose = $et->Options('Verbose'); my $binary = $et->Options('Binary') || $verbose; my ($buff, $buf2, $dim); # verify this is a valid RIFF file return 0 unless $raf->Read($buff, 8) == 8; return 0 unless $buff =~ /^\x76\x2f\x31\x01/s; $et->SetFileType(); SetByteOrder('II'); my $tagTablePtr = GetTagTable('Image::ExifTool::OpenEXR::Main'); # extract information from header my $ver = unpack('x4V', $buff); $et->HandleTag($tagTablePtr, '_ver', $ver & 0xff); $et->HandleTag($tagTablePtr, '_lay', $ver & 0x200); # extract attributes for (;;) { $raf->Read($buff, 68) or last; last if $buff =~ /^\0/; unless ($buff =~ /^([^\0]{1,31})\0([^\0]{1,31})\0(.{4})/sg) { $et->Warn('EXR format error'); last; } my ($tag, $type, $size) = ($1, $2, unpack('V', $3)); unless ($raf->Seek(pos($buff) - length($buff), 1)) { $et->Warn('Seek error'); last; } my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); unless ($tagInfo) { my $name = ucfirst $tag; $name =~ tr/-_a-zA-Z0-9//dc; if (length $name <= 1) { if (length $name) { $name = "Tag$name"; } else { $name = 'Invalid'; } } $tagInfo = { Name => $name, WasAdded => 1 }; AddTagToTable($tagTablePtr, $tag, $tagInfo); $et->VPrint(0, $$et{INDENT}, "[adding $tag]\n"); } my ($val, $success); my $format = $formatType{$type}; if ($format or $binary) { $raf->Read($buff, $size) == $size and $success = 1; if (not $format) { $val = \$buff; # treat as undef binary data } elsif ($format ne '1') { # handle formats which map nicely into ExifTool format codes if ($format =~ /^(\w+)\[?(\d*)/) { my ($fmt, $cnt) = ($1, $2); $cnt = $fmt eq 'string' ? $size : 1 unless $cnt; $val = ReadValue(\$buff, 0, $fmt, $cnt, $size); } # handle other format types } elsif ($type eq 'tiledesc') { if ($size >= 9) { my $x = Get32u(\$buff, 0); my $y = Get32u(\$buff, 4); my $mode = Get8u(\$buff, 8); my $lvl = { 0 => 'One Level', 1 => 'MIMAP Levels', 2 => 'RIPMAP Levels' }->{$mode & 0x0f}; $lvl or $lvl = 'Unknown Levels (' . ($mode & 0xf) . ')'; my $rnd = { 0 => 'Round Down', 1 => 'Round Up' }->{$mode >> 4}; $rnd or $rnd = 'Unknown Rounding (' . ($mode >> 4) . ')'; $val = "${x}x$y; $lvl; $rnd"; } } elsif ($type eq 'chlist') { $val = [ ]; while ($buff =~ /\G([^\0]{1,31})\0(.{16})/sg) { my ($str, $dat) = ($1, $2); my ($pix,$lin,$x,$y) = unpack('VCx3VV', $dat); $pix = { 0 => 'int8u', 1 => 'half', 2 => 'float' }->{$pix} || "unknown($pix)"; push @$val, "$str $pix" . ($lin ? ' linear' : '') . " $x $y"; } } elsif ($type eq 'stringvector') { $val = [ ]; my $pos = 0; while ($pos + 4 <= length($buff)) { my $len = Get32u(\$buff, $pos); last if $pos + 4 + $len > length($buff); push @$val, substr($buff, $pos + 4, $len); $pos += 4 + $len; } } else { $val = \$buff; # (shouldn't happen) } } else { # avoid loading binary data $val = \ "Binary data $size bytes"; $success = $raf->Seek($size, 1); } unless ($success) { $et->Warn('Truncated or corrupted EXR file'); last; } $val = '<bad>' unless defined $val; # take image dimensions from dataWindow (with displayWindow as backup) if (($tag eq 'dataWindow' or (not $dim and $tag eq 'displayWindow')) and $val =~ /^(-?\d+) (-?\d+) (-?\d+) (-?\d+)$/) { $dim = [$3 - $1 + 1, $4 - $2 + 1]; } if ($verbose) { my $dataPt = ref $val ? $val : \$val, $et->VerboseInfo($tag, $tagInfo, Table => $tagTablePtr, Value => $val, Size => $size, Format => $type, DataPt => \$buff, Addr => $raf->Tell() - $size, ); } $et->FoundTag($tagInfo, $val); } if ($dim) { $et->FoundTag('ImageWidth', $$dim[0]); $et->FoundTag('ImageHeight', $$dim[1]); } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::OpenEXR - Read OpenEXR meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from OpenEXR images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.openexr.com/documentation.html> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/OpenEXR Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Palm.pm�����������������������������������������������������000644 �000765 �000024 �00000027631 12642461331 021146� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Palm.pm # # Description: Read Palm Database files # # Revisions: 2014/05/28 - P. Harvey Created # # References: 1) http://wiki.mobileread.com/wiki/PDB # 2) http://wiki.mobileread.com/wiki/MOBI #------------------------------------------------------------------------------ package Image::ExifTool::Palm; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.00'; sub ProcessEXTH($$$); # type/creator ID's for Palm database files my %palmTypes = ( '.pdfADBE' => 'Adobe Reader', 'TEXtREAd' => 'PalmDOC', 'BVokBDIC' => 'BDicty', 'DB99DBOS' => 'DB (Database program)', 'PNRdPPrs' => 'eReader', 'DataPPrs' => 'eReader', 'vIMGView' => 'FireViewer (ImageViewer)', 'PmDBPmDB' => 'HanDBase', 'InfoINDB' => 'InfoView', 'ToGoToGo' => 'iSilo', 'SDocSilX' => 'iSilo 3', 'JbDbJBas' => 'JFile', 'JfDbJFil' => 'JFile Pro', 'DATALSdb' => 'LIST', 'Mdb1Mdb1' => 'MobileDB', 'BOOKMOBI' => 'Mobipocket', 'DataPlkr' => 'Plucker', 'DataSprd' => 'QuickSheet', 'SM01SMem' => 'SuperMemo', 'TEXtTlDc' => 'TealDoc', 'InfoTlIf' => 'TealInfo', 'DataTlMl' => 'TealMeal', 'DataTlPt' => 'TealPaint', 'dataTDBP' => 'ThinkDB', 'TdatTide' => 'Tides', 'ToRaTRPW' => 'TomeRaider', 'zTXTGPlm' => 'Weasel', 'BDOCWrdS' => 'WordSmith', ); my %dateTimeInfo = ( # like QuickTime, the time zero should be Jan 1, 1904, but not all software writes this, # so assume a time zero of Jan 1, 1970 if the date is before this RawConv => q{ my $offset = (66 * 365 + 17) * 24 * 3600; return $val - $offset if $val >= $offset; return $val; }, ValueConv => 'ConvertUnixTime($val, 1)', # (UTC written by "EPUB Converter", ref PH) PrintConv => '$self->ConvertDateTime($val)', ); # Palm Database header information %Image::ExifTool::Palm::Main = ( GROUPS => { 0 => 'Palm', 1 => 'Palm', 2 => 'Document' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int32u', NOTES => q{ Information extracted from Palm database files (PDB and PRC extensions), Mobipocket electronic books (MOBI), and Amazon Kindle KF7 and KF8 books (AZW and AZW3). }, 0 => { Name => 'DatabaseName', Format => 'string[32]' }, # 8 - int16u: file attributes (not very useful) # 8.5 - int16u: version 9 => { Name => 'CreateDate', Groups => { 2 => 'Time' }, %dateTimeInfo, }, 10 => { Name => 'ModifyDate', Groups => { 2 => 'Time' }, %dateTimeInfo, }, 11 => { Name => 'LastBackupDate', Groups => { 2 => 'Time' }, %dateTimeInfo, }, 12 => 'ModificationNumber', 15 => { Name => 'PalmFileType', Format => 'undef[8]', PrintConv => \%palmTypes, }, ); # MOBI header tags %Image::ExifTool::Palm::MOBI = ( GROUPS => { 0 => 'Palm', 1 => 'MOBI', 2 => 'Document' }, NOTES => q{ Information extracted from the MOBI header of Mobipocket and Amazon Kindle KF7 and KF8 files. }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int32u', 0 => { Name => 'Compression', Format => 'int16u', PrintConv => { 1 => 'None', 2 => 'PalmDOC', 17480 => 'HUFF/CDIC', }, }, 1 => { Name => 'UncompressedTextLength', PrintConv => \&Image::ExifTool::ConvertFileSize, }, 3 => { Name => 'Encryption', PrintConv => { 0 => 'None', 1 => 'Old Mobipocket', 2 => 'Mobipocket', }, }, 6 => { Name => 'MobiType', PrintConv => { 2 => 'Mobipocket Book', 3 => 'PalmDoc Book', 4 => 'Audio', 232 => 'mobipocket? generated by kindlegen1.2', 248 => 'KF8: generated by kindlegen2', 257 => 'News', 258 => 'News_Feed', 259 => 'News_Magazine', 513 => 'PICS', 514 => 'WORD', 515 => 'XLS', 516 => 'PPT', 517 => 'TEXT', 518 => 'HTML', }, }, 7 => { Name => 'CodePage', RawConv => '$$self{CodePage} = $val', PrintConv => { # just define commonly used code pages # (a much more complete list may be found in FlashPix.pm) 1252 => 'Windows Latin 1 (Western European)', 65001 => 'Unicode (UTF-8)', }, }, 9 => 'MobiVersion', 21 => 'BookName', # this is actually an offset, but replace it with the string later 26 => 'MinimumVersion', ); # MOBI extended header tags %Image::ExifTool::Palm::EXTH = ( GROUPS => { 0 => 'Palm', 1 => 'MOBI', 2 => 'Document' }, FORMAT => 'string', NOTES => 'Information extracted from the MOBI extended header.', PROCESS_PROC => \&ProcessEXTH, 1 => 'DRMServerID', 2 => 'DRMCommerceID', 3 => 'DRM_E-BookBaseID', 100 => { Name => 'Author', Groups => { 2 => 'Author' } }, 101 => 'Publisher', 102 => 'Imprint', 103 => 'Description', 104 => 'ISBN', 105 => { Name => 'Subject', List => 1 }, 106 => { Name => 'PublishDate', Groups => { 2 => 'Time' }, ValueConv => q{ require Image::ExifTool::XMP; Image::ExifTool::XMP::ConvertXMPDate($val, 1); }, PrintConv => '$self->ConvertDateTime($val)', }, 107 => 'Review', 108 => 'Contributor', 109 => { Name => 'Rights', Groups => { 2 => 'Author' } }, 110 => 'SubjectCode', 111 => 'BookType', 112 => 'Source', 113 => 'ASIN', 114 => 'BookVersion', 115 => { Name => 'SampleFlag', Format => 'int32u' }, 116 => { Name => 'StartReading', Format => 'int32u' }, 117 => 'Adult', 118 => 'RetailPrice', 119 => 'RetailPriceCurrency', # 121 => 'KF8BoundaryOffset', 125 => { Name => 'ResourceCount', Format => 'int32u' }, 129 => 'KF8CoverURI', 200 => 'DictionaryShortName', # 201 => { Name => 'CoverOffset', Format => 'int32u' }, # 202 => { Name => 'ThumbOffset', Format => 'int32u' }, # 203 => 'HasFakeCover', 204 => { Name => 'CreatorSoftware', Format => 'int32u', PrintConv => { 1 => 'Mobigen', 2 => 'Mobipocket', 200 => 'Kindlegen (Windows)', 201 => 'Kindlegen (Linux)', 202 => 'Kindlegen (Mac)', }, }, 205 => { Name => 'CreatorMajorVersion', Format => 'int32u' }, 206 => { Name => 'CreatorMinorVersion', Format => 'int32u' }, 207 => { Name => 'CreatorBuildNumber', Format => 'int32u' }, 208 => 'Watermark', 209 => 'Tamper-proofKeys', # 300 => 'FontSignature', 401 => { Name => 'ClippingLimit', Format => 'int8u' }, 402 => 'PublisherLimit', 404 => { Name => 'TextToSpeech', Format => 'int8u', PrintConv => { 0 => 'Enabled', 1 => 'Disabled' }, }, 405 => { Name => 'RentalFlag', Format => 'int8u' }, #? 406 => 'RentalExpirationDate', 501 => { Name => 'CDEType', Format => 'int32u' }, 502 => 'LastUpdateTime', 503 => 'UpdatedTitle', 504 => 'ASIN2', 524 => 'Language', 525 => 'Alignment', 535 => 'CreatorBuildNumber2', ); #------------------------------------------------------------------------------ # Process the MOBI extended header # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 (EXTH should have already been validated) sub ProcessEXTH($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos}; my $enc = $$dirInfo{Encoding} || 'UTF8'; my $dirLen = length $$dataPt; my ($index, $pos); $et->VerboseDir('EXTH', $$dirInfo{NumEntries}, $dirLen); # process the EXTH entries for ($index=0, $pos=0; ; ++$index) { last if $pos + 8 > $dirLen; my $tag = Get32u($dataPt, $pos); my $len = Get32u($dataPt, $pos + 4); last if $len < 8 or $pos + $len > $dirLen; my $key = $et->HandleTag($tagTablePtr, $tag, undef, DataPt => $dataPt, DataPos => $dataPos, Start => $pos + 8, Size => $len - 8, Index => $index, ); # recode text if necessary $$et{VALUE}{$key} = $et->Decode($$et{VALUE}{$key}, $enc) if $key; $pos += $len; } return 1; } #------------------------------------------------------------------------------ # Extract information from a Palm DB file # Inputs: 0) ExifTool ref, 1) dirInfo reference # Returns: 1 if this was a recognized PDB file, 0 otherwise sub ProcessPDB($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $buf2, $size, $enc); my $verbose = $et->Options('Verbose'); # verify this is a valid Palm DB file return 0 unless $raf->Read($buff, 86) == 86; my $type = $palmTypes{substr($buff, 60, 8)}; return 0 unless $type; # # Read and process the Palm DB file header # $et->SetFileType($type eq 'Mobipocket' ? 'MOBI' : 'PDB'); SetByteOrder('MM'); my $tagTablePtr = GetTagTable('Image::ExifTool::Palm::Main'); $et->ProcessDirectory({ DataPt => \$buff }, $tagTablePtr); return 1 unless $type eq 'Mobipocket' and Get16u(\$buff, 76); # # Read and process MOBI header (should be the first record) # my $offset = Get32u(\$buff, 78); # get offset to first record unless ($raf->Seek($offset, 0) and $raf->Read($buff, 274) == 274) { $et->Warn('Truncated MOBI header'); return 1; } unless (substr($buff, 16, 4) eq 'MOBI') { $et->Warn('Invalid MOBI header'); return 1; } $tagTablePtr = GetTagTable('Image::ExifTool::Palm::MOBI'); $et->ProcessDirectory({ DataPt => \$buff }, $tagTablePtr); # get text encoding $enc = $Image::ExifTool::charsetName{"cp$$et{CodePage}"} if $$et{CodePage}; $enc = 'UTF8' unless $enc; # extract the BookName string my $off = Get32u(\$buff, 84); my $len = Get32u(\$buff, 88); $raf->Seek($offset+$off, 0) and $raf->Read($buf2, $len) == $len or $buf2 = '<err>'; $$et{VALUE}{BookName} = $et->Decode($buf2, $enc); # # Process the MOBI extended header if it exists # # first, check the flag bit to see if the EXTH record should exist my $flag = Get32u(\$buff, 128); return 1 unless $flag & 0x40; # check extended header flag $len = Get32u(\$buff, 20) + 16; # MOBI header length (including PalmDOC header) unless ($raf->Seek($offset+$len, 0) and $raf->Read($buf2, 12) == 12 and substr($buf2,0,4) eq 'EXTH' and ($size = Get32u(\$buf2, 4)) > 12) { $et->Warn('Invalid MOBI extended header'); return 1; } # read and process the MOBI extended header $size -= 12; $raf->Read($buff, $size) == $size or $et->Warn('Truncated MOBI extended header'), return 1; my %dirInfo = ( DataPt => \$buff, DataPos => $offset + $len + 12, NumEntries => Get32u(\$buf2, 8), Encoding => $enc, ); $tagTablePtr = GetTagTable('Image::ExifTool::Palm::EXTH'); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::Palm - Read Palm Database files =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains code to extract metadata from Palm database files (PDB and PRC extensions), Mobipocket electronic books (MOBI), and Amazon Kindle KF7 and KF8 books (AZW and AZW3). =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://wiki.mobileread.com/wiki/PDB> =item L<http://wiki.mobileread.com/wiki/MOBI> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Palm Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Panasonic.pm������������������������������������������������000644 �000765 �000024 �00000236232 12642461331 022167� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Panasonic.pm # # Description: Panasonic/Leica maker notes tags # # Revisions: 11/10/2004 - P. Harvey Created # # References: 1) http://www.compton.nu/panasonic.html (based on FZ10) # 2) Derived from DMC-FZ3 samples from dpreview.com # 3) http://johnst.org/sw/exiftags/ # 4) Tels (http://bloodgate.com/) private communication (tests with FZ5) # 7) http://homepage3.nifty.com/kamisaka/makernote/makernote_pana.htm (2007/10/02) # 8) Marcel Coenen private communication (DMC-FZ50) # 9) http://forums.dpreview.com/forums/read.asp?forum=1033&message=22756430 # 10) http://bretteville.com/pdfs/M8Metadata_v2.pdf # 11) http://www.digital-leica.com/lens_codes/index.html # 12) Joerg - http://www.cpanforum.com/threads/11602 (LX3 firmware 2.0) # 13) Michael Byczkowski private communication (Leica M9) # 14) Carl Bretteville private communication (M9) # 15) Zdenek Mihula private communication (TZ8) # 16) Olaf Ulrich private communication # 17) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4922.0.html # 18) Thomas Modes private communication (G6) # 19) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5533.0.html # JD) Jens Duttke private communication (TZ3,FZ30,FZ50) #------------------------------------------------------------------------------ package Image::ExifTool::Panasonic; use strict; use vars qw($VERSION %leicaLensTypes); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.91'; sub ProcessLeicaLEIC($$$); sub WhiteBalanceConv($;$$); # Leica lens types (ref 10) %leicaLensTypes = ( OTHER => sub { my ($val, $inv, $conv) = @_; return undef if $inv or not $val =~ s/ .*//; return $$conv{$val}; }, Notes => q{ the LensType value is obtained by splitting the stored value into 2 integers: The stored value divided by 4, and its lower 2 bits. The second number is used only if necessary to identify certain manually coded lenses on the M9, or the focal length of some multi-focal lenses. }, # All M9 codes (two numbers: first the LensID then the lower 2 bits) # are ref PH with samples from ref 13. From ref 10, the lower 2 bits of # the LensType value give the frame selector position for most lenses, # although for the 28-35-50mm (at least) it gives the focal length selection. # The M9 also gives the focal length selection but for other lenses the # lower 3 bits don't change with frame selector position except for the lens # shows as uncoded for certain lenses and some incorrect positions of the # frame selector. The bits are zero for uncoded lenses when manually coding # from the menu on the M9. - PH # Frame selector bits (from ref 10, M8): # 1 => '28/90mm frame lines engaged', # 2 => '24/35mm frame lines engaged', # 3 => '50/75mm frame lines engaged', '0 0' => 'Uncoded lens', # # NOTE: MUST ADD ENTRY TO %frameSelectorBits below when a new lens is added!!!! # # model number(s): 1 => 'Elmarit-M 21mm f/2.8', # 11134 3 => 'Elmarit-M 28mm f/2.8 (III)', # 11804 4 => 'Tele-Elmarit-M 90mm f/2.8 (II)', # 11800 5 => 'Summilux-M 50mm f/1.4 (II)', # 11868/11856/11114 6 => 'Summicron-M 35mm f/2 (IV)', # 11310/11311 '6 0' => 'Summilux-M 35mm f/1.4', # 11869/11870/11860 7 => 'Summicron-M 90mm f/2 (II)', # 11136/11137 9 => 'Elmarit-M 135mm f/2.8 (I/II)', # 11829 '9 0' => 'Apo-Telyt-M 135mm f/3.4', # 11889 16 => 'Tri-Elmar-M 16-18-21mm f/4 ASPH.',# 11626 '16 1' => 'Tri-Elmar-M 16-18-21mm f/4 ASPH. (at 16mm)', '16 2' => 'Tri-Elmar-M 16-18-21mm f/4 ASPH. (at 18mm)', '16 3' => 'Tri-Elmar-M 16-18-21mm f/4 ASPH. (at 21mm)', 23 => 'Summicron-M 50mm f/2 (III)', # 11817, version (I) in camera menu 24 => 'Elmarit-M 21mm f/2.8 ASPH.', # 11135/11897 25 => 'Elmarit-M 24mm f/2.8 ASPH.', # 11878/11898 26 => 'Summicron-M 28mm f/2 ASPH.', # 11604 27 => 'Elmarit-M 28mm f/2.8 (IV)', # 11809 28 => 'Elmarit-M 28mm f/2.8 ASPH.', # 11606 29 => 'Summilux-M 35mm f/1.4 ASPH.', # 11874/11883 '29 0' => 'Summilux-M 35mm f/1.4 ASPHERICAL', # 11873 (different from "ASPH." model!) 30 => 'Summicron-M 35mm f/2 ASPH.', # 11879/11882 31 => 'Noctilux-M 50mm f/1', # 11821/11822 '31 0' => 'Noctilux-M 50mm f/1.2', # 11820 32 => 'Summilux-M 50mm f/1.4 ASPH.', # 11891/11892 33 => 'Summicron-M 50mm f/2 (IV, V)', # 11819/11825/11826/11816, version (II,III) in camera menu 34 => 'Elmar-M 50mm f/2.8', # 11831/11823/11825 35 => 'Summilux-M 75mm f/1.4', # 11814/11815/11810 36 => 'Apo-Summicron-M 75mm f/2 ASPH.', # 11637 37 => 'Apo-Summicron-M 90mm f/2 ASPH.', # 11884/11885 38 => 'Elmarit-M 90mm f/2.8', # 11807/11808, version (II) in camera menu 39 => 'Macro-Elmar-M 90mm f/4', # 11633/11634 '39 0' => 'Tele-Elmar-M 135mm f/4 (II)',# 11861 40 => 'Macro-Adapter M', # 14409 '41 3' => 'Apo-Summicron-M 50mm f/2 Asph', #16 42 => 'Tri-Elmar-M 28-35-50mm f/4 ASPH.',# 11625 '42 1' => 'Tri-Elmar-M 28-35-50mm f/4 ASPH. (at 28mm)', '42 2' => 'Tri-Elmar-M 28-35-50mm f/4 ASPH. (at 35mm)', '42 3' => 'Tri-Elmar-M 28-35-50mm f/4 ASPH. (at 50mm)', 43 => 'Summarit-M 35mm f/2.5', # ? (ref PH) 44 => 'Summarit-M 50mm f/2.5', # ? (ref PH) 45 => 'Summarit-M 75mm f/2.5', # ? (ref PH) 46 => 'Summarit-M 90mm f/2.5', # ? 47 => 'Summilux-M 21mm f/1.4 ASPH.', # ? (ref 11) 48 => 'Summilux-M 24mm f/1.4 ASPH.', # ? (ref 11) 49 => 'Noctilux-M 50mm f/0.95 ASPH.', # ? (ref 11) 50 => 'Elmar-M 24mm f/3.8 ASPH.', # ? (ref 11) 51 => 'Super-Elmar-M 21mm f/3.4 Asph', # ? (ref 16, frameSelectorBits=1) '51 2' => 'Super-Elmar-M 14mm f/3.8 Asph', # ? (ref 16) 52 => 'Super-Elmar-M 18mm f/3.8 ASPH.', # ? (ref PH/11) '53 2' => 'Apo-Telyt-M 135mm f/3.4', #16 '53 3' => 'Apo-Summicron-M 50mm f/2 (VI)', #LibRaw ); # M9 frame selector bits for each lens # 1 = towards lens = 28/90mm or 21mm or Adapter (or Elmarit-M 135mm f/2.8) # 2 = away from lens = 24/35mm (or 35/135mm on the M9) # 3 = middle position = 50/75mm or 18mm my %frameSelectorBits = ( 1 => 1, 3 => 1, 4 => 1, 5 => 3, 6 => 2, 7 => 1, 9 => 1, # (because lens has special magnifier for the rangefinder) 16 => 1, # or 2 or 3 23 => 3, 24 => 1, 25 => 2, 26 => 1, 27 => 1, 28 => 1, 29 => 2, 30 => 2, 31 => 3, 32 => 3, 33 => 3, 34 => 3, 35 => 3, 36 => 3, 37 => 1, 38 => 1, 39 => 1, 40 => 1, 42 => 1, # or 2 or 3 43 => 2, # (NC) 44 => 3, # (NC) 45 => 3, 46 => 1, # (NC) 47 => 1, # (NC) 48 => 2, # (NC) 49 => 3, # (NC) 50 => 2, # (NC) 51 => 1, # or 2 (ref 16) 52 => 3, 53 => 2, #16 ); # conversions for ShootingMode and SceneMode my %shootingMode = ( 1 => 'Normal', 2 => 'Portrait', 3 => 'Scenery', 4 => 'Sports', 5 => 'Night Portrait', 6 => 'Program', 7 => 'Aperture Priority', 8 => 'Shutter Priority', 9 => 'Macro', 10 => 'Spot', #7 11 => 'Manual', 12 => 'Movie Preview', #PH (LZ6) 13 => 'Panning', 14 => 'Simple', #PH (LZ6) 15 => 'Color Effects', #7 16 => 'Self Portrait', #PH (TZ5) 17 => 'Economy', #7 18 => 'Fireworks', 19 => 'Party', 20 => 'Snow', 21 => 'Night Scenery', 22 => 'Food', #7 23 => 'Baby', #JD 24 => 'Soft Skin', #PH (LZ6) 25 => 'Candlelight', #PH (LZ6) 26 => 'Starry Night', #PH (LZ6) 27 => 'High Sensitivity', #7 (LZ6) 28 => 'Panorama Assist', #7 29 => 'Underwater', #7 30 => 'Beach', #PH (LZ6) 31 => 'Aerial Photo', #PH (LZ6) 32 => 'Sunset', #PH (LZ6) 33 => 'Pet', #JD 34 => 'Intelligent ISO', #PH (LZ6) 35 => 'Clipboard', #7 36 => 'High Speed Continuous Shooting', #7 37 => 'Intelligent Auto', #7 39 => 'Multi-aspect', #PH (TZ5) 41 => 'Transform', #PH (FS7) 42 => 'Flash Burst', #PH (FZ28) 43 => 'Pin Hole', #PH (FZ28) 44 => 'Film Grain', #PH (FZ28) 45 => 'My Color', #PH (GF1) 46 => 'Photo Frame', #PH (FS7) 48 => 'Movie', #PH (GM1) # 49 - seen for FS4 (snow?) 51 => 'HDR', #12 52 => 'Peripheral Defocus', #Horst Wandres 55 => 'Handheld Night Shot', #PH (FZ47) 57 => '3D', #PH (3D1) 59 => 'Creative Control', #PH (FZ47) 62 => 'Panorama', #17 63 => 'Glass Through', #17 64 => 'HDR', #17 66 => 'Digital Filter', #PH (GF5 "Impressive Art", "Cross Process", "Color Select", "Star") 67 => 'Clear Portrait', #18 68 => 'Silky Skin', #18 69 => 'Backlit Softness', #18 70 => 'Clear in Backlight', #18 71 => 'Relaxing Tone', #18 72 => "Sweet Child's Face", #18 73 => 'Distinct Scenery', #18 74 => 'Bright Blue Sky', #18 75 => 'Romantic Sunset Glow', #18 76 => 'Vivid Sunset Glow', #18 77 => 'Glistening Water', #18 78 => 'Clear Nightscape', #18 79 => 'Cool Night Sky', #18 80 => 'Warm Glowing Nightscape', #18 81 => 'Artistic Nightscape', #18 82 => 'Glittering Illuminations', #18 83 => 'Clear Night Portrait', #18 84 => 'Soft Image of a Flower', #18 85 => 'Appetizing Food', #18 86 => 'Cute Desert', #18 87 => 'Freeze Animal Motion', #18 88 => 'Clear Sports Shot', #18 89 => 'Monochrome', #18 90 => 'Creative Control', #18 ); %Image::ExifTool::Panasonic::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, WRITABLE => 1, 0x01 => { Name => 'ImageQuality', Writable => 'int16u', PrintConv => { 1 => 'TIFF', #PH (FZ20) 2 => 'High', 3 => 'Normal', # 5 - seen this for 1920x1080, 30fps SZ7 video - PH 6 => 'Very High', #3 (Leica) 7 => 'Raw', #3 (Leica) 9 => 'Motion Picture', #PH (LZ6) 11 => 'Full HD Movie', #PH (V-LUX) 12 => '4k Movie', #PH (V-LUX) }, }, 0x02 => { Name => 'FirmwareVersion', Writable => 'undef', Notes => q{ for some camera models such as the FZ30 this may be an internal production reference number and not the actual firmware version }, # (ref http://www.stevesforums.com/forums/view_topic.php?id=87764&forum_id=23&) # (can be either binary or ascii -- add decimal points if binary) ValueConv => '$val=~/[\0-\x2f]/ ? join(" ",unpack("C*",$val)) : $val', ValueConvInv => q{ $val =~ /(\d+ ){3}\d+/ and $val = pack('C*',split(' ', $val)); length($val) == 4 or warn "Version must be 4 numbers\n"; return $val; }, PrintConv => '$val=~tr/ /./; $val', PrintConvInv => '$val=~tr/./ /; $val', }, 0x03 => { Name => 'WhiteBalance', Writable => 'int16u', PrintConv => { 1 => 'Auto', 2 => 'Daylight', 3 => 'Cloudy', 4 => 'Incandescent', #PH 5 => 'Manual', 8 => 'Flash', 10 => 'Black & White', #3 (Leica) 11 => 'Manual', #PH (FZ8) 12 => 'Shade', #PH (FS7) 13 => 'Kelvin', #PeterK (NC) }, }, 0x07 => { Name => 'FocusMode', Writable => 'int16u', PrintConv => { 1 => 'Auto', 2 => 'Manual', 4 => 'Auto, Focus button', #4 5 => 'Auto, Continuous', #4 6 => 'AF-S', #18 (also seen for GF1 - PH) 7 => 'AF-C', #18 8 => 'AF-F', #18 (auto-focus flexible) }, }, 0x0f => [ { Name => 'AFAreaMode', Condition => '$$self{Model} =~ /DMC-FZ10\b/', #JD Writable => 'int8u', Count => 2, Notes => 'DMC-FZ10', PrintConv => { '0 1' => 'Spot Mode On', '0 16' => 'Spot Mode Off', }, },{ Name => 'AFAreaMode', Writable => 'int8u', Count => 2, Notes => 'other models', PrintConv => { #PH '0 1' => '9-area', # (FS7) '0 16' => '3-area (high speed)', # (FZ8) '0 23' => '23-area', #PH (FZ47,NC) # '0 49' - seen for LX100, V-LUX (PH) '1 0' => 'Spot Focusing', # (FZ8) '1 1' => '5-area', # (FZ8) '16' => 'Normal?', # (only mode for DMC-LC20) '16 0' => '1-area', # (FZ8) '16 16' => '1-area (high speed)', # (FZ8) # '32 0' is Face Detect for FS7, and Face Detect or Focus Tracking # for the DMC-FZ200 (ref 17), and Auto is DMC-L1 guess, '32 0' => 'Tracking', '32 1' => '3-area (left)?', # (DMC-L1 guess) '32 2' => '3-area (center)?', # (DMC-L1 guess) '32 3' => '3-area (right)?', # (DMC-L1 guess) '64 0' => 'Face Detect', '128 0' => 'Spot Focusing 2', #18 }, }, ], 0x1a => { Name => 'ImageStabilization', Writable => 'int16u', PrintConv => { 2 => 'On, Mode 1', 3 => 'Off', 4 => 'On, Mode 2', 5 => 'Panning', #18 # GF1 also has a "Mode 3" - PH 6 => 'On, Mode 3', #PH (GX7, sensor shift?) }, }, 0x1c => { Name => 'MacroMode', Writable => 'int16u', PrintConv => { 1 => 'On', 2 => 'Off', 0x101 => 'Tele-Macro', #7 0x201 => 'Macro Zoom', #PH (FS7) }, }, 0x1f => { Name => 'ShootingMode', Writable => 'int16u', PrintConvColumns => 2, PrintConv => \%shootingMode, }, 0x20 => { Name => 'Audio', Writable => 'int16u', PrintConv => { 1 => 'Yes', 2 => 'No', 3 => 'Stereo', #PH (NC) }, }, 0x21 => { #2 Name => 'DataDump', Writable => 0, Binary => 1, }, # 0x22 - normally 0, but 2 for 'Simple' ShootingMode in LZ6 sample - PH 0x23 => { Name => 'WhiteBalanceBias', Format => 'int16s', Writable => 'int16s', ValueConv => '$val / 3', ValueConvInv => '$val * 3', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x24 => { Name => 'FlashBias', Format => 'int16s', Writable => 'int16s', ValueConv => '$val / 3', #17 (older models may not have factor of 3? - PH) ValueConvInv => '$val * 3', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x25 => { #PH Name => 'InternalSerialNumber', Writable => 'undef', Count => 16, Notes => q{ this number is unique, and contains the date of manufacture, but is not the same as the number printed on the camera body }, PrintConv => q{ return $val unless $val=~/^([A-Z]\d{2})(\d{2})(\d{2})(\d{2})(\d{4})/; my $yr = $2 + ($2 < 70 ? 2000 : 1900); return "($1) $yr:$3:$4 no. $5"; }, PrintConvInv => '$_=$val; tr/A-Z0-9//dc; s/(.{3})(19|20)/$1/; $_', }, 0x26 => { #PH Name => 'PanasonicExifVersion', Writable => 'undef', }, # 0x27 - values: 0 (LZ6,FX10K) 0x28 => { Name => 'ColorEffect', Writable => 'int16u', # FX30 manual: (ColorMode) natural, vivid, cool, warm, b/w, sepia PrintConv => { 1 => 'Off', 2 => 'Warm', 3 => 'Cool', 4 => 'Black & White', 5 => 'Sepia', 6 => 'Happy', #PH (FX70) (yes, really. you wouldn't want sad colors now would you?) 8 => 'Vivid', #PH (SZ3) }, }, 0x29 => { #JD Name => 'TimeSincePowerOn', Writable => 'int32u', Notes => q{ time in 1/100 s from when the camera was powered on to when the image is written to memory card }, ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => sub { # convert to format "[DD days ]HH:MM:SS.ss" my $val = shift; my $str = ''; if ($val >= 24 * 3600) { my $d = int($val / (24 * 3600)); $str .= "$d days "; $val -= $d * 24 * 3600; } my $h = int($val / 3600); $val -= $h * 3600; my $m = int($val / 60); $val -= $m * 60; my $s = int($val); my $f = 100 * ($val - int($val)); return sprintf("%s%.2d:%.2d:%.2d.%.2d",$str,$h,$m,$s,$f); }, PrintConvInv => sub { my $val = shift; my @vals = ($val =~ /\d+(?:\.\d*)?/g); my $sec = 0; $sec += 24 * 3600 * shift(@vals) if @vals > 3; $sec += 3600 * shift(@vals) if @vals > 2; $sec += 60 * shift(@vals) if @vals > 1; $sec += shift(@vals) if @vals; return $sec; }, }, 0x2a => { #4 Name => 'BurstMode', Writable => 'int16u', Notes => 'decoding may be different for some models', PrintConv => { 0 => 'Off', 1 => 'On', #PH (TZ5) [was "Low/High Quality" from ref 4] 2 => 'Auto Exposure Bracketing (AEB)', #17 4 => 'Unlimited', #PH (TZ5) 8 => 'White Balance Bracketing', #18 17 => 'On (with flash)', #forum5597 }, }, 0x2b => { #4 Name => 'SequenceNumber', Writable => 'int32u', }, 0x2c => [ { Name => 'ContrastMode', Condition => '$$self{Model} !~ /^DMC-(FX10|G1|L1|L10|LC80|GF\d+|G2|TZ10|ZS7)$/', Flags => 'PrintHex', Writable => 'int16u', Notes => q{ this decoding seems to work for some models such as the LC1, LX2, FZ7, FZ8, FZ18 and FZ50, but may not be correct for other models such as the FX10, G1, L1, L10 and LC80 }, PrintConv => { 0x00 => 'Normal', 0x01 => 'Low', 0x02 => 'High', # 0x03 - observed with LZ6 and TZ5 in Fireworks mode # and GX7 in Fantasy/Retro/OldDays/HighKey - PH # 0x04 - observed in MP4 movie with GM1 (EXIF and 0x39 Contrast "Normal") - PH # 0x05 - observed with FX01, FX40 and FP8 (EXIF contrast "Normal") - PH 0x06 => 'Medium Low', #PH (FZ18) 0x07 => 'Medium High', #PH (FZ18) # 0x08 - GX7 in DynamicMonochrome mode 0x0d => 'High Dynamic', #PH (FZ47 in ?) # 0x13 - seen for LX100 (PH) # DMC-LC1 values: 0x100 => 'Low', 0x110 => 'Normal', 0x120 => 'High', } },{ Name => 'ContrastMode', Condition => '$$self{Model} =~ /^DMC-(GF\d+|G2)$/', Notes => 'these values are used by the G2, GF1, GF2, GF3, GF5 and GF6', Writable => 'int16u', PrintConv => { # (decoded for GF1 unless otherwise noted) 0 => '-2', 1 => '-1', 2 => 'Normal', 3 => '+1', 4 => '+2', # Note: Other Contrast tags will be "Normal" in any of these modes: 5 => 'Normal 2', # 5 - seen for Portrait (FX80) and Normal (GF6) 7 => 'Nature (Color Film)', # (GF1,G2; GF3 "Miniature") 9 => 'Expressive', #(GF3) 12 => 'Smooth (Color Film) or Pure (My Color)', #(GF1,G2 "Smooth Color") 17 => 'Dynamic (B&W Film)', #(GF1,G2) 22 => 'Smooth (B&W Film)', #(GF1,G2) 25 => 'High Dynamic', #(GF5) 26 => 'Retro', #(GF5) 27 => 'Dynamic (Color Film)', #(GF1,G2) (GF3 "High Key") 28 => 'Low Key', #(GF5) 29 => 'Toy Effect', #(GF5) 32 => 'Vibrant (Color Film) or Expressive (My Color)', # (GF1; G2 "Vibrant"; GF2,GF5 "Expressive") 33 => 'Elegant (My Color)', 37 => 'Nostalgic (Color Film)', # (GF1,G2; GF5 "Sepia") 41 => 'Dynamic Art (My Color)', # (GF5 "High Key") 42 => 'Retro (My Color)', 45 => 'Cinema', #(GF2) 47 => 'Dynamic Mono', #(GF5) 50 => 'Impressive Art', #(GF5) 51 => 'Cross Process', #(GF5) 100 => 'High Dynamic 2', #Exiv2 (G6) 101 => 'Retro 2', #Exiv2 (G6) 102 => 'High Key 2', #Exiv2 (G6) 103 => 'Low Key 2', #Exiv2 (G6) 104 => 'Toy Effect 2', #Exiv2 (G6) 107 => 'Expressive 2', #(GF6) 112 => 'Sepia', #Exiv2 (G6) 117 => 'Miniature', #Exiv2 (G6) 122 => 'Dynamic Monochrome', #(GF6) 127 => 'Old Days', #Exiv2 (G6) 132 => 'Dynamic Monochrome 2', #Exiv2 (G6) 135 => 'Impressive Art 2', #Exiv2 (G6) 136 => 'Cross Process 2', #Exiv2 (G6) 137 => 'Toy Pop', #Exiv2 (G6) 138 => 'Fantasy', #Exiv2 (G6) 256 => 'Normal 3', #Exiv2 (G6) 272 => 'Standard', #Exiv2 (G6) 288 => 'High', #Exiv2 (G6) # more new modes for GF6: # ? => 'Old Days', # ? => 'Toy Pop', # ? => 'Bleach Bypass', # ? => 'Fantasy', # ? => 'Star Filter', # ? => 'One Point Color', # ? => 'Sunshine', }, },{ Name => 'ContrastMode', Condition => '$$self{Model} =~ /^DMC-(TZ10|ZS7)$/', Notes => 'these values are used by the TZ10 and ZS7', Writable => 'int16u', PrintConv => { 0 => 'Normal', 1 => '-2', 2 => '+2', 5 => '-1', 6 => '+1', }, },{ Name => 'ContrastMode', Writable => 'int16u', }, ], 0x2d => { Name => 'NoiseReduction', Writable => 'int16u', PrintConv => { 0 => 'Standard', 1 => 'Low (-1)', 2 => 'High (+1)', 3 => 'Lowest (-2)', #JD 4 => 'Highest (+2)', #JD # 65531 - seen for LX100 "NR1" test shots at imaging-resource (PH) }, }, 0x2e => { #4 Name => 'SelfTimer', Writable => 'int16u', PrintConv => { 1 => 'Off', 2 => '10 s', 3 => '2 s', 4 => '10 s / 3 pictures', #17 }, }, # 0x2f - values: 1 (LZ6,FX10K) 0x30 => { #7 Name => 'Rotation', Writable => 'int16u', PrintConv => { 1 => 'Horizontal (normal)', 3 => 'Rotate 180', #PH 6 => 'Rotate 90 CW', #PH (ref 7 gives 270 CW) 8 => 'Rotate 270 CW', #PH (ref 7 gives 90 CW) }, }, 0x31 => { #PH (FS7) Name => 'AFAssistLamp', Writable => 'int16u', PrintConv => { 1 => 'Fired', 2 => 'Enabled but Not Used', 3 => 'Disabled but Required', 4 => 'Disabled and Not Required', # have seen a value of 5 - PH # values possibly related to FOC-L? - JD }, }, 0x32 => { #7 Name => 'ColorMode', Writable => 'int16u', PrintConv => { 0 => 'Normal', 1 => 'Natural', 2 => 'Vivid', # have seen 3 for GF2 - PH }, }, 0x33 => { #JD Name => 'BabyAge', Writable => 'string', Notes => 'or pet age', #PH PrintConv => '$val eq "9999:99:99 00:00:00" ? "(not set)" : $val', PrintConvInv => '$val =~ /^\d/ ? $val : "9999:99:99 00:00:00"', }, 0x34 => { #7/PH Name => 'OpticalZoomMode', Writable => 'int16u', PrintConv => { 1 => 'Standard', 2 => 'Extended', }, }, 0x35 => { #9 Name => 'ConversionLens', Writable => 'int16u', PrintConv => { #PH (unconfirmed) 1 => 'Off', 2 => 'Wide', 3 => 'Telephoto', 4 => 'Macro', }, }, 0x36 => { #8 Name => 'TravelDay', Writable => 'int16u', PrintConv => '$val == 65535 ? "n/a" : $val', PrintConvInv => '$val =~ /(\d+)/ ? $1 : $val', }, # 0x37 - values: 0,1,2 (LZ6, 0 for movie preview); 257 (FX10K); 0,256 (TZ5, 0 for movie preview) # 0x38 - values: 0,1,2 (LZ6, same as 0x37); 1,2 (FX10K); 0,256 (TZ5, 0 for movie preview) 0x39 => { #7 (L1/L10) Name => 'Contrast', Format => 'int16s', Writable => 'int16u', %Image::ExifTool::Exif::printParameter, }, 0x3a => { Name => 'WorldTimeLocation', Writable => 'int16u', PrintConv => { 1 => 'Home', 2 => 'Destination', }, }, 0x3b => { #PH (TZ5/FS7) # (tags 0x3b, 0x3e, 0x8008 and 0x8009 have the same values in all my samples - PH) Name => 'TextStamp', Writable => 'int16u', PrintConv => { 1 => 'Off', 2 => 'On' }, }, 0x3c => { #PH Name => 'ProgramISO', # (maybe should rename this ISOSetting?) Writable => 'int16u', PrintConv => { OTHER => sub { shift }, 65534 => 'Intelligent ISO', #PH (FS7) 65535 => 'n/a', }, }, 0x3d => { #PH Name => 'AdvancedSceneType', Writable => 'int16u', Notes => 'used together with SceneMode to derive Composite AdvancedSceneMode', }, 0x3e => { #PH (TZ5/FS7) # (tags 0x3b, 0x3e, 0x8008 and 0x8009 have the same values in all my samples - PH) Name => 'TextStamp', Writable => 'int16u', PrintConv => { 1 => 'Off', 2 => 'On' }, }, 0x3f => { #PH (TZ7) Name => 'FacesDetected', Writable => 'int16u', }, 0x40 => { #7 (L1/L10) Name => 'Saturation', Format => 'int16s', Writable => 'int16u', %Image::ExifTool::Exif::printParameter, }, 0x41 => { #7 (L1/L10) Name => 'Sharpness', Format => 'int16s', Writable => 'int16u', %Image::ExifTool::Exif::printParameter, }, 0x42 => { #7 (DMC-L1) Name => 'FilmMode', Writable => 'int16u', PrintConv => { 0 => 'n/a', #PH (eg. FZ100 "Photo Frame" ShootingMode) 1 => 'Standard (color)', 2 => 'Dynamic (color)', 3 => 'Nature (color)', 4 => 'Smooth (color)', 5 => 'Standard (B&W)', 6 => 'Dynamic (B&W)', 7 => 'Smooth (B&W)', # 8 => 'My Film 1'? (from owner manual) # 9 => 'My Film 2'? 10 => 'Nostalgic', #(GH1) 11 => 'Vibrant', #(GH1) # 12 => 'Multi Film'? (in the GH1 specs) }, }, # 0x43 - int16u: 2,3 0x44 => { Name => 'ColorTempKelvin', Format => 'int16u', }, 0x45 => { #19 Name => 'BracketSettings', Writable => 'int16u', PrintConv => { 0 => 'No Bracket', 1 => '3 Images, Sequence 0/-/+', 2 => '3 Images, Sequence -/0/+', 3 => '5 Images, Sequence 0/-/+', 4 => '5 Images, Sequence -/0/+', 5 => '7 Images, Sequence 0/-/+', 6 => '7 Images, Sequence -/0/+', }, }, 0x46 => { #PH/JD Name => 'WBShiftAB', Format => 'int16s', Writable => 'int16u', Notes => 'positive is a shift toward blue', }, 0x47 => { #PH/JD Name => 'WBShiftGM', Format => 'int16s', Writable => 'int16u', Notes => 'positive is a shift toward green', }, 0x48 => { #17 Name => 'FlashCurtain', Writable => 'int16u', PrintConv => { 0 => 'n/a', 1 => '1st', 2 => '2nd', }, }, 0x49 => { #19 Name => 'LongExposureNoiseReduction', Writable => 'int16u', PrintConv => { 1 => 'Off', 2 => 'On' } }, # 0x4a - int16u: 0 0x4b => { #PH Name => 'PanasonicImageWidth', Writable => 'int32u', }, 0x4c => { #PH Name => 'PanasonicImageHeight', Writable => 'int32u', }, 0x4d => { #PH (FS7) Name => 'AFPointPosition', Writable => 'rational64u', Count => 2, Notes => 'X Y coordinates of primary AF area center, in the range 0.0 to 1.0', PrintConv => q{ return 'none' if $val eq '16777216 16777216'; my @a = split ' ', $val; sprintf("%.2g %.2g",@a); }, PrintConvInv => '$val eq "none" ? "16777216 16777216" : $val', }, 0x4e => { #PH Name => 'FaceDetInfo', PrintConv => 'length $val', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::FaceDetInfo', }, }, # 0x4f,0x50 - int16u: 0 0x51 => { Name => 'LensType', Writable => 'string', ValueConv => '$val=~s/ +$//; $val', # trim trailing spaces ValueConvInv => '$val', }, 0x52 => { #7 (DMC-L1) Name => 'LensSerialNumber', Writable => 'string', ValueConv => '$val=~s/ +$//; $val', # trim trailing spaces ValueConvInv => '$val', }, 0x53 => { #7 (DMC-L1) Name => 'AccessoryType', Writable => 'string', ValueConv => '$val=~s/ +$//; $val', # trim trailing spaces ValueConvInv => '$val', }, 0x54 => { #19 Name => 'AccessorySerialNumber', Writable => 'string', ValueConv => '$val=~s/ +$//; $val', # trim trailing spaces ValueConvInv => '$val', }, # 0x55 - int16u: 1 # 0x57 - int16u: 0 0x59 => { #PH (FS7) Name => 'Transform', Writable => 'undef', Notes => 'decoded as two 16-bit signed integers', Format => 'int16s', Count => 2, PrintConv => { '-3 2' => 'Slim High', '-1 1' => 'Slim Low', '0 0' => 'Off', '1 1' => 'Stretch Low', '3 2' => 'Stretch High', }, }, # 0x5a - int16u: 0,2 # 0x5b - int16u: 0 # 0x5c - int16u: 0,2 0x5d => { #PH (GF1, FZ35) Name => 'IntelligentExposure', Notes => 'not valid for some models', # (doesn't change in ZS7 and GH1 images) Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Low', 2 => 'Standard', 3 => 'High', }, }, # 0x5e,0x5f - undef[4] 0x60 => { #18 Name => 'LensFirmwareVersion', Writable => 'undef', Format => 'int8u', Count => 4, PrintConv => '$val=~tr/ /./; $val', PrintConvInv => '$val=~tr/./ /; $val', }, 0x61 => { #PH Name => 'FaceRecInfo', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::FaceRecInfo', }, }, 0x62 => { #PH (FS7) Name => 'FlashWarning', Writable => 'int16u', PrintConv => { 0 => 'No', 1 => 'Yes (flash required but disabled)' }, }, 0x63 => { #PH # not sure exactly what this means, but in my samples this is # FacesRecognized bytes of 0x01, padded with 0x00 to a length of 4 - PH Name => 'RecognizedFaceFlags', Format => 'int8u', Count => 4, Writable => 'undef', Unknown => 1, }, 0x65 => { #15 Name => 'Title', Format => 'string', Writable => 'undef', # (Count 64) }, 0x66 => { #15 Name => 'BabyName', Notes => 'or pet name', Format => 'string', Writable => 'undef', # (Count 64) }, 0x67 => { #15 Name => 'Location', Groups => { 2 => 'Location' }, Format => 'string', Writable => 'undef', # (Count 64) }, # 0x68 - int8u: 1 0x69 => { #PH (ZS7) Name => 'Country', # (Country/Region) Groups => { 2 => 'Location' }, Format => 'string', Writable => 'undef', # (Count 72) }, # 0x6a - int8u: 1 0x6b => { #PH (ZS7) Name => 'State', # (State/Province/Count -- what is Count?) Groups => { 2 => 'Location' }, Format => 'string', Writable => 'undef', # (Count 72) }, # 0x6c - int8u: 1 0x6d => { #PH (ZS7) (also see forum5997) Name => 'City', # (City/Town) Groups => { 2 => 'Location' }, Format => 'string', Writable => 'undef', # (Count 72) Notes => 'City/Town as stored by some models, or County/Township for others', }, # 0x6e - int8u: 1 0x6f => { #PH (ZS7) Name => 'Landmark', # (Landmark) Groups => { 2 => 'Location' }, Format => 'string', Writable => 'undef', # (Count 128) }, 0x70 => { #PH (ZS7) Name => 'IntelligentResolution', Writable => 'int8u', PrintConv => { 0 => 'Off', # Note: I think these values make sense for the GH2, but meanings # may be different for other models 1 => 'Low', 2 => 'Standard', 3 => 'High', 4 => 'Extended', }, }, # 0x71 - undef[128] (maybe text stamp text?) 0x77 => { #18 Name => 'BurstSpeed', Writable => 'int16u', Notes => 'images per second', }, # 0x72,0x73,0x74,0x75,0x77,0x78: 0 # 0x76: 0, (3 for G6 with HDR on, ref 18) 0x79 => { #PH (GH2) Name => 'IntelligentD-Range', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Low', 2 => 'Standard', 3 => 'High', }, }, # 0x7a,0x7b: 0 0x7c => { #18 Name => 'ClearRetouch', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x80 => { #forum5997 (seen garbage here for SZ5 - PH) Name => 'City2', # (City/Town/Village) Groups => { 2 => 'Location' }, Format => 'string', Writable => 'undef', # (Count 72) Notes => 'City/Town/Village as stored by some models', }, # 0x81 - undef[72]: "---" # 0x82 - undef[72]: "---" # 0x83 - undef[72]: "---" # 0x84 - undef[72]: "---" # 0x85 - undef[128]: "---" 0x86 => { #http://dev.exiv2.org/issues/825 Name => 'ManometerPressure', Writable => 'int16u', RawConv => '$val==65535 ? undef : $val', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f kPa",$val)', PrintConvInv => '$val=~s/ ?kPa//i; $val', }, 0x89 => { Name => 'PhotoStyle', Writable => 'int16u', PrintConv => { 0 => 'Auto', 1 => 'Standard or Custom', 2 => 'Vivid', 3 => 'Natural', 4 => 'Monochrome', 5 => 'Scenery', 6 => 'Portrait', }, }, 0x8a => { #18 Name => 'ShadingCompensation', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On' } }, 0x8c => { Name => 'AccelerometerZ', Writable => 'int16u', Format => 'int16s', Notes => 'positive is acceleration upwards', }, 0x8d => { Name => 'AccelerometerX', Writable => 'int16u', Format => 'int16s', Notes => 'positive is acceleration to the left', }, 0x8e => { Name => 'AccelerometerY', Writable => 'int16u', Format => 'int16s', Notes => 'positive is acceleration backwards', }, 0x8f => { #18 Name => 'CameraOrientation', Writable => 'int8u', PrintConv => { 0 => 'Normal', 1 => 'Rotate CW', 2 => 'Rotate 180', 3 => 'Rotate CCW', 4 => 'Tilt Upwards', 5 => 'Tilt Downwards' } }, 0x90 => { Name => 'RollAngle', Writable => 'int16u', Format => 'int16s', Notes => 'converted to degrees of clockwise camera rotation', ValueConv => '$val / 10', ValueConvInv => '$val * 10', }, 0x91 => { Name => 'PitchAngle', Writable => 'int16u', Format => 'int16s', Notes => 'converted to degrees of upward camera tilt', ValueConv => '-$val / 10', ValueConvInv => '-$val * 10', }, 0x93 => { #18 Name => 'SweepPanoramaDirection', Writable => 'int8u', PrintConv => { 0 => 'Off', 1 => 'Left to Right', 2 => 'Right to Left', 3 => 'Top to Bottom', 4 => 'Bottom to Top' } }, 0x94 => { #18 Name => 'SweepPanoramaFieldOfView', Writable => 'int16u' }, 0x96 => { #18 Name => 'TimerRecording', Writable => 'int8u', PrintConv => { 0 => 'Off', 1 => 'Time Lapse', 2 => 'Stop-motion Animation', }, }, 0x9d => { #18 Name => 'InternalNDFilter', Writable => 'rational64u' }, 0x9e => { #18 Name => 'HDR', Writable => 'int16u', PrintConv => { 0 => 'Off', 100 => '1 EV', 200 => '2 EV', 300 => '3 EV', 32868 => '1 EV (Auto)', 32968 => '2 EV (Auto)', 33068 => '3 EV (Auto)', }, }, 0x9f => { #18 Name => 'ShutterType', Writable => 'int16u', PrintConv => { 0 => 'Mechanical', 1 => 'Electronic', 2 => 'Hybrid', #PH (GM1, 1st curtain electronic, 2nd curtain mechanical) }, }, 0xa3 => { #18 Name => 'ClearRetouchValue', Writable => 'rational64u', # undef if ClearRetouch is off, 0 if it is on }, 0xab => { #18 Name => 'TouchAE', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x0e00 => { Name => 'PrintIM', Description => 'Print Image Matching', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main', }, }, 0x8000 => { #PH Name => 'MakerNoteVersion', Format => 'undef', }, 0x8001 => { #7/PH/JD Name => 'SceneMode', Writable => 'int16u', PrintConvColumns => 2, PrintConv => { 0 => 'Off', %shootingMode, }, }, # 0x8002 - values: 1,2 related to focus? (PH/JD) # 1 for HDR modes, 2 for Portrait (ref 12) # 0x8003 - values: 1,2 related to focus? (PH/JD) 0x8004 => { #PH/JD Name => 'WBRedLevel', Writable => 'int16u', }, 0x8005 => { #PH/JD Name => 'WBGreenLevel', Writable => 'int16u', }, 0x8006 => { #PH/JD Name => 'WBBlueLevel', Writable => 'int16u', }, 0x8007 => { #PH Name => 'FlashFired', Writable => 'int16u', PrintConv => { 1 => 'No', 2 => 'Yes' }, }, 0x8008 => { #PH (TZ5/FS7) # (tags 0x3b, 0x3e, 0x8008 and 0x8009 have the same values in all my samples - PH) Name => 'TextStamp', Writable => 'int16u', PrintConv => { 1 => 'Off', 2 => 'On' }, }, 0x8009 => { #PH (TZ5/FS7) # (tags 0x3b, 0x3e, 0x8008 and 0x8009 have the same values in all my samples - PH) Name => 'TextStamp', Writable => 'int16u', PrintConv => { 1 => 'Off', 2 => 'On' }, }, 0x8010 => { #PH Name => 'BabyAge', Writable => 'string', Notes => 'or pet age', PrintConv => '$val eq "9999:99:99 00:00:00" ? "(not set)" : $val', PrintConvInv => '$val =~ /^\d/ ? $val : "9999:99:99 00:00:00"', }, 0x8012 => { #PH (FS7) Name => 'Transform', Writable => 'undef', Notes => 'decoded as two 16-bit signed integers', Format => 'int16s', Count => 2, PrintConv => { '-3 2' => 'Slim High', '-1 1' => 'Slim Low', '0 0' => 'Off', '1 1' => 'Stretch Low', '3 2' => 'Stretch High', }, }, ); # Leica type2 maker notes (ref 10) %Image::ExifTool::Panasonic::Leica2 = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' }, WRITABLE => 1, NOTES => 'These tags are used by the Leica M8.', 0x300 => { Name => 'Quality', Writable => 'int16u', PrintConv => { 1 => 'Fine', 2 => 'Basic', }, }, 0x302 => { Name => 'UserProfile', Writable => 'int32u', PrintConv => { 1 => 'User Profile 1', 2 => 'User Profile 2', 3 => 'User Profile 3', 4 => 'User Profile 0 (Dynamic)', }, }, 0x303 => { Name => 'SerialNumber', Writable => 'int32u', PrintConv => 'sprintf("%.7d", $val)', PrintConvInv => '$val', }, 0x304 => { Name => 'WhiteBalance', Writable => 'int16u', Notes => 'values above 0x8000 are converted to Kelvin color temperatures', PrintConv => { 0 => 'Auto or Manual', 1 => 'Daylight', 2 => 'Fluorescent', 3 => 'Tungsten', 4 => 'Flash', 10 => 'Cloudy', 11 => 'Shade', OTHER => \&WhiteBalanceConv, }, }, 0x310 => { Name => 'LensType', Writable => 'int32u', SeparateTable => 1, ValueConv => '($val >> 2) . " " . ($val & 0x3)', ValueConvInv => \&LensTypeConvInv, PrintConv => \%leicaLensTypes, }, 0x311 => { Name => 'ExternalSensorBrightnessValue', Format => 'rational64s', # (incorrectly unsigned in JPEG images) Writable => 'rational64s', Notes => '"blue dot" measurement', PrintConv => 'sprintf("%.2f", $val)', PrintConvInv => '$val', }, 0x312 => { Name => 'MeasuredLV', Format => 'rational64s', # (incorrectly unsigned in JPEG images) Writable => 'rational64s', Notes => 'imaging sensor or TTL exposure meter measurement', PrintConv => 'sprintf("%.2f", $val)', PrintConvInv => '$val', }, 0x313 => { Name => 'ApproximateFNumber', Writable => 'rational64u', PrintConv => 'sprintf("%.1f", $val)', PrintConvInv => '$val', }, 0x320 => { Name => 'CameraTemperature', Writable => 'int32s', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, 0x321 => { Name => 'ColorTemperature', Writable => 'int32u' }, 0x322 => { Name => 'WBRedLevel', Writable => 'rational64u' }, 0x323 => { Name => 'WBGreenLevel', Writable => 'rational64u' }, 0x324 => { Name => 'WBBlueLevel', Writable => 'rational64u' }, 0x325 => { Name => 'UV-IRFilterCorrection', Description => 'UV/IR Filter Correction', Writable => 'int32u', PrintConv => { 0 => 'Not Active', 1 => 'Active', }, }, 0x330 => { Name => 'CCDVersion', Writable => 'int32u' }, 0x331 => { Name => 'CCDBoardVersion', Writable => 'int32u' }, 0x332 => { Name => 'ControllerBoardVersion', Writable => 'int32u' }, 0x333 => { Name => 'M16CVersion', Writable => 'int32u' }, 0x340 => { Name => 'ImageIDNumber', Writable => 'int32u' }, ); # Leica type3 maker notes (ref PH) %Image::ExifTool::Panasonic::Leica3 = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' }, WRITABLE => 1, NOTES => 'These tags are used by the Leica R8 and R9 digital backs.', 0x0d => { Name => 'WB_RGBLevels', Writable => 'int16u', Count => 3, }, ); # Leica type4 maker notes (ref PH) (M9) %Image::ExifTool::Panasonic::Leica4 = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' }, WRITABLE => 1, NOTES => 'This information is written by the M9.', 0x3000 => { Name => 'Subdir3000', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Subdir', ByteOrder => 'Unknown', }, }, 0x3100 => { Name => 'Subdir3100', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Subdir', ByteOrder => 'Unknown', }, }, 0x3400 => { Name => 'Subdir3400', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Subdir', ByteOrder => 'Unknown', }, }, 0x3900 => { Name => 'Subdir3900', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Subdir', ByteOrder => 'Unknown', }, }, ); # Leica M9 SubDirectory tags (ref PH) %Image::ExifTool::Panasonic::Subdir = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' }, TAG_PREFIX => 'Leica_Subdir', WRITABLE => 1, # 0x3001 - normally 0 but value of 2 when manual coding is used # with a coded lens (but only tested with Elmar-M 50mm f/2.8) - PH 0x300a => { Name => 'Contrast', Writable => 'int32u', PrintConv => { 0 => 'Low', 1 => 'Medium Low', 2 => 'Normal', 3 => 'Medium High', 4 => 'High', }, }, 0x300b => { Name => 'Sharpening', Writable => 'int32u', PrintConv => { 0 => 'Off', 1 => 'Low', 2 => 'Normal', 3 => 'Medium High', 4 => 'High', }, }, 0x300d => { Name => 'Saturation', Writable => 'int32u', PrintConv => { 0 => 'Low', 1 => 'Medium Low', 2 => 'Normal', 3 => 'Medium High', 4 => 'High', 5 => 'Black & White', 6 => 'Vintage B&W', }, }, # 0x3032 - some sort of RGB coefficients? (zeros unless Kelvin WB, but same for all Color Temps) 0x3033 => { Name => 'WhiteBalance', Writable => 'int32u', PrintConv => { #13 0 => 'Auto', 1 => 'Tungsten', 2 => 'Fluorescent', 3 => 'Daylight Fluorescent', 4 => 'Daylight', 5 => 'Flash', 6 => 'Cloudy', 7 => 'Shade', 8 => 'Manual', 9 => 'Kelvin', }, }, 0x3034 => { Name => 'JPEGQuality', Writable => 'int32u', PrintConv => { 94 => 'Basic', 97 => 'Fine', }, }, # 0x3035 (int32u): -1 unless Manual WB (2 in my Manual sample) 0x3036 => { Name => 'WB_RGBLevels', Writable => 'rational64u', Count => 3, }, 0x3038 => { Name => 'UserProfile', # (CameraProfile according to ref 14) Writable => 'string', }, 0x303a => { Name => 'JPEGSize', Writable => 'int32u', PrintConv => { 0 => '5216x3472', 1 => '3840x2592', 2 => '2592x1728', 3 => '1728x1152', 4 => '1280x864', }, }, 0x3103 => { #13 (valid for FW 1.116 and later) Name => 'SerialNumber', Writable => 'string', }, # 0x3104 body-dependent string ("00012905000000") (not serial number) # 0x3105 body-dependent string ("00012905000000") # 0x3107 - body-dependent string ("4H205800116800") (not serial number) 0x3109 => { Name => 'FirmwareVersion', Writable => 'string', }, 0x312a => { #14 (NC) Name => 'BaseISO', Writable => 'int32u', }, 0x312b => { Name => 'SensorWidth', Writable => 'int32u', }, 0x312c => { Name => 'SensorHeight', Writable => 'int32u', }, 0x312d => { #14 (NC) Name => 'SensorBitDepth', Writable => 'int32u', }, 0x3402 => { #PH/13 Name => 'CameraTemperature', Writable => 'int32s', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, 0x3405 => { Name => 'LensType', Writable => 'int32u', SeparateTable => 1, ValueConv => '($val >> 2) . " " . ($val & 0x3)', ValueConvInv => \&LensTypeConvInv, PrintConv => \%leicaLensTypes, }, 0x3406 => { #PH/13 Name => 'ApproximateFNumber', Writable => 'rational64u', PrintConv => 'sprintf("%.1f", $val)', PrintConvInv => '$val', }, 0x3407 => { #14 Name => 'MeasuredLV', Writable => 'int32s', Notes => 'imaging sensor or TTL exposure meter measurement', ValueConv => '$val / 1e5', #PH (NC) ValueConvInv => '$val * 1e5', #PH (NC) PrintConv => 'sprintf("%.2f", $val)', PrintConvInv => '$val', }, 0x3408 => { #14 Name => 'ExternalSensorBrightnessValue', Writable => 'int32s', Notes => '"blue dot" measurement', ValueConv => '$val / 1e5', #PH (NC) ValueConvInv => '$val * 1e5', #PH (NC) PrintConv => 'sprintf("%.2f", $val)', PrintConvInv => '$val', }, 0x3901 => { Name => 'Data1', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Data1' }, }, 0x3902 => { Name => 'Data2', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Data2' }, }, # 0x3903 - larger binary data block ); %Image::ExifTool::Panasonic::Data1 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' }, WRITABLE => 1, TAG_PREFIX => 'Leica_Data1', FIRST_ENTRY => 0, 0x0016 => { Name => 'LensType', Writable => 'int32u', Priority => 0, SeparateTable => 1, ValueConv => '($val >> 2) . " " . ($val & 0x3)', ValueConvInv => \&LensTypeConvInv, PrintConv => \%leicaLensTypes, }, ); %Image::ExifTool::Panasonic::Data2 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' }, TAG_PREFIX => 'Leica_Data2', FIRST_ENTRY => 0, ); # Leica type5 maker notes (ref PH) (X1) %Image::ExifTool::Panasonic::Leica5 = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' }, WRITABLE => 1, PRIORITY => 0, NOTES => 'This information is written by the X1, X2, X VARIO and T.', 0x0303 => { Name => 'LensModel', Condition => '$format eq "string"', Notes => 'Leica T only', Writable => 'string', }, # 0x0406 - saturation or sharpness 0x0407 => { Name => 'OriginalFileName', Writable => 'string' }, 0x0408 => { Name => 'OriginalDirectory',Writable => 'string' }, # 0x040b - related to white balance 0x040d => { Name => 'ExposureMode', Format => 'int8u', Count => 4, PrintConv => { '0 0 0 0' => 'Program AE', # '0 1 0 0' - seen for X (Typ 113) - PH '1 0 0 0' => 'Aperture-priority AE', '1 1 0 0' => 'Aperture-priority AE (1)', # (see for Leica T) '2 0 0 0' => 'Shutter speed priority AE', #(guess) '3 0 0 0' => 'Manual', }, }, 0x0410 => { Name => 'ShotInfo', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::ShotInfo' }, }, # 0x0410 - int8u[16]: first byte is FileNumber # 0x0411 - int8u[4]: first number is FilmMode (1=Standard,2=Vivid,3=Natural,4=BW Natural,5=BW High Contrast) 0x0412 => { Name => 'FilmMode', Writable => 'string' }, 0x0413 => { Name => 'WB_RGBLevels', Writable => 'rational64u', Count => 3 }, ); # Leica type5 ShotInfo (ref PH) (X2) %Image::ExifTool::Panasonic::ShotInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' }, TAG_PREFIX => 'Leica_ShotInfo', FIRST_ENTRY => 0, WRITABLE => 1, 0 => { Name => 'FileIndex', Format => 'int16u', }, ); # Leica type6 maker notes (ref PH) (S2) %Image::ExifTool::Panasonic::Leica6 = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' }, NOTES => q{ This information is written by the S2 and M (Typ 240), as a trailer in JPEG images. }, 0x300 => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Writable => 'undef', Notes => 'S2 and M (Typ 240)', DataTag => 'PreviewImage', RawConv => q{ return \$val if $val =~ /^Binary/; return \$val if $val =~ /^\xff\xd8\xff/; $$self{PreviewError} = 1 unless $val eq 'none'; return undef; }, ValueConvInv => '$val || "none"', WriteCheck => 'return $val=~/^(none|\xff\xd8\xff)/s ? undef : "Not a valid image"', ChangeBase => '$dirStart + $dataPos - 8', }, 0x301 => { Name => 'UnknownBlock', Notes => 'unknown 320kB block, not copied to JPEG images', Flags => [ 'Unknown', 'Binary', 'Drop' ], }, # 0x302 - same value as 4 unknown bytes at the end of JPEG or after the DNG TIFF header 0x303 => { Name => 'LensType', Writable => 'string', ValueConv => '$val=~s/ +$//; $val', # trim trailing spaces ValueConvInv => '$val', }, # 0x340 - same as 0x302 ); # Leica type9 maker notes (ref PH) (S) %Image::ExifTool::Panasonic::Leica9 = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 1 => 'Leica', 2 => 'Camera' }, NOTES => 'This information is written by the Leica S (Typ 007).', ); # Type 2 tags (ref PH) %Image::ExifTool::Panasonic::Type2 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, FIRST_ENTRY => 0, FORMAT => 'int16u', NOTES => q{ This type of maker notes is used by models such as the NV-DS65, PV-D2002, PV-DC3000, PV-DV203, PV-DV401, PV-DV702, PV-L2001, PV-SD4090, PV-SD5000 and iPalm. }, 0 => { Name => 'MakerNoteType', Format => 'string[4]', }, # seems to vary inversely with amount of light, so I'll call it 'Gain' - PH # (minimum is 16, maximum is 136. Value is 0 for pictures captured from video) 3 => 'Gain', ); # Face detection position information (ref PH) %Image::ExifTool::Panasonic::FaceDetInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, WRITABLE => 1, FORMAT => 'int16u', FIRST_ENTRY => 0, DATAMEMBER => [ 0 ], NOTES => 'Face detection position information.', 0 => { Name => 'NumFacePositions', Format => 'int16u', DataMember => 'NumFacePositions', RawConv => '$$self{NumFacePositions} = $val', Notes => q{ number of detected face positions stored in this record. May be less than FacesDetected }, }, 1 => { Name => 'Face1Position', Format => 'int16u[4]', RawConv => '$$self{NumFacePositions} < 1 ? undef : $val', Notes => q{ 4 numbers: X/Y coordinates of the face center and width/height of face. Coordinates are relative to an image twice the size of the thumbnail, or 320 pixels wide }, }, 5 => { Name => 'Face2Position', Format => 'int16u[4]', RawConv => '$$self{NumFacePositions} < 2 ? undef : $val', }, 9 => { Name => 'Face3Position', Format => 'int16u[4]', RawConv => '$$self{NumFacePositions} < 3 ? undef : $val', }, 13 => { Name => 'Face4Position', Format => 'int16u[4]', RawConv => '$$self{NumFacePositions} < 4 ? undef : $val', }, 17 => { Name => 'Face5Position', Format => 'int16u[4]', RawConv => '$$self{NumFacePositions} < 5 ? undef : $val', }, ); # Face recognition information from DMC-TZ7 (ref PH) %Image::ExifTool::Panasonic::FaceRecInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, WRITABLE => 1, FIRST_ENTRY => 0, DATAMEMBER => [ 0 ], NOTES => q{ Tags written by cameras with facial recognition. These cameras not only detect faces in an image, but also recognize specific people based a user-supplied set of known faces. }, 0 => { Name => 'FacesRecognized', Format => 'int16u', DataMember => 'FacesRecognized', RawConv => '$$self{FacesRecognized} = $val', }, 4 => { Name => 'RecognizedFace1Name', Format => 'string[20]', RawConv => '$$self{FacesRecognized} < 1 ? undef : $val', }, 24 => { Name => 'RecognizedFace1Position', Format => 'int16u[4]', RawConv => '$$self{FacesRecognized} < 1 ? undef : $val', Notes => 'coordinates in same format as face detection tags above', }, 32 => { Name => 'RecognizedFace1Age', Format => 'string[20]', RawConv => '$$self{FacesRecognized} < 1 ? undef : $val', }, 52 => { Name => 'RecognizedFace2Name', Format => 'string[20]', RawConv => '$$self{FacesRecognized} < 2 ? undef : $val', }, 72 => { Name => 'RecognizedFace2Position', Format => 'int16u[4]', RawConv => '$$self{FacesRecognized} < 2 ? undef : $val', }, 80 => { Name => 'RecognizedFace2Age', Format => 'string[20]', RawConv => '$$self{FacesRecognized} < 2 ? undef : $val', }, 100 => { Name => 'RecognizedFace3Name', Format => 'string[20]', RawConv => '$$self{FacesRecognized} < 3 ? undef : $val', }, 120 => { Name => 'RecognizedFace3Position', Format => 'int16u[4]', RawConv => '$$self{FacesRecognized} < 3 ? undef : $val', }, 128 => { Name => 'RecognizedFace3Age', Format => 'string[20]', RawConv => '$$self{FacesRecognized} < 3 ? undef : $val', }, ); # PANA atom found in user data of MP4 videos (ref PH) %Image::ExifTool::Panasonic::PANA = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, NOTES => q{ Tags extracted from the PANA and LEIC user data found in MP4 videos from various Panasonic and Leica models. }, 0x00 => { Name => 'Make', Condition => '$$valPt =~ /^(LEICA|Panasonic)/', # (only seen "LEICA") Groups => { 2 => 'Camera' }, Format => 'string[22]', RawConv => '$$self{LeicaLEIC} = 1;$$self{Make} = $val', }, 0x04 => { Name => 'Model', Condition => '$$valPt =~ /^[^\0]{6}/ and not $$self{LeicaLEIC}', Description => 'Camera Model Name', Groups => { 2 => 'Camera' }, Format => 'string[16]', RawConv => '$$self{Model} = $val', }, 0x0c => { # (FZ1000) Name => 'Model', Condition => '$$valPt =~ /^[^\0]{6}/ and not $$self{LeicaLEIC} and not $$self{Model}', Description => 'Camera Model Name', Groups => { 2 => 'Camera' }, Format => 'string[16]', RawConv => '$$self{Model} = $val', }, 0x16 => { Name => 'Model', Condition => '$$self{LeicaLEIC}', Description => 'Camera Model Name', Groups => { 2 => 'Camera' }, Format => 'string[30]', RawConv => '$$self{Model} = $val', }, 0x40 => { Name => 'ThumbnailTest', Format => 'undef[0x600]', Hidden => 1, RawConv => q{ if (substr($val,0x1c,3) eq "\xff\xd8\xff") { # offset 0x5c $$self{ThumbType} = 1; } elsif (substr($val,0x506,3) eq "\xff\xd8\xff") { # offset 0x546 $$self{ThumbType} = 2; } elsif (substr($val,0x51e,3) eq "\xff\xd8\xff") { # offset 0x55e (Leica T) $$self{ThumbType} = 3; } else { $$self{ThumbType} = 0; } return undef; }, }, 0x34 => { Name => 'Version1', Condition => '$$self{LeicaLEIC}', Format => 'string[14]', }, 0x3e => { Name => 'Version2', Condition => '$$self{LeicaLEIC}', Format => 'string[14]', }, 0x50 => { Name => 'MakerNoteLeica5', Condition => '$$self{LeicaLEIC}', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::Leica5', ProcessProc => \&ProcessLeicaLEIC, }, }, 0x58 => { Name => 'ThumbnailWidth', Condition => '$$self{ThumbType} == 1', Notes => 'Panasonic models', Format => 'int16u', }, 0x5a => { Name => 'ThumbnailHeight', Condition => '$$self{ThumbType} == 1', Format => 'int16u', }, 0x5c => { Name => 'ThumbnailImage', Condition => '$$self{ThumbType} == 1', Groups => { 2 => 'Preview' }, Format => 'undef[16384]', ValueConv => '$val=~s/\0*$//; \$val', # remove trailing zeros }, # 0x5c - there is some messed-up EXIF-IFD-looking data starting here in # Leica X VARIO MP4 videos, but it doesn't quite make sense 0x536 => { # (Leica X VARIO) Name => 'ThumbnailWidth', Condition => '$$self{ThumbType} == 2', Notes => 'Leica X Vario', Format => 'int32uRev', # (little-endian) }, 0x53a => { # (Leica X VARIO) Name => 'ThumbnailHeight', Condition => '$$self{ThumbType} == 2', Format => 'int32uRev', # (little-endian) }, 0x53e => { # (Leica X VARIO) Name => 'ThumbnailLength', Condition => '$$self{ThumbType} == 2', Format => 'int32uRev', # (little-endian) }, 0x546 => { # (Leica X VARIO) Name => 'ThumbnailImage', Condition => '$$self{ThumbType} == 2', Groups => { 2 => 'Preview' }, Format => 'undef[$val{0x53e}]', Binary => 1, }, 0x54e => { # (Leica T) Name => 'ThumbnailWidth', Condition => '$$self{ThumbType} == 3', Notes => 'Leica X Vario', Format => 'int32uRev', # (little-endian) }, 0x552 => { # (Leica T) Name => 'ThumbnailHeight', Condition => '$$self{ThumbType} == 3', Format => 'int32uRev', # (little-endian) }, 0x556 => { # (Leica T) Name => 'ThumbnailLength', Condition => '$$self{ThumbType} == 3', Format => 'int32uRev', # (little-endian) }, 0x55e => { # (Leica T) Name => 'ThumbnailImage', Condition => '$$self{ThumbType} == 3', Groups => { 2 => 'Preview' }, Format => 'undef[$val{0x556}]', Binary => 1, }, 0x4068 => { Name => 'ExifData', Condition => '$$valPt =~ /^\xff\xd8\xff\xe1..Exif\0\0/s', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', ProcessProc => \&Image::ExifTool::ProcessTIFF, Start => 12, }, }, 0x4080 => { # (FZ1000) Name => 'ExifData', Condition => '$$valPt =~ /^\xff\xd8\xff\xe1..Exif\0\0/s', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', ProcessProc => \&Image::ExifTool::ProcessTIFF, Start => 12, }, }, ); # Panasonic Composite tags %Image::ExifTool::Panasonic::Composite = ( GROUPS => { 2 => 'Camera' }, AdvancedSceneMode => { SeparateTable => 'Panasonic AdvancedSceneMode', # print values in a separate table Require => { 0 => 'Model', 1 => 'SceneMode', 2 => 'AdvancedSceneType', }, ValueConv => '"$val[0] $val[1] $val[2]"', PrintConv => { #PH OTHER => sub { my ($val,$flag,$conv) = @_; $val =~ s/.* (\d+ \d+)/$1/; # drop model name return $$conv{$val} if $$conv{$val}; my @v = split ' ', $val; my $prt = $shootingMode{$v[0]}; # AdvancedSceneType=1 for non-automatic modes P,A,S,SCN (ref 19) # AdvancedSceneType=5 for automatic mode iA (ref 19) if ($prt) { return $prt if $v[1] == 1; return "$prt (intelligent auto)" if $v[1] == 5; return "$prt ($v[1])"; } return "Unknown ($val)"; }, Notes => 'A Composite tag derived from Model, SceneMode and AdvancedSceneType.', '0 1' => 'Off', # '0 7' - seen this for V-LUX movies (PH) # '0 8' - seen for D-LUX(Typ104) movies (PH) '2 2' => 'Outdoor Portrait', #(FZ28) '2 3' => 'Indoor Portrait', #(FZ28) '2 4' => 'Creative Portrait', #(FZ28) '3 2' => 'Nature', #(FZ28) '3 3' => 'Architecture', #(FZ28) '3 4' => 'Creative Scenery', #(FZ28) #'3 5' - ? (FT1) '4 2' => 'Outdoor Sports', #(FZ28) '4 3' => 'Indoor Sports', #(FZ28) '4 4' => 'Creative Sports', #(FZ28) '9 2' => 'Flower', #(FZ28) '9 3' => 'Objects', #(FZ28) '9 4' => 'Creative Macro', #(FZ28) #'9 5' - ? (GF3) '21 2' => 'Illuminations', #(FZ28) '21 4' => 'Creative Night Scenery', #(FZ28) #'21 5' - ? (LX3) #'37 5' - ? (various) '45 2' => 'Cinema', #(GF2) '45 7' => 'Expressive', #(GF1,GF2) '45 8' => 'Retro', #(GF1,GF2) '45 9' => 'Pure', #(GF1,GF2) '45 10' => 'Elegant', #(GF1,GF2) '45 12' => 'Monochrome', #(GF1,GF2) '45 13' => 'Dynamic Art', #(GF1,GF2) '45 14' => 'Silhouette', #(GF1,GF2) '51 2' => 'HDR Art', #12 '51 3' => 'HDR B&W', #12 '59 1' => 'Expressive', #(GF5) '59 2' => 'Retro', #(GF5) '59 3' => 'High Key', #(GF5) '59 4' => 'Sepia', #(GF3,GF5) '59 5' => 'High Dynamic', #(GF3,GF5) '59 6' => 'Miniature', #(GF3) '59 9' => 'Low Key', #(GF5) '59 10' => 'Toy Effect', #(GF5) '59 11' => 'Dynamic Monochrome', #(GF5) '59 12' => 'Soft', #(GF5) '66 1' => 'Impressive Art', #19 '66 2' => 'Cross Process', #(GF5) '66 3' => 'Color Select', #(GF5) (called "One Point Color" by some other models - PH) '66 4' => 'Star', #(GF5) '90 3' => 'Old Days', #18 '90 4' => 'Sunshine', #18 '90 5' => 'Bleach Bypass', #18 '90 6' => 'Toy Pop', #18 '90 7' => 'Fantasy', #18 '90 8' => 'Monochrome', #PH (GX7) '90 9' => 'Rough Monochrome', #PH (GX7) '90 10' => 'Silky Monochrome', #PH (GX7) '92 1' => 'Handheld Night Shot', #Horst Wandres (FZ1000) # TZ40 Creative Control modes (ref 19) 'DMC-TZ40 90 1' => 'Expressive', 'DMC-TZ40 90 2' => 'Retro', 'DMC-TZ40 90 3' => 'High Key', 'DMC-TZ40 90 4' => 'Sepia', 'DMC-TZ40 90 5' => 'High Dynamic', 'DMC-TZ40 90 6' => 'Miniature', 'DMC-TZ40 90 9' => 'Low Key', 'DMC-TZ40 90 10' => 'Toy Effect', 'DMC-TZ40 90 11' => 'Dynamic Monochrome', 'DMC-TZ40 90 12' => 'Soft', }, }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::Panasonic'); #------------------------------------------------------------------------------ # Inverse conversion for Leica M9 lens codes # Inputs: 0) value # Returns: Converted value, or undef on error sub LensTypeConvInv($) { my $val = shift; if ($val =~ /^(\d+) (\d+)$/) { return ($1 << 2) + ($2 & 0x03); } elsif ($val =~ /^\d+$/) { my $bits = $frameSelectorBits{$val}; return undef unless defined $bits; return ($val << 2) | $bits; } else { return undef; } } #------------------------------------------------------------------------------ # Convert Leica Kelvin white balance # Inputs: 0) value, 1) flag to perform inverse conversion # Returns: Converted value, or undef on error sub WhiteBalanceConv($;$$) { my ($val, $inv) = @_; if ($inv) { return $1 + 0x8000 if $val =~ /(\d+)/; } else { return ($val - 0x8000) . ' Kelvin' if $val > 0x8000; } return undef; } #------------------------------------------------------------------------------ # Process Leica makernotes in LEIC atom of MP4 videos (Leica T and X Vario) # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessLeicaLEIC($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || (length($$dataPt) - $dirStart); return 0 if $dirLen < 6; SetByteOrder('II'); my $numEntries = Get16u($dataPt, $dirStart); return 0 if $numEntries < 1 or $numEntries > 255; my $size = Get32u($dataPt, $dirStart + 2); return 0 if $size < $numEntries * 12 or $size + 6 > $dirLen; # the Leica programmers want to make things difficult, so they store # the entry count before the directory size, making it impossible to # process as a standard TIFF IFD without a bit of reorganization... Set16u($numEntries, $dataPt, $dirStart + 4); my %dirInfo = %$dirInfo; $dirInfo{DirStart} = $dirStart + 4; $dirInfo{DirLen} = $size - 4; $dirInfo{DataPos} -= $dirStart; $dirInfo{Base} += $dirStart; return Image::ExifTool::Exif::ProcessExif($et, \%dirInfo, $tagTablePtr); return 1; } #------------------------------------------------------------------------------ # Process MakerNote trailer written by Leica S2 # Inputs: 0) ExifTool object ref, 1) new absolute position of Leica trailer when writing # Returns: On success: 1 when reading, directory data when writing; othewise undef # Notes: # - may be called twice for a file if the first call doesn't succeed # - must leave RAF position unchanged # - uses information from LeicaTrailer member: # TagInfo = tag info ref for MakerNote SubDirectory # Offset/Size = value offset/size from MakerNote IFD # TrailStart/TrailLen = actual JPEG trailer position/size (2nd call only) # - deletes LeicaTrailer member and sets LeicaTrailerPos when successful sub ProcessLeicaTrailer($;$) { my ($et, $newPos) = @_; my $trail = $$et{LeicaTrailer}; my $raf = $$et{RAF}; my $trailPos = $$trail{TrailPos}; my $pos = $trailPos || $$trail{Offset}; my $len = $$trail{TrailLen} || $$trail{Size}; my ($buff, $result, %tagPtr); delete $$et{LeicaTrailer} if $trailPos; # done after this unless ($len > 0) { $et->Warn('Missing Leica MakerNote trailer', 1) if $trailPos; delete $$et{LeicaTrailer}; return undef; } my $oldPos = $raf->Tell(); my $ok = ($raf->Seek($pos, 0) and $raf->Read($buff, $len) == $len); $raf->Seek($oldPos, 0); unless ($ok) { $et->Warn('Error reading Leica MakerNote trailer', 1) if $trailPos; return undef; } # look for Leica MakerNote header (should be at start of # trailer, but allow up to 256 bytes of garbage just in case) if ($buff !~ /^(.{0,256})LEICA\0..../sg) { my $what = $trailPos ? 'trailer' : 'offset'; $et->Warn("Invalid Leica MakerNote $what", 1); return undef; } my $junk = $1; my $start = pos($buff) - 10; if ($start and not $trailPos) { $et->Warn('Invalid Leica MakerNote offset', 1); return undef; } # # all checks passed -- go ahead and process the trailer now # my $hdrLen = 8; my $dirStart = $start + $hdrLen; my $tagInfo = $$trail{TagInfo}; if ($$et{HTML_DUMP}) { my $name = $$tagInfo{Name}; $et->HDump($pos+$start, $len-$start, "$name value", 'Leica MakerNote trailer', 4); $et->HDump($pos+$start, $hdrLen, "MakerNotes header", $name); } elsif ($et->Options('Verbose')) { my $where = sprintf('at offset 0x%x', $pos); $et->VPrint(0, "Leica MakerNote trailer ($len bytes $where):\n"); } # delete LeicaTrailer member so we don't try to process it again delete $$et{LeicaTrailer}; $$et{LeicaTrailerPos} = $pos + $start; # return actual start position of Leica trailer my $oldOrder = GetByteOrder(); my $num = Get16u(\$buff, $dirStart); # get entry count ToggleByteOrder() if ($num>>8) > ($num&0xff); # set byte order # use specialized algorithm to automatically fix offsets my $valStart = $dirStart + 2 + 12 * $num + 4; my $fix = 0; if ($valStart < $len) { my $valBlock = Image::ExifTool::MakerNotes::GetValueBlocks(\$buff, $dirStart, \%tagPtr); # find the minimum offset (excluding the PreviewImage tag 0x300 and 0x301) my $minPtr; foreach (keys %tagPtr) { my $ptr = $tagPtr{$_}; next if $_ == 0x300 or $_ == 0x301 or not $ptr or $ptr == 0xffffffff; $minPtr = $ptr if not defined $minPtr or $minPtr > $ptr; } if ($minPtr) { my $diff = $minPtr - ($valStart + $pos); pos($buff) = $valStart; my $expect; if ($$et{Model} eq 'S2') { # scan value data for the first non-zero byte if ($buff =~ /[^\0]/g) { my $n = pos($buff) - 1 - $valStart; # number of zero bytes # S2 writes 282 bytes of zeros, exiftool writes none $expect = $n >= 282 ? 282 : 0; } } else { # M (Type 240) # scan for the lens type (M writes 114 bytes of garbage first) if ($buff =~ /\G.{114}([\x20-\x7f]*\0*)/sg and length($1) >= 50) { $expect = 114; } } my $fixBase = $et->Options('FixBase'); if (not defined $expect) { $et->Warn('Unrecognized Leica trailer structure'); } elsif ($diff != $expect or defined $fixBase) { $fix = $expect - $diff; if (defined $fixBase) { $fix = $fixBase if $fixBase ne ''; $et->Warn("Adjusted MakerNotes base by $fix",1); } else { $et->Warn("Possibly incorrect maker notes offsets (fixed by $fix)",1); } } } } # generate dirInfo for Leica MakerNote directory my %dirInfo = ( Name => $$tagInfo{Name}, Base => $fix, DataPt => \$buff, DataPos => $pos - $fix, DataLen => $len, DirStart => $dirStart, DirLen => $len - $dirStart, DirName => 'MakerNotes', Parent => 'ExifIFD', TagInfo => $tagInfo, ); my $tagTablePtr = GetTagTable($$tagInfo{SubDirectory}{TagTable}); if ($newPos) { # are we writing? if ($$et{Model} ne 'S2') { $et->Warn('Leica MakerNote trailer too messed up to edit. Copying as a block', 1); return $buff; } # set position of new MakerNote IFD (+ 8 for Leica MakerNote header) $dirInfo{NewDataPos} = $newPos + $start + 8; $result = $et->WriteDirectory(\%dirInfo, $tagTablePtr); # write preview image last if necessary and fix up the preview offsets my $previewInfo = $$et{PREVIEW_INFO}; delete $$et{PREVIEW_INFO}; if ($result) { if ($previewInfo) { my $fixup = $previewInfo->{Fixup}; # set preview offset (relative to start of makernotes, + 8 for makernote header) $fixup->SetMarkerPointers(\$result, 'PreviewImage', length($result) + 8); $result .= $$previewInfo{Data}; } return $junk . substr($buff, $start, $hdrLen) . $result; } } else { # extract information $result = $et->ProcessDirectory(\%dirInfo, $tagTablePtr); # also extract as a block if necessary if ($et->Options('MakerNotes') or $$et{REQ_TAG_LOOKUP}{lc($$tagInfo{Name})}) { # makernote header must be included in RebuildMakerNotes call $dirInfo{DirStart} -= 8; $dirInfo{DirLen} += 8; $$et{MAKER_NOTE_BYTE_ORDER} = GetByteOrder(); # rebuild maker notes (creates $$et{MAKER_NOTE_FIXUP}) my $val = Image::ExifTool::Exif::RebuildMakerNotes($et, $tagTablePtr, \%dirInfo); unless (defined $val) { $et->Warn('Error rebuilding maker notes (may be corrupt)') if $len > 4; $val = $buff, } my $key = $et->FoundTag($tagInfo, $val); $et->SetGroup($key, 'ExifIFD'); } } SetByteOrder($oldOrder); return $result; } 1; # end __END__ =head1 NAME Image::ExifTool::Panasonic - Panasonic/Leica maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Panasonic and Leica maker notes in EXIF information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.compton.nu/panasonic.html> =item L<http://johnst.org/sw/exiftags/> =item L<http://homepage3.nifty.com/kamisaka/makernote/makernote_pana.htm> =item L<http://bretteville.com/pdfs/M8Metadata_v2.pdf> =item L<http://www.digital-leica.com/lens_codes/index.html> =item (...plus lots of testing with store demos and my wife's DMC-FS7!) =back =head1 ACKNOWLEDGEMENTS Thanks to Tels, Marcel Coenen, Jens Duttke, Joerg, Michael Byczkowski, Carl Bretteville, Zdenek Mihula and Olaf Ulrich for their contributions. =head1 SEE ALSO L<Image::ExifTool::TagNames/Panasonic Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/PanasonicRaw.pm���������������������������������������������000644 �000765 �000024 �00000054550 12642461331 022642� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: PanasonicRaw.pm # # Description: Read/write Panasonic/Leica RAW/RW2/RWL meta information # # Revisions: 2009/03/24 - P. Harvey Created # 2009/05/12 - PH Added RWL file type (same format as RW2) # # References: 1) CPAN forum post by 'hardloaf' (http://www.cpanforum.com/threads/2183) # 2) http://www.cybercom.net/~dcoffin/dcraw/ # 3) http://syscall.eu/#pana # 4) Iliah Borg private communication (LibRaw) # JD) Jens Duttke private communication (TZ3,FZ30,FZ50) #------------------------------------------------------------------------------ package Image::ExifTool::PanasonicRaw; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.09'; sub ProcessJpgFromRaw($$$); sub WriteJpgFromRaw($$$); sub WriteDistortionInfo($$$); sub ProcessDistortionInfo($$$); my %jpgFromRawMap = ( IFD1 => 'IFD0', EXIF => 'IFD0', # to write EXIF as a block ExifIFD => 'IFD0', GPS => 'IFD0', SubIFD => 'IFD0', GlobParamIFD => 'IFD0', PrintIM => 'IFD0', InteropIFD => 'ExifIFD', MakerNotes => 'ExifIFD', IFD0 => 'APP1', MakerNotes => 'ExifIFD', Comment => 'COM', ); my %wbTypeInfo = ( PrintConv => \%Image::ExifTool::Exif::lightSource, SeparateTable => 'EXIF LightSource', ); # Tags found in Panasonic RAW/RW2/RWL images (ref PH) %Image::ExifTool::PanasonicRaw::Main = ( GROUPS => { 0 => 'EXIF', 1 => 'IFD0', 2 => 'Image'}, WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITE_GROUP => 'IFD0', # default write group NOTES => 'These tags are found in IFD0 of Panasonic/Leica RAW, RW2 and RWL images.', 0x01 => { Name => 'PanasonicRawVersion', Writable => 'undef', }, 0x02 => 'SensorWidth', #1/PH 0x03 => 'SensorHeight', #1/PH 0x04 => 'SensorTopBorder', #JD 0x05 => 'SensorLeftBorder', #JD 0x06 => 'SensorBottomBorder', #PH 0x07 => 'SensorRightBorder', #PH # observed values for unknown tags - PH # 0x08: 1 # 0x09: 1,3,4 # 0x0a: 12 0x08 => { #4 Name => 'BlackLevel1', Writable => 'int16u', Notes => q{ summing BlackLevel1+2+3 values gives the common bias that must be added to the BlackLevelRed/Green/Blue tags below }, }, 0x09 => { Name => 'BlackLevel2', Writable => 'int16u' }, #4 0x0a => { Name => 'BlackLevel3', Writable => 'int16u' }, #4 # 0x0b: 0x860c,0x880a,0x880c # 0x0c: 2 (only Leica Digilux 2) # 0x0d: 0,1 # 0x0e,0x0f,0x10: 4095 0x0e => { Name => 'LinearityLimitRed', Writable => 'int16u' }, #4 0x0f => { Name => 'LinearityLimitGreen', Writable => 'int16u' }, #4 0x10 => { Name => 'LinearityLimitBlue', Writable => 'int16u' }, #4 0x11 => { #JD Name => 'RedBalance', Writable => 'int16u', ValueConv => '$val / 256', ValueConvInv => 'int($val * 256 + 0.5)', Notes => 'found in Digilux 2 RAW images', }, 0x12 => { #JD Name => 'BlueBalance', Writable => 'int16u', ValueConv => '$val / 256', ValueConvInv => 'int($val * 256 + 0.5)', }, 0x13 => { #4 Name => 'WBInfo', SubDirectory => { TagTable => 'Image::ExifTool::PanasonicRaw::WBInfo' }, }, 0x17 => { #1 Name => 'ISO', Writable => 'int16u', }, # 0x18,0x19,0x1a: 0 0x18 => { #4 Name => 'HighISOMultiplierRed', Writable => 'int16u', ValueConv => '$val / 256', ValueConvInv => 'int($val * 256 + 0.5)', }, 0x19 => { #4 Name => 'HighISOMultiplierGreen', Writable => 'int16u', ValueConv => '$val / 256', ValueConvInv => 'int($val * 256 + 0.5)', }, 0x1a => { #4 Name => 'HighISOMultiplierBlue', Writable => 'int16u', ValueConv => '$val / 256', ValueConvInv => 'int($val * 256 + 0.5)', }, # 0x1b: [binary data] (something to do with the camera ISO cababilities: int16u count N, # followed by table of N entries: int16u ISO, int16u[3] RGB gains - ref 4) 0x1c => { Name => 'BlackLevelRed', Writable => 'int16u' }, #4 0x1d => { Name => 'BlackLevelGreen', Writable => 'int16u' }, #4 0x1e => { Name => 'BlackLevelBlue', Writable => 'int16u' }, #4 0x24 => { #2 Name => 'WBRedLevel', Writable => 'int16u', }, 0x25 => { #2 Name => 'WBGreenLevel', Writable => 'int16u', }, 0x26 => { #2 Name => 'WBBlueLevel', Writable => 'int16u', }, 0x27 => { #4 Name => 'WBInfo2', SubDirectory => { TagTable => 'Image::ExifTool::PanasonicRaw::WBInfo2' }, }, # 0x27,0x29,0x2a,0x2b,0x2c: [binary data] # 0x2d: 2,3 0x2e => { #JD Name => 'JpgFromRaw', # (writable directory!) Groups => { 2 => 'Preview' }, Writable => 'undef', # protect this tag because it contains all the metadata Flags => [ 'Binary', 'Protected', 'NestedHtmlDump', 'BlockExtract' ], Notes => 'processed as an embedded document because it contains full EXIF', WriteCheck => '$val eq "none" ? undef : $self->CheckImage(\$val)', DataTag => 'JpgFromRaw', RawConv => '$self->ValidateImage(\$val,$tag)', SubDirectory => { # extract information from embedded image since it is metadata-rich, # unless HtmlDump option set (note that the offsets will be relative, # not absolute like they should be in verbose mode) TagTable => 'Image::ExifTool::JPEG::Main', WriteProc => \&WriteJpgFromRaw, ProcessProc => \&ProcessJpgFromRaw, }, }, 0x2f => { Name => 'CropTop', Writable => 'int16u' }, 0x30 => { Name => 'CropLeft', Writable => 'int16u' }, 0x31 => { Name => 'CropBottom', Writable => 'int16u' }, 0x32 => { Name => 'CropRight', Writable => 'int16u' }, 0x10f => { Name => 'Make', Groups => { 2 => 'Camera' }, Writable => 'string', DataMember => 'Make', # save this value as an ExifTool member variable RawConv => '$self->{Make} = $val', }, 0x110 => { Name => 'Model', Description => 'Camera Model Name', Groups => { 2 => 'Camera' }, Writable => 'string', DataMember => 'Model', # save this value as an ExifTool member variable RawConv => '$self->{Model} = $val', }, 0x111 => { Name => 'StripOffsets', # (this value is 0xffffffff for some models, and RawDataOffset must be used) Flags => [ 'IsOffset', 'PanasonicHack' ], OffsetPair => 0x117, # point to associated byte counts ValueConv => 'length($val) > 32 ? \$val : $val', }, 0x112 => { Name => 'Orientation', Writable => 'int16u', PrintConv => \%Image::ExifTool::Exif::orientation, Priority => 0, # so IFD1 doesn't take precedence }, 0x116 => { Name => 'RowsPerStrip', Priority => 0, }, 0x117 => { Name => 'StripByteCounts', # (note that this value may represent something like uncompressed byte count # for RAW/RW2/RWL images from some models, and is zero for some other models) OffsetPair => 0x111, # point to associated offset ValueConv => 'length($val) > 32 ? \$val : $val', }, 0x118 => { Name => 'RawDataOffset', #PH (RW2/RWL) IsOffset => '$$et{TIFF_TYPE} =~ /^(RW2|RWL)$/', # (invalid in DNG-converted files) PanasonicHack => 1, OffsetPair => 0x117, # (use StripByteCounts as the offset pair) }, 0x119 => { Name => 'DistortionInfo', SubDirectory => { TagTable => 'Image::ExifTool::PanasonicRaw::DistortionInfo' }, }, # 0x11b - chromatic aberration correction (ref 3) 0x2bc => { # PH Extension!! Name => 'ApplicationNotes', # (writable directory!) Writable => 'int8u', Format => 'undef', Flags => [ 'Binary', 'Protected' ], SubDirectory => { DirName => 'XMP', TagTable => 'Image::ExifTool::XMP::Main', }, }, 0x83bb => { # PH Extension!! Name => 'IPTC-NAA', # (writable directory!) Format => 'undef', # convert binary values as undef Writable => 'int32u', # but write int32u format code in IFD WriteGroup => 'IFD0', Flags => [ 'Binary', 'Protected' ], SubDirectory => { DirName => 'IPTC', TagTable => 'Image::ExifTool::IPTC::Main', }, }, 0x8769 => { Name => 'ExifOffset', Groups => { 1 => 'ExifIFD' }, Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', DirName => 'ExifIFD', Start => '$val', }, }, 0x8825 => { Name => 'GPSInfo', Groups => { 1 => 'GPS' }, Flags => 'SubIFD', SubDirectory => { DirName => 'GPS', TagTable => 'Image::ExifTool::GPS::Main', Start => '$val', }, }, # 0xffff => 'DCSHueShiftValues', #exifprobe (NC) ); # white balance information (ref 4) # (PanasonicRawVersion<200: Digilux 2) %Image::ExifTool::PanasonicRaw::WBInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int16u', FIRST_ENTRY => 0, 0 => 'NumWBEntries', 1 => { Name => 'WBType1', %wbTypeInfo }, 2 => { Name => 'WB_RBLevels1', Format => 'int16u[2]' }, 4 => { Name => 'WBType2', %wbTypeInfo }, 5 => { Name => 'WB_RBLevels2', Format => 'int16u[2]' }, 7 => { Name => 'WBType3', %wbTypeInfo }, 8 => { Name => 'WB_RBLevels3', Format => 'int16u[2]' }, 10 => { Name => 'WBType4', %wbTypeInfo }, 11 => { Name => 'WB_RBLevels4', Format => 'int16u[2]' }, 13 => { Name => 'WBType5', %wbTypeInfo }, 14 => { Name => 'WB_RBLevels5', Format => 'int16u[2]' }, 16 => { Name => 'WBType6', %wbTypeInfo }, 17 => { Name => 'WB_RBLevels6', Format => 'int16u[2]' }, 19 => { Name => 'WBType7', %wbTypeInfo }, 20 => { Name => 'WB_RBLevels7', Format => 'int16u[2]' }, ); # white balance information (ref 4) # (PanasonicRawVersion>=200: D-Lux2, D-Lux3, DMC-FZ18/FZ30/LX1/L10) %Image::ExifTool::PanasonicRaw::WBInfo2 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int16u', FIRST_ENTRY => 0, 0 => 'NumWBEntries', 1 => { Name => 'WBType1', %wbTypeInfo }, 2 => { Name => 'WB_RGBLevels1', Format => 'int16u[3]' }, 5 => { Name => 'WBType2', %wbTypeInfo }, 6 => { Name => 'WB_RGBLevels2', Format => 'int16u[3]' }, 9 => { Name => 'WBType3', %wbTypeInfo }, 10 => { Name => 'WB_RGBLevels3', Format => 'int16u[3]' }, 13 => { Name => 'WBType4', %wbTypeInfo }, 14 => { Name => 'WB_RGBLevels4', Format => 'int16u[3]' }, 17 => { Name => 'WBType5', %wbTypeInfo }, 18 => { Name => 'WB_RGBLevels5', Format => 'int16u[3]' }, 21 => { Name => 'WBType6', %wbTypeInfo }, 22 => { Name => 'WB_RGBLevels6', Format => 'int16u[3]' }, 25 => { Name => 'WBType7', %wbTypeInfo }, 26 => { Name => 'WB_RGBLevels7', Format => 'int16u[3]' }, ); # lens distortion information (ref 3) # (distortion correction equation: Ru = scale*(Rd + a*Rd^3 + b*Rd^5 + c*Rd^7), ref 3) %Image::ExifTool::PanasonicRaw::DistortionInfo = ( PROCESS_PROC => \&ProcessDistortionInfo, WRITE_PROC => \&WriteDistortionInfo, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, # (don't make this family 0 MakerNotes because we don't want it to be a deletable group) GROUPS => { 0 => 'PanasonicRaw', 1 => 'PanasonicRaw', 2 => 'Image'}, WRITABLE => 1, FORMAT => 'int16s', FIRST_ENTRY => 0, NOTES => 'Lens distortion correction information.', # 0,1 - checksums 2 => { Name => 'DistortionParam02', ValueConv => '$val / 32768', ValueConvInv => '$val * 32768', }, # 3 - usually 0, but seen 0x026b when value 5 is non-zero 4 => { Name => 'DistortionParam04', ValueConv => '$val / 32768', ValueConvInv => '$val * 32768', }, 5 => { Name => 'DistortionScale', ValueConv => '1 / (1 + $val/32768)', ValueConvInv => '(1/$val - 1) * 32768', }, # 6 - seen 0x0000-0x027f 7.1 => { Name => 'DistortionCorrection', Mask => 0x0f, # (have seen the upper 4 bits set for GF5 and GX1, giving a value of -4095 - PH) PrintConv => { 0 => 'Off', 1 => 'On' }, }, 8 => { Name => 'DistortionParam08', ValueConv => '$val / 32768', ValueConvInv => '$val * 32768', }, 9 => { Name => 'DistortionParam09', ValueConv => '$val / 32768', ValueConvInv => '$val * 32768', }, # 10 - seen 0xfc,0x0101,0x01f4,0x021d,0x0256 11 => { Name => 'DistortionParam11', ValueConv => '$val / 32768', ValueConvInv => '$val * 32768', }, 12 => { Name => 'DistortionN', Unknown => 1, }, # 13 - seen 0x0000,0x01f9-0x02b2 # 14,15 - checksums ); # PanasonicRaw composite tags %Image::ExifTool::PanasonicRaw::Composite = ( ImageWidth => { Require => { 0 => 'IFD0:SensorLeftBorder', 1 => 'IFD0:SensorRightBorder', }, ValueConv => '$val[1] - $val[0]', }, ImageHeight => { Require => { 0 => 'IFD0:SensorTopBorder', 1 => 'IFD0:SensorBottomBorder', }, ValueConv => '$val[1] - $val[0]', }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::PanasonicRaw'); #------------------------------------------------------------------------------ # checksum algorithm for lens distortion correction information (ref 3) # Inputs: 0) data ref, 1) start position, 2) number of bytes, 3) incement # Returns: checksum value sub Checksum($$$$) { my ($dataPt, $start, $num, $inc) = @_; my $csum = 0; my $i; for ($i=0; $i<$num; ++$i) { $csum = (73 * $csum + Get8u($dataPt, $start + $i * $inc)) % 0xffef; } return $csum; } #------------------------------------------------------------------------------ # Read lens distortion information # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessDistortionInfo($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $start = $$dirInfo{DirStart} || 0; my $size = $$dirInfo{DataLen} || (length($$dataPt) - $start); if ($size == 32) { # verify the checksums (ref 3) my $csum1 = Checksum($dataPt, $start + 4, 12, 1); my $csum2 = Checksum($dataPt, $start + 16, 12, 1); my $csum3 = Checksum($dataPt, $start + 2, 14, 2); my $csum4 = Checksum($dataPt, $start + 3, 14, 2); my $res = $csum1 ^ Get16u($dataPt, $start + 2) ^ $csum2 ^ Get16u($dataPt, $start + 28) ^ $csum3 ^ Get16u($dataPt, $start + 0) ^ $csum4 ^ Get16u($dataPt, $start + 30); $et->Warn('Invalid DistortionInfo checksum',1) if $res; } else { $et->Warn('Invalid DistortionInfo',1); } return $et->ProcessBinaryData($dirInfo, $tagTablePtr); } #------------------------------------------------------------------------------ # Write lens distortion information # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref # Returns: updated distortion information or undef on error sub WriteDistortionInfo($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # (allow dummy access) my $dat = $et->WriteBinaryData($dirInfo, $tagTablePtr); if (defined $dat and length($dat) == 32) { # fix checksums (ref 3) Set16u(Checksum(\$dat, 4, 12, 1), \$dat, 2); Set16u(Checksum(\$dat, 16, 12, 1), \$dat, 28); Set16u(Checksum(\$dat, 2, 14, 2), \$dat, 0); Set16u(Checksum(\$dat, 3, 14, 2), \$dat, 30); } else { $et->Warn('Error wriing DistortionInfo',1); } return $dat; } #------------------------------------------------------------------------------ # Patch for writing non-standard Panasonic RAW/RW2/RWL raw data # Inputs: 0) offset info ref, 1) raf ref, 2) IFD number # Returns: error string, or undef on success # OffsetInfo is a hash by tag ID of lists with the following elements: # 0 - tag info ref # 1 - pointer to int32u offset in IFD or value data # 2 - value count # 3 - reference to list of original offset values # 4 - IFD format number sub PatchRawDataOffset($$$) { my ($offsetInfo, $raf, $ifd) = @_; my $stripOffsets = $$offsetInfo{0x111}; my $stripByteCounts = $$offsetInfo{0x117}; my $rawDataOffset = $$offsetInfo{0x118}; my $err; $err = 1 unless $ifd == 0; $err = 1 unless $stripOffsets and $stripByteCounts and $$stripOffsets[2] == 1; if ($rawDataOffset) { $err = 1 unless $$rawDataOffset[2] == 1; $err = 1 unless $$stripOffsets[3][0] == 0xffffffff or $$stripByteCounts[3][0] == 0; } $err and return 'Unsupported Panasonic/Leica RAW variant'; if ($rawDataOffset) { # update StripOffsets along with this tag if it contains a reasonable value unless ($$stripOffsets[3][0] == 0xffffffff) { # save pointer to StripOffsets value for updating later push @$rawDataOffset, $$stripOffsets[1]; } # handle via RawDataOffset instead of StripOffsets $stripOffsets = $$offsetInfo{0x111} = $rawDataOffset; delete $$offsetInfo{0x118}; } # determine the length of the raw data my $pos = $raf->Tell(); $raf->Seek(0, 2) or $err = 1; # seek to end of file my $len = $raf->Tell() - $$stripOffsets[3][0]; $raf->Seek($pos, 0); # quick check to be sure the raw data length isn't unreasonable # (the 22-byte length is for '<Dummy raw image data>' in our tests) $err = 1 if ($len < 1000 and $len != 22) or $len & 0x80000000; $err and return 'Error reading Panasonic raw data'; # update StripByteCounts info with raw data length # (note that the original value is maintained in the file) $$stripByteCounts[3][0] = $len; return undef; } #------------------------------------------------------------------------------ # Write meta information to Panasonic JpgFromRaw in RAW/RW2/RWL image # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: updated image data, or undef if nothing changed sub WriteJpgFromRaw($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $byteOrder = GetByteOrder(); my $fileType = $$et{FILE_TYPE}; # RAW, RW2 or RWL my $dirStart = $$dirInfo{DirStart}; if ($dirStart) { # DirStart is non-zero in DNG-converted RW2/RWL my $dirLen = $$dirInfo{DirLen} | length($$dataPt) - $dirStart; my $buff = substr($$dataPt, $dirStart, $dirLen); $dataPt = \$buff; } my $raf = new File::RandomAccess($dataPt); my $outbuff; my %dirInfo = ( RAF => $raf, OutFile => \$outbuff, ); $$et{BASE} = $$dirInfo{DataPos}; $$et{FILE_TYPE} = $$et{TIFF_TYPE} = 'JPEG'; # use a specialized map so we don't write XMP or IPTC (or other junk) into the JPEG my $editDirs = $$et{EDIT_DIRS}; my $addDirs = $$et{ADD_DIRS}; $et->InitWriteDirs(\%jpgFromRawMap); # don't add XMP segment (IPTC won't get added because it is in Photoshop record) delete $$et{ADD_DIRS}{XMP}; my $result = $et->WriteJPEG(\%dirInfo); # restore variables we changed $$et{BASE} = 0; $$et{FILE_TYPE} = 'TIFF'; $$et{TIFF_TYPE} = $fileType; $$et{EDIT_DIRS} = $editDirs; $$et{ADD_DIRS} = $addDirs; SetByteOrder($byteOrder); return $result > 0 ? $outbuff : $$dataPt; } #------------------------------------------------------------------------------ # Extract meta information from an Panasonic JpgFromRaw # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid JpgFromRaw image sub ProcessJpgFromRaw($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $byteOrder = GetByteOrder(); my $fileType = $$et{FILE_TYPE}; # RAW, RW2 or RWL my $tagInfo = $$dirInfo{TagInfo}; my $verbose = $et->Options('Verbose'); my ($indent, $out); $tagInfo or $et->Warn('No tag info for Panasonic JpgFromRaw'), return 0; my $dirStart = $$dirInfo{DirStart}; if ($dirStart) { # DirStart is non-zero in DNG-converted RW2/RWL my $dirLen = $$dirInfo{DirLen} | length($$dataPt) - $dirStart; my $buff = substr($$dataPt, $dirStart, $dirLen); $dataPt = \$buff; } $$et{BASE} = $$dirInfo{DataPos} + ($dirStart || 0); $$et{FILE_TYPE} = $$et{TIFF_TYPE} = 'JPEG'; $$et{DOC_NUM} = 1; # extract information from embedded JPEG my %dirInfo = ( Parent => 'RAF', RAF => new File::RandomAccess($dataPt), ); if ($verbose) { my $indent = $$et{INDENT}; $$et{INDENT} = ' '; $out = $et->Options('TextOut'); print $out '--- DOC1:JpgFromRaw ',('-'x56),"\n"; } my $rtnVal = $et->ProcessJPEG(\%dirInfo); # restore necessary variables for continued RW2/RWL processing $$et{BASE} = 0; $$et{FILE_TYPE} = 'TIFF'; $$et{TIFF_TYPE} = $fileType; delete $$et{DOC_NUM}; SetByteOrder($byteOrder); if ($verbose) { $$et{INDENT} = $indent; print $out ('-'x76),"\n"; } return $rtnVal; } 1; # end __END__ =head1 NAME Image::ExifTool::PanasonicRaw - Read/write Panasonic/Leica RAW/RW2/RWL meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read and write meta information in Panasonic/Leica RAW, RW2 and RWL images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.cybercom.net/~dcoffin/dcraw/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/PanasonicRaw Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/PDF.pm������������������������������������������������������000644 �000765 �000024 �00000256154 12650445030 020667� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: PDF.pm # # Description: Read PDF meta information # # Revisions: 07/11/2005 - P. Harvey Created # 07/25/2005 - P. Harvey Add support for encrypted documents # # References: 1) http://www.adobe.com/devnet/pdf/pdf_reference.html # 2) http://search.cpan.org/dist/Crypt-RC4/ # 3) http://www.adobe.com/devnet/acrobat/pdfs/PDF32000_2008.pdf # 4) http://www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/adobe_supplement_iso32000.pdf # 5) http://tools.ietf.org/search/rfc3454 # 6) http://www.armware.dk/RFC/rfc/rfc4013.html #------------------------------------------------------------------------------ package Image::ExifTool::PDF; use strict; use vars qw($VERSION $AUTOLOAD $lastFetched); use Image::ExifTool qw(:DataAccess :Utils); require Exporter; $VERSION = '1.40'; sub FetchObject($$$$); sub ExtractObject($$;$$); sub ReadToNested($;$); sub ProcessDict($$$$;$$); sub ProcessAcroForm($$$$;$$); sub ReadPDFValue($); sub CheckPDF($$$); # $lastFetched - last fetched object reference (used for decryption) # (undefined if fetched object was already decrypted, eg. object from stream) my $cryptInfo; # encryption object reference (plus additional information) my $cryptString; # flag that strings are encrypted my $cryptStream; # flag that streams are encrypted my $lastOffset; # last fetched object offset my %streamObjs; # hash of stream objects my %fetched; # dicts fetched in verbose mode (to avoid cyclical recursion) my $pdfVer; # version of PDF file being processed # filters supported in DecodeStream() my %supportedFilter = ( '/FlateDecode' => 1, '/Crypt' => 1, '/Identity' => 1, # (not filtered) '/DCTDecode' => 1, # (JPEG image - not filtered) '/JPXDecode' => 1, # (Jpeg2000 image - not filtered) '/LZWDecode' => 1, # (usually a bitmapped image) '/ASCIIHexDecode' => 1, # other standard filters that we currently don't support #'/JBIG2Decode' => 0, # (JBIG2 image format not supported) #'/CCITTFaxDecode' => 0, #'/RunLengthDecode' => 0, #'/ASCII85Decode' => 0, ); # tags in main PDF directories %Image::ExifTool::PDF::Main = ( GROUPS => { 2 => 'Document' }, VARS => { CAPTURE => ['Main','Prev'] }, Info => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::Info' }, # Adobe Acrobat 10.1.5 will create a duplicate Info dictionary with # a different object number when metadata is edited. This flag # is part of a patch to ignore this duplicate information (unless # the IgnoreMinorErrors option is used) IgnoreDuplicates => 1, }, Root => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::Root' }, }, Encrypt => { NoProcess => 1, # don't process normally (processed in advance) SubDirectory => { TagTable => 'Image::ExifTool::PDF::Encrypt' }, }, _linearized => { Name => 'Linearized', Notes => 'flag set if document is linearized for fast web display; not a real Tag ID', PrintConv => { 'true' => 'Yes', 'false' => 'No' }, }, ); # tags in PDF Info dictionary %Image::ExifTool::PDF::Info = ( GROUPS => { 2 => 'Document' }, VARS => { CAPTURE => ['Info'] }, EXTRACT_UNKNOWN => 1, # extract all unknown tags in this directory WRITE_PROC => \&Image::ExifTool::DummyWriteProc, CHECK_PROC => \&CheckPDF, WRITABLE => 'string', # set PRIORITY to 0 so most recent Info dictionary takes precedence # (Acrobat Pro bug? doesn't use same object/generation number for # new Info dictionary when doing incrmental update) PRIORITY => 0, NOTES => q{ As well as the tags listed below, the PDF specification allows for user-defined tags to exist in the Info dictionary. These tags, which should have corresponding XMP-pdfx entries in the XMP of the PDF XML Metadata object, are also extracted by ExifTool. B<Writable> specifies the value format, and may be C<string>, C<date>, C<integer>, C<real>, C<boolean> or C<name> for PDF tags. }, Title => { }, Author => { Groups => { 2 => 'Author' } }, Subject => { }, Keywords => { List => 'string' }, # this is a string list Creator => { }, Producer => { }, CreationDate => { Name => 'CreateDate', Writable => 'date', Groups => { 2 => 'Time' }, Shift => 'Time', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', }, ModDate => { Name => 'ModifyDate', Writable => 'date', Groups => { 2 => 'Time' }, Shift => 'Time', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', }, Trapped => { Protected => 1, # remove leading '/' from '/True' or '/False' ValueConv => '$val=~s{^/}{}; $val', ValueConvInv => '"/$val"', }, 'AAPL:Keywords' => { #PH Name => 'AppleKeywords', List => 'array', # this is an array of values Notes => q{ keywords written by Apple utilities, although they seem to use PDF:Keywords when reading }, }, ); # tags in the PDF Root document catalog %Image::ExifTool::PDF::Root = ( GROUPS => { 2 => 'Document' }, # note: can't capture previous versions of Root since they are not parsed VARS => { CAPTURE => ['Root'] }, NOTES => 'This is the PDF document catalog.', MarkInfo => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::MarkInfo' }, }, Metadata => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::Metadata' }, }, Pages => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::Pages' }, }, Perms => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::Perms' }, }, AcroForm => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::AcroForm' }, }, Lang => 'Language', PageLayout => { }, PageMode => { }, Version => 'PDFVersion', ); # tags extracted from the PDF Encrypt dictionary %Image::ExifTool::PDF::Encrypt = ( GROUPS => { 2 => 'Document' }, NOTES => 'Tags extracted from the document Encrypt dictionary.', Filter => { Name => 'Encryption', Notes => q{ extracted value is actually a combination of the Filter, SubFilter, V, R and Length information from the Encrypt dictionary }, }, P => { Name => 'UserAccess', ValueConv => '$val & 0x0f3c', # ignore reserved bits PrintConvColumns => 2, PrintConv => { BITMASK => { 2 => 'Print', 3 => 'Modify', 4 => 'Copy', 5 => 'Annotate', 8 => 'Fill forms', 9 => 'Extract', 10 => 'Assemble', 11 => 'Print high-res', }}, }, ); # tags in PDF Pages dictionary %Image::ExifTool::PDF::Pages = ( GROUPS => { 2 => 'Document' }, Count => 'PageCount', Kids => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::Kids' }, }, ); # tags in PDF Perms dictionary %Image::ExifTool::PDF::Perms = ( NOTES => 'Additional document permissions imposed by digital signatures.', DocMDP => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::Signature' }, }, FieldMDP => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::Signature' }, }, UR3 => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::Signature' }, }, ); # tags in PDF Perms dictionary %Image::ExifTool::PDF::AcroForm = ( PROCESS_PROC => \&ProcessAcroForm, _has_xfa => { Name => 'HasXFA', Notes => q{ this tag is defined if a document contains form fields, and is true if it uses XML Forms Architecture; not a real Tag ID }, PrintConv => { 'true' => 'Yes', 'false' => 'No' }, }, ); # tags in PDF Kids dictionary %Image::ExifTool::PDF::Kids = ( Metadata => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::Metadata' }, }, PieceInfo => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::PieceInfo' }, }, Resources => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::Resources' }, }, Kids => { Condition => '$self->Options("ExtractEmbedded")', SubDirectory => { TagTable => 'Image::ExifTool::PDF::Kids' }, }, ); # tags in PDF Resources dictionary %Image::ExifTool::PDF::Resources = ( ColorSpace => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::ColorSpace' }, }, XObject => { Condition => '$self->Options("ExtractEmbedded")', SubDirectory => { TagTable => 'Image::ExifTool::PDF::XObject' }, }, Properties => { Condition => '$self->Options("ExtractEmbedded")', SubDirectory => { TagTable => 'Image::ExifTool::PDF::Properties' }, }, ); # tags in PDF ColorSpace dictionary %Image::ExifTool::PDF::ColorSpace = ( DefaultRGB => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::DefaultRGB' }, }, Cs1 => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::Cs1' }, }, ); # tags in PDF DefaultRGB dictionary %Image::ExifTool::PDF::DefaultRGB = ( ICCBased => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::ICCBased' }, }, ); # tags in PDF Cs1 dictionary %Image::ExifTool::PDF::Cs1 = ( _stream => { SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' }, }, ); # tags in PDF ICCBased dictionary %Image::ExifTool::PDF::ICCBased = ( _stream => { SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' }, }, ); # tags in PDF XObject dictionary (parsed only if ExtractEmbedded is enabled) %Image::ExifTool::PDF::XObject = ( EXTRACT_UNKNOWN => 0, # extract known but numbered tags (Im1, Im2, etc) Im => { Notes => q{ the ExtractEmbedded option enables information to be extracted from these embedded images }, SubDirectory => { TagTable => 'Image::ExifTool::PDF::Im' }, }, ); # tags in PDF Im# dictionary %Image::ExifTool::PDF::Im = ( NOTES => q{ Information extracted from embedded images with the ExtractEmbedded option. The EmbeddedImage and its metadata are extracted only for JPEG and Jpeg2000 image formats. }, Width => 'EmbeddedImageWidth', Height => 'EmbeddedImageHeight', Filter => { Name => 'EmbeddedImageFilter', List => 1 }, ColorSpace => { Name => 'EmbeddedImageColorSpace', List => 1, RawConv => 'ref $val ? undef : $val', # (ignore color space data) }, Image_stream => { Name => 'EmbeddedImage', Groups => { 2 => 'Preview' }, Binary => 1, }, ); # tags in PDF Properties dictionary %Image::ExifTool::PDF::Properties = ( EXTRACT_UNKNOWN => 0, # extract known but numbered tags (MC0, MC1, etc) MC => { Notes => q{ the ExtractEmbedded option enables information to be extracted from these embedded metadata dictionaries }, SubDirectory => { TagTable => 'Image::ExifTool::PDF::MC' }, } ); # tags in PDF MC# dictionary %Image::ExifTool::PDF::MC = ( Metadata => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::Metadata' }, } ); # tags in PDF PieceInfo dictionary %Image::ExifTool::PDF::PieceInfo = ( AdobePhotoshop => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::AdobePhotoshop' }, }, Illustrator => { # assume this is an illustrator file if it contains this directory # and doesn't have a ".PDF" extension Condition => q{ $self->OverrideFileType("AI") unless $$self{FILE_EXT} and $$self{FILE_EXT} eq 'PDF'; return 1; }, SubDirectory => { TagTable => 'Image::ExifTool::PDF::Illustrator' }, }, ); # tags in PDF AdobePhotoshop dictionary %Image::ExifTool::PDF::AdobePhotoshop = ( Private => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::Private' }, }, ); # tags in PDF Illustrator dictionary %Image::ExifTool::PDF::Illustrator = ( Private => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::AIPrivate' }, }, ); # tags in PDF Private dictionary %Image::ExifTool::PDF::Private = ( ImageResources => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::ImageResources' }, }, ); # tags in PDF AI Private dictionary %Image::ExifTool::PDF::AIPrivate = ( GROUPS => { 2 => 'Document' }, EXTRACT_UNKNOWN => 0, # extract known but numbered tags AIMetaData => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::AIMetaData' }, }, AIPrivateData => { Notes => q{ the ExtractEmbedded option enables information to be extracted from embedded PostScript documents in the AIPrivateData# and AIPDFPrivateData# streams }, JoinStreams => 1, # join streams from numbered tags and process as one SubDirectory => { TagTable => 'Image::ExifTool::PostScript::Main' }, }, AIPDFPrivateData => { JoinStreams => 1, # join streams from numbered tags and process as one SubDirectory => { TagTable => 'Image::ExifTool::PostScript::Main' }, }, RoundTripVersion => { }, ContainerVersion => { }, CreatorVersion => { }, ); # tags in PDF AIMetaData dictionary %Image::ExifTool::PDF::AIMetaData = ( _stream => { SubDirectory => { TagTable => 'Image::ExifTool::PostScript::Main' }, }, ); # tags in PDF ImageResources dictionary %Image::ExifTool::PDF::ImageResources = ( _stream => { SubDirectory => { TagTable => 'Image::ExifTool::Photoshop::Main' }, }, ); # tags in PDF MarkInfo dictionary %Image::ExifTool::PDF::MarkInfo = ( GROUPS => { 2 => 'Document' }, Marked => { Name => 'TaggedPDF', Notes => "not a Tagged PDF if this tag is missing", PrintConv => { 'true' => 'Yes', 'false' => 'No' }, }, ); # tags in PDF Metadata dictionary %Image::ExifTool::PDF::Metadata = ( GROUPS => { 2 => 'Document' }, XML_stream => { # this is the stream for a Subtype /XML dictionary (not a real tag) Name => 'XMP', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' }, }, ); # tags in PDF signature directories (DocMDP, FieldMDP or UR3) %Image::ExifTool::PDF::Signature = ( GROUPS => { 2 => 'Document' }, ContactInfo => 'SignerContactInfo', Location => 'SigningLocation', M => { Name => 'SigningDate', Format => 'date', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, Name => 'SigningAuthority', Reason => 'SigningReason', Reference => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::Reference' }, }, Prop_AuthTime => { Name => 'AuthenticationTime', PrintConv => 'ConvertTimeSpan($val) . " ago"', }, Prop_AuthType => 'AuthenticationType', ); # tags in PDF Reference dictionary %Image::ExifTool::PDF::Reference = ( TransformParams => { SubDirectory => { TagTable => 'Image::ExifTool::PDF::TransformParams' }, }, ); # tags in PDF TransformParams dictionary %Image::ExifTool::PDF::TransformParams = ( GROUPS => { 2 => 'Document' }, Annots => { Name => 'AnnotationUsageRights', Notes => q{ possible values are Create, Delete, Modify, Copy, Import and Export; additional values for UR3 signatures are Online and SummaryView }, List => 1, }, Document => { Name => 'DocumentUsageRights', Notes => 'only possible value is FullSave', List => 1, }, Form => { Name => 'FormUsageRights', Notes => q{ possible values are FillIn, Import, Export, SubmitStandalone and SpawnTemplate; additional values for UR3 signatures are BarcodePlaintext and Online }, List => 1, }, FormEX => { Name => 'FormExtraUsageRights', Notes => 'UR signatures only; only possible value is BarcodePlaintext', List => 1, }, Signature => { Name => 'SignatureUsageRights', Notes => 'only possible value is Modify', List => 1, }, EF => { Name => 'EmbeddedFileUsageRights', Notes => 'possible values are Create, Delete, Modify and Import', List => 1, }, Msg => 'UsageRightsMessage', P => { Name => 'ModificationPermissions', Notes => q{ 1-3 for DocMDP signatures, default 2; true/false for UR3 signatures, default false }, PrintConv => { 1 => 'No changes permitted', 2 => 'Fill forms, Create page templates, Sign', 3 => 'Fill forms, Create page templates, Sign, Create/Delete/Edit annotations', 'true' => 'Restrict all applications to reader permissions', 'false' => 'Do not restrict applications to reader permissions', }, }, Action => { Name => 'FieldPermissions', Notes => 'FieldMDP signatures only', PrintConv => { 'All' => 'Disallow changes to all form fields', 'Include' => 'Disallow changes to specified form fields', 'Exclude' => 'Allow changes to specified form fields', }, }, Fields => { Notes => 'FieldMDP signatures only', Name => 'FormFields', List => 1, }, ); # unknown tags for use in verbose option %Image::ExifTool::PDF::Unknown = ( GROUPS => { 2 => 'Unknown' }, ); #------------------------------------------------------------------------------ # AutoLoad our writer routines when necessary # sub AUTOLOAD { return Image::ExifTool::DoAutoLoad($AUTOLOAD, @_); } #------------------------------------------------------------------------------ # Convert from PDF to EXIF-style date/time # Inputs: 0) PDF date/time string (D:YYYYmmddHHMMSS+HH'MM') # Returns: EXIF date string (YYYY:mm:dd HH:MM:SS+HH:MM) sub ConvertPDFDate($) { my $date = shift; # remove optional 'D:' prefix $date =~ s/^D://; # fill in default values if necessary # YYYYmmddHHMMSS my $default = '00000101000000'; if (length $date < length $default) { $date .= substr($default, length $date); } $date =~ /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(.*)/ or return $date; $date = "$1:$2:$3 $4:$5:$6"; if ($7) { my $tz = $7; if ($tz =~ /^\s*Z/i) { # ignore any "HH'mm'" after the Z (OS X 10.6 does this) $date .= 'Z'; # tolerate some improper formatting in timezone specification } elsif ($tz =~ /^\s*([-+])\s*(\d+)[': ]+(\d*)/) { $date .= $1 . $2 . ':' . ($3 || '00'); } } return $date; } #------------------------------------------------------------------------------ # Locate any object in the XRef tables (including compressed objects) # Inputs: 0) XRef reference, 1) object reference string (or free object number) # Returns: offset to object in file or compressed object reference string, # 0 if object is free, or undefined on error sub LocateAnyObject($$) { my ($xref, $ref) = @_; return undef unless $xref; return $$xref{$ref} if exists $$xref{$ref}; # get the object number return undef unless $ref =~ /^(\d+)/; my $objNum = $1; # return 0 if the object number has been reused (old object is free) return 0 if defined $$xref{$objNum}; # # scan our XRef stream dictionaries for this object # return undef unless $$xref{dicts}; my $dict; foreach $dict (@{$$xref{dicts}}) { # quick check to see if the object is in the range for this xref stream next if $objNum >= $$dict{Size}; my $index = $$dict{Index}; next if $objNum < $$index[0]; # scan the tables for the specified object my $size = $$dict{_entry_size}; my $num = scalar(@$index) / 2; my $tot = 0; my $i; for ($i=0; $i<$num; ++$i) { my $start = $$index[$i*2]; my $count = $$index[$i*2+1]; # table is in ascending order, so quit if we have passed the object last if $objNum < $start; if ($objNum < $start + $count) { my $offset = $size * ($objNum - $start + $tot); last if $offset + $size > length $$dict{_stream}; my @c = unpack("x$offset C$size", $$dict{_stream}); # extract values from this table entry # (can be 1, 2, 3, 4, etc.. bytes per value) my (@t, $j, $k); my $w = $$dict{W}; for ($j=0; $j<3; ++$j) { # use default value if W entry is 0 (as per spec) # - 0th element defaults to 1, others default to 0 $$w[$j] or $t[$j] = ($j ? 0 : 1), next; $t[$j] = shift(@c); for ($k=1; $k < $$w[$j]; ++$k) { $t[$j] = 256 * $t[$j] + shift(@c); } } # by default, use "o g R" as the xref key # (o = object number, g = generation number) my $ref2 = "$objNum $t[2] R"; if ($t[0] == 1) { # normal object reference: # $t[1]=offset of object from start, $t[2]=generation number $$xref{$ref2} = $t[1]; } elsif ($t[0] == 2) { # compressed object reference: # $t[1]=stream object number, $t[2]=index of object in stream $ref2 = "$objNum 0 R"; $$xref{$ref2} = "I$t[2] $t[1] 0 R"; } elsif ($t[0] == 0) { # free object: # $t[1]=next free object in linked list, $t[2]=generation number $$xref{$ref2} = 0; } else { # treat as a null object $$xref{$ref2} = undef; } $$xref{$objNum} = $t[1]; # remember offsets by object number too return $$xref{$ref} if $ref eq $ref2; return 0; # object is free or was reused } $tot += $count; } } return undef; } #------------------------------------------------------------------------------ # Locate a regular object in the XRef tables (does not include compressed objects) # Inputs: 0) XRef reference, 1) object reference string (or free object number) # Returns: offset to object in file, 0 if object is free, # or undef on error or if object was compressed sub LocateObject($$) { my ($xref, $ref) = @_; my $offset = LocateAnyObject($xref, $ref); return undef if $offset and $offset =~ /^I/; return $offset; } #------------------------------------------------------------------------------ # Fetch indirect object from file (from inside a stream if required) # Inputs: 0) ExifTool object reference, 1) object reference string, # 2) xref lookup, 3) object name (for warning messages) # Returns: object data or undefined on error # Notes: sets $lastFetched to the object reference, or undef if the object # was extracted from an encrypted stream sub FetchObject($$$$) { my ($et, $ref, $xref, $tag) = @_; $lastFetched = $ref; # save this for decoding if necessary my $offset = LocateAnyObject($xref, $ref); $lastOffset = $offset; unless ($offset) { $et->Warn("Bad $tag reference") unless defined $offset; return undef; } my ($data, $obj); if ($offset =~ s/^I(\d+) //) { my $index = $1; # object index in stream my ($objNum) = split ' ', $ref; # save original object number $ref = $offset; # now a reference to the containing stream object $obj = $streamObjs{$ref}; unless ($obj) { # don't try to load the same object stream twice return undef if defined $obj; $streamObjs{$ref} = ''; # load the parent object stream $obj = FetchObject($et, $ref, $xref, $tag); # make sure it contains everything we need return undef unless defined $obj and ref($obj) eq 'HASH'; return undef unless $$obj{First} and $$obj{N}; return undef unless DecodeStream($et, $obj); # add a special '_table' entry to this dictionary which contains # the list of object number/offset pairs from the stream header my $num = $$obj{N} * 2; my @table = split ' ', $$obj{_stream}, $num; return undef unless @table == $num; # remove everything before first object in stream $$obj{_stream} = substr($$obj{_stream}, $$obj{First}); $table[$num-1] =~ s/^(\d+).*/$1/s; # trim excess from last number $$obj{_table} = \@table; # save the object stream so we don't have to re-load it later $streamObjs{$ref} = $obj; } # verify that we have the specified object my $i = 2 * $index; my $table = $$obj{_table}; unless ($index < $$obj{N} and $$table[$i] == $objNum) { $et->Warn("Bad index for stream object $tag"); return undef; } # extract the object at the specified index in the stream # (offsets in table are in sequential order, so we can subract from # the next offset to get the object length) $offset = $$table[$i + 1]; my $len = ($$table[$i + 3] || length($$obj{_stream})) - $offset; $data = substr($$obj{_stream}, $offset, $len); # avoid re-decrypting data in already decrypted streams undef $lastFetched if $cryptStream; return ExtractObject($et, \$data); } my $raf = $$et{RAF}; $raf->Seek($offset, 0) or $et->Warn("Bad $tag offset"), return undef; # verify that we are reading the expected object $raf->ReadLine($data) or $et->Warn("Error reading $tag data"), return undef; ($obj = $ref) =~ s/R/obj/; unless ($data =~ s/^$obj//) { $et->Warn("$tag object ($obj) not found at $offset"); return undef; } # read the first line of data for the object (skipping comments if necessary) for (;;) { last if $data =~ /\S/ and $data !~ /^\s*%/; $raf->ReadLine($data) or $et->Warn("Error reading $tag data"), return undef; } return ExtractObject($et, \$data, $raf, $xref); } #------------------------------------------------------------------------------ # Convert PDF value to something readable # Inputs: 0) PDF object data # Returns: converted object sub ReadPDFValue($) { my $str = shift; # decode all strings in an array if (ref $str eq 'ARRAY') { # create new list to not alter the original data when rewriting my ($val, @vals); foreach $val (@$str) { push @vals, ReadPDFValue($val); } return \@vals; } length $str or return $str; my $delim = substr($str, 0, 1); if ($delim eq '(') { # literal string $str = $1 if $str =~ /^.*?\((.*)\)/s; # remove brackets # decode escape sequences in literal strings while ($str =~ /\\(.)/sg) { my $n = pos($str) - 2; my $c = $1; my $r; if ($c =~ /[0-7]/) { # get up to 2 more octal digits $c .= $1 if $str =~ /\G([0-7]{1,2})/g; # convert octal escape code $r = chr(oct($c) & 0xff); } elsif ($c eq "\x0d") { # the string is continued if the line ends with '\' # (also remove "\x0d\x0a") $c .= $1 if $str =~ /\G(\x0a)/g; $r = ''; } elsif ($c eq "\x0a") { $r = ''; } else { # convert escaped characters ($r = $c) =~ tr/nrtbf/\n\r\t\b\f/; } substr($str, $n, length($c)+1) = $r; # continue search after this character pos($str) = $n + length($r); } Crypt(\$str, $lastFetched) if $cryptString; } elsif ($delim eq '<') { # hex string # decode hex data $str =~ tr/0-9A-Fa-f//dc; $str .= '0' if length($str) & 0x01; # (by the spec) $str = pack('H*', $str); Crypt(\$str, $lastFetched) if $cryptString; } elsif ($delim eq '/') { # name $str = substr($str, 1); # convert escape codes (PDF 1.2 or later) $str =~ s/#([0-9a-f]{2})/chr(hex($1))/sgei if $pdfVer >= 1.2; } return $str; } #------------------------------------------------------------------------------ # Extract PDF object from combination of buffered data and file # Inputs: 0) ExifTool object reference, 1) data reference, # 2) optional raf reference, 3) optional xref table # Returns: converted PDF object or undef on error # a) dictionary object --> hash reference # b) array object --> array reference # c) indirect reference --> scalar reference # d) string, name, integer, boolean, null --> scalar value # - updates $$dataPt on return to contain unused data # - creates two bogus entries ('_stream' and '_tags') in dictionaries to represent # the stream data and a list of the tags (not including '_stream' and '_tags') # in their original order sub ExtractObject($$;$$) { my ($et, $dataPt, $raf, $xref) = @_; my (@tags, $data, $objData); my $dict = { }; my $delim; for (;;) { if ($$dataPt =~ /^\s*(<{1,2}|\[|\()/s) { $delim = $1; $$dataPt =~ s/^\s+//; # remove leading white space $objData = ReadToNested($dataPt, $raf); return undef unless defined $objData; last; } elsif ($$dataPt =~ s{^\s*(\S[^[(/<>\s]*)\s*}{}s) { # # extract boolean, numerical, string, name, null object or indirect reference # $objData = $1; # look for an indirect reference if ($objData =~ /^\d+$/ and $$dataPt =~ s/^(\d+)\s+R//s) { $objData .= "$1 R"; $objData = \$objData; # return scalar reference } return $objData; # return simple scalar or scalar reference } $raf and $raf->ReadLine($data) or return undef; $$dataPt .= $data; } # # return literal string or hex string without parsing # if ($delim eq '(' or $delim eq '<') { return $objData; # # extract array # } elsif ($delim eq '[') { $objData =~ /^.*?\[(.*)\]/s or return undef; my $data = $1; # brackets removed my @list; for (;;) { last unless $data =~ m{\s*(\S[^[(/<>\s]*)}sg; my $val = $1; if ($val =~ /^(<{1,2}|\[|\()/) { my $pos = pos($data) - length($val); # nested dict, array, literal string or hex string my $buff = substr($data, $pos); $val = ReadToNested(\$buff); last unless defined $val; pos($data) = $pos + length($val); $val = ExtractObject($et, \$val); } elsif ($val =~ /^\d/) { my $pos = pos($data); if ($data =~ /\G\s+(\d+)\s+R/g) { $val = \ "$val $1 R"; # make a reference } else { pos($data) = $pos; } } push @list, $val; } return \@list; } # # extract dictionary # # Note: entries are not necessarily separated by whitespace (doh!) # eg) "/Tag/Name", "/Tag(string)", "/Tag[array]", etc are legal! # Also, they may be separated by a comment (eg. "/Tag%comment\nValue"), # but comments have already been removed while ($objData =~ m{(\s*)/([^/[\]()<>{}\s]+)\s*(\S[^[(/<>\s]*)}sg) { my $tag = $2; my $val = $3; if ($val =~ /^(<{1,2}|\[|\()/) { # nested dict, array, literal string or hex string $objData = substr($objData, pos($objData)-length($val)); $val = ReadToNested(\$objData, $raf); last unless defined $val; $val = ExtractObject($et, \$val); pos($objData) = 0; } elsif ($val =~ /^\d/) { my $pos = pos($objData); if ($objData =~ /\G\s+(\d+)\s+R/sg) { $val = \ "$val $1 R"; # make a reference } else { pos($objData) = $pos; } } if ($$dict{$tag}) { # duplicate dictionary entries are not allowed $et->Warn("Duplicate '$tag' entry in dictionary (ignored)"); } else { # save the entry push @tags, $tag; $$dict{$tag} = $val; } } return undef unless @tags; $$dict{_tags} = \@tags; return $dict unless $raf; # direct objects can not have streams # # extract the stream object # # dictionary must specify stream Length my $length = $$dict{Length} or return $dict; if (ref $length) { $length = $$length; my $oldpos = $raf->Tell(); # get the location of the object specifying the length # (compressed objects are not allowed) my $offset = LocateObject($xref, $length) or return $dict; $offset or $et->Warn('Bad Length object'), return $dict; $raf->Seek($offset, 0) or $et->Warn('Bad Length offset'), return $dict; # verify that we are reading the expected object $raf->ReadLine($data) or $et->Warn('Error reading Length data'), return $dict; $length =~ s/R/obj/; unless ($data =~ /^$length\s+(\d+)?/) { $et->Warn("Length object ($length) not found at $offset"); return $dict; } if (defined $1) { $length = $1; } else { $raf->ReadLine($data) or $et->Warn('Error reading stream Length'), return $dict; $data =~ /^\s*(\d+)/ or $et->Warn('Stream length not found'), return $dict; $length = $1; } $raf->Seek($oldpos, 0); # restore position to start of stream } # extract the trailing stream data for (;;) { # find the stream token if ($$dataPt =~ /(\S+)/) { last unless $1 eq 'stream'; # read an extra line because it may contain our \x0a $$dataPt .= $data if $raf->ReadLine($data); # remove our stream header $$dataPt =~ s/^\s*stream(\x0a|\x0d\x0a)//s; my $more = $length - length($$dataPt); if ($more > 0) { unless ($raf->Read($data, $more) == $more) { $et->Warn('Error reading stream data'); $$dataPt = ''; return $dict; } $$dict{_stream} = $$dataPt . $data; $$dataPt = ''; } elsif ($more < 0) { $$dict{_stream} = substr($$dataPt, 0, $length); $$dataPt = substr($$dataPt, $length); } else { $$dict{_stream} = $$dataPt; $$dataPt = ''; } last; } $raf->ReadLine($data) or last; $$dataPt .= $data; } return $dict; } #------------------------------------------------------------------------------ # Read to nested delimiter # Inputs: 0) data reference, 1) optional raf reference # Returns: data up to and including matching delimiter (or undef on error) # - updates data reference with trailing data # - unescapes characters in literal strings my %closingDelim = ( # lookup for matching delimiter '(' => ')', '[' => ']', '<' => '>', '<<' => '>>', ); sub ReadToNested($;$) { my ($dataPt, $raf) = @_; my @delim = (''); # closing delimiter list, most deeply nested first pos($$dataPt) = 0; # begin at start of data for (;;) { unless ($$dataPt =~ /(\\*)(\(|\)|<{1,2}|>{1,2}|\[|\]|%)/g) { # must read some more data my $buff; last unless $raf and $raf->ReadLine($buff); $$dataPt .= $buff; pos($$dataPt) = length($$dataPt) - length($buff); next; } # are we in a literal string? if ($delim[0] eq ')') { # ignore escaped delimiters (preceded by odd number of \'s) next if length($1) & 0x01; # ignore all delimiters but unescaped braces next unless $2 eq '(' or $2 eq ')'; } elsif ($2 eq '%') { # ignore the comment my $pos = pos($$dataPt) - 1; # remove everything from '%' up to but not including newline $$dataPt =~ /.*/g; my $end = pos($$dataPt); $$dataPt = substr($$dataPt, 0, $pos) . substr($$dataPt, $end); pos($$dataPt) = $pos; next; } if ($closingDelim{$2}) { # push the corresponding closing delimiter unshift @delim, $closingDelim{$2}; next; } unless ($2 eq $delim[0]) { # handle the case where we find a ">>>" and interpret it # as ">> >" instead of "> >>" next unless $2 eq '>>' and $delim[0] eq '>'; pos($$dataPt) = pos($$dataPt) - 1; } shift @delim; # remove from nesting list next if $delim[0]; # keep going if we have more nested delimiters my $pos = pos($$dataPt); my $buff = substr($$dataPt, 0, $pos); $$dataPt = substr($$dataPt, $pos); return $buff; # success! } return undef; # didn't find matching delimiter } #------------------------------------------------------------------------------ # Decode LZW-encoded data (ref 1) # Inputs: 0) data reference # Returns: true on success and data is decoded, or false and data is untouched sub DecodeLZW($) { my $dataPt = shift; return 0 if length $$dataPt < 4; my @lzw = (map(chr, 0..255), undef, undef); # LZW code table my $mask = 0x01ff; # mask for least-significant 9 bits my @dat = unpack 'n*', $$dataPt . "\0"; my $word = ($dat[0] << 16) | $dat[1]; my ($bit, $pos, $bits, $out) = (0, 2, 9, ''); my $lastVal; for (;;) { # bits are packed MSB first in PDF LZW (the PDF spec doesn't mention this) my $shift = 32 - ($bit + $bits); if ($shift < 0) { return 0 if $pos >= @dat; # missing EOD marker $word = (($word & 0xffff) << 16) | $dat[$pos++]; # read next word $bit -= 16; $shift += 16; }; my $code = ($word >> $shift) & $mask; $bit += $bits; my $val = $lzw[$code]; if (defined $val) { # store new code as previous sequence plus 1st char of new sequence push @lzw, $lastVal . substr($val, 0, 1) if defined $lastVal; } elsif ($code == @lzw) { # new code return 0 unless defined $lastVal; # we are using the code that we are about to generate, so the last # character in the new sequence must be the same as the first # character in the previous sequence (makes sense if you think about it) $val = $lastVal . substr($lastVal, 0, 1); push @lzw, $val; } elsif ($code == 256) { # clear table splice @lzw, 258; $bits = 9; $mask = 0x1ff; undef $lastVal; next; } elsif ($code == 257) { # EOD marker last; # all done! } else { return 0; } $out .= $val; # add this byte sequence to the output # we added a new entry to the LZW table, so we must increase # the bit width if necessary, up to a maximum of 12 @lzw >= $mask and $bits < 12 and ++$bits, $mask |= $mask << 1; $lastVal = $val; } $$dataPt = $out; # return decompressed data return 1; } #------------------------------------------------------------------------------ # Decode filtered stream # Inputs: 0) ExifTool object reference, 1) dictionary reference # Returns: true if stream has been decoded OK sub DecodeStream($$) { local $_; my ($et, $dict) = @_; return 0 unless $$dict{_stream}; # no stream to decode # get list of filters my (@filters, @decodeParms, $filter); if (ref $$dict{Filter} eq 'ARRAY') { @filters = @{$$dict{Filter}}; } elsif (defined $$dict{Filter}) { @filters = ($$dict{Filter}); } # be sure we can process all the filters before we take the time to do the decryption foreach $filter (@filters) { next if $supportedFilter{$filter}; $et->WarnOnce("Unsupported Filter $filter"); return 0; } # apply decryption first if required (and if the default encryption # has not been overridden by a Crypt filter. Note: the Crypt filter # must be first in the Filter array: ref 3, page 38) unless (defined $$dict{_decrypted} or ($filters[0] and $filters[0] eq '/Crypt')) { CryptStream($dict, $lastFetched); } return 1 unless $$dict{Filter}; # Filter entry is mandatory return 0 if defined $$dict{_filtered}; # avoid double-filtering $$dict{_filtered} = 1; # set flag to prevent double-filtering # get array of DecodeParms dictionaries if (ref $$dict{DecodeParms} eq 'ARRAY') { @decodeParms = @{$$dict{DecodeParms}}; } else { @decodeParms = ($$dict{DecodeParms}); } foreach $filter (@filters) { my $decodeParms = shift @decodeParms; if ($filter eq '/FlateDecode') { # make sure we support the predictor (if used) before decoding my $pre; if (ref $decodeParms eq 'HASH') { $pre = $$decodeParms{Predictor}; if ($pre and $pre ne '1' and $pre ne '12') { $et->WarnOnce("FlateDecode Predictor $pre currently not supported"); return 0; } } if (eval { require Compress::Zlib }) { my $inflate = Compress::Zlib::inflateInit(); my ($buff, $stat); $inflate and ($buff, $stat) = $inflate->inflate($$dict{_stream}); if ($inflate and $stat == Compress::Zlib::Z_STREAM_END()) { $$dict{_stream} = $buff; } else { $et->Warn('Error inflating stream'); return 0; } } else { $et->WarnOnce('Install Compress::Zlib to process filtered streams'); return 0; } next unless $pre and $pre eq '12'; # 12 = 'up' prediction # apply anti-predictor my $cols = $$decodeParms{Columns}; unless ($cols) { # currently only support 'up' prediction $et->WarnOnce('No Columns for decoding stream'); return 0; } my @bytes = unpack('C*', $$dict{_stream}); my @pre = (0) x $cols; # initialize predictor array my $buff = ''; while (@bytes > $cols) { unless (($_ = shift @bytes) == 2) { $et->WarnOnce("Unsupported PNG filter $_"); # (yes, PNG) return 0; } foreach (@pre) { $_ = ($_ + shift(@bytes)) & 0xff; } $buff .= pack('C*', @pre); } $$dict{_stream} = $buff; } elsif ($filter eq '/Crypt') { # (we shouldn't have to check the _decrypted flag since we # already checked the _filtered flag, but what the heck...) next if defined $$dict{_decrypted}; # assume Identity filter (the default) if DecodeParms are missing next unless ref $decodeParms eq 'HASH'; my $name = $$decodeParms{Name}; next unless defined $name or $name eq 'Identity'; if ($name ne 'StdCF') { $et->WarnOnce("Unsupported Crypt Filter $name"); return 0; } unless ($cryptInfo) { $et->WarnOnce('Missing Encrypt StdCF entry'); return 0; } # decrypt the stream manually because we want to: # 1) ignore $cryptStream (StmF) setting # 2) ignore EncryptMetadata setting (I can't find mention of how to # reconcile this in the spec., but this would make sense) # 3) avoid adding the crypt key extension (ref 3, page 58, Algorithm 1b) # 4) set _decrypted flag so we will recrypt according to StmF when # writing (since we don't yet write Filter'd streams) Crypt(\$$dict{_stream}, 'none'); $$dict{_decrypted} = ($cryptStream ? 1 : 0); } elsif ($filter eq '/LZWDecode') { # make sure we don't have any unsupported decoding parameters if (ref $decodeParms eq 'HASH') { if ($$decodeParms{Predictor}) { $et->WarnOnce("LZWDecode Predictor $$decodeParms{Predictor} currently not supported"); return 0; } elsif ($$decodeParms{EarlyChange}) { $et->WarnOnce("LZWDecode EarlyChange currently not supported"); return 0; } } unless (DecodeLZW(\$$dict{_stream})) { $et->WarnOnce('LZW decompress error'); return 0; } } elsif ($filter eq '/ASCIIHexDecode') { $$dict{_stream} =~ s/>.*//; # truncate at '>' (end of data mark) $$dict{_stream} =~ tr/0-9a-zA-Z//d; # remove illegal characters $$dict{_stream} = pack 'H*', $$dict{_stream}; } } return 1; } #------------------------------------------------------------------------------ # Initialize state for RC4 en/decryption (ref 2) # Inputs: 0) RC4 key string # Returns: RC4 key hash reference sub RC4Init($) { my @key = unpack('C*', shift); my @state = (0 .. 255); my ($i, $j) = (0, 0); while ($i < 256) { my $st = $state[$i]; $j = ($j + $st + $key[$i % scalar(@key)]) & 0xff; $state[$i++] = $state[$j]; $state[$j] = $st; } return { State => \@state, XY => [ 0, 0 ] }; } #------------------------------------------------------------------------------ # Apply RC4 en/decryption (ref 2) # Inputs: 0) data reference, 1) RC4 key hash reference or RC4 key string # - can call this method directly with a key string, or with with the key # reference returned by RC4Init # - RC4 is a symmetric algorithm, so encryption is the same as decryption sub RC4Crypt($$) { my ($dataPt, $key) = @_; $key = RC4Init($key) unless ref $key eq 'HASH'; my $state = $$key{State}; my ($x, $y) = @{$$key{XY}}; my @data = unpack('C*', $$dataPt); foreach (@data) { $x = ($x + 1) & 0xff; my $stx = $$state[$x]; $y = ($stx + $y) & 0xff; my $sty = $$state[$x] = $$state[$y]; $$state[$y] = $stx; $_ ^= $$state[($stx + $sty) & 0xff]; } $$key{XY} = [ $x, $y ]; $$dataPt = pack('C*', @data); } #------------------------------------------------------------------------------ # Update AES cipher with a bit of data # Inputs: 0) data # Returns: encrypted data my $cipherMore; sub CipherUpdate($) { my $dat = shift; my $pos = 0; $dat = $cipherMore . $dat if length $dat; while ($pos + 16 <= length($dat)) { substr($dat,$pos,16) = Image::ExifTool::AES::Cipher(substr($dat,$pos,16)); $pos += 16; } if ($pos < length $dat) { $cipherMore = substr($dat,$pos); $dat = substr($dat,0,$pos); } else { $cipherMore = ''; } return $dat; } #------------------------------------------------------------------------------ # Get encrypted hash # Inputs: 0) Password, 1) salt, 2) vector, 3) encryption revision # Returns: hash sub GetHash($$$$) { my ($password, $salt, $vector, $rev) = @_; # return Rev 5 hash return Digest::SHA::sha256($password, $salt, $vector) if $rev == 5; # compute Rev 6 hardened hash # (ref http://code.google.com/p/origami-pdf/source/browse/lib/origami/encryption.rb) my $blockSize = 32; my $input = Digest::SHA::sha256($password, $salt, $vector) . ("\0" x 32); my $key = substr($input, 0, 16); my $iv = substr($input, 16, 16); my $h; my $x = ''; my $i = 0; while ($i < 64 or $i < ord(substr($x,-1,1))+32) { my $block = substr($input, 0, $blockSize); $x = ''; Image::ExifTool::AES::Crypt(\$x, $key, $iv, 1); $cipherMore = ''; my ($j, $digest); for ($j=0; $j<64; ++$j) { $x = ''; $x .= CipherUpdate($password) if length $password; $x .= CipherUpdate($block); $x .= CipherUpdate($vector) if length $vector; if ($j == 0) { my @a = unpack('C16', $x); my $sum = 0; $sum += $_ foreach @a; # set SHA block size (32, 48 or 64 bytes = SHA-256, 384 or 512) $blockSize = 32 + ($sum % 3) * 16; $digest = Digest::SHA->new($blockSize * 8); } $digest->add($x); } $h = $digest->digest(); $key = substr($h, 0, 16); substr($input,0,16) = $h; $iv = substr($h, 16, 16); ++$i; } return substr($h, 0, 32); } #------------------------------------------------------------------------------ # Initialize decryption # Inputs: 0) ExifTool object reference, 1) Encrypt dictionary reference, # 2) ID from file trailer dictionary # Returns: error string or undef on success (and sets $cryptInfo) sub DecryptInit($$$) { local $_; my ($et, $encrypt, $id) = @_; undef $cryptInfo; unless ($encrypt and ref $encrypt eq 'HASH') { return 'Error loading Encrypt object'; } my $filt = $$encrypt{Filter}; unless ($filt and $filt =~ s/^\///) { return 'Encrypt dictionary has no Filter!'; } # extract some interesting tags my $ver = $$encrypt{V} || 0; my $rev = $$encrypt{R} || 0; my $enc = "$filt V$ver"; $enc .= ".$rev" if $filt eq 'Standard'; $enc .= " ($1)" if $$encrypt{SubFilter} and $$encrypt{SubFilter} =~ /^\/(.*)/; $enc .= ' (' . ($$encrypt{Length} || 40) . '-bit)' if $filt eq 'Standard'; my $tagTablePtr = GetTagTable('Image::ExifTool::PDF::Encrypt'); $et->HandleTag($tagTablePtr, 'Filter', $enc); if ($filt ne 'Standard') { return "Encryption filter $filt currently not supported"; } elsif (not defined $$encrypt{R}) { return 'Standard security handler missing revision'; } unless ($$encrypt{O} and $$encrypt{P} and $$encrypt{U}) { return 'Incomplete Encrypt specification'; } if ("$ver.$rev" >= 5.6) { # apologize for poor performance (AES is a pure Perl implementation) $et->Warn('Decryption is very slow for encryption V5.6 or higher', 1); } $et->HandleTag($tagTablePtr, 'P', $$encrypt{P}); my %parm; # optional parameters extracted from Encrypt dictionary if ($ver == 1 or $ver == 2) { $cryptString = $cryptStream = 1; } elsif ($ver == 4 or $ver == 5) { # initialize our $cryptString and $cryptStream flags foreach ('StrF', 'StmF') { my $flagPt = $_ eq 'StrF' ? \$cryptString : \$cryptStream; $$flagPt = $$encrypt{$_}; undef $$flagPt if $$flagPt and $$flagPt eq '/Identity'; return "Unsupported $_ encryption $$flagPt" if $$flagPt and $$flagPt ne '/StdCF'; } if ($cryptString or $cryptStream) { return 'Missing or invalid Encrypt StdCF entry' unless ref $$encrypt{CF} eq 'HASH' and ref $$encrypt{CF}{StdCF} eq 'HASH' and $$encrypt{CF}{StdCF}{CFM}; my $cryptMeth = $$encrypt{CF}{StdCF}{CFM}; unless ($cryptMeth =~ /^\/(V2|AESV2|AESV3)$/) { return "Unsupported encryption method $cryptMeth"; } # set "_aesv2" or "_aesv3" flag in %$encrypt hash if AES encryption was used $$encrypt{'_' . lc($1)} = 1 if $cryptMeth =~ /^\/(AESV2|AESV3)$/; } if ($ver == 5) { # validate OE and UE entries foreach ('OE', 'UE') { return "Missing Encrypt $_ entry" unless $$encrypt{$_}; $parm{$_} = ReadPDFValue($$encrypt{$_}); return "Invalid Encrypt $_ entry" unless length $parm{$_} == 32; } require Image::ExifTool::AES; # will need this later } } else { return "Encryption version $ver currently not supported"; } $id or return "Can't decrypt (no document ID)"; # make sure we have the necessary libraries available if ($ver < 5) { unless (eval { require Digest::MD5 }) { return "Install Digest::MD5 to process encrypted PDF"; } } else { unless (eval { require Digest::SHA }) { return "Install Digest::SHA to process AES-256 encrypted PDF"; } } # calculate file-level en/decryption key my $pad = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08". "\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A"; my $o = ReadPDFValue($$encrypt{O}); my $u = ReadPDFValue($$encrypt{U}); # set flag indicating whether metadata is encrypted # (in version 4 and higher, metadata streams may not be encrypted) if ($ver < 4 or not $$encrypt{EncryptMetadata} or $$encrypt{EncryptMetadata} !~ /false/i) { $$encrypt{_meta} = 1; } # try no password first, then try provided password if available my ($try, $key); for ($try=0; ; ++$try) { my $password; if ($try == 0) { $password = ''; } elsif ($try == 1) { $password = $et->Options('Password'); return 'Document is password protected (use Password option)' unless defined $password; # make sure there is no UTF-8 flag on the password if ($] >= 5.006 and (eval { require Encode; Encode::is_utf8($password) } or $@)) { # repack by hand if Encode isn't available $password = $@ ? pack('C*',unpack($] < 5.010000 ? 'U0C*' : 'C0C*',$password)) : Encode::encode('utf8',$password); } } else { return 'Incorrect password'; } if ($ver < 5) { if (length $password) { # password must be encoding in PDFDocEncoding (ref iso32000) $password = $et->Encode($password, 'PDFDoc'); # truncate or pad the password to exactly 32 bytes if (length($password) > 32) { $password = substr($password, 0, 32); } elsif (length($password) < 32) { $password .= substr($pad, 0, 32-length($password)); } } else { $password = $pad; } $key = $password . $o . pack('V', $$encrypt{P}) . $id; my $rep = 1; if ($rev == 3 or $rev == 4) { # must add this if metadata not encrypted $key .= "\xff\xff\xff\xff" unless $$encrypt{_meta}; $rep += 50; # repeat MD5 50 more times if revision is 3 or greater } my ($len, $i, $dat); if ($ver == 1) { $len = 5; } else { $len = $$encrypt{Length} || 40; $len >= 40 or return 'Bad Encrypt Length'; $len = int($len / 8); } for ($i=0; $i<$rep; ++$i) { $key = substr(Digest::MD5::md5($key), 0, $len); } # decrypt U to see if a user password is required if ($rev >= 3) { $dat = Digest::MD5::md5($pad . $id); RC4Crypt(\$dat, $key); for ($i=1; $i<=19; ++$i) { my @key = unpack('C*', $key); foreach (@key) { $_ ^= $i; } RC4Crypt(\$dat, pack('C*', @key)); } $dat .= substr($u, 16); } else { $dat = $pad; RC4Crypt(\$dat, $key); } last if $dat eq $u; # all done if this was the correct key } else { return 'Invalid O or U Encrypt entries' if length($o) < 48 or length($u) < 48; if (length $password) { # Note: this should be good for passwords containing reasonable characters, # but to be bullet-proof we need to apply the SASLprep (IETF RFC 4013) profile # of stringprep (IETF RFC 3454) to the password before encoding in UTF-8 $password = $et->Encode($password, 'UTF8'); $password = substr($password, 0, 127) if length($password) > 127; } # test for the owner password my $sha = GetHash($password, substr($o,32,8), substr($u,0,48), $rev); if ($sha eq substr($o, 0, 32)) { $key = GetHash($password, substr($o,40,8), substr($u,0,48), $rev); my $dat = ("\0" x 16) . $parm{OE}; # decrypt with no padding my $err = Image::ExifTool::AES::Crypt(\$dat, $key, 0, 1); return $err if $err; $key = $dat; # use this as the file decryption key last; } # test for the user password $sha = GetHash($password, substr($u,32,8), '', $rev); if ($sha eq substr($u, 0, 32)) { $key = GetHash($password, substr($u,40,8), '', $rev); my $dat = ("\0" x 16) . $parm{UE}; my $err = Image::ExifTool::AES::Crypt(\$dat, $key, 0, 1); return $err if $err; $key = $dat; # use this as the file decryption key last; } } } $$encrypt{_key} = $key; # save the file-level encryption key $cryptInfo = $encrypt; # save reference to the file-level Encrypt object return undef; # success! } #------------------------------------------------------------------------------ # Decrypt/Encrypt data # Inputs: 0) data ref # 1) PDF object reference to use as crypt key extension (may be 'none' to # avoid extending the encryption key, as for streams with Crypt Filter) # 2) encrypt flag (false for decryption) sub Crypt($$;$) { return unless $cryptInfo; my ($dataPt, $keyExt, $encrypt) = @_; # do not decrypt if the key extension object is undefined # (this doubles as a flag to disable decryption/encryption) return unless defined $keyExt; my $key = $$cryptInfo{_key}; # apply the necessary crypt key extension unless ($$cryptInfo{_aesv3}) { unless ($keyExt eq 'none') { # extend crypt key using object and generation number unless ($keyExt =~ /^(I\d+ )?(\d+) (\d+)/) { $$cryptInfo{_error} = 'Invalid object reference for encryption'; return; } $key .= substr(pack('V', $2), 0, 3) . substr(pack('V', $3), 0, 2); } # add AES-128 salt if necessary (this little gem is conveniently # omitted from the Adobe PDF 1.6 documentation, causing me to # waste 12 hours trying to figure out why this wasn't working -- # it appears in ISO32000 though, so I should have been using that) $key .= 'sAlT' if $$cryptInfo{_aesv2}; my $len = length($key); $key = Digest::MD5::md5($key); # get 16-byte MD5 digest $key = substr($key, 0, $len) if $len < 16; # trim if necessary } # perform the decryption/encryption if ($$cryptInfo{_aesv2} or $$cryptInfo{_aesv3}) { require Image::ExifTool::AES; my $err = Image::ExifTool::AES::Crypt($dataPt, $key, $encrypt); $err and $$cryptInfo{_error} = $err; } else { RC4Crypt($dataPt, $key); } } #------------------------------------------------------------------------------ # Decrypt/Encrypt stream data # Inputs: 0) dictionary ref, 1) PDF object reference to use as crypt key extension sub CryptStream($$) { return unless $cryptStream; my ($dict, $keyExt) = @_; my $type = $$dict{Type} || ''; # XRef streams are not encrypted (ref 3, page 50), # and Metadata may or may not be encrypted if ($cryptInfo and $type ne '/XRef' and ($$cryptInfo{_meta} or $type ne '/Metadata')) { Crypt(\$$dict{_stream}, $keyExt, $$dict{_decrypted}); # toggle _decrypted flag $$dict{_decrypted} = ($$dict{_decrypted} ? undef : 1); } else { $$dict{_decrypted} = 0; # stream should never be encrypted } } #------------------------------------------------------------------------------ # Generate a new PDF tag (based on its ID) and add it to a tag table # Inputs: 0) tag table ref, 1) tag ID # Returns: tag info ref sub NewPDFTag($$) { my ($tagTablePtr, $tag) = @_; my $name = $tag; # translate URL-like escape sequences $name =~ s/#([0-9a-f]{2})/chr(hex($1))/ige; $name =~ s/[^-\w]+/_/g; # translate invalid characters to an underline $name =~ s/(^|_)([a-z])/\U$2/g; # start words with upper case my $tagInfo = { Name => $name }; AddTagToTable($tagTablePtr, $tag, $tagInfo); return $tagInfo; } #------------------------------------------------------------------------------ # Process AcroForm dictionary to set HasXMLFormsArchitecture flag # Inputs: Same as ProcessDict sub ProcessAcroForm($$$$;$$) { my ($et, $tagTablePtr, $dict, $xref, $nesting, $type) = @_; $et->HandleTag($tagTablePtr, '_has_xfa', $$dict{XFA} ? 'true' : 'false'); return ProcessDict($et, $tagTablePtr, $dict, $xref, $nesting, $type); } #------------------------------------------------------------------------------ # Process PDF dictionary extract tag values # Inputs: 0) ExifTool object reference, 1) tag table reference # 2) dictionary reference, 3) cross-reference table reference, # 4) nesting depth, 5) dictionary capture type sub ProcessDict($$$$;$$) { my ($et, $tagTablePtr, $dict, $xref, $nesting, $type) = @_; my $verbose = $et->Options('Verbose'); my $unknown = $$tagTablePtr{EXTRACT_UNKNOWN}; my $embedded = (defined $unknown and not $unknown and $et->Options('ExtractEmbedded')); my @tags = @{$$dict{_tags}}; my ($next, %join); my $index = 0; $nesting = ($nesting || 0) + 1; if ($nesting > 50) { $et->WarnOnce('Nesting too deep (directory ignored)'); return; } # save entire dictionary for rewriting if specified if ($$et{PDF_CAPTURE} and $$tagTablePtr{VARS} and $tagTablePtr->{VARS}->{CAPTURE}) { my $name; foreach $name (@{$tagTablePtr->{VARS}->{CAPTURE}}) { next if $$et{PDF_CAPTURE}{$name}; # make sure we load the right type if indicated next if $type and $type ne $name; $$et{PDF_CAPTURE}{$name} = $dict; last; } } # # extract information from all tags in the dictionary # for (;;) { my ($tag, $isSubDoc); if (@tags) { $tag = shift @tags; } elsif (defined $next and not $next) { $tag = 'Next'; $next = 1; } else { last; } my $val = $$dict{$tag}; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); if ($tagInfo) { undef $tagInfo if $$tagInfo{NoProcess}; } elsif ($embedded and $tag =~ /^(.*?)(\d+)$/ and $$tagTablePtr{$1} and (ref $val ne 'SCALAR' or not $fetched{$$val})) { my ($name, $num) = ($1, $2); $tagInfo = $et->GetTagInfo($tagTablePtr, $name); if (ref $tagInfo eq 'HASH' and $$tagInfo{JoinStreams}) { $fetched{$$val} = 1; my $obj = FetchObject($et, $$val, $xref, $tag); $join{$name} = [] unless $join{$name}; next unless ref $obj eq 'HASH' and $$obj{_stream}; # save all the stream data to join later DecodeStream($et, $obj); $join{$name}->[$num] = $$obj{_stream}; undef $tagInfo; # don't process } else { $isSubDoc = 1; # treat as a sub-document } } if ($verbose) { my ($val2, $extra); if (ref $val eq 'SCALAR') { $extra = ", indirect object ($$val)"; if ($fetched{$$val}) { $val2 = "ref($$val)"; } elsif ($tag eq 'Next' and not $next) { # handle 'Next' links after all others $next = 0; next; } else { $fetched{$$val} = 1; $val = FetchObject($et, $$val, $xref, $tag); unless (defined $val) { my $str; if (defined $lastOffset) { $val2 = '<free>'; $str = 'Object was freed'; } else { $val2 = '<err>'; $str = 'Error reading object'; } $et->VPrint(0, "$$et{INDENT}${str}:\n"); } } } elsif (ref $val eq 'HASH') { $extra = ', direct dictionary'; } elsif (ref $val eq 'ARRAY') { $extra = ', direct array of ' . scalar(@$val) . ' objects'; } else { $extra = ', direct object'; } my $isSubdir; if (ref $val eq 'HASH') { $isSubdir = 1; } elsif (ref $val eq 'ARRAY') { # recurse into objects in arrays only if they are lists of # dictionaries or indirect objects which could be dictionaries $isSubdir = 1 if @$val; foreach (@$val) { next if ref $_ eq 'HASH' or ref $_ eq 'SCALAR'; undef $isSubdir; last; } } if ($isSubdir) { # create bogus subdirectory to recurse into this dict $tagInfo or $tagInfo = { Name => $tag, SubDirectory => { TagTable => 'Image::ExifTool::PDF::Unknown' }, }; } else { if (ref $val eq 'ARRAY') { my @list = @$val; foreach (@list) { $_ = "ref($$_)" if ref $_ eq 'SCALAR'; $_ = '<undef>' unless defined $_; } $val2 = '[' . join(',',@list) . ']'; } # generate tag info if we will use it later if (not $tagInfo and defined $val and $unknown) { $tagInfo = NewPDFTag($tagTablePtr, $tag); } } $et->VerboseInfo($tag, $tagInfo, Value => $val2 || $val, Extra => $extra, Index => $index++, ); next unless defined $val; } unless ($tagInfo) { # add any tag found in Info dictionary to table next unless $unknown; $tagInfo = NewPDFTag($tagTablePtr, $tag); } # increment document number if necessary my ($oldDocNum, $oldNumTags); if ($isSubDoc) { $oldDocNum = $$et{DOC_NUM}; $oldNumTags = $$et{NUM_FOUND}; $$et{DOC_NUM} = ++$$et{DOC_COUNT}; } if ($$tagInfo{SubDirectory}) { # process the subdirectory my @subDicts; if (ref $val eq 'ARRAY') { @subDicts = @{$val}; } else { @subDicts = ( $val ); } # loop through all values of this tag for (;;) { my $subDict = shift @subDicts or last; # save last fetched object in case we fetch another one here my $prevFetched = $lastFetched; if (ref $subDict eq 'SCALAR') { # only fetch once (other copies are obsolete) next if $fetched{$$subDict}; if ($$tagInfo{IgnoreDuplicates}) { my $flag = "ProcessedPDF_$tag"; if ($$et{$flag}) { next if $et->WarnOnce("Ignored duplicate $tag dictionary", 2); } else { $$et{$flag} = 1; } } # load dictionary via an indirect reference $fetched{$$subDict} = 1; my $obj = FetchObject($et, $$subDict, $xref, $tag); unless (defined $obj) { unless (defined $lastOffset) { $et->Warn("Error reading $tag object ($$subDict)"); } next; } $subDict = $obj; } if (ref $subDict eq 'ARRAY') { # convert array of key/value pairs to a hash next if @$subDict < 2; my %hash = ( _tags => [] ); while (@$subDict >= 2) { my $key = shift @$subDict; $key =~ s/^\///; push @{$hash{_tags}}, $key; $hash{$key} = shift @$subDict; } $subDict = \%hash; } else { next unless ref $subDict eq 'HASH'; } # set flag to re-crypt all strings when rewriting if the dictionary # came from an encrypted stream $$subDict{_needCrypt}{'*'} = 1 unless $lastFetched; my $subTablePtr = GetTagTable($tagInfo->{SubDirectory}->{TagTable}); if (not $verbose) { my $proc = $$subTablePtr{PROCESS_PROC} || \&ProcessDict; &$proc($et, $subTablePtr, $subDict, $xref, $nesting); } elsif ($next) { # handle 'Next' links at this level to avoid deep recursion undef $next; $index = 0; $tagTablePtr = $subTablePtr; $dict = $subDict; @tags = @{$$subDict{_tags}}; $et->VerboseDir($tag, scalar(@tags)); } else { my $oldIndent = $$et{INDENT}; my $oldDir = $$et{DIR_NAME}; $$et{INDENT} .= '| '; $$et{DIR_NAME} = $tag; $et->VerboseDir($tag, scalar(@{$$subDict{_tags}})); ProcessDict($et, $subTablePtr, $subDict, $xref, $nesting); $$et{INDENT} = $oldIndent; $$et{DIR_NAME} = $oldDir; } $lastFetched = $prevFetched; } } else { # fetch object if necessary # (OS X 10.6 writes indirect objects in the Info dictionary!) if (ref $val eq 'SCALAR') { my $prevFetched = $lastFetched; # (note: fetching the same object multiple times is OK here) $val = FetchObject($et, $$val, $xref, $tag); if (defined $val) { $val = ReadPDFValue($val); # set flag to re-encrypt if necessary if rewritten $$dict{_needCrypt}{$tag} = ($lastFetched ? 0 : 1) if $cryptString; $lastFetched = $prevFetched; # restore last fetched object reference } } else { $val = ReadPDFValue($val); } # convert from UTF-16 (big endian) to UTF-8 or Latin if necessary # unless this is binary data (hex-encoded strings would not have been converted) if (ref $val) { if (ref $val eq 'ARRAY') { my $v; foreach $v (@$val) { $et->FoundTag($tagInfo, $v); } } } elsif (defined $val) { my $format = $$tagInfo{Format} || $$tagInfo{Writable} || 'string'; $val = ConvertPDFDate($val) if $format eq 'date'; if (not $$tagInfo{Binary} and $val =~ /[\x18-\x1f\x80-\xff]/) { # text string is already in Unicode if it starts with "\xfe\xff", # otherwise we must first convert from PDFDocEncoding $val = $et->Decode($val, ($val=~s/^\xfe\xff// ? 'UCS2' : 'PDFDoc'), 'MM'); } if ($$tagInfo{List} and not $$et{OPTIONS}{NoPDFList}) { # separate tokens in comma or whitespace delimited lists my @values = ($val =~ /,/) ? split /,+\s*/, $val : split ' ', $val; foreach $val (@values) { $et->FoundTag($tagInfo, $val); } } else { # a simple tag value $et->FoundTag($tagInfo, $val); } } } if ($isSubDoc) { # restore original document number $$et{DOC_NUM} = $oldDocNum; --$$et{DOC_COUNT} if $oldNumTags == $$et{NUM_FOUND}; } } # # extract information from joined streams if necessary # if (%join) { my ($tag, $i); foreach $tag (sort keys %join) { my $list = $join{$tag}; last unless defined $$list[1] and $$list[1] =~ /^%.*?([\x0d\x0a]*)/; my $buff = "%!PS-Adobe-3.0$1"; # add PS header with same line break for ($i=1; defined $$list[$i]; ++$i) { $buff .= $$list[$i]; undef $$list[$i]; # free memory } # increment document number for tags extracted from embedded EPS my $oldDocNum = $$et{DOC_NUM}; my $oldNumTags = $$et{NUM_FOUND}; $$et{DOC_NUM} = ++$$et{DOC_COUNT}; # extract PostScript information $et->HandleTag($tagTablePtr, $tag, $buff); $$et{DOC_NUM} = $oldDocNum; # revert document counter if we didn't add any new tags --$$et{DOC_COUNT} if $oldNumTags == $$et{NUM_FOUND}; delete $$et{DOC_NUM}; } } # # extract information from stream object if it exists (eg. Metadata stream) # for (;;) { # (cheap goto) last unless $$dict{_stream}; my $tag = '_stream'; # add Subtype (if it exists) to stream name and remove leading '/' ($tag = $$dict{Subtype} . $tag) =~ s/^\/// if $$dict{Subtype}; last unless $$tagTablePtr{$tag}; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag) or last; unless ($$tagInfo{SubDirectory}) { # don't build filter lists across different images delete $$et{LIST_TAGS}{$$tagTablePtr{Filter}}; # we arrive here only when extracting embedded images # - only extract known image types and ignore others my $filter = $$dict{Filter} || ''; $filter = @$filter[-1] if ref $filter eq 'ARRAY'; # (get last Filter type) my $result; if ($filter eq '/DCTDecode' or $filter eq '/JPXDecode') { DecodeStream($et, $dict) or last; # save the image itself $et->FoundTag($tagInfo, \$$dict{_stream}); # extract information from embedded image $result = $et->ExtractInfo(\$$dict{_stream}, { ReEntry => 1 }); } unless ($result) { $et->FoundTag('FileType', defined $result ? '(unknown)' : '(unsupported)'); } last; } # decode stream if necessary DecodeStream($et, $dict) or last; if ($verbose > 2) { $et->VPrint(2,"$$et{INDENT}$$et{DIR_NAME} stream data\n"); my %parms = ( Prefix => $$et{INDENT} ); $parms{MaxLen} = $verbose > 3 ? 1024 : 96 if $verbose < 5; HexDump(\$$dict{_stream}, undef, %parms); } # extract information from stream my %dirInfo = ( DataPt => \$$dict{_stream}, DataLen => length $$dict{_stream}, DirStart => 0, DirLen => length $$dict{_stream}, Parent => 'PDF', ); my $subTablePtr = GetTagTable($tagInfo->{SubDirectory}->{TagTable}); unless ($et->ProcessDirectory(\%dirInfo, $subTablePtr)) { $et->Warn("Error processing $$tagInfo{Name} information"); } last; } } #------------------------------------------------------------------------------ # Extract information from PDF file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 0 if not a PDF file, 1 on success, otherwise a negative error number sub ReadPDF($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $verbose = $et->Options('Verbose'); my ($buff, $encrypt, $id); # # validate PDF file # # (linearization dictionary must be in the first 1024 bytes of the file) $raf->Read($buff, 1024) >= 8 or return 0; $buff =~ /^%PDF-(\d+\.\d+)/ or return 0; $pdfVer = $1; $et->SetFileType(); # set the FileType tag $et->Warn("May not be able to read a PDF version $pdfVer file") if $pdfVer >= 2.0; # store PDFVersion tag my $tagTablePtr = GetTagTable('Image::ExifTool::PDF::Root'); $et->HandleTag($tagTablePtr, 'Version', $pdfVer); $tagTablePtr = GetTagTable('Image::ExifTool::PDF::Main'); # # check for a linearized PDF (only if reading) # my $capture = $$et{PDF_CAPTURE}; unless ($capture) { my $lin = 'false'; if ($buff =~ /<</g) { $buff = substr($buff, pos($buff) - 2); my $dict = ExtractObject($et, \$buff); if (ref $dict eq 'HASH' and $$dict{Linearized} and $$dict{L}) { if (not $$et{VALUE}{FileSize}) { undef $lin; # can't determine if it is linearized } elsif ($$dict{L} == $$et{VALUE}{FileSize}) { $lin = 'true'; } } } $et->HandleTag($tagTablePtr, '_linearized', $lin) if $lin; } # # read the xref tables referenced from startxref at the end of the file # my @xrefOffsets; $raf->Seek(0, 2) or return -2; # the %%EOF must occur within the last 1024 bytes of the file (PDF spec, appendix H) my $len = $raf->Tell(); $len = 1024 if $len > 1024; $raf->Seek(-$len, 2) or return -2; $raf->Read($buff, $len) == $len or return -3; # find the LAST xref table in the file (may be multiple %%EOF marks) $buff =~ /^.*startxref(\s+)(\d+)(\s+)%%EOF/s or return -4; my $ws = $1 . $3; my $xr = $2; push @xrefOffsets, $xr, 'Main'; # set input record separator local $/ = $ws =~ /(\x0d\x0a|\x0d|\x0a)/ ? $1 : "\x0a"; my (%xref, @mainDicts, %loaded, $mainFree); # initialize variables to capture when rewriting if ($capture) { $capture->{startxref} = $xr; $capture->{xref} = \%xref; $capture->{newline} = $/; $capture->{mainFree} = $mainFree = { }; } XRef: while (@xrefOffsets) { my $offset = shift @xrefOffsets; my $type = shift @xrefOffsets; next if $loaded{$offset}; # avoid infinite recursion unless ($raf->Seek($offset, 0)) { %loaded or return -5; $et->Warn('Bad offset for secondary xref table'); next; } # Note: care must be taken because ReadLine may read more than we want if # the newline sequence for this table is different than the rest of the file for (;;) { unless ($raf->ReadLine($buff)) { %loaded or return -6; $et->Warn('Bad offset for secondary xref table'); next XRef; } last if $buff =~/\S/; # skip blank lines } my $loadXRefStream; if ($buff =~ s/^\s*xref\s+//s) { # load xref table for (;;) { # read another line if necessary (skipping blank lines) $raf->ReadLine($buff) or return -6 until $buff =~ /\S/; last if $buff =~ s/^\s*trailer([\s<[(])/$1/s; $buff =~ s/^\s*(\d+)\s+(\d+)\s+//s or return -4; my ($start, $num) = ($1, $2); $raf->Seek(-length($buff), 1) or return -4; my $i; for ($i=0; $i<$num; ++$i) { $raf->Read($buff, 20) == 20 or return -6; $buff =~ /^\s*(\d{10}) (\d{5}) (f|n)/s or return -4; my $num = $start + $i; # save offset for newest copy of all objects # (or next object number for free objects) unless (defined $xref{$num}) { my ($offset, $gen) = (int($1), int($2)); $xref{$num} = $offset; if ($3 eq 'f') { # save free objects in last xref table for rewriting $$mainFree{$num} = [ $offset, $gen, 'f' ] if $mainFree; next; } # also save offset keyed by object reference string $xref{"$num $gen R"} = $offset; } } # (I have a sample from Adobe which has an empty xref table) # %xref or return -4; # xref table may not be empty $buff = ''; } undef $mainFree; # only do this for the last xref table } elsif ($buff =~ s/^\s*(\d+)\s+(\d+)\s+obj//s) { # this is a PDF-1.5 cross-reference stream dictionary $loadXRefStream = 1; } else { %loaded or return -4; $et->Warn('Invalid secondary xref table'); next; } my $mainDict = ExtractObject($et, \$buff, $raf, \%xref); unless (ref $mainDict eq 'HASH') { %loaded or return -8; $et->Warn('Error loading secondary dictionary'); next; } if ($loadXRefStream) { # decode and save our XRef stream from PDF-1.5 file # (but parse it later as required to save time) # Note: this technique can potentially result in an old object # being used if the file was incrementally updated and an older # object from an xref table was replaced by a newer object in an # xref stream. But doing so isn't a good idea (if allowed at all) # because a PDF 1.4 consumer would also make this same mistake. if ($$mainDict{Type} eq '/XRef' and $$mainDict{W} and @{$$mainDict{W}} > 2 and $$mainDict{Size} and DecodeStream($et, $mainDict)) { # create Index entry if it doesn't exist $$mainDict{Index} or $$mainDict{Index} = [ 0, $$mainDict{Size} ]; # create '_entry_size' entry for internal use my $w = $$mainDict{W}; my $size = 0; foreach (@$w) { $size += $_; } $$mainDict{_entry_size} = $size; # save this stream dictionary to use later if required $xref{dicts} = [] unless $xref{dicts}; push @{$xref{dicts}}, $mainDict; } else { %loaded or return -9; $et->Warn('Invalid xref stream in secondary dictionary'); } } $loaded{$offset} = 1; # load XRef stream in hybrid file if it exists push @xrefOffsets, $$mainDict{XRefStm}, 'XRefStm' if $$mainDict{XRefStm}; $encrypt = $$mainDict{Encrypt} if $$mainDict{Encrypt}; if ($$mainDict{ID} and ref $$mainDict{ID} eq 'ARRAY') { $id = ReadPDFValue($mainDict->{ID}->[0]); } push @mainDicts, $mainDict, $type; # load previous xref table if it exists push @xrefOffsets, $$mainDict{Prev}, 'Prev' if $$mainDict{Prev}; } # # extract encryption information if necessary # if ($encrypt) { if (ref $encrypt eq 'SCALAR') { $encrypt = FetchObject($et, $$encrypt, \%xref, 'Encrypt'); } # generate Encryption tag information my $err = DecryptInit($et, $encrypt, $id); if ($err) { $et->Warn($err); $$capture{Error} = $err if $capture; return -1; } } # # extract the information beginning with each of the main dictionaries # my $i = 0; my $num = (scalar @mainDicts) / 2; while (@mainDicts) { my $dict = shift @mainDicts; my $type = shift @mainDicts; if ($verbose) { ++$i; my $n = scalar(@{$$dict{_tags}}); $et->VPrint(0, "PDF dictionary ($i of $num) with $n entries:\n"); } ProcessDict($et, $tagTablePtr, $dict, \%xref, 0, $type); } # handle any decryption errors if ($encrypt) { my $err = $$encrypt{_error}; if ($err) { $et->Warn($err); $$capture{Error} = $err if $capture; return -1; } } return 1; } #------------------------------------------------------------------------------ # ReadPDF() warning strings for each error return value my %pdfWarning = ( # -1 is reserved as error return value with no associated warning -2 => 'Error seeking in file', -3 => 'Error reading file', -4 => 'Invalid xref table', -5 => 'Invalid xref offset', -6 => 'Error reading xref table', -7 => 'Error reading trailer', -8 => 'Error reading main dictionary', -9 => 'Invalid xref stream in main dictionary', ); #------------------------------------------------------------------------------ # Extract information from PDF file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 if this was a valid PDF file sub ProcessPDF($$) { my ($et, $dirInfo) = @_; undef $cryptInfo; # (must not delete after returning so writer can use it) undef $cryptStream; undef $cryptString; my $result = ReadPDF($et, $dirInfo); if ($result < 0) { $et->Warn($pdfWarning{$result}) if $pdfWarning{$result}; $result = 1; } # clean up and return undef %streamObjs; undef %fetched; return $result; } 1; # end __END__ =head1 NAME Image::ExifTool::PDF - Read PDF meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This code reads meta information from PDF (Adobe Portable Document Format) files. It supports object streams introduced in PDF-1.5 but only with a limited set of Filter and Predictor algorithms, however all standard encryption methods through PDF-1.7 extension level 3 are supported, including AESV2 (AES-128) and AESV3 (AES-256). =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://partners.adobe.com/public/developer/pdf/index_reference.html> =item L<Crypt::RC4|Crypt::RC4> =item L<http://www.adobe.com/devnet/acrobat/pdfs/PDF32000_2008.pdf> =item L<http://www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/adobe_supplement_iso32000.pdf> =item L<http://tools.ietf.org/search/rfc3454> =item L<http://www.armware.dk/RFC/rfc/rfc4013.html> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/PDF Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Pentax.pm���������������������������������������������������000644 �000765 �000024 �00000635633 12643476374 021541� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Pentax.pm # # Description: Pentax/Asahi EXIF maker notes tags # # Revisions: 11/25/2003 - P. Harvey Created # 02/10/2004 - P. Harvey Completely re-done # 02/16/2004 - W. Smith Updated (see ref 3) # 11/10/2004 - P. Harvey Added support for Asahi cameras # 01/10/2005 - P. Harvey Added LensType with values from ref 4 # 03/30/2005 - P. Harvey Added new tags from ref 5 # 10/04/2005 - P. Harvey Added MOV tags # 10/22/2007 - P. Harvey Got my new K10D! (more new tags to decode) # 11/03/2010 - P. Harvey Got my new K-5! (a gold mine of new tags to discover!) # # References: 1) Image::MakerNotes::Pentax # 2) http://johnst.org/sw/exiftags/ (Asahi cameras) # 3) Wayne Smith private communication (Optio 550) # 4) http://kobe1995.jp/~kaz/astro/istD.html # 5) John Francis (http://www.panix.com/~johnf/raw/index.html) (ist-D/ist-DS) # 6) http://www.cybercom.net/~dcoffin/dcraw/ # 7) Douglas O'Brien private communication (*istD, K10D) # 8) Denis Bourez private communication # 9) Kazumichi Kawabata private communication # 10) David Buret private communication (*istD) # 11) http://forums.dpreview.com/forums/read.asp?forum=1036&message=17465929 # 12) Derby Chang private communication # 13) http://homepage3.nifty.com/kamisaka/makernote/makernote_pentax.htm (2007/02/28) # 14) Ger Vermeulen private communication (Optio S6) # 15) Barney Garrett private communication (Samsung GX-1S) # 16) Axel Kellner private communication (K10D) # 17) Cvetan Ivanov private communication (K100D) # 18) http://gvsoft.homedns.org/exif/makernote-pentax-type3.html # 19) Dave Nicholson private communication (K10D) # 20) Bogdan and yeryry (http://www.cpanforum.com/posts/8037) # 21) Peter (*istD, http://www.cpanforum.com/posts/8078) # 22) Bozi (K10D, http://www.cpanforum.com/posts/8480) # 23) Akos Szalkai (https://rt.cpan.org/Ticket/Display.html?id=43743) # 24) Albert Bogner private communication # 25) Niels Kristian Bech Jensen private communication # 26) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3444.0.html # 27) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3833.0.html # 28) Klaus Homeister http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4803.0.html # 29) Louis Granboulan private communication (K-5II) # 30) http://u88.n24.queensu.ca/exiftool/forum/index.php?topic=5433 # 31) Iliah Borg private communication (LibRaw) # JD) Jens Duttke private communication # # Notes: See POD documentation at the bottom of this file #------------------------------------------------------------------------------ package Image::ExifTool::Pentax; use strict; use vars qw($VERSION %pentaxLensTypes); use Image::ExifTool::Exif; use Image::ExifTool::HP; $VERSION = '2.99'; sub CryptShutterCount($$); sub PrintFilter($$$); # pentax lens type codes (ref 4) # The first number gives the lens series, and the 2nd gives the model number # Series numbers: K=1; A=2; F=3; FAJ=4; DFA=4,7; FA=3,4,5,6; FA*=5,6; # DA=3,4,7; DA*=7,8; FA645=11; DFA645=13; Q=21 %pentaxLensTypes = ( Notes => q{ The first number gives the series of the lens, and the second identifies the lens model. Note that newer series numbers may not always be properly identified by cameras running older firmware versions. Decimal values have been added to differentiate lenses which would otherwise have the same LensType, and are used by the Composite LensID tag when attempting to identify the specific lens model. }, OTHER => sub { my ($val, $inv, $conv) = @_; return undef if $inv; # *istD may report a series number of 4 for series 7 lenses $val =~ s/^4 /7 / and $$conv{$val} and return "$$conv{$val} ($_[0])"; # cameras that don't recognize SDM lenses (eg. older K10 firmware) # may report series 7 instead of 8 $val =~ s/^7 /8 / and $$conv{$val} and return "$$conv{$val} ? ($_[0])"; # there seems to some inconsistency between FA and DFA lenses for the 645D... ($val =~ s/^11 /13 / or $val =~ s/^13 /11 /) and $$conv{$val} and return "$$conv{$val} ? ($_[0])"; return undef; }, '0 0' => 'M-42 or No Lens', #17 '1 0' => 'K or M Lens', '2 0' => 'A Series Lens', #7 (from smc PENTAX-A 400mm F5.6) '3 0' => 'Sigma', # (includes 'Sigma 30mm F1.4 EX DC' - PH) # (and 'Sigma 105mm F2.8 EX DG Macro', ref 24) # (and 'Sigma 18-50mm F2.8 EX Macro') # (and 'Sigma 180mm F4.5 EX DG Macro') # (and 'Sigma 70mm F2.8 EX DG Macro') # (and 'Sigma 50-500mm F4-6.3 DG APO') '3 17' => 'smc PENTAX-FA SOFT 85mm F2.8', '3 18' => 'smc PENTAX-F 1.7X AF ADAPTER', '3 19' => 'smc PENTAX-F 24-50mm F4', '3 20' => 'smc PENTAX-F 35-80mm F4-5.6', '3 21' => 'smc PENTAX-F 80-200mm F4.7-5.6', '3 22' => 'smc PENTAX-F FISH-EYE 17-28mm F3.5-4.5', '3 23' => 'smc PENTAX-F 100-300mm F4.5-5.6 or Sigma Lens', '3 23.1' => 'Sigma AF 28-300mm F3.5-5.6 DL IF', #JD '3 23.2' => 'Sigma AF 28-300mm F3.5-6.3 DG IF Macro', #JD '3 23.3' => 'Tokina 80-200mm F2.8 ATX-Pro', #Exiv2 '3 24' => 'smc PENTAX-F 35-135mm F3.5-4.5', '3 25' => 'smc PENTAX-F 35-105mm F4-5.6 or Sigma or Tokina Lens', '3 25.1' => 'Sigma AF 28-300mm F3.5-5.6 DL IF', #11 '3 25.2' => 'Sigma 55-200mm F4-5.6 DC', #JD '3 25.3' => 'Sigma AF 28-300mm F3.5-6.3 DL IF', #Exiv2 '3 25.4' => 'Sigma AF 28-300mm F3.5-6.3 DG IF Macro', #JD '3 25.5' => 'Tokina 80-200mm F2.8 ATX-Pro', #12 '3 26' => 'smc PENTAX-F* 250-600mm F5.6 ED[IF]', '3 27' => 'smc PENTAX-F 28-80mm F3.5-4.5 or Tokina Lens', '3 27.1' => 'Tokina AT-X Pro AF 28-70mm F2.6-2.8', #JD '3 28' => 'smc PENTAX-F 35-70mm F3.5-4.5 or Tokina Lens', '3 28.1' => 'Tokina 19-35mm F3.5-4.5 AF', #12 '3 28.2' => 'Tokina AT-X AF 400mm F5.6', #25 '3 29' => 'PENTAX-F 28-80mm F3.5-4.5 or Sigma or Tokina Lens', '3 29.1' => 'Sigma AF 18-125mm F3.5-5.6 DC', #11 '3 29.2' => 'Tokina AT-X PRO 28-70mm F2.6-2.8', #22 '3 30' => 'PENTAX-F 70-200mm F4-5.6', '3 31' => 'smc PENTAX-F 70-210mm F4-5.6 or Tokina or Takumar Lens', '3 31.1' => 'Tokina AF 730 75-300mm F4.5-5.6', '3 31.2' => 'Takumar-F 70-210mm F4-5.6', #JD '3 32' => 'smc PENTAX-F 50mm F1.4', '3 33' => 'smc PENTAX-F 50mm F1.7', '3 34' => 'smc PENTAX-F 135mm F2.8 [IF]', '3 35' => 'smc PENTAX-F 28mm F2.8', '3 36' => 'Sigma 20mm F1.8 EX DG Aspherical RF', '3 38' => 'smc PENTAX-F* 300mm F4.5 ED[IF]', '3 39' => 'smc PENTAX-F* 600mm F4 ED[IF]', '3 40' => 'smc PENTAX-F Macro 100mm F2.8', '3 41' => 'smc PENTAX-F Macro 50mm F2.8 or Sigma Lens', #4 '3 41.1' => 'Sigma 50mm F2.8 Macro', #16 '3 42' => 'Sigma 300mm F2.8 EX DG APO IF', #27 '3 44' => 'Sigma or Tamron Lens (3 44)', '3 44.1' => 'Sigma AF 10-20mm F4-5.6 EX DC', #JD '3 44.2' => 'Sigma 12-24mm F4.5-5.6 EX DG', #12 (added "-5.6", ref 29) '3 44.3' => 'Sigma 17-70mm F2.8-4.5 DC Macro', #(Bart Hickman) '3 44.4' => 'Sigma 18-50mm F3.5-5.6 DC', #4 '3 44.5' => 'Tamron 35-90mm F4 AF', #12 '3 46' => 'Sigma or Samsung Lens (3 46)', '3 46.1' => 'Sigma APO 70-200mm F2.8 EX', '3 46.2' => 'Sigma EX APO 100-300mm F4 IF', #JD '3 46.3' => 'Samsung/Schneider D-XENON 50-200mm F4-5.6 ED', #29 '3 50' => 'smc PENTAX-FA 28-70mm F4 AL', '3 51' => 'Sigma 28mm F1.8 EX DG Aspherical Macro', '3 52' => 'smc PENTAX-FA 28-200mm F3.8-5.6 AL[IF] or Tamron Lens', '3 52.1' => 'Tamron AF LD 28-200mm F3.8-5.6 [IF] Aspherical (171D)', #JD '3 53' => 'smc PENTAX-FA 28-80mm F3.5-5.6 AL', '3 247' => 'smc PENTAX-DA FISH-EYE 10-17mm F3.5-4.5 ED[IF]', '3 248' => 'smc PENTAX-DA 12-24mm F4 ED AL[IF]', '3 250' => 'smc PENTAX-DA 50-200mm F4-5.6 ED', '3 251' => 'smc PENTAX-DA 40mm F2.8 Limited', '3 252' => 'smc PENTAX-DA 18-55mm F3.5-5.6 AL', '3 253' => 'smc PENTAX-DA 14mm F2.8 ED[IF]', '3 254' => 'smc PENTAX-DA 16-45mm F4 ED AL', '3 255' => 'Sigma Lens (3 255)', '3 255.1' => 'Sigma 18-200mm F3.5-6.3 DC', #8 '3 255.2' => 'Sigma DL-II 35-80mm F4-5.6', #12 '3 255.3' => 'Sigma DL Zoom 75-300mm F4-5.6', #12 '3 255.4' => 'Sigma DF EX Aspherical 28-70mm F2.8', #12 '3 255.5' => 'Sigma AF Tele 400mm F5.6 Multi-coated', #JD '3 255.6' => 'Sigma 24-60mm F2.8 EX DG', #PH '3 255.7' => 'Sigma 70-300mm F4-5.6 Macro', #JD '3 255.8' => 'Sigma 55-200mm F4-5.6 DC', #JD '3 255.9' => 'Sigma 18-50mm F2.8 EX DC', #JD (also Macro version - PH) '4 1' => 'smc PENTAX-FA SOFT 28mm F2.8', '4 2' => 'smc PENTAX-FA 80-320mm F4.5-5.6', '4 3' => 'smc PENTAX-FA 43mm F1.9 Limited', '4 6' => 'smc PENTAX-FA 35-80mm F4-5.6', '4 12' => 'smc PENTAX-FA 50mm F1.4', #17 '4 15' => 'smc PENTAX-FA 28-105mm F4-5.6 [IF]', '4 16' => 'Tamron AF 80-210mm F4-5.6 (178D)', #13 '4 19' => 'Tamron SP AF 90mm F2.8 (172E)', '4 20' => 'smc PENTAX-FA 28-80mm F3.5-5.6', '4 21' => 'Cosina AF 100-300mm F5.6-6.7', #20 '4 22' => 'Tokina 28-80mm F3.5-5.6', #13 '4 23' => 'smc PENTAX-FA 20-35mm F4 AL', '4 24' => 'smc PENTAX-FA 77mm F1.8 Limited', '4 25' => 'Tamron SP AF 14mm F2.8', #13 '4 26' => 'smc PENTAX-FA Macro 100mm F3.5 or Cosina Lens', '4 26.1' => 'Cosina 100mm F3.5 Macro', #JD '4 27' => 'Tamron AF 28-300mm F3.5-6.3 LD Aspherical[IF] Macro (185D/285D)', '4 28' => 'smc PENTAX-FA 35mm F2 AL', '4 29' => 'Tamron AF 28-200mm F3.8-5.6 LD Super II Macro (371D)', #JD '4 34' => 'smc PENTAX-FA 24-90mm F3.5-4.5 AL[IF]', '4 35' => 'smc PENTAX-FA 100-300mm F4.7-5.8', # '4 36' => 'Tamron AF70-300mm F4-5.6 LD Macro', # both 572D and A17 (Di) - ref JD '4 36' => 'Tamron AF 70-300mm F4-5.6 LD Macro 1:2', #25 '4 37' => 'Tamron SP AF 24-135mm F3.5-5.6 AD AL (190D)', #13 '4 38' => 'smc PENTAX-FA 28-105mm F3.2-4.5 AL[IF]', '4 39' => 'smc PENTAX-FA 31mm F1.8 AL Limited', '4 41' => 'Tamron AF 28-200mm Super Zoom F3.8-5.6 Aspherical XR [IF] Macro (A03)', '4 43' => 'smc PENTAX-FA 28-90mm F3.5-5.6', '4 44' => 'smc PENTAX-FA J 75-300mm F4.5-5.8 AL', '4 45' => 'Tamron Lens (4 45)', '4 45.1' => 'Tamron 28-300mm F3.5-6.3 Ultra zoom XR', '4 45.2' => 'Tamron AF 28-300mm F3.5-6.3 XR Di LD Aspherical [IF] Macro', #JD '4 46' => 'smc PENTAX-FA J 28-80mm F3.5-5.6 AL', '4 47' => 'smc PENTAX-FA J 18-35mm F4-5.6 AL', #'4 49' => 'Tamron SP AF 28-75mm F2.8 XR Di (A09)', '4 49' => 'Tamron SP AF 28-75mm F2.8 XR Di LD Aspherical [IF] Macro', #25 '4 51' => 'smc PENTAX-D FA 50mm F2.8 Macro', '4 52' => 'smc PENTAX-D FA 100mm F2.8 Macro', '4 55' => 'Samsung/Schneider D-XENOGON 35mm F2', #29 '4 56' => 'Samsung/Schneider D-XENON 100mm F2.8 Macro', #Alan Robinson '4 75' => 'Tamron SP AF 70-200mm F2.8 Di LD [IF] Macro (A001)', #JD '4 214' => 'smc PENTAX-DA 35mm F2.4 AL', #PH '4 229' => 'smc PENTAX-DA 18-55mm F3.5-5.6 AL II', #JD '4 230' => 'Tamron SP AF 17-50mm F2.8 XR Di II', #20 '4 231' => 'smc PENTAX-DA 18-250mm F3.5-6.3 ED AL [IF]', #21 '4 237' => 'Samsung/Schneider D-XENOGON 10-17mm F3.5-4.5', #JD '4 239' => 'Samsung/Schneider D-XENON 12-24mm F4 ED AL [IF]', #23 '4 242' => 'smc PENTAX-DA* 16-50mm F2.8 ED AL [IF] SDM (SDM unused)', #Pietu Pohjalainen '4 243' => 'smc PENTAX-DA 70mm F2.4 Limited', #JD '4 244' => 'smc PENTAX-DA 21mm F3.2 AL Limited', #9 '4 245' => 'Samsung/Schneider D-XENON 50-200mm F4-5.6', #15 '4 246' => 'Samsung/Schneider D-XENON 18-55mm F3.5-5.6', #15 '4 247' => 'smc PENTAX-DA FISH-EYE 10-17mm F3.5-4.5 ED[IF]', #10 '4 248' => 'smc PENTAX-DA 12-24mm F4 ED AL [IF]', #10 '4 249' => 'Tamron XR DiII 18-200mm F3.5-6.3 (A14)', '4 250' => 'smc PENTAX-DA 50-200mm F4-5.6 ED', #8 '4 251' => 'smc PENTAX-DA 40mm F2.8 Limited', #9 '4 252' => 'smc PENTAX-DA 18-55mm F3.5-5.6 AL', #8 '4 253' => 'smc PENTAX-DA 14mm F2.8 ED[IF]', '4 254' => 'smc PENTAX-DA 16-45mm F4 ED AL', '5 1' => 'smc PENTAX-FA* 24mm F2 AL[IF]', '5 2' => 'smc PENTAX-FA 28mm F2.8 AL', '5 3' => 'smc PENTAX-FA 50mm F1.7', '5 4' => 'smc PENTAX-FA 50mm F1.4', '5 5' => 'smc PENTAX-FA* 600mm F4 ED[IF]', '5 6' => 'smc PENTAX-FA* 300mm F4.5 ED[IF]', '5 7' => 'smc PENTAX-FA 135mm F2.8 [IF]', '5 8' => 'smc PENTAX-FA Macro 50mm F2.8', '5 9' => 'smc PENTAX-FA Macro 100mm F2.8', '5 10' => 'smc PENTAX-FA* 85mm F1.4 [IF]', '5 11' => 'smc PENTAX-FA* 200mm F2.8 ED[IF]', '5 12' => 'smc PENTAX-FA 28-80mm F3.5-4.7', '5 13' => 'smc PENTAX-FA 70-200mm F4-5.6', '5 14' => 'smc PENTAX-FA* 250-600mm F5.6 ED[IF]', '5 15' => 'smc PENTAX-FA 28-105mm F4-5.6', '5 16' => 'smc PENTAX-FA 100-300mm F4.5-5.6', '5 98' => 'smc PENTAX-FA 100-300mm F4.5-5.6', #JD (pre-production? - PH) '6 1' => 'smc PENTAX-FA* 85mm F1.4 [IF]', '6 2' => 'smc PENTAX-FA* 200mm F2.8 ED[IF]', '6 3' => 'smc PENTAX-FA* 300mm F2.8 ED[IF]', '6 4' => 'smc PENTAX-FA* 28-70mm F2.8 AL', '6 5' => 'smc PENTAX-FA* 80-200mm F2.8 ED[IF]', '6 6' => 'smc PENTAX-FA* 28-70mm F2.8 AL', '6 7' => 'smc PENTAX-FA* 80-200mm F2.8 ED[IF]', '6 8' => 'smc PENTAX-FA 28-70mm F4AL', '6 9' => 'smc PENTAX-FA 20mm F2.8', '6 10' => 'smc PENTAX-FA* 400mm F5.6 ED[IF]', '6 13' => 'smc PENTAX-FA* 400mm F5.6 ED[IF]', '6 14' => 'smc PENTAX-FA* Macro 200mm F4 ED[IF]', '7 0' => 'smc PENTAX-DA 21mm F3.2 AL Limited', #13 '7 58' => 'smc PENTAX-D FA Macro 100mm F2.8 WR', #PH - this bit of information cost me $600 ;) '7 75' => 'Tamron SP AF 70-200mm F2.8 Di LD [IF] Macro (A001)', #(Anton Bondar) '7 201' => 'smc Pentax-DA L 50-200mm F4-5.6 ED WR', #(Bruce Rusk) '7 202' => 'smc PENTAX-DA L 18-55mm F3.5-5.6 AL WR', #29 '7 203' => 'HD PENTAX-DA 55-300mm F4-5.8 ED WR', #29 '7 204' => 'HD PENTAX-DA 15mm F4 ED AL Limited', #forum5318 '7 205' => 'HD PENTAX-DA 35mm F2.8 Macro Limited', #29 '7 206' => 'HD PENTAX-DA 70mm F2.4 Limited', #29 '7 207' => 'HD PENTAX-DA 21mm F3.2 ED AL Limited', #forum5327 '7 208' => 'HD PENTAX-DA 40mm F2.8 Limited', #PH '7 212' => 'smc PENTAX-DA 50mm F1.8', #PH '7 213' => 'smc PENTAX-DA 40mm F2.8 XS', #PH '7 214' => 'smc PENTAX-DA 35mm F2.4 AL', #PH '7 216' => 'smc PENTAX-DA L 55-300mm F4-5.8 ED', #PH '7 217' => 'smc PENTAX-DA 50-200mm F4-5.6 ED WR', #JD '7 218' => 'smc PENTAX-DA 18-55mm F3.5-5.6 AL WR', #JD '7 220' => 'Tamron SP AF 10-24mm F3.5-4.5 Di II LD Aspherical [IF]', #24 '7 221' => 'smc PENTAX-DA L 50-200mm F4-5.6 ED', #Ar't '7 222' => 'smc PENTAX-DA L 18-55mm F3.5-5.6', #PH (tag 0x003f -- was '7 229' in LensInfo of one test image) '7 223' => 'Samsung/Schneider D-XENON 18-55mm F3.5-5.6 II', #PH '7 224' => 'smc PENTAX-DA 15mm F4 ED AL Limited', #JD '7 225' => 'Samsung/Schneider D-XENON 18-250mm F3.5-6.3', #8/PH '7 226' => 'smc PENTAX-DA* 55mm F1.4 SDM (SDM unused)', #PH (NC) '7 227' => 'smc PENTAX-DA* 60-250mm F4 [IF] SDM (SDM unused)', #PH (NC) '7 228' => 'Samsung 16-45mm F4 ED', #29 '7 229' => 'smc PENTAX-DA 18-55mm F3.5-5.6 AL II', #JD '7 230' => 'Tamron AF 17-50mm F2.8 XR Di-II LD (Model A16)', #JD '7 231' => 'smc PENTAX-DA 18-250mm F3.5-6.3 ED AL [IF]', #JD '7 233' => 'smc PENTAX-DA 35mm F2.8 Macro Limited', #JD '7 234' => 'smc PENTAX-DA* 300mm F4 ED [IF] SDM (SDM unused)', #19 (NC) '7 235' => 'smc PENTAX-DA* 200mm F2.8 ED [IF] SDM (SDM unused)', #PH (NC) '7 236' => 'smc PENTAX-DA 55-300mm F4-5.8 ED', #JD '7 238' => 'Tamron AF 18-250mm F3.5-6.3 Di II LD Aspherical [IF] Macro', #JD '7 241' => 'smc PENTAX-DA* 50-135mm F2.8 ED [IF] SDM (SDM unused)', #PH '7 242' => 'smc PENTAX-DA* 16-50mm F2.8 ED AL [IF] SDM (SDM unused)', #19 '7 243' => 'smc PENTAX-DA 70mm F2.4 Limited', #PH '7 244' => 'smc PENTAX-DA 21mm F3.2 AL Limited', #16 '8 0' => 'Sigma 50-150mm F2.8 II APO EX DC HSM', #forum2997 '8 3' => 'Sigma AF 18-125mm F3.5-5.6 DC', #29 '8 4' => 'Sigma 50mm F1.4 EX DG HSM', #Artur private communication '8 7' => 'Sigma 24-70mm F2.8 IF EX DG HSM', #Exiv2 '8 8' => 'Sigma 18-250mm F3.5-6.3 DC OS HSM', #27 '8 11' => 'Sigma 10-20mm F3.5 EX DC HSM', #27 '8 12' => 'Sigma 70-300mm F4-5.6 DG OS', #forum3382 '8 13' => 'Sigma 120-400mm F4.5-5.6 APO DG OS HSM', #26 '8 14' => 'Sigma 17-70mm F2.8-4.0 DC Macro OS HSM', #(Hubert Meier) '8 15' => 'Sigma 150-500mm F5-6.3 APO DG OS HSM', #26 '8 16' => 'Sigma 70-200mm F2.8 EX DG Macro HSM II', #26 '8 17' => 'Sigma 50-500mm F4.5-6.3 DG OS HSM', #(Heike Herrmann) (also APO, ref 26) '8 18' => 'Sigma 8-16mm F4.5-5.6 DC HSM', #forum2998 '8 21' => 'Sigma 17-50mm F2.8 EX DC OS HSM', #26 '8 22' => 'Sigma 85mm F1.4 EX DG HSM', #26 '8 23' => 'Sigma 70-200mm F2.8 APO EX DG OS HSM', #27 '8 25' => 'Sigma 17-50mm F2.8 EX DC HSM', #Exiv2 '8 27' => 'Sigma 18-200mm F3.5-6.3 II DC HSM', #27 '8 28' => 'Sigma 18-250mm F3.5-6.3 DC Macro HSM', #27 '8 29' => 'Sigma 35mm F1.4 DG HSM', #27 '8 30' => 'Sigma 17-70mm F2.8-4 DC Macro HSM Contemporary', #27 '8 31' => 'Sigma 18-35mm F1.8 DC HSM', #27 '8 32' => 'Sigma 30mm F1.4 DC HSM | A', #27 '8 34' => 'Sigma 18-300mm F3.5-6.3 DC Macro HSM', #25 '8 59' => 'HD PENTAX-D FA 150-450mm F4.5-5.6 ED DC AW', #29 '8 60' => 'HD PENTAX-D FA* 70-200mm F2.8 ED DC AW', #29 '8 62' => 'HD PENTAX-D FA 24-70mm F2.8 ED SDM WR', #PH '8 198' => 'smc PENTAX-DA L 18-50mm F4-5.6 DC WR RE', #29 '8 199' => 'HD PENTAX-DA 18-50mm F4-5.6 DC WR RE', #29 '8 200' => 'HD PENTAX-DA 16-85mm F3.5-5.6 ED DC WR', #29 '8 209' => 'HD PENTAX-DA 20-40mm F2.8-4 ED Limited DC WR', #29 '8 210' => 'smc PENTAX-DA 18-270mm F3.5-6.3 ED SDM', #Helmut Schutz '8 211' => 'HD PENTAX-DA 560mm F5.6 ED AW', #PH '8 215' => 'smc PENTAX-DA 18-135mm F3.5-5.6 ED AL [IF] DC WR', #PH '8 226' => 'smc PENTAX-DA* 55mm F1.4 SDM', #JD '8 227' => 'smc PENTAX-DA* 60-250mm F4 [IF] SDM', #JD '8 232' => 'smc PENTAX-DA 17-70mm F4 AL [IF] SDM', #JD '8 234' => 'smc PENTAX-DA* 300mm F4 ED [IF] SDM', #19 '8 235' => 'smc PENTAX-DA* 200mm F2.8 ED [IF] SDM', #JD '8 241' => 'smc PENTAX-DA* 50-135mm F2.8 ED [IF] SDM', #JD '8 242' => 'smc PENTAX-DA* 16-50mm F2.8 ED AL [IF] SDM', #JD '8 255' => 'Sigma Lens (8 255)', '8 255.1' => 'Sigma 70-200mm F2.8 EX DG Macro HSM II', #JD '8 255.2' => 'Sigma 150-500mm F5-6.3 DG APO [OS] HSM', #JD (non-OS version has same type, ref 29) '8 255.3' => 'Sigma 50-150mm F2.8 II APO EX DC HSM', #forum2997 '8 255.4' => 'Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye', #PH '8 255.5' => 'Sigma 50-200mm F4-5.6 DC OS', #26 '8 255.6' => 'Sigma 24-70mm F2.8 EX DG HSM', #29 # # 645 lenses # '9 0' => '645 Manual Lens', #PH (NC) '10 0' => '645 A Series Lens', #PH '11 1' => 'smc PENTAX-FA 645 75mm F2.8', #PH '11 2' => 'smc PENTAX-FA 645 45mm F2.8', #PH '11 3' => 'smc PENTAX-FA* 645 300mm F4 ED [IF]', #PH '11 4' => 'smc PENTAX-FA 645 45-85mm F4.5', #PH '11 5' => 'smc PENTAX-FA 645 400mm F5.6 ED [IF]', #PH '11 7' => 'smc PENTAX-FA 645 Macro 120mm F4', #PH '11 8' => 'smc PENTAX-FA 645 80-160mm F4.5', #PH '11 9' => 'smc PENTAX-FA 645 200mm F4 [IF]', #PH '11 10' => 'smc PENTAX-FA 645 150mm F2.8 [IF]', #PH '11 11' => 'smc PENTAX-FA 645 35mm F3.5 AL [IF]', #PH '11 12' => 'smc PENTAX-FA 645 300mm F5.6 ED [IF]', #29 '11 14' => 'smc PENTAX-FA 645 55-110mm F5.6', #PH '11 16' => 'smc PENTAX-FA 645 33-55mm F4.5 AL', #PH '11 17' => 'smc PENTAX-FA 645 150-300mm F5.6 ED [IF]', #PH '11 21' => 'HD PENTAX-D FA 645 35mm F3.5 AL [IF]', #29 '13 18' => 'smc PENTAX-D FA 645 55mm F2.8 AL [IF] SDM AW', #PH '13 19' => 'smc PENTAX-D FA 645 25mm F4 AL [IF] SDM AW', #PH '13 20' => 'HD PENTAX-D FA 645 90mm F2.8 ED AW SR', #PH '13 253' => 'HD PENTAX-DA 645 28-45mm F4.5 ED AW SR', #Dominique Schrekling email # missing: # 'smc PENTAX-DA 645 25mm F4.0 AL SDM AW [IF]' ? different than D FA version? # # Q-mount lenses (21=auto focus lens, 22=manual focus) # '21 0' => 'Pentax Q Manual Lens', #PH '21 1' => '01 Standard Prime 8.5mm F1.9', #PH '21 2' => '02 Standard Zoom 5-15mm F2.8-4.5', #PH '22 3' => '03 Fish-eye 3.2mm F5.6', #PH '22 4' => '04 Toy Lens Wide 6.3mm F7.1', #PH '22 5' => '05 Toy Lens Telephoto 18mm F8', #PH '21 6' => '06 Telephoto Zoom 15-45mm F2.8', #PH '21 7' => '07 Mount Shield 11.5mm F9', #PH (NC) '21 8' => '08 Wide Zoom 3.8-5.9mm F3.7-4', #PH (NC) ); # Pentax model ID codes - PH my %pentaxModelID = ( 0x0000d => 'Optio 330/430', 0x12926 => 'Optio 230', 0x12958 => 'Optio 330GS', 0x12962 => 'Optio 450/550', 0x1296c => 'Optio S', 0x12971 => 'Optio S V1.01', 0x12994 => '*ist D', 0x129b2 => 'Optio 33L', 0x129bc => 'Optio 33LF', 0x129c6 => 'Optio 33WR/43WR/555', 0x129d5 => 'Optio S4', 0x12a02 => 'Optio MX', 0x12a0c => 'Optio S40', 0x12a16 => 'Optio S4i', 0x12a34 => 'Optio 30', 0x12a52 => 'Optio S30', 0x12a66 => 'Optio 750Z', 0x12a70 => 'Optio SV', 0x12a75 => 'Optio SVi', 0x12a7a => 'Optio X', 0x12a8e => 'Optio S5i', 0x12a98 => 'Optio S50', 0x12aa2 => '*ist DS', 0x12ab6 => 'Optio MX4', 0x12ac0 => 'Optio S5n', 0x12aca => 'Optio WP', 0x12afc => 'Optio S55', 0x12b10 => 'Optio S5z', 0x12b1a => '*ist DL', 0x12b24 => 'Optio S60', 0x12b2e => 'Optio S45', 0x12b38 => 'Optio S6', 0x12b4c => 'Optio WPi', #13 0x12b56 => 'BenQ DC X600', 0x12b60 => '*ist DS2', 0x12b62 => 'Samsung GX-1S', 0x12b6a => 'Optio A10', 0x12b7e => '*ist DL2', 0x12b80 => 'Samsung GX-1L', 0x12b9c => 'K100D', 0x12b9d => 'K110D', 0x12ba2 => 'K100D Super', #JD 0x12bb0 => 'Optio T10/T20', 0x12be2 => 'Optio W10', 0x12bf6 => 'Optio M10', 0x12c1e => 'K10D', 0x12c20 => 'Samsung GX10', 0x12c28 => 'Optio S7', 0x12c2d => 'Optio L20', 0x12c32 => 'Optio M20', 0x12c3c => 'Optio W20', 0x12c46 => 'Optio A20', 0x12c78 => 'Optio E30', 0x12c7d => 'Optio E35', 0x12c82 => 'Optio T30', 0x12c8c => 'Optio M30', 0x12c91 => 'Optio L30', 0x12c96 => 'Optio W30', 0x12ca0 => 'Optio A30', 0x12cb4 => 'Optio E40', 0x12cbe => 'Optio M40', 0x12cc3 => 'Optio L40', 0x12cc5 => 'Optio L36', 0x12cc8 => 'Optio Z10', 0x12cd2 => 'K20D', 0x12cd4 => 'Samsung GX20', #8 0x12cdc => 'Optio S10', 0x12ce6 => 'Optio A40', 0x12cf0 => 'Optio V10', 0x12cfa => 'K200D', 0x12d04 => 'Optio S12', 0x12d0e => 'Optio E50', 0x12d18 => 'Optio M50', 0x12d22 => 'Optio L50', 0x12d2c => 'Optio V20', 0x12d40 => 'Optio W60', 0x12d4a => 'Optio M60', 0x12d68 => 'Optio E60/M90', 0x12d72 => 'K2000', 0x12d73 => 'K-m', 0x12d86 => 'Optio P70', 0x12d90 => 'Optio L70', 0x12d9a => 'Optio E70', 0x12dae => 'X70', 0x12db8 => 'K-7', 0x12dcc => 'Optio W80', 0x12dea => 'Optio P80', 0x12df4 => 'Optio WS80', 0x12dfe => 'K-x', 0x12e08 => '645D', 0x12e12 => 'Optio E80', 0x12e30 => 'Optio W90', 0x12e3a => 'Optio I-10', 0x12e44 => 'Optio H90', 0x12e4e => 'Optio E90', 0x12e58 => 'X90', 0x12e6c => 'K-r', 0x12e76 => 'K-5', 0x12e8a => 'Optio RS1000/RS1500', 0x12e94 => 'Optio RZ10', 0x12e9e => 'Optio LS1000', 0x12ebc => 'Optio WG-1 GPS', 0x12ed0 => 'Optio S1', 0x12ee4 => 'Q', 0x12ef8 => 'K-01', 0x12f0c => 'Optio RZ18', 0x12f16 => 'Optio VS20', 0x12f2a => 'Optio WG-2 GPS', 0x12f48 => 'Optio LS465', 0x12f52 => 'K-30', 0x12f5c => 'X-5', 0x12f66 => 'Q10', 0x12f70 => 'K-5 II', 0x12f71 => 'K-5 II s', #forum4515 0x12f7a => 'Q7', 0x12f84 => 'MX-1', 0x12f8e => 'WG-3 GPS', 0x12f98 => 'WG-3', 0x12fa2 => 'WG-10', 0x12fb6 => 'K-50', 0x12fc0 => 'K-3', #29 0x12fca => 'K-500', 0x12fe8 => 'WG-4', # (Ricoh) 0x12fde => 'WG-4 GPS', # (Ricoh) 0x13006 => 'WG-20', # (Ricoh) 0x13010 => '645Z', 0x1301a => 'K-S1', 0x13024 => 'K-S2', #29 (Ricoh) 0x1302e => 'Q-S1', 0x13056 => 'WG-30', # (Ricoh) 0x1307e => 'WG-30W', # (Ricoh) 0x13088 => 'WG-5 GPS', # (Ricoh) 0x1309c => 'K-3 II', #29 (Ricoh) ); # Pentax city codes - (PH, Optio WP) my %pentaxCities = ( 0 => 'Pago Pago', 1 => 'Honolulu', 2 => 'Anchorage', 3 => 'Vancouver', 4 => 'San Francisco', 5 => 'Los Angeles', 6 => 'Calgary', 7 => 'Denver', 8 => 'Mexico City', 9 => 'Chicago', 10 => 'Miami', 11 => 'Toronto', 12 => 'New York', 13 => 'Santiago', 14 => 'Caracus', 15 => 'Halifax', 16 => 'Buenos Aires', 17 => 'Sao Paulo', 18 => 'Rio de Janeiro', 19 => 'Madrid', 20 => 'London', 21 => 'Paris', 22 => 'Milan', 23 => 'Rome', 24 => 'Berlin', 25 => 'Johannesburg', 26 => 'Istanbul', 27 => 'Cairo', 28 => 'Jerusalem', 29 => 'Moscow', 30 => 'Jeddah', 31 => 'Tehran', 32 => 'Dubai', 33 => 'Karachi', 34 => 'Kabul', 35 => 'Male', 36 => 'Delhi', 37 => 'Colombo', 38 => 'Kathmandu', 39 => 'Dacca', 40 => 'Yangon', 41 => 'Bangkok', 42 => 'Kuala Lumpur', 43 => 'Vientiane', 44 => 'Singapore', 45 => 'Phnom Penh', 46 => 'Ho Chi Minh', 47 => 'Jakarta', 48 => 'Hong Kong', 49 => 'Perth', 50 => 'Beijing', 51 => 'Shanghai', 52 => 'Manila', 53 => 'Taipei', 54 => 'Seoul', 55 => 'Adelaide', 56 => 'Tokyo', 57 => 'Guam', 58 => 'Sydney', 59 => 'Noumea', 60 => 'Wellington', 61 => 'Auckland', 62 => 'Lima', 63 => 'Dakar', 64 => 'Algiers', 65 => 'Helsinki', 66 => 'Athens', 67 => 'Nairobi', 68 => 'Amsterdam', 69 => 'Stockholm', 70 => 'Lisbon', #14 71 => 'Copenhagen', #25 72 => 'Warsaw', 73 => 'Prague', 74 => 'Budapest', ); # digital filter tag information (ref PH, K-5) # (also see %filterSettings below for decoding of filter parameters) my %digitalFilter = ( Format => 'undef[17]', RawConv => '($val!~/^\\0/ or $$self{OPTIONS}{Unknown}) ? join(" ",unpack("Cc*",$val)) : undef', SeparateTable => 'DigitalFilter', ValueConvInv => q{ return "\0" x 17 if $val eq "0"; $val = pack("Cc*", $val=~/[-+]?\d+/g); length($val)==17 or warn("Expecting 17 values\n"), return undef; return $val; }, PrintConv => { OTHER => \&PrintFilter, # this routine actually converts all values 0 => 'Off', 1 => 'Base Parameter Adjust', 2 => 'Soft Focus', 3 => 'High Contrast', 4 => 'Color Filter', 5 => 'Extract Color', 6 => 'Monochrome', 7 => 'Slim', 9 => 'Fisheye', 10 => 'Toy Camera', 11 => 'Retro', 12 => 'Pastel', 13 => 'Water Color', 14 => 'HDR', 16 => 'Miniature', 17 => 'Starburst', 18 => 'Posterization', 19 => 'Sketch Filter', 20 => 'Shading', # (Q) 21 => 'Invert Color', # (Q) 23 => 'Tone Expansion', #Forum5247 254 => 'Custom Filter', }, ); # digital filter setting names and conversions (ref PH, K-5) # Note: names must be unique for writing my %filterSettings = ( 1 => ['Brightness', '%+d'], # BPA (-8-+8) 2 => ['Saturation', '%+d'], # BPA (-3-+3) 3 => ['Hue', '%+d'], # BPA (-3-+3) 4 => ['Contrast', '%+d'], # BPA (-3-+3) 5 => ['Sharpness', '%+d'], # BPA (-3-+3) 6 => ['SoftFocus', '%d'], # Soft Focus/Custom (1-3) 7 => ['ShadowBlur', { 0=>'Off',1=>'On' }], # Soft Focus 8 => ['HighContrast', '%d'], # High Contrast/Custom (1-5) 9 => ['Color', { 1=>'Red',2=>'Magenta',3=>'Blue',4=>'Cyan',5=>'Green',6=>'Yellow' }], # Color Filter 10 => ['Density', { 1=>'Light',2=>'Standard',3=>'Dark' }], # Color Filter 11 => ['ExtractedColor',{ 0=>'Off',1=>'Red',2=>'Magenta',3=>'Blue',4=>'Cyan',5=>'Green',6=>'Yellow' }], # ExtractColor [x2] 12 => ['ColorRange', '%+d'], # ExtractColor [x2] (-2-+2) 13 => ['FilterEffect', { 0=>'Off',1=>'Red',2=>'Green',3=>'Blue',4=>'Infrared'}], # Monochrome 14 => ['ToningBA', '%+d'], # Monochrome (-3-+3) 15 => ['InvertColor', { 0=>'Off',1=>'On' }], # Custom/Invert Color 16 => ['Slim', '%+d'], # Slim (-8-+8) 17 => ['EffectDensity', { 1=>'Sparse',2=>'Normal',3=>'Dense' }], # Starburst 18 => ['Size', { 1=>'Small',2=>'Medium',3=>'Large' }], # Starburst 19 => ['Angle', { 0=>'0deg',2=>'30deg',3=>'45deg',4=>'60deg'}], # Starburst (1 is unused) 20 => ['Fisheye', { 1=>'Weak',2=>'Medium',3=>'Strong' }], # Fisheye 21 => ['DistortionType', '%d'], # Custom (1-3) 22 => ['DistortionLevel',{0=>'Off',1=>'Weak',2=>'Medium',3=>'Strong' }], #Custom 23 => ['ShadingType', '%d'], # Custom/Shading (1-6) 24 => ['ShadingLevel', '%+d'], # Custom/Shading (-3-+3) 25 => ['Shading', '%d'], # Toy Camera (1-3) 26 => ['Blur', '%d'], # Toy Camera (1-3) 27 => ['ToneBreak', { 0=>'Off',1=>'Red',2=>'Green',3=>'Blue',4=>'Yellow'}], # Toy Camera/Custom 28 => ['Toning', '%+d'], # Retro (-3-+3) 29 => ['FrameComposite',{ 0=>'None',1=>'Thin',2=>'Medium',3=>'Thick' }], # Retro 30 => ['PastelStrength',{ 1=>'Weak',2=>'Medium',3=>'Strong' }], # Pastel 31 => ['Intensity', '%d'], # Water Color (1-3) 32 => ['Saturation2', { 0=>'Off',1=>'Low',2=>'Medium',3=>'High' }], # Water Color 33 => ['HDR', { 1=>'Weak',2=>'Medium',3=>'Strong' }], # HDR # (34 missing) 35 => ['FocusPlane', '%+d'], # Miniature (-3-+3) 36 => ['FocusWidth', { 1=>'Narrow',2=>'Middle',3=>'Wide' }], # Miniature 37 => ['PlaneAngle', { 0=>'Horizontal',1=>'Vertical',2=>'Positive slope',3=>'Negative slope' }], # Miniature 38 => ['Blur2', '%d'], # Miniature (1-3) 39 => ['Shape', { 1=>'Cross',2=>'Star',3=>'Snowflake',4=>'Heart',5=>'Note'}], # Starburst 40 => ['Posterization', '%d'], # Posterization (1-5) 41 => ['Contrast2', { 1=>'Low',2=>'Medium',3=>'High'}], # Sketch Filter 42 => ['ScratchEffect', { 0=>'Off',1=>'On' }], # Sketch Filter 45 => ['ToneExpansion', { 1=>'Low',2=>'Medium',3=>'High' }], # Tone Expansion (ref Forum5247) ); # decoding for Pentax Firmware ID tags - PH my %pentaxFirmwareID = ( # the first 2 numbers are the firmware version, I'm not sure what the second 2 mean # Note: the byte order may be different for some models # which give, for example, version 0.01 instead of 1.00 ValueConv => sub { my $val = shift; return $val unless length($val) == 4; # (value is encrypted by toggling all bits) my @a = map { $_ ^ 0xff } unpack("C*",$val); return sprintf('%d %.2d %.2d %.2d', @a); }, ValueConvInv => sub { my $val = shift; my @a = $val=~/\b\d+\b/g; return $val unless @a == 4; @a = map { ($_ & 0xff) ^ 0xff } @a; return pack("C*", @a); }, PrintConv => '$val=~tr/ /./; $val', PrintConvInv => '$val=~s/^(\d+)\.(\d+)\.(\d+)\.(\d+)/$1 $2 $3 $4/ ? $val : undef', ); # convert 16 or 77 metering segment values to approximate LV equivalent - PH my %convertMeteringSegments = ( PrintConv => sub { join ' ', map( { $_==255 ? 'n/a' : $_==0 ? '0' : sprintf '%.1f', $_ / 8 - 6 } split(' ',$_[0]) ) }, PrintConvInv => sub { join ' ', map( { /^n/i ? 255 : $_==0 ? '0' : int(($_ + 6) * 8 + 0.5) } split(' ',$_[0]) ) }, ); # lens code conversions my %lensCode = ( Unknown => 1, PrintConv => 'sprintf("0x%.2x", $val)', PrintConvInv => 'hex($val)', ); # conversions for tags 0x0053-0x005a my %colorTemp = ( Writable => 'undef', Count => 4, ValueConv => sub { my $val = shift; return $val unless length $val == 4; my @a = unpack 'nCC', $val; $a[0] = 53190 - $a[0]; $a[1] = ($a[2] & 0x0f); $a[1] -= 16 if $a[1] >= 8; $a[2] = ($a[2] >> 4); $a[2] -= 16 if $a[2] >= 8; return "@a"; }, ValueConvInv => sub { my $val = shift; my @a = split ' ', $val; return undef unless @a == 3; return pack 'nCC', 53190 - $a[0], 0, ($a[1] & 0x0f) + (($a[2] & 0x0f) << 4); }, PrintConv => sub { $_ = shift; s/ ([1-9])/ +$1/g; s/ 0/ 0/g; return $_; }, PrintConvInv => '$val', ); # conversions for KelvinWB tags my %kelvinWB = ( Format => 'int16u[4]', ValueConv => sub { my @a = split ' ', shift; (53190 - $a[0]) . ' ' . $a[1] . ' ' . ($a[2] / 8192) . ' ' . ($a[3] / 8192); }, ValueConvInv => sub { my @a = split ' ', shift; (53190 - $a[0]) . ' ' . $a[1] . ' ' . int($a[2]*8192+0.5) . ' ' . int($a[3]*8192+0.5); }, ); # common attributes for writable BinaryData directories my %binaryDataAttrs = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, ); # Pentax makernote tags %Image::ExifTool::Pentax::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, WRITABLE => 1, 0x0000 => { #5 Name => 'PentaxVersion', Writable => 'int8u', Count => 4, PrintConv => '$val=~tr/ /./; $val', PrintConvInv => '$val=~tr/./ /; $val', # 0.1.0.3 - PENTAX Optio E40 # 3.0.0.0 - K10D # 3.1.0.0 - Optio A40/S10/L36/L40/M40/V10 # 3.1.2.0 - Optio Z10 # 4.0.2.0 - Optio E50 # 4.1.0.0 - Optio S12 # 4.1.1.0 - Optio M50 # 4.1.2.0 - K20D, K200D # 4.2.0.0 - Optio L50/V20 # 4.2.1.0 - Optio E60/M90 # 4.2.2.0 - Optio W60 # 4.2.3.0 - Optio M60 # 4.4.0.1 - K-m, K2000 # 4.5.0.0 - Optio E70/L70 # 4.5.0.0 - Optio P70 # 4.6.0.0 - Optio E80/E90/W80 # 5.0.0.0 - K-7, Optio P80/WS80 # 5.1.0.0 - K-x # 5.2.0.0 - Optio I-10 # 5.3.0.0 - Optio H90 # 5.3.2.0 - Optio W90 # 6.0.0.0 - K-r, 645D # 6.1.3.0 - Optio LS1000/RS1000/RS1500/RZ10 # 7.0.0.0 - K-5 # 7.1.0.0 - Optio WG-1GPS/WG-10 # 7.2.0.0 - Optio S1 # 8.0.0.0 - Q # 8.0.1.0 - Optio RZ18 # 8.0.4.0 - Optio VS20 # 8.1.0.0 - Optio LS465/WG-2GPS # 9.0.0.0 - K-01 # 9.1.2.0 - X-5 # 10.0.0.0 - K-30, K-50, K-500, K-5 II # 10.0.2.0 - Q10 # 10.2.0.0 - WG-3 # 10.2.1.0 - MX-1 # 10.4.1.0 - WG-3 GPS # 10.6.1.0 - Q-S1, Q7 # 11.0.0.0 - K-3 # 11.2.1.0 - 645Z # 11.3.0.0 - K-S1 # 11.5.0.0 - K-S2 # 11.6.1.0 - K-3 II }, 0x0001 => { #PH Name => 'PentaxModelType', Writable => 'int16u', # (values of 0-5 seem to group models into 6 categories, ref 13) }, 0x0002 => { #PH Name => 'PreviewImageSize', Groups => { 2 => 'Image' }, Writable => 'int16u', Count => 2, PrintConv => '$val =~ tr/ /x/; $val', PrintConvInv => '$val =~ tr/x/ /; $val', }, 0x0003 => { #PH Name => 'PreviewImageLength', OffsetPair => 0x0004, # point to associated offset DataTag => 'PreviewImage', Groups => { 2 => 'Image' }, Writable => 'int32u', Protected => 2, }, 0x0004 => { #PH Name => 'PreviewImageStart', IsOffset => 2, # code to use original base Protected => 2, OffsetPair => 0x0003, # point to associated byte count DataTag => 'PreviewImage', Groups => { 2 => 'Image' }, Writable => 'int32u', }, 0x0005 => { #13 Name => 'PentaxModelID', Writable => 'int32u', PrintHex => 1, SeparateTable => 1, DataMember => 'PentaxModelID', RawConv => '$$self{PentaxModelID} = $val', PrintConv => \%pentaxModelID, }, 0x0006 => { #5 # Note: Year is int16u in MM byte ordering regardless of EXIF byte order Name => 'Date', Groups => { 2 => 'Time' }, Notes => 'changing either Date or Time will affect ShutterCount decryption', Writable => 'undef', Count => 4, Shift => 'Time', DataMember => 'PentaxDate', RawConv => '$$self{PentaxDate} = $val', # save to decrypt ShutterCount ValueConv => 'length($val)==4 ? sprintf("%.4d:%.2d:%.2d",unpack("nC2",$val)) : "Unknown ($val)"', ValueConvInv => q{ $val =~ s/(\d) .*/$1/; # remove Time my @v = split /:/, $val; return pack("nC2",$v[0],$v[1],$v[2]); }, }, 0x0007 => { #5 Name => 'Time', Groups => { 2 => 'Time' }, Writable => 'undef', Count => 3, Shift => 'Time', DataMember => 'PentaxTime', RawConv => '$$self{PentaxTime} = $val', # save to decrypt ShutterCount ValueConv => 'length($val)>=3 ? sprintf("%.2d:%.2d:%.2d",unpack("C3",$val)) : "Unknown ($val)"', ValueConvInv => q{ $val =~ s/^[0-9:]+ (\d)/$1/; # remove Date return pack("C3",split(/:/,$val)); }, }, 0x0008 => { #2 Name => 'Quality', Writable => 'int16u', PrintConvColumns => 2, PrintConv => { 0 => 'Good', 1 => 'Better', 2 => 'Best', 3 => 'TIFF', #5 4 => 'RAW', #5 5 => 'Premium', #PH (K20D) 7 => 'RAW (pixel shift enabled)', #forum6536 (K-3 II) 65535 => 'n/a', #PH (Q MOV video) }, }, 0x0009 => { #3 Name => 'PentaxImageSize', Groups => { 2 => 'Image' }, Writable => 'int16u', PrintConvColumns => 2, PrintConv => { 0 => '640x480', 1 => 'Full', #PH - this can mean 2048x1536 or 2240x1680 or ... ? 2 => '1024x768', 3 => '1280x960', #PH (Optio WP) 4 => '1600x1200', 5 => '2048x1536', 8 => '2560x1920 or 2304x1728', #PH (Optio WP) or #14 9 => '3072x2304', #PH (Optio M30) 10 => '3264x2448', #13 19 => '320x240', #PH (Optio WP) 20 => '2288x1712', #13 21 => '2592x1944', 22 => '2304x1728 or 2592x1944', #2 or #14 23 => '3056x2296', #13 25 => '2816x2212 or 2816x2112', #13 or #14 27 => '3648x2736', #PH (Optio A20) 29 => '4000x3000', #PH (X70) 30 => '4288x3216', #PH (Optio RS1000) 31 => '4608x3456', #PH (Optio RZ18) 129 => '1920x1080', #PH (Optio RZ10) 135 => '4608x2592', #PH (Q10 stretch filter) 257 => '3216x3216', #PH (Optio RZ10) '0 0' => '2304x1728', #13 '4 0' => '1600x1200', #PH (Optio MX4) '5 0' => '2048x1536', #13 '8 0' => '2560x1920', #13 '32 2' => '960x640', #7 '33 2' => '1152x768', #7 '34 2' => '1536x1024', #7 '35 1' => '2400x1600', #7 '36 0' => '3008x2008 or 3040x2024', #PH '37 0' => '3008x2000', #13 # 65535 - seen for an X-5 panorama (PH) }, }, 0x000b => { #3 Name => 'PictureMode', Writable => 'int16u', Count => -1, Notes => q{ 1 or 2 values. Decimal values differentiate Optio 555 modes which are different from other models }, ValueConv => '(IsInt($val) and $val < 4 and $$self{Model} =~ /Optio 555\b/) ? $val + 0.1 : $val', ValueConvInv => 'int $val', PrintConvColumns => 2, PrintConv => [{ 0 => 'Program', #PH 0.1 => 'Av', #PH (Optio 555) 1 => 'Shutter Speed Priority', #JD 1.1 => 'M', #PH (Optio 555) 2 => 'Program AE', #13 2.1 => 'Tv', #PH (Optio 555) 3 => 'Manual', #13 3.1 => 'USER', #PH (Optio 555) 5 => 'Portrait', 6 => 'Landscape', 8 => 'Sport', #PH 9 => 'Night Scene', # 10 "full mode"? #13 11 => 'Soft', #PH 12 => 'Surf & Snow', 13 => 'Candlelight', #13 14 => 'Autumn', 15 => 'Macro', 17 => 'Fireworks', 18 => 'Text', 19 => 'Panorama', #PH 20 => '3-D', #PH (Optio 555) 21 => 'Black & White', #PH (Optio 555) 22 => 'Sepia', #PH (Optio 555) 23 => 'Red', #PH (Optio 555) 24 => 'Pink', #PH (Optio 555) 25 => 'Purple', #PH (Optio 555) 26 => 'Blue', #PH (Optio 555) 27 => 'Green', #PH (Optio 555) 28 => 'Yellow', #PH (Optio 555) 30 => 'Self Portrait', #PH 31 => 'Illustrations', #13 33 => 'Digital Filter', #13 35 => 'Night Scene Portrait', #25 37 => 'Museum', #PH 38 => 'Food', #PH 39 => 'Underwater', #25 40 => 'Green Mode', #PH 49 => 'Light Pet', #PH 50 => 'Dark Pet', #PH 51 => 'Medium Pet', #PH 53 => 'Underwater', #PH 54 => 'Candlelight', #PH 55 => 'Natural Skin Tone', #PH 56 => 'Synchro Sound Record', #PH 58 => 'Frame Composite', #14 59 => 'Report', #25 60 => 'Kids', #13 61 => 'Blur Reduction', #13 63 => 'Panorama 2', #PH (X-5) 65 => 'Half-length Portrait', #JD 66 => 'Portrait 2', #PH (LS645) 74 => 'Digital Microscope', #PH (WG-4) 75 => 'Blue Sky', #PH (LS465) 80 => 'Miniature', #PH (VS20) 81 => 'HDR', #PH (LS465) 83 => 'Fisheye', #PH (VS20) 85 => 'Digital Filter 4', #PH (WG-5) 221 => 'P', #PH (Optio 555) 255=> 'PICT', #PH (Optio 555) }], }, 0x000c => { #PH Name => 'FlashMode', Writable => 'int16u', Count => -1, PrintHex => 1, PrintConv => [{ 0x000 => 'Auto, Did not fire', 0x001 => 'Off, Did not fire', 0x002 => 'On, Did not fire', #19 0x003 => 'Auto, Did not fire, Red-eye reduction', 0x005 => 'On, Did not fire, Wireless (Master)', #19 0x100 => 'Auto, Fired', 0x102 => 'On, Fired', 0x103 => 'Auto, Fired, Red-eye reduction', 0x104 => 'On, Red-eye reduction', 0x105 => 'On, Wireless (Master)', #19 0x106 => 'On, Wireless (Control)', #19 0x108 => 'On, Soft', 0x109 => 'On, Slow-sync', 0x10a => 'On, Slow-sync, Red-eye reduction', 0x10b => 'On, Trailing-curtain Sync', },{ #19 (AF-540FGZ flash) 0x000 => 'n/a - Off-Auto-Aperture', #19 0x03f => 'Internal', 0x100 => 'External, Auto', 0x23f => 'External, Flash Problem', #JD 0x300 => 'External, Manual', 0x304 => 'External, P-TTL Auto', 0x305 => 'External, Contrast-control Sync', #JD 0x306 => 'External, High-speed Sync', 0x30c => 'External, Wireless', 0x30d => 'External, Wireless, High-speed Sync', }], }, 0x000d => [ #2 { Name => 'FocusMode', # (can't test for "PENTAX" because MOV videos don't have Make) Condition => '$$self{Make} !~ /^Asahi/', Notes => 'Pentax models', Writable => 'int16u', PrintConvColumns => 2, PrintConv => { #PH 0 => 'Normal', 1 => 'Macro', 2 => 'Infinity', 3 => 'Manual', 4 => 'Super Macro', #JD 5 => 'Pan Focus', 16 => 'AF-S (Focus-priority)', #17 17 => 'AF-C (Focus-priority)', #17 18 => 'AF-A (Focus-priority)', #PH (educated guess) 32 => 'Contrast-detect (Focus-priority)', #PH (K-5) 33 => 'Tracking Contrast-detect (Focus-priority)', #PH (K-5) # bit 8 indicates release priority 272 => 'AF-S (Release-priority)', #PH (K-5,K-3) 273 => 'AF-C (Release-priority)', #PH (K-5,K-3) 274 => 'AF-A (Release-priority)', #PH (K-3) 288 => 'Contrast-detect (Release-priority)', #PH (K-01) }, },{ Name => 'FocusMode', Writable => 'int16u', Notes => 'Asahi models', PrintConv => { #2 0 => 'Normal', 1 => 'Macro (1)', 2 => 'Macro (2)', 3 => 'Infinity', }, }, ], 0x000e => [{ #7 Name => 'AFPointSelected', Condition => '$$self{Model} !~ /K-3\b/', Writable => 'int16u', Notes => 'all models but the K-3', PrintConvColumns => 2, PrintConv => [{ # 0 - Contrast-detect AF? - PH (K-5) 0xffff => 'Auto', 0xfffe => 'Fixed Center', 0xfffd => 'Automatic Tracking AF', #JD 0xfffc => 'Face Detect AF', #JD 0xfffb => 'AF Select', #PH (Q select from 25-areas) 0 => 'None', #PH (Q in manual focus mode) 1 => 'Upper-left', 2 => 'Top', 3 => 'Upper-right', 4 => 'Left', 5 => 'Mid-left', 6 => 'Center', 7 => 'Mid-right', 8 => 'Right', 9 => 'Lower-left', 10 => 'Bottom', 11 => 'Lower-right', }, # (second number exists for K-5II(s) is usually 0, but is 1 for AF.C with # AFPointMode=='Select' and extended tracking focus points are enabled in the settings) ], },{ Name => 'AFPointSelected', Writable => 'int16u', Notes => 'K-3', PrintConvColumns => 2, PrintConv => [{ # 0 - Contrast-detect AF? - PH (K-5) 0xffff => 'Auto', 0xfffe => 'Fixed Center', 0xfffd => 'Automatic Tracking AF', #JD 0xfffc => 'Face Detect AF', #JD 0xfffb => 'AF Select', #PH (Q select from 25-areas) # AF pattern: (ref forum5422) # 01 02 03 04 05 # 06 07 08 09 10 # 11 12 13 14 15 16 17 # 18 19 20 21 22 # 23 24 25 26 27 0 => 'None', 1 => 'Top-left', 2 => 'Top Near-left', 3 => 'Top', 4 => 'Top Near-right', 5 => 'Top-right', 6 => 'Upper-left', 7 => 'Upper Near-left', 8 => 'Upper-middle', 9 => 'Upper Near-right', 10 => 'Upper-right', 11 => 'Far Left', 12 => 'Left', 13 => 'Near-left', 14 => 'Center', 15 => 'Near-right', 16 => 'Right', 17 => 'Far Right', 18 => 'Lower-left', 19 => 'Lower Near-left', 20 => 'Lower-middle', 21 => 'Lower Near-right', 22 => 'Lower-right', 23 => 'Bottom-left', 24 => 'Bottom Near-left', 25 => 'Bottom', 26 => 'Bottom Near-right', 27 => 'Bottom-right', #forum5892 257 => 'Zone Select Top-left', 258 => 'Zone Select Top Near-left', 259 => 'Zone Select Top', 260 => 'Zone Select Top Near-right', 261 => 'Zone Select Top-right', 262 => 'Zone Select Upper-left', 263 => 'Zone Select Upper Near-left', 264 => 'Zone Select Upper-middle', 265 => 'Zone Select Upper Near-right', 266 => 'Zone Select Upper-right', 267 => 'Zone Select Far Left', 268 => 'Zone Select Left', 269 => 'Zone Select Near-left', 270 => 'Zone Select Center', 271 => 'Zone Select Near-right', 272 => 'Zone Select Right', 273 => 'Zone Select Far Right', 274 => 'Zone Select Lower-left', 275 => 'Zone Select Lower Near-left', 276 => 'Zone Select Lower-middle', 277 => 'Zone Select Lower Near-right', 278 => 'Zone Select Lower-right', 279 => 'Zone Select Bottom-left', 280 => 'Zone Select Bottom Near-left', 281 => 'Zone Select Bottom', 282 => 'Zone Select Bottom Near-right', 283 => 'Zone Select Bottom-right', },{ #forum5892 0 => 'Single Point', 1 => 'Expanded Area 9-point (S)', 3 => 'Expanded Area 25-point (M)', 5 => 'Expanded Area 27-point (L)', }], }], 0x000f => [{ #PH Name => 'AFPointsInFocus', Condition => '$$self{Model} !~ /K-3\b/', Notes => 'models other than the K-3', Writable => 'int16u', PrintHex => 1, PrintConv => { 0xffff => 'None', 0 => 'Fixed Center or Multiple', #PH/14 1 => 'Top-left', 2 => 'Top-center', 3 => 'Top-right', 4 => 'Left', 5 => 'Center', 6 => 'Right', 7 => 'Bottom-left', 8 => 'Bottom-center', 9 => 'Bottom-right', }, },{ #PH Name => 'AFPointsInFocus', Writable => 'int32u', Notes => 'K-3 only', PrintHex => 1, PrintConv => { 0 => '(none)', BITMASK => { 0 => 'Top-left', 1 => 'Top Near-left', 2 => 'Top', 3 => 'Top Near-right', 4 => 'Top-right', 5 => 'Upper-left', 6 => 'Upper Near-left', 7 => 'Upper-middle', 8 => 'Upper Near-right', 9 => 'Upper-right', 10 => 'Far Left', 11 => 'Left', 12 => 'Near-left', 13 => 'Center', 14 => 'Near-right', 15 => 'Right', 16 => 'Far Right', 17 => 'Lower-left', 18 => 'Lower Near-left', 19 => 'Lower-middle', 20 => 'Lower Near-right', 21 => 'Lower-right', 22 => 'Bottom-left', 23 => 'Bottom Near-left', 24 => 'Bottom', 25 => 'Bottom Near-right', 26 => 'Bottom-right', }, }, }], 0x0010 => { #PH Name => 'FocusPosition', Writable => 'int16u', Notes => 'related to focus distance but affected by focal length', }, 0x0012 => { #PH Name => 'ExposureTime', Writable => 'int32u', Priority => 0, ValueConv => '$val * 1e-5', ValueConvInv => '$val * 1e5', # value may be 0xffffffff in Bulb mode (ref JD) PrintConv => '$val > 42949 ? "Unknown (Bulb)" : Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => '$val=~/(unknown|bulb)/i ? $val : Image::ExifTool::Exif::ConvertFraction($val)', }, 0x0013 => { #PH Name => 'FNumber', Writable => 'int16u', Priority => 0, ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, # ISO Tag - Entries confirmed by W. Smith 12 FEB 04 0x0014 => { Name => 'ISO', Writable => 'int16u', Notes => 'may be different than EXIF:ISO, which can round to the nearest full stop', PrintConvColumns => 4, PrintConv => { # 1/3 EV step values 3 => 50, 4 => 64, 5 => 80, 6 => 100, 7 => 125, #PH 8 => 160, #PH 9 => 200, 10 => 250, 11 => 320, #PH 12 => 400, 13 => 500, 14 => 640, 15 => 800, 16 => 1000, 17 => 1250, 18 => 1600, #PH 19 => 2000, #PH 20 => 2500, #PH 21 => 3200, #PH 22 => 4000, 23 => 5000, 24 => 6400, #PH 25 => 8000, #PH 26 => 10000, #PH 27 => 12800, #PH 28 => 16000, #PH 29 => 20000, #PH 30 => 25600, #PH 31 => 32000, #PH 32 => 40000, #PH 33 => 51200, #PH 34 => 64000, #PH (NC) 35 => 80000, #PH (NC) 36 => 102400, #27 37 => 128000, #PH (NC) 38 => 160000, #PH (NC) 39 => 204800, #27 # Optio 330/430 (oddball) 50 => 50, #PH 100 => 100, #PH 200 => 200, #PH 400 => 400, #PH 800 => 800, #PH 1600 => 1600, #PH 3200 => 3200, #PH # 1/2 EV step values 258 => 50, #PH (NC) 259 => 70, #PH (NC) 260 => 100, #19 261 => 140, #19 262 => 200, #19 263 => 280, #19 264 => 400, #19 265 => 560, #19 266 => 800, #19 267 => 1100, #19 268 => 1600, #19 269 => 2200, #PH 270 => 3200, #PH 271 => 4500, #PH 272 => 6400, #PH 273 => 9000, #PH 274 => 12800, #PH 275 => 18000, #PH 276 => 25600, #PH 277 => 36000, #PH 278 => 51200, #PH # 65534 Auto? (Q/Q10/Q7 MOV) PH # 65535 Auto? (K-01 MP4) PH }, }, 0x0015 => { #PH Name => 'LightReading', Format => 'int16s', # (because I may have seen negative numbers) Writable => 'int16u', # ranges from 0-12 for my Optio WP - PH Notes => q{ calibrated differently for different models. For the Optio WP, add 6 to get approximate Light Value. May not be valid for some models, eg. Optio S }, }, 0x0016 => { #PH Name => 'ExposureCompensation', Writable => 'int16u', ValueConv => '($val - 50) / 10', ValueConvInv => 'int($val * 10 + 50.5)', PrintConv => '$val ? sprintf("%+.1f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x0017 => { #3 Name => 'MeteringMode', Writable => 'int16u', PrintConv => { 0 => 'Multi-segment', 1 => 'Center-weighted average', 2 => 'Spot', # have seen value of 16 for E70 }, }, 0x0018 => { #PH Name => 'AutoBracketing', Writable => 'int16u', Count => -1, Notes => q{ 1 or 2 values: exposure bracket step in EV, then extended bracket if available. Extended bracket values are printed as 'WB-BA', 'WB-GM', 'Saturation', 'Sharpness', 'Contrast', 'Hue' or 'HighLowKey' followed by '+1', '+2' or '+3' for step size }, # 1=.3ev, 2=.7, 3=1.0, ... 10=.5ev, 11=1.5, ... ValueConv => [ '$val<10 ? $val/3 : $val-9.5' ], ValueConvInv => [ 'abs($val-int($val)-.5)>0.05 ? int($val*3+0.5) : int($val+10)' ], PrintConv => sub { my @v = split(' ', shift); $v[0] = sprintf('%.1f', $v[0]) if $v[0]; if ($v[1]) { my %s = (1=>'WB-BA',2=>'WB-GM',3=>'Saturation',4=>'Sharpness', 5=>'Contrast',6=>'Hue',7=>'HighLowKey'); my $t = $v[1] >> 8; $v[1] = sprintf('%s+%d', $s{$t} || "Unknown($t)", $v[1] & 0xff); } elsif (defined $v[1]) { $v[1] = 'No Extended Bracket', } return join(' EV, ', @v); }, PrintConvInv => sub { my @v = split(/, ?/, shift); $v[0] =~ s/ ?EV//i; if ($v[1]) { my %s = ('WB-BA'=>1,'WB-GM'=>2,'Saturation'=>3,'Sharpness'=>4, 'Contrast'=>5,'Hue'=>6,'HighLowKey'=>7); if ($v[1] =~ /^No\b/i) { $v[1] = 0; } elsif ($v[1] =~ /Unknown\((\d+)\)\+(\d+)/i) { $v[1] = ($1 << 8) + $2; } elsif ($v[1] =~ /([\w-]+)\+(\d+)/ and $s{$1}) { $v[1] = ($s{$1} << 8) + $2; } else { warn "Bad extended bracket\n"; } } return "@v"; }, }, 0x0019 => { #3 Name => 'WhiteBalance', Writable => 'int16u', PrintConvColumns => 2, PrintConv => { 0 => 'Auto', 1 => 'Daylight', 2 => 'Shade', 3 => 'Fluorescent', #2 4 => 'Tungsten', 5 => 'Manual', 6 => 'Daylight Fluorescent', #13 7 => 'Day White Fluorescent', #13 8 => 'White Fluorescent', #13 9 => 'Flash', #13 10 => 'Cloudy', #13 11 => 'Warm White Fluorescent', #PH (K-3) 14 => 'Multi Auto', #PH (K-3) 15 => 'Color Temperature Enhancement', #PH 17 => 'Kelvin', #PH 0xfffe => 'Unknown', #13 0xffff => 'User-Selected', #13 }, }, 0x001a => { #5 Name => 'WhiteBalanceMode', Writable => 'int16u', PrintConv => { 1 => 'Auto (Daylight)', 2 => 'Auto (Shade)', 3 => 'Auto (Flash)', 4 => 'Auto (Tungsten)', 6 => 'Auto (Daylight Fluorescent)', #19 (NC) 7 => 'Auto (Day White Fluorescent)', #17 (K100D guess) 8 => 'Auto (White Fluorescent)', #17 (K100D guess) 10 => 'Auto (Cloudy)', #17 (K100D guess) # 0xfffd observed in K100D (ref 17) 0xfffe => 'Unknown', #PH (you get this when shooting night sky shots) 0xffff => 'User-Selected', }, }, 0x001b => { #6 Name => 'BlueBalance', Writable => 'int16u', ValueConv => '$val / 256', ValueConvInv => 'int($val * 256 + 0.5)', }, 0x001c => { #6 Name => 'RedBalance', Writable => 'int16u', ValueConv => '$val / 256', ValueConvInv => 'int($val * 256 + 0.5)', }, 0x001d => [ # Would be nice if there was a general way to determine units for FocalLength... { # Optio 30, 33WR, 43WR, 450, 550, 555, 750Z, X Name => 'FocalLength', Condition => '$self->{Model} =~ /^PENTAX Optio (30|33WR|43WR|450|550|555|750Z|X)\b/', Writable => 'int32u', Priority => 0, ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val=~s/\s*mm//;$val', }, { # K100D, Optio 230, 330GS, 33L, 33LF, A10, M10, MX, MX4, S, S30, # S4, S4i, S5i, S5n, S5z, S6, S45, S50, S55, S60, SV, Svi, W10, WP, # *ist D, DL, DL2, DS, DS2 # (Note: the Optio S6 seems to report the minimum focal length - PH) Name => 'FocalLength', Writable => 'int32u', Priority => 0, ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val=~s/\s*mm//;$val', }, ], 0x001e => { #3 Name => 'DigitalZoom', Writable => 'int16u', ValueConv => '$val / 100', #14 ValueConvInv => '$val * 100', #14 }, 0x001f => { Name => 'Saturation', Writable => 'int16u', Count => -1, Notes => '1 or 2 values', PrintConvColumns => 2, PrintConv => [{ # the *istD has pairs of values - PH 0 => '-2 (low)', #PH 1 => '0 (normal)', #PH 2 => '+2 (high)', #PH 3 => '-1 (med low)', #2 4 => '+1 (med high)', #2 5 => '-3 (very low)', #PH 6 => '+3 (very high)', #PH (NC) 7 => '-4 (minimum)', #PH (NC) 8 => '+4 (maximum)', #PH (K-5) 65535 => 'None', #PH (Monochrome) }], }, 0x0020 => { Name => 'Contrast', Writable => 'int16u', Count => -1, Notes => '1 or 2 values', PrintConvColumns => 2, PrintConv => [{ # the *istD has pairs of values - PH 0 => '-2 (low)', #PH 1 => '0 (normal)', #PH 2 => '+2 (high)', #PH 3 => '-1 (med low)', #2 4 => '+1 (med high)', #2 5 => '-3 (very low)', #PH 6 => '+3 (very high)', #PH (NC) 7 => '-4 (minimum)', #PH (NC) 8 => '+4 (maximum)', #PH (K-5) 65535 => 'n/a', # got this for a Backlight Silhouette - PH (Q) }], }, 0x0021 => { Name => 'Sharpness', Writable => 'int16u', Count => -1, Notes => '1 or 2 values', PrintConvColumns => 2, PrintConv => [{ # the *istD has pairs of values - PH 0 => '-2 (soft)', #PH 1 => '0 (normal)', #PH 2 => '+2 (hard)', #PH 3 => '-1 (med soft)', #2 4 => '+1 (med hard)', #2 5 => '-3 (very soft)', #(NC) 6 => '+3 (very hard)', #(NC) 7 => '-4 (minimum)', #PH (NC) 8 => '+4 (maximum)', #PH (NC) }], }, 0x0022 => { #PH Name => 'WorldTimeLocation', Groups => { 2 => 'Time' }, Writable => 'int16u', PrintConv => { 0 => 'Hometown', 1 => 'Destination', }, }, 0x0023 => { #PH Name => 'HometownCity', Groups => { 2 => 'Time' }, Writable => 'int16u', SeparateTable => 'City', PrintConv => \%pentaxCities, }, 0x0024 => { #PH Name => 'DestinationCity', Groups => { 2 => 'Time' }, Writable => 'int16u', SeparateTable => 'City', PrintConv => \%pentaxCities, }, 0x0025 => { #PH Name => 'HometownDST', Groups => { 2 => 'Time' }, Writable => 'int16u', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, 0x0026 => { #PH Name => 'DestinationDST', Groups => { 2 => 'Time' }, Writable => 'int16u', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, 0x0027 => { #PH Name => 'DSPFirmwareVersion', Writable => 'undef', # - for K10D, this comes from 4 bytes at offset 0x1c in the firmware file %pentaxFirmwareID, }, 0x0028 => { #PH Name => 'CPUFirmwareVersion', Writable => 'undef', # - for K10D, this comes from 4 bytes at offset 0x83fbf8 in firmware file %pentaxFirmwareID, }, 0x0029 => { #5 Name => 'FrameNumber', # - one report that this has a value of 84 for the first image with a *istDS # - another report that file number 4 has frameNumber 154 for *istD, and # that framenumber jumped at about 9700 to around 26000 # - with *istDS firmware 2.0, this tag was removed and ShutterCount was added Writable => 'int32u', }, # 0x002b - definitely exposure related somehow - PH 0x002d => [{ #PH Name => 'EffectiveLV', Condition => '$format eq "int16u"', Notes => 'camera-calculated light value, but includes exposure compensation', Writable => 'int16u', Format => 'int16s', # (negative values are valid even though Pentax writes int16u) ValueConv => '$val/1024', ValueConvInv => '$val * 1024', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', },{ Name => 'EffectiveLV', Condition => '$format eq "int32u"', Writable => 'int32u', Format => 'int32s', ValueConv => '$val/1024', ValueConvInv => '$val * 1024', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }], 0x0032 => { #13 Name => 'ImageEditing', Writable => 'undef', Format => 'int8u', Count => 4, PrintConv => { '0 0' => 'None', #PH '0 0 0 0' => 'None', '0 0 0 4' => 'Digital Filter', '1 0 0 0' => 'Resized', #PH (K-5) '2 0 0 0' => 'Cropped', #PH # note: doesn't apply to digital filters applied when picture is taken '4 0 0 0' => 'Digital Filter 4', #PH (K10D, Ricoh WG-5) '6 0 0 0' => 'Digital Filter 6', #PH (K-5) '8 0 0 0' => 'Red-eye Correction', #PH (WG-10) '16 0 0 0' => 'Frame Synthesis?', }, }, 0x0033 => { #PH (K110D/K100D/K-m) Name => 'PictureMode', Writable => 'int8u', Count => 3, Relist => [ [0, 1], 2 ], # join values 0 and 1 for PrintConv PrintConvColumns => 2, PrintConv => [{ # Program dial modes (from K110D) '0 0' => 'Program', # (also on K10D, custom settings: Program Line 1, e-dial in Program 3, 4 or 5) '0 1' => 'Hi-speed Program', #19 (K10D, custom settings: Program Line 2, e-dial in Program 3, 4 or 5) '0 2' => 'DOF Program', #19 (K10D, custom settings: Program Line 3, e-dial in Program 3, 4 or 5) '0 3' => 'MTF Program', #19 (K10D, custom settings: Program Line 4, e-dial in Program 3, 4 or 5) '0 4' => 'Standard', #13 '0 5' => 'Portrait', '0 6' => 'Landscape', '0 7' => 'Macro', '0 8' => 'Sport', '0 9' => 'Night Scene Portrait', '0 10' => 'No Flash', # SCN modes (menu-selected) (from K100D) '0 11' => 'Night Scene', '0 12' => 'Surf & Snow', '0 13' => 'Text', '0 14' => 'Sunset', '0 15' => 'Kids', '0 16' => 'Pet', '0 17' => 'Candlelight', '0 18' => 'Museum', '0 19' => 'Food', '0 20' => 'Stage Lighting', '0 21' => 'Night Snap', '0 23' => 'Blue Sky', # (Q) '0 24' => 'Sunset', # (Q) '0 26' => 'Night Scene HDR', # (Q) '0 27' => 'HDR', # (Q) '0 28' => 'Quick Macro', # (Q) '0 29' => 'Forest', # (Q) '0 30' => 'Backlight Silhouette', # (Q) # AUTO PICT modes (auto-selected) '1 4' => 'Auto PICT (Standard)', #13 '1 5' => 'Auto PICT (Portrait)', #7 (K100D) '1 6' => 'Auto PICT (Landscape)', # K110D '1 7' => 'Auto PICT (Macro)', #13 '1 8' => 'Auto PICT (Sport)', #13 # *istD modes (ref 7) '2 0' => 'Program (HyP)', #13 (K-5 Normal program line - PH) '2 1' => 'Hi-speed Program (HyP)', #19 (K10D, custom settings: Program Line 2, e-dial in Program 1, 2) '2 2' => 'DOF Program (HyP)', #19 (K10D, custom settings: Program Line 3, e-dial in Program 1, 2) '2 3' => 'MTF Program (HyP)', #19 (K10D, custom settings: Program Line 4, e-dial in Program 1, 2) '2 22' => 'Shallow DOF (HyP)', #PH (K-5) '3 0' => 'Green Mode', #16 '4 0' => 'Shutter Speed Priority', '5 0' => 'Aperture Priority', '6 0' => 'Program Tv Shift', '7 0' => 'Program Av Shift', #19 '8 0' => 'Manual', '9 0' => 'Bulb', '10 0' => 'Aperture Priority, Off-Auto-Aperture', '11 0' => 'Manual, Off-Auto-Aperture', '12 0' => 'Bulb, Off-Auto-Aperture', # extra K10D modes (ref 16) '13 0' => 'Shutter & Aperture Priority AE', '15 0' => 'Sensitivity Priority AE', '16 0' => 'Flash X-Sync Speed AE', '18 0' => 'Auto Program (Normal)', #PH (K-5) '18 1' => 'Auto Program (Hi-speed)', #PH (NC) '18 2' => 'Auto Program (DOF)', #PH (K-5) '18 3' => 'Auto Program (MTF)', #PH (NC) '18 22' => 'Auto Program (Shallow DOF)', #PH (NC) '20 22' => 'Blur Control', #PH (Q) '254 0' => 'Video', #PH (K-7,K-5) '255 0' => 'Video (Auto Aperture)', #PH (K-5) '255 4' => 'Video (4)', #PH (K-x,K-01) },{ # EV step size (ref 19) 0 => '1/2 EV steps', 1 => '1/3 EV steps', }], }, 0x0034 => { #7/PH Name => 'DriveMode', Writable => 'int8u', Count => 4, PrintConv => [{ 0 => 'Single-frame', # (also Interval Shooting for K-01 - PH) 1 => 'Continuous', # (K-5 Hi) 2 => 'Continuous (Lo)', #PH (K-5) 3 => 'Burst', #PH (K20D) 4 => 'Continuous (Medium)', #PH (K-3) 255 => 'Video', #PH (K-x) },{ 0 => 'No Timer', 1 => 'Self-timer (12 s)', 2 => 'Self-timer (2 s)', 15 => 'Video', #PH (Q MOV) 16 => 'Mirror Lock-up', # (K-5) 255 => 'n/a', #PH (K-x) },{ 0 => 'Shutter Button', # (also computer remote control - PH) 1 => 'Remote Control (3 s delay)', #19 2 => 'Remote Control', #19 4 => 'Remote Continuous Shooting', # (K-5) },{ 0x00 => 'Single Exposure', 0x01 => 'Multiple Exposure', 0x0f => 'Interval Movie', #PH (K-01) 0x10 => 'HDR', #PH (645D) 0x20 => 'HDR Strong 1', #PH (NC) (K-5) 0x30 => 'HDR Strong 2', #PH (K-5) 0x40 => 'HDR Strong 3', #PH (K-5) 0xe0 => 'HDR Auto', #PH (K-5) 0xff => 'Video', #PH (K-x) }], }, 0x0035 => { #PH Name => 'SensorSize', Format => 'int16u', Count => 2, Notes => 'includes masked pixels', # values for various models (not sure why this is in 2um increments): # 11894 7962 (K10D,K-m) 12012 7987 (*istDS,K100D,K110D) 12012 8019 (*istD), # 12061 7988 (K-5) 12053 8005 (K-r,K-x) 14352 9535 (K20D,K-7) # 22315 16711 (645) 12080 8008 (K-01) ValueConv => 'my @a=split(" ",$val); $_/=500 foreach @a; join(" ",@a)', ValueConvInv => 'my @a=split(" ",$val); $_*=500 foreach @a; join(" ",@a)', PrintConv => 'sprintf("%.3f x %.3f mm", split(" ",$val))', PrintConvInv => '$val=~s/\s*mm$//; $val=~s/\s*x\s*/ /; $val', }, 0x0037 => { #13 Name => 'ColorSpace', Writable => 'int16u', PrintConv => { 0 => 'sRGB', 1 => 'Adobe RGB', }, }, 0x0038 => { #5 (PEF only) Name => 'ImageAreaOffset', Writable => 'int16u', Count => 2, }, 0x0039 => { #PH Name => 'RawImageSize', Writable => 'int16u', Count => 2, PrintConv => '$_=$val;s/ /x/;$_', }, 0x003c => { #7/PH Name => 'AFPointsInFocus', # not writable because I'm not decoding these 4 bytes fully: # Nibble pattern: XSSSYUUU # X = unknown (AF focused flag?, 0 or 1) # SSS = selected AF point bitmask (0x000 or 0x7ff if unused) # Y = unknown (observed 0,6,7,b,e, always 0 if SSS is 0x000 or 0x7ff) # UUU = af points used Format => 'int32u', Notes => '*istD only', ValueConv => '$val & 0x7ff', # ignore other bits for now PrintConvColumns => 2, PrintConv => { 0 => '(none)', BITMASK => { 0 => 'Upper-left', 1 => 'Top', 2 => 'Upper-right', 3 => 'Left', 4 => 'Mid-left', 5 => 'Center', 6 => 'Mid-right', 7 => 'Right', 8 => 'Lower-left', 9 => 'Bottom', 10 => 'Lower-right', }, }, }, 0x003d => { #31 Name => 'DataScaling', Writable => 'int16u', # divide by the second value of Pentax_0x0201 (WhitePoint), usually # 8192, to get the floating point normalization factor. # One of the examples of how this tag can be used is calculation of # baseline exposure compensation (Adobe-style) for a PEF: # log2(Pentax_0x007e)-14-0.5+log2(Pentax_0x003d)-13 # or # log2(Pentax_0x007e*(Pentax_0x003d/(2^13))/(2^14))-0.5 # where # makernotes:Pentax_0x003d/(2^13) is the normalization factor. (ref 31) # - 8192 for most images, but occasionally 11571 for K100D/K110D, # and 8289 or 8456 for the K-x (ref PH) }, 0x003e => { #PH Name => 'PreviewImageBorders', Writable => 'int8u', Count => 4, Notes => 'top, bottom, left, right', }, 0x003f => { #PH Name => 'LensRec', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensRec' }, }, 0x0040 => { #PH Name => 'SensitivityAdjust', Writable => 'int16u', ValueConv => '($val - 50) / 10', ValueConvInv => '$val * 10 + 50', PrintConv => '$val ? sprintf("%+.1f", $val) : 0', PrintConvInv => '$val', }, 0x0041 => { #19 Name => 'ImageEditCount', Writable => 'int16u', }, 0x0047 => { #PH Name => 'CameraTemperature', # (chassis temperature, ref forum6677) Writable => 'int8s', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?c$//i; $val', }, 0x0048 => { #19 Name => 'AELock', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On', }, }, 0x0049 => { #13 Name => 'NoiseReduction', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x004d => [{ #PH Name => 'FlashExposureComp', Condition => '$count == 1', Writable => 'int32s', ValueConv => '$val / 256', ValueConvInv => 'int($val * 256 + ($val > 0 ? 0.5 : -0.5))', PrintConv => '$val ? sprintf("%+.1f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', },{ #PH (K-3) Name => 'FlashExposureComp', Writable => 'int8s', Count => 2, # (don't know what the 2nd number is for) ValueConv => [ '$val / 6' ], ValueConvInv => [ '$val / 6' ], PrintConv => [ '$val ? sprintf("%+.1f", $val) : 0' ], PrintConvInv => [ 'Image::ExifTool::Exif::ConvertFraction($val)' ], }], 0x004f => { #PH Name => 'ImageTone', # (Called CustomImageMode in K20D manual) Writable => 'int16u', PrintConvColumns => 2, PrintConv => { 0 => 'Natural', 1 => 'Bright', 2 => 'Portrait', # (K20D/K200D) 3 => 'Landscape', # (K20D) 4 => 'Vibrant', # (K20D) 5 => 'Monochrome', # (K20D) 6 => 'Muted', # (645D) 7 => 'Reversal Film', # (645D) (Ricoh WG-5 "Slide Film") 8 => 'Bleach Bypass', # (K-5) 9 => 'Radiant', # (Q) }, }, 0x0050 => { #PH Name => 'ColorTemperature', Writable => 'int16u', RawConv => '$val ? $val : undef', ValueConv => '53190 - $val', ValueConvInv => '53190 - $val', }, # 0x0053-0x005a - not in JPEG images - PH 0x0053 => { #28 Name => 'ColorTempDaylight', %colorTemp, Notes => '0x0053-0x005a are 3 numbers: Kelvin, shift AB, shift GM', }, 0x0054 => { Name => 'ColorTempShade', %colorTemp }, #28 0x0055 => { Name => 'ColorTempCloudy', %colorTemp }, #28 0x0056 => { Name => 'ColorTempTungsten', %colorTemp }, #28 0x0057 => { Name => 'ColorTempFluorescentD', %colorTemp }, #28 0x0058 => { Name => 'ColorTempFluorescentN', %colorTemp }, #28 0x0059 => { Name => 'ColorTempFluorescentW', %colorTemp }, #28 0x005a => { Name => 'ColorTempFlash', %colorTemp }, #28 0x005c => [{ #PH Name => 'ShakeReductionInfo', Condition => '$count == 4', # (2 bytes for the K-3) Format => 'undef', # (written as int8u) - do this just to save time converting the value SubDirectory => { TagTable => 'Image::ExifTool::Pentax::SRInfo' }, },{ Name => 'ShakeReductionInfo', Format => 'undef', # (written as int8u) - do this just to save time converting the value SubDirectory => { TagTable => 'Image::ExifTool::Pentax::SRInfo2' }, }], 0x005d => { #JD/PH # (used by all Pentax DSLR's except *istD and *istDS until firmware 2.0 - PH) # Observed values for the first shot of a new K10D are: 81 [PH], 181 [19], # 246 [7], and 209 [18 (one of the first 20 shots)], so there must be a number # of test images shot in the factory. (But my new K-5 started at 1 - PH) # This count includes shutter actuations even if they don't result in a # recorded image (eg. manual white balance frame or digital preview), but # does not include actuations due to Live View or video recording - PH Name => 'ShutterCount', Writable => 'undef', Count => 4, Notes => q{ Note: May be reset by servicing! Also, does not include shutter actuations for live view or video recording }, # raw value is a big-endian 4-byte integer, encrypted using Date and Time RawConv => 'length($val) == 4 ? unpack("N",$val) : undef', RawConvInv => q{ my $val = Image::ExifTool::Pentax::CryptShutterCount($val,$self); return pack('N', $val); }, ValueConv => \&CryptShutterCount, ValueConvInv => '$val', }, # 0x005e - 0x0060 => { #PH (K-5) Name => 'FaceInfo', Format => 'undef', # (written as int8u) SubDirectory => { TagTable => 'Image::ExifTool::Pentax::FaceInfo' }, }, 0x0062 => { #forum4803 Name => 'RawDevelopmentProcess', Condition => '$$self{Make} =~ /^(PENTAX|RICOH)/', # rules out Kodak, which also use this tag Writable => 'int16u', PrintConv => { 1 => '1 (K10D,K200D,K2000,K-m)', 3 => '3 (K20D)', 4 => '4 (K-7)', 5 => '5 (K-x)', 6 => '6 (645D)', 7 => '7 (K-r)', 8 => '8 (K-5,K-5II,K-5IIs)', 9 => '9 (Q)', 10 => '10 (K-01,K-30)', 11 => '11 (Q10)', 12 => '12 (MX-1)', 13 => '13 (K-3,K-3II)', 14 => '14 (645Z)', 15 => '15 (K-S1,K-S2)', #PH }, }, 0x0067 => { #PH (K-5) Name => 'Hue', Writable => 'int16u', PrintConvColumns => 2, PrintConv => { 0 => -2, 1 => 'Normal', 2 => 2, 3 => -1, 4 => 1, 5 => -3, 6 => 3, 7 => -4, 8 => 4, 65535 => 'None', # (Monochrome) }, }, # 0x0067 - int16u: 1 [and 65535 in Monochrome] (K20D,K200D) - PH 0x0068 => { #PH Name => 'AWBInfo', Format => 'undef', # (written as int8u) SubDirectory => { TagTable => 'Image::ExifTool::Pentax::AWBInfo' }, }, 0x0069 => { #PH (K20D, K-5, K-01 highlights only) Name => 'DynamicRangeExpansion', Notes => q{ called highlight correction by Pentax for the K20D, K-5, K-01 and maybe other models }, Writable => 'undef', Format => 'int8u', Count => 4, PrintConv => [{ 0 => 'Off', 1 => 'On', },{ 0 => 0, 1 => 'Enabled', # (K-01) 2 => 'Auto', # (K-01) }], }, 0x006b => { #PH (K-5) Name => 'TimeInfo', Format => 'undef', # (written as int8u) SubDirectory => { TagTable => 'Image::ExifTool::Pentax::TimeInfo' }, }, 0x006c => { #PH (K-5) Name => 'HighLowKeyAdj', Description => 'High/Low Key Adj', Writable => 'int16s', Count => 2, PrintConvColumns => 3, PrintConv => { '-4 0' => -4, '-3 0' => -3, '-2 0' => -2, '-1 0' => -1, '0 0' => 0, '1 0' => 1, '2 0' => 2, '3 0' => 3, '4 0' => 4, }, }, 0x006d => { #PH (K-5) Name => 'ContrastHighlight', Writable => 'int16s', Count => 2, PrintConvColumns => 3, PrintConv => { '-4 0' => -4, '-3 0' => -3, '-2 0' => -2, '-1 0' => -1, '0 0' => 0, '1 0' => 1, '2 0' => 2, '3 0' => 3, '4 0' => 4, }, }, 0x006e => { #PH (K-5) Name => 'ContrastShadow', Writable => 'int16s', Count => 2, PrintConvColumns => 3, PrintConv => { '-4 0' => -4, '-3 0' => -3, '-2 0' => -2, '-1 0' => -1, '0 0' => 0, '1 0' => 1, '2 0' => 2, '3 0' => 3, '4 0' => 4, }, }, 0x006f => { #PH (K-5) Name => 'ContrastHighlightShadowAdj', Description => 'Contrast Highlight/Shadow Adj', Writable => 'int8u', PrintConv => { 0 => 'Off', 1 => 'On', }, }, 0x0070 => { #PH (K-5) Name => 'FineSharpness', Writable => 'int8u', Count => -1, # 1 for K20/K200, 2 for K-5 PrintConv => [{ 0 => 'Off', 1 => 'On', },{ 0 => 'Normal', 2 => 'Extra fine', }], }, 0x0071 => { #PH (K20D,K-x) Name => 'HighISONoiseReduction', Format => 'int8u', PrintConv => [{ 0 => 'Off', 1 => 'Weakest', 2 => 'Weak', # (called "Low" by K-x) 3 => 'Strong', # (called "High" by K-x) 4 => 'Medium', 255 => 'Auto', # (K-5) },{ 0 => 'Inactive', 1 => 'Active', 2 => 'Active (Weak)', # (K-5) 3 => 'Active (Strong)', # (K-5) 4 => 'Active (Medium)', # (K-5) },{ # Start ISO level for NR (K-x) 48 => 'ISO>400', 56 => 'ISO>800', 64 => 'ISO>1600', 72 => 'ISO>3200', }], }, 0x0072 => { #JD (K20D) Name => 'AFAdjustment', Writable => 'int16s', }, 0x0073 => { #PH (K-5) Name => 'MonochromeFilterEffect', Writable => 'int16u', PrintConvColumns => 2, PrintConv => { 65535 => 'None', 1 => 'Green', 2 => 'Yellow', 3 => 'Orange', 4 => 'Red', 5 => 'Magenta', 6 => 'Blue', 7 => 'Cyan', 8 => 'Infrared', }, }, 0x0074 => { #PH (K-5) Name => 'MonochromeToning', Writable => 'int16u', PrintConvColumns => 2, PrintConv => { 65535 => 'None', 0 => -4, 1 => -3, 2 => -2, 3 => -1, 4 => 0, 5 => 1, 6 => 2, 7 => 3, 8 => 4, }, }, 0x0076 => { #PH (K-5) Name => 'FaceDetect', Writable => 'int8u', Count => 2, # the Optio S12 writes this but not the FacesDetected tag, so get FacesDetected from here DataMember => 'FacesDetected', RawConv => '$val =~ / (\d+)/ and $$self{FacesDetected} = $1; $val', # (the K-3 reports "On" even in phase-detect focus modes) PrintConv => [ '$val ? "On ($val faces max)" : "Off"', '"$val faces detected"', ], PrintConvInv => [ '$val =~ /(\d+)/ ? $1 : 0', '$val =~ /(\d+)/ ? $1 : 0', ], }, 0x0077 => { #PH (K-5) # set by taking a picture with face detect AF, # but it isn't reset until camera is turned off? - PH Name => 'FaceDetectFrameSize', Writable => 'int16u', Count => 2, }, # 0x0078 - int16u[2]: '0 0' (K-5,K-7,K-r,K-x) 0x0079 => { #PH Name => 'ShadowCorrection', Writable => 'int8u', Count => -1, PrintConvColumns => 2, PrintConv => { # (1 value for K-m/K2000, 2 for 645D) 0 => 'Off', 1 => 'On', 2 => 'Auto 2', # (NC, WG-3) '0 0' => 'Off', '1 1' => 'Weak', '1 2' => 'Normal', '1 3' => 'Strong', '2 4' => 'Auto', # (K-01) }, }, 0x007a => { #PH Name => 'ISOAutoParameters', Writable => 'int8u', Count => 2, PrintConv => { '1 0' => 'Slow', '2 0' => 'Standard', '3 0' => 'Fast', }, }, 0x007b => { #PH (K-5) Name => 'CrossProcess', Writable => 'int8u', PrintConvColumns => 2, PrintConv => { 0 => 'Off', 1 => 'Random', 2 => 'Preset 1', 3 => 'Preset 2', 4 => 'Preset 3', 33 => 'Favorite 1', 34 => 'Favorite 2', 35 => 'Favorite 3', }, }, 0x007d => { #PH Name => 'LensCorr', Format => 'undef', # (written as int8u) SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensCorr' }, }, 0x007e => { #31 Name => 'WhiteLevel', # (with black level already subtracted) Writable => 'int32u', # 15859,15860,15864,15865,16315 (K-5 PEF/DNG only) - PH # 3934, 3935 (Q DNG) - PH }, 0x007f => { #PH (K-5) Name => 'BleachBypassToning', Writable => 'int16u', PrintConvColumns => 2, PrintConv => { 65535 => 'Off', 1 => 'Green', 2 => 'Yellow', 3 => 'Orange', 4 => 'Red', 5 => 'Magenta', 6 => 'Purple', 7 => 'Blue', 8 => 'Cyan', }, }, 0x0080 => { #PH (Q) Name => 'AspectRatio', PrintConv => { 0 => '4:3', 1 => '3:2', 2 => '16:9', 3 => '1:1', }, }, # 0x0081 - int8u: 0 (Q) 0x0082 => { Name => 'BlurControl', Writable => 'int8u', Count => 4, PrintConv => [ { 0 => 'Off', 1 => 'Low', 2 => 'Medium', 3 => 'High', }, undef, # 0 with BlurControl is Off, seen 0,1,3 when on (related to subject distance?) undef, # 0 with BlurControl Off, 45 when on undef, # always 0 ], }, # 0x0083 - int8u: 0 (Q DNG) # 0x0084 - int8u: 0 (Q) 0x0085 => { #PH Name => 'HDR', Format => 'int8u', Count => 4, PrintConv => [{ # (K-01,K-3) 0 => 'Off', 1 => 'HDR Auto', 2 => 'HDR 1', 3 => 'HDR 2', 4 => 'HDR 3', },{ # (K-01) 0 => 'Auto-align Off', 1 => 'Auto-align On', },{ # not sure about this - PH # - you can set HDR "Exposure Bracket Value" with the K-3 # - guessed from imaging-resource K-3 samples K3OUTBHDR_A{1,2,3} 0 => 'n/a', 4 => '1 EV', 8 => '2 EV', 12 => '3 EV', # (get this from K-01, but can't set EV) }, # (4th number is always 0) ], }, # 0x0086 - int8u: 0, 111[Sport,Pet] (Q) - related to Tracking FocusMode? # 0x0087 - int8u: 0 (Q) 0x0088 => { #PH Name => 'NeutralDensityFilter', Writable => 'int8u', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x008b => { #PH (LS465) Name => 'ISO', Priority => 0, Writable => 'int32u', }, 0x0200 => { #5 Name => 'BlackPoint', Writable => 'int16u', Count => 4, }, 0x0201 => { #5 # (this doesn't change for different fixed white balances in JPEG images: Daylight, # Tungsten, Kelvin, etc -- always "8192 8192 8192 8192", but it varies for these in # RAW images, all images in Auto, for different Manual WB settings, and for images # taken via Pentax Remote Assistant) - PH Name => 'WhitePoint', Writable => 'int16u', Count => 4, }, # 0x0202: int16u[4]: all 0's in all my samples 0x0203 => { #JD (not really sure what these mean) Name => 'ColorMatrixA', Writable => 'int16s', Count => 9, ValueConv => 'join(" ",map({ $_/8192 } split(" ",$val)))', ValueConvInv => 'join(" ",map({ int($_*8192 + ($_<0?-0.5:0.5)) } split(" ",$val)))', PrintConv => 'join(" ",map({sprintf("%.5f",$_)} split(" ",$val)))', PrintConvInv => '"$val"', }, 0x0204 => { #JD Name => 'ColorMatrixB', Writable => 'int16s', Count => 9, ValueConv => 'join(" ",map({ $_/8192 } split(" ",$val)))', ValueConvInv => 'join(" ",map({ int($_*8192 + ($_<0?-0.5:0.5)) } split(" ",$val)))', PrintConv => 'join(" ",map({sprintf("%.5f",$_)} split(" ",$val)))', PrintConvInv => '"$val"', }, 0x0205 => [{ #19 Name => 'CameraSettings', # size: *istD/*istDs/K100D/K110D=16, K-m/K2000=14, K-7/K-x=19, # K200D/K20D/K-5/645D=20, K-r=21, K10D=22, K-01=25 Condition => '$count < 25', # (not valid for the K-01) SubDirectory => { TagTable => 'Image::ExifTool::Pentax::CameraSettings', ByteOrder => 'BigEndian', }, },{ Name => 'CameraSettingsUnknown', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::CameraSettingsUnknown', ByteOrder => 'BigEndian', }, }], 0x0206 => [{ #PH Name => 'AEInfo', # size: *istD/*istDs/K100D/K110D=14, K10D/K200D/K20D=16, K-m/K2000=20, # K-7/K-x=24, K-5/K-r/645D=25 Condition => '$count <= 25 and $count != 21 and $$self{AEInfoSize} = $count', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::AEInfo' }, },{ Name => 'AEInfo2', # size: K-01=21 Condition => '$count == 21', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::AEInfo2' }, },{ Name => 'AEInfo3', # size: K-30=48 Condition => '$count == 48', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::AEInfo3' }, },{ Name => 'AEInfoUnknown', # size: Q/Q10=34 SubDirectory => { TagTable => 'Image::ExifTool::Pentax::AEInfoUnknown' }, }], 0x0207 => [ #PH { Name => 'LensInfo', # the *ist series (and Samsung GX-1) always use the old format, and all # other models but the K100D, K110D and K100D Super always use the newer # format, and for the K110D/K110D we expect ff or 00 00 at byte 20 if # it is the old format.) Condition => q{ $$self{Model}=~/(\*ist|GX-1[LS])/ or ($$self{Model}=~/(K100D|K110D)/ and $$valPt=~/^.{20}(\xff|\0\0)/s) }, SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensInfo' }, },{ Name => 'LensInfo', Condition => '$count != 90 and $count != 91 and $count != 80 and $count != 128', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensInfo2' }, },{ Name => 'LensInfo', # 645D Condition => '$count == 90', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensInfo3' }, },{ Name => 'LensInfo', # K-r, K-5, K-5II Condition => '$count == 91', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensInfo4' }, },{ Name => 'LensInfo', # K-01, K-30, K-50, K-500, K-3, K-3II Condition => '$count == 80 or $count == 128', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensInfo5' }, } ], 0x0208 => [ #PH { Name => 'FlashInfo', Condition => '$count == 27', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::FlashInfo' }, }, { Name => 'FlashInfoUnknown', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::FlashInfoUnknown' }, }, ], 0x0209 => { #PH Name => 'AEMeteringSegments', Format => 'int8u', Count => -1, Notes => q{ measurements from each of the 16 AE metering segments for models such as the K10D, 77 metering segments for models such as the K-5, and 4050 metering segments for the K-3, converted to LV }, %convertMeteringSegments, # 16 metering segment 77 metering segment # locations (ref JD, K10D) locations (ref PH, K-5) # +-------------------------+ # | 14 | +----------------------------------+ # | +---+---+---+---+ | | 0 1 2 3 4 5 6 7 8 9 10 | # | | 5 | 3/1\ 2| 4 | | | 11 12 13 14 15 16 17 18 19 20 21 | # | +-+-+-+-+ - +-+-+-+-+ | | 22 23 24 25 26 27 28 29 30 31 32 | # +--+ 9 | 7 ||0|| 6 | 8 +--+ | 33 34 35 36 37 38 39 40 41 42 43 | # | +-+-+-+-+ - +-+-+-+-+ | | 44 45 46 47 48 49 50 51 52 53 54 | # | |13 |11\ /10|12 | | | 55 56 57 58 59 60 61 62 63 64 65 | # | +---+---+---+---+ | | 66 67 68 69 70 71 72 73 74 75 76 | # | 15 | +----------------------------------+ # +-------------------------+ }, 0x020a => { #PH/JD/19 Name => 'FlashMeteringSegments', Format => 'int8u', Count => -1, %convertMeteringSegments, }, 0x020b => { #PH/JD/19 Name => 'SlaveFlashMeteringSegments', Format => 'int8u', Count => -1, Notes => 'used in wireless control mode', %convertMeteringSegments, }, 0x020d => { #PH Name => 'WB_RGGBLevelsDaylight', Writable => 'int16u', Count => 4, }, 0x020e => { #PH Name => 'WB_RGGBLevelsShade', Writable => 'int16u', Count => 4, }, 0x020f => { #PH Name => 'WB_RGGBLevelsCloudy', Writable => 'int16u', Count => 4, }, 0x0210 => { #PH Name => 'WB_RGGBLevelsTungsten', Writable => 'int16u', Count => 4, }, 0x0211 => { #PH Name => 'WB_RGGBLevelsFluorescentD', Writable => 'int16u', Count => 4, }, 0x0212 => { #PH Name => 'WB_RGGBLevelsFluorescentN', Writable => 'int16u', Count => 4, }, 0x0213 => { #PH Name => 'WB_RGGBLevelsFluorescentW', Writable => 'int16u', Count => 4, }, 0x0214 => { #PH Name => 'WB_RGGBLevelsFlash', Writable => 'int16u', Count => 4, }, 0x0215 => { #PH Name => 'CameraInfo', Format => 'undef', # (written as int32u) SubDirectory => { TagTable => 'Image::ExifTool::Pentax::CameraInfo' }, }, 0x0216 => { #PH Name => 'BatteryInfo', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::BatteryInfo', ByteOrder => 'BigEndian', # have seen makernotes changed to little-endian in DNG! }, }, # 0x021a - undef[1068] (K-5) - ToneMode/Saturation mapping matrices (ref 28) 0x021b => { #19 Name => 'SaturationInfo', Flags => [ 'Unknown', 'Binary' ], Writable => 0, Notes => 'only in PEF and DNG images', # K10D values with various Saturation settings (ref 19): # Very Low: 000000022820f9a0fe4000802660f92002e0fee01e402c40f880fb40ffc02b20f52002e0fe401ee0 # Low: 000000022ae0f700fe20ff402840f88001e0fcc021602f60f560fb40fe602d20f48001c0fbc02280 # Med Low: 000000022dc0f420fe20fe002a20f7e000c0fa8024c032c0f220fb20fce02f60f3c000a0f9202640 # Normal: 000000023120f0e0fe00fc802c40f740ffa0f7e028803660ee80fb20fb4031c0f300ff60f6202a80 # Med High: 0000000234e0ed40fde0fae02ea0f680fe60f5002ca03a80ea80fb00f9603480f220fe00f2e02f20 # High: 0000000238c0e960fde0f9203140f5a0fce0f1e031403f00e600fb00f7803760f120fc60ef403460 # Very High:000000023d20e520fdc0f7203420f4c0fb60ee6036404400e120fae0f5403aa0f020fac0eb403a00 }, # 0x021c - undef[18] (K-5) # 0x021d - undef[18] (K-5) # 0x021e - undef[8] (K-5, Q) 0x021f => { #JD Name => 'AFInfo', SubDirectory => { # NOTE: Most of these subdirectories are 'undef' format, and as such the # byte ordering is not changed when changed via the Pentax software (which # will write a little-endian TIFF on an Intel system). So we must define # BigEndian byte ordering for any of these which contain multi-byte values. - PH ByteOrder => 'BigEndian', TagTable => 'Image::ExifTool::Pentax::AFInfo', }, }, 0x0220 => { #6 Name => 'HuffmanTable', Flags => [ 'Unknown', 'Binary' ], Writable => 0, Notes => 'found in K10D, K20D and K2000D PEF images', }, 0x0221 => { #28 Name => 'KelvinWB', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::KelvinWB' }, }, 0x0222 => { #PH Name => 'ColorInfo', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::ColorInfo' }, }, # 0x0223 - undef[198] (K-5 PEF/DNG only) 0x0224 => { #19 Name => 'EVStepInfo', Drop => 200, # drop if larger than 200 bytes (40 kB in Pentax Q and Q10) SubDirectory => { TagTable => 'Image::ExifTool::Pentax::EVStepInfo' }, }, 0x0226 => { #PH Name => 'ShotInfo', # (may want to change this later when more is decoded) SubDirectory => { TagTable => 'Image::ExifTool::Pentax::ShotInfo' }, }, 0x0227 => { #PH Name => 'FacePos', Condition => '$$self{FacesDetected}', # ignore if no faces to decode SubDirectory => { TagTable => 'Image::ExifTool::Pentax::FacePos' }, }, 0x0228 => { #PH Name => 'FaceSize', Condition => '$$self{FacesDetected}', # ignore if no faces to decode SubDirectory => { TagTable => 'Image::ExifTool::Pentax::FaceSize' }, }, 0x0229 => { #PH (verified) (K-m, K-x, K-7) Name => 'SerialNumber', Writable => 'string', Notes => 'left blank by some cameras', }, 0x022a => { #PH (K-5) Name => 'FilterInfo', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::FilterInfo', ByteOrder => 'BigEndian', }, }, 0x022b => { #PH (K-5) Name => 'LevelInfo', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LevelInfo' }, }, # 0x022c - undef[46] (K-5) 0x022d => { #28 Name => 'WBLevels', Condition => '$count == 100', # (just to be safe, but no other counts observed) SubDirectory => { TagTable => 'Image::ExifTool::Pentax::WBLevels' }, }, 0x022e => { #PH (K-5 AVI videos) Name => 'Artist', Groups => { 2 => 'Author' }, Writable => 'string', }, 0x022f => { #PH (K-5 AVI videos) Name => 'Copyright', Groups => { 2 => 'Author' }, Writable => 'string', }, 0x0230 => { #PH (K-x AVI videos) Name => 'FirmwareVersion', Notes => 'only in AVI videos', # this tag only exists in AVI videos, and for the K-x the value of # this tag is "K-x Ver 1.00", which is the same as the EXIF Software # tag. I used a different tag name for this because Pentax uses the # AVI Software tag for a different string, "PENTAX K-x". Writable => 'string', }, 0x0231 => { #PH (K-5) Name => 'ContrastDetectAFArea', Writable => 'int16u', Count => 4, Notes => q{ AF area of the most recent contrast-detect focus operation. Coordinates are left, top, width and height in a 720x480 frame, with Y downwards }, }, 0x0235 => { #PH (K-5) Name => 'CrossProcessParams', # (it would be interesting to know exactly what these mean) Writable => 'undef', Format => 'int8u', Count => 10, }, # 0x0236 - undef[52] (Q) # 0x0237 - undef[11] possibly related to smart effect setting? (Q) # 0x0238 - undef[9] (Q) 0x0239 => { #PH Name => 'LensInfoQ', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensInfoQ' }, }, # 0x023a - undef[10] (Q) # 0x023b - undef[9] (K-01) # 01a700500000000000, 91a700500000000000, 41a700500000000000, 002700500000000000 # c00500400000000000, 400500500000000000, 4004ff420100000000, 4087ff480000000000 0x0243 => { #PH Name => 'PixelShiftInfo', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::PixelShiftInfo' }, }, 0x03fe => { #PH Name => 'DataDump', Writable => 0, PrintConv => '\$val', }, 0x03ff => [ #PH { Name => 'TempInfo', Condition => '$$self{Model} =~ /K-(01|3|30|5|50|500)\b/', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::TempInfo' }, },{ Name => 'UnknownInfo', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::UnknownInfo' }, }, ], 0x0402 => { #5 Name => 'ToneCurve', PrintConv => '\$val', }, 0x0403 => { #5 Name => 'ToneCurves', PrintConv => '\$val', }, # 0x0404 - undef[2086] (K-5) 0x0405 => { #PH - undef[24200] (K-5 PEF/DNG only), undef[28672] (Q DNG) Name => 'UnknownBlock', Writable => 'undef', Notes => 'large unknown data block in PEF/DNG images but not JPG images', Flags => [ 'Unknown', 'Binary', 'Drop' ], }, # 0x0406 - undef[4116] (K-5) # 0x0407 - undef[3072] (Q DNG) # 0x0408 - undef[1024] (Q DNG) 0x0e00 => { Name => 'PrintIM', Description => 'Print Image Matching', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main', }, }, ); # shake reduction information (ref PH) %Image::ExifTool::Pentax::SRInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Shake reduction information.', 0 => { Name => 'SRResult', PrintConv => { #PH/JD 0 => 'Not stabilized', BITMASK => { 0 => 'Stabilized', # have seen 1 and 4 for 0.5 and 0.3 sec exposures with NR on and Bit 0 also set - ref 19 # have seen bits 1,2,3,4 in K-5 AVI videos - PH 6 => 'Not ready', }, }, }, 1 => { Name => 'ShakeReduction', PrintConv => { 0 => 'Off', 1 => 'On', 4 => 'Off (4)', # (K20D, K200D, K-7, K-5) 5 => 'On but Disabled', # (K20D, K-5) # (can be 5 "On but Disabled" for K-5 with HDR [auto-align off only], # Composition Adjust, DriveMode = Self-timer or Remote, and movie with SR off!) 6 => 'On (Video)', # (K-7) 7 => 'On (7)', #(NC) (K20D, K200D, K-m, K-5) 15 => 'On (15)', # (K20D with Tamron 10-20mm @ 10mm) 39 => 'On (mode 2)', # (K-01) (on during capture and live view) 135 => 'On (135)', # (K-5IIs) 167 => 'On (mode 1)', # (K-01) (on during capture only) }, }, 2 => { Name => 'SRHalfPressTime', # (was SR_SWSToSWRTime: SWS=photometering switch, SWR=shutter release switch) # (from http://www.patentstorm.us/patents/6597867-description.html) # (here, SR could more accurately mean Shutter Release, not Shake Reduction) # (not valid for K-01 - PH) Notes => q{ time from when the shutter button was half pressed to when the shutter was released, including time for focusing. Not valid for some models }, # (constant of 60 determined from times: 2sec=127; 3sec=184,197; 4sec=244,249,243,246 - PH) ValueConv => '$val / 60', ValueConvInv => 'my $v=$val*60; $v < 255 ? int($v + 0.5) : 255', PrintConv => 'sprintf("%.2f s",$val) . ($val > 254.5/60 ? " or longer" : "")', PrintConvInv => '$val=~tr/0-9.//dc; $val', }, 3 => { #JD Name => 'SRFocalLength', ValueConv => '$val & 0x01 ? $val * 4 : $val / 2', ValueConvInv => '$val <= 127 ? int($val) * 2 : int($val / 4) | 0x01', PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm//;$val', }, ); # shake reduction information for the K-3 (ref PH) %Image::ExifTool::Pentax::SRInfo2 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Shake reduction information for the K-3.', 0 => { Name => 'SRResult', Unknown => 1, PrintConv => { BITMASK => { # Bit 0 - have seen this set in a few Pentax samples - PH # Bit 6 - usually set when SR is Off, and occasionally when On - PH # Bit 7 - set when AA simulation is on - PH }}, }, 1 => { Name => 'ShakeReduction', PrintConv => { #forum5425 0 => 'Off', # (NC for K-3) 1 => 'On', # (NC for K-3) 4 => 'Off (AA simulation off)', 5 => 'On but Disabled', # (NC for K-3) 6 => 'On (Video)', # (NC for K-3) 7 => 'On (AA simulation off)', 12 => 'Off (AA simulation type 1)', # (AA linear motion) 15 => 'On (AA simulation type 1)', # (AA linear motion) 20 => 'Off (AA simulation type 2)', # (AA circular motion) 23 => 'On (AA simulation type 2)', # (AA circular motion) }, }, ); # face detection information (ref PH, K-5) %Image::ExifTool::Pentax::FaceInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, DATAMEMBER => [ 0 ], 0 => { Name => 'FacesDetected', RawConv => '$$self{FacesDetected} = $val', }, 2 => { Name => 'FacePosition', Notes => q{ X/Y coordinates of the center of the main face in percent of frame size, with positive Y downwards }, Format => 'int8u[2]', }, ); # automatic white balance settings (ref PH, K-5) %Image::ExifTool::Pentax::AWBInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # 0 - always 1? # (data ends here for the K20D, K200D, K-x and K-7) 0 => { Name => 'WhiteBalanceAutoAdjustment', PrintConv => { 0 => 'Off', 1 => 'On', }, }, 1 => { # (exists only for K-5) Name => 'TungstenAWB', PrintConv => { 0 => 'Subtle Correction', 1 => 'Strong Correction', }, }, ); # world time settings (ref PH, K-5) %Image::ExifTool::Pentax::TimeInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Time' }, 0.1 => { Name => 'WorldTimeLocation', Mask => 0x01, PrintConv => { 0x00 => 'Hometown', 0x01 => 'Destination', }, }, 0.2 => { Name => 'HometownDST', Mask => 0x02, PrintConv => { 0x00 => 'No', 0x02 => 'Yes', }, }, 0.3 => { Name => 'DestinationDST', Mask => 0x04, PrintConv => { 0x00 => 'No', 0x04 => 'Yes', }, }, 2 => { Name => 'HometownCity', SeparateTable => 'City', PrintConv => \%pentaxCities, }, 3 => { Name => 'DestinationCity', SeparateTable => 'City', PrintConv => \%pentaxCities, }, ); # lens distortion correction (ref PH, K-5) %Image::ExifTool::Pentax::LensCorr = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0 => { Name => 'DistortionCorrection', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 1 => { Name => 'ChromaticAberrationCorrection', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 2 => { Name => 'PeripheralIlluminationCorr', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 3 => { Name => 'DiffractionCorrection', PrintConv => { 0 => 'Off', 16 => 'On' }, }, ); # camera settings (ref 19) %Image::ExifTool::Pentax::CameraSettings = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PRIORITY => 0, NOTES => 'Camera settings information written by Pentax DSLR cameras.', 0 => { Name => 'PictureMode2', PrintConv => { 0 => 'Scene Mode', #PH 1 => 'Auto PICT', #PH (NC) 2 => 'Program AE', 3 => 'Green Mode', 4 => 'Shutter Speed Priority', 5 => 'Aperture Priority', 6 => 'Program Tv Shift', #PH 7 => 'Program Av Shift', 8 => 'Manual', #PH 9 => 'Bulb', #PH 10 => 'Aperture Priority, Off-Auto-Aperture', #PH (NC) 11 => 'Manual, Off-Auto-Aperture', #PH 12 => 'Bulb, Off-Auto-Aperture', #PH (NC) 13 => 'Shutter & Aperture Priority AE', 15 => 'Sensitivity Priority AE', 16 => 'Flash X-Sync Speed AE', #PH }, }, 1.1 => { Name => 'ProgramLine', # only set to other than Normal when in Program AE mode Mask => 0x03, PrintConv => { 0 => 'Normal', 1 => 'Hi Speed', 2 => 'Depth', 3 => 'MTF', }, }, 1.2 => { # (K10D, K-5) Name => 'EVSteps', Mask => 0x20, PrintConv => { 0x00 => '1/2 EV Steps', 0x20 => '1/3 EV Steps', }, }, 1.3 => { # (this bit is set for movies with the K-5 - PH) Name => 'E-DialInProgram', # always set even when not in Program AE mode Mask => 0x40, PrintConv => { 0x00 => 'Tv or Av', 0x40 => 'P Shift', }, }, 1.4 => { # (K10D, K-5) Name => 'ApertureRingUse', # always set even Aperture Ring is in A mode Mask => 0x80, PrintConv => { 0x00 => 'Prohibited', 0x80 => 'Permitted', }, }, 2 => { Name => 'FlashOptions', Notes => 'the camera flash options settings, set even if the flash is off', Mask => 0xf0, ValueConv => '$val>>4', ValueConvInv => '$val<<4', # Note: These tags correlate with the FlashMode and InternalFlashMode values, # and match what is displayed by the Pentax software PrintConv => { 0 => 'Normal', # (this value can occur in Green Mode) - ref 19 1 => 'Red-eye reduction', # (this value can occur in Green Mode) - ref 19 2 => 'Auto', # (this value can occur in other than Green Mode) - ref 19 3 => 'Auto, Red-eye reduction', #PH (this value can occur in other than Green Mode) - ref 19 5 => 'Wireless (Master)', 6 => 'Wireless (Control)', 8 => 'Slow-sync', 9 => 'Slow-sync, Red-eye reduction', 10 => 'Trailing-curtain Sync' }, }, 2.1 => { Name => 'MeteringMode2', Mask => 0x0f, Notes => 'may not be valid for some models, eg. *ist D', PrintConv => { 0 => 'Multi-segment', BITMASK => { 0 => 'Center-weighted average', 1 => 'Spot', }, }, }, 3 => { Name => 'AFPointMode', Mask => 0xf0, PrintConv => { 0x00 => 'Auto', BITMASK => { 4 => 'Select', 5 => 'Fixed Center', # have seen bit 6 set in pre-production images (firmware 0.20) - PH }, }, }, 3.1 => { Name => 'FocusMode2', Mask => 0x0f, PrintConv => { 0 => 'Manual', 1 => 'AF-S', 2 => 'AF-C', 3 => 'AF-A', #PH }, }, 4 => { Name => 'AFPointSelected2', Format => 'int16u', PrintConv => { 0 => 'Auto', BITMASK => { 0 => 'Upper-left', 1 => 'Top', 2 => 'Upper-right', 3 => 'Left', 4 => 'Mid-left', 5 => 'Center', 6 => 'Mid-right', 7 => 'Right', 8 => 'Lower-left', 9 => 'Bottom', 10 => 'Lower-right', }, }, }, 6 => { Name => 'ISOFloor', #PH # manual ISO or minimum ISO in Auto ISO mode - PH ValueConv => 'int(100*exp(Image::ExifTool::Pentax::PentaxEv($val-32)*log(2))+0.5)', ValueConvInv => 'Image::ExifTool::Pentax::PentaxEvInv(log($val/100)/log(2))+32', }, 7 => { Name => 'DriveMode2', PrintConv => { 0 => 'Single-frame', BITMASK => { 0 => 'Continuous', # (K-5 Hi) 1 => 'Continuous (Lo)', #PH (K-5) 2 => 'Self-timer (12 s)', #PH 3 => 'Self-timer (2 s)', #PH 4 => 'Remote Control (3 s delay)', 5 => 'Remote Control', 6 => 'Exposure Bracket', #PH/19 7 => 'Multiple Exposure', }, }, }, 8 => { Name => 'ExposureBracketStepSize', # This is set even when Exposure Bracket is Off (and the K10D # displays Ò---Ó as the step size when you press the EB button) - DaveN # because the last value is remembered and if you turn Exposure Bracket # on the step size goes back to what it was before. PrintConv => { 3 => '0.3', 4 => '0.5', 5 => '0.7', 8 => '1.0', #PH 11 => '1.3', 12 => '1.5', 13 => '1.7', #(NC) 16 => '2.0', #PH }, }, 9 => { #PH/19 Name => 'BracketShotNumber', PrintHex => 1, PrintConv => { 0 => 'n/a', 0x02 => '1 of 2', #PH (K-5) 0x12 => '2 of 2', #PH (K-5) 0x03 => '1 of 3', 0x13 => '2 of 3', 0x23 => '3 of 3', 0x05 => '1 of 5', 0x15 => '2 of 5', 0x25 => '3 of 5', 0x35 => '4 of 5', 0x45 => '5 of 5', }, }, 10 => { Name => 'WhiteBalanceSet', Mask => 0xf0, # Not necessarily the white balance used; for example if the custom menu is set to # "WB when using flash" -> "2 Flash", then this tag reports the camera setting while # tag 0x0019 reports Flash if the Flash was used. PrintConv => { 0 => 'Auto', 16 => 'Daylight', 32 => 'Shade', 48 => 'Cloudy', 64 => 'Daylight Fluorescent', 80 => 'Day White Fluorescent', 96 => 'White Fluorescent', 112 => 'Tungsten', 128 => 'Flash', 144 => 'Manual', # The three Set Color Temperature settings refer to the 3 preset settings which # can be saved in the menu (see page 123 of the K10D manual) 192 => 'Set Color Temperature 1', 208 => 'Set Color Temperature 2', 224 => 'Set Color Temperature 3', }, }, 10.1 => { Name => 'MultipleExposureSet', Mask => 0x0f, PrintConv => { 0 => 'Off', 1 => 'On', }, }, 13 => { Name => 'RawAndJpgRecording', Condition => '$$self{Model} =~ /(K10D|GX10)\b/', Notes => 'K10D only', # this is actually a bit field: - PH # bit 0=JPEG, bit 2=PEF, bit 3=DNG; high nibble: 0x00=best, 0x20=better, 0x40=good PrintHex => 1, PrintConv => { 0x01 => 'JPEG (Best)', #PH 0x04 => 'RAW (PEF, Best)', 0x05 => 'RAW+JPEG (PEF, Best)', 0x08 => 'RAW (DNG, Best)', #PH (NC) 0x09 => 'RAW+JPEG (DNG, Best)', #PH (NC) 0x21 => 'JPEG (Better)', #PH 0x24 => 'RAW (PEF, Better)', 0x25 => 'RAW+JPEG (PEF, Better)', #PH 0x28 => 'RAW (DNG, Better)', #PH 0x29 => 'RAW+JPEG (DNG, Better)', #PH (NC) 0x41 => 'JPEG (Good)', 0x44 => 'RAW (PEF, Good)', #PH (NC) 0x45 => 'RAW+JPEG (PEF, Good)', #PH (NC) 0x48 => 'RAW (DNG, Good)', #PH (NC) 0x49 => 'RAW+JPEG (DNG, Good)', # have seen values of 0,2,34 for other models (not K10D) - PH }, }, 14.1 => { #PH Name => 'JpgRecordedPixels', Condition => '$$self{Model} =~ /(K10D|GX10)\b/', Notes => 'K10D only', Mask => 0x03, PrintConv => { 0 => '10 MP', 1 => '6 MP', 2 => '2 MP', }, }, 14.2 => { #PH (K-5) Name => 'LinkAEToAFPoint', Condition => '$$self{Model} =~ /K-5\b/', Notes => 'K-5 only', Mask => 0x01, PrintConv => { 0x00 => 'Off', 0x01 => 'On', }, }, 14.3 => { #PH (K-5) Name => 'SensitivitySteps', Condition => '$$self{Model} =~ /K-5\b/', Notes => 'K-5 only', Mask => 0x02, PrintConv => { 0x00 => '1 EV Steps', 0x02 => 'As EV Steps', }, }, 14.4 => { #PH (K-5) Name => 'ISOAuto', Condition => '$$self{Model} =~ /K-5\b/', Notes => 'K-5 only', Mask => 0x04, PrintConv => { 0x00 => 'Off', 0x04 => 'On', }, }, # 14.5 Mask 0x80 - changes for K-5 16 => { Name => 'FlashOptions2', Condition => '$$self{Model} =~ /(K10D|GX10)\b/', Notes => 'K10D only; set even if the flash is off', Mask => 0xf0, # Note: the Normal and Auto values (0x00 to 0x30) do not tags always # correlate with the FlashMode, InternalFlashMode and FlashOptions values # however, these values seem to better match the K10D's actual functionality # (always Auto in Green mode always Normal otherwise if one of the other options # isn't selected) - ref 19 # (these tags relate closely to InternalFlashMode values - PH) PrintConv => { 0x00 => 'Normal', # (this value never occurs in Green Mode) - ref 19 0x10 => 'Red-eye reduction', # (this value never occurs in Green Mode) - ref 19 0x20 => 'Auto', # (this value only occurs in Green Mode) - ref 19 0x30 => 'Auto, Red-eye reduction', # (this value only occurs in Green Mode) - ref 19 0x50 => 'Wireless (Master)', 0x60 => 'Wireless (Control)', 0x80 => 'Slow-sync', 0x90 => 'Slow-sync, Red-eye reduction', 0xa0 => 'Trailing-curtain Sync' }, }, 16.1 => { Name => 'MeteringMode3', Condition => '$$self{Model} =~ /(K10D|GX10)\b/', Notes => 'K10D only', Mask => 0x0f, PrintConv => { 0 => 'Multi-segment', BITMASK => { 0 => 'Center-weighted average', 1 => 'Spot', }, }, }, # 16 Mask 0x0f - changes when changing EV steps? (K-5) 17.1 => { Name => 'SRActive', Condition => '$$self{Model} =~ /(K10D|GX10)\b/', Notes => q{ K10D only; SR is active only when ShakeReduction is On, DriveMode is not Remote or Self-timer, and Internal/ExternalFlashMode is not "On, Wireless" }, Mask => 0x80, PrintConv => { 0x00 => 'No', 0x80 => 'Yes', }, }, 17.2 => { Name => 'Rotation', Condition => '$$self{Model} =~ /(K10D|GX10)\b/', Notes => 'K10D only', Mask => 0x60, PrintConv => { 0x00 => 'Horizontal (normal)', 0x20 => 'Rotate 180', 0x40 => 'Rotate 90 CW', 0x60 => 'Rotate 270 CW', }, }, # Bit 0x08 is set on 3 of my 3000 shots to (All 3 were Shutter Priority # but this may not mean anything with such a small sample) - ref 19 17.3 => { Name => 'ISOSetting', Condition => '$$self{Model} =~ /(K10D|GX10)\b/', Notes => 'K10D only', Mask => 0x04, PrintConv => { 0x00 => 'Manual', 0x04 => 'Auto', }, }, 17.4 => { Name => 'SensitivitySteps', Condition => '$$self{Model} =~ /(K10D|GX10)\b/', Notes => 'K10D only', Mask => 0x02, PrintConv => { 0x00 => '1 EV Steps', 0x02 => 'As EV Steps', }, }, # 17 Mask 0x08 - changed when changing Auto ISO range (K-5) 18 => { Name => 'TvExposureTimeSetting', Condition => '$$self{Model} =~ /(K10D|GX10)\b/', Notes => 'K10D only', ValueConv => 'exp(-Image::ExifTool::Pentax::PentaxEv($val-68)*log(2))', ValueConvInv => 'Image::ExifTool::Pentax::PentaxEvInv(-log($val)/log(2))+68', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 19 => { Name => 'AvApertureSetting', Condition => '$$self{Model} =~ /(K10D|GX10)\b/', Notes => 'K10D only', ValueConv => 'exp(Image::ExifTool::Pentax::PentaxEv($val-68)*log(2)/2)', ValueConvInv => 'Image::ExifTool::Pentax::PentaxEvInv(log($val)*2/log(2))+68', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 20 => { #PH Name => 'SvISOSetting', Condition => '$$self{Model} =~ /(K10D|GX10)\b/', Notes => 'K10D only', # ISO setting for sensitivity-priority mode # (conversion may not give actual displayed values:) # 32 => 100, 35 => 125, 36 => 140, 37 => 160, # 40 => 200, 43 => 250, 44 => 280, 45 => 320, # 48 => 400, 51 => 500, 52 => 560, 53 => 640, # 56 => 800, 59 => 1000,60 => 1100,61 => 1250, 64 => 1600 ValueConv => 'int(100*exp(Image::ExifTool::Pentax::PentaxEv($val-32)*log(2))+0.5)', ValueConvInv => 'Image::ExifTool::Pentax::PentaxEvInv(log($val/100)/log(2))+32', }, 21 => { #PH Name => 'BaseExposureCompensation', Condition => '$$self{Model} =~ /(K10D|GX10)\b/', Notes => 'K10D only; exposure compensation without auto bracketing', ValueConv => 'Image::ExifTool::Pentax::PentaxEv(64-$val)', ValueConvInv => '64-Image::ExifTool::Pentax::PentaxEvInv($val)', PrintConv => '$val ? sprintf("%+.1f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, ); # unknown camera settings (K-01) %Image::ExifTool::Pentax::CameraSettingsUnknown = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'This information has not yet been decoded for models such as the K-01.', ); # auto-exposure information (ref PH) %Image::ExifTool::Pentax::AEInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, DATAMEMBER => [ 7 ], NOTES => 'Auto-exposure information for most Pentax models.', # instead of /8, should these be PentaxEv(), as in CameraSettings? - PH 0 => { Name => 'AEExposureTime', Notes => 'val = 24 * 2**((32-raw)/8)', ValueConv => '24*exp(-($val-32)*log(2)/8)', ValueConvInv => '-log($val/24)*8/log(2)+32', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 1 => { Name => 'AEAperture', Notes => 'val = 2**((raw-68)/16)', ValueConv => 'exp(($val-68)*log(2)/16)', ValueConvInv => 'log($val)*16/log(2)+68', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 2 => { Name => 'AE_ISO', Notes => 'val = 100 * 2**((raw-32)/8)', ValueConv => '100*exp(($val-32)*log(2)/8)', ValueConvInv => 'log($val/100)*8/log(2)+32', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, 3 => { Name => 'AEXv', Notes => 'val = (raw-64)/8', ValueConv => '($val-64)/8', ValueConvInv => '$val * 8 + 64', }, 4 => { Name => 'AEBXv', Format => 'int8s', Notes => 'val = raw / 8', ValueConv => '$val / 8', ValueConvInv => '$val * 8', }, 5 => { Name => 'AEMinExposureTime', #19 Notes => 'val = 24 * 2**((32-raw)/8)', ValueConv => '24*exp(-($val-32)*log(2)/8)', #JD ValueConvInv => '-log($val/24)*8/log(2)+32', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 6 => { Name => 'AEProgramMode', PrintConvColumns => 2, PrintConv => { 0 => 'M, P or TAv', 1 => 'Av, B or X', 2 => 'Tv', 3 => 'Sv or Green Mode', 8 => 'Hi-speed Program', 11 => 'Hi-speed Program (P-Shift)', #19 16 => 'DOF Program', #19 19 => 'DOF Program (P-Shift)', #19 24 => 'MTF Program', #19 27 => 'MTF Program (P-Shift)', #19 35 => 'Standard', 43 => 'Portrait', 51 => 'Landscape', 59 => 'Macro', 67 => 'Sport', 75 => 'Night Scene Portrait', 83 => 'No Flash', 91 => 'Night Scene', # 96 - seen for Pentax Q10 99 => 'Surf & Snow', 104 => 'Night Snap', # (Q) 107 => 'Text', 115 => 'Sunset', # 116 - seen for Pentax Q (vivid?) 123 => 'Kids', 131 => 'Pet', 139 => 'Candlelight', 144 => 'SCN', # (Q) 160 => 'Program', # (Q) # 142 - seen for Pentax Q in Program mode 147 => 'Museum', 184 => 'Shallow DOF Program', # (K-5) 216 => 'HDR', # (Q) }, }, 7 => { Name => 'AEFlags', Writable => 0, Hook => '$size > 20 and $varSize += 1', Notes => 'indices after this are incremented by 1 for some models', # (this tag can't be unknown because the Hook must be evaluated # to shift the following offsets if necessary. Instead, ignore # the return value unless Unknown option used) RawConv => '$$self{OPTIONS}{Unknown} ? $val : undef', PrintConv => { #19 # (seems to be the warnings displayed in the viewfinder for several bits) BITMASK => { # 0 - seen in extreme low light conditions (e.g. Lens Cap On) # 1 - seen in 2 cases, Aperture Priority mode, Auto ISO at 100, # Shutter speed at 1/4000 and aperture opened wider causing under exposure # 2 - only (but not always) set in Shutter Speed Priority (seems to be when over/under exposed). # In one case set when auto exposure compensation changed the Tv from 1/250 to 1/80. # In another case set when external flash was in SB mode so did not fire. 3 => 'AE lock', 4 => 'Flash recommended?', # not 100% sure of this one # 5 - seen lots... # 6 - seen lots... 7 => 'Aperture wide open', # mostly true... (Set for all my lenses except for DA* 16-50mm) }, }, }, # Note: Offsets below shifted by 1 if record size is > 20 bytes # (implemented by the Hook above) 8 => { #30 Name => 'AEApertureSteps', Notes => q{ number of steps the aperture has been stopped down from wide open. There are roughly 8 steps per F-stop for most lenses, or 18 steps for 645D lenses, but it varies slightly by lens }, PrintConv => '$val == 255 ? "n/a" : $val', PrintConvInv => '$val eq "n/a" ? 255 : $val', }, 9 => { #19 Name => 'AEMaxAperture', Notes => 'val = 2**((raw-68)/16)', ValueConv => 'exp(($val-68)*log(2)/16)', ValueConvInv => 'log($val)*16/log(2)+68', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 10 => { #19 Name => 'AEMaxAperture2', Notes => 'val = 2**((raw-68)/16)', ValueConv => 'exp(($val-68)*log(2)/16)', ValueConvInv => 'log($val)*16/log(2)+68', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 11 => { #19 Name => 'AEMinAperture', Notes => 'val = 2**((raw-68)/16)', ValueConv => 'exp(($val-68)*log(2)/16)', ValueConvInv => 'log($val)*16/log(2)+68', PrintConv => 'sprintf("%.0f",$val)', PrintConvInv => '$val', }, 12 => { #19 Name => 'AEMeteringMode', PrintConv => { 0 => 'Multi-segment', BITMASK => { 4 => 'Center-weighted average', 5 => 'Spot', }, }, }, 13 => { #30 Name => 'AEWhiteBalance', Condition => '$$self{AEInfoSize} == 24', # (not thoroughly tested for other sizes) Notes => 'K7 and Kx', Mask => 0xf0, PrintConv => { 0x00 => 'Standard', 0x10 => 'Daylight', 0x20 => 'Shade', 0x30 => 'Cloudy', 0x40 => 'Daylight Fluorescent', 0x50 => 'Day White Fluorescent', 0x60 => 'White Fluorescent', 0x70 => 'Tungsten', }, }, 13.1 => { #30 Name => 'AEMeteringMode2', Condition => '$$self{AEInfoSize} == 24', # (not thoroughly tested for other sizes) Notes => 'K7 and Kx, override for an incompatable metering mode setting', Mask => 0x0f, PrintConv => { 0 => 'Multi-segment', BITMASK => { 0 => 'Center-weighted average', 1 => 'Spot', # 2 - seen for K7 AVI movie }, }, }, 14 => { #19 Name => 'FlashExposureCompSet', Description => 'Flash Exposure Comp. Setting', Format => 'int8s', Notes => q{ reports the camera setting, unlike tag 0x004d which reports 0 in Green mode or if flash was on but did not fire. Both this tag and 0x004d report the setting even if the flash is off }, ValueConv => 'Image::ExifTool::Pentax::PentaxEv($val)', ValueConvInv => 'Image::ExifTool::Pentax::PentaxEvInv($val)', PrintConv => '$val ? sprintf("%+.1f", $val) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 21 => { #30 Name => 'LevelIndicator', PrintConv => '$val == 90 ? "n/a" : $val', PrintConvInv => '$val eq "n/a" ? 90 : $val', }, ); # auto-exposure information for the K-01 (ref PH) %Image::ExifTool::Pentax::AEInfo2 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Auto-exposure information for the K-01.', # instead of /8, should these be PentaxEv(), as in CameraSettings? - PH 2 => { Name => 'AEExposureTime', Notes => 'val = 24 * 2**((32-raw)/8)', ValueConv => '24*exp(-($val-32)*log(2)/8)', ValueConvInv => '-log($val/24)*8/log(2)+32', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 3 => { Name => 'AEAperture', Notes => 'val = 2**((raw-68)/16)', ValueConv => 'exp(($val-68)*log(2)/16)', ValueConvInv => 'log($val)*16/log(2)+68', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 4 => { Name => 'AE_ISO', Notes => 'val = 100 * 2**((raw-32)/8)', ValueConv => '100*exp(($val-32)*log(2)/8)', ValueConvInv => 'log($val/100)*8/log(2)+32', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, 5 => { Name => 'AEXv', # this is the negative of exposure compensation, not including bracketing Notes => 'val = (raw-64)/8', ValueConv => '($val-64)/8', ValueConvInv => '$val * 8 + 64', }, 6 => { Name => 'AEBXv', # this is the negative of auto exposure bracketing compensation Format => 'int8s', Notes => 'val = raw / 8', ValueConv => '$val / 8', ValueConvInv => '$val * 8', }, 8 => { Name => 'AEError', Format => 'int8s', # this is usually zero except in M exposure mode, but it can be non-zero # in other modes (eg. if you hit an aperture limit in Tv mode) ValueConv => '-($val-64)/8', # (negate to make overexposed positive) ValueConvInv => '-$val * 8 + 64', }, 11 => { Name => 'AEApertureSteps', Notes => q{ number of steps the aperture has been stopped down from wide open. There are roughly 8 steps per F-stop, but it varies slightly by lens }, PrintConv => '$val == 255 ? "n/a" : $val', PrintConvInv => '$val eq "n/a" ? 255 : $val', }, 15 => { Name => 'SceneMode', PrintConvColumns => 2, PrintConv => { 0 => 'Off', 1 => 'HDR', 4 => 'Auto PICT', 5 => 'Portrait', 6 => 'Landscape', 7 => 'Macro', 8 => 'Sport', 9 => 'Night Scene Portrait', 10 => 'No Flash', 11 => 'Night Scene', 12 => 'Surf & Snow', 14 => 'Sunset', 15 => 'Kids', 16 => 'Pet', 17 => 'Candlelight', 18 => 'Museum', 20 => 'Food', 21 => 'Stage Lighting', 22 => 'Night Snap', 25 => 'Night Scene HDR', 26 => 'Blue Sky', 27 => 'Forest', 29 => 'Backlight Silhouette', }, }, 16 => { Name => 'AEMaxAperture', Notes => 'val = 2**((raw-68)/16)', ValueConv => 'exp(($val-68)*log(2)/16)', ValueConvInv => 'log($val)*16/log(2)+68', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 17 => { Name => 'AEMaxAperture2', Notes => 'val = 2**((raw-68)/16)', ValueConv => 'exp(($val-68)*log(2)/16)', ValueConvInv => 'log($val)*16/log(2)+68', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 18 => { Name => 'AEMinAperture', Notes => 'val = 2**((raw-68)/16)', ValueConv => 'exp(($val-68)*log(2)/16)', ValueConvInv => 'log($val)*16/log(2)+68', PrintConv => 'sprintf("%.0f",$val)', PrintConvInv => '$val', }, 19 => { Name => 'AEMinExposureTime', Notes => 'val = 24 * 2**((32-raw)/8)', ValueConv => '24*exp(-($val-32)*log(2)/8)', ValueConvInv => '-log($val/24)*8/log(2)+32', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, ); # auto-exposure information for the K-30 (ref PH) %Image::ExifTool::Pentax::AEInfo3 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Auto-exposure information for the K-3, K-30, K-50 and K-500.', # instead of /8, should these be PentaxEv(), as in CameraSettings? - PH 16 => { Name => 'AEExposureTime', Notes => 'val = 24 * 2**((32-raw)/8)', ValueConv => '24*exp(-($val-32)*log(2)/8)', ValueConvInv => '-log($val/24)*8/log(2)+32', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 17 => { Name => 'AEAperture', Notes => 'val = 2**((raw-68)/16)', ValueConv => 'exp(($val-68)*log(2)/16)', ValueConvInv => 'log($val)*16/log(2)+68', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 18 => { Name => 'AE_ISO', Notes => 'val = 100 * 2**((raw-32)/8)', ValueConv => '100*exp(($val-32)*log(2)/8)', ValueConvInv => 'log($val/100)*8/log(2)+32', PrintConv => 'int($val + 0.5)', PrintConvInv => '$val', }, 28 => { Name => 'AEMaxAperture', Notes => 'val = 2**((raw-68)/16)', ValueConv => 'exp(($val-68)*log(2)/16)', ValueConvInv => 'log($val)*16/log(2)+68', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 29 => { Name => 'AEMaxAperture2', Notes => 'val = 2**((raw-68)/16)', ValueConv => 'exp(($val-68)*log(2)/16)', ValueConvInv => 'log($val)*16/log(2)+68', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 30 => { Name => 'AEMinAperture', Notes => 'val = 2**((raw-68)/16)', ValueConv => 'exp(($val-68)*log(2)/16)', ValueConvInv => 'log($val)*16/log(2)+68', PrintConv => 'sprintf("%.0f",$val)', PrintConvInv => '$val', }, 31 => { Name => 'AEMinExposureTime', Notes => 'val = 24 * 2**((32-raw)/8)', ValueConv => '24*exp(-($val-32)*log(2)/8)', ValueConvInv => '-log($val/24)*8/log(2)+32', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, ); # unknown auto-exposure information (Q, Q10) %Image::ExifTool::Pentax::AEInfoUnknown = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, ); # lens type %Image::ExifTool::Pentax::LensRec = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ This record stores the LensType, plus one or two unknown bytes for some models. }, 0 => { Name => 'LensType', Format => 'int8u[2]', Priority => 0, ValueConvInv => '$val=~s/\.\d+$//; $val', PrintConv => \%pentaxLensTypes, SeparateTable => 1, }, 3 => { #PH Name => 'ExtenderStatus', Notes => 'not valid if a non-AF lens is used', PrintConv => { 0 => 'Not attached', 1 => 'Attached' }, }, # this is a binaryData table because some cameras add an extra # byte or two here (typically zeros)... ); # lens information (ref PH) %Image::ExifTool::Pentax::LensInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, IS_SUBDIR => [ 3 ], NOTES => 'Pentax lens information structure for models such as the *istD.', 0 => { Name => 'LensType', Format => 'int8u[2]', Priority => 0, ValueConvInv => '$val=~s/\.\d+$//; $val', PrintConv => \%pentaxLensTypes, SeparateTable => 1, }, 3 => { Name => 'LensData', Format => 'undef[17]', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensData' }, }, ); # lens information for newer models (ref PH) %Image::ExifTool::Pentax::LensInfo2 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, IS_SUBDIR => [ 4 ], NOTES => 'Pentax lens information structure for models such as the K10D and K20D.', 0 => { Name => 'LensType', Format => 'int8u[4]', Priority => 0, ValueConv => q{ my @v = split(' ',$val); $v[0] &= 0x0f; $v[1] = $v[2] * 256 + $v[3]; # (always high byte first) return "$v[0] $v[1]"; }, # just fill in the missing bits/bytes with zeros... ValueConvInv => q{ my @v = split(' ',$val); return undef unless @v == 2; $v[2] = ($v[1] >> 8) & 0xff; $v[3] = $v[1] & 0xff; $v[1] = 0; return "@v"; }, PrintConv => \%pentaxLensTypes, SeparateTable => 1, }, 4 => { Name => 'LensData', Format => 'undef[17]', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensData' }, }, ); # lens information for 645D (ref PH) %Image::ExifTool::Pentax::LensInfo3 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, IS_SUBDIR => [ 13 ], NOTES => 'Pentax lens information structure for 645D.', 1 => { Name => 'LensType', Format => 'int8u[4]', Priority => 0, ValueConv => q{ my @v = split(' ',$val); $v[0] &= 0x0f; $v[1] = $v[2] * 256 + $v[3]; # (always high byte first) return "$v[0] $v[1]"; }, # just fill in the missing bits/bytes with zeros... ValueConvInv => q{ my @v = split(' ',$val); return undef unless @v == 2; $v[2] = ($v[1] >> 8) & 0xff; $v[3] = $v[1] & 0xff; $v[1] = 0; return "@v"; }, PrintConv => \%pentaxLensTypes, SeparateTable => 1, }, 13 => { Name => 'LensData', Format => 'undef[17]', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensData' }, }, ); # lens information for K-5, K-r, etc (ref PH) %Image::ExifTool::Pentax::LensInfo4 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, IS_SUBDIR => [ 12 ], NOTES => 'Pentax lens information structure for models such as the K-5 and K-r.', 1 => { Name => 'LensType', Format => 'int8u[4]', Priority => 0, ValueConv => q{ my @v = split(' ',$val); $v[0] &= 0x0f; $v[1] = $v[2] * 256 + $v[3]; # (always high byte first) return "$v[0] $v[1]"; }, # just fill in the missing bits/bytes with zeros... ValueConvInv => q{ my @v = split(' ',$val); return undef unless @v == 2; $v[2] = ($v[1] >> 8) & 0xff; $v[3] = $v[1] & 0xff; $v[1] = 0; return "@v"; }, PrintConv => \%pentaxLensTypes, SeparateTable => 1, }, 12 => { Name => 'LensData', Format => 'undef[18]', Condition => '$$self{NewLensData} = 1', # not really a condition, just used to set flag SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensData' }, }, ); # lens information for K-01, K-30, K-50, K-500, K-3, K-3II (ref PH) %Image::ExifTool::Pentax::LensInfo5 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, IS_SUBDIR => [ 15 ], NOTES => 'Pentax lens information structure for the K-01 and newer models.', 1 => { Name => 'LensType', Format => 'int8u[5]', Priority => 0, ValueConv => q{ my @v = split(' ',$val); $v[0] &= 0x0f; $v[1] = $v[3] * 256 + $v[4]; # (always high byte first) return "$v[0] $v[1]"; }, # just fill in the missing bits/bytes with zeros... ValueConvInv => q{ my @v = split(' ',$val); return undef unless @v == 2; $v[3] = ($v[1] >> 8) & 0xff; $v[4] = $v[1] & 0xff; $v[1] = $v[2] = 0; return "@v"; }, PrintConv => \%pentaxLensTypes, SeparateTable => 1, }, 15 => { Name => 'LensData', Format => 'undef[17]', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::LensData' }, }, ); # lens data information, including lens codes (ref PH) %Image::ExifTool::Pentax::LensData = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, DATAMEMBER => [ 12.1 ], NOTES => q{ Pentax lens data information. Some of these tags require interesting binary gymnastics to decode them into useful values. }, # this byte comes from the lens electrical contacts # (see http://kmp.bdimitrov.de/technology/K-mount/Ka.html) 0.1 => { #JD Name => 'AutoAperture', Condition => 'not $$self{NewLensData}', Notes => 'not valid for the K-r, K-5 or K-5II', #29 Mask => 0x01, PrintConv => { 0 => 'On', 1 => 'Off', }, }, 0.2 => { #JD Name => 'MinAperture', Condition => 'not $$self{NewLensData}', Notes => 'not valid for the K-r, K-5 or K-5II', #29 Mask => 0x06, PrintConv => { 0x00 => 22, 0x02 => 32, 0x04 => 45, 0x06 => 16, }, }, 0.3 => { #JD Name => 'LensFStops', Condition => 'not $$self{NewLensData}', Notes => 'not valid for the K-r, K-5 or K-5II', #29 Mask => 0x70, ValueConv => '5 + (($val >> 4) ^ 0x07) / 2', ValueConvInv => '((($val - 5) * 2) ^ 0x07) << 4', }, # 1-16 look like Lens Codes LC0-LC15, ref patent 5617173 and 5999753 [+notes by PH] 1 => { # LC0 = lens kind + version data Name => 'LensKind', %lensCode, }, 2 => { # LC1 = lens data (changes with AF setting) Name => 'LC1', %lensCode, }, # LC2 = distance data 3 => { #29 Name => 'MinFocusDistance', Notes => 'minimum focus distance for the lens', Mask => 0xf8, PrintConv => { 0x00 => '0.13-0.19 m', # (plus K or M lenses) 0x08 => '0.20-0.24 m', 0x10 => '0.25-0.28 m', 0x18 => '0.28-0.30 m', 0x20 => '0.35-0.38 m', 0x28 => '0.40-0.45 m', 0x30 => '0.49-0.50 m', # (plus many Sigma lenses) 0x38 => '0.6 m', #PH (NC) 0x40 => '0.7 m', # (plus Sigma 55-200) 0x48 => '0.8-0.9 m', #PH (NC) Tokina 28-70/2.6-2.8 0x50 => '1.0 m', # (plus Sigma 70 macro) 0x58 => '1.1-1.2 m', 0x60 => '1.4-1.5 m', 0x68 => '1.5 m', # Sigma 70-300/4-5.6 macro 0x70 => '2.0 m', 0x78 => '2.0-2.1 m', #PH (NC) 0x80 => '2.1 m', # Sigma 135-400 APO & DG: 2.0-2.2m 0x88 => '2.2-2.9 m', #PH (NC) 0x90 => '3.0 m', # Sigma 50-500 : 1.0-3.0m depending on the focal length ## 50mm, 100mm => 1.0m ## 200mm => 1.1m ## 300mm => 1.5m ## 400mm => 2.2m ## 500mm => 3.0m 0x98 => '4-5 m', #PH (NC) 0xa0 => '5.6 m', # Pentax DA 560 # To check: Sigma 120-400 OS: MFD 1.5m # To check: Sigma 150-500 OS: MFD 2.2m # To check: Sigma 50-500 has MFD 50-180cm # 0xd0 - seen for the Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye (ref PH) }, }, 3.1 => { #29 Name => 'FocusRangeIndex', Mask => 0x07, PrintConv => { 7 => '0 (very close)', 6 => '1 (close)', 4 => '2', 5 => '3', 1 => '4', 0 => '5', 2 => '6 (far)', 3 => '7 (very far)', }, }, 4 => { # LC3 = K-value data (AF pulses to displace image by unit length) Name => 'LC3', %lensCode, }, 5 => { # LC4 = abberation correction, near distance data Name => 'LC4', %lensCode, }, 6 => { # LC5 = light color abberation correction data Name => 'LC5', %lensCode, }, 7 => { # LC6 = open abberation data Name => 'LC6', %lensCode, }, 8 => { # LC7 = AF minimum actuation condition Name => 'LC7', %lensCode, }, 9 => [{ # LC8 = focal length data Name => 'LensFocalLength', Notes => 'focal length of lens alone, without adapter', #PH Priority => 0, Condition => '$$self{Model} !~ /645Z/', #PH (doesn't work for 645Z) ValueConv => '10*($val>>2) * 4**(($val&0x03)-2)', #JD ValueConvInv => q{ my $range = int(log($val/10)/(2*log(2))); warn("Value out of range") and return undef if $range < 0 or $range > 3; return $range + (int($val/(10*4**($range-2))+0.5) << 2); }, PrintConv => 'sprintf("%.1f mm", $val)', PrintConvInv => '$val=~s/\s*mm//; $val', },{ Name => 'LC8', %lensCode, }], # the following aperture values change with focal length 10 => { # LC9 = nominal AVmin/AVmax data (open/closed aperture values) Name => 'NominalMaxAperture', Mask => 0xf0, ValueConv => '2**(($val>>4)/4)', #JD ValueConvInv => '4*log($val)/log(2) << 4', PrintConv => 'sprintf("%.1f", $val)', PrintConvInv => '$val', }, 10.1 => { # LC9 = nominal AVmin/AVmax data (open/closed aperture values) Name => 'NominalMinAperture', Mask => 0x0f, ValueConv => '2**(($val+10)/4)', #JD ValueConvInv => '4*log($val)/log(2) - 10', PrintConv => 'sprintf("%.0f", $val)', PrintConvInv => '$val', }, 11 => { # LC10 = mv'/nv' data (full-aperture metering error compensation/marginal lumination compensation) Name => 'LC10', %lensCode, }, 12 => { # LC11 = AVC 1/EXP data Name => 'LC11', %lensCode, }, 12.1 => { Name => 'NewLensDataHook', Hidden => 1, Hook => '$varSize += 1 if $$self{NewLensData}', RawConv => 'undef', }, 13 => { # LC12 = mv1 AVminsif data Name => 'LC12', Notes => "ID's 13-16 are offset by 1 for the K-r, K-5 and K-5II", #29 %lensCode, }, # 14 - related to live view for K-5 (normally 3, but 1 or 5 in LV mode) 14.1 => { # LC13 = AVmin (open aperture value) [MaxAperture=(2**((AVmin-1)/32))] Name => 'MaxAperture', Condition => '$$self{Model} ne "K-5"', Notes => 'effective wide open aperture for current focal length', Mask => 0x7f, # (not sure what the high bit indicates) # (a value of 1 seems to indicate 'n/a') RawConv => '$val > 1 ? $val : undef', ValueConv => '2**(($val-1)/32)', ValueConvInv => '32*log($val)/log(2) + 1', PrintConv => 'sprintf("%.1f", $val)', PrintConvInv => '$val', }, 15 => { # LC14 = UNT_12 UNT_6 data Name => 'LC14', %lensCode, }, 16 => { # LC15 = incorporated flash suited END data Name => 'LC15', %lensCode, }, ); # flash information (ref PH) %Image::ExifTool::Pentax::FlashInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Flash information tags for the K10D, K20D and K200D.', 0 => { Name => 'FlashStatus', PrintHex => 1, PrintConv => { #19 0x00 => 'Off', 0x01 => 'Off (1)', #PH (K-5) 0x02 => 'External, Did not fire', # 0010 0x06 => 'External, Fired', # 0110 0x08 => 'Internal, Did not fire (0x08)', 0x09 => 'Internal, Did not fire', # 1001 0x0d => 'Internal, Fired', # 1101 }, }, 1 => { Name => 'InternalFlashMode', PrintHex => 1, PrintConv => { 0x00 => 'n/a - Off-Auto-Aperture', #19 0x86 => 'Fired, Wireless (Control)', #19 0x95 => 'Fired, Wireless (Master)', #19 0xc0 => 'Fired', # K10D 0xc1 => 'Fired, Red-eye reduction', # *istDS2, K10D 0xc2 => 'Fired, Auto', # K100D, K110D 0xc3 => 'Fired, Auto, Red-eye reduction', #PH 0xc6 => 'Fired, Wireless (Control), Fired normally not as control', #19 (Remote 3s) 0xc8 => 'Fired, Slow-sync', # K10D 0xc9 => 'Fired, Slow-sync, Red-eye reduction', # K10D 0xca => 'Fired, Trailing-curtain Sync', # K10D 0xf0 => 'Did not fire, Normal', #19 0xf1 => 'Did not fire, Red-eye reduction', #19 0xf2 => 'Did not fire, Auto', #19 0xf3 => 'Did not fire, Auto, Red-eye reduction', #19 0xf4 => 'Did not fire, (Unknown 0xf4)', #19 0xf5 => 'Did not fire, Wireless (Master)', #19 0xf6 => 'Did not fire, Wireless (Control)', #19 0xf8 => 'Did not fire, Slow-sync', #19 0xf9 => 'Did not fire, Slow-sync, Red-eye reduction', #19 0xfa => 'Did not fire, Trailing-curtain Sync', #19 }, }, 2 => { Name => 'ExternalFlashMode', PrintHex => 1, PrintConv => { #19 0x00 => 'n/a - Off-Auto-Aperture', 0x3f => 'Off', 0x40 => 'On, Auto', 0xbf => 'On, Flash Problem', #JD 0xc0 => 'On, Manual', 0xc4 => 'On, P-TTL Auto', 0xc5 => 'On, Contrast-control Sync', #JD 0xc6 => 'On, High-speed Sync', 0xcc => 'On, Wireless', 0xcd => 'On, Wireless, High-speed Sync', 0xf0 => 'Not Connected', #PH (K-5) }, }, 3 => { Name => 'InternalFlashStrength', Notes => 'saved from the most recent flash picture, on a scale of about 0 to 100', }, 4 => 'TTL_DA_AUp', 5 => 'TTL_DA_ADown', 6 => 'TTL_DA_BUp', 7 => 'TTL_DA_BDown', 24.1 => { #19/17 Name => 'ExternalFlashGuideNumber', Mask => 0x1f, Notes => 'val = 2**(raw/16 + 4), with a few exceptions', ValueConv => q{ return 0 unless $val; $val = -3 if $val == 29; # -3 is stored as 0x1d return 2**($val/16 + 4); }, ValueConvInv => q{ return 0 unless $val; my $raw = int((log($val)/log(2)-4)*16+0.5); $raw = 29 if $raw < 0; # guide number of 14 gives -3 which is stored as 0x1d $raw = 31 if $raw > 31; # maximum value is 0x1f return $raw; }, PrintConv => '$val ? int($val + 0.5) : "n/a"', PrintConvInv => '$val=~/^n/ ? 0 : $val', # observed values for various flash focal lengths/guide numbers: # AF-540FGZ (ref 19) AF-360FGZ (ref 17) # 6 => 20mm/21 29 => 20mm/14 (wide angle panel used) # 16 => 24mm/32 6 => 24mm/21 # 18 => 28mm/35 7 => 28mm/22 # 21 => 35mm/39 10 => 35mm/25 # 24 => 50mm/45 14 => 50mm/30 # 26 => 70mm/50 17 => 70mm/33 # 28 => 85mm/54 19 => 85mm/36 # (I have also seen a value of 31 when both flashes are used together # in a wired configuration, but I don't know exactly what this means - PH) }, # 24 - have seen bit 0x80 set when 2 external wired flashes are used - PH # 24 - have seen bit 0x40 set when wireless high speed sync is used - ref 19 25 => { #19 Name => 'ExternalFlashExposureComp', PrintConv => { 0 => 'n/a', # Off or Auto Modes 144 => 'n/a (Manual Mode)', # Manual Flash Output 164 => '-3.0', 167 => '-2.5', 168 => '-2.0', 171 => '-1.5', 172 => '-1.0', 175 => '-0.5', 176 => '0.0', 179 => '0.5', 180 => '1.0', }, }, 26 => { #17 Name => 'ExternalFlashBounce', Notes => 'saved from the most recent external flash picture', #19 PrintConv => { 0 => 'n/a', 16 => 'Direct', 48 => 'Bounce', }, }, # ? => 'ExternalFlashAOutput', # ? => 'ExternalFlashBOutput', ); %Image::ExifTool::Pentax::FlashInfoUnknown = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # 4 - changes with FEC for K-5 - PH ); # camera manufacture information (ref PH) %Image::ExifTool::Pentax::CameraInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FORMAT => 'int32u', 0 => { Name => 'PentaxModelID', Priority => 0, # (Optio SVi uses incorrect Optio SV ID here) SeparateTable => 1, PrintHex => 1, PrintConv => \%pentaxModelID, }, 1 => { Name => 'ManufactureDate', Groups => { 2 => 'Time' }, Notes => q{ this value, and the values of the tags below, may change if the camera is serviced }, ValueConv => q{ $val =~ /^(\d{4})(\d{2})(\d{2})$/ and return "$1:$2:$3"; # Optio A10 and A20 leave "200" off the year $val =~ /^(\d)(\d{2})(\d{2})$/ and return "200$1:$2:$3"; return "Unknown ($val)"; }, ValueConvInv => '$val=~tr/0-9//dc; $val', }, 2 => { #(see http://www.pentaxforums.com/forums/pentax-dslr-discussion/25711-k10d-update-model-revision-8-1-yes-no-8.html) Name => 'ProductionCode', #(previously ModelRevision) Format => 'int32u[2]', Note => 'values of 8.x indicate that the camera has been serviced', ValueConv => '$val=~tr/ /./; $val', ValueConvInv => '$val=~tr/./ /; $val', PrintConv => '$val=~/^8\./ ? "$val (camera has been serviced)" : $val', PrintConvInv => '$val=~s/\s+.*//s; $val', }, 4 => 'InternalSerialNumber', ); # battery information (ref PH) %Image::ExifTool::Pentax::BatteryInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # size of data: # 4 (K-m,K2000=4xAA), 6 (*istD,K10D,K100D,K110D=2xCR-V3/4xAA), # 7 (K20D=D-LI50, K200D=4xAA), 8 (645D=D-LI90), 10 (K-r pre-production?), # 14 (K-7=D-LI90, K-r=D-LI109/4xAA, K-x=4xAA), 26 (K-5=D-LI90) # battery grips available for: # BG1 (*istD), BG2 (K10D/K20D), BG3 (K200D), BG4 (K-7,K-5) # no grip available: K-x 0.1 => { #19 Name => 'PowerSource', Mask => 0x0f, # have seen the upper bit set (value of 0x82) for the # *istDS and K100D, but I'm not sure what this means - PH # I've also seen: 0x42 (K2000), 0xf2 (K-7,K-r,K-5), 0x12,0x22 (K-x) - PH PrintConv => { 2 => 'Body Battery', 3 => 'Grip Battery', 4 => 'External Power Supply', #PH }, }, 1.1 => [ { Name => 'BodyBatteryState', Condition => '$$self{Model} =~ /(\*ist|K100D|K200D|K10D|GX10|K20D|GX20|GX-1[LS]?)\b/', Notes => '*istD, K100D, K200D, K10D and K20D', Mask => 0xf0, PrintConv => { #19 0x10 => 'Empty or Missing', 0x20 => 'Almost Empty', 0x30 => 'Running Low', 0x40 => 'Full', }, },{ Name => 'BodyBatteryState', Condition => '$$self{Model} !~ /(K110D|K2000|K-m)\b/', Notes => 'other models except the K110D, K2000 and K-m', Mask => 0xf0, PrintConv => { 0x10 => 'Empty or Missing', 0x20 => 'Almost Empty', 0x30 => 'Running Low', 0x40 => 'Close to Full', 0x50 => 'Full', }, },{ Name => 'BodyBatteryState', Notes => 'decoding unknown for other models', Mask => 0xf0, ValueConv => '$val >> 4', ValueConvInv => '$val << 4', }, ], 1.2 => [ { Name => 'GripBatteryState', Condition => '$$self{Model} =~ /(K10D|GX10|K20D|GX20)\b/', Notes => 'K10D and K20D', Mask => 0x0f, PrintConv => { #19 0x01 => 'Empty or Missing', 0x02 => 'Almost Empty', 0x03 => 'Running Low', 0x04 => 'Full', }, },{ Name => 'GripBatteryState', Notes => 'decoding unknown for other models', Unknown => 1, # (doesn't appear to be valid for the K-5) Mask => 0x0f, }, ], # internal and grip battery voltage Analogue to Digital measurements, # open circuit and under load 2 => [ { Name => 'BodyBatteryADNoLoad', Description => 'Body Battery A/D No Load', Condition => '$$self{Model} =~ /(K10D|GX10|K20D|GX20)\b/', Notes => 'roughly calibrated for K10D with a new Pentax battery', # rough linear calibration drops quickly below 30% - PH # DVM readings: 8.18V=186, 8.42-8.40V=192 (full), 6.86V=155 (empty) PrintConv => 'sprintf("%d (%.1fV, %d%%)",$val,$val*8.18/186,($val-155)*100/35)', PrintConvInv => '$val=~s/ .*//; $val', }, { Name => 'BodyBatteryADNoLoad', Description => 'Body Battery A/D No Load', Condition => '$$self{Model} =~ /(\*ist|K100D|K200D|GX-1[LS]?)\b/', }, { Name => 'BodyBatteryVoltage1', # (static?) Condition => '$$self{Model} !~ /(K100D|K110D|K2000|K-m|Q\d*)\b/', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => 'sprintf("%.2f V", $val)', PrintConvInv => '$val =~ s/\s*V$//', # For my K-5: Min (0%) Max (100%) At Meas # BodyBatteryVoltage1 6.24 V 7.75 V 7.66 V # BodyBatteryVoltage2 5.98 V 7.43 V 7.34 V # BodyBatteryVoltage3 6.41 V 7.93 V 7.84 V # BodyBatteryVoltage4 6.10 V 7.55 V 7.45 V # "Meas" open-circuit voltages with DVM: AB=0V, AC=+8.33V, BC=+8.22V # (terminal "C" is closest to edge of battery) }, ], 3 => [ { Name => 'BodyBatteryADLoad', Description => 'Body Battery A/D Load', Condition => '$$self{Model} =~ /(K10D|GX10|K20D|GX20)\b/', Notes => 'roughly calibrated for K10D with a new Pentax battery', # [have seen 187] - PH PrintConv => 'sprintf("%d (%.1fV, %d%%)",$val,$val*8.18/186,($val-152)*100/34)', PrintConvInv => '$val=~s/ .*//; $val', }, { Name => 'BodyBatteryADLoad', Description => 'Body Battery A/D Load', Condition => '$$self{Model} =~ /(\*ist|K100D|K200D)\b/', }, ], 4 => [ { Name => 'GripBatteryADNoLoad', Description => 'Grip Battery A/D No Load', Condition => '$$self{Model} =~ /(\*ist|K10D|GX10|K20D|GX20|GX-1[LS]?)\b/', }, { Name => 'BodyBatteryVoltage2', # (less than BodyBatteryVoltage1 -- under load?) Condition => '$$self{Model} !~ /(K100D|K110D|K2000|K-m|Q\d*)\b/', Format => 'int16u', ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => 'sprintf("%.2f V", $val)', PrintConvInv => '$val =~ s/\s*V$//', }, ], 5 => { Name => 'GripBatteryADLoad', Condition => '$$self{Model} =~ /(\*ist|K10D|GX10|K20D|GX20)\b/', Description => 'Grip Battery A/D Load', }, 6 => { Name => 'BodyBatteryVoltage3', # (greater than BodyBatteryVoltage1) Condition => '$$self{Model} =~ /(K-5|K-r|645D)\b/', Format => 'int16u', Notes => 'K-5, K-r and 645D only', ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => 'sprintf("%.2f V", $val)', PrintConvInv => '$val =~ s/\s*V$//', }, 8 => { Name => 'BodyBatteryVoltage4', # (between BodyBatteryVoltage1 and BodyBatteryVoltage2) Condition => '$$self{Model} =~ /(K-5|K-r)\b/', Format => 'int16u', Notes => 'K-5 and K-r only', ValueConv => '$val / 100', ValueConvInv => '$val * 100', PrintConv => 'sprintf("%.2f V", $val)', PrintConvInv => '$val =~ s/\s*V$//', }, ); # auto focus information %Image::ExifTool::Pentax::AFInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # AF Info tag names in K10D debugging output - PH: # SelectArea, InFocusArea, Predictor, Defocus, IntegTime2msStep, # CalFlag, ContrastFlag, PrecalFlag, SelectSensor 0x00 => { #PH Name => 'AFPointsUnknown1', Unknown => 1, Format => 'int16u', ValueConv => '$self->Options("Unknown") ? $val : $val & 0x7ff', ValueConvInv => '$val', PrintConvColumns => 2, PrintConv => { 0 => '(none)', 0x07ff => 'All', 0x0777 => 'Central 9 points', BITMASK => { 0 => 'Upper-left', 1 => 'Top', 2 => 'Upper-right', 3 => 'Left', 4 => 'Mid-left', 5 => 'Center', 6 => 'Mid-right', 7 => 'Right', 8 => 'Lower-left', 9 => 'Bottom', 10 => 'Lower-right', # (bits 12-15 are flags of some sort) }, }, }, 0x02 => { #PH Name => 'AFPointsUnknown2', Unknown => 1, Format => 'int16u', ValueConv => '$self->Options("Unknown") ? $val : $val & 0x7ff', ValueConvInv => '$val', PrintConvColumns => 2, PrintConv => { 0 => 'Auto', BITMASK => { 0 => 'Upper-left', 1 => 'Top', 2 => 'Upper-right', 3 => 'Left', 4 => 'Mid-left', 5 => 'Center', 6 => 'Mid-right', 7 => 'Right', 8 => 'Lower-left', 9 => 'Bottom', 10 => 'Lower-right', # (bits 12-15 are flags of some sort) # bit 15 is set for center focus point only if it is vertical }, }, }, 0x04 => { #PH (educated guess - predicted amount to drive lens) Name => 'AFPredictor', Format => 'int16s', }, 0x06 => 'AFDefocus', #PH (educated guess - calculated distance from focused) 0x07 => { #PH # effective exposure time for AF sensors in 2 ms increments Name => 'AFIntegrationTime', Notes => 'times less than 2 ms give a value of 0', ValueConv => '$val * 2', ValueConvInv => 'int($val / 2)', # (don't round up) PrintConv => '"$val ms"', PrintConvInv => '$val=~tr/0-9//dc; $val', }, # 0x0a - values: 00,05,0d,15,86,8e,a6,ae 0x0b => { #JD Name => 'AFPointsInFocus', Condition => '$$self{Model} !~ /K-3\b/', Notes => q{ models other than the K-3 only. May report two points in focus even though a single AFPoint has been selected, in which case the selected AFPoint is the first reported }, PrintConvColumns => 2, PrintConv => { 0 => 'None', 1 => 'Lower-left, Bottom', 2 => 'Bottom', 3 => 'Lower-right, Bottom', 4 => 'Mid-left, Center', 5 => 'Center (horizontal)', #PH 6 => 'Mid-right, Center', 7 => 'Upper-left, Top', 8 => 'Top', 9 => 'Upper-right, Top', 10 => 'Right', 11 => 'Lower-left, Mid-left', 12 => 'Upper-left, Mid-left', 13 => 'Bottom, Center', 14 => 'Top, Center', 15 => 'Lower-right, Mid-right', 16 => 'Upper-right, Mid-right', 17 => 'Left', 18 => 'Mid-left', 19 => 'Center (vertical)', #PH 20 => 'Mid-right', }, }, 0x1fd => { Name => 'AFHold', Notes => 'decoded only for the K-3 II', Condition => '$$self{Model} eq "PENTAX K-3 II"', PrintConv => { 0 => 'Off', 1 => 'Short', 2 => 'Medium', 3 => 'Long' }, }, ); # Kelvin white balance information (ref 28, topic 4834) %Image::ExifTool::Pentax::KelvinWB = ( %binaryDataAttrs, FORMAT => 'int16u', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'White balance Blue/Red gains as a function of color temperature.', 1 => { Name => 'KelvinWB_Daylight', %kelvinWB }, 5 => { Name => 'KelvinWB_01', %kelvinWB }, 9 => { Name => 'KelvinWB_02', %kelvinWB }, 13 => { Name => 'KelvinWB_03', %kelvinWB }, 17 => { Name => 'KelvinWB_04', %kelvinWB }, 21 => { Name => 'KelvinWB_05', %kelvinWB }, 25 => { Name => 'KelvinWB_06', %kelvinWB }, 29 => { Name => 'KelvinWB_07', %kelvinWB }, 33 => { Name => 'KelvinWB_08', %kelvinWB }, 37 => { Name => 'KelvinWB_09', %kelvinWB }, 41 => { Name => 'KelvinWB_10', %kelvinWB }, 45 => { Name => 'KelvinWB_11', %kelvinWB }, 49 => { Name => 'KelvinWB_12', %kelvinWB }, 53 => { Name => 'KelvinWB_13', %kelvinWB }, 57 => { Name => 'KelvinWB_14', %kelvinWB }, 61 => { Name => 'KelvinWB_15', %kelvinWB }, 65 => { Name => 'KelvinWB_16', %kelvinWB }, ); # color information - PH %Image::ExifTool::Pentax::ColorInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, FORMAT => 'int8s', 16 => { Name => 'WBShiftAB', Notes => 'positive is a shift toward blue', }, 17 => { Name => 'WBShiftGM', Notes => 'positive is a shift toward green', }, ); # EV step size information - ref 19 %Image::ExifTool::Pentax::EVStepInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'EVSteps', PrintConv => { 0 => '1/2 EV Steps', 1 => '1/3 EV Steps', }, }, 1 => { Name => 'SensitivitySteps', PrintConv => { 0 => '1 EV Steps', 1 => 'As EV Steps', }, }, ); # shot information? - ref PH (K-5) %Image::ExifTool::Pentax::ShotInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # 0: 0xf2/0xf3 (HDR), 0xf0 (otherwise) 1 => { # (presumably this is from an orientation sensor) Name => 'CameraOrientation', Condition => '$$self{Model} =~ /K-(5|7|r|x)\b/', Notes => 'K-5, K-7, K-r and K-x', PrintHex => 1, PrintConv => { 0x10 => 'Horizontal (normal)', 0x20 => 'Rotate 180', 0x30 => 'Rotate 90 CW', 0x40 => 'Rotate 270 CW', 0x50 => 'Upwards', # (to the sky) 0x60 => 'Downwards', # (to the ground) }, }, # 2: 0xd3 (live view), 0xdb (HDR), 0x7b (otherwise) # 3: 0xff # 4: 0x64, 0x6a, 0x6f, 0xa4, 0xaa, 0xab, 0xbf # 5: 0xfe # 6: 0x0e # 7: 0x02 (live view), 0x06 (otherwise) # 8-10: 0x00 ); # face detect positions - ref PH (Optio RZ10) %Image::ExifTool::Pentax::FacePos = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, FORMAT => 'int16u', 0 => { Name => 'Face1Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 1 ? undef : $val', Notes => 'X/Y coordinates of face center in full-sized image', }, 2 => { Name => 'Face2Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 2 ? undef : $val', }, 4 => { Name => 'Face3Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 3 ? undef : $val', }, 6 => { Name => 'Face4Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 4 ? undef : $val', }, 8 => { Name => 'Face5Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 5 ? undef : $val', }, 10 => { Name => 'Face6Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 6 ? undef : $val', }, 12 => { Name => 'Face7Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 7 ? undef : $val', }, 14 => { Name => 'Face8Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 8 ? undef : $val', }, 16 => { Name => 'Face9Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 9 ? undef : $val', }, 18 => { Name => 'Face10Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 10 ? undef : $val', }, 20 => { Name => 'Face11Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 11 ? undef : $val', }, 22 => { Name => 'Face12Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 12 ? undef : $val', }, 24 => { Name => 'Face13Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 13 ? undef : $val', }, 26 => { Name => 'Face14Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 14 ? undef : $val', }, 28 => { Name => 'Face15Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 15 ? undef : $val', }, 30 => { Name => 'Face16Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 16 ? undef : $val', }, 32 => { Name => 'Face17Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 17 ? undef : $val', }, 34 => { Name => 'Face18Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 18 ? undef : $val', }, 36 => { Name => 'Face19Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 19 ? undef : $val', }, 38 => { Name => 'Face20Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 20 ? undef : $val', }, 40 => { Name => 'Face21Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 21 ? undef : $val', }, 42 => { Name => 'Face22Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 22 ? undef : $val', }, 44 => { Name => 'Face23Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 23 ? undef : $val', }, 46 => { Name => 'Face24Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 24 ? undef : $val', }, 48 => { Name => 'Face25Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 25 ? undef : $val', }, 50 => { Name => 'Face26Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 26 ? undef : $val', }, 52 => { Name => 'Face27Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 27 ? undef : $val', }, 54 => { Name => 'Face28Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 28 ? undef : $val', }, 56 => { Name => 'Face29Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 29 ? undef : $val', }, 58 => { Name => 'Face30Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 30 ? undef : $val', }, 60 => { Name => 'Face31Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 31 ? undef : $val', }, 62 => { Name => 'Face32Position', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 32 ? undef : $val', }, ); # face detect sizes - ref PH (Optio RZ10) %Image::ExifTool::Pentax::FaceSize = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, FORMAT => 'int16u', 0 => { Name => 'Face1Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 1 ? undef : $val', }, 2 => { Name => 'Face2Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 2 ? undef : $val', }, 4 => { Name => 'Face3Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 3 ? undef : $val', }, 6 => { Name => 'Face4Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 4 ? undef : $val', }, 8 => { Name => 'Face5Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 5 ? undef : $val', }, 10 => { Name => 'Face6Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 6 ? undef : $val', }, 12 => { Name => 'Face7Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 7 ? undef : $val', }, 14 => { Name => 'Face8Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 8 ? undef : $val', }, 16 => { Name => 'Face9Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 9 ? undef : $val', }, 18 => { Name => 'Face10Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 10 ? undef : $val', }, 20 => { Name => 'Face11Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 11 ? undef : $val', }, 22 => { Name => 'Face12Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 12 ? undef : $val', }, 24 => { Name => 'Face13Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 13 ? undef : $val', }, 26 => { Name => 'Face14Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 14 ? undef : $val', }, 28 => { Name => 'Face15Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 15 ? undef : $val', }, 30 => { Name => 'Face16Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 16 ? undef : $val', }, 32 => { Name => 'Face17Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 17 ? undef : $val', }, 34 => { Name => 'Face18Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 18 ? undef : $val', }, 36 => { Name => 'Face19Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 19 ? undef : $val', }, 38 => { Name => 'Face20Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 20 ? undef : $val', }, 40 => { Name => 'Face21Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 21 ? undef : $val', }, 42 => { Name => 'Face22Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 22 ? undef : $val', }, 44 => { Name => 'Face23Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 23 ? undef : $val', }, 46 => { Name => 'Face24Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 24 ? undef : $val', }, 48 => { Name => 'Face25Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 25 ? undef : $val', }, 50 => { Name => 'Face26Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 26 ? undef : $val', }, 52 => { Name => 'Face27Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 27 ? undef : $val', }, 54 => { Name => 'Face28Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 28 ? undef : $val', }, 56 => { Name => 'Face29Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 29 ? undef : $val', }, 58 => { Name => 'Face30Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 30 ? undef : $val', }, 60 => { Name => 'Face31Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 31 ? undef : $val', }, 62 => { Name => 'Face32Size', Format => 'int16u[2]', RawConv => '$$self{FacesDetected} < 32 ? undef : $val', }, ); # digital filter information - ref PH (K-5) %Image::ExifTool::Pentax::FilterInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, FORMAT => 'int8u', NOTES => q{ The parameters associated with each type of digital filter are unique, and these settings are also extracted with the DigitalFilter tag. Information is not extracted for filters that are "Off" unless the Unknown option is used. }, 0 => { Name => 'SourceDirectoryIndex', Format => 'int16u', }, 2 => { Name => 'SourceFileIndex', Format => 'int16u', }, 0x005 => { Name => 'DigitalFilter01', %digitalFilter }, 0x016 => { Name => 'DigitalFilter02', %digitalFilter }, 0x027 => { Name => 'DigitalFilter03', %digitalFilter }, 0x038 => { Name => 'DigitalFilter04', %digitalFilter }, 0x049 => { Name => 'DigitalFilter05', %digitalFilter }, 0x05a => { Name => 'DigitalFilter06', %digitalFilter }, 0x06b => { Name => 'DigitalFilter07', %digitalFilter }, 0x07c => { Name => 'DigitalFilter08', %digitalFilter }, 0x08d => { Name => 'DigitalFilter09', %digitalFilter }, 0x09e => { Name => 'DigitalFilter10', %digitalFilter }, 0x0af => { Name => 'DigitalFilter11', %digitalFilter }, 0x0c0 => { Name => 'DigitalFilter12', %digitalFilter }, 0x0d1 => { Name => 'DigitalFilter13', %digitalFilter }, 0x0e2 => { Name => 'DigitalFilter14', %digitalFilter }, 0x0f3 => { Name => 'DigitalFilter15', %digitalFilter }, 0x104 => { Name => 'DigitalFilter16', %digitalFilter }, 0x115 => { Name => 'DigitalFilter17', %digitalFilter }, 0x126 => { Name => 'DigitalFilter18', %digitalFilter }, 0x137 => { Name => 'DigitalFilter19', %digitalFilter }, 0x148 => { Name => 'DigitalFilter20', %digitalFilter }, ); # electronic level information - ref PH (K-5) %Image::ExifTool::Pentax::LevelInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FORMAT => 'int8s', NOTES => q{ Tags decoded from the electronic level information for the K-5. May not be valid for other models. }, 0 => { Name => 'LevelOrientation', Mask => 0x0f, PrintHex => 0, PrintConv => { 1 => 'Horizontal (normal)', 2 => 'Rotate 180', 3 => 'Rotate 90 CW', 4 => 'Rotate 270 CW', 9 => 'Horizontal; Off Level', 10 => 'Rotate 180; Off Level', 11 => 'Rotate 90 CW; Off Level', 12 => 'Rotate 270 CW; Off Level', 13 => 'Upwards', 14 => 'Downwards', }, }, 0.1 => { Name => 'CompositionAdjust', Mask => 0xf0, PrintConv => { 0x00 => 'Off', 0x20 => 'Composition Adjust', 0xa0 => 'Composition Adjust + Horizon Correction', 0xc0 => 'Horizon Correction', }, }, 1 => { Name => 'RollAngle', Notes => 'converted to degrees of clockwise camera rotation', ValueConv => '-$val / 2', ValueConvInv => '-$val * 2', }, 2 => { Name => 'PitchAngle', Notes => 'converted to degrees of upward camera tilt', ValueConv => '-$val / 2', ValueConvInv => '-$val * 2', }, # 3,4 - related somehow to horizon correction and composition adjust # 5,6,7 - (the notes below refer to how the image moves in the LCD monitor) 5 => { Name => 'CompositionAdjustX', Notes => 'steps to the right, 1/16 mm per step', ValueConv => '-$val', ValueConvInv => '-$val', }, 6 => { Name => 'CompositionAdjustY', Notes => 'steps up, 1/16 mm per step', ValueConv => '-$val', ValueConvInv => '-$val', }, 7 => { Name => 'CompositionAdjustRotation', Notes => 'steps clockwise, 1/8 degree per step', ValueConv => '-$val / 2', ValueConvInv => '-$val * 2', }, ); # white balance RGGB levels (ref 28) %Image::ExifTool::Pentax::WBLevels = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # 0 - 11 (number of entries in this table) # 1 - 0 2 => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16u[4]', }, # 10 - 1 11 => { Name => 'WB_RGGBLevelsShade', Format => 'int16u[4]', }, # 19 - 2 20 => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16u[4]', }, # 28 - 3 29 => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16u[4]', }, # 37 - 4 38 => { Name => 'WB_RGGBLevelsFluorescentD', Format => 'int16u[4]', }, # 46 - 5 47 => { Name => 'WB_RGGBLevelsFluorescentN', Format => 'int16u[4]', }, # 55 - 6 56 => { Name => 'WB_RGGBLevelsFluorescentW', Format => 'int16u[4]', }, # 64 - 7 65 => { Name => 'WB_RGGBLevelsFlash', Format => 'int16u[4]', }, # 73 - 8 74 => { Name => 'WB_RGGBLevelsFluorescentL', Format => 'int16u[4]', }, # 82 - 0xfe 83 => { Name => 'WB_RGGBLevelsUnknown', Format => 'int16u[4]', Unknown => 1, }, # 91 - 0xff 92 => { Name => 'WB_RGGBLevelsUserSelected', Format => 'int16u[4]', }, ); # lens information for Penax Q (ref PH) # (306 bytes long, I wonder if this contains vignetting information too?) %Image::ExifTool::Pentax::LensInfoQ = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'More lens information stored by the Pentax Q.', 0x0c => { Name => 'LensModel', Format => 'string[30]', }, 0x2a => { Name => 'LensInfo', Format => 'string[20]', ValueConv => '$val=~s/mm/mm /; $val', ValueConvInv => '$val=~tr/ //d; $val', } ); # Pixel shift information for the K-3II (ref PH) %Image::ExifTool::Pentax::PixelShiftInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Pixel shift information stored by the K-3 II.', 0x00 => { Name => 'PixelShiftResolution', PrintConv => { 0 => 'Off', 1 => 'On' }, }, ); # temperature information for some models - PH %Image::ExifTool::Pentax::TempInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ A number of additional temperature readings are extracted from this 256-byte binary-data block in images from models such as the K-01, K-3, K-5, K-50 and K-500. It is currently not known where the corresponding temperature sensors are located in the camera. }, # (it would be nice to know where these temperature sensors are located, # but since according to the manual the Slow Shutter Speed NR Auto mode # is based on "internal temperature", my guess is that there must be # at least one on the sensor itself. These temperatures seem to rise # more quickly than CameraTemperature when shooting video.) 0x0c => { Name => 'SensorTemperature', #forum6677 (was CameraTemperature2) Format => 'int16s', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f C", $val)', PrintConvInv => '$val=~s/ ?c$//i; $val', }, 0x0e => { Name => 'SensorTemperature2', #forum6677 (was CameraTemperature3) Format => 'int16s', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f C", $val)', PrintConvInv => '$val=~s/ ?c$//i; $val', }, 0x14 => { Name => 'CameraTemperature4', Condition => '$$self{Model} =~ /K-5\b/', Format => 'int16s', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?c$//i; $val', }, 0x16 => { # usually the same as CameraTemperature4, but not always Name => 'CameraTemperature5', Condition => '$$self{Model} =~ /K-5\b/', Format => 'int16s', PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?c$//i; $val', }, # 0x18,0x1a,0x1c,0x1e = int16u[4] BlackPoint - PH ); # currently unknown info %Image::ExifTool::Pentax::UnknownInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # K10D: first 8 bytes seem to be short integers which change with ISO (value # is usually close to ISO/100) possibly smoothing or gain parameters? - PH # byte 0-1 - Higher for high color temperatures (red boost or red noise suppression?) # byte 6-7 - Higher for low color temperatures (blue boost or blue noise suppression?) # also changing are bytes 10,11,14,15 ); # Pentax type 2 (Casio-like) maker notes (ref 1) %Image::ExifTool::Pentax::Type2 = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, WRITABLE => 'int16u', NOTES => q{ These tags are used by the Pentax Optio 330 and 430, and are similar to the tags used by Casio. }, 0x0001 => { Name => 'RecordingMode', PrintConv => { 0 => 'Auto', 1 => 'Night Scene', 2 => 'Manual', }, }, 0x0002 => { Name => 'Quality', PrintConv => { 0 => 'Good', 1 => 'Better', 2 => 'Best', }, }, 0x0003 => { Name => 'FocusMode', PrintConv => { 2 => 'Custom', 3 => 'Auto', }, }, 0x0004 => { Name => 'FlashMode', PrintConv => { 1 => 'Auto', 2 => 'On', 4 => 'Off', 6 => 'Red-eye reduction', }, }, # Casio 0x0005 is FlashIntensity # Casio 0x0006 is ObjectDistance 0x0007 => { Name => 'WhiteBalance', PrintConv => { 0 => 'Auto', 1 => 'Daylight', 2 => 'Shade', 3 => 'Tungsten', 4 => 'Fluorescent', 5 => 'Manual', }, }, 0x000a => { Name => 'DigitalZoom', Writable => 'int32u', }, 0x000b => { Name => 'Sharpness', PrintConv => { 0 => 'Normal', 1 => 'Soft', 2 => 'Hard', }, }, 0x000c => { Name => 'Contrast', PrintConv => { 0 => 'Normal', 1 => 'Low', 2 => 'High', }, }, 0x000d => { Name => 'Saturation', PrintConv => { 0 => 'Normal', 1 => 'Low', 2 => 'High', }, }, 0x0014 => { Name => 'ISO', Priority => 0, PrintConv => { 10 => 100, 16 => 200, 50 => 50, #PH 100 => 100, #PH 200 => 200, #PH 400 => 400, #PH 800 => 800, #PH 1600 => 1600, #PH 3200 => 3200, #PH # seen 65534 for Q-S1 MOV video - PH # seen 65535 for K-S1 MOV video - PH }, }, 0x0017 => { Name => 'ColorFilter', PrintConv => { 1 => 'Full', 2 => 'Black & White', 3 => 'Sepia', }, }, # Casio 0x0018 is AFPoint # Casio 0x0019 is FlashIntensity 0x0e00 => { Name => 'PrintIM', Description => 'Print Image Matching', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main', }, }, 0x1000 => { Name => 'HometownCityCode', Writable => 'undef', Count => 4, }, 0x1001 => { #PH Name => 'DestinationCityCode', Writable => 'undef', Count => 4, }, ); # ASCII-based maker notes of Optio E20 and E25 - PH %Image::ExifTool::Pentax::Type4 = ( PROCESS_PROC => \&Image::ExifTool::HP::ProcessHP, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ The following few tags are extracted from the wealth of information available in maker notes of the Optio E20 and E25. These maker notes are stored as ASCII text in a format very similar to some HP models. }, 'F/W Version' => 'FirmwareVersion', ); # tags in Pentax QuickTime videos (PH - tests with Optio WP) # (similar information in Kodak,Minolta,Nikon,Olympus,Pentax and Sanyo videos) %Image::ExifTool::Pentax::MOV = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, NOTES => 'This information is found in MOV videos from cameras such as the Optio WP.', 0x00 => { Name => 'Make', Format => 'string[24]', }, # (01 00 at offset 0x20) 0x26 => { Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val ? 10 / $val : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x2a => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', }, 0x32 => { Name => 'ExposureCompensation', Format => 'rational64s', PrintConv => '$val ? sprintf("%+.1f", $val) : 0', }, 0x44 => { Name => 'WhiteBalance', Format => 'int16u', PrintConv => { 0 => 'Auto', 1 => 'Daylight', 2 => 'Shade', 3 => 'Fluorescent', #2 4 => 'Tungsten', 5 => 'Manual', }, }, 0x48 => { Name => 'FocalLength', Format => 'rational64u', PrintConv => 'sprintf("%.1f mm",$val)', }, 0xaf => { Name => 'ISO', Format => 'int16u', }, ); # Pentax metadata in AVI videos (PH) %Image::ExifTool::Pentax::AVI = ( NOTES => 'Pentax-specific RIFF tags found in AVI videos.', GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, hymn => { Name => 'MakerNotes', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::Main', Start => 10, Base => '$start', ByteOrder => 'BigEndian', }, }, ); # Pentax metadata in S1 AVI maker notes (PH) %Image::ExifTool::Pentax::S1 = ( NOTES => 'Tags extracted from the maker notes of AVI videos from the Optio S1.', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x0000 => { #5 Name => 'MakerNoteVersion', Writable => 'undef', Count => 4, }, ); # Pentax metadata in AVI videos from the RS1000 (PH) %Image::ExifTool::Pentax::Junk = ( NOTES => 'Tags found in the JUNK chunk of AVI videos from the RS1000.', PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x0c => { Name => 'Model', Format => 'string[32]', }, ); # PreviewImage information found in PXTH atom of K-01 MOV videos %Image::ExifTool::Pentax::PXTH = ( NOTES => 'Tags found in the PXTH atom of MOV videos from the K-01.', PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x00 => { Name => 'PreviewImageLength', Format => 'int32u', }, 0x04 => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Format => 'undef[$val{0}]', Notes => '640-pixel-wide JPEG preview', # (360 pixels high, may depend on aspect ratio) RawConv => '$self->ValidateImage(\$val,$tag)', }, ); # information in PENT atom of MOV videos from the Optio WG-2 GPS %Image::ExifTool::Pentax::PENT = ( NOTES => 'Tags found in the PENT atom of MOV videos from the Optio WG-2 GPS.', PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0 => { Name => 'Make', Format => 'string[24]', }, 0x1a => { Name => 'Model', Description => 'Camera Model Name', Format => 'string[24]', }, 0x38 => { # (NC) Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val ? 10 / $val : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x3c => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', }, 0x44 => { # (NC) Name => 'ExposureCompensation', Format => 'rational64s', PrintConv => '$val ? sprintf("%+.1f", $val) : 0', }, 0x54 => { # (NC) Name => 'FocalLength', Format => 'int32u', PrintConv => '"$val mm"', }, 0x71 => { Name => 'DateTime1', Format => 'string[24]', Groups => { 2 => 'Time' }, }, 0x8b => { Name => 'DateTime2', Format => 'string[24]', Groups => { 2 => 'Time' }, }, 0xa7 => { # (NC) Name => 'ISO', Format => 'int32u', }, 0xc7 => { Name => 'GPSVersionID', Format => 'undef[8]', Groups => { 1 => 'GPS', 2 => 'Location' }, DataMember => 'GPSVersionID', RawConv => '$$self{GPSVersionID} = ($val=~s/GPS_// ? join(" ",unpack("C*",$val)) : undef)', PrintConv => '$val =~ tr/ /./; $val', }, 0xcf => { Name => 'GPSLatitudeRef', Condition => '$$self{GPSVersionID} and require Image::ExifTool::GPS', Format => 'string[2]', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { N => 'North', S => 'South', }, }, 0xd1 => { Name => 'GPSLatitude', Condition => '$$self{GPSVersionID}', Format => 'rational64u[3]', Groups => { 1 => 'GPS', 2 => 'Location' }, ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)', PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)', }, 0xe9 => { Name => 'GPSLongitudeRef', Condition => '$$self{GPSVersionID}', Format => 'string[2]', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { E => 'East', W => 'West', }, }, 0xeb => { Name => 'GPSLongitude', Condition => '$$self{GPSVersionID}', Format => 'rational64u[3]', Groups => { 1 => 'GPS', 2 => 'Location' }, ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)', PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)', }, 0x103 => { Name => 'GPSAltitudeRef', Condition => '$$self{GPSVersionID}', Format => 'int8u', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { 0 => 'Above Sea Level', 1 => 'Below Sea Level', }, }, 0x104 => { Name => 'GPSAltitude', Condition => '$$self{GPSVersionID}', Format => 'rational64u', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => '$val =~ /^(inf|undef)$/ ? $val : "$val m"', }, 0x11c => { Name => 'GPSTimeStamp', Condition => '$$self{GPSVersionID}', Groups => { 1 => 'GPS', 2 => 'Time' }, Format => 'rational64u[3]', ValueConv => 'Image::ExifTool::GPS::ConvertTimeStamp($val)', PrintConv => 'Image::ExifTool::GPS::PrintTimeStamp($val)', }, 0x134 => { Name => 'GPSSatellites', Condition => '$$self{GPSVersionID}', Format => 'string[3]', Groups => { 1 => 'GPS', 2 => 'Location' }, }, 0x137 => { Name => 'GPSStatus', Condition => '$$self{GPSVersionID}', Format => 'string[2]', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { A => 'Measurement Active', V => 'Measurement Void', }, }, 0x139 => { Name => 'GPSMeasureMode', Condition => '$$self{GPSVersionID}', Format => 'string[2]', Groups => { 1 => 'GPS', 2 => 'Location' }, PrintConv => { 2 => '2-Dimensional Measurement', 3 => '3-Dimensional Measurement', }, }, 0x13b => { Name => 'GPSMapDatum', Condition => '$$self{GPSVersionID}', Format => 'string[7]', Groups => { 1 => 'GPS', 2 => 'Location' }, }, 0x142 => { Name => 'GPSDateStamp', Condition => '$$self{GPSVersionID}', Groups => { 1 => 'GPS', 2 => 'Time' }, Format => 'string[11]', ValueConv => 'Image::ExifTool::Exif::ExifDate($val)', }, 0x173 => { # (NC) Name => 'AudioCodecID', Format => 'string[4]', }, 0x7d3 => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Format => 'undef[$size-0x7d3]', Notes => '640x480 JPEG preview image', # (black borders pad to 480 pixels high) RawConv => '$self->ValidateImage(\$val,$tag)', }, ); # tags in Pentax Optio RZ18 AVI videos (ref PH) # (very similar to Olympus::AVI tags) %Image::ExifTool::Pentax::Junk2 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, NOTES => 'This information is found in AVI videos from the Optio RZ18.', 0x12 => { Name => 'Make', Format => 'string[24]', }, 0x2c => { Name => 'Model', Description => 'Camera Model Name', Format => 'string[24]', }, 0x5e => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', }, 0x83 => { Name => 'DateTime1', Format => 'string[24]', Groups => { 2 => 'Time' }, }, 0x9d => { Name => 'DateTime2', Format => 'string[24]', Groups => { 2 => 'Time' }, }, 0x12b => { Name => 'ThumbnailWidth', Format => 'int16u', }, 0x12d => { Name => 'ThumbnailHeight', Format => 'int16u', }, 0x12f => { Name => 'ThumbnailLength', Format => 'int32u', }, 0x133 => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Format => 'undef[$val{0x12f}]', Notes => '160x120 JPEG thumbnail image', RawConv => '$self->ValidateImage(\$val,$tag)', }, ); #------------------------------------------------------------------------------ # Convert filter settings (ref PH, K-5) # Inputs: 0) value to convert, 1) flag for inverse conversion, 2) lookup table # Returns: converted value sub PrintFilter($$$) { my ($val, $inv, $conv) = @_; my (@vals, @cval, $t, $v); if (not $inv) { # forward conversion (reading): @vals = split ' ',$val; $t = shift @vals; push @cval, $$conv{$t} || "Unknown ($t)"; while (@vals) { $t = shift @vals; $v = shift @vals; next unless $t; last unless defined $v; my $c = $filterSettings{$t}; if ($c) { my $c1 = $$c[1]; if (ref $c1) { $v = $$c1{$v} || "Unknown($v)"; } elsif ($v) { $v = sprintf $c1, $v; } push @cval, "$$c[0]=$v"; } else { push @cval, "Unknown($t)=$v"; } } return @cval ? \@cval : undef; } else { # reverse conversion (writing): @vals = split /,\s*/, $val; # convert filter name delete $$conv{OTHER}; # avoid recursion $v = Image::ExifTool::ReverseLookup(shift(@vals), $conv); $$conv{OTHER} = \&PrintFilter; return undef unless defined $v; push @cval, $v; # generate a lookup table for the filter setting name my %settingNames; $settingNames{$_} = $filterSettings{$_}[0] foreach keys %filterSettings; # convert filter settings foreach $v (@vals) { $v =~ /^(.*)=(.*)$/ or return undef; ($t, $v) = ($1, $2); # look up settings name $t = Image::ExifTool::ReverseLookup($t, \%settingNames); return undef unless defined $t; if (ref $filterSettings{$t}[1]) { # look up settings value $v = Image::ExifTool::ReverseLookup($v, $filterSettings{$t}[1]); return undef unless defined $v; } else { return undef unless Image::ExifTool::IsInt($v); } push @cval, $t, $v; } push @cval, (0) x (17 - @cval) if @cval < 17; # pad with zeros if necessary return join(' ', @cval); } } #------------------------------------------------------------------------------ # Convert Pentax hex-based EV (modulo 8) to real number # Inputs: 0) value to convert # eg) 0x00 -> 0 # 0x03 -> 0.33333 # 0x04 -> 0.5 # 0x05 -> 0.66666 # 0x08 -> 1 ... etc sub PentaxEv($) { my $val = shift; if ($val & 0x01) { my $sign = $val < 0 ? -1 : 1; my $frac = ($val * $sign) & 0x07; if ($frac == 0x03) { $val += $sign * ( 8 / 3 - $frac); } elsif ($frac == 0x05) { $val += $sign * (16 / 3 - $frac); } } return $val / 8; } #------------------------------------------------------------------------------ # Convert number to Pentax hex-based EV (modulo 8) # Inputs: 0) number # Returns: Pentax EV code sub PentaxEvInv($) { my $num = shift; my $val = $num * 8; # extra fudging makes sure 0.3 and 0.33333 both round up to 3, etc my $sign = $num < 0 ? -1 : 1; my $inum = $num * $sign - int($num * $sign); if ($inum > 0.29 and $inum < 0.4) { $val += $sign / 3; } elsif ($inum > 0.6 and $inum < .71) { $val -= $sign / 3; } return int($val + 0.5 * $sign); } #------------------------------------------------------------------------------ # Encrypt or decrypt Pentax ShutterCount (symmetrical encryption) - PH # Inputs: 0) shutter count value, 1) ExifTool object ref # Returns: Encrypted or decrypted ShutterCount sub CryptShutterCount($$) { my ($val, $et) = @_; # Pentax Date and Time values are used in the encryption return undef unless $$et{PentaxDate} and $$et{PentaxTime} and length($$et{PentaxDate})==4 and length($$et{PentaxTime})>=3; # get Date and Time as integers (after padding Time with a null byte) my $date = unpack('N', $$et{PentaxDate}); my $time = unpack('N', $$et{PentaxTime} . "\0"); return $val ^ $date ^ (0xffffffff - $time); } 1; # end __END__ =head1 NAME Image::ExifTool::Pentax - Pentax/Asahi maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Pentax and Asahi maker notes in EXIF information. =head1 NOTES I couldn't find a good source for Pentax maker notes information, but I've managed to discover a fair bit of information by analyzing sample images downloaded from the internet, and through tests with my own Optio WP, K10D, and K-5, and with help provided by other ExifTool users (see L</ACKNOWLEDGEMENTS>). The Pentax maker notes are stored in standard EXIF format, but the offsets used for some of their cameras are wacky. The Optio 330 gives the offset relative to the offset of the tag in the directory, the Optio WP uses a base offset in the middle of nowhere, and the Optio 550 uses different (and totally illogical) bases for different menu entries. Very weird. (It wouldn't surprise me if Pentax can't read their own maker notes!) Luckily, there are only a few entries in the maker notes which are large enough to require offsets, so this doesn't affect much useful information. ExifTool attempts to make sense of this fiasco by making an assumption about where the information should be stored to deduce the correct offsets. =head1 REFERENCES =over 4 =item L<Image::MakerNotes::Pentax|Image::MakerNotes::Pentax> =item L<http://johnst.org/sw/exiftags/> (Asahi models) =item L<http://kobe1995.jp/~kaz/astro/istD.html> =item L<http://www.cybercom.net/~dcoffin/dcraw/> =item (...plus lots of testing with my Optio WP, K10D and K-5!) =back =head1 ACKNOWLEDGEMENTS Thanks to Wayne Smith, John Francis, Douglas O'Brien Cvetan Ivanov, Jens Duttke and Dave Nicholson for help figuring out some Pentax tags, Ger Vermeulen and Niels Kristian Bech Jensen for contributing print conversion values for some tags, and everyone who helped contribute to the LensType values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/Pentax Tags>, L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::Info(3pm)|Image::Info> =cut �����������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/PGF.pm������������������������������������������������������000644 �000765 �000024 �00000010050 12642461325 020657� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: PGF.pm # # Description: Read Progressive Graphics File meta information # # Revisions: 2011/01/25 - P. Harvey Created # # References: 1) http://www.libpgf.org/ # 2) http://www.exiv2.org/ #------------------------------------------------------------------------------ package Image::ExifTool::PGF; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.02'; # PGF header information %Image::ExifTool::PGF::Main = ( GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, PRIORITY => 2, # (to take precedence over PNG tags from embedded image) NOTES => q{ The following table lists information extracted from the header of Progressive Graphics File (PGF) images. As well, information is extracted from the embedded PNG metadata image if it exists. See L<http://www.libpgf.org/> for the PGF specification. }, 3 => { Name => 'PGFVersion', PrintConv => 'sprintf("0x%.2x", $val)', # this is actually a bitmask (ref digikam PGFtypes.h): # 0x02 - data structure PGFHeader of major version 2 # 0x04 - 32-bit values # 0x08 - supports regions of interest # 0x10 - new coding scheme since major version 5 # 0x20 - new HeaderSize: 32 bits instead of 16 bits }, 8 => { Name => 'ImageWidth', Format => 'int32u' }, 12 => { Name => 'ImageHeight', Format => 'int32u' }, 16 => 'PyramidLevels', 17 => 'Quality', 18 => 'BitsPerPixel', 19 => 'ColorComponents', 20 => { Name => 'ColorMode', RawConv => '$$self{PGFColorMode} = $val', PrintConvColumns => 2, PrintConv => { 0 => 'Bitmap', 1 => 'Grayscale', 2 => 'Indexed', 3 => 'RGB', 4 => 'CMYK', 7 => 'Multichannel', 8 => 'Duotone', 9 => 'Lab', }, }, 21 => { Name => 'BackgroundColor', Format => 'int8u[3]' }, ); #------------------------------------------------------------------------------ # Extract information from a PGF image # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid PGF file sub ProcessPGF($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $buff; # read header and check magic number return 0 unless $raf->Read($buff, 24) == 24 and $buff =~ /^PGF(.)/s; my $ver = ord $1; $et->SetFileType(); SetByteOrder('II'); # currently support only version 0x36 unless ($ver == 0x36) { $et->Error(sprintf('Unsupported PGF version 0x%.2x', $ver)); return 1; } # extract information from the PGF header my $tagTablePtr = GetTagTable('Image::ExifTool::PGF::Main'); $et->ProcessDirectory({ DataPt => \$buff, DataPos => 0 }, $tagTablePtr); my $len = Get32u(\$buff, 4) - 16; # length of post-header data # skip colour table if necessary $len -= $raf->Seek(1024, 1) ? 1024 : $len if $$et{PGFColorMode} == 2; # extract information from the embedded metadata image (PNG format) if ($len > 0 and $len < 0x1000000 and $raf->Read($buff, $len) == $len) { $et->ExtractInfo(\$buff, { ReEntry => 1 }); } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::PGF - Read Progressive Graphics File meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from Progressive Graphics File (PGF) images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.libpgf.org/> =item L<http://www.exiv2.org/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/PGF Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/PhaseOne.pm�������������������������������������������������000644 �000765 �000024 �00000062014 12642461332 021752� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: PhaseOne.pm # # Description: Phase One maker notes tags # # Revisions: 2013-02-17 - P. Harvey Created # # References: 1) http://www.cybercom.net/~dcoffin/dcraw/ #------------------------------------------------------------------------------ package Image::ExifTool::PhaseOne; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.03'; sub WritePhaseOne($$$); sub ProcessPhaseOne($$$); # default formats based on PhaseOne format size my @formatName = ( undef, 'string', 'int16s', undef, 'int32s' ); # Phase One maker notes (ref PH) %Image::ExifTool::PhaseOne::Main = ( PROCESS_PROC => \&ProcessPhaseOne, WRITE_PROC => \&WritePhaseOne, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => '1', FORMAT => 'int32s', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, VARS => { ENTRY_SIZE => 16 }, # (entries contain a format field) NOTES => 'These tags are extracted from the maker notes of Phase One images.', 0x0100 => { #1 Name => 'CameraOrientation', ValueConv => '$val & 0x03', # ignore other bits for now PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', 2 => 'Rotate 270 CW', 3 => 'Rotate 180', }, }, # 0x0101 - int32u: 96,160,192,256,544 (same as 0x0213) 0x0102 => { Name => 'SerialNumber', Format => 'string' }, # 0x0103 - int32u: 19,20,59769034 # 0x0104 - int32u: 50,200 0x0105 => 'ISO', 0x0106 => { Name => 'ColorMatrix1', Format => 'float', Count => 9, PrintConv => q{ my @a = map { sprintf('%.3f', $_) } split ' ', $val; return "@a"; }, PrintConvInv => '$val', }, 0x0107 => { Name => 'WB_RGBLevels', Format => 'float', Count => 3 }, 0x0108 => 'SensorWidth', 0x0109 => 'SensorHeight', 0x010a => 'SensorLeftMargin', #1 0x010b => 'SensorTopMargin', #1 0x010c => 'ImageWidth', 0x010d => 'ImageHeight', 0x010e => { #1 Name => 'RawFormat', # 1 = raw bit mask 0x5555 (>1 mask 0x1354) # >2 = compressed # 5 = non-linear PrintConv => { #PH 1 => 'RAW 1', #? (encrypted) 2 => 'RAW 2', #? (encrypted) 3 => 'IIQ L', # 4? 5 => 'IIQ S', 6 => 'IIQ Sv2', }, }, 0x010f => { Name => 'RawData', Format => 'undef', # (actually 2-byte integers, but don't convert) Binary => 1, PutFirst => 1, Writable => 0, }, 0x0110 => { #1 Name => 'SensorCalibration', SubDirectory => { TagTable => 'Image::ExifTool::PhaseOne::SensorCalibration' }, }, 0x0112 => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Format => 'int32u', Writable => 0, # (don't write because this is an encryption key for RawFormat 1 and 2) Priority => 0, Shift => 'Time', Groups => { 2 => 'Time' }, Notes => 'may be used as a key to encrypt the raw data', #1 ValueConv => 'ConvertUnixTime($val)', ValueConvInv => 'GetUnixTime($val)', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', }, 0x0113 => 'ImageNumber', # (NC) 0x0203 => { Name => 'Software', Format => 'string' }, 0x0204 => { Name => 'System', Format => 'string' }, # 0x020b - int32u: 0,1 # 0x020c - int32u: 1,2 # 0x020e - int32u: 1,3 0x0210 => { # (NC) (used in linearization formula - ref 1) Name => 'SensorTemperature', Format => 'float', PrintConv => 'sprintf("%.2f C",$val)', PrintConvInv => '$val=~s/ ?C//; $val', }, 0x0211 => { # (NC) Name => 'SensorTemperature2', Format => 'float', PrintConv => 'sprintf("%.2f C",$val)', PrintConvInv => '$val=~s/ ?C//; $val', }, 0x0212 => { Name => 'UnknownDate', Format => 'int32u', Groups => { 2 => 'Time' }, # (this time is within about 10 minutes before or after 0x0112) Unknown => 1, Shift => 'Time', ValueConv => 'ConvertUnixTime($val)', ValueConvInv => 'GetUnixTime($val)', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', }, # 0x0213 - int32u: 96,160,192,256,544 (same as 0x0101) # 0x0215 - int32u: 4,5 # 0x021a - used by dcraw 0x021c => { Name => 'StripOffsets', Binary => 1, Writable => 0 }, 0x021d => 'BlackLevel', #1 # 0x021e - int32u: 1 # 0x0220 - int32u: 32 # 0x0221 - float: 0-271 0x0222 => 'SplitColumn', #1 0x0223 => { Name => 'BlackLevelData', Format => 'int16u', Count => -1, Binary => 1 }, #1 # 0x0224 - int32u: 1688,2748,3372 0x0225 => { Name => 'PhaseOne_0x0225', Format => 'int16s', Count => -1, Flags => ['Unknown','Hidden'], PrintConv => 'length($val) > 60 ? substr($val,0,55) . "[...]" : $val', }, 0x0226 => { Name => 'ColorMatrix2', Format => 'float', Count => 9, PrintConv => q{ my @a = map { sprintf('%.3f', $_) } split ' ', $val; return "@a"; }, PrintConvInv => '$val', }, # 0x0227 - int32u: 0,1 # 0x0228 - int32u: 1,2 # 0x0229 - int32s: -2,0 0x022b => { #PH Name => 'PhaseOne_0x022b', Format => 'float', Flags => ['Unknown','Hidden'], }, # 0x0242 - int32u: 55 # 0x0244 - int32u: 102 # 0x0245 - float: 1.2 0x0258 => { #PH Name => 'PhaseOne_0x0258', Format => 'int16s', Flags => ['Unknown','Hidden'], PrintConv => 'length($val) > 60 ? substr($val,0,55) . "[...]" : $val', }, 0x025a => { #PH Name => 'PhaseOne_0x025a', Format => 'int16s', Flags => ['Unknown','Hidden'], PrintConv => 'length($val) > 60 ? substr($val,0,55) . "[...]" : $val', }, # 0x0300 - int32u: 100,101,102 0x0301 => { Name => 'FirmwareVersions', Format => 'string' }, # 0x0304 - int32u: 8,3073,3076 0x0400 => { Name => 'ShutterSpeedValue', Format => 'float', ValueConv => 'abs($val)<100 ? 2**(-$val) : 0', ValueConvInv => '$val>0 ? -log($val)/log(2) : -100', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x0401 => { Name => 'ApertureValue', Format => 'float', ValueConv => '2 ** ($val / 2)', ValueConvInv => '$val>0 ? 2*log($val)/log(2) : 0', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0x0402 => { Name => 'ExposureCompensation', Format => 'float', PrintConv => 'sprintf("%.3f",$val)', PrintConvInv => '$val', }, 0x0403 => { Name => 'FocalLength', Format => 'float', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val=~s/\s*mm$//;$val', }, # 0x0404 - int32u: 0,3 # 0x0405 - int32u? (big numbers) # 0x0406 - int32u: 1 # 0x0407 - float: -0.333 (exposure compensation again?) # 0x0408-0x0409 - int32u: 1 0x0410 => { Name => 'CameraModel', Format => 'string' }, # 0x0411 - int32u: 33556736 0x0412 => { Name => 'LensModel', Format => 'string' }, 0x0414 => { Name => 'MaxApertureValue', Format => 'float', ValueConv => '2 ** ($val / 2)', ValueConvInv => '$val>0 ? 2*log($val)/log(2) : 0', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0x0415 => { Name => 'MinApertureValue', Format => 'float', ValueConv => '2 ** ($val / 2)', ValueConvInv => '$val>0 ? 2*log($val)/log(2) : 0', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, # 0x0416 - float: (min focal length? ref LibRaw, Credo50) (but looks more like an int32u date for the 645DF - PH) # 0x0417 - float: 80 (max focal length? ref LibRaw) ); # Phase One metadata (ref 1) %Image::ExifTool::PhaseOne::SensorCalibration = ( PROCESS_PROC => \&ProcessPhaseOne, WRITE_PROC => \&WritePhaseOne, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, TAG_PREFIX => 'SensorCalibration', VARS => { ENTRY_SIZE => 12 }, # (entries do not contain a format field) 0x0400 => { Name => 'SensorDefects', # list of defects. each defect is 4 x int16u values: # 0=column, 1=row, 2=type (129=bad pixel, 131=bad column), 3=? # (but it isn't really worth the time decoding this -- it can be a few hundred kB) Format => 'undef', Binary => 1, }, 0x0401 => { Name => 'AllColorFlatField1', Format => 'undef', Flags => ['Unknown','Binary'], }, 0x0404 => { #PH Name => 'SensorCalibration_0x0404', Format => 'string', Flags => ['Unknown','Hidden'], }, 0x0405 => { #PH Name => 'SensorCalibration_0x0405', Format => 'string', Flags => ['Unknown','Hidden'], }, 0x0406 => { #PH Name => 'SensorCalibration_0x0406', Format => 'string', Flags => ['Unknown','Hidden'], }, 0x0407 => { #PH Name => 'SerialNumber', Format => 'string', Writable => 1, }, 0x0408 => { #PH Name => 'SensorCalibration_0x0408', Format => 'float', Flags => ['Unknown','Hidden'], }, 0x040b => { Name => 'RedBlueFlatField', Format => 'undef', Flags => ['Unknown','Binary'], }, 0x040f => { #PH Name => 'SensorCalibration_0x040f', Format => 'undef', Flags => ['Unknown','Hidden'], }, 0x0410 => { Name => 'AllColorFlatField2', Format => 'undef', Flags => ['Unknown','Binary'], }, # 0x0412 - used by dcraw 0x0413 => { #PH Name => 'SensorCalibration_0x0413', Format => 'double', Flags => ['Unknown','Hidden'], }, 0x0414 => { #PH Name => 'SensorCalibration_0x0414', Format => 'undef', Flags => ['Unknown','Hidden'], }, 0x0416 => { Name => 'AllColorFlatField3', Format => 'undef', Flags => ['Unknown','Binary'], }, 0x0418 => { #PH Name => 'SensorCalibration_0x0418', Format => 'undef', Flags => ['Unknown','Hidden'], }, 0x0419 => { Name => 'LinearizationCoefficients1', Format => 'float', PrintConv => 'my @a=split " ",$val;join " ", map { sprintf("%.5g",$_) } @a', }, 0x041a => { Name => 'LinearizationCoefficients2', Format => 'float', PrintConv => 'my @a=split " ",$val;join " ", map { sprintf("%.5g",$_) } @a', }, 0x041c => { #PH Name => 'SensorCalibration_0x041c', Format => 'float', Flags => ['Unknown','Hidden'], }, 0x041e => { #PH Name => 'SensorCalibration_0x041e', Format => 'undef', Flags => ['Unknown','Hidden'], ValueConv => q{ my $order = GetByteOrder(); if (length $val >= 8 and SetByteOrder(substr($val,0,2))) { $val = ReadValue(\$val, 4, 'float', undef, length($val)-4); SetByteOrder($order); } return $val; }, }, ); #------------------------------------------------------------------------------ # Do HTML dump of an IFD entry # Inputs: 0) ExifTool ref, 1) tag table ref, 3) tag ID, 4) tag value, # 5) IFD entry offset, 6) IFD entry size, 7) parameter hash sub HtmlDump($$$$$$%) { my ($et, $tagTablePtr, $tagID, $value, $entry, $entryLen, %parms) = @_; my ($dirName, $index, $formatStr, $dataPos, $base, $size, $valuePtr) = @parms{qw(DirName Index Format DataPos Base Size Start)}; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tagID); my ($tagName, $colName, $subdir); my $count = $parms{Count} || $size; $base = 0 unless defined $base; if ($tagInfo) { $tagName = $$tagInfo{Name}; $subdir = $$tagInfo{SubDirectory}; if ($$tagInfo{Format}) { $formatStr = $$tagInfo{Format}; $count = $size / Image::ExifTool::FormatSize($formatStr); } } else { $tagName = sprintf("Tag 0x%.4x", $tagID); } my $dname = sprintf("${dirName}-%.2d", $index); # build our tool tip my $fstr = "$formatStr\[$count]"; my $tip = sprintf("Tag ID: 0x%.4x\n", $tagID) . "Format: $fstr\nSize: $size bytes\n"; if ($size > 4) { $tip .= sprintf("Value offset: 0x%.4x\n", $valuePtr - $base); $tip .= sprintf("Actual offset: 0x%.4x\n", $valuePtr + $dataPos); $tip .= sprintf("Offset base: 0x%.4x\n", $dataPos + $base); $colName = "<span class=F>$tagName</span>"; } else { $colName = $tagName; } unless (ref $value) { my $tval = length($value) > 32 ? substr($value,0,28) . '[...]' : $value; $tval =~ tr/\x00-\x1f\x7f-\xff/./; $tip .= "Value: $tval"; } $et->HDump($entry+$dataPos, $entryLen, "$dname $colName", $tip, 1); if ($size > 4) { my $dumpPos = $valuePtr + $dataPos; # add value data block $et->HDump($dumpPos,$size,"$tagName value",'SAME', $subdir ? 0x04 : 0); } } #------------------------------------------------------------------------------ # Write PhaseOne maker notes (both types of PhaseOne IFD) # Inputs: 0) ExifTool object ref, 1) source dirInfo ref, 2) tag table ref # Returns: data block or undef on error sub WritePhaseOne($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access to autoload this package # nothing to do if we aren't changing any PhaseOne tags my $newTags = $et->GetNewTagInfoHash($tagTablePtr); return undef unless %$newTags; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos} || 0; my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || $$dirInfo{DataLen} - $dirStart; my $dirName = $$dirInfo{DirName}; my $verbose = $et->Options('Verbose'); return undef if $dirLen < 12; unless ($$tagTablePtr{VARS} and $$tagTablePtr{VARS}{ENTRY_SIZE}) { $et->WarnOnce("No ENTRY_SIZE for $$tagTablePtr{TABLE_NAME}"); return undef; } my $entrySize = $$tagTablePtr{VARS}{ENTRY_SIZE}; my $ifdType = $$tagTablePtr{TAG_PREFIX} || 'PhaseOne'; my $hdr = substr($$dataPt, $dirStart, 12); if ($entrySize == 16) { return undef unless $hdr =~ /^(IIII.waR|MMMMRaw.)/s; } elsif ($hdr !~ /^(IIII\x01\0\0\0|MMMM\0\0\0\x01)/s) { $et->Warn("Unrecognized $ifdType directory version"); return undef; } SetByteOrder(substr($hdr, 0, 2)); # get offset to start of PhaseOne directory my $ifdStart = Get32u(\$hdr, 8); return undef if $ifdStart + 8 > $dirLen; # initialize output directory buffer with (fixed) number of entries plus 4-byte padding my $dirBuff = substr($$dataPt, $dirStart + $ifdStart, 8); # get number of entries in PhaseOne directory my $numEntries = Get32u(\$dirBuff, 0); my $ifdEnd = $ifdStart + 8 + $entrySize * $numEntries; return undef if $numEntries < 2 or $numEntries > 300 or $ifdEnd > $dirLen; my $hdrBuff = $hdr; my $valBuff = ''; # buffer for value data my $fixup = new Image::ExifTool::Fixup; my $index; for ($index=0; $index<$numEntries; ++$index) { my $entry = $dirStart + $ifdStart + 8 + $entrySize * $index; my $tagID = Get32u($dataPt, $entry); my $size = Get32u($dataPt, $entry+$entrySize-8); my ($formatSize, $formatStr); if ($entrySize == 16) { $formatSize = Get32u($dataPt, $entry+4); $formatStr = $formatName[$formatSize]; unless ($formatStr) { $et->Warn("Possibly invalid $ifdType IFD entry $index",1); delete $$newTags{$tagID}; # make sure we don't try to change this one } } else { # (no format code for SensorCalibration IFD entries) $formatSize = 1; $formatStr = 'undef'; } my $valuePtr = $entry + $entrySize - 4; if ($size > 4) { if ($size > 0x7fffffff) { $et->Error("Invalid size for $ifdType IFD entry $index",1); return undef; } $valuePtr = Get32u($dataPt, $valuePtr); if ($valuePtr + $size > $dirLen) { $et->Error(sprintf("Invalid offset 0x%.4x for $ifdType IFD entry $index",$valuePtr),1); return undef; } $valuePtr += $dirStart; } my $value = substr($$dataPt, $valuePtr, $size); my $tagInfo = $$newTags{$tagID} || $et->GetTagInfo($tagTablePtr, $tagID); if ($$newTags{$tagID}) { $formatStr = $$tagInfo{Format} if $$tagInfo{Format}; my $count = int($size / Image::ExifTool::FormatSize($formatStr)); my $val = ReadValue(\$value, 0, $formatStr, $count, $size); my $nvHash = $et->GetNewValueHash($tagInfo); if ($et->IsOverwriting($nvHash, $val)) { my $newVal = $et->GetNewValue($nvHash); # allow count to change for string and undef types only undef $count if $formatStr eq 'string' or $formatStr eq 'undef'; my $newValue = WriteValue($newVal, $formatStr, $count); if (defined $newValue) { $value = $newValue; $size = length $newValue; $et->VerboseValue("- $dirName:$$tagInfo{Name}", $val); $et->VerboseValue("+ $dirName:$$tagInfo{Name}", $newVal); ++$$et{CHANGED}; } } } elsif ($tagInfo and $$tagInfo{SubDirectory}) { my $subTable = GetTagTable($$tagInfo{SubDirectory}{TagTable}); my %subdirInfo = ( DirName => $$tagInfo{Name}, DataPt => \$value, DataLen => length $value, ); my $newValue = $et->WriteDirectory(\%subdirInfo, $subTable); if (defined $newValue and length($newValue)) { $value = $newValue; $size = length $newValue; } } # add the tagID, possibly format size, and size to this directory entry $dirBuff .= substr($$dataPt, $entry, $entrySize - 8) . Set32u($size); # pad value to an even 4-byte boundary just in case $value .= ("\0" x (4 - ($size & 0x03))) if $size & 0x03 or not $size; if ($size <= 4) { # store value in place of the IFD value pointer (already padded to 4 bytes) $dirBuff .= $value; } elsif ($tagInfo and $$tagInfo{PutFirst}) { # store value immediately after header $dirBuff .= Set32u(length $hdrBuff); $hdrBuff .= $value; } else { # store value at end of value buffer $fixup->AddFixup(length $dirBuff); $dirBuff .= Set32u(length $valBuff); $valBuff .= $value; } } # apply necessary fixup to offsets in PhaseOne directory $$fixup{Shift} = length $hdrBuff; $fixup->ApplyFixup(\$dirBuff); # set pointer to PhaseOneIFD in header Set32u(length($hdrBuff) + length($valBuff), \$hdrBuff, 8); return $hdrBuff . $valBuff . $dirBuff; } #------------------------------------------------------------------------------ # Read Phase One maker notes # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success # Notes: This routine processes both the main PhaseOne IFD type (with 16 bytes # per entry), and the SensorCalibration IFD type (12 bytes per entry) sub ProcessPhaseOne($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos} || 0; my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || $$dirInfo{DataLen} - $dirStart; my $binary = $et->Options('Binary'); my $verbose = $et->Options('Verbose'); my $htmlDump = $$et{HTML_DUMP}; return 0 if $dirLen < 12; unless ($$tagTablePtr{VARS} and $$tagTablePtr{VARS}{ENTRY_SIZE}) { $et->WarnOnce("No ENTRY_SIZE for $$tagTablePtr{TABLE_NAME}"); return undef; } my $entrySize = $$tagTablePtr{VARS}{ENTRY_SIZE}; my $ifdType = $$tagTablePtr{TAG_PREFIX} || 'PhaseOne'; my $hdr = substr($$dataPt, $dirStart, 12); if ($entrySize == 16) { return 0 unless $hdr =~ /^(IIII.waR|MMMMRaw.)/s; } elsif ($hdr !~ /^(IIII\x01\0\0\0|MMMM\0\0\0\x01)/s) { $et->Warn("Unrecognized $ifdType directory version"); return 0; } SetByteOrder(substr($hdr, 0, 2)); # get offset to start of PhaseOne directory my $ifdStart = Get32u(\$hdr, 8); return 0 if $ifdStart + 8 > $dirLen; # get number of entries in PhaseOne directory my $numEntries = Get32u($dataPt, $dirStart + $ifdStart); my $ifdEnd = $ifdStart + 8 + $entrySize * $numEntries; return 0 if $numEntries < 2 or $numEntries > 300 or $ifdEnd > $dirLen; $et->VerboseDir($ifdType, $numEntries); if ($htmlDump) { $et->HDump($dirStart + $dataPos, 8, "$ifdType header"); $et->HDump($dirStart + $dataPos + 8, 4, "$ifdType IFD offset"); $et->HDump($dirStart + $dataPos + $ifdStart, 4, "$ifdType entries", "Entry count: $numEntries"); $et->HDump($dirStart + $dataPos + $ifdStart + 4, 4, '[unused]'); } my $index; for ($index=0; $index<$numEntries; ++$index) { my $entry = $dirStart + $ifdStart + 8 + $entrySize * $index; my $tagID = Get32u($dataPt, $entry); my $size = Get32u($dataPt, $entry+$entrySize-8); my $valuePtr = $entry + $entrySize - 4; my ($formatSize, $formatStr, $value); if ($entrySize == 16) { # (format code only for the 16-byte IFD entry) $formatSize = Get32u($dataPt, $entry+4); $formatStr = $formatName[$formatSize]; unless ($formatStr) { $et->WarnOnce("Unrecognized $ifdType format size $formatSize",1); $formatSize = 1; $formatStr = 'undef'; } } elsif ($size %4) { $formatSize = 1; $formatStr = 'undef'; } else { $formatSize = 4; $formatStr = 'int32s'; } if ($size > 4) { if ($size > 0x7fffffff) { $et->Warn("Invalid size for $ifdType IFD entry $index"); return 0; } $valuePtr = Get32u($dataPt, $valuePtr); if ($valuePtr + $size > $dirLen) { $et->Warn(sprintf("Invalid offset 0x%.4x for $ifdType IFD entry $index",$valuePtr)); return 0; } $valuePtr += $dirStart; } my $tagInfo = $et->GetTagInfo($tagTablePtr, $tagID); if ($tagInfo) { $formatStr = $$tagInfo{Format} if $$tagInfo{Format}; } else { next unless $verbose or $htmlDump; } my $count = int($size / Image::ExifTool::FormatSize($formatStr)); if ($count > 100000 and not $binary) { $value = \ "Binary data $size bytes"; } else { $value = ReadValue($dataPt,$valuePtr,$formatStr,$count,$size); # try to distinguish between the various format types if ($formatStr eq 'int32s') { my ($val) = split ' ', $value; if (defined $val) { # get floating point exponent (has bias of 127) my $exp = ($val & 0x7f800000) >> 23; if ($exp > 120 and $exp < 140) { $formatStr = 'float'; $value = ReadValue($dataPt,$valuePtr,$formatStr,$count,$size); } } } } my %parms = ( DirName => $ifdType, Index => $index, DataPt => $dataPt, DataPos => $dataPos, Size => $size, Start => $valuePtr, Format => $formatStr, Count => $count ); $htmlDump and HtmlDump($et, $tagTablePtr, $tagID, $value, $entry, $entrySize, %parms, Base => $dirStart); $et->HandleTag($tagTablePtr, $tagID, $value, %parms); } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::PhaseOne - Phase One maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to decode Phase One maker notes. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.cybercom.net/~dcoffin/dcraw/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/PhaseOne Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/PhotoCD.pm��������������������������������������������������000644 �000765 �000024 �00000044522 12642461332 021554� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: PhotoCD.pm # # Description: Read Kodak Photo CD Image Pac (PCD) metadata # # Revisions: 2012/05/07 - P. Harvey Created # # References: 1) http://pcdtojpeg.sourceforge.net/ #------------------------------------------------------------------------------ package Image::ExifTool::PhotoCD; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; # (for Composite:ImageSize) $VERSION = '1.01'; sub ProcessExtData($$$); # PhotoCD info %Image::ExifTool::PhotoCD::Main = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, NOTES => 'Tags extracted from Kodak Photo CD Image Pac (PCD) files.', 7 => { Name => 'SpecificationVersion', Format => 'int8u[2]', RawConv => '$val eq "255 255" ? "n/a" : $val', ValueConv => '$val =~ tr/ /./; $val', }, 9 => { Name => 'AuthoringSoftwareRelease', Format => 'int8u[2]', RawConv => '$val eq "255 255" ? "n/a" : $val', ValueConv => '$val =~ tr/ /./; $val', }, 11 => { Name => 'ImageMagnificationDescriptor', Format => 'int8u[2]', ValueConv => '$val =~ tr/ /./; $val', }, 13 => { Name => 'CreateDate', Format => 'int32u', Groups => { 2 => 'Time' }, RawConv => '$val == 0xffffffff ? undef : $val', ValueConv => 'ConvertUnixTime($val,1)', PrintConv => '$self->ConvertDateTime($val)', }, 17 => { Name => 'ModifyDate', Format => 'int32u', Groups => { 2 => 'Time' }, RawConv => '$val == 0xffffffff ? undef : $val', ValueConv => 'ConvertUnixTime($val,1)', PrintConv => '$self->ConvertDateTime($val)', }, 21 => { Name => 'ImageMedium', PrintConv => { 0 => 'Color negative', 1 => 'Color reversal', 2 => 'Color hard copy', 3 => 'Thermal hard copy', 4 => 'Black and white negative', 5 => 'Black and white reversal', 6 => 'Black and white hard copy', 7 => 'Internegative', 8 => 'Synthetic image', }, }, 22 => { Name => 'ProductType', Format => 'string[20]', ValueConv => '$val =~ s/[ \0]+$//; $val', }, 42 => { Name => 'ScannerVendorID', Format => 'string[20]', ValueConv => '$val =~ s/[ \0]+$//; $val', }, 62 => { Name => 'ScannerProductID', Format => 'string[16]', ValueConv => '$val =~ s/[ \0]+$//; $val', }, 78 => { Name => 'ScannerFirmwareVersion', Format => 'string[4]', ValueConv => '$val =~ s/[ \0]+$//; $val', }, 82 => { Name => 'ScannerFirmwareDate', Format => 'string[8]', ValueConv => '$val =~ s/[ \0]+$//; $val', }, 90 => { Name => 'ScannerSerialNumber', Format => 'string[20]', ValueConv => '$val =~ s/[ \0]+$//; $val', }, 110 => { Name => 'ScannerPixelSize', Format => 'undef[2]', ValueConv => 'join(".",unpack("H2H2",$val))', PrintConv => '"$val micrometers"', }, 112 => { Name => 'ImageWorkstationMake', Format => 'string[20]', ValueConv => '$val =~ s/[ \0]+$//; $val', }, 132 => { Name => 'CharacterSet', PrintConv => { 1 => '38 characters ISO 646', 2 => '65 characters ISO 646', 3 => '95 characters ISO 646', 4 => '191 characters ISO 8850-1', 5 => 'ISO 2022', 6 => 'Includes characters not ISO 2375 registered', }, }, 133 => { Name => 'CharacterEscapeSequence', Format => 'undef[32]', Binary => 1, Unknown => 1, }, 165 => { Name => 'PhotoFinisherName', Format => 'string[60]', ValueConv => '$val =~ s/[ \0]+$//; $val', }, 225 => { Name => 'HasSBA', Format => 'undef[3]', Hidden => 1, RawConv => '$val eq "SBA" and $$self{HasSBA} = 1; undef', }, 228 => { Name => 'SceneBalanceAlgorithmRevision', Condition => '$$self{HasSBA}', Format => 'int8u[2]', ValueConv => '$val =~ tr/ /./; $val', }, 230 => { Name => 'SceneBalanceAlgorithmCommand', Condition => '$$self{HasSBA}', PrintConv => { 0 => 'Neutral SBA On, Color SBA On', 1 => 'Neutral SBA Off, Color SBA Off', 2 => 'Neutral SBA On, Color SBA Off', 3 => 'Neutral SBA Off, Color SBA On', }, }, 325 => { Name => 'SceneBalanceAlgorithmFilmID', Condition => '$$self{HasSBA}', Format => 'int16u', PrintConv => { 1 => '3M ScotchColor AT 100', 2 => '3M ScotchColor AT 200', 3 => '3M ScotchColor HR2 400', 7 => '3M Scotch HR 200 Gen 2', 9 => '3M Scotch HR 400 Gen 2', 16 => 'Agfa Agfacolor XRS 400 Gen 1', 17 => 'Agfa Agfacolor XRG/XRS 400', 18 => 'Agfa Agfacolor XRG/XRS 200', 19 => 'Agfa Agfacolor XRS 1000 Gen 2', 20 => 'Agfa Agfacolor XRS 400 Gen 2', 21 => 'Agfa Agfacolor XRS/XRC 100', 26 => 'Fuji Reala 100 (JAPAN)', 27 => 'Fuji Reala 100 Gen 1', 28 => 'Fuji Reala 100 Gen 2', 29 => 'Fuji SHR 400 Gen 2', 30 => 'Fuji Super HG 100', 31 => 'Fuji Super HG 1600 Gen 1', 32 => 'Fuji Super HG 200', 33 => 'Fuji Super HG 400', 34 => 'Fuji Super HG 100 Gen 2', 35 => 'Fuji Super HR 100 Gen 1', 36 => 'Fuji Super HR 100 Gen 2', 37 => 'Fuji Super HR 1600 Gen 2', 38 => 'Fuji Super HR 200 Gen 1', 39 => 'Fuji Super HR 200 Gen 2', 40 => 'Fuji Super HR 400 Gen 1', 43 => 'Fuji NSP 160S (Pro)', 45 => 'Kodak Kodacolor VR 100 Gen 2', 47 => 'Kodak Gold 400 Gen 3', 55 => 'Kodak Ektar 100 Gen 1', 56 => 'Kodak Ektar 1000 Gen 1', 57 => 'Kodak Ektar 125 Gen 1', 58 => 'Kodak Royal Gold 25 RZ', 60 => 'Kodak Gold 1600 Gen 1', 61 => 'Kodak Gold 200 Gen 2', 62 => 'Kodak Gold 400 Gen 2', 65 => 'Kodak Kodacolor VR 100 Gen 1', 66 => 'Kodak Kodacolor VR 1000 Gen 2', 67 => 'Kodak Kodacolor VR 1000 Gen 1', 68 => 'Kodak Kodacolor VR 200 Gen 1', 69 => 'Kodak Kodacolor VR 400 Gen 1', 70 => 'Kodak Kodacolor VR 200 Gen 2', 71 => 'Kodak Kodacolor VRG 100 Gen 1', 72 => 'Kodak Gold 100 Gen 2', 73 => 'Kodak Kodacolor VRG 200 Gen 1', 74 => 'Kodak Gold 400 Gen 1', 87 => 'Kodak Ektacolor Gold 160', 88 => 'Kodak Ektapress 1600 Gen 1 PPC', 89 => 'Kodak Ektapress Gold 100 Gen 1 PPA', 90 => 'Kodak Ektapress Gold 400 PPB-3', 92 => 'Kodak Ektar 25 Professional PHR', 97 => 'Kodak T-Max 100 Professional', 98 => 'Kodak T-Max 3200 Professional', 99 => 'Kodak T-Max 400 Professional', 101 => 'Kodak Vericolor 400 Prof VPH', 102 => 'Kodak Vericolor III Pro', 121 => 'Konika Konica Color SR-G 3200', 122 => 'Konika Konica Color Super SR100', 123 => 'Konika Konica Color Super SR 400', 138 => 'Kodak Gold Unknown', 139 => 'Kodak Unknown Neg A- Normal SBA', 143 => 'Kodak Ektar 100 Gen 2', 147 => 'Kodak Kodacolor CII', 148 => 'Kodak Kodacolor II', 149 => 'Kodak Gold Plus 200 Gen 3', 150 => 'Kodak Internegative +10% Contrast', 151 => 'Agfa Agfacolor Ultra 50', 152 => 'Fuji NHG 400', 153 => 'Agfa Agfacolor XRG 100', 154 => 'Kodak Gold Plus 100 Gen 3', 155 => 'Konika Konica Color Super SR200 Gen 1', 156 => 'Konika Konica Color SR-G 160', 157 => 'Agfa Agfacolor Optima 125', 158 => 'Agfa Agfacolor Portrait 160', 162 => 'Kodak Kodacolor VRG 400 Gen 1', 163 => 'Kodak Gold 200 Gen 1', 164 => 'Kodak Kodacolor VRG 100 Gen 2', 174 => 'Kodak Internegative +20% Contrast', 175 => 'Kodak Internegative +30% Contrast', 176 => 'Kodak Internegative +40% Contrast', 184 => 'Kodak TMax-100 D-76 CI = .40', 185 => 'Kodak TMax-100 D-76 CI = .50', 186 => 'Kodak TMax-100 D-76 CI = .55', 187 => 'Kodak TMax-100 D-76 CI = .70', 188 => 'Kodak TMax-100 D-76 CI = .80', 189 => 'Kodak TMax-100 TMax CI = .40', 190 => 'Kodak TMax-100 TMax CI = .50', 191 => 'Kodak TMax-100 TMax CI = .55', 192 => 'Kodak TMax-100 TMax CI = .70', 193 => 'Kodak TMax-100 TMax CI = .80', 195 => 'Kodak TMax-400 D-76 CI = .40', 196 => 'Kodak TMax-400 D-76 CI = .50', 197 => 'Kodak TMax-400 D-76 CI = .55', 198 => 'Kodak TMax-400 D-76 CI = .70', 214 => 'Kodak TMax-400 D-76 CI = .80', 215 => 'Kodak TMax-400 TMax CI = .40', 216 => 'Kodak TMax-400 TMax CI = .50', 217 => 'Kodak TMax-400 TMax CI = .55', 218 => 'Kodak TMax-400 TMax CI = .70', 219 => 'Kodak TMax-400 TMax CI = .80', 224 => '3M ScotchColor ATG 400/EXL 400', 266 => 'Agfa Agfacolor Optima 200', 267 => 'Konika Impressa 50', 268 => 'Polaroid Polaroid CP 200', 269 => 'Konika Konica Color Super SR200 Gen 2', 270 => 'ILFORD XP2 400', 271 => 'Polaroid Polaroid Color HD2 100', 272 => 'Polaroid Polaroid Color HD2 400', 273 => 'Polaroid Polaroid Color HD2 200', 282 => '3M ScotchColor ATG-1 200', 284 => 'Konika XG 400', 307 => 'Kodak Universal Reversal B/W', 308 => 'Kodak RPC Copy Film Gen 1', 312 => 'Kodak Universal E6', 324 => 'Kodak Gold Ultra 400 Gen 4', 328 => 'Fuji Super G 100', 329 => 'Fuji Super G 200', 330 => 'Fuji Super G 400 Gen 2', 333 => 'Kodak Universal K14', 334 => 'Fuji Super G 400 Gen 1', 366 => 'Kodak Vericolor HC 6329 VHC', 367 => 'Kodak Vericolor HC 4329 VHC', 368 => 'Kodak Vericolor L 6013 VPL', 369 => 'Kodak Vericolor L 4013 VPL', 418 => 'Kodak Ektacolor Gold II 400 Prof', 430 => 'Kodak Royal Gold 1000', 431 => 'Kodak Kodacolor VR 200 / 5093', 432 => 'Kodak Gold Plus 100 Gen 4', 443 => 'Kodak Royal Gold 100', 444 => 'Kodak Royal Gold 400', 445 => 'Kodak Universal E6 auto-balance', 446 => 'Kodak Universal E6 illum. corr.', 447 => 'Kodak Universal K14 auto-balance', 448 => 'Kodak Universal K14 illum. corr.', 449 => 'Kodak Ektar 100 Gen 3 SY', 456 => 'Kodak Ektar 25', 457 => 'Kodak Ektar 100 Gen 3 CX', 458 => 'Kodak Ektapress Plus 100 Prof PJA-1', 459 => 'Kodak Ektapress Gold II 100 Prof', 460 => 'Kodak Pro 100 PRN', 461 => 'Kodak Vericolor HC 100 Prof VHC-2', 462 => 'Kodak Prof Color Neg 100', 463 => 'Kodak Ektar 1000 Gen 2', 464 => 'Kodak Ektapress Plus 1600 Pro PJC-1', 465 => 'Kodak Ektapress Gold II 1600 Prof', 466 => 'Kodak Super Gold 1600 GF Gen 2', 467 => 'Kodak Kodacolor 100 Print Gen 4', 468 => 'Kodak Super Gold 100 Gen 4', 469 => 'Kodak Gold 100 Gen 4', 470 => 'Kodak Gold III 100 Gen 4', 471 => 'Kodak Funtime 100 FA', 472 => 'Kodak Funtime 200 FB', 473 => 'Kodak Kodacolor VR 200 Gen 4', 474 => 'Kodak Gold Super 200 Gen 4', 475 => 'Kodak Kodacolor 200 Print Gen 4', 476 => 'Kodak Super Gold 200 Gen 4', 477 => 'Kodak Gold 200 Gen 4', 478 => 'Kodak Gold III 200 Gen 4', 479 => 'Kodak Gold Ultra 400 Gen 5', 480 => 'Kodak Super Gold 400 Gen 5', 481 => 'Kodak Gold 400 Gen 5', 482 => 'Kodak Gold III 400 Gen 5', 483 => 'Kodak Kodacolor 400 Print Gen 5', 484 => 'Kodak Ektapress Plus 400 Prof PJB-2', 485 => 'Kodak Ektapress Gold II 400 Prof G5', 486 => 'Kodak Pro 400 PPF-2', 487 => 'Kodak Ektacolor Gold II 400 EGP-4', 488 => 'Kodak Ektacolor Gold 400 Prof EGP-4', 489 => 'Kodak Ektapress Gold II Multspd PJM', 490 => 'Kodak Pro 400 MC PMC', 491 => 'Kodak Vericolor 400 Prof VPH-2', 492 => 'Kodak Vericolor 400 Plus Prof VPH-2', 493 => 'Kodak Unknown Neg Product Code 83', 505 => 'Kodak Ektacolor Pro Gold 160 GPX', 508 => 'Kodak Royal Gold 200', 517 => 'Kodak 4050000000', 519 => 'Kodak Gold Plus 100 Gen 5', 520 => 'Kodak Gold 800 Gen 1', 521 => 'Kodak Gold Super 200 Gen 5', 522 => 'Kodak Ektapress Plus 200 Prof', 523 => 'Kodak 4050 E6 auto-balance', 524 => 'Kodak 4050 E6 ilum. corr.', 525 => 'Kodak 4050 K14', 526 => 'Kodak 4050 K14 auto-balance', 527 => 'Kodak 4050 K14 ilum. corr.', 528 => 'Kodak 4050 Reversal B&W', 532 => 'Kodak Advantix 200', 533 => 'Kodak Advantix 400', 534 => 'Kodak Advantix 100', 535 => 'Kodak Ektapress Multspd Prof PJM-2', 536 => 'Kodak Kodacolor VR 200 Gen 5', 537 => 'Kodak Funtime 200 FB Gen 2', 538 => 'Kodak Commercial 200', 539 => 'Kodak Royal Gold 25 Copystand', 540 => 'Kodak Kodacolor DA 100 Gen 5', 545 => 'Kodak Kodacolor VR 400 Gen 2', 546 => 'Kodak Gold 100 Gen 6', 547 => 'Kodak Gold 200 Gen 6', 548 => 'Kodak Gold 400 Gen 6', 549 => 'Kodak Royal Gold 100 Gen 2', 550 => 'Kodak Royal Gold 200 Gen 2', 551 => 'Kodak Royal Gold 400 Gen 2', 552 => 'Kodak Gold Max 800 Gen 2', 554 => 'Kodak 4050 E6 high contrast', 555 => 'Kodak 4050 E6 low saturation high contrast', 556 => 'Kodak 4050 E6 low saturation', 557 => 'Kodak Universal E-6 Low Saturation', 558 => 'Kodak T-Max T400 CN', 563 => 'Kodak Ektapress PJ100', 564 => 'Kodak Ektapress PJ400', 565 => 'Kodak Ektapress PJ800', 567 => 'Kodak Portra 160NC', 568 => 'Kodak Portra 160VC', 569 => 'Kodak Portra 400NC', 570 => 'Kodak Portra 400VC', 575 => 'Kodak Advantix 100-2', 576 => 'Kodak Advantix 200-2', 577 => 'Kodak Advantix Black & White + 400', 578 => 'Kodak Ektapress PJ800-2', }, }, 331 => { Name => 'CopyrightStatus', Condition => '$$self{HasSBA}', RawConv => '$$self{CopyrightStatus} = $val', PrintConv => { 1 => 'Restrictions apply', 0xff => 'Not specified', }, }, 332 => { Name => 'CopyrightFileName', Condition => '$$self{CopyrightStatus} and $$self{CopyrightStatus} == 1', Format => 'string[12]', ValueConv => '$val =~ s/[ \0]+$//; $val', }, 1538 => { Name => 'Orientation', Mask => 0x03, RawConv => '$$self{Orient} = $val', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 270 CW', 2 => 'Rotate 180', 3 => 'Rotate 90 CW', }, }, 1538.1 => { Name => 'ImageWidth', Mask => 0x0c, # 0x00=Base (768x512), 0x04=4Base (1536x1024), 0x08=16Base (3072x2048) ValueConv => '($$self{Orient} & 0x01 ? 512 : 768) * (($val || 2) / 2)', }, 1538.2 => { Name => 'ImageHeight', Mask => 0x0c, ValueConv => '($$self{Orient} & 0x01 ? 768 : 512) * (($val || 2) / 2)', }, 1538.3 => { Name => 'CompressionClass', Mask => 0x60, PrintConv => { 0x00 => 'Class 1 - 35mm film; Pictoral hard copy', 0x20 => 'Class 2 - Large format film', 0x40 => 'Class 3 - Text and graphics, high resolution', 0x60 => 'Class 4 - Text and graphics, high dynamic range', }, }, #1544 => 'InterleaveRatio', #1545 => 'ADPCMResolution', #1546 => { # Name => 'ADPCMMagnificationPanning', # Format => 'int8u[2]', #}, #1548 => 'ADPCMMagnificationFactor', #1549 => { # Name => 'ADPCMDisplayOffset', # Format => 'int8u[2]', #}, #1551 => 'ADPCMTransitionDescriptor', ); #------------------------------------------------------------------------------ # Extract information from a PhotoCD image # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid PhotoCD file sub ProcessPCD($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $buff; return 0 unless $raf->Seek(2048, 0) and $raf->Read($buff, 2048) == 2048 and $buff =~ /^PCD_IPI/; SetByteOrder('MM'); $et->SetFileType(); my %dirInfo = ( DirName => 'PhotoCD', DataPt => \$buff, DataPos => 4096, ); my $tagTablePtr = GetTagTable('Image::ExifTool::PhotoCD::Main'); return $et->ProcessBinaryData(\%dirInfo, $tagTablePtr); } 1; # end __END__ =head1 NAME Image::ExifTool::PhotoCD - Read Kodak Photo CD Image Pac (PCD) metadata =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to extract information from Kodak Photo CD Image Pac (PCD) files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://pcdtojpeg.sourceforge.net/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/PhotoCD Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/PhotoMechanic.pm��������������������������������������������000644 �000765 �000024 �00000020142 12642461332 022765� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: PhotoMechanic.pm # # Description: Read/write Camera Bits Photo Mechanic information # # Revisions: 10/28/2006 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::PhotoMechanic; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; use Image::ExifTool::IPTC; use Image::ExifTool::XMP; $VERSION = '1.04'; sub ProcessPhotoMechanic($$); # color class names my %colorClasses = ( 0 => '0 (None)', 1 => '1 (Winner)', 2 => '2 (Winner alt)', 3 => '3 (Superior)', 4 => '4 (Superior alt)', 5 => '5 (Typical)', 6 => '6 (Typical alt)', 7 => '7 (Extras)', 8 => '8 (Trash)', ); # main tag table IPTC-format records in PhotoMechanic trailer %Image::ExifTool::PhotoMechanic::Main = ( GROUPS => { 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::IPTC::ProcessIPTC, WRITE_PROC => \&Image::ExifTool::IPTC::WriteIPTC, NOTES => q{ The Photo Mechanic trailer contains data in an IPTC-format structure, with soft edit information stored under record number 2. }, 2 => { Name => 'SoftEdit', SubDirectory => { TagTable => 'Image::ExifTool::PhotoMechanic::SoftEdit', }, }, ); # raw/preview crop coordinate conversions my %rawCropConv = ( ValueConv => '$val / 655.36', ValueConvInv => 'int($val * 655.36 + 0.5)', PrintConv => 'sprintf("%.3f%%",$val)', PrintConvInv => '$val=~tr/ %//d; $val', ); # Record 2 -- PhotoMechanic soft edit information %Image::ExifTool::PhotoMechanic::SoftEdit = ( GROUPS => { 2 => 'Image' }, WRITE_PROC => \&Image::ExifTool::IPTC::WriteIPTC, CHECK_PROC => \&Image::ExifTool::IPTC::CheckIPTC, WRITABLE => 1, FORMAT => 'int32s', 209 => { Name => 'RawCropLeft', %rawCropConv }, 210 => { Name => 'RawCropTop', %rawCropConv }, 211 => { Name => 'RawCropRight', %rawCropConv }, 212 => { Name => 'RawCropBottom', %rawCropConv }, 213 => 'ConstrainedCropWidth', 214 => 'ConstrainedCropHeight', 215 => 'FrameNum', 216 => { Name => 'Rotation', PrintConv => { 0 => '0', 1 => '90', 2 => '180', 3 => '270', }, }, 217 => 'CropLeft', 218 => 'CropTop', 219 => 'CropRight', 220 => 'CropBottom', 221 => { Name => 'Tagged', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, 222 => { Name => 'ColorClass', PrintConv => \%colorClasses, }, 223 => 'Rating', 236 => { Name => 'PreviewCropLeft', %rawCropConv }, 237 => { Name => 'PreviewCropTop', %rawCropConv }, 238 => { Name => 'PreviewCropRight', %rawCropConv }, 239 => { Name => 'PreviewCropBottom', %rawCropConv }, ); # PhotoMechanic XMP properties %Image::ExifTool::PhotoMechanic::XMP = ( GROUPS => { 0 => 'XMP', 1 => 'XMP-photomech', 2 => 'Image' }, NAMESPACE => { photomechanic => 'http://ns.camerabits.com/photomechanic/1.0/' }, WRITE_PROC => \&Image::ExifTool::XMP::WriteXMP, WRITABLE => 'string', NOTES => q{ Below is a list of the observed PhotoMechanic XMP tags. The actual namespace prefix is "photomechanic" but ExifTool shortens this in the "XMP-photomech" family 1 group name. }, ColorClass => { Writable => 'integer', PrintConv => \%colorClasses, }, CountryCode => { Avoid => 1, Groups => { 2 => 'Location' } }, EditStatus => { }, PMVersion => { }, Prefs => { Notes => 'format is "Tagged:0, ColorClass:1, Rating:2, FrameNum:3"', PrintConv => q{ $val =~ s[\s*(\d+):\s*(\d+):\s*(\d+):\s*(\S*)] [Tagged:$1, ColorClass:$2, Rating:$3, FrameNum:$4]; return $val; }, PrintConvInv => q{ $val =~ s[Tagged:\s*(\d+).*ColorClass:\s*(\d+).*Rating:\s*(\d+).*FrameNum:\s*(\S*)] [$1:$2:$3:$4]is; return $val; }, }, Tagged => { Writable => 'boolean', PrintConv => { False => 'No', True => 'Yes' } }, TimeCreated => { Avoid => 1, Groups => { 2 => 'Time' }, Shift => 'Time', ValueConv => 'Image::ExifTool::Exif::ExifTime($val)', ValueConvInv => 'Image::ExifTool::IPTC::IptcTime($val)', }, ); #------------------------------------------------------------------------------ # Read/write PhotoMechanic information in a file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this file didn't contain PhotoMechanic information # - updates DataPos to point to start of PhotoMechanic information # - updates DirLen to trailer length sub ProcessPhotoMechanic($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $offset = $$dirInfo{Offset} || 0; my $outfile = $$dirInfo{OutFile}; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my $rtnVal = 0; my ($buff, $footer); for (;;) { # read and validate trailer footer (last 12 bytes) last unless $raf->Seek(-12-$offset, 2) and $raf->Read($footer, 12) == 12; last unless $footer =~ /cbipcbbl$/; my $size = unpack('N', $footer); if ($size & 0x80000000 or not $raf->Seek(-$size-12, 1)) { $et->Warn('Bad PhotoMechanic trailer'); last; } unless ($raf->Read($buff, $size) == $size) { $et->Warn('Error reading PhotoMechanic trailer'); last; } $rtnVal = 1; # we read the trailer successfully # set variables returned in dirInfo hash $$dirInfo{DataPos} = $raf->Tell() - $size; $$dirInfo{DirLen} = $size + 12; my %dirInfo = ( DataPt => \$buff, DataPos => $$dirInfo{DataPos}, DirStart => 0, DirLen => $size, Parent => 'PhotoMechanic', ); my $tagTablePtr = GetTagTable('Image::ExifTool::PhotoMechanic::Main'); if (not $outfile) { # extract trailer information $et->DumpTrailer($dirInfo) if $verbose or $$et{HTML_DUMP}; $et->ProcessDirectory(\%dirInfo, $tagTablePtr); } elsif ($$et{DEL_GROUP}{PhotoMechanic}) { # delete the trailer $verbose and print $out " Deleting PhotoMechanic trailer\n"; ++$$et{CHANGED}; } else { # rewrite the trailer my $newPt; my $newBuff = $et->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $newBuff) { $newPt = \$newBuff; # write out the modified trailer my $pad = 0x800 - length($newBuff); if ($pad > 0 and not $et->Options('Compact')) { # pad out to 2kB like PhotoMechanic does $newBuff .= "\0" x $pad; } # generate new footer $footer = pack('N', length($$newPt)) . 'cbipcbbl'; } else { $newPt = \$buff; # just copy existing trailer } # write out the trailer Write($outfile, $$newPt, $footer) or $rtnVal = -1; } last; } return $rtnVal; } 1; # end __END__ =head1 NAME Image::ExifTool::PhotoMechanic - Read/write Photo Mechanic information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read and write information written by the Camera Bits Photo Mechanic software. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Many thanks to the great support provided by Camera Bits, and in particular for the valuable exchanges with Kirk Baker. Based on this experience, I can say that the technical support offered by Camera Bits is second to none. =head1 SEE ALSO L<Image::ExifTool::TagNames/PhotoMechanic Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Photoshop.pm������������������������������������������������000644 �000765 �000024 �00000057014 12642461332 022237� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Photoshop.pm # # Description: Read/write Photoshop IRB meta information # # Revisions: 02/06/2004 - P. Harvey Created # 02/25/2004 - P. Harvey Added hack for problem with old photoshops # 10/04/2004 - P. Harvey Added a bunch of tags (ref Image::MetaData::JPEG) # but left most of them commented out until I have enough # information to write PrintConv routines for them to # display something useful # 07/08/2005 - P. Harvey Added support for reading PSD files # 01/07/2006 - P. Harvey Added PSD write support # 11/04/2006 - P. Harvey Added handling of resource name # # References: 1) http://www.fine-view.com/jp/lab/doc/ps6ffspecsv2.pdf # 2) http://www.ozhiker.com/electronics/pjmt/jpeg_info/irb_jpeg_qual.html # 3) Matt Mueller private communication (tests with PS CS2) # 4) http://www.fileformat.info/format/psd/egff.htm # 5) http://www.telegraphics.com.au/svn/psdparse/trunk/resources.c # 6) http://libpsd.graphest.com/files/Photoshop%20File%20Formats.pdf # 7) http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/ #------------------------------------------------------------------------------ package Image::ExifTool::Photoshop; use strict; use vars qw($VERSION $AUTOLOAD $iptcDigestInfo); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.47'; sub ProcessPhotoshop($$$); sub WritePhotoshop($$$); # map of where information is stored in PSD image my %psdMap = ( IPTC => 'Photoshop', XMP => 'Photoshop', EXIFInfo => 'Photoshop', IFD0 => 'EXIFInfo', IFD1 => 'IFD0', ICC_Profile => 'Photoshop', ExifIFD => 'IFD0', GPS => 'IFD0', SubIFD => 'IFD0', GlobParamIFD => 'IFD0', PrintIM => 'IFD0', InteropIFD => 'ExifIFD', MakerNotes => 'ExifIFD', ); # tag information for PhotoshopThumbnail and PhotoshopBGRThumbnail my %thumbnailInfo = ( Writable => 'undef', Protected => 1, RawConv => 'my $img=substr($val,0x1c); $self->ValidateImage(\$img,$tag)', ValueConvInv => q{ my $et = new Image::ExifTool; my @tags = qw{ImageWidth ImageHeight FileType}; my $info = $et->ImageInfo(\$val, @tags); my ($w, $h, $type) = @$info{@tags}; $w and $h and $type eq 'JPEG' or warn("Not a valid JPEG image\n"), return undef; my $wbytes = int(($w * 24 + 31) / 32) * 4; return pack('N6n2', 1, $w, $h, $wbytes, $wbytes * $h, length($val), 24, 1) . $val; }, ); # Photoshop APP13 tag table # (set Unknown flag for information we don't want to display normally) %Image::ExifTool::Photoshop::Main = ( GROUPS => { 2 => 'Image' }, PROCESS_PROC => \&ProcessPhotoshop, WRITE_PROC => \&WritePhotoshop, 0x03e8 => { Unknown => 1, Name => 'Photoshop2Info' }, 0x03e9 => { Unknown => 1, Name => 'MacintoshPrintInfo' }, 0x03ea => { Unknown => 1, Name => 'XMLData', Binary => 1 }, #PH 0x03eb => { Unknown => 1, Name => 'Photoshop2ColorTable' }, 0x03ed => { Name => 'ResolutionInfo', SubDirectory => { TagTable => 'Image::ExifTool::Photoshop::Resolution', }, }, 0x03ee => { Name => 'AlphaChannelsNames', ValueConv => 'Image::ExifTool::Photoshop::ConvertPascalString($self,$val)', }, 0x03ef => { Unknown => 1, Name => 'DisplayInfo' }, 0x03f0 => { Unknown => 1, Name => 'PStringCaption' }, 0x03f1 => { Unknown => 1, Name => 'BorderInformation' }, 0x03f2 => { Unknown => 1, Name => 'BackgroundColor' }, 0x03f3 => { Unknown => 1, Name => 'PrintFlags', Format => 'int8u' }, 0x03f4 => { Unknown => 1, Name => 'BW_HalftoningInfo' }, 0x03f5 => { Unknown => 1, Name => 'ColorHalftoningInfo' }, 0x03f6 => { Unknown => 1, Name => 'DuotoneHalftoningInfo' }, 0x03f7 => { Unknown => 1, Name => 'BW_TransferFunc' }, 0x03f8 => { Unknown => 1, Name => 'ColorTransferFuncs' }, 0x03f9 => { Unknown => 1, Name => 'DuotoneTransferFuncs' }, 0x03fa => { Unknown => 1, Name => 'DuotoneImageInfo' }, 0x03fb => { Unknown => 1, Name => 'EffectiveBW', Format => 'int8u' }, 0x03fc => { Unknown => 1, Name => 'ObsoletePhotoshopTag1' }, 0x03fd => { Unknown => 1, Name => 'EPSOptions' }, 0x03fe => { Unknown => 1, Name => 'QuickMaskInfo' }, 0x03ff => { Unknown => 1, Name => 'ObsoletePhotoshopTag2' }, 0x0400 => { Unknown => 1, Name => 'TargetLayerID', Format => 'int16u' }, # (LayerStateInfo) 0x0401 => { Unknown => 1, Name => 'WorkingPath' }, 0x0402 => { Unknown => 1, Name => 'LayersGroupInfo', Format => 'int16u' }, 0x0403 => { Unknown => 1, Name => 'ObsoletePhotoshopTag3' }, 0x0404 => { Name => 'IPTCData', SubDirectory => { DirName => 'IPTC', TagTable => 'Image::ExifTool::IPTC::Main', }, }, 0x0405 => { Unknown => 1, Name => 'RawImageMode' }, 0x0406 => { #2 Name => 'JPEG_Quality', SubDirectory => { TagTable => 'Image::ExifTool::Photoshop::JPEG_Quality', }, }, 0x0408 => { Unknown => 1, Name => 'GridGuidesInfo' }, 0x0409 => { Name => 'PhotoshopBGRThumbnail', Notes => 'this is a JPEG image, but in BGR format instead of RGB', %thumbnailInfo, Groups => { 2 => 'Preview' }, }, 0x040a => { Name => 'CopyrightFlag', Writable => 'int8u', Groups => { 2 => 'Author' }, ValueConv => 'join(" ",unpack("C*", $val))', ValueConvInv => 'pack("C*",split(" ",$val))', PrintConv => { #3 0 => 'False', 1 => 'True', }, }, 0x040b => { Name => 'URL', Writable => 'string', Groups => { 2 => 'Author' }, }, 0x040c => { Name => 'PhotoshopThumbnail', %thumbnailInfo, Groups => { 2 => 'Preview' }, }, 0x040d => { Name => 'GlobalAngle', Writable => 'int32u', ValueConv => 'unpack("N",$val)', ValueConvInv => 'pack("N",$val)', }, 0x040e => { Unknown => 1, Name => 'ColorSamplersResource' }, 0x040f => { Name => 'ICC_Profile', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main', }, }, 0x0410 => { Unknown => 1, Name => 'Watermark', Format => 'int8u' }, 0x0411 => { Unknown => 1, Name => 'ICC_Untagged', Format => 'int8u' }, 0x0412 => { Unknown => 1, Name => 'EffectsVisible', Format => 'int8u' }, 0x0413 => { Unknown => 1, Name => 'SpotHalftone' }, 0x0414 => { Unknown => 1, Name => 'IDsBaseValue', Description => 'IDs Base Value', Format => 'int32u' }, 0x0415 => { Unknown => 1, Name => 'UnicodeAlphaNames' }, 0x0416 => { Unknown => 1, Name => 'IndexedColourTableCount', Format => 'int16u' }, 0x0417 => { Unknown => 1, Name => 'TransparentIndex', Format => 'int16u' }, 0x0419 => { Name => 'GlobalAltitude', Writable => 'int32u', ValueConv => 'unpack("N",$val)', ValueConvInv => 'pack("N",$val)', }, 0x041a => { Unknown => 1, Name => 'Slices' }, 0x041b => { Unknown => 1, Name => 'WorkflowURL' }, 0x041c => { Unknown => 1, Name => 'JumpToXPEP' }, 0x041d => { Unknown => 1, Name => 'AlphaIdentifiers' }, 0x041e => { Unknown => 1, Name => 'URL_List' }, 0x0421 => { Unknown => 1, Name => 'VersionInfo' }, 0x0422 => { Name => 'EXIFInfo', #PH (Found in EPS and PSD files) SubDirectory => { TagTable=> 'Image::ExifTool::Exif::Main', ProcessProc => \&Image::ExifTool::ProcessTIFF, WriteProc => \&Image::ExifTool::WriteTIFF, }, }, 0x0423 => { Unknown => 1, Name => 'ExifInfo2', Binary => 1 }, #5 0x0424 => { Name => 'XMP', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main', }, }, 0x0425 => { Name => 'IPTCDigest', Writable => 'string', Protected => 1, Notes => q{ this tag indicates provides a way for XMP-aware applications to indicate that the XMP is synchronized with the IPTC. When writing, special values of "new" and "old" represent the digests of the IPTC from the edited and original files respectively, and are undefined if the IPTC does not exist in the respective file. Set this to "new" as an indication that the XMP is synchronized with the IPTC }, # also note the 'new' feature requires that the IPTC comes before this tag is written ValueConv => 'unpack("H*", $val)', ValueConvInv => q{ if (lc($val) eq 'new' or lc($val) eq 'old') { { local $SIG{'__WARN__'} = sub { }; return lc($val) if eval { require Digest::MD5 }; } warn "Digest::MD5 must be installed\n"; return undef; } return pack('H*', $val) if $val =~ /^[0-9a-f]{32}$/i; warn "Value must be 'new', 'old' or 32 hexadecimal digits\n"; return undef; } }, 0x0426 => { Unknown => 1, Name => 'PrintScale' }, #5 0x0428 => { Unknown => 1, Name => 'PixelAspectRatio' }, #5 0x0429 => { Unknown => 1, Name => 'LayerComps' }, #5 0x042a => { Unknown => 1, Name => 'AlternateDuotoneColors' }, #5 0x042b => { Unknown => 1, Name => 'AlternateSpotColors' }, #5 0x042d => { #7 Name => 'LayerSelectionIDs', Description => 'Layer Selection IDs', Unknown => 1, ValueConv => q{ my ($n, @a) = unpack("nN*",$val); $#a = $n - 1 if $n > @a; return join(' ', @a); }, }, 0x042e => { Unknown => 1, Name => 'HDRToningInfo' }, #7 0x042f => { Unknown => 1, Name => 'PrintInfo' }, #7 0x0430 => { Unknown => 1, Name => 'LayerGroupsEnabledID', Format => 'int8u' }, #7 0x0431 => { Unknown => 1, Name => 'ColorSamplersResource2' }, #7 0x0432 => { Unknown => 1, Name => 'MeasurementScale' }, #7 0x0433 => { Unknown => 1, Name => 'TimelineInfo' }, #7 0x0434 => { Unknown => 1, Name => 'SheetDisclosure' }, #7 0x0435 => { Unknown => 1, Name => 'DisplayInfo' }, #7 0x0436 => { Unknown => 1, Name => 'OnionSkins' }, #7 0x0438 => { Unknown => 1, Name => 'CountInfo' }, #7 0x043a => { Unknown => 1, Name => 'PrintInfo2' }, #7 0x043b => { Unknown => 1, Name => 'PrintStyle' }, #7 0x043c => { Unknown => 1, Name => 'MacintoshNSPrintInfo' }, #7 0x043d => { Unknown => 1, Name => 'WindowsDEVMODE' }, #7 0x043e => { Unknown => 1, Name => 'AutoSaveFilePath' }, #7 0x043f => { Unknown => 1, Name => 'AutoSaveFormat' }, #7 0x0440 => { Unknown => 1, Name => 'PathSelectionState' }, #7 # 0x07d0-0x0bb6 Path information 0x0bb7 => { Name => 'ClippingPathName', # convert from a Pascal string (ignoring 6 bytes of unknown data after string) ValueConv => q{ my $len = ord($val); $val = substr($val, 0, $len+1) if $len < length($val); return Image::ExifTool::Photoshop::ConvertPascalString($self,$val); }, }, 0x0bb8 => { Unknown => 1, Name => 'OriginPathInfo' }, #7 # 0x0fa0-0x1387 - plug-in resources (ref 7) 0x1b58 => { Unknown => 1, Name => 'ImageReadyVariables' }, #7 0x1b59 => { Unknown => 1, Name => 'ImageReadyDataSets' }, #7 0x1f40 => { Unknown => 1, Name => 'LightroomWorkflow' }, #7 0x2710 => { Unknown => 1, Name => 'PrintFlagsInfo' }, ); # Photoshop JPEG quality record (ref 2) %Image::ExifTool::Photoshop::JPEG_Quality = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int16s', GROUPS => { 2 => 'Image' }, 0 => { Name => 'PhotoshopQuality', Writable => 1, PrintConv => '$val + 4', PrintConvInv => '$val - 4', }, 1 => { Name => 'PhotoshopFormat', PrintConv => { 0x0000 => 'Standard', 0x0001 => 'Optimised', 0x0101 => 'Progressive', }, }, 2 => { Name => 'ProgressiveScans', PrintConv => { 1 => '3 Scans', 2 => '4 Scans', 3 => '5 Scans', }, }, ); # Photoshop resolution information #PH %Image::ExifTool::Photoshop::Resolution = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int16u', FIRST_ENTRY => 0, WRITABLE => 1, GROUPS => { 2 => 'Image' }, 0 => { Name => 'XResolution', Format => 'int32u', Priority => 0, ValueConv => '$val / 0x10000', ValueConvInv => 'int($val * 0x10000 + 0.5)', PrintConv => 'int($val * 100 + 0.5) / 100', PrintConvInv => '$val', }, 2 => { Name => 'DisplayedUnitsX', PrintConv => { 1 => 'inches', 2 => 'cm', }, }, 4 => { Name => 'YResolution', Format => 'int32u', Priority => 0, ValueConv => '$val / 0x10000', ValueConvInv => 'int($val * 0x10000 + 0.5)', PrintConv => 'int($val * 100 + 0.5) / 100', PrintConvInv => '$val', }, 6 => { Name => 'DisplayedUnitsY', PrintConv => { 1 => 'inches', 2 => 'cm', }, }, ); # Photoshop PSD file header %Image::ExifTool::Photoshop::Header = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int16u', GROUPS => { 2 => 'Image' }, NOTES => 'This information is found in the PSD file header.', 6 => 'NumChannels', 7 => { Name => 'ImageHeight', Format => 'int32u' }, 9 => { Name => 'ImageWidth', Format => 'int32u' }, 11 => 'BitDepth', 12 => { Name => 'ColorMode', PrintConvColumns => 2, PrintConv => { 0 => 'Bitmap', 1 => 'Grayscale', 2 => 'Indexed', 3 => 'RGB', 4 => 'CMYK', 7 => 'Multichannel', 8 => 'Duotone', 9 => 'Lab', }, }, ); # tags for unknown resource types %Image::ExifTool::Photoshop::Unknown = ( GROUPS => { 2 => 'Unknown' }, ); # define reference to IPTCDigest tagInfo hash for convenience $iptcDigestInfo = $Image::ExifTool::Photoshop::Main{0x0425}; #------------------------------------------------------------------------------ # AutoLoad our writer routines when necessary # sub AUTOLOAD { return Image::ExifTool::DoAutoLoad($AUTOLOAD, @_); } #------------------------------------------------------------------------------ # Convert pascal string(s) to something we can use # Inputs: 1) Pascal string data # Returns: Strings, concatenated with ', ' sub ConvertPascalString($$) { my ($et, $inStr) = @_; my $outStr = ''; my $len = length($inStr); my $i=0; while ($i < $len) { my $n = ord(substr($inStr, $i, 1)); last if $i + $n >= $len; $i and $outStr .= ', '; $outStr .= substr($inStr, $i+1, $n); $i += $n + 1; } my $charset = $et->Options('CharsetPhotoshop') || 'Latin'; return $et->Decode($outStr, $charset); } #------------------------------------------------------------------------------ # Process Photoshop APP13 record # Inputs: 0) ExifTool object reference, 1) Reference to directory information # 2) Tag table reference # Returns: 1 on success sub ProcessPhotoshop($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $pos = $$dirInfo{DirStart}; my $dirEnd = $pos + $$dirInfo{DirLen}; my $verbose = $et->Options('Verbose'); my $success = 0; SetByteOrder('MM'); # Photoshop is always big-endian $verbose and $et->VerboseDir('Photoshop', 0, $$dirInfo{DirLen}); # scan through resource blocks: # Format: 0) Type, 4 bytes - '8BIM' (or the rare 'PHUT', 'DCSR' or 'AgHg') # 1) TagID,2 bytes # 2) Name, pascal string padded to even no. bytes # 3) Size, 4 bytes - N # 4) Data, N bytes while ($pos + 8 < $dirEnd) { my $type = substr($$dataPt, $pos, 4); my ($ttPtr, $extra, $val, $name); if ($type eq '8BIM') { $ttPtr = $tagTablePtr; } elsif ($type =~ /^(PHUT|DCSR|AgHg)$/) { $ttPtr = GetTagTable('Image::ExifTool::Photoshop::Unknown'); } else { $type =~ s/([^\w])/sprintf("\\x%.2x",ord($1))/ge; $et->Warn(qq{Bad Photoshop IRB resource "$type"}); last; } my $tag = Get16u($dataPt, $pos + 4); $pos += 6; # point to start of name my $nameLen = Get8u($dataPt, $pos); my $namePos = ++$pos; # skip resource block name (pascal string, padded to an even # of bytes) $pos += $nameLen; ++$pos unless $nameLen & 0x01; if ($pos + 4 > $dirEnd) { $et->Warn("Bad Photoshop resource block"); last; } my $size = Get32u($dataPt, $pos); $pos += 4; if ($size + $pos > $dirEnd) { $et->Warn("Bad Photoshop resource data size $size"); last; } $success = 1; if ($nameLen) { $name = substr($$dataPt, $namePos, $nameLen); $extra = qq{, Name="$name"}; } else { $name = ''; } my $tagInfo = $et->GetTagInfo($ttPtr, $tag); # append resource name to value if requested (braced by "/#...#/") if ($tagInfo and defined $$tagInfo{SetResourceName} and $$tagInfo{SetResourceName} eq '1' and $name !~ m{/#}) { $val = substr($$dataPt, $pos, $size) . '/#' . $name . '#/'; } $et->HandleTag($ttPtr, $tag, $val, TagInfo => $tagInfo, Extra => $extra, DataPt => $dataPt, DataPos => $$dirInfo{DataPos}, Size => $size, Start => $pos, Parent => $$dirInfo{DirName}, ); $size += 1 if $size & 0x01; # size is padded to an even # bytes $pos += $size; } return $success; } #------------------------------------------------------------------------------ # extract information from Photoshop PSD file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 if this was a valid PSD file, -1 on write error sub ProcessPSD($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $outfile = $$dirInfo{OutFile}; my ($data, $err, $tagTablePtr); $raf->Read($data, 30) == 30 or return 0; $data =~ /^8BPS\0([\x01\x02])/ or return 0; SetByteOrder('MM'); $et->SetFileType($1 eq "\x01" ? 'PSD' : 'PSB'); # set the FileType tag my %dirInfo = ( DataPt => \$data, DirStart => 0, DirName => 'Photoshop', ); my $len = Get32u(\$data, 26); if ($outfile) { Write($outfile, $data) or $err = 1; $raf->Read($data, $len) == $len or return -1; Write($outfile, $data) or $err = 1; # write color mode data # initialize map of where things are written $et->InitWriteDirs(\%psdMap); } else { # process the header $tagTablePtr = GetTagTable('Image::ExifTool::Photoshop::Header'); $dirInfo{DirLen} = 30; $et->ProcessDirectory(\%dirInfo, $tagTablePtr); $raf->Seek($len, 1) or $err = 1; # skip over color mode data } $raf->Read($data, 4) == 4 or $err = 1; $len = Get32u(\$data, 0); $raf->Read($data, $len) == $len or $err = 1; $tagTablePtr = GetTagTable('Image::ExifTool::Photoshop::Main'); $dirInfo{DirLen} = $len; my $rtnVal = 1; if ($outfile) { # rewrite IRB resources $data = WritePhotoshop($et, \%dirInfo, $tagTablePtr); if ($data) { $len = Set32u(length $data); Write($outfile, $len, $data) or $err = 1; # look for trailer and edit if necessary my $trailInfo = Image::ExifTool::IdentifyTrailer($raf); if ($trailInfo) { my $tbuf = ''; $$trailInfo{OutFile} = \$tbuf; # rewrite trailer(s) # rewrite all trailers to buffer if ($et->ProcessTrailers($trailInfo)) { my $copyBytes = $$trailInfo{DataPos} - $raf->Tell(); if ($copyBytes >= 0) { # copy remaining PSD file up to start of trailer while ($copyBytes) { my $n = ($copyBytes > 65536) ? 65536 : $copyBytes; $raf->Read($data, $n) == $n or $err = 1; Write($outfile, $data) or $err = 1; $copyBytes -= $n; } # write the trailer (or not) $et->WriteTrailerBuffer($trailInfo, $outfile) or $err = 1; } else { $et->Warn('Overlapping trailer'); undef $trailInfo; } } else { undef $trailInfo; } } unless ($trailInfo) { # copy over the rest of the file while ($raf->Read($data, 65536)) { Write($outfile, $data) or $err = 1; } } } else { $err = 1; } $rtnVal = -1 if $err; } elsif ($err) { $et->Warn('File format error'); } else { ProcessPhotoshop($et, \%dirInfo, $tagTablePtr); # process trailers if they exist my $trailInfo = Image::ExifTool::IdentifyTrailer($raf); $et->ProcessTrailers($trailInfo) if $trailInfo; } return $rtnVal; } 1; # end __END__ =head1 NAME Image::ExifTool::Photoshop - Read/write Photoshop IRB meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION Photoshop writes its own format of meta information called a Photoshop IRB resource which is located in the APP13 record of JPEG files. This module contains the definitions to read this information. =head1 NOTES Photoshop IRB blocks may have an associated resource name. These names are usually just an empty string, but if not empty they are displayed in the verbose level 2 (or greater) output. A special C<SetResourceName> flag may be set to '1' in the tag information hash to cause the resource name to be appended to the value when extracted. If this is done, the returned value has the form "VALUE/#NAME#/". When writing, the writer routine looks for this syntax (if C<SetResourceName> is defined), and and uses the embedded name to set the name of the new resource. This allows the resource names to be preserved when copying Photoshop information via user-defined tags. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.fine-view.com/jp/lab/doc/ps6ffspecsv2.pdf> =item L<http://www.ozhiker.com/electronics/pjmt/jpeg_info/irb_jpeg_qual.html> =item L<http://www.fileformat.info/format/psd/egff.htm> =item L<http://libpsd.graphest.com/files/Photoshop%20File%20Formats.pdf> =item L<http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Photoshop Tags>, L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::MetaData::JPEG(3pm)|Image::MetaData::JPEG> =cut ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/PICT.pm�����������������������������������������������������000644 �000765 �000024 �00000102317 12642461330 021006� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: PICT.pm # # Description: Read PICT meta information # # Revisions: 10/10/2005 - P. Harvey Created # # Notes: Extraction of PICT opcodes is still experimental # # - size difference in PixPat color table?? (imagemagick reads only 1 long per entry) # - other differences in the way imagemagick reads 16-bit images # # References: 1) http://developer.apple.com/documentation/mac/QuickDraw/QuickDraw-2.html # 2) http://developer.apple.com/documentation/QuickTime/INMAC/QT/iqImageCompMgr.a.htm #------------------------------------------------------------------------------ package Image::ExifTool::PICT; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.05'; sub ReadPictValue($$$;$); my ($vers, $extended); # PICT version number, and extended flag my ($verbose, $out, $indent); # used in verbose mode # ranges of reserved opcodes. # opcodes at the start of each range must be defined in the tag table my @reserved = ( 0x0017 => 0x0019, 0x0024 => 0x0027, 0x0035 => 0x0037, 0x003d => 0x003f, 0x0045 => 0x0047, 0x004d => 0x004f, 0x0055 => 0x0057, 0x005d => 0x005f, 0x0065 => 0x0067, 0x006d => 0x006f, 0x0075 => 0x0077, 0x007d => 0x007f, 0x0085 => 0x0087, 0x008d => 0x008f, 0x0092 => 0x0097, 0x00a2 => 0x00af, 0x00b0 => 0x00cf, 0x00d0 => 0x00fe, 0x0100 => 0x01ff, 0x0300 => 0x0bfe, 0x0c01 => 0x7eff, 0x7f00 => 0x7fff, 0x8000 => 0x80ff, 0x8100 => 0x81ff, 0x8201 => 0xffff, ); # Apple data structures in PICT images my %structs = ( Arc => [ rect => 'Rect', startAng => 'int16s', arcAng => 'int16s', ], BitMap => [ # (no baseAddr) rowBytes => 'int16u', bounds => 'Rect', ], # BitsRect data for PICT version 1 BitsRect1 => [ bitMap => 'BitMap', srcRect => 'Rect', dstRect => 'Rect', mode => 'int16u', dataSize => 'int16u', bitData => 'binary[$val{dataSize}]', ], # BitsRect data for PICT version 2 BitsRect2 => [ pixMap => 'PixMap', colorTable => 'ColorTable', srcRect => 'Rect', dstRect => 'Rect', mode => 'int16u', pixData => \ 'GetPixData($val{pixMap}, $raf)', ], # BitsRgn data for PICT version 1 BitsRgn1 => [ bitMap => 'BitMap', srcRect => 'Rect', dstRect => 'Rect', mode => 'int16u', maskRgn => 'Rgn', dataSize => 'int16u', bitData => 'binary[$val{dataSize}]', ], # BitsRgn data for PICT version 2 BitsRgn2 => [ pixMap => 'PixMap', colorTable => 'ColorTable', srcRect => 'Rect', dstRect => 'Rect', mode => 'int16u', maskRgn => 'Rgn', pixData => \ 'GetPixData($val{pixMap}, $raf)', ], ColorSpec => [ value => 'int16u', rgb => 'RGBColor', ], ColorTable => [ ctSeed => 'int32u', ctFlags => 'int16u', ctSize => 'int16u', ctTable => 'ColorSpec[$val{ctSize}+1]', ], # http://developer.apple.com/documentation/QuickTime/INMAC/QT/iqImageCompMgr.a.htm CompressedQuickTime => [ size => 'int32u', # size NOT including size word version => 'int16u', matrix => 'int32u[9]', matteSize => 'int32u', matteRect => 'Rect', mode => 'int16u', srcRect => 'Rect', accuracy => 'int32u', maskSize => 'int32u', matteDescr => 'Int32uData[$val{matteSize} ? 1 : 0]', matteData => 'int8u[$val{matteSize}]', maskRgn => 'int8u[$val{maskSize}]', imageDescr => 'ImageDescription', # size should be $val{imageDescr}->{dataSize}, but this is unreliable imageData => q{binary[$val{size} - 68 - $val{maskSize} - $val{imageDescr}->{size} - ($val{matteSize} ? $val{mattSize} + $val{matteDescr}->{size} : 0)] }, ], DirectBitsRect => [ baseAddr => 'int32u', pixMap => 'PixMap', srcRect => 'Rect', dstRect => 'Rect', mode => 'int16u', pixData => \ 'GetPixData($val{pixMap}, $raf)', ], DirectBitsRgn => [ baseAddr => 'int32u', pixMap => 'PixMap', srcRect => 'Rect', dstRect => 'Rect', mode => 'int16u', maskRgn => 'Rgn', pixData => \ 'GetPixData($val{pixMap}, $raf)', ], # http://developer.apple.com/technotes/qd/qd_01.html FontName => [ size => 'int16u', # size NOT including size word oldFontID => 'int16u', nameLen => 'int8u', fontName => 'string[$val{nameLen}]', padding => 'binary[$val{size} - $val{nameLen} - 3]', ], # http://developer.apple.com/documentation/QuickTime/APIREF/imagedescription.htm ImageDescription => [ size => 'int32u', # size INCLUDING size word cType => 'string[4]', res1 => 'int32u', res2 => 'int16u', dataRefIndex => 'int16u', version => 'int16u', revision => 'int16u', vendor => 'string[4]', temporalQuality => 'int32u', quality => 'int32u', width => 'int16u', height => 'int16u', hRes => 'fixed32u', vRes => 'fixed32u', dataSize => 'int32u', frameCount => 'int16u', nameLen => 'int8u', compressor => 'string[31]', depth => 'int16u', clutID => 'int16u', clutData => 'binary[$val{size}-86]', ], Int8uText => [ val => 'int8u', count => 'int8u', text => 'string[$val{count}]', ], Int8u2Text => [ val => 'int8u[2]', count => 'int8u', text => 'string[$val{count}]', ], Int16Data => [ size => 'int16u', # size NOT including size word data => 'int8u[$val{size}]', ], Int32uData => [ size => 'int32u', # size NOT including size word data => 'int8u[$val{size}]', ], LongComment => [ kind => 'int16u', size => 'int16u', # size of data only data => 'binary[$val{size}]', ], PixMap => [ # Note: does not contain baseAddr # (except for DirectBits opcodes in which it is loaded separately) rowBytes => 'int16u', bounds => 'Rect', pmVersion => 'int16u', packType => 'int16u', packSize => 'int32u', hRes => 'fixed32s', vRes => 'fixed32s', pixelType => 'int16u', pixelSize => 'int16u', cmpCount => 'int16u', cmpSize => 'int16u', planeBytes => 'int32u', pmTable => 'int32u', pmReserved => 'int32u', ], PixPat => [ patType => 'int16u', # 1 = non-dithered, 2 = dithered pat1Data => 'int8u[8]', # dithered PixPat has RGB entry RGB => 'RGBColor[$val{patType} == 2 ? 1 : 0]', # non-dithered PixPat has other stuff instead nonDithered=> 'PixPatNonDithered[$val{patType} == 2 ? 0 : 1]', ], PixPatNonDithered => [ pixMap => 'PixMap', colorTable => 'ColorTable', pixData => \ 'GetPixData($val{pixMap}, $raf)', ], Point => [ v => 'int16s', h => 'int16s', ], PointText => [ txLoc => 'Point', count => 'int8u', text => 'string[$val{count}]', ], Polygon => [ polySize => 'int16u', polyBBox => 'Rect', polyPoints => 'int16u[($val{polySize}-10)/2]', ], Rect => [ topLeft => 'Point', botRight => 'Point', ], RGBColor => [ red => 'int16u', green => 'int16u', blue => 'int16u', ], Rgn => [ rgnSize => 'int16u', rgnBBox => 'Rect', data => 'int8u[$val{rgnSize}-10]', ], ShortLine => [ pnLoc => 'Point', dh => 'int8s', dv => 'int8s', ], # http://developer.apple.com/documentation/QuickTime/INMAC/QT/iqImageCompMgr.a.htm UncompressedQuickTime => [ size => 'int32u', # size NOT including size word version => 'int16u', matrix => 'int32u[9]', matteSize => 'int32u', matteRect => 'Rect', matteDescr => 'Int32uData[$val{matteSize} ? 1 : 0]', matteData => 'binary[$val{matteSize}]', subOpcodeData => q{ binary[ $val{size} - 50 - ($val{matteSize} ? $val{mattSize} + $val{matteDescr}->{size} : 0)] }, ], ); # PICT image opcodes %Image::ExifTool::PICT::Main = ( VARS => { NO_LOOKUP => 1 }, # omit tags from lookup NOTES => q{ The PICT format contains no true meta information, except for the possible exception of the LongComment opcode. By default, only ImageWidth, ImageHeight and X/YResolution are extracted from a PICT image. Tags in the following table represent image opcodes. Extraction of these tags is experimental, and is only enabled with the Verbose or Unknown options. }, 0x0000 => { Name => 'Nop', Description => 'No Operation', Format => 'null', }, 0x0001 => { Name => 'ClipRgn', Description => 'Clipping Region', Format => 'Rgn', }, 0x0002 => { Name => 'BkPat', Description => 'Background Pattern', Format => 'int8u[8]', }, 0x0003 => { Name => 'TxFont', Description => 'Font Number', Format => 'int16u', }, 0x0004 => { Name => 'TxFace', Description => 'Text Font Style', Format => 'int8u', }, 0x0005 => { Name => 'TxMode', Description => 'Text Source Mode', Format => 'int16u', }, 0x0006 => { Name => 'SpExtra', Description => 'Extra Space', Format => 'fixed32s', }, 0x0007 => { Name => 'PnSize', Description => 'Pen Size', Format => 'Point', }, 0x0008 => { Name => 'PnMode', Description => 'Pen Mode', Format => 'int16u', }, 0x0009 => { Name => 'PnPat', Description => 'Pen Pattern', Format => 'int8u[8]', }, 0x000a => { Name => 'FillPat', Description => 'Fill Pattern', Format => 'int8u[8]', }, 0x000b => { Name => 'OvSize', Description => 'Oval Size', Format => 'Point', }, 0x000c => { Name => 'Origin', Format => 'Point', }, 0x000d => { Name => 'TxSize', Description => 'Text Size', Format => 'int16u', }, 0x000e => { Name => 'FgColor', Description => 'Foreground Color', Format => 'int32u', }, 0x000f => { Name => 'BkColor', Description => 'Background Color', Format => 'int32u', }, 0x0010 => { Name => 'TxRatio', Description => 'Text Ratio', Format => 'Rect', }, 0x0011 => { Name => 'VersionOp', Description => 'Version', Format => 'int8u', }, 0x0012 => { Name => 'BkPixPat', Description => 'Background Pixel Pattern', Format => 'PixPat', }, 0x0013 => { Name => 'PnPixPat', Description => 'Pen Pixel Pattern', Format => 'PixPat', }, 0x0014 => { Name => 'FillPixPat', Description => 'Fill Pixel Pattern', Format => 'PixPat', }, 0x0015 => { Name => 'PnLocHFrac', Description => 'Fractional Pen Position', Format => 'int16u', }, 0x0016 => { Name => 'ChExtra', Description => 'Added Width for NonSpace Characters', Format => 'int16u', }, 0x0017 => { Name => 'Reserved', Format => 'Unknown', }, 0x001a => { Name => 'RGBFgCol', Description => 'Foreground Color', Format => 'RGBColor', }, 0x001b => { Name => 'RGBBkCol', Description => 'Background Color', Format => 'RGBColor', }, 0x001c => { Name => 'HiliteMode', Description => 'Highlight Mode Flag', Format => 'null', }, 0x001d => { Name => 'HiliteColor', Description => 'Highlight Color', Format => 'RGBColor', }, 0x001e => { Name => 'DefHilite', Description => 'Use Default Highlight Color', Format => 'null', }, 0x001f => { Name => 'OpColor', Format => 'RGBColor', }, 0x0020 => { Name => 'Line', Format => 'Rect', }, 0x0021 => { Name => 'LineFrom', Format => 'Point', }, 0x0022 => { Name => 'ShortLine', Format => 'ShortLine', }, 0x0023 => { Name => 'ShortLineFrom', Format => 'int8u[2]', }, 0x0024 => { Name => 'Reserved', Format => 'Int16Data', }, 0x0028 => { Name => 'LongText', Format => 'PointText', }, 0x0029 => { Name => 'DHText', Format => 'Int8uText', }, 0x002a => { Name => 'DVText', Format => 'Int8uText', }, 0x002b => { Name => 'DHDVText', Format => 'Int8u2Text', }, 0x002c => { Name => 'FontName', Format => 'FontName', }, 0x002d => { Name => 'LineJustify', Format => 'int8u[10]', }, 0x002e => { Name => 'GlyphState', Format => 'int8u[8]', }, 0x002f => { Name => 'Reserved', Format => 'Int16Data', }, 0x0030 => { Name => 'FrameRect', Format => 'Rect', }, 0x0031 => { Name => 'PaintRect', Format => 'Rect', }, 0x0032 => { Name => 'EraseRect', Format => 'Rect', }, 0x0033 => { Name => 'InvertRect', Format => 'Rect', }, 0x0034 => { Name => 'FillRect', Format => 'Rect', }, 0x0035 => { Name => 'Reserved', Format => 'Rect', }, 0x0038 => { Name => 'FrameSameRect', Format => 'null', }, 0x0039 => { Name => 'PaintSameRect', Format => 'null', }, 0x003a => { Name => 'EraseSameRect', Format => 'null', }, 0x003b => { Name => 'InvertSameRect', Format => 'null', }, 0x003c => { Name => 'FillSameRect', Format => 'null', }, 0x003d => { Name => 'Reserved', Format => 'null', }, 0x0040 => { Name => 'FrameRRect', Format => 'Rect', }, 0x0041 => { Name => 'PaintRRect', Format => 'Rect', }, 0x0042 => { Name => 'EraseRRect', Format => 'Rect', }, 0x0043 => { Name => 'InvertRRect', Format => 'Rect', }, 0x0044 => { Name => 'FillRRect', Format => 'Rect', }, 0x0045 => { Name => 'Reserved', Format => 'Rect', }, 0x0048 => { Name => 'FrameSameRRect', Format => 'null', }, 0x0049 => { Name => 'PaintSameRRect', Format => 'null', }, 0x004a => { Name => 'EraseSameRRect', Format => 'null', }, 0x004b => { Name => 'InvertSameRRect', Format => 'null', }, 0x004c => { Name => 'FillSameRRect', Format => 'null', }, 0x004d => { Name => 'Reserved', Format => 'null', }, 0x0050 => { Name => 'FrameOval', Format => 'Rect', }, 0x0051 => { Name => 'PaintOval', Format => 'Rect', }, 0x0052 => { Name => 'EraseOval', Format => 'Rect', }, 0x0053 => { Name => 'InvertOval', Format => 'Rect', }, 0x0054 => { Name => 'FillOval', Format => 'Rect', }, 0x0055 => { Name => 'Reserved', Format => 'Rect', }, 0x0058 => { Name => 'FrameSameOval', Format => 'null', }, 0x0059 => { Name => 'PaintSameOval', Format => 'null', }, 0x005a => { Name => 'EraseSameOval', Format => 'null', }, 0x005b => { Name => 'InvertSameOval', Format => 'null', }, 0x005c => { Name => 'FillSameOval', Format => 'null', }, 0x005d => { Name => 'Reserved', Format => 'null', }, 0x0060 => { Name => 'FrameArc', Format => 'Arc', }, 0x0061 => { Name => 'PaintArc', Format => 'Arc', }, 0x0062 => { Name => 'EraseArc', Format => 'Arc', }, 0x0063 => { Name => 'InvertArc', Format => 'Arc', }, 0x0064 => { Name => 'FillArc', Format => 'Arc', }, 0x0065 => { Name => 'Reserved', Format => 'Arc', }, 0x0068 => { Name => 'FrameSameArc', Format => 'Point', }, 0x0069 => { Name => 'PaintSameArc', Format => 'Point', }, 0x006a => { Name => 'EraseSameArc', Format => 'Point', }, 0x006b => { Name => 'InvertSameArc', Format => 'Point', }, 0x006c => { Name => 'FillSameArc', Format => 'Point', }, 0x006d => { Name => 'Reserved', Format => 'int32u', }, 0x0070 => { Name => 'FramePoly', Format => 'Polygon', }, 0x0071 => { Name => 'PaintPoly', Format => 'Polygon', }, 0x0072 => { Name => 'ErasePoly', Format => 'Polygon', }, 0x0073 => { Name => 'InvertPoly', Format => 'Polygon', }, 0x0074 => { Name => 'FillPoly', Format => 'Polygon', }, 0x0075 => { Name => 'Reserved', Format => 'Polygon', }, 0x0078 => { Name => 'FrameSamePoly', Format => 'null', }, 0x0079 => { Name => 'PaintSamePoly', Format => 'null', }, 0x007a => { Name => 'EraseSamePoly', Format => 'null', }, 0x007b => { Name => 'InvertSamePoly', Format => 'null', }, 0x007c => { Name => 'FillSamePoly', Format => 'null', }, 0x007d => { Name => 'Reserved', Format => 'null', }, 0x0080 => { Name => 'FrameRgn', Format => 'Rgn', }, 0x0081 => { Name => 'PaintRgn', Format => 'Rgn', }, 0x0082 => { Name => 'EraseRgn', Format => 'Rgn', }, 0x0083 => { Name => 'InvertRgn', Format => 'Rgn', }, 0x0084 => { Name => 'FillRgn', Format => 'Rgn', }, 0x0085 => { Name => 'Reserved', Format => 'Rgn', }, 0x0088 => { Name => 'FrameSameRgn', Format => 'null', }, 0x0089 => { Name => 'PaintSameRgn', Format => 'null', }, 0x008a => { Name => 'EraseSameRgn', Format => 'null', }, 0x008b => { Name => 'InvertSameRgn', Format => 'null', }, 0x008c => { Name => 'FillSameRgn', Format => 'null', }, 0x008d => { Name => 'Reserved', Format => 'null', }, 0x0090 => { Name => 'BitsRect', Description => 'CopyBits with Clipped Rectangle', Format => 'BitsRect#', # (version-dependent format) }, 0x0091 => { Name => 'BitsRgn', Description => 'CopyBits with Clipped Region', Format => 'BitsRgn#', # (version-dependent format) }, 0x0092 => { Name => 'Reserved', Format => 'Int16Data', }, 0x0098 => { Name => 'PackBitsRect', Description => 'Packed CopyBits with Clipped Rectangle', Format => 'BitsRect#', # (version-dependent format) }, 0x0099 => { Name => 'PackBitsRgn', Description => 'Packed CopyBits with Clipped Region', Format => 'BitsRgn#', # (version-dependent format) }, 0x009a => { Name => 'DirectBitsRect', Format => 'DirectBitsRect', }, 0x009b => { Name => 'DirectBitsRgn', Format => 'DirectBitsRgn', }, 0x009c => { Name => 'Reserved', Format => 'Int16Data', }, 0x009d => { Name => 'Reserved', Format => 'Int16Data', }, 0x009e => { Name => 'Reserved', Format => 'Int16Data', }, 0x009f => { Name => 'Reserved', Format => 'Int16Data', }, 0x00a0 => { Name => 'ShortComment', Format => 'int16u', }, 0x00a1 => [ # this list for documentation only [currently not extracted] { # (not actually a full Photohop IRB record it appears, but it does start # with '8BIM', and does contain resolution information at offset 0x0a) Name => 'LongComment', # kind = 498 Format => 'LongComment', SubDirectory => { TagTable => 'Image::ExifTool::Photoshop::Main' }, }, { Name => 'LongComment', # kind = 224 Format => 'LongComment', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main', Start => '$valuePtr + 4', }, }, ], 0x00a2 => { Name => 'Reserved', Format => 'Int16Data', }, 0x00b0 => { Name => 'Reserved', Format => 'null', }, 0x00d0 => { Name => 'Reserved', Format => 'Int32uData', }, 0x00ff => { Name => 'OpEndPic', Description => 'End of picture', Format => 'null', # 2 for version 2!? }, 0x0100 => { Name => 'Reserved', Format => 'int16u', }, 0x0200 => { Name => 'Reserved', Format => 'int32u', }, 0x02ff => { Name => 'Version', Description => 'Version number of picture', Format => 'int16u', }, 0x0300 => { Name => 'Reserved', Format => 'int16u', }, 0x0bff => { Name => 'Reserved', Format => 'int8u[22]', }, 0x0c00 => { Name => 'HeaderOp', Format => 'int16u[12]', }, 0x0c01 => { Name => 'Reserved', Format => 'int8u[24]', }, 0x7f00 => { Name => 'Reserved', Format => 'int8u[254]', }, 0x8000 => { Name => 'Reserved', Format => 'null', }, 0x8100 => { Name => 'Reserved', Format => 'Int32uData', }, 0x8200 => { Name => 'CompressedQuickTime', Format => 'CompressedQuickTime', }, 0x8201 => { Name => 'UncompressedQuickTime', Format => 'Int32uData', }, 0xffff => { Name => 'Reserved', Format => 'Int32uData', }, ); # picture comment 'kind' codes # http://developer.apple.com/technotes/qd/qd_10.html my %commentKind = ( 150 => 'TextBegin', 151 => 'TextEnd', 152 => 'StringBegin', 153 => 'StringEnd', 154 => 'TextCenter', 155 => 'LineLayoutOff', 156 => 'LineLayoutOn', 157 => 'ClientLineLayout', 160 => 'PolyBegin', 161 => 'PolyEnd', 163 => 'PolyIgnore', 164 => 'PolySmooth', 165 => 'PolyClose', 180 => 'DashedLine', 181 => 'DashedStop', 182 => 'SetLineWidth', 190 => 'PostScriptBegin', 191 => 'PostScriptEnd', 192 => 'PostScriptHandle', 193 => 'PostScriptFile', 194 => 'TextIsPostScript', 195 => 'ResourcePS', 196 => 'PSBeginNoSave', 197 => 'SetGrayLevel', 200 => 'RotateBegin', 201 => 'RotateEnd', 202 => 'RotateCenter', 210 => 'FormsPrinting', 211 => 'EndFormsPrinting', 224 => '<ICC Profile>', 498 => '<Photoshop Data>', 1000 => 'BitMapThinningOff', 1001 => 'BitMapThinningOn', ); #------------------------------------------------------------------------------ # Get PixData data # Inputs: 0) reference to PixMap, 1) RAF reference # Returns: reference to PixData or undef on error sub GetPixData($$) { my ($pixMap, $raf) = @_; my $packType = $pixMap->{packType}; my $rowBytes = $pixMap->{rowBytes} & 0x3fff; # remove flags bits my $height = $pixMap->{bounds}->{botRight}->{v} - $pixMap->{bounds}->{topLeft}->{v}; my ($data, $size, $buff, $i); if ($packType == 1 or $rowBytes < 8) { # unpacked data $size = $rowBytes * $height; return undef unless $raf->Read($data, $size) == $size; } elsif ($packType == 2) { # pad byte dropped $size = int($rowBytes * $height * 3 / 4 + 0.5); return undef unless $raf->Read($data, $size) == $size; } else { $data = ''; for ($i=0; $i<$height; ++$i) { if ($rowBytes > 250) { $raf->Read($buff,2) == 2 or return undef; $size = unpack('n',$buff); } else { $raf->Read($buff,1) == 1 or return undef; $size = unpack('C',$buff); } $data .= $buff; $raf->Read($buff,$size) == $size or return undef; $data .= $buff; } } return \$data; } #------------------------------------------------------------------------------ # Read value from PICT file # Inputs: 0) RAF reference, 1) tag, 2) format, 3) optional count # Returns: value, reference to structure hash, or undef on error sub ReadPictValue($$$;$) { my ($raf, $tag, $format, $count) = @_; return undef unless $format; unless (defined $count) { if ($format =~ /(.+)\[(.+)\]/s) { $format = $1; $count = $2; } else { $count = 1; # count undefined: assume 1 } } my $cntStr = ($count == 1) ? '' : "[$count]"; # no size if count is 0 my $size = $count ? Image::ExifTool::FormatSize($format) : 0; if (defined $size or $format eq 'null') { my $val; if ($size) { my $buff; $size *= $count; $raf->Read($buff, $size) == $size or return undef; $val = ReadValue(\$buff, 0, $format, $count, $size); } else { $val = ''; } if ($verbose) { print $out "${indent}$tag ($format$cntStr)"; if ($size) { if (not defined $val) { print $out " = <undef>\n"; } elsif ($format eq 'binary') { print $out " = <binary data>\n"; if ($verbose > 2) { my %parms = ( Out => $out ); $parms{MaxLen} = 96 if $verbose < 4; HexDump(\$val, undef, %parms); } } else { print $out " = $val\n"; } } else { print $out "\n"; } } return \$val if $format eq 'binary' and defined $val; return $val; } $verbose and print $out "${indent}$tag ($format$cntStr):\n"; my $struct = $structs{$format} or return undef; my ($c, @vals); for ($c=0; $c<$count; ++$c) { my (%val, $i); for ($i=0; ; $i+=2) { my $tag = $$struct[$i] or last; my $fmt = $$struct[$i+1]; my ($cnt, $val); $indent .= ' '; if (ref $fmt) { $val = eval $$fmt; $@ and warn $@; if ($verbose and defined $val) { printf $out "${indent}$tag (binary[%d]) = <binary data>\n",length($$val); if ($verbose > 2) { my %parms = ( Out => $out ); $parms{MaxLen} = 96 if $verbose < 4; HexDump($val, undef, %parms); } } } elsif ($fmt =~ /(.+)\[(.+)\]/s) { $fmt = $1; $cnt = eval $2; $@ and warn $@; $val = ReadPictValue($raf, $tag, $fmt, $cnt); } else { $val = ReadPictValue($raf, $tag, $fmt); } $indent = substr($indent, 2); return undef unless defined $val; $val{$tag} = $val; } return \%val if $count == 1; push @vals, \%val; } return \@vals; } #------------------------------------------------------------------------------ # Extract meta information from a PICT image # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid PICT image sub ProcessPICT($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; $verbose = $et->Options('Verbose'); $out = $et->Options('TextOut'); $indent = ''; my ($buff, $tried, @hdr, $op, $hRes, $vRes); # recognize both PICT files and PICT resources (PICT files have a # 512-byte header that we ignore, but PICT resources do not) for (;;) { $raf->Read($buff, 12) == 12 or return 0; @hdr = unpack('x2n5', $buff); $op = pop @hdr; # check for PICT version 1 format if ($op eq 0x1101) { $vers = 1; undef $extended; last; } # check for PICT version 2 format if ($op eq 0x0011) { $raf->Read($buff, 28) == 28 or return 0; if ($buff =~ /^\x02\xff\x0c\x00\xff\xff/) { $vers = 2; undef $extended; last; } if ($buff =~ /^\x02\xff\x0c\x00\xff\xfe/) { $vers = 2; $extended = 1; ($hRes, $vRes) = unpack('x8N2', $buff); last; } } return 0 if $tried; $tried = 1; $raf->Seek(512, 0) or return 0; } # make the bounding rect signed foreach (@hdr) { $_ >= 0x8000 and $_ -= 0x10000; } my $w = $hdr[3] - $hdr[1]; my $h = $hdr[2] - $hdr[0]; return 0 unless $w > 0 and $h > 0; SetByteOrder('MM'); if ($extended) { # extended version 2 pictures contain resolution information # and image bounds are in 72-dpi equivalent units $hRes = GetFixed32s(\$buff, 8); $vRes = GetFixed32s(\$buff, 12); return 0 unless $hRes and $vRes; $w = int($w * $hRes / 72 + 0.5); $h = int($h * $vRes / 72 + 0.5); } $et->SetFileType(); $et->FoundTag('ImageWidth', $w); $et->FoundTag('ImageHeight', $h); $et->FoundTag('XResolution', $hRes) if $hRes; $et->FoundTag('YResolution', $vRes) if $vRes; # don't extract image opcodes unless verbose return 1 unless $verbose or $et->Options('Unknown'); $verbose and printf $out "PICT version $vers%s\n", $extended ? ' extended' : ''; my $tagTablePtr = GetTagTable('Image::ExifTool::PICT::Main'); my $success; for (;;) { if ($vers == 1) { $raf->Read($buff, 1) == 1 or last; $op = ord($buff); } else { # must start version 2 opcode on an even byte $raf->Read($buff, 1) if $raf->Tell() & 0x01; $raf->Read($buff, 2) == 2 or last; $op = unpack('n', $buff); } my $tagInfo = $et->GetTagInfo($tagTablePtr, $op); unless ($tagInfo) { my $i; # search for reserved tag info for ($i=0; $i<scalar(@reserved); $i+=2) { next unless $op >= $reserved[$i]; last if $op > $reserved[$i+1]; $tagInfo = $et->GetTagInfo($tagTablePtr, $reserved[$i]); last; } last unless $tagInfo; } if ($op eq 0xff) { $verbose and print $out "End of picture\n"; $success = 1; last; } my $format = $$tagInfo{Format}; unless ($format) { $et->Warn("Missing format for $$tagInfo{Name}"); last; } # replace version number for version-dependent formats $format =~ s/#$/$vers/; my $wid = $vers * 2; $verbose and printf $out "Tag 0x%.${wid}x, ", $op; my $val = ReadPictValue($raf, $$tagInfo{Name}, $format); unless (defined $val) { $et->Warn("Error reading $$tagInfo{Name} information"); last; } if (ref $val eq 'HASH') { # extract JPEG image from CompressedQuickTime imageData if ($$tagInfo{Name} eq 'CompressedQuickTime' and ref $val->{imageDescr} eq 'HASH' and $val->{imageDescr}->{compressor} and $val->{imageDescr}->{compressor} eq 'Photo - JPEG' and ref $val->{imageData} eq 'SCALAR' and $et->ValidateImage($val->{imageData}, 'PreviewImage')) { $et->FoundTag('PreviewImage', $val->{imageData}); } } else { # $et->FoundTag($tagInfo, $val); } } $success or $et->Warn('End of picture not found'); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::PICT - Read PICT meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to read PICT (Apple Picture) images. =head1 NOTES Extraction of PICT opcodes is experimental, and is only enabled with the Verbose or the Unknown option. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://developer.apple.com/documentation/mac/QuickDraw/QuickDraw-2.html> =item L<http://developer.apple.com/documentation/QuickTime/INMAC/QT/iqImageCompMgr.a.htm> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/PICT Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/PLIST.pm����������������������������������������������������000644 �000765 �000024 �00000041136 12642461330 021143� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: PLIST.pm # # Description: Read Apple PLIST information # # Revisions: 2013-02-01 - P. Harvey Created # # References: 1) http://www.apple.com/DTDs/PropertyList-1.0.dtd # 2) http://opensource.apple.com/source/CF/CF-550/CFBinaryPList.c # # Notes: - Sony MODD files also use XML PLIST format, but with a few quirks # # - Decodes both the binary and XML-based PLIST formats #------------------------------------------------------------------------------ package Image::ExifTool::PLIST; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::XMP; $VERSION = '1.05'; sub ExtractObject($$;$); sub Get24u($$); # access routines to read various-sized integer/real values (add 0x100 to size for reals) my %readProc = ( 1 => \&Get8u, 2 => \&Get16u, 3 => \&Get24u, 4 => \&Get32u, 8 => \&Get64u, 0x104 => \&GetFloat, 0x108 => \&GetDouble, ); # PLIST tags (generated on-the-fly for most tags) %Image::ExifTool::PLIST::Main = ( PROCESS_PROC => \&ProcessPLIST, GROUPS => { 0 => 'PLIST', 1 => 'XML', 2 => 'Document' }, VARS => { LONG_TAGS => 4 }, NOTES => q{ Apple Property List tags. ExifTool reads both XML and binary-format PLIST files, and will extract any existing tags even if they aren't listed below. These tags belong to the family 0 "PLIST" group, but family 1 group may be either "XML" or "PLIST" depending on whether the format is XML or binary. }, # # tags found in PLIST information of QuickTime iTunesInfo iTunMOVI atom (ref PH) # 'cast//name' => { Name => 'Cast', List => 1 }, 'directors//name' => { Name => 'Directors', List => 1 }, 'producers//name' => { Name => 'Producers', List => 1 }, 'screenwriters//name' => { Name => 'Screenwriters', List => 1 }, 'codirectors//name' => { Name => 'Codirectors', List => 1 }, # (NC) 'studio//name' => { Name => 'Studio', List => 1 }, # (NC) # # tags found in MODD files (ref PH) # 'MetaDataList//DateTimeOriginal' => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, # Sony uses a "real" here -- number of days since Dec 31, 1899 ValueConv => 'IsFloat($val) ? ConvertUnixTime(($val - 25569) * 24 * 3600) : $val', PrintConv => '$self->ConvertDateTime($val)', }, 'MetaDataList//Duration' => { Name => 'Duration', Groups => { 2 => 'Video' }, PrintConv => 'ConvertDuration($val)', }, 'MetaDataList//Geolocation/Latitude' => { Name => 'GPSLatitude', Groups => { 2 => 'Location' }, PrintConv => q{ require Image::ExifTool::GPS; Image::ExifTool::GPS::ToDMS($self, $val, 1, 'N'); }, }, 'MetaDataList//Geolocation/Longitude' => { Name => 'GPSLongitude', Groups => { 2 => 'Location' }, PrintConv => q{ require Image::ExifTool::GPS; Image::ExifTool::GPS::ToDMS($self, $val, 1, 'E'); }, }, 'MetaDataList//Geolocation/MapDatum' => { Name => 'GPSMapDatum', Groups => { 2 => 'Location' }, }, XMLFileType => { # recognize MODD files by their content RawConv => q{ if ($val eq 'ModdXML' and $$self{FILE_TYPE} eq 'XMP') { $self->OverrideFileType('MODD'); } return $val; }, }, ); #------------------------------------------------------------------------------ # We found a PLIST XML property name/value # Inputs: 0) ExifTool object ref, 1) tag table ref # 2) reference to array of XML property names (last is current property) # 3) property value, 4) attribute hash ref (not used here) # Returns: 1 if valid tag was found sub FoundTag($$$$;$) { my ($et, $tagTablePtr, $props, $val, $attrs) = @_; return 0 unless @$props; my $verbose = $et->Options('Verbose'); my $keys = $$et{PListKeys} || ( $$et{PListKeys} = [] ); my $prop = $$props[-1]; if ($verbose > 1) { $et->VPrint(0, $$et{INDENT}, '[', join('/',@$props), ' = ', $et->Printable($val), "]\n"); } # un-escape XML character entities $val = Image::ExifTool::XMP::UnescapeXML($val); # handle the various PLIST properties if ($prop eq 'data') { if ($val =~ /^[0-9a-f]+$/ and not length($val) & 0x01) { # MODD files use ASCII-hex encoded "data"... my $buff = pack('H*', $val); $val = \$buff; } else { # ...but the PLIST DTD specifies Base64 encoding $val = Image::ExifTool::XMP::DecodeBase64($val); } } elsif ($prop eq 'date') { $val = Image::ExifTool::XMP::ConvertXMPDate($val); } elsif ($prop eq 'true' or $prop eq 'false') { $val = ucfirst $prop; } else { # convert from UTF8 to ExifTool Charset $val = $et->Decode($val, 'UTF8'); if ($prop eq 'key') { if (@$props <= 3) { # top-level key should be plist/dict/key @$keys = ( $val ); } else { # save key names to be used in tag name push @$keys, '' while @$keys < @$props - 3; pop @$keys while @$keys > @$props - 2; $$keys[@$props - 3] = $val; } return 0; } } return 0 unless @$keys; # can't store value if no associated key my $tag = join '/', @$keys; # generate tag ID from 'key' values my $tagInfo = $$tagTablePtr{$tag}; unless ($tagInfo) { $et->VPrint(0, $$et{INDENT}, "[adding $tag]\n") if $verbose; # generate tag name from ID my $name = $tag; $name =~ s{^MetaDataList//}{}; # shorten long MODD metadata tag names $name =~ s{//name$}{}; # remove unnecessary MODD "name" property $name =~ s/([^A-Za-z])([a-z])/$1\u$2/g; # capitalize words $name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters $tagInfo = { Name => ucfirst($name), List => 1 }; if ($prop eq 'date') { $$tagInfo{Groups}{2} = 'Time'; $$tagInfo{PrintConv} = '$self->ConvertDateTime($val)'; } AddTagToTable($tagTablePtr, $tag, $tagInfo); } # allow list-behaviour only for consecutive tags with the same ID if ($$et{LastPListTag} and $$et{LastPListTag} ne $tagInfo) { delete $$et{LIST_TAGS}{$$et{LastPListTag}}; } $$et{LastPListTag} = $tagInfo; # save the tag $et->HandleTag($tagTablePtr, $tag, $val); return 1; } #------------------------------------------------------------------------------ # Get big-endian 24-bit integer # Inputs: 0) data ref, 1) offset # Returns: integer value sub Get24u($$) { my ($dataPt, $off) = @_; return unpack 'N', "\0" . substr($$dataPt, $off, 3); } #------------------------------------------------------------------------------ # Extract object from binary PLIST file at the current file position (ref 2) # Inputs: 0) ExifTool ref, 1) PLIST info ref, 2) parent tag ID (undef for top) # Returns: the object, or undef on error sub ExtractObject($$;$) { my ($et, $plistInfo, $parent) = @_; my $raf = $$plistInfo{RAF}; my ($buff, $val); $raf->Read($buff, 1) == 1 or return undef; my $type = ord($buff) >> 4; my $size = ord($buff) & 0x0f; if ($type == 0) { # null/bool/fill $val = { 0x00=>'<null>', 0x08=>'True', 0x09=>'False', 0x0f=>'<fill>' }->{$size}; } elsif ($type == 1 or $type == 2 or $type == 3) { # int, float or date $size = 1 << $size; my $proc = ($type == 1 ? $readProc{$size} : $readProc{$size + 0x100}) or return undef; $val = &$proc(\$buff, 0) if $raf->Read($buff, $size) == $size; if ($type == 3 and defined $val) { # date # dates are referenced to Jan 1, 2001 (11323 days from Unix time zero) $val = Image::ExifTool::ConvertUnixTime($val + 11323 * 24 * 3600, 1); $$plistInfo{DateFormat} = 1; } } elsif ($type == 8) { # UID ++$size; $raf->Read($buff, $size) == $size or return undef; my $proc = $readProc{$size}; if ($proc) { $val = &$proc(\$buff, 0); } elsif ($size == 16) { require Image::ExifTool::ASF; $val = Image::ExifTool::ASF::GetGUID($buff); } else { $val = "0x" . unpack 'H*', $buff; } } else { # $size is the size of the remaining types if ($size == 0x0f) { # size is stored in extra integer object $size = ExtractObject($et, $plistInfo); return undef unless defined $size and $size =~ /^\d+$/; } if ($type == 4) { # data if ($size < 1000000 or $et->Options('Binary')) { $raf->Read($buff, $size) == $size or return undef; } else { $buff = "Binary data $size bytes"; } $val = \$buff; # (return reference for binary data) } elsif ($type == 5) { # ASCII string $raf->Read($val, $size) == $size or return undef; } elsif ($type == 6) { # UCS-2BE string $size *= 2; $raf->Read($buff, $size) == $size or return undef; $val = $et->Decode($buff, 'UCS2'); } elsif ($type == 10 or $type == 12 or $type == 13) { # array, set or dict # the remaining types store a list of references my $refSize = $$plistInfo{RefSize}; my $refProc = $$plistInfo{RefProc}; my $num = $type == 13 ? $size * 2 : $size; my $len = $num * $refSize; $raf->Read($buff, $len) == $len or return undef; my $table = $$plistInfo{Table}; my ($i, $ref, @refs, @array); for ($i=0; $i<$num; ++$i) { my $ref = &$refProc(\$buff, $i * $refSize); return 0 if $ref >= @$table; push @refs, $ref; } if ($type == 13) { # dict # prevent infinite recursion if (defined $parent and length $parent > 1000) { $et->WarnOnce('Possible deep recursion while parsing PLIST'); return undef; } my $tagTablePtr = $$plistInfo{TagTablePtr}; my $verbose = $et->Options('Verbose'); for ($i=0; $i<$size; ++$i) { # get the entry key $raf->Seek($$table[$refs[$i]], 0) or return undef; my $key = ExtractObject($et, $plistInfo); next unless defined $key and length $key; # silently ignore bad dict entries # get the entry value $raf->Seek($$table[$refs[$i+$size]], 0) or return undef; # generate an ID for this tag my $tag = defined $parent ? "$parent/$key" : $key; undef $$plistInfo{DateFormat}; my $val = ExtractObject($et, $plistInfo, $tag); next if not defined $val or ref($val) eq 'HASH'; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); unless ($tagInfo) { $et->VPrint(0, $$et{INDENT}, "[adding $tag]\n") if $verbose; my $name = $tag; $name =~ s/([^A-Za-z])([a-z])/$1\u$2/g; # capitalize words $name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters $tagInfo = { Name => ucfirst($name), List => 1 }; if ($$plistInfo{DateFormat}) { $$tagInfo{Groups}{2} = 'Time'; $$tagInfo{PrintConv} = '$self->ConvertDateTime($val)'; } AddTagToTable($tagTablePtr, $tag, $tagInfo); } # allow list-behaviour only for consecutive tags with the same ID if ($$et{LastPListTag} and $$et{LastPListTag} ne $tagInfo) { delete $$et{LIST_TAGS}{$$et{LastPListTag}}; } $$et{LastPListTag} = $tagInfo; $et->HandleTag($tagTablePtr, $tag, $val); } $val = { }; # flag the value as a dictionary (ie. tags already saved) } else { # extract the referenced objects foreach $ref (@refs) { $raf->Seek($$table[$ref], 0) or return undef; # seek to this object $val = ExtractObject($et, $plistInfo, $parent); next unless defined $val and ref $val ne 'HASH'; push @array, $val; } $val = \@array; } } } return $val; } #------------------------------------------------------------------------------ # Process binary PLIST data (ref 2) # Inputs: 0) ExifTool object ref, 1) DirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessBinaryPLIST($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my ($i, $buff, @table); $et->VerboseDir('Binary PLIST'); SetByteOrder('MM'); unless ($$dirInfo{RAF}) { my $buf2 = substr(${$$dirInfo{DataPt}}, $$dirInfo{DirStart} || 0, $$dirInfo{DirLen}); $$dirInfo{RAF} = new File::RandomAccess(\$buf2); } # read and parse the trailer my $raf = $$dirInfo{RAF}; $raf->Seek(-32,2) and $raf->Read($buff,32)==32 or return 0; my $intSize = Get8u(\$buff, 6); my $refSize = Get8u(\$buff, 7); my $numObj = Get64u(\$buff, 8); my $topObj = Get64u(\$buff, 16); my $tableOff = Get64u(\$buff, 24); return 0 if $topObj >= $numObj; my $intProc = $readProc{$intSize} or return 0; my $refProc = $readProc{$refSize} or return 0; # read and parse the offset table my $tableSize = $intSize * $numObj; $raf->Seek($tableOff, 0) and $raf->Read($buff, $tableSize) == $tableSize or return 0; for ($i=0; $i<$numObj; ++$i) { push @table, &$intProc(\$buff, $i * $intSize); } my %plistInfo = ( RAF => $raf, RefSize => $refSize, RefProc => $refProc, Table => \@table, TagTablePtr => $tagTablePtr, ); # position file pointer at the top object, and extract it $raf->Seek($table[$topObj], 0) or return 0; my $result = ExtractObject($et, \%plistInfo); return defined $result ? 1 : 0; } #------------------------------------------------------------------------------ # Extract information from a PLIST file # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, 0 if this wasn't valid PLIST sub ProcessPLIST($$;$) { my ($et, $dirInfo, $tagTablePtr) = @_; # process XML PLIST data using the XMP module $$dirInfo{XMPParseOpts}{FoundProc} = \&FoundTag; my $result = Image::ExifTool::XMP::ProcessXMP($et, $dirInfo, $tagTablePtr); delete $$dirInfo{XMPParseOpts}; unless ($result) { my $buff; my $raf = $$dirInfo{RAF} or return 0; $raf->Seek(0,0) and $raf->Read($buff, 64) or return 0; if ($buff =~ /^bplist0/) { # binary PLIST file my $tagTablePtr = GetTagTable('Image::ExifTool::PLIST::Main'); $et->SetFileType('PLIST', 'application/x-plist'); $$et{SET_GROUP1} = 'PLIST'; unless (ProcessBinaryPLIST($et, $dirInfo, $tagTablePtr)) { $et->Error('Error reading binary PLIST file'); } delete $$et{SET_GROUP1}; $result = 1; } elsif ($$et{FILE_EXT} and $$et{FILE_EXT} eq 'PLIST' and $buff =~ /^\xfe\xff\x00/) { # (have seen very old PLIST files encoded as UCS-2BE with leading BOM) $et->Error('Old PLIST format currently not supported'); $result = 1; } } return $result; } 1; # end __END__ =head1 NAME Image::ExifTool::PLIST - Read Apple PLIST information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains the routines used by Image::ExifTool to extract information from Apple Property List files. =head1 NOTES This module decodes both the binary and XML-based PLIST format. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.apple.com/DTDs/PropertyList-1.0.dtd> =item L<http://opensource.apple.com/source/CF/CF-550/CFBinaryPList.c> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/PLIST Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/PNG.pm������������������������������������������������������000644 �000765 �000024 �00000132401 12642461330 020670� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: PNG.pm # # Description: Read and write PNG meta information # # Revisions: 06/10/2005 - P. Harvey Created # 06/23/2005 - P. Harvey Added MNG and JNG support # 09/16/2005 - P. Harvey Added write support # # References: 1) http://www.libpng.org/pub/png/spec/1.2/ # 2) http://www.faqs.org/docs/png/ # 3) http://www.libpng.org/pub/mng/ # 4) http://www.libpng.org/pub/png/spec/register/ # 5) ftp://ftp.simplesystems.org/pub/png/documents/pngext-1.4.0-pdg.html # # Notes: Writing meta information in PNG images is a pain in the butt # for a number of reasons: One biggie is that you have to # decompress then decode the ASCII/hex profile information before # you can edit it, then you have to ASCII/hex-encode, recompress # and calculate a CRC before you can write it out again. gaaaak. #------------------------------------------------------------------------------ package Image::ExifTool::PNG; use strict; use vars qw($VERSION $AUTOLOAD); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.36'; sub ProcessPNG_tEXt($$$); sub ProcessPNG_iTXt($$$); sub ProcessPNG_Compressed($$$); sub CalculateCRC($;$$$); sub HexEncode($); sub AddChunks($$;@); sub Add_iCCP($$); sub DoneDir($$$;$); sub GetLangInfo($$); sub BuildTextChunk($$$$$); my $noCompressLib; # look up for file type, header chunk and end chunk, based on file signature my %pngLookup = ( "\x89PNG\r\n\x1a\n" => ['PNG', 'IHDR', 'IEND' ], "\x8aMNG\r\n\x1a\n" => ['MNG', 'MHDR', 'MEND' ], "\x8bJNG\r\n\x1a\n" => ['JNG', 'JHDR', 'IEND' ], ); # map for directories in PNG images my %pngMap = ( IFD1 => 'IFD0', EXIF => 'IFD0', # to write EXIF as a block ExifIFD => 'IFD0', GPS => 'IFD0', SubIFD => 'IFD0', GlobParamIFD => 'IFD0', PrintIM => 'IFD0', InteropIFD => 'ExifIFD', MakerNotes => 'ExifIFD', IFD0 => 'PNG', XMP => 'PNG', ICC_Profile => 'PNG', Photoshop => 'PNG', 'PNG-pHYs' => 'PNG', IPTC => 'Photoshop', MakerNotes => 'ExifIFD', ); # color type of current image $Image::ExifTool::PNG::colorType = -1; # PNG chunks %Image::ExifTool::PNG::Main = ( WRITE_PROC => \&Image::ExifTool::DummyWriteProc, GROUPS => { 2 => 'Image' }, PREFERRED => 1, # always add these tags when writing NOTES => q{ Tags extracted from PNG images. See L<http://www.libpng.org/pub/png/spec/1.2/> for the official PNG 1.2 specification. According to the specification, a PNG file should end at the IEND chunk, however ExifTool will preserve any data found after this when writing unless it is specifically deleted with -Trailer:All=. When reading, a minor warning is issued if this trailer exists, and ExifTool will attempt to parse this data as additional PNG chunks. }, bKGD => { Name => 'BackgroundColor', ValueConv => 'join(" ",unpack(length($val) < 2 ? "C" : "n*", $val))', }, cHRM => { Name => 'PrimaryChromaticities', SubDirectory => { TagTable => 'Image::ExifTool::PNG::PrimaryChromaticities' }, }, dSIG => { Name => 'DigitalSignature', Binary => 1, }, fRAc => { Name => 'FractalParameters', Binary => 1, }, gAMA => { Name => 'Gamma', Notes => q{ ExifTool reports the gamma for decoding the image, which is consistent with the EXIF convention, but is the inverse of the stored encoding gamma }, ValueConv => 'my $a=unpack("N",$val);$a ? int(1e9/$a+0.5)/1e4 : $val', }, gIFg => { Name => 'GIFGraphicControlExtension', Binary => 1, }, gIFt => { Name => 'GIFPlainTextExtension', Binary => 1, }, gIFx => { Name => 'GIFApplicationExtension', Binary => 1, }, hIST => { Name => 'PaletteHistogram', Binary => 1, }, iCCP => { Name => 'ICC_Profile', Notes => 'this is where ExifTool will write a new ICC_Profile', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main', ProcessProc => \&ProcessPNG_Compressed, }, }, 'iCCP-name' => { Name => 'ProfileName', Notes => 'not a real tag ID, this tag represents the iCCP profile name', }, # IDAT # IEND IHDR => { Name => 'ImageHeader', SubDirectory => { TagTable => 'Image::ExifTool::PNG::ImageHeader' }, }, iTXt => { Name => 'InternationalText', SubDirectory => { TagTable => 'Image::ExifTool::PNG::TextualData', ProcessProc => \&ProcessPNG_iTXt, }, }, oFFs => { Name => 'ImageOffset', ValueConv => q{ my @a = unpack("NNC",$val); $a[2] = ($a[2] ? "microns" : "pixels"); return "$a[0], $a[1] ($a[2])"; }, }, pCAL => { Name => 'PixelCalibration', Binary => 1, }, pHYs => { Name => 'PhysicalPixel', SubDirectory => { TagTable => 'Image::ExifTool::PNG::PhysicalPixel', DirName => 'PNG-pHYs', # (needed for writing) }, }, PLTE => { Name => 'Palette', ValueConv => 'length($val) <= 3 ? join(" ",unpack("C*",$val)) : \$val', }, sBIT => { Name => 'SignificantBits', ValueConv => 'join(" ",unpack("C*",$val))', }, sCAL => { # png 1.4.0 Name => 'SubjectScale', SubDirectory => { TagTable => 'Image::ExifTool::PNG::SubjectScale' }, }, sPLT => { Name => 'SuggestedPalette', Binary => 1, PrintConv => 'split("\0",$$val,1)', # extract palette name }, sRGB => { Name => 'SRGBRendering', ValueConv => 'unpack("C",$val)', PrintConv => { 0 => 'Perceptual', 1 => 'Relative Colorimetric', 2 => 'Saturation', 3 => 'Absolute Colorimetric', }, }, sTER => { # png 1.4.0 Name => 'StereoImage', SubDirectory => { TagTable => 'Image::ExifTool::PNG::StereoImage' }, }, tEXt => { Name => 'TextualData', SubDirectory => { TagTable => 'Image::ExifTool::PNG::TextualData' }, }, tIME => { Name => 'ModifyDate', Groups => { 2 => 'Time' }, Writable => 1, Shift => 'Time', ValueConv => 'sprintf("%.4d:%.2d:%.2d %.2d:%.2d:%.2d", unpack("nC5", $val))', ValueConvInv => q{ my @a = ($val=~/^(\d+):(\d+):(\d+)\s+(\d+):(\d+):(\d+)/); @a == 6 or warn('Invalid date'), return undef; return pack('nC5', @a); }, PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', }, tRNS => { Name => 'Transparency', ValueConv => q{ return \$val if length($val) > 6; join(" ",unpack($Image::ExifTool::PNG::colorType == 3 ? "C*" : "n*", $val)); }, }, tXMP => { Name => 'XMP', Notes => 'obsolete location specified by a September 2001 XMP draft', NonStandard => 1, SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' }, }, vpAg => { # private imagemagick chunk Name => 'VirtualPage', SubDirectory => { TagTable => 'Image::ExifTool::PNG::VirtualPage' }, }, zTXt => { Name => 'CompressedText', SubDirectory => { TagTable => 'Image::ExifTool::PNG::TextualData', ProcessProc => \&ProcessPNG_Compressed, }, }, ); # PNG IHDR chunk %Image::ExifTool::PNG::ImageHeader = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'ImageWidth', Format => 'int32u', }, 4 => { Name => 'ImageHeight', Format => 'int32u', }, 8 => 'BitDepth', 9 => { Name => 'ColorType', RawConv => '$Image::ExifTool::PNG::colorType = $val', PrintConv => { 0 => 'Grayscale', 2 => 'RGB', 3 => 'Palette', 4 => 'Grayscale with Alpha', 6 => 'RGB with Alpha', }, }, 10 => { Name => 'Compression', PrintConv => { 0 => 'Deflate/Inflate' }, }, 11 => { Name => 'Filter', PrintConv => { 0 => 'Adaptive' }, }, 12 => { Name => 'Interlace', PrintConv => { 0 => 'Noninterlaced', 1 => 'Adam7 Interlace' }, }, ); # PNG cHRM chunk %Image::ExifTool::PNG::PrimaryChromaticities = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, FORMAT => 'int32u', 0 => { Name => 'WhitePointX', ValueConv => '$val / 100000' }, 1 => { Name => 'WhitePointY', ValueConv => '$val / 100000' }, 2 => { Name => 'RedX', ValueConv => '$val / 100000' }, 3 => { Name => 'RedY', ValueConv => '$val / 100000' }, 4 => { Name => 'GreenX', ValueConv => '$val / 100000' }, 5 => { Name => 'GreenY', ValueConv => '$val / 100000' }, 6 => { Name => 'BlueX', ValueConv => '$val / 100000' }, 7 => { Name => 'BlueY', ValueConv => '$val / 100000' }, ); # PNG pHYs chunk %Image::ExifTool::PNG::PhysicalPixel = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, WRITABLE => 1, GROUPS => { 1 => 'PNG-pHYs', 2 => 'Image' }, WRITE_GROUP => 'PNG-pHYs', NOTES => q{ These tags are found in the PNG pHYs chunk and belong to the PNG-pHYs family 1 group. They are all created together with default values if necessary when any of these tags is written, and may only be deleted as a group. }, 0 => { Name => 'PixelsPerUnitX', Format => 'int32u', }, 4 => { Name => 'PixelsPerUnitY', Format => 'int32u', }, 8 => { Name => 'PixelUnits', PrintConv => { 0 => 'Unknown', 1 => 'meters' }, }, ); # PNG sCAL chunk %Image::ExifTool::PNG::SubjectScale = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'SubjectUnits', PrintConv => { 1 => 'meters', 2 => 'radians' }, }, 1 => { Name => 'SubjectPixelWidth', Format => 'var_string', }, 2 => { Name => 'SubjectPixelHeight', Format => 'var_string', }, ); # PNG vpAg chunk %Image::ExifTool::PNG::VirtualPage = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, FORMAT => 'int32u', 0 => 'VirtualImageWidth', 1 => 'VirtualImageHeight', 2 => { Name => 'VirtualPageUnits', Format => 'int8u', # what is the conversion for this? }, ); # PNG sTER chunk %Image::ExifTool::PNG::StereoImage = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'StereoMode', PrintConv => { 0 => 'Cross-fuse Layout', 1 => 'Diverging-fuse Layout', }, }, ); my %unreg = ( Notes => 'unregistered' ); # Tags for PNG tEXt zTXt and iTXt chunks # (NOTE: ValueConv is set dynamically, so don't set it here!) %Image::ExifTool::PNG::TextualData = ( PROCESS_PROC => \&ProcessPNG_tEXt, WRITE_PROC => \&Image::ExifTool::DummyWriteProc, WRITABLE => 'string', PREFERRED => 1, # always add these tags when writing GROUPS => { 2 => 'Image' }, LANG_INFO => \&GetLangInfo, NOTES => q{ The PNG TextualData format allows arbitrary tag names to be used. The tags listed below are the only ones that can be written (unless new user-defined tags are added via the configuration file), however ExifTool will extract any other TextualData tags that are found. All TextualData tags (including tags not listed below) are removed when deleting all PNG tags. These tags may be stored as tEXt, zTXt or iTXt chunks in the PNG image. By default ExifTool writes new string-value tags as as uncompressed tEXt, or compressed zTXt if the Compress (-z) option is used and Compress::Zlib is available. Alternate language tags and values containing special characters (unless the Latin character set is used) are written as iTXt, and compressed if the Compress option is used and Compress::Zlib is available. Raw profile information is always created as compressed zTXt if Compress::Zlib is available, or tEXt otherwise. Standard XMP is written as uncompressed iTXt. Alternate languages are accessed by suffixing the tag name with a '-', followed by an RFC 3066 language code (eg. "PNG:Comment-fr", or "Title-en-US"). See L<http://www.ietf.org/rfc/rfc3066.txt> for the RFC 3066 specification. Some of the tags below are not registered as part of the PNG specification, but are included here because they are generated by other software such as ImageMagick. }, Title => { }, Author => { Groups => { 2 => 'Author' } }, Description => { }, Copyright => { Groups => { 2 => 'Author' } }, 'Creation Time' => { Name => 'CreationTime', Groups => { 2 => 'Time' }, Shift => 'Time', }, Software => { }, Disclaimer => { }, # change name to differentiate from ExifTool Warning Warning => { Name => 'PNGWarning', }, Source => { }, Comment => { }, # # The following tags are not part of the original PNG specification, # but are written by ImageMagick and other software # Artist => { %unreg, Groups => { 2 => 'Author' } }, Document => { %unreg }, Label => { %unreg }, Make => { %unreg, Groups => { 2 => 'Camera' } }, Model => { %unreg, Groups => { 2 => 'Camera' } }, 'create-date'=> { Name => 'CreateDate', Groups => { 2 => 'Time' }, Shift => 'Time', %unreg, ValueConv => 'require Image::ExifTool::XMP; Image::ExifTool::XMP::ConvertXMPDate($val)', ValueConvInv => 'require Image::ExifTool::XMP; Image::ExifTool::XMP::FormatXMPDate($val)', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,undef,1)', }, 'modify-date'=> { Name => 'ModDate', # (to distinguish from tIME chunk "ModifyDate") Groups => { 2 => 'Time' }, Shift => 'Time', %unreg, ValueConv => 'require Image::ExifTool::XMP; Image::ExifTool::XMP::ConvertXMPDate($val)', ValueConvInv => 'require Image::ExifTool::XMP; Image::ExifTool::XMP::FormatXMPDate($val)', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,undef,1)', }, TimeStamp => { %unreg, Groups => { 2 => 'Time' }, Shift => 'Time' }, URL => { %unreg }, 'XML:com.adobe.xmp' => { Name => 'XMP', Notes => q{ unregistered, but this is the location according to the June 2002 or later XMP specification, and is where ExifTool will add a new XMP chunk if the image didn't already contain XMP }, SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main', }, }, 'Raw profile type APP1' => [ { # EXIF table must come first because we key on this in ProcessProfile() # (No condition because this is just for BuildTagLookup) Name => 'APP1_Profile', Notes => 'unregistered. This is where ExifTool will create new EXIF', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', ProcessProc => \&ProcessProfile, }, }, { Name => 'APP1_Profile', NonStandard => 1, SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main', ProcessProc => \&ProcessProfile, }, }, ], 'Raw profile type exif' => { Name => 'EXIF_Profile', %unreg, SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', ProcessProc => \&ProcessProfile, }, }, 'Raw profile type icc' => { Name => 'ICC_Profile', %unreg, SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main', ProcessProc => \&ProcessProfile, }, }, 'Raw profile type icm' => { Name => 'ICC_Profile', %unreg, SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main', ProcessProc => \&ProcessProfile, }, }, 'Raw profile type iptc' => { Name => 'IPTC_Profile', Notes => q{ unregistered. May be either IPTC IIM or Photoshop IRB format. This is where ExifTool will add new IPTC, inside a Photoshop IRB container }, SubDirectory => { TagTable => 'Image::ExifTool::Photoshop::Main', ProcessProc => \&ProcessProfile, }, }, 'Raw profile type xmp' => { Name => 'XMP_Profile', %unreg, NonStandard => 1, SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main', ProcessProc => \&ProcessProfile, }, }, 'Raw profile type 8bim' => { Name => 'Photoshop_Profile', %unreg, SubDirectory => { TagTable => 'Image::ExifTool::Photoshop::Main', ProcessProc => \&ProcessProfile, }, }, ); #------------------------------------------------------------------------------ # AutoLoad our writer routines when necessary # sub AUTOLOAD { return Image::ExifTool::DoAutoLoad($AUTOLOAD, @_); } #------------------------------------------------------------------------------ # Get standard case for language code (this routine copied from XMP.pm) # Inputs: 0) Language code # Returns: Language code in standard case sub StandardLangCase($) { my $lang = shift; # make 2nd subtag uppercase only if it is 2 letters return lc($1) . uc($2) . lc($3) if $lang =~ /^([a-z]{2,3}|[xi])(-[a-z]{2})\b(.*)/i; return lc($lang); } #------------------------------------------------------------------------------ # Get localized version of tagInfo hash # Inputs: 0) tagInfo hash ref, 1) language code (eg. "x-default") # Returns: new tagInfo hash ref, or undef if invalid sub GetLangInfo($$) { my ($tagInfo, $lang) = @_; $lang =~ tr/_/-/; # RFC 3066 specifies '-' as a separator # no alternate languages for XMP or raw profile directories return undef if $$tagInfo{SubDirectory}; # language code must normalized for use in tag ID return Image::ExifTool::GetLangInfo($tagInfo, StandardLangCase($lang)); } #------------------------------------------------------------------------------ # Found a PNG tag -- extract info from subdirectory or decompress data if necessary # Inputs: 0) ExifTool object reference, 1) Pointer to tag table, # 2) Tag ID, 3) Tag value, 4) [optional] compressed data flag: # 0=not compressed, 1=unknown compression, 2-N=compression with type N-2 # 5) optional output buffer ref, 6) character encoding (tEXt/zTXt/iTXt only) # 6) optional language code # Returns: 1 on success sub FoundPNG($$$$;$$$$) { my ($et, $tagTablePtr, $tag, $val, $compressed, $outBuff, $enc, $lang) = @_; return 0 unless defined $val; my $verbose = $et->Options('Verbose'); my $id = $tag; # generate tag ID which include language code if ($lang) { # case of language code must be normalized since they are case insensitive $lang = StandardLangCase($lang); $id .= '-' . $lang; } my $tagInfo = $et->GetTagInfo($tagTablePtr, $id) || # (some software forgets to capitalize first letter) $et->GetTagInfo($tagTablePtr, ucfirst($id)); # create alternate language tag if necessary if (not $tagInfo and $lang) { $tagInfo = $et->GetTagInfo($tagTablePtr, $tag) || $et->GetTagInfo($tagTablePtr, ucfirst($tag)); $tagInfo = GetLangInfo($tagInfo, $lang) if $tagInfo; } # # uncompress data if necessary # my ($wasCompressed, $deflateErr); if ($compressed and $compressed > 1) { if ($compressed == 2) { # Inflate/Deflate compression if (eval { require Compress::Zlib }) { my ($v2, $stat); my $inflate = Compress::Zlib::inflateInit(); $inflate and ($v2, $stat) = $inflate->inflate($val); if ($inflate and $stat == Compress::Zlib::Z_STREAM_END()) { $val = $v2; $compressed = 0; $wasCompressed = 1; } else { $deflateErr = "Error inflating $tag"; } } elsif (not $noCompressLib) { $deflateErr = "Install Compress::Zlib to read compressed information"; } else { $deflateErr = ''; # flag deflate error but no warning } } else { $compressed -= 2; $deflateErr = "Unknown compression method $compressed for $tag"; } if ($compressed and $verbose and $tagInfo and $$tagInfo{SubDirectory}) { $et->VerboseDir("Unable to decompress $$tagInfo{Name}", 0, length($val)); } # issue warning if relevant if ($deflateErr and (not $outBuff or ($tagInfo and $$tagInfo{SubDirectory} and $$et{EDIT_DIRS}{$$tagInfo{Name}}))) { $et->Warn($deflateErr); $noCompressLib = 1 if $deflateErr =~ /^Install/; } } # translate character encoding if necessary (tEXt/zTXt/iTXt string values only) if ($enc and not $compressed and not ($tagInfo and $$tagInfo{SubDirectory})) { $val = $et->Decode($val, $enc); } # # extract information from subdirectory if available # if ($tagInfo) { my $tagName = $$tagInfo{Name}; my $processed; if ($$tagInfo{SubDirectory} and not $compressed) { my $len = length $val; if ($verbose and $$et{INDENT} ne ' ') { if ($wasCompressed and $verbose > 2) { my $name = $tagName; $wasCompressed and $name = "Decompressed $name"; $et->VerboseDir($name, 0, $len); $et->VerboseDump(\$val); } # don't indent next directory (since it is really the same data) $$et{INDENT} =~ s/..$//; } my $subdir = $$tagInfo{SubDirectory}; my $processProc = $$subdir{ProcessProc}; # nothing more to do if writing and subdirectory is not writable my $subTable = GetTagTable($$subdir{TagTable}); return 1 if $outBuff and not $$subTable{WRITE_PROC}; my $dirName = $$subdir{DirName} || $tagName; my %subdirInfo = ( DataPt => \$val, DirStart => 0, DataLen => $len, DirLen => $len, DirName => $dirName, TagInfo => $tagInfo, ReadOnly => 1, # (only used by WriteXMP) OutBuff => $outBuff, ); # no need to re-decompress if already done undef $processProc if $wasCompressed and $processProc eq \&ProcessPNG_Compressed; # rewrite this directory if necessary (but always process TextualData normally) if ($outBuff and not $processProc and $subTable ne \%Image::ExifTool::PNG::TextualData) { return 1 unless $$et{EDIT_DIRS}{$dirName}; $$outBuff = $et->WriteDirectory(\%subdirInfo, $subTable); if ($tagName eq 'XMP' and $$outBuff) { if ($$et{FoundIDAT} and $$et{DEL_GROUP}{XMP}) { $et->VPrint(0,' Deleting XMP'); $$outBuff = ''; } else { # make sure the XMP is marked as read-only Image::ExifTool::XMP::ValidateXMP($outBuff,'r'); } } DoneDir($et, $dirName, $outBuff, $$tagInfo{NonStandard}); } else { # issue warning for standard XMP after IDAT (PNGEarlyXMP option) if ($tagName eq 'XMP' and not $$tagInfo{NonStandard} and $$et{FoundIDAT} and $$et{FoundIDAT} == 2) { $et->Warn('XMP found after PNG IDAT'); $$et{FoundIDAT} = 1; } $processed = $et->ProcessDirectory(\%subdirInfo, $subTable, $processProc); } $compressed = 1; # pretend this is compressed since it is binary data } if ($outBuff) { my $writable = $$tagInfo{Writable}; my $isOverwriting; if ($writable or ($$tagTablePtr{WRITABLE} and not defined $writable and not $$tagInfo{SubDirectory})) { # write new value for this tag if necessary my $newVal; if ($$et{DEL_GROUP}{PNG} or $$et{PNGDoneTag}{$tag} or $$et{PNGDoneTag}{ucfirst $tag}) { # remove this tag now, but keep in ADD_PNG list to add back later $isOverwriting = 1; } else { # remove this from the list of PNG tags to add delete $$et{ADD_PNG}{$id}; # (also handle case of tEXt tags written with lowercase first letter) delete $$et{ADD_PNG}{ucfirst($id)}; my $nvHash = $et->GetNewValueHash($tagInfo); $isOverwriting = $et->IsOverwriting($nvHash); if (defined $deflateErr) { $newVal = $et->GetNewValue($nvHash); # can only write tag now if always overwriting if ($isOverwriting > 0) { $val = '<deflate error>'; } elsif ($isOverwriting) { $isOverwriting = 0; # can't overwrite $et->Warn($deflateErr) if $deflateErr; } } else { if ($isOverwriting < 0) { $isOverwriting = $et->IsOverwriting($nvHash, $val); } # (must get new value after IsOverwriting() in case it was shifted) $newVal = $et->GetNewValue($nvHash); } } if ($isOverwriting) { $$outBuff = (defined $newVal) ? $newVal : ''; ++$$et{CHANGED}; $et->VerboseValue("- PNG:$tagName", $val); $et->VerboseValue("+ PNG:$tagName", $newVal) if defined $newVal; } } if (defined $$outBuff and length $$outBuff) { if ($enc) { # must be tEXt/zTXt/iTXt if $enc is set $$outBuff = BuildTextChunk($et, $tag, $tagInfo, $$outBuff, $lang); } elsif ($wasCompressed) { # re-compress the output data my $deflate; if (eval { require Compress::Zlib }) { my $deflate = Compress::Zlib::deflateInit(); if ($deflate) { $$outBuff = $deflate->deflate($$outBuff); $$outBuff .= $deflate->flush() if defined $$outBuff; } else { undef $$outBuff; } } $$outBuff or $et->Warn("PNG:$tagName not written (compress error)"); } } return 1; } return 1 if $processed; } elsif ($outBuff) { if ($$et{DEL_GROUP}{PNG} and $tagTablePtr eq \%Image::ExifTool::PNG::TextualData) { # delete all TextualData tags if deleting the PNG group $$outBuff = ''; ++$$et{CHANGED}; $et->VerboseValue("- PNG:$tag", $val); } return 1; } else { my $name; ($name = $tag) =~ s/\s+(.)/\u$1/g; # remove white space from tag name $tagInfo = { Name => $name }; $$tagInfo{LangCode} = $lang if $lang; # make unknown profiles binary data type $$tagInfo{Binary} = 1 if $tag =~ /^Raw profile type /; $verbose and $et->VPrint(0, " | [adding $tag]\n"); AddTagToTable($tagTablePtr, $tag, $tagInfo); } # # store this tag information # if ($verbose) { # temporarily remove subdirectory so it isn't printed in verbose information # since we aren't decoding it anyway; my $subdir = $$tagInfo{SubDirectory}; delete $$tagInfo{SubDirectory}; $et->VerboseInfo($tag, $tagInfo, Table => $tagTablePtr, DataPt => \$val, ); $$tagInfo{SubDirectory} = $subdir if $subdir; } # set the RawConv dynamically depending on whether this is binary or not my $delRawConv; if ($compressed and not defined $$tagInfo{ValueConv}) { $$tagInfo{RawConv} = '\$val'; $delRawConv = 1; } $et->FoundTag($tagInfo, $val); delete $$tagInfo{RawConv} if $delRawConv; return 1; } #------------------------------------------------------------------------------ # Process encoded PNG profile information # Inputs: 0) ExifTool object reference, 1) DirInfo reference, 2) Pointer to tag table # Returns: 1 on success sub ProcessProfile($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $tagInfo = $$dirInfo{TagInfo}; my $outBuff = $$dirInfo{OutBuff}; my $tagName = $$tagInfo{Name}; # ImageMagick 5.3.6 writes profiles with the following headers: # "\nICC Profile\n", "\nIPTC profile\n", "\n\xaa\x01{generic prof\n" # and "\ngeneric profile\n" return 0 unless $$dataPt =~ /^\n(.*?)\n\s*(\d+)\n(.*)/s; my ($profileType, $len) = ($1, $2); # data is encoded in hex, so change back to binary my $buff = pack('H*', join('',split(' ',$3))); my $actualLen = length $buff; if ($len ne $actualLen) { $et->Warn("$tagName is wrong size (should be $len bytes but is $actualLen)"); $len = $actualLen; } my $verbose = $et->Options('Verbose'); if ($verbose) { if ($verbose > 2) { $et->VerboseDir("Decoded $tagName", 0, $len); $et->VerboseDump(\$buff); } # don't indent next directory (since it is really the same data) $$et{INDENT} =~ s/..$//; } my %dirInfo = ( Parent => 'PNG', DataPt => \$buff, DataLen => $len, DirStart => 0, DirLen => $len, Base => 0, OutFile => $outBuff, ); $$et{PROCESSED} = { }; # reset processed directory offsets my $processed = 0; my $oldChanged = $$et{CHANGED}; my $exifTable = GetTagTable('Image::ExifTool::Exif::Main'); my $editDirs = $$et{EDIT_DIRS}; if ($tagTablePtr ne $exifTable) { # this is unfortunate, but the "IPTC" profile may be stored as either # IPTC IIM or a Photoshop IRB resource, so we must test for this if ($tagName eq 'IPTC_Profile' and $buff =~ /^\x1c/) { $tagTablePtr = GetTagTable('Image::ExifTool::IPTC::Main'); } # process non-EXIF and non-APP1 profile as-is if ($outBuff) { # no need to rewrite this if not editing tags in this directory my $dir = $tagName; $dir =~ s/_Profile// unless $dir =~ /^ICC/; return 1 unless $$editDirs{$dir}; $$outBuff = $et->WriteDirectory(\%dirInfo, $tagTablePtr); DoneDir($et, $dir, $outBuff); } else { $processed = $et->ProcessDirectory(\%dirInfo, $tagTablePtr); } } elsif ($buff =~ /^$Image::ExifTool::exifAPP1hdr/) { # APP1 EXIF information return 1 if $outBuff and not $$editDirs{IFD0}; my $hdrLen = length($Image::ExifTool::exifAPP1hdr); $dirInfo{DirStart} += $hdrLen; $dirInfo{DirLen} -= $hdrLen; if ($outBuff) { $$outBuff = $et->WriteDirectory(\%dirInfo, $tagTablePtr, \&Image::ExifTool::WriteTIFF); $$outBuff = $Image::ExifTool::exifAPP1hdr . $$outBuff if $$outBuff; DoneDir($et, 'IFD0', $outBuff); } else { $processed = $et->ProcessTIFF(\%dirInfo); } } elsif ($buff =~ /^$Image::ExifTool::xmpAPP1hdr/) { # APP1 XMP information my $hdrLen = length($Image::ExifTool::xmpAPP1hdr); my $tagTablePtr = GetTagTable('Image::ExifTool::XMP::Main'); $dirInfo{DirStart} += $hdrLen; $dirInfo{DirLen} -= $hdrLen; if ($outBuff) { return 1 unless $$editDirs{XMP}; $$outBuff = $et->WriteDirectory(\%dirInfo, $tagTablePtr); $$outBuff and $$outBuff = $Image::ExifTool::xmpAPP1hdr . $$outBuff; DoneDir($et, 'XMP', $outBuff, 1); } else { $processed = $et->ProcessDirectory(\%dirInfo, $tagTablePtr); } } elsif ($buff =~ /^(MM\0\x2a|II\x2a\0)/) { # TIFF information return 1 if $outBuff and not $$editDirs{IFD0}; if ($outBuff) { $$outBuff = $et->WriteDirectory(\%dirInfo, $tagTablePtr, \&Image::ExifTool::WriteTIFF); DoneDir($et, 'IFD0', $outBuff); } else { $processed = $et->ProcessTIFF(\%dirInfo); } } else { my $profName = $profileType; $profName =~ tr/\x00-\x1f\x7f-\xff/./; $et->Warn("Unknown raw profile '$profName'"); } if ($outBuff and defined $$outBuff and length $$outBuff) { if ($$et{CHANGED} != $oldChanged) { my $hdr = sprintf("\n%s\n%8d\n", $profileType, length($$outBuff)); # hex encode the data $$outBuff = $hdr . HexEncode($outBuff); } else { undef $$outBuff; } } return $processed; } #------------------------------------------------------------------------------ # Process PNG compressed zTXt or iCCP chunk # Inputs: 0) ExifTool object reference, 1) DirInfo reference, 2) Pointer to tag table # Returns: 1 on success # Notes: writes new chunk data to ${$$dirInfo{OutBuff}} if writing tag sub ProcessPNG_Compressed($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my ($tag, $val) = split /\0/, ${$$dirInfo{DataPt}}, 2; return 0 unless defined $val; # set compressed to 2 + compression method to decompress the data my $compressed = 2 + unpack('C', $val); my $hdr = $tag . "\0" . substr($val, 0, 1); $val = substr($val, 1); # remove compression method byte my $success; my $outBuff = $$dirInfo{OutBuff}; my $tagInfo = $$dirInfo{TagInfo}; # use the PNG chunk tag instead of the embedded tag name for iCCP chunks if ($tagInfo and $$tagInfo{Name} eq 'ICC_Profile') { $et->VerboseDir('iCCP'); $tagTablePtr = \%Image::ExifTool::PNG::Main; if (length($tag) and not $outBuff) { FoundPNG($et, $tagTablePtr, 'iCCP-name', $tag); } $success = FoundPNG($et, $tagTablePtr, 'iCCP', $val, $compressed, $outBuff); $$outBuff = $hdr . $$outBuff if $outBuff and $$outBuff; } else { $success = FoundPNG($et, $tagTablePtr, $tag, $val, $compressed, $outBuff, 'Latin'); } return $success; } #------------------------------------------------------------------------------ # Process PNG tEXt chunk # Inputs: 0) ExifTool object reference, 1) DirInfo reference, 2) Pointer to tag table # Returns: 1 on success # Notes: writes new chunk data to ${$$dirInfo{OutBuff}} if writing tag sub ProcessPNG_tEXt($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my ($tag, $val) = split /\0/, ${$$dirInfo{DataPt}}, 2; my $outBuff = $$dirInfo{OutBuff}; return FoundPNG($et, $tagTablePtr, $tag, $val, undef, $outBuff, 'Latin'); } #------------------------------------------------------------------------------ # Process PNG iTXt chunk # Inputs: 0) ExifTool object reference, 1) DirInfo reference, 2) Pointer to tag table # Returns: 1 on success # Notes: writes new chunk data to ${$$dirInfo{OutBuff}} if writing tag sub ProcessPNG_iTXt($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my ($tag, $dat) = split /\0/, ${$$dirInfo{DataPt}}, 2; return 0 unless defined $dat and length($dat) >= 4; my ($compressed, $meth) = unpack('CC', $dat); my ($lang, $trans, $val) = split /\0/, substr($dat, 2), 3; # set compressed flag so we will decompress it in FoundPNG() $compressed and $compressed = 2 + $meth; my $outBuff = $$dirInfo{OutBuff}; return FoundPNG($et, $tagTablePtr, $tag, $val, $compressed, $outBuff, 'UTF8', $lang); } #------------------------------------------------------------------------------ # Extract meta information from a PNG image # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid PNG image, or -1 on write error sub ProcessPNG($$) { my ($et, $dirInfo) = @_; my $outfile = $$dirInfo{OutFile}; my $raf = $$dirInfo{RAF}; my $datChunk = ''; my $datCount = 0; my $datBytes = 0; my ($sig, $err); # check to be sure this is a valid PNG/MNG/JNG image return 0 unless $raf->Read($sig,8) == 8 and $pngLookup{$sig}; my $earlyXMP = $et->Options('PNGEarlyXMP'); if ($outfile) { delete $$et{TextChunkType}; Write($outfile, $sig) or $err = 1 if $outfile; # can only add tags in Main and TextualData tables $$et{ADD_PNG} = $et->GetNewTagInfoHash( \%Image::ExifTool::PNG::Main, \%Image::ExifTool::PNG::TextualData); # NOTE: PNGDoneTag and PNGDoneDir are used to keep track of metadata added # before the PNG IEND chunk is encountered. Currently this is implemented # only for XMP (written before IDAT with the PNGEarlyXMP option), but # may be implemented in the future for other types - PH $$et{PNGDoneTag} = { }; $$et{PNGDoneDir} = { }; # initialize with same directories, with PNG tags taking priority $et->InitWriteDirs(\%pngMap,'PNG'); # write XMP before IDAT if we would delete it later anyway $earlyXMP = 1 if $$et{DEL_GROUP}{XMP}; } my ($fileType, $hdrChunk, $endChunk) = @{$pngLookup{$sig}}; $et->SetFileType($fileType); # set the FileType tag SetByteOrder('MM'); # PNG files are big-endian my $tagTablePtr = GetTagTable('Image::ExifTool::PNG::Main'); my $mngTablePtr; if ($fileType ne 'PNG') { $mngTablePtr = GetTagTable('Image::ExifTool::MNG::Main'); } my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my ($hbuf, $dbuf, $cbuf, $wasHdr, $wasEnd); # process the PNG/MNG/JNG chunks undef $noCompressLib; for (;;) { my $n = $raf->Read($hbuf,8); if ($wasEnd) { last unless $n; # stop now if normal end of PNG $et->WarnOnce("Trailer data after $fileType $endChunk chunk", 1); last if $n < 8; $$et{SET_GROUP1} = 'Trailer'; } elsif ($n != 8) { $et->Warn("Truncated $fileType image") unless $wasEnd; last; } my ($len, $chunk) = unpack('Na4',$hbuf); if ($len > 0x7fffffff) { $et->Warn("Invalid $fileType chunk size") unless $wasEnd; last; } if ($verbose) { # don't dump image data chunks in verbose mode (only give count instead) if ($datCount and $chunk ne $datChunk) { my $s = $datCount > 1 ? 's' : ''; print $out "$fileType $datChunk ($datCount chunk$s, total $datBytes bytes)\n"; $datCount = $datBytes = 0; $datChunk = ''; } if ($chunk =~ /^(IDAT|JDAT|JDAA)$/) { $datChunk = $chunk; $datCount++; $datBytes += $len; } } if ($outfile) { if ($chunk eq $endChunk) { # add any new chunks immediately before the IEND/MEND chunk AddChunks($et, $outfile) or $err = 1; } elsif ($chunk eq 'PLTE' or $chunk eq 'IDAT') { if ($chunk eq 'IDAT') { # add XMP before IDAT if specified AddChunks($et, $outfile, 'XMP') or $err = 1 if $earlyXMP; # pHYs comes before IDAT AddChunks($et, $outfile, 'PNG-pHYs') or $err = 1; } # iCCP chunk must come before PLTE and IDAT # (ignore errors -- will add later as text profile if this fails) Add_iCCP($et, $outfile); } } if ($chunk eq $endChunk) { # read CRC unless ($raf->Read($cbuf,4) == 4) { $et->Warn("Truncated $fileType $endChunk chunk") unless $wasEnd; last; } $verbose and print $out "$fileType $chunk (end of image)\n"; $wasEnd = 1; if ($outfile) { # write the IEND/MEND chunk with CRC Write($outfile, $hbuf, $cbuf) or $err = 1; if ($$et{DEL_GROUP}{Trailer}) { if ($raf->Read($hbuf, 1)) { $verbose and printf $out " Deleting PNG trailer\n"; ++$$et{CHANGED}; } } else { # copy over any existing trailer data my $tot = 0; for (;;) { $n = $raf->Read($hbuf, 65536) or last; $tot += $n; Write($outfile, $hbuf) or $err = 1; } $tot and $verbose and printf $out " Copying PNG trailer ($tot bytes)\n"; } last; } next; } # set FoundIDAT flag: 1=after IDAT, 2=after IDAT and warn about late XMP $$et{FoundIDAT} = $earlyXMP ? 2 : 1 if $chunk eq 'IDAT'; # read chunk data and CRC unless ($raf->Read($dbuf,$len)==$len and $raf->Read($cbuf, 4)==4) { $et->Warn("Corrupted $fileType image") unless $wasEnd; last; } unless ($wasHdr) { if ($chunk eq $hdrChunk) { $wasHdr = 1; } elsif ($hdrChunk eq 'IHDR' and $chunk eq 'CgBI') { $et->Warn('Non-standard PNG image (Apple iPhone format)'); } else { $et->Warn("$fileType image did not start with $hdrChunk"); last; } } if ($verbose) { # check CRC when in verbose mode (since we don't care about speed) my $crc = CalculateCRC(\$hbuf, undef, 4); $crc = CalculateCRC(\$dbuf, $crc); $crc == unpack('N',$cbuf) or $et->Warn("Bad CRC for $chunk chunk") unless $wasEnd; if ($datChunk) { Write($outfile, $hbuf, $dbuf, $cbuf) or $err = 1 if $outfile; next; } print $out "$fileType $chunk ($len bytes):\n"; $et->VerboseDump(\$dbuf, Addr => $raf->Tell() - $len - 4) if $verbose > 2; } # only extract information from chunks in our tables my ($theBuff, $outBuff); $outBuff = \$theBuff if $outfile; if ($$tagTablePtr{$chunk}) { FoundPNG($et, $tagTablePtr, $chunk, $dbuf, undef, $outBuff); } elsif ($mngTablePtr and $$mngTablePtr{$chunk}) { FoundPNG($et, $mngTablePtr, $chunk, $dbuf, undef, $outBuff); } if ($outfile) { if (defined $theBuff) { next unless length $theBuff; # empty if we deleted the information # change chunk type if necessary if ($$et{TextChunkType}) { $chunk = $$et{TextChunkType}; delete $$et{TextChunkType}; } $hbuf = pack('Na4', length($theBuff), $chunk); $dbuf = $theBuff; my $crc = CalculateCRC(\$hbuf, undef, 4); $crc = CalculateCRC(\$dbuf, $crc); $cbuf = pack('N', $crc); } Write($outfile, $hbuf, $dbuf, $cbuf) or $err = 1; } } delete $$et{SET_GROUP1}; return -1 if $outfile and ($err or not $wasEnd); return 1; # this was a valid PNG/MNG/JNG image } 1; # end __END__ =head1 NAME Image::ExifTool::PNG - Read and write PNG meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to read and write PNG (Portable Network Graphics), MNG (Multi-image Network Graphics) and JNG (JPEG Network Graphics) images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.libpng.org/pub/png/spec/1.2/> =item L<http://www.faqs.org/docs/png/> =item L<http://www.libpng.org/pub/mng/> =item L<http://www.libpng.org/pub/png/spec/register/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/PNG Tags>, L<Image::ExifTool::TagNames/MNG Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/PostScript.pm�����������������������������������������������000644 �000765 �000024 �00000063045 12642461332 022367� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: PostScript.pm # # Description: Read PostScript meta information # # Revisions: 07/08/2005 - P. Harvey Created # # References: 1) http://partners.adobe.com/public/developer/en/ps/5002.EPSF_Spec.pdf # 2) http://partners.adobe.com/public/developer/en/ps/5001.DSC_Spec.pdf # 3) http://partners.adobe.com/public/developer/en/illustrator/sdk/AI7FileFormat.pdf #------------------------------------------------------------------------------ package Image::ExifTool::PostScript; use strict; use vars qw($VERSION $AUTOLOAD); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.41'; sub WritePS($$); sub ProcessPS($$;$); # PostScript tag table %Image::ExifTool::PostScript::Main = ( PROCESS_PROC => \&ProcessPS, WRITE_PROC => \&WritePS, PREFERRED => 1, # always add these tags when writing GROUPS => { 2 => 'Image' }, # Note: Make all of these tags priority 0 since the first one found at # the start of the file should take priority (in case multiples exist) Author => { Priority => 0, Groups => { 2 => 'Author' }, Writable => 'string' }, BoundingBox => { Priority => 0 }, Copyright => { Priority => 0, Writable => 'string' }, #2 CreationDate => { Name => 'CreateDate', Priority => 0, Groups => { 2 => 'Time' }, Writable => 'string', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', }, Creator => { Priority => 0, Writable => 'string' }, ImageData => { Priority => 0 }, For => { Priority => 0, Writable => 'string', Notes => 'for whom the document was prepared'}, Keywords => { Priority => 0, Writable => 'string' }, ModDate => { Name => 'ModifyDate', Priority => 0, Groups => { 2 => 'Time' }, Writable => 'string', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', }, Pages => { Priority => 0 }, Routing => { Priority => 0, Writable => 'string' }, #2 Subject => { Priority => 0, Writable => 'string' }, Title => { Priority => 0, Writable => 'string' }, Version => { Priority => 0, Writable => 'string' }, #2 # these subdirectories for documentation only BeginPhotoshop => { Name => 'PhotoshopData', SubDirectory => { TagTable => 'Image::ExifTool::Photoshop::Main', }, }, BeginICCProfile => { Name => 'ICC_Profile', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main', }, }, begin_xml_packet => { Name => 'XMP', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main', }, }, TIFFPreview => { Groups => { 2 => 'Preview' }, Binary => 1, Notes => q{ not a real tag ID, but used to represent the TIFF preview extracted from DOS EPS images }, }, BeginDocument => { Name => 'EmbeddedFile', SubDirectory => { TagTable => 'Image::ExifTool::PostScript::Main', }, Notes => 'extracted with ExtractEmbedded option', }, EmbeddedFileName => { Notes => q{ not a real tag ID, but the file name from a BeginDocument statement. Extracted with document metadata when ExtractEmbedded option is used }, }, ); # composite tags %Image::ExifTool::PostScript::Composite = ( GROUPS => { 2 => 'Image' }, # BoundingBox is in points, not pixels, # but use it anyway if ImageData is not available ImageWidth => { Desire => { 0 => 'Main:PostScript:ImageData', 1 => 'PostScript:BoundingBox', }, ValueConv => 'Image::ExifTool::PostScript::ImageSize(\@val, 0)', }, ImageHeight => { Desire => { 0 => 'Main:PostScript:ImageData', 1 => 'PostScript:BoundingBox', }, ValueConv => 'Image::ExifTool::PostScript::ImageSize(\@val, 1)', }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::PostScript'); #------------------------------------------------------------------------------ # AutoLoad our writer routines when necessary # sub AUTOLOAD { return Image::ExifTool::DoAutoLoad($AUTOLOAD, @_); } #------------------------------------------------------------------------------ # Is this a PC system # Returns: true for PC systems my %isPC = (MSWin32 => 1, os2 => 1, dos => 1, NetWare => 1, symbian => 1, cygwin => 1); sub IsPC() { return $isPC{$^O}; } #------------------------------------------------------------------------------ # Get image width or height # Inputs: 0) value list ref (ImageData, BoundingBox), 1) true to get height sub ImageSize($$) { my ($vals, $getHeight) = @_; my ($w, $h); if ($$vals[0] and $$vals[0] =~ /^(\d+) (\d+)/) { ($w, $h) = ($1, $2); } elsif ($$vals[1] and $$vals[1] =~ /^(\d+) (\d+) (\d+) (\d+)/) { ($w, $h) = ($3 - $1, $4 - $2); } return $getHeight ? $h : $w; } #------------------------------------------------------------------------------ # Set PostScript format error warning # Inputs: 0) ExifTool object reference, 1) error string # Returns: 1 sub PSErr($$) { my ($et, $str) = @_; # set file type if not done already my $ext = $$et{FILE_EXT}; $et->SetFileType(($ext and $ext eq 'AI') ? 'AI' : 'PS'); $et->Warn("PostScript format error ($str)"); return 1; } #------------------------------------------------------------------------------ # Return input record separator to use for the specified file # Inputs: 0) RAF reference # Returns: Input record separator or undef on error sub GetInputRecordSeparator($) { my $raf = shift; my $pos = $raf->Tell(); # save current position my ($data, $sep); $raf->Read($data,256) or return undef; my ($a, $d) = (999,999); $a = pos($data), pos($data) = 0 if $data =~ /\x0a/g; $d = pos($data) if $data =~ /\x0d/g; my $diff = $a - $d; if ($diff eq 1) { $sep = "\x0d\x0a"; } elsif ($diff eq -1) { $sep = "\x0a\x0d"; } elsif ($diff > 0) { $sep = "\x0d"; } elsif ($diff < 0) { $sep = "\x0a"; } # else error $raf->Seek($pos, 0); # restore original position return $sep; } #------------------------------------------------------------------------------ # Decode comment from PostScript file # Inputs: 0) comment string, 1) RAF ref, 2) reference to lines array # 3) optional data reference for extra lines read from file # Returns: Decoded comment string (may be an array reference) # - handles multi-line comments and escape sequences sub DecodeComment($$$;$) { my ($val, $raf, $lines, $dataPt) = @_; $val =~ s/\x0d*\x0a*$//; # remove trailing CR, LF or CR/LF # check for continuation comments for (;;) { unless (@$lines) { my $buff; $raf->ReadLine($buff) or last; my $altnl = $/ eq "\x0d" ? "\x0a" : "\x0d"; if ($buff =~ /$altnl/) { chomp $buff if $/ eq "\x0d\x0a"; # remove DOS newline before splitting # split into separate lines @$lines = split /$altnl/, $buff, -1; # handle case of DOS newline data inside file using Unix newlines @$lines = ( $$lines[0] . $$lines[1] ) if @$lines == 2 and $$lines[1] eq $/; # add back trailing DOS newline if necessary @$lines ? @$lines[-1] .= $/ : push @$lines, $/ if $/ eq "\x0d\x0a"; } else { push @$lines, $buff; } } last unless $$lines[0] =~ /^%%\+/; # is the next line a continuation? $$dataPt .= $$lines[0] if $dataPt; # add to data if necessary $$lines[0] =~ s/\x0d*\x0a*$//; # remove trailing CR, LF or CR/LF $val .= substr(shift(@$lines), 3); # add to value (without leading "%%+") } my @vals; # handle bracketed string values if ($val =~ s/^\((.*)\)$/$1/) { # remove brackets if necessary # split into an array of strings if necessary my $nesting = 1; while ($val =~ /(\(|\))/g) { my $bra = $1; my $pos = pos($val) - 2; my $backslashes = 0; while ($pos and substr($val, $pos, 1) eq '\\') { --$pos; ++$backslashes; } next if $backslashes & 0x01; # escaped if odd number if ($bra eq '(') { ++$nesting; } else { --$nesting; unless ($nesting) { push @vals, substr($val, 0, pos($val)-1); $val = substr($val, pos($val)); ++$nesting if $val =~ s/\s*\(//; } } } push @vals, $val; foreach $val (@vals) { # decode escape sequences in bracketed strings # (similar to code in PDF.pm, but without line continuation) while ($val =~ /\\(.)/sg) { my $n = pos($val) - 2; my $c = $1; my $r; if ($c =~ /[0-7]/) { # get up to 2 more octal digits $c .= $1 if $val =~ /\G([0-7]{1,2})/g; # convert octal escape code $r = chr(oct($c) & 0xff); } else { # convert escaped characters ($r = $c) =~ tr/nrtbf/\n\r\t\b\f/; } substr($val, $n, length($c)+1) = $r; # continue search after this character pos($val) = $n + length($r); } } $val = @vals > 1 ? \@vals : $vals[0]; } return $val; } #------------------------------------------------------------------------------ # Unescape PostScript string # Inputs: 0) string # Returns: unescaped string sub UnescapePostScript($) { my $str = shift; # decode escape sequences in literal strings while ($str =~ /\\(.)/sg) { my $n = pos($str) - 2; my $c = $1; my $r; if ($c =~ /[0-7]/) { # get up to 2 more octal digits $c .= $1 if $str =~ /\G([0-7]{1,2})/g; # convert octal escape code $r = chr(oct($c) & 0xff); } elsif ($c eq "\x0d") { # the string is continued if the line ends with '\' # (also remove "\x0d\x0a") $c .= $1 if $str =~ /\G(\x0a)/g; $r = ''; } elsif ($c eq "\x0a") { $r = ''; } else { # convert escaped characters ($r = $c) =~ tr/nrtbf/\n\r\t\b\f/; } substr($str, $n, length($c)+1) = $r; # continue search after this character pos($str) = $n + length($r); } return $str; } #------------------------------------------------------------------------------ # Extract information from EPS, PS or AI file # Inputs: 0) ExifTool object reference, 1) dirInfo reference, 2) optional tag table ref # Returns: 1 if this was a valid PostScript file sub ProcessPS($$;$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $raf = $$dirInfo{RAF}; my $embedded = $et->Options('ExtractEmbedded'); my ($data, $dos, $endDoc, $fontTable, $comment); # allow read from data unless ($raf) { $raf = new File::RandomAccess($$dirInfo{DataPt}); $et->VerboseDir('PostScript'); } # # determine if this is a postscript file # $raf->Read($data, 4) == 4 or return 0; # accept either ASCII or DOS binary postscript file format return 0 unless $data =~ /^(%!PS|%!Ad|%!Fo|\xc5\xd0\xd3\xc6)/; if ($data =~ /^%!Ad/) { # I've seen PS files start with "%!Adobe-PS"... return 0 unless $raf->Read($data, 6) == 6 and $data eq "obe-PS"; } elsif ($data =~ /^\xc5\xd0\xd3\xc6/) { # process DOS binary file header # - save DOS header then seek ahead and check PS header $raf->Read($dos, 26) == 26 or return 0; SetByteOrder('II'); unless ($raf->Seek(Get32u(\$dos, 0), 0) and $raf->Read($data, 4) == 4 and $data eq '%!PS') { return PSErr($et, 'invalid header'); } } else { # check for PostScript font file (PFA or PFB) my $d2; $data .= $d2 if $raf->Read($d2,12); if ($data =~ /^%!(PS-(AdobeFont-|Bitstream )|FontType1-)/) { $et->SetFileType('PFA'); # PostScript ASCII font file $fontTable = GetTagTable('Image::ExifTool::Font::PSInfo'); # PostScript font files may contain an unformatted comments which may # contain useful information, so accumulate these for the Comment tag $comment = 1; } $raf->Seek(-length($data), 1); } # # set the newline type based on the first newline found in the file # local $/ = GetInputRecordSeparator($raf); $/ or return PSErr($et, 'invalid PS data'); # set file type (PostScript or EPS) $raf->ReadLine($data) or $data = ''; my $type; if ($data =~ /EPSF/) { $type = 'EPS'; } else { # read next line to see if this is an Illustrator file my $line2; my $pos = $raf->Tell(); if ($raf->ReadLine($line2) and $line2 =~ /^%%Creator: Adobe Illustrator/) { $type = 'AI'; } else { $type = 'PS'; } $raf->Seek($pos, 0); } $et->SetFileType($type); return 1 if $$et{OPTIONS}{FastScan} and $$et{OPTIONS}{FastScan} == 3; # # extract TIFF information from DOS header # $tagTablePtr or $tagTablePtr = GetTagTable('Image::ExifTool::PostScript::Main'); if ($dos) { my $base = Get32u(\$dos, 16); if ($base) { my $pos = $raf->Tell(); # extract the TIFF preview my $len = Get32u(\$dos, 20); my $val = $et->ExtractBinary($base, $len, 'TIFFPreview'); if (defined $val and $val =~ /^(MM\0\x2a|II\x2a\0|Binary)/) { $et->HandleTag($tagTablePtr, 'TIFFPreview', $val); } else { $et->Warn('Bad TIFF preview image'); } # extract information from TIFF in DOS header # (set Parent to '' to avoid setting FileType tag again) my %dirInfo = ( Parent => '', RAF => $raf, Base => $base, ); $et->ProcessTIFF(\%dirInfo) or $et->Warn('Bad embedded TIFF'); # position file pointer to extract PS information $raf->Seek($pos, 0); } } # # parse the postscript # my ($buff, $mode, $beginToken, $endToken, $docNum, $subDocNum, $changedNL); my (@lines, $altnl); if ($/ eq "\x0d") { $altnl = "\x0a"; } else { $/ = "\x0a"; # end on any LF (even if DOS CR+LF) $altnl = "\x0d"; } for (;;) { if (@lines) { $data = shift @lines; } else { $raf->ReadLine($data) or last; # check for alternate newlines as efficiently as possible if ($data =~ /$altnl/) { if (length($data) > 500000 and IsPC()) { # Windows can't split very long lines due to poor memory handling, # so re-read the file with the other newline character instead # (slower but uses less memory) unless ($changedNL) { $changedNL = 1; my $t = $/; $/ = $altnl; $altnl = $t; $raf->Seek(-length($data), 1); next; } } else { # split into separate lines @lines = split /$altnl/, $data, -1; $data = shift @lines; if (@lines == 1 and $lines[0] eq $/) { # handle case of DOS newline data inside file using Unix newlines $data .= $lines[0]; undef @lines; } } } } undef $changedNL; if ($mode) { if (not $endToken) { $buff .= $data; next unless $data =~ m{<\?xpacket end=.(w|r).\?>($/|$)}; } elsif ($data !~ /^$endToken/i) { if ($mode eq 'XMP') { $buff .= $data; } elsif ($mode eq 'Document') { # ignore embedded documents, but keep track of nesting level $docNum .= '-1' if $data =~ /^$beginToken/; } else { # data is ASCII-hex encoded $data =~ tr/0-9A-Fa-f//dc; # remove all but hex characters $buff .= pack('H*', $data); # translate from hex } next; } elsif ($mode eq 'Document') { $docNum =~ s/-?\d+$//; # decrement document nesting level # done with Document mode if we are back at the top level undef $mode unless $docNum; next; } } elsif ($endDoc and $data =~ /^$endDoc/i) { $docNum =~ s/-?(\d+)$//; # decrement nesting level $subDocNum = $1; # remember our last sub-document number $$et{DOC_NUM} = $docNum; undef $endDoc unless $docNum; # done with document if top level next; } elsif ($data =~ /^(%{1,2})(Begin)(_xml_packet|Photoshop|ICCProfile|Document|Binary)/i) { # the beginning of a data block my %modeLookup = ( _xml_packet => 'XMP', photoshop => 'Photoshop', iccprofile => 'ICC_Profile', document => 'Document', binary => undef, # (we will try to skip this) ); $mode = $modeLookup{lc $3}; unless ($mode) { if (not @lines and $data =~ /^%{1,2}BeginBinary:\s*(\d+)/i) { $raf->Seek($1, 1) or last; # skip binary data } next; } $buff = ''; $beginToken = $1 . $2 . $3; $endToken = $1 . ($2 eq 'begin' ? 'end' : 'End') . $3; if ($mode eq 'Document') { # this is either the 1st sub-document or Nth document if ($docNum) { # increase nesting level $docNum .= '-' . (++$subDocNum); } else { # this is the Nth document $docNum = $$et{DOC_COUNT} + 1; } $subDocNum = 0; # new level, so reset subDocNum next unless $embedded; # skip over this document # set document number for family 4-7 group names $$et{DOC_NUM} = $docNum; $$et{LIST_TAGS} = { }; # don't build lists across different documents $$et{PROCESSED} = { }; # re-initialize processed directory lookup too $endDoc = $endToken; # parse to EndDocument token # reset mode to allow parsing into sub-directories undef $endToken; undef $mode; # save document name if available if ($data =~ /^$beginToken:\s+([^\n\r]+)/i) { my $docName = $1; # remove brackets if necessary $docName = $1 if $docName =~ /^\((.*)\)$/; $et->HandleTag($tagTablePtr, 'EmbeddedFileName', $docName); } } next; } elsif ($data =~ /^<\?xpacket begin=.{7,13}W5M0MpCehiHzreSzNTczkc9d/) { # pick up any stray XMP data $mode = 'XMP'; $buff = $data; undef $endToken; # no end token (just look for xpacket end) # XMP could be contained in a single line (if newlines are different) next unless $data =~ m{<\?xpacket end=.(w|r).\?>($/|$)}; } elsif ($data =~ /^%%?(\w+): ?(.*)/s and $$tagTablePtr{$1}) { my ($tag, $val) = ($1, $2); # only allow 'ImageData' to have single leading '%' next unless $data =~ /^%%/ or $1 eq 'ImageData'; # decode comment string (reading continuation lines if necessary) $val = DecodeComment($val, $raf, \@lines); $et->HandleTag($tagTablePtr, $tag, $val); next; } elsif ($embedded and $data =~ /^%AI12_CompressedData/) { # the rest of the file is compressed unless (eval { require Compress::Zlib }) { $et->Warn('Install Compress::Zlib to extract compressed embedded data'); last; } # seek back to find the start of the compressed data in the file my $tlen = length($data) + @lines; $tlen += length $_ foreach @lines; my $backTo = $raf->Tell() - $tlen - 64; $backTo = 0 if $backTo < 0; last unless $raf->Seek($backTo, 0) and $raf->Read($data, 2048); last unless $data =~ s/.*?%AI12_CompressedData//; my $inflate = Compress::Zlib::inflateInit(); $inflate or $et->Warn('Error initializing inflate'), last; # generate a PS-like file in memory from the compressed data my $verbose = $et->Options('Verbose'); if ($verbose > 1) { $et->VerboseDir('AI12_CompressedData (first 4kB)'); $et->VerboseDump(\$data); } # remove header if it exists (Windows AI files only) $data =~ s/^.{0,256}EndData[\x0d\x0a]+//s; my $val; for (;;) { my ($v2, $stat) = $inflate->inflate($data); $stat == Compress::Zlib::Z_STREAM_END() and $val .= $v2, last; $stat != Compress::Zlib::Z_OK() and undef($val), last; if (defined $val) { $val .= $v2; } elsif ($v2 =~ /^%!PS/) { $val = $v2; } else { # add postscript header (for file recognition) if it doesn't exist $val = "%!PS-Adobe-3.0$/" . $v2; } $raf->Read($data, 65536) or last; } defined $val or $et->Warn('Error inflating AI compressed data'), last; if ($verbose > 1) { $et->VerboseDir('Uncompressed AI12 Data'); $et->VerboseDump(\$val); } # extract information from embedded images in the uncompressed data $val = # add PS header in case it needs one ProcessPS($et, { DataPt => \$val }); last; } elsif ($fontTable) { if (defined $comment) { # extract initial comments from PostScript Font files if ($data =~ /^%\s+(.*?)[\x0d\x0a]/) { $comment .= "\n" if $comment; $comment .= $1; next; } elsif ($data !~ /^%/) { # stop extracting comments at the first non-comment line $et->FoundTag('Comment', $comment) if length $comment; undef $comment; } } if ($data =~ m{^\s*/(\w+)\s*(.*)} and $$fontTable{$1}) { my ($tag, $val) = ($1, $2); if ($val =~ /^\((.*)\)/) { $val = UnescapePostScript($1); } elsif ($val =~ m{/?(\S+)}) { $val = $1; } $et->HandleTag($fontTable, $tag, $val); } elsif ($data =~ /^currentdict end/) { # only extract tags from initial FontInfo dict undef $fontTable; } next; } else { next; } # extract information from buffered data my %dirInfo = ( DataPt => \$buff, DataLen => length $buff, DirStart => 0, DirLen => length $buff, Parent => 'PostScript', ); my $subTablePtr = GetTagTable("Image::ExifTool::${mode}::Main"); unless ($et->ProcessDirectory(\%dirInfo, $subTablePtr)) { $et->Warn("Error processing $mode information in PostScript file"); } undef $buff; undef $mode; } $mode = 'Document' if $endDoc and not $mode; $mode and PSErr($et, "unterminated $mode data"); return 1; } #------------------------------------------------------------------------------ # Extract information from EPS file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 if this was a valid PostScript file sub ProcessEPS($$) { return ProcessPS($_[0],$_[1]); } 1; # end __END__ =head1 NAME Image::ExifTool::PostScript - Read PostScript meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This code reads meta information from EPS (Encapsulated PostScript), PS (PostScript) and AI (Adobe Illustrator) files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://partners.adobe.com/public/developer/en/ps/5002.EPSF_Spec.pdf> =item L<http://partners.adobe.com/public/developer/en/ps/5001.DSC_Spec.pdf> =item L<http://partners.adobe.com/public/developer/en/illustrator/sdk/AI7FileFormat.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/PostScript Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/PPM.pm������������������������������������������������������000644 �000765 �000024 �00000011710 12642461331 020700� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: PPM.pm # # Description: Read and write PPM meta information # # Revisions: 09/03/2005 - P. Harvey Created # # References: 1) http://netpbm.sourceforge.net/doc/ppm.html # 2) http://netpbm.sourceforge.net/doc/pgm.html # 3) http://netpbm.sourceforge.net/doc/pbm.html #------------------------------------------------------------------------------ package Image::ExifTool::PPM; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.08'; #------------------------------------------------------------------------------ # Read or write information in a PPM/PGM/PBM image # Inputs: 0) ExifTool object reference, 1) Directory information reference # Returns: 1 on success, 0 if this wasn't a valid PPM file, -1 on write error sub ProcessPPM($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $outfile = $$dirInfo{OutFile}; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my ($buff, $num, $type, %info); # # read as much of the image as necessary to extract the header and comments # for (;;) { if (defined $buff) { # need to read some more data my $tmp; return 0 unless $raf->Read($tmp, 1024); $buff .= $tmp; } else { return 0 unless $raf->Read($buff, 1024); } # verify this is a valid PPM file return 0 unless $buff =~ /^P([1-6])\s+/g; $num = $1; # note: may contain comments starting with '#' if ($buff =~ /\G#/gc) { # must read more if we are in the middle of a comment next unless $buff =~ /\G ?(.*\n(#.*\n)*)\s*/g; $info{Comment} = $1; next if $buff =~ /\G#/gc; } else { delete $info{Comment}; } next unless $buff =~ /\G(\S+)\s+(\S+)\s/g; $info{ImageWidth} = $1; $info{ImageHeight} = $2; $type = [qw{PPM PBM PGM}]->[$num % 3]; last if $type eq 'PBM'; # (no MaxVal for PBM images) if ($buff =~ /\G\s*#/gc) { next unless $buff =~ /\G ?(.*\n(#.*\n)*)\s*/g; $info{Comment} = '' unless exists $info{Comment}; $info{Comment} .= $1; next if $buff =~ /\G#/gc; } next unless $buff =~ /\G(\S+)\s/g; $info{MaxVal} = $1; last; } # validate numerical values foreach (keys %info) { next if $_ eq 'Comment'; return 0 unless $info{$_} =~ /^\d+$/; } if (defined $info{Comment}) { $info{Comment} =~ s/^# ?//mg; # remove "# " at the start of each line $info{Comment} =~ s/\n$//; # remove trailing newline } $et->SetFileType($type); my $len = pos($buff); # # rewrite the file if requested # if ($outfile) { my $nvHash; my $newComment = $et->GetNewValue('Comment', \$nvHash); my $oldComment = $info{Comment}; if ($et->IsOverwriting($nvHash, $oldComment)) { ++$$et{CHANGED}; $et->VerboseValue('- Comment', $oldComment) if defined $oldComment; $et->VerboseValue('+ Comment', $newComment) if defined $newComment; } else { $newComment = $oldComment; # use existing comment } my $hdr = "P$num\n"; if (defined $newComment) { $newComment =~ s/\n/\n# /g; $hdr .= "# $newComment\n"; } $hdr .= "$info{ImageWidth} $info{ImageHeight}\n"; $hdr .= "$info{MaxVal}\n" if $type ne 'PBM'; # write header and start of image Write($outfile, $hdr, substr($buff, $len)) or return -1; # copy over the rest of the image while ($raf->Read($buff, 0x10000)) { Write($outfile, $buff) or return -1; } return 1; } # # save extracted information # if ($verbose > 2) { print $out "$type header ($len bytes):\n"; HexDump(\$buff, $len, Out => $out); } my $tag; foreach $tag (qw{Comment ImageWidth ImageHeight MaxVal}) { $et->FoundTag($tag, $info{$tag}) if defined $info{$tag}; } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::PPM - Read and write PPM meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read and write PPM (Portable Pixel Map), PGM (Portable Gray Map) and PBM (Portable BitMap) images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://netpbm.sourceforge.net/doc/ppm.html> =item L<http://netpbm.sourceforge.net/doc/pgm.html> =item L<http://netpbm.sourceforge.net/doc/pbm.html> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/PPM Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/PrintIM.pm��������������������������������������������������000644 �000765 �000024 �00000006702 12642461332 021574� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: PrintIM.pm # # Description: Read PrintIM meta information # # Revisions: 04/07/2004 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::PrintIM; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess); $VERSION = '1.07'; sub ProcessPrintIM($$$); # PrintIM table (proprietary specification by Epson) %Image::ExifTool::PrintIM::Main = ( PROCESS_PROC => \&ProcessPrintIM, GROUPS => { 0 => 'PrintIM', 1 => 'PrintIM', 2 => 'Printing' }, PRINT_CONV => 'sprintf("0x%.8x", $val)', TAG_PREFIX => 'PrintIM', PrintIMVersion => { # values: 0100, 0250, 0260, 0300 Description => 'PrintIM Version', PrintConv => undef, }, # the following names are from http://www.kanzaki.com/ns/exif # but the decoding is unknown: # 9 => { Name => 'PIMContrast', Unknown => 1 }, #1 # 10 => { Name => 'PIMBrightness', Unknown => 1 }, #1 # 11 => { Name => 'PIMColorbalance', Unknown => 1 }, #1 # 12 => { Name => 'PIMSaturation', Unknown => 1 }, #1 # 13 => { Name => 'PIMSharpness', Unknown => 1 }, #1 ); #------------------------------------------------------------------------------ # Process PrintIM IFD # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessPrintIM($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $offset = $$dirInfo{DirStart}; my $size = $$dirInfo{DirLen}; my $verbose = $et->Options('Verbose'); unless ($size) { $et->Warn('Empty PrintIM data', 1); return 0; } unless ($size > 15) { $et->Warn('Bad PrintIM data'); return 0; } unless (substr($$dataPt, $offset, 7) eq 'PrintIM') { $et->Warn('Invalid PrintIM header'); return 0; } # check size of PrintIM block my $num = Get16u($dataPt, $offset + 14); if ($size < 16 + $num * 6) { # size is too big, maybe byte ordering is wrong ToggleByteOrder(); $num = Get16u($dataPt, $offset + 14); if ($size < 16 + $num * 6) { $et->Warn('Bad PrintIM size'); return 0; } } $verbose and $et->VerboseDir('PrintIM', $num); $et->HandleTag($tagTablePtr, 'PrintIMVersion', substr($$dataPt, $offset + 8, 4), DataPt => $dataPt, Start => $offset + 8, Size => 4, ); my $n; for ($n=0; $n<$num; ++$n) { my $pos = $offset + 16 + $n * 6; my $tag = Get16u($dataPt, $pos); my $val = Get32u($dataPt, $pos + 2); $et->HandleTag($tagTablePtr, $tag, $val, Index => $n, DataPt => $dataPt, Start => $pos + 2, Size => 4, ); } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::PrintIM - Read PrintIM meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Print Image Matching meta information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/PrintIM Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ��������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/PSP.pm������������������������������������������������������000644 �000765 �000024 �00000022024 12642461331 020706� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: PSP.pm # # Description: Read Paint Shop Pro meta information # # Revisions: 2010/01/23 - P. Harvey Created # # References: 1) http://www.jasc.com/support/kb/articles/pspspec.asp #------------------------------------------------------------------------------ package Image::ExifTool::PSP; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.05'; sub ProcessExtData($$$); # PSP info %Image::ExifTool::PSP::Main = ( GROUPS => { 2 => 'Image' }, VARS => { ALPHA_FIRST => 1 }, NOTES => q{ Tags extracted from Paint Shop Pro images (PSP, PSPIMAGE, PSPFRAME, PSPSHAPE, PSPTUBE and TUB extensions). }, # FileVersions: # 3.0 => PSP 5 # 4.0 => PSP 6 # 5.0 => PSP 7 # 6.0 => PSP 8 # 7.0 => PSP 9 # ? => PSP X # ? => PSP X1 (is this the same as X?) # ? => PSP X2 # 10.0 => PSP X3 (= PSP 13) FileVersion => { PrintConv => '$val=~tr/ /./; $val' }, 0 => [ { Condition => '$$self{PSPFileVersion} > 3', Name => 'ImageInfo', SubDirectory => { TagTable => 'Image::ExifTool::PSP::Image', Start => 4, }, }, { Name => 'ImageInfo', SubDirectory => { TagTable => 'Image::ExifTool::PSP::Image', }, }, ], 1 => { Name => 'CreatorInfo', SubDirectory => { TagTable => 'Image::ExifTool::PSP::Creator' }, }, 10 => { Name => 'ExtendedInfo', SubDirectory => { TagTable => 'Image::ExifTool::PSP::Ext' }, }, # this is inside the composite image bank block (16), which I don't want to parse... #18 => { # Name => 'PreviewImage', # Groups => { 2 => 'Preview' }, # RawConv => '$self->ValidateImage(\$val,$tag)', #}, ); # the PSP image block %Image::ExifTool::PSP::Image = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, 0 => { Name => 'ImageWidth', Format => 'int32u' }, 4 => { Name => 'ImageHeight', Format => 'int32u' }, 8 => { Name => 'ImageResolution', Format => 'double' }, 16 => { Name => 'ResolutionUnit', Format => 'int8u', PrintConv => { 0 => 'None', 1 => 'inches', 2 => 'cm', }, }, 17 => { Name => 'Compression', Format => 'int16u', PrintConv => { 0 => 'None', 1 => 'RLE', 2 => 'LZ77', 3 => 'JPEG', }, }, 19 => { Name => 'BitsPerSample',Format => 'int16u' }, 21 => { Name => 'Planes', Format => 'int16u' }, 23 => { Name => 'NumColors', Format => 'int32u' }, ); # the PSP creator data block %Image::ExifTool::PSP::Creator = ( PROCESS_PROC => \&ProcessExtData, GROUPS => { 2 => 'Image' }, PRIORITY => 0, # prefer EXIF if it exists 0 => 'Title', 1 => { Name => 'CreateDate', Format => 'int32u', Groups => { 2 => 'Time' }, ValueConv => 'Image::ExifTool::ConvertUnixTime($val,1)', PrintConv => '$self->ConvertDateTime($val)', }, 2 => { Name => 'ModifyDate', Format => 'int32u', Groups => { 2 => 'Time' }, ValueConv => 'Image::ExifTool::ConvertUnixTime($val,1)', PrintConv => '$self->ConvertDateTime($val)', }, 3 => { Name => 'Artist', Groups => { 2 => 'Author' }, }, 4 => { Name => 'Copyright', Groups => { 2 => 'Author' }, }, 5 => 'Description', 6 => { Name => 'CreatorAppID', Format => 'int32u', PrintConv => { 0 => 'Unknown', 1 => 'Paint Shop Pro', }, }, 7 => { Name => 'CreatorAppVersion', Format => 'int8u', Count => 4, ValueConv => 'join(" ",reverse split " ", $val)', # low byte first PrintConv => '$val=~tr/ /./; $val', }, ); # the PSP extended data block %Image::ExifTool::PSP::Ext = ( PROCESS_PROC => \&ProcessExtData, GROUPS => { 2 => 'Image' }, 3 => { Name => 'EXIFInfo', #(don't change this name, it is used in the code) SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main' }, }, ); #------------------------------------------------------------------------------ # Extract information from the extended data block # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessExtData($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirLen = $$dirInfo{DirLen}; my $pos = 0; # loop through sub-blocks while ($pos + 10 < $dirLen) { unless (substr($$dataPt, $pos, 4) eq "~FL\0") { $et->Warn('Lost synchronization while reading sub blocks'); last; } my $tag = Get16u($dataPt, $pos + 4); my $len = Get32u($dataPt, $pos + 6); $pos += 10 + $len; if ($pos > $dirLen) { $et->Warn("Truncated sub block ID=$tag len=$len"); last; } next unless $$tagTablePtr{$tag}; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag) or next; my $start = $pos - $len; unless ($$tagInfo{Name} eq 'EXIFInfo') { $et->HandleTag($tagTablePtr, $tag, undef, TagInfo => $tagInfo, DataPt => $dataPt, DataPos => $$dirInfo{DataPos}, DataLen => length $$dataPt, Start => $start, Size => $len, ); next; } # validate EXIF block header and set byte order next unless $len > 14 and substr($$dataPt, $pos - $len, 6) eq "Exif\0\0"; next unless SetByteOrder(substr($$dataPt, $start + 6, 2)); # This is REALLY annoying... They use a standard TIFF offset to point to # the first IFD, but after that the offsets are relative to the start of # the IFD instead of the TIFF base, which means that I must handle it as a # special case. Dumb, dumb... $start += 14; my %dirInfo = ( DirName => 'EXIF', Parent => 'PSP', DataPt => $dataPt, DataPos => -$start, # data position relative to Base DataLen => length $$dataPt, DirStart => $start, Base => $start + $$dirInfo{DataPos}, # absolute base offset Multi => 0, ); my $exifTable = GetTagTable($$tagInfo{SubDirectory}{TagTable}); Image::ExifTool::Exif::ProcessExif($et, \%dirInfo, $exifTable); SetByteOrder('II'); } return 1; } #------------------------------------------------------------------------------ # Extract information from a PSP file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid PSP file sub ProcessPSP($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $tag, $len, $err); return 0 unless $raf->Read($buff, 32) == 32 and $buff eq "Paint Shop Pro Image File\x0a\x1a\0\0\0\0\0" and $raf->Read($buff, 4) == 4; $et->SetFileType(); SetByteOrder('II'); my $tagTablePtr = GetTagTable('Image::ExifTool::PSP::Main'); my @a = unpack('v*', $buff); # figure out block header length for this format PSP file my $hlen = $a[0] > 3 ? 10 : 14; $$et{PSPFileVersion} = $a[0]; # save for use in Condition $et->HandleTag($tagTablePtr, FileVersion => "@a"); # loop through blocks in file my $pos = 36; for (;;) { last unless $raf->Read($buff, $hlen) == $hlen; unless ($buff =~ /^~BK\0/) { $et->Warn('Lost synchronization while reading main PSP blocks'); last; } $tag = Get16u(\$buff, 4); $len = Get32u(\$buff, $hlen - 4); $pos += $hlen + $len; unless ($$tagTablePtr{$tag}) { $raf->Seek($len, 1) or $err=1, last; next; } $raf->Read($buff, $len) == $len or $err=1, last; $et->HandleTag($tagTablePtr, $tag, $buff, DataPt => \$buff, DataPos => $pos - $len, Size => $len, ); } $err and $et->Warn("Truncated main block ID=$tag len=$len"); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::PSP - Read Paint Shop Pro meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to extract information from Paint Shop Pro images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.jasc.com/support/kb/articles/pspspec.asp> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/PSP Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Qualcomm.pm�������������������������������������������������000644 �000765 �000024 �00000126671 12642461332 022040� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Qualcomm.pm # # Description: Read Qualcomm APP7 meta information # # Revisions: 2012/02/14 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::Qualcomm; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.01'; sub ProcessQualcomm($$$); sub MakeNameAndDesc($$); # Qualcomm format codes (ref PH (NC)) my @qualcommFormat = ( 'int8u', 'int8s', 'int16u', 'int16s', 'int32u', 'int32s', 'float', 'double', ); # information found in JPEG APP7 Qualcomm Camera Attributes segment %Image::ExifTool::Qualcomm::Main = ( PROCESS_PROC => \&ProcessQualcomm, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, VARS => { NO_ID => 1, NO_LOOKUP => 1 }, # too long, too many, and too obscure NOTES => q{ The tags below have been observed in the JPEG APP7 "Qualcomm Camera Attributes" segment written by some cameras such as the HP iPAQ Voice Messenger. ExifTool will extract any information found from this segment, even if it is not listed in this table. }, 'aec_current_sensor_luma' => { }, 'af_position' => { }, 'aec_current_exp_index' => { }, 'awb_sample_decision' => { }, 'asf5_enable' => { }, 'asf5_filter_mode' => { }, 'asf5_exposure_index_1' => { }, 'asf5_exposure_index_2' => { }, 'asf5_max_exposure_index' => { }, 'asf5_luma_filter[0]' => { }, 'asf5_luma_filter[1]' => { }, 'asf5_luma_filter[2]' => { }, 'asf5_luma_filter[3]' => { }, 'asf5_luma_filter[4]' => { }, 'asf5_luma_filter[5]' => { }, 'asf5_luma_filter[6]' => { }, 'asf5_luma_filter[7]' => { }, 'asf5_luma_filter[8]' => { }, 'asf5_filter1_a11' => { }, 'asf5_filter1_a12' => { }, 'asf5_filter1_a13' => { }, 'asf5_filter1_a14' => { }, 'asf5_filter1_a15' => { }, 'asf5_filter1_a21' => { }, 'asf5_filter1_a22' => { }, 'asf5_filter1_a23' => { }, 'asf5_filter1_a24' => { }, 'asf5_filter1_a25' => { }, 'asf5_filter1_a31' => { }, 'asf5_filter1_a32' => { }, 'asf5_filter1_a33' => { }, 'asf5_filter1_a34' => { }, 'asf5_filter1_a35' => { }, 'asf5_filter1_a41' => { }, 'asf5_filter1_a42' => { }, 'asf5_filter1_a43' => { }, 'asf5_filter1_a44' => { }, 'asf5_filter1_a45' => { }, 'asf5_filter1_a51' => { }, 'asf5_filter1_a52' => { }, 'asf5_filter1_a53' => { }, 'asf5_filter1_a54' => { }, 'asf5_filter1_a55' => { }, 'asf5_filter2_a11' => { }, 'asf5_filter2_a12' => { }, 'asf5_filter2_a13' => { }, 'asf5_filter2_a14' => { }, 'asf5_filter2_a15' => { }, 'asf5_filter2_a21' => { }, 'asf5_filter2_a22' => { }, 'asf5_filter2_a23' => { }, 'asf5_filter2_a24' => { }, 'asf5_filter2_a25' => { }, 'asf5_filter2_a31' => { }, 'asf5_filter2_a32' => { }, 'asf5_filter2_a33' => { }, 'asf5_filter2_a34' => { }, 'asf5_filter2_a35' => { }, 'asf5_filter2_a41' => { }, 'asf5_filter2_a42' => { }, 'asf5_filter2_a43' => { }, 'asf5_filter2_a44' => { }, 'asf5_filter2_a45' => { }, 'asf5_filter2_a51' => { }, 'asf5_filter2_a52' => { }, 'asf5_filter2_a53' => { }, 'asf5_filter2_a54' => { }, 'asf5_filter2_a55' => { }, 'asf5_nrmize_factor1' => { }, 'asf5_nrmize_factor2' => { }, 'asf5_low_lo_thres' => { }, 'asf5_low_up_thres' => { }, 'asf5_low_shrp_deg_f1' => { }, 'asf5_low_shrp_deg_f2' => { }, 'asf5_low_smth_prcnt' => { }, 'asf5_nrm_lo_thres' => { }, 'asf5_nrm_up_thres' => { }, 'asf5_nrm_shrp_deg_f1' => { }, 'asf5_nrm_shrp_deg_f2' => { }, 'asf5_nrm_smth_prcnt' => { }, 'asf5_brt_lo_thres' => { }, 'asf5_brt_up_thres' => { }, 'asf5_brt_shrp_deg_f1' => { }, 'asf5_brt_shrp_deg_f2' => { }, 'asf5_brt_smth_percent' => { }, 'asf3_enable' => { }, 'asf3_edge_filter_a11' => { }, 'asf3_edge_filter_a12' => { }, 'asf3_edge_filter_a13' => { }, 'asf3_edge_filter_a21' => { }, 'asf3_edge_filter_a22' => { }, 'asf3_edge_filter_a23' => { }, 'asf3_edge_filter_a31' => { }, 'asf3_edge_filter_a32' => { }, 'asf3_edge_filter_a33' => { }, 'asf3_noise_filter_a11' => { }, 'asf3_noise_filter_a12' => { }, 'asf3_noise_filter_a13' => { }, 'asf3_noise_filter_a21' => { }, 'asf3_noise_filter_a22' => { }, 'asf3_noise_filter_a23' => { }, 'asf3_noise_filter_a31' => { }, 'asf3_noise_filter_a32' => { }, 'asf3_noise_filter_a33' => { }, 'asf3_lower_threshold' => { }, 'asf3_upper_threshold' => { }, 'asf3_edge_detect' => { }, 'aec_enable' => { }, 'aec_mode' => { }, 'aec_aggressiveness' => { }, 'aec_luma_target' => { }, 'aec_luma_tolerance' => { }, 'aec_indoor_idx' => { }, 'aec_odoor_idx' => { }, 'aec_exposure_index_adj_step' => { }, 'aec_outdoor_gamma_index' => { }, 'aec_vfe_luma' => { }, 'aec_high_luma_region_threshold' => { }, 'aec_snapshot_sensor_gain' => { }, 'aec_snapshot_digital_gain' => { }, 'aec_snapshot_line_count' => { }, 'aec_snapshot_exposure_time_ms' => { }, 'aec_outdoor_bright_enable' => { }, 'aec_outdoor_bright_reduction' => { }, 'aec_outdoor_bright_threshold_LO' => { }, 'aec_outdoor_bright_threshold_HI' => { }, 'aec_outdoor_bright_discarded' => { }, 'aec_high_luma_region_count' => { }, 'antibanding_enable' => { }, 'anti_bading_pixel_clk' => { }, 'anti_bading_pixel_clk_per_line' => { }, 'afr_enable' => { }, 'afr_faster_0_trigger' => { }, 'afr_slower_0_trigger' => { }, 'afr_faster_0_exp_mod' => { }, 'afr_slower_0_exp_mod' => { }, 'afr_faster_1_trigger' => { }, 'afr_slower_1_trigger' => { }, 'afr_faster_1_exp_mod' => { }, 'afr_slower_1_exp_mod' => { }, 'afr_faster_2_trigger' => { }, 'afr_slower_2_trigger' => { }, 'afr_faster_2_exp_mod' => { }, 'afr_slower_2_exp_mod' => { }, 'afr_faster_3_trigger' => { }, 'afr_slower_3_trigger' => { }, 'afr_faster_3_exp_mod' => { }, 'afr_slower_3_exp_mod' => { }, 'afr_faster_4_trigger' => { }, 'afr_slower_4_trigger' => { }, 'afr_faster_4_exp_mod' => { }, 'afr_slower_4_exp_mod' => { }, 'afr_possible_frame_cnt' => { }, 'af_enable' => { }, 'af_steps_near_far' => { }, 'af_steps_near_infinity' => { }, 'af_gross_step' => { }, 'af_fine_step' => { }, 'af_fine_srch_points' => { }, 'af_process' => { }, 'af_mode' => { }, 'af_near_end' => { }, 'af_boundary' => { }, 'af_far_end' => { }, 'af_collect_end_stat' => { }, 'af_test_mode' => { }, 'af_undershoot_protect' => { }, 'af_reset_lens_after_snap' => { }, 'clip_to_af_rato' => { }, 'af_pos_def_macro' => { }, 'af_pos_def_norm' => { }, 'af_vfe_vert_offset' => { }, 'af_vfe_horz_offset' => { }, 'af_vfe_vert_height' => { }, 'af_vfe_horz_width' => { }, 'af_vfe_metric_max' => { }, 'af_trace_positions[0]' => { }, 'af_trace_positions[1]' => { }, 'af_trace_positions[2]' => { }, 'af_trace_positions[3]' => { }, 'af_trace_positions[4]' => { }, 'af_trace_positions[5]' => { }, 'af_trace_positions[6]' => { }, 'af_trace_positions[7]' => { }, 'af_trace_positions[8]' => { }, 'af_trace_positions[9]' => { }, 'af_trace_positions[10]' => { }, 'af_trace_positions[11]' => { }, 'af_trace_positions[12]' => { }, 'af_trace_positions[13]' => { }, 'af_trace_positions[14]' => { }, 'af_trace_positions[15]' => { }, 'af_trace_positions[16]' => { }, 'af_trace_positions[17]' => { }, 'af_trace_positions[18]' => { }, 'af_trace_positions[19]' => { }, 'af_trace_positions[20]' => { }, 'af_trace_positions[21]' => { }, 'af_trace_positions[22]' => { }, 'af_trace_positions[23]' => { }, 'af_trace_positions[24]' => { }, 'af_trace_positions[25]' => { }, 'af_trace_positions[26]' => { }, 'af_trace_positions[27]' => { }, 'af_trace_positions[28]' => { }, 'af_trace_positions[29]' => { }, 'af_trace_positions[30]' => { }, 'af_trace_positions[31]' => { }, 'af_trace_positions[32]' => { }, 'af_trace_positions[33]' => { }, 'af_trace_positions[34]' => { }, 'af_trace_positions[35]' => { }, 'af_trace_positions[36]' => { }, 'af_trace_positions[37]' => { }, 'af_trace_positions[38]' => { }, 'af_trace_positions[39]' => { }, 'af_trace_positions[40]' => { }, 'af_trace_positions[41]' => { }, 'af_trace_positions[42]' => { }, 'af_trace_positions[43]' => { }, 'af_trace_positions[44]' => { }, 'af_trace_positions[45]' => { }, 'af_trace_positions[46]' => { }, 'af_trace_positions[47]' => { }, 'af_trace_positions[48]' => { }, 'af_trace_positions[49]' => { }, 'af_trace_stats[0]' => { }, 'af_trace_stats[1]' => { }, 'af_trace_stats[2]' => { }, 'af_trace_stats[3]' => { }, 'af_trace_stats[4]' => { }, 'af_trace_stats[5]' => { }, 'af_trace_stats[6]' => { }, 'af_trace_stats[7]' => { }, 'af_trace_stats[8]' => { }, 'af_trace_stats[9]' => { }, 'af_trace_stats[10]' => { }, 'af_trace_stats[11]' => { }, 'af_trace_stats[12]' => { }, 'af_trace_stats[13]' => { }, 'af_trace_stats[14]' => { }, 'af_trace_stats[15]' => { }, 'af_trace_stats[16]' => { }, 'af_trace_stats[17]' => { }, 'af_trace_stats[18]' => { }, 'af_trace_stats[19]' => { }, 'af_trace_stats[20]' => { }, 'af_trace_stats[21]' => { }, 'af_trace_stats[22]' => { }, 'af_trace_stats[23]' => { }, 'af_trace_stats[24]' => { }, 'af_trace_stats[25]' => { }, 'af_trace_stats[26]' => { }, 'af_trace_stats[27]' => { }, 'af_trace_stats[28]' => { }, 'af_trace_stats[29]' => { }, 'af_trace_stats[30]' => { }, 'af_trace_stats[31]' => { }, 'af_trace_stats[32]' => { }, 'af_trace_stats[33]' => { }, 'af_trace_stats[34]' => { }, 'af_trace_stats[35]' => { }, 'af_trace_stats[36]' => { }, 'af_trace_stats[37]' => { }, 'af_trace_stats[38]' => { }, 'af_trace_stats[39]' => { }, 'af_trace_stats[40]' => { }, 'af_trace_stats[41]' => { }, 'af_trace_stats[42]' => { }, 'af_trace_stats[43]' => { }, 'af_trace_stats[44]' => { }, 'af_trace_stats[45]' => { }, 'af_trace_stats[46]' => { }, 'af_trace_stats[47]' => { }, 'af_trace_stats[48]' => { }, 'af_trace_stats[49]' => { }, 'af_focus_time' => { }, 'awb_enable' => { }, 'awb_algorithm' => { }, 'awb_aggressiveness' => { }, 'awb_red_gain_ref1' => { }, 'awb_blue_gain_ref1' => { }, 'awb_red_gain_adj_ref1' => { }, 'awb_blue_gain_adj_ref1' => { }, 'awb_red_gain_ref2' => { }, 'awb_blue_gain_ref2' => { }, 'awb_red_gain_adj_ref2' => { }, 'awb_blue_gain_adj_ref2' => { }, 'awb_red_gain_ref3' => { }, 'awb_blue_gain_ref3' => { }, 'awb_red_gain_adj_ref3' => { }, 'awb_blue_gain_adj_ref3' => { }, 'awb_red_gain_ref4' => { }, 'awb_blue_gain_ref4' => { }, 'awb_red_gain_adj_ref4' => { }, 'awb_blue_gain_adj_ref4' => { }, 'awb_red_gain_ref5' => { }, 'awb_blue_gain_ref5' => { }, 'awb_red_gain_adj_ref5' => { }, 'awb_blue_gain_adj_ref5' => { }, 'awb_red_gain_ref6' => { }, 'awb_blue_gain_ref6' => { }, 'awb_red_gain_adj_ref6' => { }, 'awb_blue_gain_adj_ref6' => { }, 'awb_red_gain_ref7' => { }, 'awb_blue_gain_ref7' => { }, 'awb_red_gain_adj_ref7' => { }, 'awb_blue_gain_adj_ref7' => { }, 'awb_red_gain_ref8' => { }, 'awb_blue_gain_ref8' => { }, 'awb_red_gain_adj_ref8' => { }, 'awb_blue_gain_adj_ref8' => { }, 'awb_lo_vfe_max_y' => { }, 'awb_lo_vfe_min_y' => { }, 'awb_lo_vfe_m1' => { }, 'awb_lo_vfe_m2' => { }, 'awb_lo_vfe_m3' => { }, 'awb_lo_vfe_m4' => { }, 'awb_lo_vfe_c1' => { }, 'awb_lo_vfe_c2' => { }, 'awb_lo_vfe_c3' => { }, 'awb_lo_vfe_c4' => { }, 'awb_norm_vfe_max_y' => { }, 'awb_norm_vfe_min_y' => { }, 'awb_norm_vfe_m1' => { }, 'awb_norm_vfe_m2' => { }, 'awb_norm_vfe_m3' => { }, 'awb_norm_vfe_m4' => { }, 'awb_norm_vfe_c1' => { }, 'awb_norm_vfe_c2' => { }, 'awb_norm_vfe_c3' => { }, 'awb_norm_vfe_c4' => { }, 'awb_oudor_vfe_max_y' => { }, 'awb_oudor_vfe_min_y' => { }, 'awb_oudor_vfe_m1' => { }, 'awb_oudor_vfe_m2' => { }, 'awb_oudor_vfe_m3' => { }, 'awb_oudor_vfe_m4' => { }, 'awb_oudor_vfe_c1' => { }, 'awb_oudor_vfe_c2' => { }, 'awb_oudor_vfe_c3' => { }, 'awb_oudor_vfe_c4' => { }, 'awb_cc_bias' => { }, 'awb_min_r_gain' => { }, 'awb_min_g_gain' => { }, 'awb_min_b_gain' => { }, 'awb_max_r_gain' => { }, 'awb_max_g_gain' => { }, 'awb_max_b_gain' => { }, 'awb_outdoor_sample_influence' => { }, 'awb_indoor_sample_influence' => { }, 'awb_low_lig_col_cor_ena' => { }, 'awb_agw_grid_dist_2_thresh' => { }, 'awb_ave_rg_ratio' => { }, 'awb_ave_bg_ratio' => { }, 'awb_compact_cluster_R2' => { }, 'outlier_distance' => { }, 'awb_green_offset_rg' => { }, 'awb_green_offset_bg' => { }, 'awb_prev_wb_rgain' => { }, 'awb_prev_wb_ggain' => { }, 'awb_prev_wb_bgain' => { }, 'awb_snapshot_r_gain' => { }, 'awb_snapshot_b_gain' => { }, 'rolloff_enable' => { }, 'r2_tl84_cx' => { }, 'r2_tl84_cy' => { }, 'r2_tl84_width' => { }, 'r2_tl84_height' => { }, 'r2_tl84_intervals' => { }, 'r2_tl84_tbl[0]' => { }, 'r2_tl84_tbl[1]' => { }, 'r2_tl84_tbl[2]' => { }, 'r2_tl84_tbl[3]' => { }, 'r2_tl84_tbl[4]' => { }, 'r2_tl84_tbl[5]' => { }, 'r2_tl84_tbl[6]' => { }, 'r2_tl84_tbl[7]' => { }, 'r2_tl84_tbl[8]' => { }, 'r2_tl84_tbl[9]' => { }, 'r2_tl84_tbl[10]' => { }, 'r2_tl84_tbl[11]' => { }, 'r2_tl84_tbl[12]' => { }, 'r2_tl84_tbl[13]' => { }, 'r2_tl84_tbl[14]' => { }, 'r2_tl84_tbl[15]' => { }, 'r2_tl84_tbl[16]' => { }, 'r2_tl84_tbl[17]' => { }, 'r2_tl84_tbl[18]' => { }, 'r2_tl84_tbl[19]' => { }, 'r2_tl84_tbl[20]' => { }, 'r2_tl84_tbl[21]' => { }, 'r2_tl84_tbl[22]' => { }, 'r2_tl84_tbl[23]' => { }, 'r2_tl84_tbl[24]' => { }, 'r2_tl84_tbl[25]' => { }, 'r2_tl84_tbl[26]' => { }, 'r2_tl84_tbl[27]' => { }, 'r2_tl84_tbl[28]' => { }, 'r2_tl84_tbl[29]' => { }, 'r2_tl84_tbl[30]' => { }, 'r2_tl84_tbl[31]' => { }, 'r2_tl84_red_ctbl[0]' => { }, 'r2_tl84_red_ctbl[1]' => { }, 'r2_tl84_red_ctbl[2]' => { }, 'r2_tl84_red_ctbl[3]' => { }, 'r2_tl84_red_ctbl[4]' => { }, 'r2_tl84_red_ctbl[5]' => { }, 'r2_tl84_red_ctbl[6]' => { }, 'r2_tl84_red_ctbl[7]' => { }, 'r2_tl84_red_ctbl[8]' => { }, 'r2_tl84_red_ctbl[9]' => { }, 'r2_tl84_red_ctbl[10]' => { }, 'r2_tl84_red_ctbl[11]' => { }, 'r2_tl84_red_ctbl[12]' => { }, 'r2_tl84_red_ctbl[13]' => { }, 'r2_tl84_red_ctbl[14]' => { }, 'r2_tl84_red_ctbl[15]' => { }, 'r2_tl84_red_ctbl[16]' => { }, 'r2_tl84_red_ctbl[17]' => { }, 'r2_tl84_red_ctbl[18]' => { }, 'r2_tl84_red_ctbl[19]' => { }, 'r2_tl84_red_ctbl[20]' => { }, 'r2_tl84_red_ctbl[21]' => { }, 'r2_tl84_red_ctbl[22]' => { }, 'r2_tl84_red_ctbl[23]' => { }, 'r2_tl84_red_ctbl[24]' => { }, 'r2_tl84_red_ctbl[25]' => { }, 'r2_tl84_red_ctbl[26]' => { }, 'r2_tl84_red_ctbl[27]' => { }, 'r2_tl84_red_ctbl[28]' => { }, 'r2_tl84_red_ctbl[29]' => { }, 'r2_tl84_red_ctbl[30]' => { }, 'r2_tl84_red_ctbl[31]' => { }, 'r2_tl84_green_ctbl[0]' => { }, 'r2_tl84_green_ctbl[1]' => { }, 'r2_tl84_green_ctbl[2]' => { }, 'r2_tl84_green_ctbl[3]' => { }, 'r2_tl84_green_ctbl[4]' => { }, 'r2_tl84_green_ctbl[5]' => { }, 'r2_tl84_green_ctbl[6]' => { }, 'r2_tl84_green_ctbl[7]' => { }, 'r2_tl84_green_ctbl[8]' => { }, 'r2_tl84_green_ctbl[9]' => { }, 'r2_tl84_green_ctbl[10]' => { }, 'r2_tl84_green_ctbl[11]' => { }, 'r2_tl84_green_ctbl[12]' => { }, 'r2_tl84_green_ctbl[13]' => { }, 'r2_tl84_green_ctbl[14]' => { }, 'r2_tl84_green_ctbl[15]' => { }, 'r2_tl84_green_ctbl[16]' => { }, 'r2_tl84_green_ctbl[17]' => { }, 'r2_tl84_green_ctbl[18]' => { }, 'r2_tl84_green_ctbl[19]' => { }, 'r2_tl84_green_ctbl[20]' => { }, 'r2_tl84_green_ctbl[21]' => { }, 'r2_tl84_green_ctbl[22]' => { }, 'r2_tl84_green_ctbl[23]' => { }, 'r2_tl84_green_ctbl[24]' => { }, 'r2_tl84_green_ctbl[25]' => { }, 'r2_tl84_green_ctbl[26]' => { }, 'r2_tl84_green_ctbl[27]' => { }, 'r2_tl84_green_ctbl[28]' => { }, 'r2_tl84_green_ctbl[29]' => { }, 'r2_tl84_green_ctbl[30]' => { }, 'r2_tl84_green_ctbl[31]' => { }, 'r2_tl84_blue_ctbl[0]' => { }, 'r2_tl84_blue_ctbl[1]' => { }, 'r2_tl84_blue_ctbl[2]' => { }, 'r2_tl84_blue_ctbl[3]' => { }, 'r2_tl84_blue_ctbl[4]' => { }, 'r2_tl84_blue_ctbl[5]' => { }, 'r2_tl84_blue_ctbl[6]' => { }, 'r2_tl84_blue_ctbl[7]' => { }, 'r2_tl84_blue_ctbl[8]' => { }, 'r2_tl84_blue_ctbl[9]' => { }, 'r2_tl84_blue_ctbl[10]' => { }, 'r2_tl84_blue_ctbl[11]' => { }, 'r2_tl84_blue_ctbl[12]' => { }, 'r2_tl84_blue_ctbl[13]' => { }, 'r2_tl84_blue_ctbl[14]' => { }, 'r2_tl84_blue_ctbl[15]' => { }, 'r2_tl84_blue_ctbl[16]' => { }, 'r2_tl84_blue_ctbl[17]' => { }, 'r2_tl84_blue_ctbl[18]' => { }, 'r2_tl84_blue_ctbl[19]' => { }, 'r2_tl84_blue_ctbl[20]' => { }, 'r2_tl84_blue_ctbl[21]' => { }, 'r2_tl84_blue_ctbl[22]' => { }, 'r2_tl84_blue_ctbl[23]' => { }, 'r2_tl84_blue_ctbl[24]' => { }, 'r2_tl84_blue_ctbl[25]' => { }, 'r2_tl84_blue_ctbl[26]' => { }, 'r2_tl84_blue_ctbl[27]' => { }, 'r2_tl84_blue_ctbl[28]' => { }, 'r2_tl84_blue_ctbl[29]' => { }, 'r2_tl84_blue_ctbl[30]' => { }, 'r2_tl84_blue_ctbl[31]' => { }, 'r2_tl84_red_stbl[0]' => { }, 'r2_tl84_red_stbl[1]' => { }, 'r2_tl84_red_stbl[2]' => { }, 'r2_tl84_red_stbl[3]' => { }, 'r2_tl84_red_stbl[4]' => { }, 'r2_tl84_red_stbl[5]' => { }, 'r2_tl84_red_stbl[6]' => { }, 'r2_tl84_red_stbl[7]' => { }, 'r2_tl84_red_stbl[8]' => { }, 'r2_tl84_red_stbl[9]' => { }, 'r2_tl84_red_stbl[10]' => { }, 'r2_tl84_red_stbl[11]' => { }, 'r2_tl84_red_stbl[12]' => { }, 'r2_tl84_red_stbl[13]' => { }, 'r2_tl84_red_stbl[14]' => { }, 'r2_tl84_red_stbl[15]' => { }, 'r2_tl84_red_stbl[16]' => { }, 'r2_tl84_red_stbl[17]' => { }, 'r2_tl84_red_stbl[18]' => { }, 'r2_tl84_red_stbl[19]' => { }, 'r2_tl84_red_stbl[20]' => { }, 'r2_tl84_red_stbl[21]' => { }, 'r2_tl84_red_stbl[22]' => { }, 'r2_tl84_red_stbl[23]' => { }, 'r2_tl84_red_stbl[24]' => { }, 'r2_tl84_red_stbl[25]' => { }, 'r2_tl84_red_stbl[26]' => { }, 'r2_tl84_red_stbl[27]' => { }, 'r2_tl84_red_stbl[28]' => { }, 'r2_tl84_red_stbl[29]' => { }, 'r2_tl84_red_stbl[30]' => { }, 'r2_tl84_red_stbl[31]' => { }, 'r2_tl84_blue_stbl[0]' => { }, 'r2_tl84_blue_stbl[1]' => { }, 'r2_tl84_blue_stbl[2]' => { }, 'r2_tl84_blue_stbl[3]' => { }, 'r2_tl84_blue_stbl[4]' => { }, 'r2_tl84_blue_stbl[5]' => { }, 'r2_tl84_blue_stbl[6]' => { }, 'r2_tl84_blue_stbl[7]' => { }, 'r2_tl84_blue_stbl[8]' => { }, 'r2_tl84_blue_stbl[9]' => { }, 'r2_tl84_blue_stbl[10]' => { }, 'r2_tl84_blue_stbl[11]' => { }, 'r2_tl84_blue_stbl[12]' => { }, 'r2_tl84_blue_stbl[13]' => { }, 'r2_tl84_blue_stbl[14]' => { }, 'r2_tl84_blue_stbl[15]' => { }, 'r2_tl84_blue_stbl[16]' => { }, 'r2_tl84_blue_stbl[17]' => { }, 'r2_tl84_blue_stbl[18]' => { }, 'r2_tl84_blue_stbl[19]' => { }, 'r2_tl84_blue_stbl[20]' => { }, 'r2_tl84_blue_stbl[21]' => { }, 'r2_tl84_blue_stbl[22]' => { }, 'r2_tl84_blue_stbl[23]' => { }, 'r2_tl84_blue_stbl[24]' => { }, 'r2_tl84_blue_stbl[25]' => { }, 'r2_tl84_blue_stbl[26]' => { }, 'r2_tl84_blue_stbl[27]' => { }, 'r2_tl84_blue_stbl[28]' => { }, 'r2_tl84_blue_stbl[29]' => { }, 'r2_tl84_blue_stbl[30]' => { }, 'r2_tl84_blue_stbl[31]' => { }, 'r2_tl84_green_stbl[0]' => { }, 'r2_tl84_green_stbl[1]' => { }, 'r2_tl84_green_stbl[2]' => { }, 'r2_tl84_green_stbl[3]' => { }, 'r2_tl84_green_stbl[4]' => { }, 'r2_tl84_green_stbl[5]' => { }, 'r2_tl84_green_stbl[6]' => { }, 'r2_tl84_green_stbl[7]' => { }, 'r2_tl84_green_stbl[8]' => { }, 'r2_tl84_green_stbl[9]' => { }, 'r2_tl84_green_stbl[10]' => { }, 'r2_tl84_green_stbl[11]' => { }, 'r2_tl84_green_stbl[12]' => { }, 'r2_tl84_green_stbl[13]' => { }, 'r2_tl84_green_stbl[14]' => { }, 'r2_tl84_green_stbl[15]' => { }, 'r2_tl84_green_stbl[16]' => { }, 'r2_tl84_green_stbl[17]' => { }, 'r2_tl84_green_stbl[18]' => { }, 'r2_tl84_green_stbl[19]' => { }, 'r2_tl84_green_stbl[20]' => { }, 'r2_tl84_green_stbl[21]' => { }, 'r2_tl84_green_stbl[22]' => { }, 'r2_tl84_green_stbl[23]' => { }, 'r2_tl84_green_stbl[24]' => { }, 'r2_tl84_green_stbl[25]' => { }, 'r2_tl84_green_stbl[26]' => { }, 'r2_tl84_green_stbl[27]' => { }, 'r2_tl84_green_stbl[28]' => { }, 'r2_tl84_green_stbl[29]' => { }, 'r2_tl84_green_stbl[30]' => { }, 'r2_tl84_green_stbl[31]' => { }, 'r2_d65_cx' => { }, 'r2_d65_cy' => { }, 'r2_d65_width' => { }, 'r2_d65_height' => { }, 'r2_d65_intervals' => { }, 'r2_d65_tbl[0]' => { }, 'r2_d65_tbl[1]' => { }, 'r2_d65_tbl[2]' => { }, 'r2_d65_tbl[3]' => { }, 'r2_d65_tbl[4]' => { }, 'r2_d65_tbl[5]' => { }, 'r2_d65_tbl[6]' => { }, 'r2_d65_tbl[7]' => { }, 'r2_d65_tbl[8]' => { }, 'r2_d65_tbl[9]' => { }, 'r2_d65_tbl[10]' => { }, 'r2_d65_tbl[11]' => { }, 'r2_d65_tbl[12]' => { }, 'r2_d65_tbl[13]' => { }, 'r2_d65_tbl[14]' => { }, 'r2_d65_tbl[15]' => { }, 'r2_d65_tbl[16]' => { }, 'r2_d65_tbl[17]' => { }, 'r2_d65_tbl[18]' => { }, 'r2_d65_tbl[19]' => { }, 'r2_d65_tbl[20]' => { }, 'r2_d65_tbl[21]' => { }, 'r2_d65_tbl[22]' => { }, 'r2_d65_tbl[23]' => { }, 'r2_d65_tbl[24]' => { }, 'r2_d65_tbl[25]' => { }, 'r2_d65_tbl[26]' => { }, 'r2_d65_tbl[27]' => { }, 'r2_d65_tbl[28]' => { }, 'r2_d65_tbl[29]' => { }, 'r2_d65_tbl[30]' => { }, 'r2_d65_tbl[31]' => { }, 'r2_d65_red_ctbl[0]' => { }, 'r2_d65_red_ctbl[1]' => { }, 'r2_d65_red_ctbl[2]' => { }, 'r2_d65_red_ctbl[3]' => { }, 'r2_d65_red_ctbl[4]' => { }, 'r2_d65_red_ctbl[5]' => { }, 'r2_d65_red_ctbl[6]' => { }, 'r2_d65_red_ctbl[7]' => { }, 'r2_d65_red_ctbl[8]' => { }, 'r2_d65_red_ctbl[9]' => { }, 'r2_d65_red_ctbl[10]' => { }, 'r2_d65_red_ctbl[11]' => { }, 'r2_d65_red_ctbl[12]' => { }, 'r2_d65_red_ctbl[13]' => { }, 'r2_d65_red_ctbl[14]' => { }, 'r2_d65_red_ctbl[15]' => { }, 'r2_d65_red_ctbl[16]' => { }, 'r2_d65_red_ctbl[17]' => { }, 'r2_d65_red_ctbl[18]' => { }, 'r2_d65_red_ctbl[19]' => { }, 'r2_d65_red_ctbl[20]' => { }, 'r2_d65_red_ctbl[21]' => { }, 'r2_d65_red_ctbl[22]' => { }, 'r2_d65_red_ctbl[23]' => { }, 'r2_d65_red_ctbl[24]' => { }, 'r2_d65_red_ctbl[25]' => { }, 'r2_d65_red_ctbl[26]' => { }, 'r2_d65_red_ctbl[27]' => { }, 'r2_d65_red_ctbl[28]' => { }, 'r2_d65_red_ctbl[29]' => { }, 'r2_d65_red_ctbl[30]' => { }, 'r2_d65_red_ctbl[31]' => { }, 'r2_d65_green_ctbl[0]' => { }, 'r2_d65_green_ctbl[1]' => { }, 'r2_d65_green_ctbl[2]' => { }, 'r2_d65_green_ctbl[3]' => { }, 'r2_d65_green_ctbl[4]' => { }, 'r2_d65_green_ctbl[5]' => { }, 'r2_d65_green_ctbl[6]' => { }, 'r2_d65_green_ctbl[7]' => { }, 'r2_d65_green_ctbl[8]' => { }, 'r2_d65_green_ctbl[9]' => { }, 'r2_d65_green_ctbl[10]' => { }, 'r2_d65_green_ctbl[11]' => { }, 'r2_d65_green_ctbl[12]' => { }, 'r2_d65_green_ctbl[13]' => { }, 'r2_d65_green_ctbl[14]' => { }, 'r2_d65_green_ctbl[15]' => { }, 'r2_d65_green_ctbl[16]' => { }, 'r2_d65_green_ctbl[17]' => { }, 'r2_d65_green_ctbl[18]' => { }, 'r2_d65_green_ctbl[19]' => { }, 'r2_d65_green_ctbl[20]' => { }, 'r2_d65_green_ctbl[21]' => { }, 'r2_d65_green_ctbl[22]' => { }, 'r2_d65_green_ctbl[23]' => { }, 'r2_d65_green_ctbl[24]' => { }, 'r2_d65_green_ctbl[25]' => { }, 'r2_d65_green_ctbl[26]' => { }, 'r2_d65_green_ctbl[27]' => { }, 'r2_d65_green_ctbl[28]' => { }, 'r2_d65_green_ctbl[29]' => { }, 'r2_d65_green_ctbl[30]' => { }, 'r2_d65_green_ctbl[31]' => { }, 'r2_d65_blue_ctbl[0]' => { }, 'r2_d65_blue_ctbl[1]' => { }, 'r2_d65_blue_ctbl[2]' => { }, 'r2_d65_blue_ctbl[3]' => { }, 'r2_d65_blue_ctbl[4]' => { }, 'r2_d65_blue_ctbl[5]' => { }, 'r2_d65_blue_ctbl[6]' => { }, 'r2_d65_blue_ctbl[7]' => { }, 'r2_d65_blue_ctbl[8]' => { }, 'r2_d65_blue_ctbl[9]' => { }, 'r2_d65_blue_ctbl[10]' => { }, 'r2_d65_blue_ctbl[11]' => { }, 'r2_d65_blue_ctbl[12]' => { }, 'r2_d65_blue_ctbl[13]' => { }, 'r2_d65_blue_ctbl[14]' => { }, 'r2_d65_blue_ctbl[15]' => { }, 'r2_d65_blue_ctbl[16]' => { }, 'r2_d65_blue_ctbl[17]' => { }, 'r2_d65_blue_ctbl[18]' => { }, 'r2_d65_blue_ctbl[19]' => { }, 'r2_d65_blue_ctbl[20]' => { }, 'r2_d65_blue_ctbl[21]' => { }, 'r2_d65_blue_ctbl[22]' => { }, 'r2_d65_blue_ctbl[23]' => { }, 'r2_d65_blue_ctbl[24]' => { }, 'r2_d65_blue_ctbl[25]' => { }, 'r2_d65_blue_ctbl[26]' => { }, 'r2_d65_blue_ctbl[27]' => { }, 'r2_d65_blue_ctbl[28]' => { }, 'r2_d65_blue_ctbl[29]' => { }, 'r2_d65_blue_ctbl[30]' => { }, 'r2_d65_blue_ctbl[31]' => { }, 'r2_d65_red_stbl[0]' => { }, 'r2_d65_red_stbl[1]' => { }, 'r2_d65_red_stbl[2]' => { }, 'r2_d65_red_stbl[3]' => { }, 'r2_d65_red_stbl[4]' => { }, 'r2_d65_red_stbl[5]' => { }, 'r2_d65_red_stbl[6]' => { }, 'r2_d65_red_stbl[7]' => { }, 'r2_d65_red_stbl[8]' => { }, 'r2_d65_red_stbl[9]' => { }, 'r2_d65_red_stbl[10]' => { }, 'r2_d65_red_stbl[11]' => { }, 'r2_d65_red_stbl[12]' => { }, 'r2_d65_red_stbl[13]' => { }, 'r2_d65_red_stbl[14]' => { }, 'r2_d65_red_stbl[15]' => { }, 'r2_d65_red_stbl[16]' => { }, 'r2_d65_red_stbl[17]' => { }, 'r2_d65_red_stbl[18]' => { }, 'r2_d65_red_stbl[19]' => { }, 'r2_d65_red_stbl[20]' => { }, 'r2_d65_red_stbl[21]' => { }, 'r2_d65_red_stbl[22]' => { }, 'r2_d65_red_stbl[23]' => { }, 'r2_d65_red_stbl[24]' => { }, 'r2_d65_red_stbl[25]' => { }, 'r2_d65_red_stbl[26]' => { }, 'r2_d65_red_stbl[27]' => { }, 'r2_d65_red_stbl[28]' => { }, 'r2_d65_red_stbl[29]' => { }, 'r2_d65_red_stbl[30]' => { }, 'r2_d65_red_stbl[31]' => { }, 'r2_d65_blue_stbl[0]' => { }, 'r2_d65_blue_stbl[1]' => { }, 'r2_d65_blue_stbl[2]' => { }, 'r2_d65_blue_stbl[3]' => { }, 'r2_d65_blue_stbl[4]' => { }, 'r2_d65_blue_stbl[5]' => { }, 'r2_d65_blue_stbl[6]' => { }, 'r2_d65_blue_stbl[7]' => { }, 'r2_d65_blue_stbl[8]' => { }, 'r2_d65_blue_stbl[9]' => { }, 'r2_d65_blue_stbl[10]' => { }, 'r2_d65_blue_stbl[11]' => { }, 'r2_d65_blue_stbl[12]' => { }, 'r2_d65_blue_stbl[13]' => { }, 'r2_d65_blue_stbl[14]' => { }, 'r2_d65_blue_stbl[15]' => { }, 'r2_d65_blue_stbl[16]' => { }, 'r2_d65_blue_stbl[17]' => { }, 'r2_d65_blue_stbl[18]' => { }, 'r2_d65_blue_stbl[19]' => { }, 'r2_d65_blue_stbl[20]' => { }, 'r2_d65_blue_stbl[21]' => { }, 'r2_d65_blue_stbl[22]' => { }, 'r2_d65_blue_stbl[23]' => { }, 'r2_d65_blue_stbl[24]' => { }, 'r2_d65_blue_stbl[25]' => { }, 'r2_d65_blue_stbl[26]' => { }, 'r2_d65_blue_stbl[27]' => { }, 'r2_d65_blue_stbl[28]' => { }, 'r2_d65_blue_stbl[29]' => { }, 'r2_d65_blue_stbl[30]' => { }, 'r2_d65_blue_stbl[31]' => { }, 'r2_d65_green_stbl[0]' => { }, 'r2_d65_green_stbl[1]' => { }, 'r2_d65_green_stbl[2]' => { }, 'r2_d65_green_stbl[3]' => { }, 'r2_d65_green_stbl[4]' => { }, 'r2_d65_green_stbl[5]' => { }, 'r2_d65_green_stbl[6]' => { }, 'r2_d65_green_stbl[7]' => { }, 'r2_d65_green_stbl[8]' => { }, 'r2_d65_green_stbl[9]' => { }, 'r2_d65_green_stbl[10]' => { }, 'r2_d65_green_stbl[11]' => { }, 'r2_d65_green_stbl[12]' => { }, 'r2_d65_green_stbl[13]' => { }, 'r2_d65_green_stbl[14]' => { }, 'r2_d65_green_stbl[15]' => { }, 'r2_d65_green_stbl[16]' => { }, 'r2_d65_green_stbl[17]' => { }, 'r2_d65_green_stbl[18]' => { }, 'r2_d65_green_stbl[19]' => { }, 'r2_d65_green_stbl[20]' => { }, 'r2_d65_green_stbl[21]' => { }, 'r2_d65_green_stbl[22]' => { }, 'r2_d65_green_stbl[23]' => { }, 'r2_d65_green_stbl[24]' => { }, 'r2_d65_green_stbl[25]' => { }, 'r2_d65_green_stbl[26]' => { }, 'r2_d65_green_stbl[27]' => { }, 'r2_d65_green_stbl[28]' => { }, 'r2_d65_green_stbl[29]' => { }, 'r2_d65_green_stbl[30]' => { }, 'r2_d65_green_stbl[31]' => { }, 'r2_a_cx' => { }, 'r2_a_cy' => { }, 'r2_a_width' => { }, 'r2_a_height' => { }, 'r2_a_intervals' => { }, 'r2_a_tbl[0]' => { }, 'r2_a_tbl[1]' => { }, 'r2_a_tbl[2]' => { }, 'r2_a_tbl[3]' => { }, 'r2_a_tbl[4]' => { }, 'r2_a_tbl[5]' => { }, 'r2_a_tbl[6]' => { }, 'r2_a_tbl[7]' => { }, 'r2_a_tbl[8]' => { }, 'r2_a_tbl[9]' => { }, 'r2_a_tbl[10]' => { }, 'r2_a_tbl[11]' => { }, 'r2_a_tbl[12]' => { }, 'r2_a_tbl[13]' => { }, 'r2_a_tbl[14]' => { }, 'r2_a_tbl[15]' => { }, 'r2_a_tbl[16]' => { }, 'r2_a_tbl[17]' => { }, 'r2_a_tbl[18]' => { }, 'r2_a_tbl[19]' => { }, 'r2_a_tbl[20]' => { }, 'r2_a_tbl[21]' => { }, 'r2_a_tbl[22]' => { }, 'r2_a_tbl[23]' => { }, 'r2_a_tbl[24]' => { }, 'r2_a_tbl[25]' => { }, 'r2_a_tbl[26]' => { }, 'r2_a_tbl[27]' => { }, 'r2_a_tbl[28]' => { }, 'r2_a_tbl[29]' => { }, 'r2_a_tbl[30]' => { }, 'r2_a_tbl[31]' => { }, 'r2_a_red_ctbl[0]' => { }, 'r2_a_red_ctbl[1]' => { }, 'r2_a_red_ctbl[2]' => { }, 'r2_a_red_ctbl[3]' => { }, 'r2_a_red_ctbl[4]' => { }, 'r2_a_red_ctbl[5]' => { }, 'r2_a_red_ctbl[6]' => { }, 'r2_a_red_ctbl[7]' => { }, 'r2_a_red_ctbl[8]' => { }, 'r2_a_red_ctbl[9]' => { }, 'r2_a_red_ctbl[10]' => { }, 'r2_a_red_ctbl[11]' => { }, 'r2_a_red_ctbl[12]' => { }, 'r2_a_red_ctbl[13]' => { }, 'r2_a_red_ctbl[14]' => { }, 'r2_a_red_ctbl[15]' => { }, 'r2_a_red_ctbl[16]' => { }, 'r2_a_red_ctbl[17]' => { }, 'r2_a_red_ctbl[18]' => { }, 'r2_a_red_ctbl[19]' => { }, 'r2_a_red_ctbl[20]' => { }, 'r2_a_red_ctbl[21]' => { }, 'r2_a_red_ctbl[22]' => { }, 'r2_a_red_ctbl[23]' => { }, 'r2_a_red_ctbl[24]' => { }, 'r2_a_red_ctbl[25]' => { }, 'r2_a_red_ctbl[26]' => { }, 'r2_a_red_ctbl[27]' => { }, 'r2_a_red_ctbl[28]' => { }, 'r2_a_red_ctbl[29]' => { }, 'r2_a_red_ctbl[30]' => { }, 'r2_a_red_ctbl[31]' => { }, 'r2_a_green_ctbl[0]' => { }, 'r2_a_green_ctbl[1]' => { }, 'r2_a_green_ctbl[2]' => { }, 'r2_a_green_ctbl[3]' => { }, 'r2_a_green_ctbl[4]' => { }, 'r2_a_green_ctbl[5]' => { }, 'r2_a_green_ctbl[6]' => { }, 'r2_a_green_ctbl[7]' => { }, 'r2_a_green_ctbl[8]' => { }, 'r2_a_green_ctbl[9]' => { }, 'r2_a_green_ctbl[10]' => { }, 'r2_a_green_ctbl[11]' => { }, 'r2_a_green_ctbl[12]' => { }, 'r2_a_green_ctbl[13]' => { }, 'r2_a_green_ctbl[14]' => { }, 'r2_a_green_ctbl[15]' => { }, 'r2_a_green_ctbl[16]' => { }, 'r2_a_green_ctbl[17]' => { }, 'r2_a_green_ctbl[18]' => { }, 'r2_a_green_ctbl[19]' => { }, 'r2_a_green_ctbl[20]' => { }, 'r2_a_green_ctbl[21]' => { }, 'r2_a_green_ctbl[22]' => { }, 'r2_a_green_ctbl[23]' => { }, 'r2_a_green_ctbl[24]' => { }, 'r2_a_green_ctbl[25]' => { }, 'r2_a_green_ctbl[26]' => { }, 'r2_a_green_ctbl[27]' => { }, 'r2_a_green_ctbl[28]' => { }, 'r2_a_green_ctbl[29]' => { }, 'r2_a_green_ctbl[30]' => { }, 'r2_a_green_ctbl[31]' => { }, 'r2_a_blue_ctbl[0]' => { }, 'r2_a_blue_ctbl[1]' => { }, 'r2_a_blue_ctbl[2]' => { }, 'r2_a_blue_ctbl[3]' => { }, 'r2_a_blue_ctbl[4]' => { }, 'r2_a_blue_ctbl[5]' => { }, 'r2_a_blue_ctbl[6]' => { }, 'r2_a_blue_ctbl[7]' => { }, 'r2_a_blue_ctbl[8]' => { }, 'r2_a_blue_ctbl[9]' => { }, 'r2_a_blue_ctbl[10]' => { }, 'r2_a_blue_ctbl[11]' => { }, 'r2_a_blue_ctbl[12]' => { }, 'r2_a_blue_ctbl[13]' => { }, 'r2_a_blue_ctbl[14]' => { }, 'r2_a_blue_ctbl[15]' => { }, 'r2_a_blue_ctbl[16]' => { }, 'r2_a_blue_ctbl[17]' => { }, 'r2_a_blue_ctbl[18]' => { }, 'r2_a_blue_ctbl[19]' => { }, 'r2_a_blue_ctbl[20]' => { }, 'r2_a_blue_ctbl[21]' => { }, 'r2_a_blue_ctbl[22]' => { }, 'r2_a_blue_ctbl[23]' => { }, 'r2_a_blue_ctbl[24]' => { }, 'r2_a_blue_ctbl[25]' => { }, 'r2_a_blue_ctbl[26]' => { }, 'r2_a_blue_ctbl[27]' => { }, 'r2_a_blue_ctbl[28]' => { }, 'r2_a_blue_ctbl[29]' => { }, 'r2_a_blue_ctbl[30]' => { }, 'r2_a_blue_ctbl[31]' => { }, 'r2_a_red_stbl[0]' => { }, 'r2_a_red_stbl[1]' => { }, 'r2_a_red_stbl[2]' => { }, 'r2_a_red_stbl[3]' => { }, 'r2_a_red_stbl[4]' => { }, 'r2_a_red_stbl[5]' => { }, 'r2_a_red_stbl[6]' => { }, 'r2_a_red_stbl[7]' => { }, 'r2_a_red_stbl[8]' => { }, 'r2_a_red_stbl[9]' => { }, 'r2_a_red_stbl[10]' => { }, 'r2_a_red_stbl[11]' => { }, 'r2_a_red_stbl[12]' => { }, 'r2_a_red_stbl[13]' => { }, 'r2_a_red_stbl[14]' => { }, 'r2_a_red_stbl[15]' => { }, 'r2_a_red_stbl[16]' => { }, 'r2_a_red_stbl[17]' => { }, 'r2_a_red_stbl[18]' => { }, 'r2_a_red_stbl[19]' => { }, 'r2_a_red_stbl[20]' => { }, 'r2_a_red_stbl[21]' => { }, 'r2_a_red_stbl[22]' => { }, 'r2_a_red_stbl[23]' => { }, 'r2_a_red_stbl[24]' => { }, 'r2_a_red_stbl[25]' => { }, 'r2_a_red_stbl[26]' => { }, 'r2_a_red_stbl[27]' => { }, 'r2_a_red_stbl[28]' => { }, 'r2_a_red_stbl[29]' => { }, 'r2_a_red_stbl[30]' => { }, 'r2_a_red_stbl[31]' => { }, 'r2_a_blue_stbl[0]' => { }, 'r2_a_blue_stbl[1]' => { }, 'r2_a_blue_stbl[2]' => { }, 'r2_a_blue_stbl[3]' => { }, 'r2_a_blue_stbl[4]' => { }, 'r2_a_blue_stbl[5]' => { }, 'r2_a_blue_stbl[6]' => { }, 'r2_a_blue_stbl[7]' => { }, 'r2_a_blue_stbl[8]' => { }, 'r2_a_blue_stbl[9]' => { }, 'r2_a_blue_stbl[10]' => { }, 'r2_a_blue_stbl[11]' => { }, 'r2_a_blue_stbl[12]' => { }, 'r2_a_blue_stbl[13]' => { }, 'r2_a_blue_stbl[14]' => { }, 'r2_a_blue_stbl[15]' => { }, 'r2_a_blue_stbl[16]' => { }, 'r2_a_blue_stbl[17]' => { }, 'r2_a_blue_stbl[18]' => { }, 'r2_a_blue_stbl[19]' => { }, 'r2_a_blue_stbl[20]' => { }, 'r2_a_blue_stbl[21]' => { }, 'r2_a_blue_stbl[22]' => { }, 'r2_a_blue_stbl[23]' => { }, 'r2_a_blue_stbl[24]' => { }, 'r2_a_blue_stbl[25]' => { }, 'r2_a_blue_stbl[26]' => { }, 'r2_a_blue_stbl[27]' => { }, 'r2_a_blue_stbl[28]' => { }, 'r2_a_blue_stbl[29]' => { }, 'r2_a_blue_stbl[30]' => { }, 'r2_a_blue_stbl[31]' => { }, 'r2_a_green_stbl[0]' => { }, 'r2_a_green_stbl[1]' => { }, 'r2_a_green_stbl[2]' => { }, 'r2_a_green_stbl[3]' => { }, 'r2_a_green_stbl[4]' => { }, 'r2_a_green_stbl[5]' => { }, 'r2_a_green_stbl[6]' => { }, 'r2_a_green_stbl[7]' => { }, 'r2_a_green_stbl[8]' => { }, 'r2_a_green_stbl[9]' => { }, 'r2_a_green_stbl[10]' => { }, 'r2_a_green_stbl[11]' => { }, 'r2_a_green_stbl[12]' => { }, 'r2_a_green_stbl[13]' => { }, 'r2_a_green_stbl[14]' => { }, 'r2_a_green_stbl[15]' => { }, 'r2_a_green_stbl[16]' => { }, 'r2_a_green_stbl[17]' => { }, 'r2_a_green_stbl[18]' => { }, 'r2_a_green_stbl[19]' => { }, 'r2_a_green_stbl[20]' => { }, 'r2_a_green_stbl[21]' => { }, 'r2_a_green_stbl[22]' => { }, 'r2_a_green_stbl[23]' => { }, 'r2_a_green_stbl[24]' => { }, 'r2_a_green_stbl[25]' => { }, 'r2_a_green_stbl[26]' => { }, 'r2_a_green_stbl[27]' => { }, 'r2_a_green_stbl[28]' => { }, 'r2_a_green_stbl[29]' => { }, 'r2_a_green_stbl[30]' => { }, 'r2_a_green_stbl[31]' => { }, 'def_cor_c0' => { }, 'def_cor_c1' => { }, 'def_cor_c2' => { }, 'def_cor_c3' => { }, 'def_cor_c4' => { }, 'def_cor_c5' => { }, 'def_cor_c6' => { }, 'def_cor_c7' => { }, 'def_cor_c8' => { }, 'def_cor_k0' => { }, 'def_cor_k1' => { }, 'def_cor_k2' => { }, 'yhi_ylo_cor_c0' => { }, 'yhi_ylo_cor_c1' => { }, 'yhi_ylo_cor_c2' => { }, 'yhi_ylo_cor_c3' => { }, 'yhi_ylo_cor_c4' => { }, 'yhi_ylo_cor_c5' => { }, 'yhi_ylo_cor_c6' => { }, 'yhi_ylo_cor_c7' => { }, 'yhi_ylo_cor_c8' => { }, 'yhi_ylo_cor_k0' => { }, 'yhi_ylo_cor_k1' => { }, 'yhi_ylo_cor_k2' => { }, 'def_conv_chrm_a_m' => { }, 'def_conv_chrm_a_p' => { }, 'def_conv_chrm_b_m' => { }, 'def_conv_chrm_b_p' => { }, 'def_conv_chrm_c_m' => { }, 'def_conv_chrm_c_p' => { }, 'def_conv_chrm_d_m' => { }, 'def_conv_chrm_d_p' => { }, 'def_conv_chrm_k_cb' => { }, 'def_conv_chrm_k_cr' => { }, 'def_conv_luma_v0' => { }, 'def_conv_luma_v1' => { }, 'def_conv_luma_v2' => { }, 'def_conv_luma_k' => { }, 'tl84_conv_chrm_a_m' => { }, 'tl84_conv_chrm_a_p' => { }, 'tl84_conv_chrm_b_m' => { }, 'tl84_conv_chrm_b_p' => { }, 'tl84_conv_chrm_c_m' => { }, 'tl84_conv_chrm_c_p' => { }, 'tl84_conv_chrm_d_m' => { }, 'tl84_conv_chrm_d_p' => { }, 'tl84_conv_chrm_k_cb' => { }, 'tl84_conv_chrm_k_cr' => { }, 'tl84_conv_luma_v0' => { }, 'tl84_conv_luma_v1' => { }, 'tl84_conv_luma_v2' => { }, 'tl84_conv_luma_k' => { }, 'incand_conv_chrm_a_m' => { }, 'incand_conv_chrm_a_p' => { }, 'incand_conv_chrm_b_m' => { }, 'incand_conv_chrm_b_p' => { }, 'incand_conv_chrm_c_m' => { }, 'incand_conv_chrm_c_p' => { }, 'incand_conv_chrm_d_m' => { }, 'incand_conv_chrm_d_p' => { }, 'incand_conv_chrm_k_cb' => { }, 'incand_conv_chrm_k_cr' => { }, 'incand_conv_luma_v0' => { }, 'incand_conv_luma_v1' => { }, 'incand_conv_luma_v2' => { }, 'incand_conv_luma_k' => { }, 'daylt_conv_chrm_a_m' => { }, 'daylt_conv_chrm_a_p' => { }, 'daylt_conv_chrm_b_m' => { }, 'daylt_conv_chrm_b_p' => { }, 'daylt_conv_chrm_c_m' => { }, 'daylt_conv_chrm_c_p' => { }, 'daylt_conv_chrm_d_m' => { }, 'daylt_conv_chrm_d_p' => { }, 'daylt_conv_chrm_k_cb' => { }, 'daylt_conv_chrm_k_cr' => { }, 'daylt_conv_luma_v0' => { }, 'daylt_conv_luma_v1' => { }, 'daylt_conv_luma_v2' => { }, 'daylt_conv_luma_k' => { }, 'yhi_ylo_conv_chrm_a_m' => { }, 'yhi_ylo_conv_chrm_a_p' => { }, 'yhi_ylo_conv_chrm_b_m' => { }, 'yhi_ylo_conv_chrm_b_p' => { }, 'yhi_ylo_conv_chrm_c_m' => { }, 'yhi_ylo_conv_chrm_c_p' => { }, 'yhi_ylo_conv_chrm_d_m' => { }, 'yhi_ylo_conv_chrm_d_p' => { }, 'yhi_ylo_conv_chrm_k_cb' => { }, 'yhi_ylo_conv_chrm_k_cr' => { }, 'yhi_ylo_conv_luma_v0' => { }, 'yhi_ylo_conv_luma_v1' => { }, 'yhi_ylo_conv_luma_v2' => { }, 'yhi_ylo_conv_luma_k' => { }, 'gamma_enable' => { }, 'def_luma_gamma_mode' => { }, 'def_rgb_gamma_mode' => { }, 'blck_lvl_even_cols' => { }, 'blck_lvl_odd_cols' => { }, 'defect_pix_min_thresh' => { }, 'defect_pix_max_thresh' => { }, 'defect_pix_cor_enable' => { }, 'prview_resol' => { }, 'snapshot_resol' => { }, 'curr_resol' => { }, 'sensor_fmt' => { }, 'discard_frst_frm' => { }, 'frm_skip_pttrn' => { }, 'sensor_type' => { }, 'max_video_fps' => { }, 'video_fps' => { }, 'max_prview_fps' => { }, 'prview_fps' => { }, 'nghtsht_fps' => { }, 'sensr_ful_wdth' => { }, 'sensr_ful_hght' => { }, 'sensr_qtr_wdth' => { }, 'sensr_qtr_hght' => { }, 'nightshot_mode' => { }, 'pclk_invert' => { }, 'cam_mclk_hz' => { }, 'chrom_supress' => { }, 'chro_sup_luma_thres_1' => { }, 'chro_sup_luma_thres_2' => { }, 'chro_sup_luma_thres_3' => { }, 'chro_sup_luma_thres_4' => { }, 'chro_sup_chro_thres_1' => { }, 'chro_sup_chro_thres_2' => { }, 'la_detect' => { }, 'la_enable' => { }, 'HJR_enable' => { }, 'HJR_max_num_frames' => { }, 'HJR_one_to_two_offset' => { }, 'HJR_n_reduction_flat' => { }, 'HJR_n_reduction_texture' => { }, 'HJR_texture_threshold' => { }, ); # generate tag names and descriptions { local $_; my $table = \%Image::ExifTool::Qualcomm::Main; MakeNameAndDesc($_, $$table{$_}) foreach TagTableKeys($table); } #------------------------------------------------------------------------------ # Generate tag Name and Description from a Qualcomm tag ID # Inputs: 0) tag ID, 1) tagInfo ref # Returns: true on success sub MakeNameAndDesc($$) { local $_ = shift; my $tagInfo = shift; # capitalize various leading acronyms or just first letter... s/^(asf|awb|aec|afr|af_|la_|r2_tl|tl)/\U$1/ or $_ = ucfirst; s/_([a-z])/_\u$1/g; # capitalize first letter of each word s/\[(\d+)\]$/sprintf("_%.2d",$1)/e; # use 2-digit subscripts (and remove brackets) tr/-_a-zA-Z0-9//dc; # delete invalid characters my $desc = $_; # convert underlines to spaces in description if ($desc =~ tr/_/ /) { # remove unnecessary underlines from tag name... s/_([A-Z][a-z])/$1/g; s/([a-z0-9])_([A-Z])/$1$2/g; s/([A-Za-z])_(\d)/$1$2/g; } return 0 unless length; $$tagInfo{Name} = $_; $$tagInfo{Description} = $desc; return 1; } #------------------------------------------------------------------------------ # Process Qualcomm APP7 metadata (ref PH) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessQualcomm($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos}; my $pos = $$dirInfo{DirStart}; my $dirEnd = $pos + $$dirInfo{DirLen}; $et->VerboseDir('Qualcomm', undef, $$dirInfo{DirLen}); SetByteOrder('II'); while ($pos + 3 < $dirEnd) { my $valLen = Get16u($dataPt, $pos); my $tagLen = Get8u($dataPt, $pos + 2); last if $pos + 8 + $tagLen + $valLen > $dirEnd; my $tag = substr($$dataPt, $pos + 3, $tagLen); $pos += 3 + $tagLen; # point to format byte my $fmt = Get8u($dataPt, $pos); # (not sure what these counts are for -- both are always 1 in my samples) #my $cnt1 = Get16u($dataPt, $pos + 1); #my $cnt2 = Get16u($dataPt, $pos + 3); $pos += 5; # point to start of value data my ($val, $format); if ($fmt <= 7) { $format = $qualcommFormat[$fmt]; $val = ReadValue($dataPt, $pos, $format, undef, $valLen); } else { $format = "format $fmt"; my $value = substr($$dataPt, $pos, $valLen); $val = \$value; } unless (defined $$tagTablePtr{$tag} or $Image::ExifTool::specialTags{$tag}) { my %tagInfo; if (MakeNameAndDesc($tag, \%tagInfo)) { $et->VPrint(0, $$et{INDENT}, "[adding Qualcomm:$tagInfo{Name}]\n"); AddTagToTable($tagTablePtr, $tag, \%tagInfo); } } $et->HandleTag($tagTablePtr, $tag, $val, DataPt => $dataPt, DataPos => $dataPos, Start => $pos, Size => $valLen, Format => $format, ); $pos += $valLen; # point to start of next entry } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::Qualcomm - Read Qualcomm APP7 meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read information from the Qualcomm APP7 segment in JPEG images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/Qualcomm Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/QuickTime.pm������������������������������������������������000644 �000765 �000024 �00001064324 12642461333 022153� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: QuickTime.pm # # Description: Read QuickTime, MP4 and M4A meta information # # Revisions: 10/04/2005 - P. Harvey Created # 12/19/2005 - P. Harvey Added MP4 support # 09/22/2006 - P. Harvey Added M4A support # 07/27/2010 - P. Harvey Updated to 2010-05-03 QuickTime spec # # References: # # 1) http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html # 2) http://search.cpan.org/dist/MP4-Info-1.04/ # 3) http://www.geocities.com/xhelmboyx/quicktime/formats/mp4-layout.txt # 4) http://wiki.multimedia.cx/index.php?title=Apple_QuickTime # 5) ISO 14496-12 (http://read.pudn.com/downloads64/ebook/226547/ISO_base_media_file_format.pdf) # 6) ISO 14496-16 (http://www.iec-normen.de/previewpdf/info_isoiec14496-16%7Bed2.0%7Den.pdf) # 7) http://atomicparsley.sourceforge.net/mpeg-4files.html # 8) http://wiki.multimedia.cx/index.php?title=QuickTime_container # 9) http://www.adobe.com/devnet/xmp/pdfs/XMPSpecificationPart3.pdf (Oct 2008) # 10) http://code.google.com/p/mp4v2/wiki/iTunesMetadata # 11) http://www.canieti.com.mx/assets/files/1011/IEC_100_1384_DC.pdf # 12) QuickTime file format specification 2010-05-03 # 13) http://www.adobe.com/devnet/flv/pdf/video_file_format_spec_v10.pdf # 14) http://standards.iso.org/ittf/PubliclyAvailableStandards/c051533_ISO_IEC_14496-12_2008.zip # 15) http://getid3.sourceforge.net/source/module.audio-video.quicktime.phps # 16) http://qtra.apple.com/atoms.html # 17) http://www.etsi.org/deliver/etsi_ts/126200_126299/126244/10.01.00_60/ts_126244v100100p.pdf # 18) https://github.com/appsec-labs/iNalyzer/blob/master/scinfo.m # 19) http://nah6.com/~itsme/cvs-xdadevtools/iphone/tools/decodesinf.pl # 20) https://developer.apple.com/legacy/library/documentation/quicktime/reference/QT7-1_Update_Reference/QT7-1_Update_Reference.pdf # 21) Francois Bonzon private communication # 22) https://developer.apple.com/library/mac/documentation/QuickTime/QTFF/Metadata/Metadata.html #------------------------------------------------------------------------------ package Image::ExifTool::QuickTime; use strict; use vars qw($VERSION $AUTOLOAD); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.94'; sub FixWrongFormat($); sub ProcessMOV($$;$); sub ProcessKeys($$$); sub ProcessMetaData($$$); sub ProcessEncodingParams($$$); sub ProcessHybrid($$$); sub ProcessRights($$$); sub ConvertISO6709($); sub ConvertChapterList($); sub PrintChapter($); sub PrintGPSCoordinates($); sub UnpackLang($); sub WriteQuickTime($$$); sub WriteMOV($$); # MIME types for all entries in the ftypLookup with file extensions # (defaults to 'video/mp4' if not found in this lookup) my %mimeLookup = ( '3G2' => 'video/3gpp2', '3GP' => 'video/3gpp', AAX => 'audio/vnd.audible.aax', DVB => 'video/vnd.dvb.file', F4A => 'audio/mp4', F4B => 'audio/mp4', JP2 => 'image/jp2', JPM => 'image/jpm', JPX => 'image/jpx', M4A => 'audio/mp4', M4B => 'audio/mp4', M4P => 'audio/mp4', M4V => 'video/x-m4v', MOV => 'video/quicktime', MQV => 'video/quicktime', ); # look up file type from ftyp atom type, with MIME type in comment if known # (ref http://www.ftyps.com/) my %ftypLookup = ( '3g2a' => '3GPP2 Media (.3G2) compliant with 3GPP2 C.S0050-0 V1.0', # video/3gpp2 '3g2b' => '3GPP2 Media (.3G2) compliant with 3GPP2 C.S0050-A V1.0.0', # video/3gpp2 '3g2c' => '3GPP2 Media (.3G2) compliant with 3GPP2 C.S0050-B v1.0', # video/3gpp2 '3ge6' => '3GPP (.3GP) Release 6 MBMS Extended Presentations', # video/3gpp '3ge7' => '3GPP (.3GP) Release 7 MBMS Extended Presentations', # video/3gpp '3gg6' => '3GPP Release 6 General Profile', # video/3gpp '3gp1' => '3GPP Media (.3GP) Release 1 (probably non-existent)', # video/3gpp '3gp2' => '3GPP Media (.3GP) Release 2 (probably non-existent)', # video/3gpp '3gp3' => '3GPP Media (.3GP) Release 3 (probably non-existent)', # video/3gpp '3gp4' => '3GPP Media (.3GP) Release 4', # video/3gpp '3gp5' => '3GPP Media (.3GP) Release 5', # video/3gpp '3gp6' => '3GPP Media (.3GP) Release 6 Basic Profile', # video/3gpp '3gp6' => '3GPP Media (.3GP) Release 6 Progressive Download', # video/3gpp '3gp6' => '3GPP Media (.3GP) Release 6 Streaming Servers', # video/3gpp '3gs7' => '3GPP Media (.3GP) Release 7 Streaming Servers', # video/3gpp 'aax ' => 'Audible Enhanced Audiobook (.AAX)', #PH 'avc1' => 'MP4 Base w/ AVC ext [ISO 14496-12:2005]', # video/mp4 'CAEP' => 'Canon Digital Camera', 'caqv' => 'Casio Digital Camera', 'CDes' => 'Convergent Design', 'da0a' => 'DMB MAF w/ MPEG Layer II aud, MOT slides, DLS, JPG/PNG/MNG images', 'da0b' => 'DMB MAF, extending DA0A, with 3GPP timed text, DID, TVA, REL, IPMP', 'da1a' => 'DMB MAF audio with ER-BSAC audio, JPG/PNG/MNG images', 'da1b' => 'DMB MAF, extending da1a, with 3GPP timed text, DID, TVA, REL, IPMP', 'da2a' => 'DMB MAF aud w/ HE-AAC v2 aud, MOT slides, DLS, JPG/PNG/MNG images', 'da2b' => 'DMB MAF, extending da2a, with 3GPP timed text, DID, TVA, REL, IPMP', 'da3a' => 'DMB MAF aud with HE-AAC aud, JPG/PNG/MNG images', 'da3b' => 'DMB MAF, extending da3a w/ BIFS, 3GPP timed text, DID, TVA, REL, IPMP', 'dmb1' => 'DMB MAF supporting all the components defined in the specification', 'dmpf' => 'Digital Media Project', # various 'drc1' => 'Dirac (wavelet compression), encapsulated in ISO base media (MP4)', 'dv1a' => 'DMB MAF vid w/ AVC vid, ER-BSAC aud, BIFS, JPG/PNG/MNG images, TS', 'dv1b' => 'DMB MAF, extending dv1a, with 3GPP timed text, DID, TVA, REL, IPMP', 'dv2a' => 'DMB MAF vid w/ AVC vid, HE-AAC v2 aud, BIFS, JPG/PNG/MNG images, TS', 'dv2b' => 'DMB MAF, extending dv2a, with 3GPP timed text, DID, TVA, REL, IPMP', 'dv3a' => 'DMB MAF vid w/ AVC vid, HE-AAC aud, BIFS, JPG/PNG/MNG images, TS', 'dv3b' => 'DMB MAF, extending dv3a, with 3GPP timed text, DID, TVA, REL, IPMP', 'dvr1' => 'DVB (.DVB) over RTP', # video/vnd.dvb.file 'dvt1' => 'DVB (.DVB) over MPEG-2 Transport Stream', # video/vnd.dvb.file 'F4A ' => 'Audio for Adobe Flash Player 9+ (.F4A)', # audio/mp4 'F4B ' => 'Audio Book for Adobe Flash Player 9+ (.F4B)', # audio/mp4 'F4P ' => 'Protected Video for Adobe Flash Player 9+ (.F4P)', # video/mp4 'F4V ' => 'Video for Adobe Flash Player 9+ (.F4V)', # video/mp4 'isc2' => 'ISMACryp 2.0 Encrypted File', # ?/enc-isoff-generic 'iso2' => 'MP4 Base Media v2 [ISO 14496-12:2005]', # video/mp4 'isom' => 'MP4 Base Media v1 [IS0 14496-12:2003]', # video/mp4 'JP2 ' => 'JPEG 2000 Image (.JP2) [ISO 15444-1 ?]', # image/jp2 'JP20' => 'Unknown, from GPAC samples (prob non-existent)', 'jpm ' => 'JPEG 2000 Compound Image (.JPM) [ISO 15444-6]', # image/jpm 'jpx ' => 'JPEG 2000 with extensions (.JPX) [ISO 15444-2]', # image/jpx 'KDDI' => '3GPP2 EZmovie for KDDI 3G cellphones', # video/3gpp2 #LCAG => (found in CompatibleBrands of Leica MOV videos) 'M4A ' => 'Apple iTunes AAC-LC (.M4A) Audio', # audio/x-m4a 'M4B ' => 'Apple iTunes AAC-LC (.M4B) Audio Book', # audio/mp4 'M4P ' => 'Apple iTunes AAC-LC (.M4P) AES Protected Audio', # audio/mp4 'M4V ' => 'Apple iTunes Video (.M4V) Video', # video/x-m4v 'M4VH' => 'Apple TV (.M4V)', # video/x-m4v 'M4VP' => 'Apple iPhone (.M4V)', # video/x-m4v 'mj2s' => 'Motion JPEG 2000 [ISO 15444-3] Simple Profile', # video/mj2 'mjp2' => 'Motion JPEG 2000 [ISO 15444-3] General Profile', # video/mj2 'mmp4' => 'MPEG-4/3GPP Mobile Profile (.MP4/3GP) (for NTT)', # video/mp4 'mp21' => 'MPEG-21 [ISO/IEC 21000-9]', # various 'mp41' => 'MP4 v1 [ISO 14496-1:ch13]', # video/mp4 'mp42' => 'MP4 v2 [ISO 14496-14]', # video/mp4 'mp71' => 'MP4 w/ MPEG-7 Metadata [per ISO 14496-12]', # various 'MPPI' => 'Photo Player, MAF [ISO/IEC 23000-3]', # various 'mqt ' => 'Sony / Mobile QuickTime (.MQV) US Patent 7,477,830 (Sony Corp)', # video/quicktime 'MSNV' => 'MPEG-4 (.MP4) for SonyPSP', # audio/mp4 'NDAS' => 'MP4 v2 [ISO 14496-14] Nero Digital AAC Audio', # audio/mp4 'NDSC' => 'MPEG-4 (.MP4) Nero Cinema Profile', # video/mp4 'NDSH' => 'MPEG-4 (.MP4) Nero HDTV Profile', # video/mp4 'NDSM' => 'MPEG-4 (.MP4) Nero Mobile Profile', # video/mp4 'NDSP' => 'MPEG-4 (.MP4) Nero Portable Profile', # video/mp4 'NDSS' => 'MPEG-4 (.MP4) Nero Standard Profile', # video/mp4 'NDXC' => 'H.264/MPEG-4 AVC (.MP4) Nero Cinema Profile', # video/mp4 'NDXH' => 'H.264/MPEG-4 AVC (.MP4) Nero HDTV Profile', # video/mp4 'NDXM' => 'H.264/MPEG-4 AVC (.MP4) Nero Mobile Profile', # video/mp4 'NDXP' => 'H.264/MPEG-4 AVC (.MP4) Nero Portable Profile', # video/mp4 'NDXS' => 'H.264/MPEG-4 AVC (.MP4) Nero Standard Profile', # video/mp4 'odcf' => 'OMA DCF DRM Format 2.0 (OMA-TS-DRM-DCF-V2_0-20060303-A)', # various 'opf2' => 'OMA PDCF DRM Format 2.1 (OMA-TS-DRM-DCF-V2_1-20070724-C)', 'opx2' => 'OMA PDCF DRM + XBS extensions (OMA-TS-DRM_XBS-V1_0-20070529-C)', 'pana' => 'Panasonic Digital Camera', 'qt ' => 'Apple QuickTime (.MOV/QT)', # video/quicktime 'ROSS' => 'Ross Video', 'sdv ' => 'SD Memory Card Video', # various? 'ssc1' => 'Samsung stereoscopic, single stream', 'ssc2' => 'Samsung stereoscopic, dual stream', 'XAVC' => 'Sony XAVC', #PH ); # information for time/date-based tags (time zero is Jan 1, 1904) my %timeInfo = ( Notes => 'converted from UTC to local time if the QuickTimeUTC option is set', # It is not uncommon for brain-dead software to use the wrong time zero, # so assume a time zero of Jan 1, 1970 if the date is before this RawConv => q{ my $offset = (66 * 365 + 17) * 24 * 3600; return $val - $offset if $val >= $offset or $$self{OPTIONS}{QuickTimeUTC}; $self->WarnOnce('Patched incorrect time zero for QuickTime date/time tag',1) if $val; return $val; }, Shift => 'Time', Writable => 1, Permanent => 1, DelValue => 0, # Note: This value will be in UTC if generated by a system that is aware of the time zone ValueConv => 'ConvertUnixTime($val, $self->Options("QuickTimeUTC"))', ValueConvInv => 'GetUnixTime($val, $self->Options("QuickTimeUTC")) + (66 * 365 + 17) * 24 * 3600', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', # (can't put Groups here because they aren't constant!) ); # information for duration tags my %durationInfo = ( ValueConv => '$$self{TimeScale} ? $val / $$self{TimeScale} : $val', PrintConv => '$$self{TimeScale} ? ConvertDuration($val) : $val', ); # parsing for most of the 3gp udta language text boxes my %langText = ( RawConv => sub { my ($val, $self) = @_; return '<err>' unless length $val >= 6; my $lang = UnpackLang(Get16u(\$val, 4)); $lang = $lang ? "($lang) " : ''; $val = substr($val, 6); # isolate string $val = $self->Decode($val, 'UCS2') if $val =~ /^\xfe\xff/; return $lang . $val; }, ); # 4-character Vendor ID codes (ref PH) my %vendorID = ( appl => 'Apple', fe20 => 'Olympus (fe20)', # (FE200) FFMP => 'FFmpeg', 'GIC '=> 'General Imaging Co.', kdak => 'Kodak', KMPI => 'Konica-Minolta', leic => 'Leica', mino => 'Minolta', niko => 'Nikon', NIKO => 'Nikon', olym => 'Olympus', pana => 'Panasonic', pent => 'Pentax', pr01 => 'Olympus (pr01)', # (FE100,FE110,FE115) sany => 'Sanyo', 'SMI '=> 'Sorenson Media Inc.', ZORA => 'Zoran Corporation', 'AR.D'=> 'Parrot AR.Drone', ' KD '=> 'Kodak', # (FZ201) ); # QuickTime data atom encodings for string types (ref 12) my %stringEncoding = ( 1 => 'UTF8', 2 => 'UTF16', 3 => 'ShiftJIS', 4 => 'UTF8', 5 => 'UTF16', ); my %graphicsMode = ( # (ref http://homepage.mac.com/vanhoek/MovieGuts%20docs/64.html) 0x00 => 'srcCopy', 0x01 => 'srcOr', 0x02 => 'srcXor', 0x03 => 'srcBic', 0x04 => 'notSrcCopy', 0x05 => 'notSrcOr', 0x06 => 'notSrcXor', 0x07 => 'notSrcBic', 0x08 => 'patCopy', 0x09 => 'patOr', 0x0a => 'patXor', 0x0b => 'patBic', 0x0c => 'notPatCopy', 0x0d => 'notPatOr', 0x0e => 'notPatXor', 0x0f => 'notPatBic', 0x20 => 'blend', 0x21 => 'addPin', 0x22 => 'addOver', 0x23 => 'subPin', 0x24 => 'transparent', 0x25 => 'addMax', 0x26 => 'subOver', 0x27 => 'addMin', 0x31 => 'grayishTextOr', 0x32 => 'hilite', 0x40 => 'ditherCopy', # the following ref ISO/IEC 15444-3 0x100 => 'Alpha', 0x101 => 'White Alpha', 0x102 => 'Pre-multiplied Black Alpha', 0x110 => 'Component Alpha', ); # QuickTime atoms %Image::ExifTool::QuickTime::Main = ( PROCESS_PROC => \&ProcessMOV, WRITE_PROC => \&WriteQuickTime, GROUPS => { 2 => 'Video' }, NOTES => q{ The QuickTime format is used for many different types of audio, video and image files (most commonly, MOV and MP4 videos). Exiftool extracts standard meta information a variety of audio, video and image parameters, as well as proprietary information written by many camera models. Tags with a question mark after their name are not extracted unless the Unknown option is set. ExifTool has the ability to write/create XMP, and edit some date/time tags in QuickTime-format files. According to the specification, many QuickTime date/time tags should be stored as UTC. Unfortunately, digital cameras often store local time values instead (presumably because they don't know the time zone). For this reason, by default ExifTool does not assume a time zone for these values. However, if the QuickTimeUTC API option is set, then ExifTool will assume these values are properly stored as UTC, and will convert them to local time when extracting. See L<http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html> for the official specification. }, meta => { # 'meta' is found here in my Sony ILCE-7S MP4 sample - PH Name => 'Meta', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Meta', Start => 4, # skip 4-byte version number header }, }, free => [ { Name => 'KodakFree', # (found in Kodak M5370 MP4 videos) Condition => '$$valPt =~ /^\0\0\0.Seri/s', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::Free' }, },{ Unknown => 1, Binary => 1, }, # (also Samsung WB750 uncompressed thumbnail data starting with "SDIC\0") ], # fre1 - 4 bytes: "june" (Kodak PixPro SP360) frea => { Name => 'Kodak_frea', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::frea' }, }, skip => [ { Name => 'CanonSkip', Condition => '$$valPt =~ /^\0.{3}(CNDB|CNCV|CNMN|CNFV|CNTH|CNDM)/s', SubDirectory => { TagTable => 'Image::ExifTool::Canon::Skip' }, }, { Name => 'Skip', Unknown => 1, Binary => 1 }, ], wide => { Unknown => 1, Binary => 1 }, ftyp => { #MP4 Name => 'FileType', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::FileType' }, }, pnot => { Name => 'Preview', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Preview' }, }, PICT => { Name => 'PreviewPICT', Groups => { 2 => 'Preview' }, Binary => 1, }, pict => { #8 Name => 'PreviewPICT', Groups => { 2 => 'Preview' }, Binary => 1, }, moov => { Name => 'Movie', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Movie' }, }, mdat => { Name => 'MovieData', Unknown => 1, Binary => 1 }, 'mdat-size' => { Name => 'MovieDataSize', Notes => q{ not a real tag ID, this tag represents the size of the 'mdat' data in bytes and is used in the AvgBitrate calculation }, }, 'mdat-offset' => 'MovieDataOffset', junk => { Unknown => 1, Binary => 1 }, #8 uuid => [ { #9 (MP4 files) Name => 'XMP', # *** this is where ExifTool writes XMP in MP4 videos (as per XMP spec) *** Condition => '$$valPt=~/^\xbe\x7a\xcf\xcb\x97\xa9\x42\xe8\x9c\x71\x99\x94\x91\xe3\xaf\xac/', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main', Start => 16, }, }, { #11 (MP4 files) Name => 'UUID-PROF', Condition => '$$valPt=~/^PROF!\xd2\x4f\xce\xbb\x88\x69\x5c\xfa\xc9\xc7\x40/', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Profile', Start => 24, # uid(16) + version(1) + flags(3) + count(4) }, }, { #PH (Flip MP4 files) Name => 'UUID-Flip', Condition => '$$valPt=~/^\x4a\xb0\x3b\x0f\x61\x8d\x40\x75\x82\xb2\xd9\xfa\xce\xd3\x5f\xf5/', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Flip', Start => 16, }, }, # "\x98\x7f\xa3\xdf\x2a\x85\x43\xc0\x8f\x8f\xd9\x7c\x47\x1e\x8e\xea" - unknown data in Flip videos { #8 Name => 'UUID-Unknown', Unknown => 1, Binary => 1, }, ], _htc => { Name => 'HTCInfo', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::HTCInfo' }, }, udta => { Name => 'UserData', SubDirectory => { TagTable => 'Image::ExifTool::FLIR::UserData' }, }, thum => { #PH Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Binary => 1, }, ardt => { #PH Name => 'ARDroneFile', ValueConv => 'length($val) > 4 ? substr($val,4) : $val', # remove length }, prrt => { #PH Name => 'ARDroneTelemetry', Notes => q{ telemetry information for each video frame: status1, status2, time, pitch, roll, yaw, speed, altitude }, ValueConv => q{ my $size = length $val; return \$val if $size < 12 or not $$self{OPTIONS}{Binary}; my $len = Get16u(\$val, 2); my $str = ''; SetByteOrder('II'); my $pos = 12; while ($pos + $len <= $size) { my $s1 = Get16u(\$val, $pos); # s2: 7=take-off?, 3=moving, 4=hovering, 9=landing?, 2=landed my $s2 = Get16u(\$val, $pos + 2); $str .= "$s1 $s2"; my $num = int(($len-4)/4); my ($i, $v); for ($i=0; $i<$num; ++$i) { my $pt = $pos + 4 + $i * 4; if ($i > 0 && $i < 4) { $v = GetFloat(\$val, $pt); # pitch/roll/yaw } else { $v = Get32u(\$val, $pt); # convert time to sec, and speed(NC)/altitude to metres $v /= 1000 if $i <= 5; } $str .= " $v"; } $str .= "\n"; $pos += $len; } SetByteOrder('MM'); return \$str; }, }, # meta - proprietary XML information written by some Flip cameras - PH ); # MPEG-4 'ftyp' atom # (ref http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html) %Image::ExifTool::QuickTime::FileType = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, FORMAT => 'int32u', 0 => { Name => 'MajorBrand', Format => 'undef[4]', PrintConv => \%ftypLookup, }, 1 => { Name => 'MinorVersion', Format => 'undef[4]', ValueConv => 'sprintf("%x.%x.%x", unpack("nCC", $val))', }, 2 => { Name => 'CompatibleBrands', Format => 'undef[$size-8]', # ignore any entry with a null, and return others as a list ValueConv => 'my @a=($val=~/.{4}/sg); @a=grep(!/\0/,@a); \@a', }, ); # proprietary HTC atom (HTC One MP4 video) %Image::ExifTool::QuickTime::HTCInfo = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 2 => 'Video' }, NOTES => 'Tags written by some HTC camera phones.', slmt => { Name => 'Unknown_slmt', Unknown => 1, Format => 'int32u', # (observed values: 4) }, ); # atoms used in QTIF files %Image::ExifTool::QuickTime::ImageFile = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 2 => 'Image' }, NOTES => 'Tags used in QTIF QuickTime Image Files.', idsc => { Name => 'ImageDescription', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::ImageDesc' }, }, idat => { Name => 'ImageData', Binary => 1, }, iicc => { Name => 'ICC_Profile', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' }, }, ); # image description data block %Image::ExifTool::QuickTime::ImageDesc = ( PROCESS_PROC => \&ProcessHybrid, VARS => { ID_LABEL => 'ID/Index' }, GROUPS => { 2 => 'Image' }, FORMAT => 'int16u', 2 => { Name => 'CompressorID', Format => 'string[4]', # not very useful since this isn't a complete list and name is given below # # ref http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html # PrintConv => { # cvid => 'Cinepak', # jpeg => 'JPEG', # 'smc '=> 'Graphics', # 'rle '=> 'Animation', # rpza => 'Apple Video', # kpcd => 'Kodak Photo CD', # 'png '=> 'Portable Network Graphics', # mjpa => 'Motion-JPEG (format A)', # mjpb => 'Motion-JPEG (format B)', # SVQ1 => 'Sorenson video, version 1', # SVQ3 => 'Sorenson video, version 3', # mp4v => 'MPEG-4 video', # 'dvc '=> 'NTSC DV-25 video', # dvcp => 'PAL DV-25 video', # 'gif '=> 'Compuserve Graphics Interchange Format', # h263 => 'H.263 video', # tiff => 'Tagged Image File Format', # 'raw '=> 'Uncompressed RGB', # '2vuY'=> "Uncompressed Y'CbCr, 3x8-bit 4:2:2 (2vuY)", # 'yuv2'=> "Uncompressed Y'CbCr, 3x8-bit 4:2:2 (yuv2)", # v308 => "Uncompressed Y'CbCr, 8-bit 4:4:4", # v408 => "Uncompressed Y'CbCr, 8-bit 4:4:4:4", # v216 => "Uncompressed Y'CbCr, 10, 12, 14, or 16-bit 4:2:2", # v410 => "Uncompressed Y'CbCr, 10-bit 4:4:4", # v210 => "Uncompressed Y'CbCr, 10-bit 4:2:2", # }, }, 10 => { Name => 'VendorID', Format => 'string[4]', RawConv => 'length $val ? $val : undef', PrintConv => \%vendorID, SeparateTable => 'VendorID', }, # 14 - ("Quality" in QuickTime docs) ?? 16 => 'SourceImageWidth', 17 => 'SourceImageHeight', 18 => { Name => 'XResolution', Format => 'fixed32u' }, 20 => { Name => 'YResolution', Format => 'fixed32u' }, # 24 => 'FrameCount', # always 1 (what good is this?) 25 => { Name => 'CompressorName', Format => 'string[32]', # (sometimes this is a Pascal string, and sometimes it is a C string) RawConv => q{ $val=substr($val,1,ord($1)) if $val=~/^([\0-\x1f])/ and ord($1)<length($val); length $val ? $val : undef; }, }, 41 => 'BitDepth', # # Observed offsets for child atoms of various CompressorID types: # # CompressorID Offset Child atoms # ----------- ------ ---------------- # avc1 86 avcC, btrt, colr, pasp, fiel, clap, svcC # mp4v 86 esds, pasp # s263 86 d263 # btrt => { Name => 'BitrateInfo', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Bitrate' }, }, # Reference for fiel, colr, pasp, clap: # https://developer.apple.com/library/mac/technotes/tn2162/_index.html#//apple_ref/doc/uid/DTS40013070-CH1-TNTAG9 fiel => { Name => 'VideoFieldOrder', ValueConv => 'join(" ", unpack("C*",$val))', PrintConv => [{ 1 => 'Progressive', 2 => '2:1 Interlaced', }], }, colr => { Name => 'ColorRepresentation', ValueConv => 'join(" ", substr($val,0,4), unpack("x4n*",$val))', }, pasp => { Name => 'PixelAspectRatio', ValueConv => 'join(":", unpack("N*",$val))', }, clap => { Name => 'CleanAperture', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::CleanAperture' }, }, # avcC - AVC configuration (ref http://thompsonng.blogspot.ca/2010/11/mp4-file-format-part-2.html) # hvcC - HEVC configuration # svcC - 7 bytes: 00 00 00 00 ff e0 00 # esds - elementary stream descriptor # d263 gama => { Name => 'Gamma', Format => 'fixed32u' }, # mjqt - default quantization table for MJPEG # mjht - default Huffman table for MJPEG ); # 'btrt' atom information (ref http://lists.freedesktop.org/archives/gstreamer-commits/2011-October/054459.html) %Image::ExifTool::QuickTime::Bitrate = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, FORMAT => 'int32u', PRIORITY => 0, # often filled with zeros 0 => 'BufferSize', 1 => 'MaxBitrate', 2 => 'AverageBitrate', ); # 'clap' atom information (ref https://developer.apple.com/library/mac/technotes/tn2162/_index.html#//apple_ref/doc/uid/DTS40013070-CH1-TNTAG9) %Image::ExifTool::QuickTime::CleanAperture = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, FORMAT => 'rational64u', 0 => 'CleanApertureWidth', 1 => 'CleanApertureHeight', 2 => 'CleanApertureOffsetX', 3 => 'CleanApertureOffsetY', ); # preview data block %Image::ExifTool::QuickTime::Preview = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, GROUPS => { 2 => 'Image' }, FORMAT => 'int16u', 0 => { Name => 'PreviewDate', Format => 'int32u', Groups => { 2 => 'Time' }, %timeInfo, }, 2 => 'PreviewVersion', 3 => { Name => 'PreviewAtomType', Format => 'string[4]', }, 5 => 'PreviewAtomIndex', ); # movie atoms %Image::ExifTool::QuickTime::Movie = ( PROCESS_PROC => \&ProcessMOV, WRITE_PROC => \&WriteQuickTime, GROUPS => { 2 => 'Video' }, mvhd => { Name => 'MovieHeader', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::MovieHeader' }, }, trak => { Name => 'Track', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Track' }, }, udta => { Name => 'UserData', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::UserData' }, }, meta => { # 'meta' is found here in my EX-F1 MOV sample - PH Name => 'Meta', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Meta' }, }, iods => { Name => 'InitialObjectDescriptor', Flags => ['Binary','Unknown'], }, uuid => [ { #11 (MP4 files) (also found in QuickTime::Track) Name => 'UUID-USMT', Condition => '$$valPt=~/^USMT!\xd2\x4f\xce\xbb\x88\x69\x5c\xfa\xc9\xc7\x40/', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::UserMedia', Start => 16, }, }, { #PH (Canon SX280) Name => 'UUID-Canon', Condition => '$$valPt=~/^\x85\xc0\xb6\x87\x82\x0f\x11\xe0\x81\x11\xf4\xce\x46\x2b\x6a\x48/', SubDirectory => { TagTable => 'Image::ExifTool::Canon::uuid', Start => 16, }, }, { Name => 'UUID-Unknown', Unknown => 1, Binary => 1, }, ], cmov => { Name => 'CompressedMovie', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::CMovie' }, }, htka => { # (written by HTC One M8 in slow-motion 1280x720 video - PH) Name => 'HTCTrack', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Track' }, }, # prfl - Profile (ref 12) # clip - clipping --> contains crgn (clip region) (ref 12) # mvex - movie extends --> contains mehd (movie extends header), trex (track extends) (ref 14) # ICAT - 4 bytes: "6350" (Nikon CoolPix S6900) ); # movie header data block %Image::ExifTool::QuickTime::MovieHeader = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, GROUPS => { 2 => 'Video' }, FORMAT => 'int32u', DATAMEMBER => [ 0, 1, 2, 3, 4 ], 0 => { Name => 'MovieHeaderVersion', Format => 'int8u', RawConv => '$$self{MovieHeaderVersion} = $val', }, 1 => { Name => 'CreateDate', Groups => { 2 => 'Time' }, %timeInfo, # this is int64u if MovieHeaderVersion == 1 (ref 13) Hook => '$$self{MovieHeaderVersion} and $format = "int64u", $varSize += 4', }, 2 => { Name => 'ModifyDate', Groups => { 2 => 'Time' }, %timeInfo, # this is int64u if MovieHeaderVersion == 1 (ref 13) Hook => '$$self{MovieHeaderVersion} and $format = "int64u", $varSize += 4', }, 3 => { Name => 'TimeScale', RawConv => '$$self{TimeScale} = $val', }, 4 => { Name => 'Duration', %durationInfo, # this is int64u if MovieHeaderVersion == 1 (ref 13) Hook => '$$self{MovieHeaderVersion} and $format = "int64u", $varSize += 4', }, 5 => { Name => 'PreferredRate', ValueConv => '$val / 0x10000', }, 6 => { Name => 'PreferredVolume', Format => 'int16u', ValueConv => '$val / 256', PrintConv => 'sprintf("%.2f%%", $val * 100)', }, 9 => { Name => 'MatrixStructure', Format => 'fixed32s[9]', # (the right column is fixed 2.30 instead of 16.16) ValueConv => q{ my @a = split ' ',$val; $_ /= 0x4000 foreach @a[2,5,8]; return "@a"; }, }, 18 => { Name => 'PreviewTime', %durationInfo }, 19 => { Name => 'PreviewDuration', %durationInfo }, 20 => { Name => 'PosterTime', %durationInfo }, 21 => { Name => 'SelectionTime', %durationInfo }, 22 => { Name => 'SelectionDuration',%durationInfo }, 23 => { Name => 'CurrentTime', %durationInfo }, 24 => 'NextTrackID', ); # track atoms %Image::ExifTool::QuickTime::Track = ( PROCESS_PROC => \&ProcessMOV, WRITE_PROC => \&WriteQuickTime, GROUPS => { 1 => 'Track#', 2 => 'Video' }, tkhd => { Name => 'TrackHeader', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::TrackHeader' }, }, udta => { Name => 'UserData', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::UserData' }, }, mdia => { #MP4 Name => 'Media', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Media' }, }, meta => { #PH (MOV) Name => 'Meta', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Meta' }, }, tref => { Name => 'TrackRef', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::TrackRef' }, }, tapt => { Name => 'TrackAperture', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::TrackAperture' }, }, uuid => [ { #11 (MP4 files) (also found in QuickTime::Movie) Name => 'UUID-USMT', Condition => '$$valPt=~/^USMT!\xd2\x4f\xce\xbb\x88\x69\x5c\xfa\xc9\xc7\x40/', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::UserMedia', Start => 16, }, }, { Name => 'UUID-Unknown', Unknown => 1, Binary => 1, }, ], # edts - edits --> contains elst (edit list) # clip - clipping --> contains crgn (clip region) # matt - track matt --> contains kmat (compressed matt) # load - track loading settings # imap - track input map --> contains ' in' --> contains ' ty', obid # prfl - Profile (ref 12) ); # track header data block %Image::ExifTool::QuickTime::TrackHeader = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, GROUPS => { 1 => 'Track#', 2 => 'Video' }, FORMAT => 'int32u', DATAMEMBER => [ 0, 1, 2, 5 ], 0 => { Name => 'TrackHeaderVersion', Format => 'int8u', Priority => 0, RawConv => '$$self{TrackHeaderVersion} = $val', }, 1 => { Name => 'TrackCreateDate', Priority => 0, Groups => { 2 => 'Time' }, %timeInfo, # this is int64u if TrackHeaderVersion == 1 (ref 13) Hook => '$$self{TrackHeaderVersion} and $format = "int64u", $varSize += 4', }, 2 => { Name => 'TrackModifyDate', Priority => 0, Groups => { 2 => 'Time' }, %timeInfo, # this is int64u if TrackHeaderVersion == 1 (ref 13) Hook => '$$self{TrackHeaderVersion} and $format = "int64u", $varSize += 4', }, 3 => { Name => 'TrackID', Priority => 0, }, 5 => { Name => 'TrackDuration', Priority => 0, %durationInfo, # this is int64u if TrackHeaderVersion == 1 (ref 13) Hook => '$$self{TrackHeaderVersion} and $format = "int64u", $varSize += 4', }, 8 => { Name => 'TrackLayer', Format => 'int16u', Priority => 0, }, 9 => { Name => 'TrackVolume', Format => 'int16u', Priority => 0, ValueConv => '$val / 256', PrintConv => 'sprintf("%.2f%%", $val * 100)', }, 10 => { Name => 'MatrixStructure', Format => 'fixed32s[9]', # (the right column is fixed 2.30 instead of 16.16) ValueConv => q{ my @a = split ' ',$val; $_ /= 0x4000 foreach @a[2,5,8]; return "@a"; }, }, 19 => { Name => 'ImageWidth', Priority => 0, RawConv => \&FixWrongFormat, }, 20 => { Name => 'ImageHeight', Priority => 0, RawConv => \&FixWrongFormat, }, ); # user data atoms %Image::ExifTool::QuickTime::UserData = ( PROCESS_PROC => \&ProcessMOV, WRITE_PROC => \&WriteQuickTime, GROUPS => { 2 => 'Video' }, NOTES => q{ Tag ID's beginning with the copyright symbol (hex 0xa9) are multi-language text. Alternate language tags are accessed by adding a dash followed by the language/country code to the tag name. ExifTool will extract any multi-language user data tags found, even if they don't exist in this table. }, "\xa9cpy" => { Name => 'Copyright', Groups => { 2 => 'Author' } }, "\xa9day" => { Name => 'ContentCreateDate', Groups => { 2 => 'Time' }, # handle values in the form "2010-02-12T13:27:14-0800" (written by Apple iPhone) ValueConv => q{ require Image::ExifTool::XMP; $val = Image::ExifTool::XMP::ConvertXMPDate($val); $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary return $val; }, PrintConv => '$self->ConvertDateTime($val)', }, "\xa9ART" => 'Artist', #PH (iTunes 8.0.2) "\xa9alb" => 'Album', #PH (iTunes 8.0.2) "\xa9arg" => 'Arranger', #12 "\xa9ark" => 'ArrangerKeywords', #12 "\xa9cmt" => 'Comment', #PH (iTunes 8.0.2) "\xa9cok" => 'ComposerKeywords', #12 "\xa9com" => 'Composer', #12 "\xa9dir" => 'Director', #12 "\xa9ed1" => 'Edit1', "\xa9ed2" => 'Edit2', "\xa9ed3" => 'Edit3', "\xa9ed4" => 'Edit4', "\xa9ed5" => 'Edit5', "\xa9ed6" => 'Edit6', "\xa9ed7" => 'Edit7', "\xa9ed8" => 'Edit8', "\xa9ed9" => 'Edit9', "\xa9fmt" => 'Format', "\xa9gen" => 'Genre', #PH (iTunes 8.0.2) "\xa9grp" => 'Grouping', #PH (NC) "\xa9inf" => 'Information', "\xa9isr" => 'ISRCCode', #12 "\xa9lab" => 'RecordLabelName', #12 "\xa9lal" => 'RecordLabelURL', #12 "\xa9lyr" => 'Lyrics', #PH (NC) "\xa9mak" => 'Make', #12 "\xa9mal" => 'MakerURL', #12 "\xa9mod" => 'Model', #PH "\xa9nam" => 'Title', #12 "\xa9pdk" => 'ProducerKeywords', #12 "\xa9phg" => 'RecordingCopyright', #12 "\xa9prd" => 'Producer', "\xa9prf" => 'Performers', "\xa9prk" => 'PerformerKeywords', #12 "\xa9prl" => 'PerformerURL', "\xa9dir" => 'Director', #12 "\xa9req" => 'Requirements', "\xa9snk" => 'SubtitleKeywords', #12 "\xa9snm" => 'Subtitle', #12 "\xa9src" => 'SourceCredits', #12 "\xa9swf" => 'SongWriter', #12 "\xa9swk" => 'SongWriterKeywords', #12 "\xa9swr" => 'SoftwareVersion', #12 "\xa9too" => 'Encoder', #PH (NC) "\xa9trk" => 'Track', #PH (NC) "\xa9wrt" => 'Composer', "\xa9xyz" => { #PH (iPhone 3GS) Name => 'GPSCoordinates', Groups => { 2 => 'Location' }, ValueConv => \&ConvertISO6709, PrintConv => \&PrintGPSCoordinates, }, name => 'Name', WLOC => { Name => 'WindowLocation', Format => 'int16u', }, LOOP => { Name => 'LoopStyle', Format => 'int32u', PrintConv => { 1 => 'Normal', 2 => 'Palindromic', }, }, SelO => { Name => 'PlaySelection', Format => 'int8u', }, AllF => { Name => 'PlayAllFrames', Format => 'int8u', }, meta => { Name => 'Meta', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Meta', Start => 4, # must skip 4-byte version number header }, }, 'ptv '=> { Name => 'PrintToVideo', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Video' }, }, hnti => { Name => 'HintInfo', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::HintInfo' }, }, hinf => { Name => 'HintTrackInfo', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::HintTrackInfo' }, }, hinv => 'HintVersion', #PH (guess) XMP_ => { #PH (Adobe CS3 Bridge) Name => 'XMP', # *** this is where ExifTool writes XMP in MOV videos (as per XMP spec) *** SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' }, }, # the following are 3gp tags, references: # http://atomicparsley.sourceforge.net # http://www.3gpp.org/ftp/tsg_sa/WG4_CODEC/TSGS4_25/Docs/ cprt => { Name => 'Copyright', %langText, Groups => { 2 => 'Author' } }, auth => { Name => 'Author', %langText, Groups => { 2 => 'Author' } }, titl => { Name => 'Title', %langText }, dscp => { Name => 'Description',%langText }, perf => { Name => 'Performer', %langText }, gnre => { Name => 'Genre', %langText }, albm => { Name => 'Album', %langText }, coll => { Name => 'CollectionName', %langText }, #17 rtng => { Name => 'Rating', # (4-byte flags, 4-char entity, 4-char criteria, 2-byte lang, string) RawConv => q{ return '<err>' unless length $val >= 14; my $str = 'Entity=' . substr($val,4,4) . ' Criteria=' . substr($val,8,4); $str =~ tr/\0-\x1f\x7f-\xff//d; # remove unprintable characters my $lang = Image::ExifTool::QuickTime::UnpackLang(Get16u(\$val, 12)); $lang = $lang ? "($lang) " : ''; $val = substr($val, 14); $val = $self->Decode($val, 'UCS2') if $val =~ /^\xfe\xff/; return $lang . $str . ' ' . $val; }, }, clsf => { Name => 'Classification', # (4-byte flags, 4-char entity, 2-byte index, 2-byte lang, string) RawConv => q{ return '<err>' unless length $val >= 12; my $str = 'Entity=' . substr($val,4,4) . ' Index=' . Get16u(\$val,8); $str =~ tr/\0-\x1f\x7f-\xff//d; # remove unprintable characters my $lang = Image::ExifTool::QuickTime::UnpackLang(Get16u(\$val, 10)); $lang = $lang ? "($lang) " : ''; $val = substr($val, 12); $val = $self->Decode($val, 'UCS2') if $val =~ /^\xfe\xff/; return $lang . $str . ' ' . $val; }, }, kywd => { Name => 'Keywords', # (4 byte flags, 2-byte lang, 1-byte count, count x pascal strings) RawConv => q{ return '<err>' unless length $val >= 7; my $lang = Image::ExifTool::QuickTime::UnpackLang(Get16u(\$val, 4)); $lang = $lang ? "($lang) " : ''; my $num = Get8u(\$val, 6); my ($i, @vals); my $pos = 7; for ($i=0; $i<$num; ++$i) { last if $pos >= length $val; my $len = Get8u(\$val, $pos++); last if $pos + $len > length $val; my $v = substr($val, $pos, $len); $v = $self->Decode($v, 'UCS2') if $v =~ /^\xfe\xff/; push @vals, $v; $pos += $len; } my $sep = $self->Options('ListSep'); return $lang . join($sep, @vals); }, }, loci => { Name => 'LocationInformation', Groups => { 2 => 'Location' }, # (4-byte flags, 2-byte lang, location string, 1-byte role, 4-byte fixed longitude, # 4-byte fixed latitude, 4-byte fixed altitude, body string, notes string) RawConv => q{ return '<err>' unless length $val >= 6; my $lang = Image::ExifTool::QuickTime::UnpackLang(Get16u(\$val, 4)); $lang = $lang ? "($lang) " : ''; $val = substr($val, 6); my $str; if ($val =~ /^\xfe\xff/) { $val =~ s/^(\xfe\xff(.{2})*?)\0\0//s or return '<err>'; $str = $self->Decode($1, 'UCS2'); } else { $val =~ s/^(.*?)\0//s or return '<err>'; $str = $1; } $str = '(none)' unless length $str; return '<err>' if length $val < 13; my $role = Get8u(\$val, 0); my $lon = GetFixed32s(\$val, 1); my $lat = GetFixed32s(\$val, 5); my $alt = GetFixed32s(\$val, 9); my $roleStr = {0=>'shooting',1=>'real',2=>'fictional',3=>'reserved'}->{$role}; $str .= ' Role=' . ($roleStr || "unknown($role)"); $str .= sprintf(' Lat=%.5f Lon=%.5f Alt=%.2f', $lat, $lon, $alt); $val = substr($val, 13); if ($val =~ s/^(\xfe\xff(.{2})*?)\0\0//s) { $str .= ' Body=' . $self->Decode($1, 'UCS2'); } elsif ($val =~ s/^(.*?)\0//s) { $str .= " Body=$1"; } if ($val =~ s/^(\xfe\xff(.{2})*?)\0\0//s) { $str .= ' Notes=' . $self->Decode($1, 'UCS2'); } elsif ($val =~ s/^(.*?)\0//s) { $str .= " Notes=$1"; } return $lang . $str; }, }, yrrc => { Name => 'Year', Groups => { 2 => 'Time' }, RawConv => 'length($val) >= 6 ? Get16u(\$val,4) : "<err>"', }, urat => { #17 Name => 'UserRating', RawConv => q{ return '<err>' unless length $val >= 8; return Get8u(\$val, 7); }, }, # tsel - TrackSelection (ref 17) # Apple tags (ref 16) angl => { Name => 'CameraAngle', Format => 'string' }, # (NC) clfn => { Name => 'ClipFileName', Format => 'string' }, # (NC) clid => { Name => 'ClipID', Format => 'string' }, # (NC) cmid => { Name => 'CameraID', Format => 'string' }, # (NC) cmnm => { # (NC) Name => 'Model', Description => 'Camera Model Name', Format => 'string', # (necessary to remove the trailing NULL) }, date => { # (NC) Name => 'DateTimeOriginal', Groups => { 2 => 'Time' }, ValueConv => q{ require Image::ExifTool::XMP; $val = Image::ExifTool::XMP::ConvertXMPDate($val); $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary return $val; }, PrintConv => '$self->ConvertDateTime($val)', }, manu => { # (SX280) Name => 'Make', # (with Canon there are 6 unknown bytes before the model: "\0\0\0\0\x15\xc7") RawConv => '$val=~s/^\0{4}..//s; $val=~s/\0.*//; $val', }, modl => { # (Samsung GT-S8530, Canon SX280) Name => 'Model', Description => 'Camera Model Name', # (with Canon there are 6 unknown bytes before the model: "\0\0\0\0\x15\xc7") RawConv => '$val=~s/^\0{4}..//s; $val=~s/\0.*//; $val', }, reel => { Name => 'ReelName', Format => 'string' }, # (NC) scen => { Name => 'Scene', Format => 'string' }, # (NC) shot => { Name => 'ShotName', Format => 'string' }, # (NC) slno => { Name => 'SerialNumber', Format => 'string' }, # (NC) apmd => { Name => 'ApertureMode', Format => 'undef' }, #20 kgtt => { #http://lists.ffmpeg.org/pipermail/ffmpeg-devel-irc/2012-June/000707.html # 'TrackType' will expand to 'Track#Type' when found inside a track Name => 'TrackType', # set flag to process this as international text # even though the tag ID doesn't start with 0xa9 IText => 1, }, chpl => { # (Nero chapter list) Name => 'ChapterList', ValueConv => \&ConvertChapterList, PrintConv => \&PrintChapter, }, # ndrm - 7 bytes (0 0 0 1 0 0 0) Nero Digital Rights Management? (PH) # other non-Apple tags (ref 16) # hpix - HipixRichPicture (ref 16, HIPIX) # strk - sub-track information (ref 16, ISO) # # Manufacturer-specific metadata # TAGS => [ #PH # these tags were initially discovered in a Pentax movie, # but similar information is found in videos from other manufacturers { Name => 'FujiFilmTags', Condition => '$$valPt =~ /^FUJIFILM DIGITAL CAMERA\0/', SubDirectory => { TagTable => 'Image::ExifTool::FujiFilm::MOV', ByteOrder => 'LittleEndian', }, }, { Name => 'KodakTags', Condition => '$$valPt =~ /^EASTMAN KODAK COMPANY/', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::MOV', ByteOrder => 'LittleEndian', }, }, { Name => 'KonicaMinoltaTags', Condition => '$$valPt =~ /^KONICA MINOLTA DIGITAL CAMERA/', SubDirectory => { TagTable => 'Image::ExifTool::Minolta::MOV1', ByteOrder => 'LittleEndian', }, }, { Name => 'MinoltaTags', Condition => '$$valPt =~ /^MINOLTA DIGITAL CAMERA/', SubDirectory => { TagTable => 'Image::ExifTool::Minolta::MOV2', ByteOrder => 'LittleEndian', }, }, { Name => 'NikonTags', Condition => '$$valPt =~ /^NIKON DIGITAL CAMERA\0/', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::MOV', ByteOrder => 'LittleEndian', }, }, { Name => 'OlympusTags1', Condition => '$$valPt =~ /^OLYMPUS DIGITAL CAMERA\0.{9}\x01\0/s', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::MOV1', ByteOrder => 'LittleEndian', }, }, { Name => 'OlympusTags2', Condition => '$$valPt =~ /^OLYMPUS DIGITAL CAMERA(?!\0.{21}\x0a\0{3})/s', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::MOV2', ByteOrder => 'LittleEndian', }, }, { Name => 'OlympusTags3', Condition => '$$valPt =~ /^OLYMPUS DIGITAL CAMERA\0/', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::MP4', ByteOrder => 'LittleEndian', }, }, { Name => 'OlympusTags4', Condition => '$$valPt =~ /^.{16}OLYM\0/s', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::MOV3', Start => 12, }, }, { Name => 'PentaxTags', Condition => '$$valPt =~ /^PENTAX DIGITAL CAMERA\0/', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::MOV', ByteOrder => 'LittleEndian', }, }, { Name => 'SamsungTags', Condition => '$$valPt =~ /^SAMSUNG DIGITAL CAMERA\0/', SubDirectory => { TagTable => 'Image::ExifTool::Samsung::MP4', ByteOrder => 'LittleEndian', }, }, { Name => 'SanyoMOV', Condition => q{ $$valPt =~ /^SANYO DIGITAL CAMERA\0/ and $self->{VALUE}->{FileType} eq "MOV" }, SubDirectory => { TagTable => 'Image::ExifTool::Sanyo::MOV', ByteOrder => 'LittleEndian', }, }, { Name => 'SanyoMP4', Condition => q{ $$valPt =~ /^SANYO DIGITAL CAMERA\0/ and $self->{VALUE}->{FileType} eq "MP4" }, SubDirectory => { TagTable => 'Image::ExifTool::Sanyo::MP4', ByteOrder => 'LittleEndian', }, }, { Name => 'UnknownTags', Unknown => 1, Binary => 1 }, ], # ---- Canon ---- CNCV => { Name => 'CompressorVersion', Format => 'string' }, #PH (5D Mark II) CNMN => { Name => 'Model', #PH (EOS 550D) Description => 'Camera Model Name', Format => 'string', # (necessary to remove the trailing NULL) }, CNFV => { Name => 'FirmwareVersion', Format => 'string' }, #PH (EOS 550D) CNTH => { #PH (PowerShot S95) Name => 'CanonCNTH', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CNTH' }, }, CNOP => { #PH (7DmkII) Name => 'CanonCNOP', SubDirectory => { TagTable => 'Image::ExifTool::Canon::CNOP' }, }, # CNDB - 2112 bytes (550D) # CNDM - 4 bytes - 0xff,0xd8,0xff,0xd9 (S95) # CNDG - 10232 bytes, mostly zeros (N100) # ---- Casio ---- QVMI => { #PH Name => 'CasioQVMI', # Casio stores standard EXIF-format information in MOV videos (eg. EX-S880) SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', ProcessProc => \&Image::ExifTool::Exif::ProcessExif, # (because ProcessMOV is default) DirName => 'IFD0', Multi => 0, # (no NextIFD pointer) Start => 10, ByteOrder => 'BigEndian', }, }, # ---- FujiFilm ---- FFMV => { #PH (FinePix HS20EXR) Name => 'FujiFilmFFMV', SubDirectory => { TagTable => 'Image::ExifTool::FujiFilm::FFMV' }, }, MVTG => { #PH (FinePix HS20EXR) Name => 'FujiFilmMVTG', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', ProcessProc => \&Image::ExifTool::Exif::ProcessExif, # (because ProcessMOV is default) DirName => 'IFD0', Start => 16, Base => '$start', ByteOrder => 'LittleEndian', }, }, # ---- GoPro ---- GoPr => 'GoProType', #PH # --- HTC ---- htcb => { Name => 'HTCBinary', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::HTCBinary' }, }, # ---- Kodak ---- DcMD => { Name => 'KodakDcMD', SubDirectory => { TagTable => 'Image::ExifTool::Kodak::DcMD' }, }, # AMBA => Ambarella AVC atom (unknown data written by Kodak Playsport video cam) # tmlp - 1 byte: 0 (PixPro SP360) # pivi - 72 bytes (PixPro SP360) # pive - 12 bytes (PixPro SP360) # m ev - 2 bytes: 0 0 (PixPro SP360) # m wb - 4 bytes: 0 0 0 0 (PixPro SP360) # mclr - 4 bytes: 0 0 0 0 (PixPro SP360) # mmtr - 4 bytes: 6 0 0 0 (PixPro SP360) # mflr - 4 bytes: 0 0 0 0 (PixPro SP360) # lvlm - 24 bytes (PixPro SP360) # ufdm - 4 bytes: 0 0 0 1 (PixPro SP360) # mtdt - 1 byte: 0 (PixPro SP360) # gdta - 75240 bytes (PixPro SP360) # ---- LG ---- adzc => { Name => 'Unknown_adzc', Unknown => 1, Hidden => 1, %langText }, # "false\0/","true\0/" adze => { Name => 'Unknown_adze', Unknown => 1, Hidden => 1, %langText }, # "false\0/" adzm => { Name => 'Unknown_adzm', Unknown => 1, Hidden => 1, %langText }, # "\x0e\x04/","\x10\x06" # ---- Microsoft ---- Xtra => { #PH (microsoft) Name => 'MicrosoftXtra', SubDirectory => { TagTable => 'Image::ExifTool::Microsoft::Xtra' }, }, # ---- Minolta ---- MMA0 => { #PH (DiMage 7Hi) Name => 'MinoltaMMA0', SubDirectory => { TagTable => 'Image::ExifTool::Minolta::MMA' }, }, MMA1 => { #PH (Dimage A2) Name => 'MinoltaMMA1', SubDirectory => { TagTable => 'Image::ExifTool::Minolta::MMA' }, }, # ---- Nikon ---- NCDT => { #PH Name => 'NikonNCDT', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::NCDT' }, }, # ---- Olympus ---- scrn => { #PH (TG-810) Name => 'OlympusPreview', Condition => '$$valPt =~ /^.{4}\xff\xd8\xff\xdb/s', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::scrn' }, }, # ---- Panasonic/Leica ---- PANA => { #PH Name => 'PanasonicPANA', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::PANA' }, }, LEIC => { #PH Name => 'LeicaLEIC', SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::PANA' }, }, # ---- Pentax ---- thmb => [ # (apparently defined by 3gpp, ref 16) { #PH (Pentax Q) Name => 'MakerNotePentax5a', Condition => '$$valPt =~ /^PENTAX \0II/', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::Main', ProcessProc => \&Image::ExifTool::Exif::ProcessExif, # (because ProcessMOV is default) Start => 10, Base => '$start - 10', ByteOrder => 'LittleEndian', }, },{ #PH (TG-810) Name => 'OlympusThumbnail', Condition => '$$valPt =~ /^.{4}\xff\xd8\xff\xdb/s', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::thmb' }, },{ #17 (format is in bytes 3-7) Name => 'ThumbnailImage', Condition => '$$valPt =~ /^.{8}\xff\xd8\xff\xdb/s', Groups => { 2 => 'Preview' }, ValueConv => 'substr($val, 8)', },{ #17 (format is in bytes 3-7) Name => 'ThumbnailPNG', Condition => '$$valPt =~ /^.{8}\x89PNG\r\n\x1a\n/s', Groups => { 2 => 'Preview' }, ValueConv => 'substr($val, 8)', },{ Name => 'UnknownThumbnail', Groups => { 2 => 'Preview' }, Binary => 1, }, ], PENT => { #PH Name => 'PentaxPENT', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::PENT', ByteOrder => 'LittleEndian', }, }, PXTH => { #PH (Pentax K-01) Name => 'PentaxPreview', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::PXTH' }, }, PXMN => [{ #PH (Pentax K-01) Name => 'MakerNotePentax5b', Condition => '$$valPt =~ /^PENTAX \0MM/', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::Main', ProcessProc => \&Image::ExifTool::Exif::ProcessExif, # (because ProcessMOV is default) Start => 10, Base => '$start - 10', ByteOrder => 'BigEndian', }, },{ #PH (Pentax 645Z) Name => 'MakerNotePentax5c', Condition => '$$valPt =~ /^PENTAX \0II/', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::Main', ProcessProc => \&Image::ExifTool::Exif::ProcessExif, # (because ProcessMOV is default) Start => 10, Base => '$start - 10', ByteOrder => 'LittleEndian', }, },{ Name => 'MakerNotePentaxUnknown', Binary => 1, }], # ---- Ricoh ---- RTHU => { #PH (GR) Name => 'PreviewImage', Groups => { 2 => 'Preview' }, RawConv => '$self->ValidateImage(\$val, $tag)', }, RMKN => { #PH (GR) Name => 'RicohRMKN', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', ProcessProc => \&Image::ExifTool::ProcessTIFF, # (because ProcessMOV is default) }, }, # ---- Samsung ---- vndr => 'Vendor', #PH (Samsung PL70) SDLN => 'PlayMode', #PH (NC, Samsung ST80 "SEQ_PLAY") INFO => { Name => 'SamsungINFO', SubDirectory => { TagTable => 'Image::ExifTool::Samsung::INFO' }, }, '@sec' => { #PH (Samsung WB30F) Name => 'SamsungSec', SubDirectory => { TagTable => 'Image::ExifTool::Samsung::sec' }, }, 'smta' => { #PH (Samsung SM-C101) Name => 'SamsungSmta', SubDirectory => { TagTable => 'Image::ExifTool::Samsung::smta', Start => 4, }, }, cver => 'CodeVersion', #PH (guess, Samsung MV900F) # ducp - 4 bytes all zero (Samsung ST96,WB750), 52 bytes all zero (Samsung WB30F) # edli - 52 bytes all zero (Samsung WB30F) # @etc - 4 bytes all zero (Samsung WB30F) # saut - 4 bytes all zero (Samsung SM-N900T) # smrd - string "TRUEBLUE" (Samsung SM-C101) # ---- Unknown ---- # CDET - 128 bytes (unknown origin) # # other 3rd-party tags # (ref http://code.google.com/p/mp4parser/source/browse/trunk/isoparser/src/main/resources/isoparser-default.properties?r=814) # ccid => 'ContentID', icnu => 'IconURI', infu => 'InfoURL', cdis => 'ContentDistributorID', albr => { Name => 'AlbumArtist', Groups => { 2 => 'Author' } }, cvru => 'CoverURI', lrcu => 'LyricsURI', tags => { # found in Audible .m4b audio books (ref PH) Name => 'Audible_tags', SubDirectory => { TagTable => 'Image::ExifTool::Audible::tags' }, }, ); # Unknown information stored in HTC One (M8) videos - PH %Image::ExifTool::QuickTime::HTCBinary = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 1 => 'HTC', 2 => 'Video' }, TAG_PREFIX => 'HTCBinary', FORMAT => 'int32u', FIRST_ENTRY => 0, # 0 - values: 1 # 1 - values: 0 # 2 - values: 0 # 3 - values: FileSize minus 12 (why?) # 4 - values: 12 ); # User-specific media data atoms (ref 11) %Image::ExifTool::QuickTime::UserMedia = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 2 => 'Video' }, MTDT => { Name => 'MetaData', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::MetaData' }, }, ); # User-specific media data atoms (ref 11) %Image::ExifTool::QuickTime::MetaData = ( PROCESS_PROC => \&Image::ExifTool::QuickTime::ProcessMetaData, GROUPS => { 2 => 'Video' }, TAG_PREFIX => 'MetaData', 0x01 => 'Title', 0x03 => { Name => 'ProductionDate', Groups => { 2 => 'Time' }, # translate from format "YYYY/mm/dd HH:MM:SS" ValueConv => '$val=~tr{/}{:}; $val', PrintConv => '$self->ConvertDateTime($val)', }, 0x04 => 'Software', 0x05 => 'Product', 0x0a => { Name => 'TrackProperty', RawConv => 'my @a=unpack("Nnn",$val); "@a"', PrintConv => [ { 0 => 'No presentation', BITMASK => { 0 => 'Main track' } }, { 0 => 'No attributes', BITMASK => { 15 => 'Read only' } }, '"Priority $val"', ], }, 0x0b => { Name => 'TimeZone', Groups => { 2 => 'Time' }, RawConv => 'Get16s(\$val,0)', PrintConv => 'TimeZoneString($val)', }, 0x0c => { Name => 'ModifyDate', Groups => { 2 => 'Time' }, # translate from format "YYYY/mm/dd HH:MM:SS" ValueConv => '$val=~tr{/}{:}; $val', PrintConv => '$self->ConvertDateTime($val)', }, ); # compressed movie atoms (ref http://wiki.multimedia.cx/index.php?title=QuickTime_container#cmov) %Image::ExifTool::QuickTime::CMovie = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 2 => 'Video' }, dcom => 'Compression', # cmvd - compressed movie data ); # Profile atoms (ref 11) %Image::ExifTool::QuickTime::Profile = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 2 => 'Video' }, FPRF => { Name => 'FileGlobalProfile', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::FileProf' }, }, APRF => { Name => 'AudioProfile', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::AudioProf' }, }, VPRF => { Name => 'VideoProfile', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::VideoProf' }, }, OLYM => { #PH Name => 'OlympusOLYM', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::OLYM', ByteOrder => 'BigEndian', }, }, ); # FPRF atom information (ref 11) %Image::ExifTool::QuickTime::FileProf = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, FORMAT => 'int32u', 0 => { Name => 'FileProfileVersion', Unknown => 1 }, # unknown = uninteresting 1 => { Name => 'FileFunctionFlags', PrintConv => { BITMASK => { 28 => 'Fragmented', 29 => 'Additional tracks', 30 => 'Edited', # (main AV track is edited) }}, }, # 2 - reserved ); # APRF atom information (ref 11) %Image::ExifTool::QuickTime::AudioProf = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Audio' }, FORMAT => 'int32u', 0 => { Name => 'AudioProfileVersion', Unknown => 1 }, 1 => 'AudioTrackID', 2 => { Name => 'AudioCodec', Format => 'undef[4]', }, 3 => { Name => 'AudioCodecInfo', Unknown => 1, PrintConv => 'sprintf("0x%.4x", $val)', }, 4 => { Name => 'AudioAttributes', PrintConv => { BITMASK => { 0 => 'Encrypted', 1 => 'Variable bitrate', 2 => 'Dual mono', }}, }, 5 => { Name => 'AudioAvgBitrate', ValueConv => '$val * 1000', PrintConv => 'ConvertBitrate($val)', }, 6 => { Name => 'AudioMaxBitrate', ValueConv => '$val * 1000', PrintConv => 'ConvertBitrate($val)', }, 7 => 'AudioSampleRate', 8 => 'AudioChannels', ); # VPRF atom information (ref 11) %Image::ExifTool::QuickTime::VideoProf = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, FORMAT => 'int32u', 0 => { Name => 'VideoProfileVersion', Unknown => 1 }, 1 => 'VideoTrackID', 2 => { Name => 'VideoCodec', Format => 'undef[4]', }, 3 => { Name => 'VideoCodecInfo', Unknown => 1, PrintConv => 'sprintf("0x%.4x", $val)', }, 4 => { Name => 'VideoAttributes', PrintConv => { BITMASK => { 0 => 'Encrypted', 1 => 'Variable bitrate', 2 => 'Variable frame rate', 3 => 'Interlaced', }}, }, 5 => { Name => 'VideoAvgBitrate', ValueConv => '$val * 1000', PrintConv => 'ConvertBitrate($val)', }, 6 => { Name => 'VideoMaxBitrate', ValueConv => '$val * 1000', PrintConv => 'ConvertBitrate($val)', }, 7 => { Name => 'VideoAvgFrameRate', Format => 'fixed32u', PrintConv => 'int($val * 1000 + 0.5) / 1000', }, 8 => { Name => 'VideoMaxFrameRate', Format => 'fixed32u', PrintConv => 'int($val * 1000 + 0.5) / 1000', }, 9 => { Name => 'VideoSize', Format => 'int16u[2]', PrintConv => '$val=~tr/ /x/; $val', }, 10 => { Name => 'PixelAspectRatio', Format => 'int16u[2]', PrintConv => '$val=~tr/ /:/; $val', }, ); # meta atoms %Image::ExifTool::QuickTime::Meta = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 2 => 'Video' }, ilst => { Name => 'ItemList', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::ItemList', HasData => 1, # process atoms as containers with 'data' elements }, }, # MP4 tags (ref 5) hdlr => { Name => 'Handler', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Handler' }, }, dinf => { Name => 'DataInformation', Flags => ['Binary','Unknown'], }, ipmc => { Name => 'IPMPControl', Flags => ['Binary','Unknown'], }, iloc => { Name => 'ItemLocation', Flags => ['Binary','Unknown'], }, ipro => { Name => 'ItemProtection', Flags => ['Binary','Unknown'], }, iinf => { Name => 'ItemInformation', Flags => ['Binary','Unknown'], }, 'xml ' => { Name => 'XML', Flags => [ 'Binary', 'Protected', 'BlockExtract' ], SubDirectory => { TagTable => 'Image::ExifTool::XMP::XML', IgnoreProp => { NonRealTimeMeta => 1 }, # ignore container for Sony 'nrtm' }, }, 'keys' => { Name => 'Keys', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Keys' }, }, bxml => { Name => 'BinaryXML', Flags => ['Binary','Unknown'], }, pitm => { Name => 'PrimaryItemReference', Flags => ['Binary','Unknown'], }, free => { #PH Name => 'Free', Flags => ['Binary','Unknown'], }, ); # track reference atoms %Image::ExifTool::QuickTime::TrackRef = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 1 => 'Track#', 2 => 'Video' }, chap => { Name => 'ChapterListTrackID', Format => 'int32u' }, tmcd => { Name => 'TimeCode', Format => 'int32u' }, mpod => { #PH (FLIR MP4) Name => 'ElementaryStreamTrack', Format => 'int32u', ValueConv => '$val =~ s/^1 //; $val', # (why 2 numbers? -- ignore the first if "1") }, # also: sync, scpt, ssrc, iTunesInfo ); # track aperture mode dimensions atoms # (ref https://developer.apple.com/library/mac/#documentation/QuickTime/QTFF/QTFFChap2/qtff2.html) %Image::ExifTool::QuickTime::TrackAperture = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 1 => 'Track#', 2 => 'Video' }, clef => { Name => 'CleanApertureDimensions', Format => 'fixed32u', Count => 3, ValueConv => '$val =~ s/^.*? //; $val', # remove flags word PrintConv => '$val =~ tr/ /x/; $val', }, prof => { Name => 'ProductionApertureDimensions', Format => 'fixed32u', Count => 3, ValueConv => '$val =~ s/^.*? //; $val', PrintConv => '$val =~ tr/ /x/; $val', }, enof => { Name => 'EncodedPixelsDimensions', Format => 'fixed32u', Count => 3, ValueConv => '$val =~ s/^.*? //; $val', PrintConv => '$val =~ tr/ /x/; $val', }, ); # item list atoms # -> these atoms are unique, and contain one or more 'data' atoms %Image::ExifTool::QuickTime::ItemList = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 2 => 'Audio' }, NOTES => q{ As well as these tags, the 'mdta' handler uses numerical tag ID's which are added dynamically to this table after processing the Meta Keys information. }, # in this table, binary 1 and 2-byte "data"-type tags are interpreted as # int8u and int16u. Multi-byte binary "data" tags are extracted as binary data "\xa9ART" => 'Artist', "\xa9alb" => 'Album', "\xa9cmt" => 'Comment', "\xa9com" => 'Composer', "\xa9day" => { Name => 'ContentCreateDate', Groups => { 2 => 'Time' }, # handle values in the form "2010-02-12T13:27:14-0800" ValueConv => q{ require Image::ExifTool::XMP; $val = Image::ExifTool::XMP::ConvertXMPDate($val); $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary return $val; }, PrintConv => '$self->ConvertDateTime($val)', }, "\xa9des" => 'Description', #4 "\xa9enc" => 'EncodedBy', #10 "\xa9gen" => 'Genre', "\xa9grp" => 'Grouping', "\xa9lyr" => 'Lyrics', "\xa9nam" => 'Title', # "\xa9st3" ? #10 "\xa9too" => 'Encoder', "\xa9trk" => 'Track', "\xa9wrt" => 'Composer', '----' => { Name => 'iTunesInfo', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::iTunesInfo' }, }, aART => { Name => 'AlbumArtist', Groups => { 2 => 'Author' } }, covr => { Name => 'CoverArt', Groups => { 2 => 'Preview' } }, cpil => { #10 Name => 'Compilation', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, disk => { Name => 'DiskNumber', Format => 'undef', # (necessary to prevent decoding as string!) ValueConv => 'length($val) >= 6 ? join(" of ",unpack("x2nn",$val)) : \$val', }, pgap => { #10 Name => 'PlayGap', PrintConv => { 0 => 'Insert Gap', 1 => 'No Gap', }, }, tmpo => { Name => 'BeatsPerMinute', Format => 'int16u', # marked as boolean but really int16u in my sample }, trkn => { Name => 'TrackNumber', Format => 'undef', # (necessary to prevent decoding as string!) ValueConv => 'length($val) >= 6 ? join(" of ",unpack("x2nn",$val)) : \$val', }, # # Note: it is possible that the tags below are not being decoded properly # because I don't have samples to verify many of these - PH # akID => { #10 Name => 'AppleStoreAccountType', PrintConv => { 0 => 'iTunes', 1 => 'AOL', }, }, albm => 'Album', #(ffmpeg source) apID => 'AppleStoreAccount', atID => { #10 (or TV series) Name => 'AlbumTitleID', Format => 'int32u', }, auth => { Name => 'Author', Groups => { 2 => 'Author' } }, catg => 'Category', #7 cnID => { #10 Name => 'AppleStoreCatalogID', Format => 'int32u', }, cprt => { Name => 'Copyright', Groups => { 2 => 'Author' } }, dscp => 'Description', desc => 'Description', #7 gnre => { #10 Name => 'Genre', PrintConv => q{ return $val unless $val =~ /^\d+$/; require Image::ExifTool::ID3; Image::ExifTool::ID3::PrintGenre($val - 1); # note the "- 1" }, }, egid => 'EpisodeGlobalUniqueID', #7 geID => { #10 Name => 'GenreID', Format => 'int32u', SeparateTable => 1, PrintConv => { #21 (based on http://www.apple.com/itunes/affiliates/resources/documentation/genre-mapping.html) 2 => 'Music|Blues', 3 => 'Music|Comedy', 4 => "Music|Children's Music", 5 => 'Music|Classical', 6 => 'Music|Country', 7 => 'Music|Electronic', 8 => 'Music|Holiday', 9 => 'Music|Classical|Opera', 10 => 'Music|Singer/Songwriter', 11 => 'Music|Jazz', 12 => 'Music|Latino', 13 => 'Music|New Age', 14 => 'Music|Pop', 15 => 'Music|R&B/Soul', 16 => 'Music|Soundtrack', 17 => 'Music|Dance', 18 => 'Music|Hip-Hop/Rap', 19 => 'Music|World', 20 => 'Music|Alternative', 21 => 'Music|Rock', 22 => 'Music|Christian & Gospel', 23 => 'Music|Vocal', 24 => 'Music|Reggae', 25 => 'Music|Easy Listening', 26 => 'Podcasts', 27 => 'Music|J-Pop', 28 => 'Music|Enka', 29 => 'Music|Anime', 30 => 'Music|Kayokyoku', 31 => 'Music Videos', 32 => 'TV Shows', 33 => 'Movies', 34 => 'Music', 35 => 'iPod Games', 36 => 'App Store', 37 => 'Tones', 38 => 'Books', 39 => 'Mac App Store', 40 => 'Textbooks', 50 => 'Music|Fitness & Workout', 51 => 'Music|Pop|K-Pop', 52 => 'Music|Karaoke', 53 => 'Music|Instrumental', 74 => 'Audiobooks|News', 75 => 'Audiobooks|Programs & Performances', 1001 => 'Music|Alternative|College Rock', 1002 => 'Music|Alternative|Goth Rock', 1003 => 'Music|Alternative|Grunge', 1004 => 'Music|Alternative|Indie Rock', 1005 => 'Music|Alternative|New Wave', 1006 => 'Music|Alternative|Punk', 1007 => 'Music|Blues|Chicago Blues', 1009 => 'Music|Blues|Classic Blues', 1010 => 'Music|Blues|Contemporary Blues', 1011 => 'Music|Blues|Country Blues', 1012 => 'Music|Blues|Delta Blues', 1013 => 'Music|Blues|Electric Blues', 1014 => "Music|Children's Music|Lullabies", 1015 => "Music|Children's Music|Sing-Along", 1016 => "Music|Children's Music|Stories", 1017 => 'Music|Classical|Avant-Garde', 1018 => 'Music|Classical|Baroque Era', 1019 => 'Music|Classical|Chamber Music', 1020 => 'Music|Classical|Chant', 1021 => 'Music|Classical|Choral', 1022 => 'Music|Classical|Classical Crossover', 1023 => 'Music|Classical|Early Music', 1024 => 'Music|Classical|Impressionist', 1025 => 'Music|Classical|Medieval Era', 1026 => 'Music|Classical|Minimalism', 1027 => 'Music|Classical|Modern Era', 1028 => 'Music|Classical|Opera', 1029 => 'Music|Classical|Orchestral', 1030 => 'Music|Classical|Renaissance', 1031 => 'Music|Classical|Romantic Era', 1032 => 'Music|Classical|Wedding Music', 1033 => 'Music|Country|Alternative Country', 1034 => 'Music|Country|Americana', 1035 => 'Music|Country|Bluegrass', 1036 => 'Music|Country|Contemporary Bluegrass', 1037 => 'Music|Country|Contemporary Country', 1038 => 'Music|Country|Country Gospel', 1039 => 'Music|Country|Honky Tonk', 1040 => 'Music|Country|Outlaw Country', 1041 => 'Music|Country|Traditional Bluegrass', 1042 => 'Music|Country|Traditional Country', 1043 => 'Music|Country|Urban Cowboy', 1044 => 'Music|Dance|Breakbeat', 1045 => 'Music|Dance|Exercise', 1046 => 'Music|Dance|Garage', 1047 => 'Music|Dance|Hardcore', 1048 => 'Music|Dance|House', 1049 => "Music|Dance|Jungle/Drum'n'bass", 1050 => 'Music|Dance|Techno', 1051 => 'Music|Dance|Trance', 1052 => 'Music|Jazz|Big Band', 1053 => 'Music|Jazz|Bop', 1054 => 'Music|Easy Listening|Lounge', 1055 => 'Music|Easy Listening|Swing', 1056 => 'Music|Electronic|Ambient', 1057 => 'Music|Electronic|Downtempo', 1058 => 'Music|Electronic|Electronica', 1060 => 'Music|Electronic|IDM/Experimental', 1061 => 'Music|Electronic|Industrial', 1062 => 'Music|Singer/Songwriter|Alternative Folk', 1063 => 'Music|Singer/Songwriter|Contemporary Folk', 1064 => 'Music|Singer/Songwriter|Contemporary Singer/Songwriter', 1065 => 'Music|Singer/Songwriter|Folk-Rock', 1066 => 'Music|Singer/Songwriter|New Acoustic', 1067 => 'Music|Singer/Songwriter|Traditional Folk', 1068 => 'Music|Hip-Hop/Rap|Alternative Rap', 1069 => 'Music|Hip-Hop/Rap|Dirty South', 1070 => 'Music|Hip-Hop/Rap|East Coast Rap', 1071 => 'Music|Hip-Hop/Rap|Gangsta Rap', 1072 => 'Music|Hip-Hop/Rap|Hardcore Rap', 1073 => 'Music|Hip-Hop/Rap|Hip-Hop', 1074 => 'Music|Hip-Hop/Rap|Latin Rap', 1075 => 'Music|Hip-Hop/Rap|Old School Rap', 1076 => 'Music|Hip-Hop/Rap|Rap', 1077 => 'Music|Hip-Hop/Rap|Underground Rap', 1078 => 'Music|Hip-Hop/Rap|West Coast Rap', 1079 => 'Music|Holiday|Chanukah', 1080 => 'Music|Holiday|Christmas', 1081 => "Music|Holiday|Christmas: Children's", 1082 => 'Music|Holiday|Christmas: Classic', 1083 => 'Music|Holiday|Christmas: Classical', 1084 => 'Music|Holiday|Christmas: Jazz', 1085 => 'Music|Holiday|Christmas: Modern', 1086 => 'Music|Holiday|Christmas: Pop', 1087 => 'Music|Holiday|Christmas: R&B', 1088 => 'Music|Holiday|Christmas: Religious', 1089 => 'Music|Holiday|Christmas: Rock', 1090 => 'Music|Holiday|Easter', 1091 => 'Music|Holiday|Halloween', 1092 => 'Music|Holiday|Holiday: Other', 1093 => 'Music|Holiday|Thanksgiving', 1094 => 'Music|Christian & Gospel|CCM', 1095 => 'Music|Christian & Gospel|Christian Metal', 1096 => 'Music|Christian & Gospel|Christian Pop', 1097 => 'Music|Christian & Gospel|Christian Rap', 1098 => 'Music|Christian & Gospel|Christian Rock', 1099 => 'Music|Christian & Gospel|Classic Christian', 1100 => 'Music|Christian & Gospel|Contemporary Gospel', 1101 => 'Music|Christian & Gospel|Gospel', 1103 => 'Music|Christian & Gospel|Praise & Worship', 1104 => 'Music|Christian & Gospel|Southern Gospel', 1105 => 'Music|Christian & Gospel|Traditional Gospel', 1106 => 'Music|Jazz|Avant-Garde Jazz', 1107 => 'Music|Jazz|Contemporary Jazz', 1108 => 'Music|Jazz|Crossover Jazz', 1109 => 'Music|Jazz|Dixieland', 1110 => 'Music|Jazz|Fusion', 1111 => 'Music|Jazz|Latin Jazz', 1112 => 'Music|Jazz|Mainstream Jazz', 1113 => 'Music|Jazz|Ragtime', 1114 => 'Music|Jazz|Smooth Jazz', 1115 => 'Music|Latino|Latin Jazz', 1116 => 'Music|Latino|Contemporary Latin', 1117 => 'Music|Latino|Latin Pop', 1118 => 'Music|Latino|Raices', # (Ra&iacute;ces) 1119 => 'Music|Latino|Latin Urban', 1120 => 'Music|Latino|Baladas y Boleros', 1121 => 'Music|Latino|Latin Alternative & Rock', 1122 => 'Music|Brazilian', 1123 => 'Music|Latino|Regional Mexicano', 1124 => 'Music|Latino|Salsa y Tropical', 1125 => 'Music|New Age|Environmental', 1126 => 'Music|New Age|Healing', 1127 => 'Music|New Age|Meditation', 1128 => 'Music|New Age|Nature', 1129 => 'Music|New Age|Relaxation', 1130 => 'Music|New Age|Travel', 1131 => 'Music|Pop|Adult Contemporary', 1132 => 'Music|Pop|Britpop', 1133 => 'Music|Pop|Pop/Rock', 1134 => 'Music|Pop|Soft Rock', 1135 => 'Music|Pop|Teen Pop', 1136 => 'Music|R&B/Soul|Contemporary R&B', 1137 => 'Music|R&B/Soul|Disco', 1138 => 'Music|R&B/Soul|Doo Wop', 1139 => 'Music|R&B/Soul|Funk', 1140 => 'Music|R&B/Soul|Motown', 1141 => 'Music|R&B/Soul|Neo-Soul', 1142 => 'Music|R&B/Soul|Quiet Storm', 1143 => 'Music|R&B/Soul|Soul', 1144 => 'Music|Rock|Adult Alternative', 1145 => 'Music|Rock|American Trad Rock', 1146 => 'Music|Rock|Arena Rock', 1147 => 'Music|Rock|Blues-Rock', 1148 => 'Music|Rock|British Invasion', 1149 => 'Music|Rock|Death Metal/Black Metal', 1150 => 'Music|Rock|Glam Rock', 1151 => 'Music|Rock|Hair Metal', 1152 => 'Music|Rock|Hard Rock', 1153 => 'Music|Rock|Metal', 1154 => 'Music|Rock|Jam Bands', 1155 => 'Music|Rock|Prog-Rock/Art Rock', 1156 => 'Music|Rock|Psychedelic', 1157 => 'Music|Rock|Rock & Roll', 1158 => 'Music|Rock|Rockabilly', 1159 => 'Music|Rock|Roots Rock', 1160 => 'Music|Rock|Singer/Songwriter', 1161 => 'Music|Rock|Southern Rock', 1162 => 'Music|Rock|Surf', 1163 => 'Music|Rock|Tex-Mex', 1165 => 'Music|Soundtrack|Foreign Cinema', 1166 => 'Music|Soundtrack|Musicals', 1167 => 'Music|Comedy|Novelty', 1168 => 'Music|Soundtrack|Original Score', 1169 => 'Music|Soundtrack|Soundtrack', 1171 => 'Music|Comedy|Standup Comedy', 1172 => 'Music|Soundtrack|TV Soundtrack', 1173 => 'Music|Vocal|Standards', 1174 => 'Music|Vocal|Traditional Pop', 1175 => 'Music|Jazz|Vocal Jazz', 1176 => 'Music|Vocal|Vocal Pop', 1177 => 'Music|World|Afro-Beat', 1178 => 'Music|World|Afro-Pop', 1179 => 'Music|World|Cajun', 1180 => 'Music|World|Celtic', 1181 => 'Music|World|Celtic Folk', 1182 => 'Music|World|Contemporary Celtic', 1183 => 'Music|Reggae|Modern Dancehall', 1184 => 'Music|World|Drinking Songs', 1185 => 'Music|Indian|Indian Pop', 1186 => 'Music|World|Japanese Pop', 1187 => 'Music|World|Klezmer', 1188 => 'Music|World|Polka', 1189 => 'Music|World|Traditional Celtic', 1190 => 'Music|World|Worldbeat', 1191 => 'Music|World|Zydeco', 1192 => 'Music|Reggae|Roots Reggae', 1193 => 'Music|Reggae|Dub', 1194 => 'Music|Reggae|Ska', 1195 => 'Music|World|Caribbean', 1196 => 'Music|World|South America', 1197 => 'Music|Arabic', 1198 => 'Music|World|North America', 1199 => 'Music|World|Hawaii', 1200 => 'Music|World|Australia', 1201 => 'Music|World|Japan', 1202 => 'Music|World|France', 1203 => 'Music|World|Africa', 1204 => 'Music|World|Asia', 1205 => 'Music|World|Europe', 1206 => 'Music|World|South Africa', 1207 => 'Music|Jazz|Hard Bop', 1208 => 'Music|Jazz|Trad Jazz', 1209 => 'Music|Jazz|Cool', 1210 => 'Music|Blues|Acoustic Blues', 1211 => 'Music|Classical|High Classical', 1220 => 'Music|Brazilian|Axe', # (Ax&eacute;) 1221 => 'Music|Brazilian|Bossa Nova', 1222 => 'Music|Brazilian|Choro', 1223 => 'Music|Brazilian|Forro', # (Forr&oacute;) 1224 => 'Music|Brazilian|Frevo', 1225 => 'Music|Brazilian|MPB', 1226 => 'Music|Brazilian|Pagode', 1227 => 'Music|Brazilian|Samba', 1228 => 'Music|Brazilian|Sertanejo', 1229 => 'Music|Brazilian|Baile Funk', 1230 => 'Music|Alternative|Chinese Alt', 1231 => 'Music|Alternative|Korean Indie', 1232 => 'Music|Chinese', 1233 => 'Music|Chinese|Chinese Classical', 1234 => 'Music|Chinese|Chinese Flute', 1235 => 'Music|Chinese|Chinese Opera', 1236 => 'Music|Chinese|Chinese Orchestral', 1237 => 'Music|Chinese|Chinese Regional Folk', 1238 => 'Music|Chinese|Chinese Strings', 1239 => 'Music|Chinese|Taiwanese Folk', 1240 => 'Music|Chinese|Tibetan Native Music', 1241 => 'Music|Hip-Hop/Rap|Chinese Hip-Hop', 1242 => 'Music|Hip-Hop/Rap|Korean Hip-Hop', 1243 => 'Music|Korean', 1244 => 'Music|Korean|Korean Classical', 1245 => 'Music|Korean|Korean Trad Song', 1246 => 'Music|Korean|Korean Trad Instrumental', 1247 => 'Music|Korean|Korean Trad Theater', 1248 => 'Music|Rock|Chinese Rock', 1249 => 'Music|Rock|Korean Rock', 1250 => 'Music|Pop|C-Pop', 1251 => 'Music|Pop|Cantopop/HK-Pop', 1252 => 'Music|Pop|Korean Folk-Pop', 1253 => 'Music|Pop|Mandopop', 1254 => 'Music|Pop|Tai-Pop', 1255 => 'Music|Pop|Malaysian Pop', 1256 => 'Music|Pop|Pinoy Pop', 1257 => 'Music|Pop|Original Pilipino Music', 1258 => 'Music|Pop|Manilla Sound', 1259 => 'Music|Pop|Indo Pop', 1260 => 'Music|Pop|Thai Pop', 1261 => 'Music|Vocal|Trot', 1262 => 'Music|Indian', 1263 => 'Music|Indian|Bollywood', 1264 => 'Music|Indian|Tamil', 1265 => 'Music|Indian|Telugu', 1266 => 'Music|Indian|Regional Indian', 1267 => 'Music|Indian|Devotional & Spiritual', 1268 => 'Music|Indian|Sufi', 1269 => 'Music|Indian|Indian Classical', 1270 => 'Music|World|Russian Chanson', 1271 => 'Music|World|Dini', 1272 => 'Music|World|Halk', 1273 => 'Music|World|Sanat', 1274 => 'Music|World|Dangdut', 1275 => 'Music|World|Indonesian Religious', 1276 => 'Music|World|Calypso', 1277 => 'Music|World|Soca', 1278 => 'Music|Indian|Ghazals', 1279 => 'Music|Indian|Indian Folk', 1280 => 'Music|World|Arabesque', 1281 => 'Music|World|Afrikaans', 1282 => 'Music|World|Farsi', 1283 => 'Music|World|Israeli', 1284 => 'Music|Arabic|Khaleeji', 1285 => 'Music|Arabic|North African', 1286 => 'Music|Arabic|Arabic Pop', 1287 => 'Music|Arabic|Islamic', 1288 => 'Music|Soundtrack|Sound Effects', 1289 => 'Music|Folk', 1290 => 'Music|Orchestral', 1291 => 'Music|Marching', 1293 => 'Music|Pop|Oldies', 1294 => 'Music|Country|Thai Country', 1295 => 'Music|World|Flamenco', 1296 => 'Music|World|Tango', 1297 => 'Music|World|Fado', 1298 => 'Music|World|Iberia', 1299 => 'Music|World|Russian', 1300 => 'Music|World|Turkish', 1301 => 'Podcasts|Arts', 1302 => 'Podcasts|Society & Culture|Personal Journals', 1303 => 'Podcasts|Comedy', 1304 => 'Podcasts|Education', 1305 => 'Podcasts|Kids & Family', 1306 => 'Podcasts|Arts|Food', 1307 => 'Podcasts|Health', 1309 => 'Podcasts|TV & Film', 1310 => 'Podcasts|Music', 1311 => 'Podcasts|News & Politics', 1314 => 'Podcasts|Religion & Spirituality', 1315 => 'Podcasts|Science & Medicine', 1316 => 'Podcasts|Sports & Recreation', 1318 => 'Podcasts|Technology', 1320 => 'Podcasts|Society & Culture|Places & Travel', 1321 => 'Podcasts|Business', 1323 => 'Podcasts|Games & Hobbies', 1324 => 'Podcasts|Society & Culture', 1325 => 'Podcasts|Government & Organizations', 1337 => 'Music Videos|Classical|Piano', 1401 => 'Podcasts|Arts|Literature', 1402 => 'Podcasts|Arts|Design', 1404 => 'Podcasts|Games & Hobbies|Video Games', 1405 => 'Podcasts|Arts|Performing Arts', 1406 => 'Podcasts|Arts|Visual Arts', 1410 => 'Podcasts|Business|Careers', 1412 => 'Podcasts|Business|Investing', 1413 => 'Podcasts|Business|Management & Marketing', 1415 => 'Podcasts|Education|K-12', 1416 => 'Podcasts|Education|Higher Education', 1417 => 'Podcasts|Health|Fitness & Nutrition', 1420 => 'Podcasts|Health|Self-Help', 1421 => 'Podcasts|Health|Sexuality', 1438 => 'Podcasts|Religion & Spirituality|Buddhism', 1439 => 'Podcasts|Religion & Spirituality|Christianity', 1440 => 'Podcasts|Religion & Spirituality|Islam', 1441 => 'Podcasts|Religion & Spirituality|Judaism', 1443 => 'Podcasts|Society & Culture|Philosophy', 1444 => 'Podcasts|Religion & Spirituality|Spirituality', 1446 => 'Podcasts|Technology|Gadgets', 1448 => 'Podcasts|Technology|Tech News', 1450 => 'Podcasts|Technology|Podcasting', 1454 => 'Podcasts|Games & Hobbies|Automotive', 1455 => 'Podcasts|Games & Hobbies|Aviation', 1456 => 'Podcasts|Sports & Recreation|Outdoor', 1459 => 'Podcasts|Arts|Fashion & Beauty', 1460 => 'Podcasts|Games & Hobbies|Hobbies', 1461 => 'Podcasts|Games & Hobbies|Other Games', 1462 => 'Podcasts|Society & Culture|History', 1463 => 'Podcasts|Religion & Spirituality|Hinduism', 1464 => 'Podcasts|Religion & Spirituality|Other', 1465 => 'Podcasts|Sports & Recreation|Professional', 1466 => 'Podcasts|Sports & Recreation|College & High School', 1467 => 'Podcasts|Sports & Recreation|Amateur', 1468 => 'Podcasts|Education|Educational Technology', 1469 => 'Podcasts|Education|Language Courses', 1470 => 'Podcasts|Education|Training', 1471 => 'Podcasts|Business|Business News', 1472 => 'Podcasts|Business|Shopping', 1473 => 'Podcasts|Government & Organizations|National', 1474 => 'Podcasts|Government & Organizations|Regional', 1475 => 'Podcasts|Government & Organizations|Local', 1476 => 'Podcasts|Government & Organizations|Non-Profit', 1477 => 'Podcasts|Science & Medicine|Natural Sciences', 1478 => 'Podcasts|Science & Medicine|Medicine', 1479 => 'Podcasts|Science & Medicine|Social Sciences', 1480 => 'Podcasts|Technology|Software How-To', 1481 => 'Podcasts|Health|Alternative Health', 1602 => 'Music Videos|Blues', 1603 => 'Music Videos|Comedy', 1604 => "Music Videos|Children's Music", 1605 => 'Music Videos|Classical', 1606 => 'Music Videos|Country', 1607 => 'Music Videos|Electronic', 1608 => 'Music Videos|Holiday', 1609 => 'Music Videos|Classical|Opera', 1610 => 'Music Videos|Singer/Songwriter', 1611 => 'Music Videos|Jazz', 1612 => 'Music Videos|Latin', 1613 => 'Music Videos|New Age', 1614 => 'Music Videos|Pop', 1615 => 'Music Videos|R&B/Soul', 1616 => 'Music Videos|Soundtrack', 1617 => 'Music Videos|Dance', 1618 => 'Music Videos|Hip-Hop/Rap', 1619 => 'Music Videos|World', 1620 => 'Music Videos|Alternative', 1621 => 'Music Videos|Rock', 1622 => 'Music Videos|Christian & Gospel', 1623 => 'Music Videos|Vocal', 1624 => 'Music Videos|Reggae', 1625 => 'Music Videos|Easy Listening', 1626 => 'Music Videos|Podcasts', 1627 => 'Music Videos|J-Pop', 1628 => 'Music Videos|Enka', 1629 => 'Music Videos|Anime', 1630 => 'Music Videos|Kayokyoku', 1631 => 'Music Videos|Disney', 1632 => 'Music Videos|French Pop', 1633 => 'Music Videos|German Pop', 1634 => 'Music Videos|German Folk', 1635 => 'Music Videos|Alternative|Chinese Alt', 1636 => 'Music Videos|Alternative|Korean Indie', 1637 => 'Music Videos|Chinese', 1638 => 'Music Videos|Chinese|Chinese Classical', 1639 => 'Music Videos|Chinese|Chinese Flute', 1640 => 'Music Videos|Chinese|Chinese Opera', 1641 => 'Music Videos|Chinese|Chinese Orchestral', 1642 => 'Music Videos|Chinese|Chinese Regional Folk', 1643 => 'Music Videos|Chinese|Chinese Strings', 1644 => 'Music Videos|Chinese|Taiwanese Folk', 1645 => 'Music Videos|Chinese|Tibetan Native Music', 1646 => 'Music Videos|Hip-Hop/Rap|Chinese Hip-Hop', 1647 => 'Music Videos|Hip-Hop/Rap|Korean Hip-Hop', 1648 => 'Music Videos|Korean', 1649 => 'Music Videos|Korean|Korean Classical', 1650 => 'Music Videos|Korean|Korean Trad Song', 1651 => 'Music Videos|Korean|Korean Trad Instrumental', 1652 => 'Music Videos|Korean|Korean Trad Theater', 1653 => 'Music Videos|Rock|Chinese Rock', 1654 => 'Music Videos|Rock|Korean Rock', 1655 => 'Music Videos|Pop|C-Pop', 1656 => 'Music Videos|Pop|Cantopop/HK-Pop', 1657 => 'Music Videos|Pop|Korean Folk-Pop', 1658 => 'Music Videos|Pop|Mandopop', 1659 => 'Music Videos|Pop|Tai-Pop', 1660 => 'Music Videos|Pop|Malaysian Pop', 1661 => 'Music Videos|Pop|Pinoy Pop', 1662 => 'Music Videos|Pop|Original Pilipino Music', 1663 => 'Music Videos|Pop|Manilla Sound', 1664 => 'Music Videos|Pop|Indo Pop', 1665 => 'Music Videos|Pop|Thai Pop', 1666 => 'Music Videos|Vocal|Trot', 1671 => 'Music Videos|Brazilian', 1672 => 'Music Videos|Brazilian|Axe', # (Ax&eacute;) 1673 => 'Music Videos|Brazilian|Baile Funk', 1674 => 'Music Videos|Brazilian|Bossa Nova', 1675 => 'Music Videos|Brazilian|Choro', 1676 => 'Music Videos|Brazilian|Forro', 1677 => 'Music Videos|Brazilian|Frevo', 1678 => 'Music Videos|Brazilian|MPB', 1679 => 'Music Videos|Brazilian|Pagode', 1680 => 'Music Videos|Brazilian|Samba', 1681 => 'Music Videos|Brazilian|Sertanejo', 1682 => 'Music Videos|Classical|High Classical', 1683 => 'Music Videos|Fitness & Workout', 1684 => 'Music Videos|Instrumental', 1685 => 'Music Videos|Jazz|Big Band', 1686 => 'Music Videos|Pop|K-Pop', 1687 => 'Music Videos|Karaoke', 1688 => 'Music Videos|Rock|Heavy Metal', 1689 => 'Music Videos|Spoken Word', 1690 => 'Music Videos|Indian', 1691 => 'Music Videos|Indian|Bollywood', 1692 => 'Music Videos|Indian|Tamil', 1693 => 'Music Videos|Indian|Telugu', 1694 => 'Music Videos|Indian|Regional Indian', 1695 => 'Music Videos|Indian|Devotional & Spiritual', 1696 => 'Music Videos|Indian|Sufi', 1697 => 'Music Videos|Indian|Indian Classical', 1698 => 'Music Videos|World|Russian Chanson', 1699 => 'Music Videos|World|Dini', 1700 => 'Music Videos|World|Halk', 1701 => 'Music Videos|World|Sanat', 1702 => 'Music Videos|World|Dangdut', 1703 => 'Music Videos|World|Indonesian Religious', 1704 => 'Music Videos|Indian|Indian Pop', 1705 => 'Music Videos|World|Calypso', 1706 => 'Music Videos|World|Soca', 1707 => 'Music Videos|Indian|Ghazals', 1708 => 'Music Videos|Indian|Indian Folk', 1709 => 'Music Videos|World|Arabesque', 1710 => 'Music Videos|World|Afrikaans', 1711 => 'Music Videos|World|Farsi', 1712 => 'Music Videos|World|Israeli', 1713 => 'Music Videos|Arabic', 1714 => 'Music Videos|Arabic|Khaleeji', 1715 => 'Music Videos|Arabic|North African', 1716 => 'Music Videos|Arabic|Arabic Pop', 1717 => 'Music Videos|Arabic|Islamic', 1718 => 'Music Videos|Soundtrack|Sound Effects', 1719 => 'Music Videos|Folk', 1720 => 'Music Videos|Orchestral', 1721 => 'Music Videos|Marching', 1723 => 'Music Videos|Pop|Oldies', 1724 => 'Music Videos|Country|Thai Country', 1725 => 'Music Videos|World|Flamenco', 1726 => 'Music Videos|World|Tango', 1727 => 'Music Videos|World|Fado', 1728 => 'Music Videos|World|Iberia', 1729 => 'Music Videos|World|Russian', 1730 => 'Music Videos|World|Turkish', 1731 => 'Music Videos|Alternative|College Rock', 1732 => 'Music Videos|Alternative|Goth Rock', 1733 => 'Music Videos|Alternative|Grunge', 1734 => 'Music Videos|Alternative|Indie Rock', 1735 => 'Music Videos|Alternative|New Wave', 1736 => 'Music Videos|Alternative|Punk', 1737 => 'Music Videos|Blues|Acoustic Blues', 1738 => 'Music Videos|Blues|Chicago Blues', 1739 => 'Music Videos|Blues|Classic Blues', 1740 => 'Music Videos|Blues|Contemporary Blues', 1741 => 'Music Videos|Blues|Country Blues', 1742 => 'Music Videos|Blues|Delta Blues', 1743 => 'Music Videos|Blues|Electric Blues', 1744 => "Music Videos|Children's Music|Lullabies", 1745 => "Music Videos|Children's Music|Sing-Along", 1746 => "Music Videos|Children's Music|Stories", 1747 => 'Music Videos|Christian & Gospel|CCM', 1748 => 'Music Videos|Christian & Gospel|Christian Metal', 1749 => 'Music Videos|Christian & Gospel|Christian Pop', 1750 => 'Music Videos|Christian & Gospel|Christian Rap', 1751 => 'Music Videos|Christian & Gospel|Christian Rock', 1752 => 'Music Videos|Christian & Gospel|Classic Christian', 1753 => 'Music Videos|Christian & Gospel|Contemporary Gospel', 1754 => 'Music Videos|Christian & Gospel|Gospel', 1755 => 'Music Videos|Christian & Gospel|Praise & Worship', 1756 => 'Music Videos|Christian & Gospel|Southern Gospel', 1757 => 'Music Videos|Christian & Gospel|Traditional Gospel', 1758 => 'Music Videos|Classical|Avant-Garde', 1759 => 'Music Videos|Classical|Baroque Era', 1760 => 'Music Videos|Classical|Chamber Music', 1761 => 'Music Videos|Classical|Chant', 1762 => 'Music Videos|Classical|Choral', 1763 => 'Music Videos|Classical|Classical Crossover', 1764 => 'Music Videos|Classical|Early Music', 1765 => 'Music Videos|Classical|Impressionist', 1766 => 'Music Videos|Classical|Medieval Era', 1767 => 'Music Videos|Classical|Minimalism', 1768 => 'Music Videos|Classical|Modern Era', 1769 => 'Music Videos|Classical|Orchestral', 1770 => 'Music Videos|Classical|Renaissance', 1771 => 'Music Videos|Classical|Romantic Era', 1772 => 'Music Videos|Classical|Wedding Music', 1773 => 'Music Videos|Comedy|Novelty', 1774 => 'Music Videos|Comedy|Standup Comedy', 1775 => 'Music Videos|Country|Alternative Country', 1776 => 'Music Videos|Country|Americana', 1777 => 'Music Videos|Country|Bluegrass', 1778 => 'Music Videos|Country|Contemporary Bluegrass', 1779 => 'Music Videos|Country|Contemporary Country', 1780 => 'Music Videos|Country|Country Gospel', 1781 => 'Music Videos|Country|Honky Tonk', 1782 => 'Music Videos|Country|Outlaw Country', 1783 => 'Music Videos|Country|Traditional Bluegrass', 1784 => 'Music Videos|Country|Traditional Country', 1785 => 'Music Videos|Country|Urban Cowboy', 1786 => 'Music Videos|Dance|Breakbeat', 1787 => 'Music Videos|Dance|Exercise', 1788 => 'Music Videos|Dance|Garage', 1789 => 'Music Videos|Dance|Hardcore', 1790 => 'Music Videos|Dance|House', 1791 => "Music Videos|Dance|Jungle/Drum'n'bass", 1792 => 'Music Videos|Dance|Techno', 1793 => 'Music Videos|Dance|Trance', 1794 => 'Music Videos|Easy Listening|Lounge', 1795 => 'Music Videos|Easy Listening|Swing', 1796 => 'Music Videos|Electronic|Ambient', 1797 => 'Music Videos|Electronic|Downtempo', 1798 => 'Music Videos|Electronic|Electronica', 1799 => 'Music Videos|Electronic|IDM/Experimental', 1800 => 'Music Videos|Electronic|Industrial', 1801 => 'Music Videos|Hip-Hop/Rap|Alternative Rap', 1802 => 'Music Videos|Hip-Hop/Rap|Dirty South', 1803 => 'Music Videos|Hip-Hop/Rap|East Coast Rap', 1804 => 'Music Videos|Hip-Hop/Rap|Gangsta Rap', 1805 => 'Music Videos|Hip-Hop/Rap|Hardcore Rap', 1806 => 'Music Videos|Hip-Hop/Rap|Hip-Hop', 1807 => 'Music Videos|Hip-Hop/Rap|Latin Rap', 1808 => 'Music Videos|Hip-Hop/Rap|Old School Rap', 1809 => 'Music Videos|Hip-Hop/Rap|Rap', 1810 => 'Music Videos|Hip-Hop/Rap|Underground Rap', 1811 => 'Music Videos|Hip-Hop/Rap|West Coast Rap', 1812 => 'Music Videos|Holiday|Chanukah', 1813 => 'Music Videos|Holiday|Christmas', 1814 => "Music Videos|Holiday|Christmas: Children's", 1815 => 'Music Videos|Holiday|Christmas: Classic', 1816 => 'Music Videos|Holiday|Christmas: Classical', 1817 => 'Music Videos|Holiday|Christmas: Jazz', 1818 => 'Music Videos|Holiday|Christmas: Modern', 1819 => 'Music Videos|Holiday|Christmas: Pop', 1820 => 'Music Videos|Holiday|Christmas: R&B', 1821 => 'Music Videos|Holiday|Christmas: Religious', 1822 => 'Music Videos|Holiday|Christmas: Rock', 1823 => 'Music Videos|Holiday|Easter', 1824 => 'Music Videos|Holiday|Halloween', 1825 => 'Music Videos|Holiday|Thanksgiving', 1826 => 'Music Videos|Jazz|Avant-Garde Jazz', 1828 => 'Music Videos|Jazz|Bop', 1829 => 'Music Videos|Jazz|Contemporary Jazz', 1830 => 'Music Videos|Jazz|Cool', 1831 => 'Music Videos|Jazz|Crossover Jazz', 1832 => 'Music Videos|Jazz|Dixieland', 1833 => 'Music Videos|Jazz|Fusion', 1834 => 'Music Videos|Jazz|Hard Bop', 1835 => 'Music Videos|Jazz|Latin Jazz', 1836 => 'Music Videos|Jazz|Mainstream Jazz', 1837 => 'Music Videos|Jazz|Ragtime', 1838 => 'Music Videos|Jazz|Smooth Jazz', 1839 => 'Music Videos|Jazz|Trad Jazz', 1840 => 'Music Videos|Latin|Alternative & Rock in Spanish', 1841 => 'Music Videos|Latin|Baladas y Boleros', 1842 => 'Music Videos|Latin|Contemporary Latin', 1843 => 'Music Videos|Latin|Latin Jazz', 1844 => 'Music Videos|Latin|Latin Urban', 1845 => 'Music Videos|Latin|Pop in Spanish', 1846 => 'Music Videos|Latin|Raices', 1847 => 'Music Videos|Latin|Regional Mexicano', 1848 => 'Music Videos|Latin|Salsa y Tropical', 1849 => 'Music Videos|New Age|Healing', 1850 => 'Music Videos|New Age|Meditation', 1851 => 'Music Videos|New Age|Nature', 1852 => 'Music Videos|New Age|Relaxation', 1853 => 'Music Videos|New Age|Travel', 1854 => 'Music Videos|Pop|Adult Contemporary', 1855 => 'Music Videos|Pop|Britpop', 1856 => 'Music Videos|Pop|Pop/Rock', 1857 => 'Music Videos|Pop|Soft Rock', 1858 => 'Music Videos|Pop|Teen Pop', 1859 => 'Music Videos|R&B/Soul|Contemporary R&B', 1860 => 'Music Videos|R&B/Soul|Disco', 1861 => 'Music Videos|R&B/Soul|Doo Wop', 1862 => 'Music Videos|R&B/Soul|Funk', 1863 => 'Music Videos|R&B/Soul|Motown', 1864 => 'Music Videos|R&B/Soul|Neo-Soul', 1865 => 'Music Videos|R&B/Soul|Soul', 1866 => 'Music Videos|Reggae|Modern Dancehall', 1867 => 'Music Videos|Reggae|Dub', 1868 => 'Music Videos|Reggae|Roots Reggae', 1869 => 'Music Videos|Reggae|Ska', 1870 => 'Music Videos|Rock|Adult Alternative', 1871 => 'Music Videos|Rock|American Trad Rock', 1872 => 'Music Videos|Rock|Arena Rock', 1873 => 'Music Videos|Rock|Blues-Rock', 1874 => 'Music Videos|Rock|British Invasion', 1875 => 'Music Videos|Rock|Death Metal/Black Metal', 1876 => 'Music Videos|Rock|Glam Rock', 1877 => 'Music Videos|Rock|Hair Metal', 1878 => 'Music Videos|Rock|Hard Rock', 1879 => 'Music Videos|Rock|Jam Bands', 1880 => 'Music Videos|Rock|Prog-Rock/Art Rock', 1881 => 'Music Videos|Rock|Psychedelic', 1882 => 'Music Videos|Rock|Rock & Roll', 1883 => 'Music Videos|Rock|Rockabilly', 1884 => 'Music Videos|Rock|Roots Rock', 1885 => 'Music Videos|Rock|Singer/Songwriter', 1886 => 'Music Videos|Rock|Southern Rock', 1887 => 'Music Videos|Rock|Surf', 1888 => 'Music Videos|Rock|Tex-Mex', 1889 => 'Music Videos|Singer/Songwriter|Alternative Folk', 1890 => 'Music Videos|Singer/Songwriter|Contemporary Folk', 1891 => 'Music Videos|Singer/Songwriter|Contemporary Singer/Songwriter', 1892 => 'Music Videos|Singer/Songwriter|Folk-Rock', 1893 => 'Music Videos|Singer/Songwriter|New Acoustic', 1894 => 'Music Videos|Singer/Songwriter|Traditional Folk', 1895 => 'Music Videos|Soundtrack|Foreign Cinema', 1896 => 'Music Videos|Soundtrack|Musicals', 1897 => 'Music Videos|Soundtrack|Original Score', 1898 => 'Music Videos|Soundtrack|Soundtrack', 1899 => 'Music Videos|Soundtrack|TV Soundtrack', 1900 => 'Music Videos|Vocal|Standards', 1901 => 'Music Videos|Vocal|Traditional Pop', 1902 => 'Music Videos|Jazz|Vocal Jazz', 1903 => 'Music Videos|Vocal|Vocal Pop', 1904 => 'Music Videos|World|Africa', 1905 => 'Music Videos|World|Afro-Beat', 1906 => 'Music Videos|World|Afro-Pop', 1907 => 'Music Videos|World|Asia', 1908 => 'Music Videos|World|Australia', 1909 => 'Music Videos|World|Cajun', 1910 => 'Music Videos|World|Caribbean', 1911 => 'Music Videos|World|Celtic', 1912 => 'Music Videos|World|Celtic Folk', 1913 => 'Music Videos|World|Contemporary Celtic', 1914 => 'Music Videos|World|Europe', 1915 => 'Music Videos|World|France', 1916 => 'Music Videos|World|Hawaii', 1917 => 'Music Videos|World|Japan', 1918 => 'Music Videos|World|Klezmer', 1919 => 'Music Videos|World|North America', 1920 => 'Music Videos|World|Polka', 1921 => 'Music Videos|World|South Africa', 1922 => 'Music Videos|World|South America', 1923 => 'Music Videos|World|Traditional Celtic', 1924 => 'Music Videos|World|Worldbeat', 1925 => 'Music Videos|World|Zydeco', 1926 => 'Music Videos|Christian & Gospel', 1928 => 'Music Videos|Classical|Art Song', 1929 => 'Music Videos|Classical|Brass & Woodwinds', 1930 => 'Music Videos|Classical|Solo Instrumental', 1931 => 'Music Videos|Classical|Contemporary Era', 1932 => 'Music Videos|Classical|Oratorio', 1933 => 'Music Videos|Classical|Cantata', 1934 => 'Music Videos|Classical|Electronic', 1935 => 'Music Videos|Classical|Sacred', 1936 => 'Music Videos|Classical|Guitar', 1938 => 'Music Videos|Classical|Violin', 1939 => 'Music Videos|Classical|Cello', 1940 => 'Music Videos|Classical|Percussion', 1941 => 'Music Videos|Electronic|Dubstep', 1942 => 'Music Videos|Electronic|Bass', 1943 => 'Music Videos|Hip-Hop/Rap|UK Hip-Hop', 1944 => 'Music Videos|Reggae|Lovers Rock', 1945 => 'Music Videos|Alternative|EMO', 1946 => 'Music Videos|Alternative|Pop Punk', 1947 => 'Music Videos|Alternative|Indie Pop', 1948 => 'Music Videos|New Age|Yoga', 1949 => 'Music Videos|Pop|Tribute', 4000 => 'TV Shows|Comedy', 4001 => 'TV Shows|Drama', 4002 => 'TV Shows|Animation', 4003 => 'TV Shows|Action & Adventure', 4004 => 'TV Shows|Classic', 4005 => 'TV Shows|Kids', 4006 => 'TV Shows|Nonfiction', 4007 => 'TV Shows|Reality TV', 4008 => 'TV Shows|Sci-Fi & Fantasy', 4009 => 'TV Shows|Sports', 4010 => 'TV Shows|Teens', 4011 => 'TV Shows|Latino TV', 4401 => 'Movies|Action & Adventure', 4402 => 'Movies|Anime', 4403 => 'Movies|Classics', 4404 => 'Movies|Comedy', 4405 => 'Movies|Documentary', 4406 => 'Movies|Drama', 4407 => 'Movies|Foreign', 4408 => 'Movies|Horror', 4409 => 'Movies|Independent', 4410 => 'Movies|Kids & Family', 4411 => 'Movies|Musicals', 4412 => 'Movies|Romance', 4413 => 'Movies|Sci-Fi & Fantasy', 4414 => 'Movies|Short Films', 4415 => 'Movies|Special Interest', 4416 => 'Movies|Thriller', 4417 => 'Movies|Sports', 4418 => 'Movies|Western', 4419 => 'Movies|Urban', 4420 => 'Movies|Holiday', 4421 => 'Movies|Made for TV', 4422 => 'Movies|Concert Films', 4423 => 'Movies|Music Documentaries', 4424 => 'Movies|Music Feature Films', 4425 => 'Movies|Japanese Cinema', 4426 => 'Movies|Jidaigeki', 4427 => 'Movies|Tokusatsu', 4428 => 'Movies|Korean Cinema', 4429 => 'Movies|Russian', 4430 => 'Movies|Turkish', 4431 => 'Movies|Bollywood', 4432 => 'Movies|Regional Indian', 4433 => 'Movies|Middle Eastern', 4434 => 'Movies|African', 6000 => 'App Store|Business', 6001 => 'App Store|Weather', 6002 => 'App Store|Utilities', 6003 => 'App Store|Travel', 6004 => 'App Store|Sports', 6005 => 'App Store|Social Networking', 6006 => 'App Store|Reference', 6007 => 'App Store|Productivity', 6008 => 'App Store|Photo & Video', 6009 => 'App Store|News', 6010 => 'App Store|Navigation', 6011 => 'App Store|Music', 6012 => 'App Store|Lifestyle', 6013 => 'App Store|Health & Fitness', 6014 => 'App Store|Games', 6015 => 'App Store|Finance', 6016 => 'App Store|Entertainment', 6017 => 'App Store|Education', 6018 => 'App Store|Books', 6020 => 'App Store|Medical', 6021 => 'App Store|Newsstand', 6022 => 'App Store|Catalogs', 6023 => 'App Store|Food & Drink', 7001 => 'App Store|Games|Action', 7002 => 'App Store|Games|Adventure', 7003 => 'App Store|Games|Arcade', 7004 => 'App Store|Games|Board', 7005 => 'App Store|Games|Card', 7006 => 'App Store|Games|Casino', 7007 => 'App Store|Games|Dice', 7008 => 'App Store|Games|Educational', 7009 => 'App Store|Games|Family', 7011 => 'App Store|Games|Music', 7012 => 'App Store|Games|Puzzle', 7013 => 'App Store|Games|Racing', 7014 => 'App Store|Games|Role Playing', 7015 => 'App Store|Games|Simulation', 7016 => 'App Store|Games|Sports', 7017 => 'App Store|Games|Strategy', 7018 => 'App Store|Games|Trivia', 7019 => 'App Store|Games|Word', 8001 => 'Tones|Ringtones|Alternative', 8002 => 'Tones|Ringtones|Blues', 8003 => "Tones|Ringtones|Children's Music", 8004 => 'Tones|Ringtones|Classical', 8005 => 'Tones|Ringtones|Comedy', 8006 => 'Tones|Ringtones|Country', 8007 => 'Tones|Ringtones|Dance', 8008 => 'Tones|Ringtones|Electronic', 8009 => 'Tones|Ringtones|Enka', 8010 => 'Tones|Ringtones|French Pop', 8011 => 'Tones|Ringtones|German Folk', 8012 => 'Tones|Ringtones|German Pop', 8013 => 'Tones|Ringtones|Hip-Hop/Rap', 8014 => 'Tones|Ringtones|Holiday', 8015 => 'Tones|Ringtones|Inspirational', 8016 => 'Tones|Ringtones|J-Pop', 8017 => 'Tones|Ringtones|Jazz', 8018 => 'Tones|Ringtones|Kayokyoku', 8019 => 'Tones|Ringtones|Latin', 8020 => 'Tones|Ringtones|New Age', 8021 => 'Tones|Ringtones|Classical|Opera', 8022 => 'Tones|Ringtones|Pop', 8023 => 'Tones|Ringtones|R&B/Soul', 8024 => 'Tones|Ringtones|Reggae', 8025 => 'Tones|Ringtones|Rock', 8026 => 'Tones|Ringtones|Singer/Songwriter', 8027 => 'Tones|Ringtones|Soundtrack', 8028 => 'Tones|Ringtones|Spoken Word', 8029 => 'Tones|Ringtones|Vocal', 8030 => 'Tones|Ringtones|World', 8050 => 'Tones|Alert Tones|Sound Effects', 8051 => 'Tones|Alert Tones|Dialogue', 8052 => 'Tones|Alert Tones|Music', 8053 => 'Tones|Ringtones', 8054 => 'Tones|Alert Tones', 8055 => 'Tones|Ringtones|Alternative|Chinese Alt', 8056 => 'Tones|Ringtones|Alternative|College Rock', 8057 => 'Tones|Ringtones|Alternative|Goth Rock', 8058 => 'Tones|Ringtones|Alternative|Grunge', 8059 => 'Tones|Ringtones|Alternative|Indie Rock', 8060 => 'Tones|Ringtones|Alternative|Korean Indie', 8061 => 'Tones|Ringtones|Alternative|New Wave', 8062 => 'Tones|Ringtones|Alternative|Punk', 8063 => 'Tones|Ringtones|Anime', 8064 => 'Tones|Ringtones|Arabic', 8065 => 'Tones|Ringtones|Arabic|Arabic Pop', 8066 => 'Tones|Ringtones|Arabic|Islamic', 8067 => 'Tones|Ringtones|Arabic|Khaleeji', 8068 => 'Tones|Ringtones|Arabic|North African', 8069 => 'Tones|Ringtones|Blues|Acoustic Blues', 8070 => 'Tones|Ringtones|Blues|Chicago Blues', 8071 => 'Tones|Ringtones|Blues|Classic Blues', 8072 => 'Tones|Ringtones|Blues|Contemporary Blues', 8073 => 'Tones|Ringtones|Blues|Country Blues', 8074 => 'Tones|Ringtones|Blues|Delta Blues', 8075 => 'Tones|Ringtones|Blues|Electric Blues', 8076 => 'Tones|Ringtones|Brazilian', 8077 => 'Tones|Ringtones|Brazilian|Axe', # (Ax&eacute;) 8078 => 'Tones|Ringtones|Brazilian|Baile Funk', 8079 => 'Tones|Ringtones|Brazilian|Bossa Nova', 8080 => 'Tones|Ringtones|Brazilian|Choro', 8081 => 'Tones|Ringtones|Brazilian|Forro', # (Forr&oacute;) 8082 => 'Tones|Ringtones|Brazilian|Frevo', 8083 => 'Tones|Ringtones|Brazilian|MPB', 8084 => 'Tones|Ringtones|Brazilian|Pagode', 8085 => 'Tones|Ringtones|Brazilian|Samba', 8086 => 'Tones|Ringtones|Brazilian|Sertanejo', 8087 => "Tones|Ringtones|Children's Music|Lullabies", 8088 => "Tones|Ringtones|Children's Music|Sing-Along", 8089 => "Tones|Ringtones|Children's Music|Stories", 8090 => 'Tones|Ringtones|Chinese', 8091 => 'Tones|Ringtones|Chinese|Chinese Classical', 8092 => 'Tones|Ringtones|Chinese|Chinese Flute', 8093 => 'Tones|Ringtones|Chinese|Chinese Opera', 8094 => 'Tones|Ringtones|Chinese|Chinese Orchestral', 8095 => 'Tones|Ringtones|Chinese|Chinese Regional Folk', 8096 => 'Tones|Ringtones|Chinese|Chinese Strings', 8097 => 'Tones|Ringtones|Chinese|Taiwanese Folk', 8098 => 'Tones|Ringtones|Chinese|Tibetan Native Music', 8099 => 'Tones|Ringtones|Christian & Gospel', 8100 => 'Tones|Ringtones|Christian & Gospel|CCM', 8101 => 'Tones|Ringtones|Christian & Gospel|Christian Metal', 8102 => 'Tones|Ringtones|Christian & Gospel|Christian Pop', 8103 => 'Tones|Ringtones|Christian & Gospel|Christian Rap', 8104 => 'Tones|Ringtones|Christian & Gospel|Christian Rock', 8105 => 'Tones|Ringtones|Christian & Gospel|Classic Christian', 8106 => 'Tones|Ringtones|Christian & Gospel|Contemporary Gospel', 8107 => 'Tones|Ringtones|Christian & Gospel|Gospel', 8108 => 'Tones|Ringtones|Christian & Gospel|Praise & Worship', 8109 => 'Tones|Ringtones|Christian & Gospel|Southern Gospel', 8110 => 'Tones|Ringtones|Christian & Gospel|Traditional Gospel', 8111 => 'Tones|Ringtones|Classical|Avant-Garde', 8112 => 'Tones|Ringtones|Classical|Baroque Era', 8113 => 'Tones|Ringtones|Classical|Chamber Music', 8114 => 'Tones|Ringtones|Classical|Chant', 8115 => 'Tones|Ringtones|Classical|Choral', 8116 => 'Tones|Ringtones|Classical|Classical Crossover', 8117 => 'Tones|Ringtones|Classical|Early Music', 8118 => 'Tones|Ringtones|Classical|High Classical', 8119 => 'Tones|Ringtones|Classical|Impressionist', 8120 => 'Tones|Ringtones|Classical|Medieval Era', 8121 => 'Tones|Ringtones|Classical|Minimalism', 8122 => 'Tones|Ringtones|Classical|Modern Era', 8123 => 'Tones|Ringtones|Classical|Orchestral', 8124 => 'Tones|Ringtones|Classical|Renaissance', 8125 => 'Tones|Ringtones|Classical|Romantic Era', 8126 => 'Tones|Ringtones|Classical|Wedding Music', 8127 => 'Tones|Ringtones|Comedy|Novelty', 8128 => 'Tones|Ringtones|Comedy|Standup Comedy', 8129 => 'Tones|Ringtones|Country|Alternative Country', 8130 => 'Tones|Ringtones|Country|Americana', 8131 => 'Tones|Ringtones|Country|Bluegrass', 8132 => 'Tones|Ringtones|Country|Contemporary Bluegrass', 8133 => 'Tones|Ringtones|Country|Contemporary Country', 8134 => 'Tones|Ringtones|Country|Country Gospel', 8135 => 'Tones|Ringtones|Country|Honky Tonk', 8136 => 'Tones|Ringtones|Country|Outlaw Country', 8137 => 'Tones|Ringtones|Country|Thai Country', 8138 => 'Tones|Ringtones|Country|Traditional Bluegrass', 8139 => 'Tones|Ringtones|Country|Traditional Country', 8140 => 'Tones|Ringtones|Country|Urban Cowboy', 8141 => 'Tones|Ringtones|Dance|Breakbeat', 8142 => 'Tones|Ringtones|Dance|Exercise', 8143 => 'Tones|Ringtones|Dance|Garage', 8144 => 'Tones|Ringtones|Dance|Hardcore', 8145 => 'Tones|Ringtones|Dance|House', 8146 => "Tones|Ringtones|Dance|Jungle/Drum'n'bass", 8147 => 'Tones|Ringtones|Dance|Techno', 8148 => 'Tones|Ringtones|Dance|Trance', 8149 => 'Tones|Ringtones|Disney', 8150 => 'Tones|Ringtones|Easy Listening', 8151 => 'Tones|Ringtones|Easy Listening|Lounge', 8152 => 'Tones|Ringtones|Easy Listening|Swing', 8153 => 'Tones|Ringtones|Electronic|Ambient', 8154 => 'Tones|Ringtones|Electronic|Downtempo', 8155 => 'Tones|Ringtones|Electronic|Electronica', 8156 => 'Tones|Ringtones|Electronic|IDM/Experimental', 8157 => 'Tones|Ringtones|Electronic|Industrial', 8158 => 'Tones|Ringtones|Fitness & Workout', 8159 => 'Tones|Ringtones|Folk', 8160 => 'Tones|Ringtones|Hip-Hop/Rap|Alternative Rap', 8161 => 'Tones|Ringtones|Hip-Hop/Rap|Chinese Hip-Hop', 8162 => 'Tones|Ringtones|Hip-Hop/Rap|Dirty South', 8163 => 'Tones|Ringtones|Hip-Hop/Rap|East Coast Rap', 8164 => 'Tones|Ringtones|Hip-Hop/Rap|Gangsta Rap', 8165 => 'Tones|Ringtones|Hip-Hop/Rap|Hardcore Rap', 8166 => 'Tones|Ringtones|Hip-Hop/Rap|Hip-Hop', 8167 => 'Tones|Ringtones|Hip-Hop/Rap|Korean Hip-Hop', 8168 => 'Tones|Ringtones|Hip-Hop/Rap|Latin Rap', 8169 => 'Tones|Ringtones|Hip-Hop/Rap|Old School Rap', 8170 => 'Tones|Ringtones|Hip-Hop/Rap|Rap', 8171 => 'Tones|Ringtones|Hip-Hop/Rap|Underground Rap', 8172 => 'Tones|Ringtones|Hip-Hop/Rap|West Coast Rap', 8173 => 'Tones|Ringtones|Holiday|Chanukah', 8174 => 'Tones|Ringtones|Holiday|Christmas', 8175 => "Tones|Ringtones|Holiday|Christmas: Children's", 8176 => 'Tones|Ringtones|Holiday|Christmas: Classic', 8177 => 'Tones|Ringtones|Holiday|Christmas: Classical', 8178 => 'Tones|Ringtones|Holiday|Christmas: Jazz', 8179 => 'Tones|Ringtones|Holiday|Christmas: Modern', 8180 => 'Tones|Ringtones|Holiday|Christmas: Pop', 8181 => 'Tones|Ringtones|Holiday|Christmas: R&B', 8182 => 'Tones|Ringtones|Holiday|Christmas: Religious', 8183 => 'Tones|Ringtones|Holiday|Christmas: Rock', 8184 => 'Tones|Ringtones|Holiday|Easter', 8185 => 'Tones|Ringtones|Holiday|Halloween', 8186 => 'Tones|Ringtones|Holiday|Thanksgiving', 8187 => 'Tones|Ringtones|Indian', 8188 => 'Tones|Ringtones|Indian|Bollywood', 8189 => 'Tones|Ringtones|Indian|Devotional & Spiritual', 8190 => 'Tones|Ringtones|Indian|Ghazals', 8191 => 'Tones|Ringtones|Indian|Indian Classical', 8192 => 'Tones|Ringtones|Indian|Indian Folk', 8193 => 'Tones|Ringtones|Indian|Indian Pop', 8194 => 'Tones|Ringtones|Indian|Regional Indian', 8195 => 'Tones|Ringtones|Indian|Sufi', 8196 => 'Tones|Ringtones|Indian|Tamil', 8197 => 'Tones|Ringtones|Indian|Telugu', 8198 => 'Tones|Ringtones|Instrumental', 8199 => 'Tones|Ringtones|Jazz|Avant-Garde Jazz', 8201 => 'Tones|Ringtones|Jazz|Big Band', 8202 => 'Tones|Ringtones|Jazz|Bop', 8203 => 'Tones|Ringtones|Jazz|Contemporary Jazz', 8204 => 'Tones|Ringtones|Jazz|Cool', 8205 => 'Tones|Ringtones|Jazz|Crossover Jazz', 8206 => 'Tones|Ringtones|Jazz|Dixieland', 8207 => 'Tones|Ringtones|Jazz|Fusion', 8208 => 'Tones|Ringtones|Jazz|Hard Bop', 8209 => 'Tones|Ringtones|Jazz|Latin Jazz', 8210 => 'Tones|Ringtones|Jazz|Mainstream Jazz', 8211 => 'Tones|Ringtones|Jazz|Ragtime', 8212 => 'Tones|Ringtones|Jazz|Smooth Jazz', 8213 => 'Tones|Ringtones|Jazz|Trad Jazz', 8214 => 'Tones|Ringtones|Pop|K-Pop', 8215 => 'Tones|Ringtones|Karaoke', 8216 => 'Tones|Ringtones|Korean', 8217 => 'Tones|Ringtones|Korean|Korean Classical', 8218 => 'Tones|Ringtones|Korean|Korean Trad Instrumental', 8219 => 'Tones|Ringtones|Korean|Korean Trad Song', 8220 => 'Tones|Ringtones|Korean|Korean Trad Theater', 8221 => 'Tones|Ringtones|Latin|Alternative & Rock in Spanish', 8222 => 'Tones|Ringtones|Latin|Baladas y Boleros', 8223 => 'Tones|Ringtones|Latin|Contemporary Latin', 8224 => 'Tones|Ringtones|Latin|Latin Jazz', 8225 => 'Tones|Ringtones|Latin|Latin Urban', 8226 => 'Tones|Ringtones|Latin|Pop in Spanish', 8227 => 'Tones|Ringtones|Latin|Raices', 8228 => 'Tones|Ringtones|Latin|Regional Mexicano', 8229 => 'Tones|Ringtones|Latin|Salsa y Tropical', 8230 => 'Tones|Ringtones|Marching Bands', 8231 => 'Tones|Ringtones|New Age|Healing', 8232 => 'Tones|Ringtones|New Age|Meditation', 8233 => 'Tones|Ringtones|New Age|Nature', 8234 => 'Tones|Ringtones|New Age|Relaxation', 8235 => 'Tones|Ringtones|New Age|Travel', 8236 => 'Tones|Ringtones|Orchestral', 8237 => 'Tones|Ringtones|Pop|Adult Contemporary', 8238 => 'Tones|Ringtones|Pop|Britpop', 8239 => 'Tones|Ringtones|Pop|C-Pop', 8240 => 'Tones|Ringtones|Pop|Cantopop/HK-Pop', 8241 => 'Tones|Ringtones|Pop|Indo Pop', 8242 => 'Tones|Ringtones|Pop|Korean Folk-Pop', 8243 => 'Tones|Ringtones|Pop|Malaysian Pop', 8244 => 'Tones|Ringtones|Pop|Mandopop', 8245 => 'Tones|Ringtones|Pop|Manilla Sound', 8246 => 'Tones|Ringtones|Pop|Oldies', 8247 => 'Tones|Ringtones|Pop|Original Pilipino Music', 8248 => 'Tones|Ringtones|Pop|Pinoy Pop', 8249 => 'Tones|Ringtones|Pop|Pop/Rock', 8250 => 'Tones|Ringtones|Pop|Soft Rock', 8251 => 'Tones|Ringtones|Pop|Tai-Pop', 8252 => 'Tones|Ringtones|Pop|Teen Pop', 8253 => 'Tones|Ringtones|Pop|Thai Pop', 8254 => 'Tones|Ringtones|R&B/Soul|Contemporary R&B', 8255 => 'Tones|Ringtones|R&B/Soul|Disco', 8256 => 'Tones|Ringtones|R&B/Soul|Doo Wop', 8257 => 'Tones|Ringtones|R&B/Soul|Funk', 8258 => 'Tones|Ringtones|R&B/Soul|Motown', 8259 => 'Tones|Ringtones|R&B/Soul|Neo-Soul', 8260 => 'Tones|Ringtones|R&B/Soul|Soul', 8261 => 'Tones|Ringtones|Reggae|Modern Dancehall', 8262 => 'Tones|Ringtones|Reggae|Dub', 8263 => 'Tones|Ringtones|Reggae|Roots Reggae', 8264 => 'Tones|Ringtones|Reggae|Ska', 8265 => 'Tones|Ringtones|Rock|Adult Alternative', 8266 => 'Tones|Ringtones|Rock|American Trad Rock', 8267 => 'Tones|Ringtones|Rock|Arena Rock', 8268 => 'Tones|Ringtones|Rock|Blues-Rock', 8269 => 'Tones|Ringtones|Rock|British Invasion', 8270 => 'Tones|Ringtones|Rock|Chinese Rock', 8271 => 'Tones|Ringtones|Rock|Death Metal/Black Metal', 8272 => 'Tones|Ringtones|Rock|Glam Rock', 8273 => 'Tones|Ringtones|Rock|Hair Metal', 8274 => 'Tones|Ringtones|Rock|Hard Rock', 8275 => 'Tones|Ringtones|Rock|Metal', 8276 => 'Tones|Ringtones|Rock|Jam Bands', 8277 => 'Tones|Ringtones|Rock|Korean Rock', 8278 => 'Tones|Ringtones|Rock|Prog-Rock/Art Rock', 8279 => 'Tones|Ringtones|Rock|Psychedelic', 8280 => 'Tones|Ringtones|Rock|Rock & Roll', 8281 => 'Tones|Ringtones|Rock|Rockabilly', 8282 => 'Tones|Ringtones|Rock|Roots Rock', 8283 => 'Tones|Ringtones|Rock|Singer/Songwriter', 8284 => 'Tones|Ringtones|Rock|Southern Rock', 8285 => 'Tones|Ringtones|Rock|Surf', 8286 => 'Tones|Ringtones|Rock|Tex-Mex', 8287 => 'Tones|Ringtones|Singer/Songwriter|Alternative Folk', 8288 => 'Tones|Ringtones|Singer/Songwriter|Contemporary Folk', 8289 => 'Tones|Ringtones|Singer/Songwriter|Contemporary Singer/Songwriter', 8290 => 'Tones|Ringtones|Singer/Songwriter|Folk-Rock', 8291 => 'Tones|Ringtones|Singer/Songwriter|New Acoustic', 8292 => 'Tones|Ringtones|Singer/Songwriter|Traditional Folk', 8293 => 'Tones|Ringtones|Soundtrack|Foreign Cinema', 8294 => 'Tones|Ringtones|Soundtrack|Musicals', 8295 => 'Tones|Ringtones|Soundtrack|Original Score', 8296 => 'Tones|Ringtones|Soundtrack|Sound Effects', 8297 => 'Tones|Ringtones|Soundtrack|Soundtrack', 8298 => 'Tones|Ringtones|Soundtrack|TV Soundtrack', 8299 => 'Tones|Ringtones|Vocal|Standards', 8300 => 'Tones|Ringtones|Vocal|Traditional Pop', 8301 => 'Tones|Ringtones|Vocal|Trot', 8302 => 'Tones|Ringtones|Jazz|Vocal Jazz', 8303 => 'Tones|Ringtones|Vocal|Vocal Pop', 8304 => 'Tones|Ringtones|World|Africa', 8305 => 'Tones|Ringtones|World|Afrikaans', 8306 => 'Tones|Ringtones|World|Afro-Beat', 8307 => 'Tones|Ringtones|World|Afro-Pop', 8308 => 'Tones|Ringtones|World|Arabesque', 8309 => 'Tones|Ringtones|World|Asia', 8310 => 'Tones|Ringtones|World|Australia', 8311 => 'Tones|Ringtones|World|Cajun', 8312 => 'Tones|Ringtones|World|Calypso', 8313 => 'Tones|Ringtones|World|Caribbean', 8314 => 'Tones|Ringtones|World|Celtic', 8315 => 'Tones|Ringtones|World|Celtic Folk', 8316 => 'Tones|Ringtones|World|Contemporary Celtic', 8317 => 'Tones|Ringtones|World|Dangdut', 8318 => 'Tones|Ringtones|World|Dini', 8319 => 'Tones|Ringtones|World|Europe', 8320 => 'Tones|Ringtones|World|Fado', 8321 => 'Tones|Ringtones|World|Farsi', 8322 => 'Tones|Ringtones|World|Flamenco', 8323 => 'Tones|Ringtones|World|France', 8324 => 'Tones|Ringtones|World|Halk', 8325 => 'Tones|Ringtones|World|Hawaii', 8326 => 'Tones|Ringtones|World|Iberia', 8327 => 'Tones|Ringtones|World|Indonesian Religious', 8328 => 'Tones|Ringtones|World|Israeli', 8329 => 'Tones|Ringtones|World|Japan', 8330 => 'Tones|Ringtones|World|Klezmer', 8331 => 'Tones|Ringtones|World|North America', 8332 => 'Tones|Ringtones|World|Polka', 8333 => 'Tones|Ringtones|World|Russian', 8334 => 'Tones|Ringtones|World|Russian Chanson', 8335 => 'Tones|Ringtones|World|Sanat', 8336 => 'Tones|Ringtones|World|Soca', 8337 => 'Tones|Ringtones|World|South Africa', 8338 => 'Tones|Ringtones|World|South America', 8339 => 'Tones|Ringtones|World|Tango', 8340 => 'Tones|Ringtones|World|Traditional Celtic', 8341 => 'Tones|Ringtones|World|Turkish', 8342 => 'Tones|Ringtones|World|Worldbeat', 8343 => 'Tones|Ringtones|World|Zydeco', 8345 => 'Tones|Ringtones|Classical|Art Song', 8346 => 'Tones|Ringtones|Classical|Brass & Woodwinds', 8347 => 'Tones|Ringtones|Classical|Solo Instrumental', 8348 => 'Tones|Ringtones|Classical|Contemporary Era', 8349 => 'Tones|Ringtones|Classical|Oratorio', 8350 => 'Tones|Ringtones|Classical|Cantata', 8351 => 'Tones|Ringtones|Classical|Electronic', 8352 => 'Tones|Ringtones|Classical|Sacred', 8353 => 'Tones|Ringtones|Classical|Guitar', 8354 => 'Tones|Ringtones|Classical|Piano', 8355 => 'Tones|Ringtones|Classical|Violin', 8356 => 'Tones|Ringtones|Classical|Cello', 8357 => 'Tones|Ringtones|Classical|Percussion', 8358 => 'Tones|Ringtones|Electronic|Dubstep', 8359 => 'Tones|Ringtones|Electronic|Bass', 8360 => 'Tones|Ringtones|Hip-Hop/Rap|UK Hip Hop', 8361 => 'Tones|Ringtones|Reggae|Lovers Rock', 8362 => 'Tones|Ringtones|Alternative|EMO', 8363 => 'Tones|Ringtones|Alternative|Pop Punk', 8364 => 'Tones|Ringtones|Alternative|Indie Pop', 8365 => 'Tones|Ringtones|New Age|Yoga', 8366 => 'Tones|Ringtones|Pop|Tribute', 9002 => 'Books|Nonfiction', 9003 => 'Books|Romance', 9004 => 'Books|Travel & Adventure', 9007 => 'Books|Arts & Entertainment', 9008 => 'Books|Biographies & Memoirs', 9009 => 'Books|Business & Personal Finance', 9010 => 'Books|Children & Teens', 9012 => 'Books|Humor', 9015 => 'Books|History', 9018 => 'Books|Religion & Spirituality', 9019 => 'Books|Science & Nature', 9020 => 'Books|Sci-Fi & Fantasy', 9024 => 'Books|Lifestyle & Home', 9025 => 'Books|Health, Mind & Body', 9026 => 'Books|Comics & Graphic Novels', 9027 => 'Books|Computers & Internet', 9028 => 'Books|Cookbooks, Food & Wine', 9029 => 'Books|Professional & Technical', 9030 => 'Books|Parenting', 9031 => 'Books|Fiction & Literature', 9032 => 'Books|Mysteries & Thrillers', 9033 => 'Books|Reference', 9034 => 'Books|Politics & Current Events', 9035 => 'Books|Sports & Outdoors', 10001 => 'Books|Lifestyle & Home|Antiques & Collectibles', 10002 => 'Books|Arts & Entertainment|Art & Architecture', 10003 => 'Books|Religion & Spirituality|Bibles', 10004 => 'Books|Health, Mind & Body|Spirituality', 10005 => 'Books|Business & Personal Finance|Industries & Professions', 10006 => 'Books|Business & Personal Finance|Marketing & Sales', 10007 => 'Books|Business & Personal Finance|Small Business & Entrepreneurship', 10008 => 'Books|Business & Personal Finance|Personal Finance', 10009 => 'Books|Business & Personal Finance|Reference', 10010 => 'Books|Business & Personal Finance|Careers', 10011 => 'Books|Business & Personal Finance|Economics', 10012 => 'Books|Business & Personal Finance|Investing', 10013 => 'Books|Business & Personal Finance|Finance', 10014 => 'Books|Business & Personal Finance|Management & Leadership', 10015 => 'Books|Comics & Graphic Novels|Graphic Novels', 10016 => 'Books|Comics & Graphic Novels|Manga', 10017 => 'Books|Computers & Internet|Computers', 10018 => 'Books|Computers & Internet|Databases', 10019 => 'Books|Computers & Internet|Digital Media', 10020 => 'Books|Computers & Internet|Internet', 10021 => 'Books|Computers & Internet|Network', 10022 => 'Books|Computers & Internet|Operating Systems', 10023 => 'Books|Computers & Internet|Programming', 10024 => 'Books|Computers & Internet|Software', 10025 => 'Books|Computers & Internet|System Administration', 10026 => 'Books|Cookbooks, Food & Wine|Beverages', 10027 => 'Books|Cookbooks, Food & Wine|Courses & Dishes', 10028 => 'Books|Cookbooks, Food & Wine|Special Diet', 10029 => 'Books|Cookbooks, Food & Wine|Special Occasions', 10030 => 'Books|Cookbooks, Food & Wine|Methods', 10031 => 'Books|Cookbooks, Food & Wine|Reference', 10032 => 'Books|Cookbooks, Food & Wine|Regional & Ethnic', 10033 => 'Books|Cookbooks, Food & Wine|Specific Ingredients', 10034 => 'Books|Lifestyle & Home|Crafts & Hobbies', 10035 => 'Books|Professional & Technical|Design', 10036 => 'Books|Arts & Entertainment|Theater', 10037 => 'Books|Professional & Technical|Education', 10038 => 'Books|Nonfiction|Family & Relationships', 10039 => 'Books|Fiction & Literature|Action & Adventure', 10040 => 'Books|Fiction & Literature|African American', 10041 => 'Books|Fiction & Literature|Religious', 10042 => 'Books|Fiction & Literature|Classics', 10043 => 'Books|Fiction & Literature|Erotica', 10044 => 'Books|Sci-Fi & Fantasy|Fantasy', 10045 => 'Books|Fiction & Literature|Gay', 10046 => 'Books|Fiction & Literature|Ghost', 10047 => 'Books|Fiction & Literature|Historical', 10048 => 'Books|Fiction & Literature|Horror', 10049 => 'Books|Fiction & Literature|Literary', 10050 => 'Books|Mysteries & Thrillers|Hard-Boiled', 10051 => 'Books|Mysteries & Thrillers|Historical', 10052 => 'Books|Mysteries & Thrillers|Police Procedural', 10053 => 'Books|Mysteries & Thrillers|Short Stories', 10054 => 'Books|Mysteries & Thrillers|British Detectives', 10055 => 'Books|Mysteries & Thrillers|Women Sleuths', 10056 => 'Books|Romance|Erotic Romance', 10057 => 'Books|Romance|Contemporary', 10058 => 'Books|Romance|Paranormal', 10059 => 'Books|Romance|Historical', 10060 => 'Books|Romance|Short Stories', 10061 => 'Books|Romance|Suspense', 10062 => 'Books|Romance|Western', 10063 => 'Books|Sci-Fi & Fantasy|Science Fiction', 10064 => 'Books|Sci-Fi & Fantasy|Science Fiction & Literature', 10065 => 'Books|Fiction & Literature|Short Stories', 10066 => 'Books|Reference|Foreign Languages', 10067 => 'Books|Arts & Entertainment|Games', 10068 => 'Books|Lifestyle & Home|Gardening', 10069 => 'Books|Health, Mind & Body|Health & Fitness', 10070 => 'Books|History|Africa', 10071 => 'Books|History|Americas', 10072 => 'Books|History|Ancient', 10073 => 'Books|History|Asia', 10074 => 'Books|History|Australia & Oceania', 10075 => 'Books|History|Europe', 10076 => 'Books|History|Latin America', 10077 => 'Books|History|Middle East', 10078 => 'Books|History|Military', 10079 => 'Books|History|United States', 10080 => 'Books|History|World', 10081 => "Books|Children & Teens|Children's Fiction", 10082 => "Books|Children & Teens|Children's Nonfiction", 10083 => 'Books|Professional & Technical|Law', 10084 => 'Books|Fiction & Literature|Literary Criticism', 10085 => 'Books|Science & Nature|Mathematics', 10086 => 'Books|Professional & Technical|Medical', 10087 => 'Books|Arts & Entertainment|Music', 10088 => 'Books|Science & Nature|Nature', 10089 => 'Books|Arts & Entertainment|Performing Arts', 10090 => 'Books|Lifestyle & Home|Pets', 10091 => 'Books|Nonfiction|Philosophy', 10092 => 'Books|Arts & Entertainment|Photography', 10093 => 'Books|Fiction & Literature|Poetry', 10094 => 'Books|Health, Mind & Body|Psychology', 10095 => 'Books|Reference|Almanacs & Yearbooks', 10096 => 'Books|Reference|Atlases & Maps', 10097 => 'Books|Reference|Catalogs & Directories', 10098 => 'Books|Reference|Consumer Guides', 10099 => 'Books|Reference|Dictionaries & Thesauruses', 10100 => 'Books|Reference|Encyclopedias', 10101 => 'Books|Reference|Etiquette', 10102 => 'Books|Reference|Quotations', 10103 => 'Books|Reference|Words & Language', 10104 => 'Books|Reference|Writing', 10105 => 'Books|Religion & Spirituality|Bible Studies', 10106 => 'Books|Religion & Spirituality|Buddhism', 10107 => 'Books|Religion & Spirituality|Christianity', 10108 => 'Books|Religion & Spirituality|Hinduism', 10109 => 'Books|Religion & Spirituality|Islam', 10110 => 'Books|Religion & Spirituality|Judaism', 10111 => 'Books|Science & Nature|Astronomy', 10112 => 'Books|Science & Nature|Chemistry', 10113 => 'Books|Science & Nature|Earth Sciences', 10114 => 'Books|Science & Nature|Essays', 10115 => 'Books|Science & Nature|History', 10116 => 'Books|Science & Nature|Life Sciences', 10117 => 'Books|Science & Nature|Physics', 10118 => 'Books|Science & Nature|Reference', 10119 => 'Books|Health, Mind & Body|Self-Improvement', 10120 => 'Books|Nonfiction|Social Science', 10121 => 'Books|Sports & Outdoors|Baseball', 10122 => 'Books|Sports & Outdoors|Basketball', 10123 => 'Books|Sports & Outdoors|Coaching', 10124 => 'Books|Sports & Outdoors|Extreme Sports', 10125 => 'Books|Sports & Outdoors|Football', 10126 => 'Books|Sports & Outdoors|Golf', 10127 => 'Books|Sports & Outdoors|Hockey', 10128 => 'Books|Sports & Outdoors|Mountaineering', 10129 => 'Books|Sports & Outdoors|Outdoors', 10130 => 'Books|Sports & Outdoors|Racket Sports', 10131 => 'Books|Sports & Outdoors|Reference', 10132 => 'Books|Sports & Outdoors|Soccer', 10133 => 'Books|Sports & Outdoors|Training', 10134 => 'Books|Sports & Outdoors|Water Sports', 10135 => 'Books|Sports & Outdoors|Winter Sports', 10136 => 'Books|Reference|Study Aids', 10137 => 'Books|Professional & Technical|Engineering', 10138 => 'Books|Nonfiction|Transportation', 10139 => 'Books|Travel & Adventure|Africa', 10140 => 'Books|Travel & Adventure|Asia', 10141 => 'Books|Travel & Adventure|Specialty Travel', 10142 => 'Books|Travel & Adventure|Canada', 10143 => 'Books|Travel & Adventure|Caribbean', 10144 => 'Books|Travel & Adventure|Latin America', 10145 => 'Books|Travel & Adventure|Essays & Memoirs', 10146 => 'Books|Travel & Adventure|Europe', 10147 => 'Books|Travel & Adventure|Middle East', 10148 => 'Books|Travel & Adventure|United States', 10149 => 'Books|Nonfiction|True Crime', 11001 => 'Books|Sci-Fi & Fantasy|Fantasy|Contemporary', 11002 => 'Books|Sci-Fi & Fantasy|Fantasy|Epic', 11003 => 'Books|Sci-Fi & Fantasy|Fantasy|Historical', 11004 => 'Books|Sci-Fi & Fantasy|Fantasy|Paranormal', 11005 => 'Books|Sci-Fi & Fantasy|Fantasy|Short Stories', 11006 => 'Books|Sci-Fi & Fantasy|Science Fiction & Literature|Adventure', 11007 => 'Books|Sci-Fi & Fantasy|Science Fiction & Literature|High Tech', 11008 => 'Books|Sci-Fi & Fantasy|Science Fiction & Literature|Short Stories', 11009 => 'Books|Professional & Technical|Education|Language Arts & Disciplines', 11010 => 'Books|Communications & Media', 11011 => 'Books|Communications & Media|Broadcasting', 11012 => 'Books|Communications & Media|Digital Media', 11013 => 'Books|Communications & Media|Journalism', 11014 => 'Books|Communications & Media|Photojournalism', 11015 => 'Books|Communications & Media|Print', 11016 => 'Books|Communications & Media|Speech', 11017 => 'Books|Communications & Media|Writing', 11018 => 'Books|Arts & Entertainment|Art & Architecture|Urban Planning', 11019 => 'Books|Arts & Entertainment|Dance', 11020 => 'Books|Arts & Entertainment|Fashion', 11021 => 'Books|Arts & Entertainment|Film', 11022 => 'Books|Arts & Entertainment|Interior Design', 11023 => 'Books|Arts & Entertainment|Media Arts', 11024 => 'Books|Arts & Entertainment|Radio', 11025 => 'Books|Arts & Entertainment|TV', 11026 => 'Books|Arts & Entertainment|Visual Arts', 11027 => 'Books|Biographies & Memoirs|Arts & Entertainment', 11028 => 'Books|Biographies & Memoirs|Business', 11029 => 'Books|Biographies & Memoirs|Culinary', 11030 => 'Books|Biographies & Memoirs|Gay & Lesbian', 11031 => 'Books|Biographies & Memoirs|Historical', 11032 => 'Books|Biographies & Memoirs|Literary', 11033 => 'Books|Biographies & Memoirs|Media & Journalism', 11034 => 'Books|Biographies & Memoirs|Military', 11035 => 'Books|Biographies & Memoirs|Politics', 11036 => 'Books|Biographies & Memoirs|Religious', 11037 => 'Books|Biographies & Memoirs|Science & Technology', 11038 => 'Books|Biographies & Memoirs|Sports', 11039 => 'Books|Biographies & Memoirs|Women', 11040 => 'Books|Romance|New Adult', 11042 => 'Books|Romance|Romantic Comedy', 11043 => 'Books|Romance|Gay & Lesbian', 11044 => 'Books|Fiction & Literature|Essays', 11045 => 'Books|Fiction & Literature|Anthologies', 11046 => 'Books|Fiction & Literature|Comparative Literature', 11047 => 'Books|Fiction & Literature|Drama', 11049 => 'Books|Fiction & Literature|Fairy Tales, Myths & Fables', 11050 => 'Books|Fiction & Literature|Family', 11051 => 'Books|Comics & Graphic Novels|Manga|School Drama', 11052 => 'Books|Comics & Graphic Novels|Manga|Human Drama', 11053 => 'Books|Comics & Graphic Novels|Manga|Family Drama', 11054 => 'Books|Sports & Outdoors|Boxing', 11055 => 'Books|Sports & Outdoors|Cricket', 11056 => 'Books|Sports & Outdoors|Cycling', 11057 => 'Books|Sports & Outdoors|Equestrian', 11058 => 'Books|Sports & Outdoors|Martial Arts & Self Defense', 11059 => 'Books|Sports & Outdoors|Motor Sports', 11060 => 'Books|Sports & Outdoors|Rugby', 11061 => 'Books|Sports & Outdoors|Running', 11062 => 'Books|Health, Mind & Body|Diet & Nutrition', 11063 => 'Books|Science & Nature|Agriculture', 11064 => 'Books|Science & Nature|Atmosphere', 11065 => 'Books|Science & Nature|Biology', 11066 => 'Books|Science & Nature|Ecology', 11067 => 'Books|Science & Nature|Environment', 11068 => 'Books|Science & Nature|Geography', 11069 => 'Books|Science & Nature|Geology', 11070 => 'Books|Nonfiction|Social Science|Anthropology', 11071 => 'Books|Nonfiction|Social Science|Archaeology', 11072 => 'Books|Nonfiction|Social Science|Civics', 11073 => 'Books|Nonfiction|Social Science|Government', 11074 => 'Books|Nonfiction|Social Science|Social Studies', 11075 => 'Books|Nonfiction|Social Science|Social Welfare', 11076 => 'Books|Nonfiction|Social Science|Society', 11077 => 'Books|Nonfiction|Philosophy|Aesthetics', 11078 => 'Books|Nonfiction|Philosophy|Epistemology', 11079 => 'Books|Nonfiction|Philosophy|Ethics', 11080 => 'Books|Nonfiction|Philosophy|Language', 11081 => 'Books|Nonfiction|Philosophy|Logic', 11082 => 'Books|Nonfiction|Philosophy|Metaphysics', 11083 => 'Books|Nonfiction|Philosophy|Political', 11084 => 'Books|Nonfiction|Philosophy|Religion', 11085 => 'Books|Reference|Manuals', 11086 => 'Books|Kids', 11087 => 'Books|Kids|Animals', 11088 => 'Books|Kids|Basic Concepts', 11089 => 'Books|Kids|Basic Concepts|Alphabet', 11090 => 'Books|Kids|Basic Concepts|Body', 11091 => 'Books|Kids|Basic Concepts|Colors', 11092 => 'Books|Kids|Basic Concepts|Counting & Numbers', 11093 => 'Books|Kids|Basic Concepts|Date & Time', 11094 => 'Books|Kids|Basic Concepts|General', 11095 => 'Books|Kids|Basic Concepts|Money', 11096 => 'Books|Kids|Basic Concepts|Opposites', 11097 => 'Books|Kids|Basic Concepts|Seasons', 11098 => 'Books|Kids|Basic Concepts|Senses & Sensation', 11099 => 'Books|Kids|Basic Concepts|Size & Shape', 11100 => 'Books|Kids|Basic Concepts|Sounds', 11101 => 'Books|Kids|Basic Concepts|Words', 11102 => 'Books|Kids|Biography', 11103 => 'Books|Kids|Careers & Occupations', 11104 => 'Books|Kids|Computers & Technology', 11105 => 'Books|Kids|Cooking & Food', 11106 => 'Books|Kids|Arts & Entertainment', 11107 => 'Books|Kids|Arts & Entertainment|Art', 11108 => 'Books|Kids|Arts & Entertainment|Crafts', 11109 => 'Books|Kids|Arts & Entertainment|Music', 11110 => 'Books|Kids|Arts & Entertainment|Performing Arts', 11111 => 'Books|Kids|Family', 11112 => 'Books|Kids|Fiction', 11113 => 'Books|Kids|Fiction|Action & Adventure', 11114 => 'Books|Kids|Fiction|Animals', 11115 => 'Books|Kids|Fiction|Classics', 11116 => 'Books|Kids|Fiction|Comics & Graphic Novels', 11117 => 'Books|Kids|Fiction|Culture, Places & People', 11118 => 'Books|Kids|Fiction|Family & Relationships', 11119 => 'Books|Kids|Fiction|Fantasy', 11120 => 'Books|Kids|Fiction|Fairy Tales, Myths & Fables', 11121 => 'Books|Kids|Fiction|Favorite Characters', 11122 => 'Books|Kids|Fiction|Historical', 11123 => 'Books|Kids|Fiction|Holidays & Celebrations', 11124 => 'Books|Kids|Fiction|Monsters & Ghosts', 11125 => 'Books|Kids|Fiction|Mysteries', 11126 => 'Books|Kids|Fiction|Nature', 11127 => 'Books|Kids|Fiction|Religion', 11128 => 'Books|Kids|Fiction|Sci-Fi', 11129 => 'Books|Kids|Fiction|Social Issues', 11130 => 'Books|Kids|Fiction|Sports & Recreation', 11131 => 'Books|Kids|Fiction|Transportation', 11132 => 'Books|Kids|Games & Activities', 11133 => 'Books|Kids|General Nonfiction', 11134 => 'Books|Kids|Health', 11135 => 'Books|Kids|History', 11136 => 'Books|Kids|Holidays & Celebrations', 11137 => 'Books|Kids|Holidays & Celebrations|Birthdays', 11138 => 'Books|Kids|Holidays & Celebrations|Christmas & Advent', 11139 => 'Books|Kids|Holidays & Celebrations|Easter & Lent', 11140 => 'Books|Kids|Holidays & Celebrations|General', 11141 => 'Books|Kids|Holidays & Celebrations|Halloween', 11142 => 'Books|Kids|Holidays & Celebrations|Hanukkah', 11143 => 'Books|Kids|Holidays & Celebrations|Other', 11144 => 'Books|Kids|Holidays & Celebrations|Passover', 11145 => 'Books|Kids|Holidays & Celebrations|Patriotic Holidays', 11146 => 'Books|Kids|Holidays & Celebrations|Ramadan', 11147 => 'Books|Kids|Holidays & Celebrations|Thanksgiving', 11148 => "Books|Kids|Holidays & Celebrations|Valentine's Day", 11149 => 'Books|Kids|Humor', 11150 => 'Books|Kids|Humor|Jokes & Riddles', 11151 => 'Books|Kids|Poetry', 11152 => 'Books|Kids|Learning to Read', 11153 => 'Books|Kids|Learning to Read|Chapter Books', 11154 => 'Books|Kids|Learning to Read|Early Readers', 11155 => 'Books|Kids|Learning to Read|Intermediate Readers', 11156 => 'Books|Kids|Nursery Rhymes', 11157 => 'Books|Kids|Government', 11158 => 'Books|Kids|Reference', 11159 => 'Books|Kids|Religion', 11160 => 'Books|Kids|Science & Nature', 11161 => 'Books|Kids|Social Issues', 11162 => 'Books|Kids|Social Studies', 11163 => 'Books|Kids|Sports & Recreation', 11164 => 'Books|Kids|Transportation', 11165 => 'Books|Young Adult', 11166 => 'Books|Young Adult|Animals', 11167 => 'Books|Young Adult|Biography', 11168 => 'Books|Young Adult|Careers & Occupations', 11169 => 'Books|Young Adult|Computers & Technology', 11170 => 'Books|Young Adult|Cooking & Food', 11171 => 'Books|Young Adult|Arts & Entertainment', 11172 => 'Books|Young Adult|Arts & Entertainment|Art', 11173 => 'Books|Young Adult|Arts & Entertainment|Crafts', 11174 => 'Books|Young Adult|Arts & Entertainment|Music', 11175 => 'Books|Young Adult|Arts & Entertainment|Performing Arts', 11176 => 'Books|Young Adult|Family', 11177 => 'Books|Young Adult|Fiction', 11178 => 'Books|Young Adult|Fiction|Action & Adventure', 11179 => 'Books|Young Adult|Fiction|Animals', 11180 => 'Books|Young Adult|Fiction|Classics', 11181 => 'Books|Young Adult|Fiction|Comics & Graphic Novels', 11182 => 'Books|Young Adult|Fiction|Culture, Places & People', 11183 => 'Books|Young Adult|Fiction|Dystopian', 11184 => 'Books|Young Adult|Fiction|Family & Relationships', 11185 => 'Books|Young Adult|Fiction|Fantasy', 11186 => 'Books|Young Adult|Fiction|Fairy Tales, Myths & Fables', 11187 => 'Books|Young Adult|Fiction|Favorite Characters', 11188 => 'Books|Young Adult|Fiction|Historical', 11189 => 'Books|Young Adult|Fiction|Holidays & Celebrations', 11190 => 'Books|Young Adult|Fiction|Horror, Monsters & Ghosts', 11191 => 'Books|Young Adult|Fiction|Crime & Mystery', 11192 => 'Books|Young Adult|Fiction|Nature', 11193 => 'Books|Young Adult|Fiction|Religion', 11194 => 'Books|Young Adult|Fiction|Romance', 11195 => 'Books|Young Adult|Fiction|Sci-Fi', 11196 => 'Books|Young Adult|Fiction|Coming of Age', 11197 => 'Books|Young Adult|Fiction|Sports & Recreation', 11198 => 'Books|Young Adult|Fiction|Transportation', 11199 => 'Books|Young Adult|Games & Activities', 11200 => 'Books|Young Adult|General Nonfiction', 11201 => 'Books|Young Adult|Health', 11202 => 'Books|Young Adult|History', 11203 => 'Books|Young Adult|Holidays & Celebrations', 11204 => 'Books|Young Adult|Holidays & Celebrations|Birthdays', 11205 => 'Books|Young Adult|Holidays & Celebrations|Christmas & Advent', 11206 => 'Books|Young Adult|Holidays & Celebrations|Easter & Lent', 11207 => 'Books|Young Adult|Holidays & Celebrations|General', 11208 => 'Books|Young Adult|Holidays & Celebrations|Halloween', 11209 => 'Books|Young Adult|Holidays & Celebrations|Hanukkah', 11210 => 'Books|Young Adult|Holidays & Celebrations|Other', 11211 => 'Books|Young Adult|Holidays & Celebrations|Passover', 11212 => 'Books|Young Adult|Holidays & Celebrations|Patriotic Holidays', 11213 => 'Books|Young Adult|Holidays & Celebrations|Ramadan', 11214 => 'Books|Young Adult|Holidays & Celebrations|Thanksgiving', 11215 => "Books|Young Adult|Holidays & Celebrations|Valentine's Day", 11216 => 'Books|Young Adult|Humor', 11217 => 'Books|Young Adult|Humor|Jokes & Riddles', 11218 => 'Books|Young Adult|Poetry', 11219 => 'Books|Young Adult|Politics & Government', 11220 => 'Books|Young Adult|Reference', 11221 => 'Books|Young Adult|Religion', 11222 => 'Books|Young Adult|Science & Nature', 11223 => 'Books|Young Adult|Coming of Age', 11224 => 'Books|Young Adult|Social Studies', 11225 => 'Books|Young Adult|Sports & Recreation', 11226 => 'Books|Young Adult|Transportation', 11227 => 'Books|Communications & Media', 11228 => 'Books|Military & Warfare', 11229 => 'Books|Romance|Inspirational', 11231 => 'Books|Romance|Holiday', 11232 => 'Books|Romance|Wholesome', 11233 => 'Books|Romance|Military', 11234 => 'Books|Arts & Entertainment|Art History', 11236 => 'Books|Arts & Entertainment|Design', 11243 => 'Books|Business & Personal Finance|Accounting', 11244 => 'Books|Business & Personal Finance|Hospitality', 11245 => 'Books|Business & Personal Finance|Real Estate', 11246 => 'Books|Humor|Jokes & Riddles', 11247 => 'Books|Religion & Spirituality|Comparative Religion', 11255 => 'Books|Cookbooks, Food & Wine|Culinary Arts', 11259 => 'Books|Mysteries & Thrillers|Cozy', 11260 => 'Books|Politics & Current Events|Current Events', 11261 => 'Books|Politics & Current Events|Foreign Policy & International Relations', 11262 => 'Books|Politics & Current Events|Local Government', 11263 => 'Books|Politics & Current Events|National Government', 11264 => 'Books|Politics & Current Events|Political Science', 11265 => 'Books|Politics & Current Events|Public Administration', 11266 => 'Books|Politics & Current Events|World Affairs', 11273 => 'Books|Nonfiction|Family & Relationships|Family & Childcare', 11274 => 'Books|Nonfiction|Family & Relationships|Love & Romance', 11275 => 'Books|Sci-Fi & Fantasy|Fantasy|Urban', 11276 => 'Books|Reference|Foreign Languages|Arabic', 11277 => 'Books|Reference|Foreign Languages|Bilingual Editions', 11278 => 'Books|Reference|Foreign Languages|African Languages', 11279 => 'Books|Reference|Foreign Languages|Ancient Languages', 11280 => 'Books|Reference|Foreign Languages|Chinese', 11281 => 'Books|Reference|Foreign Languages|English', 11282 => 'Books|Reference|Foreign Languages|French', 11283 => 'Books|Reference|Foreign Languages|German', 11284 => 'Books|Reference|Foreign Languages|Hebrew', 11285 => 'Books|Reference|Foreign Languages|Hindi', 11286 => 'Books|Reference|Foreign Languages|Italian', 11287 => 'Books|Reference|Foreign Languages|Japanese', 11288 => 'Books|Reference|Foreign Languages|Korean', 11289 => 'Books|Reference|Foreign Languages|Linguistics', 11290 => 'Books|Reference|Foreign Languages|Other Languages', 11291 => 'Books|Reference|Foreign Languages|Portuguese', 11292 => 'Books|Reference|Foreign Languages|Russian', 11293 => 'Books|Reference|Foreign Languages|Spanish', 11294 => 'Books|Reference|Foreign Languages|Speech Pathology', 11295 => 'Books|Science & Nature|Mathematics|Advanced Mathematics', 11296 => 'Books|Science & Nature|Mathematics|Algebra', 11297 => 'Books|Science & Nature|Mathematics|Arithmetic', 11298 => 'Books|Science & Nature|Mathematics|Calculus', 11299 => 'Books|Science & Nature|Mathematics|Geometry', 11300 => 'Books|Science & Nature|Mathematics|Statistics', 11301 => 'Books|Professional & Technical|Medical|Veterinary', 11302 => 'Books|Professional & Technical|Medical|Neuroscience', 11303 => 'Books|Professional & Technical|Medical|Immunology', 11304 => 'Books|Professional & Technical|Medical|Nursing', 11305 => 'Books|Professional & Technical|Medical|Pharmacology & Toxicology', 11306 => 'Books|Professional & Technical|Medical|Anatomy & Physiology', 11307 => 'Books|Professional & Technical|Medical|Dentistry', 11308 => 'Books|Professional & Technical|Medical|Emergency Medicine', 11309 => 'Books|Professional & Technical|Medical|Genetics', 11310 => 'Books|Professional & Technical|Medical|Psychiatry', 11311 => 'Books|Professional & Technical|Medical|Radiology', 11312 => 'Books|Professional & Technical|Medical|Alternative Medicine', 11317 => 'Books|Nonfiction|Philosophy|Political Philosophy', 11319 => 'Books|Nonfiction|Philosophy|Philosophy of Language', 11320 => 'Books|Nonfiction|Philosophy|Philosophy of Religion', 11327 => 'Books|Nonfiction|Social Science|Sociology', 11329 => 'Books|Professional & Technical|Engineering|Aeronautics', 11330 => 'Books|Professional & Technical|Engineering|Chemical & Petroleum Engineering', 11331 => 'Books|Professional & Technical|Engineering|Civil Engineering', 11332 => 'Books|Professional & Technical|Engineering|Computer Science', 11333 => 'Books|Professional & Technical|Engineering|Electrical Engineering', 11334 => 'Books|Professional & Technical|Engineering|Environmental Engineering', 11335 => 'Books|Professional & Technical|Engineering|Mechanical Engineering', 11336 => 'Books|Professional & Technical|Engineering|Power Resources', 11337 => 'Books|Comics & Graphic Novels|Manga|Boys', 11338 => 'Books|Comics & Graphic Novels|Manga|Men', 11339 => 'Books|Comics & Graphic Novels|Manga|Girls', 11340 => 'Books|Comics & Graphic Novels|Manga|Women', 11341 => 'Books|Comics & Graphic Novels|Manga|Other', 12001 => 'Mac App Store|Business', 12002 => 'Mac App Store|Developer Tools', 12003 => 'Mac App Store|Education', 12004 => 'Mac App Store|Entertainment', 12005 => 'Mac App Store|Finance', 12006 => 'Mac App Store|Games', 12007 => 'Mac App Store|Health & Fitness', 12008 => 'Mac App Store|Lifestyle', 12010 => 'Mac App Store|Medical', 12011 => 'Mac App Store|Music', 12012 => 'Mac App Store|News', 12013 => 'Mac App Store|Photography', 12014 => 'Mac App Store|Productivity', 12015 => 'Mac App Store|Reference', 12016 => 'Mac App Store|Social Networking', 12017 => 'Mac App Store|Sports', 12018 => 'Mac App Store|Travel', 12019 => 'Mac App Store|Utilities', 12020 => 'Mac App Store|Video', 12021 => 'Mac App Store|Weather', 12022 => 'Mac App Store|Graphics & Design', 12201 => 'Mac App Store|Games|Action', 12202 => 'Mac App Store|Games|Adventure', 12203 => 'Mac App Store|Games|Arcade', 12204 => 'Mac App Store|Games|Board', 12205 => 'Mac App Store|Games|Card', 12206 => 'Mac App Store|Games|Casino', 12207 => 'Mac App Store|Games|Dice', 12208 => 'Mac App Store|Games|Educational', 12209 => 'Mac App Store|Games|Family', 12210 => 'Mac App Store|Games|Kids', 12211 => 'Mac App Store|Games|Music', 12212 => 'Mac App Store|Games|Puzzle', 12213 => 'Mac App Store|Games|Racing', 12214 => 'Mac App Store|Games|Role Playing', 12215 => 'Mac App Store|Games|Simulation', 12216 => 'Mac App Store|Games|Sports', 12217 => 'Mac App Store|Games|Strategy', 12218 => 'Mac App Store|Games|Trivia', 12219 => 'Mac App Store|Games|Word', 13001 => 'App Store|Newsstand|News & Politics', 13002 => 'App Store|Newsstand|Fashion & Style', 13003 => 'App Store|Newsstand|Home & Garden', 13004 => 'App Store|Newsstand|Outdoors & Nature', 13005 => 'App Store|Newsstand|Sports & Leisure', 13006 => 'App Store|Newsstand|Automotive', 13007 => 'App Store|Newsstand|Arts & Photography', 13008 => 'App Store|Newsstand|Brides & Weddings', 13009 => 'App Store|Newsstand|Business & Investing', 13010 => "App Store|Newsstand|Children's Magazines", 13011 => 'App Store|Newsstand|Computers & Internet', 13012 => 'App Store|Newsstand|Cooking, Food & Drink', 13013 => 'App Store|Newsstand|Crafts & Hobbies', 13014 => 'App Store|Newsstand|Electronics & Audio', 13015 => 'App Store|Newsstand|Entertainment', 13017 => 'App Store|Newsstand|Health, Mind & Body', 13018 => 'App Store|Newsstand|History', 13019 => 'App Store|Newsstand|Literary Magazines & Journals', 13020 => "App Store|Newsstand|Men's Interest", 13021 => 'App Store|Newsstand|Movies & Music', 13023 => 'App Store|Newsstand|Parenting & Family', 13024 => 'App Store|Newsstand|Pets', 13025 => 'App Store|Newsstand|Professional & Trade', 13026 => 'App Store|Newsstand|Regional News', 13027 => 'App Store|Newsstand|Science', 13028 => 'App Store|Newsstand|Teens', 13029 => 'App Store|Newsstand|Travel & Regional', 13030 => "App Store|Newsstand|Women's Interest", 15000 => 'Textbooks|Arts & Entertainment', 15001 => 'Textbooks|Arts & Entertainment|Art & Architecture', 15002 => 'Textbooks|Arts & Entertainment|Art & Architecture|Urban Planning', 15003 => 'Textbooks|Arts & Entertainment|Art History', 15004 => 'Textbooks|Arts & Entertainment|Dance', 15005 => 'Textbooks|Arts & Entertainment|Design', 15006 => 'Textbooks|Arts & Entertainment|Fashion', 15007 => 'Textbooks|Arts & Entertainment|Film', 15008 => 'Textbooks|Arts & Entertainment|Games', 15009 => 'Textbooks|Arts & Entertainment|Interior Design', 15010 => 'Textbooks|Arts & Entertainment|Media Arts', 15011 => 'Textbooks|Arts & Entertainment|Music', 15012 => 'Textbooks|Arts & Entertainment|Performing Arts', 15013 => 'Textbooks|Arts & Entertainment|Photography', 15014 => 'Textbooks|Arts & Entertainment|Theater', 15015 => 'Textbooks|Arts & Entertainment|TV', 15016 => 'Textbooks|Arts & Entertainment|Visual Arts', 15017 => 'Textbooks|Biographies & Memoirs', 15018 => 'Textbooks|Business & Personal Finance', 15019 => 'Textbooks|Business & Personal Finance|Accounting', 15020 => 'Textbooks|Business & Personal Finance|Careers', 15021 => 'Textbooks|Business & Personal Finance|Economics', 15022 => 'Textbooks|Business & Personal Finance|Finance', 15023 => 'Textbooks|Business & Personal Finance|Hospitality', 15024 => 'Textbooks|Business & Personal Finance|Industries & Professions', 15025 => 'Textbooks|Business & Personal Finance|Investing', 15026 => 'Textbooks|Business & Personal Finance|Management & Leadership', 15027 => 'Textbooks|Business & Personal Finance|Marketing & Sales', 15028 => 'Textbooks|Business & Personal Finance|Personal Finance', 15029 => 'Textbooks|Business & Personal Finance|Real Estate', 15030 => 'Textbooks|Business & Personal Finance|Reference', 15031 => 'Textbooks|Business & Personal Finance|Small Business & Entrepreneurship', 15032 => 'Textbooks|Children & Teens', 15033 => 'Textbooks|Children & Teens|Fiction', 15034 => 'Textbooks|Children & Teens|Nonfiction', 15035 => 'Textbooks|Comics & Graphic Novels', 15036 => 'Textbooks|Comics & Graphic Novels|Graphic Novels', 15037 => 'Textbooks|Comics & Graphic Novels|Manga', 15038 => 'Textbooks|Communications & Media', 15039 => 'Textbooks|Communications & Media|Broadcasting', 15040 => 'Textbooks|Communications & Media|Digital Media', 15041 => 'Textbooks|Communications & Media|Journalism', 15042 => 'Textbooks|Communications & Media|Photojournalism', 15043 => 'Textbooks|Communications & Media|Print', 15044 => 'Textbooks|Communications & Media|Speech', 15045 => 'Textbooks|Communications & Media|Writing', 15046 => 'Textbooks|Computers & Internet', 15047 => 'Textbooks|Computers & Internet|Computers', 15048 => 'Textbooks|Computers & Internet|Databases', 15049 => 'Textbooks|Computers & Internet|Digital Media', 15050 => 'Textbooks|Computers & Internet|Internet', 15051 => 'Textbooks|Computers & Internet|Network', 15052 => 'Textbooks|Computers & Internet|Operating Systems', 15053 => 'Textbooks|Computers & Internet|Programming', 15054 => 'Textbooks|Computers & Internet|Software', 15055 => 'Textbooks|Computers & Internet|System Administration', 15056 => 'Textbooks|Cookbooks, Food & Wine', 15057 => 'Textbooks|Cookbooks, Food & Wine|Beverages', 15058 => 'Textbooks|Cookbooks, Food & Wine|Courses & Dishes', 15059 => 'Textbooks|Cookbooks, Food & Wine|Culinary Arts', 15060 => 'Textbooks|Cookbooks, Food & Wine|Methods', 15061 => 'Textbooks|Cookbooks, Food & Wine|Reference', 15062 => 'Textbooks|Cookbooks, Food & Wine|Regional & Ethnic', 15063 => 'Textbooks|Cookbooks, Food & Wine|Special Diet', 15064 => 'Textbooks|Cookbooks, Food & Wine|Special Occasions', 15065 => 'Textbooks|Cookbooks, Food & Wine|Specific Ingredients', 15066 => 'Textbooks|Engineering', 15067 => 'Textbooks|Engineering|Aeronautics', 15068 => 'Textbooks|Engineering|Chemical & Petroleum Engineering', 15069 => 'Textbooks|Engineering|Civil Engineering', 15070 => 'Textbooks|Engineering|Computer Science', 15071 => 'Textbooks|Engineering|Electrical Engineering', 15072 => 'Textbooks|Engineering|Environmental Engineering', 15073 => 'Textbooks|Engineering|Mechanical Engineering', 15074 => 'Textbooks|Engineering|Power Resources', 15075 => 'Textbooks|Fiction & Literature', 15076 => 'Textbooks|Fiction & Literature|Latino', 15077 => 'Textbooks|Fiction & Literature|Action & Adventure', 15078 => 'Textbooks|Fiction & Literature|African American', 15079 => 'Textbooks|Fiction & Literature|Anthologies', 15080 => 'Textbooks|Fiction & Literature|Classics', 15081 => 'Textbooks|Fiction & Literature|Comparative Literature', 15082 => 'Textbooks|Fiction & Literature|Erotica', 15083 => 'Textbooks|Fiction & Literature|Gay', 15084 => 'Textbooks|Fiction & Literature|Ghost', 15085 => 'Textbooks|Fiction & Literature|Historical', 15086 => 'Textbooks|Fiction & Literature|Horror', 15087 => 'Textbooks|Fiction & Literature|Literary', 15088 => 'Textbooks|Fiction & Literature|Literary Criticism', 15089 => 'Textbooks|Fiction & Literature|Poetry', 15090 => 'Textbooks|Fiction & Literature|Religious', 15091 => 'Textbooks|Fiction & Literature|Short Stories', 15092 => 'Textbooks|Health, Mind & Body', 15093 => 'Textbooks|Health, Mind & Body|Fitness', 15094 => 'Textbooks|Health, Mind & Body|Self-Improvement', 15095 => 'Textbooks|History', 15096 => 'Textbooks|History|Africa', 15097 => 'Textbooks|History|Americas', 15098 => 'Textbooks|History|Americas|Canada', 15099 => 'Textbooks|History|Americas|Latin America', 15100 => 'Textbooks|History|Americas|United States', 15101 => 'Textbooks|History|Ancient', 15102 => 'Textbooks|History|Asia', 15103 => 'Textbooks|History|Australia & Oceania', 15104 => 'Textbooks|History|Europe', 15105 => 'Textbooks|History|Middle East', 15106 => 'Textbooks|History|Military', 15107 => 'Textbooks|History|World', 15108 => 'Textbooks|Humor', 15109 => 'Textbooks|Language Studies', 15110 => 'Textbooks|Language Studies|African Languages', 15111 => 'Textbooks|Language Studies|Ancient Languages', 15112 => 'Textbooks|Language Studies|Arabic', 15113 => 'Textbooks|Language Studies|Bilingual Editions', 15114 => 'Textbooks|Language Studies|Chinese', 15115 => 'Textbooks|Language Studies|English', 15116 => 'Textbooks|Language Studies|French', 15117 => 'Textbooks|Language Studies|German', 15118 => 'Textbooks|Language Studies|Hebrew', 15119 => 'Textbooks|Language Studies|Hindi', 15120 => 'Textbooks|Language Studies|Indigenous Languages', 15121 => 'Textbooks|Language Studies|Italian', 15122 => 'Textbooks|Language Studies|Japanese', 15123 => 'Textbooks|Language Studies|Korean', 15124 => 'Textbooks|Language Studies|Linguistics', 15125 => 'Textbooks|Language Studies|Other Language', 15126 => 'Textbooks|Language Studies|Portuguese', 15127 => 'Textbooks|Language Studies|Russian', 15128 => 'Textbooks|Language Studies|Spanish', 15129 => 'Textbooks|Language Studies|Speech Pathology', 15130 => 'Textbooks|Lifestyle & Home', 15131 => 'Textbooks|Lifestyle & Home|Antiques & Collectibles', 15132 => 'Textbooks|Lifestyle & Home|Crafts & Hobbies', 15133 => 'Textbooks|Lifestyle & Home|Gardening', 15134 => 'Textbooks|Lifestyle & Home|Pets', 15135 => 'Textbooks|Mathematics', 15136 => 'Textbooks|Mathematics|Advanced Mathematics', 15137 => 'Textbooks|Mathematics|Algebra', 15138 => 'Textbooks|Mathematics|Arithmetic', 15139 => 'Textbooks|Mathematics|Calculus', 15140 => 'Textbooks|Mathematics|Geometry', 15141 => 'Textbooks|Mathematics|Statistics', 15142 => 'Textbooks|Medicine', 15143 => 'Textbooks|Medicine|Anatomy & Physiology', 15144 => 'Textbooks|Medicine|Dentistry', 15145 => 'Textbooks|Medicine|Emergency Medicine', 15146 => 'Textbooks|Medicine|Genetics', 15147 => 'Textbooks|Medicine|Immunology', 15148 => 'Textbooks|Medicine|Neuroscience', 15149 => 'Textbooks|Medicine|Nursing', 15150 => 'Textbooks|Medicine|Pharmacology & Toxicology', 15151 => 'Textbooks|Medicine|Psychiatry', 15152 => 'Textbooks|Medicine|Psychology', 15153 => 'Textbooks|Medicine|Radiology', 15154 => 'Textbooks|Medicine|Veterinary', 15155 => 'Textbooks|Mysteries & Thrillers', 15156 => 'Textbooks|Mysteries & Thrillers|British Detectives', 15157 => 'Textbooks|Mysteries & Thrillers|Hard-Boiled', 15158 => 'Textbooks|Mysteries & Thrillers|Historical', 15159 => 'Textbooks|Mysteries & Thrillers|Police Procedural', 15160 => 'Textbooks|Mysteries & Thrillers|Short Stories', 15161 => 'Textbooks|Mysteries & Thrillers|Women Sleuths', 15162 => 'Textbooks|Nonfiction', 15163 => 'Textbooks|Nonfiction|Family & Relationships', 15164 => 'Textbooks|Nonfiction|Transportation', 15165 => 'Textbooks|Nonfiction|True Crime', 15166 => 'Textbooks|Parenting', 15167 => 'Textbooks|Philosophy', 15168 => 'Textbooks|Philosophy|Aesthetics', 15169 => 'Textbooks|Philosophy|Epistemology', 15170 => 'Textbooks|Philosophy|Ethics', 15171 => 'Textbooks|Philosophy|Philosophy of Language', 15172 => 'Textbooks|Philosophy|Logic', 15173 => 'Textbooks|Philosophy|Metaphysics', 15174 => 'Textbooks|Philosophy|Political Philosophy', 15175 => 'Textbooks|Philosophy|Philosophy of Religion', 15176 => 'Textbooks|Politics & Current Events', 15177 => 'Textbooks|Politics & Current Events|Current Events', 15178 => 'Textbooks|Politics & Current Events|Foreign Policy & International Relations', 15179 => 'Textbooks|Politics & Current Events|Local Governments', 15180 => 'Textbooks|Politics & Current Events|National Governments', 15181 => 'Textbooks|Politics & Current Events|Political Science', 15182 => 'Textbooks|Politics & Current Events|Public Administration', 15183 => 'Textbooks|Politics & Current Events|World Affairs', 15184 => 'Textbooks|Professional & Technical', 15185 => 'Textbooks|Professional & Technical|Design', 15186 => 'Textbooks|Professional & Technical|Language Arts & Disciplines', 15187 => 'Textbooks|Professional & Technical|Engineering', 15188 => 'Textbooks|Professional & Technical|Law', 15189 => 'Textbooks|Professional & Technical|Medical', 15190 => 'Textbooks|Reference', 15191 => 'Textbooks|Reference|Almanacs & Yearbooks', 15192 => 'Textbooks|Reference|Atlases & Maps', 15193 => 'Textbooks|Reference|Catalogs & Directories', 15194 => 'Textbooks|Reference|Consumer Guides', 15195 => 'Textbooks|Reference|Dictionaries & Thesauruses', 15196 => 'Textbooks|Reference|Encyclopedias', 15197 => 'Textbooks|Reference|Etiquette', 15198 => 'Textbooks|Reference|Quotations', 15199 => 'Textbooks|Reference|Study Aids', 15200 => 'Textbooks|Reference|Words & Language', 15201 => 'Textbooks|Reference|Writing', 15202 => 'Textbooks|Religion & Spirituality', 15203 => 'Textbooks|Religion & Spirituality|Bible Studies', 15204 => 'Textbooks|Religion & Spirituality|Bibles', 15205 => 'Textbooks|Religion & Spirituality|Buddhism', 15206 => 'Textbooks|Religion & Spirituality|Christianity', 15207 => 'Textbooks|Religion & Spirituality|Comparative Religion', 15208 => 'Textbooks|Religion & Spirituality|Hinduism', 15209 => 'Textbooks|Religion & Spirituality|Islam', 15210 => 'Textbooks|Religion & Spirituality|Judaism', 15211 => 'Textbooks|Religion & Spirituality|Spirituality', 15212 => 'Textbooks|Romance', 15213 => 'Textbooks|Romance|Contemporary', 15214 => 'Textbooks|Romance|Erotic Romance', 15215 => 'Textbooks|Romance|Paranormal', 15216 => 'Textbooks|Romance|Historical', 15217 => 'Textbooks|Romance|Short Stories', 15218 => 'Textbooks|Romance|Suspense', 15219 => 'Textbooks|Romance|Western', 15220 => 'Textbooks|Sci-Fi & Fantasy', 15221 => 'Textbooks|Sci-Fi & Fantasy|Fantasy', 15222 => 'Textbooks|Sci-Fi & Fantasy|Fantasy|Contemporary', 15223 => 'Textbooks|Sci-Fi & Fantasy|Fantasy|Epic', 15224 => 'Textbooks|Sci-Fi & Fantasy|Fantasy|Historical', 15225 => 'Textbooks|Sci-Fi & Fantasy|Fantasy|Paranormal', 15226 => 'Textbooks|Sci-Fi & Fantasy|Fantasy|Short Stories', 15227 => 'Textbooks|Sci-Fi & Fantasy|Science Fiction', 15228 => 'Textbooks|Sci-Fi & Fantasy|Science Fiction & Literature', 15229 => 'Textbooks|Sci-Fi & Fantasy|Science Fiction & Literature|Adventure', 15230 => 'Textbooks|Sci-Fi & Fantasy|Science Fiction & Literature|High Tech', 15231 => 'Textbooks|Sci-Fi & Fantasy|Science Fiction & Literature|Short Stories', 15232 => 'Textbooks|Science & Nature', 15233 => 'Textbooks|Science & Nature|Agriculture', 15234 => 'Textbooks|Science & Nature|Astronomy', 15235 => 'Textbooks|Science & Nature|Atmosphere', 15236 => 'Textbooks|Science & Nature|Biology', 15237 => 'Textbooks|Science & Nature|Chemistry', 15238 => 'Textbooks|Science & Nature|Earth Sciences', 15239 => 'Textbooks|Science & Nature|Ecology', 15240 => 'Textbooks|Science & Nature|Environment', 15241 => 'Textbooks|Science & Nature|Essays', 15242 => 'Textbooks|Science & Nature|Geography', 15243 => 'Textbooks|Science & Nature|Geology', 15244 => 'Textbooks|Science & Nature|History', 15245 => 'Textbooks|Science & Nature|Life Sciences', 15246 => 'Textbooks|Science & Nature|Nature', 15247 => 'Textbooks|Science & Nature|Physics', 15248 => 'Textbooks|Science & Nature|Reference', 15249 => 'Textbooks|Social Science', 15250 => 'Textbooks|Social Science|Anthropology', 15251 => 'Textbooks|Social Science|Archaeology', 15252 => 'Textbooks|Social Science|Civics', 15253 => 'Textbooks|Social Science|Government', 15254 => 'Textbooks|Social Science|Social Studies', 15255 => 'Textbooks|Social Science|Social Welfare', 15256 => 'Textbooks|Social Science|Society', 15257 => 'Textbooks|Social Science|Society|African Studies', 15258 => 'Textbooks|Social Science|Society|American Studies', 15259 => 'Textbooks|Social Science|Society|Asia Pacific Studies', 15260 => 'Textbooks|Social Science|Society|Cross-Cultural Studies', 15261 => 'Textbooks|Social Science|Society|European Studies', 15262 => 'Textbooks|Social Science|Society|Immigration & Emigration', 15263 => 'Textbooks|Social Science|Society|Indigenous Studies', 15264 => 'Textbooks|Social Science|Society|Latin & Caribbean Studies', 15265 => 'Textbooks|Social Science|Society|Middle Eastern Studies', 15266 => 'Textbooks|Social Science|Society|Race & Ethnicity Studies', 15267 => 'Textbooks|Social Science|Society|Sexuality Studies', 15268 => "Textbooks|Social Science|Society|Women's Studies", 15269 => 'Textbooks|Social Science|Sociology', 15270 => 'Textbooks|Sports & Outdoors', 15271 => 'Textbooks|Sports & Outdoors|Baseball', 15272 => 'Textbooks|Sports & Outdoors|Basketball', 15273 => 'Textbooks|Sports & Outdoors|Coaching', 15274 => 'Textbooks|Sports & Outdoors|Equestrian', 15275 => 'Textbooks|Sports & Outdoors|Extreme Sports', 15276 => 'Textbooks|Sports & Outdoors|Football', 15277 => 'Textbooks|Sports & Outdoors|Golf', 15278 => 'Textbooks|Sports & Outdoors|Hockey', 15279 => 'Textbooks|Sports & Outdoors|Motor Sports', 15280 => 'Textbooks|Sports & Outdoors|Mountaineering', 15281 => 'Textbooks|Sports & Outdoors|Outdoors', 15282 => 'Textbooks|Sports & Outdoors|Racket Sports', 15283 => 'Textbooks|Sports & Outdoors|Reference', 15284 => 'Textbooks|Sports & Outdoors|Soccer', 15285 => 'Textbooks|Sports & Outdoors|Training', 15286 => 'Textbooks|Sports & Outdoors|Water Sports', 15287 => 'Textbooks|Sports & Outdoors|Winter Sports', 15288 => 'Textbooks|Teaching & Learning', 15289 => 'Textbooks|Teaching & Learning|Adult Education', 15290 => 'Textbooks|Teaching & Learning|Curriculum & Teaching', 15291 => 'Textbooks|Teaching & Learning|Educational Leadership', 15292 => 'Textbooks|Teaching & Learning|Educational Technology', 15293 => 'Textbooks|Teaching & Learning|Family & Childcare', 15294 => 'Textbooks|Teaching & Learning|Information & Library Science', 15295 => 'Textbooks|Teaching & Learning|Learning Resources', 15296 => 'Textbooks|Teaching & Learning|Psychology & Research', 15297 => 'Textbooks|Teaching & Learning|Special Education', 15298 => 'Textbooks|Travel & Adventure', 15299 => 'Textbooks|Travel & Adventure|Africa', 15300 => 'Textbooks|Travel & Adventure|Americas', 15301 => 'Textbooks|Travel & Adventure|Americas|Canada', 15302 => 'Textbooks|Travel & Adventure|Americas|Latin America', 15303 => 'Textbooks|Travel & Adventure|Americas|United States', 15304 => 'Textbooks|Travel & Adventure|Asia', 15305 => 'Textbooks|Travel & Adventure|Caribbean', 15306 => 'Textbooks|Travel & Adventure|Essays & Memoirs', 15307 => 'Textbooks|Travel & Adventure|Europe', 15308 => 'Textbooks|Travel & Adventure|Middle East', 15309 => 'Textbooks|Travel & Adventure|Oceania', 15310 => 'Textbooks|Travel & Adventure|Specialty Travel', 15311 => 'Textbooks|Comics & Graphic Novels|Comics', 15312 => 'Textbooks|Reference|Manuals', 100000 => 'Music|Christian & Gospel', 100001 => 'Music|Classical|Art Song', 100002 => 'Music|Classical|Brass & Woodwinds', 100003 => 'Music|Classical|Solo Instrumental', 100004 => 'Music|Classical|Contemporary Era', 100005 => 'Music|Classical|Oratorio', 100006 => 'Music|Classical|Cantata', 100007 => 'Music|Classical|Electronic', 100008 => 'Music|Classical|Sacred', 100009 => 'Music|Classical|Guitar', 100010 => 'Music|Classical|Piano', 100011 => 'Music|Classical|Violin', 100012 => 'Music|Classical|Cello', 100013 => 'Music|Classical|Percussion', 100014 => 'Music|Electronic|Dubstep', 100015 => 'Music|Electronic|Bass', 100016 => 'Music|Hip-Hop/Rap|UK Hip-Hop', 100017 => 'Music|Reggae|Lovers Rock', 100018 => 'Music|Alternative|EMO', 100019 => 'Music|Alternative|Pop Punk', 100020 => 'Music|Alternative|Indie Pop', 100021 => 'Music|New Age|Yoga', 100022 => 'Music|Pop|Tribute', 40000000 => 'iTunes U', 40000001 => 'iTunes U|Business', 40000002 => 'iTunes U|Business|Economics', 40000003 => 'iTunes U|Business|Finance', 40000004 => 'iTunes U|Business|Hospitality', 40000005 => 'iTunes U|Business|Management', 40000006 => 'iTunes U|Business|Marketing', 40000007 => 'iTunes U|Business|Personal Finance', 40000008 => 'iTunes U|Business|Real Estate', 40000009 => 'iTunes U|Engineering', 40000010 => 'iTunes U|Engineering|Chemical & Petroleum Engineering', 40000011 => 'iTunes U|Engineering|Civil Engineering', 40000012 => 'iTunes U|Engineering|Computer Science', 40000013 => 'iTunes U|Engineering|Electrical Engineering', 40000014 => 'iTunes U|Engineering|Environmental Engineering', 40000015 => 'iTunes U|Engineering|Mechanical Engineering', 40000016 => 'iTunes U|Art & Architecture', 40000017 => 'iTunes U|Art & Architecture|Architecture', 40000019 => 'iTunes U|Art & Architecture|Art History', 40000020 => 'iTunes U|Art & Architecture|Dance', 40000021 => 'iTunes U|Art & Architecture|Film', 40000022 => 'iTunes U|Art & Architecture|Design', 40000023 => 'iTunes U|Art & Architecture|Interior Design', 40000024 => 'iTunes U|Art & Architecture|Music', 40000025 => 'iTunes U|Art & Architecture|Theater', 40000026 => 'iTunes U|Health & Medicine', 40000027 => 'iTunes U|Health & Medicine|Anatomy & Physiology', 40000028 => 'iTunes U|Health & Medicine|Behavioral Science', 40000029 => 'iTunes U|Health & Medicine|Dentistry', 40000030 => 'iTunes U|Health & Medicine|Diet & Nutrition', 40000031 => 'iTunes U|Health & Medicine|Emergency Medicine', 40000032 => 'iTunes U|Health & Medicine|Genetics', 40000033 => 'iTunes U|Health & Medicine|Gerontology', 40000034 => 'iTunes U|Health & Medicine|Health & Exercise Science', 40000035 => 'iTunes U|Health & Medicine|Immunology', 40000036 => 'iTunes U|Health & Medicine|Neuroscience', 40000037 => 'iTunes U|Health & Medicine|Pharmacology & Toxicology', 40000038 => 'iTunes U|Health & Medicine|Psychiatry', 40000039 => 'iTunes U|Health & Medicine|Global Health', 40000040 => 'iTunes U|Health & Medicine|Radiology', 40000041 => 'iTunes U|History', 40000042 => 'iTunes U|History|Ancient History', 40000043 => 'iTunes U|History|Medieval History', 40000044 => 'iTunes U|History|Military History', 40000045 => 'iTunes U|History|Modern History', 40000046 => 'iTunes U|History|African History', 40000047 => 'iTunes U|History|Asia-Pacific History', 40000048 => 'iTunes U|History|European History', 40000049 => 'iTunes U|History|Middle Eastern History', 40000050 => 'iTunes U|History|North American History', 40000051 => 'iTunes U|History|South American History', 40000053 => 'iTunes U|Communications & Media', 40000054 => 'iTunes U|Philosophy', 40000055 => 'iTunes U|Religion & Spirituality', 40000056 => 'iTunes U|Language', 40000057 => 'iTunes U|Language|African Languages', 40000058 => 'iTunes U|Language|Ancient Languages', 40000061 => 'iTunes U|Language|English', 40000063 => 'iTunes U|Language|French', 40000064 => 'iTunes U|Language|German', 40000065 => 'iTunes U|Language|Italian', 40000066 => 'iTunes U|Language|Linguistics', 40000068 => 'iTunes U|Language|Spanish', 40000069 => 'iTunes U|Language|Speech Pathology', 40000070 => 'iTunes U|Literature', 40000071 => 'iTunes U|Literature|Anthologies', 40000072 => 'iTunes U|Literature|Biography', 40000073 => 'iTunes U|Literature|Classics', 40000074 => 'iTunes U|Literature|Literary Criticism', 40000075 => 'iTunes U|Literature|Fiction', 40000076 => 'iTunes U|Literature|Poetry', 40000077 => 'iTunes U|Mathematics', 40000078 => 'iTunes U|Mathematics|Advanced Mathematics', 40000079 => 'iTunes U|Mathematics|Algebra', 40000080 => 'iTunes U|Mathematics|Arithmetic', 40000081 => 'iTunes U|Mathematics|Calculus', 40000082 => 'iTunes U|Mathematics|Geometry', 40000083 => 'iTunes U|Mathematics|Statistics', 40000084 => 'iTunes U|Science', 40000085 => 'iTunes U|Science|Agricultural', 40000086 => 'iTunes U|Science|Astronomy', 40000087 => 'iTunes U|Science|Atmosphere', 40000088 => 'iTunes U|Science|Biology', 40000089 => 'iTunes U|Science|Chemistry', 40000090 => 'iTunes U|Science|Ecology', 40000091 => 'iTunes U|Science|Geography', 40000092 => 'iTunes U|Science|Geology', 40000093 => 'iTunes U|Science|Physics', 40000094 => 'iTunes U|Psychology & Social Science', 40000095 => 'iTunes U|Law & Politics|Law', 40000096 => 'iTunes U|Law & Politics|Political Science', 40000097 => 'iTunes U|Law & Politics|Public Administration', 40000098 => 'iTunes U|Psychology & Social Science|Psychology', 40000099 => 'iTunes U|Psychology & Social Science|Social Welfare', 40000100 => 'iTunes U|Psychology & Social Science|Sociology', 40000101 => 'iTunes U|Society', 40000103 => 'iTunes U|Society|Asia Pacific Studies', 40000104 => 'iTunes U|Society|European Studies', 40000105 => 'iTunes U|Society|Indigenous Studies', 40000106 => 'iTunes U|Society|Latin & Caribbean Studies', 40000107 => 'iTunes U|Society|Middle Eastern Studies', 40000108 => "iTunes U|Society|Women's Studies", 40000109 => 'iTunes U|Teaching & Learning', 40000110 => 'iTunes U|Teaching & Learning|Curriculum & Teaching', 40000111 => 'iTunes U|Teaching & Learning|Educational Leadership', 40000112 => 'iTunes U|Teaching & Learning|Family & Childcare', 40000113 => 'iTunes U|Teaching & Learning|Learning Resources', 40000114 => 'iTunes U|Teaching & Learning|Psychology & Research', 40000115 => 'iTunes U|Teaching & Learning|Special Education', 40000116 => 'iTunes U|Art & Architecture|Culinary Arts', 40000117 => 'iTunes U|Art & Architecture|Fashion', 40000118 => 'iTunes U|Art & Architecture|Media Arts', 40000119 => 'iTunes U|Art & Architecture|Photography', 40000120 => 'iTunes U|Art & Architecture|Visual Art', 40000121 => 'iTunes U|Business|Entrepreneurship', 40000122 => 'iTunes U|Communications & Media|Broadcasting', 40000123 => 'iTunes U|Communications & Media|Digital Media', 40000124 => 'iTunes U|Communications & Media|Journalism', 40000125 => 'iTunes U|Communications & Media|Photojournalism', 40000126 => 'iTunes U|Communications & Media|Print', 40000127 => 'iTunes U|Communications & Media|Speech', 40000128 => 'iTunes U|Communications & Media|Writing', 40000129 => 'iTunes U|Health & Medicine|Nursing', 40000130 => 'iTunes U|Language|Arabic', 40000131 => 'iTunes U|Language|Chinese', 40000132 => 'iTunes U|Language|Hebrew', 40000133 => 'iTunes U|Language|Hindi', 40000134 => 'iTunes U|Language|Indigenous Languages', 40000135 => 'iTunes U|Language|Japanese', 40000136 => 'iTunes U|Language|Korean', 40000137 => 'iTunes U|Language|Other Languages', 40000138 => 'iTunes U|Language|Portuguese', 40000139 => 'iTunes U|Language|Russian', 40000140 => 'iTunes U|Law & Politics', 40000141 => 'iTunes U|Law & Politics|Foreign Policy & International Relations', 40000142 => 'iTunes U|Law & Politics|Local Governments', 40000143 => 'iTunes U|Law & Politics|National Governments', 40000144 => 'iTunes U|Law & Politics|World Affairs', 40000145 => 'iTunes U|Literature|Comparative Literature', 40000146 => 'iTunes U|Philosophy|Aesthetics', 40000147 => 'iTunes U|Philosophy|Epistemology', 40000148 => 'iTunes U|Philosophy|Ethics', 40000149 => 'iTunes U|Philosophy|Metaphysics', 40000150 => 'iTunes U|Philosophy|Political Philosophy', 40000151 => 'iTunes U|Philosophy|Logic', 40000152 => 'iTunes U|Philosophy|Philosophy of Language', 40000153 => 'iTunes U|Philosophy|Philosophy of Religion', 40000154 => 'iTunes U|Psychology & Social Science|Archaeology', 40000155 => 'iTunes U|Psychology & Social Science|Anthropology', 40000156 => 'iTunes U|Religion & Spirituality|Buddhism', 40000157 => 'iTunes U|Religion & Spirituality|Christianity', 40000158 => 'iTunes U|Religion & Spirituality|Comparative Religion', 40000159 => 'iTunes U|Religion & Spirituality|Hinduism', 40000160 => 'iTunes U|Religion & Spirituality|Islam', 40000161 => 'iTunes U|Religion & Spirituality|Judaism', 40000162 => 'iTunes U|Religion & Spirituality|Other Religions', 40000163 => 'iTunes U|Religion & Spirituality|Spirituality', 40000164 => 'iTunes U|Science|Environment', 40000165 => 'iTunes U|Society|African Studies', 40000166 => 'iTunes U|Society|American Studies', 40000167 => 'iTunes U|Society|Cross-cultural Studies', 40000168 => 'iTunes U|Society|Immigration & Emigration', 40000169 => 'iTunes U|Society|Race & Ethnicity Studies', 40000170 => 'iTunes U|Society|Sexuality Studies', 40000171 => 'iTunes U|Teaching & Learning|Educational Technology', 40000172 => 'iTunes U|Teaching & Learning|Information/Library Science', 40000173 => 'iTunes U|Language|Dutch', 40000174 => 'iTunes U|Language|Luxembourgish', 40000175 => 'iTunes U|Language|Swedish', 40000176 => 'iTunes U|Language|Norwegian', 40000177 => 'iTunes U|Language|Finnish', 40000178 => 'iTunes U|Language|Danish', 40000179 => 'iTunes U|Language|Polish', 40000180 => 'iTunes U|Language|Turkish', 40000181 => 'iTunes U|Language|Flemish', 50000024 => 'Audiobooks', 50000040 => 'Audiobooks|Fiction', 50000041 => 'Audiobooks|Arts & Entertainment', 50000042 => 'Audiobooks|Biography & Memoir', 50000043 => 'Audiobooks|Business', 50000044 => 'Audiobooks|Kids & Young Adults', 50000045 => 'Audiobooks|Classics', 50000046 => 'Audiobooks|Comedy', 50000047 => 'Audiobooks|Drama & Poetry', 50000048 => 'Audiobooks|Speakers & Storytellers', 50000049 => 'Audiobooks|History', 50000050 => 'Audiobooks|Languages', 50000051 => 'Audiobooks|Mystery', 50000052 => 'Audiobooks|Nonfiction', 50000053 => 'Audiobooks|Religion & Spirituality', 50000054 => 'Audiobooks|Science', 50000055 => 'Audiobooks|Sci Fi & Fantasy', 50000056 => 'Audiobooks|Self Development', 50000057 => 'Audiobooks|Sports', 50000058 => 'Audiobooks|Technology', 50000059 => 'Audiobooks|Travel & Adventure', 50000061 => 'Music|Spoken Word', 50000063 => 'Music|Disney', 50000064 => 'Music|French Pop', 50000066 => 'Music|German Pop', 50000068 => 'Music|German Folk', 50000069 => 'Audiobooks|Romance', 50000070 => 'Audiobooks|Audiobooks Latino', 50000071 => 'Books|Comics & Graphic Novels|Manga|Action', 50000072 => 'Books|Comics & Graphic Novels|Manga|Comedy', 50000073 => 'Books|Comics & Graphic Novels|Manga|Erotica', 50000074 => 'Books|Comics & Graphic Novels|Manga|Fantasy', 50000075 => 'Books|Comics & Graphic Novels|Manga|Four Cell Manga', 50000076 => 'Books|Comics & Graphic Novels|Manga|Gay & Lesbian', 50000077 => 'Books|Comics & Graphic Novels|Manga|Hard-Boiled', 50000078 => 'Books|Comics & Graphic Novels|Manga|Heroes', 50000079 => 'Books|Comics & Graphic Novels|Manga|Historical Fiction', 50000080 => 'Books|Comics & Graphic Novels|Manga|Mecha', 50000081 => 'Books|Comics & Graphic Novels|Manga|Mystery', 50000082 => 'Books|Comics & Graphic Novels|Manga|Nonfiction', 50000083 => 'Books|Comics & Graphic Novels|Manga|Religious', 50000084 => 'Books|Comics & Graphic Novels|Manga|Romance', 50000085 => 'Books|Comics & Graphic Novels|Manga|Romantic Comedy', 50000086 => 'Books|Comics & Graphic Novels|Manga|Science Fiction', 50000087 => 'Books|Comics & Graphic Novels|Manga|Sports', 50000088 => 'Books|Fiction & Literature|Light Novels', 50000089 => 'Books|Comics & Graphic Novels|Manga|Horror', 50000090 => 'Books|Comics & Graphic Novels|Comics', }, }, grup => 'Grouping', #10 hdvd => { #10 Name => 'HDVideo', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, keyw => 'Keyword', #7 ldes => 'LongDescription', #10 pcst => { #7 Name => 'Podcast', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, perf => 'Performer', plID => { #10 (or TV season) Name => 'PlayListID', Format => 'int8u', # actually int64u, but split it up }, purd => 'PurchaseDate', #7 purl => 'PodcastURL', #7 rtng => { #10 Name => 'Rating', PrintConv => { 0 => 'none', 1 => 'Explicit', 2 => 'Clean', 4 => 'Explicit (old)', }, }, sfID => { #10 Name => 'AppleStoreCountry', Format => 'int32u', SeparateTable => 1, PrintConv => { #21 143441 => 'United States', # USA 143442 => 'France', # FRA 143443 => 'Germany', # DEU 143444 => 'United Kingdom', # GBR 143445 => 'Austria', # AUT 143446 => 'Belgium', # BEL 143447 => 'Finland', # FIN 143448 => 'Greece', # GRC 143449 => 'Ireland', # IRL 143450 => 'Italy', # ITA 143451 => 'Luxembourg', # LUX 143452 => 'Netherlands', # NLD 143453 => 'Portugal', # PRT 143454 => 'Spain', # ESP 143455 => 'Canada', # CAN 143456 => 'Sweden', # SWE 143457 => 'Norway', # NOR 143458 => 'Denmark', # DNK 143459 => 'Switzerland', # CHE 143460 => 'Australia', # AUS 143461 => 'New Zealand', # NZL 143462 => 'Japan', # JPN 143463 => 'Hong Kong', # HKG 143464 => 'Singapore', # SGP 143465 => 'China', # CHN 143466 => 'Republic of Korea', # KOR 143467 => 'India', # IND 143468 => 'Mexico', # MEX 143469 => 'Russia', # RUS 143470 => 'Taiwan', # TWN 143471 => 'Vietnam', # VNM 143472 => 'South Africa', # ZAF 143473 => 'Malaysia', # MYS 143474 => 'Philippines', # PHL 143475 => 'Thailand', # THA 143476 => 'Indonesia', # IDN 143477 => 'Pakistan', # PAK 143478 => 'Poland', # POL 143479 => 'Saudi Arabia', # SAU 143480 => 'Turkey', # TUR 143481 => 'United Arab Emirates', # ARE 143482 => 'Hungary', # HUN 143483 => 'Chile', # CHL 143484 => 'Nepal', # NPL 143485 => 'Panama', # PAN 143486 => 'Sri Lanka', # LKA 143487 => 'Romania', # ROU 143489 => 'Czech Republic', # CZE 143491 => 'Israel', # ISR 143492 => 'Ukraine', # UKR 143493 => 'Kuwait', # KWT 143494 => 'Croatia', # HRV 143495 => 'Costa Rica', # CRI 143496 => 'Slovakia', # SVK 143497 => 'Lebanon', # LBN 143498 => 'Qatar', # QAT 143499 => 'Slovenia', # SVN 143501 => 'Colombia', # COL 143502 => 'Venezuela', # VEN 143503 => 'Brazil', # BRA 143504 => 'Guatemala', # GTM 143505 => 'Argentina', # ARG 143506 => 'El Salvador', # SLV 143507 => 'Peru', # PER 143508 => 'Dominican Republic', # DOM 143509 => 'Ecuador', # ECU 143510 => 'Honduras', # HND 143511 => 'Jamaica', # JAM 143512 => 'Nicaragua', # NIC 143513 => 'Paraguay', # PRY 143514 => 'Uruguay', # URY 143515 => 'Macau', # MAC 143516 => 'Egypt', # EGY 143517 => 'Kazakhstan', # KAZ 143518 => 'Estonia', # EST 143519 => 'Latvia', # LVA 143520 => 'Lithuania', # LTU 143521 => 'Malta', # MLT 143523 => 'Moldova', # MDA 143524 => 'Armenia', # ARM 143525 => 'Botswana', # BWA 143526 => 'Bulgaria', # BGR 143528 => 'Jordan', # JOR 143529 => 'Kenya', # KEN 143530 => 'Macedonia', # MKD 143531 => 'Madagascar', # MDG 143532 => 'Mali', # MLI 143533 => 'Mauritius', # MUS 143534 => 'Niger', # NER 143535 => 'Senegal', # SEN 143536 => 'Tunisia', # TUN 143537 => 'Uganda', # UGA 143538 => 'Anguilla', # AIA 143539 => 'Bahamas', # BHS 143540 => 'Antigua and Barbuda', # ATG 143541 => 'Barbados', # BRB 143542 => 'Bermuda', # BMU 143543 => 'British Virgin Islands', # VGB 143544 => 'Cayman Islands', # CYM 143545 => 'Dominica', # DMA 143546 => 'Grenada', # GRD 143547 => 'Montserrat', # MSR 143548 => 'St. Kitts and Nevis', # KNA 143549 => 'St. Lucia', # LCA 143550 => 'St. Vincent and The Grenadines', # VCT 143551 => 'Trinidad and Tobago', # TTO 143552 => 'Turks and Caicos', # TCA 143553 => 'Guyana', # GUY 143554 => 'Suriname', # SUR 143555 => 'Belize', # BLZ 143556 => 'Bolivia', # BOL 143557 => 'Cyprus', # CYP 143558 => 'Iceland', # ISL 143559 => 'Bahrain', # BHR 143560 => 'Brunei Darussalam', # BRN 143561 => 'Nigeria', # NGA 143562 => 'Oman', # OMN 143563 => 'Algeria', # DZA 143564 => 'Angola', # AGO 143565 => 'Belarus', # BLR 143566 => 'Uzbekistan', # UZB 143568 => 'Azerbaijan', # AZE 143571 => 'Yemen', # YEM 143572 => 'Tanzania', # TZA 143573 => 'Ghana', # GHA 143575 => 'Albania', # ALB 143576 => 'Benin', # BEN 143577 => 'Bhutan', # BTN 143578 => 'Burkina Faso', # BFA 143579 => 'Cambodia', # KHM 143580 => 'Cape Verde', # CPV 143581 => 'Chad', # TCD 143582 => 'Republic of the Congo', # COG 143583 => 'Fiji', # FJI 143584 => 'Gambia', # GMB 143585 => 'Guinea-Bissau', # GNB 143586 => 'Kyrgyzstan', # KGZ 143587 => "Lao People's Democratic Republic", # LAO 143588 => 'Liberia', # LBR 143589 => 'Malawi', # MWI 143590 => 'Mauritania', # MRT 143591 => 'Federated States of Micronesia', # FSM 143592 => 'Mongolia', # MNG 143593 => 'Mozambique', # MOZ 143594 => 'Namibia', # NAM 143595 => 'Palau', # PLW 143597 => 'Papua New Guinea', # PNG 143598 => 'Sao Tome and Principe', # STP (S&atilde;o Tom&eacute; and Pr&iacute;ncipe) 143599 => 'Seychelles', # SYC 143600 => 'Sierra Leone', # SLE 143601 => 'Solomon Islands', # SLB 143602 => 'Swaziland', # SWZ 143603 => 'Tajikistan', # TJK 143604 => 'Turkmenistan', # TKM 143605 => 'Zimbabwe', # ZWE }, }, soaa => 'SortAlbumArtist', #10 soal => 'SortAlbum', #10 soar => 'SortArtist', #10 soco => 'SortComposer', #10 sonm => 'SortName', #10 sosn => 'SortShow', #10 stik => { #10 Name => 'MediaType', PrintConvColumns => 2, PrintConv => { #(http://weblog.xanga.com/gryphondwb/615474010/iphone-ringtones---what-did-itunes-741-really-do.html) 0 => 'Movie', 1 => 'Normal (Music)', 2 => 'Audiobook', 5 => 'Whacked Bookmark', 6 => 'Music Video', 9 => 'Short Film', 10 => 'TV Show', 11 => 'Booklet', 14 => 'Ringtone', 21 => 'Podcast', #15 }, }, rate => 'RatingPercent', #PH titl => 'Title', tven => 'TVEpisodeID', #7 tves => { #7/10 Name => 'TVEpisode', Format => 'int32u', }, tvnn => 'TVNetworkName', #7 tvsh => 'TVShow', #10 tvsn => { #7/10 Name => 'TVSeason', Format => 'int32u', }, yrrc => 'Year', #(ffmpeg source) itnu => { #PH (iTunes 10.5) Name => 'iTunesU', Description => 'iTunes U', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, #https://github.com/communitymedia/mediautilities/blob/master/src/net/sourceforge/jaad/mp4/boxes/BoxTypes.java gshh => { Name => 'GoogleHostHeader', Format => 'string' }, gspm => { Name => 'GooglePingMessage', Format => 'string' }, gspu => { Name => 'GooglePingURL', Format => 'string' }, gssd => { Name => 'GoogleSourceData', Format => 'string' }, gsst => { Name => 'GoogleStartTime', Format => 'string' }, gstd => { Name => 'GoogleTrackDuration',Format => 'string', ValueConv => '$val / 1000', PrintConv => 'ConvertDuration($val)' }, # atoms observed in AAX audiobooks (ref PH) "\xa9cpy" => { Name => 'Copyright', Groups => { 2 => 'Author' } }, "\xa9pub" => 'Publisher', "\xa9nrt" => 'Narrator', '@pti' => 'ParentTitle', # (guess -- same as "\xa9nam") '@PST' => 'ParentShortTitle', # (guess -- same as "\xa9nam") '@ppi' => 'ParentProductID', # (guess -- same as 'prID') '@sti' => 'ShortTitle', # (guess -- same as "\xa9nam") prID => 'ProductID', rldt => { Name => 'ReleaseDate', Groups => { 2 => 'Time' }}, CDEK => { Name => 'Unknown_CDEK', Unknown => 1 }, # eg: "B004ZMTFEG" - used in URL's ("asin=") CDET => { Name => 'Unknown_CDET', Unknown => 1 }, # eg: "ADBL" VERS => 'ProductVersion', GUID => 'GUID', AACR => { Name => 'Unknown_AACR', Unknown => 1 }, # eg: "CR!1T1H1QH6WX7T714G2BMFX3E9MC4S" # ausr - 30 bytes (User Alias?) ); # item list keys (ref PH) %Image::ExifTool::QuickTime::Keys = ( PROCESS_PROC => \&Image::ExifTool::QuickTime::ProcessKeys, VARS => { LONG_TAGS => 1 }, NOTES => q{ This directory contains a list of key names which are used to decode ItemList tags written by the "mdta" handler. The prefix of "com.apple.quicktime." has been removed from all TagID's below. }, version => 'Version', album => 'Album', artist => { }, artwork => { }, author => { Name => 'Author', Groups => { 2 => 'Author' } }, comment => { }, copyright => { Name => 'Copyright', Groups => { 2 => 'Author' } }, creationdate=> { Name => 'CreationDate', Groups => { 2 => 'Time' }, ValueConv => q{ require Image::ExifTool::XMP; $val = Image::ExifTool::XMP::ConvertXMPDate($val,1); $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary return $val; }, PrintConv => '$self->ConvertDateTime($val)', }, description => { }, director => { }, title => { }, #22 genre => { }, information => { }, keywords => { }, producer => { }, #22 make => { Name => 'Make', Groups => { 2 => 'Camera' } }, model => { Name => 'Model', Groups => { 2 => 'Camera' } }, publisher => { }, software => { }, year => { Groups => { 2 => 'Time' } }, 'camera.identifier' => 'CameraIdentifier', # (iPhone 4) 'camera.framereadouttimeinmicroseconds' => { # (iPhone 4) Name => 'FrameReadoutTime', ValueConv => '$val * 1e-6', PrintConv => '$val * 1e6 . " microseconds"', }, 'location.ISO6709' => { Name => 'GPSCoordinates', Groups => { 2 => 'Location' }, ValueConv => \&ConvertISO6709, PrintConv => \&PrintGPSCoordinates, }, 'location.name' => { Name => 'LocationName', Groups => { 2 => 'Location' } }, 'location.body' => { Name => 'LocationBody', Groups => { 2 => 'Location' } }, 'location.note' => { Name => 'LocationNote', Groups => { 2 => 'Location' } }, 'location.role' => { Name => 'LocationRole', Groups => { 2 => 'Location' }, PrintConv => { 0 => 'Shooting Location', 1 => 'Real Location', 2 => 'Fictional Location', }, }, 'location.date' => { Name => 'LocationDate', Groups => { 2 => 'Time' }, ValueConv => q{ require Image::ExifTool::XMP; $val = Image::ExifTool::XMP::ConvertXMPDate($val); $val =~ s/([-+]\d{2})(\d{2})$/$1:$2/; # add colon to timezone if necessary return $val; }, PrintConv => '$self->ConvertDateTime($val)', }, 'direction.facing' => { Name => 'CameraDirection', Groups => { 2 => 'Location' } }, 'direction.motion' => { Name => 'CameraMotion', Groups => { 2 => 'Location' } }, 'location.body' => { Name => 'LocationBody', Groups => { 2 => 'Location' } }, 'player.version' => 'PlayerVersion', 'player.movie.visual.brightness'=> 'Brightness', 'player.movie.visual.color' => 'Color', 'player.movie.visual.tint' => 'Tint', 'player.movie.visual.contrast' => 'Contrast', 'player.movie.audio.gain' => 'AudioGain', 'player.movie.audio.treble' => 'Trebel', 'player.movie.audio.bass' => 'Bass', 'player.movie.audio.balance' => 'Balance', 'player.movie.audio.pitchshift' => 'PitchShift', 'player.movie.audio.mute' => { Name => 'Mute', Format => 'int8u', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 'rating.user' => 'UserRating', # (Canon ELPH 510 HS) 'collection.user' => 'UserCollection', #22 'Encoded_With' => 'EncodedWith', ); # iTunes info ('----') atoms %Image::ExifTool::QuickTime::iTunesInfo = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 2 => 'Audio' }, NOTES => q{ ExifTool will extract any iTunesInfo tags that exist, even if they are not defined in this table. }, # 'mean'/'name'/'data' atoms form a triplet, but unfortunately # I haven't been able to find any documentation on this. # 'mean' is normally 'com.apple.iTunes' mean => { Name => 'Mean', # the 'Triplet' flag tells ProcessMOV() to generate # a single tag from the mean/name/data triplet Triplet => 1, Hidden => 1, }, name => { Name => 'Name', Triplet => 1, Hidden => 1, }, data => { Name => 'Data', Triplet => 1, Hidden => 1, }, # the tag ID's below are composed from "mean/name", # but "mean/" is omitted if it is "com.apple.iTunes/": 'iTunMOVI' => { Name => 'iTunMOVI', SubDirectory => { TagTable => 'Image::ExifTool::PLIST::Main' }, }, 'tool' => { Name => 'iTunTool', Description => 'iTunTool', Format => 'int32u', PrintConv => 'sprintf("0x%.8x",$val)', }, 'iTunEXTC' => { Name => 'ContentRating', Notes => 'standard | rating | score | reasons', # eg. 'us-tv|TV-14|500|V', 'mpaa|PG-13|300|For violence and sexuality' # (see http://shadowofged.blogspot.ca/2008/06/itunes-content-ratings.html) }, 'iTunNORM' => { Name => 'VolumeNormalization', PrintConv => '$val=~s/ 0+(\w)/ $1/g; $val=~s/^\s+//; $val', }, 'iTunSMPB' => { Name => 'iTunSMPB', Description => 'iTunSMPB', # hex format, similar to iTunNORM, but 12 words instead of 10, # and 4th word is 16 hex digits (all others are 8) # (gives AAC encoder delay, ref http://code.google.com/p/l-smash/issues/detail?id=1) PrintConv => '$val=~s/ 0+(\w)/ $1/g; $val=~s/^\s+//; $val', }, # (CDDB = Compact Disc DataBase) # iTunes_CDDB_1 = <CDDB1 disk ID>+<# tracks>+<logical block address for each track>... 'iTunes_CDDB_1' => 'CDDB1Info', 'iTunes_CDDB_TrackNumber' => 'CDDBTrackNumber', 'Encoding Params' => { Name => 'EncodingParams', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::EncodingParams' }, }, # also heard about 'iTunPGAP', but I haven't seen a sample DISCNUMBER => 'DiscNumber', #PH TRACKNUMBER => 'TrackNumber', #PH popularimeter => 'Popularimeter', #PH ); # iTunes audio encoding parameters # ref https://developer.apple.com/library/mac/#documentation/MusicAudio/Reference/AudioCodecServicesRef/Reference/reference.html %Image::ExifTool::QuickTime::EncodingParams = ( PROCESS_PROC => \&ProcessEncodingParams, GROUPS => { 2 => 'Audio' }, # (I have commented out the ones that don't have integer values because they # probably don't appear, and definitly wouldn't work with current decoding - PH) # global codec properties #'lnam' => 'AudioCodecName', #'lmak' => 'AudioCodecManufacturer', #'lfor' => 'AudioCodecFormat', 'vpk?' => 'AudioHasVariablePacketByteSizes', #'ifm#' => 'AudioSupportedInputFormats', #'ofm#' => 'AudioSupportedOutputFormats', #'aisr' => 'AudioAvailableInputSampleRates', #'aosr' => 'AudioAvailableOutputSampleRates', 'abrt' => 'AudioAvailableBitRateRange', 'mnip' => 'AudioMinimumNumberInputPackets', 'mnop' => 'AudioMinimumNumberOutputPackets', 'cmnc' => 'AudioAvailableNumberChannels', 'lmrc' => 'AudioDoesSampleRateConversion', #'aicl' => 'AudioAvailableInputChannelLayoutTags', #'aocl' => 'AudioAvailableOutputChannelLayoutTags', #'if4o' => 'AudioInputFormatsForOutputFormat', #'of4i' => 'AudioOutputFormatsForInputFormat', #'acfi' => 'AudioFormatInfo', # instance codec properties 'tbuf' => 'AudioInputBufferSize', 'pakf' => 'AudioPacketFrameSize', 'pakb' => 'AudioMaximumPacketByteSize', #'ifmt' => 'AudioCurrentInputFormat', #'ofmt' => 'AudioCurrentOutputFormat', #'kuki' => 'AudioMagicCookie', 'ubuf' => 'AudioUsedInputBufferSize', 'init' => 'AudioIsInitialized', 'brat' => 'AudioCurrentTargetBitRate', #'cisr' => 'AudioCurrentInputSampleRate', #'cosr' => 'AudioCurrentOutputSampleRate', 'srcq' => 'AudioQualitySetting', #'brta' => 'AudioApplicableBitRateRange', #'isra' => 'AudioApplicableInputSampleRates', #'osra' => 'AudioApplicableOutputSampleRates', 'pad0' => 'AudioZeroFramesPadded', 'prmm' => 'AudioCodecPrimeMethod', #'prim' => 'AudioCodecPrimeInfo', #'icl ' => 'AudioInputChannelLayout', #'ocl ' => 'AudioOutputChannelLayout', #'acs ' => 'AudioCodecSettings', #'acfl' => 'AudioCodecFormatList', 'acbf' => 'AudioBitRateControlMode', 'vbrq' => 'AudioVBRQuality', 'mdel' => 'AudioMinimumDelayMode', # deprecated 'pakd' => 'AudioRequiresPacketDescription', #'brt#' => 'AudioAvailableBitRates', 'acef' => 'AudioExtendFrequencies', 'ursr' => 'AudioUseRecommendedSampleRate', 'oppr' => 'AudioOutputPrecedence', #'loud' => 'AudioCurrentLoudnessStatistics', # others 'vers' => 'AudioEncodingParamsVersion', #PH 'cdcv' => { #PH Name => 'AudioComponentVersion', ValueConv => 'join ".", unpack("ncc", pack("N",$val))', }, ); # print to video data block %Image::ExifTool::QuickTime::Video = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, 0 => { Name => 'DisplaySize', PrintConv => { 0 => 'Normal', 1 => 'Double Size', 2 => 'Half Size', 3 => 'Full Screen', 4 => 'Current Size', }, }, 6 => { Name => 'SlideShow', PrintConv => { 0 => 'No', 1 => 'Yes', }, }, ); # 'hnti' atoms %Image::ExifTool::QuickTime::HintInfo = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 2 => 'Video' }, 'rtp ' => { Name => 'RealtimeStreamingProtocol', PrintConv => '$val=~s/^sdp /(SDP) /; $val', }, 'sdp ' => 'StreamingDataProtocol', ); # 'hinf' atoms %Image::ExifTool::QuickTime::HintTrackInfo = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 2 => 'Video' }, trpY => { Name => 'TotalBytes', Format => 'int64u' }, #(documented) trpy => { Name => 'TotalBytes', Format => 'int64u' }, #(observed) totl => { Name => 'TotalBytes', Format => 'int32u' }, nump => { Name => 'NumPackets', Format => 'int64u' }, npck => { Name => 'NumPackets', Format => 'int32u' }, tpyl => { Name => 'TotalBytesNoRTPHeaders', Format => 'int64u' }, tpaY => { Name => 'TotalBytesNoRTPHeaders', Format => 'int32u' }, #(documented) tpay => { Name => 'TotalBytesNoRTPHeaders', Format => 'int32u' }, #(observed) maxr => { Name => 'MaxDataRate', Format => 'int32u', Count => 2, PrintConv => 'my @a=split(" ",$val);sprintf("%d bytes in %.3f s",$a[1],$a[0]/1000)', }, dmed => { Name => 'MediaTrackBytes', Format => 'int64u' }, dimm => { Name => 'ImmediateDataBytes', Format => 'int64u' }, drep => { Name => 'RepeatedDataBytes', Format => 'int64u' }, tmin => { Name => 'MinTransmissionTime', Format => 'int32u', PrintConv => 'sprintf("%.3f s",$val/1000)', }, tmax => { Name => 'MaxTransmissionTime', Format => 'int32u', PrintConv => 'sprintf("%.3f s",$val/1000)', }, pmax => { Name => 'LargestPacketSize', Format => 'int32u' }, dmax => { Name => 'LargestPacketDuration', Format => 'int32u', PrintConv => 'sprintf("%.3f s",$val/1000)', }, payt => { Name => 'PayloadType', Format => 'undef', # (necessary to prevent decoding as string!) ValueConv => 'unpack("N",$val) . " " . substr($val, 5)', PrintConv => '$val=~s/ /, /;$val', }, ); # MP4 media box (ref 5) %Image::ExifTool::QuickTime::Media = ( PROCESS_PROC => \&ProcessMOV, WRITE_PROC => \&WriteQuickTime, GROUPS => { 1 => 'Track#', 2 => 'Video' }, NOTES => 'MP4 media box.', mdhd => { Name => 'MediaHeader', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::MediaHeader' }, }, hdlr => { Name => 'Handler', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Handler' }, }, minf => { Name => 'MediaInfo', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::MediaInfo' }, }, ); # MP4 media header box (ref 5) %Image::ExifTool::QuickTime::MediaHeader = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, GROUPS => { 1 => 'Track#', 2 => 'Video' }, FORMAT => 'int32u', DATAMEMBER => [ 0, 1, 2, 3, 4 ], 0 => { Name => 'MediaHeaderVersion', RawConv => '$$self{MediaHeaderVersion} = $val', }, 1 => { Name => 'MediaCreateDate', Groups => { 2 => 'Time' }, %timeInfo, # this is int64u if MediaHeaderVersion == 1 (ref 5/13) Hook => '$$self{MediaHeaderVersion} and $format = "int64u", $varSize += 4', }, 2 => { Name => 'MediaModifyDate', Groups => { 2 => 'Time' }, %timeInfo, # this is int64u if MediaHeaderVersion == 1 (ref 5/13) Hook => '$$self{MediaHeaderVersion} and $format = "int64u", $varSize += 4', }, 3 => { Name => 'MediaTimeScale', RawConv => '$$self{MediaTS} = $val', }, 4 => { Name => 'MediaDuration', RawConv => '$$self{MediaTS} ? $val / $$self{MediaTS} : $val', PrintConv => '$$self{MediaTS} ? ConvertDuration($val) : $val', # this is int64u if MediaHeaderVersion == 1 (ref 5/13) Hook => '$$self{MediaHeaderVersion} and $format = "int64u", $varSize += 4', }, 5 => { Name => 'MediaLanguageCode', Format => 'int16u', RawConv => '$val ? $val : undef', # allow both Macintosh (for MOV files) and ISO (for MP4 files) language codes ValueConv => '$val < 0x400 ? $val : pack "C*", map { (($val>>$_)&0x1f)+0x60 } 10, 5, 0', PrintConv => q{ return $val unless $val =~ /^\d+$/; require Image::ExifTool::Font; return $Image::ExifTool::Font::ttLang{Macintosh}{$val} || "Unknown ($val)"; }, }, ); # MP4 media information box (ref 5) %Image::ExifTool::QuickTime::MediaInfo = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 1 => 'Track#', 2 => 'Video' }, NOTES => 'MP4 media info box.', vmhd => { Name => 'VideoHeader', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::VideoHeader' }, }, smhd => { Name => 'AudioHeader', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::AudioHeader' }, }, hmhd => { Name => 'HintHeader', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::HintHeader' }, }, nmhd => { Name => 'NullMediaHeader', Flags => ['Binary','Unknown'], }, dinf => { Name => 'DataInfo', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::DataInfo' }, }, gmhd => { Name => 'GenMediaHeader', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::GenMediaHeader' }, }, hdlr => { #PH Name => 'Handler', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Handler' }, }, stbl => { Name => 'SampleTable', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::SampleTable' }, }, ); # MP4 video media header (ref 5) %Image::ExifTool::QuickTime::VideoHeader = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, NOTES => 'MP4 video media header.', FORMAT => 'int16u', 2 => { Name => 'GraphicsMode', PrintHex => 1, SeparateTable => 'GraphicsMode', PrintConv => \%graphicsMode, }, 3 => { Name => 'OpColor', Format => 'int16u[3]' }, ); # MP4 audio media header (ref 5) %Image::ExifTool::QuickTime::AudioHeader = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Audio' }, NOTES => 'MP4 audio media header.', FORMAT => 'int16u', 2 => { Name => 'Balance', Format => 'fixed16s' }, ); # MP4 hint media header (ref 5) %Image::ExifTool::QuickTime::HintHeader = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, NOTES => 'MP4 hint media header.', FORMAT => 'int16u', 2 => 'MaxPDUSize', 3 => 'AvgPDUSize', 4 => { Name => 'MaxBitrate', Format => 'int32u', PrintConv => 'ConvertBitrate($val)' }, 6 => { Name => 'AvgBitrate', Format => 'int32u', PrintConv => 'ConvertBitrate($val)' }, ); # MP4 sample table box (ref 5) %Image::ExifTool::QuickTime::SampleTable = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 2 => 'Video' }, NOTES => 'MP4 sample table box.', stsd => [ { Name => 'AudioSampleDesc', Condition => '$$self{HandlerType} and $$self{HandlerType} eq "soun"', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::AudioSampleDesc', Start => 8, # skip version number and count }, },{ Name => 'VideoSampleDesc', Condition => '$$self{HandlerType} and $$self{HandlerType} eq "vide"', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::ImageDesc', Start => 8, # skip version number and count }, },{ Name => 'HintSampleDesc', Condition => '$$self{HandlerType} and $$self{HandlerType} eq "hint"', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::HintSampleDesc', Start => 8, # skip version number and count }, },{ Name => 'OtherSampleDesc', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::OtherSampleDesc', Start => 8, # skip version number and count }, }, # (Note: "alis" HandlerType handled by the parent audio or video handler) ], stts => [ # decoding time-to-sample table { Name => 'VideoFrameRate', Notes => 'average rate calculated from time-to-sample table for video media', Condition => '$$self{HandlerType} and $$self{HandlerType} eq "vide"', Format => 'undef', # (necessary to prevent decoding as string!) # (must be RawConv so appropriate MediaTS is used in calculation) RawConv => 'Image::ExifTool::QuickTime::CalcSampleRate($self, \$val)', PrintConv => 'int($val * 1000 + 0.5) / 1000', }, { Name => 'TimeToSampleTable', Flags => ['Binary','Unknown'], }, ], ctts => { Name => 'CompositionTimeToSample', Flags => ['Binary','Unknown'], }, stsc => { Name => 'SampleToChunk', Flags => ['Binary','Unknown'], }, stsz => { Name => 'SampleSizes', Flags => ['Binary','Unknown'], }, stz2 => { Name => 'CompactSampleSizes', Flags => ['Binary','Unknown'], }, stco => { Name => 'ChunkOffset', Flags => ['Binary','Unknown'], }, co64 => { Name => 'ChunkOffset64', Flags => ['Binary','Unknown'], }, stss => { Name => 'SyncSampleTable', Flags => ['Binary','Unknown'], }, stsh => { Name => 'ShadowSyncSampleTable', Flags => ['Binary','Unknown'], }, padb => { Name => 'SamplePaddingBits', Flags => ['Binary','Unknown'], }, stdp => { Name => 'SampleDegradationPriority', Flags => ['Binary','Unknown'], }, sdtp => { Name => 'IdependentAndDisposableSamples', Flags => ['Binary','Unknown'], }, sbgp => { Name => 'SampleToGroup', Flags => ['Binary','Unknown'], }, sgpd => { Name => 'SampleGroupDescription', Flags => ['Binary','Unknown'], }, subs => { Name => 'Sub-sampleInformation', Flags => ['Binary','Unknown'], }, cslg => { Name => 'CompositionToDecodeTimelineMapping', Flags => ['Binary','Unknown'], }, stps => { Name => 'PartialSyncSamples', ValueConv => 'join " ",unpack("x8N*",$val)', }, ); # MP4 audio sample description box (ref 5/AtomicParsley 0.9.4 parsley.cpp) %Image::ExifTool::QuickTime::AudioSampleDesc = ( PROCESS_PROC => \&ProcessHybrid, VARS => { ID_LABEL => 'ID/Index' }, GROUPS => { 2 => 'Audio' }, NOTES => q{ MP4 audio sample description. This hybrid atom contains both data and child atoms. }, 4 => { Name => 'AudioFormat', Format => 'undef[4]', RawConv => q{ $$self{AudioFormat} = $val; return undef unless $val =~ /^[\w ]{4}$/i; # check for protected audio format $self->OverrideFileType('M4P') if $val eq 'drms' and $$self{VALUE}{FileType} eq 'M4A'; return $val; }, }, 20 => { #PH Name => 'AudioVendorID', Condition => '$$self{AudioFormat} ne "mp4s"', Format => 'undef[4]', RawConv => '$val eq "\0\0\0\0" ? undef : $val', PrintConv => \%vendorID, SeparateTable => 'VendorID', }, 24 => { Name => 'AudioChannels', Format => 'int16u' }, 26 => { Name => 'AudioBitsPerSample', Format => 'int16u' }, 32 => { Name => 'AudioSampleRate', Format => 'fixed32u' }, # # Observed offsets for child atoms of various AudioFormat types: # # AudioFormat Offset Child atoms # ----------- ------ ---------------- # mp4a 52 * wave, chan, esds # in24 52 wave, chan # "ms\0\x11" 52 wave # sowt 52 chan # mp4a 36 * esds, pinf # drms 36 esds, sinf # samr 36 damr # alac 36 alac # ac-3 36 dac3 # # (* child atoms found at different offsets in mp4a) # pinf => { Name => 'PurchaseInfo', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::ProtectionInfo' }, }, sinf => { # "protection scheme information" Name => 'ProtectionInfo', #3 SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::ProtectionInfo' }, }, # chan - 16/36 bytes # esds - 31/40/42/43 bytes - ES descriptor (ref 3) damr => { #3 Name => 'DecodeConfig', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::DecodeConfig' }, }, wave => { Name => 'Wave', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Wave' }, }, # alac - 28 bytes # adrm - AAX DRM atom? 148 bytes # aabd - AAX unknown 17kB (contains 'aavd' strings) ); # AMR decode config box (ref 3) %Image::ExifTool::QuickTime::DecodeConfig = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Audio' }, 0 => { Name => 'EncoderVendor', Format => 'undef[4]', }, 4 => 'EncoderVersion', # 5 - int16u - packet modes # 7 - int8u - number of packet mode changes # 8 - int8u - bytes per packet ); %Image::ExifTool::QuickTime::ProtectionInfo = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 2 => 'Audio' }, NOTES => 'Child atoms found in "sinf" and/or "pinf" atoms.', frma => 'OriginalFormat', # imif - IPMP information schm => { Name => 'SchemeType', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::SchemeType' }, }, schi => { Name => 'SchemeInfo', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::SchemeInfo' }, }, # skcr # enda ); %Image::ExifTool::QuickTime::Wave = ( PROCESS_PROC => \&ProcessMOV, frma => 'PurchaseFileFormat', # "ms\0\x11" - 20 bytes ); # scheme type atom # ref http://xhelmboyx.tripod.com/formats/mp4-layout.txt %Image::ExifTool::QuickTime::SchemeType = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Audio' }, # 0 - 4 bytes version 4 => { Name => 'SchemeType', Format => 'undef[4]' }, 8 => { Name => 'SchemeVersion', Format => 'int16u' }, 10 => { Name => 'SchemeURL', Format => 'string[$size-10]' }, ); %Image::ExifTool::QuickTime::SchemeInfo = ( PROCESS_PROC => \&ProcessMOV, GROUPS => { 2 => 'Audio' }, user => { Name => 'UserID', Groups => { 2 => 'Author' }, ValueConv => '"0x" . unpack("H*",$val)', }, cert => { # ref http://www.onvif.org/specs/stream/ONVIF-ExportFileFormat-Spec-v100.pdf Name => 'Certificate', ValueConv => '"0x" . unpack("H*",$val)', }, 'key ' => { Name => 'KeyID', ValueConv => '"0x" . unpack("H*",$val)', }, iviv => { Name => 'InitializationVector', ValueConv => 'unpack("H*",$val)', }, righ => { Name => 'Rights', Groups => { 2 => 'Author' }, SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Rights' }, }, name => { Name => 'UserName', Groups => { 2 => 'Author' } }, # chtb # priv - private data # sign # adkm - Adobe DRM key management system (ref http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf) # iKMS # iSFM # iSLT ); %Image::ExifTool::QuickTime::Rights = ( PROCESS_PROC => \&ProcessRights, GROUPS => { 2 => 'Audio' }, veID => 'ItemVendorID', #PH ("VendorID" ref 19) plat => 'Platform', #18? aver => 'VersionRestrictions', #19 ("appversion?" ref 18) tran => 'TransactionID', #18 song => 'ItemID', #19 ("appid" ref 18) tool => { Name => 'ItemTool', #PH (guess) ("itunes build?" ref 18) Format => 'string', }, medi => 'MediaFlags', #PH (?) mode => 'ModeFlags', #PH (?) 0x04 is HD flag (https://compilr.com/heksesang/requiem-mac/UnDrm.java) ); # MP4 hint sample description box (ref 5) # (ref https://developer.apple.com/library/mac/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-SW1) %Image::ExifTool::QuickTime::HintSampleDesc = ( PROCESS_PROC => \&ProcessHybrid, VARS => { ID_LABEL => 'ID/Index' }, NOTES => 'MP4 hint sample description.', 4 => { Name => 'HintFormat', Format => 'undef[4]' }, # 14 - int16u DataReferenceIndex 16 => { Name => 'HintTrackVersion', Format => 'int16u' }, # 18 - int16u LastCompatibleHintTrackVersion 20 => { Name => 'MaxPacketSize', Format => 'int32u' }, # # Observed offsets for child atoms of various HintFormat types: # # HintFormat Offset Child atoms # ----------- ------ ---------------- # "rtp " 24 tims # tims => { Name => 'RTPTimeScale', Format => 'int32u' }, tsro => { Name => 'TimestampRandomOffset', Format => 'int32u' }, snro => { Name => 'SequenceNumberRandomOffset', Format => 'int32u' }, ); # MP4 generic sample description box %Image::ExifTool::QuickTime::OtherSampleDesc = ( PROCESS_PROC => \&ProcessHybrid, 4 => { Name => 'OtherFormat', Format => 'undef[4]' }, # # Observed offsets for child atoms of various OtherFormat types: # # OtherFormat Offset Child atoms # ----------- ------ ---------------- # avc1 86 avcC # mp4a 36 esds # mp4s 16 esds # tmcd 34 name # ftab => { Name => 'FontTable', Format => 'undef', ValueConv => 'substr($val, 5)' }, ); # MP4 data information box (ref 5) %Image::ExifTool::QuickTime::DataInfo = ( PROCESS_PROC => \&ProcessMOV, NOTES => 'MP4 data information box.', dref => { Name => 'DataRef', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::DataRef', Start => 8, }, }, ); # Generic media header %Image::ExifTool::QuickTime::GenMediaHeader = ( PROCESS_PROC => \&ProcessMOV, gmin => { Name => 'GenMediaInfo', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::GenMediaInfo' }, }, text => { Name => 'Text', Flags => ['Binary','Unknown'], }, tmcd => { Name => 'TimeCode', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::TimeCode' }, }, ); # TimeCode header %Image::ExifTool::QuickTime::TimeCode = ( PROCESS_PROC => \&ProcessMOV, tcmi => { Name => 'TCMediaInfo', SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::TCMediaInfo' }, }, ); # TimeCode media info (ref 12) %Image::ExifTool::QuickTime::TCMediaInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, 4 => { Name => 'TextFont', Format => 'int16u', PrintConv => { 0 => 'System' }, }, 6 => { Name => 'TextFace', Format => 'int16u', PrintConv => { 0 => 'Plain', BITMASK => { 0 => 'Bold', 1 => 'Italic', 2 => 'Underline', 3 => 'Outline', 4 => 'Shadow', 5 => 'Condense', 6 => 'Extend', }, }, }, 8 => { Name => 'TextSize', Format => 'int16u', }, # 10 - reserved 12 => { Name => 'TextColor', Format => 'int16u[3]', }, 18 => { Name => 'BackgroundColor', Format => 'int16u[3]', }, 24 => { Name => 'FontName', Format => 'pstring', ValueConv => '$self->Decode($val, $self->Options("CharsetQuickTime"))', }, ); # Generic media info (ref http://sourceforge.jp/cvs/view/ntvrec/ntvrec/libqtime/gmin.h?view=co) %Image::ExifTool::QuickTime::GenMediaInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, 0 => 'GenMediaVersion', 1 => { Name => 'GenFlags', Format => 'int8u[3]' }, 4 => { Name => 'GenGraphicsMode', Format => 'int16u', PrintHex => 1, SeparateTable => 'GraphicsMode', PrintConv => \%graphicsMode, }, 6 => { Name => 'GenOpColor', Format => 'int16u[3]' }, 12 => { Name => 'GenBalance', Format => 'fixed16s' }, ); # MP4 data reference box (ref 5) %Image::ExifTool::QuickTime::DataRef = ( PROCESS_PROC => \&ProcessMOV, NOTES => 'MP4 data reference box.', 'url ' => { Name => 'URL', Format => 'undef', # (necessary to prevent decoding as string!) RawConv => q{ # ignore if self-contained (flags bit 0 set) return undef if unpack("N",$val) & 0x01; $_ = substr($val,4); s/\0.*//s; $_; }, }, 'urn ' => { Name => 'URN', Format => 'undef', # (necessary to prevent decoding as string!) RawConv => q{ return undef if unpack("N",$val) & 0x01; $_ = substr($val,4); s/\0.*//s; $_; }, }, ); # MP4 handler box (ref 5) %Image::ExifTool::QuickTime::Handler = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, 4 => { #PH Name => 'HandlerClass', Format => 'undef[4]', RawConv => '$val eq "\0\0\0\0" ? undef : $val', PrintConv => { mhlr => 'Media Handler', dhlr => 'Data Handler', }, }, 8 => { Name => 'HandlerType', Format => 'undef[4]', RawConv => '$$self{HandlerType} = $val unless $val eq "alis" or $val eq "url "; $val', PrintConvColumns => 2, PrintConv => { alis => 'Alias Data', #PH crsm => 'Clock Reference', #3 hint => 'Hint Track', ipsm => 'IPMP', #3 m7sm => 'MPEG-7 Stream', #3 meta => 'NRT Metadata', #PH mdir => 'Metadata', #3 mdta => 'Metadata Tags', #PH mjsm => 'MPEG-J', #3 ocsm => 'Object Content', #3 odsm => 'Object Descriptor', #3 priv => 'Private', #PH sdsm => 'Scene Description', #3 soun => 'Audio Track', text => 'Text', #PH (but what type? subtitle?) tmcd => 'Time Code', #PH 'url '=> 'URL', #3 vide => 'Video Track', subp => 'Subpicture', #http://www.google.nl/patents/US7778526 nrtm => 'Non-Real Time Metadata', #PH (Sony ILCE-7S) [how is this different from "meta"?] }, }, 12 => { #PH Name => 'HandlerVendorID', Format => 'undef[4]', RawConv => '$val eq "\0\0\0\0" ? undef : $val', PrintConv => \%vendorID, SeparateTable => 'VendorID', }, 24 => { Name => 'HandlerDescription', Format => 'string', # (sometimes this is a Pascal string, and sometimes it is a C string) RawConv => q{ $val=substr($val,1,ord($1)) if $val=~/^([\0-\x1f])/ and ord($1)<length($val); length $val ? $val : undef; }, }, ); # Flip uuid data (ref PH) %Image::ExifTool::QuickTime::Flip = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int32u', FIRST_ENTRY => 0, NOTES => 'Found in MP4 files from Flip Video cameras.', GROUPS => { 1 => 'MakerNotes', 2 => 'Image' }, 1 => 'PreviewImageWidth', 2 => 'PreviewImageHeight', 13 => 'PreviewImageLength', 14 => { # (confirmed for FlipVideoMinoHD) Name => 'SerialNumber', Groups => { 2 => 'Camera' }, Format => 'string[16]', }, 28 => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Format => 'undef[$val{13}]', RawConv => '$self->ValidateImage(\$val, $tag)', }, ); # QuickTime composite tags %Image::ExifTool::QuickTime::Composite = ( GROUPS => { 2 => 'Video' }, Rotation => { Require => { 0 => 'QuickTime:MatrixStructure', 1 => 'QuickTime:HandlerType', }, ValueConv => 'Image::ExifTool::QuickTime::CalcRotation($self)', }, AvgBitrate => { Priority => 0, # let QuickTime::AvgBitrate take priority Require => { 0 => 'QuickTime::MovieDataSize', 1 => 'QuickTime::Duration', }, RawConv => q{ return undef unless $val[1]; $val[1] /= $$self{TimeScale} if $$self{TimeScale}; my $key = 'MovieDataSize'; my $size = $val[0]; for (;;) { $key = $self->NextTagKey($key) or last; $size += $self->GetValue($key, 'ValueConv'); } return int($size * 8 / $val[1] + 0.5); }, PrintConv => 'ConvertBitrate($val)', }, GPSLatitude => { Require => 'QuickTime:GPSCoordinates', Groups => { 2 => 'Location' }, ValueConv => 'my @c = split " ", $val; $c[0]', PrintConv => q{ require Image::ExifTool::GPS; Image::ExifTool::GPS::ToDMS($self, $val, 1, 'N'); }, }, GPSLongitude => { Require => 'QuickTime:GPSCoordinates', Groups => { 2 => 'Location' }, ValueConv => 'my @c = split " ", $val; $c[1]', PrintConv => q{ require Image::ExifTool::GPS; Image::ExifTool::GPS::ToDMS($self, $val, 1, 'E'); }, }, # split altitude into GPSAltitude/GPSAltitudeRef like EXIF and XMP GPSAltitude => { Require => 'QuickTime:GPSCoordinates', Groups => { 2 => 'Location' }, Priority => 0, # (because it may not exist) ValueConv => 'my @c = split " ", $val; defined $c[2] ? abs($c[2]) : undef', PrintConv => '"$val m"', }, GPSAltitudeRef => { Require => 'QuickTime:GPSCoordinates', Groups => { 2 => 'Location' }, Priority => 0, # (because altitude information may not exist) ValueConv => 'my @c = split " ", $val; defined $c[2] ? ($c[2] < 0 ? 1 : 0) : undef', PrintConv => { 0 => 'Above Sea Level', 1 => 'Below Sea Level', }, }, GPSLatitude2 => { Name => 'GPSLatitude', Require => 'QuickTime:LocationInformation', Groups => { 2 => 'Location' }, ValueConv => '$val =~ /Lat=([-+.\d]+)/; $1', PrintConv => q{ require Image::ExifTool::GPS; Image::ExifTool::GPS::ToDMS($self, $val, 1, 'N'); }, }, GPSLongitude2 => { Name => 'GPSLongitude', Require => 'QuickTime:LocationInformation', Groups => { 2 => 'Location' }, ValueConv => '$val =~ /Lon=([-+.\d]+)/; $1', PrintConv => q{ require Image::ExifTool::GPS; Image::ExifTool::GPS::ToDMS($self, $val, 1, 'E'); }, }, GPSAltitude2 => { Name => 'GPSAltitude', Require => 'QuickTime:LocationInformation', Groups => { 2 => 'Location' }, ValueConv => '$val =~ /Alt=([-+.\d]+)/; abs($1)', PrintConv => '"$val m"', }, GPSAltitudeRef2 => { Name => 'GPSAltitudeRef', Require => 'QuickTime:LocationInformation', Groups => { 2 => 'Location' }, ValueConv => '$val =~ /Alt=([-+.\d]+)/; $1 < 0 ? 1 : 0', PrintConv => { 0 => 'Above Sea Level', 1 => 'Below Sea Level', }, }, CDDBDiscPlayTime => { Require => 'CDDB1Info', Groups => { 2 => 'Audio' }, ValueConv => '$val =~ /^..([a-z0-9]{4})/i ? hex($1) : undef', PrintConv => 'ConvertDuration($val)', }, CDDBDiscTracks => { Require => 'CDDB1Info', Groups => { 2 => 'Audio' }, ValueConv => '$val =~ /^.{6}([a-z0-9]{2})/i ? hex($1) : undef', }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::QuickTime'); #------------------------------------------------------------------------------ # AutoLoad our writer routines when necessary # sub AUTOLOAD { return Image::ExifTool::DoAutoLoad($AUTOLOAD, @_); } #------------------------------------------------------------------------------ # Calculate rotation of video track # Inputs: 0) ExifTool object ref # Returns: rotation angle or undef sub CalcRotation($) { my $et = shift; my $value = $$et{VALUE}; my ($i, $track); # get the video track family 1 group (eg. "Track1"); for ($i=0; ; ++$i) { my $idx = $i ? " ($i)" : ''; my $tag = "HandlerType$idx"; last unless $$value{$tag}; next unless $$value{$tag} eq 'vide'; $track = $et->GetGroup($tag, 1); last; } return undef unless $track; # get the video track matrix for ($i=0; ; ++$i) { my $idx = $i ? " ($i)" : ''; my $tag = "MatrixStructure$idx"; last unless $$value{$tag}; next unless $et->GetGroup($tag, 1) eq $track; my @a = split ' ', $$value{$tag}; return undef unless $a[0] or $a[1]; # calculate the rotation angle (assume uniform rotation) my $angle = atan2($a[1], $a[0]) * 180 / 3.14159; $angle += 360 if $angle < 0; return int($angle * 1000 + 0.5) / 1000; } return undef; } #------------------------------------------------------------------------------ # Determine the average sample rate from a time-to-sample table # Inputs: 0) ExifTool object ref, 1) time-to-sample table data ref # Returns: average sample rate (in Hz) sub CalcSampleRate($$) { my ($et, $valPt) = @_; my @dat = unpack('N*', $$valPt); my ($num, $dur) = (0, 0); my $i; for ($i=2; $i<@dat-1; $i+=2) { $num += $dat[$i]; # total number of samples $dur += $dat[$i] * $dat[$i+1]; # total sample duration } return undef unless $num and $dur and $$et{MediaTS}; return $num * $$et{MediaTS} / $dur; } #------------------------------------------------------------------------------ # Fix incorrect format for ImageWidth/Height as written by Pentax sub FixWrongFormat($) { my $val = shift; return undef unless $val; if ($val & 0xffff0000) { $val = unpack('n',pack('N',$val)); } return $val; } #------------------------------------------------------------------------------ # Convert ISO 6709 string to standard lag/lon format # Inputs: 0) ISO 6709 string (lat, lon, and optional alt) # Returns: position in decimal degress with altitude if available # Notes: Wikipedia indicates altitude may be in feet -- how is this specified? sub ConvertISO6709($) { my $val = shift; if ($val =~ /^([-+]\d{2}(?:\.\d*)?)([-+]\d{3}(?:\.\d*)?)([-+]\d+)?/) { $val = ($1 + 0) . ' ' . ($2 + 0); $val .= ' ' . ($3 + 0) if $3; } elsif ($val =~ /^([-+])(\d{2})(\d{2}(?:\.\d*)?)([-+])(\d{3})(\d{2}(?:\.\d*)?)([-+]\d+)?/) { my $lat = $2 + $3 / 60; $lat = -$lat if $1 eq '-'; my $lon = $5 + $6 / 60; $lon = -$lon if $4 eq '-'; $val = "$lat $lon"; $val .= ' ' . ($7 + 0) if $7; } elsif ($val =~ /^([-+])(\d{2})(\d{2})(\d{2}(?:\.\d*)?)([-+])(\d{3})(\d{2})(\d{2}(?:\.\d*)?)([-+]\d+)?/) { my $lat = $2 + $3 / 60 + $4 / 3600; $lat = -$lat if $1 eq '-'; my $lon = $6 + $7 / 60 + $8 / 3600; $lon = -$lon if $5 eq '-'; $val = "$lat $lon"; $val .= ' ' . ($9 + 0) if $9; } return $val; } #------------------------------------------------------------------------------ # Convert Nero chapter list (ref ffmpeg libavformat/movenc.c) # Inputs: 0) binary chpl data # Returns: chapter list sub ConvertChapterList($) { my $val = shift; my $size = length $val; return '<invalid>' if $size < 9; my $num = Get8u(\$val, 8); my ($i, @chapters); my $pos = 9; for ($i=0; $i<$num; ++$i) { last if $pos + 9 > $size; my $dur = Get64u(\$val, $pos) / 10000000; my $len = Get8u(\$val, $pos + 8); last if $pos + 9 + $len > $size; my $title = substr($val, $pos + 9, $len); $pos += 9 + $len; push @chapters, "$dur $title"; } return \@chapters; # return as a list } #------------------------------------------------------------------------------ # Print conversion for a Nero chapter list item # Inputs: 0) ValueConv chapter string # Returns: formatted chapter string sub PrintChapter($) { my $val = shift; $val =~ /^(\S+) (.*)/ or return $val; my ($dur, $title) = ($1, $2); my $h = int($dur / 3600); $dur -= $h * 3600; my $m = int($dur / 60); my $s = $dur - $m * 60; return sprintf("[%d:%.2d:%06.3f] %s",$h,$m,$s,$title); } #------------------------------------------------------------------------------ # Format GPSCoordinates for printing # Inputs: 0) string with numerical lat, lon and optional alt, separated by spaces # 1) ExifTool object reference # Returns: PrintConv value sub PrintGPSCoordinates($) { my ($val, $et) = @_; require Image::ExifTool::GPS; my @v = split ' ', $val; my $prt = Image::ExifTool::GPS::ToDMS($et, $v[0], 1, "N") . ', ' . Image::ExifTool::GPS::ToDMS($et, $v[1], 1, "E"); if (defined $v[2]) { $prt .= ', ' . ($v[2] < 0 ? -$v[2] . ' m Below' : $v[2] . ' m Above') . ' Sea Level'; } return $prt; } #------------------------------------------------------------------------------ # Unpack packed ISO 639/T language code # Inputs: 0) packed language code (or undef) # Returns: language code, or undef for default language, or 'err' for format error sub UnpackLang($) { my $lang = shift; if ($lang) { # language code is packed in 5-bit characters $lang = pack "C*", map { (($lang>>$_)&0x1f)+0x60 } 10, 5, 0; # validate language code if ($lang =~ /^[a-z]+$/) { # treat 'eng' or 'und' as the default language undef $lang if $lang eq 'und' or $lang eq 'eng'; } else { $lang = 'err'; # invalid language code } } return $lang; } #------------------------------------------------------------------------------ # Get langInfo hash and save details about alt-lang tags # Inputs: 0) ExifTool ref, 1) tagInfo hash ref, 2) locale code # Returns: new tagInfo hash ref, or undef if invalid sub GetLangInfoQT($$$) { my ($et, $tagInfo, $langCode) = @_; my $langInfo = Image::ExifTool::GetLangInfo($tagInfo, $langCode); if ($langInfo) { $$et{QTLang} or $$et{QTLang} = [ ]; push @{$$et{QTLang}}, $$langInfo{Name}; } return $langInfo; } #------------------------------------------------------------------------------ # Process MPEG-4 MTDT atom (ref 11) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessMetaData($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirLen = length $$dataPt; my $verbose = $et->Options('Verbose'); return 0 unless $dirLen >= 2; my $count = Get16u($dataPt, 0); $verbose and $et->VerboseDir('MetaData', $count); my $i; my $pos = 2; for ($i=0; $i<$count; ++$i) { last if $pos + 10 > $dirLen; my $size = Get16u($dataPt, $pos); last if $size < 10 or $size + $pos > $dirLen; my $tag = Get32u($dataPt, $pos + 2); my $lang = Get16u($dataPt, $pos + 6); my $enc = Get16u($dataPt, $pos + 8); my $val = substr($$dataPt, $pos + 10, $size); my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); if ($tagInfo) { # convert language code to ASCII (ignore read-only bit) $lang = UnpackLang($lang); # handle alternate languages if ($lang) { my $langInfo = GetLangInfoQT($et, $tagInfo, $lang); $tagInfo = $langInfo if $langInfo; } $verbose and $et->VerboseInfo($tag, $tagInfo, Value => $val, DataPt => $dataPt, Start => $pos + 10, Size => $size - 10, ); # convert from UTF-16 BE if necessary $val = $et->Decode($val, 'UCS2') if $enc == 1; if ($enc == 0 and $$tagInfo{Unknown}) { # binary data $et->FoundTag($tagInfo, \$val); } else { $et->FoundTag($tagInfo, $val); } } $pos += $size; } return 1; } #------------------------------------------------------------------------------ # Process hybrid binary data + QuickTime container (ref PH) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessHybrid($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; # brute-force search for child atoms after first 8 bytes of binary data my $dataPt = $$dirInfo{DataPt}; my $pos = ($$dirInfo{DirStart} || 0) + 8; my $len = length($$dataPt); my $try = $pos; my $childPos; while ($pos <= $len - 8) { my $tag = substr($$dataPt, $try+4, 4); # look only for well-behaved tag ID's $tag =~ /[^\w ]/ and $try = ++$pos, next; my $size = Get32u($dataPt, $try); if ($size + $try == $len) { # the atom ends exactly at the end of the parent -- this must be it $childPos = $pos; $$dirInfo{DirLen} = $pos; # the binary data ends at the first child atom last; } if ($size < 8 or $size + $try > $len - 8) { $try = ++$pos; # fail. try next position } else { $try += $size; # could be another atom following this } } # process binary data $$dirInfo{MixedTags} = 1; # ignore non-integer tag ID's $et->ProcessBinaryData($dirInfo, $tagTablePtr); # process child atoms if found if ($childPos) { $$dirInfo{DirStart} = $childPos; $$dirInfo{DirLen} = $len - $childPos; ProcessMOV($et, $dirInfo, $tagTablePtr); } return 1; } #------------------------------------------------------------------------------ # Process iTunes 'righ' atom (ref PH) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessRights($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{Base}; my $dirLen = length $$dataPt; my $unknown = $$et{OPTIONS}{Unkown} || $$et{OPTIONS}{Verbose}; my $pos; $et->VerboseDir('righ', $dirLen / 8); for ($pos = 0; $pos + 8 <= $dirLen; $pos += 8) { my $tag = substr($$dataPt, $pos, 4); last if $tag eq "\0\0\0\0"; my $val = substr($$dataPt, $pos + 4, 4); my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); unless ($tagInfo) { next unless $unknown; my $name = $tag; $name =~ s/([\x00-\x1f\x7f-\xff])/'x'.unpack('H*',$1)/eg; $tagInfo = { Name => "Unknown_$name", Description => "Unknown $name", Unknown => 1, }, AddTagToTable($tagTablePtr, $tag, $tagInfo); } $val = '0x' . unpack('H*', $val) unless $$tagInfo{Format}; $et->HandleTag($tagTablePtr, $tag, $val, DataPt => $dataPt, DataPos => $dataPos, Start => $pos + 4, Size => 4, ); } return 1; } #------------------------------------------------------------------------------ # Process iTunes Encoding Params (ref PH) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessEncodingParams($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirLen = length $$dataPt; my $pos; $et->VerboseDir('Encoding Params', $dirLen / 8); for ($pos = 0; $pos + 8 <= $dirLen; $pos += 8) { my ($tag, $val) = unpack("x${pos}a4N", $$dataPt); $et->HandleTag($tagTablePtr, $tag, $val); } return 1; } #------------------------------------------------------------------------------ # Process Meta keys and add tags to the ItemList table ('mdta' handler) (ref PH) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessKeys($$$) { local $_; my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirLen = length $$dataPt; my $out; if ($et->Options('Verbose')) { $et->VerboseDir('Keys'); $out = $et->Options('TextOut'); } my $pos = 8; my $index = 1; ++$$et{KeyCount}; # increment key count for this directory my $infoTable = GetTagTable('Image::ExifTool::QuickTime::ItemList'); my $userTable = GetTagTable('Image::ExifTool::QuickTime::UserData'); while ($pos < $dirLen - 4) { my $len = unpack("x${pos}N", $$dataPt); last if $len < 8 or $pos + $len > $dirLen; delete $$tagTablePtr{$index}; my $ns = substr($$dataPt, $pos + 4, 4); my $tag = substr($$dataPt, $pos + 8, $len - 8); $tag =~ s/\0.*//s; # truncate at null if ($ns eq 'mdta') { $tag =~ s/^com\.apple\.quicktime\.//; # remove common apple quicktime domain } next unless $tag; # (I have some samples where the tag is a reversed ItemList or UserData tag ID) my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); unless ($tagInfo) { $tagInfo = $et->GetTagInfo($infoTable, $tag); unless ($tagInfo) { $tagInfo = $et->GetTagInfo($userTable, $tag); if (not $tagInfo and $tag =~ /^\w{3}\xa9$/) { $tag = pack('N', unpack('V', $tag)); $tagInfo = $et->GetTagInfo($infoTable, $tag); $tagInfo or $tagInfo = $et->GetTagInfo($userTable, $tag); } } } my ($newInfo, $msg); if ($tagInfo) { $newInfo = { Name => $$tagInfo{Name}, Format => $$tagInfo{Format}, ValueConv => $$tagInfo{ValueConv}, PrintConv => $$tagInfo{PrintConv}, }; my $groups = $$tagInfo{Groups}; $$newInfo{Groups} = { %$groups } if $groups; } elsif ($tag =~ /^[-\w.]+$/) { # create info for tags with reasonable id's my $name = $tag; $name =~ s/\.(.)/\U$1/g; $newInfo = { Name => ucfirst($name) }; $msg = ' (Unknown)'; } # substitute this tag in the ItemList table with the given index my $id = $$et{KeyCount} . '.' . $index; if (ref $$infoTable{$id} eq 'HASH') { # delete other languages too if they exist my $oldInfo = $$infoTable{$id}; if ($$oldInfo{OtherLang}) { delete $$infoTable{$_} foreach @{$$oldInfo{OtherLang}}; } delete $$infoTable{$id}; } if ($newInfo) { $msg or $msg = ''; AddTagToTable($infoTable, $id, $newInfo); $out and print $out "$$et{INDENT}Added ItemList Tag $id = $tag$msg\n"; } $pos += $len; ++$index; } return 1; } #------------------------------------------------------------------------------ # Process a QuickTime atom # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) optional tag table ref # Returns: 1 on success sub ProcessMOV($$;$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $raf = $$dirInfo{RAF}; my $dataPt = $$dirInfo{DataPt}; my $verbose = $et->Options('Verbose'); my $dataPos = $$dirInfo{Base} || 0; my $charsetQuickTime = $et->Options('CharsetQuickTime'); my ($buff, $tag, $size, $track, $isUserData, %triplet, $doDefaultLang); unless (defined $$et{KeyCount}) { $$et{KeyCount} = 0; # initialize ItemList key directory count $doDefaultLang = 1; # flag to generate default language tags } # more convenient to package data as a RandomAccess file $raf or $raf = new File::RandomAccess($dataPt); # skip leading bytes if necessary if ($$dirInfo{DirStart}) { $raf->Seek($$dirInfo{DirStart}, 1) or return 0; $dataPos += $$dirInfo{DirStart}; } # read size/tag name atom header $raf->Read($buff,8) == 8 or return 0; $dataPos += 8; if ($tagTablePtr) { $isUserData = ($tagTablePtr eq \%Image::ExifTool::QuickTime::UserData); } else { $tagTablePtr = GetTagTable('Image::ExifTool::QuickTime::Main'); } ($size, $tag) = unpack('Na4', $buff); if ($dataPt) { $verbose and $et->VerboseDir($$dirInfo{DirName}); } else { # check on file type if called with a RAF $$tagTablePtr{$tag} or return 0; if ($tag eq 'ftyp' and $size >= 12) { # read ftyp atom to see what type of file this is my $fileType; if ($raf->Read($buff, $size-8) == $size-8) { $raf->Seek(-($size-8), 1); my $type = substr($buff, 0, 4); # see if we know the extension for this file type if ($ftypLookup{$type} and $ftypLookup{$type} =~ /\(\.(\w+)/) { $fileType = $1; # check compatible brands } elsif ($buff =~ /^.{8}(.{4})+(mp41|mp42|avc1)/s) { $fileType = 'MP4'; } elsif ($buff =~ /^.{8}(.{4})+(f4v )/s) { $fileType = 'F4V'; } elsif ($buff =~ /^.{8}(.{4})+(qt )/s) { $fileType = 'MOV'; } } $fileType or $fileType = 'MP4'; # default to MP4 $et->SetFileType($fileType, $mimeLookup{$fileType} || 'video/mp4'); } else { $et->SetFileType(); # MOV } SetByteOrder('MM'); $$et{PRIORITY_DIR} = 'XMP'; # have XMP take priority } for (;;) { if ($size < 8) { if ($size == 0) { if ($dataPt) { # a zero size isn't legal for contained atoms, but Canon uses it to # terminate the CNTH atom (eg. CanonEOS100D.mov), so tolerate it here my $pos = $raf->Tell() - 4; $raf->Seek(0,2); my $str = $$dirInfo{DirName} . ' with ' . ($raf->Tell() - $pos) . ' bytes'; $et->VPrint(0,"$$et{INDENT}\[Terminator found in $str remaining]"); } else { $tag = sprintf("0x%.8x",Get32u(\$tag,0)) if $tag =~ /[\x00-\x1f\x7f-\xff]/; $et->VPrint(0,"$$et{INDENT}Tag '$tag' extends to end of file"); } last; } $size == 1 or $et->Warn('Invalid atom size'), last; # read extended atom size $raf->Read($buff, 8) == 8 or last; $dataPos += 8; my ($hi, $lo) = unpack('NN', $buff); if ($hi or $lo > 0x7fffffff) { if ($hi > 0x7fffffff) { $et->Warn('Invalid atom size'); last; } elsif (not $et->Options('LargeFileSupport')) { $et->Warn('End of processing at large atom (LargeFileSupport not enabled)'); last; } } $size = $hi * 4294967296 + $lo - 16; $size < 0 and $et->Warn('Invalid extended size'), last; } else { $size -= 8; } if ($isUserData and $$et{SET_GROUP1}) { my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); # add track name to UserData tags inside tracks $tag = $$et{SET_GROUP1} . $tag; if (not $$tagTablePtr{$tag} and $tagInfo) { my %newInfo = %$tagInfo; foreach ('Name', 'Description') { next unless $$tagInfo{$_}; $newInfo{$_} = $$et{SET_GROUP1} . $$tagInfo{$_}; $newInfo{$_} =~ s/^(Track\d+)Track/$1/; # remove duplicate "Track" in name } AddTagToTable($tagTablePtr, $tag, \%newInfo); } } my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); # allow numerical tag ID's unless ($tagInfo) { my $id = $$et{KeyCount} . '.' . unpack('N', $tag); if ($$tagTablePtr{$id}) { $tagInfo = $et->GetTagInfo($tagTablePtr, $id); $tag = $id; } } # generate tagInfo if Unknown option set if (not defined $tagInfo and ($$et{OPTIONS}{Unknown} or $verbose or $tag =~ /^\xa9/)) { my $name = $tag; my $n = ($name =~ s/([\x00-\x1f\x7f-\xff])/'x'.unpack('H*',$1)/eg); # print in hex if tag is numerical $name = sprintf('0x%.4x',unpack('N',$tag)) if $n > 2; if ($name =~ /^xa9(.*)/) { $tagInfo = { Name => "UserData_$1", Description => "User Data $1", }; } else { $tagInfo = { Name => "Unknown_$name", Description => "Unknown $name", Unknown => 1, Binary => 1, }; } AddTagToTable($tagTablePtr, $tag, $tagInfo); } # save required tag sizes if ($$tagTablePtr{"$tag-size"}) { $et->HandleTag($tagTablePtr, "$tag-size", $size); $et->HandleTag($tagTablePtr, "$tag-offset", $raf->Tell()) if $$tagTablePtr{"$tag-offset"}; } # load values only if associated with a tag (or verbose) and not too big my $ignore; if ($size > 0x2000000) { # start to get worried above 32 MB $ignore = 1; if ($tagInfo and not $$tagInfo{Unknown}) { my $t = $tag; $t =~ s/([\x00-\x1f\x7f-\xff])/'x'.unpack('H*',$1)/eg; if ($size > 0x8000000) { $et->Warn("Skipping '$t' atom > 128 MB", 1); } else { $et->Warn("Skipping '$t' atom > 32 MB", 2) or $ignore = 0; } } } if (defined $tagInfo and not $ignore) { my $val; my $missing = $size - $raf->Read($val, $size); if ($missing) { $et->Warn("Truncated '$tag' data (missing $missing bytes)"); last; } # use value to get tag info if necessary $tagInfo or $tagInfo = $et->GetTagInfo($tagTablePtr, $tag, \$val); my $hasData = ($$dirInfo{HasData} and $val =~ /\0...data\0/s); if ($verbose and not $hasData) { my $tval; if ($tagInfo and $$tagInfo{Format}) { $tval = ReadValue(\$val, 0, $$tagInfo{Format}, $$tagInfo{Count}, length($val)); } $et->VerboseInfo($tag, $tagInfo, Value => $tval, DataPt => \$val, DataPos => $dataPos, Size => $size, Format => $tagInfo ? $$tagInfo{Format} : undef, ); } # handle iTunesInfo mean/name/data triplets if ($tagInfo and $$tagInfo{Triplet}) { if ($tag eq 'data' and $triplet{mean} and $triplet{name}) { $tag = $triplet{name}; # add 'mean' to name unless it is 'com.apple.iTunes' $tag = $triplet{mean} . '/' . $tag unless $triplet{mean} eq 'com.apple.iTunes'; $tagInfo = $et->GetTagInfo($tagTablePtr, $tag, \$val); unless ($tagInfo) { my $name = $triplet{name}; my $desc = $name; $name =~ tr/-_a-zA-Z0-9//dc; $desc =~ tr/_/ /; $tagInfo = { Name => $name, Description => $desc, }; AddTagToTable($tagTablePtr, $tag, $tagInfo); } # ignore 8-byte header $val = substr($val, 8) if length($val) >= 8; unless ($$tagInfo{Format} or $$tagInfo{SubDirectory}) { # extract as binary if it contains any non-ASCII or control characters if ($val =~ /[^\x20-\x7e]/) { my $buff = $val; $val = \$buff; } } undef %triplet; } else { undef %triplet if $tag eq 'mean'; $triplet{$tag} = substr($val,4) if length($val) > 4; undef $tagInfo; # don't store this tag } } if ($tagInfo) { my $subdir = $$tagInfo{SubDirectory}; if ($subdir) { my $start = $$subdir{Start} || 0; my ($base, $dPos) = ($dataPos, 0); if ($$subdir{Base}) { $dPos -= eval $$subdir{Base}; $base -= $dPos; } my %dirInfo = ( DataPt => \$val, DataLen => $size, DirStart => $start, DirLen => $size - $start, DirName => $$subdir{DirName} || $$tagInfo{Name}, HasData => $$subdir{HasData}, Multi => $$subdir{Multi}, IgnoreProp => $$subdir{IgnoreProp}, # (XML hack) DataPos => $dPos, Base => $base, # (needed for IsOffset tags in binary data) ); $dirInfo{BlockInfo} = $tagInfo if $$tagInfo{BlockExtract}; if ($$subdir{ByteOrder} and $$subdir{ByteOrder} =~ /^Little/) { SetByteOrder('II'); } my $oldGroup1 = $$et{SET_GROUP1}; if ($$tagInfo{Name} eq 'Track') { $track or $track = 0; $$et{SET_GROUP1} = 'Track' . (++$track); } my $subTable = GetTagTable($$subdir{TagTable}); my $proc = $$subdir{ProcessProc}; # make ProcessMOV() the default processing procedure for subdirectories $proc = \&ProcessMOV unless $proc or $$subTable{PROCESS_PROC}; $et->ProcessDirectory(\%dirInfo, $subTable, $proc) if $size > $start; $$et{SET_GROUP1} = $oldGroup1; SetByteOrder('MM'); } elsif ($hasData) { # handle atoms containing 'data' tags # (currently ignore contained atoms: 'itif', 'name', etc.) my $pos = 0; for (;;) { last if $pos + 16 > $size; my ($len, $type, $flags, $ctry, $lang) = unpack("x${pos}Na4Nnn", $val); last if $pos + $len > $size; my $value; my $format = $$tagInfo{Format}; if ($type eq 'data' and $len >= 16) { $pos += 16; $len -= 16; $value = substr($val, $pos, $len); # format flags (ref 12): # 0x0=binary, 0x1=UTF-8, 0x2=UTF-16, 0x3=ShiftJIS, # 0x4=UTF-8 0x5=UTF-16, 0xd=JPEG, 0xe=PNG, # 0x15=signed int, 0x16=unsigned int, 0x17=float, # 0x18=double, 0x1b=BMP, 0x1c='meta' atom if ($stringEncoding{$flags}) { # handle all string formats $value = $et->Decode($value, $stringEncoding{$flags}); # (shouldn't be null terminated, but some software writes it anyway) $value =~ s/\0$// unless $$tagInfo{Binary}; } else { if (not $format) { if ($flags == 0x15 or $flags == 0x16) { $format = { 1=>'int8', 2=>'int16', 4=>'int32' }->{$len}; $format .= $flags == 0x15 ? 's' : 'u' if $format; } elsif ($flags == 0x17) { $format = 'float'; } elsif ($flags == 0x18) { $format = 'double'; } elsif ($flags == 0x00) { # read 1 and 2-byte binary as integers if ($len == 1) { $format = 'int8u', } elsif ($len == 2) { $format = 'int16u', } } } if ($format) { $value = ReadValue(\$value, 0, $format, $$tagInfo{Count}, $len); } elsif (not $$tagInfo{ValueConv}) { # make binary data a scalar reference unless a ValueConv exists my $buf = $value; $value = \$buf; } } } my $langInfo; if ($ctry or $lang) { # ignore country ('ctry') and language lists ('lang') for now undef $ctry if $ctry and $ctry <= 255; undef $lang if $lang and $lang <= 255; $lang = UnpackLang($lang); # add country code if specified if ($ctry) { $ctry = unpack('a2',pack('n',$ctry)); # unpack as ISO 3166-1 # treat 'ZZ' like a default country (see ref 12) undef $ctry if $ctry eq 'ZZ'; if ($ctry and $ctry =~ /^[A-Z]{2}$/) { $lang or $lang = 'und'; $lang .= "-$ctry"; } } if ($lang) { # get tagInfo for other language $langInfo = GetLangInfoQT($et, $tagInfo, $lang); # save other language tag ID's so we can delete later if necessary if ($langInfo) { $$tagInfo{OtherLang} or $$tagInfo{OtherLang} = [ ]; push @{$$tagInfo{OtherLang}}, $$langInfo{TagID}; } } } $langInfo or $langInfo = $tagInfo; $et->VerboseInfo($tag, $langInfo, Value => ref $value ? $$value : $value, DataPt => \$val, DataPos => $dataPos, Start => $pos, Size => $len, Format => $format, Extra => sprintf(", Type='$type', Flags=0x%x",$flags) ) if $verbose; $et->FoundTag($langInfo, $value) if defined $value; $pos += $len; } } elsif ($tag =~ /^\xa9/ or $$tagInfo{IText}) { # parse international text to extract all languages my $pos = 0; for (;;) { last if $pos + 4 > $size; my ($len, $lang) = unpack("x${pos}nn", $val); $pos += 4; # according to the QuickTime spec (ref 12), $len should include # 4 bytes for length and type words, but nobody (including # Apple, Pentax and Kodak) seems to add these in, so try # to allow for either if ($pos + $len > $size) { $len -= 4; last if $pos + $len > $size or $len < 0; } # ignore any empty entries (or null padding) after the first next if not $len and $pos; my $str = substr($val, $pos, $len); my $langInfo; if ($lang < 0x400) { # this is a Macintosh language code # a language code of 0 is Macintosh english, so treat as default if ($lang) { # use Font.pm to look up language string require Image::ExifTool::Font; $lang = $Image::ExifTool::Font::ttLang{Macintosh}{$lang}; } # the spec says only "Macintosh text encoding", but # allow this to be configured by the user $str = $et->Decode($str, $charsetQuickTime); } else { # convert language code to ASCII (ignore read-only bit) $lang = UnpackLang($lang); # may be either UTF-8 or UTF-16BE my $enc = $str=~s/^\xfe\xff// ? 'UTF16' : 'UTF8'; $str = $et->Decode($str, $enc); } $langInfo = GetLangInfoQT($et, $tagInfo, $lang) if $lang; $et->FoundTag($langInfo || $tagInfo, $str); $pos += $len; } } else { my $format = $$tagInfo{Format}; if ($format) { $val = ReadValue(\$val, 0, $format, $$tagInfo{Count}, length($val)); } my $oldBase; if ($$tagInfo{SetBase}) { $oldBase = $$et{BASE}; $$et{BASE} = $dataPos; } my $key = $et->FoundTag($tagInfo, $val); $$et{BASE} = $oldBase if defined $oldBase; # decode if necessary (NOTE: must be done after RawConv) if (defined $key and (not $format or $format =~ /^string/) and not $$tagInfo{Unknown} and not $$tagInfo{ValueConv} and not $$tagInfo{Binary} and defined $$et{VALUE}{$key} and not ref $val) { my $vp = \$$et{VALUE}{$key}; if (not ref $$vp and length($$vp) <= 65536 and $$vp =~ /[\x80-\xff]/) { # the encoding of this is not specified, so use CharsetQuickTime # unless the string is valid UTF-8 require Image::ExifTool::XMP; my $enc = Image::ExifTool::XMP::IsUTF8($vp) > 0 ? 'UTF8' : $charsetQuickTime; $$vp = $et->Decode($$vp, $enc); } } } } } else { $et->VerboseInfo($tag, $tagInfo, Size => $size, Extra => sprintf(' at offset 0x%.4x', $raf->Tell()), ) if $verbose; $raf->Seek($size, 1) or $et->Warn("Truncated '$tag' data"), last; } $raf->Read($buff, 8) == 8 or last; $dataPos += $size + 8; ($size, $tag) = unpack('Na4', $buff); } # fill in missing defaults for alternate language tags # (the first language is taken as the default) if ($doDefaultLang and $$et{QTLang}) { foreach $tag (@{$$et{QTLang}}) { next unless defined $$et{VALUE}{$tag}; my $langInfo = $$et{TAG_INFO}{$tag} or next; my $tagInfo = $$langInfo{SrcTagInfo} or next; next if defined $$et{VALUE}{$$tagInfo{Name}}; $et->FoundTag($tagInfo, $$et{VALUE}{$tag}); } delete $$et{QTLang}; } return 1; } #------------------------------------------------------------------------------ # Process a QuickTime Image File # Inputs: 0) ExifTool object reference, 1) directory information reference # Returns: 1 on success sub ProcessQTIF($$) { my ($et, $dirInfo) = @_; my $table = GetTagTable('Image::ExifTool::QuickTime::ImageFile'); return ProcessMOV($et, $dirInfo, $table); } 1; # end __END__ =head1 NAME Image::ExifTool::QuickTime - Read QuickTime and MP4 meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to extract information from QuickTime and MP4 video, and M4A audio files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html> =item L<http://search.cpan.org/dist/MP4-Info-1.04/> =item L<http://www.geocities.com/xhelmboyx/quicktime/formats/mp4-layout.txt> =item L<http://wiki.multimedia.cx/index.php?title=Apple_QuickTime> =item L<http://atomicparsley.sourceforge.net/mpeg-4files.html> =item L<http://wiki.multimedia.cx/index.php?title=QuickTime_container> =item L<http://code.google.com/p/mp4v2/wiki/iTunesMetadata> =item L<http://www.canieti.com.mx/assets/files/1011/IEC_100_1384_DC.pdf> =item L<http://www.adobe.com/devnet/flv/pdf/video_file_format_spec_v10.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/QuickTime Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Radiance.pm�������������������������������������������������000644 �000765 �000024 �00000010603 12642461334 021755� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Radiance.pm # # Description: Read Radiance RGBE HDR meta information # # Revisions: 2011/12/10 - P. Harvey Created # # References: 1) http://www.graphics.cornell.edu/online/formats/rgbe/ # 2) http://radsite.lbl.gov/radiance/refer/filefmts.pdf #------------------------------------------------------------------------------ package Image::ExifTool::Radiance; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.01'; # Radiance tags %Image::ExifTool::Radiance::Main = ( GROUPS => { 2 => 'Image' }, NOTES => q{ Information extracted from Radiance RGBE HDR images. Tag ID's are all uppercase as stored in the file, but converted to lowercase by when extracting to avoid conflicts with internal ExifTool variables. See L<http://radsite.lbl.gov/radiance/refer/filefmts.pdf> and L<http://www.graphics.cornell.edu/online/formats/rgbe/> for the specification. }, _orient => { Name => 'Orientation', PrintConv => { '-Y +X' => 'Horizontal (normal)', '-Y -X' => 'Mirror horizontal', '+Y -X' => 'Rotate 180', '+Y +X' => 'Mirror vertical', '+X -Y' => 'Mirror horizontal and rotate 270 CW', '+X +Y' => 'Rotate 90 CW', '-X +Y' => 'Mirror horizontal and rotate 90 CW', '-X -Y' => 'Rotate 270 CW', }, }, _command => 'Command', software => 'Software', view => 'View', 'format' => 'Format', # <-- this is the one that caused the conflict when uppercase exposure => { Name => 'Exposure', Notes => 'divide pixel values by this to get watts/steradian/meter^2', }, gamma => 'Gamma', colorcorr => 'ColorCorrection', pixaspect => 'PixelAspectRatio', primaries => 'ColorPrimaries', ); #------------------------------------------------------------------------------ # Extract information from a Radiance HDR file # Inputs: 0) ExifTool object reference, 1) DirInfo reference # Returns: 1 on success, 0 if this wasn't a valid RGBE image sub ProcessHDR($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $buff; local $/ = "\x0a"; # set newline character for reading # verify this is a valid RIFF file return 0 unless $raf->ReadLine($buff) and $buff =~ /^#\?(RADIANCE|RGBE)\x0a/s; $et->SetFileType(); my $tagTablePtr = GetTagTable('Image::ExifTool::Radiance::Main'); while ($raf->ReadLine($buff)) { chomp $buff; last unless length($buff) > 0 and length($buff) < 4096; unless ($buff =~ /^(.*)?\s*=\s*(.*)/) { $et->HandleTag($tagTablePtr, '_command', $buff); next; } # use lower-case tag names to avoid conflicts with reserved tag table entries my ($tag, $val) = (lc $1, $2); my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); unless ($tagInfo) { my $name = $tag; $name =~ tr/-_a-zA-Z0-9//dc; next unless length($name) > 1; $name = ucfirst $name; $tagInfo = { Name => $name }; AddTagToTable($tagTablePtr, $tag, $tagInfo); } $et->FoundTag($tagInfo, $val); } # get image dimensions if ($raf->ReadLine($buff) and $buff =~ /([-+][XY])\s*(\d+)\s*([-+][XY])\s*(\d+)/) { $et->HandleTag($tagTablePtr, '_orient', "$1 $3"); $et->FoundTag('ImageHeight', $2); $et->FoundTag('ImageWidth', $4); } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::Radiance - Read Radiance RGBE HDR meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from Radiance RGBE images. RGBE (Red Green Blue Exponent) images are a type of high dynamic-range image. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://radsite.lbl.gov/radiance/refer/filefmts.pdf> =item L<http://www.graphics.cornell.edu/online/formats/rgbe/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Radiance Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Rawzor.pm���������������������������������������������������000644 �000765 �000024 �00000014213 12642461334 021534� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Rawzor.pm # # Description: Read meta information from Rawzor compressed images # # Revisions: 09/09/2008 - P. Harvey Created # # References: 1) http://www.rawzor.com/ #------------------------------------------------------------------------------ package Image::ExifTool::Rawzor; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.04'; # currently support this version Rawzor images my $implementedRawzorVersion = 199; # (up to version 1.99) # Rawzor-specific tags %Image::ExifTool::Rawzor::Main = ( GROUPS => { 2 => 'Other' }, VARS => { NO_ID => 1 }, NOTES => q{ Rawzor files store compressed images of other formats. As well as the information listed below, exiftool uncompresses and extracts the meta information from the original image. }, OriginalFileType => { }, OriginalFileSize => { PrintConv => $Image::ExifTool::Extra{FileSize}->{PrintConv}, }, RawzorRequiredVersion => { ValueConv => '$val / 100', PrintConv => 'sprintf("%.2f", $val)', }, RawzorCreatorVersion => { ValueConv => '$val / 100', PrintConv => 'sprintf("%.2f", $val)', }, # compression factor is originalSize/compressedSize (and compression # ratio is the inverse - ref "Data Compression" by David Salomon) CompressionFactor => { PrintConv => 'sprintf("%.2f", $val)' }, ); #------------------------------------------------------------------------------ # Extract information from a Rawzor file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid Rawzor file sub ProcessRWZ($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $buf2); # read the Rawzor file header: # 0 string - "rawzor" signature # 6 int16u - Required SDK version # 8 int16u - Creator SDK version # 10 int64u - RWZ file size # 18 int64u - original raw file size # 26 undef[12] - reserved # 38 int64u - metadata offset $raf->Read($buff, 46) == 46 and $buff =~ /^rawzor/ or return 0; SetByteOrder('II'); my $reqVers = Get16u(\$buff, 6); my $creatorVers = Get16u(\$buff, 8); my $rwzSize = Get64u(\$buff, 10); my $origSize = Get64u(\$buff, 18); my $tagTablePtr = GetTagTable('Image::ExifTool::Rawzor::Main'); $et->HandleTag($tagTablePtr, RawzorRequiredVersion => $reqVers); $et->HandleTag($tagTablePtr, RawzorCreatorVersion => $creatorVers); $et->HandleTag($tagTablePtr, OriginalFileSize => $origSize); $et->HandleTag($tagTablePtr, CompressionFactor => $origSize/$rwzSize) if $rwzSize; # check version numbers if ($reqVers > $implementedRawzorVersion) { $et->Warn("Version $reqVers Rawzor images not yet supported"); return 1; } my $metaOffset = Get64u(\$buff, 38); if ($metaOffset > 0x7fffffff) { $et->Warn('Bad metadata offset'); return 1; } # check for the ability to uncompress the information unless (eval { require IO::Uncompress::Bunzip2 }) { $et->Warn('Install IO::Compress::Bzip2 to decode Rawzor bzip2 compression'); return 1; } # read the metadata header: # 0 int64u - metadata section 0 end (offset in original file) # 8 int64u - metadata section 1 start # 16 int64u - metadata section 1 end # 24 int64u - metadata section 2 start # 32 undef[4] - reserved # 36 int32u - original metadata size # 40 int32u - compressed metadata size unless ($raf->Seek($metaOffset, 0) and $raf->Read($buff, 44) == 44) { $et->Warn('Error reading metadata header'); return 1; } my $metaSize = Get32u(\$buff, 36); if ($metaSize) { # validate the metadata header and read the compressed metadata my $end0 = Get64u(\$buff, 0); my $pos1 = Get64u(\$buff, 8); my $end1 = Get64u(\$buff, 16); my $pos2 = Get64u(\$buff, 24); my $len = Get32u(\$buff, 40); unless ($raf->Read($buff, $len) == $len and $end0 + ($end1 - $pos1) + ($origSize - $pos2) == $metaSize and $end0 <= $pos1 and $pos1 <= $end1 and $end1 <= $pos2) { $et->Warn('Error reading image metadata'); return 1; } # uncompress the metadata unless (IO::Uncompress::Bunzip2::bunzip2(\$buff, \$buf2) and length($buf2) eq $metaSize) { $et->Warn('Error uncompressing image metadata'); return 1; } # re-assemble the original file (sans image data) undef $buff; # (can't hurt to free memory as soon as possible) $buff = substr($buf2, 0, $end0) . ("\0" x ($pos1 - $end0)) . substr($buf2, $end0, $end1 - $pos1) . ("\0" x ($pos2 - $end1)) . substr($buf2, $end0 + $end1 - $pos1, $origSize - $pos2); undef $buf2; # extract original information by calling ExtractInfo recursively $et->ExtractInfo(\$buff, { ReEntry => 1 }); undef $buff; } # set OriginalFileType from FileType of original file # then change FileType and MIMEType to indicate a Rawzor image my $origFileType = $$et{VALUE}{FileType}; if ($origFileType) { $et->HandleTag($tagTablePtr, OriginalFileType => $origFileType); $et->OverrideFileType('RWZ'); } else { $et->HandleTag($tagTablePtr, OriginalFileType => 'Unknown'); $et->SetFileType(); } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::Rawzor - Read meta information from Rawzor compressed images =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from Rawzor compressed images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.rawzor.com/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Rawzor Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/README������������������������������������������������������000644 �000765 �000024 �00000163460 12634527537 020614� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������-------------------------------------------------------------------------------- File: Image/ExifTool/README Description: ExifTool support modules documentation The ExifTool support modules are loaded by ExifTool to allow processing of various meta information formats. The tables in these files are used as lookups based on the tag ID values. The hash keys are the tag IDs (in decimal or hexadecimal if the ID is numerical as with EXIF tables, or the tag name if the ID is ASCII as with XMP tables). In the case of a BinaryData table, the IDs are numerical and specify offsets into the binary data block (floating point IDs allow multiple tags for the same offset, with the integer part being used for the offset). The corresponding hash value provides information about the tag (explained later). Twenty-five special keys (TABLE_NAME, SHORT_NAME, PROCESS_PROC, WRITE_PROC, CHECK_PROC, GROUPS, FORMAT, FIRST_ENTRY, TAG_PREFIX, PRINT_CONV, WRITABLE, TABLE_DESC, NOTES, IS_OFFSET, IS_SUBDIR, EXTRACT_UNKNOWN, NAMESPACE, PREFERRED, SRC_TABLE, PRIORITY, WRITE_GROUP, LANG_INFO, VARS, DATAMEMBER and SET_GROUP1) are used to provide additional information about a table. The special keys have names that are all capitalized to avoid possible conflicts with tag keys. Below is an explanation of the meaning of each special key: TABLE_NAME : Name of this table (set by GetTagTable()). SHORT_NAME : Table name with leading "Image::ExifTool::" removed. PROCESS_PROC : Reference to a function used to process the directory for this table. If PROCESS_PROC is not given, \&Image::ExifTool::Exif::ProcessExif is assumed (except for QuickTime atoms for which \&Image::ExifTool::QuickTime::ProcessMOV is the default). If PROCESS_PROC is set to 0, the tags are not added to the lookup. The process proc returns 1 on success or 0 on failure, and takes 3 arguments: 0) reference to the ExifTool object, 1) reference to a directory information hash (with the following entries:), 2) reference to the tag table hash. Name - Tag name for this SubDirectory entry (for verbose messages) Base - Base offset for pointers from start of file DataPt - Reference to data block containing directory (may be undef) DataPos - Position of data block within file (relative to Base) DataLen - Length of data block in bytes DirStart - Offset to start of directory from start of data block DirLen - Length of directory data within block DirName - Name of this directory OutFile - Output file or scalar reference Parent - Name of parent directory RAF - Reference to File::RandomAccess object if available NewDataPos - File position of new data (write proc only) Fixup - Reference to hash of offset fixups (used in EXIF writing only) FixBase - Flag set to attempt to fix base offsets FixOffsets - Evaluated for each value pointer to patch maker note offsets LastIFD - Used by WriteExif() to return offset of last IFD written ImageData - Used by WriteExif() to avoid buffering large image data blocks WRITE_PROC : Reference to a function to write all new tags for this directory. The write proc returns the new directory data or undefined on error. It takes the same arguments as the process proc above except that the second argument (reference to directory information hash) is optional, and if specified gives information about the source directory for tags to be copied to the output. CHECK_PROC : Reference to a function which validates Raw values for writing. The function takes three arguments: 0) ExifTool object reference, 1) tagInfo reference, 2) value reference, and returns undefined (and possibly modifies the input value) if successful, or an error message if there was a format problem. May set ExifTool CHECK_WARN datamember for success with a warning. GROUPS : A hash lookup for the default group names for all entries in this table. If not specified, the Group 0 and 1 names will be set automatically according to the name of the module. FORMAT : Specifies the default tag Format, and corresponding pointer increment for entries in a BinaryData table. Defaults to 'int8u' if not specified. The possible values of FORMAT are: int8s - Signed 8-bit integer (EXIF 'SBYTE') int8u - Unsigned 8-bit integer (EXIF 'BYTE') int16s - Signed 16-bit integer (EXIF 'SSHORT') int16u - Unsigned 16-bit integer (EXIF 'SHORT') int16uRev - Unsigned 16-bit integer, reversed byte order int32s - Signed 32-bit integer (EXIF 'SLONG') int32u - Unsigned 32-bit integer (EXIF 'LONG') int64s - Signed 64-bit integer (BigTIFF 'SLONG8') int64u - Unsigned 64-bit integer (BigTIFF 'LONG8') rational32s - Rational consisting of 2 int16s values rational32u - Rational consisting of 2 int16u values rational64s - Rational consisting of 2 int32s values (EXIF 'SRATIONAL') rational64u - Rational consisting of 2 int32u values (EXIF 'RATIONAL') fixed16s - Signed 16-bit fixed point value fixed16u - Unsigned 16-bit fixed point value fixed32s - Signed 32-bit fixed point value fixed32u - Unsigned 32-bit fixed point value float - 32-bit IEEE floating point value (EXIF 'FLOAT') double - 64-bit IEEE floating point value (EXIF 'DOUBLE') extended - 80-bit extended floating float ifd - Unsigned 32-bit integer sub-IFD pointer (EXIF 'IFD') ifd64 - Unsigned 64-bit integer sub-IFD pointer (BigTIFF 'IFD8') string - Series of 8-bit ASCII characters (EXIF 'ASCII') undef - Undefined-format binary data (EXIF 'UNDEFINED') binary - Binary data (same as 'undef') Additionally, the following variable-length Format types may be used in individual tag information hashes of a BinaryData table. The 'var_' formats cause subsequent tag indices to be incremented according to the size of the data, not including the terminator. See "Format" below for more details. pstring - Pascal string var_string - variable-length null-terminated ASCII string var_ustring - variable-length null-terminated UCS-2 string var_pstring - variable-length Pascal string var_pstr32 - variable-length Pascal string /w 32-bit len var_int16u - variable-length undef data with int6u count FIRST_ENTRY : Specifies the index for the first tag entry in a binary table. This value is only used if the Unknown option is set to 2 or higher, and allows the binary data to be scanned for unknown tag entries. TAG_PREFIX : Prefix for names of unknown tags. PRINT_CONV : Default print conversion for tags where PrintConv isn't specified. PrintConv may be set to undef for individual tags to disable print conversion when PRINT_CONV is defined for a table. WRITABLE : Indicates that all tags in this table are writable. This is the same as setting the Writable flag for each individual tag in the table, except for SubDirectory tags which are not made Writable. TABLE_DESC : Short description for this table. Plain text only. Used only for XML tag database output. NOTES : Notes to introduce the table in the TagNames documentation. Pod formatting codes B<> and C<> may be used in this text. IS_OFFSET : Reference to list of sorted TagID's representing offsets for writable binary data tables only. Not used for EXIF tables. IS_SUBDIR : BinaryData tables only. A reference to a list of sorted tag ID's representing subdirectories. Required for writable subdirectories only. EXTRACT_UNKNOWN : Used in PDF tables to specify a directory where all unknown tags should be extracted. Set to 0 to extract only unknown numbered tags for which the unnumbered tag is known. NAMESPACE : Namespace prefix for tags in the XMP table. If this isn't a standard namespace defined in %Image::ExifTool::XMP::nsURI, then the URI must be defined as well (however, this is not recommended for pre-defined namespaces because then non-standard namespace prefixes won't be recognized). To define the URI, the NAMESPACE value is a reference to a hash where the key is the namespace prefix and and the value is the URI (alternatively, a reference to a 2-element array containing the prefix and URI is also allowed for backward compatibility). The NAMESAPCE value may be undef for XMP tables where tags have variable namespaces (in this case each tag must have a Namespace entry). PREFERRED : Set to true if the tags in this table should always be added when writing information. Overrides the order specified by SetNewGroups(). When this feature is used, it may also be desireable to specify a preferred group when calling InitWriteDirs() to write these tags; this avoids creating other directories for tags which are already being creating in the preferred group. SRC_TABLE : Used internally to store the source table name of a user-defined tag table so the appropriate module can be loaded as required. PRIORITY : Default Priority for all tags in this table. WRITE_GROUP : Default WriteGroup for all tags in the table. LANG_INFO : Code reference to a routine which returns a reference to a language-specific tag information hash. The routine takes two arguments: a reference to the non-specific tagInfo hash, and the language code. Used only in tables with writable tags which support tag name language extensions (eg. MIE and XMP). VARS : Hash used to store additional parameters. Individual modules may use this to store any parameters they want. The following additional parameters have been defined, and may be used by any module: ID_LABEL Label to use instead of "Tag ID" for column heading in tag name documentation. When this is set, numerical TagID's are not converted to hexadecimal notation. Unless otherwise set, an ID_LABEL of "Index" is assumed for tables which use ProcessBinaryData. NO_ID Avoid printing "Tag ID" column in tag name documentation. HEX_ID Print tag ID in hexadecimal (with 4 hex digits or more). NO_LOOKUP Do not add tags to TagLookup.pm lookup tables. CAPTURE Used by PDF module to name dictionaries to capture when writing. MINOR_ERRORS [EXIF tables only] Flag to make errors in this IFD minor, or to downgrade already minor errors to warnings while writing. (Errors in MakerNote IFD's are already classified as minor.) Note that for certain types errors, the response is to delete the entire IFD from the image. NUMBERS_LAST Sort numerical tags after character tags in documentation. LONG_TAGS Suppress "Long tags" warning when generating documentation. Value is the number of long tag names to expect. SORT_PROC Reference to sort procedure for sorting tag ID's in the documentation. Takes two arguments and returns -1, 0 or 1 if the first argument is less than, equal to, or greater than the second argument. ENTRY_SIZE Used by ProcessPhaseOne to specify size of IFD entry DATAMEMBER : BinaryData tables only. A reference to a list of sorted tag ID's which must be extracted as data members when writing. Must also list "var_" format tags and tags with Hook so offsets are properly calculated if the table is writable. SET_GROUP1 : [EXIF tables only] Flag to set group1 name to the directory name for all tags in the table. The remaining entries in a tag table are the tag IDs with their associated information. The information may exist in one of three forms: 1) A simple scalar which is the name of the tag, 2) A reference to a hash of information describing this tag, or 3) a reference to a list of hashes which contain Condition expressions allowing the appropriate hash to be selected to suit the conditions. The following is a description of possible hash entries. All entries are optional, except for the tag Name which is required if the tag ID is numerical. Name : The tag name. Tag names need not be unique. If they aren't unique, then duplicate tags will hide the values of previous tags when extracting information unless the Duplicates option is set or the new tag has lower Priority. With Duplicates set, to allow multiple tags with the same name to exist in the tag information hash, the key of the previous tag is changed to the form "TagName (N)", where N starts at 1 and increments for subsequent duplicate tags. A tag name should start with an uppercase letter, and contain only the characters in the set [A-Za-z0-9_-]. If not given, the Name is taken from the tag ID with the first character changed to upper case. Description : A more readable description of tag name. If a tag doesn't specify a Description, then the tag Name is used instead, with spaces inserted between the words. Notes : Notes for this tag in the HTML TagNames documentation. Groups : Hash lookup for group names for this tag. Format : Only valid for BinaryData, EXIF and IPTC tables. For a Binary or EXIF table, this gives the format that is used to convert the binary data, and is one of the FORMAT types specified above. If not specified, the Format of an EXIF entry is taken from the EXIF information, and the Format of a BinaryData entry is taken from the FORMAT specified for the table (or int8u if FORMAT is not specified). Must be specified for Writable tags where the value must be converted for a Condition. For BinaryData tables, the format may have a size in trailing brackets which is a Perl expression to be evaluated. The expression may access any of the previous table entries through a %val hash (read-only tags), the data size via $size, or the ExifTool object via $self. For example, 'string[$val{3}]' defines a string with length given by the table entry with tag index '3'. An initial "var_" may be added to the Format name of any BinaryData tag with a size in brackets. In this case, subsequent offsets are adjusted by the value length minus the size of the default table FORMAT (eg. "var_int16u[10]" causes subsequent offsets to be incremented by sizeof(int16u) * 10 - sizeof(int8u) if the default table FORMAT is "int8u"). Note that all "var_" Format tags (as well as tags with values used within "var_" Format expressions) must have corresponding DATAMEMBER entries. Count : Used when writing EXIF information to specify the number values to write, or the number of characters in a fixed-length string. A value of -1 indicates that the count is variable and should be determined by the number of values provided. Defaults to 1 if not specified for non-string formats. Note that this count corresponds to the specified Format, so if a different-sized Writable format is defined, the actual count written to the file will be different. FixCount : Flag set to determine correct count from offsets in IFD. This is necessary for some Kodak tags which write an incorrect Count value. Flags : Flags to specify characteristics for this tag. May be a simple scalar flag name, a reference to a list of flag names, or a reference to a hash of flag/value pairs. If not a hash reference, the flag value is set to 1. Flags are expanded for faster access at run time into members of the tagInfo hash, and may be written directly as members if desired. The available flag names are: 'AutoSplit' - [List tags only] Similar to ListSplit option, but applied automatically to individual tags. Value specifies pattern for split, or 1 for default pattern ',?\\s+'. 'Avoid' - avoid creating this tag if possible. This is only effective if another tag exists with the same name. Setting this flag also sets the default Priority to 0 for this tag. 'Binary' - set to 1 for binary data. This has the same effect as setting ValueConv to '\$val', but it it a bit cleaner and avoids dummy ValueConvInv entries for writable tags. Has no effect if ValueConv is defined for the tag. Some values may be treated as binary data even if this flag is not set. 'BlockExtract' - set for writable directories in EXIF information which are extracted by default. Otherwise writable directories are only extracted as a block if specified explicitly. Also used for Jpeg2000 and QuickTime XMP-like tags to extract as a block with a name other than 'XMP'. 'ConvertBinary' - true to apply ValueConv and/or PrintConv to Binary values (ie. SCALAR references). (By default, these conversions are not done for Binary values.) 'DataMember' - name of exiftool data member associated with this tag if it should be stored as a special data member when writing information. Necessary only if the value of the tag affects other written information. Currently only used for tags in EXIF tables where it triggers the execution of the RawConv to convert and store the value as an ExifTool data member when writing. 'DataTag' - associated tag name containing data for offset or byte count tags. 'Drop' - set to 1 for tags that should be excluded when rebuilding maker notes when copying all tags. Set to a number larger than 1 to drop only if data is larger than this size. Works for SubDirectory tags too. 'EntryBased' - set to 1 if the offset for this value is based on the IFD entry position. This allows individual values to be entry-based even though some others aren't (as with the Casio PrintIM information). 'Flat' - [flattened XMP structure tags only] must be set for all pre-defined flattened tags (including user-defined flattened tags). This flag is reset to 0 internally after all associated flattened tags in the structure have been generated. 'Flattened' - [reserved] used internally to mark Struct tags which have been processed to generate flattened equivalents. 'GotGroups' - [reserved] flag used internally to indicate that the Groups hash has been initialized for this tag. 'Hidden' - set to hide tag from the TagName documentation. Also suppresses verbose output of a BinaryData tag. 'IsOffset' - flag set if the tag represents an offset to some data, and causes value will be adjusted to an absolute file offset. If set to 2, the offset base of the parent directory is used even if the base changes for the current directory (only some maker notes are this messed up). Set to 3 if absolute file offsets are used. May be set to an expression to be evaluated. Expression may access $val and $et, and is evaluated only when reading. 'List' - flag indicating that duplicate entries of this tag are allowed, and will be accumulated in a list. Note that for XMP information, 3 different types of lists are supported and the List value specifies the type: 'Bag', 'Seq' or 'Alt'. As well, a value of '1' is used internally in XMP to allow list behaviour for a flattened tag which is itself not a list element (eg. a member of list of structures). Note that in ExifTool an XMP lang-alt tag (Writable="lang-alt") is NOT a list-type tag (unless it is a list of lang-alt lists, which is uncommon). 'MakerNotes' - set if this tag is maker note data. 'MakerPreview' - set in the PreviewImageStart tag information if the preview must be stored inside the maker notes. 'Mandatory' - set for mandatory tags. Used only by TagInfoXML and documentation purposes. Mandatory tags may be added automatically by ExifTool. 'NestedHtmlDump' - flag set if value for this tag is also dumped when processing the SubDirectory. This flag is implied if the MakerNotes flag is set. Set to 2 if the dump should only be underlined if nested inside other maker notes. 'NotIFD' - set for 'MakerNotes' SubDirectory tags only if the SubDirectory is not EXIF IFD format. (Note: All SubDirectory tags in the MakerNotes table are 'MakerNotes' type by default.) 'OffsetPair' - set if the tag represents half of an offset/ byte count pair. Data for these tags must be handled separately. Value is the tagID for the paired tag. 'Permanent' - flag indicates that a tag is permanent, and can't be added or deleted from the file, although a new value may be written if the tag already exists. By default, all MakerNotes tags are permanent unless otherwise specified. 'PrintHex' - specifies that unknown PrintConv values should be printed in hex (eg. 'Unknown (0x01)'). Also causes numerical tag values to be printed in hex in the HTML tag name documentation. 'PrintString' - flag set to force PrintConv values to be printed as strings in the documentation. 'Priority' - gives the priority of this tag while reading. If set to zero, this tag will not override the value of previous tags with the same name. If the priority is greater than zero, this tag won't be overridden by subsequent tags unless their priority is equal to or greater than this priority. A special feature is that Priority 0 tags are automatically incremented to Priority 1 if they exist in the IFD of the full resolution image (as determined by SubfileType). If not defined, the priority defaults to 1 for all tags except except tags in IFD1 of JPEG images which default to priority 0. 'Protected' - bit mask to protect tags from writing: Bit 0x01 indicates an 'unsafe' tag, which is not set via SetNewValuesFromFile() unless specified explicitly. Bit 0x02 indicates a 'protected' tag, which should not be set directly by the user. 'PutFirst' - [EXIF only] flag to place this value before IFD0 when writing (ie. immediately after TIFF header). Only used for main IFD's (IFD0, IFD1, etc) and IFD's where SubIFD flag is set to 2 (currently only ExifIFD). 'RawJoin' - [List tags only] Joins raw List-type tag values into a single string with a space separator, allowing ValueConv and PrintConv to act on the concatenated string so the tag does not exhibit list-type behaviour. When writing, the inverse is performed and the value is split at whitespace. 'Resource' - [XMP only] flag to write value as an rdf:resource in an empty element instead of as a normal string. 'SeparateTable' - set to list PrintConv values in a separate table in the HTML documentation. Value is 1 for a table name of 'Module TagName', or 'TAG' for 'Module TAG', or 'MODULE TAG' to fully specify the table name. The table may have a 'Notes' entry for a description of the table. 'SetResourceName' - [Photoshop tags only] set to 1 to append resource name to the extracted value (eg. 'VALUE/#NAME#/'). Also allows resource name to be appended when writing new values. May be set to any value other than 1 for a default resource name to use when writing if an appended name is not provided. 'StructType' - [reserved] used internally by XMP writer for flattened structure tags as a flag to indicate that one or more enclosing structures has a TYPE field. 'SubDoc' - [Composite tags only] set to cause this Composite tag to also be generated for each sub-document. To achieve this, 'Main:' and 'Doc#:' prefixes are added to all Require'd and Desire'd tag names which don't already start with 'Main:' or 'Doc#:', and the Composite tag is built once for each of the main document and all sub-documents. 'SubIFD' - used in writing to determine that the tag specifies an offset to a sub-IFD. When this flag is set, the Group1 name gives the name of the IFD. Must be set if and only if the tag has a SubDirectory Start that references '$val' (this is validated by BuildTagLookup). Set to 2 for standard EXIF SubIFD's where the PutFirst flag is valid. 'Unknown' - this is an unknown tag (only extracted when the Unknown option is set). 'WrongBase' - ['IsOffset' tags only] An expression using $self that is evaluated to generate a base shift for 'IsOffset' tags which use a different base than the rest of the tags. RawConv : Used to convert the Raw value at extraction time (while the image file is still open, unlike ValueConv and PrintConv below which are done later only if the value is requested). May be a scalar expression using $val (the Raw tag value), $self (the current ExifTool object), $tag (the tag key), $tagInfo (reference to the tag information hash), and $priority (to dyanmically set the priority of a tag), or a code reference with $val and $self as arguments. For Composite tags, $val is a reference to a hash of source ("derived from") tag names, and @val may be used to access the Raw values of these tags. The returned value may be a scalar which is used as the new Raw value, a scalar reference to a binary data value, a hash reference for Composite tags, an ARRAY reference for a list of values, or undefined to indicate that the tag should be ignored. If RawConv is specified for a Composite tag, then ValueConv and PrintConv evals will no longer have access to the source @val and @prt values unless the input $val is returned. RawConv may generate Warning or Error tags, while ValueConv and PrintConv should not (see ValueConv note below). Note: RawConv should only be used if necessary (in general, only if the conversion may return undef to ignore the tag, or if a Warning may be issued) because ValueConv is more efficient since it is only executed if the tag value is requested, while RawConv is executed for all extracted tags. ValueConv : Used to convert the Raw value to a useable form. May be a hash reference to act as a lookup table, a scalar which is evaluated as a Perl expression, a code reference to a subroutine, or an ARRAY reference (in which case the value is split at whitespace into a list of items and each item is converted by the associated entry in the ValueConv list). If a hash reference is used and the Raw value doesn't appear as one of the keys, then the converted value is set to "Unknown (X)", where X is the Raw value (unless either of the special keys exist: 'BITMASK', a reference to a hash used to decode individual value bits; or 'OTHER', a reference to a subroutine used to convert unknown values. The OTHER subroutine takes 3 arguments: the value, a flag which is set for the inverse conversion, and a reference to the PrintConv hash, and returns the converted value or undef on error. The lookup hash may also contain a 'Notes' entry which is used for documentation if the SeparateTable flag is set). In an expression, $self is a reference to the current ExifTool object, $val is the Raw value, and $tag is the tag key. The subroutine takes 2 arguments: the Raw value and a reference to the current ExifTool object. The expression or subroutine is evaluated when and if the tag value is requested (ie. only after all extraction is complete), so if necessary at this time the values of all other tags are available via calls to $self->GetValue("Tag","Raw"). (Note: In theory, types other than "Raw" may be accessed, but they are slower and may lead to cyclical dependencies so they should be avoided). When evaluated, the expression or subroutine returns a scalar for the converted value, a SCALAR reference to a binary data value (see the 'Binary' flag), or an ARRAY reference for a list of values. The return value should always be defined -- use RawConv instead to return undef if it is necessary to test the value for validity, otherwise an undef tag may hide a previously defined value when the Duplicates option is not enabled. If this isn't possible (as with Composite tags where the converted values of the source tags are needed), set the Priority to 0 to avoid taking priority over a valid tag. If ValueConv is not specified, the Raw value is not converted. Composite tags which Require or Desire other tags may access the ValueConv, PrintConv and Raw values of these tags through the elements of the @val, @prt and @raw lists respectively (only if there was no RawConv or it returned a hash reference). For these tags, $val may be used in an expression to represent $val[0], and the first argument passed for a code reference is a reference to @val. Note: Warnings issued by these conversions are intercepted by ExifTool and saved as Warning tags, but since ValueConv and PrintConv conversions are done on demand, the warnings may be generated after the list of extracted tags is returned, so may easily be missed. PrintConv : This entry is similar to ValueConv above, except that it is used to further convert the tag value to a human readable form. It can be either a hash lookup, a scalar Perl expression, a code reference or a list reference. In this expression, $self, $val and $tag may be used as with ValueConv, but if ValueConv was defined then $val is the ValueConv value instead of the Raw value. The returned value should always be defined. Note that the print conversion is only done if the PrintConv option is enabled (which it is by default), and if the result of the ValueConv is not a scalar reference. If it is a list reference, then the converted values are joined by '; ' in the output string. RawConvInv : The inverse of RawConv. This should only be used in very rare situations when the raw value can not be predetermined. Unlike the other inverse conversions which are applied in SetNewValue(), this conversion is applied in WriteInfo() as the file is being written. This is important because it means that FILE_TYPE and any DataMember tags ocurring before this tag in the file are available. Beware that if the return value is not defined, the tag will be deleted unless there is specific logic to avoid this (currently, only EXIF and Binary data directories handle this case). ValueConvInv : The inverse of ValueConv. Only necessary for Writable tags when ValueConv is specified (except WriteAlso tags). Note that DataMember tags may NOT be used in the inverse conversions because these conversions are done before the input file is parsed. Instead, a Condition or RawConvInv must be used. May return undef on conversion error and call warn() to issue a warning. If warn() is not called, a generic warning is generated when undef is returned. An empty warning ("\n") may be issued to suppress warning messages when undef is returned. If a scalar, the expression may use the variables $val, $self and $wantGroup. If a code ref, the routine is passed 2 arguments: $val and $self. Note that this conversion is not applied for deleted tags (ie. $val is undef). PrintConvInv : The inverse of PrintConv. Only necessary if for Writable tags when PrintConv is specified (unless WriteAlso is used). See ValueConvInv above for more details. PrintConvColumns : Number of columns for PrintConv lookup in HTML docs. If not set, the number of columns is determined automatically according to the maximum width of the entries. DelValue : Raw value to be used when deleting a permanent tag. (Note all MakerNotes tags are permanent.) If not specified, an attempt is made to convert an empty string for the raw value. Relist : [Only if ValueConv or PrintConv is a list ref] Reference to a list of original value indices used to reorganize values. Each entry in the list may be a scalar index, or a reference to a list of indices to join values. (Currently values may be joined, but the order of writable values must not be changed until this ability is added to the writer.) Mask : [BinaryData tags only] Bitmask for this value. (Multiple tags may have the same index by using floating point indices. An unknown tag will only be generated for a certain TagID if there is no integral TagID for that tag.) The Mask is applied before evaluating RawConv. When Mask is used, PrintHex=1 is implied unless otherwise defined. Condition : If given, specifies scalar which is evaluated as a Perl expression at extraction time to decide whether the tag is valid. If used in a list of alternate tag definitions, the first list entry with a true condition is taken. If no condition exists, then a 'true' condition is assumed. The expression may use $self to access the ExifTool object. The first 128 bytes of the raw data value are accessible through the reference $valPt for EXIF, Jpeg2000 and BinaryData tags only (note that for BinaryData tags, the raw data of $$valPt is always 'undef' type, and may not be used when writing except for SubDirectory tags). EXIF tags (and maybe some other types) may also reference the format string and value count through $format and $count. Note that if the value is writable and $valPt is used, the tag must have a Format (unless 'undef' or 'string'), and a Count (unless 1 or length of the 'undef' or 'string'), so the raw data may be generated for evaluating the Condition. When writing, $valPt, $format and $count refer to the new value, except for MakerNotes tags where $format and $count refer to the old tag if it existed. Require : [Composite tags only] A hash reference specifying the tags required to calculate the Composite tag value. The hash values are the names of the required tags, and the keys specify the indices where the tag values are stored in the @val list used in the ValueConv and/or PrintConv expression. The Composite value is only calculated if the values for all Require'd tags are defined. Require, Desire and Inhibit tag names may be prefixed by an optional group family 0 or 1 name followed by a colon. Case IS significant. The keys used by the Require, Desire and Inhibit hashes must not overlap (since they are used as indices into the common @val, @prt and @raw lists), and together the keys must be sequential starting from 0. A special feature allows a scalar tag name to be used instead of the hash reference when only the 0th tag is defined. For example, the following two definitions are equivalent: Require => { 0 => 'XMP:Title' }, Require => 'XMP:Title', Desire : [Composite tags only] This is the same as Require except that the Composite value is calculated even if the specified tags don't exist. Beware that the elements of @val, @prt and @raw may be undefined for Desire'd tags. If no tags are Require'd, at least one of the Desire'd tags must exist for the Composite tag to be generated. If there are no Require'd or Desire'd tags, then then Composite tag is always generated. Inhibit : [Composite tags only] Similar to the Require and Desire hashes, except that the Composite tag is NOT built if any of the Inhibit tags exist. Shift : [Writable tags only] Specifies type of shift to apply if this value may be shifted. Set to 'Time' for shifting date/time tags. Writable : Indicates this tag can be written (or not written if Writable is set to zero), and for EXIF-type tables gives format for writing. Writable may be set to 1 for MakerNotes information because the existing format is always used, however providing a format is desireable because it is used in validating the value. For EXIF tables, the Writable flag may be different than the Format flag, in which case Format is used for converting the binary value and Writable specifies the format code written to the EXIF IFD. For SubDirectories in EXIF information, this flag is only defined if the SubDirectory is writable as a block, or if the SubDirectory can not be edited (in which case Writable is set to 0). If non-zero, the SubDirectory is also extracted as a block, so the Binary and Protected flags should usually set as well. There is currently no way to specify a write format for a SubDirectory that is not writable as a block (the default is 'int32u' for IFD-type SubDirectories, and 'undef' for all others). WriteAlso : Used for writable tag to specify other tags to write when this tag is written. The value is a hash reference. The hash keys are the names of the tags to write, and the values are evaluated to obtain the ValueConv values of each tag (or undef to delete the tag). In the eval, $val is the Raw value of the parent tag (which may be undef if the tag is being deleted), and the %opts hash may be accessed to modify SetNewValue options for each tag. By default, Type is set to "ValueConv" and the Protected option has bit 0x02 set to allow writing of Protected tags that aren't directly writable. The AddValue and DelValue options from the parent tag are also defined, but no other options are set by default. Previous new values of WriteAlso tags have already been removed prior to the eval if the Replace option was used for the parent tag. If an empty warning is issued ("\n"), the target tag is not written and no error is reported. WriteCheck : If given, specifies a scalar which is evaluated as a Perl expression for a one-time validatation the Raw value being written. The expression has access to 3 variables: $val is the value to be written, $self is the ExifTool object, and $tagInfo is the tag information hash reference. It returns an error string, or undef if the value is good. If the error string is empty, the tag is not written and no warnings are issued, but WriteAlso is still evaluated if it exists. WriteOnly : Flag set if tag is write-only. Used for documentation only. DelCheck : Similar to WriteCheck, but called when the tag is deleted. The expression may access $self, $tagInfo and $wantGroup. Returns error string, or undef on success, and may set $val to something other than undef. May return empty string ('') to suppress warning messages but not delete tag (eg. when deleting only associated tags). WriteCondition: [Writable EXIF tags only] Specifies a condition to be evaluated before the tag can be written to a specific file. The condition may use $self to reference the ExifTool object, and returns true if it is OK for writing. Unlike WriteCheck which is done only once when the new value is set, this condition is evaluated just before the tags of the specific SubDirectory are written. WriteGroup : [Writable EXIF tags only] Specifies the IFD where the information gets written by default. Must be defined for writable EXIF tags if WRITE_GROUP is not specified in table. IsOverwriting : [Writable EXIF tags only] Specifies reference to subroutine which determines if tag should be overwritten. Arguments are: 0) ExifTool object ref, 1) new value hash ref, 2) old value, 3) new value reference. AllowGroup : [Writable tags only] Regular expression string (case insensitive) to match group names which are allowed when writing this tag. Only needed if tag can be written to groups other than the normal groups for this tag (very rare). OffsetPair : Used in EXIF table to specify the tagID for the corresponding offset or length tag. DataTag : Used in EXIF table to specify the tag name of the data associated with offset/length tags. FixFormat : [Writable EXIF SubIFD SubDirectory's only] Used to specify a format for writing an IFD pointer other than 'int32u'. ChangeBase : [EXIF tags in JPEG images only] Eval used to return new base for the offset for this tag only. Eval may use $dirStart and $dataPos. Note this is geared to the quirky Leica preview image offset, and is only used if the preview is outside the APP1 EXIF segment. BitsPerWord : [BITMASK tags only] Number of bits per decoded word. Defaults to 32 if not specified. BitsTotal : [Writable BITMASK tags only] Total number of bits in bit mask. Defaults to BitsPerWord if not specified. Struct : [XMP tags only] Reference to structure hash for structured XMP tags. See "STRUCTURES" section below for more details. (For backward compatibility, this may be a name to an entry in %Image::ExifTool::UserDefined::xmpStruct, but this use is deprecated.) Flattened tags are automatically generated for each field in the structure. Note that Struct tags can NOT have ValueConv/PrintConv entries, because values that are HASH references are are also used by Composite tags, which use the the Conv entries to generate the Composite value. NoSubStruct : [XMP tags only] Flag set in flattened tag to break cyclical recursion in nested structures. Namespace : [XMP tags only] Gives standard XMP namespace prefix to use for this tag. If not defined, the tag table NAMESPACE is used. FlatName : [Struct tags and structure fields only] Name used for automatically-generated flattened tag names, defaults to Name if not specified. In general, this is used to remove the redundant names found in some specifications. May be empty ('') for a Struct tag but not for a structure field. Units : [MIE tags only] Reference to a list of valid units strings. The default units are the first item in the list. Hook : [BinaryData tags only] Expression to be evaluated when extracting tag to allow dynamic Format, etc for BinaryData tags. May access $self, and $size (the full size of the binary data block), and assign a new value to $format to dynamically set the tag format, and/or increment $varSize to add a byte offset to subsequent tags. $varSize may be set to a large number to effectively abort processing of the directory after this tag. Must have corresponding DATAMEMBER entry in writable tables. Must not have Unknown set. LargeTag : [BinaryData tags only] Flag to indicate that the data for this tag is large, and that it shouldn't be stored in the %val hash, even if the tag exists as a DATAMEMBER. SetBase : [QuickTime and BinaryData tags only] Sets ExifTool BASE offset for use when ExtractInfo is called with the ReEntry flag from inside the RawConv of a tag. TagID : [reserved] Used internally to save the table key for this tag. Note: For XMP tables this corresponds to the XMP property name, but the table key may have a full XMP namespace prefix added. NewTagID : [reserved] Used internally to save new ID of tag in Composite table if it is different that the original TagID (happens if there was a conflict with an existing entry in the table) Index : [reserved] Used internally to save the index of tagInfo items which are in a conditional list. Table : [reserved] Reference to parent tag table. PropertyPath : [reserved] Used internally by XMP writer to save property path name. Also used in structure field information hashes, but for these the full property path is not stored. SrcTagInfo : [reserved] Used internally to store reference to default language tagInfo hash for alternate-language tags. OtherLang : [reserved] Used internally by QuickTime module to store a list of tag ID's for alternate-language tags based on this one. RootTagInfo : [reserved] Used internally to store a reference to the tag information hash of the top-level structure for flattened structure tags. Module : [reserved] Used internally to store module name for writable Composite tags. LangCode : [reserved] Used internally to indicate language code for alternate language tags (eg. 'fr'). Only used with formats which support alternate languages (eg. XMP, MIE, etc). SubDirectory { If it exists, this specifies the start of a new subdirectory. It contains a collection of variables which specify the type and location of the subdirectory. These variables are described below: TagTable : Specifies the name of the tag table lookup for the new subdirectory. If not specified, the parent tag table is used. Start : The offset to the start of the subdirectory relative to the current Base. This is a Perl expression which may use $valuePtr to represent the location of the tag value in the file, or $val for the value itself. If not specified, a Start of '$valuePtr' is assumed. OffsetPt : [EXIF directories only] If specified, this is a Perl expression that gives the position of a 32-bit word in the current directory that is added to the Start position to get the position of the new subdirectory. The expression should use the position of the current tag ($valuePtr). Base : This expression specifies the base offset for all pointers in the subdirectory. This need not be specified if the offset is the same as the current directory, which is normally the case. May use $start to represent the subdirectory start location relative to the current base, and $base for the value of the current base. If this is defined, the automatic validation of base offsets is disabled for maker notes directories. The IFD is flagged as using relative offsets when writing if '$start' is used in this expression. EntryBased : [EXIF directories only] Flag indicating that the offsets are based on the individual directory entry position, so offsets are incremented by 12 times the corresponding entry index. MaxSubdirs : Maximum number of subdirectories specified by the current tag (if the tag specifies multiple values). If not specified, the tag value ($val) is used as-is. If MaxSubdirs is specified, then one subdirectory is parsed for each value found up to the maximum number specified. Ignored when writing. ByteOrder : Specifies byte ordering if different than than the rest of the file. Must be either BigEndian, LittleEndian or Unknown. If Unknown is specified, the byte order will be determined from the directory count (however, this can not be done if OffsetPt is specified). Validate : If given, specifies Perl expression which is used to validate the subdirectory data. The following variables may be used in the expression: $val (value of the tag), $dirData (reference to directory data), $subdirStart (offset to subdirectory start) and $size (size of subdirectory). Returns true if subirectory is valid. ProcessProc: If given, specifies processing procedure used to decode this subdirectory data. This overrides the default procedure specified by PROCESS_PROC in the tag table. WriteProc : If given, specifies processing procedure used to write this subdirectory data. This overrides the default procedure specified by WRITE_PROC in the tag table. DirName : Name of this subdirectory. If not specified, the name is taken from the tag name. DirName is important because it is used when writing to compare against names in the directory map to determine which directories need to be edited. FixBase : Flag set if base offsets should be fixed. Used to add a constant to maker notes offsets to fix damage done by some image editing utilities. (maker notes only) Set to 2 for unknown maker notes to be a bit more flexible in adjusting the base offset. AutoFix : Flag set to patch GE makernote offset quirks and apply FixBase without warnings when writing. FixOffsets : Expression to evaluate for each value pointer to patch problems with some EXIF maker note offsets. May access the following variables: $valuePtr, $valEnd, $size, $tagID and $wFlag. May return undef when writing to ignore the entry. RelativeBase:[EXIF directories only] Flag to adjust all offsets relative to the start of the IFD when writing. Multi : [EXIF directories only] Flag to allow multiple linked IFD's. 1 is assumed if DirName is IFD0 or SubIFD unless otherwise defined. Magic : [TiffIFD directories only] Magic number used in TIFF-like header. } STRUCTURES Structure hashes are very similar to tag tables in that their keys are structure field ID's and their values are structure field information hashes. The special keys in structure hashes are: NAMESPACE : Same as in tag tables, but may be set to undef for a variable-namespace structure which holds any top-level tag. This is mandatory for built-in tags, but optional for user-defined tags (where it defaults to the NAMESPACE of the tag table). STRUCT_NAME : Name of structure (used in warning messages and documentation). May contain leading module name separated by a space to avoid name conflicts with same-named structures in other modules. Default module is "XMP" unless otherwise specified. TYPE : rdf:type resource for structure. NOTES : Notes for documentation. GROUPS : Same as in tag table, but only the family 2 group name is used, as the default for the flattened tags. The contained structure field information hashes are similar to tag information hashes, except that only the following elements are used: Raw/Value/PrintConv (and their inverses), TagID (optional), Groups, List, Writable, Struct, Namespace, LangCode, PropertyPath. But note that for PropertyPath, only the element of the path corresponding to the specific field is stored (including any necessary list properties). The full property path is obtained by walking the structure tree. Flattened tags corresponding to each field in a structure are automatically generated (using an on-demand approach to reduce startup overhead). Pre-defined flattened tags are allowed, and are used when it is necessary to change the Name or Description of a flattened tag. The flattened tag information hash entries are copied from the corresponding structure field definitions, even for pre-defined flattened tags. The exception is that the List property is generated automatically unless explicity set to 0 in a pre-defined flattened tag. -------------------------------------------------------------------------------- ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Real.pm�����������������������������������������������������000644 �000765 �000024 �00000065620 12642461334 021143� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Real.pm # # Description: Read Real audio/video meta information # # Revisions: 05/16/2006 - P. Harvey Created # # References: 1) http://www.getid3.org/ # 2) https://common.helixcommunity.org/nonav/2003/HCS_SDK_r5/htmfiles/rmff.htm #------------------------------------------------------------------------------ package Image::ExifTool::Real; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Canon; $VERSION = '1.06'; sub ProcessRealMeta($$$); sub ProcessRealProperties($$$); # Real property types (ref PH) my %propertyType = ( 0 => 'int32u', 2 => 'string', ); # Real Metadata property types my %metadataFormat = ( 1 => 'string', # text 2 => 'string', # text list 3 => 'flag', # 1 or 4 byte integer 4 => 'int32u', # 4-byte integer 5 => 'undef', # binary data 6 => 'string', # URL 7 => 'string', # date 8 => 'string', # file name 9 => undef, # grouping 10 => undef, # reference ); # Real Metadata property flag bit descriptions my %metadataFlag = ( 0 => 'Read Only', 1 => 'Private', 2 => 'Type Descriptor', ); # tags used in RealMedia (RM, RV and RMVB) files %Image::ExifTool::Real::Media = ( GROUPS => { 2 => 'Video' }, NOTES => q{ These B<Tag ID>'s are Chunk ID's used in RealMedia and RealVideo (RM, RV and RMVB) files. }, CONT => { SubDirectory => { TagTable => 'Image::ExifTool::Real::ContentDescr' } }, MDPR => { SubDirectory => { TagTable => 'Image::ExifTool::Real::MediaProps' } }, PROP => { SubDirectory => { TagTable => 'Image::ExifTool::Real::Properties' } }, RJMD => { SubDirectory => { TagTable => 'Image::ExifTool::Real::Metadata' } }, ); # pseudo-tags used in RealAudio (RA) files %Image::ExifTool::Real::Audio = ( GROUPS => { 2 => 'Audio' }, NOTES => q{ Tags in the following table reference information extracted from various versions of RealAudio (RA) files. }, '.ra3' => { Name => 'RA3', SubDirectory => { TagTable => 'Image::ExifTool::Real::AudioV3' } }, '.ra4' => { Name => 'RA4', SubDirectory => { TagTable => 'Image::ExifTool::Real::AudioV4' } }, '.ra5' => { Name => 'RA5', SubDirectory => { TagTable => 'Image::ExifTool::Real::AudioV5' } }, ); # pseudo-tags used in RealMedia Metafiles and RealMedia Plug-in Metafiles (RAM and RPM) %Image::ExifTool::Real::Metafile = ( GROUPS => { 2 => 'Video' }, NOTES => q{ Tags representing information extracted from Real Audio Metafile and RealMedia Plug-in Metafile (RAM and RPM) files. }, txt => 'Text', url => 'URL', ); %Image::ExifTool::Real::Properties = ( GROUPS => { 1 => 'Real-PROP', 2 => 'Video' }, PROCESS_PROC => \&Image::ExifTool::Canon::ProcessSerialData, VARS => { ID_LABEL => 'Sequence' }, FORMAT => 'int32u', 0 => { Name => 'MaxBitrate', PrintConv => 'ConvertBitrate($val)' }, 1 => { Name => 'AvgBitrate', PrintConv => 'ConvertBitrate($val)' }, 2 => 'MaxPacketSize', 3 => 'AvgPacketSize', 4 => 'NumPackets', 5 => { Name => 'Duration', ValueConv => '$val / 1000', PrintConv => 'ConvertDuration($val)' }, 6 => { Name => 'Preroll', ValueConv => '$val / 1000', PrintConv => 'ConvertDuration($val)' }, 7 => { Name => 'IndexOffset', Unknown => 1 }, 8 => { Name => 'DataOffset', Unknown => 1 }, 9 => { Name => 'NumStreams', Format => 'int16u' }, 10 => { Name => 'Flags', Format => 'int16u', PrintConv => { BITMASK => { 0 => 'Allow Recording', 1 => 'Perfect Play', 2 => 'Live', 3 => 'Allow Download', #PH (from rmeditor dump) } }, }, ); %Image::ExifTool::Real::MediaProps = ( GROUPS => { 1 => 'Real-MDPR', 2 => 'Video' }, PROCESS_PROC => \&Image::ExifTool::Canon::ProcessSerialData, VARS => { ID_LABEL => 'Sequence' }, FORMAT => 'int32u', PRIORITY => 0, # first stream takes priority 0 => { Name => 'StreamNumber', Format => 'int16u' }, 1 => { Name => 'StreamMaxBitrate', PrintConv => 'ConvertBitrate($val)' }, 2 => { Name => 'StreamAvgBitrate', PrintConv => 'ConvertBitrate($val)' }, 3 => { Name => 'StreamMaxPacketSize' }, 4 => { Name => 'StreamAvgPacketSize' }, 5 => { Name => 'StreamStartTime' }, 6 => { Name => 'StreamPreroll', ValueConv => '$val / 1000', PrintConv => 'ConvertDuration($val)' }, 7 => { Name => 'StreamDuration',ValueConv => '$val / 1000', PrintConv => 'ConvertDuration($val)' }, 8 => { Name => 'StreamNameLen', Format => 'int8u', Unknown => 1 }, 9 => { Name => 'StreamName', Format => 'string[$val{8}]' }, 10 => { Name => 'StreamMimeLen', Format => 'int8u', Unknown => 1 }, 11 => { Name => 'StreamMimeType', Format => 'string[$val{10}]', RawConv => '$self->{RealStreamMime} = $val', }, 12 => { Name => 'FileInfoLen', Unknown => 1 }, 13 => { Name => 'FileInfoLen2', # if this condition fails, subsequent tags will not be processed Condition => '$self->{RealStreamMime} eq "logical-fileinfo"', Unknown => 1, }, 14 => { Name => 'FileInfoVersion', Format => 'int16u', }, 15 => { Name => 'PhysicalStreams', Format => 'int16u', Unknown => 1, }, 16 => { Name => 'PhysicalStreamNumbers', Format => 'int16u[$val{15}]', Unknown => 1, }, 17 => { Name => 'DataOffsets', Format => 'int32u[$val{15}]', Unknown => 1, }, 18 => { Name => 'NumRules', Format => 'int16u', Unknown => 1, }, 19 => { Name => 'PhysicalStreamNumberMap', Format => 'int16u[$val{18}]', Unknown => 1, }, 20 => { Name => 'NumProperties', Format => 'int16u', Unknown => 1, }, 21 => { Name => 'FileInfoProperties', Format => 'undef[$val{13}-$val{15}*6-$val{18}*2-12]', SubDirectory => { TagTable => 'Image::ExifTool::Real::FileInfo' }, }, ); # Observed FileInfo properties (ref PH) %Image::ExifTool::Real::FileInfo = ( GROUPS => { 1 => 'Real-MDPR', 2 => 'Video' }, PROCESS_PROC => \&ProcessRealProperties, NOTES => q{ The following tags have been observed in the FileInfo properties, but any other existing information will also be extracted. }, Indexable => { PrintConv => { 0 => 'False', 1 => 'True' } }, Keywords => { }, Description => { }, 'File ID' => { Name => 'FileID' }, 'Content Rating' => { Name => 'ContentRating', PrintConv => { 0 => 'No Rating', 1 => 'All Ages', 2 => 'Older Children', 3 => 'Younger Teens', 4 => 'Older Teens', 5 => 'Adult Supervision Recommended', 6 => 'Adults Only', }, }, Audiences => { }, audioMode => { Name => 'AudioMode' }, 'Creation Date' => { Name => 'CreateDate', Groups => { 2 => 'Time' }, ValueConv => q{ $val =~ m{(\d+)/(\d+)/(\d+)\s+(\d+):(\d+):(\d+)} ? sprintf("%.4d:%.2d:%.2d %.2d:%.2d:%.2d",$3,$2,$1,$4,$5,$6) : $val }, PrintConv => '$self->ConvertDateTime($val)', }, 'Generated By' => { Name => 'Software' }, 'Modification Date' => { Name => 'ModifyDate', Groups => { 2 => 'Time' }, ValueConv => q{ $val =~ m{(\d+)/(\d+)/(\d+)\s+(\d+):(\d+):(\d+)} ? sprintf("%.4d:%.2d:%.2d %.2d:%.2d:%.2d",$3,$2,$1,$4,$5,$6) : $val }, PrintConv => '$self->ConvertDateTime($val)', }, 'Target Audiences' => { Name => 'TargetAudiences' }, 'Audio Format' => { Name => 'AudioFormat' }, 'Video Quality' => { Name => 'VideoQuality' }, videoMode => { Name => 'VideoMode' }, ); %Image::ExifTool::Real::ContentDescr = ( GROUPS => { 1 => 'Real-CONT', 2 => 'Video' }, PROCESS_PROC => \&Image::ExifTool::Canon::ProcessSerialData, VARS => { ID_LABEL => 'Sequence' }, FORMAT => 'int16u', 0 => { Name => 'TitleLen', Unknown => 1 }, 1 => { Name => 'Title', Format => 'string[$val{0}]' }, 2 => { Name => 'AuthorLen', Unknown => 1 }, 3 => { Name => 'Author', Format => 'string[$val{2}]', Groups => { 2 => 'Author' } }, 4 => { Name => 'CopyrightLen', Unknown => 1 }, 5 => { Name => 'Copyright', Format => 'string[$val{4}]', Groups => { 2 => 'Author' } }, 6 => { Name => 'CommentLen', Unknown => 1 }, 7 => { Name => 'Comment', Format => 'string[$val{6}]' }, ); # Real RJMD meta information (ref PH) %Image::ExifTool::Real::Metadata = ( GROUPS => { 1 => 'Real-RJMD', 2 => 'Video' }, PROCESS_PROC => \&ProcessRealMeta, NOTES => q{ The tags below represent information which has been observed in the Real Metadata format, but ExifTool will extract any information it finds in this format. (As far as I can tell from the referenced documentation, string values should be plain text, but this is not the case for the only sample file I have been able to obtain containing this information. These tags could also be split into separate sub-directories, but this will wait until I have better documentation or a more complete set of samples.) }, 'Album/Name' => 'AlbumName', 'Track/Category' => 'TrackCategory', 'Track/Comments' => 'TrackComments', 'Track/Lyrics' => 'TrackLyrics', ); %Image::ExifTool::Real::AudioV3 = ( GROUPS => { 1 => 'Real-RA3', 2 => 'Audio' }, PROCESS_PROC => \&Image::ExifTool::Canon::ProcessSerialData, VARS => { ID_LABEL => 'Sequence' }, FORMAT => 'int8u', 0 => { Name => 'Channels', Format => 'int16u' }, 1 => { Name => 'Unknown', Format => 'int16u[3]', Unknown => 1 }, 2 => { Name => 'BytesPerMinute', Format => 'int16u' }, 3 => { Name => 'AudioBytes', Format => 'int32u' }, 4 => { Name => 'TitleLen', Unknown => 1 }, 5 => { Name => 'Title', Format => 'string[$val{4}]' }, 6 => { Name => 'ArtistLen', Unknown => 1 }, 7 => { Name => 'Artist', Format => 'string[$val{6}]', Groups => { 2 => 'Author' } }, 8 => { Name => 'CopyrightLen', Unknown => 1 }, 9 => { Name => 'Copyright', Format => 'string[$val{8}]', Groups => { 2 => 'Author' } }, 10 => { Name => 'CommentLen', Unknown => 1 }, 11 => { Name => 'Comment', Format => 'string[$val{10}]' }, ); %Image::ExifTool::Real::AudioV4 = ( GROUPS => { 1 => 'Real-RA4', 2 => 'Audio' }, PROCESS_PROC => \&Image::ExifTool::Canon::ProcessSerialData, VARS => { ID_LABEL => 'Sequence' }, FORMAT => 'int16u', 0 => { Name => 'FourCC1', Format => 'undef[4]', Unknown => 1 }, 1 => { Name => 'AudioFileSize', Format => 'int32u', Unknown => 1 }, 2 => { Name => 'Version2', Unknown => 1 }, 3 => { Name => 'HeaderSize', Format => 'int32u', Unknown => 1 }, 4 => { Name => 'CodecFlavorID', Unknown => 1 }, 5 => { Name => 'CodedFrameSize', Format => 'int32u', Unknown => 1 }, 6 => { Name => 'AudioBytes', Format => 'int32u' }, 7 => { Name => 'BytesPerMinute', Format => 'int32u' }, 8 => { Name => 'Unknown', Format => 'int32u', Unknown => 1 }, 9 => { Name => 'SubPacketH', Unknown => 1 }, 10 => 'AudioFrameSize', 11 => { Name => 'SubPacketSize', Unknown => 1 }, 12 => { Name => 'Unknown', Unknown => 1 }, 13 => 'SampleRate', 14 => { Name => 'Unknown', Unknown => 1 }, 15 => 'BitsPerSample', 16 => 'Channels', 17 => { Name => 'FourCC2Len', Format => 'int8u', Unknown => 1 }, 18 => { Name => 'FourCC2', Format => 'undef[4]', Unknown => 1 }, 19 => { Name => 'FourCC3Len', Format => 'int8u', Unknown => 1 }, 20 => { Name => 'FourCC3', Format => 'undef[4]', Unknown => 1 }, 21 => { Name => 'Unknown', Format => 'int8u', Unknown => 1 }, 22 => { Name => 'Unknown', Unknown => 1 }, 23 => { Name => 'TitleLen', Format => 'int8u', Unknown => 1 }, 24 => { Name => 'Title', Format => 'string[$val{23}]' }, 25 => { Name => 'ArtistLen', Format => 'int8u', Unknown => 1 }, 26 => { Name => 'Artist', Format => 'string[$val{25}]', Groups => { 2 => 'Author' } }, 27 => { Name => 'CopyrightLen', Format => 'int8u', Unknown => 1 }, 28 => { Name => 'Copyright', Format => 'string[$val{27}]', Groups => { 2 => 'Author' } }, 29 => { Name => 'CommentLen', Format => 'int8u', Unknown => 1 }, 30 => { Name => 'Comment', Format => 'string[$val{29}]' }, ); %Image::ExifTool::Real::AudioV5 = ( GROUPS => { 1 => 'Real-RA5', 2 => 'Audio' }, PROCESS_PROC => \&Image::ExifTool::Canon::ProcessSerialData, VARS => { ID_LABEL => 'Sequence' }, FORMAT => 'int16u', 0 => { Name => 'FourCC1', Format => 'undef[4]', Unknown => 1 }, 1 => { Name => 'AudioFileSize', Format => 'int32u', Unknown => 1 }, 2 => { Name => 'Version2', Unknown => 1 }, 3 => { Name => 'HeaderSize', Format => 'int32u', Unknown => 1 }, 4 => { Name => 'CodecFlavorID', Unknown => 1 }, 5 => { Name => 'CodedFrameSize', Format => 'int32u', Unknown => 1 }, 6 => { Name => 'AudioBytes', Format => 'int32u' }, 7 => { Name => 'BytesPerMinute', Format => 'int32u' }, 8 => { Name => 'Unknown', Format => 'int32u', Unknown => 1 }, 9 => { Name => 'SubPacketH', Unknown => 1 }, 10 => { Name => 'FrameSize', Unknown => 1 }, 11 => { Name => 'SubPacketSize', Unknown => 1 }, 12 => 'SampleRate', 13 => { Name => 'SampleRate2', Unknown => 1 }, 14 => { Name => 'BitsPerSample', Format => 'int32u' }, 15 => 'Channels', 16 => { Name => 'Genr', Format => 'int32u', Unknown => 1 }, 17 => { Name => 'FourCC3', Format => 'undef[4]', Unknown => 1 }, ); #------------------------------------------------------------------------------ # Process Real NameValueProperties # Inputs: 0) ExifTool object reference, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessRealProperties($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirLen = $$dirInfo{DirLen}; my $pos = $$dirInfo{DirStart}; my $verbose = $et->Options('Verbose'); $verbose and $et->VerboseDir('RealProperties', undef, $dirLen); while ($pos + 6 <= $dirLen) { # get property size and version my ($size, $vers) = unpack("x${pos}Nn", $$dataPt); last if $size < 6; unless ($vers == 0) { $pos += $size; next; } $pos += 6; my $tagLen = unpack("x${pos}C", $$dataPt); ++$pos; last if $pos + $tagLen > $dirLen; my $tag = substr($$dataPt, $pos, $tagLen); $pos += $tagLen; last if $pos + 6 > $dirLen; my ($type, $valLen) = unpack("x${pos}Nn", $$dataPt); $pos += 6; last if $pos + $valLen > $dirLen; my $format = $propertyType{$type} || 'undef'; my $count = int($valLen / Image::ExifTool::FormatSize($format)); my $val = ReadValue($dataPt, $pos, $format, $count, $dirLen-$pos); my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); unless ($tagInfo) { my $tagName; ($tagName = $tag) =~ s/\s+//g; next unless $tagName =~ /^\w+$/; # ignore crazy names $tagInfo = { Name => ucfirst($tagName) }; AddTagToTable($tagTablePtr, $tag, $tagInfo); } if ($verbose) { $et->VerboseInfo($tag, $tagInfo, Table => $tagTablePtr, Value => $val, DataPt => $dataPt, Size => $valLen, Start => $pos, Addr => $pos + $$dirInfo{DataPos}, Format => $format, Count => $count, ); } $et->FoundTag($tagInfo, $val); $pos += $valLen; } return 1; } #------------------------------------------------------------------------------ # Process Real metadata properties # Inputs: 0) ExifTool object reference, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessRealMeta($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos}; my $pos = $$dirInfo{DirStart}; my $dirEnd = $pos + $$dirInfo{DirLen}; my $verbose = $et->Options('Verbose'); my $prefix = $$dirInfo{Prefix} || ''; $prefix and $prefix .= '/'; $verbose and $et->VerboseDir('RealMetadata', undef, $$dirInfo{DirLen}); for (;;) { last if $pos + 28 > $dirEnd; # extract fixed-position metadata structure members my ($size, $type, $flags, $valuePos, $subPropPos, $numSubProps, $nameLen) = unpack("x${pos}N7", $$dataPt); # make pointers relative to data start $valuePos += $pos; $subPropPos += $pos; # validate what we have read so far last if $pos + $size > $dirEnd; last if $pos + 28 + $nameLen > $dirEnd; last if $valuePos < $pos + 28 + $nameLen; last if $valuePos + 4 > $dirEnd; my $tag = substr($$dataPt, $pos + 28, $nameLen); $tag =~ s/\0.*//s; # truncate at null $tag = $prefix . $tag; my $valueLen = unpack("x${valuePos}N", $$dataPt); $valuePos += 4; # point at value itself last if $valuePos + $valueLen > $dirEnd; my $format = $metadataFormat{$type}; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); unless ($tagInfo) { my $tagName = $tag; $tagName =~ tr/A-Za-z0-9//dc; $tagInfo = { Name => ucfirst($tagName) }; AddTagToTable($tagTablePtr, $tag, $tagInfo); } if ($verbose) { $format = 'undef' unless defined $format; $flags = Image::ExifTool::DecodeBits($flags, \%metadataFlag); } if ($valueLen and $format) { # (a flag can be 1 or 4 bytes) if ($format eq 'flag') { $format = ($valueLen == 4) ? 'int32u' : 'int8u'; } elsif ($type == 7 and $tagInfo) { # add PrintConv and ValueConv for "date" type $$tagInfo{ValueConv} or $$tagInfo{ValueConv} = q{ $val =~ /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ ? sprintf("%.4d:%.2d:%.2d %.2d:%.2d:%.2d",$1,$2,$3,$4,$5,$6) : $val; }; $$tagInfo{PrintConv} or $$tagInfo{PrintConv} = '$self->ConvertDateTime($val)'; } my $count = int($valueLen / Image::ExifTool::FormatSize($format)); my $val = ReadValue($dataPt, $valuePos, $format, $count, $dirEnd-$valuePos); $et->HandleTag($tagTablePtr, $tag, $val, DataPt => $dataPt, DataPos => $dataPos, Start => $valuePos, Size => $valueLen, Format => "type=$type, flags=$flags", ); } # extract sub-properties if ($numSubProps) { my $dirStart = $valuePos + $valueLen + $numSubProps * 8; my %dirInfo = ( DataPt => $dataPt, DataPos => $dataPos, DirStart => $dirStart, DirLen => $pos + $size - $dirStart, Prefix => $tag, ); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); } $pos += $size; # step to next Metadata structure } unless ($pos == $dirEnd) { $et->Warn('Format error in Real Metadata'); return 0; } return 1; } #------------------------------------------------------------------------------ # Read information frame a Real file # Inputs: 0) ExifTool object reference, 1) Directory information reference # Returns: 1 on success, 0 if this wasn't a valid Real file sub ProcessReal($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $tag, $vers, $extra, @mimeTypes, %dirCount); $raf->Read($buff, 8) == 8 or return 0; $buff =~ m{^(\.RMF|\.ra\xfd|pnm://|rtsp://|http://)} or return 0; my $fast3 = $$et{OPTIONS}{FastScan} && $$et{OPTIONS}{FastScan} == 3; my ($type, $tagTablePtr); if ($1 eq '.RMF') { $tagTablePtr = GetTagTable('Image::ExifTool::Real::Media'); $type = 'RM'; } elsif ($1 eq ".ra\xfd") { $tagTablePtr = GetTagTable('Image::ExifTool::Real::Audio'); $type = 'RA'; } else { $tagTablePtr = GetTagTable('Image::ExifTool::Real::Metafile'); my $ext = $$et{FILE_EXT}; $type = ($ext and $ext eq 'RPM') ? 'RPM' : 'RAM'; require Image::ExifTool::PostScript; local $/ = Image::ExifTool::PostScript::GetInputRecordSeparator($raf) || "\n"; $raf->Seek(0,0); while ($raf->ReadLine($buff)) { last if length $buff > 256; next unless $buff ; chomp $buff; if ($type) { # must be a Real file type if protocol is http return 0 if $buff =~ /^http/ and $buff !~ /\.(ra|rm|rv|rmvb|smil)$/i; $et->SetFileType($type); return 1 if $fast3; undef $type; } # save URL or Text from RAM file my $tag = $buff =~ m{^[a-z]{3,4}://} ? 'url' : 'txt'; $et->HandleTag($tagTablePtr, $tag, $buff); } return 1; } $et->SetFileType($type); return 1 if $fast3; SetByteOrder('MM'); my $verbose = $et->Options('Verbose'); # # Process RealAudio file # if ($type eq 'RA') { ($vers, $extra) = unpack('x4nn', $buff); $tag = ".ra$vers"; my $fpos = $raf->Tell(); unless ($raf->Read($buff, 512)) { $et->Warn('Error reading audio header'); return 1; } my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); if ($verbose > 2) { $et->VerboseInfo($tag, $tagInfo, DataPt => \$buff, DataPos => $fpos); } if ($tagInfo) { my $subTablePtr = GetTagTable($tagInfo->{SubDirectory}->{TagTable}); my %dirInfo = ( DataPt => \$buff, DataPos => $fpos, DirLen => length $buff, DirStart => 0, ); $et->ProcessDirectory(\%dirInfo, $subTablePtr); } else { $et->Warn('Unsupported RealAudio version'); } return 1; } # # Process RealMedia file # # skip the rest of the RM header my $size = unpack('x4N', $buff); unless ($raf->Seek($size - 8, 1)) { $et->Warn('Error seeking in file'); return 0; } # Process RealMedia chunks for (;;) { $raf->Read($buff, 10) == 10 or last; ($tag, $size, $vers) = unpack('a4Nn', $buff); last if $tag eq "\0\0\0\0"; if ($verbose) { $et->VPrint(0, "$tag chunk ($size bytes):\n"); } else { last if $tag eq 'DATA'; # stop normal parsing at DATA tag } if ($size & 0x80000000) { $et->Warn('Bad chunk header'); last; } my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); if ($tagInfo and $$tagInfo{SubDirectory}) { my $fpos = $raf->Tell(); unless ($raf->Read($buff, $size-10) == $size-10) { $et->Warn("Error reading $tag chunk"); last; } if ($verbose > 2) { $et->VerboseInfo($tag, $tagInfo, DataPt => \$buff, DataPos => $fpos); } my $subTablePtr = GetTagTable($tagInfo->{SubDirectory}->{TagTable}); my %dirInfo = ( DataPt => \$buff, DataPos => $fpos, DirLen => length $buff, DirStart => 0, ); if ($dirCount{$tag}) { $$et{SET_GROUP1} = '+' . ++$dirCount{$tag}; } else { $dirCount{$tag} = 1; } $et->ProcessDirectory(\%dirInfo, $subTablePtr); delete $$et{SET_GROUP1}; # keep track of stream MIME types my $mime = $$et{RealStreamMime}; if ($mime) { delete $$et{RealStreamMime}; $mime =~ s/\0.*//s; push @mimeTypes, $mime unless $mime =~ /^logical-/; } } else { unless ($raf->Seek($size-10, 1)) { $et->Warn('Error seeking in file'); last; } } } # override MIMEType with stream MIME type if we only have one stream if (@mimeTypes == 1 and length $mimeTypes[0]) { $$et{VALUE}{MIMEType} = $mimeTypes[0]; $et->VPrint(0, " MIMEType = $mimeTypes[0]\n"); } # # Process footer containing Real metadata and ID3 information # if ($raf->Seek(-140, 2) and $raf->Read($buff, 12) == 12 and $buff =~ /^RMJE/) { my $metaSize = unpack('x8N', $buff); if ($raf->Seek(-$metaSize-12, 1) and $raf->Read($buff, $metaSize) == $metaSize and $buff =~ /^RJMD/) { my %dirInfo = ( DataPt => \$buff, DataPos => $raf->Tell() - $metaSize, DirStart => 8, DirLen => length($buff) - 8, ); my $tagTablePtr = GetTagTable('Image::ExifTool::Real::Metadata'); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); } else { $et->Warn('Bad metadata footer'); } if ($raf->Seek(-128, 2) and $raf->Read($buff, 128) == 128 and $buff =~ /^TAG/) { $et->VPrint(0, "ID3v1:\n"); my %dirInfo = ( DataPt => \$buff, DirStart => 0, DirLen => length($buff), ); my $tagTablePtr = GetTagTable('Image::ExifTool::ID3::v1'); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); } } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::Real - Read Real audio/video meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains the routines required by Image::ExifTool to read meta information in RealAudio (RA), RealMedia (RM, RV and RMVB) and RealMedia Metafile (RAM and RPM) files. =head1 NOTES There must be a bug in the software that wrote the Metadata used in the test file t/images/Real.rm because the TrackLyricsDataSize word is written little-endian, but the Real format is big-endian. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.getid3.org/> =item L<https://common.helixcommunity.org/nonav/2003/HCS_SDK_r5/htmfiles/rmff.htm> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Real Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Reconyx.pm��������������������������������������������������000644 �000765 �000024 �00000012707 12642461334 021705� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Reconyx.pm # # Description: Reconyx maker notes tags # # Revisions: 2011-01-11 - P. Harvey Created # # References: 1) RCNX_MN10.pdf (courtesy of Reconyx Inc.) #------------------------------------------------------------------------------ package Image::ExifTool::Reconyx; use strict; use vars qw($VERSION); $VERSION = '1.04'; # maker notes for Reconyx Hyperfire cameras (ref PH) %Image::ExifTool::Reconyx::Main = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, TAG_PREFIX => 'Reconyx', FORMAT => 'int16u', WRITABLE => 1, FIRST_ENTRY => 0, NOTES => q{ The following tags are extracted from the maker notes of Reconyx Hyperfire cameras such as the HC500, HC600 and PC900. }, 0x00 => { #1 Name => 'MakerNoteVersion', PrintConv => 'sprintf("0x%.4x", $val)', Writable => 0, # (we use this for identification, 0xf101 --> rev 1.0) PrintConvInv => 'hex $val', }, 0x01 => { #1 Name => 'FirmwareVersion', Format => 'int16u[3]', PrintConv => '$val=~tr/ /./; $val', Writable => 0, # (we use this for identification, 0x0003 --> ver 2 or 3) }, 0x04 => { #1 Name => 'FirmwareDate', Format => 'int16u[2]', ValueConv => q{ my @v = split(' ',$val); sprintf('%.4x:%.2x:%.2x', $v[0], $v[1]>>8, $v[1]&0xff); }, ValueConvInv => q{ my @v = split(':', $val); hex($v[0]) . ' ' . hex($v[1] . $v[2]); }, }, 0x06 => { Name => 'TriggerMode', Format => 'string[2]', PrintConv => { C => 'CodeLoc Not Entered', #1 E => 'External Sensor', #1 M => 'Motion Detection', T => 'Time Lapse', }, }, 0x07 => { Name => 'Sequence', Format => 'int16u[2]', PrintConv => '$val =~ s/ / of /; $val', PrintConvInv => 'join(" ", $val=~/\d+/g)', }, 0x09 => { #1 Name => 'EventNumber', Format => 'int16u[2]', ValueConv => 'my @v=split(" ",$val); ($v[0]<<16) + $v[1]', ValueConvInv => '($val>>16) . " " . ($val&0xffff)', }, 0x0b => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Format => 'int16u[6]', Groups => { 2 => 'Time' }, Priority => 0, # (not as reliable as EXIF) Shift => 'Time', ValueConv => q{ my @a = split ' ', $val; # have seen these values written big-endian when everything else is little-endian if ($a[0] & 0xff00 and not $a[0] & 0xff) { $_ = ($_ >> 8) | (($_ & 0xff) << 8) foreach @a; } sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d', @a[5,3,4,2,1,0]); }, ValueConvInv => q{ my @a = ($val =~ /\d+/g); return undef unless @a >= 6; join ' ', @a[5,4,3,1,2,0]; }, PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val)', }, 0x12 => { Name => 'MoonPhase', Groups => { 2 => 'Time' }, PrintConv => { 0 => 'New', 1 => 'New Crescent', 2 => 'First Quarter', 3 => 'Waxing Gibbous', 4 => 'Full', 5 => 'Waning Gibbous', 6 => 'Last Quarter', 7 => 'Old Crescent', }, }, 0x13 => { Name => 'AmbientTemperatureFahrenheit', Format => 'int16s', PrintConv => '"$val F"', PrintConvInv => '$val=~/(-?\d+)/ ? $1 : $val', }, 0x14 => { Name => 'AmbientTemperature', Format => 'int16s', PrintConv => '"$val C"', PrintConvInv => '$val=~/(-?\d+)/ ? $1 : $val', }, 0x15 => { Name => 'SerialNumber', Format => 'undef[30]', RawConv => '$_ = $self->Decode($val, "UCS2"); s/\0.*//; $_', RawConvInv => q{ $_ = $self->Encode($val, "UCS2"); $_ = substr($_, 0, 30) if length($_) > 30; return $_; }, }, 0x24 => 'Contrast', #1 0x25 => 'Brightness', #1 0x26 => 'Sharpness', #1 0x27 => 'Saturation', #1 0x28 => { Name => 'InfraredIlluminator', PrintConv => { 0 => 'Off', 1 => 'On', }, }, 0x29 => 'MotionSensitivity', #1 0x2a => { #1 Name => 'BatteryVoltage', ValueConv => '$val / 1000', ValueConvInv => '$val * 1000', PrintConv => '"$val V"', PrintConvInv => '$val=~s/ ?V$//; $val', }, 0x2b => { Name => 'UserLabel', Format => 'string[22]', #1 (but manual says 16-char limit) }, ); __END__ =head1 NAME Image::ExifTool::Reconyx - Reconyx maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret maker notes in Reconyx cameras. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/Reconyx Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Ricoh.pm����������������������������������������������������000644 �000765 �000024 �00000111065 12642461334 021317� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Ricoh.pm # # Description: Ricoh EXIF maker notes tags # # Revisions: 03/28/2005 - P. Harvey Created # # References: 1) http://www.ozhiker.com/electronics/pjmt/jpeg_info/ricoh_mn.html # 2) http://homepage3.nifty.com/kamisaka/makernote/makernote_ricoh.htm # 3) Tim Gray private communication (GR) # 4) https://github.com/atotto/ricoh-theta-tools/ # 5) Iliah Borg private communication (LibRaw) #------------------------------------------------------------------------------ package Image::ExifTool::Ricoh; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.31'; sub ProcessRicohText($$$); sub ProcessRicohRMETA($$$); # lens types for Ricoh GXR my %ricohLensIDs = ( Notes => q{ Lens units available for the GXR, used by the Ricoh Composite LensID tag. Note that unlike lenses for all other makes of cameras, the focal lengths in these model names have already been scaled to include the 35mm crop factor. }, # (the exact lens model names used by Ricoh, except for a change in case) 'RL1' => 'GR Lens A12 50mm F2.5 Macro', 'RL2' => 'Ricoh Lens S10 24-70mm F2.5-4.4 VC', 'RL3' => 'Ricoh Lens P10 28-300mm F3.5-5.6 VC', 'RL5' => 'GR Lens A12 28mm F2.5', 'RL8' => 'Mount A12', 'RL6' => 'Ricoh Lens A16 24-85mm F3.5-5.5', ); %Image::ExifTool::Ricoh::Main = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, 0x0001 => { Name => 'MakerNoteType', Writable => 'string' }, 0x0002 => { #PH Name => 'FirmwareVersion', Writable => 'string', # eg. "Rev0113" is firmware version 1.13 PrintConv => '$val=~/^Rev(\d+)$/ ? sprintf("%.2f",$1/100) : $val', PrintConvInv => '$val=~/^(\d+)\.(\d+)$/ ? sprintf("Rev%.2d%.2d",$1,$2) : $val', }, 0x0005 => [ #PH { Condition => '$$valPt =~ /^[-\w ]+$/', Name => 'SerialNumber', # (verified for GXR) Writable => 'undef', Count => 16, Notes => q{ the serial number stamped on the camera begins with 2 model-specific letters followed by the last 8 digits of this value. For the GXR, this is the serial number of the lens unit }, PrintConv => '$val=~s/^(.*)(.{8})$/($1)$2/; $val', PrintConvInv => '$val=~tr/()//d; $val', },{ Name => 'InternalSerialNumber', Writable => 'undef', Count => 16, ValueConv => 'unpack("H*", $val)', ValueConvInv => 'pack("H*", $val)', }, ], 0x0e00 => { Name => 'PrintIM', Writable => 0, Description => 'Print Image Matching', SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main' }, }, 0x1000 => { #3 Name => 'RecordingFormat', Writable => 'int16u', PrintConv => { 2 => 'JPEG', 3 => 'DNG', }, }, 0x1001 => [{ Name => 'ImageInfo', Condition => '$format ne "int16u"', SubDirectory => { TagTable => 'Image::ExifTool::Ricoh::ImageInfo' }, },{ #3 Name => 'ExposureProgram', Writable => 'int16u', Notes => 'GR', PrintConv => { 1 => 'Auto', 2 => 'Program AE', 3 => 'Aperture-priority AE', 4 => 'Shutter speed priority AE', 5 => 'Shutter/aperture priority AE', # TAv 6 => 'Manual', 7 => 'Movie', #PH }, }], 0x1002 => { #3 Name => 'DriveMode', Condition => '$format eq "int16u"', Notes => 'valid only for some models', Writable => 'int16u', PrintConv => { 0 => 'Single-frame', 1 => 'Continuous', 8 => 'AF-priority Continuous', }, }, 0x1003 => [{ Name => 'Sharpness', Condition => '$format ne "int16u"', Writable => 'int32u', PrintConv => { 0 => 'Sharp', 1 => 'Normal', 2 => 'Soft', }, },{ #3 Name => 'WhiteBalance', Writable => 'int16u', Notes => 'GR', PrintConv => { 0 => 'Auto', 1 => 'Multi-P Auto', 2 => 'Daylight', 3 => 'Cloudy', 4 => 'Incandescent 1', 5 => 'Incandescent 2', 6 => 'Daylight Fluorescent', 7 => 'Neutral White Fluorescent', 8 => 'Cool White Fluorescent', 9 => 'Warm White Fluorescent', 10 => 'Manual', 11 => 'Kelvin', 12 => 'Shade', #5 }, }], 0x1004 => { #3 Name => 'WhiteBalanceFineTune', Condition => '$format eq "int16u"', Format => 'int16s', Writable => 'int16u', Notes => q{ 2 numbers: amount of adjustment towards Amber and Green. Not valid for all models }, }, # 0x1005 int16u - 5 0x1006 => { #3 Name => 'FocusMode', Writable => 'int16u', PrintConv => { 1 => 'Manual', 2 => 'Multi AF', 3 => 'Spot AF', 4 => 'Snap', 5 => 'Infinity', 7 => 'Face Detect', #PH 8 => 'Subject Tracking', 9 => 'Pinpoint AF', 10 => 'Movie', #PH }, }, 0x1007 => { #3 Name => 'AutoBracketing', Writable => 'int16u', PrintConv => { 0 => 'Off', 9 => 'AE', 11 => 'WB', 16 => 'DR', # (dynamic range) 17 => 'Contrast', 18 => 'WB2', # (selects two different WB presets besides normal) 19 => 'Effect', }, }, 0x1009 => { #3 Name => 'MacroMode', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x100a => { #3 Name => 'FlashMode', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Auto, Fired', 2 => 'On', 3 => 'Auto, Fired, Red-eye reduction', 4 => 'Slow Sync', 5 => 'Manual', 6 => 'On, Red-eye reduction', 7 => 'Synchro, Red-eye reduction', 8 => 'Auto, Did not fire', }, }, 0x100b => { #3 Name => 'FlashExposureComp', Writable => 'rational64s', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => '$val', }, 0x100c => { #3 Name => 'ManualFlashOutput', Writable => 'rational64s', PrintConv => { 0 => 'Full', -24 => '1/1.4', -48 => '1/2', -72 => '1/2.8', -96 => '1/4', -120 => '1/5.6', -144 => '1/8', -168 => '1/11', -192 => '1/16', -216 => '1/22', -240 => '1/32', -288 => '1/64', }, }, 0x100d => { #3 Name => 'FullPressSnap', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x100e => { #3 Name => 'DynamicRangeExpansion', Writable => 'int16u', PrintConv => { 0 => 'Off', 3 => 'Weak', 4 => 'Medium', 5 => 'Strong', }, }, 0x100f => { #3 Name => 'NoiseReduction', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Weak', 2 => 'Medium', 3 => 'Strong', }, }, 0x1010 => { #3 Name => 'ImageEffects', Writable => 'int16u', PrintConv => { 0 => 'Standard', 1 => 'Vivid', 3 => 'Black & White', 5 => 'B&W Toning Effect', 6 => 'Setting 1', 7 => 'Setting 2', 9 => 'High-contrast B&W', 10 => 'Cross Process', 11 => 'Positive Film', 12 => 'Bleach Bypass', 13 => 'Retro', 15 => 'Miniature', 17 => 'High Key', }, }, 0x1011 => { #3 Name => 'Vignetting', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Low', 2 => 'Medium', 3 => 'High', }, }, 0x1012 => { #PH Name => 'Contrast', Writable => 'int32u', Format => 'int32s', #3 (high-contrast B&W also has -1 and -2 settings) PrintConv => { OTHER => sub { shift }, 2147483647 => 'MAX', #3 (high-contrast B&W effect MAX setting) }, }, 0x1013 => { Name => 'Saturation', Writable => 'int32u' }, #PH 0x1014 => { Name => 'Sharpness', Writable => 'int32u' }, #3 0x1015 => { #3 Name => 'ToningEffect', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Sepia', 2 => 'Red', 3 => 'Green', 4 => 'Blue', 5 => 'Purple', 6 => 'B&W', 7 => 'Color', }, }, 0x1016 => { #3 Name => 'HueAdjust', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Basic', 2 => 'Magenta', 3 => 'Yellow', 4 => 'Normal', 5 => 'Warm', 6 => 'Cool', }, }, 0x1017 => { #3 Name => 'WideAdapter', Writable => 'int16u', PrintConv => { 0 => 'Not Attached', 2 => 'Attached', # (21mm) }, }, 0x1018 => { #3 Name => 'CropMode35mm', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x1019 => { #3 Name => 'NDFilter', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x101a => { Name => 'WBBracketShotNumber', Writable => 'int16u' }, #3 # 0x1100 - related to DR correction (ref 3) 0x1307 => { Name => 'ColorTempKelvin', Writable => 'int32u' }, #3 0x1308 => { Name => 'ColorTemperature', Writable => 'int32u' }, #3 0x1500 => { #3 Name => 'FocalLength', Writable => 'rational64u', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val=~s/\s*mm$//;$val', }, 0x1200 => { #3 Name => 'AFStatus', Writable => 'int16u', PrintConv => { 0 => 'Out of Focus', 1 => 'In Focus', }, }, # 0x1201-0x1204 - related to focus points (ref 3) 0x1201 => { #PH (NC) Name => 'AFAreaXPosition1', Writable => 'int32u', Notes => 'manual AF area position in a 1280x864 image', }, 0x1202 => { Name => 'AFAreaYPosition1', Writable => 'int32u' }, #PH (NC) 0x1203 => { #PH (NC) Name => 'AFAreaXPosition', Writable => 'int32u', Notes => 'manual AF area position in the full image', # (coordinates change to correspond with smaller image # when recording reduced-size JPEG) }, 0x1204 => { Name => 'AFAreaYPosition', Writable => 'int32u' }, #PH (NC) 0x1205 => { #3 Name => 'AFAreaMode', Writable => 'int16u', PrintConv => { 0 => 'Auto', 2 => 'Manual', }, }, 0x1601 => { Name => 'SensorWidth', Writable => 'int32u' }, #3 0x1602 => { Name => 'SensorHeight', Writable => 'int32u' }, #3 0x1603 => { Name => 'CroppedImageWidth', Writable => 'int32u' }, #3 0x1604 => { Name => 'CroppedImageHeight', Writable => 'int32u' }, #3 # 0x1700 - Composite? (0=normal image, 1=interval composite, 2=multi-exposure composite) (ref 3) # 0x1703 - 0=normal, 1=final composite (ref 3) # 0x1704 - 0=normal, 2=final composite (ref 3) 0x2001 => [ { Name => 'RicohSubdir', Condition => q{ $self->{Model} !~ /^Caplio RR1\b/ and ($format ne 'int32u' or $count != 1) }, SubDirectory => { Validate => '$val =~ /^\[Ricoh Camera Info\]/', TagTable => 'Image::ExifTool::Ricoh::Subdir', Start => '$valuePtr + 20', ByteOrder => 'BigEndian', }, }, { Name => 'RicohSubdirIFD', # the CX6 and GR Digital 4 write an int32u pointer in AVI videos -- doh! Condition => '$self->{Model} !~ /^Caplio RR1\b/', Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Ricoh::Subdir', Start => '$val + 20', # (skip over "[Ricoh Camera Info]\0" header) ByteOrder => 'BigEndian', }, }, { Name => 'RicohRR1Subdir', SubDirectory => { Validate => '$val =~ /^\[Ricoh Camera Info\]/', TagTable => 'Image::ExifTool::Ricoh::Subdir', Start => '$valuePtr + 20', ByteOrder => 'BigEndian', # the Caplio RR1 uses a different base address -- doh! Base => '$start-20', }, }, ], 0x4001 => { Name => 'ThetaSubdir', Groups => { 1 => 'MakerNotes' }, # SubIFD needs group 1 set Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Ricoh::ThetaSubdir', Start => '$val', }, }, ); # Ricoh type 2 maker notes (ref PH) # (similar to Kodak::Type11 and GE::Main) %Image::ExifTool::Ricoh::Type2 = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ Tags written by models such as the Ricoh HZ15 and the Pentax XG-1. These are not writable due to numerous formatting errors as written by these cameras. }, # 0x104 - int32u: 1 # 0x200 - int32u[3]: 0 0 0 # 0x202 - int16u: 0 (GE Macro?) # 0x203 - int16u: 0,3 (Kodak PictureEffect?) # 0x204 - rational64u: 0/10 # 0x205 - rational64u: 150/1 # 0x206 - float[6]: (not really float because size should be 2 bytes) 0x207 => { Name => 'RicohModel', Writable => 'string', }, 0x300 => { # brutal. There are lots of errors in the XG-1 maker notes. For the XG-1, # 0x300 has a value of "XG-1Pentax". The "XG-1" part is likely an improperly # stored 0x207 RicohModel, resulting in an erroneous 4-byte offset for this tag Name => 'RicohMake', Writable => 'undef', ValueConv => '$val =~ s/ *$//; $val', }, # 0x306 - int16u: 1 # 0x500 - int16u: 0,1 # 0x501 - int16u: 0 # 0x502 - int16u: 0 # 0x9c9c - int8u[6]: ? # 0xadad - int8u[20480]: ? ); # Ricoh image info (ref 2) %Image::ExifTool::Ricoh::ImageInfo = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, PRIORITY => 0, FORMAT => 'int8u', FIRST_ENTRY => 0, IS_OFFSET => [ 28 ], # tag 28 is 'IsOffset' 0 => { Name => 'RicohImageWidth', Format => 'int16u', }, 2 => { Name => 'RicohImageHeight', Format => 'int16u', }, 6 => { Name => 'RicohDate', Groups => { 2 => 'Time' }, Format => 'int8u[7]', # (what an insane way to encode the date) ValueConv => q{ sprintf("%.2x%.2x:%.2x:%.2x %.2x:%.2x:%.2x", split(' ', $val)); }, ValueConvInv => q{ my @vals = ($val =~ /(\d{1,2})/g); push @vals, 0 if @vals < 7; join(' ', map(hex, @vals)); }, }, 28 => { Name => 'PreviewImageStart', Format => 'int16u', # ha! (only the lower 16 bits, even if > 0xffff) Flags => 'IsOffset', OffsetPair => 30, # associated byte count tagID DataTag => 'PreviewImage', Protected => 2, # prevent preview from being written to MakerNotes of DNG images RawConvInv => q{ return $val if $$self{FILE_TYPE} eq "JPEG"; warn "\n"; # suppress warning return undef; }, }, 30 => { Name => 'PreviewImageLength', Format => 'int16u', OffsetPair => 28, # point to associated offset DataTag => 'PreviewImage', Protected => 2, RawConvInv => q{ return $val if $$self{FILE_TYPE} eq "JPEG"; warn "\n"; # suppress warning return undef; }, }, 32 => { Name => 'FlashMode', PrintConv => { 0 => 'Off', 1 => 'Auto', #PH 2 => 'On', }, }, 33 => { Name => 'Macro', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 34 => { Name => 'Sharpness', PrintConv => { 0 => 'Sharp', 1 => 'Normal', 2 => 'Soft', }, }, 38 => { Name => 'WhiteBalance', PrintConv => { 0 => 'Auto', 1 => 'Daylight', 2 => 'Cloudy', 3 => 'Tungsten', 4 => 'Fluorescent', 5 => 'Manual', #PH (GXR) 7 => 'Detail', 9 => 'Multi-pattern Auto', #PH (GXR) }, }, 39 => { Name => 'ISOSetting', PrintConv => { 0 => 'Auto', 1 => 64, 2 => 100, 4 => 200, 6 => 400, 7 => 800, 8 => 1600, 9 => 'Auto', #PH (? CX3) 10 => 3200, #PH (A16) 11 => '100 (Low)', #PH (A16) }, }, 40 => { Name => 'Saturation', PrintConv => { 0 => 'High', 1 => 'Normal', 2 => 'Low', 3 => 'B&W', 6 => 'Toning Effect', #PH (GXR Sepia,Red,Green,Blue,Purple) 9 => 'Vivid', #PH (GXR) 10 => 'Natural', #PH (GXR) }, }, ); # Ricoh subdirectory tags (ref PH) # NOTE: this subdir is currently not writable because the offsets would require # special code to handle the funny start location and base offset %Image::ExifTool::Ricoh::Subdir = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, # the significance of the following 2 dates is not known. They are usually # within a month of each other, but I have seen differences of nearly a year. # Sometimes the first is more recent, and sometimes the second. # 0x0003 - int32u[1] 0x0004 => { # (NC) Name => 'ManufactureDate1', Groups => { 2 => 'Time' }, Writable => 'string', Count => 20, }, 0x0005 => { # (NC) Name => 'ManufactureDate2', Groups => { 2 => 'Time' }, Writable => 'string', Count => 20, }, # 0x0006 - undef[16] ? # 0x0007 - int32u[1] ? # 0x000c - int32u[2] 1st number is a counter (file number? shutter count?) - PH # 0x0014 - int8u[338] could contain some data related to face detection? - PH # 0x0015 - int8u[2]: related to noise reduction? 0x001a => { #PH Name => 'FaceInfo', SubDirectory => { TagTable => 'Image::ExifTool::Ricoh::FaceInfo' }, }, 0x0029 => { Name => 'FirmwareInfo', SubDirectory => { TagTable => 'Image::ExifTool::Ricoh::FirmwareInfo' }, }, 0x002a => { Name => 'NoiseReduction', # this is the applied value if NR is set to "Auto" Writable => 'int32u', PrintConv => { 0 => 'Off', 1 => 'Weak', 2 => 'Strong', 3 => 'Max', }, }, 0x002c => { # (GXR) Name => 'SerialInfo', SubDirectory => { TagTable => 'Image::ExifTool::Ricoh::SerialInfo' }, } # 0x000E ProductionNumber? (ref 2) [no. zero for most models - PH] ); # Ricoh Theta subdirectory tags - Contains orientation information (ref 4) %Image::ExifTool::Ricoh::ThetaSubdir = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, # 0x0001 - int16u[1] ? # 0x0002 - int16u[1] ? 0x0003 => { Name => 'Accelerometer', Writable => 'rational64s', Count => 2, }, 0x0004 => { Name => 'Compass', Writable => 'rational64u', }, # 0x0005 - int16u[1] ? # 0x0006 - int16u[1] ? # 0x0007 - int16u[1] ? # 0x0008 - int16u[1] ? # 0x0009 - int16u[1] ? 0x000a => { Name => 'TimeZone', Writable => 'string', }, # 0x0101 - int16u[4] ISO (why 4 values?) # 0x0102 - rational64s[2] FNumber (why 2 values?) # 0x0103 - rational64u[2] ExposureTime (why 2 values?) # 0x0104 - string[9] SerialNumber? # 0x0105 - string[9] SerialNumber? ); # face detection information (ref PH, CX4) %Image::ExifTool::Ricoh::FaceInfo = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, DATAMEMBER => [ 181 ], 0xb5 => { # (should be int16u at 0xb4?) Name => 'FacesDetected', DataMember => 'FacesDetected', RawConv => '$$self{FacesDetected} = $val', }, 0xb6 => { Name => 'FaceDetectFrameSize', Format => 'int16u[2]', }, 0xbc => { Name => 'Face1Position', Condition => '$$self{FacesDetected} >= 1', Format => 'int16u[4]', Notes => q{ left, top, width and height of detected face in coordinates of FaceDetectFrameSize with increasing Y downwards }, }, 0xc8 => { Name => 'Face2Position', Condition => '$$self{FacesDetected} >= 2', Format => 'int16u[4]', }, 0xd4 => { Name => 'Face3Position', Condition => '$$self{FacesDetected} >= 3', Format => 'int16u[4]', }, 0xe0 => { Name => 'Face4Position', Condition => '$$self{FacesDetected} >= 4', Format => 'int16u[4]', }, 0xec => { Name => 'Face5Position', Condition => '$$self{FacesDetected} >= 5', Format => 'int16u[4]', }, 0xf8 => { Name => 'Face6Position', Condition => '$$self{FacesDetected} >= 6', Format => 'int16u[4]', }, 0x104 => { Name => 'Face7Position', Condition => '$$self{FacesDetected} >= 7', Format => 'int16u[4]', }, 0x110 => { Name => 'Face8Position', Condition => '$$self{FacesDetected} >= 8', Format => 'int16u[4]', }, ); # firmware version information (ref PH) %Image::ExifTool::Ricoh::FirmwareInfo = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, 0x00 => { Name => 'FirmwareRevision', Format => 'string[12]', }, 0x0c => { Name => 'FirmwareRevision2', Format => 'string[12]', }, ); # serial/version number information written by GXR (ref PH) %Image::ExifTool::Ricoh::SerialInfo = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, NOTES => 'This information is found in images from the GXR.', 0 => { Name => 'BodyFirmware', #(NC) Format => 'string[16]', # observed: "RS1 :V00560000" --> FirmwareVersion "Rev0056" # "RS1 :V01020200" --> FirmwareVersion "Rev0102" }, 16 => { Name => 'BodySerialNumber', Format => 'string[16]', # observed: "SID:00100056" --> "WD00100056" on plate }, 32 => { Name => 'LensFirmware', #(NC) Format => 'string[16]', # observed: "RL1 :V00560000", "RL1 :V01020200" - A12 50mm F2.5 Macro # "RL2 :V00560000", "RL2 :V01020300" - S10 24-70mm F2.5-4.4 VC # --> used in a Composite tag to determine LensType }, 48 => { Name => 'LensSerialNumber', Format => 'string[16]', # observed: (S10) "LID:00010024" --> "WF00010024" on plate # (A12) "LID:00010054" --> "WE00010029" on plate?? }, ); # Ricoh text-type maker notes (PH) %Image::ExifTool::Ricoh::Text = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PROCESS_PROC => \&ProcessRicohText, NOTES => q{ Some Ricoh DC and RDC models use a text-based format for their maker notes instead of the IFD format used by the Caplio models. Below is a list of known tags in this information. }, Rev => { Name => 'FirmwareVersion', PrintConv => '$val=~/^\d+$/ ? sprintf("%.2f",$val/100) : $val', PrintConvInv => '$val=~/^(\d+)\.(\d+)$/ ? sprintf("%.2d%.2d",$1,$2) : $val', }, Rv => { Name => 'FirmwareVersion', PrintConv => '$val=~/^\d+$/ ? sprintf("%.2f",$val/100) : $val', PrintConvInv => '$val=~/^(\d+)\.(\d+)$/ ? sprintf("%.2d%.2d",$1,$2) : $val', }, Rg => 'RedGain', Gg => 'GreenGain', Bg => 'BlueGain', ); %Image::ExifTool::Ricoh::RMETA = ( GROUPS => { 0 => 'APP5', 1 => 'RMETA', 2 => 'Image' }, PROCESS_PROC => \&Image::ExifTool::Ricoh::ProcessRicohRMETA, NOTES => q{ The Ricoh Caplio Pro G3 has the ability to add custom fields to the APP5 "RMETA" segment of JPEG images. While only a few observed tags have been defined below, ExifTool will extract any information found here. }, 'Sign type' => { Name => 'SignType', PrintConv => { 1 => 'Directional', 2 => 'Warning', 3 => 'Information', } }, Location => { PrintConv => { 1 => 'Verge', 2 => 'Gantry', 3 => 'Central reservation', 4 => 'Roundabout', } }, Lit => { PrintConv => { 1 => 'Yes', 2 => 'No', } }, Condition => { PrintConv => { 1 => 'Good', 2 => 'Fair', 3 => 'Poor', 4 => 'Damaged', } }, Azimuth => { PrintConv => { 1 => 'N', 2 => 'NNE', 3 => 'NE', 4 => 'ENE', 5 => 'E', 6 => 'ESE', 7 => 'SE', 8 => 'SSE', 9 => 'S', 10 => 'SSW', 11 => 'SW', 12 => 'WSW', 13 => 'W', 14 => 'WNW', 15 => 'NW', 16 => 'NNW', } }, _audio => { Name => 'SoundFile', Notes => 'audio data recorded in JPEG images by the G700SE', }, ); # information stored in Ricoh AVI images (ref PH) %Image::ExifTool::Ricoh::AVI = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, ucmt => { Name => 'Comment', # Ricoh writes a "Unicode" header even when text is ASCII (spaces anyway) ValueConv => '$_=$val; s/^(Unicode\0|ASCII\0\0\0)//; tr/\0//d; s/\s+$//; $_', }, mnrt => { Name => 'MakerNoteRicoh', SubDirectory => { TagTable => 'Image::ExifTool::Ricoh::Main', Start => '$valuePtr + 8', ByteOrder => 'BigEndian', Base => '8', }, }, rdc2 => { Name => 'RicohRDC2', Unknown => 1, ValueConv => 'unpack("H*",$val)', # have seen values like 0a000444 and 00000000 - PH }, thum => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Binary => 1, }, ); # Ricoh composite tags %Image::ExifTool::Ricoh::Composite = ( GROUPS => { 2 => 'Camera' }, LensID => { SeparateTable => 'Ricoh LensID', Require => 'Ricoh:LensFirmware', RawConv => '$val[0] ? $val[0] : undef', ValueConv => '$val=~s/\s*:.*//; $val', PrintConv => \%ricohLensIDs, }, RicohPitch => { Require => 'Ricoh:Accelerometer', ValueConv => 'my @v = split(" ",$val); $v[1]', }, RicohRoll => { Require => 'Ricoh:Accelerometer', ValueConv => 'my @v = split(" ",$val); $v[0] <= 180 ? $v[0] : $v[0] - 360', }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::Ricoh'); #------------------------------------------------------------------------------ # Process Ricoh text-based maker notes # Inputs: 0) ExifTool object reference # 1) Reference to directory information hash # 2) Pointer to tag table for this directory # Returns: 1 on success, otherwise returns 0 and sets a Warning sub ProcessRicohText($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataLen = $$dirInfo{DataLen}; my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || $dataLen - $dirStart; my $verbose = $et->Options('Verbose'); my $data = substr($$dataPt, $dirStart, $dirLen); return 1 if $data =~ /^\0/; # blank Ricoh maker notes # validate text maker notes unless ($data =~ /^(Rev|Rv)/) { $et->Warn('Bad Ricoh maker notes'); return 0; } while ($data =~ m/([A-Z][a-z]{1,2})([0-9A-F]+);/sg) { my $tag = $1; my $val = $2; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); if ($verbose) { $et->VerboseInfo($tag, $tagInfo, Table => $tagTablePtr, Value => $val, ); } unless ($tagInfo) { next unless $$et{OPTIONS}{Unknown}; $tagInfo = { Name => "Ricoh_Text_$tag", Unknown => 1, PrintConv => 'length($val) > 60 ? substr($val,0,55) . "[...]" : $val', }; # add tag information to table AddTagToTable($tagTablePtr, $tag, $tagInfo); } $et->FoundTag($tagInfo, $val); } return 1; } #------------------------------------------------------------------------------ # Process Ricoh APP5 RMETA information # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, otherwise returns 0 and sets a Warning sub ProcessRicohRMETA($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart}; my $dataLen = length($$dataPt); my $dirLen = $dataLen - $dirStart; my $verbose = $et->Options('Verbose'); $et->VerboseDir('Ricoh RMETA') if $verbose; $dirLen < 20 and $et->Warn('Truncated Ricoh RMETA data', 1), return 0; my $byteOrder = substr($$dataPt, $dirStart, 2); $byteOrder = GetByteOrder() if $byteOrder eq "\0\0"; # (same order as container) SetByteOrder($byteOrder) or $et->Warn('Bad Ricoh RMETA data', 1), return 0; # get the RMETA segment number my $rmetaNum = Get16u($dataPt, $dirStart+4); if ($rmetaNum != 0) { # not sure how to recognize audio, so do it by checking for "RIFF" header # and assume all subsequent RMETA segments are part of the audio data # (but it looks like the int16u at $dirStart+6 is the next block number # if the data is continued, or 0 for the last block) $dirLen < 14 and $et->Warn('Short Ricoh RMETA block', 1), return 0; my $audioLen = Get16u($dataPt, $dirStart+12); $audioLen + 14 > $dirLen and $et->Warn('Truncated Ricoh RMETA audio data', 1), return 0; my $buff = substr($$dataPt, $dirStart + 14, $audioLen); if ($audioLen >= 4 and substr($buff, 0, 4) eq 'RIFF') { $et->HandleTag($tagTablePtr, '_audio', \$buff); } elsif ($$et{VALUE}{SoundFile}) { ${$$et{VALUE}{SoundFile}} .= $buff; } else { $et->Warn('Unknown Ricoh RMETA type', 1); return 0; } return 1; } # decode standard RMETA tag directory my (@tags, @vals, @nums, $valPos, $numPos); my $pos = $dirStart + Get16u($dataPt, $dirStart+8); my $numEntries = Get16u($dataPt, $pos); $numEntries > 100 and $et->Warn('Bad RMETA entry count'), return 0; $pos += 10; # start of first RMETA section # loop through RMETA sections while ($pos <= $dataLen - 4) { my $type = Get16u($dataPt, $pos); my $size = Get16u($dataPt, $pos + 2); last unless $size; $pos += 4; $size -= 2; if ($size < 0 or $pos + $size > $dataLen) { $et->Warn('Corrupted Ricoh RMETA data', 1); last; } my $dat = substr($$dataPt, $pos, $size); if ($verbose) { $et->VPrint(2, "$$et{INDENT}RMETA section type=$type size=$size\n"); if ($verbose > 2) { my %dumpParms = ( Addr => $$dirInfo{DataPos} + $pos, Prefix => $$et{INDENT} ); $dumpParms{MaxLen} = 96 if $verbose == 3; Image::ExifTool::HexDump(\$dat, undef, %dumpParms); } } if ($type == 1) { # section 1: tag names # save the tag names @tags = split /\0/, $dat, $numEntries+1; } elsif ($type == 2 || $type == 18) { # section 2/18: string values (G800 uses type 18) # save the tag values (assume "ASCII\0" encoding since others never seen) @vals = split /\0/, $dat, $numEntries+1; $valPos = $pos; # save position of first string value } elsif ($type == 3) { # section 3: numerical values if ($size < $numEntries * 2) { $et->Warn('Truncated RMETA section 3'); } else { # save the numerical tag values # (0=empty, 0xffff=text input, otherwise menu item number) @nums = unpack(($byteOrder eq 'MM' ? 'n' : 'v').$numEntries, $dat); $numPos = $pos; # save position of numerical values } } elsif ($type != 16) { $et->Warn("Unrecognized RMETA section (type $type, len $size)"); } $pos += $size; } return 1 unless @tags or @vals; $valPos or $valPos = 0; # (just in case there was no value section) # find next tag in null-delimited list # unpack numerical values from block of int16u values my ($i, $name); for ($i=0; $i<$numEntries; ++$i) { my $tag = $tags[$i]; my $val = $vals[$i]; $val = '' unless defined $val; unless (defined $tag and length $tag) { length $val or ++$valPos, next; # (skip empty entries) $tag = ''; } ($name = $tag) =~ s/\b([a-z])/\U$1/gs; # capitalize all words $name =~ s/ (\w)/\U$1/g; # remove special characters $name = 'RMETA_Unknown' unless length($name); my $num = $nums[$i]; my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); if ($tagInfo) { # make sure print conversion is defined $$tagInfo{PrintConv} = { } unless ref $$tagInfo{PrintConv} eq 'HASH'; } else { # create tagInfo hash $tagInfo = { Name => $name, PrintConv => { } }; AddTagToTable($tagTablePtr, $tag, $tagInfo); } # use string value directly if no numerical value $num = $val unless defined $num; # add conversion for this value (replacing any existing entry) $tagInfo->{PrintConv}->{$num} = length $val ? $val : $num; if ($verbose) { my %datParms; if (length $val) { %datParms = ( Start => $valPos, Size => length($val), Format => 'string' ); } elsif ($numPos) { %datParms = ( Start => $numPos + $i * 2, Size => 2, Format => 'int16u' ); } %datParms and $datParms{DataPt} = $dataPt, $datParms{DataPos} = $$dirInfo{DataPos}; $et->VerboseInfo($tag, $tagInfo, Table=>$tagTablePtr, Value=>$num, %datParms); } $et->FoundTag($tagInfo, $num); $valPos += length($val) + 1; } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::Ricoh - Ricoh EXIF maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Ricoh maker notes EXIF meta information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.ozhiker.com/electronics/pjmt/jpeg_info/ricoh_mn.html> =back =head1 ACKNOWLEDGEMENTS Thanks to Tim Gray for his help decoding a number of tags for the Ricoh GR. =head1 SEE ALSO L<Image::ExifTool::TagNames/Ricoh Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/RIFF.pm�����������������������������������������������������000644 �000765 �000024 �00000145050 12642461333 021001� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: RIFF.pm # # Description: Read RIFF/WAV/AVI meta information # # Revisions: 09/14/2005 - P. Harvey Created # # References: 1) http://www.exif.org/Exif2-2.PDF # 2) http://www.vlsi.fi/datasheets/vs1011.pdf # 3) http://www.music-center.com.br/spec_rif.htm # 4) http://www.codeproject.com/audio/wavefiles.asp # 5) http://msdn.microsoft.com/archive/en-us/directx9_c/directx/htm/avirifffilereference.asp # 6) http://research.microsoft.com/invisible/tests/riff.h.htm # 7) http://www.onicos.com/staff/iz/formats/wav.html # 8) http://graphics.cs.uni-sb.de/NMM/dist-0.9.1/Docs/Doxygen/html/mmreg_8h-source.html # 9) http://developers.videolan.org/vlc/vlc/doc/doxygen/html/codecs_8h-source.html # 10) http://wiki.multimedia.cx/index.php?title=TwoCC # 11) Andreas Winter (SCLive) private communication # 12) http://abcavi.kibi.ru/infotags.htm # 13) http://tech.ebu.ch/docs/tech/tech3285.pdf # 14) https://developers.google.com/speed/webp/docs/riff_container #------------------------------------------------------------------------------ package Image::ExifTool::RIFF; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.41'; sub ConvertTimecode($); # recognized RIFF variants my %riffType = ( 'WAVE' => 'WAV', 'AVI ' => 'AVI', 'WEBP' => 'WEBP', 'LA02' => 'LA', 'LA03' => 'LA', 'LA04' => 'LA', 'OFR ' => 'OFR', 'LPAC' => 'PAC', 'wvpk' => 'WV', ); # MIME types of recognized RIFF-format files my %riffMimeType = ( WAV => 'audio/x-wav', AVI => 'video/x-msvideo', WEBP => 'image/webp', LA => 'audio/x-nspaudio', OFR => 'audio/x-ofr', PAC => 'audio/x-lpac', WV => 'audio/x-wavpack', ); %Image::ExifTool::RIFF::audioEncoding = ( #2 Notes => 'These "TwoCC" audio encoding codes are used in RIFF and ASF files.', 0x01 => 'Microsoft PCM', 0x02 => 'Microsoft ADPCM', 0x03 => 'Microsoft IEEE float', 0x04 => 'Compaq VSELP', #4 0x05 => 'IBM CVSD', #4 0x06 => 'Microsoft a-Law', 0x07 => 'Microsoft u-Law', 0x08 => 'Microsoft DTS', #4 0x09 => 'DRM', #4 0x0a => 'WMA 9 Speech', #9 0x0b => 'Microsoft Windows Media RT Voice', #10 0x10 => 'OKI-ADPCM', 0x11 => 'Intel IMA/DVI-ADPCM', 0x12 => 'Videologic Mediaspace ADPCM', #4 0x13 => 'Sierra ADPCM', #4 0x14 => 'Antex G.723 ADPCM', #4 0x15 => 'DSP Solutions DIGISTD', 0x16 => 'DSP Solutions DIGIFIX', 0x17 => 'Dialoic OKI ADPCM', #6 0x18 => 'Media Vision ADPCM', #6 0x19 => 'HP CU', #7 0x1a => 'HP Dynamic Voice', #10 0x20 => 'Yamaha ADPCM', #6 0x21 => 'SONARC Speech Compression', #6 0x22 => 'DSP Group True Speech', #6 0x23 => 'Echo Speech Corp.', #6 0x24 => 'Virtual Music Audiofile AF36', #6 0x25 => 'Audio Processing Tech.', #6 0x26 => 'Virtual Music Audiofile AF10', #6 0x27 => 'Aculab Prosody 1612', #7 0x28 => 'Merging Tech. LRC', #7 0x30 => 'Dolby AC2', 0x31 => 'Microsoft GSM610', 0x32 => 'MSN Audio', #6 0x33 => 'Antex ADPCME', #6 0x34 => 'Control Resources VQLPC', #6 0x35 => 'DSP Solutions DIGIREAL', #6 0x36 => 'DSP Solutions DIGIADPCM', #6 0x37 => 'Control Resources CR10', #6 0x38 => 'Natural MicroSystems VBX ADPCM', #6 0x39 => 'Crystal Semiconductor IMA ADPCM', #6 0x3a => 'Echo Speech ECHOSC3', #6 0x3b => 'Rockwell ADPCM', 0x3c => 'Rockwell DIGITALK', 0x3d => 'Xebec Multimedia', #6 0x40 => 'Antex G.721 ADPCM', 0x41 => 'Antex G.728 CELP', 0x42 => 'Microsoft MSG723', #7 0x43 => 'IBM AVC ADPCM', #10 0x45 => 'ITU-T G.726', #9 0x50 => 'Microsoft MPEG', 0x51 => 'RT23 or PAC', #7 0x52 => 'InSoft RT24', #4 0x53 => 'InSoft PAC', #4 0x55 => 'MP3', 0x59 => 'Cirrus', #7 0x60 => 'Cirrus Logic', #6 0x61 => 'ESS Tech. PCM', #6 0x62 => 'Voxware Inc.', #6 0x63 => 'Canopus ATRAC', #6 0x64 => 'APICOM G.726 ADPCM', 0x65 => 'APICOM G.722 ADPCM', 0x66 => 'Microsoft DSAT', #6 0x67 => 'Micorsoft DSAT DISPLAY', #6 0x69 => 'Voxware Byte Aligned', #7 0x70 => 'Voxware AC8', #7 0x71 => 'Voxware AC10', #7 0x72 => 'Voxware AC16', #7 0x73 => 'Voxware AC20', #7 0x74 => 'Voxware MetaVoice', #7 0x75 => 'Voxware MetaSound', #7 0x76 => 'Voxware RT29HW', #7 0x77 => 'Voxware VR12', #7 0x78 => 'Voxware VR18', #7 0x79 => 'Voxware TQ40', #7 0x7a => 'Voxware SC3', #10 0x7b => 'Voxware SC3', #10 0x80 => 'Soundsoft', #6 0x81 => 'Voxware TQ60', #7 0x82 => 'Microsoft MSRT24', #7 0x83 => 'AT&T G.729A', #7 0x84 => 'Motion Pixels MVI MV12', #7 0x85 => 'DataFusion G.726', #7 0x86 => 'DataFusion GSM610', #7 0x88 => 'Iterated Systems Audio', #7 0x89 => 'Onlive', #7 0x8a => 'Multitude, Inc. FT SX20', #10 0x8b => 'Infocom ITS A/S G.721 ADPCM', #10 0x8c => 'Convedia G729', #10 0x8d => 'Not specified congruency, Inc.', #10 0x91 => 'Siemens SBC24', #7 0x92 => 'Sonic Foundry Dolby AC3 APDIF', #7 0x93 => 'MediaSonic G.723', #8 0x94 => 'Aculab Prosody 8kbps', #8 0x97 => 'ZyXEL ADPCM', #7, 0x98 => 'Philips LPCBB', #7 0x99 => 'Studer Professional Audio Packed', #7 0xa0 => 'Malden PhonyTalk', #8 0xa1 => 'Racal Recorder GSM', #10 0xa2 => 'Racal Recorder G720.a', #10 0xa3 => 'Racal G723.1', #10 0xa4 => 'Racal Tetra ACELP', #10 0xb0 => 'NEC AAC NEC Corporation', #10 0xff => 'AAC', #10 0x100 => 'Rhetorex ADPCM', #6 0x101 => 'IBM u-Law', #3 0x102 => 'IBM a-Law', #3 0x103 => 'IBM ADPCM', #3 0x111 => 'Vivo G.723', #7 0x112 => 'Vivo Siren', #7 0x120 => 'Philips Speech Processing CELP', #10 0x121 => 'Philips Speech Processing GRUNDIG', #10 0x123 => 'Digital G.723', #7 0x125 => 'Sanyo LD ADPCM', #8 0x130 => 'Sipro Lab ACEPLNET', #8 0x131 => 'Sipro Lab ACELP4800', #8 0x132 => 'Sipro Lab ACELP8V3', #8 0x133 => 'Sipro Lab G.729', #8 0x134 => 'Sipro Lab G.729A', #8 0x135 => 'Sipro Lab Kelvin', #8 0x136 => 'VoiceAge AMR', #10 0x140 => 'Dictaphone G.726 ADPCM', #8 0x150 => 'Qualcomm PureVoice', #8 0x151 => 'Qualcomm HalfRate', #8 0x155 => 'Ring Zero Systems TUBGSM', #8 0x160 => 'Microsoft Audio1', #8 0x161 => 'Windows Media Audio V2 V7 V8 V9 / DivX audio (WMA) / Alex AC3 Audio', #10 0x162 => 'Windows Media Audio Professional V9', #10 0x163 => 'Windows Media Audio Lossless V9', #10 0x164 => 'WMA Pro over S/PDIF', #10 0x170 => 'UNISYS NAP ADPCM', #10 0x171 => 'UNISYS NAP ULAW', #10 0x172 => 'UNISYS NAP ALAW', #10 0x173 => 'UNISYS NAP 16K', #10 0x174 => 'MM SYCOM ACM SYC008 SyCom Technologies', #10 0x175 => 'MM SYCOM ACM SYC701 G726L SyCom Technologies', #10 0x176 => 'MM SYCOM ACM SYC701 CELP54 SyCom Technologies', #10 0x177 => 'MM SYCOM ACM SYC701 CELP68 SyCom Technologies', #10 0x178 => 'Knowledge Adventure ADPCM', #10 0x180 => 'Fraunhofer IIS MPEG2AAC', #10 0x190 => 'Digital Theater Systems DTS DS', #10 0x200 => 'Creative Labs ADPCM', #6 0x202 => 'Creative Labs FASTSPEECH8', #6 0x203 => 'Creative Labs FASTSPEECH10', #6 0x210 => 'UHER ADPCM', #8 0x215 => 'Ulead DV ACM', #10 0x216 => 'Ulead DV ACM', #10 0x220 => 'Quarterdeck Corp.', #6 0x230 => 'I-Link VC', #8 0x240 => 'Aureal Semiconductor Raw Sport', #8 0x241 => 'ESST AC3', #10 0x250 => 'Interactive Products HSX', #8 0x251 => 'Interactive Products RPELP', #8 0x260 => 'Consistent CS2', #8 0x270 => 'Sony SCX', #8 0x271 => 'Sony SCY', #10 0x272 => 'Sony ATRAC3', #10 0x273 => 'Sony SPC', #10 0x280 => 'TELUM Telum Inc.', #10 0x281 => 'TELUMIA Telum Inc.', #10 0x285 => 'Norcom Voice Systems ADPCM', #10 0x300 => 'Fujitsu FM TOWNS SND', #6 0x301 => 'Fujitsu (not specified)', #10 0x302 => 'Fujitsu (not specified)', #10 0x303 => 'Fujitsu (not specified)', #10 0x304 => 'Fujitsu (not specified)', #10 0x305 => 'Fujitsu (not specified)', #10 0x306 => 'Fujitsu (not specified)', #10 0x307 => 'Fujitsu (not specified)', #10 0x308 => 'Fujitsu (not specified)', #10 0x350 => 'Micronas Semiconductors, Inc. Development', #10 0x351 => 'Micronas Semiconductors, Inc. CELP833', #10 0x400 => 'Brooktree Digital', #6 0x401 => 'Intel Music Coder (IMC)', #10 0x402 => 'Ligos Indeo Audio', #10 0x450 => 'QDesign Music', #8 0x500 => 'On2 VP7 On2 Technologies', #10 0x501 => 'On2 VP6 On2 Technologies', #10 0x680 => 'AT&T VME VMPCM', #7 0x681 => 'AT&T TCP', #8 0x700 => 'YMPEG Alpha (dummy for MPEG-2 compressor)', #10 0x8ae => 'ClearJump LiteWave (lossless)', #10 0x1000 => 'Olivetti GSM', #6 0x1001 => 'Olivetti ADPCM', #6 0x1002 => 'Olivetti CELP', #6 0x1003 => 'Olivetti SBC', #6 0x1004 => 'Olivetti OPR', #6 0x1100 => 'Lernout & Hauspie', #6 0x1101 => 'Lernout & Hauspie CELP codec', #10 0x1102 => 'Lernout & Hauspie SBC codec', #10 0x1103 => 'Lernout & Hauspie SBC codec', #10 0x1104 => 'Lernout & Hauspie SBC codec', #10 0x1400 => 'Norris Comm. Inc.', #6 0x1401 => 'ISIAudio', #7 0x1500 => 'AT&T Soundspace Music Compression', #7 0x181c => 'VoxWare RT24 speech codec', #10 0x181e => 'Lucent elemedia AX24000P Music codec', #10 0x1971 => 'Sonic Foundry LOSSLESS', #10 0x1979 => 'Innings Telecom Inc. ADPCM', #10 0x1c07 => 'Lucent SX8300P speech codec', #10 0x1c0c => 'Lucent SX5363S G.723 compliant codec', #10 0x1f03 => 'CUseeMe DigiTalk (ex-Rocwell)', #10 0x1fc4 => 'NCT Soft ALF2CD ACM', #10 0x2000 => 'FAST Multimedia DVM', #7 0x2001 => 'Dolby DTS (Digital Theater System)', #10 0x2002 => 'RealAudio 1 / 2 14.4', #10 0x2003 => 'RealAudio 1 / 2 28.8', #10 0x2004 => 'RealAudio G2 / 8 Cook (low bitrate)', #10 0x2005 => 'RealAudio 3 / 4 / 5 Music (DNET)', #10 0x2006 => 'RealAudio 10 AAC (RAAC)', #10 0x2007 => 'RealAudio 10 AAC+ (RACP)', #10 0x2500 => 'Reserved range to 0x2600 Microsoft', #10 0x3313 => 'makeAVIS (ffvfw fake AVI sound from AviSynth scripts)', #10 0x4143 => 'Divio MPEG-4 AAC audio', #10 0x4201 => 'Nokia adaptive multirate', #10 0x4243 => 'Divio G726 Divio, Inc.', #10 0x434c => 'LEAD Speech', #10 0x564c => 'LEAD Vorbis', #10 0x5756 => 'WavPack Audio', #10 0x674f => 'Ogg Vorbis (mode 1)', #10 0x6750 => 'Ogg Vorbis (mode 2)', #10 0x6751 => 'Ogg Vorbis (mode 3)', #10 0x676f => 'Ogg Vorbis (mode 1+)', #10 0x6770 => 'Ogg Vorbis (mode 2+)', #10 0x6771 => 'Ogg Vorbis (mode 3+)', #10 0x7000 => '3COM NBX 3Com Corporation', #10 0x706d => 'FAAD AAC', #10 0x7a21 => 'GSM-AMR (CBR, no SID)', #10 0x7a22 => 'GSM-AMR (VBR, including SID)', #10 0xa100 => 'Comverse Infosys Ltd. G723 1', #10 0xa101 => 'Comverse Infosys Ltd. AVQSBC', #10 0xa102 => 'Comverse Infosys Ltd. OLDSBC', #10 0xa103 => 'Symbol Technologies G729A', #10 0xa104 => 'VoiceAge AMR WB VoiceAge Corporation', #10 0xa105 => 'Ingenient Technologies Inc. G726', #10 0xa106 => 'ISO/MPEG-4 advanced audio Coding', #10 0xa107 => 'Encore Software Ltd G726', #10 0xa109 => 'Speex ACM Codec xiph.org', #10 0xdfac => 'DebugMode SonicFoundry Vegas FrameServer ACM Codec', #10 0xe708 => 'Unknown -', #10 0xf1ac => 'Free Lossless Audio Codec FLAC', #10 0xfffe => 'Extensible', #7 0xffff => 'Development', #4 ); # RIFF info %Image::ExifTool::RIFF::Main = ( PROCESS_PROC => \&Image::ExifTool::RIFF::ProcessChunks, NOTES => q{ The RIFF container format is used various types of fines including WAV, AVI, WEBP, LA, OFR, PAC and WV. According to the EXIF specification, Meta information is embedded in two types of RIFF C<LIST> chunks: C<INFO> and C<exif>, and information about the audio content is stored in the C<fmt > chunk. As well as this information, some video information and proprietary manufacturer-specific information is also extracted. Large AVI videos may be a concatenation of two or more RIFF chunks. For these files, information is extracted from subsequent RIFF chunks as sub-documents, but the Duration is calculated for the full video. }, # (not 100% sure that the concatination technique mentioned above is valid - PH) 'fmt ' => { Name => 'AudioFormat', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::AudioFormat' }, }, 'bext' => { Name => 'BroadcastExtension', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::BroadcastExt' }, }, LIST_INFO => { Name => 'Info', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::Info' }, }, LIST_exif => { Name => 'Exif', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::Exif' }, }, LIST_hdrl => { # AVI header LIST chunk Name => 'Hdrl', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::Hdrl' }, }, LIST_Tdat => { #PH (Adobe CS3 Bridge) Name => 'Tdat', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::Tdat' }, }, LIST_ncdt => { #PH (Nikon metadata) Name => 'NikonData', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AVI', # define ProcessProc here so we don't need to load RIFF.pm from Nikon.pm ProcessProc => \&Image::ExifTool::RIFF::ProcessChunks, }, }, LIST_hydt => { #PH (Pentax metadata) Name => 'PentaxData', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::AVI', ProcessProc => \&Image::ExifTool::RIFF::ProcessChunks, }, }, # seen LIST_JUNK JUNK => [ { Name => 'OlympusJunk', Condition => '$$valPt =~ /^OLYMDigital Camera/', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::AVI' }, }, { Name => 'CasioJunk', Condition => '$$valPt =~ /^QVMI/', # Casio stores standard EXIF-format information in AVI videos (EX-S600) SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', DirName => 'IFD0', Multi => 0, # (IFD1 is not written) Start => 10, ByteOrder => 'BigEndian', }, }, { Name => 'RicohJunk', # the Ricoh Caplio GX stores sub-chunks in here Condition => '$$valPt =~ /^ucmt/', SubDirectory => { TagTable => 'Image::ExifTool::Ricoh::AVI', ProcessProc => \&Image::ExifTool::RIFF::ProcessChunks, }, }, { Name => 'PentaxJunk', # (Optio RS1000) Condition => '$$valPt =~ /^IIII\x01\0/', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::Junk' }, }, { Name => 'PentaxJunk2', # (Optio RZ18) Condition => '$$valPt =~ /^PENTDigital Camera/', SubDirectory => { TagTable => 'Image::ExifTool::Pentax::Junk2' }, }, { Name => 'TextJunk', # try to interpret unknown junk as an ASCII string RawConv => '$val =~ /^([^\0-\x1f\x7f-\xff]+)\0*$/ ? $1 : undef', } ], _PMX => { #PH (Adobe CS3 Bridge) Name => 'XMP', Notes => 'AVI and WAV files', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' }, }, JUNQ => { #PH (Adobe CS3 Bridge) # old XMP is preserved when metadata is replaced in Bridge Name => 'OldXMP', Binary => 1, }, olym => { Name => 'Olym', SubDirectory => { TagTable => 'Image::ExifTool::Olympus::WAV' }, }, fact => { Name => 'NumberOfSamples', RawConv => 'Get32u(\$val, 0)', }, 'cue ' => { Name => 'CuePoints', Binary => 1, }, afsp => { }, IDIT => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, ValueConv => 'Image::ExifTool::RIFF::ConvertRIFFDate($val)', PrintConv => '$self->ConvertDateTime($val)', }, # # WebP-specific tags # EXIF => { # (WebP) Name => 'EXIF', Notes => 'WebP files', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', ProcessProc => \&Image::ExifTool::ProcessTIFF, }, }, 'XMP ' => { #14 (WebP) Name => 'XMP', Notes => 'WebP files', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Main' }, }, ICCP => { #14 (WebP) Name => 'ICC_Profile', Notes => 'WebP files', SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' }, }, 'VP8 ' => { # (WebP lossy) Name => 'VP8Bitstream', Condition => '$$valPt =~ /^...\x9d\x01\x2a/s', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::VP8' }, }, VP8L => { #14 (WebP lossless) Name => 'VP8L', Condition => '$$valPt =~ /^\x2f/', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::VP8L' }, }, VP8X => { #14 (WebP extended) Name => 'VP8X', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::VP8X' }, }, ANIM => { #14 (WebP animation) Name => 'ANIM', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::ANIM' }, }, ANMF => { #14 (WebP animation frame) Name => 'ANMF', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::ANMF' }, }, ALPH => { #14 (WebP alpha) Name => 'ALPH', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::ALPH' }, }, ); # the maker notes used by some digital cameras %Image::ExifTool::RIFF::Junk = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Audio' }, ); # Format and Audio Stream Format chunk data %Image::ExifTool::RIFF::AudioFormat = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Audio' }, FORMAT => 'int16u', 0 => { Name => 'Encoding', PrintHex => 1, PrintConv => \%Image::ExifTool::RIFF::audioEncoding, SeparateTable => 'AudioEncoding', }, 1 => 'NumChannels', 2 => { Name => 'SampleRate', Format => 'int32u', }, 4 => { Name => 'AvgBytesPerSec', Format => 'int32u', }, # uninteresting # 6 => 'BlockAlignment', 7 => 'BitsPerSample', ); # Broadcast Audio Extension 'bext' information (ref 13) %Image::ExifTool::RIFF::BroadcastExt = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Audio' }, NOTES => q{ Information found in the Broadcast Audio Extension chunk (see L<http://tech.ebu.ch/docs/tech/tech3285.pdf>). }, 0 => { Name => 'Description', Format => 'string[256]', }, 256 => { Name => 'Originator', Format => 'string[32]', }, 288 => { Name => 'OriginatorReference', Format => 'string[32]', }, 320 => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, Format => 'string[18]', ValueConv => '$_=$val; tr/-/:/; s/^(\d{4}:\d{2}:\d{2})/$1 /; $_', PrintConv => '$self->ConvertDateTime($val)', }, 338 => { Name => 'TimeReference', Notes => 'first sample count since midnight', Format => 'int32u[2]', ValueConv => 'my @v=split(" ",$val); $v[0] + $v[1] * 4294967296', }, 346 => { Name => 'BWFVersion', Format => 'int16u', }, # 348 - int8u[64] - SMPTE 330M UMID (Unique Material Identifier) # 412 - int8u[190] - reserved 602 => { Name => 'CodingHistory', Format => 'string[$size-602]', }, ); # Sub chunks of INFO LIST chunk %Image::ExifTool::RIFF::Info = ( PROCESS_PROC => \&Image::ExifTool::RIFF::ProcessChunks, GROUPS => { 2 => 'Audio' }, NOTES => q{ RIFF INFO tags found in WAV audio and AVI video files. Tags which are part of the EXIF 2.3 specification have an underlined Tag Name in the HTML version of this documentation. Other tags are found in AVI files generated by some software. }, IARL => 'ArchivalLocation', IART => { Name => 'Artist', Groups => { 2 => 'Author' } }, ICMS => 'Commissioned', ICMT => 'Comment', ICOP => { Name => 'Copyright', Groups => { 2 => 'Author' } }, ICRD => { Name => 'DateCreated', Groups => { 2 => 'Time' }, ValueConv => '$_=$val; s/-/:/g; $_', }, ICRP => 'Cropped', IDIM => 'Dimensions', IDPI => 'DotsPerInch', IENG => 'Engineer', IGNR => 'Genre', IKEY => 'Keywords', ILGT => 'Lightness', IMED => 'Medium', INAM => 'Title', IPLT => 'NumColors', IPRD => 'Product', ISBJ => 'Subject', ISFT => { Name => 'Software', # remove trailing nulls/spaces and split at first null # (Casio writes "CASIO" in unicode after the first null) ValueConv => '$_=$val; s/(\s*\0)+$//; s/(\s*\0)/, /; s/\0+//g; $_', }, ISHP => 'Sharpness', ISRC => 'Source', ISRF => 'SourceForm', ITCH => 'Technician', # # 3rd party tags # # internet movie database (ref 12) ISGN => 'SecondaryGenre', IWRI => 'WrittenBy', IPRO => 'ProducedBy', ICNM => 'Cinematographer', IPDS => 'ProductionDesigner', IEDT => 'EditedBy', ICDS => 'CostumeDesigner', IMUS => 'MusicBy', ISTD => 'ProductionStudio', IDST => 'DistributedBy', ICNT => 'Country', ILNG => 'Language', IRTD => 'Rating', ISTR => 'Starring', # MovieID (ref12) TITL => 'Title', DIRC => 'Directory', YEAR => 'Year', GENR => 'Genre', COMM => 'Comments', LANG => 'Language', AGES => 'Rated', STAR => 'Starring', CODE => 'EncodedBy', PRT1 => 'Part', PRT2 => 'NumberOfParts', # Morgan Multimedia INFO tags (ref 12) IAS1 => 'FirstLanguage', IAS2 => 'SecondLanguage', IAS3 => 'ThirdLanguage', IAS4 => 'FourthLanguage', IAS5 => 'FifthLanguage', IAS6 => 'SixthLanguage', IAS7 => 'SeventhLanguage', IAS8 => 'EighthLanguage', IAS9 => 'NinthLanguage', ICAS => 'DefaultAudioStream', IBSU => 'BaseURL', ILGU => 'LogoURL', ILIU => 'LogoIconURL', IWMU => 'WatermarkURL', IMIU => 'MoreInfoURL', IMBI => 'MoreInfoBannerImage', IMBU => 'MoreInfoBannerURL', IMIT => 'MoreInfoText', # GSpot INFO tags (ref 12) IENC => 'EncodedBy', IRIP => 'RippedBy', # Sound Forge Pro tags DISP => 'SoundSchemeTitle', TLEN => { Name => 'Length', ValueConv => '$val/1000', PrintConv => '"$val s"' }, TRCK => 'TrackNumber', TURL => 'URL', TVER => 'Version', LOCA => 'Location', TORG => 'Organization', # Sony Vegas AVI tags, also used by SCLive and Adobe Premier (ref 11) TAPE => { Name => 'TapeName', Groups => { 2 => 'Video' }, }, TCOD => { Name => 'StartTimecode', # this is the tape time code for the start of the video Groups => { 2 => 'Video' }, ValueConv => '$val * 1e-7', PrintConv => \&ConvertTimecode, }, TCDO => { Name => 'EndTimecode', Groups => { 2 => 'Video' }, ValueConv => '$val * 1e-7', PrintConv => \&ConvertTimecode, }, VMAJ => { Name => 'VegasVersionMajor', Groups => { 2 => 'Video' }, }, VMIN => { Name => 'VegasVersionMinor', Groups => { 2 => 'Video' }, }, CMNT => { Name => 'Comment', Groups => { 2 => 'Video' }, }, RATE => { Name => 'Rate', #? (video? units?) Groups => { 2 => 'Video' }, }, STAT => { Name => 'Statistics', Groups => { 2 => 'Video' }, # ("7318 0 3.430307 1", "0 0 3500.000000 1", "7 0 3.433228 1") PrintConv => [ '"$val frames captured"', '"$val dropped"', '"Data rate $val"', { 0 => 'Bad', 1 => 'OK' }, # capture OK? ], }, DTIM => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, ValueConv => q{ my @v = split ' ', $val; return undef unless @v == 2; # the Kodak EASYSHARE Sport stores this incorrectly as a string: return $val if $val =~ /^\d{4}:\d{2}:\d{2} \d{2}:\d{2}:\d{2}$/; # get time in seconds $val = 1e-7 * ($v[0] * 4294967296 + $v[1]); # shift from Jan 1, 1601 to Jan 1, 1970 $val -= 134774 * 24 * 3600 if $val != 0; return Image::ExifTool::ConvertUnixTime($val); }, PrintConv => '$self->ConvertDateTime($val)', }, # not observed, but apparently part of the standard: IDIT => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, ValueConv => 'Image::ExifTool::RIFF::ConvertRIFFDate($val)', PrintConv => '$self->ConvertDateTime($val)', }, ISMP => 'TimeCode', ); # Sub chunks of EXIF LIST chunk %Image::ExifTool::RIFF::Exif = ( PROCESS_PROC => \&Image::ExifTool::RIFF::ProcessChunks, GROUPS => { 2 => 'Audio' }, NOTES => 'These tags are part of the EXIF 2.3 specification for WAV audio files.', ever => 'ExifVersion', erel => 'RelatedImageFile', etim => { Name => 'TimeCreated', Groups => { 2 => 'Time' } }, ecor => { Name => 'Make', Groups => { 2 => 'Camera' } }, emdl => { Name => 'Model', Groups => { 2 => 'Camera' } }, emnt => { Name => 'MakerNotes', Binary => 1 }, eucm => { Name => 'UserComment', PrintConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val,"RIFF:UserComment")', }, ); # Sub chunks of hdrl LIST chunk %Image::ExifTool::RIFF::Hdrl = ( PROCESS_PROC => \&Image::ExifTool::RIFF::ProcessChunks, GROUPS => { 2 => 'Image' }, avih => { Name => 'AVIHeader', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::AVIHeader' }, }, IDIT => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Groups => { 2 => 'Time' }, ValueConv => 'Image::ExifTool::RIFF::ConvertRIFFDate($val)', PrintConv => '$self->ConvertDateTime($val)', }, ISMP => 'TimeCode', LIST_strl => { Name => 'Stream', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::Stream' }, }, LIST_odml => { Name => 'OpenDML', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::OpenDML' }, }, ); # Sub chunks of Tdat LIST chunk (ref PH) %Image::ExifTool::RIFF::Tdat = ( PROCESS_PROC => \&Image::ExifTool::RIFF::ProcessChunks, GROUPS => { 2 => 'Video' }, # (have seen tc_O, tc_A, rn_O and rn_A) ); %Image::ExifTool::RIFF::AVIHeader = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, FORMAT => 'int32u', FIRST_ENTRY => 0, 0 => { Name => 'FrameRate', # (must use RawConv because raw value used in Composite tag) RawConv => '$val ? 1e6 / $val : undef', PrintConv => 'int($val * 1000 + 0.5) / 1000', }, 1 => { Name => 'MaxDataRate', PrintConv => 'sprintf("%.4g kB/s",$val / 1024)', }, # 2 => 'PaddingGranularity', # 3 => 'Flags', 4 => 'FrameCount', # 5 => 'InitialFrames', 6 => 'StreamCount', # 7 => 'SuggestedBufferSize', 8 => 'ImageWidth', 9 => 'ImageHeight', ); %Image::ExifTool::RIFF::Stream = ( PROCESS_PROC => \&Image::ExifTool::RIFF::ProcessChunks, GROUPS => { 2 => 'Image' }, strh => { Name => 'StreamHeader', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::StreamHeader' }, }, strn => 'StreamName', strd => { #PH Name => 'StreamData', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::StreamData' }, }, strf => [ { Name => 'AudioFormat', Condition => '$$self{RIFFStreamType} eq "auds"', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::AudioFormat' }, }, { Name => 'VideoFormat', Condition => '$$self{RIFFStreamType} eq "vids"', SubDirectory => { TagTable => 'Image::ExifTool::BMP::Main' }, }, ], ); # Open DML tags (ref http://www.morgan-multimedia.com/download/odmlff2.pdf) %Image::ExifTool::RIFF::OpenDML = ( PROCESS_PROC => \&Image::ExifTool::RIFF::ProcessChunks, GROUPS => { 2 => 'Video' }, dmlh => { Name => 'ExtendedAVIHeader', SubDirectory => { TagTable => 'Image::ExifTool::RIFF::ExtAVIHdr' }, }, ); # Extended AVI Header tags (ref http://www.morgan-multimedia.com/download/odmlff2.pdf) %Image::ExifTool::RIFF::ExtAVIHdr = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, FORMAT => 'int32u', 0 => 'TotalFrameCount', ); %Image::ExifTool::RIFF::StreamHeader = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, FORMAT => 'int32u', FIRST_ENTRY => 0, PRIORITY => 0, # so we get values from the first stream 0 => { Name => 'StreamType', Format => 'string[4]', RawConv => '$$self{RIFFStreamType} = $val', PrintConv => { auds => 'Audio', mids => 'MIDI', txts => 'Text', vids => 'Video', iavs => 'Interleaved Audio+Video', }, }, 1 => [ { Name => 'AudioCodec', Condition => '$$self{RIFFStreamType} eq "auds"', Format => 'string[4]', }, { Name => 'VideoCodec', Condition => '$$self{RIFFStreamType} eq "vids"', Format => 'string[4]', }, { Name => 'Codec', Format => 'string[4]', }, ], # 2 => 'StreamFlags', # 3 => 'StreamPriority', # 3.5 => 'Language', # 4 => 'InitialFrames', 5 => [ { Name => 'AudioSampleRate', Condition => '$$self{RIFFStreamType} eq "auds"', Format => 'rational64u', ValueConv => '$val ? 1/$val : 0', PrintConv => 'int($val * 100 + 0.5) / 100', }, { Name => 'VideoFrameRate', Condition => '$$self{RIFFStreamType} eq "vids"', Format => 'rational64u', # (must use RawConv because raw value used in Composite tag) RawConv => '$val ? 1/$val : undef', PrintConv => 'int($val * 1000 + 0.5) / 1000', }, { Name => 'StreamSampleRate', Format => 'rational64u', ValueConv => '$val ? 1/$val : 0', PrintConv => 'int($val * 1000 + 0.5) / 1000', }, ], # 7 => 'Start', 8 => [ { Name => 'AudioSampleCount', Condition => '$$self{RIFFStreamType} eq "auds"', }, { Name => 'VideoFrameCount', Condition => '$$self{RIFFStreamType} eq "vids"', }, { Name => 'StreamSampleCount', }, ], # 9 => 'SuggestedBufferSize', 10 => { Name => 'Quality', PrintConv => '$val eq 0xffffffff ? "Default" : $val', }, 11 => { Name => 'SampleSize', PrintConv => '$val ? "$val byte" . ($val==1 ? "" : "s") : "Variable"', }, # 12 => { Name => 'Frame', Format => 'int16u[4]' }, ); %Image::ExifTool::RIFF::StreamData = ( #PH PROCESS_PROC => \&Image::ExifTool::RIFF::ProcessStreamData, GROUPS => { 2 => 'Video' }, NOTES => q{ This chunk is used to store proprietary information in AVI videos from some cameras. The first 4 characters of the data are used as the Tag ID below. }, AVIF => { Name => 'AVIF', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', DirName => 'IFD0', Start => 8, ByteOrder => 'LittleEndian', }, }, CASI => { # (used by Casio GV-10) Name => 'CasioData', SubDirectory => { TagTable => 'Image::ExifTool::Casio::AVI' }, }, Zora => 'VendorName', # (Samsung PL90 AVI files) unknown => { Name => 'UnknownData', # try to interpret unknown stream data as a string RawConv => '$_=$val; /^[^\0-\x1f\x7f-\xff]+$/ ? $_ : undef', }, ); # VP8 bitstream (ref http://www.rfc-editor.org/rfc/pdfrfc/rfc6386.txt.pdf) %Image::ExifTool::RIFF::VP8 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, NOTES => q{ This chunk is found in simple-format (lossy) WebP files. See L<https://developers.google.com/speed/webp/docs/riff_container> for the WebP container specification. }, 0 => { Name => 'VP8Version', Mask => 0x0e, ValueConv => '$val >> 1', PrintConv => { 0 => '0 (bicubic reconstruction, normal loop)', 1 => '1 (bilinear reconstruction, simple loop)', 2 => '2 (bilinear reconstruction, no loop)', 3 => '3 (no reconstruction, no loop)', }, }, 6 => { Name => 'ImageWidth', Format => 'int16u', Mask => 0x3fff, }, 6.1 => { Name => 'HorizontalScale', Format => 'int16u', Mask => 0xc000, ValueConv => '$val >> 14', }, 8 => { Name => 'ImageHeight', Format => 'int16u', Mask => 0x3fff, }, 8.1 => { Name => 'VerticalScale', Format => 'int16u', Mask => 0xc000, ValueConv => '$val >> 14', }, ); # WebP lossless info (ref 14) %Image::ExifTool::RIFF::VP8L = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, NOTES => 'This chunk is found in lossless WebP files.', GROUPS => { 2 => 'Image' }, 1 => { Name => 'ImageWidth', Format => 'int16u', ValueConv => '($val & 0x3fff) + 1', }, 2 => { Name => 'ImageHeight', Format => 'int32u', ValueConv => '(($val >> 6) & 0x3fff) + 1', }, ); # WebP extended info (ref 14) %Image::ExifTool::RIFF::VP8X = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, NOTES => 'This chunk is found in extended WebP files.', # 0 - bitmask: 2=ICC, 3=alpha, 4=EXIF, 5=XMP, 6=animation 4 => { Name => 'ImageWidth', Format => 'int32u', ValueConv => '($val & 0xffffff) + 1', }, 6 => { Name => 'ImageHeight', Format => 'int32u', ValueConv => '($val >> 8) + 1', }, ); # WebP animation info (ref 14) %Image::ExifTool::RIFF::ANIM = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, NOTES => 'WebP animation chunk.', 0 => { Name => 'BackgroundColor', Format => 'int8u[4]', }, 4 => { Name => 'AnimationLoopCount', PrintConv => '$val || "inf"', }, ); # WebP animation frame info (ref 14) %Image::ExifTool::RIFF::ANMF = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, NOTES => 'WebP animation frame chunk.', 12 => { Name => 'Duration', Format => 'int32u', Notes => 'extracted as the sum of durations of all animation frames', RawConv => q{ if (defined $$self{VALUE}{Duration}) { $$self{VALUE}{Duration} += $val & 0x0fff; return undef; } return $val & 0x0fff; }, ValueConv => '$val / 1000', PrintConv => 'ConvertDuration($val)', }, ); # WebP alpha info (ref 14) %Image::ExifTool::RIFF::ALPH = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Image' }, NOTES => 'WebP alpha chunk.', 0 => { Name => 'AlphaPreprocessing', Mask => 0x03, PrintConv => { 0 => 'none', 1 => 'Level Reduction', }, }, 0.1 => { Name => 'AlphaFiltering', Mask => 0x03, PrintConv => { 0 => 'none', 1 => 'Horizontal', 2 => 'Vertical', 3 => 'Gradient', }, }, 0.2 => { Name => 'AlphaCompression', Mask => 0x03, PrintConv => { 0 => 'none', 1 => 'Lossless', }, }, ); # RIFF composite tags %Image::ExifTool::RIFF::Composite = ( Duration => { Require => { 0 => 'RIFF:FrameRate', 1 => 'RIFF:FrameCount', }, Desire => { 2 => 'VideoFrameRate', 3 => 'VideoFrameCount', }, RawConv => 'Image::ExifTool::RIFF::CalcDuration($self, @val)', PrintConv => 'ConvertDuration($val)', }, Duration2 => { Name => 'Duration', Require => { 0 => 'RIFF:AvgBytesPerSec', 1 => 'FileSize', }, Desire => { # check FrameCount because this calculation only applies # to audio-only files (eg. WAV) 2 => 'FrameCount', 3 => 'VideoFrameCount', }, # (can't calculate duration like this for compressed audio types) RawConv => q{ return undef if $$self{VALUE}{FileType} =~ /^(LA|OFR|PAC|WV)$/; return ($val[0] and not ($val[2] or $val[3])) ? $val[1] / $val[0] : undef; }, PrintConv => 'ConvertDuration($val)', }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::RIFF'); #------------------------------------------------------------------------------ # Convert RIFF date to EXIF format my %monthNum = ( Jan=>1, Feb=>2, Mar=>3, Apr=>4, May=>5, Jun=>6, Jul=>7, Aug=>8, Sep=>9, Oct=>10,Nov=>11,Dec=>12 ); sub ConvertRIFFDate($) { my $val = shift; my @part = split ' ', $val; my $mon; if (@part >= 5 and $mon = $monthNum{ucfirst(lc($part[1]))}) { # the standard AVI date format (eg. "Mon Mar 10 15:04:43 2003") $val = sprintf("%.4d:%.2d:%.2d %s", $part[4], $mon, $part[2], $part[3]); } elsif ($val =~ m{(\d{4})/\s*(\d+)/\s*(\d+)/?\s+(\d+):\s*(\d+)\s*(P?)}) { # but the Casio QV-3EX writes dates like "2001/ 1/27 1:42PM", # and the Casio EX-Z30 writes "2005/11/28/ 09:19"... doh! $val = sprintf("%.4d:%.2d:%.2d %.2d:%.2d:00",$1,$2,$3,$4+($6?12:0),$5); } elsif ($val =~ m{(\d{4})[-/](\d+)[-/](\d+)\s+(\d+:\d+:\d+)}) { # the Konica KD500Z writes "2002-12-16 15:35:01\0\0" $val = "$1:$2:$3 $4"; } return $val; } #------------------------------------------------------------------------------ # Print time # Inputs: 0) time in seconds # Returns: time string sub ConvertTimecode($) { my $val = shift; my $hr = int($val / 3600); $val -= $hr * 3600; my $min = int($val / 60); $val -= $min * 60; return sprintf("%d:%.2d:%05.2f", $hr, $min, $val); } #------------------------------------------------------------------------------ # Calculate duration of RIFF # Inputs: 0) ExifTool ref, 1/2) RIFF:FrameRate/Count, 2/3) VideoFrameRate/Count # Returns: Duration in seconds or undef # Notes: Sums duration of all sub-documents (concatenated AVI files) sub CalcDuration($@) { my ($et, @val) = @_; my $totalDuration = 0; my $subDoc = 0; my @keyList; for (;;) { # this is annoying. Apparently (although I couldn't verify this), FrameCount # in the RIFF header includes multiple video tracks if they exist (eg. with the # FujiFilm REAL 3D AVI's), but the video stream information isn't reliable for # some cameras (eg. Olympus FE models), so use the video stream information # only if the RIFF header duration is 2 to 3 times longer my $dur1 = $val[1] / $val[0] if $val[0]; if ($val[2] and $val[3]) { my $dur2 = $val[3] / $val[2]; my $rat = $dur1 / $dur2; $dur1 = $dur2 if $rat > 1.9 and $rat < 3.1; } $totalDuration += $dur1 if defined $dur1; last unless $subDoc++ < $$et{DOC_COUNT}; # get tag values for next sub-document my @tags = qw(FrameRate FrameCount VideoFrameRate VideoFrameCount); my $rawValue = $$et{VALUE}; my ($i, $j, $key, $keys); for ($i=0; $i<@tags; ++$i) { if ($subDoc == 1) { # generate list of available keys for each tag $keys = $keyList[$i] = [ ]; for ($j=0; ; ++$j) { $key = $tags[$i]; $key .= " ($j)" if $j; last unless defined $$rawValue{$key}; push @$keys, $key; } } else { $keys = $keyList[$i]; } # find key for tag in this sub-document my $grp = "Doc$subDoc"; $grp .= ":RIFF" if $i < 2; # (tags 0 and 1 also in RIFF group) $key = $et->GroupMatches($grp, $keys); $val[$i] = $key ? $$rawValue{$key} : undef; } last unless defined $val[0] and defined $val[1]; # (Require'd tags) } return $totalDuration; } #------------------------------------------------------------------------------ # Process stream data # Inputs: 0) ExifTool object ref, 1) dirInfo reference, 2) tag table ref # Returns: 1 on success sub ProcessStreamData($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $start = $$dirInfo{DirStart}; my $size = $$dirInfo{DirLen}; return 0 if $size < 4; if ($et->Options('Verbose')) { $et->VerboseDir($$dirInfo{DirName}, 0, $size); } my $tag = substr($$dataPt, $start, 4); my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); unless ($tagInfo) { $tagInfo = $et->GetTagInfo($tagTablePtr, 'unknown'); return 1 unless $tagInfo; } my $subdir = $$tagInfo{SubDirectory}; if ($$tagInfo{SubDirectory}) { my $offset = $$subdir{Start} || 0; my $baseShift = $$dirInfo{DataPos} + $$dirInfo{DirStart} + $offset; my %subdirInfo = ( DataPt => $dataPt, DataPos => $$dirInfo{DataPos} - $baseShift, Base => ($$dirInfo{Base} || 0) + $baseShift, DataLen => $$dirInfo{DataLen}, DirStart=> $$dirInfo{DirStart} + $offset, DirLen => $$dirInfo{DirLen} - $offset, DirName => $$subdir{DirName}, Parent => $$dirInfo{DirName}, ); unless ($offset) { # allow processing of 2nd directory at the same address my $addr = $subdirInfo{DirStart} + $subdirInfo{DataPos} + $subdirInfo{Base}; delete $$et{PROCESSED}{$addr} } # (we could set FIRST_EXIF_POS to $subdirInfo{Base} here to make # htmlDump offsets relative to EXIF base if we wanted...) my $subTable = GetTagTable($$subdir{TagTable}); $et->ProcessDirectory(\%subdirInfo, $subTable); } else { $et->HandleTag($tagTablePtr, $tag, undef, DataPt => $dataPt, DataPos => $$dirInfo{DataPos}, Start => $start, Size => $size, TagInfo => $tagInfo, ); } return 1; } #------------------------------------------------------------------------------ # Make tag information hash for unknown tag # Inputs: 0) Tag table ref, 1) tag ID sub MakeTagInfo($$) { my ($tagTablePtr, $tag) = @_; my $name = $tag; my $n = ($name =~ s/([\x00-\x1f\x7f-\xff])/'x'.unpack('H*',$1)/eg); # print in hex if tag is numerical $name = sprintf('0x%.4x',unpack('N',$tag)) if $n > 2; AddTagToTable($tagTablePtr, $tag, { Name => "Unknown_$name", Description => "Unknown $name", Unknown => 1, Binary => 1, }); } #------------------------------------------------------------------------------ # Process RIFF chunks # Inputs: 0) ExifTool object reference, 1) directory information reference # 2) tag table reference # Returns: 1 on success sub ProcessChunks($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $start = $$dirInfo{DirStart}; my $size = $$dirInfo{DirLen}; my $end = $start + $size; my $base = $$dirInfo{Base}; my $verbose = $et->Options('Verbose'); my $unknown = $et->Options('Unknown'); $et->VerboseDir($$dirInfo{DirName}, 0, $size) if $verbose; while ($start + 8 < $end) { my $tag = substr($$dataPt, $start, 4); my $len = Get32u($dataPt, $start + 4); $start += 8; if ($start + $len > $end) { $et->Warn("Bad $tag chunk"); return 0; } if ($tag eq 'LIST' and $len >= 4) { $tag .= '_' . substr($$dataPt, $start, 4); $len -= 4; $start += 4; } my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); my $baseShift = 0; my $val; if ($tagInfo) { if ($$tagInfo{SubDirectory}) { # adjust base if necessary (needed for Ricoh maker notes) my $newBase = $tagInfo->{SubDirectory}{Base}; if (defined $newBase) { # different than your average Base eval... # here we use an absolute $start address $start += $base; #### eval Base ($start) $newBase = eval $newBase; $baseShift = $newBase - $base; $start -= $base; } } elsif (not $$tagInfo{Binary}) { $val = substr($$dataPt, $start, $len); $val =~ s/\0+$//; # remove trailing nulls from strings } } elsif ($verbose or $unknown) { MakeTagInfo($tagTablePtr, $tag); } $et->HandleTag($tagTablePtr, $tag, $val, DataPt => $dataPt, DataPos => $$dirInfo{DataPos} - $baseShift, Start => $start, Size => $len, Base => $base + $baseShift, Addr => $base + $baseShift + $start, ); ++$len if $len & 0x01; # must account for padding if odd number of bytes $start += $len; } return 1; } #------------------------------------------------------------------------------ # Extract information from a RIFF file # Inputs: 0) ExifTool object reference, 1) DirInfo reference # Returns: 1 on success, 0 if this wasn't a valid RIFF file sub ProcessRIFF($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $buf2, $type, $mime, $err); my $verbose = $et->Options('Verbose'); my $unknown = $et->Options('Unknown'); # verify this is a valid RIFF file return 0 unless $raf->Read($buff, 12) == 12; if ($buff =~ /^RIFF....(.{4})/s) { $type = $riffType{$1}; } else { # minimal support for a few obscure lossless audio formats... return 0 unless $buff =~ /^(LA0[234]|OFR |LPAC|wvpk)/ and $raf->Read($buf2, 1024); $type = $riffType{$1}; $buff .= $buf2; return 0 unless $buff =~ /WAVE(.{4})?fmt /sg and $raf->Seek(pos($buff) - 4, 0); } $mime = $riffMimeType{$type} if $type; $et->SetFileType($type, $mime); $$et{RIFFStreamType} = ''; # initialize stream type SetByteOrder('II'); my $tagTablePtr = GetTagTable('Image::ExifTool::RIFF::Main'); my $pos = 12; # # Read chunks in RIFF image # for (;;) { my $num = $raf->Read($buff, 8); if ($num < 8) { $err = 1 if $num; last; } $pos += 8; my ($tag, $len) = unpack('a4V', $buff); # special case: construct new tag name from specific LIST type if ($tag eq 'LIST') { $raf->Read($buff, 4) == 4 or $err=1, last; $pos += 4; $tag .= "_$buff"; $len -= 4; # already read 4 bytes (the LIST type) } $et->VPrint(0, "RIFF '$tag' chunk ($len bytes of data):\n"); if ($len <= 0) { if ($len < 0) { $et->Warn('Invalid chunk length'); } elsif ($tag eq "\0\0\0\0") { # avoid reading through corupted files filled with nulls because it takes forever $et->Warn('Encountered empty null chunk. Processing aborted'); } else { next; } last; } # stop when we hit the audio data or AVI index or AVI movie data # --> no more because Adobe Bridge stores XMP after this!! # (so now we only do this on the FastScan option) if (($tag eq 'data' or $tag eq 'idx1' or $tag eq 'LIST_movi') and $et->Options('FastScan')) { $et->VPrint(0, "(end of parsing)\n"); last; } # RIFF chunks are padded to an even number of bytes my $len2 = $len + ($len & 0x01); if ($$tagTablePtr{$tag} or (($verbose or $unknown) and $tag !~ /^(data|idx1|LIST_movi|RIFF)$/)) { $raf->Read($buff, $len2) == $len2 or $err=1, last; MakeTagInfo($tagTablePtr, $tag) if not $$tagTablePtr{$tag} and ($verbose or $unknown); $et->HandleTag($tagTablePtr, $tag, $buff, DataPt => \$buff, DataPos => 0, # (relative to Base) Start => 0, Size => $len2, Base => $pos, ); } elsif ($tag eq 'RIFF') { # don't read into RIFF chunk (eg. concatenated video file) $raf->Read($buff, 4) == 4 or $err=1, last; # extract information from remaining file as an embedded file $$et{DOC_NUM} = ++$$et{DOC_COUNT} } else { $raf->Seek($len2, 1) or $err=1, last; } $pos += $len2; } delete $$et{DOC_NUM}; $err and $et->Warn('Error reading RIFF file (corrupted?)'); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::RIFF - Read RIFF/WAV/AVI meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to extract information from RIFF-based (Resource Interchange File Format) files, including AVI videos, WAV audio files and WEBP images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.exif.org/Exif2-2.PDF> =item L<http://www.vlsi.fi/datasheets/vs1011.pdf> =item L<http://www.music-center.com.br/spec_rif.htm> =item L<http://www.codeproject.com/audio/wavefiles.asp> =item L<http://msdn.microsoft.com/archive/en-us/directx9_c/directx/htm/avirifffilereference.asp> =item L<http://wiki.multimedia.cx/index.php?title=TwoCC> =item L<https://developers.google.com/speed/webp/docs/riff_container> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/RIFF Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/RSRC.pm�����������������������������������������������������000644 �000765 �000024 �00000022563 12642461333 021027� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: RSRC.pm # # Description: Read Mac OS Resource information # # Revisions: 2010/03/17 - P. Harvey Created # # References: 1) http://developer.apple.com/legacy/mac/library/documentation/mac/MoreToolbox/MoreToolbox-99.html #------------------------------------------------------------------------------ package Image::ExifTool::RSRC; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.08'; # Information decoded from Mac OS resources %Image::ExifTool::RSRC::Main = ( GROUPS => { 2 => 'Document' }, NOTES => q{ Tags extracted from Mac OS resource files and DFONT files. These tags may also be extracted from the resource fork of any file in OS X, either by adding "/..namedfork/rsrc" to the filename to process the resource fork alone, or by using the ExtractEmbedded (-ee) option to process the resource fork as a sub-document of the main file. When writing, ExifTool preserves the Mac OS resource fork by default, but it may deleted with C<-rsrc:all=> on the command line. }, '8BIM' => { Name => 'PhotoshopInfo', SubDirectory => { TagTable => 'Image::ExifTool::Photoshop::Main' }, }, 'sfnt' => { Name => 'Font', SubDirectory => { TagTable => 'Image::ExifTool::Font::Name' }, }, # my samples of postscript-type DFONT files have a POST resource # with ID 0x1f5 and the same format as a PostScript file 'POST_0x01f5' => { Name => 'PostscriptFont', SubDirectory => { TagTable => 'Image::ExifTool::PostScript::Main' }, }, 'usro_0x0000' => 'OpenWithApplication', 'vers_0x0001' => 'ApplicationVersion', 'STR _0xbff3' => 'ApplicationMissingMsg', 'STR _0xbff4' => 'CreatorApplication', # the following written by Photoshop # (ref http://www.adobe.ca/devnet/photoshop/psir/ps_image_resources.pdf) 'STR#_0x0080' => 'Keywords', 'TEXT_0x0080' => 'Description', # don't extract PICT's because the clip region isn't set properly # in the PICT resource for some reason. Also, a dummy 512-byte # header would have to be added to create a valid PICT file. # 'PICT' => { Name => 'PreviewPICT', Binary => 1 }, ); #------------------------------------------------------------------------------ # Read information from a Mac resource file (ref 1) # Inputs: 0) ExifTool ref, 1) dirInfo ref # Returns: 1 on success, 0 if this wasn't a valid resource file sub ProcessRSRC($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($hdr, $map, $buff, $i, $j); # attempt to validate the format as thoroughly as practical return 0 unless $raf->Read($hdr, 30) == 30; my ($datOff, $mapOff, $datLen, $mapLen) = unpack('N*', $hdr); return 0 unless $raf->Seek(0, 2); my $fLen = $raf->Tell(); return 0 if $datOff < 0x10 or $datOff + $datLen > $fLen; return 0 if $mapOff < 0x10 or $mapOff + $mapLen > $fLen or $mapLen < 30; return 0 if $datOff < $mapOff and $datOff + $datLen > $mapOff; return 0 if $mapOff < $datOff and $mapOff + $mapLen > $datOff; # read the resource map $raf->Seek($mapOff, 0) and $raf->Read($map, $mapLen) == $mapLen or return 0; SetByteOrder('MM'); my $typeOff = Get16u(\$map, 24); my $nameOff = Get16u(\$map, 26); my $numTypes = Get16u(\$map, 28); # validate offsets in the resource map return 0 if $typeOff < 28 or $nameOff < 30; $et->SetFileType('RSRC') unless $$et{IN_RESOURCE}; my $verbose = $et->Options('Verbose'); my $tagTablePtr = GetTagTable('Image::ExifTool::RSRC::Main'); $et->VerboseDir('RSRC', $numTypes+1); # parse resource type list for ($i=0; $i<=$numTypes; ++$i) { my $off = $typeOff + 2 + 8 * $i; # offset of entry in type list last if $off + 8 > $mapLen; my $resType = substr($map,$off,4); # resource type my $resNum = Get16u(\$map,$off+4); # number of resources - 1 my $refOff = Get16u(\$map,$off+6) + $typeOff; # offset to first resource reference # loop through all resources for ($j=0; $j<=$resNum; ++$j) { my $roff = $refOff + 12 * $j; last if $roff + 12 > $mapLen; # read only the 24-bit resource data offset my $id = Get16u(\$map,$roff); my $resOff = (Get32u(\$map,$roff+4) & 0x00ffffff) + $datOff; my $resNameOff = Get16u(\$map,$roff+2) + $nameOff + $mapOff; my ($tag, $val, $valLen); my $tagInfo = $$tagTablePtr{$resType}; if ($tagInfo) { $tag = $resType; } else { $tag = sprintf('%s_0x%.4x', $resType, $id); $tagInfo = $$tagTablePtr{$tag}; } # read the resource data if necessary if ($tagInfo or $verbose) { unless ($raf->Seek($resOff, 0) and $raf->Read($buff, 4) == 4 and ($valLen = unpack('N', $buff)) < 100000000 and # arbitrary size limit (100MB) $raf->Read($val, $valLen) == $valLen) { $et->Warn("Error reading $resType resource"); next; } } if ($verbose) { my ($resName, $nameLen); $resName = '' unless $raf->Seek($resNameOff, 0) and $raf->Read($buff, 1) and ($nameLen = ord $buff) != 0 and $raf->Read($resName, $nameLen) == $nameLen; $et->VPrint(0,sprintf("%s resource ID 0x%.4x (offset 0x%.4x, $valLen bytes, name='%s'):\n", $resType, $id, $resOff, $resName)); $et->VerboseDump(\$val); } next unless $tagInfo; if ($resType eq 'vers') { # parse the 'vers' resource to get the long version string next unless $valLen > 8; # long version string is after short version my $p = 7 + Get8u(\$val, 6); next if $p >= $valLen; my $vlen = Get8u(\$val, $p++); next if $p + $vlen > $valLen; my $tagTablePtr = GetTagTable('Image::ExifTool::RSRC::Main'); $val = $et->Decode(substr($val, $p, $vlen), 'MacRoman'); } elsif ($resType eq 'sfnt') { # parse the OTF font block $raf->Seek($resOff + 4, 0) or next; $$dirInfo{Base} = $resOff + 4; require Image::ExifTool::Font; unless (Image::ExifTool::Font::ProcessOTF($et, $dirInfo)) { $et->Warn('Unrecognized sfnt resource format'); } # assume this is a DFONT file unless processing the rsrc fork $et->OverrideFileType('DFONT') unless $$et{DOC_NUM}; next; } elsif ($resType eq '8BIM') { my $ttPtr = GetTagTable('Image::ExifTool::Photoshop::Main'); $et->HandleTag($ttPtr, $id, $val, DataPt => \$val, DataPos => $resOff + 4, Size => $valLen, Start => 0, Parent => 'RSRC', ); next; } elsif ($resType eq 'STR ' and $valLen > 1) { # extract Pascal string my $len = ord $val; next unless $valLen >= $len + 1; $val = substr($val, 1, $len); } elsif ($resType eq 'usro' and $valLen > 4) { my $len = unpack('N', $val); next unless $valLen >= $len + 4; ($val = substr($val, 4, $len)) =~ s/\0.*//g; # truncate at null } elsif ($resType eq 'STR#' and $valLen > 2) { # extract list of strings (ref http://simtech.sourceforge.net/tech/strings.html) my $num = unpack('n', $val); next if $num & 0xf000; # (ignore special-format STR# resources) my ($i, @vals); my $pos = 2; for ($i=0; $i<$num; ++$i) { last if $pos >= $valLen; my $len = ord substr($val, $pos++, 1); last if $pos + $len > $valLen; push @vals, substr($val, $pos, $len); $pos += $len; } $val = \@vals; } elsif ($resType eq 'POST') { # assume this is a DFONT file unless processing the rsrc fork $et->OverrideFileType('DFONT') unless $$et{DOC_NUM}; $val = substr $val, 2; } elsif ($resType ne 'TEXT') { next; } $et->HandleTag($tagTablePtr, $tag, $val); } } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::RSRC - Read Mac OS Resource information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains routines required by Image::ExifTool to read Mac OS resource files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://developer.apple.com/legacy/mac/library/documentation/mac/MoreToolbox/MoreToolbox-99.html> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/RSRC Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/RTF.pm������������������������������������������������������000644 �000765 �000024 �00000032155 12642461333 020707� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: RTF.pm # # Description: Read Rich Text Format meta information # # Revisions: 2010/06/17 - P. Harvey Created # # References: 1) http://download.microsoft.com/download/2/f/5/2f599e18-07ee-4ec5-a1e7-f4e6a9423592/Word2007RTFSpec9.doc # 2) http://search.cpan.org/dist/RTF-Writer/lib/RTF/Cookbook.pod #------------------------------------------------------------------------------ package Image::ExifTool::RTF; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.02'; sub ProcessUserProps($$$); # supported RTF character entities my %rtfEntity = ( par => 0x0a, tab => 0x09, endash => 0x2013, emdash => 0x2014, lquote => 0x2018, rquote => 0x2019, ldblquote => 0x201c, rdblquote => 0x201d, bullet => 0x2022, ); # RTF tags (ref 1) %Image::ExifTool::RTF::Main = ( GROUPS => { 2 => 'Document' }, NOTES => q{ This table lists standard tags of the RTF information group, but ExifTool will also extract any non-standard tags found in this group. As well, ExifTool will extract any custom properties that are found. See L<http://www.microsoft.com/en-ca/download/details.aspx?id=10725> for the specification. }, title => { }, subject => { }, author => { Groups => { 2 => 'Author' } }, manager => { }, company => { }, copyright=> { Groups => { 2 => 'Author' } }, # (written by Apple TextEdit) operator => { Name => 'LastModifiedBy' }, category => { }, keywords => { }, comment => { }, doccomm => { Name => 'Comments' }, hlinkbase=> { Name => 'HyperlinkBase' }, creatim => { Name => 'CreateDate', Format => 'date', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, revtim => { Name => 'ModifyDate', Format => 'date', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, printim => { Name => 'LastPrinted', Format => 'date', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, buptim => { Name => 'BackupTime', Format => 'date', Groups => { 2 => 'Time' }, PrintConv => '$self->ConvertDateTime($val)', }, edmins => { Name => 'TotalEditTime', # in minutes PrintConv => 'ConvertTimeSpan($val, 60)', }, nofpages => { Name => 'Pages' }, nofwords => { Name => 'Words' }, nofchars => { Name => 'Characters' }, nofcharsws=>{ Name => 'CharactersWithSpaces', Notes => q{ according to the 2007 Microsoft RTF specification this is clearly the number of characters NOT including spaces, but Microsoft Word writes this as the number WITH spaces, so ExifTool names this tag according to the de facto standard }, }, id => { Name => 'InternalIDNumber' }, version => { Name => 'RevisionNumber' }, vern => { Name => 'InternalVersionNumber' }, ); # lookup for user-defined properties # (none are pre-defined and this table doesn't appear in the docs) %Image::ExifTool::RTF::UserProps = ( GROUPS => { 2 => 'Document' }, ); #------------------------------------------------------------------------------ # Read to nested closing curly bracket "}" # Inputs: 0) data ref, 1) optional RAF ref to read more data if available # Returns: text inside brackets, or undef on error # Notes: On entry the current position in the data must be set to immediately # after the command that opens the bracket. On return the current # position is immediately following the closing brace if the return # value is defined. sub ReadToNested($;$) { my ($dataPt, $raf) = @_; my $pos = pos $$dataPt; my $level = 1; for (;;) { # look for the next bracket unless ($$dataPt =~ /(\\*)([{}])/g) { # must read some more data my $p = length $$dataPt; my $buff; last unless $raf and $raf->Read($buff, 65536); $$dataPt .= $buff; # rewind position to include any leading backslashes --$p while $p and substr($$dataPt, $p - 1, 1) eq '\\'; pos($$dataPt) = $p; # set position to continue search next; } # bracket is escaped if preceded by an odd number of backslashes next if $1 and length($1) & 0x01; $2 eq '{' and ++$level, next; next unless --$level <= 0; return substr($$dataPt, $pos, pos($$dataPt) - $pos - 1); } return undef; } #------------------------------------------------------------------------------ # Unescape RTF escape sequences # Inputs: 0) ExifTool ref, 1) RTF text, 2) RTF character set (for hex characters) # Returns: Unescaped text (in current ExifTool Charset) sub UnescapeRTF($$$) { my ($et, $val, $charset) = @_; # return now unless we have a control sequence unless ($val =~ /\\/) { $val =~ tr/\n\r//d; # ignore CR's and LF's return $val; } # CR/LF is signficant if it terminates a control sequence (so change these to a space) $val =~ s/(^|[^\\])((?:\\\\)*)(\\[a-zA-Z]+(?:-?\d+)?)[\n\r]/$1$2$3 /g; # protect the newline control sequence by converting to a \par command $val =~ s/(^|[^\\])((?:\\\\)*)(\\[\n\r])/$1$2\\par /g; # all other CR/LF's are ignored (so delete them) $val =~ tr/\n\r//d; my $rtnVal = ''; my $len = length $val; my $skip = 1; # default Unicode skip count my $p0 = 0; for (;;) { # find next backslash my $p1 = ($val =~ /\\/g) ? pos($val) : $len + 1; # add text up to start of this control sequence (or up to end) my $n = $p1 - $p0 - 1; $rtnVal .= substr($val, $p0, $n) if $n > 0; # all done if at the end or if control sequence is empty last if $p1 >= $len; # look for an ASCII-letter control word or Unicode control if ($val =~ /\G([a-zA-Z]+)(-?\d+)? ?/g) { # interpret command if recognized if ($1 eq 'uc') { # \ucN $skip = $2; } elsif ($1 eq 'u') { # \uN require Image::ExifTool::Charset; $rtnVal .= Image::ExifTool::Charset::Recompose($et, [$2]); if ($skip) { # must skip the specified number of characters # (not simple because RTF control words count as a single character) last unless $val =~ /\G([^\\]|\\([a-zA-Z]+)(-?\d+)? ?|\\'.{2}|\\.){$skip}/g; } } elsif ($rtfEntity{$1}) { require Image::ExifTool::Charset; $rtnVal .= Image::ExifTool::Charset::Recompose($et, [$rtfEntity{$1}]); } # (else ignore the command) } else { my $ch = substr($val, $p1, 1); if ($ch eq "'") { # hex character code last if $p1 + 3 > $len; my $hex = substr($val, $p1 + 1, 2); if ($hex =~ /^[0-9a-fA-F]{2}$/) { require Image::ExifTool::Charset; $rtnVal .= $et->Decode(chr(hex($hex)), $charset); } pos($val) = $p1 + 3; # skip to after the hex code } else { # assume a standard control symbol (\, {, }, etc) # (note, this may not be valid for some uncommon # control symbols like \~ for non-breaking space) $rtnVal .= $ch; pos($val) = $p1 + 1; # skip to after this character } } $p0 = pos($val); } return $rtnVal; } #------------------------------------------------------------------------------ # Read information in a RTF document # Inputs: 0) ExifTool ref, 1) dirInfo ref # Returns: 1 on success, 0 if this wasn't a valid RTF file sub ProcessRTF($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $buf2, $cs); return 0 unless $raf->Read($buff, 64) and $raf->Seek(0,0); return 0 unless $buff =~ /^[\n\r]*\{[\n\r]*\\rtf[^a-zA-Z]/; $et->SetFileType(); # # determine the RTF character set # if ($buff=~ /\\ansicpg(\d*)/) { $cs = "cp$1"; } elsif ($buff=~ /\\(ansi|mac|pc|pca)[^a-zA-Z]/) { my %trans = ( ansi => 'Latin', mac => 'MacRoman', pc => 'cp437', pca => 'cp850', ); $cs = $trans{$1}; } else { $et->Warn('Unspecified RTF encoding. Will assume Latin'); $cs = 'Latin'; } my $charset = $Image::ExifTool::charsetName{lc $cs}; unless ($charset) { $et->Warn("Unsupported RTF encoding $cs. Will assume Latin."); $charset = 'Latin'; } my $tagTablePtr = GetTagTable('Image::ExifTool::RTF::Main'); undef $buff; # # scan for \info group # for (;;) { $raf->Read($buf2, 65536) or last; if (defined $buff) { # read more but leave some overlap for the match $buff = substr($buff, -16) . $buf2; } else { $buff = $buf2; } next unless $buff =~ /[^\\]\{[\n\r]*\\info([^a-zA-Z])/g; # anything but a space is included in the contents pos($buff) = pos($buff) - 1 if $1 ne ' '; my $info = ReadToNested(\$buff, $raf); unless (defined $info) { $et->Warn('Unterminated information group'); last; } # process info commands (eg. "\author", "\*\copyright"); while ($info =~ /\{[\n\r]*(\\\*[\n\r]*)?\\([a-zA-Z]+)([^a-zA-Z])/g) { pos($info) = pos($info) - 1 if $3 ne ' '; my $tag = $2; my $val = ReadToNested(\$info); last unless defined $val; my $tagInfo = $$tagTablePtr{$tag}; if ($tagInfo and $$tagInfo{Format} and $$tagInfo{Format} eq 'date') { # parse RTF date commands my %idx = (yr=>0,mo=>1,dy=>2,hr=>3,min=>4,sec=>5); my @t = (0) x 6; while ($val =~ /\\([a-z]+)(\d+)/g) { next unless defined $idx{$1}; $t[$idx{$1}] = $2; } $val = sprintf("%.4d:%.2d:%.2d %.2d:%.2d:%.2d", @t); } else { # unescape RTF string value $val = UnescapeRTF($et, $val, $charset); } # create tagInfo for unknown tags if (not $tagInfo) { AddTagToTable($tagTablePtr, $tag, { Name => ucfirst($tag) }); } $et->HandleTag($tagTablePtr, $tag, $val); } } return 1 unless defined $buff; # # scan for \userprops (but don't read more from file to find the start of this command) # pos($buff) = 0; while ($buff =~ /[^\\]\{[\n\r]*\\\*[\n\r]*\\userprops([^a-zA-Z])/g) { # Note: The RTF spec places brackets around each propinfo structure, # but Microsoft Word doesn't write it this way, so tolerate either. pos($buff) = pos($buff) - 1 if $1 ne ' '; my $props = ReadToNested(\$buff, $raf); $tagTablePtr = Image::ExifTool::GetTagTable('Image::ExifTool::RTF::UserProps'); unless (defined $props) { $et->Warn('Unterminated user properties'); last; } # process user properties my $tag; while ($props =~ /\{[\n\r]*(\\\*[\n\r]*)?\\([a-zA-Z]+)([^a-zA-Z])/g) { pos($props) = pos($props) - 1 if $3 ne ' '; my $t = $2; my $val = ReadToNested(\$props); last unless defined $val; $val = UnescapeRTF($et, $val, $charset); if ($t eq 'propname') { $tag = $val; next; } elsif ($t ne 'staticval' or not defined $tag) { next; # ignore \linkval and \proptype for now } $tag =~ s/\s(.)/\U$1/g; # capitalize all words in tag name $tag =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters next unless $tag; # create tagInfo for unknown tags unless ($$tagTablePtr{$tag}) { AddTagToTable($tagTablePtr, $tag, { Name => $tag }); } $et->HandleTag($tagTablePtr, $tag, $val); } last; # (didn't really want to loop) } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::RTF - Read Rich Text Format meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read meta information from RTF (Rich Text Format) documents. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://download.microsoft.com/download/2/f/5/2f599e18-07ee-4ec5-a1e7-f4e6a9423592/Word2007RTFSpec9.doc> =item L<http://search.cpan.org/dist/RTF-Writer/lib/RTF/Cookbook.pod> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/RTF Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Samsung.pm��������������������������������������������������000644 �000765 �000024 �00000124730 12642461334 021673� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Samsung.pm # # Description: Samsung EXIF maker notes tags # # Revisions: 2010/03/01 - P. Harvey Created # # References: 1) Tae-Sun Park private communication # 2) http://www.cybercom.net/~dcoffin/dcraw/ # 3) Pascal de Bruijn private communication (NX100) # 4) Jaroslav Stepanek via rt.cpan.org # 5) Niels Kristian Bech Jensen private communication # 6) Nick Livchits private communication # 7) Iliah Borg private communcation (LibRaw) #------------------------------------------------------------------------------ package Image::ExifTool::Samsung; use strict; use vars qw($VERSION %samsungLensTypes); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.31'; sub WriteSTMN($$$); sub ProcessINFO($$$); sub ProcessSamsungIFD($$$); # Samsung LensType lookup %samsungLensTypes = ( # (added "Samsung NX" in all of these lens names - ref 4) 0 => 'Built-in or Manual Lens', #PH (EX1, WB2000) 1 => 'Samsung NX 30mm F2 Pancake', 2 => 'Samsung NX 18-55mm F3.5-5.6 OIS', # (also version II, ref 1) 3 => 'Samsung NX 50-200mm F4-5.6 ED OIS', # what about the non-OIS version of the 18-55, # which was supposed to be available before the 20-50? - PH 4 => 'Samsung NX 20-50mm F3.5-5.6 ED', #PH/4 5 => 'Samsung NX 20mm F2.8 Pancake', #PH 6 => 'Samsung NX 18-200mm F3.5-6.3 ED OIS', #4 7 => 'Samsung NX 60mm F2.8 Macro ED OIS SSA', #1 8 => 'Samsung NX 16mm F2.4 Pancake', #1/4 9 => 'Samsung NX 85mm F1.4 ED SSA', #4 10 => 'Samsung NX 45mm F1.8', #3 11 => 'Samsung NX 45mm F1.8 2D/3D', #3 12 => 'Samsung NX 12-24mm F4-5.6 ED', #4 13 => 'Saumsun NX 16-50mm F2-2.8 S ED OIS', #forum3833 14 => 'Samsung NX 10mm F3.5 Fisheye', #5 15 => 'Samsung NX 16-50mm F3.5-5.6 Power Zoom ED OIS', #6 20 => 'Samsung NX 50-150mm F2.8 S ED OIS', #PH 21 => 'Samsung NX 300mm F2.8 ED OIS', #7 ); # range of values for Formats used in encrypted information my %formatMinMax = ( int16u => [ 0, 65535 ], int32u => [ 0, 4294967295 ], int16s => [ -32768, 32767 ], int32s => [ -2147483648, 2147483647 ], ); # Samsung "STMN" maker notes (ref PH) %Image::ExifTool::Samsung::Main = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&WriteSTMN, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int32u', FIRST_ENTRY => 0, IS_OFFSET => [ 2 ], # tag 2 is 'IsOffset' IS_SUBDIR => [ 11 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, NOTES => q{ Tags found in the binary "STMN" format maker notes written by a number of Samsung models. }, 0 => { Name => 'MakerNoteVersion', Format => 'undef[8]', }, 2 => { Name => 'PreviewImageStart', OffsetPair => 3, # associated byte count tagID DataTag => 'PreviewImage', IsOffset => 3, Protected => 2, }, 3 => { Name => 'PreviewImageLength', OffsetPair => 2, # point to associated offset DataTag => 'PreviewImage', Protected => 2, }, 11 => { Name => 'SamsungIFD', # Note: this is not always an IFD. In many models the string # "Park Byeongchan" is found at this location Condition => '$$valPt =~ /^[^\0]\0\0\0/', Format => 'undef[$size - 44]', SubDirectory => { TagTable => 'Image::ExifTool::Samsung::IFD' }, }, ); %Image::ExifTool::Samsung::IFD = ( PROCESS_PROC => \&ProcessSamsungIFD, NOTES => q{ This is a standard-format IFD found in the maker notes of some Samsung models, except that the entry count is a 4-byte integer and the offsets are relative to the end of the IFD. Currently, no tags in this IFD are known, so the Unknown (-u) or Verbose (-v) option must be used to see this information. }, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, # 0x0001 - undef[4000|4100]: starts with "MN_PRV" (or all zeros) # 0x0002 - undef[7000] : starts with "Kim Miae" # 0x0003 - undef[5000] : starts with "Lee BK" # 0x0004 - undef[500|2000] : starts with "IPCD" (or all zeros) # 0x0006 - undef[100|200] : starts with "MN_ADS" (or all zeros) ); # Samsung maker notes (ref PH) %Image::ExifTool::Samsung::Type2 = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, NOTES => 'Tags found in the EXIF-format maker notes of newer Samsung models.', 0x0001 => { Name => 'MakerNoteVersion', Writable => 'undef', Count => 4, }, 0x0002 => { Name => 'DeviceType', Writable => 'int32u', PrintHex => 1, PrintConv => { 0x1000 => 'Compact Digital Camera', 0x2000 => 'High-end NX Camera', 0x3000 => 'HXM Video Camera', 0x12000 => 'Cell Phone', 0x300000 => 'SMX Video Camera', }, }, 0x0003 => { Name => 'SamsungModelID', Writable => 'int32u', PrintHex => 1, PrintConv => { 0x100101c => 'NX10', 0x1001226 => 'HMX-S10BP', 0x1001226 => 'HMX-S15BP', 0x1001233 => 'HMX-Q10', 0x1001234 => 'HMX-H300', 0x1001234 => 'HMX-H304', 0x100130c => 'NX100', 0x1001327 => 'NX11', 0x170104e => 'ES70, ES71 / VLUU ES70, ES71 / SL600', 0x1701052 => 'ES73 / VLUU ES73 / SL605', 0x1701300 => 'ES28 / VLUU ES28', 0x1701303 => 'ES74,ES75,ES78 / VLUU ES75,ES78', 0x2001046 => 'PL150 / VLUU PL150 / TL210 / PL151', 0x2001311 => 'PL120,PL121 / VLUU PL120,PL121', 0x2001315 => 'PL170,PL171 / VLUUPL170,PL171', 0x200131e => 'PL210, PL211 / VLUU PL210, PL211', 0x2701317 => 'PL20,PL21 / VLUU PL20,PL21', 0x2a0001b => 'WP10 / VLUU WP10 / AQ100', 0x3000000 => 'Various Models (0x3000000)', #0x3000000 => 'DV150F / DV151F / DV155F', #0x3000000 => 'NX mini', #0x3000000 => 'NX3000', #0x3000000 => 'ST150F / ST151F / ST152F', #0x3000000 => 'WB250F / WB251F / WB252F', #0x3000000 => 'WB30F / WB31F / WB32F', #0x3000000 => 'WB350F / WB351F / WB352F', #0x3000000 => 'WB800F', 0x3a00018 => 'Various Models (0x3a00018)', #0x3a00018 => 'ES30 / VLUU ES30', #0x3a00018 => 'ES80 / ES81', #0x3a00018 => 'PL200 / VLUU PL200', #0x3a00018 => 'PL80 / VLUU PL80 / SL630 / PL81', #0x3a00018 => 'PL90 / VLUU PL90', #0x3a00018 => 'WB1100F / WB1101F / WB1102F', #0x3a00018 => 'WB2200F', 0x400101f => 'ST1000 / ST1100 / VLUU ST1000 / CL65', 0x4001022 => 'ST550 / VLUU ST550 / TL225', 0x4001025 => 'Various Models (0x4001025)', #0x4001025 => 'DV300 / DV300F / DV305F', #0x4001025 => 'ST500 / VLUU ST500 / TL220', #0x4001025 => 'ST200 / ST200F / ST201 / ST201F / ST205F', 0x400103e => 'VLUU ST5500, ST5500, CL80', 0x4001041 => 'VLUU ST5000, ST5000, TL240', 0x4001043 => 'ST70 / VLUU ST70 / ST71', 0x400130a => 'Various Models (0x400130a)', #0x400130a => 'VLUU ST100, ST100', #0x400130a => 'VLUU ST600, ST600', #0x400130a => 'VLUU ST80, ST80', 0x400130e => 'ST90,ST91 / VLUU ST90,ST91', 0x4001313 => 'VLUU ST95, ST95', 0x4a00015 => 'VLUU ST60', 0x4a0135b => 'ST30, ST65 / VLUU ST65 / ST67', 0x5000000 => 'Various Models (0x5000000)', #0x5000000 => 'EX2F', #0x5000000 => 'NX1000', #0x5000000 => 'NX20', #0x5000000 => 'NX200', #0x5000000 => 'NX210', #0x5000000 => 'ST96', #0x5000000 => 'WB750', #0x5000000 => 'ST700', 0x5001038 => 'Various Models (0x5001038)', #0x5001038 => 'EK-GN120', #0x5001038 => 'HMX-E10', #0x5001038 => 'NX1', #0x5001038 => 'NX2000', #0x5001038 => 'NX30', #0x5001038 => 'NX300', #0x5001038 => 'WB2000', 0x500103a => 'WB650 / VLUU WB650 / WB660', 0x500103c => 'WB600 / VLUU WB600 / WB610', 0x500133e => 'WB150 / WB150F / WB152 / WB152F / WB151', 0x5a0000f => 'WB5000 / HZ25W', 0x6001036 => 'EX1', 0x700131c => 'VLUU SH100, SH100', 0x27127002 => 'SMX-C20N', }, }, # 0x0004 - undef[x] (SamsungContentsID?) # 0x000a - int32u (ContinuousShotMode?) # 0x000b - int16u (BestPhotoMode?) # 0x000c - int32u ? values: 0,1 # 0x000e - int32u[2] (SoundMultiPicture?) # 0x0010 - rational64u ? values: undef,inf # 0x0020 - int16u[2] (ColorInfoDCM?) 0x0021 => { #1 Name => 'PictureWizard', Writable => 'int16u', SubDirectory => { TagTable => 'Image::ExifTool::Samsung::PictureWizard' }, }, # 0x0022 - int32u (CaptureMode?) # 0x0023 - string: "0123456789" (PH) (placeholder for SerialNumber?) # 0x0025 - int32u (ImageCount?) # 0x002a - undef[4] (SNSDirectShare?) # 0x002f - string (GPSInfo01?) 0x0030 => { #1 (NX100 with GPS) Name => 'LocalLocationName', Writable => 'string', Format => 'undef', # this contains 2 place names (in Korean if in Korea), separated by a null+space # - terminate at double-null and replace nulls with newlines ValueConv => '$val=~s/\0\0.*//; $val=~s/\0 */\n/g; $val', ValueConvInv => '$val=~s/(\x0d\x0a|\x0d|\x0a)/\0 /g; $val . "\0\0"' }, 0x0031 => { #1 (NX100 with GPS) Name => 'LocationName', Writable => 'string', }, # 0x0032 - string (GPSInfo03) # 0x0033 - string (GPSInfo04) # 0x0034 - string (GPSInfo05) 0x0035 => { Name => 'PreviewIFD', Condition => '$$self{TIFF_TYPE} eq "SRW"', # (not an IFD in JPEG images) Groups => { 1 => 'PreviewIFD' }, Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Nikon::PreviewIFD', ByteOrder => 'Unknown', Start => '$val', }, }, # 0x003a - int16u[2] (SmartLensInfo?) # 0x003b - int16u[2] (PhotoStyleSelectInfo?) # 0x003c - int16u (SmartRange?) # 0x003d - int16u[5] (SmartCropInfo?) # 0x003e - int32u (DualCapture?) # 0x003f - int16u[2] (SGIFInfo?) # 0x0040 - int32u (FavoriteTagging?) values: 0 0x0043 => { #1 (NC) Name => 'CameraTemperature', Groups => { 2 => 'Camera' }, Writable => 'rational64s', # (DPreview samples all 0.2 C --> pre-production model) PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, 0x0045 => { Name => 'RawCompressionMode', Writable => 'int32u' }, # 0x004a - int32u[7] (ImageVerification?) # 0x004b - int32u[2] (RewindInfo?) # 0x0050 - int32u (ColorSpace? - inconsistent) values: 1 # 0x0054 - int16u[2] (WeatherInfo?) # 0x0060 - undef (AEInfo?) # 0x0080 - undef (AFInfo?) # 0x00a0 - undef[8192] (AWBInfo1): white balance information (ref 1): # At byte 5788, the WBAdjust: "Adjust\0\X\0\Y\0\Z\xee\xea\xce\xab", where # Y = BA adjust (0=Blue7, 7=0, 14=Amber7), Z = MG (0=Magenta7, 7=0, 14=Green7) # 0x00a1 - undef (AWBInfo2?) # 0x00c0 - undef (IPCInfo?) # 0x00c7 - undef (SmartFunctionInfo?) # 0x00e0 - int16u (SceneResult?) # 0x00e1 - int16u[8] (SADebugInfo01?) # 0x00e1 - int16u[x] (SADebugInfo02?) 0x0100 => { Name => 'FaceDetect', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On' }, # (NC) }, # 0x0101 - int16u[6] (FaceDetectInfo?) # 0x0102 - int16u[x] (FaceDetectInfo?) 0x0120 => { Name => 'FaceRecognition', Writable => 'int32u', PrintConv => { 0 => 'Off', 1 => 'On' }, # (NC) }, 0x0123 => { Name => 'FaceName', Writable => 'string' }, # 0x140 - undef (LensInfo?) # # the following tags found only in SRW images # # 0xa000 - rational64u: 1 or 1.1 (ref PH) (MakerNoteVersion?) 0xa001 => { #1 Name => 'FirmwareName', Groups => { 2 => 'Camera' }, Writable => 'string', }, # 0xa002 - string[30]: '0' or 'DY049P000000' (ref PH) (BodySerialNumber?) 0xa003 => { #1 (SRW images only) Name => 'LensType', Groups => { 2 => 'Camera' }, Writable => 'int16u', Count => -1, PrintConv => [ \%samsungLensTypes ], }, 0xa004 => { #1 Name => 'LensFirmware', Groups => { 2 => 'Camera' }, Writable => 'string', }, 0xa005 => { Name => 'InternalLensSerialNumber', # Not the printed serial number (ref 1) Writable => 'string', }, 0xa010 => { #1 Name => 'SensorAreas', Groups => { 2 => 'Camera' }, Notes => 'full and valid sensor areas', Writable => 'int32u', Count => 8, }, 0xa011 => { #1 Name => 'ColorSpace', Writable => 'int16u', PrintConv => { 0 => 'sRGB', 1 => 'Adobe RGB', }, }, 0xa012 => { #1 Name => 'SmartRange', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0xa013 => { #1 Name => 'ExposureCompensation', Writable => 'rational64s', }, 0xa014 => { #1 Name => 'ISO', Writable => 'int32u', }, 0xa018 => { #1 Name => 'ExposureTime', Writable => 'rational64u', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0xa019 => { #1 Name => 'FNumber', Priority => 0, Writable => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0xa01a => { #1 Name => 'FocalLengthIn35mmFormat', Groups => { 2 => 'Camera' }, Priority => 0, Format => 'int32u', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm$//;$val', }, # 0xa01b - int32u (ImageCount?) # 0xa01b - int16u (LDCLens?) 0xa020 => { #1 Name => 'EncryptionKey', Writable => 'int32u', Count => 11, Protected => 1, DataMember => 'EncryptionKey', RawConv => '$$self{EncryptionKey} = [ split(" ",$val) ]; $val', Notes => 'key used to decrypt the tags below', # value is "305 72 737 456 282 307 519 724 13 505 193" }, 0xa021 => { #1 Name => 'WB_RGGBLevelsUncorrected', Writable => 'int32u', Count => 4, Notes => 'these tags not corrected for WB_RGGBLevelsBlack', RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0")', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0)', }, 0xa022 => { #1 Name => 'WB_RGGBLevelsAuto', Writable => 'int32u', Count => 4, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,-4)', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,4)', }, 0xa023 => { #1 Name => 'WB_RGGBLevelsIlluminator1', Writable => 'int32u', Count => 4, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,-8)', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,8)', }, 0xa024 => { #1 Name => 'WB_RGGBLevelsIlluminator2', Writable => 'int32u', Count => 4, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,-1)', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,1)', }, #this doesn't seem correct #0xa025 => { #PH/1 (PostAEGain?) # Name => 'ColorTemperatureAuto', # Writable => 'int32u', # RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,6)', # RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,-6)', #}, 0xa028 => { #2/PH Name => 'WB_RGGBLevelsBlack', Writable => 'int32s', Count => 4, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0")', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0)', }, 0xa030 => { #1 Name => 'ColorMatrix', Writable => 'int32s', Count => 9, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0)', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0")', }, 0xa031 => { #1 Name => 'ColorMatrixSRGB', Writable => 'int32s', Count => 9, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0)', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0")', }, 0xa032 => { #1 Name => 'ColorMatrixAdobeRGB', Writable => 'int32s', Count => 9, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0)', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0")', }, 0xa033 => { #1 Name => 'CbCrMatrixDefault', Writable => 'int32s', Count => 4, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0)', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0")', }, 0xa034 => { #1 Name => 'CbCrMatrix', Writable => 'int32s', Count => 4, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,4)', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,-4)', }, 0xa035 => { #1 Name => 'CbCrGainDefault', Writable => 'int32u', Count => 2, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0")', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0)', }, 0xa036 => { #1 Name => 'CbCrGain', Writable => 'int32u', Count => 2, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,-2)', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,2)', }, 0xa040 => { #1 Name => 'ToneCurveSRGBDefault', Writable => 'int32u', Count => 23, Notes => q{ first value gives the number of tone curve entries. This is followed by an array of X coordinates then an array of Y coordinates }, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0,"-0")', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",0)', }, 0xa041 => { #1 Name => 'ToneCurveAdobeRGBDefault', Writable => 'int32u', Count => 23, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0,"-0")', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",0)', }, 0xa042 => { #1 Name => 'ToneCurveSRGB', Writable => 'int32u', Count => 23, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0,"-0")', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",0)', }, 0xa043 => { #1 Name => 'ToneCurveAdobeRGB', Writable => 'int32u', Count => 23, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0,"-0")', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",0)', }, 0xa048 => { #1 Name => 'RawData', Unknown => 1, Writable => 'int32s', Count => 12, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0)', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0")', }, 0xa050 => { #1 Name => 'Distortion', Unknown => 1, Writable => 'int32s', Count => 8, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0)', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0")', }, 0xa051 => { #1 Name => 'ChromaticAberration', Unknown => 1, Writable => 'int16u', Count => 22, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",-7,-3)', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0,7,3)', }, 0xa052 => { #1 Name => 'Vignetting', Unknown => 1, Writable => 'int16u', Count => 15, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0,"-0")', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",0)', }, 0xa053 => { #1 Name => 'VignettingCorrection', Unknown => 1, Writable => 'int16u', Count => 15, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0,"-0")', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",0)', }, 0xa054 => { #1 Name => 'VignettingSetting', Unknown => 1, Writable => 'int16u', Count => 15, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,0,"-0")', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,"-0",0)', }, 0xa055 => { #1 Name => 'Samsung_Type2_0xa055', # (DistortionCamera1st?) Unknown => 1, Hidden => 1, Writable => 'int32s', Count => 8, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,8)', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,-8)', }, 0xa056 => { #1 Name => 'Samsung_Type2_0xa056', # (DistortionCamera2nd?) Unknown => 1, Hidden => 1, Writable => 'int32s', Count => 8, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,5)', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,-5)', }, 0xa057 => { #1 Name => 'Samsung_Type2_0xa057', # (DistortionCameraSetting?) Unknown => 1, Hidden => 1, Writable => 'int32s', Count => 8, RawConv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,2)', RawConvInv => 'Image::ExifTool::Samsung::Crypt($self,$val,$tagInfo,-2)', }, # 0xa060 - rational64u (CISTemperature?) # 0xa061 - int16u (Compression?) ); # Picture Wizard information (ref 1) %Image::ExifTool::Samsung::PictureWizard = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FORMAT => 'int16u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0 => { Name => 'PictureWizardMode', PrintConvColumns => 3, PrintConv => { #3 0 => 'Standard', 1 => 'Vivid', 2 => 'Portrait', 3 => 'Landscape', 4 => 'Forest', 5 => 'Retro', 6 => 'Cool', 7 => 'Calm', 8 => 'Classic', 9 => 'Custom1', 10 => 'Custom2', 11 => 'Custom3', 255 => 'n/a', #PH }, }, 1 => 'PictureWizardColor', 2 => { Name => 'PictureWizardSaturation', ValueConv => '$val - 4', ValueConvInv => '$val + 4', }, 3 => { Name => 'PictureWizardSharpness', ValueConv => '$val - 4', ValueConvInv => '$val + 4', }, 4 => { Name => 'PictureWizardContrast', ValueConv => '$val - 4', ValueConvInv => '$val + 4', }, ); # INFO tags in Samsung MP4 videos (ref PH) %Image::ExifTool::Samsung::INFO = ( PROCESS_PROC => \&ProcessINFO, GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, NOTES => q{ This information is found in MP4 videos from Samsung models such as the SMX-C20N. }, EFCT => 'Effect', # (guess) QLTY => 'Quality', # MDEL - value: 0 # ASPT - value: 1, 2 ); # Samsung MP4 TAGS information (PH - from WP10 sample) # --> very similar to Sanyo MP4 information %Image::ExifTool::Samsung::MP4 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ This information is found in Samsung MP4 videos from models such as the WP10. }, 0x00 => { Name => 'Make', Format => 'string[24]', PrintConv => 'ucfirst(lc($val))', }, 0x18 => { Name => 'Model', Description => 'Camera Model Name', Format => 'string[16]', }, 0x2e => { # (NC) Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val ? 10 / $val : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x32 => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', }, 0x3a => { # (NC) Name => 'ExposureCompensation', Format => 'rational64s', PrintConv => '$val ? sprintf("%+.1f", $val) : 0', }, 0x6a => { Name => 'ISO', Format => 'int32u', }, 0x7d => { Name => 'Software', Format => 'string[32]', # (these tags are not at a constant offset for Olympus/Sanyo videos, # so just to be safe use this to validate subsequent tags) RawConv => q{ $val =~ /^SAMSUNG/ or return undef; $$self{SamsungMP4} = 1; return $val; }, }, 0xf4 => { Name => 'Thumbnail', Condition => '$$self{SamsungMP4}', SubDirectory => { TagTable => 'Image::ExifTool::Samsung::Thumbnail', Base => '$start', }, }, ); # thumbnail image information found in MP4 videos (similar in Olympus,Samsung,Sanyo) %Image::ExifTool::Samsung::Thumbnail = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, FORMAT => 'int32u', 1 => 'ThumbnailWidth', 2 => 'ThumbnailHeight', 3 => 'ThumbnailLength', 4 => { Name => 'ThumbnailOffset', IsOffset => 1 }, ); # Samsung MP4 @sec information (PH - from WB30F sample) %Image::ExifTool::Samsung::sec = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ This information is found in the @sec atom of Samsung MP4 videos from models such as the WB30F. }, 0x00 => { Name => 'Make', Format => 'string[32]', PrintConv => 'ucfirst(lc($val))', }, 0x20 => { Name => 'Model', Description => 'Camera Model Name', Format => 'string[32]', }, 0x200 => { Name => 'ThumbnailWidth', Format => 'int32u' }, 0x204 => { Name => 'ThumbnailHeight', Format => 'int32u' }, 0x208 => { Name => 'ThumbnailLength', Format => 'int32u' }, # (2 bytes too long in my sample) 0x20c => { Name => 'ThumbnailImage', Groups => { 2 => 'Preview' }, Format => 'undef[$val{0x208}]', Notes => 'the THM image, embedded metadata is extracted as the first sub-document', SetBase => 1, RawConv => q{ my $pt = $self->ValidateImage(\$val, $tag); if ($pt) { $$self{BASE} += 0x20c; $$self{DOC_NUM} = ++$$self{DOC_COUNT}; $self->ExtractInfo($pt, { ReEntry => 1 }); $$self{DOC_NUM} = 0; } return $pt; }, }, ); # Samsung MP4 smta information (PH - from SM-C101 sample) %Image::ExifTool::Samsung::smta = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, NOTES => q{ This information is found in the smta atom of Samsung MP4 videos from models such as the Galaxy S4. }, svss => { Name => 'SamsungSvss', SubDirectory => { TagTable => 'Image::ExifTool::Samsung::svss' }, }, # swtr - 4 bytes, all zero # scid - 8 bytes, all zero # saut - 4 bytes, all zero ); # Samsung MP4 svss information (PH - from SM-C101 sample) %Image::ExifTool::Samsung::svss = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Video' }, NOTES => q{ This information is found in the svss atom of Samsung MP4 videos from models such as the Galaxy S4. }, # junk - 10240 bytes, all zero ); # thumbnail image information found in some MP4 videos %Image::ExifTool::Samsung::Thumbnail2 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, FORMAT => 'int32u', 1 => 'ThumbnailWidth', 2 => 'ThumbnailHeight', 3 => 'ThumbnailLength', 4 => { Name => 'ThumbnailOffset', IsOffset => 1 }, ); # information extracted from Samsung trailer (ie. Samsung SM-T805 "Sound & Shot" JPEG) %Image::ExifTool::Samsung::Trailer = ( GROUPS => { 0 => 'MakerNotes', 2 => 'Other' }, VARS => { NO_ID => 1 }, NOTES => q{ Tags extracted from the trailer of JPEG images written when using certain features (such as "Sound & Shot" or "Shot & More") from Samsung models such as the Galaxy S4 and Tab S. }, # stuff written with "Shot & More" feature '0x0001' => { Name => 'EmbeddedImage', Groups => { 2 => 'Preview' }, Binary => 1 }, '0x0001-name' => 'EmbeddedImageName', # 0x0830 - unknown (164004 bytes, name like "1165724808.pre") # stuff written with "Sound & Shot" feature '0x0100' => { Name => 'EmbeddedAudioFile', Binary => 1 }, '0x0100-name' => 'EmbeddedAudioFileName', # 0x0800 - SoundShot_Meta_Info (contains only already-extracted sound shot name) ); # Samsung composite tags %Image::ExifTool::Samsung::Composite = ( GROUPS => { 2 => 'Image' }, WB_RGGBLevels => { Require => { 0 => 'WB_RGGBLevelsUncorrected', 1 => 'WB_RGGBLevelsBlack', }, ValueConv => q{ my @a = split ' ', $val[0]; my @b = split ' ', $val[1]; $a[$_] -= $b[$_] foreach 0..$#a; return "@a"; }, }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::Samsung'); #------------------------------------------------------------------------------ # Encrypt/Decrypt NX10 information # Inputs: 0) ExifTool ref, 1) value as a string of integers, # 2) tagInfo hash ref, 3-N) encryption salt values # Returns: encrypted/decrypted value # Notes: # 1) The encryption salt starts with '-' to reverse the encryption algorithm # 2) Additional salt values are provided when tag stores multiple arrays # (in which case the first value of the tag gives the array length) sub Crypt($$$@) { my ($et, $val, $tagInfo, @salt) = @_; my $key = $$et{EncryptionKey} or return undef; my $format = $$tagInfo{Writable} || $$tagInfo{Format} or return undef; return undef unless $formatMinMax{$format}; my ($min, $max) = @{$formatMinMax{$format}}; my @a = split ' ', $val; my $newSalt = (@salt > 1) ? 1 : 0; # skip length entry if this is an array my ($i, $sign, $salt, $start); for ($i=$newSalt; $i<@a; ++$i) { if ($i == $newSalt) { $start = $i; $salt = shift @salt; $sign = ($salt =~ s/^-//) ? -1 : 1; $newSalt += $a[0] if @salt; } $a[$i] += $sign * $$key[($salt+$i-$start) % scalar(@$key)]; # handle integer wrap-around if ($sign > 0) { $a[$i] -= $max - $min + 1 if $a[$i] > $max; } else { $a[$i] += $max - $min + 1 if $a[$i] < $min; } } return "@a"; } #------------------------------------------------------------------------------ # Process Samsung MP4 INFO data # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessINFO($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $pos = $$dirInfo{DirStart}; my $len = $$dirInfo{DirLen}; my $end = $pos + $len; $et->VerboseDir('INFO', undef, $len); while ($pos + 8 <= $end) { my $tag = substr($$dataPt, $pos, 4); my $val = Get32u($dataPt, $pos + 4); unless ($$tagTablePtr{$tag}) { my $name = "Samsung_INFO_$tag"; $name =~ tr/-_0-9a-zA-Z//dc; AddTagToTable($tagTablePtr, $tag, { Name => $name }) if $name; } $et->HandleTag($tagTablePtr, $tag, $val); $pos += 8; } return 1; } #------------------------------------------------------------------------------ # Inputs: 0) ExifTool object ref, 1) source dirInfo ref, 2) tag table ref # Returns: true on success sub ProcessSamsungIFD($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $len = $$dirInfo{DataLen}; my $pos = $$dirInfo{DirStart}; return 0 unless $pos + 4 < $len; my $dataPt = $$dirInfo{DataPt}; my $buff = substr($$dataPt, $pos, 4); # this is not an IFD for many models # (the string "Park Byeongchan" is often found here) return 0 unless $buff =~ s/^([^\0])\0\0\0/$1\0$1\0/s; my $numEntries = ord $1; if ($$et{HTML_DUMP}) { my $pt = $$dirInfo{DirStart} + $$dirInfo{DataPos} + $$dirInfo{Base}; $et->HDump($pt-44, 44, "MakerNotes header", 'Samsung'); $et->HDump($pt, 4, "MakerNotes entries", "Format: int32u\nEntry count: $numEntries"); $$dirInfo{NoDumpEntryCount} = 1; } substr($$dataPt, $pos, 4) = $buff; # insert bogus 2-byte entry count # offset base is at end of IFD my $shift = $$dirInfo{DirStart} + 4 + $numEntries * 12 + 4; $$dirInfo{Base} += $shift; $$dirInfo{DataPos} -= $shift; $$dirInfo{DirStart} += 2; # start at bogus entry count $$dirInfo{ZeroOffsetOK} = 1; # disable check for zero offset delete $$et{NO_UNKNOWN}; # (set for BinaryData, but not for EXIF IFD's) my $rtn = Image::ExifTool::Exif::ProcessExif($et, $dirInfo, $tagTablePtr); substr($$dataPt, $pos + 2, 1) = "\0"; # remove bogus count return $rtn; } #------------------------------------------------------------------------------ # Read/write Samsung trailer (ie. "Sound & Shot" written by Galaxy Tab S (SM-T805)) # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 not valid Samsung trailer, or -1 error writing # - updates DataPos to point to start of Samsung trailer # - updates DirLen to existing trailer length sub ProcessSamsung($$$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $offset = $$dirInfo{Offset} || 0; my $outfile = $$dirInfo{OutFile}; my $verbose = $et->Options('Verbose'); my $unknown = $et->Options('Unknown'); my ($buff, $buf2, $index, $offsetPos, $audioNOff, $audioSize); return 0 unless $raf->Seek(-6-$offset, 2) and $raf->Read($buff, 6) == 6 and ($buff eq 'QDIOBS' or $buff eq "\0\0SEFT"); my $endPos = $raf->Tell(); $raf->Seek(-2, 1) or return 0 if $buff eq 'QDIOBS'; # rewind to before 'BS' my $blockEnd = $raf->Tell(); SetByteOrder('II'); # read blocks backward until we find the SEFH/SEFT block # (the only other block I have seen is QDIO/QDIO) SamBlock: for (;;) { last unless $raf->Seek($blockEnd-8, 0) and $raf->Read($buff, 8) == 8; my $type = substr($buff, 4); last unless $type =~ /^\w+$/; my $len = Get32u(\$buff, 0); last unless $len < 0x10000 and $len >= 4 and $len + 8 < $blockEnd; last unless $raf->Seek(-8-$len, 1) and $raf->Read($buff, $len) == $len; $blockEnd -= $len + 8; unless ($type eq 'SEFT') { # look for directory block (ends with "SEFT") next unless $outfile and $type eq 'QDIO'; # QDIO block format: # 0 - 'QDIO' # 4 - int32u: 101 (version) # 8 - int32u: 1 # 12 - int32u: absolute offset of audio file start (augh!!) # 16 - int32u: absolute offset of audio file end (augh!!) # 20 - int32u: 20 (QDIO block length minus 8) # 24 - 'QDIO' if ($len == 20) { # save position of audio file offset in QDIO block $offsetPos = $endPos - $raf->Tell() + $len - 12; } else { $et->Error('Unsupported Samsung trailer QDIO block', 1); } next; } last unless $buff =~ /^SEFH/ and $len >= 12; # validate SEFH header my $dirPos = $raf->Tell() - $len; # my $ver = Get32u(\$buff, 0x04); # version (=101) my $count = Get32u(\$buff, 0x08); last if 12 + 12 * $count > $len; my $tagTablePtr = GetTagTable('Image::ExifTool::Samsung::Trailer'); # scan ahead quickly to look for the block where the data comes first # (have only seen this to be the first in the directory, but just in case) my $firstBlock = 0; for ($index=0; $index<$count; ++$index) { my $entry = 12 + 12 * $index; my $noff = Get32u(\$buff, $entry + 4); # negative offset $firstBlock = $noff if $firstBlock < $noff; } # save trailer position and length my $dataPos = $$dirInfo{DataPos} = $dirPos - $firstBlock; my $dirLen = $$dirInfo{DirLen} = $endPos - $dataPos; if (($verbose or $$et{HTML_DUMP}) and not $outfile) { $et->DumpTrailer($dirInfo); return 1 if $$et{HTML_DUMP}; } # read through the SEFH/SEFT directory entries for ($index=0; $index<$count; ++$index) { my $entry = 12 + 12 * $index; # first 2 bytes always 0 (may be part of block type) my $type = Get16u(\$buff, $entry + 2); # block type my $noff = Get32u(\$buff, $entry + 4); # negative offset my $size = Get32u(\$buff, $entry + 8); # block size last SamBlock if $noff > $dirPos or $size > $noff or $size < 8; $firstBlock = $noff if $firstBlock < $noff; if ($outfile) { next unless $type == 0x0100 and not $audioNOff; # save offset and length of first audio file for QDIO block last unless $raf->Seek($dirPos-$noff, 0) and $raf->Read($buf2, 8) == 8; $len = Get32u(\$buf2, 4); $audioNOff = $noff - 8 - $len; # negative offset to start of audio data $audioSize = $size - 8 - $len; next; } # add unknown tags if necessary my $tag = sprintf("0x%.4x", $type); unless ($$tagTablePtr{$tag}) { next unless $unknown or $verbose; my %tagInfo = ( Name => "SamsungTrailer_$tag", Description => "Samsung Trailer $tag", Unknown => 1, Binary => 1, ); AddTagToTable($tagTablePtr, $tag, \%tagInfo); my %tagInfo2 = ( Name => "SamsungTrailer_${tag}Name", Description => "Samsung Trailer $tag Name", Unknown => 1, ); AddTagToTable($tagTablePtr, "$tag-name", \%tagInfo2); } last unless $raf->Seek($dirPos-$noff, 0) and $raf->Read($buf2, $size) == $size; # (could validate the first 4 bytes of the block because they # are the same as the first 4 bytes of the directory entry) $len = Get32u(\$buf2, 4); last if $len + 8 > $size; # extract tag name and value $et->HandleTag($tagTablePtr, "$tag-name", undef, DataPt => \$buf2, DataPos => $dirPos - $noff, Start => 8, Size => $len, ); $et->HandleTag($tagTablePtr, $tag, undef, DataPt => \$buf2, DataPos => $dirPos - $noff, Start => 8 + $len, Size => $size - (8 + $len), ); } if ($outfile) { last unless $raf->Seek($dataPos, 0) and $raf->Read($buff, $dirLen) == $dirLen; # adjust the absolute offset in the QDIO block if necessary if ($offsetPos and $audioNOff) { # initialize the audio file start/end position in the QDIO block my $newPos = Tell($outfile) + $dirPos - $audioNOff - $dataPos; Set32u($newPos, \$buff, length($buff) - $offsetPos); Set32u($newPos + $audioSize, \$buff, length($buff) - $offsetPos + 4); # add a fixup so the calling routine can apply further shifts if necessary require Image::ExifTool::Fixup; my $fixup = $$dirInfo{Fixup}; $fixup or $fixup = $$dirInfo{Fixup} = new Image::ExifTool::Fixup; $fixup->AddFixup(length($buff) - $offsetPos); $fixup->AddFixup(length($buff) - $offsetPos + 4); } $et->VPrint(0, "Writing Samsung trailer ($dirLen bytes)\n") if $verbose; Write($$dirInfo{OutFile}, $buff) or return -1; return 1; } return 1; } $et->Warn('Error processing Samsung trailer',1); return 0; } #------------------------------------------------------------------------------ # Write Samsung STMN maker notes # Inputs: 0) ExifTool object ref, 1) source dirInfo ref, 2) tag table ref # Returns: Binary data block or undefined on error sub WriteSTMN($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; # create a Fixup for the PreviewImage $$dirInfo{Fixup} = new Image::ExifTool::Fixup; my $val = Image::ExifTool::WriteBinaryData($et, $dirInfo, $tagTablePtr); # force PreviewImage into the trailer even if it fits in EXIF segment $$et{PREVIEW_INFO}{IsTrailer} = 1 if $$et{PREVIEW_INFO}; return $val; } 1; # end __END__ =head1 NAME Image::ExifTool::Samsung - Samsung EXIF maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Samsung maker notes in EXIF information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.cybercom.net/~dcoffin/dcraw/> =back =head1 ACKNOWLEDGEMENTS Thanks to Tae-Sun Park for decoding a number of tags, and Pascal de Bruijn for the PictureWizard values. =head1 SEE ALSO L<Image::ExifTool::TagNames/Samsung Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Sanyo.pm����������������������������������������������������000644 �000765 �000024 �00000027525 12642461334 021353� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Sanyo.pm # # Description: Sanyo EXIF maker notes tags # # Revisions: 04/06/2004 - P. Harvey Created # # Reference: http://www.exif.org/makernotes/SanyoMakerNote.html #------------------------------------------------------------------------------ package Image::ExifTool::Sanyo; use strict; use vars qw($VERSION); use Image::ExifTool::Exif; $VERSION = '1.16'; my %offOn = ( 0 => 'Off', 1 => 'On', ); %Image::ExifTool::Sanyo::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 1, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, 0x00ff => { # this is an absolute offset in the JPG file... odd - PH Name => 'MakerNoteOffset', Writable => 'int32u', }, 0x0100 => { Name => 'SanyoThumbnail', Groups => { 2 => 'Preview' }, Writable => 'undef', WriteCheck => '$self->CheckImage(\$val)', RawConv => '$self->ValidateImage(\$val,$tag)', }, 0x0200 => { Name => 'SpecialMode', Writable => 'int32u', Count => 3, }, 0x0201 => { Name => 'SanyoQuality', Flags => 'PrintHex', Writable => 'int16u', PrintConv => { 0x0000 => 'Normal/Very Low', 0x0001 => 'Normal/Low', 0x0002 => 'Normal/Medium Low', 0x0003 => 'Normal/Medium', 0x0004 => 'Normal/Medium High', 0x0005 => 'Normal/High', 0x0006 => 'Normal/Very High', 0x0007 => 'Normal/Super High', # have seen 0x11 with HD2000 in '8M-H JPEG' mode - PH 0x0100 => 'Fine/Very Low', 0x0101 => 'Fine/Low', 0x0102 => 'Fine/Medium Low', 0x0103 => 'Fine/Medium', 0x0104 => 'Fine/Medium High', 0x0105 => 'Fine/High', 0x0106 => 'Fine/Very High', 0x0107 => 'Fine/Super High', 0x0200 => 'Super Fine/Very Low', 0x0201 => 'Super Fine/Low', 0x0202 => 'Super Fine/Medium Low', 0x0203 => 'Super Fine/Medium', 0x0204 => 'Super Fine/Medium High', 0x0205 => 'Super Fine/High', 0x0206 => 'Super Fine/Very High', 0x0207 => 'Super Fine/Super High', }, }, 0x0202 => { Name => 'Macro', Writable => 'int16u', PrintConv => { 0 => 'Normal', 1 => 'Macro', 2 => 'View', 3 => 'Manual', }, }, 0x0204 => { Name => 'DigitalZoom', Writable => 'rational64u', }, 0x0207 => 'SoftwareVersion', 0x0208 => 'PictInfo', 0x0209 => 'CameraID', 0x020e => { Name => 'SequentialShot', Writable => 'int16u', PrintConv => { 0 => 'None', 1 => 'Standard', 2 => 'Best', 3 => 'Adjust Exposure', }, }, 0x020f => { Name => 'WideRange', Writable => 'int16u', PrintConv => \%offOn, }, 0x0210 => { Name => 'ColorAdjustmentMode', Writable => 'int16u', PrintConv => \%offOn, }, 0x0213 => { Name => 'QuickShot', Writable => 'int16u', PrintConv => \%offOn, }, 0x0214 => { Name => 'SelfTimer', Writable => 'int16u', PrintConv => \%offOn, }, # 0x0215 - Flash? 0x0216 => { Name => 'VoiceMemo', Writable => 'int16u', PrintConv => \%offOn, }, 0x0217 => { Name => 'RecordShutterRelease', Writable => 'int16u', PrintConv => { 0 => 'Record while down', 1 => 'Press start, press stop', }, }, 0x0218 => { Name => 'FlickerReduce', Writable => 'int16u', PrintConv => \%offOn, }, 0x0219 => { Name => 'OpticalZoomOn', Writable => 'int16u', PrintConv => \%offOn, }, 0x021b => { Name => 'DigitalZoomOn', Writable => 'int16u', PrintConv => \%offOn, }, 0x021d => { Name => 'LightSourceSpecial', Writable => 'int16u', PrintConv => \%offOn, }, 0x021e => { Name => 'Resaved', Writable => 'int16u', PrintConv => { 0 => 'No', 1 => 'Yes', }, }, 0x021f => { Name => 'SceneSelect', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Sport', 2 => 'TV', 3 => 'Night', 4 => 'User 1', 5 => 'User 2', 6 => 'Lamp', #PH }, }, 0x0223 => [ { Name => 'ManualFocusDistance', Condition => '$format eq "rational64u"', Writable => 'rational64u', }, { #PH Name => 'FaceInfo', SubDirectory => { TagTable => 'Image::ExifTool::Sanyo::FaceInfo' }, }, ], 0x0224 => { Name => 'SequenceShotInterval', Writable => 'int16u', PrintConv => { 0 => '5 frames/s', 1 => '10 frames/s', 2 => '15 frames/s', 3 => '20 frames/s', }, }, 0x0225 => { Name => 'FlashMode', Writable => 'int16u', PrintConv => { 0 => 'Auto', 1 => 'Force', 2 => 'Disabled', 3 => 'Red eye', }, }, 0x0e00 => { Name => 'PrintIM', Description => 'Print Image Matching', Writable => 0, SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main', }, }, 0x0f00 => { Name => 'DataDump', Writable => 0, Binary => 1, }, ); # face detection information (ref PH) %Image::ExifTool::Sanyo::FaceInfo = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, WRITABLE => 1, FORMAT => 'int32u', FIRST_ENTRY => 0, 0 => 'FacesDetected', 4 => { Name => 'FacePosition', Format => 'int32u[4]', Notes => q{ left, top, right and bottom coordinates of detected face in an unrotated 640-pixel-wide image, with increasing Y downwards }, }, ); # tags in Sanyo MOV videos (PH - observations from an E6 sample) # (similar information in Kodak,Minolta,Nikon,Olympus,Pentax and Sanyo videos) %Image::ExifTool::Sanyo::MOV = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'This information is found in Sanyo MOV videos.', 0x00 => { Name => 'Make', Format => 'string[24]', }, 0x18 => { Name => 'Model', Description => 'Camera Model Name', Format => 'string[8]', }, # (01 00 at offset 0x20) 0x26 => { Name => 'ExposureTime', Format => 'int32u', ValueConv => '$val ? 10 / $val : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 0x2a => { Name => 'FNumber', Format => 'int32u', ValueConv => '$val / 10', PrintConv => 'sprintf("%.1f",$val)', }, 0x32 => { Name => 'ExposureCompensation', Format => 'int32s', ValueConv => '$val / 10', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', }, 0x44 => { Name => 'WhiteBalance', Format => 'int16u', PrintConv => { 0 => 'Auto', 1 => 'Daylight', 2 => 'Shade', 3 => 'Fluorescent', #2 4 => 'Tungsten', 5 => 'Manual', }, }, 0x48 => { Name => 'FocalLength', Format => 'int32u', ValueConv => '$val / 10', PrintConv => 'sprintf("%.1f mm",$val)', }, ); # tags in Sanyo MP4 videos (PH - from C4, C5 and HD1A samples) # --> very similar to Samsung MP4 information # (there is still a lot more information here that could be decoded!) %Image::ExifTool::Sanyo::MP4 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'This information is found in Sanyo MP4 videos.', 0x00 => { Name => 'Make', Format => 'string[5]', PrintConv => 'ucfirst(lc($val))', }, 0x18 => { Name => 'Model', Description => 'Camera Model Name', Format => 'string[8]', }, # (01 00 at offset 0x28) # (0x2e has values 0x31, 0x33 and 0x3c in my samples, but # some of the shutter speeds should be around 1/500 or so) 0x32 => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', }, 0x3a => { # (NC) Name => 'ExposureCompensation', Format => 'rational64s', PrintConv => '$val ? sprintf("%+.1f", $val) : 0', }, 0x6a => { Name => 'ISO', Format => 'int32u', }, 0xd1 => { Name => 'Software', Notes => 'these tags are shifted up by 1 byte for some models like the HD1A', Format => 'undef[32]', RawConv => q{ $val =~ /^SANYO/ or return undef; $val =~ tr/\0//d; $$self{SanyoSledder0xd1} = 1; return $val; }, }, 0xd2 => { Name => 'Software', Format => 'undef[32]', RawConv => q{ $val =~ /^SANYO/ or return undef; $val =~ tr/\0//d; $$self{SanyoSledder0xd2} = 1; return $val; }, }, 0xf1 => { Name => 'Thumbnail', Condition => '$$self{SanyoSledder0xd1}', SubDirectory => { TagTable => 'Image::ExifTool::Sanyo::Thumbnail', Base => '$start', }, }, 0xf2 => { Name => 'Thumbnail', Condition => '$$self{SanyoSledder0xd2}', SubDirectory => { TagTable => 'Image::ExifTool::Sanyo::Thumbnail', Base => '$start', }, }, ); # thumbnail image information found in MP4 videos (similar in Olympus,Samsung,Sanyo) %Image::ExifTool::Sanyo::Thumbnail = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FIRST_ENTRY => 0, FORMAT => 'int32u', 1 => 'ThumbnailWidth', 2 => 'ThumbnailHeight', 3 => 'ThumbnailLength', 4 => { Name => 'ThumbnailOffset', IsOffset => 1 }, ); #------------------------------------------------------------------------------ # Patch incorrect offsets in J1, J2, J4, S1, S3 and S4 maker notes # Inputs: 0) valuePtr, 1) end of previous value, 2) value size, 3) tag ID, 4) write flag sub FixOffsets($$$$;$) { my ($valuePtr, $valEnd, $size, $tagID, $wFlag) = @_; # ignore existing offsets and calculate reasonable values instead if ($tagID == 0x100) { # just ignore the SanyoThumbnail when writing (pointer is garbage) $_[0] = undef if $wFlag; } else { $_[0] = $valEnd; # set value pointer to next logical location ++$size if $size & 0x01; $_[1] += $size; # update end-of-value pointer } } 1; # end __END__ =head1 NAME Image::ExifTool::Sanyo - Sanyo EXIF maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Sanyo maker notes in EXIF information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.exif.org/makernotes/SanyoMakerNote.html> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Sanyo Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Scalado.pm��������������������������������������������������000644 �000765 �000024 �00000007647 12642461334 021633� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Scalado.pm # # Description: Read APP4 SCALADO metadata # # Revisions: 2013-09-13 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::Scalado; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::PLIST; $VERSION = '1.01'; sub ProcessScalado($$$); # JPEG APP4 SCALADO tags %Image::ExifTool::Scalado::Main = ( GROUPS => { 0 => 'APP4', 1 => 'Scalado', 2 => 'Image' }, PROCESS_PROC => \&ProcessScalado, TAG_PREFIX => 'Scalado', FORMAT => 'int32s', NOTES => q{ Tags extracted from the JPEG APP4 "SCALADO" segment found in images from HTC, LG and Samsung phones. (Presumably written by Scalado mobile software, L<http://www.scalado.com/>.) }, SPMO => { Name => 'DataLength', Unknown => 1, }, WDTH => { Name => 'PreviewImageWidth', ValueConv => '$val ? abs($val) : undef', }, HGHT => { Name => 'PreviewImageHeight', ValueConv => '$val ? abs($val) : undef', }, QUAL => { Name => 'PreviewQuality', ValueConv => '$val ? abs($val) : undef', }, # tags not yet decoded with observed values: # CHKH: 0, various negative values # CHKL: various negative values # CLEN: -1024 # CSPC: -2232593 # DATA: (+ve data length) # HDEC: 0 # MAIN: 0, 60 # META: 24 # SCI0: (+ve data length) often 36 # SCI1: (+ve data length) 36 # SCX0: (+ve data length) # SCX1: (+ve data length) often 84 # WDEC: 0 # VERS: -131328 ); #------------------------------------------------------------------------------ # Extract information from the JPEG APP4 SCALADO segment # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessScalado($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $pos = 0; my $end = length $$dataPt; my $unknown = $et->Options('Unknown'); $et->VerboseDir('APP4 SCALADO', undef, $end); SetByteOrder('MM'); for (;;) { last if $pos + 12 > $end; my $tag = substr($$dataPt, $pos, 4); my $ver = Get32u($dataPt, $pos + 4); # (looks like a version for some tags) if (not $$tagTablePtr{$tag} and $unknown) { my $name = $tag; $name =~ tr/-A-Za-z0-9_//dc; last unless length $name; # stop if tag is garbage AddTagToTable($tagTablePtr, $tag, { Name => "Scalado_$name", Description => "Scalado $name", Unknown => 1, }); } $et->HandleTag($tagTablePtr, $tag, undef, DataPt => $dataPt, Start => $pos + 8, Size => 4, Extra => ", ver $ver", ); if ($tag eq 'SPMO') { my $val = Get32u($dataPt, $pos + 8) ; if ($ver < 5) { # (I don't have samples for version 3 or 4, so I'm not sure about these) $end -= $val; # SPMO gives trailer data length } else { $end = $val + 12; # SPMO gives length of Scalado directory (excepting this entry) } } $pos += 12; } return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::Scalado - Read APP4 SCALADO metadata =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read metadata from the JPEG APP4 SCALADO segment. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/Scalado Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Shift.pl����������������������������������������������������000644 �000765 �000024 �00000054153 12642461335 021334� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Shift.pl # # Description: ExifTool time shifting routines # # Revisions: 10/28/2005 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool; use strict; sub ShiftTime($$;$$); #------------------------------------------------------------------------------ # apply shift to value in new value hash # Inputs: 0) ExifTool ref, 1) shift type, 2) shift string, 3) raw date/time value, # 4) new value hash ref # Returns: error string or undef on success and updates value in new value hash sub ApplyShift($$$$;$) { my ($self, $func, $shift, $val, $nvHash) = @_; # get shift direction from first character in shift string my $pre = ($shift =~ s/^(\+|-)//) ? $1 : '+'; my $dir = ($pre eq '+') ? 1 : -1; my $tagInfo = $$nvHash{TagInfo}; my $tag = $$tagInfo{Name}; my $shiftOffset; if ($$nvHash{ShiftOffset}) { $shiftOffset = $$nvHash{ShiftOffset}; } else { $shiftOffset = $$nvHash{ShiftOffset} = { }; } # initialize handler for eval warnings local $SIG{'__WARN__'} = \&SetWarning; SetWarning(undef); # shift is applied to ValueConv value, so we must ValueConv-Shift-ValueConvInv my ($type, $err); foreach $type ('ValueConv','Shift','ValueConvInv') { if ($type eq 'Shift') { #### eval ShiftXxx function $err = eval "Shift$func(\$val, \$shift, \$dir, \$shiftOffset)"; } elsif ($$tagInfo{$type}) { my $conv = $$tagInfo{$type}; if (ref $conv eq 'CODE') { $val = &$conv($val, $self); } else { return "Can't handle $type for $tag in ApplyShift()" if ref $$tagInfo{$type}; #### eval ValueConv/ValueConvInv ($val, $self) $val = eval $$tagInfo{$type}; } } else { next; } # handle errors $err and return $err; $@ and SetWarning($@); GetWarning() and return CleanWarning(); } # update value in new value hash $nvHash->{Value} = [ $val ]; return undef; # success } #------------------------------------------------------------------------------ # Check date/time shift # Inputs: 0) shift type, 1) shift string (without sign) # Returns: updated shift string, or undef on error (and may update shift) sub CheckShift($$) { my ($type, $shift) = @_; my $err; if ($type eq 'Time') { return "No shift direction" unless $shift =~ s/^(\+|-)//; # do a test shift to validate the shift string my $testTime = '2005:11:02 09:00:13.25-04:00'; $err = ShiftTime($testTime, $shift, $1 eq '+' ? 1 : -1); } else { $err = "Unknown shift type ($type)"; } return $err; } #------------------------------------------------------------------------------ # return the number of days in a month # Inputs: 0) month number (Jan=1, may be outside range), 1) year # Returns: number of days in month sub DaysInMonth($$) { my ($mon, $year) = @_; my @days = (31,28,31,30,31,30,31,31,30,31,30,31); # adjust to the range [0,11] while ($mon < 1) { $mon += 12; --$year; } while ($mon > 12) { $mon -= 12; ++$year; } # return standard number of days unless february on a leap year return $days[$mon-1] unless $mon == 2 and not $year % 4; # leap years don't occur on even centuries except every 400 years return 29 if $year % 100 or not $year % 400; return 28; } #------------------------------------------------------------------------------ # split times into corresponding components: YYYY mm dd HH MM SS tzh tzm # Inputs: 0) date/time or shift string 1) reference to list for returned components # 2) optional reference to list of time components (if shift string) # Returns: true on success # Returned components are 0-Y, 1-M, 2-D, 3-hr, 4-min, 5-sec, 6-tzhr, 7-tzmin sub SplitTime($$;$) { my ($val, $vals, $time) = @_; # insert zeros if missing in shift string if ($time) { $val =~ s/(^|[-+:\s]):/${1}0:/g; $val =~ s/:([:\s]|$)/:0$1/g; } # change dashes to colons in date (for XMP dates) if ($val =~ s/^(\d{4})-(\d{2})-(\d{2})/$1:$2:$3/) { $val =~ tr/T/ /; # change 'T' separator to ' ' } # add space before timezone to split it into a separate word $val =~ s/(\+|-)/ $1/; my @words = split ' ', $val; my $err = 1; my @v; for (;;) { my $word = shift @words; last unless defined $word; # split word into separate numbers (allow decimal points but no signs) my @vals = $word =~ /(?=\d|\.\d)\d*(?:\.\d*)?/g or last; if ($word =~ /^(\+|-)/) { # this is the timezone (defined $v[6] or @vals > 2) and $err = 1, last; my $sign = ($1 ne '-') ? 1 : -1; # apply sign to both minutes and seconds $v[6] = $sign * shift(@vals); $v[7] = $sign * (shift(@vals) || 0); } elsif ((@words and $words[0] =~ /^\d+/) or # there is a time word to follow (not $time and $vals[0] =~ /^\d{3}/) or # first value is year (3 or more digits) ($time and not defined $$time[3] and not defined $v[0])) # we don't have a time { # this is a date (must come first) (@v or @vals > 3) and $err = 1, last; not $time and @vals != 3 and $err = 1, last; $v[2] = pop(@vals); # take day first if only one specified $v[1] = pop(@vals) || 0; $v[0] = pop(@vals) || 0; } else { # this is a time (can't come after timezone) (defined $v[3] or defined $v[6] or @vals > 3) and $err = 1, last; not $time and @vals != 3 and @vals != 2 and $err = 1, last; $v[3] = shift(@vals); # take hour first if only one specified $v[4] = shift(@vals) || 0; $v[5] = shift(@vals) || 0; } $err = 0; } return 0 if $err or not @v; if ($time) { # zero any required shift entries which aren't yet defined $v[0] = $v[1] = $v[2] = 0 if defined $$time[0] and not defined $v[0]; $v[3] = $v[4] = $v[5] = 0 if defined $$time[3] and not defined $v[3]; $v[6] = $v[7] = 0 if defined $$time[6] and not defined $v[6]; } @$vals = @v; # return split time components return 1; } #------------------------------------------------------------------------------ # shift date/time by components # Inputs: 0) split date/time list ref, 1) split shift list ref, # 2) shift direction, 3) reference to output list of shifted components # 4) number of decimal points in seconds # 5) reference to return time difference due to rounding # Returns: error string or undef on success sub ShiftComponents($$$$$;$) { my ($time, $shift, $dir, $toTime, $dec, $rndPt) = @_; # min/max for Y, M, D, h, m, s my @min = ( 0, 1, 1, 0, 0, 0); my @max = (10000,12,28,24,60,60); my $i; # # apply the shift # my $c = 0; for ($i=0; $i<@$time; ++$i) { my $v = ($$time[$i] || 0) + $dir * ($$shift[$i] || 0) + $c; # handle fractional values by propagating remainders downwards if ($v != int($v) and $i < 5) { my $iv = int($v); $c = ($v - $iv) * $max[$i+1]; $v = $iv; } else { $c = 0; } $$toTime[$i] = $v; } # round off seconds to the required number of decimal points my $sec = $$toTime[5]; if (defined $sec and $sec != int($sec)) { my $mult = 10 ** $dec; my $rndSec = int($sec * $mult + 0.5 * ($sec <=> 0)) / $mult; $rndPt and $$rndPt = $sec - $rndSec; $$toTime[5] = $rndSec; } # # handle overflows, starting with least significant number first (seconds) # $c = 0; for ($i=5; $i>=0; $i--) { defined $$time[$i] or $c = 0, next; # apply shift and adjust for previous overflow my $v = $$toTime[$i] + $c; $c = 0; # set carry to zero # adjust for over/underflow my ($min, $max) = ($min[$i], $max[$i]); if ($v < $min) { if ($i == 2) { # 2 = day of month do { # add number of days in previous month --$c; my $mon = $$toTime[$i-1] + $c; $v += DaysInMonth($mon, $$toTime[$i-2]); } while ($v < 1); } else { my $fc = ($v - $min) / $max; # carry ($c) must be largest integer equal to or less than $fc $c = int($fc); --$c if $c > $fc; $v -= $c * $max; } } elsif ($v >= $max + $min) { if ($i == 2) { for (;;) { # test against number of days in current month my $mon = $$toTime[$i-1] + $c; my $days = DaysInMonth($mon, $$toTime[$i-2]); last if $v <= $days; $v -= $days; ++$c; last if $v <= 28; } } else { my $fc = ($v - $max - $min) / $max; # carry ($c) must be smallest integer greater than $fc $c = int($fc); ++$c if $c <= $fc; $v -= $c * $max; } } $$toTime[$i] = $v; # save the new value } # handle overflows in timezone if (defined $$toTime[6]) { my $m = $$toTime[6] * 60 + $$toTime[7]; $m += 0.5 * ($m <=> 0); # avoid round-off errors $$toTime[6] = int($m / 60); $$toTime[7] = int($m - $$toTime[6] * 60); } return undef; # success } #------------------------------------------------------------------------------ # Shift an integer or floating-point number # Inputs: 0) date/time string, 1) shift string, 2) shift direction (+1 or -1) # 3) (unused) # Returns: undef and updates input value sub ShiftNumber($$$;$) { my ($val, $shift, $dir) = @_; $_[0] = $val + $shift * $dir; # return shifted value return undef; # success! } #------------------------------------------------------------------------------ # Shift date/time string # Inputs: 0) date/time string, 1) shift string, 2) shift direction (+1 or -1), # or 0 or undef to take shift direction from sign of shift, # 3) reference to ShiftOffset hash (with Date, DateTime, Time, Timezone keys) # Returns: error string or undef on success and date/time string is updated sub ShiftTime($$;$$) { local $_; my ($val, $shift, $dir, $shiftOffset) = @_; my (@time, @shift, @toTime, $mode, $needShiftOffset, $dec); $dir or $dir = ($shift =~ s/^(\+|-)// and $1 eq '-') ? -1 : 1; # # figure out what we are dealing with (time, date or date/time) # SplitTime($val, \@time) or return "Invalid time string ($val)"; if (defined $time[0]) { $mode = defined $time[3] ? 'DateTime' : 'Date'; } elsif (defined $time[3]) { $mode = 'Time'; } # get number of digits after the seconds decimal point if (defined $time[5] and $time[5] =~ /\.(\d+)/) { $dec = length($1); } else { $dec = 0; } if ($shiftOffset) { $needShiftOffset = 1 unless defined $$shiftOffset{$mode}; $needShiftOffset = 1 if defined $time[6] and not defined $$shiftOffset{Timezone}; } else { $needShiftOffset = 1; } if ($needShiftOffset) { # # apply date/time shift the hard way # SplitTime($shift, \@shift, \@time) or return "Invalid shift string ($shift)"; # change 'Z' timezone to '+00:00' only if necessary if (@shift > 6 and @time <= 6) { $time[6] = $time[7] = 0 if $val =~ s/Z$/\+00:00/; } my $rndDiff; my $err = ShiftComponents(\@time, \@shift, $dir, \@toTime, $dec, \$rndDiff); $err and return $err; # # calculate and save the shift offsets for next time # if ($shiftOffset) { if (defined $time[0] or defined $time[3]) { my @tm1 = (0, 0, 0, 1, 0, 2000); my @tm2 = (0, 0, 0, 1, 0, 2000); if (defined $time[0]) { @tm1[3..5] = reverse @time[0..2]; @tm2[3..5] = reverse @toTime[0..2]; --$tm1[4]; # month should start from 0 --$tm2[4]; } my $diff = 0; if (defined $time[3]) { @tm1[0..2] = reverse @time[3..5]; @tm2[0..2] = reverse @toTime[3..5]; # handle fractional seconds separately $diff = $tm2[0] - int($tm2[0]) - ($tm1[0] - int($tm1[0])); $diff += $rndDiff if defined $rndDiff; # un-do rounding $tm1[0] = int($tm1[0]); $tm2[0] = int($tm2[0]); } eval q{ require Time::Local; $diff += Time::Local::timegm(@tm2) - Time::Local::timegm(@tm1); }; # not a problem if we failed here since we'll just try again next time, # so don't return error message unless (@$) { my $mode; if (defined $time[0]) { $mode = defined $time[3] ? 'DateTime' : 'Date'; } else { $mode = 'Time'; } $$shiftOffset{$mode} = $diff; } } if (defined $time[6]) { $$shiftOffset{Timezone} = ($toTime[6] - $time[6]) * 60 + $toTime[7] - $time[7]; } } } else { # # apply shift from previously calculated offsets # if ($$shiftOffset{Timezone} and @time <= 6) { # change 'Z' timezone to '+00:00' only if necessary $time[6] = $time[7] = 0 if $val =~ s/Z$/\+00:00/; } # apply the previous date/time shift if necessary if ($mode) { my @tm = (0, 0, 0, 1, 0, 2000); if (defined $time[0]) { @tm[3..5] = reverse @time[0..2]; --$tm[4]; # month should start from 0 } @tm[0..2] = reverse @time[3..5] if defined $time[3]; # save fractional seconds my $frac = $tm[0] - int($tm[0]); $tm[0] = int($tm[0]); my $tm; eval q{ require Time::Local; $tm = Time::Local::timegm(@tm) + $frac; }; $@ and return CleanWarning($@); $tm += $$shiftOffset{$mode}; # apply the shift $tm < 0 and return 'Shift results in negative time'; # save fractional seconds in shifted time $frac = $tm - int($tm); if ($frac) { $tm = int($tm); # must account for any rounding that could occur $frac + 0.5 * 10 ** (-$dec) >= 1 and ++$tm, $frac = 0; } @tm = gmtime($tm); @toTime = reverse @tm[0..5]; $toTime[0] += 1900; ++$toTime[1]; $toTime[5] += $frac; # add the fractional seconds back in } # apply the previous timezone shift if necessary if (defined $time[6]) { my $m = $time[6] * 60 + $time[7]; $m += $$shiftOffset{Timezone}; $m += 0.5 * ($m <=> 0); # avoid round-off errors $toTime[6] = int($m / 60); $toTime[7] = int($m - $toTime[6] * 60); } } # # insert shifted time components back into original string # my ($i, $err); for ($i=0; $i<@toTime; ++$i) { next unless defined $time[$i] and defined $toTime[$i]; my ($v, $d, $s); if ($i != 6) { # not timezone hours last unless $val =~ /((?=\d|\.\d)\d*(\.\d*)?)/g; next if $toTime[$i] == $time[$i]; $v = $1; # value $d = $2; # decimal part of value $s = ''; # no sign } else { last if $time[$i] == $toTime[$i] and $time[$i+1] == $toTime[$i+1]; last unless $val =~ /((?:\+|-)(?=\d|\.\d)\d*(\.\d*)?)/g; $v = $1; $d = $2; if ($toTime[6] >= 0 and $toTime[7] >= 0) { $s = '+'; } else { $s = '-'; $toTime[6] = -$toTime[6]; $toTime[7] = -$toTime[7]; } } my $nv = $toTime[$i]; my $pos = pos $val; my $len = length $v; my $sig = $len - length $s; my $dec = $d ? length($d) - 1 : 0; my $newNum = sprintf($dec ? "$s%0$sig.${dec}f" : "$s%0${sig}d", $nv); length($newNum) != $len and $err = 1; substr($val, $pos - $len, $len) = $newNum; pos($val) = $pos; } $err and return "Error packing shifted time ($val)"; $_[0] = $val; # return shifted value return undef; # success! } 1; # end __END__ =head1 NAME Image::ExifTool::Shift.pl - ExifTool time shifting routines =head1 DESCRIPTION This module contains routines used by ExifTool to shift date and time values. =head1 DETAILS Time shifts are applied to standard EXIF-formatted date/time values (eg. C<2005:03:14 18:55:00>). Date-only and time-only values may also be shifted, and an optional timezone (eg. C<-05:00>) is also supported. Here are some general rules and examples to explain how shift strings are interpreted: Date-only values are shifted using the following formats: 'Y:M:D' - shift date by 'Y' years, 'M' months and 'D' days 'M:D' - shift months and days only 'D' - shift specified number of days Time-only values are shifted using the following formats: 'h:m:s' - shift time by 'h' hours, 'm' minutes and 's' seconds 'h:m' - shift hours and minutes only 'h' - shift specified number of hours Timezone shifts are specified in the following formats: '+h:m' - shift timezone by 'h' hours and 'm' minutes '-h:m' - negative shift of timezone hours and minutes '+h' - shift timezone hours only '-h' - negative shift of timezone hours only A valid shift value consists of one or two arguments, separated by a space. If only one is provided, it is assumed to be a time shift when applied to a time-only or a date/time value, or a date shift when applied to a date-only value. For example: '1' - shift by 1 hour if applied to a time or date/time value, or by one day if applied to a date value '2:0' - shift 2 hours (time, date/time), or 2 months (date) '5:0:0' - shift 5 hours (time, date/time), or 5 years (date) '0:0:1' - shift 1 s (time, date/time), or 1 day (date) If two arguments are given, the date shift is first, followed by the time shift: '3:0:0 0' - shift date by 3 years '0 15:30' - shift time by 15 hours and 30 minutes '1:0:0 0:0:0+5:0' - shift date by 1 year and timezone by 5 hours A date shift is simply ignored if applied to a time value or visa versa. Numbers specified in shift fields may contain a decimal point: '1.5' - 1 hour 30 minutes (time, date/time), or 1 day (date) '2.5 0' - 2 days 12 hours (date/time), 12 hours (time) or 2 days (date) And to save typing, a zero is assumed for any missing numbers: '1::' - shift by 1 hour (time, date/time) or 1 year (date) '26:: 0' - shift date by 26 years '+:30 - shift timezone by 30 minutes Below are some specific examples applied to real date and/or time values ('Dir' is the applied shift direction: '+' is positive, '-' is negative): Original Value Shift Dir Shifted Value --------------------- ------- --- --------------------- '20:30:00' '5' + '01:30:00' '2005:01:27' '5' + '2005:02:01' '2005:01:27 20:30:00' '5' + '2005:01:28 01:30:00' '11:54:00' '2.5 0' - '23:54:00' '2005:11:02' '2.5 0' - '2005:10:31' '2005:11:02 11:54:00' '2.5 0' - '2005:10:30 23:54:00' '2004:02:28 08:00:00' '1 1.3' + '2004:02:29 09:18:00' '07:00:00' '-5' + '07:00:00' '07:00:00+01:00' '-5' + '07:00:00-04:00' '07:00:00Z' '+2:30' - '07:00:00-02:30' '1970:01:01' '35::' + '2005:01:01' '2005:01:01' '400' + '2006:02:05' '10:00:00.00' '::1.33' - '09:59:58.67' =head1 NOTES The format of the original date/time value is not changed when the time shift is applied. This means that the length of the date/time string will not change, and only the numbers in the string will be modified. The only exception to this rule is that a 'Z' timezone is changed to '+00:00' notation if a timezone shift is applied. A timezone will not be added to the date/time string. =head1 TRICKY This module is perhaps more complicated than it needs to be because it is designed to be very flexible in the way time shifts are specified and applied... The ability to shift dates by Y years, M months, etc, conflicts with the design goal of maintaining a constant shift for all time values when applying a batch shift. This is because shifting by 1 month can be equivalent to anything from 28 to 31 days, and 1 year can be 365 or 366 days, depending on the starting date. The inconsistency is handled by shifting the first tag found with the actual specified shift, then calculating the equivalent time difference in seconds for this shift and applying this difference to subsequent tags in a batch conversion. So if it works as designed, the behaviour should be both intuitive and mathematically correct, and the user shouldn't have to worry about details such as this (in keeping with Perl's "do the right thing" philosophy). =head1 BUGS Due to the use of the standard time library functions, dates are typically limited to the range 1970 to 2038 on 32-bit systems. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Shortcuts.pm������������������������������������������������000644 �000765 �000024 �00000022673 12642461335 022260� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Shortcuts.pm # # Description: ExifTool shortcut tags # # Revisions: 02/07/2004 - PH Moved out of Exif.pm # 09/15/2004 - PH Added D70Boring from Greg Troxel # 01/11/2005 - PH Added Canon20D from Christian Koller # 03/03/2005 - PH Added user defined shortcuts # 03/26/2005 - PH Added Nikon from Tom Christiansen # 02/28/2007 - PH Removed model-dependent shortcuts # --> this is what UserDefined::Shortcuts is for # 02/25/2009 - PH Added Unsafe # 07/03/2010 - PH Added CommonIFD0 #------------------------------------------------------------------------------ package Image::ExifTool::Shortcuts; use strict; use vars qw($VERSION); $VERSION = '1.57'; # this is a special table used to define command-line shortcuts # (documentation Notes may be added for these via %shortcutNotes in BuildTagLookup.pm) %Image::ExifTool::Shortcuts::Main = ( # this shortcut allows the three common date/time tags to be shifted at once AllDates => [ 'DateTimeOriginal', 'CreateDate', 'ModifyDate', ], # This is a shortcut to some common information which is useful in most images Common => [ 'FileName', 'FileSize', 'Model', 'DateTimeOriginal', 'ImageSize', 'Quality', 'FocalLength', 'ShutterSpeed', 'Aperture', 'ISO', 'WhiteBalance', 'Flash', ], # This shortcut provides the same information as the Canon utilities Canon => [ 'FileName', 'Model', 'DateTimeOriginal', 'ShootingMode', 'ShutterSpeed', 'Aperture', 'MeteringMode', 'ExposureCompensation', 'ISO', 'Lens', 'FocalLength', 'ImageSize', 'Quality', 'Flash', 'FlashType', 'ConditionalFEC', 'RedEyeReduction', 'ShutterCurtainHack', 'WhiteBalance', 'FocusMode', 'Contrast', 'Sharpness', 'Saturation', 'ColorTone', 'ColorSpace', 'LongExposureNoiseReduction', 'FileSize', 'FileNumber', 'DriveMode', 'OwnerName', 'SerialNumber', ], Nikon => [ 'Model', 'SubSecDateTimeOriginal', 'ShutterCount', 'LensSpec', 'FocalLength', 'ImageSize', 'ShutterSpeed', 'Aperture', 'ISO', 'NoiseReduction', 'ExposureProgram', 'ExposureCompensation', 'WhiteBalance', 'WhiteBalanceFineTune', 'ShootingMode', 'Quality', 'MeteringMode', 'FocusMode', 'ImageOptimization', 'ToneComp', 'ColorHue', 'ColorSpace', 'HueAdjustment', 'Saturation', 'Sharpness', 'Flash', 'FlashMode', 'FlashExposureComp', ], # This shortcut may be useful when copying tags between files to either # copy the maker notes as a block or prevent it from being copied MakerNotes => [ 'MakerNotes', # (for RIFF MakerNotes) 'MakerNoteApple', 'MakerNoteCanon', 'MakerNoteCasio', 'MakerNoteCasio2', 'MakerNoteFLIR', 'MakerNoteFujiFilm', 'MakerNoteGE', 'MakerNoteGE2', 'MakerNoteHasselblad', 'MakerNoteHP', 'MakerNoteHP2', 'MakerNoteHP4', 'MakerNoteHP6', 'MakerNoteISL', 'MakerNoteJVC', 'MakerNoteJVCText', 'MakerNoteKodak1a', 'MakerNoteKodak1b', 'MakerNoteKodak2', 'MakerNoteKodak3', 'MakerNoteKodak4', 'MakerNoteKodak5', 'MakerNoteKodak6a', 'MakerNoteKodak6b', 'MakerNoteKodak7', 'MakerNoteKodak8a', 'MakerNoteKodak8b', 'MakerNoteKodak8c', 'MakerNoteKodak9', 'MakerNoteKodak10', 'MakerNoteKodak11', 'MakerNoteKodakUnknown', 'MakerNoteKyocera', 'MakerNoteMinolta', 'MakerNoteMinolta2', 'MakerNoteMinolta3', 'MakerNoteMotorola', 'MakerNoteNikon', 'MakerNoteNikon2', 'MakerNoteNikon3', 'MakerNoteNintendo', 'MakerNoteOlympus', 'MakerNoteOlympus2', 'MakerNoteLeica', 'MakerNoteLeica2', 'MakerNoteLeica3', 'MakerNoteLeica4', 'MakerNoteLeica5', 'MakerNoteLeica6', 'MakerNoteLeica7', 'MakerNoteLeica8', 'MakerNoteLeica9', 'MakerNotePanasonic', 'MakerNotePanasonic2', 'MakerNotePentax', 'MakerNotePentax2', 'MakerNotePentax3', 'MakerNotePentax4', 'MakerNotePentax5', 'MakerNotePentax6', 'MakerNotePhaseOne', 'MakerNoteReconyx', 'MakerNoteRicoh', 'MakerNoteRicoh2', 'MakerNoteRicohText', 'MakerNoteSamsung1a', 'MakerNoteSamsung1b', 'MakerNoteSamsung2', 'MakerNoteSanyo', 'MakerNoteSanyoC4', 'MakerNoteSanyoPatch', 'MakerNoteSigma', 'MakerNoteSony', 'MakerNoteSony2', 'MakerNoteSony3', 'MakerNoteSony4', 'MakerNoteSony5', 'MakerNoteSonyEricsson', 'MakerNoteSonySRF', 'MakerNoteUnknownText', 'MakerNoteUnknownBinary', 'MakerNoteUnknown', ], # "unsafe" tags we normally don't copy in JPEG images, defined # as a shortcut to use when rebuilding JPEG EXIF from scratch Unsafe => [ 'IFD0:YCbCrPositioning', 'IFD0:YCbCrCoefficients', 'IFD0:TransferFunction', 'ExifIFD:ComponentsConfiguration', 'ExifIFD:CompressedBitsPerPixel', 'InteropIFD:InteropIndex', 'InteropIFD:InteropVersion', 'InteropIFD:RelatedImageWidth', 'InteropIFD:RelatedImageHeight', ], # standard tags used to define the color space of an image # (useful to preserve color space when deleting all meta information) ColorSpaceTags => [ 'ExifIFD:ColorSpace', 'ExifIFD:Gamma', 'InteropIFD:InteropIndex', 'ICC_Profile', ], # common metadata tags found in IFD0 of TIFF images CommonIFD0 => [ # standard EXIF 'IFD0:ImageDescription', 'IFD0:Make', 'IFD0:Model', 'IFD0:Software', 'IFD0:ModifyDate', 'IFD0:Artist', 'IFD0:Copyright', # other TIFF tags 'IFD0:Rating', 'IFD0:RatingPercent', 'IFD0:DNGLensInfo', 'IFD0:PanasonicTitle', 'IFD0:PanasonicTitle2', 'IFD0:XPTitle', 'IFD0:XPComment', 'IFD0:XPAuthor', 'IFD0:XPKeywords', 'IFD0:XPSubject', ], # large binary data tags which won't be loaded if excluded when extracting LargeTags => [ 'CanonVRD', 'DLOData', 'EXIF', 'ICC_Profile', 'IDCPreviewImage', 'ImageData', 'IPTC', 'JpgFromRaw', 'OriginalRawImage', 'OtherImage', 'PreviewImage', 'ThumbnailImage', 'TIFFPreview', 'XML', 'XMP', 'ZoomedPreviewImage', ], ); #------------------------------------------------------------------------------ # load user-defined shortcuts if available # Inputs: reference to user-defined shortcut hash sub LoadShortcuts($) { my $shortcuts = shift; my $shortcut; foreach $shortcut (keys %$shortcuts) { my $val = $$shortcuts{$shortcut}; # also allow simple aliases $val = [ $val ] unless ref $val eq 'ARRAY'; # save the user-defined shortcut or alias $Image::ExifTool::Shortcuts::Main{$shortcut} = $val; } } # (for backward compatibility, renamed in ExifTool 7.75) if (%Image::ExifTool::Shortcuts::UserDefined) { LoadShortcuts(\%Image::ExifTool::Shortcuts::UserDefined); } if (%Image::ExifTool::UserDefined::Shortcuts) { LoadShortcuts(\%Image::ExifTool::UserDefined::Shortcuts); } 1; # end __END__ =head1 NAME Image::ExifTool::Shortcuts - ExifTool shortcut tags =head1 SYNOPSIS This module is required by Image::ExifTool. =head1 DESCRIPTION This module contains definitions for tag name shortcuts used by Image::ExifTool. You can customize this file to add your own shortcuts. Individual users may also add their own shortcuts to the .ExifTool_config file in their home directory (or the directory specified by the EXIFTOOL_HOME environment variable). The shortcuts are defined in a hash called %Image::ExifTool::UserDefined::Shortcuts. The keys of the hash are the shortcut names, and the elements are either tag names or references to lists of tag names. An example shortcut definition in .ExifTool_config: %Image::ExifTool::UserDefined::Shortcuts = ( MyShortcut => ['createdate','exif:exposuretime','aperture'], MyAlias => 'FocalLengthIn35mmFormat', ); In this example, MyShortcut is a shortcut for the CreateDate, EXIF:ExposureTime and Aperture tags, and MyAlias is a shortcut for FocalLengthIn35mmFormat. The target tag names may contain an optional group name prefix. A group name applied to the shortcut will be ignored for any target tag with a group name prefix. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Sigma.pm����������������������������������������������������000644 �000765 �000024 �00000063701 12642461335 021317� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Sigma.pm # # Description: Sigma/Foveon EXIF maker notes tags # # Revisions: 04/06/2004 - P. Harvey Created # 02/20/2007 - PH added SD14 tags # 24/06/2010 - PH decode some SD15 tags # # References: 1) http://www.x3f.info/technotes/FileDocs/MakerNoteDoc.html # 2) Niels Kristian Bech Jensen # 3) Iliah Borg private communication (LibRaw) #------------------------------------------------------------------------------ package Image::ExifTool::Sigma; use strict; use vars qw($VERSION %sigmaLensTypes); use Image::ExifTool::Exif; $VERSION = '1.17'; # sigma LensType lookup (ref 3) %sigmaLensTypes = ( Notes => q{ Decimal values have been added to differentiate lenses which would otherwise have the same LensType, and are used by the Composite LensID tag when attempting to identify the specific lens model. }, # 0 => 'Sigma 50mm F2.8 EX Macro', (0 used for other lenses too) # 8 - 18-125mm LENSARANGE@18mm=22-4 16 => 'Sigma 18-50mm F3.5-5.6 DC', #PH 103 => 'Sigma 180mm F3.5 EX IF HSM APO Macro', 104 => 'Sigma 150mm F2.8 EX DG HSM APO Macro', 105 => 'Sigma 180mm F3.5 EX DG HSM APO Macro', 106 => 'Sigma 150mm F2.8 EX DG OS HSM APO Macro', 107 => 'Sigma 180mm F2.8 EX DG OS HSM APO Macro', 129 => 'Sigma 14mm F2.8 EX Aspherical', #PH 131 => 'Sigma 17-70mm F2.8-4.5 DC Macro', #PH 134 => 'Sigma 100-300mm F4 EX DG HSM APO', 135 => 'Sigma 120-300mm F2.8 EX DG HSM APO', 136 => 'Sigma 120-300mm F2.8 EX DG OS HSM APO', 137 => 'Sigma 120-300mm F2.8 DG OS HSM | S', 143 => 'Sigma 600mm F8 Mirror', 145 => 'Sigma Lens (145)', #PH 145.1 => 'Sigma 15-30mm F3.5-4.5 EX DG Aspherical', #PH 145.2 => 'Sigma 18-50mm F2.8 EX DG', #PH (NC) 145.3 => 'Sigma 20-40mm F2.8 EX DG', #PH 152 => 'Sigma APO 800mm F5.6 EX DG HSM', 165 => 'Sigma 70-200mm F2.8 EX', # ...but what specific model?: # 70-200mm F2.8 EX APO - Original version, minimum focus distance 1.8m (1999) # 70-200mm F2.8 EX DG - Adds 'digitally optimized' lens coatings to reduce flare (2005) # 70-200mm F2.8 EX DG Macro (HSM) - Minimum focus distance reduced to 1m (2006) # 70-200mm F2.8 EX DG Macro HSM II - Improved optical performance (2007) 169 => 'Sigma 18-50mm F2.8 EX DC', #PH (NC) 183 => 'Sigma 500mm F4.5 EX HSM APO', 184 => 'Sigma 500mm F4.5 EX DG HSM APO', 194 => 'Sigma 300mm F2.8 EX HSM APO', 195 => 'Sigma 300mm F2.8 EX DG HSM APO', 200 => 'Sigma 12-24mm F4.5-5.6 EX DG ASP HSM', 201 => 'Sigma 10-20mm F4-5.6 EX DC HSM', 202 => 'Sigma 10-20mm F3.5 EX DC HSM', 203 => 'Sigma 8-16mm F4.5-5.6 DC HSM', 204 => 'Sigma 12-24mm F4.5-5.6 DG HSM II', 210 => 'Sigma 18-35mm F1.8 DC HSM | A', 256 => 'Sigma 105mm F2.8 EX Macro', 257 => 'Sigma 105mm F2.8 EX DG Macro', 258 => 'Sigma 105mm F2.8 EX DG OS HSM Macro', 270 => 'Sigma 70mm F2.8 EX DG Macro', #2 (SD1) 300 => 'Sigma 30mm F1.4 EX DC HSM', 301 => 'Sigma 30mm F1.4 DC HSM | A', 310 => 'Sigma 50mm F1.4 EX DG HSM', 311 => 'Sigma 50mm F1.4 DG HSM | A', 320 => 'Sigma 85mm F1.4 EX DG HSM', 330 => 'Sigma 30mm F2.8 EX DN', 340 => 'Sigma 35mm F1.4 DG HSM', 345 => 'Sigma 50mm F2.8 EX Macro', 346 => 'Sigma 50mm F2.8 EX DG Macro', 400 => 'Sigma 9mm F2.8 EX DN', 401 => 'Sigma 24mm F1.4 DG HSM | A', 411 => 'Sigma 20mm F1.8 EX DG ASP RF', 432 => 'Sigma 24mm F1.8 EX DG ASP Macro', 440 => 'Sigma 28mm F1.8 EX DG ASP Macro', 461 => 'Sigma 14mm F2.8 EX ASP HSM', 475 => 'Sigma 15mm F2.8 EX Diagonal FishEye', 476 => 'Sigma 15mm F2.8 EX DG Diagonal Fisheye', 477 => 'Sigma 10mm F2.8 EX DC HSM Fisheye', 483 => 'Sigma 8mm F4 EX Circular Fisheye', 484 => 'Sigma 8mm F4 EX DG Circular Fisheye', 485 => 'Sigma 8mm F3.5 EX DG Circular Fisheye', 486 => 'Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye', 506 => 'Sigma 70-300mm F4-5.6 APO Macro Super II', 507 => 'Sigma 70-300mm F4-5.6 DL Macro Super II', 508 => 'Sigma 70-300mm F4-5.6 DG APO Macro', 509 => 'Sigma 70-300mm F4-5.6 DG Macro', 510 => 'Sigma 17-35 F2.8-4 EX DG ASP', 512 => 'Sigma 15-30mm F3.5-4.5 EX DG ASP DF', 513 => 'Sigma 20-40mm F2.8 EX DG', 519 => 'Sigma 17-35 F2.8-4 EX ASP HSM', 520 => 'Sigma 100-300mm F4.5-6.7 DL', 521 => 'Sigma 18-50mm F3.5-5.6 DC Macro', 527 => 'Sigma 100-300mm F4 EX IF HSM', 529 => 'Sigma 120-300mm F2.8 EX HSM IF APO', 547 => 'Sigma 24-60mm F2.8 EX DG', 548 => 'Sigma 24-70mm F2.8 EX DG Macro', 549 => 'Sigma 28-70mm F2.8 EX DG', 566 => 'Sigma 70-200mm F2.8 EX IF APO', 567 => 'Sigma 70-200mm F2.8 EX IF HSM APO', 568 => 'Sigma 70-200mm F2.8 EX DG IF HSM APO', 569 => 'Sigma 70-200 F2.8 EX DG HSM APO Macro', 571 => 'Sigma 24-70mm F2.8 IF EX DG HSM', 572 => 'Sigma 70-300mm F4-5.6 DG OS', 579 => 'Sigma 70-200mm F2.8 EX DG HSM APO Macro', # (also II version) 580 => 'Sigma 18-50mm F2.8 EX DC', 581 => 'Sigma 18-50mm F2.8 EX DC Macro', #PH (SD1) 582 => 'Sigma 18-50mm F2.8 EX DC HSM Macro', 583 => 'Sigma 17-50mm F2.8 EX DC OS HSM', #PH (also SD1 Kit, is this HSM? - PH) 589 => 'Sigma APO 70-200mm F2.8 EX DG OS HSM', 595 => 'Sigma 300-800mm F5.6 EX DG APO HSM', 597 => 'Sigma 200-500mm F2.8 APO EX DG', '5A8'=> 'Sigma 70-300mm F4-5.6 APO DG Macro (Motorized)', '5A9'=> 'Sigma 70-300mm F4-5.6 DG Macro (Motorized)', 668 => 'Sigma 17-70mm F2.8-4 DC Macro OS HSM', 686 => 'Sigma 50-200mm F4-5.6 DC OS HSM', 691 => 'Sigma 50-150mm F2.8 EX DC APO HSM II', 692 => 'Sigma APO 50-150mm F2.8 EX DC OS HSM', 728 => 'Sigma 120-400mm F4.5-5.6 DG APO OS HSM', 737 => 'Sigma 150-500mm F5-6.3 APO DG OS HSM', 738 => 'Sigma 50-500mm F4.5-6.3 APO DG OS HSM', 824 => 'Sigma 1.4X Teleconverter EX APO DG', 853 => 'Sigma 18-125mm F3.8-5.6 DC OS HSM', 861 => 'Sigma 18-50mm F2.8-4.5 DC OS HSM', #2 (SD1) 876 => 'Sigma 2.0X Teleconverter EX APO DG', 880 => 'Sigma 18-250mm F3.5-6.3 DC OS HSM', 882 => 'Sigma 18-200mm F3.5-6.3 II DC OS HSM', 883 => 'Sigma 18-250mm F3.5-6.3 DC Macro OS HSM', 1003 => 'Sigma 19mm F2.8', #PH (DP1 Merrill kit) 1004 => 'Sigma 30mm F2.8', #PH (DP2 Merrill kit) 1005 => 'Sigma 50mm F2.8 Macro', #PH (DP3 Merrill kit) 1006 => 'Sigma 19mm F2.8', #2 (DP1 Quattro kit) 1007 => 'Sigma 30mm F2.8', #PH (DP2 Quattro kit) 1008 => 'Sigma 50mm F2.8 Macro', #2 (DP3 Quattro kit) 1009 => 'Sigma 14mm F4', #2 (DP0 Quattro kit) 8900 => 'Sigma 70-300mm F4-5.6 DG OS', #PH (SD15) 'A100'=> 'Sigma 24-70mm F2.8 DG Macro', #PH (SD15) # 'FFFF' - seen this for a 28-70mm F2.8 lens - PH ); %Image::ExifTool::Sigma::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, WRITABLE => 'string', GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ These tags are written by Sigma/Foveon cameras. In the early days Sigma was a class leader by releasing their maker note specification to the public, but since then they have deviated from this standard and newer camera models are less than consistent about their metadata formats. }, 0x0002 => 'SerialNumber', 0x0003 => 'DriveMode', 0x0004 => 'ResolutionMode', 0x0005 => 'AFMode', 0x0006 => 'FocusSetting', 0x0007 => 'WhiteBalance', 0x0008 => { Name => 'ExposureMode', PrintConv => { #PH A => 'Aperture-priority AE', M => 'Manual', P => 'Program AE', S => 'Shutter speed priority AE', }, }, 0x0009 => { Name => 'MeteringMode', PrintConv => { #PH A => 'Average', C => 'Center-weighted average', 8 => 'Multi-segment', }, }, 0x000a => 'LensFocalRange', 0x000b => 'ColorSpace', # SIGMA PhotoPro writes these tags as strings, but some cameras (at least) write them as rational 0x000c => [ { Name => 'ExposureCompensation', Condition => '$format eq "string"', ValueConv => '$val =~ s/Expo:\s*//, $val', ValueConvInv => 'IsFloat($val) ? sprintf("Expo:%+.1f",$val) : undef', }, { #PH Name => 'ExposureAdjust', Writable => 'rational64s', Unknown => 1, }, ], 0x000d => [ { Name => 'Contrast', Condition => '$format eq "string"', ValueConv => '$val =~ s/Cont:\s*//, $val', ValueConvInv => 'IsFloat($val) ? sprintf("Cont:%+.1f",$val) : undef', }, { #PH Name => 'Contrast', Writable => 'rational64s', Priority => 0, }, ], 0x000e => [ { Name => 'Shadow', Condition => '$format eq "string"', ValueConv => '$val =~ s/Shad:\s*//, $val', ValueConvInv => 'IsFloat($val) ? sprintf("Shad:%+.1f",$val) : undef', }, { #PH (may be incorrect for the SD1) Name => 'Shadow', Writable => 'rational64s', Priority => 0, }, ], 0x000f => [ { Name => 'Highlight', Condition => '$format eq "string"', ValueConv => '$val =~ s/High:\s*//, $val', ValueConvInv => 'IsFloat($val) ? sprintf("High:%+.1f",$val) : undef', }, { #PH (may be incorrect for the SD1) Name => 'Highlight', Writable => 'rational64s', Priority => 0, }, ], 0x0010 => [ { Name => 'Saturation', Condition => '$format eq "string"', ValueConv => '$val =~ s/Satu:\s*//, $val', ValueConvInv => 'IsFloat($val) ? sprintf("Satu:%+.1f",$val) : undef', }, { #PH (may be incorrect for the SD1) Name => 'Saturation', Writable => 'rational64s', Priority => 0, }, ], 0x0011 => [ { Name => 'Sharpness', Condition => '$format eq "string"', ValueConv => '$val =~ s/Shar:\s*//, $val', ValueConvInv => 'IsFloat($val) ? sprintf("Shar:%+.1f",$val) : undef', }, { #PH (may be incorrect for the SD1) Name => 'Sharpness', Writable => 'rational64s', Priority => 0, }, ], 0x0012 => [ { Name => 'X3FillLight', Condition => '$format eq "string"', ValueConv => '$val =~ s/Fill:\s*//, $val', ValueConvInv => 'IsFloat($val) ? sprintf("Fill:%+.1f",$val) : undef', }, { #PH Name => 'X3FillLight', Writable => 'rational64s', }, ], 0x0014 => [ { Name => 'ColorAdjustment', Condition => '$format eq "string"', ValueConv => '$val =~ s/CC:\s*//, $val', ValueConvInv => 'IsInt($val) ? "CC:$val" : undef', }, { #PH Name => 'ColorAdjustment', Writable => 'rational64s', Count => 3, }, ], 0x0015 => 'AdjustmentMode', 0x0016 => { Name => 'Quality', ValueConv => '$val =~ s/Qual:\s*//, $val', ValueConvInv => 'IsInt($val) ? "Qual:$val" : undef', }, 0x0017 => 'Firmware', 0x0018 => { Name => 'Software', Priority => 0, }, 0x0019 => 'AutoBracket', 0x001a => [ #PH { Name => 'PreviewImageStart', Condition => '$format eq "int32u"', Notes => q{ Sigma Photo Pro writes ChrominanceNoiseReduction here, but various models use this for PreviewImageStart }, IsOffset => 1, OffsetPair => 0x001b, DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, },{ # (written by Sigma Photo Pro) Name => 'ChrominanceNoiseReduction', Condition => '$format eq "string"', ValueConv => '$val =~ s/Chro:\s*//, $val', ValueConvInv => 'IsFloat($val) ? sprintf("Chro:%+.1f",$val) : undef', }, # the SD1 writes something else here (rational64s, value 0/10) # (but we can't test by model becaues Sigma Photo Pro writes this too) ], 0x001b => [ #PH { Name => 'PreviewImageLength', Condition => '$format eq "int32u"', Notes => q{ Sigma Photo Pro writes LuminanceNoiseReduction here, but various models use this for PreviewImageLength }, OffsetPair => 0x001a, DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, },{ # (written by Sigma Photo Pro) Name => 'LuminanceNoiseReduction', Condition => '$format eq "string"', ValueConv => '$val =~ s/Luma:\s*//, $val', ValueConvInv => 'IsFloat($val) ? sprintf("Luma:%+.1f",$val) : undef', }, # the SD1 writes something else here (rational64s, value 0/10) ], 0x001c => [ #PH { Name => 'PreviewImageSize', Condition => '$$self{Model} !~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => q{ PreviewImageStart for the SD1 and Merrill/Quattro models, and PreviewImageSize for others }, Writable => 'int16u', Count => 2, },{ Name => 'PreviewImageStart', Condition => '$format eq "int32u"', IsOffset => 1, OffsetPair => 0x001d, DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, }, ], 0x001d => [ #PH { Name => 'MakerNoteVersion', Condition => '$$self{Model} !~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => q{ PreviewImageLength for the SD1 and Merrill/Quattro models, and MakerNoteVersion for others }, Writable => 'undef', },{ Name => 'PreviewImageLength', Condition => '$format eq "int32u"', OffsetPair => 0x001c, DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, }, ], # 0x001e - int16u: 0, 4, 13 - flash mode for other models? 0x001e => { #PH Name => 'PreviewImageSize', Condition => '$$self{Model} =~ /^SIGMA (DP\d (Merrill|Quattro))$/i', Notes => 'only valid for some models', Writable => 'int16u', Count => 2, }, 0x001f => [ #PH { Name => 'AFPoint', # (NC -- invalid for SD9,SD14?) Condition => '$$self{Model} !~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => q{ MakerNoteVersion for the SD1 and Merrill/Quattro models, and AFPoint for others }, # values: "", "Center", "Center,Center", "Right,Right" },{ Name => 'MakerNoteVersion', Writable => 'undef', }, ], # 0x0020 - string: " " for most models, or int16u: 4 for the DP3 Merrill # 0x0021 - string: " " for most models, or int8u[2]: '3 3' for the DP3 Merrill 0x0022 => { #PH (NC) Name => 'FileFormat', Condition => '$$self{Model} !~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'models other than the SD1 and Merrill/Quattro models', # values: "JPG", "JPG-S", "JPG-P", "X3F", "X3F-S" }, # 0x0023 - string: "", 10, 83, 131, 145, 150, 152, 169 0x0024 => { # (invalid for SD9,SD14?) Name => 'Calibration', Condition => '$$self{Model} !~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'models other than the SD1 and Merrill/Quattro models', }, # 0x0025 - string: "", "0.70", "0.90" # 0x0026-2b - int32u: 0 0x0026 => { #PH (NC) Name => 'FileFormat', Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'SD1 and Merrill/Quattro models only', }, 0x0027 => { #PH Name => 'LensType', Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'SD1 and Merrill/Quattro models only', SeparateTable => 'LensType', ValueConvInv => '$val=~s/\.\d+$//; $val', # (truncate decimal part) PrintConv => \%sigmaLensTypes, }, 0x002a => { #PH Name => 'LensFocalRange', Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'SD1 and Merrill/Quattro models only', Writable => 'rational64u', Count => 2, PrintConv => '$val=~s/ / to /; $val', PrintConvInv => '$val=~s/to /; $val', }, 0x002b => { #PH Name => 'LensMaxApertureRange', # for most models this gives the max aperture at the long/short focal lengths, # but for some models this gives the min/max aperture Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'SD1 and Merrill/Quattro models only', Writable => 'rational64u', Count => 2, PrintConv => '$val=~s/ / to /; $val', PrintConvInv => '$val=~s/to /; $val', }, 0x002c => { #PH Name => 'ColorMode', Condition => '$format eq "int32u"', Notes => 'not valid for some models', Writable => 'int32u', # this tag written by Sigma Photo Pro even for cameras that write 'n/a' here PrintConv => { 0 => 'n/a', 1 => 'Sepia', 2 => 'B&W', 3 => 'Standard', 4 => 'Vivid', 5 => 'Neutral', 6 => 'Portrait', 7 => 'Landscape', 8 => 'FOV Classic Blue', }, }, # 0x002d - int32u: 0 # 0x002e - rational64s: (the negative of FlashExposureComp, but why?) # 0x002f - int32u: 0, 1 0x0030 => [ #PH { Name => 'LensApertureRange', Condition => '$$self{Model} !~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => q{ Calibration for the SD1 and Merrill/Quattro models, and LensApertureRange for others. Note that LensApertureRange changes with focal length, and some models report the maximum aperture here }, },{ Name => 'Calibration', }, ], 0x0031 => { #PH Name => 'FNumber', Condition => '$$self{Model} !~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'models other than the SD1 and Merrill/Quattro models', Writable => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', Priority => 0, }, 0x0032 => { #PH Name => 'ExposureTime', Condition => '$$self{Model} !~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'models other than the SD1 and Merrill/Quattro models', Writable => 'rational64u', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', Priority => 0, }, 0x0033 => { #PH Name => 'ExposureTime2', Condition => '$$self{Model} !~ / (SD1|SD9|SD15|Merrill|Quattro)$/', Notes => 'models other than the SD1, SD9, SD15 and Merrill/Quattro models', Writable => 'string', ValueConv => '$val * 1e-6', ValueConvInv => 'int($val * 1e6 + 0.5)', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x0034 => { #PH Name => 'BurstShot', Condition => '$$self{Model} !~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'models other than the SD1 and Merrill/Quattro models', Writable => 'int32u', }, # 0x0034 - int32u: 0,1,2,3 or 4 0x0035 => { #PH Name => 'ExposureCompensation', Condition => '$$self{Model} !~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'models other than the SD1 and Merrill/Quattro models', Writable => 'rational64s', # add a '+' sign to positive values PrintConv => '$val and $val =~ s/^(\d)/\+$1/; $val', PrintConvInv => '$val', }, # 0x0036 - string: " " # 0x0037-38 - string: "" 0x0039 => { #PH (invalid for SD9, SD14?) Name => 'SensorTemperature', Condition => '$$self{Model} !~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'models other than the SD1 and Merrill/Quattro models', # (string format) PrintConv => 'IsInt($val) ? "$val C" : $val', PrintConvInv => '$val=~s/ ?C$//; $val', }, 0x003a => { #PH Name => 'FlashExposureComp', Condition => '$$self{Model} !~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'models other than the SD1 and Merrill/Quattro models', Writable => 'rational64s', }, 0x003b => { #PH (how is this different from other Firmware?) Name => 'Firmware', Condition => '$$self{Model} !~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'models other than the SD1 and Merrill/Quattro models', Priority => 0, }, 0x003c => { #PH Name => 'WhiteBalance', Condition => '$$self{Model} !~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'models other than the SD1 and Merrill/Quattro models', Priority => 0, }, 0x003d => { #PH (new for SD15 and SD1) Name => 'PictureMode', Notes => 'same as ColorMode, but "Standard" when ColorMode is Sepia or B&W', }, 0x0048 => { #PH Name => 'LensApertureRange', Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'SD1 and Merrill/Quattro models only', }, 0x0049 => { #PH Name => 'FNumber', Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'SD1 and Merrill/Quattro models only', Writable => 'rational64u', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', Priority => 0, }, 0x004a => { #PH Name => 'ExposureTime', Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'SD1 and Merrill/Quattro models only', Writable => 'rational64u', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', Priority => 0, }, 0x004b => [{ #PH Name => 'ExposureTime2', Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d Merrill)$/', Notes => 'SD1 and Merrill/Quattro models only', Writable => 'string', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', },{ Name => 'ExposureTime2', Condition => '$$self{Model} =~ /^SIGMA dp\d Quattro$/i', Notes => 'SD1 and Merrill/Quattro models only', Writable => 'string', ValueConv => '$val / 1000000', ValueConvInv => '$val * 1000000', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }], 0x004d => { #PH Name => 'ExposureCompensation', Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'SD1 and Merrill/Quattro models only', Writable => 'rational64s', # add a '+' sign to positive values PrintConv => '$val and $val =~ s/^(\d)/\+$1/; $val', PrintConvInv => '$val', }, # 0x0054 - string: "F20","F23" 0x0055 => { #PH Name => 'SensorTemperature', Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'SD1 and Merrill/Quattro models only', # (string format) PrintConv => 'IsInt($val) ? "$val C" : $val', PrintConvInv => '$val=~s/ ?C$//; $val', }, 0x0056 => { #PH (NC) Name => 'FlashExposureComp', Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'SD1 and Merrill/Quattro models only', Writable => 'rational64s', }, 0x0057 => { #PH (how is this different from other Firmware?) Name => 'Firmware', Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'SD1 and Merrill/Quattro models only', Priority => 0, }, 0x0058 => { #PH Name => 'WhiteBalance', Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'SD1 and Merrill/Quattro models only', Priority => 0, }, 0x0059 => { #PH Name => 'DigitalFilter', Condition => '$$self{Model} =~ /^SIGMA (SD1( Merrill)?|DP\d (Merrill|Quattro))$/i', Notes => 'SD1 and Merrill/Quattro models only', # seen: Standard, Landscape,Monochrome,Neutral,Portrait,Sepia,Vivid }, # 0x005a/b/c - rational64s: 0/10 for the SD1 ); 1; # end __END__ =head1 NAME Image::ExifTool::Sigma - Sigma/Foveon EXIF maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Sigma and Foveon maker notes in EXIF information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.x3f.info/technotes/FileDocs/MakerNoteDoc.html> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Sigma Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/SigmaRaw.pm�������������������������������������������������000644 �000765 �000024 �00000055621 12642461335 021773� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: SigmaRaw.pm # # Description: Read Sigma/Foveon RAW (X3F) meta information # # Revisions: 2005/10/16 - P. Harvey Created # 2009/11/30 - P. Harvey Support X3F v2.3 written by Sigma DP2 # # References: 1) http://www.x3f.info/technotes/FileDocs/X3F_Format.pdf #------------------------------------------------------------------------------ package Image::ExifTool::SigmaRaw; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Sigma; $VERSION = '1.24'; sub ProcessX3FHeader($$$); sub ProcessX3FDirectory($$$); sub ProcessX3FProperties($$$); # main X3F sections (plus header stuff) %Image::ExifTool::SigmaRaw::Main = ( PROCESS_PROC => \&ProcessX3FDirectory, NOTES => q{ These tags are used in Sigma and Foveon RAW (.X3F) images. Metadata is also extracted from the JpgFromRaw image if it exists (all models but the SD9 and SD10). Currently, metadata may only be written to the embedded JpgFromRaw. }, Header => { SubDirectory => { TagTable => 'Image::ExifTool::SigmaRaw::Header' }, }, Header4 => { SubDirectory => { TagTable => 'Image::ExifTool::SigmaRaw::Header4' }, }, HeaderExt => { SubDirectory => { TagTable => 'Image::ExifTool::SigmaRaw::HeaderExt' }, }, PROP => { Name => 'Properties', SubDirectory => { TagTable => 'Image::ExifTool::SigmaRaw::Properties' }, }, IMAG => { Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Binary => 1, }, IMA2 => [ { Name => 'PreviewImage', Condition => 'not $$self{IsJpgFromRaw}', Groups => { 2 => 'Preview' }, Binary => 1, }, { Name => 'JpgFromRaw', Groups => { 2 => 'Preview' }, Binary => 1, }, ] ); # common X3F header structure %Image::ExifTool::SigmaRaw::Header = ( PROCESS_PROC => \&ProcessX3FHeader, FORMAT => 'int32u', NOTES => 'Information extracted from the header of an X3F file.', 1 => { Name => 'FileVersion', ValueConv => '($val >> 16) . "." . ($val & 0xffff)', }, 2 => { Name => 'ImageUniqueID', # the serial number (with an extra leading "0") makes up # the first 8 digits of this UID, Format => 'undef[16]', ValueConv => 'unpack("H*", $val)', }, 6 => { Name => 'MarkBits', PrintConv => { BITMASK => { } }, }, 7 => 'ImageWidth', 8 => 'ImageHeight', 9 => 'Rotation', 10 => { Name => 'WhiteBalance', Format => 'string[32]', }, 18 => { #PH (DP2, FileVersion 2.3) Name => 'SceneCaptureType', Format => 'string[32]', }, ); # X3F version 4 header structure (ref PH) %Image::ExifTool::SigmaRaw::Header4 = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FORMAT => 'int32u', NOTES => 'Header information for version 4.0 or greater X3F.', 1 => { Name => 'FileVersion', ValueConv => '($val >> 16) . "." . ($val & 0xffff)', }, # 8 - undef[4]: 4 random ASCII characters 10 => 'ImageWidth', 11 => 'ImageHeight', 12 => 'Rotation', # don't know what the rest of the header contains, but none of # these values change in any of my samples... ); # extended header tags %Image::ExifTool::SigmaRaw::HeaderExt = ( GROUPS => { 2 => 'Camera' }, FORMAT => 'float', NOTES => 'Extended header data found in version 2.1 and 2.2 files', 0 => 'Unused', 1 => { Name => 'ExposureAdjust',PrintConv => 'sprintf("%.1f",$val)' }, 2 => { Name => 'Contrast', PrintConv => 'sprintf("%.1f",$val)' }, 3 => { Name => 'Shadow', PrintConv => 'sprintf("%.1f",$val)' }, 4 => { Name => 'Highlight', PrintConv => 'sprintf("%.1f",$val)' }, 5 => { Name => 'Saturation', PrintConv => 'sprintf("%.1f",$val)' }, 6 => { Name => 'Sharpness', PrintConv => 'sprintf("%.1f",$val)' }, 7 => { Name => 'RedAdjust', PrintConv => 'sprintf("%.1f",$val)' }, 8 => { Name => 'GreenAdjust', PrintConv => 'sprintf("%.1f",$val)' }, 9 => { Name => 'BlueAdjust', PrintConv => 'sprintf("%.1f",$val)' }, 10 => { Name => 'X3FillLight', PrintConv => 'sprintf("%.1f",$val)' }, ); # PROP tags %Image::ExifTool::SigmaRaw::Properties = ( PROCESS_PROC => \&ProcessX3FProperties, GROUPS => { 2 => 'Camera' }, PRIORITY => 0, # (because these aren't writable like the EXIF ones) AEMODE => { Name => 'MeteringMode', PrintConv => { 8 => '8-segment', C => 'Center-weighted average', A => 'Average', }, }, AFAREA => 'AFArea', # observed: CENTER_V AFINFOCUS => 'AFInFocus', # observed: H AFMODE => 'FocusMode', AP_DESC => 'ApertureDisplayed', APERTURE => { Name => 'FNumber', Groups => { 2 => 'Image' }, PrintConv => 'sprintf("%.1f",$val)', }, BRACKET => 'BracketShot', BURST => 'BurstShot', CAMMANUF => 'Make', CAMMODEL => 'Model', CAMNAME => 'CameraName', CAMSERIAL => 'SerialNumber', CM_DESC => 'SceneCaptureType', #PH (DP2) COLORSPACE => 'ColorSpace', # observed: sRGB DRIVE => { Name => 'DriveMode', PrintConv => { SINGLE => 'Single Shot', MULTI => 'Multi Shot', '2S' => '2 s Timer', '10S' => '10 s Timer', UP => 'Mirror Up', AB => 'Auto Bracket', OFF => 'Off', }, }, EVAL_STATE => 'EvalState', # observed: POST-EXPOSURE EXPCOMP => { Name => 'ExposureCompensation', Groups => { 2 => 'Image' }, PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', }, EXPNET => { Name => 'NetExposureCompensation', Groups => { 2 => 'Image' }, PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', }, EXPTIME => { Name => 'IntegrationTime', Groups => { 2 => 'Image' }, ValueConv => '$val * 1e-6', # convert from usec PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, FIRMVERS => 'FirmwareVersion', FLASH => { Name => 'FlashMode', PrintConv => 'ucfirst(lc($val))', }, FLASHEXPCOMP=> 'FlashExpComp', FLASHPOWER => 'FlashPower', FLASHTTLMODE=> 'FlashTTLMode', # observed: ON FLASHTYPE => 'FlashType', # observed: NONE FLENGTH => { Name => 'FocalLength', PrintConv => 'sprintf("%.1f mm",$val)', }, FLEQ35MM => { Name => 'FocalLengthIn35mmFormat', PrintConv => 'sprintf("%.1f mm",$val)', }, FOCUS => { Name => 'Focus', PrintConv => { AF => 'Auto-focus Locked', 'NO LOCK' => "Auto-focus Didn't Lock", M => 'Manual', }, }, IMAGERBOARDID => 'ImagerBoardID', IMAGERTEMP => { Name => 'SensorTemperature', PrintConv => '"$val C"', }, IMAGEBOARDID=> 'ImageBoardID', #PH (DP2) ISO => 'ISO', LENSARANGE => 'LensApertureRange', LENSFRANGE => 'LensFocalRange', LENSMODEL => { Name => 'LensType', ValueConvInv => '$val=~s/\.\d+$//; $val', # (truncate decimal part) PrintConv => \%Image::ExifTool::Sigma::sigmaLensTypes, SeparateTable => 'Sigma LensType', }, PMODE => { Name => 'ExposureProgram', PrintConv => { P => 'Program', A => 'Aperture Priority', S => 'Shutter Priority', M => 'Manual', }, }, RESOLUTION => { Name => 'Quality', PrintConv => { LOW => 'Low', MED => 'Medium', HI => 'High', }, }, SENSORID => 'SensorID', SH_DESC => 'ShutterSpeedDisplayed', SHUTTER => { Name => 'ExposureTime', Groups => { 2 => 'Image' }, PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, TIME => { Name => 'DateTimeOriginal', Groups => { 2 => 'Time' }, Description => 'Date/Time Original', ValueConv => 'ConvertUnixTime($val)', PrintConv => '$self->ConvertDateTime($val)', }, WB_DESC => 'WhiteBalance', VERSION_BF => 'VersionBF', ); #------------------------------------------------------------------------------ # Extract null-terminated unicode string from list of characters # Inputs: 0) ExifTool ref, 1) list ref, 2) position in list # Returns: Converted string sub ExtractUnicodeString($$$) { my ($et, $chars, $pos) = @_; my $i; for ($i=$pos; $i<@$chars; ++$i) { last unless $$chars[$i]; } my $buff = pack('v*', @$chars[$pos..$i-1]); return $et->Decode($buff, 'UCS2', 'II'); } #------------------------------------------------------------------------------ # Process an X3F header # Inputs: 0) ExifTool ref, 1) DirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessX3FHeader($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $hdrLen = $$dirInfo{DirLen}; # process the static header structure first $et->ProcessBinaryData($dirInfo, $tagTablePtr); # process extended data if available if (length($$dataPt) - $hdrLen >= 160) { my $verbose = $et->Options('Verbose'); if ($verbose) { $et->VerboseDir('X3F HeaderExt', 32); HexDump($dataPt, undef, MaxLen => $verbose > 3 ? 1024 : 96, Out => $et->Options('TextOut'), Prefix => $$et{INDENT}, Start => $hdrLen, ) if $verbose > 2; } $tagTablePtr = GetTagTable('Image::ExifTool::SigmaRaw::HeaderExt'); my @tags = unpack("x${hdrLen}C32", $$dataPt); my $i; my $unused = 0; for ($i=0; $i<32; ++$i) { $tags[$i] or ++$unused, next; $et->HandleTag($tagTablePtr, $tags[$i], undef, Index => $i, DataPt => $dataPt, Start => $hdrLen + 32 + $i * 4, Size => 4, ); } $et->VPrint(0, "$$et{INDENT}($unused entries unused)\n"); } return 1; } #------------------------------------------------------------------------------ # Process an X3F properties # Inputs: 0) ExifTool ref, 1) DirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessX3FProperties($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $size = length($$dataPt); my $verbose = $et->Options('Verbose'); my $unknown = $et->Options('Unknown'); unless ($size >= 24 and $$dataPt =~ /^SECp/) { $et->Warn('Bad properties header'); return 0; } my ($entries, $fmt, $len) = unpack('x8V2x4V', $$dataPt); unless ($size >= 24 + 8 * $entries + $len) { $et->Warn('Truncated Property directory'); return 0; } $verbose and $et->VerboseDir('Properties', $entries); $fmt == 0 or $et->Warn("Unsupported character format $fmt"), return 0; my $charPos = 24 + 8 * $entries; my @chars = unpack('v*',substr($$dataPt, $charPos, $len * 2)); my $index; for ($index=0; $index<$entries; ++$index) { my ($namePos, $valPos) = unpack('V2',substr($$dataPt, $index*8 + 24, 8)); if ($namePos >= @chars or $valPos >= @chars) { $et->Warn('Bad Property pointer'); return 0; } my $tag = ExtractUnicodeString($et, \@chars, $namePos); my $val = ExtractUnicodeString($et, \@chars, $valPos); if (not $$tagTablePtr{$tag} and $unknown and $tag =~ /^\w+$/) { my $tagInfo = { Name => "SigmaRaw_$tag", Description => Image::ExifTool::MakeDescription('SigmaRaw', $tag), Unknown => 1, Writable => 0, # can't write unknown tags }; # add tag information to table AddTagToTable($tagTablePtr, $tag, $tagInfo); } $et->HandleTag($tagTablePtr, $tag, $val, Index => $index, DataPt => $dataPt, Start => $charPos + 2 * $valPos, Size => 2 * (length($val) + 1), ); } return 1; } #------------------------------------------------------------------------------ # Write an X3F file # Inputs: 0) ExifTool ref, 1) DirInfo ref (DirStart = directory offset) # Returns: error string, undef on success, or -1 on write error # Notes: Writes metadata to embedded JpgFromRaw image sub WriteX3F($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $outfile = $$dirInfo{OutFile}; my ($outDir, $buff, $ver, $entries, $dir, $outPos, $index, $didContain); $raf->Seek($$dirInfo{DirStart}, 0) or return 'Error seeking to directory start'; # read the X3F directory header (will be copied directly to output) $raf->Read($outDir, 12) == 12 or return 'Truncated X3F image'; $outDir =~ /^SECd/ or return 'Bad section header'; ($ver, $entries) = unpack('x4V2', $outDir); # do sanity check on number of entries in directory return 'Invalid X3F directory count' unless $entries > 2 and $entries < 20; # read the directory entries unless ($raf->Read($dir, $entries * 12) == $entries * 12) { return 'Truncated X3F directory'; } # do a quick scan to determine the offset of the first data subsection for ($index=0; $index<$entries; ++$index) { my $pos = $index * 12; my ($offset, $len, $tag) = unpack("x${pos}V2a4", $dir); # remember position of first data subsection $outPos = $offset if not defined $outPos or $outPos > $offset; } # copy the file header up to the start of the first data subsection unless ($raf->Seek(0,0) and $raf->Read($buff, $outPos) == $outPos) { return 'Error reading X3F header'; } Write($outfile, $buff) or return -1; # loop through directory, rewriting each section for ($index=0; $index<$entries; ++$index) { my $pos = $index * 12; my ($offset, $len, $tag) = unpack("x${pos}V2a4", $dir); $raf->Seek($offset, 0) or return 'Bad data offset'; if ($tag eq 'IMA2' and $len > 28) { # check subsection header (28 bytes) to see if this is a JPEG preview image $raf->Read($buff, 28) == 28 or return 'Error reading PreviewImage header'; Write($outfile, $buff) or return -1; $len -= 28; # only rewrite full-sized JpgFromRaw (version 2.0, type 2, format 18) if ($buff =~ /^SECi\0\0\x02\0\x02\0\0\0\x12\0\0\0/ and $$et{ImageWidth} == unpack('x16V', $buff)) { $raf->Read($buff, $len) == $len or return 'Error reading JpgFromRaw'; # use same write directories as JPEG $et->InitWriteDirs('JPEG'); # rewrite the embedded JPEG in memory my $newData; my %jpegInfo = ( Parent => 'X3F', RAF => new File::RandomAccess(\$buff), OutFile => \$newData, ); $$et{FILE_TYPE} = 'JPEG'; my $success = $et->WriteJPEG(\%jpegInfo); $$et{FILE_TYPE} = 'X3F'; SetByteOrder('II'); return 'Error writing X3F JpgFromRaw' unless $success and $newData; return -1 if $success < 0; # write new data if anything changed, otherwise copy old image my $outPt = $$et{CHANGED} ? \$newData : \$buff; Write($outfile, $$outPt) or return -1; # set $len to the total subsection data length $len = length($$outPt) + 28; $didContain = 1; } else { # copy original image data Image::ExifTool::CopyBlock($raf, $outfile, $len) or return 'Corrupted X3F image'; $len += 28; } } else { # copy data for this subsection Image::ExifTool::CopyBlock($raf, $outfile, $len) or return 'Corrupted X3F directory'; } # add directory entry and update output file position $outDir .= pack('V2a4', $outPos, $len, $tag); $outPos += $len; # pad data to an even 4-byte boundary if ($len & 0x03) { my $pad = 4 - ($len & 0x03); Write($outfile, "\0" x $pad) or return -1; $outPos += $pad; } } # warn if we couldn't add metadata to this image (should only be SD9 or SD10) $didContain or $et->Warn("Can't yet write SD9 or SD10 X3F images"); # write out the directory and the directory pointer, and we are done Write($outfile, $outDir, pack('V', $outPos)) or return -1; return undef; } #------------------------------------------------------------------------------ # Process an X3F directory # Inputs: 0) ExifTool ref, 1) DirInfo ref, 2) tag table ref # Returns: error string or undef on success sub ProcessX3FDirectory($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $raf = $$dirInfo{RAF}; my $verbose = $et->Options('Verbose'); $raf->Seek($$dirInfo{DirStart}, 0) or return 'Error seeking to directory start'; # parse the X3F directory structure my ($buff, $ver, $entries, $index, $dir); $raf->Read($buff, 12) == 12 or return 'Truncated X3F image'; $buff =~ /^SECd/ or return 'Bad section header'; ($ver, $entries) = unpack('x4V2', $buff); $verbose and $et->VerboseDir('X3F Subsection', $entries); $raf->Read($dir, $entries * 12) == $entries * 12 or return 'Truncated X3F directory'; for ($index=0; $index<$entries; ++$index) { my $pos = $index * 12; my ($offset, $len, $tag) = unpack("x${pos}V2a4", $dir); my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); if ($verbose) { $et->VPrint(0, "$$et{INDENT}$index) $tag Subsection ($len bytes):\n"); if ($verbose > 2) { $raf->Seek($offset, 0) or return 'Error seeking'; $raf->Read($buff, $len) == $len or return 'Truncated image'; $et->VerboseDump(\$buff); } } next unless $tagInfo; $raf->Seek($offset, 0) or return "Error seeking for $$tagInfo{Name}"; if ($$tagInfo{Name} eq 'PreviewImage') { # check image header to see if this is a JPEG preview image $raf->Read($buff, 28) == 28 or return 'Error reading PreviewImage header'; # ignore all image data but JPEG compressed (version 2.0, type 2, format 18) next unless $buff =~ /^SECi\0\0\x02\0\x02\0\0\0\x12\0\0\0/; # check preview image size and extract full-sized preview as JpgFromRaw if ($$et{ImageWidth} == unpack('x16V', $buff)) { $$et{IsJpgFromRaw} = 1; $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); delete $$et{IsJpgFromRaw}; } $offset += 28; $len -= 28; } $raf->Read($buff, $len) == $len or return "Error reading $$tagInfo{Name} data"; my $subdir = $$tagInfo{SubDirectory}; if ($subdir) { my %dirInfo = ( DataPt => \$buff ); my $subTable = GetTagTable($$subdir{TagTable}); $et->ProcessDirectory(\%dirInfo, $subTable); } else { # extract metadata from JpgFromRaw if ($$tagInfo{Name} eq 'JpgFromRaw') { my %dirInfo = ( Parent => 'X3F', RAF => new File::RandomAccess(\$buff), ); $$et{BASE} += $offset; $et->ProcessJPEG(\%dirInfo); $$et{BASE} -= $offset; SetByteOrder('II'); } $et->FoundTag($tagInfo, $buff); } } return undef; } #------------------------------------------------------------------------------ # Read/write information from a Sigma raw (X3F) image # Inputs: 0) ExifTool ref, 1) DirInfo ref # Returns: 1 on success, 0 if this wasn't a valid X3F image, or -1 on write error sub ProcessX3F($$) { my ($et, $dirInfo) = @_; my $outfile = $$dirInfo{OutFile}; my $raf = $$dirInfo{RAF}; my $warn = $outfile ? \&Image::ExifTool::Error : \&Image::ExifTool::Warn; my ($buff, $err, $hdrLen); return 0 unless $raf->Read($buff, 40) == 40; return 0 unless $buff =~ /^FOVb/; SetByteOrder('II'); $et->SetFileType(); # check version number my $ver = unpack('x4V',$buff); $ver = ($ver >> 16) . '.' . ($ver & 0xffff); if ($ver > 5) { &$warn($et, "Untested X3F version ($ver). Please submit sample for testing", 1); } # read version 2.1/2.2/2.3 extended header if ($ver > 2) { my ($extra, $buf2); if ($ver >= 4) { $hdrLen = 0x300; $extra = 0; } else { $hdrLen = $ver > 2.2 ? 104 : 72; # SceneCaptureType string added in 2.3 $extra = 160; # (extended header is 160 bytes) } my $more = $hdrLen - length($buff) + $extra; unless ($raf->Read($buf2, $more) == $more) { &$warn($et, 'Error reading X3F header'); return 1; } $buff .= $buf2; } my ($widPos, $hdrType) = $ver < 4 ? (28, 'Header') : (40, 'Header4'); # extract ImageWidth for later $$et{ImageWidth} = Get32u(\$buff, $widPos); # process header information my $tagTablePtr = GetTagTable('Image::ExifTool::SigmaRaw::Main'); unless ($outfile) { $et->HandleTag($tagTablePtr, $hdrType, $buff, DataPt => \$buff, Size => $hdrLen, ); } # read the directory pointer $raf->Seek(-4, 2) or &$warn($et, 'Seek error'), return 1; unless ($raf->Read($buff, 4) == 4) { &$warn($et, 'Error reading X3F dir pointer'); return 1; } my $offset = unpack('V', $buff); my %dirInfo = ( RAF => $raf, DirStart => $offset, ); if ($outfile) { $dirInfo{OutFile} = $outfile; $err = WriteX3F($et, \%dirInfo); return -1 if $err and $err eq '-1'; } else { # process the X3F subsections $err = $et->ProcessDirectory(\%dirInfo, $tagTablePtr); } $err and &$warn($et, $err); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::SigmaRaw - Read Sigma/Foveon RAW (X3F) meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read Sigma and Foveon X3F images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.x3f.info/technotes/FileDocs/X3F_Format.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/SigmaRaw Tags>, L<Image::ExifTool::Sigma(3pm)|Image::ExifTool::Sigma>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Sony.pm�����������������������������������������������������000644 �000765 �000024 �00001317375 12650434571 021222� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Sony.pm # # Description: Sony EXIF Maker Notes tags # # Revisions: 04/06/2004 - P. Harvey Created # # References: 1) http://www.cybercom.net/~dcoffin/dcraw/ # 2) http://homepage3.nifty.com/kamisaka/makernote/makernote_sony.htm (2006/08/06) # 3) Thomas Bodenmann private communication # 4) Philippe Devaux private communication (A700) # 5) Marcus Holland-Moritz private communication (A700) # 6) Andrey Tverdokhleb private communication # 7) Rudiger Lange private communication (A700) # 8) Igal Milchtaich private communication # 9) Michael Reitinger private communication (DSC-TX7,RX100) # 10) http://www.klingebiel.com/tempest/hd/pmp.html # 11) Mike Battilana private communication # 13) http://www.mi-fo.de/forum/index.php?showtopic=33239 # http://www.dyxum.com/dforum/the-alpha-shutter-count-tool_topic97489_page4.html # 14) Iliah Borg private communication (LibRaw) # JD) Jens Duttke private communication # JR) Jos Roost private communication #------------------------------------------------------------------------------ package Image::ExifTool::Sony; use strict; use vars qw($VERSION %sonyLensTypes); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; use Image::ExifTool::Minolta; $VERSION = '2.29'; sub ProcessSRF($$$); sub ProcessSR2($$$); sub ProcessSonyPIC($$$); sub ProcessMoreInfo($$$); sub Decipher($;$); sub ProcessEnciphered($$$); sub WriteEnciphered($$$); sub WriteSR2($$$); sub ConvLensSpec($); sub ConvInvLensSpec($); sub PrintLensSpec($); sub PrintInvLensSpec($;$$); sub MakeTiffHeader($$$$;$); # (%sonyLensTypes is filled in based on Minolta LensType's) # Sony E-mount lenses # (NOTE: these should be kept in sync with the 65535 entries in %minoltaLensTypes) my %sonyLensTypes2 = ( Notes => 'Lens type numbers for Sony E-mount lenses used by NEX models.', 0 => 'Unknown E-mount lens or other lens', 1 => 'Sony LA-EA1 Adapter', 2 => 'Sony LA-EA2 Adapter', 3 => 'Sony LA-EA3 Adapter', #(NC) ILCE-7 image with A-mount lens, but also has 0x940e 2nd byte=2 6 => 'Sony LA-EA4 Adapter', #(NC) ILCE-7R image with A-mount lens and having phase-detect info blocks in 0x940e AFInfo 44 => 'Metabones Canon EF Smart Adapter', #JR 78 => 'Metabones Canon EF Smart Adapter Mark III or Other Adapter', #PH/JR (also Mark IV, Fotodiox and Viltrox) 234 => 'Metabones Canon EF Smart Adapter Mark IV', #JR 239 => 'Metabones Canon EF Speed Booster', #JR # Sony VX product code: (http://www.mi-fo.de/forum/index.php?s=7df1c8d3b1cd675f2abf4f4442e19cf2&showtopic=35035&view=findpost&p=303746) 32784 => 'Sony E 16mm F2.8', # VX9100 32785 => 'Sony E 18-55mm F3.5-5.6 OSS', # VX9101 32786 => 'Sony E 55-210mm F4.5-6.3 OSS', # VX9102 32787 => 'Sony E 18-200mm F3.5-6.3 OSS', # VX9103 32788 => 'Sony E 30mm F3.5 Macro', # VX9104 32789 => 'Sony E 24mm F1.8 ZA', # VX9105 32790 => 'Sony E 50mm F1.8 OSS', # VX9106 32791 => 'Sony E 16-70mm F4 ZA OSS', # VX9107 32792 => 'Sony E 10-18mm F4 OSS', # VX9108 32793 => 'Sony E PZ 16-50mm F3.5-5.6 OSS', # VX9109 32794 => 'Sony FE 35mm F2.8 ZA', # VX9110 32795 => 'Sony FE 24-70mm F4 ZA OSS', # VX9111 32797 => 'Sony E 18-200mm F3.5-6.3 OSS LE', # VX9113 32798 => 'Sony E 20mm F2.8', # VX9114 32799 => 'Sony E 35mm F1.8 OSS', # VX9115 32800 => 'Sony E PZ 18-105mm F4 G OSS', #JR # VX9116 32802 => 'Sony FE 90mm F2.8 Macro G OSS', # VX? 32803 => 'Sony E 18-50mm F4-5.6', 32807 => 'Sony E PZ 18-200mm F3.5-6.3 OSS', # VX9123 32808 => 'Sony FE 55mm F1.8 ZA', # VX9124 32810 => 'Sony FE 70-200mm F4 G OSS', #JR # VX9126 32811 => 'Sony FE 16-35mm F4 ZA OSS', #JR # VX9127 32813 => 'Sony FE 28-70mm F3.5-5.6 OSS', # VX9129 32814 => 'Sony FE 35mm F1.4 ZA', # VX? 32815 => 'Sony FE 24-240mm F3.5-6.3 OSS', # VX? 32816 => 'Sony FE 28mm F2', #JR # VX? 32817 => 'Sony FE PZ 28-135mm F4 G OSS',#JR # VX? 32826 => 'Sony FE 21mm F2.8 (SEL28F20 + SEL075UWC)', #JR # (+ Ultra-wide converter) 32827 => 'Sony FE 16mm F3.5 Fisheye (SEL28F20 + SEL057FEC)', #JR # (+ Fisheye converter) 49216 => 'Zeiss Batis 25mm F2', #JR 49217 => 'Zeiss Batis 85mm F1.8', #JR 49234 => 'Zeiss Loxia 21mm F2.8', #PH ); # ExposureProgram values (ref PH, mainly decoded from A200) my %sonyExposureProgram = ( 0 => 'Auto', # (same as 'Program AE'?) 1 => 'Manual', 2 => 'Program AE', 3 => 'Aperture-priority AE', 4 => 'Shutter speed priority AE', 8 => 'Program Shift A', #7 9 => 'Program Shift S', #7 16 => 'Portrait', # (A330) 17 => 'Sports', # (A330) 18 => 'Sunset', # (A330) 19 => 'Night Portrait', # (A330) 20 => 'Landscape', # (A330) 21 => 'Macro', # (A330) 35 => 'Auto No Flash', # (A330) ); # ExposureProgram values in CameraSettings3 (ref JR) my %sonyExposureProgram2 = ( # A580 Mode Dial setting: 1 => 'Program AE', # P 2 => 'Aperture-priority AE', # A 3 => 'Shutter speed priority AE', # S 4 => 'Manual', # M 5 => 'Cont. Priority AE', # (A35) 16 => 'Auto', # AUTO 17 => 'Auto (no flash)', # "flash strike-out" symbol 18 => 'Auto+', #PH (A33) 49 => 'Portrait', # SCN 50 => 'Landscape', # SCN 51 => 'Macro', # SCN 52 => 'Sports', # SCN 53 => 'Sunset', # SCN 54 => 'Night view', # SCN 55 => 'Night view/portrait', # SCN 56 => 'Handheld Night Shot', # SCN (also called "Hand-held Twilight") 57 => '3D Sweep Panorama', # "Panorama" symbol 64 => 'Auto 2', #PH (A33 AUTO) 65 => 'Auto 2 (no flash)', #JR (NC, A35) 80 => 'Sweep Panorama', # "Panorama" symbol 96 => 'Anti Motion Blur', #PH (NEX-5) # 128-138 are A35 picture effects (combined SCN/Picture effect mode dial position) 128 => 'Toy Camera', 129 => 'Pop Color', 130 => 'Posterization', 131 => 'Posterization B/W', 132 => 'Retro Photo', 133 => 'High-key', 134 => 'Partial Color Red', 135 => 'Partial Color Green', 136 => 'Partial Color Blue', 137 => 'Partial Color Yellow', 138 => 'High Contrast Monochrome', ); # ExposureProgram values in Tags 2010 and 94xx (ref JR) my %sonyExposureProgram3 = ( 0 => 'Program AE', 1 => 'Aperture-priority AE', 2 => 'Shutter speed priority AE', 3 => 'Manual', 4 => 'Auto', 5 => 'iAuto', 6 => 'Superior Auto', 7 => 'iAuto+', 8 => 'Portrait', 9 => 'Landscape', 10 => 'Twilight', 11 => 'Twilight Portrait', 12 => 'Sunset', 14 => 'Action (High speed)', #PH (RX100) 16 => 'Sports', 17 => 'Handheld Night Shot', 18 => 'Anti Motion Blur', 19 => 'High Sensitivity', 21 => 'Beach', 22 => 'Snow', 23 => 'Fireworks', 26 => 'Underwater', 27 => 'Gourmet', 28 => 'Pet', 29 => 'Macro', 30 => 'Backlight Correction HDR', # 32 => 'Night ... ???', # seen for HDR-CX360E 33 => 'Sweep Panorama', 36 => 'Background Defocus', 37 => 'Soft Skin', 42 => '3D Image', 43 => 'Cont. Priority AE', ); # WhiteBalanceSetting values (ref JR) my %whiteBalanceSetting = ( 0x10 => 'Auto (-3)', #(NC) 0x11 => 'Auto (-2)', #(NC) 0x12 => 'Auto (-1)', #(NC) 0x13 => 'Auto (0)', 0x14 => 'Auto (+1)', #(NC) 0x15 => 'Auto (+2)', #(NC) 0x16 => 'Auto (+3)', #(NC) 0x20 => 'Daylight (-3)', 0x21 => 'Daylight (-2)', #(NC) 0x22 => 'Daylight (-1)', #(NC) 0x23 => 'Daylight (0)', 0x24 => 'Daylight (+1)', 0x25 => 'Daylight (+2)', 0x26 => 'Daylight (+3)', 0x30 => 'Shade (-3)', #(NC) 0x31 => 'Shade (-2)', #(NC) 0x32 => 'Shade (-1)', #(NC) 0x33 => 'Shade (0)', 0x34 => 'Shade (+1)', #(NC) 0x35 => 'Shade (+2)', #(NC) 0x36 => 'Shade (+3)', 0x40 => 'Cloudy (-3)', #(NC) 0x41 => 'Cloudy (-2)', #(NC) 0x42 => 'Cloudy (-1)', #(NC) 0x43 => 'Cloudy (0)', 0x44 => 'Cloudy (+1)', #(NC) 0x45 => 'Cloudy (+2)', #(NC) 0x46 => 'Cloudy (+3)', #(NC) 0x50 => 'Tungsten (-3)', #(NC) 0x51 => 'Tungsten (-2)', #(NC) 0x52 => 'Tungsten (-1)', #(NC) 0x53 => 'Tungsten (0)', 0x54 => 'Tungsten (+1)', #(NC) 0x55 => 'Tungsten (+2)', #(NC) 0x56 => 'Tungsten (+3)', #(NC) 0x60 => 'Fluorescent (-3)', #(NC) 0x61 => 'Fluorescent (-2)', #(NC) 0x62 => 'Fluorescent (-1)', #(NC) 0x63 => 'Fluorescent (0)', 0x64 => 'Fluorescent (+1)', #(NC) 0x65 => 'Fluorescent (+2)', #(NC) 0x66 => 'Fluorescent (+3)', #(NC) 0x70 => 'Flash (-3)', #(NC) 0x71 => 'Flash (-2)', #(NC) 0x72 => 'Flash (-1)', #(NC) 0x73 => 'Flash (0)', 0x74 => 'Flash (+1)', #(NC) 0x75 => 'Flash (+2)', #(NC) 0x76 => 'Flash (+3)', #(NC) 0xa3 => 'Custom', 0xf3 => 'Color Temperature/Color Filter', ); # AF points for cameras with 15-point AF (ref JR) my %afPoint15 = ( 0 => 'Upper-left', 1 => 'Left', 2 => 'Lower-left', 3 => 'Far Left', 4 => 'Top (horizontal)', 5 => 'Near Right', 6 => 'Center (horizontal)', 7 => 'Near Left', 8 => 'Bottom (horizontal)', 9 => 'Top (vertical)', 10 => 'Center (vertical)', 11 => 'Bottom (vertical)', 12 => 'Far Right', 13 => 'Upper-right', 14 => 'Right', 15 => 'Lower-right', 16 => 'Upper-middle', 17 => 'Lower-middle', ); # AF points for cameras with 19-point AF (ref PH) # (verified for A77 firmware 1.07) my %afPoint19 = ( 0 => 'Upper Far Left', 1 => 'Upper-left (horizontal)', 2 => 'Far Left (horizontal)', 3 => 'Left (horizontal)', 4 => 'Lower Far Left', 5 => 'Lower-left (horizontal)', 6 => 'Upper-left (vertical)', 7 => 'Left (vertical)', 8 => 'Lower-left (vertical)', 9 => 'Far Left (vertical)', 10 => 'Top (horizontal)', 11 => 'Near Right', 12 => 'Center (horizontal)', 13 => 'Near Left', 14 => 'Bottom (horizontal)', 15 => 'Top (vertical)', 16 => 'Upper-middle', 17 => 'Center (vertical)', 18 => 'Lower-middle', 19 => 'Bottom (vertical)', 20 => 'Upper Far Right', 21 => 'Upper-right (horizontal)', 22 => 'Far Right (horizontal)', 23 => 'Right (horizontal)', 24 => 'Lower Far Right', 25 => 'Lower-right (horizontal)', 26 => 'Far Right (vertical)', 27 => 'Upper-right (vertical)', 28 => 'Right (vertical)', 29 => 'Lower-right (vertical)', ); # 79 AF point layout and indices for ILCA-77M2, numbered 0-78 for direct look-up from BITMASK in 0x2020, # E6 = Center (ref JR) my %afPoints79 = ( 0=>'A5', 1=>'A6', 2=>'A7', 3=>'B2', 4=>'B3', 5=>'B4', 6=>'B5', 7=>'B6', 8=>'B7', 9=>'B8', 10=>'B9', 11=>'B10', 12=>'C1', 13=>'C2', 14=>'C3', 15=>'C4', 16=>'C5', 17=>'C6', 18=>'C7', 19=>'C8', 20=>'C9', 21=>'C10', 22=>'C11', 23=>'D1', 24=>'D2', 25=>'D3', 26=>'D4', 27=>'D5', 28=>'D6', 29=>'D7', 30=>'D8', 31=>'D9', 32=>'D10', 33=>'D11', 34=>'E1', 35=>'E2', 36=>'E3', 37=>'E4', 38=>'E5', 39=>'E6', 40=>'E7', 41=>'E8', 42=>'E9', 43=>'E10', 44=>'E11', 45=>'F1', 46=>'F2', 47=>'F3', 48=>'F4', 49=>'F5', 50=>'F6', 51=>'F7', 52=>'F8', 53=>'F9', 54=>'F10', 55=>'F11', 56=>'G1', 57=>'G2', 58=>'G3', 59=>'G4', 60=>'G5', 61=>'G6', 62=>'G7', 63=>'G8', 64=>'G9', 65=>'G10', 66=>'G11', 67=>'H2', 68=>'H3', 69=>'H4', 70=>'H5', 71=>'H6', 72=>'H7', 73=>'H8', 74=>'H9', 75=>'H10', 76=>'I5', 77=>'I6', 78=>'I7', ); # AFPoint and AFStatus tags in AFInfo(Tag940e) use numbers 0 to 94 for the 79 positions + 15 cross + 1 F2.8 my %afPoints79_940e = ( 59=>'A5', 50=>'A6', 41=>'A7', 14=>'B2', 7=>'B3', 0=>'B4', 60=>'B5', 51=>'B6', 42=>'B7', 87=>'B8', 80=>'B9', 73=>'B10', 21=>'C1', 15=>'C2', 8=>'C3', 1=>'C4', 61=>'C5', 52=>'C6', 43=>'C7', 88=>'C8', 81=>'C9', 74=>'C10', 68=>'C11', 22=>'D1', 16=>'D2', 9=>'D3', 2=>'D4', 62=>'D5', 53=>'D6', 44=>'D7', 89=>'D8', 82=>'D9', 75=>'D10', 69=>'D11', 23=>'E1', 17=>'E2', 10=>'E3', 3=>'E4', 63=>'E5', 54=>'E6 Center', 45=>'E7', 90=>'E8', 83=>'E9', 76=>'E10', 70=>'E11', 24=>'F1', 18=>'F2', 11=>'F3', 4=>'F4', 64=>'F5', 55=>'F6', 46=>'F7', 91=>'F8', 84=>'F9', 77=>'F10', 71=>'F11', 25=>'G1', 19=>'G2', 12=>'G3', 5=>'G4', 65=>'G5', 56=>'G6', 47=>'G7', 92=>'G8', 85=>'G9', 78=>'G10', 72=>'G11', 20=>'H2', 13=>'H3', 6=>'H4', 66=>'H5', 57=>'H6', 48=>'H7', 93=>'H8', 86=>'H9', 79=>'H10', 67=>'I5', 58=>'I6', 49=>'I7', 28=>'A5 Vertical', 27=>'A6 Vertical', 26=>'A7 Vertical', 31=>'C5 Vertical', 30=>'C6 Vertical', 29=>'C7 Vertical', 34=>'E5 Vertical', 33=>'E6 Center Vertical', 32=>'E7 Vertical', 37=>'G5 Vertical', 36=>'G6 Vertical', 35=>'G7 Vertical', 40=>'I5 Vertical', 39=>'I6 Vertical', 38=>'I7 Vertical', 94=>'E6 Center F2.8', ); my %binaryDataAttrs = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, WRITE_PROC => \&Image::ExifTool::WriteBinaryData, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, WRITABLE => 1, FIRST_ENTRY => 0, ); # tagInfo attributes for unknown cipher block tags my %unknownCipherData = ( Unknown => 1, # require Unknown option Hidden => 1, # doesn't appear in Tag Name documentation RawConv => sub { Decipher(\$_[0]); return $_[0] }, ValueConv => 'PrintHex($val)', # print as hex PrintConv => 'length($val) > 65 ? substr($val,0,60) . "[...]" : $val', # limit length ); my %meterInfo1 = ( Format => 'int32u[27]', PrintConv => 'sprintf("%19d %4d %6d" . " %3d %4d %6d" x 8, split(" ",$val))', PrintConvInv => '$val', ); my %meterInfo2 = ( Format => 'int32u[33]', PrintConv => 'sprintf("%3d %4d %6d" . " %3d %4d %6d" x 10, split(" ",$val))', PrintConvInv => '$val', ); # Sony maker notes tags (some elements in common with %Image::ExifTool::Minolta::Main) %Image::ExifTool::Sony::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ The following information has been decoded from the MakerNotes of Sony cameras. Some of these tags have been inherited from the Minolta MakerNotes. }, 0x0010 => [ #PH # appears to contain mostly AF related information; # for SLT-A77V and newer, similar info is found in 0x940e AFInfo" (ref JR) { Name => 'CameraInfo', # count: A700=368, A850/A900=5478 Condition => '$count == 368 or $count == 5478', SubDirectory => { TagTable => 'Image::ExifTool::Sony::CameraInfo', ByteOrder => 'BigEndian', }, },{ Name => 'CameraInfo2', # count: A200/A300/A350=5506, A230/A290/A330/A380/A390=6118 Condition => '$count == 5506 or $count == 6118', SubDirectory => { TagTable => 'Image::ExifTool::Sony::CameraInfo2', ByteOrder => 'LittleEndian', }, },{ Name => 'CameraInfo3', # count: A33/A35/A55V/A450/A500/A550/A560/A580/NEX3/5/5C/C3/VG10E=15360 Condition => '$count == 15360', SubDirectory => { TagTable => 'Image::ExifTool::Sony::CameraInfo3', ByteOrder => 'LittleEndian', }, },{ Name => 'CameraInfoUnknown', SubDirectory => { TagTable => 'Image::ExifTool::Sony::CameraInfoUnknown' }, }, ], # 0x0018 - starts with "GYRO" for sweep panorama images (ref JR) # - contains ImageStabilization information for Minolta 0x0020 => [ # similar to WBInfoA100 in Minolta.pm. # appears to contain various types of information, as in MoreInfo. (ref JR) { Name => 'FocusInfo', #PH # count: A200/A230/A290/A300/A330/A350/A380/A390==19154, A700/A850/A900=19148 Condition => '$count == 19154 or $count == 19148', SubDirectory => { TagTable => 'Image::ExifTool::Sony::FocusInfo', ByteOrder => 'LittleEndian', }, },{ Name => 'MoreInfo', #JR # count: A450/A500/A550/A560/A580/A33/A35/A55/NEX-3/5/C3/VG10E==20480 SubDirectory => { TagTable => 'Image::ExifTool::Sony::MoreInfo', ByteOrder => 'LittleEndian', }, }, ], 0x0102 => { #5/JD Name => 'Quality', Writable => 'int32u', PrintConv => { 0 => 'RAW', 1 => 'Super Fine', 2 => 'Fine', 3 => 'Standard', 4 => 'Economy', 5 => 'Extra Fine', 6 => 'RAW + JPEG', 7 => 'Compressed RAW', 8 => 'Compressed RAW + JPEG', 0xffffffff => 'n/a', #PH (SLT-A57 panorama) }, }, 0x0104 => { #5/JD Name => 'FlashExposureComp', Description => 'Flash Exposure Compensation', Writable => 'rational64s', }, 0x0105 => { #5/JD (models since mid-2014, ILCA-77M2, ILCE-7M2/7RM2/7SM2, do not report this tag anymore, ref JR) Name => 'Teleconverter', Writable => 'int32u', PrintHex => 1, PrintConv => \%Image::ExifTool::Minolta::minoltaTeleconverters, }, 0x0112 => { #JD Name => 'WhiteBalanceFineTune', Format => 'int32s', Writable => 'int32u', }, 0x0114 => [ #PH { Name => 'CameraSettings', # count: A200/A300/A350/A700=280, A850/A900=364 Condition => '$count == 280 or $count == 364', SubDirectory => { TagTable => 'Image::ExifTool::Sony::CameraSettings', ByteOrder => 'BigEndian', }, },{ Name => 'CameraSettings2', # count: A230/A290/A330/A380/A390=332 Condition => '$count == 332', SubDirectory => { TagTable => 'Image::ExifTool::Sony::CameraSettings2', ByteOrder => 'BigEndian', }, },{ Name => 'CameraSettings3', # count: A560/A580/A33/A35/A55/NEX3/5/5C/C3/VG10E=1536, A450/A500/A550=2048 Condition => '$count == 1536 || $count == 2048', SubDirectory => { TagTable => 'Image::ExifTool::Sony::CameraSettings3', ByteOrder => 'LittleEndian', }, },{ Name => 'CameraSettingsUnknown', SubDirectory => { TagTable => 'Image::ExifTool::Sony::CameraSettingsUnknown', ByteOrder => 'BigEndian', }, }, ], 0x0115 => { #JD Name => 'WhiteBalance', Writable => 'int32u', PrintHex => 1, PrintConv => { 0x00 => 'Auto', 0x01 => 'Color Temperature/Color Filter', 0x10 => 'Daylight', 0x20 => 'Cloudy', 0x30 => 'Shade', 0x40 => 'Tungsten', 0x50 => 'Flash', 0x60 => 'Fluorescent', 0x70 => 'Custom', 0x80 => 'Underwater', }, }, # Tag 0x0116: extra hardware info (ref JR) # (tag not present for A100, A200, A300, A350, A700, nor for A37, A57, A65, A77) 0x0116 => [ #JR { Name => 'ExtraInfo', Condition => '$$self{Model} =~ /^DSLR-A(850|900)\b/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ExtraInfo', ByteOrder => 'BigEndian', }, },{ Name => 'ExtraInfo2', Condition => '$$self{Model} =~ /^DSLR-A(230|290|330|380|390)\b/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ExtraInfo2' }, },{ Name => 'ExtraInfo3', # for DSLR-A450/500/550/560/580, SLT-A33/35/55 and NEX-3/5/5C. SubDirectory => { TagTable => 'Image::ExifTool::Sony::ExtraInfo3' }, } ], 0x0e00 => { Name => 'PrintIM', Description => 'Print Image Matching', SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main' }, }, # the next 3 tags have a different meaning for some models (with format int32u) 0x1000 => { #9 (F88, multi burst mode only) Name => 'MultiBurstMode', Condition => '$format eq "undef"', Notes => 'MultiBurst tags valid only for models with this feature, like the F88', Writable => 'undef', Format => 'int8u', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x1001 => { #9 (F88, multi burst mode only) Name => 'MultiBurstImageWidth', Condition => '$format eq "int16u"', Writable => 'int16u', }, 0x1002 => { #9 (F88, multi burst mode only) Name => 'MultiBurstImageHeight', Condition => '$format eq "int16u"', Writable => 'int16u', }, 0x1003 => { #9 (64 bytes, contains Panorama info for various DSC, NEX, SLT and DSLR models) Name => 'Panorama', # panorama: first 4 bytes '1 1 0 0' (little-endian) or '0 0 1 1' (big-endian) # non-panorama: all bytes are '0' (ref JR) Condition => '$$self{Panorama} = ($$valPt =~ /^(\0\0)?\x01\x01/)', # (little- or big-endian int32u = 257) SubDirectory => { TagTable => 'Image::ExifTool::Sony::Panorama' }, }, # 0x2000 - undef[1] 0x2001 => { #PH (JPEG images from all DSLR's except the A100) Name => 'PreviewImage', Groups => { 2 => 'Preview' }, Writable => 'undef', DataTag => 'PreviewImage', Notes => 'HD-size preview in JPEG images from almost all DSLR/SLT/ILCA/NEX/ILCE.', # Note: the preview data starts with a 32-byte proprietary Sony header # first 8 bytes after 32-byte header: # \x00\xd8\xff\xe1\x00\x27\xff\xff for JPEG files from A33/35/55V/450/500/550/560/580, NEX-3/5/5C/C3/VG10 # \x00\xd8\xff\xdb\x00\x84\x00\x01 for JPEG files from all other models # ( \xff\xd8\xff\xdb\x00\x84\x00\x01 corresponding bytes for all ARW files ) # # DSLR-A700/A850/A900 and DSLR-A200/A300/A350: # - no MPImage2 # DSLR-A230/A290/A330/A380/A390: # - PreviewImage start-offset is at 110 bytes inside MPImage2 # DSLR-A450/A500/A550/A560/A580, SLT-A33/A35/A55V, NEX-3/5/5C/C3/VG10/VG10E: # - PreviewImage start-offset is at 106 bytes inside MPImage2 # - different first bytes after 32-byte header # SLT-A37/A57/A58/A65V/A77V/A99V, ILCA-77M2, NEX-3N/5N/5R/5T/6/7/F3, ILCE-3000/3500/5000/6000/7/7R/7S: # - PreviewImage start-offset is at 130 bytes inside MPImage2 # NEX-VG20E/VG30E/VG900, ILCE-QX1: 0x2001 not present # ILCE-5100/ILCE-7M2/7RM2/7SM2 : 0x2001 present but Size 0 and Offset 0 # WriteCheck => 'return $val=~/^(none|.{32}\xff\xd8\xff)/s ? undef : "Not a valid image"', RawConv => q{ return \$val if $val =~ /^Binary/; $val = substr($val,0x20) if length($val) > 0x20; # return \$val if $val =~ s/^.(\xd8\xff\xdb)/\xff$1/s; return \$val if $val =~ s/^.(\xd8\xff[\xdb\xe1])/\xff$1/s; $$self{PreviewError} = 1 unless $val eq 'none'; return undef; }, # must construct 0x20-byte header which contains length, width and height ValueConvInv => q{ return 'none' unless $val; my $e = new Image::ExifTool; my $info = $e->ImageInfo(\$val,'ImageWidth','ImageHeight'); return undef unless $$info{ImageWidth} and $$info{ImageHeight}; my $size = Set32u($$info{ImageWidth}) . Set32u($$info{ImageHeight}); return Set32u(length $val) . $size . ("\0" x 8) . $size . ("\0" x 4) . $val; }, }, 0x2002 => { #JR (written by Sony IDC) Name => 'Rating', Writable => 'int32u', # (0-5 stars) (4294967295 for an HX9V iSweep Panorama, ref JR) }, # 0x2003 - string[256]: all 0 for DSLR, SLT, NEX; data for DSC-HX9V 0x2004 => { #PH (NEX-5) Name => 'Contrast', Writable => 'int32s', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x2005 => { #PH (NEX-5) Name => 'Saturation', Writable => 'int32s', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x2006 => { #PH Name => 'Sharpness', Writable => 'int32s', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x2007 => { #PH Name => 'Brightness', Writable => 'int32s', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x2008 => { #PH Name => 'LongExposureNoiseReduction', Writable => 'int32u', PrintHex => 1, PrintConv => { 0 => 'Off', 1 => 'On (unused)', 0x10001 => 'On (dark subtracted)', # (NEX-C3) 0xffff0000 => 'Off (65535)', 0xffff0001 => 'On (65535)', 0xffffffff => 'n/a', }, }, 0x2009 => { #PH Name => 'HighISONoiseReduction', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Low', 2 => 'Normal', 3 => 'High', 256 => 'Auto', # it seems that all DSC models except DSC-RX models give n/a here (ref JR) 65535 => 'n/a', }, }, 0x200a => { #PH (A550) Name => 'HDR', Writable => 'int32u', Format => 'int16u', Count => 2, Notes => 'stored as a 32-bit integer, but read as two 16-bit integers', PrintHex => 1, PrintConv => [{ 0x0 => 'Off', 0x01 => 'Auto', 0x10 => '1.0 EV', 0x11 => '1.5 EV', 0x12 => '2.0 EV', 0x13 => '2.5 EV', 0x14 => '3.0 EV', 0x15 => '3.5 EV', 0x16 => '4.0 EV', 0x17 => '4.5 EV', 0x18 => '5.0 EV', 0x19 => '5.5 EV', 0x1a => '6.0 EV', },{ #JR (A580) 0 => 'Uncorrected image', # A580 stores 2 images: uncorrected and HDR 1 => 'HDR image (good)', 2 => 'HDR image (fail 1)', # alignment problem? 3 => 'HDR image (fail 2)', # contrast problem? }], }, 0x200b => { #PH Name => 'MultiFrameNoiseReduction', Writable => 'int32u', Notes => 'may not be valid for RS100', # (RS100 sample was 0 when this feature was turned on) PrintConv => { 0 => 'Off', 1 => 'On', 255 => 'n/a', }, }, # 0x200c - int32u[3]: '0 0 0'; seen '2 1 0' for HX9V 3D-Image (in both JPG and MPO image) # 0x200d - rational64u: 10/10, seen 2.5 for DSC-TX300V, 8 for DSC-HX100V/RX10 0x200e => { #PH (HX20V) Name => 'PictureEffect', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Toy Camera', #JR (A35) 2 => 'Pop Color', # (also A35/NEX-C3, ref JR) 3 => 'Posterization', #JR (A35) 4 => 'Posterization B/W', #JR (A35) 5 => 'Retro Photo', #JR (A35, NEX-5) 6 => 'Soft High Key', # (also A65V, A35/NEX-C3 call this "High-key", ref JR) 7 => 'Partial Color (red)', #JR (A35) 8 => 'Partial Color (green)', #JR (A35, NEX-5) 9 => 'Partial Color (blue)', #JR (A35) 10 => 'Partial Color (yellow)', #JR (A35, NEX-5) 13 => 'High Contrast Monochrome', #JR (A35) 16 => 'Toy Camera (normal)', # (also A65, ref JR) 17 => 'Toy Camera (cool)', # (RX100) 18 => 'Toy Camera (warm)', # (RX100) 19 => 'Toy Camera (green)', # (RX100) 20 => 'Toy Camera (magenta)', # (RX100) 32 => 'Soft Focus (low)', #JR (RX100) 33 => 'Soft Focus', #JR (A65V) 34 => 'Soft Focus (high)', # (RX100) 48 => 'Miniature (auto)', #JR (A65V/NEX-7, horizontal) 49 => 'Miniature (top)', # (RX100) 50 => 'Miniature (middle horizontal)', # (WX100/HX20V, horizontal) 51 => 'Miniature (bottom)', # (WX100, rotate 90 CW) 52 => 'Miniature (left)', # (RX100) 53 => 'Miniature (middle vertical)', # (RX100) 54 => 'Miniature (right)', # (RX100) 64 => 'HDR Painting (low)', # (RX100) 65 => 'HDR Painting', # (also A65V, ref JR) 66 => 'HDR Painting (high)', # (RX100) 80 => 'Rich-tone Monochrome', # (also A65V, ref JR) 97 => 'Water Color', # (HX200V) 98 => 'Water Color 2', 112 => 'Illustration (low)', # (RX100) 113 => 'Illustration', # (RX100) 114 => 'Illustration (high)', # (RX100) }, }, 0x200f => { #PH (RX100) Name => 'SoftSkinEffect', Writable => 'int32u', PrintConv => { 0 => 'Off', 1 => 'Low', 2 => 'Mid', 3 => 'High', # 0x10001 - seen (ref JR) # 0x10002 - seen for landscape and portrait flash (ref JR) 0xffffffff => 'n/a', # (A35) }, }, 0x2010 => [ #JR # different camera models have similar content but at different offsets, appears to correlate with: # 0x1206 - 0x1207 deciphered (0x1205 changes with firmware version): # ad c3 - NEX-5N # 0x0192 - 0x0193 deciphered (0x0191 changes with firmware version): # 91 c3 - NEX-VG20E # 93 c3 - NEX-7, SLT-A65V/A77V # 94 c3 - Hasselblad Lunar # 0x0012 - 0x0013 deciphered (0x0011 changes with firmware version): # 94 c3 - SLT-A37/A57, NEX-F3 # 95 d3 - DSC-WX50, WX70 # 98 c3 - DSC-HX200V, HX20V, HX30V, TX200V, TX300V # 98 d3 - DSC-HX10V, TX66, WX100, WX150 # 9a c3 - DSC-RX1, RX1R # 9b c3 - SLT-A99V, Hasselblad HV # 9c c3 - NEX-VG30E # 9d c3 - DSC-RX100, Hasselblad Stellar # 9e c3 - NEX-VG900, SLT-A58 # a1 d3 - DSC-TX30 # a2 d3 - DSC-WX60, WX80, WX200, WX300 # a3 c3 - NEX-6, DSC-HX300, HX50V # a4 c3 - NEX-3N/5R/5T, ILCE-3000/3500 # unknown offsets or values for DSC-TX20/TX55/WX30 # unknown offsets or values for DSC-HX60V/HX400V/QX10/QX30/QX100/RX10/RX100M2/RX100M3/WX220/WX350, # ILCA-77M2, ILCE-5000/5100/6000/7/7M2/7R/7S/QX1 # unknown offsets or values for DSC-HX90V/RX1RM2/RX10M2/RX100M4/WX500, ILCE-7RM2/7SM2 { Name => 'Tag2010a', # ad Condition => '$$self{Model} =~ /^NEX-5N$/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010a' }, },{ Name => 'Tag2010b', # 91, 93 Condition => '$$self{Model} =~ /^(SLT-A(65|77)V?|NEX-(7|VG20E)|Lunar)$/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010b' }, },{ Name => 'Tag2010c', # 94 Condition => '$$self{Model} =~ /^(SLT-A(37|57)|NEX-F3)$/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010c' }, },{ Name => 'Tag2010d', # 95, 98 Condition => q{ $$self{Model} =~ /^(DSC-(HX10V|HX20V|HX30V|HX200V|TX66|TX200V|TX300V|WX50|WX70|WX100|WX150))$/ and not $$self{Panorama} }, SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010d' }, },{ Name => 'Tag2010e', # 9a, 9b, 9c, 9d, 9e, a1, a2, a3, a4 Condition => q{ $$self{Model} =~ /^(SLT-A99V?|HV|SLT-A58|ILCE-(3000|3500)|NEX-(3N|5R|5T|6|VG900|VG30E)|DSC-(RX100|RX1|RX1R)|Stellar)$/ or ($$self{Model} =~ /^(DSC-(HX300|HX50V|TX30|WX60|WX80|WX200|WX300))$/ and not $$self{Panorama}) }, SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010e' }, },{ Name => 'Tag2010f', # ? Condition => '$$self{Model} =~ /^(DSC-(RX100M2|QX10|QX100))$/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010f' }, },{ Name => 'Tag2010g', # ? Condition => '$$self{Model} =~ /^(DSC-(QX30|RX10|RX100M3|HX60V|HX400V|WX220|WX350)|ILCE-(7(R|S|M2)?|[56]000|5100|QX1)|ILCA-77M2)\b/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010g' }, },{ Name => 'Tag2010h', # ? Condition => '$$self{Model} =~ /^(DSC-(RX1RM2|RX10M2|RX100M4|HX90V|WX500)|ILCE-7RM2|ILCE-7SM2)\b/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag2010h' }, },{ Name => 'Tag_0x2010', %unknownCipherData, }], 0x2011 => { #PH (A77, NEX-5N) Name => 'VignettingCorrection', Writable => 'int32u', PrintConv => { 0 => 'Off', 2 => 'Auto', 0xffffffff => 'n/a', # (RX100) }, }, 0x2012 => { #PH (A77, NEX-5N) Name => 'LateralChromaticAberration', Writable => 'int32u', PrintConv => { 0 => 'Off', 2 => 'Auto', 0xffffffff => 'n/a', # (RX100) }, }, 0x2013 => { #PH (A77, NEX-5N) ("Setting"; application of such correction is indicated in Tag9405 - ref JR) Name => 'DistortionCorrectionSetting', Writable => 'int32u', PrintConv => { 0 => 'Off', 2 => 'Auto', 0xffffffff => 'n/a', # (RX100) }, }, 0x2014 => { #JR/9 Name => 'WBShiftAB_GM', Writable => 'int32s', Count => 2, Notes => q{ 2 numbers: 1. positive is a shift toward amber, 2. positive is a shift toward magenta }, }, # 0x2015 - int16u: 65535, also for 'normal' HDR images; 0 for HDR-paint and high-contrast-BW effect images 0x2016 => { #PH (RX100) Name => 'AutoPortraitFramed', Writable => 'int16u', Notes => '"Yes" if this image was created by the Auto Portrait Framing feature', PrintConv => { 0 => 'No', 1 => 'Yes' }, }, # 0x2017 - int32u: flash mode. 0=off, 1=fired, 2=red-eye (PH, NEX-6) (also in A99, RX1, NEX-5R) 0x2017 => { #JR Name => 'FlashAction', Writable => 'int32u', PrintConv => { 0 => 'Did not fire', 1 => 'Flash Fired', 2 => 'External Flash Fired', }, }, # 0x2018 - something with external flash: seen 1 only when 0x2017 = 2 # 0x2019 - 0, also seen 1 for ILCE-7M2 # 0x201a - 0 or 1 0x201b => { #PH # FocusMode for SLT/HV/ILCA and NEX/ILCE; doesn't seem to apply to DSC models (always 0) Name => 'FocusMode', Condition => '$$self{Model} !~ /^DSC-/', Writable => 'int8u', Priority => 0, PrintConv => { 0 => 'Manual', 2 => 'AF-S', 3 => 'AF-C', 4 => 'AF-A', 6 => 'DMF', # "Direct Manual Focus" 7 => 'AF-D', # "Depth Map Assist Continuous AF" }, }, 0x201c => [ #JR # AFAreaModeSetting for SLT/HV/ILCA and NEX/ILCE; doesn't seem to apply to DSC models (always 0) # all DSLR/SLT/HV Wide Zone Spot Local # all NEX and ILCE-3000 Multi Center FlexibleSpot # ILCE-7 and newer Wide Zone Center FlexibleSpot # ILCA-77M2 and newer Wide Zone Center FlexibleSpot # (actual AFAreaMode used may be different as camera can override this under certain conditions) { Name => 'AFAreaModeSetting', Condition => '$$self{Model} =~ /^(SLT-|HV)/', Notes => 'SLT models', Writable => 'int8u', PrintConv => { 0 => 'Wide', 4 => 'Local', 8 => 'Zone', #PH 9 => 'Spot', }, },{ Name => 'AFAreaModeSetting', Condition => '$$self{Model} =~ /^(NEX-|ILCE-)/', Notes => 'NEX and ILCE models', Writable => 'int8u', PrintConv => { 0 => 'Multi', # all NEX and ILCE-3000/3500; all other ILCE use the name 'Wide' 1 => 'Center', 3 => 'Flexible Spot', 11 => 'Zone', # (NC) }, },{ Name => 'AFAreaModeSetting', Condition => '$$self{Model} =~ /^ILCA-/', Notes => 'ILCA models', Writable => 'int8u', PrintConv => { 0 => 'Wide', 4 => 'Flexible Spot', 8 => 'Zone', 9 => 'Center', 12 => 'Expanded Flexible Spot', # (NC, new mode in ILCA-77M2) }, }, ], 0x201d => { #JR # Flexible Spot position for NEX/ILCE, non-zero only when AFAreaMode='Flexible Spot' # observed values in range (0 0) to (640 480), with center (320 240) often seen # for NEX-5R/6, positions appear to be in an 11x9 grid Name => 'FlexibleSpotPosition', Condition => '$$self{Model} =~ /^(NEX-|ILCE-)/', Writable => 'int16u', Count => 2, Notes => q{ X and Y coordinages of the AF point. Valid only when AFAreaMode is Flexible Spot }, }, 0x201e => [{ #PH (A99) # AFPointSelected for SLT/HV/ILCA, non-zero only when AFAreaMode = 'Local' or 'Zone' # (NC) AFZoneSelected for NEX/ILCE, non-zero only when AFAreaMode = 'Zone' # doesn't seem to apply to DSC models (always 0) Name => 'AFPointSelected', Condition => '$$self{Model} =~ /^(SLT-|HV)/', Notes => 'SLT models', Writable => 'int8u', PrintConvColumns => 2, PrintConv => { 0 => 'Auto', # (NC) 1 => 'Center', 2 => 'Top', 3 => 'Upper-right', 4 => 'Right', 5 => 'Lower-right', 6 => 'Bottom', 7 => 'Lower-left', 8 => 'Left', 9 => 'Upper-left', 10 => 'Far Right', 11 => 'Far Left', 12 => 'Upper-middle', 13 => 'Near Right', 14 => 'Lower-middle', 15 => 'Near Left', 16 => 'Upper Far Right', 17 => 'Lower Far Right', 18 => 'Lower Far Left', 19 => 'Upper Far Left', }, },{ Name => 'AFPointSelected', Condition => '$$self{Model} =~ /^ILCA-/', Notes => 'ILCA models', Writable => 'int8u', ValueConv => '$val - 1', # to get the same numbers as from the BITMASK in 0x2020 ValueConvInv => '$val + 1', PrintConvColumns => 3, PrintConv => { -1 => 'Auto', %afPoints79, 39 => 'E6 (Center)', # (add " (Center)" to central point) }, },{ Name => 'AFZoneSelected', Condition => '$$self{Model} =~ /^(NEX-|ILCE-)/', Notes => 'NEX and ILCE models', Writable => 'int8u', PrintConv => { # ILCE-6000 allows to select 9 Zones, seen values 1, 4, 5, decoding not yet known 0 => 'n/a', 1 => 'Zone 1', 4 => 'Zone 4', 5 => 'Zone 5', }, }], # 0x201f - 0 0 0 0 for SLT and DSC; 4 values for NEX/ILCE with 4th value always 0: # possibly bits relating to the 25 AF-Contrast-areas ??? # 0x2020 - 10 values; for SLT/ILCA and NEX/ILCE with A-mount lens: relates to (phase-detect) AFPoints 0x2020 => [{ Name => 'AFPointsUsed', Condition => '$$self{Model} !~ /^(ILCA-|DSC-)/', # (doesn't seem to apply to DSC-models) Notes => 'SLT models, or NEX/ILCE with A-mount lenses', BitsPerWord => 8, BitsTotal => 80, Notes => 'SLT models only', PrintConvColumns => 2, PrintConv => { 0 => '(none)', BITMASK => { 0 => 'Center', 1 => 'Top', 2 => 'Upper-right', 3 => 'Right', 4 => 'Lower-right', 5 => 'Bottom', 6 => 'Lower-left', 7 => 'Left', 8 => 'Upper-left', 9 => 'Far Right', 10 => 'Far Left', 11 => 'Upper-middle', 12 => 'Near Right', 13 => 'Lower-middle', 14 => 'Near Left', 15 => 'Upper Far Right', 16 => 'Lower Far Right', 17 => 'Lower Far Left', 18 => 'Upper Far Left', }, }, },{ Name => 'AFPointsUsed', Condition => '$$self{Model} =~ /^ILCA-/', Notes => 'ILCA models', BitsPerWord => 8, BitsTotal => 80, PrintConv => { 0 => '(none)', BITMASK => { %afPoints79 }, }, }], # 0x2021 - 0 for DSC; 0, 1 or 2 for SLT/ILCA and NEX/ILCE: 1=Face, 2=object-tracking ? # 0x2022 - 13 bytes (104 bits) for SLT-A58/A99V, NEX-3N/5R/5T/6/VG30E/VG900, ILCE-3000/3500/5000/7/7R # 26 bytes (208 bits) for ILCA-77M2, ILCE-5100/6000/7M2/7S/QX1 (7M2 has 117, 5100/6000 have 179 PhaseAFPoints) # 52 bytes (416 bits) for ILCE-7RM2 (which has 399 PhaseAFPoints) and ILCE-7SM2 # Only seen non-zero values for ILCE-5100/6000/7M2/7RM2 in AF-C mode: maybe FocalPlaneAFPointsUsed ??? # (Similar number of bytes for contemporary DSC models, but mostly all non-zero values.) 0x2022 => [{ Name => 'FocalPlaneAFPointsUsed', Condition => '$$self{Model} =~ /^(ILCE-(5100|6000|7M2))/', Notes => 'On-sensor/focal-plane phase AF points for ILCE with hybrid AF', BitsPerWord => 8, BitsTotal => 208, # 26 words PrintConv => { 0 => '(none)', BITMASK => { }, }, },{ Name => 'FocalPlaneAFPointsUsed', Condition => '$$self{Model} =~ /^ILCE-7RM2/', BitsPerWord => 8, BitsTotal => 416, # 52 words PrintConv => { 0 => '(none)', BITMASK => { }, }, }], # 0x2023 - 0 # 0x2025 - n1 n2 0 0 DSC-RX100M3/RX100M4/RX10M2/HX90V/WX500, ILCA-77M2, ILCE-5100/7M2/7RM2/7S/QX1 # seen n1=0,2,4,5,7 and n2=0,1,3, very often: 7 3 0 0 # 0x2026 - seen from ILCE-7RM2 onwards, 2 values corresonding to 0x2014 WBShiftAB_GM # e.g. (0 4000), (2000 2000), (0 -1000) corresponding to 0x2014 values of (0 4), (2 2), (0 -1) # probably related to more precise WB setting option of ILCE-7RM2. 0x2026 => { #JR Name => 'WBShiftAB_GM_Precise', Writable => 'int32s', Count => 2, Notes => q{ 2 numbers: 1. positive is a shift toward amber, 2. positive is a shift toward magenta (tbc) }, # t.b.d. apply scaling to same values as 0x2014 ??? # PrintConv => 'my @v=split(" ",$val); $_/=1000 foreach @v; sprintf("%.3f %.3f",$v[0],$v[1])', }, # 0x2027 - W H W/2 H/2 DSC-HX90V/RX1RM2/RX10M2/RX100M4/WX500, ILCE-7RM2/7SM2 # or W H val1 val2 # or 0 0 0 0 # 0x2028 - 0 0 for DSC-RX100M4/RX10M2, ILCE-7RM2/7SM2; seen non-zero values only for DSC-RX1RM2 0x2028 => { #JR Name => 'VariableLowPassFilter', Format => 'int32u', PrintConv => { 0x00000 => 'n/a', 0x00001 => 'Off', 0x10001 => 'Standard', 0x20001 => 'High', }, }, 0x3000 => { Name => 'ShotInfo', SubDirectory => { TagTable => 'Image::ExifTool::Sony::ShotInfo' }, }, # 0x3000: data block that includes DateTimeOriginal string # # at least some data for tags 0x2010, 0x9050 and 0x94xx is encrypted - PH # (This is certainly true for at least parts of 0x2010, 0x9050, 0x9400, 0x9402 and 0x9403, # but hasn't been verified for other tags -- just to be thorough, decipher all of them) # Note: "(e)" in a comment indicates an enciphered value, all other values are deciphered # # 0x900b - 1st byte 0xae: face detection info for A450/500/550/560/580, A33/35/55, NEX-3/5/5C/C3/VG10 # - other 1st byte values for some DSC-models # - seen many 1,8,27,64... values: assume encrypted like other 9xxx tags 0x900b => { Name => 'Tag900b', Condition => '$$valPt =~ /^\xae/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag900b' }, }, 0x9050 => { Name => 'Tag9050', # 944 bytes for A37, A57, A99, NEX-F3, NEX-5R, NEX-6, DSC-RX1, DSC-RX100 # 3072 bytes for A65, A77, NEX-5N, NEX-7, NEX-VG20 (ref JR) SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9050', ByteOrder => 'LittleEndian', }, }, 0x9400 => [ # first byte: # 0x07 (e) for DSC-HX7V/HX9V/HX100V/TX10/TX100/TX100V/WX7/WX9/WX10, HDR-CX../PJ.. # 0x09 (e) for DSC-TX20/TX55/WX30 # 0x0a (e) for SLT-A37/A57/A65V/A77V/A99V, NEX-F3/5N/5R/5T/6/7/VG20E, DSC-RX100/RX1/RX1R/HX10V/HX20V/HX30V/HX200V/TX200V/TX300V/TX66/WX50/WX100/WX150, Lunar/Stellar/HV # 0x0c (e) for ILCE-3000/3500, NEX-3N, SLT-A58, DSC-HX50V/HX300/RX100M2/TX30/WX60/WX80/WX200/WX300, DSC-QX10/QX100 # 0xd0 (e) H90, W650, W690: tag9400 decoding appears not valid/different # 0x23 (e) for DSC-RX10/HX60V/HX400V/WX220/WX350, ILCE-7/7R/5000/6000, ILCA-77M2 # 0x24 (e) for ILCE-5100/7M2/7RM2/7S/7SM2/QX1, DSC-HX90V/QX30/RX100M3/RX100M4/RX10M2/RX1RM2/WX500 # first byte decoded: 40, 204, 202, 27, 58, 62, 48 respectively { Name => 'Tag9400a', Condition => q{ $$valPt =~ /^[\x07\x09\x0a]/ or ($$valPt =~ /^[\x5e\xe7\x04]/ and $$self{DoubleCipher} = 1) }, SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9400a' }, },{ Name => 'Tag9400b', Condition => '$$valPt =~ /^\x0c/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9400b' }, },{ Name => 'Tag9400c', Condition => '$$valPt =~ /^[\x23\x24]/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9400c' }, },{ Name => 'Sony_0x9400', %unknownCipherData, }], 0x9401 => { Name => 'Sony_0x9401', %unknownCipherData, # notes for data in this block (ref PH/JR): # 0x02-0x03 appear to have some relation to start-offset of data... # 0x00 - 0x03 Metering # Mode # f4 00 00 03 - - DSC-H90/W650/W690 # cf 0b 9f 0f 0x09bc (a) DSC-WX9 # 1c 00 ac 0f 0x09c9 (b) HDR-CX130E/CX160E/CX360E/CX560E/CX700E/PJ10E/PJ30E # b7 0f f7 0f 0x09dd (c) DSC-HX7V/TX10/WX7/WX10 # b7 0f fa 0f 0x09e0 (d) DSC-HX9V/HX100V/TX100/TX100V # 27 00 fd 0f 0x09e7 (e) DSC-TX20/TX55/WX30 # 69 1f ff 0f 0x09e9 (f) NEX-5N # 21 2b cf 0f 0x09e9 (f) NEX-7/VG20E, SLT-A65V/A77V, Lunar # 2d 00 d5 0d 0x09a2 (g) DSC-HX10V/HX20V/HX30V/HX200V/TX66/TX200V/TX300V/WX50/WX70/WX100/WX150 # 2f 00 d6 0d 0x09a3 (h) NEX-F3, SLT-A37/A57 # 30 00 d8 0d 0x09a5 (i) HDR-AS15 # 32 00 e2 0d 0x09ac (j) DSC-RX100, Stellar # 33 00 e2 0d 0x09ac (j) NEX-5R/5T/6, NEX-VG900/VG30E # 33 50 e2 0d 0x09ac (j) SLT-A99V, HV # 33 40 0d 0e 0x09d7 (k) DSC-RX1 v0.01 # 33 41 0d 0e 0x09d7 (k) DSC-RX1, DSC-RX1R # 38 00 32 0e 0x09fc (l) SLT-A58, ILCE-3000/3500, NEX-3N, DSC-HX300/HX50V/WX200/WX300/WX60/WX80/TX30 # 3a 10 3a 0e 0x0a01 (m) DSC-QX10/QX100 # 3a 20 47 0e 0x0a01 (m) DSC-RX100M2 # 43 00 66 0e 0x0a1b (n) ILCE-7/7R v0.xx/v1.00/v1.01, ILCE-5000, DSC-RX10 # 43 10 66 0e 0x0a1b (n) ILCE-7/7R v1.02/v1.10 # 43 30 6c 0e 0x0a1b (n) ILCE-7/7R v1.20/v2.00 # 44 00 9c 0e 0x0a39 (o) ILCE-6000 v1.00/v1.10, DSC-HX60V/HX400V/WX220/WX350 (also DSC-QX30 samples from sony.net) # 49 00 b0 0e 0x0a3b (p) ILCA-77M2 V1.00/v1.01/v2.00 (also DSC-RX100M3 samples from sony.net) # 4a 00 b3 0e 0x0a3d (q) ILCE-7S v1.00, ILCE-5100 v1.00/v1.10, ILCE-QX1, DSC-QX30/RX100M3 # 4a 20 b9 0e 0x0a3d (q) ILCE-7S v1.20/v2.00 # 4e 10 d0 0e 0x0a5a (r) ILCE-7M2 v1.00/v1.10 # 4e 30 d6 0e 0x0a5a (r) ILCE-7M2 v1.20/v1.21/v2.00 # 5a 00 14 0f 0x0a85 (s) DSC-HX90V/WX500 # 5d 00 56 0f 0x0ac7 (t) DSC-RX10M2/RX100M4, ILCE-7RM2/7SM2 v1.00/v1.10/v2.00 (also DSC-RX1RM2 samples from Sony) # 5d 1d 58 0f 0x0ac7 (t) ILCE-7RM2 v3.00 # 5d 1e 57 0f 0x0ac7 (t) DSC-RX1RM2 v1.00 # # 0x0004 - (RX100: 0 or 1. subsequent data valid only if 1 - PH) # 0x0007 => { # Name => 'DynamicRangeOptimizer_9401', # PrintConv => { # 0 => 'Disabled', # seen for Panorama images # 1 => 'Auto', # 3 => 'Lv1', #NC # 4 => 'Lv2', #NC # 5 => 'Lv3', # 6 => 'Lv4', # 7 => 'Lv5', # # 8 - seen for VG20E and some other models - PH # 255 => 'Off', # }, # }, }, 0x9402 => [{ Name => 'Tag9402', # first 2 bytes deciphered: # 0x00 0x00 SLT-A37/A57/A65/A77 # 0x0e 0x00 DSC-H90/HX7V/HX9V/HX100V/TX10/TX100/TX100V/TX20/TX55/W650/W690/W730/WX10/WX30/WX7/WX9, but also seen: # 0x0e 0x01 for a few DSC-W650/W690 samples ... # 0x0f 0x01 NEX-5N/7/VG20, Lunar # 0x10 0x01 DSC-HX10V/HX200V/HX20V/HX300/HX30V/HX50V/TX200V/TX30/TX300V/TX66/RX100/RX1/RX1R/WX100/WX150/WX200/WX300/WX50/WX60/WX70/WX80, Stellar, # ILCE-3000/3500, NEX-F3/3N/5R/5T/6/VG30/VG900 # 0x11 0x01 DSC-RX100M2/QX10/QX100 # 0x13 0x01 ILCE-5000/7/7R, DSC-RX10, but also seen: # 0x12 0x01 for ILCE-7/7R and DSC-RX10 samples from Sony.net ... # 0x15 0x01 for a few ILCE-7/7R ... # 0x14 0x01 ILCE-6000, DSC-HX60V/HX400V/WX220/WX350 # 0x17 0x01 ILCE-7S/7M2/5100/QX1, DSC-QX30/RX100M3 # 0x19 0x01 DSC-HX90V/RX1RM2/RX10M2/RX100M4/WX500, ILCE-7RM2/7SM2 # var var SLT-A58/A99V, HV, ILCA-77M2 # only valid when first byte 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x17, 0x19 (enciphered 0x8a, 0x70, 0xb6, 0x69, 0x88, 0x20, 0x30, 0xd7, 0xbb) Condition => '$$self{DoubleCipher} ? $$valPt =~ /^[\x7e\x46\x1d\x18\x3a\x95\x24\x26\xd6]\x01/ : $$valPt =~ /^[\x8a\x70\xb6\x69\x88\x20\x30\xd7\xbb]\x01/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9402' }, },{ Name => 'Sony_0x9402', %unknownCipherData, }], 0x9403 => { Name => 'Tag9403', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9403' }, }, # 0x9404 first 5 bytes (deciphered): # 4 0 163 1 2 SLT-A65V/A77V, NEX-5N/7, Lunar, DSC-HX7V/HX9V/HX100V/TX10/TX20/TX55/TX100/TX100V/WX9/WX10/WX30... # 5 0 172 1 2 DSC-HX10V/HX200V/HX20V/HX30V/TX66/TX200V/TX300V/WX50/WX70/WX100/WX150... # 9 0 38 2 2 SLT-A37/A57/A99V, NEX-5R/5T/6/F3/VG30E/VG900, DSC-RX1/RX1R/RX100, Stellar # 12 0 8 2 2 SLT-A58, NEX-3N, ILCE-3000/3500, DSC-HX300/HX50V/WX60/WX80/WX300/TX30... # 13 0 9 2 2 DSC-QX10/QX100/RX100M2 # 15 0 35 2 2 ILCA-77M2, ILCE-5000/5100/6000/7/7R/7S/7M2/QX1, DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350 # 16 0 85 2 2 DSC-HX90V/WX500 # 17 0 232 1 2 DSC-RX1RM2/RX10M2/RX100M4, ILCE-7RM2/7SM2 # other values for Panorama images and several other models 0x9404 => [{ Name => 'Tag9404a', # first byte must be 4 or 5 and 4th byte must be 1 (deciphered) Condition => '$$valPt =~ /^[\x40\x7d]..\x01/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9404a' }, },{ Name => 'Tag9404b', # first byte must be 9 or 12 or 13 or 15 or 16 and 4th byte must be 2 (deciphered) Condition => '$$valPt =~ /^[\xe7\xea\xcd\x8a\x70]..\x08/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9404b' }, },{ Name => 'Sony_0x9404', %unknownCipherData, }], # 0x9405 first 2 bytes: # 0 0 (0x00 = 0 0 enc.) DSC-H90 # 2 0 (0x08 = 8 0 enc.) DSC and HDR of HX9V generation # 3 0 (0x1b = 27 0 enc.) SLT, NEX, ILCE-3000/3500, DSC-RX100/RX1 + other DSC of same generation, also QX10 and QX100 # 4 0 (0x40 = 64 0 enc.) DSC-RX1R # 5 0 (0x7d = 125 0 enc.) DSC-RX100M2 # 136 var (0x3a = 58 var enc.) ILCE-7/7R/5000/6000, DSC-HX400V/HX60V/RX10/WX220/WX350 # 137 var (0xb3 = 179 var enc.) ILCA-77M2, DSC-RX100M3 - appears to go with 136 # 138 var (0x7e = 126 var enc.) ILCE-7S/5100/QX1, DSC-QX30 - appears to go with 136 # 139 var (0x9a = 154 var enc.) ILCE-7M2 # 142 var (0x25 = 37 var enc.) DSC-HX90V/RX1RM2/RX10M2/RX100M4/WX500, ILCE-7RM2/7SM2 0x9405 => [{ Name => 'Tag9405a', # first byte must be 0x1b or 0x40 or 0x7d Condition => '$$valPt =~ /^[\x1b\x40\x7d]/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9405a' }, },{ Name => 'Tag9405b', # first byte must be 0x3a, 0xb3, 0x7e, 0x9a or 0x25 Condition => '$$valPt =~ /^[\x3a\xb3\x7e\x9a\x25]/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9405b' }, },{ Name => 'Sony_0x9405', %unknownCipherData, }], 0x9406 => [{ Name => 'Tag9406', # - first byte must be 0x01 or 0x02 (enciphered 0x01 or 0x08), or 0x03 (enc. 0x1b) for ILCE-7RM2/7SM2, and # third byte must be 0x02 or 0x03 (enciphered 0x08 or 0x1b) - ref JR # (applies to most SLT and NEX models, but no DSC models) Condition => '$$valPt =~ /^[\x01\x08\x1b].[\x08\x1b]/s', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag9406' }, },{ Name => 'Sony_0x9406', %unknownCipherData, }], 0x9407 => { Name => 'Sony_0x9407', %unknownCipherData, }, 0x9408 => { Name => 'Sony_0x9408', %unknownCipherData, }, 0x9409 => { Name => 'Sony_0x9409', %unknownCipherData, }, 0x940a => [{ Name => 'Tag940a', Condition => '$$self{Model} =~ /^(SLT-|HV)/', # but appears not valid for ILCA-77M2 ... SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag940a' }, },{ Name => 'Sony_0x940a', %unknownCipherData, }], 0x940b => { Name => 'Sony_0x940b', %unknownCipherData, }, 0x940c => [{ Name => 'Tag940c', Condition => '$$self{Model} =~ /^(NEX-|ILCE-|Lunar)\b/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag940c' }, },{ Name => 'Sony_0x940c', %unknownCipherData, }], 0x940d => { Name => 'Sony_0x940d', %unknownCipherData, }, # 0x940e: 2nd byte = 0: no AFInfo, default for NEX/ILCE # 2nd byte = 1: AFInfo for SLT/ILCA models (but also seen 1 for DSC-HX20W/HX300/WX70 ...) # 2nd byte = 2: AFInfo for NEX/ILCE with LA-EA2/EA4 Phase-detect AF Adapter 0x940e => [{ Name => 'AFInfo', Condition => '$$self{Model} =~ /^(SLT-|HV|ILCA-77M2)/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::AFInfo' }, },{ Name => 'Tag940e', Condition => '$$self{Model} =~ /^(NEX-|ILCE-|Lunar)/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Tag940e' }, },{ Name => 'Sony_0x940e', %unknownCipherData, }], 0x940f => { Name => 'Sony_0x940f', %unknownCipherData, }, 0x9411 => { Name => 'Sony_0x9411', %unknownCipherData, # 0x02 - int32u?: 1,3,5,7,9 (A77) }, 0xb000 => { #8 Name => 'FileFormat', Writable => 'int8u', Count => 4, # dynamically set the file type to SR2 because we could have assumed ARW up till now RawConv => q{ $self->OverrideFileType($$self{TIFF_TYPE} = 'SR2') if $val eq '1 0 0 0'; return $val; }, PrintConvColumns => 2, PrintConv => { '0 0 0 2' => 'JPEG', '1 0 0 0' => 'SR2', '2 0 0 0' => 'ARW 1.0', '3 0 0 0' => 'ARW 2.0', '3 1 0 0' => 'ARW 2.1', '3 2 0 0' => 'ARW 2.2', #PH (NEX-5) '3 3 0 0' => 'ARW 2.3', #PH (SLT-A65,SLT-A77) '3 3 1 0' => 'ARW 2.3.1', #PH/JR (DSC-RX1R/RX100M2) '3 3 2 0' => 'ARW 2.3.2', #JR (DSC-RX1RM2,ILCE-7SM2 - support for uncompressed 14-bit RAW) # what about cRAW images? }, }, 0xb001 => { # ref http://forums.dpreview.com/forums/read.asp?forum=1037&message=33609644 # (ARW and SR2 images only until the SLT-A65V started writing them to JPEG too) Name => 'SonyModelID', Writable => 'int16u', PrintConvColumns => 2, PrintConv => { 2 => 'DSC-R1', 256 => 'DSLR-A100', 257 => 'DSLR-A900', 258 => 'DSLR-A700', 259 => 'DSLR-A200', 260 => 'DSLR-A350', 261 => 'DSLR-A300', 262 => 'DSLR-A900 (APS-C mode)', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3994.0.html 263 => 'DSLR-A380/A390', #PH (A390) 264 => 'DSLR-A330', 265 => 'DSLR-A230', 266 => 'DSLR-A290', #PH 269 => 'DSLR-A850', 270 => 'DSLR-A850 (APS-C mode)', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3994.0.html 273 => 'DSLR-A550', 274 => 'DSLR-A500', #PH 275 => 'DSLR-A450', #http://dev.exiv2.org/issues/show/0000611 278 => 'NEX-5', #PH 279 => 'NEX-3', #PH 280 => 'SLT-A33', #PH 281 => 'SLT-A55 / SLT-A55V', #PH (A55 NC) 282 => 'DSLR-A560', #PH 283 => 'DSLR-A580', #http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,2881.0.html 284 => 'NEX-C3', #PH 285 => 'SLT-A35', #JR 286 => 'SLT-A65 / SLT-A65V', #PH 287 => 'SLT-A77 / SLT-A77V', #PH 288 => 'NEX-5N', #PH 289 => 'NEX-7', #PH (also Hasselblad Lunar, ref JR) 290 => 'NEX-VG20E', #JR 291 => 'SLT-A37', #JR 292 => 'SLT-A57', #JR 293 => 'NEX-F3', #PH 294 => 'SLT-A99 / SLT-A99V', #JR (also Hasselblad HV) 295 => 'NEX-6', #JR 296 => 'NEX-5R', #JR 297 => 'DSC-RX100', #PH (also Hasselblad Stellar, ref JR) 298 => 'DSC-RX1', #JR 299 => 'NEX-VG900', #JR 300 => 'NEX-VG30E', #JR 302 => 'ILCE-3000 / ILCE-3500', #JR 303 => 'SLT-A58', #JR 305 => 'NEX-3N', #PH 306 => 'ILCE-7', #JR 307 => 'NEX-5T', #JR 308 => 'DSC-RX100M2', #JR 309 => 'DSC-RX10', #JR 310 => 'DSC-RX1R', #JR 311 => 'ILCE-7R', #JR 312 => 'ILCE-6000', #JR 313 => 'ILCE-5000', #JR 317 => 'DSC-RX100M3', #JR 318 => 'ILCE-7S', #JR 319 => 'ILCA-77M2', #14 339 => 'ILCE-5100', #JR 340 => 'ILCE-7M2', #JR 341 => 'DSC-RX100M4', #PH 342 => 'DSC-RX10M2', #JR 344 => 'DSC-RX1RM2', #JR 346 => 'ILCE-QX1', #14 347 => 'ILCE-7RM2', #JR 350 => 'ILCE-7SM2', #JR }, }, 0xb020 => { #2 Name => 'CreativeStyle', Writable => 'string', # (all of these values have been observed, ref JR and PH) # - this PrintConv is included to make these strings consistent with # other CreativeStyle tags, and to facilitate the language translations # - these values are always English, regardless of the camera language settings PrintConv => { OTHER => sub { shift }, # pass other values straight through None => 'None', AdobeRGB => 'Adobe RGB', Real => 'Real', Standard => 'Standard', Vivid => 'Vivid', Portrait => 'Portrait', Landscape => 'Landscape', Sunset => 'Sunset', Nightview => 'Night View/Portrait', BW => 'B&W', Neutral => 'Neutral', Clear => 'Clear', Deep => 'Deep', Light => 'Light', Autumnleaves=> 'Autumn Leaves', Sepia => 'Sepia', }, }, 0xb021 => { #2 Name => 'ColorTemperature', Writable => 'int32u', PrintConv => '$val ? ($val==0xffffffff ? "n/a" : $val) : "Auto"', PrintConvInv => '$val=~/Auto/i ? 0 : ($val eq "n/a" ? 0xffffffff : $val)', }, 0xb022 => { #7 Name => 'ColorCompensationFilter', Format => 'int32s', Writable => 'int32u', # (written incorrectly as unsigned by Sony) Notes => 'negative is green, positive is magenta', }, 0xb023 => { #PH (A100) - (set by mode dial) Name => 'SceneMode', Writable => 'int32u', PrintConvColumns => 2, PrintConv => \%Image::ExifTool::Minolta::minoltaSceneMode, }, 0xb024 => { #PH (A100) Name => 'ZoneMatching', Writable => 'int32u', PrintConv => { 0 => 'ISO Setting Used', 1 => 'High Key', 2 => 'Low Key', }, }, 0xb025 => { #PH (A100) Name => 'DynamicRangeOptimizer', Writable => 'int32u', PrintConvColumns => 2, PrintConv => { 0 => 'Off', 1 => 'Standard', 2 => 'Advanced Auto', 3 => 'Auto', # (A550) 8 => 'Advanced Lv1', #JD 9 => 'Advanced Lv2', #JD 10 => 'Advanced Lv3', #JD 11 => 'Advanced Lv4', #JD 12 => 'Advanced Lv5', #JD 16 => 'Lv1', # (NEX-5) 17 => 'Lv2', 18 => 'Lv3', 19 => 'Lv4', 20 => 'Lv5', }, }, 0xb026 => { #PH (A100) Name => 'ImageStabilization', Writable => 'int32u', PrintConv => { 0 => 'Off', 1 => 'On', 0xffffffff => 'n/a', # (HX9V sweep panorama, ref JR) }, }, 0xb027 => { #2 Name => 'LensType', Writable => 'int32u', SeparateTable => 1, # set to 65535 for E-mount lenses (values 0x80xx) ValueConvInv => '($val & 0xff00) == 0x8000 ? 65535 : int($val)', PrintConv => \%sonyLensTypes, }, 0xb028 => { #2 # (used by the DSLR-A100) Name => 'MinoltaMakerNote', # must check for zero since apparently a value of zero indicates the IFD doesn't exist # (dumb Sony -- they shouldn't write this tag if the IFD is missing!) Condition => '$$valPt ne "\0\0\0\0"', Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Minolta::Main', Start => '$val', }, }, 0xb029 => { #2 (set by creative style menu) Name => 'ColorMode', Writable => 'int32u', PrintConvColumns => 2, PrintConv => \%Image::ExifTool::Minolta::sonyColorMode, }, 0xb02a => { Name => 'LensSpec', Format => 'undef', Writable => 'int8u', Count => 8, Notes => q{ like LensInfo, but also specifies lens features: DT, E, ZA, G, SSM, SAM, OSS, STF, Reflex, Macro and Fisheye }, ValueConv => \&ConvLensSpec, ValueConvInv => \&ConvInvLensSpec, PrintConv => \&PrintLensSpec, PrintConvInv => \&PrintInvLensSpec, }, 0xb02b => { #PH (A550 JPEG and A200, A230, A300, A350, A380, A700 and A900 ARW) Name => 'FullImageSize', Writable => 'int32u', Count => 2, # values stored height first, so swap to get "width height" ValueConv => 'join(" ", reverse split(" ", $val))', ValueConvInv => 'join(" ", reverse split(" ", $val))', PrintConv => '$val =~ tr/ /x/; $val', PrintConvInv => '$val =~ tr/x/ /; $val', }, 0xb02c => { #PH (A550 JPEG and A200, A230, A300, A350, A380, A700 and A900 ARW) Name => 'PreviewImageSize', Writable => 'int32u', Count => 2, ValueConv => 'join(" ", reverse split(" ", $val))', ValueConvInv => 'join(" ", reverse split(" ", $val))', PrintConv => '$val =~ tr/ /x/; $val', PrintConvInv => '$val =~ tr/x/ /; $val', }, 0xb040 => { #2 Name => 'Macro', Writable => 'int16u', RawConv => '$val == 65535 ? undef : $val', PrintConv => { 0 => 'Off', 1 => 'On', 2 => 'Close Focus', #9 65535 => 'n/a', #PH (A100) }, }, 0xb041 => { #2 Name => 'ExposureMode', Writable => 'int16u', RawConv => '$val == 65535 ? undef : $val', PrintConvColumns => 2, PrintConv => { 0 => 'Program AE', # (RX100 'Program','Sunset' - PH) 1 => 'Portrait', #PH (HX1) 2 => 'Beach', #9 3 => 'Sports', #9 4 => 'Snow', #9 5 => 'Landscape', 6 => 'Auto', # (RX100 'Intelligent Auto' - PH) 7 => 'Aperture-priority AE', 8 => 'Shutter speed priority AE', 9 => 'Night Scene / Twilight',#2/9 10 => 'Hi-Speed Shutter', #9 11 => 'Twilight Portrait', #9 (RX100 'Night Portrait' - PH) 12 => 'Soft Snap/Portrait', #9 (TX7 'Soft Snap'; RX100/A37 'Portrait' but manuals say "reproduces soft skin tone" - PH) 13 => 'Fireworks', #9 14 => 'Smile Shutter', #9 (T200) 15 => 'Manual', 18 => 'High Sensitivity', #9 19 => 'Macro', #JR 20 => 'Advanced Sports Shooting', #9 29 => 'Underwater', #9 # 30 seen for DSC-W110 and W390, maybe something with Face or Portrait ?? 33 => 'Food', #9 34 => 'Sweep Panorama', #PH (HX1) 35 => 'Handheld Night Shot', #PH (HX1/TX1, also called "Hand-held Twilight") 36 => 'Anti Motion Blur', #PH (TX1) 37 => 'Pet', #9 38 => 'Backlight Correction HDR', #9 39 => 'Superior Auto', #9 40 => 'Background Defocus', #PH (HX20V) 41 => 'Soft Skin', #JR (HX9V) (HX200V Portrait - PH) 42 => '3D Image', #JR (HX9V) # 50 seen for DSC-W530 65535 => 'n/a', #PH (A100) }, }, 0xb042 => { #9 Name => 'FocusMode', # Only FocusMode for older DSC models; # Newest DSC models give only 0, many models of 'HX9V generation' give only 4 - # these models give FocusMode in tag 0xb04e, and are excluded here. Condition => q{ ($$self{TagB042} = Get16u($valPt, 0)) and (not $$self{MetaVersion} or $$self{MetaVersion} ne 'DC7303320222000') }, Notes => 'not valid for all models', Writable => 'int16u', RawConv => '$val == 65535 ? undef : $val', PrintConv => { # 0 - seen this for panorama shot 1 => 'AF-S', # (called Single-AF by Sony) 2 => 'AF-C', # (called Monitor-AF by Sony) 4 => 'Permanent-AF', # (TX7,HX9V?) 65535 => 'n/a', #PH (A100), also for DSC-W690 panorama shots }, }, 0xb043 => [{ #9 Name => 'AFAreaMode', # AFAreaMode only for older models; # exclude newest DSC models, which give AFAreaMode in Tag9402 0x0017 (eg. RX100 - PH) Writable => 'int16u', Condition => 'not $$self{MetaVersion} or $$self{MetaVersion} ne "DC7303320222000"', #JR RawConv => '$val == 65535 ? undef : $val', Notes => 'older models', PrintConv => { # 0 - (takes this value after camera reset, but can't be set back once changed) 0 => 'Default', 1 => 'Multi', 2 => 'Center', 3 => 'Spot', 4 => 'Flexible Spot', # (T200) 6 => 'Touch', 14 => 'Tracking', #JR (HX9V) ("Manual" for the T200?, ref 9) 15 => 'Face Tracking', # (not set when in face detect mode and no faces detected) 65535 => 'n/a', #PH (A100) }, },{ #JR Name => 'AFAreaMode', # AFAreaMode for DSC-HX9V generation, having values that appear to be different from older models. Writable => 'int16u', Condition => '$$self{TagB042} and $$self{TagB042} != 0', Notes => 'DSC-HX9V generation cameras', PrintConv => { 0 => 'Multi', 1 => 'Center', 2 => 'Spot', # (NC) seen for DSC-WX9 3 => 'Flexible Spot', 10 => 'Selective (for Miniature effect)', # seen for Miniature effect of DSC-WX30 14 => 'Tracking', 15 => 'Face Tracking', 255 => 'Manual', }, }], 0xb044 => { #9 Name => 'AFIlluminator', Writable => 'int16u', RawConv => '$val == 65535 ? undef : $val', PrintConv => { 0 => 'Off', 1 => 'Auto', 65535 => 'n/a', #PH (A100) }, }, # 0xb045 - int16u: 0 # 0xb046 - int16u: 0 0xb047 => { #2 Name => 'JPEGQuality', Writable => 'int16u', RawConv => '$val == 65535 ? undef : $val', PrintConv => { 0 => 'Standard', 1 => 'Fine', 2 => 'Extra Fine', #JR 65535 => 'n/a', #PH (A100) }, }, 0xb048 => { #9 Name => 'FlashLevel', #JR other name, but values -9 to 9 match FlashExposureCompensation Writable => 'int16s', RawConv => '($val == -1 and $$self{Model} =~ /DSLR-A100\b/) ? undef : $val', PrintConv => { -32768 => 'Low', -9 => '-9/3', #JR -6 => '-6/3', #JR -5 => '-5/3', #JR -4 => '-4/3', #JR -3 => '-3/3', -2 => '-2/3', -1 => '-1/3', # (for the A100, -1 is effectively 'n/a' - PH) 0 => 'Normal', 1 => '+1/3', 2 => '+2/3', 3 => '+3/3', 4 => '+4/3', #JR (NC) 5 => '+5/3', #JR (NC) 6 => '+6/3', #JR 128 => 'n/a', #JR (HX9V) 32767 => 'High', }, }, 0xb049 => { #9 Name => 'ReleaseMode', Writable => 'int16u', RawConv => '$val == 65535 ? undef : $val', PrintConv => { 0 => 'Normal', # (ie. shutter button) 2 => 'Continuous', 5 => 'Exposure Bracketing', 6 => 'White Balance Bracketing', # (HX5) 65535 => 'n/a', #PH (A100) }, }, 0xb04a => { #9 Name => 'SequenceNumber', Notes => 'shot number in continuous burst', Writable => 'int16u', RawConv => '$val == 65535 ? undef : $val', PrintConv => { 0 => 'Single', 65535 => 'n/a', #PH (A100) OTHER => sub { shift }, # pass all other numbers straight through }, }, 0xb04b => { #2/PH Name => 'Anti-Blur', Writable => 'int16u', RawConv => '$val == 65535 ? undef : $val', PrintConv => { 0 => 'Off', 1 => 'On (Continuous)', #PH (NC) 2 => 'On (Shooting)', #PH (NC) 65535 => 'n/a', }, }, # 0xb04c - rational64u: 10/10 (seen 5 for HX9V Manual-exposure images, ref JR) # 0xb04d - int16u: 0 # (the Kamisaka decoding of 0xb04e seems wrong - ref JR) # 0xb04e => { #2 # Name => 'LongExposureNoiseReduction', # Notes => 'LongExposureNoiseReduction for other models', # Writable => 'int16u', # RawConv => '$val == 65535 ? undef : $val', # PrintConv => { # 0 => 'Off', # 1 => 'On', # 2 => 'On 2', #PH (TX10, TX100, WX9, WX10, etc) # # 4 - seen this (CX360E, CX700E) # 65535 => 'n/a', #PH (A100) # }, # }, 0xb04e => { #PH (RX100) - but not in RX100M3 anymore (ref JR) Name => 'FocusMode', Condition => '$$self{MetaVersion} and $$self{MetaVersion} eq "DC7303320222000"', #JR Notes => 'valid for DSC-HX9V generation and newer', Writable => 'int16u', PrintConv => { 0 => 'Manual', # 1 - seen for DSC-WX7 burst, HDR-CX130E/CX560E 2 => 'AF-S', 3 => 'AF-C', # 4 - seen for HDR-CX360E/CX700E 5 => 'Semi-manual', #JR (HX9V) 6 => 'DMF', # "Direct Manual Focus" }, }, 0xb04f => { #PH (TX1) Name => 'DynamicRangeOptimizer', Writable => 'int16u', Priority => 0, # (unreliable for the A77) PrintConv => { 0 => 'Off', 1 => 'Standard', 2 => 'Plus', # 8 for HDR models - what does this mean? }, }, 0xb050 => { #PH (RX100) Name => 'HighISONoiseReduction2', Condition => '$$self{Model} =~ /^(DSC-|Stellar)/', Notes => 'DSC models only', Writable => 'int16u', PrintConv => { 0 => 'Normal', 1 => 'High', 2 => 'Low', 3 => 'Off', #JR # it seems that all SLT and NEX models give n/a here (ref JR) 65535 => 'n/a', }, }, # 0xb051 - int16u: 0 0xb052 => { #PH (TX1) Name => 'IntelligentAuto', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On', 2 => 'Advanced', #9 }, }, # 0xb053 - int16u: normally 0, but got 1 for a superior auto backlight picture (RX100) 0xb054 => { #PH/9/JR (TX1,TX7,RX100,HX9V) Name => 'WhiteBalance', Writable => 'int16u', Notes => q{ decoding of the Fluorescent settings matches the EXIF standard, which is different than the names used by Sony for some models }, PrintConv => { 0 => 'Auto', 4 => 'Custom', # (manual) 5 => 'Daylight', 6 => 'Cloudy', # PrintConv names matching Exif Fluorescent LightSource names (ref JR) # (Sony uses conflicting names for some models) 7 => 'Cool White Fluorescent', # (RX100) (TX7/HX9V "Fluorescent 1 (White)", ref 9/JR) 8 => 'Day White Fluorescent', # (RX100) (TX7/HX9V "Fluorescent 2 (Natural White)", ref 9/JR) 9 => 'Daylight Fluorescent', # (RX100) (TX7/HX9V "Fluorescent 3 (Day White)", ref 9/JR) 10 => 'Incandescent2', #JR (HX9V) 11 => 'Warm White Fluorescent', 14 => 'Incandescent', 15 => 'Flash', 17 => 'Underwater 1 (Blue Water)', #9 18 => 'Underwater 2 (Green Water)', #9 19 => 'Underwater Auto', #JR }, }, ); # "SEMC MS" maker notes %Image::ExifTool::Sony::Ericsson = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, NOTES => 'Maker notes found in images from some Sony Ericsson phones.', 0x2000 => { Name => 'MakerNoteVersion', Writable => 'undef', Count => 4, }, 0x201 => { Name => 'PreviewImageStart', IsOffset => 1, MakerPreview => 1, # force preview inside maker notes OffsetPair => 0x202, DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, Notes => 'a small 320x200 preview image', }, 0x202 => { Name => 'PreviewImageLength', OffsetPair => 0x201, DataTag => 'PreviewImage', Writable => 'int32u', Protected => 2, }, ); # camera information for the A700/A850/A900 (ref JR) %Image::ExifTool::Sony::CameraInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Camera information for the A700, A850 and A900.', 0x00 => { Name => 'LensSpec', # the A700/A850/A900 use a different int16 byte ordering! - PH Format => 'undef[8]', ValueConv => sub { my $val = shift;; return ConvLensSpec(pack('v*', unpack('n*', $val))); }, ValueConvInv => sub { my $val = shift; return pack('v*', unpack('n*', ConvInvLensSpec($val))); }, PrintConv => \&PrintLensSpec, PrintConvInv => \&PrintInvLensSpec, }, 0x0014 => { Name => 'FocusModeSetting', Notes => 'FocusModeSetting for the A700, A850 and A900', PrintConv => { 0 => 'Manual', 1 => 'AF-S', 2 => 'AF-C', 3 => 'AF-A', 4 => 'DMF', }, }, 0x0015 => { # the AF Point selected in AFAreaMode=Local or Spot; always '0' for AFAreaMode=Wide Name => 'AFPointSelected', PrintConvColumns => 2, PrintConv => { 0 => 'Auto', 1 => 'Center', 2 => 'Top', 3 => 'Upper-right', 4 => 'Right', 5 => 'Lower-right', 6 => 'Bottom', 7 => 'Lower-left', 8 => 'Left', 9 => 'Upper-left', 10 => 'Far Right', # only given by A700 11 => 'Far Left', # only given by A700 }, }, # 0x0019 - AF sensor used for focusing for A700/A850/A900: # # A700 AF sensor layout: A850/A900 AF sensor layout: # # - *-* - = AF sensor # | | | | * = assist sensor # - *-* o = F2.8 sensor # | | |o| | | | * |o| * | A700 center: double-cross + F2.8 # - *-* A850 center: double-cross + F2.8 + 4 assist # | | | | # - *-* # # Following values seen for A700/A850 in AFAreaMode=Local or Spot: (other values only seen in "Wide") # # 16 # 0 19 # 13 # 3 1 22 20 18 # 8 # 2 21 # 5 # # Note 1: A850/A900 AFPoint Selected 'Left'/'Right' (in 0x0015) corresponds in position (see diagram) # to A700 Local AFPoint 'Far Left'/'Far Right', and gives 'Far Left'/'Far Right' in 0x0019. # Note 2: A700 in "Wide" also gives all 23 values in 0x0019, although it doesn't have assist-points ... 0x0019 => { # the AF sensor used for focusing Name => 'AFPoint', PrintConv => { 0 => 'Upper-left', 1 => 'Left', 2 => 'Lower-left', 3 => 'Far Left', 4 => 'Bottom Assist-left', #NC 5 => 'Bottom', 6 => 'Bottom Assist-right', #NC # values 7-14: 8 center points: 4 from double-cross + 4 assist; 7-10 appear horizontal, 11-14 vertical 7 => 'Center (7)', #NC 8 => 'Center (horizontal)', 9 => 'Center (9)', #NC 10 => 'Center (10)', #NC 11 => 'Center (11)', #NC 12 => 'Center (12)', #NC 13 => 'Center (vertical)', 14 => 'Center (14)', #NC 15 => 'Top Assist-left', #NC 16 => 'Top', 17 => 'Top Assist-right', #NC 18 => 'Far Right', 19 => 'Upper-right', 20 => 'Right', 21 => 'Lower-right', 22 => 'Center F2.8', }, }, # AF Status for A700/A850/A900, which have different sensor layout # and different int16 byte ordering 0x001e => { Name => 'AFStatusActiveSensor', %Image::ExifTool::Minolta::afStatusInfo }, 0x0020 => { Name => 'AFStatusUpper-left', %Image::ExifTool::Minolta::afStatusInfo }, 0x0022 => { Name => 'AFStatusLeft', %Image::ExifTool::Minolta::afStatusInfo }, 0x0024 => { Name => 'AFStatusLower-left', %Image::ExifTool::Minolta::afStatusInfo }, 0x0026 => { Name => 'AFStatusFarLeft', %Image::ExifTool::Minolta::afStatusInfo }, 0x0028 => { Name => 'AFStatusBottomAssist-left', %Image::ExifTool::Minolta::afStatusInfo }, 0x002a => { Name => 'AFStatusBottom', %Image::ExifTool::Minolta::afStatusInfo }, 0x002c => { Name => 'AFStatusBottomAssist-right', %Image::ExifTool::Minolta::afStatusInfo }, 0x002e => { Name => 'AFStatusCenter-7', %Image::ExifTool::Minolta::afStatusInfo }, 0x0030 => { Name => 'AFStatusCenter-horizontal', %Image::ExifTool::Minolta::afStatusInfo }, 0x0032 => { Name => 'AFStatusCenter-9', %Image::ExifTool::Minolta::afStatusInfo }, 0x0034 => { Name => 'AFStatusCenter-10', %Image::ExifTool::Minolta::afStatusInfo }, 0x0036 => { Name => 'AFStatusCenter-11', %Image::ExifTool::Minolta::afStatusInfo }, 0x0038 => { Name => 'AFStatusCenter-12', %Image::ExifTool::Minolta::afStatusInfo }, 0x003a => { Name => 'AFStatusCenter-vertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x003c => { Name => 'AFStatusCenter-14', %Image::ExifTool::Minolta::afStatusInfo }, 0x003e => { Name => 'AFStatusTopAssist-left', %Image::ExifTool::Minolta::afStatusInfo }, 0x0040 => { Name => 'AFStatusTop', %Image::ExifTool::Minolta::afStatusInfo }, 0x0042 => { Name => 'AFStatusTopAssist-right', %Image::ExifTool::Minolta::afStatusInfo }, 0x0044 => { Name => 'AFStatusFarRight', %Image::ExifTool::Minolta::afStatusInfo }, 0x0046 => { Name => 'AFStatusUpper-right', %Image::ExifTool::Minolta::afStatusInfo }, 0x0048 => { Name => 'AFStatusRight', %Image::ExifTool::Minolta::afStatusInfo }, 0x004a => { Name => 'AFStatusLower-right', %Image::ExifTool::Minolta::afStatusInfo }, 0x004c => { Name => 'AFStatusCenterF2-8', %Image::ExifTool::Minolta::afStatusInfo }, 0x0130 => { Name => 'AFMicroAdjValue', Condition => '$$self{Model} =~ /^DSLR-A(850|900)\b/', ValueConv => '$val - 20', ValueConvInv => '$val + 20', }, 0x0131 => { Name => 'AFMicroAdjMode', Condition => '$$self{Model} =~ /^DSLR-A(850|900)\b/', Mask => 0x80, PrintConv => { 0x00 => 'Off', 0x80 => 'On', }, }, 305.1 => { # (0x131) Name => 'AFMicroAdjRegisteredLenses', Notes => 'number of registered lenses with a non-zero AFMicroAdjValue', Condition => '$$self{Model} =~ /^DSLR-A(850|900)\b/', Mask => 0x7f, }, # 0x0166 - 40 x 128 int8u values: AF Info Blocks for A850 and A900, not for A700 ); # camera information for other DSLR models (ref JR) %Image::ExifTool::Sony::CameraInfo2 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ Camera information for the DSLR-A200, A230, A290, A300, A330, A350, A380 and A390. }, 0x00 => { Name => 'LensSpec', Format => 'undef[8]', ValueConv => \&ConvLensSpec, ValueConvInv => \&ConvInvLensSpec, PrintConv => \&PrintLensSpec, PrintConvInv => \&PrintInvLensSpec, }, # 0x0010 - maybe to do with AFStatus: 0 na./Manual, 4 Failed, 16 Tracking, 64 Focused 0x0014 => { Name => 'AFPointSelected', PrintConvColumns => 2, PrintConv => { #JR (NC) same list as A100, A700/A900, as all have 9 point AF 0 => 'Auto', 1 => 'Center', 2 => 'Top', 3 => 'Upper-right', 4 => 'Right', 5 => 'Lower-right', 6 => 'Bottom', 7 => 'Lower-left', 8 => 'Left', 9 => 'Upper-left', }, }, 0x0015 => { Name => 'FocusModeSetting', Notes => 'FocusModeSetting for other models', PrintConv => { 0 => 'Manual', 1 => 'AF-S', 2 => 'AF-C', 3 => 'AF-A', 4 => 'DMF', }, }, # 0x0018 - AF sensor used for focusing for A200/A230/A290/A300/A330/A350/A380/A390; AF sensor layout: # # - - = AF sensor # | | + = cross sensor # # - + - # # | | # - # 0x0018 => { # used A100 list which appears to match Name => 'AFPoint', PrintConv => { 0 => 'Top-right', 1 => 'Bottom-right', 2 => 'Bottom', 3 => 'Middle Horizontal', 4 => 'Center Vertical', 5 => 'Top', 6 => 'Top-left', 7 => 'Bottom-left', }, }, # AF Status for A200/A230/A290/A300/A330/A350/A380/A390: analogous to A100 in Minolta.pm 0x001b => { Name => 'AFStatusActiveSensor', %Image::ExifTool::Minolta::afStatusInfo }, 0x001d => { Name => 'AFStatusTop-right', %Image::ExifTool::Minolta::afStatusInfo }, 0x001f => { Name => 'AFStatusBottom-right', %Image::ExifTool::Minolta::afStatusInfo }, 0x0021 => { Name => 'AFStatusBottom', %Image::ExifTool::Minolta::afStatusInfo }, # MiddleHorizontal is any of the 3 central horizontal sensors 0x0023 => { Name => 'AFStatusMiddleHorizontal', %Image::ExifTool::Minolta::afStatusInfo }, 0x0025 => { Name => 'AFStatusCenterVertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x0027 => { Name => 'AFStatusTop', %Image::ExifTool::Minolta::afStatusInfo }, 0x0029 => { Name => 'AFStatusTop-left', %Image::ExifTool::Minolta::afStatusInfo }, 0x002b => { Name => 'AFStatusBottom-left', %Image::ExifTool::Minolta::afStatusInfo }, # the 3 MiddleHorizontal sensors 0x002d => { Name => 'AFStatusLeft', %Image::ExifTool::Minolta::afStatusInfo }, 0x002f => { Name => 'AFStatusCenterHorizontal', %Image::ExifTool::Minolta::afStatusInfo }, 0x0031 => { Name => 'AFStatusRight', %Image::ExifTool::Minolta::afStatusInfo }, # 0x0166 - 59 x 96 int8u values: AF Info Blocks for A230/A290/A330/A380/A390 # 0x0182 - 58 x 88 int8u values: AF Info Blocks for A200/A300/A350 ); # Camera information for the A55 (ref PH) # (also valid for A33, A35, A560, A580 - ref JR) %Image::ExifTool::Sony::CameraInfo3 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, IS_SUBDIR => [ 0x23 ], NOTES => q{ Camera information stored by the A33, A35, A55, A450, A500, A550, A560, A580, NEX-3/5/5C/C3 and VG10E. Some tags are valid only for some of these models. }, 0x00 => { #JR Name => 'LensSpec', Condition => '$$self{Model} !~ /^NEX-5C/', Format => 'undef[8]', ValueConv => \&ConvLensSpec, ValueConvInv => \&ConvInvLensSpec, PrintConv => \&PrintLensSpec, PrintConvInv => \&PrintInvLensSpec, }, 0x0e => { #JR Name => 'FocalLength', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', Format => 'int16u', Priority => 0, ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val =~ s/ mm//; $val', }, 0x10 => { #JR Name => 'FocalLengthTeleZoom', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', Format => 'int16u', ValueConv => '$val * 2 / 3', ValueConvInv => 'int($val * 3 / 2 + 0.5)', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val =~ s/ mm//; $val', }, # # Note: # The below AF decoding covers cameras with 2 different AF systems, with overlapping offsets ! # 1) DSLR-A450/A500/A550 with 9 point AF system: decoding/offsets identical to A200 - A390 in CameraInfo # 2) SLT-A33/A35/A55 and DSLR-A560/A580 with 15 point AF system: similar/more info but at different offsets # 0x14 => { #JR Name => 'AFPointSelected', Condition => '$$self{Model} =~ /^(DSLR-A(450|500|550))\b/', # (these cameras have a 9-point AF system, ref JR) PrintConvColumns => 2, PrintConv => { 0 => 'Auto', # (seen in Wide mode and for Manual Focus) 1 => 'Center', # seen for AFArea=Spot 2 => 'Top', 3 => 'Upper-right', 4 => 'Right', 5 => 'Lower-right', 6 => 'Bottom', 7 => 'Lower-left', 8 => 'Left', 9 => 'Upper-left', }, }, 0x15 => { #JR Name => 'FocusMode', Condition => '$$self{Model} =~ /^(DSLR-A(450|500|550))\b/', PrintConv => { 0 => 'Manual', 1 => 'AF-S', 2 => 'AF-C', 3 => 'AF-A', }, }, 0x18 => { #JR Name => 'AFPoint', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', PrintConv => { 0 => 'Top-right', 1 => 'Bottom-right', 2 => 'Bottom', 3 => 'Middle Horizontal', 4 => 'Center Vertical', 5 => 'Top', 6 => 'Top-left', 7 => 'Bottom-left', }, }, 0x19 => { #JR Name => 'FocusStatus', Condition => '$$self{Model} =~ /^(SLT-|DSLR-A(560|580))\b/', Notes => 'not valid with Contrast AF or for NEX models', # seen the following values: # 0 with MF (A35, A55V-HDR, A560, A580), non-AF lens (A35), and A580 Contrast-AF # 4 with MF (A33, A55V), and A580 Contrast-AF # 16 with AF-C (or AF-A) and focus OK # 24 with AF-C (or AF-A) and unsharp or fast moving subject e.g. bird in flight # 64 with AF-S (or AF-A) and focus OK PrintConv => { 0 => 'Manual - Not confirmed (0)', 4 => 'Manual - Not confirmed (4)', 16 => 'AF-C - Confirmed', 24 => 'AF-C - Not Confirmed', 64 => 'AF-S - Confirmed', }, }, 0x1b => { #JR Name => 'AFStatusActiveSensor', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo, }, 0x1c => { Name => 'AFPointSelected', # (v8.88: renamed from LocalAFAreaPointSelected) Condition => '$$self{Model} =~ /^(SLT-|DSLR-A(560|580))\b/', Notes => 'not valid for Contrast AF', #JR # (all of these cameras have an 15-point three-cross AF system, ref JR) PrintConvColumns => 2, PrintConv => { 0 => 'Auto', # (seen in Wide mode) 1 => 'Center', 2 => 'Top', 3 => 'Upper-right', 4 => 'Right', 5 => 'Lower-right', 6 => 'Bottom', 7 => 'Lower-left', 8 => 'Left', 9 => 'Upper-left', 10 => 'Far Right', 11 => 'Far Left', 12 => 'Upper-middle', 13 => 'Near Right', 14 => 'Lower-middle', 15 => 'Near Left', }, }, 0x1d => [ { Name => 'FocusMode', Condition => '$$self{Model} =~ /^(SLT-|DSLR-A(560|580))\b/', PrintConv => { 0 => 'Manual', 1 => 'AF-S', 2 => 'AF-C', 3 => 'AF-A', }, },{ #JR Name => 'AFStatusTop-right', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo, }, ], 0x1f => { #JR Name => 'AFStatusBottom-right', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo, }, 0x20 => { #JR Name => 'AFPoint', # (v8.88: renamed from LocalAFAreaPointUsed) Condition => '$$self{Model} =~ /^(SLT-|DSLR-A(560|580))\b/', Notes => 'the AF sensor used for focusing. Not valid for Contrast AF', PrintConvColumns => 2, PrintConv => { %afPoint15, 255 => '(none)', #PH (A55, guess; also A35 with non-AF lens, ref JR) }, }, 0x21 => [ #JR { Name => 'AFStatusActiveSensor', Condition => '$$self{Model} =~ /^(SLT-|DSLR-A(560|580))\b/', %Image::ExifTool::Minolta::afStatusInfo, },{ Name => 'AFStatusBottom', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo, }, ], 0x23 => [ #JR { Name => 'AFStatus15', Condition => '$$self{Model} =~ /^(SLT-|DSLR-A(560|580))\b/', Format => 'int16s[18]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::AFStatus15' }, },{ Name => 'AFStatusMiddleHorizontal', # MiddleHorizontal is any of the 3 central horizontal sensors Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo, }, ], 0x25 => { Name => 'AFStatusCenterVertical', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo }, 0x27 => { Name => 'AFStatusTop', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo }, 0x29 => { Name => 'AFStatusTop-left', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo }, 0x2b => { Name => 'AFStatusBottom-left', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo }, # the 3 MiddleHorizontal sensors: 0x2d => { Name => 'AFStatusLeft', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo }, 0x2f => { Name => 'AFStatusCenterHorizontal', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo }, 0x31 => { Name => 'AFStatusRight', Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)\b/', %Image::ExifTool::Minolta::afStatusInfo }, # 0x0166 - starting here there are 96 AF Info blocks of 155 bytes each for the SLT-A33/A35/A55 and DSLR-A560/A580, # starting here there are 86 AF Info blocks of 174 bytes each for the DSLR-A450/A500/A550, # but NOT for NEX, and not for the A580 in Contrast-AF mode (ref JR) # The 43rd byte of each block for A580 appears to be the AFPoint as in offset 0x20, # possibly also 73rd and 74th byte ); # Camera information for other models (ref PH) %Image::ExifTool::Sony::CameraInfoUnknown = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, ); # white balance and other camera information (ref PH) %Image::ExifTool::Sony::FocusInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PRIORITY => 0, NOTES => q{ More camera settings and focus information decoded for models such as the A200, A230, A290, A300, A330, A350, A380, A390, A700, A850 and A900. }, 0x0e => [{ #7/JR Name => 'DriveMode2', Condition => '$$self{Model} =~ /^DSLR-A(230|290|330|380|390)$/', Notes => 'A230, A290, A330, A380 and A390', ValueConvInv => '$val', PrintHex => 1, PrintConv => { # (values confirmed for specified models - PH) 0x01 => 'Single Frame', # (A230,A330,A380) 0x02 => 'Continuous High', #PH (A230,A330) 0x04 => 'Self-timer 10 sec', # (A230) 0x05 => 'Self-timer 2 sec, Mirror Lock-up', # (A230,A290,A330,A380,390) 0x07 => 'Continuous Bracketing', # (A230,A330) 0x0a => 'Remote Commander', # (A230) 0x0b => 'Continuous Self-timer', # (A230,A330) }, },{ Name => 'DriveMode2', Notes => 'A200, A300, A350, A700, A850 and A900', ValueConvInv => '$val', PrintHex => 1, PrintConv => { 0x01 => 'Single Frame', 0x02 => 'Continuous High', # A700/A900; not on A850 0x12 => 'Continuous Low', #JR 0x04 => 'Self-timer 10 sec', 0x05 => 'Self-timer 2 sec, Mirror Lock-up', 0x06 => 'Single-frame Bracketing', 0x07 => 'Continuous Bracketing', 0x18 => 'White Balance Bracketing Low', #JR 0x28 => 'White Balance Bracketing High', #JR 0x19 => 'D-Range Optimizer Bracketing Low', #JR 0x29 => 'D-Range Optimizer Bracketing High', #JR 0x0a => 'Remote Commander', #JR 0x0b => 'Mirror Lock-up', #JR (A850/A900; not on A700) }, }], 0x10 => { #JR (1 and 2 inverted!) Name => 'Rotation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 270 CW', 2 => 'Rotate 90 CW', }, }, 0x14 => { Name => 'ImageStabilizationSetting', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x15 => { #7 Name => 'DynamicRangeOptimizerMode', PrintConv => { 0 => 'Off', 1 => 'Standard', 2 => 'Advanced Auto', 3 => 'Advanced Level', }, }, 0x2b => { #JR seen 2,1,3 for both WB and DRO bracketing Name => 'BracketShotNumber', Notes => 'WB and DRO bracketing', }, 0x2c => { #JR Name => 'WhiteBalanceBracketing', PrintConv => { 0 => 'Off', 1 => 'Low', 2 => 'High', }, }, 0x2d => { #JR seen 2,1,3 for both WB and DRO bracketing Name => 'BracketShotNumber2', }, 0x2e => { #JR Name => 'DynamicRangeOptimizerBracket', PrintConv => { 0 => 'Off', 1 => 'Low', 2 => 'High', }, }, 0x2f => { #JR seen 0,1,2 and 0,1,2,3,4 for 3 and 5 image bracketing sequences Name => 'ExposureBracketShotNumber', }, 0x3f => { #JR Name => 'ExposureProgram', SeparateTable => 'ExposureProgram', PrintConv => \%sonyExposureProgram, }, 0x41 => { #JR style actually used (combination of mode dial + creative style menu) Name => 'CreativeStyle', PrintConvColumns => 2, PrintConv => { 1 => 'Standard', 2 => 'Vivid', 3 => 'Portrait', 4 => 'Landscape', 5 => 'Sunset', 6 => 'Night View/Portrait', 8 => 'B&W', 9 => 'Adobe RGB', # A700 11 => 'Neutral', 12 => 'Clear', #7 13 => 'Deep', #7 14 => 'Light', #7 15 => 'Autumn Leaves', #7 16 => 'Sepia', #7 }, }, 0x6d => { Name => 'ISOSetting', ValueConv => '$val ? exp(($val/8-6)*log(2))*100 : $val', ValueConvInv => '$val ? 8*(log($val/100)/log(2)+6) : $val', PrintConv => '$val ? sprintf("%.0f",$val) : "Auto"', PrintConvInv => '$val =~ /auto/i ? 0 : $val', }, 0x6f => { Name => 'ISO', ValueConv => '$val ? exp(($val/8-6)*log(2))*100 : $val', ValueConvInv => '$val ? 8*(log($val/100)/log(2)+6) : $val', PrintConv => '$val ? sprintf("%.0f",$val) : "Auto"', PrintConvInv => '$val =~ /auto/i ? 0 : $val', }, 0x77 => { #JR Name => 'DynamicRangeOptimizerMode', PrintConv => { 0 => 'Off', 1 => 'Standard', 2 => 'Advanced Auto', 3 => 'Advanced Level', }, }, 0x79 => 'DynamicRangeOptimizerLevel', # 0x06f1 - int16u LensType, Condition => '$$self{Model} =~ /^DSLR-A(700|850|900)$/', # 0x4a81 - int16u LensType, Condition => '$$self{Model} !~ /^DSLR-A(700|850|900)$/', # 0x4a84 - int16uRev LensType, Condition => '$$self{Model} =~ /^DSLR-A(700|850|900)$/', 0x0846 => { #13 Name => 'ShutterCount', # (=ImageCount for these models) Condition => '$$self{Model} =~ /^DSLR-A(230|290|330|380|390|850|900)$/', Format => 'int32u', Notes => 'only valid for some DSLR models', RawConv => '$val & 0x00ffffff', #PH }, 0x09bb => { #PH (validated only for DSLR-A850) Name => 'FocusPosition', Condition => '$$self{Model} =~ /^DSLR-A(200|230|290|300|330|350|380|390|700|850|900)$/', Notes => 'only valid for some DSLR models', # 128 = infinity -- see Composite:FocusDistance below }, 0x1110 => { # (9600 bytes: 4 sets of 40x30 int16u values in the range 0-8191) Name => 'TiffMeteringImage', Format => 'undef[9600]', Notes => q{ 13-bit RBGG (?) 40x30 pixels, presumably metering info, extracted as a 16-bit TIFF image; }, ValueConv => sub { my ($val, $et) = @_; return undef unless length $val >= 9600; return \ "Binary data 7404 bytes" unless $et->Options('Binary'); my @dat = unpack('n*', $val); # TIFF header for a 16-bit RGB 10dpi 40x30 image $val = MakeTiffHeader(40,30,3,16,10); # re-order data to RGB pixels my ($i, @val); for ($i=0; $i<40*30; ++$i) { # data is 13-bit (max 8191), shift left to fill 16 bits # (typically, this gives a very dark image since the data should # really be anti-logged to convert from EV to perceived brightness) # push @val, $dat[$i]<<3, $dat[$i+2400]<<3, $dat[$i+1200]<<3; push @val, int(5041.1*log($dat[$i]+1)/log(2)), int(5041.1*log($dat[$i+2400]+1)/log(2)), int(5041.1*log($dat[$i+1200]+1)/log(2)); } $val .= pack('v*', @val); # add TIFF strip data return \$val; }, }, ); # more camera setting information (ref JR) # - many of these tags are the same as in CameraSettings3 %Image::ExifTool::Sony::MoreInfo = ( PROCESS_PROC => \&ProcessMoreInfo, WRITE_PROC => \&ProcessMoreInfo, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ More camera settings information decoded for the A450, A500, A550, A560, A580, A33, A35, A55, NEX-3/5/C3 and VG10E. }, 0x0001 => { # (256 bytes) Name => 'MoreSettings', SubDirectory => { TagTable => 'Image::ExifTool::Sony::MoreSettings' }, }, # (byte sizes for a single A580 image -- not checked for other images) 0x0002 => [ # (256 bytes) { Name => 'FaceInfo', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::FaceInfo' }, },{ Name => 'FaceInfoA', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', SubDirectory => { TagTable => 'Image::ExifTool::Sony::FaceInfoA' }, }, ], # 0x0101: 512 bytes # 0x0102: 1804 bytes # 0x0103: 176 bytes # 0x0104: 1088 bytes # 0x0105: 160 bytes (all zero unless flash is used, ref JR) # 0x0106: 256 bytes (faces detected if first byte is non-zero? ref JR) 0x0107 => { # (7200 bytes: 3 sets of 40x30 int16u values in the range 0-1023) Name => 'TiffMeteringImage', Notes => q{ 10-bit RGB data from the 1200 AE metering segments, extracted as a 16-bit TIFF image }, ValueConv => sub { my ($val, $et) = @_; return undef unless length $val >= 7200; return \ "Binary data 7404 bytes" unless $et->Options('Binary'); my @dat = unpack('v*', $val); # TIFF header for a 16-bit RGB 10dpi 40x30 image $val = MakeTiffHeader(40,30,3,16,10); # re-order data to RGB pixels my ($i, @val); for ($i=0; $i<40*30; ++$i) { # data is 10-bit (max 1023), shift left to fill 16 bits # (typically, this gives a very dark image since the data should # really be anti-logged to convert from EV to perceived brightness) push @val, $dat[$i]<<6, $dat[$i+1200]<<6, $dat[$i+2400]<<6; } $val .= pack('v*', @val); # add TIFF strip data return \$val; }, }, # 0x0108: 140 bytes # 0x0109: 256 bytes # 0x010a: 256 bytes # 0x0306: 276 bytes # 0x0307: 256 bytes # 0x0308: 96 bytes # 0x0309: 112 bytes # 0xffff: 788 bytes 0x0201 => { # (368 bytes) Name => 'MoreInfo0201', SubDirectory => { TagTable => 'Image::ExifTool::Sony::MoreInfo0201' }, }, # 0x0202: 144 bytes # 0x0401: 4608 bytes 0x0401 => { Name => 'MoreInfo0401', SubDirectory => { TagTable => 'Image::ExifTool::Sony::MoreInfo0401' }, }, ); %Image::ExifTool::Sony::MoreInfo0201 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PRIORITY => 0, # 0x005d - also from 0 - 255, in sync with but lower than 0x005e, depending on FocalLength # 0x005e => { # # FocusPosition for A560/A580/A33/A35/A55V # # seen values from 80 - 255 (= infinity) -- see Composite:FocusDistance2 below # Name => 'FocusPosition2_0201', # Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/', # }, # 0x0093 - also from 0 - 255, in sync with but lower than 0x0094, depending on FocalLength # 0x0094 => { # # FocusPosition for A450/A500/A550 # # seen values from 80 - 255 (= infinity) -- see Composite:FocusDistance2 below # Name => 'FocusPosition2_0201', # Condition => '$$self{Model} =~ /^(DSLR-(A450|A500|A550)$)/', # }, 0x011b => { #13 Name => 'ImageCount', Condition => '$$self{Model} !~ /^DSLR-A(450|500|550)$/', #JR Format => 'int32u', Notes => 'not valid for the A450, A500 or A550', RawConv => '$val & 0x00ffffff', }, 0x0125 => { #13 Name => 'ShutterCount', Condition => '$$self{Model} !~ /^DSLR-A(450|500|550)$/', #JR Format => 'int32u', Notes => 'not valid for the A450, A500 or A550', RawConv => '$val & 0x00ffffff', }, 0x014a => { #13 Name => 'ShutterCount', # (=ImageCount for these models) Condition => '$$self{Model} =~ /^DSLR-A(450|500|550)$/', #JR Format => 'int32u', Notes => 'A450, A500 and A550 only', RawConv => '$val & 0x00ffffff', }, ); %Image::ExifTool::Sony::MoreInfo0401 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PRIORITY => 0, 0x044e => { #JR Name => 'ShotNumberSincePowerUp', Condition => '$$self{Model} !~ /^NEX-(3|5)$/', Format => 'int32u', Notes => 'Not valid for the NEX-3 or NEX-5', RawConv => '$val & 0x00ffffff', }, # 0x101e - int16u LensType Condition => '$$self{Model} =~ /^SLT-A(33|55V)/', # 0x1022 - int16u LensType Condition => '$$self{Model} =~ /^DSLR-A(560|580)/', # 0x102a - int16u LensType Condition => '$$self{Model} =~ /^(SLT-A35|NEX-C3)/', # 0x10a8 - int16u LensType Condition => '$$self{Model} =~ /^SLT-A(33|55V)/', # 0x10ac - int16u LensType Condition => '$$self{Model} =~ /^DSLR-A(560|580)/', # 0x10b4 - int16u LensType Condition => '$$self{Model} =~ /^(SLT-A35|NEX-C3)/', # # 0x10f7 - int16u LensType Condition => '$$self{Model} =~ /^SLT-A(33|55V)/', # 0x10fb - int16u LensType Condition => '$$self{Model} =~ /^DSLR-A(560|580)/', # 0x1103 - int16u LensType Condition => '$$self{Model} =~ /^(SLT-A35|NEX-C3)/', # # 0x1181 - int16u LensType Condition => '$$self{Model} =~ /^SLT-A(33|55V)/', # 0x1185 - int16u LensType Condition => '$$self{Model} =~ /^DSLR-A(560|580)/', # 0x118d - int16u LensType Condition => '$$self{Model} =~ /^(SLT-A35|NEX-C3)/', ); # more camera setting information (ref JR) # - many of these tags are the same as in CameraSettings3 %Image::ExifTool::Sony::MoreSettings = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, PRIORITY => 0, 0x01 => { # interesting: somewhere between CameraSettings3 0x04 and 0x34 Name => 'DriveMode2', PrintHex => 1, PrintConv => { 0x10 => 'Single Frame', 0x21 => 'Continuous High', # also automatically selected for Scene mode Sports-action (0x05=52) 0x22 => 'Continuous Low', 0x30 => 'Speed Priority Continuous', 0x51 => 'Self-timer 10 sec', 0x52 => 'Self-timer 2 sec, Mirror Lock-up', 0x71 => 'Continuous Bracketing 0.3 EV', 0x75 => 'Continuous Bracketing 0.7 EV', 0x91 => 'White Balance Bracketing Low', 0x92 => 'White Balance Bracketing High', 0xc0 => 'Remote Commander', }, }, 0x02 => { Name => 'ExposureProgram', SeparateTable => 'ExposureProgram2', PrintConv => \%sonyExposureProgram2, }, 0x03 => { Name => 'MeteringMode', PrintConv => { 1 => 'Multi-segment', 2 => 'Center-weighted average', 3 => 'Spot', }, }, 0x04 => { Name => 'DynamicRangeOptimizerSetting', PrintConv => { 1 => 'Off', 16 => 'On (Auto)', 17 => 'On (Manual)', }, }, 0x05 => 'DynamicRangeOptimizerLevel', 0x06 => { Name => 'ColorSpace', PrintConv => { 1 => 'sRGB', 2 => 'Adobe RGB', }, }, 0x07 => { Name => 'CreativeStyleSetting', PrintConvColumns => 2, PrintConv => { 16 => 'Standard', 32 => 'Vivid', 64 => 'Portrait', 80 => 'Landscape', 96 => 'B&W', 160 => 'Sunset', }, }, 0x08 => { #JR Name => 'ContrastSetting', Format => 'int8s', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x09 => { Name => 'SaturationSetting', Format => 'int8s', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x0a => { Name => 'SharpnessSetting', Format => 'int8s', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x0d => { Name => 'WhiteBalanceSetting', # many guessed, based on "logical system" as observed for Daylight and Shade and steps of 16 between the modes PrintHex => 1, PrintConvColumns => 2, PrintConv => \%whiteBalanceSetting, SeparateTable => 1, }, 0x0e => { Name => 'ColorTemperatureSetting', # matches "0xb021 ColorTemperature" when WB set to "Custom" or "Color Temperature/Color Filter" ValueConv => '$val * 100', ValueConvInv => '$val / 100', PrintConv => '"$val K"', PrintConvInv => '$val =~ s/ ?K$//i; $val', }, 0x0f => { Name => 'ColorCompensationFilterSet', # seen 0, 1-9 and 245-255, corresponding to 0, M1-M9 and G9-G1 on camera display # matches "0xb022 ColorCompensationFilter" when WB set to "Custom" or "Color Temperature/Color Filter" Format => 'int8s', Notes => 'negative is green, positive is magenta', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x10 => { Name => 'FlashMode', PrintConvColumns => 2, PrintConv => { 1 => 'Flash Off', 16 => 'Autoflash', 17 => 'Fill-flash', 18 => 'Slow Sync', 19 => 'Rear Sync', 20 => 'Wireless', }, }, 0x11 => { Name => 'LongExposureNoiseReduction', PrintConv => { 1 => 'Off', 16 => 'On', # (unused or dark subject) }, }, 0x12 => { Name => 'HighISONoiseReduction', PrintConv => { 16 => 'Low', 19 => 'Auto', }, }, 0x13 => { # why is this not valid for A450/A500/A550 ? Name => 'FocusMode', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', PrintConv => { 17 => 'AF-S', 18 => 'AF-C', 19 => 'AF-A', 32 => 'Manual', 48 => 'DMF', # (NC) (seen for NEX-5) }, }, 0x15 => { Name => 'MultiFrameNoiseReduction', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', PrintConv => { 0 => 'n/a', # seen for A450/A500/A550 1 => 'Off', 16 => 'On', 255 => 'None', # seen for NEX-3/5/C3 }, }, 0x16 => { Name => 'HDRSetting', PrintConv => { 1 => 'Off', 16 => 'On (Auto)', 17 => 'On (Manual)', }, }, 0x17 => { Name => 'HDRLevel', PrintConvColumns => 3, PrintConv => { 33 => '1 EV', 34 => '1.5 EV', #JR (NC) 35 => '2 EV', 36 => '2.5 EV', #JR (NC) 37 => '3 EV', 38 => '3.5 EV', #PH (NC) 39 => '4 EV', 40 => '5 EV', 41 => '6 EV', }, }, 0x18 => { Name => 'ViewingMode', PrintConv => { 16 => 'ViewFinder', 33 => 'Focus Check Live View', 34 => 'Quick AF Live View', }, }, 0x19 => { Name => 'FaceDetection', PrintConv => { 1 => 'Off', 16 => 'On', }, }, 0x1a => { Name => 'CustomWB_RBLevels', # matches "0x7313 WB_RGGBLevels" when WB set to "Custom", except factor of 4 Format => 'int16uRev[2]', }, # From here different and overlapping offsets for 3 groups of cameras: # 1) DSLR-A450/A500/A550 # 2) NEX-3/5/5C # 3) DSLR-A560/A580, NEX-C3/VG10/VG10E, SLT-A33/A35/A55V 0x1e => [{ Name => 'BrightnessValue', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/', Notes => 'A450, A500 and A550', ValueConv => '($val-106)/8', ValueConvInv => '$val * 8 + 106', },{ Name => 'ExposureCompensationSet', Notes => 'other models', ValueConv => '($val - 128) / 24', #PH ValueConvInv => 'int($val * 24 + 128.5)', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }], 0x1f => [{ Name => 'ISO', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/', Notes => 'A450, A500 and A550', ValueConv => '$val ? exp(($val/8-6)*log(2))*100 : $val', ValueConvInv => '$val ? 8*(log($val/100)/log(2)+6) : $val', PrintConv => '$val ? sprintf("%.0f",$val) : "Auto"', PrintConvInv => '$val =~ /auto/i ? 0 : $val', },{ Name => 'FlashExposureCompSet', Notes => 'other models', Description => 'Flash Exposure Comp. Setting', ValueConv => '($val - 128) / 24', #PH ValueConvInv => 'int($val * 24 + 128.5)', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }], 0x20 => [{ Name => 'FNumber', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/', Notes => 'A450, A500 and A550', ValueConv => '2 ** (($val/8 - 1) / 2)', ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', PrintConvInv => '$val', },{ Name => 'LiveViewAFMethod', Condition => '$$self{Model} !~ /^NEX-(3|5|5C)/', Notes => 'other models except the NEX-3/5/5C', PrintConv => { 0 => 'n/a', 1 => 'Phase-detect AF', 2 => 'Contrast AF', # Contrast AF is only available with SSM/SAM lenses and in Focus Check LV, # NOT in Quick AF LV, and is automatically set when mounting SSM/SAM lens # - changes into Phase-AF when switching to Quick AF LV. }, }], 0x21 => [{ Name => 'ExposureTime', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/', Notes => 'A450, A500 and A550', ValueConv => '$val ? 2 ** (6 - $val/8) : 0', ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0', PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', },{ Name => 'ISO', Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/', Notes => 'NEX-3/5/5C', ValueConv => '$val ? exp(($val/8-6)*log(2))*100 : $val', ValueConvInv => '$val ? 8*(log($val/100)/log(2)+6) : $val', PrintConv => '$val ? sprintf("%.0f",$val) : "Auto"', PrintConvInv => '$val =~ /auto/i ? 0 : $val', }], 0x22 => { Name => 'FNumber', Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/', Notes => 'NEX-3/5/5C only', ValueConv => '2 ** (($val/8 - 1) / 2)', ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', PrintConvInv => '$val', }, 0x23 => [{ Name => 'FocalLength2', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/', Notes => 'A450, A500 and A550', ValueConv => '10 * 2 ** (($val-28)/16)', ValueConvInv => '$val>0 ? log($val/10)/log(2) * 16 + 28 : 0', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val=~s/\s*mm$//; $val', },{ Name => 'ExposureTime', Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/', Notes => 'NEX-3/5/5C', ValueConv => '$val ? 2 ** (6 - $val/8) : 0', ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0', PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }], 0x24 => { Name => 'ExposureCompensation2', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/', Notes => 'A450, A500 and A550', Format => 'int16s', ValueConv => '$val / 8', ValueConvInv => '$val * 8', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => '$val', }, 0x25 => [{ Name => 'FocalLength2', Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/', Notes => 'NEX-3/5/5C', ValueConv => '10 * 2 ** (($val-28)/16)', ValueConvInv => '$val>0 ? log($val/10)/log(2) * 16 + 28 : 0', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val=~s/\s*mm$//; $val', },{ Name => 'ISO', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)/', Notes => 'other models except the A450, A500 and A550', ValueConv => '$val ? exp(($val/8-6)*log(2))*100 : $val', ValueConvInv => '$val ? 8*(log($val/100)/log(2)+6) : $val', PrintConv => '$val ? sprintf("%.0f",$val) : "Auto"', PrintConvInv => '$val =~ /auto/i ? 0 : $val', }], 0x26 => [{ Name => 'FlashExposureCompSet2', Description => 'Flash Exposure Comp. Setting 2', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/', Notes => 'A450, A500 and A550', Format => 'int16s', ValueConv => '$val / 8', ValueConvInv => '$val * 8', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => '$val', },{ Name => 'ExposureCompensation2', Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/', Notes => 'NEX-3/5/5C', Format => 'int16s', ValueConv => '$val / 8', ValueConvInv => '$val * 8', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => '$val', },{ Name => 'FNumber', Notes => 'other models', ValueConv => '2 ** (($val/8 - 1) / 2)', ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', PrintConvInv => '$val', }], 0x27 => { Name => 'ExposureTime', Condition => '$$self{Model} !~ /^NEX-(3|5|5C)|DSLR-(A450|A500|A550)/', Notes => 'models other than the A450, A500, A550 and NEX-3/5/5C', ValueConv => '$val ? 2 ** (6 - $val/8) : 0', ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0', PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }, 0x28 => { Name => 'Orientation2', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/', Notes => 'A450, A500 and A550', PrintConv => { 1 => 'Horizontal (normal)', 2 => 'Rotate 180', 6 => 'Rotate 90 CW', 8 => 'Rotate 270 CW', }, }, 0x29 => [{ # FocusPosition for A450/A500/A550 # seen values from 80 - 255 (= infinity) -- see Composite:FocusDistance2 below Name => 'FocusPosition2', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/', Notes => 'A450, A500 and A550', },{ # value increase of 16 corresponds to doubling of FocalLength Name => 'FocalLength2', Condition => '$$self{Model} !~ /^NEX-(3|5|5C)/', Notes => 'other models except the NEX-3/5/5C', ValueConv => '10 * 2 ** (($val-28)/16)', ValueConvInv => '$val>0 ? log($val/10)/log(2) * 16 + 28 : 0', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val=~s/\s*mm$//; $val', }], 0x2a => [{ Name => 'FlashAction', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/', Notes => 'A450, A500 and A550', PrintConv => { 0 => 'Did not fire', 1 => 'Fired', }, },{ Name => 'ExposureCompensation2', Condition => '$$self{Model} !~ /^NEX-(3|5|5C)/', Notes => 'other models except the NEX-3/5/5C', Format => 'int16s', ValueConv => '$val / 8', ValueConvInv => '$val * 8', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => '$val', }], 0x2b => { # FocusPosition for NEX-3/5/5C # seen values from 80 - 255 (= infinity) -- see Composite:FocusDistance2 below Name => 'FocusPosition2', Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/', Notes => 'NEX-3/5/5C only', }, 0x2c => [{ Name => 'FocusMode2', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/', Notes => 'A450, A500 and A550', PrintConv => { 0 => 'AF', 1 => 'MF', }, },{ Name => 'FlashAction', Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/', Notes => 'NEX-3/5/5C FlashAction2', PrintConv => { 0 => 'Did not fire', 1 => 'Fired', }, },{ Name => 'FlashExposureCompSet2', Description => 'Flash Exposure Comp. Setting 2', Notes => 'other models FlashExposureCompSet2', Format => 'int16s', ValueConv => '$val / 8', ValueConvInv => '$val * 8', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => '$val', }], 0x2e => [{ Name => 'FocusMode2', Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/', Notes => 'NEX-3/5/5C', PrintConv => { 0 => 'AF', 1 => 'MF', }, },{ Name => 'Orientation2', # seen some A55 images where this does not match the other Orientation tags Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)/', Notes => 'other models except the A450, A500 and A550', PrintConv => { 1 => 'Horizontal (normal)', 2 => 'Rotate 180', 6 => 'Rotate 90 CW', 8 => 'Rotate 270 CW', }, }], 0x2f => { # FocusPosition for A560/A580/A33/A35/A55V and NEX-C3/VG10/VG10E # seen values from 80 - 255 (= infinity) -- see Composite:FocusDistance2 below Name => 'FocusPosition2', Condition => '$$self{Model} !~ /^NEX-(3|5|5C)|DSLR-(A450|A500|A550)/', Notes => 'models other than the A450, A500, A550 and NEX-3/5/5C', }, 0x30 => { Name => 'FlashAction', Condition => '$$self{Model} !~ /^NEX-(3|5|5C)|DSLR-(A450|A500|A550)/', Notes => 'models other than the A450, A500, A550 and NEX-3/5/5C', PrintConv => { 0 => 'Did not fire', 1 => 'Fired', }, }, 0x32 => { Name => 'FocusMode2', Condition => '$$self{Model} !~ /^NEX-(3|5|5C)|DSLR-(A450|A500|A550)/', Notes => 'models other than the A450, A500, A550 and NEX-3/5/5C', PrintConv => { 0 => 'AF', 1 => 'MF', }, }, 0x0077 => { Name => 'FlashAction2', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)/', PrintConv => { 0 => 'Did not fire', 2 => 'External Flash fired (2)', 3 => 'Built-in Flash fired', 4 => 'External Flash fired (4)', # what is difference with 2 ? }, }, 0x0078 => { Name => 'FlashActionExternal', Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/', PrintConv => { 136 => 'Did not fire', 122 => 'Fired', }, }, 0x007c => { Name => 'FlashActionExternal', Condition => '$$self{Model} !~ /^NEX-(3|5|5C)|DSLR-(A450|A500|A550)/', PrintConv => { 136 => 'Did not fire', 167 => 'Fired', 182 => 'Fired, HSS', }, }, 0x0082 => { Name => 'FlashStatus', Condition => '$$self{Model} =~ /^NEX-(3|5|5C)/', PrintConv => { 0 => 'None', 2 => 'External', }, }, 0x0086 => { Name => 'FlashStatus', Condition => '$$self{Model} !~ /^NEX-(3|5|5C)|DSLR-(A450|A500|A550)/', PrintConv => { 0 => 'None', 1 => 'Built-in', 2 => 'External', }, }, ); # Face detection information (ref JR) my %faceInfo = ( Format => 'int16u[4]', # re-order to top,left,height,width and scale to full-sized image like other Sony models ValueConv => 'my @v=split(" ",$val); $_*=15 foreach @v; "$v[1] $v[0] $v[3] $v[2]"', ValueConvInv => 'my @v=split(" ",$val); $_=int($_/15+0.5) foreach @v; "$v[1] $v[0] $v[3] $v[2]"', ); %Image::ExifTool::Sony::FaceInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FORMAT => 'int16u', DATAMEMBER => [ 0x00 ], 0x00 => { Name => 'FacesDetected', DataMember => 'FacesDetected', Format => 'int16s', RawConv => '$$self{FacesDetected} = ($val == -1 ? 0 : $val); $val', PrintConv => { OTHER => sub { shift }, # pass other values straight through -1 => 'n/a', }, }, 0x01 => { Name => 'Face1Position', Condition => '$$self{FacesDetected} >= 1', %faceInfo, Notes => q{ re-ordered and scaled to return the top, left, height and width of detected face, with coordinates relative to the full-sized unrotated image and increasing Y downwards }, }, 0x06 => { Name => 'Face2Position', Condition => '$$self{FacesDetected} >= 2', %faceInfo, }, 0x0b => { Name => 'Face3Position', Condition => '$$self{FacesDetected} >= 3', %faceInfo, }, 0x10 => { Name => 'Face4Position', Condition => '$$self{FacesDetected} >= 4', %faceInfo, }, 0x15 => { Name => 'Face5Position', Condition => '$$self{FacesDetected} >= 5', %faceInfo, }, 0x1a => { Name => 'Face6Position', Condition => '$$self{FacesDetected} >= 6', %faceInfo, }, 0x1f => { Name => 'Face7Position', Condition => '$$self{FacesDetected} >= 7', %faceInfo, }, 0x24 => { Name => 'Face8Position', Condition => '$$self{FacesDetected} >= 8', %faceInfo, }, ); %Image::ExifTool::Sony::FaceInfoA = ( # different offsets for A450/A500/A550 %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FORMAT => 'int16u', DATAMEMBER => [ 0x02, 0x03, 0x08 ], # # The FacesDetected number at 0x03 below is often 1 lower than the one at Tag900b 0x02. # The number of Face Positions starting at 0x5b (max. 4) corresponds to the number at 0x03. # The number of Face Positions starting at 0x0b usually corresponds to the FacesDetected number of Tag900b... # Therefore created the extra condition at 0x0b (11.1) to output an available FacePosition, even when 0x03=0... # 0x02 => { Name => 'FaceTest2', DataMember => 'FaceTest2', Hidden => 1, RawConv => '$$self{FaceTest2} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val', }, 0x03 => { Name => 'FacesDetected', DataMember => 'FacesDetected', RawConv => '$$self{FacesDetected} = ($val > 8 ? 0 : $val); $val', ValueConv => '$val > 8 ? 0 : $val', }, 0x08 => { Name => 'FaceTest8', DataMember => 'FaceTest8', Hidden => 1, RawConv => '$$self{FaceTest8} = $val; $$self{OPTIONS}{Unknown}<2 ? undef : $val', }, # 0x0b - start of 8 Face Positions of 10 int16u values each 0x0b => { Name => 'PotentialFace1Position', Condition => q{ $$self{FacesDetected} >= 1 or ($$self{FaceTest8} > 0 and ($$self{FaceTest2} == 1 or $$self{FaceTest2} == 257)) }, %faceInfo, }, 0x15 => { Name => 'PotentialFace2Position', Condition => '$$self{FacesDetected} >= 2 or ($$self{FacesDetected} == 1 and $$self{FaceTest8} > 0)', %faceInfo, }, 0x1f => { Name => 'PotentialFace3Position', Condition => '$$self{FacesDetected} >= 3 or ($$self{FacesDetected} == 2 and $$self{FaceTest8} > 0)', %faceInfo, }, 0x29 => { Name => 'PotentialFace4Position', Condition => '$$self{FacesDetected} >= 4 or ($$self{FacesDetected} == 3 and $$self{FaceTest8} > 0)', %faceInfo, }, 0x33 => { Name => 'PotentialFace5Position', Condition => '$$self{FacesDetected} >= 5 or ($$self{FacesDetected} == 4 and $$self{FaceTest8} > 0)', %faceInfo, }, 0x3d => { Name => 'PotentialFace6Position', Condition => '$$self{FacesDetected} >= 6 or ($$self{FacesDetected} == 5 and $$self{FaceTest8} > 0)', %faceInfo, }, 0x47 => { Name => 'PotentialFace7Position', Condition => '$$self{FacesDetected} >= 7 or ($$self{FacesDetected} == 6 and $$self{FaceTest8} > 0)', %faceInfo, }, 0x51 => { Name => 'PotentialFace8Position', Condition => '$$self{FacesDetected} >= 8 or ($$self{FacesDetected} == 7 and $$self{FaceTest8} > 0)', %faceInfo, }, # 0x5b - start of max. 4 further Face Positions here 0x5b => { Name => 'Face1Position', Condition => '$$self{FacesDetected} >= 1', %faceInfo, }, 0x65 => { Name => 'Face2Position', Condition => '$$self{FacesDetected} >= 2', %faceInfo, }, 0x6f => { Name => 'Face3Position', Condition => '$$self{FacesDetected} >= 3', %faceInfo, }, 0x79 => { Name => 'Face4Position', Condition => '$$self{FacesDetected} >= 4', %faceInfo, }, ); # Camera settings (ref PH) (decoded mainly from A200) %Image::ExifTool::Sony::CameraSettings = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FORMAT => 'int16u', PRIORITY => 0, NOTES => 'Camera settings for the A200, A300, A350, A700, A850 and A900.', 0x00 => { #JR Name => 'ExposureTime', ValueConv => '$val ? 2 ** (6 - $val/8) : 0', ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0', PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }, 0x01 => { #JR Name => 'FNumber', ValueConv => '2 ** (($val/8 - 1) / 2)', ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', PrintConvInv => '$val', }, 0x02 => { #JR (requires external flash) Name => 'HighSpeedSync', PrintConv => { 0 => 'Off', 1 => 'On', }, }, 0x03 => { #JR Name => 'ExposureCompensationSet', ValueConv => '($val - 128) / 24', ValueConvInv => 'int($val * 24 + 128.5)', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x04 => { #7/JR Name => 'DriveMode', Mask => 0xff, # (not sure what upper byte is for) PrintConv => { 0x01 => 'Single Frame', 0x02 => 'Continuous High', # A700/A900; not on A850 0x12 => 'Continuous Low', #JR 0x04 => 'Self-timer 10 sec', 0x05 => 'Self-timer 2 sec, Mirror Lock-up', 0x06 => 'Single-frame Bracketing', 0x07 => 'Continuous Bracketing', # (A200 val=0x1107) 0x18 => 'White Balance Bracketing Low', #JR 0x28 => 'White Balance Bracketing High', #JR 0x19 => 'D-Range Optimizer Bracketing Low', #JR 0x29 => 'D-Range Optimizer Bracketing High', #JR 0x0a => 'Remote Commander', #JR 0x0b => 'Mirror Lock-up', #JR (A850/A900; not on A700) }, }, 0x05 => { #JR Name => 'WhiteBalanceSetting', PrintConv => { 2 => 'Auto', 4 => 'Daylight', 5 => 'Fluorescent', 6 => 'Tungsten', 7 => 'Flash', 16 => 'Cloudy', 17 => 'Shade', 18 => 'Color Temperature/Color Filter', 32 => 'Custom 1', 33 => 'Custom 2', 34 => 'Custom 3', }, }, 0x06 => { #7 (A700) (ref JR: at least also valid for A200, ValueConv as for ColorCompensationFilterSet) Name => 'WhiteBalanceFineTune', ValueConv => '$val > 128 ? $val - 256 : $val', }, 0x07 => { #JR as set in WB "Color Temperature/Color Filter" and in White Balance Bracketing Name => 'ColorTemperatureSet', ValueConv => '$val * 100', ValueConvInv => '$val / 100', PrintConv => '"$val K"', PrintConvInv => '$val =~ s/ ?K$//i; $val', }, 0x08 => { #JR as set in WB "Color Temperature/Color Filter" Name => 'ColorCompensationFilterSet', Notes => 'negative is green, positive is magenta', ValueConv => '$val > 128 ? $val - 256 : $val', ValueConvInv => '$val < 0 ? $val + 256 : $val', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x0c => { #JR as set in WB "Custom" and in White Balance Bracketing Name => 'ColorTemperatureCustom', ValueConv => '$val * 100', ValueConvInv => '$val / 100', PrintConv => '"$val K"', PrintConvInv => '$val =~ s/ ?K$//i; $val', }, 0x0d => { #JR as set in WB "Custom" Name => 'ColorCompensationFilterCustom', Notes => 'negative is green, positive is magenta', ValueConv => '$val > 128 ? $val - 256 : $val', ValueConvInv => '$val < 0 ? $val + 256 : $val', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x0f => { #JR Name => 'WhiteBalance', PrintConv => { 2 => 'Auto', 4 => 'Daylight', 5 => 'Fluorescent', 6 => 'Tungsten', 7 => 'Flash', 12 => 'Color Temperature', 13 => 'Color Filter', 14 => 'Custom', 16 => 'Cloudy', 17 => 'Shade', }, }, 0x10 => { #7 (A700) Name => 'FocusModeSetting', PrintConv => { 0 => 'Manual', 1 => 'AF-S', 2 => 'AF-C', 3 => 'AF-A', 4 => 'DMF', #JR }, }, 0x11 => { #JD (A700) Name => 'AFAreaMode', PrintConv => { 0 => 'Wide', 1 => 'Local', 2 => 'Spot', }, }, 0x12 => { #7 (A700) Name => 'AFPointSetting', Format => 'int16u', # The AF point as selected by the user in AFAreaMode=Local or Spot; # Reported value remains at the last-set position in AFAreaModes=Wide. # A200, A300, A350: 9-point centre-cross (ref JR) # A700: 11-point centre-dual-cross (ref JR) # A850, A900: 9-point centre-dual-cross with 10 assist-points (ref JR) PrintConvColumns => 2, PrintConv => { 1 => 'Center', 2 => 'Top', 3 => 'Upper-right', 4 => 'Right', 5 => 'Lower-right', 6 => 'Bottom', 7 => 'Lower-left', 8 => 'Left', 9 => 'Upper-left', 10 => 'Far Right', # (presumably A700 only) 11 => 'Far Left', # (presumably A700 only) }, }, 0x13 => { #JR Name => 'FlashMode', PrintConv => { 0 => 'Autoflash', 2 => 'Rear Sync', 3 => 'Wireless', 4 => 'Fill-flash', 5 => 'Flash Off', 6 => 'Slow Sync', }, }, 0x14 => { #JR Name => 'FlashExposureCompSet', Description => 'Flash Exposure Comp. Setting', # (as pre-selected by the user, not zero if flash didn't fire) ValueConv => '($val - 128) / 24', #PH ValueConvInv => 'int($val * 24 + 128.5)', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x15 => { #7 Name => 'MeteringMode', PrintConv => { 1 => 'Multi-segment', 2 => 'Center-weighted Average', 4 => 'Spot', }, }, 0x16 => { Name => 'ISOSetting', # 0 indicates 'Auto' (I think) ValueConv => '$val ? exp(($val/8-6)*log(2))*100 : $val', ValueConvInv => '$val ? 8*(log($val/100)/log(2)+6) : $val', PrintConv => '$val ? sprintf("%.0f",$val) : "Auto"', PrintConvInv => '$val =~ /auto/i ? 0 : $val', }, 0x18 => { #7 Name => 'DynamicRangeOptimizerMode', PrintConv => { 0 => 'Off', 1 => 'Standard', 2 => 'Advanced Auto', 3 => 'Advanced Level', }, }, 0x19 => { #7 Name => 'DynamicRangeOptimizerLevel', }, 0x1a => { # style actually used (combination of mode dial + creative style menu) Name => 'CreativeStyle', PrintConvColumns => 2, PrintConv => { 1 => 'Standard', 2 => 'Vivid', 3 => 'Portrait', 4 => 'Landscape', 5 => 'Sunset', 6 => 'Night View/Portrait', 8 => 'B&W', 9 => 'Adobe RGB', # A700 11 => 'Neutral', 12 => 'Clear', #7 13 => 'Deep', #7 14 => 'Light', #7 15 => 'Autumn Leaves', #7 16 => 'Sepia', #7 }, }, 0x1b => { #JR Name => 'ColorSpace', PrintConv => { 0 => 'sRGB', 1 => 'Adobe RGB', # (A850, selected via Colorspace menu item) 5 => 'Adobe RGB (A700)', # (A700, selected via CreativeStyle menu) }, }, 0x1c => { Name => 'Sharpness', ValueConv => '$val - 10', ValueConvInv => '$val + 10', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x1d => { Name => 'Contrast', ValueConv => '$val - 10', ValueConvInv => '$val + 10', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x1e => { Name => 'Saturation', ValueConv => '$val - 10', ValueConvInv => '$val + 10', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x1f => { #7 Name => 'ZoneMatchingValue', ValueConv => '$val - 10', ValueConvInv => '$val + 10', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x22 => { #7 Name => 'Brightness', ValueConv => '$val - 10', ValueConvInv => '$val + 10', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x23 => { Name => 'FlashControl', PrintConv => { 0 => 'ADI', 1 => 'Pre-flash TTL', 2 => 'Manual', }, }, 0x28 => { #7 Name => 'PrioritySetupShutterRelease', PrintConv => { 0 => 'AF', 1 => 'Release', }, }, 0x29 => { #7 Name => 'AFIlluminator', PrintConv => { 0 => 'Auto', 1 => 'Off', }, }, 0x2a => { #7 Name => 'AFWithShutter', PrintConv => { 0 => 'On', 1 => 'Off' }, }, 0x2b => { #7 Name => 'LongExposureNoiseReduction', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x2c => { #7 Name => 'HighISONoiseReduction', PrintConv => { 0 => 'Normal', 1 => 'Low', 2 => 'High', 3 => 'Off', }, }, 0x2d => { #7 Name => 'ImageStyle', PrintConvColumns => 2, PrintConv => { 1 => 'Standard', 2 => 'Vivid', 3 => 'Portrait', #PH 4 => 'Landscape', #PH 5 => 'Sunset', #PH 7 => 'Night View/Portrait', #PH (A200/A350 when CreativeStyle was 6!) 8 => 'B&W', #PH (guess) 9 => 'Adobe RGB', 11 => 'Neutral', 129 => 'StyleBox1', 130 => 'StyleBox2', 131 => 'StyleBox3', 132 => 'StyleBox4', #JR (A850) 133 => 'StyleBox5', #JR (A850) 134 => 'StyleBox6', #JR (A850) }, }, 0x2e => { #JR (may not apply to A200/A300/A350 -- they don't have the AF/MF button) Name => 'FocusModeSwitch', PrintConv => { 0 => 'AF', 1 => 'Manual', }, }, 0x2f => { #JR Name => 'ShutterSpeedSetting', Notes => 'used in M, S and Program Shift S modes', ValueConv => '$val ? 2 ** (6 - $val/8) : 0', ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0', PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }, 0x30 => { #JR Name => 'ApertureSetting', Notes => 'used in M, A and Program Shift A modes', ValueConv => '2 ** (($val/8 - 1) / 2)', ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', PrintConvInv => '$val', }, 0x3c => { Name => 'ExposureProgram', SeparateTable => 'ExposureProgram', PrintConv => \%sonyExposureProgram, }, 0x3d => { Name => 'ImageStabilizationSetting', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x3e => { #JR Name => 'FlashAction', PrintConv => { 0 => 'Did not fire', 1 => 'Fired', 2 => 'External Flash, Did not fire', 3 => 'External Flash, Fired', }, }, 0x3f => { # (verified for A330/A380) Name => 'Rotation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', #(NC) 2 => 'Rotate 270 CW', }, }, 0x40 => { #JR Name => 'AELock', PrintConv => { 1 => 'Off', 2 => 'On', }, }, 0x4c => { #JR Name => 'FlashAction2', PrintConv => { 1 => 'Fired, Autoflash', 2 => 'Fired, Fill-flash', 3 => 'Fired, Rear Sync', 4 => 'Fired, Wireless', 5 => 'Did not fire', 6 => 'Fired, Slow Sync', 17 => 'Fired, Autoflash, Red-eye reduction', 18 => 'Fired, Fill-flash, Red-eye reduction', 34 => 'Fired, Fill-flash, HSS', }, }, 0x4d => { #JR Name => 'FocusMode', # (focus mode actually used) PrintConv => { 0 => 'Manual', 1 => 'AF-S', 2 => 'AF-C', 3 => 'AF-A', 4 => 'DMF', #JR }, }, 0x50 => { #JR Name => 'BatteryState', PrintConv => { 2 => 'Empty', # 0% 3 => 'Very Low', # 1 - 20% 4 => 'Low', # 21 - 50% 5 => 'Sufficient', # 51 - 80% 6 => 'Full', # > 80% }, }, 0x51 => { #JR Name => 'BatteryLevel', PrintConv => '"$val%"', PrintConvInv => '$val=~s/\s*\%//; $val', }, 0x53 => { #JR Name => 'FocusStatus', PrintConv => { 0 => 'Not confirmed', 4 => 'Not confirmed, Tracking', BITMASK => { 0 => 'Confirmed', 1 => 'Failed', 2 => 'Tracking', }, }, }, 0x54 => { Name => 'SonyImageSize', PrintConv => { 1 => 'Large', 2 => 'Medium', 3 => 'Small', }, }, 0x55 => { #7 Name => 'AspectRatio', PrintConv => { 1 => '3:2', 2 => '16:9', }, }, 0x56 => { #PH/7 Name => 'Quality', PrintConv => { 0 => 'RAW', 2 => 'CRAW', 34 => 'RAW + JPEG', 35 => 'CRAW + JPEG', 16 => 'Extra Fine', 32 => 'Fine', 48 => 'Standard', }, }, 0x58 => { #7 Name => 'ExposureLevelIncrements', PrintConv => { 33 => '1/3 EV', 50 => '1/2 EV', }, }, 0x6a => { #JR Name => 'RedEyeReduction', PrintConv => { 0 => 'Off', 1 => 'On', }, }, 0x9a => { #JR Name => 'FolderNumber', Mask => 0x03ff, # (not sure what the upper 6 bits are for) PrintConv => 'sprintf("%.3d",$val)', PrintConvInv => '$val', }, 0x9b => { #JR Name => 'ImageNumber', Mask => 0x3fff, # (not sure what the upper 2 bits are for) PrintConv => 'sprintf("%.4d",$val)', PrintConvInv => '$val', }, ); # Camera settings (ref PH) (A230, A290, A330, A380 and A390) %Image::ExifTool::Sony::CameraSettings2 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FORMAT => 'int16u', PRIORITY => 0, NOTES => 'Camera settings for the A230, A290, A330, A380 and A390.', ### 0x00-0x03: same TagID as CameraSettings 0x00 => { #JR Name => 'ExposureTime', ValueConv => '$val ? 2 ** (6 - $val/8) : 0', ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0', PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }, 0x01 => { #JR Name => 'FNumber', ValueConv => '2 ** (($val/8 - 1) / 2)', ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', PrintConvInv => '$val', }, 0x02 => { #JR (requires external flash) Name => 'HighSpeedSync', PrintConv => { 0 => 'Off', 1 => 'On', }, }, 0x03 => { #JR Name => 'ExposureCompensationSet', ValueConv => '($val - 128) / 24', ValueConvInv => 'int($val * 24 + 128.5)', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, ### 0x04-0x11: subtract 1 from CameraSettings TagID 0x04 => { #JR Name => 'WhiteBalanceSetting', PrintConv => { 2 => 'Auto', 4 => 'Daylight', 5 => 'Fluorescent', 6 => 'Tungsten', 7 => 'Flash', 16 => 'Cloudy', 17 => 'Shade', 18 => 'Color Temperature/Color Filter', 32 => 'Custom 1', 33 => 'Custom 2', 34 => 'Custom 3', }, }, 0x05 => { #JR Name => 'WhiteBalanceFineTune', ValueConv => '$val > 128 ? $val - 256 : $val', }, 0x06 => { #JR as set in WB "Color Temperature/Color Filter" and in White Balance Bracketing Name => 'ColorTemperatureSet', ValueConv => '$val * 100', ValueConvInv => '$val / 100', PrintConv => '"$val K"', PrintConvInv => '$val =~ s/ ?K$//i; $val', }, 0x07 => { #JR as set in WB "Color Temperature/Color Filter" Name => 'ColorCompensationFilterSet', Notes => 'negative is green, positive is magenta', ValueConv => '$val > 128 ? $val - 256 : $val', ValueConvInv => '$val < 0 ? $val + 256 : $val', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x08 => { #JR Name => 'CustomWB_RGBLevels', Format => 'int16u[3]', }, 0x0b => { #JR as set in WB "Custom" and in White Balance Bracketing Name => 'ColorTemperatureCustom', ValueConv => '$val * 100', ValueConvInv => '$val / 100', PrintConv => '"$val K"', PrintConvInv => '$val =~ s/ ?K$//i; $val', }, 0x0c => { #JR as set in WB "Custom" Name => 'ColorCompensationFilterCustom', Notes => 'negative is green, positive is magenta', ValueConv => '$val > 128 ? $val - 256 : $val', ValueConvInv => '$val < 0 ? $val + 256 : $val', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x0e => { #JR Name => 'WhiteBalance', PrintConv => { 2 => 'Auto', 4 => 'Daylight', 5 => 'Fluorescent', 6 => 'Tungsten', 7 => 'Flash', 12 => 'Color Temperature', 13 => 'Color Filter', 14 => 'Custom', 16 => 'Cloudy', 17 => 'Shade', }, }, 0x0f => { #JR/PH (educated guess) Name => 'FocusModeSetting', PrintConv => { 0 => 'Manual', 1 => 'AF-S', 2 => 'AF-C', 3 => 'AF-A', # seen 5 for A380 (FocusMode was Manual and FocusStatus was Confirmed) }, }, 0x10 => { #JR/PH (educated guess) Name => 'AFAreaMode', PrintConv => { 0 => 'Wide', 1 => 'Local', 2 => 'Spot', }, }, 0x11 => { #JR/PH (educated guess) Name => 'AFPointSetting', Format => 'int16u', # The AF point as selected by the user in AFAreaMode=Local or Spot; # Reported value remains at the last-set position in AFAreaModes=Wide. # (all of these cameras have a 9-point centre-cross AF system, ref JR) PrintConvColumns => 2, PrintConv => { 1 => 'Center', 2 => 'Top', 3 => 'Upper-right', 4 => 'Right', 5 => 'Lower-right', 6 => 'Bottom', 7 => 'Lower-left', 8 => 'Left', 9 => 'Upper-left', }, }, ### 0x12-0x18: subtract 2 from CameraSettings TagID 0x12 => { #JR Name => 'FlashExposureCompSet', Description => 'Flash Exposure Comp. Setting', # (as pre-selected by the user, not zero if flash didn't fire) ValueConv => '($val - 128) / 24', #PH ValueConvInv => 'int($val * 24 + 128.5)', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x13 => { Name => 'MeteringMode', PrintConv => { 1 => 'Multi-segment', 2 => 'Center-weighted Average', 4 => 'Spot', }, }, 0x14 => { # A330/A380 Name => 'ISOSetting', # 0 indicates 'Auto' (?) ValueConv => '$val ? exp(($val/8-6)*log(2))*100 : $val', ValueConvInv => '$val ? 8*(log($val/100)/log(2)+6) : $val', PrintConv => '$val ? sprintf("%.0f",$val) : "Auto"', PrintConvInv => '$val =~ /auto/i ? 0 : $val', }, 0x16 => { Name => 'DynamicRangeOptimizerMode', PrintConv => { 0 => 'Off', 1 => 'Standard', 2 => 'Advanced Auto', 3 => 'Advanced Level', }, }, 0x17 => 'DynamicRangeOptimizerLevel', 0x18 => { # A380 Name => 'CreativeStyle', PrintConvColumns => 2, PrintConv => { 1 => 'Standard', 2 => 'Vivid', 3 => 'Portrait', 4 => 'Landscape', 5 => 'Sunset', 6 => 'Night View/Portrait', 8 => 'B&W', # (these models don't have Neutral - PH) }, }, ### 0x19-0x1b: subtract 3 from CameraSettings TagID 0x19 => { Name => 'Sharpness', ValueConv => '$val - 10', ValueConvInv => '$val + 10', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x1a => { Name => 'Contrast', ValueConv => '$val - 10', ValueConvInv => '$val + 10', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x1b => { Name => 'Saturation', ValueConv => '$val - 10', ValueConvInv => '$val + 10', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, ### 0x1c-0x24: subtract 4 from CameraSettings TagID (not sure about 0x1c) 0x1f => { #PH (educated guess) Name => 'FlashControl', PrintConv => { 0 => 'ADI', 1 => 'Pre-flash TTL', 2 => 'Manual', }, }, ### 0x25-0x27: subtract 6 from CameraSettings TagID 0x25 => { #PH Name => 'LongExposureNoiseReduction', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x26 => { #PH Name => 'HighISONoiseReduction', # (Note: the order is different from that in CameraSettings) PrintConv => { 0 => 'Off', 1 => 'Low', 2 => 'Normal', 3 => 'High', }, }, 0x27 => { #PH Name => 'ImageStyle', PrintConvColumns => 2, PrintConv => { 1 => 'Standard', 2 => 'Vivid', 3 => 'Portrait', #PH 4 => 'Landscape', #PH 5 => 'Sunset', #PH 7 => 'Night View/Portrait', #PH (A200 when CreativeStyle was 6!) 8 => 'B&W', #PH (A380) # (these models don't have Neutral - PH) }, }, ### 0x28-0x3b: subtract 7 from CameraSettings TagID 0x28 => { #PH Name => 'ShutterSpeedSetting', Notes => 'used in M, S and Program Shift S modes', ValueConv => '$val ? 2 ** (6 - $val/8) : 0', ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0', PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }, 0x29 => { #PH Name => 'ApertureSetting', Notes => 'used in M, A and Program Shift A modes', ValueConv => '2 ** (($val/8 - 1) / 2)', ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', PrintConvInv => '$val', }, ### 0x3c-0x59: same TagID as CameraSettings 0x3c => { Name => 'ExposureProgram', SeparateTable => 'ExposureProgram', PrintConv => \%sonyExposureProgram, }, 0x3d => { # (copied from CameraSettings, ref JR) Name => 'ImageStabilizationSetting', PrintConv => { 0 => 'Off', 1 => 'On' }, }, 0x3e => { #JR Name => 'FlashAction', PrintConv => { 0 => 'Did not fire', 1 => 'Fired', 2 => 'External Flash, Did not fire', 3 => 'External Flash, Fired', }, }, 0x3f => { # (verified for A330/A380) Name => 'Rotation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 90 CW', #(NC) 2 => 'Rotate 270 CW', }, }, 0x40 => { #JR Name => 'AELock', PrintConv => { 1 => 'Off', 2 => 'On', }, }, 0x4c => { #JR Name => 'FlashAction2', PrintConv => { 1 => 'Fired, Autoflash', 2 => 'Fired, Fill-flash', 3 => 'Fired, Rear Sync', 4 => 'Fired, Wireless', 5 => 'Did not fire', 6 => 'Fired, Slow Sync', 17 => 'Fired, Autoflash, Red-eye reduction', 18 => 'Fired, Fill-flash, Red-eye reduction', 34 => 'Fired, Fill-flash, HSS', }, }, 0x4d => { #JR Name => 'FocusMode', # (focus mode actually used) PrintConv => { 0 => 'Manual', 1 => 'AF-S', 2 => 'AF-C', 3 => 'AF-A', }, }, 0x53 => { #JR (copied from CameraSettings, but all bits may not be applicable for these models) Name => 'FocusStatus', PrintConv => { 0 => 'Not confirmed', 4 => 'Not confirmed, Tracking', BITMASK => { 0 => 'Confirmed', 1 => 'Failed', 2 => 'Tracking', }, }, }, 0x54 => { Name => 'SonyImageSize', PrintConv => { 1 => 'Large', 2 => 'Medium', 3 => 'Small', }, }, 0x55 => { # (copied from CameraSettings, ref JR) Name => 'AspectRatio', PrintConv => { 1 => '3:2', 2 => '16:9', }, }, 0x56 => { # (copied from CameraSettings, ref JR) Name => 'Quality', PrintConv => { 0 => 'RAW', 2 => 'CRAW', 34 => 'RAW + JPEG', 35 => 'CRAW + JPEG', 16 => 'Extra Fine', 32 => 'Fine', 48 => 'Standard', }, }, 0x58 => { # (copied from CameraSettings, ref JR) Name => 'ExposureLevelIncrements', PrintConv => { 33 => '1/3 EV', 50 => '1/2 EV', }, }, ### 0x5a onwards: subtract 1 from CameraSettings TagID # (0x69 not confirmed) #0x69 => { #JR # Name => 'RedEyeReduction', # PrintConv => { # 0 => 'Off', # 1 => 'On', # }, #}, 0x7e => { #JR Name => 'DriveMode', Mask => 0xff, # (not sure what upper byte is for) PrintConv => { # (values confirmed for specified models - PH) 0x01 => 'Single Frame', # (A230,A330,A380) 0x02 => 'Continuous High', #PH (A230,A330) 0x04 => 'Self-timer 10 sec', # (A230) 0x05 => 'Self-timer 2 sec, Mirror Lock-up', # (A230,A290,A330,A380,390) 0x07 => 'Continuous Bracketing', # (A230 val=0x1107, A330 val=0x1307 [0.7 EV]) 0x0a => 'Remote Commander', # (A230) 0x0b => 'Continuous Self-timer', # (A230 val=0x800b [5 shots], A330 val=0x400b [3 shots]) }, }, 0x7f => { #JR Name => 'FlashMode', PrintConv => { 0 => 'Autoflash', 2 => 'Rear Sync', 3 => 'Wireless', 4 => 'Fill-flash', 5 => 'Flash Off', 6 => 'Slow Sync', }, }, 0x83 => { #PH Name => 'ColorSpace', PrintConv => { 5 => 'Adobe RGB', 6 => 'sRGB', }, }, ); # more Camera settings (ref PH) # This was decoded for the A55, but it seems to apply to the following models: # A33, A35, A55, A450, A500, A550, A560, A580, NEX-3, NEX-5, NEX-C3 and NEX-VG10E %Image::ExifTool::Sony::CameraSettings3 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FORMAT => 'int8u', PRIORITY => 0, DATAMEMBER => [ 0x99 ], NOTES => q{ Camera settings for models such as the A33, A35, A55, A450, A500, A550, A560, A580, NEX-3, NEX-5, NEX-C3 and NEX-VG10E. }, 0x00 => { #JR Name => 'ShutterSpeedSetting', Notes => 'used only in M and S exposure modes', ValueConv => '$val ? 2 ** (6 - $val/8) : 0', ValueConvInv => '$val ? int((6 - log($val) / log(2)) * 8 + 0.5) : 0', PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }, 0x01 => { #JR Name => 'ApertureSetting', Notes => 'used only in M and A exposure modes', ValueConv => '2 ** (($val/8 - 1) / 2)', ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', PrintConvInv => '$val', }, 0x02 => { Name => 'ISOSetting', ValueConv => '($val and $val < 254) ? exp(($val/8-6)*log(2))*100 : $val', ValueConvInv => '($val and $val != 254) ? 8*(log($val/100)/log(2)+6) : $val', PrintConv => { OTHER => sub { my ($val, $inv) = @_; return int($val + 0.5) unless $inv; return Image::ExifTool::IsFloat($val) ? $val : undef; }, 0 => 'Auto', 254 => 'n/a', # get this for multi-shot noise reduction }, }, 0x03 => { #JR Name => 'ExposureCompensationSet', ValueConv => '($val - 128) / 24', #PH ValueConvInv => 'int($val * 24 + 128.5)', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x04 => { #JR Name => 'DriveModeSetting', # Same drivemode info is repeated in 0x0034, but with at least the following exceptions: # - 0x0034 not for A550 ? - seen "0" # - hand-held night (0x05=56): 0x0004=0x10 and 0x0034=0xd3 # - 3D sweep panorama (0x05=57): 0x0004=0x10 and 0x0034=0xd6 # - sweep panorama (0x05=80): 0x0004=0x10 and 0x0034=0xd5 # preliminary conclusion: 0x0004 is Drivemode as pre-set, but may be overruled by Scene/Panorama mode selections # 0x0034 is Divemode as actually used PrintHex => 1, PrintConv => { 0x10 => 'Single Frame', 0x21 => 'Continuous High', # also automatically selected for Scene mode Sports-action (0x05=52) 0x22 => 'Continuous Low', 0x30 => 'Speed Priority Continuous', 0x51 => 'Self-timer 10 sec', 0x52 => 'Self-timer 2 sec, Mirror Lock-up', 0x71 => 'Continuous Bracketing 0.3 EV', 0x75 => 'Continuous Bracketing 0.7 EV', 0x91 => 'White Balance Bracketing Low', 0x92 => 'White Balance Bracketing High', 0xc0 => 'Remote Commander', }, }, 0x05 => { #JR Name => 'ExposureProgram', # Camera exposure program/mode as selected with the Mode dial. # For SCN a further selection is done via the menu # Matches OK with 0xb023 SeparateTable => 'ExposureProgram2', PrintConv => \%sonyExposureProgram2, }, 0x06 => { #JR Name => 'FocusModeSetting', PrintConv => { 17 => 'AF-S', 18 => 'AF-C', 19 => 'AF-A', 32 => 'Manual', 48 => 'DMF', # (NC) (seen for NEX-5) }, }, 0x07 => { #JR Name => 'MeteringMode', PrintConv => { 1 => 'Multi-segment', 2 => 'Center-weighted average', 3 => 'Spot', }, }, 0x09 => { #JR Name => 'SonyImageSize', PrintConv => { # values confirmed as noted for the A580 and A33 21 => 'Large (3:2)', # A580: 16M (4912x3264), A33: 14M (4592x3056) 22 => 'Medium (3:2)', # A580: 8.4M (3568x2368), A33: 7.4M (3344x2224) 23 => 'Small (3:2)', # A580: 4.0M (2448x1624), A33: 3.5M (2288x1520) 25 => 'Large (16:9)', # A580: 14M (4912x2760) 26 => 'Medium (16:9)', # A580: 7.1M (3568x2000) 27 => 'Small (16:9)', # A580: 3.4M (2448x1376) }, }, 0x0a => { #JR Name => 'AspectRatio', # normally 4 for A580 3:2 ratio images # seen 8 when selecting 16:9 via menu, and when selecting Panorama mode PrintConv => { 4 => '3:2', 8 => '16:9', }, }, 0x0b => { #JR Name => 'Quality', PrintConv => { 2 => 'RAW', 4 => 'RAW + JPEG', 6 => 'Fine', 7 => 'Standard', }, }, 0x0c => { Name => 'DynamicRangeOptimizerSetting', PrintConv => { 1 => 'Off', 16 => 'On (Auto)', 17 => 'On (Manual)', }, }, 0x0d => 'DynamicRangeOptimizerLevel', 0x0e => { #JR Name => 'ColorSpace', PrintConv => { 1 => 'sRGB', 2 => 'Adobe RGB', }, }, 0x0f => { #JR Name => 'CreativeStyleSetting', PrintConvColumns => 2, PrintConv => { 16 => 'Standard', 32 => 'Vivid', 64 => 'Portrait', 80 => 'Landscape', 96 => 'B&W', 160 => 'Sunset', }, }, 0x10 => { #JR (seen values 253, 254, 255, 0, 1, 2, 3) Name => 'ContrastSetting', Format => 'int8s', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x11 => { #JR Name => 'SaturationSetting', Format => 'int8s', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x12 => { #JR Name => 'SharpnessSetting', Format => 'int8s', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x16 => { #JR Name => 'WhiteBalanceSetting', # many guessed, based on "logical system" as observed for Daylight and Shade and steps of 16 between the modes PrintHex => 1, PrintConvColumns => 2, PrintConv => \%whiteBalanceSetting, SeparateTable => 1, }, 0x17 => { #JR Name => 'ColorTemperatureSetting', # matches "0xb021 ColorTemperature" when WB set to "Custom" or "Color Temperature/Color Filter" ValueConv => '$val * 100', ValueConvInv => '$val / 100', PrintConv => '"$val K"', PrintConvInv => '$val =~ s/ ?K$//i; $val', }, 0x18 => { #JR Name => 'ColorCompensationFilterSet', # seen 0, 1-9 and 245-255, corresponding to 0, M1-M9 and G9-G1 on camera display # matches "0xb022 ColorCompensationFilter" when WB set to "Custom" or "Color Temperature/Color Filter" Format => 'int8s', Notes => 'negative is green, positive is magenta', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x19 => { #JR Name => 'CustomWB_RGBLevels', Format => 'int16uRev[3]', # 0x19 - 0x1e are related to Custom WB measurements performed by the camera. # The values change only each time when measuring and setting a new Custom WB. # (0x19,0x1a) and (0x1d,0x1e) are same as MoreSettings (0x1a,0x1b) and (0x1c,0x1d) }, # 0x1f - always 2 (ref JR) 0x20 => { #JR Name => 'FlashMode', PrintConvColumns => 2, PrintConv => { 1 => 'Flash Off', 16 => 'Autoflash', 17 => 'Fill-flash', 18 => 'Slow Sync', 19 => 'Rear Sync', 20 => 'Wireless', }, }, 0x21 => { #JR Name => 'FlashControl', PrintConv => { 1 => 'ADI Flash', 2 => 'Pre-flash TTL', }, }, 0x23 => { #JR Name => 'FlashExposureCompSet', Description => 'Flash Exposure Comp. Setting', # (as pre-selected by the user, not zero if flash didn't fire) ValueConv => '($val - 128) / 24', #PH ValueConvInv => 'int($val * 24 + 128.5)', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x24 => { Name => 'AFAreaMode', PrintConv => { 1 => 'Wide', 2 => 'Spot', 3 => 'Local', 4 => 'Flexible', #JR # (Flexible Spot is a grid of 17x11 points for the NEX-5) }, }, 0x25 => { #JR Name => 'LongExposureNoiseReduction', PrintConv => { 1 => 'Off', 16 => 'On', # (unused or dark subject) }, }, 0x26 => { #JR Name => 'HighISONoiseReduction', PrintConv => { 16 => 'Low', 19 => 'Auto', }, }, 0x27 => { #JR Name => 'SmileShutterMode', PrintConv => { 17 => 'Slight Smile', 18 => 'Normal Smile', 19 => 'Big Smile', }, }, 0x28 => { #JR Name => 'RedEyeReduction', PrintConv => { 1 => 'Off', 16 => 'On', }, }, 0x2d => { Name => 'HDRSetting', PrintConv => { 1 => 'Off', 16 => 'On (Auto)', 17 => 'On (Manual)', }, }, 0x2e => { Name => 'HDRLevel', PrintConvColumns => 3, PrintConv => { 33 => '1 EV', 34 => '1.5 EV', #JR (NC) 35 => '2 EV', 36 => '2.5 EV', #JR (NC) 37 => '3 EV', 38 => '3.5 EV', #PH (NC) 39 => '4 EV', 40 => '5 EV', 41 => '6 EV', }, }, 0x2f => { #JR (not sure what is difference with 0x85) Name => 'ViewingMode', PrintConv => { 16 => 'ViewFinder', 33 => 'Focus Check Live View', 34 => 'Quick AF Live View', }, }, 0x30 => { #JR Name => 'FaceDetection', PrintConv => { 1 => 'Off', 16 => 'On', }, }, 0x31 => { #JR Name => 'SmileShutter', PrintConv => { 1 => 'Off', 16 => 'On', }, }, 0x32 => { #JR Name => 'SweepPanoramaSize', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', PrintConv => { 1 => 'Standard', 2 => 'Wide', }, }, 0x33 => { #JR Name => 'SweepPanoramaDirection', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', PrintConv => { 1 => 'Right', 2 => 'Left', 3 => 'Up', 4 => 'Down', }, }, 0x34 => { #JR Name => 'DriveMode', # (drive mode actually used) Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', PrintHex => 1, PrintConv => { 0x10 => 'Single Frame', 0x21 => 'Continuous High', # also automatically selected for Scene mode Sports-action (0x05=52) 0x22 => 'Continuous Low', 0x30 => 'Speed Priority Continuous', 0x51 => 'Self-timer 10 sec', 0x52 => 'Self-timer 2 sec, Mirror Lock-up', 0x71 => 'Continuous Bracketing 0.3 EV', 0x75 => 'Continuous Bracketing 0.7 EV', 0x91 => 'White Balance Bracketing Low', 0x92 => 'White Balance Bracketing High', 0xc0 => 'Remote Commander', 0xd1 => 'Continuous - HDR', 0xd2 => 'Continuous - Multi Frame NR', 0xd3 => 'Continuous - Handheld Night Shot', # (also called "Hand-held Twilight") 0xd4 => 'Continuous - Anti Motion Blur', #PH (NEX-5) 0xd5 => 'Continuous - Sweep Panorama', 0xd6 => 'Continuous - 3D Sweep Panorama', }, }, 0x35 => { Name => 'MultiFrameNoiseReduction', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', PrintConv => { 0 => 'n/a', # seen for A450/A500/A550 1 => 'Off', 16 => 'On', 255 => 'None', # seen for NEX-3/5/C3 }, }, 0x36 => { #JR (not 100% sure about this one) Name => 'LiveViewAFSetting', Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/', PrintConv => { 0 => 'n/a', 1 => 'Phase-detect AF', 2 => 'Contrast AF', # Contrast AF is only available with SSM/SAM lenses and in Focus Check LV, # NOT in Quick AF LV, and is automatically set when mounting SSM/SAM lens # - changes into Phase-AF when switching to Quick AF LV. }, }, 0x38 => { #JR Name => 'PanoramaSize3D', Description => '3D Panorama Size', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', PrintConv => { 0 => 'n/a', 1 => 'Standard', 2 => 'Wide', 3 => '16:9', }, }, 0x83 => { #JR Name => 'AFButtonPressed', # only indicates pressing and holding the "AF" button (centre-controller), # not pressing the shutter release button halfway down Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/', PrintConv => { 1 => 'No', 16 => 'Yes', }, }, 0x84 => { #JR (not 100% sure about this one) Name => 'LiveViewMetering', Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/', PrintConv => { 0 => 'n/a', 16 => '40 Segment', # DSLR with LiveView/OVF switch in OVF position 32 => '1200-zone Evaluative', # SLT, or DSLR with LiveView/OVF switch in LiveView position }, }, 0x85 => { #JR (not sure what is difference with 0x2f) Name => 'ViewingMode2', Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/', PrintConv => { 0 => 'n/a', 16 => 'Viewfinder', 33 => 'Focus Check Live View', 34 => 'Quick AF Live View', }, }, 0x86 => { #JR Name => 'AELock', Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/', PrintConv => { 1 => 'On', 2 => 'Off', }, }, 0x87 => { #JR Name => 'FlashStatusBuilt-in', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)/', PrintConv => { 1 => 'Off', 2 => 'On', }, }, 0x88 => { #JR Name => 'FlashStatusExternal', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)/', PrintConv => { 1 => 'None', 2 => 'Off', 3 => 'On', }, }, # 0x8a => { #JR # Name => 'LensAF', # Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', # PrintConv => { # 1 => 'No', # 16 => 'AF Lens', # }, # }, 0x8b => { #JR Name => 'LiveViewFocusMode', Condition => '$$self{Model} !~ /^(NEX-|DSLR-(A450|A500|A550)$)/', PrintConv => { 0 => 'n/a', 1 => 'AF', 16 => 'Manual', }, }, # 0x8e => { #JR # Name => 'LensSAM', # Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', # PrintConv => { # 1 => 'No', # 16 => 'SAM Lens', # }, # }, 0x99 => { #JR Name => 'LensMount', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', DataMember => 'LensMount', RawConv => '$$self{LensMount} = $val', PrintConv => { 1 => 'Unknown', 16 => 'A-mount', 17 => 'E-mount', }, }, # 0x9b => { #JR # Name => 'LensOSS', # Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', # PrintConv => { # 1 => 'No', # 16 => 'OSS Lens', # 17 => 'OSS Lens (NEX-VG)', # active ? # }, # }, # 0x9c - 1; 2 for multi-shot modes 0x10c => { #JR Name => 'SequenceNumber', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', # seen 18 for A550, so better exclude ? # normally 0; seen 1,2,3 for bracketing, 6 for Handheld Night Shot, 3 for HDR, 6 for MFNR PrintConv => { 0 => 'Single', 255 => 'n/a', OTHER => sub { shift }, # pass all other numbers straight through }, }, # when reading 0x0114 - 0x0117 as int32u: # - upper 8 bits (0x0117): always value 4, meaning unknown # - next 10 bits: FolderNumber (max. 999 according to manual) # - last 14 bits: ImageNumber (max 9999) 0x0114 => { #JR Name => 'FolderNumber', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', Format => 'int32u', Mask => 0x00ffc000, ValueConv => '$val >> 14', ValueConvInv => '$val << 14', PrintConv => 'sprintf("%.3d",$val)', PrintConvInv => '$val', }, 276.1 => { #JR (0x0114.1) Name => 'ImageNumber', Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', Format => 'int32u', Mask => 0x00003fff, PrintConv => 'sprintf("%.4d",$val)', PrintConvInv => '$val', }, 0x200 => { #JR Name => 'ShotNumberSincePowerUp2', Notes => q{ same as ShotNumberSincePowerUp for single-shot images, but includes all shots of the current image in multi-shot modes like HDR, panorama, and multi-frame noise reduction }, # (includes all shutter actuations of the current shot) Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', Format => 'int32u', }, 0x283 => { #JR Name => 'AFButtonPressed', # only indicates pressing and holding the "AF" button (centre-controller), # not pressing the shutter release button halfway down Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', PrintConv => { 1 => 'No', 16 => 'Yes', }, }, 0x284 => { #JR (not 100% sure about this one) Name => 'LiveViewMetering', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', PrintConv => { 0 => 'n/a', 16 => '40 Segment', # DSLR with LiveView/OVF switch in OVF position 32 => '1200-zone Evaluative', # DSLR with LiveView/OVF switch in LiveView position }, }, 0x285 => { #JR (not sure what is difference with 0x2f) Name => 'ViewingMode2', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', PrintConv => { 0 => 'n/a', 16 => 'Viewfinder', 33 => 'Focus Check Live View', 34 => 'Quick AF Live View', }, }, 0x286 => { #JR Name => 'AELock', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', PrintConv => { 1 => 'On', 2 => 'Off', }, }, 0x287 => { #JR Name => 'FlashStatusBuilt-in', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', Notes => 'A450, A500 and A550', PrintConv => { 1 => 'Off', 2 => 'On', }, }, 0x288 => { #JR Name => 'FlashStatusExternal', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', Notes => 'A450, A500 and A550', PrintConv => { 1 => 'None', 2 => 'Off', 3 => 'On', }, }, 0x28b => { #JR Name => 'LiveViewFocusMode', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', PrintConv => { 0 => 'n/a', 1 => 'AF', 16 => 'Manual', }, }, 0x30c => { #JR Name => 'SequenceNumber', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', Notes => 'A450, A500 and A550', # normally 0; seen 2 for HDR PrintConv => { 0 => 'Single', 255 => 'n/a', OTHER => sub { shift }, # pass all other numbers straight through }, }, 0x314 => { #JR Name => 'ImageNumber', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', Format => 'int16u', Notes => 'A450, A500 and A550', Mask => 0x3fff, #PH (not sure what the upper 2 bits are for) PrintConv => 'sprintf("%.4d",$val)', PrintConvInv => '$val', }, 0x316 => { #JR Name => 'FolderNumber', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', Notes => 'A450, A500 and A550', Format => 'int16u', Mask => 0x03ff, # (NC) PrintConv => 'sprintf("%.3d",$val)', PrintConvInv => '$val', }, 0x03f0 => { Name => 'LensE-mountVersion', Format => 'int16u', Condition => '($$self{Model} =~ /^NEX-/)', PrintConv => 'sprintf("%x.%.2x",$val>>8,$val&0xff)', PrintConvInv => 'my @a=split(/\./,$val);(hex($a[0])<<8)|hex($a[1])', }, # maybe this wasn't right (ref JR) #0x03f3 => { # Name => 'CameraE-mountVersion', # Format => 'int16u', # Condition => '($$self{Model} =~ /^NEX-/)', # PrintConv => 'sprintf("%x.%.2x",$val>>8,$val&0xff)', # PrintConvInv => 'my @a=split(/\./,$val);(hex($a[0])<<8)|hex($a[1])', # # seen values 1.00, 1.01, 1.02, 1.03 and 1.04 for NEX-3/5/5C/C3/VG10/VG10E with various Firmware versions. #}, 0x03f4 => { #JR (NC) Name => 'LensFirmwareVersion', Format => 'int8u', Condition => '($$self{Model} =~ /^NEX-/)', PrintConv => 'sprintf("Ver.%.2x",$val)', PrintConvInv => '$val=~s/^Ver\.//; hex($val)', }, 0x3f7 => { #JR Name => 'LensType2', Condition => '($$self{Model} =~ /^NEX-/) and ($$self{LensMount} != 1)', Format => 'int16u', SeparateTable => 1, PrintConv => \%sonyLensTypes2, }, 0x400 => { #JR Name => 'ImageNumber', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', Format => 'int16u', Notes => 'A450, A500 and A550', Mask => 0x3fff, #PH (not sure what the upper 2 bits are for) PrintConv => 'sprintf("%.4d",$val)', PrintConvInv => '$val', }, 0x402 => { #JR Name => 'FolderNumber', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)$/', Format => 'int16u', Mask => 0x03ff, # (NC) Notes => 'A450, A500 and A550', PrintConv => 'sprintf("%.3d",$val)', PrintConvInv => '$val', }, ); # Camera settings for other models %Image::ExifTool::Sony::CameraSettingsUnknown = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, FORMAT => 'int16u', ); # extra hardware information (ref JR) %Image::ExifTool::Sony::ExtraInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Extra hardware information for the A850 and A900.', # 0x0000: seen values 5 or 6 0x0001 => { Name => 'BatteryTemperature', # seen values of appr. 55 - 115: looks like temperature Fahrenheit # changing battery in cold weather: new battery starts with value 53 ValueConv => '($val - 32) / 1.8', # convert to Celsius ValueConvInv => '$val * 1.8 + 32', PrintConv => 'sprintf("%.1f C",$val)', PrintConvInv => '$val=~ s/\s*C//; $val', # (may be invalid for non-OEM batteries) }, 0x0002 => { Name => 'BatteryUnknown', # appears to be an int16u value together with 0x0005 (values similar to ExtraInfo3 0x0000) # seen values of appr. 800 at 23 deg C to 630 at 40 deg C for A850 with NP-FM500H battery (7.2 V nominal) # i.e. inversely proportional to BatteryTemperature: can not be BatteryVoltage, must be something else ? Unknown => 1, Format => 'undef[4]', ValueConv => sub { my $val = shift;; my @a = unpack("CvC",pack('v*', unpack('n*', $val))); return $a[1]; }, }, # 0x0003: seen 0 or 16 # 0x0004: always 255 # 0x0006: int16u value together with 0x0009: same behaviour and almost same values as 0x0002 # 0x0007: always 3 0x0008 => { Name => 'BatteryVoltage', # 0x0008: int16u value together with 0x000b: # values follow BatteryLevel: from appr.900 when battery full, to appr. 775 when empty. # with factor 118 they range from appr. 7.6 to 6.6 - looks like battery voltage (nominal 7.2 V) Unknown => 1, Format => 'undef[4]', ValueConv => sub { my $val = shift;; my @a = unpack("CvC",pack('v*', unpack('n*', $val))); return $a[1]/118; }, PrintConv => 'sprintf("%.2f V",$val)', }, 0x000a => { # seen mostly 213 and 246, corresponding with other ImageStabilization On/Off tags. Name => 'ImageStabilization2', Unknown => 1, # (because the decoding is funny and possibly incomplete - PH) PrintConv => { 191 => 'On (191)', # seen a few times with moving subject, continuous drive, bracketing 207 => 'On (207)', # seen once with RemoteCommander 210 => 'On (210)', # seen a few times with continous drive 213 => 'On', 246 => 'Off', }, }, # 0x000c: seen always decreasing values, from max. 107 to min. 0, # then jump back to high value: correlates with battery change/recharging # Seen once 255 immediately after inserting new battery, next frame OK at 106. # Validation: matches exactly with batterylevel display on camera (all 100+ values displayed as 100%) 0x000c => { Name => 'BatteryLevel', PrintConv => '"$val%"', PrintConvInv => '$val=~s/\s*\%//; $val', }, # 0x000d: always 2 # 0x000e: always 204 # 0x000f: always 0 # 0x0010-0x0019: always 204 0x001a => { Name => 'ExtraInfoVersion', Format => 'int8u[4]', PrintConv => '$val=~tr/ /./; $val', PrintConvInv => '$val=~tr/./ /; $val', # always 0 1 0 1 for 0x0131 Software = DSLR-A850 v1.00 # always 0 2 0 4 for 0x0131 Software = DSLR-A850 v2.00 # seen 0 2 0 0 for 0x0131 Software = DSLR-A900 v1.00 # seen 0 4 0 0 for 0x0131 Software = DSLR-A900 v1.00 # seen 0 5 0 4 for 0x0131 Software = DSLR-A900 v2.00 # A850: correlates exactly with Firmware versions. # A900: have there been different FW 1.0 versions ? }, ); # extra hardware information (ref JR) %Image::ExifTool::Sony::ExtraInfo2 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'Extra hardware information for the A230/290/330/380/390.', 0x0004 => { Name => 'BatteryLevel', PrintConv => '"$val%"', PrintConvInv => '$val=~s/\s*\%//; $val', }, 0x0012 => { Name => 'ImageStabilization', PrintConv => { 0 => 'Off', 64 => 'On', }, }, ); # extra hardware information (ref JR) %Image::ExifTool::Sony::ExtraInfo3 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ Extra hardware information for the A33, A35, A55, A450, A500, A550, A560, A580 and NEX-3/5/C3/VG10. }, 0x0000 => { Name => 'BatteryUnknown', # seen values of appr. 870 at 10 deg C to 650 at 39 deg C for A580 with NP-FM500H battery (7.2 V nominal) # i.e. inversely proportional to BatteryTemperature: can not be BatteryVoltage, must be something else ? Unknown => 1, Format => 'int16u', }, 0x0002 => { Name => 'BatteryTemperature', ValueConv => '($val - 32) / 1.8', # convert to Celsius ValueConvInv => '$val * 1.8 + 32', PrintConv => 'sprintf("%.1f C",$val)', PrintConvInv => '$val=~ s/\s*C//; $val', }, 0x0004 => { Name => 'BatteryLevel', PrintConv => '"$val%"', PrintConvInv => '$val=~s/\s*\%//; $val', }, # 0x0005: always 255 # from here on the differences between DSLR, SLT and NEX # 0x0006 and 0x0008: # values follow BatteryLevel: start high (970, 940) when battery full, # and decrease with decreasing battery level to (850, 815) # with factor 128 they range from (7.6, 7.3) to (6.6, 6.4) - looks like battery voltage (nominal 7.2 V) 0x0006 => { Name => 'BatteryVoltage1', Format => 'int16u', Condition => '$$self{Model} !~ /^(NEX-(3|5|5C|C3|VG10|VG10E))\b/', ValueConv => '$val / 128', ValueConvInv => '$val * 128', PrintConv => 'sprintf("%.2f V",$val)', PrintConvInv => '$val=~s/\s*V//; $val', }, 0x0008 => { Name => 'BatteryVoltage2', Format => 'int16u', Condition => '$$self{Model} !~ /^(NEX-(3|5|5C|C3|VG10|VG10E))\b/', ValueConv => '$val / 128', ValueConvInv => '$val * 128', PrintConv => 'sprintf("%.2f V",$val)', PrintConvInv => '$val=~s/\s*V//; $val', }, # 0x000a - 0x000f: 3 int16u values: probably some mode or status info: # seen various 3-number-sequences for SLT and DSLR, but meaning unknown # 0x000a => { # Name => 'ExtraInfo_000a', # Format => 'int16u[3]', # Condition => '$$self{Model} !~ /^(NEX-(3|5|5C|C3|VG10|VG10E))\b/', # }, # 0x0010 seen: # 176 for SLT # 204 for NEX # 240 for DSLR 0x0011 => { Name => 'ImageStabilization', Condition => '$$self{Model} !~ /^(NEX-(3|5|5C|C3|VG10|VG10E))\b/', # usually matches 0xb026 ImageStabilization, except some images with SelfTimer and on tripod PrintConv => { 0 => 'Off', 64 => 'On', }, }, 0x0014 => [ { Name => 'BatteryState', Condition => '$$self{Model} =~ /^SLT-/', # possibly relates to "simple" batterylevel indication with battery-icon, but not completely sure Notes => 'BatteryState for SLT models', PrintConv => { 1 => 'Empty', 2 => 'Low', 3 => 'Half full', 4 => 'Almost full', 5 => 'Full', }, },{ Name => 'ExposureProgram', Condition => '$$self{Model} =~ /^DSLR-(A450|A500|A550)\b/', Notes => 'ExposureProgram for the A450, A500 and A550', Priority => 0, # (some unknown values) PrintConv => { 241 => 'Landscape', 243 => 'Aperture-priority AE', 245 => 'Portrait', 246 => 'Auto', 247 => 'Program AE', 249 => 'Macro', 252 => 'Sunset', 253 => 'Sports', #PH (A550) 255 => 'Manual', # missing: Shutter speed priority AE, No Flash, Night View }, },{ Name => 'ModeDialPosition', Condition => '$$self{Model} =~ /^DSLR-/', Notes => 'ModeDialPosition for other DSLR models', # (decoded from A560/A580) PrintConv => { 248 => 'No Flash', 249 => 'Aperture-priority AE', 250 => 'SCN', # <-- the reason we don't call it ExposureProgram for these models 251 => 'Shutter speed priority AE', 252 => 'Auto', 253 => 'Program AE', 254 => 'Panorama', 255 => 'Manual', }, }, ], # 0x0015: DSLR: appears to be a bitmask relating to "switch" positions: # bit 0 ( 1) only seen OFF for A580 # bit 1 ( 2) ON = Flash down, OFF = Flash raised # bit 2 ( 4) only seen ON for A580 # bit 3 ( 8) only seen ON for A580 # bit 4 ( 16) ON = AF, OFF = MF # bit 5 ( 32) ON = OVF, OFF = LiveView # bit 6 ( 64) seen ON and OFF, meaning unknown # bit 7 (128) seen ON and OFF, meaning unknown # 0x0016: DSLR: seen 244,245,252,254, decoded for A580 with 32GB SD and 16GB MS cards # 0x0016: NEX: seen 61,62, 125,126, 190: bits '64' and '128' appear to relate to CameraOrientation # 0x0016: SLT: seen 64 - 78, meaning unknown 0x0016 => [{ Name => 'MemoryCardConfiguration', Condition => '$$self{Model} =~ /^DSLR-/', PrintConv => { 244 => 'MemoryStick in use, SD card present', 245 => 'MemoryStick in use, SD slot empty', 252 => 'SD card in use, MemoryStick present', 254 => 'SD card in use, MemoryStick slot empty', }, },{ Name => 'CameraOrientation', Condition => '$$self{Model} =~ /^(NEX-(3|5|5C|C3|VG10|VG10E))\b/', Mask => 0xc0, # (don't know what other bits mean) PrintConv => { 0x00 => 'Horizontal (normal)', 0x40 => 'Rotate 90 CW', 0x80 => 'Rotate 270 CW', 0xc0 => 'Rotate 180', # (NC) }, }], # 0x0017: seen 0 for SLT, 255 for DSLR, variable for NEX 0x0018 => { Name => 'CameraOrientation', Condition => '$$self{Model} !~ /^(NEX-(3|5|5C|C3|VG10|VG10E))\b/', Mask => 0x30, # (don't know what other bits mean) PrintConv => { 0x00 => 'Horizontal (normal)', 0x10 => 'Rotate 90 CW', 0x20 => 'Rotate 270 CW', 0x30 => 'Rotate 180', }, }, # 0x0019: # A450/500/550: 0 - 12 and 233 - 255 # A560/580: 1 or 64, seen a few 0 and 8 # A33/35/55: seen 0, 1, 64 # NEX: 204 # 0x001a, 0x001c appear to be 2 int16u values, meaning unknown ); # shot information (ref PH) %Image::ExifTool::Sony::ShotInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, DATAMEMBER => [ 0x02, 0x30, 0x32, 0x34 ], IS_SUBDIR => [ 0x48, 0x5e ], # 0x00 - byte order 'II' 0x02 => { Name => 'FaceInfoOffset', Format => 'int16u', DataMember => 'FaceInfoOffset', Writable => 0, RawConv => '$$self{FaceInfoOffset} = $val', }, 0x06 => { Name => 'SonyDateTime', Format => 'string[20]', Groups => { 2 => 'Time' }, Shift => 'Time', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,0)', }, 0x1a => { Name => 'SonyImageHeight', Format => 'int16u' }, #JR 0x1c => { Name => 'SonyImageWidth', Format => 'int16u' }, #JR 0x30 => { #Jeffrey Friedl Name => 'FacesDetected', DataMember => 'FacesDetected', Format => 'int16u', RawConv => '$$self{FacesDetected} = $val', }, 0x32 => { Name => 'FaceInfoLength', # length of a single FaceInfo entry DataMember => 'FaceInfoLength', Format => 'int16u', Writable => 0, RawConv => '$$self{FaceInfoLength} = $val', }, 0x34 => { # oldest/other DSC/other - # older DSC models "DC5303320222000" or "DC6303320222000" # DSC-W650/W690/W730 "THm101000000000" or "THm211000000000" # DSC-HX9V generation and newer "DC7303320222000" Name => 'MetaVersion', # (tentative) Format => 'string[16]', DataMember => 'MetaVersion', RawConv => '$$self{MetaVersion} = $val', }, 0x48 => { # (most models: DC5303320222000 and DC6303320222000) Name => 'FaceInfo1', Condition => q{ $$self{FacesDetected} and $$self{FaceInfoOffset} == 0x48 and $$self{FaceInfoLength} == 0x20 }, SubDirectory => { TagTable => 'Image::ExifTool::Sony::FaceInfo1' }, }, 0x5e => { # (HX7V: DC7303320222000) Name => 'FaceInfo2', Condition => q{ $$self{FacesDetected} and $$self{FaceInfoOffset} == 0x5e and $$self{FaceInfoLength} == 0x25 }, SubDirectory => { TagTable => 'Image::ExifTool::Sony::FaceInfo2' }, }, ); # tags used in Tag2010 and Tag9400 tables my %sequenceImageNumber = ( #PH Name => 'SequenceImageNumber', Notes => 'number of images captured in burst sequence', # (not shutter count because it increments for auto portrait framing) Format => 'int32u', ValueConv => '$val + 1', ValueConvInv => '$val - 1', ); my %sequenceFileNumber = ( #PH Name => 'SequenceFileNumber', Notes => 'file number in burst sequence', Format => 'int32u', ValueConv => '$val + 1', #JR ValueConvInv => '$val - 1', ); my %releaseMode2 = ( #JR Name => 'ReleaseMode2', SeparateTable => 'ReleaseMode2', PrintConv => { 0 => 'Normal', 1 => 'Continuous', # (RX100 "Continuous - Self-timer") 2 => 'Continuous - Exposure Bracketing', # (RX100) 3 => 'Continuous - White Balance Bracketing', # (HX9V) (RX100) 5 => 'Continuous - Burst', # (HX9V) 6 => 'Single Frame - Capture During Movie', #PH (RX100) 7 => 'Continuous - Sweep Panorama', 8 => 'Continuous - Anti-Motion Blur, Hand-held Twilight', # (HX9V) 9 => 'Continuous - HDR', 10 => 'Continuous - Background defocus', # (HX9V) 13 => 'Continuous - 3D Sweep Panorama', #PH/JR 15 => 'Continuous - High Resolution Sweep Panorama', #JR (HX50V) 16 => 'Continuous - 3D Image', # (HX9V) 17 => 'Continuous - Burst 2', # (WX7 - PH) (#JR 9400-SequenceLength=10 shots) 19 => 'Continuous - Speed/Advance Priority', #PH/JR (RX100) 20 => 'Continuous - Multi Frame NR', 23 => 'Single-frame - Exposure Bracketing', # (NC, seen for ILCE-7) 26 => 'Continuous Low', #PH (A77) 27 => 'Continuous - High Sensitivity', # seen for DSC-WX60 and WX300 28 => 'Smile Shutter', #PH (RX100) 29 => 'Continuous - Tele-zoom Advance Priority', 146 => 'Single Frame - Movie Capture', #PH (seen in Tag2010 ReleaseMode2 values) }, ); # tag definitions for Tag2010 tables (ref JR) my %sonyDateTime2010 = ( Name => 'SonyDateTime', Format => 'undef[7]', Shift => 'Time', ValueConv => q{ my @v = unpack('vC*', $val); return sprintf("%.4d:%.2d:%.2d %.2d:%.2d:%.2d", @v) }, ValueConvInv => q{ my @v = ($val =~ /\d+/g); return undef unless @v == 6; return pack('vC*', @v); }, PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,0)', ); my %releaseMode2010 = ( Name => 'ReleaseMode3', PrintConv => { 0 => 'Normal', 1 => 'Continuous', 2 => 'Bracketing', # (also white balance bracketing - PH) (also Single-frame Exposure Bracketing - ref JR) # 3 => 'Remote Commander', (NC) (seen this when other ReleaseMode and ReleaseMode2 are 'Normal' - PH, A77) 4 => 'Continuous - Burst', # seen for DSC-WX500 with burst of 10 shots 5 => 'Continuous - Speed/Advance Priority', }, ); my %gain2010 = ( Name => 'StopsAboveBaseISO', # BaseISO is 100 for SLT, ILCE-3000, NEX-5N/5R/5T/6/7/VG20/VG30/VG900, DSC-RX1/RX1R # BaseISO is 200 for NEX-F3/3N # BaseISO is 160 for DSC-RX100M2 # BaseISO is 125 for DSC-RX100 # Also several other DSC models have BaseISO different from 100. Format => 'int16u', ValueConv => '16 - $val/256', ValueConvInv => '(16 - $val) * 256', PrintConv => '$val ? sprintf("%.1f",$val) : $val', PrintConvInv => '$val', ); my %brightnessValue2010 = ( Name => 'BrightnessValue', Format => 'int16u', ValueConv => '$val/256 - 56.6', ValueConvInv => '($val + 56.6) * 256', ); my %dynamicRangeOptimizer2010 = ( Name => 'DynamicRangeOptimizer', PrintConv => { 0 => 'Off', 1 => 'Auto', 3 => 'Lv1', 4 => 'Lv2', 5 => 'Lv3', 6 => 'Lv4', 7 => 'Lv5', 8 => 'n/a', }, ); my %hdr2010 = ( Name => 'HDRSetting', # (Off when HDR tag is On for RX100 superior auto backlight - PH) PrintConv => { 0 => 'Off', 1 => 'HDR Auto', 3 => 'HDR 1 EV', 5 => 'HDR 2 EV', 7 => 'HDR 3 EV', 9 => 'HDR 4 EV', 11 => 'HDR 5 EV', 13 => 'HDR 6 EV', }, ); my %exposureComp2010 = ( Name => 'ExposureCompensation', Format=>'int16s', ValueConv => '-$val/256', ValueConvInv => '-$val*256', PrintConv => '$val ? sprintf("%+.1f",$val) : $val', PrintConvInv => '$val', ); my %pictureEffect2010 = ( Name => 'PictureEffect2', SeparateTable => 'PictureEffect2', PrintConv => { 0 => 'Off', 1 => 'Toy Camera', 2 => 'Pop Color', 3 => 'Posterization', 4 => 'Retro Photo', 5 => 'Soft High Key', 6 => 'Partial Color', 7 => 'High Contrast Monochrome', 8 => 'Soft Focus', 9 => 'HDR Painting', 10 => 'Rich-tone Monochrome', 11 => 'Miniature', 12 => 'Water Color', 13 => 'Illustration', }, ); my %quality2010 = ( Name => 'Quality2', PrintConv => { 0 => 'JPEG', 1 => 'RAW', 2 => 'RAW + JPEG', }, ); my %meteringMode2010 = ( Name => 'MeteringMode', PrintConv => { 0 => 'Multi-segment', 2 => 'Center-weighted average', 3 => 'Spot', }, ); my %flashMode2010 = ( Name => 'FlashMode', PrintConv => { 0 => 'Autoflash', 1 => 'Fill-flash', 2 => 'Flash Off', 3 => 'Slow Sync', 4 => 'Rear Sync', # 6 => 'Wireless', #(NC) }, ); my %exposureProgram2010 = ( Name => 'ExposureProgram', SeparateTable => 'ExposureProgram3', PrintConv => \%sonyExposureProgram3, ); my %pictureProfile2010 = ( Name => 'PictureProfile', # values 0-9: Seen for all cameras writing this tag: matches CreativeStyle and/or SceneMode settings. # 10 and higher: Seen for ILCE-7S/7M2 and newer, having a PictureProfile setting, also some DSC/HDR models. # Although intended for video, when set these profiles are also applied to (JPG) still images. PrintConv => { 0 => 'Standard/Neutral - Gamma Still (PP2)', # CreativeStyle = Standard or Neutral 1 => 'Portrait', 3 => 'Night View/Portrait', 4 => 'B&W/Sepia', 5 => 'Clear', 6 => 'Deep', 7 => 'Light', 8 => 'Vivid', # SceneMode or CreativeStyle = Vivid, Autumn, Sunset or Landscape 9 => 'Real', 10 => 'Gamma Movie (PP1)', 22 => 'Gamma ITU709 (PP3)', 23 => 'ColorTone ITU709 (PP4)', # seen for HDR-CX130E 24 => 'Gamma Cine1 (PP5)', 25 => 'Gamma Cine2 (PP6)', 26 => 'Gamma Cine3', 27 => 'Gamma Cine4', 28 => 'Gamma S-Log2 (PP7)', 29 => 'Gamma ITU709(800%)', }, ); %Image::ExifTool::Sony::Tag2010a = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', NOTES => 'Valid for NEX-5N.', WRITABLE => 1, FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x04b0 => { Name => 'MeterInfo', Format => 'int32u[486]', Unknown => 1, SubDirectory => { TagTable => 'Image::ExifTool::Sony::MeterInfo' }, }, 0x1128 => { %releaseMode2010 }, 0x112c => { %releaseMode2 }, 0x1138 => { %flashMode2010 }, 0x113e => { %gain2010 }, 0x1140 => { %brightnessValue2010 }, 0x1144 => { %dynamicRangeOptimizer2010 }, 0x1148 => { %hdr2010 }, 0x114c => { %exposureComp2010 }, 0x115e => { %pictureProfile2010 }, 0x115f => { %pictureProfile2010 }, 0x1163 => { %pictureEffect2010 }, 0x1170 => { %quality2010 }, 0x1174 => { %meteringMode2010 }, 0x1175 => { %exposureProgram2010 }, 0x117c => { Name => 'WB_RGBLevels', Format => 'int16u[3]' }, #0x1a08 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x1a0c => { Name => 'SonyImageHeight', Format => 'int16u' }, ); %Image::ExifTool::Sony::Tag2010b = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', NOTES => 'Valid for SLT-A65/A77, NEX-7/VG20E.', WRITABLE => 1, FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x0000 => { %sequenceImageNumber }, #PH 0x0004 => { %sequenceFileNumber }, #PH 0x0008 => { %releaseMode2, Format => 'int32u' }, #0x0044 => { Name => 'SonyImageWidth3', Format => 'int16u' }, #0x0048 => { Name => 'SonyImageHeight3', Format => 'int16u' }, #0x0054 => { Name => 'SonyImageWidth2', Format => 'int16u' }, #0x0058 => { Name => 'SonyImageHeight2', Format => 'int16u' }, #0x0064 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x0068 => { Name => 'SonyImageHeight', Format => 'int16u' }, #0x00a8 => { Name => 'SonyImageWidth2', Format => 'int16u' }, #0x00ac => { Name => 'SonyImageHeight2', Format => 'int16u' }, #0x00b8 => { Name => 'SonyImageWidth2', Format => 'int16u' }, #0x00bc => { Name => 'SonyImageHeight2', Format => 'int16u' }, #0x00c8 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x00cc => { Name => 'SonyImageHeight', Format => 'int16u' }, 0x01b6 => { %sonyDateTime2010, Groups => { 2 => 'Time' } }, #0x0204 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x0206 => { Name => 'SonyImageHeight', Format => 'int16u' }, 0x0324 => { %dynamicRangeOptimizer2010 }, 0x04b4 => { Name => 'MeterInfo', Format => 'int32u[486]', Unknown => 1, SubDirectory => { TagTable => 'Image::ExifTool::Sony::MeterInfo' }, }, 0x1128 => { %releaseMode2010 }, 0x112c => { %releaseMode2 }, 0x1138 => { %flashMode2010 }, 0x113e => { %gain2010 }, 0x1140 => { %brightnessValue2010 }, 0x1144 => { %dynamicRangeOptimizer2010 }, 0x1148 => { %hdr2010 }, 0x114c => { %exposureComp2010 }, 0x1162 => { %pictureProfile2010 }, 0x1163 => { %pictureProfile2010 }, 0x1167 => { %pictureEffect2010 }, 0x1174 => { %quality2010 }, 0x1178 => { %meteringMode2010 }, #1154 0x1179 => { %exposureProgram2010 }, 0x1180 => { Name => 'WB_RGBLevels', Format => 'int16u[3]' }, 0x1218 => { Name => 'SonyISO', Format => 'int16u', ValueConv => '3.125*(2**(21-($val/256)))', PrintConv => 'sprintf("%.0f",$val)', }, #0x1a08 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x1a0c => { Name => 'SonyImageHeight', Format => 'int16u' }, 0x1a23 => { # only for NEX-7 with Firmware v1.02 and higher, but slightly different from Tag9405 ... Name => 'LensParameters', Format => 'int16s[16]', PrintConv => 'sprintf("%5d" . " %5d" x 15, split(" ",$val))', }, ); %Image::ExifTool::Sony::Tag2010c = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', NOTES => 'Valid for SLT-A37/A57 and NEX-F3.', WRITABLE => 1, FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x0000 => { %sequenceImageNumber }, #PH 0x0004 => { %sequenceFileNumber }, #PH 0x0008 => { %releaseMode2, Format => 'int32u' }, #0x0048 => { Name => 'SonyImageWidth3', Format => 'int16u' }, #0x004c => { Name => 'SonyImageHeight3', Format => 'int16u' }, #0x0058 => { Name => 'SonyImageWidth2', Format => 'int16u' }, #0x005c => { Name => 'SonyImageHeight2', Format => 'int16u' }, #0x0068 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x006c => { Name => 'SonyImageHeight', Format => 'int16u' }, #0x00c0 => { Name => 'SonyImageWidth2', Format => 'int16u' }, #0x00c4 => { Name => 'SonyImageHeight2', Format => 'int16u' }, #0x00d0 => { Name => 'SonyImageWidth2', Format => 'int16u' }, #0x00d4 => { Name => 'SonyImageHeight2', Format => 'int16u' }, #0x00e0 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x00e4 => { Name => 'SonyImageHeight', Format => 'int16u' }, #0x0134 => { Name => 'SonyImageHeight', Format => 'int16u' }, #0x0144 => { Name => 'SonyImageHeight', Format => 'int16u' }, #0x0154 => { Name => 'SonyImageHeight', Format => 'int16u' }, 0x0200 => { Name => 'DigitalZoomRatio', ValueConv => '$val/16', ValueConvInv => '$val*16', Priority => 0 }, 0x0210 => { %sonyDateTime2010, Groups => { 2 => 'Time' } }, 0x0300 => { %dynamicRangeOptimizer2010 }, 0x0490 => { Name => 'MeterInfo', Format => 'int32u[486]', Unknown => 1, SubDirectory => { TagTable => 'Image::ExifTool::Sony::MeterInfo' }, }, 0x1104 => { %releaseMode2010 }, 0x1108 => { %releaseMode2 }, 0x1114 => { %flashMode2010 }, 0x111a => { %gain2010 }, 0x111c => { %brightnessValue2010 }, 0x1120 => { %dynamicRangeOptimizer2010 }, 0x1124 => { %hdr2010 }, 0x1128 => { %exposureComp2010 }, 0x113e => { %pictureProfile2010 }, 0x113f => { %pictureProfile2010 }, 0x1143 => { %pictureEffect2010 }, 0x1150 => { %quality2010 }, 0x1154 => { %meteringMode2010 }, 0x1155 => { %exposureProgram2010 }, 0x115c => { Name => 'WB_RGBLevels', Format => 'int16u[3]' }, 0x11f4 => { Name => 'SonyISO', Format => 'int16u', ValueConv => '3.125*(2**(21-($val/256)))', PrintConv => 'sprintf("%.0f",$val)', }, #0x1a08 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x1a0c => { Name => 'SonyImageHeight', Format => 'int16u' }, ); %Image::ExifTool::Sony::Tag2010d = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', NOTES => q{ Valid for DSC-HX10V/HX20V/HX200V/TX66/TX200V/TX300V/WX50/WX100/WX150, but not valid for panorama images. }, WRITABLE => 1, FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x0000 => { %sequenceImageNumber }, #PH 0x0004 => { %sequenceFileNumber }, #PH 0x0008 => { %releaseMode2, Format => 'int32u' }, #0x0048 => { Name => 'SonyImageWidth3', Format => 'int16u' }, #0x004c => { Name => 'SonyImageHeight3', Format => 'int16u' }, #0x0058 => { Name => 'SonyImageWidth2', Format => 'int16u' }, #0x005c => { Name => 'SonyImageHeight2', Format => 'int16u' }, #0x0068 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x006c => { Name => 'SonyImageHeight', Format => 'int16u' }, #0x00c0 => { Name => 'SonyImageWidth2', Format => 'int16u' }, #0x00c4 => { Name => 'SonyImageHeight2', Format => 'int16u' }, #0x00d0 => { Name => 'SonyImageWidth2', Format => 'int16u' }, #0x00d4 => { Name => 'SonyImageHeight2', Format => 'int16u' }, #0x00e0 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x00e4 => { Name => 'SonyImageHeight', Format => 'int16u' }, 0x01fe => { %sonyDateTime2010, Groups => { 2 => 'Time' } }, 0x037c => { %dynamicRangeOptimizer2010 }, 0x050c => { Name => 'MeterInfo', Format => 'int32u[486]', Unknown => 1, SubDirectory => { TagTable => 'Image::ExifTool::Sony::MeterInfo' }, }, 0x1180 => { %releaseMode2010 }, 0x1184 => { %releaseMode2 }, 0x1190 => { %flashMode2010 }, 0x1196 => { %gain2010 }, 0x1198 => { %brightnessValue2010 }, 0x119c => { %dynamicRangeOptimizer2010 }, 0x11a0 => { %hdr2010 }, 0x11ba => { %pictureProfile2010 }, 0x11bb => { %pictureProfile2010 }, 0x11bf => { %pictureEffect2010 }, 0x11d0 => { %meteringMode2010 }, # 0x11d1 - not valid for HX20V panorama images - PH 0x11d1 => { %exposureProgram2010 }, 0x11d8 => { Name => 'WB_RGBLevels', Format => 'int16u[3]' }, 0x1270 => { Name => 'SonyISO', Format => 'int16u', ValueConv => '3.125*(2**(21-($val/256)))', PrintConv => 'sprintf("%.0f",$val)', }, ); %Image::ExifTool::Sony::Tag2010e = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', NOTES => q{ Valid for SLT-A58/A99, ILCE-3000/3500, NEX-3N/5R/5T/6/VG30E/VG900, DSC-RX100, DSC-RX1/RX1R. Also valid for DSC-HX300/HX50V/TX30/WX60/WX200/WX300, but not for panorama images. }, WRITABLE => 1, FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x0000 => { %sequenceImageNumber }, #PH 0x0004 => { %sequenceFileNumber }, #PH 0x0008 => { %releaseMode2, Format => 'int32u' }, #0x0048 => { Name => 'SonyImageWidth3', Format => 'int16u' }, #0x004c => { Name => 'SonyImageHeight3', Format => 'int16u' }, #0x0058 => { Name => 'SonyImageWidth2', Format => 'int16u' }, #0x005c => { Name => 'SonyImageHeight2', Format => 'int16u' }, #0x0068 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x006c => { Name => 'SonyImageHeight', Format => 'int16u' }, #0x00c0 => { Name => 'SonyImageWidth2', Format => 'int16u' }, #0x00c4 => { Name => 'SonyImageHeight2', Format => 'int16u' }, #0x00d0 => { Name => 'SonyImageWidth2', Format => 'int16u' }, #0x00d4 => { Name => 'SonyImageHeight2', Format => 'int16u' }, #0x00e0 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x00e4 => { Name => 'SonyImageHeight', Format => 'int16u' }, #0x01fa => { Name => 'SonyImageHeight', Format => 'int16u' }, #0x0200 => { Name => 'SonyImageWidth', Format => 'int16u' }, 0x021c => { Name => 'DigitalZoomRatio', ValueConv => '$val/16', ValueConvInv => '$val*16', Priority => 0 }, 0x022c => { %sonyDateTime2010, Groups => { 2 => 'Time' } }, 0x0328 => { %dynamicRangeOptimizer2010 }, 0x04b8 => { Name => 'MeterInfo', Format => 'int32u[486]', Unknown => 1, SubDirectory => { TagTable => 'Image::ExifTool::Sony::MeterInfo' }, }, 0x115c => { %releaseMode2010 }, 0x1160 => { %releaseMode2 }, 0x116c => { %flashMode2010 }, 0x1172 => { %gain2010 }, 0x1174 => { %brightnessValue2010 }, 0x1178 => { %dynamicRangeOptimizer2010 }, 0x117c => { %hdr2010 }, 0x1180 => { %exposureComp2010 }, 0x1196 => { %pictureProfile2010 }, 0x1197 => { %pictureProfile2010 }, 0x119b => { %pictureEffect2010 }, 0x11a8 => { %quality2010 }, 0x11ac => { %meteringMode2010 }, 0x11ad => { %exposureProgram2010 }, 0x11b4 => { Name => 'WB_RGBLevels', Format => 'int16u[3]' }, 0x1254 => { Condition => '$$self{Model} =~ /^(SLT-(A99|A99V)|NEX-(5R|5T|6|VG900|VG30E)|DSC-RX100|Stellar|HV)\b/', Name => 'SonyISO', Format => 'int16u', ValueConv => '3.125*(2**(21-($val/256)))', PrintConv => 'sprintf("%.0f",$val)', }, 0x1258 => { Condition => '$$self{Model} =~ /^(DSC-(RX1|RX1R))\b/', Name => 'SonyISO', Format => 'int16u', ValueConv => '3.125*(2**(21-($val/256)))', PrintConv => 'sprintf("%.0f",$val)', }, 0x1278 => { Condition => '$$self{Model} =~ /^(SLT-A58|ILCE-(3000|3500)|NEX-3N|DSC-(HX300|HX50V|WX60|WX80|WX200|WX300|TX30))\b/', Name => 'FocalLength', Format => 'int16u', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val =~ / ?mm//; $val', }, 0x127a => { Condition => '$$self{Model} =~ /^(SLT-A58|ILCE-(3000|3500)|NEX-3N|DSC-(HX300|HX50V|WX60|WX80|WX200|WX300|TX30))\b/', Name => 'MinFocalLength', Format => 'int16u', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val =~ / ?mm//; $val', }, 0x127c => { # may give 0 for fixed focal length lenses Condition => '$$self{Model} =~ /^(SLT-A58|ILCE-(3000|3500)|NEX-3N|DSC-(HX300|HX50V|WX60|WX80|WX200|WX300|TX30))\b/', Name => 'MaxFocalLength', Format => 'int16u', RawConv => '$val || undef', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val =~ / ?mm//; $val', }, 0x1280 => { Condition => '$$self{Model} =~ /^(SLT-A58|ILCE-(3000|3500)|NEX-3N|DSC-(HX300|HX50V|WX60|WX80|WX200|WX300|TX30))\b/', Name => 'SonyISO', Format => 'int16u', ValueConv => '3.125*(2**(21-($val/256)))', PrintConv => 'sprintf("%.0f",$val)', }, 0x1870 => { Name => 'LensParameters', Condition => '$$self{Model} !~ /^(DSC-|Stellar)/', Format => 'int16s[16]', Unknown => 1, # (not sure how these are applied) PrintConv => 'sprintf("%5d" . " %5d" x 15, split(" ",$val))', }, # 0x1890 - same as 0x1892, but has value 3 for 50mm F1.4 ZA, DT 18-135mm and for 70-400mm G II: meaning ?? 0x1891 => { Name => 'LensFormat', Condition => '$$self{Model} !~ /^(DSC-|Stellar)/', PrintConv => { 0 => 'Unknown', 1 => 'APS-C', 2 => 'Full-frame', }, }, 0x1892 => { Name => 'LensMount', DataMember => 'LensMount', RawConv => '$$self{LensMount} = $val; $$self{Model} =~ /^(DSC-|Stellar)/ ? undef : $val', PrintConv => { 0 => 'Unknown', 1 => 'A-mount', 2 => 'E-mount', }, }, 0x1893 => { #JR Name => 'LensType2', Condition => '$$self{LensMount} == 2', Format => 'int16u', SeparateTable => 1, PrintConv => \%sonyLensTypes2, }, 0x1896 => { Name => 'LensType', Condition => '$$self{LensMount} == 1', Priority => 0, #PH (just to be safe) Format => 'int16u', #PH SeparateTable => 1, ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)', PrintConv => \%sonyLensTypes, }, #0x1914 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x1918 => { Name => 'SonyImageHeight', Format => 'int16u' }, #0x192e => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x1930 => { Name => 'SonyImageHeight', Format => 'int16u' }, ); %Image::ExifTool::Sony::Tag2010f = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', NOTES => 'Valid for DSC-RX100M2, DSC-QX10/QX100.', WRITABLE => 1, FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x0004 => { %releaseMode2, Format => 'int32u' }, # NOT at offset 0x08 ! #0x002e => { Name => 'SonyImageWidth3', Format => 'int16u' }, #0x0042 => { Name => 'SonyImageWidth3', Format => 'int16u' }, 0x0050 => { %dynamicRangeOptimizer2010 }, 0x01e0 => { Name => 'MeterInfo', Format => 'int32u[486]', Unknown => 1, SubDirectory => { TagTable => 'Image::ExifTool::Sony::MeterInfo' }, }, 0x1014 => { %releaseMode2010 }, 0x1018 => { %releaseMode2 }, 0x1024 => { %flashMode2010 }, 0x102a => { %gain2010 }, 0x102c => { %brightnessValue2010 }, 0x1030 => { %dynamicRangeOptimizer2010 }, 0x1034 => { %hdr2010 }, 0x1038 => { %exposureComp2010 }, 0x104e => { %pictureProfile2010 }, 0x104f => { %pictureProfile2010 }, 0x1053 => { %pictureEffect2010 }, 0x1060 => { %quality2010 }, 0x1064 => { %meteringMode2010 }, 0x1065 => { %exposureProgram2010 }, 0x106c => { Name => 'WB_RGBLevels', Format => 'int16u[3]' }, #0x1096 => { Name => 'SonyImageWidth3', Format => 'int16u' }, #0x10aa => { Name => 'SonyImageWidth3', Format => 'int16u' }, 0x1134 => { Name => 'FocalLength', Format => 'int16u', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val =~ / ?mm//; $val', }, 0x1136 => { Name => 'MinFocalLength', Format => 'int16u', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val =~ / ?mm//; $val', }, 0x1138 => { Name => 'MaxFocalLength', Format => 'int16u', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val =~ / ?mm//; $val', }, 0x113c => { Name => 'SonyISO', Format => 'int16u', ValueConv => '3.125*(2**(21-($val/256)))', PrintConv => 'sprintf("%.0f",$val)', }, #0x1914 => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x1918 => { Name => 'SonyImageHeight', Format => 'int16u' }, #0x192e => { Name => 'SonyImageWidth', Format => 'int16u' }, #0x1930 => { Name => 'SonyImageHeight', Format => 'int16u' }, ); %Image::ExifTool::Sony::Tag2010g = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', NOTES => q{ Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350, ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2. }, WRITABLE => 1, FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x0004 => { %releaseMode2, Format => 'int32u' }, # NOT at offset 0x08 ! 0x0050 => { %dynamicRangeOptimizer2010 }, 0x020c => { %releaseMode2010 }, 0x0210 => { %releaseMode2 }, 0x021c => { %flashMode2010 }, 0x0222 => { %gain2010 }, 0x0224 => { %brightnessValue2010 }, 0x0228 => { %dynamicRangeOptimizer2010 }, 0x022c => { %hdr2010 }, 0x0230 => { %exposureComp2010 }, 0x0246 => { %pictureProfile2010 }, 0x0247 => { %pictureProfile2010 }, 0x024b => { %pictureEffect2010 }, 0x0258 => { %quality2010 }, 0x025c => { %meteringMode2010 }, 0x025d => { %exposureProgram2010 }, 0x0264 => { Name => 'WB_RGBLevels', Format => 'int16u[3]' }, 0x032c => { Name => 'FocalLength', Format => 'int16u', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val =~ / ?mm//; $val', }, 0x032e => { Name => 'MinFocalLength', Format => 'int16u', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val =~ / ?mm//; $val', }, 0x0330 => { # may give 0 for fixed focal length lenses Name => 'MaxFocalLength', Format => 'int16u', RawConv => '$val || undef', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val =~ / ?mm//; $val', }, 0x0344 => { Name => 'SonyISO', Format => 'int16u', ValueConv => '3.125*(2**(21-($val/256)))', PrintConv => 'sprintf("%.0f",$val)', }, 0x0388 => { Name => 'MeterInfo', Format => 'int32u[486]', Unknown => 1, SubDirectory => { TagTable => 'Image::ExifTool::Sony::MeterInfo' }, }, 0x189c => { Name => 'LensParameters', Condition => '$$self{Model} !~ /^DSC-/', Format => 'int16s[16]', Unknown => 1, PrintConv => 'sprintf("%5d" . " %5d" x 15, split(" ",$val))', }, # 0x18bc - same as 0x18be, but has value 3 for 50mm F1.4 ZA, DT 18-135mm and for 70-400mm G II: meaning ?? 0x18bd => { Name => 'LensFormat', Condition => '$$self{Model} !~ /^DSC-/', PrintConv => { 0 => 'Unknown', 1 => 'APS-C', 2 => 'Full-frame', }, }, 0x18be => { Name => 'LensMount', DataMember => 'LensMount', RawConv => '$$self{LensMount} = $val; $$self{Model} =~ /^DSC-/ ? undef : $val', PrintConv => { 0 => 'Unknown', 1 => 'A-mount', 2 => 'E-mount', }, }, 0x18bf => { #JR Name => 'LensType2', Condition => '$$self{LensMount} == 2', Format => 'int16u', SeparateTable => 1, PrintConv => \%sonyLensTypes2, }, 0x18c2 => { Name => 'LensType', Condition => '$$self{LensMount} == 1', Priority => 0, #PH (just to be safe) Format => 'int16u', #PH SeparateTable => 1, ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)', PrintConv => \%sonyLensTypes, }, # 0x1940 => { Name => 'SonyImageWidth', Format => 'int16u' }, # 0x1944 => { Name => 'SonyImageHeight', Format => 'int16u' }, # 0x195a => { Name => 'SonyImageWidth', Format => 'int16u' }, # 0x195c => { Name => 'SonyImageHeight', Format => 'int16u' }, ); %Image::ExifTool::Sony::Tag2010h = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', NOTES => q{ Valid for DSC-HX90V/RX1RM2/RX10M2/RX100M4/WX500, ILCE-7RM2/7SM2. }, WRITABLE => 1, FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x0004 => { %releaseMode2, Format => 'int32u' }, 0x0050 => { %dynamicRangeOptimizer2010 }, 0x020c => { %releaseMode2010 }, 0x0210 => { %releaseMode2 }, 0x021c => { %flashMode2010 }, 0x0222 => { %gain2010 }, 0x0224 => { %brightnessValue2010 }, 0x0228 => { %dynamicRangeOptimizer2010 }, 0x022c => { %hdr2010 }, 0x0230 => { %exposureComp2010 }, 0x0246 => { %pictureProfile2010 }, 0x0247 => { %pictureProfile2010 }, 0x024b => { %pictureEffect2010 }, 0x0258 => { %quality2010 }, 0x025c => { %meteringMode2010 }, 0x025d => { %exposureProgram2010 }, 0x0264 => { Name => 'WB_RGBLevels', Format => 'int16u[3]' }, 0x032c => { Name => 'FocalLength', Format => 'int16u', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val =~ / ?mm//; $val', }, 0x032e => { Name => 'MinFocalLength', Format => 'int16u', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val =~ / ?mm//; $val', }, 0x0330 => { # may give 0 for fixed focal length lenses Name => 'MaxFocalLength', Format => 'int16u', RawConv => '$val || undef', ValueConv => '$val / 10', ValueConvInv => '$val * 10', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val =~ / ?mm//; $val', }, 0x0346 => { Name => 'SonyISO', Format => 'int16u', ValueConv => '3.125*(2**(21-($val/256)))', PrintConv => 'sprintf("%.0f",$val)', }, 0x0388 => { Name => 'MeterInfo', Format => 'int32u[486]', Unknown => 1, SubDirectory => { TagTable => 'Image::ExifTool::Sony::MeterInfo' }, }, 0x18cc => { Name => 'LensParameters', Condition => '$$self{Model} !~ /^DSC-/', Format => 'int16s[16]', Unknown => 1, PrintConv => 'sprintf("%5d" . " %5d" x 15, split(" ",$val))', }, # 0x18ec - same as 0x18ee, but has value 3 for LensType>=65, except SAL300F28G2 0x18ed => { Name => 'LensFormat', Condition => '$$self{Model} !~ /^DSC-/', PrintConv => { 0 => 'Unknown', 1 => 'APS-C', 2 => 'Full-frame', }, }, 0x18ee => { Name => 'LensMount', DataMember => 'LensMount', RawConv => '$$self{LensMount} = $val; $$self{Model} =~ /^DSC-/ ? undef : $val', PrintConv => { 0 => 'Unknown', 1 => 'A-mount', 2 => 'E-mount', }, }, 0x18ef => { #JR Name => 'LensType2', Condition => '$$self{LensMount} == 2', Format => 'int16u', SeparateTable => 1, PrintConv => \%sonyLensTypes2, }, 0x18f2 => { Name => 'LensType', Condition => '$$self{LensMount} == 1', Priority => 0, #PH (just to be safe) Format => 'int16u', #PH SeparateTable => 1, ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)', PrintConv => \%sonyLensTypes, }, # 0x1970 => { Name => 'SonyImageWidth', Format => 'int16u' }, # 0x1974 => { Name => 'SonyImageHeight', Format => 'int16u' }, # 0x198a => { Name => 'SonyImageWidth', Format => 'int16u' }, # 0x198c => { Name => 'SonyImageHeight', Format => 'int16u' }, ); # possible metering information (ref JR) %Image::ExifTool::Sony::MeterInfo = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, NOTES => q{ Information possibly related to metering. Extracted only if the Unknown option is used. }, # # 162 'triplets' of 3 int32u numbers: (k,n1,n2) # These appear to relate to two sets of brightness distribution over the image area: # Set 1: 7 rows of 9 # Set 2: 9 rows of 11 # # Exact meaning presently unknown, however: # n1 ranges from 0 (black) - appr. 1300 (bright white) # n2 ranges from 0 (black) - appr. 142000 (bright white), i.e. roughly factor 100 higher # Many panorama images: all 0 # Flash images: n2 = n1 # k maybe some kind of 'gain' or multiplication factor ? # k distribution over the image as function of Aspect-Ratio is as follows: # # 3:2 image 16:9 image 4:3 image # set 1: # # 12 12 12 12 12 12 12 12 12 12 12 12 15 18 15 12 12 12 9 12 12 12 12 12 12 12 9 # 12 12 12 12 12 12 12 12 12 12 12 12 15 18 15 12 12 12 9 12 12 12 12 12 12 12 9 # 16 16 16 16 16 16 16 16 16 12 12 12 15 18 15 12 12 12 12 16 16 16 16 16 16 16 12 # 16 16 16 16 16 16 16 16 16 12 12 12 15 18 15 12 12 12 12 16 16 16 16 16 16 16 12 # 16 16 16 16 16 16 16 16 16 12 12 12 15 18 15 12 12 12 12 16 16 16 16 16 16 16 12 # 12 12 12 12 12 12 12 12 12 12 12 12 15 18 15 12 12 12 9 12 12 12 12 12 12 12 9 # 12 12 12 12 12 12 12 12 12 12 12 12 15 18 15 12 12 12 9 12 12 12 12 12 12 12 9 # # set 2: # # 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 15 18 15 12 12 12 12 9 9 12 12 12 12 12 12 12 9 9 # 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 15 18 15 12 12 12 12 9 9 12 12 12 12 12 12 12 9 9 # 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 15 18 15 12 12 12 12 9 9 12 12 12 12 12 12 12 9 9 # 16 16 16 16 16 16 16 16 16 16 16 12 12 12 12 15 18 15 12 12 12 12 12 12 16 16 16 16 16 16 16 12 12 # 16 16 16 16 16 16 16 16 16 16 16 12 12 12 12 15 18 15 12 12 12 12 12 12 16 16 16 16 16 16 16 12 12 # 16 16 16 16 16 16 16 16 16 16 16 12 12 12 12 15 18 15 12 12 12 12 12 12 16 16 16 16 16 16 16 12 12 # 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 15 18 15 12 12 12 12 9 9 12 12 12 12 12 12 12 9 9 # 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 15 18 15 12 12 12 12 9 9 12 12 12 12 12 12 12 9 9 # 12 12 12 12 12 12 12 12 12 12 12 8 8 8 8 10 12 10 8 8 8 8 9 9 12 12 12 12 12 12 12 9 9 # # Usually, in the center, the numbers of set 1 row 2-6 match with set 2 row 3-7, except for first and last 2 columns. # 0x0000 => { Name => 'MeterInfo1Row1', %meterInfo1 }, 0x006c => { Name => 'MeterInfo1Row2', %meterInfo1 }, 0x00d8 => { Name => 'MeterInfo1Row3', %meterInfo1 }, 0x0144 => { Name => 'MeterInfo1Row4', %meterInfo1 }, 0x01b0 => { Name => 'MeterInfo1Row5', %meterInfo1 }, 0x021c => { Name => 'MeterInfo1Row6', %meterInfo1 }, 0x0288 => { Name => 'MeterInfo1Row7', %meterInfo1 }, 0x02f4 => { Name => 'MeterInfo2Row1', %meterInfo2 }, 0x0378 => { Name => 'MeterInfo2Row2', %meterInfo2 }, 0x03fc => { Name => 'MeterInfo2Row3', %meterInfo2 }, 0x0480 => { Name => 'MeterInfo2Row4', %meterInfo2 }, 0x0504 => { Name => 'MeterInfo2Row5', %meterInfo2 }, 0x0588 => { Name => 'MeterInfo2Row6', %meterInfo2 }, 0x060c => { Name => 'MeterInfo2Row7', %meterInfo2 }, 0x0690 => { Name => 'MeterInfo2Row8', %meterInfo2 }, 0x0714 => { Name => 'MeterInfo2Row9', %meterInfo2 }, ); %Image::ExifTool::Sony::Tag900b = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, # 0x0000 - always 174 (e) 0x0002 => { Name => 'FacesDetected', PrintConv => { 0 => '0', 98 => '1', 57 => '2', 93 => '3', 77 => '4', 33 => '5', 168 => '6', 241 => '7', 115 => '8', }, }, # 0x00bc - always 98 (221 (e)) 0x00bd => { Condition => '$$self{Model} !~ /^DSLR-(A450|A500|A550)$/', # always 98 for A450/A500/A550: exclude Name => 'FaceDetection', PrintConv => { 0 => 'Off', 98 => 'On', }, }, ); %Image::ExifTool::Sony::Tag9050 = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', WRITABLE => 1, FIRST_ENTRY => 0, DATAMEMBER => [ 0x0105 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, NOTES => q{ Data for tags 0x9050, 0x94xx and 0x2010 is encrypted by a simple substitution cipher, but the deciphered values are listed below. }, 0x0000 => { Condition => '$$self{Model} !~ /^(NEX-|Lunar|ILCE-|DSC-|Stellar)/', Name => 'MaxAperture', # (at current focal length) # seen values from 17 - 48 ValueConv => '2 ** (($val/8 - 1.06) / 2)', ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0x0001 => { Condition => '$$self{Model} !~ /^(NEX-|Lunar|ILCE-|DSC-|Stellar)/', Name => 'MinAperture', # (at current focal length) # seen values from 80 - 95 ValueConv => '2 ** (($val/8 - 1.06) / 2)', ValueConvInv => 'int((log($val) * 2 / log(2) + 1) * 8 + 0.5)', PrintConv => 'sprintf("%.0f",$val)', PrintConvInv => '$val', }, # 0x0002 and 0x0004 (int16u) for SLT: # appears to be difference between used FNumber and MaxAperture, 256 being +1 APEX or stop # however, not always valid e.g. bracketing, Shutter-prio e.a. # difference between 0x0002 and 0x0004 mostly 0.0, 0.1 or 0.2 stops. #### July 2015: ILCE-(7RM2|7SM2) offsets appear to be different ... exclude from existing tags 0x0031 => { #JR Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(7RM2|7SM2))/', Name => 'FlashStatus', RawConv => '$$self{FlashFired} = $val', PrintConv => { 0 => 'No Flash present', 2 => 'Flash Inhibited', # seen for ILCE-7/7R continuous, panorama, HDR mode 64 => 'Built-in Flash present', 65 => 'Built-in Flash Fired', 66 => 'Built-in Flash Inhibited', # seen for panorama, HDR, burst mode 128 => 'External Flash present', # seen for NEX-5N/5T 129 => 'External Flash Fired', # seen for SLT-A99V, ILCE-7R, NEX-5N/5R }, }, 0x0032 => { #13 Name => 'ImageCount', # this seems to be valid for the A37,A57,A65,A77,A99, and possibly the NEX-5N/7 # but I haven't seen a count over 65536, so the Format is not confirmed - PH # - not valid for the DSC-RX100 or RX1, so exclude all DSC models Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(7RM2|7SM2))/', #PH Format => 'int32u', Notes => 'total number of image exposures made by the camera', RawConv => '$val & 0x00ffffff', }, 0x003a => { # appr. same value as Exif ExposureTime, but longer in HDR-modes Name => 'SonyExposureTime', Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(7RM2|7SM2))/', Format => 'int16u', ValueConv => '$val ? 2 ** (16 - $val/256) : 0', ValueConvInv => '$val ? int((16 - log($val) / log(2)) * 256 + 0.5) : 0', PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }, 0x003c => { Name => 'SonyFNumber', Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(7RM2|7SM2))/', Format => 'int16u', ValueConv => '2 ** (($val/256 - 16) / 2)', ValueConvInv => '(log($val)*2/log(2)+16)*256', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0x003f => { Name => 'ReleaseMode2', Condition => '$$self{Model} !~ /^(DSC-|Stellar|ILCE-(7RM2|7SM2))/', %releaseMode2, }, 0x004c => { # only ILCE-7/7R/7S/7M2/5000/5100/6000/QX1 - but appears not valid when flash is used ... Name => 'ImageCount2', Condition => '($$self{Model} =~ /^(ILCE-(7(R|S|M2)?|[56]000|5100|QX1))\b/) and (($$self{FlashFired} & 0x01) != 1)', Format => 'int32u', RawConv => '$val & 0x00ffffff', }, 0x0051 => { # only ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, but hours usually different from SonyDateTime - UTC? # appears not valid (all '0') when flash is used, panorama, hdr modes ... Name => 'SonyDateTime2', Condition => '$$self{Model} =~ /^(ILCE-(7(R|S|M2)?|[56]000|5100|QX1))\b/', Groups => { 2 => 'Time' }, Shift => 'Time', Format => 'undef[6]', ValueConv => q{ my @v = unpack('C*', $val); return undef unless $v[0] > 0; return sprintf("20%.2d:%.2d:%.2d %.2d:%.2d:%.2d", @v) }, ValueConvInv => q{ my @v = ($val =~ /\d+/g); return undef unless @v == 6 and ($v[0]-=2000) >= 0; return pack('C*', @v); }, PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,0)', }, 0x0067 => { Name => 'ReleaseMode2', Condition => '$$self{Model} !~ /^(DSC-|Stellar|SLT-A(65|77)V?|Lunar|NEX-(5N|7|VG20E)|ILCE-(7RM2|7SM2))/', %releaseMode2, }, 0x007c => { #JR valid for ILCE and most NEX Name => 'InternalSerialNumber', # (NC) Condition => '$$self{Model} !~ /^(DSC-|Stellar|Lunar|NEX-(5N|7|VG20E)|SLT-|HV|ILCA-|ILCE-(7RM2|7SM2))/', Format => 'int8u[4]', PrintConv => 'unpack "H*", pack "C*", split " ", $val', }, 0x00f0 => { #JR valid for SLT/ILCA models Name => 'InternalSerialNumber', # (NC) Condition => '$$self{Model} =~ /^(SLT-|HV|ILCA-)/', Format => 'int8u[5]', PrintConv => 'unpack "H*", pack "C*", split " ", $val', PrintConvInv => 'join " ", unpack "C*", pack "H*", $val', }, ##### ILCE-(7RM2|7SM2): offsets +8 0x0039 => { Condition => '$$self{Model} =~ /^(ILCE-(7RM2|7SM2))/', Name => 'FlashStatus', RawConv => '$$self{FlashFired} = $val', PrintConv => { 0 => 'No Flash present', 2 => 'Flash Inhibited', # seen for ILCE-7/7R continuous, panorama, HDR mode 64 => 'Built-in Flash present', 65 => 'Built-in Flash Fired', 66 => 'Built-in Flash Inhibited', # seen for panorama, HDR, burst mode 128 => 'External Flash present', # seen for NEX-5N/5T 129 => 'External Flash Fired', # seen for SLT-A99V, ILCE-7R, NEX-5N/5R }, }, 0x003a => { Name => 'ImageCount', Condition => '$$self{Model} =~ /^(ILCE-(7RM2|7SM2))/', Format => 'int32u', Notes => 'total number of image exposures made by the camera', RawConv => '$val & 0x00ffffff', }, ##### ILCE-(7RM2|7SM2): offsets +12 (x0c): 0x0046 => { # appr. same value as Exif ExposureTime, but longer in HDR-modes Name => 'SonyExposureTime', Condition => '$$self{Model} =~ /^(ILCE-(7RM2|7SM2))/', Format => 'int16u', ValueConv => '$val ? 2 ** (16 - $val/256) : 0', ValueConvInv => '$val ? int((16 - log($val) / log(2)) * 256 + 0.5) : 0', PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }, 0x0048 => { Name => 'SonyFNumber', Condition => '$$self{Model} =~ /^(ILCE-(7RM2|7SM2))/', Format => 'int16u', ValueConv => '2 ** (($val/256 - 16) / 2)', ValueConvInv => '(log($val)*2/log(2)+16)*256', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0x004b => { Name => 'ReleaseMode2', Condition => '$$self{Model} =~ /^(ILCE-(7RM2|7SM2))/', %releaseMode2, }, 0x0058 => { # only ILCE-(7RM2|7SM2) - but appears not valid when flash is used ... Name => 'ImageCount2', Condition => '($$self{Model} =~ /^(ILCE-(7RM2|7SM2))\b/) and (($$self{FlashFired} & 0x01) != 1)', Format => 'int32u', RawConv => '$val & 0x00ffffff', }, 0x005d => { # only ILCE-(7RM2|7SM2), but only minutes-seconds ??? Name => 'SonyDateTime2', Condition => '$$self{Model} =~ /^(ILCE-(7RM2|7SM2))\b/', Groups => { 2 => 'Time' }, Shift => 'Time', Format => 'undef[6]', ValueConv => q{ my @v = unpack('C*', $val); # return undef unless $v[0] > 0; return sprintf("20%.2d:%.2d:%.2d %.2d:%.2d:%.2d", @v) }, ValueConvInv => q{ my @v = ($val =~ /\d+/g); return undef unless @v == 6 and ($v[0]-=2000) >= 0; return pack('C*', @v); }, PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,0)', }, 0x0073 => { Name => 'ReleaseMode2', Condition => '$$self{Model} =~ /^(ILCE-(7RM2|7SM2))/', %releaseMode2, }, 0x0088 => { Name => 'InternalSerialNumber', # (NC) Condition => '$$self{Model} =~ /^(ILCE-(7RM2|7SM2))/', Format => 'int8u[6]', PrintConv => 'unpack "H*", pack "C*", split " ", $val', }, ##### ILCE-(7RM2|7SM2): same offsets for lens info tags # 0x0104 - same as 0x0105, but has value 3 for 50mm F1.4 ZA, DT 18-135mm and for 70-400mm G II: meaning ?? 0x0105 => { Name => 'LensMount', DataMember => 'LensMount', RawConv => '$$self{LensMount} = $val; $$self{Model} =~ /^(DSC-|Stellar)/ ? undef : $val', PrintConv => { 0 => 'Unknown', 1 => 'A-mount', 2 => 'E-mount', }, }, 0x0106 => { Name => 'LensFormat', Condition => '$$self{Model} !~ /^(DSC-|Stellar)/', PrintConv => { 0 => 'Unknown', 1 => 'APS-C', 2 => 'Full-frame', }, }, 0x0107 => { Name => 'LensType2', Condition => '$$self{LensMount} == 2', Format => 'int16u', SeparateTable => 1, PrintConv => \%sonyLensTypes2, }, # 0x0108 - 128 for Sony E-mount lenses, 0 for all other 0x0109 => { Name => 'LensType', Condition => '$$self{LensMount} == 1', Priority => 0, #PH (just to be safe) Format => 'int16u', #PH Notes => 'SLT models, and NEX with A-mount lenses', SeparateTable => 1, # has a value of 0 for E-mount lenses (values 0x80xx) ValueConvInv => '($val & 0xff00) == 0x8000 ? 0 : int($val)', PrintConv => \%sonyLensTypes, }, # 0x0115 and 0x0116, or 0x0116 and 0x0117: # give the same info as the first and last bytes of LensSpec, # but also for older Sony and Minolta lenses where all LensSpec bytes are 0. 0x0115 => { Name => 'LensSpecFeatures', Condition => '$$self{Model} =~ /^(SLT-A(37|57|65|77)V?|Lunar|NEX-(F3|5N|7|VG20E))/', Format => 'undef[2]', ValueConv => 'join " ", unpack "H2H2", $val', ValueConvInv => sub { my @a = split(" ", shift); return @a == 2 ? pack 'CC', hex($a[0]), hex($a[1]) : undef; }, PrintConv => \&PrintLensSpec, PrintConvInv => 'Image::ExifTool::Sony::PrintInvLensSpec($val, $self, 1)', }, 0x0116 => { Name => 'LensSpecFeatures', Condition => '$$self{Model} !~ /^(DSC-|Stellar|SLT-A(37|57|65|77)V?|Lunar|NEX-(F3|5N|7|VG20E))/', Format => 'undef[2]', ValueConv => 'join " ", unpack "H2H2", $val', ValueConvInv => sub { my @a = split(" ", shift); return @a == 2 ? pack 'CC', hex($a[0]), hex($a[1]) : undef; }, PrintConv => \&PrintLensSpec, PrintConvInv => 'Image::ExifTool::Sony::PrintInvLensSpec($val, $self, 1)', }, # 0x0122 => {Name=>'9050_LensType',Format=>'int16u',Condition =>'$$self{Model}=~/^(SLT-A(37|57|65|77)V?|Lunar|NEX-(F3|5N|7|VG20E))/'}, # 0x0123 => {Name=>'9050_LensType',Format=>'int16u',Condition =>'$$self{Model}=~/^(SLT-A(58|99V?)|HV|ILCA-77M2|NEX-(3N|5R|5T|6|VG30E|VG900)|ILCE-(3000|3500|5000|5100|6000|7|7R|7S|7M2|QX1))/'}, # 0x012d => {Name=>'9050_LensType',Format=>'int16u',Condition =>'$$self{Model}=~/^(SLT-A(37|57|65|77)V?|Lunar|NEX-(F3|5N|7|VG20E))/'}, # 0x012e => {Name=>'9050_LensType',Format=>'int16u',Condition =>'$$self{Model}=~/^(SLT-A(58|99V?)|HV|ILCA-77M2|NEX-(3N|5R|5T|6|VG30E|VG900)|ILCE-(3000|3500|5000|5100|6000|7|7R|7S|7M2|QX1))/'}, # ImageCount3 = ImageCount for SLT-A58, ILCE, ILCA, NEX-3N # ImageCount-1 for SLT-A37,A57,A65,A77,A99, NEX-F3,5N,5R,5T,6,7, sometimes 0 # ImageCount-2 for NEX-VG, and often 0; "ImageCount-2" also seen on a few A99V images # The offset for ImageCount3 changes with firmware version for the ILCE-7/7R/7S/7M2, so don't decode it for now: # ILCE-7M2/7S: 0x01a0 (firmware 1.0x, 1.1x), 0x01b6 (firmware 1.20, 1.21, 2.00) # ILCE-7/7R: 0x01aa (firmware 1.0x, 1.1x), 0x01c0 (firmware 1.20, 1.21, 2.00) 0x01a0 => { Name => 'ImageCount3', Format => 'int32u', RawConv => '$val == 0 ? undef : $val', Condition => '$$self{Model} =~ /^(ILCE-(5100|QX1)|ILCA-77M2)/', }, 0x01aa => { Name => 'ImageCount3', Format => 'int32u', RawConv => '$val == 0 ? undef : $val', Condition => '$$self{Model} =~ /^(SLT-A(58|99V?)|HV|NEX-(3N|5R|5T|6|VG900|VG30E)|ILCE-([356]000|3500))\b/', }, 0x01bd => { Name => 'ImageCount3', Format => 'int32u', RawConv => '$val == 0 ? undef : $val', Condition => '$$self{Model} =~ /^(SLT-A(37|57|65|77)V?|Lunar|NEX-(F3|5N|7|VG20E))/' }, 0x01cb => { Name => 'ImageCount3', Format => 'int32u', RawConv => '$val == 0 ? undef : $val', Condition => '$$self{Model} =~ /^(ILCE-(7RM2|7SM2))/', }, # 0x0222 => {Name=>'9050_LensType2',Format=>'int16u',Condition =>'$$self{Model}=~/^(ILCE-(5100|7S|7M2|QX1))/'}, # 0x0224 => {Name=>'9050_LensType', Format=>'int16u',Condition =>'$$self{Model}=~/^(ILCE-(5100|7S|7M2|QX1)|ILCA-77M2)/'}, # 0x0229 => {Name=>'9050_LensType2',Format=>'int16u',Condition =>'$$self{Model}=~/^(NEX-(5R|5T|6|VG30E|VG900))/'}, # 0x022b => {Name=>'9050_LensType', Format=>'int16u',Condition =>'$$self{Model}=~/^(NEX-(5R|5T|6|VG30E|VG900))/'}, # 0x022c => {Name=>'9050_LensType2',Format=>'int16u',Condition =>'$$self{Model}=~/^(ILCE-(3000|3500|5000|6000|7|7R)|NEX-3N)\b/'}, # 0x022e => {Name=>'9050_LensType', Format=>'int16u',Condition =>'$$self{Model}=~/^(ILCE-(3000|3500|5000|6000|7|7R)|NEX-3N|SLT-A(58|99V?)|HV)\b/'}, # 0x0231 => {Name=>'9050_LensSpecFeatures',Format=>'undef[2]',Condition=>'$$self{Model}=~/^(ILCE-(7S|7M2|5100|QX1)|ILCA-77M2)/'}, # 0x0238 => {Name=>'9050_LensSpecFeatures',Format=>'undef[2]',Condition=>'$$self{Model}=~/^(NEX-(5R|5T|6|VG30E|VG900))/'}, # 0x023b => {Name=>'9050_LensSpecFeatures',Format=>'undef[2]',Condition=>'$$self{Model}=~/^(SLT-A(58|99V?)|HV|ILCE-(3000|3500|5000|6000|7|7R)|NEX-3N)\b/'}, # 0x023c => {Name=>'9050_LensType2',Format=>'int16u',Condition =>'$$self{Model}=~/^(Lunar|NEX-(F3|5N|7|VG20E))/'}, # 0x023e => {Name=>'9050_LensType', Format=>'int16u',Condition =>'$$self{Model}=~/^(SLT-A(37|57|65|77)V?|Lunar|NEX-(F3|5N|7|VG20E)|ILCE-(5100|7S|7M2|QX1)|ILCA-77M2)/'}, # 0x0245 => {Name=>'9050_LensType', Format=>'int16u',Condition =>'$$self{Model}=~/^(NEX-(5R|5T|6|VG30E|VG900))/'}, # 0x0248 => {Name=>'9050_LensType', Format=>'int16u',Condition =>'$$self{Model}=~/^(SLT-A(58|99V?)|HV|ILCE-(3000|3500|5000|6000|7|7R)|NEX-3N)\b/'}, # 0x0249 => {Name=>'9050_LensType', Format=>'int16u',Condition =>'$$self{Model}=~/^(ILCE-(5100|7S|7M2|QX1)|ILCA-77M2)/'}, # 0x024a => {Name=>'9050_LensSpecFeatures',Format=>'undef[2]',Condition=>'$$self{Model}=~/^(SLT-A(37|57|65|77)V?|Lunar|NEX-(F3|5N|7|VG20E))/'}, # 0x0250 => {Name=>'9050_LensType', Format=>'int16u',Condition =>'$$self{Model}=~/^(NEX-(5R|5T|6|VG30E|VG900))/'}, # 0x0253 => {Name=>'9050_LensType', Format=>'int16u',Condition =>'$$self{Model}=~/^(SLT-A(58|99V?)|HV|ILCE-(3000|3500|5000|6000|7|7R|7S|7M2)|NEX-3N)\b/'}, # 0x0257 => {Name=>'9050_LensType', Format=>'int16u',Condition =>'$$self{Model}=~/^(SLT-A(37|57|65|77)V?|Lunar|NEX-(F3|5N|7|VG20E))/'}, # 0x0262 => {Name=>'9050_LensType', Format=>'int16u',Condition =>'$$self{Model}=~/^(SLT-A(37|57|65|77)V?|Lunar|NEX-(F3|5N|7|VG20E))/'}, # 0x031b => {%gain2010,Condition=>'$$self{Model}=~/^(DSC-RX100M3|ILCA-77M2|ILCE-(5100|7S|7M2|QX1))/'}, # 0x032c => {%gain2010,Condition=>'$$self{Model}=~/^(NEX-(5R|5T|6|VG30E|VG900))/'}, # 0x032f => {%gain2010,Condition=>'$$self{Model}=~/^(DSC-RX10|SLT-A(58|99V?)|HV|ILCE-(3000|3500|5000|6000|7|7R)|NEX-3N)\b/'}, # 0x0350 => {%gain2010,Condition=>'$$self{Model}=~/^(SLT-A(37|57)|NEX-F3)/'}, # 0x037b => {%gain2010,Condition=>'$$self{Model}=~/^(SLT-A(65|77)V?|Lunar|NEX-(7|VG20E))/'}, ); %Image::ExifTool::Sony::Tag9400a = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', NOTES => 'Valid for many DSC, NEX and SLT models', WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x0008 => { %sequenceImageNumber }, #PH 0x000c => { %sequenceFileNumber }, #PH 0x0010 => { %releaseMode2 }, 0x0012 => { Name => 'DigitalZoom', Condition => '$$self{Model} !~ /^(SLT-(A65|A77)V?|NEX-(5N|7|VG20E)|Lunar|DSC-(HX10V|HX20V|HX200V|TX20|TX55|TX300V|WX30|WX70))\b/', PrintConv => { 0 => 'No', 1 => 'Yes', }, }, # 0x0013 - Flash fired 0=no, 1=yes # 0x0014 - related to flash / RedEyeReduction ? # 0x0015 - CameraType: 1=HDR, 2=DSC, 3=SLT/NEX 0x001a => { #PH Name => 'ShotNumberSincePowerUp', Format => 'int32u', }, # 0x001e - increments by 4 or 6 or 8 each shutter release press since power up # 0x001f - 0=most pictures, 1='Self-timer/Self-portrait', 2='Self-portrait (2 people)', # 3='Continuous Self-timer', 26='Sweep Panorama' (PH, RX100) # 0x0021 - maybe related to Image Stabilization or Smile Shutter ? 0x0022 => { Name => 'SequenceLength', PrintConv => { 0 => 'Continuous', # (RX100 too) 1 => '1 shot', 2 => '2 shots', # (Background defocus, 3D Image) 3 => '3 shots', # (HDR, WB Bracketing) (RX100, also continuous bracket) 4 => '4 shots', # seen for DSC-WX300 in Superior-Auto Anti-Motion-Blur 5 => '5 shots', # (PH, RX100) 6 => '6 shots', # (Multi Frame NR, Anti Motion blur, Hand-held Twilight) 10 => '10 shots', # (HX9V Burst) 100 => 'Continuous - iSweep Panorama', # (HX9V) 200 => 'Continuous - Sweep Panorama', }, }, # 0x0027 - 1=single exposure, 2=multi-exposure (eg. pano,some superior auto) (PH, RX100) 0x0028 => { Name => 'CameraOrientation', # (also RX100 - PH) PrintConv => { 1 => 'Horizontal (normal)', 3 => 'Rotate 180', 6 => 'Rotate 90 CW', 8 => 'Rotate 270 CW', }, }, 0x0029 => { Name => 'Quality2', # (also RX100 - PH) PrintConv => { 0 => 'JPEG', 1 => 'RAW', 2 => 'RAW + JPEG', 3 => 'JPEG + MPO', # 3D images }, }, # 0x002b - FacesDetected_OK 0=no, 1=yes appears valid for SLT, but not for NEX and DSC-HX9V # 0x0030 - long exposure noise reduction used 0=no, 1=yes (PH, RX100) # 0x0031 - smile shutter used 0=no, 1=yes (PH, RX100) # 0x0033 - 0 for DSC-HX9V, 8 for SLT, NEX # 0x0034 and 0x0038 - different offset for HX9V and SLT/NEX, but similar numbers, non-zero when flash fired 0x0044 => { Condition => '$$self{Model} =~ /^(SLT-|HV|NEX-|Lunar|DSC-RX|Stellar)/', # not valid for most other DSC and HDR models Name => 'SonyImageHeight', Format => 'int16u', PrintConv => '$val > 0 ? 8*$val : "n.a."', }, 0x0052 => { Name => 'ModelReleaseYear', Condition => '$$self{Model} =~ /^(SLT-|HV|NEX-|Lunar|DSC-RX|Stellar)/', # not valid for most other DSC and HDR models Format => 'int8u', PrintConv => 'sprintf("20%.2d", $val)', }, ); %Image::ExifTool::Sony::Tag9400b = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', NOTES => q{ Valid for NEX-3N, ILCE-3000/3500, SLT-A58, DSC-WX60, DSC-WX300, DSC-RX100M2, DSC-HX50V, DSC-QX10/QX100. }, WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x0008 => { %sequenceImageNumber }, #PH 0x000c => { %sequenceFileNumber }, #PH 0x0010 => { %releaseMode2 }, 0x0012 => { Name => 'DigitalZoom', PrintConv => { 0 => 'No', 1 => 'Yes', }, }, # 0x0013 - Flash fired 0=no, 1=yes # 0x0014 - related to flash / RedEyeReduction ? # 0x0015 - CameraType: 1=HDR, 2=DSC, 3=SLT/NEX 0x0016 => { #PH Name => 'ShotNumberSincePowerUp', Format => 'int32u', }, 0x001e => { Name => 'SequenceLength', PrintConv => { 0 => 'Continuous', 1 => '1 shot', 2 => '2 shots', 3 => '3 shots', 4 => '4 shots', 5 => '5 shots', 6 => '6 shots', 10 => '10 shots', 100 => 'Continuous - iSweep Panorama', 200 => 'Continuous - Sweep Panorama', }, }, 0x0024 => { Name => 'CameraOrientation', PrintConv => { 1 => 'Horizontal (normal)', 3 => 'Rotate 180', 6 => 'Rotate 90 CW', 8 => 'Rotate 270 CW', }, }, 0x0025 => { Name => 'Quality2', PrintConv => { 0 => 'JPEG', 1 => 'RAW', 2 => 'RAW + JPEG', 3 => 'JPEG + MPO', # 3D images }, }, # 0x0027 - FacesDetected_OK 0=no, 1=yes # 0x002c - long exposure noise reduction used 0=no, 1=yes (PH, RX100) 0x003f => { Name => 'SonyImageHeight', Format => 'int16u', PrintConv => '$val > 0 ? 8*$val : "n.a."', }, 0x0046 => { # but Panorama images give incorrect result Name => 'ModelReleaseYear', Format => 'int8u', PrintConv => 'sprintf("20%.2d", $val)', }, ); %Image::ExifTool::Sony::Tag9400c = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', WRITABLE => 1, NOTES => q{ Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350, ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2. }, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x0009 => { %releaseMode2 }, 0x000a => { Name => 'ShotNumberSincePowerUp', Format => 'int32u', }, 0x0012 => { %sequenceImageNumber }, 0x0016 => { Name => 'SequenceLength', PrintConv => { 0 => 'Continuous', 1 => '1 shot', 2 => '2 shots', 3 => '3 shots', 4 => '4 shots', 5 => '5 shots', 6 => '6 shots', 10 => '10 shots', 100 => 'Continuous - iSweep Panorama', 200 => 'Continuous - Sweep Panorama', }, }, 0x001a => { %sequenceFileNumber }, 0x001e => { Name => 'SequenceLength', PrintConv => { 0 => 'Continuous', 1 => '1 file', 2 => '2 files', 3 => '3 files', 5 => '5 files', 10 => '10 files', # seen for DSC-WX500 with burst of 10 shots }, }, 0x0029 => { Name => 'CameraOrientation', PrintConv => { 1 => 'Horizontal (normal)', 3 => 'Rotate 180', 6 => 'Rotate 90 CW', 8 => 'Rotate 270 CW', }, }, 0x002a => { Name => 'Quality2', PrintConv => { 0 => 'JPEG', 1 => 'RAW', 2 => 'RAW + JPEG', 3 => 'JPEG + MPO', # 3D images }, }, 0x0047 => { Name => 'SonyImageHeight', Format => 'int16u', PrintConv => '$val > 0 ? 8*$val : "n.a."', }, 0x0053 => { Name => 'ModelReleaseYear', Format => 'int8u', PrintConv => 'sprintf("20%.2d", $val)', }, ); # PH (RX100) %Image::ExifTool::Sony::Tag9402 = ( PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, DATAMEMBER => [ 0x02 ], PRIORITY => 0, 0x02 => { Name => 'TempTest1', DataMember => 'TempTest1', Hidden => 1, RawConv => '$$self{TempTest1}=$val; $$self{OPTIONS}{Unknown}<2 ? undef : $val', }, 0x04 => { Name => 'AmbientTemperature', # this (and many other values) are only valid if 0x02 is 255 (why?) Condition => '$$self{TempTest1} == 255', Format => 'int8s', # (verified for negative temperature) PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, 0x16 => { #JR Name => 'FocusMode', Mask => 0x7f, # (often +128, not sure what upper bit is for) PrintConv => { 0 => 'Manual', 2 => 'AF-S', 3 => 'AF-C', 4 => 'AF-A', # seen in ILCE-6000 images 6 => 'DMF', # 7 => 'AF-D', # not for DSC, NEX, ILCE ... }, }, 0x17 => { Name => 'AFAreaMode', PrintConv => { 0 => 'Multi', 1 => 'Center', 2 => 'Spot', # (NC) seen for DSC-WX300 3 => 'Flexible Spot', 10 => 'Selective (for Miniature effect)', # seen for DSC-HX30V,TX30,WX60,WX100 11 => 'Zone', #JR (NC) seen in ILCE-7R images 12 => 'Expanded Flexible Spot', #JR (NC) first seen for HX90V, which is first DSC to have this mode ... 14 => 'Tracking', 15 => 'Face Tracking', 255 => 'Manual', }, }, # 0x24, 0x26: factor 10 for NEX and ILCE, factor 100 for DSC # 0x24, 0x26, 0x28, 0x2a: inconsistent for A-mount lenses on NEX/ILCE: some correct, some 0, some incorrect ... # 0x28 - not valid for DSC-[HTW]X models, or DSC-RX100 # 0x24 => { # same values as Exif FocalLength # Name => 'FocalLength', # Format => 'int16u', # RawConv => '$val || undef', # ValueConv => '$val / ($$self{Model}=~/DSC/ ? 100 : 10)', # ValueConvInv => '$val * ($$self{Model}=~/DSC/ ? 100 : 10)', # PrintConv => 'sprintf("%.1f mm",$val)', # PrintConvInv => '$val =~ s/ ?mm//; $val', # }, # 0x26 => { # usually identical to 0x24 or 0 # Name => 'FocalLength', # Format => 'int16u', # ValueConv => '$val / ($$self{Model}=~/DSC/ ? 100 : 10)', # ValueConvInv => '$val * ($$self{Model}=~/DSC/ ? 100 : 10)', # PrintConv => 'sprintf("%.1f mm",$val)', # PrintConvInv => '$val =~ s/ ?mm//; $val', # }, # 0x28 => { # values slightly different from Exif FocalLength # Name => 'FocalLength2', # Format => 'int16u', # RawConv => '$val || undef', # ValueConv => '$val / 10', # ValueConvInv => '$val * 10', # PrintConv => 'sprintf("%.1f mm",$val)', # PrintConvInv => '$val =~ s/ ?mm//; $val', # }, # 0x2a => { # usually identical to 0x28 or 0 # Name => 'FocalLength2', # Format => 'int16u', # ValueConv => '$val / 10', # ValueConvInv => '$val * 10', # PrintConv => 'sprintf("%.1f mm",$val)', # PrintConvInv => '$val =~ s/ ?mm//; $val', # }, # 0x002c => { # # seen values from 80 - 255 (= infinity) -- see Composite:FocusDistance2 below # Name => 'FocusPosition2', # Condition => '$$self{Model} !~ /^(DSC-|Stellar)/', # }, 0x002d => { # usually same as 0x002c, but some differences # seen values from 80 - 255 (= infinity) -- see Composite:FocusDistance2 below Name => 'FocusPosition2', Condition => '$$self{Model} !~ /^(DSC-|Stellar)/', }, # 0x8a - int32u: some sort of accumulated time or something since power up # (doesn't increment during continuous shooting and at some other times) ); # PH (RX100) %Image::ExifTool::Sony::Tag9403 = ( PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, DATAMEMBER => [ 0x04 ], 0x04 => { # seen values 0,2,3,18,32,49,50,83,148 # CameraTemperature is valid for all values except 0,148 Name => 'TempTest2', DataMember => 'TempTest2', Hidden => 1, RawConv => '$$self{TempTest2}=$val; $$self{OPTIONS}{Unknown}<2 ? undef : $val', }, 0x05 => { Name => 'CameraTemperature', # (maybe SensorTemperature? - heats up when taking movies) Condition => '$$self{TempTest2} and $$self{TempTest2} < 100', Format => 'int8s', # have seen as low as -1 for AmbientTemperature of -18 PrintConv => '"$val C"', PrintConvInv => '$val=~s/ ?C//; $val', }, # 0x0f - same as 0x05 # 0x18 - maybe another temperature? ); # Tag9404 (ref JR) %Image::ExifTool::Sony::Tag9404a = ( PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x0019 => { Name => 'LensZoomPosition', Format => 'int16u', Condition => '$$self{Model} !~ /^SLT-/', PrintConv => 'sprintf("%.0f%%",$val/10.24)', PrintConvInv => '$val=~s/ ?%$//; $val * 10.24', }, ); %Image::ExifTool::Sony::Tag9404b= ( PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x001e => { Name => 'LensZoomPosition', Format => 'int16u', Condition => '$$self{Model} !~ /^(SLT-|HV|ILCA-)/', PrintConv => 'sprintf("%.0f%%",$val/10.24)', PrintConvInv => '$val=~s/ ?%$//; $val * 10.24', }, 0x0020 => { # seen values from 80 - 255 (= infinity) -- see Composite:FocusDistance2 below Name => 'FocusPosition2', Condition => '$$self{Model} =~ /^(SLT-|HV|ILCA-)/', }, ); # Tag9405 (ref JR) %Image::ExifTool::Sony::Tag9405a = ( PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', WRITABLE => 1, FIRST_ENTRY => 0, PRIORITY => 0, DATAMEMBER => [ 0x0604 ], GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, NOTES => 'Valid for SLT, NEX, ILCE-3000/3500 and several DSC models.', 0x0601 => { Name => 'DistortionCorrection', PrintConv => { 0 => 'None', 1 => 'Applied', }, }, # 0x0602 - same as 0x0604, but has value 3 for 50mm F1.4 ZA, DT 18-135mm and for 70-400mm G II: meaning ?? 0x0603 => { Name => 'LensFormat', Condition => '$$self{Model} !~ /^(DSC-|Stellar)/', PrintConv => { 0 => 'Unknown', 1 => 'APS-C', 2 => 'Full-frame', }, }, 0x0604 => { Name => 'LensMount', DataMember => 'LensMount', RawConv => '$$self{LensMount} = $val; $$self{Model} =~ /^(DSC-|Stellar)/ ? undef : $val', PrintConv => { 0 => 'Unknown', 1 => 'A-mount', 2 => 'E-mount', # 6 - seen for A58 panorama image }, }, 0x0605 => { Name => 'LensType2', Condition => '$$self{LensMount} == 2', Format => 'int16u', Notes => 'E-mount lenses', SeparateTable => 1, PrintConv => \%sonyLensTypes2, }, 0x0608 => { Name => 'LensType', Condition => '$$self{LensMount} == 1', Format => 'int16u', Notes => 'A-mount lenses on SLT and NEX', SeparateTable => 1, PrintConv => \%sonyLensTypes, }, 0x06ca => { Name => 'LensParameters', Condition => '$$self{Model} !~ /^(DSC-|Stellar)/', Format => 'int16s[16]', Unknown => 1, PrintConv => 'sprintf("%5d" . " %5d" x 15, split(" ",$val))', }, ); # Tag9405b (ref JR) %Image::ExifTool::Sony::Tag9405b = ( PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', WRITABLE => 1, FIRST_ENTRY => 0, PRIORITY => 0, DATAMEMBER => [ 0x005e ], GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, NOTES => q{ Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350, ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2. }, 0x0004 => { Name => 'SonyISO', Format => 'int16u', ValueConv => '3.125*(2**(21-($val/256)))', PrintConv => 'sprintf("%.0f",$val)', }, 0x0006 => { Name => 'BaseISO', Format => 'int16u', ValueConv => '3.125*(2**(21-($val/256)))', PrintConv => 'sprintf("%.0f",$val)', }, 0x000a => { %gain2010 }, 0x000e => { # appr. same value as Exif ExposureTime, but shorter in HDR-modes Name => 'SonyExposureTime2', Format => 'int16u', ValueConv => '$val ? 2 ** (16 - $val/256) : 0', ValueConvInv => '$val ? int((16 - log($val) / log(2)) * 256 + 0.5) : 0', PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }, 0x0010 => { Name => 'ExposureTime', Format => 'rational32u', PrintConv => '$val ? Image::ExifTool::Exif::PrintExposureTime($val) : "Bulb"', # (Bulb NC) PrintConvInv => 'lc($val) eq "bulb" ? 0 : Image::ExifTool::Exif::ConvertFraction($val)', }, 0x0014 => { # but often odd results for DSC models: exclude Name => 'SonyFNumber', Format => 'int16u', Condition => '$$self{Model} !~ /^DSC-/', ValueConv => '2 ** (($val/256 - 16) / 2)', ValueConvInv => '(log($val)*2/log(2)+16)*256', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0x0016 => { Name => 'SonyMaxApertureValue', # (at current focal length) Format => 'int16u', ValueConv => '2 ** (($val/256 - 16) / 2)', ValueConvInv => '(log($val)*2/log(2)+16)*256', PrintConv => 'sprintf("%.1f",$val)', PrintConvInv => '$val', }, 0x0024 => { %sequenceImageNumber }, 0x0034 => { %releaseMode2 }, 0x0042 => { Name => 'HighISONoiseReduction', PrintConv => { 0 => 'Off', 1 => 'Low', 2 => 'Normal', 3 => 'High', }, }, 0x0044 => { Name => 'LongExposureNoiseReduction', PrintConv => { 0 => 'Off', 1 => 'On', # (unused or dark subject) }, }, 0x0046 => { %pictureEffect2010 }, 0x0048 => { %exposureProgram2010 }, 0x004a => { Name => 'CreativeStyle', PrintConv => { 0 => 'Standard', 1 => 'Vivid', 2 => 'Neutral', 3 => 'Portrait', 4 => 'Landscape', 5 => 'B&W', 6 => 'Clear', 7 => 'Deep', 8 => 'Light', 9 => 'Sunset', 10 => 'Night View/Portrait', 11 => 'Autumn Leaves', 13 => 'Sepia', }, }, 0x0052 => { Name => 'Sharpness', Format => 'int8s', PrintConv => '$val > 0 ? "+$val" : $val', PrintConvInv => '$val', }, 0x005b => { Name => 'DistortionCorrection', PrintConv => { 0 => 'None', 1 => 'Applied', }, }, # 0x005c - same as 0x005e, but has value 3 for 50mm F1.4 ZA, DT 18-135mm and for 70-400mm G II: meaning ?? 0x005d => { Name => 'LensFormat', Condition => '$$self{Model} !~ /^DSC-/', PrintConv => { 0 => 'Unknown', 1 => 'APS-C', 2 => 'Full-frame', }, }, 0x005e => { Name => 'LensMount', DataMember => 'LensMount', RawConv => '$$self{LensMount} = $val; $$self{Model} =~ /^DSC-/ ? undef : $val', PrintConv => { 0 => 'Unknown', 1 => 'A-mount', 2 => 'E-mount', }, }, 0x0060 => { Name => 'LensType2', Condition => '$$self{LensMount} == 2', Format => 'int16u', Notes => 'E-mount lenses', SeparateTable => 1, PrintConv => \%sonyLensTypes2, }, 0x0062 => { Name => 'LensType', Condition => '$$self{LensMount} == 1', Format => 'int16u', Notes => 'A-mount lenses on SLT and NEX', SeparateTable => 1, PrintConv => \%sonyLensTypes, }, 0x0064 => { Name => 'LensParameters', Condition => '$$self{Model} !~ /^DSC-/', Format => 'int16s[16]', Unknown => 1, PrintConv => 'sprintf("%5d" . " %5d" x 15, split(" ",$val))', }, 0x0342 => { Name => 'LensZoomPosition', Condition => '$$self{Model} !~ /^(ILCA-|ILCE-(7RM2|7SM2)|DSC-(HX90V|RX10M2|RX100M4|WX500))/', Format => 'int16u', PrintConv => 'sprintf("%.0f%%",$val/10.24)', PrintConvInv => '$val=~s/ ?%$//; $val * 10.24', }, 0x035a => { Name => 'LensZoomPosition', Condition => '$$self{Model} =~ /^(ILCE-(7RM2|7SM2)|DSC-(HX90V|RX10M2|RX100M4|WX500))/', Format => 'int16u', PrintConv => 'sprintf("%.0f%%",$val/10.24)', PrintConvInv => '$val=~s/ ?%$//; $val * 10.24', }, ); # Tag9406 (ref JR) %Image::ExifTool::Sony::Tag9406 = ( PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, # 0x0000: 1 for A37, A57, A65, A77, NEX-5N, 7, F3, VG20 # 2 for A58/99V, NEX-3N/5R/5T/6/VG30/VG900, ILCE-3000/7/7R/5000/6000 # 0x0001+0x0002: Int16u, seen 580 - 770: similar to "BatteryUnknown" ?? # 0x0005: int8u, seen 73 - 117: maybe Fahrenheit? Higher than "AmbientTemperature", but same trend. 0x0005 => { Name => 'BatteryTemperature', ValueConv => '($val - 32) / 1.8', # convert to Celsius ValueConvInv => '$val * 1.8 + 32', PrintConv => 'sprintf("%.1f C",$val)', PrintConvInv => '$val=~s/\s*C//; $val', }, # 0x0006: usually 0, seen non-zero values only for A99V and ILCE-7/7R: BatteryLevel Grip ? 0x0006 => { Name => 'BatteryLevelGrip1', Condition => '$$valPt !~ /^\x00/', # only valid when not 0 PrintConv => '"$val%"', PrintConvInv => '$val=~s/\s*\%//; $val', }, # 0x0007: seen values from 8 - 105, decreasing in sequences of images: BatteryLevel 0x0007 => { Name => 'BatteryLevel', PrintConv => '"$val%"', PrintConvInv => '$val=~s/\s*\%//; $val', }, # 0x0008: usually 255 or 0 (ILCE-7/7R), seen other values only for A99V and ILCE-7/7R when 0x0006 not 0. # A99V with grip can have 3 batteries: => Grip 2; # but ILCE-7/7R with grip can have max 2, and as all ILCE-7/7R samples give >100 values, exclude... 0x0008 => { Name => 'BatteryLevelGrip2', Condition => '$$valPt !~ /^[\x00\xff]/ and $$self{Model} !~ /^(ILCE-(7|7R))$/', # only when not 0 or 255 and not for ILCE-7/7R PrintConv => '"$val%"', PrintConvInv => '$val=~s/\s*\%//; $val', }, # 0x0009-0x001a: looks like 9 Int16u values # 0x0022: 0 or 1 for A99, NEX-5R, 6 # 0x0025: 0 or 1 for other SLT and NEX (0x0022, 0x0023, 0x0024 = 255) ); # Tag940a (ref PH, decoded mainly from A77) %Image::ExifTool::Sony::Tag940a = ( PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'These tags are currently extracted for SLT models only.', # 0x00 - 10(A65,A77,NEX-5N,7,VG20E), 11(A37,A57,A99,NEX-5R,6,F3,RX1,RX100), # 9(HX9V), 4,68,86,110(panoramas) - ref JR 0x04 => { Name => 'AFPointsSelected', Format => 'int32u', PrintConvColumns => 2, PrintConv => { # verified for A77 firmware 1.03 and 1.07 and A99 firmware 1.00, # but there were inconsistencies with my A77 firmware 1.04 samples - PH 0 => '(none)', 0x00007801 => 'Center Zone', 0x0001821c => 'Right Zone', 0x000605c0 => 'Left Zone', 0x7fffffff => '(all)', # 0xffffffff - 'n/a' - RX1 and NEX models always give this # (on Wide AFAreaMode, outer focus points are dropped # at progressively higher digital zoom ratios, ref JR) BITMASK => { 0 => 'Center', # (1.04 gave this for Upper-middle and Near Left) 1 => 'Top', # (1.04 didn't give this value) 2 => 'Upper-right', # (1.04 OK) 3 => 'Right', # (1.04 didn't give this value) 4 => 'Lower-right', # (1.04 gave this for Bottom) 5 => 'Bottom', # (1.04 gave this for Lower-middle) 6 => 'Lower-left', # (1.04 gave this for Left and Lower Far Left) 7 => 'Left', # (1.04 gave this for Far Left) 8 => 'Upper-left', # (1.04 OK) 9 => 'Far Right', # (1.04 gave this for Upper Far Right and Right) 10 => 'Far Left', # (1.04 didn't give this value) 11 => 'Upper-middle', # (1.04 gave this for Top) 12 => 'Near Right', # (1.04 gave this for Center) 13 => 'Lower-middle', # (1.04 gave this for Lower-left and Near Right) 14 => 'Near Left', # (1.04 didn't give this value) 15 => 'Upper Far Right',# (1.04 didn't give this value) 16 => 'Lower Far Right',# (1.04 OK, but gave this for Far Right and Lower-right too) 17 => 'Lower Far Left', # (1.04 didn't give this value) 18 => 'Upper Far Left', # (1.04 OK) # higher bits may be used in panorama images - ref JR }, }, }, # 0x0a - int16u: 0,1,2,3 # 0xa6 - 8 bytes face detection info ?; starts with 1, otherwise all 0 ); # Tag940c (ref JR) %Image::ExifTool::Sony::Tag940c = ( PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', WRITABLE => 1, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, DATAMEMBER => [ 0x0008 ], NOTES => 'NEX and ILCE models only.', # 0x0001 - 0 for all NEX and ILCE-3000/3500, 20 for all other ILCE (17 for ILCE samples from Sony.net) # 0x0008 - LensMount, but different values from Tag9405-0x0105 and Tag9050-0x0604. # don't know what difference is between values '1' and '5' ... 0x0008 => { Name => 'LensMount2', # ? maybe some other meaning ? (A-mount adapter-only images give 0) RawConv => '$$self{LensMount} = $val', PrintConv => { 0 => 'Unknown', 1 => 'A-mount (1)', 4 => 'E-mount', 5 => 'A-mount (5)', }, }, # 0x0009 - LensType3: # This tag appears to also indicate adapter info, similar to CameraSettings3-0x03f7 for the original NEX-3/5. # (Tag9405-0x0605 and Tag9050-0x0107 LensType2 always give '0' for adapters/A-mount lenses.) # - seen a few instances of 0x0009 indicating an E-mount lens, but 0xb027 LensType indicating an A-mount lens: # possibly due to adapter info not being read/reset correctly ? 0x0009 => { Name => 'LensType3', RawConv => '(($$self{LensMount} != 0) or ($val > 0 and $val < 32784)) ? $val : undef', Format => 'int16u', SeparateTable => 1, PrintConv => \%sonyLensTypes2, }, 0x000b => { Name => 'CameraE-mountVersion', Format => 'int16u', PrintConv => 'sprintf("%x.%.2x",$val>>8,$val&0xff)', PrintConvInv => 'my @a=split(/\./,$val);(hex($a[0])<<8)|hex($a[1])', # camera Firmware versions: # 1.00 - 1.04: seen in CameraSettings3 0x03f3 for NEX-3/5/5C/C3/VG10E # 1.14: NEX-5N/5R/6/7/F3/VG20E/VG30E/VG900 v1.00, NEX-5N v1.01, NEX-3N v0.90 # 1.20: NEX-3N v1.00, NEX-6 v1.01, NEX-7 v1.02, ILCE-3000 v1.00, ILCE-3500 v1.01 # 1.30: NEX-5T v1.00, NEX-6 v1.02/v1.03, NEX-7 v1.03 # 1.31: ILCE-7/7R v0.95/v1.00/v1.01, ILCE-5000 # 1.40: ILCE-7/7R v1.02/v1.10, ILCE-7S v1.00, ILCE-5100/6000/QX1 # 1.50: ILCE-7/7R/7S v1.20/v2.00, ILCE-7M2/7RM2/7SM2 }, 0x000d => { Name => 'LensE-mountVersion', Format => 'int16u', PrintConv => 'sprintf("%x.%.2x",$val>>8,$val&0xff)', PrintConvInv => 'my @a=split(/\./,$val);(hex($a[0])<<8)|hex($a[1])', # lens models: # 0.00: Unknown lenses/adapters # 1.00: SEL18200LE, Sigma DN, Tamron Di III, Zeiss Touit # 1.07: (Ver.01) original E-lenses (SEL16F28, SEL18200, SEL1855, SEL24F18Z, SEL30M35, SEL50F18, SEL55210) and LA-EA1 # 1.08: LA-EA1 (Ver.02), Metabones Smart # 1.14: LA-EA2 # 1.20: (Ver.02) firmware-updated E-lenses (SEL1855, SEL24F18Z, SEL30M35, SEL50F18, SEL55210), # newer E-lenses (SEL1018, SEL1670Z, SEL20F28, SEL35F18, SELP1650, SELP18105G, SELP18200) or LA-EA3 # 1.30: LA-EA4 # 1.31: original FE-lenses (SEL2470Z, SEL2870, SEL35F28Z, SEL55F18Z), SEL1850 # 1.35: SEL70200G, SEL55210 (Black?, seen with ILCE-3500) # 1.40: SEL1635Z, SEL24240, SEL35F14Z, SELP28135G, Zeiss Loxia 35mm/50mm # 1.50: SEL28F20, SEL90M28G, Zeiss Batis 25mm/85mm, Zeiss Loxia 21mm }, 0x0015 => { Name => 'LensFirmwareVersion', Format => 'int8u', PrintConv => 'sprintf("Ver.%.2x",$val)', PrintConvInv => '$val=~/Ver\.//; hex($val)', # 0x00: Sony Ver.00 # 0x01: Sony Ver.01 # 0x02: Sony Ver.02 # 0x16: Metabones V0.16 # 0x19: Metabones V0.19 # 0x22: Metabones V0.22 # 0x24: Metabones V0.24 # 0x30: Metabones V0.30 # 0x32: Metabones V0.32 # 0x41: Metabones V0.41 (ILCE-7RM2 with Metabones Smart IV) }, # 0x0016 - 0x003f: non-0 data present when: 0x0001>0 AND 0x0008=4(E-mount) AND 0x000f<255 ); # AFInfo (SLT models only) (ref PH, decoded mainly from A77) %Image::ExifTool::Sony::AFInfo = ( PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', WRITABLE => 1, FIRST_ENTRY => 0, PRIORITY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, DATAMEMBER => [ 0x02 ], IS_SUBDIR => [ 0x11 ], NOTES => 'These tags are currently extracted for SLT models only.', # first 4 bytes (deciphered) (ref JR): # 0 1 1 0 for A37, A57, A58 # 2 1 1 0 for A65V # 2 1 2 0 for A77V # 0 1 2 0 for A99V # 1 1 3 0 for ILCA-77M2 # 0 0 0 0 for NEX and ILCE-3000/3500 # 1 0 0 0 for ILCE-5000/5100/6000/7/7M2/7R/7S/QX1 # 6 0 0 0 for ILCE-7RM2/7SM2 # 0 2 0 0 for NEX/ILCE with LA-EA2/EA4 Phase-AF adapter # 2 0 0 0 seen for a few NEX-5N images # 2 2 0 0 seen for a few NEX-5N/7 images with LA-EA2 adapter 0x02 => { Name => 'AFType', RawConv => '$$self{AFType} = $val', PrintConv => { # 0 => '?? n.a.', # seen on some A99V images with non-AF (Samyang) lens 1 => '15-point', 2 => '19-point', 3 => '79-point', # (NC) seen for ILCA-77M2 }, }, ### decoding for SLT; ILCA-77M2 (AFType == 3) uses different offsets: see below 0x04 => { Name => 'AFStatusActiveSensor', Condition => '$$self{Model} !~ /^ILCA-/', %Image::ExifTool::Minolta::afStatusInfo, }, 0x07 => [ # the active AF sensor { Name => 'AFPoint', Condition => '$$self{AFType} == 1', Notes => 'models with 15-point AF', PrintConvColumns => 2, PrintConv => \%afPoint15, },{ Name => 'AFPoint', Condition => '$$self{AFType} == 2', Notes => 'models with 19-point AF', PrintConvColumns => 2, PrintConv => \%afPoint19, }, ], 0x08 => [ # the AF sensor in focus at focus time (shutter release half press) { Name => 'AFPointInFocus', Condition => '$$self{AFType} == 1', Notes => 'models with 15-point AF', PrintConvColumns => 2, PrintConv => { %afPoint15, 255 => '(none)', }, },{ Name => 'AFPointInFocus', Condition => '$$self{AFType} == 2', Notes => 'models with 19-point AF', PrintConvColumns => 2, PrintConv => { %afPoint19, 255 => '(none)', }, }, ], 0x09 => [ # the AF sensor in focus at shutter release (shutter release full press) { Name => 'AFPointAtShutterRelease', Condition => '$$self{AFType} == 1', Notes => 'models with 15-point AF', PrintConvColumns => 2, PrintConv => { %afPoint15, 30 => '(out of focus)', }, },{ Name => 'AFPointAtShutterRelease', Condition => '$$self{AFType} == 2', Notes => 'models with 19-point AF', PrintConvColumns => 2, PrintConv => { %afPoint19, 30 => '(out of focus)', }, }, ], 0x0a => { Name => 'AFAreaMode', Condition => '$$self{Model} !~ /^ILCA-/', PrintConv => { 0 => 'Wide', 1 => 'Spot', 2 => 'Local', 3 => 'Zone', }, }, 0x0b => { Name => 'FocusMode', Condition => '$$self{Model} !~ /^ILCA-/', PrintConvColumns => 2, # validated for A77 firmware 1.03, 1.04 and 1.07 and A99 # - not confirmed for A37,A57 and A65 which also write this tag PrintConv => { 0 => 'Manual', 2 => 'AF-S', 3 => 'AF-C', 4 => 'AF-A', 6 => 'DMF', 7 => 'AF-D', # (unique to A99) }, }, 0x11 => [ #JR { Name => 'AFStatus15', Condition => '$$self{AFType} == 1', Format => 'int16s[18]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::AFStatus15' }, },{ Name => 'AFStatus19', Condition => '$$self{AFType} == 2', Format => 'int16s[30]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::AFStatus19' }, }, ], # 0x004d - 18 or 30 int16 values # 0x0089 - 18 or 30 int16 values # 0x00b1 - 18 or 30 int16 values # 0x0121 - 18 or 30 int16s values, similar to 0x11 AFStatus # 0x016e - SLT: 4 bytes indicating 'AFPointsUsed', identical to first 4 bytes of 0x2020 for A58/A99V 0x016e => { Name => 'AFPointsUsed', Condition => '$$self{Model} !~ /^ILCA-/', Notes => 'SLT models only', Format => 'int32u', PrintConvColumns => 2, PrintConv => { 0 => '(none)', BITMASK => { 0 => 'Center', 1 => 'Top', 2 => 'Upper-right', 3 => 'Right', 4 => 'Lower-right', 5 => 'Bottom', 6 => 'Lower-left', 7 => 'Left', 8 => 'Upper-left', 9 => 'Far Right', 10 => 'Far Left', 11 => 'Upper-middle', 12 => 'Near Right', 13 => 'Lower-middle', 14 => 'Near Left', 15 => 'Upper Far Right', 16 => 'Lower Far Right', 17 => 'Lower Far Left', 18 => 'Upper Far Left', }, }, }, # 0x017b and 0x017c also have to do with AFMicroAdj (ref JR) 0x017d => { #PH (verified for the SLT-A77/A99; other SLT models don't have this setting - ref JR) # (different from AFMicroAdjValue because it is 0 when the adjustment is off) Name => 'AFMicroAdj', Condition => '$$self{Model} !~ /^ILCA-/', Format => 'int8s', }, 0x017e => { #JR Name => 'ExposureProgram', Condition => '$$self{Model} !~ /^ILCA-/', Priority => 0, SeparateTable => 'ExposureProgram3', PrintConv => \%sonyExposureProgram3, }, # 0x01b8 - 65 AF Info blocks of 180 bytes each for SLT (ref JR) # In each block, the 9th, 10th and 11th byte appear to relate to AFPoint as at offsets 0x07, 0x08, 0x09 above.. # Possibly, these blocks relate to sequential focusing attempts and/or object tracking, # the first byte being an Index or Counter. # The last block before the block with index 0, appears to relate to the AF data at ShutterRelease. # 0xf38,0x1208,0x14d8,0x158c,0x1640,(and more) - 0 if AFMicroAdj is On, 1 if Off # 0x1ab6 - 0x80 if AFMicroAdj is On, 0 if Off # tags also related to AFPoint (PH, A77): # 0x11ec, 0x122a, 0x1408, 0x1446, 0x14bc, 0x1f86, # 0x14fa, 0x1570, 0x1572, 0x15ae, 0x1f48 ### decoding for ILCA-77M2, AFType == 3 0x0005 => { #JR Name => 'FocusMode', Condition => '$$self{Model} =~ /^ILCA-/', Notes => 'ILCA models only', Writable => 'int8u', Priority => 0, PrintConv => { 0 => 'Manual', 2 => 'AF-S', 3 => 'AF-C', 4 => 'AF-A', # 6 => 'DMF', # not yet seen # 7 => 'AF-D', # not yet seen }, }, # 0x0010 - for ILCA-77M2: 10 bytes identical to 0x2020, and probably indicating 'AFPointsUsed' (ref JR) 0x0010 => { Name => 'AFPointsUsed', Condition => '$$self{Model} =~ /^ILCA-/', Format => 'int8u[10]', BitsPerWord => 8, BitsTotal => 80, PrintConv => { 0 => '(none)', BITMASK => { %afPoints79 }, }, }, # 0x0037, 0x0038, 0x0039 similar to 0x07, 0x08, 0x09, but using numbers from 0-94 for ILCA-77M2 0x0037 => { # the active AF sensor Name => 'AFPoint', Condition => '$$self{AFType} == 3', PrintConv => { %afPoints79_940e, 255 => '(none)', }, }, 0x0038 => { # the AF sensor in focus at focus time (shutter release half press) Name => 'AFPointInFocus', Condition => '$$self{AFType} == 3', PrintConv => { %afPoints79_940e, 255 => '(none)', }, }, 0x0039 => { # the AF sensor in focus at shutter release (shutter release full press) Name => 'AFPointAtShutterRelease', Condition => '$$self{AFType} == 3', PrintConv => { %afPoints79_940e, 95 => '(none)', }, }, 0x003a => { #JR Name => 'AFAreaMode', Condition => '$$self{Model} =~ /^ILCA-/', PrintConv => { 0 => 'Wide', 1 => 'Center', 2 => 'Flexible Spot', 3 => 'Zone', 4 => 'Expanded Flexible Spot', # (NC) }, }, 0x003b => { Name => 'AFStatusActiveSensor', Condition => '$$self{Model} =~ /^ILCA-/', %Image::ExifTool::Minolta::afStatusInfo, }, 0x0043 => { Name => 'ExposureProgram', Condition => '$$self{Model} =~ /^ILCA-/', Priority => 0, SeparateTable => 'ExposureProgram3', PrintConv => \%sonyExposureProgram3, }, # 0x004e and 0x004f also have to do with AFMicroAdj (ref JR) 0x0050 => { #PH (ILCA-A77M2, to be confirmed for other ILCA models) Name => 'AFMicroAdj', Condition => '$$self{Model} =~ /^ILCA-/', Format => 'int8s', }, # 0x007d - AFStatus79 - 95 int16s values for the ILCA-77M2 79 AF points + 15 cross + 1 F2.8 0x007d => { Name => 'AFStatus79', Condition => '$$self{AFType} == 3', Format => 'int16s[95]', SubDirectory => { TagTable => 'Image::ExifTool::Sony::AFStatus79' }, }, # 0x013b - 95 int8u values # 0x01ab - 95 int8u values # 0x021b - 95 int16s values, similar to 0x007d AFStatus79 # 0x04c0 - 45 AF Info blocks of 244 bytes each for ILCA ); %Image::ExifTool::Sony::Tag940e = ( #JR PROCESS_PROC => \&ProcessEnciphered, WRITE_PROC => \&WriteEnciphered, CHECK_PROC => \&Image::ExifTool::CheckBinaryData, FORMAT => 'int8u', FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, NOTES => 'E-mount models.', # (see comment in AFInfo for deciphered values of first 4 bytes for various models) # 0x0004 - if 0x0001 == 2: LA-EA2/EA4 15-point SLT Phase-detect AF adapter used: # start of 164-byte AF Info Blocks, possibly the 11th byte might be the AFPoint. # ILCE-7M2: 40 Blocks of 164 bytes (probably also for 7RM2: tbc) # other NEX/ILCE: 74 blocks of 164 bytes # 0x1a06 onwards - first seen for ILCE-7RM2: appears to be some kind of metering image 0x1a06 => { Name => 'TiffMeteringImageWidth', Condition => '$$self{Model} =~ /^(ILCE-(7RM2|7SM2))\b/' }, 0x1a07 => { Name => 'TiffMeteringImageHeight', Condition => '$$self{Model} =~ /^(ILCE-(7RM2|7SM2))\b/' }, 0x1a08 => { # (2640 bytes: 1 set of 44x30 int16u values) Name => 'TiffMeteringImage', Condition => '$$self{Model} =~ /^(ILCE-(7RM2|7SM2))\b/', Format => 'undef[2640]', Notes => q{ 13(?)-bit intensity data from 1320 (1200) metering segments, extracted as a 16-bit TIFF image }, ValueConv => sub { my ($val, $et) = @_; return undef unless length $val >= 2640; return \ "Binary data 2640 bytes" unless $et->Options('Binary'); my @dat = unpack('v*', $val); # TIFF header for a 16-bit RGB 10dpi 44x30 image $val = MakeTiffHeader(44,30,3,16,10); # re-order data to RGB pixels - use same value for R, G and B my ($i, @val); for ($i=0; $i<44*30; ++$i) { # data is 13-bit (max 8191), shift left to fill 16 bits push @val, int(5041.1*log($dat[$i]+1)/log(2)), int(5041.1*log($dat[$i]+1)/log(2)), int(5041.1*log($dat[$i]+1)/log(2)); } $val .= pack('v*', @val); # add TIFF strip data return \$val; }, }, ); # AF Point Status (ref JR) %Image::ExifTool::Sony::AFStatus15 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'AF Status information for models with 15-point AF.', 0x00 => { Name => 'AFStatusUpper-left', %Image::ExifTool::Minolta::afStatusInfo }, 0x02 => { Name => 'AFStatusLeft', %Image::ExifTool::Minolta::afStatusInfo }, 0x04 => { Name => 'AFStatusLower-left', %Image::ExifTool::Minolta::afStatusInfo }, 0x06 => { Name => 'AFStatusFarLeft', %Image::ExifTool::Minolta::afStatusInfo }, 0x08 => { Name => 'AFStatusTopHorizontal', %Image::ExifTool::Minolta::afStatusInfo }, 0x0a => { Name => 'AFStatusNearRight', %Image::ExifTool::Minolta::afStatusInfo }, 0x0c => { Name => 'AFStatusCenterHorizontal', %Image::ExifTool::Minolta::afStatusInfo }, 0x0e => { Name => 'AFStatusNearLeft', %Image::ExifTool::Minolta::afStatusInfo }, 0x10 => { Name => 'AFStatusBottomHorizontal', %Image::ExifTool::Minolta::afStatusInfo }, 0x12 => { Name => 'AFStatusTopVertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x14 => { Name => 'AFStatusCenterVertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x16 => { Name => 'AFStatusBottomVertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x18 => { Name => 'AFStatusFarRight', %Image::ExifTool::Minolta::afStatusInfo }, 0x1a => { Name => 'AFStatusUpper-right', %Image::ExifTool::Minolta::afStatusInfo }, 0x1c => { Name => 'AFStatusRight', %Image::ExifTool::Minolta::afStatusInfo }, 0x1e => { Name => 'AFStatusLower-right', %Image::ExifTool::Minolta::afStatusInfo }, 0x20 => { Name => 'AFStatusUpper-middle', %Image::ExifTool::Minolta::afStatusInfo }, 0x22 => { Name => 'AFStatusLower-middle', %Image::ExifTool::Minolta::afStatusInfo }, ); # AF Point Status (ref JR) %Image::ExifTool::Sony::AFStatus19 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'AF Status information for models with 19-point AF.', 0x00 => { Name => 'AFStatusUpperFarLeft', %Image::ExifTool::Minolta::afStatusInfo }, 0x02 => { Name => 'AFStatusUpper-leftHorizontal', %Image::ExifTool::Minolta::afStatusInfo }, 0x04 => { Name => 'AFStatusFarLeftHorizontal', %Image::ExifTool::Minolta::afStatusInfo }, 0x06 => { Name => 'AFStatusLeftHorizontal', %Image::ExifTool::Minolta::afStatusInfo }, 0x08 => { Name => 'AFStatusLowerFarLeft', %Image::ExifTool::Minolta::afStatusInfo }, 0x0a => { Name => 'AFStatusLower-leftHorizontal', %Image::ExifTool::Minolta::afStatusInfo }, 0x0c => { Name => 'AFStatusUpper-leftVertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x0e => { Name => 'AFStatusLeftVertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x10 => { Name => 'AFStatusLower-leftVertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x12 => { Name => 'AFStatusFarLeftVertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x14 => { Name => 'AFStatusTopHorizontal', %Image::ExifTool::Minolta::afStatusInfo }, 0x16 => { Name => 'AFStatusNearRight', %Image::ExifTool::Minolta::afStatusInfo }, 0x18 => { Name => 'AFStatusCenterHorizontal', %Image::ExifTool::Minolta::afStatusInfo }, 0x1a => { Name => 'AFStatusNearLeft', %Image::ExifTool::Minolta::afStatusInfo }, 0x1c => { Name => 'AFStatusBottomHorizontal', %Image::ExifTool::Minolta::afStatusInfo }, 0x1e => { Name => 'AFStatusTopVertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x20 => { Name => 'AFStatusUpper-middle', %Image::ExifTool::Minolta::afStatusInfo }, 0x22 => { Name => 'AFStatusCenterVertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x24 => { Name => 'AFStatusLower-middle', %Image::ExifTool::Minolta::afStatusInfo }, 0x26 => { Name => 'AFStatusBottomVertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x28 => { Name => 'AFStatusUpperFarRight', %Image::ExifTool::Minolta::afStatusInfo }, 0x2a => { Name => 'AFStatusUpper-rightHorizontal',%Image::ExifTool::Minolta::afStatusInfo }, 0x2c => { Name => 'AFStatusFarRightHorizontal', %Image::ExifTool::Minolta::afStatusInfo }, 0x2e => { Name => 'AFStatusRightHorizontal', %Image::ExifTool::Minolta::afStatusInfo }, 0x30 => { Name => 'AFStatusLowerFarRight', %Image::ExifTool::Minolta::afStatusInfo }, 0x32 => { Name => 'AFStatusLower-rightHorizontal',%Image::ExifTool::Minolta::afStatusInfo }, 0x34 => { Name => 'AFStatusFarRightVertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x36 => { Name => 'AFStatusUpper-rightVertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x38 => { Name => 'AFStatusRightVertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x3a => { Name => 'AFStatusLower-rightVertical', %Image::ExifTool::Minolta::afStatusInfo }, ); # AF Point Status (ref JR) %Image::ExifTool::Sony::AFStatus79 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => 'AF Status information for models with 79-point AF.', # # ILCA-77M2 AF sensor layout: # A5* A6* A7* # B2 B3 B4 B5 B6 B7 B8 B9 B10 # C1 C2 C3 C4 C5* C6* C7* C8 C9 C10 C11 # D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 # E1 E2 E3 E4 E5* E6* E7* E8 E9 E10 E11 # F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 # G1 G2 G3 G4 G5* G6* G7* G8 G9 G10 G11 # H2 H3 H4 H5 H6 H7 H8 H9 H10 # I5* I6* I7* # left section, from top to bottom, from right to left 0x00 => { Name => 'AFStatus_00_B4', %Image::ExifTool::Minolta::afStatusInfo }, 0x02 => { Name => 'AFStatus_01_C4', %Image::ExifTool::Minolta::afStatusInfo }, 0x04 => { Name => 'AFStatus_02_D4', %Image::ExifTool::Minolta::afStatusInfo }, 0x06 => { Name => 'AFStatus_03_E4', %Image::ExifTool::Minolta::afStatusInfo }, 0x08 => { Name => 'AFStatus_04_F4', %Image::ExifTool::Minolta::afStatusInfo }, 0x0a => { Name => 'AFStatus_05_G4', %Image::ExifTool::Minolta::afStatusInfo }, 0x0c => { Name => 'AFStatus_06_H4', %Image::ExifTool::Minolta::afStatusInfo }, 0x0e => { Name => 'AFStatus_07_B3', %Image::ExifTool::Minolta::afStatusInfo }, 0x10 => { Name => 'AFStatus_08_C3', %Image::ExifTool::Minolta::afStatusInfo }, 0x12 => { Name => 'AFStatus_09_D3', %Image::ExifTool::Minolta::afStatusInfo }, 0x14 => { Name => 'AFStatus_10_E3', %Image::ExifTool::Minolta::afStatusInfo }, 0x16 => { Name => 'AFStatus_11_F3', %Image::ExifTool::Minolta::afStatusInfo }, 0x18 => { Name => 'AFStatus_12_G3', %Image::ExifTool::Minolta::afStatusInfo }, 0x1a => { Name => 'AFStatus_13_H3', %Image::ExifTool::Minolta::afStatusInfo }, 0x1c => { Name => 'AFStatus_14_B2', %Image::ExifTool::Minolta::afStatusInfo }, 0x1e => { Name => 'AFStatus_15_C2', %Image::ExifTool::Minolta::afStatusInfo }, 0x20 => { Name => 'AFStatus_16_D2', %Image::ExifTool::Minolta::afStatusInfo }, 0x22 => { Name => 'AFStatus_17_E2', %Image::ExifTool::Minolta::afStatusInfo }, 0x24 => { Name => 'AFStatus_18_F2', %Image::ExifTool::Minolta::afStatusInfo }, 0x26 => { Name => 'AFStatus_19_G2', %Image::ExifTool::Minolta::afStatusInfo }, 0x28 => { Name => 'AFStatus_20_H2', %Image::ExifTool::Minolta::afStatusInfo }, 0x2a => { Name => 'AFStatus_21_C1', %Image::ExifTool::Minolta::afStatusInfo }, 0x2c => { Name => 'AFStatus_22_D1', %Image::ExifTool::Minolta::afStatusInfo }, 0x2e => { Name => 'AFStatus_23_E1', %Image::ExifTool::Minolta::afStatusInfo }, 0x30 => { Name => 'AFStatus_24_F1', %Image::ExifTool::Minolta::afStatusInfo }, 0x32 => { Name => 'AFStatus_25_G1', %Image::ExifTool::Minolta::afStatusInfo }, # center section, cross-sensors *, from right to left, from top to bottom # These are presumably Vertical, as all others are default Horizontal (ref Sony ILCA-77M2 brochure). 0x34 => { Name => 'AFStatus_26_A7_Vertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x36 => { Name => 'AFStatus_27_A6_Vertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x38 => { Name => 'AFStatus_28_A5_Vertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x3a => { Name => 'AFStatus_29_C7_Vertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x3c => { Name => 'AFStatus_30_C6_Vertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x3e => { Name => 'AFStatus_31_C5_Vertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x40 => { Name => 'AFStatus_32_E7_Vertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x42 => { Name => 'AFStatus_33_E6_Center_Vertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x44 => { Name => 'AFStatus_34_E5_Vertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x46 => { Name => 'AFStatus_35_G7_Vertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x48 => { Name => 'AFStatus_36_G6_Vertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x4a => { Name => 'AFStatus_37_G5_Vertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x4c => { Name => 'AFStatus_38_I7_Vertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x4e => { Name => 'AFStatus_39_I6_Vertical', %Image::ExifTool::Minolta::afStatusInfo }, 0x50 => { Name => 'AFStatus_40_I5_Vertical', %Image::ExifTool::Minolta::afStatusInfo }, # center section, all sensors, from top to bottom, from right to left 0x52 => { Name => 'AFStatus_41_A7', %Image::ExifTool::Minolta::afStatusInfo }, 0x54 => { Name => 'AFStatus_42_B7', %Image::ExifTool::Minolta::afStatusInfo }, 0x56 => { Name => 'AFStatus_43_C7', %Image::ExifTool::Minolta::afStatusInfo }, 0x58 => { Name => 'AFStatus_44_D7', %Image::ExifTool::Minolta::afStatusInfo }, 0x5a => { Name => 'AFStatus_45_E7', %Image::ExifTool::Minolta::afStatusInfo }, 0x5c => { Name => 'AFStatus_46_F7', %Image::ExifTool::Minolta::afStatusInfo }, 0x5e => { Name => 'AFStatus_47_G7', %Image::ExifTool::Minolta::afStatusInfo }, 0x60 => { Name => 'AFStatus_48_H7', %Image::ExifTool::Minolta::afStatusInfo }, 0x62 => { Name => 'AFStatus_49_I7', %Image::ExifTool::Minolta::afStatusInfo }, 0x64 => { Name => 'AFStatus_50_A6', %Image::ExifTool::Minolta::afStatusInfo }, 0x66 => { Name => 'AFStatus_51_B6', %Image::ExifTool::Minolta::afStatusInfo }, 0x68 => { Name => 'AFStatus_52_C6', %Image::ExifTool::Minolta::afStatusInfo }, 0x6a => { Name => 'AFStatus_53_D6', %Image::ExifTool::Minolta::afStatusInfo }, 0x6c => { Name => 'AFStatus_54_E6_Center', %Image::ExifTool::Minolta::afStatusInfo }, 0x6e => { Name => 'AFStatus_55_F6', %Image::ExifTool::Minolta::afStatusInfo }, 0x70 => { Name => 'AFStatus_56_G6', %Image::ExifTool::Minolta::afStatusInfo }, 0x72 => { Name => 'AFStatus_57_H6', %Image::ExifTool::Minolta::afStatusInfo }, 0x74 => { Name => 'AFStatus_58_I6', %Image::ExifTool::Minolta::afStatusInfo }, 0x76 => { Name => 'AFStatus_59_A5', %Image::ExifTool::Minolta::afStatusInfo }, 0x78 => { Name => 'AFStatus_60_B5', %Image::ExifTool::Minolta::afStatusInfo }, 0x7a => { Name => 'AFStatus_61_C5', %Image::ExifTool::Minolta::afStatusInfo }, 0x7c => { Name => 'AFStatus_62_D5', %Image::ExifTool::Minolta::afStatusInfo }, 0x7e => { Name => 'AFStatus_63_E5', %Image::ExifTool::Minolta::afStatusInfo }, 0x80 => { Name => 'AFStatus_64_F5', %Image::ExifTool::Minolta::afStatusInfo }, 0x82 => { Name => 'AFStatus_65_G5', %Image::ExifTool::Minolta::afStatusInfo }, 0x84 => { Name => 'AFStatus_66_H5', %Image::ExifTool::Minolta::afStatusInfo }, 0x86 => { Name => 'AFStatus_67_I5', %Image::ExifTool::Minolta::afStatusInfo }, # right section, from top to bottom, from right to left 0x88 => { Name => 'AFStatus_68_C11', %Image::ExifTool::Minolta::afStatusInfo }, 0x8a => { Name => 'AFStatus_69_D11', %Image::ExifTool::Minolta::afStatusInfo }, 0x8c => { Name => 'AFStatus_70_E11', %Image::ExifTool::Minolta::afStatusInfo }, 0x8e => { Name => 'AFStatus_71_F11', %Image::ExifTool::Minolta::afStatusInfo }, 0x90 => { Name => 'AFStatus_72_G11', %Image::ExifTool::Minolta::afStatusInfo }, 0x92 => { Name => 'AFStatus_73_B10', %Image::ExifTool::Minolta::afStatusInfo }, 0x94 => { Name => 'AFStatus_74_C10', %Image::ExifTool::Minolta::afStatusInfo }, 0x96 => { Name => 'AFStatus_75_D10', %Image::ExifTool::Minolta::afStatusInfo }, 0x98 => { Name => 'AFStatus_76_E10', %Image::ExifTool::Minolta::afStatusInfo }, 0x9a => { Name => 'AFStatus_77_F10', %Image::ExifTool::Minolta::afStatusInfo }, 0x9c => { Name => 'AFStatus_78_G10', %Image::ExifTool::Minolta::afStatusInfo }, 0x9e => { Name => 'AFStatus_79_H10', %Image::ExifTool::Minolta::afStatusInfo }, 0xa0 => { Name => 'AFStatus_80_B9', %Image::ExifTool::Minolta::afStatusInfo }, 0xa2 => { Name => 'AFStatus_81_C9', %Image::ExifTool::Minolta::afStatusInfo }, 0xa4 => { Name => 'AFStatus_82_D9', %Image::ExifTool::Minolta::afStatusInfo }, 0xa6 => { Name => 'AFStatus_83_E9', %Image::ExifTool::Minolta::afStatusInfo }, 0xa8 => { Name => 'AFStatus_84_F9', %Image::ExifTool::Minolta::afStatusInfo }, 0xaa => { Name => 'AFStatus_85_G9', %Image::ExifTool::Minolta::afStatusInfo }, 0xac => { Name => 'AFStatus_86_H9', %Image::ExifTool::Minolta::afStatusInfo }, 0xae => { Name => 'AFStatus_87_B8', %Image::ExifTool::Minolta::afStatusInfo }, 0xb0 => { Name => 'AFStatus_88_C8', %Image::ExifTool::Minolta::afStatusInfo }, 0xb2 => { Name => 'AFStatus_89_D8', %Image::ExifTool::Minolta::afStatusInfo }, 0xb4 => { Name => 'AFStatus_90_E8', %Image::ExifTool::Minolta::afStatusInfo }, 0xb6 => { Name => 'AFStatus_91_F8', %Image::ExifTool::Minolta::afStatusInfo }, 0xb8 => { Name => 'AFStatus_92_G8', %Image::ExifTool::Minolta::afStatusInfo }, 0xba => { Name => 'AFStatus_93_H8', %Image::ExifTool::Minolta::afStatusInfo }, # central F2.8 sensor 0xbc => { Name => 'AFStatus_94_E6_Center_F2-8', %Image::ExifTool::Minolta::afStatusInfo }, ); %Image::ExifTool::Sony::FaceInfo1 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x00 => { Name => 'Face1Position', Format => 'int16u[4]', Notes => q{ top, left, height and width of detected face. Coordinates are relative to the full-sized unrotated image, with increasing Y downwards }, RawConv => '$$self{FacesDetected} < 1 ? undef : $val', }, 0x20 => { Name => 'Face2Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 2 ? undef : $val', }, 0x40 => { Name => 'Face3Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 3 ? undef : $val', }, 0x60 => { Name => 'Face4Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 4 ? undef : $val', }, 0x80 => { Name => 'Face5Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 5 ? undef : $val', }, 0xa0 => { Name => 'Face6Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 6 ? undef : $val', }, 0xc0 => { Name => 'Face7Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 7 ? undef : $val', }, 0xe0 => { Name => 'Face8Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 8 ? undef : $val', }, ); %Image::ExifTool::Sony::FaceInfo2 = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, 0x00 => { Name => 'Face1Position', Format => 'int16u[4]', Notes => q{ top, left, height and width of detected face. Coordinates are relative to the full-sized unrotated image, with increasing Y downwards }, RawConv => '$$self{FacesDetected} < 1 ? undef : $val', }, 0x25 => { Name => 'Face2Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 2 ? undef : $val', }, 0x4a => { Name => 'Face3Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 3 ? undef : $val', }, 0x6f => { Name => 'Face4Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 4 ? undef : $val', }, 0x94 => { Name => 'Face5Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 5 ? undef : $val', }, 0xb9 => { Name => 'Face6Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 6 ? undef : $val', }, 0xde => { Name => 'Face7Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 7 ? undef : $val', }, 0x103 => { Name => 'Face8Position', Format => 'int16u[4]', RawConv => '$$self{FacesDetected} < 8 ? undef : $val', }, ); # panorama info for cameras such as the HX1, HX5, TX7 (ref 9/PH) %Image::ExifTool::Sony::Panorama = ( %binaryDataAttrs, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, FORMAT => 'int32u', NOTES => q{ Tags found in panorama images from various Sony DSC, NEX, SLT and DSLR cameras. The width/height values of these tags are not affected by camera rotation -- the width is always the longer dimension. }, # 0: 257 for panorama images, 0 for all other images (ref JR) 1 => 'PanoramaFullWidth', # (including black/grey borders) 2 => 'PanoramaFullHeight', 3 => { Name => 'PanoramaDirection', PrintConv => { 0 => 'Left or Up', 1 => 'Right or Down', }, }, # crop area to remove black/grey borders from full image 4 => 'PanoramaCropLeft', 5 => 'PanoramaCropTop', #PH guess (NC) 6 => 'PanoramaCropRight', 7 => 'PanoramaCropBottom', # 8: 1728 (HX1), 1824 (HX5/TX7) (value8/value9 = 16/9) 8 => 'PanoramaFrameWidth', #PH guess (NC) # 9: 972 (HX1), 1026 (HX5/TX7) 9 => 'PanoramaFrameHeight', #PH guess (NC) # 10: 3200-3800 (HX1), 4000-4900 (HX5/TX7) 10 => 'PanoramaSourceWidth', #PH guess (NC) # 11: 800-1800 (larger for taller panoramas) 11 => 'PanoramaSourceHeight', #PH guess (NC) # 12-15: 0 ); # tag table for SRF0 IFD (ref 1) %Image::ExifTool::Sony::SRF = ( PROCESS_PROC => \&ProcessSRF, GROUPS => { 0 => 'MakerNotes', 1 => 'SRF#', 2 => 'Camera' }, NOTES => q{ The maker notes in SRF (Sony Raw Format) images contain 7 IFD's with family 1 group names SRF0 through SRF6. SRF0 and SRF1 use the tags in this table, while SRF2 through SRF5 use the tags in the next table, and SRF6 uses standard EXIF tags. All information other than SRF0 is encrypted, but thanks to Dave Coffin the decryption algorithm is known. SRF images are written by the Sony DSC-F828 and DSC-V3. }, # tags 0-1 are used in SRF1 0 => { Name => 'SRF2Key', Notes => 'key to decrypt maker notes from the start of SRF2', RawConv => '$$self{SRF2Key} = $val', }, 1 => { Name => 'DataKey', Notes => 'key to decrypt the rest of the file from the end of the maker notes', RawConv => '$$self{SRFDataKey} = $val', }, # SRF0 contains a single unknown tag with TagID 0x0003 ); # tag table for Sony RAW Format (ref 1) %Image::ExifTool::Sony::SRF2 = ( PROCESS_PROC => \&ProcessSRF, GROUPS => { 0 => 'MakerNotes', 1 => 'SRF#', 2 => 'Camera' }, NOTES => "These tags are found in the SRF2 through SRF5 IFD's.", # the following tags are used in SRF2-5 2 => 'SRF6Offset', #PH # SRFDataOffset references 2220 bytes of unknown data for the DSC-F828 - PH 3 => { Name => 'SRFDataOffset', Unknown => 1 }, #PH 4 => { Name => 'RawDataOffset' }, #PH 5 => { Name => 'RawDataLength' }, #PH 0x0043 => 'MaxApertureAtMaxFocal', #14 0x0044 => 'MaxApertureAtMinFocal', #14 0x0045 => { #14 Name => 'MinFocalLength', PrintConv => '"$val mm"', }, 0x0046 => { #14 Name => 'MaxFocalLength', PrintConv => '"$val mm"', }, 0x00c0 => 'WBRedDaylight', #14 0x00c1 => 'WBGreenDaylight', #14 0x00c2 => 'WBBlueDaylight', #14 0x00c3 => 'WBRedCloudy', #14 0x00c4 => 'WBGreenCloudy', #14 0x00c5 => 'WBBlueCloudy', #14 0x00c9 => 'WBRedTungsten', #14 0x00ca => 'WBGreenTungsten', #14 0x00cb => 'WBBlueTungsten', #14 0x00cc => 'WBRedFlash', #14 0x00cd => 'WBGreenFlash', #14 0x00ce => 'WBBlueFlash', #14 0x00d0 => 'WBRedAsShot', #14 0x00d1 => 'WBGreenAsShot', #14 0x00d2 => 'WBBlueAsShot', #14 ); # tag table for Sony RAW 2 Format Private IFD (ref 1) %Image::ExifTool::Sony::SR2Private = ( PROCESS_PROC => \&ProcessSR2, WRITE_PROC => \&WriteSR2, GROUPS => { 0 => 'MakerNotes', 1 => 'SR2', 2 => 'Camera' }, NOTES => q{ The SR2 format uses the DNGPrivateData tag to reference a private IFD containing these tags. SR2 images are written by the Sony DSC-R1, but this information is also written to ARW images by other models. }, 0x7200 => { Name => 'SR2SubIFDOffset', # (adjusting offset messes up calculations for AdobeSR2 in DNG images) # Flags => 'IsOffset', # (can't set OffsetPair or else DataMember won't be set when writing) # OffsetPair => 0x7201, DataMember => 'SR2SubIFDOffset', RawConv => '$$self{SR2SubIFDOffset} = $val', }, 0x7201 => { Name => 'SR2SubIFDLength', # (can't set OffsetPair or else DataMember won't be set when writing) # OffsetPair => 0x7200, DataMember => 'SR2SubIFDLength', RawConv => '$$self{SR2SubIFDLength} = $val', }, 0x7221 => { Name => 'SR2SubIFDKey', Format => 'int32u', Notes => 'key to decrypt SR2SubIFD', DataMember => 'SR2SubIFDKey', RawConv => '$$self{SR2SubIFDKey} = $val', PrintConv => 'sprintf("0x%.8x", $val)', }, 0x7240 => { #PH Name => 'IDC_IFD', Groups => { 1 => 'SonyIDC' }, Condition => '$$valPt !~ /^\0\0\0\0/', # (just in case this could be zero) Flags => 'SubIFD', SubDirectory => { DirName => 'SonyIDC', TagTable => 'Image::ExifTool::SonyIDC::Main', Start => '$val', }, }, 0x7241 => { #PH Name => 'IDC2_IFD', Groups => { 1 => 'SonyIDC' }, Condition => '$$valPt !~ /^\0\0\0\0/', # may be zero if dir doesn't exist Flags => 'SubIFD', SubDirectory => { DirName => 'SonyIDC2', TagTable => 'Image::ExifTool::SonyIDC::Main', Start => '$val', Base => '$start', MaxSubdirs => 20, # (A900 has 10 null entries, but IDC writes only 1) RelativeBase => 1, # needed to write SubIFD with relative offsets }, }, 0x7250 => { #1 Name => 'MRWInfo', Condition => '$$valPt !~ /^\0\0\0\0/', # (just in case this could be zero) SubDirectory => { TagTable => 'Image::ExifTool::MinoltaRaw::Main', }, }, ); %Image::ExifTool::Sony::SR2SubIFD = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 1 => 'SR2SubIFD', 2 => 'Camera' }, SET_GROUP1 => 1, # set group1 name to directory name for all tags in table NOTES => 'Tags in the encrypted SR2SubIFD', 0x7300 => 'BlackLevel', #14 (R1) 0x7302 => 'WB_GRBGLevelsAuto', #14 (R1) 0x7303 => 'WB_GRBGLevels', #1 (R1 "as shot", ref 14) 0x7310 => 'BlackLevel', #14 (divide by 4) 0x7313 => 'WB_RGGBLevels', #6 0x7480 => 'WB_RGBLevelsDaylight', #14 (R1) 0x7481 => 'WB_RGBLevelsCloudy', #14 (R1) 0x7482 => 'WB_RGBLevelsTungsten', #14 (R1) 0x7483 => 'WB_RGBLevelsFlash', #14 (R1) 0x7484 => 'WB_RGBLevels4500K', #14 (R1) 0x7486 => 'WB_RGBLevelsFluorescent', #14 (R1) 0x74a0 => 'MaxApertureAtMaxFocal', #PH 0x74a1 => 'MaxApertureAtMinFocal', #PH 0x74a2 => { #14 (R1) Name => 'MaxFocalLength', PrintConv => '"$val mm"', }, 0x74a3 => { #14 (R1) Name => 'MinFocalLength', PrintConv => '"$val mm"', }, 0x74c0 => { #PH Name => 'SR2DataIFD', Groups => { 1 => 'SR2DataIFD' }, # (needed to set SubIFD DirName) Flags => 'SubIFD', SubDirectory => { TagTable => 'Image::ExifTool::Sony::SR2DataIFD', Start => '$val', MaxSubdirs => 20, # an A700 ARW has 14 of these! - PH }, }, 0x7800 => 'ColorMatrix', #14 (divide by 1024) 0x7820 => 'WB_RGBLevelsDaylight', #6 (or 5300K, ref 14) 0x7821 => 'WB_RGBLevelsCloudy', #6 (or 6100K, ref 14) 0x7822 => 'WB_RGBLevelsTungsten', #6 0x7823 => 'WB_RGBLevelsFlash', #14 0x7824 => 'WB_RGBLevels4500K', #14 0x7825 => 'WB_RGBLevelsShade', #6 (or 7500K, ref 14) 0x7826 => 'WB_RGBLevelsFluorescent', #6 (~4000K) 0x7827 => 'WB_RGBLevelsFluorescentP1', #14 (~5000K) 0x7828 => 'WB_RGBLevelsFluorescentP2', #14 (~6500K) (was Flash, ref 6) 0x7829 => 'WB_RGBLevelsFluorescentM1', #14 (~3500K) 0x782a => 'WB_RGBLevels8500K', #14 0x782b => 'WB_RGBLevels6000K', #14 0x782c => 'WB_RGBLevels3200K', #14 0x782d => 'WB_RGBLevels2500K', #14 0x787f => 'WhiteLevel', #14 (divide by 4) 0x7980 => 'ChromaticAberrationCorrParams', #forum6509 (Sony A7 ARW) 0x7982 => 'DistortionCorrParams', #forum6509 (Sony A7 ARW) ); %Image::ExifTool::Sony::SR2DataIFD = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 1 => 'SR2DataIFD', 2 => 'Camera' }, SET_GROUP1 => 1, # set group1 name to directory name for all tags in table # 0x7313 => 'WB_RGGBLevels', (duplicated in all SR2DataIFD's) 0x7770 => { #PH Name => 'ColorMode', Priority => 0, }, ); # extract information from "SONY PIC\0" maker notes (ref PH) %Image::ExifTool::Sony::PIC = ( PROCESS_PROC => \&ProcessSonyPIC, GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' }, NOTES => q{ The TextInfo data is extracted as a block to preserve the formatting, and some of the more interesting information is extracted as separate tags. }, TextInfo1 => { Binary => 1 }, TextInfo2 => { Binary => 1 }, # tags extracted from TextInfo blocks (ID's must end with ':') 'Temp:' => { Name => 'CameraTemperature', RawConv => '$val =~ /^-?\d+/ ? $val : undef', PrintConv => '"$val C"', }, 'Temp:Clbt:' => { Name => 'BoardTemperature', PrintConv => '"$val C"' }, #(NC) 'Capt:' => { Name => 'SensorTemperature', PrintConv => '"$val C"' }, #(NC) 'VR Enable C:' => { Name => 'VibrationReduction', PrintConv => { 0 => 'Off', 1 => 'On' }, #(NC) }, 'FWVer:' => 'FirmwareVersion', 'BC:' => { Name => 'Barcode', Condition => 'not $$self{VALUE}{Barcode}', ValueConv => '$val=~s/IP1.*//; $val', }, 'barcode:' => 'Barcode', 'BarCode:' => { Name => 'Barcode', ValueConv => 'length($val) > 12 ? substr($val,0,12) : $val', }, # 'EvA:' - exposure compensation * 10 (ref JR) # for documentation only -- this IFD is handled manually IFD => { Name => 'PIC_IFD', SubDirectory => { TagTable => 'Image::ExifTool::Sony::Main' }, }, ); # tags found in DSC-F1 PMP header (ref 10) %Image::ExifTool::Sony::PMP = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, FIRST_ENTRY => 0, NOTES => q{ These tags are written in the proprietary-format header of PMP images from the DSC-F1. }, 8 => { #PH Name => 'JpgFromRawStart', Format => 'int32u', Notes => q{ OK, not really a RAW file, but this mechanism is used to allow extraction of the JPEG image from a PMP file }, }, 12 => { Name => 'JpgFromRawLength', Format => 'int32u' }, 22 => { Name => 'SonyImageWidth', Format => 'int16u' }, 24 => { Name => 'SonyImageHeight', Format => 'int16u' }, 27 => { Name => 'Orientation', PrintConv => { 0 => 'Horizontal (normal)', 1 => 'Rotate 270 CW',#11 2 => 'Rotate 180', 3 => 'Rotate 90 CW',#11 }, }, 29 => { Name => 'ImageQuality', PrintConv => { 8 => 'Snap Shot', 23 => 'Standard', 51 => 'Fine', }, }, # 40 => ImageWidth again (int16u) # 42 => ImageHeight again (int16u) 52 => { Name => 'Comment', Format => 'string[19]' }, 76 => { Name => 'DateTimeOriginal', Description => 'Date/Time Original', Format => 'int8u[6]', Groups => { 2 => 'Time' }, ValueConv => q{ my @a = split ' ', $val; $a[0] += $a[0] < 70 ? 2000 : 1900; sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d', @a); }, PrintConv => '$self->ConvertDateTime($val)', }, 84 => { Name => 'ModifyDate', Format => 'int8u[6]', Groups => { 2 => 'Time' }, ValueConv => q{ my @a = split ' ', $val; $a[0] += $a[0] < 70 ? 2000 : 1900; sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d', @a); }, PrintConv => '$self->ConvertDateTime($val)', }, 102 => { Name => 'ExposureTime', Format => 'int16s', RawConv => '$val <= 0 ? undef : $val', ValueConv => '2 ** (-$val / 100)', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', }, 106 => { # (NC -- not written by DSC-F1) Name => 'FNumber', Format => 'int16s', RawConv => '$val <= 0 ? undef : $val', ValueConv => '$val / 100', # (likely wrong) }, 108 => { # (NC -- not written by DSC-F1) Name => 'ExposureCompensation', Format => 'int16s', RawConv => '($val == -1 or $val == -32768) ? undef : $val', ValueConv => '$val / 100', # (probably wrong too) }, 112 => { # (NC -- not written by DSC-F1) Name => 'FocalLength', Format => 'int16s', Groups => { 2 => 'Camera' }, RawConv => '$val <= 0 ? undef : $val', ValueConv => '$val / 100', PrintConv => 'sprintf("%.1f mm",$val)', }, 118 => { Name => 'Flash', Groups => { 2 => 'Camera' }, PrintConv => { 0 => 'No Flash', 1 => 'Fired' }, }, ); # Composite Sony tags %Image::ExifTool::Sony::Composite = ( GROUPS => { 2 => 'Camera' }, FocusDistance => { Require => { 0 => 'Sony:FocusPosition', 1 => 'FocalLength', }, Notes => 'distance in metres = FocusPosition * FocalLength / 1000', ValueConv => '$val >= 128 ? "inf" : $val * $val[1] / 1000', PrintConv => '$val eq "inf" ? $val : "$val m"', }, FocusDistance2 => { # For DSLR-A550 and newer, NEX/ILCE/SLT/ILCA (only A65V/A77V are missing ...): # seen FocusPosition2 with values from 80 - 255 (and 21 for Touit 12mm...) # Formula from minolta.pm (WBInfoA100 - 0x49bb) gives mostly correct/acceptable distance indications. # (http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3688.0.html) # if this value is the 35mm equivalent magnification, then the formula could # be (1.5 * 2**($val/16-5)+1) * FocalLength, but this tends to underestimate # distance by about 18% (ref 20) (255=inf) # modified 16-10-2014 based on A99V measurements: use FocalLengthIn35mmFormat and leave out the "1.5*" factor. Require => { 0 => 'Sony:FocusPosition2', 1 => 'FocalLengthIn35mmFormat', }, ValueConv => q{ return undef unless $val; return 'inf' if $val >= 255; return (2**($val/16-5) + 1) * $val[1] / 1000; }, PrintConv => '$val eq "inf" ? $val : sprintf("%.2f m",$val)', }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::Sony'); sub SortLensTypes { return $a <=> $b unless $a =~ /\./ and $b =~ /\./; my @a = split /\./, $a; my @b = split /\./, $b; # must compare the decimal part separately to sort in proper order return $a[0] <=> $b[0] || $a[1] <=> $b[1]; } # fill in Sony LensType lookup based on Minolta values { my $minoltaTypes = \%Image::ExifTool::Minolta::minoltaLensTypes; %sonyLensTypes = %$minoltaTypes; my $other = $$minoltaTypes{OTHER}; delete $$minoltaTypes{Notes}; # (temporarily) delete $$minoltaTypes{OTHER}; # (temporarily) my $id; # 5-digit lens ID's are missing the last digit (usually "1") in the metadata for # some Sony models, so generate corresponding 4-digit entries for these cameras foreach $id (sort SortLensTypes keys %$minoltaTypes) { next if $id < 10000; my $sid = int($id/10); my $i; my $lens = $$minoltaTypes{$id}; if ($sonyLensTypes{$sid}) { # put lens name with "or" first in list if ($lens =~ / or /) { my $tmp = $sonyLensTypes{$sid}; $sonyLensTypes{$sid} = $lens; $lens = $tmp; } for (;;) { $i = ($i || 0) + 1; $sid = int($id/10) . ".$i"; last unless $sonyLensTypes{$sid}; } } $sonyLensTypes{$sid} = $lens; } $$minoltaTypes{Notes} = $sonyLensTypes{Notes}; # (restore original Notes) $$minoltaTypes{OTHER} = $other; } #------------------------------------------------------------------------------ # Process "SONY PIC\0" maker notes (DSC-H200/J10/W370/W510, MHS-TS20, ref PH) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 sub ProcessSonyPIC($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $start = $$dirInfo{DirStart} || 0; my $len = $$dirInfo{DirLen} || (length($$dataPt) - $start); my $data = substr($$dataPt, $start, $len); # H200 panorama images have an IFD at offset 12 (non-panoramas have 0's here) # - assume other images could too, but do a bit of validation to check # - MHS-TS20 images have some other data here if ($len >= 26) { my $count = Get16u($dataPt, $start + 12); if ($count > 256) { SwapByteOrder(); $count = Get16u($dataPt, $start + 12); } if ($count and $count < 256) { my $format = Get16u($dataPt, $start + 16); if ($format >= 1 and $format <= 10) { $$dirInfo{DirStart} = $start + 12; $$dirInfo{DirLen} = $len - 12; my $sonyTable = GetTagTable('Image::ExifTool::Sony::Main'); Image::ExifTool::Exif::ProcessExif($et, $dirInfo, $sonyTable); } } } # Do a brute force search for text data: # For the DSC-J10/W370/W510 the first text block is at offset 0x1ec and # starts with "BarCode:". For the H200 it is at 0x1f0 and starts with "BC:". # For the TS20 it is at 0x5b and starts with "V400 AELOG\nbarcode:". # The second text block starts with "AFLOG" (Auto-Focus log) and is at # 0x600 for all models, except for the TS20 it is at 0x45b. my $i = 0; while ($data =~ /(\w[\x09\x0a\x0d\x20-\x7e]+)/sg) { next unless length $1 > 32; my ($tag, $val) = ('TextInfo' . (++$i), $1); $$tagTablePtr{$tag} or AddTagToTable($tagTablePtr, $tag, { Name => $tag, Binary => 1 }); $et->HandleTag($tagTablePtr, $tag, $val); # extract interesting tags separately (might want to speed this up) foreach $tag (sort { lc $a cmp lc $b } keys %$tagTablePtr) { next unless $tag =~ /:$/ and $val =~ /\b$tag\s*([^\s;,:]+)/; $et->HandleTag($tagTablePtr, $tag, $1); } } return 1; } #------------------------------------------------------------------------------ # Make TIFF header for raw data # Inputs: 0) width, 1) height, 2) num colour components, 3) bits, 4) resolution # Returns: TIFF header # Notes: Multi-byte data must be little-endian sub MakeTiffHeader($$$$;$) { my ($w, $h, $cols, $bits, $res) = @_; $res or $res = 72; my $saveOrder = GetByteOrder(); SetByteOrder('II'); my $hdr = "\x49\x49\x2a\0\x08\0\0\0\x0e\0" . # 0x00 14 menu entries: "\xfe\x00\x04\0\x01\0\0\0\x00\0\0\0" . # 0x0a SubfileType = 0 "\x00\x01\x04\0\x01\0\0\0" . Set32u($w) . # 0x16 ImageWidth "\x01\x01\x04\0\x01\0\0\0" . Set32u($h) . # 0x22 ImageHeight "\x02\x01\x03\0" . Set32u($cols) . # 0x2e BitsPerSample Set32u($cols == 1 ? $bits : 0xb6) . "\x03\x01\x03\0\x01\0\0\0\x01\0\0\0" . # 0x3a Compression = 1 "\x06\x01\x03\0\x01\0\0\0" . # 0x46 PhotometricInterpretation Set32u($cols == 1 ? 1 : 2) . "\x11\x01\x04\0\x01\0\0\0\xcc\0\0\0" . # 0x52 StripOffsets = 0xcc "\x15\x01\x03\0\x01\0\0\0" . Set32u($cols) .# 0x5e SamplesPerPixel "\x16\x01\x04\0\x01\0\0\0" . Set32u($h) . # 0x6a RowsPerStrip "\x17\x01\x04\0\x01\0\0\0" . # 0x76 StripByteCounts Set32u($w * $h * $cols * int(($bits+7)/8)) . "\x1a\x01\x05\0\x01\0\0\0\xbc\0\0\0" . # 0x82 XResolution "\x1b\x01\x05\0\x01\0\0\0\xc4\0\0\0" . # 0x8e YResolution "\x1c\x01\x03\0\x01\0\0\0\x01\0\0\0" . # 0x9a PlanarConfiguration = 1 "\x28\x01\x03\0\x01\0\0\0\x02\0\0\0" . # 0xa6 ResolutionUnit = 2 "\0\0\0\0" . # 0xb2 (no IFD1) (Set16u($bits) x 3) . # 0xb6 BitsPerSample value Set32u($res) . "\x01\0\0\0" . # 0xbc XResolution = 72 Set32u($res) . "\x01\0\0\0"; # 0xc4 YResolution = 72 SetByteOrder($saveOrder); # 0xcc (data goes here) return $hdr; } #------------------------------------------------------------------------------ # LensSpec value conversions # Inputs: 0) value # Returns: converted value # Notes: unpacks in format compatible with LensInfo, with extra flags bytes at start and end sub ConvLensSpec($) { my $val = shift; return \$val unless length($val) == 8; my @a = unpack("H2H4H4H2H2H2",$val); $a[1] += 0; $a[2] += 0; # remove leading zeros from focal lengths $a[3] /= 10; $a[4] /= 10; # divide f-numbers by 10 return join ' ', @a; } sub ConvInvLensSpec($) { my $val = shift; my @a=split(" ", $val); return $val unless @a == 6; $a[3] *= 10; $a[4] *= 10; # f-numbers are multiplied by 10 $_ = hex foreach @a; # convert from hex return pack 'CnnCCC', @a; } #------------------------------------------------------------------------------ # Print Sony LensSpec value # Inputs: 0) LensSpec numerical value # Returns: converted LensSpec string (eg. "DT 18-55mm F3.5-5.6 SAM") # Refs: http://equational.org/importphotos/alphalensinfo.html # http://www.dyxum.com/dforum/the-lens-information-different-from-lensid_topic37682.html my @lensFeatures = ( # lens features in the order they are added to the LensSpec string # (high byte of Mask/Bits represents byte 0 of LensSpec, low byte is byte 7) # Mask { Bits Name Bits Name } Prefix flag # ------ ------ ----- ------ ----- ----------- [ 0x4000, { 0x4000 => 'PZ' }, 1 ], [ 0x0300, { 0x0100 => 'DT', 0x0200 => 'FE', 0x0300 => 'E' }, 1 ], # (will come before preceding prefix), FE added (ref JR) [ 0x00e0, { 0x0020 => 'STF', 0x0040 => 'Reflex', 0x0060 => 'Macro', 0x0080 => 'Fisheye' } ], [ 0x000c, { 0x0004 => 'ZA', 0x0008 => 'G' } ], [ 0x0003, { 0x0001 => 'SSM', 0x0002 => 'SAM' } ], [ 0x8000, { 0x8000 => 'OSS' } ], [ 0x2000, { 0x2000 => 'LE' } ], #JR [ 0x0800, { 0x0800 => 'II' } ], #JR ); sub PrintLensSpec($) { my $val = shift; my ($rtnVal, $feature, $f1, $sf, $lf, $sa, $la, $f2); # 0=flags1, 1=short focal, 2=long focal, 3=max aperture at short focal, # 4=max aperture at long focal, 5=flags2 my @a = split ' ', $val; if (@a == 2) { # LensSpecFeatures patch ($f1, $f2) = @a; $rtnVal = ''; } elsif (@a >= 6) { ($f1, $sf, $lf, $sa, $la, $f2) = @a; # crude validation of focal length and aperture values if ($sf != 0 and $sa != 0 and ($lf == 0 or $lf >= $sf) and ($la == 0 or $la >= $sa)) { # use focal and aperture range if this is a zoom lens $sf .= '-' . $lf if $lf != $sf and $lf != 0; $sa .= '-' . $la if $sa != $la and $la != 0; $rtnVal = "${sf}mm F$sa"; # heart of LensSpec is a LensInfo string } } if (defined $rtnVal) { # loop through available lens features my $flags = hex($f1 . $f2); foreach $feature (@lensFeatures) { my $bits = $$feature[0] & $flags; next unless $bits or $$feature[1]{$bits}; # add feature name as a prefix or suffix to the LensSpec my $str = $$feature[1]{$bits} || sprintf('Unknown(%.4x)',$bits); $rtnVal = $rtnVal ? ($$feature[2] ? "$str $rtnVal" : "$rtnVal $str") : $str; } } else { $rtnVal = "Unknown ($val)"; } return $rtnVal; } # inverse conversion sub PrintInvLensSpec($;$$) { my ($val, $self, $features) = @_; return $1 if $val =~ /Unknown \((.*)\)/i; my ($sf, $lf, $sa, $la) = Image::ExifTool::Exif::GetLensInfo($val); my $str; if ($features) { $str = ''; } elsif ($sf) { # fixed focal length and aperture have zero for 2nd number $lf = 0 if $lf == $sf; $la = 0 if $la == $sa; $str = " $sf $lf $sa $la"; } else { return undef; } my $flags = 0; my ($feature, $bits); foreach $feature (@lensFeatures) { foreach $bits (keys %{$$feature[1]}) { # set corresponding flag bits for each feature name found my $name = $$feature[1]{$bits}; $val =~ /\b$name\b/i and $flags |= $bits; } } return sprintf "%.2x$str %.2x", $flags>>8, $flags&0xff; } #------------------------------------------------------------------------------ # Read/Write MoreInfo information (tag 0x0020, count 20480) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success when reading, or new directory when writing (IsWriting set) sub ProcessMoreInfo($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access to write routine my $dataPt = $$dirInfo{DataPt}; my $start = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || length($$dataPt); my $isWriting = $$dirInfo{IsWriting}; my $rtnVal = $isWriting ? undef : 0; return $rtnVal if $dirLen < 4; my $num = Get16u($dataPt, $start); # number of entries my $len = Get16u($dataPt, $start + 2); # total data length if ($dirLen < 4 + $num * 4) { $et->Warn('Truncated MoreInfo data', 1); return $rtnVal; } if ($num > 50) { $et->Warn('Possibly corrupted MoreInfo data', 1); return $rtnVal; } $et->VerboseDir('MoreInfo', $num, $len) unless $isWriting; if ($len > $dirLen) { $et->Warn('MoreInfo data length too large', 1); $len = $dirLen; } # loop through the MoreInfo index section to get the block offsets and tag ID's # (in case they are out of order, even though this may never happen) my ($i, @offset, @tagID, %blockSize); for ($i=0; $i<$num; ++$i) { my $entry = $start + 4 + $i * 4; push @tagID, Get16u($dataPt, $entry); push @offset, Get16u($dataPt, $entry + 2); if ($offset[-1] > $len and $offset[-1] <= $dirLen) { $et->Warn('MoreInfo data length too small', 1); $len = $dirLen; } } # generate a lookup table of block sizes my @sorted = sort { $a <=> $b } @offset; push @sorted, 0xffff; # (simplifies logic in loop below) for ($i=0; $i<$num; ++$i) { my $offset = $sorted[$i]; my $size = $sorted[$i+1] - $offset; # note that block size will be negative for blocks with starting # offsets greater than $dirLen, but we will ignore these below $size = $len - $offset if $size > $len - $offset; # (if blockSize is already defined for this offset, then there # are 2 blocks with the same starting offset and the existing # size must be zero. Since we can't know which block is # actually non-zero size, the reasonable thing to do is # assume that both have a size of zero) $blockSize{$offset} = $size unless defined $blockSize{$offset}; } # initialize successful return value $rtnVal = $isWriting ? substr($$dataPt, $start, $dirLen) : 1; # now process each block my $unknown = $$et{OPTIONS}{Unknown}; for ($i=0; $i<$num; ++$i) { next if $offset[$i] > $dirLen; # ignore bad offsets my $tag = $tagID[$i]; if ($isWriting) { # write new tags my $tagInfo = $$tagTablePtr{$tag}; next unless ref $tagInfo eq 'HASH' and $$tagInfo{SubDirectory}; my $offset = $offset[$i]; my $size = $blockSize{$offset}; next unless $size; # ignore zero-length blocks my %dirInfo = ( DirName => $$tagInfo{Name}, Parent => $$dirInfo{DirName}, DataPt => \$rtnVal, DirStart => $offset, DirLen => $size, ); my $subTable = GetTagTable($$tagInfo{SubDirectory}{TagTable}); my $val = $et->WriteDirectory(\%dirInfo, $subTable); # update this block in the returned MoreInfo data substr($rtnVal, $offset, $size) = $val if defined $val; next; } # generate binary tables for unknown tags if -U option used if (not defined $$tagTablePtr{$tag} and $unknown > 1) { my $name = sprintf('MoreInfo%.4x', $tag); my $table = "Image::ExifTool::Sony::$name"; no strict 'refs'; %$table = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, FIRST_ENTRY => 0, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, ); use strict 'refs'; my %tagInfo = ( Name => $name, SubDirectory => { TagTable => $table }, ); AddTagToTable($tagTablePtr, $tag, \%tagInfo); } $et->HandleTag($tagTablePtr, $tag, undef, Index => $i, DataPt => $dataPt, DataPos => $$dirInfo{DataPos}, Start => $start + $offset[$i], Size => $blockSize{$offset[$i]}, ); } return $rtnVal; } #------------------------------------------------------------------------------ # Read Sony DSC-F1 PMP file # Inputs: 0) ExifTool object ref, 1) dirInfo ref # Returns: 1 on success when reading, 0 if this isn't a valid PMP file sub ProcessPMP($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $buff; $raf->Read($buff, 128) == 128 or return 0; # validate header length (124 bytes) $buff =~ /^.{8}\0{3}\x7c.{112}\xff\xd8\xff\xdb$/s or return 0; $et->SetFileType(); SetByteOrder('MM'); $et->FoundTag(Make => 'Sony'); $et->FoundTag(Model => 'DSC-F1'); # extract information from 124-byte header my $tagTablePtr = GetTagTable('Image::ExifTool::Sony::PMP'); my %dirInfo = ( DataPt => \$buff, DirName => 'PMP' ); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); # process JPEG image $raf->Seek(124, 0); $$dirInfo{Base} = 124; $et->ProcessJPEG($dirInfo); return 1; } #------------------------------------------------------------------------------ # Set the ARW file type and decide between SubIFD and A100DataOffset # Inputs: 0) ExifTool object ref, 1) reference to tag 0x14a raw data # Returns: true if tag 0x14a is a SubIFD, false otherwise sub SetARW($$) { my ($et, $valPt) = @_; # assume ARW for now -- SR2's get identified when FileFormat is parsed $et->OverrideFileType($$et{TIFF_TYPE} = 'ARW'); # this should always be a SubIFD for models other than the A100 return 1 unless $$et{Model} eq 'DSLR-A100' and length $$valPt == 4; # for the A100, IFD0 tag 0x14a is either a pointer to the raw data if this is # an original image, or a SubIFD offset if the image was edited by Sony IDC, # so assume it points to the raw data if it isn't a valid IFD (this assumption # will be checked later when we try to parse the SR2Private directory) my %subdir = ( DirStart => Get32u($valPt, 0), Base => 0, RAF => $$et{RAF}, AllowOutOfOrderTags => 1, # doh! ); return Image::ExifTool::Exif::ValidateIFD(\%subdir); } #------------------------------------------------------------------------------ # Finish writing ARW image, patching necessary Sony quirks, etc # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) EXIF data ref, 3) image data reference # Returns: undef on success, error string otherwise # Notes: (it turns that all of this is for the A100 only) sub FinishARW($$$$) { my ($et, $dirInfo, $dataPt, $imageData) = @_; # pre-scan IFD0 to get IFD entry offsets for each tag my $dataLen = length $$dataPt; return 'Truncated IFD0' if $dataLen < 2; my $n = Get16u($dataPt, 0); return 'Truncated IFD0' if $dataLen < 2 + 12 * $n; my ($i, %entry, $dataBlock, $pad, $dataOffset); for ($i=0; $i<$n; ++$i) { my $entry = 2 + $i * 12; $entry{Get16u($dataPt, $entry)} = $entry; } # fix up SR2Private offset and A100DataOffset (A100 only) if ($entry{0xc634} and $$et{MRWDirData}) { return 'Unexpected MRW block' unless $$et{Model} eq 'DSLR-A100'; return 'Missing A100DataOffset' unless $entry{0x14a} and $$et{A100DataOffset}; # account for total length of image data my $totalLen = 8 + $dataLen; if (ref $imageData) { foreach $dataBlock (@$imageData) { my ($pos, $size, $pad) = @$dataBlock; $totalLen += $size + $pad; } } # align MRW block on an even 4-byte boundary my $remain = $totalLen & 0x03; $pad = 4 - $remain and $totalLen += $pad if $remain; # set offset for the MRW directory data Set32u($totalLen, $dataPt, $entry{0xc634} + 8); # also pad MRWDirData data to an even 4 bytes (just to be safe) $remain = length($$et{MRWDirData}) & 0x03; $$et{MRWDirData} .= "\0" x (4 - $remain) if $remain; $totalLen += length $$et{MRWDirData}; # fix up A100DataOffset $dataOffset = $$et{A100DataOffset}; Set32u($totalLen, $dataPt, $entry{0x14a} + 8); } # patch double-referenced and incorrectly-sized A100 PreviewImage if ($entry{0x201} and $$et{A100PreviewStart} and $entry{0x202} and $$et{A100PreviewLength}) { Set32u($$et{A100PreviewStart}, $dataPt, $entry{0x201} + 8); Set32u($$et{A100PreviewLength}, $dataPt, $entry{0x202} + 8); } # write TIFF IFD structure my $outfile = $$dirInfo{OutFile}; my $header = GetByteOrder() . Set16u(0x2a) . Set32u(8); Write($outfile, $header, $$dataPt) or return 'Error writing'; # copy over image data if (ref $imageData) { $et->CopyImageData($imageData, $outfile) or return 'Error copying image data'; } # write MRW data if necessary if ($$et{MRWDirData}) { Write($outfile, "\0" x $pad) if $pad; # write padding if necessary Write($outfile, $$et{MRWDirData}); delete $$et{MRWDirData}; # set TIFF_END to copy over the MRW image data $$et{TIFF_END} = $dataOffset if $dataOffset; } return undef; } #------------------------------------------------------------------------------ # Decrypt/Encrypt Sony data (ref 1) (reversible encryption) # Inputs: 0) data reference, 1) start offset, 2) data length, 3) decryption key # Returns: nothing (original data buffer is updated with decrypted data) # Notes: data length should be a multiple of 4 sub Decrypt($$$$) { my ($dataPt, $start, $len, $key) = @_; my ($i, $j, @pad); my $words = int ($len / 4); for ($i=0; $i<4; ++$i) { my $lo = ($key & 0xffff) * 0x0edd + 1; my $hi = ($key >> 16) * 0x0edd + ($key & 0xffff) * 0x02e9 + ($lo >> 16); $pad[$i] = $key = (($hi & 0xffff) << 16) + ($lo & 0xffff); } $pad[3] = ($pad[3] << 1 | ($pad[0]^$pad[2]) >> 31) & 0xffffffff; for ($i=4; $i<0x7f; ++$i) { $pad[$i] = (($pad[$i-4]^$pad[$i-2]) << 1 | ($pad[$i-3]^$pad[$i-1]) >> 31) & 0xffffffff; } my @data = unpack("x$start N$words", $$dataPt); for ($i=0x7f,$j=0; $j<$words; ++$i,++$j) { $data[$j] ^= $pad[$i & 0x7f] = $pad[($i+1) & 0x7f] ^ $pad[($i+65) & 0x7f]; } substr($$dataPt, $start, $words*4) = pack('N*', @data); } #------------------------------------------------------------------------------ # Decipher/encipher Sony tag 0x94xx data (ref PH) # Inputs: 0) data reference, 1) true to encipher the data sub Decipher($;$) { my ($dataPt, $encipher) = @_; # This is a simple substitution cipher, so use a hardcoded translation table for speed. # The formula is: $c = ($b*$b*$b) % 249, where $c is the enciphered data byte # (note that bytes with values 249-255 are not translated, and 0-1, 82-84, # 165-167 and 248 have the same enciphered value) if ($encipher) { # encipher $$dataPt =~ tr/\x02-\xf7/\x08\x1b\x40\x7d\xd8\x5e\x0e\xe7\x04V\xea\xcd\x05\x8ap\xb6i\x88\x200\xbe\xd7\x81\xbb\x92\x0c\x28\xecl\xa0\x95Q\xd3\x2f\x5dj\x5c9\x07\xc5\x87L\x1a\xf0\xe2\xef\x24y\x02\xb7\xac\xe0\x60\x2bG\xba\x91\xcbu\x8e\x233\xc4\xe3\x96\xdc\xc2N\x7fb\xf6OeE\xeet\xcf\x138KRST\x5bn\x93\xd02\xb1aAW\xa9D\x27X\xdd\xc3\x10\xbc\xdbs\x83\x181\xd4\x15\xe5_\x7bF\xbf\xf3\xe8\xa4\x2d\x82\xb0\xbd\xaf\x8cZ\x1f\xda\x9fmJ\x3cIw\xccU\x11\x06\x3a\xb3\x7e\x9a\x14\xe4\x25\xc8\xe1v\x86\x1e\x3d\xe96\x1c\xa1\xd2\xb5P\xa2\xb8\x98H\xc7\x29f\x8b\x9e\xa5\xa6\xa7\xae\xc1\xe6\x2a\x85\x0b\xb4\x94\xaa\x03\x97z\xab7\x1dc\x165\xc6\xd6k\x84\x2eh\x3f\xb2\xce\x99\x19MB\xf7\x80\xd5\x0a\x17\x09\xdf\xadr4\xf2\xc0\x9d\x8f\x9c\xca\x26\xa8dY\x8d\x0d\xd1\xedg\x3ex\x22\x3b\xc9\xd9q\x90C\x89o\xf4\x2c\x0f\xa3\xf5\x12\xeb\x9b\x21\x7c\xb9\xde\xf1/; } else { # decipher $$dataPt =~ tr/\x08\x1b\x40\x7d\xd8\x5e\x0e\xe7\x04V\xea\xcd\x05\x8ap\xb6i\x88\x200\xbe\xd7\x81\xbb\x92\x0c\x28\xecl\xa0\x95Q\xd3\x2f\x5dj\x5c9\x07\xc5\x87L\x1a\xf0\xe2\xef\x24y\x02\xb7\xac\xe0\x60\x2bG\xba\x91\xcbu\x8e\x233\xc4\xe3\x96\xdc\xc2N\x7fb\xf6OeE\xeet\xcf\x138KRST\x5bn\x93\xd02\xb1aAW\xa9D\x27X\xdd\xc3\x10\xbc\xdbs\x83\x181\xd4\x15\xe5_\x7bF\xbf\xf3\xe8\xa4\x2d\x82\xb0\xbd\xaf\x8cZ\x1f\xda\x9fmJ\x3cIw\xccU\x11\x06\x3a\xb3\x7e\x9a\x14\xe4\x25\xc8\xe1v\x86\x1e\x3d\xe96\x1c\xa1\xd2\xb5P\xa2\xb8\x98H\xc7\x29f\x8b\x9e\xa5\xa6\xa7\xae\xc1\xe6\x2a\x85\x0b\xb4\x94\xaa\x03\x97z\xab7\x1dc\x165\xc6\xd6k\x84\x2eh\x3f\xb2\xce\x99\x19MB\xf7\x80\xd5\x0a\x17\x09\xdf\xadr4\xf2\xc0\x9d\x8f\x9c\xca\x26\xa8dY\x8d\x0d\xd1\xedg\x3ex\x22\x3b\xc9\xd9q\x90C\x89o\xf4\x2c\x0f\xa3\xf5\x12\xeb\x9b\x21\x7c\xb9\xde\xf1/\x02-\xf7/; } } #------------------------------------------------------------------------------ # Process Sony 0x94xx cipherdata directory # Inputs: 0) ExifTool object ref, 1) directory information ref, 2) tag table ref # Returns: 1 on success # Notes: # 1) dirInfo may contain VarFormatData (reference to empty list) to return # details about any variable-length-format tags in the table (used when writing) # 2) A bug in ExifTool 9.04-9.10 could have double-enciphered these blocks sub ProcessEnciphered($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || (length($$dataPt) - $dirStart); my $data = substr($$dataPt, $dirStart, $dirLen); my %dirInfo = ( %$dirInfo, DataPt => \$data, DataPos => $$dirInfo{DataPos} + $dirStart, DirStart => 0, ); Decipher(\$data); if ($$et{DoubleCipher}) { Decipher(\$data); $et->WarnOnce('Some Sony metadata is double-enciphered. Write any tag to fix',1); } if ($et->Options('Verbose') > 2) { my $tagInfo = $$dirInfo{TagInfo} || { Name => 'data' }; my $str = $$et{DoubleCipher} ? 'ouble-d' : ''; $et->VerboseDir("D${str}eciphered $$tagInfo{Name}"); $et->VerboseDump(\$data, Prefix => $$et{INDENT} . ' ', DataPos => $$dirInfo{DirStart} + $$dirInfo{DataPos} + ($$dirInfo{Base} || 0), ); } return $et->ProcessBinaryData(\%dirInfo, $tagTablePtr); } #------------------------------------------------------------------------------ # Write Sony 0x94xx cipherdata directory # Inputs: 0) ExifTool object ref, 1) source dirInfo ref, 2) tag table ref # Returns: cipherdata block or undefined on error sub WriteEnciphered($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; my $dataPt = $$dirInfo{DataPt}; my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || (length($$dataPt) - $dirStart); my $data = substr($$dataPt, $dirStart, $dirLen); my $changed = $$et{CHANGED}; Decipher(\$data); # fix double-enciphered data (due to bug in ExifTool 9.04-9.10) if ($$et{DoubleCipher}) { Decipher(\$data); ++$$et{CHANGED}; $et->WarnOnce('Fixed double-enciphered Sony metadata',1); } my %dirInfo = ( %$dirInfo, DataPt => \$data, DataPos => $$dirInfo{DataPos} + $dirStart, DirStart => 0, ); $data = $et->WriteBinaryData(\%dirInfo, $tagTablePtr); if ($changed == $$et{CHANGED}) { # nothing changed, so recover original data $data = substr($$dataPt, $dirStart, $dirLen); } elsif (defined $data) { Decipher(\$data,1); # re-encipher } return $data; } #------------------------------------------------------------------------------ # Process SRF maker notes # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub ProcessSRF($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $start = $$dirInfo{DirStart}; my $verbose = $et->Options('Verbose'); # process IFD chain my ($ifd, $success); for ($ifd=0; ; ) { # switch tag table for SRF2-5 and SRF6 if ($ifd == 2) { $tagTablePtr = GetTagTable('Image::ExifTool::Sony::SRF2'); } elsif ($ifd == 6) { # SRF6 uses standard EXIF tags $tagTablePtr = GetTagTable('Image::ExifTool::Exif::Main'); } my $srf = $$dirInfo{DirName} = "SRF$ifd"; $$et{SET_GROUP1} = $srf; $success = Image::ExifTool::Exif::ProcessExif($et, $dirInfo, $tagTablePtr); delete $$et{SET_GROUP1}; last unless $success; # # get pointer to next IFD # my $count = Get16u($dataPt, $$dirInfo{DirStart}); my $dirEnd = $$dirInfo{DirStart} + 2 + $count * 12; last if $dirEnd + 4 > length($$dataPt); my $nextIFD = Get32u($dataPt, $dirEnd); last unless $nextIFD; $nextIFD -= $$dirInfo{DataPos}; # adjust for position of makernotes data $$dirInfo{DirStart} = $nextIFD; # # decrypt next IFD data if necessary # ++$ifd; my ($key, $len); if ($ifd == 1) { # get the key to decrypt IFD1 my $cp = $start + 0x8ddc; # why? my $ip = $cp + 4 * unpack("x$cp C", $$dataPt); $key = unpack("x$ip N", $$dataPt); $len = $cp + $nextIFD; # decrypt up to $cp } elsif ($ifd == 2) { # get the key to decrypt IFD2 $key = $$et{SRF2Key}; $len = length($$dataPt) - $nextIFD; # decrypt rest of maker notes } else { next; # no decryption needed } # decrypt data Decrypt($dataPt, $nextIFD, $len, $key) if defined $key; next unless $verbose > 2; # display decrypted data in verbose mode $et->VerboseDir("Decrypted SRF$ifd", 0, $nextIFD + $len); $et->VerboseDump($dataPt, Prefix => "$$et{INDENT} ", Start => $nextIFD, DataPos => $$dirInfo{DataPos}, ); } } #------------------------------------------------------------------------------ # Write SR2 data # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success when reading, or SR2 directory or undef when writing sub WriteSR2($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access my $buff = ''; $$dirInfo{OutFile} = \$buff; return ProcessSR2($et, $dirInfo, $tagTablePtr); } #------------------------------------------------------------------------------ # Read/Write SR2 IFD and its encrypted subdirectories # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success when reading, or SR2 directory or undef when writing sub ProcessSR2($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $raf = $$dirInfo{RAF}; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos}; my $dataLen = $$dirInfo{DataLen} || length $$dataPt; my $base = $$dirInfo{Base} || 0; my $outfile = $$dirInfo{OutFile}; # clear SR2 member variables to be safe delete $$et{SR2SubIFDOffset}; delete $$et{SR2SubIFDLength}; delete $$et{SR2SubIFDKey}; # make sure we have the first 4 bytes available to test directory type my $buff; if ($dataLen < 4 and $raf) { my $pos = $dataPos + ($$dirInfo{DirStart}||0) + $base; if ($raf->Seek($pos, 0) and $raf->Read($buff, 4) == 4) { $dataPt = \$buff; undef $$dirInfo{DataPt}; # must load data from file $raf->Seek($pos, 0); } } # this may either be a normal IFD, or a MRW data block # (only original ARW images from the A100 use the MRW block) my $dataOffset; if ($dataPt and $$dataPt =~ /^\0MR[IM]/) { my ($err, $srfPos, $srfLen, $dataOffset); $dataOffset = $$et{A100DataOffset}; if ($dataOffset) { # save information about the RAW data trailer so it will be preserved $$et{KnownTrailer} = { Name => 'A100 RAW Data', Start => $dataOffset }; } else { $err = 'A100DataOffset tag is missing from A100 ARW image'; } $raf or $err = 'Unrecognized SR2 structure'; unless ($err) { $srfPos = $raf->Tell(); $srfLen = $dataOffset - $srfPos; unless ($srfLen > 0 and $raf->Read($buff, $srfLen) == $srfLen) { $err = 'Error reading MRW directory'; } } if ($err) { $outfile and $et->Error($err), return undef; $et->Warn($err); return 0; } my %dirInfo = ( DataPt => \$buff ); require Image::ExifTool::MinoltaRaw; if ($outfile) { # save MRW data to be written last $$et{MRWDirData} = Image::ExifTool::MinoltaRaw::WriteMRW($et, \%dirInfo); return $$et{MRWDirData} ? "\0\0\0\0\0\0" : undef; } else { if (not $outfile and $$et{HTML_DUMP}) { $et->HDump($srfPos, $srfLen, '[A100 SRF Data]'); } return Image::ExifTool::MinoltaRaw::ProcessMRW($et, \%dirInfo); } } elsif ($$et{A100DataOffset}) { my $err = 'Unexpected A100DataOffset tag'; $outfile and $et->Error($err), return undef; $et->Warn($err); return 0; } my $verbose = $et->Options('Verbose'); my $result; if ($outfile) { $result = Image::ExifTool::Exif::WriteExif($et, $dirInfo, $tagTablePtr); return undef unless $result; $$outfile .= $result; } else { $result = Image::ExifTool::Exif::ProcessExif($et, $dirInfo, $tagTablePtr); } return $result unless $result and $$et{SR2SubIFDOffset}; # only take first offset value if more than one! my @offsets = split ' ', $$et{SR2SubIFDOffset}; my $offset = shift @offsets; my $length = $$et{SR2SubIFDLength}; my $key = $$et{SR2SubIFDKey}; my @subifdPos; if ($offset and $length and defined $key) { my $buff; # read encrypted SR2SubIFD from file if (($raf and $raf->Seek($offset+$base, 0) and $raf->Read($buff, $length) == $length) or # or read from data (when processing Adobe DNGPrivateData) ($offset - $dataPos >= 0 and $offset - $dataPos + $length < $dataLen and ($buff = substr($$dataPt, $offset - $dataPos, $length)))) { Decrypt(\$buff, 0, $length, $key); # display decrypted data in verbose mode if ($verbose > 2 and not $outfile) { $et->VerboseDir("Decrypted SR2SubIFD", 0, $length); $et->VerboseDump(\$buff, Addr => $offset + $base); } my $num = ''; my $dPos = $offset; for (;;) { my %dirInfo = ( Base => $base, DataPt => \$buff, DataLen => length $buff, DirStart => $offset - $dPos, DirName => "SR2SubIFD$num", DataPos => $dPos, ); my $subTable = GetTagTable('Image::ExifTool::Sony::SR2SubIFD'); if ($outfile) { my $fixup = new Image::ExifTool::Fixup; $dirInfo{Fixup} = $fixup; $result = $et->WriteDirectory(\%dirInfo, $subTable); return undef unless $result; # save position of this SubIFD push @subifdPos, length($$outfile); # add this directory to the returned data $$fixup{Start} += length($$outfile); $$outfile .= $result; $$dirInfo{Fixup}->AddFixup($fixup); } else { $result = $et->ProcessDirectory(\%dirInfo, $subTable); } last unless @offsets; $offset = shift @offsets; $num = ($num || 1) + 1; } } else { $et->Warn('Error reading SR2 data'); } } if ($outfile and @subifdPos) { # the SR2SubIFD must be padded to a multiple of 4 bytes for the encryption my $sr2Len = length($$outfile) - $subifdPos[0]; if ($sr2Len & 0x03) { my $pad = 4 - ($sr2Len & 0x03); $sr2Len += $pad; $$outfile .= ' ' x $pad; } # save the new SR2SubIFD Length and Key to be used later for encryption $$et{SR2SubIFDLength} = $sr2Len; my $newKey = $$et{VALUE}{SR2SubIFDKey}; $$et{SR2SubIFDKey} = $newKey if defined $newKey; # update SubIFD pointers manually and add to fixup, and set SR2SubIFDLength my $n = Get16u($outfile, 0); my ($i, %found); for ($i=0; $i<$n; ++$i) { my $entry = 2 + 12 * $i; my $tagID = Get16u($outfile, $entry); # only interested in SR2SubIFDOffset (0x7200) and SR2SubIFDLength (0x7201) next unless $tagID == 0x7200 or $tagID == 0x7201; $found{$tagID} = 1; my $fmt = Get16u($outfile, $entry + 2); if ($fmt != 0x04) { # must be int32u $et->Error("Unexpected format ($fmt) for SR2SubIFD tag"); return undef; } if ($tagID == 0x7201) { # SR2SubIFDLength Set32u($sr2Len, $outfile, $entry + 8); next; } my $tag = 'SR2SubIFDOffset'; my $valuePtr = @subifdPos < 2 ? $entry+8 : Get32u($outfile, $entry+8); my $pos; foreach $pos (@subifdPos) { Set32u($pos, $outfile, $valuePtr); $$dirInfo{Fixup}->AddFixup($valuePtr, $tag); undef $tag; $valuePtr += 4; } } unless ($found{0x7200} and $found{0x7201}) { $et->Error('Missing SR2SubIFD tag'); return undef; } } return $outfile ? $$outfile : $result; } 1; # end __END__ =head1 NAME Image::ExifTool::Sony - Sony EXIF maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to interpret Sony maker notes EXIF meta information. =head1 NOTES Also see Minolta.pm since Sony DSLR models use structures originating from Minolta. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.cybercom.net/~dcoffin/dcraw/> =item L<http://homepage3.nifty.com/kamisaka/makernote/makernote_sony.htm> =item L<http://www.klingebiel.com/tempest/hd/pmp.html> =item (...plus lots of testing with my RX100!) =back =head1 ACKNOWLEDGEMENTS Thanks to Thomas Bodenmann, Philippe Devaux, Jens Duttke, Marcus Holland-Moritz, Andrey Tverdokhleb, Rudiger Lange, Igal Milchtaich, Michael Reitinger and Jos Roost for help decoding some tags. =head1 SEE ALSO L<Image::ExifTool::TagNames/Sony Tags>, L<Image::ExifTool::TagNames/Minolta Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/SonyIDC.pm��������������������������������������������������000644 �000765 �000024 �00000024106 12642461335 021523� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: SonyIDC.pm # # Description: Read/write Sony IDC information # # Revisions: 2010/01/05 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::SonyIDC; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; $VERSION = '1.05'; # Sony IDC tags (ref PH) %Image::ExifTool::SonyIDC::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 2 => 'Image' }, NOTES => 'Tags written by the Sony Image Data Converter utility in ARW images.', SET_GROUP1 => 1, 0x201 => { Name => 'IDCPreviewStart', IsOffset => 1, OffsetPair => 0x202, DataTag => 'IDCPreview', Writable => 'int32u', Protected => 2, }, 0x202 => { Name => 'IDCPreviewLength', OffsetPair => 0x201, DataTag => 'IDCPreview', Writable => 'int32u', Protected => 2, }, 0x8000 => { Name => 'IDCCreativeStyle', Writable => 'int32u', PrintConvColumns => 2, PrintConv => { 1 => 'Camera Setting', 2 => 'Standard', 3 => 'Real', 4 => 'Vivid', 5 => 'Adobe RGB', 6 => 'A100 Standard', # shows up as '-' in IDC menu 7 => 'Neutral', 8 => 'Portrait', 9 => 'Landscape', 10 => 'Clear', 11 => 'Deep', 12 => 'Light', 13 => 'Sunset', 14 => 'Night View', 15 => 'Autumn Leaves', 16 => 'B&W', 17 => 'Sepia', }, }, 0x8001 => { Name => 'CreativeStyleWasChanged', Writable => 'int32u', Notes => 'set if the creative style was ever changed', # (even if it was changed back again later) PrintConv => { 0 => 'No', 1 => 'Yes' }, }, 0x8002 => { Name => 'PresetWhiteBalance', Writable => 'int32u', PrintConv => { 1 => 'Camera Setting', 2 => 'Color Temperature', 3 => 'Specify Gray Point', 4 => 'Daylight', 5 => 'Cloudy', 6 => 'Shade', 7 => 'Cool White Fluorescent', 8 => 'Day Light Fluorescent', 9 => 'Day White Fluorescent', 10 => 'Warm White Fluorescent', 11 => 'Tungsten', 12 => 'Flash', 13 => 'Auto', }, }, 0x8013 => { Name => 'ColorTemperatureAdj', Writable => 'int16u' }, 0x8014 => { Name => 'PresetWhiteBalanceAdj',Writable => 'int32s' }, 0x8015 => { Name => 'ColorCorrection', Writable => 'int32s' }, 0x8016 => { Name => 'SaturationAdj', Writable => 'int32s' }, 0x8017 => { Name => 'ContrastAdj', Writable => 'int32s' }, 0x8018 => { Name => 'BrightnessAdj', Writable => 'int32s' }, 0x8019 => { Name => 'HueAdj', Writable => 'int32s' }, 0x801a => { Name => 'SharpnessAdj', Writable => 'int32s' }, 0x801b => { Name => 'SharpnessOvershoot', Writable => 'int32s' }, 0x801c => { Name => 'SharpnessUndershoot', Writable => 'int32s' }, 0x801d => { Name => 'SharpnessThreshold', Writable => 'int32s' }, 0x801e => { Name => 'NoiseReductionMode', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'On', }, }, 0x8021 => { Name => 'GrayPoint', Writable => 'int16u', Count => 4, }, 0x8022 => { Name => 'D-RangeOptimizerMode', Writable => 'int16u', PrintConv => { 0 => 'Off', 1 => 'Auto', 2 => 'Manual', }, }, 0x8023 => { Name => 'D-RangeOptimizerValue', Writable => 'int32s' }, 0x8024 => { Name => 'D-RangeOptimizerHighlight',Writable => 'int32s' }, 0x8026 => { Name => 'HighlightColorDistortReduct', Writable => 'int16u', PrintConv => { 0 => 'Standard', 1 => 'Advanced', }, }, 0x8027 => { Name => 'NoiseReductionValue', Writable => 'int32s', ValueConv => '($val + 100) / 2', ValueConvInv => '$val * 2 - 100', }, 0x8028 => { Name => 'EdgeNoiseReduction', Writable => 'int32s', ValueConv => '($val + 100) / 2', ValueConvInv => '$val * 2 - 100', }, 0x8029 => { Name => 'ColorNoiseReduction', Writable => 'int32s', ValueConv => '($val + 100) / 2', ValueConvInv => '$val * 2 - 100', }, 0x802d => { Name => 'D-RangeOptimizerShadow', Writable => 'int32s' }, 0x8030 => { Name => 'PeripheralIllumCentralRadius', Writable => 'int32s' }, 0x8031 => { Name => 'PeripheralIllumCentralValue', Writable => 'int32s' }, 0x8032 => { Name => 'PeripheralIllumPeriphValue', Writable => 'int32s' }, 0x9000 => { Name => 'ToneCurveBrightnessX', Writable => 'int16u', Count => -1, }, 0x9001 => { Name => 'ToneCurveRedX', Writable => 'int16u', Count => -1, }, 0x9002 => { Name => 'ToneCurveGreenX', Writable => 'int16u', Count => -1, }, 0x9003 => { Name => 'ToneCurveBlueX', Writable => 'int16u', Count => -1, }, 0x9004 => { Name => 'ToneCurveBrightnessY', Writable => 'int16u', Count => -1, }, 0x9005 => { Name => 'ToneCurveRedY', Writable => 'int16u', Count => -1, }, 0x9006 => { Name => 'ToneCurveGreenY', Writable => 'int16u', Count => -1, }, 0x9007 => { Name => 'ToneCurveBlueY', Writable => 'int16u', Count => -1, }, 0xd000 => { Name => 'CurrentVersion', Writable => 'int32u' }, 0xd001 => { Name => 'VersionIFD', Groups => { 1 => 'Version0' }, Flags => 'SubIFD', Notes => 'there is one VersionIFD for each entry in the "Version Stack"', SubDirectory => { DirName => 'Version0', TagTable => 'Image::ExifTool::SonyIDC::Main', Start => '$val', Base => '$start', MaxSubdirs => 20, # (IDC v3.0 writes max. 10) RelativeBase => 1, # needed to write SubIFD with relative offsets }, }, 0xd100 => { Name => 'VersionCreateDate', Writable => 'string', Groups => { 2 => 'Time' }, Notes => 'date/time when this entry was created in the "Version Stack"', Shift => 'Time', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,0)', }, 0xd101 => { Name => 'VersionModifyDate', Writable => 'string', Groups => { 2 => 'Time' }, Shift => 'Time', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,0)', }, ); # extract IDC preview images as composite tags %Image::ExifTool::SonyIDC::Composite = ( GROUPS => { 2 => 'Image' }, IDCPreviewImage => { Groups => { 2 => 'Preview' }, Require => { 0 => 'IDCPreviewStart', 1 => 'IDCPreviewLength', }, # extract all preview images (not just one) RawConv => q{ require Image::ExifTool::SonyIDC; Image::ExifTool::SonyIDC::ExtractPreviews($self); }, }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::SonyIDC'); # set "Permanent" flag for all tags { my $key; foreach $key (TagTableKeys(\%Image::ExifTool::SonyIDC::Main)) { $Image::ExifTool::SonyIDC::Main{$key}{Permanent} = 1; } } #------------------------------------------------------------------------------ # Extract all IDC preview images # Inputs: 0) ExifTool object ref # Returns: data for "IDCPreviewImage" tag (which I have never seen), # or undef if there was no preview in the SonyIDC IFD sub ExtractPreviews($) { my $et = shift; my $i = 1; my $xtra = ' (1)'; my $preview; # loop through all available IDC preview images in the order they were found for (;;) { my $key = "IDCPreviewStart$xtra"; unless (defined $$et{VALUE}{$key}) { last unless $xtra; $xtra = ''; # do the last tag extracted last next; } # run through IDC preview images in the same order they were extracted my $off = $et->GetValue($key, 'ValueConv') or last; my $len = $et->GetValue("IDCPreviewLength$xtra", 'ValueConv') or last; # get stack version from number in group 1 name my $grp1 = $et->GetGroup($key, 1); if ($grp1 =~ /(\d+)$/) { my $tag = "IDCPreviewImage$1"; unless ($Image::ExifTool::Extra{$tag}) { AddTagToTable(\%Image::ExifTool::Extra, $tag, { Name => $tag, Groups => { 0 => 'Composite', 1 => 'Composite', 2 => 'Preview'}, }); } my $val = Image::ExifTool::Exif::ExtractImage($et, $off, $len, $tag); $et->FoundTag($tag, $val); } else { $preview = Image::ExifTool::Exif::ExtractImage($et, $off, $len, 'IDCPreviewImage'); } # step to next set of tags unless we are done last unless $xtra; ++$i; $xtra = " ($i)"; } return $preview; } 1; # end __END__ =head1 NAME Image::ExifTool::SonyIDC - Read/write Sony IDC information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read and write Sony Image Data Converter version 3.0 metadata in ARW images. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/SonyIDC Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Stim.pm�����������������������������������������������������000644 �000765 �000024 �00000010766 12642461335 021176� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Stim.pm # # Description: Definitions for Stereo Still Image tags # # Revisions: 06/12/2009 - P. Harvey Created # # References: 1) http://www.cipa.jp/std/documents/e/DC-006_E.pdf #------------------------------------------------------------------------------ package Image::ExifTool::Stim; use strict; use vars qw($VERSION); $VERSION = '1.01'; # Tags found in Stim APP3 segment in JPEG images %Image::ExifTool::Stim::Main = ( GROUPS => { 0 => 'Stim', 1 => 'Stim', 2 => 'Image'}, NOTES => q{ These tags are part of the CIPA Stereo Still Image specification, and are found in the APP3 "Stim" segment of JPEG images. See L<http://www.cipa.jp/std/documents/e/DC-006_E.pdf> for the official specification. }, 0 => 'StimVersion', 1 => { Name => 'ApplicationData', Binary => 1, }, 2 => { Name => 'ImageArrangement', PrintConv => { 0 => 'Parallel View Alignment', 1 => 'Cross View Alignment', }, }, 3 => { Name => 'ImageRotation', PrintConv => { 1 => 'None', }, }, 4 => 'ScalingFactor', 5 => 'CropXSize', 6 => 'CropYSize', 7 => { Name => 'CropX', SubDirectory => { TagTable => 'Image::ExifTool::Stim::CropX', }, }, 8 => { Name => 'CropY', SubDirectory => { TagTable => 'Image::ExifTool::Stim::CropY', }, }, 9 => { Name => 'ViewType', PrintConv => { 0 => 'No Pop-up Effect', 1 => 'Pop-up Effect', }, }, 10 => { Name => 'RepresentativeImage', PrintConv => { 0 => 'Left Viewpoint', 1 => 'Right Viewpoint', }, }, 11 => { Name => 'ConvergenceBaseImage', PrintConv => { 0 => 'Left Viewpoint', 1 => 'Right Viewpoint', 255 => 'Equivalent for Both Viewpoints', }, }, 12 => { Name => 'AssumedDisplaySize', PrintConv => '"$val mm"', }, 13 => { Name => 'AssumedDistanceView', PrintConv => '"$val mm"', }, 14 => 'RepresentativeDisparityNear', 15 => 'RepresentativeDisparityFar', 16 => { Name => 'InitialDisplayEffect', PrintConv => { 0 => 'Off', 1 => 'On', }, }, 17 => { Name => 'ConvergenceDistance', PrintConv => '$val ? "$val mm" : "inf"', }, 18 => { Name => 'CameraArrangementInterval', PrintConv => '"$val mm"', }, 19 => 'ShootingCount', ); # crop offset X tags %Image::ExifTool::Stim::CropX = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'Stim', 1 => 'Stim', 2 => 'Image'}, 0 => { Name => 'CropXCommonOffset', Format => 'int16u', PrintConv => { 0 => 'Common Offset Setting', 1 => 'Individual Offset Setting', }, }, 2 => 'CropXViewpointNumber', 3 => { Name => 'CropXOffset', Format => 'int32s', }, 7 => 'CropXViewpointNumber2', 8 => { Name => 'CropXOffset2', Format => 'int32s', }, ); # crop offset Y tags %Image::ExifTool::Stim::CropY = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 0 => 'Stim', 1 => 'Stim', 2 => 'Image'}, 0 => { Name => 'CropYCommonOffset', Format => 'int16u', PrintConv => { 0 => 'Common Offset Setting', 1 => 'Individual Offset Setting', }, }, 2 => 'CropYViewpointNumber', 3 => { Name => 'CropYOffset', Format => 'int32s', }, 7 => 'CropYViewpointNumber2', 8 => { Name => 'CropYOffset2', Format => 'int32s', }, ); 1; # end __END__ =head1 NAME Image::ExifTool::Stim - Definitions for Stereo Still Image tags =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains tag definitions for Stereo Still Image format (Stim) information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.cipa.jp/std/documents/e/DC-006_E.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Stim Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������Image-ExifTool-10.10/lib/Image/ExifTool/TagInfoXML.pm�����������������������������������������������000644 �000765 �000024 �00000101003 12642461336 022154� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: TagInfoXML.pm # # Description: Read/write tag information XML database # # Revisions: 2009/01/28 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::TagInfoXML; use strict; require Exporter; use vars qw($VERSION @ISA); use Image::ExifTool qw(:Utils :Vars); use Image::ExifTool::XMP; $VERSION = '1.28'; @ISA = qw(Exporter); # set this to a language code to generate Lang module with 'MISSING' entries my $makeMissing = ''; sub LoadLangModules($;$); sub WriteLangModule($$;$); sub NumbersFirst; # names for acknowledgements in the POD documentation my %credits = ( cs => 'Jens Duttke and Petr MichE<aacute>lek', de => 'Jens Duttke and Herbert Kauer', es => 'Jens Duttke, Santiago del BrE<iacute>o GonzE<aacute>lez and Emilio Sancha', fi => 'Jens Duttke and Jarkko ME<auml>kineva', fr => 'Jens Duttke, Bernard Guillotin, Jean Glasser, Jean Piquemal, Harry Nizard and Alphonse Philippe', it => 'Jens Duttke, Ferdinando Agovino, Emilio Dati and Michele Locati', ja => 'Jens Duttke and Kazunari Nishina', ko => 'Jens Duttke and Jeong Beom Kim', nl => 'Jens Duttke, Peter Moonen, Herman Beld and Peter van der Laan', pl => 'Jens Duttke, Przemyslaw Sulek and Kacper Perschke', ru => 'Jens Duttke, Sergey Shemetov, Dmitry Yerokhin and Anton Sukhinov', sv => 'Jens Duttke and BjE<ouml>rn SE<ouml>derstrE<ouml>m', 'tr' => 'Jens Duttke, Hasan Yildirim and Cihan Ulusoy', zh_cn => 'Jens Duttke and Haibing Zhong', zh_tw => 'Jens Duttke and MikeF', ); # translate country codes to language codes my %translateLang = ( ch_s => 'zh_cn', ch_cn => 'zh_cn', ch_tw => 'zh_tw', cz => 'cs', jp => 'ja', kr => 'ko', se => 'sv', ); my $numbersFirst = 1; # set to -1 to sort numbers last, or 2 to put negative numbers last my $caseInsensitive; # used internally by sort routine #------------------------------------------------------------------------------ # Utility to print tag information database as an XML list # Inputs: 0) output file name (undef to send to console), # 1) group name (may be undef), 2) options hash ('Flags','NoDesc','Lang') # Returns: true on success sub Write(;$$%) { local ($_, *PTIFILE); my ($file, $group, %opts) = @_; my @groups = split ':', $group if $group; my $et = new Image::ExifTool; my ($fp, $tableName, %langInfo, @langs, $defaultLang); Image::ExifTool::LoadAllTables(); # first load all our tables unless ($opts{NoDesc}) { $defaultLang = $Image::ExifTool::defaultLang; LoadLangModules(\%langInfo, $opts{Lang}); # load necessary Lang modules if ($opts{Lang}) { @langs = grep /^$opts{Lang}$/i, keys %langInfo; } else { @langs = sort keys %langInfo; } } if (defined $file) { open PTIFILE, ">$file" or return 0; $fp = \*PTIFILE; } else { $fp = \*STDOUT; } print $fp "<?xml version='1.0' encoding='UTF-8'?>\n"; print $fp "<!-- Generated by Image::ExifTool $Image::ExifTool::VERSION -->\n"; print $fp "<taginfo>\n\n"; # loop through all tables and save tag names to %allTags hash foreach $tableName (sort keys %allTables) { my $table = GetTagTable($tableName); my $grps = $$table{GROUPS}; my ($tagID, $didTag); # sort in same order as tag name documentation $caseInsensitive = ($tableName =~ /::XMP::/); # get list of languages defining elements in this table my $isBinary = ($$table{PROCESS_PROC} and $$table{PROCESS_PROC} eq \&Image::ExifTool::ProcessBinaryData); # generate flattened tag names for structure fields if this is an XMP table if ($$table{GROUPS} and $$table{GROUPS}{0} eq 'XMP') { Image::ExifTool::XMP::AddFlattenedTags($table); } $numbersFirst = 2; $numbersFirst = -1 if $$table{VARS} and $$table{VARS}{ALPHA_FIRST}; my @keys = sort NumbersFirst TagTableKeys($table); $numbersFirst = 1; # loop throug all tag ID's in this table foreach $tagID (@keys) { my @infoArray = GetTagInfoList($table, $tagID); my $xmlID = Image::ExifTool::XMP::FullEscapeXML($tagID); # get a list of languages defining elements for this ID my ($index, $fam); PTILoop: for ($index=0; $index<@infoArray; ++$index) { my $tagInfo = $infoArray[$index]; # don't list subdirectories unless they are writable next unless $$tagInfo{Writable} or not $$tagInfo{SubDirectory}; if (@groups) { my @tg = $et->GetGroup($tagInfo); foreach $group (@groups) { next PTILoop unless grep /^$group$/i, @tg; } } unless ($didTag) { my $tname = $$table{SHORT_NAME}; print $fp "<table name='$tname' g0='$$grps{0}' g1='$$grps{1}' g2='$$grps{2}'>\n"; unless ($opts{NoDesc}) { # print table description my $desc = $$table{TABLE_DESC}; unless ($desc) { ($desc = $tname) =~ s/::Main$//; $desc =~ s/::/ /g; } # print alternate language descriptions print $fp " <desc lang='en'>$desc</desc>\n"; foreach (@langs) { $desc = $langInfo{$_}{$tableName} or next; $desc = Image::ExifTool::XMP::EscapeXML($desc); print $fp " <desc lang='$_'>$desc</desc>\n"; } } $didTag = 1; } my $name = $$tagInfo{Name}; my $ind = @infoArray > 1 ? " index='$index'" : ''; my $format = $$tagInfo{Writable} || $$table{WRITABLE}; my $writable = $format ? 'true' : 'false'; # check our conversions to make sure we can really write this tag if ($writable eq 'true') { foreach ('PrintConv','ValueConv') { next unless $$tagInfo{$_}; next if $$tagInfo{$_ . 'Inv'}; next if ref($$tagInfo{$_}) =~ /^(HASH|ARRAY)$/; next if $$tagInfo{WriteAlso}; $writable = 'false'; last; } } $format = $$tagInfo{Format} || $$table{FORMAT} if not defined $format or $format eq '1'; $format = 'struct' if $$tagInfo{Struct}; if (defined $format) { $format =~ s/\[.*\$.*\]//; # remove expressions from format } elsif ($isBinary) { $format = 'int8u'; } else { $format = '?'; } my $count = ''; if ($format =~ s/\[.*?(\d*)\]$//) { $count = " count='$1'" if length $1; } elsif ($$tagInfo{Count} and $$tagInfo{Count} > 1) { $count = " count='$$tagInfo{Count}'"; } my @groups = $et->GetGroup($tagInfo); my $writeGroup = $$tagInfo{WriteGroup} || $$table{WRITE_GROUP}; if ($writeGroup and $writeGroup ne 'Comment') { $groups[1] = $writeGroup; # use common write group for group 1 } # add group names if different from table defaults my $grp = ''; for ($fam=0; $fam<3; ++$fam) { $grp .= " g$fam='$groups[$fam]'" if $groups[$fam] ne $$grps{$fam}; } # add flags if necessary if ($opts{Flags}) { my @flags; foreach (qw(Avoid Binary List Mandatory Unknown)) { push @flags, $_ if $$tagInfo{$_}; } push @flags, $$tagInfo{List} if $$tagInfo{List} and $$tagInfo{List} =~ /^(Alt|Bag|Seq)$/; push @flags, 'Flattened' if defined $$tagInfo{Flat}; push @flags, 'Unsafe' if $$tagInfo{Protected} and $$tagInfo{Protected} & 0x01; push @flags, 'Protected' if $$tagInfo{Protected} and $$tagInfo{Protected} & 0x02; push @flags, 'Permanent' if $$tagInfo{Permanent} or ($groups[0] eq 'MakerNotes' and not defined $$tagInfo{Permanent}); $grp = " flags='" . join(',', sort @flags) . "'$grp" if @flags; } print $fp " <tag id='$xmlID' name='$name'$ind type='$format'$count writable='$writable'$grp"; if ($opts{NoDesc}) { # short output format print $fp "/>\n"; # empty tag element next; # no descriptions or values } my $desc = $$tagInfo{Description}; $desc = Image::ExifTool::MakeDescription($name) unless defined $desc; # add alternate language descriptions and get references # to alternate language PrintConv hashes my $altDescr = ''; my %langConv; foreach (@langs) { my $ld = $langInfo{$_}{$name} or next; if (ref $ld) { $langConv{$_} = $$ld{PrintConv}; $ld = $$ld{Description} or next; } # ignore descriptions that are the same as the default language next if $ld eq $desc; $ld = Image::ExifTool::XMP::EscapeXML($ld); $altDescr .= "\n <desc lang='$_'>$ld</desc>"; } # print tag descriptions $desc = Image::ExifTool::XMP::EscapeXML($desc); unless ($opts{Lang} and $altDescr) { print $fp ">\n <desc lang='$defaultLang'>$desc</desc>"; } print $fp "$altDescr\n"; for (my $i=0; ; ++$i) { my $conv = $$tagInfo{PrintConv}; my $idx = ''; if (ref $conv eq 'ARRAY') { last unless $i < @$conv; $conv = $$conv[$i]; $idx = " index='$i'"; } else { last if $i; } next unless ref $conv eq 'HASH'; # make a list of available alternate languages my @langConv = sort keys %langConv; print $fp " <values$idx>\n"; my $key; $caseInsensitive = 0; # add bitmask values to main lookup if ($$conv{BITMASK}) { foreach $key (keys %{$$conv{BITMASK}}) { my $mask = 0x01 << $key; next if not $mask or $$conv{$mask}; $$conv{$mask} = $$conv{BITMASK}{$key}; } } foreach $key (sort NumbersFirst keys %$conv) { next if $key eq 'BITMASK' or $key eq 'OTHER' or $key eq 'Notes'; my $val = $$conv{$key}; my $xmlVal = Image::ExifTool::XMP::EscapeXML($val); my $xmlKey = Image::ExifTool::XMP::FullEscapeXML($key); print $fp " <key id='$xmlKey'>\n"; # add alternate language values my $altConv = ''; foreach (@langConv) { my $lv = $langConv{$_}; # handle indexed PrintConv entries $lv = $$lv[$i] or next if ref $lv eq 'ARRAY'; $lv = $$lv{$val}; # ignore values that are missing or same as default next unless defined $lv and $lv ne $val; $lv = Image::ExifTool::XMP::EscapeXML($lv); $altConv .= " <val lang='$_'>$lv</val>\n"; } unless ($opts{Lang} and $altConv) { print $fp " <val lang='$defaultLang'>$xmlVal</val>\n" } print $fp "$altConv </key>\n"; } print $fp " </values>\n"; } print $fp " </tag>\n"; } } print $fp "</table>\n\n" if $didTag; } my $success = 1; print $fp "</taginfo>\n" or $success = 0; close $fp or $success = 0 if defined $file; return $success; } #------------------------------------------------------------------------------ # Escape backslash and quote in string # Inputs: string # Returns: escaped string sub EscapePerl { my $str = shift; $str =~ s/\\/\\\\/g; $str =~ s/'/\\'/g; return $str; } #------------------------------------------------------------------------------ # Generate Lang modules from input tag info XML database # Inputs: 0) XML filename, 1) update flags: # 0x01 = preserve version numbers # 0x02 = update all modules, even if they didn't change # 0x04 = update from scratch, ignoring existing definitions # 0x08 = override existing different descriptions and values # Returns: Count of updated Lang modules, or -1 on error # Notes: Must be run from the directory containing 'lib' sub BuildLangModules($;$) { local ($_, *XFILE); my ($file, $updateFlag) = @_; my ($table, $tableName, $id, $index, $valIndex, $name, $key, $lang, $defDesc); my (%langInfo, %different, %changed, $overrideDifferent); Image::ExifTool::LoadAllTables(); # first load all our tables # generate our flattened tags foreach $tableName (sort keys %allTables) { my $table = GetTagTable($tableName); next unless $$table{GROUPS} and $$table{GROUPS}{0} eq 'XMP'; Image::ExifTool::XMP::AddFlattenedTags($table); } LoadLangModules(\%langInfo); # load all existing Lang modules $updateFlag = 0 unless $updateFlag; %langInfo = () if $updateFlag & 0x04; $overrideDifferent = 1 if $updateFlag & 0x08; if (defined $file) { open XFILE, $file or return -1; while (<XFILE>) { next unless /^\s*<(\/?)(\w+)/; my $tok = $2; if ($1) { # close appropriate entities if ($tok eq 'tag') { undef $id; undef $index; undef $name; undef $defDesc; } elsif ($tok eq 'values') { undef $key; undef $valIndex; } elsif ($tok eq 'table') { undef $table; undef $id; } next; } if ($tok eq 'table') { /^\s*<table name='([^']+)'[ >]/ or warn('Bad table'), next; $tableName = "Image::ExifTool::$1"; # ignore userdefined tables next if $tableName =~ /^Image::ExifTool::UserDefined/; $table = Image::ExifTool::GetTagTable($tableName); $table or warn("Unknown tag table $tableName\n"); next; } next unless defined $table; if ($tok eq 'tag') { /^\s*<tag id='([^']*)' name='([^']+)'( index='(\d+)')?[ >]/ or warn('Bad tag'), next; $id = Image::ExifTool::XMP::FullUnescapeXML($1); $name = $2; $index = $4; $id = hex($id) if $id =~ /^0x[\da-fA-F]+$/; # convert hex ID's next; } if ($tok eq 'values') { /^\s*<values index='([^']*)'>/ or next; $valIndex = $1; } elsif ($tok eq 'key') { defined $id or warn('No ID'), next; /^\s*<key id='([^']*)'>/ or warn('Bad key'), next; $key = Image::ExifTool::XMP::FullUnescapeXML($1); $key = hex($key) if $key =~ /^0x[\da-fA-F]+$/; # convert hex keys } elsif ($tok eq 'val' or $tok eq 'desc') { /^\s*<$tok( lang='([-\w]+?)')?>(.*)<\/$tok>/ or warn("Bad $tok"), next; $tok eq 'desc' and defined $key and warn('Out of order "desc"'), next; my $lang = $2 or next; # looking only for alternate languages $lang =~ tr/-A-Z/_a-z/; # use standard ISO 639-1 language codes $lang = $translateLang{$lang} if $translateLang{$lang}; my $tval = Image::ExifTool::XMP::UnescapeXML($3); my $val = ucfirst $tval; $val = $tval if $tval =~ /^(cRAW|iTun)/; # special-case non-capitalized values my $cap = ($tval ne $val); if ($makeMissing and $lang eq 'en') { $lang = $makeMissing; $val = 'MISSING'; } my $isDefault = ($lang eq $Image::ExifTool::defaultLang); unless ($langInfo{$lang} or $isDefault) { print "Creating new language $lang\n"; $langInfo{$lang} = { }; } defined $name or $name = '<unknown>'; unless (defined $id) { next if $isDefault; # this is a table description next if $langInfo{$lang}{$tableName} and $langInfo{$lang}{$tableName} eq $val; $langInfo{$lang}{$tableName} = $val; $changed{$lang} = 1; warn("Capitalized '$lang' val for $name: $val\n") if $cap; next; } my @infoArray = GetTagInfoList($table, $id); # this will fail for UserDefined tags and tags without ID's @infoArray or warn("Error loading tag for $tableName ID='$id'\n"), next; my ($tagInfo, $langInfo); if (defined $index) { $tagInfo = $infoArray[$index]; $tagInfo or warn('Invalid index'), next; } else { @infoArray > 1 and warn('Missing index'), next; $tagInfo = $infoArray[0]; } my $tagName = $$tagInfo{Name}; if ($isDefault) { unless ($$tagInfo{Description}) { $$tagInfo{Description} = Image::ExifTool::MakeDescription($tagName); } $defDesc = $$tagInfo{Description}; $langInfo = $tagInfo; } else { $langInfo = $langInfo{$lang}{$tagName}; if (not defined $langInfo) { $langInfo = $langInfo{$lang}{$tagName} = { }; } elsif (not ref $langInfo) { $langInfo = $langInfo{$lang}{$tagName} = { Description => $langInfo }; } } # save new value in langInfo record if ($tok eq 'desc') { my $oldVal = $$langInfo{Description}; next if defined $oldVal and $oldVal eq $val; if ($makeMissing) { next if defined $oldVal and $val eq 'MISSING'; } elsif (defined $oldVal) { my $t = "$lang $tagName"; unless (defined $different{$t} and $different{$t} eq $val) { my $a = defined $different{$t} ? 'ANOTHER ' : ''; warn "${a}Different '$lang' desc for $tagName: $val (was $$langInfo{Description})\n"; next if defined $different{$t}; # don't change back again $different{$t} = $val; } next unless $overrideDifferent; } next if $isDefault; if (defined $defDesc and $defDesc eq $val) { delete $$langInfo{Description}; # delete if same as default language } else { $$langInfo{Description} = $val; } } else { defined $key or warn("No key for $$tagInfo{Name}"), next; my $printConv = $$tagInfo{PrintConv}; if (ref $printConv eq 'ARRAY') { defined $valIndex or warn('No value index'), next; $printConv = $$printConv[$valIndex]; } ref $printConv eq 'HASH' or warn('No PrintConv'), next; my $convVal = $$printConv{$key}; unless (defined $convVal) { if ($$printConv{BITMASK} and $key =~ /^\d+$/) { my $i; for ($i=0; $i<64; ++$i) { my $mask = (0x01 << $i) or last; next unless $key == $mask; $convVal = $$printConv{BITMASK}{$i}; } } warn("Missing PrintConv entry for $tableName $$tagInfo{Name} $key\n") and next unless defined $convVal; } if ($cap and $convVal =~ /^[a-z]/) { $val = lcfirst $val; # change back to lower case undef $cap; } my $lc = $$langInfo{PrintConv}; $lc or $lc = $$langInfo{PrintConv} = { }; $lc = $printConv if ref $lc eq 'ARRAY'; #(default lang only) my $oldVal = $$lc{$convVal}; next if defined $oldVal and $oldVal eq $val; if ($makeMissing) { next if defined $oldVal and $val eq 'MISSING'; } elsif (defined $oldVal and (not $isDefault or not $val=~/^\d+$/)) { my $t = "$lang $tagName $convVal"; unless (defined $different{$t} and $different{$t} eq $val) { my $a = defined $different{$t} ? 'ANOTHER ' : ''; warn "${a}Different '$lang' val for $tagName '$convVal': $val (was $oldVal)\n"; next if defined $different{$t}; # don't change back again $different{$t} = $val; } next unless $overrideDifferent; } next if $isDefault; warn("Capitalized '$lang' val for $tagName: $tval\n") if $cap; $$lc{$convVal} = $val; } $changed{$lang} = 1; } } close XFILE; } # rewrite all changed Lang modules my $rtnVal = 0; foreach $lang ($updateFlag & 0x02 ? @Image::ExifTool::langs : sort keys %changed) { next if $lang eq $Image::ExifTool::defaultLang; ++$rtnVal; # write this module (only increment version number if not forced) WriteLangModule($lang, $langInfo{$lang}, not $updateFlag & 0x01) or $rtnVal = -1, last; } return $rtnVal; } #------------------------------------------------------------------------------ # Write Lang module # Inputs: 0) language string, 1) langInfo lookup reference, 2) flag to increment version # Returns: true on success sub WriteLangModule($$;$) { local ($_, *XOUT); my ($lang, $langTags, $newVersion) = @_; my $err; -e "lib/Image/ExifTool" or die "Must run from directory containing 'lib'\n"; my $out = "lib/Image/ExifTool/Lang/$lang.pm"; my $tmp = "$out.tmp"; open XOUT, ">$tmp" or die "Error creating $tmp\n"; my $ver = "Image::ExifTool::Lang::${lang}::VERSION"; no strict 'refs'; if ($$ver) { $ver = $$ver; $ver = int($ver * 100 + 1.5) / 100 if $newVersion; } else { $ver = 1.0; } $ver = sprintf('%.2f', $ver); use strict 'refs'; my $langName = $Image::ExifTool::langName{$lang} || $lang; $langName =~ s/\s*\(.*//; print XOUT <<HEADER; #------------------------------------------------------------------------------ # File: $lang.pm # # Description: ExifTool $langName language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::$lang; use strict; use vars qw(\$VERSION); \$VERSION = '$ver'; HEADER print XOUT "\%Image::ExifTool::Lang::${lang}::Translate = (\n"; # loop through all tag and table names my $tag; foreach $tag (sort keys %$langTags) { my $desc = $$langTags{$tag}; my $conv; if (ref $desc) { $conv = $$desc{PrintConv}; $desc = $$desc{Description}; # remove description if not necessary # (not strictly correct -- should test against tag description, not name) undef $desc if $desc and $desc eq $tag; # remove unnecessary value translations if ($conv) { my @keys = keys %$conv; foreach (@keys) { delete $$conv{$_} if $_ eq $$conv{$_}; } undef $conv unless %$conv; } } if (defined $desc) { $desc = EscapePerl($desc); } else { next unless $conv; } print XOUT " '$tag' => "; unless ($conv) { print XOUT "'$desc',\n"; next; } print XOUT "{\n"; print XOUT " Description => '$desc',\n" if defined $desc; if ($conv) { print XOUT " PrintConv => {\n"; foreach (sort keys %$conv) { my $str = EscapePerl($_); my $val = EscapePerl($$conv{$_}); print XOUT " '$str' => '$val',\n"; } print XOUT " },\n"; } print XOUT " },\n"; } # generate acknowledgements for this language my $ack; if ($credits{$lang}) { $ack = "Thanks to $credits{$lang} for providing this translation."; $ack =~ s/(.{1,76})( +|$)/$1\n/sg; # wrap text to 76 columns $ack = "~head1 ACKNOWLEDGEMENTS\n\n$ack\n"; } else { $ack = ''; } my $footer = <<FOOTER; ); 1; # end __END__ ~head1 NAME Image::ExifTool::Lang::$lang.pm - ExifTool $langName language translations ~head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. ~head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. $ack~head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> ~cut FOOTER $footer =~ s/^~/=/mg; # un-do pod obfuscation print XOUT $footer or $err = 1; close XOUT or $err = 1; if ($err or not rename($tmp, $out)) { warn "Error writing $out\n"; unlink $tmp; $err = 1; } return $err ? 0 : 1; } #------------------------------------------------------------------------------ # load all lang modules into hash # Inputs: 0) Hash reference, 1) specific language to load (undef for all) sub LoadLangModules($;$) { my ($langHash, $lang) = @_; require Image::ExifTool; my @langs = $lang ? ($lang) : @Image::ExifTool::langs; foreach $lang (@langs) { next if $lang eq $Image::ExifTool::defaultLang; eval "require Image::ExifTool::Lang::$lang" or warn("Can't load Lang::$lang\n"), next; my $xlat = "Image::ExifTool::Lang::${lang}::Translate"; no strict 'refs'; %$xlat or warn("Missing Info for $lang\n"), next; $$langHash{$lang} = \%$xlat; use strict 'refs'; } } #------------------------------------------------------------------------------ # sort numbers first numerically, then strings alphabetically (case insensitive) sub NumbersFirst { my $rtnVal; my ($bNum, $bDec); ($bNum, $bDec) = ($1, $3) if $b =~ /^(-?[0-9]+)(\.(\d*))?$/; if ($a =~ /^(-?[0-9]+)(\.(\d*))?$/) { if (defined $bNum) { $bNum += 1e9 if $numbersFirst == 2 and $bNum < 0; my $aInt = $1; $aInt += 1e9 if $numbersFirst == 2 and $aInt < 0; # compare integer part as a number $rtnVal = $aInt <=> $bNum; unless ($rtnVal) { my $aDec = $3 || 0; $bDec or $bDec = 0; # compare decimal part as an integer too # (so that "1.10" comes after "1.9") $rtnVal = $aDec <=> $bDec; } } else { $rtnVal = -$numbersFirst; } } elsif (defined $bNum) { $rtnVal = $numbersFirst; } else { my ($a2, $b2) = ($a, $b); # expand numbers to 3 digits (with restrictions to avoid messing up ascii-hex tags) $a2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $a2 =~ /^(APP|DMC-\w+ )?[.0-9 ]*$/ and length($a2)<16; $b2 =~ s/(\d+)/sprintf("%.3d",$1)/eg if $b2 =~ /^(APP|DMC-\w+ )?[.0-9 ]*$/ and length($b2)<16; $caseInsensitive and $rtnVal = (lc($a2) cmp lc($b2)); $rtnVal or $rtnVal = ($a2 cmp $b2); } return $rtnVal; } 1; # end __END__ =head1 NAME Image::ExifTool::TagInfoXML - Read/write tag information XML database =head1 DESCRIPTION This module is used to generate an XML database from all ExifTool tag information. The XML database may then be edited and used to re-generate the language modules (Image::ExifTool::Lang::*). =head1 METHODS =head2 Write Print complete tag information database in XML format. # save list of all tags $success = Image::ExifTool::TagInfoXML::Write('dst.xml'); # list all IPTC tags to console, including Flags Image::ExifTool::TagInfoXML::Write(undef, 'IPTC', Flags => 1); # write all EXIF Camera tags to file Image::ExifTool::TagInfoXML::Write($outfile, 'exif:camera'); =over 4 =item Inputs: 0) [optional] Output file name, or undef for console output. Output file will be overwritten if it already exists. 1) [optional] String of group names separated by colons to specify the group to print. A specific IFD may not be given as a group, since EXIF tags may be written to any IFD. Saves all groups if not specified. 2) [optional] Hash of options values: Flags - Set to output 'flags' attribute NoDesc - Set to suppress output of descriptions Lang - Select a single language for output =item Return Value: True on success. =item Sample XML Output: =back <?xml version='1.0' encoding='UTF-8'?> <taginfo> <table name='XMP::dc' g0='XMP' g1='XMP-dc' g2='Other'> <desc lang='en'>XMP Dublin Core</desc> <tag id='title' name='Title' type='lang-alt' writable='true' g2='Image'> <desc lang='en'>Title</desc> <desc lang='de'>Titel</desc> <desc lang='fr'>Titre</desc> </tag> ... </table> </taginfo> Flags (if selected and available) are formatted as a comma-separated list of the following possible values: Avoid, Binary, List, Mandatory, Permanent, Protected, Unknown and Unsafe. See the L<tag name documentation|Image::ExifTool::TagNames> and lib/Image/ExifTool/README for a description of these flags. For XMP List tags, the list type (Alt, Bag or Seq) is also output as a flag if applicable. =head2 BuildLangModules Build all Image::ExifTool::Lang modules from an XML database file. Image::ExifTool::TagInfoXML::BuildLangModules('src.xml'); =over 4 =item Inputs: 0) XML file name 1) Update flags: 0x01 = preserve version numbers 0x02 = update all modules, even if they didn't change 0x04 = update from scratch, ignoring existing definitions 0x08 = override existing different descriptions and values =item Return Value: Number of modules updated, or negative on error. =back =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagNames(3pm)|Image::ExifTool::TagNames> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/TagLookup.pm������������������������������������������������000644 �000765 �000024 �00001400372 12650434571 022165� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: TagLookup.pm # # Description: Fast lookup for ExifTool tags # # Notes: This lookup is used to look up tag names for writing # # Revisions: 2004-12-31 - P. Harvey Created # 2013-01-06 - PH Allow wildcards in FindTagInfo() #------------------------------------------------------------------------------ package Image::ExifTool::TagLookup; use strict; require Exporter; use vars qw($VERSION @ISA @EXPORT_OK); use Image::ExifTool qw(:Utils); $VERSION = '1.13'; @ISA = qw(Exporter); @EXPORT_OK = qw(FindTagInfo TagExists); sub AddTags($$); sub AddFields($$$$$$;$$); # # Note: the lists below were generated by Image::ExifTool::BuildTagLookup # #++++ Begin automatically generated code ++++ # list of tables containing writable tags my @tableList = ( 'Image::ExifTool::APP12::Ducky', 'Image::ExifTool::Apple::Main', 'Image::ExifTool::Canon::AFConfig', 'Image::ExifTool::Canon::AFMicroAdj', 'Image::ExifTool::Canon::Ambience', 'Image::ExifTool::Canon::AspectInfo', 'Image::ExifTool::Canon::CameraInfo1000D', 'Image::ExifTool::Canon::CameraInfo1D', 'Image::ExifTool::Canon::CameraInfo1DX', 'Image::ExifTool::Canon::CameraInfo1DmkII', 'Image::ExifTool::Canon::CameraInfo1DmkIII', 'Image::ExifTool::Canon::CameraInfo1DmkIIN', 'Image::ExifTool::Canon::CameraInfo1DmkIV', 'Image::ExifTool::Canon::CameraInfo40D', 'Image::ExifTool::Canon::CameraInfo450D', 'Image::ExifTool::Canon::CameraInfo500D', 'Image::ExifTool::Canon::CameraInfo50D', 'Image::ExifTool::Canon::CameraInfo550D', 'Image::ExifTool::Canon::CameraInfo5D', 'Image::ExifTool::Canon::CameraInfo5DmkII', 'Image::ExifTool::Canon::CameraInfo5DmkIII', 'Image::ExifTool::Canon::CameraInfo600D', 'Image::ExifTool::Canon::CameraInfo60D', 'Image::ExifTool::Canon::CameraInfo650D', 'Image::ExifTool::Canon::CameraInfo6D', 'Image::ExifTool::Canon::CameraInfo70D', 'Image::ExifTool::Canon::CameraInfo7D', 'Image::ExifTool::Canon::CameraInfoPowerShot', 'Image::ExifTool::Canon::CameraInfoPowerShot2', 'Image::ExifTool::Canon::CameraInfoUnknown', 'Image::ExifTool::Canon::CameraInfoUnknown32', 'Image::ExifTool::Canon::CameraSettings', 'Image::ExifTool::Canon::ColorBalance', 'Image::ExifTool::Canon::ColorCalib', 'Image::ExifTool::Canon::ColorCoefs', 'Image::ExifTool::Canon::ColorData1', 'Image::ExifTool::Canon::ColorData2', 'Image::ExifTool::Canon::ColorData3', 'Image::ExifTool::Canon::ColorData4', 'Image::ExifTool::Canon::ColorData5', 'Image::ExifTool::Canon::ColorData6', 'Image::ExifTool::Canon::ColorData7', 'Image::ExifTool::Canon::ColorData8', 'Image::ExifTool::Canon::ColorInfo', 'Image::ExifTool::Canon::ContrastInfo', 'Image::ExifTool::Canon::CropInfo', 'Image::ExifTool::Canon::FaceDetect1', 'Image::ExifTool::Canon::FaceDetect2', 'Image::ExifTool::Canon::FaceDetect3', 'Image::ExifTool::Canon::FileInfo', 'Image::ExifTool::Canon::Flags', 'Image::ExifTool::Canon::FocalLength', 'Image::ExifTool::Canon::HDRInfo', 'Image::ExifTool::Canon::LensInfo', 'Image::ExifTool::Canon::LightingOpt', 'Image::ExifTool::Canon::Main', 'Image::ExifTool::Canon::MeasuredColor', 'Image::ExifTool::Canon::ModifiedInfo', 'Image::ExifTool::Canon::MovieInfo', 'Image::ExifTool::Canon::MultiExp', 'Image::ExifTool::Canon::MyColors', 'Image::ExifTool::Canon::PSInfo', 'Image::ExifTool::Canon::PSInfo2', 'Image::ExifTool::Canon::Panorama', 'Image::ExifTool::Canon::PreviewImageInfo', 'Image::ExifTool::Canon::Processing', 'Image::ExifTool::Canon::SerialInfo', 'Image::ExifTool::Canon::ShotInfo', 'Image::ExifTool::Canon::TimeInfo', 'Image::ExifTool::Canon::VignettingCorr', 'Image::ExifTool::Canon::VignettingCorr2', 'Image::ExifTool::CanonCustom::Functions10D', 'Image::ExifTool::CanonCustom::Functions1D', 'Image::ExifTool::CanonCustom::Functions2', 'Image::ExifTool::CanonCustom::Functions20D', 'Image::ExifTool::CanonCustom::Functions30D', 'Image::ExifTool::CanonCustom::Functions350D', 'Image::ExifTool::CanonCustom::Functions400D', 'Image::ExifTool::CanonCustom::Functions5D', 'Image::ExifTool::CanonCustom::FunctionsD30', 'Image::ExifTool::CanonCustom::PersonalFuncValues', 'Image::ExifTool::CanonCustom::PersonalFuncs', 'Image::ExifTool::CanonRaw::ExposureInfo', 'Image::ExifTool::CanonRaw::FlashInfo', 'Image::ExifTool::CanonRaw::ImageFormat', 'Image::ExifTool::CanonRaw::ImageInfo', 'Image::ExifTool::CanonRaw::Main', 'Image::ExifTool::CanonRaw::MakeModel', 'Image::ExifTool::CanonRaw::RawJpgInfo', 'Image::ExifTool::CanonRaw::TimeStamp', 'Image::ExifTool::CanonVRD::CropInfo', 'Image::ExifTool::CanonVRD::DLOInfo', 'Image::ExifTool::CanonVRD::DR4', 'Image::ExifTool::CanonVRD::DR4Header', 'Image::ExifTool::CanonVRD::GammaInfo', 'Image::ExifTool::CanonVRD::Main', 'Image::ExifTool::CanonVRD::ToneCurve', 'Image::ExifTool::CanonVRD::Ver1', 'Image::ExifTool::CanonVRD::Ver2', 'Image::ExifTool::Casio::FaceInfo1', 'Image::ExifTool::Casio::FaceInfo2', 'Image::ExifTool::Casio::Main', 'Image::ExifTool::Casio::Type2', 'Image::ExifTool::Composite', 'Image::ExifTool::DNG::AdobeData', 'Image::ExifTool::DarwinCore::Main', 'Image::ExifTool::Exif::Main', 'Image::ExifTool::Extra', 'Image::ExifTool::FLIR::Main', 'Image::ExifTool::FotoStation::Main', 'Image::ExifTool::FotoStation::SoftEdit', 'Image::ExifTool::FujiFilm::Main', 'Image::ExifTool::GE::Main', 'Image::ExifTool::GPS::Main', 'Image::ExifTool::IPTC::ApplicationRecord', 'Image::ExifTool::IPTC::EnvelopeRecord', 'Image::ExifTool::IPTC::NewsPhoto', 'Image::ExifTool::JFIF::Main', 'Image::ExifTool::Jpeg2000::Main', 'Image::ExifTool::Kodak::CameraInfo', 'Image::ExifTool::Kodak::IFD', 'Image::ExifTool::Kodak::KDC_IFD', 'Image::ExifTool::Kodak::Main', 'Image::ExifTool::Kodak::Meta', 'Image::ExifTool::Kodak::SubIFD0', 'Image::ExifTool::Kodak::SubIFD1', 'Image::ExifTool::Kodak::SubIFD2', 'Image::ExifTool::Kodak::SubIFD3', 'Image::ExifTool::Kodak::SubIFD5', 'Image::ExifTool::Kodak::Type10', 'Image::ExifTool::Kodak::Type2', 'Image::ExifTool::Kodak::Type3', 'Image::ExifTool::Kodak::Type4', 'Image::ExifTool::Kodak::Type7', 'Image::ExifTool::Kodak::Type9', 'Image::ExifTool::MIE::Audio', 'Image::ExifTool::MIE::Camera', 'Image::ExifTool::MIE::Doc', 'Image::ExifTool::MIE::Extender', 'Image::ExifTool::MIE::Flash', 'Image::ExifTool::MIE::GPS', 'Image::ExifTool::MIE::Geo', 'Image::ExifTool::MIE::Image', 'Image::ExifTool::MIE::Lens', 'Image::ExifTool::MIE::Main', 'Image::ExifTool::MIE::Orient', 'Image::ExifTool::MIE::Preview', 'Image::ExifTool::MIE::Thumbnail', 'Image::ExifTool::MIE::UTM', 'Image::ExifTool::MIE::Video', 'Image::ExifTool::MWG::Collections', 'Image::ExifTool::MWG::Keywords', 'Image::ExifTool::MWG::Regions', 'Image::ExifTool::Microsoft::MP', 'Image::ExifTool::Microsoft::MP1', 'Image::ExifTool::Microsoft::Stitch', 'Image::ExifTool::Microsoft::XMP', 'Image::ExifTool::Minolta::CameraInfoA100', 'Image::ExifTool::Minolta::CameraSettings', 'Image::ExifTool::Minolta::CameraSettings5D', 'Image::ExifTool::Minolta::CameraSettings7D', 'Image::ExifTool::Minolta::CameraSettingsA100', 'Image::ExifTool::Minolta::ISInfoA100', 'Image::ExifTool::Minolta::Main', 'Image::ExifTool::Minolta::WBInfoA100', 'Image::ExifTool::MinoltaRaw::PRD', 'Image::ExifTool::MinoltaRaw::RIF', 'Image::ExifTool::MinoltaRaw::WBG', 'Image::ExifTool::Motorola::Main', 'Image::ExifTool::Nikon::AFInfo', 'Image::ExifTool::Nikon::AFInfo2', 'Image::ExifTool::Nikon::AFTune', 'Image::ExifTool::Nikon::BarometerInfo', 'Image::ExifTool::Nikon::CaptureOutput', 'Image::ExifTool::Nikon::ColorBalance1', 'Image::ExifTool::Nikon::ColorBalance2', 'Image::ExifTool::Nikon::ColorBalance3', 'Image::ExifTool::Nikon::ColorBalance4', 'Image::ExifTool::Nikon::ColorBalanceA', 'Image::ExifTool::Nikon::ColorBalanceUnknown', 'Image::ExifTool::Nikon::DistortInfo', 'Image::ExifTool::Nikon::FaceDetect', 'Image::ExifTool::Nikon::FileInfo', 'Image::ExifTool::Nikon::FlashInfo0100', 'Image::ExifTool::Nikon::FlashInfo0102', 'Image::ExifTool::Nikon::FlashInfo0103', 'Image::ExifTool::Nikon::GEM', 'Image::ExifTool::Nikon::HDRInfo', 'Image::ExifTool::Nikon::ISOInfo', 'Image::ExifTool::Nikon::LensData00', 'Image::ExifTool::Nikon::LensData01', 'Image::ExifTool::Nikon::LensData0204', 'Image::ExifTool::Nikon::LensData0400', 'Image::ExifTool::Nikon::LocationInfo', 'Image::ExifTool::Nikon::Main', 'Image::ExifTool::Nikon::MultiExposure', 'Image::ExifTool::Nikon::PictureControl', 'Image::ExifTool::Nikon::PreviewIFD', 'Image::ExifTool::Nikon::ROC', 'Image::ExifTool::Nikon::RetouchInfo', 'Image::ExifTool::Nikon::Scan', 'Image::ExifTool::Nikon::ShotInfo', 'Image::ExifTool::Nikon::ShotInfoD300S', 'Image::ExifTool::Nikon::ShotInfoD300a', 'Image::ExifTool::Nikon::ShotInfoD300b', 'Image::ExifTool::Nikon::ShotInfoD3S', 'Image::ExifTool::Nikon::ShotInfoD3X', 'Image::ExifTool::Nikon::ShotInfoD3a', 'Image::ExifTool::Nikon::ShotInfoD3b', 'Image::ExifTool::Nikon::ShotInfoD40', 'Image::ExifTool::Nikon::ShotInfoD4S', 'Image::ExifTool::Nikon::ShotInfoD5000', 'Image::ExifTool::Nikon::ShotInfoD5100', 'Image::ExifTool::Nikon::ShotInfoD5200', 'Image::ExifTool::Nikon::ShotInfoD700', 'Image::ExifTool::Nikon::ShotInfoD7000', 'Image::ExifTool::Nikon::ShotInfoD80', 'Image::ExifTool::Nikon::ShotInfoD800', 'Image::ExifTool::Nikon::ShotInfoD810', 'Image::ExifTool::Nikon::ShotInfoD90', 'Image::ExifTool::Nikon::Type2', 'Image::ExifTool::Nikon::VRInfo', 'Image::ExifTool::Nikon::WorldTime', 'Image::ExifTool::NikonCapture::Brightness', 'Image::ExifTool::NikonCapture::ColorBoost', 'Image::ExifTool::NikonCapture::CropData', 'Image::ExifTool::NikonCapture::DLightingHQ', 'Image::ExifTool::NikonCapture::DLightingHS', 'Image::ExifTool::NikonCapture::Exposure', 'Image::ExifTool::NikonCapture::HighlightData', 'Image::ExifTool::NikonCapture::Main', 'Image::ExifTool::NikonCapture::NoiseReduction', 'Image::ExifTool::NikonCapture::PhotoEffects', 'Image::ExifTool::NikonCapture::PictureCtrl', 'Image::ExifTool::NikonCapture::RedEyeData', 'Image::ExifTool::NikonCapture::UnsharpData', 'Image::ExifTool::NikonCapture::WBAdjData', 'Image::ExifTool::NikonCustom::SettingsD3', 'Image::ExifTool::NikonCustom::SettingsD4', 'Image::ExifTool::NikonCustom::SettingsD40', 'Image::ExifTool::NikonCustom::SettingsD5000', 'Image::ExifTool::NikonCustom::SettingsD5100', 'Image::ExifTool::NikonCustom::SettingsD5200', 'Image::ExifTool::NikonCustom::SettingsD700', 'Image::ExifTool::NikonCustom::SettingsD7000', 'Image::ExifTool::NikonCustom::SettingsD80', 'Image::ExifTool::NikonCustom::SettingsD800', 'Image::ExifTool::NikonCustom::SettingsD810', 'Image::ExifTool::NikonCustom::SettingsD90', 'Image::ExifTool::Nintendo::CameraInfo', 'Image::ExifTool::Olympus::CameraSettings', 'Image::ExifTool::Olympus::Equipment', 'Image::ExifTool::Olympus::FETags', 'Image::ExifTool::Olympus::FocusInfo', 'Image::ExifTool::Olympus::ImageProcessing', 'Image::ExifTool::Olympus::Main', 'Image::ExifTool::Olympus::RawDevelopment', 'Image::ExifTool::Olympus::RawDevelopment2', 'Image::ExifTool::Olympus::RawInfo', 'Image::ExifTool::PDF::Info', 'Image::ExifTool::PNG::Main', 'Image::ExifTool::PNG::PhysicalPixel', 'Image::ExifTool::PNG::TextualData', 'Image::ExifTool::Panasonic::Data1', 'Image::ExifTool::Panasonic::FaceDetInfo', 'Image::ExifTool::Panasonic::FaceRecInfo', 'Image::ExifTool::Panasonic::Leica2', 'Image::ExifTool::Panasonic::Leica3', 'Image::ExifTool::Panasonic::Leica5', 'Image::ExifTool::Panasonic::Leica6', 'Image::ExifTool::Panasonic::Main', 'Image::ExifTool::Panasonic::ShotInfo', 'Image::ExifTool::Panasonic::Subdir', 'Image::ExifTool::PanasonicRaw::DistortionInfo', 'Image::ExifTool::PanasonicRaw::Main', 'Image::ExifTool::PanasonicRaw::WBInfo', 'Image::ExifTool::PanasonicRaw::WBInfo2', 'Image::ExifTool::Pentax::AEInfo', 'Image::ExifTool::Pentax::AEInfo2', 'Image::ExifTool::Pentax::AEInfo3', 'Image::ExifTool::Pentax::AFInfo', 'Image::ExifTool::Pentax::AWBInfo', 'Image::ExifTool::Pentax::BatteryInfo', 'Image::ExifTool::Pentax::CameraInfo', 'Image::ExifTool::Pentax::CameraSettings', 'Image::ExifTool::Pentax::ColorInfo', 'Image::ExifTool::Pentax::EVStepInfo', 'Image::ExifTool::Pentax::FaceInfo', 'Image::ExifTool::Pentax::FacePos', 'Image::ExifTool::Pentax::FaceSize', 'Image::ExifTool::Pentax::FilterInfo', 'Image::ExifTool::Pentax::FlashInfo', 'Image::ExifTool::Pentax::KelvinWB', 'Image::ExifTool::Pentax::LensCorr', 'Image::ExifTool::Pentax::LensData', 'Image::ExifTool::Pentax::LensInfo', 'Image::ExifTool::Pentax::LensInfo2', 'Image::ExifTool::Pentax::LensInfo3', 'Image::ExifTool::Pentax::LensInfo4', 'Image::ExifTool::Pentax::LensInfo5', 'Image::ExifTool::Pentax::LensInfoQ', 'Image::ExifTool::Pentax::LensRec', 'Image::ExifTool::Pentax::LevelInfo', 'Image::ExifTool::Pentax::Main', 'Image::ExifTool::Pentax::PixelShiftInfo', 'Image::ExifTool::Pentax::SRInfo', 'Image::ExifTool::Pentax::SRInfo2', 'Image::ExifTool::Pentax::ShotInfo', 'Image::ExifTool::Pentax::TempInfo', 'Image::ExifTool::Pentax::TimeInfo', 'Image::ExifTool::Pentax::Type2', 'Image::ExifTool::Pentax::WBLevels', 'Image::ExifTool::PhaseOne::Main', 'Image::ExifTool::PhaseOne::SensorCalibration', 'Image::ExifTool::PhotoMechanic::SoftEdit', 'Image::ExifTool::PhotoMechanic::XMP', 'Image::ExifTool::Photoshop::JPEG_Quality', 'Image::ExifTool::Photoshop::Main', 'Image::ExifTool::Photoshop::Resolution', 'Image::ExifTool::PostScript::Main', 'Image::ExifTool::QuickTime::MediaHeader', 'Image::ExifTool::QuickTime::MovieHeader', 'Image::ExifTool::QuickTime::Preview', 'Image::ExifTool::QuickTime::TrackHeader', 'Image::ExifTool::Reconyx::Main', 'Image::ExifTool::Ricoh::FaceInfo', 'Image::ExifTool::Ricoh::FirmwareInfo', 'Image::ExifTool::Ricoh::ImageInfo', 'Image::ExifTool::Ricoh::Main', 'Image::ExifTool::Ricoh::SerialInfo', 'Image::ExifTool::Ricoh::Subdir', 'Image::ExifTool::Ricoh::ThetaSubdir', 'Image::ExifTool::Samsung::Main', 'Image::ExifTool::Samsung::PictureWizard', 'Image::ExifTool::Samsung::Type2', 'Image::ExifTool::Sanyo::FaceInfo', 'Image::ExifTool::Sanyo::Main', 'Image::ExifTool::Sigma::Main', 'Image::ExifTool::Sony::AFInfo', 'Image::ExifTool::Sony::AFStatus15', 'Image::ExifTool::Sony::AFStatus19', 'Image::ExifTool::Sony::AFStatus79', 'Image::ExifTool::Sony::CameraInfo', 'Image::ExifTool::Sony::CameraInfo2', 'Image::ExifTool::Sony::CameraInfo3', 'Image::ExifTool::Sony::CameraSettings', 'Image::ExifTool::Sony::CameraSettings2', 'Image::ExifTool::Sony::CameraSettings3', 'Image::ExifTool::Sony::Ericsson', 'Image::ExifTool::Sony::ExtraInfo', 'Image::ExifTool::Sony::ExtraInfo2', 'Image::ExifTool::Sony::ExtraInfo3', 'Image::ExifTool::Sony::FaceInfo', 'Image::ExifTool::Sony::FaceInfo1', 'Image::ExifTool::Sony::FaceInfo2', 'Image::ExifTool::Sony::FaceInfoA', 'Image::ExifTool::Sony::FocusInfo', 'Image::ExifTool::Sony::Main', 'Image::ExifTool::Sony::MeterInfo', 'Image::ExifTool::Sony::MoreInfo0201', 'Image::ExifTool::Sony::MoreInfo0401', 'Image::ExifTool::Sony::MoreSettings', 'Image::ExifTool::Sony::Panorama', 'Image::ExifTool::Sony::ShotInfo', 'Image::ExifTool::Sony::Tag2010a', 'Image::ExifTool::Sony::Tag2010b', 'Image::ExifTool::Sony::Tag2010c', 'Image::ExifTool::Sony::Tag2010d', 'Image::ExifTool::Sony::Tag2010e', 'Image::ExifTool::Sony::Tag2010f', 'Image::ExifTool::Sony::Tag2010g', 'Image::ExifTool::Sony::Tag2010h', 'Image::ExifTool::Sony::Tag9050', 'Image::ExifTool::Sony::Tag9400a', 'Image::ExifTool::Sony::Tag9400b', 'Image::ExifTool::Sony::Tag9400c', 'Image::ExifTool::Sony::Tag9402', 'Image::ExifTool::Sony::Tag9403', 'Image::ExifTool::Sony::Tag9404a', 'Image::ExifTool::Sony::Tag9404b', 'Image::ExifTool::Sony::Tag9405a', 'Image::ExifTool::Sony::Tag9405b', 'Image::ExifTool::Sony::Tag9406', 'Image::ExifTool::Sony::Tag940a', 'Image::ExifTool::Sony::Tag940c', 'Image::ExifTool::SonyIDC::Main', 'Image::ExifTool::XMP::Album', 'Image::ExifTool::XMP::DICOM', 'Image::ExifTool::XMP::ExpressionMedia', 'Image::ExifTool::XMP::GPano', 'Image::ExifTool::XMP::GettyImages', 'Image::ExifTool::XMP::Lightroom', 'Image::ExifTool::XMP::MediaPro', 'Image::ExifTool::XMP::aas', 'Image::ExifTool::XMP::acdsee', 'Image::ExifTool::XMP::apple_fi', 'Image::ExifTool::XMP::aux', 'Image::ExifTool::XMP::cc', 'Image::ExifTool::XMP::cell', 'Image::ExifTool::XMP::creatorAtom', 'Image::ExifTool::XMP::crs', 'Image::ExifTool::XMP::dc', 'Image::ExifTool::XMP::dex', 'Image::ExifTool::XMP::digiKam', 'Image::ExifTool::XMP::exif', 'Image::ExifTool::XMP::exifEX', 'Image::ExifTool::XMP::extensis', 'Image::ExifTool::XMP::fpv', 'Image::ExifTool::XMP::ics', 'Image::ExifTool::XMP::iptcCore', 'Image::ExifTool::XMP::iptcExt', 'Image::ExifTool::XMP::pdf', 'Image::ExifTool::XMP::photoshop', 'Image::ExifTool::XMP::plus', 'Image::ExifTool::XMP::pmi', 'Image::ExifTool::XMP::prism', 'Image::ExifTool::XMP::prl', 'Image::ExifTool::XMP::prm', 'Image::ExifTool::XMP::pur', 'Image::ExifTool::XMP::rdf', 'Image::ExifTool::XMP::swf', 'Image::ExifTool::XMP::tiff', 'Image::ExifTool::XMP::x', 'Image::ExifTool::XMP::xmp', 'Image::ExifTool::XMP::xmpBJ', 'Image::ExifTool::XMP::xmpDM', 'Image::ExifTool::XMP::xmpMM', 'Image::ExifTool::XMP::xmpNote', 'Image::ExifTool::XMP::xmpPLUS', 'Image::ExifTool::XMP::xmpRights', 'Image::ExifTool::XMP::xmpTPg', ); # lookup for all writable tags my %tagLookup = ( 'aberrationcorrectiondistance' => { 98 => 0x69 }, 'about' => { 419 => 'about' }, 'aboutcvterm' => { 410 => 'AboutCvTerm' }, 'aboutcvtermcvid' => { 410 => [\'AboutCvTerm','AboutCvTermCvId'] }, 'aboutcvtermid' => { 410 => [\'AboutCvTerm','AboutCvTermCvTermId'] }, 'aboutcvtermname' => { 410 => [\'AboutCvTerm','AboutCvTermCvTermName'] }, 'aboutcvtermrefinedabout' => { 410 => [\'AboutCvTerm','AboutCvTermCvTermRefinedAbout'] }, 'abspeakaudiofilepath' => { 425 => 'absPeakAudioFilePath' }, 'accelerationtracking' => { 73 => 0x518 }, 'accelerometer' => { 331 => 0x3 }, 'accelerometerx' => { 270 => 0x8d }, 'accelerometery' => { 270 => 0x8e }, 'accelerometerz' => { 270 => 0x8c }, 'accessoryserialnumber' => { 270 => 0x54 }, 'accessorytype' => { 270 => 0x53 }, 'acedemicfield' => { 415 => 'acedemicField' }, 'actionadvised' => { 114 => 0x2a }, 'activearea' => { 106 => 0xc68d }, 'actived-lighting' => { 194 => 0x22, 228 => 0x24 }, 'actived-lightingmode' => { 228 => 0x25 }, 'adaptervoltage' => { 120 => 0x407 }, 'addaspectratioinfo' => { 73 => 0x80e }, 'additionalmodelinformation' => { 410 => 'AddlModelInfo' }, 'addoriginaldecisiondata' => { 73 => 0x80f, 74 => 0x11, 75 => 0x13, 78 => 0x14 }, 'address' => { 141 => 'Address' }, 'adjustmentmode' => { 337 => 0x15 }, 'adobe' => { 107 => 'Adobe' }, 'adultcontentwarning' => { 413 => 'AdultContentWarning', 418 => 'adultContentWarning' }, 'advancedfilter' => { 111 => 0x1201 }, 'advancedraw' => { 230 => 0x76a43203 }, 'advancedscenetype' => { 270 => 0x3d }, 'advisory' => { 423 => 'Advisory' }, 'ae_iso' => { 277 => 0x2, 278 => 0x4, 279 => 0x12 }, 'aeaperture' => { 277 => 0x1, 278 => 0x3, 279 => 0x11 }, 'aeaperturesteps' => { 277 => 0x8, 278 => 0xb }, 'aebautocancel' => { 73 => 0x104 }, 'aebbracketvalue' => { 67 => 0x11 }, 'aebsequence' => { 73 => 0x105 }, 'aebsequenceautocancel' => { 71 => 0x9, 72 => 0x9, 74 => 0x8, 75 => 0x9, 78 => 0x9, 79 => 0x7 }, 'aebshotcount' => { 73 => 0x106 }, 'aebxv' => { 277 => 0x4, 278 => 0x6 }, 'aeerror' => { 278 => 0x8 }, 'aeexposuretime' => { 277 => 0x0, 278 => 0x2, 279 => 0x10 }, 'aelbutton' => { 161 => 0x45 }, 'aelexposureindicator' => { 161 => 0x51 }, 'aelock' => { 161 => 0x5b, 239 => '4.2', 245 => '4.2', 250 => 0x201, 303 => 0x48, 345 => 0x40, 346 => 0x40, 347 => [0x86,0x286] }, 'aelockbutton' => { 237 => '16.1', 239 => '4.1', 240 => '15.1', 241 => '16.1', 242 => '16.1', 243 => '30.1', 244 => '16.1', 245 => '4.1', 247 => '17.1', 248 => '17.1' }, 'aelockbuttonplusdials' => { 237 => '16.2', 243 => '32.1', 247 => '44.1' }, 'aelockformb-d80' => { 248 => '3.1' }, 'aemaxaperture' => { 277 => 0x9, 278 => 0x10, 279 => 0x1c }, 'aemaxaperture2' => { 277 => 0xa, 278 => 0x11, 279 => 0x1d }, 'aemeteringmode' => { 277 => 0xc }, 'aemeteringmode2' => { 277 => '13.1' }, 'aemeteringsegments' => { 164 => 0x628, 303 => 0x209 }, 'aemicroadjustment' => { 73 => 0x110 }, 'aeminaperture' => { 277 => 0xb, 278 => 0x12, 279 => 0x1e }, 'aeminexposuretime' => { 277 => 0x5, 278 => 0x13, 279 => 0x1f }, 'aeprogrammode' => { 277 => 0x6 }, 'aeprojectlink' => { 399 => 'aeProjectLink' }, 'aeprojectlinkcompositionid' => { 399 => [\'aeProjectLink','aeProjectLinkCompositionID'] }, 'aeprojectlinkfullpath' => { 399 => [\'aeProjectLink','aeProjectLinkFullPath'] }, 'aeprojectlinkrenderoutputmoduleindex' => { 399 => [\'aeProjectLink','aeProjectLinkRenderOutputModuleIndex'] }, 'aeprojectlinkrenderqueueitemid' => { 399 => [\'aeProjectLink','aeProjectLinkRenderQueueItemID'] }, 'aeprojectlinkrendertimestamp' => { 399 => [\'aeProjectLink','aeProjectLinkRenderTimeStamp'] }, 'aesetting' => { 31 => 0x21 }, 'aewhitebalance' => { 277 => 0xd }, 'aexv' => { 277 => 0x3, 278 => 0x5 }, 'af-cpriorityselection' => { 237 => '1.1', 238 => '1.1', 241 => '0.1', 242 => '0.1', 243 => '1.1', 244 => '0.1', 247 => '1.1' }, 'af-onformb-d10' => { 237 => '3.3', 243 => '3.2' }, 'af-onformb-d11' => { 244 => '2.2' }, 'af-onformb-d12' => { 247 => '50.1' }, 'af-spriorityselection' => { 237 => '1.2', 238 => '1.2', 243 => '1.2', 244 => '0.2', 247 => '1.2' }, 'afacceldeceltracking' => { 2 => 0x3 }, 'afactivation' => { 237 => '2.1', 238 => '2.1', 243 => '2.1', 247 => '2.1' }, 'afadjustment' => { 303 => 0x72 }, 'afandmeteringbuttons' => { 73 => 0x701 }, 'afaperture' => { 190 => 0x5, 191 => 0x5 }, 'afareaheight' => { 170 => 0x1a }, 'afareaillumination' => { 161 => 0x4b, 245 => '15.3' }, 'afareamode' => { 157 => 0x33, 161 => 0xe, 169 => 0x0, 170 => 0x5, 270 => 0xf, 328 => 0x1205, 338 => [0xa,0x3a], 345 => 0x11, 346 => 0x10, 347 => 0x24, 357 => 0xb043, 376 => 0x17 }, 'afareamodesetting' => { 239 => '11.1', 240 => '0.1', 245 => '16.1', 248 => '2.1', 357 => 0x201c }, 'afareas' => { 250 => 0x304 }, 'afareaselectmethod' => { 73 => 0x51b }, 'afareawidth' => { 170 => 0x18 }, 'afareaxposition' => { 170 => 0x14, 328 => 0x1203 }, 'afareaxposition1' => { 328 => 0x1201 }, 'afareayposition' => { 170 => 0x16, 328 => 0x1204 }, 'afareayposition1' => { 328 => 0x1202 }, 'afassist' => { 71 => 0x5, 79 => 0x5, 161 => 0x48, 237 => '2.5', 239 => '0.2', 240 => '0.2', 241 => '1.1', 242 => '1.1', 243 => '2.4', 244 => '1.4', 245 => '0.2', 247 => '2.4', 248 => '2.3' }, 'afassistbeam' => { 73 => 0x50e, 74 => 0x4, 75 => 0x5, 76 => 0x4, 77 => 0x4, 78 => 0x5 }, 'afassistlamp' => { 270 => 0x31 }, 'afbuttonpressed' => { 347 => [0x83,0x283] }, 'afconfigtool' => { 2 => 0x1 }, 'afdefocus' => { 280 => 0x6 }, 'afduringliveview' => { 73 => 0x511 }, 'affinea' => { 393 => 'AffineA' }, 'affineb' => { 393 => 'AffineB' }, 'affinec' => { 393 => 'AffineC' }, 'affined' => { 393 => 'AffineD' }, 'affinetune' => { 171 => 0x0, 250 => 0x306 }, 'affinetuneadj' => { 171 => 0x2, 203 => 0x2d1, 204 => 0x2dc, 250 => 0x307 }, 'affinetuneindex' => { 171 => 0x1 }, 'affinex' => { 393 => 'AffineX' }, 'affiney' => { 393 => 'AffineY' }, 'afhold' => { 280 => 0x1fd }, 'afilluminator' => { 345 => 0x29, 357 => 0xb044 }, 'afimageheight' => { 170 => 0x12 }, 'afimagewidth' => { 170 => 0x10 }, 'afintegrationtime' => { 280 => 0x7 }, 'afmicroadj' => { 338 => [0x17d,0x50] }, 'afmicroadjmode' => { 3 => 0x1, 342 => 0x131 }, 'afmicroadjregisteredlenses' => { 342 => '305.1' }, 'afmicroadjustment' => { 73 => 0x507 }, 'afmicroadjvalue' => { 3 => 0x2, 342 => 0x130 }, 'afmode' => { 102 => 0x3009, 111 => 0x1022, 157 => 0x16, 337 => 0x5 }, 'afmoderestrictions' => { 238 => '50.3', 247 => '48.3' }, 'afonaelockbuttonswitch' => { 73 => 0x702 }, 'afonbutton' => { 237 => '3.1', 238 => '47.1' }, 'afpoint' => { 31 => 0x13, 101 => 0x18, 157 => 0x15, 169 => 0x1, 253 => 0x308, 337 => 0x1f, 338 => [0x37,0x7], 342 => 0x19, 343 => 0x18, 344 => [0x18,0x20] }, 'afpointactivationarea' => { 72 => 0x11, 78 => 0x11 }, 'afpointareaexpansion' => { 73 => 0x508 }, 'afpointatshutterrelease' => { 338 => [0x39,0x9] }, 'afpointautoselection' => { 73 => 0x50b }, 'afpointbrightness' => { 73 => 0x50d, 237 => '2.4', 238 => '46.5', 247 => '2.3' }, 'afpointdisplayduringfocus' => { 73 => 0x50c }, 'afpointillumination' => { 72 => 0xa, 237 => '2.3', 238 => '46.2', 243 => '2.3', 244 => '1.3', 247 => '47.2', 248 => '2.4' }, 'afpointinfocus' => { 338 => [0x38,0x8] }, 'afpointmode' => { 284 => 0x3 }, 'afpointposition' => { 102 => 0x2021, 270 => 0x4d }, 'afpointregistration' => { 71 => 0x7 }, 'afpoints' => { 160 => 0x10 }, 'afpointselected' => { 161 => 0xd, 250 => 0x305, 303 => 0xe, 342 => 0x15, 343 => 0x14, 344 => [0x14,0x1c], 357 => 0x201e }, 'afpointselected2' => { 284 => 0x4 }, 'afpointselection' => { 72 => 0xb, 237 => '1.3', 238 => '1.3', 243 => '1.3', 247 => '1.3' }, 'afpointselectionmethod' => { 73 => 0x50f, 74 => 0xc, 75 => 0xd, 78 => 0xd }, 'afpointsetting' => { 345 => 0x12, 346 => 0x11 }, 'afpointsinfocus' => { 67 => 0xe, 169 => 0x2, 280 => 0xb, 303 => [0xf,0x3c] }, 'afpointsinfocus5d' => { 18 => 0x38 }, 'afpointspotmetering' => { 72 => 0xd }, 'afpointsselected' => { 383 => 0x4 }, 'afpointsunknown1' => { 280 => 0x0 }, 'afpointsunknown2' => { 280 => 0x2 }, 'afpointsused' => { 170 => 0x8, 338 => [0x10,0x16e] }, 'afpointswitching' => { 2 => 0x4 }, 'afpredictor' => { 280 => 0x4 }, 'afresponse' => { 194 => 0xad }, 'afresult' => { 255 => 0x1038 }, 'afsearch' => { 250 => 0x303 }, 'afsensoractive' => { 157 => 0x1 }, 'afstatus' => { 328 => 0x1200 }, 'afstatus_00_b4' => { 341 => 0x0 }, 'afstatus_01_c4' => { 341 => 0x2 }, 'afstatus_02_d4' => { 341 => 0x4 }, 'afstatus_03_e4' => { 341 => 0x6 }, 'afstatus_04_f4' => { 341 => 0x8 }, 'afstatus_05_g4' => { 341 => 0xa }, 'afstatus_06_h4' => { 341 => 0xc }, 'afstatus_07_b3' => { 341 => 0xe }, 'afstatus_08_c3' => { 341 => 0x10 }, 'afstatus_09_d3' => { 341 => 0x12 }, 'afstatus_10_e3' => { 341 => 0x14 }, 'afstatus_11_f3' => { 341 => 0x16 }, 'afstatus_12_g3' => { 341 => 0x18 }, 'afstatus_13_h3' => { 341 => 0x1a }, 'afstatus_14_b2' => { 341 => 0x1c }, 'afstatus_15_c2' => { 341 => 0x1e }, 'afstatus_16_d2' => { 341 => 0x20 }, 'afstatus_17_e2' => { 341 => 0x22 }, 'afstatus_18_f2' => { 341 => 0x24 }, 'afstatus_19_g2' => { 341 => 0x26 }, 'afstatus_20_h2' => { 341 => 0x28 }, 'afstatus_21_c1' => { 341 => 0x2a }, 'afstatus_22_d1' => { 341 => 0x2c }, 'afstatus_23_e1' => { 341 => 0x2e }, 'afstatus_24_f1' => { 341 => 0x30 }, 'afstatus_25_g1' => { 341 => 0x32 }, 'afstatus_26_a7_vertical' => { 341 => 0x34 }, 'afstatus_27_a6_vertical' => { 341 => 0x36 }, 'afstatus_28_a5_vertical' => { 341 => 0x38 }, 'afstatus_29_c7_vertical' => { 341 => 0x3a }, 'afstatus_30_c6_vertical' => { 341 => 0x3c }, 'afstatus_31_c5_vertical' => { 341 => 0x3e }, 'afstatus_32_e7_vertical' => { 341 => 0x40 }, 'afstatus_33_e6_center_vertical' => { 341 => 0x42 }, 'afstatus_34_e5_vertical' => { 341 => 0x44 }, 'afstatus_35_g7_vertical' => { 341 => 0x46 }, 'afstatus_36_g6_vertical' => { 341 => 0x48 }, 'afstatus_37_g5_vertical' => { 341 => 0x4a }, 'afstatus_38_i7_vertical' => { 341 => 0x4c }, 'afstatus_39_i6_vertical' => { 341 => 0x4e }, 'afstatus_40_i5_vertical' => { 341 => 0x50 }, 'afstatus_41_a7' => { 341 => 0x52 }, 'afstatus_42_b7' => { 341 => 0x54 }, 'afstatus_43_c7' => { 341 => 0x56 }, 'afstatus_44_d7' => { 341 => 0x58 }, 'afstatus_45_e7' => { 341 => 0x5a }, 'afstatus_46_f7' => { 341 => 0x5c }, 'afstatus_47_g7' => { 341 => 0x5e }, 'afstatus_48_h7' => { 341 => 0x60 }, 'afstatus_49_i7' => { 341 => 0x62 }, 'afstatus_50_a6' => { 341 => 0x64 }, 'afstatus_51_b6' => { 341 => 0x66 }, 'afstatus_52_c6' => { 341 => 0x68 }, 'afstatus_53_d6' => { 341 => 0x6a }, 'afstatus_54_e6_center' => { 341 => 0x6c }, 'afstatus_55_f6' => { 341 => 0x6e }, 'afstatus_56_g6' => { 341 => 0x70 }, 'afstatus_57_h6' => { 341 => 0x72 }, 'afstatus_58_i6' => { 341 => 0x74 }, 'afstatus_59_a5' => { 341 => 0x76 }, 'afstatus_60_b5' => { 341 => 0x78 }, 'afstatus_61_c5' => { 341 => 0x7a }, 'afstatus_62_d5' => { 341 => 0x7c }, 'afstatus_63_e5' => { 341 => 0x7e }, 'afstatus_64_f5' => { 341 => 0x80 }, 'afstatus_65_g5' => { 341 => 0x82 }, 'afstatus_66_h5' => { 341 => 0x84 }, 'afstatus_67_i5' => { 341 => 0x86 }, 'afstatus_68_c11' => { 341 => 0x88 }, 'afstatus_69_d11' => { 341 => 0x8a }, 'afstatus_70_e11' => { 341 => 0x8c }, 'afstatus_71_f11' => { 341 => 0x8e }, 'afstatus_72_g11' => { 341 => 0x90 }, 'afstatus_73_b10' => { 341 => 0x92 }, 'afstatus_74_c10' => { 341 => 0x94 }, 'afstatus_75_d10' => { 341 => 0x96 }, 'afstatus_76_e10' => { 341 => 0x98 }, 'afstatus_77_f10' => { 341 => 0x9a }, 'afstatus_78_g10' => { 341 => 0x9c }, 'afstatus_79_h10' => { 341 => 0x9e }, 'afstatus_80_b9' => { 341 => 0xa0 }, 'afstatus_81_c9' => { 341 => 0xa2 }, 'afstatus_82_d9' => { 341 => 0xa4 }, 'afstatus_83_e9' => { 341 => 0xa6 }, 'afstatus_84_f9' => { 341 => 0xa8 }, 'afstatus_85_g9' => { 341 => 0xaa }, 'afstatus_86_h9' => { 341 => 0xac }, 'afstatus_87_b8' => { 341 => 0xae }, 'afstatus_88_c8' => { 341 => 0xb0 }, 'afstatus_89_d8' => { 341 => 0xb2 }, 'afstatus_90_e8' => { 341 => 0xb4 }, 'afstatus_91_f8' => { 341 => 0xb6 }, 'afstatus_92_g8' => { 341 => 0xb8 }, 'afstatus_93_h8' => { 341 => 0xba }, 'afstatus_94_e6_center_f2-8' => { 341 => 0xbc }, 'afstatusactivesensor' => { 157 => 0x2, 338 => [0x4,0x3b], 342 => 0x1e, 343 => 0x1b, 344 => [0x1b,0x21] }, 'afstatusbottom' => { 157 => 0x8, 342 => 0x2a, 343 => 0x21, 344 => 0x21 }, 'afstatusbottom-left' => { 157 => 0x12, 343 => 0x2b, 344 => 0x2b }, 'afstatusbottom-right' => { 157 => 0x6, 343 => 0x1f, 344 => 0x1f }, 'afstatusbottomassist-left' => { 342 => 0x28 }, 'afstatusbottomassist-right' => { 342 => 0x2c }, 'afstatusbottomhorizontal' => { 339 => 0x10, 340 => 0x1c }, 'afstatusbottomvertical' => { 339 => 0x16, 340 => 0x26 }, 'afstatuscenter-10' => { 342 => 0x34 }, 'afstatuscenter-11' => { 342 => 0x36 }, 'afstatuscenter-12' => { 342 => 0x38 }, 'afstatuscenter-14' => { 342 => 0x3c }, 'afstatuscenter-7' => { 342 => 0x2e }, 'afstatuscenter-9' => { 342 => 0x32 }, 'afstatuscenter-horizontal' => { 342 => 0x30 }, 'afstatuscenter-vertical' => { 342 => 0x3a }, 'afstatuscenterf2-8' => { 342 => 0x4c }, 'afstatuscenterhorizontal' => { 157 => 0x2f, 339 => 0xc, 340 => 0x18, 343 => 0x2f, 344 => 0x2f }, 'afstatuscentervertical' => { 157 => 0xc, 339 => 0x14, 340 => 0x22, 343 => 0x25, 344 => 0x25 }, 'afstatusfarleft' => { 339 => 0x6, 342 => 0x26 }, 'afstatusfarlefthorizontal' => { 340 => 0x4 }, 'afstatusfarleftvertical' => { 340 => 0x12 }, 'afstatusfarright' => { 339 => 0x18, 342 => 0x44 }, 'afstatusfarrighthorizontal' => { 340 => 0x2c }, 'afstatusfarrightvertical' => { 340 => 0x34 }, 'afstatusleft' => { 157 => 0x2d, 339 => 0x2, 342 => 0x22, 343 => 0x2d, 344 => 0x2d }, 'afstatuslefthorizontal' => { 340 => 0x6 }, 'afstatusleftvertical' => { 340 => 0xe }, 'afstatuslower-left' => { 339 => 0x4, 342 => 0x24 }, 'afstatuslower-lefthorizontal' => { 340 => 0xa }, 'afstatuslower-leftvertical' => { 340 => 0x10 }, 'afstatuslower-middle' => { 339 => 0x22, 340 => 0x24 }, 'afstatuslower-right' => { 339 => 0x1e, 342 => 0x4a }, 'afstatuslower-righthorizontal' => { 340 => 0x32 }, 'afstatuslower-rightvertical' => { 340 => 0x3a }, 'afstatuslowerfarleft' => { 340 => 0x8 }, 'afstatuslowerfarright' => { 340 => 0x30 }, 'afstatusmiddlehorizontal' => { 157 => 0xa, 343 => 0x23, 344 => 0x23 }, 'afstatusnearleft' => { 339 => 0xe, 340 => 0x1a }, 'afstatusnearright' => { 339 => 0xa, 340 => 0x16 }, 'afstatusright' => { 157 => 0x31, 339 => 0x1c, 342 => 0x48, 343 => 0x31, 344 => 0x31 }, 'afstatusrighthorizontal' => { 340 => 0x2e }, 'afstatusrightvertical' => { 340 => 0x38 }, 'afstatustop' => { 157 => 0xe, 342 => 0x40, 343 => 0x27, 344 => 0x27 }, 'afstatustop-left' => { 157 => 0x10, 343 => 0x29, 344 => 0x29 }, 'afstatustop-right' => { 157 => 0x4, 343 => 0x1d, 344 => 0x1d }, 'afstatustopassist-left' => { 342 => 0x3e }, 'afstatustopassist-right' => { 342 => 0x42 }, 'afstatustophorizontal' => { 339 => 0x8, 340 => 0x14 }, 'afstatustopvertical' => { 339 => 0x12, 340 => 0x1e }, 'afstatusupper-left' => { 339 => 0x0, 342 => 0x20 }, 'afstatusupper-lefthorizontal' => { 340 => 0x2 }, 'afstatusupper-leftvertical' => { 340 => 0xc }, 'afstatusupper-middle' => { 339 => 0x20, 340 => 0x20 }, 'afstatusupper-right' => { 339 => 0x1a, 342 => 0x46 }, 'afstatusupper-righthorizontal' => { 340 => 0x2a }, 'afstatusupper-rightvertical' => { 340 => 0x36 }, 'afstatusupperfarleft' => { 340 => 0x0 }, 'afstatusupperfarright' => { 340 => 0x28 }, 'aftrackingsensitivity' => { 2 => 0x2 }, 'aftype' => { 338 => 0x2 }, 'afwithshutter' => { 345 => 0x2a }, 'afzoneselected' => { 357 => 0x201e }, 'aggregateissuenumber' => { 415 => 'aggregateIssueNumber' }, 'aggregationtype' => { 415 => 'aggregationType' }, 'agreement' => { 418 => 'agreement' }, 'aiservocontinuousshooting' => { 72 => 0x15 }, 'aiservofirstimagepriority' => { 73 => 0x519 }, 'aiservoimagepriority' => { 73 => 0x503 }, 'aiservosecondimagepriority' => { 73 => 0x51a }, 'aiservotrackingmethod' => { 73 => 0x504 }, 'aiservotrackingsensitivity' => { 72 => 0x14, 73 => 0x502 }, 'album' => { 425 => 'album' }, 'alreadyapplied' => { 400 => 'AlreadyApplied' }, 'alternatetitle' => { 415 => 'alternateTitle' }, 'alternatetitlea-lang' => { 415 => [\'alternateTitle','alternateTitleA-lang'] }, 'alternatetitlea-platform' => { 415 => [\'alternateTitle','alternateTitleA-platform'] }, 'alternatetitletext' => { 415 => [\'alternateTitle','alternateTitleText'] }, 'altitude' => { 172 => 0x6 }, 'alttapename' => { 425 => 'altTapeName' }, 'alttimecode' => { 425 => 'altTimecode' }, 'alttimecodetimeformat' => { 425 => [\'altTimecode','altTimecodeTimeFormat'] }, 'alttimecodetimevalue' => { 425 => [\'altTimecode','altTimecodeTimeValue'] }, 'alttimecodevalue' => { 425 => [\'altTimecode','altTimecodeValue'] }, 'ambienceselection' => { 4 => 0x1 }, 'ambienttemperature' => { 324 => 0x14, 376 => 0x4 }, 'ambienttemperaturefahrenheit' => { 324 => 0x13 }, 'analogbalance' => { 106 => 0xc627 }, 'angleadj' => { 92 => 0x10003, 98 => 0x8b }, 'angleinforoll' => { 395 => 'AngleInfoRoll' }, 'angleinfoyaw' => { 395 => 'AngleInfoYaw' }, 'anti-blur' => { 357 => 0xb04b }, 'antialiasstrength' => { 106 => 0xc632 }, 'aperturelock' => { 238 => '38.2', 247 => '38.2' }, 'aperturerange' => { 73 => 0x10d }, 'apertureringuse' => { 284 => '1.4' }, 'aperturesetting' => { 161 => 0x7, 345 => 0x30, 346 => 0x29, 347 => 0x1 }, 'aperturevalue' => { 82 => 0x2, 106 => 0x9202, 255 => 0x1002, 312 => 0x401, 404 => 'ApertureValue' }, 'applekeywords' => { 259 => 'AAPL:Keywords' }, 'applicationnotes' => { 106 => 0x2bc, 274 => 0x2bc }, 'applicationrecordversion' => { 114 => 0x0 }, 'applyshootingmeteringmode' => { 73 => 0x10e }, 'approved' => { 406 => 'Approved' }, 'approvedby' => { 406 => 'ApprovedBy' }, 'approximatefnumber' => { 266 => 0x313, 272 => 0x3406 }, 'approximatefocusdistance' => { 396 => 'ApproximateFocusDistance' }, 'aquahsl' => { 92 => 0x20913 }, 'armidentifier' => { 115 => 0x78 }, 'armversion' => { 115 => 0x7a }, 'artfilter' => { 250 => 0x529 }, 'artfiltereffect' => { 250 => 0x52f }, 'artist' => { 106 => 0x13b, 262 => 'Artist', 303 => 0x22e, 421 => 'Artist', 425 => 'artist' }, 'artmode' => { 102 => 0x301b }, 'artmodeparameters' => { 102 => 0x310b }, 'artworkcircadatecreated' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOCircaDateCreated'] }, 'artworkcontributiondescription' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOContributionDescription'] }, 'artworkcopyrightnotice' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOCopyrightNotice'] }, 'artworkcopyrightownerid' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOCurrentCopyrightOwnerId'] }, 'artworkcopyrightownername' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOCurrentCopyrightOwnerName'] }, 'artworkcreator' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOCreator'] }, 'artworkcreatorid' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOCreatorId'] }, 'artworkdatecreated' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAODateCreated'] }, 'artworklicensorid' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOCurrentLicensorId'] }, 'artworklicensorname' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOCurrentLicensorName'] }, 'artworkorobject' => { 410 => 'ArtworkOrObject' }, 'artworkphysicaldescription' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOPhysicalDescription'] }, 'artworkscontentdescription' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOContentDescription'] }, 'artworksource' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOSource'] }, 'artworksourceinventoryno' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOSourceInvNo'] }, 'artworksourceinvurl' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOSourceInvURL'] }, 'artworkstyleperiod' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOStylePeriod'] }, 'artworktitle' => { 410 => [\'ArtworkOrObject','ArtworkOrObjectAOTitle'] }, 'aspectframe' => { 254 => 0x1113 }, 'aspectratio' => { 5 => 0x0, 254 => 0x1112, 303 => 0x80, 345 => 0x55, 346 => 0x55, 347 => 0xa }, 'asshoticcprofile' => { 106 => 0xc68f }, 'asshotneutral' => { 106 => 0xc628 }, 'asshotpreprofilematrix' => { 106 => 0xc690 }, 'asshotprofilename' => { 106 => 0xc6f6 }, 'asshotwhitexy' => { 106 => 0xc629 }, 'assignbktbutton' => { 237 => '4.2', 238 => '16.1', 247 => '16.1' }, 'assignfuncbutton' => { 73 => 0x70b }, 'assignmovierecordbutton' => { 238 => '43.2', 247 => '45.1' }, 'assignremotefnbutton' => { 238 => '54.1', 247 => '51.1' }, 'assistbuttonfunction' => { 71 => 0xd }, 'attributionname' => { 397 => 'attributionName' }, 'attributionurl' => { 397 => 'attributionURL' }, 'audio' => { 270 => 0x20 }, 'audiobitrate' => { 58 => 0x6c }, 'audiochannels' => { 58 => 0x70 }, 'audiochanneltype' => { 425 => 'audioChannelType' }, 'audiocompression' => { 135 => 'Compression' }, 'audiocompressor' => { 425 => 'audioCompressor' }, 'audioduration' => { 114 => 0x99 }, 'audiomoddate' => { 425 => 'audioModDate' }, 'audiooutcue' => { 114 => 0x9a }, 'audiosamplerate' => { 58 => 0x6e, 425 => 'audioSampleRate' }, 'audiosampletype' => { 425 => 'audioSampleType' }, 'audiosamplingrate' => { 114 => 0x97 }, 'audiosamplingresolution' => { 114 => 0x98 }, 'audiotype' => { 114 => 0x96 }, 'author' => { 137 => 'Author', 259 => 'Author', 262 => 'Author', 319 => 'Author', 394 => 'author', 411 => 'Author', 423 => 'Author' }, 'authorsposition' => { 412 => 'AuthorsPosition' }, 'autoafpointcolortracking' => { 73 => 0x51c }, 'autoaperture' => { 294 => '0.1' }, 'autobracket' => { 337 => 0x19 }, 'autobracketing' => { 111 => 0x1100, 303 => 0x18, 328 => 0x1007 }, 'autobracketingmode' => { 246 => '12.3' }, 'autobracketingset' => { 246 => '12.1' }, 'autobracketmodem' => { 237 => '21.2', 238 => '13.3', 243 => '26.2', 247 => '13.3' }, 'autobracketorder' => { 161 => 0x43, 237 => '21.3', 238 => '13.2', 243 => '26.3', 244 => '12.2', 245 => '2.2', 246 => '12.2', 247 => '13.2', 248 => '13.2' }, 'autobracketset' => { 237 => '21.1', 238 => '13.1', 240 => '11.1', 241 => '12.1', 242 => '12.1', 243 => '26.1', 244 => '12.1', 245 => '2.1', 247 => '13.1', 248 => '13.1' }, 'autobrightness' => { 400 => 'AutoBrightness' }, 'autocontrast' => { 400 => 'AutoContrast' }, 'autodistortioncontrol' => { 180 => 0x4 }, 'autodynamicrange' => { 111 => 0x140b }, 'autoexposure' => { 400 => 'AutoExposure' }, 'autoexposurebracketing' => { 67 => 0x10 }, 'autofocus' => { 253 => 0x209 }, 'autofp' => { 245 => '7.3', 248 => '31.4' }, 'autoiso' => { 67 => 0x1, 102 => 0x3008, 239 => '1.1', 245 => '1.1' }, 'autoisomax' => { 239 => '1.2', 245 => '1.2' }, 'autoisominshutterspeed' => { 239 => '1.3', 245 => '1.3' }, 'autolateralca' => { 400 => 'AutoLateralCA' }, 'autolightingoptimizer' => { 15 => 0xbe, 16 => 0xbf, 19 => 0xbf, 54 => 0x2, 73 => 0x204, 92 => 0x20500, 98 => 0x6f }, 'autolightingoptimizeron' => { 92 => '0x20500.0', 98 => 0x6e }, 'autoportraitframed' => { 357 => 0x2016 }, 'autoredeye' => { 230 => 0xfe28a44f }, 'autorotate' => { 67 => 0x1b }, 'autoshadows' => { 400 => 'AutoShadows' }, 'autowhiteversion' => { 400 => 'AutoWhiteVersion' }, 'auxiliarylens' => { 194 => 0x82 }, 'avaperturesetting' => { 284 => 0x13 }, 'averageblacklevel' => { 38 => 0xe7, 40 => 0xfb, 41 => 0x114, 42 => 0x146 }, 'averagelv' => { 164 => 0x38 }, 'avsettingwithoutlens' => { 73 => 0x707 }, 'azimuth' => { 145 => 'Azimuth' }, 'babyage' => { 270 => [0x8010,0x33] }, 'babyname' => { 270 => 0x66 }, 'backgroundalpha' => { 420 => 'bgalpha' }, 'baseexposurecompensation' => { 284 => 0x15 }, 'baseiso' => { 67 => 0x2, 86 => 0x101c, 120 => 0x903, 272 => 0x312a, 381 => 0x6 }, 'baselineexposure' => { 106 => 0xc62a }, 'baselineexposureoffset' => { 106 => 0xc7a5 }, 'baselinenoise' => { 106 => 0xc62b }, 'baselinesharpness' => { 106 => 0xc62c }, 'baseurl' => { 423 => 'BaseURL' }, 'batterylevel' => { 345 => 0x51, 349 => 0xc, 350 => 0x4, 351 => 0x4, 382 => 0x7 }, 'batterylevelgrip1' => { 382 => 0x6 }, 'batterylevelgrip2' => { 382 => 0x8 }, 'batteryorder' => { 237 => '12.5', 243 => '13.2', 244 => '2.1', 247 => '3.1' }, 'batterystate' => { 161 => 0x60, 345 => 0x50, 351 => 0x14 }, 'batterytemperature' => { 349 => 0x1, 351 => 0x2, 382 => 0x5 }, 'batteryunknown' => { 349 => 0x2, 351 => 0x0 }, 'batteryvoltage' => { 120 => 0x408, 324 => 0x2a, 349 => 0x8 }, 'batteryvoltage1' => { 351 => 0x6 }, 'batteryvoltage2' => { 351 => 0x8 }, 'bayergreensplit' => { 106 => 0xc62d }, 'bayerpattern' => { 119 => 0xf902, 165 => 0x17 }, 'beatspliceparams' => { 425 => 'beatSpliceParams' }, 'beatspliceparamsriseindecibel' => { 425 => [\'beatSpliceParams','beatSpliceParamsRiseInDecibel'] }, 'beatspliceparamsriseintimeduration' => { 425 => [\'beatSpliceParams','beatSpliceParamsRiseInTimeDuration'] }, 'beatspliceparamsriseintimedurationscale' => { 425 => [\'beatSpliceParams','beatSpliceParamsRiseInTimeDurationScale'] }, 'beatspliceparamsriseintimedurationvalue' => { 425 => [\'beatSpliceParams','beatSpliceParamsRiseInTimeDurationValue'] }, 'beatspliceparamsusefilebeatsmarker' => { 425 => [\'beatSpliceParams','beatSpliceParamsUseFileBeatsMarker'] }, 'beep' => { 237 => '13.1', 238 => '5.4', 239 => '0.1', 240 => '2.1', 241 => '3.1', 242 => '3.1', 243 => '10.1', 245 => '0.1', 247 => '5.5', 248 => '4.1' }, 'beeppitch' => { 244 => '3.1' }, 'beepvolume' => { 244 => '4.5' }, 'bestqualityscale' => { 106 => 0xc65c }, 'bestshotmode' => { 102 => 0x3007 }, 'bitdepth' => { 142 => 'BitDepth', 165 => 0x11, 200 => 0x41 }, 'bitspercomponent' => { 116 => 0x87 }, 'bitspersample' => { 106 => 0x102, 421 => 'BitsPerSample' }, 'blacklevel' => { 106 => 0xc61a, 194 => 0x3d, 255 => [0x401,0x1012], 312 => 0x21d }, 'blacklevel1' => { 274 => 0x8 }, 'blacklevel2' => { 254 => 0x600, 258 => 0x600, 274 => 0x9 }, 'blacklevel3' => { 274 => 0xa }, 'blacklevelblue' => { 274 => 0x1e }, 'blackleveldata' => { 312 => 0x223 }, 'blackleveldeltah' => { 106 => 0xc61b }, 'blackleveldeltav' => { 106 => 0xc61c }, 'blacklevelgreen' => { 274 => 0x1d }, 'blacklevelred' => { 274 => 0x1c }, 'blacklevelrepeatdim' => { 106 => 0xc619 }, 'blackpoint' => { 303 => 0x200 }, 'blacks2012' => { 400 => 'Blacks2012' }, 'bleachbypasstoning' => { 303 => 0x7f }, 'blogtitle' => { 415 => 'blogTitle' }, 'blogurl' => { 415 => 'blogURL' }, 'bluebalance' => { 178 => 0x271, 255 => 0x1018, 274 => 0x12, 303 => 0x1b }, 'bluecurvelimits' => { 97 => 0x1fe }, 'bluecurvepoints' => { 96 => 0x79, 97 => 0x1d4 }, 'bluehsl' => { 92 => [0x20914,0x20915] }, 'bluehue' => { 400 => 'BlueHue' }, 'bluesaturation' => { 400 => 'BlueSaturation' }, 'blurcontrol' => { 303 => 0x82 }, 'blurwarning' => { 111 => 0x1300 }, 'bodybatteryadload' => { 282 => 0x3 }, 'bodybatteryadnoload' => { 282 => 0x2 }, 'bodybatterystate' => { 282 => '1.1' }, 'bodybatteryvoltage1' => { 282 => 0x2 }, 'bodybatteryvoltage2' => { 282 => 0x4 }, 'bodybatteryvoltage3' => { 282 => 0x6 }, 'bodybatteryvoltage4' => { 282 => 0x8 }, 'bodyfirmware' => { 329 => 0x0 }, 'bodyfirmwareversion' => { 251 => 0x104, 252 => 0x100, 255 => 0x104 }, 'bodyserialnumber' => { 329 => 0x10 }, 'bookedition' => { 415 => 'bookEdition' }, 'bracketmode' => { 49 => 0x3 }, 'bracketsequence' => { 102 => 0x301d }, 'bracketsettings' => { 270 => 0x45 }, 'bracketshotnumber' => { 49 => 0x5, 284 => 0x9, 356 => 0x2b }, 'bracketshotnumber2' => { 356 => 0x2d }, 'bracketstep' => { 158 => 0xe }, 'bracketvalue' => { 49 => 0x4 }, 'brightness' => { 106 => 0xfe53, 136 => 'Brightness', 154 => 'Brightness', 158 => 0x2c, 196 => 0x34, 324 => 0x25, 345 => 0x22, 357 => 0x2007, 400 => 'Brightness' }, 'brightnessadj' => { 97 => 0x114, 223 => 0x0, 233 => 0x2d, 385 => 0x8018 }, 'brightnessvalue' => { 106 => 0x9203, 164 => [0x691,0x49c3], 255 => 0x1003, 361 => 0x1e, 364 => 0x1140, 365 => 0x1140, 366 => 0x111c, 367 => 0x1198, 368 => 0x1174, 369 => 0x102c, 370 => 0x224, 371 => 0x224, 404 => 'BrightnessValue' }, 'bulbduration' => { 67 => 0x18 }, 'burstmode' => { 122 => 0xa, 270 => 0x2a }, 'burstmode2' => { 122 => 0x18 }, 'burstshot' => { 337 => 0x34 }, 'burstspeed' => { 270 => 0x77 }, 'burstuuid' => { 1 => 0xb }, 'buttonfunctioncontroloff' => { 73 => 0x70a }, 'bwfilter' => { 158 => 0x2a, 166 => 0x39 }, 'bwmode' => { 255 => 0x203 }, 'by-line' => { 114 => 0x50 }, 'by-linetitle' => { 114 => 0x55 }, 'bytecount' => { 415 => 'byteCount' }, 'calibration' => { 337 => [0x24,0x30] }, 'calibrationilluminant1' => { 106 => 0xc65a }, 'calibrationilluminant2' => { 106 => 0xc65b }, 'cameraangle' => { 425 => 'cameraAngle' }, 'cameracalibration1' => { 106 => 0xc623 }, 'cameracalibration2' => { 106 => 0xc624 }, 'cameracalibrationsig' => { 106 => 0xc6f3 }, 'cameracolorcalibration01' => { 33 => 0x0, 39 => 0xba }, 'cameracolorcalibration02' => { 33 => 0x4, 39 => 0xbf }, 'cameracolorcalibration03' => { 33 => 0x8, 39 => 0xc4 }, 'cameracolorcalibration04' => { 33 => 0xc, 39 => 0xc9 }, 'cameracolorcalibration05' => { 33 => 0x10, 39 => 0xce }, 'cameracolorcalibration06' => { 33 => 0x14, 39 => 0xd3 }, 'cameracolorcalibration07' => { 33 => 0x18, 39 => 0xd8 }, 'cameracolorcalibration08' => { 33 => 0x1c, 39 => 0xdd }, 'cameracolorcalibration09' => { 33 => 0x20, 39 => 0xe2 }, 'cameracolorcalibration10' => { 33 => 0x24, 39 => 0xe7 }, 'cameracolorcalibration11' => { 33 => 0x28, 39 => 0xec }, 'cameracolorcalibration12' => { 33 => 0x2c, 39 => 0xf1 }, 'cameracolorcalibration13' => { 33 => 0x30, 39 => 0xf6 }, 'cameracolorcalibration14' => { 33 => 0x34, 39 => 0xfb }, 'cameracolorcalibration15' => { 33 => 0x38, 39 => 0x100 }, 'camerae-mountversion' => { 384 => 0xb }, 'cameraid' => { 255 => 0x209, 336 => 0x209 }, 'cameraiso' => { 31 => 0x10 }, 'cameralabel' => { 106 => 0xc7a1, 425 => 'cameraLabel' }, 'cameramodel' => { 312 => 0x410, 425 => 'cameraModel' }, 'cameramodelid' => { 154 => 'CameraModelID' }, 'cameramove' => { 425 => 'cameraMove' }, 'cameraorientation' => { 6 => 0x30, 8 => 0x7d, 10 => 0x30, 12 => 0x35, 13 => 0x30, 14 => 0x30, 15 => 0x31, 16 => 0x31, 17 => 0x35, 18 => 0x27, 19 => 0x31, 20 => 0x7d, 21 => 0x38, 22 => 0x36, 23 => 0x7d, 24 => 0x83, 25 => 0x84, 26 => 0x35, 270 => 0x8f, 307 => 0x1, 312 => 0x100, 351 => [0x16,0x18], 373 => 0x28, 374 => 0x24, 375 => 0x29 }, 'cameraowner' => { 123 => 0xc353 }, 'cameraparameters' => { 255 => 0x2050 }, 'cameraprofile' => { 400 => 'CameraProfile' }, 'cameraprofiledigest' => { 400 => 'CameraProfileDigest' }, 'camerarawcolortone' => { 98 => 0xe1 }, 'camerarawcontrast' => { 98 => 0xe3 }, 'camerarawhighlightpoint' => { 98 => 0xe6 }, 'camerarawlinear' => { 98 => 0xe4 }, 'camerarawoutputhighlightpoint' => { 98 => 0xe8 }, 'camerarawoutputshadowpoint' => { 98 => 0xe9 }, 'camerarawsaturation' => { 98 => 0xe2 }, 'camerarawshadowpoint' => { 98 => 0xe7 }, 'camerarawsharpness' => { 98 => 0xe5 }, 'cameraserialnumber' => { 106 => 0xc62f, 156 => 'CameraSerialNumber' }, 'camerasettingsversion' => { 250 => 0x0 }, 'cameratemperature' => { 6 => 0x18, 8 => 0x1b, 10 => 0x18, 12 => 0x19, 13 => 0x18, 14 => 0x18, 15 => 0x19, 16 => 0x19, 17 => 0x19, 18 => 0x17, 19 => 0x19, 20 => 0x1b, 21 => 0x19, 22 => 0x19, 23 => 0x1b, 24 => 0x1b, 25 => 0x1b, 26 => 0x19, 27 => [0x87,0x91], 28 => [0x99,0x9f,0xa4,0xa8,0x105], 30 => ['-3',0x64,0x47,0x53,0x5b,0x5c], 67 => 0xc, 120 => 0x406, 254 => 0x1306, 266 => 0x320, 272 => 0x3402, 303 => 0x47, 334 => 0x43, 377 => 0x5 }, 'cameratemperature4' => { 308 => 0x14 }, 'cameratemperature5' => { 308 => 0x16 }, 'cameratemperaturerangemax' => { 108 => 0x5 }, 'cameratemperaturerangemin' => { 108 => 0x6 }, 'cameratype' => { 67 => 0x1a, 255 => 0x207 }, 'cameratype2' => { 251 => 0x100 }, 'canondr4' => { 107 => 'CanonDR4' }, 'canonexposuremode' => { 31 => 0x14 }, 'canonfiledescription' => { 86 => 0x805 }, 'canonfilelength' => { 55 => 0xe }, 'canonfirmwareversion' => { 55 => 0x7, 86 => 0x80b }, 'canonflashinfo' => { 86 => 0x1028 }, 'canonflashmode' => { 31 => 0x4 }, 'canonimagesize' => { 9 => 0x39, 31 => 0xa }, 'canonimagetype' => { 55 => 0x6, 86 => 0x815 }, 'canonmodelid' => { 55 => 0x10, 86 => 0x1834 }, 'canonvrd' => { 107 => 'CanonVRD' }, 'caption' => { 394 => 'caption' }, 'caption-abstract' => { 114 => 0x78 }, 'captionsauthornames' => { 403 => 'CaptionsAuthorNames' }, 'captionsdatetimestamps' => { 403 => 'CaptionsDateTimeStamps' }, 'captionwriter' => { 412 => 'CaptionWriter' }, 'captureframerate' => { 102 => 0x4001 }, 'capturesoftware' => { 389 => 'CaptureSoftware' }, 'cardshutterlock' => { 161 => 0x49 }, 'casioimagesize' => { 102 => 0x9 }, 'catalogsets' => { 114 => 0xff, 388 => 'CatalogSets', 392 => 'CatalogSets' }, 'categories' => { 55 => 0x23, 394 => 'categories' }, 'category' => { 114 => 0xf, 249 => 0x30, 412 => 'Category' }, 'cbcrgain' => { 334 => 0xa036 }, 'cbcrgaindefault' => { 334 => 0xa035 }, 'cbcrmatrix' => { 334 => 0xa034 }, 'cbcrmatrixdefault' => { 334 => 0xa033 }, 'ccdboardversion' => { 266 => 0x331 }, 'ccdscanmode' => { 255 => 0x1039 }, 'ccdsensitivity' => { 220 => 0x6 }, 'ccdversion' => { 266 => 0x330 }, 'cellglobalid' => { 398 => 'cgi' }, 'celllength' => { 106 => 0x109 }, 'cellr' => { 398 => 'r' }, 'celltowerid' => { 398 => 'cellid' }, 'cellwidth' => { 106 => 0x108 }, 'centerafarea' => { 245 => '15.1' }, 'centerfocuspoint' => { 248 => '2.2' }, 'centerweightedareasize' => { 237 => '7.1', 238 => '8.1', 243 => '5.1', 244 => '7.1', 245 => '6.3', 247 => '8.1', 248 => '8.1' }, 'certificate' => { 429 => 'Certificate' }, 'cfapattern' => { 106 => 0xa302, 404 => 'CFAPattern' }, 'cfapattern2' => { 106 => 0x828e }, 'cfapatterncolumns' => { 404 => [\'CFAPattern','CFAPatternColumns'] }, 'cfapatternrows' => { 404 => [\'CFAPattern','CFAPatternRows'] }, 'cfapatternvalues' => { 404 => [\'CFAPattern','CFAPatternValues'] }, 'cfarepeatpatterndim' => { 106 => 0x828d }, 'channel' => { 415 => 'channel' }, 'channela-lang' => { 415 => [\'channel','channelA-lang'] }, 'channelchannel' => { 415 => [\'channel','channelChannel'] }, 'channels' => { 135 => 'Channels' }, 'channelsubchannel1' => { 415 => [\'channel','channelSubchannel1'] }, 'channelsubchannel2' => { 415 => [\'channel','channelSubchannel2'] }, 'channelsubchannel3' => { 415 => [\'channel','channelSubchannel3'] }, 'channelsubchannel4' => { 415 => [\'channel','channelSubchannel4'] }, 'checkmark' => { 92 => 0x10101, 97 => 0x26a }, 'checkmark2' => { 98 => 0x8e }, 'childfontfiles' => { 430 => [\'Fonts','FontsChildFontFiles'] }, 'chmodeshootingspeed' => { 237 => '10.3', 238 => '11.2' }, 'chromablurradius' => { 106 => 0xc631 }, 'chromaticaberration' => { 92 => 0x20703, 98 => 0x66, 334 => 0xa051 }, 'chromaticaberrationb' => { 400 => 'ChromaticAberrationB' }, 'chromaticaberrationblue' => { 92 => 0x20708, 98 => 0x6b }, 'chromaticaberrationcorr' => { 69 => [0x4,0x5] }, 'chromaticaberrationcorrection' => { 293 => 0x1 }, 'chromaticaberrationon' => { 92 => '0x20703.0', 98 => 0x62 }, 'chromaticaberrationr' => { 400 => 'ChromaticAberrationR' }, 'chromaticaberrationred' => { 92 => 0x20707, 98 => 0x6a }, 'chromaticaberrationsetting' => { 70 => 0x6 }, 'chrominancenoisereduction' => { 92 => 0x20601, 98 => 0x5e, 337 => 0x1a }, 'chrominancenr_tiff_jpeg' => { 98 => 0x60 }, 'circgradbasedcorractive' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionActive'] }, 'circgradbasedcorramount' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionAmount'] }, 'circgradbasedcorrbrightness' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalBrightness'] }, 'circgradbasedcorrclarity' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalClarity'] }, 'circgradbasedcorrclarity2012' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalClarity2012'] }, 'circgradbasedcorrcontrast' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalContrast'] }, 'circgradbasedcorrcontrast2012' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalContrast2012'] }, 'circgradbasedcorrdefringe' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalDefringe'] }, 'circgradbasedcorrexposure' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalExposure'] }, 'circgradbasedcorrexposure2012' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalExposure2012'] }, 'circgradbasedcorrhighlights2012' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalHighlights2012'] }, 'circgradbasedcorrhue' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalToningHue'] }, 'circgradbasedcorrluminancenoise' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalLuminanceNoise'] }, 'circgradbasedcorrmaskalpha' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksAlpha'] }, 'circgradbasedcorrmaskangle' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksAngle'] }, 'circgradbasedcorrmaskbottom' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksBottom'] }, 'circgradbasedcorrmaskcentervalue' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksCenterValue'] }, 'circgradbasedcorrmaskcenterweight' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksCenterWeight'] }, 'circgradbasedcorrmaskdabs' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksDabs'] }, 'circgradbasedcorrmaskfeather' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksFeather'] }, 'circgradbasedcorrmaskflipped' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksFlipped'] }, 'circgradbasedcorrmaskflow' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksFlow'] }, 'circgradbasedcorrmaskfullx' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksFullX'] }, 'circgradbasedcorrmaskfully' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksFullY'] }, 'circgradbasedcorrmaskleft' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksLeft'] }, 'circgradbasedcorrmaskmidpoint' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksMidpoint'] }, 'circgradbasedcorrmaskperimetervalue' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksPerimeterValue'] }, 'circgradbasedcorrmaskradius' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksRadius'] }, 'circgradbasedcorrmaskright' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksRight'] }, 'circgradbasedcorrmaskroundness' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksRoundness'] }, 'circgradbasedcorrmasks' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasks'] }, 'circgradbasedcorrmasksizex' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksSizeX'] }, 'circgradbasedcorrmasksizey' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksSizeY'] }, 'circgradbasedcorrmasktop' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksTop'] }, 'circgradbasedcorrmaskvalue' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksMaskValue'] }, 'circgradbasedcorrmaskversion' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksVersion'] }, 'circgradbasedcorrmaskwhat' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksWhat'] }, 'circgradbasedcorrmaskx' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksX'] }, 'circgradbasedcorrmasky' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksY'] }, 'circgradbasedcorrmaskzerox' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksZeroX'] }, 'circgradbasedcorrmaskzeroy' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsCorrectionMasksZeroY'] }, 'circgradbasedcorrmoire' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalMoire'] }, 'circgradbasedcorrsaturation' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalSaturation','CircularGradientBasedCorrectionsLocalToningSaturation'] }, 'circgradbasedcorrshadows2012' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalShadows2012'] }, 'circgradbasedcorrsharpness' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalSharpness'] }, 'circgradbasedcorrtemperature' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalTemperature'] }, 'circgradbasedcorrtint' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsLocalTint'] }, 'circgradbasedcorrwhat' => { 400 => [\'CircularGradientBasedCorrections','CircularGradientBasedCorrectionsWhat'] }, 'circulargradientbasedcorrections' => { 400 => 'CircularGradientBasedCorrections' }, 'city' => { 114 => 0x5a, 141 => 'City', 270 => 0x6d, 412 => 'City' }, 'city2' => { 270 => 0x80 }, 'clarity' => { 400 => 'Clarity' }, 'clarity2012' => { 400 => 'Clarity2012' }, 'classifystate' => { 114 => 0xe1 }, 'clearretouch' => { 270 => 0x7c }, 'clearretouchvalue' => { 270 => 0xa3 }, 'client' => { 425 => 'client' }, 'clientname' => { 406 => 'ClientName' }, 'clmodeshootingspeed' => { 237 => '10.2', 238 => '11.3', 243 => '11.2', 244 => '10.2', 247 => '11.2', 248 => '11.1' }, 'cmcontrast' => { 258 => 0x2022 }, 'cmexposurecompensation' => { 258 => 0x2000 }, 'cmhue' => { 258 => 0x2021 }, 'cmsaturation' => { 258 => 0x2020 }, 'cmsharpness' => { 258 => 0x2023 }, 'cmwhitebalance' => { 258 => 0x2001 }, 'cmwhitebalancecomp' => { 258 => 0x2002 }, 'cmwhitebalancegraypoint' => { 258 => 0x2010 }, 'codec' => { 149 => 'Codec' }, 'codedcharacterset' => { 115 => 0x5a }, 'collectionname' => { 150 => [\'Collections','CollectionsCollectionName'] }, 'collections' => { 150 => 'Collections', 394 => 'collections' }, 'collectionuri' => { 150 => [\'Collections','CollectionsCollectionURI'] }, 'color' => { 414 => 'color' }, 'coloraberrationcontrol' => { 230 => 0xc89224b }, 'coloradjustment' => { 337 => 0x14 }, 'coloradjustmentmode' => { 336 => 0x210 }, 'coloranta' => { 430 => [\'Colorants','ColorantsA'] }, 'colorantb' => { 430 => [\'Colorants','ColorantsB'] }, 'colorantblack' => { 430 => [\'Colorants','ColorantsBlack'] }, 'colorantblue' => { 430 => [\'Colorants','ColorantsBlue'] }, 'colorantcyan' => { 430 => [\'Colorants','ColorantsCyan'] }, 'colorantgreen' => { 430 => [\'Colorants','ColorantsGreen'] }, 'colorantl' => { 430 => [\'Colorants','ColorantsL'] }, 'colorantmagenta' => { 430 => [\'Colorants','ColorantsMagenta'] }, 'colorantmode' => { 430 => [\'Colorants','ColorantsMode'] }, 'colorantred' => { 430 => [\'Colorants','ColorantsRed'] }, 'colorants' => { 430 => 'Colorants' }, 'colorantswatchname' => { 430 => [\'Colorants','ColorantsSwatchName'] }, 'coloranttint' => { 430 => [\'Colorants','ColorantsTint'] }, 'coloranttype' => { 430 => [\'Colorants','ColorantsType'] }, 'colorantyellow' => { 430 => [\'Colorants','ColorantsYellow'] }, 'colorbalance' => { 136 => 'ColorBalance' }, 'colorbalanceadj' => { 230 => 0x76a43202 }, 'colorbalanceblue' => { 158 => 0x1e }, 'colorbalancegreen' => { 158 => 0x1d }, 'colorbalancered' => { 158 => 0x1c }, 'colorbalanceversion' => { 179 => 0x0 }, 'colorblur' => { 98 => 0x65 }, 'colorbluron' => { 92 => 0x20704 }, 'colorbooster' => { 230 => 0x5f0e7d23 }, 'colorboostlevel' => { 224 => 0x1 }, 'colorboosttype' => { 224 => 0x0 }, 'colorclass' => { 314 => 0xde, 315 => 'ColorClass' }, 'colorcompensationfilter' => { 161 => [0x3a,0x5f], 163 => 0x111, 357 => 0xb022 }, 'colorcompensationfiltercustom' => { 345 => 0xd, 346 => 0xc }, 'colorcompensationfilterset' => { 345 => 0x8, 346 => 0x7, 347 => 0x18, 361 => 0xf }, 'colorcontrol' => { 255 => 0x102b }, 'colorcorrection' => { 385 => 0x8015 }, 'colordataversion' => { 37 => 0x0, 38 => 0x0, 40 => 0x0, 41 => 0x0, 42 => 0x0 }, 'coloreffect' => { 270 => 0x28 }, 'colorfilter' => { 101 => 0x17, 102 => 0x3017, 158 => 0x29, 166 => [0x38,0x4d,0x4f], 310 => 0x17 }, 'colorgain' => { 200 => 0x51 }, 'colorhue' => { 92 => 0x20900, 194 => 0x8d }, 'colorimetricreference' => { 106 => 0xc6bf }, 'colorlabel' => { 403 => 'ColorLabel' }, 'colormatrix' => { 254 => 0x200, 255 => 0x1011, 334 => 0xa030 }, 'colormatrix1' => { 106 => 0xc621, 312 => 0x106 }, 'colormatrix2' => { 106 => 0xc622, 258 => 0x200, 312 => 0x226 }, 'colormatrixa' => { 303 => 0x203 }, 'colormatrixadobergb' => { 334 => 0xa032 }, 'colormatrixb' => { 303 => 0x204 }, 'colormatrixnumber' => { 255 => 0x1019 }, 'colormatrixsrgb' => { 334 => 0xa031 }, 'colormode' => { 102 => 0x3015, 111 => 0x1210, 122 => 0x66, 158 => 0x28, 161 => 0x16, 163 => 0x101, 164 => 0x36, 166 => 0x7, 194 => 0x3, 220 => 0x4, 270 => 0x32, 337 => 0x2c, 357 => 0xb029, 412 => 'ColorMode' }, 'colormoirereduction' => { 231 => 0x15 }, 'colormoirereductionmode' => { 231 => 0x5 }, 'colornoisereduction' => { 385 => 0x8029, 400 => 'ColorNoiseReduction' }, 'colornoisereductiondetail' => { 400 => 'ColorNoiseReductionDetail' }, 'colornoisereductionintensity' => { 231 => 0x18 }, 'colornoisereductionsharpness' => { 231 => 0x1c }, 'colornoisereductionsmoothness' => { 400 => 'ColorNoiseReductionSmoothness' }, 'colorplanes' => { 110 => 0x2 }, 'colorprofile' => { 158 => 0x33 }, 'colorrepresentation' => { 116 => 0x3c }, 'colorsaturationadj' => { 92 => 0x20305 }, 'colorsequence' => { 116 => 0x41 }, 'colorspace' => { 43 => 0x3, 55 => 0xb4, 86 => 0x10b4, 106 => 0xa001, 142 => 'ColorSpace', 159 => 0x2f, 160 => 0x25, 161 => 0x17, 194 => 0x1e, 250 => 0x507, 303 => 0x37, 334 => 0xa011, 337 => 0xb, 345 => 0x1b, 346 => 0x83, 347 => 0xe, 361 => 0x6, 404 => 'ColorSpace' }, 'colortempasshot' => { 34 => 0x4, 35 => 0x1d, 36 => 0x26, 37 => 0x43, 40 => 0x43, 41 => 0x43, 42 => 0x43 }, 'colortempauto' => { 34 => 0x9, 35 => 0x22, 36 => 0x1c, 37 => 0x48, 40 => 0x48, 41 => 0x48, 42 => 0x48 }, 'colortempcloudy' => { 34 => 0x22, 35 => 0x31, 36 => 0x35, 37 => 0x5c, 40 => 0x75, 41 => 0x8e, 42 => 0x93, 303 => 0x55 }, 'colortempcustom' => { 37 => 0x84 }, 'colortempcustom1' => { 35 => 0x45 }, 'colortempcustom2' => { 35 => 0x4a }, 'colortempdaylight' => { 34 => 0x18, 35 => 0x27, 36 => 0x2b, 37 => 0x52, 40 => 0x6b, 41 => 0x84, 42 => 0x89, 303 => 0x53 }, 'colortemperature' => { 6 => 0x73, 7 => [0x48,0x4e], 8 => 0xc0, 9 => 0x37, 10 => 0x62, 11 => 0x37, 12 => 0x7c, 13 => 0x73, 14 => 0x73, 15 => 0x77, 16 => 0x73, 17 => 0x7c, 18 => 0x58, 19 => 0x73, 20 => 0xc0, 21 => 0x7f, 22 => 0x7d, 23 => 0xc0, 24 => 0xc6, 25 => 0xc7, 26 => 0x7b, 55 => 0xae, 65 => 0x9, 86 => 0x10ae, 111 => 0x1005, 120 => 0x846, 136 => 'ColorTemperature', 159 => [0x6e,0x49], 160 => 0x3f, 161 => [0x39,0x5e], 163 => 0x10b, 166 => [0x3c,0x4c,0x4e], 266 => 0x321, 303 => 0x50, 328 => 0x1308, 357 => 0xb021, 400 => 'Temperature' }, 'colortemperatureadj' => { 385 => 0x8013 }, 'colortemperaturebg' => { 255 => 0x1013 }, 'colortemperaturecustom' => { 345 => 0xc, 346 => 0xb }, 'colortemperaturerg' => { 255 => 0x1014 }, 'colortemperatureset' => { 345 => 0x7, 346 => 0x6 }, 'colortemperaturesetting' => { 161 => 0x25, 347 => 0x17, 361 => 0xe }, 'colortempflash' => { 34 => 0x36, 35 => 0x40, 36 => 0x49, 37 => 0x70, 40 => 0x89, 41 => 0xa2, 42 => 0xa7, 303 => 0x5a }, 'colortempflashdata' => { 37 => 0x24a }, 'colortempfluorescent' => { 34 => 0x2c, 35 => 0x3b, 36 => 0x3f, 37 => 0x66, 40 => 0x7f, 41 => 0x98, 42 => 0x9d }, 'colortempfluorescentd' => { 303 => 0x57 }, 'colortempfluorescentn' => { 303 => 0x58 }, 'colortempfluorescentw' => { 303 => 0x59 }, 'colortempkelvin' => { 34 => 0x31, 36 => 0x44, 37 => 0x6b, 40 => 0x84, 41 => 0x9d, 42 => 0xa2, 270 => 0x44, 328 => 0x1307 }, 'colortempmeasured' => { 34 => 0xe, 37 => 0x4d, 40 => 0x4d, 41 => 0x4d, 42 => 0x4d }, 'colortemppc1' => { 36 => 0x94, 37 => 0x75 }, 'colortemppc2' => { 36 => 0x99, 37 => 0x7a }, 'colortemppc3' => { 36 => 0x9e, 37 => 0x7f }, 'colortempshade' => { 34 => 0x1d, 35 => 0x2c, 36 => 0x30, 37 => 0x57, 40 => 0x70, 41 => 0x89, 42 => 0x8e, 303 => 0x54 }, 'colortemptungsten' => { 34 => 0x27, 35 => 0x36, 36 => 0x3a, 37 => 0x61, 40 => 0x7a, 41 => 0x93, 42 => 0x98, 303 => 0x56 }, 'colortempunknown' => { 34 => 0x13, 36 => 0x21, 40 => 0x52, 41 => 0x52, 42 => 0x52 }, 'colortempunknown10' => { 34 => 0x63, 36 => 0x76, 40 => 0xa2, 41 => 0x7f, 42 => 0x7f }, 'colortempunknown11' => { 34 => 0x68, 36 => 0x7b, 40 => 0xa7, 41 => 0xa7, 42 => 0x84 }, 'colortempunknown12' => { 34 => 0x6d, 36 => 0x80, 40 => 0xac, 41 => 0xac, 42 => 0xac }, 'colortempunknown13' => { 34 => 0x72, 36 => 0x85, 40 => 0xb1, 41 => 0xb1, 42 => 0xb1 }, 'colortempunknown14' => { 36 => 0x8a, 40 => 0xb6, 41 => 0xb6, 42 => 0xb6 }, 'colortempunknown15' => { 36 => 0x8f, 40 => 0xbb, 41 => 0xbb, 42 => 0xbb }, 'colortempunknown16' => { 36 => 0xa3, 41 => 0xc0, 42 => 0xc0 }, 'colortempunknown17' => { 41 => 0xc5, 42 => 0xc5 }, 'colortempunknown18' => { 41 => 0xca, 42 => 0xca }, 'colortempunknown19' => { 41 => 0xcf, 42 => 0xcf }, 'colortempunknown2' => { 34 => 0x3b, 36 => 0x4e, 40 => 0x57, 41 => 0x57, 42 => 0x57 }, 'colortempunknown20' => { 41 => 0xd4, 42 => 0xd4 }, 'colortempunknown21' => { 42 => 0xd9 }, 'colortempunknown22' => { 42 => 0xde }, 'colortempunknown23' => { 42 => 0xe3 }, 'colortempunknown24' => { 42 => 0xe8 }, 'colortempunknown25' => { 42 => 0xed }, 'colortempunknown26' => { 42 => 0xf2 }, 'colortempunknown27' => { 42 => 0xf7 }, 'colortempunknown28' => { 42 => 0xfc }, 'colortempunknown29' => { 42 => 0x101 }, 'colortempunknown3' => { 34 => 0x40, 36 => 0x53, 40 => 0x5c, 41 => 0x5c, 42 => 0x5c }, 'colortempunknown30' => { 42 => 0x106 }, 'colortempunknown4' => { 34 => 0x45, 36 => 0x58, 40 => 0x61, 41 => 0x61, 42 => 0x61 }, 'colortempunknown5' => { 34 => 0x4a, 36 => 0x5d, 40 => 0x66, 41 => 0x66, 42 => 0x66 }, 'colortempunknown6' => { 34 => 0x4f, 36 => 0x62, 40 => 0x8e, 41 => 0x6b, 42 => 0x6b }, 'colortempunknown7' => { 34 => 0x54, 36 => 0x67, 40 => 0x93, 41 => 0x70, 42 => 0x70 }, 'colortempunknown8' => { 34 => 0x59, 36 => 0x6c, 40 => 0x98, 41 => 0x75, 42 => 0x75 }, 'colortempunknown9' => { 34 => 0x5e, 36 => 0x71, 40 => 0x9d, 41 => 0x7a, 42 => 0x7a }, 'colortone' => { 9 => 0x6f, 11 => 0x77, 31 => 0x2a, 43 => 0x2 }, 'colortoneadj' => { 92 => 0x20304, 97 => 0x11e }, 'colortoneauto' => { 62 => 0x9c }, 'colortonefaithful' => { 18 => 0x107, 61 => 0x6c, 62 => 0x6c }, 'colortonelandscape' => { 18 => 0x105, 61 => 0x3c, 62 => 0x3c }, 'colortonemonochrome' => { 61 => 0x84, 62 => 0x84 }, 'colortoneneutral' => { 18 => 0x106, 61 => 0x54, 62 => 0x54 }, 'colortoneportrait' => { 18 => 0x104, 61 => 0x24, 62 => 0x24 }, 'colortonestandard' => { 18 => 0x103, 61 => 0xc, 62 => 0xc }, 'colortoneuserdef1' => { 18 => 0x109, 61 => 0x9c, 62 => 0xb4 }, 'colortoneuserdef2' => { 18 => 0x10a, 61 => 0xb4, 62 => 0xcc }, 'colortoneuserdef3' => { 18 => 0x10b, 61 => 0xcc, 62 => 0xe4 }, 'commanddials' => { 245 => '5.1' }, 'commanddialsaperturesetting' => { 237 => '17.3', 238 => '18.3', 243 => '33.3', 244 => '17.3', 247 => '18.3' }, 'commanddialschangemainsub' => { 237 => '17.2', 238 => '18.1', 243 => '33.2', 244 => '17.2', 247 => '18.1' }, 'commanddialsmenuandplayback' => { 237 => '17.4', 238 => '18.2', 243 => '33.4', 244 => '17.4', 247 => '18.2' }, 'commanddialsreverserotation' => { 237 => '17.1', 238 => '6.4', 240 => '16.2', 241 => '17.2', 243 => '33.1', 244 => '17.1', 247 => '6.2', 248 => '18.1' }, 'commanderchannel' => { 245 => '10.2', 246 => '25.2' }, 'commandergroupa_ttl-aacomp' => { 245 => '13.1', 246 => '31.1' }, 'commandergroupa_ttlcomp' => { 248 => '32.1' }, 'commandergroupamanualoutput' => { 245 => '13.2', 246 => '28.2' }, 'commandergroupamode' => { 245 => '11.2', 246 => '28.1' }, 'commandergroupb_ttl-aacomp' => { 245 => '14.1', 246 => '32.1' }, 'commandergroupb_ttlcomp' => { 248 => '33.1' }, 'commandergroupbmanualoutput' => { 245 => '14.2', 246 => '29.2' }, 'commandergroupbmode' => { 245 => '11.3', 246 => '29.1' }, 'commanderinternalflash' => { 245 => '11.1', 246 => '27.1' }, 'commanderinternalmanualoutput' => { 245 => '12.2', 246 => '27.2' }, 'commanderinternalttlchannel' => { 243 => '18.2' }, 'commanderinternalttlcomp' => { 245 => '12.1', 246 => '30.2', 248 => '31.2' }, 'commanderinternalttlcompbuiltin' => { 243 => '20.1', 244 => '26.1' }, 'commanderinternalttlcompgroupa' => { 243 => '21.1', 244 => '27.1' }, 'commanderinternalttlcompgroupb' => { 243 => '22.1', 244 => '28.1' }, 'comment' => { 0 => 0x2, 107 => 'Comment', 137 => 'Comment', 262 => 'Comment' }, 'compass' => { 331 => 0x4 }, 'complianceprofile' => { 415 => 'complianceProfile' }, 'componentsconfiguration' => { 106 => 0x9101, 142 => 'Components', 404 => 'ComponentsConfiguration' }, 'componentversion' => { 86 => 0x80c }, 'composer' => { 425 => 'composer' }, 'compositionadjust' => { 302 => '0.1' }, 'compositionadjustrotation' => { 302 => 0x7 }, 'compositionadjustx' => { 302 => 0x5 }, 'compositionadjusty' => { 302 => 0x6 }, 'compressedbitsperpixel' => { 106 => 0x9102, 404 => 'CompressedBitsPerPixel' }, 'compressedimagesize' => { 163 => 0x40, 255 => 0x40 }, 'compression' => { 106 => 0x103, 421 => 'Compression' }, 'compressionfactor' => { 250 => 0x50d }, 'compressionratio' => { 142 => 'Compression', 255 => 0x1034 }, 'confidencelevel' => { 395 => 'ConfidenceLevel' }, 'constrainedcropheight' => { 97 => 0x266, 314 => 0xd6 }, 'constrainedcropwidth' => { 97 => 0x262, 314 => 0xd5 }, 'contact' => { 114 => 0x76 }, 'contactinfo' => { 414 => 'contactInfo' }, 'contentlocationcode' => { 114 => 0x1a }, 'contentlocationname' => { 114 => 0x1b }, 'contenttype' => { 415 => 'contentType' }, 'continuousbracketing' => { 161 => 0x20 }, 'continuousdrive' => { 31 => 0x5 }, 'continuousshootingspeed' => { 73 => 0x610 }, 'continuousshotlimit' => { 73 => 0x611 }, 'contrast' => { 9 => 0x73, 11 => 0x75, 31 => 0xd, 101 => 0xc, 102 => [0x3012,0x20], 106 => [0xa408,0xfe54], 111 => [0x1004,0x1006], 136 => 'Contrast', 154 => 'Contrast', 158 => 0x20, 159 => 0x31, 160 => 0x27, 161 => 0x19, 166 => 0x2, 196 => 0x33, 255 => 0x1029, 270 => 0x39, 272 => 0x300a, 303 => 0x20, 310 => 0xc, 324 => 0x24, 328 => 0x1012, 337 => 0xd, 345 => 0x1d, 346 => 0x1a, 357 => 0x2004, 400 => 'Contrast', 404 => 'Contrast' }, 'contrast2012' => { 400 => 'Contrast2012' }, 'contrastadj' => { 92 => 0x20303, 97 => 0x115, 233 => 0x2c, 385 => 0x8017 }, 'contrastauto' => { 62 => 0x90 }, 'contrastcurve' => { 194 => 0x8c }, 'contrastdetectaf' => { 170 => 0x4 }, 'contrastdetectafarea' => { 303 => 0x231 }, 'contrastdetectafinfocus' => { 170 => 0x1c }, 'contrastfaithful' => { 18 => 0xec, 61 => 0x60, 62 => 0x60 }, 'contrasthighlight' => { 303 => 0x6d }, 'contrasthighlightshadowadj' => { 303 => 0x6f }, 'contrastlandscape' => { 18 => 0xea, 61 => 0x30, 62 => 0x30 }, 'contrastmode' => { 270 => 0x2c }, 'contrastmonochrome' => { 18 => 0xed, 61 => 0x78, 62 => 0x78 }, 'contrastneutral' => { 18 => 0xeb, 61 => 0x48, 62 => 0x48 }, 'contrastportrait' => { 18 => 0xe9, 61 => 0x18, 62 => 0x18 }, 'contrastsetting' => { 250 => 0x505, 258 => 0x1012, 347 => 0x10, 361 => 0x8 }, 'contrastshadow' => { 303 => 0x6e }, 'contraststandard' => { 18 => 0xe8, 61 => 0x0, 62 => 0x0 }, 'contrastuserdef1' => { 18 => 0xee, 61 => 0x90, 62 => 0xa8 }, 'contrastuserdef2' => { 18 => 0xef, 61 => 0xa8, 62 => 0xc0 }, 'contrastuserdef3' => { 18 => 0xf0, 61 => 0xc0, 62 => 0xd8 }, 'contributedmedia' => { 425 => 'contributedMedia' }, 'contributedmediaduration' => { 425 => [\'contributedMedia','contributedMediaDuration'] }, 'contributedmediadurationscale' => { 425 => [\'contributedMedia','contributedMediaDurationScale'] }, 'contributedmediadurationvalue' => { 425 => [\'contributedMedia','contributedMediaDurationValue'] }, 'contributedmediamanaged' => { 425 => [\'contributedMedia','contributedMediaManaged'] }, 'contributedmediapath' => { 425 => [\'contributedMedia','contributedMediaPath'] }, 'contributedmediastarttime' => { 425 => [\'contributedMedia','contributedMediaStartTime'] }, 'contributedmediastarttimescale' => { 425 => [\'contributedMedia','contributedMediaStartTimeScale'] }, 'contributedmediastarttimevalue' => { 425 => [\'contributedMedia','contributedMediaStartTimeValue'] }, 'contributedmediatrack' => { 425 => [\'contributedMedia','contributedMediaTrack'] }, 'contributedmediawebstatement' => { 425 => [\'contributedMedia','contributedMediaWebStatement'] }, 'contributor' => { 401 => 'contributor' }, 'contributors' => { 137 => 'Contributors' }, 'controldialset' => { 161 => 0x46 }, 'controlledvocabularyterm' => { 410 => 'CVterm' }, 'controllerboardversion' => { 266 => 0x332 }, 'controlmode' => { 67 => 0x12 }, 'conversionlens' => { 251 => 0x403, 270 => 0x35 }, 'converter' => { 106 => 0xfe4d, 220 => 0xb, 400 => 'Converter' }, 'converttograyscale' => { 400 => 'ConvertToGrayscale' }, 'cookingequipment' => { 417 => 'cookingEquipment' }, 'cookingmethod' => { 417 => 'cookingMethod' }, 'copyright' => { 0 => 0x3, 106 => 0x8298, 137 => 'Copyright', 262 => 'Copyright', 303 => 0x22f, 319 => 'Copyright', 411 => 'Copyright', 418 => 'copyright', 421 => 'Copyright', 425 => 'copyright' }, 'copyrightflag' => { 317 => 0x40a }, 'copyrightnotice' => { 114 => 0x74 }, 'copyrightowner' => { 413 => 'CopyrightOwner' }, 'copyrightownerid' => { 413 => [\'CopyrightOwner','CopyrightOwnerCopyrightOwnerID'] }, 'copyrightownerimageid' => { 413 => 'CopyrightOwnerImageID' }, 'copyrightownername' => { 413 => [\'CopyrightOwner','CopyrightOwnerCopyrightOwnerName'] }, 'copyrightregistrationnumber' => { 413 => 'CopyrightRegistrationNumber' }, 'copyrightstatus' => { 413 => 'CopyrightStatus' }, 'copyrightyear' => { 415 => 'copyrightYear' }, 'coringfilter' => { 254 => 0x310, 255 => 0x102d, 258 => 0x310 }, 'coringvalues' => { 254 => 0x311, 258 => 0x311 }, 'corporateentity' => { 415 => 'corporateEntity' }, 'country' => { 141 => 'Country', 270 => 0x69, 412 => 'Country' }, 'country-primarylocationcode' => { 114 => 0x64 }, 'country-primarylocationname' => { 114 => 0x65 }, 'countrycode' => { 193 => 0x5, 315 => 'CountryCode', 409 => 'CountryCode' }, 'course' => { 417 => 'course' }, 'coverage' => { 401 => 'coverage' }, 'coverdate' => { 415 => 'coverDate' }, 'coverdisplaydate' => { 415 => 'coverDisplayDate' }, 'cpufirmwareversion' => { 303 => 0x28 }, 'crc32' => { 402 => 'crc32' }, 'createdate' => { 106 => 0x9004, 137 => 'CreateDate', 259 => 'CreationDate', 262 => 'create-date', 319 => 'CreationDate', 321 => 0x1, 423 => 'CreateDate' }, 'creationdate' => { 411 => 'CreationDate', 415 => 'creationDate' }, 'creationtime' => { 262 => 'Creation Time' }, 'creativestyle' => { 345 => 0x1a, 346 => 0x18, 356 => 0x41, 357 => 0xb020, 381 => 0x4a }, 'creativestylesetting' => { 347 => 0xf, 361 => 0x7 }, 'creativestylewaschanged' => { 385 => 0x8001 }, 'creator' => { 259 => 'Creator', 319 => 'Creator', 401 => 'creator', 411 => 'Creator' }, 'creatoraddress' => { 409 => [\'CreatorContactInfo','CreatorContactInfoCiAdrExtadr'] }, 'creatorappid' => { 156 => 'CreatorAppId' }, 'creatorcity' => { 409 => [\'CreatorContactInfo','CreatorContactInfoCiAdrCity'] }, 'creatorcontactinfo' => { 409 => 'CreatorContactInfo' }, 'creatorcountry' => { 409 => [\'CreatorContactInfo','CreatorContactInfoCiAdrCtry'] }, 'creatoropenwithuioptions' => { 156 => 'CreatorOpenWithUIOptions' }, 'creatorpostalcode' => { 409 => [\'CreatorContactInfo','CreatorContactInfoCiAdrPcode'] }, 'creatorregion' => { 409 => [\'CreatorContactInfo','CreatorContactInfoCiAdrRegion'] }, 'creatortool' => { 423 => 'CreatorTool' }, 'creatorworkemail' => { 409 => [\'CreatorContactInfo','CreatorContactInfoCiEmailWork'] }, 'creatorworktelephone' => { 409 => [\'CreatorContactInfo','CreatorContactInfoCiTelWork'] }, 'creatorworkurl' => { 409 => [\'CreatorContactInfo','CreatorContactInfoCiUrlWork'] }, 'credit' => { 114 => 0x6e, 412 => 'Credit' }, 'creditline' => { 418 => 'creditLine' }, 'creditlinereq' => { 428 => 'CreditLineReq' }, 'creditlinerequired' => { 413 => 'CreditLineRequired' }, 'cropactive' => { 90 => 0x0, 97 => 0x244 }, 'cropangle' => { 400 => 'CropAngle' }, 'cropaspectratio' => { 92 => 0x30101, 97 => 0x260 }, 'cropaspectratiocustom' => { 92 => 0x30102 }, 'cropbottom' => { 110 => 0x9, 225 => 0x36, 274 => 0x31, 314 => 0xdc, 400 => 'CropBottom' }, 'cropbottommargin' => { 45 => 0x3 }, 'cropcircleactive' => { 98 => 0xd6 }, 'cropcircleradius' => { 98 => 0xd9 }, 'cropcirclex' => { 98 => 0xd7 }, 'cropcircley' => { 98 => 0xd8 }, 'cropconstraintowarp' => { 400 => 'CropConstrainToWarp' }, 'croph' => { 393 => 'CropH' }, 'cropheight' => { 90 => 0x6, 97 => 0x24c, 254 => 0x615, 258 => 0x615, 400 => 'CropHeight' }, 'crophispeed' => { 194 => 0x1b }, 'cropleft' => { 97 => 0x246, 110 => 0x6, 225 => 0x1e, 254 => 0x612, 258 => 0x612, 274 => 0x30, 314 => 0xd9, 400 => 'CropLeft' }, 'cropleftmargin' => { 45 => 0x0 }, 'cropmode35mm' => { 328 => 0x1018 }, 'croporiginalheight' => { 90 => 0xb }, 'croporiginalwidth' => { 90 => 0xa }, 'cropoutputheight' => { 225 => 0xce }, 'cropoutputheightinches' => { 225 => 0x96 }, 'cropoutputpixels' => { 225 => 0xd6 }, 'cropoutputresolution' => { 225 => 0xb6 }, 'cropoutputscale' => { 225 => 0xbe }, 'cropoutputwidth' => { 225 => 0xc6 }, 'cropoutputwidthinches' => { 225 => 0x8e }, 'croppedareaimageheightpixels' => { 389 => 'CroppedAreaImageHeightPixels' }, 'croppedareaimagewidthpixels' => { 389 => 'CroppedAreaImageWidthPixels' }, 'croppedarealeftpixels' => { 389 => 'CroppedAreaLeftPixels' }, 'croppedareatoppixels' => { 389 => 'CroppedAreaTopPixels' }, 'croppedimageheight' => { 5 => 0x2, 328 => 0x1604 }, 'croppedimageleft' => { 5 => 0x3 }, 'croppedimagetop' => { 5 => 0x4 }, 'croppedimagewidth' => { 5 => 0x1, 328 => 0x1603 }, 'cropright' => { 110 => 0x8, 225 => 0x2e, 274 => 0x32, 314 => 0xdb, 400 => 'CropRight' }, 'croprightmargin' => { 45 => 0x1 }, 'croprotatedoriginalheight' => { 90 => 0x2 }, 'croprotatedoriginalwidth' => { 90 => 0x1 }, 'croprotation' => { 90 => 0x8, 110 => 0xb }, 'cropscaledresolution' => { 225 => 0x9e }, 'cropsourceresolution' => { 225 => 0xae }, 'croptop' => { 97 => 0x248, 110 => 0x7, 225 => 0x26, 254 => 0x613, 258 => 0x613, 274 => 0x2f, 314 => 0xda, 400 => 'CropTop' }, 'croptopmargin' => { 45 => 0x2 }, 'cropunit' => { 400 => 'CropUnit' }, 'cropunits' => { 400 => 'CropUnits' }, 'cropw' => { 393 => 'CropW' }, 'cropwidth' => { 90 => 0x5, 97 => 0x24a, 254 => 0x614, 258 => 0x614, 400 => 'CropWidth' }, 'cropx' => { 90 => 0x3, 393 => 'CropX' }, 'cropy' => { 90 => 0x4, 393 => 'CropY' }, 'crossprocess' => { 303 => 0x7b }, 'crossprocessparams' => { 303 => 0x235 }, 'cuisine' => { 417 => 'cuisine' }, 'currenticcprofile' => { 106 => 0xc691 }, 'currentpreprofilematrix' => { 106 => 0xc692 }, 'currentversion' => { 385 => 0xd000 }, 'curve0x' => { 393 => 'Curve0x' }, 'curve0y' => { 393 => 'Curve0y' }, 'curve1x' => { 393 => 'Curve1x' }, 'curve1y' => { 393 => 'Curve1y' }, 'curve2x' => { 393 => 'Curve2x' }, 'curve2y' => { 393 => 'Curve2y' }, 'curve3x' => { 393 => 'Curve3x' }, 'curve3y' => { 393 => 'Curve3y' }, 'curve4x' => { 393 => 'Curve4x' }, 'curve4y' => { 393 => 'Curve4y' }, 'curves' => { 230 => 0x76a43201 }, 'custom1' => { 413 => 'Custom1' }, 'custom10' => { 413 => 'Custom10' }, 'custom2' => { 413 => 'Custom2' }, 'custom3' => { 413 => 'Custom3' }, 'custom4' => { 413 => 'Custom4' }, 'custom5' => { 413 => 'Custom5' }, 'custom6' => { 413 => 'Custom6' }, 'custom7' => { 413 => 'Custom7' }, 'custom8' => { 413 => 'Custom8' }, 'custom9' => { 413 => 'Custom9' }, 'customcolortone' => { 98 => 0x4c }, 'customcontrast' => { 98 => 0x4e }, 'customcontrols' => { 73 => 0x70c }, 'customdefaultunsharpfineness' => { 98 => 0xbe }, 'customdefaultunsharpstrength' => { 98 => 0xbc }, 'customdefaultunsharpthreshold' => { 98 => 0xc0 }, 'customlinear' => { 98 => 0x4f }, 'customoutputhighlightpoint' => { 98 => 0x53 }, 'customoutputshadowpoint' => { 98 => 0x54 }, 'custompicturestyle' => { 92 => 0x10021 }, 'custompicturestyledata' => { 92 => 0xf0500 }, 'custompicturestylefilename' => { 55 => 0x4010 }, 'customrawhighlight' => { 98 => 0x7c }, 'customrawhighlightpoint' => { 98 => 0x51 }, 'customrawshadow' => { 98 => 0x85 }, 'customrawshadowpoint' => { 98 => 0x52 }, 'customrendered' => { 106 => 0xa401, 404 => 'CustomRendered' }, 'customsaturation' => { 98 => 0x4d, 250 => 0x503 }, 'customsettingsalldefault' => { 237 => '0.2', 243 => '0.2' }, 'customsettingsbank' => { 237 => '0.1', 238 => '0.1', 243 => '0.1', 247 => '0.2' }, 'customsharpness' => { 98 => 0x50 }, 'customunsharpmaskfineness' => { 98 => 0xb8 }, 'customunsharpmaskstrength' => { 98 => 0xb6 }, 'customunsharpmaskthreshold' => { 98 => 0xba }, 'customwb_rblevels' => { 361 => 0x1a }, 'customwb_rgblevels' => { 346 => 0x8, 347 => 0x19 }, 'customwbbluelevel' => { 161 => 0x36 }, 'customwberror' => { 161 => 0x37 }, 'customwbgreenlevel' => { 161 => 0x35 }, 'customwbredlevel' => { 161 => 0x34 }, 'customwbsetting' => { 161 => 0x26 }, 'd-lightinghq' => { 230 => 0x2175eb78 }, 'd-lightinghqcolorboost' => { 226 => 0x2 }, 'd-lightinghqhighlight' => { 226 => 0x1 }, 'd-lightinghqselected' => { 230 => 0x6a6e36b6 }, 'd-lightinghqshadow' => { 226 => 0x0 }, 'd-lightinghs' => { 230 => 0xce5554aa }, 'd-lightinghsadjustment' => { 227 => 0x0 }, 'd-lightinghscolorboost' => { 227 => 0x1 }, 'd-rangeoptimizerhighlight' => { 385 => 0x8024 }, 'd-rangeoptimizermode' => { 385 => 0x8022 }, 'd-rangeoptimizershadow' => { 385 => 0x802d }, 'd-rangeoptimizervalue' => { 385 => 0x8023 }, 'd810meteringmode' => { 218 => 0x175e }, 'datacompressionmethod' => { 116 => 0x6e }, 'dataimprint' => { 158 => 0x34 }, 'datascaling' => { 303 => 0x3d }, 'date' => { 303 => 0x6, 401 => 'date' }, 'dateacquired' => { 156 => 'DateAcquired' }, 'datecreated' => { 114 => 0x37, 412 => 'DateCreated' }, 'datedisplayformat' => { 222 => 0x3 }, 'dateidentified' => { 105 => [\'Identification','IdentificationDateIdentified'] }, 'dateimprint' => { 240 => '4.2' }, 'daterecieved' => { 415 => 'dateRecieved' }, 'datesent' => { 115 => 0x46 }, 'datestampmode' => { 55 => 0x1c }, 'datetime' => { 394 => 'datetime', 421 => 'DateTime' }, 'datetimedigitized' => { 404 => 'DateTimeDigitized' }, 'datetimeoriginal' => { 89 => 0x0, 106 => 0x9003, 134 => 0x14, 137 => 'OriginalDate', 324 => 0xb, 404 => 'DateTimeOriginal' }, 'datetimestamp' => { 122 => 0x64 }, 'datetimeutc' => { 250 => 0x908 }, 'daylightsavings' => { 68 => 0x3, 222 => 0x2 }, 'dccontinent' => { 105 => [\'dctermsLocation','dctermsLocationContinent'] }, 'dccoordinateprecision' => { 105 => [\'dctermsLocation','dctermsLocationCoordinatePrecision'] }, 'dccoordinateuncertaintyinmeters' => { 105 => [\'dctermsLocation','dctermsLocationCoordinateUncertaintyInMeters'] }, 'dccountry' => { 105 => [\'dctermsLocation','dctermsLocationCountry'] }, 'dccountrycode' => { 105 => [\'dctermsLocation','dctermsLocationCountryCode'] }, 'dccounty' => { 105 => [\'dctermsLocation','dctermsLocationCounty'] }, 'dcdecimallatitude' => { 105 => [\'dctermsLocation','dctermsLocationDecimalLatitude'] }, 'dcdecimallongitude' => { 105 => [\'dctermsLocation','dctermsLocationDecimalLongitude'] }, 'dcevent' => { 105 => 'Event' }, 'dcfootprintspatialfit' => { 105 => [\'dctermsLocation','dctermsLocationFootprintSpatialFit'] }, 'dcfootprintsrs' => { 105 => [\'dctermsLocation','dctermsLocationFootprintSRS'] }, 'dcfootprintwkt' => { 105 => [\'dctermsLocation','dctermsLocationFootprintWKT'] }, 'dcgeodeticdatum' => { 105 => [\'dctermsLocation','dctermsLocationGeodeticDatum'] }, 'dcgeoreferencedby' => { 105 => [\'dctermsLocation','dctermsLocationGeoreferencedBy'] }, 'dcgeoreferenceddate' => { 105 => [\'dctermsLocation','dctermsLocationGeoreferencedDate'] }, 'dcgeoreferenceprotocol' => { 105 => [\'dctermsLocation','dctermsLocationGeoreferenceProtocol'] }, 'dcgeoreferenceremarks' => { 105 => [\'dctermsLocation','dctermsLocationGeoreferenceRemarks'] }, 'dcgeoreferencesources' => { 105 => [\'dctermsLocation','dctermsLocationGeoreferenceSources'] }, 'dcgeoreferenceverificationstatus' => { 105 => [\'dctermsLocation','dctermsLocationGeoreferenceVerificationStatus'] }, 'dchighergeography' => { 105 => [\'dctermsLocation','dctermsLocationHigherGeography'] }, 'dchighergeographyid' => { 105 => [\'dctermsLocation','dctermsLocationHigherGeographyID'] }, 'dcisland' => { 105 => [\'dctermsLocation','dctermsLocationIsland'] }, 'dcislandgroup' => { 105 => [\'dctermsLocation','dctermsLocationIslandGroup'] }, 'dclocality' => { 105 => [\'dctermsLocation','dctermsLocationLocality'] }, 'dclocationaccordingto' => { 105 => [\'dctermsLocation','dctermsLocationLocationAccordingTo'] }, 'dclocationid' => { 105 => [\'dctermsLocation','dctermsLocationLocationID'] }, 'dclocationremarks' => { 105 => [\'dctermsLocation','dctermsLocationLocationRemarks'] }, 'dcmaximumdepthinmeters' => { 105 => [\'dctermsLocation','dctermsLocationMaximumDepthInMeters'] }, 'dcmaximumdistanceabovesurfaceinmeters' => { 105 => [\'dctermsLocation','dctermsLocationMaximumDistanceAboveSurfaceInMeters'] }, 'dcmaximumelevationinmeters' => { 105 => [\'dctermsLocation','dctermsLocationMaximumElevationInMeters'] }, 'dcminimumdepthinmeters' => { 105 => [\'dctermsLocation','dctermsLocationMinimumDepthInMeters'] }, 'dcminimumdistanceabovesurfaceinmeters' => { 105 => [\'dctermsLocation','dctermsLocationMinimumDistanceAboveSurfaceInMeters'] }, 'dcminimumelevationinmeters' => { 105 => [\'dctermsLocation','dctermsLocationMinimumElevationInMeters'] }, 'dcmunicipality' => { 105 => [\'dctermsLocation','dctermsLocationMunicipality'] }, 'dcpointradiusspatialfit' => { 105 => [\'dctermsLocation','dctermsLocationPointRadiusSpatialFit'] }, 'dcstateprovince' => { 105 => [\'dctermsLocation','dctermsLocationStateProvince'] }, 'dctermslocation' => { 105 => 'dctermsLocation' }, 'dcverbatimcoordinates' => { 105 => [\'dctermsLocation','dctermsLocationVerbatimCoordinates'] }, 'dcverbatimcoordinatesystem' => { 105 => [\'dctermsLocation','dctermsLocationVerbatimCoordinateSystem'] }, 'dcverbatimdepth' => { 105 => [\'dctermsLocation','dctermsLocationVerbatimDepth'] }, 'dcverbatimelevation' => { 105 => [\'dctermsLocation','dctermsLocationVerbatimElevation'] }, 'dcverbatimlatitude' => { 105 => [\'dctermsLocation','dctermsLocationVerbatimLatitude'] }, 'dcverbatimlocality' => { 105 => [\'dctermsLocation','dctermsLocationVerbatimLocality'] }, 'dcverbatimlongitude' => { 105 => [\'dctermsLocation','dctermsLocationVerbatimLongitude'] }, 'dcverbatimsrs' => { 105 => [\'dctermsLocation','dctermsLocationVerbatimSRS'] }, 'dcwaterbody' => { 105 => [\'dctermsLocation','dctermsLocationWaterBody'] }, 'declination' => { 145 => 'Declination' }, 'decposition' => { 158 => 0x32 }, 'defaultblackrender' => { 106 => 0xc7a6 }, 'defaultcroporigin' => { 106 => 0xc61f }, 'defaultcropsize' => { 106 => 0xc620 }, 'defaulteraseoption' => { 73 => 0x813 }, 'defaultscale' => { 106 => 0xc61e }, 'defaultusercrop' => { 106 => 0xc7b5 }, 'defringe' => { 400 => 'Defringe' }, 'defringegreenamount' => { 400 => 'DefringeGreenAmount' }, 'defringegreenhuehi' => { 400 => 'DefringeGreenHueHi' }, 'defringegreenhuelo' => { 400 => 'DefringeGreenHueLo' }, 'defringepurpleamount' => { 400 => 'DefringePurpleAmount' }, 'defringepurplehuehi' => { 400 => 'DefringePurpleHueHi' }, 'defringepurplehuelo' => { 400 => 'DefringePurpleHueLo' }, 'deletedimagecount' => { 194 => 0xa6, 201 => 0x6e }, 'deprecatedon' => { 397 => 'deprecatedOn' }, 'derivedfrom' => { 426 => 'DerivedFrom' }, 'derivedfromalternatepaths' => { 426 => [\'DerivedFrom','DerivedFromAlternatePaths'] }, 'derivedfromdocumentid' => { 426 => [\'DerivedFrom','DerivedFromDocumentID'] }, 'derivedfromfilepath' => { 426 => [\'DerivedFrom','DerivedFromFilePath'] }, 'derivedfromfrompart' => { 426 => [\'DerivedFrom','DerivedFromFromPart'] }, 'derivedfrominstanceid' => { 426 => [\'DerivedFrom','DerivedFromInstanceID'] }, 'derivedfromlastmodifydate' => { 426 => [\'DerivedFrom','DerivedFromLastModifyDate'] }, 'derivedfrommanager' => { 426 => [\'DerivedFrom','DerivedFromManager'] }, 'derivedfrommanagervariant' => { 426 => [\'DerivedFrom','DerivedFromManagerVariant'] }, 'derivedfrommanageto' => { 426 => [\'DerivedFrom','DerivedFromManageTo'] }, 'derivedfrommanageui' => { 426 => [\'DerivedFrom','DerivedFromManageUI'] }, 'derivedfrommaskmarkers' => { 426 => [\'DerivedFrom','DerivedFromMaskMarkers'] }, 'derivedfromoriginaldocumentid' => { 426 => [\'DerivedFrom','DerivedFromOriginalDocumentID'] }, 'derivedfrompartmapping' => { 426 => [\'DerivedFrom','DerivedFromPartMapping'] }, 'derivedfromrenditionclass' => { 426 => [\'DerivedFrom','DerivedFromRenditionClass'] }, 'derivedfromrenditionparams' => { 426 => [\'DerivedFrom','DerivedFromRenditionParams'] }, 'derivedfromtopart' => { 426 => [\'DerivedFrom','DerivedFromToPart'] }, 'derivedfromversionid' => { 426 => [\'DerivedFrom','DerivedFromVersionID'] }, 'description' => { 262 => 'Description', 401 => 'description', 423 => 'Description' }, 'destination' => { 115 => 0x5 }, 'destinationcity' => { 303 => 0x24, 309 => 0x3 }, 'destinationcitycode' => { 310 => 0x1001 }, 'destinationdst' => { 303 => 0x26, 309 => '0.3' }, 'developmentdynamicrange' => { 111 => 0x1403 }, 'device' => { 415 => 'device' }, 'devicesettingdescription' => { 404 => 'DeviceSettingDescription' }, 'devicesettingdescriptioncolumns' => { 404 => [\'DeviceSettingDescription','DeviceSettingDescriptionColumns'] }, 'devicesettingdescriptionrows' => { 404 => [\'DeviceSettingDescription','DeviceSettingDescriptionRows'] }, 'devicesettingdescriptionsettings' => { 404 => [\'DeviceSettingDescription','DeviceSettingDescriptionSettings'] }, 'devicetype' => { 334 => 0x2 }, 'dialdirectiontvav' => { 73 => 0x706 }, 'dietaryneeds' => { 417 => 'dietaryNeeds' }, 'diffractioncorrection' => { 293 => 0x3 }, 'digitalcreationdate' => { 114 => 0x3e }, 'digitalcreationtime' => { 114 => 0x3f }, 'digitaldeehighlightadj' => { 200 => 0x202 }, 'digitaldeeshadowadj' => { 200 => 0x200 }, 'digitaldeethreshold' => { 200 => 0x201 }, 'digitalfilter' => { 337 => 0x59 }, 'digitalfilter01' => { 290 => 0x5 }, 'digitalfilter02' => { 290 => 0x16 }, 'digitalfilter03' => { 290 => 0x27 }, 'digitalfilter04' => { 290 => 0x38 }, 'digitalfilter05' => { 290 => 0x49 }, 'digitalfilter06' => { 290 => 0x5a }, 'digitalfilter07' => { 290 => 0x6b }, 'digitalfilter08' => { 290 => 0x7c }, 'digitalfilter09' => { 290 => 0x8d }, 'digitalfilter10' => { 290 => 0x9e }, 'digitalfilter11' => { 290 => 0xaf }, 'digitalfilter12' => { 290 => 0xc0 }, 'digitalfilter13' => { 290 => 0xd1 }, 'digitalfilter14' => { 290 => 0xe2 }, 'digitalfilter15' => { 290 => 0xf3 }, 'digitalfilter16' => { 290 => 0x104 }, 'digitalfilter17' => { 290 => 0x115 }, 'digitalfilter18' => { 290 => 0x126 }, 'digitalfilter19' => { 290 => 0x137 }, 'digitalfilter20' => { 290 => 0x148 }, 'digitalgain' => { 65 => 0xb }, 'digitalgem' => { 186 => 0x0 }, 'digitalice' => { 200 => 0x100 }, 'digitalimageguid' => { 410 => 'DigImageGUID' }, 'digitalroc' => { 198 => 0x0 }, 'digitalsourcefiletype' => { 410 => 'DigitalSourcefileType' }, 'digitalsourcetype' => { 410 => 'DigitalSourceType' }, 'digitalzoom' => { 31 => 0xc, 101 => 0xa, 122 => 0x68, 136 => 'DigitalZoom', 158 => 0xc, 194 => 0x86, 220 => 0xa, 255 => 0x204, 303 => 0x1e, 310 => 0xa, 336 => 0x204, 373 => 0x12, 374 => 0x12 }, 'digitalzoomon' => { 336 => 0x21b }, 'digitalzoomratio' => { 106 => 0xa404, 366 => 0x200, 368 => 0x21c, 404 => 'DigitalZoomRatio' }, 'director' => { 425 => 'director' }, 'directorphotography' => { 425 => 'directorPhotography' }, 'directory' => { 107 => 'Directory' }, 'directoryindex' => { 6 => 0x137, 8 => 0x2dc, 10 => 0x17e, 12 => 0x238, 13 => 0x13f, 14 => 0x133, 15 => 0x1df, 16 => 0x1a7, 17 => 0x1f0, 18 => 0xcc, 19 => 0x1c7, 20 => 0x298, 21 => 0x1e7, 22 => 0x1e5, 23 => [0x27c,0x280], 24 => 0x2b6, 25 => 0x2bf, 26 => 0x1f7 }, 'directoryindex2' => { 20 => 0x29c }, 'directorynumber' => { 182 => 0x3 }, 'disclaimer' => { 262 => 'Disclaimer' }, 'discnumber' => { 425 => 'discNumber' }, 'dishtype' => { 417 => 'dishType' }, 'displayallafpoints' => { 73 => 0x514 }, 'displayaperture' => { 31 => 0x23 }, 'displayedunitsx' => { 318 => 0x2 }, 'displayedunitsy' => { 318 => 0x6 }, 'displayname' => { 414 => 'displayName' }, 'distance1' => { 122 => 0x28 }, 'distance2' => { 122 => 0x2c }, 'distance3' => { 122 => 0x30 }, 'distance4' => { 122 => 0x34 }, 'distortion' => { 334 => 0xa050 }, 'distortioncontrol' => { 201 => 0x10 }, 'distortioncorrection' => { 92 => 0x20705, 98 => 0x67, 250 => 0x50b, 273 => '7.1', 293 => 0x0, 380 => 0x601, 381 => 0x5b }, 'distortioncorrection2' => { 254 => 0x1011 }, 'distortioncorrectionalreadyapplied' => { 396 => 'DistortionCorrectionAlreadyApplied' }, 'distortioncorrectionon' => { 92 => '0x20705.0', 98 => 0x63 }, 'distortioncorrectionsetting' => { 357 => 0x2013 }, 'distortioneffect' => { 92 => 0x20709 }, 'distortionn' => { 273 => 0xc }, 'distortionparam02' => { 273 => 0x2 }, 'distortionparam04' => { 273 => 0x4 }, 'distortionparam08' => { 273 => 0x8 }, 'distortionparam09' => { 273 => 0x9 }, 'distortionparam11' => { 273 => 0xb }, 'distortionscale' => { 273 => 0x5 }, 'distributor' => { 415 => 'distributor' }, 'distributorproductid' => { 414 => 'distributorProductID' }, 'dloon' => { 92 => '0x20706.0', 98 => 0xdc }, 'dlosetting' => { 92 => 0x20706, 98 => 0xdd }, 'dlosettingapplied' => { 91 => 0x4 }, 'dloshootingdistance' => { 98 => 0xde }, 'dloversion' => { 91 => 0x5 }, 'dmcomment' => { 425 => 'comment' }, 'dngadobedata' => { 106 => 0xc634 }, 'dngbackwardversion' => { 106 => 0xc613 }, 'dnglensinfo' => { 106 => 0xc630 }, 'dngprivatedata' => { 106 => 0xc634 }, 'dngversion' => { 106 => 0xc612 }, 'document' => { 262 => 'Document' }, 'documentancestors' => { 412 => 'DocumentAncestors' }, 'documenthistory' => { 114 => 0xe7 }, 'documentid' => { 426 => 'DocumentID' }, 'documentname' => { 106 => 0x10d }, 'documentnotes' => { 114 => 0xe6 }, 'doi' => { 415 => 'doi' }, 'dotrange' => { 106 => 0x150 }, 'dpp' => { 394 => 'dpp' }, 'dr4cameramodel' => { 93 => 0x3 }, 'drivemode' => { 102 => 0x3103, 158 => 0x6, 161 => 0x1e, 164 => 0xe, 250 => 0x600, 303 => 0x34, 328 => 0x1002, 337 => 0x3, 345 => 0x4, 346 => 0x7e, 347 => 0x34 }, 'drivemode2' => { 161 => 0xa, 284 => 0x7, 356 => 0xe, 361 => 0x1 }, 'drivemodesetting' => { 347 => 0x4 }, 'dspfirmwareversion' => { 303 => 0x27 }, 'duration' => { 58 => 0x6a, 135 => 'Duration', 149 => 'Duration', 417 => 'duration', 425 => 'duration' }, 'durationscale' => { 425 => [\'duration','durationScale'] }, 'durationvalue' => { 425 => [\'duration','durationValue'] }, 'dustremovaldata' => { 55 => 0x97 }, 'dynamicafarea' => { 237 => '1.4', 243 => '1.4' }, 'dynamicareaafdisplay' => { 238 => '46.1', 247 => '47.1' }, 'dynamicrange' => { 111 => 0x1400 }, 'dynamicrangeexpansion' => { 303 => 0x69, 328 => 0x100e }, 'dynamicrangemax' => { 97 => 0x7c }, 'dynamicrangemin' => { 97 => 0x7a }, 'dynamicrangeoptimizer' => { 161 => 0x15, 357 => [0xb025,0xb04f], 364 => 0x1144, 365 => [0x1144,0x324], 366 => [0x1120,0x300], 367 => [0x119c,0x37c], 368 => [0x1178,0x328], 369 => [0x1030,0x50], 370 => [0x228,0x50], 371 => [0x228,0x50] }, 'dynamicrangeoptimizerbracket' => { 356 => 0x2e }, 'dynamicrangeoptimizerlevel' => { 345 => 0x19, 346 => 0x17, 347 => 0xd, 356 => 0x79, 361 => 0x5 }, 'dynamicrangeoptimizermode' => { 164 => 0x15, 345 => 0x18, 346 => 0x16, 356 => [0x77,0x15] }, 'dynamicrangeoptimizersetting' => { 161 => 0x27, 347 => 0xc, 361 => 0x4 }, 'dynamicrangesetting' => { 111 => 0x1402 }, 'e-dialinprogram' => { 284 => '1.3' }, 'earliestageorloweststage' => { 105 => [\'GeologicalContext','GeologicalContextEarliestAgeOrLowestStage'] }, 'earliesteonorlowesteonothem' => { 105 => [\'GeologicalContext','GeologicalContextEarliestEonOrLowestEonothem'] }, 'earliestepochorlowestseries' => { 105 => [\'GeologicalContext','GeologicalContextEarliestEpochOrLowestSeries'] }, 'earliesteraorlowesterathem' => { 105 => [\'GeologicalContext','GeologicalContextEarliestEraOrLowestErathem'] }, 'earliestperiodorlowestsystem' => { 105 => [\'GeologicalContext','GeologicalContextEarliestPeriodOrLowestSystem'] }, 'easyexposurecomp' => { 248 => '6.1' }, 'easyexposurecompensation' => { 237 => '6.4', 238 => '6.5', 243 => '4.4', 244 => '5.2', 247 => '6.3' }, 'easymode' => { 31 => 0xb }, 'edgenoisereduction' => { 231 => 0x4, 385 => 0x8028 }, 'edition' => { 415 => 'edition' }, 'editorialupdate' => { 114 => 0x8 }, 'editstatus' => { 114 => 0x7, 315 => 'EditStatus' }, 'editversionname' => { 230 => 0x3d136244 }, 'effectivelv' => { 303 => 0x2d }, 'effectivemaxaperture' => { 190 => 0x12, 191 => 0x13 }, 'eissn' => { 415 => 'eIssn' }, 'electronicfront-curtainshutter' => { 247 => '5.3' }, 'elevation' => { 145 => 'Elevation' }, 'email' => { 137 => 'EMail' }, 'embargodate' => { 418 => 'embargoDate' }, 'embdencrightsexpr' => { 410 => 'EmbdEncRightsExpr' }, 'embeddedencodedrightsexpr' => { 410 => [\'EmbdEncRightsExpr','EmbdEncRightsExprEncRightsExpr'] }, 'embeddedencodedrightsexprlangid' => { 410 => [\'EmbdEncRightsExpr','EmbdEncRightsExprRightsExprLangId'] }, 'embeddedencodedrightsexprtype' => { 410 => [\'EmbdEncRightsExpr','EmbdEncRightsExprRightsExprEncType'] }, 'embeddedxmpdigest' => { 412 => 'EmbeddedXMPDigest' }, 'emissivity' => { 108 => 0x3 }, 'encryptionkey' => { 334 => 0xa020 }, 'endingpage' => { 415 => 'endingPage' }, 'enduser' => { 413 => 'EndUser' }, 'enduserid' => { 413 => [\'EndUser','EndUserEndUserID'] }, 'endusername' => { 413 => [\'EndUser','EndUserEndUserName'] }, 'engineer' => { 425 => 'engineer' }, 'enhancedarktones' => { 223 => 0x8 }, 'enhancement' => { 101 => 0x16, 102 => 0x3016 }, 'enhancer' => { 254 => 0x300 }, 'enhancervalues' => { 254 => 0x301 }, 'envelopenumber' => { 115 => 0x28 }, 'envelopepriority' => { 115 => 0x3c }, 'enveloperecordversion' => { 115 => 0x0 }, 'epsonimageheight' => { 255 => 0x20c }, 'epsonimagewidth' => { 255 => 0x20b }, 'epsonsoftware' => { 255 => 0x20d }, 'equipmentinstitution' => { 387 => 'EquipmentInstitution' }, 'equipmentmanufacturer' => { 387 => 'EquipmentManufacturer' }, 'equipmentversion' => { 251 => 0x0 }, 'ettlii' => { 73 => 0x304, 74 => 0xd, 75 => 0xe, 76 => 0x7, 77 => 0x7, 78 => 0xe }, 'event' => { 388 => 'Event', 392 => 'Event', 410 => 'Event', 415 => 'event' }, 'eventalias' => { 414 => 'eventAlias' }, 'eventday' => { 105 => [\'Event','EventDay'] }, 'eventearliestdate' => { 105 => [\'Event','EventEarliestDate'] }, 'eventend' => { 414 => 'eventEnd' }, 'eventenddayofyear' => { 105 => [\'Event','EventEndDayOfYear'] }, 'eventfieldnotes' => { 105 => [\'Event','EventFieldNotes'] }, 'eventfieldnumber' => { 105 => [\'Event','EventFieldNumber'] }, 'eventhabitat' => { 105 => [\'Event','EventHabitat'] }, 'eventid' => { 105 => [\'Event','EventEventID'] }, 'eventlatestdate' => { 105 => [\'Event','EventLatestDate'] }, 'eventmonth' => { 105 => [\'Event','EventMonth'] }, 'eventnumber' => { 324 => 0x9 }, 'eventremarks' => { 105 => [\'Event','EventEventRemarks'] }, 'eventsamplingeffort' => { 105 => [\'Event','EventSamplingEffort'] }, 'eventsamplingprotocol' => { 105 => [\'Event','EventSamplingProtocol'] }, 'eventstart' => { 414 => 'eventStart' }, 'eventstartdayofyear' => { 105 => [\'Event','EventStartDayOfYear'] }, 'eventsubtype' => { 414 => 'eventSubtype' }, 'eventtime' => { 105 => [\'Event','EventEventTime'] }, 'eventtype' => { 414 => 'eventType' }, 'eventverbatimeventdate' => { 105 => [\'Event','EventVerbatimEventDate'] }, 'eventyear' => { 105 => [\'Event','EventYear'] }, 'evsteps' => { 284 => '1.2', 286 => 0x0 }, 'evstepsize' => { 240 => '5.1', 241 => '6.1', 242 => '6.1', 245 => '0.7' }, 'exclusivityenddate' => { 418 => 'exclusivityEndDate' }, 'excursiontolerance' => { 116 => 0x82 }, 'exif' => { 107 => 'EXIF' }, 'exifbyteorder' => { 107 => 'ExifByteOrder' }, 'exifcamerainfo' => { 114 => 0xe8 }, 'exifimageheight' => { 106 => 0xa003, 404 => 'PixelYDimension' }, 'exifimagewidth' => { 106 => 0xa002, 404 => 'PixelXDimension' }, 'exifunicodebyteorder' => { 107 => 'ExifUnicodeByteOrder' }, 'exifversion' => { 106 => 0x9000, 404 => 'ExifVersion' }, 'exitpupilposition' => { 190 => 0x4, 191 => 0x4 }, 'expirationdate' => { 114 => 0x25, 418 => 'expirationDate' }, 'expirationtime' => { 114 => 0x26 }, 'exposure' => { 106 => 0xfe51, 400 => 'Exposure' }, 'exposure2012' => { 400 => 'Exposure2012' }, 'exposureadj' => { 228 => 0x0 }, 'exposureadj2' => { 228 => 0x12 }, 'exposureadjust' => { 337 => 0xc }, 'exposurebracketingindicatorlast' => { 161 => 0x52 }, 'exposurebracketshotnumber' => { 164 => 0x2d, 356 => 0x2f }, 'exposurebracketstepsize' => { 284 => 0x8 }, 'exposurebracketvalue' => { 194 => 0x19 }, 'exposurecompensation' => { 67 => 0x6, 82 => 0x0, 106 => 0x9204, 122 => 0x24, 136 => 'ExposureComp', 154 => 'ExposureCompensation', 158 => 0xd, 159 => 0x53, 160 => 0x1e, 164 => 0x49c0, 255 => 0x1006, 303 => 0x16, 312 => 0x402, 334 => 0xa013, 337 => [0xc,0x35,0x4d], 364 => 0x114c, 365 => 0x114c, 366 => 0x1128, 368 => 0x1180, 369 => 0x1038, 370 => 0x230, 371 => 0x230, 404 => 'ExposureBiasValue' }, 'exposurecompensation2' => { 361 => [0x24,0x26,0x2a] }, 'exposurecompensationmode' => { 161 => 0x47, 164 => 0x2a }, 'exposurecompensationset' => { 345 => 0x3, 346 => 0x3, 347 => 0x3, 361 => 0x1e }, 'exposurecompensationsetting' => { 161 => 0x1 }, 'exposurecompstepsize' => { 237 => '6.3', 238 => '7.3', 243 => '4.3', 247 => '7.3' }, 'exposurecontrolstep' => { 244 => '6.1' }, 'exposurecontrolstepsize' => { 237 => '6.2', 238 => '7.1', 243 => '4.2', 247 => '7.1', 248 => '7.1' }, 'exposurecount' => { 111 => 0x1032 }, 'exposuredelaymode' => { 237 => '10.1', 238 => '11.1', 240 => '9.1', 241 => '10.1', 242 => '10.1', 243 => '10.4', 244 => '10.1', 245 => '6.4', 247 => '11.1', 248 => '11.2' }, 'exposuredifference' => { 194 => 0xe }, 'exposureindex' => { 106 => 0xa215, 404 => 'ExposureIndex' }, 'exposureindicator' => { 161 => 0x50 }, 'exposurelevelincrements' => { 71 => 0x6, 72 => 0x6, 73 => 0x101, 74 => 0x5, 75 => 0x6, 76 => 0x5, 77 => 0x5, 78 => 0x6, 79 => 0x4, 345 => 0x58, 346 => 0x58 }, 'exposurelockused' => { 389 => 'ExposureLockUsed' }, 'exposuremode' => { 106 => 0xa402, 136 => 'ExposureMode', 158 => 0x1, 159 => 0xa, 160 => 0x0, 161 => 0x0, 164 => 0x34, 250 => 0x200, 268 => 0x40d, 337 => 0x8, 357 => 0xb041, 404 => 'ExposureMode' }, 'exposuremodeinmanual' => { 73 => 0x10b }, 'exposureprogram' => { 106 => 0x8822, 328 => 0x1001, 338 => [0x17e,0x43], 345 => 0x3c, 346 => 0x3c, 347 => 0x5, 351 => 0x14, 356 => 0x3f, 361 => 0x2, 364 => 0x1175, 365 => 0x1179, 366 => 0x1155, 367 => 0x11d1, 368 => 0x11ad, 369 => 0x1065, 370 => 0x25d, 371 => 0x25d, 381 => 0x48, 404 => 'ExposureProgram' }, 'exposureshift' => { 250 => 0x203 }, 'exposuretime' => { 6 => 0x4, 7 => 0x4, 8 => 0x4, 9 => 0x4, 10 => 0x4, 11 => 0x4, 12 => 0x4, 13 => 0x4, 14 => 0x4, 15 => 0x4, 16 => 0x4, 17 => 0x4, 18 => 0x4, 19 => 0x4, 20 => 0x4, 21 => 0x4, 22 => 0x4, 23 => 0x4, 24 => 0x4, 25 => 0x4, 26 => 0x4, 27 => 0x6, 28 => 0x7, 67 => 0x16, 106 => 0x829a, 119 => 0xfd05, 122 => 0x20, 124 => 0xfa24, 126 => 0xf104, 129 => 0x12, 131 => 0x38, 134 => 0x10, 136 => 'ExposureTime', 158 => 0x9, 159 => 0x35, 160 => 0x48, 161 => 0x8, 164 => 0x49b8, 303 => 0x12, 334 => 0xa018, 337 => [0x32,0x4a], 345 => 0x0, 346 => 0x0, 361 => [0x21,0x23,0x27], 381 => 0x10, 404 => 'ExposureTime' }, 'exposuretime2' => { 337 => [0x33,0x4b] }, 'exposuretuning' => { 194 => 0x1c }, 'exposurevalue' => { 120 => 0x3 }, 'exposurewarning' => { 111 => 0x1302 }, 'exrauto' => { 111 => 0x1033 }, 'exrmode' => { 111 => 0x1034 }, 'extendedwbdetect' => { 250 => 0x902 }, 'extender' => { 251 => 0x301 }, 'extenderfirmwareversion' => { 251 => 0x304 }, 'extendermagnification' => { 138 => 'Magnification' }, 'extendermake' => { 138 => 'Make' }, 'extendermodel' => { 138 => 'Model', 251 => 0x303 }, 'extenderserialnumber' => { 138 => 'SerialNumber', 251 => 0x302 }, 'extenderstatus' => { 301 => 0x3 }, 'externalflash' => { 253 => 0x1201 }, 'externalflashae1' => { 255 => 0x101f }, 'externalflashae1_0' => { 255 => 0x101b }, 'externalflashae2' => { 255 => 0x1020 }, 'externalflashae2_0' => { 255 => 0x101c }, 'externalflashbounce' => { 253 => 0x1204, 255 => 0x1026, 291 => 0x1a }, 'externalflashcompensation' => { 185 => 0x1b }, 'externalflashexposurecomp' => { 194 => 0x17, 291 => 0x19 }, 'externalflashfirmware' => { 183 => 0x6, 184 => 0x6, 185 => 0x6 }, 'externalflashflags' => { 183 => 0x8, 184 => 0x8, 185 => 0x8 }, 'externalflashguidenumber' => { 253 => 0x1203, 291 => '24.1' }, 'externalflashgvalue' => { 255 => 0x1025 }, 'externalflashmode' => { 255 => 0x1028, 291 => 0x2 }, 'externalflashzoom' => { 253 => 0x1205, 255 => 0x1027 }, 'externalsensorbrightnessvalue' => { 266 => 0x311, 272 => 0x3408 }, 'extrainfoversion' => { 349 => 0x1a }, 'eyestartaf' => { 161 => 0x40 }, 'face10position' => { 99 => 0x3f4, 100 => 0x1ec, 181 => 0x28, 288 => 0x12 }, 'face10size' => { 289 => 0x12 }, 'face11position' => { 181 => 0x2c, 288 => 0x14 }, 'face11size' => { 289 => 0x14 }, 'face12position' => { 181 => 0x30, 288 => 0x16 }, 'face12size' => { 289 => 0x16 }, 'face13position' => { 288 => 0x18 }, 'face13size' => { 289 => 0x18 }, 'face14position' => { 288 => 0x1a }, 'face14size' => { 289 => 0x1a }, 'face15position' => { 288 => 0x1c }, 'face15size' => { 289 => 0x1c }, 'face16position' => { 288 => 0x1e }, 'face16size' => { 289 => 0x1e }, 'face17position' => { 288 => 0x20 }, 'face17size' => { 289 => 0x20 }, 'face18position' => { 288 => 0x22 }, 'face18size' => { 289 => 0x22 }, 'face19position' => { 288 => 0x24 }, 'face19size' => { 289 => 0x24 }, 'face1position' => { 46 => 0x8, 99 => 0xd, 100 => 0x18, 181 => 0x4, 264 => 0x1, 288 => 0x0, 325 => 0xbc, 352 => 0x1, 353 => 0x0, 354 => 0x0, 355 => 0x5b }, 'face1size' => { 289 => 0x0 }, 'face20position' => { 288 => 0x26 }, 'face20size' => { 289 => 0x26 }, 'face21position' => { 288 => 0x28 }, 'face21size' => { 289 => 0x28 }, 'face22position' => { 288 => 0x2a }, 'face22size' => { 289 => 0x2a }, 'face23position' => { 288 => 0x2c }, 'face23size' => { 289 => 0x2c }, 'face24position' => { 288 => 0x2e }, 'face24size' => { 289 => 0x2e }, 'face25position' => { 288 => 0x30 }, 'face25size' => { 289 => 0x30 }, 'face26position' => { 288 => 0x32 }, 'face26size' => { 289 => 0x32 }, 'face27position' => { 288 => 0x34 }, 'face27size' => { 289 => 0x34 }, 'face28position' => { 288 => 0x36 }, 'face28size' => { 289 => 0x36 }, 'face29position' => { 288 => 0x38 }, 'face29size' => { 289 => 0x38 }, 'face2position' => { 46 => 0xa, 99 => 0x7c, 100 => 0x4c, 181 => 0x8, 264 => 0x5, 288 => 0x2, 325 => 0xc8, 352 => 0x6, 353 => 0x20, 354 => 0x25, 355 => 0x65 }, 'face2size' => { 289 => 0x2 }, 'face30position' => { 288 => 0x3a }, 'face30size' => { 289 => 0x3a }, 'face31position' => { 288 => 0x3c }, 'face31size' => { 289 => 0x3c }, 'face32position' => { 288 => 0x3e }, 'face32size' => { 289 => 0x3e }, 'face3position' => { 46 => 0xc, 99 => 0xeb, 100 => 0x80, 181 => 0xc, 264 => 0x9, 288 => 0x4, 325 => 0xd4, 352 => 0xb, 353 => 0x40, 354 => 0x4a, 355 => 0x6f }, 'face3size' => { 289 => 0x4 }, 'face4position' => { 46 => 0xe, 99 => 0x15a, 100 => 0xb4, 181 => 0x10, 264 => 0xd, 288 => 0x6, 325 => 0xe0, 352 => 0x10, 353 => 0x60, 354 => 0x6f, 355 => 0x79 }, 'face4size' => { 289 => 0x6 }, 'face5position' => { 46 => 0x10, 99 => 0x1c9, 100 => 0xe8, 181 => 0x14, 264 => 0x11, 288 => 0x8, 325 => 0xec, 352 => 0x15, 353 => 0x80, 354 => 0x94 }, 'face5size' => { 289 => 0x8 }, 'face6position' => { 46 => 0x12, 99 => 0x238, 100 => 0x11c, 181 => 0x18, 288 => 0xa, 325 => 0xf8, 352 => 0x1a, 353 => 0xa0, 354 => 0xb9 }, 'face6size' => { 289 => 0xa }, 'face7position' => { 46 => 0x14, 99 => 0x2a7, 100 => 0x150, 181 => 0x1c, 288 => 0xc, 325 => 0x104, 352 => 0x1f, 353 => 0xc0, 354 => 0xde }, 'face7size' => { 289 => 0xc }, 'face8position' => { 46 => 0x16, 99 => 0x316, 100 => 0x184, 181 => 0x20, 288 => 0xe, 325 => 0x110, 352 => 0x24, 353 => 0xe0, 354 => 0x103 }, 'face8size' => { 289 => 0xe }, 'face9position' => { 46 => 0x18, 99 => 0x385, 100 => 0x1b8, 181 => 0x24, 288 => 0x10 }, 'face9size' => { 289 => 0x10 }, 'facedetect' => { 303 => 0x76, 334 => 0x100 }, 'facedetectarea' => { 254 => 0x1201 }, 'facedetectframecrop' => { 254 => 0x1207 }, 'facedetectframesize' => { 46 => 0x3, 99 => 0x1, 100 => 0x4, 181 => 0x1, 254 => 0x1203, 303 => 0x77, 325 => 0xb6 }, 'facedetection' => { 347 => 0x30, 361 => 0x19 }, 'faceid' => { 395 => 'FaceID' }, 'faceinfounknown' => { 102 => 0x2089 }, 'facename' => { 334 => 0x123 }, 'faceorientation' => { 100 => 0x8 }, 'faceposition' => { 287 => 0x2, 335 => 0x4 }, 'facepositions' => { 111 => 0x4103 }, 'facerecognition' => { 334 => 0x120 }, 'facesdetected' => { 46 => 0x2, 47 => 0x2, 48 => 0x3, 99 => 0x0, 100 => 0x2, 102 => 0x211c, 111 => 0x4100, 181 => 0x3, 254 => 0x1200, 270 => 0x3f, 287 => 0x0, 325 => 0xb5, 335 => 0x0, 352 => 0x0, 355 => 0x3, 363 => 0x30 }, 'facesrecognized' => { 265 => 0x0 }, 'facewidth' => { 47 => 0x1 }, 'faithfuloutputhighlightpoint' => { 98 => 0x38 }, 'faithfuloutputshadowpoint' => { 98 => 0x39 }, 'faithfulrawcolortone' => { 98 => 0x31 }, 'faithfulrawcontrast' => { 98 => 0x33 }, 'faithfulrawhighlight' => { 98 => 0x79 }, 'faithfulrawhighlightpoint' => { 98 => 0x36 }, 'faithfulrawlinear' => { 98 => 0x34 }, 'faithfulrawsaturation' => { 98 => 0x32 }, 'faithfulrawshadow' => { 98 => 0x82 }, 'faithfulrawshadowpoint' => { 98 => 0x37 }, 'faithfulrawsharpness' => { 98 => 0x35 }, 'faithfulunsharpmaskfineness' => { 98 => 0xac }, 'faithfulunsharpmaskstrength' => { 98 => 0xaa }, 'faithfulunsharpmaskthreshold' => { 98 => 0xae }, 'femicroadjustment' => { 73 => 0x111 }, 'ffid' => { 402 => 'ffid' }, 'field' => { 414 => 'field' }, 'fieldcount' => { 255 => 0x103f }, 'filecreatedate' => { 107 => 'FileCreateDate' }, 'filedatarate' => { 425 => 'fileDataRate' }, 'fileformat' => { 84 => 0x0, 115 => 0x14, 337 => [0x22,0x26], 357 => 0xb000 }, 'fileindex' => { 6 => 0x143, 8 => 0x2d0, 10 => 0x172, 12 => 0x22c, 13 => 0x133, 14 => 0x13f, 15 => 0x1d3, 16 => 0x19b, 17 => 0x1e4, 18 => 0xd0, 19 => 0x1bb, 20 => 0x28c, 21 => 0x1db, 22 => 0x1d9, 23 => [0x270,0x274], 24 => 0x2aa, 25 => 0x2b3, 26 => 0x1eb, 271 => 0x0 }, 'fileindex2' => { 20 => 0x290 }, 'filemodifydate' => { 107 => 'FileModifyDate' }, 'filename' => { 107 => 'FileName' }, 'filenameasdelivered' => { 413 => 'FileNameAsDelivered' }, 'filenumber' => { 49 => 0x1, 55 => 0x8, 86 => 0x1817, 103 => 'FileNumber', 182 => 0x4 }, 'filenumbermemory' => { 158 => 0x1a }, 'filenumbersequence' => { 237 => '12.2', 240 => '3.1', 241 => '4.1', 242 => '4.1', 243 => '11.1', 244 => '4.3', 248 => '5.2' }, 'filesource' => { 106 => 0xa300, 111 => 0x8000, 404 => 'FileSource' }, 'fileversion' => { 115 => 0x16 }, 'fillflashautoreduction' => { 71 => 0xe, 72 => 0xe, 79 => 0xa }, 'filllight' => { 400 => 'FillLight' }, 'fillorder' => { 106 => 0x10a }, 'filmmode' => { 111 => 0x1401, 268 => 0x412, 270 => 0x42 }, 'filmtype' => { 200 => 0x2 }, 'filtereffect' => { 49 => 0xe, 196 => 0x37 }, 'filtereffectauto' => { 62 => 0xa0 }, 'filtereffectfaithful' => { 61 => 0x70, 62 => 0x70 }, 'filtereffectlandscape' => { 61 => 0x40, 62 => 0x40 }, 'filtereffectmonochrome' => { 18 => 0xff, 61 => 0x88, 62 => 0x88 }, 'filtereffectneutral' => { 61 => 0x58, 62 => 0x58 }, 'filtereffectportrait' => { 61 => 0x28, 62 => 0x28 }, 'filtereffectstandard' => { 61 => 0x10, 62 => 0x10 }, 'filtereffectuserdef1' => { 61 => 0xa0, 62 => 0xb8 }, 'filtereffectuserdef2' => { 61 => 0xb8, 62 => 0xd0 }, 'filtereffectuserdef3' => { 61 => 0xd0, 62 => 0xe8 }, 'finderdisplayduringexposure' => { 72 => 0x1 }, 'finesharpness' => { 303 => 0x70 }, 'finetuneoptcenterweighted' => { 237 => '7.2', 238 => '9.1', 247 => '9.1', 248 => '9.1' }, 'finetuneopthighlightweighted' => { 247 => '46.1' }, 'finetuneoptmatrixmetering' => { 237 => '8.1', 238 => '8.2', 243 => '6.1', 247 => '8.2', 248 => '8.2' }, 'finetuneoptspotmetering' => { 237 => '8.2', 238 => '9.2', 243 => '6.2', 247 => '9.2', 248 => '9.2' }, 'firmware' => { 255 => 0x405, 337 => [0x17,0x3b,0x57], 396 => 'Firmware' }, 'firmwaredate' => { 101 => 0x15, 102 => 0x2001, 324 => 0x4 }, 'firmwareid' => { 165 => 0x0 }, 'firmwarename' => { 334 => 0xa001 }, 'firmwarerevision' => { 18 => 0xa4, 55 => 0x1e, 326 => 0x0 }, 'firmwarerevision2' => { 326 => 0xc }, 'firmwareversion' => { 6 => 0x10b, 10 => 0x136, 13 => 0xff, 14 => 0x107, 120 => 0xce5, 134 => 0x57, 136 => 'FirmwareVersion', 270 => 0x2, 272 => 0x3109, 303 => 0x230, 328 => 0x2 }, 'firmwareversions' => { 312 => 0x301 }, 'firstphotodate' => { 389 => 'FirstPhotoDate' }, 'firstpublicationdate' => { 413 => 'FirstPublicationDate' }, 'fixtureidentifier' => { 114 => 0x16 }, 'flash' => { 103 => 'Flash', 106 => 0x9209, 159 => 0x1f, 160 => 0x15, 404 => 'Flash' }, 'flashaction' => { 345 => 0x3e, 346 => 0x3e, 357 => 0x2017, 361 => [0x2a,0x2c,0x30] }, 'flashaction2' => { 345 => 0x4c, 346 => 0x4c, 361 => 0x77 }, 'flashactionexternal' => { 361 => [0x78,0x7c] }, 'flashactivity' => { 31 => 0x1c }, 'flashbatterylevel' => { 37 => 0x249 }, 'flashbias' => { 270 => 0x24 }, 'flashbits' => { 31 => 0x1d }, 'flashbuttonfunction' => { 73 => 0x70e }, 'flashchargelevel' => { 255 => 0x1010 }, 'flashcolorfilter' => { 185 => 0x10 }, 'flashcommandermode' => { 183 => '9.1', 184 => '9.1', 185 => '9.1' }, 'flashcompensation' => { 183 => 0xa, 184 => 0xa, 185 => 0xa, 396 => 'FlashCompensation' }, 'flashcontrol' => { 345 => 0x23, 346 => 0x1f, 347 => 0x21 }, 'flashcontrolbuilt-in' => { 243 => '16.1', 244 => '23.1', 246 => '23.1', 247 => '24.1' }, 'flashcontrolmode' => { 183 => '9.2', 184 => '9.2', 185 => '9.2', 250 => 0x404 }, 'flashcurtain' => { 270 => 0x48 }, 'flashdefault' => { 161 => 0x42 }, 'flashdevice' => { 255 => 0x1005 }, 'flashdistance' => { 102 => 0x2034 }, 'flashenergy' => { 106 => 0xa20b, 404 => 'FlashEnergy' }, 'flashexposurebracketvalue' => { 194 => 0x18 }, 'flashexposurecomp' => { 67 => 0xf, 111 => 0x1011, 139 => 'ExposureComp', 158 => 0x23, 163 => 0x104, 164 => 0x49c1, 194 => 0x12, 250 => 0x401, 255 => 0x1023, 303 => 0x4d, 328 => 0x100b, 337 => [0x3a,0x56], 357 => 0x104 }, 'flashexposurecomp2' => { 217 => 0x4d2 }, 'flashexposurecomp3' => { 185 => 0x1d }, 'flashexposurecomp4' => { 185 => 0x27 }, 'flashexposurecomparea' => { 238 => '38.4', 247 => '38.4' }, 'flashexposurecompset' => { 161 => 0x10, 277 => 0xe, 345 => 0x14, 346 => 0x12, 347 => 0x23, 361 => 0x1f }, 'flashexposurecompset2' => { 361 => [0x26,0x2c] }, 'flashexposureindicator' => { 161 => 0x54 }, 'flashexposureindicatorlast' => { 161 => 0x56 }, 'flashexposureindicatornext' => { 161 => 0x55 }, 'flashexposurelock' => { 49 => 0x19 }, 'flashfired' => { 122 => 0x5d, 139 => 'Fired', 158 => 0x14, 216 => '590.3', 270 => 0x8007, 404 => [\'Flash','FlashFired'] }, 'flashfiring' => { 73 => 0x306, 74 => 0x6, 75 => 0x7, 78 => 0x7 }, 'flashfirmwareversion' => { 251 => 0x1002 }, 'flashfocallength' => { 183 => 0xb, 184 => 0xc, 185 => 0xc }, 'flashfunction' => { 164 => 0x31, 404 => [\'Flash','FlashFunction'] }, 'flashgndistance' => { 183 => 0xe, 184 => 0xf, 185 => 0xf }, 'flashgroupacompensation' => { 183 => 0x11, 184 => 0x12, 185 => 0x13 }, 'flashgroupacontrolmode' => { 183 => 0xf, 184 => '16.1', 185 => '17.1' }, 'flashgroupaoutput' => { 183 => 0x11, 184 => 0x12, 185 => 0x13 }, 'flashgroupbcompensation' => { 183 => 0x12, 184 => 0x13, 185 => 0x14 }, 'flashgroupbcontrolmode' => { 183 => 0x10, 184 => '17.1', 185 => '18.1' }, 'flashgroupboutput' => { 183 => 0x12, 184 => 0x13, 185 => 0x14 }, 'flashgroupccompensation' => { 184 => 0x14, 185 => 0x15 }, 'flashgroupccontrolmode' => { 184 => '17.2', 185 => '18.2' }, 'flashgroupcoutput' => { 184 => 0x14, 185 => 0x15 }, 'flashguidenumber' => { 67 => 0xd, 83 => 0x0, 139 => 'GuideNumber' }, 'flashintensity' => { 101 => [0x19,0x5], 250 => 0x405 }, 'flashlevel' => { 239 => 0x9, 357 => 0xb048 }, 'flashmake' => { 139 => 'Make' }, 'flashmanufacturer' => { 156 => 'FlashManufacturer' }, 'flashmetering' => { 158 => 0x3f, 161 => 0x1c }, 'flashmeteringmode' => { 6 => 0x15, 12 => 0x15, 13 => 0x15, 14 => 0x15, 15 => 0x15, 16 => 0x15, 17 => 0x15, 19 => 0x15, 21 => 0x15, 26 => 0x15 }, 'flashmeteringsegments' => { 303 => 0x20a }, 'flashmode' => { 101 => 0x4, 122 => 0x5c, 139 => 'Mode', 158 => 0x2, 159 => 0x20, 160 => 0x16, 161 => 0xf, 194 => 0x87, 250 => 0x400, 255 => 0x1004, 303 => 0xc, 310 => 0x4, 327 => 0x20, 328 => 0x100a, 336 => 0x225, 345 => 0x13, 346 => 0x7f, 347 => 0x20, 361 => 0x10, 364 => 0x1138, 365 => 0x1138, 366 => 0x1114, 367 => 0x1190, 368 => 0x116c, 369 => 0x1024, 370 => 0x21c, 371 => 0x21c, 404 => [\'Flash','FlashMode'] }, 'flashmodel' => { 139 => 'Model', 156 => 'FlashModel', 251 => 0x1001 }, 'flashoptions' => { 284 => 0x2 }, 'flashoptions2' => { 284 => 0x10 }, 'flashoutput' => { 37 => 0x248, 67 => 0x21, 183 => 0xa, 184 => 0xa, 185 => 0xa }, 'flashpixversion' => { 106 => 0xa000, 404 => 'FlashpixVersion' }, 'flashredeyemode' => { 404 => [\'Flash','FlashRedEyeMode'] }, 'flashremotecontrol' => { 250 => 0x403 }, 'flashreturn' => { 404 => [\'Flash','FlashReturn'] }, 'flashserialnumber' => { 139 => 'SerialNumber', 251 => 0x1003 }, 'flashsetting' => { 194 => 0x8 }, 'flashshutterspeed' => { 237 => '20.2', 238 => '23.2', 243 => '15.2', 244 => '22.2', 245 => '7.2', 246 => '22.2', 247 => '23.2', 248 => '23.1' }, 'flashsource' => { 183 => 0x4, 184 => 0x4, 185 => 0x4 }, 'flashstatus' => { 291 => 0x0, 361 => [0x82,0x86], 372 => [0x31,0x39] }, 'flashstatusbuilt-in' => { 347 => [0x87,0x287] }, 'flashstatusexternal' => { 347 => [0x88,0x288] }, 'flashsyncspeed' => { 237 => '20.1', 238 => '23.1', 243 => '15.1', 244 => '22.1', 246 => '22.1', 247 => '23.1' }, 'flashsyncspeedav' => { 71 => 0x3, 73 => 0x10f, 74 => 0x2, 75 => 0x3, 76 => 0x2, 77 => 0x2, 78 => 0x3, 79 => 0x6 }, 'flashthreshold' => { 83 => 0x1 }, 'flashtype' => { 139 => 'Type', 161 => 0x59, 194 => 0x9, 251 => 0x1000 }, 'flashwarning' => { 244 => '30.1', 245 => '7.1', 248 => '31.1', 270 => 0x62 }, 'flexiblespotposition' => { 357 => 0x201d }, 'flickerreduce' => { 336 => 0x218 }, 'fliphorizontal' => { 230 => 0x76a43206 }, 'fnumber' => { 6 => 0x3, 8 => 0x3, 10 => 0x3, 12 => 0x3, 13 => 0x3, 14 => 0x3, 15 => 0x3, 16 => 0x3, 17 => 0x3, 18 => 0x3, 19 => 0x3, 20 => 0x3, 21 => 0x3, 22 => 0x3, 23 => 0x3, 24 => 0x3, 25 => 0x3, 26 => 0x3, 27 => 0x5, 28 => 0x6, 67 => 0x15, 106 => 0x829d, 119 => 0xfd04, 122 => 0x1e, 124 => 0xfa23, 126 => 0xf103, 129 => 0x13, 131 => 0x3c, 134 => 0xc, 143 => 'FNumber', 158 => 0xa, 159 => 0x36, 160 => 0x47, 161 => 0x9, 164 => 0x49c7, 303 => 0x13, 334 => 0xa019, 337 => [0x31,0x49], 345 => 0x1, 346 => 0x1, 361 => [0x20,0x22,0x26], 404 => 'FNumber' }, 'focallength' => { 6 => 0x1d, 7 => 0xa, 8 => 0x23, 9 => 0x9, 10 => 0x1d, 11 => 0x9, 12 => 0x1e, 13 => 0x1d, 14 => 0x1d, 15 => 0x1e, 16 => 0x1e, 17 => 0x1e, 18 => 0x28, 19 => 0x1e, 20 => 0x23, 21 => 0x1e, 22 => 0x1e, 23 => 0x23, 24 => 0x23, 25 => 0x23, 26 => 0x1e, 51 => 0x1, 102 => 0x1d, 106 => 0x920a, 129 => 0x1d, 143 => 'FocalLength', 158 => 0x12, 190 => 0xa, 191 => 0xb, 303 => 0x1d, 312 => 0x403, 328 => 0x1500, 344 => 0xe, 368 => 0x1278, 369 => 0x1134, 370 => 0x32c, 371 => 0x32c, 404 => 'FocalLength' }, 'focallength2' => { 361 => [0x23,0x25,0x29] }, 'focallengthin35mmformat' => { 106 => 0xa405, 334 => 0xa01a, 404 => 'FocalLengthIn35mmFilm' }, 'focallengthtelezoom' => { 344 => 0x10 }, 'focalplanediagonal' => { 251 => 0x103, 255 => 0x205 }, 'focalplaneresolutionunit' => { 106 => 0xa210, 404 => 'FocalPlaneResolutionUnit' }, 'focalplanexresolution' => { 106 => 0xa20e, 404 => 'FocalPlaneXResolution' }, 'focalplanexsize' => { 51 => 0x2 }, 'focalplanexunknown' => { 51 => 0x2 }, 'focalplaneyresolution' => { 106 => 0xa20f, 404 => 'FocalPlaneYResolution' }, 'focalplaneysize' => { 51 => 0x3 }, 'focalplaneyunknown' => { 51 => 0x3 }, 'focaltype' => { 9 => 0x2d, 51 => 0x0 }, 'focalunits' => { 31 => 0x19 }, 'focus' => { 220 => 0x8 }, 'focusarea' => { 158 => 0x31 }, 'focusareaselection' => { 245 => '15.2' }, 'focuscontinuous' => { 31 => 0x20 }, 'focusdisplayaiservoandmf' => { 73 => 0x515 }, 'focusdistance' => { 143 => 'FocusDistance', 158 => 0x13, 164 => 0x49bb, 190 => 0x9, 191 => 0xa, 253 => 0x305 }, 'focusdistancelower' => { 6 => 0x45, 8 => 0x8e, 10 => 0x45, 12 => 0x56, 13 => 0x45, 14 => 0x45, 15 => 0x52, 16 => 0x52, 17 => 0x56, 19 => 0x52, 20 => 0x8e, 21 => 0x59, 22 => 0x57, 23 => 0x8e, 24 => 0x94, 25 => 0x95, 26 => 0x56, 49 => 0x15, 67 => 0x14 }, 'focusdistanceupper' => { 6 => 0x43, 8 => 0x8c, 10 => 0x43, 12 => 0x54, 13 => 0x43, 14 => 0x43, 15 => 0x50, 16 => 0x50, 17 => 0x54, 19 => 0x50, 20 => 0x8c, 21 => 0x57, 22 => 0x55, 23 => 0x8c, 24 => 0x92, 25 => 0x93, 26 => 0x54, 49 => 0x14, 67 => 0x13 }, 'focusholdbutton' => { 161 => 0x44 }, 'focusinfoversion' => { 253 => 0x0 }, 'focusingscreen' => { 72 => 0x0, 73 => 0x80b, 78 => 0x0 }, 'focuslocked' => { 157 => 0x14 }, 'focusmode' => { 31 => 0x7, 101 => 0x3, 102 => [0x3003,0xd], 111 => 0x1021, 122 => 0x38, 136 => 'FocusMode', 158 => 0x30, 160 => 0xe, 161 => 0xc, 194 => 0x7, 250 => 0x301, 255 => 0x100b, 270 => 0x7, 303 => 0xd, 310 => 0x3, 328 => 0x1006, 338 => [0xb,0x5], 344 => [0x15,0x1d], 345 => 0x4d, 346 => 0x4d, 357 => [0xb042,0xb04e,0x201b], 361 => 0x13, 376 => 0x16 }, 'focusmode2' => { 284 => '3.1', 361 => [0x2c,0x2e,0x32] }, 'focusmodesetting' => { 239 => '10.1', 342 => 0x14, 343 => 0x15, 345 => 0x10, 346 => 0xf, 347 => 0x6 }, 'focusmodeswitch' => { 161 => 0x58, 345 => 0x2e }, 'focuspixel' => { 111 => 0x1023 }, 'focuspointwrap' => { 237 => '2.2', 238 => '2.2', 243 => '2.2', 244 => '1.2', 247 => '2.2', 248 => '2.5' }, 'focusposition' => { 190 => 0x8, 191 => 0x8, 303 => 0x10, 356 => 0x9bb }, 'focusposition2' => { 361 => [0x29,0x2b,0x2f], 376 => 0x2d, 379 => 0x20 }, 'focusprocess' => { 250 => 0x302 }, 'focusrange' => { 31 => 0x12, 255 => 0x100a }, 'focusrangeindex' => { 294 => '3.1' }, 'focussetting' => { 337 => 0x6 }, 'focusstatus' => { 344 => 0x19, 345 => 0x53, 346 => 0x53 }, 'focusstepcount' => { 253 => 0x301, 255 => 0x100e }, 'focusstepinfinity' => { 253 => 0x303, 255 => 0x103b }, 'focusstepnear' => { 253 => 0x304, 255 => 0x103c }, 'focustrackinglockon' => { 237 => ['1.5','4.1'], 238 => '1.4', 243 => '3.1', 244 => '0.4', 247 => '1.4' }, 'focuswarning' => { 111 => 0x1301 }, 'foldername' => { 158 => 0x27 }, 'foldernumber' => { 345 => 0x9a, 347 => [0x402,0x114,0x316] }, 'fontcomposite' => { 430 => [\'Fonts','FontsComposite'] }, 'fontface' => { 430 => [\'Fonts','FontsFontFace'] }, 'fontfamily' => { 430 => [\'Fonts','FontsFontFamily'] }, 'fontfilename' => { 430 => [\'Fonts','FontsFontFileName'] }, 'fontname' => { 430 => [\'Fonts','FontsFontName'] }, 'fonts' => { 430 => 'Fonts' }, 'fonttype' => { 430 => [\'Fonts','FontsFontType'] }, 'fontversion' => { 430 => [\'Fonts','FontsVersionString'] }, 'for' => { 319 => 'For' }, 'format' => { 401 => 'format', 423 => 'Format' }, 'forwardlock' => { 420 => 'forwardlock' }, 'forwardmatrix1' => { 106 => 0xc714 }, 'forwardmatrix2' => { 106 => 0xc715 }, 'framecount' => { 58 => [0x2,0x4] }, 'frameheight' => { 111 => 0x3822 }, 'framenum' => { 314 => 0xd7 }, 'framenumber' => { 111 => 0x8003, 164 => 0x3c, 303 => 0x29 }, 'framerate' => { 58 => [0x1,0x6], 106 => 0xc764, 111 => 0x3820 }, 'framewidth' => { 111 => 0x3821 }, 'framing' => { 414 => 'framing' }, 'freebytes' => { 86 => 0x1 }, 'freememorycardimages' => { 159 => [0x37,0x54], 160 => [0x2d,0x4a], 161 => 0x32 }, 'fujiflashmode' => { 111 => 0x1010 }, 'fullimagesize' => { 357 => 0xb02b }, 'fullpanoheightpixels' => { 389 => 'FullPanoHeightPixels' }, 'fullpanowidthpixels' => { 389 => 'FullPanoWidthPixels' }, 'fullpresssnap' => { 328 => 0x100d }, 'fullsizeimage' => { 142 => 'data' }, 'fullsizeimagename' => { 142 => '1Name' }, 'fullsizeimagetype' => { 142 => '0Type' }, 'funcbutton' => { 237 => ['14.1','15.1'], 238 => '14.1', 243 => '28.1', 244 => '13.1', 247 => '14.1', 248 => '14.1' }, 'funcbuttonplusdials' => { 237 => ['14.2','15.2'], 238 => '14.2', 243 => '31.1', 247 => '42.1' }, 'functionbutton' => { 242 => '13.1', 245 => '5.2' }, 'gainbase' => { 254 => 0x610 }, 'gaincontrol' => { 106 => 0xa407, 404 => 'GainControl' }, 'gamma' => { 106 => 0xa500, 405 => 'Gamma' }, 'gammablackpoint' => { 94 => 0xc }, 'gammacolortone' => { 94 => 0x3 }, 'gammacompensatedvalue' => { 116 => 0x91 }, 'gammacontrast' => { 94 => 0x2 }, 'gammacurveoutputrange' => { 94 => 0xf }, 'gammahighlight' => { 94 => 0xa }, 'gammalinear' => { 92 => 0x20200 }, 'gammamidpoint' => { 94 => 0xe }, 'gammasaturation' => { 94 => 0x4 }, 'gammashadow' => { 94 => 0x9 }, 'gammasharpnessstrength' => { 94 => 0x8 }, 'gammaunsharpmaskfineness' => { 94 => 0x6 }, 'gammaunsharpmaskstrength' => { 94 => 0x5 }, 'gammaunsharpmaskthreshold' => { 94 => 0x7 }, 'gammawhitepoint' => { 94 => 0xd }, 'geimagesize' => { 111 => 0x1304 }, 'gemake' => { 112 => 0x300 }, 'gemodel' => { 112 => 0x207 }, 'genre' => { 415 => 'genre', 425 => 'genre' }, 'geography' => { 416 => 'geography' }, 'geologicalcontext' => { 105 => 'GeologicalContext' }, 'geologicalcontextbed' => { 105 => [\'GeologicalContext','GeologicalContextBed'] }, 'geologicalcontextformation' => { 105 => [\'GeologicalContext','GeologicalContextFormation'] }, 'geologicalcontextgroup' => { 105 => [\'GeologicalContext','GeologicalContextGroup'] }, 'geologicalcontextid' => { 105 => [\'GeologicalContext','GeologicalContextGeologicalContextID'] }, 'geologicalcontextmember' => { 105 => [\'GeologicalContext','GeologicalContextMember'] }, 'geosync' => { 107 => 'Geosync' }, 'geotag' => { 107 => 'Geotag' }, 'geotiffasciiparams' => { 106 => 0x87b1 }, 'geotiffdirectory' => { 106 => 0x87af }, 'geotiffdoubleparams' => { 106 => 0x87b0 }, 'geotime' => { 107 => 'Geotime' }, 'globalaltitude' => { 317 => 0x419 }, 'globalangle' => { 317 => 0x40d }, 'good' => { 425 => 'good' }, 'googleplusuploadcode' => { 106 => 0x9009 }, 'gpsaltitude' => { 113 => 0x6, 140 => 'Altitude', 404 => 'GPSAltitude' }, 'gpsaltituderef' => { 113 => 0x5, 404 => 'GPSAltitudeRef' }, 'gpsareainformation' => { 113 => 0x1c, 404 => 'GPSAreaInformation' }, 'gpsdatestamp' => { 113 => 0x1d }, 'gpsdatetime' => { 140 => 'DateTime', 404 => 'GPSTimeStamp' }, 'gpsdestbearing' => { 113 => 0x18, 140 => 'Bearing', 404 => 'GPSDestBearing' }, 'gpsdestbearingref' => { 113 => 0x17, 404 => 'GPSDestBearingRef' }, 'gpsdestdistance' => { 113 => 0x1a, 140 => 'Distance', 404 => 'GPSDestDistance' }, 'gpsdestdistanceref' => { 113 => 0x19, 404 => 'GPSDestDistanceRef' }, 'gpsdestlatitude' => { 113 => 0x14, 404 => 'GPSDestLatitude' }, 'gpsdestlatituderef' => { 113 => 0x13 }, 'gpsdestlongitude' => { 113 => 0x16, 404 => 'GPSDestLongitude' }, 'gpsdestlongituderef' => { 113 => 0x15 }, 'gpsdifferential' => { 113 => 0x1e, 140 => 'Differential', 404 => 'GPSDifferential' }, 'gpsdop' => { 113 => 0xb, 404 => 'GPSDOP' }, 'gpshpositioningerror' => { 113 => 0x1f, 404 => 'GPSHPositioningError' }, 'gpsimgdirection' => { 113 => 0x11, 404 => 'GPSImgDirection' }, 'gpsimgdirectionref' => { 113 => 0x10, 404 => 'GPSImgDirectionRef' }, 'gpslatitude' => { 113 => 0x2, 140 => 'Latitude', 404 => 'GPSLatitude' }, 'gpslatituderef' => { 113 => 0x1 }, 'gpslongitude' => { 113 => 0x4, 140 => 'Longitude', 404 => 'GPSLongitude' }, 'gpslongituderef' => { 113 => 0x3 }, 'gpsmapdatum' => { 113 => 0x12, 140 => 'Datum', 404 => 'GPSMapDatum' }, 'gpsmeasuremode' => { 113 => 0xa, 140 => 'MeasureMode', 404 => 'GPSMeasureMode' }, 'gpsprocessingmethod' => { 113 => 0x1b, 404 => 'GPSProcessingMethod' }, 'gpssatellites' => { 113 => 0x8, 140 => 'Satellites', 404 => 'GPSSatellites' }, 'gpsspeed' => { 113 => 0xd, 140 => 'Speed', 404 => 'GPSSpeed' }, 'gpsspeedref' => { 113 => 0xc, 404 => 'GPSSpeedRef' }, 'gpsstatus' => { 113 => 0x9, 404 => 'GPSStatus' }, 'gpstimestamp' => { 113 => 0x7 }, 'gpstrack' => { 113 => 0xf, 140 => 'Heading', 404 => 'GPSTrack' }, 'gpstrackref' => { 113 => 0xe, 404 => 'GPSTrackRef' }, 'gpsversionid' => { 113 => 0x0, 404 => 'GPSVersionID' }, 'gradation' => { 250 => 0x50f }, 'gradientbasedcorractive' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionActive'] }, 'gradientbasedcorramount' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionAmount'] }, 'gradientbasedcorrbrightness' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalBrightness'] }, 'gradientbasedcorrclarity' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalClarity'] }, 'gradientbasedcorrclarity2012' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalClarity2012'] }, 'gradientbasedcorrcontrast' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalContrast'] }, 'gradientbasedcorrcontrast2012' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalContrast2012'] }, 'gradientbasedcorrdefringe' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalDefringe'] }, 'gradientbasedcorrections' => { 400 => 'GradientBasedCorrections' }, 'gradientbasedcorrexposure' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalExposure'] }, 'gradientbasedcorrexposure2012' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalExposure2012'] }, 'gradientbasedcorrhighlights2012' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalHighlights2012'] }, 'gradientbasedcorrhue' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalToningHue'] }, 'gradientbasedcorrluminancenoise' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalLuminanceNoise'] }, 'gradientbasedcorrmaskalpha' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksAlpha'] }, 'gradientbasedcorrmaskangle' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksAngle'] }, 'gradientbasedcorrmaskbottom' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksBottom'] }, 'gradientbasedcorrmaskcentervalue' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksCenterValue'] }, 'gradientbasedcorrmaskcenterweight' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksCenterWeight'] }, 'gradientbasedcorrmaskdabs' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksDabs'] }, 'gradientbasedcorrmaskfeather' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksFeather'] }, 'gradientbasedcorrmaskflipped' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksFlipped'] }, 'gradientbasedcorrmaskflow' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksFlow'] }, 'gradientbasedcorrmaskfullx' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksFullX'] }, 'gradientbasedcorrmaskfully' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksFullY'] }, 'gradientbasedcorrmaskleft' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksLeft'] }, 'gradientbasedcorrmaskmidpoint' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksMidpoint'] }, 'gradientbasedcorrmaskperimetervalue' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksPerimeterValue'] }, 'gradientbasedcorrmaskradius' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksRadius'] }, 'gradientbasedcorrmaskright' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksRight'] }, 'gradientbasedcorrmaskroundness' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksRoundness'] }, 'gradientbasedcorrmasks' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasks'] }, 'gradientbasedcorrmasksizex' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksSizeX'] }, 'gradientbasedcorrmasksizey' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksSizeY'] }, 'gradientbasedcorrmasktop' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksTop'] }, 'gradientbasedcorrmaskvalue' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksMaskValue'] }, 'gradientbasedcorrmaskversion' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksVersion'] }, 'gradientbasedcorrmaskwhat' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksWhat'] }, 'gradientbasedcorrmaskx' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksX'] }, 'gradientbasedcorrmasky' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksY'] }, 'gradientbasedcorrmaskzerox' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksZeroX'] }, 'gradientbasedcorrmaskzeroy' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsCorrectionMasksZeroY'] }, 'gradientbasedcorrmoire' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalMoire'] }, 'gradientbasedcorrsaturation' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalSaturation','GradientBasedCorrectionsLocalToningSaturation'] }, 'gradientbasedcorrshadows2012' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalShadows2012'] }, 'gradientbasedcorrsharpness' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalSharpness'] }, 'gradientbasedcorrtemperature' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalTemperature'] }, 'gradientbasedcorrtint' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsLocalTint'] }, 'gradientbasedcorrwhat' => { 400 => [\'GradientBasedCorrections','GradientBasedCorrectionsWhat'] }, 'grainamount' => { 400 => 'GrainAmount' }, 'grainfrequency' => { 400 => 'GrainFrequency' }, 'grainsize' => { 400 => 'GrainSize' }, 'graymixeraqua' => { 400 => 'GrayMixerAqua' }, 'graymixerblue' => { 400 => 'GrayMixerBlue' }, 'graymixergreen' => { 400 => 'GrayMixerGreen' }, 'graymixermagenta' => { 400 => 'GrayMixerMagenta' }, 'graymixerorange' => { 400 => 'GrayMixerOrange' }, 'graymixerpurple' => { 400 => 'GrayMixerPurple' }, 'graymixerred' => { 400 => 'GrayMixerRed' }, 'graymixeryellow' => { 400 => 'GrayMixerYellow' }, 'graypoint' => { 385 => 0x8021 }, 'grayresponseunit' => { 106 => 0x122 }, 'greencurvelimits' => { 97 => 0x1c4 }, 'greencurvepoints' => { 96 => 0x53, 97 => 0x19a }, 'greenhsl' => { 92 => 0x20912 }, 'greenhue' => { 400 => 'GreenHue' }, 'greensaturation' => { 400 => 'GreenSaturation' }, 'griddisplay' => { 237 => '13.3', 238 => '4.3', 240 => '2.2', 243 => '10.5', 244 => '3.4', 245 => '6.1', 247 => '4.4', 248 => '4.2' }, 'gripbatteryadload' => { 282 => 0x5 }, 'gripbatteryadnoload' => { 282 => 0x4 }, 'gripbatterystate' => { 282 => '1.2' }, 'groupareaafillumination' => { 238 => '46.4', 247 => '47.4' }, 'halftonehints' => { 106 => 0x141 }, 'hardlink' => { 107 => 'HardLink' }, 'hasalternative' => { 415 => 'hasAlternative' }, 'hascorrection' => { 415 => 'hasCorrection' }, 'hascorrectiona-lang' => { 415 => [\'hasCorrection','hasCorrectionA-lang'] }, 'hascorrectiona-platform' => { 415 => [\'hasCorrection','hasCorrectionA-platform'] }, 'hascorrectiontext' => { 415 => [\'hasCorrection','hasCorrectionText'] }, 'hascrop' => { 400 => 'HasCrop' }, 'hasextendedxmp' => { 427 => 'HasExtendedXMP' }, 'hassettings' => { 400 => 'HasSettings' }, 'hastranslation' => { 415 => 'hasTranslation' }, 'hdr' => { 52 => 0x1, 187 => 0x4, 270 => 0x9e, 303 => 0x85, 357 => 0x200a }, 'hdreffect' => { 52 => 0x2 }, 'hdrimagetype' => { 1 => 0xa }, 'hdrinfoversion' => { 187 => 0x0 }, 'hdrlevel' => { 187 => 0x5, 347 => 0x2e, 361 => 0x17 }, 'hdrlevel2' => { 187 => 0x7 }, 'hdrsetting' => { 347 => 0x2d, 361 => 0x16, 364 => 0x1148, 365 => 0x1148, 366 => 0x1124, 367 => 0x11a0, 368 => 0x117c, 369 => 0x1034, 370 => 0x22c, 371 => 0x22c }, 'hdrsmoothing' => { 187 => 0x6 }, 'headline' => { 114 => 0x69, 412 => 'Headline' }, 'hierarchicalkeywords' => { 151 => [\'Keywords','KeywordsHierarchy'] }, 'hierarchicalkeywords1' => { 151 => [\'Keywords','KeywordsHierarchyKeyword'] }, 'hierarchicalkeywords1applied' => { 151 => [\'Keywords','KeywordsHierarchyApplied'] }, 'hierarchicalkeywords1children' => { 151 => [\'Keywords','KeywordsHierarchyChildren'] }, 'hierarchicalkeywords2' => { 151 => [\'Keywords','KeywordsHierarchyChildrenKeyword'] }, 'hierarchicalkeywords2applied' => { 151 => [\'Keywords','KeywordsHierarchyChildrenApplied'] }, 'hierarchicalkeywords2children' => { 151 => [\'Keywords','KeywordsHierarchyChildrenChildren'] }, 'hierarchicalkeywords3' => { 151 => [\'Keywords','KeywordsHierarchyChildrenChildrenKeyword'] }, 'hierarchicalkeywords3applied' => { 151 => [\'Keywords','KeywordsHierarchyChildrenChildrenApplied'] }, 'hierarchicalkeywords3children' => { 151 => [\'Keywords','KeywordsHierarchyChildrenChildrenChildren'] }, 'hierarchicalkeywords4' => { 151 => [\'Keywords','KeywordsHierarchyChildrenChildrenChildrenKeyword'] }, 'hierarchicalkeywords4applied' => { 151 => [\'Keywords','KeywordsHierarchyChildrenChildrenChildrenApplied'] }, 'hierarchicalkeywords4children' => { 151 => [\'Keywords','KeywordsHierarchyChildrenChildrenChildrenChildren'] }, 'hierarchicalkeywords5' => { 151 => [\'Keywords','KeywordsHierarchyChildrenChildrenChildrenChildrenKeyword'] }, 'hierarchicalkeywords5applied' => { 151 => [\'Keywords','KeywordsHierarchyChildrenChildrenChildrenChildrenApplied'] }, 'hierarchicalkeywords5children' => { 151 => [\'Keywords','KeywordsHierarchyChildrenChildrenChildrenChildrenChildren'] }, 'hierarchicalkeywords6' => { 151 => [\'Keywords','KeywordsHierarchyChildrenChildrenChildrenChildrenChildrenKeyword'] }, 'hierarchicalkeywords6applied' => { 151 => [\'Keywords','KeywordsHierarchyChildrenChildrenChildrenChildrenChildrenApplied'] }, 'hierarchicalsubject' => { 391 => 'hierarchicalSubject' }, 'highestbiostratigraphiczone' => { 105 => [\'GeologicalContext','GeologicalContextHighestBiostratigraphicZone'] }, 'highisomultiplierblue' => { 274 => 0x1a }, 'highisomultipliergreen' => { 274 => 0x19 }, 'highisomultiplierred' => { 274 => 0x18 }, 'highisonoisereduction' => { 15 => 0xbc, 16 => 0xbd, 19 => 0xbd, 26 => 0xc9, 54 => 0x5, 73 => 0x202, 111 => 0x100e, 194 => 0xb1, 303 => 0x71, 345 => 0x2c, 346 => 0x26, 347 => 0x26, 357 => 0x2009, 361 => 0x12, 381 => 0x42 }, 'highisonoisereduction2' => { 357 => 0xb050 }, 'highlight' => { 337 => 0xf }, 'highlightadj' => { 92 => 0x2030c }, 'highlightcolordistortreduct' => { 385 => 0x8026 }, 'highlightprotection' => { 229 => 0x6 }, 'highlightrecovery' => { 400 => 'HighlightRecovery' }, 'highlights' => { 393 => 'Highlights' }, 'highlights2012' => { 400 => 'Highlights2012' }, 'highlighttone' => { 111 => 0x1041 }, 'highlighttonepriority' => { 12 => 0x7, 15 => 0x7, 16 => 0x7, 17 => 0x7, 19 => 0x7, 21 => 0x7, 26 => 0x7, 54 => 0x3, 73 => 0x203 }, 'highlowkeyadj' => { 303 => 0x6c }, 'highspeedsync' => { 161 => 0x5, 345 => 0x2, 346 => 0x2 }, 'histogramxml' => { 230 => 0x83a1a25 }, 'history' => { 412 => 'History', 426 => 'History' }, 'historyaction' => { 426 => [\'History','HistoryAction'] }, 'historychanged' => { 426 => [\'History','HistoryChanged'] }, 'historyinstanceid' => { 426 => [\'History','HistoryInstanceID'] }, 'historyparameters' => { 426 => [\'History','HistoryParameters'] }, 'historysoftwareagent' => { 426 => [\'History','HistorySoftwareAgent'] }, 'historywhen' => { 426 => [\'History','HistoryWhen'] }, 'hometowncity' => { 102 => 0x3006, 303 => 0x23, 309 => 0x2 }, 'hometowncitycode' => { 310 => 0x1000 }, 'hometowndst' => { 303 => 0x25, 309 => '0.2' }, 'hostcomputer' => { 106 => 0x13c }, 'hue' => { 166 => 0x3b, 303 => 0x67 }, 'hueadj' => { 233 => 0x2f, 385 => 0x8019 }, 'hueadjust' => { 328 => 0x1016 }, 'hueadjustment' => { 159 => 0x4a, 160 => 0x40, 194 => 0x92, 196 => 0x36 }, 'hueadjustmentaqua' => { 400 => 'HueAdjustmentAqua' }, 'hueadjustmentblue' => { 400 => 'HueAdjustmentBlue' }, 'hueadjustmentgreen' => { 400 => 'HueAdjustmentGreen' }, 'hueadjustmentmagenta' => { 400 => 'HueAdjustmentMagenta' }, 'hueadjustmentorange' => { 400 => 'HueAdjustmentOrange' }, 'hueadjustmentpurple' => { 400 => 'HueAdjustmentPurple' }, 'hueadjustmentred' => { 400 => 'HueAdjustmentRed' }, 'hueadjustmentyellow' => { 400 => 'HueAdjustmentYellow' }, 'huesetting' => { 258 => 0x1011 }, 'icc_profile' => { 107 => 'ICC_Profile' }, 'iccprofilename' => { 412 => 'ICCProfile' }, 'idccreativestyle' => { 385 => 0x8000 }, 'idcpreviewlength' => { 385 => 0x202 }, 'idcpreviewstart' => { 385 => 0x201 }, 'identification' => { 105 => 'Identification' }, 'identificationid' => { 105 => [\'Identification','IdentificationIdentificationID'] }, 'identificationqualifier' => { 105 => [\'Identification','IdentificationIdentificationQualifier'] }, 'identificationreferences' => { 105 => [\'Identification','IdentificationIdentificationReferences'] }, 'identificationremarks' => { 105 => [\'Identification','IdentificationIdentificationRemarks'] }, 'identificationverificationstatus' => { 105 => [\'Identification','IdentificationIdentificationVerificationStatus'] }, 'identifiedby' => { 105 => [\'Identification','IdentificationIdentifiedBy'] }, 'identifier' => { 401 => 'identifier', 423 => 'Identifier' }, 'illumination' => { 245 => '0.5' }, 'imageadjustment' => { 194 => 0x80, 220 => 0x5 }, 'imagealterationconstraints' => { 413 => 'ImageAlterationConstraints' }, 'imagearea' => { 205 => 0x10, 208 => 0x10 }, 'imageareaoffset' => { 303 => 0x38 }, 'imageauthentication' => { 194 => 0x20 }, 'imageboundary' => { 194 => 0x16 }, 'imagecount' => { 111 => 0x1438, 194 => 0xa5, 359 => 0x11b, 372 => [0x32,0x3a] }, 'imagecount2' => { 372 => [0x4c,0x58] }, 'imagecount3' => { 372 => [0x1a0,0x1aa,0x1bd,0x1cb] }, 'imagecreator' => { 413 => 'ImageCreator' }, 'imagecreatorid' => { 413 => [\'ImageCreator','ImageCreatorImageCreatorID'] }, 'imagecreatorimageid' => { 413 => 'ImageCreatorImageID' }, 'imagecreatorname' => { 413 => [\'ImageCreator','ImageCreatorImageCreatorName'] }, 'imagedatasize' => { 194 => 0xa2 }, 'imagedescription' => { 106 => 0x10e, 421 => 'ImageDescription' }, 'imageduplicationconstraints' => { 413 => 'ImageDuplicationConstraints' }, 'imagedustoff' => { 230 => 0xfe443a45 }, 'imageeditcount' => { 303 => 0x41 }, 'imageediting' => { 303 => 0x32 }, 'imageeffects' => { 328 => 0x1010 }, 'imagefileconstraints' => { 413 => 'ImageFileConstraints' }, 'imagefileformatasdelivered' => { 413 => 'ImageFileFormatAsDelivered' }, 'imagefilesizeasdelivered' => { 413 => 'ImageFileSizeAsDelivered' }, 'imagegeneration' => { 111 => 0x1436 }, 'imageheight' => { 106 => 0x101, 165 => 0xc, 312 => 0x10d, 421 => 'ImageLength' }, 'imagehistory' => { 106 => 0x9213, 403 => 'ImageHistory' }, 'imageidnumber' => { 266 => 0x340 }, 'imagenumber' => { 106 => 0x9211, 136 => 'ImageNumber', 159 => 0xae, 160 => 0x5e, 312 => 0x113, 345 => 0x9b, 347 => [0x400,'276.1',0x314], 396 => 'ImageNumber' }, 'imagenumber2' => { 160 => 0x62 }, 'imageoptimization' => { 194 => 0xa9 }, 'imageorientation' => { 114 => 0x83 }, 'imageprocessing' => { 194 => 0x1a }, 'imageprocessingversion' => { 254 => 0x0 }, 'imagequality' => { 136 => 'ImageQuality', 207 => '723.2', 208 => '732.2', 216 => '708.1', 270 => 0x1 }, 'imagequality2' => { 250 => 0x603 }, 'imageref' => { 408 => 'ImageRef' }, 'imagereview' => { 239 => '0.4', 245 => '0.4' }, 'imagereviewmonitorofftime' => { 238 => '21.1', 247 => '21.1' }, 'imagereviewtime' => { 237 => '25.1', 239 => '2.1', 240 => '19.1', 241 => '20.1', 242 => '20.1', 243 => '9.2', 244 => '20.1', 248 => '21.2' }, 'imagesize' => { 142 => 'ImageSize' }, 'imagesizerestriction' => { 418 => 'imageSizeRestriction' }, 'imagesourcedata' => { 106 => 0x935c }, 'imagestabilization' => { 31 => 0x22, 102 => 0x3020, 111 => 0x1422, 136 => 'ImageStabilization', 159 => 0xbd, 160 => 0x71, 161 => 0x57, 162 => 0x0, 163 => [0x18,0x107,0x113], 164 => 0x49c2, 194 => 0xac, 250 => 0x604, 253 => 0x1600, 270 => 0x1a, 350 => 0x12, 351 => 0x11, 357 => 0xb026 }, 'imagestabilization2' => { 349 => 0xa }, 'imagestabilizationsetting' => { 164 => 0x14, 345 => 0x3d, 346 => 0x3d, 356 => 0x14 }, 'imagestyle' => { 345 => 0x2d, 346 => 0x27 }, 'imagesupplier' => { 413 => 'ImageSupplier' }, 'imagesupplierid' => { 413 => [\'ImageSupplier','ImageSupplierImageSupplierID'] }, 'imagesupplierimageid' => { 413 => 'ImageSupplierImageID' }, 'imagesuppliername' => { 413 => [\'ImageSupplier','ImageSupplierImageSupplierName'] }, 'imagetemperaturemax' => { 108 => 0x1 }, 'imagetemperaturemin' => { 108 => 0x2 }, 'imagetone' => { 303 => 0x4f }, 'imagetype' => { 114 => 0x82, 413 => 'ImageType' }, 'imageuniqueid' => { 55 => 0x28, 106 => 0xa420, 404 => 'ImageUniqueID' }, 'imagewidth' => { 106 => 0x100, 165 => 0xe, 312 => 0x10c, 421 => 'ImageWidth' }, 'incrementaltemperature' => { 400 => 'IncrementalTemperature' }, 'incrementaltint' => { 400 => 'IncrementalTint' }, 'industry' => { 415 => 'industry', 416 => 'industry' }, 'infobuttonwhenshooting' => { 73 => 0x409 }, 'infraredilluminator' => { 324 => 0x28 }, 'ingredientexclusion' => { 417 => 'ingredientExclusion' }, 'ingredients' => { 426 => 'Ingredients' }, 'ingredientsalternatepaths' => { 426 => [\'Ingredients','IngredientsAlternatePaths'] }, 'ingredientsdocumentid' => { 426 => [\'Ingredients','IngredientsDocumentID'] }, 'ingredientsfilepath' => { 426 => [\'Ingredients','IngredientsFilePath'] }, 'ingredientsfrompart' => { 426 => [\'Ingredients','IngredientsFromPart'] }, 'ingredientsinstanceid' => { 426 => [\'Ingredients','IngredientsInstanceID'] }, 'ingredientslastmodifydate' => { 426 => [\'Ingredients','IngredientsLastModifyDate'] }, 'ingredientsmanager' => { 426 => [\'Ingredients','IngredientsManager'] }, 'ingredientsmanagervariant' => { 426 => [\'Ingredients','IngredientsManagerVariant'] }, 'ingredientsmanageto' => { 426 => [\'Ingredients','IngredientsManageTo'] }, 'ingredientsmanageui' => { 426 => [\'Ingredients','IngredientsManageUI'] }, 'ingredientsmaskmarkers' => { 426 => [\'Ingredients','IngredientsMaskMarkers'] }, 'ingredientsoriginaldocumentid' => { 426 => [\'Ingredients','IngredientsOriginalDocumentID'] }, 'ingredientspartmapping' => { 426 => [\'Ingredients','IngredientsPartMapping'] }, 'ingredientsrenditionclass' => { 426 => [\'Ingredients','IngredientsRenditionClass'] }, 'ingredientsrenditionparams' => { 426 => [\'Ingredients','IngredientsRenditionParams'] }, 'ingredientstopart' => { 426 => [\'Ingredients','IngredientsToPart'] }, 'ingredientsversionid' => { 426 => [\'Ingredients','IngredientsVersionID'] }, 'initialhorizontalfovdegrees' => { 389 => 'InitialHorizontalFOVDegrees' }, 'initialviewheadingdegrees' => { 389 => 'InitialViewHeadingDegrees' }, 'initialviewpitchdegrees' => { 389 => 'InitialViewPitchDegrees' }, 'initialviewrolldegrees' => { 389 => 'InitialViewRollDegrees' }, 'initialzoomliveview' => { 237 => '4.4' }, 'initialzoomsetting' => { 237 => '9.3', 243 => '27.3' }, 'inkset' => { 106 => 0x14c }, 'inputprofile' => { 120 => 0x1389 }, 'instanceid' => { 426 => 'InstanceID' }, 'instantplaybacksetup' => { 161 => 0x3e }, 'instantplaybacktime' => { 161 => 0x3d }, 'instructions' => { 412 => 'Instructions' }, 'instrument' => { 425 => 'instrument' }, 'intellectualgenre' => { 409 => 'IntellectualGenre' }, 'intelligentauto' => { 357 => 0xb052 }, 'intelligentcontrast' => { 44 => 0x4 }, 'intelligentd-range' => { 270 => 0x79 }, 'intelligentexposure' => { 270 => 0x5d }, 'intelligentresolution' => { 270 => 0x70 }, 'interchangecolorspace' => { 116 => 0x40 }, 'internalflash' => { 158 => 0x2b, 237 => '23.1', 239 => '8.1', 240 => '22.1', 242 => '23.1', 245 => '8.1', 248 => '24.1', 253 => 0x1208 }, 'internalflashae1' => { 255 => 0x1021 }, 'internalflashae1_0' => { 255 => 0x101d }, 'internalflashae2' => { 255 => 0x1022 }, 'internalflashae2_0' => { 255 => 0x101e }, 'internalflashmode' => { 291 => 0x1 }, 'internalflashstrength' => { 291 => 0x3 }, 'internalflashtable' => { 255 => 0x1024 }, 'internallensserialnumber' => { 334 => 0xa005 }, 'internalndfilter' => { 270 => 0x9d }, 'internalserialnumber' => { 55 => 0x96, 66 => 0x9, 111 => 0x10, 164 => 0x49dc, 249 => 0x18, 251 => 0x102, 270 => 0x25, 283 => 0x4, 328 => 0x5, 372 => [0x7c,0x88,0xf0] }, 'interopindex' => { 106 => 0x1, 405 => 'InteroperabilityIndex' }, 'interopversion' => { 106 => 0x2 }, 'intervallength' => { 158 => 0x10 }, 'intervalmode' => { 158 => 0x26 }, 'intervalnumber' => { 158 => 0x11 }, 'introtime' => { 425 => 'introTime' }, 'introtimescale' => { 425 => [\'introTime','introTimeScale'] }, 'introtimevalue' => { 425 => [\'introTime','introTimeValue'] }, 'iptc' => { 107 => 'IPTC' }, 'iptc-naa' => { 106 => 0x83bb, 274 => 0x83bb }, 'iptcbitspersample' => { 116 => 0x56 }, 'iptcdigest' => { 317 => 0x425 }, 'iptcimageheight' => { 116 => 0x1e }, 'iptcimagerotation' => { 116 => 0x66 }, 'iptcimagewidth' => { 116 => 0x14 }, 'iptclastedited' => { 410 => 'IptcLastEdited' }, 'iptcpicturenumber' => { 116 => 0xa }, 'iptcpixelheight' => { 116 => 0x32 }, 'iptcpixelwidth' => { 116 => 0x28 }, 'isalternativeof' => { 415 => 'isAlternativeOf' }, 'isbn' => { 415 => 'isbn' }, 'iscorrectionof' => { 415 => 'isCorrectionOf' }, 'iscustompicturestyle' => { 98 => 0x3 }, 'ismergedhdr' => { 396 => 'IsMergedHDR' }, 'ismergedpanorama' => { 396 => 'IsMergedPanorama' }, 'iso' => { 6 => 0x6, 8 => 0x6, 9 => 0x75, 10 => 0x6, 11 => 0x79, 12 => 0x6, 13 => 0x6, 14 => 0x6, 15 => 0x6, 16 => 0x6, 17 => 0x6, 18 => 0x6, 19 => 0x6, 20 => 0x6, 21 => 0x6, 22 => 0x6, 23 => 0x6, 24 => 0x6, 25 => 0x6, 26 => 0x6, 27 => 0x0, 28 => 0x1, 101 => 0x14, 102 => [0x3014,0x14], 106 => 0x8827, 119 => 0xfd06, 120 => 0x1784, 122 => 0x60, 124 => [0xfa2e,0xfa46], 125 => [0x27,0x28], 126 => 0xf105, 129 => 0x14, 131 => 0x4e, 134 => 0x34, 136 => 'ISO', 158 => 0x8, 164 => 0x49ba, 188 => 0x0, 194 => 0x2, 274 => 0x17, 303 => [0x8b,0x14], 310 => 0x14, 312 => 0x105, 334 => 0xa014, 356 => 0x6f, 361 => [0x1f,0x21,0x25], 404 => 'ISOSpeedRatings' }, 'iso2' => { 188 => 0x6, 202 => 0x265, 203 => 0x25c, 204 => 0x265, 205 => 0x221, 206 => 0x25d, 207 => 0x256, 208 => 0x25d, 211 => 0x2b5, 214 => 0x265, 219 => 0x2b5 }, 'isoauto' => { 284 => '14.4' }, 'isoautoparameters' => { 303 => 0x7a }, 'isodisplay' => { 240 => '2.3', 241 => '3.3', 242 => '3.3', 244 => '3.3', 247 => '4.3', 248 => '4.3' }, 'isoexpansion' => { 73 => 0x103, 74 => 0x7, 75 => 0x8, 78 => 0x8, 188 => 0x4 }, 'isoexpansion2' => { 188 => 0xa }, 'isofloor' => { 284 => 0x6 }, 'isoselection' => { 194 => 0xf }, 'isosensitivitystep' => { 244 => '6.2' }, 'isosetting' => { 122 => 0x5e, 136 => 'ISOSetting', 158 => 0x24, 159 => 0x26, 160 => 0x1c, 161 => 0x13, 166 => 0x6, 194 => 0x13, 284 => '17.3', 327 => 0x27, 345 => 0x16, 346 => 0x14, 347 => 0x2, 356 => 0x6d }, 'isospeed' => { 106 => 0x8833, 405 => 'ISOSpeed' }, 'isospeedexpansion' => { 72 => 0x3 }, 'isospeedincrements' => { 73 => 0x102 }, 'isospeedlatitudeyyy' => { 106 => 0x8834, 405 => 'ISOSpeedLatitudeyyy' }, 'isospeedlatitudezzz' => { 106 => 0x8835, 405 => 'ISOSpeedLatitudezzz' }, 'isospeedrange' => { 73 => 0x103 }, 'isostepsize' => { 237 => '6.1', 238 => '7.2', 243 => '4.1', 247 => '7.2' }, 'isovalue' => { 255 => 0x1001 }, 'issn' => { 415 => 'issn' }, 'issueidentifier' => { 415 => 'issueIdentifier' }, 'issuename' => { 415 => 'issueName' }, 'issueteaser' => { 415 => 'issueTeaser' }, 'issuetype' => { 415 => 'issueType' }, 'istranslationof' => { 415 => 'isTranslationOf' }, 'jobid' => { 114 => 0xb8 }, 'jobname' => { 406 => 'JobName' }, 'jobref' => { 424 => 'JobRef' }, 'jobrefid' => { 424 => [\'JobRef','JobRefId'] }, 'jobrefname' => { 424 => [\'JobRef','JobRefName'] }, 'jobrefurl' => { 424 => [\'JobRef','JobRefUrl'] }, 'jobstatus' => { 406 => 'JobStatus' }, 'jpegquality' => { 9 => 0x66, 272 => 0x3034, 357 => 0xb047 }, 'jpegsize' => { 272 => 0x303a }, 'jpgfromraw' => { 86 => 0x2007, 103 => 'JpgFromRaw', 274 => 0x2e }, 'jpgfromrawlength' => { 106 => [0x117,0x202] }, 'jpgfromrawstart' => { 106 => [0x111,0x201] }, 'jpgrecordedpixels' => { 284 => '14.1' }, 'jurisdiction' => { 397 => 'jurisdiction' }, 'kelvinwb_01' => { 292 => 0x5 }, 'kelvinwb_02' => { 292 => 0x9 }, 'kelvinwb_03' => { 292 => 0xd }, 'kelvinwb_04' => { 292 => 0x11 }, 'kelvinwb_05' => { 292 => 0x15 }, 'kelvinwb_06' => { 292 => 0x19 }, 'kelvinwb_07' => { 292 => 0x1d }, 'kelvinwb_08' => { 292 => 0x21 }, 'kelvinwb_09' => { 292 => 0x25 }, 'kelvinwb_10' => { 292 => 0x29 }, 'kelvinwb_11' => { 292 => 0x2d }, 'kelvinwb_12' => { 292 => 0x31 }, 'kelvinwb_13' => { 292 => 0x35 }, 'kelvinwb_14' => { 292 => 0x39 }, 'kelvinwb_15' => { 292 => 0x3d }, 'kelvinwb_16' => { 292 => 0x41 }, 'kelvinwb_daylight' => { 292 => 0x1 }, 'key' => { 425 => 'key' }, 'keyword' => { 415 => 'keyword' }, 'keywordinfo' => { 151 => 'Keywords' }, 'keywords' => { 114 => 0x19, 137 => 'Keywords', 259 => 'Keywords', 319 => 'Keywords', 394 => 'keywords', 411 => 'Keywords', 423 => 'Keywords' }, 'killdate' => { 415 => 'killDate' }, 'killdatea-platform' => { 415 => [\'killDate','killDateA-platform'] }, 'killdatedate' => { 415 => [\'killDate','killDateDate'] }, 'kodakimageheight' => { 119 => 0xf908, 122 => 0xe, 124 => [0xfa1e,0xfa52], 130 => 0x70 }, 'kodakimagewidth' => { 119 => 0xf907, 122 => 0xc, 124 => [0xfa1d,0xfa51], 130 => 0x6c }, 'kodakinfotype' => { 119 => 0xfa00 }, 'kodaklook' => { 120 => 0xe4c }, 'kodaklookprofile' => { 120 => 0x138a }, 'kodakmaker' => { 130 => 0x8 }, 'kodakmodel' => { 122 => 0x0, 130 => 0x28 }, 'label' => { 262 => 'Label', 423 => 'Label' }, 'labelname1' => { 408 => [\'TagStructure','TagStructureLabelName'] }, 'labelname2' => { 408 => [\'TagStructure','TagStructureSubLabelsLabelName'] }, 'labelname3' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabelsLabelName'] }, 'labelname4' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsLabelName'] }, 'labelname5' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsLabelName'] }, 'labelname6' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsLabelName'] }, 'landmark' => { 270 => 0x6f }, 'landscapeoutputhighlightpoint' => { 98 => 0x26 }, 'landscapeoutputshadowpoint' => { 98 => 0x27 }, 'landscaperawcolortone' => { 98 => 0x1f }, 'landscaperawcontrast' => { 98 => 0x21 }, 'landscaperawhighlight' => { 98 => 0x77 }, 'landscaperawhighlightpoint' => { 98 => 0x24 }, 'landscaperawlinear' => { 98 => 0x22 }, 'landscaperawsaturation' => { 98 => 0x20 }, 'landscaperawshadow' => { 98 => 0x80 }, 'landscaperawshadowpoint' => { 98 => 0x25 }, 'landscaperawsharpness' => { 98 => 0x23 }, 'landscapeunsharpmaskfineness' => { 98 => 0xa0 }, 'landscapeunsharpmaskstrength' => { 98 => 0x9e }, 'landscapeunsharpmaskthreshold' => { 98 => 0xa2 }, 'language' => { 401 => 'language' }, 'languageidentifier' => { 114 => 0x87 }, 'largestvalidinteriorrectheight' => { 389 => 'LargestValidInteriorRectHeight' }, 'largestvalidinteriorrectleft' => { 389 => 'LargestValidInteriorRectLeft' }, 'largestvalidinteriorrecttop' => { 389 => 'LargestValidInteriorRectTop' }, 'largestvalidinteriorrectwidth' => { 389 => 'LargestValidInteriorRectWidth' }, 'lastfilenumber' => { 158 => 0x1b }, 'lastkeywordiptc' => { 156 => 'LastKeywordIPTC' }, 'lastkeywordxmp' => { 156 => 'LastKeywordXMP' }, 'lastphotodate' => { 389 => 'LastPhotoDate' }, 'lasturl' => { 426 => 'LastURL' }, 'lateralchromaticaberration' => { 357 => 0x2012 }, 'lateralchromaticaberrationcorrectionalreadyapplied' => { 396 => 'LateralChromaticAberrationCorrectionAlreadyApplied' }, 'latestageorhigheststage' => { 105 => [\'GeologicalContext','GeologicalContextLatestAgeOrHighestStage'] }, 'latesteonorhighesteonothem' => { 105 => [\'GeologicalContext','GeologicalContextLatestEonOrHighestEonothem'] }, 'latestepochorhighestseries' => { 105 => [\'GeologicalContext','GeologicalContextLatestEpochOrHighestSeries'] }, 'latesteraorhighesterathem' => { 105 => [\'GeologicalContext','GeologicalContextLatestEraOrHighestErathem'] }, 'latestperiodorhighestsystem' => { 105 => [\'GeologicalContext','GeologicalContextLatestPeriodOrHighestSystem'] }, 'lc1' => { 294 => 0x2 }, 'lc10' => { 294 => 0xb }, 'lc11' => { 294 => 0xc }, 'lc12' => { 294 => 0xd }, 'lc14' => { 294 => 0xf }, 'lc15' => { 294 => 0x10 }, 'lc3' => { 294 => 0x4 }, 'lc4' => { 294 => 0x5 }, 'lc5' => { 294 => 0x6 }, 'lc6' => { 294 => 0x7 }, 'lc7' => { 294 => 0x8 }, 'lc8' => { 294 => 0x9 }, 'lcddisplayatpoweron' => { 73 => 0x811, 77 => 0xa }, 'lcddisplayreturntoshoot' => { 78 => 0x12 }, 'lcdillumination' => { 237 => '17.5', 238 => '5.2', 243 => '10.3', 244 => '4.2', 247 => '5.2', 248 => '5.4' }, 'lcdilluminationduringbulb' => { 73 => 0x408 }, 'lcdpanels' => { 72 => 0x8 }, 'lcheditor' => { 230 => 0x8ae85e }, 'legacyiptcdigest' => { 412 => 'LegacyIPTCDigest' }, 'legalcode' => { 397 => 'legalcode' }, 'lens' => { 106 => 0xfdea, 194 => 0x84, 396 => 'Lens' }, 'lensafstopbutton' => { 71 => 0x11, 72 => 0x13, 73 => 0x506, 74 => 0x10, 75 => 0x12, 78 => 0x13, 79 => 0x9 }, 'lensaperturerange' => { 337 => [0x30,0x48] }, 'lenscorrectionsettings' => { 403 => 'LensCorrectionSettings' }, 'lensdistortionparams' => { 255 => 0x206 }, 'lensdrivenoaf' => { 73 => 0x505 }, 'lense-mountversion' => { 347 => 0x3f0, 384 => 0xd }, 'lensfirmware' => { 329 => 0x20, 334 => 0xa004 }, 'lensfirmwareversion' => { 251 => 0x204, 270 => 0x60, 347 => 0x3f4, 384 => 0x15 }, 'lensfocallength' => { 92 => 0xf0512, 294 => 0x9 }, 'lensfocalrange' => { 337 => [0xa,0x2a] }, 'lensfocusfunctionbuttons' => { 238 => '55.1', 247 => '52.1' }, 'lensformat' => { 368 => 0x1891, 370 => 0x18bd, 371 => 0x18ed, 372 => 0x106, 380 => 0x603, 381 => 0x5d }, 'lensfstops' => { 189 => 0x7, 190 => 0xc, 191 => 0xd, 194 => 0x8b, 294 => '0.3' }, 'lensid' => { 396 => 'LensID' }, 'lensidnumber' => { 189 => 0x6, 190 => 0xb, 191 => 0xc }, 'lensinfo' => { 106 => 0xa432, 300 => 0x2a, 396 => 'LensInfo', 405 => 'LensSpecification' }, 'lenskind' => { 294 => 0x1 }, 'lensmake' => { 106 => 0xa433, 143 => 'Make', 405 => 'LensMake' }, 'lensmanualdistortionamount' => { 400 => 'LensManualDistortionAmount' }, 'lensmanufacturer' => { 156 => 'LensManufacturer' }, 'lensmaxaperturerange' => { 337 => 0x2b }, 'lensmodel' => { 6 => 0x937, 13 => 0x92b, 14 => 0x933, 55 => 0x95, 106 => 0xa434, 143 => 'Model', 156 => 'LensModel', 192 => 0x18a, 251 => 0x203, 268 => 0x303, 300 => 0xc, 312 => 0x412, 405 => 'LensModel' }, 'lensmount' => { 347 => 0x99, 368 => 0x1892, 370 => 0x18be, 371 => 0x18ee, 372 => 0x105, 380 => 0x604, 381 => 0x5e }, 'lensmount2' => { 384 => 0x8 }, 'lensparameters' => { 365 => 0x1a23, 368 => 0x1870, 370 => 0x189c, 371 => 0x18cc, 380 => 0x6ca, 381 => 0x64 }, 'lensprofilechromaticaberrationscale' => { 400 => 'LensProfileChromaticAberrationScale' }, 'lensprofiledigest' => { 400 => 'LensProfileDigest' }, 'lensprofiledistortionscale' => { 400 => 'LensProfileDistortionScale' }, 'lensprofileenable' => { 400 => 'LensProfileEnable' }, 'lensprofilefilename' => { 400 => 'LensProfileFilename' }, 'lensprofilematchkeycameramodelname' => { 400 => 'LensProfileMatchKeyCameraModelName' }, 'lensprofilematchkeyexifmake' => { 400 => 'LensProfileMatchKeyExifMake' }, 'lensprofilematchkeyexifmodel' => { 400 => 'LensProfileMatchKeyExifModel' }, 'lensprofilematchkeyisraw' => { 400 => 'LensProfileMatchKeyIsRaw' }, 'lensprofilematchkeylensid' => { 400 => 'LensProfileMatchKeyLensID' }, 'lensprofilematchkeylensinfo' => { 400 => 'LensProfileMatchKeyLensInfo' }, 'lensprofilematchkeylensname' => { 400 => 'LensProfileMatchKeyLensName' }, 'lensprofilematchkeysensorformatfactor' => { 400 => 'LensProfileMatchKeySensorFormatFactor' }, 'lensprofilename' => { 400 => 'LensProfileName' }, 'lensprofilesetup' => { 400 => 'LensProfileSetup' }, 'lensprofilevignettingscale' => { 400 => 'LensProfileVignettingScale' }, 'lensproperties' => { 251 => 0x20b }, 'lensserialnumber' => { 20 => 0x164, 29 => 0x16b, 53 => 0x0, 106 => 0xa435, 143 => 'SerialNumber', 251 => 0x202, 270 => 0x52, 329 => 0x30, 396 => 'LensSerialNumber', 405 => 'LensSerialNumber' }, 'lensshutterlock' => { 161 => 0x4a }, 'lensspec' => { 342 => 0x0, 343 => 0x0, 344 => 0x0, 357 => 0xb02a }, 'lensspecfeatures' => { 372 => [0x115,0x116] }, 'lenstemperature' => { 255 => 0x1008 }, 'lenstype' => { 6 => 0xe2, 7 => 0xd, 8 => 0x1a7, 9 => 0xc, 10 => 0x111, 11 => 0xc, 12 => 0x14f, 13 => 0xd6, 14 => 0xde, 15 => 0xf6, 16 => 0xea, 17 => 0xff, 18 => [0xc,0x97], 19 => 0xe6, 20 => 0x153, 21 => 0xea, 22 => 0xe8, 23 => 0x127, 24 => 0x161, 25 => 0x166, 26 => 0x112, 31 => 0x16, 163 => 0x10c, 164 => 0x49bd, 194 => 0x83, 251 => 0x201, 263 => 0x16, 266 => 0x310, 269 => 0x303, 270 => 0x51, 272 => 0x3405, 295 => 0x0, 296 => 0x0, 297 => 0x1, 298 => 0x1, 299 => 0x1, 301 => 0x0, 334 => 0xa003, 337 => 0x27, 357 => 0xb027, 368 => 0x1896, 370 => 0x18c2, 371 => 0x18f2, 372 => 0x109, 380 => 0x608, 381 => 0x62 }, 'lenstype2' => { 347 => 0x3f7, 368 => 0x1893, 370 => 0x18bf, 371 => 0x18ef, 372 => 0x107, 380 => 0x605, 381 => 0x60 }, 'lenstype3' => { 384 => 0x9 }, 'lenszoomposition' => { 378 => 0x19, 379 => 0x1e, 381 => [0x342,0x35a] }, 'levelindicator' => { 277 => 0x15 }, 'levelorientation' => { 302 => 0x0 }, 'license' => { 397 => 'license' }, 'licensee' => { 413 => 'Licensee' }, 'licenseeid' => { 413 => [\'Licensee','LicenseeLicenseeID'] }, 'licenseeimageid' => { 413 => 'LicenseeImageID' }, 'licenseeimagenotes' => { 413 => 'LicenseeImageNotes' }, 'licenseename' => { 413 => [\'Licensee','LicenseeLicenseeName'] }, 'licenseenddate' => { 413 => 'LicenseEndDate' }, 'licenseeprojectreference' => { 413 => 'LicenseeProjectReference' }, 'licenseetransactionid' => { 413 => 'LicenseeTransactionID' }, 'licenseid' => { 413 => 'LicenseID' }, 'licensestartdate' => { 413 => 'LicenseStartDate' }, 'licensetransactiondate' => { 413 => 'LicenseTransactionDate' }, 'licensetype' => { 402 => 'licensetype' }, 'licensor' => { 413 => 'Licensor' }, 'licensorcity' => { 413 => [\'Licensor','LicensorLicensorCity'] }, 'licensorcountry' => { 413 => [\'Licensor','LicensorLicensorCountry'] }, 'licensoremail' => { 413 => [\'Licensor','LicensorLicensorEmail'] }, 'licensorextendedaddress' => { 413 => [\'Licensor','LicensorLicensorExtendedAddress'] }, 'licensorid' => { 413 => [\'Licensor','LicensorLicensorID'] }, 'licensorimageid' => { 413 => 'LicensorImageID' }, 'licensorname' => { 413 => [\'Licensor','LicensorLicensorName'] }, 'licensornotes' => { 413 => 'LicensorNotes' }, 'licensorpostalcode' => { 413 => [\'Licensor','LicensorLicensorPostalCode'] }, 'licensorregion' => { 413 => [\'Licensor','LicensorLicensorRegion'] }, 'licensorstreetaddress' => { 413 => [\'Licensor','LicensorLicensorStreetAddress'] }, 'licensortelephone1' => { 413 => [\'Licensor','LicensorLicensorTelephone1'] }, 'licensortelephone2' => { 413 => [\'Licensor','LicensorLicensorTelephone2'] }, 'licensortelephonetype1' => { 413 => [\'Licensor','LicensorLicensorTelephoneType1'] }, 'licensortelephonetype2' => { 413 => [\'Licensor','LicensorLicensorTelephoneType2'] }, 'licensortransactionid' => { 413 => 'LicensorTransactionID' }, 'licensorurl' => { 413 => [\'Licensor','LicensorLicensorURL'] }, 'lightcondition' => { 255 => 0x1009 }, 'lightingmode' => { 102 => 0x302a }, 'lightreading' => { 303 => 0x15 }, 'lightsource' => { 106 => 0x9208, 194 => 0x90, 258 => 0x1000, 404 => 'LightSource' }, 'lightsourcespecial' => { 336 => 0x21d }, 'lightswitch' => { 247 => '0.1', 248 => '0.1' }, 'lightvaluecenter' => { 255 => 0x103d }, 'lightvalueperiphery' => { 255 => 0x103e }, 'limitafareamodeselection' => { 238 => '51.1', 247 => '49.1' }, 'linearitylimitblue' => { 274 => 0x10 }, 'linearitylimitgreen' => { 274 => 0xf }, 'linearitylimitred' => { 274 => 0xe }, 'linearityuppermargin' => { 38 => [0x2ba,0x2d1,0x2d5], 40 => 0x1e5, 41 => [0x1fe,0x2de], 42 => 0x310 }, 'linearizationtable' => { 106 => 0xc618 }, 'linearresponselimit' => { 106 => 0xc62e }, 'link' => { 415 => 'link' }, 'linkaetoafpoint' => { 284 => '14.2' }, 'linkedencodedrightsexpr' => { 410 => [\'LinkedEncRightsExpr','LinkedEncRightsExprLinkedRightsExpr'] }, 'linkedencodedrightsexprlangid' => { 410 => [\'LinkedEncRightsExpr','LinkedEncRightsExprRightsExprLangId'] }, 'linkedencodedrightsexprtype' => { 410 => [\'LinkedEncRightsExpr','LinkedEncRightsExprRightsExprEncType'] }, 'linkedencrightsexpr' => { 410 => 'LinkedEncRightsExpr' }, 'lithostratigraphicterms' => { 105 => [\'GeologicalContext','GeologicalContextLithostratigraphicTerms'] }, 'liveviewaf' => { 240 => '32.1', 248 => '34.1' }, 'liveviewafareamode' => { 244 => '34.1' }, 'liveviewafmethod' => { 361 => 0x20 }, 'liveviewafmode' => { 244 => '34.2' }, 'liveviewafsetting' => { 347 => 0x36 }, 'liveviewbuttonoptions' => { 238 => '50.2', 247 => '48.2' }, 'liveviewexposuresimulation' => { 73 => 0x810 }, 'liveviewfocusmode' => { 347 => [0x8b,0x28b] }, 'liveviewmetering' => { 347 => [0x84,0x284] }, 'liveviewmonitorofftime' => { 238 => '21.2', 241 => '20.2', 242 => '20.2', 244 => '20.2', 247 => '21.2' }, 'liveviewshooting' => { 49 => 0x13 }, 'localcaption' => { 114 => 0x79 }, 'localizedcameramodel' => { 106 => 0xc615 }, 'locallocationname' => { 334 => 0x30 }, 'location' => { 193 => 0x9, 270 => 0x67, 392 => 'Location', 409 => 'Location', 414 => 'location', 415 => 'location' }, 'locationareacode' => { 398 => 'lac' }, 'locationcreated' => { 410 => 'LocationCreated' }, 'locationcreatedcity' => { 410 => [\'LocationCreated','LocationCreatedCity'] }, 'locationcreatedcountrycode' => { 410 => [\'LocationCreated','LocationCreatedCountryCode'] }, 'locationcreatedcountryname' => { 410 => [\'LocationCreated','LocationCreatedCountryName'] }, 'locationcreatedlocationid' => { 410 => [\'LocationCreated','LocationCreatedLocationId'] }, 'locationcreatedprovincestate' => { 410 => [\'LocationCreated','LocationCreatedProvinceState'] }, 'locationcreatedsublocation' => { 410 => [\'LocationCreated','LocationCreatedSublocation'] }, 'locationcreatedworldregion' => { 410 => [\'LocationCreated','LocationCreatedWorldRegion'] }, 'locationinfoversion' => { 193 => 0x0 }, 'locationname' => { 334 => 0x31 }, 'locationshown' => { 410 => 'LocationShown' }, 'locationshowncity' => { 410 => [\'LocationShown','LocationShownCity'] }, 'locationshowncountrycode' => { 410 => [\'LocationShown','LocationShownCountryCode'] }, 'locationshowncountryname' => { 410 => [\'LocationShown','LocationShownCountryName'] }, 'locationshownlocationid' => { 410 => [\'LocationShown','LocationShownLocationId'] }, 'locationshownprovincestate' => { 410 => [\'LocationShown','LocationShownProvinceState'] }, 'locationshownsublocation' => { 410 => [\'LocationShown','LocationShownSublocation'] }, 'locationshownworldregion' => { 410 => [\'LocationShown','LocationShownWorldRegion'] }, 'lockmicrophonebutton' => { 73 => 0x709 }, 'logcomment' => { 425 => 'logComment' }, 'longexposurenoisereduction' => { 54 => 0x4, 73 => 0x201, 74 => 0x1, 75 => 0x2, 76 => 0x1, 77 => 0x1, 78 => 0x2, 79 => 0x1, 270 => 0x49, 345 => 0x2b, 346 => 0x25, 347 => 0x25, 357 => 0x2008, 361 => 0x11, 381 => 0x44 }, 'longexposurenoisereduction2' => { 49 => 0x8 }, 'loop' => { 425 => 'loop' }, 'lowestbiostratigraphiczone' => { 105 => [\'GeologicalContext','GeologicalContextLowestBiostratigraphicZone'] }, 'luminanceadjustmentaqua' => { 400 => 'LuminanceAdjustmentAqua' }, 'luminanceadjustmentblue' => { 400 => 'LuminanceAdjustmentBlue' }, 'luminanceadjustmentgreen' => { 400 => 'LuminanceAdjustmentGreen' }, 'luminanceadjustmentmagenta' => { 400 => 'LuminanceAdjustmentMagenta' }, 'luminanceadjustmentorange' => { 400 => 'LuminanceAdjustmentOrange' }, 'luminanceadjustmentpurple' => { 400 => 'LuminanceAdjustmentPurple' }, 'luminanceadjustmentred' => { 400 => 'LuminanceAdjustmentRed' }, 'luminanceadjustmentyellow' => { 400 => 'LuminanceAdjustmentYellow' }, 'luminancecurvelimits' => { 97 => 0x150 }, 'luminancecurvepoints' => { 97 => 0x126 }, 'luminancenoisereduction' => { 92 => 0x20600, 98 => 0x5f, 337 => 0x1b }, 'luminancenoisereductioncontrast' => { 400 => 'LuminanceNoiseReductionContrast' }, 'luminancenoisereductiondetail' => { 400 => 'LuminanceNoiseReductionDetail' }, 'luminancenr_tiff_jpeg' => { 98 => 0x6d }, 'luminancesmoothing' => { 400 => 'LuminanceSmoothing' }, 'lvshootingareadisplay' => { 73 => [0x40b,0x40c] }, 'lyrics' => { 425 => 'lyrics' }, 'm16cversion' => { 266 => 0x333 }, 'macatom' => { 399 => 'macAtom' }, 'macatomapplicationcode' => { 399 => [\'macAtom','macAtomApplicationCode'] }, 'macatominvocationappleevent' => { 399 => [\'macAtom','macAtomInvocationAppleEvent'] }, 'macatomposixprojectpath' => { 399 => [\'macAtom','macAtomPosixProjectPath'] }, 'macro' => { 111 => 0x1020, 112 => 0x202, 255 => 0x202, 327 => 0x21, 336 => 0x202, 357 => 0xb040 }, 'macroled' => { 253 => 0x120a }, 'macromagnification' => { 6 => 0x1b, 10 => 0x1b, 13 => 0x1b, 14 => 0x1b, 18 => 0x1b, 19 => 0x1b, 49 => 0x10 }, 'macromode' => { 31 => 0x1, 158 => 0xb, 250 => 0x300, 270 => 0x1c, 328 => 0x1009 }, 'magentahsl' => { 92 => 0x20917 }, 'magicfilter' => { 250 => 0x52c }, 'magnifiedview' => { 75 => 0x11, 77 => 0x9 }, 'maindialexposurecomp' => { 245 => '0.6' }, 'mainingredient' => { 417 => 'mainIngredient' }, 'make' => { 87 => 0x0, 106 => 0x10f, 136 => 'Make', 262 => 'Make', 274 => 0x10f, 414 => 'make', 421 => 'Make' }, 'makernote' => { 404 => 'MakerNote' }, 'makernoteapple' => { 104 => 'MakN', 106 => 0x927c }, 'makernotecanon' => { 104 => 'MakN', 106 => 0x927c }, 'makernotecasio' => { 104 => 'MakN', 106 => 0x927c }, 'makernotecasio2' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteflir' => { 104 => 'MakN', 106 => 0x927c }, 'makernotefujifilm' => { 104 => 'MakN', 106 => 0x927c }, 'makernotege' => { 104 => 'MakN', 106 => 0x927c }, 'makernotege2' => { 104 => 'MakN', 106 => 0x927c }, 'makernotehasselblad' => { 104 => 'MakN', 106 => 0x927c }, 'makernotehp' => { 104 => 'MakN', 106 => 0x927c }, 'makernotehp2' => { 104 => 'MakN', 106 => 0x927c }, 'makernotehp4' => { 104 => 'MakN', 106 => 0x927c }, 'makernotehp6' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteisl' => { 104 => 'MakN', 106 => 0x927c }, 'makernotejvc' => { 104 => 'MakN', 106 => 0x927c }, 'makernotejvctext' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodak10' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodak11' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodak1a' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodak1b' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodak2' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodak3' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodak4' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodak5' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodak6a' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodak6b' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodak7' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodak8a' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodak8b' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodak8c' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodak9' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekodakunknown' => { 104 => 'MakN', 106 => 0x927c }, 'makernotekyocera' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteleica' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteleica2' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteleica3' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteleica4' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteleica5' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteleica6' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteleica7' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteleica8' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteleica9' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteminolta' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteminolta2' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteminolta3' => { 104 => 'MakN', 106 => 0x927c }, 'makernotemotorola' => { 104 => 'MakN', 106 => 0x927c }, 'makernotenikon' => { 104 => 'MakN', 106 => 0x927c }, 'makernotenikon2' => { 104 => 'MakN', 106 => 0x927c }, 'makernotenikon3' => { 104 => 'MakN', 106 => 0x927c }, 'makernotenintendo' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteoffset' => { 336 => 0xff }, 'makernoteolympus' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteolympus2' => { 104 => 'MakN', 106 => 0x927c }, 'makernotepanasonic' => { 104 => 'MakN', 106 => 0x927c }, 'makernotepanasonic2' => { 104 => 'MakN', 106 => 0x927c }, 'makernotepentax' => { 104 => 'MakN', 106 => 0x927c }, 'makernotepentax2' => { 104 => 'MakN', 106 => 0x927c }, 'makernotepentax3' => { 104 => 'MakN', 106 => 0x927c }, 'makernotepentax4' => { 104 => 'MakN', 106 => 0x927c }, 'makernotepentax5' => { 104 => 'MakN', 106 => 0x927c }, 'makernotepentax6' => { 104 => 'MakN', 106 => 0x927c }, 'makernotephaseone' => { 104 => 'MakN', 106 => 0x927c }, 'makernotereconyx' => { 104 => 'MakN', 106 => 0x927c }, 'makernotericoh' => { 104 => 'MakN', 106 => 0x927c }, 'makernotericoh2' => { 104 => 'MakN', 106 => 0x927c }, 'makernotericohtext' => { 104 => 'MakN', 106 => 0x927c }, 'makernotesafety' => { 106 => 0xc635 }, 'makernotesamsung1a' => { 104 => 'MakN', 106 => 0x927c }, 'makernotesamsung1b' => { 104 => 'MakN', 106 => 0x927c }, 'makernotesamsung2' => { 104 => 'MakN', 106 => 0x927c }, 'makernotesanyo' => { 104 => 'MakN', 106 => 0x927c }, 'makernotesanyoc4' => { 104 => 'MakN', 106 => 0x927c }, 'makernotesanyopatch' => { 104 => 'MakN', 106 => 0x927c }, 'makernotesigma' => { 104 => 'MakN', 106 => 0x927c }, 'makernotesony' => { 104 => 'MakN', 106 => 0x927c }, 'makernotesony2' => { 104 => 'MakN', 106 => 0x927c }, 'makernotesony3' => { 104 => 'MakN', 106 => 0x927c }, 'makernotesony4' => { 104 => 'MakN', 106 => 0x927c }, 'makernotesony5' => { 104 => 'MakN', 106 => 0x927c }, 'makernotesonyericsson' => { 104 => 'MakN', 106 => 0x927c }, 'makernotesonysrf' => { 104 => 'MakN', 106 => 0x927c }, 'makernotetype' => { 328 => 0x1 }, 'makernoteunknown' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteunknownbinary' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteunknowntext' => { 104 => 'MakN', 106 => 0x927c }, 'makernoteversion' => { 163 => 0x0, 194 => 0x1, 255 => 0x0, 270 => 0x8000, 332 => 0x0, 334 => 0x1, 337 => [0x1d,0x1f], 348 => 0x2000 }, 'managedfrom' => { 426 => 'ManagedFrom' }, 'managedfromalternatepaths' => { 426 => [\'ManagedFrom','ManagedFromAlternatePaths'] }, 'managedfromdocumentid' => { 426 => [\'ManagedFrom','ManagedFromDocumentID'] }, 'managedfromfilepath' => { 426 => [\'ManagedFrom','ManagedFromFilePath'] }, 'managedfromfrompart' => { 426 => [\'ManagedFrom','ManagedFromFromPart'] }, 'managedfrominstanceid' => { 426 => [\'ManagedFrom','ManagedFromInstanceID'] }, 'managedfromlastmodifydate' => { 426 => [\'ManagedFrom','ManagedFromLastModifyDate'] }, 'managedfrommanager' => { 426 => [\'ManagedFrom','ManagedFromManager'] }, 'managedfrommanagervariant' => { 426 => [\'ManagedFrom','ManagedFromManagerVariant'] }, 'managedfrommanageto' => { 426 => [\'ManagedFrom','ManagedFromManageTo'] }, 'managedfrommanageui' => { 426 => [\'ManagedFrom','ManagedFromManageUI'] }, 'managedfrommaskmarkers' => { 426 => [\'ManagedFrom','ManagedFromMaskMarkers'] }, 'managedfromoriginaldocumentid' => { 426 => [\'ManagedFrom','ManagedFromOriginalDocumentID'] }, 'managedfrompartmapping' => { 426 => [\'ManagedFrom','ManagedFromPartMapping'] }, 'managedfromrenditionclass' => { 426 => [\'ManagedFrom','ManagedFromRenditionClass'] }, 'managedfromrenditionparams' => { 426 => [\'ManagedFrom','ManagedFromRenditionParams'] }, 'managedfromtopart' => { 426 => [\'ManagedFrom','ManagedFromToPart'] }, 'managedfromversionid' => { 426 => [\'ManagedFrom','ManagedFromVersionID'] }, 'manager' => { 426 => 'Manager' }, 'managervariant' => { 426 => 'ManagerVariant' }, 'manageto' => { 426 => 'ManageTo' }, 'manageui' => { 426 => 'ManageUI' }, 'manifest' => { 426 => 'Manifest' }, 'manifestlinkform' => { 426 => [\'Manifest','ManifestLinkForm'] }, 'manifestplacedresolutionunit' => { 426 => [\'Manifest','ManifestPlacedResolutionUnit'] }, 'manifestplacedxresolution' => { 426 => [\'Manifest','ManifestPlacedXResolution'] }, 'manifestplacedyresolution' => { 426 => [\'Manifest','ManifestPlacedYResolution'] }, 'manifestreference' => { 426 => [\'Manifest','ManifestReference'] }, 'manifestreferencealternatepaths' => { 426 => [\'Manifest','ManifestReferenceAlternatePaths'] }, 'manifestreferencedocumentid' => { 426 => [\'Manifest','ManifestReferenceDocumentID'] }, 'manifestreferencefilepath' => { 426 => [\'Manifest','ManifestReferenceFilePath'] }, 'manifestreferencefrompart' => { 426 => [\'Manifest','ManifestReferenceFromPart'] }, 'manifestreferenceinstanceid' => { 426 => [\'Manifest','ManifestReferenceInstanceID'] }, 'manifestreferencelastmodifydate' => { 426 => [\'Manifest','ManifestReferenceLastModifyDate'] }, 'manifestreferencemanager' => { 426 => [\'Manifest','ManifestReferenceManager'] }, 'manifestreferencemanagervariant' => { 426 => [\'Manifest','ManifestReferenceManagerVariant'] }, 'manifestreferencemanageto' => { 426 => [\'Manifest','ManifestReferenceManageTo'] }, 'manifestreferencemanageui' => { 426 => [\'Manifest','ManifestReferenceManageUI'] }, 'manifestreferencemaskmarkers' => { 426 => [\'Manifest','ManifestReferenceMaskMarkers'] }, 'manifestreferenceoriginaldocumentid' => { 426 => [\'Manifest','ManifestReferenceOriginalDocumentID'] }, 'manifestreferencepartmapping' => { 426 => [\'Manifest','ManifestReferencePartMapping'] }, 'manifestreferencerenditionclass' => { 426 => [\'Manifest','ManifestReferenceRenditionClass'] }, 'manifestreferencerenditionparams' => { 426 => [\'Manifest','ManifestReferenceRenditionParams'] }, 'manifestreferencetopart' => { 426 => [\'Manifest','ManifestReferenceToPart'] }, 'manifestreferenceversionid' => { 426 => [\'Manifest','ManifestReferenceVersionID'] }, 'manometerpressure' => { 250 => 0x900, 270 => 0x86 }, 'manometerreading' => { 250 => 0x901 }, 'manualafpointselectpattern' => { 73 => 0x513 }, 'manualflash' => { 253 => 0x1209 }, 'manualflashoutput' => { 31 => 0x29, 239 => '8.2', 240 => '22.2', 241 => '23.1', 242 => '23.2', 243 => '16.2', 244 => '23.2', 245 => '8.2', 246 => '23.2', 248 => '24.2', 328 => 0x100c }, 'manualflashstrength' => { 250 => 0x406 }, 'manualfocusdistance' => { 194 => 0x85, 255 => 0x100c, 336 => 0x223 }, 'manualtv' => { 72 => 0x5, 73 => 0x705 }, 'manufacturedate' => { 168 => 0x6705, 283 => 0x1 }, 'manufacturedate1' => { 330 => 0x4 }, 'manufacturedate2' => { 330 => 0x5 }, 'manufacturer' => { 414 => 'manufacturer' }, 'marked' => { 411 => 'Marked', 429 => 'Marked' }, 'markers' => { 425 => 'markers' }, 'markerscomment' => { 425 => [\'markers','markersComment'] }, 'markerscuepointparams' => { 425 => [\'markers','markersCuePointParams'] }, 'markerscuepointparamskey' => { 425 => [\'markers','markersCuePointParamsKey'] }, 'markerscuepointparamsvalue' => { 425 => [\'markers','markersCuePointParamsValue'] }, 'markerscuepointtype' => { 425 => [\'markers','markersCuePointType'] }, 'markersduration' => { 425 => [\'markers','markersDuration'] }, 'markerslocation' => { 425 => [\'markers','markersLocation'] }, 'markersname' => { 425 => [\'markers','markersName'] }, 'markersprobability' => { 425 => [\'markers','markersProbability'] }, 'markersspeaker' => { 425 => [\'markers','markersSpeaker'] }, 'markersstarttime' => { 425 => [\'markers','markersStartTime'] }, 'markerstarget' => { 425 => [\'markers','markersTarget'] }, 'markerstype' => { 425 => [\'markers','markersType'] }, 'maskedareas' => { 106 => 0xc68e }, 'masterdocumentid' => { 114 => 0xb9 }, 'mastergain' => { 200 => 0x50 }, 'matrixmetering' => { 238 => '50.1', 247 => '48.1' }, 'maxaperture' => { 31 => 0x1a, 126 => 0x6103, 143 => 'MaxAperture', 158 => 0x17, 164 => 0x49c5, 251 => 0x20a, 294 => '14.1', 372 => 0x0 }, 'maxapertureatmaxfocal' => { 111 => 0x1407, 143 => 'MaxApertureAtMaxFocal', 189 => 0xb, 190 => 0x10, 191 => 0x11, 251 => 0x206 }, 'maxapertureatminfocal' => { 111 => 0x1406, 189 => 0xa, 190 => 0xf, 191 => 0x10, 251 => 0x205 }, 'maxaperturevalue' => { 106 => 0x9205, 312 => 0x414, 404 => 'MaxApertureValue' }, 'maxavailheight' => { 410 => 'MaxAvailHeight' }, 'maxavailwidth' => { 410 => 'MaxAvailWidth' }, 'maxcontinuousrelease' => { 237 => 0xb, 238 => 0xc, 243 => 0xc, 244 => 0xb, 247 => '12.1' }, 'maxfaces' => { 254 => 0x1202 }, 'maxfocallength' => { 6 => 0xe6, 7 => 0x10, 8 => 0x1ab, 9 => 0x13, 10 => 0x115, 11 => 0x13, 12 => 0x153, 13 => 0xda, 15 => 0xfa, 16 => 0xee, 17 => 0x103, 18 => 0x95, 19 => 0xea, 20 => 0x157, 21 => 0xee, 22 => 0xec, 23 => 0x12b, 24 => 0x165, 25 => 0x16a, 26 => 0x116, 31 => 0x17, 111 => 0x1405, 143 => 'MaxFocalLength', 189 => 0x9, 190 => 0xe, 191 => 0xf, 251 => 0x208, 368 => 0x127c, 369 => 0x1138, 370 => 0x330, 371 => 0x330 }, 'maximumdensityrange' => { 116 => 0x8c }, 'maxpagesize' => { 430 => 'MaxPageSize' }, 'maxpagesizeh' => { 430 => [\'MaxPageSize','MaxPageSizeH'] }, 'maxpagesizeunit' => { 430 => [\'MaxPageSize','MaxPageSizeUnit'] }, 'maxpagesizew' => { 430 => [\'MaxPageSize','MaxPageSizeW'] }, 'maxsamplevalue' => { 106 => 0x119 }, 'maxstorage' => { 420 => 'maxstorage' }, 'mb-d10batteries' => { 237 => '12.6' }, 'mb-d10batterytype' => { 243 => '13.3' }, 'mb-d11batterytype' => { 244 => '2.3' }, 'mb-d12batterytype' => { 247 => '3.2' }, 'mb-d80batteries' => { 245 => '6.5' }, 'mb-d80batterytype' => { 248 => '3.2' }, 'mcuversion' => { 189 => 0xc, 190 => 0x11, 191 => 0x12 }, 'md5digest' => { 144 => 'zmd5' }, 'meal' => { 417 => 'meal' }, 'measuredev' => { 26 => 0x9, 67 => 0x3, 86 => 0x1814, 136 => 'MeasuredEV' }, 'measuredev2' => { 12 => 0x8, 26 => 0x8, 67 => 0x17 }, 'measuredev3' => { 12 => 0x9 }, 'measuredlv' => { 164 => 0x690, 266 => 0x312, 272 => 0x3407 }, 'measuredrggb' => { 56 => 0x1 }, 'measuredrggbdata' => { 37 => 0x287 }, 'measurementaccuracy' => { 105 => [\'MeasurementOrFact','MeasurementOrFactMeasurementAccuracy'] }, 'measurementdeterminedby' => { 105 => [\'MeasurementOrFact','MeasurementOrFactMeasurementDeterminedBy'] }, 'measurementdetermineddate' => { 105 => [\'MeasurementOrFact','MeasurementOrFactMeasurementDeterminedDate'] }, 'measurementid' => { 105 => [\'MeasurementOrFact','MeasurementOrFactMeasurementID'] }, 'measurementmethod' => { 105 => [\'MeasurementOrFact','MeasurementOrFactMeasurementMethod'] }, 'measurementorfact' => { 105 => 'MeasurementOrFact' }, 'measurementremarks' => { 105 => [\'MeasurementOrFact','MeasurementOrFactMeasurementRemarks'] }, 'measurementtype' => { 105 => [\'MeasurementOrFact','MeasurementOrFactMeasurementType'] }, 'measurementunit' => { 105 => [\'MeasurementOrFact','MeasurementOrFactMeasurementUnit'] }, 'measurementvalue' => { 105 => [\'MeasurementOrFact','MeasurementOrFactMeasurementValue'] }, 'mediaconstraints' => { 413 => 'MediaConstraints' }, 'mediacreatedate' => { 320 => 0x1 }, 'mediamodifydate' => { 320 => 0x2 }, 'mediasummarycode' => { 413 => 'MediaSummaryCode' }, 'memoaudioquality' => { 73 => 0x812 }, 'memorycardconfiguration' => { 351 => 0x16 }, 'menubuttondisplayposition' => { 71 => 0xb, 74 => 0xa, 75 => 0xb, 78 => 0xb }, 'menubuttonreturn' => { 79 => 0xb }, 'menumonitorofftime' => { 237 => '26.1', 238 => '22.1', 243 => '8.2', 244 => '21.1', 247 => '22.1', 248 => '22.1' }, 'metadatadate' => { 423 => 'MetadataDate' }, 'metadatamoddate' => { 425 => 'metadataModDate' }, 'metaversion' => { 363 => 0x34 }, 'meterinfo1row1' => { 358 => 0x0 }, 'meterinfo1row2' => { 358 => 0x6c }, 'meterinfo1row3' => { 358 => 0xd8 }, 'meterinfo1row4' => { 358 => 0x144 }, 'meterinfo1row5' => { 358 => 0x1b0 }, 'meterinfo1row6' => { 358 => 0x21c }, 'meterinfo1row7' => { 358 => 0x288 }, 'meterinfo2row1' => { 358 => 0x2f4 }, 'meterinfo2row2' => { 358 => 0x378 }, 'meterinfo2row3' => { 358 => 0x3fc }, 'meterinfo2row4' => { 358 => 0x480 }, 'meterinfo2row5' => { 358 => 0x504 }, 'meterinfo2row6' => { 358 => 0x588 }, 'meterinfo2row7' => { 358 => 0x60c }, 'meterinfo2row8' => { 358 => 0x690 }, 'meterinfo2row9' => { 358 => 0x714 }, 'metering' => { 239 => '6.1' }, 'meteringmode' => { 31 => 0x11, 106 => 0x9207, 122 => 0x1c, 158 => 0x7, 159 => 0x25, 161 => 0x12, 250 => 0x202, 303 => 0x17, 337 => 0x9, 345 => 0x15, 346 => 0x13, 347 => 0x7, 361 => 0x3, 364 => 0x1174, 365 => 0x1178, 366 => 0x1154, 367 => 0x11d0, 368 => 0x11ac, 369 => 0x1064, 370 => 0x25c, 371 => 0x25c, 404 => 'MeteringMode' }, 'meteringmode2' => { 284 => '2.1' }, 'meteringmode3' => { 284 => '16.1' }, 'meteringoffscaleindicator' => { 161 => 0x53 }, 'meteringtime' => { 237 => '22.2', 239 => '3.2', 240 => '17.1', 241 => '18.1', 243 => '7.3', 244 => '18.1', 245 => '3.2', 248 => '19.1' }, 'mieversion' => { 144 => '0Vers' }, 'minaperture' => { 31 => 0x1b, 143 => 'MinAperture', 294 => '0.2', 372 => 0x1 }, 'minaperturevalue' => { 312 => 0x415 }, 'minfocallength' => { 6 => 0xe4, 7 => 0xe, 8 => 0x1a9, 9 => 0x11, 10 => 0x113, 11 => 0x11, 12 => 0x151, 13 => 0xd8, 15 => 0xf8, 16 => 0xec, 17 => 0x101, 18 => 0x93, 19 => 0xe8, 20 => 0x155, 21 => 0xec, 22 => 0xea, 23 => 0x129, 24 => 0x163, 25 => 0x168, 26 => 0x114, 31 => 0x18, 111 => 0x1404, 143 => 'MinFocalLength', 189 => 0x8, 190 => 0xd, 191 => 0xe, 251 => 0x207, 368 => 0x127a, 369 => 0x1136, 370 => 0x32e, 371 => 0x32e }, 'minfocusdistance' => { 294 => 0x3 }, 'minoltadate' => { 158 => 0x15 }, 'minoltaimagesize' => { 158 => 0x4, 159 => 0xc, 160 => 0x2, 163 => 0x103 }, 'minoltamodelid' => { 158 => 0x25 }, 'minoltaquality' => { 158 => 0x5, 159 => 0xd, 160 => 0x3, 163 => [0x102,0x103] }, 'minoltatime' => { 158 => 0x16 }, 'minormodelagedisclosure' => { 413 => 'MinorModelAgeDisclosure' }, 'minsamplevalue' => { 106 => 0x118 }, 'mirrorlockup' => { 71 => 0xc, 72 => 0xc, 73 => 0x60f, 74 => 0xb, 75 => 0xc, 76 => 0x6, 77 => 0x6, 78 => 0xc, 79 => 0x3 }, 'mobilecountrycode' => { 398 => 'mcc' }, 'mobilenetworkcode' => { 398 => 'mnc' }, 'moddate' => { 262 => 'modify-date', 411 => 'ModDate' }, 'modedialposition' => { 351 => 0x14 }, 'model' => { 87 => 0x6, 106 => 0x110, 136 => 'Model', 262 => 'Model', 274 => 0x110, 414 => 'model', 421 => 'Model' }, 'modelage' => { 410 => 'ModelAge' }, 'modelid' => { 249 => 0x0 }, 'modelingflash' => { 237 => '21.4', 238 => '31.1', 243 => '26.4', 244 => '30.2', 245 => '7.4', 246 => '30.1', 247 => '31.1', 248 => '31.3' }, 'modelreleaseid' => { 413 => 'ModelReleaseID' }, 'modelreleasestatus' => { 413 => 'ModelReleaseStatus' }, 'modelreleaseyear' => { 373 => 0x52, 374 => 0x46, 375 => 0x53 }, 'modelyear' => { 414 => 'modelYear' }, 'modificationdate' => { 415 => 'modificationDate' }, 'modifiedcolortemp' => { 57 => 0x9 }, 'modifieddigitalgain' => { 57 => 0xb }, 'modifiedparamflag' => { 50 => 0x1 }, 'modifiedpicturestyle' => { 57 => 0xa }, 'modifiedsaturation' => { 250 => 0x504 }, 'modifiedsensorbluelevel' => { 57 => 0x5 }, 'modifiedsensorredlevel' => { 57 => 0x4 }, 'modifiedsharpness' => { 57 => 0x2 }, 'modifiedsharpnessfreq' => { 57 => 0x3 }, 'modifiedtonecurve' => { 57 => 0x1 }, 'modifiedwhitebalance' => { 57 => 0x8 }, 'modifiedwhitebalanceblue' => { 57 => 0x7 }, 'modifiedwhitebalancered' => { 57 => 0x6 }, 'modifydate' => { 106 => 0x132, 137 => 'ModifyDate', 259 => 'ModDate', 260 => 'tIME', 319 => 'ModDate', 321 => 0x2, 423 => 'ModifyDate' }, 'moirefilter' => { 106 => 0xfe58, 400 => 'MoireFilter' }, 'monitordisplayoff' => { 161 => 0x4c }, 'monitorofftime' => { 237 => '18.2', 239 => '3.1', 245 => '3.1' }, 'monochromecontrast' => { 98 => 0x3c }, 'monochromefiltereffect' => { 92 => 0x20307, 98 => 0x3a, 303 => 0x73 }, 'monochromelinear' => { 98 => 0x3d }, 'monochromeoutputhighlightpoint' => { 98 => 0x41 }, 'monochromeoutputshadowpoint' => { 98 => 0x42 }, 'monochromerawhighlight' => { 98 => 0x7a }, 'monochromerawhighlightpoint' => { 98 => 0x3f }, 'monochromerawshadow' => { 98 => 0x83 }, 'monochromerawshadowpoint' => { 98 => 0x40 }, 'monochromesharpness' => { 98 => 0x3e }, 'monochrometoning' => { 303 => 0x74 }, 'monochrometoningeffect' => { 92 => 0x20306, 98 => 0x3b }, 'monochromeunsharpmaskfineness' => { 98 => 0xb2 }, 'monochromeunsharpmaskstrength' => { 98 => 0xb0 }, 'monochromeunsharpmaskthreshold' => { 98 => 0xb4 }, 'monthdaycreated' => { 122 => 0x12, 131 => 0xe }, 'moonphase' => { 324 => 0x12 }, 'morepermissions' => { 397 => 'morePermissions' }, 'motionsensitivity' => { 324 => 0x29 }, 'movieaelockbuttonassignment' => { 247 => '40.1' }, 'moviefunctionbutton' => { 238 => '41.1', 247 => '41.1' }, 'moviefunctionbuttonplusdials' => { 238 => '52.1' }, 'moviepreviewbutton' => { 238 => '41.2', 247 => '41.2' }, 'moviepreviewbuttonplusdials' => { 238 => '52.2' }, 'movieshutterbutton' => { 238 => '38.3', 247 => '38.3' }, 'moviesubselectorassignment' => { 238 => '48.2' }, 'moviesubselectorassignmentplusdials' => { 238 => '53.1' }, 'multiburstimageheight' => { 357 => 0x1002 }, 'multiburstimagewidth' => { 357 => 0x1001 }, 'multiburstmode' => { 357 => 0x1000 }, 'multicontrollerwhilemetering' => { 73 => 0x517 }, 'multiexposure' => { 59 => 0x1 }, 'multiexposureautogain' => { 195 => 0x3 }, 'multiexposurecontrol' => { 59 => 0x2 }, 'multiexposuremode' => { 195 => 0x1 }, 'multiexposureshots' => { 59 => 0x3, 195 => 0x2 }, 'multiframenoisereduction' => { 347 => 0x35, 357 => 0x200b, 361 => 0x15 }, 'multifunctionlock' => { 73 => 0x70f }, 'multipleexposuremode' => { 254 => 0x101c }, 'multipleexposureset' => { 284 => '10.1' }, 'multisample' => { 200 => 0x40 }, 'multiselector' => { 237 => '9.4', 238 => '10.3', 243 => '27.4', 247 => '10.3' }, 'multiselectorliveview' => { 237 => '4.3', 247 => '37.1' }, 'multiselectorliveviewmode' => { 210 => 0x18c2 }, 'multiselectorplaybackmode' => { 237 => ['13.5','9.2'], 238 => '10.2', 243 => '27.2', 247 => '10.2' }, 'multiselectorshootmode' => { 237 => '9.1', 238 => '10.1', 243 => '27.1', 247 => '10.1' }, 'mycolormode' => { 60 => 0x2 }, 'nationalcatalognumber' => { 415 => 'nationalCatalogNumber' }, 'nativedigest' => { 404 => 'NativeDigest', 421 => 'NativeDigest' }, 'ncdfileinfo' => { 120 => 0x414 }, 'ndfilter' => { 67 => 0x1c, 250 => 0x204, 328 => 0x1019 }, 'nefbitdepth' => { 194 => 0xe22 }, 'nefcompression' => { 194 => 0x93 }, 'neflinearizationtable' => { 194 => 0x96 }, 'neutraldensityfilter' => { 303 => 0x88 }, 'neutraloutputhighlightpoint' => { 98 => 0x2f }, 'neutraloutputshadowpoint' => { 98 => 0x30 }, 'neutralrawcolortone' => { 98 => 0x28 }, 'neutralrawcontrast' => { 98 => 0x2a }, 'neutralrawhighlight' => { 98 => 0x78 }, 'neutralrawhighlightpoint' => { 98 => 0x2d }, 'neutralrawlinear' => { 98 => 0x2b }, 'neutralrawsaturation' => { 98 => 0x29 }, 'neutralrawshadow' => { 98 => 0x81 }, 'neutralrawshadowpoint' => { 98 => 0x2e }, 'neutralrawsharpness' => { 98 => 0x2c }, 'neutralunsharpmaskfineness' => { 98 => 0xa6 }, 'neutralunsharpmaskthreshold' => { 98 => 0xa8 }, 'neutraunsharpmaskstrength' => { 98 => 0xa4 }, 'newrawimagedigest' => { 106 => 0xc7a7 }, 'newsphotoversion' => { 116 => 0x0 }, 'nickname' => { 423 => 'Nickname' }, 'nikoncapturedata' => { 194 => 0xe01 }, 'nikoncaptureeditversions' => { 194 => 0xe13 }, 'nikoncaptureoutput' => { 194 => 0xe1e }, 'nikoncaptureversion' => { 194 => 0xe09 }, 'nikoniccprofile' => { 194 => 0xe1d }, 'nikonimagesize' => { 207 => '723.1', 208 => '732.1', 216 => 0x2c4 }, 'noisefilter' => { 250 => 0x527 }, 'noiseprofile' => { 106 => 0xc761 }, 'noisereduction' => { 111 => 0x100b, 159 => 0xb0, 160 => 0x60, 161 => 0x3f, 194 => 0x95, 230 => 0x753dcbc0, 231 => 0x17, 250 => 0x50a, 255 => 0x103a, 270 => 0x2d, 303 => 0x49, 328 => 0x100f, 330 => 0x2a }, 'noisereduction2' => { 254 => 0x1010 }, 'noisereductionapplied' => { 106 => 0xc6f7 }, 'noisereductionintensity' => { 231 => 0x9 }, 'noisereductionmethod' => { 231 => 0x11 }, 'noisereductionmode' => { 385 => 0x801e }, 'noisereductionsharpness' => { 231 => 0xd }, 'noisereductionvalue' => { 385 => 0x8027 }, 'nomemorycard' => { 237 => '22.1', 238 => '4.2', 239 => '0.3', 240 => '2.4', 241 => '3.2', 242 => '3.2', 243 => '33.7', 244 => '3.2', 245 => '0.3', 247 => '4.2', 248 => '4.5' }, 'nominalmaxaperture' => { 294 => 0xa }, 'nominalminaperture' => { 294 => '10.1' }, 'normalwhitelevel' => { 38 => [0x2b8,0x2cf,0x2d3], 40 => 0x1e3, 41 => [0x1fc,0x2dc], 42 => 0x30e }, 'notes' => { 386 => 'Notes', 394 => 'notes' }, 'npages' => { 430 => 'NPages' }, 'nrwdata' => { 194 => 0x14 }, 'nullrecord' => { 86 => 0x0 }, 'number' => { 415 => 'number' }, 'numberofbeats' => { 425 => 'numberOfBeats' }, 'numberoffocuspoints' => { 242 => '0.2', 244 => '0.3' }, 'numfacepositions' => { 264 => 0x0 }, 'numindexentries' => { 116 => 0x54 }, 'numwbentries' => { 275 => 0x0, 276 => 0x0 }, 'object' => { 415 => 'object' }, 'objectattributereference' => { 114 => 0x4 }, 'objectcycle' => { 114 => 0x4b }, 'objectdescription' => { 414 => 'objectDescription' }, 'objectdistance' => { 101 => 0x6, 102 => 0x2022 }, 'objectname' => { 114 => 0x5 }, 'objectpreviewdata' => { 114 => 0xca }, 'objectpreviewfileformat' => { 114 => 0xc8 }, 'objectpreviewfileversion' => { 114 => 0xc9 }, 'objectsubtype' => { 414 => 'objectSubtype' }, 'objecttype' => { 414 => 'objectType' }, 'objecttypereference' => { 114 => 0x3 }, 'occurrence' => { 105 => 'Occurrence' }, 'occurrenceassociatedmedia' => { 105 => [\'Occurrence','OccurrenceAssociatedMedia'] }, 'occurrenceassociatedoccurrences' => { 105 => [\'Occurrence','OccurrenceAssociatedOccurrences'] }, 'occurrenceassociatedreferences' => { 105 => [\'Occurrence','OccurrenceAssociatedReferences'] }, 'occurrenceassociatedsequences' => { 105 => [\'Occurrence','OccurrenceAssociatedSequences'] }, 'occurrenceassociatedtaxa' => { 105 => [\'Occurrence','OccurrenceAssociatedTaxa'] }, 'occurrencebehavior' => { 105 => [\'Occurrence','OccurrenceBehavior'] }, 'occurrencecatalognumber' => { 105 => [\'Occurrence','OccurrenceCatalogNumber'] }, 'occurrencedetails' => { 105 => [\'Occurrence','OccurrenceOccurrenceDetails'] }, 'occurrencedisposition' => { 105 => [\'Occurrence','OccurrenceDisposition'] }, 'occurrenceestablishmentmeans' => { 105 => [\'Occurrence','OccurrenceEstablishmentMeans'] }, 'occurrenceid' => { 105 => [\'Occurrence','OccurrenceOccurrenceID'] }, 'occurrenceindividualcount' => { 105 => [\'Occurrence','OccurrenceIndividualCount'] }, 'occurrenceindividualid' => { 105 => [\'Occurrence','OccurrenceIndividualID'] }, 'occurrencelifestage' => { 105 => [\'Occurrence','OccurrenceLifeStage'] }, 'occurrenceothercatalognumbers' => { 105 => [\'Occurrence','OccurrenceOtherCatalogNumbers'] }, 'occurrencepreparations' => { 105 => [\'Occurrence','OccurrencePreparations'] }, 'occurrencepreviousidentifications' => { 105 => [\'Occurrence','OccurrencePreviousIdentifications'] }, 'occurrencerecordedby' => { 105 => [\'Occurrence','OccurrenceRecordedBy'] }, 'occurrencerecordnumber' => { 105 => [\'Occurrence','OccurrenceRecordNumber'] }, 'occurrenceremarks' => { 105 => [\'Occurrence','OccurrenceOccurrenceRemarks'] }, 'occurrencereproductivecondition' => { 105 => [\'Occurrence','OccurrenceReproductiveCondition'] }, 'occurrencesex' => { 105 => [\'Occurrence','OccurrenceSex'] }, 'occurrencestatus' => { 105 => [\'Occurrence','OccurrenceOccurrenceStatus'] }, 'oecfcolumns' => { 404 => [\'OECF','OECFColumns'] }, 'oecfnames' => { 404 => [\'OECF','OECFNames'] }, 'oecfrows' => { 404 => [\'OECF','OECFRows'] }, 'oecfvalues' => { 404 => [\'OECF','OECFValues'] }, 'offsaledate' => { 415 => 'offSaleDate' }, 'offsaledatea-platform' => { 415 => [\'offSaleDate','offSaleDateA-platform'] }, 'offsaledatedate' => { 415 => [\'offSaleDate','offSaleDateDate'] }, 'offsetschema' => { 106 => 0xea1d }, 'okbutton' => { 244 => '15.1', 248 => '16.1' }, 'oldsubfiletype' => { 106 => 0xff }, 'olympusimageheight' => { 255 => 0x102f }, 'olympusimagewidth' => { 255 => 0x102e }, 'onetouchwb' => { 255 => 0x302 }, 'onsaledate' => { 415 => 'onSaleDate' }, 'onsaledatea-platform' => { 415 => [\'onSaleDate','onSaleDateA-platform'] }, 'onsaledatedate' => { 415 => [\'onSaleDate','onSaleDateDate'] }, 'onsaleday' => { 415 => 'onSaleDay' }, 'onsaledaya-platform' => { 415 => [\'onSaleDay','onSaleDayA-platform'] }, 'onsaledayday' => { 415 => [\'onSaleDay','onSaleDayDay'] }, 'opticalzoom' => { 124 => 0xfa3d, 126 => [0x6006,0xf006], 127 => 0x1000, 128 => 0xf, 131 => 0x1e, 143 => 'OpticalZoom' }, 'opticalzoomcode' => { 67 => 0xa }, 'opticalzoommode' => { 270 => 0x34 }, 'opticalzoomon' => { 336 => 0x219 }, 'optionenddate' => { 418 => 'optionEndDate' }, 'opto-electricconvfactor' => { 404 => 'OECF' }, 'orangehsl' => { 92 => 0x20911 }, 'ordernumber' => { 111 => 0x8002 }, 'organisationinimagecode' => { 410 => 'OrganisationInImageCode' }, 'organisationinimagename' => { 410 => 'OrganisationInImageName' }, 'organization' => { 415 => 'organization' }, 'orientation' => { 106 => 0x112, 274 => 0x112, 414 => 'orientation', 421 => 'Orientation' }, 'orientation2' => { 361 => [0x28,0x2e] }, 'orientationlinkedafpoint' => { 73 => 0x516 }, 'originalbestqualitysize' => { 106 => 0xc792 }, 'originaldecisiondata' => { 103 => 'OriginalDecisionData' }, 'originaldecisiondataoffset' => { 55 => 0x83 }, 'originaldefaultcropsize' => { 106 => 0xc793 }, 'originaldefaultfinalsize' => { 106 => 0xc791 }, 'originaldirectory' => { 268 => 0x408 }, 'originaldocumentid' => { 426 => 'OriginalDocumentID' }, 'originalfilename' => { 86 => 0x816, 120 => 0x3e9, 132 => 0x20, 268 => 0x407, 390 => 'OriginalFilename' }, 'originalimageheight' => { 69 => 0xc, 110 => 0x1 }, 'originalimagewidth' => { 69 => 0xb, 110 => 0x0 }, 'originalrawfiledata' => { 106 => 0xc68c }, 'originalrawfiledigest' => { 106 => 0xc71d }, 'originalrawfilename' => { 106 => 0xc68b }, 'originaltransmissionreference' => { 114 => 0x67 }, 'originatingprogram' => { 114 => 0x41 }, 'originplatform' => { 415 => 'originPlatform' }, 'os' => { 402 => 'os' }, 'otherconditions' => { 413 => 'OtherConditions' }, 'otherconstraints' => { 413 => 'OtherConstraints' }, 'otherimage' => { 103 => 'OtherImage' }, 'otherimageinfo' => { 413 => 'OtherImageInfo' }, 'otherimagelength' => { 106 => 0x202 }, 'otherimagestart' => { 106 => 0x201 }, 'otherlicensedocuments' => { 413 => 'OtherLicenseDocuments' }, 'otherlicenseinfo' => { 413 => 'OtherLicenseInfo' }, 'otherlicenserequirements' => { 413 => 'OtherLicenseRequirements' }, 'outcue' => { 425 => 'outCue' }, 'outcuescale' => { 425 => [\'outCue','outCueScale'] }, 'outcuevalue' => { 425 => [\'outCue','outCueValue'] }, 'outputimageheight' => { 173 => 0x3 }, 'outputimagewidth' => { 173 => 0x2 }, 'outputprofile' => { 120 => 0x138b }, 'outputresolution' => { 173 => 0x4 }, 'owner' => { 429 => 'Owner' }, 'ownerid' => { 114 => 0xbc }, 'ownername' => { 14 => 0x10f, 55 => 0x9, 86 => 0x810, 106 => [0xa430,0xfde8], 136 => 'OwnerName', 396 => 'OwnerName', 405 => 'CameraOwnerName' }, 'padding' => { 106 => 0xea1c }, 'pagecount' => { 415 => 'pageCount' }, 'pageimage' => { 423 => [\'PageInfo','PageInfoImage'] }, 'pageimageformat' => { 423 => [\'PageInfo','PageInfoFormat'] }, 'pageimageheight' => { 423 => [\'PageInfo','PageInfoHeight'] }, 'pageimagepagenumber' => { 423 => [\'PageInfo','PageInfoPageNumber'] }, 'pageimagewidth' => { 423 => [\'PageInfo','PageInfoWidth'] }, 'pageinfo' => { 423 => 'PageInfo' }, 'pagename' => { 106 => 0x11d }, 'pagenumber' => { 106 => 0x129 }, 'pageprogressiondirection' => { 415 => 'pageProgressionDirection' }, 'pagerange' => { 415 => 'pageRange' }, 'paintbasedcorrectionmasks' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasks'] }, 'paintbasedcorrections' => { 400 => 'PaintBasedCorrections' }, 'paintcorrectionactive' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionActive'] }, 'paintcorrectionamount' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionAmount'] }, 'paintcorrectionbrightness' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalBrightness'] }, 'paintcorrectionclarity' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalClarity'] }, 'paintcorrectionclarity2012' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalClarity2012'] }, 'paintcorrectioncontrast' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalContrast'] }, 'paintcorrectioncontrast2012' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalContrast2012'] }, 'paintcorrectiondefringe' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalDefringe'] }, 'paintcorrectionexposure' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalExposure'] }, 'paintcorrectionexposure2012' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalExposure2012'] }, 'paintcorrectionhighlights2012' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalHighlights2012'] }, 'paintcorrectionhue' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalToningHue'] }, 'paintcorrectionluminancenoise' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalLuminanceNoise'] }, 'paintcorrectionmaskalpha' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksAlpha'] }, 'paintcorrectionmaskangle' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksAngle'] }, 'paintcorrectionmaskbottom' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksBottom'] }, 'paintcorrectionmaskcentervalue' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksCenterValue'] }, 'paintcorrectionmaskcenterweight' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksCenterWeight'] }, 'paintcorrectionmaskdabs' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksDabs'] }, 'paintcorrectionmaskfeather' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksFeather'] }, 'paintcorrectionmaskflipped' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksFlipped'] }, 'paintcorrectionmaskflow' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksFlow'] }, 'paintcorrectionmaskfullx' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksFullX'] }, 'paintcorrectionmaskfully' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksFullY'] }, 'paintcorrectionmaskleft' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksLeft'] }, 'paintcorrectionmaskmidpoint' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksMidpoint'] }, 'paintcorrectionmaskperimetervalue' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksPerimeterValue'] }, 'paintcorrectionmaskradius' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksRadius'] }, 'paintcorrectionmaskright' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksRight'] }, 'paintcorrectionmaskroundness' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksRoundness'] }, 'paintcorrectionmasksizex' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksSizeX'] }, 'paintcorrectionmasksizey' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksSizeY'] }, 'paintcorrectionmasktop' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksTop'] }, 'paintcorrectionmaskvalue' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksMaskValue'] }, 'paintcorrectionmaskversion' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksVersion'] }, 'paintcorrectionmaskwhat' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksWhat'] }, 'paintcorrectionmaskx' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksX'] }, 'paintcorrectionmasky' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksY'] }, 'paintcorrectionmaskzerox' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksZeroX'] }, 'paintcorrectionmaskzeroy' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsCorrectionMasksZeroY'] }, 'paintcorrectionmoire' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalMoire'] }, 'paintcorrectionsaturation' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalSaturation','PaintBasedCorrectionsLocalToningSaturation'] }, 'paintcorrectionshadows2012' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalShadows2012'] }, 'paintcorrectionsharpness' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalSharpness'] }, 'paintcorrectiontemperature' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalTemperature'] }, 'paintcorrectiontint' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsLocalTint'] }, 'paintcorrectionwhat' => { 400 => [\'PaintBasedCorrections','PaintBasedCorrectionsWhat'] }, 'panasonicexifversion' => { 270 => 0x26 }, 'panasonicimageheight' => { 270 => 0x4c }, 'panasonicimagewidth' => { 270 => 0x4b }, 'panasonicrawversion' => { 274 => 0x1 }, 'panasonictitle' => { 106 => 0xc6d2 }, 'panasonictitle2' => { 106 => 0xc6d3 }, 'panoramacropbottom' => { 362 => 0x7 }, 'panoramacropleft' => { 362 => 0x4 }, 'panoramacropright' => { 362 => 0x6 }, 'panoramacroptop' => { 362 => 0x5 }, 'panoramadirection' => { 63 => 0x5, 362 => 0x3 }, 'panoramaframeheight' => { 362 => 0x9 }, 'panoramaframenumber' => { 63 => 0x2 }, 'panoramaframewidth' => { 362 => 0x8 }, 'panoramafullheight' => { 362 => 0x2 }, 'panoramafullwidth' => { 362 => 0x1 }, 'panoramamode' => { 122 => 0x3c, 250 => 0x601 }, 'panoramasize3d' => { 347 => 0x38 }, 'panoramasourceheight' => { 362 => 0xb }, 'panoramasourcewidth' => { 362 => 0xa }, 'panoramicstitchcameramotion' => { 154 => 'PanoramicStitchCameraMotion', 155 => 0x1 }, 'panoramicstitchmaptype' => { 154 => 'PanoramicStitchMapType', 155 => 0x2 }, 'panoramicstitchphi0' => { 154 => 'PanoramicStitchPhi0', 155 => 0x5 }, 'panoramicstitchphi1' => { 154 => 'PanoramicStitchPhi1', 155 => 0x6 }, 'panoramicstitchtheta0' => { 154 => 'PanoramicStitchTheta0', 155 => 0x3 }, 'panoramicstitchtheta1' => { 154 => 'PanoramicStitchTheta1', 155 => 0x4 }, 'panoramicstitchversion' => { 155 => 0x0 }, 'pantry' => { 426 => 'Pantry' }, 'parallax' => { 111 => 0xb211, 249 => 0x28 }, 'parametricdarks' => { 400 => 'ParametricDarks' }, 'parametrichighlights' => { 400 => 'ParametricHighlights' }, 'parametrichighlightsplit' => { 400 => 'ParametricHighlightSplit' }, 'parametriclights' => { 400 => 'ParametricLights' }, 'parametricmidtonesplit' => { 400 => 'ParametricMidtoneSplit' }, 'parametricshadows' => { 400 => 'ParametricShadows' }, 'parametricshadowsplit' => { 400 => 'ParametricShadowSplit' }, 'parentmeid' => { 390 => 'ParentMEID' }, 'parentreference1' => { 408 => [\'TagStructure','TagStructureParentReference'] }, 'parentreference2' => { 408 => [\'TagStructure','TagStructureSubLabelsParentReference'] }, 'parentreference3' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabelsParentReference'] }, 'parentreference4' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsParentReference'] }, 'parentreference5' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsParentReference'] }, 'parentreference6' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsParentReference'] }, 'partofcompilation' => { 425 => 'partOfCompilation' }, 'patientbirthdate' => { 387 => 'PatientDOB' }, 'patientid' => { 387 => 'PatientID' }, 'patientname' => { 387 => 'PatientName' }, 'patientsex' => { 387 => 'PatientSex' }, 'pdfversion' => { 411 => 'PDFVersion' }, 'pentaximagesize' => { 303 => 0x9 }, 'pentaxmodelid' => { 283 => 0x0, 303 => 0x5 }, 'pentaxmodeltype' => { 303 => 0x1 }, 'pentaxversion' => { 303 => 0x0 }, 'people' => { 388 => 'People', 392 => 'People' }, 'perchannelblacklevel' => { 37 => 0xc4, 38 => [0x2b4,0x2cb,0x2cf], 39 => 0x108, 40 => 0x1df, 41 => [0x1f8,0x2d8], 42 => 0x30a }, 'peripheralillumcentralradius' => { 385 => 0x8030 }, 'peripheralillumcentralvalue' => { 385 => 0x8031 }, 'peripheralillumination' => { 92 => 0x20702, 98 => 0x68 }, 'peripheralilluminationcorr' => { 54 => 0x1, 293 => 0x2 }, 'peripheralilluminationon' => { 92 => '0x20702.0', 98 => 0x64 }, 'peripheralillumperiphvalue' => { 385 => 0x8032 }, 'peripherallighting' => { 69 => 0x2 }, 'peripherallightingsetting' => { 70 => 0x5 }, 'peripherallightingvalue' => { 69 => 0x6 }, 'permissions' => { 418 => 'permissions' }, 'permits' => { 397 => 'permits' }, 'person' => { 415 => 'person' }, 'personality' => { 390 => 'Personality' }, 'personinimage' => { 410 => 'PersonInImage' }, 'personinimagecharacteristic' => { 410 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonCharacteristic'] }, 'personinimagecvtermcvid' => { 410 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonCharacteristicCvId'] }, 'personinimagecvtermid' => { 410 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonCharacteristicCvTermId'] }, 'personinimagecvtermname' => { 410 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonCharacteristicCvTermName'] }, 'personinimagecvtermrefinedabout' => { 410 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonCharacteristicCvTermRefinedAbout'] }, 'personinimagedescription' => { 410 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonDescription'] }, 'personinimageid' => { 410 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonId'] }, 'personinimagename' => { 410 => [\'PersonInImageWDetails','PersonInImageWDetailsPersonName'] }, 'personinimagewdetails' => { 410 => 'PersonInImageWDetails' }, 'perspectiveaspect' => { 400 => 'PerspectiveAspect' }, 'perspectivehorizontal' => { 400 => 'PerspectiveHorizontal' }, 'perspectiverotate' => { 400 => 'PerspectiveRotate' }, 'perspectivescale' => { 400 => 'PerspectiveScale' }, 'perspectiveupright' => { 400 => 'PerspectiveUpright' }, 'perspectivevertical' => { 400 => 'PerspectiveVertical' }, 'pf0customfuncregistration' => { 81 => 0x1 }, 'pf10retainprogramshift' => { 81 => 0xb }, 'pf13drivepriority' => { 81 => 0xe }, 'pf14disablefocussearch' => { 81 => 0xf }, 'pf15disableafassistbeam' => { 81 => 0x10 }, 'pf16autofocuspointshoot' => { 81 => 0x11 }, 'pf17disableafpointsel' => { 81 => 0x12 }, 'pf18enableautoafpointsel' => { 81 => 0x13 }, 'pf19continuousshootspeed' => { 81 => 0x14 }, 'pf19shootingspeedhigh' => { 80 => 0xa }, 'pf19shootingspeedlow' => { 80 => 0x9 }, 'pf1disableshootingmodes' => { 81 => 0x2 }, 'pf1value' => { 80 => 0x1 }, 'pf20limitcontinousshots' => { 81 => 0x15 }, 'pf20maxcontinousshots' => { 80 => 0xb }, 'pf21enablequietoperation' => { 81 => 0x16 }, 'pf23felocktime' => { 80 => 0xd }, 'pf23postreleasetime' => { 80 => 0xe }, 'pf23settimerlengths' => { 81 => 0x18 }, 'pf23shutterbuttontime' => { 80 => 0xc }, 'pf24lightlcdduringbulb' => { 81 => 0x19 }, 'pf25aemode' => { 80 => 0xf }, 'pf25afmode' => { 80 => 0x12 }, 'pf25afpointsel' => { 80 => 0x13 }, 'pf25colormatrix' => { 80 => 0x17 }, 'pf25defaultclearsettings' => { 81 => 0x1a }, 'pf25drivemode' => { 80 => 0x11 }, 'pf25imagesize' => { 80 => 0x14 }, 'pf25meteringmode' => { 80 => 0x10 }, 'pf25parameters' => { 80 => 0x16 }, 'pf25wbmode' => { 80 => 0x15 }, 'pf26shortenreleaselag' => { 81 => 0x1b }, 'pf27reversedialrotation' => { 81 => 0x1c }, 'pf27value' => { 80 => 0x18 }, 'pf28noquickdialexpcomp' => { 81 => 0x1d }, 'pf29quickdialswitchoff' => { 81 => 0x1e }, 'pf2disablemeteringmodes' => { 81 => 0x3 }, 'pf2value' => { 80 => 0x2 }, 'pf30enlargementmode' => { 81 => 0x1f }, 'pf31originaldecisiondata' => { 81 => 0x20 }, 'pf3manualexposuremetering' => { 81 => 0x4 }, 'pf3value' => { 80 => 0x3 }, 'pf4exposuretimelimits' => { 81 => 0x5 }, 'pf4exposuretimemax' => { 80 => 0x5 }, 'pf4exposuretimemin' => { 80 => 0x4 }, 'pf5aperturelimits' => { 81 => 0x6 }, 'pf5aperturemax' => { 80 => 0x7 }, 'pf5aperturemin' => { 80 => 0x6 }, 'pf6presetshootingmodes' => { 81 => 0x7 }, 'pf7bracketcontinuousshoot' => { 81 => 0x8 }, 'pf8bracketshots' => { 80 => 0x8 }, 'pf8setbracketshots' => { 81 => 0x9 }, 'pf9changebracketsequence' => { 81 => 0xa }, 'phasedetectaf' => { 170 => 0x6 }, 'phonenumber' => { 137 => 'Phone' }, 'photoeffect' => { 31 => 0x28 }, 'photoeffecthistoryxml' => { 230 => 0xe9651831 }, 'photoeffects' => { 230 => 0xab5eca5e }, 'photoeffectsblue' => { 232 => 0x8 }, 'photoeffectsgreen' => { 232 => 0x6 }, 'photoeffectsred' => { 232 => 0x4 }, 'photoeffectstype' => { 232 => 0x0 }, 'photographicsensitivity' => { 405 => 'PhotographicSensitivity' }, 'photoinfoplayback' => { 237 => '17.6', 243 => '33.6' }, 'photometricinterpretation' => { 106 => 0x106, 421 => 'PhotometricInterpretation' }, 'photoshopbgrthumbnail' => { 317 => 0x409 }, 'photoshopquality' => { 316 => 0x0 }, 'photoshopthumbnail' => { 317 => 0x40c }, 'photostyle' => { 270 => 0x89 }, 'picklabel' => { 403 => 'PickLabel' }, 'pictinfo' => { 336 => 0x208 }, 'picturecontrol' => { 230 => 0xe2173c47 }, 'picturecontrolactive' => { 233 => 0x0 }, 'picturecontroladjust' => { 196 => 0x30 }, 'picturecontrolbase' => { 196 => 0x18 }, 'picturecontroldata' => { 194 => [0xbd,0x23] }, 'picturecontrolmode' => { 233 => 0x13 }, 'picturecontrolname' => { 196 => 0x4 }, 'picturecontrolquickadjust' => { 196 => 0x31 }, 'pictureeffect' => { 357 => 0x200e }, 'pictureeffect2' => { 364 => 0x1163, 365 => 0x1167, 366 => 0x1143, 367 => 0x11bf, 368 => 0x119b, 369 => 0x1053, 370 => 0x24b, 371 => 0x24b, 381 => 0x46 }, 'picturefinish' => { 159 => 0x71 }, 'picturemode' => { 111 => 0x1031, 250 => 0x520, 303 => [0xb,0x33], 337 => 0x3d }, 'picturemode2' => { 284 => 0x0 }, 'picturemodebwfilter' => { 250 => 0x525 }, 'picturemodecontrast' => { 250 => 0x523 }, 'picturemodeeffect' => { 250 => 0x52d }, 'picturemodehue' => { 250 => 0x522 }, 'picturemodesaturation' => { 250 => 0x521 }, 'picturemodesharpness' => { 250 => 0x524 }, 'picturemodetone' => { 250 => 0x526 }, 'pictureprofile' => { 364 => [0x115e,0x115f], 365 => [0x1162,0x1163], 366 => [0x113e,0x113f], 367 => [0x11ba,0x11bb], 368 => [0x1196,0x1197], 369 => [0x104e,0x104f], 370 => [0x246,0x247], 371 => [0x246,0x247] }, 'picturestyle' => { 7 => [0x4b,0x51], 8 => 0xf4, 9 => 0x6c, 10 => 0x86, 11 => 0x73, 15 => 0xab, 16 => 0xa7, 17 => 0xb0, 18 => 0x6c, 19 => 0xa7, 20 => 0xf4, 21 => 0xb3, 23 => 0xf4, 24 => 0xfa, 65 => 0xa, 92 => 0x20301, 98 => 0x2 }, 'picturewizard' => { 334 => 0x21 }, 'picturewizardcolor' => { 333 => 0x1 }, 'picturewizardcontrast' => { 333 => 0x4 }, 'picturewizardmode' => { 333 => 0x0 }, 'picturewizardsaturation' => { 333 => 0x2 }, 'picturewizardsharpness' => { 333 => 0x3 }, 'pipelineversion' => { 154 => 'PipelineVersion' }, 'pitch' => { 238 => '4.1', 247 => '4.1' }, 'pitchangle' => { 210 => 0x350f, 250 => 0x904, 270 => 0x91, 302 => 0x2 }, 'pixelshiftresolution' => { 304 => 0x0 }, 'pixelsperunitx' => { 261 => 0x0 }, 'pixelsperunity' => { 261 => 0x4 }, 'pixelunits' => { 261 => 0x8 }, 'planarconfiguration' => { 106 => 0x11c, 421 => 'PlanarConfiguration' }, 'platenames' => { 430 => 'PlateNames' }, 'platform' => { 415 => 'platform' }, 'playbackmenustime' => { 240 => '20.1', 241 => '21.1', 242 => '21.1' }, 'playbackmonitorofftime' => { 237 => '25.2', 238 => '36.1', 243 => '8.1', 244 => '35.1', 247 => '36.1', 248 => '21.1' }, 'playbackzoom' => { 238 => '37.1' }, 'playdisplay' => { 161 => 0x4e }, 'plusversion' => { 413 => 'Version' }, 'pmversion' => { 315 => 'PMVersion' }, 'pngwarning' => { 262 => 'Warning' }, 'poilevel' => { 193 => 0x8 }, 'portraitoutputhighlightpoint' => { 98 => 0x1d }, 'portraitoutputshadowpoint' => { 98 => 0x1e }, 'portraitrawcolortone' => { 98 => 0x16 }, 'portraitrawcontrast' => { 98 => 0x18 }, 'portraitrawhighlight' => { 98 => 0x76 }, 'portraitrawhighlightpoint' => { 98 => 0x1b }, 'portraitrawlinear' => { 98 => 0x19 }, 'portraitrawsaturation' => { 98 => 0x17 }, 'portraitrawshadow' => { 98 => 0x7f }, 'portraitrawshadowpoint' => { 98 => 0x1c }, 'portraitrawsharpness' => { 98 => 0x1a }, 'portraitrefiner' => { 102 => 0x302b }, 'portraitunsharpmaskfineness' => { 98 => 0x9a }, 'portraitunsharpmaskstrength' => { 98 => 0x98 }, 'portraitunsharpmaskthreshold' => { 98 => 0x9c }, 'poseheadingdegrees' => { 389 => 'PoseHeadingDegrees' }, 'posepitchdegrees' => { 389 => 'PosePitchDegrees' }, 'poserolldegrees' => { 389 => 'PoseRollDegrees' }, 'positiondescriptor' => { 414 => 'positionDescriptor' }, 'postalcode' => { 141 => 'PostalCode' }, 'postcropvignetteamount' => { 400 => 'PostCropVignetteAmount' }, 'postcropvignettefeather' => { 400 => 'PostCropVignetteFeather' }, 'postcropvignettehighlightcontrast' => { 400 => 'PostCropVignetteHighlightContrast' }, 'postcropvignettemidpoint' => { 400 => 'PostCropVignetteMidpoint' }, 'postcropvignetteroundness' => { 400 => 'PostCropVignetteRoundness' }, 'postcropvignettestyle' => { 400 => 'PostCropVignetteStyle' }, 'potentialface1position' => { 355 => 0xb }, 'potentialface2position' => { 355 => 0x15 }, 'potentialface3position' => { 355 => 0x1f }, 'potentialface4position' => { 355 => 0x29 }, 'potentialface5position' => { 355 => 0x33 }, 'potentialface6position' => { 355 => 0x3d }, 'potentialface7position' => { 355 => 0x47 }, 'potentialface8position' => { 355 => 0x51 }, 'powersource' => { 282 => '0.1' }, 'poweruptime' => { 194 => 0xb6 }, 'precaptureframes' => { 255 => 0x300 }, 'predictor' => { 106 => 0x13d }, 'preflashreturnstrength' => { 208 => 0x28a }, 'prefs' => { 114 => 0xdd, 315 => 'Prefs' }, 'preservedfilename' => { 426 => 'PreservedFileName' }, 'presetwhitebalance' => { 161 => 0x24, 385 => 0x8002 }, 'presetwhitebalanceadj' => { 385 => 0x8014 }, 'previewapplicationname' => { 106 => 0xc716 }, 'previewapplicationversion' => { 106 => 0xc717 }, 'previewbutton' => { 237 => ['14.1','15.1'], 238 => '15.1', 243 => '29.1', 244 => '14.1', 247 => '15.1' }, 'previewbuttonplusdials' => { 237 => ['14.2','15.2'], 238 => '15.2', 243 => '31.2', 247 => '43.1' }, 'previewcolorspace' => { 106 => 0xc71a }, 'previewcropbottom' => { 314 => 0xef }, 'previewcropleft' => { 314 => 0xec }, 'previewcropright' => { 314 => 0xee }, 'previewcroptop' => { 314 => 0xed }, 'previewdate' => { 322 => 0x0 }, 'previewdatetime' => { 106 => 0xc71b }, 'previewimage' => { 102 => 0x2000, 103 => 'PreviewImage', 107 => 'PreviewImage', 109 => 0x4, 146 => 'data', 163 => 0x81, 255 => 0x280, 269 => 0x300, 357 => 0x2001 }, 'previewimageborders' => { 303 => 0x3e }, 'previewimageheight' => { 64 => 0x4, 124 => 0xfa58 }, 'previewimagelength' => { 64 => 0x2, 102 => 0x3, 106 => [0x117,0x202], 163 => 0x89, 197 => 0x202, 250 => 0x102, 255 => 0x1037, 303 => 0x3, 327 => 0x1e, 332 => 0x3, 337 => [0x1b,0x1d], 348 => 0x202 }, 'previewimagename' => { 146 => '1Name' }, 'previewimagesize' => { 102 => 0x2, 129 => 0x2, 146 => 'ImageSize', 303 => 0x2, 337 => [0x1c,0x1e], 357 => 0xb02c }, 'previewimagestart' => { 64 => 0x5, 102 => 0x4, 106 => [0x111,0x201], 163 => 0x88, 197 => 0x201, 250 => 0x101, 255 => 0x1036, 303 => 0x4, 327 => 0x1c, 332 => 0x2, 337 => [0x1a,0x1c], 348 => 0x201 }, 'previewimagetype' => { 146 => '0Type' }, 'previewimagevalid' => { 250 => 0x100, 255 => 0x1035 }, 'previewimagewidth' => { 64 => 0x3, 124 => 0xfa57 }, 'previewquality' => { 64 => 0x1 }, 'previewsettingsdigest' => { 106 => 0xc719 }, 'previewsettingsname' => { 106 => 0xc718 }, 'primaryafpoint' => { 170 => 0x7 }, 'primarychromaticities' => { 106 => 0x13f, 421 => 'PrimaryChromaticities' }, 'printim' => { 106 => 0xc4a5 }, 'prioritysetupshutterrelease' => { 161 => 0x1d, 345 => 0x28 }, 'privatertkinfo' => { 391 => 'privateRTKInfo' }, 'processingsoftware' => { 106 => 0xb }, 'processversion' => { 400 => 'ProcessVersion' }, 'producer' => { 259 => 'Producer', 411 => 'Producer' }, 'productcode' => { 415 => 'productCode' }, 'productid' => { 115 => 0x32, 414 => 'productID' }, 'productidtype' => { 414 => 'productIDType' }, 'productinimage' => { 410 => 'ProductInImage' }, 'productinimagedescription' => { 410 => [\'ProductInImage','ProductInImageProductDescription'] }, 'productinimagegtin' => { 410 => [\'ProductInImage','ProductInImageProductGTIN'] }, 'productinimagename' => { 410 => [\'ProductInImage','ProductInImageProductName'] }, 'productioncode' => { 283 => 0x2 }, 'productorserviceconstraints' => { 413 => 'ProductOrServiceConstraints' }, 'profession' => { 415 => 'profession' }, 'profilecalibrationsig' => { 106 => 0xc6f4 }, 'profilecopyright' => { 106 => 0xc6fe }, 'profileembedpolicy' => { 106 => 0xc6fd }, 'profilehuesatmapdata1' => { 106 => 0xc6fa }, 'profilehuesatmapdata2' => { 106 => 0xc6fb }, 'profilehuesatmapdims' => { 106 => 0xc6f9 }, 'profilehuesatmapencoding' => { 106 => 0xc7a3 }, 'profilelooktabledata' => { 106 => 0xc726 }, 'profilelooktabledims' => { 106 => 0xc725 }, 'profilelooktableencoding' => { 106 => 0xc7a4 }, 'profilename' => { 106 => 0xc6f8 }, 'profiletonecurve' => { 106 => 0xc6fc }, 'programiso' => { 270 => 0x3c }, 'programline' => { 284 => '1.1' }, 'programmode' => { 166 => 0x5 }, 'programshift' => { 194 => 0xd }, 'programversion' => { 114 => 0x46 }, 'prohibits' => { 397 => 'prohibits' }, 'projectiontype' => { 389 => 'ProjectionType' }, 'projectname' => { 425 => 'projectName' }, 'projectref' => { 425 => 'projectRef' }, 'projectrefpath' => { 425 => [\'projectRef','projectRefPath'] }, 'projectreftype' => { 425 => [\'projectRef','projectRefType'] }, 'propertyreleaseid' => { 413 => 'PropertyReleaseID' }, 'propertyreleasestatus' => { 413 => 'PropertyReleaseStatus' }, 'province-state' => { 114 => 0x5f }, 'publicationdate' => { 415 => 'publicationDate' }, 'publicationdatea-platform' => { 415 => [\'publicationDate','publicationDateA-platform'] }, 'publicationdatedate' => { 415 => [\'publicationDate','publicationDateDate'] }, 'publicationdisplaydate' => { 415 => 'publicationDisplayDate' }, 'publicationdisplaydatea-platform' => { 415 => [\'publicationDisplayDate','publicationDisplayDateA-platform'] }, 'publicationdisplaydatedate' => { 415 => [\'publicationDisplayDate','publicationDisplayDateDate'] }, 'publicationname' => { 415 => 'publicationName' }, 'publisher' => { 401 => 'publisher' }, 'publishingfrequency' => { 415 => 'publishingFrequency' }, 'pulldown' => { 425 => 'pullDown' }, 'purplehsl' => { 92 => 0x20916 }, 'quality' => { 0 => 0x1, 31 => 0x3, 101 => 0x2, 102 => 0x3002, 111 => 0x1000, 122 => 0x9, 194 => 0x4, 220 => 0x3, 255 => 0x201, 266 => 0x300, 303 => 0x8, 310 => 0x2, 337 => 0x16, 345 => 0x56, 346 => 0x56, 347 => 0xb, 357 => 0x102 }, 'quality2' => { 364 => 0x1170, 365 => 0x1174, 366 => 0x1150, 368 => 0x11a8, 369 => 0x1060, 370 => 0x258, 371 => 0x258, 373 => 0x29, 374 => 0x25, 375 => 0x2a }, 'qualitymode' => { 102 => 0x8 }, 'quantizationmethod' => { 116 => 0x78 }, 'quickadjust' => { 233 => 0x2a }, 'quickcontroldialinmeter' => { 73 => 0x703 }, 'quickfix' => { 230 => 0x416391c6 }, 'quickshot' => { 336 => 0x213 }, 'rangefinder' => { 240 => '4.1', 241 => '5.1', 242 => '5.1' }, 'rasterizedcaption' => { 114 => 0x7d }, 'rating' => { 106 => 0x4746, 111 => 0x1431, 314 => 0xdf, 357 => 0x2002, 394 => 'rating', 402 => 'rating', 415 => 'rating', 423 => 'Rating' }, 'ratingpercent' => { 106 => 0x4749, 156 => 'Rating' }, 'rawandjpgrecording' => { 71 => 0x8, 163 => 0x109, 284 => 0xd }, 'rawbrightnessadj' => { 92 => 0x20001, 97 => 0x38 }, 'rawcoloradj' => { 97 => 0x2e }, 'rawcompressionmode' => { 334 => 0x45 }, 'rawcropbottom' => { 314 => 0xd4 }, 'rawcropleft' => { 314 => 0xd1 }, 'rawcropright' => { 314 => 0xd3 }, 'rawcroptop' => { 314 => 0xd2 }, 'rawcustomsaturation' => { 97 => 0x30 }, 'rawcustomtone' => { 97 => 0x34 }, 'rawdata' => { 334 => 0xa048 }, 'rawdatauniqueid' => { 106 => 0xc65d }, 'rawdepth' => { 165 => 0x10 }, 'rawdevartfilter' => { 257 => 0x121 }, 'rawdevautogradation' => { 257 => 0x119 }, 'rawdevcolorspace' => { 256 => 0x108, 257 => 0x109 }, 'rawdevcontrastvalue' => { 256 => 0x106, 257 => 0x105 }, 'rawdeveditstatus' => { 256 => 0x10b }, 'rawdevelopmentprocess' => { 303 => 0x62 }, 'rawdevengine' => { 256 => 0x109, 257 => 0x10b }, 'rawdevexposurebiasvalue' => { 256 => 0x100, 257 => 0x100 }, 'rawdevgradation' => { 257 => 0x112 }, 'rawdevgraypoint' => { 256 => 0x103, 257 => 0x104 }, 'rawdevmemorycoloremphasis' => { 256 => 0x105, 257 => 0x108 }, 'rawdevnoisereduction' => { 256 => 0x10a, 257 => 0x10a }, 'rawdevpicturemode' => { 257 => 0x10c }, 'rawdevpm_bwfilter' => { 257 => 0x110 }, 'rawdevpmcontrast' => { 257 => 0x10e }, 'rawdevpmnoisefilter' => { 257 => 0x120 }, 'rawdevpmpicturetone' => { 257 => 0x111 }, 'rawdevpmsaturation' => { 257 => 0x10d }, 'rawdevpmsharpness' => { 257 => 0x10f }, 'rawdevsaturation3' => { 257 => 0x113 }, 'rawdevsaturationemphasis' => { 256 => 0x104, 257 => 0x107 }, 'rawdevsettings' => { 256 => 0x10c }, 'rawdevsharpnessvalue' => { 256 => 0x107, 257 => 0x106 }, 'rawdevversion' => { 256 => 0x0, 257 => 0x0 }, 'rawdevwbfineadjustment' => { 256 => 0x102, 257 => 0x103 }, 'rawdevwhitebalance' => { 257 => 0x101 }, 'rawdevwhitebalancevalue' => { 256 => 0x101, 257 => 0x102 }, 'rawfile' => { 106 => 0xfe4c }, 'rawfilename' => { 400 => 'RawFileName' }, 'rawformat' => { 312 => 0x10e }, 'rawimagecenter' => { 194 => 0x99 }, 'rawimagedigest' => { 106 => 0xc71c }, 'rawimagesize' => { 303 => 0x39 }, 'rawinfoversion' => { 258 => 0x0 }, 'rawjpgheight' => { 88 => 0x4 }, 'rawjpgquality' => { 49 => 0x6, 88 => 0x1 }, 'rawjpgsize' => { 49 => 0x7, 88 => 0x2 }, 'rawjpgwidth' => { 88 => 0x3 }, 'rawmeasuredrggb' => { 36 => 0x26a, 38 => 0x280, 40 => 0x194, 41 => [0x1ad,0x26b] }, 'rawrppused' => { 394 => 'rawrppused' }, 'rawtopreviewgain' => { 106 => 0xc7a8 }, 'reardisplay' => { 237 => '12.3', 238 => '6.2' }, 'recipeendingpage' => { 417 => 'recipeEndingPage' }, 'recipepagerange' => { 417 => 'recipePageRange' }, 'recipesource' => { 417 => 'recipeSource' }, 'recipestartingpage' => { 417 => 'recipeStartingPage' }, 'recipetitle' => { 417 => 'recipeTitle' }, 'recognizedface1age' => { 265 => 0x20 }, 'recognizedface1name' => { 265 => 0x4 }, 'recognizedface1position' => { 265 => 0x18 }, 'recognizedface2age' => { 265 => 0x50 }, 'recognizedface2name' => { 265 => 0x34 }, 'recognizedface2position' => { 265 => 0x48 }, 'recognizedface3age' => { 265 => 0x80 }, 'recognizedface3name' => { 265 => 0x64 }, 'recognizedface3position' => { 265 => 0x78 }, 'recognizedfaceflags' => { 270 => 0x63 }, 'recommendedexposureindex' => { 106 => 0x8832, 405 => 'RecommendedExposureIndex' }, 'record' => { 105 => 'Record' }, 'recordbasisofrecord' => { 105 => [\'Record','RecordBasisOfRecord'] }, 'recordcollectioncode' => { 105 => [\'Record','RecordCollectionCode'] }, 'recordcollectionid' => { 105 => [\'Record','RecordCollectionID'] }, 'recorddatageneralizations' => { 105 => [\'Record','RecordDataGeneralizations'] }, 'recorddatasetid' => { 105 => [\'Record','RecordDatasetID'] }, 'recorddatasetname' => { 105 => [\'Record','RecordDatasetName'] }, 'recorddisplay' => { 161 => 0x4d }, 'recorddynamicproperties' => { 105 => [\'Record','RecordDynamicProperties'] }, 'recordid' => { 86 => 0x1804 }, 'recordinformationwithheld' => { 105 => [\'Record','RecordInformationWithheld'] }, 'recordingformat' => { 328 => 0x1000 }, 'recordingmode' => { 101 => 0x1, 310 => 0x1 }, 'recordinstitutioncode' => { 105 => [\'Record','RecordInstitutionCode'] }, 'recordinstitutionid' => { 105 => [\'Record','RecordInstitutionID'] }, 'recordmode' => { 31 => 0x9, 102 => 0x3000 }, 'recordownerinstitutioncode' => { 105 => [\'Record','RecordOwnerInstitutionCode'] }, 'recordshutterrelease' => { 336 => 0x217 }, 'redbalance' => { 178 => 0x270, 255 => 0x1017, 274 => 0x11, 303 => 0x1c }, 'redcurvelimits' => { 97 => 0x18a }, 'redcurvepoints' => { 96 => 0x2d, 97 => 0x160 }, 'redeyecorrection' => { 234 => 0x0 }, 'redeyeinfo' => { 400 => 'RedEyeInfo' }, 'redeyereduction' => { 161 => 0x41, 345 => 0x6a, 347 => 0x28 }, 'redhsl' => { 92 => 0x20910 }, 'redhue' => { 400 => 'RedHue' }, 'redsaturation' => { 400 => 'RedSaturation' }, 'reductionmatrix1' => { 106 => 0xc625 }, 'reductionmatrix2' => { 106 => 0xc626 }, 'reelname' => { 106 => 0xc789 }, 'reference1' => { 408 => [\'TagStructure','TagStructureReference'] }, 'reference2' => { 408 => [\'TagStructure','TagStructureSubLabelsReference'] }, 'reference3' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabelsReference'] }, 'reference4' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsReference'] }, 'reference5' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsReference'] }, 'reference6' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsReference'] }, 'referenceblackwhite' => { 106 => 0x214, 421 => 'ReferenceBlackWhite' }, 'referencedate' => { 114 => 0x2f }, 'referencenumber' => { 114 => 0x32 }, 'references' => { 137 => 'References' }, 'referenceservice' => { 114 => 0x2d }, 'regionappliedtodimensions' => { 152 => [\'Regions','RegionsAppliedToDimensions'] }, 'regionappliedtodimensionsh' => { 152 => [\'Regions','RegionsAppliedToDimensionsH'] }, 'regionappliedtodimensionsunit' => { 152 => [\'Regions','RegionsAppliedToDimensionsUnit'] }, 'regionappliedtodimensionsw' => { 152 => [\'Regions','RegionsAppliedToDimensionsW'] }, 'regionarea' => { 152 => [\'Regions','RegionsRegionListArea'] }, 'regionaread' => { 152 => [\'Regions','RegionsRegionListAreaD'] }, 'regionareah' => { 152 => [\'Regions','RegionsRegionListAreaH'] }, 'regionareaunit' => { 152 => [\'Regions','RegionsRegionListAreaUnit'] }, 'regionareaw' => { 152 => [\'Regions','RegionsRegionListAreaW'] }, 'regionareax' => { 152 => [\'Regions','RegionsRegionListAreaX'] }, 'regionareay' => { 152 => [\'Regions','RegionsRegionListAreaY'] }, 'regionbarcodevalue' => { 152 => [\'Regions','RegionsRegionListBarCodeValue'] }, 'regionconstraints' => { 413 => 'RegionConstraints' }, 'regiondescription' => { 152 => [\'Regions','RegionsRegionListDescription'] }, 'regionextensions' => { 152 => [\'Regions','RegionsRegionListExtensions'] }, 'regionfocususage' => { 152 => [\'Regions','RegionsRegionListFocusUsage'] }, 'regioninfo' => { 152 => 'Regions' }, 'regioninfodateregionsvalid' => { 153 => [\'RegionInfo','RegionInfoDateRegionsValid'] }, 'regioninfomp' => { 153 => 'RegionInfo' }, 'regioninforegions' => { 153 => [\'RegionInfo','RegionInfoRegions'] }, 'regionlist' => { 152 => [\'Regions','RegionsRegionList'] }, 'regionname' => { 152 => [\'Regions','RegionsRegionListName'] }, 'regionpersondisplayname' => { 153 => [\'RegionInfo','RegionInfoRegionsPersonDisplayName'] }, 'regionpersonemaildigest' => { 153 => [\'RegionInfo','RegionInfoRegionsPersonEmailDigest'] }, 'regionpersonliveidcid' => { 153 => [\'RegionInfo','RegionInfoRegionsPersonLiveIdCID'] }, 'regionpersonsourceid' => { 153 => [\'RegionInfo','RegionInfoRegionsPersonSourceID'] }, 'regionrectangle' => { 153 => [\'RegionInfo','RegionInfoRegionsRectangle'] }, 'regionrotation' => { 152 => [\'Regions','RegionsRegionListRotation'] }, 'regionseealso' => { 152 => [\'Regions','RegionsRegionListSeeAlso'] }, 'regiontype' => { 152 => [\'Regions','RegionsRegionListType'] }, 'registryid' => { 410 => 'RegistryId' }, 'registryitemid' => { 410 => [\'RegistryId','RegistryIdRegItemId'] }, 'registryorganisationid' => { 410 => [\'RegistryId','RegistryIdRegOrgId'] }, 'relatedaudiofile' => { 135 => 'data' }, 'relatedaudiofilename' => { 135 => '1Name' }, 'relatedaudiofiletype' => { 135 => '0Type' }, 'relatedimagefileformat' => { 106 => 0x1000 }, 'relatedimageheight' => { 106 => 0x1002 }, 'relatedimagewidth' => { 106 => 0x1001 }, 'relatedresourceid' => { 105 => [\'ResourceRelationship','ResourceRelationshipRelatedResourceID'] }, 'relatedsoundfile' => { 106 => 0xa004, 404 => 'RelatedSoundFile' }, 'relatedvideofile' => { 149 => 'data' }, 'relatedvideofilename' => { 149 => '1Name' }, 'relatedvideofiletype' => { 149 => '0Type' }, 'relation' => { 401 => 'relation' }, 'relationshipaccordingto' => { 105 => [\'ResourceRelationship','ResourceRelationshipRelationshipAccordingTo'] }, 'relationshipestablisheddate' => { 105 => [\'ResourceRelationship','ResourceRelationshipRelationshipEstablishedDate'] }, 'relationshipofresource' => { 105 => [\'ResourceRelationship','ResourceRelationshipRelationshipOfResource'] }, 'relationshipremarks' => { 105 => [\'ResourceRelationship','ResourceRelationshipRelationshipRemarks'] }, 'relativepeakaudiofilepath' => { 425 => 'relativePeakAudioFilePath' }, 'relativetimestamp' => { 425 => 'relativeTimestamp' }, 'relativetimestampscale' => { 425 => [\'relativeTimestamp','relativeTimestampScale'] }, 'relativetimestampvalue' => { 425 => [\'relativeTimestamp','relativeTimestampValue'] }, 'releasebuttontousedial' => { 237 => '17.8', 238 => '18.5', 243 => '33.8', 244 => '17.6', 247 => '18.5' }, 'releasedate' => { 114 => 0x1e, 425 => 'releaseDate' }, 'releasemode' => { 102 => 0x3001, 357 => 0xb049 }, 'releasemode2' => { 364 => 0x112c, 365 => [0x112c,0x8], 366 => [0x1108,0x8], 367 => [0x1184,0x8], 368 => [0x1160,0x8], 369 => [0x4,0x1018], 370 => [0x4,0x210], 371 => [0x4,0x210], 372 => [0x67,0x73,0x3f,0x4b], 373 => 0x10, 374 => 0x10, 375 => 0x9, 381 => 0x34 }, 'releasemode3' => { 364 => 0x1128, 365 => 0x1128, 366 => 0x1104, 367 => 0x1180, 368 => 0x115c, 369 => 0x1014, 370 => 0x20c, 371 => 0x20c }, 'releasesetting' => { 86 => 0x1016 }, 'releasetime' => { 114 => 0x23 }, 'remoteonduration' => { 239 => '3.4', 240 => '17.2', 241 => '18.2', 242 => '18.2', 244 => '18.2', 245 => '4.3', 248 => '19.2' }, 'renditionclass' => { 426 => 'RenditionClass' }, 'renditionof' => { 426 => 'RenditionOf' }, 'renditionofalternatepaths' => { 426 => [\'RenditionOf','RenditionOfAlternatePaths'] }, 'renditionofdocumentid' => { 426 => [\'RenditionOf','RenditionOfDocumentID'] }, 'renditionoffilepath' => { 426 => [\'RenditionOf','RenditionOfFilePath'] }, 'renditionoffrompart' => { 426 => [\'RenditionOf','RenditionOfFromPart'] }, 'renditionofinstanceid' => { 426 => [\'RenditionOf','RenditionOfInstanceID'] }, 'renditionoflastmodifydate' => { 426 => [\'RenditionOf','RenditionOfLastModifyDate'] }, 'renditionofmanager' => { 426 => [\'RenditionOf','RenditionOfManager'] }, 'renditionofmanagervariant' => { 426 => [\'RenditionOf','RenditionOfManagerVariant'] }, 'renditionofmanageto' => { 426 => [\'RenditionOf','RenditionOfManageTo'] }, 'renditionofmanageui' => { 426 => [\'RenditionOf','RenditionOfManageUI'] }, 'renditionofmaskmarkers' => { 426 => [\'RenditionOf','RenditionOfMaskMarkers'] }, 'renditionoforiginaldocumentid' => { 426 => [\'RenditionOf','RenditionOfOriginalDocumentID'] }, 'renditionofpartmapping' => { 426 => [\'RenditionOf','RenditionOfPartMapping'] }, 'renditionofrenditionclass' => { 426 => [\'RenditionOf','RenditionOfRenditionClass'] }, 'renditionofrenditionparams' => { 426 => [\'RenditionOf','RenditionOfRenditionParams'] }, 'renditionoftopart' => { 426 => [\'RenditionOf','RenditionOfToPart'] }, 'renditionofversionid' => { 426 => [\'RenditionOf','RenditionOfVersionID'] }, 'renditionparams' => { 426 => 'RenditionParams' }, 'repeatingflashcount' => { 183 => 0xd, 184 => 0xe, 185 => 0xe, 243 => '17.2', 244 => '24.2', 245 => '9.2', 246 => '24.2', 248 => '25.2' }, 'repeatingflashcountbuilt-in' => { 217 => 0x4db }, 'repeatingflashcountexternal' => { 217 => 0x4c3 }, 'repeatingflashoutput' => { 243 => '17.1', 244 => '24.1', 245 => '9.1', 246 => '24.1', 248 => '25.1' }, 'repeatingflashoutputexternal' => { 217 => 0x4c0 }, 'repeatingflashrate' => { 183 => 0xc, 184 => 0xd, 185 => 0xd, 243 => '18.1', 244 => '25.1', 245 => '10.1', 246 => '25.1', 248 => '26.1' }, 'repeatingflashratebuilt-in' => { 217 => 0x4da }, 'repeatingflashrateexternal' => { 217 => 0x4c2 }, 'requires' => { 397 => 'requires' }, 'resampleparams' => { 425 => 'resampleParams' }, 'resampleparamsquality' => { 425 => [\'resampleParams','resampleParamsQuality'] }, 'resaved' => { 336 => 0x21e }, 'resolution' => { 142 => 'Resolution' }, 'resolutionmode' => { 337 => 0x4 }, 'resolutionunit' => { 106 => 0x128, 117 => 0x2, 421 => 'ResolutionUnit' }, 'resourceid' => { 105 => [\'ResourceRelationship','ResourceRelationshipResourceID'] }, 'resourcerelationship' => { 105 => 'ResourceRelationship' }, 'resourcerelationshipid' => { 105 => [\'ResourceRelationship','ResourceRelationshipResourceRelationshipID'] }, 'restrictdrivemodes' => { 73 => 0x612 }, 'restrictions' => { 418 => 'restrictions' }, 'retouchareafeather' => { 400 => [\'RetouchAreas','RetouchAreasFeather'] }, 'retouchareamaskalpha' => { 400 => [\'RetouchAreas','RetouchAreasMasksAlpha'] }, 'retouchareamaskangle' => { 400 => [\'RetouchAreas','RetouchAreasMasksAngle'] }, 'retouchareamaskbottom' => { 400 => [\'RetouchAreas','RetouchAreasMasksBottom'] }, 'retouchareamaskcentervalue' => { 400 => [\'RetouchAreas','RetouchAreasMasksCenterValue'] }, 'retouchareamaskcenterweight' => { 400 => [\'RetouchAreas','RetouchAreasMasksCenterWeight'] }, 'retouchareamaskdabs' => { 400 => [\'RetouchAreas','RetouchAreasMasksDabs'] }, 'retouchareamaskfeather' => { 400 => [\'RetouchAreas','RetouchAreasMasksFeather'] }, 'retouchareamaskflipped' => { 400 => [\'RetouchAreas','RetouchAreasMasksFlipped'] }, 'retouchareamaskflow' => { 400 => [\'RetouchAreas','RetouchAreasMasksFlow'] }, 'retouchareamaskfullx' => { 400 => [\'RetouchAreas','RetouchAreasMasksFullX'] }, 'retouchareamaskfully' => { 400 => [\'RetouchAreas','RetouchAreasMasksFullY'] }, 'retouchareamaskleft' => { 400 => [\'RetouchAreas','RetouchAreasMasksLeft'] }, 'retouchareamaskmidpoint' => { 400 => [\'RetouchAreas','RetouchAreasMasksMidpoint'] }, 'retouchareamaskperimetervalue' => { 400 => [\'RetouchAreas','RetouchAreasMasksPerimeterValue'] }, 'retouchareamaskradius' => { 400 => [\'RetouchAreas','RetouchAreasMasksRadius'] }, 'retouchareamaskright' => { 400 => [\'RetouchAreas','RetouchAreasMasksRight'] }, 'retouchareamaskroundness' => { 400 => [\'RetouchAreas','RetouchAreasMasksRoundness'] }, 'retouchareamasks' => { 400 => [\'RetouchAreas','RetouchAreasMasks'] }, 'retouchareamasksizex' => { 400 => [\'RetouchAreas','RetouchAreasMasksSizeX'] }, 'retouchareamasksizey' => { 400 => [\'RetouchAreas','RetouchAreasMasksSizeY'] }, 'retouchareamasktop' => { 400 => [\'RetouchAreas','RetouchAreasMasksTop'] }, 'retouchareamaskvalue' => { 400 => [\'RetouchAreas','RetouchAreasMasksMaskValue'] }, 'retouchareamaskversion' => { 400 => [\'RetouchAreas','RetouchAreasMasksVersion'] }, 'retouchareamaskwhat' => { 400 => [\'RetouchAreas','RetouchAreasMasksWhat'] }, 'retouchareamaskx' => { 400 => [\'RetouchAreas','RetouchAreasMasksX'] }, 'retouchareamasky' => { 400 => [\'RetouchAreas','RetouchAreasMasksY'] }, 'retouchareamaskzerox' => { 400 => [\'RetouchAreas','RetouchAreasMasksZeroX'] }, 'retouchareamaskzeroy' => { 400 => [\'RetouchAreas','RetouchAreasMasksZeroY'] }, 'retouchareamethod' => { 400 => [\'RetouchAreas','RetouchAreasMethod'] }, 'retouchareaoffsety' => { 400 => [\'RetouchAreas','RetouchAreasOffsetY'] }, 'retouchareaopacity' => { 400 => [\'RetouchAreas','RetouchAreasOpacity'] }, 'retouchareas' => { 400 => 'RetouchAreas' }, 'retouchareaseed' => { 400 => [\'RetouchAreas','RetouchAreasSeed'] }, 'retouchareasourcestate' => { 400 => [\'RetouchAreas','RetouchAreasSourceState'] }, 'retouchareasourcex' => { 400 => [\'RetouchAreas','RetouchAreasSourceX'] }, 'retouchareaspottype' => { 400 => [\'RetouchAreas','RetouchAreasSpotType'] }, 'retouchhistory' => { 194 => 0x9e }, 'retouchinfo' => { 400 => 'RetouchInfo' }, 'retouchnefprocessing' => { 199 => 0x5 }, 'retractlensonpoweroff' => { 73 => 0x814 }, 'reuse' => { 413 => 'Reuse' }, 'reuseallowed' => { 428 => 'ReuseAllowed' }, 'reuseprohibited' => { 418 => 'reuseProhibited' }, 'reverseexposurecompdial' => { 242 => '5.2' }, 'reverseindicators' => { 237 => '12.1', 238 => '6.1', 240 => '4.3', 241 => '5.2', 242 => '5.4', 243 => '33.5', 244 => '5.1', 247 => '6.1', 248 => '6.2' }, 'reverseshutterspeedaperture' => { 242 => '5.3' }, 'revision' => { 402 => 'revision' }, 'rgbcurvelimits' => { 97 => 0x238 }, 'rgbcurvepoints' => { 96 => 0x7, 97 => 0x20e }, 'richtextcomment' => { 407 => 'RichTextComment' }, 'ricohdate' => { 327 => 0x6 }, 'ricohimageheight' => { 327 => 0x2 }, 'ricohimagewidth' => { 327 => 0x0 }, 'rightascension' => { 145 => 'RightAscension' }, 'rights' => { 401 => 'rights' }, 'rightsagent' => { 418 => 'rightsAgent' }, 'rightsowner' => { 418 => 'rightsOwner' }, 'rollangle' => { 210 => 0x350b, 250 => 0x903, 270 => 0x90, 302 => 0x1 }, 'romoperationmode' => { 86 => 0x80d }, 'rotation' => { 27 => 0x17, 28 => 0x18, 85 => 0x3, 92 => 0x10002, 97 => 0x26e, 110 => 0x4, 145 => 'Rotation', 159 => [0x65,0x50], 160 => 0x46, 161 => 0x5a, 164 => 0x10, 216 => '590.1', 230 => 0x76a43207, 270 => 0x30, 284 => '17.2', 314 => 0xd8, 345 => 0x3f, 346 => 0x3f, 356 => 0x10 }, 'routedto' => { 406 => 'RoutedTo' }, 'routing' => { 319 => 'Routing' }, 'routingnotes' => { 406 => 'RoutingNotes' }, 'rowsperstrip' => { 106 => 0x116 }, 'rpp' => { 394 => 'rpp' }, 'safetyshift' => { 73 => 0x108 }, 'safetyshiftinavortv' => { 71 => 0x10, 72 => 0x10, 74 => 0xf, 75 => 0x10, 78 => 0x10 }, 'sameexposurefornewaperture' => { 73 => 0x112 }, 'samplebits' => { 135 => 'SampleBits' }, 'samplepagerange' => { 415 => 'samplePageRange' }, 'samplerate' => { 135 => 'SampleRate' }, 'samplesperpixel' => { 106 => 0x115, 421 => 'SamplesPerPixel' }, 'samplestructure' => { 116 => 0x5a }, 'samsungmodelid' => { 334 => 0x3 }, 'sanyoquality' => { 336 => 0x201 }, 'sanyothumbnail' => { 336 => 0x100 }, 'saturation' => { 9 => 0x6e, 11 => 0x76, 31 => 0xe, 43 => 0x1, 101 => 0xd, 102 => [0x3013,0x1f], 106 => [0xa409,0xfe55], 111 => 0x1003, 136 => 'Saturation', 158 => 0x1f, 159 => 0x32, 160 => 0x28, 161 => 0x1a, 166 => 0x1, 194 => [0x94,0xaa], 196 => 0x35, 270 => 0x40, 272 => 0x300d, 303 => 0x1f, 310 => 0xd, 324 => 0x27, 327 => 0x28, 328 => 0x1013, 337 => 0x10, 345 => 0x1e, 346 => 0x1b, 357 => 0x2005, 400 => 'Saturation', 404 => 'Saturation' }, 'saturationadj' => { 92 => 0x20901, 97 => 0x116, 229 => 0x1, 233 => 0x2e, 385 => 0x8016 }, 'saturationadjustmentaqua' => { 400 => 'SaturationAdjustmentAqua' }, 'saturationadjustmentblue' => { 400 => 'SaturationAdjustmentBlue' }, 'saturationadjustmentgreen' => { 400 => 'SaturationAdjustmentGreen' }, 'saturationadjustmentmagenta' => { 400 => 'SaturationAdjustmentMagenta' }, 'saturationadjustmentorange' => { 400 => 'SaturationAdjustmentOrange' }, 'saturationadjustmentpurple' => { 400 => 'SaturationAdjustmentPurple' }, 'saturationadjustmentred' => { 400 => 'SaturationAdjustmentRed' }, 'saturationadjustmentyellow' => { 400 => 'SaturationAdjustmentYellow' }, 'saturationauto' => { 62 => 0x98 }, 'saturationfaithful' => { 18 => 0xfe, 61 => 0x68, 62 => 0x68 }, 'saturationlandscape' => { 18 => 0xfc, 61 => 0x38, 62 => 0x38 }, 'saturationmonochrome' => { 61 => 0x80, 62 => 0x80 }, 'saturationneutral' => { 18 => 0xfd, 61 => 0x50, 62 => 0x50 }, 'saturationportrait' => { 18 => 0xfb, 61 => 0x20, 62 => 0x20 }, 'saturationsetting' => { 258 => 0x1010, 347 => 0x11, 361 => 0x9 }, 'saturationstandard' => { 18 => 0xfa, 61 => 0x8, 62 => 0x8 }, 'saturationuserdef1' => { 18 => 0x100, 61 => 0x98, 62 => 0xb0 }, 'saturationuserdef2' => { 18 => 0x101, 61 => 0xb0, 62 => 0xc8 }, 'saturationuserdef3' => { 18 => 0x102, 61 => 0xc8, 62 => 0xe0 }, 'saveid' => { 426 => 'SaveID' }, 'scaletype' => { 425 => 'scaleType' }, 'scanimageenhancer' => { 200 => 0x60 }, 'scanningdirection' => { 116 => 0x64 }, 'scene' => { 409 => 'Scene', 425 => 'scene' }, 'scenearea' => { 253 => 0x211, 255 => 0x1031 }, 'sceneassist' => { 194 => 0x9c }, 'scenecapturetype' => { 106 => 0xa406, 404 => 'SceneCaptureType' }, 'scenedetect' => { 253 => 0x210, 255 => 0x1030 }, 'scenedetectdata' => { 253 => 0x212, 255 => 0x1033 }, 'scenemode' => { 124 => 0xfa02, 163 => 0x100, 194 => 0x8f, 250 => 0x509, 255 => 0x403, 270 => 0x8001, 278 => 0xf, 357 => 0xb023 }, 'scenemodeused' => { 126 => [0x6002,0xf002] }, 'sceneselect' => { 336 => 0x21f }, 'scenetype' => { 106 => 0xa301, 404 => 'SceneType' }, 'screentips' => { 237 => '12.7', 238 => '5.3', 243 => '13.1', 244 => '4.4', 247 => '5.4', 248 => '5.1' }, 'season' => { 414 => 'season' }, 'section' => { 415 => 'section' }, 'securityclassification' => { 106 => 0x9212 }, 'selectableafpoint' => { 73 => 0x509 }, 'selectafareaselectmode' => { 73 => 0x512 }, 'selftimer' => { 31 => 0x2, 270 => 0x2e, 336 => 0x214 }, 'selftimer2' => { 67 => 0x1d }, 'selftimerinterval' => { 244 => '19.2' }, 'selftimermode' => { 106 => 0x882b }, 'selftimershotcount' => { 238 => '20.2', 240 => '18.2', 241 => '19.2', 242 => '19.2', 244 => '19.3', 247 => '20.3', 248 => '20.2' }, 'selftimershotinterval' => { 238 => '20.3', 247 => '20.2' }, 'selftimertime' => { 86 => 0x1806, 161 => 0x1f, 237 => '18.1', 238 => '20.1', 239 => '3.3', 240 => '18.1', 241 => '19.1', 242 => '19.1', 243 => '7.2', 244 => '19.1', 245 => '3.3', 247 => '20.1', 248 => '20.1' }, 'sellingagency' => { 415 => 'sellingAgency' }, 'seminfo' => { 106 => 0x8546 }, 'sensingmethod' => { 106 => 0xa217, 404 => 'SensingMethod' }, 'sensitivityadjust' => { 303 => 0x40 }, 'sensitivitysteps' => { 284 => ['14.3','17.4'], 286 => 0x1 }, 'sensitivitytype' => { 106 => 0x8830, 405 => 'SensitivityType' }, 'sensor' => { 168 => 0x665e }, 'sensorareas' => { 334 => 0xa010 }, 'sensorbitdepth' => { 272 => 0x312d }, 'sensorbluelevel' => { 65 => 0x5 }, 'sensorcalibration' => { 254 => 0x805 }, 'sensorcleaning' => { 79 => 0xd }, 'sensorfullheight' => { 119 => 0xf904 }, 'sensorfullwidth' => { 119 => 0xf903 }, 'sensorheight' => { 119 => 0xf901, 124 => 0xfa21, 165 => 0x8, 272 => 0x312c, 312 => 0x109, 328 => 0x1602 }, 'sensorleftmargin' => { 312 => 0x10a }, 'sensorpixelsize' => { 194 => 0x9a }, 'sensorredlevel' => { 65 => 0x4 }, 'sensorserialnumber' => { 120 => 0x9ce }, 'sensorsize' => { 136 => 'SensorSize', 303 => 0x35 }, 'sensortemperature' => { 253 => 0x1500, 255 => 0x1007, 308 => 0xc, 312 => 0x210, 337 => [0x39,0x55] }, 'sensortemperature2' => { 308 => 0xe, 312 => 0x211 }, 'sensortopmargin' => { 312 => 0x10b }, 'sensorwidth' => { 119 => 0xf900, 124 => 0xfa20, 165 => 0xa, 272 => 0x312b, 312 => 0x108, 328 => 0x1601 }, 'sequence' => { 324 => 0x7 }, 'sequencefilenumber' => { 365 => 0x4, 366 => 0x4, 367 => 0x4, 368 => 0x4, 373 => 0xc, 374 => 0xc, 375 => 0x1a }, 'sequenceimagenumber' => { 365 => 0x0, 366 => 0x0, 367 => 0x0, 368 => 0x0, 373 => 0x8, 374 => 0x8, 375 => 0x12, 381 => 0x24 }, 'sequencelength' => { 373 => 0x22, 374 => 0x1e, 375 => [0x16,0x1e] }, 'sequencename' => { 414 => 'sequenceName' }, 'sequencenumber' => { 67 => 0x9, 102 => 0x301c, 111 => 0x1101, 122 => 0x1d, 217 => 0x51c, 270 => 0x2b, 347 => [0x10c,0x30c], 357 => 0xb04a, 414 => 'sequenceNumber' }, 'sequenceshotinterval' => { 336 => 0x224 }, 'sequencetotalnumber' => { 414 => 'sequenceTotalNumber' }, 'sequentialshot' => { 336 => 0x20e }, 'serialnumber' => { 55 => 0xc, 86 => 0x180b, 106 => [0xa431,0xfde9], 119 => 0xfa04, 121 => 0xfa00, 123 => 0xc354, 124 => 0xfa19, 133 => 0x0, 136 => 'SerialNumber', 194 => [0xa0,0x1d], 251 => 0x101, 255 => [0x404,0x101a], 266 => 0x303, 272 => 0x3103, 303 => 0x229, 312 => 0x102, 313 => 0x407, 324 => 0x15, 328 => 0x5, 337 => 0x2, 396 => 'SerialNumber', 405 => 'BodySerialNumber' }, 'serialnumberformat' => { 55 => 0x15, 86 => 0x183b }, 'seriesdatetime' => { 387 => 'SeriesDateTime' }, 'seriesdescription' => { 387 => 'SeriesDescription' }, 'seriesmodality' => { 387 => 'SeriesModality' }, 'seriesnumber' => { 387 => 'SeriesNumber', 415 => 'seriesNumber' }, 'seriestitle' => { 415 => 'seriesTitle' }, 'serviceidentifier' => { 115 => 0x1e }, 'servingsize' => { 417 => 'servingSize' }, 'setbuttoncrosskeysfunc' => { 76 => 0x0, 77 => 0x0 }, 'setbuttonwhenshooting' => { 71 => 0x1, 73 => 0x704, 79 => 0xc }, 'setfunctionwhenshooting' => { 74 => 0x0, 75 => 0x1, 78 => 0x1 }, 'setting' => { 414 => 'setting' }, 'shadingcompensation' => { 250 => 0x50c, 270 => 0x8a }, 'shadingcompensation2' => { 254 => 0x1012 }, 'shadow' => { 337 => 0xe }, 'shadowadj' => { 92 => 0x2030b }, 'shadowcorrection' => { 303 => 0x79 }, 'shadowprotection' => { 229 => 0x0 }, 'shadows' => { 106 => 0xfe52, 393 => 'Shadows', 400 => 'Shadows' }, 'shadows2012' => { 400 => 'Shadows2012' }, 'shadowscale' => { 106 => 0xc633 }, 'shadowtint' => { 400 => 'ShadowTint' }, 'shadowtone' => { 111 => 0x1040 }, 'shakereduction' => { 305 => 0x1, 306 => 0x1 }, 'sharpendetail' => { 400 => 'SharpenDetail' }, 'sharpenedgemasking' => { 400 => 'SharpenEdgeMasking' }, 'sharpening' => { 272 => 0x300b }, 'sharpeningadj' => { 233 => 0x2b }, 'sharpenradius' => { 400 => 'SharpenRadius' }, 'sharpness' => { 7 => [0x42,0x48], 9 => 0x72, 11 => 0x74, 31 => 0xf, 65 => 0x2, 101 => 0xb, 102 => [0x3011,0x21], 106 => [0xa40a,0xfe56], 111 => 0x1001, 122 => 0x6b, 131 => 0x37, 136 => 'Sharpness', 158 => 0x21, 159 => 0x30, 160 => 0x26, 161 => 0x18, 166 => 0x3, 194 => 0x6, 196 => 0x32, 255 => 0x100f, 270 => 0x41, 303 => 0x21, 310 => 0xb, 324 => 0x26, 327 => 0x22, 328 => [0x1003,0x1014], 337 => 0x11, 345 => 0x1c, 346 => 0x19, 357 => 0x2006, 381 => 0x52, 400 => 'Sharpness', 404 => 'Sharpness' }, 'sharpnessadj' => { 92 => 0x20310, 97 => 0x25a, 385 => 0x801a }, 'sharpnessadjon' => { 92 => '0x20310.0' }, 'sharpnessauto' => { 62 => 0x94 }, 'sharpnessfactor' => { 255 => 0x102a }, 'sharpnessfaithful' => { 18 => 0xf5, 61 => 0x64, 62 => 0x64 }, 'sharpnessfrequency' => { 7 => [0x41,0x47], 65 => 0x3 }, 'sharpnesslandscape' => { 18 => 0xf3, 61 => 0x34, 62 => 0x34 }, 'sharpnessmonochrome' => { 18 => 0xf6, 61 => 0x7c, 62 => 0x7c }, 'sharpnessneutral' => { 18 => 0xf4, 61 => 0x4c, 62 => 0x4c }, 'sharpnessovershoot' => { 385 => 0x801b }, 'sharpnessportrait' => { 18 => 0xf2, 61 => 0x1c, 62 => 0x1c }, 'sharpnesssetting' => { 250 => 0x506, 258 => 0x1013, 347 => 0x12, 361 => 0xa }, 'sharpnessstandard' => { 18 => 0xf1, 61 => 0x4, 62 => 0x4 }, 'sharpnessstrength' => { 92 => 0x20311 }, 'sharpnessthreshold' => { 385 => 0x801d }, 'sharpnessundershoot' => { 385 => 0x801c }, 'sharpnessuserdef1' => { 18 => 0xf7, 61 => 0x94, 62 => 0xac }, 'sharpnessuserdef2' => { 18 => 0xf8, 61 => 0xac, 62 => 0xc4 }, 'sharpnessuserdef3' => { 18 => 0xf9, 61 => 0xc4, 62 => 0xdc }, 'shootid' => { 414 => 'shootID' }, 'shootingdistance' => { 92 => 0x20701 }, 'shootinginfodisplay' => { 237 => '13.2', 238 => '5.1', 243 => '10.2', 244 => '4.1', 247 => '5.1', 248 => '5.3' }, 'shootinginfomonitorofftime' => { 237 => '26.2', 238 => '22.2', 243 => '9.1', 244 => '21.2', 247 => '22.2', 248 => '22.2' }, 'shootingmode' => { 136 => 'ShootingMode', 194 => 0x89, 270 => 0x1f }, 'shootingmodesetting' => { 239 => '5.1' }, 'shortdescription' => { 402 => 'shortdescription' }, 'shortdocumentid' => { 114 => 0xba }, 'shortownername' => { 18 => 0xac }, 'shortreleasetimelag' => { 73 => 0x80d }, 'shotdate' => { 425 => 'shotDate' }, 'shotday' => { 425 => 'shotDay' }, 'shotlocation' => { 425 => 'shotLocation' }, 'shotname' => { 425 => 'shotName' }, 'shotnumber' => { 425 => 'shotNumber' }, 'shotnumbersincepowerup' => { 360 => 0x44e, 373 => 0x1a, 374 => 0x16, 375 => 0xa }, 'shotnumbersincepowerup2' => { 347 => 0x200 }, 'shotsize' => { 425 => 'shotSize' }, 'shutter-aelock' => { 71 => 0x4, 73 => 0x701, 74 => 0x3, 75 => 0x4, 76 => 0x3, 77 => 0x3, 78 => 0x4, 79 => 0x2 }, 'shutteraelbutton' => { 72 => 0x4 }, 'shutterbuttonafonbutton' => { 73 => 0x701 }, 'shuttercount' => { 10 => 0x176, 49 => 0x1, 194 => 0xa7, 201 => [0x6a,0x157,0x24d], 202 => 0x286, 203 => 0x279, 204 => 0x284, 205 => 0x242, 206 => 0x280, 207 => 0x276, 208 => [0x27d,0x27f], 209 => 0x246, 211 => 0x2d6, 212 => 0x321, 213 => 0xbd8, 214 => 0x287, 215 => 0x320, 216 => 0x24a, 217 => 0x5fb, 219 => 0x2d5, 303 => 0x5d, 356 => 0x846, 359 => [0x125,0x14a] }, 'shuttercurtainsync' => { 71 => 0xf, 72 => 0xf, 73 => 0x305, 74 => 0xe, 75 => 0xf, 76 => 0x8, 77 => 0x8, 78 => 0xf, 79 => 0x8 }, 'shuttermode' => { 122 => 0x1b }, 'shutterreleasebuttonae-l' => { 237 => '17.7', 238 => '18.4', 240 => '16.1', 241 => '17.1', 242 => '17.1', 243 => '7.1', 244 => '17.5', 247 => '18.4', 248 => '18.2' }, 'shutterreleasemethod' => { 86 => 0x1010 }, 'shutterreleasenocfcard' => { 71 => 0x2, 72 => 0x2, 79 => 0xf }, 'shutterreleasetiming' => { 86 => 0x1011 }, 'shutterreleasewithoutlens' => { 73 => 0x711 }, 'shutterspeedlock' => { 238 => '38.1', 247 => '38.1' }, 'shutterspeedrange' => { 73 => 0x10c }, 'shutterspeedsetting' => { 161 => 0x6, 345 => 0x2f, 346 => 0x28, 347 => 0x0 }, 'shutterspeedvalue' => { 82 => 0x1, 106 => 0x9201, 255 => 0x1000, 312 => 0x400, 404 => 'ShutterSpeedValue' }, 'shuttertype' => { 111 => 0x1050, 270 => 0x9f }, 'sidecarforextension' => { 412 => 'SidecarForExtension' }, 'similarityindex' => { 114 => 0xe4 }, 'singleframebracketing' => { 161 => 0x21 }, 'skilllevel' => { 417 => 'skillLevel' }, 'slaveflashmeteringsegments' => { 303 => 0x20b }, 'slideshowname' => { 414 => 'slideshowName' }, 'slideshownumber' => { 414 => 'slideshowNumber' }, 'slideshowtotalnumber' => { 414 => 'slideshowTotalNumber' }, 'slowshutter' => { 67 => 0x8 }, 'slowsync' => { 111 => 0x1030 }, 'smartrange' => { 334 => 0xa012 }, 'smileshutter' => { 347 => 0x31 }, 'smileshuttermode' => { 347 => 0x27 }, 'smoothness' => { 106 => 0xfe57, 400 => 'Smoothness' }, 'softskineffect' => { 357 => 0x200f }, 'software' => { 106 => 0x131, 137 => 'Software', 262 => 'Software', 312 => 0x203, 337 => 0x18, 421 => 'Software' }, 'softwareversion' => { 336 => 0x207 }, 'sonydatetime' => { 363 => 0x6, 365 => 0x1b6, 366 => 0x210, 367 => 0x1fe, 368 => 0x22c }, 'sonydatetime2' => { 372 => [0x51,0x5d] }, 'sonyexposuretime' => { 372 => 0x46 }, 'sonyexposuretime2' => { 381 => 0xe }, 'sonyfnumber' => { 372 => [0x3c,0x48], 381 => 0x14 }, 'sonyimageheight' => { 363 => 0x1a, 373 => 0x44, 374 => 0x3f, 375 => 0x47 }, 'sonyimagesize' => { 161 => 0x3b, 345 => 0x54, 346 => 0x54, 347 => 0x9 }, 'sonyimagewidth' => { 363 => 0x1c }, 'sonyiso' => { 365 => 0x1218, 366 => 0x11f4, 367 => 0x1270, 368 => [0x1254,0x1258,0x1280], 369 => 0x113c, 370 => 0x344, 371 => 0x346, 381 => 0x4 }, 'sonymaxaperturevalue' => { 381 => 0x16 }, 'sonymodelid' => { 357 => 0xb001 }, 'sonyquality' => { 161 => 0x3c }, 'source' => { 114 => 0x73, 262 => 'Source', 401 => 'source', 402 => 'source', 412 => 'Source' }, 'sourcedirectoryindex' => { 290 => 0x0 }, 'sourcefileindex' => { 290 => 0x2 }, 'sourcephotoscount' => { 389 => 'SourcePhotosCount' }, 'spatialfrequencyresponse' => { 404 => 'SpatialFrequencyResponse' }, 'spatialfrequencyresponsecolumns' => { 404 => [\'SpatialFrequencyResponse','SpatialFrequencyResponseColumns'] }, 'spatialfrequencyresponsenames' => { 404 => [\'SpatialFrequencyResponse','SpatialFrequencyResponseNames'] }, 'spatialfrequencyresponserows' => { 404 => [\'SpatialFrequencyResponse','SpatialFrequencyResponseRows'] }, 'spatialfrequencyresponsevalues' => { 404 => [\'SpatialFrequencyResponse','SpatialFrequencyResponseValues'] }, 'speakerplacement' => { 425 => 'speakerPlacement' }, 'specialeffectlevel' => { 102 => 0x3030 }, 'specialeffectmode' => { 102 => 0x2076 }, 'specialeffectsetting' => { 102 => 0x3031 }, 'specialinstructions' => { 114 => 0x28 }, 'specialmode' => { 255 => 0x200, 336 => 0x200 }, 'specialoccasion' => { 417 => 'specialOccasion' }, 'spectralsensitivity' => { 106 => 0x8824, 404 => 'SpectralSensitivity' }, 'specularwhitelevel' => { 38 => [0x2b9,0x2d0,0x2d4], 40 => 0x1e4, 41 => [0x1fd,0x2dd], 42 => 0x30f }, 'splitcolumn' => { 312 => 0x222 }, 'splittoningbalance' => { 400 => 'SplitToningBalance' }, 'splittoninghighlighthue' => { 400 => 'SplitToningHighlightHue' }, 'splittoninghighlightsaturation' => { 400 => 'SplitToningHighlightSaturation' }, 'splittoningshadowhue' => { 400 => 'SplitToningShadowHue' }, 'splittoningshadowsaturation' => { 400 => 'SplitToningShadowSaturation' }, 'sport' => { 415 => 'sport' }, 'spotfocuspointx' => { 158 => 0x2d }, 'spotfocuspointy' => { 158 => 0x2e }, 'spotmeteringmode' => { 31 => 0x27 }, 'spotmeterlinktoafpoint' => { 73 => 0x107 }, 'sractive' => { 284 => '17.1' }, 'srawquality' => { 31 => 0x2e }, 'srfocallength' => { 305 => 0x3 }, 'srhalfpresstime' => { 305 => 0x2 }, 'srresult' => { 305 => 0x0, 306 => 0x0 }, 'stackedimage' => { 250 => 0x804 }, 'standardoutputhighlightpoint' => { 98 => 0x14 }, 'standardoutputsensitivity' => { 106 => 0x8831, 405 => 'StandardOutputSensitivity' }, 'standardoutputshadowpoint' => { 98 => 0x15 }, 'standardrawcolortone' => { 98 => 0xd }, 'standardrawcontrast' => { 98 => 0xf }, 'standardrawhighlight' => { 98 => 0x75 }, 'standardrawhighlightpoint' => { 98 => 0x12 }, 'standardrawlinear' => { 98 => 0x10 }, 'standardrawsaturation' => { 98 => 0xe }, 'standardrawshadow' => { 98 => 0x7e }, 'standardrawshadowpoint' => { 98 => 0x13 }, 'standardrawsharpness' => { 98 => 0x11 }, 'standardunsharpmaskfineness' => { 98 => 0x94 }, 'standardunsharpmaskstrength' => { 98 => 0x92 }, 'standardunsharpmaskthreshold' => { 98 => 0x96 }, 'standbytimer' => { 238 => '19.1', 242 => '18.1', 247 => '19.1' }, 'startingpage' => { 415 => 'startingPage' }, 'startmovieshooting' => { 73 => 0x70d }, 'starttimecode' => { 425 => 'startTimecode' }, 'starttimecodetimeformat' => { 425 => [\'startTimecode','startTimecodeTimeFormat'] }, 'starttimecodetimevalue' => { 425 => [\'startTimecode','startTimecodeTimeValue'] }, 'starttimecodevalue' => { 425 => [\'startTimecode','startTimecodeValue'] }, 'starttimesamplesize' => { 425 => 'startTimeSampleSize' }, 'starttimescale' => { 425 => 'startTimeScale' }, 'state' => { 141 => 'State', 270 => 0x6b, 412 => 'State' }, 'status' => { 388 => 'Status', 392 => 'Status' }, 'stitchingsoftware' => { 389 => 'StitchingSoftware' }, 'stopsabovebaseiso' => { 364 => 0x113e, 365 => 0x113e, 366 => 0x111a, 367 => 0x1196, 368 => 0x1172, 369 => 0x102a, 370 => 0x222, 371 => 0x222, 381 => 0xa }, 'storagemethod' => { 165 => 0x12 }, 'storebyorientation' => { 238 => '46.3', 247 => '47.3' }, 'straightenangle' => { 230 => 0x2fc08431 }, 'streamtype' => { 154 => 'StreamType' }, 'stretchmode' => { 425 => 'stretchMode' }, 'studydatetime' => { 387 => 'StudyDateTime' }, 'studydescription' => { 387 => 'StudyDescription' }, 'studyid' => { 387 => 'StudyID' }, 'studyphysician' => { 387 => 'StudyPhysician' }, 'sub-location' => { 114 => 0x5c }, 'subfiledata' => { 144 => 'data' }, 'subfiledirectory' => { 144 => '1Directory' }, 'subfilemimetype' => { 144 => '2MIME' }, 'subfilename' => { 144 => '1Name' }, 'subfileresource' => { 144 => 'rsrc' }, 'subfiletype' => { 106 => 0xfe, 144 => '0Type' }, 'subject' => { 259 => 'Subject', 319 => 'Subject', 401 => 'subject', 411 => 'Subject', 426 => 'subject' }, 'subjectarea' => { 106 => 0x9214, 404 => 'SubjectArea' }, 'subjectcode' => { 409 => 'SubjectCode' }, 'subjectdistance' => { 106 => 0x9206, 122 => 0x3e, 404 => 'SubjectDistance' }, 'subjectdistancerange' => { 106 => 0xa40c, 404 => 'SubjectDistanceRange' }, 'subjectlocation' => { 106 => 0xa214, 404 => 'SubjectLocation' }, 'subjectprogram' => { 158 => 0x22 }, 'subjectreference' => { 114 => 0xc }, 'sublabels4' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabels'] }, 'sublabels5' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabels'] }, 'sublables1' => { 408 => [\'TagStructure','TagStructureSubLabels'] }, 'sublables2' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabels'] }, 'sublables3' => { 408 => [\'TagStructure','TagStructureSubLabelsSubLabelsSubLabels'] }, 'subsectime' => { 106 => 0x9290 }, 'subsectimedigitized' => { 106 => 0x9292 }, 'subsectimeoriginal' => { 106 => 0x9291 }, 'subsection1' => { 415 => 'subsection1' }, 'subsection2' => { 415 => 'subsection2' }, 'subsection3' => { 415 => 'subsection3' }, 'subsection4' => { 415 => 'subsection4' }, 'subselector' => { 238 => '49.1' }, 'subselectorassignment' => { 238 => '48.1' }, 'subselectorplusdials' => { 238 => '49.2' }, 'subtitle' => { 415 => 'subtitle' }, 'subversionfilename' => { 408 => [\'SubVersions','SubVersionsFileName'] }, 'subversionreference' => { 408 => [\'SubVersions','SubVersionsVersRef'] }, 'subversions' => { 408 => 'SubVersions' }, 'superimposeddisplay' => { 71 => 0xa, 73 => 0x510, 74 => 0x9, 75 => 0xa, 78 => 0xa, 79 => 0xe }, 'supermacro' => { 55 => 0x1a }, 'supplementalcategories' => { 114 => 0x14, 412 => 'SupplementalCategories' }, 'supplementaltype' => { 116 => 0x37 }, 'supplementdisplayid' => { 415 => 'supplementDisplayID' }, 'supplementstartingpage' => { 415 => 'supplementStartingPage' }, 'supplementtitle' => { 415 => 'supplementTitle' }, 'svisosetting' => { 284 => 0x14 }, 'sweeppanoramadirection' => { 270 => 0x93, 347 => 0x33 }, 'sweeppanoramafieldofview' => { 270 => 0x94 }, 'sweeppanoramasize' => { 347 => 0x32 }, 'switchtoregisteredafpoint' => { 72 => 0x12, 73 => 0x50a }, 'system' => { 312 => 0x204 }, 'tagged' => { 314 => 0xdd, 315 => 'Tagged', 394 => 'tagged' }, 'tagslist' => { 403 => 'TagsList' }, 'tagstructure' => { 408 => 'TagStructure' }, 'takenumber' => { 425 => 'takeNumber' }, 'tapename' => { 425 => 'tapeName' }, 'targetaperture' => { 67 => 0x4 }, 'targetcompressionratio' => { 84 => 0x1 }, 'targetdistancesetting' => { 86 => 0x1807 }, 'targetexposuretime' => { 67 => 0x5 }, 'targetimagetype' => { 86 => 0x100a }, 'taxon' => { 105 => 'Taxon' }, 'taxonacceptednameusage' => { 105 => [\'Taxon','TaxonAcceptedNameUsage'] }, 'taxonacceptednameusageid' => { 105 => [\'Taxon','TaxonAcceptedNameUsageID'] }, 'taxonclass' => { 105 => [\'Taxon','TaxonClass'] }, 'taxonconceptid' => { 105 => [\'Taxon','TaxonTaxonConceptID'] }, 'taxonfamily' => { 105 => [\'Taxon','TaxonFamily'] }, 'taxongenus' => { 105 => [\'Taxon','TaxonGenus'] }, 'taxonhigherclassification' => { 105 => [\'Taxon','TaxonHigherClassification'] }, 'taxonid' => { 105 => [\'Taxon','TaxonTaxonID'] }, 'taxoninfraspecificepithet' => { 105 => [\'Taxon','TaxonInfraspecificEpithet'] }, 'taxonkingdom' => { 105 => [\'Taxon','TaxonKingdom'] }, 'taxonnameaccordingto' => { 105 => [\'Taxon','TaxonNameAccordingTo'] }, 'taxonnameaccordingtoid' => { 105 => [\'Taxon','TaxonNameAccordingToID'] }, 'taxonnamepublishedin' => { 105 => [\'Taxon','TaxonNamePublishedIn'] }, 'taxonnamepublishedinid' => { 105 => [\'Taxon','TaxonNamePublishedInID'] }, 'taxonnamepublishedinyear' => { 105 => [\'Taxon','TaxonNamePublishedInYear'] }, 'taxonnomenclaturalcode' => { 105 => [\'Taxon','TaxonNomenclaturalCode'] }, 'taxonnomenclaturalstatus' => { 105 => [\'Taxon','TaxonNomenclaturalStatus'] }, 'taxonorder' => { 105 => [\'Taxon','TaxonOrder'] }, 'taxonoriginalnameusage' => { 105 => [\'Taxon','TaxonOriginalNameUsage'] }, 'taxonoriginalnameusageid' => { 105 => [\'Taxon','TaxonOriginalNameUsageID'] }, 'taxonparentnameusage' => { 105 => [\'Taxon','TaxonParentNameUsage'] }, 'taxonparentnameusageid' => { 105 => [\'Taxon','TaxonParentNameUsageID'] }, 'taxonphylum' => { 105 => [\'Taxon','TaxonPhylum'] }, 'taxonrank' => { 105 => [\'Taxon','TaxonTaxonRank'] }, 'taxonremarks' => { 105 => [\'Taxon','TaxonTaxonRemarks'] }, 'taxonscientificname' => { 105 => [\'Taxon','TaxonScientificName'] }, 'taxonscientificnameauthorship' => { 105 => [\'Taxon','TaxonScientificNameAuthorship'] }, 'taxonscientificnameid' => { 105 => [\'Taxon','TaxonScientificNameID'] }, 'taxonspecificepithet' => { 105 => [\'Taxon','TaxonSpecificEpithet'] }, 'taxonsubgenus' => { 105 => [\'Taxon','TaxonSubgenus'] }, 'taxontaxonomicstatus' => { 105 => [\'Taxon','TaxonTaxonomicStatus'] }, 'taxonverbatimtaxonrank' => { 105 => [\'Taxon','TaxonVerbatimTaxonRank'] }, 'taxonvernacularname' => { 105 => [\'Taxon','TaxonVernacularName'] }, 'teaser' => { 415 => 'teaser' }, 'teleconverter' => { 163 => 0x105, 357 => 0x105 }, 'tempo' => { 425 => 'tempo' }, 'termsandconditionstext' => { 413 => 'TermsAndConditionsText' }, 'termsandconditionsurl' => { 413 => 'TermsAndConditionsURL' }, 'testname' => { 107 => 'TestName' }, 'textencoding' => { 193 => 0x4 }, 'textlayername' => { 412 => [\'TextLayers','TextLayersLayerName'] }, 'textlayers' => { 412 => 'TextLayers' }, 'textlayertext' => { 412 => [\'TextLayers','TextLayersLayerText'] }, 'textstamp' => { 270 => [0x8008,0x8009,0x3b,0x3e] }, 'thresholding' => { 106 => 0x107 }, 'thumbnailfilename' => { 86 => 0x817 }, 'thumbnailformat' => { 423 => [\'Thumbnails','ThumbnailsFormat'] }, 'thumbnailheight' => { 124 => 0xfa55, 423 => [\'Thumbnails','ThumbnailsHeight'] }, 'thumbnailimage' => { 86 => 0x2008, 103 => 'ThumbnailImage', 109 => 0x3, 147 => 'data', 255 => 0x100, 423 => [\'Thumbnails','ThumbnailsImage'] }, 'thumbnailimagename' => { 147 => '1Name' }, 'thumbnailimagesize' => { 147 => 'ImageSize' }, 'thumbnailimagetype' => { 147 => '0Type' }, 'thumbnailimagevalidarea' => { 55 => 0x13 }, 'thumbnaillength' => { 106 => 0x202 }, 'thumbnailoffset' => { 106 => 0x201 }, 'thumbnails' => { 423 => 'Thumbnails' }, 'thumbnailwidth' => { 124 => 0xfa54, 423 => [\'Thumbnails','ThumbnailsWidth'] }, 'ticker' => { 415 => 'ticker' }, 'tiffmeteringimage' => { 164 => 0x104c, 356 => 0x1110 }, 'tilelength' => { 106 => 0x143 }, 'tilewidth' => { 106 => 0x142 }, 'time' => { 120 => 0x401, 303 => 0x7 }, 'timecodes' => { 106 => 0xc763 }, 'timecreated' => { 114 => 0x3c, 122 => 0x14, 131 => 0x10, 315 => 'TimeCreated' }, 'timeperiod' => { 415 => 'timePeriod' }, 'timerfunctionbutton' => { 239 => '5.2', 240 => '12.1', 241 => '13.1' }, 'timerlength' => { 73 => 0x80c }, 'timerrecording' => { 270 => 0x96 }, 'timescaleparams' => { 425 => 'timeScaleParams' }, 'timescaleparamsframeoverlappingpercentage' => { 425 => [\'timeScaleParams','timeScaleParamsFrameOverlappingPercentage'] }, 'timescaleparamsframesize' => { 425 => [\'timeScaleParams','timeScaleParamsFrameSize'] }, 'timescaleparamsquality' => { 425 => [\'timeScaleParams','timeScaleParamsQuality'] }, 'timesent' => { 115 => 0x50 }, 'timesignature' => { 425 => 'timeSignature' }, 'timesincepoweron' => { 270 => 0x29 }, 'timestamp' => { 10 => 0x45e, 18 => 0x11c, 249 => 0x8, 262 => 'TimeStamp', 395 => 'Timestamp' }, 'timestamp1' => { 10 => 0x45a }, 'timezone' => { 68 => 0x1, 222 => 0x0, 331 => 0xa }, 'timezonecity' => { 68 => 0x2 }, 'timezonecode' => { 89 => 0x1 }, 'timezoneinfo' => { 89 => 0x2 }, 'timezoneoffset' => { 106 => 0x882a }, 'tint' => { 400 => 'Tint' }, 'title' => { 137 => 'Title', 259 => 'Title', 262 => 'Title', 270 => 0x65, 319 => 'Title', 401 => 'title', 411 => 'Title', 423 => 'Title' }, 'tonecomp' => { 194 => 0x81 }, 'tonecurve' => { 65 => 0x1, 303 => 0x402, 400 => 'ToneCurve' }, 'tonecurveactive' => { 97 => 0x110 }, 'tonecurveadobergb' => { 334 => 0xa043 }, 'tonecurveadobergbdefault' => { 334 => 0xa041 }, 'tonecurveblue' => { 400 => 'ToneCurveBlue' }, 'tonecurvebluex' => { 385 => 0x9003 }, 'tonecurvebluey' => { 385 => 0x9007 }, 'tonecurvebrightness' => { 92 => 0x20410 }, 'tonecurvebrightnessx' => { 385 => 0x9000 }, 'tonecurvebrightnessy' => { 385 => 0x9004 }, 'tonecurvecolorspace' => { 96 => 0x0 }, 'tonecurvecontrast' => { 92 => 0x20411 }, 'tonecurvefilename' => { 120 => 0x1391 }, 'tonecurvegreen' => { 400 => 'ToneCurveGreen' }, 'tonecurvegreenx' => { 385 => 0x9002 }, 'tonecurvegreeny' => { 385 => 0x9006 }, 'tonecurveinputrange' => { 96 => 0x3 }, 'tonecurveinterpolation' => { 97 => 0x159 }, 'tonecurvemode' => { 97 => 0x113 }, 'tonecurvename' => { 400 => 'ToneCurveName' }, 'tonecurvename2012' => { 400 => 'ToneCurveName2012' }, 'tonecurveoriginal' => { 92 => '0x20400.1' }, 'tonecurveoutputrange' => { 96 => 0x5 }, 'tonecurveproperty' => { 97 => 0x3c }, 'tonecurvepv2012' => { 400 => 'ToneCurvePV2012' }, 'tonecurvepv2012blue' => { 400 => 'ToneCurvePV2012Blue' }, 'tonecurvepv2012green' => { 400 => 'ToneCurvePV2012Green' }, 'tonecurvepv2012red' => { 400 => 'ToneCurvePV2012Red' }, 'tonecurvered' => { 400 => 'ToneCurveRed' }, 'tonecurveredx' => { 385 => 0x9001 }, 'tonecurveredy' => { 385 => 0x9005 }, 'tonecurves' => { 303 => 0x403 }, 'tonecurveshape' => { 96 => 0x1 }, 'tonecurvesrgb' => { 334 => 0xa042 }, 'tonecurvesrgbdefault' => { 334 => 0xa040 }, 'tonecurvex' => { 96 => 0xa }, 'tonecurvey' => { 96 => 0xb }, 'tonelevel' => { 250 => 0x52e }, 'toningeffect' => { 49 => 0xf, 194 => 0xb3, 196 => 0x38, 328 => 0x1015 }, 'toningeffectauto' => { 62 => 0xa4 }, 'toningeffectfaithful' => { 61 => 0x74, 62 => 0x74 }, 'toningeffectlandscape' => { 61 => 0x44, 62 => 0x44 }, 'toningeffectmonochrome' => { 18 => 0x108, 61 => 0x8c, 62 => 0x8c }, 'toningeffectneutral' => { 61 => 0x5c, 62 => 0x5c }, 'toningeffectportrait' => { 61 => 0x2c, 62 => 0x2c }, 'toningeffectstandard' => { 61 => 0x14, 62 => 0x14 }, 'toningeffectuserdef1' => { 61 => 0xa4, 62 => 0xbc }, 'toningeffectuserdef2' => { 61 => 0xbc, 62 => 0xd4 }, 'toningeffectuserdef3' => { 61 => 0xd4, 62 => 0xec }, 'toningsaturation' => { 196 => 0x39 }, 'totalzoom' => { 122 => 0x62 }, 'touchae' => { 270 => 0xab }, 'trackcreatedate' => { 323 => 0x1 }, 'trackmodifydate' => { 323 => 0x2 }, 'tracknumber' => { 425 => 'trackNumber' }, 'tracks' => { 425 => 'Tracks' }, 'tracksframerate' => { 425 => [\'Tracks','TracksFrameRate'] }, 'tracksmarkers' => { 425 => [\'Tracks','TracksMarkers'] }, 'tracksmarkerscomment' => { 425 => [\'Tracks','TracksMarkersComment'] }, 'tracksmarkerscuepointparams' => { 425 => [\'Tracks','TracksMarkersCuePointParams'] }, 'tracksmarkerscuepointparamskey' => { 425 => [\'Tracks','TracksMarkersCuePointParamsKey'] }, 'tracksmarkerscuepointparamsvalue' => { 425 => [\'Tracks','TracksMarkersCuePointParamsValue'] }, 'tracksmarkerscuepointtype' => { 425 => [\'Tracks','TracksMarkersCuePointType'] }, 'tracksmarkersduration' => { 425 => [\'Tracks','TracksMarkersDuration'] }, 'tracksmarkerslocation' => { 425 => [\'Tracks','TracksMarkersLocation'] }, 'tracksmarkersname' => { 425 => [\'Tracks','TracksMarkersName'] }, 'tracksmarkersprobability' => { 425 => [\'Tracks','TracksMarkersProbability'] }, 'tracksmarkersspeaker' => { 425 => [\'Tracks','TracksMarkersSpeaker'] }, 'tracksmarkersstarttime' => { 425 => [\'Tracks','TracksMarkersStartTime'] }, 'tracksmarkerstarget' => { 425 => [\'Tracks','TracksMarkersTarget'] }, 'tracksmarkerstype' => { 425 => [\'Tracks','TracksMarkersType'] }, 'trackstrackname' => { 425 => [\'Tracks','TracksTrackName'] }, 'trackstracktype' => { 425 => [\'Tracks','TracksTrackType'] }, 'trailersignature' => { 144 => 'zmie' }, 'transferfunction' => { 106 => 0x12d, 421 => 'TransferFunction' }, 'transform' => { 270 => [0x8012,0x59] }, 'transmissionreference' => { 412 => 'TransmissionReference' }, 'trapped' => { 259 => 'Trapped', 411 => 'Trapped' }, 'trashbuttonfunction' => { 73 => 0x710 }, 'travelday' => { 270 => 0x36 }, 'triggermode' => { 324 => 0x6 }, 'tstop' => { 106 => 0xc772 }, 'ttl_da_adown' => { 291 => 0x5 }, 'ttl_da_aup' => { 291 => 0x4 }, 'ttl_da_bdown' => { 291 => 0x7 }, 'ttl_da_bup' => { 291 => 0x6 }, 'tungstenawb' => { 281 => 0x1 }, 'tvexposuretimesetting' => { 284 => 0x12 }, 'type' => { 401 => 'type', 420 => 'type' }, 'typestatus' => { 105 => [\'Identification','IdentificationTypeStatus'] }, 'uniquecameramodel' => { 106 => 0xc614 }, 'uniquedocumentid' => { 114 => 0xbb }, 'uniqueobjectname' => { 115 => 0x64 }, 'unknownblock' => { 303 => 0x405 }, 'unknownblock1' => { 254 => 0x635 }, 'unknownblock2' => { 254 => 0x636 }, 'unknownblock3' => { 254 => 0x1103 }, 'unknownblock4' => { 254 => 0x1104 }, 'unknowncontrast' => { 98 => 0x45 }, 'unknowndate' => { 312 => 0x212 }, 'unknownev' => { 120 => 0x1 }, 'unknownlinear' => { 98 => 0x46 }, 'unknownnumber' => { 86 => 0x180b }, 'unknownoutputhighlightpoint' => { 98 => 0x4a }, 'unknownoutputshadowpoint' => { 98 => 0x4b }, 'unknownrawhighlight' => { 98 => 0x7b }, 'unknownrawhighlightpoint' => { 98 => 0x48 }, 'unknownrawshadow' => { 98 => 0x84 }, 'unknownrawshadowpoint' => { 98 => 0x49 }, 'unknownsharpness' => { 98 => 0x47 }, 'unknowntemperature' => { 108 => 0x4 }, 'unsharp1color' => { 235 => 0x13 }, 'unsharp1halowidth' => { 235 => 0x19 }, 'unsharp1intensity' => { 235 => 0x17 }, 'unsharp1threshold' => { 235 => 0x1b }, 'unsharp2color' => { 235 => 0x2e }, 'unsharp2halowidth' => { 235 => 0x34 }, 'unsharp2intensity' => { 235 => 0x32 }, 'unsharp2threshold' => { 235 => 0x36 }, 'unsharp3color' => { 235 => 0x49 }, 'unsharp3halowidth' => { 235 => 0x4f }, 'unsharp3intensity' => { 235 => 0x4d }, 'unsharp3threshold' => { 235 => 0x51 }, 'unsharp4color' => { 235 => 0x64 }, 'unsharp4halowidth' => { 235 => 0x6a }, 'unsharp4intensity' => { 235 => 0x68 }, 'unsharp4threshold' => { 235 => 0x6c }, 'unsharpcount' => { 235 => 0x0 }, 'unsharpmask' => { 98 => 0x90, 230 => 0x76a43200 }, 'unsharpmaskfineness' => { 92 => 0x20309 }, 'unsharpmaskstrength' => { 92 => 0x20308 }, 'unsharpmaskthreshold' => { 92 => 0x2030a }, 'uprightcentermode' => { 400 => 'UprightCenterMode' }, 'uprightcenternormx' => { 400 => 'UprightCenterNormX' }, 'uprightcenternormy' => { 400 => 'UprightCenterNormY' }, 'uprightdependentdigest' => { 400 => 'UprightDependentDigest' }, 'uprightfocallength35mm' => { 400 => 'UprightFocalLength35mm' }, 'uprightfocalmode' => { 400 => 'UprightFocalMode' }, 'uprightpreview' => { 400 => 'UprightPreview' }, 'uprighttransform_0' => { 400 => 'UprightTransform_0' }, 'uprighttransform_1' => { 400 => 'UprightTransform_1' }, 'uprighttransform_2' => { 400 => 'UprightTransform_2' }, 'uprighttransform_3' => { 400 => 'UprightTransform_3' }, 'uprighttransform_4' => { 400 => 'UprightTransform_4' }, 'uprighttransformcount' => { 400 => 'UprightTransformCount' }, 'uprightversion' => { 400 => 'UprightVersion' }, 'urgency' => { 114 => 0xa, 412 => 'Urgency' }, 'url' => { 137 => 'URL', 262 => 'URL', 317 => 0x40b, 415 => 'url' }, 'urla-platform' => { 415 => [\'url','urlA-platform'] }, 'urlurl' => { 415 => [\'url','urlUrl'] }, 'usablemeteringmodes' => { 73 => 0x10a }, 'usableshootingmodes' => { 73 => 0x109 }, 'usage' => { 416 => 'usage' }, 'usageterms' => { 429 => 'UsageTerms' }, 'useguidelines' => { 397 => 'useGuidelines' }, 'usepanoramaviewer' => { 389 => 'UsePanoramaViewer' }, 'usercomment' => { 86 => 0x805, 106 => 0x9286, 404 => 'UserComment' }, 'userdef1picturestyle' => { 18 => 0x10c, 61 => 0xd8, 62 => 0xf0 }, 'userdef2picturestyle' => { 18 => 0x10e, 61 => 0xda, 62 => 0xf2 }, 'userdef3picturestyle' => { 18 => 0x110, 61 => 0xdc, 62 => 0xf4 }, 'userfields' => { 392 => 'UserFields' }, 'userlabel' => { 324 => 0x2b }, 'userprofile' => { 266 => 0x302, 272 => 0x3038 }, 'usmlenselectronicmf' => { 72 => 0x7, 73 => 0x501 }, 'uspsnumber' => { 415 => 'uspsNumber' }, 'utmeasting' => { 148 => 'Easting' }, 'utmmapdatum' => { 148 => 'Datum' }, 'utmnorthing' => { 148 => 'Northing' }, 'utmzone' => { 148 => 'Zone' }, 'uv-irfiltercorrection' => { 266 => 0x325 }, 'validbits' => { 254 => 0x611, 255 => 0x102c }, 'validpixeldepth' => { 258 => 0x611 }, 'variousmodes' => { 122 => 0x26 }, 'variousmodes2' => { 122 => 0x3a }, 'variprogram' => { 194 => 0xab }, 'version' => { 111 => 0x0, 319 => 'Version', 400 => 'Version' }, 'versioncreatedate' => { 385 => 0xd100 }, 'versionid' => { 426 => 'VersionID' }, 'versionidentifier' => { 415 => 'versionIdentifier' }, 'versionmodifydate' => { 385 => 0xd101 }, 'versions' => { 426 => 'Versions' }, 'versionscomments' => { 426 => [\'Versions','VersionsComments'] }, 'versionsevent' => { 426 => [\'Versions','VersionsEvent'] }, 'versionseventaction' => { 426 => [\'Versions','VersionsEventAction'] }, 'versionseventchanged' => { 426 => [\'Versions','VersionsEventChanged'] }, 'versionseventinstanceid' => { 426 => [\'Versions','VersionsEventInstanceID'] }, 'versionseventparameters' => { 426 => [\'Versions','VersionsEventParameters'] }, 'versionseventsoftwareagent' => { 426 => [\'Versions','VersionsEventSoftwareAgent'] }, 'versionseventwhen' => { 426 => [\'Versions','VersionsEventWhen'] }, 'versionsmodifier' => { 426 => [\'Versions','VersionsModifier'] }, 'versionsmodifydate' => { 426 => [\'Versions','VersionsModifyDate'] }, 'versionsversion' => { 426 => [\'Versions','VersionsVersion'] }, 'verticalafonbutton' => { 237 => '3.2', 238 => '47.2' }, 'verticalfuncbutton' => { 238 => '42.2' }, 'verticalfuncbuttonplusdials' => { 238 => '43.1' }, 'verticalmultiselector' => { 238 => '42.1' }, 'vfdisplayillumination' => { 73 => [0x510,0x51d] }, 'vibrance' => { 393 => 'Vibrance', 400 => 'Vibrance' }, 'vibrationreduction' => { 201 => [0x75,0x82,0x1ae], 209 => '586.1', 216 => '590.2', 221 => 0x4 }, 'videoalphamode' => { 425 => 'videoAlphaMode' }, 'videoalphapremultiplecolor' => { 425 => 'videoAlphaPremultipleColor' }, 'videoalphapremultiplecolora' => { 425 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorA'] }, 'videoalphapremultiplecolorb' => { 425 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorB'] }, 'videoalphapremultiplecolorblack' => { 425 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorBlack'] }, 'videoalphapremultiplecolorblue' => { 425 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorBlue'] }, 'videoalphapremultiplecolorcyan' => { 425 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorCyan'] }, 'videoalphapremultiplecolorgreen' => { 425 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorGreen'] }, 'videoalphapremultiplecolorl' => { 425 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorL'] }, 'videoalphapremultiplecolormagenta' => { 425 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorMagenta'] }, 'videoalphapremultiplecolormode' => { 425 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorMode'] }, 'videoalphapremultiplecolorred' => { 425 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorRed'] }, 'videoalphapremultiplecolorswatchname' => { 425 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorSwatchName'] }, 'videoalphapremultiplecolortint' => { 425 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorTint'] }, 'videoalphapremultiplecolortype' => { 425 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorType'] }, 'videoalphapremultiplecoloryellow' => { 425 => [\'videoAlphaPremultipleColor','videoAlphaPremultipleColorYellow'] }, 'videoalphaunityistransparent' => { 425 => 'videoAlphaUnityIsTransparent' }, 'videocodec' => { 58 => 0x74 }, 'videocolorspace' => { 425 => 'videoColorSpace' }, 'videocompressor' => { 425 => 'videoCompressor' }, 'videofieldorder' => { 425 => 'videoFieldOrder' }, 'videoframerate' => { 425 => 'videoFrameRate' }, 'videoframesize' => { 425 => 'videoFrameSize' }, 'videoframesizeh' => { 425 => [\'videoFrameSize','videoFrameSizeH'] }, 'videoframesizeunit' => { 425 => [\'videoFrameSize','videoFrameSizeUnit'] }, 'videoframesizew' => { 425 => [\'videoFrameSize','videoFrameSizeW'] }, 'videomoddate' => { 425 => 'videoModDate' }, 'videopixelaspectratio' => { 425 => 'videoPixelAspectRatio' }, 'videopixeldepth' => { 425 => 'videoPixelDepth' }, 'videoquality' => { 102 => 0x4003 }, 'viewfinderdisplay' => { 237 => '12.4', 238 => '6.3' }, 'viewfinderwarning' => { 237 => '13.4', 244 => '3.5', 245 => '6.2', 248 => '4.4' }, 'viewfinderwarnings' => { 73 => 0x40a }, 'viewinfoduringexposure' => { 73 => 0x407 }, 'viewingmode' => { 347 => 0x2f, 361 => 0x18 }, 'viewingmode2' => { 347 => [0x85,0x285] }, 'viewpoint' => { 414 => 'viewpoint' }, 'vignetteamount' => { 400 => 'VignetteAmount' }, 'vignettecontrol' => { 194 => 0x2a, 230 => 0x76a43205 }, 'vignettecontrolintensity' => { 230 => 0xac6bd5c0 }, 'vignettecorrectionalreadyapplied' => { 396 => 'VignetteCorrectionAlreadyApplied' }, 'vignettemidpoint' => { 400 => 'VignetteMidpoint' }, 'vignetting' => { 328 => 0x1011, 334 => 0xa052 }, 'vignettingcorrection' => { 334 => 0xa053, 357 => 0x2011 }, 'vignettingsetting' => { 334 => 0xa054 }, 'visualtechnique' => { 414 => 'visualTechnique' }, 'voicememo' => { 336 => 0x216 }, 'volume' => { 415 => 'volume' }, 'vr_0x66' => { 201 => 0x66 }, 'vrdoffset' => { 55 => 0xd0 }, 'vrmode' => { 221 => 0x6 }, 'wb_bluelevel3500k' => { 164 => 0x19a }, 'wb_bluelevel6500k' => { 164 => 0x18a }, 'wb_bluelevelcustom' => { 164 => 0x18e }, 'wb_bluelevelscloudy' => { 164 => 0x106 }, 'wb_bluelevelsdaylight' => { 164 => 0xea }, 'wb_bluelevelsflash' => { 164 => 0x122 }, 'wb_bluelevelsfluorescent' => { 164 => [0x40a,0x15a] }, 'wb_bluelevelskelvin' => { 164 => 0x254 }, 'wb_bluelevelsshade' => { 164 => 0x176 }, 'wb_bluelevelstungsten' => { 164 => 0xce }, 'wb_gbrglevels' => { 164 => 0xae, 167 => 0x4 }, 'wb_glevel' => { 254 => 0x11f }, 'wb_glevel3000k' => { 254 => 0x113 }, 'wb_glevel3300k' => { 254 => 0x114 }, 'wb_glevel3600k' => { 254 => 0x115 }, 'wb_glevel3900k' => { 254 => 0x116 }, 'wb_glevel4000k' => { 254 => 0x117 }, 'wb_glevel4300k' => { 254 => 0x118 }, 'wb_glevel4500k' => { 254 => 0x119 }, 'wb_glevel4800k' => { 254 => 0x11a }, 'wb_glevel5300k' => { 254 => 0x11b }, 'wb_glevel6000k' => { 254 => 0x11c }, 'wb_glevel6600k' => { 254 => 0x11d }, 'wb_glevel7500k' => { 254 => 0x11e }, 'wb_grbglevels' => { 177 => 0x0 }, 'wb_rbgglevels' => { 174 => 0x0 }, 'wb_rblevels' => { 194 => 0xc, 254 => 0x100 }, 'wb_rblevels1' => { 275 => 0x2 }, 'wb_rblevels2' => { 275 => 0x5 }, 'wb_rblevels3' => { 275 => 0x8 }, 'wb_rblevels3000k' => { 254 => 0x102 }, 'wb_rblevels3300k' => { 254 => 0x103 }, 'wb_rblevels3500k' => { 164 => 0x430 }, 'wb_rblevels3600k' => { 254 => 0x104 }, 'wb_rblevels3900k' => { 254 => 0x105 }, 'wb_rblevels4' => { 275 => 0xb }, 'wb_rblevels4000k' => { 254 => 0x106 }, 'wb_rblevels4300k' => { 254 => 0x107 }, 'wb_rblevels4500k' => { 254 => 0x108 }, 'wb_rblevels4800k' => { 254 => 0x109 }, 'wb_rblevels5' => { 275 => 0xe }, 'wb_rblevels5300k' => { 254 => 0x10a }, 'wb_rblevels6' => { 275 => 0x11 }, 'wb_rblevels6000k' => { 254 => 0x10b }, 'wb_rblevels6500k' => { 164 => 0x420 }, 'wb_rblevels6600k' => { 254 => 0x10c }, 'wb_rblevels7' => { 275 => 0x14 }, 'wb_rblevels7500k' => { 254 => 0x10d }, 'wb_rblevelsauto' => { 258 => 0x110 }, 'wb_rblevelscloudy' => { 164 => 0x3f0, 166 => 0x10, 258 => 0x121 }, 'wb_rblevelscoolwhitef' => { 164 => 0x308, 166 => 0x14 }, 'wb_rblevelscoolwhitefluor' => { 258 => 0x132 }, 'wb_rblevelscustom' => { 164 => 0x424 }, 'wb_rblevelscwb1' => { 254 => 0x10e }, 'wb_rblevelscwb2' => { 254 => 0x10f }, 'wb_rblevelscwb3' => { 254 => 0x110 }, 'wb_rblevelscwb4' => { 254 => 0x111 }, 'wb_rblevelsdaylight' => { 164 => [0x3ec,0x528], 166 => 0xc }, 'wb_rblevelsdaylightf' => { 166 => 0x24 }, 'wb_rblevelsdaylightfluor' => { 258 => 0x130 }, 'wb_rblevelsdaywhitef' => { 166 => 0x28 }, 'wb_rblevelsdaywhitefluor' => { 258 => 0x131 }, 'wb_rblevelseveningsunlight' => { 258 => 0x124 }, 'wb_rblevelsfineweather' => { 258 => 0x122 }, 'wb_rblevelsflash' => { 164 => [0x3f4,0x304], 166 => 0x18 }, 'wb_rblevelsshade' => { 164 => 0x418, 166 => 0x20, 258 => 0x120 }, 'wb_rblevelstungsten' => { 164 => 0x3e8, 166 => 0x8, 258 => 0x123 }, 'wb_rblevelsunknown' => { 166 => 0x1c }, 'wb_rblevelsused' => { 258 => 0x100 }, 'wb_rblevelswhitef' => { 166 => 0x2c }, 'wb_rblevelswhitefluorescent' => { 258 => 0x133 }, 'wb_redlevel3500k' => { 164 => 0x198 }, 'wb_redlevel6500k' => { 164 => 0x188 }, 'wb_redlevelcustom' => { 164 => 0x18c }, 'wb_redlevelscloudy' => { 164 => 0xf8 }, 'wb_redlevelsdaylight' => { 164 => 0xdc }, 'wb_redlevelsflash' => { 164 => 0x114 }, 'wb_redlevelsfluorescent' => { 164 => [0x3fc,0x14c] }, 'wb_redlevelskelvin' => { 164 => 0x1be }, 'wb_redlevelsshade' => { 164 => 0x168 }, 'wb_redlevelstungsten' => { 164 => 0xc0 }, 'wb_rgbglevels' => { 176 => 0x0 }, 'wb_rgblevels' => { 164 => [0x546,0x96], 267 => 0xd, 268 => 0x413, 272 => 0x3036, 312 => 0x107, 364 => 0x117c, 365 => 0x1180, 366 => 0x115c, 367 => 0x11d8, 368 => 0x11b4, 369 => 0x106c, 370 => 0x264, 371 => 0x264 }, 'wb_rgblevels1' => { 276 => 0x2 }, 'wb_rgblevels2' => { 276 => 0x6 }, 'wb_rgblevels3' => { 276 => 0xa }, 'wb_rgblevels4' => { 276 => 0xe }, 'wb_rgblevels5' => { 276 => 0x12 }, 'wb_rgblevels6' => { 276 => 0x16 }, 'wb_rgblevels7' => { 276 => 0x1a }, 'wb_rggbblacklevels' => { 32 => 0x25 }, 'wb_rggblevels' => { 167 => 0x4, 175 => 0x0 }, 'wb_rggblevelsasshot' => { 34 => 0x0, 35 => 0x19, 36 => 0x22, 37 => 0x3f, 40 => 0x3f, 41 => 0x3f, 42 => 0x3f }, 'wb_rggblevelsauto' => { 32 => 0x1, 34 => 0x5, 35 => 0x1e, 36 => 0x18, 37 => 0x44, 40 => 0x44, 41 => 0x44, 42 => 0x44, 334 => 0xa022 }, 'wb_rggblevelsblack' => { 334 => 0xa028 }, 'wb_rggblevelscloudy' => { 32 => 0xd, 34 => 0x1e, 35 => 0x2d, 36 => 0x31, 37 => 0x58, 40 => 0x71, 41 => 0x8a, 42 => 0x8f, 303 => 0x20f, 311 => 0x14 }, 'wb_rggblevelscustom' => { 32 => 0x1d, 37 => 0x80 }, 'wb_rggblevelscustom1' => { 35 => 0x41 }, 'wb_rggblevelscustom2' => { 35 => 0x46 }, 'wb_rggblevelsdaylight' => { 32 => 0x5, 34 => 0x14, 35 => 0x23, 36 => 0x27, 37 => 0x4e, 40 => 0x67, 41 => 0x80, 42 => 0x85, 303 => 0x20d, 311 => 0x2 }, 'wb_rggblevelsflash' => { 32 => 0x19, 34 => 0x32, 35 => 0x3c, 36 => 0x45, 37 => 0x6c, 40 => 0x85, 41 => 0x9e, 42 => 0xa3, 303 => 0x214, 311 => 0x41 }, 'wb_rggblevelsfluorescent' => { 32 => 0x15, 34 => 0x28, 35 => 0x37, 36 => 0x3b, 37 => 0x62, 40 => 0x7b, 41 => 0x94, 42 => 0x99 }, 'wb_rggblevelsfluorescentd' => { 303 => 0x211, 311 => 0x26 }, 'wb_rggblevelsfluorescentl' => { 311 => 0x4a }, 'wb_rggblevelsfluorescentn' => { 303 => 0x212, 311 => 0x2f }, 'wb_rggblevelsfluorescentw' => { 303 => 0x213, 311 => 0x38 }, 'wb_rggblevelsilluminator1' => { 334 => 0xa023 }, 'wb_rggblevelsilluminator2' => { 334 => 0xa024 }, 'wb_rggblevelskelvin' => { 32 => 0x21, 34 => 0x2d, 36 => 0x40, 37 => 0x67, 40 => 0x80, 41 => 0x99, 42 => 0x9e }, 'wb_rggblevelsmeasured' => { 34 => 0xa, 37 => 0x49, 40 => 0x49, 41 => 0x49, 42 => 0x49 }, 'wb_rggblevelspc1' => { 36 => 0x90, 37 => 0x71 }, 'wb_rggblevelspc2' => { 36 => 0x95, 37 => 0x76 }, 'wb_rggblevelspc3' => { 36 => 0x9a, 37 => 0x7b }, 'wb_rggblevelsshade' => { 32 => 0x9, 34 => 0x19, 35 => 0x28, 36 => 0x2c, 37 => 0x53, 40 => 0x6c, 41 => 0x85, 42 => 0x8a, 303 => 0x20e, 311 => 0xb }, 'wb_rggblevelstungsten' => { 32 => 0x11, 34 => 0x23, 35 => 0x32, 36 => 0x36, 37 => 0x5d, 40 => 0x76, 41 => 0x8f, 42 => 0x94, 303 => 0x210, 311 => 0x1d }, 'wb_rggblevelsuncorrected' => { 334 => 0xa021 }, 'wb_rggblevelsunknown' => { 34 => 0xf, 36 => 0x1d, 40 => 0x4e, 41 => 0x4e, 42 => 0x4e, 311 => 0x53 }, 'wb_rggblevelsunknown10' => { 34 => 0x5f, 36 => 0x72, 40 => 0x9e, 41 => 0x7b, 42 => 0x7b }, 'wb_rggblevelsunknown11' => { 34 => 0x64, 36 => 0x77, 40 => 0xa3, 41 => 0xa3, 42 => 0x80 }, 'wb_rggblevelsunknown12' => { 34 => 0x69, 36 => 0x7c, 40 => 0xa8, 41 => 0xa8, 42 => 0xa8 }, 'wb_rggblevelsunknown13' => { 34 => 0x6e, 36 => 0x81, 40 => 0xad, 41 => 0xad, 42 => 0xad }, 'wb_rggblevelsunknown14' => { 36 => 0x86, 40 => 0xb2, 41 => 0xb2, 42 => 0xb2 }, 'wb_rggblevelsunknown15' => { 36 => 0x8b, 40 => 0xb7, 41 => 0xb7, 42 => 0xb7 }, 'wb_rggblevelsunknown16' => { 36 => 0x9f, 41 => 0xbc, 42 => 0xbc }, 'wb_rggblevelsunknown17' => { 41 => 0xc1, 42 => 0xc1 }, 'wb_rggblevelsunknown18' => { 41 => 0xc6, 42 => 0xc6 }, 'wb_rggblevelsunknown19' => { 41 => 0xcb, 42 => 0xcb }, 'wb_rggblevelsunknown2' => { 34 => 0x37, 36 => 0x4a, 40 => 0x53, 41 => 0x53, 42 => 0x53 }, 'wb_rggblevelsunknown20' => { 41 => 0xd0, 42 => 0xd0 }, 'wb_rggblevelsunknown21' => { 42 => 0xd5 }, 'wb_rggblevelsunknown22' => { 42 => 0xda }, 'wb_rggblevelsunknown23' => { 42 => 0xdf }, 'wb_rggblevelsunknown24' => { 42 => 0xe4 }, 'wb_rggblevelsunknown25' => { 42 => 0xe9 }, 'wb_rggblevelsunknown26' => { 42 => 0xee }, 'wb_rggblevelsunknown27' => { 42 => 0xf3 }, 'wb_rggblevelsunknown28' => { 42 => 0xf8 }, 'wb_rggblevelsunknown29' => { 42 => 0xfd }, 'wb_rggblevelsunknown3' => { 34 => 0x3c, 36 => 0x4f, 40 => 0x58, 41 => 0x58, 42 => 0x58 }, 'wb_rggblevelsunknown30' => { 42 => 0x102 }, 'wb_rggblevelsunknown4' => { 34 => 0x41, 36 => 0x54, 40 => 0x5d, 41 => 0x5d, 42 => 0x5d }, 'wb_rggblevelsunknown5' => { 34 => 0x46, 36 => 0x59, 40 => 0x62, 41 => 0x62, 42 => 0x62 }, 'wb_rggblevelsunknown6' => { 34 => 0x4b, 36 => 0x5e, 40 => 0x8a, 41 => 0x67, 42 => 0x67 }, 'wb_rggblevelsunknown7' => { 34 => 0x50, 36 => 0x63, 40 => 0x8f, 41 => 0x6c, 42 => 0x6c }, 'wb_rggblevelsunknown8' => { 34 => 0x55, 36 => 0x68, 40 => 0x94, 41 => 0x71, 42 => 0x71 }, 'wb_rggblevelsunknown9' => { 34 => 0x5a, 36 => 0x6d, 40 => 0x99, 41 => 0x76, 42 => 0x76 }, 'wb_rggblevelsuserselected' => { 311 => 0x5c }, 'wbadjblueamber' => { 92 => 0x20106 }, 'wbadjbluebalance' => { 236 => 0x8 }, 'wbadjcolortemp' => { 92 => 0x20102, 97 => 0x1a }, 'wbadjlighting' => { 236 => 0x14 }, 'wbadjmagentagreen' => { 92 => 0x20105 }, 'wbadjmode' => { 236 => 0x10 }, 'wbadjredbalance' => { 236 => 0x0 }, 'wbadjrggblevels' => { 92 => 0x20125, 97 => 0x6 }, 'wbadjtemperature' => { 236 => 0x18 }, 'wbadjtint' => { 236 => 0x25 }, 'wbbluelevel' => { 266 => 0x324, 270 => 0x8006, 274 => 0x26 }, 'wbbracketmode' => { 49 => 0x9 }, 'wbbracketshotnumber' => { 164 => 0x2b, 328 => 0x101a }, 'wbbracketvalueab' => { 49 => 0xc }, 'wbbracketvaluegm' => { 49 => 0xd }, 'wbfinetuneactive' => { 97 => 0x24 }, 'wbfinetunesaturation' => { 97 => 0x28 }, 'wbfinetunetone' => { 97 => 0x2c }, 'wbgreenlevel' => { 266 => 0x323, 270 => 0x8005, 274 => 0x25 }, 'wbmediaimagesizesetting' => { 73 => 0x708 }, 'wbmode' => { 166 => 0x4, 255 => 0x1015 }, 'wbredlevel' => { 266 => 0x322, 270 => 0x8004, 274 => 0x24 }, 'wbscale' => { 167 => 0x0 }, 'wbshiftab' => { 65 => 0xc, 270 => 0x46, 285 => 0x10 }, 'wbshiftab_gm' => { 357 => 0x2014 }, 'wbshiftab_gm_precise' => { 357 => 0x2026 }, 'wbshiftgm' => { 65 => 0xd, 270 => 0x47, 285 => 0x11 }, 'wbtype1' => { 275 => 0x1, 276 => 0x1 }, 'wbtype2' => { 275 => 0x4, 276 => 0x5 }, 'wbtype3' => { 275 => 0x7, 276 => 0x9 }, 'wbtype4' => { 275 => 0xa, 276 => 0xd }, 'wbtype5' => { 275 => 0xd, 276 => 0x11 }, 'wbtype6' => { 275 => 0x10, 276 => 0x15 }, 'wbtype7' => { 275 => 0x13, 276 => 0x19 }, 'webstatement' => { 429 => 'WebStatement' }, 'what' => { 400 => 'What' }, 'whitebalance' => { 6 => 0x6f, 7 => [0x44,0x4a], 8 => 0xbc, 9 => 0x36, 10 => 0x5e, 11 => 0x36, 12 => 0x78, 13 => 0x6f, 14 => 0x6f, 15 => 0x73, 16 => 0x6f, 17 => 0x78, 18 => 0x54, 19 => 0x6f, 20 => 0xbc, 21 => 0x7b, 23 => 0xbc, 24 => 0xc2, 26 => 0x77, 65 => 0x8, 67 => 0x7, 101 => 0x7, 102 => [0x19,0x2012], 106 => [0xa403,0xfe4e], 111 => 0x1002, 120 => 0x3fc, 121 => 0xfa0d, 122 => 0x40, 158 => 0x3, 159 => 0xe, 160 => 0x4, 161 => 0xb, 163 => 0x115, 194 => 0x5, 220 => 0x7, 266 => 0x304, 270 => 0x3, 272 => 0x3033, 303 => 0x19, 310 => 0x7, 327 => 0x26, 328 => 0x1003, 337 => [0x3c,0x7,0x58], 345 => 0xf, 346 => 0xe, 357 => [0x115,0xb054], 400 => 'WhiteBalance', 404 => 'WhiteBalance' }, 'whitebalance0' => { 154 => 'WhiteBalance0' }, 'whitebalance1' => { 154 => 'WhiteBalance1' }, 'whitebalance2' => { 154 => 'WhiteBalance2', 250 => 0x500 }, 'whitebalanceadj' => { 92 => 0x20101, 97 => 0x18, 230 => 0x76a43204 }, 'whitebalanceautoadjustment' => { 281 => 0x0 }, 'whitebalancebias' => { 102 => 0x2011, 255 => 0x304, 270 => 0x23 }, 'whitebalanceblue' => { 65 => 0x7 }, 'whitebalancebracket' => { 250 => 0x502, 255 => 0x303 }, 'whitebalancebracketing' => { 161 => 0x22, 164 => 0x2c, 356 => 0x2c }, 'whitebalancecomp' => { 258 => 0x1001 }, 'whitebalancefinetune' => { 111 => 0x100a, 161 => 0x38, 163 => 0x112, 194 => 0xb, 328 => 0x1004, 345 => 0x6, 346 => 0x5, 357 => 0x112 }, 'whitebalancemode' => { 303 => 0x1a }, 'whitebalancered' => { 65 => 0x6 }, 'whitebalanceset' => { 284 => 0xa }, 'whitebalancesetting' => { 161 => 0x23, 345 => 0x5, 346 => 0x4, 347 => 0x16, 361 => 0xd }, 'whitebalancetemperature' => { 250 => 0x501 }, 'whiteboard' => { 255 => 0x301 }, 'whitelevel' => { 106 => 0xc61d, 303 => 0x7e }, 'whitepoint' => { 106 => 0x13e, 303 => 0x201, 421 => 'WhitePoint' }, 'whites2012' => { 400 => 'Whites2012' }, 'wideadapter' => { 328 => 0x1017 }, 'widefocuszone' => { 158 => 0x2f }, 'widerange' => { 336 => 0x20f }, 'windowsatom' => { 399 => 'windowsAtom' }, 'windowsatomextension' => { 399 => [\'windowsAtom','windowsAtomExtension'] }, 'windowsatominvocationflags' => { 399 => [\'windowsAtom','windowsAtomInvocationFlags'] }, 'windowsatomuncprojectpath' => { 399 => [\'windowsAtom','windowsAtomUncProjectPath'] }, 'wordcount' => { 415 => 'wordCount' }, 'workcolorspace' => { 92 => 0x10200, 97 => 0x270 }, 'worktodo' => { 406 => 'WorkToDo' }, 'worldtimelocation' => { 270 => 0x3a, 303 => 0x22, 309 => '0.1' }, 'writer-editor' => { 114 => 0x7a }, 'x3filllight' => { 337 => 0x12 }, 'xml' => { 118 => 'xml ' }, 'xmp' => { 95 => 0xffff00f6, 107 => 'XMP' }, 'xmptoolkit' => { 422 => 'xmptk' }, 'xpauthor' => { 106 => 0x9c9d }, 'xpcomment' => { 106 => 0x9c9c }, 'xpkeywords' => { 106 => 0x9c9e }, 'xposition' => { 106 => 0x11e }, 'xpsubject' => { 106 => 0x9c9f }, 'xptitle' => { 106 => 0x9c9b }, 'xresolution' => { 106 => 0x11a, 117 => 0x3, 318 => 0x0, 421 => 'XResolution' }, 'xyresolution' => { 110 => 0x3 }, 'yawangle' => { 210 => 0x3513 }, 'ycbcrcoefficients' => { 106 => 0x211, 421 => 'YCbCrCoefficients' }, 'ycbcrpositioning' => { 106 => 0x213, 421 => 'YCbCrPositioning' }, 'ycbcrsubsampling' => { 106 => 0x212, 421 => 'YCbCrSubSampling' }, 'yearcreated' => { 122 => 0x10, 131 => 0xc }, 'yield' => { 417 => 'yield' }, 'yposition' => { 106 => 0x11f }, 'yresolution' => { 106 => 0x11b, 117 => 0x5, 318 => 0x4, 421 => 'YResolution' }, 'zonematching' => { 163 => 0x10a, 166 => [0x3a,0x4a], 357 => 0xb024 }, 'zonematchingmode' => { 161 => 0x14 }, 'zonematchingon' => { 160 => 0x75 }, 'zonematchingvalue' => { 345 => 0x1f }, 'zoomedpreviewlength' => { 255 => 0xf05 }, 'zoomedpreviewsize' => { 255 => 0xf06 }, 'zoomedpreviewstart' => { 255 => 0xf04 }, 'zoomsourcewidth' => { 31 => 0x24 }, 'zoomstepcount' => { 253 => 0x300, 255 => 0x100d }, 'zoomtargetwidth' => { 31 => 0x25 }, ); # lookup for non-writable tags to check if the name exists my %tagExists = ( '_ac3' => 1, '_h264' => 1, '_stream' => 1, 'a100dataoffset' => 1, 'aas' => 1, 'abovecolor' => 1, 'abstract' => 1, 'accelerometertime' => 1, 'accessdate' => 1, 'accountname' => 1, 'acdsee' => 1, 'acquisitiontime' => 1, 'acquisitiontimeday' => 1, 'acquisitiontimemonth' => 1, 'acquisitiontimeyear' => 1, 'acquisitiontimeyearmonth' => 1, 'acquisitiontimeyearmonthday' => 1, 'acroform' => 1, 'actor' => 1, 'actualcompensation' => 1, 'actualscalemax' => 1, 'actualscalemin' => 1, 'adobe_cm' => 1, 'adobecmtype' => 1, 'adobecrw' => 1, 'adobekoda' => 1, 'adobeleaf' => 1, 'adobemrw' => 1, 'adobepano' => 1, 'adobephotoshop' => 1, 'adoberaf' => 1, 'adobesr2' => 1, 'adoptedneutral' => 1, 'adult' => 1, 'advancedcontentencryption' => 1, 'advancedmutualexcl' => 1, 'advancedscenemode' => 1, 'adventrevision' => 1, 'adventscale' => 1, 'aeflags' => 1, 'aeinfo' => 1, 'aeinfo2' => 1, 'aeinfo3' => 1, 'aeinfounknown' => 1, 'afarea' => 1, 'afareaheights' => 1, 'afareawidths' => 1, 'afareaxpositions' => 1, 'afareaypositions' => 1, 'afconfig' => 1, 'afcp' => 1, 'afcp_iptc' => 1, 'aff1' => 1, 'aff5' => 1, 'affheader' => 1, 'affinetransformmat' => 1, 'afinfo' => 1, 'afinfo2' => 1, 'afinfo2version' => 1, 'afinfo3' => 1, 'afinfocus' => 1, 'afinfosize' => 1, 'afm' => 1, 'afpointsinfocus1d' => 1, 'afsp' => 1, 'afstatus15' => 1, 'afstatus19' => 1, 'afstatus79' => 1, 'aftune' => 1, 'aimetadata' => 1, 'aipdfprivatedata' => 1, 'aiprivatedata' => 1, 'album2' => 1, 'albumartist' => 1, 'albumartistsortorder' => 1, 'albumcoverurl' => 1, 'albumid' => 1, 'albumidalbumartist' => 1, 'albumname' => 1, 'albumsortorder' => 1, 'albumtitle' => 1, 'albumtitleid' => 1, 'albumtitlesortorder' => 1, 'aliaslayermetadata' => 1, 'alignment' => 1, 'allcolorflatfield1' => 1, 'allcolorflatfield2' => 1, 'allcolorflatfield3' => 1, 'alph' => 1, 'alpha' => 1, 'alphabitdepth' => 1, 'alphabytecount' => 1, 'alphachannelsnames' => 1, 'alphacompression' => 1, 'alphadatadiscard' => 1, 'alphafilter' => 1, 'alphafiltering' => 1, 'alphaidentifiers' => 1, 'alphainterlace' => 1, 'alphaoffset' => 1, 'alphapreprocessing' => 1, 'alphasample' => 1, 'alternateduotonecolors' => 1, 'alternatesourceurl' => 1, 'alternatespotcolors' => 1, 'ambienceinfo' => 1, 'anim' => 1, 'animationiterations' => 1, 'animationloopcount' => 1, 'anmf' => 1, 'anniversary' => 1, 'annotation' => 1, 'annotations' => 1, 'annotationusagerights' => 1, 'announce' => 1, 'announcelist1' => 1, 'anta' => 1, 'aperture' => 1, 'aperturedisplayed' => 1, 'aperturemode' => 1, 'apeversion' => 1, 'app14flags0' => 1, 'app14flags1' => 1, 'app1_profile' => 1, 'apple-fi' => 1, 'applestoreaccount' => 1, 'applestoreaccounttype' => 1, 'applestorecatalogid' => 1, 'applestorecountry' => 1, 'application' => 1, 'applicationdata' => 1, 'applicationmissingmsg' => 1, 'applicationversion' => 1, 'appversion' => 1, 'archivallocation' => 1, 'archivedfilename' => 1, 'ardronefile' => 1, 'ardronetelemetry' => 1, 'arranger' => 1, 'arrangerkeywords' => 1, 'artist2' => 1, 'artistlen' => 1, 'artisturl' => 1, 'artwork' => 1, 'ascender' => 1, 'ascent' => 1, 'asfleakybucketpairs' => 1, 'asfpacketcount' => 1, 'asfsecurityobjectssize' => 1, 'asin' => 1, 'asin2' => 1, 'aspectinfo' => 1, 'aspectratiox' => 1, 'aspectratioy' => 1, 'assistantsname' => 1, 'assistantsphone' => 1, 'association' => 1, 'assumeddisplaysize' => 1, 'assumeddistanceview' => 1, 'atmospherictemperature' => 1, 'atmospherictransalpha1' => 1, 'atmospherictransalpha2' => 1, 'atmospherictransbeta1' => 1, 'atmospherictransbeta2' => 1, 'atmospherictransx' => 1, 'atob0' => 1, 'atob1' => 1, 'atob2' => 1, 'attachments' => 1, 'attributes' => 1, 'audible_cvrx' => 1, 'audible_meta' => 1, 'audible_meta2' => 1, 'audible_tags' => 1, 'audible_tseg' => 1, 'audiences' => 1, 'audioattributes' => 1, 'audioavailablebitraterange' => 1, 'audioavailablenumberchannels' => 1, 'audioavgbitrate' => 1, 'audiobitratecontrolmode' => 1, 'audiobitspersample' => 1, 'audiobytes' => 1, 'audiocodec' => 1, 'audiocodecdescription' => 1, 'audiocodecid' => 1, 'audiocodecinfo' => 1, 'audiocodecname' => 1, 'audiocodecprimemethod' => 1, 'audiocomponentversion' => 1, 'audiocurrenttargetbitrate' => 1, 'audiodelay' => 1, 'audiodoessamplerateconversion' => 1, 'audioencoding' => 1, 'audioencodingparamsversion' => 1, 'audioextendfrequencies' => 1, 'audiofilesize' => 1, 'audiofileurl' => 1, 'audioformat' => 1, 'audioframesize' => 1, 'audiogain' => 1, 'audiohasvariablepacketbytesizes' => 1, 'audioheader' => 1, 'audioinfo' => 1, 'audioinputbuffersize' => 1, 'audioisinitialized' => 1, 'audiolayer' => 1, 'audiomaxbitrate' => 1, 'audiomaximumpacketbytesize' => 1, 'audiominimumdelaymode' => 1, 'audiominimumnumberinputpackets' => 1, 'audiominimumnumberoutputpackets' => 1, 'audiomode' => 1, 'audiooutputprecedence' => 1, 'audiopacketframesize' => 1, 'audioprofile' => 1, 'audioprofileversion' => 1, 'audioqualitysetting' => 1, 'audiorequirespacketdescription' => 1, 'audiosamplecount' => 1, 'audiosampledesc' => 1, 'audiosamplesize' => 1, 'audiosize' => 1, 'audiosourceurl' => 1, 'audiostream' => 1, 'audiostreamtype' => 1, 'audiotrackid' => 1, 'audiousedinputbuffersize' => 1, 'audiouserecommendedsamplerate' => 1, 'audiovbrquality' => 1, 'audiovendorid' => 1, 'audiozeroframespadded' => 1, 'authenticationtime' => 1, 'authenticationtype' => 1, 'authoringsoftwarerelease' => 1, 'authorlen' => 1, 'authorship' => 1, 'authorsortorder' => 1, 'authorurl' => 1, 'autosavefilepath' => 1, 'autosaveformat' => 1, 'autosummary' => 1, 'aux' => 1, 'averagebitrate' => 1, 'averagelevel' => 1, 'avgbitrate' => 1, 'avgbytespersec' => 1, 'avgpacketsize' => 1, 'avgpdusize' => 1, 'avgwidth' => 1, 'avi1' => 1, 'avif' => 1, 'aviheader' => 1, 'awbinfo' => 1, 'axisdistancex' => 1, 'axisdistancey' => 1, 'axisdistancez' => 1, 'background' => 1, 'backgroundcolor' => 1, 'backgroundcolorindicator' => 1, 'backgroundcolorvalue' => 1, 'backgroundimageid' => 1, 'backgroundtiling' => 1, 'backlight' => 1, 'backserial' => 1, 'backuptime' => 1, 'badfaxlines' => 1, 'bahpver' => 1, 'balance' => 1, 'balpver' => 1, 'band' => 1, 'bandwidthsharing' => 1, 'bannerimage' => 1, 'bannerimagedata' => 1, 'bannerimagetype' => 1, 'bannerimageurl' => 1, 'barcode' => 1, 'barometerinfo' => 1, 'barometerinfoversion' => 1, 'baselinelength' => 1, 'baseviewpointnum' => 1, 'basisobject' => 1, 'bass' => 1, 'battery' => 1, 'batteryinfo' => 1, 'bavpver' => 1, 'bccaddresses' => 1, 'bccnames' => 1, 'beats-per-minute' => 1, 'beatsperminute' => 1, 'belowcolor' => 1, 'beta' => 1, 'billinginformation' => 1, 'binaryfilter' => 1, 'binaryxml' => 1, 'birthday' => 1, 'bitrate' => 1, 'bitrateinfo' => 1, 'bitratemutualexclusion' => 1, 'bitsperextendedrunlength' => 1, 'bitsperpixel' => 1, 'bitsperrunlength' => 1, 'blackmaskbottomborder' => 1, 'blackmaskleftborder' => 1, 'blackmaskrightborder' => 1, 'blackmasktopborder' => 1, 'blocklocation' => 1, 'blocksize' => 1, 'blocksizemax' => 1, 'blocksizemin' => 1, 'blockspercolumn' => 1, 'blocksperframe' => 1, 'blocksperrow' => 1, 'blueadjust' => 1, 'bluegain' => 1, 'bluematrixcolumn' => 1, 'blueprimary' => 1, 'bluesample' => 1, 'bluetrc' => 1, 'bluex' => 1, 'bluey' => 1, 'boardtemperature' => 1, 'bookname' => 1, 'booktitle' => 1, 'booktype' => 1, 'bookversion' => 1, 'bordercolor' => 1, 'borderid' => 1, 'borderinformation' => 1, 'borderlocation' => 1, 'bordername' => 1, 'bordersversion' => 1, 'bordertype' => 1, 'bottommag' => 1, 'boundaryorigin' => 1, 'boundingbox' => 1, 'bracketshot' => 1, 'breakchar' => 1, 'brightnessdata' => 1, 'broadcast' => 1, 'broadcastdate' => 1, 'broadcastextension' => 1, 'btoa0' => 1, 'btoa1' => 1, 'btoa2' => 1, 'btod0' => 1, 'btod1' => 1, 'btod2' => 1, 'btod3' => 1, 'bufferaverage' => 1, 'buffersize' => 1, 'builddate' => 1, 'buildversion' => 1, 'businessaddress' => 1, 'businesscity' => 1, 'businesscountry-region' => 1, 'businessfax' => 1, 'businesshomepage' => 1, 'businessphone' => 1, 'businesspobox' => 1, 'businesspostalcode' => 1, 'businessstateorprovince' => 1, 'businessstreet' => 1, 'buynow' => 1, 'buytickets' => 1, 'bw_halftoninginfo' => 1, 'bw_transferfunc' => 1, 'bwfversion' => 1, 'bytelength' => 1, 'byteorder' => 1, 'bytes' => 1, 'bytesperminute' => 1, 'cachecontrol' => 1, 'cachedimageheight' => 1, 'cachedimagewidth' => 1, 'calculatedscalemax' => 1, 'calculatedscalemin' => 1, 'calibrationdatetime' => 1, 'callbacknumber' => 1, 'callletters' => 1, 'camcore' => 1, 'camera' => 1, 'camera1' => 1, 'camera2' => 1, 'cameraarrangementinterval' => 1, 'camerabacktype' => 1, 'camerabody' => 1, 'camerabyteorder' => 1, 'cameradatetime' => 1, 'cameradirection' => 1, 'cameraidentifier' => 1, 'camerainfo' => 1, 'camerainfo2' => 1, 'camerainfo3' => 1, 'camerainfoa100' => 1, 'camerainfounknown' => 1, 'cameramaker' => 1, 'cameramanufacturer' => 1, 'cameramotion' => 1, 'cameraname' => 1, 'cameraobjbacktype' => 1, 'cameraobject' => 1, 'cameraobjname' => 1, 'cameraobjtype' => 1, 'cameraobjversion' => 1, 'camerapartnumber' => 1, 'cameraprofileversion' => 1, 'camerascalemax' => 1, 'camerascalemin' => 1, 'camerasettings' => 1, 'camerasettings2' => 1, 'camerasettings3' => 1, 'camerasettingsa100' => 1, 'camerasettingsifd' => 1, 'camerasettingsunknown' => 1, 'camerasetup' => 1, 'camerasoftware' => 1, 'cameraspecification' => 1, 'can_skip_backward' => 1, 'can_skip_forward' => 1, 'canon' => 1, 'canon_afinfo2_0x000d' => 1, 'canon_afinfo_0x000b' => 1, 'canonafinfo' => 1, 'canonafinfo2' => 1, 'canoncamerainfo1000d' => 1, 'canoncamerainfo1100d' => 1, 'canoncamerainfo1d' => 1, 'canoncamerainfo1dmkii' => 1, 'canoncamerainfo1dmkiii' => 1, 'canoncamerainfo1dmkiin' => 1, 'canoncamerainfo1dmkiv' => 1, 'canoncamerainfo1dx' => 1, 'canoncamerainfo40d' => 1, 'canoncamerainfo450d' => 1, 'canoncamerainfo500d' => 1, 'canoncamerainfo50d' => 1, 'canoncamerainfo550d' => 1, 'canoncamerainfo5d' => 1, 'canoncamerainfo5dmkii' => 1, 'canoncamerainfo5dmkiii' => 1, 'canoncamerainfo600d' => 1, 'canoncamerainfo60d' => 1, 'canoncamerainfo650d' => 1, 'canoncamerainfo6d' => 1, 'canoncamerainfo70d' => 1, 'canoncamerainfo7d' => 1, 'canoncamerainfopowershot' => 1, 'canoncamerainfopowershot2' => 1, 'canoncamerainfounknown' => 1, 'canoncamerainfounknown16' => 1, 'canoncamerainfounknown32' => 1, 'canoncamerasettings' => 1, 'canoncnop' => 1, 'canoncnth' => 1, 'canoncolorinfo1' => 1, 'canoncolorinfo2' => 1, 'canonfileinfo' => 1, 'canonflags' => 1, 'canonfocallength' => 1, 'canonimageheight' => 1, 'canonimagewidth' => 1, 'canonpanorama' => 1, 'canonrawmakemodel' => 1, 'canonshotinfo' => 1, 'canonskip' => 1, 'canseekontime' => 1, 'canseektoend' => 1, 'capheight' => 1, 'captiontext' => 1, 'captprofbacktype' => 1, 'captprofname' => 1, 'captproftype' => 1, 'captprofversion' => 1, 'captureconditionspar' => 1, 'capturedevicefid' => 1, 'captureobjbacktype' => 1, 'captureobjname' => 1, 'captureobjtype' => 1, 'captureobjversion' => 1, 'captureprofile' => 1, 'captureresolution' => 1, 'captureserial' => 1, 'capturesetup' => 1, 'capturexresolution' => 1, 'capturexresolutionunit' => 1, 'captureyresolution' => 1, 'captureyresolutionunit' => 1, 'carphone' => 1, 'casio' => 1, 'casiodata' => 1, 'casiojunk' => 1, 'casioquality' => 1, 'casioqvmi' => 1, 'cast' => 1, 'cc' => 1, 'ccaddresses' => 1, 'ccdrect' => 1, 'ccdvalidrect' => 1, 'ccdvideorect' => 1, 'ccnames' => 1, 'cddb1info' => 1, 'cddbdiscplaytime' => 1, 'cddbdisctracks' => 1, 'cddbtracknumber' => 1, 'cdetype' => 1, 'cdtrackenabled' => 1, 'cell' => 1, 'cellphone' => 1, 'centerdarkrect' => 1, 'cfalayout' => 1, 'cfaplanecolor' => 1, 'channelmode' => 1, 'channelnumber' => 1, 'chapter' => 1, 'chaptercount' => 1, 'chapterlist' => 1, 'chapterlisttrackid' => 1, 'chaptername' => 1, 'chapternum' => 1, 'chapternumber' => 1, 'characterescapesequence' => 1, 'characters' => 1, 'characterset' => 1, 'characterswithspaces' => 1, 'charcountwithspaces' => 1, 'chartarget' => 1, 'chartcontourinterval' => 1, 'chartcorrdate' => 1, 'chartcountryorigin' => 1, 'chartdepthunits' => 1, 'chartformat' => 1, 'chartmagvar' => 1, 'chartmagvarannchange' => 1, 'chartmagvaryear' => 1, 'chartrasteredition' => 1, 'chartsoundingdatum' => 1, 'chartsource' => 1, 'chartsourcedate' => 1, 'chartsourceedition' => 1, 'chartwgsnsshift' => 1, 'checkedby' => 1, 'children' => 1, 'chmversion' => 1, 'chromaticaberrationcorrparams' => 1, 'chromaticadaptation' => 1, 'chromaticities' => 1, 'chromaticity' => 1, 'chromaticitychannel1' => 1, 'chromaticitychannel2' => 1, 'chromaticitychannel3' => 1, 'chromaticitychannel4' => 1, 'chromaticitychannels' => 1, 'chromaticitycolorant' => 1, 'chunkoffset' => 1, 'chunkoffset64' => 1, 'ciff' => 1, 'cinematographer' => 1, 'cip3datafile' => 1, 'cip3sheet' => 1, 'cip3side' => 1, 'circleofconfusion' => 1, 'class' => 1, 'classification' => 1, 'cleanaperture' => 1, 'cleanaperturedimensions' => 1, 'cleanapertureheight' => 1, 'cleanapertureoffsetx' => 1, 'cleanapertureoffsety' => 1, 'cleanaperturewidth' => 1, 'cleanfaxdata' => 1, 'clientid' => 1, 'clipboundary' => 1, 'clipfilename' => 1, 'clipid' => 1, 'clipobjects' => 1, 'clippath' => 1, 'clippingboundary' => 1, 'clippinglimit' => 1, 'clippingpathname' => 1, 'cloneid' => 1, 'cloneobject' => 1, 'clonetype' => 1, 'closedcaptioning' => 1, 'cmmflags' => 1, 'cmykequivalent' => 1, 'coarsedata' => 1, 'coarsemapimage' => 1, 'coarsemapimageheight' => 1, 'coarsemapimagetype' => 1, 'coarsemapimagewidth' => 1, 'codecflavorid' => 1, 'codeclist' => 1, 'codedframesize' => 1, 'codepage' => 1, 'codesize' => 1, 'codestreamheader' => 1, 'codestreamregistration' => 1, 'codeversion' => 1, 'codinghistory' => 1, 'codingmethods' => 1, 'codirectors' => 1, 'colorant1coordinates' => 1, 'colorant1name' => 1, 'colorant2coordinates' => 1, 'colorant2name' => 1, 'colorant3coordinates' => 1, 'colorant3name' => 1, 'colorantcount' => 1, 'colorantorder' => 1, 'coloranttable' => 1, 'coloranttableout' => 1, 'coloraverages' => 1, 'colorbalance0100' => 1, 'colorbalance0102' => 1, 'colorbalance0103' => 1, 'colorbalance02' => 1, 'colorbalance0205' => 1, 'colorbalance0209' => 1, 'colorbalance0211' => 1, 'colorbalance0213' => 1, 'colorbalance0215' => 1, 'colorbalancea' => 1, 'colorbalanceunknown' => 1, 'colorbalanceunknown02' => 1, 'colorbalanceunknown04' => 1, 'colorbitdepth' => 1, 'colorboostdata' => 1, 'colorbw' => 1, 'colorcalib' => 1, 'colorcalibrationmatrix' => 1, 'colorcasts' => 1, 'colorcharacterization' => 1, 'colorcoefs' => 1, 'colorcomponents' => 1, 'colordata1' => 1, 'colordata2' => 1, 'colordata3' => 1, 'colordata4' => 1, 'colordata5' => 1, 'colordata6' => 1, 'colordata7' => 1, 'colordata8' => 1, 'colordataunknown' => 1, 'colorgroup' => 1, 'colorhalftoninginfo' => 1, 'colorimetricintentimagestate' => 1, 'colorimetry' => 1, 'colorinfo' => 1, 'colormap' => 1, 'colorobjbacktype' => 1, 'colorobjname' => 1, 'colorobjtype' => 1, 'colorobjversion' => 1, 'colorpalette' => 1, 'colorprimaries' => 1, 'colorresolutiondepth' => 1, 'colorresponseunit' => 1, 'colors' => 1, 'colorsamplersresource' => 1, 'colorsamplersresource2' => 1, 'colorsetup' => 1, 'colorspacedata' => 1, 'colorspecapproximation' => 1, 'colorspecdata' => 1, 'colorspecification' => 1, 'colorspecmethod' => 1, 'colorspecprecedence' => 1, 'colortable' => 1, 'colortransferfuncs' => 1, 'colortransform' => 1, 'colortwistmatrix' => 1, 'colortype' => 1, 'command' => 1, 'commandlinearguments' => 1, 'commentlen' => 1, 'comments' => 1, 'commenttime' => 1, 'commercialurl' => 1, 'commissioned' => 1, 'common' => 1, 'commonnetworkrellink' => 1, 'commonpathsuffix' => 1, 'compactsamplesizes' => 1, 'company' => 1, 'companymainphone' => 1, 'companyname' => 1, 'compatibility' => 1, 'compatiblebrands' => 1, 'compatiblefontname' => 1, 'compilation' => 1, 'complete' => 1, 'compobj' => 1, 'compobjusertype' => 1, 'compobjusertypelen' => 1, 'componentbitdepth' => 1, 'componentdefinition' => 1, 'componentmapping' => 1, 'composerkeywords' => 1, 'composers' => 1, 'composersortorder' => 1, 'compositinglayerheader' => 1, 'composition' => 1, 'compositionmode' => 1, 'compositionoptions' => 1, 'compositiontimetosample' => 1, 'compositiontodecodetimelinemapping' => 1, 'compressed' => 1, 'compressedannotation' => 1, 'compresseddatalength' => 1, 'compresseddataoffset' => 1, 'compressedmovie' => 1, 'compressedsize' => 1, 'compressedtext' => 1, 'compressionclass' => 1, 'compressionlevel' => 1, 'compressiontype' => 1, 'compressorid' => 1, 'compressorname' => 1, 'compressorversion' => 1, 'computedatmospherictrans' => 1, 'computer' => 1, 'concreteflag' => 1, 'condition' => 1, 'conditionalfec' => 1, 'conductor' => 1, 'conductors' => 1, 'confirmedobjectsize' => 1, 'connectionspaceilluminant' => 1, 'consecutivebadfaxlines' => 1, 'consoledata' => 1, 'consolefedata' => 1, 'cont' => 1, 'contactnames' => 1, 'containerformat' => 1, 'containerversion' => 1, 'contake' => 1, 'contentbranding' => 1, 'contentcreatedate' => 1, 'contentdescription' => 1, 'contentdescriptionnotes' => 1, 'contentdisposition' => 1, 'contentdistributor' => 1, 'contentdistributorduration' => 1, 'contentdistributorid' => 1, 'contentdistributortype' => 1, 'contentencryption' => 1, 'contentgroupdescription' => 1, 'contentid' => 1, 'contentlanguage' => 1, 'contentrating' => 1, 'contents' => 1, 'contentscripttype' => 1, 'contentstyletype' => 1, 'contiguouscodestream' => 1, 'contrastadjustment' => 1, 'contrastinfo' => 1, 'convergenceangle' => 1, 'convergencebaseimage' => 1, 'convergencedistance' => 1, 'conversationid' => 1, 'copyrightfilename' => 1, 'copyrightlen' => 1, 'copyrighturl' => 1, 'correctionmethod' => 1, 'costumedesigner' => 1, 'count' => 1, 'countinfo' => 1, 'country-region' => 1, 'coverart' => 1, 'coverartmimetype' => 1, 'coverarttype' => 1, 'coveruri' => 1, 'cpuarchitecture' => 1, 'cpubyteorder' => 1, 'cpucount' => 1, 'cpusubtype' => 1, 'cputype' => 1, 'cpuversions' => 1, 'crcdevelparams' => 1, 'crdinfo' => 1, 'createdby' => 1, 'creatingapplication' => 1, 'creatingtransform' => 1, 'creationpathvector' => 1, 'creatorapplication' => 1, 'creatorappversion' => 1, 'creatoratom' => 1, 'creatorbuildnumber' => 1, 'creatorbuildnumber2' => 1, 'creatorinfo' => 1, 'creatormajorversion' => 1, 'creatorminorversion' => 1, 'creatorsoftware' => 1, 'creatorversion' => 1, 'cropdata' => 1, 'cropinfo' => 1, 'cropped' => 1, 'cropxcommonoffset' => 1, 'cropxoffset' => 1, 'cropxoffset2' => 1, 'cropxsize' => 1, 'cropxviewpointnumber' => 1, 'cropxviewpointnumber2' => 1, 'cropycommonoffset' => 1, 'cropyoffset' => 1, 'cropyoffset2' => 1, 'cropysize' => 1, 'cropyviewpointnumber' => 1, 'cropyviewpointnumber2' => 1, 'cross-reference' => 1, 'crossref' => 1, 'crs' => 1, 'crwparam' => 1, 'cs1' => 1, 'cuepoint' => 1, 'cuepoints' => 1, 'cuesheet' => 1, 'currentbitrate' => 1, 'currentiptcdigest' => 1, 'currenttime' => 1, 'currentuser' => 1, 'cursorsize' => 1, 'customfunctions10d' => 1, 'customfunctions1d' => 1, 'customfunctions2' => 1, 'customfunctions20d' => 1, 'customfunctions30d' => 1, 'customfunctions350d' => 1, 'customfunctions400d' => 1, 'customfunctions5d' => 1, 'customfunctionsd30' => 1, 'customfunctionsd60' => 1, 'customfunctionsunknown' => 1, 'customsettingsd3' => 1, 'customsettingsd300' => 1, 'customsettingsd300s' => 1, 'customsettingsd3s' => 1, 'customsettingsd3x' => 1, 'customsettingsd4' => 1, 'customsettingsd40' => 1, 'customsettingsd4s' => 1, 'customsettingsd5000' => 1, 'customsettingsd5100' => 1, 'customsettingsd5200' => 1, 'customsettingsd700' => 1, 'customsettingsd7000' => 1, 'customsettingsd80' => 1, 'customsettingsd800' => 1, 'customsettingsd810' => 1, 'customsettingsd90' => 1, 'customsettingsoffset' => 1, 'd-lightinghqdata' => 1, 'd-lightinghsdata' => 1, 'darkcorrectiontype' => 1, 'darwindata' => 1, 'data' => 1, 'data1' => 1, 'data2' => 1, 'databasename' => 1, 'datacreatedate' => 1, 'datadump' => 1, 'datadump2' => 1, 'datainfo' => 1, 'datainformation' => 1, 'datakey' => 1, 'datalen' => 1, 'datalength' => 1, 'datalocation' => 1, 'datamodifydate' => 1, 'dataobject' => 1, 'dataobjectid' => 1, 'dataobjectstatus' => 1, 'dataobjecttitle' => 1, 'dataoffset' => 1, 'dataoffsets' => 1, 'datapackets' => 1, 'datarate' => 1, 'dataref' => 1, 'datareference' => 1, 'datasign' => 1, 'datasize' => 1, 'datatype' => 1, 'datawindow' => 1, 'dateaccessed' => 1, 'datearchived' => 1, 'datecompleted' => 1, 'dateimported' => 1, 'datelastsaved' => 1, 'datemodified' => 1, 'datepicturetaken' => 1, 'datereceived' => 1, 'datereleased' => 1, 'datetime1' => 1, 'datetime2' => 1, 'datetimecreated' => 1, 'datetimeend' => 1, 'datetimegenerated' => 1, 'datevisited' => 1, 'dc' => 1, 'dcem' => 1, 'dcme' => 1, 'dctencodeversion' => 1, 'dealeridnumber' => 1, 'decimationmethod' => 1, 'decimationprefilterwidth' => 1, 'decode' => 1, 'decodeconfig' => 1, 'decodertable' => 1, 'decodertablenumber' => 1, 'decoderversion' => 1, 'defaultaudiostream' => 1, 'defaultchar' => 1, 'defaultdisplayheight' => 1, 'defaultdisplaywidth' => 1, 'defaultimagecolor' => 1, 'defaultrgb' => 1, 'defaultstyle' => 1, 'defineobject' => 1, 'definequantizationtable' => 1, 'delay' => 1, 'deltapngheader' => 1, 'deltatype' => 1, 'deltaxy' => 1, 'department' => 1, 'dependentimage1entrynumber' => 1, 'dependentimage2entrynumber' => 1, 'depth' => 1, 'descender' => 1, 'designer' => 1, 'designerurl' => 1, 'desiredreproductions' => 1, 'destinationid' => 1, 'detector' => 1, 'detectorboard' => 1, 'deviceattributes' => 1, 'devicemanufacturer' => 1, 'devicemfgdesc' => 1, 'devicemodel' => 1, 'devicemodeldesc' => 1, 'devicename' => 1, 'devicesettings' => 1, 'dex' => 1, 'dicom' => 1, 'dictionary' => 1, 'dictionaryshortname' => 1, 'digikam' => 1, 'digitalcreationdatetime' => 1, 'digitaleffectsname' => 1, 'digitaleffectstype' => 1, 'digitaleffectsversion' => 1, 'digitalimagebroker' => 1, 'digitalsignature' => 1, 'dimensions' => 1, 'directors' => 1, 'discardobjects' => 1, 'disknumber' => 1, 'displayartist' => 1, 'displayinfo' => 1, 'displayresolution' => 1, 'displaysize' => 1, 'displayunits' => 1, 'displaywindow' => 1, 'displayxresolution' => 1, 'displayxresolutionunit' => 1, 'displayyresolution' => 1, 'displayyresolutionunit' => 1, 'dispose' => 1, 'disposition' => 1, 'distortinfo' => 1, 'distortioncorrparams' => 1, 'distortioninfo' => 1, 'distortionversion' => 1, 'distributedby' => 1, 'distribution' => 1, 'dittokey' => 1, 'division' => 1, 'djvuversion' => 1, 'dlnaserverudn' => 1, 'dlnasourceuri' => 1, 'dlodata' => 1, 'dlodatalength' => 1, 'dloinfo' => 1, 'docclass' => 1, 'docmdp' => 1, 'docrights' => 1, 'docsecurity' => 1, 'doctype' => 1, 'documentinfo' => 1, 'documentnumber' => 1, 'documentusagerights' => 1, 'dof' => 1, 'donotshow' => 1, 'dotsperinch' => 1, 'dpxfilesize' => 1, 'dr4' => 1, 'dr4header' => 1, 'driveserialnumber' => 1, 'drivetype' => 1, 'drm' => 1, 'drm_contentid' => 1, 'drm_drmheader' => 1, 'drm_drmheader_contentdistributor' => 1, 'drm_drmheader_contentid' => 1, 'drm_drmheader_individualizedversion' => 1, 'drm_drmheader_keyid' => 1, 'drm_drmheader_licenseacqurl' => 1, 'drm_drmheader_subscriptioncontentid' => 1, 'drm_e-bookbaseid' => 1, 'drm_individualizedversion' => 1, 'drm_keyid' => 1, 'drm_lasignaturecert' => 1, 'drm_lasignaturelicsrvcert' => 1, 'drm_lasignatureprivkey' => 1, 'drm_lasignaturerootcert' => 1, 'drm_licenseacqurl' => 1, 'drm_v1licenseacqurl' => 1, 'drmcommerceid' => 1, 'drmindividualizedversion' => 1, 'drmkeyid' => 1, 'drmserverid' => 1, 'dropbykeyword' => 1, 'dropchunks' => 1, 'dtcpiphost' => 1, 'dtcpipport' => 1, 'dtob0' => 1, 'dtob1' => 1, 'dtob2' => 1, 'dtob3' => 1, 'ducky' => 1, 'duedate' => 1, 'duotonehalftoninginfo' => 1, 'duotoneimageinfo' => 1, 'duotonetransferfuncs' => 1, 'dustdeleteapplied' => 1, 'dustinfo' => 1, 'dvdid' => 1, 'dwc' => 1, 'e-mail2' => 1, 'e-mail3' => 1, 'e-mailaddress' => 1, 'e-maildisplayname' => 1, 'e-maillist' => 1, 'edit1' => 1, 'edit2' => 1, 'edit3' => 1, 'edit4' => 1, 'edit4data' => 1, 'edit5' => 1, 'edit6' => 1, 'edit7' => 1, 'edit8' => 1, 'edit9' => 1, 'editdata' => 1, 'editedby' => 1, 'editor' => 1, 'edittagarray' => 1, 'effect' => 1, 'effectivebw' => 1, 'effectsvisible' => 1, 'eighthlanguage' => 1, 'elementarystreamtrack' => 1, 'embeddedaudiofile' => 1, 'embeddedaudiofilename' => 1, 'embeddedfile' => 1, 'embeddedfilename' => 1, 'embeddedfileusagerights' => 1, 'embeddedimage' => 1, 'embeddedimagecolorspace' => 1, 'embeddedimagefilter' => 1, 'embeddedimageheight' => 1, 'embeddedimagename' => 1, 'embeddedimagetype' => 1, 'embeddedimagewidth' => 1, 'emphasis' => 1, 'encodedby' => 1, 'encodedpixelsdimensions' => 1, 'encodedusing' => 1, 'encodedwith' => 1, 'encoder' => 1, 'encodersettings' => 1, 'encodervendor' => 1, 'encoderversion' => 1, 'encoding' => 1, 'encodingparams' => 1, 'encodingprocess' => 1, 'encodingscheme' => 1, 'encodingsettings' => 1, 'encodingtime' => 1, 'encrypt' => 1, 'encryption' => 1, 'enddate' => 1, 'endpoints' => 1, 'endtime' => 1, 'endtimecode' => 1, 'entrypoint' => 1, 'entrytype' => 1, 'environmentmap' => 1, 'envvardata' => 1, 'episodeglobaluniqueid' => 1, 'episodename' => 1, 'eppim' => 1, 'eprint' => 1, 'epsoptions' => 1, 'equipment' => 1, 'equipmentifd' => 1, 'error' => 1, 'errorcorrection' => 1, 'errorcorrectiontype' => 1, 'escchar' => 1, 'estimatedatmospherictrans' => 1, 'evalstate' => 1, 'events' => 1, 'evstepinfo' => 1, 'exif_profile' => 1, 'exifdata' => 1, 'exifex' => 1, 'exifinfo' => 1, 'exifinfo2' => 1, 'exifinformation' => 1, 'exifoffset' => 1, 'exiftoolversion' => 1, 'expandfilm' => 1, 'expandfilterlens' => 1, 'expandflashlamp' => 1, 'expandlens' => 1, 'expandscanner' => 1, 'expandsoftware' => 1, 'expires' => 1, 'exportimage' => 1, 'exposurebias' => 1, 'exposureinfo' => 1, 'exposureunknown' => 1, 'expressionmedia' => 1, 'exrversion' => 1, 'extcache' => 1, 'extendedaviheader' => 1, 'extendedcontentdescr' => 1, 'extendedcontentencryption' => 1, 'extendedinfo' => 1, 'extendedstreamprops' => 1, 'extendedxmp' => 1, 'extensionanimation' => 1, 'extensionclassid' => 1, 'extensioncreatedate' => 1, 'extensiondescription' => 1, 'extensionicc' => 1, 'extensionmodifydate' => 1, 'extensionname' => 1, 'extensionpersistence' => 1, 'extensions' => 1, 'extensionxmp' => 1, 'extensis' => 1, 'externalleading' => 1, 'externaltriggercount' => 1, 'extraflags' => 1, 'extrainfo' => 1, 'extrainfo2' => 1, 'extrainfo3' => 1, 'extrasamples' => 1, 'f-stop' => 1, 'face1birthday' => 1, 'face1category' => 1, 'face1name' => 1, 'face2birthday' => 1, 'face2category' => 1, 'face2name' => 1, 'face3birthday' => 1, 'face3category' => 1, 'face3name' => 1, 'face4birthday' => 1, 'face4category' => 1, 'face4name' => 1, 'face5birthday' => 1, 'face5category' => 1, 'face5name' => 1, 'face6birthday' => 1, 'face6category' => 1, 'face6name' => 1, 'face7birthday' => 1, 'face7category' => 1, 'face7name' => 1, 'face8birthday' => 1, 'face8category' => 1, 'face8name' => 1, 'facedetect1' => 1, 'facedetect2' => 1, 'facedetect3' => 1, 'facedetinfo' => 1, 'faceinfo' => 1, 'faceinfo1' => 1, 'faceinfo2' => 1, 'faceinfoa' => 1, 'faceinfolength' => 1, 'faceinfooffset' => 1, 'facepos' => 1, 'facerecinfo' => 1, 'facesize' => 1, 'fastseek' => 1, 'faxprofile' => 1, 'faxrecvparams' => 1, 'faxrecvtime' => 1, 'faxsubaddress' => 1, 'fedexedr' => 1, 'fffheader' => 1, 'fieldmdp' => 1, 'fieldofview' => 1, 'fieldpermissions' => 1, 'fifthlanguage' => 1, 'file1duration' => 1, 'file1length' => 1, 'file1md5sum' => 1, 'file1media' => 1, 'file1path' => 1, 'file1pathutf-8' => 1, 'fileaccessdate' => 1, 'fileas' => 1, 'fileattributes' => 1, 'fileblockcount' => 1, 'fileblocksize' => 1, 'filecount' => 1, 'filedescription' => 1, 'filedeviceid' => 1, 'filedevicenumber' => 1, 'fileflags' => 1, 'fileflagsmask' => 1, 'filefunctionflags' => 1, 'fileglobalprofile' => 1, 'filegroupid' => 1, 'filehardlinks' => 1, 'fileid' => 1, 'fileinfo' => 1, 'fileinfolen' => 1, 'fileinfolen2' => 1, 'fileinfoproperties' => 1, 'fileinfoversion' => 1, 'fileinodechangedate' => 1, 'fileinodenumber' => 1, 'filelength' => 1, 'fileos' => 1, 'fileowner' => 1, 'filepath' => 1, 'filepermissions' => 1, 'fileprofileversion' => 1, 'fileproperties' => 1, 'files' => 1, 'filesequence' => 1, 'filesize' => 1, 'filesizebytes' => 1, 'filesubtype' => 1, 'filetype' => 1, 'filetypeextension' => 1, 'fileurl' => 1, 'fileuserid' => 1, 'fileversionnumber' => 1, 'fillattributes' => 1, 'fillmethod' => 1, 'filmbrand' => 1, 'filmcategory' => 1, 'filmframenumber' => 1, 'filmgencode' => 1, 'filmproductcode' => 1, 'filmrollnumber' => 1, 'filmsize' => 1, 'filter' => 1, 'filterinfo' => 1, 'filtering' => 1, 'filtermodel' => 1, 'filterpartnumber' => 1, 'filterserialnumber' => 1, 'finalframeblocks' => 1, 'firmwareinfo' => 1, 'firstchar' => 1, 'firstlanguage' => 1, 'firstname' => 1, 'firstobject' => 1, 'firstobjectid' => 1, 'fisheyefilter' => 1, 'flac' => 1, 'flagcolor' => 1, 'flags' => 1, 'flagstatus' => 1, 'flashattributes' => 1, 'flashexpcomp' => 1, 'flashinfo' => 1, 'flashinfo0100' => 1, 'flashinfo0102' => 1, 'flashinfo0103' => 1, 'flashinfounknown' => 1, 'flashinfoversion' => 1, 'flashpixstreamfieldoffset' => 1, 'flashpixstreampathname' => 1, 'flashpower' => 1, 'flashsyncmode' => 1, 'flashttlmode' => 1, 'flashversion' => 1, 'flavor' => 1, 'flir' => 1, 'flir_gps' => 1, 'flir_moreinfo' => 1, 'flir_params' => 1, 'flir_parts' => 1, 'flir_serial' => 1, 'flir_unknown' => 1, 'flir_unknownuuid' => 1, 'focallength35efl' => 1, 'focallength35mm' => 1, 'focalplaneafpointsused' => 1, 'focalplanecolorimetryestimates' => 1, 'focalrange' => 1, 'focusdistance2' => 1, 'focusinfo' => 1, 'focusinfoifd' => 1, 'focuspos' => 1, 'folder' => 1, 'folderpath' => 1, 'font' => 1, 'fontsize' => 1, 'fontsubfamily' => 1, 'fontsubfamilyid' => 1, 'fonttable' => 1, 'fontweight' => 1, 'footerposition' => 1, 'footnotes' => 1, 'form' => 1, 'formattag' => 1, 'formatter' => 1, 'formatversion' => 1, 'formatversiontime' => 1, 'formextrausagerights' => 1, 'formfields' => 1, 'formusagerights' => 1, 'forwardto' => 1, 'fotostation' => 1, 'fourcc' => 1, 'fourcc1' => 1, 'fourcc2' => 1, 'fourcc2len' => 1, 'fourcc3' => 1, 'fourcc3len' => 1, 'fourthlanguage' => 1, 'fov' => 1, 'fovcot' => 1, 'fpfversion' => 1, 'fpv' => 1, 'fpxr' => 1, 'fractalparameters' => 1, 'fragmentlist' => 1, 'fragmenttable' => 1, 'frame' => 1, 'frameexposuretime' => 1, 'frameid' => 1, 'frameinfo' => 1, 'framepriority' => 1, 'framereadouttime' => 1, 'framesize' => 1, 'framesizemax' => 1, 'framesizemin' => 1, 'framespersecond' => 1, 'free' => 1, 'free-busystatus' => 1, 'freebytecounts' => 1, 'freeoffsets' => 1, 'frequency' => 1, 'fromaddresses' => 1, 'fromnames' => 1, 'fstype' => 1, 'fujifilm' => 1, 'fujifilmffmv' => 1, 'fujifilmmvtg' => 1, 'fujifilmtags' => 1, 'fujiifd' => 1, 'fujilayout' => 1, 'fullname' => 1, 'fullscreen' => 1, 'gain' => 1, 'gaindeaddata' => 1, 'gaindeadmapimage' => 1, 'gaindeadmapimageheight' => 1, 'gaindeadmapimagetype' => 1, 'gaindeadmapimagewidth' => 1, 'gammainfo' => 1, 'gamut' => 1, 'gapless' => 1, 'gdalmetadata' => 1, 'gdalnodata' => 1, 'geminfo' => 1, 'genbalance' => 1, 'gender' => 1, 'generator' => 1, 'generatorversion' => 1, 'genflags' => 1, 'gengraphicsmode' => 1, 'genmediaheader' => 1, 'genmediainfo' => 1, 'genmediaversion' => 1, 'genopcolor' => 1, 'genr' => 1, 'genreid' => 1, 'geo' => 1, 'geogangularunits' => 1, 'geogangularunitsize' => 1, 'geogazimuthunits' => 1, 'geogcitation' => 1, 'geogellipsoid' => 1, 'geoggeodeticdatum' => 1, 'geoginvflattening' => 1, 'geoglinearunits' => 1, 'geoglinearunitsize' => 1, 'geogprimemeridian' => 1, 'geogprimemeridianlong' => 1, 'geographictype' => 1, 'geogsemimajoraxis' => 1, 'geogsemiminoraxis' => 1, 'geogtowgs84' => 1, 'geotiffversion' => 1, 'getty' => 1, 'gidcver' => 1, 'gidpver' => 1, 'gifapplicationextension' => 1, 'gifgraphiccontrolextension' => 1, 'gifplaintextextension' => 1, 'gifversion' => 1, 'gipc_cpld' => 1, 'gipcver' => 1, 'givenname' => 1, 'gixiver' => 1, 'globalinfo' => 1, 'globalparametersifd' => 1, 'globalpixelsize' => 1, 'googlebot' => 1, 'googlehostheader' => 1, 'googlepingmessage' => 1, 'googlepingurl' => 1, 'googlesourcedata' => 1, 'googlestarttime' => 1, 'googletrackduration' => 1, 'goprotype' => 1, 'gpano' => 1, 'gps' => 1, 'gpscoordinates' => 1, 'gpsinfo' => 1, 'gpsposition' => 1, 'grainybwfilter' => 1, 'graphicconverter' => 1, 'graphicsmode' => 1, 'graphicstechnologystandardoutput' => 1, 'grayresponsecurve' => 1, 'graytrc' => 1, 'greenadjust' => 1, 'greengain' => 1, 'greenmatrixcolumn' => 1, 'greenprimary' => 1, 'greensample' => 1, 'greentrc' => 1, 'greenx' => 1, 'greeny' => 1, 'gridguidesinfo' => 1, 'group' => 1, 'groupcaption' => 1, 'grouping' => 1, 'groupmutualexclusion' => 1, 'gtcitation' => 1, 'gtmodeltype' => 1, 'gtrastertype' => 1, 'guid' => 1, 'handler' => 1, 'handlerclass' => 1, 'handlerdescription' => 1, 'handlertype' => 1, 'handlervendorid' => 1, 'hasarbitrarydatastream' => 1, 'hasattachedimages' => 1, 'hasattachments' => 1, 'hasaudio' => 1, 'hascolormap' => 1, 'hascuepoints' => 1, 'hasfiletransferstream' => 1, 'hasflag' => 1, 'hasicc' => 1, 'hasimage' => 1, 'haskeyframes' => 1, 'hasmetadata' => 1, 'hasscript' => 1, 'hasvideo' => 1, 'hasxfa' => 1, 'hcusage' => 1, 'hdrinfo' => 1, 'hdrl' => 1, 'hdrtoninginfo' => 1, 'hdvideo' => 1, 'header' => 1, 'header4' => 1, 'headerext' => 1, 'headerextension' => 1, 'headersize' => 1, 'headerversion' => 1, 'headingpairs' => 1, 'heightresolution' => 1, 'hiddenslides' => 1, 'highlightdata' => 1, 'highlightendpoints' => 1, 'hintformat' => 1, 'hintheader' => 1, 'hintinfo' => 1, 'hintsampledesc' => 1, 'hinttrackinfo' => 1, 'hinttrackversion' => 1, 'hintversion' => 1, 'historybuffersize' => 1, 'hobbies' => 1, 'homeaddress' => 1, 'homecity' => 1, 'homecountry-region' => 1, 'homefax' => 1, 'homephone' => 1, 'homepobox' => 1, 'homepostalcode' => 1, 'homestateorprovince' => 1, 'homestreet' => 1, 'horizontalresolution' => 1, 'horizontalscale' => 1, 'hotkey' => 1, 'howpublished' => 1, 'hp_tdhd' => 1, 'htcbinary' => 1, 'htcinfo' => 1, 'htctrack' => 1, 'http-equiv' => 1, 'httphostheader' => 1, 'huffmantable' => 1, 'hyperfocaldistance' => 1, 'hyperlinkbase' => 1, 'hyperlinks' => 1, 'hyperlinkschanged' => 1, 'icc_untagged' => 1, 'iccbased' => 1, 'iconenvdata' => 1, 'iconfilename' => 1, 'iconindex' => 1, 'iconuri' => 1, 'ics' => 1, 'id' => 1, 'id3' => 1, 'id3size' => 1, 'id3v1' => 1, 'id3v1_enh' => 1, 'id3v2_2' => 1, 'id3v2_3' => 1, 'id3v2_4' => 1, 'idc2_ifd' => 1, 'idc_ifd' => 1, 'idcpreviewimage' => 1, 'idependentanddisposablesamples' => 1, 'idsbasevalue' => 1, 'ifd0_offset' => 1, 'ihl_exif' => 1, 'ihldata' => 1, 'illustrator' => 1, 'im' => 1, 'imaddresses' => 1, 'image' => 1, 'image2description' => 1, 'image3description' => 1, 'image4description' => 1, 'image5description' => 1, 'image6description' => 1, 'image7description' => 1, 'image8description' => 1, 'imagearrangement' => 1, 'imageboardid' => 1, 'imagebounds' => 1, 'imagebytecount' => 1, 'imageclass' => 1, 'imagecolor' => 1, 'imagecolorindicator' => 1, 'imagecolorvalue' => 1, 'imagedata' => 1, 'imagedatadiscard' => 1, 'imagedataoffset' => 1, 'imagedepth' => 1, 'imageelements' => 1, 'imagefields' => 1, 'imagefilename' => 1, 'imageformat' => 1, 'imagefullheight' => 1, 'imagefullwidth' => 1, 'imageheader' => 1, 'imageid' => 1, 'imageinfo' => 1, 'imagelayer' => 1, 'imagelength' => 1, 'imagelimitexposurebias' => 1, 'imagemagnificationdescriptor' => 1, 'imagemedium' => 1, 'imagemodulationexposurebias' => 1, 'imageoffset' => 1, 'imagepixelformat' => 1, 'imageprintstatus' => 1, 'imageprocessingifd' => 1, 'imageprofile' => 1, 'imageprops' => 1, 'imagerboardid' => 1, 'imagereadydatasets' => 1, 'imagereadyvariables' => 1, 'imagereferencepoints' => 1, 'imageresolution' => 1, 'imageresources' => 1, 'imagerotated' => 1, 'imagerotation' => 1, 'imagerotationstatus' => 1, 'imagesourceek' => 1, 'imagestatus' => 1, 'imagetoolbar' => 1, 'imageuidlist' => 1, 'imageversion' => 1, 'imageworkstationmake' => 1, 'imgprofbacktype' => 1, 'imgprofname' => 1, 'imgproftype' => 1, 'imgprofversion' => 1, 'immediatedatabytes' => 1, 'importance' => 1, 'imprint' => 1, 'includedfileid' => 1, 'incomplete' => 1, 'index' => 1, 'index01' => 1, 'index02' => 1, 'index03' => 1, 'index04' => 1, 'index05' => 1, 'index06' => 1, 'index07' => 1, 'index08' => 1, 'index09' => 1, 'index10' => 1, 'index11' => 1, 'index12' => 1, 'index13' => 1, 'index14' => 1, 'index15' => 1, 'index16' => 1, 'indexable' => 1, 'indexed' => 1, 'indexedcolourtablecount' => 1, 'indexoffset' => 1, 'indexparameters' => 1, 'info' => 1, 'information' => 1, 'infourl' => 1, 'ingrreserved' => 1, 'initialdisplayeffect' => 1, 'initializationvector' => 1, 'initializeddatasize' => 1, 'initialkey' => 1, 'initialobjectdescriptor' => 1, 'initials' => 1, 'inknames' => 1, 'inputdataobjectlist' => 1, 'inputdevicename' => 1, 'inputdeviceserialnumber' => 1, 'insertmode' => 1, 'insetnwpixelx' => 1, 'insetnwpixely' => 1, 'institution' => 1, 'instructionset' => 1, 'integrationtime' => 1, 'intellectualproperty' => 1, 'intellectualpropertynotes' => 1, 'intensitystereo' => 1, 'intergraphflagregisters' => 1, 'intergraphmatrix' => 1, 'intergraphpacketdata' => 1, 'interlace' => 1, 'interleavedfield' => 1, 'internalidnumber' => 1, 'internalleading' => 1, 'internalname' => 1, 'internalversionnumber' => 1, 'internationaltext' => 1, 'internetradiostationname' => 1, 'internetradiostationowner' => 1, 'internetradiostationurl' => 1, 'interopoffset' => 1, 'interpretedby' => 1, 'involvedpeople' => 1, 'ipmpcontrol' => 1, 'iptc_profile' => 1, 'iptcapplication' => 1, 'iptccore' => 1, 'iptcdata' => 1, 'iptcenvelope' => 1, 'iptcext' => 1, 'iptcfotostation' => 1, 'iptcnewsphoto' => 1, 'iptcobjectdata' => 1, 'iptcpostobjectdata' => 1, 'iptcpreobjectdata' => 1, 'irwindowtemperature' => 1, 'irwindowtransmission' => 1, 'is_protected' => 1, 'is_trusted' => 1, 'isattachment' => 1, 'isbasefont' => 1, 'iscompleted' => 1, 'isdeleted' => 1, 'isfixedpitch' => 1, 'isfixedv' => 1, 'isinfoa100' => 1, 'isnetworkfeed' => 1, 'isoinfo' => 1, 'isonline' => 1, 'isotherm1color' => 1, 'isotherm2color' => 1, 'isprotected' => 1, 'isrc' => 1, 'isrccode' => 1, 'isrcnumber' => 1, 'isrecurring' => 1, 'isvbr' => 1, 'it8header' => 1, 'italic' => 1, 'italicangle' => 1, 'itch' => 1, 'item' => 1, 'item0032' => 1, 'itemid' => 1, 'iteminformation' => 1, 'itemlist' => 1, 'itemlocation' => 1, 'itemprotection' => 1, 'itemtool' => 1, 'itemvendorid' => 1, 'iterationcount' => 1, 'iterationendaction' => 1, 'iterationmax' => 1, 'iterationminmax' => 1, 'iterations' => 1, 'itunesinfo' => 1, 'itunesmediatype' => 1, 'itunesu' => 1, 'itunmovi' => 1, 'itunsmpb' => 1, 'ituntool' => 1, 'jbigoptions' => 1, 'jfif' => 1, 'jfifversion' => 1, 'jfxx' => 1, 'jngheader' => 1, 'jobtitle' => 1, 'journal' => 1, 'jp2header' => 1, 'jp2signature' => 1, 'jpeg-hdr' => 1, 'jpeg-hdrversion' => 1, 'jpeg_quality' => 1, 'jpegactables' => 1, 'jpegdctables' => 1, 'jpegdigest' => 1, 'jpegexifdata' => 1, 'jpeglosslesspredictors' => 1, 'jpegpointtransforms' => 1, 'jpegproc' => 1, 'jpegprocess' => 1, 'jpegqtables' => 1, 'jpegqualityestimate' => 1, 'jpegrestartinterval' => 1, 'jpegtables' => 1, 'jplcartoifd' => 1, 'jsonmetadata' => 1, 'jumptoxpep' => 1, 'junk' => 1, 'kbytesize' => 1, 'kdc_ifd' => 1, 'kelvinwb' => 1, 'keycode' => 1, 'keyframepositions' => 1, 'keyframestimes' => 1, 'keyid' => 1, 'keys' => 1, 'kf8coveruri' => 1, 'kids' => 1, 'kinds' => 1, 'knownfolderdata' => 1, 'kodak' => 1, 'kodak_frea' => 1, 'kodakbordersifd' => 1, 'kodakdcmd' => 1, 'kodakeffectsifd' => 1, 'kodakfree' => 1, 'kodakifd' => 1, 'kodakmake' => 1, 'kodaktags' => 1, 'konicaminolta' => 1, 'konicaminoltatags' => 1, 'label0' => 1, 'label1' => 1, 'label2' => 1, 'label3' => 1, 'lamebitrate' => 1, 'lameheader' => 1, 'lamelowpassfilter' => 1, 'lamemethod' => 1, 'lamequality' => 1, 'lamestereomode' => 1, 'lamevbrquality' => 1, 'languagecode' => 1, 'languagelist' => 1, 'largestpacketduration' => 1, 'largestpacketsize' => 1, 'lastauthor' => 1, 'lastbackupdate' => 1, 'lastchar' => 1, 'lastkeyframetime' => 1, 'lastmodifiedby' => 1, 'lastmodifier' => 1, 'lastname' => 1, 'lastobject' => 1, 'lastobjectid' => 1, 'lastprinted' => 1, 'lasttimestamp' => 1, 'lastupdate' => 1, 'lastupdatetime' => 1, 'layercomps' => 1, 'layergroupsenabledid' => 1, 'layerselectionids' => 1, 'layersgroupinfo' => 1, 'layout' => 1, 'leadperformer' => 1, 'leafautoactive' => 1, 'leafautobasename' => 1, 'leafdata' => 1, 'leafhotfolder' => 1, 'leafopenprochdr' => 1, 'leafoutputfiletype' => 1, 'leafsaveselection' => 1, 'leafsubifd' => 1, 'leftdarkrect' => 1, 'leftmag' => 1, 'legalcopyright' => 1, 'legaltrademarks' => 1, 'leicaleic' => 1, 'length' => 1, 'lens35efl' => 1, 'lenscorr' => 1, 'lensdata' => 1, 'lensdata0100' => 1, 'lensdata0101' => 1, 'lensdata0201' => 1, 'lensdata0204' => 1, 'lensdata0400' => 1, 'lensdataunknown' => 1, 'lensdataversion' => 1, 'lensinfoq' => 1, 'lensmaker' => 1, 'lenspartnumber' => 1, 'lensrec' => 1, 'lensshading' => 1, 'levelinfo' => 1, 'libraryid' => 1, 'libraryname' => 1, 'licenseinfourl' => 1, 'lightingopt' => 1, 'lightness' => 1, 'lightroomworkflow' => 1, 'lights' => 1, 'lightvalue' => 1, 'linearizationcoefficients1' => 1, 'linearizationcoefficients2' => 1, 'linearized' => 1, 'lineorder' => 1, 'lines' => 1, 'linkerversion' => 1, 'linkinfo' => 1, 'linkstatus' => 1, 'linksuptodate' => 1, 'linktarget' => 1, 'lit' => 1, 'ln0' => 1, 'ln1' => 1, 'localbasepath' => 1, 'localdeltatype' => 1, 'localeindicator' => 1, 'locationbody' => 1, 'locationdate' => 1, 'locationinfo' => 1, 'locationinformation' => 1, 'locationnote' => 1, 'locationrole' => 1, 'lockedpropertylist' => 1, 'locks' => 1, 'logoiconurl' => 1, 'logourl' => 1, 'longdescription' => 1, 'lookheadbacktype' => 1, 'lookheader' => 1, 'lookheadname' => 1, 'lookheadtype' => 1, 'lookheadversion' => 1, 'lookmodtransform' => 1, 'lookuptable' => 1, 'loopstyle' => 1, 'lotus' => 1, 'lr' => 1, 'lslv' => 1, 'luminance' => 1, 'luminanceconsts' => 1, 'lyricist' => 1, 'lyrics_synchronised' => 1, 'lyricsuri' => 1, 'machineid' => 1, 'machinetype' => 1, 'macintoshnsprintinfo' => 1, 'macintoshprintinfo' => 1, 'magnification' => 1, 'magnifyobject' => 1, 'mailingaddress' => 1, 'mailstop' => 1, 'mainboard' => 1, 'maininfo' => 1, 'maininfoifd' => 1, 'majorbrand' => 1, 'makeandmodel' => 1, 'makemodel' => 1, 'makernotepentax5a' => 1, 'makernotepentax5b' => 1, 'makernotepentax5c' => 1, 'makernotepentaxunknown' => 1, 'makernotes' => 1, 'makerurl' => 1, 'mandatorybackground' => 1, 'manufacturecode' => 1, 'manufactureindex' => 1, 'manufacturername' => 1, 'mappingscheme' => 1, 'markbits' => 1, 'marker' => 1, 'markerid' => 1, 'markinfo' => 1, 'matrixstructure' => 1, 'matrixworldtocamera' => 1, 'matrixworldtoscreen' => 1, 'mattcolor' => 1, 'matte' => 1, 'matteing' => 1, 'matter' => 1, 'maxband' => 1, 'maxbitrate' => 1, 'maxdatarate' => 1, 'maximumbitrate' => 1, 'maximumimageindex' => 1, 'maximumobjectsize' => 1, 'maximumoperationindex' => 1, 'maximumtransformindex' => 1, 'maxjpegtableindex' => 1, 'maxpacketsize' => 1, 'maxpagenormal' => 1, 'maxpdusize' => 1, 'maxsubfilesize' => 1, 'maxtransmissiontime' => 1, 'maxval' => 1, 'maxwidth' => 1, 'mc' => 1, 'mcdi' => 1, 'md5sum' => 1, 'mdcolortable' => 1, 'mdfiletag' => 1, 'mdfileunits' => 1, 'mditemtags' => 1, 'mdlabname' => 1, 'mdpm' => 1, 'mdpr' => 1, 'mdprepdate' => 1, 'mdpreptime' => 1, 'mdsampleinfo' => 1, 'mdscalepixel' => 1, 'meas1label' => 1, 'meas1params' => 1, 'meas1type' => 1, 'measuredcolor' => 1, 'measuredinfo' => 1, 'measurement' => 1, 'measurementbacking' => 1, 'measurementflare' => 1, 'measurementgeometry' => 1, 'measurementilluminant' => 1, 'measurementinfo' => 1, 'measurementobserver' => 1, 'measurementscale' => 1, 'media' => 1, 'mediablackpoint' => 1, 'mediaclassprimaryid' => 1, 'mediaclasssecondaryid' => 1, 'mediacolor' => 1, 'mediacontenttypes' => 1, 'mediacreated' => 1, 'mediacredits' => 1, 'mediadata' => 1, 'mediaduration' => 1, 'mediaflags' => 1, 'mediaheader' => 1, 'mediaheaderversion' => 1, 'mediaindex' => 1, 'mediainfo' => 1, 'mediaisdelay' => 1, 'mediaisfinale' => 1, 'mediaislive' => 1, 'mediaispremiere' => 1, 'mediaisrepeat' => 1, 'mediaissap' => 1, 'mediaisstereo' => 1, 'mediaissubtitled' => 1, 'mediaistape' => 1, 'mediajukebox' => 1, 'medialanguagecode' => 1, 'medianetworkaffiliation' => 1, 'mediaoriginalbroadcastdatetime' => 1, 'mediaoriginalchannel' => 1, 'mediapro' => 1, 'mediastationcallsign' => 1, 'mediastationname' => 1, 'mediatimescale' => 1, 'mediatrackbytes' => 1, 'mediatype' => 1, 'mediaweight' => 1, 'mediawhitepoint' => 1, 'medium' => 1, 'megapixels' => 1, 'message' => 1, 'meta' => 1, 'metadata' => 1, 'metadatacreator' => 1, 'metadataid' => 1, 'metadatalibrary' => 1, 'metadatanumber' => 1, 'meterinfo' => 1, 'meterlink' => 1, 'metermode' => 1, 'microsoft' => 1, 'microsoftxtra' => 1, 'middlename' => 1, 'mie' => 1, 'mileage' => 1, 'mimetype' => 1, 'miniaturefilter' => 1, 'miniaturefilterorientation' => 1, 'miniaturefilterparameter' => 1, 'miniaturefilterposition' => 1, 'minimumbitrate' => 1, 'minimumversion' => 1, 'minoltacamerasettings' => 1, 'minoltacamerasettings2' => 1, 'minoltacamerasettings5d' => 1, 'minoltacamerasettings7d' => 1, 'minoltacamerasettingsold' => 1, 'minoltamakernote' => 1, 'minoltamma0' => 1, 'minoltamma1' => 1, 'minoltaprd' => 1, 'minoltarif' => 1, 'minoltatags' => 1, 'minoltattw' => 1, 'minoltawbg' => 1, 'minorversion' => 1, 'minpacketsize' => 1, 'mintransmissiontime' => 1, 'mmclips' => 1, 'mngheader' => 1, 'mobitype' => 1, 'mobiversion' => 1, 'modeextension' => 1, 'modeflags' => 1, 'model2' => 1, 'modelandversion' => 1, 'modeltiepoint' => 1, 'modeltransform' => 1, 'modeltype' => 1, 'modenumber' => 1, 'modificationnumber' => 1, 'modificationpermissions' => 1, 'modifiedby' => 1, 'modifiedinfo' => 1, 'moiversion' => 1, 'montage' => 1, 'month' => 1, 'mood' => 1, 'moreinfo' => 1, 'moreinfo0201' => 1, 'moreinfo0401' => 1, 'moreinfobannerimage' => 1, 'moreinfobannerurl' => 1, 'moreinfotext' => 1, 'moreinfourl' => 1, 'moresettings' => 1, 'mosaicpattern' => 1, 'movableinfo' => 1, 'moveobjects' => 1, 'movie' => 1, 'moviedata' => 1, 'moviedataoffset' => 1, 'moviedatasize' => 1, 'movieheader' => 1, 'movieheaderversion' => 1, 'movieinfo' => 1, 'moviestreamname' => 1, 'mp' => 1, 'mp1' => 1, 'mpeg7binary' => 1, 'mpegaudioversion' => 1, 'mpf' => 1, 'mpfversion' => 1, 'mpimage' => 1, 'mpimageflags' => 1, 'mpimageformat' => 1, 'mpimagelength' => 1, 'mpimagelist' => 1, 'mpimagestart' => 1, 'mpimagetype' => 1, 'mpindividualnum' => 1, 'mrwinfo' => 1, 'msdocumenttext' => 1, 'msdocumenttextposition' => 1, 'mspropertysetstorage' => 1, 'msstereo' => 1, 'multiexp' => 1, 'multiexposureversion' => 1, 'multimediatype' => 1, 'multiprofiles' => 1, 'multiquality' => 1, 'multiview' => 1, 'musicby' => 1, 'musiccdidentifier' => 1, 'musiciancredits' => 1, 'mute' => 1, 'mwg-coll' => 1, 'mwg-kw' => 1, 'mwg-rs' => 1, 'mxfversion' => 1, 'mycolors' => 1, 'name' => 1, 'namedcolor' => 1, 'namedcolor2' => 1, 'nametableversion' => 1, 'nameutf-8' => 1, 'narrator' => 1, 'nativedisplayinfo' => 1, 'nativeresolutionunit' => 1, 'nativexresolution' => 1, 'nativeyresolution' => 1, 'ncc' => 1, 'nestlevel' => 1, 'netexposurecompensation' => 1, 'netname' => 1, 'netprovidertype' => 1, 'neutals' => 1, 'neutobjbacktype' => 1, 'neutobjname' => 1, 'neutobjtype' => 1, 'neutobjversion' => 1, 'neutrals' => 1, 'newbitdepth' => 1, 'newcolortype' => 1, 'newguid' => 1, 'nexttrackid' => 1, 'nikon' => 1, 'nikoncaptureoffsets' => 1, 'nikondata' => 1, 'nikonncdb' => 1, 'nikonncdt' => 1, 'nikonscanifd' => 1, 'nikontags' => 1, 'nikonvers' => 1, 'ninthlanguage' => 1, 'nitf' => 1, 'nitfversion' => 1, 'noise' => 1, 'noisereductiondata' => 1, 'nominalbitrate' => 1, 'nominalframecount' => 1, 'nominallayercount' => 1, 'nominalplaytime' => 1, 'nominalvideobitrate' => 1, 'nomssmarttags' => 1, 'note' => 1, 'notice' => 1, 'now' => 1, 'npts' => 1, 'nsc_address' => 1, 'nsc_description' => 1, 'nsc_email' => 1, 'nsc_name' => 1, 'nsc_phone' => 1, 'nullmediaheader' => 1, 'numafpoints' => 1, 'numberlist' => 1, 'numberofcomponents' => 1, 'numberofframes' => 1, 'numberofimages' => 1, 'numberofinks' => 1, 'numberofparts' => 1, 'numberofplanes' => 1, 'numberofresolutions' => 1, 'numberofsamples' => 1, 'numchannels' => 1, 'numcolors' => 1, 'numfonts' => 1, 'numhistorybuffers' => 1, 'numimportantcolors' => 1, 'numpackets' => 1, 'numproperties' => 1, 'numrules' => 1, 'numsampleframes' => 1, 'numstreams' => 1, 'objectfiletype' => 1, 'objectid' => 1, 'objectsizeannounced' => 1, 'obsoletephotoshoptag1' => 1, 'obsoletephotoshoptag2' => 1, 'obsoletephotoshoptag3' => 1, 'ocad' => 1, 'ocadrevision' => 1, 'oceapplicationselector' => 1, 'oceidnumber' => 1, 'oceimagelogic' => 1, 'ocescanjobdesc' => 1, 'office' => 1, 'officelocation' => 1, 'offlineavailability' => 1, 'offlinestatus' => 1, 'offsetorigin' => 1, 'offsetx' => 1, 'offsetxy' => 1, 'offsety' => 1, 'oldxmp' => 1, 'olym' => 1, 'olympus' => 1, 'olympus2100' => 1, 'olympus2100ifd' => 1, 'olympus2200' => 1, 'olympus2200ifd' => 1, 'olympus2300' => 1, 'olympus2300ifd' => 1, 'olympus2400' => 1, 'olympus2400ifd' => 1, 'olympus2500' => 1, 'olympus2500ifd' => 1, 'olympus2600' => 1, 'olympus2600ifd' => 1, 'olympus2700' => 1, 'olympus2700ifd' => 1, 'olympus2800' => 1, 'olympus2800ifd' => 1, 'olympus2900' => 1, 'olympus2900ifd' => 1, 'olympusatom' => 1, 'olympusdss' => 1, 'olympusjunk' => 1, 'olympusolym' => 1, 'olympuspreview' => 1, 'olympustags1' => 1, 'olympustags2' => 1, 'olympustags3' => 1, 'olympustags4' => 1, 'olympusthumbnail' => 1, 'onionskins' => 1, 'opacity' => 1, 'opcodelist1' => 1, 'opcodelist2' => 1, 'opcodelist3' => 1, 'opcolor' => 1, 'opendml' => 1, 'openwithapplication' => 1, 'operatingsystem' => 1, 'operation' => 1, 'operationclassid' => 1, 'operationid' => 1, 'operationnumber' => 1, 'opiproxy' => 1, 'optics' => 1, 'optimalbitrate' => 1, 'optionalattendeeaddresses' => 1, 'optionalattendees' => 1, 'orderingrestrictions' => 1, 'organizeraddress' => 1, 'organizername' => 1, 'originalalbum' => 1, 'originalalbumtitle' => 1, 'originalartist' => 1, 'originaldocumentsize' => 1, 'originalfilesize' => 1, 'originalfiletype' => 1, 'originalformat' => 1, 'originalimagebroker' => 1, 'originallyricist' => 1, 'originalmedia' => 1, 'originalmedium' => 1, 'originalrawcreator' => 1, 'originalrawfiletype' => 1, 'originalrawimage' => 1, 'originalrawresource' => 1, 'originalreleasetime' => 1, 'originalreleaseyear' => 1, 'originalscannedimagesize' => 1, 'originalthmcreator' => 1, 'originalthmfiletype' => 1, 'originalthmimage' => 1, 'originalthmresource' => 1, 'originator' => 1, 'originatorreference' => 1, 'originpathinfo' => 1, 'osversion' => 1, 'otheraddress' => 1, 'othercity' => 1, 'othercodecdescription' => 1, 'othercodecname' => 1, 'othercountry-region' => 1, 'otherformat' => 1, 'otherinfo' => 1, 'otherpobox' => 1, 'otherpostalcode' => 1, 'othersampledesc' => 1, 'otherstateorprovince' => 1, 'otherstreet' => 1, 'outputdataobjectlist' => 1, 'outputresponse' => 1, 'overflowcolor' => 1, 'ownership' => 1, 'packets' => 1, 'packingmethod' => 1, 'page' => 1, 'pageenter' => 1, 'pageexit' => 1, 'pagefront' => 1, 'pagelayout' => 1, 'pagemode' => 1, 'pagenormal' => 1, 'pager' => 1, 'pages' => 1, 'pagespecial' => 1, 'paintdata' => 1, 'paintimage' => 1, 'paintimageheight' => 1, 'paintimagetype' => 1, 'paintimagewidth' => 1, 'paintingfilter' => 1, 'palette' => 1, 'palettecolors' => 1, 'palettefilename' => 1, 'palettehistogram' => 1, 'paletteinfo' => 1, 'palettemethod' => 1, 'palettename' => 1, 'palettestretch' => 1, 'palmfiletype' => 1, 'panasonic' => 1, 'panasonicpana' => 1, 'panorama' => 1, 'panorientation' => 1, 'panoverlaph' => 1, 'panoverlapv' => 1, 'paragraphs' => 1, 'param0' => 1, 'param1' => 1, 'param2' => 1, 'param3' => 1, 'parameter' => 1, 'parameterinfo' => 1, 'parasites' => 1, 'parentalrating' => 1, 'parentalratingreason' => 1, 'parentproductid' => 1, 'parentshorttitle' => 1, 'parenttitle' => 1, 'part' => 1, 'partialpalette' => 1, 'partialsyncsamples' => 1, 'participants' => 1, 'partnumber' => 1, 'partofset' => 1, 'pastclippingboundary' => 1, 'pasteimage' => 1, 'path' => 1, 'pathselectionstate' => 1, 'patternangle' => 1, 'payloadtype' => 1, 'paymenturl' => 1, 'pcscitation' => 1, 'pdahistogram' => 1, 'pdf' => 1, 'pdfx' => 1, 'peakbitrate' => 1, 'peakspectralsensitivity' => 1, 'peakvalue' => 1, 'pefversion' => 1, 'pentax' => 1, 'pentaxdata' => 1, 'pentaxjunk' => 1, 'pentaxjunk2' => 1, 'pentaxpent' => 1, 'pentaxpreview' => 1, 'pentaxtags' => 1, 'perceivedtype' => 1, 'perceptualrenderingintentgamut' => 1, 'performer' => 1, 'performerkeywords' => 1, 'performers' => 1, 'performersortorder' => 1, 'performerurl' => 1, 'period' => 1, 'perms' => 1, 'perpicturenotes' => 1, 'personalfunctions' => 1, 'personalfunctionvalues' => 1, 'personaltitle' => 1, 'petype' => 1, 'pfmheader' => 1, 'pfmversion' => 1, 'pgfversion' => 1, 'photoeffectsdata' => 1, 'photofinishername' => 1, 'photomech' => 1, 'photomechanic' => 1, 'photoshop' => 1, 'photoshop2colortable' => 1, 'photoshop2info' => 1, 'photoshop_profile' => 1, 'photoshopdata' => 1, 'photoshopformat' => 1, 'photoshopinfo' => 1, 'photoshopsettings' => 1, 'physicalpixel' => 1, 'physicalstreamnumbermap' => 1, 'physicalstreamnumbers' => 1, 'physicalstreams' => 1, 'pic_ifd' => 1, 'picslabel' => 1, 'picture' => 1, 'picturebitsperpixel' => 1, 'picturecontrolversion' => 1, 'picturectrl' => 1, 'picturedescription' => 1, 'pictureformat' => 1, 'pictureheight' => 1, 'pictureindexedcolors' => 1, 'pictureinfo' => 1, 'picturelength' => 1, 'picturemimetype' => 1, 'picturestyleinfo' => 1, 'picturetype' => 1, 'picturewidth' => 1, 'pieceinfo' => 1, 'piecelength' => 1, 'pieces' => 1, 'pip' => 1, 'pipx1' => 1, 'pipx2' => 1, 'pipy1' => 1, 'pipy2' => 1, 'pitchandfamily' => 1, 'pitchshift' => 1, 'pixelaspectratio' => 1, 'pixelaspectratiox' => 1, 'pixelaspectratioy' => 1, 'pixelcalibration' => 1, 'pixelformat' => 1, 'pixelintensityrange' => 1, 'pixellive' => 1, 'pixelmagicjbigoptions' => 1, 'pixelscale' => 1, 'pixelshiftinfo' => 1, 'pixelspermeterx' => 1, 'pixelspermetery' => 1, 'pixheight' => 1, 'pixwidth' => 1, 'places' => 1, 'planckb' => 1, 'planckf' => 1, 'plancko' => 1, 'planckr1' => 1, 'planckr2' => 1, 'planes' => 1, 'playallframes' => 1, 'playcounter' => 1, 'playduration' => 1, 'playerversion' => 1, 'playgap' => 1, 'playlistdelay' => 1, 'playlistid' => 1, 'playlistindex' => 1, 'playmode' => 1, 'playselection' => 1, 'plus' => 1, 'pmi' => 1, 'pobox' => 1, 'podcast' => 1, 'podcastcategory' => 1, 'podcastdescription' => 1, 'podcastid' => 1, 'podcastkeywords' => 1, 'podcasturl' => 1, 'pointsize' => 1, 'popularimeter' => 1, 'popupfillattributes' => 1, 'popupflash' => 1, 'postertime' => 1, 'postscript2crd0' => 1, 'postscript2crd1' => 1, 'postscript2crd2' => 1, 'postscript2csa' => 1, 'postscriptfont' => 1, 'postscriptfontname' => 1, 'pragma' => 1, 'preferredfamily' => 1, 'preferredrate' => 1, 'preferredsubfamily' => 1, 'preferredvolume' => 1, 'preroll' => 1, 'presentationformat' => 1, 'presentationtarget' => 1, 'preview' => 1, 'preview0' => 1, 'preview1' => 1, 'preview2' => 1, 'previewatomindex' => 1, 'previewatomtype' => 1, 'previewduration' => 1, 'previewifd' => 1, 'previewifd_offset' => 1, 'previewimagedata' => 1, 'previewimageinfo' => 1, 'previewinfo' => 1, 'previewpict' => 1, 'previewpng' => 1, 'previewtime' => 1, 'previewversion' => 1, 'previewwmf' => 1, 'primarye-mail' => 1, 'primaryitemreference' => 1, 'primaryphone' => 1, 'primaryplatform' => 1, 'printflags' => 1, 'printflagsinfo' => 1, 'printimversion' => 1, 'printinfo' => 1, 'printinfo2' => 1, 'printquality' => 1, 'printscale' => 1, 'printstyle' => 1, 'printtovideo' => 1, 'priority' => 1, 'prism' => 1, 'private' => 1, 'privatebuild' => 1, 'prl' => 1, 'prm' => 1, 'processing' => 1, 'processinginfo' => 1, 'processingtime' => 1, 'prod' => 1, 'prodnotes' => 1, 'producedby' => 1, 'produceddate' => 1, 'producednotice' => 1, 'producerkeywords' => 1, 'producers' => 1, 'product' => 1, 'productionaperturedimensions' => 1, 'productiondate' => 1, 'productiondesigner' => 1, 'productionstudio' => 1, 'productname' => 1, 'producttype' => 1, 'productversion' => 1, 'productversionnumber' => 1, 'profile' => 1, 'profile1audiocodec' => 1, 'profile1height' => 1, 'profile1videocodec' => 1, 'profile1width' => 1, 'profileclass' => 1, 'profilecmmtype' => 1, 'profileconnectionspace' => 1, 'profilecreator' => 1, 'profiledatetime' => 1, 'profiledescription' => 1, 'profiledescriptionml' => 1, 'profilefilesignature' => 1, 'profileheader' => 1, 'profileid' => 1, 'profileifd' => 1, 'profiles' => 1, 'profilesequencedesc' => 1, 'profilesequenceidentifier' => 1, 'profiletype' => 1, 'profileversion' => 1, 'progid' => 1, 'programdescription' => 1, 'programname' => 1, 'progressivescans' => 1, 'projazimuthangle' => 1, 'projcentereasting' => 1, 'projcenterlat' => 1, 'projcenterlong' => 1, 'projcenternorthing' => 1, 'projcoordtrans' => 1, 'project' => 1, 'projectedcstype' => 1, 'projection' => 1, 'projects' => 1, 'projfalseeasting' => 1, 'projfalsenorthing' => 1, 'projfalseorigineasting' => 1, 'projfalseoriginlat' => 1, 'projfalseoriginlong' => 1, 'projfalseoriginnorthing' => 1, 'projlinearunits' => 1, 'projlinearunitsize' => 1, 'projnatoriginlat' => 1, 'projnatoriginlong' => 1, 'projrectifiedgridangle' => 1, 'projscaleatcenter' => 1, 'projscaleatnatorigin' => 1, 'projstdparallel1' => 1, 'projstdparallel2' => 1, 'projstraightvertpolelong' => 1, 'promoteparent' => 1, 'promotionurl' => 1, 'prop' => 1, 'properties' => 1, 'propertysetidcodes' => 1, 'propertysetpathname' => 1, 'propertystoredata' => 1, 'propertyvectorelements' => 1, 'protect' => 1, 'protected' => 1, 'protectioninfo' => 1, 'protectiontype' => 1, 'provider' => 1, 'providercopyright' => 1, 'providerlogourl' => 1, 'providerrating' => 1, 'providerstyle' => 1, 'providerurl' => 1, 'ps2crdvmsize' => 1, 'ps2renderingintent' => 1, 'psfontinfo' => 1, 'pstringcaption' => 1, 'publishdate' => 1, 'publishdatestart' => 1, 'publisherlimit' => 1, 'publisherurl' => 1, 'pur' => 1, 'purchasedate' => 1, 'purchasefileformat' => 1, 'purchaseinfo' => 1, 'purpose' => 1, 'pyramidlevels' => 1, 'qualcomm' => 1, 'quickedit' => 1, 'quickmaskinfo' => 1, 'qvci' => 1, 'ra3' => 1, 'ra4' => 1, 'ra5' => 1, 'radioband' => 1, 'radioformat' => 1, 'radiostationname' => 1, 'radiostationowner' => 1, 'rafdata' => 1, 'rafversion' => 1, 'rasterpadding' => 1, 'rate' => 1, 'rated' => 1, 'ratingorg' => 1, 'ratioimage' => 1, 'rawcodecversion' => 1, 'rawdatalength' => 1, 'rawdataoffset' => 1, 'rawdatarotation' => 1, 'rawdev2' => 1, 'rawdev2ifd' => 1, 'rawdevelopment' => 1, 'rawdevelopmentifd' => 1, 'rawexposurebias' => 1, 'rawimagefullheight' => 1, 'rawimagefullsize' => 1, 'rawimagefullwidth' => 1, 'rawimageheight' => 1, 'rawimagemode' => 1, 'rawimagesegmentation' => 1, 'rawimagewidth' => 1, 'rawinfo' => 1, 'rawinfoifd' => 1, 'rawjpginfo' => 1, 'rawthermalimage' => 1, 'rawthermalimageheight' => 1, 'rawthermalimagetype' => 1, 'rawthermalimagewidth' => 1, 'rawvaluemedian' => 1, 'rawvaluerange' => 1, 'rawzorcreatorversion' => 1, 'rawzorrequiredversion' => 1, 'rdf' => 1, 'readerrequirements' => 1, 'reading1description' => 1, 'reading1device' => 1, 'reading1units' => 1, 'reading1value' => 1, 'reading2description' => 1, 'reading2device' => 1, 'reading2units' => 1, 'reading2value' => 1, 'reading3description' => 1, 'reading3device' => 1, 'reading3units' => 1, 'reading3value' => 1, 'reading4description' => 1, 'reading4device' => 1, 'reading4units' => 1, 'reading4value' => 1, 'readstatus' => 1, 'real2ir' => 1, 'realtimestreamingprotocol' => 1, 'receivedfrom' => 1, 'recengineer' => 1, 'recinfo' => 1, 'reclocation' => 1, 'reconstructiontype' => 1, 'recordedby' => 1, 'recordeddate' => 1, 'recordingcopyright' => 1, 'recordingdates' => 1, 'recordingtime' => 1, 'recordingtimeday' => 1, 'recordingtimemonth' => 1, 'recordingtimeyear' => 1, 'recordingtimeyearmonth' => 1, 'recordingtimeyearmonthday' => 1, 'recordlabelname' => 1, 'recordlabelurl' => 1, 'rect' => 1, 'rectangleofinterest' => 1, 'redadjust' => 1, 'redblueflatfield' => 1, 'redeyedata' => 1, 'redgain' => 1, 'redmatrixcolumn' => 1, 'redprimary' => 1, 'redsample' => 1, 'redtrc' => 1, 'redx' => 1, 'redy' => 1, 'reference' => 1, 'referencetemperature' => 1, 'reflectedapparenttemperature' => 1, 'reflectionhardcopyorigcolorimetry' => 1, 'reflectionprintoutputcolorimetry' => 1, 'refresh' => 1, 'regionxformtackpoint' => 1, 'relatedimagefile' => 1, 'relativehumidity' => 1, 'relativepath' => 1, 'relativevolumeadjustment' => 1, 'releasedateday' => 1, 'releasedatemonth' => 1, 'releasedateyear' => 1, 'releasedateyearmonth' => 1, 'releasedateyearmonthday' => 1, 'remindertime' => 1, 'removehistoryduplicates' => 1, 'renderingintent' => 1, 'renderingtransform' => 1, 'rentalexpirationdate' => 1, 'rentalflag' => 1, 'repeateddatabytes' => 1, 'replaygainalbumgain' => 1, 'replaygainalbumpeak' => 1, 'replaygaintrackgain' => 1, 'replaygaintrackpeak' => 1, 'replyto' => 1, 'representativedisparityfar' => 1, 'representativedisparitynear' => 1, 'representativeimage' => 1, 'requeststate' => 1, 'requiredattendeeaddresses' => 1, 'requiredattendees' => 1, 'requirements' => 1, 'rerun' => 1, 'reserved1' => 1, 'resolutioninfo' => 1, 'resourcecount' => 1, 'resourceforksize' => 1, 'resources' => 1, 'resourcesneeded' => 1, 'resourcetype' => 1, 'resultaspectratio' => 1, 'retailprice' => 1, 'retailpricecurrency' => 1, 'retouchinfoversion' => 1, 'review' => 1, 'revisiondate' => 1, 'revisionnumber' => 1, 'revisitafter' => 1, 'rgb_profile' => 1, 'ricoh' => 1, 'ricohjunk' => 1, 'ricohmake' => 1, 'ricohmodel' => 1, 'ricohpitch' => 1, 'ricohrdc2' => 1, 'ricohrmkn' => 1, 'ricohroll' => 1, 'ricohrr1subdir' => 1, 'ricohsubdir' => 1, 'ricohsubdirifd' => 1, 'rightdarkrect' => 1, 'rightmag' => 1, 'rippedby' => 1, 'rjmd' => 1, 'rmeta' => 1, 'robots' => 1, 'rocinfo' => 1, 'roidescription' => 1, 'rollguidelements' => 1, 'root' => 1, 'rotationangle' => 1, 'roundtripversion' => 1, 'rowinterleavefactor' => 1, 'rtptimescale' => 1, 'runtime' => 1, 'runtimeepoch' => 1, 'runtimeflags' => 1, 'runtimescale' => 1, 'runtimesincepowerup' => 1, 'runtimevalue' => 1, 'runwindow' => 1, 's2n' => 1, 'sampledegradationpriority' => 1, 'sampleflag' => 1, 'sampleformat' => 1, 'samplegroupdescription' => 1, 'samplepaddingbits' => 1, 'samplerate2' => 1, 'samplesize' => 1, 'samplesizes' => 1, 'sampletable' => 1, 'sampletext' => 1, 'sampletochunk' => 1, 'sampletogroup' => 1, 'samsung' => 1, 'samsungifd' => 1, 'samsunginfo' => 1, 'samsungsec' => 1, 'samsungsmta' => 1, 'samsungsvss' => 1, 'samsungtags' => 1, 'sanyomov' => 1, 'sanyomp4' => 1, 'sap' => 1, 'saturationinfo' => 1, 'saturationrenderingintentgamut' => 1, 'saveobjbacktype' => 1, 'saveobjects' => 1, 'saveobjname' => 1, 'saveobjtype' => 1, 'saveobjversion' => 1, 'savesetup' => 1, 'sba_rgbshifts' => 1, 'sbaexposurerecord' => 1, 'sbainputimagebitdepth' => 1, 'sbainputimagecolorspace' => 1, 'scalado' => 1, 'scale' => 1, 'scalecrop' => 1, 'scalefactor35efl' => 1, 'scalingfactor' => 1, 'scandate' => 1, 'scannerfirmwaredate' => 1, 'scannerfirmwareversion' => 1, 'scannermake' => 1, 'scannermodel' => 1, 'scannerpixelsize' => 1, 'scannerproductid' => 1, 'scannerserialnumber' => 1, 'scannervendorid' => 1, 'scanoperatorid' => 1, 'scansoftware' => 1, 'scansoftwarerevisiondate' => 1, 'sceneappearanceestimates' => 1, 'scenebalancealgorithmcommand' => 1, 'scenebalancealgorithmfilmid' => 1, 'scenebalancealgorithmrevision' => 1, 'scenecolorimetryestimates' => 1, 'schemeinfo' => 1, 'schemetype' => 1, 'schemeurl' => 1, 'schemeversion' => 1, 'school' => 1, 'screenbuffersize' => 1, 'screendescriptor' => 1, 'screening' => 1, 'screeningdesc' => 1, 'screennail' => 1, 'screenwindowcenter' => 1, 'screenwindowwidth' => 1, 'screenwriters' => 1, 'scriptcommand' => 1, 'searchranking' => 1, 'secondarygenre' => 1, 'secondlanguage' => 1, 'security' => 1, 'seekable' => 1, 'seekpoint' => 1, 'seektable' => 1, 'selection' => 1, 'selectionduration' => 1, 'selectiontime' => 1, 'selobjbacktype' => 1, 'selobjname' => 1, 'selobjtype' => 1, 'selobjversion' => 1, 'sendduration' => 1, 'senderaddress' => 1, 'sendername' => 1, 'sensitivity' => 1, 'sensorbottomborder' => 1, 'sensordefects' => 1, 'sensorid' => 1, 'sensorimageheight' => 1, 'sensorimagewidth' => 1, 'sensorinfo' => 1, 'sensorleftborder' => 1, 'sensorrightborder' => 1, 'sensortopborder' => 1, 'sequenceframenumber' => 1, 'sequencenumberrandomoffset' => 1, 'serialinfo' => 1, 'series' => 1, 'serviceorganizationname' => 1, 'setcookie' => 1, 'setinfo' => 1, 'setsubtitle' => 1, 'seventhlanguage' => 1, 'shadowendpoints' => 1, 'shadowfilepath' => 1, 'shadowsyncsampletable' => 1, 'shakereductioninfo' => 1, 'shared' => 1, 'shareddata' => 1, 'shareddoc' => 1, 'shareduserrating' => 1, 'sharedwith' => 1, 'sharpinfo' => 1, 'sharpmethod' => 1, 'sharpnessapproximation' => 1, 'sharpnessfreqtable' => 1, 'sharpnesstable' => 1, 'sharpobjbacktype' => 1, 'sharpobjname' => 1, 'sharpobjtype' => 1, 'sharpobjversion' => 1, 'sheetdisclosure' => 1, 'shimdata' => 1, 'shootingcount' => 1, 'shootingrecord' => 1, 'shootobjbacktype' => 1, 'shootobjname' => 1, 'shootobjtype' => 1, 'shootobjversion' => 1, 'shootsetup' => 1, 'shorttitle' => 1, 'shotinfo' => 1, 'shotinfo02xx' => 1, 'shotinfod300a' => 1, 'shotinfod300b' => 1, 'shotinfod300s' => 1, 'shotinfod3a' => 1, 'shotinfod3b' => 1, 'shotinfod3s' => 1, 'shotinfod3x' => 1, 'shotinfod4' => 1, 'shotinfod40' => 1, 'shotinfod4s' => 1, 'shotinfod5000' => 1, 'shotinfod5100' => 1, 'shotinfod5200' => 1, 'shotinfod700' => 1, 'shotinfod7000' => 1, 'shotinfod80' => 1, 'shotinfod800' => 1, 'shotinfod810' => 1, 'shotinfod90' => 1, 'shotinfounknown' => 1, 'shotinfoversion' => 1, 'showmode' => 1, 'showobjects' => 1, 'shutter' => 1, 'shuttercurtainhack' => 1, 'shutterspeed' => 1, 'shutterspeeddisplayed' => 1, 'sidebars' => 1, 'sigma' => 1, 'signalnumber' => 1, 'signature' => 1, 'signature_name' => 1, 'signatureusagerights' => 1, 'signercontactinfo' => 1, 'significantbits' => 1, 'signingauthority' => 1, 'signingdate' => 1, 'signinglocation' => 1, 'signingreason' => 1, 'signtype' => 1, 'simpleindex' => 1, 'simplicityprofile' => 1, 'singlequality' => 1, 'site' => 1, 'siteenter' => 1, 'siteexit' => 1, 'sixthlanguage' => 1, 'size' => 1, 'sizemode' => 1, 'skip' => 1, 'slateinformation' => 1, 'slices' => 1, 'slides' => 1, 'slideshow' => 1, 'smaxsamplevalue' => 1, 'sminsamplevalue' => 1, 'snapshotid' => 1, 'snapshotname' => 1, 'soctemperature' => 1, 'softedit' => 1, 'softfocusfilter' => 1, 'softwarecomponents' => 1, 'softwarerelease' => 1, 'songwriter' => 1, 'songwriterkeywords' => 1, 'sony' => 1, 'sortalbum' => 1, 'sortalbumartist' => 1, 'sortartist' => 1, 'sortcomposer' => 1, 'sortname' => 1, 'sortshow' => 1, 'soundfile' => 1, 'soundschemetitle' => 1, 'sourcecreatedate' => 1, 'sourcecredits' => 1, 'sourcedata' => 1, 'sourcedate' => 1, 'sourceedition' => 1, 'sourcefilename' => 1, 'sourceform' => 1, 'sourceid' => 1, 'sourceimagedirectory' => 1, 'sourceimagefilename' => 1, 'sourceimageheight' => 1, 'sourceimagevolumename' => 1, 'sourceimagewidth' => 1, 'sourcepublisher' => 1, 'sourcerights' => 1, 'sourcetitle' => 1, 'sourceurl' => 1, 'spacefree' => 1, 'spaceused' => 1, 'spatialorientation' => 1, 'spatialresolution' => 1, 'specialbuild' => 1, 'specialeffectsopticalfilter' => 1, 'specialfolderdata' => 1, 'specificationversion' => 1, 'speed' => 1, 'spiff' => 1, 'spiffversion' => 1, 'spothalftone' => 1, 'spouse' => 1, 'sr2dataifd' => 1, 'sr2private' => 1, 'sr2subifdkey' => 1, 'sr2subifdlength' => 1, 'sr2subifdoffset' => 1, 'srawtype' => 1, 'srf2key' => 1, 'srf6offset' => 1, 'srfdataoffset' => 1, 'srgbrendering' => 1, 'stampinfo' => 1, 'stamptoolcount' => 1, 'starring' => 1, 'startdate' => 1, 'startofframe' => 1, 'startreading' => 1, 'starttime' => 1, 'stateorprovince' => 1, 'stationcallsign' => 1, 'stationname' => 1, 'statistics' => 1, 'stdautoactive' => 1, 'stdbasename' => 1, 'stdhotfolder' => 1, 'stdopeninphotoshop' => 1, 'stdoutputbitdepth' => 1, 'stdoutputcolormode' => 1, 'stdoutputfiletype' => 1, 'stdoxygen' => 1, 'stdsaveselection' => 1, 'stdscaledoutput' => 1, 'stdsharpenoutput' => 1, 'stereo' => 1, 'stereoimage' => 1, 'stereomode' => 1, 'stim' => 1, 'stimversion' => 1, 'stitchinfo' => 1, 'stonits' => 1, 'storage-streampathname' => 1, 'store' => 1, 'stream' => 1, 'streamavgbitrate' => 1, 'streamavgpacketsize' => 1, 'streambitdepth' => 1, 'streambitrateprops' => 1, 'streamcolor' => 1, 'streamcount' => 1, 'streamdata' => 1, 'streamduration' => 1, 'streamheader' => 1, 'streaminfo' => 1, 'streamingdataprotocol' => 1, 'streammaxbitrate' => 1, 'streammaxpacketsize' => 1, 'streammimelen' => 1, 'streammimetype' => 1, 'streamname' => 1, 'streamnamelen' => 1, 'streamnumber' => 1, 'streampreroll' => 1, 'streamprioritization' => 1, 'streamproperties' => 1, 'streamsamplecount' => 1, 'streamsamplerate' => 1, 'streamstarttime' => 1, 'streamtypeinfo' => 1, 'street' => 1, 'stridable' => 1, 'strikeout' => 1, 'stripbytecounts' => 1, 'stripoffsets' => 1, 'striprowcounts' => 1, 'strobe' => 1, 'strobetime' => 1, 'studio' => 1, 'sub-sampleinformation' => 1, 'subdir3000' => 1, 'subdir3100' => 1, 'subdir3400' => 1, 'subdir3900' => 1, 'subfile' => 1, 'subifd' => 1, 'subifd0' => 1, 'subifd1' => 1, 'subifd2' => 1, 'subifd255' => 1, 'subifd3' => 1, 'subifd4' => 1, 'subifd5' => 1, 'subifd6' => 1, 'subifd_offset' => 1, 'subimagecolor' => 1, 'subimagehdr' => 1, 'subimageheight' => 1, 'subimageicc_profile' => 1, 'subimagenumericalformat' => 1, 'subimageresolutions' => 1, 'subimagetilecount' => 1, 'subimagetileheight' => 1, 'subimagetilewidth' => 1, 'subimagewidth' => 1, 'subjectpixelheight' => 1, 'subjectpixelwidth' => 1, 'subjectscale' => 1, 'subjectunits' => 1, 'subpacketh' => 1, 'subpacketsize' => 1, 'subscriptioncontentid' => 1, 'subseccreatedate' => 1, 'subsecdatetimeoriginal' => 1, 'subsecmodifydate' => 1, 'subsystem' => 1, 'subsystemversion' => 1, 'subtileblocksize' => 1, 'subtitledescription' => 1, 'subtitlekeywords' => 1, 'suffix' => 1, 'suggestedpalette' => 1, 'summary' => 1, 'summaryinfo' => 1, 'surroundmode' => 1, 'svgversion' => 1, 'swf' => 1, 'sync01' => 1, 'sync02' => 1, 'sync03' => 1, 'sync04' => 1, 'sync05' => 1, 'sync06' => 1, 'sync07' => 1, 'sync08' => 1, 'sync09' => 1, 'sync10' => 1, 'sync11' => 1, 'sync12' => 1, 'sync13' => 1, 'sync14' => 1, 'sync15' => 1, 'sync16' => 1, 'synchronizedlyricsdescription' => 1, 'synchronizedlyricstext' => 1, 'synchronizedlyricstype' => 1, 'synconly' => 1, 'syncsampletable' => 1, 'syncstate' => 1, 'synlyrics' => 1, 't4options' => 1, 't6options' => 1, 't82options' => 1, 't88options' => 1, 'tag2010a' => 1, 'tag2010b' => 1, 'tag2010c' => 1, 'tag2010d' => 1, 'tag2010e' => 1, 'tag2010f' => 1, 'tag2010g' => 1, 'tag2010h' => 1, 'tag900b' => 1, 'tag9050' => 1, 'tag9400a' => 1, 'tag9400b' => 1, 'tag9400c' => 1, 'tag9402' => 1, 'tag9403' => 1, 'tag9404a' => 1, 'tag9404b' => 1, 'tag9405a' => 1, 'tag9405b' => 1, 'tag9406' => 1, 'tag940a' => 1, 'tag940c' => 1, 'tag940e' => 1, 'taggedpdf' => 1, 'taggingtime' => 1, 'tamper-proofkeys' => 1, 'targetaudiences' => 1, 'targetdeltatype' => 1, 'targetfiledosname' => 1, 'targetfilesize' => 1, 'targetlayerid' => 1, 'targetprinter' => 1, 'targetxy' => 1, 'taskowner' => 1, 'tcmediainfo' => 1, 'tdat' => 1, 'tdhd' => 1, 'technician' => 1, 'technology' => 1, 'telephonenumber' => 1, 'telex' => 1, 'temperature' => 1, 'tempinfo' => 1, 'template' => 1, 'temporary' => 1, 'terminationaction' => 1, 'terminationcondition' => 1, 'termsofuse' => 1, 'testtarget' => 1, 'text' => 1, 'textcolor' => 1, 'textface' => 1, 'textfont' => 1, 'textinfo' => 1, 'textinfo1' => 1, 'textinfo2' => 1, 'textjunk' => 1, 'textsize' => 1, 'texttospeech' => 1, 'textualdata' => 1, 'textualinfo' => 1, 'textureformat' => 1, 'theora' => 1, 'theoraversion' => 1, 'thetasubdir' => 1, 'things' => 1, 'thirdlanguage' => 1, 'thumbinfo' => 1, 'thumbnail' => 1, 'thumbnailclip' => 1, 'thumbnailpng' => 1, 'tickspersecond' => 1, 'tiff' => 1, 'tiff-epstandardid' => 1, 'tiff_fxextensions' => 1, 'tiffmeteringimageheight' => 1, 'tiffmeteringimagewidth' => 1, 'tiffpreview' => 1, 'tilebytecounts' => 1, 'tiledepth' => 1, 'tileoffsets' => 1, 'tiles' => 1, 'timecode' => 1, 'timecodeindex' => 1, 'timecodeindexparms' => 1, 'timeinfo' => 1, 'timelineinfo' => 1, 'timeoffset' => 1, 'timereference' => 1, 'timescale' => 1, 'timestamprandomoffset' => 1, 'timetosampletable' => 1, 'title2' => 1, 'titlelen' => 1, 'titlenum' => 1, 'titleofparts' => 1, 'titlesofparts' => 1, 'titlesortorder' => 1, 'toaddresses' => 1, 'tocitems' => 1, 'todotitle' => 1, 'tonames' => 1, 'tonecurvematching' => 1, 'tonecurvetable' => 1, 'tonematrix' => 1, 'toneobjbacktype' => 1, 'toneobjname' => 1, 'toneobjtype' => 1, 'toneobjversion' => 1, 'tones' => 1, 'tonespaceflow' => 1, 'tool_name' => 1, 'tool_version' => 1, 'toolname' => 1, 'toolversion' => 1, 'topmag' => 1, 'totalbitrate' => 1, 'totalbytes' => 1, 'totalbytesnortpheaders' => 1, 'totaldatarate' => 1, 'totalduration' => 1, 'totaleditingtime' => 1, 'totaledittime' => 1, 'totalfilesize' => 1, 'totalframecount' => 1, 'totalframes' => 1, 'totalsamples' => 1, 'totalsize' => 1, 'toycamerafilter' => 1, 'track' => 1, 'trackaperture' => 1, 'trackcategory' => 1, 'trackcomments' => 1, 'trackduration' => 1, 'trackerdata' => 1, 'trackheader' => 1, 'trackheaderversion' => 1, 'trackid' => 1, 'trackingid' => 1, 'tracklayer' => 1, 'tracklyrics' => 1, 'trackproperty' => 1, 'trackref' => 1, 'tracktype' => 1, 'trackvolume' => 1, 'trademark' => 1, 'transactionid' => 1, 'transferrange' => 1, 'transformation' => 1, 'transformcreatedate' => 1, 'transformedimagetitle' => 1, 'transformmodifydate' => 1, 'transformnodeid' => 1, 'transformparams' => 1, 'transformtitle' => 1, 'transparency' => 1, 'transparencyindicator' => 1, 'transparentindex' => 1, 'trapindicator' => 1, 'trebel' => 1, 'tty-ttdphone' => 1, 'tvepisode' => 1, 'tvepisodeid' => 1, 'tvnetworkname' => 1, 'tvseason' => 1, 'tvshow' => 1, 'typeoforiginal' => 1, 'typist' => 1, 'ucrbg' => 1, 'uic1tag' => 1, 'uic2tag' => 1, 'uic3tag' => 1, 'uic4tag' => 1, 'uncompressed' => 1, 'uncompressedsize' => 1, 'uncompressedtextlength' => 1, 'underflowcolor' => 1, 'underline' => 1, 'underlineposition' => 1, 'underlinethickness' => 1, 'unicodealphanames' => 1, 'uninitializeddatasize' => 1, 'uniquefileidentifier' => 1, 'units' => 1, 'unknown' => 1, 'unknown_aacr' => 1, 'unknown_cdek' => 1, 'unknown_cdet' => 1, 'unknown_cndb' => 1, 'unknown_slmt' => 1, 'unknownd30' => 1, 'unknowndata' => 1, 'unknowninfo' => 1, 'unknowninfo2' => 1, 'unknowninfo2version' => 1, 'unknowninfoifd' => 1, 'unknowninfoversion' => 1, 'unknownserial1' => 1, 'unknownserial2' => 1, 'unknownserial3' => 1, 'unknownserial4' => 1, 'unknowntags' => 1, 'unknowntemperature1' => 1, 'unknowntemperature2' => 1, 'unknowntemperature3' => 1, 'unknowntemperature4' => 1, 'unknowntemperature5' => 1, 'unknowntemperature6' => 1, 'unknownthumbnail' => 1, 'unsharpdata' => 1, 'untitled0' => 1, 'untitled1' => 1, 'untitled2' => 1, 'unused' => 1, 'updatedtitle' => 1, 'ur3' => 1, 'url_list' => 1, 'urllist1' => 1, 'urn' => 1, 'usagerightsmessage' => 1, 'usedextensionnumbers' => 1, 'useraccess' => 1, 'useradjsba_rgbshifts' => 1, 'usercollection' => 1, 'usercustom1' => 1, 'usercustom2' => 1, 'userdata' => 1, 'userdefinedid' => 1, 'userdefinedtext' => 1, 'userdefinedurl' => 1, 'usereffectiverating' => 1, 'userid' => 1, 'userlastplayedtime' => 1, 'username' => 1, 'userplaycount' => 1, 'userplaycountafternoon' => 1, 'userplaycountevening' => 1, 'userplaycountmorning' => 1, 'userplaycountnight' => 1, 'userplaycountweekday' => 1, 'userplaycountweekend' => 1, 'userrating' => 1, 'userselectgrouptitle' => 1, 'userservicerating' => 1, 'userweburl' => 1, 'usingtransforms' => 1, 'usptomiscellaneous' => 1, 'usptooriginalcontenttype' => 1, 'utm' => 1, 'uuid-canon' => 1, 'uuid-exif' => 1, 'uuid-exif2' => 1, 'uuid-flip' => 1, 'uuid-geojp2' => 1, 'uuid-iptc' => 1, 'uuid-iptc2' => 1, 'uuid-photoshop' => 1, 'uuid-prof' => 1, 'uuid-unknown' => 1, 'uuid-usmt' => 1, 'uuid-xmp' => 1, 'uuidinfo' => 1, 'uuidlist' => 1, 'validafpoints' => 1, 'value0' => 1, 'value1' => 1, 'value2' => 1, 'value3' => 1, 'variablelowpassfilter' => 1, 'vary' => 1, 'vbrbytes' => 1, 'vbrframes' => 1, 'vbrpeak' => 1, 'vbrscale' => 1, 'vegasversionmajor' => 1, 'vegasversionminor' => 1, 'vendor' => 1, 'vendorid' => 1, 'vendorname' => 1, 'vendorurl' => 1, 'version1' => 1, 'version2' => 1, 'versionbf' => 1, 'versionifd' => 1, 'versioninfo' => 1, 'versionrestrictions' => 1, 'versionyear' => 1, 'verticalcitation' => 1, 'verticalcstype' => 1, 'verticaldatum' => 1, 'verticaldivergence' => 1, 'verticalresolution' => 1, 'verticalscale' => 1, 'verticalunits' => 1, 'video' => 1, 'videoattributes' => 1, 'videoavgbitrate' => 1, 'videoavgframerate' => 1, 'videobitrate' => 1, 'videocardgamma' => 1, 'videoclosedcaptioning' => 1, 'videocodecdescription' => 1, 'videocodecid' => 1, 'videocodecinfo' => 1, 'videocodecname' => 1, 'videocompression' => 1, 'videoencoding' => 1, 'videoformat' => 1, 'videoframecount' => 1, 'videoheader' => 1, 'videoheight' => 1, 'videomaxbitrate' => 1, 'videomaxframerate' => 1, 'videomode' => 1, 'videoprofile' => 1, 'videoprofileversion' => 1, 'videosampledesc' => 1, 'videoscantype' => 1, 'videosize' => 1, 'videostreamtype' => 1, 'videotrackid' => 1, 'videowidth' => 1, 'view' => 1, 'viewable' => 1, 'viewingconddesc' => 1, 'viewingcondilluminant' => 1, 'viewingcondilluminanttype' => 1, 'viewingconditions' => 1, 'viewingcondsurround' => 1, 'viewtype' => 1, 'vignettingcorr' => 1, 'vignettingcorr2' => 1, 'vignettingcorrunknown1' => 1, 'vignettingcorrunknown2' => 1, 'vignettingcorrversion' => 1, 'virtualimageheight' => 1, 'virtualimagewidth' => 1, 'virtualpage' => 1, 'virtualpageunits' => 1, 'visibleoutputs' => 1, 'vistaidlistdata' => 1, 'volumeid' => 1, 'volumelabel' => 1, 'volumenormalization' => 1, 'vorbis' => 1, 'vorbiscomment' => 1, 'vorbisversion' => 1, 'vp8bitstream' => 1, 'vp8l' => 1, 'vp8version' => 1, 'vp8x' => 1, 'vrd1' => 1, 'vrd2' => 1, 'vrdstamptool' => 1, 'vrdversion' => 1, 'vrinfo' => 1, 'vrinfoversion' => 1, 'vw96' => 1, 'wangannotation' => 1, 'wangtag1' => 1, 'wangtag3' => 1, 'wangtag4' => 1, 'warning' => 1, 'warpquadrilateral' => 1, 'watercolorfilter' => 1, 'watermark' => 1, 'watermarktype' => 1, 'watermarkurl' => 1, 'wave' => 1, 'wb_grbglevelsauto' => 1, 'wb_grblevels' => 1, 'wb_grblevelsauto' => 1, 'wb_grblevelsstandard' => 1, 'wb_grgblevels' => 1, 'wb_grgblevelsauto' => 1, 'wb_grgblevelscloudy' => 1, 'wb_grgblevelsdaylight' => 1, 'wb_grgblevelsdaylightfluor' => 1, 'wb_grgblevelsdaywhitefluor' => 1, 'wb_grgblevelslivingroomwarmwhitefluor' => 1, 'wb_grgblevelstungsten' => 1, 'wb_grgblevelswarmwhitefluor' => 1, 'wb_grgblevelswhitefluorescent' => 1, 'wb_rgbcoeffs0' => 1, 'wb_rgbcoeffs1' => 1, 'wb_rgbcoeffs2' => 1, 'wb_rgbcoeffs3' => 1, 'wb_rgblevels2500k' => 1, 'wb_rgblevels3200k' => 1, 'wb_rgblevels4500k' => 1, 'wb_rgblevels6000k' => 1, 'wb_rgblevels8500k' => 1, 'wb_rgblevelsauto' => 1, 'wb_rgblevelscloudy' => 1, 'wb_rgblevelscustom' => 1, 'wb_rgblevelsdaylight' => 1, 'wb_rgblevelsflash' => 1, 'wb_rgblevelsfluorescent' => 1, 'wb_rgblevelsfluorescentm1' => 1, 'wb_rgblevelsfluorescentp1' => 1, 'wb_rgblevelsfluorescentp2' => 1, 'wb_rgblevelsshade' => 1, 'wb_rgblevelstungsten' => 1, 'wb_rgbmul0' => 1, 'wb_rgbmul1' => 1, 'wb_rgbmul2' => 1, 'wb_rgbmul3' => 1, 'wbadjdata' => 1, 'wbblueasshot' => 1, 'wbbluecloudy' => 1, 'wbbluedaylight' => 1, 'wbblueflash' => 1, 'wbbluetungsten' => 1, 'wbgreenasshot' => 1, 'wbgreencloudy' => 1, 'wbgreendaylight' => 1, 'wbgreenflash' => 1, 'wbgreentungsten' => 1, 'wbinfo' => 1, 'wbinfo2' => 1, 'wbinfoa100' => 1, 'wblevels' => 1, 'wbredasshot' => 1, 'wbredcloudy' => 1, 'wbreddaylight' => 1, 'wbredflash' => 1, 'wbredtungsten' => 1, 'wcsprofiles' => 1, 'webpage' => 1, 'weight' => 1, 'whitebalancematching' => 1, 'whitebalancetable' => 1, 'whiteluminance' => 1, 'whitepointx' => 1, 'whitepointy' => 1, 'whitesample' => 1, 'whitesamplebits' => 1, 'whitesampleheight' => 1, 'whitesampleleftborder' => 1, 'whitesampletopborder' => 1, 'whitesamplewidth' => 1, 'wide' => 1, 'widthbytes' => 1, 'widthresolution' => 1, 'windowlocation' => 1, 'windoworigin' => 1, 'windoworiginauto' => 1, 'windowsdevmode' => 1, 'windowsfilename' => 1, 'windowsize' => 1, 'windowtarget' => 1, 'wm_collectiongroupid' => 1, 'wm_collectionid' => 1, 'wm_contentid' => 1, 'wm_mediaclassprimaryid' => 1, 'wm_mediaclasssecondaryid' => 1, 'wm_provider' => 1, 'wmadrcaveragereference' => 1, 'wmadrcaveragetarget' => 1, 'wmadrcpeakreference' => 1, 'wmadrcpeaktarget' => 1, 'wmcollectiongroupid' => 1, 'wmcollectionid' => 1, 'wmcontentid' => 1, 'wmshadowfilesourcedrmtype' => 1, 'wmshadowfilesourcefiletype' => 1, 'words' => 1, 'workflowurl' => 1, 'workingdirectory' => 1, 'workingpath' => 1, 'worldtime' => 1, 'worldtocamera' => 1, 'worldtondc' => 1, 'wrapmodes' => 1, 'writer' => 1, 'writers' => 1, 'writtenby' => 1, 'wwsfamilyname' => 1, 'wwssubfamilyname' => 1, 'x' => 1, 'xcfversion' => 1, 'xclippathunits' => 1, 'xheight' => 1, 'xmag' => 1, 'xmethod' => 1, 'xmldata' => 1, 'xmlfiletype' => 1, 'xmp_profile' => 1, 'xmpbj' => 1, 'xmpdm' => 1, 'xmpmm' => 1, 'xmpnote' => 1, 'xmpplus' => 1, 'xmprights' => 1, 'xmptpg' => 1, 'xobject' => 1, 'xoffset' => 1, 'xp_dip_xml' => 1, 'xtranslayout' => 1, 'xylocation' => 1, 'xyoffsetinfo' => 1, 'yclippathunits' => 1, 'year' => 1, 'ylevel' => 1, 'ymag' => 1, 'ymethod' => 1, 'yoffset' => 1, 'ytarget' => 1, 'zipbitflag' => 1, 'zipcompressedsize' => 1, 'zipcompression' => 1, 'zipcrc' => 1, 'zipfilename' => 1, 'zipmodifydate' => 1, 'ziprequiredversion' => 1, 'zipuncompressedsize' => 1, 'zoom' => 1, 'zoomedpreviewimage' => 1, 'zoompos' => 1, ); # module names for writable Composite tags my %compositeModules = ( 'filenumber' => 'Image::ExifTool::Canon', 'flash' => 'Image::ExifTool::XMP', 'jpgfromraw' => 'Image::ExifTool::Exif', 'originaldecisiondata' => 'Image::ExifTool::Canon', 'otherimage' => 'Image::ExifTool::Exif', 'previewimage' => 'Image::ExifTool::Exif', 'thumbnailimage' => 'Image::ExifTool::Exif', ); #++++ End automatically generated code ++++ my %specialStruct = ( NAMESPACE => 1, STRUCT_NAME => 1, TYPE => 1, NOTES => 1, ); # insert any user-defined tags into our tag lookup if (%Image::ExifTool::UserDefined) { my @userTables = sort keys %Image::ExifTool::UserDefined; while (@userTables) { my $table = shift @userTables; AddTags($Image::ExifTool::UserDefined{$table}, $table); } } # insert any other queued tags from plug-in modules if (@Image::ExifTool::pluginTags) { my $args; foreach $args (@Image::ExifTool::pluginTags) { AddTags($$args[0], $$args[1]); } undef @Image::ExifTool::pluginTags; } #------------------------------------------------------------------------------ # Add tag names corresponding to flattened XMP tags for all structure fields # Inputs: 0) tag table ref for flattened tags, 1) tagID, 2) lowercase tag name, # 3) tag ID list ref, 4) reference to list of lowercase tag names # 5) table number in lookup, 6) tagInfo hash for parent structure # 7) tag ID of top-level stucture # Notes: Used only for user-defined structures sub AddFields($$$$$$;$$) { my ($tagTablePtr, $tagID, $lcTag, $tagIDs, $lcTags, $tnum, $tagInfo, $baseID) = @_; return if length($tagID) > 500; # avoid deep recursion unless ($tagInfo) { $tagInfo = $$tagTablePtr{$tagID}; $baseID = $tagID; } my $strTable = $$tagInfo{Struct}; unless (ref $strTable) { my $strName = $strTable; $strTable = $Image::ExifTool::UserDefined::xmpStruct{$strTable}; $strTable or warn("No definition for structure '$strName'\n"), return; $$strTable{STRUCT_NAME} or $$strTable{STRUCT_NAME} = "XMP $strName"; $$tagInfo{Struct} = $strTable; # replace name with hash ref delete $$tagInfo{SubDirectory}; # deprecated use of SubDirectory in Struct tags } # inherit NAMESPACE from parent table if it doesn't exist $$strTable{NAMESPACE} = $$tagTablePtr{NAMESPACE} unless exists $$strTable{NAMESPACE}; my $field; foreach $field (keys %$strTable) { next if $specialStruct{$field}; my $id = $tagID . ucfirst($field); # use name of existing flattened tag if already defined my $flatInfo = $$tagTablePtr{$id}; my $fieldInfo = $$strTable{$field}; my $flatName; $flatName = $$fieldInfo{FlatName} if ref $fieldInfo eq 'HASH'; my $lc = ($flatInfo and $$flatInfo{Name}) ? lc $$flatInfo{Name} : $lcTag . lc($flatName || $field); my $copyID = $baseID; push @$tagIDs, \$copyID, $id; push @$lcTags, $lc, $lc; next unless ref $fieldInfo eq 'HASH' and $$fieldInfo{Struct}; # recursively add flattened tags for all sub-fields AddFields($tagTablePtr, $id, $lc, $tagIDs, $lcTags, $tnum, $fieldInfo, $baseID); } } #------------------------------------------------------------------------------ # Add tags to the lookup (for user-defined tags, etc) # Inputs: 0) tag table ref, 1) table name my %tableNumHash; sub AddTags($$) { my ($tagTablePtr, $table) = @_; # generate lookup for table numbers if not done already unless (%tableNumHash) { my $tnum = 0; my $tbl; foreach $tbl (@tableList) { $tableNumHash{$tbl} = $tnum++; } } my (@moreTables, %moreTableRefs); for (;;) { my $tnum = $tableNumHash{$table}; unless (defined $tnum) { # add new table to list $tnum = scalar @tableList; push @tableList, $table; } my $tagID; foreach $tagID (Image::ExifTool::TagTableKeys($tagTablePtr)) { my $newInfo = $$tagTablePtr{$tagID}; if (ref $newInfo eq 'HASH') { $$newInfo{Name} or $$newInfo{Name} = Image::ExifTool::MakeTagName($tagID); # use new ID of tag in Composite table in case it changed $tagID = $$newInfo{NewTagID} if defined $$newInfo{NewTagID}; } else { $newInfo = $$tagTablePtr{$tagID} = { Name => $newInfo }; } my $lcTag = lc $$newInfo{Name}; my (@lcTags, @tagIDs, $existed, $isFlat); # if this is a structure, add all flattened tag names to lookup if ($$newInfo{Struct}) { AddFields($tagTablePtr, $tagID, $lcTag, \@tagIDs, \@lcTags, $tnum); } # add tags to lookup even though we don't know if they are writable # (to save speed by not having to load the module) Tags: for (;;) { my $lookup = $tagLookup{$lcTag}; $lookup or $lookup = $tagLookup{$lcTag} = { }; if ($$lookup{$tnum}) { my $le = $$lookup{$tnum}; my $ids = (ref $le eq 'ARRAY') ? $le : [ $le ]; if (ref $tagID) { # a reference points to the tag ID of the base structure for # a flattened tag. There must be only one of these, # and it must come first. unshift @$ids, $tagID unless ref $$ids[0]; # only add new tag ID if it didn't already exist } elsif (grep /^$tagID$/, @$ids) { $existed = 1 unless $isFlat; } else { push @$ids, $tagID; } # only update lookup if there is now more than one entry $$lookup{$tnum} = $ids if @$ids > 1; } else { $$lookup{$tnum} = $tagID; } last unless @tagIDs; for (;;) { $tagID = shift @tagIDs; $lcTag = shift @lcTags; last unless $$tagTablePtr{$tagID}; # don't waste time if it exists last Tags unless @tagIDs; } $isFlat = 1; } # add any new subdirectory tables (unless done already) next if $existed or not $$newInfo{SubDirectory}; my $subTable = $$newInfo{SubDirectory}{TagTable}; next unless $subTable and not defined $tableNumHash{$subTable}; next if $moreTableRefs{$subTable}; no strict 'refs'; next unless %$subTable; # save new table to process after this one push @moreTables, $subTable; $moreTableRefs{$subTable} = \%$subTable; # save source table name so we can load it when necessary $$subTable{SRC_TABLE} = $table; } $table = shift @moreTables or last; $tagTablePtr = $moreTableRefs{$table}; } } #------------------------------------------------------------------------------ # Return true if the tag exists # Inputs: 0) tag name (case insensitive) # Returns: true if tag exists sub TagExists($) { my $tag = lc($_[0]); return 1 if $tagExists{$tag} or $tagLookup{$tag}; return 0; } #------------------------------------------------------------------------------ # Find information for writable tags (case insensitive) # Inputs: 0) tag name (case insensitive) # Returns: Scalar context: tag info or false if none found # List context: list of all matching tagInfo hashes sub FindTagInfo($) { local $_; my $tag = shift; my $lcTag = lc($tag); my ($tableNum, @tagInfoList, @lookups); my $lookup = $tagLookup{$lcTag}; if (not $lookup and $lcTag =~ /[?*]/) { # allow wildcards in tag name my $pat = $lcTag; $pat =~ s/\*/[-\\w]*/g; $pat =~ s/\?/[-\\w]/g; my @tags = grep(/^$pat$/, keys %tagLookup); if (@tags) { push @lookups, $tagLookup{$_} foreach sort @tags; $lookup = shift @lookups; } } while ($lookup) { foreach $tableNum (keys %$lookup) { my $table = GetTagTable($tableList[$tableNum]); my $le = $$lookup{$tableNum}; my ($tagID, $tagIDs); if (ref $le eq 'ARRAY') { $tagIDs = $le; # if first entry is a reference, it indicates that this is a # flattened tag and refers to the tag ID of the containing top-level # structure, so now is the time to generate the flattened tags if (ref $$tagIDs[0]) { # (remove from the lookup since we only need to do this once) my $rootIDPtr = shift @$tagIDs; require Image::ExifTool::XMP; Image::ExifTool::XMP::AddFlattenedTags($table, $$rootIDPtr); } } else { $tagIDs = [ $le ]; } foreach $tagID (@$tagIDs) { my @infoList = GetTagInfoList($table,$tagID); unless (@infoList) { my $reload; # call write proc if it exists in case it adds tags to the table my $writeProc = $table->{WRITE_PROC}; $reload = 1 if $writeProc and &$writeProc(); # load module with composite tag if necessary my $compMod = $compositeModules{$lcTag}; $reload = 1 if $compMod and eval "require $compMod"; @infoList = GetTagInfoList($table,$tagID) if $reload; } if (@infoList == 1) { push @tagInfoList, @infoList; } elsif (@infoList > 1) { my $tagInfo; # must check tag list in case tags have different names foreach $tagInfo (@infoList) { next unless $lcTag eq lc($$tagInfo{Name}); push @tagInfoList, $tagInfo; } } } } $lookup = shift @lookups; } if (wantarray) { return @tagInfoList; } else { return $tagInfoList[0]; } } 1; # end __END__ =head1 NAME Image::ExifTool::TagLookup - Fast lookup for ExifTool tags =head1 SYNOPSIS This module is required by Image::ExifTool for writing tags. =head1 DESCRIPTION Provides a fast, case insensitive lookup for tag names. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::BuildTagLookup(3pm)|Image::ExifTool::BuildTagLookup>, L<Image::ExifTool::TagNames(3pm)|Image::ExifTool::TagNames> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/TagNames.pod������������������������������������������������000644 �000765 �000024 �00005265426 12650447111 022134� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ =head1 NAME Image::ExifTool::TagNames - ExifTool tag name documentation =head1 DESCRIPTION This document contains a complete list of ExifTool tag names, organized into tables based on information type. Tag names are used to reference specific meta information extracted from or written to a file. =head1 TAG TABLES The tables listed below give the names of all tags recognized by ExifTool. B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each table. A B<Tag ID> is the computer-readable equivalent of a tag name, and is the identifier that is actually stored in the file. B<Index#> refers to the location of a value when found at a fixed position within a data block (B<#> is the multiplier for calculating a byte offset: B<1>, B<2> or B<4>). B<Sequence> gives the order of values for a serial data stream. A B<Tag Name> is the handle by which the information is accessed in ExifTool. In some instances, more than one name may correspond to a single tag ID. In these cases, the actual name used depends on the context in which the information is found. Case is not significant for tag names. A question mark (C<?>) after a tag name indicates that the information is either not understood, not verified, or not very useful -- these tags are not extracted by ExifTool unless the Unknown (-u) option is enabled. Be aware that some tag names are different than the descriptions printed out by default when extracting information with exiftool. To see the tag names instead of the descriptions, use C<exiftool -s>. The B<Writable> column indicates whether the tag is writable by ExifTool. Anything but an C<N> in this column means the tag is writable. A C<Y> indicates writable information that is either unformatted or written using the existing format. Other expressions give details about the information format, and vary depending on the general type of information. The format name may be followed by a number in square brackets to indicate the number of values written, or the number of characters in a fixed-length string (including a null terminator which is added if required). A plus sign (C<+>) after an entry in the B<Writable> column indicates a "list" tag which supports multiple values and allows individual values to be added and deleted. A slash (C</>) indicates an "avoided" tag that is not created when writing if another same-named tag may be created instead. To write these tags, the group should be specified. A tilde (C<~>) indicates a tag this is writable only when the print conversion is disabled (by setting PrintConv to 0, using the -n option, or suffixing the tag name with a C<#> character). An exclamation point (C<!>) indicates a tag that is considered unsafe to write under normal circumstances. These "unsafe" tags are not written unless specified explicitly (ie. wildcards and "all" may not be used), and care should be taken when editing them manually since they may affect the way an image is rendered. An asterisk (C<*>) indicates a "protected" tag which is not writable directly, but is written automatically by ExifTool (often when a corresponding Composite or Extra tag is written). A colon (C<:>) indicates a mandatory tag which may be added automatically when writing. The HTML version of these tables also lists possible B<Values> for discrete-valued tags, as well as B<Notes> for some tags. The B<Values> are listed as the computer-readable and human-readable values on the left and right hand side of an equals sign (C<=>) respectively. The human-readable values are used by default when reading and writing, but the computer-readable values may be accessed by disabling the value conversion with the -n option on the command line, by setting the ValueConv option to 0 in the API, or or on a per-tag basis by adding a hash (C<#>) after the tag name. B<Note>: If you are familiar with common meta-information tag names, you may find that some ExifTool tag names are different than expected. The usual reason for this is to make the tag names more consistent across different types of meta information. To determine a tag name, either consult this documentation or run C<exiftool -s> on a file containing the information in question. I<(This documentation is the result of years of research, testing and reverse engineering, and is the most complete metadata tag list available anywhere on the internet. It is provided not only for ExifTool users, but more importantly as a public service to help augment the collective knowledge, and is often used as a primary source of information in the development of other metadata software. Please help keep this documentation as accurate and complete as possible, and feed any new discoveries back to ExifTool. A big thanks to everyone who has helped with this so far!)> =head2 JPEG Tags This table lists information extracted by ExifTool from JPEG images. Tag ID Tag Name Writable ------ -------- -------- 'APP0' JFIF JFIF JFXX JFIF Extension CIFF CanonRaw AVI1 JPEG AVI1 Ocad JPEG Ocad 'APP1' EXIF EXIF ExtendedXMP XMP XMP XMP QVCI Casio QVCI FLIR FLIR FFF 'APP2' ICC_Profile ICC_Profile FPXR FlashPix MPF MPF PreviewImage N 'APP3' Meta Kodak Meta Stim Stim PreviewImage N 'APP4' Scalado Scalado FPXR FlashPix PreviewImage N 'APP5' RMETA Ricoh RMETA PreviewImage N 'APP6' EPPIM JPEG EPPIM NITF JPEG NITF HP_TDHD HP TDHD 'APP7' Pentax Pentax Qualcomm Qualcomm 'APP8' SPIFF JPEG SPIFF 'APP9' MediaJukebox JPEG MediaJukebox 'APP10' Comment N 'APP11' JPEG-HDR JPEG HDR 'APP12' PictureInfo APP12 PictureInfo Ducky APP12 Ducky 'APP13' Photoshop Photoshop Adobe_CM JPEG AdobeCM 'APP14' Adobe JPEG Adobe 'APP15' GraphicConverter JPEG GraphConv 'COM' Comment Y 'DQT' DefineQuantizationTable N 'SOF' StartOfFrame JPEG SOF 'Trailer' AFCP AFCP CanonVRD CanonVRD FotoStation FotoStation PhotoMechanic PhotoMechanic MIE MIE Samsung Samsung Trailer PreviewImage Y =head3 JPEG AVI1 Tags This information may be found in APP0 of JPEG image data from AVI videos. Index1 Tag Name Writable ------ -------- -------- 0 InterleavedField N =head3 JPEG Ocad Tags Tags extracted from the JPEG APP0 "Ocad" segment (found in Photobucket images). Tag ID Tag Name Writable ------ -------- -------- 'Rev' OcadRevision N =head3 JPEG EPPIM Tags APP6 is used in by the Toshiba PDR-M700 to store a TIFF structure containing PrintIM information. Tag ID Tag Name Writable ------ -------- -------- 0xc4a5 PrintIM PrintIM =head3 JPEG NITF Tags Information in APP6 used by the National Imagery Transmission Format. See L<http://www.gwg.nga.mil/ntb/baseline/docs/n010697/bwcguide25aug98.pdf> for the official specification. Index1 Tag Name Writable ------ -------- -------- 0 NITFVersion N 2 ImageFormat N 3 BlocksPerRow N 5 BlocksPerColumn N 7 ImageColor N 8 BitDepth N 9 ImageClass N 10 JPEGProcess N 11 Quality N 12 StreamColor N 13 StreamBitDepth N 14 Flags N =head3 JPEG SPIFF Tags This information is found in APP8 of SPIFF-style JPEG images (the "official" yet rarely used JPEG file format standard: Still Picture Interchange File Format). See L<http://www.jpeg.org/public/spiff.pdf> for the official specification. Index1 Tag Name Writable ------ -------- -------- 0 SPIFFVersion N 2 ProfileID N 3 ColorComponents N 6 ImageHeight N 10 ImageWidth N 14 ColorSpace N 15 BitsPerSample N 16 Compression N 17 ResolutionUnit N 18 YResolution N 22 XResolution N =head3 JPEG MediaJukebox Tags Tags found in the XML metadata of the "Media Jukebox" APP9 segment. Tag Name Writable -------- -------- Album N Caption N Date N Keywords N Name N People N Places N Tool_Name N Tool_Version N =head3 JPEG HDR Tags Information extracted from APP11 of a JPEG-HDR image. Tag ID Tag Name Writable ------ -------- -------- 'RatioImage' RatioImage N 'alp' Alpha N 'bet' Beta N 'cor' CorrectionMethod N 'ln0' Ln0 N 'ln1' Ln1 N 's2n' S2n N 'ver' JPEG-HDRVersion N =head3 JPEG AdobeCM Tags The "Adobe_CM" APP13 segment presumably contains color management information, but the meaning of the data is currently unknown. If anyone has an idea about what this means, please let me know. Index2 Tag Name Writable ------ -------- -------- 0 AdobeCMType N =head3 JPEG Adobe Tags The "Adobe" APP14 segment stores image encoding information for DCT filters. This segment may be copied or deleted as a block using the Extra "Adobe" tag, but note that it is not deleted by default when deleting all metadata because it may affect the appearance of the image. Index2 Tag Name Writable ------ -------- -------- 0 DCTEncodeVersion N 1 APP14Flags0 N 2 APP14Flags1 N 3 ColorTransform N =head3 JPEG GraphConv Tags APP15 is used by GraphicConverter to store JPEG quality. Tag ID Tag Name Writable ------ -------- -------- 'Q' Quality N =head3 JPEG SOF Tags This information is extracted from the JPEG Start Of Frame segment. Tag Name Writable -------- -------- BitsPerSample N ColorComponents N EncodingProcess N ImageHeight N ImageWidth N YCbCrSubSampling N =head2 EXIF Tags EXIF stands for "Exchangeable Image File Format". This type of information is formatted according to the TIFF specification, and may be found in JPG, TIFF, PNG, JP2, PGF, MIFF, HDP, PSP and XCF images, as well as many TIFF-based RAW images, and even some AVI and MOV videos. The EXIF meta information is organized into different Image File Directories (IFD's) within an image. The names of these IFD's correspond to the ExifTool family 1 group names. When writing EXIF information, the default B<Group> listed below is used unless another group is specified. The table below lists all EXIF tags. Also listed are TIFF, DNG, HDP and other tags which are not part of the EXIF specification, but may co-exist with EXIF tags in some images. Tags which are part of the EXIF 2.3 specification have an underlined B<Tag Name> in the HTML version of this documentation. See L<http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf> for the official EXIF 2.3 specification. Tag ID Tag Name Group Writable ------ -------- ----- -------- 0x0001 InteropIndex InteropIFD string! 0x0002 InteropVersion InteropIFD undef!: 0x000b ProcessingSoftware IFD0 string 0x00fe SubfileType IFD0 int32u! 0x00ff OldSubfileType IFD0 int16u! 0x0100 ImageWidth IFD0 int32u! 0x0101 ImageHeight IFD0 int32u! 0x0102 BitsPerSample IFD0 int16u[n]! 0x0103 Compression IFD0 int16u!: 0x0106 PhotometricInterpretation IFD0 int16u! 0x0107 Thresholding IFD0 int16u! 0x0108 CellWidth IFD0 int16u! 0x0109 CellLength IFD0 int16u! 0x010a FillOrder IFD0 int16u! 0x010d DocumentName IFD0 string 0x010e ImageDescription IFD0 string 0x010f Make IFD0 string 0x0110 Model IFD0 string 0x0111 StripOffsets - N PreviewImageStart IFD0 int32u* PreviewImageStart SubIFD1 int32u* JpgFromRawStart SubIFD2 int32u* 0x0112 Orientation IFD0 int16u 0x0115 SamplesPerPixel IFD0 int16u! 0x0116 RowsPerStrip IFD0 int32u! 0x0117 StripByteCounts - N PreviewImageLength IFD0 int32u* PreviewImageLength SubIFD1 int32u* JpgFromRawLength SubIFD2 int32u* 0x0118 MinSampleValue IFD0 int16u 0x0119 MaxSampleValue IFD0 int16u 0x011a XResolution IFD0 rational64u: 0x011b YResolution IFD0 rational64u: 0x011c PlanarConfiguration IFD0 int16u! 0x011d PageName IFD0 string 0x011e XPosition IFD0 rational64u 0x011f YPosition IFD0 rational64u 0x0120 FreeOffsets - N 0x0121 FreeByteCounts - N 0x0122 GrayResponseUnit IFD0 int16u 0x0123 GrayResponseCurve - N 0x0124 T4Options - N 0x0125 T6Options - N 0x0128 ResolutionUnit IFD0 int16u: 0x0129 PageNumber IFD0 int16u[2] 0x012c ColorResponseUnit - N 0x012d TransferFunction IFD0 int16u[768]! 0x0131 Software IFD0 string 0x0132 ModifyDate IFD0 string 0x013b Artist IFD0 string 0x013c HostComputer IFD0 string 0x013d Predictor IFD0 int16u! 0x013e WhitePoint IFD0 rational64u[2] 0x013f PrimaryChromaticities IFD0 rational64u[6] 0x0140 ColorMap - N 0x0141 HalftoneHints IFD0 int16u[2] 0x0142 TileWidth IFD0 int32u! 0x0143 TileLength IFD0 int32u! 0x0144 TileOffsets - N 0x0145 TileByteCounts - N 0x0146 BadFaxLines - N 0x0147 CleanFaxData - N 0x0148 ConsecutiveBadFaxLines - N 0x014a SubIFD - EXIF A100DataOffset - N 0x014c InkSet IFD0 int16u 0x014d InkNames - N 0x014e NumberofInks - N 0x0150 DotRange IFD0 string 0x0151 TargetPrinter - N 0x0152 ExtraSamples - N 0x0153 SampleFormat - N 0x0154 SMinSampleValue - N 0x0155 SMaxSampleValue - N 0x0156 TransferRange - N 0x0157 ClipPath - N 0x0158 XClipPathUnits - N 0x0159 YClipPathUnits - N 0x015a Indexed - N 0x015b JPEGTables - N 0x015f OPIProxy - N 0x0190 GlobalParametersIFD - EXIF 0x0191 ProfileType - N 0x0192 FaxProfile - N 0x0193 CodingMethods - N 0x0194 VersionYear - N 0x0195 ModeNumber - N 0x01b1 Decode - N 0x01b2 DefaultImageColor - N 0x01b3 T82Options - N 0x01b5 JPEGTables - N 0x0200 JPEGProc - N 0x0201 ThumbnailOffset IFD1 int32u* ThumbnailOffset IFD0 int32u* ThumbnailOffset SubIFD int32u* PreviewImageStart MakerNotes int32u* PreviewImageStart IFD0 int32u* JpgFromRawStart SubIFD int32u* JpgFromRawStart IFD2 int32u* OtherImageStart SubIFD1 int32u* OtherImageStart SubIFD2 int32u* OtherImageStart - N 0x0202 ThumbnailLength IFD1 int32u* ThumbnailLength IFD0 int32u* ThumbnailLength SubIFD int32u* PreviewImageLength MakerNotes int32u* PreviewImageLength IFD0 int32u* JpgFromRawLength SubIFD int32u* JpgFromRawLength IFD2 int32u* OtherImageLength SubIFD1 int32u* OtherImageLength SubIFD2 int32u* OtherImageLength - N 0x0203 JPEGRestartInterval - N 0x0205 JPEGLosslessPredictors - N 0x0206 JPEGPointTransforms - N 0x0207 JPEGQTables - N 0x0208 JPEGDCTables - N 0x0209 JPEGACTables - N 0x0211 YCbCrCoefficients IFD0 rational64u[3]! 0x0212 YCbCrSubSampling IFD0 int16u[2]! 0x0213 YCbCrPositioning IFD0 int16u!: 0x0214 ReferenceBlackWhite IFD0 rational64u[6] 0x022f StripRowCounts - N 0x02bc ApplicationNotes ExifIFD XMP 0x03e7 USPTOMiscellaneous - N 0x1000 RelatedImageFileFormat InteropIFD string! 0x1001 RelatedImageWidth InteropIFD int16u! 0x1002 RelatedImageHeight InteropIFD int16u! 0x4746 Rating IFD0 int16u/ 0x4747 XP_DIP_XML - N 0x4748 StitchInfo - Microsoft Stitch 0x4749 RatingPercent IFD0 int16u/ 0x7035 ChromaticAberrationCorrParams - N 0x7037 DistortionCorrParams - N 0x800d ImageID - N 0x80a3 WangTag1 - N 0x80a4 WangAnnotation - N 0x80a5 WangTag3 - N 0x80a6 WangTag4 - N 0x80b8 ImageReferencePoints - N 0x80b9 RegionXformTackPoint - N 0x80ba WarpQuadrilateral - N 0x80bb AffineTransformMat - N 0x80e3 Matteing - N 0x80e4 DataType - N 0x80e5 ImageDepth - N 0x80e6 TileDepth - N 0x8214 ImageFullWidth - N 0x8215 ImageFullHeight - N 0x8216 TextureFormat - N 0x8217 WrapModes - N 0x8218 FovCot - N 0x8219 MatrixWorldToScreen - N 0x821a MatrixWorldToCamera - N 0x827d Model2 - N 0x828d CFARepeatPatternDim SubIFD int16u[2]! 0x828e CFAPattern2 SubIFD int8u[n]! 0x828f BatteryLevel - N 0x8290 KodakIFD - Kodak IFD 0x8298 Copyright IFD0 string 0x829a ExposureTime ExifIFD rational64u 0x829d FNumber ExifIFD rational64u 0x82a5 MDFileTag - N 0x82a6 MDScalePixel - N 0x82a7 MDColorTable - N 0x82a8 MDLabName - N 0x82a9 MDSampleInfo - N 0x82aa MDPrepDate - N 0x82ab MDPrepTime - N 0x82ac MDFileUnits - N 0x830e PixelScale - N 0x8335 AdventScale - N 0x8336 AdventRevision - N 0x835c UIC1Tag - N 0x835d UIC2Tag - N 0x835e UIC3Tag - N 0x835f UIC4Tag - N 0x83bb IPTC-NAA IFD0 IPTC 0x847e IntergraphPacketData - N 0x847f IntergraphFlagRegisters - N 0x8480 IntergraphMatrix - N 0x8481 INGRReserved - N 0x8482 ModelTiePoint - N 0x84e0 Site - N 0x84e1 ColorSequence - N 0x84e2 IT8Header - N 0x84e3 RasterPadding - N 0x84e4 BitsPerRunLength - N 0x84e5 BitsPerExtendedRunLength - N 0x84e6 ColorTable - N 0x84e7 ImageColorIndicator - N 0x84e8 BackgroundColorIndicator - N 0x84e9 ImageColorValue - N 0x84ea BackgroundColorValue - N 0x84eb PixelIntensityRange - N 0x84ec TransparencyIndicator - N 0x84ed ColorCharacterization - N 0x84ee HCUsage - N 0x84ef TrapIndicator - N 0x84f0 CMYKEquivalent - N 0x8546 SEMInfo IFD0 string 0x8568 AFCP_IPTC - IPTC 0x85b8 PixelMagicJBIGOptions - N 0x85d7 JPLCartoIFD - N 0x85d8 ModelTransform - N 0x8602 WB_GRGBLevels - N 0x8606 LeafData - Leaf 0x8649 PhotoshopSettings - Photoshop 0x8769 ExifOffset - EXIF 0x8773 ICC_Profile - ICC_Profile 0x877f TIFF_FXExtensions - N 0x8780 MultiProfiles - N 0x8781 SharedData - N 0x8782 T88Options - N 0x87ac ImageLayer - N 0x87af GeoTiffDirectory IFD0 undef 0x87b0 GeoTiffDoubleParams IFD0 undef 0x87b1 GeoTiffAsciiParams IFD0 string 0x87be JBIGOptions - N 0x8822 ExposureProgram ExifIFD int16u 0x8824 SpectralSensitivity ExifIFD string 0x8825 GPSInfo - GPS 0x8827 ISO ExifIFD int16u[n] 0x8828 Opto-ElectricConvFactor - N 0x8829 Interlace - N 0x882a TimeZoneOffset ExifIFD int16s[n] 0x882b SelfTimerMode ExifIFD int16u 0x8830 SensitivityType ExifIFD int16u 0x8831 StandardOutputSensitivity ExifIFD int32u 0x8832 RecommendedExposureIndex ExifIFD int32u 0x8833 ISOSpeed ExifIFD int32u 0x8834 ISOSpeedLatitudeyyy ExifIFD int32u 0x8835 ISOSpeedLatitudezzz ExifIFD int32u 0x885c FaxRecvParams - N 0x885d FaxSubAddress - N 0x885e FaxRecvTime - N 0x8871 FedexEDR - N 0x888a LeafSubIFD - Leaf SubIFD 0x9000 ExifVersion ExifIFD undef: 0x9003 DateTimeOriginal ExifIFD string 0x9004 CreateDate ExifIFD string 0x9009 GooglePlusUploadCode ExifIFD undef[n] 0x9101 ComponentsConfiguration ExifIFD undef[4]!: 0x9102 CompressedBitsPerPixel ExifIFD rational64u! 0x9201 ShutterSpeedValue ExifIFD rational64s 0x9202 ApertureValue ExifIFD rational64u 0x9203 BrightnessValue ExifIFD rational64s 0x9204 ExposureCompensation ExifIFD rational64s 0x9205 MaxApertureValue ExifIFD rational64u 0x9206 SubjectDistance ExifIFD rational64u 0x9207 MeteringMode ExifIFD int16u 0x9208 LightSource ExifIFD int16u 0x9209 Flash ExifIFD int16u 0x920a FocalLength ExifIFD rational64u 0x920b FlashEnergy - N 0x920c SpatialFrequencyResponse - N 0x920d Noise - N 0x920e FocalPlaneXResolution - N 0x920f FocalPlaneYResolution - N 0x9210 FocalPlaneResolutionUnit - N 0x9211 ImageNumber ExifIFD int32u 0x9212 SecurityClassification ExifIFD string 0x9213 ImageHistory ExifIFD string 0x9214 SubjectArea ExifIFD int16u[n] 0x9215 ExposureIndex - N 0x9216 TIFF-EPStandardID - N 0x9217 SensingMethod - N 0x923a CIP3DataFile - N 0x923b CIP3Sheet - N 0x923c CIP3Side - N 0x923f StoNits - N 0x927c MakerNoteApple ExifIFD Apple MakerNoteNikon ExifIFD Nikon MakerNoteCanon ExifIFD Canon MakerNoteCasio ExifIFD Casio MakerNoteCasio2 ExifIFD Casio Type2 MakerNoteFLIR ExifIFD FLIR MakerNoteFujiFilm ExifIFD FujiFilm MakerNoteGE ExifIFD GE MakerNoteGE2 ExifIFD FujiFilm MakerNoteHasselblad ExifIFD Unknown MakerNoteHP ExifIFD HP MakerNoteHP2 ExifIFD HP Type2 MakerNoteHP4 ExifIFD HP Type4 MakerNoteHP6 ExifIFD HP Type6 MakerNoteISL ExifIFD Unknown MakerNoteJVC ExifIFD JVC MakerNoteJVCText ExifIFD JVC Text MakerNoteKodak1a ExifIFD Kodak MakerNoteKodak1b ExifIFD Kodak MakerNoteKodak2 ExifIFD Kodak Type2 MakerNoteKodak3 ExifIFD Kodak Type3 MakerNoteKodak4 ExifIFD Kodak Type4 MakerNoteKodak5 ExifIFD Kodak Type5 MakerNoteKodak6a ExifIFD Kodak Type6 MakerNoteKodak6b ExifIFD Kodak Type6 MakerNoteKodak7 ExifIFD Kodak Type7 MakerNoteKodak8a ExifIFD Kodak Type8 MakerNoteKodak8b ExifIFD Kodak Type8 MakerNoteKodak8c ExifIFD Kodak Type8 MakerNoteKodak9 ExifIFD Kodak Type9 MakerNoteKodak10 ExifIFD Kodak Type10 MakerNoteKodak11 ExifIFD Kodak Type11 MakerNoteKodakUnknown ExifIFD Kodak Unknown MakerNoteKyocera ExifIFD Unknown MakerNoteMinolta ExifIFD Minolta MakerNoteMinolta2 ExifIFD Olympus MakerNoteMinolta3 ExifIFD undef MakerNoteMotorola ExifIFD Motorola MakerNoteNikon2 ExifIFD Nikon Type2 MakerNoteNikon3 ExifIFD Nikon MakerNoteNintendo ExifIFD Nintendo MakerNoteOlympus ExifIFD Olympus MakerNoteOlympus2 ExifIFD Olympus MakerNoteLeica ExifIFD Panasonic MakerNoteLeica2 ExifIFD Panasonic Leica2 MakerNoteLeica3 ExifIFD Panasonic Leica3 MakerNoteLeica4 ExifIFD Panasonic Leica4 MakerNoteLeica5 ExifIFD Panasonic Leica5 MakerNoteLeica6 ExifIFD Panasonic Leica6 MakerNoteLeica7 ExifIFD Panasonic Leica6 MakerNoteLeica8 ExifIFD Panasonic Leica5 MakerNoteLeica9 ExifIFD Panasonic Leica9 MakerNotePanasonic ExifIFD Panasonic MakerNotePanasonic2 ExifIFD Panasonic Type2 MakerNotePentax ExifIFD Pentax MakerNotePentax2 ExifIFD Pentax Type2 MakerNotePentax3 ExifIFD Casio Type2 MakerNotePentax4 ExifIFD Pentax Type4 MakerNotePentax5 ExifIFD Pentax MakerNotePentax6 ExifIFD Pentax S1 MakerNotePhaseOne ExifIFD PhaseOne MakerNoteReconyx ExifIFD Reconyx MakerNoteRicoh ExifIFD Ricoh MakerNoteRicoh2 ExifIFD Ricoh Type2 MakerNoteRicohText ExifIFD Ricoh Text MakerNoteSamsung1a ExifIFD undef MakerNoteSamsung1b ExifIFD Samsung MakerNoteSamsung2 ExifIFD Samsung Type2 MakerNoteSanyo ExifIFD Sanyo MakerNoteSanyoC4 ExifIFD Sanyo MakerNoteSanyoPatch ExifIFD Sanyo MakerNoteSigma ExifIFD Sigma MakerNoteSony ExifIFD Sony MakerNoteSony2 ExifIFD Olympus MakerNoteSony3 ExifIFD Olympus MakerNoteSony4 ExifIFD Sony PIC MakerNoteSony5 ExifIFD Sony MakerNoteSonyEricsson ExifIFD Sony Ericsson MakerNoteSonySRF ExifIFD Sony SRF MakerNoteUnknownText ExifIFD undef MakerNoteUnknownBinary ExifIFD undef MakerNoteUnknown ExifIFD Unknown 0x9286 UserComment ExifIFD undef 0x9290 SubSecTime ExifIFD string 0x9291 SubSecTimeOriginal ExifIFD string 0x9292 SubSecTimeDigitized ExifIFD string 0x932f MSDocumentText - N 0x9330 MSPropertySetStorage - N 0x9331 MSDocumentTextPosition - N 0x935c ImageSourceData IFD0 undef! 0x9c9b XPTitle IFD0 int8u 0x9c9c XPComment IFD0 int8u 0x9c9d XPAuthor IFD0 int8u 0x9c9e XPKeywords IFD0 int8u 0x9c9f XPSubject IFD0 int8u 0xa000 FlashpixVersion ExifIFD undef: 0xa001 ColorSpace ExifIFD int16u: 0xa002 ExifImageWidth ExifIFD int16u: 0xa003 ExifImageHeight ExifIFD int16u: 0xa004 RelatedSoundFile ExifIFD string 0xa005 InteropOffset - EXIF 0xa20b FlashEnergy ExifIFD rational64u[n] 0xa20c SpatialFrequencyResponse - N 0xa20d Noise - N 0xa20e FocalPlaneXResolution ExifIFD rational64u 0xa20f FocalPlaneYResolution ExifIFD rational64u 0xa210 FocalPlaneResolutionUnit ExifIFD int16u 0xa211 ImageNumber - N 0xa212 SecurityClassification - N 0xa213 ImageHistory - N 0xa214 SubjectLocation ExifIFD int16u[2] 0xa215 ExposureIndex ExifIFD rational64u 0xa216 TIFF-EPStandardID - N 0xa217 SensingMethod ExifIFD int16u 0xa300 FileSource ExifIFD undef 0xa301 SceneType ExifIFD undef 0xa302 CFAPattern ExifIFD undef 0xa401 CustomRendered ExifIFD int16u 0xa402 ExposureMode ExifIFD int16u 0xa403 WhiteBalance ExifIFD int16u 0xa404 DigitalZoomRatio ExifIFD rational64u 0xa405 FocalLengthIn35mmFormat ExifIFD int16u 0xa406 SceneCaptureType ExifIFD int16u 0xa407 GainControl ExifIFD int16u 0xa408 Contrast ExifIFD int16u 0xa409 Saturation ExifIFD int16u 0xa40a Sharpness ExifIFD int16u 0xa40b DeviceSettingDescription - N 0xa40c SubjectDistanceRange ExifIFD int16u 0xa420 ImageUniqueID ExifIFD string 0xa430 OwnerName ExifIFD string 0xa431 SerialNumber ExifIFD string 0xa432 LensInfo ExifIFD rational64u[4] 0xa433 LensMake ExifIFD string 0xa434 LensModel ExifIFD string 0xa435 LensSerialNumber ExifIFD string 0xa480 GDALMetadata - N 0xa481 GDALNoData - N 0xa500 Gamma ExifIFD rational64u 0xafc0 ExpandSoftware - N 0xafc1 ExpandLens - N 0xafc2 ExpandFilm - N 0xafc3 ExpandFilterLens - N 0xafc4 ExpandScanner - N 0xafc5 ExpandFlashLamp - N 0xbc01 PixelFormat - N 0xbc02 Transformation - N 0xbc03 Uncompressed - N 0xbc04 ImageType - N 0xbc80 ImageWidth - N 0xbc81 ImageHeight - N 0xbc82 WidthResolution - N 0xbc83 HeightResolution - N 0xbcc0 ImageOffset - N 0xbcc1 ImageByteCount - N 0xbcc2 AlphaOffset - N 0xbcc3 AlphaByteCount - N 0xbcc4 ImageDataDiscard - N 0xbcc5 AlphaDataDiscard - N 0xc427 OceScanjobDesc - N 0xc428 OceApplicationSelector - N 0xc429 OceIDNumber - N 0xc42a OceImageLogic - N 0xc44f Annotations - N 0xc4a5 PrintIM IFD0 PrintIM 0xc573 OriginalFileName - N 0xc580 USPTOOriginalContentType - N 0xc612 DNGVersion IFD0 int8u[4]! 0xc613 DNGBackwardVersion IFD0 int8u[4]! 0xc614 UniqueCameraModel IFD0 string 0xc615 LocalizedCameraModel IFD0 string 0xc616 CFAPlaneColor - N 0xc617 CFALayout - N 0xc618 LinearizationTable SubIFD int16u[n]! 0xc619 BlackLevelRepeatDim SubIFD int16u[2]! 0xc61a BlackLevel SubIFD rational64u[n]! 0xc61b BlackLevelDeltaH SubIFD rational64s[n]! 0xc61c BlackLevelDeltaV SubIFD rational64s[n]! 0xc61d WhiteLevel SubIFD int32u[n]! 0xc61e DefaultScale SubIFD rational64u[2]! 0xc61f DefaultCropOrigin SubIFD int32u[2]! 0xc620 DefaultCropSize SubIFD int32u[2]! 0xc621 ColorMatrix1 IFD0 rational64s[n]! 0xc622 ColorMatrix2 IFD0 rational64s[n]! 0xc623 CameraCalibration1 IFD0 rational64s[n]! 0xc624 CameraCalibration2 IFD0 rational64s[n]! 0xc625 ReductionMatrix1 IFD0 rational64s[n]! 0xc626 ReductionMatrix2 IFD0 rational64s[n]! 0xc627 AnalogBalance IFD0 rational64u[n]! 0xc628 AsShotNeutral IFD0 rational64u[n]! 0xc629 AsShotWhiteXY IFD0 rational64u[2]! 0xc62a BaselineExposure IFD0 rational64s! 0xc62b BaselineNoise IFD0 rational64u! 0xc62c BaselineSharpness IFD0 rational64u! 0xc62d BayerGreenSplit SubIFD int32u! 0xc62e LinearResponseLimit IFD0 rational64u! 0xc62f CameraSerialNumber IFD0 string 0xc630 DNGLensInfo IFD0 rational64u[4] 0xc631 ChromaBlurRadius SubIFD rational64u! 0xc632 AntiAliasStrength SubIFD rational64u! 0xc633 ShadowScale IFD0 rational64u! 0xc634 SR2Private - Sony SR2Private DNGAdobeData IFD0 DNG AdobeData MakerNotePentax - Pentax MakerNotePentax5 - Pentax DNGPrivateData IFD0 undef! 0xc635 MakerNoteSafety IFD0 int16u 0xc640 RawImageSegmentation - N 0xc65a CalibrationIlluminant1 IFD0 int16u! 0xc65b CalibrationIlluminant2 IFD0 int16u! 0xc65c BestQualityScale SubIFD rational64u! 0xc65d RawDataUniqueID IFD0 int8u[16]! 0xc660 AliasLayerMetadata - N 0xc68b OriginalRawFileName IFD0 string! 0xc68c OriginalRawFileData IFD0 DNG OriginalRaw 0xc68d ActiveArea SubIFD int32u[4]! 0xc68e MaskedAreas SubIFD int32u[4]! 0xc68f AsShotICCProfile IFD0 ICC_Profile 0xc690 AsShotPreProfileMatrix IFD0 rational64s[n]! 0xc691 CurrentICCProfile IFD0 ICC_Profile 0xc692 CurrentPreProfileMatrix IFD0 rational64s[n]! 0xc6bf ColorimetricReference IFD0 int16u! 0xc6c5 SRawType - N 0xc6d2 PanasonicTitle IFD0 undef 0xc6d3 PanasonicTitle2 IFD0 undef 0xc6f3 CameraCalibrationSig IFD0 string! 0xc6f4 ProfileCalibrationSig IFD0 string! 0xc6f5 ProfileIFD - EXIF 0xc6f6 AsShotProfileName IFD0 string! 0xc6f7 NoiseReductionApplied SubIFD rational64u! 0xc6f8 ProfileName IFD0 string! 0xc6f9 ProfileHueSatMapDims IFD0 int32u[3]! 0xc6fa ProfileHueSatMapData1 IFD0 float[n]! 0xc6fb ProfileHueSatMapData2 IFD0 float[n]! 0xc6fc ProfileToneCurve IFD0 float[n]! 0xc6fd ProfileEmbedPolicy IFD0 int32u! 0xc6fe ProfileCopyright IFD0 string! 0xc714 ForwardMatrix1 IFD0 rational64s[n]! 0xc715 ForwardMatrix2 IFD0 rational64s[n]! 0xc716 PreviewApplicationName IFD0 string! 0xc717 PreviewApplicationVersion IFD0 string! 0xc718 PreviewSettingsName IFD0 string! 0xc719 PreviewSettingsDigest IFD0 int8u! 0xc71a PreviewColorSpace IFD0 int32u! 0xc71b PreviewDateTime IFD0 string! 0xc71c RawImageDigest IFD0 int8u[16]! 0xc71d OriginalRawFileDigest IFD0 int8u[16]! 0xc71e SubTileBlockSize - N 0xc71f RowInterleaveFactor - N 0xc725 ProfileLookTableDims IFD0 int32u[3]! 0xc726 ProfileLookTableData IFD0 float[n]! 0xc740 OpcodeList1 - N 0xc741 OpcodeList2 - N 0xc74e OpcodeList3 - N 0xc761 NoiseProfile SubIFD double[n]! 0xc763 TimeCodes IFD0 int8u[n] 0xc764 FrameRate IFD0 rational64s 0xc772 TStop IFD0 rational64u[n] 0xc789 ReelName IFD0 string 0xc791 OriginalDefaultFinalSize IFD0 int32u[2]! 0xc792 OriginalBestQualitySize IFD0 int32u[2]! 0xc793 OriginalDefaultCropSize IFD0 rational64u[2]! 0xc7a1 CameraLabel IFD0 string 0xc7a3 ProfileHueSatMapEncoding IFD0 int32u! 0xc7a4 ProfileLookTableEncoding IFD0 int32u! 0xc7a5 BaselineExposureOffset IFD0 rational64s! 0xc7a6 DefaultBlackRender IFD0 int32u! 0xc7a7 NewRawImageDigest IFD0 int8u[16]! 0xc7a8 RawToPreviewGain IFD0 double! 0xc7b5 DefaultUserCrop SubIFD rational64u[4]! 0xea1c Padding ExifIFD undef 0xea1d OffsetSchema ExifIFD int32s 0xfde8 OwnerName ExifIFD string/ 0xfde9 SerialNumber ExifIFD string/ 0xfdea Lens ExifIFD string/ 0xfe00 KDC_IFD - Kodak KDC_IFD 0xfe4c RawFile ExifIFD string/ 0xfe4d Converter ExifIFD string/ 0xfe4e WhiteBalance ExifIFD string/ 0xfe51 Exposure ExifIFD string/ 0xfe52 Shadows ExifIFD string/ 0xfe53 Brightness ExifIFD string/ 0xfe54 Contrast ExifIFD string/ 0xfe55 Saturation ExifIFD string/ 0xfe56 Sharpness ExifIFD string/ 0xfe57 Smoothness ExifIFD string/ 0xfe58 MoireFilter ExifIFD string/ =head2 IPTC Tags The tags listed below are part of the International Press Telecommunications Council (IPTC) and the Newspaper Association of America (NAA) Information Interchange Model (IIM). This is an older meta information format, slowly being phased out in favor of XMP -- the newer IPTCCore specification uses XMP format. IPTC information may be found in JPG, TIFF, PNG, MIFF, PS, PDF, PSD, XCF and DNG images. IPTC information is separated into different records, each of which has its own set of tags. See L<http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf> for the official IPTC IIM specification. This specification dictates a length for ASCII (C<string> or C<digits>) and binary (C<undef>) values. These lengths are given in square brackets after the B<Writable> format name. For tags where a range of lengths is allowed, the minimum and maximum lengths are separated by a comma within the brackets. IPTC strings are not null terminated. When writing, ExifTool issues a minor warning and truncates the value if it is longer than allowed by the IPTC specification. Minor errors may be ignored with the IgnoreMinorErrors (-m) option, allowing longer values to be written, but beware that values like this may cause problems for some other IPTC readers. ExifTool will happily read IPTC values of any length. Separate IPTC date and time tags may be written with a combined date/time value and ExifTool automagically takes the appropriate part of the date/time string depending on whether a date or time tag is being written. This is very useful when copying date/time values to IPTC from other metadata formats. IPTC time values include a timezone offset. If written with a value which doesn't include a timezone then the current local timezone offset is used (unless written with a combined date/time, in which case the local timezone offset at the specified date/time is used, which may be different due to changes in daylight savings time). Note that it is not uncommon for IPTC to be found in non-standard locations in JPEG and TIFF-based images. When reading, the family 1 group name has a number added for non-standard IPTC ("IPTC2", "IPTC3", etc), but when writing only "IPTC" may be specified as the group. To keep the IPTC consistent, ExifTool updates tags in all existing IPTC locations, but will create a new IPTC group only in the standard location. Record Tag Name Writable ------ -------- -------- 1 IPTCEnvelope IPTC EnvelopeRecord 2 IPTCApplication IPTC ApplicationRecord 3 IPTCNewsPhoto IPTC NewsPhoto 7 IPTCPreObjectData IPTC PreObjectData 8 IPTCObjectData IPTC ObjectData 9 IPTCPostObjectData IPTC PostObjectData 240 IPTCFotoStation IPTC FotoStation =head3 IPTC EnvelopeRecord Tags Tag ID Tag Name Writable ------ -------- -------- 0 EnvelopeRecordVersion int16u: 5 Destination string[0,1024]+ 20 FileFormat int16u 22 FileVersion int16u 30 ServiceIdentifier string[0,10] 40 EnvelopeNumber digits[8] 50 ProductID string[0,32]+ 60 EnvelopePriority digits[1] 70 DateSent digits[8] 80 TimeSent string[11] 90 CodedCharacterSet string[0,32]! 100 UniqueObjectName string[14,80] 120 ARMIdentifier int16u 122 ARMVersion int16u =head3 IPTC ApplicationRecord Tags Tag ID Tag Name Writable ------ -------- -------- 0 ApplicationRecordVersion int16u: 3 ObjectTypeReference string[3,67] 4 ObjectAttributeReference string[4,68]+ 5 ObjectName string[0,64] 7 EditStatus string[0,64] 8 EditorialUpdate digits[2] 10 Urgency digits[1] 12 SubjectReference string[13,236]+ 15 Category string[0,3] 20 SupplementalCategories string[0,32]+ 22 FixtureIdentifier string[0,32] 25 Keywords string[0,64]+ 26 ContentLocationCode string[3]+ 27 ContentLocationName string[0,64]+ 30 ReleaseDate digits[8] 35 ReleaseTime string[11] 37 ExpirationDate digits[8] 38 ExpirationTime string[11] 40 SpecialInstructions string[0,256] 42 ActionAdvised digits[2] 45 ReferenceService string[0,10]+ 47 ReferenceDate digits[8]+ 50 ReferenceNumber digits[8]+ 55 DateCreated digits[8] 60 TimeCreated string[11] 62 DigitalCreationDate digits[8] 63 DigitalCreationTime string[11] 65 OriginatingProgram string[0,32] 70 ProgramVersion string[0,10] 75 ObjectCycle string[1] 80 By-line string[0,32]+ 85 By-lineTitle string[0,32]+ 90 City string[0,32] 92 Sub-location string[0,32] 95 Province-State string[0,32] 100 Country-PrimaryLocationCode string[3] 101 Country-PrimaryLocationName string[0,64] 103 OriginalTransmissionReference string[0,32] 105 Headline string[0,256] 110 Credit string[0,32] 115 Source string[0,32] 116 CopyrightNotice string[0,128] 118 Contact string[0,128]+ 120 Caption-Abstract string[0,2000] 121 LocalCaption string[0,256] 122 Writer-Editor string[0,32]+ 125 RasterizedCaption undef[7360] 130 ImageType string[2] 131 ImageOrientation string[1] 135 LanguageIdentifier string[2,3] 150 AudioType string[2] 151 AudioSamplingRate digits[6] 152 AudioSamplingResolution digits[2] 153 AudioDuration digits[6] 154 AudioOutcue string[0,64] 184 JobID string[0,64] 185 MasterDocumentID string[0,256] 186 ShortDocumentID string[0,64] 187 UniqueDocumentID string[0,128] 188 OwnerID string[0,128] 200 ObjectPreviewFileFormat int16u 201 ObjectPreviewFileVersion int16u 202 ObjectPreviewData undef[0,256000] 221 Prefs string[0,64] 225 ClassifyState string[0,64] 228 SimilarityIndex string[0,32] 230 DocumentNotes string[0,1024] 231 DocumentHistory string[0,256] 232 ExifCameraInfo string[0,4096] 255 CatalogSets string[0,256]+ =head3 IPTC NewsPhoto Tags Tag ID Tag Name Writable ------ -------- -------- 0 NewsPhotoVersion int16u: 10 IPTCPictureNumber string[16] 20 IPTCImageWidth int16u 30 IPTCImageHeight int16u 40 IPTCPixelWidth int16u 50 IPTCPixelHeight int16u 55 SupplementalType int8u 60 ColorRepresentation int16u 64 InterchangeColorSpace int8u 65 ColorSequence int8u 66 ICC_Profile N 70 ColorCalibrationMatrix N 80 LookupTable N 84 NumIndexEntries int16u 85 ColorPalette N 86 IPTCBitsPerSample int8u 90 SampleStructure int8u 100 ScanningDirection int8u 102 IPTCImageRotation int8u 110 DataCompressionMethod int32u 120 QuantizationMethod int8u 125 EndPoints N 130 ExcursionTolerance int8u 135 BitsPerComponent int8u 140 MaximumDensityRange int16u 145 GammaCompensatedValue int16u =head3 IPTC PreObjectData Tags Tag ID Tag Name Writable ------ -------- -------- 10 SizeMode N 20 MaxSubfileSize N 90 ObjectSizeAnnounced N 95 MaximumObjectSize N =head3 IPTC ObjectData Tags Tag ID Tag Name Writable ------ -------- -------- 10 SubFile N+ =head3 IPTC PostObjectData Tags Tag ID Tag Name Writable ------ -------- -------- 10 ConfirmedObjectSize N =head3 IPTC FotoStation Tags Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head2 XMP Tags XMP stands for "Extensible Metadata Platform", an XML/RDF-based metadata format which is being pushed by Adobe. Information in this format can be embedded in many different image file types including JPG, JP2, TIFF, GIF, EPS, PDF, PSD, IND, INX, PNG, DJVU, SVG, PGF, MIFF, XCF, CRW, DNG and a variety of proprietary TIFF-based RAW images, as well as MOV, AVI, ASF, WMV, FLV, SWF and MP4 videos, and WMA and audio formats supporting ID3v2 information. The XMP B<Tag ID>'s aren't listed because in most cases they are identical to the B<Tag Name> (aside from differences in case). Tags with different ID's are mentioned in the B<Notes> column of the HTML version of this document. All XMP information is stored as character strings. The B<Writable> column specifies the information format: C<string> is an unformatted string, C<integer> is a string of digits (possibly beginning with a '+' or '-'), C<real> is a floating point number, C<rational> is entered as a floating point number but stored as two C<integer> strings separated by a '/' character, C<date> is a date/time string entered in the format "YYYY:mm:dd HH:MM:SS[.ss][+/-HH:MM]", C<boolean> is either "True" or "False", C<struct> indicates a structured tag, and C<lang-alt> is a tag that supports alternate languages. When reading, C<struct> tags are extracted only if the Struct (-struct) option is used. Otherwise the corresponding "flattened" tags, indicated by an underline (C<_>) after the B<Writable> type, are extracted. When copying, by default both structured and flattened tags are available, but the flattened tags are considered "unsafe" so they they aren't copied unless specified explicitly. The Struct option may be disabled by setting Struct to 0 via the API or with --struct on the command line to copy only flattened tags, or enabled by setting Struct to 1 via the API or with -struct on the command line to copy only as structures. When writing, the Struct option has no effect, and both structured and flattened tags may be written. See L<http://owl.phy.queensu.ca/~phil/exiftool/struct.html> for more details. Individual languages for C<lang-alt> tags are accessed by suffixing the tag name with a '-', followed by an RFC 3066 language code (eg. "XMP:Title-fr", or "Rights-en-US"). (See L<http://www.ietf.org/rfc/rfc3066.txt> for the RFC 3066 specification.) A C<lang-alt> tag with no language code accesses the "x-default" language, but causes other languages for this tag to be deleted when writing. The "x-default" language code may be specified when writing to preserve other existing languages (eg. "XMP-dc:Description-x-default"). When reading, "x-default" is not specified. The XMP tags are organized according to schema B<Namespace> in the following tables. Note that a few of the longer namespace prefixes given below have been shortened for convenience (since the family 1 group names are derived from these by adding a leading "XMP-"). In cases where a tag name exists in more than one namespace, less common namespaces are avoided when writing. However, any namespace may be written by specifying a family 1 group name for the tag, eg) XMP-exif:Contrast or XMP-crs:Contrast. When deciding on which tags to add to an image, using standard schemas such as L<dc|/XMP dc Tags>, L<xmp|/XMP xmp Tags>, L<iptcCore|/XMP iptcCore Tags> and L<iptcExt|/XMP iptcExt Tags> is recommended if possible. For structures, the heading of the first column is B<Field Name>. Field names are very similar to tag names, except they are used to identify fields inside structures instead of stand-alone tags. See L<http://owl.phy.queensu.ca/~phil/exiftool/struct.html#Fields> for more details. ExifTool will extract XMP information even if it is not listed in these tables, but other tags are not writable unless added as user-defined tags in the ExifTool config file. For example, the C<pdfx> namespace doesn't have a predefined set of tag names because it is used to store application-defined PDF information, so although this information will be extracted, it is only writable if the corresponding user-defined tags have been created. The tables below list tags from the official XMP specification (with an underlined B<Namespace> in the HTML version of this documentation), as well as extensions from various other sources. See L<http://www.adobe.com/devnet/xmp/> for the official XMP specification. Namespace Writable --------- -------- aas XMP aas acdsee XMP acdsee album XMP Album apple-fi XMP apple_fi aux XMP aux cc XMP cc cell XMP cell creatorAtom XMP creatorAtom crs XMP crs dc XMP dc dex XMP dex DICOM XMP DICOM digiKam XMP digiKam dwc DarwinCore exif XMP exif exifEX XMP exifEX expressionmedia XMP ExpressionMedia extensis XMP extensis fpv XMP fpv getty XMP GettyImages GPano XMP GPano ics XMP ics iptcCore XMP iptcCore iptcExt XMP iptcExt lr XMP Lightroom mediapro XMP MediaPro microsoft Microsoft XMP MP Microsoft MP MP1 Microsoft MP1 mwg-coll MWG Collections mwg-kw MWG Keywords mwg-rs MWG Regions pdf XMP pdf pdfx XMP pdfx photomech PhotoMechanic XMP photoshop XMP photoshop PixelLive XMP PixelLive plus XMP plus pmi XMP pmi prism XMP prism prl XMP prl prm XMP prm pur XMP pur rdf XMP rdf swf XMP swf tiff XMP tiff x XMP x xmp XMP xmp xmpBJ XMP xmpBJ xmpDM XMP xmpDM xmpMM XMP xmpMM xmpNote XMP xmpNote xmpPLUS XMP xmpPLUS xmpRights XMP xmpRights xmpTPg XMP xmpTPg =head3 XMP aas Tags Apple Adjustment Settings used by iPhone/iPad. Tag Name Writable -------- -------- AffineA real AffineB real AffineC real AffineD real AffineX real AffineY real CropH integer/ CropW integer/ CropX integer/ CropY integer/ Curve0x real Curve0y real Curve1x real Curve1y real Curve2x real Curve2y real Curve3x real Curve3y real Curve4x real Curve4y real Highlights real/ Shadows real/ Vibrance real/ =head3 XMP acdsee Tags ACD Systems ACDSee namespace tags. (A note to software developers: Re-inventing your own private tags instead of using the equivalent tags in standard XMP namespaces defeats one of the most valuable features of metadata: interoperability. Your applications mumble to themselves instead of speaking out for the rest of the world to hear.) Tag Name Writable -------- -------- Author string/ Caption string/ Categories string/ Collections string/ DateTime date/ DPP lang-alt Keywords string/+ Notes string/ Rating real/ Rawrppused boolean RPP lang-alt Tagged boolean/ =head3 XMP Album Tags Adobe Album namespace tags. Tag Name Writable -------- -------- Notes string =head3 XMP apple_fi Tags Face information tags written by the Apple iPhone 5 inside the mwg-rs RegionExtensions. Tag Name Writable -------- -------- AngleInfoRoll integer AngleInfoYaw integer ConfidenceLevel integer FaceID integer TimeStamp integer =head3 XMP aux Tags Adobe-defined auxiliary EXIF tags. This namespace existed in the XMP specification until it was dropped in 2012, presumably due to the introduction of the EXIF 2.3 for XMP specification and the exifEX namespace at this time. For this reason, tags below with equivalents in the L<exifEX namespace|/XMP exifEX Tags> are avoided when writing. Tag Name Writable -------- -------- ApproximateFocusDistance rational DistortionCorrectionAlreadyApplied boolean Firmware string FlashCompensation rational ImageNumber string IsMergedHDR boolean IsMergedPanorama boolean LateralChromaticAberrationCorrectionAlreadyApplied boolean Lens string LensID string LensInfo string/ LensSerialNumber string/ OwnerName string/ SerialNumber string/ VignetteCorrectionAlreadyApplied boolean =head3 XMP cc Tags Creative Commons namespace tags. Note that the CC specification for XMP is non-existent, so ExifTool must make some assumptions about the format of the specific properties in XMP (see L<http://creativecommons.org/ns>). Tag Name Writable -------- -------- AttributionName string AttributionURL string DeprecatedOn date Jurisdiction string LegalCode string License string MorePermissions string Permits string+ Prohibits string+ Requires string+ UseGuidelines string =head3 XMP cell Tags Location tags written by some Sony Ericsson phones. Tag Name Writable -------- -------- CellTowerID string CellGlobalID string LocationAreaCode string MobileCountryCode string MobileNetworkCode string CellR string =head3 XMP creatorAtom Tags Adobe creatorAtom tags, written by After Effects. Tag Name Writable -------- -------- AeProjectLink AEProjectLink Struct AeProjectLinkCompositionID string_ AeProjectLinkFullPath string_ AeProjectLinkRenderOutputModuleIndex string_ AeProjectLinkRenderQueueItemID string_ AeProjectLinkRenderTimeStamp integer_ MacAtom MacAtom Struct MacAtomApplicationCode string_ MacAtomInvocationAppleEvent string_ MacAtomPosixProjectPath string_ WindowsAtom WindowsAtom Struct WindowsAtomExtension string_ WindowsAtomInvocationFlags string_ WindowsAtomUncProjectPath string_ =head3 XMP AEProjectLink Struct Field Name Writable ---------- -------- CompositionID string FullPath string RenderOutputModuleIndex string RenderQueueItemID string RenderTimeStamp integer =head3 XMP MacAtom Struct Field Name Writable ---------- -------- ApplicationCode string InvocationAppleEvent string PosixProjectPath string =head3 XMP WindowsAtom Struct Field Name Writable ---------- -------- Extension string InvocationFlags string UncProjectPath string =head3 XMP crs Tags Photoshop Camera Raw namespace tags. It is a shame that Adobe pollutes the metadata space with these incredibly bulky image editing parameters. Tag Name Writable -------- -------- AlreadyApplied boolean AutoBrightness boolean AutoContrast boolean AutoExposure boolean AutoLateralCA integer AutoShadows boolean AutoWhiteVersion integer Blacks2012 integer BlueHue integer BlueSaturation integer Brightness integer CameraProfile string CameraProfileDigest string ChromaticAberrationB integer ChromaticAberrationR integer CircularGradientBasedCorrections Correction Struct+ CircGradBasedCorrActive boolean_ CircGradBasedCorrAmount real_ CircGradBasedCorrMasks CorrectionMask Struct_+ CircGradBasedCorrMaskAlpha real_ CircGradBasedCorrMaskAngle real_ CircGradBasedCorrMaskBottom real_ CircGradBasedCorrMaskCenterValue real_ CircGradBasedCorrMaskCenterWeight real_ CircGradBasedCorrMaskDabs string_ CircGradBasedCorrMaskFeather real_ CircGradBasedCorrMaskFlipped boolean_ CircGradBasedCorrMaskFlow real_ CircGradBasedCorrMaskFullX real_ CircGradBasedCorrMaskFullY real_ CircGradBasedCorrMaskLeft real_ CircGradBasedCorrMaskValue real_ CircGradBasedCorrMaskMidpoint real_ CircGradBasedCorrMaskPerimeterValue real_ CircGradBasedCorrMaskRadius real_ CircGradBasedCorrMaskRight real_ CircGradBasedCorrMaskRoundness real_ CircGradBasedCorrMaskSizeX real_ CircGradBasedCorrMaskSizeY real_ CircGradBasedCorrMaskTop real_ CircGradBasedCorrMaskVersion integer_ CircGradBasedCorrMaskWhat string_ CircGradBasedCorrMaskX real_ CircGradBasedCorrMaskY real_ CircGradBasedCorrMaskZeroX real_ CircGradBasedCorrMaskZeroY real_ CircGradBasedCorrBrightness real_ CircGradBasedCorrClarity real_ CircGradBasedCorrClarity2012 real_ CircGradBasedCorrContrast real_ CircGradBasedCorrContrast2012 real_ CircGradBasedCorrDefringe real_ CircGradBasedCorrExposure real_ CircGradBasedCorrExposure2012 real_ CircGradBasedCorrHighlights2012 real_ CircGradBasedCorrLuminanceNoise real_ CircGradBasedCorrMoire real_ CircGradBasedCorrSaturation real_ CircGradBasedCorrShadows2012 real_ CircGradBasedCorrSharpness real_ CircGradBasedCorrTemperature real_ CircGradBasedCorrTint real_ CircGradBasedCorrHue real_ CircGradBasedCorrSaturation real_ CircGradBasedCorrWhat string_ Clarity integer Clarity2012 integer ColorNoiseReduction integer ColorNoiseReductionDetail integer ColorNoiseReductionSmoothness integer Contrast integer/ Contrast2012 integer Converter string ConvertToGrayscale boolean CropAngle real CropBottom real CropConstrainToWarp integer CropHeight real CropLeft real CropRight real CropTop real CropUnit integer CropUnits integer CropWidth real Defringe integer DefringeGreenAmount integer DefringeGreenHueHi integer DefringeGreenHueLo integer DefringePurpleAmount integer DefringePurpleHueHi integer DefringePurpleHueLo integer Exposure real Exposure2012 real FillLight integer GradientBasedCorrections Correction Struct+ GradientBasedCorrActive boolean_ GradientBasedCorrAmount real_ GradientBasedCorrMasks CorrectionMask Struct_+ GradientBasedCorrMaskAlpha real_ GradientBasedCorrMaskAngle real_ GradientBasedCorrMaskBottom real_ GradientBasedCorrMaskCenterValue real_ GradientBasedCorrMaskCenterWeight real_ GradientBasedCorrMaskDabs string_ GradientBasedCorrMaskFeather real_ GradientBasedCorrMaskFlipped boolean_ GradientBasedCorrMaskFlow real_ GradientBasedCorrMaskFullX real_ GradientBasedCorrMaskFullY real_ GradientBasedCorrMaskLeft real_ GradientBasedCorrMaskValue real_ GradientBasedCorrMaskMidpoint real_ GradientBasedCorrMaskPerimeterValue real_ GradientBasedCorrMaskRadius real_ GradientBasedCorrMaskRight real_ GradientBasedCorrMaskRoundness real_ GradientBasedCorrMaskSizeX real_ GradientBasedCorrMaskSizeY real_ GradientBasedCorrMaskTop real_ GradientBasedCorrMaskVersion integer_ GradientBasedCorrMaskWhat string_ GradientBasedCorrMaskX real_ GradientBasedCorrMaskY real_ GradientBasedCorrMaskZeroX real_ GradientBasedCorrMaskZeroY real_ GradientBasedCorrBrightness real_ GradientBasedCorrClarity real_ GradientBasedCorrClarity2012 real_ GradientBasedCorrContrast real_ GradientBasedCorrContrast2012 real_ GradientBasedCorrDefringe real_ GradientBasedCorrExposure real_ GradientBasedCorrExposure2012 real_ GradientBasedCorrHighlights2012 real_ GradientBasedCorrLuminanceNoise real_ GradientBasedCorrMoire real_ GradientBasedCorrSaturation real_ GradientBasedCorrShadows2012 real_ GradientBasedCorrSharpness real_ GradientBasedCorrTemperature real_ GradientBasedCorrTint real_ GradientBasedCorrHue real_ GradientBasedCorrSaturation real_ GradientBasedCorrWhat string_ GrainAmount integer GrainFrequency integer GrainSize integer GrayMixerAqua integer GrayMixerBlue integer GrayMixerGreen integer GrayMixerMagenta integer GrayMixerOrange integer GrayMixerPurple integer GrayMixerRed integer GrayMixerYellow integer GreenHue integer GreenSaturation integer HasCrop boolean HasSettings boolean HighlightRecovery integer Highlights2012 integer HueAdjustmentAqua integer HueAdjustmentBlue integer HueAdjustmentGreen integer HueAdjustmentMagenta integer HueAdjustmentOrange integer HueAdjustmentPurple integer HueAdjustmentRed integer HueAdjustmentYellow integer IncrementalTemperature integer IncrementalTint integer LensManualDistortionAmount integer LensProfileChromaticAberrationScale integer LensProfileDigest string LensProfileDistortionScale integer LensProfileEnable integer LensProfileFilename string LensProfileMatchKeyCameraModelName string LensProfileMatchKeyExifMake string LensProfileMatchKeyExifModel string LensProfileMatchKeyIsRaw boolean LensProfileMatchKeyLensID string LensProfileMatchKeyLensInfo string LensProfileMatchKeyLensName string LensProfileMatchKeySensorFormatFactor real LensProfileName string LensProfileSetup string LensProfileVignettingScale integer LuminanceAdjustmentAqua integer LuminanceAdjustmentBlue integer LuminanceAdjustmentGreen integer LuminanceAdjustmentMagenta integer LuminanceAdjustmentOrange integer LuminanceAdjustmentPurple integer LuminanceAdjustmentRed integer LuminanceAdjustmentYellow integer LuminanceNoiseReductionContrast integer LuminanceNoiseReductionDetail integer LuminanceSmoothing integer MoireFilter string PaintBasedCorrections Correction Struct+ PaintCorrectionActive boolean_ PaintCorrectionAmount real_ PaintBasedCorrectionMasks CorrectionMask Struct_+ PaintCorrectionMaskAlpha real_ PaintCorrectionMaskAngle real_ PaintCorrectionMaskBottom real_ PaintCorrectionMaskCenterValue real_ PaintCorrectionMaskCenterWeight real_ PaintCorrectionMaskDabs string_ PaintCorrectionMaskFeather real_ PaintCorrectionMaskFlipped boolean_ PaintCorrectionMaskFlow real_ PaintCorrectionMaskFullX real_ PaintCorrectionMaskFullY real_ PaintCorrectionMaskLeft real_ PaintCorrectionMaskValue real_ PaintCorrectionMaskMidpoint real_ PaintCorrectionMaskPerimeterValue real_ PaintCorrectionMaskRadius real_ PaintCorrectionMaskRight real_ PaintCorrectionMaskRoundness real_ PaintCorrectionMaskSizeX real_ PaintCorrectionMaskSizeY real_ PaintCorrectionMaskTop real_ PaintCorrectionMaskVersion integer_ PaintCorrectionMaskWhat string_ PaintCorrectionMaskX real_ PaintCorrectionMaskY real_ PaintCorrectionMaskZeroX real_ PaintCorrectionMaskZeroY real_ PaintCorrectionBrightness real_ PaintCorrectionClarity real_ PaintCorrectionClarity2012 real_ PaintCorrectionContrast real_ PaintCorrectionContrast2012 real_ PaintCorrectionDefringe real_ PaintCorrectionExposure real_ PaintCorrectionExposure2012 real_ PaintCorrectionHighlights2012 real_ PaintCorrectionLuminanceNoise real_ PaintCorrectionMoire real_ PaintCorrectionSaturation real_ PaintCorrectionShadows2012 real_ PaintCorrectionSharpness real_ PaintCorrectionTemperature real_ PaintCorrectionTint real_ PaintCorrectionHue real_ PaintCorrectionSaturation real_ PaintCorrectionWhat string_ ParametricDarks integer ParametricHighlights integer ParametricHighlightSplit integer ParametricLights integer ParametricMidtoneSplit integer ParametricShadows integer ParametricShadowSplit integer PerspectiveAspect integer PerspectiveHorizontal integer PerspectiveRotate real PerspectiveScale integer PerspectiveUpright integer PerspectiveVertical integer PostCropVignetteAmount integer PostCropVignetteFeather integer PostCropVignetteHighlightContrast integer PostCropVignetteMidpoint integer PostCropVignetteRoundness integer PostCropVignetteStyle integer ProcessVersion string RawFileName string RedEyeInfo string+ RedHue integer RedSaturation integer RetouchAreas RetouchArea Struct+ RetouchAreaFeather real_ RetouchAreaMasks CorrectionMask Struct_+ RetouchAreaMaskAlpha real_ RetouchAreaMaskAngle real_ RetouchAreaMaskBottom real_ RetouchAreaMaskCenterValue real_ RetouchAreaMaskCenterWeight real_ RetouchAreaMaskDabs string_ RetouchAreaMaskFeather real_ RetouchAreaMaskFlipped boolean_ RetouchAreaMaskFlow real_ RetouchAreaMaskFullX real_ RetouchAreaMaskFullY real_ RetouchAreaMaskLeft real_ RetouchAreaMaskValue real_ RetouchAreaMaskMidpoint real_ RetouchAreaMaskPerimeterValue real_ RetouchAreaMaskRadius real_ RetouchAreaMaskRight real_ RetouchAreaMaskRoundness real_ RetouchAreaMaskSizeX real_ RetouchAreaMaskSizeY real_ RetouchAreaMaskTop real_ RetouchAreaMaskVersion integer_ RetouchAreaMaskWhat string_ RetouchAreaMaskX real_ RetouchAreaMaskY real_ RetouchAreaMaskZeroX real_ RetouchAreaMaskZeroY real_ RetouchAreaMethod string_ RetouchAreaOffsetY real_ RetouchAreaOpacity real_ RetouchAreaSeed integer_ RetouchAreaSourceState string_ RetouchAreaSourceX real_ RetouchAreaSpotType string_ RetouchInfo string+ Saturation integer/ SaturationAdjustmentAqua integer SaturationAdjustmentBlue integer SaturationAdjustmentGreen integer SaturationAdjustmentMagenta integer SaturationAdjustmentOrange integer SaturationAdjustmentPurple integer SaturationAdjustmentRed integer SaturationAdjustmentYellow integer Shadows integer Shadows2012 integer ShadowTint integer SharpenDetail integer SharpenEdgeMasking integer SharpenRadius real Sharpness integer/ Smoothness integer SplitToningBalance integer SplitToningHighlightHue integer SplitToningHighlightSaturation integer SplitToningShadowHue integer SplitToningShadowSaturation integer ColorTemperature integer/ Tint integer ToneCurve string+ ToneCurveBlue string+ ToneCurveGreen string+ ToneCurveName string ToneCurveName2012 string ToneCurvePV2012 string+ ToneCurvePV2012Blue string+ ToneCurvePV2012Green string+ ToneCurvePV2012Red string+ ToneCurveRed string+ UprightCenterMode integer UprightCenterNormX real UprightCenterNormY real UprightDependentDigest string UprightFocalLength35mm real UprightFocalMode integer UprightPreview boolean UprightTransform_0 string UprightTransform_1 string UprightTransform_2 string UprightTransform_3 string UprightTransform_4 string UprightTransformCount integer UprightVersion integer Version string Vibrance integer VignetteAmount integer VignetteMidpoint integer What string WhiteBalance string/ Whites2012 integer =head3 XMP Correction Struct Field Name Writable ---------- -------- CorrectionActive boolean CorrectionAmount real CorrectionMasks CorrectionMask Struct+ LocalBrightness real LocalClarity real LocalClarity2012 real LocalContrast real LocalContrast2012 real LocalDefringe real LocalExposure real LocalExposure2012 real LocalHighlights2012 real LocalLuminanceNoise real LocalMoire real LocalSaturation real LocalShadows2012 real LocalSharpness real LocalTemperature real LocalTint real LocalToningHue real LocalToningSaturation real What string =head3 XMP CorrectionMask Struct Field Name Writable ---------- -------- Alpha real Angle real Bottom real CenterValue real CenterWeight real Dabs string+ Feather real Flipped boolean Flow real FullX real FullY real Left real MaskValue real Midpoint real PerimeterValue real Radius real Right real Roundness real SizeX real SizeY real Top real Version integer What string X real Y real ZeroX real ZeroY real =head3 XMP RetouchArea Struct Field Name Writable ---------- -------- Feather real Masks CorrectionMask Struct+ Method string OffsetY real Opacity real Seed integer SourceState string SourceX real SpotType string =head3 XMP dc Tags Dublin Core namespace tags. Tag Name Writable -------- -------- Contributor string+ Coverage string Creator string+ Date date+ Description lang-alt Format string Identifier string Language string+ Publisher string+ Relation string+ Rights lang-alt Source string/ Subject string+ Title lang-alt Type string+ =head3 XMP dex Tags Description Explorer namespace tags. These tags are not very common. The Source and Rating tags are avoided when writing due to name conflicts with other XMP tags. (see L<http://www.optimasc.com/products/fileid/>) Tag Name Writable -------- -------- CRC32 integer FFID string LicenseType string OS integer Rating string/ Revision string ShortDescription lang-alt Source string/ =head3 XMP DICOM Tags DICOM namespace tags. These XMP tags allow some DICOM information to be stored in files of other than DICOM format. See the L<DICOM Tags documentation|Image::ExifTool::TagNames/DICOM Tags> for a list of tags available in DICOM-format files. Tag Name Writable -------- -------- EquipmentInstitution string EquipmentManufacturer string PatientBirthDate date PatientID string PatientName string PatientSex string SeriesDateTime date SeriesDescription string SeriesModality string SeriesNumber string StudyDateTime date StudyDescription string StudyID string StudyPhysician string =head3 XMP digiKam Tags DigiKam namespace tags. Tag Name Writable -------- -------- CaptionsAuthorNames lang-alt CaptionsDateTimeStamps lang-alt ColorLabel string ImageHistory string/ LensCorrectionSettings string PickLabel string TagsList string+ =head3 XMP exif Tags EXIF namespace for EXIF tags. See L<http://www.cipa.jp/std/documents/e/DC-010-2012_E.pdf> for the specification. Tag Name Writable -------- -------- ApertureValue rational BrightnessValue rational CFAPattern CFAPattern Struct CFAPatternColumns integer_ CFAPatternRows integer_ CFAPatternValues integer_+ ColorSpace integer ComponentsConfiguration integer+ CompressedBitsPerPixel rational Contrast integer CustomRendered integer DateTimeDigitized date DateTimeOriginal date DeviceSettingDescription DeviceSettings Struct DeviceSettingDescriptionColumns integer_ DeviceSettingDescriptionRows integer_ DeviceSettingDescriptionSettings string_+ DigitalZoomRatio rational ExifVersion string ExposureCompensation rational ExposureIndex rational ExposureMode integer ExposureProgram integer ExposureTime rational FileSource integer Flash Flash Struct FlashEnergy rational FlashFired boolean_ FlashFunction boolean_ FlashMode integer_ FlashpixVersion string FlashRedEyeMode boolean_ FlashReturn integer_ FNumber rational FocalLength rational FocalLengthIn35mmFormat integer FocalPlaneResolutionUnit integer FocalPlaneXResolution rational FocalPlaneYResolution rational GainControl integer GPSAltitude rational GPSAltitudeRef integer GPSAreaInformation string GPSDestBearing rational GPSDestBearingRef string GPSDestDistance rational GPSDestDistanceRef string GPSDestLatitude string GPSDestLongitude string GPSDifferential integer GPSDOP rational GPSHPositioningError rational GPSImgDirection rational GPSImgDirectionRef string GPSLatitude string GPSLongitude string GPSMapDatum string GPSMeasureMode integer GPSProcessingMethod string GPSSatellites string GPSSpeed rational GPSSpeedRef string GPSStatus string GPSDateTime date GPSTrack rational GPSTrackRef string GPSVersionID string ImageUniqueID string ISO integer+ LightSource string MakerNote string MaxApertureValue rational MeteringMode integer NativeDigest string Opto-ElectricConvFactor OECF Struct OECFColumns integer_ OECFNames string_+ OECFRows integer_ OECFValues rational_+ ExifImageWidth integer ExifImageHeight integer RelatedSoundFile string Saturation integer SceneCaptureType integer SceneType integer SensingMethod integer Sharpness integer ShutterSpeedValue rational SpatialFrequencyResponse OECF Struct SpatialFrequencyResponseColumns integer_ SpatialFrequencyResponseNames string_+ SpatialFrequencyResponseRows integer_ SpatialFrequencyResponseValues rational_+ SpectralSensitivity string SubjectArea integer+ SubjectDistance rational SubjectDistanceRange integer SubjectLocation integer+ UserComment lang-alt WhiteBalance integer =head3 XMP CFAPattern Struct Field Name Writable ---------- -------- Columns integer Rows integer Values integer+ =head3 XMP DeviceSettings Struct Field Name Writable ---------- -------- Columns integer Rows integer Settings string+ =head3 XMP Flash Struct Field Name Writable ---------- -------- Fired boolean Function boolean Mode integer RedEyeMode boolean Return integer =head3 XMP OECF Struct Field Name Writable ---------- -------- Columns integer Names string+ Rows integer Values rational+ =head3 XMP exifEX Tags EXIF tags added by the EXIF 2.3 for XMP specification (see L<http://www.cipa.jp/std/documents/e/DC-010-2012_E.pdf>). Tag Name Writable -------- -------- SerialNumber string OwnerName string Gamma rational InteropIndex string ISOSpeed integer ISOSpeedLatitudeyyy integer ISOSpeedLatitudezzz integer LensMake string LensModel string LensSerialNumber string LensInfo rational+ PhotographicSensitivity integer RecommendedExposureIndex integer SensitivityType integer StandardOutputSensitivity integer =head3 XMP ExpressionMedia Tags Microsoft Expression Media namespace tags. These tags are avoided when writing due to name conflicts with tags in other schemas. Tag Name Writable -------- -------- CatalogSets string/+ Event string/ People string/+ Status string/ =head3 XMP extensis Tags Tags used by Extensis Portfolio. Tag Name Writable -------- -------- Approved boolean ApprovedBy string ClientName string JobName string JobStatus string RoutedTo string RoutingNotes string WorkToDo string =head3 XMP fpv Tags Fast Picture Viewer tags (see L<http://www.fastpictureviewer.com/help/#rtfcomments>). Tag Name Writable -------- -------- RichTextComment string =head3 XMP GettyImages Tags The actual Getty Images namespace prefix is "GettyImagesGIFT", which is the prefix recorded in the file, but ExifTool shortens this for the "XMP-getty" family 1 group name. Tag Name Writable -------- -------- OriginalFileName string ParentMEID string Personality string =head3 XMP GPano Tags Panorama tags written by Google Photosphere. See L<https://developers.google.com/panorama/metadata/> for the specification. Tag Name Writable -------- -------- CaptureSoftware string CroppedAreaImageHeightPixels integer CroppedAreaImageWidthPixels integer CroppedAreaLeftPixels integer CroppedAreaTopPixels integer ExposureLockUsed boolean FirstPhotoDate date FullPanoHeightPixels integer FullPanoWidthPixels integer InitialHorizontalFOVDegrees real InitialViewHeadingDegrees integer InitialViewPitchDegrees integer InitialViewRollDegrees integer LargestValidInteriorRectHeight integer LargestValidInteriorRectLeft integer LargestValidInteriorRectTop integer LargestValidInteriorRectWidth integer LastPhotoDate date PoseHeadingDegrees real PosePitchDegrees real PoseRollDegrees real ProjectionType string SourcePhotosCount integer StitchingSoftware string UsePanoramaViewer boolean =head3 XMP ics Tags Tags used by IDimager. Nested TagStructure structures are unrolled to an arbitrary depth of 6 to avoid infinite recursion. Tag Name Writable -------- -------- ImageRef string SubVersions SubVersion Struct+ SubVersionFileName string_+ SubVersionReference string_+ TagStructure TagStructure Struct+ LabelName1 string_+ ParentReference1 string_+ Reference1 string_+ SubLables1 TagStructure Struct_+ LabelName2 string_+ ParentReference2 string_+ Reference2 string_+ SubLables2 TagStructure Struct_+ LabelName3 string_+ ParentReference3 string_+ Reference3 string_+ SubLables3 TagStructure Struct_+ LabelName4 string_+ ParentReference4 string_+ Reference4 string_+ SubLabels4 TagStructure Struct_+ LabelName5 string_+ ParentReference5 string_+ Reference5 string_+ SubLabels5 TagStructure Struct_+ LabelName6 string_+ ParentReference6 string_+ Reference6 string_+ =head3 XMP SubVersion Struct Field Name Writable ---------- -------- FileName string VersRef string =head3 XMP TagStructure Struct Field Name Writable ---------- -------- LabelName string ParentReference string Reference string SubLabels TagStructure Struct+ =head3 XMP iptcCore Tags IPTC Core namespace tags. The actual IPTC Core namespace prefix is "Iptc4xmpCore", which is the prefix recorded in the file, but ExifTool shortens this for the "XMP-iptcCore" family 1 group name. (see L<http://www.iptc.org/IPTC4XMP/>) Tag Name Writable -------- -------- CountryCode string CreatorContactInfo ContactInfo Struct CreatorCity string_ CreatorCountry string_ CreatorAddress string_ CreatorPostalCode string_ CreatorRegion string_ CreatorWorkEmail string_ CreatorWorkTelephone string_ CreatorWorkURL string_ IntellectualGenre string Location string Scene string+ SubjectCode string+ =head3 XMP ContactInfo Struct Field Name Writable ---------- -------- CiAdrCity string CiAdrCtry string CiAdrExtadr string CiAdrPcode string CiAdrRegion string CiEmailWork string CiTelWork string CiUrlWork string =head3 XMP iptcExt Tags IPTC Extension namespace tags. The actual namespace prefix is "Iptc4xmpExt", but ExifTool shortens this for the "XMP-iptcExt" family 1 group name. (see L<http://www.iptc.org/IPTC4XMP/>) Tag Name Writable -------- -------- AboutCvTerm CVTermDetails Struct+ AboutCvTermCvId string_+ AboutCvTermId string_+ AboutCvTermName lang-alt_+ AboutCvTermRefinedAbout string_+ AdditionalModelInformation string ArtworkOrObject ArtworkOrObjectDetails Struct+ ArtworkCircaDateCreated string_+ ArtworkSContentDescription lang-alt_+ ArtworkContributionDescription lang-alt_+ ArtworkCopyrightNotice string_+ ArtworkCreator string_+ ArtworkCreatorID string_+ ArtworkCopyrightOwnerID string_+ ArtworkCopyrightOwnerName string_+ ArtworkLicensorID string_+ ArtworkLicensorName string_+ ArtworkDateCreated date_+ ArtworkPhysicalDescription lang-alt_+ ArtworkSource string_+ ArtworkSourceInventoryNo string_+ ArtworkSourceInvURL string_+ ArtworkStylePeriod string_+ ArtworkTitle lang-alt_+ ControlledVocabularyTerm string+ DigitalImageGUID string DigitalSourceFileType string DigitalSourceType string EmbdEncRightsExpr EEREDetails Struct+ EmbeddedEncodedRightsExpr string_+ EmbeddedEncodedRightsExprType string_+ EmbeddedEncodedRightsExprLangID string_+ Event lang-alt IPTCLastEdited date LinkedEncRightsExpr LEREDetails Struct+ LinkedEncodedRightsExpr string_+ LinkedEncodedRightsExprType string_+ LinkedEncodedRightsExprLangID string_+ LocationCreated LocationDetails Struct+ LocationCreatedCity string_+ LocationCreatedCountryCode string_+ LocationCreatedCountryName string_+ LocationCreatedLocationId string_+ LocationCreatedProvinceState string_+ LocationCreatedSublocation string_+ LocationCreatedWorldRegion string_+ LocationShown LocationDetails Struct+ LocationShownCity string_+ LocationShownCountryCode string_+ LocationShownCountryName string_+ LocationShownLocationId string_+ LocationShownProvinceState string_+ LocationShownSublocation string_+ LocationShownWorldRegion string_+ MaxAvailHeight integer MaxAvailWidth integer ModelAge integer+ OrganisationInImageCode string+ OrganisationInImageName string+ PersonInImage string+ PersonInImageWDetails PersonDetails Struct+ PersonInImageCharacteristic CVTermDetails Struct_+ PersonInImageCvTermCvId string_+ PersonInImageCvTermId string_+ PersonInImageCvTermName lang-alt_+ PersonInImageCvTermRefinedAbout string_+ PersonInImageDescription lang-alt_+ PersonInImageId string_+ PersonInImageName lang-alt_+ ProductInImage ProductDetails Struct+ ProductInImageDescription lang-alt_+ ProductInImageGTIN string_+ ProductInImageName lang-alt_+ RegistryID RegistryEntryDetails Struct+ RegistryItemID string_+ RegistryOrganisationID string_+ =head3 XMP CVTermDetails Struct Field Name Writable ---------- -------- CvId string CvTermId string CvTermName lang-alt CvTermRefinedAbout string =head3 XMP ArtworkOrObjectDetails Struct Field Name Writable ---------- -------- AOCircaDateCreated string AOContentDescription lang-alt AOContributionDescription lang-alt AOCopyrightNotice string AOCreator string+ AOCreatorId string+ AOCurrentCopyrightOwnerId string AOCurrentCopyrightOwnerName string AOCurrentLicensorId string AOCurrentLicensorName string AODateCreated date AOPhysicalDescription lang-alt AOSource string AOSourceInvNo string AOSourceInvURL string AOStylePeriod string+ AOTitle lang-alt =head3 XMP EEREDetails Struct Field Name Writable ---------- -------- EncRightsExpr string RightsExprEncType string RightsExprLangId string =head3 XMP LEREDetails Struct Field Name Writable ---------- -------- LinkedRightsExpr string RightsExprEncType string RightsExprLangId string =head3 XMP LocationDetails Struct Field Name Writable ---------- -------- City string CountryCode string CountryName string LocationId string+ ProvinceState string Sublocation string WorldRegion string =head3 XMP PersonDetails Struct Field Name Writable ---------- -------- PersonCharacteristic CVTermDetails Struct+ PersonDescription lang-alt PersonId string+ PersonName lang-alt =head3 XMP ProductDetails Struct Field Name Writable ---------- -------- ProductDescription lang-alt ProductGTIN string ProductName lang-alt =head3 XMP RegistryEntryDetails Struct Field Name Writable ---------- -------- RegItemId string RegOrgId string =head3 XMP Lightroom Tags Adobe Lightroom "lr" namespace tags. Tag Name Writable -------- -------- HierarchicalSubject string+ PrivateRTKInfo string =head3 XMP MediaPro Tags iView MediaPro namespace tags. Tag Name Writable -------- -------- CatalogSets string+ Event string/ Location string/ People string+ Status string UserFields string+ =head3 XMP pdf Tags Adobe PDF namespace tags. The official XMP specification defines only Keywords, PDFVersion, Producer and Trapped. The other tags are included because they have been observed in PDF files, but some are avoided when writing due to name conflicts with other XMP namespaces. Tag Name Writable -------- -------- Author string Copyright string/ CreationDate date Creator string/ Keywords string Marked boolean/ ModDate date PDFVersion string Producer string Subject string/ Title string/ Trapped string =head3 XMP pdfx Tags PDF extension tags. This namespace is used to store application-defined PDF information, so there are no pre-defined tags. User-defined tags must be created to enable writing of XMP-pdfx information. Tag Name Writable -------- -------- [no tags known] =head3 XMP photoshop Tags Adobe Photoshop namespace tags. Tag Name Writable -------- -------- AuthorsPosition string CaptionWriter string Category string City string ColorMode integer Country string Credit string DateCreated date DocumentAncestors string+ EmbeddedXMPDigest string Headline string History string ICCProfileName string Instructions string LegacyIPTCDigest string SidecarForExtension string Source string State string SupplementalCategories string+ TextLayers Layer Struct+ TextLayerName string_+ TextLayerText string_+ TransmissionReference string Urgency integer =head3 XMP Layer Struct Field Name Writable ---------- -------- LayerName string LayerText string =head3 XMP PixelLive Tags PixelLive namespace tags. These tags are not writable becase they are very uncommon and I haven't been able to locate a reference which gives the namespace URI. Tag Name Writable -------- -------- Author N Comments N Copyright N Date N Genre N Title N =head3 XMP plus Tags PLUS License Data Format 1.2.1 namespace tags. Note that all controlled-vocabulary tags in this table (ie. tags with a fixed set of values) have raw values which begin with "http://ns.useplus.org/ldf/vocab/", but to reduce clutter this prefix has been removed from the values shown below. (see L<http://ns.useplus.org/>) Tag Name Writable -------- -------- AdultContentWarning string CopyrightOwner CopyrightOwner Struct+ CopyrightOwnerID string_+ CopyrightOwnerName string_+ CopyrightOwnerImageID string CopyrightRegistrationNumber string CopyrightStatus string CreditLineRequired string Custom1 lang-alt+ Custom10 lang-alt+ Custom2 lang-alt+ Custom3 lang-alt+ Custom4 lang-alt+ Custom5 lang-alt+ Custom6 lang-alt+ Custom7 lang-alt+ Custom8 lang-alt+ Custom9 lang-alt+ EndUser EndUser Struct+ EndUserID string_+ EndUserName string_+ FileNameAsDelivered string FirstPublicationDate date ImageAlterationConstraints string+ ImageCreator ImageCreator Struct+ ImageCreatorID string_+ ImageCreatorName string_+ ImageCreatorImageID string ImageDuplicationConstraints string ImageFileConstraints string+ ImageFileFormatAsDelivered string ImageFileSizeAsDelivered string ImageSupplier ImageSupplier Struct+ ImageSupplierImageID string ImageSupplierID string_+ ImageSupplierName string_+ ImageType string Licensee Licensee Struct+ LicenseeImageID string LicenseeImageNotes lang-alt LicenseeID string_+ LicenseeName string_+ LicenseEndDate date LicenseeProjectReference string+ LicenseeTransactionID string+ LicenseID string LicenseStartDate date LicenseTransactionDate date Licensor Licensor Struct+ LicensorImageID string LicensorCity string_+ LicensorCountry string_+ LicensorEmail string_+ LicensorExtendedAddress string_+ LicensorID string_+ LicensorName string_+ LicensorPostalCode string_+ LicensorRegion string_+ LicensorStreetAddress string_+ LicensorTelephone1 string_+ LicensorTelephone2 string_+ LicensorTelephoneType1 string_+ LicensorTelephoneType2 string_+ LicensorURL string_+ LicensorNotes lang-alt LicensorTransactionID string+ MediaConstraints lang-alt MediaSummaryCode string MinorModelAgeDisclosure string ModelReleaseID string+ ModelReleaseStatus string OtherConditions lang-alt OtherConstraints lang-alt OtherImageInfo lang-alt OtherLicenseDocuments string+ OtherLicenseInfo lang-alt OtherLicenseRequirements lang-alt ProductOrServiceConstraints lang-alt PropertyReleaseID string+ PropertyReleaseStatus string RegionConstraints lang-alt Reuse string TermsAndConditionsText lang-alt TermsAndConditionsURL string PLUSVersion string =head3 XMP CopyrightOwner Struct Field Name Writable ---------- -------- CopyrightOwnerID string CopyrightOwnerName string =head3 XMP EndUser Struct Field Name Writable ---------- -------- EndUserID string EndUserName string =head3 XMP ImageCreator Struct Field Name Writable ---------- -------- ImageCreatorID string ImageCreatorName string =head3 XMP ImageSupplier Struct Field Name Writable ---------- -------- ImageSupplierID string ImageSupplierName string =head3 XMP Licensee Struct Field Name Writable ---------- -------- LicenseeID string LicenseeName string =head3 XMP Licensor Struct Field Name Writable ---------- -------- LicensorCity string LicensorCountry string LicensorEmail string LicensorExtendedAddress string LicensorID string LicensorName string LicensorPostalCode string LicensorRegion string LicensorStreetAddress string LicensorTelephone1 string LicensorTelephone2 string LicensorTelephoneType1 string LicensorTelephoneType2 string LicensorURL string =head3 XMP pmi Tags PRISM Metadata for Images 3.0 namespace tags. (see L<http://www.prismstandard.org/>) Tag Name Writable -------- -------- Color string/ ContactInfo string/ DisplayName string/ DistributorProductID string/ EventAlias string/ EventEnd string/ EventStart string/ EventSubtype string/ EventType string/ Field string/ Framing string/ Location string/ Make string/ Manufacturer string/ Model string/ ModelYear string/ ObjectDescription string/ ObjectSubtype string/ ObjectType string/ Orientation string/ PositionDescriptor string/ ProductID string/ ProductIDType string/ Season string/ SequenceName string/ SequenceNumber string/ SequenceTotalNumber string/ Setting string/ ShootID string/ SlideshowName string/ SlideshowNumber integer/ SlideshowTotalNumber integer/ Viewpoint string/ VisualTechnique string/ =head3 XMP prism Tags Publishing Requirements for Industry Standard Metadata 3.0 namespace tags. (see L<http://www.prismstandard.org/>) Tag Name Writable -------- -------- AcedemicField string/ AggregateIssueNumber integer/ AggregationType string/+ AlternateTitle prismAlternateTitle Struct+ AlternateTitleA-lang string_+ AlternateTitleA-platform string_+ AlternateTitleText string_+ BlogTitle string/ BlogURL string/ BookEdition string/ ByteCount integer/ Channel prismChannel Struct+ ChannelA-lang string_+ ChannelChannel string_+ ChannelSubchannel1 string_+ ChannelSubchannel2 string_+ ChannelSubchannel3 string_+ ChannelSubchannel4 string_+ ComplianceProfile string/ ContentType string/ CopyrightYear string/ CorporateEntity string/+ CoverDate date/ CoverDisplayDate string/ CreationDate date/ DateRecieved date/ Device string/ Distributor string/ DOI string/ Edition string/ EIssn string/ EndingPage string/ Event string/+ Genre string/+ HasAlternative string/+ HasCorrection prismHasCorrection Struct HasCorrectionA-lang string_ HasCorrectionA-platform string_ HasCorrectionText string_ HasTranslation string/+ Industry string/+ IsAlternativeOf string/+ ISBN string/+ IsCorrectionOf string/+ ISSN string/ IssueIdentifier string/ IssueName string/ IssueTeaser string/ IssueType string/ IsTranslationOf string/ Keyword string/+ KillDate prismKillDate Struct KillDateA-platform string_ KillDateDate date_ Link string/+ Location string/+ ModificationDate date/ NationalCatalogNumber string/ Number string/ Object string/+ OffSaleDate prismOffSaleDate Struct+ OffSaleDateA-platform string_+ OffSaleDateDate date_+ OnSaleDate prismOnSaleDate Struct+ OnSaleDateA-platform string_+ OnSaleDateDate date_+ OnSaleDay prismOnSaleDay Struct+ OnSaleDayA-platform string_+ OnSaleDayDay string_+ Organization string/+ OriginPlatform string/+ PageCount integer/ PageProgressionDirection string/ PageRange string/+ Person string/ Platform string/ ProductCode string/ Profession string/ PublicationDate prismPublicationDate Struct+ PublicationDateA-platform string_+ PublicationDateDate date_+ PublicationDisplayDate prismPublicationDate Struct+ PublicationDisplayDateA-platform string_+ PublicationDisplayDateDate date_+ PublicationName string/ PublishingFrequency string/ Rating string/ SamplePageRange string/ Section string/ SellingAgency string/ SeriesNumber integer/ SeriesTitle string/ Sport string/ StartingPage string/ Subsection1 string/ Subsection2 string/ Subsection3 string/ Subsection4 string/ Subtitle string/ SupplementDisplayID string/ SupplementStartingPage string/ SupplementTitle string/ Teaser string/+ Ticker string/+ TimePeriod string/ URL prismUrl Struct+ URLA-platform string_+ URLUrl string_+ UspsNumber string/ VersionIdentifier string/ Volume string/ WordCount integer/ =head3 XMP prismAlternateTitle Struct Field Name Writable ---------- -------- A-lang string A-platform string Text string =head3 XMP prismChannel Struct Field Name Writable ---------- -------- A-lang string Channel string Subchannel1 string Subchannel2 string Subchannel3 string Subchannel4 string =head3 XMP prismHasCorrection Struct Field Name Writable ---------- -------- A-lang string A-platform string Text string =head3 XMP prismKillDate Struct Field Name Writable ---------- -------- A-platform string Date date =head3 XMP prismOffSaleDate Struct Field Name Writable ---------- -------- A-platform string Date date =head3 XMP prismOnSaleDate Struct Field Name Writable ---------- -------- A-platform string Date date =head3 XMP prismOnSaleDay Struct Field Name Writable ---------- -------- A-platform string Day string =head3 XMP prismPublicationDate Struct Field Name Writable ---------- -------- A-platform string Date date =head3 XMP prismUrl Struct Field Name Writable ---------- -------- A-platform string Url string =head3 XMP prl Tags PRISM Rights Language 2.1 namespace tags. These tags have been deprecated since the release of the PRISM Usage Rights 3.0. (see L<http://www.prismstandard.org/>) Tag Name Writable -------- -------- Geography string/+ Industry string/+ Usage string/+ =head3 XMP prm Tags PRISM Recipe Metadata 3.0 namespace tags. (see L<http://www.prismstandard.org/>) Tag Name Writable -------- -------- CookingEquipment string/ CookingMethod string/ Course string/ Cuisine string/ DietaryNeeds string/ DishType string/ Duration string/ IngredientExclusion string/ MainIngredient string/ Meal string/ RecipeEndingPage string/ RecipePageRange string/ RecipeSource string/ RecipeStartingPage string/ RecipeTitle string/ ServingSize string/ SkillLevel string/ SpecialOccasion string/ Yield string/ =head3 XMP pur Tags PRISM Usage Rights 3.0 namespace tags. (see L<http://www.prismstandard.org/>) Tag Name Writable -------- -------- AdultContentWarning string/+ Agreement string/+ Copyright lang-alt/ CreditLine string/+ EmbargoDate date/+ ExclusivityEndDate date/+ ExpirationDate date/+ ImageSizeRestriction string/ OptionEndDate date/+ Permissions string/+ Restrictions string/+ ReuseProhibited boolean/ RightsAgent string/ RightsOwner string/ =head3 XMP rdf Tags Most RDF attributes are handled internally, but the "about" attribute is treated specially to allow it to be set to a specific value if required. Tag Name Writable -------- -------- About string! =head3 XMP swf Tags Adobe SWF namespace tags. Tag Name Writable -------- -------- BackgroundAlpha integer ForwardLock boolean MaxStorage integer Type string/ =head3 XMP tiff Tags EXIF namespace for TIFF tags. See L<http://www.cipa.jp/std/documents/e/DC-010-2012_E.pdf> for the specification. Tag Name Writable -------- -------- Artist string BitsPerSample integer+ Compression integer Copyright lang-alt DateTime date ImageDescription lang-alt ImageHeight integer ImageWidth integer Make string Model string NativeDigest string Orientation integer PhotometricInterpretation integer PlanarConfiguration integer PrimaryChromaticities rational+ ReferenceBlackWhite rational+ ResolutionUnit integer SamplesPerPixel integer Software string TransferFunction integer+ WhitePoint rational+ XResolution rational YCbCrCoefficients rational+ YCbCrPositioning integer YCbCrSubSampling integer+ YResolution rational =head3 XMP x Tags The "x" namespace is used for the "xmpmeta" wrapper, and may contain an "xmptk" attribute that is extracted as the XMPToolkit tag. When writing, the XMPToolkit tag is generated automatically by ExifTool unless specifically set to another value. Tag Name Writable -------- -------- XMPToolkit string! =head3 XMP xmp Tags XMP namespace tags. If the older "xap", "xapBJ", "xapMM" or "xapRights" namespace prefixes are found, they are translated to the newer "xmp", "xmpBJ", "xmpMM" and "xmpRights" prefixes for use in family 1 group names. Tag Name Writable -------- -------- Advisory string+ Author string/ BaseURL string CreateDate date CreatorTool string Description lang-alt/ Format string/ Identifier string/+ Keywords string/ Label string MetadataDate date ModifyDate date Nickname string PageInfo PageInfo Struct+ PageImageFormat string_+ PageImageHeight integer_+ PageImage string_+ PageImagePageNumber integer_+ PageImageWidth integer_+ Rating real Thumbnails Thumbnail Struct+ ThumbnailFormat string_+ ThumbnailHeight integer_+ ThumbnailImage string/_+ ThumbnailWidth integer_+ Title lang-alt/ =head3 XMP PageInfo Struct Field Name Writable ---------- -------- PageNumber integer Format string Height integer Image string Width integer =head3 XMP Thumbnail Struct Field Name Writable ---------- -------- Format string Height integer Image string Width integer =head3 XMP xmpBJ Tags XMP Basic Job Ticket namespace tags. Tag Name Writable -------- -------- JobRef JobRef Struct+ JobRefId string_+ JobRefName string_+ JobRefUrl string_+ =head3 XMP JobRef Struct Field Name Writable ---------- -------- Id string Name string Url string =head3 XMP xmpDM Tags XMP Dynamic Media namespace tags. Tag Name Writable -------- -------- AbsPeakAudioFilePath string Album string AltTapeName string AltTimecode Timecode Struct AltTimecodeTimeFormat string_ AltTimecodeTimeValue string_ AltTimecodeValue integer_ Artist string/ AudioChannelType string AudioCompressor string AudioModDate date AudioSampleRate integer AudioSampleType string BeatSpliceParams BeatSpliceStretch Struct BeatSpliceParamsRiseInDecibel real_ BeatSpliceParamsRiseInTimeDuration Time Struct_ BeatSpliceParamsRiseInTimeDurationScale rational_ BeatSpliceParamsRiseInTimeDurationValue integer_ BeatSpliceParamsUseFileBeatsMarker boolean_ CameraAngle string CameraLabel string CameraModel string CameraMove string Client string DMComment string Composer string ContributedMedia Media Struct+ ContributedMediaDuration Time Struct_+ ContributedMediaDurationScale rational_+ ContributedMediaDurationValue integer_+ ContributedMediaManaged boolean_+ ContributedMediaPath string_+ ContributedMediaStartTime Time Struct_+ ContributedMediaStartTimeScale rational_+ ContributedMediaStartTimeValue integer_+ ContributedMediaTrack string_+ ContributedMediaWebStatement string_+ Copyright string/ Director string DirectorPhotography string DiscNumber string Duration Time Struct DurationScale rational_ DurationValue integer_ Engineer string FileDataRate rational Genre string Good boolean Instrument string IntroTime Time Struct IntroTimeScale rational_ IntroTimeValue integer_ Key string LogComment string Loop boolean Lyrics string Markers Marker Struct+ MarkersComment string_+ MarkersCuePointParams CuePointParam Struct_+ MarkersCuePointParamsKey string_+ MarkersCuePointParamsValue string_+ MarkersCuePointType string_+ MarkersDuration string_+ MarkersLocation string_+ MarkersName string_+ MarkersProbability real_+ MarkersSpeaker string_+ MarkersStartTime string_+ MarkersTarget string_+ MarkersType string_+ MetadataModDate date NumberOfBeats real OutCue Time Struct OutCueScale rational_ OutCueValue integer_ PartOfCompilation boolean ProjectName string ProjectRef ProjectLink Struct ProjectRefPath string_ ProjectRefType string_ PullDown string RelativePeakAudioFilePath string RelativeTimestamp Time Struct RelativeTimestampScale rational_ RelativeTimestampValue integer_ ReleaseDate date ResampleParams ResampleStretch Struct ResampleParamsQuality string_ ScaleType string Scene string/ ShotDate date ShotDay string ShotLocation string ShotName string ShotNumber string ShotSize string SpeakerPlacement string StartTimecode Timecode Struct StartTimecodeTimeFormat string_ StartTimecodeTimeValue string_ StartTimecodeValue integer_ StartTimeSampleSize integer StartTimeScale string StretchMode string TakeNumber integer TapeName string Tempo real TimeScaleParams TimeScaleStretch Struct TimeScaleParamsFrameOverlappingPercentage real_ TimeScaleParamsFrameSize real_ TimeScaleParamsQuality string_ TimeSignature string TrackNumber integer Tracks Track Struct+ TracksFrameRate string_+ TracksMarkers Marker Struct_+ TracksMarkersComment string_+ TracksMarkersCuePointParams CuePointParam Struct_+ TracksMarkersCuePointParamsKey string_+ TracksMarkersCuePointParamsValue string_+ TracksMarkersCuePointType string_+ TracksMarkersDuration string_+ TracksMarkersLocation string_+ TracksMarkersName string_+ TracksMarkersProbability real_+ TracksMarkersSpeaker string_+ TracksMarkersStartTime string_+ TracksMarkersTarget string_+ TracksMarkersType string_+ TracksTrackName string_+ TracksTrackType string_+ VideoAlphaMode string VideoAlphaPremultipleColor Colorant Struct VideoAlphaPremultipleColorA integer_ VideoAlphaPremultipleColorB integer_ VideoAlphaPremultipleColorBlack real_ VideoAlphaPremultipleColorBlue integer_ VideoAlphaPremultipleColorCyan real_ VideoAlphaPremultipleColorGreen integer_ VideoAlphaPremultipleColorL real_ VideoAlphaPremultipleColorMagenta real_ VideoAlphaPremultipleColorMode string_ VideoAlphaPremultipleColorRed integer_ VideoAlphaPremultipleColorSwatchName string_ VideoAlphaPremultipleColorTint integer_ VideoAlphaPremultipleColorType string_ VideoAlphaPremultipleColorYellow real_ VideoAlphaUnityIsTransparent boolean VideoColorSpace string VideoCompressor string VideoFieldOrder string VideoFrameRate real VideoFrameSize Dimensions Struct VideoFrameSizeH real_ VideoFrameSizeUnit string_ VideoFrameSizeW real_ VideoModDate date VideoPixelAspectRatio rational VideoPixelDepth string =head3 XMP Timecode Struct Field Name Writable ---------- -------- TimeFormat string TimeValue string Value integer =head3 XMP BeatSpliceStretch Struct Field Name Writable ---------- -------- RiseInDecibel real RiseInTimeDuration Time Struct UseFileBeatsMarker boolean =head3 XMP Time Struct Field Name Writable ---------- -------- Scale rational Value integer =head3 XMP Media Struct Field Name Writable ---------- -------- Duration Time Struct Managed boolean Path string StartTime Time Struct Track string WebStatement string =head3 XMP Marker Struct Field Name Writable ---------- -------- Comment string CuePointParams CuePointParam Struct+ CuePointType string Duration string Location string Name string Probability real Speaker string StartTime string Target string Type string =head3 XMP CuePointParam Struct Field Name Writable ---------- -------- Key string Value string =head3 XMP ProjectLink Struct Field Name Writable ---------- -------- Path string Type string =head3 XMP ResampleStretch Struct Field Name Writable ---------- -------- Quality string =head3 XMP TimeScaleStretch Struct Field Name Writable ---------- -------- FrameOverlappingPercentage real FrameSize real Quality string =head3 XMP Track Struct Field Name Writable ---------- -------- FrameRate string Markers Marker Struct+ TrackName string TrackType string =head3 XMP Colorant Struct Field Name Writable ---------- -------- A integer B integer L real Black real Blue integer Cyan real Green integer Magenta real Mode string Red integer SwatchName string Tint integer Type string Yellow real =head3 XMP Dimensions Struct Field Name Writable ---------- -------- H real Unit string W real =head3 XMP Area Struct Field Name Writable ---------- -------- D real H real Unit string W real X real Y real =head3 XMP xmpMM Tags XMP Media Management namespace tags. Tag Name Writable -------- -------- DerivedFrom ResourceRef Struct DerivedFromAlternatePaths string_+ DerivedFromDocumentID string_ DerivedFromFilePath string_ DerivedFromFromPart string_ DerivedFromInstanceID string_ DerivedFromLastModifyDate date_ DerivedFromManager string_ DerivedFromManagerVariant string_ DerivedFromManageTo string_ DerivedFromManageUI string_ DerivedFromMaskMarkers string_ DerivedFromOriginalDocumentID string_ DerivedFromPartMapping string_ DerivedFromRenditionClass string_ DerivedFromRenditionParams string_ DerivedFromToPart string_ DerivedFromVersionID string_ DocumentID string History ResourceEvent Struct+ HistoryAction string_+ HistoryChanged string_+ HistoryInstanceID string_+ HistoryParameters string_+ HistorySoftwareAgent string_+ HistoryWhen date_+ Ingredients ResourceRef Struct+ IngredientsAlternatePaths string_+ IngredientsDocumentID string_+ IngredientsFilePath string_+ IngredientsFromPart string_+ IngredientsInstanceID string_+ IngredientsLastModifyDate date_+ IngredientsManager string_+ IngredientsManagerVariant string_+ IngredientsManageTo string_+ IngredientsManageUI string_+ IngredientsMaskMarkers string_+ IngredientsOriginalDocumentID string_+ IngredientsPartMapping string_+ IngredientsRenditionClass string_+ IngredientsRenditionParams string_+ IngredientsToPart string_+ IngredientsVersionID string_+ InstanceID string LastURL string ManagedFrom ResourceRef Struct ManagedFromAlternatePaths string_+ ManagedFromDocumentID string_ ManagedFromFilePath string_ ManagedFromFromPart string_ ManagedFromInstanceID string_ ManagedFromLastModifyDate date_ ManagedFromManager string_ ManagedFromManagerVariant string_ ManagedFromManageTo string_ ManagedFromManageUI string_ ManagedFromMaskMarkers string_ ManagedFromOriginalDocumentID string_ ManagedFromPartMapping string_ ManagedFromRenditionClass string_ ManagedFromRenditionParams string_ ManagedFromToPart string_ ManagedFromVersionID string_ Manager string ManagerVariant string ManageTo string ManageUI string Manifest ManifestItem Struct+ ManifestLinkForm string_+ ManifestPlacedResolutionUnit string_+ ManifestPlacedXResolution real_+ ManifestPlacedYResolution real_+ ManifestReference ResourceRef Struct_+ ManifestReferenceAlternatePaths string_+ ManifestReferenceDocumentID string_+ ManifestReferenceFilePath string_+ ManifestReferenceFromPart string_+ ManifestReferenceInstanceID string_+ ManifestReferenceLastModifyDate date_+ ManifestReferenceManager string_+ ManifestReferenceManagerVariant string_+ ManifestReferenceManageTo string_+ ManifestReferenceManageUI string_+ ManifestReferenceMaskMarkers string_+ ManifestReferenceOriginalDocumentID string_+ ManifestReferencePartMapping string_+ ManifestReferenceRenditionClass string_+ ManifestReferenceRenditionParams string_+ ManifestReferenceToPart string_+ ManifestReferenceVersionID string_+ OriginalDocumentID string Pantry PantryItem Struct+ PreservedFileName string RenditionClass string RenditionOf ResourceRef Struct RenditionOfAlternatePaths string_+ RenditionOfDocumentID string_ RenditionOfFilePath string_ RenditionOfFromPart string_ RenditionOfInstanceID string_ RenditionOfLastModifyDate date_ RenditionOfManager string_ RenditionOfManagerVariant string_ RenditionOfManageTo string_ RenditionOfManageUI string_ RenditionOfMaskMarkers string_ RenditionOfOriginalDocumentID string_ RenditionOfPartMapping string_ RenditionOfRenditionClass string_ RenditionOfRenditionParams string_ RenditionOfToPart string_ RenditionOfVersionID string_ RenditionParams string SaveID integer Subject string/+ VersionID string Versions Version Struct+ VersionsComments string_+ VersionsEvent ResourceEvent Struct_+ VersionsEventAction string_+ VersionsEventChanged string_+ VersionsEventInstanceID string_+ VersionsEventParameters string_+ VersionsEventSoftwareAgent string_+ VersionsEventWhen date_+ VersionsModifier string_+ VersionsModifyDate date_+ VersionsVersion string_+ =head3 XMP ResourceRef Struct Field Name Writable ---------- -------- AlternatePaths string+ DocumentID string FilePath string FromPart string InstanceID string LastModifyDate date ManageTo string ManageUI string Manager string ManagerVariant string MaskMarkers string OriginalDocumentID string PartMapping string RenditionClass string RenditionParams string ToPart string VersionID string =head3 XMP ResourceEvent Struct Field Name Writable ---------- -------- Action string Changed string InstanceID string Parameters string SoftwareAgent string When date =head3 XMP ManifestItem Struct Field Name Writable ---------- -------- LinkForm string PlacedResolutionUnit string PlacedXResolution real PlacedYResolution real Reference ResourceRef Struct =head3 XMP PantryItem Struct This structure must have an InstanceID field, but may also contain any other XMP properties. Field Name Writable ---------- -------- InstanceID string =head3 XMP Version Struct Field Name Writable ---------- -------- Comments string Event ResourceEvent Struct Modifier string ModifyDate date Version string =head3 XMP xmpNote Tags XMP Note namespace tags. Tag Name Writable -------- -------- HasExtendedXMP string* =head3 XMP xmpPLUS Tags XMP Picture Licensing Universal System (PLUS) namespace tags. Tag Name Writable -------- -------- CreditLineReq boolean ReuseAllowed boolean =head3 XMP xmpRights Tags XMP Rights Management namespace tags. Tag Name Writable -------- -------- Certificate string Marked boolean Owner string+ UsageTerms lang-alt WebStatement string =head3 XMP xmpTPg Tags XMP Paged-Text namespace tags. Tag Name Writable -------- -------- Colorants Colorant Struct+ ColorantA integer_+ ColorantB integer_+ ColorantBlack real_+ ColorantBlue integer_+ ColorantCyan real_+ ColorantGreen integer_+ ColorantL real_+ ColorantMagenta real_+ ColorantMode string_+ ColorantRed integer_+ ColorantSwatchName string_+ ColorantTint integer_+ ColorantType string_+ ColorantYellow real_+ Fonts Font Struct+ ChildFontFiles string_+ FontComposite boolean_+ FontFace string_+ FontFamily string_+ FontFileName string_+ FontName string_+ FontType string_+ FontVersion string_+ MaxPageSize Dimensions Struct MaxPageSizeH real_ MaxPageSizeUnit string_ MaxPageSizeW real_ NPages integer PlateNames string+ =head3 XMP Font Struct Field Name Writable ---------- -------- ChildFontFiles string+ Composite boolean FontFace string FontFamily string FontFileName string FontName string FontType string VersionString string =head3 XMP XML Tags Tag ID Tag Name Writable ------ -------- -------- 'dc' dc XMP dc 'lastUpdate' LastUpdate N =head3 XMP SVG Tags SVG (Scalable Vector Graphics) image tags. By default, only the top-level SVG and Metadata tags are extracted from these images, but all graphics tags may be extracted by setting the Unknown option to 2 (-U on the command line). The SVG tags are not part of XMP as such, but are included with the XMP module for convenience. (see L<http://www.w3.org/TR/SVG11/>) Tag ID Tag Name Writable ------ -------- -------- 'height' ImageHeight N 'id' ID N 'metadataId' MetadataID N 'version' SVGVersion N 'width' ImageWidth N =head2 GPS Tags These GPS tags are part of the EXIF standard, and are stored in a separate IFD within the EXIF information. ExifTool is very flexible about the input format when writing lat/long coordinates, and will accept from 1 to 3 floating point numbers (for decimal degrees, degrees and minutes, or degrees, minutes and seconds) separated by just about anything, and will format them properly according to the EXIF specification. Some GPS tags have values which are fixed-length strings. For these, the indicated string lengths include a null terminator which is added automatically by ExifTool. Remember that the descriptive values are used when writing (eg. 'Above Sea Level', not '0') unless the print conversion is disabled (with '-n' on the command line or the PrintConv option in the API, or by suffixing the tag name with a C<#> character). When adding GPS information to an image, it is important to set all of the following tags: GPSLatitude, GPSLatitudeRef, GPSLongitude, GPSLongitudeRef, and GPSAltitude and GPSAltitudeRef if the altitude is known. ExifTool will write the required GPSVersionID tag automatically if new a GPS IFD is added to an image. Tag ID Tag Name Writable ------ -------- -------- 0x0000 GPSVersionID int8u[4]: 0x0001 GPSLatitudeRef string[2] 0x0002 GPSLatitude rational64u[3] 0x0003 GPSLongitudeRef string[2] 0x0004 GPSLongitude rational64u[3] 0x0005 GPSAltitudeRef int8u 0x0006 GPSAltitude rational64u 0x0007 GPSTimeStamp rational64u[3] 0x0008 GPSSatellites string 0x0009 GPSStatus string[2] 0x000a GPSMeasureMode string[2] 0x000b GPSDOP rational64u 0x000c GPSSpeedRef string[2] 0x000d GPSSpeed rational64u 0x000e GPSTrackRef string[2] 0x000f GPSTrack rational64u 0x0010 GPSImgDirectionRef string[2] 0x0011 GPSImgDirection rational64u 0x0012 GPSMapDatum string 0x0013 GPSDestLatitudeRef string[2] 0x0014 GPSDestLatitude rational64u[3] 0x0015 GPSDestLongitudeRef string[2] 0x0016 GPSDestLongitude rational64u[3] 0x0017 GPSDestBearingRef string[2] 0x0018 GPSDestBearing rational64u 0x0019 GPSDestDistanceRef string[2] 0x001a GPSDestDistance rational64u 0x001b GPSProcessingMethod undef 0x001c GPSAreaInformation undef 0x001d GPSDateStamp string[11] 0x001e GPSDifferential int16u 0x001f GPSHPositioningError rational64u =head2 GeoTiff Tags ExifTool extracts the following tags from GeoTIFF images. See L<http://www.remotesensing.org/geotiff/spec/geotiffhome.html> for the complete GeoTIFF specification. Also included in the table below are ChartTIFF tags (see L<http://www.charttiff.com/whitepapers.shtml>). GeoTIFF tags are not writable individually, but they may be copied en mass via the block tags GeoTiffDirectory, GeoTiffDoubleParams and GeoTiffAsciiParams. Tag ID Tag Name Writable ------ -------- -------- 0x0001 GeoTiffVersion N 0x0400 GTModelType N 0x0401 GTRasterType N 0x0402 GTCitation N 0x0800 GeographicType N 0x0801 GeogCitation N 0x0802 GeogGeodeticDatum N 0x0803 GeogPrimeMeridian N 0x0804 GeogLinearUnits N 0x0805 GeogLinearUnitSize N 0x0806 GeogAngularUnits N 0x0807 GeogAngularUnitSize N 0x0808 GeogEllipsoid N 0x0809 GeogSemiMajorAxis N 0x080a GeogSemiMinorAxis N 0x080b GeogInvFlattening N 0x080c GeogAzimuthUnits N 0x080d GeogPrimeMeridianLong N 0x080e GeogToWGS84 N 0x0c00 ProjectedCSType N 0x0c01 PCSCitation N 0x0c02 Projection N 0x0c03 ProjCoordTrans N 0x0c04 ProjLinearUnits N 0x0c05 ProjLinearUnitSize N 0x0c06 ProjStdParallel1 N 0x0c07 ProjStdParallel2 N 0x0c08 ProjNatOriginLong N 0x0c09 ProjNatOriginLat N 0x0c0a ProjFalseEasting N 0x0c0b ProjFalseNorthing N 0x0c0c ProjFalseOriginLong N 0x0c0d ProjFalseOriginLat N 0x0c0e ProjFalseOriginEasting N 0x0c0f ProjFalseOriginNorthing N 0x0c10 ProjCenterLong N 0x0c11 ProjCenterLat N 0x0c12 ProjCenterEasting N 0x0c13 ProjCenterNorthing N 0x0c14 ProjScaleAtNatOrigin N 0x0c15 ProjScaleAtCenter N 0x0c16 ProjAzimuthAngle N 0x0c17 ProjStraightVertPoleLong N 0x0c18 ProjRectifiedGridAngle N 0x1000 VerticalCSType N 0x1001 VerticalCitation N 0x1002 VerticalDatum N 0x1003 VerticalUnits N 0xb799 ChartFormat N 0xb79a ChartSource N 0xb79b ChartSourceEdition N 0xb79c ChartSourceDate N 0xb79d ChartCorrDate N 0xb79e ChartCountryOrigin N 0xb79f ChartRasterEdition N 0xb7a0 ChartSoundingDatum N 0xb7a1 ChartDepthUnits N 0xb7a2 ChartMagVar N 0xb7a3 ChartMagVarYear N 0xb7a4 ChartMagVarAnnChange N 0xb7a5 ChartWGSNSShift N 0xb7a7 InsetNWPixelX N 0xb7a8 InsetNWPixelY N 0xb7a9 ChartContourInterval N =head2 ICC_Profile Tags ICC profile information is used in many different file types including JPEG, TIFF, PDF, PostScript, Photoshop, PNG, MIFF, PICT, QuickTime, XCF and some RAW formats. While the tags listed below are not individually writable, the entire profile itself can be accessed via the extra 'ICC_Profile' tag, but this tag is neither extracted nor written unless specified explicitly. See L<http://www.color.org/icc_specs2.xalter> for the official ICC specification. Tag ID Tag Name Writable ------ -------- -------- 'A2B0' AToB0 N 'A2B1' AToB1 N 'A2B2' AToB2 N 'B2A0' BToA0 N 'B2A1' BToA1 N 'B2A2' BToA2 N 'B2D0' BToD0 N 'B2D1' BToD1 N 'B2D2' BToD2 N 'B2D3' BToD3 N 'D2B0' DToB0 N 'D2B1' DToB1 N 'D2B2' DToB2 N 'D2B3' DToB3 N 'Header' ProfileHeader ICC_Profile Header 'MS00' WCSProfiles N 'bTRC' BlueTRC N 'bXYZ' BlueMatrixColumn N 'bfd ' UCRBG N 'bkpt' MediaBlackPoint N 'calt' CalibrationDateTime N 'chad' ChromaticAdaptation N 'chrm' Chromaticity ICC_Profile Chromaticity 'ciis' ColorimetricIntentImageState N 'clot' ColorantTableOut N 'clro' ColorantOrder N 'clrt' ColorantTable ICC_Profile ColorantTable 'cprt' ProfileCopyright N 'crdi' CRDInfo N 'desc' ProfileDescription N 'devs' DeviceSettings N 'dmdd' DeviceModelDesc N 'dmnd' DeviceMfgDesc N 'dscm' ProfileDescriptionML N 'fpce' FocalPlaneColorimetryEstimates N 'gTRC' GreenTRC N 'gXYZ' GreenMatrixColumn N 'gamt' Gamut N 'kTRC' GrayTRC N 'lumi' Luminance N 'meas' Measurement ICC_Profile Measurement 'meta' Metadata ICC_Profile Metadata 'mmod' MakeAndModel N 'ncl2' NamedColor2 N 'ncol' NamedColor N 'ndin' NativeDisplayInfo N 'pre0' Preview0 N 'pre1' Preview1 N 'pre2' Preview2 N 'ps2i' PS2RenderingIntent N 'ps2s' PostScript2CSA N 'psd0' PostScript2CRD0 N 'psd1' PostScript2CRD1 N 'psd2' PostScript2CRD2 N 'pseq' ProfileSequenceDesc N 'psid' ProfileSequenceIdentifier N 'psvm' PS2CRDVMSize N 'rTRC' RedTRC N 'rXYZ' RedMatrixColumn N 'resp' OutputResponse N 'rhoc' ReflectionHardcopyOrigColorimetry N 'rig0' PerceptualRenderingIntentGamut N 'rig2' SaturationRenderingIntentGamut N 'rpoc' ReflectionPrintOutputColorimetry N 'sape' SceneAppearanceEstimates N 'scoe' SceneColorimetryEstimates N 'scrd' ScreeningDesc N 'scrn' Screening N 'targ' CharTarget N 'tech' Technology N 'vcgt' VideoCardGamma N 'view' ViewingConditions ICC_Profile ViewingConditions 'vued' ViewingCondDesc N 'wtpt' MediaWhitePoint N =head3 ICC_Profile Header Tags Index1 Tag Name Writable ------ -------- -------- 4 ProfileCMMType N 8 ProfileVersion N 12 ProfileClass N 16 ColorSpaceData N 20 ProfileConnectionSpace N 24 ProfileDateTime N 36 ProfileFileSignature N 40 PrimaryPlatform N 44 CMMFlags N 48 DeviceManufacturer N 52 DeviceModel N 56 DeviceAttributes N 64 RenderingIntent N 68 ConnectionSpaceIlluminant N 80 ProfileCreator N 84 ProfileID N =head3 ICC_Profile Chromaticity Tags Index1 Tag Name Writable ------ -------- -------- 8 ChromaticityChannels N 10 ChromaticityColorant N 12 ChromaticityChannel1 N 20 ChromaticityChannel2 N 28 ChromaticityChannel3 N 36 ChromaticityChannel4 N =head3 ICC_Profile ColorantTable Tags Index1 Tag Name Writable ------ -------- -------- 8 ColorantCount N 12 Colorant1Name N 44 Colorant1Coordinates N 50 Colorant2Name N 82 Colorant2Coordinates N 88 Colorant3Name N 120 Colorant3Coordinates N =head3 ICC_Profile Measurement Tags Index1 Tag Name Writable ------ -------- -------- 8 MeasurementObserver N 12 MeasurementBacking N 24 MeasurementGeometry N 28 MeasurementFlare N 32 MeasurementIlluminant N =head3 ICC_Profile Metadata Tags Only these few tags have been pre-defined, but ExifTool will extract any Metadata tags that exist. Tag Name Writable -------- -------- ManufacturerName N MediaColor N MediaWeight N =head3 ICC_Profile ViewingConditions Tags Index1 Tag Name Writable ------ -------- -------- 8 ViewingCondIlluminant N 20 ViewingCondSurround N 32 ViewingCondIlluminantType N =head2 PrintIM Tags The format of the PrintIM information is known, however no PrintIM tags have been decoded. Use the Unknown (-u) option to extract PrintIM information. Tag ID Tag Name Writable ------ -------- -------- 'PrintIMVersion' PrintIMVersion N =head2 Photoshop Tags Photoshop tags are found in PSD and PSB files, as well as inside embedded Photoshop information in many other file types (JPEG, TIFF, PDF, PNG to name a few). Many Photoshop tags are marked as Unknown (indicated by a question mark after the tag name) because the information they provide is not very useful under normal circumstances. These unknown tags are not extracted unless the Unknown (-u) option is used. See L<http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/> for the official specification Photoshop path tags (Tag ID's 0x7d0 to 0xbb5) are not defined by default, but a config file included in the full ExifTool distribution (config_files/photoshop_paths.config) contains the tag definitions to allow access to this information. Tag ID Tag Name Writable ------ -------- -------- 0x03e8 Photoshop2Info? N 0x03e9 MacintoshPrintInfo? N 0x03ea XMLData? N 0x03eb Photoshop2ColorTable? N 0x03ed ResolutionInfo Photoshop Resolution 0x03ee AlphaChannelsNames N 0x03ef DisplayInfo? N 0x03f0 PStringCaption? N 0x03f1 BorderInformation? N 0x03f2 BackgroundColor? N 0x03f3 PrintFlags? N 0x03f4 BW_HalftoningInfo? N 0x03f5 ColorHalftoningInfo? N 0x03f6 DuotoneHalftoningInfo? N 0x03f7 BW_TransferFunc? N 0x03f8 ColorTransferFuncs? N 0x03f9 DuotoneTransferFuncs? N 0x03fa DuotoneImageInfo? N 0x03fb EffectiveBW? N 0x03fc ObsoletePhotoshopTag1? N 0x03fd EPSOptions? N 0x03fe QuickMaskInfo? N 0x03ff ObsoletePhotoshopTag2? N 0x0400 TargetLayerID? N 0x0401 WorkingPath? N 0x0402 LayersGroupInfo? N 0x0403 ObsoletePhotoshopTag3? N 0x0404 IPTCData IPTC 0x0405 RawImageMode? N 0x0406 JPEG_Quality Photoshop JPEG_Quality 0x0408 GridGuidesInfo? N 0x0409 PhotoshopBGRThumbnail undef! 0x040a CopyrightFlag int8u 0x040b URL string 0x040c PhotoshopThumbnail undef! 0x040d GlobalAngle int32u 0x040e ColorSamplersResource? N 0x040f ICC_Profile ICC_Profile 0x0410 Watermark? N 0x0411 ICC_Untagged? N 0x0412 EffectsVisible? N 0x0413 SpotHalftone? N 0x0414 IDsBaseValue? N 0x0415 UnicodeAlphaNames? N 0x0416 IndexedColourTableCount? N 0x0417 TransparentIndex? N 0x0419 GlobalAltitude int32u 0x041a Slices? N 0x041b WorkflowURL? N 0x041c JumpToXPEP? N 0x041d AlphaIdentifiers? N 0x041e URL_List? N 0x0421 VersionInfo? N 0x0422 EXIFInfo EXIF 0x0423 ExifInfo2? N 0x0424 XMP XMP 0x0425 IPTCDigest string! 0x0426 PrintScale? N 0x0428 PixelAspectRatio? N 0x0429 LayerComps? N 0x042a AlternateDuotoneColors? N 0x042b AlternateSpotColors? N 0x042d LayerSelectionIDs? N 0x042e HDRToningInfo? N 0x042f PrintInfo? N 0x0430 LayerGroupsEnabledID? N 0x0431 ColorSamplersResource2? N 0x0432 MeasurementScale? N 0x0433 TimelineInfo? N 0x0434 SheetDisclosure? N 0x0435 DisplayInfo? N 0x0436 OnionSkins? N 0x0438 CountInfo? N 0x043a PrintInfo2? N 0x043b PrintStyle? N 0x043c MacintoshNSPrintInfo? N 0x043d WindowsDEVMODE? N 0x043e AutoSaveFilePath? N 0x043f AutoSaveFormat? N 0x0440 PathSelectionState? N 0x0bb7 ClippingPathName N 0x0bb8 OriginPathInfo? N 0x1b58 ImageReadyVariables? N 0x1b59 ImageReadyDataSets? N 0x1f40 LightroomWorkflow? N 0x2710 PrintFlagsInfo? N =head3 Photoshop Resolution Tags Index2 Tag Name Writable ------ -------- -------- 0 XResolution int32u 2 DisplayedUnitsX int16u 4 YResolution int32u 6 DisplayedUnitsY int16u =head3 Photoshop JPEG_Quality Tags Index2 Tag Name Writable ------ -------- -------- 0 PhotoshopQuality int16s 1 PhotoshopFormat N 2 ProgressiveScans N =head3 Photoshop Header Tags This information is found in the PSD file header. Index2 Tag Name Writable ------ -------- -------- 6 NumChannels N 7 ImageHeight N 9 ImageWidth N 11 BitDepth N 12 ColorMode N =head2 Apple Tags Tags extracted from maker notes of images from the iPhone 5 with iOS 7. Tag ID Tag Name Writable ------ -------- -------- 0x0003 RunTime Apple RunTime 0x000a HDRImageType int32s 0x000b BurstUUID string =head3 Apple RunTime Tags This PLIST-format information contains the elements of a CMTime structure representing the amount of time the phone has been running since the last boot, not including standby time. Tag ID Tag Name Writable ------ -------- -------- 'epoch' RunTimeEpoch N 'flags' RunTimeFlags N 'timescale' RunTimeScale N 'value' RunTimeValue N =head2 Canon Tags Tag ID Tag Name Writable ------ -------- -------- 0x0001 CanonCameraSettings Canon CameraSettings 0x0002 CanonFocalLength Canon FocalLength 0x0003 CanonFlashInfo? N 0x0004 CanonShotInfo Canon ShotInfo 0x0005 CanonPanorama Canon Panorama 0x0006 CanonImageType string 0x0007 CanonFirmwareVersion string 0x0008 FileNumber int32u 0x0009 OwnerName string 0x000a UnknownD30 Canon UnknownD30 0x000c SerialNumber int32u 0x000d CanonCameraInfo1D Canon CameraInfo1D CanonCameraInfo1DmkII Canon CameraInfo1DmkII CanonCameraInfo1DmkIIN Canon CameraInfo1DmkIIN CanonCameraInfo1DmkIII Canon CameraInfo1DmkIII CanonCameraInfo1DmkIV Canon CameraInfo1DmkIV CanonCameraInfo1DX Canon CameraInfo1DX CanonCameraInfo5D Canon CameraInfo5D CanonCameraInfo5DmkII Canon CameraInfo5DmkII CanonCameraInfo5DmkIII Canon CameraInfo5DmkIII CanonCameraInfo6D Canon CameraInfo6D CanonCameraInfo7D Canon CameraInfo7D CanonCameraInfo40D Canon CameraInfo40D CanonCameraInfo50D Canon CameraInfo50D CanonCameraInfo60D Canon CameraInfo60D CanonCameraInfo70D Canon CameraInfo70D CanonCameraInfo450D Canon CameraInfo450D CanonCameraInfo500D Canon CameraInfo500D CanonCameraInfo550D Canon CameraInfo550D CanonCameraInfo600D Canon CameraInfo600D CanonCameraInfo650D Canon CameraInfo650D CanonCameraInfo1000D Canon CameraInfo1000D CanonCameraInfo1100D Canon CameraInfo600D CanonCameraInfoPowerShot Canon CameraInfoPowerShot CanonCameraInfoPowerShot2 Canon CameraInfoPowerShot2 CanonCameraInfoUnknown32 Canon CameraInfoUnknown32 CanonCameraInfoUnknown16 Canon CameraInfoUnknown16 CanonCameraInfoUnknown Canon CameraInfoUnknown 0x000e CanonFileLength int32u 0x000f CustomFunctions1D CanonCustom Functions1D CustomFunctions5D CanonCustom Functions5D CustomFunctions10D CanonCustom Functions10D CustomFunctions20D CanonCustom Functions20D CustomFunctions30D CanonCustom Functions30D CustomFunctions350D CanonCustom Functions350D CustomFunctions400D CanonCustom Functions400D CustomFunctionsD30 CanonCustom FunctionsD30 CustomFunctionsD60 CanonCustom FunctionsD30 CustomFunctionsUnknown CanonCustom FuncsUnknown 0x0010 CanonModelID int32u 0x0011 MovieInfo Canon MovieInfo 0x0012 CanonAFInfo Canon AFInfo 0x0013 ThumbnailImageValidArea int16u[4] 0x0015 SerialNumberFormat int32u 0x001a SuperMacro int16u 0x001c DateStampMode int16u 0x001d MyColors Canon MyColors 0x001e FirmwareRevision int32u 0x0023 Categories int32u[2] 0x0024 FaceDetect1 Canon FaceDetect1 0x0025 FaceDetect2 Canon FaceDetect2 0x0026 CanonAFInfo2 Canon AFInfo2 0x0027 ContrastInfo Canon ContrastInfo 0x0028 ImageUniqueID int8u 0x002f FaceDetect3 Canon FaceDetect3 0x0035 TimeInfo Canon TimeInfo 0x003c AFInfo3 Canon AFInfo2 0x0081 RawDataOffset N 0x0083 OriginalDecisionDataOffset int32u* 0x0090 CustomFunctions1D CanonCustom Functions1D 0x0091 PersonalFunctions CanonCustom PersonalFuncs 0x0092 PersonalFunctionValues CanonCustom PersonalFuncValues 0x0093 CanonFileInfo Canon FileInfo 0x0094 AFPointsInFocus1D N 0x0095 LensModel string 0x0096 SerialInfo Canon SerialInfo InternalSerialNumber string 0x0097 DustRemovalData undef! 0x0098 CropInfo Canon CropInfo 0x0099 CustomFunctions2 CanonCustom Functions2 0x009a AspectInfo Canon AspectInfo 0x00a0 ProcessingInfo Canon Processing 0x00a1 ToneCurveTable N 0x00a2 SharpnessTable N 0x00a3 SharpnessFreqTable N 0x00a4 WhiteBalanceTable N 0x00a9 ColorBalance Canon ColorBalance 0x00aa MeasuredColor Canon MeasuredColor 0x00ae ColorTemperature int16u 0x00b0 CanonFlags Canon Flags 0x00b1 ModifiedInfo Canon ModifiedInfo 0x00b2 ToneCurveMatching N 0x00b3 WhiteBalanceMatching N 0x00b4 ColorSpace int16u 0x00b6 PreviewImageInfo Canon PreviewImageInfo 0x00d0 VRDOffset int32u* 0x00e0 SensorInfo Canon SensorInfo 0x4001 ColorData1 Canon ColorData1 ColorData2 Canon ColorData2 ColorData3 Canon ColorData3 ColorData4 Canon ColorData4 ColorData5 Canon ColorData5 ColorData6 Canon ColorData6 ColorData7 Canon ColorData7 ColorData8 Canon ColorData8 ColorDataUnknown Canon ColorDataUnknown 0x4002 CRWParam? N 0x4003 ColorInfo Canon ColorInfo 0x4005 Flavor? N 0x4008 BlackLevel? N 0x4010 CustomPictureStyleFileName string 0x4013 AFMicroAdj Canon AFMicroAdj 0x4015 VignettingCorr Canon VignettingCorr VignettingCorrUnknown1 Canon VignettingCorrUnknown VignettingCorrUnknown2 Canon VignettingCorrUnknown 0x4016 VignettingCorr2 Canon VignettingCorr2 0x4018 LightingOpt Canon LightingOpt 0x4019 LensInfo Canon LensInfo 0x4020 AmbienceInfo Canon Ambience 0x4021 MultiExp Canon MultiExp 0x4024 FilterInfo Canon FilterInfo 0x4025 HDRInfo Canon HDRInfo 0x4028 AFConfig Canon AFConfig =head3 Canon CameraSettings Tags Index2 Tag Name Writable ------ -------- -------- 1 MacroMode int16s 2 SelfTimer int16s 3 Quality int16s 4 CanonFlashMode int16s 5 ContinuousDrive int16s 7 FocusMode int16s 9 RecordMode int16s 10 CanonImageSize int16s 11 EasyMode int16s 12 DigitalZoom int16s 13 Contrast int16s 14 Saturation int16s 15 Sharpness int16s 16 CameraISO int16s 17 MeteringMode int16s 18 FocusRange int16s 19 AFPoint int16s 20 CanonExposureMode int16s 22 LensType int16s 23 MaxFocalLength int16u 24 MinFocalLength int16u 25 FocalUnits int16s 26 MaxAperture int16s 27 MinAperture int16s 28 FlashActivity int16s 29 FlashBits int16s 32 FocusContinuous int16s 33 AESetting int16s 34 ImageStabilization int16s 35 DisplayAperture int16s 36 ZoomSourceWidth int16s 37 ZoomTargetWidth int16s 39 SpotMeteringMode int16s 40 PhotoEffect int16s 41 ManualFlashOutput int16s 42 ColorTone int16s 46 SRAWQuality int16s =head3 Canon FocalLength Tags Index2 Tag Name Writable ------ -------- -------- 0 FocalType int16u 1 FocalLength int16u 2 FocalPlaneXSize int16u FocalPlaneXUnknown? int16u 3 FocalPlaneYSize int16u FocalPlaneYUnknown? int16u =head3 Canon ShotInfo Tags Index2 Tag Name Writable ------ -------- -------- 1 AutoISO int16s 2 BaseISO int16s 3 MeasuredEV int16s 4 TargetAperture int16s 5 TargetExposureTime int16s 6 ExposureCompensation int16s 7 WhiteBalance int16s 8 SlowShutter int16s 9 SequenceNumber int16s 10 OpticalZoomCode int16s 12 CameraTemperature int16s 13 FlashGuideNumber int16s 14 AFPointsInFocus int16s 15 FlashExposureComp int16s 16 AutoExposureBracketing int16s 17 AEBBracketValue int16s 18 ControlMode int16s 19 FocusDistanceUpper int16u 20 FocusDistanceLower int16u 21 FNumber int16s 22 ExposureTime int16s 23 MeasuredEV2 int16s 24 BulbDuration int16s 26 CameraType int16s 27 AutoRotate int16s 28 NDFilter int16s 29 SelfTimer2 int16s 33 FlashOutput int16s =head3 Canon Panorama Tags Index2 Tag Name Writable ------ -------- -------- 2 PanoramaFrameNumber int16s 5 PanoramaDirection int16s =head3 Canon UnknownD30 Tags Index2 Tag Name Writable ------ -------- -------- [no tags known] =head3 Canon CameraInfo1D Tags Information in the "CameraInfo" records is tricky to decode because the encodings are very different than in other Canon records (even sometimes switching endianness between values within a single camera), plus there is considerable variation in format from model to model. The first table below lists CameraInfo tags for the 1D and 1DS. Index1 Tag Name Writable ------ -------- -------- 4 ExposureTime int8u 10 FocalLength int16u 13 LensType int16uRev 14 MinFocalLength int16u 16 MaxFocalLength int16u 65 SharpnessFrequency int8u 66 Sharpness int8s 68 WhiteBalance int8u 71 SharpnessFrequency int8u 72 ColorTemperature int16u Sharpness int8s 74 WhiteBalance int8u 75 PictureStyle int8u 78 ColorTemperature int16u 81 PictureStyle int8u =head3 Canon CameraInfo1DmkII Tags CameraInfo tags for the 1DmkII and 1DSmkII. Index1 Tag Name Writable ------ -------- -------- 4 ExposureTime int8u 9 FocalLength int16uRev 12 LensType int16uRev 17 MinFocalLength int16uRev 19 MaxFocalLength int16uRev 45 FocalType int8u 54 WhiteBalance int8u 55 ColorTemperature int16uRev 57 CanonImageSize int16u 102 JPEGQuality int8u 108 PictureStyle int8u 110 Saturation int8s 111 ColorTone int8s 114 Sharpness int8s 115 Contrast int8s 117 ISO string[5] =head3 Canon CameraInfo1DmkIIN Tags CameraInfo tags for the 1DmkIIN. Index1 Tag Name Writable ------ -------- -------- 4 ExposureTime int8u 9 FocalLength int16uRev 12 LensType int16uRev 17 MinFocalLength int16uRev 19 MaxFocalLength int16uRev 54 WhiteBalance int8u 55 ColorTemperature int16uRev 115 PictureStyle int8u 116 Sharpness int8s 117 Contrast int8s 118 Saturation int8s 119 ColorTone int8s 121 ISO string[5] =head3 Canon CameraInfo1DmkIII Tags CameraInfo tags for the 1DmkIII and 1DSmkIII. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 24 CameraTemperature int8u 27 MacroMagnification int8u 29 FocalLength int16uRev 48 CameraOrientation int8u 67 FocusDistanceUpper int16uRev 69 FocusDistanceLower int16uRev 94 WhiteBalance int16u 98 ColorTemperature int16u 134 PictureStyle int8u 273 LensType int16uRev 275 MinFocalLength int16uRev 277 MaxFocalLength int16uRev 310 FirmwareVersion string[6] 370 FileIndex int32u 374 ShutterCount int32u 382 DirectoryIndex int32u 682 PictureStyleInfo Canon PSInfo 1114 TimeStamp1 int32u 1118 TimeStamp int32u =head3 Canon PSInfo Tags Custom picture style information for various models. Index1 Tag Name Writable ------ -------- -------- 0 ContrastStandard int32s 4 SharpnessStandard int32s 8 SaturationStandard int32s 12 ColorToneStandard int32s 16 FilterEffectStandard? int32s 20 ToningEffectStandard? int32s 24 ContrastPortrait int32s 28 SharpnessPortrait int32s 32 SaturationPortrait int32s 36 ColorTonePortrait int32s 40 FilterEffectPortrait? int32s 44 ToningEffectPortrait? int32s 48 ContrastLandscape int32s 52 SharpnessLandscape int32s 56 SaturationLandscape int32s 60 ColorToneLandscape int32s 64 FilterEffectLandscape? int32s 68 ToningEffectLandscape? int32s 72 ContrastNeutral int32s 76 SharpnessNeutral int32s 80 SaturationNeutral int32s 84 ColorToneNeutral int32s 88 FilterEffectNeutral? int32s 92 ToningEffectNeutral? int32s 96 ContrastFaithful int32s 100 SharpnessFaithful int32s 104 SaturationFaithful int32s 108 ColorToneFaithful int32s 112 FilterEffectFaithful? int32s 116 ToningEffectFaithful? int32s 120 ContrastMonochrome int32s 124 SharpnessMonochrome int32s 128 SaturationMonochrome? int32s 132 ColorToneMonochrome? int32s 136 FilterEffectMonochrome int32s 140 ToningEffectMonochrome int32s 144 ContrastUserDef1 int32s 148 SharpnessUserDef1 int32s 152 SaturationUserDef1 int32s 156 ColorToneUserDef1 int32s 160 FilterEffectUserDef1 int32s 164 ToningEffectUserDef1 int32s 168 ContrastUserDef2 int32s 172 SharpnessUserDef2 int32s 176 SaturationUserDef2 int32s 180 ColorToneUserDef2 int32s 184 FilterEffectUserDef2 int32s 188 ToningEffectUserDef2 int32s 192 ContrastUserDef3 int32s 196 SharpnessUserDef3 int32s 200 SaturationUserDef3 int32s 204 ColorToneUserDef3 int32s 208 FilterEffectUserDef3 int32s 212 ToningEffectUserDef3 int32s 216 UserDef1PictureStyle int16u 218 UserDef2PictureStyle int16u 220 UserDef3PictureStyle int16u =head3 Canon CameraInfo1DmkIV Tags CameraInfo tags for the EOS 1D Mark IV. Indices shown are for firmware versions 1.0.x, but they may be different for other firmware versions. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 7 HighlightTonePriority int8u 8 MeasuredEV2 int8u 9 MeasuredEV3 int8u 21 FlashMeteringMode int8u 25 CameraTemperature int8u 30 FocalLength int16uRev 53 CameraOrientation int8u 84 FocusDistanceUpper int16uRev 86 FocusDistanceLower int16uRev 120 WhiteBalance int16u 124 ColorTemperature int16u 335 LensType int16uRev 337 MinFocalLength int16uRev 339 MaxFocalLength int16uRev 493 FirmwareVersion N 556 FileIndex int32u 568 DirectoryIndex int32u 872 PictureStyleInfo Canon PSInfo =head3 Canon CameraInfo1DX Tags CameraInfo tags for the EOS 1D X. Indices shown are for firmware version 1.0.2, but they may be different for other firmware versions. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 27 CameraTemperature int8u 35 FocalLength int16uRev 125 CameraOrientation int8u 140 FocusDistanceUpper int16uRev 142 FocusDistanceLower int16uRev 188 WhiteBalance int16u 192 ColorTemperature int16u 244 PictureStyle int8u 423 LensType int16uRev 425 MinFocalLength int16uRev 427 MaxFocalLength int16uRev 640 FirmwareVersion N 720 FileIndex int32u 732 DirectoryIndex int32u 1012 PictureStyleInfo Canon PSInfo2 =head3 Canon PSInfo2 Tags Custom picture style information for the EOS 5DmkIII, 60D, 600D and 1100D. Index1 Tag Name Writable ------ -------- -------- 0 ContrastStandard int32s 4 SharpnessStandard int32s 8 SaturationStandard int32s 12 ColorToneStandard int32s 16 FilterEffectStandard? int32s 20 ToningEffectStandard? int32s 24 ContrastPortrait int32s 28 SharpnessPortrait int32s 32 SaturationPortrait int32s 36 ColorTonePortrait int32s 40 FilterEffectPortrait? int32s 44 ToningEffectPortrait? int32s 48 ContrastLandscape int32s 52 SharpnessLandscape int32s 56 SaturationLandscape int32s 60 ColorToneLandscape int32s 64 FilterEffectLandscape? int32s 68 ToningEffectLandscape? int32s 72 ContrastNeutral int32s 76 SharpnessNeutral int32s 80 SaturationNeutral int32s 84 ColorToneNeutral int32s 88 FilterEffectNeutral? int32s 92 ToningEffectNeutral? int32s 96 ContrastFaithful int32s 100 SharpnessFaithful int32s 104 SaturationFaithful int32s 108 ColorToneFaithful int32s 112 FilterEffectFaithful? int32s 116 ToningEffectFaithful? int32s 120 ContrastMonochrome int32s 124 SharpnessMonochrome int32s 128 SaturationMonochrome? int32s 132 ColorToneMonochrome? int32s 136 FilterEffectMonochrome int32s 140 ToningEffectMonochrome int32s 144 ContrastAuto int32s 148 SharpnessAuto int32s 152 SaturationAuto int32s 156 ColorToneAuto int32s 160 FilterEffectAuto int32s 164 ToningEffectAuto int32s 168 ContrastUserDef1 int32s 172 SharpnessUserDef1 int32s 176 SaturationUserDef1 int32s 180 ColorToneUserDef1 int32s 184 FilterEffectUserDef1 int32s 188 ToningEffectUserDef1 int32s 192 ContrastUserDef2 int32s 196 SharpnessUserDef2 int32s 200 SaturationUserDef2 int32s 204 ColorToneUserDef2 int32s 208 FilterEffectUserDef2 int32s 212 ToningEffectUserDef2 int32s 216 ContrastUserDef3 int32s 220 SharpnessUserDef3 int32s 224 SaturationUserDef3 int32s 228 ColorToneUserDef3 int32s 232 FilterEffectUserDef3 int32s 236 ToningEffectUserDef3 int32s 240 UserDef1PictureStyle int16u 242 UserDef2PictureStyle int16u 244 UserDef3PictureStyle int16u =head3 Canon CameraInfo5D Tags CameraInfo tags for the EOS 5D. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 12 LensType int16uRev 23 CameraTemperature int8u 27 MacroMagnification int8s 39 CameraOrientation int8s 40 FocalLength int16uRev 56 AFPointsInFocus5D int16uRev 84 WhiteBalance int16u 88 ColorTemperature int16u 108 PictureStyle int8u 147 MinFocalLength int16uRev 149 MaxFocalLength int16uRev 151 LensType int16uRev 164 FirmwareRevision string[8] 172 ShortOwnerName string[16] 204 DirectoryIndex int32u 208 FileIndex int16u 232 ContrastStandard int8s 233 ContrastPortrait int8s 234 ContrastLandscape int8s 235 ContrastNeutral int8s 236 ContrastFaithful int8s 237 ContrastMonochrome int8s 238 ContrastUserDef1 int8s 239 ContrastUserDef2 int8s 240 ContrastUserDef3 int8s 241 SharpnessStandard int8s 242 SharpnessPortrait int8s 243 SharpnessLandscape int8s 244 SharpnessNeutral int8s 245 SharpnessFaithful int8s 246 SharpnessMonochrome int8s 247 SharpnessUserDef1 int8s 248 SharpnessUserDef2 int8s 249 SharpnessUserDef3 int8s 250 SaturationStandard int8s 251 SaturationPortrait int8s 252 SaturationLandscape int8s 253 SaturationNeutral int8s 254 SaturationFaithful int8s 255 FilterEffectMonochrome int8s 256 SaturationUserDef1 int8s 257 SaturationUserDef2 int8s 258 SaturationUserDef3 int8s 259 ColorToneStandard int8s 260 ColorTonePortrait int8s 261 ColorToneLandscape int8s 262 ColorToneNeutral int8s 263 ColorToneFaithful int8s 264 ToningEffectMonochrome int8s 265 ColorToneUserDef1 int8s 266 ColorToneUserDef2 int8s 267 ColorToneUserDef3 int8s 268 UserDef1PictureStyle int16u 270 UserDef2PictureStyle int16u 272 UserDef3PictureStyle int16u 284 TimeStamp int32u =head3 Canon CameraInfo5DmkII Tags CameraInfo tags for the EOS 5D Mark II. Indices shown are for firmware version 1.0.6, but they may be different for other firmware versions. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 7 HighlightTonePriority int8u 21 FlashMeteringMode int8u 25 CameraTemperature int8u 27 MacroMagnification int8u 30 FocalLength int16uRev 49 CameraOrientation int8u 80 FocusDistanceUpper int16uRev 82 FocusDistanceLower int16uRev 111 WhiteBalance int16u 115 ColorTemperature int16u 167 PictureStyle int8u 189 HighISONoiseReduction int8u 191 AutoLightingOptimizer int8u 230 LensType int16uRev 232 MinFocalLength int16uRev 234 MaxFocalLength int16uRev 382 FirmwareVersion N 443 FileIndex int32u 455 DirectoryIndex int32u 759 PictureStyleInfo Canon PSInfo =head3 Canon CameraInfo5DmkIII Tags CameraInfo tags for the EOS 5D Mark III. Indices shown are for firmware versions 1.0.x, but they may be different for other firmware versions. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 27 CameraTemperature int8u 35 FocalLength int16uRev 125 CameraOrientation int8u 140 FocusDistanceUpper int16uRev 142 FocusDistanceLower int16uRev 188 WhiteBalance int16u 192 ColorTemperature int16u 244 PictureStyle int8u 339 LensType int16uRev 341 MinFocalLength int16uRev 343 MaxFocalLength int16uRev 356 LensSerialNumber undef[5] 572 FirmwareVersion N 652 FileIndex int32u 656 FileIndex2 int32u 664 DirectoryIndex int32u 668 DirectoryIndex2 int32u 944 PictureStyleInfo Canon PSInfo2 =head3 Canon CameraInfo6D Tags CameraInfo tags for the EOS 6D. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 27 CameraTemperature int8u 35 FocalLength int16uRev 131 CameraOrientation int8u 146 FocusDistanceUpper int16uRev 148 FocusDistanceLower int16uRev 194 WhiteBalance int16u 198 ColorTemperature int16u 250 PictureStyle int8u 353 LensType int16uRev 355 MinFocalLength int16uRev 357 MaxFocalLength int16uRev 598 FirmwareVersion N 682 FileIndex int32u 694 DirectoryIndex int32u 966 PictureStyleInfo Canon PSInfo2 =head3 Canon CameraInfo7D Tags CameraInfo tags for the EOS 7D. Indices shown are for firmware versions 1.0.x, but they may be different for other firmware versions. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 7 HighlightTonePriority int8u 8 MeasuredEV2 int8u 9 MeasuredEV int8u 21 FlashMeteringMode int8u 25 CameraTemperature int8u 30 FocalLength int16uRev 53 CameraOrientation int8u 84 FocusDistanceUpper int16uRev 86 FocusDistanceLower int16uRev 119 WhiteBalance int16u 123 ColorTemperature int16u 201 HighISONoiseReduction int8u 274 LensType int16uRev 276 MinFocalLength int16uRev 278 MaxFocalLength int16uRev 428 FirmwareVersion N 491 FileIndex int32u 503 DirectoryIndex int32u 807 PictureStyleInfo Canon PSInfo =head3 Canon CameraInfo40D Tags CameraInfo tags for the EOS 40D. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 21 FlashMeteringMode int8u 24 CameraTemperature int8u 27 MacroMagnification int8u 29 FocalLength int16uRev 48 CameraOrientation int8u 67 FocusDistanceUpper int16uRev 69 FocusDistanceLower int16uRev 111 WhiteBalance int16u 115 ColorTemperature int16u 214 LensType int16uRev 216 MinFocalLength int16uRev 218 MaxFocalLength int16uRev 255 FirmwareVersion string[6] 307 FileIndex int32u 319 DirectoryIndex int32u 603 PictureStyleInfo Canon PSInfo 2347 LensModel string[64] =head3 Canon CameraInfo50D Tags CameraInfo tags for the EOS 50D. Indices shown are for firmware versions 1.0.x, but they may be different for other firmware versions. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 7 HighlightTonePriority int8u 21 FlashMeteringMode int8u 25 CameraTemperature int8u 30 FocalLength int16uRev 49 CameraOrientation int8u 80 FocusDistanceUpper int16uRev 82 FocusDistanceLower int16uRev 111 WhiteBalance int16u 115 ColorTemperature int16u 167 PictureStyle int8u 189 HighISONoiseReduction int8u 191 AutoLightingOptimizer int8u 234 LensType int16uRev 236 MinFocalLength int16uRev 238 MaxFocalLength int16uRev 350 FirmwareVersion N 411 FileIndex int32u 423 DirectoryIndex int32u 727 PictureStyleInfo Canon PSInfo =head3 Canon CameraInfo60D Tags CameraInfo tags for the EOS 60D. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 25 CameraTemperature int8u 30 FocalLength int16uRev 54 CameraOrientation int8u 85 FocusDistanceUpper int16uRev 87 FocusDistanceLower int16uRev 125 ColorTemperature int16u 232 LensType int16uRev 234 MinFocalLength int16uRev 236 MaxFocalLength int16uRev 409 FirmwareVersion N 473 FileIndex int32u 485 DirectoryIndex int32u 801 PictureStyleInfo Canon PSInfo2 =head3 Canon CameraInfo70D Tags CameraInfo tags for the EOS 70D. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 27 CameraTemperature int8u 35 FocalLength int16uRev 132 CameraOrientation int8u 147 FocusDistanceUpper int16uRev 149 FocusDistanceLower int16uRev 199 ColorTemperature int16u 358 LensType int16uRev 360 MinFocalLength int16uRev 362 MaxFocalLength int16uRev 606 FirmwareVersion N 691 FileIndex int32u 703 DirectoryIndex int32u 975 PictureStyleInfo Canon PSInfo2 =head3 Canon CameraInfo450D Tags CameraInfo tags for the EOS 450D. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 21 FlashMeteringMode int8u 24 CameraTemperature int8u 27 MacroMagnification int8u 29 FocalLength int16uRev 48 CameraOrientation int8u 67 FocusDistanceUpper int16uRev 69 FocusDistanceLower int16uRev 111 WhiteBalance int16u 115 ColorTemperature int16u 222 LensType int16uRev 263 FirmwareVersion string[6] 271 OwnerName string[32] 307 DirectoryIndex int32u 319 FileIndex int32u 611 PictureStyleInfo Canon PSInfo 2355 LensModel string[64] =head3 Canon CameraInfo500D Tags CameraInfo tags for the EOS 500D. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 7 HighlightTonePriority int8u 21 FlashMeteringMode int8u 25 CameraTemperature int8u 30 FocalLength int16uRev 49 CameraOrientation int8u 80 FocusDistanceUpper int16uRev 82 FocusDistanceLower int16uRev 115 WhiteBalance int16u 119 ColorTemperature int16u 171 PictureStyle int8u 188 HighISONoiseReduction int8u 190 AutoLightingOptimizer int8u 246 LensType int16uRev 248 MinFocalLength int16uRev 250 MaxFocalLength int16uRev 400 FirmwareVersion N 467 FileIndex int32u 479 DirectoryIndex int32u 779 PictureStyleInfo Canon PSInfo =head3 Canon CameraInfo550D Tags CameraInfo tags for the EOS 550D. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 7 HighlightTonePriority int8u 21 FlashMeteringMode int8u 25 CameraTemperature int8u 30 FocalLength int16uRev 53 CameraOrientation int8u 84 FocusDistanceUpper int16uRev 86 FocusDistanceLower int16uRev 120 WhiteBalance int16u 124 ColorTemperature int16u 176 PictureStyle int8u 255 LensType int16uRev 257 MinFocalLength int16uRev 259 MaxFocalLength int16uRev 420 FirmwareVersion N 484 FileIndex int32u 496 DirectoryIndex int32u 796 PictureStyleInfo Canon PSInfo =head3 Canon CameraInfo600D Tags CameraInfo tags for the EOS 600D and 1100D. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 7 HighlightTonePriority int8u 21 FlashMeteringMode int8u 25 CameraTemperature int8u 30 FocalLength int16uRev 56 CameraOrientation int8u 87 FocusDistanceUpper int16uRev 89 FocusDistanceLower int16uRev 123 WhiteBalance int16u 127 ColorTemperature int16u 179 PictureStyle int8u 234 LensType int16uRev 236 MinFocalLength int16uRev 238 MaxFocalLength int16uRev 411 FirmwareVersion N 475 FileIndex int32u 487 DirectoryIndex int32u 763 PictureStyleInfo Canon PSInfo2 =head3 Canon CameraInfo650D Tags CameraInfo tags for the EOS 650D and 700D. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 27 CameraTemperature int8u 35 FocalLength int16uRev 125 CameraOrientation int8u 140 FocusDistanceUpper int16uRev 142 FocusDistanceLower int16uRev 188 WhiteBalance int16u 192 ColorTemperature int16u 244 PictureStyle int8u 295 LensType int16uRev 297 MinFocalLength int16uRev 299 MaxFocalLength int16uRev 539 FirmwareVersion N 544 FirmwareVersion N 624 FileIndex int32u 628 FileIndex int32u 636 DirectoryIndex int32u 640 DirectoryIndex int32u 912 PictureStyleInfo Canon PSInfo2 =head3 Canon CameraInfo1000D Tags CameraInfo tags for the EOS 1000D. Index1 Tag Name Writable ------ -------- -------- 3 FNumber int8u 4 ExposureTime int8u 6 ISO int8u 21 FlashMeteringMode int8u 24 CameraTemperature int8u 27 MacroMagnification int8u 29 FocalLength int16uRev 48 CameraOrientation int8u 67 FocusDistanceUpper int16uRev 69 FocusDistanceLower int16uRev 111 WhiteBalance int16u 115 ColorTemperature int16u 226 LensType int16uRev 228 MinFocalLength int16uRev 230 MaxFocalLength int16uRev 267 FirmwareVersion string[6] 311 DirectoryIndex int32u 323 FileIndex int32u 615 PictureStyleInfo Canon PSInfo 2359 LensModel string[64] =head3 Canon CameraInfoPowerShot Tags CameraInfo tags for PowerShot models such as the A450, A460, A550, A560, A570, A630, A640, A650, A710, A720, G7, G9, S5, SD40, SD750, SD800, SD850, SD870, SD900, SD950, SD1000, SX100 and TX1. Index4 Tag Name Writable ------ -------- -------- 0 ISO int32s 5 FNumber int32s 6 ExposureTime int32s 23 Rotation int32s 135 CameraTemperature int32s 145 CameraTemperature int32s =head3 Canon CameraInfoPowerShot2 Tags CameraInfo tags for PowerShot models such as the A470, A480, A490, A495, A580, A590, A1000, A1100, A2000, A2100, A3000, A3100, D10, E1, G10, G11, S90, S95, SD770, SD780, SD790, SD880, SD890, SD940, SD960, SD970, SD980, SD990, SD1100, SD1200, SD1300, SD1400, SD3500, SD4000, SD4500, SX1, SX10, SX20, SX110, SX120, SX130, SX200 and SX210. Index4 Tag Name Writable ------ -------- -------- 1 ISO int32s 6 FNumber int32s 7 ExposureTime int32s 24 Rotation int32s 153 CameraTemperature int32s 159 CameraTemperature int32s 164 CameraTemperature int32s 168 CameraTemperature int32s 261 CameraTemperature int32s =head3 Canon CameraInfoUnknown32 Tags Unknown CameraInfo tags are divided into 3 tables based on format size. Index4 Tag Name Writable ------ -------- -------- 71 CameraTemperature int32s 83 CameraTemperature int32s 91 CameraTemperature int32s 92 CameraTemperature int32s 100 CameraTemperature int32s -3 CameraTemperature int32s =head3 Canon CameraInfoUnknown16 Tags Index2 Tag Name Writable ------ -------- -------- [no tags known] =head3 Canon CameraInfoUnknown Tags Index1 Tag Name Writable ------ -------- -------- 363 LensSerialNumber undef[5] =head3 Canon MovieInfo Tags Tags written by some Canon cameras when recording video. Index2 Tag Name Writable ------ -------- -------- 1 FrameRate int16u 2 FrameCount int16u 4 FrameCount int32u 6 FrameRate rational32u 106 Duration int32u 108 AudioBitrate int32u 110 AudioSampleRate int32u 112 AudioChannels int32u 116 VideoCodec undef[4] =head3 Canon AFInfo Tags Auto-focus information used by many older Canon models. The values in this record are sequential, and some have variable sizes based on the value of NumAFPoints (which may be 1,5,7,9,15,45 or 53). The AFArea coordinates are given in a system where the image has dimensions given by AFImageWidth and AFImageHeight, and 0,0 is the image center. The direction of the Y axis depends on the camera model, with positive Y upwards for EOS models, but apparently downwards for PowerShot models. Sequence Tag Name Writable -------- -------- -------- 0 NumAFPoints N 1 ValidAFPoints N 2 CanonImageWidth N 3 CanonImageHeight N 4 AFImageWidth N 5 AFImageHeight N 6 AFAreaWidth N 7 AFAreaHeight N 8 AFAreaXPositions N 9 AFAreaYPositions N 10 AFPointsInFocus N 11 PrimaryAFPoint N Canon_AFInfo_0x000b? N 12 PrimaryAFPoint N =head3 Canon MyColors Tags Index2 Tag Name Writable ------ -------- -------- 2 MyColorMode int16u =head3 Canon FaceDetect1 Tags Index2 Tag Name Writable ------ -------- -------- 2 FacesDetected int16u 3 FaceDetectFrameSize int16u[2] 8 Face1Position int16s[2] 10 Face2Position int16s[2] 12 Face3Position int16s[2] 14 Face4Position int16s[2] 16 Face5Position int16s[2] 18 Face6Position int16s[2] 20 Face7Position int16s[2] 22 Face8Position int16s[2] 24 Face9Position int16s[2] =head3 Canon FaceDetect2 Tags Index1 Tag Name Writable ------ -------- -------- 1 FaceWidth int8u 2 FacesDetected int8u =head3 Canon AFInfo2 Tags Newer version of the AFInfo record containing much of the same information (and coordinate confusion) as the older version. In this record, NumAFPoints may be 7, 9, 11, 19, 31, 45 or 61, depending on the camera model. Sequence Tag Name Writable -------- -------- -------- 0 AFInfoSize? N 1 AFAreaMode N 2 NumAFPoints N 3 ValidAFPoints N 4 CanonImageWidth N 5 CanonImageHeight N 6 AFImageWidth N 7 AFImageHeight N 8 AFAreaWidths N 9 AFAreaHeights N 10 AFAreaXPositions N 11 AFAreaYPositions N 12 AFPointsInFocus N 13 AFPointsSelected N Canon_AFInfo2_0x000d? N 14 PrimaryAFPoint N =head3 Canon ContrastInfo Tags Index2 Tag Name Writable ------ -------- -------- 4 IntelligentContrast int16u =head3 Canon FaceDetect3 Tags Index2 Tag Name Writable ------ -------- -------- 3 FacesDetected int16u =head3 Canon TimeInfo Tags Index4 Tag Name Writable ------ -------- -------- 1 TimeZone int32s 2 TimeZoneCity int32s 3 DaylightSavings int32s =head3 Canon FileInfo Tags Index2 Tag Name Writable ------ -------- -------- 1 FileNumber int32u ShutterCount int32u 3 BracketMode int16s 4 BracketValue int16s 5 BracketShotNumber int16s 6 RawJpgQuality int16s 7 RawJpgSize int16s 8 LongExposureNoiseReduction2 int16s 9 WBBracketMode int16s 12 WBBracketValueAB int16s 13 WBBracketValueGM int16s 14 FilterEffect int16s 15 ToningEffect int16s 16 MacroMagnification int16s 19 LiveViewShooting int16s 20 FocusDistanceUpper int16u 21 FocusDistanceLower int16u 25 FlashExposureLock int16s =head3 Canon SerialInfo Tags Index1 Tag Name Writable ------ -------- -------- 9 InternalSerialNumber string =head3 Canon CropInfo Tags Index2 Tag Name Writable ------ -------- -------- 0 CropLeftMargin int16u 1 CropRightMargin int16u 2 CropTopMargin int16u 3 CropBottomMargin int16u =head3 Canon AspectInfo Tags Index4 Tag Name Writable ------ -------- -------- 0 AspectRatio int32u 1 CroppedImageWidth int32u 2 CroppedImageHeight int32u 3 CroppedImageLeft int32u 4 CroppedImageTop int32u =head3 Canon Processing Tags Index2 Tag Name Writable ------ -------- -------- 1 ToneCurve int16s 2 Sharpness int16s 3 SharpnessFrequency int16s 4 SensorRedLevel int16s 5 SensorBlueLevel int16s 6 WhiteBalanceRed int16s 7 WhiteBalanceBlue int16s 8 WhiteBalance int16s 9 ColorTemperature int16s 10 PictureStyle int16s 11 DigitalGain int16s 12 WBShiftAB int16s 13 WBShiftGM int16s =head3 Canon ColorBalance Tags These tags are used by the 10D and 300D. Index2 Tag Name Writable ------ -------- -------- 1 WB_RGGBLevelsAuto int16s[4] 5 WB_RGGBLevelsDaylight int16s[4] 9 WB_RGGBLevelsShade int16s[4] 13 WB_RGGBLevelsCloudy int16s[4] 17 WB_RGGBLevelsTungsten int16s[4] 21 WB_RGGBLevelsFluorescent int16s[4] 25 WB_RGGBLevelsFlash int16s[4] 29 WB_RGGBLevelsCustom int16s[4] 33 WB_RGGBLevelsKelvin int16s[4] 37 WB_RGGBBlackLevels int16s[4] =head3 Canon MeasuredColor Tags Index2 Tag Name Writable ------ -------- -------- 1 MeasuredRGGB int16u[4] =head3 Canon Flags Tags Index2 Tag Name Writable ------ -------- -------- 1 ModifiedParamFlag int16s =head3 Canon ModifiedInfo Tags Index2 Tag Name Writable ------ -------- -------- 1 ModifiedToneCurve int16s 2 ModifiedSharpness int16s 3 ModifiedSharpnessFreq int16s 4 ModifiedSensorRedLevel int16s 5 ModifiedSensorBlueLevel int16s 6 ModifiedWhiteBalanceRed int16s 7 ModifiedWhiteBalanceBlue int16s 8 ModifiedWhiteBalance int16s 9 ModifiedColorTemp int16s 10 ModifiedPictureStyle int16s 11 ModifiedDigitalGain int16s =head3 Canon PreviewImageInfo Tags Index4 Tag Name Writable ------ -------- -------- 1 PreviewQuality int32u 2 PreviewImageLength int32u* 3 PreviewImageWidth int32u 4 PreviewImageHeight int32u 5 PreviewImageStart int32u* =head3 Canon SensorInfo Tags Index2 Tag Name Writable ------ -------- -------- 1 SensorWidth N 2 SensorHeight N 5 SensorLeftBorder N 6 SensorTopBorder N 7 SensorRightBorder N 8 SensorBottomBorder N 9 BlackMaskLeftBorder N 10 BlackMaskTopBorder N 11 BlackMaskRightBorder N 12 BlackMaskBottomBorder N =head3 Canon ColorData1 Tags These tags are used by the 20D and 350D. Index2 Tag Name Writable ------ -------- -------- 25 WB_RGGBLevelsAsShot int16s[4] 29 ColorTempAsShot int16s 30 WB_RGGBLevelsAuto int16s[4] 34 ColorTempAuto int16s 35 WB_RGGBLevelsDaylight int16s[4] 39 ColorTempDaylight int16s 40 WB_RGGBLevelsShade int16s[4] 44 ColorTempShade int16s 45 WB_RGGBLevelsCloudy int16s[4] 49 ColorTempCloudy int16s 50 WB_RGGBLevelsTungsten int16s[4] 54 ColorTempTungsten int16s 55 WB_RGGBLevelsFluorescent int16s[4] 59 ColorTempFluorescent int16s 60 WB_RGGBLevelsFlash int16s[4] 64 ColorTempFlash int16s 65 WB_RGGBLevelsCustom1 int16s[4] 69 ColorTempCustom1 int16s 70 WB_RGGBLevelsCustom2 int16s[4] 74 ColorTempCustom2 int16s 75 ColorCalib? Canon ColorCalib =head3 Canon ColorCalib Tags Camera color calibration data. For the 20D, 350D, 1DmkII and 1DSmkII the order of the coefficients is A, B, C, Temperature, but for newer models it is B, C, A, Temperature. These tags are extracted only when the Unknown option is used. Index2 Tag Name Writable ------ -------- -------- 0 CameraColorCalibration01? int16s[4] 4 CameraColorCalibration02? int16s[4] 8 CameraColorCalibration03? int16s[4] 12 CameraColorCalibration04? int16s[4] 16 CameraColorCalibration05? int16s[4] 20 CameraColorCalibration06? int16s[4] 24 CameraColorCalibration07? int16s[4] 28 CameraColorCalibration08? int16s[4] 32 CameraColorCalibration09? int16s[4] 36 CameraColorCalibration10? int16s[4] 40 CameraColorCalibration11? int16s[4] 44 CameraColorCalibration12? int16s[4] 48 CameraColorCalibration13? int16s[4] 52 CameraColorCalibration14? int16s[4] 56 CameraColorCalibration15? int16s[4] =head3 Canon ColorData2 Tags These tags are used by the 1DmkII and 1DSmkII. Index2 Tag Name Writable ------ -------- -------- 24 WB_RGGBLevelsAuto int16s[4] 28 ColorTempAuto int16s 29 WB_RGGBLevelsUnknown? int16s[4] 33 ColorTempUnknown? int16s 34 WB_RGGBLevelsAsShot int16s[4] 38 ColorTempAsShot int16s 39 WB_RGGBLevelsDaylight int16s[4] 43 ColorTempDaylight int16s 44 WB_RGGBLevelsShade int16s[4] 48 ColorTempShade int16s 49 WB_RGGBLevelsCloudy int16s[4] 53 ColorTempCloudy int16s 54 WB_RGGBLevelsTungsten int16s[4] 58 ColorTempTungsten int16s 59 WB_RGGBLevelsFluorescent int16s[4] 63 ColorTempFluorescent int16s 64 WB_RGGBLevelsKelvin int16s[4] 68 ColorTempKelvin int16s 69 WB_RGGBLevelsFlash int16s[4] 73 ColorTempFlash int16s 74 WB_RGGBLevelsUnknown2? int16s[4] 78 ColorTempUnknown2? int16s 79 WB_RGGBLevelsUnknown3? int16s[4] 83 ColorTempUnknown3? int16s 84 WB_RGGBLevelsUnknown4? int16s[4] 88 ColorTempUnknown4? int16s 89 WB_RGGBLevelsUnknown5? int16s[4] 93 ColorTempUnknown5? int16s 94 WB_RGGBLevelsUnknown6? int16s[4] 98 ColorTempUnknown6? int16s 99 WB_RGGBLevelsUnknown7? int16s[4] 103 ColorTempUnknown7? int16s 104 WB_RGGBLevelsUnknown8? int16s[4] 108 ColorTempUnknown8? int16s 109 WB_RGGBLevelsUnknown9? int16s[4] 113 ColorTempUnknown9? int16s 114 WB_RGGBLevelsUnknown10? int16s[4] 118 ColorTempUnknown10? int16s 119 WB_RGGBLevelsUnknown11? int16s[4] 123 ColorTempUnknown11? int16s 124 WB_RGGBLevelsUnknown12? int16s[4] 128 ColorTempUnknown12? int16s 129 WB_RGGBLevelsUnknown13? int16s[4] 133 ColorTempUnknown13? int16s 134 WB_RGGBLevelsUnknown14? int16s[4] 138 ColorTempUnknown14? int16s 139 WB_RGGBLevelsUnknown15? int16s[4] 143 ColorTempUnknown15? int16s 144 WB_RGGBLevelsPC1 int16s[4] 148 ColorTempPC1 int16s 149 WB_RGGBLevelsPC2 int16s[4] 153 ColorTempPC2 int16s 154 WB_RGGBLevelsPC3 int16s[4] 158 ColorTempPC3 int16s 159 WB_RGGBLevelsUnknown16? int16s[4] 163 ColorTempUnknown16? int16s 164 ColorCalib? Canon ColorCalib 618 RawMeasuredRGGB int32u[4] =head3 Canon ColorData3 Tags These tags are used by the 1DmkIIN, 5D, 30D and 400D. Index2 Tag Name Writable ------ -------- -------- 0 ColorDataVersion int16s 63 WB_RGGBLevelsAsShot int16s[4] 67 ColorTempAsShot int16s 68 WB_RGGBLevelsAuto int16s[4] 72 ColorTempAuto int16s 73 WB_RGGBLevelsMeasured int16s[4] 77 ColorTempMeasured int16s 78 WB_RGGBLevelsDaylight int16s[4] 82 ColorTempDaylight int16s 83 WB_RGGBLevelsShade int16s[4] 87 ColorTempShade int16s 88 WB_RGGBLevelsCloudy int16s[4] 92 ColorTempCloudy int16s 93 WB_RGGBLevelsTungsten int16s[4] 97 ColorTempTungsten int16s 98 WB_RGGBLevelsFluorescent int16s[4] 102 ColorTempFluorescent int16s 103 WB_RGGBLevelsKelvin int16s[4] 107 ColorTempKelvin int16s 108 WB_RGGBLevelsFlash int16s[4] 112 ColorTempFlash int16s 113 WB_RGGBLevelsPC1 int16s[4] 117 ColorTempPC1 int16s 118 WB_RGGBLevelsPC2 int16s[4] 122 ColorTempPC2 int16s 123 WB_RGGBLevelsPC3 int16s[4] 127 ColorTempPC3 int16s 128 WB_RGGBLevelsCustom int16s[4] 132 ColorTempCustom int16s 133 ColorCalib? Canon ColorCalib 196 PerChannelBlackLevel int16u[4] 584 FlashOutput int16s 585 FlashBatteryLevel int16s 586 ColorTempFlashData int16s 647 MeasuredRGGBData int32u[4] =head3 Canon ColorData4 Tags These tags are used by the 1DmkIII, 1DSmkIII, 1DmkIV, 5DmkII, 7D, 40D, 50D, 60D, 450D, 500D, 550D, 1000D and 1100D. Index2 Tag Name Writable ------ -------- -------- 0 ColorDataVersion int16s 63 ColorCoefs Canon ColorCoefs 168 ColorCalib? Canon ColorCalib 231 AverageBlackLevel int16u[4] 640 RawMeasuredRGGB int32u[4] 692 PerChannelBlackLevel int16u[4] 696 NormalWhiteLevel int16u 697 SpecularWhiteLevel int16u 698 LinearityUpperMargin int16u 715 PerChannelBlackLevel int16u[4] 719 NormalWhiteLevel int16u PerChannelBlackLevel int16u[4] 720 SpecularWhiteLevel int16u 721 LinearityUpperMargin int16u 723 NormalWhiteLevel int16u 724 SpecularWhiteLevel int16u 725 LinearityUpperMargin int16u =head3 Canon ColorCoefs Tags Index2 Tag Name Writable ------ -------- -------- 0 WB_RGGBLevelsAsShot int16s[4] 4 ColorTempAsShot int16s 5 WB_RGGBLevelsAuto int16s[4] 9 ColorTempAuto int16s 10 WB_RGGBLevelsMeasured int16s[4] 14 ColorTempMeasured int16s 15 WB_RGGBLevelsUnknown? int16s[4] 19 ColorTempUnknown? int16s 20 WB_RGGBLevelsDaylight int16s[4] 24 ColorTempDaylight int16s 25 WB_RGGBLevelsShade int16s[4] 29 ColorTempShade int16s 30 WB_RGGBLevelsCloudy int16s[4] 34 ColorTempCloudy int16s 35 WB_RGGBLevelsTungsten int16s[4] 39 ColorTempTungsten int16s 40 WB_RGGBLevelsFluorescent int16s[4] 44 ColorTempFluorescent int16s 45 WB_RGGBLevelsKelvin int16s[4] 49 ColorTempKelvin int16s 50 WB_RGGBLevelsFlash int16s[4] 54 ColorTempFlash int16s 55 WB_RGGBLevelsUnknown2? int16s[4] 59 ColorTempUnknown2? int16s 60 WB_RGGBLevelsUnknown3? int16s[4] 64 ColorTempUnknown3? int16s 65 WB_RGGBLevelsUnknown4? int16s[4] 69 ColorTempUnknown4? int16s 70 WB_RGGBLevelsUnknown5? int16s[4] 74 ColorTempUnknown5? int16s 75 WB_RGGBLevelsUnknown6? int16s[4] 79 ColorTempUnknown6? int16s 80 WB_RGGBLevelsUnknown7? int16s[4] 84 ColorTempUnknown7? int16s 85 WB_RGGBLevelsUnknown8? int16s[4] 89 ColorTempUnknown8? int16s 90 WB_RGGBLevelsUnknown9? int16s[4] 94 ColorTempUnknown9? int16s 95 WB_RGGBLevelsUnknown10? int16s[4] 99 ColorTempUnknown10? int16s 100 WB_RGGBLevelsUnknown11? int16s[4] 104 ColorTempUnknown11? int16s 105 WB_RGGBLevelsUnknown12? int16s[4] 109 ColorTempUnknown12? int16s 110 WB_RGGBLevelsUnknown13? int16s[4] 114 ColorTempUnknown13? int16s =head3 Canon ColorData5 Tags These tags are used by the PowerShot G10. Index2 Tag Name Writable ------ -------- -------- 71 ColorCoefs Canon ColorCoefs 186 CameraColorCalibration01? int16s[5] 191 CameraColorCalibration02? int16s[5] 196 CameraColorCalibration03? int16s[5] 201 CameraColorCalibration04? int16s[5] 206 CameraColorCalibration05? int16s[5] 211 CameraColorCalibration06? int16s[5] 216 CameraColorCalibration07? int16s[5] 221 CameraColorCalibration08? int16s[5] 226 CameraColorCalibration09? int16s[5] 231 CameraColorCalibration10? int16s[5] 236 CameraColorCalibration11? int16s[5] 241 CameraColorCalibration12? int16s[5] 246 CameraColorCalibration13? int16s[5] 251 CameraColorCalibration14? int16s[5] 256 CameraColorCalibration15? int16s[5] 264 PerChannelBlackLevel int16s[4] =head3 Canon ColorData6 Tags These tags are used by the EOS 600D and 1200D. Index2 Tag Name Writable ------ -------- -------- 0 ColorDataVersion int16s 63 WB_RGGBLevelsAsShot int16s[4] 67 ColorTempAsShot int16s 68 WB_RGGBLevelsAuto int16s[4] 72 ColorTempAuto int16s 73 WB_RGGBLevelsMeasured int16s[4] 77 ColorTempMeasured int16s 78 WB_RGGBLevelsUnknown? int16s[4] 82 ColorTempUnknown? int16s 83 WB_RGGBLevelsUnknown2? int16s[4] 87 ColorTempUnknown2? int16s 88 WB_RGGBLevelsUnknown3? int16s[4] 92 ColorTempUnknown3? int16s 93 WB_RGGBLevelsUnknown4? int16s[4] 97 ColorTempUnknown4? int16s 98 WB_RGGBLevelsUnknown5? int16s[4] 102 ColorTempUnknown5? int16s 103 WB_RGGBLevelsDaylight int16s[4] 107 ColorTempDaylight int16s 108 WB_RGGBLevelsShade int16s[4] 112 ColorTempShade int16s 113 WB_RGGBLevelsCloudy int16s[4] 117 ColorTempCloudy int16s 118 WB_RGGBLevelsTungsten int16s[4] 122 ColorTempTungsten int16s 123 WB_RGGBLevelsFluorescent int16s[4] 127 ColorTempFluorescent int16s 128 WB_RGGBLevelsKelvin int16s[4] 132 ColorTempKelvin int16s 133 WB_RGGBLevelsFlash int16s[4] 137 ColorTempFlash int16s 138 WB_RGGBLevelsUnknown6? int16s[4] 142 ColorTempUnknown6? int16s 143 WB_RGGBLevelsUnknown7? int16s[4] 147 ColorTempUnknown7? int16s 148 WB_RGGBLevelsUnknown8? int16s[4] 152 ColorTempUnknown8? int16s 153 WB_RGGBLevelsUnknown9? int16s[4] 157 ColorTempUnknown9? int16s 158 WB_RGGBLevelsUnknown10? int16s[4] 162 ColorTempUnknown10? int16s 163 WB_RGGBLevelsUnknown11? int16s[4] 167 ColorTempUnknown11? int16s 168 WB_RGGBLevelsUnknown12? int16s[4] 172 ColorTempUnknown12? int16s 173 WB_RGGBLevelsUnknown13? int16s[4] 177 ColorTempUnknown13? int16s 178 WB_RGGBLevelsUnknown14? int16s[4] 182 ColorTempUnknown14? int16s 183 WB_RGGBLevelsUnknown15? int16s[4] 187 ColorTempUnknown15? int16s 188 ColorCalib? Canon ColorCalib 251 AverageBlackLevel int16u[4] 404 RawMeasuredRGGB int32u[4] 479 PerChannelBlackLevel int16u[4] 483 NormalWhiteLevel int16u 484 SpecularWhiteLevel int16u 485 LinearityUpperMargin int16u =head3 Canon ColorData7 Tags These tags are used by the EOS 1DX, 5DmkIII, 6D, 100D, 650D, 700D, M and 7DmkII. Index2 Tag Name Writable ------ -------- -------- 0 ColorDataVersion int16s 63 WB_RGGBLevelsAsShot int16s[4] 67 ColorTempAsShot int16s 68 WB_RGGBLevelsAuto int16s[4] 72 ColorTempAuto int16s 73 WB_RGGBLevelsMeasured int16s[4] 77 ColorTempMeasured int16s 78 WB_RGGBLevelsUnknown? int16s[4] 82 ColorTempUnknown? int16s 83 WB_RGGBLevelsUnknown2? int16s[4] 87 ColorTempUnknown2? int16s 88 WB_RGGBLevelsUnknown3? int16s[4] 92 ColorTempUnknown3? int16s 93 WB_RGGBLevelsUnknown4? int16s[4] 97 ColorTempUnknown4? int16s 98 WB_RGGBLevelsUnknown5? int16s[4] 102 ColorTempUnknown5? int16s 103 WB_RGGBLevelsUnknown6? int16s[4] 107 ColorTempUnknown6? int16s 108 WB_RGGBLevelsUnknown7? int16s[4] 112 ColorTempUnknown7? int16s 113 WB_RGGBLevelsUnknown8? int16s[4] 117 ColorTempUnknown8? int16s 118 WB_RGGBLevelsUnknown9? int16s[4] 122 ColorTempUnknown9? int16s 123 WB_RGGBLevelsUnknown10? int16s[4] 127 ColorTempUnknown10? int16s 128 WB_RGGBLevelsDaylight int16s[4] 132 ColorTempDaylight int16s 133 WB_RGGBLevelsShade int16s[4] 137 ColorTempShade int16s 138 WB_RGGBLevelsCloudy int16s[4] 142 ColorTempCloudy int16s 143 WB_RGGBLevelsTungsten int16s[4] 147 ColorTempTungsten int16s 148 WB_RGGBLevelsFluorescent int16s[4] 152 ColorTempFluorescent int16s 153 WB_RGGBLevelsKelvin int16s[4] 157 ColorTempKelvin int16s 158 WB_RGGBLevelsFlash int16s[4] 162 ColorTempFlash int16s 163 WB_RGGBLevelsUnknown11? int16s[4] 167 ColorTempUnknown11? int16s 168 WB_RGGBLevelsUnknown12? int16s[4] 172 ColorTempUnknown12? int16s 173 WB_RGGBLevelsUnknown13? int16s[4] 177 ColorTempUnknown13? int16s 178 WB_RGGBLevelsUnknown14? int16s[4] 182 ColorTempUnknown14? int16s 183 WB_RGGBLevelsUnknown15? int16s[4] 187 ColorTempUnknown15? int16s 188 WB_RGGBLevelsUnknown16? int16s[4] 192 ColorTempUnknown16? int16s 193 WB_RGGBLevelsUnknown17? int16s[4] 197 ColorTempUnknown17? int16s 198 WB_RGGBLevelsUnknown18? int16s[4] 202 ColorTempUnknown18? int16s 203 WB_RGGBLevelsUnknown19? int16s[4] 207 ColorTempUnknown19? int16s 208 WB_RGGBLevelsUnknown20? int16s[4] 212 ColorTempUnknown20? int16s 213 ColorCalib? Canon ColorCalib 276 AverageBlackLevel int16u[4] 429 RawMeasuredRGGB int32u[4] 504 PerChannelBlackLevel int16u[4] 508 NormalWhiteLevel int16u 509 SpecularWhiteLevel int16u 510 LinearityUpperMargin int16u 619 RawMeasuredRGGB int32u[4] 728 PerChannelBlackLevel int16u[4] 732 NormalWhiteLevel int16u 733 SpecularWhiteLevel int16u 734 LinearityUpperMargin int16u =head3 Canon ColorData8 Tags These tags are used by the EOS 5DS and EOS 5DS R. Index2 Tag Name Writable ------ -------- -------- 0 ColorDataVersion int16s 63 WB_RGGBLevelsAsShot int16s[4] 67 ColorTempAsShot int16s 68 WB_RGGBLevelsAuto int16s[4] 72 ColorTempAuto int16s 73 WB_RGGBLevelsMeasured int16s[4] 77 ColorTempMeasured int16s 78 WB_RGGBLevelsUnknown? int16s[4] 82 ColorTempUnknown? int16s 83 WB_RGGBLevelsUnknown2? int16s[4] 87 ColorTempUnknown2? int16s 88 WB_RGGBLevelsUnknown3? int16s[4] 92 ColorTempUnknown3? int16s 93 WB_RGGBLevelsUnknown4? int16s[4] 97 ColorTempUnknown4? int16s 98 WB_RGGBLevelsUnknown5? int16s[4] 102 ColorTempUnknown5? int16s 103 WB_RGGBLevelsUnknown6? int16s[4] 107 ColorTempUnknown6? int16s 108 WB_RGGBLevelsUnknown7? int16s[4] 112 ColorTempUnknown7? int16s 113 WB_RGGBLevelsUnknown8? int16s[4] 117 ColorTempUnknown8? int16s 118 WB_RGGBLevelsUnknown9? int16s[4] 122 ColorTempUnknown9? int16s 123 WB_RGGBLevelsUnknown10? int16s[4] 127 ColorTempUnknown10? int16s 128 WB_RGGBLevelsUnknown11? int16s[4] 132 ColorTempUnknown11? int16s 133 WB_RGGBLevelsDaylight int16s[4] 137 ColorTempDaylight int16s 138 WB_RGGBLevelsShade int16s[4] 142 ColorTempShade int16s 143 WB_RGGBLevelsCloudy int16s[4] 147 ColorTempCloudy int16s 148 WB_RGGBLevelsTungsten int16s[4] 152 ColorTempTungsten int16s 153 WB_RGGBLevelsFluorescent int16s[4] 157 ColorTempFluorescent int16s 158 WB_RGGBLevelsKelvin int16s[4] 162 ColorTempKelvin int16s 163 WB_RGGBLevelsFlash int16s[4] 167 ColorTempFlash int16s 168 WB_RGGBLevelsUnknown12? int16s[4] 172 ColorTempUnknown12? int16s 173 WB_RGGBLevelsUnknown13? int16s[4] 177 ColorTempUnknown13? int16s 178 WB_RGGBLevelsUnknown14? int16s[4] 182 ColorTempUnknown14? int16s 183 WB_RGGBLevelsUnknown15? int16s[4] 187 ColorTempUnknown15? int16s 188 WB_RGGBLevelsUnknown16? int16s[4] 192 ColorTempUnknown16? int16s 193 WB_RGGBLevelsUnknown17? int16s[4] 197 ColorTempUnknown17? int16s 198 WB_RGGBLevelsUnknown18? int16s[4] 202 ColorTempUnknown18? int16s 203 WB_RGGBLevelsUnknown19? int16s[4] 207 ColorTempUnknown19? int16s 208 WB_RGGBLevelsUnknown20? int16s[4] 212 ColorTempUnknown20? int16s 213 WB_RGGBLevelsUnknown21? int16s[4] 217 ColorTempUnknown21? int16s 218 WB_RGGBLevelsUnknown22? int16s[4] 222 ColorTempUnknown22? int16s 223 WB_RGGBLevelsUnknown23? int16s[4] 227 ColorTempUnknown23? int16s 228 WB_RGGBLevelsUnknown24? int16s[4] 232 ColorTempUnknown24? int16s 233 WB_RGGBLevelsUnknown25? int16s[4] 237 ColorTempUnknown25? int16s 238 WB_RGGBLevelsUnknown26? int16s[4] 242 ColorTempUnknown26? int16s 243 WB_RGGBLevelsUnknown27? int16s[4] 247 ColorTempUnknown27? int16s 248 WB_RGGBLevelsUnknown28? int16s[4] 252 ColorTempUnknown28? int16s 253 WB_RGGBLevelsUnknown29? int16s[4] 257 ColorTempUnknown29? int16s 258 WB_RGGBLevelsUnknown30? int16s[4] 262 ColorTempUnknown30? int16s 263 ColorCalib? Canon ColorCalib 326 AverageBlackLevel int16u[4] 778 PerChannelBlackLevel int16u[4] 782 NormalWhiteLevel int16u 783 SpecularWhiteLevel int16u 784 LinearityUpperMargin int16u =head3 Canon ColorDataUnknown Tags Index2 Tag Name Writable ------ -------- -------- 0 ColorDataVersion N =head3 Canon ColorInfo Tags Index2 Tag Name Writable ------ -------- -------- 1 Saturation int16s 2 ColorTone int16s 3 ColorSpace int16s =head3 Canon AFMicroAdj Tags Index4 Tag Name Writable ------ -------- -------- 1 AFMicroAdjMode int32s 2 AFMicroAdjValue rational64s =head3 Canon VignettingCorr Tags This information is found in images from newer EOS models. Index2 Tag Name Writable ------ -------- -------- 0 VignettingCorrVersion N 2 PeripheralLighting int16s 4 ChromaticAberrationCorr int16s 5 ChromaticAberrationCorr int16s 6 PeripheralLightingValue int16s 11 OriginalImageWidth int16s 12 OriginalImageHeight int16s =head3 Canon VignettingCorrUnknown Tags Vignetting correction from PowerShot models. Index2 Tag Name Writable ------ -------- -------- 0 VignettingCorrVersion N =head3 Canon VignettingCorr2 Tags Index4 Tag Name Writable ------ -------- -------- 5 PeripheralLightingSetting int32s 6 ChromaticAberrationSetting int32s =head3 Canon LightingOpt Tags This information is new in images from the EOS 7D. Index4 Tag Name Writable ------ -------- -------- 1 PeripheralIlluminationCorr int32s 2 AutoLightingOptimizer int32s 3 HighlightTonePriority int32s 4 LongExposureNoiseReduction int32s 5 HighISONoiseReduction int32s =head3 Canon LensInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 LensSerialNumber undef[5] =head3 Canon Ambience Tags Index4 Tag Name Writable ------ -------- -------- 1 AmbienceSelection int32s =head3 Canon MultiExp Tags Index4 Tag Name Writable ------ -------- -------- 1 MultiExposure int32s 2 MultiExposureControl int32s 3 MultiExposureShots int32s =head3 Canon FilterInfo Tags Information about creative filter settings. Tag ID Tag Name Writable ------ -------- -------- 0x0101 GrainyBWFilter N 0x0201 SoftFocusFilter N 0x0301 ToyCameraFilter N 0x0401 MiniatureFilter N 0x0402 MiniatureFilterOrientation N 0x0403 MiniatureFilterPosition N 0x0404 MiniatureFilterParameter N 0x0501 FisheyeFilter N 0x0601 PaintingFilter N 0x0701 WatercolorFilter N =head3 Canon HDRInfo Tags Index4 Tag Name Writable ------ -------- -------- 1 HDR int32s 2 HDREffect int32s =head3 Canon AFConfig Tags Index4 Tag Name Writable ------ -------- -------- 1 AFConfigTool int32s 2 AFTrackingSensitivity int32s 3 AFAccelDecelTracking int32s 4 AFPointSwitching int32s =head3 Canon CNOP Tags Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head3 Canon CNTH Tags Canon-specific QuickTime tags found in the CNTH atom of MOV videos from some cameras such as the PowerShot S95. Tag ID Tag Name Writable ------ -------- -------- 'CNDA' ThumbnailImage N =head3 Canon uuid Tags Tags extracted from the uuid atom of MP4 videos from cameras such as the SX280. Tag ID Tag Name Writable ------ -------- -------- 'CNCV' CompressorVersion N 'CNTH' CanonCNTH Canon CNTH =head3 Canon Skip Tags Information found in the "skip" atom of Canon MOV videos. Tag ID Tag Name Writable ------ -------- -------- 'CNDB' Unknown_CNDB? N =head2 CanonCustom Tags =head3 CanonCustom Functions1D Tags These custom functions are used by all 1D models up to but not including the Mark III. Tag ID Tag Name Writable ------ -------- -------- 0 FocusingScreen int8u 1 FinderDisplayDuringExposure int8u 2 ShutterReleaseNoCFCard int8u 3 ISOSpeedExpansion int8u 4 ShutterAELButton int8u 5 ManualTv int8u 6 ExposureLevelIncrements int8u 7 USMLensElectronicMF int8u 8 LCDPanels int8u 9 AEBSequenceAutoCancel int8u 10 AFPointIllumination int8u 11 AFPointSelection int8u 12 MirrorLockup int8u 13 AFPointSpotMetering int8u 14 FillFlashAutoReduction int8u 15 ShutterCurtainSync int8u 16 SafetyShiftInAvOrTv int8u 17 AFPointActivationArea int8u 18 SwitchToRegisteredAFPoint int8u 19 LensAFStopButton int8u 20 AIServoTrackingSensitivity int8u 21 AIServoContinuousShooting int8u =head3 CanonCustom Functions5D Tags Tag ID Tag Name Writable ------ -------- -------- 0 FocusingScreen int8u 1 SetFunctionWhenShooting int8u 2 LongExposureNoiseReduction int8u 3 FlashSyncSpeedAv int8u 4 Shutter-AELock int8u 5 AFAssistBeam int8u 6 ExposureLevelIncrements int8u 7 FlashFiring int8u 8 ISOExpansion int8u 9 AEBSequenceAutoCancel int8u 10 SuperimposedDisplay int8u 11 MenuButtonDisplayPosition int8u 12 MirrorLockup int8u 13 AFPointSelectionMethod int8u 14 ETTLII int8u 15 ShutterCurtainSync int8u 16 SafetyShiftInAvOrTv int8u 17 AFPointActivationArea int8u 18 LCDDisplayReturnToShoot int8u 19 LensAFStopButton int8u 20 AddOriginalDecisionData int8u =head3 CanonCustom Functions10D Tags Tag ID Tag Name Writable ------ -------- -------- 1 SetButtonWhenShooting int8u 2 ShutterReleaseNoCFCard int8u 3 FlashSyncSpeedAv int8u 4 Shutter-AELock int8u 5 AFAssist int8u 6 ExposureLevelIncrements int8u 7 AFPointRegistration int8u 8 RawAndJpgRecording int8u 9 AEBSequenceAutoCancel int8u 10 SuperimposedDisplay int8u 11 MenuButtonDisplayPosition int8u 12 MirrorLockup int8u 13 AssistButtonFunction int8u 14 FillFlashAutoReduction int8u 15 ShutterCurtainSync int8u 16 SafetyShiftInAvOrTv int8u 17 LensAFStopButton int8u =head3 CanonCustom Functions20D Tags Tag ID Tag Name Writable ------ -------- -------- 0 SetFunctionWhenShooting int8u 1 LongExposureNoiseReduction int8u 2 FlashSyncSpeedAv int8u 3 Shutter-AELock int8u 4 AFAssistBeam int8u 5 ExposureLevelIncrements int8u 6 FlashFiring int8u 7 ISOExpansion int8u 8 AEBSequenceAutoCancel int8u 9 SuperimposedDisplay int8u 10 MenuButtonDisplayPosition int8u 11 MirrorLockup int8u 12 AFPointSelectionMethod int8u 13 ETTLII int8u 14 ShutterCurtainSync int8u 15 SafetyShiftInAvOrTv int8u 16 LensAFStopButton int8u 17 AddOriginalDecisionData int8u =head3 CanonCustom Functions30D Tags Tag ID Tag Name Writable ------ -------- -------- 1 SetFunctionWhenShooting int8u 2 LongExposureNoiseReduction int8u 3 FlashSyncSpeedAv int8u 4 Shutter-AELock int8u 5 AFAssistBeam int8u 6 ExposureLevelIncrements int8u 7 FlashFiring int8u 8 ISOExpansion int8u 9 AEBSequenceAutoCancel int8u 10 SuperimposedDisplay int8u 11 MenuButtonDisplayPosition int8u 12 MirrorLockup int8u 13 AFPointSelectionMethod int8u 14 ETTLII int8u 15 ShutterCurtainSync int8u 16 SafetyShiftInAvOrTv int8u 17 MagnifiedView int8u 18 LensAFStopButton int8u 19 AddOriginalDecisionData int8u =head3 CanonCustom Functions350D Tags Tag ID Tag Name Writable ------ -------- -------- 0 SetButtonCrossKeysFunc int8u 1 LongExposureNoiseReduction int8u 2 FlashSyncSpeedAv int8u 3 Shutter-AELock int8u 4 AFAssistBeam int8u 5 ExposureLevelIncrements int8u 6 MirrorLockup int8u 7 ETTLII int8u 8 ShutterCurtainSync int8u =head3 CanonCustom Functions400D Tags Tag ID Tag Name Writable ------ -------- -------- 0 SetButtonCrossKeysFunc int8u 1 LongExposureNoiseReduction int8u 2 FlashSyncSpeedAv int8u 3 Shutter-AELock int8u 4 AFAssistBeam int8u 5 ExposureLevelIncrements int8u 6 MirrorLockup int8u 7 ETTLII int8u 8 ShutterCurtainSync int8u 9 MagnifiedView int8u 10 LCDDisplayAtPowerOn int8u =head3 CanonCustom FunctionsD30 Tags Custom functions for the EOS D30 and D60. Tag ID Tag Name Writable ------ -------- -------- 1 LongExposureNoiseReduction int8u 2 Shutter-AELock int8u 3 MirrorLockup int8u 4 ExposureLevelIncrements int8u 5 AFAssist int8u 6 FlashSyncSpeedAv int8u 7 AEBSequenceAutoCancel int8u 8 ShutterCurtainSync int8u 9 LensAFStopButton int8u 10 FillFlashAutoReduction int8u 11 MenuButtonReturn int8u 12 SetButtonWhenShooting int8u 13 SensorCleaning int8u 14 SuperimposedDisplay int8u 15 ShutterReleaseNoCFCard int8u =head3 CanonCustom FuncsUnknown Tags Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head3 CanonCustom PersonalFuncs Tags Personal function settings for the EOS-1D. Index2 Tag Name Writable ------ -------- -------- 1 PF0CustomFuncRegistration int16u 2 PF1DisableShootingModes int16u 3 PF2DisableMeteringModes int16u 4 PF3ManualExposureMetering int16u 5 PF4ExposureTimeLimits int16u 6 PF5ApertureLimits int16u 7 PF6PresetShootingModes int16u 8 PF7BracketContinuousShoot int16u 9 PF8SetBracketShots int16u 10 PF9ChangeBracketSequence int16u 11 PF10RetainProgramShift int16u 14 PF13DrivePriority int16u 15 PF14DisableFocusSearch int16u 16 PF15DisableAFAssistBeam int16u 17 PF16AutoFocusPointShoot int16u 18 PF17DisableAFPointSel int16u 19 PF18EnableAutoAFPointSel int16u 20 PF19ContinuousShootSpeed int16u 21 PF20LimitContinousShots int16u 22 PF21EnableQuietOperation int16u 24 PF23SetTimerLengths int16u 25 PF24LightLCDDuringBulb int16u 26 PF25DefaultClearSettings int16u 27 PF26ShortenReleaseLag int16u 28 PF27ReverseDialRotation int16u 29 PF28NoQuickDialExpComp int16u 30 PF29QuickDialSwitchOff int16u 31 PF30EnlargementMode int16u 32 PF31OriginalDecisionData int16u =head3 CanonCustom PersonalFuncValues Tags Index2 Tag Name Writable ------ -------- -------- 1 PF1Value int16u 2 PF2Value int16u 3 PF3Value int16u 4 PF4ExposureTimeMin int16u 5 PF4ExposureTimeMax int16u 6 PF5ApertureMin int16u 7 PF5ApertureMax int16u 8 PF8BracketShots int16u 9 PF19ShootingSpeedLow int16u 10 PF19ShootingSpeedHigh int16u 11 PF20MaxContinousShots int16u 12 PF23ShutterButtonTime int16u 13 PF23FELockTime int16u 14 PF23PostReleaseTime int16u 15 PF25AEMode int16u 16 PF25MeteringMode int16u 17 PF25DriveMode int16u 18 PF25AFMode int16u 19 PF25AFPointSel int16u 20 PF25ImageSize int16u 21 PF25WBMode int16u 22 PF25Parameters int16u 23 PF25ColorMatrix int16u 24 PF27Value int16u =head3 CanonCustom Functions2 Tags Beginning with the EOS 1D Mark III, Canon finally created a set of custom function tags which are (reasonably) consistent across models. The EOS 1D Mark III has 57 custom function tags divided into four main groups: 1. Exposure (0x0101-0x010f), 2. Image (0x0201-0x0203), Flash Exposure (0x0304-0x0306) and Display (0x0407-0x0409), 3. Auto Focus (0x0501-0x050e) and Drive (0x060f-0x0611), and 4. Operation (0x0701-0x070a) and Others (0x080b-0x0810). The table below lists tags used by the EOS 1D Mark III, as well as newer tags and values added by later models. Tag ID Tag Name Writable ------ -------- -------- 0x0101 ExposureLevelIncrements int32s 0x0102 ISOSpeedIncrements int32s 0x0103 ISOSpeedRange int32s[3] ISOExpansion int32s 0x0104 AEBAutoCancel int32s 0x0105 AEBSequence int32s 0x0106 AEBShotCount int32s AEBShotCount int32s[2] 0x0107 SpotMeterLinkToAFPoint int32s 0x0108 SafetyShift int32s 0x0109 UsableShootingModes int32s[2] 0x010a UsableMeteringModes int32s[2] 0x010b ExposureModeInManual int32s 0x010c ShutterSpeedRange int32s[3] 0x010d ApertureRange int32s[3] 0x010e ApplyShootingMeteringMode int32s[8] 0x010f FlashSyncSpeedAv int32s 0x0110 AEMicroadjustment int32s[3] 0x0111 FEMicroadjustment int32s[3] 0x0112 SameExposureForNewAperture int32s 0x0201 LongExposureNoiseReduction int32s 0x0202 HighISONoiseReduction int32s 0x0203 HighlightTonePriority int32s 0x0204 AutoLightingOptimizer int32s 0x0304 ETTLII int32s 0x0305 ShutterCurtainSync int32s 0x0306 FlashFiring int32s 0x0407 ViewInfoDuringExposure int32s 0x0408 LCDIlluminationDuringBulb int32s 0x0409 InfoButtonWhenShooting int32s 0x040a ViewfinderWarnings int32s 0x040b LVShootingAreaDisplay int32s 0x040c LVShootingAreaDisplay int32s 0x0501 USMLensElectronicMF int32s 0x0502 AIServoTrackingSensitivity int32s 0x0503 AIServoImagePriority int32s 0x0504 AIServoTrackingMethod int32s 0x0505 LensDriveNoAF int32s 0x0506 LensAFStopButton int32s 0x0507 AFMicroadjustment int32s[5] 0x0508 AFPointAreaExpansion int32s 0x0509 SelectableAFPoint int32s 0x050a SwitchToRegisteredAFPoint int32s 0x050b AFPointAutoSelection int32s 0x050c AFPointDisplayDuringFocus int32s 0x050d AFPointBrightness int32s 0x050e AFAssistBeam int32s 0x050f AFPointSelectionMethod int32s 0x0510 VFDisplayIllumination int32s SuperimposedDisplay int32s 0x0511 AFDuringLiveView int32s 0x0512 SelectAFAreaSelectMode int32s 0x0513 ManualAFPointSelectPattern int32s 0x0514 DisplayAllAFPoints int32s 0x0515 FocusDisplayAIServoAndMF int32s 0x0516 OrientationLinkedAFPoint int32s 0x0517 MultiControllerWhileMetering int32s 0x0518 AccelerationTracking int32s 0x0519 AIServoFirstImagePriority int32s 0x051a AIServoSecondImagePriority int32s 0x051b AFAreaSelectMethod int32s 0x051c AutoAFPointColorTracking int32s 0x051d VFDisplayIllumination int32s 0x060f MirrorLockup int32s 0x0610 ContinuousShootingSpeed int32s[3] 0x0611 ContinuousShotLimit int32s[2] 0x0612 RestrictDriveModes int32s[2] 0x0701 Shutter-AELock int32s AFAndMeteringButtons int32s ShutterButtonAFOnButton int32s 0x0702 AFOnAELockButtonSwitch int32s 0x0703 QuickControlDialInMeter int32s 0x0704 SetButtonWhenShooting int32s 0x0705 ManualTv int32s 0x0706 DialDirectionTvAv int32s 0x0707 AvSettingWithoutLens int32s 0x0708 WBMediaImageSizeSetting int32s 0x0709 LockMicrophoneButton int32s 0x070a ButtonFunctionControlOff int32s 0x070b AssignFuncButton int32s 0x070c CustomControls int32s 0x070d StartMovieShooting int32s 0x070e FlashButtonFunction int32s 0x070f MultiFunctionLock int32s 0x0710 TrashButtonFunction int32s 0x0711 ShutterReleaseWithoutLens int32s 0x080b FocusingScreen int32s 0x080c TimerLength int32s[4] 0x080d ShortReleaseTimeLag int32s 0x080e AddAspectRatioInfo int32s 0x080f AddOriginalDecisionData int32s 0x0810 LiveViewExposureSimulation int32s 0x0811 LCDDisplayAtPowerOn int32s 0x0812 MemoAudioQuality int32s 0x0813 DefaultEraseOption int32s 0x0814 RetractLensOnPowerOff int32s =head2 CanonVRD Tags Canon Digital Photo Professional writes VRD (Recipe Data) information as a trailer record to JPEG, TIFF, CRW and CR2 images, or as stand-alone VRD or DR4 files. The tags listed below represent information found in these records. The complete VRD/DR4 data record may be accessed as a block using the Extra 'CanonVRD' or 'CanonDR4' tag, but this tag is not extracted or copied unless specified explicitly. Tag ID Tag Name Writable ------ -------- -------- 0xffff00f4 EditData CanonVRD Edit 0xffff00f5 IHLData CanonVRD IHL 0xffff00f6 XMP XMP 0xffff00f7 Edit4Data CanonVRD Edit4 =head3 CanonVRD Edit Tags Canon VRD edit information. Index Tag Name Writable ----- -------- -------- 0 VRD1 CanonVRD Ver1 1 VRDStampTool CanonVRD StampTool 2 VRD2 CanonVRD Ver2 =head3 CanonVRD Ver1 Tags Index1 Tag Name Writable ------ -------- -------- 2 VRDVersion N 6 WBAdjRGGBLevels int16u[4] 24 WhiteBalanceAdj int16u 26 WBAdjColorTemp int16u 36 WBFineTuneActive int16u 40 WBFineTuneSaturation int16u 44 WBFineTuneTone int16u 46 RawColorAdj int16u 48 RawCustomSaturation int32s 52 RawCustomTone int32s 56 RawBrightnessAdj int32s 60 ToneCurveProperty int16u 122 DynamicRangeMin int16u 124 DynamicRangeMax int16u 272 ToneCurveActive int16u 275 ToneCurveMode int8u 276 BrightnessAdj int8s 277 ContrastAdj int8s 278 SaturationAdj int16s 286 ColorToneAdj int32s 294 LuminanceCurvePoints int16u[21] 336 LuminanceCurveLimits int16u[4] 345 ToneCurveInterpolation int8u 352 RedCurvePoints int16u[21] 394 RedCurveLimits int16u[4] 410 GreenCurvePoints int16u[21] 452 GreenCurveLimits int16u[4] 468 BlueCurvePoints int16u[21] 510 BlueCurveLimits int16u[4] 526 RGBCurvePoints int16u[21] 568 RGBCurveLimits int16u[4] 580 CropActive int16u 582 CropLeft int16u 584 CropTop int16u 586 CropWidth int16u 588 CropHeight int16u 602 SharpnessAdj int16u 608 CropAspectRatio int16u 610 ConstrainedCropWidth float 614 ConstrainedCropHeight float 618 CheckMark int16u 622 Rotation int16u 624 WorkColorSpace int16u =head3 CanonVRD StampTool Tags Index1 Tag Name Writable ------ -------- -------- 0 StampToolCount N =head3 CanonVRD Ver2 Tags Tags added in DPP version 2.0 and later. Index2 Tag Name Writable ------ -------- -------- 2 PictureStyle int16s 3 IsCustomPictureStyle int16s 13 StandardRawColorTone int16s 14 StandardRawSaturation int16s 15 StandardRawContrast int16s 16 StandardRawLinear int16s 17 StandardRawSharpness int16s 18 StandardRawHighlightPoint int16s 19 StandardRawShadowPoint int16s 20 StandardOutputHighlightPoint int16s 21 StandardOutputShadowPoint int16s 22 PortraitRawColorTone int16s 23 PortraitRawSaturation int16s 24 PortraitRawContrast int16s 25 PortraitRawLinear int16s 26 PortraitRawSharpness int16s 27 PortraitRawHighlightPoint int16s 28 PortraitRawShadowPoint int16s 29 PortraitOutputHighlightPoint int16s 30 PortraitOutputShadowPoint int16s 31 LandscapeRawColorTone int16s 32 LandscapeRawSaturation int16s 33 LandscapeRawContrast int16s 34 LandscapeRawLinear int16s 35 LandscapeRawSharpness int16s 36 LandscapeRawHighlightPoint int16s 37 LandscapeRawShadowPoint int16s 38 LandscapeOutputHighlightPoint int16s 39 LandscapeOutputShadowPoint int16s 40 NeutralRawColorTone int16s 41 NeutralRawSaturation int16s 42 NeutralRawContrast int16s 43 NeutralRawLinear int16s 44 NeutralRawSharpness int16s 45 NeutralRawHighlightPoint int16s 46 NeutralRawShadowPoint int16s 47 NeutralOutputHighlightPoint int16s 48 NeutralOutputShadowPoint int16s 49 FaithfulRawColorTone int16s 50 FaithfulRawSaturation int16s 51 FaithfulRawContrast int16s 52 FaithfulRawLinear int16s 53 FaithfulRawSharpness int16s 54 FaithfulRawHighlightPoint int16s 55 FaithfulRawShadowPoint int16s 56 FaithfulOutputHighlightPoint int16s 57 FaithfulOutputShadowPoint int16s 58 MonochromeFilterEffect int16s 59 MonochromeToningEffect int16s 60 MonochromeContrast int16s 61 MonochromeLinear int16s 62 MonochromeSharpness int16s 63 MonochromeRawHighlightPoint int16s 64 MonochromeRawShadowPoint int16s 65 MonochromeOutputHighlightPoint int16s 66 MonochromeOutputShadowPoint int16s 69 UnknownContrast? int16s 70 UnknownLinear? int16s 71 UnknownSharpness? int16s 72 UnknownRawHighlightPoint? int16s 73 UnknownRawShadowPoint? int16s 74 UnknownOutputHighlightPoint? int16s 75 UnknownOutputShadowPoint? int16s 76 CustomColorTone int16s 77 CustomSaturation int16s 78 CustomContrast int16s 79 CustomLinear int16s 80 CustomSharpness int16s 81 CustomRawHighlightPoint int16s 82 CustomRawShadowPoint int16s 83 CustomOutputHighlightPoint int16s 84 CustomOutputShadowPoint int16s 88 CustomPictureStyleData N 94 ChrominanceNoiseReduction int16s 95 LuminanceNoiseReduction int16s 96 ChrominanceNR_TIFF_JPEG int16s 98 ChromaticAberrationOn int16s 99 DistortionCorrectionOn int16s 100 PeripheralIlluminationOn int16s 101 ColorBlur int16s 102 ChromaticAberration int16s 103 DistortionCorrection int16s 104 PeripheralIllumination int16s 105 AberrationCorrectionDistance int16s 106 ChromaticAberrationRed int16s 107 ChromaticAberrationBlue int16s 109 LuminanceNR_TIFF_JPEG int16s 110 AutoLightingOptimizerOn int16s 111 AutoLightingOptimizer int16s 117 StandardRawHighlight int16s 118 PortraitRawHighlight int16s 119 LandscapeRawHighlight int16s 120 NeutralRawHighlight int16s 121 FaithfulRawHighlight int16s 122 MonochromeRawHighlight int16s 123 UnknownRawHighlight? int16s 124 CustomRawHighlight int16s 126 StandardRawShadow int16s 127 PortraitRawShadow int16s 128 LandscapeRawShadow int16s 129 NeutralRawShadow int16s 130 FaithfulRawShadow int16s 131 MonochromeRawShadow int16s 132 UnknownRawShadow? int16s 133 CustomRawShadow int16s 139 AngleAdj int32s 142 CheckMark2 int16u 144 UnsharpMask int16s 146 StandardUnsharpMaskStrength int16s 148 StandardUnsharpMaskFineness int16s 150 StandardUnsharpMaskThreshold int16s 152 PortraitUnsharpMaskStrength int16s 154 PortraitUnsharpMaskFineness int16s 156 PortraitUnsharpMaskThreshold int16s 158 LandscapeUnsharpMaskStrength int16s 160 LandscapeUnsharpMaskFineness int16s 162 LandscapeUnsharpMaskThreshold int16s 164 NeutraUnsharpMaskStrength int16s 166 NeutralUnsharpMaskFineness int16s 168 NeutralUnsharpMaskThreshold int16s 170 FaithfulUnsharpMaskStrength int16s 172 FaithfulUnsharpMaskFineness int16s 174 FaithfulUnsharpMaskThreshold int16s 176 MonochromeUnsharpMaskStrength int16s 178 MonochromeUnsharpMaskFineness int16s 180 MonochromeUnsharpMaskThreshold int16s 182 CustomUnsharpMaskStrength int16s 184 CustomUnsharpMaskFineness int16s 186 CustomUnsharpMaskThreshold int16s 188 CustomDefaultUnsharpStrength int16s 190 CustomDefaultUnsharpFineness int16s 192 CustomDefaultUnsharpThreshold int16s 214 CropCircleActive int16s 215 CropCircleX int16s 216 CropCircleY int16s 217 CropCircleRadius int16s 220 DLOOn int16s 221 DLOSetting int16s 222 DLOShootingDistance int16s 223 DLODataLength N 224 DLOInfo CanonVRD DLOInfo 225 CameraRawColorTone int16s 226 CameraRawSaturation int16s 227 CameraRawContrast int16s 228 CameraRawLinear int16s 229 CameraRawSharpness int16s 230 CameraRawHighlightPoint int16s 231 CameraRawShadowPoint int16s 232 CameraRawOutputHighlightPoint int16s 233 CameraRawOutputShadowPoint int16s =head3 CanonVRD DLOInfo Tags Tags added when DLO (Digital Lens Optimizer) is on. Index2 Tag Name Writable ------ -------- -------- 4 DLOSettingApplied int16s 5 DLOVersion string[10] 10 DLOData N =head3 CanonVRD IHL Tags Tag ID Tag Name Writable ------ -------- -------- 0x0001 IHL_EXIF EXIF IHL_EXIF? N 0x0003 ThumbnailImage N 0x0004 PreviewImage N 0x0005 RawCodecVersion N 0x0006 CRCDevelParams? N =head3 CanonVRD Edit4 Tags Canon DPP version 4 edit information. Index Tag Name Writable ----- -------- -------- 0 DR4 CanonVRD DR4 =head3 CanonVRD DR4 Tags Tags written by Canon DPP version 4 in CanonVRD trailers and DR4 files. Each tag has three associated flag words which are stored with the directory entry, some of which are extracted as a separate tag, indicated in the table below by a decimal appended to the tag ID (.0, .1 or .2). Tag ID Tag Name Writable ------ -------- -------- 'header' DR4Header CanonVRD DR4Header 0x10002 Rotation Y 0x10003 AngleAdj Y 0x10021 CustomPictureStyle Y 0x10101 CheckMark Y 0x10200 WorkColorSpace Y 0x20001 RawBrightnessAdj Y 0x20101 WhiteBalanceAdj Y 0x20102 WBAdjColorTemp Y 0x20105 WBAdjMagentaGreen Y 0x20106 WBAdjBlueAmber Y 0x20125 WBAdjRGGBLevels Y 0x20200 GammaLinear Y 0x20301 PictureStyle Y 0x20303 ContrastAdj Y 0x20304 ColorToneAdj Y 0x20305 ColorSaturationAdj Y 0x20306 MonochromeToningEffect Y 0x20307 MonochromeFilterEffect Y 0x20308 UnsharpMaskStrength Y 0x20309 UnsharpMaskFineness Y 0x2030a UnsharpMaskThreshold Y 0x2030b ShadowAdj Y 0x2030c HighlightAdj Y 0x20310 SharpnessAdj Y 0x20310.0 SharpnessAdjOn Y 0x20311 SharpnessStrength Y 0x20400 ToneCurve CanonVRD ToneCurve 0x20400.1 ToneCurveOriginal Y 0x20410 ToneCurveBrightness Y 0x20411 ToneCurveContrast Y 0x20500 AutoLightingOptimizer Y 0x20500.0 AutoLightingOptimizerOn Y 0x20600 LuminanceNoiseReduction Y 0x20601 ChrominanceNoiseReduction Y 0x20701 ShootingDistance Y 0x20702 PeripheralIllumination Y 0x20702.0 PeripheralIlluminationOn Y 0x20703 ChromaticAberration Y 0x20703.0 ChromaticAberrationOn Y 0x20704 ColorBlurOn Y 0x20705 DistortionCorrection Y 0x20705.0 DistortionCorrectionOn Y 0x20706 DLOSetting Y 0x20706.0 DLOOn Y 0x20707 ChromaticAberrationRed Y 0x20708 ChromaticAberrationBlue Y 0x20709 DistortionEffect Y 0x20900 ColorHue Y 0x20901 SaturationAdj Y 0x20910 RedHSL Y 0x20911 OrangeHSL Y 0x20912 GreenHSL Y 0x20913 AquaHSL Y 0x20914 BlueHSL Y 0x20915 BlueHSL Y 0x20916 PurpleHSL Y 0x20917 MagentaHSL Y 0x20a00 GammaInfo CanonVRD GammaInfo 0x30101 CropAspectRatio Y 0x30102 CropAspectRatioCustom Y 0xf0100 CropInfo CanonVRD CropInfo 0xf0500 CustomPictureStyleData Y 0xf0510 StampInfo CanonVRD StampInfo 0xf0511 DustInfo CanonVRD DustInfo 0xf0512 LensFocalLength Y =head3 CanonVRD DR4Header Tags Index4 Tag Name Writable ------ -------- -------- 3 DR4CameraModel int32u =head3 CanonVRD ToneCurve Tags Index4 Tag Name Writable ------ -------- -------- 0 ToneCurveColorSpace int32u 1 ToneCurveShape int32u 3 ToneCurveInputRange int32u[2] 5 ToneCurveOutputRange int32u[2] 7 RGBCurvePoints int32u[21] 10 ToneCurveX int32u 11 ToneCurveY int32u 45 RedCurvePoints int32u[21] 83 GreenCurvePoints int32u[21] 121 BlueCurvePoints int32u[21] =head3 CanonVRD GammaInfo Tags Index8 Tag Name Writable ------ -------- -------- 2 GammaContrast double 3 GammaColorTone double 4 GammaSaturation double 5 GammaUnsharpMaskStrength double 6 GammaUnsharpMaskFineness double 7 GammaUnsharpMaskThreshold double 8 GammaSharpnessStrength double 9 GammaShadow double 10 GammaHighlight double 12 GammaBlackPoint double 13 GammaWhitePoint double 14 GammaMidPoint double 15 GammaCurveOutputRange double[2] =head3 CanonVRD CropInfo Tags Index4 Tag Name Writable ------ -------- -------- 0 CropActive int32s 1 CropRotatedOriginalWidth int32s 2 CropRotatedOriginalHeight int32s 3 CropX int32s 4 CropY int32s 5 CropWidth int32s 6 CropHeight int32s 8 CropRotation double 10 CropOriginalWidth int32s 11 CropOriginalHeight int32s =head3 CanonVRD StampInfo Tags Index4 Tag Name Writable ------ -------- -------- 2 StampToolCount N =head3 CanonVRD DustInfo Tags Index4 Tag Name Writable ------ -------- -------- 2 DustDeleteApplied N =head2 Casio Tags Tag ID Tag Name Writable ------ -------- -------- 0x0001 RecordingMode int16u 0x0002 Quality int16u 0x0003 FocusMode int16u 0x0004 FlashMode int16u 0x0005 FlashIntensity int16u 0x0006 ObjectDistance int32u 0x0007 WhiteBalance int16u 0x000a DigitalZoom int32u 0x000b Sharpness int16u 0x000c Contrast int16u 0x000d Saturation int16u 0x0014 ISO int16u 0x0015 FirmwareDate string[18] 0x0016 Enhancement int16u 0x0017 ColorFilter int16u 0x0018 AFPoint int16u 0x0019 FlashIntensity int16u 0x0e00 PrintIM PrintIM =head3 Casio Type2 Tags Tag ID Tag Name Writable ------ -------- -------- 0x0002 PreviewImageSize int16u[2] 0x0003 PreviewImageLength int32u* 0x0004 PreviewImageStart int32u* 0x0008 QualityMode int16u 0x0009 CasioImageSize int16u 0x000d FocusMode int16u 0x0014 ISO int16u 0x0019 WhiteBalance int16u 0x001d FocalLength rational64u 0x001f Saturation int16u 0x0020 Contrast int16u 0x0021 Sharpness int16u 0x0e00 PrintIM PrintIM 0x2000 PreviewImage undef 0x2001 FirmwareDate string[18] 0x2011 WhiteBalanceBias int16u[2] 0x2012 WhiteBalance int16u 0x2021 AFPointPosition int16u[4]~ 0x2022 ObjectDistance int32u 0x2034 FlashDistance int16u 0x2076 SpecialEffectMode int8u[3] 0x2089 FaceInfo1 Casio FaceInfo1 FaceInfo2 Casio FaceInfo2 FaceInfoUnknown? Y 0x211c FacesDetected int8u 0x3000 RecordMode int16u 0x3001 ReleaseMode int16u 0x3002 Quality int16u 0x3003 FocusMode int16u 0x3006 HometownCity string 0x3007 BestShotMode int16u 0x3008 AutoISO int16u 0x3009 AFMode int16u 0x3011 Sharpness undef[2] 0x3012 Contrast undef[2] 0x3013 Saturation undef[2] 0x3014 ISO int16u 0x3015 ColorMode int16u 0x3016 Enhancement int16u 0x3017 ColorFilter int16u 0x301b ArtMode int16u 0x301c SequenceNumber int16u 0x301d BracketSequence int16u[2] 0x3020 ImageStabilization int16u 0x302a LightingMode int16u 0x302b PortraitRefiner int16u 0x3030 SpecialEffectLevel int16u 0x3031 SpecialEffectSetting int16u 0x3103 DriveMode int16u 0x310b ArtModeParameters int8u[3] 0x4001 CaptureFrameRate int16u[n] 0x4003 VideoQuality int16u =head3 Casio FaceInfo1 Tags Face-detect tags extracted from models such as the EX-H5. Index1 Tag Name Writable ------ -------- -------- 0 FacesDetected int8u 1 FaceDetectFrameSize int16u[2] 13 Face1Position int16u[4] 124 Face2Position int16u[4] 235 Face3Position int16u[4] 346 Face4Position int16u[4] 457 Face5Position int16u[4] 568 Face6Position int16u[4] 679 Face7Position int16u[4] 790 Face8Position int16u[4] 901 Face9Position int16u[4] 1012 Face10Position int16u[4] =head3 Casio FaceInfo2 Tags Face-detect tags extracted from models such as the EX-H20G and EX-ZR100. Index1 Tag Name Writable ------ -------- -------- 2 FacesDetected int8u 4 FaceDetectFrameSize int16u[2] 8 FaceOrientation int8u 24 Face1Position int16u[4] 76 Face2Position int16u[4] 128 Face3Position int16u[4] 180 Face4Position int16u[4] 232 Face5Position int16u[4] 284 Face6Position int16u[4] 336 Face7Position int16u[4] 388 Face8Position int16u[4] 440 Face9Position int16u[4] 492 Face10Position int16u[4] =head3 Casio QVCI Tags This information is found in the APP1 QVCI segment of JPEG images from the Casio QV-7000SX. Index1 Tag Name Writable ------ -------- -------- 44 CasioQuality N 55 FocalRange? N 77 DateTimeOriginal N 98 ModelType N 114 ManufactureIndex N 124 ManufactureCode N =head3 Casio AVI Tags This information is found in Casio GV-10 AVI videos. Index1 Tag Name Writable ------ -------- -------- 0 Software N =head2 FLIR Tags Information extracted from the maker notes of JPEG images from thermal imaging cameras by FLIR Systems Inc. Tag ID Tag Name Writable ------ -------- -------- 0x0001 ImageTemperatureMax rational64u 0x0002 ImageTemperatureMin rational64u 0x0003 Emissivity rational64u 0x0004 UnknownTemperature? rational64u 0x0005 CameraTemperatureRangeMax? rational64u 0x0006 CameraTemperatureRangeMin? rational64u =head3 FLIR FFF Tags Information extracted from FLIR FFF images and the FLIR APP1 segment of JPEG images. These tags may also be extracted from the first frame of an FLIR SEQ file. Tag ID Tag Name Writable ------ -------- -------- '_header' FFFHeader FLIR Header 0x0001 RawData FLIR RawData 0x0005 GainDeadData FLIR GainDeadData 0x0006 CoarseData FLIR CoarseData 0x000e EmbeddedImage FLIR EmbeddedImage 0x0020 CameraInfo FLIR CameraInfo 0x0021 MeasurementInfo FLIR MeasInfo 0x0022 PaletteInfo FLIR PaletteInfo 0x0023 TextInfo FLIR TextInfo 0x0024 EmbeddedAudioFile N 0x0028 PaintData FLIR PaintData 0x002a PiP FLIR PiP 0x002b GPSInfo FLIR GPSInfo 0x002c MeterLink FLIR MeterLink 0x002e ParameterInfo FLIR ParamInfo =head3 FLIR Header Tags Tags extracted from the FLIR FFF/AFF header. Index1 Tag Name Writable ------ -------- -------- 4 CreatorSoftware N =head3 FLIR RawData Tags The thermal image data may be stored either as raw data, or in PNG format. If stored as raw data, ExifTool adds a TIFF header to allow the data to be viewed as a TIFF image. If stored in PNG format, the PNG image is extracted as-is. Note that most FLIR cameras using the PNG format seem to write the 16-bit raw image data in the wrong byte order. Index2 Tag Name Writable ------ -------- -------- 1 RawThermalImageWidth N 2 RawThermalImageHeight N 16 RawThermalImageType N 16.1 RawThermalImage N =head3 FLIR GainDeadData Tags Information found in FFF-format .GAN calibration image files. Index2 Tag Name Writable ------ -------- -------- 1 GainDeadMapImageWidth N 2 GainDeadMapImageHeight N 16 GainDeadMapImageType N 16.1 GainDeadMapImage N =head3 FLIR CoarseData Tags Information found in FFF-format .CRS correction image files. Index2 Tag Name Writable ------ -------- -------- 1 CoarseMapImageWidth N 2 CoarseMapImageHeight N 16 CoarseMapImageType N 16.1 CoarseMapImage N =head3 FLIR EmbeddedImage Tags Index2 Tag Name Writable ------ -------- -------- 1 EmbeddedImageWidth N 2 EmbeddedImageHeight N 16 EmbeddedImageType N 16.1 EmbeddedImage N =head3 FLIR CameraInfo Tags FLIR camera information. The Planck tags are variables used in the temperature calculation. See L<http://u88.n24.queensu.ca/exiftool/forum/index.php?topic=4898.msg23972#msg23972> for details. Index1 Tag Name Writable ------ -------- -------- 32 Emissivity N 36 ObjectDistance N 40 ReflectedApparentTemperature N 44 AtmosphericTemperature N 48 IRWindowTemperature N 52 IRWindowTransmission N 60 RelativeHumidity N 88 PlanckR1 N 92 PlanckB N 96 PlanckF N 112 AtmosphericTransAlpha1 N 116 AtmosphericTransAlpha2 N 120 AtmosphericTransBeta1 N 124 AtmosphericTransBeta2 N 128 AtmosphericTransX N 144 CameraTemperatureRangeMax N 148 CameraTemperatureRangeMin N 152 UnknownTemperature1? N 156 UnknownTemperature2? N 160 UnknownTemperature3? N 164 UnknownTemperature4? N 168 UnknownTemperature5? N 172 UnknownTemperature6? N 212 CameraModel N 244 CameraPartNumber N 260 CameraSerialNumber N 276 CameraSoftware N 368 LensModel N 400 LensPartNumber N 416 LensSerialNumber N 436 FieldOfView N 492 FilterModel N 508 FilterPartNumber N 540 FilterSerialNumber N 776 PlanckO N 780 PlanckR2 N 824 RawValueMedian N 828 RawValueRange N 900 DateTimeOriginal N 912 FocusStepCount N 1116 FocusDistance N =head3 FLIR MeasInfo Tags Tags listed below are only for the first measurement tool, however multiple measurements may be added, and information is extracted for all of them. Tags for subsequent measurements are generated as required with the prefixes "Meas2", "Meas3", etc. Tag Name Writable -------- -------- Meas1Label N Meas1Params N Meas1Type N =head3 FLIR PaletteInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 PaletteColors N 6 AboveColor N 9 BelowColor N 12 OverflowColor N 15 UnderflowColor N 18 Isotherm1Color N 21 Isotherm2Color N 26 PaletteMethod N 27 PaletteStretch N 48 PaletteFileName N 80 PaletteName N 112 Palette N =head3 FLIR TextInfo Tags Tag Name Writable -------- -------- Label0 N Label1 N Label2 N Label3 N Value0 N Value1 N Value2 N Value3 N =head3 FLIR PaintData Tags Information generated by FLIR Tools "Paint colors" tool. Index2 Tag Name Writable ------ -------- -------- 5 PaintImageWidth N 6 PaintImageHeight N 20 PaintImageType N 20.1 PaintImage N =head3 FLIR PiP Tags FLIR Picture in Picture tags. Index2 Tag Name Writable ------ -------- -------- 0 Real2IR N 2 OffsetX N 3 OffsetY N 4 PiPX1 N 5 PiPX2 N 6 PiPY1 N 7 PiPY2 N =head3 FLIR GPSInfo Tags Index1 Tag Name Writable ------ -------- -------- 88 GPSMapDatum N =head3 FLIR MeterLink Tags Tags containing Meterlink humidity meter information. Index1 Tag Name Writable ------ -------- -------- 26 Reading1Units N 28 Reading1Description N 32 Reading1Device N 96 Reading1Value N 126 Reading2Units N 128 Reading2Description N 132 Reading2Device N 196 Reading2Value N 226 Reading3Units N 228 Reading3Description N 232 Reading3Device N 296 Reading3Value N 326 Reading4Units N 328 Reading4Description N 332 Reading4Device N 396 Reading4Value N =head3 FLIR ParamInfo Tags Tag Name Writable -------- -------- DateTimeGenerated N Param0 N Param1 N Param2 N Param3 N =head3 FLIR UserData Tags Tags written by some FLIR cameras in a top-level (!) "udta" atom of MP4 videos. Tag ID Tag Name Writable ------ -------- -------- 'uuid' FLIR_Parts FLIR Parts FLIR_Serial FLIR SerialNums FLIR_Params FLIR Params FLIR_UnknownUUID FLIR UnknownUUID FLIR_GPS FLIR GPS_UUID FLIR_MoreInfo FLIR MoreInfo SoftwareComponents? N FLIR_Unknown? N Units N+ ThumbnailImage N =head3 FLIR Parts Tags Tags extracted from the "uuid" box with ID 43c3993b0f94424b82056b66513f485d in FLIR MP4 videos. Index1 Tag Name Writable ------ -------- -------- 4 BAHPVer N BALPVer N Battery N BAVPVer N CamCore N DetectorBoard N Detector N GIDCVer N GIDPVer N GIPC_CPLD N GIPCVer N GIXIVer N MainBoard N Optics N PartNumber N =head3 FLIR SerialNums Tags Tags extracted from the "uuid" box with ID 57f5b93e51e448afa0d9c3ef1b37f712 in FLIR MP4 videos. Index1 Tag Name Writable ------ -------- -------- 12 UnknownSerial1? N 45 UnknownSerial2? N 78 UnknownSerial3? N 111 UnknownSerial4? N 123 UnknownNumber? N 126 CameraSerialNumber N =head3 FLIR Params Tags Tags extracted from the "uuid" box with ID 41e5dcf9e80a41ceadfe7f0c58082c19 in FLIR MP4 videos. Index4 Tag Name Writable ------ -------- -------- 1 ReflectedApparentTemperature N 2 AtmosphericTemperature N 3 Emissivity N 4 ObjectDistance N 5 RelativeHumidity N 6 EstimatedAtmosphericTrans N 7 IRWindowTemperature N 8 IRWindowTransmission N =head3 FLIR UnknownUUID Tags Tags extracted from the "uuid" box with ID 574520502cbb44adae5415e9b839d903 in FLIR MP4 videos. Index4 Tag Name Writable ------ -------- -------- [no tags known] =head3 FLIR GPS_UUID Tags Tags extracted from the "uuid" box with ID 7f2e21008b464918afb1de709a74f6f5 in FLIR MP4 videos. Index4 Tag Name Writable ------ -------- -------- 1 GPSLatitude N 2 GPSLongitude N 3 GPSAltitude N =head3 FLIR MoreInfo Tags Tags extracted from the "uuid" box with ID 2b452fdc74354094baee22a6b23a7cf8 in FLIR MP4 videos. Index1 Tag Name Writable ------ -------- -------- 5 LensModel N 11 UnknownTemperature1? N 15 UnknownTemperature2? N =head3 FLIR AFF Tags Tags extracted from FLIR "AFF" SEQ images. Tag ID Tag Name Writable ------ -------- -------- '_header' AFFHeader FLIR Header 0x0001 AFF1 FLIR AFF1 0x0005 AFF5 FLIR AFF5 =head3 FLIR AFF1 Tags Index2 Tag Name Writable ------ -------- -------- 1 SensorWidth N 2 SensorHeight N =head3 FLIR AFF5 Tags Index2 Tag Name Writable ------ -------- -------- 19 SensorWidth N 20 SensorHeight N =head3 FLIR FPF Tags Tags extracted from FLIR Public image Format (FPF) files. Index1 Tag Name Writable ------ -------- -------- 32 FPFVersion N 36 ImageDataOffset N 40 ImageType N 42 ImagePixelFormat N 44 ImageWidth N 46 ImageHeight N 48 ExternalTriggerCount N 52 SequenceFrameNumber N 120 CameraModel N 152 CameraPartNumber N 184 CameraSerialNumber N 216 CameraTemperatureRangeMin N 220 CameraTemperatureRangeMax N 224 LensModel N 256 LensPartNumber N 288 LensSerialNumber N 320 FilterModel N 336 FilterPartNumber N 384 FilterSerialNumber N 480 Emissivity N 484 ObjectDistance N 488 ReflectedApparentTemperature N 492 AtmosphericTemperature N 496 RelativeHumidity N 500 ComputedAtmosphericTrans N 504 EstimatedAtmosphericTrans N 508 ReferenceTemperature N 512 IRWindowTemperature N 516 IRWindowTransmission N 584 DateTimeOriginal N 676 CameraScaleMin N 680 CameraScaleMax N 684 CalculatedScaleMin N 688 CalculatedScaleMax N 692 ActualScaleMin N 696 ActualScaleMax N =head2 FujiFilm Tags Tag ID Tag Name Writable ------ -------- -------- 0x0000 Version undef 0x0010 InternalSerialNumber string 0x1000 Quality string 0x1001 Sharpness int16u 0x1002 WhiteBalance int16u 0x1003 Saturation int16u 0x1004 Contrast int16u 0x1005 ColorTemperature int16u 0x1006 Contrast int16u 0x100a WhiteBalanceFineTune int32s[2] 0x100b NoiseReduction int16u 0x100e HighISONoiseReduction int16u 0x1010 FujiFlashMode int16u 0x1011 FlashExposureComp rational64s 0x1020 Macro int16u 0x1021 FocusMode int16u 0x1022 AFMode int16u 0x1023 FocusPixel int16u[2] 0x1030 SlowSync int16u 0x1031 PictureMode int16u 0x1032 ExposureCount int16u 0x1033 EXRAuto int16u 0x1034 EXRMode int16u 0x1040 ShadowTone int32s 0x1041 HighlightTone int32s 0x1050 ShutterType int16u 0x1100 AutoBracketing int16u 0x1101 SequenceNumber int16u 0x1201 AdvancedFilter int32u 0x1210 ColorMode int16u 0x1300 BlurWarning int16u 0x1301 FocusWarning int16u 0x1302 ExposureWarning int16u 0x1304 GEImageSize string 0x1400 DynamicRange int16u 0x1401 FilmMode int16u 0x1402 DynamicRangeSetting int16u 0x1403 DevelopmentDynamicRange int16u 0x1404 MinFocalLength rational64s 0x1405 MaxFocalLength rational64s 0x1406 MaxApertureAtMinFocal rational64s 0x1407 MaxApertureAtMaxFocal rational64s 0x140b AutoDynamicRange int16u 0x1422 ImageStabilization int16u[3] 0x1431 Rating int32u 0x1436 ImageGeneration int16u 0x1438 ImageCount int16u 0x3820 FrameRate int16u 0x3821 FrameWidth int16u 0x3822 FrameHeight int16u 0x4100 FacesDetected int16u 0x4103 FacePositions int16u[n] 0x4282 FaceRecInfo FujiFilm FaceRecInfo 0x8000 FileSource string 0x8002 OrderNumber int32u 0x8003 FrameNumber int16u 0xb211 Parallax rational64s =head3 FujiFilm FaceRecInfo Tags Face recognition information. Tag Name Writable -------- -------- Face1Birthday N Face1Category N Face1Name N Face2Birthday N Face2Category N Face2Name N Face3Birthday N Face3Category N Face3Name N Face4Birthday N Face4Category N Face4Name N Face5Birthday N Face5Category N Face5Name N Face6Birthday N Face6Category N Face6Name N Face7Birthday N Face7Category N Face7Name N Face8Birthday N Face8Category N Face8Name N =head3 FujiFilm RAF Tags FujiFilm RAF images contain meta information stored in a proprietary FujiFilm RAF format, as well as EXIF information stored inside an embedded JPEG preview image. The table below lists tags currently decoded from the RAF-format information. Tag ID Tag Name Writable ------ -------- -------- 0x0100 RawImageFullSize N 0x0121 RawImageSize N 0x0130 FujiLayout N 0x0131 XTransLayout N 0x2000 WB_GRGBLevelsAuto N 0x2100 WB_GRGBLevelsDaylight N 0x2200 WB_GRGBLevelsCloudy N 0x2300 WB_GRGBLevelsDaylightFluor N 0x2301 WB_GRGBLevelsDayWhiteFluor N 0x2302 WB_GRGBLevelsWhiteFluorescent N 0x2310 WB_GRGBLevelsWarmWhiteFluor N 0x2311 WB_GRGBLevelsLivingRoomWarmWhiteFluor N 0x2400 WB_GRGBLevelsTungsten N 0x2ff0 WB_GRGBLevels N 0x9650 RawExposureBias N 0xc000 RAFData FujiFilm RAFData =head3 FujiFilm RAFData Tags Index1 Tag Name Writable ------ -------- -------- 0 RawImageWidth N 4 RawImageWidth N RawImageHeight N 8 RawImageWidth N RawImageHeight N 12 RawImageHeight N =head3 FujiFilm IFD Tags Tags found in the FujiIFD information of RAF images from some models. Tag ID Tag Name Writable ------ -------- -------- 0xf000 FujiIFD FujiFilm IFD 0xf001 RawImageFullWidth N 0xf002 RawImageFullHeight N 0xf003 BitsPerSample N 0xf007 StripOffsets N 0xf008 StripByteCounts N 0xf00a BlackLevel N 0xf00c WB_GRBLevelsStandard N 0xf00d WB_GRBLevelsAuto N 0xf00e WB_GRBLevels N =head3 FujiFilm FFMV Tags Information found in the FFMV atom of MOV videos. Index1 Tag Name Writable ------ -------- -------- 0 MovieStreamName N =head3 FujiFilm MOV Tags This information is found in MOV videos from some FujiFilm cameras. Index1 Tag Name Writable ------ -------- -------- 0 Make N 24 Model N 46 ExposureTime N 50 FNumber N 58 ExposureCompensation N =head2 GE Tags This table lists tags found in the maker notes of some General Imaging camera models. Tag ID Tag Name Writable ------ -------- -------- 0x0202 Macro int16u 0x0207 GEModel string 0x0300 GEMake string =head2 HP Tags These tables list tags found in the maker notes of some Hewlett-Packard camera models. The first table lists tags found in the EXIF-format maker notes of the PhotoSmart 720 (also used by the Vivitar ViviCam 3705, 3705B and 3715). Tag ID Tag Name Writable ------ -------- -------- 0x0e00 PrintIM PrintIM =head3 HP Type2 Tags These tags are used by the PhotoSmart E427. Tag ID Tag Name Writable ------ -------- -------- 'Lens Shading' LensShading N 'PreviewImage' PreviewImage N 'Serial Number' SerialNumber N =head3 HP Type4 Tags These tags are used by the PhotoSmart M627. Index1 Tag Name Writable ------ -------- -------- 12 MaxAperture N 16 ExposureTime N 20 CameraDateTime N 52 ISO N 92 SerialNumber N =head3 HP Type6 Tags These tags are used by the PhotoSmart M425, M525 and M527. Index1 Tag Name Writable ------ -------- -------- 12 FNumber N 16 ExposureTime N 20 CameraDateTime N 52 ISO N 88 SerialNumber N =head3 HP TDHD Tags These tags are extracted from the APP6 "TDHD" segment of Photosmart R837 JPEG images. Many other unknown tags exist in is data, and can be seen with the Unknown (-u) option. Tag ID Tag Name Writable ------ -------- -------- 'CMSN' SerialNumber N 'FWRV' FirmwareVersion N 'LSLV' LSLV HP TDHD 'TDHD' TDHD HP TDHD =head2 JVC Tags JVC EXIF maker note tags. Tag ID Tag Name Writable ------ -------- -------- 0x0002 CPUVersions N 0x0003 Quality N =head3 JVC Text Tags JVC/Victor text-based maker note tags. Tag ID Tag Name Writable ------ -------- -------- 'QTY' Quality N 'VER' MakerNoteVersion N =head2 Kodak Tags Many Kodak models don't store the maker notes in standard IFD format, and these formats vary with different models. Some information has been decoded, but much of the Kodak information remains unknown. The table below contains the most common set of Kodak tags. The following Kodak camera models have been tested and found to use these tags: C360, C663, C875, CX6330, CX6445, CX7330, CX7430, CX7525, CX7530, DC4800, DC4900, DX3500, DX3600, DX3900, DX4330, DX4530, DX4900, DX6340, DX6440, DX6490, DX7440, DX7590, DX7630, EasyShare-One, LS420, LS443, LS633, LS743, LS753, V530, V550, V570, V603, V610, V705, Z650, Z700, Z710, Z730, Z740, Z760 and Z7590. Index1 Tag Name Writable ------ -------- -------- 0 KodakModel string[8] 9 Quality int8u 10 BurstMode int8u 12 KodakImageWidth int16u 14 KodakImageHeight int16u 16 YearCreated int16u 18 MonthDayCreated int8u[2] 20 TimeCreated int8u[4] 24 BurstMode2? int16u 27 ShutterMode int8u 28 MeteringMode int8u 29 SequenceNumber int8u 30 FNumber int16u 32 ExposureTime int32u 36 ExposureCompensation int16s 38 VariousModes? int16u 40 Distance1? int32u 44 Distance2? int32u 48 Distance3? int32u 52 Distance4? int32u 56 FocusMode int8u 58 VariousModes2? int16u 60 PanoramaMode? int16u 62 SubjectDistance? int16u 64 WhiteBalance int8u 92 FlashMode int8u 93 FlashFired int8u 94 ISOSetting int16u 96 ISO int16u 98 TotalZoom int16u 100 DateTimeStamp int16u 102 ColorMode int16u 104 DigitalZoom int16u 107 Sharpness int8s =head3 Kodak Type2 Tags These tags are used by the Kodak DC220, DC260, DC265 and DC290, Hewlett-Packard PhotoSmart 618, C500 and C912, Pentax EI-200 and EI-2000, and Minolta EX1500Z. Index1 Tag Name Writable ------ -------- -------- 8 KodakMaker string[32] 40 KodakModel string[32] 108 KodakImageWidth int32u 112 KodakImageHeight int32u =head3 Kodak Type3 Tags These tags are used by the DC240, DC280, DC3400 and DC5000. Index1 Tag Name Writable ------ -------- -------- 12 YearCreated int16u 14 MonthDayCreated int8u[2] 16 TimeCreated int8u[4] 30 OpticalZoom int16u 55 Sharpness int8s 56 ExposureTime int32u 60 FNumber int16u 78 ISO int16u =head3 Kodak Type4 Tags These tags are used by the DC200 and DC215. Index1 Tag Name Writable ------ -------- -------- 32 OriginalFileName string[12] =head3 Kodak Type5 Tags These tags are used by the CX4200, CX4210, CX4230, CX4300, CX4310, CX6200 and CX6230. Index1 Tag Name Writable ------ -------- -------- 20 ExposureTime int32u 26 WhiteBalance int8u 28 FNumber int16u 30 ISO int16u 32 OpticalZoom int16u 34 DigitalZoom int16u 39 FlashMode int8u 42 ImageRotated int8u 43 Macro int8u =head3 Kodak Type6 Tags These tags are used by the DX3215 and DX3700. Index1 Tag Name Writable ------ -------- -------- 16 ExposureTime int32u 20 ISOSetting? int32u 24 FNumber int16u 26 ISO int16u 28 OpticalZoom int16u 30 DigitalZoom int16u 34 Flash int16u =head3 Kodak Type7 Tags The maker notes of models such as the C340, C433, CC533, LS755, V803 and V1003 seem to start with the camera serial number. The C310, C315, C330, C643, C743, CD33, CD43, CX7220 and CX7300 maker notes are also decoded using this table, although the strings for these cameras don't conform to the usual Kodak serial number format, and instead have the model name followed by 8 digits. Index1 Tag Name Writable ------ -------- -------- 0 SerialNumber string[16] =head3 Kodak Type8 Tags Kodak models such as the ZD710, P712, P850, P880, V1233, V1253, V1275, V1285, Z612, Z712, Z812, Z885 use standard TIFF IFD format for the maker notes. In keeping with Kodak's strategy of inconsistent makernotes, models such as the M380, M1033, M1093, V1073, V1273, Z1012, Z1085 and Z8612 also use these tags, but these makernotes begin with a TIFF header instead of an IFD entry count and use relative instead of absolute offsets. There is a large amount of information stored in these maker notes (apparently with much duplication), but relatively few tags have so far been decoded. Tag ID Tag Name Writable ------ -------- -------- 0xfc00 SubIFD0 Kodak SubIFD0 Kodak SubIFD0 0xfc01 SubIFD1 Kodak SubIFD1 Kodak SubIFD1 0xfc02 SubIFD2 Kodak SubIFD2 Kodak SubIFD2 0xfc03 SubIFD3 Kodak SubIFD3 Kodak SubIFD3 0xfc04 SubIFD4 Kodak SubIFD4 Kodak SubIFD4 0xfc05 SubIFD5 Kodak SubIFD5 Kodak SubIFD5 0xfc06 SubIFD6 Kodak SubIFD6 Kodak SubIFD6 0xfcff SubIFD255 Kodak SubIFD0 0xff00 CameraInfo Kodak CameraInfo =head3 Kodak SubIFD0 Tags SubIFD0 through SubIFD5 tags are written a number of newer Kodak models. Tag ID Tag Name Writable ------ -------- -------- 0xfa02 SceneMode int16u 0xfa19 SerialNumber string 0xfa1d KodakImageWidth int16u 0xfa1e KodakImageHeight int16u 0xfa20 SensorWidth int16u 0xfa21 SensorHeight int16u 0xfa23 FNumber int16u 0xfa24 ExposureTime int32u 0xfa2e ISO int16u 0xfa3d OpticalZoom int16u 0xfa46 ISO int16u 0xfa51 KodakImageWidth int16u 0xfa52 KodakImageHeight int16u 0xfa54 ThumbnailWidth int16u 0xfa55 ThumbnailHeight int16u 0xfa57 PreviewImageWidth int16u 0xfa58 PreviewImageHeight int16u =head3 Kodak SubIFD1 Tags Tag ID Tag Name Writable ------ -------- -------- 0x0027 ISO int16u 0x0028 ISO int16u =head3 Kodak SubIFD2 Tags Tag ID Tag Name Writable ------ -------- -------- 0x6002 SceneModeUsed int32u 0x6006 OpticalZoom int32u 0x6103 MaxAperture int32u 0xf002 SceneModeUsed int32u 0xf006 OpticalZoom int32u 0xf103 FNumber int32u 0xf104 ExposureTime int32u 0xf105 ISO int32u =head3 Kodak SubIFD3 Tags Tag ID Tag Name Writable ------ -------- -------- 0x1000 OpticalZoom int16u =head3 Kodak SubIFD4 Tags Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head3 Kodak SubIFD5 Tags Tag ID Tag Name Writable ------ -------- -------- 0x000f OpticalZoom int16u =head3 Kodak SubIFD6 Tags SubIFD6 is written by the M580. Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head3 Kodak CameraInfo Tags These tags are used by the P712, P850 and P880. Tag ID Tag Name Writable ------ -------- -------- 0xf900 SensorWidth int16u 0xf901 SensorHeight int16u 0xf902 BayerPattern string 0xf903 SensorFullWidth int16u 0xf904 SensorFullHeight int16u 0xf907 KodakImageWidth int16u 0xf908 KodakImageHeight int16u 0xfa00 KodakInfoType string 0xfa04 SerialNumber string 0xfd04 FNumber int16u 0xfd05 ExposureTime int32u 0xfd06 ISO int16u =head3 Kodak Type9 Tags These tags are used by the Kodak C140, C180, C913, C1013, M320, M340 and M550, as well as various cameras marketed by other manufacturers. Index1 Tag Name Writable ------ -------- -------- 12 FNumber int16u 16 ExposureTime int32u 20 DateTimeOriginal string[20] 52 ISO int16u 87 FirmwareVersion string[16] 168 UnknownNumber N 196 UnknownNumber N =head3 Kodak Type10 Tags Another variation of the IFD-format type, this time with just a byte order indicator instead of a full TIFF header. These tags are used by the Z980. Tag ID Tag Name Writable ------ -------- -------- 0x0002 PreviewImageSize int16u[2] 0x0012 ExposureTime int32u 0x0013 FNumber int16u 0x0014 ISO int16u 0x001d FocalLength int32u =head3 Kodak Type11 Tags These tags are found in models such as the PixPro S-1. They are not writable because the inconsistency of Kodak maker notes is beginning to get on my nerves. Tag ID Tag Name Writable ------ -------- -------- 0x0203 PictureEffect N 0x0207 KodakModel N 0x0300 KodakMake N 0x0308 LensSerialNumber N 0x0309 LensModel N =head3 Kodak Unknown Tags Index1 Tag Name Writable ------ -------- -------- [no tags known] =head3 Kodak IFD Tags These tags are found in a separate IFD of JPEG, TIFF, DCR and KDC images from some older Kodak models such as the DC50, DC120, DCS760C, DCS Pro 14N, 14nx, SLR/n, Pro Back and Canon EOS D2000. Tag ID Tag Name Writable ------ -------- -------- 0x0001 UnknownEV? rational64u 0x0003 ExposureValue rational64u 0x03e9 OriginalFileName string 0x03eb SensorLeftBorder N 0x03ec SensorTopBorder N 0x03ed SensorImageWidth N 0x03ee SensorImageHeight N 0x03f1 TextualInfo Kodak TextualInfo 0x03fc WhiteBalance int16u 0x03fd Processing Kodak Processing 0x0401 Time string 0x0406 CameraTemperature rational64s 0x0407 AdapterVoltage rational64u 0x0408 BatteryVoltage rational64u 0x0414 NCDFileInfo string 0x0846 ColorTemperature int16u 0x0848 WB_RGBLevelsDaylight N 0x0849 WB_RGBLevelsTungsten N 0x084a WB_RGBLevelsFluorescent N 0x084b WB_RGBLevelsFlash N 0x084c WB_RGBLevelsCustom N 0x084d WB_RGBLevelsAuto N 0x0852 WB_RGBMul0 N 0x0853 WB_RGBMul1 N 0x0854 WB_RGBMul2 N 0x0855 WB_RGBMul3 N 0x085c WB_RGBCoeffs0 N 0x085d WB_RGBCoeffs1 N 0x085e WB_RGBCoeffs2 N 0x085f WB_RGBCoeffs3 N 0x0903 BaseISO rational64u 0x09ce SensorSerialNumber string 0x0ce5 FirmwareVersion string 0x0e4c KodakLook string 0x1389 InputProfile undef 0x138a KodakLookProfile undef 0x138b OutputProfile undef 0x1391 ToneCurveFileName string 0x1784 ISO int32u =head3 Kodak TextualInfo Tags Below is a list of tags which have been observed in the Kodak TextualInfo data, however ExifTool will extract information from any tags found here. Tag ID Tag Name Writable ------ -------- -------- 'AF Function' AFMode N 'Actual Compensation' ActualCompensation N 'Aperture' Aperture N 'Auto Bracket' AutoBracket N 'Brightness Value' BrightnessValue N 'Camera' CameraModel N 'Camera body' CameraBody N 'Compensation' ExposureCompensation N 'Date' Date N 'Exposure Bias' ExposureBias N 'Exposure Mode' ExposureMode N 'Firmware Version' FirmwareVersion N 'Flash Compensation' FlashExposureComp N 'Flash Fired' FlashFired N 'Flash Sync Mode' FlashSyncMode N 'Focal Length' FocalLength N 'Height' KodakImageHeight N 'ISO' ISO N 'ISO Speed' ISO N 'Image Number' ImageNumber N 'Max Aperture' MaxAperture N 'Meter Mode' MeterMode N 'Min Aperture' MinAperture N 'Popup Flash' PopupFlash N 'Serial Number' SerialNumber N 'Shooting Mode' ShootingMode N 'Shutter' ShutterSpeed N 'Temperature' Temperature N 'Time' Time N 'White balance' WhiteBalance N 'Width' KodakImageWidth N '_other_info' OtherInfo N =head3 Kodak Processing Tags Index2 Tag Name Writable ------ -------- -------- 20 WB_RGBLevels N =head3 Kodak Meta Tags These tags are found in the APP3 "Meta" segment of JPEG images from Kodak cameras such as the DC280, DC3400, DC5000, MC3, M580, Z950 and Z981. The structure of this segment is similar to the APP1 "Exif" segment, but a different set of tags is used. Tag ID Tag Name Writable ------ -------- -------- 0xc350 FilmProductCode N 0xc351 ImageSourceEK N 0xc352 CaptureConditionsPAR N 0xc353 CameraOwner undef 0xc354 SerialNumber undef 0xc355 UserSelectGroupTitle N 0xc356 DealerIDNumber N 0xc357 CaptureDeviceFID N 0xc358 EnvelopeNumber N 0xc359 FrameNumber N 0xc35a FilmCategory N 0xc35b FilmGencode N 0xc35c ModelAndVersion N 0xc35d FilmSize N 0xc35e SBA_RGBShifts N 0xc35f SBAInputImageColorspace N 0xc360 SBAInputImageBitDepth N 0xc361 SBAExposureRecord N 0xc362 UserAdjSBA_RGBShifts N 0xc363 ImageRotationStatus N 0xc364 RollGuidElements N 0xc365 MetadataNumber N 0xc366 EditTagArray N 0xc367 Magnification N 0xc36c NativeXResolution N 0xc36d NativeYResolution N 0xc36e KodakEffectsIFD Kodak SpecialEffects 0xc36f KodakBordersIFD Kodak Borders 0xc37a NativeResolutionUnit N 0xc418 SourceImageDirectory N 0xc419 SourceImageFileName N 0xc41a SourceImageVolumeName N 0xc46c PrintQuality N 0xc46e ImagePrintStatus N =head3 Kodak SpecialEffects Tags The Kodak SpecialEffects and Borders tags are found in sub-IFD's within the Kodak JPEG APP3 "Meta" segment. Tag ID Tag Name Writable ------ -------- -------- 0x0000 DigitalEffectsVersion N 0x0001 DigitalEffectsName N 0x0002 DigitalEffectsType N =head3 Kodak Borders Tags Tag ID Tag Name Writable ------ -------- -------- 0x0000 BordersVersion N 0x0001 BorderName N 0x0002 BorderID N 0x0003 BorderLocation N 0x0004 BorderType N 0x0008 WatermarkType N =head3 Kodak KDC_IFD Tags These tags are found in a separate IFD of KDC images from some newer Kodak models such as the P880 and Z1015IS. Tag ID Tag Name Writable ------ -------- -------- 0xfa00 SerialNumber string 0xfa0d WhiteBalance int8u 0xfa25 WB_RGBLevelsAuto N 0xfa27 WB_RGBLevelsTungsten N 0xfa28 WB_RGBLevelsFluorescent N 0xfa29 WB_RGBLevelsDaylight N 0xfa2a WB_RGBLevelsShade N =head3 Kodak frea Tags Information stored in the "frea" atom of Kodak PixPro SP360 MP4 videos. Tag ID Tag Name Writable ------ -------- -------- 'scra' PreviewImage N 'thma' ThumbnailImage N =head3 Kodak Free Tags Information stored in the "free" atom of Kodak MP4 videos. (VERY bad form for Kodak to store useful information in an atom intended for unused space!) Tag ID Tag Name Writable ------ -------- -------- 'AprV' ApertureValue N 'BrtV' BrightnessValue N 'Expc' ExposureCompensation N 'Expo' ExposureTime N 'FL35' FocalLengthIn35mmFormat N 'FNum' FNumber N 'FoLn' FocalLength N 'ISOS' ISO N 'SVer' FirmwareVersion N 'Scrn' PreviewInfo Kodak Scrn 'Seri' SerialNumber N 'StSV' ShutterSpeedValue N =head3 Kodak Scrn Tags Index2 Tag Name Writable ------ -------- -------- 0 PreviewImageWidth N 1 PreviewImageHeight N 2 PreviewImageLength N 4 PreviewImage N =head3 Kodak DcMD Tags Metadata directory found in MOV and MP4 videos from some Kodak cameras. Tag ID Tag Name Writable ------ -------- -------- 'CMbo' CameraByteOrder N 'Cmbo' CameraByteOrder N 'DcEM' DcEM Kodak DcEM 'DcME' DcME Kodak DcME =head3 Kodak DcEM Tags Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head3 Kodak DcME Tags Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head3 Kodak MOV Tags This information is found in the TAGS atom of MOV videos from Kodak models such as the P880. Index1 Tag Name Writable ------ -------- -------- 0 Make N 22 Model N 64 ModelType N 78 ExposureTime N 82 FNumber N 90 ExposureCompensation N 112 FocalLength N =head2 Leaf Tags These tags are found in .MOS images from Leaf digital camera backs as written by Creo Leaf Capture. They exist within the Leaf-specific directory structure of EXIF tag 0x8606. The tables below list observed Leaf tags, however ExifTool will extract any tags found in the Leaf directories even if they don't appear in these tables. Tag ID Tag Name Writable ------ -------- -------- 'JPEG_preview_data' PreviewImage undef 'JPEG_preview_info' PreviewInfo N 'PDA_histogram_data' PDAHistogram N 'back_serial_number' BackSerial N 'camera_profile' CameraProfile Leaf CameraProfile 'icc_camera_profile' ICC_Profile ICC_Profile 'icc_camera_to_tone_matrix' ToneMatrix N 'icc_camera_to_tone_space_flow' ToneSpaceFlow N 'icc_rgb_ws_profile' RGB_Profile ICC_Profile 'image_offset' ImageOffset N 'pattern_ratation_angle' PatternAngle N =head3 Leaf CameraProfile Tags All B<Tag ID>'s in the following table have a leading 'CamProf_' which has been removed. Tag ID Tag Name Writable ------ -------- -------- 'back_type' CameraBackType N 'capture_profile' CaptureProfile Leaf CaptureProfile 'image_profile' ImageProfile Leaf ImageProfile 'name' CameraName N 'type' CameraType N 'version' CameraProfileVersion N =head3 Leaf CaptureProfile Tags All B<Tag ID>'s in the following table have a leading 'CaptProf_' which has been removed. Tag ID Tag Name Writable ------ -------- -------- 'CCD_rect' CCDRect N 'CCD_valid_rect' CCDValidRect N 'CCD_video_rect' CCDVideoRect N 'back_type' CaptProfBackType N 'center_dark_rect' CenterDarkRect N 'color_averages' ColorAverages N 'color_matrix' ColorMatrix N 'dark_correction_type' DarkCorrectionType N 'image_bounds' ImageBounds N 'image_fields' ImageFields N 'image_offset' ImageOffset N 'left_dark_rect' LeftDarkRect N 'luminance_consts' LuminanceConsts N 'mosaic_pattern' MosaicPattern N 'name' CaptProfName N 'number_of_planes' NumberOfPlanes N 'raw_data_rotation' RawDataRotation N 'reconstruction_type' ReconstructionType N 'right_dark_rect' RightDarkRect N 'serial_number' CaptureSerial N 'type' CaptProfType N 'version' CaptProfVersion N 'xy_offset_info' XYOffsetInfo N =head3 Leaf ImageProfile Tags All B<Tag ID>'s in the following table have a leading 'ImgProf_' which has been removed. Tag ID Tag Name Writable ------ -------- -------- 'back_type' ImgProfBackType N 'image_status' ImageStatus N 'name' ImgProfName N 'rotation_angle' RotationAngle N 'shoot_setup' ShootSetup Leaf ShootSetup 'type' ImgProfType N 'version' ImgProfVersion N =head3 Leaf ShootSetup Tags All B<Tag ID>'s in the following table have a leading 'ShootObj_' which has been removed. Tag ID Tag Name Writable ------ -------- -------- 'back_type' ShootObjBackType N 'camera_setup' CameraSetup Leaf CameraSetup 'capture_setup' CaptureSetup Leaf CaptureSetup 'color_setup' ColorSetup Leaf ColorSetup 'look_header' LookHeader Leaf LookHeader 'name' ShootObjName N 'save_setup' SaveSetup Leaf SaveSetup 'type' ShootObjType N 'version' ShootObjVersion N =head3 Leaf CameraSetup Tags All B<Tag ID>'s in the following table have a leading 'CameraObj_' which has been removed. Tag ID Tag Name Writable ------ -------- -------- 'ISO_speed' ISOSpeed N 'back_type' CameraObjBackType N 'camera_type' CameraType N 'lens_ID' LensID N 'lens_type' LensType N 'name' CameraObjName N 'strobe' Strobe N 'type' CameraObjType N 'version' CameraObjVersion N =head3 Leaf CaptureSetup Tags All B<Tag ID>'s in the following table have a leading 'CaptureObj_' which has been removed. Tag ID Tag Name Writable ------ -------- -------- 'Multi_quality' MultiQuality N 'back_type' CaptureObjBackType N 'name' CaptureObjName N 'neutals' Neutals Leaf Neutrals 'selection' Selection Leaf Selection 'sharpness' Sharpness Leaf Sharpness 'single_quality' SingleQuality N 'tone_curve' ToneCurve Leaf ToneCurve 'type' CaptureObjType N 'version' CaptureObjVersion N =head3 Leaf Neutrals Tags All B<Tag ID>'s in the following table have a leading 'NeutObj_' which has been removed. Tag ID Tag Name Writable ------ -------- -------- 'back_type' NeutObjBackType N 'color_casts' ColorCasts N 'highlight_end_points' HighlightEndPoints N 'name' NeutObjName N 'neutrals' Neutrals N 'shadow_end_points' ShadowEndPoints N 'type' NeutObjType N 'version' NeutObjVersion N =head3 Leaf Selection Tags All B<Tag ID>'s in the following table have a leading 'SelObj_' which has been removed. Tag ID Tag Name Writable ------ -------- -------- 'back_type' SelObjBackType N 'locks' Locks N 'name' SelObjName N 'orientation' Orientation N 'rect' Rect N 'resolution' Resolution N 'scale' Scale N 'type' SelObjType N 'version' SelObjVersion N =head3 Leaf Sharpness Tags All B<Tag ID>'s in the following table have a leading 'SharpObj_' which has been removed. Tag ID Tag Name Writable ------ -------- -------- 'back_type' SharpObjBackType N 'data_len' DataLen N 'name' SharpObjName N 'sharp_info' SharpInfo N 'sharp_method' SharpMethod N 'type' SharpObjType N 'version' SharpObjVersion N =head3 Leaf ToneCurve Tags All B<Tag ID>'s in the following table have a leading 'ToneObj_' which has been removed. Tag ID Tag Name Writable ------ -------- -------- 'back_type' ToneObjBackType N 'gamma' Gamma N 'name' ToneObjName N 'npts' Npts N 'tones' Tones N 'type' ToneObjType N 'version' ToneObjVersion N =head3 Leaf ColorSetup Tags All B<Tag ID>'s in the following table have a leading 'ColorObj_' which has been removed. Tag ID Tag Name Writable ------ -------- -------- 'back_type' ColorObjBackType N 'color_mode' ColorMode N 'color_type' ColorType N 'has_ICC' HasICC N 'input_profile' InputProfile N 'name' ColorObjName N 'output_profile' OutputProfile N 'type' ColorObjType N 'version' ColorObjVersion N =head3 Leaf LookHeader Tags All B<Tag ID>'s in the following table have a leading 'LookHead_' which has been removed. Tag ID Tag Name Writable ------ -------- -------- 'back_type' LookHeadBackType N 'name' LookHeadName N 'type' LookHeadType N 'version' LookHeadVersion N =head3 Leaf SaveSetup Tags All B<Tag ID>'s in the following table have a leading 'SaveObj_' which has been removed. Tag ID Tag Name Writable ------ -------- -------- 'back_type' SaveObjBackType N 'leaf_auto_active' LeafAutoActive N 'leaf_auto_base_name' LeafAutoBaseName N 'leaf_hot_folder' LeafHotFolder N 'leaf_open_proc_HDR' LeafOpenProcHDR N 'leaf_output_file_type' LeafOutputFileType N 'leaf_save_selection' LeafSaveSelection N 'name' SaveObjName N 'std_auto_active' StdAutoActive N 'std_base_name' StdBaseName N 'std_hot_folder' StdHotFolder N 'std_open_in_photoshop' StdOpenInPhotoshop N 'std_output_bit_depth' StdOutputBitDepth N 'std_output_color_mode' StdOutputColorMode N 'std_output_file_type' StdOutputFileType N 'std_oxygen' StdOxygen N 'std_save_selection' StdSaveSelection N 'std_scaled_output' StdScaledOutput N 'std_sharpen_output' StdSharpenOutput N 'type' SaveObjType N 'version' SaveObjVersion N =head3 Leaf SubIFD Tags Leaf writes a TIFF-format sub-IFD inside IFD0 of a MOS image. No tags in this sub-IFD are currently known, except for tag 0x8606 which really shouldn't be here anyway (so it doesn't appear in the table below) because it duplicates a reference to the same data of tag 0x8606 in IFD0. Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head2 Minolta Tags These tags are used by Minolta, Konica/Minolta as well as some Sony cameras. Minolta doesn't make things easy for decoders because the meaning of some tags and the location where some information is stored is different for different camera models. (Take MinoltaQuality for example, which may be located in 5 different places.) Tag ID Tag Name Writable ------ -------- -------- 0x0000 MakerNoteVersion undef[4] 0x0001 MinoltaCameraSettingsOld Minolta CameraSettings 0x0003 MinoltaCameraSettings Minolta CameraSettings 0x0004 MinoltaCameraSettings7D Minolta CameraSettings7D 0x0010 CameraInfoA100 Minolta CameraInfoA100 0x0018 ISInfoA100 Minolta ISInfoA100 ImageStabilization N 0x0020 WBInfoA100 Minolta WBInfoA100 0x0040 CompressedImageSize int32u 0x0081 PreviewImage undef 0x0088 PreviewImageStart int32u* 0x0089 PreviewImageLength int32u* 0x0100 SceneMode int32u 0x0101 ColorMode int32u 0x0102 MinoltaQuality int32u 0x0103 MinoltaQuality int32u MinoltaImageSize int32u 0x0104 FlashExposureComp rational64s 0x0105 Teleconverter int32u 0x0107 ImageStabilization int32u 0x0109 RawAndJpgRecording int32u 0x010a ZoneMatching int32u 0x010b ColorTemperature int32u 0x010c LensType int32u 0x0111 ColorCompensationFilter int32s 0x0112 WhiteBalanceFineTune int32u 0x0113 ImageStabilization int32u 0x0114 MinoltaCameraSettings5D Minolta CameraSettings5D CameraSettingsA100 Minolta CameraSettingsA100 0x0115 WhiteBalance int32u 0x0e00 PrintIM PrintIM 0x0f00 MinoltaCameraSettings2 N =head3 Minolta CameraSettings Tags There is some variability in CameraSettings information between different models (and sometimes even between different firmware versions), so this information may not be as reliable as it should be. Because of this, tags in the following tables are set to lower priority to prevent them from superceding the values of same-named tags in other locations when duplicate tags are disabled. Index4 Tag Name Writable ------ -------- -------- 1 ExposureMode int32u 2 FlashMode int32u 3 WhiteBalance int32u~ 4 MinoltaImageSize int32u 5 MinoltaQuality int32u 6 DriveMode int32u 7 MeteringMode int32u 8 ISO int32u 9 ExposureTime int32u 10 FNumber int32u 11 MacroMode int32u 12 DigitalZoom int32u 13 ExposureCompensation int32u 14 BracketStep int32u 16 IntervalLength int32u 17 IntervalNumber int32u 18 FocalLength int32u 19 FocusDistance int32u 20 FlashFired int32u 21 MinoltaDate int32u 22 MinoltaTime int32u 23 MaxAperture int32u 26 FileNumberMemory int32u 27 LastFileNumber int32u 28 ColorBalanceRed int32u 29 ColorBalanceGreen int32u 30 ColorBalanceBlue int32u 31 Saturation int32u 32 Contrast int32u 33 Sharpness int32u 34 SubjectProgram int32u 35 FlashExposureComp int32u 36 ISOSetting int32u 37 MinoltaModelID int32u 38 IntervalMode int32u 39 FolderName int32u 40 ColorMode int32u 41 ColorFilter int32u 42 BWFilter int32u 43 InternalFlash int32u 44 Brightness int32u 45 SpotFocusPointX int32u 46 SpotFocusPointY int32u 47 WideFocusZone int32u 48 FocusMode int32u 49 FocusArea int32u 50 DECPosition int32u 51 ColorProfile int32u 52 DataImprint int32u 63 FlashMetering int32u =head3 Minolta CameraSettings7D Tags Index2 Tag Name Writable ------ -------- -------- 0 ExposureMode int16u 2 MinoltaImageSize int16u 3 MinoltaQuality int16u 4 WhiteBalance int16u 14 FocusMode int16u 16 AFPoints int16u 21 Flash int16u 22 FlashMode int16u 28 ISOSetting int16u 30 ExposureCompensation int16s 37 ColorSpace int16u 38 Sharpness int16u 39 Contrast int16u 40 Saturation int16u 45 FreeMemoryCardImages int16u 63 ColorTemperature int16s 64 HueAdjustment int16u 70 Rotation int16u 71 FNumber int16u 72 ExposureTime int16u 74 FreeMemoryCardImages int16u 94 ImageNumber int16u 96 NoiseReduction int16u 98 ImageNumber2 int16u 113 ImageStabilization int16u 117 ZoneMatchingOn int16u =head3 Minolta CameraInfoA100 Tags Camera information for the Sony DSLR-A100. Index1 Tag Name Writable ------ -------- -------- 1 AFSensorActive int8u 2 AFStatusActiveSensor int16s 4 AFStatusTop-right int16s 6 AFStatusBottom-right int16s 8 AFStatusBottom int16s 10 AFStatusMiddleHorizontal int16s 12 AFStatusCenterVertical int16s 14 AFStatusTop int16s 16 AFStatusTop-left int16s 18 AFStatusBottom-left int16s 20 FocusLocked int8u 21 AFPoint int8u 22 AFMode int8u 45 AFStatusLeft int16s 47 AFStatusCenterHorizontal int16s 49 AFStatusRight int16s 51 AFAreaMode int8u =head3 Minolta ISInfoA100 Tags Image stabilization information for the Sony DSLR-A100. Index1 Tag Name Writable ------ -------- -------- 0 ImageStabilization int16u =head3 Minolta WBInfoA100 Tags White balance information for the Sony DSLR-A100. Index1 Tag Name Writable ------ -------- -------- 14 DriveMode int8u 16 Rotation int8u 20 ImageStabilizationSetting int8u 21 DynamicRangeOptimizerMode int8u 42 ExposureCompensationMode int8u 43 WBBracketShotNumber int8u 44 WhiteBalanceBracketing int8u 45 ExposureBracketShotNumber int8u 49 FlashFunction int16u 52 ExposureMode int16u 54 ColorMode int16u 56 AverageLV int16u 60 FrameNumber int8u 150 WB_RGBLevels int16u[3] 174 WB_GBRGLevels int16u[4] 192 WB_RedLevelsTungsten int16u[7] 206 WB_BlueLevelsTungsten int16u[7] 220 WB_RedLevelsDaylight int16u[7] 234 WB_BlueLevelsDaylight int16u[7] 248 WB_RedLevelsCloudy int16u[7] 262 WB_BlueLevelsCloudy int16u[7] 276 WB_RedLevelsFlash int16u[7] 290 WB_BlueLevelsFlash int16u[7] 332 WB_RedLevelsFluorescent int16u[7] 346 WB_BlueLevelsFluorescent int16u[7] 360 WB_RedLevelsShade int16u[7] 374 WB_BlueLevelsShade int16u[7] 392 WB_RedLevel6500K int16u 394 WB_BlueLevel6500K int16u 396 WB_RedLevelCustom int16u 398 WB_BlueLevelCustom int16u 408 WB_RedLevel3500K int16u 410 WB_BlueLevel3500K int16u 446 WB_RedLevelsKelvin int16u[75] 596 WB_BlueLevelsKelvin int16u[75] 772 WB_RBLevelsFlash int16u[2] 776 WB_RBLevelsCoolWhiteF int16u[2] 1000 WB_RBLevelsTungsten int16u[2] 1004 WB_RBLevelsDaylight int16u[2] 1008 WB_RBLevelsCloudy int16u[2] 1012 WB_RBLevelsFlash int16u[2] 1020 WB_RedLevelsFluorescent int16u[7] 1034 WB_BlueLevelsFluorescent int16u[7] 1048 WB_RBLevelsShade int16u[2] 1056 WB_RBLevels6500K int16u[2] 1060 WB_RBLevelsCustom int16u[2] 1072 WB_RBLevels3500K int16u[2] 1320 WB_RBLevelsDaylight int16u[2] 1350 WB_RGBLevels int16u[3] 1576 AEMeteringSegments int8u[40] 1680 MeasuredLV int8u 1681 BrightnessValue int8u 4172 TiffMeteringImage N 18872 ExposureTime int8u 18874 ISO int8u 18875 FocusDistance int8u 18877 LensType int16uRev 18880 ExposureCompensation int8s 18881 FlashExposureComp int8s 18882 ImageStabilization int8u 18883 BrightnessValue int8u 18885 MaxAperture int8u 18887 FNumber int8u 18908 InternalSerialNumber string[12] =head3 Minolta CameraSettings5D Tags Index2 Tag Name Writable ------ -------- -------- 10 ExposureMode int16u 12 MinoltaImageSize int16u 13 MinoltaQuality int16u 14 WhiteBalance int16u 31 Flash int16u 32 FlashMode int16u 37 MeteringMode int16u 38 ISOSetting int16u 47 ColorSpace int16u 48 Sharpness int16u 49 Contrast int16u 50 Saturation int16u 53 ExposureTime int16u 54 FNumber int16u 55 FreeMemoryCardImages int16u 73 ColorTemperature int16s 74 HueAdjustment int16u 80 Rotation int16u 83 ExposureCompensation int16u 84 FreeMemoryCardImages int16u 101 Rotation int16u 110 ColorTemperature int16s 113 PictureFinish int16u 174 ImageNumber int16u 176 NoiseReduction int16u 189 ImageStabilization int16u =head3 Minolta CameraSettingsA100 Tags Camera settings information for the Sony DSLR-A100. Index2 Tag Name Writable ------ -------- -------- 0 ExposureMode int16u 1 ExposureCompensationSetting int16u 5 HighSpeedSync int16u 6 ShutterSpeedSetting int16u 7 ApertureSetting int16u 8 ExposureTime int16u 9 FNumber int16u 10 DriveMode2 int16u 11 WhiteBalance int16u 12 FocusMode int16u 13 AFPointSelected int16u 14 AFAreaMode int16u 15 FlashMode int16u 16 FlashExposureCompSet int16u 18 MeteringMode int16u 19 ISOSetting int16u 20 ZoneMatchingMode int16u 21 DynamicRangeOptimizer int16u 22 ColorMode int16u 23 ColorSpace int16u 24 Sharpness int16u 25 Contrast int16u 26 Saturation int16u 28 FlashMetering int16u 29 PrioritySetupShutterRelease int16u 30 DriveMode int16u 31 SelfTimerTime int16u 32 ContinuousBracketing int16u 33 SingleFrameBracketing int16u 34 WhiteBalanceBracketing int16u 35 WhiteBalanceSetting int16u 36 PresetWhiteBalance int16u 37 ColorTemperatureSetting int16u 38 CustomWBSetting int16u 39 DynamicRangeOptimizerSetting int16u 50 FreeMemoryCardImages int16u 52 CustomWBRedLevel int16u 53 CustomWBGreenLevel int16u 54 CustomWBBlueLevel int16u 55 CustomWBError int16u 56 WhiteBalanceFineTune int16s 57 ColorTemperature int16u 58 ColorCompensationFilter int16s 59 SonyImageSize int16u 60 SonyQuality int16u 61 InstantPlaybackTime int16u 62 InstantPlaybackSetup int16u 63 NoiseReduction int16u 64 EyeStartAF int16u 65 RedEyeReduction int16u 66 FlashDefault int16u 67 AutoBracketOrder int16u 68 FocusHoldButton int16u 69 AELButton int16u 70 ControlDialSet int16u 71 ExposureCompensationMode int16u 72 AFAssist int16u 73 CardShutterLock int16u 74 LensShutterLock int16u 75 AFAreaIllumination int16u 76 MonitorDisplayOff int16u 77 RecordDisplay int16u 78 PlayDisplay int16u 80 ExposureIndicator int16u 81 AELExposureIndicator int16u 82 ExposureBracketingIndicatorLast int16u 83 MeteringOffScaleIndicator int16u 84 FlashExposureIndicator int16u 85 FlashExposureIndicatorNext int16u 86 FlashExposureIndicatorLast int16u 87 ImageStabilization int16u 88 FocusModeSwitch int16u 89 FlashType int16u 90 Rotation int16u 91 AELock int16u 94 ColorTemperature int16u 95 ColorCompensationFilter int16s 96 BatteryState int16u =head3 Minolta MMA Tags This information is found in MOV videos from Minolta models such as the DiMAGE A2, S414 and 7Hi. Index1 Tag Name Writable ------ -------- -------- 0 Make N 20 SoftwareVersion N =head3 Minolta MOV1 Tags This information is found in MOV videos from some Konica Minolta models such as the DiMage Z10 and X50. Index1 Tag Name Writable ------ -------- -------- 0 Make N 32 ModelType N 46 ExposureTime N 50 FNumber N 58 ExposureCompensation N 80 FocalLength N =head3 Minolta MOV2 Tags This information is found in MOV videos from some Minolta models such as the DiMAGE X and Xt. Index1 Tag Name Writable ------ -------- -------- 0 Make N 24 ModelType N 38 ExposureTime N 42 FNumber N 50 ExposureCompensation N 72 FocalLength N =head2 Motorola Tags Tag ID Tag Name Writable ------ -------- -------- 0x665e Sensor string 0x6705 ManufactureDate string =head2 Nikon Tags Tag ID Tag Name Writable ------ -------- -------- 0x0001 MakerNoteVersion undef[4] 0x0002 ISO int16u[2] 0x0003 ColorMode string 0x0004 Quality string 0x0005 WhiteBalance string 0x0006 Sharpness string 0x0007 FocusMode string 0x0008 FlashSetting string 0x0009 FlashType string 0x000b WhiteBalanceFineTune int16s[n] 0x000c WB_RBLevels rational64u[4] 0x000d ProgramShift undef[4] 0x000e ExposureDifference undef[4] 0x000f ISOSelection string 0x0010 DataDump N 0x0011 PreviewIFD Nikon PreviewIFD 0x0012 FlashExposureComp undef[4] 0x0013 ISOSetting int16u[2] 0x0014 ColorBalanceA Nikon ColorBalanceA NRWData? Y 0x0016 ImageBoundary int16u[4] 0x0017 ExternalFlashExposureComp undef[4] 0x0018 FlashExposureBracketValue undef[4] 0x0019 ExposureBracketValue rational64s 0x001a ImageProcessing string 0x001b CropHiSpeed int16u[7]~ 0x001c ExposureTuning undef[3] 0x001d SerialNumber string! 0x001e ColorSpace int16u 0x001f VRInfo Nikon VRInfo 0x0020 ImageAuthentication int8u 0x0021 FaceDetect Nikon FaceDetect 0x0022 ActiveD-Lighting int16u 0x0023 PictureControlData Nikon PictureControl 0x0024 WorldTime Nikon WorldTime 0x0025 ISOInfo Nikon ISOInfo 0x002a VignetteControl int16u 0x002b DistortInfo Nikon DistortInfo 0x002c UnknownInfo Nikon UnknownInfo 0x0032 UnknownInfo2 Nikon UnknownInfo2 0x0035 HDRInfo Nikon HDRInfo 0x0039 LocationInfo Nikon LocationInfo 0x003d BlackLevel int16u[4] 0x0080 ImageAdjustment string 0x0081 ToneComp string 0x0082 AuxiliaryLens string 0x0083 LensType int8u 0x0084 Lens rational64u[4] 0x0085 ManualFocusDistance rational64u 0x0086 DigitalZoom rational64u 0x0087 FlashMode int8u 0x0088 AFInfo Nikon AFInfo Nikon AFInfo 0x0089 ShootingMode int16u~ 0x008b LensFStops undef[4] 0x008c ContrastCurve undef! 0x008d ColorHue string 0x008f SceneMode string 0x0090 LightSource string 0x0091 ShotInfoD40 Nikon ShotInfoD40 ShotInfoD80 Nikon ShotInfoD80 ShotInfoD90 Nikon ShotInfoD90 ShotInfoD3a Nikon ShotInfoD3a ShotInfoD3b Nikon ShotInfoD3b ShotInfoD3X Nikon ShotInfoD3X ShotInfoD3S Nikon ShotInfoD3S ShotInfoD300a Nikon ShotInfoD300a ShotInfoD300b Nikon ShotInfoD300b ShotInfoD300S Nikon ShotInfoD300S ShotInfoD700 Nikon ShotInfoD700 ShotInfoD800 Nikon ShotInfoD800 ShotInfoD810 Nikon ShotInfoD810 ShotInfoD5000 Nikon ShotInfoD5000 ShotInfoD5100 Nikon ShotInfoD5100 ShotInfoD5200 Nikon ShotInfoD5200 ShotInfoD7000 Nikon ShotInfoD7000 ShotInfoD4 Nikon ShotInfoD4 ShotInfoD4S Nikon ShotInfoD4S ShotInfo02xx Nikon ShotInfo ShotInfoUnknown Nikon ShotInfo 0x0092 HueAdjustment int16s 0x0093 NEFCompression int16u 0x0094 Saturation int16s 0x0095 NoiseReduction string 0x0096 NEFLinearizationTable undef! 0x0097 ColorBalance0100 Nikon ColorBalance1 ColorBalance0102 Nikon ColorBalance2 ColorBalance0103 Nikon ColorBalance3 ColorBalance0205 Nikon ColorBalance2 ColorBalance0209 Nikon ColorBalance4 ColorBalance02 Nikon ColorBalance2 ColorBalance0211 Nikon ColorBalance4 ColorBalance0213 Nikon ColorBalance2 ColorBalance0215 Nikon ColorBalance4 ColorBalanceUnknown02 Nikon ColorBalanceUnknown ColorBalanceUnknown04 Nikon ColorBalanceUnknown ColorBalanceUnknown Nikon ColorBalanceUnknown 0x0098 LensData0100 Nikon LensData00 LensData0101 Nikon LensData01 LensData0201 Nikon LensData01 LensData0204 Nikon LensData0204 LensData0400 Nikon LensData0400 LensDataUnknown Nikon LensDataUnknown 0x0099 RawImageCenter int16u[2] 0x009a SensorPixelSize rational64u[2] 0x009c SceneAssist string 0x009e RetouchHistory int16u[10] 0x00a0 SerialNumber string 0x00a2 ImageDataSize int32u 0x00a5 ImageCount int32u 0x00a6 DeletedImageCount int32u 0x00a7 ShutterCount int32u! 0x00a8 FlashInfo0100 Nikon FlashInfo0100 FlashInfo0102 Nikon FlashInfo0102 FlashInfo0103 Nikon FlashInfo0103 FlashInfoUnknown Nikon FlashInfoUnknown 0x00a9 ImageOptimization string 0x00aa Saturation string 0x00ab VariProgram string 0x00ac ImageStabilization string 0x00ad AFResponse string 0x00b0 MultiExposure Nikon MultiExposure 0x00b1 HighISONoiseReduction int16u 0x00b3 ToningEffect string 0x00b6 PowerUpTime undef 0x00b7 AFInfo2 Nikon AFInfo2 0x00b8 FileInfo Nikon FileInfo Nikon FileInfo 0x00b9 AFTune Nikon AFTune 0x00bb RetouchInfo Nikon RetouchInfo 0x00bd PictureControlData Nikon PictureControl 0x00c3 BarometerInfo Nikon BarometerInfo 0x0e00 PrintIM PrintIM 0x0e01 NikonCaptureData NikonCapture 0x0e09 NikonCaptureVersion string 0x0e0e NikonCaptureOffsets Nikon CaptureOffsets 0x0e10 NikonScanIFD Nikon Scan 0x0e13 NikonCaptureEditVersions NikonCapture NikonCaptureEditVersions undef! 0x0e1d NikonICCProfile ICC_Profile 0x0e1e NikonCaptureOutput Nikon CaptureOutput 0x0e22 NEFBitDepth int16u[4]! =head3 Nikon PreviewIFD Tags Tag ID Tag Name Writable ------ -------- -------- 0x00fe SubfileType N 0x0103 Compression N 0x011a XResolution N 0x011b YResolution N 0x0128 ResolutionUnit N 0x0201 PreviewImageStart int32u* 0x0202 PreviewImageLength int32u* 0x0213 YCbCrPositioning N =head3 Nikon ColorBalanceA Tags Index2 Tag Name Writable ------ -------- -------- 624 RedBalance int16u! 625 BlueBalance int16u! =head3 Nikon VRInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 VRInfoVersion N 4 VibrationReduction int8u 6 VRMode int8u =head3 Nikon FaceDetect Tags Index2 Tag Name Writable ------ -------- -------- 1 FaceDetectFrameSize int16u[2] 3 FacesDetected int16u 4 Face1Position int16u[4] 8 Face2Position int16u[4] 12 Face3Position int16u[4] 16 Face4Position int16u[4] 20 Face5Position int16u[4] 24 Face6Position int16u[4] 28 Face7Position int16u[4] 32 Face8Position int16u[4] 36 Face9Position int16u[4] 40 Face10Position int16u[4] 44 Face11Position int16u[4] 48 Face12Position int16u[4] =head3 Nikon PictureControl Tags Index1 Tag Name Writable ------ -------- -------- 0 PictureControlVersion N 4 PictureControlName string[20] 24 PictureControlBase string[20] 48 PictureControlAdjust int8u 49 PictureControlQuickAdjust int8u 50 Sharpness int8u 51 Contrast int8u 52 Brightness int8u 53 Saturation int8u 54 HueAdjustment int8u 55 FilterEffect int8u 56 ToningEffect int8u 57 ToningSaturation int8u =head3 Nikon WorldTime Tags Index1 Tag Name Writable ------ -------- -------- 0 TimeZone int16s 2 DaylightSavings int8u 3 DateDisplayFormat int8u =head3 Nikon ISOInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 ISO int8u 4 ISOExpansion int16u 6 ISO2 int8u 10 ISOExpansion2 int16u =head3 Nikon DistortInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 DistortionVersion? N 4 AutoDistortionControl int8u =head3 Nikon UnknownInfo Tags Index4 Tag Name Writable ------ -------- -------- 0 UnknownInfoVersion? N =head3 Nikon UnknownInfo2 Tags Index4 Tag Name Writable ------ -------- -------- 0 UnknownInfo2Version? N =head3 Nikon HDRInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 HDRInfoVersion string[4] 4 HDR int8u 5 HDRLevel int8u 6 HDRSmoothing int8u 7 HDRLevel2 int8u =head3 Nikon LocationInfo Tags Tags written by some Nikon GPS-equipped cameras like the AW100. Index1 Tag Name Writable ------ -------- -------- 0 LocationInfoVersion undef[4] 4 TextEncoding int8u 5 CountryCode undef[3] 8 POILevel int8u 9 Location undef[70] =head3 Nikon AFInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 AFAreaMode int8u 1 AFPoint int8u 2 AFPointsInFocus int16u =head3 Nikon ShotInfoD40 Tags These tags are extracted from encrypted data in D40 and D40X images. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 582 ShutterCount int32u 586.1 VibrationReduction int8u & 0x08 729 CustomSettingsD40 NikonCustom SettingsD40 =head3 Nikon ShotInfoD80 Tags These tags are extracted from encrypted data in D80 images. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 586 ShutterCount int32u 590.1 Rotation int8u & 0x07 590.2 VibrationReduction int8u & 0x18 590.3 FlashFired int8u & 0xe0 708 NikonImageSize int8u & 0xf0 708.1 ImageQuality int8u & 0x0f 748 CustomSettingsD80 NikonCustom SettingsD80 =head3 Nikon ShotInfoD90 Tags These tags are extracted from encrypted data in images from the D90 with firmware 1.00. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 693 ISO2 int8u 725 ShutterCount int32u 884 CustomSettingsD90 NikonCustom SettingsD90 =head3 Nikon ShotInfoD3a Tags These tags are extracted from encrypted data in images from the D3 with firmware 1.00 and earlier. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 598 ISO2 int8u 630 ShutterCount int32u 723.1 NikonImageSize int8u & 0x18 723.2 ImageQuality int8u & 0x07 769 CustomSettingsD3 NikonCustom SettingsD3 =head3 Nikon ShotInfoD3b Tags These tags are extracted from encrypted data in images from the D3 with firmware 1.10, 2.00, 2.01 and 2.02. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 16 ImageArea int8u 605 ISO2 int8u 637 ShutterCount int32u 639 ShutterCount int32u 650 PreFlashReturnStrength int8u 732.1 NikonImageSize int8u & 0x18 732.2 ImageQuality int8u & 0x07 778 CustomSettingsD3 NikonCustom SettingsD3 =head3 Nikon ShotInfoD3X Tags These tags are extracted from encrypted data in images from the D3X with firmware 1.00. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 605 ISO2 int8u 640 ShutterCount int32u 779 CustomSettingsD3X NikonCustom SettingsD3 =head3 Nikon ShotInfoD3S Tags These tags are extracted from encrypted data in images from the D3S with firmware 1.00 and earlier. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 16 ImageArea int8u 545 ISO2 int8u 578 ShutterCount int32u 718 CustomSettingsD3S NikonCustom SettingsD3 =head3 Nikon ShotInfoD300a Tags These tags are extracted from encrypted data in images from the D300 with firmware 1.00 and earlier. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 604 ISO2 int8u 633 ShutterCount int32u 721 AFFineTuneAdj int16u 790 CustomSettingsD300 NikonCustom SettingsD3 =head3 Nikon ShotInfoD300b Tags These tags are extracted from encrypted data in images from the D300 with firmware 1.10. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 613 ISO2 int8u 644 ShutterCount int32u 732 AFFineTuneAdj int16u 802 CustomSettingsD300 NikonCustom SettingsD3 =head3 Nikon ShotInfoD300S Tags These tags are extracted from encrypted data in images from the D300S with firmware 1.00. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 613 ISO2 int8u 646 ShutterCount int32u 804 CustomSettingsD300S NikonCustom SettingsD3 =head3 Nikon ShotInfoD700 Tags These tags are extracted from encrypted data in images from the D700 with firmware 1.02f. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 613 ISO2 int8u 647 ShutterCount int32u 804 CustomSettingsD700 NikonCustom SettingsD700 =head3 Nikon ShotInfoD800 Tags These tags are extracted from encrypted data in images from the D800. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 1216 RepeatingFlashOutputExternal int8u 1218 RepeatingFlashRateExternal int8u 1219 RepeatingFlashCountExternal int8u 1234 FlashExposureComp2 int8s 1242 RepeatingFlashRateBuilt-in int8u 1243 RepeatingFlashCountBuilt-in int8u 1308 SequenceNumber int8u 1531 ShutterCount int32u 1772 CustomSettingsD800 NikonCustom SettingsD800 =head3 Nikon ShotInfoD810 Tags These tags are extracted from encrypted data in images from the D810. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 64 CustomSettingsOffset N 5982 D810MeteringMode int8u & 0x03 6315 CustomSettingsD810 NikonCustom SettingsD810 =head3 Nikon ShotInfoD5000 Tags These tags are extracted from encrypted data in images from the D5000 with firmware 1.00. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 693 ISO2 int8u 726 ShutterCount int32u 888 CustomSettingsD5000 NikonCustom SettingsD5000 =head3 Nikon ShotInfoD5100 Tags Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 801 ShutterCount int32u 1031 CustomSettingsD5100 NikonCustom SettingsD5100 =head3 Nikon ShotInfoD5200 Tags Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 3032 ShutterCount int32u 3285 CustomSettingsD5200 NikonCustom SettingsD5200 =head3 Nikon ShotInfoD7000 Tags These tags are extracted from encrypted data in images from the D7000 with firmware 1.01b. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 800 ShutterCount int32u 1028 CustomSettingsD7000 NikonCustom SettingsD7000 =head3 Nikon ShotInfoD4 Tags These tags are extracted from encrypted data in images from the D4. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 1873 CustomSettingsD4 NikonCustom SettingsD4 =head3 Nikon ShotInfoD4S Tags These tags are extracted from encrypted data in images from the D4S. Index Tag Name Writable ----- -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 6301 CustomSettingsD4S NikonCustom SettingsD4 6338 MultiSelectorLiveViewMode int8u & 0xc0 6461 CustomSettingsD4S NikonCustom SettingsD4 13579 RollAngle fixed32u 13583 PitchAngle fixed32u 13587 YawAngle fixed32u =head3 Nikon ShotInfo Tags This information is encrypted for ShotInfoVersion 02xx, and some tags are only valid for specific models. Index1 Tag Name Writable ------ -------- -------- 0 ShotInfoVersion N 4 FirmwareVersion N 16 DistortionControl int8u 102 VR_0x66? int8u 106 ShutterCount int32u 110 DeletedImageCount int32u 117 VibrationReduction int8u 130 VibrationReduction int8u 343 ShutterCount undef[2] 430 VibrationReduction int8u 589 ShutterCount int32u =head3 Nikon ColorBalance1 Tags Index2 Tag Name Writable ------ -------- -------- 0 WB_RBGGLevels int16u[4]! =head3 Nikon ColorBalance2 Tags This information is encrypted for most camera models. Index2 Tag Name Writable ------ -------- -------- 0 WB_RGGBLevels int16u[4]! =head3 Nikon ColorBalance3 Tags Index2 Tag Name Writable ------ -------- -------- 0 WB_RGBGLevels int16u[4]! =head3 Nikon ColorBalance4 Tags Index2 Tag Name Writable ------ -------- -------- 0 WB_GRBGLevels int16u[4]! =head3 Nikon ColorBalanceUnknown Tags Index1 Tag Name Writable ------ -------- -------- 0 ColorBalanceVersion undef[4] =head3 Nikon LensData00 Tags This structure is used by the D100, and D1X with firmware version 1.1. Index1 Tag Name Writable ------ -------- -------- 0 LensDataVersion N 6 LensIDNumber int8u 7 LensFStops int8u 8 MinFocalLength int8u 9 MaxFocalLength int8u 10 MaxApertureAtMinFocal int8u 11 MaxApertureAtMaxFocal int8u 12 MCUVersion int8u =head3 Nikon LensData01 Tags Nikon encrypts the LensData information below if LensDataVersion is 0201 or higher, but the decryption algorithm is known so the information can be extracted. Index1 Tag Name Writable ------ -------- -------- 0 LensDataVersion N 4 ExitPupilPosition int8u 5 AFAperture int8u 8 FocusPosition int8u 9 FocusDistance int8u 10 FocalLength int8u 11 LensIDNumber int8u 12 LensFStops int8u 13 MinFocalLength int8u 14 MaxFocalLength int8u 15 MaxApertureAtMinFocal int8u 16 MaxApertureAtMaxFocal int8u 17 MCUVersion int8u 18 EffectiveMaxAperture int8u =head3 Nikon LensData0204 Tags Nikon encrypts the LensData information below if LensDataVersion is 0201 or higher, but the decryption algorithm is known so the information can be extracted. Index1 Tag Name Writable ------ -------- -------- 0 LensDataVersion N 4 ExitPupilPosition int8u 5 AFAperture int8u 8 FocusPosition int8u 10 FocusDistance int8u 11 FocalLength int8u 12 LensIDNumber int8u 13 LensFStops int8u 14 MinFocalLength int8u 15 MaxFocalLength int8u 16 MaxApertureAtMinFocal int8u 17 MaxApertureAtMaxFocal int8u 18 MCUVersion int8u 19 EffectiveMaxAperture int8u =head3 Nikon LensData0400 Tags Tags extracted from the encrypted lens data of Nikon 1 models. Index1 Tag Name Writable ------ -------- -------- 0 LensDataVersion N 394 LensModel string[64] =head3 Nikon LensDataUnknown Tags Index1 Tag Name Writable ------ -------- -------- 0 LensDataVersion N =head3 Nikon FlashInfo0100 Tags These tags are used by the D2H, D2Hs, D2X, D2Xs, D50, D70, D70s, D80 and D200. Index1 Tag Name Writable ------ -------- -------- 0 FlashInfoVersion N 4 FlashSource int8u 6 ExternalFlashFirmware int8u[2] 8 ExternalFlashFlags int8u 9.1 FlashCommanderMode int8u & 0x80 9.2 FlashControlMode int8u & 0x7f 10 FlashOutput int8u FlashCompensation int8s 11 FlashFocalLength int8u 12 RepeatingFlashRate int8u 13 RepeatingFlashCount int8u 14 FlashGNDistance int8u 15 FlashGroupAControlMode int8u & 0x0f 16 FlashGroupBControlMode int8u & 0x0f 17 FlashGroupAOutput int8u FlashGroupACompensation int8s 18 FlashGroupBOutput int8u FlashGroupBCompensation int8s =head3 Nikon FlashInfo0102 Tags These tags are used by the D3 (firmware 1.x), D40, D40X, D60 and D300 (firmware 1.00). Index1 Tag Name Writable ------ -------- -------- 0 FlashInfoVersion N 4 FlashSource int8u 6 ExternalFlashFirmware int8u[2] 8 ExternalFlashFlags int8u 9.1 FlashCommanderMode int8u & 0x80 9.2 FlashControlMode int8u & 0x7f 10 FlashOutput int8u FlashCompensation int8s 12 FlashFocalLength int8u 13 RepeatingFlashRate int8u 14 RepeatingFlashCount int8u 15 FlashGNDistance int8u 16.1 FlashGroupAControlMode int8u & 0x0f 17.1 FlashGroupBControlMode int8u & 0xf0 17.2 FlashGroupCControlMode int8u & 0x0f 18 FlashGroupAOutput int8u FlashGroupACompensation int8s 19 FlashGroupBOutput int8u FlashGroupBCompensation int8s 20 FlashGroupCOutput int8u FlashGroupCCompensation int8s =head3 Nikon FlashInfo0103 Tags These tags are used by the D3 (firmware 2.x), D3X, D3S, D4, D90, D300 (firmware 1.10), D300S, D600, D700, D800, D3000, D3100, D3200, D5000, D5100, D5200, D7000. Index1 Tag Name Writable ------ -------- -------- 0 FlashInfoVersion N 4 FlashSource int8u 6 ExternalFlashFirmware int8u[2] 8 ExternalFlashFlags int8u 9.1 FlashCommanderMode int8u & 0x80 9.2 FlashControlMode int8u & 0x7f 10 FlashOutput int8u FlashCompensation int8s 12 FlashFocalLength int8u 13 RepeatingFlashRate int8u 14 RepeatingFlashCount int8u 15 FlashGNDistance int8u 16 FlashColorFilter int8u 17.1 FlashGroupAControlMode int8u & 0x0f 18.1 FlashGroupBControlMode int8u & 0xf0 18.2 FlashGroupCControlMode int8u & 0x0f 19 FlashGroupAOutput int8u FlashGroupACompensation int8s 20 FlashGroupBOutput int8u FlashGroupBCompensation int8s 21 FlashGroupCOutput int8u FlashGroupCCompensation int8s 27 ExternalFlashCompensation int8s 29 FlashExposureComp3 int8s 39 FlashExposureComp4 int8s =head3 Nikon FlashInfoUnknown Tags Index1 Tag Name Writable ------ -------- -------- 0 FlashInfoVersion N =head3 Nikon MultiExposure Tags Index4 Tag Name Writable ------ -------- -------- 0 MultiExposureVersion N 1 MultiExposureMode int32u 2 MultiExposureShots int32u 3 MultiExposureAutoGain int32u =head3 Nikon AFInfo2 Tags These tags are written by Nikon DSLR's which have the live view feature. Index1 Tag Name Writable ------ -------- -------- 0 AFInfo2Version N 4 ContrastDetectAF int8u 5 AFAreaMode int8u 6 PhaseDetectAF int8u 7 PrimaryAFPoint int8u 8 AFPointsUsed undef[7] AFPointsUsed undef[2] AFPointsUsed undef[7] AFPointsUsed undef[17] AFPointsUsed undef[21] AFPointsUsed undef[29] AFPointsUsed undef[7] 16 AFImageWidth int16u 18 AFImageHeight int16u 20 AFAreaXPosition int16u 22 AFAreaYPosition int16u 24 AFAreaWidth int16u 26 AFAreaHeight int16u 28 ContrastDetectAFInFocus int8u =head3 Nikon FileInfo Tags Index2 Tag Name Writable ------ -------- -------- 0 FileInfoVersion N 3 DirectoryNumber int16u 4 FileNumber int16u =head3 Nikon AFTune Tags Index1 Tag Name Writable ------ -------- -------- 0 AFFineTune int8u 1 AFFineTuneIndex int8u 2 AFFineTuneAdj int8s =head3 Nikon RetouchInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 RetouchInfoVersion N 5 RetouchNEFProcessing int8s =head3 Nikon BarometerInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 BarometerInfoVersion N 6 Altitude int32s =head3 Nikon CaptureOffsets Tags Tag ID Tag Name Writable ------ -------- -------- 0x0001 IFD0_Offset N 0x0002 PreviewIFD_Offset N 0x0003 SubIFD_Offset N =head3 Nikon Scan Tags This information is written by the Nikon Scan software. Tag ID Tag Name Writable ------ -------- -------- 0x0002 FilmType string 0x0040 MultiSample string 0x0041 BitDepth int16u 0x0050 MasterGain rational64s 0x0051 ColorGain rational64s[3] 0x0060 ScanImageEnhancer int32u 0x0100 DigitalICE string 0x0110 ROCInfo Nikon ROC 0x0120 GEMInfo Nikon GEM 0x0200 DigitalDEEShadowAdj int32u 0x0201 DigitalDEEThreshold int32u 0x0202 DigitalDEEHighlightAdj int32u =head3 Nikon ROC Tags Index4 Tag Name Writable ------ -------- -------- 0 DigitalROC int32u =head3 Nikon GEM Tags Index4 Tag Name Writable ------ -------- -------- 0 DigitalGEM int32u =head3 Nikon CaptureOutput Tags Index4 Tag Name Writable ------ -------- -------- 2 OutputImageWidth int32u 3 OutputImageHeight int32u 4 OutputResolution int32u =head3 Nikon Type2 Tags Tag ID Tag Name Writable ------ -------- -------- 0x0003 Quality Y 0x0004 ColorMode Y 0x0005 ImageAdjustment Y 0x0006 CCDSensitivity Y 0x0007 WhiteBalance Y 0x0008 Focus Y 0x000a DigitalZoom Y 0x000b Converter Y =head3 Nikon NCDT Tags Nikon-specific QuickTime tags found in the NCDT atom of MOV videos from various Nikon models. Tag ID Tag Name Writable ------ -------- -------- 'NCDB' NikonNCDB Nikon NCDB 'NCHD' MakerNoteVersion N 'NCTG' NikonTags Nikon NCTG 'NCTH' ThumbnailImage N 'NCVW' PreviewImage N =head3 Nikon NCDB Tags Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head3 Nikon NCTG Tags These tags are found in proprietary-format records of the NCTG atom in MOV videos from some Nikon cameras. Tag ID Tag Name Writable ------ -------- -------- 0x0001 Make N 0x0002 Model N 0x0003 Software N 0x0011 CreateDate N 0x0012 DateTimeOriginal N 0x0013 FrameCount N 0x0016 FrameRate N 0x0022 FrameWidth N 0x0023 FrameHeight N 0x0032 AudioChannels N 0x0033 AudioBitsPerSample N 0x0034 AudioSampleRate N 0x110829a ExposureTime N 0x110829d FNumber N 0x1108822 ExposureProgram N 0x1109204 ExposureCompensation N 0x1109207 MeteringMode N 0x110920a FocalLength N 0x110a434 LensModel N 0x1200000 GPSVersionID N 0x1200001 GPSLatitudeRef N 0x1200002 GPSLatitude N 0x1200003 GPSLongitudeRef N 0x1200004 GPSLongitude N 0x1200005 GPSAltitudeRef N 0x1200006 GPSAltitude N 0x1200007 GPSTimeStamp N 0x1200008 GPSSatellites N 0x1200010 GPSImgDirectionRef N 0x1200011 GPSImgDirection N 0x1200012 GPSMapDatum N 0x120001d GPSDateStamp N 0x2000001 MakerNoteVersion N 0x2000005 WhiteBalance N 0x2000007 FocusMode string 0x200000b WhiteBalanceFineTune N 0x200001b CropHiSpeed int16u[7]~ 0x200001e ColorSpace N 0x200001f VRInfo Nikon VRInfo 0x2000023 PictureControlData Nikon PictureControl 0x2000024 WorldTime Nikon WorldTime 0x2000025 ISOInfo Nikon ISOInfo 0x200002c UnknownInfo Nikon UnknownInfo 0x2000032 UnknownInfo2 Nikon UnknownInfo 0x2000039 LocationInfo Nikon LocationInfo 0x2000083 LensType N 0x2000084 Lens N 0x2000087 FlashMode int8u 0x20000ab VariProgram string 0x20000b1 HighISONoiseReduction int16u 0x20000b7 AFInfo2 Nikon AFInfo2 =head3 Nikon MOV Tags This information is found in MOV and QT videos from some Nikon cameras. Index1 Tag Name Writable ------ -------- -------- 0 Make N 24 Model N 38 ExposureTime N 42 FNumber N 50 ExposureCompensation N 68 WhiteBalance N 72 FocalLength N 175 Software N 223 ISO N =head3 Nikon AVI Tags Nikon-specific RIFF tags found in AVI videos. Tag ID Tag Name Writable ------ -------- -------- 'nctg' NikonTags Nikon AVITags 'ncth' ThumbnailImage N 'ncvr' NikonVers Nikon AVIVers 'ncvw' PreviewImage N =head3 Nikon AVITags Tags These tags and the AVIVer tags below are found in proprietary-format records of Nikon AVI videos. Tag ID Tag Name Writable ------ -------- -------- 0x0003 Make N 0x0004 Model N 0x0005 Software N 0x0006 Equipment N 0x0007 Orientation N 0x0008 ExposureTime N 0x0009 FNumber N 0x000a ExposureCompensation N 0x000b MaxApertureValue N 0x000c MeteringMode N 0x000f FocalLength N 0x0010 XResolution N 0x0011 YResolution N 0x0012 ResolutionUnit N 0x0013 DateTimeOriginal N 0x0014 CreateDate N 0x0016 Duration N 0x0018 FocusMode N 0x001b DigitalZoom N 0x001d ColorMode N 0x001e Sharpness N 0x001f WhiteBalance N 0x0020 NoiseReduction N =head3 Nikon AVIVers Tags Tag ID Tag Name Writable ------ -------- -------- 0x0001 MakerNoteType N 0x0002 MakerNoteVersion N =head2 NikonCustom Tags Unfortunately, the NikonCustom settings are stored in a binary data block which changes from model to model. This means that significant effort must be spent in decoding these for each model, usually requiring hundreds of test images from a dedicated Nikon owner. For this reason, the NikonCustom settings have not been decoded for all models. The tables below list the custom settings for the currently supported models. =head3 NikonCustom SettingsD40 Tags Custom settings for the Nikon D40. Index1 Tag Name Writable ------ -------- -------- 0.1 Beep int8u & 0x80 0.2 AFAssist int8u & 0x40 0.3 NoMemoryCard int8u & 0x20 0.4 ImageReview int8u & 0x10 1.1 AutoISO int8u & 0x80 1.2 AutoISOMax int8u & 0x30 1.3 AutoISOMinShutterSpeed int8u & 0x07 2.1 ImageReviewTime int8u & 0x07 3.1 MonitorOffTime int8u & 0xe0 3.2 MeteringTime int8u & 0x1c 3.3 SelfTimerTime int8u & 0x03 3.4 RemoteOnDuration int8u & 0xc0 4.1 AELockButton int8u & 0x0e 4.2 AELock int8u & 0x01 5.1 ShootingModeSetting int8u & 0x70 5.2 TimerFunctionButton int8u & 0x07 6.1 Metering int8u & 0x03 8.1 InternalFlash int8u & 0x10 8.2 ManualFlashOutput int8u & 0x07 9 FlashLevel int8s 10.1 FocusModeSetting int8u & 0xc0 11.1 AFAreaModeSetting int8u & 0x30 =head3 NikonCustom SettingsD80 Tags Custom settings for the Nikon D80. Index1 Tag Name Writable ------ -------- -------- 0.1 Beep int8u & 0x80 0.2 AFAssist int8u & 0x40 0.3 NoMemoryCard int8u & 0x20 0.4 ImageReview int8u & 0x10 0.5 Illumination int8u & 0x08 0.6 MainDialExposureComp int8u & 0x04 0.7 EVStepSize int8u & 0x01 1.1 AutoISO int8u & 0x40 1.2 AutoISOMax int8u & 0x30 1.3 AutoISOMinShutterSpeed int8u & 0x0f 2.1 AutoBracketSet int8u & 0xc0 2.2 AutoBracketOrder int8u & 0x20 3.1 MonitorOffTime int8u & 0xe0 3.2 MeteringTime int8u & 0x1c 3.3 SelfTimerTime int8u & 0x03 4.1 AELockButton int8u & 0x1e 4.2 AELock int8u & 0x01 4.3 RemoteOnDuration int8u & 0xc0 5.1 CommandDials int8u & 0x80 5.2 FunctionButton int8u & 0x78 6.1 GridDisplay int8u & 0x80 6.2 ViewfinderWarning int8u & 0x40 6.3 CenterWeightedAreaSize int8u & 0x0c 6.4 ExposureDelayMode int8u & 0x20 6.5 MB-D80Batteries int8u & 0x03 7.1 FlashWarning int8u & 0x80 7.2 FlashShutterSpeed int8u & 0x78 7.3 AutoFP int8u & 0x04 7.4 ModelingFlash int8u & 0x02 8.1 InternalFlash int8u & 0xc0 8.2 ManualFlashOutput int8u & 0x07 9.1 RepeatingFlashOutput int8u & 0x70 9.2 RepeatingFlashCount int8u & 0x0f 10.1 RepeatingFlashRate int8u & 0xf0 10.2 CommanderChannel int8u & 0x03 11.1 CommanderInternalFlash int8u & 0xc0 11.2 CommanderGroupAMode int8u & 0x30 11.3 CommanderGroupBMode int8u & 0x0c 12.1 CommanderInternalTTLComp int8u & 0x1f 12.2 CommanderInternalManualOutput int8u & 0xe0 13.1 CommanderGroupA_TTL-AAComp int8u & 0x1f 13.2 CommanderGroupAManualOutput int8u & 0xe0 14.1 CommanderGroupB_TTL-AAComp int8u & 0x1f 14.2 CommanderGroupBManualOutput int8u & 0xe0 15.1 CenterAFArea int8u & 0x80 15.2 FocusAreaSelection int8u & 0x04 15.3 AFAreaIllumination int8u & 0x03 16.1 AFAreaModeSetting int8u & 0xc0 =head3 NikonCustom SettingsD90 Tags Custom settings for the D90. Index1 Tag Name Writable ------ -------- -------- 0.1 LightSwitch int8u & 0x08 2.1 AFAreaModeSetting int8u & 0x60 2.2 CenterFocusPoint int8u & 0x10 2.3 AFAssist int8u & 0x01 2.4 AFPointIllumination int8u & 0x06 2.5 FocusPointWrap int8u & 0x08 3.1 AELockForMB-D80 int8u & 0x1c 3.2 MB-D80BatteryType int8u & 0x03 4.1 Beep int8u & 0x40 4.2 GridDisplay int8u & 0x02 4.3 ISODisplay int8u & 0x0c 4.4 ViewfinderWarning int8u & 0x01 4.5 NoMemoryCard int8u & 0x20 5.1 ScreenTips int8u & 0x04 5.2 FileNumberSequence int8u & 0x08 5.3 ShootingInfoDisplay int8u & 0xc0 5.4 LCDIllumination int8u & 0x20 6.1 EasyExposureComp int8u & 0x01 6.2 ReverseIndicators int8u & 0x80 7.1 ExposureControlStepSize int8u & 0x40 8.1 CenterWeightedAreaSize int8u & 0x60 8.2 FineTuneOptMatrixMetering int8u & 0x0f 9.1 FineTuneOptCenterWeighted int8u & 0xf0 9.2 FineTuneOptSpotMetering int8u & 0x0f 11.1 CLModeShootingSpeed int8u & 0x07 11.2 ExposureDelayMode int8u & 0x40 13.1 AutoBracketSet int8u & 0xe0 13.2 AutoBracketOrder int8u & 0x10 14.1 FuncButton int8u & 0x78 16.1 OKButton int8u & 0x18 17.1 AELockButton int8u & 0x38 18.1 CommandDialsReverseRotation int8u & 0x80 18.2 ShutterReleaseButtonAE-L int8u & 0x02 19.1 MeteringTime int8u & 0xf0 19.2 RemoteOnDuration int8u & 0x03 20.1 SelfTimerTime int8u & 0xc0 20.2 SelfTimerShotCount int8u & 0x1e 21.1 PlaybackMonitorOffTime int8u & 0x1c 21.2 ImageReviewTime int8u & 0xe0 22.1 MenuMonitorOffTime int8u & 0xe0 22.2 ShootingInfoMonitorOffTime int8u & 0x1c 23.1 FlashShutterSpeed int8u & 0x0f 24.1 InternalFlash int8u & 0xc0 24.2 ManualFlashOutput int8u & 0x1f 25.1 RepeatingFlashOutput int8u & 0x70 25.2 RepeatingFlashCount int8u & 0x0f 26.1 RepeatingFlashRate int8u & 0xf0 31.1 FlashWarning int8u & 0x80 31.2 CommanderInternalTTLComp int8u & 0x1f 31.3 ModelingFlash int8u & 0x20 31.4 AutoFP int8u & 0x40 32.1 CommanderGroupA_TTLComp int8u & 0x1f 33.1 CommanderGroupB_TTLComp int8u & 0x1f 34.1 LiveViewAF int8u & 0xc0 =head3 NikonCustom SettingsD3 Tags Custom settings for the D3, D3S, D3X, D300 and D300S. Index1 Tag Name Writable ------ -------- -------- 0.1 CustomSettingsBank int8u & 0x03 0.2 CustomSettingsAllDefault int8u & 0x80 1.1 AF-CPrioritySelection int8u & 0xc0 1.2 AF-SPrioritySelection int8u & 0x20 1.3 AFPointSelection int8u & 0x10 1.4 DynamicAFArea int8u & 0x0c 1.5 FocusTrackingLockOn int8u & 0x03 2.1 AFActivation int8u & 0x80 2.2 FocusPointWrap int8u & 0x08 2.3 AFPointIllumination int8u & 0x60 AFPointIllumination int8u & 0x06 2.4 AFPointBrightness int8u & 0x06 2.5 AFAssist int8u & 0x01 3.1 AFOnButton int8u & 0x07 3.2 VerticalAFOnButton int8u & 0x70 3.3 AF-OnForMB-D10 int8u & 0x70 4.1 FocusTrackingLockOn int8u & 0x07 4.2 AssignBktButton int8u & 0x08 4.3 MultiSelectorLiveView int8u & 0xc0 4.4 InitialZoomLiveView int8u & 0x30 6.1 ISOStepSize int8u & 0xc0 6.2 ExposureControlStepSize int8u & 0x30 6.3 ExposureCompStepSize int8u & 0x0c 6.4 EasyExposureCompensation int8u & 0x03 7.1 CenterWeightedAreaSize int8u & 0xe0 7.2 FineTuneOptCenterWeighted int8u & 0x0f 8.1 FineTuneOptMatrixMetering int8u & 0xf0 8.2 FineTuneOptSpotMetering int8u & 0x0f 9.1 MultiSelectorShootMode int8u & 0xc0 9.2 MultiSelectorPlaybackMode int8u & 0x30 9.3 InitialZoomSetting int8u & 0x0c 9.4 MultiSelector int8u & 0x01 10.1 ExposureDelayMode int8u & 0x40 10.2 CLModeShootingSpeed int8u & 0x07 10.3 CHModeShootingSpeed int8u & 0x30 11 MaxContinuousRelease int8u 12.1 ReverseIndicators int8u & 0x20 12.2 FileNumberSequence int8u & 0x02 FileNumberSequence int8u & 0x08 12.3 RearDisplay int8u & 0x80 12.4 ViewfinderDisplay int8u & 0x40 12.5 BatteryOrder int8u & 0x04 12.6 MB-D10Batteries int8u & 0x03 12.7 ScreenTips int8u & 0x10 13.1 Beep int8u & 0xc0 13.2 ShootingInfoDisplay int8u & 0x30 13.3 GridDisplay int8u & 0x02 13.4 ViewfinderWarning int8u & 0x01 13.5 MultiSelectorPlaybackMode int8u & 0x03 14.1 PreviewButton int8u & 0xf8 FuncButton int8u & 0xf8 14.2 PreviewButtonPlusDials int8u & 0x07 FuncButtonPlusDials int8u & 0x07 15.1 FuncButton int8u & 0xf8 PreviewButton int8u & 0xf8 15.2 FuncButtonPlusDials int8u & 0x07 PreviewButtonPlusDials int8u & 0x07 16.1 AELockButton int8u & 0xf8 16.2 AELockButtonPlusDials int8u & 0x07 17.1 CommandDialsReverseRotation int8u & 0x80 17.2 CommandDialsChangeMainSub int8u & 0x40 17.3 CommandDialsApertureSetting int8u & 0x20 17.4 CommandDialsMenuAndPlayback int8u & 0x10 17.5 LCDIllumination int8u & 0x08 17.6 PhotoInfoPlayback int8u & 0x04 17.7 ShutterReleaseButtonAE-L int8u & 0x02 17.8 ReleaseButtonToUseDial int8u & 0x01 18.1 SelfTimerTime int8u & 0x18 18.2 MonitorOffTime int8u & 0x07 20.1 FlashSyncSpeed int8u & 0xe0 FlashSyncSpeed int8u & 0xf0 20.2 FlashShutterSpeed int8u & 0x0f 21.1 AutoBracketSet int8u & 0xc0 AutoBracketSet int8u & 0xe0 21.2 AutoBracketModeM int8u & 0x30 AutoBracketModeM int8u & 0x18 21.3 AutoBracketOrder int8u & 0x08 AutoBracketOrder int8u & 0x04 21.4 ModelingFlash int8u & 0x01 22.1 NoMemoryCard int8u & 0x80 22.2 MeteringTime int8u & 0x0f 23.1 InternalFlash int8u & 0xc0 25.1 ImageReviewTime int8u & 0xe0 25.2 PlaybackMonitorOffTime int8u & 0x1c 26.1 MenuMonitorOffTime int8u & 0xe0 26.2 ShootingInfoMonitorOffTime int8u & 0x1c =head3 NikonCustom SettingsD700 Tags Custom settings for the D700. Index1 Tag Name Writable ------ -------- -------- 0.1 CustomSettingsBank int8u & 0x03 0.2 CustomSettingsAllDefault int8u & 0x80 1.1 AF-CPrioritySelection int8u & 0xc0 1.2 AF-SPrioritySelection int8u & 0x20 1.3 AFPointSelection int8u & 0x10 1.4 DynamicAFArea int8u & 0x0c 2.1 AFActivation int8u & 0x80 2.2 FocusPointWrap int8u & 0x08 2.3 AFPointIllumination int8u & 0x06 2.4 AFAssist int8u & 0x01 3.1 FocusTrackingLockOn int8u & 0x07 3.2 AF-OnForMB-D10 int8u & 0x70 4.1 ISOStepSize int8u & 0xc0 4.2 ExposureControlStepSize int8u & 0x30 4.3 ExposureCompStepSize int8u & 0x0c 4.4 EasyExposureCompensation int8u & 0x03 5.1 CenterWeightedAreaSize int8u & 0x70 6.1 FineTuneOptMatrixMetering int8u & 0xf0 6.2 FineTuneOptSpotMetering int8u & 0x0f 7.1 ShutterReleaseButtonAE-L int8u & 0x80 7.2 SelfTimerTime int8u & 0x30 7.3 MeteringTime int8u & 0x0f 8.1 PlaybackMonitorOffTime int8u & 0x38 8.2 MenuMonitorOffTime int8u & 0x07 9.1 ShootingInfoMonitorOffTime int8u & 0x38 9.2 ImageReviewTime int8u & 0x07 10.1 Beep int8u & 0xc0 10.2 ShootingInfoDisplay int8u & 0x30 10.3 LCDIllumination int8u & 0x08 10.4 ExposureDelayMode int8u & 0x04 10.5 GridDisplay int8u & 0x02 11.1 FileNumberSequence int8u & 0x40 11.2 CLModeShootingSpeed int8u & 0x07 12 MaxContinuousRelease int8u 13.1 ScreenTips int8u & 0x08 13.2 BatteryOrder int8u & 0x04 13.3 MB-D10BatteryType int8u & 0x03 15.1 FlashSyncSpeed int8u & 0xf0 15.2 FlashShutterSpeed int8u & 0x0f 16.1 FlashControlBuilt-in int8u & 0xc0 16.2 ManualFlashOutput int8u & 0x1f 17.1 RepeatingFlashOutput int8u & 0x70 17.2 RepeatingFlashCount int8u & 0x0f 18.1 RepeatingFlashRate int8u & 0xf0 18.2 CommanderInternalTTLChannel int8u & 0x03 20.1 CommanderInternalTTLCompBuiltin int8u & 0x1f 21.1 CommanderInternalTTLCompGroupA int8u & 0x1f 22.1 CommanderInternalTTLCompGroupB int8u & 0x1f 26.1 AutoBracketSet int8u & 0xc0 26.2 AutoBracketModeM int8u & 0x30 26.3 AutoBracketOrder int8u & 0x08 26.4 ModelingFlash int8u & 0x01 27.1 MultiSelectorShootMode int8u & 0xc0 27.2 MultiSelectorPlaybackMode int8u & 0x30 27.3 InitialZoomSetting int8u & 0x0c 27.4 MultiSelector int8u & 0x01 28.1 FuncButton int8u & 0xf8 29.1 PreviewButton int8u & 0xf8 30.1 AELockButton int8u & 0xf8 31.1 FuncButtonPlusDials int8u & 0x70 31.2 PreviewButtonPlusDials int8u & 0x07 32.1 AELockButtonPlusDials int8u & 0x70 33.1 CommandDialsReverseRotation int8u & 0x80 33.2 CommandDialsChangeMainSub int8u & 0x40 33.3 CommandDialsApertureSetting int8u & 0x20 33.4 CommandDialsMenuAndPlayback int8u & 0x10 33.5 ReverseIndicators int8u & 0x08 33.6 PhotoInfoPlayback int8u & 0x04 33.7 NoMemoryCard int8u & 0x02 33.8 ReleaseButtonToUseDial int8u & 0x01 =head3 NikonCustom SettingsD800 Tags Custom settings for the D800 and D800E. Index1 Tag Name Writable ------ -------- -------- 12.1 AutoBracketingSet int8u & 0xe0 12.2 AutoBracketOrder int8u & 0x10 12.3 AutoBracketingMode int8u & 0x0c 22.1 FlashSyncSpeed int8u & 0xf0 22.2 FlashShutterSpeed int8u & 0x0f 23.1 FlashControlBuilt-in int8u & 0xc0 23.2 ManualFlashOutput int8u & 0x1f 24.1 RepeatingFlashOutput int8u & 0x70 24.2 RepeatingFlashCount int8u & 0x0f 25.1 RepeatingFlashRate int8u & 0xf0 25.2 CommanderChannel int8u & 0x03 27.1 CommanderInternalFlash int8u & 0xc0 27.2 CommanderInternalManualOutput int8u & 0x1f 28.1 CommanderGroupAMode int8u & 0xc0 28.2 CommanderGroupAManualOutput int8u & 0x1f 29.1 CommanderGroupBMode int8u & 0xc0 29.2 CommanderGroupBManualOutput int8u & 0x1f 30.1 ModelingFlash int8u & 0x20 30.2 CommanderInternalTTLComp int8u & 0x1f 31.1 CommanderGroupA_TTL-AAComp int8u & 0x1f 32.1 CommanderGroupB_TTL-AAComp int8u & 0x1f =head3 NikonCustom SettingsD810 Tags Custom settings for the D810 Index1 Tag Name Writable ------ -------- -------- 0.1 LightSwitch int8u & 0x08 0.2 CustomSettingsBank int8u & 0x03 1.1 AF-CPrioritySelection int8u & 0xc0 1.2 AF-SPrioritySelection int8u & 0x20 1.3 AFPointSelection int8u & 0x10 1.4 FocusTrackingLockOn int8u & 0x07 2.1 AFActivation int8u & 0x80 2.2 FocusPointWrap int8u & 0x08 2.3 AFPointBrightness int8u & 0x06 2.4 AFAssist int8u & 0x01 3.1 BatteryOrder int8u & 0x40 3.2 MB-D12BatteryType int8u & 0x03 4.1 Pitch int8u & 0x40 4.2 NoMemoryCard int8u & 0x20 4.3 ISODisplay int8u & 0x0c 4.4 GridDisplay int8u & 0x02 5.1 ShootingInfoDisplay int8u & 0xc0 5.2 LCDIllumination int8u & 0x20 5.3 ElectronicFront-CurtainShutter int8u & 0x08 5.4 ScreenTips int8u & 0x04 5.5 Beep int8u & 0x03 6.1 ReverseIndicators int8u & 0x80 6.2 CommandDialsReverseRotation int8u & 0x18 6.3 EasyExposureCompensation int8u & 0x03 7.1 ExposureControlStepSize int8u & 0xc0 7.2 ISOStepSize int8u & 0x30 7.3 ExposureCompStepSize int8u & 0x0c 8.1 CenterWeightedAreaSize int8u & 0xe0 8.2 FineTuneOptMatrixMetering int8u & 0x0f 9.1 FineTuneOptCenterWeighted int8u & 0xf0 9.2 FineTuneOptSpotMetering int8u & 0x0f 10.1 MultiSelectorShootMode int8u & 0xc0 10.2 MultiSelectorPlaybackMode int8u & 0x30 10.3 MultiSelector int8u & 0x01 11.1 ExposureDelayMode int8u & 0xc0 11.2 CLModeShootingSpeed int8u & 0x0f 12.1 MaxContinuousRelease int8u 13.1 AutoBracketSet int8u & 0xe0 13.2 AutoBracketOrder int8u & 0x10 13.3 AutoBracketModeM int8u & 0x0c 14.1 FuncButton int8u & 0x1f 15.1 PreviewButton int8u & 0x1f 16.1 AssignBktButton int8u & 0x07 17.1 AELockButton int8u & 0x1f 18.1 CommandDialsChangeMainSub int8u & 0xe0 18.2 CommandDialsMenuAndPlayback int8u & 0x18 18.3 CommandDialsApertureSetting int8u & 0x04 18.4 ShutterReleaseButtonAE-L int8u & 0x02 18.5 ReleaseButtonToUseDial int8u & 0x01 19.1 StandbyTimer int8u & 0xf0 20.1 SelfTimerTime int8u & 0xc0 20.2 SelfTimerShotInterval int8u & 0x30 20.3 SelfTimerShotCount int8u & 0x0f 21.1 ImageReviewMonitorOffTime int8u & 0xe0 21.2 LiveViewMonitorOffTime int8u & 0x1c 22.1 MenuMonitorOffTime int8u & 0xe0 22.2 ShootingInfoMonitorOffTime int8u & 0x1c 23.1 FlashSyncSpeed int8u & 0xf0 23.2 FlashShutterSpeed int8u & 0x0f 24.1 FlashControlBuilt-in int8u & 0xc0 31.1 ModelingFlash int8u & 0x20 36.1 PlaybackMonitorOffTime int8u & 0xe0 37.1 MultiSelectorLiveView int8u & 0xc0 38.1 ShutterSpeedLock int8u & 0x80 38.2 ApertureLock int8u & 0x40 38.3 MovieShutterButton int8u & 0x20 38.4 FlashExposureCompArea int8u & 0x04 40.1 MovieAELockButtonAssignment int8u & 0x0f 41.1 MovieFunctionButton int8u & 0x70 41.2 MoviePreviewButton int8u & 0x07 42.1 FuncButtonPlusDials int8u & 0x0f 43.1 PreviewButtonPlusDials int8u & 0x0f 44.1 AELockButtonPlusDials int8u & 0x0f 45.1 AssignMovieRecordButton int8u & 0x0f 46.1 FineTuneOptHighlightWeighted int8u & 0x0f 47.1 DynamicAreaAFDisplay int8u & 0x80 47.2 AFPointIllumination int8u & 0x40 47.3 StoreByOrientation int8u & 0x18 47.4 GroupAreaAFIllumination int8u & 0x04 48.1 MatrixMetering int8u & 0x80 48.2 LiveViewButtonOptions int8u & 0x30 48.3 AFModeRestrictions int8u & 0x03 49.1 LimitAFAreaModeSelection int8u & 0x7e 50.1 AF-OnForMB-D12 int8u & 0x07 51.1 AssignRemoteFnButton int8u & 0x1f 52.1 LensFocusFunctionButtons int8u & 0x3f =head3 NikonCustom SettingsD5000 Tags Custom settings for the D5000. Index1 Tag Name Writable ------ -------- -------- 0.1 AFAreaModeSetting int8u & 0x60 0.2 AFAssist int8u & 0x01 2.1 Beep int8u & 0xc0 2.2 GridDisplay int8u & 0x02 2.3 ISODisplay int8u & 0x08 2.4 NoMemoryCard int8u & 0x20 3.1 FileNumberSequence int8u & 0x08 4.1 RangeFinder int8u & 0x10 4.2 DateImprint int8u & 0x08 4.3 ReverseIndicators int8u & 0x80 5.1 EVStepSize int8u & 0x40 9.1 ExposureDelayMode int8u & 0x40 11.1 AutoBracketSet int8u & 0xc0 12.1 TimerFunctionButton int8u & 0x38 15.1 AELockButton int8u & 0x38 16.1 ShutterReleaseButtonAE-L int8u & 0x02 16.2 CommandDialsReverseRotation int8u & 0x80 17.1 MeteringTime int8u & 0x70 17.2 RemoteOnDuration int8u & 0x03 18.1 SelfTimerTime int8u & 0xc0 18.2 SelfTimerShotCount int8u & 0x1e 19.1 ImageReviewTime int8u & 0xe0 20.1 PlaybackMenusTime int8u & 0xe0 22.1 InternalFlash int8u & 0xc0 22.2 ManualFlashOutput int8u & 0x1f 32.1 LiveViewAF int8u & 0x60 =head3 NikonCustom SettingsD5100 Tags Custom settings for the D5100. Index1 Tag Name Writable ------ -------- -------- 0.1 AF-CPrioritySelection int8u & 0x80 1.1 AFAssist int8u & 0x01 3.1 Beep int8u & 0xc0 3.2 NoMemoryCard int8u & 0x20 3.3 ISODisplay int8u & 0x08 4.1 FileNumberSequence int8u & 0x08 5.1 RangeFinder int8u & 0x10 5.2 ReverseIndicators int8u & 0x80 6.1 EVStepSize int8u & 0x40 10.1 ExposureDelayMode int8u & 0x40 12.1 AutoBracketSet int8u & 0xc0 13.1 TimerFunctionButton int8u & 0x38 16.1 AELockButton int8u & 0x38 17.1 ShutterReleaseButtonAE-L int8u & 0x02 17.2 CommandDialsReverseRotation int8u & 0x80 18.1 MeteringTime int8u & 0x70 18.2 RemoteOnDuration int8u & 0x03 19.1 SelfTimerTime int8u & 0xc0 19.2 SelfTimerShotCount int8u & 0x0f 20.1 ImageReviewTime int8u & 0xe0 20.2 LiveViewMonitorOffTime int8u & 0x1c 21.1 PlaybackMenusTime int8u & 0xe0 23.1 ManualFlashOutput int8u & 0x1f =head3 NikonCustom SettingsD5200 Tags Custom settings for the D5200. Index1 Tag Name Writable ------ -------- -------- 0.1 AF-CPrioritySelection int8u & 0x80 0.2 NumberOfFocusPoints int8u & 0x10 1.1 AFAssist int8u & 0x01 3.1 Beep int8u & 0xc0 3.2 NoMemoryCard int8u & 0x20 3.3 ISODisplay int8u & 0x08 4.1 FileNumberSequence int8u & 0x08 5.1 RangeFinder int8u & 0x04 5.2 ReverseExposureCompDial int8u & 0x10 5.3 ReverseShutterSpeedAperture int8u & 0x08 5.4 ReverseIndicators int8u & 0x80 6.1 EVStepSize int8u & 0x40 10.1 ExposureDelayMode int8u & 0x40 12.1 AutoBracketSet int8u & 0xc0 13.1 FunctionButton int8u & 0x1f 16.1 AELockButton int8u & 0x0f 17.1 ShutterReleaseButtonAE-L int8u & 0x02 18.1 StandbyTimer int8u & 0xe0 18.2 RemoteOnDuration int8u & 0x03 19.1 SelfTimerTime int8u & 0xc0 19.2 SelfTimerShotCount int8u & 0x0f 20.1 ImageReviewTime int8u & 0xe0 20.2 LiveViewMonitorOffTime int8u & 0x1c 21.1 PlaybackMenusTime int8u & 0xe0 23.1 InternalFlash int8u & 0xc0 23.2 ManualFlashOutput int8u & 0x1f =head3 NikonCustom SettingsD7000 Tags Custom settings for the D7000. Index1 Tag Name Writable ------ -------- -------- 0.1 AF-CPrioritySelection int8u & 0x80 0.2 AF-SPrioritySelection int8u & 0x20 0.3 NumberOfFocusPoints int8u & 0x10 0.4 FocusTrackingLockOn int8u & 0x07 1.2 FocusPointWrap int8u & 0x08 1.3 AFPointIllumination int8u & 0x06 1.4 AFAssist int8u & 0x01 2.1 BatteryOrder int8u & 0x40 2.2 AF-OnForMB-D11 int8u & 0x1c 2.3 MB-D11BatteryType int8u & 0x03 3.1 BeepPitch int8u & 0xc0 3.2 NoMemoryCard int8u & 0x20 3.3 ISODisplay int8u & 0x0c 3.4 GridDisplay int8u & 0x02 3.5 ViewfinderWarning int8u & 0x01 4.1 ShootingInfoDisplay int8u & 0xc0 4.2 LCDIllumination int8u & 0x20 4.3 FileNumberSequence int8u & 0x08 4.4 ScreenTips int8u & 0x04 4.5 BeepVolume int8u & 0x03 5.1 ReverseIndicators int8u & 0x80 5.2 EasyExposureCompensation int8u & 0x03 6.1 ExposureControlStep int8u & 0x40 6.2 ISOSensitivityStep int8u & 0x10 7.1 CenterWeightedAreaSize int8u & 0xe0 10.1 ExposureDelayMode int8u & 0x40 10.2 CLModeShootingSpeed int8u & 0x07 11 MaxContinuousRelease int8u 12.1 AutoBracketSet int8u & 0xe0 12.2 AutoBracketOrder int8u & 0x10 13.1 FuncButton int8u & 0xf8 14.1 PreviewButton int8u & 0xf8 15.1 OKButton int8u & 0x18 16.1 AELockButton int8u & 0x38 17.1 CommandDialsReverseRotation int8u & 0x80 17.2 CommandDialsChangeMainSub int8u & 0x60 17.3 CommandDialsApertureSetting int8u & 0x04 17.4 CommandDialsMenuAndPlayback int8u & 0x18 17.5 ShutterReleaseButtonAE-L int8u & 0x02 17.6 ReleaseButtonToUseDial int8u & 0x01 18.1 MeteringTime int8u & 0xf0 18.2 RemoteOnDuration int8u & 0x03 19.1 SelfTimerTime int8u & 0xc0 19.2 SelfTimerInterval int8u & 0x30 19.3 SelfTimerShotCount int8u & 0x0f 20.1 ImageReviewTime int8u & 0xe0 20.2 LiveViewMonitorOffTime int8u & 0x1c 21.1 MenuMonitorOffTime int8u & 0xe0 21.2 ShootingInfoMonitorOffTime int8u & 0x1c 22.1 FlashSyncSpeed int8u & 0xf0 22.2 FlashShutterSpeed int8u & 0x0f 23.1 FlashControlBuilt-in int8u & 0xc0 23.2 ManualFlashOutput int8u & 0x1f 24.1 RepeatingFlashOutput int8u & 0x70 24.2 RepeatingFlashCount int8u & 0x0f 25.1 RepeatingFlashRate int8u & 0xf0 26.1 CommanderInternalTTLCompBuiltin int8u & 0x1f 27.1 CommanderInternalTTLCompGroupA int8u & 0x1f 28.1 CommanderInternalTTLCompGroupB int8u & 0x1f 30.1 FlashWarning int8u & 0x80 30.2 ModelingFlash int8u & 0x20 34.1 LiveViewAFAreaMode int8u & 0x60 34.2 LiveViewAFMode int8u & 0x02 35.1 PlaybackMonitorOffTime int8u & 0xe0 =head3 NikonCustom SettingsD4 Tags Custom settings for the D4 and D4S. Index1 Tag Name Writable ------ -------- -------- 0.1 CustomSettingsBank int8u & 0x03 1.1 AF-CPrioritySelection int8u & 0xc0 1.2 AF-SPrioritySelection int8u & 0x20 1.3 AFPointSelection int8u & 0x10 1.4 FocusTrackingLockOn int8u & 0x07 2.1 AFActivation int8u & 0x80 2.2 FocusPointWrap int8u & 0x08 4.1 Pitch int8u & 0x40 4.2 NoMemoryCard int8u & 0x20 4.3 GridDisplay int8u & 0x02 5.1 ShootingInfoDisplay int8u & 0xc0 5.2 LCDIllumination int8u & 0x20 5.3 ScreenTips int8u & 0x04 5.4 Beep int8u & 0x03 6.1 ReverseIndicators int8u & 0x80 6.2 RearDisplay int8u & 0x40 6.3 ViewfinderDisplay int8u & 0x20 6.4 CommandDialsReverseRotation int8u & 0x18 6.5 EasyExposureCompensation int8u & 0x03 7.1 ExposureControlStepSize int8u & 0xc0 7.2 ISOStepSize int8u & 0x30 7.3 ExposureCompStepSize int8u & 0x0c 8.1 CenterWeightedAreaSize int8u & 0xe0 8.2 FineTuneOptMatrixMetering int8u & 0x0f 9.1 FineTuneOptCenterWeighted int8u & 0xf0 9.2 FineTuneOptSpotMetering int8u & 0x0f 10.1 MultiSelectorShootMode int8u & 0xc0 10.2 MultiSelectorPlaybackMode int8u & 0x30 10.3 MultiSelector int8u & 0x01 11.1 ExposureDelayMode int8u & 0xc0 11.2 CHModeShootingSpeed int8u & 0x10 11.3 CLModeShootingSpeed int8u & 0x0f 12 MaxContinuousRelease int8u 13.1 AutoBracketSet int8u & 0xe0 13.2 AutoBracketOrder int8u & 0x10 13.3 AutoBracketModeM int8u & 0x0c 14.1 FuncButton int8u & 0xf8 14.2 FuncButtonPlusDials int8u & 0x07 15.1 PreviewButton int8u & 0xf8 15.2 PreviewButtonPlusDials int8u & 0x07 16.1 AssignBktButton int8u & 0x07 18.1 CommandDialsChangeMainSub int8u & 0xe0 18.2 CommandDialsMenuAndPlayback int8u & 0x18 18.3 CommandDialsApertureSetting int8u & 0x04 18.4 ShutterReleaseButtonAE-L int8u & 0x02 18.5 ReleaseButtonToUseDial int8u & 0x01 19.1 StandbyTimer int8u & 0xf0 20.1 SelfTimerTime int8u & 0xc0 20.2 SelfTimerShotCount int8u & 0x0f 20.3 SelfTimerShotInterval int8u & 0x30 21.1 ImageReviewMonitorOffTime int8u & 0xe0 21.2 LiveViewMonitorOffTime int8u & 0x1c 22.1 MenuMonitorOffTime int8u & 0xe0 22.2 ShootingInfoMonitorOffTime int8u & 0x1c 23.1 FlashSyncSpeed int8u & 0xf0 23.2 FlashShutterSpeed int8u & 0x0f 31.1 ModelingFlash int8u & 0x20 36.1 PlaybackMonitorOffTime int8u & 0xe0 37.1 PlaybackZoom int8u & 0x01 38.1 ShutterSpeedLock int8u & 0x80 38.2 ApertureLock int8u & 0x40 38.3 MovieShutterButton int8u & 0x30 38.4 FlashExposureCompArea int8u & 0x04 41.1 MovieFunctionButton int8u & 0x70 41.2 MoviePreviewButton int8u & 0x07 42.1 VerticalMultiSelector int8u & 0x60 42.2 VerticalFuncButton int8u & 0x1f 43.1 VerticalFuncButtonPlusDials int8u & 0xf0 43.2 AssignMovieRecordButton int8u & 0x07 46.1 DynamicAreaAFDisplay int8u & 0x80 46.2 AFPointIllumination int8u & 0x60 46.3 StoreByOrientation int8u & 0x18 46.4 GroupAreaAFIllumination int8u & 0x04 46.5 AFPointBrightness int8u & 0x03 47.1 AFOnButton int8u & 0x70 47.2 VerticalAFOnButton int8u & 0x07 48.1 SubSelectorAssignment int8u & 0x80 48.2 MovieSubSelectorAssignment int8u & 0x07 49.1 SubSelector int8u & 0xf8 49.2 SubSelectorPlusDials int8u & 0x07 50.1 MatrixMetering int8u & 0x80 50.2 LiveViewButtonOptions int8u & 0x30 50.3 AFModeRestrictions int8u & 0x03 51.1 LimitAFAreaModeSelection int8u & 0x7e 52.1 MovieFunctionButtonPlusDials int8u & 0x10 52.2 MoviePreviewButtonPlusDials int8u & 0x01 53.1 MovieSubSelectorAssignmentPlusDials int8u & 0x10 54.1 AssignRemoteFnButton int8u & 0x1f 55.1 LensFocusFunctionButtons int8u & 0x3f =head2 NikonCapture Tags This information is written by the Nikon Capture software in tag 0x0e01 of the maker notes of NEF images. Tag ID Tag Name Writable ------ -------- -------- 0x8ae85e LCHEditor int8u 0x83a1a25 HistogramXML undef 0xc89224b ColorAberrationControl int8u 0x116fea21 HighlightData NikonCapture HighlightData 0x2175eb78 D-LightingHQ int8u 0x2fc08431 StraightenAngle double 0x374233e0 CropData NikonCapture CropData 0x39c456ac PictureCtrl NikonCapture PictureCtrl 0x3cfc73c6 RedEyeData NikonCapture RedEyeData 0x3d136244 EditVersionName string 0x416391c6 QuickFix int8u 0x56a54260 Exposure NikonCapture Exposure 0x5f0e7d23 ColorBooster int8u 0x6a6e36b6 D-LightingHQSelected int8u 0x753dcbc0 NoiseReduction int8u 0x76a43200 UnsharpMask int8u 0x76a43201 Curves int8u 0x76a43202 ColorBalanceAdj int8u 0x76a43203 AdvancedRaw int8u 0x76a43204 WhiteBalanceAdj int8u 0x76a43205 VignetteControl int8u 0x76a43206 FlipHorizontal int8u 0x76a43207 Rotation int16u 0x84589434 BrightnessData NikonCapture Brightness 0x890ff591 D-LightingHQData NikonCapture DLightingHQ 0x926f13e0 NoiseReductionData NikonCapture NoiseReduction 0x9ef5f6e0 IPTCData IPTC 0xab5eca5e PhotoEffects int8u 0xac6bd5c0 VignetteControlIntensity int16s 0xb0384e1e PhotoEffectsData NikonCapture PhotoEffects 0xb999a36f ColorBoostData NikonCapture ColorBoost 0xbf3c6c20 WBAdjData NikonCapture WBAdjData 0xce5554aa D-LightingHS int8u 0xe2173c47 PictureControl int8u 0xe37b4337 D-LightingHSData NikonCapture DLightingHS 0xe42b5161 UnsharpData NikonCapture UnsharpData 0xe9651831 PhotoEffectHistoryXML undef 0xfe28a44f AutoRedEye int8u 0xfe443a45 ImageDustOff int8u =head3 NikonCapture HighlightData Tags Index1 Tag Name Writable ------ -------- -------- 0 ShadowProtection int8s 1 SaturationAdj int8s 6 HighlightProtection int8s =head3 NikonCapture CropData Tags Index1 Tag Name Writable ------ -------- -------- 30 CropLeft double 38 CropTop double 46 CropRight double 54 CropBottom double 142 CropOutputWidthInches double 150 CropOutputHeightInches double 158 CropScaledResolution double 174 CropSourceResolution double 182 CropOutputResolution double 190 CropOutputScale double 198 CropOutputWidth double 206 CropOutputHeight double 214 CropOutputPixels double =head3 NikonCapture PictureCtrl Tags Index1 Tag Name Writable ------ -------- -------- 0 PictureControlActive int8u 19 PictureControlMode string[16] 42 QuickAdjust int8u 43 SharpeningAdj int8u 44 ContrastAdj int8u 45 BrightnessAdj int8u 46 SaturationAdj int8u 47 HueAdj int8u =head3 NikonCapture RedEyeData Tags Index1 Tag Name Writable ------ -------- -------- 0 RedEyeCorrection int8u =head3 NikonCapture Exposure Tags Index1 Tag Name Writable ------ -------- -------- 0 ExposureAdj int16s 18 ExposureAdj2 double 36 ActiveD-Lighting int8u 37 ActiveD-LightingMode int8u =head3 NikonCapture Brightness Tags Index1 Tag Name Writable ------ -------- -------- 0 BrightnessAdj double 8 EnhanceDarkTones int8u =head3 NikonCapture DLightingHQ Tags Index4 Tag Name Writable ------ -------- -------- 0 D-LightingHQShadow int32u 1 D-LightingHQHighlight int32u 2 D-LightingHQColorBoost int32u =head3 NikonCapture NoiseReduction Tags Index1 Tag Name Writable ------ -------- -------- 4 EdgeNoiseReduction int8u 5 ColorMoireReductionMode int8u 9 NoiseReductionIntensity int32u 13 NoiseReductionSharpness int32u 17 NoiseReductionMethod int16u 21 ColorMoireReduction int8u 23 NoiseReduction int8u 24 ColorNoiseReductionIntensity int32u 28 ColorNoiseReductionSharpness int32u =head3 NikonCapture PhotoEffects Tags Index1 Tag Name Writable ------ -------- -------- 0 PhotoEffectsType int8u 4 PhotoEffectsRed int16s 6 PhotoEffectsGreen int16s 8 PhotoEffectsBlue int16s =head3 NikonCapture ColorBoost Tags Index1 Tag Name Writable ------ -------- -------- 0 ColorBoostType int8u 1 ColorBoostLevel int32u =head3 NikonCapture WBAdjData Tags Index1 Tag Name Writable ------ -------- -------- 0 WBAdjRedBalance double 8 WBAdjBlueBalance double 16 WBAdjMode int8u 20 WBAdjLighting int16u 24 WBAdjTemperature int16u 37 WBAdjTint int32s =head3 NikonCapture DLightingHS Tags Index4 Tag Name Writable ------ -------- -------- 0 D-LightingHSAdjustment int32u 1 D-LightingHSColorBoost int32u =head3 NikonCapture UnsharpData Tags Index1 Tag Name Writable ------ -------- -------- 0 UnsharpCount int8u 19 Unsharp1Color int16u 23 Unsharp1Intensity int16u 25 Unsharp1HaloWidth int16u 27 Unsharp1Threshold int8u 46 Unsharp2Color int16u 50 Unsharp2Intensity int16u 52 Unsharp2HaloWidth int16u 54 Unsharp2Threshold int8u 73 Unsharp3Color int16u 77 Unsharp3Intensity int16u 79 Unsharp3HaloWidth int16u 81 Unsharp3Threshold int8u 100 Unsharp4Color int16u 104 Unsharp4Intensity int16u 106 Unsharp4HaloWidth int16u 108 Unsharp4Threshold int8u =head2 Nintendo Tags Tag ID Tag Name Writable ------ -------- -------- 0x1101 CameraInfo Nintendo CameraInfo =head3 Nintendo CameraInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 ModelID undef[4] 8 TimeStamp int32u 24 InternalSerialNumber undef[4] 40 Parallax float 48 Category int16u =head2 Olympus Tags Tags 0x0000 through 0x0103 are used by some older Olympus cameras, and are the same as Konica/Minolta tags. These tags are also used for some models from other brands such as Acer, BenQ, Epson, Hitachi, HP, Maginon, Minolta, Pentax, Ricoh, Samsung, Sanyo, SeaLife, Sony, Supra and Vivitar. Tag ID Tag Name Writable ------ -------- -------- 0x0000 MakerNoteVersion undef 0x0001 MinoltaCameraSettingsOld Minolta CameraSettings 0x0003 MinoltaCameraSettings Minolta CameraSettings 0x0040 CompressedImageSize int32u 0x0081 PreviewImageData N 0x0088 PreviewImageStart N 0x0089 PreviewImageLength N 0x0100 ThumbnailImage undef 0x0104 BodyFirmwareVersion string 0x0200 SpecialMode int32u[3]~ 0x0201 Quality int16u~ 0x0202 Macro int16u 0x0203 BWMode int16u 0x0204 DigitalZoom rational64u 0x0205 FocalPlaneDiagonal rational64u 0x0206 LensDistortionParams int16s[6] 0x0207 CameraType string 0x0208 TextInfo Olympus TextInfo 0x0209 CameraID string 0x020b EpsonImageWidth int16u 0x020c EpsonImageHeight int16u 0x020d EpsonSoftware string 0x0280 PreviewImage int8u 0x0300 PreCaptureFrames int16u 0x0301 WhiteBoard int16u 0x0302 OneTouchWB int16u 0x0303 WhiteBalanceBracket int16u 0x0304 WhiteBalanceBias int16u 0x0401 BlackLevel int32u[4] 0x0403 SceneMode int16u 0x0404 SerialNumber string 0x0405 Firmware string 0x0e00 PrintIM PrintIM 0x0f00 DataDump N 0x0f01 DataDump2 N 0x0f04 ZoomedPreviewStart int32u* 0x0f05 ZoomedPreviewLength int32u* 0x0f06 ZoomedPreviewSize int16u[2] 0x1000 ShutterSpeedValue rational64s 0x1001 ISOValue rational64s 0x1002 ApertureValue rational64s 0x1003 BrightnessValue rational64s 0x1004 FlashMode int16u 0x1005 FlashDevice int16u 0x1006 ExposureCompensation rational64s 0x1007 SensorTemperature int16s 0x1008 LensTemperature int16s 0x1009 LightCondition int16u 0x100a FocusRange int16u 0x100b FocusMode int16u 0x100c ManualFocusDistance rational64u 0x100d ZoomStepCount int16u 0x100e FocusStepCount int16u 0x100f Sharpness int16u 0x1010 FlashChargeLevel int16u 0x1011 ColorMatrix int16u[9] 0x1012 BlackLevel int16u[4] 0x1013 ColorTemperatureBG? int16u 0x1014 ColorTemperatureRG? int16u 0x1015 WBMode int16u[2] 0x1017 RedBalance int16u[2] 0x1018 BlueBalance int16u[2] 0x1019 ColorMatrixNumber int16u 0x101a SerialNumber string 0x101b ExternalFlashAE1_0? int32u 0x101c ExternalFlashAE2_0? int32u 0x101d InternalFlashAE1_0? int32u 0x101e InternalFlashAE2_0? int32u 0x101f ExternalFlashAE1? int32u 0x1020 ExternalFlashAE2? int32u 0x1021 InternalFlashAE1? int32u 0x1022 InternalFlashAE2? int32u 0x1023 FlashExposureComp rational64s 0x1024 InternalFlashTable int16u 0x1025 ExternalFlashGValue rational64s 0x1026 ExternalFlashBounce int16u 0x1027 ExternalFlashZoom int16u 0x1028 ExternalFlashMode int16u 0x1029 Contrast int16u 0x102a SharpnessFactor int16u 0x102b ColorControl int16u[6] 0x102c ValidBits int16u[2] 0x102d CoringFilter int16u 0x102e OlympusImageWidth int32u 0x102f OlympusImageHeight int32u 0x1030 SceneDetect int16u 0x1031 SceneArea? int32u[8] 0x1033 SceneDetectData? int32u[720] 0x1034 CompressionRatio rational64u 0x1035 PreviewImageValid int32u 0x1036 PreviewImageStart int32u* 0x1037 PreviewImageLength int32u* 0x1038 AFResult int16u 0x1039 CCDScanMode int16u 0x103a NoiseReduction int16u 0x103b FocusStepInfinity int16u 0x103c FocusStepNear int16u 0x103d LightValueCenter rational64s 0x103e LightValuePeriphery rational64s 0x103f FieldCount? int16u 0x2010 Equipment Olympus Equipment EquipmentIFD Olympus Equipment 0x2020 CameraSettings Olympus CameraSettings CameraSettingsIFD Olympus CameraSettings 0x2030 RawDevelopment Olympus RawDevelopment RawDevelopmentIFD Olympus RawDevelopment 0x2031 RawDev2 Olympus RawDevelopment2 RawDev2IFD Olympus RawDevelopment2 0x2040 ImageProcessing Olympus ImageProcessing ImageProcessingIFD Olympus ImageProcessing 0x2050 FocusInfo Olympus FocusInfo FocusInfoIFD Olympus FocusInfo CameraParameters undef 0x2100 Olympus2100 Olympus FE Olympus2100IFD Olympus FE 0x2200 Olympus2200 Olympus FE Olympus2200IFD Olympus FE 0x2300 Olympus2300 Olympus FE Olympus2300IFD Olympus FE 0x2400 Olympus2400 Olympus FE Olympus2400IFD Olympus FE 0x2500 Olympus2500 Olympus FE Olympus2500IFD Olympus FE 0x2600 Olympus2600 Olympus FE Olympus2600IFD Olympus FE 0x2700 Olympus2700 Olympus FE Olympus2700IFD Olympus FE 0x2800 Olympus2800 Olympus FE Olympus2800IFD Olympus FE 0x2900 Olympus2900 Olympus FE Olympus2900IFD Olympus FE 0x3000 RawInfo Olympus RawInfo RawInfoIFD Olympus RawInfo 0x4000 MainInfo Olympus MainInfoIFD Olympus 0x5000 UnknownInfo Olympus UnknownInfo UnknownInfoIFD Olympus UnknownInfo =head3 Olympus TextInfo Tags This information is in text format (similar to APP12 information, but with spaces instead of linefeeds). Below are tags which have been observed, but any information found here will be extracted, even if the tag is not listed. Tag ID Tag Name Writable ------ -------- -------- 'Resolution' Resolution N 'Type' CameraType N =head3 Olympus Equipment Tags Tag ID Tag Name Writable ------ -------- -------- 0x0000 EquipmentVersion undef[4] 0x0100 CameraType2 string[6] 0x0101 SerialNumber string[32] 0x0102 InternalSerialNumber string[32] 0x0103 FocalPlaneDiagonal rational64u 0x0104 BodyFirmwareVersion int32u 0x0201 LensType int8u[6] 0x0202 LensSerialNumber string[32] 0x0203 LensModel string 0x0204 LensFirmwareVersion int32u 0x0205 MaxApertureAtMinFocal int16u 0x0206 MaxApertureAtMaxFocal int16u 0x0207 MinFocalLength int16u 0x0208 MaxFocalLength int16u 0x020a MaxAperture int16u 0x020b LensProperties int16u 0x0301 Extender int8u[6] 0x0302 ExtenderSerialNumber string[32] 0x0303 ExtenderModel string 0x0304 ExtenderFirmwareVersion int32u 0x0403 ConversionLens string 0x1000 FlashType int16u 0x1001 FlashModel int16u 0x1002 FlashFirmwareVersion int32u 0x1003 FlashSerialNumber string[32] =head3 Olympus CameraSettings Tags Tag ID Tag Name Writable ------ -------- -------- 0x0000 CameraSettingsVersion undef[4] 0x0100 PreviewImageValid int32u 0x0101 PreviewImageStart int32u* 0x0102 PreviewImageLength int32u* 0x0200 ExposureMode int16u 0x0201 AELock int16u 0x0202 MeteringMode int16u 0x0203 ExposureShift rational64s 0x0204 NDFilter Y 0x0300 MacroMode int16u 0x0301 FocusMode int16u[n] 0x0302 FocusProcess int16u[n] 0x0303 AFSearch int16u 0x0304 AFAreas int32u[64]~ 0x0305 AFPointSelected rational64s[5] 0x0306 AFFineTune int8u 0x0307 AFFineTuneAdj int16s[3] 0x0400 FlashMode int16u 0x0401 FlashExposureComp rational64s 0x0403 FlashRemoteControl int16u 0x0404 FlashControlMode int16u[n] 0x0405 FlashIntensity rational64s[n] 0x0406 ManualFlashStrength rational64s[n] 0x0500 WhiteBalance2 int16u 0x0501 WhiteBalanceTemperature int16u 0x0502 WhiteBalanceBracket int16s 0x0503 CustomSaturation int16s[3]~ 0x0504 ModifiedSaturation int16u 0x0505 ContrastSetting int16s[3] 0x0506 SharpnessSetting int16s[3] 0x0507 ColorSpace int16u 0x0509 SceneMode int16u 0x050a NoiseReduction int16u 0x050b DistortionCorrection int16u 0x050c ShadingCompensation int16u 0x050d CompressionFactor rational64u 0x050f Gradation int16s[n] 0x0520 PictureMode int16u[n] 0x0521 PictureModeSaturation int16s[3] 0x0522 PictureModeHue? int16s 0x0523 PictureModeContrast int16s[3] 0x0524 PictureModeSharpness int16s[3] 0x0525 PictureModeBWFilter int16s 0x0526 PictureModeTone int16s 0x0527 NoiseFilter int16s[3] 0x0529 ArtFilter int16u[4] 0x052c MagicFilter int16u[4] 0x052d PictureModeEffect int16s[3] 0x052e ToneLevel Y 0x052f ArtFilterEffect int16u[20] 0x0600 DriveMode int16u[n]~ 0x0601 PanoramaMode int16u~ 0x0603 ImageQuality2 int16u 0x0604 ImageStabilization int32u 0x0804 StackedImage int32u[2] 0x0900 ManometerPressure int16u 0x0901 ManometerReading int32s[2] 0x0902 ExtendedWBDetect int16u 0x0903 RollAngle int16s[2] 0x0904 PitchAngle int16s[2] 0x0908 DateTimeUTC string =head3 Olympus RawDevelopment Tags Tag ID Tag Name Writable ------ -------- -------- 0x0000 RawDevVersion undef[4] 0x0100 RawDevExposureBiasValue rational64s 0x0101 RawDevWhiteBalanceValue int16u 0x0102 RawDevWBFineAdjustment int16s 0x0103 RawDevGrayPoint int16u[3] 0x0104 RawDevSaturationEmphasis int16s[3] 0x0105 RawDevMemoryColorEmphasis int16u 0x0106 RawDevContrastValue int16s[3] 0x0107 RawDevSharpnessValue int16s[3] 0x0108 RawDevColorSpace int16u 0x0109 RawDevEngine int16u 0x010a RawDevNoiseReduction int16u 0x010b RawDevEditStatus int16u 0x010c RawDevSettings int16u =head3 Olympus RawDevelopment2 Tags Tag ID Tag Name Writable ------ -------- -------- 0x0000 RawDevVersion undef[4] 0x0100 RawDevExposureBiasValue rational64s 0x0101 RawDevWhiteBalance int16u 0x0102 RawDevWhiteBalanceValue int16u 0x0103 RawDevWBFineAdjustment int16s 0x0104 RawDevGrayPoint int16u[3] 0x0105 RawDevContrastValue int16s[3] 0x0106 RawDevSharpnessValue int16s[3] 0x0107 RawDevSaturationEmphasis int16s[3] 0x0108 RawDevMemoryColorEmphasis int16u 0x0109 RawDevColorSpace int16u 0x010a RawDevNoiseReduction int16u 0x010b RawDevEngine int16u 0x010c RawDevPictureMode int16u 0x010d RawDevPMSaturation int16s[3] 0x010e RawDevPMContrast int16s[3] 0x010f RawDevPMSharpness int16s[3] 0x0110 RawDevPM_BWFilter int16u 0x0111 RawDevPMPictureTone int16u 0x0112 RawDevGradation int16s[3] 0x0113 RawDevSaturation3 int16s[3] 0x0119 RawDevAutoGradation int16u 0x0120 RawDevPMNoiseFilter int16u 0x0121 RawDevArtFilter int16u[4] =head3 Olympus ImageProcessing Tags Tag ID Tag Name Writable ------ -------- -------- 0x0000 ImageProcessingVersion undef[4] 0x0100 WB_RBLevels int16u[2] 0x0102 WB_RBLevels3000K int16u[2] 0x0103 WB_RBLevels3300K int16u[2] 0x0104 WB_RBLevels3600K int16u[2] 0x0105 WB_RBLevels3900K int16u[2] 0x0106 WB_RBLevels4000K int16u[2] 0x0107 WB_RBLevels4300K int16u[2] 0x0108 WB_RBLevels4500K int16u[2] 0x0109 WB_RBLevels4800K int16u[2] 0x010a WB_RBLevels5300K int16u[2] 0x010b WB_RBLevels6000K int16u[2] 0x010c WB_RBLevels6600K int16u[2] 0x010d WB_RBLevels7500K int16u[2] 0x010e WB_RBLevelsCWB1 int16u[2] 0x010f WB_RBLevelsCWB2 int16u[2] 0x0110 WB_RBLevelsCWB3 int16u[2] 0x0111 WB_RBLevelsCWB4 int16u[2] 0x0113 WB_GLevel3000K int16u 0x0114 WB_GLevel3300K int16u 0x0115 WB_GLevel3600K int16u 0x0116 WB_GLevel3900K int16u 0x0117 WB_GLevel4000K int16u 0x0118 WB_GLevel4300K int16u 0x0119 WB_GLevel4500K int16u 0x011a WB_GLevel4800K int16u 0x011b WB_GLevel5300K int16u 0x011c WB_GLevel6000K int16u 0x011d WB_GLevel6600K int16u 0x011e WB_GLevel7500K int16u 0x011f WB_GLevel int16u 0x0200 ColorMatrix int16u[9] 0x0300 Enhancer int16u 0x0301 EnhancerValues int16u[7] 0x0310 CoringFilter int16u 0x0311 CoringValues int16u[7] 0x0600 BlackLevel2 int16u[4] 0x0610 GainBase int16u 0x0611 ValidBits int16u[2] 0x0612 CropLeft int16u[2] 0x0613 CropTop int16u[2] 0x0614 CropWidth int32u 0x0615 CropHeight int32u 0x0635 UnknownBlock1? undef 0x0636 UnknownBlock2? undef 0x0805 SensorCalibration int16s[2] 0x1010 NoiseReduction2 int16u 0x1011 DistortionCorrection2 int16u 0x1012 ShadingCompensation2 int16u 0x101c MultipleExposureMode int16u[2] 0x1103 UnknownBlock3? undef 0x1104 UnknownBlock4? undef 0x1112 AspectRatio int8u[2] 0x1113 AspectFrame int16u[4] 0x1200 FacesDetected int32u[n] 0x1201 FaceDetectArea int16s[n] 0x1202 MaxFaces int32u[3] 0x1203 FaceDetectFrameSize int16u[6] 0x1207 FaceDetectFrameCrop int16s[12] 0x1306 CameraTemperature N =head3 Olympus FocusInfo Tags Tag ID Tag Name Writable ------ -------- -------- 0x0000 FocusInfoVersion undef[4] 0x0209 AutoFocus? int16u 0x0210 SceneDetect int16u 0x0211 SceneArea? int32u[8] 0x0212 SceneDetectData? int32u[720] 0x0300 ZoomStepCount int16u 0x0301 FocusStepCount int16u 0x0303 FocusStepInfinity int16u 0x0304 FocusStepNear int16u 0x0305 FocusDistance rational64u 0x0308 AFPoint int16u 0x0328 AFInfo Olympus AFInfo 0x1201 ExternalFlash int16u[2] 0x1203 ExternalFlashGuideNumber? rational64s 0x1204 ExternalFlashBounce int16u 0x1205 ExternalFlashZoom rational64u 0x1208 InternalFlash int16u[n] 0x1209 ManualFlash int16u[2]~ 0x120a MacroLED int16u 0x1500 SensorTemperature int16s 0x1600 ImageStabilization undef~ =head3 Olympus AFInfo Tags Index1 Tag Name Writable ------ -------- -------- [no tags known] =head3 Olympus FE Tags Some FE models write a large number of tags here, but most of this information remains unknown. Tag ID Tag Name Writable ------ -------- -------- 0x0100 BodyFirmwareVersion string =head3 Olympus RawInfo Tags These tags are found only in ORF images of some models (eg. C8080WZ). Tag ID Tag Name Writable ------ -------- -------- 0x0000 RawInfoVersion undef[4] 0x0100 WB_RBLevelsUsed int16u[2] 0x0110 WB_RBLevelsAuto int16u[2] 0x0120 WB_RBLevelsShade int16u[2] 0x0121 WB_RBLevelsCloudy int16u[2] 0x0122 WB_RBLevelsFineWeather int16u[2] 0x0123 WB_RBLevelsTungsten int16u[2] 0x0124 WB_RBLevelsEveningSunlight int16u[2] 0x0130 WB_RBLevelsDaylightFluor int16u[2] 0x0131 WB_RBLevelsDayWhiteFluor int16u[2] 0x0132 WB_RBLevelsCoolWhiteFluor int16u[2] 0x0133 WB_RBLevelsWhiteFluorescent int16u[2] 0x0200 ColorMatrix2 int16u[9] 0x0310 CoringFilter int16u 0x0311 CoringValues int16u[11] 0x0600 BlackLevel2 int16u[4] 0x0601 YCbCrCoefficients N 0x0611 ValidPixelDepth int16u[2] 0x0612 CropLeft int16u 0x0613 CropTop int16u 0x0614 CropWidth int32u 0x0615 CropHeight int32u 0x1000 LightSource int16u 0x1001 WhiteBalanceComp int16s[3] 0x1010 SaturationSetting int16s[3] 0x1011 HueSetting int16s[3] 0x1012 ContrastSetting int16s[3] 0x1013 SharpnessSetting int16s[3] 0x2000 CMExposureCompensation rational64s 0x2001 CMWhiteBalance int16u 0x2002 CMWhiteBalanceComp int16s 0x2010 CMWhiteBalanceGrayPoint int16u[3] 0x2020 CMSaturation int16s[3] 0x2021 CMHue int16s[3] 0x2022 CMContrast int16s[3] 0x2023 CMSharpness int16s[3] =head3 Olympus UnknownInfo Tags Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head3 Olympus DSS Tags Information extracted from DSS/DS2 files and the ID3 XOLY frame of MP3 files written by some Olympus voice recorders. Index1 Tag Name Writable ------ -------- -------- 12 Model N 38 StartTime N 50 EndTime N 62 Duration N 798 Comment N =head3 Olympus MOV1 Tags This information is found in MOV videos from Olympus models such as the D540Z, D595Z, FE100, FE110, FE115, FE170 and FE200. Index1 Tag Name Writable ------ -------- -------- 0 Make N 24 Model N 38 ExposureUnknown? N 42 FNumber N 50 ExposureCompensation N 72 FocalLength N =head3 Olympus MOV2 Tags This information is found in MOV videos from Olympus models such as the FE120, FE140 and FE190. Index1 Tag Name Writable ------ -------- -------- 0 Make N 24 Model N 54 ExposureTime N 58 FNumber N 66 ExposureCompensation N 88 FocalLength N 193 ISO N =head3 Olympus MP4 Tags This information is found in MP4 videos from Olympus models such as the u7040 and u9010. Index1 Tag Name Writable ------ -------- -------- 0 Make N 24 Model N 40 FNumber N 48 ExposureCompensation N 104 MovableInfo Olympus MovableInfo 114 MovableInfo Olympus MovableInfo =head3 Olympus MovableInfo Tags Index1 Tag Name Writable ------ -------- -------- 4 ISO N 44 EncoderVersion N 60 DecoderVersion N 131 Thumbnail Olympus Thumbnail =head3 Olympus Thumbnail Tags Index4 Tag Name Writable ------ -------- -------- 1 ThumbnailWidth N 2 ThumbnailHeight N 3 ThumbnailLength N 4 ThumbnailOffset N =head3 Olympus MOV3 Tags QuickTime information found in the TAGS atom of MOV videos from the E-M5. Tag ID Tag Name Writable ------ -------- -------- 'OLYM' OlympusAtom Olympus OLYM2 =head3 Olympus OLYM2 Tags Tag ID Tag Name Writable ------ -------- -------- 'prms' MakerNotes Olympus prms 'scrn' PreviewInfo Olympus scrn2 'thmb' ThumbInfo Olympus thmb2 =head3 Olympus prms Tags Information extracted from the "prms" atom in MOV videos from Olympus models such as the OM E-M5. Index1 Tag Name Writable ------ -------- -------- 18 Make N 44 Model N 131 DateTime1 N 157 DateTime2 N =head3 Olympus scrn2 Tags Index1 Tag Name Writable ------ -------- -------- 2 OlympusPreview Olympus scrn =head3 Olympus scrn Tags Information extracted from the "scrn" atom of Olympus MP4 videos. Index1 Tag Name Writable ------ -------- -------- 0 PreviewImageLength N 4 PreviewImage N =head3 Olympus thmb2 Tags Index1 Tag Name Writable ------ -------- -------- 0 ThumbnailWidth N 2 ThumbnailHeight N 4 ThumbnailLength N 8 ThumbnailImage N =head3 Olympus thmb Tags Information extracted from the "thmb" atom of Olympus MP4 videos. Index1 Tag Name Writable ------ -------- -------- 0 ThumbnailLength N 4 ThumbnailImage N =head3 Olympus OLYM Tags Tags found in the OLYM atom of MP4 videos from the TG-810. Index1 Tag Name Writable ------ -------- -------- 14 Make N 40 Model N 90 FNumber N 127 DateTimeOriginal N 153 DateTime2 N 265 ThumbnailWidth N 267 ThumbnailHeight N =head3 Olympus AVI Tags This information is found in Olympus AVI videos. Index1 Tag Name Writable ------ -------- -------- 18 Make N 44 Model N 94 FNumber N 131 DateTime1 N 157 DateTime2 N 297 ThumbInfo Olympus thmb2 =head3 Olympus WAV Tags This information is found in WAV files from Olympus PCM linear recorders like the LS-5, LS-10, LS-11. Index1 Tag Name Writable ------ -------- -------- 12 Model N 28 FileNumber N 38 DateTimeOriginal N 50 DateTimeEnd N 62 RecordingTime N 512 Duration N 522 Index01 N 532 Index02 N 542 Index03 N 552 Index04 N 562 Index05 N 572 Index06 N 582 Index07 N 592 Index08 N 602 Index09 N 612 Index10 N 622 Index11 N 632 Index12 N 642 Index13 N 652 Index14 N 662 Index15 N 672 Index16 N =head2 Panasonic Tags These tags are used in Panasonic/Leica cameras. Tag ID Tag Name Writable ------ -------- -------- 0x0001 ImageQuality int16u 0x0002 FirmwareVersion undef 0x0003 WhiteBalance int16u 0x0007 FocusMode int16u 0x000f AFAreaMode int8u[2] 0x001a ImageStabilization int16u 0x001c MacroMode int16u 0x001f ShootingMode int16u 0x0020 Audio int16u 0x0021 DataDump N 0x0023 WhiteBalanceBias int16s 0x0024 FlashBias int16s 0x0025 InternalSerialNumber undef[16] 0x0026 PanasonicExifVersion undef 0x0028 ColorEffect int16u 0x0029 TimeSincePowerOn int32u 0x002a BurstMode int16u 0x002b SequenceNumber int32u 0x002c ContrastMode int16u 0x002d NoiseReduction int16u 0x002e SelfTimer int16u 0x0030 Rotation int16u 0x0031 AFAssistLamp int16u 0x0032 ColorMode int16u 0x0033 BabyAge string 0x0034 OpticalZoomMode int16u 0x0035 ConversionLens int16u 0x0036 TravelDay int16u 0x0039 Contrast int16u 0x003a WorldTimeLocation int16u 0x003b TextStamp int16u 0x003c ProgramISO int16u 0x003d AdvancedSceneType int16u 0x003e TextStamp int16u 0x003f FacesDetected int16u 0x0040 Saturation int16u 0x0041 Sharpness int16u 0x0042 FilmMode int16u 0x0044 ColorTempKelvin int16u 0x0045 BracketSettings int16u 0x0046 WBShiftAB int16u 0x0047 WBShiftGM int16u 0x0048 FlashCurtain int16u 0x0049 LongExposureNoiseReduction int16u 0x004b PanasonicImageWidth int32u 0x004c PanasonicImageHeight int32u 0x004d AFPointPosition rational64u[2] 0x004e FaceDetInfo Panasonic FaceDetInfo 0x0051 LensType string 0x0052 LensSerialNumber string 0x0053 AccessoryType string 0x0054 AccessorySerialNumber string 0x0059 Transform undef[4] 0x005d IntelligentExposure int16u 0x0060 LensFirmwareVersion undef[4] 0x0061 FaceRecInfo Panasonic FaceRecInfo 0x0062 FlashWarning int16u 0x0063 RecognizedFaceFlags? undef[4] 0x0065 Title undef 0x0066 BabyName undef 0x0067 Location undef 0x0069 Country undef 0x006b State undef 0x006d City undef 0x006f Landmark undef 0x0070 IntelligentResolution int8u 0x0077 BurstSpeed int16u 0x0079 IntelligentD-Range int16u 0x007c ClearRetouch int16u 0x0080 City2 undef 0x0086 ManometerPressure int16u 0x0089 PhotoStyle int16u 0x008a ShadingCompensation int16u 0x008c AccelerometerZ int16u 0x008d AccelerometerX int16u 0x008e AccelerometerY int16u 0x008f CameraOrientation int8u 0x0090 RollAngle int16u 0x0091 PitchAngle int16u 0x0093 SweepPanoramaDirection int8u 0x0094 SweepPanoramaFieldOfView int16u 0x0096 TimerRecording int8u 0x009d InternalNDFilter rational64u 0x009e HDR int16u 0x009f ShutterType int16u 0x00a3 ClearRetouchValue rational64u 0x00ab TouchAE int16u 0x0e00 PrintIM PrintIM 0x8000 MakerNoteVersion undef 0x8001 SceneMode int16u 0x8004 WBRedLevel int16u 0x8005 WBGreenLevel int16u 0x8006 WBBlueLevel int16u 0x8007 FlashFired int16u 0x8008 TextStamp int16u 0x8009 TextStamp int16u 0x8010 BabyAge string 0x8012 Transform undef[4] =head3 Panasonic FaceDetInfo Tags Face detection position information. Index2 Tag Name Writable ------ -------- -------- 0 NumFacePositions int16u 1 Face1Position int16u[4] 5 Face2Position int16u[4] 9 Face3Position int16u[4] 13 Face4Position int16u[4] 17 Face5Position int16u[4] =head3 Panasonic FaceRecInfo Tags Tags written by cameras with facial recognition. These cameras not only detect faces in an image, but also recognize specific people based a user-supplied set of known faces. Index1 Tag Name Writable ------ -------- -------- 0 FacesRecognized int16u 4 RecognizedFace1Name string[20] 24 RecognizedFace1Position int16u[4] 32 RecognizedFace1Age string[20] 52 RecognizedFace2Name string[20] 72 RecognizedFace2Position int16u[4] 80 RecognizedFace2Age string[20] 100 RecognizedFace3Name string[20] 120 RecognizedFace3Position int16u[4] 128 RecognizedFace3Age string[20] =head3 Panasonic Leica2 Tags These tags are used by the Leica M8. Tag ID Tag Name Writable ------ -------- -------- 0x0300 Quality int16u 0x0302 UserProfile int32u 0x0303 SerialNumber int32u 0x0304 WhiteBalance int16u 0x0310 LensType int32u 0x0311 ExternalSensorBrightnessValue rational64s 0x0312 MeasuredLV rational64s 0x0313 ApproximateFNumber rational64u 0x0320 CameraTemperature int32s 0x0321 ColorTemperature int32u 0x0322 WBRedLevel rational64u 0x0323 WBGreenLevel rational64u 0x0324 WBBlueLevel rational64u 0x0325 UV-IRFilterCorrection int32u 0x0330 CCDVersion int32u 0x0331 CCDBoardVersion int32u 0x0332 ControllerBoardVersion int32u 0x0333 M16CVersion int32u 0x0340 ImageIDNumber int32u =head3 Panasonic Leica3 Tags These tags are used by the Leica R8 and R9 digital backs. Tag ID Tag Name Writable ------ -------- -------- 0x000d WB_RGBLevels int16u[3] =head3 Panasonic Leica4 Tags This information is written by the M9. Tag ID Tag Name Writable ------ -------- -------- 0x3000 Subdir3000 Panasonic Subdir 0x3100 Subdir3100 Panasonic Subdir 0x3400 Subdir3400 Panasonic Subdir 0x3900 Subdir3900 Panasonic Subdir =head3 Panasonic Subdir Tags Tag ID Tag Name Writable ------ -------- -------- 0x300a Contrast int32u 0x300b Sharpening int32u 0x300d Saturation int32u 0x3033 WhiteBalance int32u 0x3034 JPEGQuality int32u 0x3036 WB_RGBLevels rational64u[3] 0x3038 UserProfile string 0x303a JPEGSize int32u 0x3103 SerialNumber string 0x3109 FirmwareVersion string 0x312a BaseISO int32u 0x312b SensorWidth int32u 0x312c SensorHeight int32u 0x312d SensorBitDepth int32u 0x3402 CameraTemperature int32s 0x3405 LensType int32u 0x3406 ApproximateFNumber rational64u 0x3407 MeasuredLV int32s 0x3408 ExternalSensorBrightnessValue int32s 0x3901 Data1 Panasonic Data1 0x3902 Data2 Panasonic Data2 =head3 Panasonic Data1 Tags Index1 Tag Name Writable ------ -------- -------- 22 LensType int32u[0.25] =head3 Panasonic Data2 Tags Index1 Tag Name Writable ------ -------- -------- [no tags known] =head3 Panasonic Leica5 Tags This information is written by the X1, X2, X VARIO and T. Tag ID Tag Name Writable ------ -------- -------- 0x0303 LensModel string 0x0407 OriginalFileName string 0x0408 OriginalDirectory string 0x040d ExposureMode int8u[4] 0x0410 ShotInfo Panasonic ShotInfo 0x0412 FilmMode string 0x0413 WB_RGBLevels rational64u[3] =head3 Panasonic ShotInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 FileIndex int16u =head3 Panasonic Leica6 Tags This information is written by the S2 and M (Typ 240), as a trailer in JPEG images. Tag ID Tag Name Writable ------ -------- -------- 0x0300 PreviewImage undef 0x0301 UnknownBlock? N 0x0303 LensType string =head3 Panasonic Leica9 Tags This information is written by the Leica S (Typ 007). Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head3 Panasonic Type2 Tags This type of maker notes is used by models such as the NV-DS65, PV-D2002, PV-DC3000, PV-DV203, PV-DV401, PV-DV702, PV-L2001, PV-SD4090, PV-SD5000 and iPalm. Index2 Tag Name Writable ------ -------- -------- 0 MakerNoteType N 3 Gain N =head3 Panasonic PANA Tags Tags extracted from the PANA and LEIC user data found in MP4 videos from various Panasonic and Leica models. Index1 Tag Name Writable ------ -------- -------- 0 Make N 4 Model N 12 Model N 22 Model N 52 Version1 N 62 Version2 N 80 MakerNoteLeica5 Panasonic Leica5 88 ThumbnailWidth N 90 ThumbnailHeight N 92 ThumbnailImage N 1334 ThumbnailWidth N 1338 ThumbnailHeight N 1342 ThumbnailLength N 1350 ThumbnailImage N 1358 ThumbnailWidth N 1362 ThumbnailHeight N 1366 ThumbnailLength N 1374 ThumbnailImage N 16488 ExifData EXIF 16512 ExifData EXIF =head2 Pentax Tags These tags are used in Pentax/Asahi cameras. Tag ID Tag Name Writable ------ -------- -------- 0x0000 PentaxVersion int8u[4] 0x0001 PentaxModelType int16u 0x0002 PreviewImageSize int16u[2] 0x0003 PreviewImageLength int32u* 0x0004 PreviewImageStart int32u* 0x0005 PentaxModelID int32u 0x0006 Date undef[4] 0x0007 Time undef[3] 0x0008 Quality int16u 0x0009 PentaxImageSize int16u 0x000b PictureMode int16u[n] 0x000c FlashMode int16u[n] 0x000d FocusMode int16u 0x000e AFPointSelected int16u 0x000f AFPointsInFocus int16u AFPointsInFocus int32u 0x0010 FocusPosition int16u 0x0012 ExposureTime int32u 0x0013 FNumber int16u 0x0014 ISO int16u 0x0015 LightReading int16u 0x0016 ExposureCompensation int16u 0x0017 MeteringMode int16u 0x0018 AutoBracketing int16u[n] 0x0019 WhiteBalance int16u 0x001a WhiteBalanceMode int16u 0x001b BlueBalance int16u 0x001c RedBalance int16u 0x001d FocalLength int32u 0x001e DigitalZoom int16u 0x001f Saturation int16u[n] 0x0020 Contrast int16u[n] 0x0021 Sharpness int16u[n] 0x0022 WorldTimeLocation int16u 0x0023 HometownCity int16u 0x0024 DestinationCity int16u 0x0025 HometownDST int16u 0x0026 DestinationDST int16u 0x0027 DSPFirmwareVersion undef 0x0028 CPUFirmwareVersion undef 0x0029 FrameNumber int32u 0x002d EffectiveLV int16u EffectiveLV int32u 0x0032 ImageEditing undef[4] 0x0033 PictureMode int8u[3] 0x0034 DriveMode int8u[4] 0x0035 SensorSize int16u[2] 0x0037 ColorSpace int16u 0x0038 ImageAreaOffset int16u[2] 0x0039 RawImageSize int16u[2]~ 0x003c AFPointsInFocus N 0x003d DataScaling int16u 0x003e PreviewImageBorders int8u[4] 0x003f LensRec Pentax LensRec 0x0040 SensitivityAdjust int16u 0x0041 ImageEditCount int16u 0x0047 CameraTemperature int8s 0x0048 AELock int16u 0x0049 NoiseReduction int16u 0x004d FlashExposureComp int32s FlashExposureComp int8s[2] 0x004f ImageTone int16u 0x0050 ColorTemperature int16u 0x0053 ColorTempDaylight undef[4] 0x0054 ColorTempShade undef[4] 0x0055 ColorTempCloudy undef[4] 0x0056 ColorTempTungsten undef[4] 0x0057 ColorTempFluorescentD undef[4] 0x0058 ColorTempFluorescentN undef[4] 0x0059 ColorTempFluorescentW undef[4] 0x005a ColorTempFlash undef[4] 0x005c ShakeReductionInfo Pentax SRInfo Pentax SRInfo2 0x005d ShutterCount undef[4] 0x0060 FaceInfo Pentax FaceInfo 0x0062 RawDevelopmentProcess int16u 0x0067 Hue int16u 0x0068 AWBInfo Pentax AWBInfo 0x0069 DynamicRangeExpansion undef[4] 0x006b TimeInfo Pentax TimeInfo 0x006c HighLowKeyAdj int16s[2] 0x006d ContrastHighlight int16s[2] 0x006e ContrastShadow int16s[2] 0x006f ContrastHighlightShadowAdj int8u 0x0070 FineSharpness int8u[n] 0x0071 HighISONoiseReduction int8u 0x0072 AFAdjustment int16s 0x0073 MonochromeFilterEffect int16u 0x0074 MonochromeToning int16u 0x0076 FaceDetect int8u[2] 0x0077 FaceDetectFrameSize int16u[2] 0x0079 ShadowCorrection int8u[n] 0x007a ISOAutoParameters int8u[2] 0x007b CrossProcess int8u 0x007d LensCorr Pentax LensCorr 0x007e WhiteLevel int32u 0x007f BleachBypassToning int16u 0x0080 AspectRatio Y 0x0082 BlurControl int8u[4] 0x0085 HDR int8u[4] 0x0088 NeutralDensityFilter int8u 0x008b ISO int32u 0x0200 BlackPoint int16u[4] 0x0201 WhitePoint int16u[4] 0x0203 ColorMatrixA int16s[9] 0x0204 ColorMatrixB int16s[9] 0x0205 CameraSettings Pentax CameraSettings CameraSettingsUnknown Pentax CameraSettingsUnknown 0x0206 AEInfo Pentax AEInfo AEInfo2 Pentax AEInfo2 AEInfo3 Pentax AEInfo3 AEInfoUnknown Pentax AEInfoUnknown 0x0207 LensInfo Pentax LensInfo Pentax LensInfo2 Pentax LensInfo3 Pentax LensInfo4 Pentax LensInfo5 0x0208 FlashInfo Pentax FlashInfo FlashInfoUnknown Pentax FlashInfoUnknown 0x0209 AEMeteringSegments int8u[n] 0x020a FlashMeteringSegments int8u[n] 0x020b SlaveFlashMeteringSegments int8u[n] 0x020d WB_RGGBLevelsDaylight int16u[4] 0x020e WB_RGGBLevelsShade int16u[4] 0x020f WB_RGGBLevelsCloudy int16u[4] 0x0210 WB_RGGBLevelsTungsten int16u[4] 0x0211 WB_RGGBLevelsFluorescentD int16u[4] 0x0212 WB_RGGBLevelsFluorescentN int16u[4] 0x0213 WB_RGGBLevelsFluorescentW int16u[4] 0x0214 WB_RGGBLevelsFlash int16u[4] 0x0215 CameraInfo Pentax CameraInfo 0x0216 BatteryInfo Pentax BatteryInfo 0x021b SaturationInfo? N 0x021f AFInfo Pentax AFInfo 0x0220 HuffmanTable? N 0x0221 KelvinWB Pentax KelvinWB 0x0222 ColorInfo Pentax ColorInfo 0x0224 EVStepInfo Pentax EVStepInfo 0x0226 ShotInfo Pentax ShotInfo 0x0227 FacePos Pentax FacePos 0x0228 FaceSize Pentax FaceSize 0x0229 SerialNumber string 0x022a FilterInfo Pentax FilterInfo 0x022b LevelInfo Pentax LevelInfo 0x022d WBLevels Pentax WBLevels 0x022e Artist string 0x022f Copyright string 0x0230 FirmwareVersion string 0x0231 ContrastDetectAFArea int16u[4] 0x0235 CrossProcessParams undef[10] 0x0239 LensInfoQ Pentax LensInfoQ 0x0243 PixelShiftInfo Pentax PixelShiftInfo 0x03fe DataDump N 0x03ff TempInfo Pentax TempInfo UnknownInfo Pentax UnknownInfo 0x0402 ToneCurve Y~ 0x0403 ToneCurves Y~ 0x0405 UnknownBlock? undef 0x0e00 PrintIM PrintIM =head3 Pentax LensRec Tags This record stores the LensType, plus one or two unknown bytes for some models. Index1 Tag Name Writable ------ -------- -------- 0 LensType int8u[2] 3 ExtenderStatus int8u =head3 Pentax SRInfo Tags Shake reduction information. Index1 Tag Name Writable ------ -------- -------- 0 SRResult int8u 1 ShakeReduction int8u 2 SRHalfPressTime int8u 3 SRFocalLength int8u =head3 Pentax SRInfo2 Tags Shake reduction information for the K-3. Index1 Tag Name Writable ------ -------- -------- 0 SRResult? int8u 1 ShakeReduction int8u =head3 Pentax FaceInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 FacesDetected int8u 2 FacePosition int8u[2] =head3 Pentax AWBInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 WhiteBalanceAutoAdjustment int8u 1 TungstenAWB int8u =head3 Pentax TimeInfo Tags Index1 Tag Name Writable ------ -------- -------- 0.1 WorldTimeLocation int8u & 0x01 0.2 HometownDST int8u & 0x02 0.3 DestinationDST int8u & 0x04 2 HometownCity int8u 3 DestinationCity int8u =head3 Pentax LensCorr Tags Index1 Tag Name Writable ------ -------- -------- 0 DistortionCorrection int8u 1 ChromaticAberrationCorrection int8u 2 PeripheralIlluminationCorr int8u 3 DiffractionCorrection int8u =head3 Pentax CameraSettings Tags Camera settings information written by Pentax DSLR cameras. Index1 Tag Name Writable ------ -------- -------- 0 PictureMode2 int8u 1.1 ProgramLine int8u & 0x03 1.2 EVSteps int8u & 0x20 1.3 E-DialInProgram int8u & 0x40 1.4 ApertureRingUse int8u & 0x80 2 FlashOptions int8u & 0xf0 2.1 MeteringMode2 int8u & 0x0f 3 AFPointMode int8u & 0xf0 3.1 FocusMode2 int8u & 0x0f 4 AFPointSelected2 int16u 6 ISOFloor int8u 7 DriveMode2 int8u 8 ExposureBracketStepSize int8u 9 BracketShotNumber int8u 10 WhiteBalanceSet int8u & 0xf0 10.1 MultipleExposureSet int8u & 0x0f 13 RawAndJpgRecording int8u 14.1 JpgRecordedPixels int8u & 0x03 14.2 LinkAEToAFPoint int8u & 0x01 14.3 SensitivitySteps int8u & 0x02 14.4 ISOAuto int8u & 0x04 16 FlashOptions2 int8u & 0xf0 16.1 MeteringMode3 int8u & 0x0f 17.1 SRActive int8u & 0x80 17.2 Rotation int8u & 0x60 17.3 ISOSetting int8u & 0x04 17.4 SensitivitySteps int8u & 0x02 18 TvExposureTimeSetting int8u 19 AvApertureSetting int8u 20 SvISOSetting int8u 21 BaseExposureCompensation int8u =head3 Pentax CameraSettingsUnknown Tags This information has not yet been decoded for models such as the K-01. Index1 Tag Name Writable ------ -------- -------- [no tags known] =head3 Pentax AEInfo Tags Auto-exposure information for most Pentax models. Index1 Tag Name Writable ------ -------- -------- 0 AEExposureTime int8u 1 AEAperture int8u 2 AE_ISO int8u 3 AEXv int8u 4 AEBXv int8s 5 AEMinExposureTime int8u 6 AEProgramMode int8u 7 AEFlags N 8 AEApertureSteps int8u 9 AEMaxAperture int8u 10 AEMaxAperture2 int8u 11 AEMinAperture int8u 12 AEMeteringMode int8u 13 AEWhiteBalance int8u & 0xf0 13.1 AEMeteringMode2 int8u & 0x0f 14 FlashExposureCompSet int8s 21 LevelIndicator int8u =head3 Pentax AEInfo2 Tags Auto-exposure information for the K-01. Index1 Tag Name Writable ------ -------- -------- 2 AEExposureTime int8u 3 AEAperture int8u 4 AE_ISO int8u 5 AEXv int8u 6 AEBXv int8s 8 AEError int8s 11 AEApertureSteps int8u 15 SceneMode int8u 16 AEMaxAperture int8u 17 AEMaxAperture2 int8u 18 AEMinAperture int8u 19 AEMinExposureTime int8u =head3 Pentax AEInfo3 Tags Auto-exposure information for the K-3, K-30, K-50 and K-500. Index1 Tag Name Writable ------ -------- -------- 16 AEExposureTime int8u 17 AEAperture int8u 18 AE_ISO int8u 28 AEMaxAperture int8u 29 AEMaxAperture2 int8u 30 AEMinAperture int8u 31 AEMinExposureTime int8u =head3 Pentax AEInfoUnknown Tags Index1 Tag Name Writable ------ -------- -------- [no tags known] =head3 Pentax LensInfo Tags Pentax lens information structure for models such as the *istD. Index1 Tag Name Writable ------ -------- -------- 0 LensType int8u[2] 3 LensData Pentax LensData =head3 Pentax LensInfo2 Tags Pentax lens information structure for models such as the K10D and K20D. Index1 Tag Name Writable ------ -------- -------- 0 LensType int8u[4] 4 LensData Pentax LensData =head3 Pentax LensData Tags Pentax lens data information. Some of these tags require interesting binary gymnastics to decode them into useful values. Index1 Tag Name Writable ------ -------- -------- 0.1 AutoAperture int8u & 0x01 0.2 MinAperture int8u & 0x06 0.3 LensFStops int8u & 0x70 1 LensKind? int8u 2 LC1? int8u 3 MinFocusDistance int8u & 0xf8 3.1 FocusRangeIndex int8u & 0x07 4 LC3? int8u 5 LC4? int8u 6 LC5? int8u 7 LC6? int8u 8 LC7? int8u 9 LensFocalLength int8u LC8? int8u 10 NominalMaxAperture int8u & 0xf0 10.1 NominalMinAperture int8u & 0x0f 11 LC10? int8u 12 LC11? int8u 13 LC12? int8u 14.1 MaxAperture int8u & 0x7f 15 LC14? int8u 16 LC15? int8u =head3 Pentax LensInfo3 Tags Pentax lens information structure for 645D. Index1 Tag Name Writable ------ -------- -------- 1 LensType int8u[4] 13 LensData Pentax LensData =head3 Pentax LensInfo4 Tags Pentax lens information structure for models such as the K-5 and K-r. Index1 Tag Name Writable ------ -------- -------- 1 LensType int8u[4] 12 LensData Pentax LensData =head3 Pentax LensInfo5 Tags Pentax lens information structure for the K-01 and newer models. Index1 Tag Name Writable ------ -------- -------- 1 LensType int8u[5] 15 LensData Pentax LensData =head3 Pentax FlashInfo Tags Flash information tags for the K10D, K20D and K200D. Index1 Tag Name Writable ------ -------- -------- 0 FlashStatus int8u 1 InternalFlashMode int8u 2 ExternalFlashMode int8u 3 InternalFlashStrength int8u 4 TTL_DA_AUp int8u 5 TTL_DA_ADown int8u 6 TTL_DA_BUp int8u 7 TTL_DA_BDown int8u 24.1 ExternalFlashGuideNumber int8u & 0x1f 25 ExternalFlashExposureComp int8u 26 ExternalFlashBounce int8u =head3 Pentax FlashInfoUnknown Tags Index1 Tag Name Writable ------ -------- -------- [no tags known] =head3 Pentax CameraInfo Tags Index4 Tag Name Writable ------ -------- -------- 0 PentaxModelID int32u 1 ManufactureDate int32u 2 ProductionCode int32u[2] 4 InternalSerialNumber int32u =head3 Pentax BatteryInfo Tags Index1 Tag Name Writable ------ -------- -------- 0.1 PowerSource int8u & 0x0f 1.1 BodyBatteryState int8u & 0xf0 1.2 GripBatteryState int8u & 0x0f GripBatteryState? int8u & 0x0f 2 BodyBatteryADNoLoad int8u BodyBatteryVoltage1 int16u 3 BodyBatteryADLoad int8u 4 GripBatteryADNoLoad int8u BodyBatteryVoltage2 int16u 5 GripBatteryADLoad int8u 6 BodyBatteryVoltage3 int16u 8 BodyBatteryVoltage4 int16u =head3 Pentax AFInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 AFPointsUnknown1? int16u 2 AFPointsUnknown2? int16u 4 AFPredictor int16s 6 AFDefocus int8u 7 AFIntegrationTime int8u 11 AFPointsInFocus int8u 509 AFHold int8u =head3 Pentax KelvinWB Tags White balance Blue/Red gains as a function of color temperature. Index2 Tag Name Writable ------ -------- -------- 1 KelvinWB_Daylight int16u[4] 5 KelvinWB_01 int16u[4] 9 KelvinWB_02 int16u[4] 13 KelvinWB_03 int16u[4] 17 KelvinWB_04 int16u[4] 21 KelvinWB_05 int16u[4] 25 KelvinWB_06 int16u[4] 29 KelvinWB_07 int16u[4] 33 KelvinWB_08 int16u[4] 37 KelvinWB_09 int16u[4] 41 KelvinWB_10 int16u[4] 45 KelvinWB_11 int16u[4] 49 KelvinWB_12 int16u[4] 53 KelvinWB_13 int16u[4] 57 KelvinWB_14 int16u[4] 61 KelvinWB_15 int16u[4] 65 KelvinWB_16 int16u[4] =head3 Pentax ColorInfo Tags Index1 Tag Name Writable ------ -------- -------- 16 WBShiftAB int8s 17 WBShiftGM int8s =head3 Pentax EVStepInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 EVSteps int8u 1 SensitivitySteps int8u =head3 Pentax ShotInfo Tags Index1 Tag Name Writable ------ -------- -------- 1 CameraOrientation int8u =head3 Pentax FacePos Tags Index2 Tag Name Writable ------ -------- -------- 0 Face1Position int16u[2] 2 Face2Position int16u[2] 4 Face3Position int16u[2] 6 Face4Position int16u[2] 8 Face5Position int16u[2] 10 Face6Position int16u[2] 12 Face7Position int16u[2] 14 Face8Position int16u[2] 16 Face9Position int16u[2] 18 Face10Position int16u[2] 20 Face11Position int16u[2] 22 Face12Position int16u[2] 24 Face13Position int16u[2] 26 Face14Position int16u[2] 28 Face15Position int16u[2] 30 Face16Position int16u[2] 32 Face17Position int16u[2] 34 Face18Position int16u[2] 36 Face19Position int16u[2] 38 Face20Position int16u[2] 40 Face21Position int16u[2] 42 Face22Position int16u[2] 44 Face23Position int16u[2] 46 Face24Position int16u[2] 48 Face25Position int16u[2] 50 Face26Position int16u[2] 52 Face27Position int16u[2] 54 Face28Position int16u[2] 56 Face29Position int16u[2] 58 Face30Position int16u[2] 60 Face31Position int16u[2] 62 Face32Position int16u[2] =head3 Pentax FaceSize Tags Index2 Tag Name Writable ------ -------- -------- 0 Face1Size int16u[2] 2 Face2Size int16u[2] 4 Face3Size int16u[2] 6 Face4Size int16u[2] 8 Face5Size int16u[2] 10 Face6Size int16u[2] 12 Face7Size int16u[2] 14 Face8Size int16u[2] 16 Face9Size int16u[2] 18 Face10Size int16u[2] 20 Face11Size int16u[2] 22 Face12Size int16u[2] 24 Face13Size int16u[2] 26 Face14Size int16u[2] 28 Face15Size int16u[2] 30 Face16Size int16u[2] 32 Face17Size int16u[2] 34 Face18Size int16u[2] 36 Face19Size int16u[2] 38 Face20Size int16u[2] 40 Face21Size int16u[2] 42 Face22Size int16u[2] 44 Face23Size int16u[2] 46 Face24Size int16u[2] 48 Face25Size int16u[2] 50 Face26Size int16u[2] 52 Face27Size int16u[2] 54 Face28Size int16u[2] 56 Face29Size int16u[2] 58 Face30Size int16u[2] 60 Face31Size int16u[2] 62 Face32Size int16u[2] =head3 Pentax FilterInfo Tags The parameters associated with each type of digital filter are unique, and these settings are also extracted with the DigitalFilter tag. Information is not extracted for filters that are "Off" unless the Unknown option is used. Index1 Tag Name Writable ------ -------- -------- 0 SourceDirectoryIndex int16u 2 SourceFileIndex int16u 5 DigitalFilter01 undef[17] 22 DigitalFilter02 undef[17] 39 DigitalFilter03 undef[17] 56 DigitalFilter04 undef[17] 73 DigitalFilter05 undef[17] 90 DigitalFilter06 undef[17] 107 DigitalFilter07 undef[17] 124 DigitalFilter08 undef[17] 141 DigitalFilter09 undef[17] 158 DigitalFilter10 undef[17] 175 DigitalFilter11 undef[17] 192 DigitalFilter12 undef[17] 209 DigitalFilter13 undef[17] 226 DigitalFilter14 undef[17] 243 DigitalFilter15 undef[17] 260 DigitalFilter16 undef[17] 277 DigitalFilter17 undef[17] 294 DigitalFilter18 undef[17] 311 DigitalFilter19 undef[17] 328 DigitalFilter20 undef[17] =head3 Pentax LevelInfo Tags Tags decoded from the electronic level information for the K-5. May not be valid for other models. Index1 Tag Name Writable ------ -------- -------- 0 LevelOrientation int8s & 0x0f 0.1 CompositionAdjust int8s & 0xf0 1 RollAngle int8s 2 PitchAngle int8s 5 CompositionAdjustX int8s 6 CompositionAdjustY int8s 7 CompositionAdjustRotation int8s =head3 Pentax WBLevels Tags Index1 Tag Name Writable ------ -------- -------- 2 WB_RGGBLevelsDaylight int16u[4] 11 WB_RGGBLevelsShade int16u[4] 20 WB_RGGBLevelsCloudy int16u[4] 29 WB_RGGBLevelsTungsten int16u[4] 38 WB_RGGBLevelsFluorescentD int16u[4] 47 WB_RGGBLevelsFluorescentN int16u[4] 56 WB_RGGBLevelsFluorescentW int16u[4] 65 WB_RGGBLevelsFlash int16u[4] 74 WB_RGGBLevelsFluorescentL int16u[4] 83 WB_RGGBLevelsUnknown? int16u[4] 92 WB_RGGBLevelsUserSelected int16u[4] =head3 Pentax LensInfoQ Tags More lens information stored by the Pentax Q. Index1 Tag Name Writable ------ -------- -------- 12 LensModel string[30] 42 LensInfo string[20] =head3 Pentax PixelShiftInfo Tags Pixel shift information stored by the K-3 II. Index1 Tag Name Writable ------ -------- -------- 0 PixelShiftResolution int8u =head3 Pentax TempInfo Tags A number of additional temperature readings are extracted from this 256-byte binary-data block in images from models such as the K-01, K-3, K-5, K-50 and K-500. It is currently not known where the corresponding temperature sensors are located in the camera. Index1 Tag Name Writable ------ -------- -------- 12 SensorTemperature int16s 14 SensorTemperature2 int16s 20 CameraTemperature4 int16s 22 CameraTemperature5 int16s =head3 Pentax UnknownInfo Tags Index1 Tag Name Writable ------ -------- -------- [no tags known] =head3 Pentax Type2 Tags These tags are used by the Pentax Optio 330 and 430, and are similar to the tags used by Casio. Tag ID Tag Name Writable ------ -------- -------- 0x0001 RecordingMode int16u 0x0002 Quality int16u 0x0003 FocusMode int16u 0x0004 FlashMode int16u 0x0007 WhiteBalance int16u 0x000a DigitalZoom int32u 0x000b Sharpness int16u 0x000c Contrast int16u 0x000d Saturation int16u 0x0014 ISO int16u 0x0017 ColorFilter int16u 0x0e00 PrintIM PrintIM 0x1000 HometownCityCode undef[4] 0x1001 DestinationCityCode undef[4] =head3 Pentax Type4 Tags The following few tags are extracted from the wealth of information available in maker notes of the Optio E20 and E25. These maker notes are stored as ASCII text in a format very similar to some HP models. Tag ID Tag Name Writable ------ -------- -------- 'F/W Version' FirmwareVersion N =head3 Pentax S1 Tags Tags extracted from the maker notes of AVI videos from the Optio S1. Tag ID Tag Name Writable ------ -------- -------- 0x0000 MakerNoteVersion undef[4] =head3 Pentax PENT Tags Tags found in the PENT atom of MOV videos from the Optio WG-2 GPS. Index1 Tag Name Writable ------ -------- -------- 0 Make N 26 Model N 56 ExposureTime N 60 FNumber N 68 ExposureCompensation N 84 FocalLength N 113 DateTime1 N 139 DateTime2 N 167 ISO N 199 GPSVersionID N 207 GPSLatitudeRef N 209 GPSLatitude N 233 GPSLongitudeRef N 235 GPSLongitude N 259 GPSAltitudeRef N 260 GPSAltitude N 284 GPSTimeStamp N 308 GPSSatellites N 311 GPSStatus N 313 GPSMeasureMode N 315 GPSMapDatum N 322 GPSDateStamp N 371 AudioCodecID N 2003 PreviewImage N =head3 Pentax PXTH Tags Tags found in the PXTH atom of MOV videos from the K-01. Index1 Tag Name Writable ------ -------- -------- 0 PreviewImageLength N 4 PreviewImage N =head3 Pentax MOV Tags This information is found in MOV videos from cameras such as the Optio WP. Index1 Tag Name Writable ------ -------- -------- 0 Make N 38 ExposureTime N 42 FNumber N 50 ExposureCompensation N 68 WhiteBalance N 72 FocalLength N 175 ISO N =head3 Pentax Junk Tags Tags found in the JUNK chunk of AVI videos from the RS1000. Index1 Tag Name Writable ------ -------- -------- 12 Model N =head3 Pentax Junk2 Tags This information is found in AVI videos from the Optio RZ18. Index1 Tag Name Writable ------ -------- -------- 18 Make N 44 Model N 94 FNumber N 131 DateTime1 N 157 DateTime2 N 299 ThumbnailWidth N 301 ThumbnailHeight N 303 ThumbnailLength N 307 ThumbnailImage N =head3 Pentax AVI Tags Pentax-specific RIFF tags found in AVI videos. Tag ID Tag Name Writable ------ -------- -------- 'hymn' MakerNotes Pentax =head2 PhaseOne Tags These tags are extracted from the maker notes of Phase One images. Tag ID Tag Name Writable ------ -------- -------- 0x0100 CameraOrientation N 0x0102 SerialNumber string 0x0105 ISO int32s 0x0106 ColorMatrix1 float[9] 0x0107 WB_RGBLevels float[3] 0x0108 SensorWidth int32s 0x0109 SensorHeight int32s 0x010a SensorLeftMargin int32s 0x010b SensorTopMargin int32s 0x010c ImageWidth int32s 0x010d ImageHeight int32s 0x010e RawFormat int32s 0x010f RawData N 0x0110 SensorCalibration PhaseOne SensorCalibration 0x0112 DateTimeOriginal N 0x0113 ImageNumber int32s 0x0203 Software string 0x0204 System string 0x0210 SensorTemperature float 0x0211 SensorTemperature2 float 0x0212 UnknownDate? int32u 0x021c StripOffsets N 0x021d BlackLevel int32s 0x0222 SplitColumn int32s 0x0223 BlackLevelData int16u[n] 0x0226 ColorMatrix2 float[9] 0x0301 FirmwareVersions string 0x0400 ShutterSpeedValue float 0x0401 ApertureValue float 0x0402 ExposureCompensation float 0x0403 FocalLength float 0x0410 CameraModel string 0x0412 LensModel string 0x0414 MaxApertureValue float 0x0415 MinApertureValue float =head3 PhaseOne SensorCalibration Tags Tag ID Tag Name Writable ------ -------- -------- 0x0400 SensorDefects N 0x0401 AllColorFlatField1? N 0x0407 SerialNumber string 0x040b RedBlueFlatField? N 0x0410 AllColorFlatField2? N 0x0416 AllColorFlatField3? N 0x0419 LinearizationCoefficients1 N 0x041a LinearizationCoefficients2 N =head2 Reconyx Tags The following tags are extracted from the maker notes of Reconyx Hyperfire cameras such as the HC500, HC600 and PC900. Index2 Tag Name Writable ------ -------- -------- 0 MakerNoteVersion N 1 FirmwareVersion N 4 FirmwareDate int16u[2] 6 TriggerMode string[2] 7 Sequence int16u[2] 9 EventNumber int16u[2] 11 DateTimeOriginal int16u[6] 18 MoonPhase int16u 19 AmbientTemperatureFahrenheit int16s 20 AmbientTemperature int16s 21 SerialNumber undef[30] 36 Contrast int16u 37 Brightness int16u 38 Sharpness int16u 39 Saturation int16u 40 InfraredIlluminator int16u 41 MotionSensitivity int16u 42 BatteryVoltage int16u 43 UserLabel string[22] =head2 Sanyo Tags Tag ID Tag Name Writable ------ -------- -------- 0x00ff MakerNoteOffset int32u 0x0100 SanyoThumbnail undef 0x0200 SpecialMode int32u[3] 0x0201 SanyoQuality int16u 0x0202 Macro int16u 0x0204 DigitalZoom rational64u 0x0207 SoftwareVersion Y 0x0208 PictInfo Y 0x0209 CameraID Y 0x020e SequentialShot int16u 0x020f WideRange int16u 0x0210 ColorAdjustmentMode int16u 0x0213 QuickShot int16u 0x0214 SelfTimer int16u 0x0216 VoiceMemo int16u 0x0217 RecordShutterRelease int16u 0x0218 FlickerReduce int16u 0x0219 OpticalZoomOn int16u 0x021b DigitalZoomOn int16u 0x021d LightSourceSpecial int16u 0x021e Resaved int16u 0x021f SceneSelect int16u 0x0223 ManualFocusDistance rational64u FaceInfo - 0x0224 SequenceShotInterval int16u 0x0225 FlashMode int16u 0x0e00 PrintIM PrintIM 0x0f00 DataDump N =head3 Sanyo FaceInfo Tags Index4 Tag Name Writable ------ -------- -------- 0 FacesDetected int32u 4 FacePosition int32u[4] =head3 Sanyo MOV Tags This information is found in Sanyo MOV videos. Index1 Tag Name Writable ------ -------- -------- 0 Make N 24 Model N 38 ExposureTime N 42 FNumber N 50 ExposureCompensation N 68 WhiteBalance N 72 FocalLength N =head3 Sanyo MP4 Tags This information is found in Sanyo MP4 videos. Index1 Tag Name Writable ------ -------- -------- 0 Make N 24 Model N 50 FNumber N 58 ExposureCompensation N 106 ISO N 209 Software N 210 Software N 241 Thumbnail Sanyo Thumbnail 242 Thumbnail Sanyo Thumbnail =head3 Sanyo Thumbnail Tags Index4 Tag Name Writable ------ -------- -------- 1 ThumbnailWidth N 2 ThumbnailHeight N 3 ThumbnailLength N 4 ThumbnailOffset N =head2 Samsung Tags Tags found in the binary "STMN" format maker notes written by a number of Samsung models. Index4 Tag Name Writable ------ -------- -------- 0 MakerNoteVersion undef[8] 2 PreviewImageStart int32u* 3 PreviewImageLength int32u* 11 SamsungIFD Samsung IFD =head3 Samsung IFD Tags This is a standard-format IFD found in the maker notes of some Samsung models, except that the entry count is a 4-byte integer and the offsets are relative to the end of the IFD. Currently, no tags in this IFD are known, so the Unknown (-u) or Verbose (-v) option must be used to see this information. Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head3 Samsung Type2 Tags Tags found in the EXIF-format maker notes of newer Samsung models. Tag ID Tag Name Writable ------ -------- -------- 0x0001 MakerNoteVersion undef[4] 0x0002 DeviceType int32u 0x0003 SamsungModelID int32u 0x0021 PictureWizard Samsung PictureWizard 0x0030 LocalLocationName string 0x0031 LocationName string 0x0035 PreviewIFD Nikon PreviewIFD 0x0043 CameraTemperature rational64s 0x0045 RawCompressionMode int32u 0x0100 FaceDetect int16u 0x0120 FaceRecognition int32u 0x0123 FaceName string 0xa001 FirmwareName string 0xa003 LensType int16u[n] 0xa004 LensFirmware string 0xa005 InternalLensSerialNumber string 0xa010 SensorAreas int32u[8] 0xa011 ColorSpace int16u 0xa012 SmartRange int16u 0xa013 ExposureCompensation rational64s 0xa014 ISO int32u 0xa018 ExposureTime rational64u 0xa019 FNumber rational64u 0xa01a FocalLengthIn35mmFormat int32u 0xa020 EncryptionKey int32u[11]! 0xa021 WB_RGGBLevelsUncorrected int32u[4] 0xa022 WB_RGGBLevelsAuto int32u[4] 0xa023 WB_RGGBLevelsIlluminator1 int32u[4] 0xa024 WB_RGGBLevelsIlluminator2 int32u[4] 0xa028 WB_RGGBLevelsBlack int32s[4] 0xa030 ColorMatrix int32s[9] 0xa031 ColorMatrixSRGB int32s[9] 0xa032 ColorMatrixAdobeRGB int32s[9] 0xa033 CbCrMatrixDefault int32s[4] 0xa034 CbCrMatrix int32s[4] 0xa035 CbCrGainDefault int32u[2] 0xa036 CbCrGain int32u[2] 0xa040 ToneCurveSRGBDefault int32u[23] 0xa041 ToneCurveAdobeRGBDefault int32u[23] 0xa042 ToneCurveSRGB int32u[23] 0xa043 ToneCurveAdobeRGB int32u[23] 0xa048 RawData? int32s[12] 0xa050 Distortion? int32s[8] 0xa051 ChromaticAberration? int16u[22] 0xa052 Vignetting? int16u[15] 0xa053 VignettingCorrection? int16u[15] 0xa054 VignettingSetting? int16u[15] =head3 Samsung PictureWizard Tags Index2 Tag Name Writable ------ -------- -------- 0 PictureWizardMode int16u 1 PictureWizardColor int16u 2 PictureWizardSaturation int16u 3 PictureWizardSharpness int16u 4 PictureWizardContrast int16u =head3 Samsung Trailer Tags Tags extracted from the trailer of JPEG images written when using certain features (such as "Sound & Shot" or "Shot & More") from Samsung models such as the Galaxy S4 and Tab S. Tag Name Writable -------- -------- EmbeddedAudioFile N EmbeddedAudioFileName N EmbeddedImage N EmbeddedImageName N =head3 Samsung sec Tags This information is found in the @sec atom of Samsung MP4 videos from models such as the WB30F. Index1 Tag Name Writable ------ -------- -------- 0 Make N 32 Model N 512 ThumbnailWidth N 516 ThumbnailHeight N 520 ThumbnailLength N 524 ThumbnailImage N =head3 Samsung INFO Tags This information is found in MP4 videos from Samsung models such as the SMX-C20N. Tag ID Tag Name Writable ------ -------- -------- 'EFCT' Effect N 'QLTY' Quality N =head3 Samsung MP4 Tags This information is found in Samsung MP4 videos from models such as the WP10. Index1 Tag Name Writable ------ -------- -------- 0 Make N 24 Model N 46 ExposureTime N 50 FNumber N 58 ExposureCompensation N 106 ISO N 125 Software N 244 Thumbnail Samsung Thumbnail =head3 Samsung Thumbnail Tags Index4 Tag Name Writable ------ -------- -------- 1 ThumbnailWidth N 2 ThumbnailHeight N 3 ThumbnailLength N 4 ThumbnailOffset N =head3 Samsung smta Tags This information is found in the smta atom of Samsung MP4 videos from models such as the Galaxy S4. Tag ID Tag Name Writable ------ -------- -------- 'svss' SamsungSvss Samsung svss =head3 Samsung svss Tags This information is found in the svss atom of Samsung MP4 videos from models such as the Galaxy S4. Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head2 Ricoh Tags Tag ID Tag Name Writable ------ -------- -------- 0x0001 MakerNoteType string 0x0002 FirmwareVersion string 0x0005 SerialNumber undef[16] InternalSerialNumber undef[16] 0x0e00 PrintIM PrintIM 0x1000 RecordingFormat int16u 0x1001 ImageInfo Ricoh ImageInfo ExposureProgram int16u 0x1002 DriveMode int16u 0x1003 Sharpness int32u WhiteBalance int16u 0x1004 WhiteBalanceFineTune int16u 0x1006 FocusMode int16u 0x1007 AutoBracketing int16u 0x1009 MacroMode int16u 0x100a FlashMode int16u 0x100b FlashExposureComp rational64s 0x100c ManualFlashOutput rational64s 0x100d FullPressSnap int16u 0x100e DynamicRangeExpansion int16u 0x100f NoiseReduction int16u 0x1010 ImageEffects int16u 0x1011 Vignetting int16u 0x1012 Contrast int32u 0x1013 Saturation int32u 0x1014 Sharpness int32u 0x1015 ToningEffect int16u 0x1016 HueAdjust int16u 0x1017 WideAdapter int16u 0x1018 CropMode35mm int16u 0x1019 NDFilter int16u 0x101a WBBracketShotNumber int16u 0x1200 AFStatus int16u 0x1201 AFAreaXPosition1 int32u 0x1202 AFAreaYPosition1 int32u 0x1203 AFAreaXPosition int32u 0x1204 AFAreaYPosition int32u 0x1205 AFAreaMode int16u 0x1307 ColorTempKelvin int32u 0x1308 ColorTemperature int32u 0x1500 FocalLength rational64u 0x1601 SensorWidth int32u 0x1602 SensorHeight int32u 0x1603 CroppedImageWidth int32u 0x1604 CroppedImageHeight int32u 0x2001 RicohSubdir Ricoh Subdir RicohSubdirIFD Ricoh Subdir RicohRR1Subdir Ricoh Subdir 0x4001 ThetaSubdir Ricoh ThetaSubdir =head3 Ricoh ImageInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 RicohImageWidth int16u 2 RicohImageHeight int16u 6 RicohDate int8u[7] 28 PreviewImageStart int16u* 30 PreviewImageLength int16u* 32 FlashMode int8u 33 Macro int8u 34 Sharpness int8u 38 WhiteBalance int8u 39 ISOSetting int8u 40 Saturation int8u =head3 Ricoh Subdir Tags Tag ID Tag Name Writable ------ -------- -------- 0x0004 ManufactureDate1 string[20] 0x0005 ManufactureDate2 string[20] 0x001a FaceInfo Ricoh FaceInfo 0x0029 FirmwareInfo Ricoh FirmwareInfo 0x002a NoiseReduction int32u 0x002c SerialInfo Ricoh SerialInfo =head3 Ricoh FaceInfo Tags Index1 Tag Name Writable ------ -------- -------- 181 FacesDetected int8u 182 FaceDetectFrameSize int16u[2] 188 Face1Position int16u[4] 200 Face2Position int16u[4] 212 Face3Position int16u[4] 224 Face4Position int16u[4] 236 Face5Position int16u[4] 248 Face6Position int16u[4] 260 Face7Position int16u[4] 272 Face8Position int16u[4] =head3 Ricoh FirmwareInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 FirmwareRevision string[12] 12 FirmwareRevision2 string[12] =head3 Ricoh SerialInfo Tags This information is found in images from the GXR. Index1 Tag Name Writable ------ -------- -------- 0 BodyFirmware string[16] 16 BodySerialNumber string[16] 32 LensFirmware string[16] 48 LensSerialNumber string[16] =head3 Ricoh ThetaSubdir Tags Tag ID Tag Name Writable ------ -------- -------- 0x0003 Accelerometer rational64s[2] 0x0004 Compass rational64u 0x000a TimeZone string =head3 Ricoh Type2 Tags Tags written by models such as the Ricoh HZ15 and the Pentax XG-1. These are not writable due to numerous formatting errors as written by these cameras. Tag ID Tag Name Writable ------ -------- -------- 0x0207 RicohModel string 0x0300 RicohMake N =head3 Ricoh Text Tags Some Ricoh DC and RDC models use a text-based format for their maker notes instead of the IFD format used by the Caplio models. Below is a list of known tags in this information. Tag ID Tag Name Writable ------ -------- -------- 'Bg' BlueGain N 'Gg' GreenGain N 'Rev' FirmwareVersion N 'Rg' RedGain N 'Rv' FirmwareVersion N =head3 Ricoh RMETA Tags The Ricoh Caplio Pro G3 has the ability to add custom fields to the APP5 "RMETA" segment of JPEG images. While only a few observed tags have been defined below, ExifTool will extract any information found here. Tag ID Tag Name Writable ------ -------- -------- 'Azimuth' Azimuth N 'Condition' Condition N 'Lit' Lit N 'Location' Location N 'Sign type' SignType N '_audio' SoundFile N =head3 Ricoh AVI Tags Tag ID Tag Name Writable ------ -------- -------- 'mnrt' MakerNoteRicoh Ricoh 'rdc2' RicohRDC2? N 'thum' ThumbnailImage N 'ucmt' Comment N =head2 Sigma Tags These tags are written by Sigma/Foveon cameras. In the early days Sigma was a class leader by releasing their maker note specification to the public, but since then they have deviated from this standard and newer camera models are less than consistent about their metadata formats. Tag ID Tag Name Writable ------ -------- -------- 0x0002 SerialNumber string 0x0003 DriveMode string 0x0004 ResolutionMode string 0x0005 AFMode string 0x0006 FocusSetting string 0x0007 WhiteBalance string 0x0008 ExposureMode string 0x0009 MeteringMode string 0x000a LensFocalRange string 0x000b ColorSpace string 0x000c ExposureCompensation string ExposureAdjust? rational64s 0x000d Contrast string Contrast rational64s 0x000e Shadow string Shadow rational64s 0x000f Highlight string Highlight rational64s 0x0010 Saturation string Saturation rational64s 0x0011 Sharpness string Sharpness rational64s 0x0012 X3FillLight string X3FillLight rational64s 0x0014 ColorAdjustment string ColorAdjustment rational64s[3] 0x0015 AdjustmentMode string 0x0016 Quality string 0x0017 Firmware string 0x0018 Software string 0x0019 AutoBracket string 0x001a PreviewImageStart int32u* ChrominanceNoiseReduction string 0x001b PreviewImageLength int32u* LuminanceNoiseReduction string 0x001c PreviewImageSize int16u[2] PreviewImageStart int32u* 0x001d MakerNoteVersion undef PreviewImageLength int32u* 0x001e PreviewImageSize int16u[2] 0x001f AFPoint string MakerNoteVersion undef 0x0022 FileFormat string 0x0024 Calibration string 0x0026 FileFormat string 0x0027 LensType string 0x002a LensFocalRange rational64u[2] 0x002b LensMaxApertureRange rational64u[2] 0x002c ColorMode int32u 0x0030 LensApertureRange string Calibration string 0x0031 FNumber rational64u 0x0032 ExposureTime rational64u 0x0033 ExposureTime2 string 0x0034 BurstShot int32u 0x0035 ExposureCompensation rational64s 0x0039 SensorTemperature string 0x003a FlashExposureComp rational64s 0x003b Firmware string 0x003c WhiteBalance string 0x003d PictureMode string 0x0048 LensApertureRange string 0x0049 FNumber rational64u 0x004a ExposureTime rational64u 0x004b ExposureTime2 string 0x004d ExposureCompensation rational64s 0x0055 SensorTemperature string 0x0056 FlashExposureComp rational64s 0x0057 Firmware string 0x0058 WhiteBalance string 0x0059 DigitalFilter string =head2 Sony Tags The following information has been decoded from the MakerNotes of Sony cameras. Some of these tags have been inherited from the Minolta MakerNotes. Tag ID Tag Name Writable ------ -------- -------- 0x0010 CameraInfo Sony CameraInfo CameraInfo2 Sony CameraInfo2 CameraInfo3 Sony CameraInfo3 CameraInfoUnknown Sony CameraInfoUnknown 0x0020 FocusInfo Sony FocusInfo MoreInfo Sony MoreInfo 0x0102 Quality int32u 0x0104 FlashExposureComp rational64s 0x0105 Teleconverter int32u 0x0112 WhiteBalanceFineTune int32u 0x0114 CameraSettings Sony CameraSettings CameraSettings2 Sony CameraSettings2 CameraSettings3 Sony CameraSettings3 CameraSettingsUnknown Sony CameraSettingsUnknown 0x0115 WhiteBalance int32u 0x0116 ExtraInfo Sony ExtraInfo ExtraInfo2 Sony ExtraInfo2 ExtraInfo3 Sony ExtraInfo3 0x0e00 PrintIM PrintIM 0x1000 MultiBurstMode undef 0x1001 MultiBurstImageWidth int16u 0x1002 MultiBurstImageHeight int16u 0x1003 Panorama Sony Panorama 0x2001 PreviewImage undef 0x2002 Rating int32u 0x2004 Contrast int32s 0x2005 Saturation int32s 0x2006 Sharpness int32s 0x2007 Brightness int32s 0x2008 LongExposureNoiseReduction int32u 0x2009 HighISONoiseReduction int16u 0x200a HDR int32u 0x200b MultiFrameNoiseReduction int32u 0x200e PictureEffect int16u 0x200f SoftSkinEffect int32u 0x2010 Tag2010a Sony Tag2010a Tag2010b Sony Tag2010b Tag2010c Sony Tag2010c Tag2010d Sony Tag2010d Tag2010e Sony Tag2010e Tag2010f Sony Tag2010f Tag2010g Sony Tag2010g Tag2010h Sony Tag2010h 0x2011 VignettingCorrection int32u 0x2012 LateralChromaticAberration int32u 0x2013 DistortionCorrectionSetting int32u 0x2014 WBShiftAB_GM int32s[2] 0x2016 AutoPortraitFramed int16u 0x2017 FlashAction int32u 0x201b FocusMode int8u 0x201c AFAreaModeSetting int8u 0x201d FlexibleSpotPosition int16u[2] 0x201e AFPointSelected int8u AFZoneSelected int8u 0x2020 AFPointsUsed N 0x2022 FocalPlaneAFPointsUsed N 0x2026 WBShiftAB_GM_Precise int32s[2] 0x2028 VariableLowPassFilter N 0x3000 ShotInfo Sony ShotInfo 0x900b Tag900b Sony Tag900b 0x9050 Tag9050 Sony Tag9050 0x9400 Tag9400a Sony Tag9400a Tag9400b Sony Tag9400b Tag9400c Sony Tag9400c 0x9402 Tag9402 Sony Tag9402 0x9403 Tag9403 Sony Tag9403 0x9404 Tag9404a Sony Tag9404a Tag9404b Sony Tag9404b 0x9405 Tag9405a Sony Tag9405a Tag9405b Sony Tag9405b 0x9406 Tag9406 Sony Tag9406 0x940a Tag940a Sony Tag940a 0x940c Tag940c Sony Tag940c 0x940e AFInfo Sony AFInfo Tag940e Sony Tag940e 0xb000 FileFormat int8u[4] 0xb001 SonyModelID int16u 0xb020 CreativeStyle string 0xb021 ColorTemperature int32u 0xb022 ColorCompensationFilter int32u 0xb023 SceneMode int32u 0xb024 ZoneMatching int32u 0xb025 DynamicRangeOptimizer int32u 0xb026 ImageStabilization int32u 0xb027 LensType int32u 0xb028 MinoltaMakerNote Minolta 0xb029 ColorMode int32u 0xb02a LensSpec int8u[8] 0xb02b FullImageSize int32u[2] 0xb02c PreviewImageSize int32u[2] 0xb040 Macro int16u 0xb041 ExposureMode int16u 0xb042 FocusMode int16u 0xb043 AFAreaMode int16u 0xb044 AFIlluminator int16u 0xb047 JPEGQuality int16u 0xb048 FlashLevel int16s 0xb049 ReleaseMode int16u 0xb04a SequenceNumber int16u 0xb04b Anti-Blur int16u 0xb04e FocusMode int16u 0xb04f DynamicRangeOptimizer int16u 0xb050 HighISONoiseReduction2 int16u 0xb052 IntelligentAuto int16u 0xb054 WhiteBalance int16u =head3 Sony CameraInfo Tags Camera information for the A700, A850 and A900. Index1 Tag Name Writable ------ -------- -------- 0 LensSpec undef[8] 20 FocusModeSetting int8u 21 AFPointSelected int8u 25 AFPoint int8u 30 AFStatusActiveSensor int16s 32 AFStatusUpper-left int16s 34 AFStatusLeft int16s 36 AFStatusLower-left int16s 38 AFStatusFarLeft int16s 40 AFStatusBottomAssist-left int16s 42 AFStatusBottom int16s 44 AFStatusBottomAssist-right int16s 46 AFStatusCenter-7 int16s 48 AFStatusCenter-horizontal int16s 50 AFStatusCenter-9 int16s 52 AFStatusCenter-10 int16s 54 AFStatusCenter-11 int16s 56 AFStatusCenter-12 int16s 58 AFStatusCenter-vertical int16s 60 AFStatusCenter-14 int16s 62 AFStatusTopAssist-left int16s 64 AFStatusTop int16s 66 AFStatusTopAssist-right int16s 68 AFStatusFarRight int16s 70 AFStatusUpper-right int16s 72 AFStatusRight int16s 74 AFStatusLower-right int16s 76 AFStatusCenterF2-8 int16s 304 AFMicroAdjValue int8u 305 AFMicroAdjMode int8u & 0x80 305.1 AFMicroAdjRegisteredLenses int8u & 0x7f =head3 Sony CameraInfo2 Tags Camera information for the DSLR-A200, A230, A290, A300, A330, A350, A380 and A390. Index1 Tag Name Writable ------ -------- -------- 0 LensSpec undef[8] 20 AFPointSelected int8u 21 FocusModeSetting int8u 24 AFPoint int8u 27 AFStatusActiveSensor int16s 29 AFStatusTop-right int16s 31 AFStatusBottom-right int16s 33 AFStatusBottom int16s 35 AFStatusMiddleHorizontal int16s 37 AFStatusCenterVertical int16s 39 AFStatusTop int16s 41 AFStatusTop-left int16s 43 AFStatusBottom-left int16s 45 AFStatusLeft int16s 47 AFStatusCenterHorizontal int16s 49 AFStatusRight int16s =head3 Sony CameraInfo3 Tags Camera information stored by the A33, A35, A55, A450, A500, A550, A560, A580, NEX-3/5/5C/C3 and VG10E. Some tags are valid only for some of these models. Index1 Tag Name Writable ------ -------- -------- 0 LensSpec undef[8] 14 FocalLength int16u 16 FocalLengthTeleZoom int16u 20 AFPointSelected int8u 21 FocusMode int8u 24 AFPoint int8u 25 FocusStatus int8u 27 AFStatusActiveSensor int16s 28 AFPointSelected int8u 29 FocusMode int8u AFStatusTop-right int16s 31 AFStatusBottom-right int16s 32 AFPoint int8u 33 AFStatusActiveSensor int16s AFStatusBottom int16s 35 AFStatus15 Sony AFStatus15 AFStatusMiddleHorizontal int16s 37 AFStatusCenterVertical int16s 39 AFStatusTop int16s 41 AFStatusTop-left int16s 43 AFStatusBottom-left int16s 45 AFStatusLeft int16s 47 AFStatusCenterHorizontal int16s 49 AFStatusRight int16s =head3 Sony AFStatus15 Tags AF Status information for models with 15-point AF. Index1 Tag Name Writable ------ -------- -------- 0 AFStatusUpper-left int16s 2 AFStatusLeft int16s 4 AFStatusLower-left int16s 6 AFStatusFarLeft int16s 8 AFStatusTopHorizontal int16s 10 AFStatusNearRight int16s 12 AFStatusCenterHorizontal int16s 14 AFStatusNearLeft int16s 16 AFStatusBottomHorizontal int16s 18 AFStatusTopVertical int16s 20 AFStatusCenterVertical int16s 22 AFStatusBottomVertical int16s 24 AFStatusFarRight int16s 26 AFStatusUpper-right int16s 28 AFStatusRight int16s 30 AFStatusLower-right int16s 32 AFStatusUpper-middle int16s 34 AFStatusLower-middle int16s =head3 Sony CameraInfoUnknown Tags Index1 Tag Name Writable ------ -------- -------- [no tags known] =head3 Sony FocusInfo Tags More camera settings and focus information decoded for models such as the A200, A230, A290, A300, A330, A350, A380, A390, A700, A850 and A900. Index1 Tag Name Writable ------ -------- -------- 14 DriveMode2 int8u 16 Rotation int8u 20 ImageStabilizationSetting int8u 21 DynamicRangeOptimizerMode int8u 43 BracketShotNumber int8u 44 WhiteBalanceBracketing int8u 45 BracketShotNumber2 int8u 46 DynamicRangeOptimizerBracket int8u 47 ExposureBracketShotNumber int8u 63 ExposureProgram int8u 65 CreativeStyle int8u 109 ISOSetting int8u 111 ISO int8u 119 DynamicRangeOptimizerMode int8u 121 DynamicRangeOptimizerLevel int8u 2118 ShutterCount int32u 2491 FocusPosition int8u 4368 TiffMeteringImage N =head3 Sony MoreInfo Tags More camera settings information decoded for the A450, A500, A550, A560, A580, A33, A35, A55, NEX-3/5/C3 and VG10E. Tag ID Tag Name Writable ------ -------- -------- 0x0001 MoreSettings Sony MoreSettings 0x0002 FaceInfo Sony FaceInfo FaceInfoA Sony FaceInfoA 0x0107 TiffMeteringImage N 0x0201 MoreInfo0201 Sony MoreInfo0201 0x0401 MoreInfo0401 Sony MoreInfo0401 =head3 Sony MoreSettings Tags Index1 Tag Name Writable ------ -------- -------- 1 DriveMode2 int8u 2 ExposureProgram int8u 3 MeteringMode int8u 4 DynamicRangeOptimizerSetting int8u 5 DynamicRangeOptimizerLevel int8u 6 ColorSpace int8u 7 CreativeStyleSetting int8u 8 ContrastSetting int8s 9 SaturationSetting int8s 10 SharpnessSetting int8s 13 WhiteBalanceSetting int8u 14 ColorTemperatureSetting int8u 15 ColorCompensationFilterSet int8s 16 FlashMode int8u 17 LongExposureNoiseReduction int8u 18 HighISONoiseReduction int8u 19 FocusMode int8u 21 MultiFrameNoiseReduction int8u 22 HDRSetting int8u 23 HDRLevel int8u 24 ViewingMode int8u 25 FaceDetection int8u 26 CustomWB_RBLevels int16uRev[2] 30 BrightnessValue int8u ExposureCompensationSet int8u 31 ISO int8u FlashExposureCompSet int8u 32 FNumber int8u LiveViewAFMethod int8u 33 ExposureTime int8u ISO int8u 34 FNumber int8u 35 FocalLength2 int8u ExposureTime int8u 36 ExposureCompensation2 int16s 37 FocalLength2 int8u ISO int8u 38 FlashExposureCompSet2 int16s ExposureCompensation2 int16s FNumber int8u 39 ExposureTime int8u 40 Orientation2 int8u 41 FocusPosition2 int8u FocalLength2 int8u 42 FlashAction int8u ExposureCompensation2 int16s 43 FocusPosition2 int8u 44 FocusMode2 int8u FlashAction int8u FlashExposureCompSet2 int16s 46 FocusMode2 int8u Orientation2 int8u 47 FocusPosition2 int8u 48 FlashAction int8u 50 FocusMode2 int8u 119 FlashAction2 int8u 120 FlashActionExternal int8u 124 FlashActionExternal int8u 130 FlashStatus int8u 134 FlashStatus int8u =head3 Sony FaceInfo Tags Index2 Tag Name Writable ------ -------- -------- 0 FacesDetected int16s 1 Face1Position int16u[4] 6 Face2Position int16u[4] 11 Face3Position int16u[4] 16 Face4Position int16u[4] 21 Face5Position int16u[4] 26 Face6Position int16u[4] 31 Face7Position int16u[4] 36 Face8Position int16u[4] =head3 Sony FaceInfoA Tags Index2 Tag Name Writable ------ -------- -------- 3 FacesDetected N 11 PotentialFace1Position int16u[4] 21 PotentialFace2Position int16u[4] 31 PotentialFace3Position int16u[4] 41 PotentialFace4Position int16u[4] 51 PotentialFace5Position int16u[4] 61 PotentialFace6Position int16u[4] 71 PotentialFace7Position int16u[4] 81 PotentialFace8Position int16u[4] 91 Face1Position int16u[4] 101 Face2Position int16u[4] 111 Face3Position int16u[4] 121 Face4Position int16u[4] =head3 Sony MoreInfo0201 Tags Index1 Tag Name Writable ------ -------- -------- 283 ImageCount int32u 293 ShutterCount int32u 330 ShutterCount int32u =head3 Sony MoreInfo0401 Tags Index1 Tag Name Writable ------ -------- -------- 1102 ShotNumberSincePowerUp int32u =head3 Sony CameraSettings Tags Camera settings for the A200, A300, A350, A700, A850 and A900. Index2 Tag Name Writable ------ -------- -------- 0 ExposureTime int16u 1 FNumber int16u 2 HighSpeedSync int16u 3 ExposureCompensationSet int16u 4 DriveMode int16u & 0xff 5 WhiteBalanceSetting int16u 6 WhiteBalanceFineTune N 7 ColorTemperatureSet int16u 8 ColorCompensationFilterSet int16u 12 ColorTemperatureCustom int16u 13 ColorCompensationFilterCustom int16u 15 WhiteBalance int16u 16 FocusModeSetting int16u 17 AFAreaMode int16u 18 AFPointSetting int16u 19 FlashMode int16u 20 FlashExposureCompSet int16u 21 MeteringMode int16u 22 ISOSetting int16u 24 DynamicRangeOptimizerMode int16u 25 DynamicRangeOptimizerLevel int16u 26 CreativeStyle int16u 27 ColorSpace int16u 28 Sharpness int16u 29 Contrast int16u 30 Saturation int16u 31 ZoneMatchingValue int16u 34 Brightness int16u 35 FlashControl int16u 40 PrioritySetupShutterRelease int16u 41 AFIlluminator int16u 42 AFWithShutter int16u 43 LongExposureNoiseReduction int16u 44 HighISONoiseReduction int16u 45 ImageStyle int16u 46 FocusModeSwitch int16u 47 ShutterSpeedSetting int16u 48 ApertureSetting int16u 60 ExposureProgram int16u 61 ImageStabilizationSetting int16u 62 FlashAction int16u 63 Rotation int16u 64 AELock int16u 76 FlashAction2 int16u 77 FocusMode int16u 80 BatteryState int16u 81 BatteryLevel int16u 83 FocusStatus int16u 84 SonyImageSize int16u 85 AspectRatio int16u 86 Quality int16u 88 ExposureLevelIncrements int16u 106 RedEyeReduction int16u 154 FolderNumber int16u & 0x3ff 155 ImageNumber int16u & 0x3fff =head3 Sony CameraSettings2 Tags Camera settings for the A230, A290, A330, A380 and A390. Index2 Tag Name Writable ------ -------- -------- 0 ExposureTime int16u 1 FNumber int16u 2 HighSpeedSync int16u 3 ExposureCompensationSet int16u 4 WhiteBalanceSetting int16u 5 WhiteBalanceFineTune N 6 ColorTemperatureSet int16u 7 ColorCompensationFilterSet int16u 8 CustomWB_RGBLevels int16u[3] 11 ColorTemperatureCustom int16u 12 ColorCompensationFilterCustom int16u 14 WhiteBalance int16u 15 FocusModeSetting int16u 16 AFAreaMode int16u 17 AFPointSetting int16u 18 FlashExposureCompSet int16u 19 MeteringMode int16u 20 ISOSetting int16u 22 DynamicRangeOptimizerMode int16u 23 DynamicRangeOptimizerLevel int16u 24 CreativeStyle int16u 25 Sharpness int16u 26 Contrast int16u 27 Saturation int16u 31 FlashControl int16u 37 LongExposureNoiseReduction int16u 38 HighISONoiseReduction int16u 39 ImageStyle int16u 40 ShutterSpeedSetting int16u 41 ApertureSetting int16u 60 ExposureProgram int16u 61 ImageStabilizationSetting int16u 62 FlashAction int16u 63 Rotation int16u 64 AELock int16u 76 FlashAction2 int16u 77 FocusMode int16u 83 FocusStatus int16u 84 SonyImageSize int16u 85 AspectRatio int16u 86 Quality int16u 88 ExposureLevelIncrements int16u 126 DriveMode int16u & 0xff 127 FlashMode int16u 131 ColorSpace int16u =head3 Sony CameraSettings3 Tags Camera settings for models such as the A33, A35, A55, A450, A500, A550, A560, A580, NEX-3, NEX-5, NEX-C3 and NEX-VG10E. Index1 Tag Name Writable ------ -------- -------- 0 ShutterSpeedSetting int8u 1 ApertureSetting int8u 2 ISOSetting int8u 3 ExposureCompensationSet int8u 4 DriveModeSetting int8u 5 ExposureProgram int8u 6 FocusModeSetting int8u 7 MeteringMode int8u 9 SonyImageSize int8u 10 AspectRatio int8u 11 Quality int8u 12 DynamicRangeOptimizerSetting int8u 13 DynamicRangeOptimizerLevel int8u 14 ColorSpace int8u 15 CreativeStyleSetting int8u 16 ContrastSetting int8s 17 SaturationSetting int8s 18 SharpnessSetting int8s 22 WhiteBalanceSetting int8u 23 ColorTemperatureSetting int8u 24 ColorCompensationFilterSet int8s 25 CustomWB_RGBLevels int16uRev[3] 32 FlashMode int8u 33 FlashControl int8u 35 FlashExposureCompSet int8u 36 AFAreaMode int8u 37 LongExposureNoiseReduction int8u 38 HighISONoiseReduction int8u 39 SmileShutterMode int8u 40 RedEyeReduction int8u 45 HDRSetting int8u 46 HDRLevel int8u 47 ViewingMode int8u 48 FaceDetection int8u 49 SmileShutter int8u 50 SweepPanoramaSize int8u 51 SweepPanoramaDirection int8u 52 DriveMode int8u 53 MultiFrameNoiseReduction int8u 54 LiveViewAFSetting int8u 56 PanoramaSize3D int8u 131 AFButtonPressed int8u 132 LiveViewMetering int8u 133 ViewingMode2 int8u 134 AELock int8u 135 FlashStatusBuilt-in int8u 136 FlashStatusExternal int8u 139 LiveViewFocusMode int8u 153 LensMount int8u 268 SequenceNumber int8u 276 FolderNumber int32u & 0xffc000 276.1 ImageNumber int32u & 0x3fff 512 ShotNumberSincePowerUp2 int32u 643 AFButtonPressed int8u 644 LiveViewMetering int8u 645 ViewingMode2 int8u 646 AELock int8u 647 FlashStatusBuilt-in int8u 648 FlashStatusExternal int8u 651 LiveViewFocusMode int8u 780 SequenceNumber int8u 788 ImageNumber int16u & 0x3fff 790 FolderNumber int16u & 0x3ff 1008 LensE-mountVersion int16u 1012 LensFirmwareVersion int8u 1015 LensType2 int16u 1024 ImageNumber int16u & 0x3fff 1026 FolderNumber int16u & 0x3ff =head3 Sony CameraSettingsUnknown Tags Index2 Tag Name Writable ------ -------- -------- [no tags known] =head3 Sony ExtraInfo Tags Extra hardware information for the A850 and A900. Index1 Tag Name Writable ------ -------- -------- 1 BatteryTemperature int8u 2 BatteryUnknown? N 8 BatteryVoltage? N 10 ImageStabilization2? int8u 12 BatteryLevel int8u 26 ExtraInfoVersion int8u[4] =head3 Sony ExtraInfo2 Tags Extra hardware information for the A230/290/330/380/390. Index1 Tag Name Writable ------ -------- -------- 4 BatteryLevel int8u 18 ImageStabilization int8u =head3 Sony ExtraInfo3 Tags Extra hardware information for the A33, A35, A55, A450, A500, A550, A560, A580 and NEX-3/5/C3/VG10. Index1 Tag Name Writable ------ -------- -------- 0 BatteryUnknown? int16u 2 BatteryTemperature int8u 4 BatteryLevel int8u 6 BatteryVoltage1 int16u 8 BatteryVoltage2 int16u 17 ImageStabilization int8u 20 BatteryState int8u ExposureProgram int8u ModeDialPosition int8u 22 MemoryCardConfiguration int8u & 0xc0 CameraOrientation int8u 24 CameraOrientation int8u & 0x30 =head3 Sony Panorama Tags Tags found in panorama images from various Sony DSC, NEX, SLT and DSLR cameras. The width/height values of these tags are not affected by camera rotation -- the width is always the longer dimension. Index4 Tag Name Writable ------ -------- -------- 1 PanoramaFullWidth int32u 2 PanoramaFullHeight int32u 3 PanoramaDirection int32u 4 PanoramaCropLeft int32u 5 PanoramaCropTop int32u 6 PanoramaCropRight int32u 7 PanoramaCropBottom int32u 8 PanoramaFrameWidth int32u 9 PanoramaFrameHeight int32u 10 PanoramaSourceWidth int32u 11 PanoramaSourceHeight int32u =head3 Sony Tag2010a Tags Valid for NEX-5N. Tag ID Tag Name Writable ------ -------- -------- 0x04b0 MeterInfo? Sony MeterInfo 0x1128 ReleaseMode3 int8u 0x112c ReleaseMode2 int8u 0x1138 FlashMode int8u 0x113e StopsAboveBaseISO int16u 0x1140 BrightnessValue int16u 0x1144 DynamicRangeOptimizer int8u 0x1148 HDRSetting int8u 0x114c ExposureCompensation int16s 0x115e PictureProfile int8u 0x115f PictureProfile int8u 0x1163 PictureEffect2 int8u 0x1170 Quality2 int8u 0x1174 MeteringMode int8u 0x1175 ExposureProgram int8u 0x117c WB_RGBLevels int16u[3] =head3 Sony MeterInfo Tags Information possibly related to metering. Extracted only if the Unknown option is used. Index1 Tag Name Writable ------ -------- -------- 0 MeterInfo1Row1 int32u[27] 108 MeterInfo1Row2 int32u[27] 216 MeterInfo1Row3 int32u[27] 324 MeterInfo1Row4 int32u[27] 432 MeterInfo1Row5 int32u[27] 540 MeterInfo1Row6 int32u[27] 648 MeterInfo1Row7 int32u[27] 756 MeterInfo2Row1 int32u[33] 888 MeterInfo2Row2 int32u[33] 1020 MeterInfo2Row3 int32u[33] 1152 MeterInfo2Row4 int32u[33] 1284 MeterInfo2Row5 int32u[33] 1416 MeterInfo2Row6 int32u[33] 1548 MeterInfo2Row7 int32u[33] 1680 MeterInfo2Row8 int32u[33] 1812 MeterInfo2Row9 int32u[33] =head3 Sony Tag2010b Tags Valid for SLT-A65/A77, NEX-7/VG20E. Tag ID Tag Name Writable ------ -------- -------- 0x0000 SequenceImageNumber int32u 0x0004 SequenceFileNumber int32u 0x0008 ReleaseMode2 int32u 0x01b6 SonyDateTime undef[7] 0x0324 DynamicRangeOptimizer int8u 0x04b4 MeterInfo? Sony MeterInfo 0x1128 ReleaseMode3 int8u 0x112c ReleaseMode2 int8u 0x1138 FlashMode int8u 0x113e StopsAboveBaseISO int16u 0x1140 BrightnessValue int16u 0x1144 DynamicRangeOptimizer int8u 0x1148 HDRSetting int8u 0x114c ExposureCompensation int16s 0x1162 PictureProfile int8u 0x1163 PictureProfile int8u 0x1167 PictureEffect2 int8u 0x1174 Quality2 int8u 0x1178 MeteringMode int8u 0x1179 ExposureProgram int8u 0x1180 WB_RGBLevels int16u[3] 0x1218 SonyISO N 0x1a23 LensParameters int16s[16]~ =head3 Sony Tag2010c Tags Valid for SLT-A37/A57 and NEX-F3. Tag ID Tag Name Writable ------ -------- -------- 0x0000 SequenceImageNumber int32u 0x0004 SequenceFileNumber int32u 0x0008 ReleaseMode2 int32u 0x0200 DigitalZoomRatio int8u 0x0210 SonyDateTime undef[7] 0x0300 DynamicRangeOptimizer int8u 0x0490 MeterInfo? Sony MeterInfo 0x1104 ReleaseMode3 int8u 0x1108 ReleaseMode2 int8u 0x1114 FlashMode int8u 0x111a StopsAboveBaseISO int16u 0x111c BrightnessValue int16u 0x1120 DynamicRangeOptimizer int8u 0x1124 HDRSetting int8u 0x1128 ExposureCompensation int16s 0x113e PictureProfile int8u 0x113f PictureProfile int8u 0x1143 PictureEffect2 int8u 0x1150 Quality2 int8u 0x1154 MeteringMode int8u 0x1155 ExposureProgram int8u 0x115c WB_RGBLevels int16u[3] 0x11f4 SonyISO N =head3 Sony Tag2010d Tags Valid for DSC-HX10V/HX20V/HX200V/TX66/TX200V/TX300V/WX50/WX100/WX150, but not valid for panorama images. Tag ID Tag Name Writable ------ -------- -------- 0x0000 SequenceImageNumber int32u 0x0004 SequenceFileNumber int32u 0x0008 ReleaseMode2 int32u 0x01fe SonyDateTime undef[7] 0x037c DynamicRangeOptimizer int8u 0x050c MeterInfo? Sony MeterInfo 0x1180 ReleaseMode3 int8u 0x1184 ReleaseMode2 int8u 0x1190 FlashMode int8u 0x1196 StopsAboveBaseISO int16u 0x1198 BrightnessValue int16u 0x119c DynamicRangeOptimizer int8u 0x11a0 HDRSetting int8u 0x11ba PictureProfile int8u 0x11bb PictureProfile int8u 0x11bf PictureEffect2 int8u 0x11d0 MeteringMode int8u 0x11d1 ExposureProgram int8u 0x11d8 WB_RGBLevels int16u[3] 0x1270 SonyISO N =head3 Sony Tag2010e Tags Valid for SLT-A58/A99, ILCE-3000/3500, NEX-3N/5R/5T/6/VG30E/VG900, DSC-RX100, DSC-RX1/RX1R. Also valid for DSC-HX300/HX50V/TX30/WX60/WX200/WX300, but not for panorama images. Tag ID Tag Name Writable ------ -------- -------- 0x0000 SequenceImageNumber int32u 0x0004 SequenceFileNumber int32u 0x0008 ReleaseMode2 int32u 0x021c DigitalZoomRatio int8u 0x022c SonyDateTime undef[7] 0x0328 DynamicRangeOptimizer int8u 0x04b8 MeterInfo? Sony MeterInfo 0x115c ReleaseMode3 int8u 0x1160 ReleaseMode2 int8u 0x116c FlashMode int8u 0x1172 StopsAboveBaseISO int16u 0x1174 BrightnessValue int16u 0x1178 DynamicRangeOptimizer int8u 0x117c HDRSetting int8u 0x1180 ExposureCompensation int16s 0x1196 PictureProfile int8u 0x1197 PictureProfile int8u 0x119b PictureEffect2 int8u 0x11a8 Quality2 int8u 0x11ac MeteringMode int8u 0x11ad ExposureProgram int8u 0x11b4 WB_RGBLevels int16u[3] 0x1254 SonyISO N 0x1258 SonyISO N 0x1278 FocalLength int16u 0x127a MinFocalLength int16u 0x127c MaxFocalLength int16u 0x1280 SonyISO N 0x1870 LensParameters? int16s[16]~ 0x1891 LensFormat int8u 0x1892 LensMount int8u 0x1893 LensType2 int16u 0x1896 LensType int16u =head3 Sony Tag2010f Tags Valid for DSC-RX100M2, DSC-QX10/QX100. Tag ID Tag Name Writable ------ -------- -------- 0x0004 ReleaseMode2 int32u 0x0050 DynamicRangeOptimizer int8u 0x01e0 MeterInfo? Sony MeterInfo 0x1014 ReleaseMode3 int8u 0x1018 ReleaseMode2 int8u 0x1024 FlashMode int8u 0x102a StopsAboveBaseISO int16u 0x102c BrightnessValue int16u 0x1030 DynamicRangeOptimizer int8u 0x1034 HDRSetting int8u 0x1038 ExposureCompensation int16s 0x104e PictureProfile int8u 0x104f PictureProfile int8u 0x1053 PictureEffect2 int8u 0x1060 Quality2 int8u 0x1064 MeteringMode int8u 0x1065 ExposureProgram int8u 0x106c WB_RGBLevels int16u[3] 0x1134 FocalLength int16u 0x1136 MinFocalLength int16u 0x1138 MaxFocalLength int16u 0x113c SonyISO N =head3 Sony Tag2010g Tags Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350, ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2. Tag ID Tag Name Writable ------ -------- -------- 0x0004 ReleaseMode2 int32u 0x0050 DynamicRangeOptimizer int8u 0x020c ReleaseMode3 int8u 0x0210 ReleaseMode2 int8u 0x021c FlashMode int8u 0x0222 StopsAboveBaseISO int16u 0x0224 BrightnessValue int16u 0x0228 DynamicRangeOptimizer int8u 0x022c HDRSetting int8u 0x0230 ExposureCompensation int16s 0x0246 PictureProfile int8u 0x0247 PictureProfile int8u 0x024b PictureEffect2 int8u 0x0258 Quality2 int8u 0x025c MeteringMode int8u 0x025d ExposureProgram int8u 0x0264 WB_RGBLevels int16u[3] 0x032c FocalLength int16u 0x032e MinFocalLength int16u 0x0330 MaxFocalLength int16u 0x0344 SonyISO N 0x0388 MeterInfo? Sony MeterInfo 0x189c LensParameters? int16s[16]~ 0x18bd LensFormat int8u 0x18be LensMount int8u 0x18bf LensType2 int16u 0x18c2 LensType int16u =head3 Sony Tag2010h Tags Valid for DSC-HX90V/RX1RM2/RX10M2/RX100M4/WX500, ILCE-7RM2/7SM2. Tag ID Tag Name Writable ------ -------- -------- 0x0004 ReleaseMode2 int32u 0x0050 DynamicRangeOptimizer int8u 0x020c ReleaseMode3 int8u 0x0210 ReleaseMode2 int8u 0x021c FlashMode int8u 0x0222 StopsAboveBaseISO int16u 0x0224 BrightnessValue int16u 0x0228 DynamicRangeOptimizer int8u 0x022c HDRSetting int8u 0x0230 ExposureCompensation int16s 0x0246 PictureProfile int8u 0x0247 PictureProfile int8u 0x024b PictureEffect2 int8u 0x0258 Quality2 int8u 0x025c MeteringMode int8u 0x025d ExposureProgram int8u 0x0264 WB_RGBLevels int16u[3] 0x032c FocalLength int16u 0x032e MinFocalLength int16u 0x0330 MaxFocalLength int16u 0x0346 SonyISO N 0x0388 MeterInfo? Sony MeterInfo 0x18cc LensParameters? int16s[16]~ 0x18ed LensFormat int8u 0x18ee LensMount int8u 0x18ef LensType2 int16u 0x18f2 LensType int16u =head3 Sony ShotInfo Tags Index1 Tag Name Writable ------ -------- -------- 2 FaceInfoOffset N 6 SonyDateTime string[20] 26 SonyImageHeight int16u 28 SonyImageWidth int16u 48 FacesDetected int16u 50 FaceInfoLength N 52 MetaVersion string[16] 72 FaceInfo1 Sony FaceInfo1 94 FaceInfo2 Sony FaceInfo2 =head3 Sony FaceInfo1 Tags Index1 Tag Name Writable ------ -------- -------- 0 Face1Position int16u[4] 32 Face2Position int16u[4] 64 Face3Position int16u[4] 96 Face4Position int16u[4] 128 Face5Position int16u[4] 160 Face6Position int16u[4] 192 Face7Position int16u[4] 224 Face8Position int16u[4] =head3 Sony FaceInfo2 Tags Index1 Tag Name Writable ------ -------- -------- 0 Face1Position int16u[4] 37 Face2Position int16u[4] 74 Face3Position int16u[4] 111 Face4Position int16u[4] 148 Face5Position int16u[4] 185 Face6Position int16u[4] 222 Face7Position int16u[4] 259 Face8Position int16u[4] =head3 Sony Tag900b Tags Tag ID Tag Name Writable ------ -------- -------- 0x0002 FacesDetected N 0x00bd FaceDetection N =head3 Sony Tag9050 Tags Data for tags 0x9050, 0x94xx and 0x2010 is encrypted by a simple substitution cipher, but the deciphered values are listed below. Tag ID Tag Name Writable ------ -------- -------- 0x0000 MaxAperture int8u 0x0001 MinAperture int8u 0x0031 FlashStatus int8u 0x0032 ImageCount int32u 0x0039 FlashStatus int8u 0x003a ImageCount int32u 0x003c SonyFNumber int16u 0x003f ReleaseMode2 int8u 0x0046 SonyExposureTime int16u 0x0048 SonyFNumber int16u 0x004b ReleaseMode2 int8u 0x004c ImageCount2 int32u 0x0051 SonyDateTime2 undef[6] 0x0058 ImageCount2 int32u 0x005d SonyDateTime2 undef[6] 0x0067 ReleaseMode2 int8u 0x0073 ReleaseMode2 int8u 0x007c InternalSerialNumber int8u[4]~ 0x0088 InternalSerialNumber int8u[6]~ 0x00f0 InternalSerialNumber int8u[5] 0x0105 LensMount int8u 0x0106 LensFormat int8u 0x0107 LensType2 int16u 0x0109 LensType int16u 0x0115 LensSpecFeatures undef[2] 0x0116 LensSpecFeatures undef[2] 0x01a0 ImageCount3 int32u 0x01aa ImageCount3 int32u 0x01bd ImageCount3 int32u 0x01cb ImageCount3 int32u =head3 Sony Tag9400a Tags Valid for many DSC, NEX and SLT models Tag ID Tag Name Writable ------ -------- -------- 0x0008 SequenceImageNumber int32u 0x000c SequenceFileNumber int32u 0x0010 ReleaseMode2 int8u 0x0012 DigitalZoom int8u 0x001a ShotNumberSincePowerUp int32u 0x0022 SequenceLength int8u 0x0028 CameraOrientation int8u 0x0029 Quality2 int8u 0x0044 SonyImageHeight int16u~ 0x0052 ModelReleaseYear int8u~ =head3 Sony Tag9400b Tags Valid for NEX-3N, ILCE-3000/3500, SLT-A58, DSC-WX60, DSC-WX300, DSC-RX100M2, DSC-HX50V, DSC-QX10/QX100. Tag ID Tag Name Writable ------ -------- -------- 0x0008 SequenceImageNumber int32u 0x000c SequenceFileNumber int32u 0x0010 ReleaseMode2 int8u 0x0012 DigitalZoom int8u 0x0016 ShotNumberSincePowerUp int32u 0x001e SequenceLength int8u 0x0024 CameraOrientation int8u 0x0025 Quality2 int8u 0x003f SonyImageHeight int16u~ 0x0046 ModelReleaseYear int8u~ =head3 Sony Tag9400c Tags Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350, ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2. Tag ID Tag Name Writable ------ -------- -------- 0x0009 ReleaseMode2 int8u 0x000a ShotNumberSincePowerUp int32u 0x0012 SequenceImageNumber int32u 0x0016 SequenceLength int8u 0x001a SequenceFileNumber int32u 0x001e SequenceLength int8u 0x0029 CameraOrientation int8u 0x002a Quality2 int8u 0x0047 SonyImageHeight int16u~ 0x0053 ModelReleaseYear int8u~ =head3 Sony Tag9402 Tags Tag ID Tag Name Writable ------ -------- -------- 0x0004 AmbientTemperature int8s 0x0016 FocusMode int8u & 0x7f 0x0017 AFAreaMode int8u 0x002d FocusPosition2 int8u =head3 Sony Tag9403 Tags Tag ID Tag Name Writable ------ -------- -------- 0x0005 CameraTemperature int8s =head3 Sony Tag9404a Tags Tag ID Tag Name Writable ------ -------- -------- 0x0019 LensZoomPosition int16u =head3 Sony Tag9404b Tags Tag ID Tag Name Writable ------ -------- -------- 0x001e LensZoomPosition int16u 0x0020 FocusPosition2 int8u =head3 Sony Tag9405a Tags Valid for SLT, NEX, ILCE-3000/3500 and several DSC models. Tag ID Tag Name Writable ------ -------- -------- 0x0601 DistortionCorrection int8u 0x0603 LensFormat int8u 0x0604 LensMount int8u 0x0605 LensType2 int16u 0x0608 LensType int16u 0x06ca LensParameters? int16s[16]~ =head3 Sony Tag9405b Tags Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350, ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2. Tag ID Tag Name Writable ------ -------- -------- 0x0004 SonyISO N 0x0006 BaseISO N 0x000a StopsAboveBaseISO int16u 0x000e SonyExposureTime2 int16u 0x0010 ExposureTime rational32u 0x0014 SonyFNumber int16u 0x0016 SonyMaxApertureValue int16u 0x0024 SequenceImageNumber int32u 0x0034 ReleaseMode2 int8u 0x0042 HighISONoiseReduction int8u 0x0044 LongExposureNoiseReduction int8u 0x0046 PictureEffect2 int8u 0x0048 ExposureProgram int8u 0x004a CreativeStyle int8u 0x0052 Sharpness int8s 0x005b DistortionCorrection int8u 0x005d LensFormat int8u 0x005e LensMount int8u 0x0060 LensType2 int16u 0x0062 LensType int16u 0x0064 LensParameters? int16s[16]~ 0x0342 LensZoomPosition int16u 0x035a LensZoomPosition int16u =head3 Sony Tag9406 Tags Tag ID Tag Name Writable ------ -------- -------- 0x0005 BatteryTemperature int8u 0x0006 BatteryLevelGrip1 int8u 0x0007 BatteryLevel int8u 0x0008 BatteryLevelGrip2 int8u =head3 Sony Tag940a Tags These tags are currently extracted for SLT models only. Tag ID Tag Name Writable ------ -------- -------- 0x0004 AFPointsSelected int32u =head3 Sony Tag940c Tags NEX and ILCE models only. Tag ID Tag Name Writable ------ -------- -------- 0x0008 LensMount2 int8u 0x0009 LensType3 int16u 0x000b CameraE-mountVersion int16u 0x000d LensE-mountVersion int16u 0x0015 LensFirmwareVersion int8u =head3 Sony AFInfo Tags These tags are currently extracted for SLT models only. Tag ID Tag Name Writable ------ -------- -------- 0x0002 AFType int8u 0x0004 AFStatusActiveSensor int16s 0x0005 FocusMode int8u 0x0007 AFPoint int8u 0x0008 AFPointInFocus int8u 0x0009 AFPointAtShutterRelease int8u 0x000a AFAreaMode int8u 0x000b FocusMode int8u 0x0010 AFPointsUsed int8u[10] 0x0011 AFStatus15 Sony AFStatus15 AFStatus19 Sony AFStatus19 0x0037 AFPoint int8u 0x0038 AFPointInFocus int8u 0x0039 AFPointAtShutterRelease int8u 0x003a AFAreaMode int8u 0x003b AFStatusActiveSensor int16s 0x0043 ExposureProgram int8u 0x0050 AFMicroAdj int8s 0x007d AFStatus79 Sony AFStatus79 0x016e AFPointsUsed int32u 0x017d AFMicroAdj int8s 0x017e ExposureProgram int8u =head3 Sony AFStatus19 Tags AF Status information for models with 19-point AF. Index1 Tag Name Writable ------ -------- -------- 0 AFStatusUpperFarLeft int16s 2 AFStatusUpper-leftHorizontal int16s 4 AFStatusFarLeftHorizontal int16s 6 AFStatusLeftHorizontal int16s 8 AFStatusLowerFarLeft int16s 10 AFStatusLower-leftHorizontal int16s 12 AFStatusUpper-leftVertical int16s 14 AFStatusLeftVertical int16s 16 AFStatusLower-leftVertical int16s 18 AFStatusFarLeftVertical int16s 20 AFStatusTopHorizontal int16s 22 AFStatusNearRight int16s 24 AFStatusCenterHorizontal int16s 26 AFStatusNearLeft int16s 28 AFStatusBottomHorizontal int16s 30 AFStatusTopVertical int16s 32 AFStatusUpper-middle int16s 34 AFStatusCenterVertical int16s 36 AFStatusLower-middle int16s 38 AFStatusBottomVertical int16s 40 AFStatusUpperFarRight int16s 42 AFStatusUpper-rightHorizontal int16s 44 AFStatusFarRightHorizontal int16s 46 AFStatusRightHorizontal int16s 48 AFStatusLowerFarRight int16s 50 AFStatusLower-rightHorizontal int16s 52 AFStatusFarRightVertical int16s 54 AFStatusUpper-rightVertical int16s 56 AFStatusRightVertical int16s 58 AFStatusLower-rightVertical int16s =head3 Sony AFStatus79 Tags AF Status information for models with 79-point AF. Index1 Tag Name Writable ------ -------- -------- 0 AFStatus_00_B4 int16s 2 AFStatus_01_C4 int16s 4 AFStatus_02_D4 int16s 6 AFStatus_03_E4 int16s 8 AFStatus_04_F4 int16s 10 AFStatus_05_G4 int16s 12 AFStatus_06_H4 int16s 14 AFStatus_07_B3 int16s 16 AFStatus_08_C3 int16s 18 AFStatus_09_D3 int16s 20 AFStatus_10_E3 int16s 22 AFStatus_11_F3 int16s 24 AFStatus_12_G3 int16s 26 AFStatus_13_H3 int16s 28 AFStatus_14_B2 int16s 30 AFStatus_15_C2 int16s 32 AFStatus_16_D2 int16s 34 AFStatus_17_E2 int16s 36 AFStatus_18_F2 int16s 38 AFStatus_19_G2 int16s 40 AFStatus_20_H2 int16s 42 AFStatus_21_C1 int16s 44 AFStatus_22_D1 int16s 46 AFStatus_23_E1 int16s 48 AFStatus_24_F1 int16s 50 AFStatus_25_G1 int16s 52 AFStatus_26_A7_Vertical int16s 54 AFStatus_27_A6_Vertical int16s 56 AFStatus_28_A5_Vertical int16s 58 AFStatus_29_C7_Vertical int16s 60 AFStatus_30_C6_Vertical int16s 62 AFStatus_31_C5_Vertical int16s 64 AFStatus_32_E7_Vertical int16s 66 AFStatus_33_E6_Center_Vertical int16s 68 AFStatus_34_E5_Vertical int16s 70 AFStatus_35_G7_Vertical int16s 72 AFStatus_36_G6_Vertical int16s 74 AFStatus_37_G5_Vertical int16s 76 AFStatus_38_I7_Vertical int16s 78 AFStatus_39_I6_Vertical int16s 80 AFStatus_40_I5_Vertical int16s 82 AFStatus_41_A7 int16s 84 AFStatus_42_B7 int16s 86 AFStatus_43_C7 int16s 88 AFStatus_44_D7 int16s 90 AFStatus_45_E7 int16s 92 AFStatus_46_F7 int16s 94 AFStatus_47_G7 int16s 96 AFStatus_48_H7 int16s 98 AFStatus_49_I7 int16s 100 AFStatus_50_A6 int16s 102 AFStatus_51_B6 int16s 104 AFStatus_52_C6 int16s 106 AFStatus_53_D6 int16s 108 AFStatus_54_E6_Center int16s 110 AFStatus_55_F6 int16s 112 AFStatus_56_G6 int16s 114 AFStatus_57_H6 int16s 116 AFStatus_58_I6 int16s 118 AFStatus_59_A5 int16s 120 AFStatus_60_B5 int16s 122 AFStatus_61_C5 int16s 124 AFStatus_62_D5 int16s 126 AFStatus_63_E5 int16s 128 AFStatus_64_F5 int16s 130 AFStatus_65_G5 int16s 132 AFStatus_66_H5 int16s 134 AFStatus_67_I5 int16s 136 AFStatus_68_C11 int16s 138 AFStatus_69_D11 int16s 140 AFStatus_70_E11 int16s 142 AFStatus_71_F11 int16s 144 AFStatus_72_G11 int16s 146 AFStatus_73_B10 int16s 148 AFStatus_74_C10 int16s 150 AFStatus_75_D10 int16s 152 AFStatus_76_E10 int16s 154 AFStatus_77_F10 int16s 156 AFStatus_78_G10 int16s 158 AFStatus_79_H10 int16s 160 AFStatus_80_B9 int16s 162 AFStatus_81_C9 int16s 164 AFStatus_82_D9 int16s 166 AFStatus_83_E9 int16s 168 AFStatus_84_F9 int16s 170 AFStatus_85_G9 int16s 172 AFStatus_86_H9 int16s 174 AFStatus_87_B8 int16s 176 AFStatus_88_C8 int16s 178 AFStatus_89_D8 int16s 180 AFStatus_90_E8 int16s 182 AFStatus_91_F8 int16s 184 AFStatus_92_G8 int16s 186 AFStatus_93_H8 int16s 188 AFStatus_94_E6_Center_F2-8 int16s =head3 Sony Tag940e Tags E-mount models. Tag ID Tag Name Writable ------ -------- -------- 0x1a06 TiffMeteringImageWidth N 0x1a07 TiffMeteringImageHeight N 0x1a08 TiffMeteringImage N =head3 Sony PIC Tags The TextInfo data is extracted as a block to preserve the formatting, and some of the more interesting information is extracted as separate tags. Tag ID Tag Name Writable ------ -------- -------- 'BC:' Barcode N 'BarCode:' Barcode N 'Capt:' SensorTemperature N 'FWVer:' FirmwareVersion N 'IFD' PIC_IFD Sony 'Temp:' CameraTemperature N 'Temp:Clbt:' BoardTemperature N 'TextInfo1' TextInfo1 N 'TextInfo2' TextInfo2 N 'VR Enable C:' VibrationReduction N 'barcode:' Barcode N =head3 Sony Ericsson Tags Maker notes found in images from some Sony Ericsson phones. Tag ID Tag Name Writable ------ -------- -------- 0x0201 PreviewImageStart int32u* 0x0202 PreviewImageLength int32u* 0x2000 MakerNoteVersion undef[4] =head3 Sony SRF Tags The maker notes in SRF (Sony Raw Format) images contain 7 IFD's with family 1 group names SRF0 through SRF6. SRF0 and SRF1 use the tags in this table, while SRF2 through SRF5 use the tags in the next table, and SRF6 uses standard EXIF tags. All information other than SRF0 is encrypted, but thanks to Dave Coffin the decryption algorithm is known. SRF images are written by the Sony DSC-F828 and DSC-V3. Tag ID Tag Name Writable ------ -------- -------- 0x0000 SRF2Key N 0x0001 DataKey N =head3 Sony SRF2 Tags These tags are found in the SRF2 through SRF5 IFD's. Tag ID Tag Name Writable ------ -------- -------- 0x0002 SRF6Offset N 0x0003 SRFDataOffset? N 0x0004 RawDataOffset N 0x0005 RawDataLength N 0x0043 MaxApertureAtMaxFocal N 0x0044 MaxApertureAtMinFocal N 0x0045 MinFocalLength N 0x0046 MaxFocalLength N 0x00c0 WBRedDaylight N 0x00c1 WBGreenDaylight N 0x00c2 WBBlueDaylight N 0x00c3 WBRedCloudy N 0x00c4 WBGreenCloudy N 0x00c5 WBBlueCloudy N 0x00c9 WBRedTungsten N 0x00ca WBGreenTungsten N 0x00cb WBBlueTungsten N 0x00cc WBRedFlash N 0x00cd WBGreenFlash N 0x00ce WBBlueFlash N 0x00d0 WBRedAsShot N 0x00d1 WBGreenAsShot N 0x00d2 WBBlueAsShot N =head3 Sony SR2Private Tags The SR2 format uses the DNGPrivateData tag to reference a private IFD containing these tags. SR2 images are written by the Sony DSC-R1, but this information is also written to ARW images by other models. Tag ID Tag Name Writable ------ -------- -------- 0x7200 SR2SubIFDOffset N 0x7201 SR2SubIFDLength N 0x7221 SR2SubIFDKey N 0x7240 IDC_IFD SonyIDC 0x7241 IDC2_IFD SonyIDC 0x7250 MRWInfo MinoltaRaw =head3 Sony SR2SubIFD Tags Tags in the encrypted SR2SubIFD Tag ID Tag Name Writable ------ -------- -------- 0x7300 BlackLevel N 0x7302 WB_GRBGLevelsAuto N 0x7303 WB_GRBGLevels N 0x7310 BlackLevel N 0x7313 WB_RGGBLevels N 0x7480 WB_RGBLevelsDaylight N 0x7481 WB_RGBLevelsCloudy N 0x7482 WB_RGBLevelsTungsten N 0x7483 WB_RGBLevelsFlash N 0x7484 WB_RGBLevels4500K N 0x7486 WB_RGBLevelsFluorescent N 0x74a0 MaxApertureAtMaxFocal N 0x74a1 MaxApertureAtMinFocal N 0x74a2 MaxFocalLength N 0x74a3 MinFocalLength N 0x74c0 SR2DataIFD Sony SR2DataIFD 0x7800 ColorMatrix N 0x7820 WB_RGBLevelsDaylight N 0x7821 WB_RGBLevelsCloudy N 0x7822 WB_RGBLevelsTungsten N 0x7823 WB_RGBLevelsFlash N 0x7824 WB_RGBLevels4500K N 0x7825 WB_RGBLevelsShade N 0x7826 WB_RGBLevelsFluorescent N 0x7827 WB_RGBLevelsFluorescentP1 N 0x7828 WB_RGBLevelsFluorescentP2 N 0x7829 WB_RGBLevelsFluorescentM1 N 0x782a WB_RGBLevels8500K N 0x782b WB_RGBLevels6000K N 0x782c WB_RGBLevels3200K N 0x782d WB_RGBLevels2500K N 0x787f WhiteLevel N 0x7980 ChromaticAberrationCorrParams N 0x7982 DistortionCorrParams N =head3 Sony SR2DataIFD Tags Tag ID Tag Name Writable ------ -------- -------- 0x7770 ColorMode N =head3 Sony PMP Tags These tags are written in the proprietary-format header of PMP images from the DSC-F1. Index1 Tag Name Writable ------ -------- -------- 8 JpgFromRawStart N 12 JpgFromRawLength N 22 SonyImageWidth N 24 SonyImageHeight N 27 Orientation N 29 ImageQuality N 52 Comment N 76 DateTimeOriginal N 84 ModifyDate N 102 ExposureTime N 106 FNumber N 108 ExposureCompensation N 112 FocalLength N 118 Flash N =head2 SonyIDC Tags Tags written by the Sony Image Data Converter utility in ARW images. Tag ID Tag Name Writable ------ -------- -------- 0x0201 IDCPreviewStart int32u* 0x0202 IDCPreviewLength int32u* 0x8000 IDCCreativeStyle int32u 0x8001 CreativeStyleWasChanged int32u 0x8002 PresetWhiteBalance int32u 0x8013 ColorTemperatureAdj int16u 0x8014 PresetWhiteBalanceAdj int32s 0x8015 ColorCorrection int32s 0x8016 SaturationAdj int32s 0x8017 ContrastAdj int32s 0x8018 BrightnessAdj int32s 0x8019 HueAdj int32s 0x801a SharpnessAdj int32s 0x801b SharpnessOvershoot int32s 0x801c SharpnessUndershoot int32s 0x801d SharpnessThreshold int32s 0x801e NoiseReductionMode int16u 0x8021 GrayPoint int16u[4] 0x8022 D-RangeOptimizerMode int16u 0x8023 D-RangeOptimizerValue int32s 0x8024 D-RangeOptimizerHighlight int32s 0x8026 HighlightColorDistortReduct int16u 0x8027 NoiseReductionValue int32s 0x8028 EdgeNoiseReduction int32s 0x8029 ColorNoiseReduction int32s 0x802d D-RangeOptimizerShadow int32s 0x8030 PeripheralIllumCentralRadius int32s 0x8031 PeripheralIllumCentralValue int32s 0x8032 PeripheralIllumPeriphValue int32s 0x9000 ToneCurveBrightnessX int16u[n] 0x9001 ToneCurveRedX int16u[n] 0x9002 ToneCurveGreenX int16u[n] 0x9003 ToneCurveBlueX int16u[n] 0x9004 ToneCurveBrightnessY int16u[n] 0x9005 ToneCurveRedY int16u[n] 0x9006 ToneCurveGreenY int16u[n] 0x9007 ToneCurveBlueY int16u[n] 0xd000 CurrentVersion int32u 0xd001 VersionIFD SonyIDC 0xd100 VersionCreateDate string 0xd101 VersionModifyDate string =head2 Unknown Tags The following tags are decoded in unsupported maker notes. Use the Unknown (-u) option to display other unknown tags. Tag ID Tag Name Writable ------ -------- -------- 0x0e00 PrintIM PrintIM =head2 DNG Tags The main DNG tags are found in the EXIF table. The tables below define only information found within structures of these main DNG tag values. See L<http://www.adobe.com/products/dng/> for the official DNG specification. =head3 DNG AdobeData Tags This information is found in the "Adobe" DNGPrivateData. The maker notes ('MakN') are processed by ExifTool, but some information may have been lost by the Adobe DNG Converter. This is because the Adobe DNG Converter (as of version 6.3) doesn't properly handle information referenced from inside the maker notes that lies outside the original maker notes block. This information is lost when only the maker note block is copied to the DNG image. While this doesn't effect all makes of cameras, it is a problem for some major brands such as Olympus and Sony. Other entries in this table represent proprietary information that is extracted from the original RAW image and restructured to a different (but still proprietary) Adobe format. Tag ID Tag Name Writable ------ -------- -------- 'CRW ' AdobeCRW CanonRaw 'Koda' AdobeKoda Kodak IFD 'Leaf' AdobeLeaf Leaf SubIFD 'MRW ' AdobeMRW MinoltaRaw 'MakN' MakerNoteApple Apple MakerNoteNikon Nikon MakerNoteCanon Canon MakerNoteCasio Casio MakerNoteCasio2 Casio Type2 MakerNoteFLIR FLIR MakerNoteFujiFilm FujiFilm MakerNoteGE GE MakerNoteGE2 FujiFilm MakerNoteHasselblad Unknown MakerNoteHP HP MakerNoteHP2 HP Type2 MakerNoteHP4 HP Type4 MakerNoteHP6 HP Type6 MakerNoteISL Unknown MakerNoteJVC JVC MakerNoteJVCText JVC Text MakerNoteKodak1a Kodak MakerNoteKodak1b Kodak MakerNoteKodak2 Kodak Type2 MakerNoteKodak3 Kodak Type3 MakerNoteKodak4 Kodak Type4 MakerNoteKodak5 Kodak Type5 MakerNoteKodak6a Kodak Type6 MakerNoteKodak6b Kodak Type6 MakerNoteKodak7 Kodak Type7 MakerNoteKodak8a Kodak Type8 MakerNoteKodak8b Kodak Type8 MakerNoteKodak8c Kodak Type8 MakerNoteKodak9 Kodak Type9 MakerNoteKodak10 Kodak Type10 MakerNoteKodak11 Kodak Type11 MakerNoteKodakUnknown Kodak Unknown MakerNoteKyocera Unknown MakerNoteMinolta Minolta MakerNoteMinolta2 Olympus MakerNoteMinolta3 undef MakerNoteMotorola Motorola MakerNoteNikon2 Nikon Type2 MakerNoteNikon3 Nikon MakerNoteNintendo Nintendo MakerNoteOlympus Olympus MakerNoteOlympus2 Olympus MakerNoteLeica Panasonic MakerNoteLeica2 Panasonic Leica2 MakerNoteLeica3 Panasonic Leica3 MakerNoteLeica4 Panasonic Leica4 MakerNoteLeica5 Panasonic Leica5 MakerNoteLeica6 Panasonic Leica6 MakerNoteLeica7 Panasonic Leica6 MakerNoteLeica8 Panasonic Leica5 MakerNoteLeica9 Panasonic Leica9 MakerNotePanasonic Panasonic MakerNotePanasonic2 Panasonic Type2 MakerNotePentax Pentax MakerNotePentax2 Pentax Type2 MakerNotePentax3 Casio Type2 MakerNotePentax4 Pentax Type4 MakerNotePentax5 Pentax MakerNotePentax6 Pentax S1 MakerNotePhaseOne PhaseOne MakerNoteReconyx Reconyx MakerNoteRicoh Ricoh MakerNoteRicoh2 Ricoh Type2 MakerNoteRicohText Ricoh Text MakerNoteSamsung1a undef MakerNoteSamsung1b Samsung MakerNoteSamsung2 Samsung Type2 MakerNoteSanyo Sanyo MakerNoteSanyoC4 Sanyo MakerNoteSanyoPatch Sanyo MakerNoteSigma Sigma MakerNoteSony Sony MakerNoteSony2 Olympus MakerNoteSony3 Olympus MakerNoteSony4 Sony PIC MakerNoteSony5 Sony MakerNoteSonyEricsson Sony Ericsson MakerNoteSonySRF Sony SRF MakerNoteUnknownText undef MakerNoteUnknownBinary undef MakerNoteUnknown Unknown 'Pano' AdobePano PanasonicRaw 'RAF ' AdobeRAF FujiFilm RAF 'SR2 ' AdobeSR2 Sony SR2Private =head3 DNG OriginalRaw Tags This table defines tags extracted from the DNG OriginalRawFileData information. Tag ID Tag Name Writable ------ -------- -------- 0x0000 OriginalRawImage N 0x0001 OriginalRawResource N 0x0002 OriginalRawFileType N 0x0003 OriginalRawCreator N 0x0004 OriginalTHMImage N 0x0005 OriginalTHMResource N 0x0006 OriginalTHMFileType N 0x0007 OriginalTHMCreator N =head2 CanonRaw Tags These tags apply to CRW-format Canon RAW files and information in the APP0 "CIFF" segment of JPEG images. When writing CanonRaw/CIFF information, the length of the information is preserved (and the new information is truncated or padded as required) unless B<Writable> is C<resize>. Currently, only JpgFromRaw and ThumbnailImage are allowed to change size. CRW images also support the addition of a CanonVRD trailer, which in turn supports XMP. This trailer is created automatically if necessary when ExifTool is used to write XMP to a CRW image. Tag ID Tag Name Writable ------ -------- -------- 0x0000 NullRecord undef 0x0001 FreeBytes undef 0x0032 CanonColorInfo1 N 0x0805 CanonFileDescription string[32] UserComment string[256] 0x080a CanonRawMakeModel CanonRaw MakeModel 0x080b CanonFirmwareVersion string[32] 0x080c ComponentVersion string 0x080d ROMOperationMode string[8] 0x0810 OwnerName string[32] 0x0815 CanonImageType string[32] 0x0816 OriginalFileName string[32] 0x0817 ThumbnailFileName string[32] 0x100a TargetImageType int16u 0x1010 ShutterReleaseMethod int16u 0x1011 ShutterReleaseTiming int16u 0x1016 ReleaseSetting int16u 0x101c BaseISO int16u 0x1028 CanonFlashInfo? int16u[4] 0x1029 CanonFocalLength Canon FocalLength 0x102a CanonShotInfo Canon ShotInfo 0x102c CanonColorInfo2 N 0x102d CanonCameraSettings Canon CameraSettings 0x1030 WhiteSample CanonRaw WhiteSample 0x1031 SensorInfo Canon SensorInfo 0x1033 CustomFunctions10D CanonCustom Functions10D CustomFunctionsD30 CanonCustom FunctionsD30 CustomFunctionsD60 CanonCustom FunctionsD30 CustomFunctionsUnknown CanonCustom FuncsUnknown 0x1038 CanonAFInfo Canon AFInfo 0x1093 CanonFileInfo Canon FileInfo 0x10a9 ColorBalance Canon ColorBalance 0x10ae ColorTemperature int16u 0x10b4 ColorSpace int16u 0x10b5 RawJpgInfo CanonRaw RawJpgInfo 0x1803 ImageFormat CanonRaw ImageFormat 0x1804 RecordID int32u 0x1806 SelfTimerTime int32u 0x1807 TargetDistanceSetting float 0x180b SerialNumber int32u UnknownNumber? Y 0x180e TimeStamp CanonRaw TimeStamp 0x1810 ImageInfo CanonRaw ImageInfo 0x1813 FlashInfo CanonRaw FlashInfo 0x1814 MeasuredEV float 0x1817 FileNumber int32u 0x1818 ExposureInfo CanonRaw ExposureInfo 0x1834 CanonModelID int32u 0x1835 DecoderTable CanonRaw DecoderTable 0x183b SerialNumberFormat int32u 0x2005 RawData N 0x2007 JpgFromRaw resize 0x2008 ThumbnailImage resize 0x2804 ImageDescription CanonRaw 0x2807 CameraObject CanonRaw 0x3002 ShootingRecord CanonRaw 0x3003 MeasuredInfo CanonRaw 0x3004 CameraSpecification CanonRaw 0x300a ImageProps CanonRaw 0x300b ExifInformation CanonRaw =head3 CanonRaw MakeModel Tags Index1 Tag Name Writable ------ -------- -------- 0 Make string[6] 6 Model string =head3 CanonRaw WhiteSample Tags Index2 Tag Name Writable ------ -------- -------- 1 WhiteSampleWidth N 2 WhiteSampleHeight N 3 WhiteSampleLeftBorder N 4 WhiteSampleTopBorder N 5 WhiteSampleBits N =head3 CanonRaw RawJpgInfo Tags Index2 Tag Name Writable ------ -------- -------- 1 RawJpgQuality int16u 2 RawJpgSize int16u 3 RawJpgWidth int16u 4 RawJpgHeight int16u =head3 CanonRaw ImageFormat Tags Index4 Tag Name Writable ------ -------- -------- 0 FileFormat int32u 1 TargetCompressionRatio float =head3 CanonRaw TimeStamp Tags Index4 Tag Name Writable ------ -------- -------- 0 DateTimeOriginal int32u 1 TimeZoneCode int32s 2 TimeZoneInfo int32u =head3 CanonRaw ImageInfo Tags Index4 Tag Name Writable ------ -------- -------- 0 ImageWidth N 1 ImageHeight N 2 PixelAspectRatio N 3 Rotation int32s 4 ComponentBitDepth N 5 ColorBitDepth N 6 ColorBW N =head3 CanonRaw FlashInfo Tags Index4 Tag Name Writable ------ -------- -------- 0 FlashGuideNumber float 1 FlashThreshold float =head3 CanonRaw ExposureInfo Tags Index4 Tag Name Writable ------ -------- -------- 0 ExposureCompensation float 1 ShutterSpeedValue float 2 ApertureValue float =head3 CanonRaw DecoderTable Tags Index4 Tag Name Writable ------ -------- -------- 0 DecoderTableNumber N 2 CompressedDataOffset N 3 CompressedDataLength N =head2 KyoceraRaw Tags Tags for Kyocera Contax N Digital RAW images. Index1 Tag Name Writable ------ -------- -------- 1 FirmwareVersion N 12 Model N 25 Make N 33 DateTimeOriginal N 52 ISO N 56 ExposureTime N 60 WB_RGGBLevels N 88 FNumber N 104 MaxAperture N 112 FocalLength N 124 Lens N =head2 MinoltaRaw Tags These tags are used in Minolta RAW format (MRW) images. Tag ID Tag Name Writable ------ -------- -------- "\0PRD" MinoltaPRD MinoltaRaw PRD "\0RIF" MinoltaRIF MinoltaRaw RIF "\0TTW" MinoltaTTW EXIF "\0WBG" MinoltaWBG MinoltaRaw WBG =head3 MinoltaRaw PRD Tags Index1 Tag Name Writable ------ -------- -------- 0 FirmwareID string[8] 8 SensorHeight int16u 10 SensorWidth int16u 12 ImageHeight int16u 14 ImageWidth int16u 16 RawDepth int8u 17 BitDepth int8u 18 StorageMethod int8u 23 BayerPattern int8u =head3 MinoltaRaw RIF Tags Index1 Tag Name Writable ------ -------- -------- 1 Saturation int8s 2 Contrast int8s 3 Sharpness int8s 4 WBMode int8u~ 5 ProgramMode int8u 6 ISOSetting int8u 7 ColorMode int32u[0.25] 8 WB_RBLevelsTungsten int16u[2] 12 WB_RBLevelsDaylight int16u[2] 16 WB_RBLevelsCloudy int16u[2] 20 WB_RBLevelsCoolWhiteF int16u[2] 24 WB_RBLevelsFlash int16u[2] 28 WB_RBLevelsUnknown? int16u[2] 32 WB_RBLevelsShade int16u[2] 36 WB_RBLevelsDaylightF int16u[2] 40 WB_RBLevelsDayWhiteF int16u[2] 44 WB_RBLevelsWhiteF int16u[2] 56 ColorFilter int8s 57 BWFilter int8u 58 ZoneMatching int8u 59 Hue int8s 60 ColorTemperature int8u 74 ZoneMatching int8u 76 ColorTemperature int8u 77 ColorFilter int8u 78 ColorTemperature int8u 79 ColorFilter int8u 80 RawDataLength N =head3 MinoltaRaw WBG Tags Index1 Tag Name Writable ------ -------- -------- 0 WBScale int8u[4] 4 WB_GBRGLevels int16u[4] WB_RGGBLevels int16u[4] =head2 PanasonicRaw Tags These tags are found in IFD0 of Panasonic/Leica RAW, RW2 and RWL images. Tag ID Tag Name Writable ------ -------- -------- 0x0001 PanasonicRawVersion undef 0x0002 SensorWidth N 0x0003 SensorHeight N 0x0004 SensorTopBorder N 0x0005 SensorLeftBorder N 0x0006 SensorBottomBorder N 0x0007 SensorRightBorder N 0x0008 BlackLevel1 int16u 0x0009 BlackLevel2 int16u 0x000a BlackLevel3 int16u 0x000e LinearityLimitRed int16u 0x000f LinearityLimitGreen int16u 0x0010 LinearityLimitBlue int16u 0x0011 RedBalance int16u 0x0012 BlueBalance int16u 0x0013 WBInfo PanasonicRaw WBInfo 0x0017 ISO int16u 0x0018 HighISOMultiplierRed int16u 0x0019 HighISOMultiplierGreen int16u 0x001a HighISOMultiplierBlue int16u 0x001c BlackLevelRed int16u 0x001d BlackLevelGreen int16u 0x001e BlackLevelBlue int16u 0x0024 WBRedLevel int16u 0x0025 WBGreenLevel int16u 0x0026 WBBlueLevel int16u 0x0027 WBInfo2 PanasonicRaw WBInfo2 0x002e JpgFromRaw JPEG 0x002f CropTop int16u 0x0030 CropLeft int16u 0x0031 CropBottom int16u 0x0032 CropRight int16u 0x010f Make string 0x0110 Model string 0x0111 StripOffsets N 0x0112 Orientation int16u 0x0116 RowsPerStrip N 0x0117 StripByteCounts N 0x0118 RawDataOffset N 0x0119 DistortionInfo PanasonicRaw DistortionInfo 0x02bc ApplicationNotes XMP 0x83bb IPTC-NAA IPTC 0x8769 ExifOffset EXIF 0x8825 GPSInfo GPS =head3 PanasonicRaw WBInfo Tags Index2 Tag Name Writable ------ -------- -------- 0 NumWBEntries int16u 1 WBType1 int16u 2 WB_RBLevels1 int16u[2] 4 WBType2 int16u 5 WB_RBLevels2 int16u[2] 7 WBType3 int16u 8 WB_RBLevels3 int16u[2] 10 WBType4 int16u 11 WB_RBLevels4 int16u[2] 13 WBType5 int16u 14 WB_RBLevels5 int16u[2] 16 WBType6 int16u 17 WB_RBLevels6 int16u[2] 19 WBType7 int16u 20 WB_RBLevels7 int16u[2] =head3 PanasonicRaw WBInfo2 Tags Index2 Tag Name Writable ------ -------- -------- 0 NumWBEntries int16u 1 WBType1 int16u 2 WB_RGBLevels1 int16u[3] 5 WBType2 int16u 6 WB_RGBLevels2 int16u[3] 9 WBType3 int16u 10 WB_RGBLevels3 int16u[3] 13 WBType4 int16u 14 WB_RGBLevels4 int16u[3] 17 WBType5 int16u 18 WB_RGBLevels5 int16u[3] 21 WBType6 int16u 22 WB_RGBLevels6 int16u[3] 25 WBType7 int16u 26 WB_RGBLevels7 int16u[3] =head3 PanasonicRaw DistortionInfo Tags Lens distortion correction information. Tag ID Tag Name Writable ------ -------- -------- 0x0002 DistortionParam02 int16s 0x0004 DistortionParam04 int16s 0x0005 DistortionScale int16s 7.1 DistortionCorrection int16s & 0x0f 0x0008 DistortionParam08 int16s 0x0009 DistortionParam09 int16s 0x000b DistortionParam11 int16s 0x000c DistortionN? int16s =head2 SigmaRaw Tags These tags are used in Sigma and Foveon RAW (.X3F) images. Metadata is also extracted from the JpgFromRaw image if it exists (all models but the SD9 and SD10). Currently, metadata may only be written to the embedded JpgFromRaw. Tag ID Tag Name Writable ------ -------- -------- 'Header' Header SigmaRaw Header 'Header4' Header4 SigmaRaw Header4 'HeaderExt' HeaderExt SigmaRaw HeaderExt 'IMA2' PreviewImage N JpgFromRaw N 'IMAG' PreviewImage N 'PROP' Properties SigmaRaw Properties =head3 SigmaRaw Header Tags Information extracted from the header of an X3F file. Tag ID Tag Name Writable ------ -------- -------- 0x0001 FileVersion N 0x0002 ImageUniqueID N 0x0006 MarkBits N 0x0007 ImageWidth N 0x0008 ImageHeight N 0x0009 Rotation N 0x000a WhiteBalance N 0x0012 SceneCaptureType N =head3 SigmaRaw Header4 Tags Header information for version 4.0 or greater X3F. Index4 Tag Name Writable ------ -------- -------- 1 FileVersion N 10 ImageWidth N 11 ImageHeight N 12 Rotation N =head3 SigmaRaw HeaderExt Tags Extended header data found in version 2.1 and 2.2 files Tag ID Tag Name Writable ------ -------- -------- 0x0000 Unused N 0x0001 ExposureAdjust N 0x0002 Contrast N 0x0003 Shadow N 0x0004 Highlight N 0x0005 Saturation N 0x0006 Sharpness N 0x0007 RedAdjust N 0x0008 GreenAdjust N 0x0009 BlueAdjust N 0x000a X3FillLight N =head3 SigmaRaw Properties Tags Tag ID Tag Name Writable ------ -------- -------- 'AEMODE' MeteringMode N 'AFAREA' AFArea N 'AFINFOCUS' AFInFocus N 'AFMODE' FocusMode N 'APERTURE' FNumber N 'AP_DESC' ApertureDisplayed N 'BRACKET' BracketShot N 'BURST' BurstShot N 'CAMMANUF' Make N 'CAMMODEL' Model N 'CAMNAME' CameraName N 'CAMSERIAL' SerialNumber N 'CM_DESC' SceneCaptureType N 'COLORSPACE' ColorSpace N 'DRIVE' DriveMode N 'EVAL_STATE' EvalState N 'EXPCOMP' ExposureCompensation N 'EXPNET' NetExposureCompensation N 'EXPTIME' IntegrationTime N 'FIRMVERS' FirmwareVersion N 'FLASH' FlashMode N 'FLASHEXPCOMP' FlashExpComp N 'FLASHPOWER' FlashPower N 'FLASHTTLMODE' FlashTTLMode N 'FLASHTYPE' FlashType N 'FLENGTH' FocalLength N 'FLEQ35MM' FocalLengthIn35mmFormat N 'FOCUS' Focus N 'IMAGEBOARDID' ImageBoardID N 'IMAGERBOARDID' ImagerBoardID N 'IMAGERTEMP' SensorTemperature N 'ISO' ISO N 'LENSARANGE' LensApertureRange N 'LENSFRANGE' LensFocalRange N 'LENSMODEL' LensType N 'PMODE' ExposureProgram N 'RESOLUTION' Quality N 'SENSORID' SensorID N 'SHUTTER' ExposureTime N 'SH_DESC' ShutterSpeedDisplayed N 'TIME' DateTimeOriginal N 'VERSION_BF' VersionBF N 'WB_DESC' WhiteBalance N =head2 Lytro Tags Tag definitions for Lytro Light Field Picture (LFP) files. ExifTool extracts the full JSON metadata blocks, as well as breaking them down into individual tags. All available tags are extracted from the JSON metadata, even if they don't appear in the table below. Tag Name Writable -------- -------- AccelerometerTime N AccelerometerX N AccelerometerY N AccelerometerZ N CameraType N DateTimeOriginal N EmbeddedImage N ExposureTime N FNumber N FirmwareVersion N FocalLength N FocalPlaneXResolution N FrameExposureTime N ISO N ImageLimitExposureBias N ImageModulationExposureBias N JSONMetadata N+ LensTemperature N Make N Model N Orientation N SensorSerialNumber N SerialNumber N SocTemperature N =head2 JFIF Tags The following information is extracted from the JPEG JFIF header. See L<http://www.jpeg.org/public/jfif.pdf> for the JFIF 1.02 specification. Index1 Tag Name Writable ------ -------- -------- 0 JFIFVersion N: 2 ResolutionUnit int8u: 3 XResolution int16u: 5 YResolution int16u: =head3 JFIF Extension Tags Tag ID Tag Name Writable ------ -------- -------- 0x0010 ThumbnailImage N =head2 FlashPix Tags The FlashPix file format, introduced in 1996, was developed by Kodak, Hewlett-Packard and Microsoft. Internally the FPX file structure mimics that of an old DOS disk with fixed-sized "sectors" (usually 512 bytes) and a "file allocation table" (FAT). No wonder this image format never became popular. However, some of the structures used in FlashPix streams are part of the EXIF specification, and are still being used in the APP2 FPXR segment of JPEG images by some digital cameras from manufacturers such as FujiFilm, Hewlett-Packard, Kodak and Sanyo. ExifTool extracts FlashPix information from both FPX images and the APP2 FPXR segment of JPEG images. As well, FlashPix information is extracted from DOC, PPT, XLS (Microsoft Word, PowerPoint and Excel) documents, VSD (Microsoft Visio) drawings, and FLA (Macromedia/Adobe Flash project) files since these are based on the same file format as FlashPix (the Windows Compound Binary File format). See L<http://graphcomp.com/info/specs/livepicture/fpx.pdf> for the FlashPix specification. Tag ID Tag Name Writable ------ -------- -------- "\x01CompObj" CompObj FlashPix CompObj "\x05Audio Info" AudioInfo FlashPix AudioInfo "\x05Data Object" DataObject FlashPix DataObject "\x05DocumentSummaryInformation" DocumentInfo FlashPix DocumentInfo "\x05Extension List" Extensions FlashPix Extensions "\x05Global Info" GlobalInfo FlashPix GlobalInfo "\x05Image Contents" Image FlashPix Image "\x05Image Info" ImageInfo FlashPix ImageInfo "\x05Operation" Operation FlashPix Operation "\x05Screen Nail" ScreenNail N "\x05SummaryInformation" SummaryInfo FlashPix SummaryInfo "\x05Transform" Transform FlashPix Transform 'Audio Stream' AudioStream N 'Contents' Contents XMP 'Current User' CurrentUser N 'ICC Profile 0001' ICC_Profile ICC_Profile 'Preview' PreviewImage N 'Property' PreviewInfo FlashPix PreviewInfo 'Subimage 0000 Header' SubimageHdr FlashPix SubimageHdr =head3 FlashPix CompObj Tags Index4 Tag Name Writable ------ -------- -------- 0 CompObjUserTypeLen N 1 CompObjUserType N =head3 FlashPix AudioInfo Tags Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head3 FlashPix DataObject Tags Tag ID Tag Name Writable ------ -------- -------- 0x10000 DataObjectID N 0x10002 LockedPropertyList N 0x10003 DataObjectTitle N 0x10004 LastModifier N 0x10005 RevisionNumber N 0x10006 DataCreateDate N 0x10007 DataModifyDate N 0x10008 CreatingApplication N 0x10100 DataObjectStatus N 0x10101 CreatingTransform N 0x10102 UsingTransforms N 0x10000000 CachedImageHeight N 0x10000001 CachedImageWidth N =head3 FlashPix DocumentInfo Tags The DocumentSummaryInformation property set includes a UserDefined property set for which only the Hyperlinks and HyperlinkBase tags are pre-defined. However, ExifTool will also extract any other information found in the UserDefined properties. Tag ID Tag Name Writable ------ -------- -------- 0x0002 Category N 0x0003 PresentationTarget N 0x0004 Bytes N 0x0005 Lines N 0x0006 Paragraphs N 0x0007 Slides N 0x0008 Notes N 0x0009 HiddenSlides N 0x000a MMClips N 0x000b ScaleCrop N 0x000c HeadingPairs N 0x000d TitleOfParts N 0x000e Manager N 0x000f Company N 0x0010 LinksUpToDate N 0x0011 CharCountWithSpaces N 0x0013 SharedDoc N 0x0016 HyperlinksChanged N 0x0017 AppVersion N '_PID_HLINKS' Hyperlinks N '_PID_LINKBASE' HyperlinkBase N =head3 FlashPix Extensions Tags Tag ID Tag Name Writable ------ -------- -------- 0x0001 ExtensionName N 0x0002 ExtensionClassID N 0x0003 ExtensionPersistence N 0x0004 ExtensionCreateDate N 0x0005 ExtensionModifyDate N 0x0006 CreatingApplication N 0x0007 ExtensionDescription N 0x1000 Storage-StreamPathname N 0x2000 FlashPixStreamPathname N 0x2001 FlashPixStreamFieldOffset N 0x3000 PropertySetPathname N 0x3001 PropertySetIDCodes N 0x3002 PropertyVectorElements N 0x4000 SubimageResolutions N 0x10000000 UsedExtensionNumbers N =head3 FlashPix GlobalInfo Tags Tag ID Tag Name Writable ------ -------- -------- 0x10002 LockedPropertyList N 0x10003 TransformedImageTitle N 0x10004 LastModifier N 0x10100 VisibleOutputs N 0x10101 MaximumImageIndex N 0x10102 MaximumTransformIndex N 0x10103 MaximumOperationIndex N =head3 FlashPix Image Tags Tag ID Tag Name Writable ------ -------- -------- 0x1000000 NumberOfResolutions N 0x1000002 ImageWidth N 0x1000003 ImageHeight N 0x1000004 DefaultDisplayHeight N 0x1000005 DefaultDisplayWidth N 0x1000006 DisplayUnits N 0x2000000 SubimageWidth N 0x2000001 SubimageHeight N 0x2000002 SubimageColor N 0x2000003 SubimageNumericalFormat N 0x2000004 DecimationMethod N 0x2000005 DecimationPrefilterWidth N 0x2000007 SubimageICC_Profile N 0x3000001 JPEGTables N 0x3000002 MaxJPEGTableIndex N =head3 FlashPix ImageInfo Tags Tag ID Tag Name Writable ------ -------- -------- 0x21000000 FileSource N 0x21000001 SceneType N 0x21000002 CreationPathVector N 0x21000003 SoftwareRelease N 0x21000004 UserDefinedID N 0x21000005 SharpnessApproximation N 0x22000000 Copyright N 0x22000001 OriginalImageBroker N 0x22000002 DigitalImageBroker N 0x22000003 Authorship N 0x22000004 IntellectualPropertyNotes N 0x23000000 TestTarget N 0x23000002 GroupCaption N 0x23000003 CaptionText N 0x23000004 People N 0x23000007 Things N 0x2300000a DateTimeOriginal N 0x2300000b Events N 0x2300000c Places N 0x2300000f ContentDescriptionNotes N 0x24000000 Make N 0x24000001 Model N 0x24000002 SerialNumber N 0x25000000 CreateDate N 0x25000001 ExposureTime N 0x25000002 FNumber N 0x25000003 ExposureProgram N 0x25000004 BrightnessValue N 0x25000005 ExposureCompensation N 0x25000006 SubjectDistance N 0x25000007 MeteringMode N 0x25000008 LightSource N 0x25000009 FocalLength N 0x2500000a MaxApertureValue N 0x2500000b Flash N 0x2500000c FlashEnergy N 0x2500000d FlashReturn N 0x2500000e BackLight N 0x2500000f SubjectLocation N 0x25000010 ExposureIndex N 0x25000011 SpecialEffectsOpticalFilter N 0x25000012 PerPictureNotes N 0x26000000 SensingMethod N 0x26000001 FocalPlaneXResolution N 0x26000002 FocalPlaneYResolution N 0x26000003 FocalPlaneResolutionUnit N 0x26000004 SpatialFrequencyResponse N 0x26000005 CFAPattern N 0x26000007 ISO N 0x26000008 Opto-ElectricConvFactor N 0x27000000 FilmBrand N 0x27000001 FilmCategory N 0x27000002 FilmSize N 0x27000003 FilmRollNumber N 0x27000004 FilmFrameNumber N 0x28000000 ScannerMake N 0x28000001 ScannerModel N 0x28000002 ScannerSerialNumber N 0x28000003 ScanSoftware N 0x28000004 ScanSoftwareRevisionDate N 0x28000005 ServiceOrganizationName N 0x28000006 ScanOperatorID N 0x28000008 ScanDate N 0x28000009 ModifyDate N 0x2800000a ScannerPixelSize N 0x29000000 OriginalScannedImageSize N 0x29000001 OriginalDocumentSize N 0x29000002 OriginalMedium N 0x29000003 TypeOfOriginal N =head3 FlashPix Operation Tags Tag ID Tag Name Writable ------ -------- -------- 0x10000 OperationID N =head3 FlashPix SummaryInfo Tags The Dictionary, CodePage and LocalIndicator tags are common to all FlashPix property tables, even though they are only listed in the SummaryInfo table. Tag ID Tag Name Writable ------ -------- -------- 0x0000 Dictionary N 0x0001 CodePage N 0x0002 Title N 0x0003 Subject N 0x0004 Author N 0x0005 Keywords N 0x0006 Comments N 0x0007 Template N 0x0008 LastModifiedBy N 0x0009 RevisionNumber N 0x000a TotalEditTime N 0x000b LastPrinted N 0x000c CreateDate N 0x000d ModifyDate N 0x000e Pages N 0x000f Words N 0x0010 Characters N 0x0011 ThumbnailClip N 0x0012 Software N 0x0013 Security N 0x80000000 LocaleIndicator N =head3 FlashPix Transform Tags Tag ID Tag Name Writable ------ -------- -------- 0x10000 TransformNodeID N 0x10001 OperationClassID N 0x10002 LockedPropertyList N 0x10003 TransformTitle N 0x10004 LastModifier N 0x10005 RevisionNumber N 0x10006 TransformCreateDate N 0x10007 TransformModifyDate N 0x10008 CreatingApplication N 0x10100 InputDataObjectList N 0x10101 OutputDataObjectList N 0x10102 OperationNumber N 0x10000000 ResultAspectRatio N 0x10000001 RectangleOfInterest N 0x10000002 Filtering N 0x10000003 SpatialOrientation N 0x10000004 ColorTwistMatrix N 0x10000005 ContrastAdjustment N =head3 FlashPix PreviewInfo Tags Preview information written by some FujiFilm models. Index1 Tag Name Writable ------ -------- -------- 13 PreviewImageWidth N 23 PreviewImageHeight N =head3 FlashPix SubimageHdr Tags Index4 Tag Name Writable ------ -------- -------- 1 SubimageWidth N 2 SubimageHeight N 3 SubimageTileCount N 4 SubimageTileWidth N 5 SubimageTileHeight N 6 NumChannels N =head2 MPF Tags These tags are part of the CIPA Multi-Picture Format specification, and are found in the APP2 "MPF" segment of JPEG images. MPImage data referenced from this segment is stored as a JPEG trailer. The MPF tags are not writable, however the MPF segment may be deleted as a group (with "MPF:All") but then the JPEG trailer should also be deleted (with "Trailer:All"). See L<http://www.cipa.jp/std/documents/e/DC-007_E.pdf> for the official specification. Tag ID Tag Name Writable ------ -------- -------- 0xb000 MPFVersion N 0xb001 NumberOfImages N 0xb002 MPImageList MPF MPImage 0xb003 ImageUIDList N 0xb004 TotalFrames N 0xb101 MPIndividualNum N 0xb201 PanOrientation N 0xb202 PanOverlapH N 0xb203 PanOverlapV N 0xb204 BaseViewpointNum N 0xb205 ConvergenceAngle N 0xb206 BaselineLength N 0xb207 VerticalDivergence N 0xb208 AxisDistanceX N 0xb209 AxisDistanceY N 0xb20a AxisDistanceZ N 0xb20b YawAngle N 0xb20c PitchAngle N 0xb20d RollAngle N =head3 MPF MPImage Tags The first MPF "Large Thumbnail" image is extracted as PreviewImage, and the rest of the embedded MPF images are extracted as MPImage#. The ExtractEmbedded (-ee) option may be used to extract information from these embedded images. Index1 Tag Name Writable ------ -------- -------- 0.1 MPImageFlags N 0.2 MPImageFormat N 0.3 MPImageType N 4 MPImageLength N 8 MPImageStart N 12 DependentImage1EntryNumber N 14 DependentImage2EntryNumber N =head2 Stim Tags These tags are part of the CIPA Stereo Still Image specification, and are found in the APP3 "Stim" segment of JPEG images. See L<http://www.cipa.jp/std/documents/e/DC-006_E.pdf> for the official specification. Tag ID Tag Name Writable ------ -------- -------- 0x0000 StimVersion N 0x0001 ApplicationData N 0x0002 ImageArrangement N 0x0003 ImageRotation N 0x0004 ScalingFactor N 0x0005 CropXSize N 0x0006 CropYSize N 0x0007 CropX Stim CropX 0x0008 CropY Stim CropY 0x0009 ViewType N 0x000a RepresentativeImage N 0x000b ConvergenceBaseImage N 0x000c AssumedDisplaySize N 0x000d AssumedDistanceView N 0x000e RepresentativeDisparityNear N 0x000f RepresentativeDisparityFar N 0x0010 InitialDisplayEffect N 0x0011 ConvergenceDistance N 0x0012 CameraArrangementInterval N 0x0013 ShootingCount N =head3 Stim CropX Tags Index1 Tag Name Writable ------ -------- -------- 0 CropXCommonOffset N 2 CropXViewpointNumber N 3 CropXOffset N 7 CropXViewpointNumber2 N 8 CropXOffset2 N =head3 Stim CropY Tags Index1 Tag Name Writable ------ -------- -------- 0 CropYCommonOffset N 2 CropYViewpointNumber N 3 CropYOffset N 7 CropYViewpointNumber2 N 8 CropYOffset2 N =head2 Scalado Tags Tags extracted from the JPEG APP4 "SCALADO" segment found in images from HTC, LG and Samsung phones. (Presumably written by Scalado mobile software, L<http://www.scalado.com/>.) Tag ID Tag Name Writable ------ -------- -------- 'HGHT' PreviewImageHeight N 'QUAL' PreviewQuality N 'SPMO' DataLength? N 'WDTH' PreviewImageWidth N =head2 Qualcomm Tags The tags below have been observed in the JPEG APP7 "Qualcomm Camera Attributes" segment written by some cameras such as the HP iPAQ Voice Messenger. ExifTool will extract any information found from this segment, even if it is not listed in this table. Tag Name Writable -------- -------- AECAggressiveness N AECCurrentExpIndex N AECCurrentSensorLuma N AECEnable N AECExposureIndexAdjStep N AECHighLumaRegionCount N AECHighLumaRegionThreshold N AECIndoorIdx N AECLumaTarget N AECLumaTolerance N AECMode N AECOdoorIdx N AECOutdoorBrightDiscarded N AECOutdoorBrightEnable N AECOutdoorBrightReduction N AECOutdoorBrightThresholdHI N AECOutdoorBrightThresholdLO N AECOutdoorGammaIndex N AECSnapshotDigitalGain N AECSnapshotExposureTimeMs N AECSnapshotLineCount N AECSnapshotSensorGain N AECVfeLuma N AFBoundary N AFCollectEndStat N AFEnable N AFFarEnd N AFFineSrchPoints N AFFineStep N AFFocusTime N AFGrossStep N AFMode N AFNearEnd N AFPosDefMacro N AFPosDefNorm N AFPosition N AFProcess N AFREnable N AFRFaster0ExpMod N AFRFaster0Trigger N AFRFaster1ExpMod N AFRFaster1Trigger N AFRFaster2ExpMod N AFRFaster2Trigger N AFRFaster3ExpMod N AFRFaster3Trigger N AFRFaster4ExpMod N AFRFaster4Trigger N AFRPossibleFrameCnt N AFRSlower0ExpMod N AFRSlower0Trigger N AFRSlower1ExpMod N AFRSlower1Trigger N AFRSlower2ExpMod N AFRSlower2Trigger N AFRSlower3ExpMod N AFRSlower3Trigger N AFRSlower4ExpMod N AFRSlower4Trigger N AFResetLensAfterSnap N AFStepsNearFar N AFStepsNearInfinity N AFTestMode N AFTracePositions00 N AFTracePositions01 N AFTracePositions02 N AFTracePositions03 N AFTracePositions04 N AFTracePositions05 N AFTracePositions06 N AFTracePositions07 N AFTracePositions08 N AFTracePositions09 N AFTracePositions10 N AFTracePositions11 N AFTracePositions12 N AFTracePositions13 N AFTracePositions14 N AFTracePositions15 N AFTracePositions16 N AFTracePositions17 N AFTracePositions18 N AFTracePositions19 N AFTracePositions20 N AFTracePositions21 N AFTracePositions22 N AFTracePositions23 N AFTracePositions24 N AFTracePositions25 N AFTracePositions26 N AFTracePositions27 N AFTracePositions28 N AFTracePositions29 N AFTracePositions30 N AFTracePositions31 N AFTracePositions32 N AFTracePositions33 N AFTracePositions34 N AFTracePositions35 N AFTracePositions36 N AFTracePositions37 N AFTracePositions38 N AFTracePositions39 N AFTracePositions40 N AFTracePositions41 N AFTracePositions42 N AFTracePositions43 N AFTracePositions44 N AFTracePositions45 N AFTracePositions46 N AFTracePositions47 N AFTracePositions48 N AFTracePositions49 N AFTraceStats00 N AFTraceStats01 N AFTraceStats02 N AFTraceStats03 N AFTraceStats04 N AFTraceStats05 N AFTraceStats06 N AFTraceStats07 N AFTraceStats08 N AFTraceStats09 N AFTraceStats10 N AFTraceStats11 N AFTraceStats12 N AFTraceStats13 N AFTraceStats14 N AFTraceStats15 N AFTraceStats16 N AFTraceStats17 N AFTraceStats18 N AFTraceStats19 N AFTraceStats20 N AFTraceStats21 N AFTraceStats22 N AFTraceStats23 N AFTraceStats24 N AFTraceStats25 N AFTraceStats26 N AFTraceStats27 N AFTraceStats28 N AFTraceStats29 N AFTraceStats30 N AFTraceStats31 N AFTraceStats32 N AFTraceStats33 N AFTraceStats34 N AFTraceStats35 N AFTraceStats36 N AFTraceStats37 N AFTraceStats38 N AFTraceStats39 N AFTraceStats40 N AFTraceStats41 N AFTraceStats42 N AFTraceStats43 N AFTraceStats44 N AFTraceStats45 N AFTraceStats46 N AFTraceStats47 N AFTraceStats48 N AFTraceStats49 N AFUndershootProtect N AFVfeHorzOffset N AFVfeHorzWidth N AFVfeMetricMax N AFVfeVertHeight N AFVfeVertOffset N ASF3EdgeDetect N ASF3EdgeFilterA11 N ASF3EdgeFilterA12 N ASF3EdgeFilterA13 N ASF3EdgeFilterA21 N ASF3EdgeFilterA22 N ASF3EdgeFilterA23 N ASF3EdgeFilterA31 N ASF3EdgeFilterA32 N ASF3EdgeFilterA33 N ASF3Enable N ASF3LowerThreshold N ASF3NoiseFilterA11 N ASF3NoiseFilterA12 N ASF3NoiseFilterA13 N ASF3NoiseFilterA21 N ASF3NoiseFilterA22 N ASF3NoiseFilterA23 N ASF3NoiseFilterA31 N ASF3NoiseFilterA32 N ASF3NoiseFilterA33 N ASF3UpperThreshold N ASF5BrtLoThres N ASF5BrtShrpDegF1 N ASF5BrtShrpDegF2 N ASF5BrtSmthPercent N ASF5BrtUpThres N ASF5Enable N ASF5ExposureIndex1 N ASF5ExposureIndex2 N ASF5Filter1A11 N ASF5Filter1A12 N ASF5Filter1A13 N ASF5Filter1A14 N ASF5Filter1A15 N ASF5Filter1A21 N ASF5Filter1A22 N ASF5Filter1A23 N ASF5Filter1A24 N ASF5Filter1A25 N ASF5Filter1A31 N ASF5Filter1A32 N ASF5Filter1A33 N ASF5Filter1A34 N ASF5Filter1A35 N ASF5Filter1A41 N ASF5Filter1A42 N ASF5Filter1A43 N ASF5Filter1A44 N ASF5Filter1A45 N ASF5Filter1A51 N ASF5Filter1A52 N ASF5Filter1A53 N ASF5Filter1A54 N ASF5Filter1A55 N ASF5Filter2A11 N ASF5Filter2A12 N ASF5Filter2A13 N ASF5Filter2A14 N ASF5Filter2A15 N ASF5Filter2A21 N ASF5Filter2A22 N ASF5Filter2A23 N ASF5Filter2A24 N ASF5Filter2A25 N ASF5Filter2A31 N ASF5Filter2A32 N ASF5Filter2A33 N ASF5Filter2A34 N ASF5Filter2A35 N ASF5Filter2A41 N ASF5Filter2A42 N ASF5Filter2A43 N ASF5Filter2A44 N ASF5Filter2A45 N ASF5Filter2A51 N ASF5Filter2A52 N ASF5Filter2A53 N ASF5Filter2A54 N ASF5Filter2A55 N ASF5FilterMode N ASF5LowLoThres N ASF5LowShrpDegF1 N ASF5LowShrpDegF2 N ASF5LowSmthPrcnt N ASF5LowUpThres N ASF5LumaFilter00 N ASF5LumaFilter01 N ASF5LumaFilter02 N ASF5LumaFilter03 N ASF5LumaFilter04 N ASF5LumaFilter05 N ASF5LumaFilter06 N ASF5LumaFilter07 N ASF5LumaFilter08 N ASF5MaxExposureIndex N ASF5NrmLoThres N ASF5NrmShrpDegF1 N ASF5NrmShrpDegF2 N ASF5NrmSmthPrcnt N ASF5NrmUpThres N ASF5NrmizeFactor1 N ASF5NrmizeFactor2 N AWBAggressiveness N AWBAgwGridDist2Thresh N AWBAlgorithm N AWBAveBgRatio N AWBAveRgRatio N AWBBlueGainAdjRef1 N AWBBlueGainAdjRef2 N AWBBlueGainAdjRef3 N AWBBlueGainAdjRef4 N AWBBlueGainAdjRef5 N AWBBlueGainAdjRef6 N AWBBlueGainAdjRef7 N AWBBlueGainAdjRef8 N AWBBlueGainRef1 N AWBBlueGainRef2 N AWBBlueGainRef3 N AWBBlueGainRef4 N AWBBlueGainRef5 N AWBBlueGainRef6 N AWBBlueGainRef7 N AWBBlueGainRef8 N AWBCcBias N AWBCompactClusterR2 N AWBEnable N AWBGreenOffsetBg N AWBGreenOffsetRg N AWBIndoorSampleInfluence N AWBLoVfeC1 N AWBLoVfeC2 N AWBLoVfeC3 N AWBLoVfeC4 N AWBLoVfeM1 N AWBLoVfeM2 N AWBLoVfeM3 N AWBLoVfeM4 N AWBLoVfeMaxY N AWBLoVfeMinY N AWBLowLigColCorEna N AWBMaxBGain N AWBMaxGGain N AWBMaxRGain N AWBMinBGain N AWBMinGGain N AWBMinRGain N AWBNormVfeC1 N AWBNormVfeC2 N AWBNormVfeC3 N AWBNormVfeC4 N AWBNormVfeM1 N AWBNormVfeM2 N AWBNormVfeM3 N AWBNormVfeM4 N AWBNormVfeMaxY N AWBNormVfeMinY N AWBOudorVfeC1 N AWBOudorVfeC2 N AWBOudorVfeC3 N AWBOudorVfeC4 N AWBOudorVfeM1 N AWBOudorVfeM2 N AWBOudorVfeM3 N AWBOudorVfeM4 N AWBOudorVfeMaxY N AWBOudorVfeMinY N AWBOutdoorSampleInfluence N AWBPrevWbBgain N AWBPrevWbGgain N AWBPrevWbRgain N AWBRedGainAdjRef1 N AWBRedGainAdjRef2 N AWBRedGainAdjRef3 N AWBRedGainAdjRef4 N AWBRedGainAdjRef5 N AWBRedGainAdjRef6 N AWBRedGainAdjRef7 N AWBRedGainAdjRef8 N AWBRedGainRef1 N AWBRedGainRef2 N AWBRedGainRef3 N AWBRedGainRef4 N AWBRedGainRef5 N AWBRedGainRef6 N AWBRedGainRef7 N AWBRedGainRef8 N AWBSampleDecision N AWBSnapshotBGain N AWBSnapshotRGain N AntiBadingPixelClk N AntiBadingPixelClkPerLine N AntibandingEnable N BlckLvlEvenCols N BlckLvlOddCols N CamMclkHz N ChroSupChroThres1 N ChroSupChroThres2 N ChroSupLumaThres1 N ChroSupLumaThres2 N ChroSupLumaThres3 N ChroSupLumaThres4 N ChromSupress N ClipToAfRato N CurrResol N DayltConvChrmA_M N DayltConvChrmA_P N DayltConvChrmB_M N DayltConvChrmB_P N DayltConvChrmC_M N DayltConvChrmC_P N DayltConvChrmD_M N DayltConvChrmD_P N DayltConvChrmKCb N DayltConvChrmKCr N DayltConvLumaK N DayltConvLumaV0 N DayltConvLumaV1 N DayltConvLumaV2 N DefConvChrmA_M N DefConvChrmA_P N DefConvChrmB_M N DefConvChrmB_P N DefConvChrmC_M N DefConvChrmC_P N DefConvChrmD_M N DefConvChrmD_P N DefConvChrmKCb N DefConvChrmKCr N DefConvLumaK N DefConvLumaV0 N DefConvLumaV1 N DefConvLumaV2 N DefCorC0 N DefCorC1 N DefCorC2 N DefCorC3 N DefCorC4 N DefCorC5 N DefCorC6 N DefCorC7 N DefCorC8 N DefCorK0 N DefCorK1 N DefCorK2 N DefLumaGammaMode N DefRgbGammaMode N DefectPixCorEnable N DefectPixMaxThresh N DefectPixMinThresh N DiscardFrstFrm N FrmSkipPttrn N GammaEnable N HJREnable N HJRMaxNumFrames N HJROneToTwoOffset N HJRTextureThreshold N HJR_NReductionFlat N HJR_NReductionTexture N IncandConvChrmA_M N IncandConvChrmA_P N IncandConvChrmB_M N IncandConvChrmB_P N IncandConvChrmC_M N IncandConvChrmC_P N IncandConvChrmD_M N IncandConvChrmD_P N IncandConvChrmKCb N IncandConvChrmKCr N IncandConvLumaK N IncandConvLumaV0 N IncandConvLumaV1 N IncandConvLumaV2 N LADetect N LAEnable N MaxPrviewFps N MaxVideoFps N NghtshtFps N NightshotMode N OutlierDistance N PclkInvert N PrviewFps N PrviewResol N R2ABlueCtbl00 N R2ABlueCtbl01 N R2ABlueCtbl02 N R2ABlueCtbl03 N R2ABlueCtbl04 N R2ABlueCtbl05 N R2ABlueCtbl06 N R2ABlueCtbl07 N R2ABlueCtbl08 N R2ABlueCtbl09 N R2ABlueCtbl10 N R2ABlueCtbl11 N R2ABlueCtbl12 N R2ABlueCtbl13 N R2ABlueCtbl14 N R2ABlueCtbl15 N R2ABlueCtbl16 N R2ABlueCtbl17 N R2ABlueCtbl18 N R2ABlueCtbl19 N R2ABlueCtbl20 N R2ABlueCtbl21 N R2ABlueCtbl22 N R2ABlueCtbl23 N R2ABlueCtbl24 N R2ABlueCtbl25 N R2ABlueCtbl26 N R2ABlueCtbl27 N R2ABlueCtbl28 N R2ABlueCtbl29 N R2ABlueCtbl30 N R2ABlueCtbl31 N R2ABlueStbl00 N R2ABlueStbl01 N R2ABlueStbl02 N R2ABlueStbl03 N R2ABlueStbl04 N R2ABlueStbl05 N R2ABlueStbl06 N R2ABlueStbl07 N R2ABlueStbl08 N R2ABlueStbl09 N R2ABlueStbl10 N R2ABlueStbl11 N R2ABlueStbl12 N R2ABlueStbl13 N R2ABlueStbl14 N R2ABlueStbl15 N R2ABlueStbl16 N R2ABlueStbl17 N R2ABlueStbl18 N R2ABlueStbl19 N R2ABlueStbl20 N R2ABlueStbl21 N R2ABlueStbl22 N R2ABlueStbl23 N R2ABlueStbl24 N R2ABlueStbl25 N R2ABlueStbl26 N R2ABlueStbl27 N R2ABlueStbl28 N R2ABlueStbl29 N R2ABlueStbl30 N R2ABlueStbl31 N R2ACx N R2ACy N R2AGreenCtbl00 N R2AGreenCtbl01 N R2AGreenCtbl02 N R2AGreenCtbl03 N R2AGreenCtbl04 N R2AGreenCtbl05 N R2AGreenCtbl06 N R2AGreenCtbl07 N R2AGreenCtbl08 N R2AGreenCtbl09 N R2AGreenCtbl10 N R2AGreenCtbl11 N R2AGreenCtbl12 N R2AGreenCtbl13 N R2AGreenCtbl14 N R2AGreenCtbl15 N R2AGreenCtbl16 N R2AGreenCtbl17 N R2AGreenCtbl18 N R2AGreenCtbl19 N R2AGreenCtbl20 N R2AGreenCtbl21 N R2AGreenCtbl22 N R2AGreenCtbl23 N R2AGreenCtbl24 N R2AGreenCtbl25 N R2AGreenCtbl26 N R2AGreenCtbl27 N R2AGreenCtbl28 N R2AGreenCtbl29 N R2AGreenCtbl30 N R2AGreenCtbl31 N R2AGreenStbl00 N R2AGreenStbl01 N R2AGreenStbl02 N R2AGreenStbl03 N R2AGreenStbl04 N R2AGreenStbl05 N R2AGreenStbl06 N R2AGreenStbl07 N R2AGreenStbl08 N R2AGreenStbl09 N R2AGreenStbl10 N R2AGreenStbl11 N R2AGreenStbl12 N R2AGreenStbl13 N R2AGreenStbl14 N R2AGreenStbl15 N R2AGreenStbl16 N R2AGreenStbl17 N R2AGreenStbl18 N R2AGreenStbl19 N R2AGreenStbl20 N R2AGreenStbl21 N R2AGreenStbl22 N R2AGreenStbl23 N R2AGreenStbl24 N R2AGreenStbl25 N R2AGreenStbl26 N R2AGreenStbl27 N R2AGreenStbl28 N R2AGreenStbl29 N R2AGreenStbl30 N R2AGreenStbl31 N R2AHeight N R2AIntervals N R2ARedCtbl00 N R2ARedCtbl01 N R2ARedCtbl02 N R2ARedCtbl03 N R2ARedCtbl04 N R2ARedCtbl05 N R2ARedCtbl06 N R2ARedCtbl07 N R2ARedCtbl08 N R2ARedCtbl09 N R2ARedCtbl10 N R2ARedCtbl11 N R2ARedCtbl12 N R2ARedCtbl13 N R2ARedCtbl14 N R2ARedCtbl15 N R2ARedCtbl16 N R2ARedCtbl17 N R2ARedCtbl18 N R2ARedCtbl19 N R2ARedCtbl20 N R2ARedCtbl21 N R2ARedCtbl22 N R2ARedCtbl23 N R2ARedCtbl24 N R2ARedCtbl25 N R2ARedCtbl26 N R2ARedCtbl27 N R2ARedCtbl28 N R2ARedCtbl29 N R2ARedCtbl30 N R2ARedCtbl31 N R2ARedStbl00 N R2ARedStbl01 N R2ARedStbl02 N R2ARedStbl03 N R2ARedStbl04 N R2ARedStbl05 N R2ARedStbl06 N R2ARedStbl07 N R2ARedStbl08 N R2ARedStbl09 N R2ARedStbl10 N R2ARedStbl11 N R2ARedStbl12 N R2ARedStbl13 N R2ARedStbl14 N R2ARedStbl15 N R2ARedStbl16 N R2ARedStbl17 N R2ARedStbl18 N R2ARedStbl19 N R2ARedStbl20 N R2ARedStbl21 N R2ARedStbl22 N R2ARedStbl23 N R2ARedStbl24 N R2ARedStbl25 N R2ARedStbl26 N R2ARedStbl27 N R2ARedStbl28 N R2ARedStbl29 N R2ARedStbl30 N R2ARedStbl31 N R2ATbl00 N R2ATbl01 N R2ATbl02 N R2ATbl03 N R2ATbl04 N R2ATbl05 N R2ATbl06 N R2ATbl07 N R2ATbl08 N R2ATbl09 N R2ATbl10 N R2ATbl11 N R2ATbl12 N R2ATbl13 N R2ATbl14 N R2ATbl15 N R2ATbl16 N R2ATbl17 N R2ATbl18 N R2ATbl19 N R2ATbl20 N R2ATbl21 N R2ATbl22 N R2ATbl23 N R2ATbl24 N R2ATbl25 N R2ATbl26 N R2ATbl27 N R2ATbl28 N R2ATbl29 N R2ATbl30 N R2ATbl31 N R2AWidth N R2D65BlueCtbl00 N R2D65BlueCtbl01 N R2D65BlueCtbl02 N R2D65BlueCtbl03 N R2D65BlueCtbl04 N R2D65BlueCtbl05 N R2D65BlueCtbl06 N R2D65BlueCtbl07 N R2D65BlueCtbl08 N R2D65BlueCtbl09 N R2D65BlueCtbl10 N R2D65BlueCtbl11 N R2D65BlueCtbl12 N R2D65BlueCtbl13 N R2D65BlueCtbl14 N R2D65BlueCtbl15 N R2D65BlueCtbl16 N R2D65BlueCtbl17 N R2D65BlueCtbl18 N R2D65BlueCtbl19 N R2D65BlueCtbl20 N R2D65BlueCtbl21 N R2D65BlueCtbl22 N R2D65BlueCtbl23 N R2D65BlueCtbl24 N R2D65BlueCtbl25 N R2D65BlueCtbl26 N R2D65BlueCtbl27 N R2D65BlueCtbl28 N R2D65BlueCtbl29 N R2D65BlueCtbl30 N R2D65BlueCtbl31 N R2D65BlueStbl00 N R2D65BlueStbl01 N R2D65BlueStbl02 N R2D65BlueStbl03 N R2D65BlueStbl04 N R2D65BlueStbl05 N R2D65BlueStbl06 N R2D65BlueStbl07 N R2D65BlueStbl08 N R2D65BlueStbl09 N R2D65BlueStbl10 N R2D65BlueStbl11 N R2D65BlueStbl12 N R2D65BlueStbl13 N R2D65BlueStbl14 N R2D65BlueStbl15 N R2D65BlueStbl16 N R2D65BlueStbl17 N R2D65BlueStbl18 N R2D65BlueStbl19 N R2D65BlueStbl20 N R2D65BlueStbl21 N R2D65BlueStbl22 N R2D65BlueStbl23 N R2D65BlueStbl24 N R2D65BlueStbl25 N R2D65BlueStbl26 N R2D65BlueStbl27 N R2D65BlueStbl28 N R2D65BlueStbl29 N R2D65BlueStbl30 N R2D65BlueStbl31 N R2D65Cx N R2D65Cy N R2D65GreenCtbl00 N R2D65GreenCtbl01 N R2D65GreenCtbl02 N R2D65GreenCtbl03 N R2D65GreenCtbl04 N R2D65GreenCtbl05 N R2D65GreenCtbl06 N R2D65GreenCtbl07 N R2D65GreenCtbl08 N R2D65GreenCtbl09 N R2D65GreenCtbl10 N R2D65GreenCtbl11 N R2D65GreenCtbl12 N R2D65GreenCtbl13 N R2D65GreenCtbl14 N R2D65GreenCtbl15 N R2D65GreenCtbl16 N R2D65GreenCtbl17 N R2D65GreenCtbl18 N R2D65GreenCtbl19 N R2D65GreenCtbl20 N R2D65GreenCtbl21 N R2D65GreenCtbl22 N R2D65GreenCtbl23 N R2D65GreenCtbl24 N R2D65GreenCtbl25 N R2D65GreenCtbl26 N R2D65GreenCtbl27 N R2D65GreenCtbl28 N R2D65GreenCtbl29 N R2D65GreenCtbl30 N R2D65GreenCtbl31 N R2D65GreenStbl00 N R2D65GreenStbl01 N R2D65GreenStbl02 N R2D65GreenStbl03 N R2D65GreenStbl04 N R2D65GreenStbl05 N R2D65GreenStbl06 N R2D65GreenStbl07 N R2D65GreenStbl08 N R2D65GreenStbl09 N R2D65GreenStbl10 N R2D65GreenStbl11 N R2D65GreenStbl12 N R2D65GreenStbl13 N R2D65GreenStbl14 N R2D65GreenStbl15 N R2D65GreenStbl16 N R2D65GreenStbl17 N R2D65GreenStbl18 N R2D65GreenStbl19 N R2D65GreenStbl20 N R2D65GreenStbl21 N R2D65GreenStbl22 N R2D65GreenStbl23 N R2D65GreenStbl24 N R2D65GreenStbl25 N R2D65GreenStbl26 N R2D65GreenStbl27 N R2D65GreenStbl28 N R2D65GreenStbl29 N R2D65GreenStbl30 N R2D65GreenStbl31 N R2D65Height N R2D65Intervals N R2D65RedCtbl00 N R2D65RedCtbl01 N R2D65RedCtbl02 N R2D65RedCtbl03 N R2D65RedCtbl04 N R2D65RedCtbl05 N R2D65RedCtbl06 N R2D65RedCtbl07 N R2D65RedCtbl08 N R2D65RedCtbl09 N R2D65RedCtbl10 N R2D65RedCtbl11 N R2D65RedCtbl12 N R2D65RedCtbl13 N R2D65RedCtbl14 N R2D65RedCtbl15 N R2D65RedCtbl16 N R2D65RedCtbl17 N R2D65RedCtbl18 N R2D65RedCtbl19 N R2D65RedCtbl20 N R2D65RedCtbl21 N R2D65RedCtbl22 N R2D65RedCtbl23 N R2D65RedCtbl24 N R2D65RedCtbl25 N R2D65RedCtbl26 N R2D65RedCtbl27 N R2D65RedCtbl28 N R2D65RedCtbl29 N R2D65RedCtbl30 N R2D65RedCtbl31 N R2D65RedStbl00 N R2D65RedStbl01 N R2D65RedStbl02 N R2D65RedStbl03 N R2D65RedStbl04 N R2D65RedStbl05 N R2D65RedStbl06 N R2D65RedStbl07 N R2D65RedStbl08 N R2D65RedStbl09 N R2D65RedStbl10 N R2D65RedStbl11 N R2D65RedStbl12 N R2D65RedStbl13 N R2D65RedStbl14 N R2D65RedStbl15 N R2D65RedStbl16 N R2D65RedStbl17 N R2D65RedStbl18 N R2D65RedStbl19 N R2D65RedStbl20 N R2D65RedStbl21 N R2D65RedStbl22 N R2D65RedStbl23 N R2D65RedStbl24 N R2D65RedStbl25 N R2D65RedStbl26 N R2D65RedStbl27 N R2D65RedStbl28 N R2D65RedStbl29 N R2D65RedStbl30 N R2D65RedStbl31 N R2D65Tbl00 N R2D65Tbl01 N R2D65Tbl02 N R2D65Tbl03 N R2D65Tbl04 N R2D65Tbl05 N R2D65Tbl06 N R2D65Tbl07 N R2D65Tbl08 N R2D65Tbl09 N R2D65Tbl10 N R2D65Tbl11 N R2D65Tbl12 N R2D65Tbl13 N R2D65Tbl14 N R2D65Tbl15 N R2D65Tbl16 N R2D65Tbl17 N R2D65Tbl18 N R2D65Tbl19 N R2D65Tbl20 N R2D65Tbl21 N R2D65Tbl22 N R2D65Tbl23 N R2D65Tbl24 N R2D65Tbl25 N R2D65Tbl26 N R2D65Tbl27 N R2D65Tbl28 N R2D65Tbl29 N R2D65Tbl30 N R2D65Tbl31 N R2D65Width N R2TL84BlueCtbl00 N R2TL84BlueCtbl01 N R2TL84BlueCtbl02 N R2TL84BlueCtbl03 N R2TL84BlueCtbl04 N R2TL84BlueCtbl05 N R2TL84BlueCtbl06 N R2TL84BlueCtbl07 N R2TL84BlueCtbl08 N R2TL84BlueCtbl09 N R2TL84BlueCtbl10 N R2TL84BlueCtbl11 N R2TL84BlueCtbl12 N R2TL84BlueCtbl13 N R2TL84BlueCtbl14 N R2TL84BlueCtbl15 N R2TL84BlueCtbl16 N R2TL84BlueCtbl17 N R2TL84BlueCtbl18 N R2TL84BlueCtbl19 N R2TL84BlueCtbl20 N R2TL84BlueCtbl21 N R2TL84BlueCtbl22 N R2TL84BlueCtbl23 N R2TL84BlueCtbl24 N R2TL84BlueCtbl25 N R2TL84BlueCtbl26 N R2TL84BlueCtbl27 N R2TL84BlueCtbl28 N R2TL84BlueCtbl29 N R2TL84BlueCtbl30 N R2TL84BlueCtbl31 N R2TL84BlueStbl00 N R2TL84BlueStbl01 N R2TL84BlueStbl02 N R2TL84BlueStbl03 N R2TL84BlueStbl04 N R2TL84BlueStbl05 N R2TL84BlueStbl06 N R2TL84BlueStbl07 N R2TL84BlueStbl08 N R2TL84BlueStbl09 N R2TL84BlueStbl10 N R2TL84BlueStbl11 N R2TL84BlueStbl12 N R2TL84BlueStbl13 N R2TL84BlueStbl14 N R2TL84BlueStbl15 N R2TL84BlueStbl16 N R2TL84BlueStbl17 N R2TL84BlueStbl18 N R2TL84BlueStbl19 N R2TL84BlueStbl20 N R2TL84BlueStbl21 N R2TL84BlueStbl22 N R2TL84BlueStbl23 N R2TL84BlueStbl24 N R2TL84BlueStbl25 N R2TL84BlueStbl26 N R2TL84BlueStbl27 N R2TL84BlueStbl28 N R2TL84BlueStbl29 N R2TL84BlueStbl30 N R2TL84BlueStbl31 N R2TL84Cx N R2TL84Cy N R2TL84GreenCtbl00 N R2TL84GreenCtbl01 N R2TL84GreenCtbl02 N R2TL84GreenCtbl03 N R2TL84GreenCtbl04 N R2TL84GreenCtbl05 N R2TL84GreenCtbl06 N R2TL84GreenCtbl07 N R2TL84GreenCtbl08 N R2TL84GreenCtbl09 N R2TL84GreenCtbl10 N R2TL84GreenCtbl11 N R2TL84GreenCtbl12 N R2TL84GreenCtbl13 N R2TL84GreenCtbl14 N R2TL84GreenCtbl15 N R2TL84GreenCtbl16 N R2TL84GreenCtbl17 N R2TL84GreenCtbl18 N R2TL84GreenCtbl19 N R2TL84GreenCtbl20 N R2TL84GreenCtbl21 N R2TL84GreenCtbl22 N R2TL84GreenCtbl23 N R2TL84GreenCtbl24 N R2TL84GreenCtbl25 N R2TL84GreenCtbl26 N R2TL84GreenCtbl27 N R2TL84GreenCtbl28 N R2TL84GreenCtbl29 N R2TL84GreenCtbl30 N R2TL84GreenCtbl31 N R2TL84GreenStbl00 N R2TL84GreenStbl01 N R2TL84GreenStbl02 N R2TL84GreenStbl03 N R2TL84GreenStbl04 N R2TL84GreenStbl05 N R2TL84GreenStbl06 N R2TL84GreenStbl07 N R2TL84GreenStbl08 N R2TL84GreenStbl09 N R2TL84GreenStbl10 N R2TL84GreenStbl11 N R2TL84GreenStbl12 N R2TL84GreenStbl13 N R2TL84GreenStbl14 N R2TL84GreenStbl15 N R2TL84GreenStbl16 N R2TL84GreenStbl17 N R2TL84GreenStbl18 N R2TL84GreenStbl19 N R2TL84GreenStbl20 N R2TL84GreenStbl21 N R2TL84GreenStbl22 N R2TL84GreenStbl23 N R2TL84GreenStbl24 N R2TL84GreenStbl25 N R2TL84GreenStbl26 N R2TL84GreenStbl27 N R2TL84GreenStbl28 N R2TL84GreenStbl29 N R2TL84GreenStbl30 N R2TL84GreenStbl31 N R2TL84Height N R2TL84Intervals N R2TL84RedCtbl00 N R2TL84RedCtbl01 N R2TL84RedCtbl02 N R2TL84RedCtbl03 N R2TL84RedCtbl04 N R2TL84RedCtbl05 N R2TL84RedCtbl06 N R2TL84RedCtbl07 N R2TL84RedCtbl08 N R2TL84RedCtbl09 N R2TL84RedCtbl10 N R2TL84RedCtbl11 N R2TL84RedCtbl12 N R2TL84RedCtbl13 N R2TL84RedCtbl14 N R2TL84RedCtbl15 N R2TL84RedCtbl16 N R2TL84RedCtbl17 N R2TL84RedCtbl18 N R2TL84RedCtbl19 N R2TL84RedCtbl20 N R2TL84RedCtbl21 N R2TL84RedCtbl22 N R2TL84RedCtbl23 N R2TL84RedCtbl24 N R2TL84RedCtbl25 N R2TL84RedCtbl26 N R2TL84RedCtbl27 N R2TL84RedCtbl28 N R2TL84RedCtbl29 N R2TL84RedCtbl30 N R2TL84RedCtbl31 N R2TL84RedStbl00 N R2TL84RedStbl01 N R2TL84RedStbl02 N R2TL84RedStbl03 N R2TL84RedStbl04 N R2TL84RedStbl05 N R2TL84RedStbl06 N R2TL84RedStbl07 N R2TL84RedStbl08 N R2TL84RedStbl09 N R2TL84RedStbl10 N R2TL84RedStbl11 N R2TL84RedStbl12 N R2TL84RedStbl13 N R2TL84RedStbl14 N R2TL84RedStbl15 N R2TL84RedStbl16 N R2TL84RedStbl17 N R2TL84RedStbl18 N R2TL84RedStbl19 N R2TL84RedStbl20 N R2TL84RedStbl21 N R2TL84RedStbl22 N R2TL84RedStbl23 N R2TL84RedStbl24 N R2TL84RedStbl25 N R2TL84RedStbl26 N R2TL84RedStbl27 N R2TL84RedStbl28 N R2TL84RedStbl29 N R2TL84RedStbl30 N R2TL84RedStbl31 N R2TL84Tbl00 N R2TL84Tbl01 N R2TL84Tbl02 N R2TL84Tbl03 N R2TL84Tbl04 N R2TL84Tbl05 N R2TL84Tbl06 N R2TL84Tbl07 N R2TL84Tbl08 N R2TL84Tbl09 N R2TL84Tbl10 N R2TL84Tbl11 N R2TL84Tbl12 N R2TL84Tbl13 N R2TL84Tbl14 N R2TL84Tbl15 N R2TL84Tbl16 N R2TL84Tbl17 N R2TL84Tbl18 N R2TL84Tbl19 N R2TL84Tbl20 N R2TL84Tbl21 N R2TL84Tbl22 N R2TL84Tbl23 N R2TL84Tbl24 N R2TL84Tbl25 N R2TL84Tbl26 N R2TL84Tbl27 N R2TL84Tbl28 N R2TL84Tbl29 N R2TL84Tbl30 N R2TL84Tbl31 N R2TL84Width N RolloffEnable N SensorFmt N SensorType N SensrFulHght N SensrFulWdth N SensrQtrHght N SensrQtrWdth N SnapshotResol N TL84ConvChrmA_M N TL84ConvChrmA_P N TL84ConvChrmB_M N TL84ConvChrmB_P N TL84ConvChrmC_M N TL84ConvChrmC_P N TL84ConvChrmD_M N TL84ConvChrmD_P N TL84ConvChrmKCb N TL84ConvChrmKCr N TL84ConvLumaK N TL84ConvLumaV0 N TL84ConvLumaV1 N TL84ConvLumaV2 N VideoFps N YhiYloConvChrmA_M N YhiYloConvChrmA_P N YhiYloConvChrmB_M N YhiYloConvChrmB_P N YhiYloConvChrmC_M N YhiYloConvChrmC_P N YhiYloConvChrmD_M N YhiYloConvChrmD_P N YhiYloConvChrmKCb N YhiYloConvChrmKCr N YhiYloConvLumaK N YhiYloConvLumaV0 N YhiYloConvLumaV1 N YhiYloConvLumaV2 N YhiYloCorC0 N YhiYloCorC1 N YhiYloCorC2 N YhiYloCorC3 N YhiYloCorC4 N YhiYloCorC5 N YhiYloCorC6 N YhiYloCorC7 N YhiYloCorC8 N YhiYloCorK0 N YhiYloCorK1 N YhiYloCorK2 N =head2 APP12 Tags =head3 APP12 PictureInfo Tags The JPEG APP12 "Picture Info" segment was used by some older cameras, and contains ASCII-based meta information. Below are some tags which have been observed Agfa and Polaroid images, however ExifTool will extract information from any tags found in this segment. Tag ID Tag Name Writable ------ -------- -------- 'Aperture' Aperture N 'ColorMode' ColorMode N 'ConTake' ConTake N 'ExpBias' ExposureCompensation N 'FNumber' FNumber N 'FWare' FirmwareVersion N 'Flash' Flash N 'FocusMode' FocusMode N 'FocusPos' FocusPos N 'ID' ID N 'ImageSize' ImageSize N 'LightS' LightS N 'Macro' Macro N 'Protect' Protect N 'Quality' Quality N 'Resolution' Resolution N 'Serial#' SerialNumber N 'Shutter' ExposureTime N 'StrobeTime' StrobeTime N 'TimeDate' DateTimeOriginal N 'Type' CameraType N 'Version' Version N 'Ytarget' YTarget N 'Zoom' Zoom N 'ZoomPos' ZoomPos N 'shtr' ExposureTime N 'ylevel' YLevel N =head3 APP12 Ducky Tags Photoshop uses the JPEG APP12 "Ducky" segment to store some information in "Save for Web" images. Tag ID Tag Name Writable ------ -------- -------- 0x0001 Quality int32u/ 0x0002 Comment string/ 0x0003 Copyright string/ =head2 AFCP Tags AFCP stands for AXS File Concatenation Protocol, and is a poorly designed protocol for appending information to the end of files. This can be used as an auxiliary technique to store IPTC information in images, but is incompatible with some file formats. ExifTool will read and write (but not create) AFCP IPTC information in JPEG and TIFF images. See L<http://web.archive.org/web/20080828211305/http://www.tocarte.com/media/axs_afcp_spec.pdf> for the AFCP specification. Tag ID Tag Name Writable ------ -------- -------- 'IPTC' IPTC IPTC 'Nail' ThumbnailImage N 'PrVw' PreviewImage N 'TEXT' Text N =head2 DarwinCore Tags Tags defined in the Darwin Core (dwc) XMP namespace. See L<http://rs.tdwg.org/dwc/index.htm> for the official specification. Tag Name Writable -------- -------- DCTermsLocation DarwinCore DCTermsLocation Struct DCContinent string_ DCCoordinatePrecision string_ DCCoordinateUncertaintyInMeters string_ DCCountry string_ DCCountryCode string_ DCCounty string_ DCDecimalLatitude string_ DCDecimalLongitude string_ DCFootprintSpatialFit string_ DCFootprintSRS string_ DCFootprintWKT string_ DCGeodeticDatum string_ DCGeoreferencedBy string_ DCGeoreferencedDate string_ DCGeoreferenceProtocol string_ DCGeoreferenceRemarks string_ DCGeoreferenceSources string_ DCGeoreferenceVerificationStatus string_ DCHigherGeography string_ DCHigherGeographyID string_ DCIsland string_ DCIslandGroup string_ DCLocality string_ DCLocationAccordingTo string_ DCLocationID string_ DCLocationRemarks string_ DCMaximumDepthInMeters string_ DCMaximumDistanceAboveSurfaceInMeters string_ DCMaximumElevationInMeters string_ DCMinimumDepthInMeters string_ DCMinimumDistanceAboveSurfaceInMeters string_ DCMinimumElevationInMeters string_ DCMunicipality string_ DCPointRadiusSpatialFit string_ DCStateProvince string_ DCVerbatimCoordinates string_ DCVerbatimCoordinateSystem string_ DCVerbatimDepth string_ DCVerbatimElevation string_ DCVerbatimLatitude string_ DCVerbatimLocality string_ DCVerbatimLongitude string_ DCVerbatimSRS string_ DCWaterBody string_ DCEvent DarwinCore Event Struct EventDay integer_ EventEarliestDate date_ EventEndDayOfYear integer_ EventID string_ EventRemarks lang-alt_ EventTime date_ EventFieldNotes string_ EventFieldNumber string_ EventHabitat string_ EventLatestDate date_ EventMonth integer_ EventSamplingEffort string_ EventSamplingProtocol string_ EventStartDayOfYear integer_ EventVerbatimEventDate string_ EventYear integer_ GeologicalContext DarwinCore GeologicalContext Struct GeologicalContextBed string_ EarliestAgeOrLowestStage string_ EarliestEonOrLowestEonothem string_ EarliestEpochOrLowestSeries string_ EarliestEraOrLowestErathem string_ EarliestPeriodOrLowestSystem string_ GeologicalContextFormation string_ GeologicalContextID string_ GeologicalContextGroup string_ HighestBiostratigraphicZone string_ LatestAgeOrHighestStage string_ LatestEonOrHighestEonothem string_ LatestEpochOrHighestSeries string_ LatestEraOrHighestErathem string_ LatestPeriodOrHighestSystem string_ LithostratigraphicTerms string_ LowestBiostratigraphicZone string_ GeologicalContextMember string_ Identification DarwinCore Identification Struct DateIdentified date_ IdentificationID string_ IdentificationQualifier string_ IdentificationReferences string_ IdentificationRemarks string_ IdentificationVerificationStatus string_ IdentifiedBy string_ TypeStatus string_ MeasurementOrFact DarwinCore MeasurementOrFact Struct MeasurementAccuracy string_ MeasurementDeterminedBy string_ MeasurementDeterminedDate date_ MeasurementID string_ MeasurementMethod string_ MeasurementRemarks string_ MeasurementType string_ MeasurementUnit string_ MeasurementValue string_ Occurrence DarwinCore Occurrence Struct OccurrenceAssociatedMedia string_ OccurrenceAssociatedOccurrences string_ OccurrenceAssociatedReferences string_ OccurrenceAssociatedSequences string_ OccurrenceAssociatedTaxa string_ OccurrenceBehavior string_ OccurrenceCatalogNumber string_ OccurrenceDisposition string_ OccurrenceEstablishmentMeans string_ OccurrenceIndividualCount string_ OccurrenceIndividualID string_ OccurrenceLifeStage string_ OccurrenceDetails string_ OccurrenceID string_ OccurrenceRemarks string_ OccurrenceStatus string_ OccurrenceOtherCatalogNumbers string_ OccurrencePreparations string_ OccurrencePreviousIdentifications string_ OccurrenceRecordedBy string_ OccurrenceRecordNumber string_ OccurrenceReproductiveCondition string_ OccurrenceSex string_ Record DarwinCore Record Struct RecordBasisOfRecord string_ RecordCollectionCode string_ RecordCollectionID string_ RecordDataGeneralizations string_ RecordDatasetID string_ RecordDatasetName string_ RecordDynamicProperties string_ RecordInformationWithheld string_ RecordInstitutionCode string_ RecordInstitutionID string_ RecordOwnerInstitutionCode string_ ResourceRelationship DarwinCore ResourceRelationship Struct RelatedResourceID string_ RelationshipAccordingTo string_ RelationshipEstablishedDate date_ RelationshipOfResource string_ RelationshipRemarks string_ ResourceID string_ ResourceRelationshipID string_ Taxon DarwinCore Taxon Struct TaxonAcceptedNameUsage string_ TaxonAcceptedNameUsageID string_ TaxonClass string_ TaxonFamily string_ TaxonGenus string_ TaxonHigherClassification string_ TaxonInfraspecificEpithet string_ TaxonKingdom string_ TaxonNameAccordingTo string_ TaxonNameAccordingToID string_ TaxonNamePublishedIn string_ TaxonNamePublishedInID string_ TaxonNamePublishedInYear string_ TaxonNomenclaturalCode string_ TaxonNomenclaturalStatus string_ TaxonOrder string_ TaxonOriginalNameUsage string_ TaxonOriginalNameUsageID string_ TaxonParentNameUsage string_ TaxonParentNameUsageID string_ TaxonPhylum string_ TaxonScientificName string_ TaxonScientificNameAuthorship string_ TaxonScientificNameID string_ TaxonSpecificEpithet string_ TaxonSubgenus string_ TaxonConceptID string_ TaxonID string_ TaxonTaxonomicStatus string_ TaxonRank string_ TaxonRemarks string_ TaxonVerbatimTaxonRank string_ TaxonVernacularName lang-alt_ =head3 DarwinCore DCTermsLocation Struct Field Name Writable ---------- -------- Continent string CoordinatePrecision string CoordinateUncertaintyInMeters string Country string CountryCode string County string DecimalLatitude string DecimalLongitude string FootprintSRS string FootprintSpatialFit string FootprintWKT string GeodeticDatum string GeoreferenceProtocol string GeoreferenceRemarks string GeoreferenceSources string GeoreferenceVerificationStatus string GeoreferencedBy string GeoreferencedDate string HigherGeography string HigherGeographyID string Island string IslandGroup string Locality string LocationAccordingTo string LocationID string LocationRemarks string MaximumDepthInMeters string MaximumDistanceAboveSurfaceInMeters string MaximumElevationInMeters string MinimumDepthInMeters string MinimumDistanceAboveSurfaceInMeters string MinimumElevationInMeters string Municipality string PointRadiusSpatialFit string StateProvince string VerbatimCoordinateSystem string VerbatimCoordinates string VerbatimDepth string VerbatimElevation string VerbatimLatitude string VerbatimLocality string VerbatimLongitude string VerbatimSRS string WaterBody string =head3 DarwinCore Event Struct Field Name Writable ---------- -------- Day integer EarliestDate date EndDayOfYear integer EventID string EventRemarks lang-alt EventTime date FieldNotes string FieldNumber string Habitat string LatestDate date Month integer SamplingEffort string SamplingProtocol string StartDayOfYear integer VerbatimEventDate string Year integer =head3 DarwinCore GeologicalContext Struct Field Name Writable ---------- -------- Bed string EarliestAgeOrLowestStage string EarliestEonOrLowestEonothem string EarliestEpochOrLowestSeries string EarliestEraOrLowestErathem string EarliestPeriodOrLowestSystem string Formation string GeologicalContextID string Group string HighestBiostratigraphicZone string LatestAgeOrHighestStage string LatestEonOrHighestEonothem string LatestEpochOrHighestSeries string LatestEraOrHighestErathem string LatestPeriodOrHighestSystem string LithostratigraphicTerms string LowestBiostratigraphicZone string Member string =head3 DarwinCore Identification Struct Field Name Writable ---------- -------- DateIdentified date IdentificationID string IdentificationQualifier string IdentificationReferences string IdentificationRemarks string IdentificationVerificationStatus string IdentifiedBy string TypeStatus string =head3 DarwinCore MeasurementOrFact Struct Field Name Writable ---------- -------- MeasurementAccuracy string MeasurementDeterminedBy string MeasurementDeterminedDate date MeasurementID string MeasurementMethod string MeasurementRemarks string MeasurementType string MeasurementUnit string MeasurementValue string =head3 DarwinCore Occurrence Struct Field Name Writable ---------- -------- AssociatedMedia string AssociatedOccurrences string AssociatedReferences string AssociatedSequences string AssociatedTaxa string Behavior string CatalogNumber string Disposition string EstablishmentMeans string IndividualCount string IndividualID string LifeStage string OccurrenceDetails string OccurrenceID string OccurrenceRemarks string OccurrenceStatus string OtherCatalogNumbers string Preparations string PreviousIdentifications string RecordNumber string RecordedBy string ReproductiveCondition string Sex string =head3 DarwinCore Record Struct Field Name Writable ---------- -------- BasisOfRecord string CollectionCode string CollectionID string DataGeneralizations string DatasetID string DatasetName string DynamicProperties string InformationWithheld string InstitutionCode string InstitutionID string OwnerInstitutionCode string =head3 DarwinCore ResourceRelationship Struct Field Name Writable ---------- -------- RelatedResourceID string RelationshipAccordingTo string RelationshipEstablishedDate date RelationshipOfResource string RelationshipRemarks string ResourceID string ResourceRelationshipID string =head3 DarwinCore Taxon Struct Field Name Writable ---------- -------- AcceptedNameUsage string AcceptedNameUsageID string Class string Family string Genus string HigherClassification string InfraspecificEpithet string Kingdom string NameAccordingTo string NameAccordingToID string NamePublishedIn string NamePublishedInID string NamePublishedInYear string NomenclaturalCode string NomenclaturalStatus string Order string OriginalNameUsage string OriginalNameUsageID string ParentNameUsage string ParentNameUsageID string Phylum string ScientificName string ScientificNameAuthorship string ScientificNameID string SpecificEpithet string Subgenus string TaxonConceptID string TaxonID string TaxonRank string TaxonRemarks string TaxonomicStatus string VerbatimTaxonRank string VernacularName lang-alt =head2 FotoStation Tags The following tables define information found in the FotoWare FotoStation trailer. Tag ID Tag Name Writable ------ -------- -------- 0x0001 IPTC IPTC 0x0002 SoftEdit FotoStation SoftEdit 0x0003 ThumbnailImage Y 0x0004 PreviewImage Y =head3 FotoStation SoftEdit Tags Index4 Tag Name Writable ------ -------- -------- 0 OriginalImageWidth int32s 1 OriginalImageHeight int32s 2 ColorPlanes int32s 3 XYResolution int32s 4 Rotation int32s 6 CropLeft int32s 7 CropTop int32s 8 CropRight int32s 9 CropBottom int32s 11 CropRotation int32s =head2 PhotoMechanic Tags The Photo Mechanic trailer contains data in an IPTC-format structure, with soft edit information stored under record number 2. Record Tag Name Writable ------ -------- -------- 2 SoftEdit PhotoMechanic SoftEdit =head3 PhotoMechanic SoftEdit Tags Tag ID Tag Name Writable ------ -------- -------- 209 RawCropLeft int32s 210 RawCropTop int32s 211 RawCropRight int32s 212 RawCropBottom int32s 213 ConstrainedCropWidth int32s 214 ConstrainedCropHeight int32s 215 FrameNum int32s 216 Rotation int32s 217 CropLeft int32s 218 CropTop int32s 219 CropRight int32s 220 CropBottom int32s 221 Tagged int32s 222 ColorClass int32s 223 Rating int32s 236 PreviewCropLeft int32s 237 PreviewCropTop int32s 238 PreviewCropRight int32s 239 PreviewCropBottom int32s =head3 PhotoMechanic XMP Tags Below is a list of the observed PhotoMechanic XMP tags. The actual namespace prefix is "photomechanic" but ExifTool shortens this in the "XMP-photomech" family 1 group name. Tag Name Writable -------- -------- ColorClass integer CountryCode string/ EditStatus string PMVersion string Prefs string Tagged boolean TimeCreated string/ =head2 Microsoft Tags =head3 Microsoft XMP Tags Microsoft Photo 1.0 schema XMP tags. This is likely not a complete list, but represents tags which have been observed in sample images. The actual namespace prefix is "MicrosoftPhoto", but ExifTool shortens this to "XMP-microsoft" in the family 1 group name. Tag Name Writable -------- -------- CameraSerialNumber string CreatorAppID string CreatorOpenWithUIOptions string DateAcquired date FlashManufacturer string FlashModel string LastKeywordIPTC string+ LastKeywordXMP string+ LensManufacturer string LensModel string/ RatingPercent string =head3 Microsoft MP1 Tags Microsoft Photo 1.1 schema XMP tags which have been observed. Tag Name Writable -------- -------- Brightness string/ CameraModelID string/ Contrast string/ ExposureCompensation string/ PanoramicStitchCameraMotion string PanoramicStitchMapType string PanoramicStitchPhi0 real PanoramicStitchPhi1 real PanoramicStitchTheta0 real PanoramicStitchTheta1 real PipelineVersion string StreamType string WhiteBalance0 real WhiteBalance1 real WhiteBalance2 real =head3 Microsoft MP Tags Microsoft Photo 1.2 schema XMP tags which have been observed. Tag Name Writable -------- -------- RegionInfoDateRegionsValid date_ RegionInfoMP Microsoft RegionInfo Struct RegionInfoRegions Microsoft Regions Struct_+ RegionPersonDisplayName string_+ RegionPersonEmailDigest string_+ RegionPersonLiveIdCID string_+ RegionPersonSourceID string_+ RegionRectangle string_+ =head3 Microsoft RegionInfo Struct Field Name Writable ---------- -------- DateRegionsValid date Regions Microsoft Regions Struct+ =head3 Microsoft Regions Struct Note that PersonLiveIdCID element is called PersonLiveCID according to the Microsoft specification, but in practice their software actually writes PersonLiveIdCID, so ExifTool uses this too. Field Name Writable ---------- -------- PersonDisplayName string PersonEmailDigest string PersonLiveIdCID string PersonSourceID string Rectangle string =head3 Microsoft Stitch Tags Information found in the Microsoft custom EXIF tag 0x4748, as written by Windows Live Photo Gallery. Index4 Tag Name Writable ------ -------- -------- 0 PanoramicStitchVersion int32u 1 PanoramicStitchCameraMotion int32u 2 PanoramicStitchMapType int32u 3 PanoramicStitchTheta0 float 4 PanoramicStitchTheta1 float 5 PanoramicStitchPhi0 float 6 PanoramicStitchPhi1 float =head3 Microsoft Xtra Tags Tags extracted from the Microsoft "Xtra" atom of QuickTime videos. Tag ID's are not shown because some are unruly GUID's. Tag Name Writable -------- -------- Abstract N AccountName N AcquisitionTime N AcquisitionTimeDay N AcquisitionTimeMonth N AcquisitionTimeYear N AcquisitionTimeYearMonth N AcquisitionTimeYearMonthDay N AlbumArtist N AlbumArtist N AlbumArtistSortOrder N AlbumCoverURL N AlbumID N AlbumIDAlbumArtist N AlbumTitle N AlbumTitle N AlbumTitleSortOrder N AlternateSourceURL N Anniversary N Artist N AssistantsName N AssistantsPhone N Attachments N Attributes N AudioBitrate N AudioFormat N AudioSampleRate N AudioSampleSize N Author N Author N AuthorSortOrder N AutoSummary N AverageLevel N BccAddresses N BccNames N Beats-per-minute N BeatsPerMinute N BillingInformation N Birthday N BitDepth N Bitrate N Bitrate N BroadcastDate N BusinessAddress N BusinessCity N BusinessCountry-Region N BusinessFax N BusinessHomePage N BusinessPOBox N BusinessPhone N BusinessPostalCode N BusinessStateOrProvince N BusinessStreet N BuyNow N BuyTickets N CDTrackEnabled N CallLetters N CallbackNumber N CameraMaker N CameraManufacturer N CameraModel N CameraModel N CarPhone N Category N Category N CcAddresses N CcNames N CellPhone N ChannelNumber N Channels N Channels N ChapterNum N Children N City N ClientID N ClosedCaptioning N Color N Comment N Comments N Company N CompanyMainPhone N Complete N Composer N Composers N Computer N Conductor N Conductors N ContactNames N ContentDistributor N ContentDistributorDuration N ContentDistributorType N ContentGroupDescription N ContentType N Contributors N ConversationID N Copyright N Copyright N Count N Country-Region N Creator N CurrentBitrate N DLNAServerUDN N DLNASourceURI N DRMIndividualizedVersion N DRMKeyID N DTCPIPHost N DTCPIPPort N DVDID N DataRate N Date N DateAccessed N DateAcquired N DateArchived N DateCompleted N DateCreated N DateImported N DateLastSaved N DateModified N DatePictureTaken N DateReceived N DateReleased N DateSent N DateVisited N Department N Description N Description N Description N Dimensions N Director N Directors N DisplayArtist N Division N DocumentID N DueDate N Duration N Duration N Duration N E-mail2 N E-mail3 N E-mailAddress N E-mailDisplayName N E-mailList N EncodedBy N EncodingTime N EndDate N EntryType N EpisodeName N Event N Event N ExifVersion N ExposureBias N ExposureProgram N ExposureTime N F-stop N FileAs N FileCount N FileSize N FileType N FileVersion N FirstName N FlagColor N FlagStatus N FlashMode N FocalLength N FocalLength35mm N Folder N FolderName N FolderPath N FormatTag N FourCC N FrameHeight N FrameRate N FrameRate N FrameWidth N Free-busyStatus N Frequency N FromAddresses N FromNames N FullName N Gender N Genre N Genre N GenreID N GivenName N HasAttachments N HasFlag N Hobbies N HomeAddress N HomeCity N HomeCountry-Region N HomeFax N HomePOBox N HomePhone N HomePostalCode N HomeStateOrProvince N HomeStreet N HorizontalResolution N IMAddresses N ISOSpeed N Importance N Incomplete N InitialKey N InitialKey N Initials N IsAttachment N IsCompleted N IsDeleted N IsNetworkFeed N IsOnline N IsProtected N IsRecurring N IsVBR N JobTitle N Keywords N Kinds N Label N Language N Language N LastName N LastPrinted N LeadPerformer N LegalTrademarks N LensMaker N LensModel N LibraryID N LibraryName N LightSource N LinkStatus N LinkTarget N Location N Location N Lyrics N MCDI N MailingAddress N MaxAperture N MediaClassPrimaryID N MediaClassSecondaryID N MediaContentTypes N MediaCreated N MediaOriginalBroadcastDateTime N MediaOriginalChannel N MediaStationName N MediaType N MeteringMode N MiddleName N Mileage N ModifiedBy N Mood N Mood N MoreInfo N Name N Nickname N OfficeLocation N OfflineAvailability N OfflineStatus N OptionalAttendeeAddresses N OptionalAttendees N OrganizerAddress N OrganizerName N Orientation N OriginalAlbumTitle N OriginalArtist N OriginalLyricist N OtherAddress N OtherCity N OtherCountry-Region N OtherPOBox N OtherPostalCode N OtherStateOrProvince N OtherStreet N Owner N POBox N Pager N Pages N ParentalRating N ParentalRating N ParentalRatingReason N PartOfSet N PartOfSet N PartOfSet N Participants N Path N PeakValue N PerceivedType N Period N Period N PersonalTitle N PixelAspectRatioX N PixelAspectRatioY N PlaylistIndex N PostalCode N PrimaryE-mail N PrimaryPhone N Priority N Producer N Producers N ProductName N ProductVersion N Profession N ProgramDescription N ProgramMode N ProgramName N Project N Protected N ProtectionType N Provider N Provider N ProviderLogoURL N ProviderRating N ProviderStyle N ProviderURL N Publisher N Publisher N RadioBand N RadioFormat N Rating N RatingOrg N ReadStatus N RecordingTime N RecordingTime N RecordingTimeDay N RecordingTimeMonth N RecordingTimeYear N RecordingTimeYearMonth N RecordingTimeYearMonthDay N ReleaseDate N ReleaseDateDay N ReleaseDateMonth N ReleaseDateYear N ReleaseDateYearMonth N ReleaseDateYearMonthDay N ReminderTime N RequestState N RequiredAttendeeAddresses N RequiredAttendees N Rerun N Resources N SAP N Saturation N SearchRanking N SenderAddress N SenderName N Sensitivity N ShadowFilePath N Shared N SharedUserRating N SharedWith N Size N Slides N Source N SourceURL N SpaceFree N SpaceUsed N Spouse N StartDate N StateOrProvince N StationCallSign N StationName N Status N Status N Store N Street N Subject N Subject N SubjectDistance N SubscriptionContentID N Subtitle N Subtitle N SubtitleDescription N Suffix N Summary N Sync01 N Sync02 N Sync03 N Sync04 N Sync05 N Sync06 N Sync07 N Sync08 N Sync09 N Sync10 N Sync11 N Sync12 N Sync13 N Sync14 N Sync15 N Sync16 N SyncOnly N SyncState N TTY-TTDPhone N TaskOwner N Telex N Temporary N Title N Title N TitleNum N TitleSortOrder N ToAddresses N ToDoTitle N ToNames N TotalBitrate N TotalDuration N TotalEditingTime N TotalFileSize N TotalSize N TrackNumber N TrackNumber N TrackingID N Type N Type N URL N UniqueFileIdentifier N Untitled0 N Untitled1 N Untitled2 N UserCustom1 N UserCustom2 N UserEffectiveRating N UserLastPlayedTime N UserPlayCount N UserPlaycountAfternoon N UserPlaycountEvening N UserPlaycountMorning N UserPlaycountNight N UserPlaycountWeekday N UserPlaycountWeekend N UserRating N UserServiceRating N UserWebURL N VerticalResolution N VideoBitrate N VideoCompression N VideoFormat N VideoFrameRate N VideoHeight N VideoWidth N WMCollectionGroupID N WMCollectionID N WMContentID N WMShadowFileSourceDRMType N WMShadowFileSourceFileType N Webpage N WhiteBalance N WindowsFileName N WordCount N Writer N Writers N Year N Year N =head2 GIMP Tags The GNU Image Manipulation Program (GIMP) writes these tags in its native XCF (eXperimental Computing Facilty) images. Tag ID Tag Name Writable ------ -------- -------- 'header' Header GIMP Header 0x0011 Compression N 0x0013 Resolution GIMP Resolution 0x0015 Parasites GIMP Parasite =head3 GIMP Header Tags Index1 Tag Name Writable ------ -------- -------- 9 XCFVersion N 14 ImageWidth N 18 ImageHeight N 22 ColorMode N =head3 GIMP Resolution Tags Index4 Tag Name Writable ------ -------- -------- 0 XResolution N 1 YResolution N =head3 GIMP Parasite Tags Tag ID Tag Name Writable ------ -------- -------- 'exif-data' ExifData EXIF 'gimp-comment' Comment N 'gimp-metadata' XMP XMP 'icc-profile' ICC_Profile ICC_Profile 'icc-profile-name' ICCProfileName N 'iptc-data' IPTCData IPTC 'jpeg-exif-data' JPEGExifData EXIF =head2 MIE Tags MIE is a flexible format which may be used as a stand-alone meta information format, for encapsulation of other files and information, or as a trailer appended to other file formats. The tables below represent currently defined MIE tags, however ExifTool will also extract any other information present in a MIE file. When writing MIE information, some special features are supported: 1) String values may be written as ASCII (ISO 8859-1) or UTF-8. ExifTool automatically detects the presence of wide characters and treats the string appropriately. Internally, UTF-8 text may be converted to UTF-16 or UTF-32 and stored in this format in the file if it is more compact. 2) All MIE string-value tags support localized text. Localized values are written by adding a language/country code to the tag name in the form C<TAG-xx_YY>, where C<TAG> is the tag name, C<xx> is a 2-character lower case ISO 639-1 language code, and C<YY> is a 2-character upper case ISO 3166-1 alpha 2 country code (eg. C<Title-en_US>). But as usual, the user interface is case-insensitive, and ExifTool will write the correct case to the file. 3) Some numerical MIE tags allow units of measurement to be specified. For these tags, units may be added in brackets immediately following the value (eg. C<55(mi/h)>). If no units are specified, the default units are written. See L<http://owl.phy.queensu.ca/~phil/exiftool/MIE1.1-20070121.pdf> for the official MIE specification. Tag ID Tag Name Writable ------ -------- -------- '0Type' SubfileType string '0Vers' MIEVersion string '1Directory' SubfileDirectory string '1Name' SubfileName string '2MIME' SubfileMIMEType string 'Meta' Meta MIE Meta 'data' SubfileData undef 'rsrc' SubfileResource undef 'zmd5' MD5Digest string 'zmie' TrailerSignature undef =head3 MIE Meta Tags Tag ID Tag Name Writable ------ -------- -------- 'Audio' Audio MIE Audio 'Camera' Camera MIE Camera 'Document' Document MIE Doc 'EXIF' EXIF EXIF 'Geo' Geo MIE Geo 'ICCProfile' ICC_Profile ICC_Profile 'ID3' ID3 ID3 'IPTC' IPTC IPTC 'Image' Image MIE Image 'MakerNotes' MakerNotes MIE MakerNotes 'Preview' Preview MIE Preview 'Thumbnail' Thumbnail MIE Thumbnail 'Video' Video MIE Video 'XMP' XMP XMP =head3 MIE Audio Tags For the Audio group (and any other group containing a 'data' element), tags refer to the contained data if present, otherwise they refer to the main SubfileData. The C<0Type> and C<1Name> elements should exist only if C<data> is present. Tag ID Tag Name Writable ------ -------- -------- '0Type' RelatedAudioFileType string '1Name' RelatedAudioFileName string 'Channels' Channels int8u 'Compression' AudioCompression string 'Duration' Duration rational64u~ 'SampleBits' SampleBits int16u 'SampleRate' SampleRate int32u 'data' RelatedAudioFile undef =head3 MIE Camera Tags Tag ID Tag Name Writable ------ -------- -------- 'Brightness' Brightness int8s 'ColorBalance' ColorBalance rational64u[3] 'ColorTemperature' ColorTemperature int32u 'Contrast' Contrast int8s 'DigitalZoom' DigitalZoom rational64u 'ExposureComp' ExposureCompensation rational64s 'ExposureMode' ExposureMode string 'ExposureTime' ExposureTime rational64u 'FirmwareVersion' FirmwareVersion string 'Flash' Flash MIE Flash 'FocusMode' FocusMode string 'ISO' ISO int16u 'ISOSetting' ISOSetting int16u 'ImageNumber' ImageNumber int32u 'ImageQuality' ImageQuality string 'ImageStabilization' ImageStabilization int8u 'Lens' Lens MIE Lens 'Make' Make string 'MeasuredEV' MeasuredEV rational64s 'Model' Model string 'Orientation' Orientation MIE Orient 'OwnerName' OwnerName string 'Saturation' Saturation int8s 'SensorSize' SensorSize rational64u[2] 'SerialNumber' SerialNumber string 'Sharpness' Sharpness int8s 'ShootingMode' ShootingMode string =head3 MIE Flash Tags Tag ID Tag Name Writable ------ -------- -------- 'ExposureComp' FlashExposureComp rational64s 'Fired' FlashFired int8u 'GuideNumber' FlashGuideNumber string 'Make' FlashMake string 'Mode' FlashMode string 'Model' FlashModel string 'SerialNumber' FlashSerialNumber string 'Type' FlashType string =head3 MIE Lens Tags All recorded lens parameters (focal length, aperture, etc) include the effects of the extender if present. Tag ID Tag Name Writable ------ -------- -------- 'Extender' Extender MIE Extender 'FNumber' FNumber rational64u 'FocalLength' FocalLength rational64u 'FocusDistance' FocusDistance rational64u 'Make' LensMake string 'MaxAperture' MaxAperture rational64u 'MaxApertureAtMaxFocal' MaxApertureAtMaxFocal rational64u 'MaxFocalLength' MaxFocalLength rational64u 'MinAperture' MinAperture rational64u 'MinFocalLength' MinFocalLength rational64u 'Model' LensModel string 'OpticalZoom' OpticalZoom rational64u 'SerialNumber' LensSerialNumber string =head3 MIE Extender Tags Tag ID Tag Name Writable ------ -------- -------- 'Magnification' ExtenderMagnification rational64s 'Make' ExtenderMake string 'Model' ExtenderModel string 'SerialNumber' ExtenderSerialNumber string =head3 MIE Orient Tags These tags describe the camera orientation. Tag ID Tag Name Writable ------ -------- -------- 'Azimuth' Azimuth rational64s 'Declination' Declination rational64s 'Elevation' Elevation rational64s 'RightAscension' RightAscension rational64s 'Rotation' Rotation rational64s =head3 MIE Doc Tags Information describing the main document, image or file. Tag ID Tag Name Writable ------ -------- -------- 'Author' Author string 'Comment' Comment string 'Contributors' Contributors string+ 'Copyright' Copyright string 'CreateDate' CreateDate string 'EMail' Email string 'Keywords' Keywords string+ 'ModifyDate' ModifyDate string 'OriginalDate' DateTimeOriginal string 'Phone' PhoneNumber string 'References' References string+ 'Software' Software string 'Title' Title string 'URL' URL string =head3 MIE Geo Tags Information related to geographic location. Tag ID Tag Name Writable ------ -------- -------- 'Address' Address string 'City' City string 'Country' Country string 'GPS' GPS MIE GPS 'PostalCode' PostalCode string 'State' State string 'UTM' UTM MIE UTM =head3 MIE GPS Tags Tag ID Tag Name Writable ------ -------- -------- 'Altitude' GPSAltitude rational64s 'Bearing' GPSDestBearing rational64s 'DateTime' GPSDateTime string 'Datum' GPSMapDatum string 'Differential' GPSDifferential int8u 'Distance' GPSDestDistance rational64s 'Heading' GPSTrack rational64s 'Latitude' GPSLatitude rational64s[n] 'Longitude' GPSLongitude rational64s[n] 'MeasureMode' GPSMeasureMode int8u 'Satellites' GPSSatellites string 'Speed' GPSSpeed rational64s =head3 MIE UTM Tags Tag ID Tag Name Writable ------ -------- -------- 'Datum' UTMMapDatum string 'Easting' UTMEasting string 'Northing' UTMNorthing string 'Zone' UTMZone int8s =head3 MIE Image Tags Tag ID Tag Name Writable ------ -------- -------- '0Type' FullSizeImageType string '1Name' FullSizeImageName string 'BitDepth' BitDepth int16u 'ColorSpace' ColorSpace string 'Components' ComponentsConfiguration string 'Compression' CompressionRatio rational32u 'ImageSize' ImageSize int16u[n] 'Resolution' Resolution rational64u[n] 'data' FullSizeImage undef =head3 MIE MakerNotes Tags MIE maker notes are contained within separate groups for each manufacturer to avoid name conflicts. Tag ID Tag Name Writable ------ -------- -------- 'Canon' Canon MIE Canon 'Casio' Casio MIE Unknown 'FujiFilm' FujiFilm MIE Unknown 'Kodak' Kodak MIE Unknown 'KonicaMinolta' KonicaMinolta MIE Unknown 'Nikon' Nikon MIE Unknown 'Olympus' Olympus MIE Unknown 'Panasonic' Panasonic MIE Unknown 'Pentax' Pentax MIE Unknown 'Ricoh' Ricoh MIE Unknown 'Sigma' Sigma MIE Unknown 'Sony' Sony MIE Unknown =head3 MIE Canon Tags Tag ID Tag Name Writable ------ -------- -------- 'VRD' CanonVRD CanonVRD =head3 MIE Unknown Tags Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head3 MIE Preview Tags Tag ID Tag Name Writable ------ -------- -------- '0Type' PreviewImageType string '1Name' PreviewImageName string 'ImageSize' PreviewImageSize int16u[n] 'data' PreviewImage undef =head3 MIE Thumbnail Tags Tag ID Tag Name Writable ------ -------- -------- '0Type' ThumbnailImageType string '1Name' ThumbnailImageName string 'ImageSize' ThumbnailImageSize int16u[n] 'data' ThumbnailImage undef =head3 MIE Video Tags Tag ID Tag Name Writable ------ -------- -------- '0Type' RelatedVideoFileType string '1Name' RelatedVideoFileName string 'Codec' Codec string 'Duration' Duration rational64u~ 'data' RelatedVideoFile undef =head2 Jpeg2000 Tags The tags below are extracted from JPEG 2000 images, however ExifTool currently writes only EXIF, IPTC and XMP tags in these images. Tag ID Tag Name Writable ------ -------- -------- 'asoc' Association N 'bfil' BinaryFilter N 'bpcc' BitsPerComponent N 'cdef' ComponentDefinition N 'cgrp' ColorGroup N 'chck' DigitalSignature N 'cmap' ComponentMapping N 'colr' ColorSpecification Jpeg2000 ColorSpec 'comp' Composition N 'copt' CompositionOptions N 'cref' Cross-Reference N 'creg' CodestreamRegistration N 'drep' DesiredReproductions N 'dtbl' DataReference N 'flst' FragmentList N 'free' Free N 'ftbl' FragmentTable N 'ftyp' FileType Jpeg2000 FileType 'gtso' GraphicsTechnologyStandardOutput N 'ihdr' ImageHeader Jpeg2000 ImageHeader 'inst' InstructionSet N 'jP ' JP2Signature N 'jp2c' ContiguousCodestream N 'jp2h' JP2Header Jpeg2000 'jp2i' IntellectualProperty XMP 'jpch' CodestreamHeader Jpeg2000 'jplh' CompositingLayerHeader Jpeg2000 'lbl ' Label N 'mdat' MediaData N 'mp7b' MPEG7Binary N 'nlst' NumberList N 'opct' Opacity N 'pclr' Palette N 'prfl' Profile N 'res ' Resolution Jpeg2000 'resc' CaptureResolution Jpeg2000 CaptureResolution 'resd' DisplayResolution Jpeg2000 DisplayResolution 'roid' ROIDescription N 'rreq' ReaderRequirements N 'uinf' UUIDInfo Jpeg2000 'ulst' UUIDList N 'url ' URL N 'uuid' UUID-EXIF EXIF UUID-EXIF2 EXIF UUID-IPTC IPTC UUID-IPTC2 IPTC UUID-XMP XMP UUID-GeoJP2 EXIF UUID-Photoshop Photoshop UUID-Unknown N 'xml ' XML XMP =head3 Jpeg2000 ColorSpec Tags Index1 Tag Name Writable ------ -------- -------- 0 ColorSpecMethod N 1 ColorSpecPrecedence N 2 ColorSpecApproximation N 3 ICC_Profile ICC_Profile ColorSpace N ColorSpecData N =head3 Jpeg2000 FileType Tags Index4 Tag Name Writable ------ -------- -------- 0 MajorBrand N 1 MinorVersion N 2 CompatibleBrands N =head3 Jpeg2000 ImageHeader Tags Index1 Tag Name Writable ------ -------- -------- 0 ImageHeight N 4 ImageWidth N 8 NumberOfComponents N 10 BitsPerComponent N 11 Compression N =head3 Jpeg2000 CaptureResolution Tags Index1 Tag Name Writable ------ -------- -------- 0 CaptureYResolution N 4 CaptureXResolution N 8 CaptureYResolutionUnit N 9 CaptureXResolutionUnit N =head3 Jpeg2000 DisplayResolution Tags Index1 Tag Name Writable ------ -------- -------- 0 DisplayYResolution N 4 DisplayXResolution N 8 DisplayYResolutionUnit N 9 DisplayXResolutionUnit N =head2 GIF Tags This table lists information extracted from GIF images. See L<http://www.w3.org/Graphics/GIF/spec-gif89a.txt> for the official GIF89a specification. Tag Name Writable -------- -------- Comment Y Duration N ExtensionAnimation GIF Animate ExtensionICC ICC_Profile ExtensionXMP XMP FrameCount N GIFVersion N ScreenDescriptor GIF Screen Text N =head3 GIF Animate Tags Information extracted from the "NETSCAPE2.0" animation extension. Index1 Tag Name Writable ------ -------- -------- 2 AnimationIterations N =head3 GIF Screen Tags Information extracted from the GIF logical screen descriptor. Index1 Tag Name Writable ------ -------- -------- 0 ImageWidth N 2 ImageHeight N 4.1 HasColorMap N 4.2 ColorResolutionDepth N 4.3 BitsPerPixel N 5 BackgroundColor N =head2 BMP Tags There really isn't much meta information in a BMP file as such, just a bit of image related information. Index1 Tag Name Writable ------ -------- -------- 4 ImageWidth N 8 ImageHeight N 12 Planes N 14 BitDepth N 16 Compression N 20 ImageLength N 24 PixelsPerMeterX N 28 PixelsPerMeterY N 32 NumColors N 36 NumImportantColors N =head3 BMP OS2 Tags Information extracted from OS/2-format BMP images. Index1 Tag Name Writable ------ -------- -------- 4 ImageWidth N 6 ImageHeight N 8 Planes N 10 BitDepth N =head2 PICT Tags The PICT format contains no true meta information, except for the possible exception of the LongComment opcode. By default, only ImageWidth, ImageHeight and X/YResolution are extracted from a PICT image. Tags in the following table represent image opcodes. Extraction of these tags is experimental, and is only enabled with the Verbose or Unknown options. Tag ID Tag Name Writable ------ -------- -------- 0x0000 Nop N 0x0001 ClipRgn N 0x0002 BkPat N 0x0003 TxFont N 0x0004 TxFace N 0x0005 TxMode N 0x0006 SpExtra N 0x0007 PnSize N 0x0008 PnMode N 0x0009 PnPat N 0x000a FillPat N 0x000b OvSize N 0x000c Origin N 0x000d TxSize N 0x000e FgColor N 0x000f BkColor N 0x0010 TxRatio N 0x0011 VersionOp N 0x0012 BkPixPat N 0x0013 PnPixPat N 0x0014 FillPixPat N 0x0015 PnLocHFrac N 0x0016 ChExtra N 0x0017 Reserved N 0x001a RGBFgCol N 0x001b RGBBkCol N 0x001c HiliteMode N 0x001d HiliteColor N 0x001e DefHilite N 0x001f OpColor N 0x0020 Line N 0x0021 LineFrom N 0x0022 ShortLine N 0x0023 ShortLineFrom N 0x0024 Reserved N 0x0028 LongText N 0x0029 DHText N 0x002a DVText N 0x002b DHDVText N 0x002c FontName N 0x002d LineJustify N 0x002e GlyphState N 0x002f Reserved N 0x0030 FrameRect N 0x0031 PaintRect N 0x0032 EraseRect N 0x0033 InvertRect N 0x0034 FillRect N 0x0035 Reserved N 0x0038 FrameSameRect N 0x0039 PaintSameRect N 0x003a EraseSameRect N 0x003b InvertSameRect N 0x003c FillSameRect N 0x003d Reserved N 0x0040 FrameRRect N 0x0041 PaintRRect N 0x0042 EraseRRect N 0x0043 InvertRRect N 0x0044 FillRRect N 0x0045 Reserved N 0x0048 FrameSameRRect N 0x0049 PaintSameRRect N 0x004a EraseSameRRect N 0x004b InvertSameRRect N 0x004c FillSameRRect N 0x004d Reserved N 0x0050 FrameOval N 0x0051 PaintOval N 0x0052 EraseOval N 0x0053 InvertOval N 0x0054 FillOval N 0x0055 Reserved N 0x0058 FrameSameOval N 0x0059 PaintSameOval N 0x005a EraseSameOval N 0x005b InvertSameOval N 0x005c FillSameOval N 0x005d Reserved N 0x0060 FrameArc N 0x0061 PaintArc N 0x0062 EraseArc N 0x0063 InvertArc N 0x0064 FillArc N 0x0065 Reserved N 0x0068 FrameSameArc N 0x0069 PaintSameArc N 0x006a EraseSameArc N 0x006b InvertSameArc N 0x006c FillSameArc N 0x006d Reserved N 0x0070 FramePoly N 0x0071 PaintPoly N 0x0072 ErasePoly N 0x0073 InvertPoly N 0x0074 FillPoly N 0x0075 Reserved N 0x0078 FrameSamePoly N 0x0079 PaintSamePoly N 0x007a EraseSamePoly N 0x007b InvertSamePoly N 0x007c FillSamePoly N 0x007d Reserved N 0x0080 FrameRgn N 0x0081 PaintRgn N 0x0082 EraseRgn N 0x0083 InvertRgn N 0x0084 FillRgn N 0x0085 Reserved N 0x0088 FrameSameRgn N 0x0089 PaintSameRgn N 0x008a EraseSameRgn N 0x008b InvertSameRgn N 0x008c FillSameRgn N 0x008d Reserved N 0x0090 BitsRect N 0x0091 BitsRgn N 0x0092 Reserved N 0x0098 PackBitsRect N 0x0099 PackBitsRgn N 0x009a DirectBitsRect N 0x009b DirectBitsRgn N 0x009c Reserved N 0x009d Reserved N 0x009e Reserved N 0x009f Reserved N 0x00a0 ShortComment N 0x00a1 LongComment Photoshop ICC_Profile 0x00a2 Reserved N 0x00b0 Reserved N 0x00d0 Reserved N 0x00ff OpEndPic N 0x0100 Reserved N 0x0200 Reserved N 0x02ff Version N 0x0300 Reserved N 0x0bff Reserved N 0x0c00 HeaderOp N 0x0c01 Reserved N 0x7f00 Reserved N 0x8000 Reserved N 0x8100 Reserved N 0x8200 CompressedQuickTime N 0x8201 UncompressedQuickTime N 0xffff Reserved N =head2 PNG Tags Tags extracted from PNG images. See L<http://www.libpng.org/pub/png/spec/1.2/> for the official PNG 1.2 specification. According to the specification, a PNG file should end at the IEND chunk, however ExifTool will preserve any data found after this when writing unless it is specifically deleted with -Trailer:All=. When reading, a minor warning is issued if this trailer exists, and ExifTool will attempt to parse this data as additional PNG chunks. Tag ID Tag Name Writable ------ -------- -------- 'IHDR' ImageHeader PNG ImageHeader 'PLTE' Palette N 'bKGD' BackgroundColor N 'cHRM' PrimaryChromaticities PNG PrimaryChromaticities 'dSIG' DigitalSignature N 'fRAc' FractalParameters N 'gAMA' Gamma N 'gIFg' GIFGraphicControlExtension N 'gIFt' GIFPlainTextExtension N 'gIFx' GIFApplicationExtension N 'hIST' PaletteHistogram N 'iCCP' ICC_Profile ICC_Profile 'iCCP-name' ProfileName N 'iTXt' InternationalText PNG TextualData 'oFFs' ImageOffset N 'pCAL' PixelCalibration N 'pHYs' PhysicalPixel PNG PhysicalPixel 'sBIT' SignificantBits N 'sCAL' SubjectScale PNG SubjectScale 'sPLT' SuggestedPalette N 'sRGB' SRGBRendering N 'sTER' StereoImage PNG StereoImage 'tEXt' TextualData PNG TextualData 'tIME' ModifyDate Y 'tRNS' Transparency N 'tXMP' XMP XMP 'vpAg' VirtualPage PNG VirtualPage 'zTXt' CompressedText PNG TextualData =head3 PNG ImageHeader Tags Index1 Tag Name Writable ------ -------- -------- 0 ImageWidth N 4 ImageHeight N 8 BitDepth N 9 ColorType N 10 Compression N 11 Filter N 12 Interlace N =head3 PNG PrimaryChromaticities Tags Index4 Tag Name Writable ------ -------- -------- 0 WhitePointX N 1 WhitePointY N 2 RedX N 3 RedY N 4 GreenX N 5 GreenY N 6 BlueX N 7 BlueY N =head3 PNG TextualData Tags The PNG TextualData format allows arbitrary tag names to be used. The tags listed below are the only ones that can be written (unless new user-defined tags are added via the configuration file), however ExifTool will extract any other TextualData tags that are found. All TextualData tags (including tags not listed below) are removed when deleting all PNG tags. These tags may be stored as tEXt, zTXt or iTXt chunks in the PNG image. By default ExifTool writes new string-value tags as as uncompressed tEXt, or compressed zTXt if the Compress (-z) option is used and Compress::Zlib is available. Alternate language tags and values containing special characters (unless the Latin character set is used) are written as iTXt, and compressed if the Compress option is used and Compress::Zlib is available. Raw profile information is always created as compressed zTXt if Compress::Zlib is available, or tEXt otherwise. Standard XMP is written as uncompressed iTXt. Alternate languages are accessed by suffixing the tag name with a '-', followed by an RFC 3066 language code (eg. "PNG:Comment-fr", or "Title-en-US"). See L<http://www.ietf.org/rfc/rfc3066.txt> for the RFC 3066 specification. Some of the tags below are not registered as part of the PNG specification, but are included here because they are generated by other software such as ImageMagick. Tag ID Tag Name Writable ------ -------- -------- 'Artist' Artist string 'Author' Author string 'Comment' Comment string 'Copyright' Copyright string 'Creation Time' CreationTime string 'Description' Description string 'Disclaimer' Disclaimer string 'Document' Document string 'Label' Label string 'Make' Make string 'Model' Model string 'Raw profile type 8bim' Photoshop_Profile Photoshop 'Raw profile type APP1' APP1_Profile EXIF XMP 'Raw profile type exif' EXIF_Profile EXIF 'Raw profile type icc' ICC_Profile ICC_Profile 'Raw profile type icm' ICC_Profile ICC_Profile 'Raw profile type iptc' IPTC_Profile Photoshop 'Raw profile type xmp' XMP_Profile XMP 'Software' Software string 'Source' Source string 'TimeStamp' TimeStamp string 'Title' Title string 'URL' URL string 'Warning' PNGWarning string 'XML:com.adobe.xmp' XMP XMP 'create-date' CreateDate string 'modify-date' ModDate string =head3 PNG PhysicalPixel Tags These tags are found in the PNG pHYs chunk and belong to the PNG-pHYs family 1 group. They are all created together with default values if necessary when any of these tags is written, and may only be deleted as a group. Index1 Tag Name Writable ------ -------- -------- 0 PixelsPerUnitX int32u 4 PixelsPerUnitY int32u 8 PixelUnits int8u =head3 PNG SubjectScale Tags Index1 Tag Name Writable ------ -------- -------- 0 SubjectUnits N 1 SubjectPixelWidth N 2 SubjectPixelHeight N =head3 PNG StereoImage Tags Index1 Tag Name Writable ------ -------- -------- 0 StereoMode N =head3 PNG VirtualPage Tags Index4 Tag Name Writable ------ -------- -------- 0 VirtualImageWidth N 1 VirtualImageHeight N 2 VirtualPageUnits N =head2 MNG Tags This table contains definitions for tags found in MNG and JNG images. MNG is a superset of PNG and JNG, so a MNG image may contain any of these tags as well as any PNG tags. Conversely, only some of these tags are valid for JNG images. Tag ID Tag Name Writable ------ -------- -------- 'BACK' Background MNG Background 'BASI' BasisObject MNG BasisObject 'CLIP' ClipObjects MNG ClipObjects 'CLON' CloneObject MNG CloneObject 'DBYK' DropByKeyword N 'DEFI' DefineObject MNG DefineObject 'DHDR' DeltaPNGHeader MNG DeltaPNGHeader 'DISC' DiscardObjects N 'DROP' DropChunks N 'FRAM' Frame N 'JHDR' JNGHeader MNG JNGHeader 'LOOP' Loop MNG Loop 'MAGN' MagnifyObject MNG MagnifyObject 'MHDR' MNGHeader MNG MNGHeader 'MOVE' MoveObjects MNG MoveObjects 'ORDR' OrderingRestrictions N 'PAST' PasteImage MNG PasteImage 'PPLT' PartialPalette N 'PROM' PromoteParent MNG PromoteParent 'SAVE' SaveObjects N 'SEEK' SeekPoint N 'SHOW' ShowObjects MNG ShowObjects 'TERM' TerminationAction MNG TerminationAction 'eXPi' ExportImage MNG ExportImage 'fPRI' FramePriority MNG FramePriority 'nEED' ResourcesNeeded N 'pHYg' GlobalPixelSize PNG PhysicalPixel =head3 MNG Background Tags Index1 Tag Name Writable ------ -------- -------- 0 BackgroundColor N 6 MandatoryBackground N 7 BackgroundImageID N 9 BackgroundTiling N =head3 MNG BasisObject Tags Index1 Tag Name Writable ------ -------- -------- 0 ImageWidth N 4 ImageHeight N 8 BitDepth N 9 ColorType N 10 Compression N 11 Filter N 12 Interlace N 13 RedSample N 17 GreenSample N 21 BlueSample N 25 AlphaSample N 26 Viewable N =head3 MNG ClipObjects Tags Index1 Tag Name Writable ------ -------- -------- 0 FirstObject N 2 LastObject N 4 DeltaType N 5 ClipBoundary N =head3 MNG CloneObject Tags Index1 Tag Name Writable ------ -------- -------- 0 SourceID N 2 CloneID N 4 CloneType N 5 DoNotShow N 6 ConcreteFlag N 7 LocalDeltaType N 8 DeltaXY N =head3 MNG DefineObject Tags Index1 Tag Name Writable ------ -------- -------- 0 ObjectID N 2 DoNotShow N 3 ConcreteFlag N 4 XYLocation N 12 ClippingBoundary N =head3 MNG DeltaPNGHeader Tags Index1 Tag Name Writable ------ -------- -------- 0 ObjectID N 2 ImageType N 3 DeltaType N 4 BlockSize N 12 BlockLocation N =head3 MNG JNGHeader Tags Index1 Tag Name Writable ------ -------- -------- 0 ImageWidth N 4 ImageHeight N 8 ColorType N 9 BitDepth N 10 Compression N 11 Interlace N 12 AlphaBitDepth N 13 AlphaCompression N 14 AlphaFilter N 15 AlphaInterlace N =head3 MNG Loop Tags Index1 Tag Name Writable ------ -------- -------- 0 NestLevel N 1 IterationCount N 5 TerminationCondition N 6 IterationMinMax N 14 SignalNumber N =head3 MNG MagnifyObject Tags Index1 Tag Name Writable ------ -------- -------- 0 FirstObjectID N 2 LastObjectID N 4 XMethod N 5 XMag N 7 YMag N 9 LeftMag N 11 RightMag N 13 TopMag N 15 BottomMag N 17 YMethod N =head3 MNG MNGHeader Tags Index4 Tag Name Writable ------ -------- -------- 0 ImageWidth N 1 ImageHeight N 2 TicksPerSecond N 3 NominalLayerCount N 4 NominalFrameCount N 5 NominalPlayTime N 6 SimplicityProfile N =head3 MNG MoveObjects Tags Index1 Tag Name Writable ------ -------- -------- 0 FirstObject N 2 LastObject N 4 DeltaType N 5 DeltaXY N =head3 MNG PasteImage Tags Index1 Tag Name Writable ------ -------- -------- 0 DestinationID N 2 TargetDeltaType N 3 TargetXY N 11 SourceID N 13 CompositionMode N 14 Orientation N 15 OffsetOrigin N 16 OffsetXY N 24 BoundaryOrigin N 25 PastClippingBoundary N =head3 MNG PromoteParent Tags Index1 Tag Name Writable ------ -------- -------- 0 NewColorType N 1 NewBitDepth N 2 FillMethod N =head3 MNG ShowObjects Tags Index1 Tag Name Writable ------ -------- -------- 0 FirstObject N 2 LastObject N 4 ShowMode N =head3 MNG TerminationAction Tags Index1 Tag Name Writable ------ -------- -------- 0 TerminationAction N 1 IterationEndAction N 2 Delay N 6 IterationMax N =head3 MNG ExportImage Tags Index1 Tag Name Writable ------ -------- -------- 0 SnapshotID N 2 SnapshotName N =head3 MNG FramePriority Tags Index1 Tag Name Writable ------ -------- -------- 0 DeltaType N 2 Priority N =head2 DjVu Tags Information is extracted from the following chunks in DjVu images. See L<http://www.djvu.org/> for the DjVu specification. Tag ID Tag Name Writable ------ -------- -------- 'ANTa' ANTa DjVu Ant 'ANTz' CompressedAnnotation DjVu Ant 'FORM' FORM DjVu Form 'INCL' IncludedFileID N 'INFO' INFO DjVu Info =head3 DjVu Ant Tags Information extracted from annotation chunks. Tag ID Tag Name Writable ------ -------- -------- 'metadata' Metadata DjVu Meta 'xmp' XMP XMP =head3 DjVu Meta Tags This table lists the standard DjVu metadata tags, but ExifTool will extract any tags that exist even if they don't appear here. The DjVu v3 documentation endorses tags borrowed from two standards: 1) BibTeX bibliography system tags (all lowercase Tag ID's in the table below), and 2) PDF DocInfo tags (capitalized Tag ID's). Tag ID Tag Name Writable ------ -------- -------- 'Author' Author N 'CreationDate' CreateDate N 'Creator' Creator N 'Keywords' Keywords N 'ModDate' ModifyDate N 'Producer' Producer N 'Subject' Subject N 'Title' Title N 'Trapped' Trapped N 'address' Address N 'annote' Annotation N 'author' Author N 'booktitle' BookTitle N 'chapter' Chapter N 'crossref' CrossRef N 'edition' Edition N 'eprint' EPrint N 'howpublished' HowPublished N 'institution' Institution N 'journal' Journal N 'key' Key N 'month' Month N 'note' Note N 'number' Number N 'organization' Organization N 'pages' Pages N 'publisher' Publisher N 'school' School N 'series' Series N 'title' Title N 'type' Type N 'url' URL N 'volume' Volume N 'year' Year N =head3 DjVu Form Tags Index1 Tag Name Writable ------ -------- -------- 0 SubfileType N =head3 DjVu Info Tags Index1 Tag Name Writable ------ -------- -------- 0 ImageWidth N 2 ImageHeight N 4 DjVuVersion N 6 SpatialResolution N 8 Gamma N 9 Orientation N =head2 DPX Tags Tags extracted from DPX (Digital Picture Exchange) images. Index1 Tag Name Writable ------ -------- -------- 0 ByteOrder N 8 HeaderVersion N 16 DPXFileSize N 20 DittoKey N 36 ImageFileName N 136 CreateDate N 160 Creator N 260 Project N 460 Copyright N 660 EncryptionKey N 768 Orientation N 770 ImageElements N 772 ImageWidth N 776 ImageHeight N 780 DataSign N 800 ComponentsConfiguration N 803 BitDepth N 820 ImageDescription N 892 Image2Description N 964 Image3Description N 1036 Image4Description N 1108 Image5Description N 1180 Image6Description N 1252 Image7Description N 1324 Image8Description N 1432 SourceFileName N 1532 SourceCreateDate N 1556 InputDeviceName N 1588 InputDeviceSerialNumber N 1724 FrameRate N 1732 FrameID N 1764 SlateInformation N 2048 UserID N =head2 OpenEXR Tags Information extracted from EXR images. See L<http://www.openexr.com/> for the official specification. Tag ID Tag Name Writable ------ -------- -------- '_lay' Layout N '_ver' EXRVersion N 'adoptedNeutral' AdoptedNeutral N 'altitude' GPSAltitude N 'aperture' Aperture N 'capDate' DateTimeOriginal N 'channels' Channels N 'chromaticities' Chromaticities N 'comments' Comments N 'compression' Compression N 'dataWindow' DataWindow N 'displayWindow' DisplayWindow N 'envmap' EnvironmentMap N 'expTime' ExposureTime N 'focus' FocusDistance N 'framesPerSecond' FramesPerSecond N 'isoSpeed' ISO N 'keyCode' KeyCode N 'latitude' GPSLatitude N 'lineOrder' LineOrder N 'longitude' GPSLongitude N 'lookModTransform' LookModTransform N 'multiView' MultiView N 'owner' Owner N 'pixelAspectRatio' PixelAspectRatio N 'preview' Preview N 'renderingTransform' RenderingTransform N 'screenWindowCenter' ScreenWindowCenter N 'screenWindowWidth' ScreenWindowWidth N 'tiles' Tiles N 'timeCode' TimeCode N 'utcOffset' TimeZone N 'whiteLuminance' WhiteLuminance N 'worldToCamera' WorldToCamera N 'worldToNDC' WorldToNDC N 'wrapmodes' WrapModes N 'xDensity' XResolution N =head2 MIFF Tags The MIFF (Magick Image File Format) format allows aribrary tag names to be used. Only the standard tag names are listed below, however ExifTool will decode any tags found in the image. Tag ID Tag Name Writable ------ -------- -------- 'background-color' BackgroundColor N 'blue-primary' BluePrimary N 'border-color' BorderColor N 'class' Class N 'colors' Colors N 'colorspace' ColorSpace N 'columns' ImageWidth N 'compression' Compression N 'delay' Delay N 'depth' Depth N 'dispose' Dispose N 'gamma' Gamma N 'green-primary' GreenPrimary N 'id' ID N 'iterations' Iterations N 'label' Label N 'matt-color' MattColor N 'matte' Matte N 'montage' Montage N 'packets' Packets N 'page' Page N 'profile-APP1' APP1_Profile EXIF XMP 'profile-exif' EXIF_Profile EXIF 'profile-icc' ICC_Profile ICC_Profile 'profile-iptc' IPTC_Profile Photoshop 'profile-xmp' XMP_Profile XMP 'red-primary' RedPrimary N 'rendering-intent' RenderingIntent N 'resolution' Resolution N 'rows' ImageHeight N 'scene' Scene N 'signature' Signature N 'units' Units N 'white-point' WhitePoint N =head2 PGF Tags The following table lists information extracted from the header of Progressive Graphics File (PGF) images. As well, information is extracted from the embedded PNG metadata image if it exists. See L<http://www.libpgf.org/> for the PGF specification. Index1 Tag Name Writable ------ -------- -------- 3 PGFVersion N 8 ImageWidth N 12 ImageHeight N 16 PyramidLevels N 17 Quality N 18 BitsPerPixel N 19 ColorComponents N 20 ColorMode N 21 BackgroundColor N =head2 PSP Tags Tags extracted from Paint Shop Pro images (PSP, PSPIMAGE, PSPFRAME, PSPSHAPE, PSPTUBE and TUB extensions). Tag ID Tag Name Writable ------ -------- -------- 'FileVersion' FileVersion N 0x0000 ImageInfo PSP Image PSP Image 0x0001 CreatorInfo PSP Creator 0x000a ExtendedInfo PSP Ext =head3 PSP Image Tags Index1 Tag Name Writable ------ -------- -------- 0 ImageWidth N 4 ImageHeight N 8 ImageResolution N 16 ResolutionUnit N 17 Compression N 19 BitsPerSample N 21 Planes N 23 NumColors N =head3 PSP Creator Tags Tag ID Tag Name Writable ------ -------- -------- 0x0000 Title N 0x0001 CreateDate N 0x0002 ModifyDate N 0x0003 Artist N 0x0004 Copyright N 0x0005 Description N 0x0006 CreatorAppID N 0x0007 CreatorAppVersion N =head3 PSP Ext Tags Tag ID Tag Name Writable ------ -------- -------- 0x0003 EXIFInfo EXIF =head2 PhotoCD Tags Tags extracted from Kodak Photo CD Image Pac (PCD) files. Index1 Tag Name Writable ------ -------- -------- 7 SpecificationVersion N 9 AuthoringSoftwareRelease N 11 ImageMagnificationDescriptor N 13 CreateDate N 17 ModifyDate N 21 ImageMedium N 22 ProductType N 42 ScannerVendorID N 62 ScannerProductID N 78 ScannerFirmwareVersion N 82 ScannerFirmwareDate N 90 ScannerSerialNumber N 110 ScannerPixelSize N 112 ImageWorkstationMake N 132 CharacterSet N 133 CharacterEscapeSequence? N 165 PhotoFinisherName N 228 SceneBalanceAlgorithmRevision N 230 SceneBalanceAlgorithmCommand N 325 SceneBalanceAlgorithmFilmID N 331 CopyrightStatus N 332 CopyrightFileName N 1538 Orientation N 1538.1 ImageWidth N 1538.2 ImageHeight N 1538.3 CompressionClass N =head2 Radiance Tags Information extracted from Radiance RGBE HDR images. Tag ID's are all uppercase as stored in the file, but converted to lowercase by when extracting to avoid conflicts with internal ExifTool variables. See L<http://radsite.lbl.gov/radiance/refer/filefmts.pdf> and L<http://www.graphics.cornell.edu/online/formats/rgbe/> for the specification. Tag ID Tag Name Writable ------ -------- -------- '_command' Command N '_orient' Orientation N 'colorcorr' ColorCorrection N 'exposure' Exposure N 'format' Format N 'gamma' Gamma N 'pixaspect' PixelAspectRatio N 'primaries' ColorPrimaries N 'software' Software N 'view' View N =head2 PDF Tags The tags listed in the PDF tables below are those which are used by ExifTool to extract meta information, but they are only a small fraction of the total number of available PDF tags. See L<http://www.adobe.com/devnet/pdf/pdf_reference.html> for the official PDF specification. ExifTool supports reading and writing PDF documents up to version 1.7 extension level 3, including support for RC4, AES-128 and AES-256 encryption. A Password option is provided to allow processing of password-protected PDF files. ExifTool may be used to write native PDF and XMP metadata to PDF files. It uses an incremental update technique that has the advantages of being both fast and reversible. The original PDF can be easily recovered by deleting the C<PDF-update> pseudo-group (with C<-PDF-update:all=> on the command line). However, there are two main disadvantages to this technique: 1) A linearized PDF file is no longer linearized after the update, so it must be subsequently re-linearized if this is required. 2) All metadata edits are reversible. While this would normally be considered an advantage, it is a potential security problem because old information is never actually deleted from the file. Tag ID Tag Name Writable ------ -------- -------- 'Encrypt' Encrypt PDF Encrypt 'Info' Info PDF Info 'Root' Root PDF Root '_linearized' Linearized N =head3 PDF Encrypt Tags Tags extracted from the document Encrypt dictionary. Tag ID Tag Name Writable ------ -------- -------- 'Filter' Encryption N 'P' UserAccess N =head3 PDF Info Tags As well as the tags listed below, the PDF specification allows for user-defined tags to exist in the Info dictionary. These tags, which should have corresponding XMP-pdfx entries in the XMP of the PDF XML Metadata object, are also extracted by ExifTool. B<Writable> specifies the value format, and may be C<string>, C<date>, C<integer>, C<real>, C<boolean> or C<name> for PDF tags. Tag ID Tag Name Writable ------ -------- -------- 'AAPL:Keywords' AppleKeywords string+ 'Author' Author string 'CreationDate' CreateDate date 'Creator' Creator string 'Keywords' Keywords string+ 'ModDate' ModifyDate date 'Producer' Producer string 'Subject' Subject string 'Title' Title string 'Trapped' Trapped string! =head3 PDF Root Tags This is the PDF document catalog. Tag ID Tag Name Writable ------ -------- -------- 'AcroForm' AcroForm PDF AcroForm 'Lang' Language N 'MarkInfo' MarkInfo PDF MarkInfo 'Metadata' Metadata PDF Metadata 'PageLayout' PageLayout N 'PageMode' PageMode N 'Pages' Pages PDF Pages 'Perms' Perms PDF Perms 'Version' PDFVersion N =head3 PDF AcroForm Tags Tag ID Tag Name Writable ------ -------- -------- '_has_xfa' HasXFA N =head3 PDF MarkInfo Tags Tag ID Tag Name Writable ------ -------- -------- 'Marked' TaggedPDF N =head3 PDF Metadata Tags Tag ID Tag Name Writable ------ -------- -------- 'XML_stream' XMP XMP =head3 PDF Pages Tags Tag ID Tag Name Writable ------ -------- -------- 'Count' PageCount N 'Kids' Kids PDF Kids =head3 PDF Kids Tags Tag ID Tag Name Writable ------ -------- -------- 'Kids' Kids PDF Kids 'Metadata' Metadata PDF Metadata 'PieceInfo' PieceInfo PDF PieceInfo 'Resources' Resources PDF Resources =head3 PDF PieceInfo Tags Tag ID Tag Name Writable ------ -------- -------- 'AdobePhotoshop' AdobePhotoshop PDF AdobePhotoshop 'Illustrator' Illustrator PDF Illustrator =head3 PDF AdobePhotoshop Tags Tag ID Tag Name Writable ------ -------- -------- 'Private' Private PDF Private =head3 PDF Private Tags Tag ID Tag Name Writable ------ -------- -------- 'ImageResources' ImageResources PDF ImageResources =head3 PDF ImageResources Tags Tag ID Tag Name Writable ------ -------- -------- '_stream' _stream Photoshop =head3 PDF Illustrator Tags Tag ID Tag Name Writable ------ -------- -------- 'Private' Private PDF AIPrivate =head3 PDF AIPrivate Tags Tag ID Tag Name Writable ------ -------- -------- 'AIMetaData' AIMetaData PDF AIMetaData 'AIPDFPrivateData' AIPDFPrivateData PostScript 'AIPrivateData' AIPrivateData PostScript 'ContainerVersion' ContainerVersion N 'CreatorVersion' CreatorVersion N 'RoundTripVersion' RoundTripVersion N =head3 PDF AIMetaData Tags Tag ID Tag Name Writable ------ -------- -------- '_stream' _stream PostScript =head3 PDF Resources Tags Tag ID Tag Name Writable ------ -------- -------- 'ColorSpace' ColorSpace PDF ColorSpace 'Properties' Properties PDF Properties 'XObject' XObject PDF XObject =head3 PDF ColorSpace Tags Tag ID Tag Name Writable ------ -------- -------- 'Cs1' Cs1 PDF Cs1 'DefaultRGB' DefaultRGB PDF DefaultRGB =head3 PDF Cs1 Tags Tag ID Tag Name Writable ------ -------- -------- '_stream' _stream ICC_Profile =head3 PDF DefaultRGB Tags Tag ID Tag Name Writable ------ -------- -------- 'ICCBased' ICCBased PDF ICCBased =head3 PDF ICCBased Tags Tag ID Tag Name Writable ------ -------- -------- '_stream' _stream ICC_Profile =head3 PDF Properties Tags Tag ID Tag Name Writable ------ -------- -------- 'MC' MC PDF MC =head3 PDF MC Tags Tag ID Tag Name Writable ------ -------- -------- 'Metadata' Metadata PDF Metadata =head3 PDF XObject Tags Tag ID Tag Name Writable ------ -------- -------- 'Im' Im PDF Im =head3 PDF Im Tags Information extracted from embedded images with the ExtractEmbedded option. The EmbeddedImage and its metadata are extracted only for JPEG and Jpeg2000 image formats. Tag ID Tag Name Writable ------ -------- -------- 'ColorSpace' EmbeddedImageColorSpace N+ 'Filter' EmbeddedImageFilter N+ 'Height' EmbeddedImageHeight N 'Image_stream' EmbeddedImage N 'Width' EmbeddedImageWidth N =head3 PDF Perms Tags Additional document permissions imposed by digital signatures. Tag ID Tag Name Writable ------ -------- -------- 'DocMDP' DocMDP PDF Signature 'FieldMDP' FieldMDP PDF Signature 'UR3' UR3 PDF Signature =head3 PDF Signature Tags Tag ID Tag Name Writable ------ -------- -------- 'ContactInfo' SignerContactInfo N 'Location' SigningLocation N 'M' SigningDate N 'Name' SigningAuthority N 'Prop_AuthTime' AuthenticationTime N 'Prop_AuthType' AuthenticationType N 'Reason' SigningReason N 'Reference' Reference PDF Reference =head3 PDF Reference Tags Tag ID Tag Name Writable ------ -------- -------- 'TransformParams' TransformParams PDF TransformParams =head3 PDF TransformParams Tags Tag ID Tag Name Writable ------ -------- -------- 'Action' FieldPermissions N 'Annots' AnnotationUsageRights N+ 'Document' DocumentUsageRights N+ 'EF' EmbeddedFileUsageRights N+ 'Fields' FormFields N+ 'Form' FormUsageRights N+ 'FormEX' FormExtraUsageRights N+ 'Msg' UsageRightsMessage N 'P' ModificationPermissions N 'Signature' SignatureUsageRights N+ =head2 PostScript Tags Tag ID Tag Name Writable ------ -------- -------- 'Author' Author string 'BeginDocument' EmbeddedFile PostScript 'BeginICCProfile' ICC_Profile ICC_Profile 'BeginPhotoshop' PhotoshopData Photoshop 'BoundingBox' BoundingBox N 'Copyright' Copyright string 'CreationDate' CreateDate string 'Creator' Creator string 'EmbeddedFileName' EmbeddedFileName N 'For' For string 'ImageData' ImageData N 'Keywords' Keywords string 'ModDate' ModifyDate string 'Pages' Pages N 'Routing' Routing string 'Subject' Subject string 'TIFFPreview' TIFFPreview N 'Title' Title string 'Version' Version string 'begin_xml_packet' XMP XMP =head2 ID3 Tags ExifTool extracts ID3 information from MP3, MPEG, AIFF, OGG, FLAC, APE, MPC and RealAudio files. ID3v2 tags which support multiple languages (eg. Comment and Lyrics) are extracted by specifying the tag name, followed by a dash ('-'), then a 3-character ISO 639-2 language code (eg. "Comment-spa"). See L<http://www.id3.org/> for the official ID3 specification and L<http://www.loc.gov/standards/iso639-2/php/code_list.php> for a list of ISO 639-2 language codes. Tag Name Writable -------- -------- ID3v1 ID3 v1 ID3v1_Enh ID3 v1_Enh ID3v2_2 ID3 v2_2 ID3v2_3 ID3 v2_3 ID3v2_4 ID3 v2_4 =head3 ID3 v1 Tags Index1 Tag Name Writable ------ -------- -------- 3 Title N 33 Artist N 63 Album N 93 Year N 97 Comment N 125 Track N 127 Genre N =head3 ID3 v1_Enh Tags ID3 version 1 "Enhanced TAG" information (not part of the official spec). Index1 Tag Name Writable ------ -------- -------- 4 Title2 N 64 Artist2 N 124 Album2 N 184 Speed N 185 Genre N 215 StartTime N 221 EndTime N =head3 ID3 v2_2 Tags ExifTool extracts mainly text-based tags from ID3v2 information. The tags in the tables below are those extracted by ExifTool, and don't represent a complete list of available ID3v2 tags. ID3 version 2.2 tags. (These are the tags written by iTunes 5.0.) Tag ID Tag Name Writable ------ -------- -------- 'CNT' PlayCounter N 'COM' Comment N 'IPL' InvolvedPeople N 'ITU' iTunesU? N 'PCS' Podcast? N 'PIC' Picture N 'PIC-1' PictureFormat N 'PIC-2' PictureType N 'PIC-3' PictureDescription N 'POP' Popularimeter N 'RVA' RelativeVolumeAdjustment N 'SLT' SynLyrics ID3 SynLyrics 'TAL' Album N 'TBP' BeatsPerMinute N 'TCM' Composer N 'TCO' Genre N 'TCP' Compilation N 'TCR' Copyright N 'TDA' Date N 'TDY' PlaylistDelay N 'TEN' EncodedBy N 'TFT' FileType N 'TIM' Time N 'TKE' InitialKey N 'TLA' Language N 'TLE' Length N 'TMT' Media N 'TOA' OriginalArtist N 'TOF' OriginalFileName N 'TOL' OriginalLyricist N 'TOR' OriginalReleaseYear N 'TOT' OriginalAlbum N 'TP1' Artist N 'TP2' Band N 'TP3' Conductor N 'TP4' InterpretedBy N 'TPA' PartOfSet N 'TPB' Publisher N 'TRC' ISRC N 'TRD' RecordingDates N 'TRK' Track N 'TS2' AlbumArtistSortOrder N 'TSA' AlbumSortOrder N 'TSC' ComposerSortOrder N 'TSI' Size N 'TSP' PerformerSortOrder N 'TSS' EncoderSettings N 'TST' TitleSortOrder N 'TT1' Grouping N 'TT2' Title N 'TT3' Subtitle N 'TXT' Lyricist N 'TXX' UserDefinedText N 'TYE' Year N 'ULT' Lyrics N 'WAF' FileURL N 'WAR' ArtistURL N 'WAS' SourceURL N 'WCM' CommercialURL N 'WCP' CopyrightURL N 'WPB' PublisherURL N 'WXX' UserDefinedURL N =head3 ID3 SynLyrics Tags The following tags are extracted from synchronized lyrics/text frames. Tag Name Writable -------- -------- SynchronizedLyricsDescription N SynchronizedLyricsText N+ SynchronizedLyricsType N =head3 ID3 v2_3 Tags ID3 version 2.3 tags. Includes some non-standard tags written by other software. Tag ID Tag Name Writable ------ -------- -------- 'APIC' Picture N 'APIC-1' PictureMIMEType N 'APIC-2' PictureType N 'APIC-3' PictureDescription N 'COMM' Comment N 'IPLS' InvolvedPeople N 'ITNU' iTunesU? N 'MCDI' MusicCDIdentifier N 'OWNE' Ownership N 'PCNT' PlayCounter N 'PCST' Podcast? N 'POPM' Popularimeter N 'PRIV' Private ID3 Private 'SYLT' SynLyrics ID3 SynLyrics 'TALB' Album N 'TBPM' BeatsPerMinute N 'TCAT' PodcastCategory N 'TCMP' Compilation N 'TCOM' Composer N 'TCON' Genre N 'TCOP' Copyright N 'TDAT' Date N 'TDES' PodcastDescription N 'TDLY' PlaylistDelay N 'TENC' EncodedBy N 'TEXT' Lyricist N 'TFLT' FileType N 'TGID' PodcastID N 'TIME' Time N 'TIT1' Grouping N 'TIT2' Title N 'TIT3' Subtitle N 'TKEY' InitialKey N 'TKWD' PodcastKeywords N 'TLAN' Language N 'TLEN' Length N 'TMED' Media N 'TOAL' OriginalAlbum N 'TOFN' OriginalFileName N 'TOLY' OriginalLyricist N 'TOPE' OriginalArtist N 'TORY' OriginalReleaseYear N 'TOWN' FileOwner N 'TPE1' Artist N 'TPE2' Band N 'TPE3' Conductor N 'TPE4' InterpretedBy N 'TPOS' PartOfSet N 'TPUB' Publisher N 'TRCK' Track N 'TRDA' RecordingDates N 'TRSN' InternetRadioStationName N 'TRSO' InternetRadioStationOwner N 'TSIZ' Size N 'TSO2' AlbumArtistSortOrder N 'TSOC' ComposerSortOrder N 'TSRC' ISRC N 'TSSE' EncoderSettings N 'TXXX' UserDefinedText N 'TYER' Year N 'USER' TermsOfUse N 'USLT' Lyrics N 'WCOM' CommercialURL N 'WCOP' CopyrightURL N 'WFED' PodcastURL N 'WOAF' FileURL N 'WOAR' ArtistURL N 'WOAS' SourceURL N 'WORS' InternetRadioStationURL N 'WPAY' PaymentURL N 'WPUB' PublisherURL N 'WXXX' UserDefinedURL N 'XDOR' OriginalReleaseTime N 'XOLY' OlympusDSS Olympus DSS 'XSOA' AlbumSortOrder N 'XSOP' PerformerSortOrder N 'XSOT' TitleSortOrder N =head3 ID3 Private Tags ID3 private (PRIV) tags. ExifTool will decode any private tags found, even if they do not appear in this table. Tag Name Writable -------- -------- AverageLevel N PeakValue N WM_CollectionGroupID N WM_CollectionID N WM_ContentID N WM_MediaClassPrimaryID N WM_MediaClassSecondaryID N WM_Provider N XMP XMP =head3 ID3 v2_4 Tags ID3 version 2.4 tags. Includes some non-standard tags written by other software. Tag ID Tag Name Writable ------ -------- -------- 'APIC' Picture N 'APIC-1' PictureMIMEType N 'APIC-2' PictureType N 'APIC-3' PictureDescription N 'COMM' Comment N 'ITNU' iTunesU? N 'MCDI' MusicCDIdentifier N 'OWNE' Ownership N 'PCNT' PlayCounter N 'PCST' Podcast? N 'POPM' Popularimeter N 'PRIV' Private ID3 Private 'RVA2' RelativeVolumeAdjustment N 'SYLT' SynLyrics ID3 SynLyrics 'TALB' Album N 'TBPM' BeatsPerMinute N 'TCAT' PodcastCategory N 'TCMP' Compilation N 'TCOM' Composer N 'TCON' Genre N 'TCOP' Copyright N 'TDEN' EncodingTime N 'TDES' PodcastDescription N 'TDLY' PlaylistDelay N 'TDOR' OriginalReleaseTime N 'TDRC' RecordingTime N 'TDRL' ReleaseTime N 'TDTG' TaggingTime N 'TENC' EncodedBy N 'TEXT' Lyricist N 'TFLT' FileType N 'TGID' PodcastID N 'TIPL' InvolvedPeople N 'TIT1' Grouping N 'TIT2' Title N 'TIT3' Subtitle N 'TKEY' InitialKey N 'TKWD' PodcastKeywords N 'TLAN' Language N 'TLEN' Length N 'TMCL' MusicianCredits N 'TMED' Media N 'TMOO' Mood N 'TOAL' OriginalAlbum N 'TOFN' OriginalFileName N 'TOLY' OriginalLyricist N 'TOPE' OriginalArtist N 'TOWN' FileOwner N 'TPE1' Artist N 'TPE2' Band N 'TPE3' Conductor N 'TPE4' InterpretedBy N 'TPOS' PartOfSet N 'TPRO' ProducedNotice N 'TPUB' Publisher N 'TRCK' Track N 'TRSN' InternetRadioStationName N 'TRSO' InternetRadioStationOwner N 'TSO2' AlbumArtistSortOrder N 'TSOA' AlbumSortOrder N 'TSOC' ComposerSortOrder N 'TSOP' PerformerSortOrder N 'TSOT' TitleSortOrder N 'TSRC' ISRC N 'TSSE' EncoderSettings N 'TSST' SetSubtitle N 'TXXX' UserDefinedText N 'USER' TermsOfUse N 'USLT' Lyrics N 'WCOM' CommercialURL N 'WCOP' CopyrightURL N 'WFED' PodcastURL N 'WOAF' FileURL N 'WOAR' ArtistURL N 'WOAS' SourceURL N 'WORS' InternetRadioStationURL N 'WPAY' PaymentURL N 'WPUB' PublisherURL N 'WXXX' UserDefinedURL N 'XDOR' OriginalReleaseTime N 'XOLY' OlympusDSS Olympus DSS 'XSOA' AlbumSortOrder N 'XSOP' PerformerSortOrder N 'XSOT' TitleSortOrder N =head2 ITC Tags This information is found in iTunes Cover Flow data files. Tag ID Tag Name Writable ------ -------- -------- 'data' ImageData N 'itch' Itch ITC Header 'item' Item ITC Item =head3 ITC Header Tags Index1 Tag Name Writable ------ -------- -------- 16 DataType N =head3 ITC Item Tags Index4 Tag Name Writable ------ -------- -------- 0 LibraryID N 2 TrackID N 4 DataLocation N 5 ImageType N 7 ImageWidth N 8 ImageHeight N =head2 Ogg Tags ExifTool extracts the following types of information from Ogg files. See L<http://www.xiph.org/vorbis/doc/> for the Ogg specification. Tag ID Tag Name Writable ------ -------- -------- 'FLAC' FLAC FLAC 'ID3' ID3 ID3 'theora' Theora Theora 'vorbis' Vorbis Vorbis =head2 Vorbis Tags Information extracted from Ogg Vorbis files. See L<http://www.xiph.org/vorbis/doc/> for the Vorbis specification. Tag ID Tag Name Writable ------ -------- -------- 0x0001 Identification Vorbis Identification 0x0003 Comments Vorbis Comments =head3 Vorbis Identification Tags Index1 Tag Name Writable ------ -------- -------- 0 VorbisVersion N 4 AudioChannels N 5 SampleRate N 9 MaximumBitrate N 13 NominalBitrate N 17 MinimumBitrate N =head3 Vorbis Comments Tags The tags below are only some common tags found in the Vorbis comments of Ogg Vorbis and Ogg FLAC audio files, however ExifTool will extract values from any tag found, even if not listed here. Tag ID Tag Name Writable ------ -------- -------- 'ACTOR' Actor N 'ALBUM' Album N 'ARTIST' Artist N+ 'COMMENT' Comment N 'COMPOSER' Composer N 'CONTACT' Contact N+ 'COPYRIGHT' Copyright N 'COVERART' CoverArt N 'COVERARTMIME' CoverArtMIMEType N 'DATE' Date N 'DESCRIPTION' Description N 'DIRECTOR' Director N 'ENCODED_BY' EncodedBy N 'ENCODED_USING' EncodedUsing N 'GENRE' Genre N 'ISRC' ISRCNumber N 'LICENSE' License N 'LOCATION' Location N 'ORGANIZATION' Organization N 'PERFORMER' Performer N+ 'PRODUCER' Producer N 'REPLAYGAIN_ALBUM_GAIN' ReplayGainAlbumGain N 'REPLAYGAIN_ALBUM_PEAK' ReplayGainAlbumPeak N 'REPLAYGAIN_TRACK_GAIN' ReplayGainTrackGain N 'REPLAYGAIN_TRACK_PEAK' ReplayGainTrackPeak N 'TITLE' Title N 'TRACKNUMBER' TrackNumber N 'VERSION' Version N 'vendor' Vendor N =head2 FLAC Tags Free Lossless Audio Codec (FLAC) meta information. ExifTool also extracts ID3 information from these files. Tag ID Tag Name Writable ------ -------- -------- 0x0000 StreamInfo FLAC StreamInfo 0x0001 Padding? N 0x0002 Application? N 0x0003 SeekTable? N 0x0004 VorbisComment Vorbis Comments 0x0005 CueSheet? N 0x0006 Picture FLAC Picture =head3 FLAC StreamInfo Tags FLAC is big-endian, so bit 0 is the high-order bit in this table. Tag ID Tag Name Writable ------ -------- -------- 'Bit000-015' BlockSizeMin N 'Bit016-031' BlockSizeMax N 'Bit032-055' FrameSizeMin N 'Bit056-079' FrameSizeMax N 'Bit080-099' SampleRate N 'Bit100-102' Channels N 'Bit103-107' BitsPerSample N 'Bit108-143' TotalSamples N =head3 FLAC Picture Tags Index4 Tag Name Writable ------ -------- -------- 0 PictureType N 1 PictureMIMEType N 2 PictureDescription N 3 PictureWidth N 4 PictureHeight N 5 PictureBitsPerPixel N 6 PictureIndexedColors N 7 PictureLength N 8 Picture N =head2 Theora Tags Information extracted from Ogg Theora video files. See L<http://www.theora.org/doc/Theora.pdf> for the Theora specification. Tag ID Tag Name Writable ------ -------- -------- 0x0080 Identification Theora Identification 0x0081 Comments Vorbis Comments =head3 Theora Identification Tags Tags extracted from the Theora identification header. Index1 Tag Name Writable ------ -------- -------- 0 TheoraVersion N 7 ImageWidth N 10 ImageHeight N 13 XOffset N 14 YOffset N 15 FrameRate N 23 PixelAspectRatio N 29 ColorSpace N 30 NominalVideoBitrate N 33 Quality N 34 PixelFormat N =head2 APE Tags Tags found in Monkey's Audio (APE) information. Only a few common tags are listed below, but ExifTool will extract any tag found. ExifTool supports APEv1 and APEv2 tags, as well as ID3 information in APE files, and will also read APE metadata from MP3 and MPC files. Tag ID Tag Name Writable ------ -------- -------- 'Album' Album N 'Artist' Artist N 'Genre' Genre N 'Title' Title N 'Tool Name' ToolName N 'Tool Version' ToolVersion N 'Track' Track N 'Year' Year N =head3 APE NewHeader Tags APE MAC audio header for version 3.98 or later. Index2 Tag Name Writable ------ -------- -------- 0 CompressionLevel N 2 BlocksPerFrame N 4 FinalFrameBlocks N 6 TotalFrames N 8 BitsPerSample N 9 Channels N 10 SampleRate N =head3 APE OldHeader Tags APE MAC audio header for version 3.97 or earlier. Index2 Tag Name Writable ------ -------- -------- 0 APEVersion N 1 CompressionLevel N 3 Channels N 4 SampleRate N 10 TotalFrames N 12 FinalFrameBlocks N =head2 Audible Tags ExifTool will extract any information found in the metadata dictionary of Audible .AA files, even if not listed in the table below. Tag ID Tag Name Writable ------ -------- -------- '_chapter_count' ChapterCount N '_cover_art' CoverArt N 'author' Author N 'copyright' Copyright N 'pub_date_start' PublishDateStart N 'pubdate' PublishDate N =head3 Audible tags Tags Information found in "tags" atom of Audible M4B audio books. Tag ID Tag Name Writable ------ -------- -------- 'cvrx' Audible_cvrx Audible cvrx 'meta' Audible_meta Audible meta 'tseg' Audible_tseg Audible tseg =head3 Audible cvrx Tags Audible cover art information in M4B audio books. Tag Name Writable -------- -------- CoverArt N CoverArtType N =head3 Audible meta Tags Information found in Audible M4B "meta" atom. Tag ID Tag Name Writable ------ -------- -------- 'ALBUMARTIST' AlbumArtist N 'Album' Album N 'Artist' Artist N 'Comment' Comment N 'Genre' Genre N 'SUBTITLE' Subtitle N 'TOOL' CreatorTool N 'Title' Title N 'Year' Year N 'itunesmediatype' iTunesMediaType N 'track' ChapterName N =head3 Audible tseg Tags Tag ID Tag Name Writable ------ -------- -------- 'meta' Audible_meta2 Audible meta 'tshd' ChapterNumber N =head2 MPC Tags Tags used in Musepack (MPC) audio files. ExifTool also extracts ID3 and APE information from these files. Tag ID Tag Name Writable ------ -------- -------- 'Bit032-063' TotalFrames N 'Bit080-081' SampleRate N 'Bit084-087' Quality N 'Bit088-093' MaxBand N 'Bit096-111' ReplayGainTrackPeak N 'Bit112-127' ReplayGainTrackGain N 'Bit128-143' ReplayGainAlbumPeak N 'Bit144-159' ReplayGainAlbumGain N 'Bit179' FastSeek N 'Bit191' Gapless N 'Bit216-223' EncoderVersion N =head2 MPEG Tags The MPEG format doesn't specify any file-level meta information. In lieu of this, information is extracted from the first audio and video frame headers in the file. =head3 MPEG Audio Tags Tag ID Tag Name Writable ------ -------- -------- 'Bit11-12' MPEGAudioVersion N 'Bit13-14' AudioLayer N 'Bit16-19' AudioBitrate N 'Bit20-21' SampleRate N 'Bit24-25' ChannelMode N 'Bit26' MSStereo N 'Bit26-27' ModeExtension N 'Bit27' IntensityStereo N 'Bit28' CopyrightFlag N 'Bit29' OriginalMedia N 'Bit30-31' Emphasis N =head3 MPEG Video Tags Tag ID Tag Name Writable ------ -------- -------- 'Bit00-11' ImageWidth N 'Bit12-23' ImageHeight N 'Bit24-27' AspectRatio N 'Bit28-31' FrameRate N 'Bit32-49' VideoBitrate N =head3 MPEG Xing Tags These tags are extracted from the Xing/Info frame. Tag Name Writable -------- -------- Encoder N LameHeader MPEG Lame LameQuality N LameVBRQuality N VBRBytes N VBRFrames N VBRScale N =head3 MPEG Lame Tags Tags extracted from Lame 3.90 or later header. Index1 Tag Name Writable ------ -------- -------- 9 LameMethod N 10 LameLowPassFilter N 20 LameBitrate N 24 LameStereoMode N =head2 M2TS Tags The MPEG-2 transport stream is used as a container for many different audio/video formats (including AVCHD). This table lists information extracted from M2TS files. Tag Name Writable -------- -------- AudioStreamType N Duration N VideoStreamType N _AC3 M2TS AC3 _H264 H264 =head3 M2TS AC3 Tags Tags extracted from AC-3 audio streams. Tag Name Writable -------- -------- AudioBitrate N AudioChannels N AudioSampleRate N SurroundMode N =head2 H264 Tags Tags extracted from H.264 video streams. The metadata for AVCHD videos is stored in this stream. Tag Name Writable -------- -------- ImageHeight N ImageWidth N MDPM H264 MDPM =head3 H264 MDPM Tags The following tags are decoded from the Modified Digital Video Pack Metadata (MDPM) of the unregistered user data with UUID 17ee8c60f84d11d98cd60800200c9a66 in the H.264 Supplemental Enhancement Information (SEI). I<[Yes, this description is confusing, but nothing compared to the challenge of actually decoding the data!]> This information may exist at regular intervals through the entire video, but only the first occurrence is extracted unless the ExtractEmbedded (-ee) option is used (in which case subsequent occurrences are extracted as sub-documents). Tag ID Tag Name Writable ------ -------- -------- 0x0013 TimeCode N 0x0018 DateTimeOriginal N 0x0070 Camera1 H264 Camera1 0x0071 Camera2 H264 Camera2 0x007f Shutter H264 Shutter 0x00a0 ExposureTime N 0x00a1 FNumber N 0x00a2 ExposureProgram N 0x00a3 BrightnessValue N 0x00a4 ExposureCompensation N 0x00a5 MaxApertureValue N 0x00a6 Flash N 0x00a7 CustomRendered N 0x00a8 WhiteBalance N 0x00a9 FocalLengthIn35mmFormat N 0x00aa SceneCaptureType N 0x00b0 GPSVersionID N 0x00b1 GPSLatitudeRef N 0x00b2 GPSLatitude N 0x00b5 GPSLongitudeRef N 0x00b6 GPSLongitude N 0x00b9 GPSAltitudeRef N 0x00ba GPSAltitude N 0x00bb GPSTimeStamp N 0x00be GPSStatus N 0x00bf GPSMeasureMode N 0x00c0 GPSDOP N 0x00c1 GPSSpeedRef N 0x00c2 GPSSpeed N 0x00c3 GPSTrackRef N 0x00c4 GPSTrack N 0x00c5 GPSImgDirectionRef N 0x00c6 GPSImgDirection N 0x00c7 GPSMapDatum N 0x00e0 MakeModel H264 MakeModel 0x00e1 RecInfo H264 RecInfo 0x00e4 Model N 0x00ee FrameInfo H264 FrameInfo =head3 H264 Camera1 Tags Index1 Tag Name Writable ------ -------- -------- 0 ApertureSetting N 1 Gain N 1.1 ExposureProgram N 2.1 WhiteBalance N 3 Focus N =head3 H264 Camera2 Tags Index1 Tag Name Writable ------ -------- -------- 1 ImageStabilization N =head3 H264 Shutter Tags Index2 Tag Name Writable ------ -------- -------- 1.1 ExposureTime N =head3 H264 MakeModel Tags Index2 Tag Name Writable ------ -------- -------- 0 Make N =head3 H264 RecInfo Tags Recording information stored by some Canon video cameras. Index1 Tag Name Writable ------ -------- -------- 0 RecordingMode N =head3 H264 FrameInfo Tags Frame rate information stored by some Canon video cameras. Index1 Tag Name Writable ------ -------- -------- 0 CaptureFrameRate N 1 VideoFrameRate N =head2 QuickTime Tags The QuickTime format is used for many different types of audio, video and image files (most commonly, MOV and MP4 videos). Exiftool extracts standard meta information a variety of audio, video and image parameters, as well as proprietary information written by many camera models. Tags with a question mark after their name are not extracted unless the Unknown option is set. ExifTool has the ability to write/create XMP, and edit some date/time tags in QuickTime-format files. According to the specification, many QuickTime date/time tags should be stored as UTC. Unfortunately, digital cameras often store local time values instead (presumably because they don't know the time zone). For this reason, by default ExifTool does not assume a time zone for these values. However, if the QuickTimeUTC API option is set, then ExifTool will assume these values are properly stored as UTC, and will convert them to local time when extracting. See L<http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html> for the official specification. Tag ID Tag Name Writable ------ -------- -------- 'PICT' PreviewPICT N '_htc' HTCInfo QuickTime HTCInfo 'ardt' ARDroneFile N 'frea' Kodak_frea Kodak frea 'free' KodakFree Kodak Free Free? N 'ftyp' FileType QuickTime FileType 'junk' Junk? N 'mdat' MovieData? N 'mdat-offset' MovieDataOffset N 'mdat-size' MovieDataSize N 'meta' Meta QuickTime Meta 'moov' Movie QuickTime Movie 'pict' PreviewPICT N 'pnot' Preview QuickTime Preview 'prrt' ARDroneTelemetry N 'skip' CanonSkip Canon Skip Skip? N 'thum' ThumbnailImage N 'udta' UserData FLIR UserData 'uuid' XMP XMP UUID-PROF QuickTime Profile UUID-Flip QuickTime Flip UUID-Unknown? N 'wide' Wide? N =head3 QuickTime HTCInfo Tags Tags written by some HTC camera phones. Tag ID Tag Name Writable ------ -------- -------- 'slmt' Unknown_slmt? N =head3 QuickTime FileType Tags Index4 Tag Name Writable ------ -------- -------- 0 MajorBrand N 1 MinorVersion N 2 CompatibleBrands N =head3 QuickTime Meta Tags Tag ID Tag Name Writable ------ -------- -------- 'bxml' BinaryXML? N 'dinf' DataInformation? N 'free' Free? N 'hdlr' Handler QuickTime Handler 'iinf' ItemInformation? N 'iloc' ItemLocation? N 'ilst' ItemList QuickTime ItemList 'ipmc' IPMPControl? N 'ipro' ItemProtection? N 'keys' Keys QuickTime Keys 'pitm' PrimaryItemReference? N 'xml ' XML XMP XML =head3 QuickTime Handler Tags Index1 Tag Name Writable ------ -------- -------- 4 HandlerClass N 8 HandlerType N 12 HandlerVendorID N 24 HandlerDescription N =head3 QuickTime ItemList Tags As well as these tags, the 'mdta' handler uses numerical tag ID's which are added dynamically to this table after processing the Meta Keys information. Tag ID Tag Name Writable ------ -------- -------- '----' iTunesInfo QuickTime iTunesInfo '@PST' ParentShortTitle N '@ppi' ParentProductID N '@pti' ParentTitle N '@sti' ShortTitle N 'AACR' Unknown_AACR? N 'CDEK' Unknown_CDEK? N 'CDET' Unknown_CDET? N 'GUID' GUID N 'VERS' ProductVersion N 'aART' AlbumArtist N 'akID' AppleStoreAccountType N 'albm' Album N 'apID' AppleStoreAccount N 'atID' AlbumTitleID N 'auth' Author N 'catg' Category N 'cnID' AppleStoreCatalogID N 'covr' CoverArt N 'cpil' Compilation N 'cprt' Copyright N 'desc' Description N 'disk' DiskNumber N 'dscp' Description N 'egid' EpisodeGlobalUniqueID N 'geID' GenreID N 'gnre' Genre N 'grup' Grouping N 'gshh' GoogleHostHeader N 'gspm' GooglePingMessage N 'gspu' GooglePingURL N 'gssd' GoogleSourceData N 'gsst' GoogleStartTime N 'gstd' GoogleTrackDuration N 'hdvd' HDVideo N 'itnu' iTunesU N 'keyw' Keyword N 'ldes' LongDescription N 'pcst' Podcast N 'perf' Performer N 'pgap' PlayGap N 'plID' PlayListID N 'prID' ProductID N 'purd' PurchaseDate N 'purl' PodcastURL N 'rate' RatingPercent N 'rldt' ReleaseDate N 'rtng' Rating N 'sfID' AppleStoreCountry N 'soaa' SortAlbumArtist N 'soal' SortAlbum N 'soar' SortArtist N 'soco' SortComposer N 'sonm' SortName N 'sosn' SortShow N 'stik' MediaType N 'titl' Title N 'tmpo' BeatsPerMinute N 'trkn' TrackNumber N 'tven' TVEpisodeID N 'tves' TVEpisode N 'tvnn' TVNetworkName N 'tvsh' TVShow N 'tvsn' TVSeason N 'yrrc' Year N "\xa9ART" Artist N "\xa9alb" Album N "\xa9cmt" Comment N "\xa9com" Composer N "\xa9cpy" Copyright N "\xa9day" ContentCreateDate N "\xa9des" Description N "\xa9enc" EncodedBy N "\xa9gen" Genre N "\xa9grp" Grouping N "\xa9lyr" Lyrics N "\xa9nam" Title N "\xa9nrt" Narrator N "\xa9pub" Publisher N "\xa9too" Encoder N "\xa9trk" Track N "\xa9wrt" Composer N =head3 QuickTime iTunesInfo Tags ExifTool will extract any iTunesInfo tags that exist, even if they are not defined in this table. Tag ID Tag Name Writable ------ -------- -------- 'DISCNUMBER' DiscNumber N 'Encoding Params' EncodingParams QuickTime EncodingParams 'TRACKNUMBER' TrackNumber N 'iTunEXTC' ContentRating N 'iTunMOVI' iTunMOVI PLIST 'iTunNORM' VolumeNormalization N 'iTunSMPB' iTunSMPB N 'iTunes_CDDB_1' CDDB1Info N 'iTunes_CDDB_TrackNumber' CDDBTrackNumber N 'popularimeter' Popularimeter N 'tool' iTunTool N =head3 QuickTime EncodingParams Tags Tag ID Tag Name Writable ------ -------- -------- 'abrt' AudioAvailableBitRateRange N 'acbf' AudioBitRateControlMode N 'acef' AudioExtendFrequencies N 'brat' AudioCurrentTargetBitRate N 'cdcv' AudioComponentVersion N 'cmnc' AudioAvailableNumberChannels N 'init' AudioIsInitialized N 'lmrc' AudioDoesSampleRateConversion N 'mdel' AudioMinimumDelayMode N 'mnip' AudioMinimumNumberInputPackets N 'mnop' AudioMinimumNumberOutputPackets N 'oppr' AudioOutputPrecedence N 'pad0' AudioZeroFramesPadded N 'pakb' AudioMaximumPacketByteSize N 'pakd' AudioRequiresPacketDescription N 'pakf' AudioPacketFrameSize N 'prmm' AudioCodecPrimeMethod N 'srcq' AudioQualitySetting N 'tbuf' AudioInputBufferSize N 'ubuf' AudioUsedInputBufferSize N 'ursr' AudioUseRecommendedSampleRate N 'vbrq' AudioVBRQuality N 'vers' AudioEncodingParamsVersion N 'vpk?' AudioHasVariablePacketByteSizes N =head3 QuickTime Keys Tags This directory contains a list of key names which are used to decode ItemList tags written by the "mdta" handler. The prefix of "com.apple.quicktime." has been removed from all TagID's below. Tag ID Tag Name Writable ------ -------- -------- 'Encoded_With' EncodedWith N 'album' Album N 'artist' Artist N 'artwork' Artwork N 'author' Author N 'camera.framereadouttimeinmicroseconds' FrameReadoutTime N 'camera.identifier' CameraIdentifier N 'collection.user' UserCollection N 'comment' Comment N 'copyright' Copyright N 'creationdate' CreationDate N 'description' Description N 'direction.facing' CameraDirection N 'direction.motion' CameraMotion N 'director' Director N 'genre' Genre N 'information' Information N 'keywords' Keywords N 'location.ISO6709' GPSCoordinates N 'location.body' LocationBody N 'location.date' LocationDate N 'location.name' LocationName N 'location.note' LocationNote N 'location.role' LocationRole N 'make' Make N 'model' Model N 'player.movie.audio.balance' Balance N 'player.movie.audio.bass' Bass N 'player.movie.audio.gain' AudioGain N 'player.movie.audio.mute' Mute N 'player.movie.audio.pitchshift' PitchShift N 'player.movie.audio.treble' Trebel N 'player.movie.visual.brightness' Brightness N 'player.movie.visual.color' Color N 'player.movie.visual.contrast' Contrast N 'player.movie.visual.tint' Tint N 'player.version' PlayerVersion N 'producer' Producer N 'publisher' Publisher N 'rating.user' UserRating N 'software' Software N 'title' Title N 'version' Version N 'year' Year N =head3 QuickTime Movie Tags Tag ID Tag Name Writable ------ -------- -------- 'cmov' CompressedMovie QuickTime CMovie 'htka' HTCTrack QuickTime Track 'iods' InitialObjectDescriptor? N 'meta' Meta QuickTime Meta 'mvhd' MovieHeader QuickTime MovieHeader 'trak' Track QuickTime Track 'udta' UserData QuickTime UserData 'uuid' UUID-USMT QuickTime UserMedia UUID-Canon Canon uuid UUID-Unknown? N =head3 QuickTime CMovie Tags Tag ID Tag Name Writable ------ -------- -------- 'dcom' Compression N =head3 QuickTime Track Tags Tag ID Tag Name Writable ------ -------- -------- 'mdia' Media QuickTime Media 'meta' Meta QuickTime Meta 'tapt' TrackAperture QuickTime TrackAperture 'tkhd' TrackHeader QuickTime TrackHeader 'tref' TrackRef QuickTime TrackRef 'udta' UserData QuickTime UserData 'uuid' UUID-USMT QuickTime UserMedia UUID-Unknown? N =head3 QuickTime Media Tags MP4 media box. Tag ID Tag Name Writable ------ -------- -------- 'hdlr' Handler QuickTime Handler 'mdhd' MediaHeader QuickTime MediaHeader 'minf' MediaInfo QuickTime MediaInfo =head3 QuickTime MediaHeader Tags Index4 Tag Name Writable ------ -------- -------- 0 MediaHeaderVersion N 1 MediaCreateDate int32u 2 MediaModifyDate int32u 3 MediaTimeScale N 4 MediaDuration N 5 MediaLanguageCode N =head3 QuickTime MediaInfo Tags MP4 media info box. Tag ID Tag Name Writable ------ -------- -------- 'dinf' DataInfo QuickTime DataInfo 'gmhd' GenMediaHeader QuickTime GenMediaHeader 'hdlr' Handler QuickTime Handler 'hmhd' HintHeader QuickTime HintHeader 'nmhd' NullMediaHeader? N 'smhd' AudioHeader QuickTime AudioHeader 'stbl' SampleTable QuickTime SampleTable 'vmhd' VideoHeader QuickTime VideoHeader =head3 QuickTime DataInfo Tags MP4 data information box. Tag ID Tag Name Writable ------ -------- -------- 'dref' DataRef QuickTime DataRef =head3 QuickTime DataRef Tags MP4 data reference box. Tag ID Tag Name Writable ------ -------- -------- 'url ' URL N 'urn ' URN N =head3 QuickTime GenMediaHeader Tags Tag ID Tag Name Writable ------ -------- -------- 'gmin' GenMediaInfo QuickTime GenMediaInfo 'text' Text? N 'tmcd' TimeCode QuickTime TimeCode =head3 QuickTime GenMediaInfo Tags Index1 Tag Name Writable ------ -------- -------- 0 GenMediaVersion N 1 GenFlags N 4 GenGraphicsMode N 6 GenOpColor N 12 GenBalance N =head3 QuickTime TimeCode Tags Tag ID Tag Name Writable ------ -------- -------- 'tcmi' TCMediaInfo QuickTime TCMediaInfo =head3 QuickTime TCMediaInfo Tags Index1 Tag Name Writable ------ -------- -------- 4 TextFont N 6 TextFace N 8 TextSize N 12 TextColor N 18 BackgroundColor N 24 FontName N =head3 QuickTime HintHeader Tags MP4 hint media header. Index2 Tag Name Writable ------ -------- -------- 2 MaxPDUSize N 3 AvgPDUSize N 4 MaxBitrate N 6 AvgBitrate N =head3 QuickTime AudioHeader Tags MP4 audio media header. Index2 Tag Name Writable ------ -------- -------- 2 Balance N =head3 QuickTime SampleTable Tags MP4 sample table box. Tag ID Tag Name Writable ------ -------- -------- 'co64' ChunkOffset64? N 'cslg' CompositionToDecodeTimelineMapping? N 'ctts' CompositionTimeToSample? N 'padb' SamplePaddingBits? N 'sbgp' SampleToGroup? N 'sdtp' IdependentAndDisposableSamples? N 'sgpd' SampleGroupDescription? N 'stco' ChunkOffset? N 'stdp' SampleDegradationPriority? N 'stps' PartialSyncSamples N 'stsc' SampleToChunk? N 'stsd' AudioSampleDesc QuickTime AudioSampleDesc VideoSampleDesc QuickTime ImageDesc HintSampleDesc QuickTime HintSampleDesc OtherSampleDesc QuickTime OtherSampleDesc 'stsh' ShadowSyncSampleTable? N 'stss' SyncSampleTable? N 'stsz' SampleSizes? N 'stts' VideoFrameRate N TimeToSampleTable? N 'stz2' CompactSampleSizes? N 'subs' Sub-sampleInformation? N =head3 QuickTime AudioSampleDesc Tags MP4 audio sample description. This hybrid atom contains both data and child atoms. ID/Index Tag Name Writable -------- -------- -------- 4 AudioFormat N 20 AudioVendorID N 24 AudioChannels N 26 AudioBitsPerSample N 32 AudioSampleRate N 'damr' DecodeConfig QuickTime DecodeConfig 'pinf' PurchaseInfo QuickTime ProtectionInfo 'sinf' ProtectionInfo QuickTime ProtectionInfo 'wave' Wave QuickTime Wave =head3 QuickTime DecodeConfig Tags Index1 Tag Name Writable ------ -------- -------- 0 EncoderVendor N 4 EncoderVersion N =head3 QuickTime ProtectionInfo Tags Child atoms found in "sinf" and/or "pinf" atoms. Tag ID Tag Name Writable ------ -------- -------- 'frma' OriginalFormat N 'schi' SchemeInfo QuickTime SchemeInfo 'schm' SchemeType QuickTime SchemeType =head3 QuickTime SchemeInfo Tags Tag ID Tag Name Writable ------ -------- -------- 'cert' Certificate N 'iviv' InitializationVector N 'key ' KeyID N 'name' UserName N 'righ' Rights QuickTime Rights 'user' UserID N =head3 QuickTime Rights Tags Tag ID Tag Name Writable ------ -------- -------- 'aver' VersionRestrictions N 'medi' MediaFlags N 'mode' ModeFlags N 'plat' Platform N 'song' ItemID N 'tool' ItemTool N 'tran' TransactionID N 'veID' ItemVendorID N =head3 QuickTime SchemeType Tags Index1 Tag Name Writable ------ -------- -------- 4 SchemeType N 8 SchemeVersion N 10 SchemeURL N =head3 QuickTime Wave Tags Tag ID Tag Name Writable ------ -------- -------- 'frma' PurchaseFileFormat N =head3 QuickTime ImageDesc Tags ID/Index Tag Name Writable -------- -------- -------- 2 CompressorID N 10 VendorID N 16 SourceImageWidth N 17 SourceImageHeight N 18 XResolution N 20 YResolution N 25 CompressorName N 41 BitDepth N 'btrt' BitrateInfo QuickTime Bitrate 'clap' CleanAperture QuickTime CleanAperture 'colr' ColorRepresentation N 'fiel' VideoFieldOrder N 'gama' Gamma N 'pasp' PixelAspectRatio N =head3 QuickTime Bitrate Tags Index4 Tag Name Writable ------ -------- -------- 0 BufferSize N 1 MaxBitrate N 2 AverageBitrate N =head3 QuickTime CleanAperture Tags Index8 Tag Name Writable ------ -------- -------- 0 CleanApertureWidth N 1 CleanApertureHeight N 2 CleanApertureOffsetX N 3 CleanApertureOffsetY N =head3 QuickTime HintSampleDesc Tags MP4 hint sample description. ID/Index Tag Name Writable -------- -------- -------- 4 HintFormat N 16 HintTrackVersion N 20 MaxPacketSize N 'snro' SequenceNumberRandomOffset N 'tims' RTPTimeScale N 'tsro' TimestampRandomOffset N =head3 QuickTime OtherSampleDesc Tags Tag ID Tag Name Writable ------ -------- -------- 0x0004 OtherFormat N 'ftab' FontTable N =head3 QuickTime VideoHeader Tags MP4 video media header. Index2 Tag Name Writable ------ -------- -------- 2 GraphicsMode N 3 OpColor N =head3 QuickTime TrackAperture Tags Tag ID Tag Name Writable ------ -------- -------- 'clef' CleanApertureDimensions N 'enof' EncodedPixelsDimensions N 'prof' ProductionApertureDimensions N =head3 QuickTime TrackHeader Tags Index4 Tag Name Writable ------ -------- -------- 0 TrackHeaderVersion N 1 TrackCreateDate int32u 2 TrackModifyDate int32u 3 TrackID N 5 TrackDuration N 8 TrackLayer N 9 TrackVolume N 10 MatrixStructure N 19 ImageWidth N 20 ImageHeight N =head3 QuickTime TrackRef Tags Tag ID Tag Name Writable ------ -------- -------- 'chap' ChapterListTrackID N 'mpod' ElementaryStreamTrack N 'tmcd' TimeCode N =head3 QuickTime UserData Tags Tag ID's beginning with the copyright symbol (hex 0xa9) are multi-language text. Alternate language tags are accessed by adding a dash followed by the language/country code to the tag name. ExifTool will extract any multi-language user data tags found, even if they don't exist in this table. Tag ID Tag Name Writable ------ -------- -------- '@sec' SamsungSec Samsung sec 'AllF' PlayAllFrames N 'CNCV' CompressorVersion N 'CNFV' FirmwareVersion N 'CNMN' Model N 'CNOP' CanonCNOP Canon CNOP 'CNTH' CanonCNTH Canon CNTH 'DcMD' KodakDcMD Kodak DcMD 'FFMV' FujiFilmFFMV FujiFilm FFMV 'GoPr' GoProType N 'INFO' SamsungINFO Samsung INFO 'LEIC' LeicaLEIC Panasonic PANA 'LOOP' LoopStyle N 'MMA0' MinoltaMMA0 Minolta MMA 'MMA1' MinoltaMMA1 Minolta MMA 'MVTG' FujiFilmMVTG EXIF 'NCDT' NikonNCDT Nikon NCDT 'PANA' PanasonicPANA Panasonic PANA 'PENT' PentaxPENT Pentax PENT 'PXMN' MakerNotePentax5b Pentax MakerNotePentax5c Pentax MakerNotePentaxUnknown N 'PXTH' PentaxPreview Pentax PXTH 'QVMI' CasioQVMI EXIF 'RMKN' RicohRMKN EXIF 'RTHU' PreviewImage N 'SDLN' PlayMode N 'SelO' PlaySelection N 'TAGS' FujiFilmTags FujiFilm MOV KodakTags Kodak MOV KonicaMinoltaTags Minolta MOV1 MinoltaTags Minolta MOV2 NikonTags Nikon MOV OlympusTags1 Olympus MOV1 OlympusTags2 Olympus MOV2 OlympusTags3 Olympus MP4 OlympusTags4 Olympus MOV3 PentaxTags Pentax MOV SamsungTags Samsung MP4 SanyoMOV Sanyo MOV SanyoMP4 Sanyo MP4 UnknownTags? N 'WLOC' WindowLocation N 'XMP_' XMP XMP 'Xtra' MicrosoftXtra Microsoft Xtra 'albm' Album N 'albr' AlbumArtist N 'angl' CameraAngle N 'apmd' ApertureMode N 'auth' Author N 'ccid' ContentID N 'cdis' ContentDistributorID N 'chpl' ChapterList N 'clfn' ClipFileName N 'clid' ClipID N 'clsf' Classification N 'cmid' CameraID N 'cmnm' Model N 'coll' CollectionName N 'cprt' Copyright N 'cver' CodeVersion N 'cvru' CoverURI N 'date' DateTimeOriginal N 'dscp' Description N 'gnre' Genre N 'hinf' HintTrackInfo QuickTime HintTrackInfo 'hinv' HintVersion N 'hnti' HintInfo QuickTime HintInfo 'htcb' HTCBinary QuickTime HTCBinary 'icnu' IconURI N 'infu' InfoURL N 'kgtt' TrackType N 'kywd' Keywords N 'loci' LocationInformation N 'lrcu' LyricsURI N 'manu' Make N 'meta' Meta QuickTime Meta 'modl' Model N 'name' Name N 'perf' Performer N 'ptv ' PrintToVideo QuickTime Video 'reel' ReelName N 'rtng' Rating N 'scen' Scene N 'scrn' OlympusPreview Olympus scrn 'shot' ShotName N 'slno' SerialNumber N 'smta' SamsungSmta Samsung smta 'tags' Audible_tags Audible tags 'thmb' MakerNotePentax5a Pentax OlympusThumbnail Olympus thmb ThumbnailImage N ThumbnailPNG N UnknownThumbnail N 'titl' Title N 'urat' UserRating N 'vndr' Vendor N 'yrrc' Year N "\xa9ART" Artist N "\xa9alb" Album N "\xa9arg" Arranger N "\xa9ark" ArrangerKeywords N "\xa9cmt" Comment N "\xa9cok" ComposerKeywords N "\xa9com" Composer N "\xa9cpy" Copyright N "\xa9day" ContentCreateDate N "\xa9dir" Director N "\xa9ed1" Edit1 N "\xa9ed2" Edit2 N "\xa9ed3" Edit3 N "\xa9ed4" Edit4 N "\xa9ed5" Edit5 N "\xa9ed6" Edit6 N "\xa9ed7" Edit7 N "\xa9ed8" Edit8 N "\xa9ed9" Edit9 N "\xa9fmt" Format N "\xa9gen" Genre N "\xa9grp" Grouping N "\xa9inf" Information N "\xa9isr" ISRCCode N "\xa9lab" RecordLabelName N "\xa9lal" RecordLabelURL N "\xa9lyr" Lyrics N "\xa9mak" Make N "\xa9mal" MakerURL N "\xa9mod" Model N "\xa9nam" Title N "\xa9pdk" ProducerKeywords N "\xa9phg" RecordingCopyright N "\xa9prd" Producer N "\xa9prf" Performers N "\xa9prk" PerformerKeywords N "\xa9prl" PerformerURL N "\xa9req" Requirements N "\xa9snk" SubtitleKeywords N "\xa9snm" Subtitle N "\xa9src" SourceCredits N "\xa9swf" SongWriter N "\xa9swk" SongWriterKeywords N "\xa9swr" SoftwareVersion N "\xa9too" Encoder N "\xa9trk" Track N "\xa9wrt" Composer N "\xa9xyz" GPSCoordinates N =head3 QuickTime HintTrackInfo Tags Tag ID Tag Name Writable ------ -------- -------- 'dimm' ImmediateDataBytes N 'dmax' LargestPacketDuration N 'dmed' MediaTrackBytes N 'drep' RepeatedDataBytes N 'maxr' MaxDataRate N 'npck' NumPackets N 'nump' NumPackets N 'payt' PayloadType N 'pmax' LargestPacketSize N 'tmax' MaxTransmissionTime N 'tmin' MinTransmissionTime N 'totl' TotalBytes N 'tpaY' TotalBytesNoRTPHeaders N 'tpay' TotalBytesNoRTPHeaders N 'tpyl' TotalBytesNoRTPHeaders N 'trpY' TotalBytes N 'trpy' TotalBytes N =head3 QuickTime HintInfo Tags Tag ID Tag Name Writable ------ -------- -------- 'rtp ' RealtimeStreamingProtocol N 'sdp ' StreamingDataProtocol N =head3 QuickTime HTCBinary Tags Index4 Tag Name Writable ------ -------- -------- [no tags known] =head3 QuickTime Video Tags Index1 Tag Name Writable ------ -------- -------- 0 DisplaySize N 6 SlideShow N =head3 QuickTime UserMedia Tags Tag ID Tag Name Writable ------ -------- -------- 'MTDT' MetaData QuickTime MetaData =head3 QuickTime MetaData Tags Tag ID Tag Name Writable ------ -------- -------- 0x0001 Title N 0x0003 ProductionDate N 0x0004 Software N 0x0005 Product N 0x000a TrackProperty N 0x000b TimeZone N 0x000c ModifyDate N =head3 QuickTime MovieHeader Tags Index4 Tag Name Writable ------ -------- -------- 0 MovieHeaderVersion N 1 CreateDate int32u 2 ModifyDate int32u 3 TimeScale N 4 Duration N 5 PreferredRate N 6 PreferredVolume N 9 MatrixStructure N 18 PreviewTime N 19 PreviewDuration N 20 PosterTime N 21 SelectionTime N 22 SelectionDuration N 23 CurrentTime N 24 NextTrackID N =head3 QuickTime Preview Tags Index2 Tag Name Writable ------ -------- -------- 0 PreviewDate int32u 2 PreviewVersion N 3 PreviewAtomType N 5 PreviewAtomIndex N =head3 QuickTime Profile Tags Tag ID Tag Name Writable ------ -------- -------- 'APRF' AudioProfile QuickTime AudioProf 'FPRF' FileGlobalProfile QuickTime FileProf 'OLYM' OlympusOLYM Olympus OLYM 'VPRF' VideoProfile QuickTime VideoProf =head3 QuickTime AudioProf Tags Index4 Tag Name Writable ------ -------- -------- 0 AudioProfileVersion? N 1 AudioTrackID N 2 AudioCodec N 3 AudioCodecInfo? N 4 AudioAttributes N 5 AudioAvgBitrate N 6 AudioMaxBitrate N 7 AudioSampleRate N 8 AudioChannels N =head3 QuickTime FileProf Tags Index4 Tag Name Writable ------ -------- -------- 0 FileProfileVersion? N 1 FileFunctionFlags N =head3 QuickTime VideoProf Tags Index4 Tag Name Writable ------ -------- -------- 0 VideoProfileVersion? N 1 VideoTrackID N 2 VideoCodec N 3 VideoCodecInfo? N 4 VideoAttributes N 5 VideoAvgBitrate N 6 VideoMaxBitrate N 7 VideoAvgFrameRate N 8 VideoMaxFrameRate N 9 VideoSize N 10 PixelAspectRatio N =head3 QuickTime Flip Tags Found in MP4 files from Flip Video cameras. Index4 Tag Name Writable ------ -------- -------- 1 PreviewImageWidth N 2 PreviewImageHeight N 13 PreviewImageLength N 14 SerialNumber N 28 PreviewImage N =head3 QuickTime ImageFile Tags Tags used in QTIF QuickTime Image Files. Tag ID Tag Name Writable ------ -------- -------- 'idat' ImageData N 'idsc' ImageDescription QuickTime ImageDesc 'iicc' ICC_Profile ICC_Profile =head2 PLIST Tags Apple Property List tags. ExifTool reads both XML and binary-format PLIST files, and will extract any existing tags even if they aren't listed below. These tags belong to the family 0 "PLIST" group, but family 1 group may be either "XML" or "PLIST" depending on whether the format is XML or binary. Tag ID Tag Name Writable ------ -------- -------- 'MetaDataList//DateTimeOriginal' DateTimeOriginal N 'MetaDataList//Duration' Duration N 'MetaDataList//Geolocation/Latitude' GPSLatitude N 'MetaDataList//Geolocation/Longitude' GPSLongitude N 'MetaDataList//Geolocation/MapDatum' GPSMapDatum N 'XMLFileType' XMLFileType N 'cast//name' Cast N+ 'codirectors//name' Codirectors N+ 'directors//name' Directors N+ 'producers//name' Producers N+ 'screenwriters//name' Screenwriters N+ 'studio//name' Studio N+ =head2 Matroska Tags The following tags are extracted from Matroska multimedia container files. This container format is used by file types such as MKA, MKV, MKS and WEBM. For speed, ExifTool extracts tags only up to the first Cluster unless the Verbose (-v) or Unknown = 2 (-U) option is used. See L<http://www.matroska.org/technical/specs/index.html> for the official Matroska specification. Tag ID Tag Name Writable ------ -------- -------- 0x0000 ChapterDisplay Matroska 0x0003 TrackType N 0x0005 ChapterString N 0x0006 VideoCodecID N AudioCodecID N CodecID N 0x0008 TrackDefault N 0x0009 ChapterTrackNumber? N 0x000e Slices Matroska 0x000f ChapterTrack Matroska 0x0011 ChapterTimeStart N 0x0012 ChapterTimeEnd N 0x0016 CueRefTime? N 0x0017 CueRefCluster? N 0x0018 ChapterFlagHidden? N 0x001a VideoScanType N 0x001b BlockDuration? N 0x001c TrackLacing? N 0x001f AudioChannels N 0x0020 BlockGroup Matroska 0x0021 Block? N 0x0022 BlockVirtual? N 0x0023 SimpleBlock? N 0x0024 CodecState? N 0x0025 BlockAdditional? N 0x0026 BlockMore Matroska 0x0027 Position N 0x002a CodecDecodeAll N 0x002b PrevSize N 0x002e TrackEntry Matroska 0x002f EncryptedBlock? N 0x0030 ImageWidth N 0x0033 CueTime? N 0x0035 AudioSampleRate N 0x0036 ChapterAtom Matroska 0x0037 CueTrackPositions Matroska 0x0039 TrackUsed N 0x003a ImageHeight N 0x003b CuePoint Matroska 0x003f CRC-32? N 0x004b BlockAdditionalID? N 0x004c LaceNumber? N 0x004d FrameNumber? N 0x004e Delay? N 0x004f ClusterDuration? N 0x0057 TrackNumber N 0x005b CueReference Matroska 0x0060 Video Matroska 0x0061 Audio Matroska 0x0067 TimeCode? N 0x0068 TimeSlice Matroska 0x006a CueCodecState? N 0x006b CueRefCodecState? N 0x006c Void? N 0x006e BlockAddID? N 0x0071 CueClusterPosition? N 0x0077 CueTrack? N 0x007a ReferencePriority? N 0x007b ReferenceBlock? N 0x007d ReferenceVirtual? N 0x0254 ContentCompressionAlgorithm N 0x0255 ContentCompressionSettings? N 0x0282 DocType N 0x0285 DocTypeReadVersion N 0x0286 EBMLVersion N 0x0287 DocTypeVersion N 0x02f2 EBMLMaxIDLength? N 0x02f3 EBMLMaxSizeLength? N 0x02f7 EBMLReadVersion N 0x037c ChapterLanguage N 0x037e ChapterCountry N 0x0444 SegmentFamily? N 0x0461 DateTimeOriginal N 0x047a TagLanguage N 0x0484 TagDefault N 0x0485 TagBinary N 0x0487 TagString N 0x0489 Duration N 0x050d ChapterProcessPrivate? N 0x0598 ChapterFlagEnabled? N 0x05a3 TagName N 0x05b9 EditionEntry Matroska 0x05bc EditionUID? N 0x05bd EditionFlagHidden? N 0x05db EditionFlagDefault? N 0x05dd EditionFlagOrdered? N 0x065c AttachedFileData N 0x0660 AttachedFileMIMEType N 0x066e AttachedFileName N 0x0675 AttachedFileReferral? N 0x067e AttachedFileDescription N 0x06ae AttachedFileUID N 0x07e1 ContentEncryptionAlgorithm N 0x07e2 ContentEncryptionKeyID? N 0x07e3 ContentSignature? N 0x07e4 ContentSignatureKeyID? N 0x07e5 ContentSignatureAlgorithm N 0x07e6 ContentSignatureHashAlgorithm N 0x0d80 MuxingApp N 0x0dbb Seek Matroska 0x1031 ContentEncodingOrder? N 0x1032 ContentEncodingScope? N 0x1033 ContentEncodingType N 0x1034 ContentCompression Matroska 0x1035 ContentEncryption Matroska 0x135f CueRefNumber? N 0x136e TrackName N 0x1378 CueBlockNumber? N 0x137f TrackOffset? N 0x13ab SeekID? N 0x13ac SeekPosition? N 0x13b8 Stereo3DMode N 0x14aa CropBottom N 0x14b0 DisplayWidth N 0x14b2 DisplayUnit N 0x14b3 AspectRatioType N 0x14ba DisplayHeight N 0x14bb CropTop N 0x14cc CropLeft N 0x14dd CropRight N 0x15aa TrackForced N 0x15ee MaxBlockAdditionID? N 0x1741 WritingApp N 0x1854 SilentTracks Matroska 0x18d7 SilentTrackNumber N 0x21a7 AttachedFile Matroska 0x2240 ContentEncoding Matroska 0x2264 AudioBitsPerSample N 0x23a2 CodecPrivate? N 0x23c0 Targets Matroska 0x23c3 ChapterPhysicalEquivalent N 0x23c4 TagChapterUID? N 0x23c5 TagTrackUID? N 0x23c6 TagAttachmentUID? N 0x23c9 TagEditionUID? N 0x23ca TargetType N 0x2532 SignedElement? N 0x2624 TrackTranslate Matroska 0x26a5 TrackTranslateTrackID? N 0x26bf TrackTranslateCodec N 0x26fc TrackTranslateEditionUID? N 0x27c8 SimpleTag Matroska 0x28ca TargetTypeValue N 0x2911 ChapterProcessCommand Matroska 0x2922 ChapterProcessTime? N 0x2924 ChapterTranslate Matroska 0x2933 ChapterProcessData? N 0x2944 ChapterProcess Matroska 0x2955 ChapterProcessCodecID? N 0x29a5 ChapterTranslateID? N 0x29bf ChapterTranslateCodec N 0x29fc ChapterTranslateEditionUID? N 0x2d80 ContentEncodings Matroska 0x2de7 MinCache? N 0x2df8 MaxCache? N 0x2e67 ChapterSegmentUID? N 0x2ebc ChapterSegmentEditionUID? N 0x2fab TrackOverlay? N 0x3373 Tag Matroska 0x3384 SegmentFileName N 0x33a4 SegmentUID? N 0x33c4 ChapterUID? N 0x33c5 TrackUID? N 0x3446 TrackAttachmentUID N 0x35a1 BlockAdditions Matroska 0x38b5 OutputAudioSampleRate N 0x3ba9 Title N 0x3d7b ChannelPositions? N 0x3e5b SignatureElements Matroska 0x3e7b SignatureElementList Matroska 0x3e8a SignatureAlgo N 0x3e9a SignatureHash N 0x3ea5 SignaturePublicKey? N 0x3eb5 Signature? N 0x2b59c TrackLanguage N 0x3314f TrackTimecodeScale N 0x383e3 FrameRate N 0x3e383 VideoFrameRate N DefaultDuration N 0x58688 VideoCodecName N AudioCodecName N CodecName N 0x6b240 CodecDownloadURL N 0xad7b1 TimecodeScale N 0xeb524 ColorSpace? N 0xfb523 Gamma N 0x1a9697 CodecSettings N 0x1b4040 CodecInfoURL N 0x1c83ab PrevFileName N 0x1cb923 PrevUID? N 0x1e83bb NextFileName N 0x1eb923 NextUID? N 0x43a770 Chapters Matroska 0x14d9b74 SeekHead Matroska 0x254c367 Tags Matroska 0x549a966 Info Matroska 0x654ae6b Tracks Matroska 0x8538067 SegmentHeader Matroska 0x941a469 Attachments Matroska 0xa45dfa3 EBMLHeader Matroska 0xb538667 SignatureSlot Matroska 0xc53bb6b Cues Matroska 0xf43b675 Cluster Matroska =head2 MOI Tags MOI files store information about associated MOD or TOD files, and are written by some JVC, Canon and Panasonic camcorders. Index1 Tag Name Writable ------ -------- -------- 0 MOIVersion N 6 DateTimeOriginal N 14 Duration N 128 AspectRatio N 132 AudioCodec N 134 AudioBitrate N 218 VideoBitrate N =head2 MXF Tags Tags extracted from Material Exchange Format files. Tag ID's are not listed because they are bulky 16-byte binary values. Tag Name Writable -------- -------- AAFManufacturerID? N AES3PCMDescriptor MXF AFDAndBarData? N AGICOAID? N AICI? N AIFCSummary? N ANCPacketCount N ANCPayloadByteArray N ANCPayloadSampleCoding N ANCPayloadSampleCount N ANCWrappingType N Abstract N Abstract N AccountingReferenceNumber N ActiveFormatDescriptor N ActiveLinesperFrame N ActiveSamplesperLine N ActiveState N Ad-ID? N Address MXF AddressLine N AddressLine N AddressNameValueSets? N AddressSets? N AdvertisingMaterialReference N AestheticValue N AlphaMaximumRef N AlphaMinimumRef N AlphaSampleDepth N AlphaTransparency N AlternateName N AlternateName N Alternates? N AnalogDataCodingKind N AnalogMetadataCarrier N AnalogMonitoringAndControlCodingKind N AnalogSystem N AnalogVideoSystemName N AnalogVideoSystemName? N AnamorphicLensCharacteristic N AnchorOffset N AncillaryResourceID? N AngleToNorth N AngularUnitKind N Annotation? N Annotation MXF AnnotationCueWordsSet? N AnnotationDescription N AnnotationDescription N AnnotationKind N AnnotationKind N AnnotationParticipantSets? N AnnotationSets? N AnnotationSynopsis N AnnotationSynopsis N ApplicationEnvironmentID N ApplicationInformationArray? N ApplicationName N ApplicationName N ApplicationPlatform N ApplicationPlatform N ApplicationPlug-InBatch? N ApplicationPlug-InInstanceID? N ApplicationProductID? N ApplicationScheme? N ApplicationSchemeBatch? N ApplicationSupplierName N ApplicationSupplierName N ApplicationVersionNumber N ApplicationVersionString N ApplicationVersionString N ApproximateImageContainerSize N ArchiveID N AssetValue N AssignedCategoryName N AssignedCategoryName N AssignedCategoryValue N AssignedCategoryValue N AssociatedMetadataDefinition? N AstronomicalBodyName N AstronomicalBodyName N AudienceAppreciation N AudienceRating N AudienceReach N AudienceShare N AudioAverageBitrate N AudioCodingSchemeCode N AudioCodingSchemeID? N AudioCodingSchemeName N AudioCompressionAlgorithm N AudioDeviceKind N AudioDeviceParameter N AudioDeviceParameterSetting N AudioEnhancementOrModificationDescription N AudioFirstMix-DownProcess N AudioFixedBitrateFlag N AudioMonoChannelCount N AudioNoiseReductionAlgorithm N AudioReferenceLevel N AudioReferenceLevel N AudioSampleRate N AudioSampleRate N AudioStereoChannelCount N AudioWatermarkKind N AuthenticationFlag N AuxiliaryBitsMode N AvailableRepresentations? N AverageBytesPerSecond N Award MXF AwardCategory N AwardCategory N AwardName N AwardName N AwardParticipantSets? N AwardSets? N BICI? N BackgroundMusicFlag N BankDetailsSet? N BeginAnchor N BeginAnchor N BextCodingHistory N BextCodingHistory N Bitrate N BitsPerAudioSample N BitsPerPixel N BitsPerPixel N BitsPerSample N BlackReferenceLevel N BlockAlign N BlockContinuityCount N BlockStartOffset N BoundingRectangle? N BrandMainTitle N BrandMainTitle N BrandOriginalTitle N BrandOriginalTitle N Branding MXF BrandingSets? N BroadcastChannel N BroadcastDate N BroadcastMediumCode N BroadcastMediumKind N BroadcastOrganizationName N BroadcastOrganizationName N BroadcastRegion N BroadcastRegion N BroadcastServiceName N BroadcastTime N BroadcasterRightsToCopy N BufferDelay? N BuildingName N BuildingName N Bypass N BypassOverride N ByteOffset N ByteOrder N CBEStartOffset N CDCIEssenceDescriptor MXF CISACLegalEntityID? N CaptionDescription MXF CaptionDescriptionSets? N CaptionKind N CaptionKind N CaptionTitles N CaptionsDescriptionParticipantSets? N CaptionsViaTeletext N CaptureAspectRatio N CaptureFilmFrameRate N CaptureGammaEquation N CaptureGammaEquation N CaptureGammaEquation? N CatalogDataStatus N CatalogDataStatus N CatalogPrefixNumber N CatalogingSystemName N CentralTelephoneNumber N ChannelAssignment? N ChannelCount N ChannelHandle N ChannelID N ChannelIDs N ChannelStatusMode N CipherAlgorithm? N CipherAlgorithmAES128CBC? N Citizenship N Citizenship N CityName N CityName N ClassDefinitions? N Classification MXF ClassificationAndMarkingSystem N ClassificationComment N ClassificationComment N ClassificationNameValueSets? N ClassificationReason N ClassificationSets? N ClassifiedBy N ClassifyingCountryCode N ClipCreationDateTime N ClipFramework MXF ClipID N ClipIDArray? N ClipKind N ClipNumber N ClipNumber N ClipShotSets? N CloneCount N ClosedBodyPartition? N ClosedCaptionSubtitlesFlag N ClosedCompleteBodyPartition? N ClosedCompleteHeader MXF Header ClosedGOPIndicator N ClosedHeader MXF Header CodecDefinition? N CodecDefinition? N CodecDefinitions? N CodecEssenceDescriptor? N CodecEssenceKinds? N CodedContentScanningKind N CodingLawKind N CodingLawName N CodingStyleDefault? N CollectionName N CollectionName N ColorDescriptor N ColorDescriptor N ColorFieldCode N ColorPrimaries N ColorPrimaries? N ColorRangeLevels N ColorSiting N ColorimetryCode N ColorimetryCode? N CommunicationSets? N Communications MXF CompleteFooter? N ComponentAttributes? N ComponentDataDefinition N ComponentDepth N ComponentKLVData? N ComponentMaximumRef N ComponentMinimumRef N ComponentUserComments? N ComponentsInSequence? N CompositionRendering? N ComputedKeyData N ComputedKeyFrames N ComputedKeySounds N ComputedKeywords N ComputedKeywords N ComputedObjectKind N ComputedObjectKind N ComputedStratumKind N ConstantBPictureFlag N ConsumerRightsToCopy N ContactDepartmentName N ContactDepartmentName N ContactID? N ContactKind N ContactKind N ContactNameValueSets? N ContactsList MXF ContactsListSet? N ContainerDefinitions? N ContainerLastModifyDate N ContainerVersion N ContentClassification N ContentClassification N ContentCodingSystem N ContentMaturityDescription N ContentMaturityGraphic N ContentMaturityRating N ContentPackageIndexArray? N ContentPackageMetadataLink N ContentStorage? N ContentStorageSet MXF ContentValue N ContextDescription N ContiguousDataFlag N Contract MXF ContractClauseDescription N ContractClauseDescription N ContractDateTime N ContractEntity N ContractInstallmentPercentage N ContractLineCode N ContractLineName N ContractLineName N ContractParticipantSets? N ContractSets? N ContractTermsOfBusiness N ContractTermsOfBusiness N ContractType N ContractType N ContractTypeCode N ContractTypeLink N ContributionStatus N ContributionStatus N ControlPointList? N ControlPointTime N CopyCount N CopyrightLicenseCountryCode N CopyrightLicenseRegionCode N CopyrightLicenseRegionName N CopyrightOwnerName N CopyrightOwnerName N CopyrightStatus N CopyrightStatus N CornerLatitudePoint1 N CornerLatitudePoint1 N CornerLatitudePoint2 N CornerLatitudePoint2 N CornerLatitudePoint3 N CornerLatitudePoint3 N CornerLatitudePoint4 N CornerLatitudePoint4 N CornerLongitudePoint1 N CornerLongitudePoint1 N CornerLongitudePoint2 N CornerLongitudePoint2 N CornerLongitudePoint3 N CornerLongitudePoint3 N CornerLongitudePoint4 N CornerLongitudePoint4 N CountryCodeMethod N CountryCodeMethod N CountryName N CountryName N CountryName N CountryName N CreateDate N CryptographicContext MXF CryptographicContextID? N CryptographicContextLink? N CryptographicContextObject? N CryptographicFramework MXF CryptographicFrameworkLabel? N CryptographicKeyID? N Csiz N Cue-InWords N Cue-InWords N Cue-OutWords N Cue-OutWords N CueWords MXF CulturalValue N CurrencyCode N CurrencyName N CurrentNumberInSequence N CurrentNumberInSequence N CurrentRepeatNumber N CutPoint N DMFramework MXF DMSegment MXF DMSet MXF DMSourceClip MXF DOI? N DVBParentalRating N DataDefinition? N DataDefinitions? N DataDeviceKind N DataDeviceParameterName N DataDeviceParameterSetting N DataEnhancementOrModificationDescription N DataEssenceCoding N DataEssenceCodingID? N DateTimeDropFrameFlag N DateTimeEmbeddedFlag N DateTimeKind? N DateTimeRate N DeclassificationDate N DefaultDataValue? N DefaultFadeDuration N DefaultFadeEditRate N DefaultFadeType? N DefaultNamespaceURI N DefaultNamespaceURI N DefaultObject? N DefinedName N DefinedName N DefinitionObjectID? N DefinitionObjectName N DefinitionObjectName N DegradedEffects? N DeltaEntryArray? N DerivedFrom N Description N Description N DescriptionKind N DescriptionKind N DescriptiveComment N DescriptiveComment N DescriptiveMetadataApplicationEnvironmentID N DescriptiveMetadataFramework? N DescriptiveMetadataPlug-InID? N DescriptiveMetadataScheme? N DescriptiveMetadataSchemes? N DescriptiveMetadataSetReferences? N DescriptiveMetadataSets? N DescriptiveMetadataTrackIDs N DeviceAbsoluteHeading N DeviceAbsolutePositionalAccuracy N DeviceAbsoluteSpeed N DeviceAltitude N DeviceAltitude N DeviceAssetNumber N DeviceDesignation N DeviceIDKind N DeviceKind N DeviceKind N DeviceKindCode N DeviceLatitude N DeviceLatitude N DeviceLatitude N DeviceLongitude N DeviceLongitude N DeviceLongitude N DeviceManufacturerName N DeviceManufacturerName N DeviceModel N DeviceParameterNameValueSets? N DeviceParameters MXF DeviceParametersSets? N DeviceRelativeHeading N DeviceRelativePositionX N DeviceRelativePositionY N DeviceRelativePositionZ N DeviceRelativePositionalAccuracy N DeviceRelativeSpeed N DeviceSerialNumber N DeviceUsageDescription N DeviceUsageDescription N DeviceXDimension N DeviceYDimension N DialNorm N Dictionary? N DictionaryDescription N DictionaryDescription N DictionaryIdentifier? N DigitalEncodingBitrate N DigitalMetadataCarrier N DigitalOrAnalogOrigination N DigitalVideoFileFormat N DirectorName N DiscPartitionCapacity N DisplayF2Offset N DisplayHeight N DisplayUnits N DisplayUnits N DisplayWidth N DisplayXOffset N DisplayYOffset N Dither N DropFrame N Duration N DynamicSourcePackageID? N DynamicSourceTrackIDs N E-mailAddress N E-mailAddress N EPGProgramSynopsis N EdgeCode N EdgeCodeFilmGauge? N EdgeCodeFormat? N EdgeCodeHeader? N EdgeCodeStart N EditHint? N EditRate N EditUnitFlags N EditUnitLength N EditingEventComment N EditingEventComment N EffectRendering? N ElectrospatialFormulation N ElementCount N ElementDelta N ElementLength N ElementNameList N Emphasis N EncryptedContainerLabel? N EncryptedSourceValue? N EncryptedTrackFileID? N EndAnchor N EndAnchor N EnhancementOrModificationDescription N EnumerationUnderlyingIntegerType? N EpisodeEndNumber N EpisodeNumber N EpisodeNumber N EpisodeStartNumber N EpisodicItemSets? N EssenceContainerArray? N EssenceContainerDataSet MXF EssenceContainerFormat? N EssenceContainerFormat? N EssenceContainers? N EssenceData? N EssenceDescription? N EssenceIsIdentified N EssenceLength N EssenceLocators? N EssenceStreamID N Event MXF EventAbsoluteDuration N EventAbsoluteDuration? N EventAbsoluteDurationFrameCount N EventAnnotationSets? N EventElapsedTimeToEnd N EventElapsedTimeToStart N EventEndTimeOffset N EventEndTimecodeOffset? N EventIndication N EventIndication N EventOrigin N EventSets? N EventStart N EventStartTimeOffset N EventStartTimecodeOffset? N EventTrack MXF EventTrackEditRate N ExCCIData? N ExposedAspectRatio N ExtendedCaptionsLanguageCode N ExtendedClipID N ExtendedClipIDArray? N ExtendedTextLanguageCode N ExtendibleElementNameList N FNumber N Fade-InDuration N Fade-InType? N Fade-OutDuration N Fade-OutType? N FamilyName N FamilyName N FaxNumber N FaxNumber N FemaleLeadActressName N FestivalName N FestivalName N FieldDominance N FieldFrameTypeCode N FieldOfViewHorizontal N FieldOfViewHorizontal N FieldOfViewVertical N FieldOfViewVerticalFP N FieldRate N FileDescriptor MXF FileDescriptors? N FileSecurityReport N FileSecurityWave N FillerData? N FilmBatchNumber N FilmBatchNumber N FilmCaptureAperture N FilmColorProcess N FilmFormatName N FilmFormatName N FilmFormatName? N FilmGauge? N FilmStockKind N FilmStockKind N FilmStockManufacturerName N FilmStockManufacturerName N FilmTestParameter N FilmTestResult N FilmTestResult? N FilmToVideoTransferDirection? N FilmToVideoTransferKind? N FilmToVideoTransferPhase? N FilteringApplied N FilteringCode N FirstBroadcastFlag N FirstGivenName N FirstGivenName N FirstNumberInSequence N FirstNumberInSequence N FirstTransmissionInfo N FixedArrayElementType? N FixedChannelStatusData? N FixedUserData? N FocalLength N FocalLength N Footer? N FormatDescriptor N FormatDescriptor N FormerFamilyName N FormerFamilyName N FrameCenterElevation N FrameCenterLatitude N FrameCenterLatitude N FrameCenterLatitude N FrameCenterLatitudeLongitude N FrameCenterLongitude N FrameCenterLongitude N FrameCenterLongitude N FrameCode N FrameCount N FrameCountOffset N FrameLayout N FramePositionalAccuracy N FrameRate N FrameworkExtendedTextLanguageCode N FrameworkTextLanguageCode N FrameworkThesaurusName N FrameworkThesaurusName N FrameworkTitle N FrameworkTitle N GenerationCloneNumber N GenerationCopyNumber N GenerationID? N GenericDataEssenceDescriptor MXF GenericPackage MXF GenericPayloads? N GenericPictureEssenceDescriptor MXF GenericSoundEssenceDescriptor MXF GenericTrack MXF Genre N Genre N GeographicAreaNorthwest? N GeographicAreaSourceDatum N GeographicAreaSoutheast? N GeographicLocation? N GeographicPolygonCoordinates? N GeographicPolygonSourceDatum N GeographicalCoordinates? N GlobalNumber N GraphicKind N GraphicUsageKind N GraphicUsageKind N GroupRelationship MXF GroupSet? N GroupSets? N GroupSynopsis N GroupSynopsis N HMACAlgorithmSHA1128? N HTMLDOCTYPE N HTMLDOCTYPE N HTMLMetaDescription N HTMLMetaDescription N HardwareAcceleratorFlag N HasAudioWatermark N HasVideoWatermark N HeaderByteCount N HistoricalValue N HonorsAndQualifications N HonorsAndQualifications N HorizontalActionSafePercentage N HorizontalDatum N HorizontalGraphicsSafePercentage N HorizontalSubsampling N IBTN? N IEEEDeviceID N IEEEManufacturerID N ISAN? N ISBD? N ISBN? N ISCI? N ISMN? N ISO3166CountryCode N ISO639-1LanguageCode N ISO639-1LanguageCode N ISO639CaptionsLanguageCode N ISO639TextLanguageCode N ISRC? N ISRN? N ISSN? N ISTC? N ISWC? N IdenticalGOPIndicator N Identification MXF Identification MXF IdentificationList? N IdentificationSets? N IdentificationUL? N IdentifierIssuingAuthority N IdentifierIssuingAuthority N IdentifierKind N IdentifierValue N ImageAlignmentOffset N ImageCategory N ImageCoordinateSystem N ImageEndOffset N ImageFormatSet? N ImageHeight N ImageSourceDeviceKind N ImageSourceDeviceKind N ImageStartOffset N ImageWidth N IncludeSync N IndexByteCount N IndexDuration N IndexEditRate N IndexEntryArray? N IndexStreamID N IndexTableSegment? N IndexingStartPosition N IndividualAwardName N InkNumber N InputSegment? N InputSegmentCount N InputSegments? N InsertMusicFlag N InstallmentNumber N InstanceUID? N IntegrationIndication N IntegrationIndication N IntellectualPropertyDescription N IntellectualPropertyDescription N IntellectualPropertyLicenseCountryCode N IntellectualPropertyLicenseRegionCode N IntellectualPropertyLicenseRegionName N IntellectualPropertyRights N IntellectualPropertyRights N IntendedAFD N IntentDescriptor N IntentDescriptor N InterestedPartyName N Interpolation? N InterpolationDefinitions? N IsConcrete N IsDubbed N IsLiveProduction N IsLiveTransmission N IsOptional N IsRecording N IsRepeat N IsSearchable N IsSigned N IsUniqueIdentifier N IsVoiceover N ItemDesignatorID? N ItemID N ItemName N ItemName N ItemValue N ItemValue N JFIFMarkerDescription N JFIFMarkerDescription N JPEG2000PictureSubDescriptor MXF JPEGTableID? N JobFunctionCode N JobFunctionName N JobFunctionName N JobTitle N JobTitle N Jurisdiction N Jurisdiction N KAGSize N KLVDataDefinitions? N KLVDataParentProperties? N KLVDataType? N KLVDataValue? N KLVMetadataSequence? N KeyCode? N KeyData N KeyDataOrProgram N KeyFrame N KeyFrameSampleCount N KeyFrames N KeyPoint MXF KeyPointSets? N KeySound N KeySounds N KeyText N KeyTimePoint N KeypointKind N KeypointKind N KeypointValue N KeypointValue N Keywords N Keywords N LUID N LanguageName N LanguageName N LastNumberInSequence N LastNumberInSequence N LayerNumber N LeadingLines N LengthSystemName N LengthUnitKind N LicenseOptionsDescription N LineNumber N LinkedApplicationPlug-InInstanceID? N LinkedDescriptiveFrameworkPlug-InID? N LinkedDescriptiveObjectPlug-InID? N LinkedGenerationID? N LinkedPackageID? N LinkedTimecodeTrackID? N LinkedTrackID N LinkingName N LinkingName N LocalCreationDateTime N LocalDatumAbsolutePositionAccuracy N LocalDatumRelativePositionAccuracy N LocalEndDateTime N LocalEventEndDateTime N LocalEventEndDateTime N LocalEventStartDateTime N LocalEventStartDateTime N LocalFestivalDateTime N LocalFilePath N LocalFilePath N LocalID N LocalLastModifyDate N LocalModifyDate N LocalStartDateTime N LocalTagEntries? N LocalTagUniqueID? N LocalTagValue N LocalTapeNumber N LocalTargetID N LocalTargetID N LocalUserDateTime N Location MXF LocationDescription N LocationDescription N LocationKind N LocationKind N LocationSets? N LockedIndicator N LogoFlag N LowDelayIndicator N LumaEquation N LuminanceSampleRate N MIC? N MICAlgorithm? N MIMECharSet N MIMECharSet N MIMEEncoding N MIMEEncoding N MIMEMediaType N MIMEMediaType N MPEG2VideoDescriptor MXF MPEG7BiMAccessUnitFrame1? N MPEG7BiMAccessUnitFrame2? N MPEG7BiMAccessUnitFrame3? N MPEG7BiMAccessUnitFrame4? N MPEG7BiMAccessUnitFrame5? N MPEG7BiMAccessUnitFrame6? N MPEG7BiMAccessUnitFrame7? N MPEG7BiMAccessUnitFrame8? N MPEG7BiMDecoderInitFrame1? N MPEG7BiMDecoderInitFrame2? N MPEG7BiMDecoderInitFrame3? N MPEG7BiMDecoderInitFrame4? N MPEG7BiMDecoderInitFrame5? N MPEG7BiMDecoderInitFrame6? N MPEG7BiMDecoderInitFrame7? N MPEG7BiMDecoderInitFrame8? N MPEGAudioBitrate N MPEGAudioRecodingDataset? N MPEGVideoRecodingDataset? N MagneticDiskNumber N MagneticTrack N MainCatalogNumber N MainName N MainName N MainSponsorName N MainTitle N MainTitle N MajorVersion N MaleLeadActorName N ManufacturerID? N ManufacturerInformationObject? N MapDatumUsed N MarkIn N MarkOut N MaterialAbsoluteDuration N MaterialAbsoluteDuration? N MaterialEndTimeOffset N MaterialEndTimecodeOffset? N MaterialPackage MXF MaximumAPIVersion N MaximumBPictureCount N MaximumGOPSize N MaximumSupportedEngineVersion N MaximumSupportedPlatformVersion N MaximumUseCount N MediaLocation N MemberNameList N MemberTypes? N MetadataEncodingSchemeCode N MetadataItemName N MetadataItemName N MetadataServerLocators? N MicrophonePlacementTechniques N MinimumAPIVersion N MinimumSupportedEngineVersion N MinimumSupportedPlatformVersion N MinorVersion N MissionID N MissionID N MobileTelephoneNumber N ModifyDate N MonoSourceTrackIDs N MultipleDescriptor MXF NITFLayerTargetID N NITFLayerTargetID N NMEADocumentText N NOLACode N NameSuffix N NameSuffix N NameValue MXF NamespacePrefix N NamespacePrefix N NamespacePrefixes N NamespacePrefixes N NamespaceURI N NamespaceURI N NamespaceURIs N NamespaceURIs N Nationality N Nationality N NatureOfPersonality N NatureOfPersonality N NetworkLocator MXF NextNumberInSequence N NextNumberInSequence N NielsenStreamIdentifier N NominationCategory N NominationCategory N Non-USClassifyingCountryCode N ObjectAreaDimension N ObjectClass? N ObjectClassDefinition? N ObjectCountryCode N ObjectCountryCode N ObjectCountryCodeMethod N ObjectDescription N ObjectDescription N ObjectDescriptionCode N ObjectHorizontalAverageDimension N ObjectIdentificationConfidence N ObjectKind N ObjectKind N ObjectModelVersion N ObjectName N ObjectRegionCode N ObjectRegionName N ObjectVerticalAverageDimension N ObliquityAngle N OffsetToIndexTable N OffsetToIndexTable N OffsetToMetadata N OffsetToMetadata N OpenBodyPartition? N OpenCompleteBodyPartition? N OpenCompleteHeader MXF Header OpenHeader MXF Header OperatingSystemInterpretations N OperationCategory? N OperationDataDefinition? N OperationDefinitionID? N OperationDefinitions? N OperationParameters? N OperationalPatternUL? N OpticalDiscNumber N OpticalTestParameterName N OpticalTestResult N OpticalTestResult N OpticalTrack N Organisation MXF OrganizationCode N OrganizationCode N OrganizationID N OrganizationID N OrganizationIDKind N OrganizationIDKind N OrganizationKind N OrganizationKind N OrganizationMainName N OrganizationMainName N OrganizationSets? N OrganizationalProgramNumber N OrganizationalProgramNumber N Origin N OriginCode N OriginalExtendedSpokenPrimaryLanguageCode N OriginalProducerName N OriginalProducerName N OriginalTitle N OriginalTitle N OtherGivenNames N OtherGivenNames N OtherValues N PII? N POSIXMicroseconds N PURL N PackLength N PackageAttributes? N PackageID? N PackageKLVData? N PackageLastModifyDate N PackageMarkInPosition N PackageMarkOutPosition N PackageMarker? N PackageName N PackageName N PackageTimelineMarkerRef? N PackageTracks? N PackageUsageKind? N PackageUserComments? N Packages? N PaddingBits N Palette? N PaletteLayout? N PanScanInformation? N ParameterDataType? N ParameterDefinition? N ParameterDefinitions? N Parameters? N ParentClass? N Participant MXF ParticipantID? N ParticipantOrganizationSets? N PartitionMetadata? N Password N Password N PayeeAccountName N PayeeAccountNumber N PayeeAccountSortCode N PayerAccountName N PayerAccountNumber N PayerAccountSortCode N PaymentDueDateTime N PaymentsSets? N PeakChannelCount N PeakEnvelope N PeakEnvelopeBlockSize N PeakEnvelopeData? N PeakEnvelopeData? N PeakEnvelopeFormat N PeakEnvelopeTimestamp N PeakEnvelopeVersion N PeakFrameCount N PeakOfPeaksPosition N PerceivedDisplayFormatCode N PerceivedDisplayFormatName N PerforationsPerFrame N PerforationsPerFrame N Person MXF PersonDescription N PersonDescription N PersonOrganizationSets? N PersonSets? N PhysicalInstanceKind N PhysicalMediaLength? N PhysicalMediaLocation N PictureComponentSizing? N PictureDisplayRate N PictureFormat MXF PixelLayout? N PlaceKeyword N PlaceKeyword N PlaceName N PlaceName N PlaintextOffset N PlatformDesignation N PlatformDesignation N PlatformHeadingAngle N PlatformModel N PlatformPitchAngle N PlatformRollAngle N PlatformSerialNumber N Plug-InAPIID? N Plug-InCategoryID? N Plug-InDefinitions? N Plug-InEngineID? N Plug-InLocatorSet? N Plug-InPlatformID? N PointsPerPeakValue N PolarCharacteristic N PosTableArray? N PositionInSequence N PositionTable? N PositionTableCount N PositionTableIndexing N PositionWithinViewportImageXCoordinate N PositionWithinViewportImageYCoordinate N PostCodeForPostbox N PostalCode N PostalCode N PostalTown N PostalTown N PostboxNumber N Preface MXF PresentationAspectRatio N PresentationGammaEquation N PresentationGammaEquation? N PresenterName N PreviousNumberInSequence N PreviousNumberInSequence N PreviousRepeatNumber N PrimaryExtendedSpokenLanguageCode N PrimaryOriginalLanguageCode N PrimaryPackage? N PrimarySpokenLanguageCode N Primer MXF Processing MXF ProcessingSet? N ProducerName N ProductFormat N ProductFormat N ProductionFramework MXF ProductionOrganizationRole N ProductionOrganizationRole N ProductionScriptReference N ProductionScriptReference N ProductionSettingPeriodSets? N ProfileAndLevel N ProgramAwardName N ProgramCommercialMaterialReference N ProgramIdentifier N ProgramIdentifierString N ProgramKind N ProgramMaterialClassificationCode N ProgramNumber N ProgramSupportMaterialReference N ProgrammingGroupKind N ProgrammingGroupKind N ProgrammingGroupTitle N ProgrammingGroupTitle N ProjectName N ProjectName N ProjectNumber N ProjectSet? N Projects MXF Properties? N PropertyType? N Publication MXF PublicationSets? N PublishingMediumName N PublishingMediumName N PublishingOrganizationName N PublishingOrganizationName N PublishingRegionName N PublishingRegionName N PublishingServiceName N PublishingServiceName N PulldownFieldDominance N PulldownSequence? N PurchaserAccountName N PurchaserAccountName N PurchaserAccountNumber N PurchaserIdentificationKind N PurchaserIdentificationValue N PurchasingDepartment N PurchasingOrganizationName N Purpose N Purpose N QltyBasicData N QltyBasicData N QltyCueSheet N QltyCueSheet N QltyEndOfModulation N QltyEndOfModulation N QltyOperatorComment N QltyOperatorComment N QltyQualityEvent N QltyQualityEvent N QltyQualityParameter N QltyQualityParameter N QltyStartOfModulation N QltyStartOfModulation N QualityFlag N QuantizationDefault? N RGBAEssenceDescriptor MXF RIFFChunkData? N RIFFChunkID N RIFFChunkLength N RP217DataStreamPID N RP217VideoStreamPID N RandomIndexMetadata? N RandomIndexMetadataV10? N Rating N RecordedFormat N RecordedFormat N RecordedTrackNumber N RecordingLabelName N RecordingLabelName N ReelOrRollNumber N RegionCode N RegionName N RegionName N RegisterAction N RegisterAdministrationArray? N RegisterAdministrationNotes N RegisterAdministrationObject? N RegisterApproverName N RegisterChildEntryArray? N RegisterCreationTime N RegisterEditorName N RegisterEntryAdministrationObject? N RegisterEntryArray? N RegisterEntryStatus? N RegisterItemDefiningDocumentName N RegisterItemDefinition N RegisterItemHierarchyLevel N RegisterItemIntroductionVersion N RegisterItemName N RegisterItemNotes N RegisterItemOriginatorName N RegisterItemStatusChangeDateTime N RegisterItemSymbol? N RegisterItemUL? N RegisterKind? N RegisterReleaseDateTime N RegisterStatusKind? N RegisterUserName N RegisterUserTime N RegisterVersion N RegistrantName N RelatedMaterialDescription N RelatedMaterialDescription N RelatedMaterialLocators? N RelativePositionInSequenceName N RelativePositionInSequenceOffset N RelativeScope N RelativeTrack N ReleasableCountryCode N ReleasableCountryCode N RenamedType? N ResourceID? N RestrictionsonUse N ReversePlay N ReversedByteOrder N Rights MXF RightsComment N RightsComment N RightsConditionDescription N RightsConditionDescription N RightsManagementAuthority N RightsManagementAuthority N RightsSets? N RightsStartDateTime N RightsStopDateTime N Rightsholder N Rightsholder N RoleName N RoleName N RoomNumber N RoomNumber N RoomOrSuiteName N RoomOrSuiteName N RootFormatVersion N RootMetaDictionary? N RootObjectDirectory? N RootPreface? N RoundedCaptureFilmFrameRate N RoundedTimecodeTimebase N RoundingLaw N RoundingMethodCode N RoyaltyIncomeInformation N RoyaltyPaymentInformation N Rsiz N SDKVersion N SICI? N SMPTE12MUserDateTime? N SMPTE309MUserDateTime? N SMPTE337MDataStreamNumber N SMPTEUL? N SalesContractNumber N Salutation N Salutation N SampleIndex? N SampleRate N SampledHeight N SampledWidth N SampledXOffset N SampledYOffset N SamplingHierarchyCode N SamplingStructureCode N ScanningDirection N SceneFramework MXF SceneNumber N SceneNumber N SceneSettingPeriodSets? N SceneShotSets? N ScramblingKeyKind N ScramblingKeyValue N Scripting MXF ScriptingKind N ScriptingKind N ScriptingLocators? N ScriptingSets? N ScriptingText N ScriptingText N SeasonEpisodeNumber N SeasonEpisodeTitle N SecondGivenName N SecondGivenName N SecondaryExtendedSpokenLanguageCode N SecondaryOriginalExtendedSpokenLanguageCode N SecondaryOriginalLanguageCode N SecondarySpokenLanguageCode N SecondaryTitle N SecondaryTitle N SectorSize N SecurityClassification N SecurityClassification N SecurityClassificationCaveats N SecurityClassificationCaveats N Selected? N SensorMode N SensorRollAngle N SensorSize N SensorType N SensorTypeCode N Sequence? N SequenceOffset N SequenceSet MXF SeriesNumber N SeriesNumber N SeriesinaSeriesGroupCount N SetElementType? N SettingCityName N SettingCityName N SettingCountryCode N SettingCountryName N SettingCountryName N SettingDateTime N SettingDescription N SettingDescription N SettingPeriod MXF SettingPeriodDescription N SettingPeriodDescription N SettingPostalCode N SettingPostalCode N SettingRegionCode N SettingRegionName N SettingRoomNumber N SettingRoomNumber N SettingStateOrProvinceOrCountyName N SettingStateOrProvinceOrCountyName N SettingStreetName N SettingStreetName N SettingStreetNumberOrBuildingName N SettingStreetNumberOrBuildingName N SettingTownName N SettingTownName N ShimName N ShootingCountryCode N ShootingRegionCode N ShootingRegionName N Shot MXF ShotComment N ShotComment N ShotCommentKind N ShotCommentKind N ShotCueWordsSet? N ShotDescription N ShotDescription N ShotDuration N ShotList N ShotLocationSets? N ShotParticipantRoleSets? N ShotPersonSets? N ShotStartPosition N ShotTrackIDs N SideNumber N Signal-to-NoiseRatio N SignalFormCode N SignalStandard N SignalStandard N SignatureTuneFlag N SimpleFlaggingCount N SingleSequenceFlag N Size N SlantRange N SlateInformation N SlateTitle N SliceCount N SliceNumber N SliceOffsetList? N Software-OnlySupportFlag N SourceClip? N SourceContainerFormat? N SourceImageCenterXCoordinate N SourceImageCenterYCoordinate N SourceIndex? N SourceKey? N SourceLength N SourceOrganization N SourceOrganization N SourcePackage MXF SourcePackageID? N SourceSpecies? N SourceTrackID N SourceTrackIDs N SourceValue? N SpeedChangeEffectFlag N SplicingMetadata? N StartTimeRelativeToReference N StartTimeRelativeToReference N StartTimecode N StartTimecodeRelativeToReference? N StateOrProvinceOrCountyName N StateOrProvinceOrCountyName N StaticTrack MXF StillFrame? N StorageDeviceKind N StorageKind N StorageKind N StorageKindCode N StorageMediaID N StorageMediaKind N StoredANCLineNumber N StoredF2Offset N StoredVBILineNumber N StratumKind N StreamData? N StreamElementType? N StreamID N StreamOffset N StreamPositionIndicator N StreamPositionIndicator N StreamPositionIndicator N StreamPositionIndicator N StreetName N StreetName N StreetNumber N StreetNumber N StringElementType? N StructuralComponent MXF Sub-descriptors? N SubDescriptor? N SubDescriptors? N SubjectAbsoluteHeading N SubjectAbsoluteSpeed N SubjectDistance N SubjectName N SubjectName N SubjectRelativeHeading N SubjectRelativePositionalAccuracy N SubjectRelativeSpeed N SubtitleDatafileFlag N SubtitlesPresent N SupplementaryName N SupplementaryName N SupplementaryOrganizationName N SupplementaryOrganizationName N SupplierAccountName N SupplierAccountName N SupplierAccountNumber N SupplierIdentificationKind N SupplierIdentificationValue N SupplyContractNumber N SupplyingDepartmentName N SupportOrAdministrationStatus N SupportOrAdministrationStatus N SupportOrganizationRole N SupportOrganizationRole N SystemNameOrNumber N TIFFSummary? N TaggedValueDefinitions? N TaggedValueParentProperties? N TakeNumber N TapeBatchNumber N TapeBatchNumber N TapeCapacity N TapeFormat? N TapeFormulation N TapeFormulation N TapeManufacturer N TapeManufacturer N TapePartitionCapacity N TapeShellKind N TapeShellKind N TapeStock N TapeStock N TargetAudience N TargetAudience N TargetClassOfStrongReference? N TargetClassOfWeakReference? N TargetSet? N TargetWidth N TechnicalValue N TelephoneNumber N TelephoneNumber N TeletextSubtitlesAvailable N TeletextSubtitlesFlag N TemporalOffset N TerminatingFillerData N TextLocator MXF TextlessBlackDuration N TextlessMaterial N TextualDescriptionKind N TextualDescriptionKind N Theme N Theme N ThemeMusicFlag N ThesaurusName N ThesaurusName N ThirdGivenName N ThirdGivenName N TimePeriodName N TimePeriodName N TimeSystemOffset N TimeUnitKind N TimebaseReferenceTrackID N TimecodeArray? N TimecodeComponent MXF TimecodeCreationDateTime? N TimecodeEndDateTime? N TimecodeEventEndDateTime? N TimecodeEventStartDateTime? N TimecodeKind N TimecodeLastModifyDate? N TimecodeModifyDate? N TimecodeSourceKind N TimecodeStartDateTime? N TimecodeStreamData? N TimecodeTimebase N TimecodeTimebase N TimecodeUserBitsFlag N TimepointValue? N TimingBiasCorrection N TimingBiasCorrectionDescription N TitleKind N TitleKind N Titles MXF TitlesSets? N ToleranceInterpolationMethod? N ToleranceMode? N ToleranceWindow? N ToolkitVersion N TotalCurrencyAmount N TotalEpisodeCount N TotalIncome N TotalLinesperFrame N TotalNumberInSequence N TotalPayment N TotalSamplesperLine N Track MXF TrackID N TrackName N TrackName N TrackNumber N TrackNumberBatch N Tracks? N TrafficID N TrailingLines N TranscriptReference N TranscriptReference N TransferFilmFrameRate N TransitionEffect? N TransmissionID N TransportStreamID N TripletSequenceNumber N TypeDefinitionElementValueList N TypeDefinitionExtendibleElementValues? N TypeDefinitions? N UCSEncoding N UPID? N UPN? N URL N URL N URL N URL N URN N UTCEndDateTime N UTCEventEndDateTime N UTCEventEndDateTime N UTCEventStartDateTime N UTCEventStartDateTime N UTCInstantDateTime N UTCInstantDateTime N UTCLastModifyDate N UTCLastModifyDate N UTCStartDateTime N UTCStartDateTime N UTCUserDateTime N UniformDataFlag N UnknownBWFChunks? N UpstreamAudioCompressionAlgorithm N UseDefaultValue N UserDataMode? N UserName N UserName N UserPosition N V10IndexTableSegment? N VBEEndOffset N VBIDataDescriptor MXF VBILineCount N VBIPayloadByteArray N VBIPayloadSampleCoding N VBIPayloadSampleCount N VBIWrappingType N VC-1AverageBitrate N VC-1BPictureCount N VC-1CodedContentType N VC-1IdenticalGOP N VC-1InitializationMetadata? N VC-1Level N VC-1MaximumBitrate N VC-1MaximumGOP N VC-1Profile N VC-1SingleSequence N Value? N VariableArrayElementType? N VersionNumber N VersionNumberString N VersionNumberString N VersionTitle N VersionTitle N VerticalActionSafePercentage N VerticalDatum N VerticalGraphicsSafePercentage N VerticalSub-sampling N VideoAndFilmFrameRelationship N VideoAverageBitrate N VideoClipDuration N VideoCodingSchemeID? N VideoColorKind N VideoCompressionAlgorithm N VideoDeviceKind N VideoDeviceParameterName N VideoDeviceParameterSetting N VideoFixedBitrate N VideoIndexArray? N VideoLineMap N VideoNoiseReductionAlgorithm N VideoOrImageCompressionAlgorithm N VideoPayloadIdentifier N VideoPayloadIdentifier2002 N VideoTestParameter N VideoTestResult N VideoTestResult N VideoWatermarkKind N ViewportAspectRatio N ViewportHeight N ViewportImageCenterCCoordinate N ViewportImageCenterYCoordinate N ViewportWidth N VoiceTalentName N WAVESummary? N WaveAudioDescriptor MXF Weighting N WhiteReferenceLevel N Work-in-ProgressFlag N WorkingTitle N WorkingTitle N XMLDocumentText? N XMLDocumentText N XMLDocumentText N XMLDocumentText? N XOsiz N XTOsiz N XTsiz N Xsiz N YOsiz N YTOsiz N YTsiz N Ysiz N =head3 MXF Header Tags Index1 Tag Name Writable ------ -------- -------- 0 MXFVersion N 24 FooterPosition N 32 HeaderSize N =head2 DV Tags The following tags are extracted from DV videos. Tag Name Writable -------- -------- AspectRatio N AudioBitsPerSample N AudioChannels N AudioSampleRate N Colorimetry N DateTimeOriginal N Duration N FrameRate N ImageHeight N ImageWidth N TotalBitrate N VideoFormat N VideoScanType N =head2 Flash Tags The information below is extracted from SWF (Shockwave Flash) files. Tags with string ID's represent information extracted from the file header. Tag ID Tag Name Writable ------ -------- -------- 'Compressed' Compressed N 'Duration' Duration N 'FlashVersion' FlashVersion N 'FrameCount' FrameCount N 'FrameRate' FrameRate N 'ImageHeight' ImageHeight N 'ImageWidth' ImageWidth N 0x0045 FlashAttributes N 0x004d XMP XMP =head3 Flash FLV Tags Information is extracted from the following packets in FLV (Flash Video) files. Tag ID Tag Name Writable ------ -------- -------- 0x0008 Audio Flash Audio 0x0009 Video Flash Video 0x0012 Meta Flash Meta =head3 Flash Audio Tags Information extracted from the Flash Audio header. Tag ID Tag Name Writable ------ -------- -------- 'Bit0-3' AudioEncoding N 'Bit4-5' AudioSampleRate N 'Bit6' AudioBitsPerSample N 'Bit7' AudioChannels N =head3 Flash Video Tags Information extracted from the Flash Video header. Tag ID Tag Name Writable ------ -------- -------- 'Bit4-7' VideoEncoding N =head3 Flash Meta Tags Below are a few observed FLV Meta tags, but ExifTool will attempt to extract information from any tag found. Tag ID Tag Name Writable ------ -------- -------- 'audiocodecid' AudioCodecID N 'audiodatarate' AudioBitrate N 'audiodelay' AudioDelay N 'audiosamplerate' AudioSampleRate N 'audiosamplesize' AudioSampleSize N 'audiosize' AudioSize N 'bytelength' ByteLength N 'canSeekToEnd' CanSeekToEnd N 'canseekontime' CanSeekOnTime N 'createdby' CreatedBy N 'creationdate' CreateDate N 'cuePoints' CuePoint Flash CuePoint 'datasize' DataSize N 'duration' Duration N 'filesize' FileSizeBytes N 'framerate' FrameRate N 'hasAudio' HasAudio N 'hasCuePoints' HasCuePoints N 'hasKeyframes' HasKeyFrames N 'hasMetadata' HasMetadata N 'hasVideo' HasVideo N 'height' ImageHeight N 'httphostheader' HTTPHostHeader N 'keyframesFilepositions' KeyFramePositions N 'keyframesTimes' KeyFramesTimes N 'lastkeyframetimestamp' LastKeyFrameTime N 'lasttimestamp' LastTimeStamp N 'liveXML' XMP XMP 'metadatacreator' MetadataCreator N 'metadatadate' MetadataDate N 'pmsg' Message N 'purl' URL N 'sourcedata' SourceData N 'starttime' StartTime N 'stereo' Stereo N 'totaldatarate' TotalDataRate N 'totalduration' TotalDuration N 'videocodecid' VideoCodecID N 'videodatarate' VideoBitrate N 'videosize' VideoSize N 'width' ImageWidth N =head3 Flash CuePoint Tags These tag names are added to the CuePoint name to generate complete tag names like "CuePoint0Name". Tag ID Tag Name Writable ------ -------- -------- 'name' Name N 'parameters' Parameter Flash Parameter 'time' Time N 'type' Type N =head3 Flash Parameter Tags There are no pre-defined parameter tags, but ExifTool will extract any existing parameters, with tag names like "CuePoint0ParameterXxx". Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head2 Real Tags ExifTool recognizes three basic types of Real audio/video files: 1) RealMedia (RM, RV and RMVB), 2) RealAudio (RA), and 3) Real Metafile (RAM and RPM). =head3 Real Media Tags These B<Tag ID>'s are Chunk ID's used in RealMedia and RealVideo (RM, RV and RMVB) files. Tag ID Tag Name Writable ------ -------- -------- 'CONT' CONT Real ContentDescr 'MDPR' MDPR Real MediaProps 'PROP' PROP Real Properties 'RJMD' RJMD Real Metadata =head3 Real ContentDescr Tags Sequence Tag Name Writable -------- -------- -------- 0 TitleLen? N 1 Title N 2 AuthorLen? N 3 Author N 4 CopyrightLen? N 5 Copyright N 6 CommentLen? N 7 Comment N =head3 Real MediaProps Tags Sequence Tag Name Writable -------- -------- -------- 0 StreamNumber N 1 StreamMaxBitrate N 2 StreamAvgBitrate N 3 StreamMaxPacketSize N 4 StreamAvgPacketSize N 5 StreamStartTime N 6 StreamPreroll N 7 StreamDuration N 8 StreamNameLen? N 9 StreamName N 10 StreamMimeLen? N 11 StreamMimeType N 12 FileInfoLen? N 13 FileInfoLen2? N 14 FileInfoVersion N 15 PhysicalStreams? N 16 PhysicalStreamNumbers? N 17 DataOffsets? N 18 NumRules? N 19 PhysicalStreamNumberMap? N 20 NumProperties? N 21 FileInfoProperties Real FileInfo =head3 Real FileInfo Tags The following tags have been observed in the FileInfo properties, but any other existing information will also be extracted. Tag ID Tag Name Writable ------ -------- -------- 'Audiences' Audiences N 'Audio Format' AudioFormat N 'Content Rating' ContentRating N 'Creation Date' CreateDate N 'Description' Description N 'File ID' FileID N 'Generated By' Software N 'Indexable' Indexable N 'Keywords' Keywords N 'Modification Date' ModifyDate N 'Target Audiences' TargetAudiences N 'Video Quality' VideoQuality N 'audioMode' AudioMode N 'videoMode' VideoMode N =head3 Real Properties Tags Sequence Tag Name Writable -------- -------- -------- 0 MaxBitrate N 1 AvgBitrate N 2 MaxPacketSize N 3 AvgPacketSize N 4 NumPackets N 5 Duration N 6 Preroll N 7 IndexOffset? N 8 DataOffset? N 9 NumStreams N 10 Flags N =head3 Real Metadata Tags The tags below represent information which has been observed in the Real Metadata format, but ExifTool will extract any information it finds in this format. (As far as I can tell from the referenced documentation, string values should be plain text, but this is not the case for the only sample file I have been able to obtain containing this information. These tags could also be split into separate sub-directories, but this will wait until I have better documentation or a more complete set of samples.) Tag ID Tag Name Writable ------ -------- -------- 'Album/Name' AlbumName N 'Track/Category' TrackCategory N 'Track/Comments' TrackComments N 'Track/Lyrics' TrackLyrics N =head3 Real Audio Tags Tags in the following table reference information extracted from various versions of RealAudio (RA) files. Tag ID Tag Name Writable ------ -------- -------- '.ra3' RA3 Real AudioV3 '.ra4' RA4 Real AudioV4 '.ra5' RA5 Real AudioV5 =head3 Real AudioV3 Tags Sequence Tag Name Writable -------- -------- -------- 0 Channels N 1 Unknown? N 2 BytesPerMinute N 3 AudioBytes N 4 TitleLen? N 5 Title N 6 ArtistLen? N 7 Artist N 8 CopyrightLen? N 9 Copyright N 10 CommentLen? N 11 Comment N =head3 Real AudioV4 Tags Sequence Tag Name Writable -------- -------- -------- 0 FourCC1? N 1 AudioFileSize? N 2 Version2? N 3 HeaderSize? N 4 CodecFlavorID? N 5 CodedFrameSize? N 6 AudioBytes N 7 BytesPerMinute N 8 Unknown? N 9 SubPacketH? N 10 AudioFrameSize N 11 SubPacketSize? N 12 Unknown? N 13 SampleRate N 14 Unknown? N 15 BitsPerSample N 16 Channels N 17 FourCC2Len? N 18 FourCC2? N 19 FourCC3Len? N 20 FourCC3? N 21 Unknown? N 22 Unknown? N 23 TitleLen? N 24 Title N 25 ArtistLen? N 26 Artist N 27 CopyrightLen? N 28 Copyright N 29 CommentLen? N 30 Comment N =head3 Real AudioV5 Tags Sequence Tag Name Writable -------- -------- -------- 0 FourCC1? N 1 AudioFileSize? N 2 Version2? N 3 HeaderSize? N 4 CodecFlavorID? N 5 CodedFrameSize? N 6 AudioBytes N 7 BytesPerMinute N 8 Unknown? N 9 SubPacketH? N 10 FrameSize? N 11 SubPacketSize? N 12 SampleRate N 13 SampleRate2? N 14 BitsPerSample N 15 Channels N 16 Genr? N 17 FourCC3? N =head3 Real Metafile Tags Tags representing information extracted from Real Audio Metafile and RealMedia Plug-in Metafile (RAM and RPM) files. Tag ID Tag Name Writable ------ -------- -------- 'txt' Text N 'url' URL N =head2 RIFF Tags The RIFF container format is used various types of fines including WAV, AVI, WEBP, LA, OFR, PAC and WV. According to the EXIF specification, Meta information is embedded in two types of RIFF C<LIST> chunks: C<INFO> and C<exif>, and information about the audio content is stored in the C<fmt > chunk. As well as this information, some video information and proprietary manufacturer-specific information is also extracted. Large AVI videos may be a concatenation of two or more RIFF chunks. For these files, information is extracted from subsequent RIFF chunks as sub-documents, but the Duration is calculated for the full video. Tag ID Tag Name Writable ------ -------- -------- 'ALPH' ALPH RIFF ALPH 'ANIM' ANIM RIFF ANIM 'ANMF' ANMF RIFF ANMF 'EXIF' EXIF EXIF 'ICCP' ICC_Profile ICC_Profile 'IDIT' DateTimeOriginal N 'JUNK' OlympusJunk Olympus AVI CasioJunk EXIF RicohJunk Ricoh AVI PentaxJunk Pentax Junk PentaxJunk2 Pentax Junk2 TextJunk N 'JUNQ' OldXMP N 'LIST_INFO' Info RIFF Info 'LIST_Tdat' Tdat RIFF Tdat 'LIST_exif' Exif RIFF Exif 'LIST_hdrl' Hdrl RIFF Hdrl 'LIST_hydt' PentaxData Pentax AVI 'LIST_ncdt' NikonData Nikon AVI 'VP8 ' VP8Bitstream RIFF VP8 'VP8L' VP8L RIFF VP8L 'VP8X' VP8X RIFF VP8X 'XMP ' XMP XMP '_PMX' XMP XMP 'afsp' Afsp N 'bext' BroadcastExtension RIFF BroadcastExt 'cue ' CuePoints N 'fact' NumberOfSamples N 'fmt ' AudioFormat RIFF AudioFormat 'olym' Olym Olympus WAV =head3 RIFF ALPH Tags WebP alpha chunk. Index1 Tag Name Writable ------ -------- -------- 0 AlphaPreprocessing N 0.1 AlphaFiltering N 0.2 AlphaCompression N =head3 RIFF ANIM Tags WebP animation chunk. Index1 Tag Name Writable ------ -------- -------- 0 BackgroundColor N 4 AnimationLoopCount N =head3 RIFF ANMF Tags WebP animation frame chunk. Index1 Tag Name Writable ------ -------- -------- 12 Duration N =head3 RIFF Info Tags RIFF INFO tags found in WAV audio and AVI video files. Tags which are part of the EXIF 2.3 specification have an underlined Tag Name in the HTML version of this documentation. Other tags are found in AVI files generated by some software. Tag ID Tag Name Writable ------ -------- -------- 'AGES' Rated N 'CMNT' Comment N 'CODE' EncodedBy N 'COMM' Comments N 'DIRC' Directory N 'DISP' SoundSchemeTitle N 'DTIM' DateTimeOriginal N 'GENR' Genre N 'IARL' ArchivalLocation N 'IART' Artist N 'IAS1' FirstLanguage N 'IAS2' SecondLanguage N 'IAS3' ThirdLanguage N 'IAS4' FourthLanguage N 'IAS5' FifthLanguage N 'IAS6' SixthLanguage N 'IAS7' SeventhLanguage N 'IAS8' EighthLanguage N 'IAS9' NinthLanguage N 'IBSU' BaseURL N 'ICAS' DefaultAudioStream N 'ICDS' CostumeDesigner N 'ICMS' Commissioned N 'ICMT' Comment N 'ICNM' Cinematographer N 'ICNT' Country N 'ICOP' Copyright N 'ICRD' DateCreated N 'ICRP' Cropped N 'IDIM' Dimensions N 'IDIT' DateTimeOriginal N 'IDPI' DotsPerInch N 'IDST' DistributedBy N 'IEDT' EditedBy N 'IENC' EncodedBy N 'IENG' Engineer N 'IGNR' Genre N 'IKEY' Keywords N 'ILGT' Lightness N 'ILGU' LogoURL N 'ILIU' LogoIconURL N 'ILNG' Language N 'IMBI' MoreInfoBannerImage N 'IMBU' MoreInfoBannerURL N 'IMED' Medium N 'IMIT' MoreInfoText N 'IMIU' MoreInfoURL N 'IMUS' MusicBy N 'INAM' Title N 'IPDS' ProductionDesigner N 'IPLT' NumColors N 'IPRD' Product N 'IPRO' ProducedBy N 'IRIP' RippedBy N 'IRTD' Rating N 'ISBJ' Subject N 'ISFT' Software N 'ISGN' SecondaryGenre N 'ISHP' Sharpness N 'ISMP' TimeCode N 'ISRC' Source N 'ISRF' SourceForm N 'ISTD' ProductionStudio N 'ISTR' Starring N 'ITCH' Technician N 'IWMU' WatermarkURL N 'IWRI' WrittenBy N 'LANG' Language N 'LOCA' Location N 'PRT1' Part N 'PRT2' NumberOfParts N 'RATE' Rate N 'STAR' Starring N 'STAT' Statistics N 'TAPE' TapeName N 'TCDO' EndTimecode N 'TCOD' StartTimecode N 'TITL' Title N 'TLEN' Length N 'TORG' Organization N 'TRCK' TrackNumber N 'TURL' URL N 'TVER' Version N 'VMAJ' VegasVersionMajor N 'VMIN' VegasVersionMinor N 'YEAR' Year N =head3 RIFF Tdat Tags Tag ID Tag Name Writable ------ -------- -------- [no tags known] =head3 RIFF Exif Tags These tags are part of the EXIF 2.3 specification for WAV audio files. Tag ID Tag Name Writable ------ -------- -------- 'ecor' Make N 'emdl' Model N 'emnt' MakerNotes N 'erel' RelatedImageFile N 'etim' TimeCreated N 'eucm' UserComment N 'ever' ExifVersion N =head3 RIFF Hdrl Tags Tag ID Tag Name Writable ------ -------- -------- 'IDIT' DateTimeOriginal N 'ISMP' TimeCode N 'LIST_odml' OpenDML RIFF OpenDML 'LIST_strl' Stream RIFF Stream 'avih' AVIHeader RIFF AVIHeader =head3 RIFF OpenDML Tags Tag ID Tag Name Writable ------ -------- -------- 'dmlh' ExtendedAVIHeader RIFF ExtAVIHdr =head3 RIFF ExtAVIHdr Tags Index4 Tag Name Writable ------ -------- -------- 0 TotalFrameCount N =head3 RIFF Stream Tags Tag ID Tag Name Writable ------ -------- -------- 'strd' StreamData RIFF StreamData 'strf' AudioFormat RIFF AudioFormat VideoFormat BMP 'strh' StreamHeader RIFF StreamHeader 'strn' StreamName N =head3 RIFF StreamData Tags This chunk is used to store proprietary information in AVI videos from some cameras. The first 4 characters of the data are used as the Tag ID below. Tag ID Tag Name Writable ------ -------- -------- 'AVIF' AVIF EXIF 'CASI' CasioData Casio AVI 'Zora' VendorName N 'unknown' UnknownData N =head3 RIFF AudioFormat Tags Index2 Tag Name Writable ------ -------- -------- 0 Encoding N 1 NumChannels N 2 SampleRate N 4 AvgBytesPerSec N 7 BitsPerSample N =head3 RIFF StreamHeader Tags Index4 Tag Name Writable ------ -------- -------- 0 StreamType N 1 AudioCodec N VideoCodec N Codec N 5 AudioSampleRate N VideoFrameRate N StreamSampleRate N 8 AudioSampleCount N VideoFrameCount N StreamSampleCount N 10 Quality N 11 SampleSize N =head3 RIFF AVIHeader Tags Index4 Tag Name Writable ------ -------- -------- 0 FrameRate N 1 MaxDataRate N 4 FrameCount N 6 StreamCount N 8 ImageWidth N 9 ImageHeight N =head3 RIFF VP8 Tags This chunk is found in simple-format (lossy) WebP files. See L<https://developers.google.com/speed/webp/docs/riff_container> for the WebP container specification. Index1 Tag Name Writable ------ -------- -------- 0 VP8Version N 6 ImageWidth N 6.1 HorizontalScale N 8 ImageHeight N 8.1 VerticalScale N =head3 RIFF VP8L Tags This chunk is found in lossless WebP files. Index1 Tag Name Writable ------ -------- -------- 1 ImageWidth N 2 ImageHeight N =head3 RIFF VP8X Tags This chunk is found in extended WebP files. Index1 Tag Name Writable ------ -------- -------- 4 ImageWidth N 6 ImageHeight N =head3 RIFF BroadcastExt Tags Information found in the Broadcast Audio Extension chunk (see L<http://tech.ebu.ch/docs/tech/tech3285.pdf>). Index1 Tag Name Writable ------ -------- -------- 0 Description N 256 Originator N 288 OriginatorReference N 320 DateTimeOriginal N 338 TimeReference N 346 BWFVersion N 602 CodingHistory N =head2 AIFF Tags Tags extracted from Audio Interchange File Format (AIFF) files. See L<http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/AIFF.html> for the AIFF specification. Tag ID Tag Name Writable ------ -------- -------- '(c) ' Copyright N 'ANNO' Annotation N 'AUTH' Author N 'COMM' Common AIFF Common 'COMT' Comment AIFF Comment 'FVER' FormatVersion AIFF FormatVers 'ID3 ' ID3 ID3 'NAME' Name N =head3 AIFF Common Tags Index2 Tag Name Writable ------ -------- -------- 0 NumChannels N 1 NumSampleFrames N 3 SampleSize N 4 SampleRate N 9 CompressionType N 11 CompressorName N =head3 AIFF Comment Tags Tag ID Tag Name Writable ------ -------- -------- 0x0000 CommentTime N 0x0001 MarkerID N 0x0002 Comment N =head3 AIFF FormatVers Tags Index4 Tag Name Writable ------ -------- -------- 0 FormatVersionTime N =head2 ASF Tags The ASF format is used by Windows WMA and WMV files, and DIVX videos. Tag ID's aren't listed because they are huge 128-bit GUID's that would ruin the formatting of this table. Tag Name Writable -------- -------- SimpleIndex N TimecodeIndex N Header ASF Header Data N XMP XMP Index N MediaIndex N =head3 ASF Header Tags Tag Name Writable -------- -------- Padding N ScriptCommand N ContentBranding ASF ContentBranding ContentEncryption N DigitalSignature N ExtendedContentEncryption N HeaderExtension ASF HeaderExtension ContentDescription ASF ContentDescr ErrorCorrection N StreamBitrateProps N CodecList ASF CodecList FileProperties ASF FileProperties StreamProperties ASF StreamProperties ExtendedContentDescr ASF ExtendedDescr BitrateMutualExclusion N Marker N =head3 ASF ContentBranding Tags Tag Name Writable -------- -------- BannerImageType N BannerImage N BannerImageURL N CopyrightURL N =head3 ASF HeaderExtension Tags Tag Name Writable -------- -------- ExtendedStreamProps N AdvancedContentEncryption N MetadataLibrary ASF ExtendedDescr TimecodeIndexParms N Compatibility N LanguageList N AdvancedMutualExcl N BandwidthSharing N Reserved1 N Metadata ASF ExtendedDescr GroupMutualExclusion N StreamPrioritization N IndexParameters N =head3 ASF ExtendedDescr Tags Tag Name Writable -------- -------- ASFLeakyBucketPairs N ASFPacketCount N ASFSecurityObjectsSize N AlbumArtist N AlbumCoverURL N AlbumTitle N AspectRatioX N AspectRatioY N AudioFileURL N AudioSourceURL N Author N AuthorURL N AverageLevel N BannerImageData N BannerImageType N BannerImageURL N BeatsPerMinute N Bitrate N Broadcast N BufferAverage N Can_Skip_Backward N Can_Skip_Forward N Category N Codec N Composer N Conductor N ContainerFormat N ContentDistributor N ContentGroupDescription N Copyright N CopyrightURL N CurrentBitrate N DRM N DRM_ContentID N DRM_DRMHeader N DRM_DRMHeader_ContentDistributor N DRM_DRMHeader_ContentID N DRM_DRMHeader_IndividualizedVersion N DRM_DRMHeader_KeyID N DRM_DRMHeader_LicenseAcqURL N DRM_DRMHeader_SubscriptionContentID N DRM_IndividualizedVersion N DRM_KeyID N DRM_LASignatureCert N DRM_LASignatureLicSrvCert N DRM_LASignaturePrivKey N DRM_LASignatureRootCert N DRM_LicenseAcqURL N DRM_V1LicenseAcqURL N DVDID N Description N Director N Duration N EncodedBy N EncodingSettings N EncodingTime N FileSize N Genre N GenreID N HasArbitraryDataStream N HasAttachedImages N HasAudio N HasFileTransferStream N HasImage N HasScript N HasVideo N ISRC N InitialKey N IsVBR N Is_Protected N Is_Trusted N Language N Lyrics N Lyrics_Synchronised N MCDI N MediaClassPrimaryID N MediaClassSecondaryID N MediaCredits N MediaIsDelay N MediaIsFinale N MediaIsLive N MediaIsPremiere N MediaIsRepeat N MediaIsSAP N MediaIsStereo N MediaIsSubtitled N MediaIsTape N MediaNetworkAffiliation N MediaOriginalBroadcastDateTime N MediaOriginalChannel N MediaStationCallSign N MediaStationName N ModifiedBy N Mood N NSC_Address N NSC_Description N NSC_Email N NSC_Name N NSC_Phone N NumberOfFrames N OptimalBitrate N OriginalAlbumTitle N OriginalArtist N OriginalFileName N OriginalLyricist N OriginalReleaseTime N OriginalReleaseYear N ParentalRating N ParentalRatingReason N PartOfSet N PeakBitrate N PeakValue N Period N Picture ASF Picture PlaylistDelay N Producer N PromotionURL N ProtectionType N Provider N ProviderCopyright N ProviderRating N ProviderStyle N Publisher N RadioStationName N RadioStationOwner N Rating N Seekable N SharedUserRating N Signature_Name N StreamTypeInfo N Stridable N Subtitle N SubtitleDescription N SubscriptionContentID N Text N Title N ToolName N ToolVersion N Track N TrackNumber N UniqueFileIdentifier N UserWebURL N VBRPeak N VideoClosedCaptioning N VideoFrameRate N VideoHeight N VideoWidth N WMADRCAverageReference N WMADRCAverageTarget N WMADRCPeakReference N WMADRCPeakTarget N WMCollectionGroupID N WMCollectionID N WMContentID N Writer N Year N =head3 ASF Picture Tags Tag Name Writable -------- -------- PictureType N PictureMIMEType N PictureDescription N Picture N =head3 ASF ContentDescr Tags Tag Name Writable -------- -------- Title N Author N Copyright N Description N Rating N =head3 ASF CodecList Tags Tag Name Writable -------- -------- AudioCodecDescription N AudioCodecName N OtherCodecDescription N OtherCodecName N VideoCodecDescription N VideoCodecName N =head3 ASF FileProperties Tags Index1 Tag Name Writable ------ -------- -------- 0 FileID N 16 FileLength N 24 CreationDate N 32 DataPackets N 40 PlayDuration N 48 SendDuration N 56 Preroll N 64 Flags N 68 MinPacketSize N 72 MaxPacketSize N 76 MaxBitrate N =head3 ASF StreamProperties Tags Tags with index 54 and greater are conditional based on the StreamType. Index1 Tag Name Writable ------ -------- -------- 0 StreamType N 16 ErrorCorrectionType N 32 TimeOffset N 48 StreamNumber N 54 AudioCodecID N ImageWidth N 56 AudioChannels N 58 AudioSampleRate N ImageHeight N =head2 DICOM Tags The DICOM format is based on the ACR-NEMA specification, but adds a file header and a number of new tags. ExifTool will extract information from either type of file. The Tag ID's in the following table are the tag group and element numbers in hexadecimal, as given in the DICOM specification (see L<http://medical.nema.org/>). The table below contains tags from the DICOM 2009 and earlier specifications plus some vendor-specific private tags. Note that DICOM information may be saved in other file formats using the L<XMP DICOM Tags|Image::ExifTool::TagNames/XMP DICOM Tags>. Tag ID Tag Name Writable ------ -------- -------- 0002,0000 FileMetaInfoGroupLength N 0002,0001 FileMetaInfoVersion N 0002,0002 MediaStorageSOPClassUID N 0002,0003 MediaStorageSOPInstanceUID N 0002,0010 TransferSyntaxUID N 0002,0012 ImplementationClassUID N 0002,0013 ImplementationVersionName N 0002,0016 SourceApplicationEntityTitle N 0002,0100 PrivateInformationCreatorUID N 0002,0102 PrivateInformation N 0004,1130 FileSetID N 0004,1141 FileSetDescriptorFileID N 0004,1142 SpecificCharacterSetOfFile N 0004,1200 FirstDirectoryRecordOffset N 0004,1202 LastDirectoryRecordOffset N 0004,1212 FileSetConsistencyFlag N 0004,1220 DirectoryRecordSequence N 0004,1400 OffsetOfNextDirectoryRecord N 0004,1410 RecordInUseFlag N 0004,1420 LowerLevelDirectoryEntityOffset N 0004,1430 DirectoryRecordType N 0004,1432 PrivateRecordUID N 0004,1500 ReferencedFileID N 0004,1504 MRDRDirectoryRecordOffset N 0004,1510 ReferencedSOPClassUIDInFile N 0004,1511 ReferencedSOPInstanceUIDInFile N 0004,1512 ReferencedTransferSyntaxUIDInFile N 0004,151A ReferencedRelatedSOPClassUIDInFile N 0004,1600 NumberOfReferences N 0008,0000 IdentifyingGroupLength N 0008,0001 LengthToEnd N 0008,0005 SpecificCharacterSet N 0008,0006 LanguageCodeSequence N 0008,0008 ImageType N 0008,0010 RecognitionCode N 0008,0012 InstanceCreationDate N 0008,0013 InstanceCreationTime N 0008,0014 InstanceCreatorUID N 0008,0016 SOPClassUID N 0008,0018 SOPInstanceUID N 0008,001A RelatedGeneralSOPClassUID N 0008,001B OriginalSpecializedSOPClassUID N 0008,0020 StudyDate N 0008,0021 SeriesDate N 0008,0022 AcquisitionDate N 0008,0023 ContentDate N 0008,0024 OverlayDate N 0008,0025 CurveDate N 0008,002A AcquisitionDateTime N 0008,0030 StudyTime N 0008,0031 SeriesTime N 0008,0032 AcquisitionTime N 0008,0033 ContentTime N 0008,0034 OverlayTime N 0008,0035 CurveTime N 0008,0040 DataSetType N 0008,0041 DataSetSubtype N 0008,0042 NuclearMedicineSeriesType N 0008,0050 AccessionNumber N 0008,0052 QueryRetrieveLevel N 0008,0054 RetrieveAETitle N 0008,0056 InstanceAvailability N 0008,0058 FailedSOPInstanceUIDList N 0008,0060 Modality N 0008,0061 ModalitiesInStudy N 0008,0062 SOPClassesInStudy N 0008,0064 ConversionType N 0008,0068 PresentationIntentType N 0008,0070 Manufacturer N 0008,0080 InstitutionName N 0008,0081 InstitutionAddress N 0008,0082 InstitutionCodeSequence N 0008,0090 ReferringPhysicianName N 0008,0092 ReferringPhysicianAddress N 0008,0094 ReferringPhysicianTelephoneNumber N 0008,0096 ReferringPhysicianIDSequence N 0008,0100 CodeValue N 0008,0102 CodingSchemeDesignator N 0008,0103 CodingSchemeVersion N 0008,0104 CodeMeaning N 0008,0105 MappingResource N 0008,0106 ContextGroupVersion N 0008,0107 ContextGroupLocalVersion N 0008,010B ContextGroupExtensionFlag N 0008,010C CodingSchemeUID N 0008,010D ContextGroupExtensionCreatorUID N 0008,010F ContextIdentifier N 0008,0110 CodingSchemeIDSequence N 0008,0112 CodingSchemeRegistry N 0008,0114 CodingSchemeExternalID N 0008,0115 CodingSchemeName N 0008,0116 ResponsibleOrganization N 0008,0117 ContextUID N 0008,0201 TimezoneOffsetFromUTC N 0008,1000 NetworkID N 0008,1010 StationName N 0008,1030 StudyDescription N 0008,1032 ProcedureCodeSequence N 0008,103E SeriesDescription N 0008,1040 InstitutionalDepartmentName N 0008,1048 PhysiciansOfRecord N 0008,1049 PhysiciansOfRecordIDSequence N 0008,1050 PerformingPhysicianName N 0008,1052 PerformingPhysicianIDSequence N 0008,1060 NameOfPhysicianReadingStudy N 0008,1062 PhysicianReadingStudyIDSequence N 0008,1070 OperatorsName N 0008,1072 OperatorIDSequence N 0008,1080 AdmittingDiagnosesDescription N 0008,1084 AdmittingDiagnosesCodeSequence N 0008,1090 ManufacturersModelName N 0008,1100 ReferencedResultsSequence N 0008,1110 ReferencedStudySequence N 0008,1111 ReferencedProcedureStepSequence N 0008,1115 ReferencedSeriesSequence N 0008,1120 ReferencedPatientSequence N 0008,1125 ReferencedVisitSequence N 0008,1130 ReferencedOverlaySequence N 0008,113A ReferencedWaveformSequence N 0008,1140 ReferencedImageSequence N 0008,1145 ReferencedCurveSequence N 0008,114A ReferencedInstanceSequence N 0008,1150 ReferencedSOPClassUID N 0008,1155 ReferencedSOPInstanceUID N 0008,115A SOPClassesSupported N 0008,1160 ReferencedFrameNumber N 0008,1161 SimpleFrameList N 0008,1162 CalculatedFrameList N 0008,1163 TimeRange N 0008,1164 FrameExtractionSequence N 0008,1195 TransactionUID N 0008,1197 FailureReason N 0008,1198 FailedSOPSequence N 0008,1199 ReferencedSOPSequence N 0008,1200 OtherReferencedStudiesSequence N 0008,1250 RelatedSeriesSequence N 0008,2110 LossyImageCompression N 0008,2111 DerivationDescription N 0008,2112 SourceImageSequence N 0008,2120 StageName N 0008,2122 StageNumber N 0008,2124 NumberOfStages N 0008,2127 ViewName N 0008,2128 ViewNumber N 0008,2129 NumberOfEventTimers N 0008,212A NumberOfViewsInStage N 0008,2130 EventElapsedTimes N 0008,2132 EventTimerNames N 0008,2133 EventTimerSequence N 0008,2134 EventTimeOffset N 0008,2135 EventCodeSequence N 0008,2142 StartTrim N 0008,2143 StopTrim N 0008,2144 RecommendedDisplayFrameRate N 0008,2200 TransducerPosition N 0008,2204 TransducerOrientation N 0008,2208 AnatomicStructure N 0008,2218 AnatomicRegionSequence N 0008,2220 AnatomicRegionModifierSequence N 0008,2228 PrimaryAnatomicStructureSequence N 0008,2229 AnatomicStructureOrRegionSequence N 0008,2230 AnatomicStructureModifierSequence N 0008,2240 TransducerPositionSequence N 0008,2242 TransducerPositionModifierSequence N 0008,2244 TransducerOrientationSequence N 0008,2246 TransducerOrientationModifierSeq N 0008,2253 AnatomicEntrancePortalCodeSeqTrial N 0008,2255 AnatomicApproachDirCodeSeqTrial N 0008,2256 AnatomicPerspectiveDescrTrial N 0008,2257 AnatomicPerspectiveCodeSeqTrial N 0008,3001 AlternateRepresentationSequence N 0008,3010 IrradiationEventUID N 0008,4000 IdentifyingComments N 0008,9007 FrameType N 0008,9092 ReferencedImageEvidenceSequence N 0008,9121 ReferencedRawDataSequence N 0008,9123 CreatorVersionUID N 0008,9124 DerivationImageSequence N 0008,9154 SourceImageEvidenceSequence N 0008,9205 PixelPresentation N 0008,9206 VolumetricProperties N 0008,9207 VolumeBasedCalculationTechnique N 0008,9208 ComplexImageComponent N 0008,9209 AcquisitionContrast N 0008,9215 DerivationCodeSequence N 0008,9237 GrayscalePresentationStateSequence N 0008,9410 ReferencedOtherPlaneSequence N 0008,9458 FrameDisplaySequence N 0008,9459 RecommendedDisplayFrameRateInFloat N 0008,9460 SkipFrameRangeFlag N 0009,1001 FullFidelity N 0009,1002 SuiteID N 0009,1004 ProductID N 0009,1027 ImageActualDate N 0009,1030 ServiceID N 0009,1031 MobileLocationNumber N 0009,10E3 EquipmentUID N 0009,10E6 GenesisVersionNow N 0009,10E7 ExamRecordChecksum N 0009,10E9 ActualSeriesDataTimeStamp N 0010,0000 PatientGroupLength N 0010,0010 PatientName N 0010,0020 PatientID N 0010,0021 IssuerOfPatientID N 0010,0022 TypeOfPatientID N 0010,0030 PatientBirthDate N 0010,0032 PatientBirthTime N 0010,0040 PatientSex N 0010,0050 PatientInsurancePlanCodeSequence N 0010,0101 PatientPrimaryLanguageCodeSeq N 0010,0102 PatientPrimaryLanguageCodeModSeq N 0010,1000 OtherPatientIDs N 0010,1001 OtherPatientNames N 0010,1002 OtherPatientIDsSequence N 0010,1005 PatientBirthName N 0010,1010 PatientAge N 0010,1020 PatientSize N 0010,1030 PatientWeight N 0010,1040 PatientAddress N 0010,1050 InsurancePlanIdentification N 0010,1060 PatientMotherBirthName N 0010,1080 MilitaryRank N 0010,1081 BranchOfService N 0010,1090 MedicalRecordLocator N 0010,2000 MedicalAlerts N 0010,2110 Allergies N 0010,2150 CountryOfResidence N 0010,2152 RegionOfResidence N 0010,2154 PatientTelephoneNumbers N 0010,2160 EthnicGroup N 0010,2180 Occupation N 0010,21A0 SmokingStatus N 0010,21B0 AdditionalPatientHistory N 0010,21C0 PregnancyStatus N 0010,21D0 LastMenstrualDate N 0010,21F0 PatientReligiousPreference N 0010,2201 PatientSpeciesDescription N 0010,2202 PatientSpeciesCodeSequence N 0010,2203 PatientSexNeutered N 0010,2210 AnatomicalOrientationType N 0010,2292 PatientBreedDescription N 0010,2293 PatientBreedCodeSequence N 0010,2294 BreedRegistrationSequence N 0010,2295 BreedRegistrationNumber N 0010,2296 BreedRegistryCodeSequence N 0010,2297 ResponsiblePerson N 0010,2298 ResponsiblePersonRole N 0010,2299 ResponsibleOrganization N 0010,4000 PatientComments N 0010,9431 ExaminedBodyThickness N 0011,1010 PatientStatus N 0012,0010 ClinicalTrialSponsorName N 0012,0020 ClinicalTrialProtocolID N 0012,0021 ClinicalTrialProtocolName N 0012,0030 ClinicalTrialSiteID N 0012,0031 ClinicalTrialSiteName N 0012,0040 ClinicalTrialSubjectID N 0012,0042 ClinicalTrialSubjectReadingID N 0012,0050 ClinicalTrialTimePointID N 0012,0051 ClinicalTrialTimePointDescription N 0012,0060 ClinicalTrialCoordinatingCenter N 0012,0062 PatientIdentityRemoved N 0012,0063 DeidentificationMethod N 0012,0064 DeidentificationMethodCodeSequence N 0012,0071 ClinicalTrialSeriesID N 0012,0072 ClinicalTrialSeriesDescription N 0012,0084 DistributionType N 0012,0085 ConsentForDistributionFlag N 0018,0000 AcquisitionGroupLength N 0018,0010 ContrastBolusAgent N 0018,0012 ContrastBolusAgentSequence N 0018,0014 ContrastBolusAdministrationRoute N 0018,0015 BodyPartExamined N 0018,0020 ScanningSequence N 0018,0021 SequenceVariant N 0018,0022 ScanOptions N 0018,0023 MRAcquisitionType N 0018,0024 SequenceName N 0018,0025 AngioFlag N 0018,0026 InterventionDrugInformationSeq N 0018,0027 InterventionDrugStopTime N 0018,0028 InterventionDrugDose N 0018,0029 InterventionDrugSequence N 0018,002A AdditionalDrugSequence N 0018,0030 Radionuclide N 0018,0031 Radiopharmaceutical N 0018,0032 EnergyWindowCenterline N 0018,0033 EnergyWindowTotalWidth N 0018,0034 InterventionDrugName N 0018,0035 InterventionDrugStartTime N 0018,0036 InterventionSequence N 0018,0037 TherapyType N 0018,0038 InterventionStatus N 0018,0039 TherapyDescription N 0018,003A InterventionDescription N 0018,0040 CineRate N 0018,0042 InitialCineRunState N 0018,0050 SliceThickness N 0018,0060 KVP N 0018,0070 CountsAccumulated N 0018,0071 AcquisitionTerminationCondition N 0018,0072 EffectiveDuration N 0018,0073 AcquisitionStartCondition N 0018,0074 AcquisitionStartConditionData N 0018,0075 AcquisitionEndConditionData N 0018,0080 RepetitionTime N 0018,0081 EchoTime N 0018,0082 InversionTime N 0018,0083 NumberOfAverages N 0018,0084 ImagingFrequency N 0018,0085 ImagedNucleus N 0018,0086 EchoNumber N 0018,0087 MagneticFieldStrength N 0018,0088 SpacingBetweenSlices N 0018,0089 NumberOfPhaseEncodingSteps N 0018,0090 DataCollectionDiameter N 0018,0091 EchoTrainLength N 0018,0093 PercentSampling N 0018,0094 PercentPhaseFieldOfView N 0018,0095 PixelBandwidth N 0018,1000 DeviceSerialNumber N 0018,1002 DeviceUID N 0018,1003 DeviceID N 0018,1004 PlateID N 0018,1005 GeneratorID N 0018,1006 GridID N 0018,1007 CassetteID N 0018,1008 GantryID N 0018,1010 SecondaryCaptureDeviceID N 0018,1011 HardcopyCreationDeviceID N 0018,1012 DateOfSecondaryCapture N 0018,1014 TimeOfSecondaryCapture N 0018,1016 SecondaryCaptureDeviceManufacturer N 0018,1017 HardcopyDeviceManufacturer N 0018,1018 SecondaryCaptureDeviceModelName N 0018,1019 SecondaryCaptureDeviceSoftwareVers N 0018,101A HardcopyDeviceSoftwareVersion N 0018,101B HardcopyDeviceModelName N 0018,1020 SoftwareVersion N 0018,1022 VideoImageFormatAcquired N 0018,1023 DigitalImageFormatAcquired N 0018,1030 ProtocolName N 0018,1040 ContrastBolusRoute N 0018,1041 ContrastBolusVolume N 0018,1042 ContrastBolusStartTime N 0018,1043 ContrastBolusStopTime N 0018,1044 ContrastBolusTotalDose N 0018,1045 SyringeCounts N 0018,1046 ContrastFlowRate N 0018,1047 ContrastFlowDuration N 0018,1048 ContrastBolusIngredient N 0018,1049 ContrastBolusConcentration N 0018,1050 SpatialResolution N 0018,1060 TriggerTime N 0018,1061 TriggerSourceOrType N 0018,1062 NominalInterval N 0018,1063 FrameTime N 0018,1064 CardiacFramingType N 0018,1065 FrameTimeVector N 0018,1066 FrameDelay N 0018,1067 ImageTriggerDelay N 0018,1068 MultiplexGroupTimeOffset N 0018,1069 TriggerTimeOffset N 0018,106A SynchronizationTrigger N 0018,106C SynchronizationChannel N 0018,106E TriggerSamplePosition N 0018,1070 RadiopharmaceuticalRoute N 0018,1071 RadiopharmaceuticalVolume N 0018,1072 RadiopharmaceuticalStartTime N 0018,1073 RadiopharmaceuticalStopTime N 0018,1074 RadionuclideTotalDose N 0018,1075 RadionuclideHalfLife N 0018,1076 RadionuclidePositronFraction N 0018,1077 RadiopharmaceuticalSpecActivity N 0018,1078 RadiopharmaceuticalStartDateTime N 0018,1079 RadiopharmaceuticalStopDateTime N 0018,1080 BeatRejectionFlag N 0018,1081 LowRRValue N 0018,1082 HighRRValue N 0018,1083 IntervalsAcquired N 0018,1084 IntervalsRejected N 0018,1085 PVCRejection N 0018,1086 SkipBeats N 0018,1088 HeartRate N 0018,1090 CardiacNumberOfImages N 0018,1094 TriggerWindow N 0018,1100 ReconstructionDiameter N 0018,1110 DistanceSourceToDetector N 0018,1111 DistanceSourceToPatient N 0018,1114 EstimatedRadiographicMagnification N 0018,1120 GantryDetectorTilt N 0018,1121 GantryDetectorSlew N 0018,1130 TableHeight N 0018,1131 TableTraverse N 0018,1134 TableMotion N 0018,1135 TableVerticalIncrement N 0018,1136 TableLateralIncrement N 0018,1137 TableLongitudinalIncrement N 0018,1138 TableAngle N 0018,113A TableType N 0018,1140 RotationDirection N 0018,1141 AngularPosition N 0018,1142 RadialPosition N 0018,1143 ScanArc N 0018,1144 AngularStep N 0018,1145 CenterOfRotationOffset N 0018,1146 RotationOffset N 0018,1147 FieldOfViewShape N 0018,1149 FieldOfViewDimensions N 0018,1150 ExposureTime N 0018,1151 XRayTubeCurrent N 0018,1152 Exposure N 0018,1153 ExposureInMicroAmpSec N 0018,1154 AveragePulseWidth N 0018,1155 RadiationSetting N 0018,1156 RectificationType N 0018,115A RadiationMode N 0018,115E ImageAreaDoseProduct N 0018,1160 FilterType N 0018,1161 TypeOfFilters N 0018,1162 IntensifierSize N 0018,1164 ImagerPixelSpacing N 0018,1166 Grid N 0018,1170 GeneratorPower N 0018,1180 CollimatorGridName N 0018,1181 CollimatorType N 0018,1182 FocalDistance N 0018,1183 XFocusCenter N 0018,1184 YFocusCenter N 0018,1190 FocalSpots N 0018,1191 AnodeTargetMaterial N 0018,11A0 BodyPartThickness N 0018,11A2 CompressionForce N 0018,1200 DateOfLastCalibration N 0018,1201 TimeOfLastCalibration N 0018,1210 ConvolutionKernel N 0018,1240 UpperLowerPixelValues N 0018,1242 ActualFrameDuration N 0018,1243 CountRate N 0018,1244 PreferredPlaybackSequencing N 0018,1250 ReceiveCoilName N 0018,1251 TransmitCoilName N 0018,1260 PlateType N 0018,1261 PhosphorType N 0018,1300 ScanVelocity N 0018,1301 WholeBodyTechnique N 0018,1302 ScanLength N 0018,1310 AcquisitionMatrix N 0018,1312 InPlanePhaseEncodingDirection N 0018,1314 FlipAngle N 0018,1315 VariableFlipAngleFlag N 0018,1316 SAR N 0018,1318 DB-Dt N 0018,1400 AcquisitionDeviceProcessingDescr N 0018,1401 AcquisitionDeviceProcessingCode N 0018,1402 CassetteOrientation N 0018,1403 CassetteSize N 0018,1404 ExposuresOnPlate N 0018,1405 RelativeXRayExposure N 0018,1450 ColumnAngulation N 0018,1460 TomoLayerHeight N 0018,1470 TomoAngle N 0018,1480 TomoTime N 0018,1490 TomoType N 0018,1491 TomoClass N 0018,1495 NumberOfTomosynthesisSourceImages N 0018,1500 PositionerMotion N 0018,1508 PositionerType N 0018,1510 PositionerPrimaryAngle N 0018,1511 PositionerSecondaryAngle N 0018,1520 PositionerPrimaryAngleIncrement N 0018,1521 PositionerSecondaryAngleIncrement N 0018,1530 DetectorPrimaryAngle N 0018,1531 DetectorSecondaryAngle N 0018,1600 ShutterShape N 0018,1602 ShutterLeftVerticalEdge N 0018,1604 ShutterRightVerticalEdge N 0018,1606 ShutterUpperHorizontalEdge N 0018,1608 ShutterLowerHorizontalEdge N 0018,1610 CenterOfCircularShutter N 0018,1612 RadiusOfCircularShutter N 0018,1620 VerticesOfPolygonalShutter N 0018,1622 ShutterPresentationValue N 0018,1623 ShutterOverlayGroup N 0018,1624 ShutterPresentationColorCIELabVal N 0018,1700 CollimatorShape N 0018,1702 CollimatorLeftVerticalEdge N 0018,1704 CollimatorRightVerticalEdge N 0018,1706 CollimatorUpperHorizontalEdge N 0018,1708 CollimatorLowerHorizontalEdge N 0018,1710 CenterOfCircularCollimator N 0018,1712 RadiusOfCircularCollimator N 0018,1720 VerticesOfPolygonalCollimator N 0018,1800 AcquisitionTimeSynchronized N 0018,1801 TimeSource N 0018,1802 TimeDistributionProtocol N 0018,1803 NTPSourceAddress N 0018,2001 PageNumberVector N 0018,2002 FrameLabelVector N 0018,2003 FramePrimaryAngleVector N 0018,2004 FrameSecondaryAngleVector N 0018,2005 SliceLocationVector N 0018,2006 DisplayWindowLabelVector N 0018,2010 NominalScannedPixelSpacing N 0018,2020 DigitizingDeviceTransportDirection N 0018,2030 RotationOfScannedFilm N 0018,3100 IVUSAcquisition N 0018,3101 IVUSPullbackRate N 0018,3102 IVUSGatedRate N 0018,3103 IVUSPullbackStartFrameNumber N 0018,3104 IVUSPullbackStopFrameNumber N 0018,3105 LesionNumber N 0018,4000 AcquisitionComments N 0018,5000 OutputPower N 0018,5010 TransducerData N 0018,5012 FocusDepth N 0018,5020 ProcessingFunction N 0018,5021 PostprocessingFunction N 0018,5022 MechanicalIndex N 0018,5024 BoneThermalIndex N 0018,5026 CranialThermalIndex N 0018,5027 SoftTissueThermalIndex N 0018,5028 SoftTissueFocusThermalIndex N 0018,5029 SoftTissueSurfaceThermalIndex N 0018,5030 DynamicRange N 0018,5040 TotalGain N 0018,5050 DepthOfScanField N 0018,5100 PatientPosition N 0018,5101 ViewPosition N 0018,5104 ProjectionEponymousNameCodeSeq N 0018,5210 ImageTransformationMatrix N 0018,5212 ImageTranslationVector N 0018,6000 Sensitivity N 0018,6011 SequenceOfUltrasoundRegions N 0018,6012 RegionSpatialFormat N 0018,6014 RegionDataType N 0018,6016 RegionFlags N 0018,6018 RegionLocationMinX0 N 0018,601A RegionLocationMinY0 N 0018,601C RegionLocationMaxX1 N 0018,601E RegionLocationMaxY1 N 0018,6020 ReferencePixelX0 N 0018,6022 ReferencePixelY0 N 0018,6024 PhysicalUnitsXDirection N 0018,6026 PhysicalUnitsYDirection N 0018,6028 ReferencePixelPhysicalValueX N 0018,602A ReferencePixelPhysicalValueY N 0018,602C PhysicalDeltaX N 0018,602E PhysicalDeltaY N 0018,6030 TransducerFrequency N 0018,6031 TransducerType N 0018,6032 PulseRepetitionFrequency N 0018,6034 DopplerCorrectionAngle N 0018,6036 SteeringAngle N 0018,6038 DopplerSampleVolumeXPosRetired N 0018,6039 DopplerSampleVolumeXPosition N 0018,603A DopplerSampleVolumeYPosRetired N 0018,603B DopplerSampleVolumeYPosition N 0018,603C TMLinePositionX0Retired N 0018,603D TMLinePositionX0 N 0018,603E TMLinePositionY0Retired N 0018,603F TMLinePositionY0 N 0018,6040 TMLinePositionX1Retired N 0018,6041 TMLinePositionX1 N 0018,6042 TMLinePositionY1Retired N 0018,6043 TMLinePositionY1 N 0018,6044 PixelComponentOrganization N 0018,6046 PixelComponentMask N 0018,6048 PixelComponentRangeStart N 0018,604A PixelComponentRangeStop N 0018,604C PixelComponentPhysicalUnits N 0018,604E PixelComponentDataType N 0018,6050 NumberOfTableBreakPoints N 0018,6052 TableOfXBreakPoints N 0018,6054 TableOfYBreakPoints N 0018,6056 NumberOfTableEntries N 0018,6058 TableOfPixelValues N 0018,605A TableOfParameterValues N 0018,6060 RWaveTimeVector N 0018,7000 DetectorConditionsNominalFlag N 0018,7001 DetectorTemperature N 0018,7004 DetectorType N 0018,7005 DetectorConfiguration N 0018,7006 DetectorDescription N 0018,7008 DetectorMode N 0018,700A DetectorID N 0018,700C DateOfLastDetectorCalibration N 0018,700E TimeOfLastDetectorCalibration N 0018,7010 DetectorExposuresSinceCalibration N 0018,7011 DetectorExposuresSinceManufactured N 0018,7012 DetectorTimeSinceLastExposure N 0018,7014 DetectorActiveTime N 0018,7016 DetectorActiveOffsetFromExposure N 0018,701A DetectorBinning N 0018,7020 DetectorElementPhysicalSize N 0018,7022 DetectorElementSpacing N 0018,7024 DetectorActiveShape N 0018,7026 DetectorActiveDimensions N 0018,7028 DetectorActiveOrigin N 0018,702A DetectorManufacturerName N 0018,702B DetectorManufacturersModelName N 0018,7030 FieldOfViewOrigin N 0018,7032 FieldOfViewRotation N 0018,7034 FieldOfViewHorizontalFlip N 0018,7040 GridAbsorbingMaterial N 0018,7041 GridSpacingMaterial N 0018,7042 GridThickness N 0018,7044 GridPitch N 0018,7046 GridAspectRatio N 0018,7048 GridPeriod N 0018,704C GridFocalDistance N 0018,7050 FilterMaterial N 0018,7052 FilterThicknessMinimum N 0018,7054 FilterThicknessMaximum N 0018,7060 ExposureControlMode N 0018,7062 ExposureControlModeDescription N 0018,7064 ExposureStatus N 0018,7065 PhototimerSetting N 0018,8150 ExposureTimeInMicroSec N 0018,8151 XRayTubeCurrentInMicroAmps N 0018,9004 ContentQualification N 0018,9005 PulseSequenceName N 0018,9006 MRImagingModifierSequence N 0018,9008 EchoPulseSequence N 0018,9009 InversionRecovery N 0018,9010 FlowCompensation N 0018,9011 MultipleSpinEcho N 0018,9012 MultiPlanarExcitation N 0018,9014 PhaseContrast N 0018,9015 TimeOfFlightContrast N 0018,9016 Spoiling N 0018,9017 SteadyStatePulseSequence N 0018,9018 EchoPlanarPulseSequence N 0018,9019 TagAngleFirstAxis N 0018,9020 MagnetizationTransfer N 0018,9021 T2Preparation N 0018,9022 BloodSignalNulling N 0018,9024 SaturationRecovery N 0018,9025 SpectrallySelectedSuppression N 0018,9026 SpectrallySelectedExcitation N 0018,9027 SpatialPresaturation N 0018,9028 Tagging N 0018,9029 OversamplingPhase N 0018,9030 TagSpacingFirstDimension N 0018,9032 GeometryOfKSpaceTraversal N 0018,9033 SegmentedKSpaceTraversal N 0018,9034 RectilinearPhaseEncodeReordering N 0018,9035 TagThickness N 0018,9036 PartialFourierDirection N 0018,9037 CardiacSynchronizationTechnique N 0018,9041 ReceiveCoilManufacturerName N 0018,9042 MRReceiveCoilSequence N 0018,9043 ReceiveCoilType N 0018,9044 QuadratureReceiveCoil N 0018,9045 MultiCoilDefinitionSequence N 0018,9046 MultiCoilConfiguration N 0018,9047 MultiCoilElementName N 0018,9048 MultiCoilElementUsed N 0018,9049 MRTransmitCoilSequence N 0018,9050 TransmitCoilManufacturerName N 0018,9051 TransmitCoilType N 0018,9052 SpectralWidth N 0018,9053 ChemicalShiftReference N 0018,9054 VolumeLocalizationTechnique N 0018,9058 MRAcquisitionFrequencyEncodeSteps N 0018,9059 Decoupling N 0018,9060 DecoupledNucleus N 0018,9061 DecouplingFrequency N 0018,9062 DecouplingMethod N 0018,9063 DecouplingChemicalShiftReference N 0018,9064 KSpaceFiltering N 0018,9065 TimeDomainFiltering N 0018,9066 NumberOfZeroFills N 0018,9067 BaselineCorrection N 0018,9069 ParallelReductionFactorInPlane N 0018,9070 CardiacRRIntervalSpecified N 0018,9073 AcquisitionDuration N 0018,9074 FrameAcquisitionDateTime N 0018,9075 DiffusionDirectionality N 0018,9076 DiffusionGradientDirectionSequence N 0018,9077 ParallelAcquisition N 0018,9078 ParallelAcquisitionTechnique N 0018,9079 InversionTimes N 0018,9080 MetaboliteMapDescription N 0018,9081 PartialFourier N 0018,9082 EffectiveEchoTime N 0018,9083 MetaboliteMapCodeSequence N 0018,9084 ChemicalShiftSequence N 0018,9085 CardiacSignalSource N 0018,9087 DiffusionBValue N 0018,9089 DiffusionGradientOrientation N 0018,9090 VelocityEncodingDirection N 0018,9091 VelocityEncodingMinimumValue N 0018,9093 NumberOfKSpaceTrajectories N 0018,9094 CoverageOfKSpace N 0018,9095 SpectroscopyAcquisitionPhaseRows N 0018,9096 ParallelReductFactorInPlaneRetired N 0018,9098 TransmitterFrequency N 0018,9100 ResonantNucleus N 0018,9101 FrequencyCorrection N 0018,9103 MRSpectroscopyFOV-GeometrySequence N 0018,9104 SlabThickness N 0018,9105 SlabOrientation N 0018,9106 MidSlabPosition N 0018,9107 MRSpatialSaturationSequence N 0018,9112 MRTimingAndRelatedParametersSeq N 0018,9114 MREchoSequence N 0018,9115 MRModifierSequence N 0018,9117 MRDiffusionSequence N 0018,9118 CardiacTriggerSequence N 0018,9119 MRAveragesSequence N 0018,9125 MRFOV-GeometrySequence N 0018,9126 VolumeLocalizationSequence N 0018,9127 SpectroscopyAcquisitionDataColumns N 0018,9147 DiffusionAnisotropyType N 0018,9151 FrameReferenceDateTime N 0018,9152 MRMetaboliteMapSequence N 0018,9155 ParallelReductionFactorOutOfPlane N 0018,9159 SpectroscopyOutOfPlanePhaseSteps N 0018,9166 BulkMotionStatus N 0018,9168 ParallelReductionFactSecondInPlane N 0018,9169 CardiacBeatRejectionTechnique N 0018,9170 RespiratoryMotionCompTechnique N 0018,9171 RespiratorySignalSource N 0018,9172 BulkMotionCompensationTechnique N 0018,9173 BulkMotionSignalSource N 0018,9174 ApplicableSafetyStandardAgency N 0018,9175 ApplicableSafetyStandardDescr N 0018,9176 OperatingModeSequence N 0018,9177 OperatingModeType N 0018,9178 OperatingMode N 0018,9179 SpecificAbsorptionRateDefinition N 0018,9180 GradientOutputType N 0018,9181 SpecificAbsorptionRateValue N 0018,9182 GradientOutput N 0018,9183 FlowCompensationDirection N 0018,9184 TaggingDelay N 0018,9185 RespiratoryMotionCompTechDescr N 0018,9186 RespiratorySignalSourceID N 0018,9195 ChemicalShiftsMinIntegrateLimitHz N 0018,9196 ChemicalShiftsMaxIntegrateLimitHz N 0018,9197 MRVelocityEncodingSequence N 0018,9198 FirstOrderPhaseCorrection N 0018,9199 WaterReferencedPhaseCorrection N 0018,9200 MRSpectroscopyAcquisitionType N 0018,9214 RespiratoryCyclePosition N 0018,9217 VelocityEncodingMaximumValue N 0018,9218 TagSpacingSecondDimension N 0018,9219 TagAngleSecondAxis N 0018,9220 FrameAcquisitionDuration N 0018,9226 MRImageFrameTypeSequence N 0018,9227 MRSpectroscopyFrameTypeSequence N 0018,9231 MRAcqPhaseEncodingStepsInPlane N 0018,9232 MRAcqPhaseEncodingStepsOutOfPlane N 0018,9234 SpectroscopyAcqPhaseColumns N 0018,9236 CardiacCyclePosition N 0018,9239 SpecificAbsorptionRateSequence N 0018,9240 RFEchoTrainLength N 0018,9241 GradientEchoTrainLength N 0018,9295 ChemicalShiftsMinIntegrateLimitPPM N 0018,9296 ChemicalShiftsMaxIntegrateLimitPPM N 0018,9301 CTAcquisitionTypeSequence N 0018,9302 AcquisitionType N 0018,9303 TubeAngle N 0018,9304 CTAcquisitionDetailsSequence N 0018,9305 RevolutionTime N 0018,9306 SingleCollimationWidth N 0018,9307 TotalCollimationWidth N 0018,9308 CTTableDynamicsSequence N 0018,9309 TableSpeed N 0018,9310 TableFeedPerRotation N 0018,9311 SpiralPitchFactor N 0018,9312 CTGeometrySequence N 0018,9313 DataCollectionCenterPatient N 0018,9314 CTReconstructionSequence N 0018,9315 ReconstructionAlgorithm N 0018,9316 ConvolutionKernelGroup N 0018,9317 ReconstructionFieldOfView N 0018,9318 ReconstructionTargetCenterPatient N 0018,9319 ReconstructionAngle N 0018,9320 ImageFilter N 0018,9321 CTExposureSequence N 0018,9322 ReconstructionPixelSpacing N 0018,9323 ExposureModulationType N 0018,9324 EstimatedDoseSaving N 0018,9325 CTXRayDetailsSequence N 0018,9326 CTPositionSequence N 0018,9327 TablePosition N 0018,9328 ExposureTimeInMilliSec N 0018,9329 CTImageFrameTypeSequence N 0018,9330 XRayTubeCurrentInMilliAmps N 0018,9332 ExposureInMilliAmpSec N 0018,9333 ConstantVolumeFlag N 0018,9334 FluoroscopyFlag N 0018,9335 SourceToDataCollectionCenterDist N 0018,9337 ContrastBolusAgentNumber N 0018,9338 ContrastBolusIngredientCodeSeq N 0018,9340 ContrastAdministrationProfileSeq N 0018,9341 ContrastBolusUsageSequence N 0018,9342 ContrastBolusAgentAdministered N 0018,9343 ContrastBolusAgentDetected N 0018,9344 ContrastBolusAgentPhase N 0018,9345 CTDIvol N 0018,9346 CTDIPhantomTypeCodeSequence N 0018,9351 CalciumScoringMassFactorPatient N 0018,9352 CalciumScoringMassFactorDevice N 0018,9353 EnergyWeightingFactor N 0018,9360 CTAdditionalXRaySourceSequence N 0018,9401 ProjectionPixelCalibrationSequence N 0018,9402 DistanceSourceToIsocenter N 0018,9403 DistanceObjectToTableTop N 0018,9404 ObjectPixelSpacingInCenterOfBeam N 0018,9405 PositionerPositionSequence N 0018,9406 TablePositionSequence N 0018,9407 CollimatorShapeSequence N 0018,9412 XA-XRFFrameCharacteristicsSequence N 0018,9417 FrameAcquisitionSequence N 0018,9420 XRayReceptorType N 0018,9423 AcquisitionProtocolName N 0018,9424 AcquisitionProtocolDescription N 0018,9425 ContrastBolusIngredientOpaque N 0018,9426 DistanceReceptorPlaneToDetHousing N 0018,9427 IntensifierActiveShape N 0018,9428 IntensifierActiveDimensions N 0018,9429 PhysicalDetectorSize N 0018,9430 PositionOfIsocenterProjection N 0018,9432 FieldOfViewSequence N 0018,9433 FieldOfViewDescription N 0018,9434 ExposureControlSensingRegionsSeq N 0018,9435 ExposureControlSensingRegionShape N 0018,9436 ExposureControlSensRegionLeftEdge N 0018,9437 ExposureControlSensRegionRightEdge N 0018,9440 CenterOfCircExposControlSensRegion N 0018,9441 RadiusOfCircExposControlSensRegion N 0018,9447 ColumnAngulationPatient N 0018,9449 BeamAngle N 0018,9451 FrameDetectorParametersSequence N 0018,9452 CalculatedAnatomyThickness N 0018,9455 CalibrationSequence N 0018,9456 ObjectThicknessSequence N 0018,9457 PlaneIdentification N 0018,9461 FieldOfViewDimensionsInFloat N 0018,9462 IsocenterReferenceSystemSequence N 0018,9463 PositionerIsocenterPrimaryAngle N 0018,9464 PositionerIsocenterSecondaryAngle N 0018,9465 PositionerIsocenterDetRotAngle N 0018,9466 TableXPositionToIsocenter N 0018,9467 TableYPositionToIsocenter N 0018,9468 TableZPositionToIsocenter N 0018,9469 TableHorizontalRotationAngle N 0018,9470 TableHeadTiltAngle N 0018,9471 TableCradleTiltAngle N 0018,9472 FrameDisplayShutterSequence N 0018,9473 AcquiredImageAreaDoseProduct N 0018,9474 CArmPositionerTabletopRelationship N 0018,9476 XRayGeometrySequence N 0018,9477 IrradiationEventIDSequence N 0018,9504 XRay3DFrameTypeSequence N 0018,9506 ContributingSourcesSequence N 0018,9507 XRay3DAcquisitionSequence N 0018,9508 PrimaryPositionerScanArc N 0018,9509 SecondaryPositionerScanArc N 0018,9510 PrimaryPositionerScanStartAngle N 0018,9511 SecondaryPositionerScanStartAngle N 0018,9514 PrimaryPositionerIncrement N 0018,9515 SecondaryPositionerIncrement N 0018,9516 StartAcquisitionDateTime N 0018,9517 EndAcquisitionDateTime N 0018,9524 ApplicationName N 0018,9525 ApplicationVersion N 0018,9526 ApplicationManufacturer N 0018,9527 AlgorithmType N 0018,9528 AlgorithmDescription N 0018,9530 XRay3DReconstructionSequence N 0018,9531 ReconstructionDescription N 0018,9538 PerProjectionAcquisitionSequence N 0018,9601 DiffusionBMatrixSequence N 0018,9602 DiffusionBValueXX N 0018,9603 DiffusionBValueXY N 0018,9604 DiffusionBValueXZ N 0018,9605 DiffusionBValueYY N 0018,9606 DiffusionBValueYZ N 0018,9607 DiffusionBValueZZ N 0018,9701 DecayCorrectionDateTime N 0018,9715 StartDensityThreshold N 0018,9722 TerminationTimeThreshold N 0018,9725 DetectorGeometry N 0018,9727 AxialDetectorDimension N 0018,9735 PETPositionSequence N 0018,9739 NumberOfIterations N 0018,9740 NumberOfSubsets N 0018,9751 PETFrameTypeSequence N 0018,9756 ReconstructionType N 0018,9758 DecayCorrected N 0018,9759 AttenuationCorrected N 0018,9760 ScatterCorrected N 0018,9761 DeadTimeCorrected N 0018,9762 GantryMotionCorrected N 0018,9763 PatientMotionCorrected N 0018,9765 RandomsCorrected N 0018,9767 SensitivityCalibrated N 0018,9801 DepthsOfFocus N 0018,9804 ExclusionStartDatetime N 0018,9805 ExclusionDuration N 0018,9807 ImageDataTypeSequence N 0018,9808 DataType N 0018,980B AliasedDataType N 0018,A001 ContributingEquipmentSequence N 0018,A002 ContributionDateTime N 0018,A003 ContributionDescription N 0019,1002 NumberOfCellsIInDetector N 0019,1003 CellNumberAtTheta N 0019,1004 CellSpacing N 0019,100F HorizFrameOfRef N 0019,1011 SeriesContrast N 0019,1012 LastPseq N 0019,1013 StartNumberForBaseline N 0019,1014 EndNumberForBaseline N 0019,1015 StartNumberForEnhancedScans N 0019,1016 EndNumberForEnhancedScans N 0019,1017 SeriesPlane N 0019,1018 FirstScanRas N 0019,1019 FirstScanLocation N 0019,101A LastScanRas N 0019,101B LastScanLoc N 0019,101E DisplayFieldOfView N 0019,1023 TableSpeed N 0019,1024 MidScanTime N 0019,1025 MidScanFlag N 0019,1026 DegreesOfAzimuth N 0019,1027 GantryPeriod N 0019,102A XRayOnPosition N 0019,102B XRayOffPosition N 0019,102C NumberOfTriggers N 0019,102E AngleOfFirstView N 0019,102F TriggerFrequency N 0019,1039 ScanFOVType N 0019,1040 StatReconFlag N 0019,1041 ComputeType N 0019,1042 SegmentNumber N 0019,1043 TotalSegmentsRequested N 0019,1044 InterscanDelay N 0019,1047 ViewCompressionFactor N 0019,104A TotalNoOfRefChannels N 0019,104B DataSizeForScanData N 0019,1052 ReconPostProcflag N 0019,1057 CTWaterNumber N 0019,1058 CTBoneNumber N 0019,105A AcquisitionDuration N 0019,105E NumberOfChannels N 0019,105F IncrementBetweenChannels N 0019,1060 StartingView N 0019,1061 NumberOfViews N 0019,1062 IncrementBetweenViews N 0019,106A DependantOnNoViewsProcessed N 0019,106B FieldOfViewInDetectorCells N 0019,1070 ValueOfBackProjectionButton N 0019,1071 SetIfFatqEstimatesWereUsed N 0019,1072 ZChanAvgOverViews N 0019,1073 AvgOfLeftRefChansOverViews N 0019,1074 MaxLeftChanOverViews N 0019,1075 AvgOfRightRefChansOverViews N 0019,1076 MaxRightChanOverViews N 0019,107D SecondEcho N 0019,107E NumberOfEchoes N 0019,107F TableDelta N 0019,1081 Contiguous N 0019,1084 PeakSAR N 0019,1085 MonitorSAR N 0019,1087 CardiacRepetitionTime N 0019,1088 ImagesPerCardiacCycle N 0019,108A ActualReceiveGainAnalog N 0019,108B ActualReceiveGainDigital N 0019,108D DelayAfterTrigger N 0019,108F Swappf N 0019,1090 PauseInterval N 0019,1091 PulseTime N 0019,1092 SliceOffsetOnFreqAxis N 0019,1093 CenterFrequency N 0019,1094 TransmitGain N 0019,1095 AnalogReceiverGain N 0019,1096 DigitalReceiverGain N 0019,1097 BitmapDefiningCVs N 0019,1098 CenterFreqMethod N 0019,109B PulseSeqMode N 0019,109C PulseSeqName N 0019,109D PulseSeqDate N 0019,109E InternalPulseSeqName N 0019,109F TransmittingCoil N 0019,10A0 SurfaceCoilType N 0019,10A1 ExtremityCoilFlag N 0019,10A2 RawDataRunNumber N 0019,10A3 CalibratedFieldStrength N 0019,10A4 SATFatWaterBone N 0019,10A5 ReceiveBandwidth N 0019,10A7 UserData01 N 0019,10A8 UserData02 N 0019,10A9 UserData03 N 0019,10AA UserData04 N 0019,10AB UserData05 N 0019,10AC UserData06 N 0019,10AD UserData07 N 0019,10AE UserData08 N 0019,10AF UserData09 N 0019,10B0 UserData10 N 0019,10B1 UserData11 N 0019,10B2 UserData12 N 0019,10B3 UserData13 N 0019,10B4 UserData14 N 0019,10B5 UserData15 N 0019,10B6 UserData16 N 0019,10B7 UserData17 N 0019,10B8 UserData18 N 0019,10B9 UserData19 N 0019,10BA UserData20 N 0019,10BB UserData21 N 0019,10BC UserData22 N 0019,10BD UserData23 N 0019,10BE ProjectionAngle N 0019,10C0 SaturationPlanes N 0019,10C1 SurfaceCoilIntensity N 0019,10C2 SATLocationR N 0019,10C3 SATLocationL N 0019,10C4 SATLocationA N 0019,10C5 SATLocationP N 0019,10C6 SATLocationH N 0019,10C7 SATLocationF N 0019,10C8 SATThicknessR-L N 0019,10C9 SATThicknessA-P N 0019,10CA SATThicknessH-F N 0019,10CB PrescribedFlowAxis N 0019,10CC VelocityEncoding N 0019,10CD ThicknessDisclaimer N 0019,10CE PrescanType N 0019,10CF PrescanStatus N 0019,10D0 RawDataType N 0019,10D2 ProjectionAlgorithm N 0019,10D3 ProjectionAlgorithm N 0019,10D5 FractionalEcho N 0019,10D6 PrepPulse N 0019,10D7 CardiacPhases N 0019,10D8 VariableEchoflag N 0019,10D9 ConcatenatedSAT N 0019,10DA ReferenceChannelUsed N 0019,10DB BackProjectorCoefficient N 0019,10DC PrimarySpeedCorrectionUsed N 0019,10DD OverrangeCorrectionUsed N 0019,10DE DynamicZAlphaValue N 0019,10DF UserData N 0019,10E0 UserData N 0019,10E2 VelocityEncodeScale N 0019,10F2 FastPhases N 0019,10F9 TransmissionGain N 0020,0000 RelationshipGroupLength N 0020,000D StudyInstanceUID N 0020,000E SeriesInstanceUID N 0020,0010 StudyID N 0020,0011 SeriesNumber N 0020,0012 AcquisitionNumber N 0020,0013 InstanceNumber N 0020,0014 IsotopeNumber N 0020,0015 PhaseNumber N 0020,0016 IntervalNumber N 0020,0017 TimeSlotNumber N 0020,0018 AngleNumber N 0020,0019 ItemNumber N 0020,0020 PatientOrientation N 0020,0022 OverlayNumber N 0020,0024 CurveNumber N 0020,0026 LookupTableNumber N 0020,0030 ImagePosition N 0020,0032 ImagePositionPatient N 0020,0035 ImageOrientation N 0020,0037 ImageOrientationPatient N 0020,0050 Location N 0020,0052 FrameOfReferenceUID N 0020,0060 Laterality N 0020,0062 ImageLaterality N 0020,0070 ImageGeometryType N 0020,0080 MaskingImage N 0020,0100 TemporalPositionIdentifier N 0020,0105 NumberOfTemporalPositions N 0020,0110 TemporalResolution N 0020,0200 SynchronizationFrameOfReferenceUID N 0020,1000 SeriesInStudy N 0020,1001 AcquisitionsInSeries N 0020,1002 ImagesInAcquisition N 0020,1003 ImagesInSeries N 0020,1004 AcquisitionsInStudy N 0020,1005 ImagesInStudy N 0020,1020 Reference N 0020,1040 PositionReferenceIndicator N 0020,1041 SliceLocation N 0020,1070 OtherStudyNumbers N 0020,1200 NumberOfPatientRelatedStudies N 0020,1202 NumberOfPatientRelatedSeries N 0020,1204 NumberOfPatientRelatedInstances N 0020,1206 NumberOfStudyRelatedSeries N 0020,1208 NumberOfStudyRelatedInstances N 0020,1209 NumberOfSeriesRelatedInstances N 0020,31xx SourceImageIDs N 0020,3401 ModifyingDeviceID N 0020,3402 ModifiedImageID N 0020,3403 ModifiedImageDate N 0020,3404 ModifyingDeviceManufacturer N 0020,3405 ModifiedImageTime N 0020,3406 ModifiedImageDescription N 0020,4000 ImageComments N 0020,5000 OriginalImageIdentification N 0020,5002 OriginalImageIdentNomenclature N 0020,9056 StackID N 0020,9057 InStackPositionNumber N 0020,9071 FrameAnatomySequence N 0020,9072 FrameLaterality N 0020,9111 FrameContentSequence N 0020,9113 PlanePositionSequence N 0020,9116 PlaneOrientationSequence N 0020,9128 TemporalPositionIndex N 0020,9153 TriggerDelayTime N 0020,9156 FrameAcquisitionNumber N 0020,9157 DimensionIndexValues N 0020,9158 FrameComments N 0020,9161 ConcatenationUID N 0020,9162 InConcatenationNumber N 0020,9163 InConcatenationTotalNumber N 0020,9164 DimensionOrganizationUID N 0020,9165 DimensionIndexPointer N 0020,9167 FunctionalGroupPointer N 0020,9213 DimensionIndexPrivateCreator N 0020,9221 DimensionOrganizationSequence N 0020,9222 DimensionIndexSequence N 0020,9228 ConcatenationFrameOffsetNumber N 0020,9238 FunctionalGroupPrivateCreator N 0020,9241 NominalPercentageOfCardiacPhase N 0020,9245 NominalPercentOfRespiratoryPhase N 0020,9246 StartingRespiratoryAmplitude N 0020,9247 StartingRespiratoryPhase N 0020,9248 EndingRespiratoryAmplitude N 0020,9249 EndingRespiratoryPhase N 0020,9250 RespiratoryTriggerType N 0020,9251 RRIntervalTimeNominal N 0020,9252 ActualCardiacTriggerDelayTime N 0020,9253 RespiratorySynchronizationSequence N 0020,9254 RespiratoryIntervalTime N 0020,9255 NominalRespiratoryTriggerDelayTime N 0020,9256 RespiratoryTriggerDelayThreshold N 0020,9257 ActualRespiratoryTriggerDelayTime N 0020,9301 ImagePositionVolume N 0020,9302 ImageOrientationVolume N 0020,9308 ApexPosition N 0020,9421 DimensionDescriptionLabel N 0020,9450 PatientOrientationInFrameSequence N 0020,9453 FrameLabel N 0020,9518 AcquisitionIndex N 0020,9529 ContributingSOPInstancesRefSeq N 0020,9536 ReconstructionIndex N 0021,1003 SeriesFromWhichPrescribed N 0021,1005 GenesisVersionNow N 0021,1007 SeriesRecordChecksum N 0021,1018 GenesisVersionNow N 0021,1019 AcqreconRecordChecksum N 0021,1020 TableStartLocation N 0021,1035 SeriesFromWhichPrescribed N 0021,1036 ImageFromWhichPrescribed N 0021,1037 ScreenFormat N 0021,104A AnatomicalReferenceForScout N 0021,104F LocationsInAcquisition N 0021,1050 GraphicallyPrescribed N 0021,1051 RotationFromSourceXRot N 0021,1052 RotationFromSourceYRot N 0021,1053 RotationFromSourceZRot N 0021,1054 ImagePosition N 0021,1055 ImageOrientation N 0021,1056 IntegerSlop N 0021,1057 IntegerSlop N 0021,1058 IntegerSlop N 0021,1059 IntegerSlop N 0021,105A IntegerSlop N 0021,105B FloatSlop N 0021,105C FloatSlop N 0021,105D FloatSlop N 0021,105E FloatSlop N 0021,105F FloatSlop N 0021,1081 AutoWindowLevelAlpha N 0021,1082 AutoWindowLevelBeta N 0021,1083 AutoWindowLevelWindow N 0021,1084 ToWindowLevelLevel N 0021,1090 TubeFocalSpotPosition N 0021,1091 BiopsyPosition N 0021,1092 BiopsyTLocation N 0021,1093 BiopsyRefLocation N 0022,0001 LightPathFilterPassThroughWavelen N 0022,0002 LightPathFilterPassBand N 0022,0003 ImagePathFilterPassThroughWavelen N 0022,0004 ImagePathFilterPassBand N 0022,0005 PatientEyeMovementCommanded N 0022,0006 PatientEyeMovementCommandCodeSeq N 0022,0007 SphericalLensPower N 0022,0008 CylinderLensPower N 0022,0009 CylinderAxis N 0022,000A EmmetropicMagnification N 0022,000B IntraOcularPressure N 0022,000C HorizontalFieldOfView N 0022,000D PupilDilated N 0022,000E DegreeOfDilation N 0022,0010 StereoBaselineAngle N 0022,0011 StereoBaselineDisplacement N 0022,0012 StereoHorizontalPixelOffset N 0022,0013 StereoVerticalPixelOffset N 0022,0014 StereoRotation N 0022,0015 AcquisitionDeviceTypeCodeSequence N 0022,0016 IlluminationTypeCodeSequence N 0022,0017 LightPathFilterTypeStackCodeSeq N 0022,0018 ImagePathFilterTypeStackCodeSeq N 0022,0019 LensesCodeSequence N 0022,001A ChannelDescriptionCodeSequence N 0022,001B RefractiveStateSequence N 0022,001C MydriaticAgentCodeSequence N 0022,001D RelativeImagePositionCodeSequence N 0022,0020 StereoPairsSequence N 0022,0021 LeftImageSequence N 0022,0022 RightImageSequence N 0022,0030 AxialLengthOfTheEye N 0022,0031 OphthalmicFrameLocationSequence N 0022,0032 ReferenceCoordinates N 0022,0035 DepthSpatialResolution N 0022,0036 MaximumDepthDistortion N 0022,0037 AlongScanSpatialResolution N 0022,0038 MaximumAlongScanDistortion N 0022,0039 OphthalmicImageOrientation N 0022,0041 DepthOfTransverseImage N 0022,0042 MydriaticAgentConcUnitsSeq N 0022,0048 AcrossScanSpatialResolution N 0022,0049 MaximumAcrossScanDistortion N 0022,004E MydriaticAgentConcentration N 0022,0055 IlluminationWaveLength N 0022,0056 IlluminationPower N 0022,0057 IlluminationBandwidth N 0022,0058 MydriaticAgentSequence N 0023,1001 NumberOfSeriesInStudy N 0023,1002 NumberOfUnarchivedSeries N 0023,1010 ReferenceImageField N 0023,1050 SummaryImage N 0023,1070 StartTimeSecsInFirstAxial N 0023,1074 NoofUpdatesToHeader N 0023,107D IndicatesIfTheStudyHasCompleteInfo N 0025,1006 LastPulseSequenceUsed N 0025,1007 ImagesInSeries N 0025,1010 LandmarkCounter N 0025,1011 NumberOfAcquisitions N 0025,1014 IndicatesNoofUpdatesToHeader N 0025,1017 SeriesCompleteFlag N 0025,1018 NumberOfImagesArchived N 0025,1019 LastImageNumberUsed N 0025,101A PrimaryReceiverSuiteAndHost N 0027,1006 ImageArchiveFlag N 0027,1010 ScoutType N 0027,101C VmaMamp N 0027,101D VmaPhase N 0027,101E VmaMod N 0027,101F VmaClip N 0027,1020 SmartScanOnOffFlag N 0027,1030 ForeignImageRevision N 0027,1031 ImagingMode N 0027,1032 PulseSequence N 0027,1033 ImagingOptions N 0027,1035 PlaneType N 0027,1036 ObliquePlane N 0027,1040 RASLetterOfImageLocation N 0027,1041 ImageLocation N 0027,1042 CenterRCoordOfPlaneImage N 0027,1043 CenterACoordOfPlaneImage N 0027,1044 CenterSCoordOfPlaneImage N 0027,1045 NormalRCoord N 0027,1046 NormalACoord N 0027,1047 NormalSCoord N 0027,1048 RCoordOfTopRightCorner N 0027,1049 ACoordOfTopRightCorner N 0027,104A SCoordOfTopRightCorner N 0027,104B RCoordOfBottomRightCorner N 0027,104C ACoordOfBottomRightCorner N 0027,104D SCoordOfBottomRightCorner N 0027,1050 TableStartLocation N 0027,1051 TableEndLocation N 0027,1052 RASLetterForSideOfImage N 0027,1053 RASLetterForAnteriorPosterior N 0027,1054 RASLetterForScoutStartLoc N 0027,1055 RASLetterForScoutEndLoc N 0027,1060 ImageDimensionX N 0027,1061 ImageDimensionY N 0027,1062 NumberOfExcitations N 0028,0000 ImagePresentationGroupLength N 0028,0002 SamplesPerPixel N 0028,0003 SamplesPerPixelUsed N 0028,0004 PhotometricInterpretation N 0028,0005 ImageDimensions N 0028,0006 PlanarConfiguration N 0028,0008 NumberOfFrames N 0028,0009 FrameIncrementPointer N 0028,000A FrameDimensionPointer N 0028,0010 Rows N 0028,0011 Columns N 0028,0012 Planes N 0028,0014 UltrasoundColorDataPresent N 0028,0030 PixelSpacing N 0028,0031 ZoomFactor N 0028,0032 ZoomCenter N 0028,0034 PixelAspectRatio N 0028,0040 ImageFormat N 0028,0050 ManipulatedImage N 0028,0051 CorrectedImage N 0028,005F CompressionRecognitionCode N 0028,0060 CompressionCode N 0028,0061 CompressionOriginator N 0028,0062 CompressionLabel N 0028,0063 CompressionDescription N 0028,0065 CompressionSequence N 0028,0066 CompressionStepPointers N 0028,0068 RepeatInterval N 0028,0069 BitsGrouped N 0028,0070 PerimeterTable N 0028,0071 PerimeterValue N 0028,0080 PredictorRows N 0028,0081 PredictorColumns N 0028,0082 PredictorConstants N 0028,0090 BlockedPixels N 0028,0091 BlockRows N 0028,0092 BlockColumns N 0028,0093 RowOverlap N 0028,0094 ColumnOverlap N 0028,0100 BitsAllocated N 0028,0101 BitsStored N 0028,0102 HighBit N 0028,0103 PixelRepresentation N 0028,0104 SmallestValidPixelValue N 0028,0105 LargestValidPixelValue N 0028,0106 SmallestImagePixelValue N 0028,0107 LargestImagePixelValue N 0028,0108 SmallestPixelValueInSeries N 0028,0109 LargestPixelValueInSeries N 0028,0110 SmallestImagePixelValueInPlane N 0028,0111 LargestImagePixelValueInPlane N 0028,0120 PixelPaddingValue N 0028,0121 PixelPaddingRangeLimit N 0028,0200 ImageLocation N 0028,0300 QualityControlImage N 0028,0301 BurnedInAnnotation N 0028,0400 TransformLabel N 0028,0401 TransformVersionNumber N 0028,0402 NumberOfTransformSteps N 0028,0403 SequenceOfCompressedData N 0028,0404 DetailsOfCoefficients N 0028,04x2 CoefficientCoding N 0028,04x3 CoefficientCodingPointers N 0028,0700 DCTLabel N 0028,0701 DataBlockDescription N 0028,0702 DataBlock N 0028,0710 NormalizationFactorFormat N 0028,0720 ZonalMapNumberFormat N 0028,0721 ZonalMapLocation N 0028,0722 ZonalMapFormat N 0028,0730 AdaptiveMapFormat N 0028,0740 CodeNumberFormat N 0028,08x0 CodeLabel N 0028,08x2 NumberOfTables N 0028,08x3 CodeTableLocation N 0028,08x4 BitsForCodeWord N 0028,08x8 ImageDataLocation N 0028,0A02 PixelSpacingCalibrationType N 0028,0A04 PixelSpacingCalibrationDescription N 0028,1040 PixelIntensityRelationship N 0028,1041 PixelIntensityRelationshipSign N 0028,1050 WindowCenter N 0028,1051 WindowWidth N 0028,1052 RescaleIntercept N 0028,1053 RescaleSlope N 0028,1054 RescaleType N 0028,1055 WindowCenterAndWidthExplanation N 0028,1056 VOI_LUTFunction N 0028,1080 GrayScale N 0028,1090 RecommendedViewingMode N 0028,1100 GrayLookupTableDescriptor N 0028,1101 RedPaletteColorTableDescriptor N 0028,1102 GreenPaletteColorTableDescriptor N 0028,1103 BluePaletteColorTableDescriptor N 0028,1111 LargeRedPaletteColorTableDescr N 0028,1112 LargeGreenPaletteColorTableDescr N 0028,1113 LargeBluePaletteColorTableDescr N 0028,1199 PaletteColorTableUID N 0028,1200 GrayLookupTableData N 0028,1201 RedPaletteColorTableData N 0028,1202 GreenPaletteColorTableData N 0028,1203 BluePaletteColorTableData N 0028,1211 LargeRedPaletteColorTableData N 0028,1212 LargeGreenPaletteColorTableData N 0028,1213 LargeBluePaletteColorTableData N 0028,1214 LargePaletteColorLookupTableUID N 0028,1221 SegmentedRedColorTableData N 0028,1222 SegmentedGreenColorTableData N 0028,1223 SegmentedBlueColorTableData N 0028,1300 BreastImplantPresent N 0028,1350 PartialView N 0028,1351 PartialViewDescription N 0028,1352 PartialViewCodeSequence N 0028,135A SpatialLocationsPreserved N 0028,1402 DataPathAssignment N 0028,1404 BlendingLUT1Sequence N 0028,1406 BlendingWeightConstant N 0028,1408 BlendingLookupTableData N 0028,140C BlendingLUT2Sequence N 0028,140E DataPathID N 0028,140F RGBLUTTransferFunction N 0028,1410 AlphaLUTTransferFunction N 0028,2000 ICCProfile N 0028,2110 LossyImageCompression N 0028,2112 LossyImageCompressionRatio N 0028,2114 LossyImageCompressionMethod N 0028,3000 ModalityLUTSequence N 0028,3002 LUTDescriptor N 0028,3003 LUTExplanation N 0028,3004 ModalityLUTType N 0028,3006 LUTData N 0028,3010 VOILUTSequence N 0028,3110 SoftcopyVOILUTSequence N 0028,4000 ImagePresentationComments N 0028,5000 BiPlaneAcquisitionSequence N 0028,6010 RepresentativeFrameNumber N 0028,6020 FrameNumbersOfInterest N 0028,6022 FrameOfInterestDescription N 0028,6023 FrameOfInterestType N 0028,6030 MaskPointers N 0028,6040 RWavePointer N 0028,6100 MaskSubtractionSequence N 0028,6101 MaskOperation N 0028,6102 ApplicableFrameRange N 0028,6110 MaskFrameNumbers N 0028,6112 ContrastFrameAveraging N 0028,6114 MaskSubPixelShift N 0028,6120 TIDOffset N 0028,6190 MaskOperationExplanation N 0028,7FE0 PixelDataProviderURL N 0028,9001 DataPointRows N 0028,9002 DataPointColumns N 0028,9003 SignalDomainColumns N 0028,9099 LargestMonochromePixelValue N 0028,9108 DataRepresentation N 0028,9110 PixelMeasuresSequence N 0028,9132 FrameVOILUTSequence N 0028,9145 PixelValueTransformationSequence N 0028,9235 SignalDomainRows N 0028,9411 DisplayFilterPercentage N 0028,9415 FramePixelShiftSequence N 0028,9416 SubtractionItemID N 0028,9422 PixelIntensityRelationshipLUTSeq N 0028,9443 FramePixelDataPropertiesSequence N 0028,9444 GeometricalProperties N 0028,9445 GeometricMaximumDistortion N 0028,9446 ImageProcessingApplied N 0028,9454 MaskSelectionMode N 0028,9474 LUTFunction N 0028,9478 MaskVisibilityPercentage N 0028,9501 PixelShiftSequence N 0028,9502 RegionPixelShiftSequence N 0028,9503 VerticesOfTheRegion N 0028,9506 PixelShiftFrameRange N 0028,9507 LUTFrameRange N 0028,9520 ImageToEquipmentMappingMatrix N 0028,9537 EquipmentCoordinateSystemID N 0029,1004 LowerRangeOfPixels1a N 0029,1005 LowerRangeOfPixels1b N 0029,1006 LowerRangeOfPixels1c N 0029,1007 LowerRangeOfPixels1d N 0029,1008 LowerRangeOfPixels1e N 0029,1009 LowerRangeOfPixels1f N 0029,100A LowerRangeOfPixels1g N 0029,1015 LowerRangeOfPixels1h N 0029,1016 LowerRangeOfPixels1i N 0029,1017 LowerRangeOfPixels2 N 0029,1018 UpperRangeOfPixels2 N 0029,101A LenOfTotHdrInBytes N 0029,1026 VersionOfTheHdrStruct N 0029,1034 AdvantageCompOverflow N 0029,1035 AdvantageCompUnderflow N 0032,0000 StudyGroupLength N 0032,000A StudyStatusID N 0032,000C StudyPriorityID N 0032,0012 StudyIDIssuer N 0032,0032 StudyVerifiedDate N 0032,0033 StudyVerifiedTime N 0032,0034 StudyReadDate N 0032,0035 StudyReadTime N 0032,1000 ScheduledStudyStartDate N 0032,1001 ScheduledStudyStartTime N 0032,1010 ScheduledStudyStopDate N 0032,1011 ScheduledStudyStopTime N 0032,1020 ScheduledStudyLocation N 0032,1021 ScheduledStudyLocationAETitle N 0032,1030 ReasonForStudy N 0032,1031 RequestingPhysicianIDSequence N 0032,1032 RequestingPhysician N 0032,1033 RequestingService N 0032,1040 StudyArrivalDate N 0032,1041 StudyArrivalTime N 0032,1050 StudyCompletionDate N 0032,1051 StudyCompletionTime N 0032,1055 StudyComponentStatusID N 0032,1060 RequestedProcedureDescription N 0032,1064 RequestedProcedureCodeSequence N 0032,1070 RequestedContrastAgent N 0032,4000 StudyComments N 0038,0004 ReferencedPatientAliasSequence N 0038,0008 VisitStatusID N 0038,0010 AdmissionID N 0038,0011 IssuerOfAdmissionID N 0038,0016 RouteOfAdmissions N 0038,001A ScheduledAdmissionDate N 0038,001B ScheduledAdmissionTime N 0038,001C ScheduledDischargeDate N 0038,001D ScheduledDischargeTime N 0038,001E ScheduledPatientInstitResidence N 0038,0020 AdmittingDate N 0038,0021 AdmittingTime N 0038,0030 DischargeDate N 0038,0032 DischargeTime N 0038,0040 DischargeDiagnosisDescription N 0038,0044 DischargeDiagnosisCodeSequence N 0038,0050 SpecialNeeds N 0038,0060 ServiceEpisodeID N 0038,0061 IssuerOfServiceEpisodeID N 0038,0062 ServiceEpisodeDescription N 0038,0100 PertinentDocumentsSequence N 0038,0300 CurrentPatientLocation N 0038,0400 PatientInstitutionResidence N 0038,0500 PatientState N 0038,0502 PatientClinicalTrialParticipSeq N 0038,4000 VisitComments N 003A,0004 WaveformOriginality N 003A,0005 NumberOfWaveformChannels N 003A,0010 NumberOfWaveformSamples N 003A,001A SamplingFrequency N 003A,0020 MultiplexGroupLabel N 003A,0200 ChannelDefinitionSequence N 003A,0202 WaveformChannelNumber N 003A,0203 ChannelLabel N 003A,0205 ChannelStatus N 003A,0208 ChannelSourceSequence N 003A,0209 ChannelSourceModifiersSequence N 003A,020A SourceWaveformSequence N 003A,020C ChannelDerivationDescription N 003A,0210 ChannelSensitivity N 003A,0211 ChannelSensitivityUnitsSequence N 003A,0212 ChannelSensitivityCorrectionFactor N 003A,0213 ChannelBaseline N 003A,0214 ChannelTimeSkew N 003A,0215 ChannelSampleSkew N 003A,0218 ChannelOffset N 003A,021A WaveformBitsStored N 003A,0220 FilterLowFrequency N 003A,0221 FilterHighFrequency N 003A,0222 NotchFilterFrequency N 003A,0223 NotchFilterBandwidth N 003A,0230 WaveformDataDisplayScale N 003A,0231 WaveformDisplayBkgCIELabValue N 003A,0240 WaveformPresentationGroupSequence N 003A,0241 PresentationGroupNumber N 003A,0242 ChannelDisplaySequence N 003A,0244 ChannelRecommendDisplayCIELabValue N 003A,0245 ChannelPosition N 003A,0246 DisplayShadingFlag N 003A,0247 FractionalChannelDisplayScale N 003A,0248 AbsoluteChannelDisplayScale N 003A,0300 MultiplexAudioChannelsDescrCodeSeq N 003A,0301 ChannelIdentificationCode N 003A,0302 ChannelMode N 0040,0001 ScheduledStationAETitle N 0040,0002 ScheduledProcedureStepStartDate N 0040,0003 ScheduledProcedureStepStartTime N 0040,0004 ScheduledProcedureStepEndDate N 0040,0005 ScheduledProcedureStepEndTime N 0040,0006 ScheduledPerformingPhysiciansName N 0040,0007 ScheduledProcedureStepDescription N 0040,0008 ScheduledProtocolCodeSequence N 0040,0009 ScheduledProcedureStepID N 0040,000A StageCodeSequence N 0040,000B ScheduledPerformingPhysicianIDSeq N 0040,0010 ScheduledStationName N 0040,0011 ScheduledProcedureStepLocation N 0040,0012 PreMedication N 0040,0020 ScheduledProcedureStepStatus N 0040,0031 LocalNamespaceEntityID N 0040,0032 UniversalEntityID N 0040,0033 UniversalEntityIDType N 0040,0035 IdentifierTypeCode N 0040,0036 AssigningFacilitySequence N 0040,0100 ScheduledProcedureStepSequence N 0040,0220 ReferencedNonImageCompositeSOPSeq N 0040,0241 PerformedStationAETitle N 0040,0242 PerformedStationName N 0040,0243 PerformedLocation N 0040,0244 PerformedProcedureStepStartDate N 0040,0245 PerformedProcedureStepStartTime N 0040,0250 PerformedProcedureStepEndDate N 0040,0251 PerformedProcedureStepEndTime N 0040,0252 PerformedProcedureStepStatus N 0040,0253 PerformedProcedureStepID N 0040,0254 PerformedProcedureStepDescription N 0040,0255 PerformedProcedureTypeDescription N 0040,0260 PerformedProtocolCodeSequence N 0040,0261 PerformedProtocolType N 0040,0270 ScheduledStepAttributesSequence N 0040,0275 RequestAttributesSequence N 0040,0280 CommentsOnPerformedProcedureStep N 0040,0281 ProcStepDiscontinueReasonCodeSeq N 0040,0293 QuantitySequence N 0040,0294 Quantity N 0040,0295 MeasuringUnitsSequence N 0040,0296 BillingItemSequence N 0040,0300 TotalTimeOfFluoroscopy N 0040,0301 TotalNumberOfExposures N 0040,0302 EntranceDose N 0040,0303 ExposedArea N 0040,0306 DistanceSourceToEntrance N 0040,0307 DistanceSourceToSupport N 0040,030E ExposureDoseSequence N 0040,0310 CommentsOnRadiationDose N 0040,0312 XRayOutput N 0040,0314 HalfValueLayer N 0040,0316 OrganDose N 0040,0318 OrganExposed N 0040,0320 BillingProcedureStepSequence N 0040,0321 FilmConsumptionSequence N 0040,0324 BillingSuppliesAndDevicesSequence N 0040,0330 ReferencedProcedureStepSequence N 0040,0340 PerformedSeriesSequence N 0040,0400 CommentsOnScheduledProcedureStep N 0040,0440 ProtocolContextSequence N 0040,0441 ContentItemModifierSequence N 0040,050A SpecimenAccessionNumber N 0040,0512 ContainerIdentifier N 0040,051A ContainerDescription N 0040,0550 SpecimenSequence N 0040,0551 SpecimenIdentifier N 0040,0552 SpecimenDescriptionSequenceTrial N 0040,0553 SpecimenDescriptionTrial N 0040,0554 SpecimenUID N 0040,0555 AcquisitionContextSequence N 0040,0556 AcquisitionContextDescription N 0040,059A SpecimenTypeCodeSequence N 0040,0600 SpecimenShortDescription N 0040,06FA SlideIdentifier N 0040,071A ImageCenterPointCoordinatesSeq N 0040,072A XOffsetInSlideCoordinateSystem N 0040,073A YOffsetInSlideCoordinateSystem N 0040,074A ZOffsetInSlideCoordinateSystem N 0040,08D8 PixelSpacingSequence N 0040,08DA CoordinateSystemAxisCodeSequence N 0040,08EA MeasurementUnitsCodeSequence N 0040,09F8 VitalStainCodeSequenceTrial N 0040,1001 RequestedProcedureID N 0040,1002 ReasonForRequestedProcedure N 0040,1003 RequestedProcedurePriority N 0040,1004 PatientTransportArrangements N 0040,1005 RequestedProcedureLocation N 0040,1006 PlacerOrderNumber-Procedure N 0040,1007 FillerOrderNumber-Procedure N 0040,1008 ConfidentialityCode N 0040,1009 ReportingPriority N 0040,100A ReasonForRequestedProcedureCodeSeq N 0040,1010 NamesOfIntendedRecipientsOfResults N 0040,1011 IntendedRecipientsOfResultsIDSeq N 0040,1101 PersonIdentificationCodeSequence N 0040,1102 PersonAddress N 0040,1103 PersonTelephoneNumbers N 0040,1400 RequestedProcedureComments N 0040,2001 ReasonForImagingServiceRequest N 0040,2004 IssueDateOfImagingServiceRequest N 0040,2005 IssueTimeOfImagingServiceRequest N 0040,2006 PlacerOrderNum-ImagingServiceReq N 0040,2007 FillerOrderNum-ImagingServiceReq N 0040,2008 OrderEnteredBy N 0040,2009 OrderEntererLocation N 0040,2010 OrderCallbackPhoneNumber N 0040,2016 PlacerOrderNum-ImagingServiceReq N 0040,2017 FillerOrderNum-ImagingServiceReq N 0040,2400 ImagingServiceRequestComments N 0040,3001 ConfidentialityOnPatientDataDescr N 0040,4001 GenPurposeScheduledProcStepStatus N 0040,4002 GenPurposePerformedProcStepStatus N 0040,4003 GenPurposeSchedProcStepPriority N 0040,4004 SchedProcessingApplicationsCodeSeq N 0040,4005 SchedProcedureStepStartDateAndTime N 0040,4006 MultipleCopiesFlag N 0040,4007 PerformedProcessingAppsCodeSeq N 0040,4009 HumanPerformerCodeSequence N 0040,4010 SchedProcStepModificationDateTime N 0040,4011 ExpectedCompletionDateAndTime N 0040,4015 ResultingGenPurposePerfProcStepSeq N 0040,4016 RefGenPurposeSchedProcStepSeq N 0040,4018 ScheduledWorkitemCodeSequence N 0040,4019 PerformedWorkitemCodeSequence N 0040,4020 InputAvailabilityFlag N 0040,4021 InputInformationSequence N 0040,4022 RelevantInformationSequence N 0040,4023 RefGenPurSchedProcStepTransUID N 0040,4025 ScheduledStationNameCodeSequence N 0040,4026 ScheduledStationClassCodeSequence N 0040,4027 SchedStationGeographicLocCodeSeq N 0040,4028 PerformedStationNameCodeSequence N 0040,4029 PerformedStationClassCodeSequence N 0040,4030 PerformedStationGeogLocCodeSeq N 0040,4031 RequestedSubsequentWorkItemCodeSeq N 0040,4032 NonDICOMOutputCodeSequence N 0040,4033 OutputInformationSequence N 0040,4034 ScheduledHumanPerformersSequence N 0040,4035 ActualHumanPerformersSequence N 0040,4036 HumanPerformersOrganization N 0040,4037 HumanPerformerName N 0040,4040 RawDataHandling N 0040,8302 EntranceDoseInMilliGy N 0040,9094 RefImageRealWorldValueMappingSeq N 0040,9096 RealWorldValueMappingSequence N 0040,9098 PixelValueMappingCodeSequence N 0040,9210 LUTLabel N 0040,9211 RealWorldValueLastValueMapped N 0040,9212 RealWorldValueLUTData N 0040,9216 RealWorldValueFirstValueMapped N 0040,9224 RealWorldValueIntercept N 0040,9225 RealWorldValueSlope N 0040,A010 RelationshipType N 0040,A027 VerifyingOrganization N 0040,A030 VerificationDateTime N 0040,A032 ObservationDateTime N 0040,A040 ValueType N 0040,A043 ConceptNameCodeSequence N 0040,A050 ContinuityOfContent N 0040,A073 VerifyingObserverSequence N 0040,A075 VerifyingObserverName N 0040,A078 AuthorObserverSequence N 0040,A07A ParticipantSequence N 0040,A07C CustodialOrganizationSequence N 0040,A080 ParticipationType N 0040,A082 ParticipationDateTime N 0040,A084 ObserverType N 0040,A088 VerifyingObserverIdentCodeSequence N 0040,A090 EquivalentCDADocumentSequence N 0040,A0B0 ReferencedWaveformChannels N 0040,A120 DateTime N 0040,A121 Date N 0040,A122 Time N 0040,A123 PersonName N 0040,A124 UID N 0040,A130 TemporalRangeType N 0040,A132 ReferencedSamplePositions N 0040,A136 ReferencedFrameNumbers N 0040,A138 ReferencedTimeOffsets N 0040,A13A ReferencedDateTime N 0040,A160 TextValue N 0040,A168 ConceptCodeSequence N 0040,A170 PurposeOfReferenceCodeSequence N 0040,A180 AnnotationGroupNumber N 0040,A195 ModifierCodeSequence N 0040,A300 MeasuredValueSequence N 0040,A301 NumericValueQualifierCodeSequence N 0040,A30A NumericValue N 0040,A353 AddressTrial N 0040,A354 TelephoneNumberTrial N 0040,A360 PredecessorDocumentsSequence N 0040,A370 ReferencedRequestSequence N 0040,A372 PerformedProcedureCodeSequence N 0040,A375 CurrentRequestedProcEvidenceSeq N 0040,A385 PertinentOtherEvidenceSequence N 0040,A390 HL7StructuredDocumentRefSeq N 0040,A491 CompletionFlag N 0040,A492 CompletionFlagDescription N 0040,A493 VerificationFlag N 0040,A494 ArchiveRequested N 0040,A496 PreliminaryFlag N 0040,A504 ContentTemplateSequence N 0040,A525 IdenticalDocumentsSequence N 0040,A730 ContentSequence N 0040,B020 AnnotationSequence N 0040,DB00 TemplateIdentifier N 0040,DB06 TemplateVersion N 0040,DB07 TemplateLocalVersion N 0040,DB0B TemplateExtensionFlag N 0040,DB0C TemplateExtensionOrganizationUID N 0040,DB0D TemplateExtensionCreatorUID N 0040,DB73 ReferencedContentItemIdentifier N 0040,E001 HL7InstanceIdentifier N 0040,E004 HL7DocumentEffectiveTime N 0040,E006 HL7DocumentTypeCodeSequence N 0040,E010 RetrieveURI N 0040,E011 RetrieveLocationUID N 0042,0010 DocumentTitle N 0042,0011 EncapsulatedDocument N 0042,0012 MIMETypeOfEncapsulatedDocument N 0042,0013 SourceInstanceSequence N 0042,0014 ListOfMIMETypes N 0043,1001 BitmapOfPrescanOptions N 0043,1002 GradientOffsetInX N 0043,1003 GradientOffsetInY N 0043,1004 GradientOffsetInZ N 0043,1005 ImgIsOriginalOrUnoriginal N 0043,1006 NumberOfEPIShots N 0043,1007 ViewsPerSegment N 0043,1008 RespiratoryRateBpm N 0043,1009 RespiratoryTriggerPoint N 0043,100A TypeOfReceiverUsed N 0043,100B PeakRateOfChangeOfGradientField N 0043,100C LimitsInUnitsOfPercent N 0043,100D PSDEstimatedLimit N 0043,100E PSDEstimatedLimitInTeslaPerSecond N 0043,100F Saravghead N 0043,1010 WindowValue N 0043,1011 TotalInputViews N 0043,1012 X-RayChain N 0043,1013 DeconKernelParameters N 0043,1014 CalibrationParameters N 0043,1015 TotalOutputViews N 0043,1016 NumberOfOverranges N 0043,1017 IBHImageScaleFactors N 0043,1018 BBHCoefficients N 0043,1019 NumberOfBBHChainsToBlend N 0043,101A StartingChannelNumber N 0043,101B PpscanParameters N 0043,101C GEImageIntegrity N 0043,101D LevelValue N 0043,101E DeltaStartTime N 0043,101F MaxOverrangesInAView N 0043,1020 AvgOverrangesAllViews N 0043,1021 CorrectedAfterGlowTerms N 0043,1025 ReferenceChannels N 0043,1026 NoViewsRefChansBlocked N 0043,1027 ScanPitchRatio N 0043,1028 UniqueImageIden N 0043,1029 HistogramTables N 0043,102A UserDefinedData N 0043,102B PrivateScanOptions N 0043,102C EffectiveEchoSpacing N 0043,102D StringSlopField1 N 0043,102E StringSlopField2 N 0043,102F RawDataType N 0043,1030 RawDataType N 0043,1031 RACordOfTargetReconCenter N 0043,1032 RawDataType N 0043,1033 NegScanspacing N 0043,1034 OffsetFrequency N 0043,1035 UserUsageTag N 0043,1036 UserFillMapMSW N 0043,1037 UserFillMapLSW N 0043,1038 User25-48 N 0043,1039 SlopInt6-9 N 0043,1040 TriggerOnPosition N 0043,1041 DegreeOfRotation N 0043,1042 DASTriggerSource N 0043,1043 DASFpaGain N 0043,1044 DASOutputSource N 0043,1045 DASAdInput N 0043,1046 DASCalMode N 0043,1047 DASCalFrequency N 0043,1048 DASRegXm N 0043,1049 DASAutoZero N 0043,104A StartingChannelOfView N 0043,104B DASXmPattern N 0043,104C TGGCTriggerMode N 0043,104D StartScanToXrayOnDelay N 0043,104E DurationOfXrayOn N 0043,1060 SlopInt10-17 N 0043,1061 ScannerStudyEntityUID N 0043,1062 ScannerStudyID N 0043,106f ScannerTableEntry N 0044,0001 ProductPackageIdentifier N 0044,0002 SubstanceAdministrationApproval N 0044,0003 ApprovalStatusFurtherDescription N 0044,0004 ApprovalStatusDateTime N 0044,0007 ProductTypeCodeSequence N 0044,0008 ProductName N 0044,0009 ProductDescription N 0044,000A ProductLotIdentifier N 0044,000B ProductExpirationDateTime N 0044,0010 SubstanceAdministrationDateTime N 0044,0011 SubstanceAdministrationNotes N 0044,0012 SubstanceAdministrationDeviceID N 0044,0013 ProductParameterSequence N 0044,0019 SubstanceAdminParameterSeq N 0045,1001 NumberOfMacroRowsInDetector N 0045,1002 MacroWidthAtISOCenter N 0045,1003 DASType N 0045,1004 DASGain N 0045,1005 DASTemperature N 0045,1006 TableDirectionInOrOut N 0045,1007 ZSmoothingFactor N 0045,1008 ViewWeightingMode N 0045,1009 SigmaRowNumberWhichRowsWereUsed N 0045,100A MinimumDasValueFoundInTheScanData N 0045,100B MaximumOffsetShiftValueUsed N 0045,100C NumberOfViewsShifted N 0045,100D ZTrackingFlag N 0045,100E MeanZError N 0045,100F ZTrackingMaximumError N 0045,1010 StartingViewForRow2a N 0045,1011 NumberOfViewsInRow2a N 0045,1012 StartingViewForRow1a N 0045,1013 SigmaMode N 0045,1014 NumberOfViewsInRow1a N 0045,1015 StartingViewForRow2b N 0045,1016 NumberOfViewsInRow2b N 0045,1017 StartingViewForRow1b N 0045,1018 NumberOfViewsInRow1b N 0045,1019 AirFilterCalibrationDate N 0045,101A AirFilterCalibrationTime N 0045,101B PhantomCalibrationDate N 0045,101C PhantomCalibrationTime N 0045,101D ZSlopeCalibrationDate N 0045,101E ZSlopeCalibrationTime N 0045,101F CrosstalkCalibrationDate N 0045,1020 CrosstalkCalibrationTime N 0045,1021 IterboneOptionFlag N 0045,1022 PeristalticFlagOption N 0046,0012 LensDescription N 0046,0014 RightLensSequence N 0046,0015 LeftLensSequence N 0046,0018 CylinderSequence N 0046,0028 PrismSequence N 0046,0030 HorizontalPrismPower N 0046,0032 HorizontalPrismBase N 0046,0034 VerticalPrismPower N 0046,0036 VerticalPrismBase N 0046,0038 LensSegmentType N 0046,0040 OpticalTransmittance N 0046,0042 ChannelWidth N 0046,0044 PupilSize N 0046,0046 CornealSize N 0046,0060 DistancePupillaryDistance N 0046,0062 NearPupillaryDistance N 0046,0064 OtherPupillaryDistance N 0046,0075 RadiusOfCurvature N 0046,0076 KeratometricPower N 0046,0077 KeratometricAxis N 0046,0092 BackgroundColor N 0046,0094 Optotype N 0046,0095 OptotypePresentation N 0046,0100 AddNearSequence N 0046,0101 AddIntermediateSequence N 0046,0102 AddOtherSequence N 0046,0104 AddPower N 0046,0106 ViewingDistance N 0046,0125 ViewingDistanceType N 0046,0135 VisualAcuityModifiers N 0046,0137 DecimalVisualAcuity N 0046,0139 OptotypeDetailedDefinition N 0046,0146 SpherePower N 0046,0147 CylinderPower N 0050,0004 CalibrationImage N 0050,0010 DeviceSequence N 0050,0014 DeviceLength N 0050,0015 ContainerComponentWidth N 0050,0016 DeviceDiameter N 0050,0017 DeviceDiameterUnits N 0050,0018 DeviceVolume N 0050,0019 InterMarkerDistance N 0050,001B ContainerComponentID N 0050,0020 DeviceDescription N 0054,0010 EnergyWindowVector N 0054,0011 NumberOfEnergyWindows N 0054,0012 EnergyWindowInformationSequence N 0054,0013 EnergyWindowRangeSequence N 0054,0014 EnergyWindowLowerLimit N 0054,0015 EnergyWindowUpperLimit N 0054,0016 RadiopharmaceuticalInformationSeq N 0054,0017 ResidualSyringeCounts N 0054,0018 EnergyWindowName N 0054,0020 DetectorVector N 0054,0021 NumberOfDetectors N 0054,0022 DetectorInformationSequence N 0054,0030 PhaseVector N 0054,0031 NumberOfPhases N 0054,0032 PhaseInformationSequence N 0054,0033 NumberOfFramesInPhase N 0054,0036 PhaseDelay N 0054,0038 PauseBetweenFrames N 0054,0039 PhaseDescription N 0054,0050 RotationVector N 0054,0051 NumberOfRotations N 0054,0052 RotationInformationSequence N 0054,0053 NumberOfFramesInRotation N 0054,0060 RRIntervalVector N 0054,0061 NumberOfRRIntervals N 0054,0062 GatedInformationSequence N 0054,0063 DataInformationSequence N 0054,0070 TimeSlotVector N 0054,0071 NumberOfTimeSlots N 0054,0072 TimeSlotInformationSequence N 0054,0073 TimeSlotTime N 0054,0080 SliceVector N 0054,0081 NumberOfSlices N 0054,0090 AngularViewVector N 0054,0100 TimeSliceVector N 0054,0101 NumberOfTimeSlices N 0054,0200 StartAngle N 0054,0202 TypeOfDetectorMotion N 0054,0210 TriggerVector N 0054,0211 NumberOfTriggersInPhase N 0054,0220 ViewCodeSequence N 0054,0222 ViewModifierCodeSequence N 0054,0300 RadionuclideCodeSequence N 0054,0302 AdministrationRouteCodeSequence N 0054,0304 RadiopharmaceuticalCodeSequence N 0054,0306 CalibrationDataSequence N 0054,0308 EnergyWindowNumber N 0054,0400 ImageID N 0054,0410 PatientOrientationCodeSequence N 0054,0412 PatientOrientationModifierCodeSeq N 0054,0414 PatientGantryRelationshipCodeSeq N 0054,0500 SliceProgressionDirection N 0054,1000 SeriesType N 0054,1001 Units N 0054,1002 CountsSource N 0054,1004 ReprojectionMethod N 0054,1100 RandomsCorrectionMethod N 0054,1101 AttenuationCorrectionMethod N 0054,1102 DecayCorrection N 0054,1103 ReconstructionMethod N 0054,1104 DetectorLinesOfResponseUsed N 0054,1105 ScatterCorrectionMethod N 0054,1200 AxialAcceptance N 0054,1201 AxialMash N 0054,1202 TransverseMash N 0054,1203 DetectorElementSize N 0054,1210 CoincidenceWindowWidth N 0054,1220 SecondaryCountsType N 0054,1300 FrameReferenceTime N 0054,1310 PrimaryCountsAccumulated N 0054,1311 SecondaryCountsAccumulated N 0054,1320 SliceSensitivityFactor N 0054,1321 DecayFactor N 0054,1322 DoseCalibrationFactor N 0054,1323 ScatterFractionFactor N 0054,1324 DeadTimeFactor N 0054,1330 ImageIndex N 0054,1400 CountsIncluded N 0054,1401 DeadTimeCorrectionFlag N 0060,3000 HistogramSequence N 0060,3002 HistogramNumberOfBins N 0060,3004 HistogramFirstBinValue N 0060,3006 HistogramLastBinValue N 0060,3008 HistogramBinWidth N 0060,3010 HistogramExplanation N 0060,3020 HistogramData N 0062,0001 SegmentationType N 0062,0002 SegmentSequence N 0062,0003 SegmentedPropertyCategoryCodeSeq N 0062,0004 SegmentNumber N 0062,0005 SegmentLabel N 0062,0006 SegmentDescription N 0062,0008 SegmentAlgorithmType N 0062,0009 SegmentAlgorithmName N 0062,000A SegmentIdentificationSequence N 0062,000B ReferencedSegmentNumber N 0062,000C RecommendedDisplayGrayscaleValue N 0062,000D RecommendedDisplayCIELabValue N 0062,000E MaximumFractionalValue N 0062,000F SegmentedPropertyTypeCodeSequence N 0062,0010 SegmentationFractionalType N 0064,0002 DeformableRegistrationSequence N 0064,0003 SourceFrameOfReferenceUID N 0064,0005 DeformableRegistrationGridSequence N 0064,0007 GridDimensions N 0064,0008 GridResolution N 0064,0009 VectorGridData N 0064,000F PreDeformationMatrixRegistSeq N 0064,0010 PostDeformationMatrixRegistSeq N 0066,0001 NumberOfSurfaces N 0066,0002 SurfaceSequence N 0066,0003 SurfaceNumber N 0066,0004 SurfaceComments N 0066,0009 SurfaceProcessing N 0066,000A SurfaceProcessingRatio N 0066,000E FiniteVolume N 0066,0010 Manifold N 0066,0011 SurfacePointsSequence N 0066,0015 NumberOfSurfacePoints N 0066,0016 PointCoordinatesData N 0066,0017 PointPositionAccuracy N 0066,0018 MeanPointDistance N 0066,0019 MaximumPointDistance N 0066,001B AxisOfRotation N 0066,001C CenterOfRotation N 0066,001E NumberOfVectors N 0066,001F VectorDimensionality N 0066,0020 VectorAccuracy N 0066,0021 VectorCoordinateData N 0066,0023 TrianglePointIndexList N 0066,0024 EdgePointIndexList N 0066,0025 VertexPointIndexList N 0066,0026 TriangleStripSequence N 0066,0027 TriangleFanSequence N 0066,0028 LineSequence N 0066,0029 PrimitivePointIndexList N 0066,002A SurfaceCount N 0066,002F AlgorithmFamilyCodeSequ N 0066,0031 AlgorithmVersion N 0066,0032 AlgorithmParameters N 0066,0034 FacetSequence N 0066,0036 AlgorithmName N 0070,0001 GraphicAnnotationSequence N 0070,0002 GraphicLayer N 0070,0003 BoundingBoxAnnotationUnits N 0070,0004 AnchorPointAnnotationUnits N 0070,0005 GraphicAnnotationUnits N 0070,0006 UnformattedTextValue N 0070,0008 TextObjectSequence N 0070,0009 GraphicObjectSequence N 0070,0010 BoundingBoxTopLeftHandCorner N 0070,0011 BoundingBoxBottomRightHandCorner N 0070,0012 BoundingBoxTextHorizJustification N 0070,0014 AnchorPoint N 0070,0015 AnchorPointVisibility N 0070,0020 GraphicDimensions N 0070,0021 NumberOfGraphicPoints N 0070,0022 GraphicData N 0070,0023 GraphicType N 0070,0024 GraphicFilled N 0070,0040 ImageRotationRetired N 0070,0041 ImageHorizontalFlip N 0070,0042 ImageRotation N 0070,0050 DisplayedAreaTopLeftTrial N 0070,0051 DisplayedAreaBottomRightTrial N 0070,0052 DisplayedAreaTopLeft N 0070,0053 DisplayedAreaBottomRight N 0070,005A DisplayedAreaSelectionSequence N 0070,0060 GraphicLayerSequence N 0070,0062 GraphicLayerOrder N 0070,0066 GraphicLayerRecDisplayGraysclValue N 0070,0067 GraphicLayerRecDisplayRGBValue N 0070,0068 GraphicLayerDescription N 0070,0080 ContentLabel N 0070,0081 ContentDescription N 0070,0082 PresentationCreationDate N 0070,0083 PresentationCreationTime N 0070,0084 ContentCreatorName N 0070,0086 ContentCreatorIDCodeSequence N 0070,0100 PresentationSizeMode N 0070,0101 PresentationPixelSpacing N 0070,0102 PresentationPixelAspectRatio N 0070,0103 PresentationPixelMagRatio N 0070,0306 ShapeType N 0070,0308 RegistrationSequence N 0070,0309 MatrixRegistrationSequence N 0070,030A MatrixSequence N 0070,030C FrameOfRefTransformationMatrixType N 0070,030D RegistrationTypeCodeSequence N 0070,030F FiducialDescription N 0070,0310 FiducialIdentifier N 0070,0311 FiducialIdentifierCodeSequence N 0070,0312 ContourUncertaintyRadius N 0070,0314 UsedFiducialsSequence N 0070,0318 GraphicCoordinatesDataSequence N 0070,031A FiducialUID N 0070,031C FiducialSetSequence N 0070,031E FiducialSequence N 0070,0401 GraphicLayerRecomDisplayCIELabVal N 0070,0402 BlendingSequence N 0070,0403 RelativeOpacity N 0070,0404 ReferencedSpatialRegistrationSeq N 0070,0405 BlendingPosition N 0072,0002 HangingProtocolName N 0072,0004 HangingProtocolDescription N 0072,0006 HangingProtocolLevel N 0072,0008 HangingProtocolCreator N 0072,000A HangingProtocolCreationDateTime N 0072,000C HangingProtocolDefinitionSequence N 0072,000E HangingProtocolUserIDCodeSequence N 0072,0010 HangingProtocolUserGroupName N 0072,0012 SourceHangingProtocolSequence N 0072,0014 NumberOfPriorsReferenced N 0072,0020 ImageSetsSequence N 0072,0022 ImageSetSelectorSequence N 0072,0024 ImageSetSelectorUsageFlag N 0072,0026 SelectorAttribute N 0072,0028 SelectorValueNumber N 0072,0030 TimeBasedImageSetsSequence N 0072,0032 ImageSetNumber N 0072,0034 ImageSetSelectorCategory N 0072,0038 RelativeTime N 0072,003A RelativeTimeUnits N 0072,003C AbstractPriorValue N 0072,003E AbstractPriorCodeSequence N 0072,0040 ImageSetLabel N 0072,0050 SelectorAttributeVR N 0072,0052 SelectorSequencePointer N 0072,0054 SelectorSeqPointerPrivateCreator N 0072,0056 SelectorAttributePrivateCreator N 0072,0060 SelectorATValue N 0072,0062 SelectorCSValue N 0072,0064 SelectorISValue N 0072,0066 SelectorLOValue N 0072,0068 SelectorLTValue N 0072,006A SelectorPNValue N 0072,006C SelectorSHValue N 0072,006E SelectorSTValue N 0072,0070 SelectorUTValue N 0072,0072 SelectorDSValue N 0072,0074 SelectorFDValue N 0072,0076 SelectorFLValue N 0072,0078 SelectorULValue N 0072,007A SelectorUSValue N 0072,007C SelectorSLValue N 0072,007E SelectorSSValue N 0072,0080 SelectorCodeSequenceValue N 0072,0100 NumberOfScreens N 0072,0102 NominalScreenDefinitionSequence N 0072,0104 NumberOfVerticalPixels N 0072,0106 NumberOfHorizontalPixels N 0072,0108 DisplayEnvironmentSpatialPosition N 0072,010A ScreenMinimumGrayscaleBitDepth N 0072,010C ScreenMinimumColorBitDepth N 0072,010E ApplicationMaximumRepaintTime N 0072,0200 DisplaySetsSequence N 0072,0202 DisplaySetNumber N 0072,0203 DisplaySetLabel N 0072,0204 DisplaySetPresentationGroup N 0072,0206 DisplaySetPresentationGroupDescr N 0072,0208 PartialDataDisplayHandling N 0072,0210 SynchronizedScrollingSequence N 0072,0212 DisplaySetScrollingGroup N 0072,0214 NavigationIndicatorSequence N 0072,0216 NavigationDisplaySet N 0072,0218 ReferenceDisplaySets N 0072,0300 ImageBoxesSequence N 0072,0302 ImageBoxNumber N 0072,0304 ImageBoxLayoutType N 0072,0306 ImageBoxTileHorizontalDimension N 0072,0308 ImageBoxTileVerticalDimension N 0072,0310 ImageBoxScrollDirection N 0072,0312 ImageBoxSmallScrollType N 0072,0314 ImageBoxSmallScrollAmount N 0072,0316 ImageBoxLargeScrollType N 0072,0318 ImageBoxLargeScrollAmount N 0072,0320 ImageBoxOverlapPriority N 0072,0330 CineRelativeToRealTime N 0072,0400 FilterOperationsSequence N 0072,0402 FilterByCategory N 0072,0404 FilterByAttributePresence N 0072,0406 FilterByOperator N 0072,0432 SynchronizedImageBoxList N 0072,0434 TypeOfSynchronization N 0072,0500 BlendingOperationType N 0072,0510 ReformattingOperationType N 0072,0512 ReformattingThickness N 0072,0514 ReformattingInterval N 0072,0516 ReformattingOpInitialViewDir N 0072,0520 RenderingType3D N 0072,0600 SortingOperationsSequence N 0072,0602 SortByCategory N 0072,0604 SortingDirection N 0072,0700 DisplaySetPatientOrientation N 0072,0702 VOIType N 0072,0704 PseudoColorType N 0072,0706 ShowGrayscaleInverted N 0072,0710 ShowImageTrueSizeFlag N 0072,0712 ShowGraphicAnnotationFlag N 0072,0714 ShowPatientDemographicsFlag N 0072,0716 ShowAcquisitionTechniquesFlag N 0072,0717 DisplaySetHorizontalJustification N 0072,0718 DisplaySetVerticalJustification N 0074,1000 UnifiedProcedureStepState N 0074,1002 UPSProgressInformationSequence N 0074,1004 UnifiedProcedureStepProgress N 0074,1006 UnifiedProcedureStepProgressDescr N 0074,1008 UnifiedProcedureStepComURISeq N 0074,100a ContactURI N 0074,100c ContactDisplayName N 0074,1020 BeamTaskSequence N 0074,1022 BeamTaskType N 0074,1024 BeamOrderIndex N 0074,1030 DeliveryVerificationImageSequence N 0074,1032 VerificationImageTiming N 0074,1034 DoubleExposureFlag N 0074,1036 DoubleExposureOrdering N 0074,1038 DoubleExposureMeterset N 0074,103A DoubleExposureFieldDelta N 0074,1040 RelatedReferenceRTImageSequence N 0074,1042 GeneralMachineVerificationSequence N 0074,1044 ConventionalMachineVerificationSeq N 0074,1046 IonMachineVerificationSequence N 0074,1048 FailedAttributesSequence N 0074,104A OverriddenAttributesSequence N 0074,104C ConventionalControlPointVerifySeq N 0074,104E IonControlPointVerificationSeq N 0074,1050 AttributeOccurrenceSequence N 0074,1052 AttributeOccurrencePointer N 0074,1054 AttributeItemSelector N 0074,1056 AttributeOccurrencePrivateCreator N 0074,1200 ScheduledProcedureStepPriority N 0074,1202 WorklistLabel N 0074,1204 ProcedureStepLabel N 0074,1210 ScheduledProcessingParametersSeq N 0074,1212 PerformedProcessingParametersSeq N 0074,1216 UPSPerformedProcedureSequence N 0074,1220 RelatedProcedureStepSequence N 0074,1222 ProcedureStepRelationshipType N 0074,1230 DeletionLock N 0074,1234 ReceivingAE N 0074,1236 RequestingAE N 0074,1238 ReasonForCancellation N 0074,1242 SCPStatus N 0074,1244 SubscriptionListStatus N 0074,1246 UPSListStatus N 0088,0130 StorageMediaFileSetID N 0088,0140 StorageMediaFileSetUID N 0088,0200 IconImageSequence N 0088,0904 TopicTitle N 0088,0906 TopicSubject N 0088,0910 TopicAuthor N 0088,0912 TopicKeywords N 0100,0410 SOPInstanceStatus N 0100,0420 SOPAuthorizationDateAndTime N 0100,0424 SOPAuthorizationComment N 0100,0426 AuthorizationEquipmentCertNumber N 0400,0005 MACIDNumber N 0400,0010 MACCalculationTransferSyntaxUID N 0400,0015 MACAlgorithm N 0400,0020 DataElementsSigned N 0400,0100 DigitalSignatureUID N 0400,0105 DigitalSignatureDateTime N 0400,0110 CertificateType N 0400,0115 CertificateOfSigner N 0400,0120 Signature N 0400,0305 CertifiedTimestampType N 0400,0310 CertifiedTimestamp N 0400,0401 DigitalSignaturePurposeCodeSeq N 0400,0402 ReferencedDigitalSignatureSeq N 0400,0403 ReferencedSOPInstanceMACSeq N 0400,0404 MAC N 0400,0500 EncryptedAttributesSequence N 0400,0510 EncryptedContentTransferSyntaxUID N 0400,0520 EncryptedContent N 0400,0550 ModifiedAttributesSequence N 0400,0561 OriginalAttributesSequence N 0400,0562 AttributeModificationDateTime N 0400,0563 ModifyingSystem N 0400,0564 SourceOfPreviousValues N 0400,0565 ReasonForTheAttributeModification N 1000,xxx0 EscapeTriplet N 1000,xxx1 RunLengthTriplet N 1000,xxx2 HuffmanTableSize N 1000,xxx3 HuffmanTableTriplet N 1000,xxx4 ShiftTableSize N 1000,xxx5 ShiftTableTriplet N 1010,xxxx ZonalMap N 2000,0010 NumberOfCopies N 2000,001E PrinterConfigurationSequence N 2000,0020 PrintPriority N 2000,0030 MediumType N 2000,0040 FilmDestination N 2000,0050 FilmSessionLabel N 2000,0060 MemoryAllocation N 2000,0061 MaximumMemoryAllocation N 2000,0062 ColorImagePrintingFlag N 2000,0063 CollationFlag N 2000,0065 AnnotationFlag N 2000,0067 ImageOverlayFlag N 2000,0069 PresentationLUTFlag N 2000,006A ImageBoxPresentationLUTFlag N 2000,00A0 MemoryBitDepth N 2000,00A1 PrintingBitDepth N 2000,00A2 MediaInstalledSequence N 2000,00A4 OtherMediaAvailableSequence N 2000,00A8 SupportedImageDisplayFormatSeq N 2000,0500 ReferencedFilmBoxSequence N 2000,0510 ReferencedStoredPrintSequence N 2010,0010 ImageDisplayFormat N 2010,0030 AnnotationDisplayFormatID N 2010,0040 FilmOrientation N 2010,0050 FilmSizeID N 2010,0052 PrinterResolutionID N 2010,0054 DefaultPrinterResolutionID N 2010,0060 MagnificationType N 2010,0080 SmoothingType N 2010,00A6 DefaultMagnificationType N 2010,00A7 OtherMagnificationTypesAvailable N 2010,00A8 DefaultSmoothingType N 2010,00A9 OtherSmoothingTypesAvailable N 2010,0100 BorderDensity N 2010,0110 EmptyImageDensity N 2010,0120 MinDensity N 2010,0130 MaxDensity N 2010,0140 Trim N 2010,0150 ConfigurationInformation N 2010,0152 ConfigurationInformationDescr N 2010,0154 MaximumCollatedFilms N 2010,015E Illumination N 2010,0160 ReflectedAmbientLight N 2010,0376 PrinterPixelSpacing N 2010,0500 ReferencedFilmSessionSequence N 2010,0510 ReferencedImageBoxSequence N 2010,0520 ReferencedBasicAnnotationBoxSeq N 2020,0010 ImageBoxPosition N 2020,0020 Polarity N 2020,0030 RequestedImageSize N 2020,0040 RequestedDecimate-CropBehavior N 2020,0050 RequestedResolutionID N 2020,00A0 RequestedImageSizeFlag N 2020,00A2 DecimateCropResult N 2020,0110 BasicGrayscaleImageSequence N 2020,0111 BasicColorImageSequence N 2020,0130 ReferencedImageOverlayBoxSequence N 2020,0140 ReferencedVOILUTBoxSequence N 2030,0010 AnnotationPosition N 2030,0020 TextString N 2040,0010 ReferencedOverlayPlaneSequence N 2040,0011 ReferencedOverlayPlaneGroups N 2040,0020 OverlayPixelDataSequence N 2040,0060 OverlayMagnificationType N 2040,0070 OverlaySmoothingType N 2040,0072 OverlayOrImageMagnification N 2040,0074 MagnifyToNumberOfColumns N 2040,0080 OverlayForegroundDensity N 2040,0082 OverlayBackgroundDensity N 2040,0090 OverlayMode N 2040,0100 ThresholdDensity N 2040,0500 ReferencedImageBoxSequence N 2050,0010 PresentationLUTSequence N 2050,0020 PresentationLUTShape N 2050,0500 ReferencedPresentationLUTSequence N 2100,0010 PrintJobID N 2100,0020 ExecutionStatus N 2100,0030 ExecutionStatusInfo N 2100,0040 CreationDate N 2100,0050 CreationTime N 2100,0070 Originator N 2100,0140 DestinationAE N 2100,0160 OwnerID N 2100,0170 NumberOfFilms N 2100,0500 ReferencedPrintJobSequence N 2110,0010 PrinterStatus N 2110,0020 PrinterStatusInfo N 2110,0030 PrinterName N 2110,0099 PrintQueueID N 2120,0010 QueueStatus N 2120,0050 PrintJobDescriptionSequence N 2120,0070 ReferencedPrintJobSequence N 2130,0010 PrintManagementCapabilitiesSeq N 2130,0015 PrinterCharacteristicsSequence N 2130,0030 FilmBoxContentSequence N 2130,0040 ImageBoxContentSequence N 2130,0050 AnnotationContentSequence N 2130,0060 ImageOverlayBoxContentSequence N 2130,0080 PresentationLUTContentSequence N 2130,00A0 ProposedStudySequence N 2130,00C0 OriginalImageSequence N 2200,0001 LabelFromInfoExtractedFromInstance N 2200,0002 LabelText N 2200,0003 LabelStyleSelection N 2200,0004 MediaDisposition N 2200,0005 BarcodeValue N 2200,0006 BarcodeSymbology N 2200,0007 AllowMediaSplitting N 2200,0008 IncludeNonDICOMObjects N 2200,0009 IncludeDisplayApplication N 2200,000A SaveCompInstancesAfterMediaCreate N 2200,000B TotalNumberMediaPiecesCreated N 2200,000C RequestedMediaApplicationProfile N 2200,000D ReferencedStorageMediaSequence N 2200,000E FailureAttributes N 2200,000F AllowLossyCompression N 2200,0020 RequestPriority N 3002,0002 RTImageLabel N 3002,0003 RTImageName N 3002,0004 RTImageDescription N 3002,000A ReportedValuesOrigin N 3002,000C RTImagePlane N 3002,000D XRayImageReceptorTranslation N 3002,000E XRayImageReceptorAngle N 3002,0010 RTImageOrientation N 3002,0011 ImagePlanePixelSpacing N 3002,0012 RTImagePosition N 3002,0020 RadiationMachineName N 3002,0022 RadiationMachineSAD N 3002,0024 RadiationMachineSSD N 3002,0026 RTImageSID N 3002,0028 SourceToReferenceObjectDistance N 3002,0029 FractionNumber N 3002,0030 ExposureSequence N 3002,0032 MetersetExposure N 3002,0034 DiaphragmPosition N 3002,0040 FluenceMapSequence N 3002,0041 FluenceDataSource N 3002,0042 FluenceDataScale N 3002,0051 FluenceMode N 3002,0052 FluenceModeID N 3004,0001 DVHType N 3004,0002 DoseUnits N 3004,0004 DoseType N 3004,0006 DoseComment N 3004,0008 NormalizationPoint N 3004,000A DoseSummationType N 3004,000C GridFrameOffsetVector N 3004,000E DoseGridScaling N 3004,0010 RTDoseROISequence N 3004,0012 DoseValue N 3004,0014 TissueHeterogeneityCorrection N 3004,0040 DVHNormalizationPoint N 3004,0042 DVHNormalizationDoseValue N 3004,0050 DVHSequence N 3004,0052 DVHDoseScaling N 3004,0054 DVHVolumeUnits N 3004,0056 DVHNumberOfBins N 3004,0058 DVHData N 3004,0060 DVHReferencedROISequence N 3004,0062 DVHROIContributionType N 3004,0070 DVHMinimumDose N 3004,0072 DVHMaximumDose N 3004,0074 DVHMeanDose N 3006,0002 StructureSetLabel N 3006,0004 StructureSetName N 3006,0006 StructureSetDescription N 3006,0008 StructureSetDate N 3006,0009 StructureSetTime N 3006,0010 ReferencedFrameOfReferenceSequence N 3006,0012 RTReferencedStudySequence N 3006,0014 RTReferencedSeriesSequence N 3006,0016 ContourImageSequence N 3006,0020 StructureSetROISequence N 3006,0022 ROINumber N 3006,0024 ReferencedFrameOfReferenceUID N 3006,0026 ROIName N 3006,0028 ROIDescription N 3006,002A ROIDisplayColor N 3006,002C ROIVolume N 3006,0030 RTRelatedROISequence N 3006,0033 RTROIRelationship N 3006,0036 ROIGenerationAlgorithm N 3006,0038 ROIGenerationDescription N 3006,0039 ROIContourSequence N 3006,0040 ContourSequence N 3006,0042 ContourGeometricType N 3006,0044 ContourSlabThickness N 3006,0045 ContourOffsetVector N 3006,0046 NumberOfContourPoints N 3006,0048 ContourNumber N 3006,0049 AttachedContours N 3006,0050 ContourData N 3006,0080 RTROIObservationsSequence N 3006,0082 ObservationNumber N 3006,0084 ReferencedROINumber N 3006,0085 ROIObservationLabel N 3006,0086 RTROIIdentificationCodeSequence N 3006,0088 ROIObservationDescription N 3006,00A0 RelatedRTROIObservationsSequence N 3006,00A4 RTROIInterpretedType N 3006,00A6 ROIInterpreter N 3006,00B0 ROIPhysicalPropertiesSequence N 3006,00B2 ROIPhysicalProperty N 3006,00B4 ROIPhysicalPropertyValue N 3006,00B6 ROIElementalCompositionSequence N 3006,00B7 ROIElementalCompAtomicNumber N 3006,00B8 ROIElementalCompAtomicMassFraction N 3006,00C0 FrameOfReferenceRelationshipSeq N 3006,00C2 RelatedFrameOfReferenceUID N 3006,00C4 FrameOfReferenceTransformType N 3006,00C6 FrameOfReferenceTransformMatrix N 3006,00C8 FrameOfReferenceTransformComment N 3008,0010 MeasuredDoseReferenceSequence N 3008,0012 MeasuredDoseDescription N 3008,0014 MeasuredDoseType N 3008,0016 MeasuredDoseValue N 3008,0020 TreatmentSessionBeamSequence N 3008,0021 TreatmentSessionIonBeamSequence N 3008,0022 CurrentFractionNumber N 3008,0024 TreatmentControlPointDate N 3008,0025 TreatmentControlPointTime N 3008,002A TreatmentTerminationStatus N 3008,002B TreatmentTerminationCode N 3008,002C TreatmentVerificationStatus N 3008,0030 ReferencedTreatmentRecordSequence N 3008,0032 SpecifiedPrimaryMeterset N 3008,0033 SpecifiedSecondaryMeterset N 3008,0036 DeliveredPrimaryMeterset N 3008,0037 DeliveredSecondaryMeterset N 3008,003A SpecifiedTreatmentTime N 3008,003B DeliveredTreatmentTime N 3008,0040 ControlPointDeliverySequence N 3008,0041 IonControlPointDeliverySequence N 3008,0042 SpecifiedMeterset N 3008,0044 DeliveredMeterset N 3008,0045 MetersetRateSet N 3008,0046 MetersetRateDelivered N 3008,0047 ScanSpotMetersetsDelivered N 3008,0048 DoseRateDelivered N 3008,0050 TreatmentSummaryCalcDoseRefSeq N 3008,0052 CumulativeDoseToDoseReference N 3008,0054 FirstTreatmentDate N 3008,0056 MostRecentTreatmentDate N 3008,005A NumberOfFractionsDelivered N 3008,0060 OverrideSequence N 3008,0061 ParameterSequencePointer N 3008,0062 OverrideParameterPointer N 3008,0063 ParameterItemIndex N 3008,0064 MeasuredDoseReferenceNumber N 3008,0065 ParameterPointer N 3008,0066 OverrideReason N 3008,0068 CorrectedParameterSequence N 3008,006A CorrectionValue N 3008,0070 CalculatedDoseReferenceSequence N 3008,0072 CalculatedDoseReferenceNumber N 3008,0074 CalculatedDoseReferenceDescription N 3008,0076 CalculatedDoseReferenceDoseValue N 3008,0078 StartMeterset N 3008,007A EndMeterset N 3008,0080 ReferencedMeasuredDoseReferenceSeq N 3008,0082 ReferencedMeasuredDoseReferenceNum N 3008,0090 ReferencedCalculatedDoseRefSeq N 3008,0092 ReferencedCalculatedDoseRefNumber N 3008,00A0 BeamLimitingDeviceLeafPairsSeq N 3008,00B0 RecordedWedgeSequence N 3008,00C0 RecordedCompensatorSequence N 3008,00D0 RecordedBlockSequence N 3008,00E0 TreatmentSummaryMeasuredDoseRefSeq N 3008,00F0 RecordedSnoutSequence N 3008,00F2 RecordedRangeShifterSequence N 3008,00F4 RecordedLateralSpreadingDeviceSeq N 3008,00F6 RecordedRangeModulatorSequence N 3008,0100 RecordedSourceSequence N 3008,0105 SourceSerialNumber N 3008,0110 TreatmentSessionAppSetupSeq N 3008,0116 ApplicationSetupCheck N 3008,0120 RecordedBrachyAccessoryDeviceSeq N 3008,0122 ReferencedBrachyAccessoryDeviceNum N 3008,0130 RecordedChannelSequence N 3008,0132 SpecifiedChannelTotalTime N 3008,0134 DeliveredChannelTotalTime N 3008,0136 SpecifiedNumberOfPulses N 3008,0138 DeliveredNumberOfPulses N 3008,013A SpecifiedPulseRepetitionInterval N 3008,013C DeliveredPulseRepetitionInterval N 3008,0140 RecordedSourceApplicatorSequence N 3008,0142 ReferencedSourceApplicatorNumber N 3008,0150 RecordedChannelShieldSequence N 3008,0152 ReferencedChannelShieldNumber N 3008,0160 BrachyControlPointDeliveredSeq N 3008,0162 SafePositionExitDate N 3008,0164 SafePositionExitTime N 3008,0166 SafePositionReturnDate N 3008,0168 SafePositionReturnTime N 3008,0200 CurrentTreatmentStatus N 3008,0202 TreatmentStatusComment N 3008,0220 FractionGroupSummarySequence N 3008,0223 ReferencedFractionNumber N 3008,0224 FractionGroupType N 3008,0230 BeamStopperPosition N 3008,0240 FractionStatusSummarySequence N 3008,0250 TreatmentDate N 3008,0251 TreatmentTime N 300A,0002 RTPlanLabel N 300A,0003 RTPlanName N 300A,0004 RTPlanDescription N 300A,0006 RTPlanDate N 300A,0007 RTPlanTime N 300A,0009 TreatmentProtocols N 300A,000A PlanIntent N 300A,000B TreatmentSites N 300A,000C RTPlanGeometry N 300A,000E PrescriptionDescription N 300A,0010 DoseReferenceSequence N 300A,0012 DoseReferenceNumber N 300A,0013 DoseReferenceUID N 300A,0014 DoseReferenceStructureType N 300A,0015 NominalBeamEnergyUnit N 300A,0016 DoseReferenceDescription N 300A,0018 DoseReferencePointCoordinates N 300A,001A NominalPriorDose N 300A,0020 DoseReferenceType N 300A,0021 ConstraintWeight N 300A,0022 DeliveryWarningDose N 300A,0023 DeliveryMaximumDose N 300A,0025 TargetMinimumDose N 300A,0026 TargetPrescriptionDose N 300A,0027 TargetMaximumDose N 300A,0028 TargetUnderdoseVolumeFraction N 300A,002A OrganAtRiskFullVolumeDose N 300A,002B OrganAtRiskLimitDose N 300A,002C OrganAtRiskMaximumDose N 300A,002D OrganAtRiskOverdoseVolumeFraction N 300A,0040 ToleranceTableSequence N 300A,0042 ToleranceTableNumber N 300A,0043 ToleranceTableLabel N 300A,0044 GantryAngleTolerance N 300A,0046 BeamLimitingDeviceAngleTolerance N 300A,0048 BeamLimitingDeviceToleranceSeq N 300A,004A BeamLimitingDevicePositionTol N 300A,004B SnoutPositionTolerance N 300A,004C PatientSupportAngleTolerance N 300A,004E TableTopEccentricAngleTolerance N 300A,004F TableTopPitchAngleTolerance N 300A,0050 TableTopRollAngleTolerance N 300A,0051 TableTopVerticalPositionTolerance N 300A,0052 TableTopLongitudinalPositionTol N 300A,0053 TableTopLateralPositionTolerance N 300A,0055 RTPlanRelationship N 300A,0070 FractionGroupSequence N 300A,0071 FractionGroupNumber N 300A,0072 FractionGroupDescription N 300A,0078 NumberOfFractionsPlanned N 300A,0079 NumberFractionPatternDigitsPerDay N 300A,007A RepeatFractionCycleLength N 300A,007B FractionPattern N 300A,0080 NumberOfBeams N 300A,0082 BeamDoseSpecificationPoint N 300A,0084 BeamDose N 300A,0086 BeamMeterset N 300A,0088 BeamDosePointDepth N 300A,0089 BeamDosePointEquivalentDepth N 300A,008A BeamDosePointSSD N 300A,00A0 NumberOfBrachyApplicationSetups N 300A,00A2 BrachyAppSetupDoseSpecPoint N 300A,00A4 BrachyApplicationSetupDose N 300A,00B0 BeamSequence N 300A,00B2 TreatmentMachineName N 300A,00B3 PrimaryDosimeterUnit N 300A,00B4 SourceAxisDistance N 300A,00B6 BeamLimitingDeviceSequence N 300A,00B8 RTBeamLimitingDeviceType N 300A,00BA SourceToBeamLimitingDeviceDistance N 300A,00BB IsocenterToBeamLimitingDeviceDist N 300A,00BC NumberOfLeafJawPairs N 300A,00BE LeafPositionBoundaries N 300A,00C0 BeamNumber N 300A,00C2 BeamName N 300A,00C3 BeamDescription N 300A,00C4 BeamType N 300A,00C6 RadiationType N 300A,00C7 HighDoseTechniqueType N 300A,00C8 ReferenceImageNumber N 300A,00CA PlannedVerificationImageSequence N 300A,00CC ImagingDeviceSpecificAcqParams N 300A,00CE TreatmentDeliveryType N 300A,00D0 NumberOfWedges N 300A,00D1 WedgeSequence N 300A,00D2 WedgeNumber N 300A,00D3 WedgeType N 300A,00D4 WedgeID N 300A,00D5 WedgeAngle N 300A,00D6 WedgeFactor N 300A,00D7 TotalWedgeTrayWaterEquivThickness N 300A,00D8 WedgeOrientation N 300A,00D9 IsocenterToWedgeTrayDistance N 300A,00DA SourceToWedgeTrayDistance N 300A,00DB WedgeThinEdgePosition N 300A,00DC BolusID N 300A,00DD BolusDescription N 300A,00E0 NumberOfCompensators N 300A,00E1 MaterialID N 300A,00E2 TotalCompensatorTrayFactor N 300A,00E3 CompensatorSequence N 300A,00E4 CompensatorNumber N 300A,00E5 CompensatorID N 300A,00E6 SourceToCompensatorTrayDistance N 300A,00E7 CompensatorRows N 300A,00E8 CompensatorColumns N 300A,00E9 CompensatorPixelSpacing N 300A,00EA CompensatorPosition N 300A,00EB CompensatorTransmissionData N 300A,00EC CompensatorThicknessData N 300A,00ED NumberOfBoli N 300A,00EE CompensatorType N 300A,00F0 NumberOfBlocks N 300A,00F2 TotalBlockTrayFactor N 300A,00F3 TotalBlockTrayWaterEquivThickness N 300A,00F4 BlockSequence N 300A,00F5 BlockTrayID N 300A,00F6 SourceToBlockTrayDistance N 300A,00F7 IsocenterToBlockTrayDistance N 300A,00F8 BlockType N 300A,00F9 AccessoryCode N 300A,00FA BlockDivergence N 300A,00FB BlockMountingPosition N 300A,00FC BlockNumber N 300A,00FE BlockName N 300A,0100 BlockThickness N 300A,0102 BlockTransmission N 300A,0104 BlockNumberOfPoints N 300A,0106 BlockData N 300A,0107 ApplicatorSequence N 300A,0108 ApplicatorID N 300A,0109 ApplicatorType N 300A,010A ApplicatorDescription N 300A,010C CumulativeDoseReferenceCoefficient N 300A,010E FinalCumulativeMetersetWeight N 300A,0110 NumberOfControlPoints N 300A,0111 ControlPointSequence N 300A,0112 ControlPointIndex N 300A,0114 NominalBeamEnergy N 300A,0115 DoseRateSet N 300A,0116 WedgePositionSequence N 300A,0118 WedgePosition N 300A,011A BeamLimitingDevicePositionSequence N 300A,011C LeafJawPositions N 300A,011E GantryAngle N 300A,011F GantryRotationDirection N 300A,0120 BeamLimitingDeviceAngle N 300A,0121 BeamLimitingDeviceRotateDirection N 300A,0122 PatientSupportAngle N 300A,0123 PatientSupportRotationDirection N 300A,0124 TableTopEccentricAxisDistance N 300A,0125 TableTopEccentricAngle N 300A,0126 TableTopEccentricRotateDirection N 300A,0128 TableTopVerticalPosition N 300A,0129 TableTopLongitudinalPosition N 300A,012A TableTopLateralPosition N 300A,012C IsocenterPosition N 300A,012E SurfaceEntryPoint N 300A,0130 SourceToSurfaceDistance N 300A,0134 CumulativeMetersetWeight N 300A,0140 TableTopPitchAngle N 300A,0142 TableTopPitchRotationDirection N 300A,0144 TableTopRollAngle N 300A,0146 TableTopRollRotationDirection N 300A,0148 HeadFixationAngle N 300A,014A GantryPitchAngle N 300A,014C GantryPitchRotationDirection N 300A,014E GantryPitchAngleTolerance N 300A,0180 PatientSetupSequence N 300A,0182 PatientSetupNumber N 300A,0183 PatientSetupLabel N 300A,0184 PatientAdditionalPosition N 300A,0190 FixationDeviceSequence N 300A,0192 FixationDeviceType N 300A,0194 FixationDeviceLabel N 300A,0196 FixationDeviceDescription N 300A,0198 FixationDevicePosition N 300A,0199 FixationDevicePitchAngle N 300A,019A FixationDeviceRollAngle N 300A,01A0 ShieldingDeviceSequence N 300A,01A2 ShieldingDeviceType N 300A,01A4 ShieldingDeviceLabel N 300A,01A6 ShieldingDeviceDescription N 300A,01A8 ShieldingDevicePosition N 300A,01B0 SetupTechnique N 300A,01B2 SetupTechniqueDescription N 300A,01B4 SetupDeviceSequence N 300A,01B6 SetupDeviceType N 300A,01B8 SetupDeviceLabel N 300A,01BA SetupDeviceDescription N 300A,01BC SetupDeviceParameter N 300A,01D0 SetupReferenceDescription N 300A,01D2 TableTopVerticalSetupDisplacement N 300A,01D4 TableTopLongitudinalSetupDisplace N 300A,01D6 TableTopLateralSetupDisplacement N 300A,0200 BrachyTreatmentTechnique N 300A,0202 BrachyTreatmentType N 300A,0206 TreatmentMachineSequence N 300A,0210 SourceSequence N 300A,0212 SourceNumber N 300A,0214 SourceType N 300A,0216 SourceManufacturer N 300A,0218 ActiveSourceDiameter N 300A,021A ActiveSourceLength N 300A,0222 SourceEncapsulationNomThickness N 300A,0224 SourceEncapsulationNomTransmission N 300A,0226 SourceIsotopeName N 300A,0228 SourceIsotopeHalfLife N 300A,0229 SourceStrengthUnits N 300A,022A ReferenceAirKermaRate N 300A,022B SourceStrength N 300A,022C SourceStrengthReferenceDate N 300A,022E SourceStrengthReferenceTime N 300A,0230 ApplicationSetupSequence N 300A,0232 ApplicationSetupType N 300A,0234 ApplicationSetupNumber N 300A,0236 ApplicationSetupName N 300A,0238 ApplicationSetupManufacturer N 300A,0240 TemplateNumber N 300A,0242 TemplateType N 300A,0244 TemplateName N 300A,0250 TotalReferenceAirKerma N 300A,0260 BrachyAccessoryDeviceSequence N 300A,0262 BrachyAccessoryDeviceNumber N 300A,0263 BrachyAccessoryDeviceID N 300A,0264 BrachyAccessoryDeviceType N 300A,0266 BrachyAccessoryDeviceName N 300A,026A BrachyAccessoryDeviceNomThickness N 300A,026C BrachyAccessoryDevNomTransmission N 300A,0280 ChannelSequence N 300A,0282 ChannelNumber N 300A,0284 ChannelLength N 300A,0286 ChannelTotalTime N 300A,0288 SourceMovementType N 300A,028A NumberOfPulses N 300A,028C PulseRepetitionInterval N 300A,0290 SourceApplicatorNumber N 300A,0291 SourceApplicatorID N 300A,0292 SourceApplicatorType N 300A,0294 SourceApplicatorName N 300A,0296 SourceApplicatorLength N 300A,0298 SourceApplicatorManufacturer N 300A,029C SourceApplicatorWallNomThickness N 300A,029E SourceApplicatorWallNomTrans N 300A,02A0 SourceApplicatorStepSize N 300A,02A2 TransferTubeNumber N 300A,02A4 TransferTubeLength N 300A,02B0 ChannelShieldSequence N 300A,02B2 ChannelShieldNumber N 300A,02B3 ChannelShieldID N 300A,02B4 ChannelShieldName N 300A,02B8 ChannelShieldNominalThickness N 300A,02BA ChannelShieldNominalTransmission N 300A,02C8 FinalCumulativeTimeWeight N 300A,02D0 BrachyControlPointSequence N 300A,02D2 ControlPointRelativePosition N 300A,02D4 ControlPoint3DPosition N 300A,02D6 CumulativeTimeWeight N 300A,02E0 CompensatorDivergence N 300A,02E1 CompensatorMountingPosition N 300A,02E2 SourceToCompensatorDistance N 300A,02E3 TotalCompTrayWaterEquivThickness N 300A,02E4 IsocenterToCompensatorTrayDistance N 300A,02E5 CompensatorColumnOffset N 300A,02E6 IsocenterToCompensatorDistances N 300A,02E7 CompensatorRelStoppingPowerRatio N 300A,02E8 CompensatorMillingToolDiameter N 300A,02EA IonRangeCompensatorSequence N 300A,02EB CompensatorDescription N 300A,0302 RadiationMassNumber N 300A,0304 RadiationAtomicNumber N 300A,0306 RadiationChargeState N 300A,0308 ScanMode N 300A,030A VirtualSourceAxisDistances N 300A,030C SnoutSequence N 300A,030D SnoutPosition N 300A,030F SnoutID N 300A,0312 NumberOfRangeShifters N 300A,0314 RangeShifterSequence N 300A,0316 RangeShifterNumber N 300A,0318 RangeShifterID N 300A,0320 RangeShifterType N 300A,0322 RangeShifterDescription N 300A,0330 NumberOfLateralSpreadingDevices N 300A,0332 LateralSpreadingDeviceSequence N 300A,0334 LateralSpreadingDeviceNumber N 300A,0336 LateralSpreadingDeviceID N 300A,0338 LateralSpreadingDeviceType N 300A,033A LateralSpreadingDeviceDescription N 300A,033C LateralSpreadingDevWaterEquivThick N 300A,0340 NumberOfRangeModulators N 300A,0342 RangeModulatorSequence N 300A,0344 RangeModulatorNumber N 300A,0346 RangeModulatorID N 300A,0348 RangeModulatorType N 300A,034A RangeModulatorDescription N 300A,034C BeamCurrentModulationID N 300A,0350 PatientSupportType N 300A,0352 PatientSupportID N 300A,0354 PatientSupportAccessoryCode N 300A,0356 FixationLightAzimuthalAngle N 300A,0358 FixationLightPolarAngle N 300A,035A MetersetRate N 300A,0360 RangeShifterSettingsSequence N 300A,0362 RangeShifterSetting N 300A,0364 IsocenterToRangeShifterDistance N 300A,0366 RangeShifterWaterEquivThickness N 300A,0370 LateralSpreadingDeviceSettingsSeq N 300A,0372 LateralSpreadingDeviceSetting N 300A,0374 IsocenterToLateralSpreadingDevDist N 300A,0380 RangeModulatorSettingsSequence N 300A,0382 RangeModulatorGatingStartValue N 300A,0384 RangeModulatorGatingStopValue N 300A,038A IsocenterToRangeModulatorDistance N 300A,0390 ScanSpotTuneID N 300A,0392 NumberOfScanSpotPositions N 300A,0394 ScanSpotPositionMap N 300A,0396 ScanSpotMetersetWeights N 300A,0398 ScanningSpotSize N 300A,039A NumberOfPaintings N 300A,03A0 IonToleranceTableSequence N 300A,03A2 IonBeamSequence N 300A,03A4 IonBeamLimitingDeviceSequence N 300A,03A6 IonBlockSequence N 300A,03A8 IonControlPointSequence N 300A,03AA IonWedgeSequence N 300A,03AC IonWedgePositionSequence N 300A,0401 ReferencedSetupImageSequence N 300A,0402 SetupImageComment N 300A,0410 MotionSynchronizationSequence N 300A,0412 ControlPointOrientation N 300A,0420 GeneralAccessorySequence N 300A,0421 GeneralAccessoryID N 300A,0422 GeneralAccessoryDescription N 300A,0423 GeneralAccessoryType N 300A,0424 GeneralAccessoryNumber N 300C,0002 ReferencedRTPlanSequence N 300C,0004 ReferencedBeamSequence N 300C,0006 ReferencedBeamNumber N 300C,0007 ReferencedReferenceImageNumber N 300C,0008 StartCumulativeMetersetWeight N 300C,0009 EndCumulativeMetersetWeight N 300C,000A ReferencedBrachyAppSetupSeq N 300C,000C ReferencedBrachyAppSetupNumber N 300C,000E ReferencedSourceNumber N 300C,0020 ReferencedFractionGroupSequence N 300C,0022 ReferencedFractionGroupNumber N 300C,0040 ReferencedVerificationImageSeq N 300C,0042 ReferencedReferenceImageSequence N 300C,0050 ReferencedDoseReferenceSequence N 300C,0051 ReferencedDoseReferenceNumber N 300C,0055 BrachyReferencedDoseReferenceSeq N 300C,0060 ReferencedStructureSetSequence N 300C,006A ReferencedPatientSetupNumber N 300C,0080 ReferencedDoseSequence N 300C,00A0 ReferencedToleranceTableNumber N 300C,00B0 ReferencedBolusSequence N 300C,00C0 ReferencedWedgeNumber N 300C,00D0 ReferencedCompensatorNumber N 300C,00E0 ReferencedBlockNumber N 300C,00F0 ReferencedControlPointIndex N 300C,00F2 ReferencedControlPointSequence N 300C,00F4 ReferencedStartControlPointIndex N 300C,00F6 ReferencedStopControlPointIndex N 300C,0100 ReferencedRangeShifterNumber N 300C,0102 ReferencedLateralSpreadingDevNum N 300C,0104 ReferencedRangeModulatorNumber N 300E,0002 ApprovalStatus N 300E,0004 ReviewDate N 300E,0005 ReviewTime N 300E,0008 ReviewerName N 4000,0000 TextGroupLength N 4000,0010 Arbitrary N 4000,4000 TextComments N 4008,0040 ResultsID N 4008,0042 ResultsIDIssuer N 4008,0050 ReferencedInterpretationSequence N 4008,0100 InterpretationRecordedDate N 4008,0101 InterpretationRecordedTime N 4008,0102 InterpretationRecorder N 4008,0103 ReferenceToRecordedSound N 4008,0108 InterpretationTranscriptionDate N 4008,0109 InterpretationTranscriptionTime N 4008,010A InterpretationTranscriber N 4008,010B InterpretationText N 4008,010C InterpretationAuthor N 4008,0111 InterpretationApproverSequence N 4008,0112 InterpretationApprovalDate N 4008,0113 InterpretationApprovalTime N 4008,0114 PhysicianApprovingInterpretation N 4008,0115 InterpretationDiagnosisDescription N 4008,0117 InterpretationDiagnosisCodeSeq N 4008,0118 ResultsDistributionListSequence N 4008,0119 DistributionName N 4008,011A DistributionAddress N 4008,0200 InterpretationID N 4008,0202 InterpretationIDIssuer N 4008,0210 InterpretationTypeID N 4008,0212 InterpretationStatusID N 4008,0300 Impressions N 4008,4000 ResultsComments N 4FFE,0001 MACParametersSequence N 50xx,0005 CurveDimensions N 50xx,0010 NumberOfPoints N 50xx,0020 TypeOfData N 50xx,0022 CurveDescription N 50xx,0030 AxisUnits N 50xx,0040 AxisLabels N 50xx,0103 DataValueRepresentation N 50xx,0104 MinimumCoordinateValue N 50xx,0105 MaximumCoordinateValue N 50xx,0106 CurveRange N 50xx,0110 CurveDataDescriptor N 50xx,0112 CoordinateStartValue N 50xx,0114 CoordinateStepValue N 50xx,1001 CurveActivationLayer N 50xx,2000 AudioType N 50xx,2002 AudioSampleFormat N 50xx,2004 NumberOfChannels N 50xx,2006 NumberOfSamples N 50xx,2008 SampleRate N 50xx,200A TotalTime N 50xx,200C AudioSampleData N 50xx,200E AudioComments N 50xx,2500 CurveLabel N 50xx,2600 ReferencedOverlaySequence N 50xx,2610 ReferencedOverlayGroup N 50xx,3000 CurveData N 5200,9229 SharedFunctionalGroupsSequence N 5200,9230 PerFrameFunctionalGroupsSequence N 5400,0100 WaveformSequence N 5400,0110 ChannelMinimumValue N 5400,0112 ChannelMaximumValue N 5400,1004 WaveformBitsAllocated N 5400,1006 WaveformSampleInterpretation N 5400,100A WaveformPaddingValue N 5400,1010 WaveformData N 5600,0010 FirstOrderPhaseCorrectionAngle N 5600,0020 SpectroscopyData N 6000,0000 OverlayGroupLength N 60xx,0010 OverlayRows N 60xx,0011 OverlayColumns N 60xx,0012 OverlayPlanes N 60xx,0015 NumberOfFramesInOverlay N 60xx,0022 OverlayDescription N 60xx,0040 OverlayType N 60xx,0045 OverlaySubtype N 60xx,0050 OverlayOrigin N 60xx,0051 ImageFrameOrigin N 60xx,0052 OverlayPlaneOrigin N 60xx,0060 OverlayCompressionCode N 60xx,0061 OverlayCompressionOriginator N 60xx,0062 OverlayCompressionLabel N 60xx,0063 OverlayCompressionDescription N 60xx,0066 OverlayCompressionStepPointers N 60xx,0068 OverlayRepeatInterval N 60xx,0069 OverlayBitsGrouped N 60xx,0100 OverlayBitsAllocated N 60xx,0102 OverlayBitPosition N 60xx,0110 OverlayFormat N 60xx,0200 OverlayLocation N 60xx,0800 OverlayCodeLabel N 60xx,0802 OverlayNumberOfTables N 60xx,0803 OverlayCodeTableLocation N 60xx,0804 OverlayBitsForCodeWord N 60xx,1001 OverlayActivationLayer N 60xx,1100 OverlayDescriptorGray N 60xx,1101 OverlayDescriptorRed N 60xx,1102 OverlayDescriptorGreen N 60xx,1103 OverlayDescriptorBlue N 60xx,1200 OverlaysGray N 60xx,1201 OverlaysRed N 60xx,1202 OverlaysGreen N 60xx,1203 OverlaysBlue N 60xx,1301 ROIArea N 60xx,1302 ROIMean N 60xx,1303 ROIStandardDeviation N 60xx,1500 OverlayLabel N 60xx,3000 OverlayData N 60xx,4000 OverlayComments N 7Fxx,0000 PixelDataGroupLength N 7Fxx,0010 PixelData N 7Fxx,0011 VariableNextDataGroup N 7Fxx,0020 VariableCoefficientsSDVN N 7Fxx,0030 VariableCoefficientsSDHN N 7Fxx,0040 VariableCoefficientsSDDN N FFFA,FFFA DigitalSignaturesSequence N FFFC,FFFC DataSetTrailingPadding N FFFE,E000 StartOfItem N FFFE,E00D EndOfItems N FFFE,E0DD EndOfSequence N =head2 HTML Tags Meta information extracted from the header of HTML and XHTML files. This is a mix of information found in the C<META> elements, C<XML> element, and the C<TITLE> element. Tag ID Tag Name Writable ------ -------- -------- 'abstract' Abstract N 'author' Author N 'classification' Classification N 'content-language' ContentLanguage N 'copyright' Copyright N 'dc' DC HTML dc 'description' Description N 'distribution' Distribution N 'doc-class' DocClass N 'doc-rights' DocRights N 'doc-type' DocType N 'formatter' Formatter N 'generator' Generator N 'generatorversion' GeneratorVersion N 'googlebot' GoogleBot N 'http-equiv' HTTP-equiv HTML equiv 'keywords' Keywords N+ 'mssmarttagspreventparsing' NoMSSmartTags N 'ncc' NCC HTML ncc 'o' Office HTML Office 'originator' Originator N 'owner' Owner N 'prod' Prod HTML prod 'progid' ProgID N 'rating' Rating N 'refresh' Refresh N 'resource-type' ResourceType N 'revisit-after' RevisitAfter N 'robots' Robots N+ 'title' Title N 'vw96' VW96 HTML vw96 =head3 HTML dc Tags Dublin Core schema tags (also used in XMP). Tag ID Tag Name Writable ------ -------- -------- 'contributor' Contributor N+ 'coverage' Coverage N 'creator' Creator N+ 'date' Date N+ 'description' Description N 'format' Format N 'identifier' Identifier N 'language' Language N+ 'publisher' Publisher N+ 'relation' Relation N+ 'rights' Rights N 'source' Source N 'subject' Subject N+ 'title' Title N 'type' Type N+ =head3 HTML equiv Tags These tags have a family 1 group name of "HTTP-equiv". Tag ID Tag Name Writable ------ -------- -------- 'cache-control' CacheControl N 'content-disposition' ContentDisposition N 'content-language' ContentLanguage N 'content-script-type' ContentScriptType N 'content-style-type' ContentStyleType N 'content-type' ContentType N 'default-style' DefaultStyle N 'expires' Expires N 'ext-cache' ExtCache N 'imagetoolbar' ImageToolbar N 'lotus' Lotus N 'page-enter' PageEnter N 'page-exit' PageExit N 'pics-label' PicsLabel N 'pragma' Pragma N 'refresh' Refresh N 'reply-to' ReplyTo N 'set-cookie' SetCookie N 'site-enter' SiteEnter N 'site-exit' SiteExit N 'vary' Vary N 'window-target' WindowTarget N =head3 HTML ncc Tags Tag ID Tag Name Writable ------ -------- -------- 'charset' CharacterSet N 'depth' Depth N 'files' Files N 'footnotes' Footnotes N 'generator' Generator N 'kbytesize' KByteSize N 'maxpagenormal' MaxPageNormal N 'multimediatype' MultimediaType N 'narrator' Narrator N 'pagefront' PageFront N 'pagenormal' PageNormal N 'pagespecial' PageSpecial N 'prodnotes' ProdNotes N 'produceddate' ProducedDate N 'producer' Producer N 'revision' Revision N 'revisiondate' RevisionDate N 'setinfo' SetInfo N 'sidebars' Sidebars N 'sourcedate' SourceDate N 'sourceedition' SourceEdition N 'sourcepublisher' SourcePublisher N 'sourcerights' SourceRights N 'sourcetitle' SourceTitle N 'tocitems' TOCItems N 'totaltime' Duration N =head3 HTML Office Tags Tags written by Microsoft Office applications. Tag ID Tag Name Writable ------ -------- -------- 'Author' Author N 'Category' Category N 'Characters' Characters N 'CharactersWithSpaces' CharactersWithSpaces N 'Company' Company N 'Created' CreateDate N 'Description' Description N 'Keywords' Keywords N 'LastAuthor' LastAuthor N 'LastPrinted' LastPrinted N 'LastSaved' ModifyDate N 'Lines' Lines N 'Manager' Manager N 'Pages' Pages N 'Paragraphs' Paragraphs N 'Revision' RevisionNumber N 'Subject' Subject N 'Template' Template N 'TotalTime' TotalEditTime N 'Version' RevisionNumber N 'Words' Words N =head3 HTML prod Tags Tag ID Tag Name Writable ------ -------- -------- 'recengineer' RecEngineer N 'reclocation' RecLocation N =head3 HTML vw96 Tags Tag ID Tag Name Writable ------ -------- -------- 'objecttype' ObjectType N =head2 Palm Tags Information extracted from Palm database files (PDB and PRC extensions), Mobipocket electronic books (MOBI), and Amazon Kindle KF7 and KF8 books (AZW and AZW3). Index4 Tag Name Writable ------ -------- -------- 0 DatabaseName N 9 CreateDate N 10 ModifyDate N 11 LastBackupDate N 12 ModificationNumber N 15 PalmFileType N =head3 Palm MOBI Tags Information extracted from the MOBI header of Mobipocket and Amazon Kindle KF7 and KF8 files. Index4 Tag Name Writable ------ -------- -------- 0 Compression N 1 UncompressedTextLength N 3 Encryption N 6 MobiType N 7 CodePage N 9 MobiVersion N 21 BookName N 26 MinimumVersion N =head3 Palm EXTH Tags Information extracted from the MOBI extended header. Tag ID Tag Name Writable ------ -------- -------- 0x0001 DRMServerID N 0x0002 DRMCommerceID N 0x0003 DRM_E-BookBaseID N 0x0064 Author N 0x0065 Publisher N 0x0066 Imprint N 0x0067 Description N 0x0068 ISBN N 0x0069 Subject N+ 0x006a PublishDate N 0x006b Review N 0x006c Contributor N 0x006d Rights N 0x006e SubjectCode N 0x006f BookType N 0x0070 Source N 0x0071 ASIN N 0x0072 BookVersion N 0x0073 SampleFlag N 0x0074 StartReading N 0x0075 Adult N 0x0076 RetailPrice N 0x0077 RetailPriceCurrency N 0x007d ResourceCount N 0x0081 KF8CoverURI N 0x00c8 DictionaryShortName N 0x00cc CreatorSoftware N 0x00cd CreatorMajorVersion N 0x00ce CreatorMinorVersion N 0x00cf CreatorBuildNumber N 0x00d0 Watermark N 0x00d1 Tamper-proofKeys N 0x0191 ClippingLimit N 0x0192 PublisherLimit N 0x0194 TextToSpeech N 0x0195 RentalFlag N 0x0196 RentalExpirationDate N 0x01f5 CDEType N 0x01f6 LastUpdateTime N 0x01f7 UpdatedTitle N 0x01f8 ASIN2 N 0x020c Language N 0x020d Alignment N 0x0217 CreatorBuildNumber2 N =head2 Torrent Tags Below are tags commonly found in BitTorrent files. As well as these tags, any other existing tags will be extracted. For convenience, list items are expanded into individual tags with an index in the tag name, but only the tags with index "1" are listed in the tables below. See L<https://wiki.theory.org/BitTorrentSpecification> for the BitTorrent specification. Tag ID Tag Name Writable ------ -------- -------- 'announce' Announce N 'announce-list' AnnounceList1 N 'comment' Comment N 'created by' Creator N 'creation date' CreateDate N 'encoding' Encoding N 'info' Info Torrent Info 'url-list' URLList1 N =head3 Torrent Info Tags Tag ID Tag Name Writable ------ -------- -------- 'file-duration' File1Duration N 'file-media' File1Media N 'files' Files Torrent Files 'length' Length N 'md5sum' MD5Sum N 'name' Name N 'name.utf-8' NameUTF-8 N 'piece length' PieceLength N 'pieces' Pieces N 'private' Private N 'profiles' Profiles Torrent Profiles =head3 Torrent Files Tags Tag ID Tag Name Writable ------ -------- -------- 'length' File1Length N 'md5sum' File1MD5Sum N 'path' File1Path N 'path.utf-8' File1PathUTF-8 N =head3 Torrent Profiles Tags Tag ID Tag Name Writable ------ -------- -------- 'acodec' Profile1AudioCodec N 'height' Profile1Height N 'vcodec' Profile1VideoCodec N 'width' Profile1Width N =head2 EXE Tags This module extracts information from various types of Windows, MacOS and Unix executable and library files. The first table below lists information extracted from the header of Windows PE (Portable Executable) EXE files and DLL libraries. Index2 Tag Name Writable ------ -------- -------- 0 MachineType N 2 TimeStamp N 10 PEType N 11 LinkerVersion N 12 CodeSize N 14 InitializedDataSize N 16 UninitializedDataSize N 18 EntryPoint N 30 OSVersion N 32 ImageVersion N 34 SubsystemVersion N 44 Subsystem N =head3 EXE PEVersion Tags Information extracted from the VS_VERSION_INFO structure of Windows PE files. Index4 Tag Name Writable ------ -------- -------- 2 FileVersionNumber N 4 ProductVersionNumber N 6 FileFlagsMask N 7 FileFlags N 8 FileOS N 9 ObjectFileType N 10 FileSubtype N =head3 EXE PEString Tags Resource strings found in Windows PE files. The B<TagID>'s are not shown because they are the same as the B<Tag Name>. ExifTool will extract any existing StringFileInfo tags even if not listed in this table. Tag Name Writable -------- -------- BuildDate N BuildVersion N CharacterSet N Comments N CompanyName N Copyright N FileDescription N FileVersion N InternalName N LanguageCode N LegalCopyright N LegalTrademarks N OriginalFileName N PrivateBuild N ProductName N ProductVersion N SpecialBuild N =head3 EXE MachO Tags Information extracted from Mach-O (Mac OS X) executable files and DYLIB libraries. Index Tag Name Writable ----- -------- -------- 0 CPUArchitecture N 1 CPUByteOrder N 2 CPUCount N 3 CPUType N+ 4 CPUSubtype N+ 5 ObjectFileType N =head3 EXE PEF Tags Information extracted from PEF (Classic MacOS) executable files and libraries. Index4 Tag Name Writable ------ -------- -------- 2 CPUArchitecture N 3 PEFVersion N 4 TimeStamp N =head3 EXE ELF Tags Information extracted from ELF (Unix) executable files and SO libraries. Index1 Tag Name Writable ------ -------- -------- 4 CPUArchitecture N 5 CPUByteOrder N 16 ObjectFileType N 18 CPUType N =head3 EXE CHM Tags Tags extracted from Microsoft Compiled HTML files. Index4 Tag Name Writable ------ -------- -------- 1 CHMVersion N 5 LanguageCode N =head2 LNK Tags Information extracted from MS Shell Link (Windows shortcut) files. Index1 Tag Name Writable ------ -------- -------- 0x0014 Flags N 0x0018 FileAttributes N 0x001c CreateDate N 0x0024 AccessDate N 0x002c ModifyDate N 0x0034 TargetFileSize N 0x0038 IconIndex N 0x003c RunWindow N 0x0040 HotKey N 0x10000 ItemID LNK ItemID 0x20000 LinkInfo LNK LinkInfo 0x30004 Description N 0x30008 RelativePath N 0x30010 WorkingDirectory N 0x30020 CommandLineArguments N 0x30040 IconFileName N 0xa0000000 UnknownData LNK UnknownData 0xa0000001 EnvVarData LNK UnknownData 0xa0000002 ConsoleData LNK ConsoleData 0xa0000003 TrackerData LNK TrackerData 0xa0000004 ConsoleFEData LNK ConsoleFEData 0xa0000005 SpecialFolderData LNK UnknownData 0xa0000006 DarwinData LNK UnknownData 0xa0000007 IconEnvData LNK UnknownData 0xa0000008 ShimData LNK UnknownData 0xa0000009 PropertyStoreData LNK UnknownData 0xa000000b KnownFolderData LNK UnknownData 0xa000000c VistaIDListData LNK UnknownData =head3 LNK ItemID Tags Tag ID Tag Name Writable ------ -------- -------- 0x0032 Item0032 LNK Item0032 =head3 LNK Item0032 Tags Index1 Tag Name Writable ------ -------- -------- 14 TargetFileDOSName N =head3 LNK LinkInfo Tags Tag Name Writable -------- -------- CommonNetworkRelLink N CommonPathSuffix N DeviceName N DriveSerialNumber N DriveType N LocalBasePath N NetName N NetProviderType N VolumeID N VolumeLabel N =head3 LNK UnknownData Tags Index1 Tag Name Writable ------ -------- -------- [no tags known] =head3 LNK ConsoleData Tags Index1 Tag Name Writable ------ -------- -------- 8 FillAttributes N 10 PopupFillAttributes N 12 ScreenBufferSize N 16 WindowSize N 20 WindowOrigin N 32 FontSize N 36 FontFamily N 40 FontWeight N 44 FontName N 108 CursorSize N 112 FullScreen N 116 QuickEdit N 120 InsertMode N 124 WindowOriginAuto N 128 HistoryBufferSize N 132 NumHistoryBuffers N 136 RemoveHistoryDuplicates N =head3 LNK TrackerData Tags Index1 Tag Name Writable ------ -------- -------- 16 MachineID N =head3 LNK ConsoleFEData Tags Index1 Tag Name Writable ------ -------- -------- 8 CodePage N =head2 Font Tags This table contains a collection of tags found in font files of various formats. ExifTool current recognizes OTF, TTF, TTC, DFONT, PFA, PFB, PFM, AFM, ACFM and AMFM font files. Tag ID Tag Name Writable ------ -------- -------- 'AFM' AFM Font AFM 'PFM' PFMHeader Font PFM 'PSInfo' PSFontInfo Font PSInfo 'fontname' FontName N 'name' Name Font Name 'numfonts' NumFonts N 'postfont' PostScriptFontName N =head3 Font AFM Tags Tags extracted from Adobe Font Metrics files (AFM, ACFM and AMFM). Tag ID Tag Name Writable ------ -------- -------- 'Ascender' Ascender N 'CapHeight' CapHeight N 'CharacterSet' CharacterSet N 'Characters' Characters N 'Creation Date' CreateDate N 'Descender' Descender N 'EncodingScheme' EncodingScheme N 'EscChar' EscChar N 'FamilyName' FontFamily N 'FontName' FontName N 'FullName' FullName N 'IsBaseFont' IsBaseFont N 'IsFixedV' IsFixedV N 'MappingScheme' MappingScheme N 'Notice' Notice N 'Version' Version N 'Weight' Weight N 'XHeight' XHeight N =head3 Font PFM Tags Tags extracted from the PFM file header. Index1 Tag Name Writable ------ -------- -------- 0 PFMVersion N 6 Copyright N 66 FontType N 68 PointSize N 70 YResolution N 72 XResolution N 74 Ascent N 76 InternalLeading N 78 ExternalLeading N 80 Italic N 81 Underline N 82 Strikeout N 83 Weight N 85 CharacterSet N 86 PixWidth N 88 PixHeight N 90 PitchAndFamily N 91 AvgWidth N 93 MaxWidth N 95 FirstChar N 96 LastChar N 97 DefaultChar N 98 BreakChar N 99 WidthBytes N =head3 Font PSInfo Tags Tags extracted from PostScript font files (PFA and PFB). Tag ID Tag Name Writable ------ -------- -------- 'Copyright' Copyright N 'FSType' FSType N 'FamilyName' FontFamily N 'FontName' FontName N 'FontType' FontType N 'FullName' FullName N 'ItalicAngle' ItalicAngle N 'Notice' Notice N 'UnderlinePosition' UnderlinePosition N 'UnderlineThickness' UnderlineThickness N 'Weight' Weight N 'isFixedPitch' IsFixedPitch N 'version' Version N =head3 Font Name Tags The following tags are extracted from the TrueType font "name" table found in OTF, TTF, TTC and DFONT files. These tags support localized languages by adding a hyphen followed by a language code to the end of the tag name (eg. "Copyright-fr" or "License-en-US"). Tags with no language code use the default language of "en". Tag ID Tag Name Writable ------ -------- -------- 0x0000 Copyright N 0x0001 FontFamily N 0x0002 FontSubfamily N 0x0003 FontSubfamilyID N 0x0004 FontName N 0x0005 NameTableVersion N 0x0006 PostScriptFontName N 0x0007 Trademark N 0x0008 Manufacturer N 0x0009 Designer N 0x000a Description N 0x000b VendorURL N 0x000c DesignerURL N 0x000d License N 0x000e LicenseInfoURL N 0x0010 PreferredFamily N 0x0011 PreferredSubfamily N 0x0012 CompatibleFontName N 0x0013 SampleText N 0x0014 PostScriptFontName N 0x0015 WWSFamilyName N 0x0016 WWSSubfamilyName N =head2 VCard Tags This table lists common vCard tags, but ExifTool will also extract any other vCard tags found. Tag names may have "Pref" added to indicate the preferred instance of a vCard property, and other "TYPE" parameters may also added to the tag name. VCF files may contain multiple vCard entries which are distinguished by the ExifTool family 3 group name (document number). See L<http://tools.ietf.org/html/rfc6350> for the vCard 4.0 specification. Tag ID Tag Name Writable ------ -------- -------- 'Adr' Address N 'Anniversary' Anniversary N 'Bday' Birthday N 'Email' Email N 'Fn' FormattedName N 'Gender' Gender N 'Geo' Geolocation N 'Impp' IMPP N 'Lang' Language N 'Logo' Logo N 'N' Name N 'Nickname' Nickname N 'Note' Note N 'Org' Organization N 'Photo' Photo N 'Prodid' Software N 'Rev' Revision N 'Sound' Sound N 'Tel' Telephone N 'Title' JobTitle N 'Tz' TimeZone N 'Uid' UID N 'Url' URL N 'Version' VCardVersion N 'X-abdate' ABDate N 'X-ablabel' ABLabel N 'X-abrelatednames' ABRelatedNames N 'X-abuid' AB_UID N 'X-aim' AIM N 'X-icq' ICQ N 'X-socialprofile' SocialProfile N =head3 VCard VCalendar Tags The VCard module is also used to process iCalendar ICS files since they use a format similar to vCard. The following table lists standard iCalendar tags, but any existing tags will be extracted. Top-level iCalendar components (eg. Event, Todo, Timezone, etc.) are used for the family 1 group names, and embedded components (eg. Alarm) are added as a prefix to the tag name. See L<http://tools.ietf.org/html/rfc5545> for the official iCalendar 2.0 specification. Tag ID Tag Name Writable ------ -------- -------- 'Acknowledged' Acknowledged N 'Action' Action N 'Attach' Attachment N 'Attendee' Attendee N 'Calscale' CalendarScale N 'Categories' Categories N 'Class' Classification N 'Comment' Comment N 'Completed' DateTimeCompleted N 'Contact' Contact N 'Created' DateCreated N 'Description' Description N 'Dtend' DateTimeEnd N 'Dtstamp' DateTimeStamp N 'Dtstart' DateTimeStart N 'Due' DateTimeDue N 'Duration' Duration N 'Exdate' ExceptionDateTimes N 'Freebusy' FreeBusyTime N 'Geo' Geolocation N 'Last-modified' ModifyDate N 'Location' Location N 'Method' Method N 'Organizer' Organizer N 'Percent-complete' PercentComplete N 'Priority' Priority N 'Prodid' Software N 'Rdate' RecurrenceDateTimes N 'Recurrence-id' RecurrenceID N 'Related-to' RelatedTo N 'Repeat' Repeat N 'Request-status' RequestStatus N 'Resources' Resources N 'Rrule' RecurrenceRule N 'Sequence' SequenceNumber N 'Status' Status N 'Summary' Summary N 'Transp' TimeTransparency N 'Trigger' Trigger N 'Tzid' TimezoneID N 'Tzname' TimezoneName N 'Tzoffsetfrom' TimezoneOffsetFrom N 'Tzoffsetto' TimezoneOffsetTo N 'Tzurl' TimeZoneURL N 'Uid' UID N 'Url' URL N 'Version' VCalendarVersion N =head2 RSRC Tags Tags extracted from Mac OS resource files and DFONT files. These tags may also be extracted from the resource fork of any file in OS X, either by adding "/..namedfork/rsrc" to the filename to process the resource fork alone, or by using the ExtractEmbedded (-ee) option to process the resource fork as a sub-document of the main file. When writing, ExifTool preserves the Mac OS resource fork by default, but it may deleted with C<-rsrc:all=> on the command line. Tag ID Tag Name Writable ------ -------- -------- '8BIM' PhotoshopInfo Photoshop 'POST_0x01f5' PostscriptFont PostScript 'STR _0xbff3' ApplicationMissingMsg N 'STR _0xbff4' CreatorApplication N 'STR#_0x0080' Keywords N 'TEXT_0x0080' Description N 'sfnt' Font Font Name 'usro_0x0000' OpenWithApplication N 'vers_0x0001' ApplicationVersion N =head2 Rawzor Tags Rawzor files store compressed images of other formats. As well as the information listed below, exiftool uncompresses and extracts the meta information from the original image. Tag Name Writable -------- -------- CompressionFactor N OriginalFileSize N OriginalFileType N RawzorCreatorVersion N RawzorRequiredVersion N =head2 ZIP Tags The following tags are extracted from ZIP archives. ExifTool also extracts additional meta information from compressed documents inside some ZIP-based files such Office Open XML (DOCX, PPTX and XLSX), Open Document (ODB, ODC, ODF, ODG, ODI, ODP, ODS and ODT), iWork (KEY, PAGES, NUMBERS), Capture One Enhanced Image Package (EIP), Adobe InDesign Markup Language (IDML), and Electronic Publication (EPUB). The ExifTool family 3 groups may be used to organize ZIP tags by embedded document number (ie. the exiftool C<-g3> option). Index2 Tag Name Writable ------ -------- -------- 2 ZipRequiredVersion N 3 ZipBitFlag N 4 ZipCompression N 5 ZipModifyDate N 7 ZipCRC N 9 ZipCompressedSize N 11 ZipUncompressedSize N 15 ZipFileName N =head3 ZIP GZIP Tags These tags are extracted from GZIP (GNU ZIP) archives, but currently only for the first file in the archive. Index1 Tag Name Writable ------ -------- -------- 2 Compression N 3 Flags N 4 ModifyDate N 8 ExtraFlags N 9 OperatingSystem N 10 ArchivedFileName N 11 Comment N =head3 ZIP RAR Tags These tags are extracted from RAR archive files. Index1 Tag Name Writable ------ -------- -------- 0 CompressedSize N 4 UncompressedSize N 8 OperatingSystem N 13 ModifyDate N 18 PackingMethod N 25 ArchivedFileName N =head2 RTF Tags This table lists standard tags of the RTF information group, but ExifTool will also extract any non-standard tags found in this group. As well, ExifTool will extract any custom properties that are found. See L<http://www.microsoft.com/en-ca/download/details.aspx?id=10725> for the specification. Tag ID Tag Name Writable ------ -------- -------- 'author' Author N 'buptim' BackupTime N 'category' Category N 'comment' Comment N 'company' Company N 'copyright' Copyright N 'creatim' CreateDate N 'doccomm' Comments N 'edmins' TotalEditTime N 'hlinkbase' HyperlinkBase N 'id' InternalIDNumber N 'keywords' Keywords N 'manager' Manager N 'nofchars' Characters N 'nofcharsws' CharactersWithSpaces N 'nofpages' Pages N 'nofwords' Words N 'operator' LastModifiedBy N 'printim' LastPrinted N 'revtim' ModifyDate N 'subject' Subject N 'title' Title N 'vern' InternalVersionNumber N 'version' RevisionNumber N =head2 OOXML Tags The Office Open XML (OOXML) format was introduced with Microsoft Office 2007 and is used by file types such as DOCX, PPTX and XLSX. These are essentially ZIP archives containing XML files. The table below lists some tags which have been observed in OOXML documents, but ExifTool will extract any tags found from XML files of the OOXML document properties ("docProps") directory. B<Tips:> 1) Structural ZIP tags may be ignored (if desired) with C<--ZIP:all> on the command line. 2) Tags may be grouped by their document number in the ZIP archive with the C<-g3> or C<-G3> option. Tag Name Writable -------- -------- AppVersion N Application N Category N Characters N CharactersWithSpaces N CheckedBy N Client N Company N CreateDate N DateCompleted N Department N Destination N Disposition N Division N DocSecurity N DocumentNumber N Editor N ForwardTo N Group N HeadingPairs N HiddenSlides N HyperlinkBase N HyperlinksChanged N Keywords N Language N LastModifiedBy N LastPrinted N Lines N LinksUpToDate N MMClips N Mailstop N Manager N Matter N ModifyDate N Notes N Office N Owner N Pages N Paragraphs N PresentationFormat N Project N Publisher N Purpose N ReceivedFrom N RecordedBy N RecordedDate N Reference N RevisionNumber N ScaleCrop N SharedDoc N Slides N Source N Status N TelephoneNumber N Template N TitlesOfParts N TotalEditTime N Typist N Words N =head2 iWork Tags The Apple iWork '09 file format is a ZIP archive containing XML files similar to the Office Open XML (OOXML) format. Metadata tags in iWork files are extracted even if they don't appear below. Tag Name Writable -------- -------- Author N Comment N Copyright N Keywords N Projects N+ Title N =head2 Extra Tags The extra tags represent extra information extracted or generated by ExifTool that is not directly associated with another tag group. The B<Group> column lists the family 1 group name when reading. Tags with a "-" in this column are write-only. Tags in the family 1 "System" group are referred to as "pseudo" tags because they don't represent real metadata in the file. Instead, this information is stored in the directory structure of the filesystem. The five writable "pseudo" tags (FileName, Directory, FileModifyDate, FileCreateDate and HardLink) may be written without modifying the file itself. The TestName tag is used for dry-run testing before writing FileName. Tag Name Group Writable -------- ----- -------- Adobe Adobe Y! CanonDR4 CanonVRD Y! CanonVRD CanonVRD Y! Comment File Y CurrentIPTCDigest File N Directory System Y! EXIF EXIF Y! Error ExifTool N ExifByteOrder File Y ExifToolVersion ExifTool N ExifUnicodeByteOrder - Y FileAccessDate System N FileAttributes System N FileBlockCount System N FileBlockSize System N FileCreateDate System Y! FileDeviceID System N FileDeviceNumber System N FileGroupID System N FileHardLinks System N FileInodeChangeDate System N FileInodeNumber System N FileModifyDate System Y! FileName System Y! FilePath System N FilePermissions System N FileSequence ExifTool N FileSize System N FileType File N FileTypeExtension File N FileUserID System N Geosync - Y Geotag - Y Geotime - Y HardLink - Y! ICC_Profile ICC_Profile Y! ID3Size File N IPTC IPTC Y! ImageHeight File N ImageWidth File N JPEGDigest File N JPEGQualityEstimate File N MDItemTags System N MIMEType File N MaxVal File N NewGUID ExifTool N Now ExifTool N PreviewImage File Y PreviewPNG File N PreviewWMF File N ProcessingTime ExifTool N RAFVersion File N ResourceForkSize System N TestName - Y Warning ExifTool N XMP XMP Y! XResolution File N YResolution File N =head2 Composite Tags The values of the composite tags are B<Derived From> the values of other tags. These are convenience tags which are calculated after all other information is extracted. Only a few of these tags are writable directly, the others are changed by writing the corresponding B<Derived From> tags. User-defined Composite tags, also useful for custom-formatting of tag values, may created via the ExifTool configuration file. Tag Name Derived From Writable -------- ------------ -------- AdvancedSceneMode Model N SceneMode AdvancedSceneType Aperture FNumber N ApertureValue AudioBitrate MPEG:MPEGAudioVersion N MPEG:SampleRate MPEG:VBRBytes MPEG:VBRFrames AutoFocus Nikon:PhaseDetectAF N Nikon:ContrastDetectAF AvgBitrate QuickTime::MovieDataSize N QuickTime::Duration BlueBalance WB_RGGBLevels N WB_RGBGLevels WB_RBGGLevels WB_GRBGLevels WB_GRGBLevels WB_GBRGLevels WB_RGBLevels WB_GRBLevels WB_RBLevels WBBlueLevel WBGreenLevel CDDBDiscPlayTime CDDB1Info N CDDBDiscTracks CDDB1Info N CFAPattern CFARepeatPatternDim N CFAPattern2 CircleOfConfusion ScaleFactor35efl N ConditionalFEC FlashExposureComp N FlashBits DOF FocalLength N Aperture CircleOfConfusion FocusDistance SubjectDistance ObjectDistance ApproximateFocusDistance FocusDistanceLower FocusDistanceUpper DateCreated Kodak:YearCreated N Kodak:MonthDayCreated DateTimeCreated IPTC:DateCreated N IPTC:TimeCreated DateTimeOriginal DateTimeCreated N DateCreated TimeCreated DateTimeOriginal ID3:RecordingTime N ID3:Year ID3:Date ID3:Time DigitalCreationDateTime IPTC:DigitalCreationDate N IPTC:DigitalCreationTime DigitalZoom Canon:ZoomSourceWidth N Canon:ZoomTargetWidth Canon:DigitalZoom DriveMode ContinuousDrive N SelfTimer Duration Vorbis:NominalBitrate N FileSize Duration FLAC:SampleRate N FLAC:TotalSamples Duration FileSize N ID3Size MPEG:AudioBitrate MPEG:VideoBitrate MPEG:VBRFrames MPEG:SampleRate MPEG:MPEGAudioVersion Duration RIFF:FrameRate N RIFF:FrameCount VideoFrameRate VideoFrameCount Duration RIFF:AvgBytesPerSec N FileSize FrameCount VideoFrameCount Duration AIFF:SampleRate N AIFF:NumSampleFrames ExtenderStatus Olympus:Extender N Olympus:LensType MaxApertureValue FOV FocalLength N ScaleFactor35efl FocusDistance FileNumber DirectoryIndex Y FileIndex Flash XMP:FlashFired Y XMP:FlashReturn XMP:FlashMode XMP:FlashFunction XMP:FlashRedEyeMode XMP:Flash FlashType FlashBits N FocalLength35efl FocalLength N ScaleFactor35efl FocusDistance Sony:FocusPosition N FocalLength FocusDistance2 Sony:FocusPosition2 N FocalLengthIn35mmFormat GPSAltitude QuickTime:GPSCoordinates N GPSAltitude QuickTime:LocationInformation N GPSAltitude GPS:GPSAltitude N GPS:GPSAltitudeRef XMP:GPSAltitude XMP:GPSAltitudeRef GPSAltitudeRef QuickTime:GPSCoordinates N GPSAltitudeRef QuickTime:LocationInformation N GPSDateTime GPS:GPSDateStamp N GPS:GPSTimeStamp GPSLatitude QuickTime:GPSCoordinates N GPSLatitude QuickTime:LocationInformation N GPSLatitude GPS:GPSLatitude N GPS:GPSLatitudeRef GPSLatitudeRef XMP:GPSLatitude N GPSLongitude QuickTime:GPSCoordinates N GPSLongitude QuickTime:LocationInformation N GPSLongitude GPS:GPSLongitude N GPS:GPSLongitudeRef GPSLongitudeRef XMP:GPSLongitude N GPSPosition GPSLatitude N GPSLongitude HyperfocalDistance FocalLength N Aperture CircleOfConfusion IDCPreviewImage IDCPreviewStart N IDCPreviewLength ISO Canon:CameraISO N Canon:BaseISO Canon:AutoISO ImageHeight Main:PostScript:ImageData N PostScript:BoundingBox ImageHeight IFD0:SensorTopBorder N IFD0:SensorBottomBorder ImageSize ImageWidth N ImageHeight ExifImageWidth ExifImageHeight ImageWidth Main:PostScript:ImageData N PostScript:BoundingBox ImageWidth IFD0:SensorLeftBorder N IFD0:SensorRightBorder JpgFromRaw JpgFromRawStart Y JpgFromRawLength Lens Canon:MinFocalLength N Canon:MaxFocalLength Lens35efl Canon:MinFocalLength N Canon:MaxFocalLength Lens ScaleFactor35efl LensID LensType N FocalLength MaxAperture MaxApertureValue MinFocalLength MaxFocalLength LensModel LensFocalRange LensSpec LensType2 LensFocalLength LensID XMP-aux:LensID N Make LensInfo FocalLength LensModel MaxApertureValue LensID Nikon:LensIDNumber N LensFStops MinFocalLength MaxFocalLength MaxApertureAtMinFocal MaxApertureAtMaxFocal MCUVersion Nikon:LensType LensID Ricoh:LensFirmware N LensSpec Nikon:Lens N Nikon:LensType LightValue Aperture N ShutterSpeed ISO MPImage MPImageStart N MPImageLength MPImageType Megapixels ImageSize N OriginalDecisionData OriginalDecisionDataOffset Y! OtherImage OtherImageStart Y OtherImageLength PeakSpectralSensitivity FLIR:PlanckB N PreviewImage PreviewImageStart Y PreviewImageLength PreviewImageValid PreviewImageStart (1) PreviewImageLength (1) PreviewImage ScreenNail N PreviewImageSize PreviewImageWidth N PreviewImageHeight RedBalance WB_RGGBLevels N WB_RGBGLevels WB_RBGGLevels WB_GRBGLevels WB_GRGBLevels WB_GBRGLevels WB_RGBLevels WB_GRBLevels WB_RBLevels WBRedLevel WBGreenLevel RedEyeReduction CanonFlashMode N FlashBits RicohPitch Ricoh:Accelerometer N RicohRoll Ricoh:Accelerometer N Rotation QuickTime:MatrixStructure N QuickTime:HandlerType RunTimeSincePowerUp Apple:RunTimeValue N Apple:RunTimeScale ScaleFactor35efl FocalLength N FocalLengthIn35mmFormat Composite:DigitalZoom FocalPlaneDiagonal SensorSize FocalPlaneXSize FocalPlaneYSize FocalPlaneResolutionUnit FocalPlaneXResolution FocalPlaneYResolution ExifImageWidth ExifImageHeight CanonImageWidth CanonImageHeight ImageWidth ImageHeight ShootingMode CanonExposureMode N EasyMode BulbDuration ShutterCurtainHack FlashBits N ShutterCurtainSync ShutterSpeed ExposureTime N ShutterSpeedValue BulbDuration SubSecCreateDate EXIF:CreateDate N SubSecTimeDigitized SubSecDateTimeOriginal EXIF:DateTimeOriginal N SubSecTimeOriginal SubSecModifyDate EXIF:ModifyDate N SubSecTime ThumbnailImage ThumbnailOffset Y ThumbnailLength WB_RGBLevels KDC_IFD:WhiteBalance N WB_RGBLevelsAuto WB_RGBLevelsFluorescent WB_RGBLevelsTungsten WB_RGBLevelsDaylight WB_RGBLevels4 WB_RGBLevels5 WB_RGBLevelsShade WB_RGBLevels KodakIFD:WhiteBalance N WB_RGBMul0 WB_RGBMul1 WB_RGBMul2 WB_RGBMul3 WB_RGBCoeffs0 WB_RGBCoeffs1 WB_RGBCoeffs2 WB_RGBCoeffs3 KodakIFD:ColorTemperature Kodak:WB_RGBLevels WB_RGGBLevels Canon:WhiteBalance N WB_RGGBLevelsAsShot WB_RGGBLevelsAuto WB_RGGBLevelsDaylight WB_RGGBLevelsCloudy WB_RGGBLevelsTungsten WB_RGGBLevelsFluorescent WB_RGGBLevelsFlash WB_RGGBLevelsCustom WB_RGGBLevelsShade WB_RGGBLevelsKelvin WB_RGGBLevels WB_RGGBLevelsUncorrected N WB_RGGBLevelsBlack ZoomedPreviewImage ZoomedPreviewStart N ZoomedPreviewLength =head2 Shortcuts Tags Shortcut tags are convenience tags that represent one or more other tag names. They are used like regular tags to read and write the information for a specified set of tags. The shortcut tags below have been pre-defined, but user-defined shortcuts may be added via the %Image::ExifTool::UserDefined::Shortcuts lookup in the =/.ExifTool_config file. See the Image::ExifTool::Shortcuts documentation for more details. Tag Name Refers To Writable -------- --------- -------- AllDates DateTimeOriginal Y CreateDate ModifyDate Canon FileName Y Model DateTimeOriginal ShootingMode ShutterSpeed Aperture MeteringMode ExposureCompensation ISO Lens FocalLength ImageSize Quality Flash FlashType ConditionalFEC RedEyeReduction ShutterCurtainHack WhiteBalance FocusMode Contrast Sharpness Saturation ColorTone ColorSpace LongExposureNoiseReduction FileSize FileNumber DriveMode OwnerName SerialNumber ColorSpaceTags ExifIFD:ColorSpace Y ExifIFD:Gamma InteropIFD:InteropIndex ICC_Profile Common FileName Y FileSize Model DateTimeOriginal ImageSize Quality FocalLength ShutterSpeed Aperture ISO WhiteBalance Flash CommonIFD0 IFD0:ImageDescription Y IFD0:Make IFD0:Model IFD0:Software IFD0:ModifyDate IFD0:Artist IFD0:Copyright IFD0:Rating IFD0:RatingPercent IFD0:DNGLensInfo IFD0:PanasonicTitle IFD0:PanasonicTitle2 IFD0:XPTitle IFD0:XPComment IFD0:XPAuthor IFD0:XPKeywords IFD0:XPSubject LargeTags CanonVRD Y DLOData EXIF ICC_Profile IDCPreviewImage ImageData IPTC JpgFromRaw OriginalRawImage OtherImage PreviewImage ThumbnailImage TIFFPreview XML XMP ZoomedPreviewImage MakerNotes MakerNotes Y MakerNoteApple MakerNoteCanon MakerNoteCasio MakerNoteCasio2 MakerNoteFLIR MakerNoteFujiFilm MakerNoteGE MakerNoteGE2 MakerNoteHasselblad MakerNoteHP MakerNoteHP2 MakerNoteHP4 MakerNoteHP6 MakerNoteISL MakerNoteJVC MakerNoteJVCText MakerNoteKodak1a MakerNoteKodak1b MakerNoteKodak2 MakerNoteKodak3 MakerNoteKodak4 MakerNoteKodak5 MakerNoteKodak6a MakerNoteKodak6b MakerNoteKodak7 MakerNoteKodak8a MakerNoteKodak8b MakerNoteKodak8c MakerNoteKodak9 MakerNoteKodak10 MakerNoteKodak11 MakerNoteKodakUnknown MakerNoteKyocera MakerNoteMinolta MakerNoteMinolta2 MakerNoteMinolta3 MakerNoteMotorola MakerNoteNikon MakerNoteNikon2 MakerNoteNikon3 MakerNoteNintendo MakerNoteOlympus MakerNoteOlympus2 MakerNoteLeica MakerNoteLeica2 MakerNoteLeica3 MakerNoteLeica4 MakerNoteLeica5 MakerNoteLeica6 MakerNoteLeica7 MakerNoteLeica8 MakerNoteLeica9 MakerNotePanasonic MakerNotePanasonic2 MakerNotePentax MakerNotePentax2 MakerNotePentax3 MakerNotePentax4 MakerNotePentax5 MakerNotePentax6 MakerNotePhaseOne MakerNoteReconyx MakerNoteRicoh MakerNoteRicoh2 MakerNoteRicohText MakerNoteSamsung1a MakerNoteSamsung1b MakerNoteSamsung2 MakerNoteSanyo MakerNoteSanyoC4 MakerNoteSanyoPatch MakerNoteSigma MakerNoteSony MakerNoteSony2 MakerNoteSony3 MakerNoteSony4 MakerNoteSony5 MakerNoteSonyEricsson MakerNoteSonySRF MakerNoteUnknownText MakerNoteUnknownBinary MakerNoteUnknown Nikon Model Y SubSecDateTimeOriginal ShutterCount LensSpec FocalLength ImageSize ShutterSpeed Aperture ISO NoiseReduction ExposureProgram ExposureCompensation WhiteBalance WhiteBalanceFineTune ShootingMode Quality MeteringMode FocusMode ImageOptimization ToneComp ColorHue ColorSpace HueAdjustment Saturation Sharpness Flash FlashMode FlashExposureComp Unsafe IFD0:YCbCrPositioning Y IFD0:YCbCrCoefficients IFD0:TransferFunction ExifIFD:ComponentsConfiguration ExifIFD:CompressedBitsPerPixel InteropIFD:InteropIndex InteropIFD:InteropVersion InteropIFD:RelatedImageWidth InteropIFD:RelatedImageHeight =head2 MWG Tags The Metadata Working Group (MWG) recommends techniques to allow certain overlapping EXIF, IPTC and XMP tags to be reconciled when reading, and synchronized when writing. The MWG Composite tags below are designed to aid in the implementation of these recommendations. As well, the MWG defines new XMP tags which are listed in the subsequent tables below. See L<http://www.metadataworkinggroup.org/> for the official MWG specification. =head3 MWG Composite Tags The table below lists special Composite tags which are used to access other tags based on the MWG 2.0 recommendations. These tags are only accessible when explicitly loaded, but this is done automatically by the exiftool application if MWG is specified as a group for any tag on the command line, or manually with the C<-use MWG> option. Via the API, the MWG Composite tags are loaded by calling "C<Image::ExifTool::MWG::Load()>". When reading, the value of each MWG tag is B<Derived From> the specified tags based on the MWG guidelines. When writing, the appropriate associated tags are written. The value of the IPTCDigest tag is updated automatically when the IPTC is changed if either the IPTCDigest tag didn't exist beforehand or its value agreed with the original IPTC digest (indicating that the XMP is synchronized with the IPTC). IPTC information is written only if the original file contained IPTC. Loading the MWG module activates "strict MWG conformance mode", which has the effect of causing EXIF, IPTC and XMP in non-standard locations to be ignored when reading, as per the MWG recommendations. Instead, a "Warning" tag is generated when non-standard metadata is encountered. This feature may be disabled by setting C<$Image::ExifTool::MWG::strict = 0> in the ExifTool config file (or from your Perl script when using the API). Note that the behaviour when writing is not changed: ExifTool always creates new records only in the standard location, but writes new tags to any EXIF/IPTC/XMP records that exist. Contrary to the EXIF specification, the MWG recommends that EXIF "ASCII" string values be stored as UTF-8. To honour this, the exiftool application sets the default internal EXIF string encoding to "UTF8" when the MWG module is loaded, but via the API this must be done manually by setting the CharsetEXIF option. A complication of the MWG specification is that although the MWG:Creator property may consist of multiple values, the associated EXIF tag (EXIF:Artist) is only a simple string. To resolve this discrepancy the MWG recommends a technique which allows a list of values to be stored in a string by using a semicolon-space separator (with quotes around values if necessary). When the MWG module is loaded, ExifTool automatically implements this policy and changes EXIF:Artist to a list-type tag. Tag Name Derived From Writable -------- ------------ -------- City IPTC:City Y XMP-photoshop:City XMP-iptcExt:LocationShownCity CurrentIPTCDigest IPTCDigest Copyright EXIF:Copyright Y IPTC:CopyrightNotice XMP-dc:Rights CurrentIPTCDigest IPTCDigest Country IPTC:Country-PrimaryLocationName Y XMP-photoshop:Country XMP-iptcExt:LocationShownCountryName CurrentIPTCDigest IPTCDigest CreateDate EXIF:CreateDate Y EXIF:SubSecTimeDigitized IPTC:DigitalCreationDate IPTC:DigitalCreationTime XMP-xmp:CreateDate CurrentIPTCDigest IPTCDigest Creator EXIF:Artist Y+ IPTC:By-line XMP-dc:Creator CurrentIPTCDigest IPTCDigest DateTimeOriginal EXIF:DateTimeOriginal Y EXIF:SubSecTimeOriginal IPTC:DateCreated IPTC:TimeCreated XMP-photoshop:DateCreated CurrentIPTCDigest IPTCDigest Description EXIF:ImageDescription Y IPTC:Caption-Abstract XMP-dc:Description CurrentIPTCDigest IPTCDigest Keywords IPTC:Keywords Y+ XMP-dc:Subject CurrentIPTCDigest IPTCDigest Location IPTC:Sub-location Y XMP-iptcCore:Location XMP-iptcExt:LocationShownSublocation CurrentIPTCDigest IPTCDigest ModifyDate EXIF:ModifyDate Y EXIF:SubSecTime XMP-xmp:ModifyDate CurrentIPTCDigest IPTCDigest Orientation EXIF:Orientation Y Rating XMP-xmp:Rating Y State IPTC:Province-State Y XMP-photoshop:State XMP-iptcExt:LocationShownProvinceState CurrentIPTCDigest IPTCDigest =head3 MWG Regions Tags Image region metadata defined by the MWG 2.0 specification. These tags belong to the ExifTool XMP-mwg-rs group, and as such they may be accessed without the need to load the MWG Composite tags above. See L<http://www.metadataworkinggroup.org/> for the official specification. Tag Name Writable -------- -------- RegionInfo MWG RegionInfo Struct RegionAppliedToDimensions Dimensions Struct_ RegionAppliedToDimensionsH real_ RegionAppliedToDimensionsUnit string_ RegionAppliedToDimensionsW real_ RegionList MWG RegionStruct Struct_+ RegionArea Area Struct_+ RegionAreaD real_+ RegionAreaH real_+ RegionAreaUnit string_+ RegionAreaW real_+ RegionAreaX real_+ RegionAreaY real_+ RegionBarCodeValue string_+ RegionDescription string_+ RegionExtensions MWG Extensions Struct_+ RegionFocusUsage string_+ RegionName string_+ RegionRotation real_+ RegionSeeAlso string_+ RegionType string_+ =head3 MWG RegionInfo Struct Field Name Writable ---------- -------- AppliedToDimensions Dimensions Struct RegionList MWG RegionStruct Struct+ =head3 MWG RegionStruct Struct Field Name Writable ---------- -------- Area Area Struct BarCodeValue string Description string Extensions MWG Extensions Struct FocusUsage string Name string Rotation real Type string SeeAlso string =head3 MWG Extensions Struct This structure may contain any top-level XMP tags, but none have been pre-defined in ExifTool. Since no flattened tags have been pre-defined, RegionExtensions is writable only as a structure (eg. C<{xmp-dc:creator=me,rating=5}>). Fields for this structure are identified using the standard ExifTool tag name (with optional leading group name, and/or trailing language code, and/or trailing C<#> symbol to disable print conversion). Field Name Writable ---------- -------- [no tags known] =head3 MWG Keywords Tags Hierarchical keywords metadata defined by the MWG 2.0 specification. These tags belong to the ExifTool XMP-mwg-kw group. ExifTool unrolls keyword structures to an arbitrary depth of 6 to allow individual levels to be accessed with different tag names, and to avoid infinite recursion. See L<http://www.metadataworkinggroup.org/> for the official specification. Tag Name Writable -------- -------- KeywordInfo MWG KeywordInfo Struct HierarchicalKeywords MWG KeywordStruct Struct_+ HierarchicalKeywords1Applied boolean_+ HierarchicalKeywords1Children MWG KeywordStruct Struct_+ HierarchicalKeywords2Applied boolean_+ HierarchicalKeywords2Children MWG KeywordStruct Struct_+ HierarchicalKeywords3Applied boolean_+ HierarchicalKeywords3Children MWG KeywordStruct Struct_+ HierarchicalKeywords4Applied boolean_+ HierarchicalKeywords4Children MWG KeywordStruct Struct_+ HierarchicalKeywords5Applied boolean_+ HierarchicalKeywords5Children MWG KeywordStruct Struct_+ HierarchicalKeywords6Applied boolean_+ HierarchicalKeywords6 string_+ HierarchicalKeywords5 string_+ HierarchicalKeywords4 string_+ HierarchicalKeywords3 string_+ HierarchicalKeywords2 string_+ HierarchicalKeywords1 string_+ =head3 MWG KeywordInfo Struct Field Name Writable ---------- -------- Hierarchy MWG KeywordStruct Struct+ =head3 MWG KeywordStruct Struct Field Name Writable ---------- -------- Applied boolean Children MWG KeywordStruct Struct+ Keyword string =head3 MWG Collections Tags Collections metadata defined by the MWG 2.0 specification. These tags belong to the ExifTool XMP-mwg-coll group. See L<http://www.metadataworkinggroup.org/> for the official specification. Tag Name Writable -------- -------- Collections MWG CollectionInfo Struct+ CollectionName string_+ CollectionURI string_+ =head3 MWG CollectionInfo Struct Field Name Writable ---------- -------- CollectionName string CollectionURI string =head1 NOTES This document generated automatically by L<Image::ExifTool::BuildTagLookup|Image::ExifTool::BuildTagLookup>. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Theora.pm���������������������������������������������������000644 �000765 �000024 �00000006651 12642461336 021503� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Theora.pm # # Description: Read Theora video meta information # # Revisions: 2011/07/13 - P. Harvey Created # # References: 1) http://www.theora.org/doc/Theora.pdf #------------------------------------------------------------------------------ package Image::ExifTool::Theora; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.00'; # Theora header types %Image::ExifTool::Theora::Main = ( NOTES => q{ Information extracted from Ogg Theora video files. See L<http://www.theora.org/doc/Theora.pdf> for the Theora specification. }, 0x80 => { Name => 'Identification', SubDirectory => { TagTable => 'Image::ExifTool::Theora::Identification', ByteOrder => 'BigEndian', }, }, 0x81 => { Name => 'Comments', SubDirectory => { TagTable => 'Image::ExifTool::Vorbis::Comments', }, }, # 0x82 - Setup ); # tags extracted from Theora Idenfication header %Image::ExifTool::Theora::Identification = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Video' }, NOTES => 'Tags extracted from the Theora identification header.', 0 => { Name => 'TheoraVersion', Format => 'int8u[3]', PrintConv => '$val =~ tr/ /./; $val', }, 7 => { Name => 'ImageWidth', Format => 'int32u', ValueConv => '$val >> 8', }, 10 => { Name => 'ImageHeight', Format => 'int32u', ValueConv => '$val >> 8', }, 13 => 'XOffset', 14 => 'YOffset', 15 => { Name => 'FrameRate', Format => 'rational64u', PrintConv => 'int($val * 1000 + 0.5) / 1000', }, 23 => { Name => 'PixelAspectRatio', Format => 'int16u[3]', ValueConv => 'my @a=split(" ",$val); (($a[0]<<8)+($a[1]>>8)) / ((($a[1]&0xff)<<8)+$a[2])', PrintConv => 'int($val * 1000 + 0.5) / 1000', }, 29 => { Name => 'ColorSpace', PrintConv => { 0 => 'Undefined', 1 => 'Rec. 470M', 2 => 'Rec. 470BG', }, }, 30 => { Name => 'NominalVideoBitrate', Format => 'int32u', ValueConv => '$val >> 8', PrintConv => { 0 => 'Unspecified', OTHER => \&Image::ExifTool::ConvertBitrate, }, }, 33 => { Name => 'Quality', ValueConv => '$val >> 2', }, 34 => { Name => 'PixelFormat', ValueConv => '($val >> 3) & 0x3', PrintConv => { 0 => '4:2:0', 2 => '4:2:2', 3 => '4:4:4', }, }, ); 1; # end __END__ =head1 NAME Image::ExifTool::Theora - Read Theora video meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from Theora video streams. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.theora.org/doc/Theora.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Theora Tags>, L<Image::ExifTool::TagNames/Ogg Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Torrent.pm��������������������������������������������������000644 �000765 �000024 �00000025713 12642461336 021716� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Torrent.pm # # Description: Read information from BitTorrent file # # Revisions: 2013/08/27 - P. Harvey Created # # References: 1) https://wiki.theory.org/BitTorrentSpecification #------------------------------------------------------------------------------ package Image::ExifTool::Torrent; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.03'; sub ReadBencode($$); sub ExtractTags($$$;$$@); # tags extracted from BitTorrent files %Image::ExifTool::Torrent::Main = ( GROUPS => { 2 => 'Document' }, NOTES => q{ Below are tags commonly found in BitTorrent files. As well as these tags, any other existing tags will be extracted. For convenience, list items are expanded into individual tags with an index in the tag name, but only the tags with index "1" are listed in the tables below. See L<https://wiki.theory.org/BitTorrentSpecification> for the BitTorrent specification. }, 'announce' => { }, 'announce-list' => { Name => 'AnnounceList1' }, 'comment' => { }, 'created by' => { Name => 'Creator' }, # software used to create the torrent 'creation date' => { Name => 'CreateDate', Groups => { 2 => 'Time' }, ValueConv => 'ConvertUnixTime($val,1)', PrintConv => '$self->ConvertDateTime($val)', }, 'encoding' => { }, 'info' => { SubDirectory => { TagTable => 'Image::ExifTool::Torrent::Info' } }, 'url-list' => { Name => 'URLList1' }, ); %Image::ExifTool::Torrent::Info = ( GROUPS => { 2 => 'Document' }, 'file-duration' => { Name => 'File1Duration' }, 'file-media' => { Name => 'File1Media' }, 'files' => { SubDirectory => { TagTable => 'Image::ExifTool::Torrent::Files' } }, 'length' => { }, 'md5sum' => { Name => 'MD5Sum' }, 'name' => { }, 'name.utf-8' => { Name => 'NameUTF-8' }, 'piece length' => { Name => 'PieceLength' }, 'pieces' => { Name => 'Pieces', Notes => 'concatenation of 20-byte SHA-1 digests for each piece', }, 'private' => { }, 'profiles' => { SubDirectory => { TagTable => 'Image::ExifTool::Torrent::Profiles' } }, ); %Image::ExifTool::Torrent::Profiles = ( GROUPS => { 2 => 'Document' }, 'width' => { Name => 'Profile1Width' }, 'height' => { Name => 'Profile1Height' }, 'acodec' => { Name => 'Profile1AudioCodec' }, 'vcodec' => { Name => 'Profile1VideoCodec' }, ); %Image::ExifTool::Torrent::Files = ( GROUPS => { 2 => 'Document' }, 'length' => { Name => 'File1Length', PrintConv => 'ConvertFileSize($val)' }, 'md5sum' => { Name => 'File1MD5Sum' }, 'path' => { Name => 'File1Path', JoinPath => 1 }, 'path.utf-8' => { Name => 'File1PathUTF-8', JoinPath => 1 }, ); #------------------------------------------------------------------------------ # Read 64kB more data into buffer # Inputs: 0) RAF ref, 1) buffer ref # Returns: number of bytes read # Notes: Sets BencodeEOF element of RAF on end of file sub ReadMore($$) { my ($raf, $dataPt) = @_; my $buf2; my $n = $raf->Read($buf2, 65536); $$raf{BencodeEOF} = 1 if $n != 65536; $$dataPt = substr($$dataPt, pos($$dataPt)) . $buf2 if $n; return $n; } #------------------------------------------------------------------------------ # Read bencoded value # Inputs: 0) input file, 1) buffer (pos must be set to current position) # Returns: HASH ref, ARRAY ref, SCALAR ref, SCALAR, or undef on error or end of data # Notes: Sets BencodeError element of RAF on any error sub ReadBencode($$) { my ($raf, $dataPt) = @_; # read more if necessary (keep a minimum of 64 bytes in the buffer) my $pos = pos($$dataPt); return undef unless defined $pos; my $remaining = length($$dataPt) - $pos; ReadMore($raf, $dataPt) if $remaining < 64 and not $$raf{BencodeEOF}; # read next token $$dataPt =~ /(.)/sg or return undef; my $val; my $tok = $1; if ($tok eq 'i') { # integer $$dataPt =~ /\G(-?\d+)e/g or return $val; $val = $1; } elsif ($tok eq 'd') { # dictionary $val = { }; for (;;) { my $k = ReadBencode($raf, $dataPt); last unless defined $k; # the key must be a byte string if (ref $k) { ref $k ne 'SCALAR' and $$raf{BencodeError} = 'Bad dictionary key', last; $k = $$k; } my $v = ReadBencode($raf, $dataPt); last unless defined $v; $$val{$k} = $v; } } elsif ($tok eq 'l') { # list $val = [ ]; for (;;) { my $v = ReadBencode($raf, $dataPt); last unless defined $v; push @$val, $v; } } elsif ($tok eq 'e') { # end of dictionary or list # return undef (no error) } elsif ($tok =~ /^\d$/ and $$dataPt =~ /\G(\d*):/g) { # byte string my $len = $tok . $1; my $more = $len - (length($$dataPt) - pos($$dataPt)); my $value; if ($more <= 0) { $value = substr($$dataPt,pos($$dataPt),$len); pos($$dataPt) = pos($$dataPt) + $len; } elsif ($more > 10000000) { # just skip over really long values $val = \ "(Binary data $len bytes)" if $raf->Seek($more, 1); } else { # need to read more from file my $buff; my $n = $raf->Read($buff, $more); if ($n == $more) { $value = substr($$dataPt,pos($$dataPt)) . $buff; $$dataPt = ''; pos($$dataPt) = 0; } } if (defined $value) { # return as binary data unless it is a reasonable-length ASCII string if (length($value) > 256 or $value =~ /[^\t\x20-\x7e]/) { $val = \$value; } else { $val = $value; } } elsif (not defined $val) { $$raf{BencodeError} = 'Truncated byte string'; } } else { $$raf{BencodeError} = 'Bad format'; } return $val; } #------------------------------------------------------------------------------ # Extract tags from dictionary hash # Inputs: 0) ExifTool ref, 1) dictionary hash reference, 2) tag table ref, # 3) parent hash ID, 4) parent hash name, 5-N) list indices # Returns: number of tags extracted sub ExtractTags($$$;$$@) { my ($et, $hashPtr, $tagTablePtr, $baseID, $baseName, @index) = @_; my $count = 0; my $tag; foreach $tag (sort keys %$hashPtr) { my $val = $$hashPtr{$tag}; my ($i, $j, @more); for (; defined $val; $val = shift @more) { my $id = defined $baseID ? "$baseID/$tag" : $tag; unless ($$tagTablePtr{$id}) { my $name = ucfirst $tag; # capitalize all words in tag name and remove illegal characters $name =~ s/[^-_a-zA-Z0-9]+(.?)/\U$1/g; $name = "Tag$name" if length($name) < 2 or $name !~ /^[A-Z]/; $name = $baseName . $name if defined $baseName; # add base name if necessary AddTagToTable($tagTablePtr, $id, { Name => $name }); $et->VPrint(0, " [adding $id '$name']\n"); } my $tagInfo = $et->GetTagInfo($tagTablePtr, $id) or next; if (ref $val eq 'ARRAY') { if ($$tagInfo{JoinPath}) { $val = join '/', @$val; } else { push @more, @$val; next if ref $more[0] eq 'ARRAY'; # continue expanding nested lists $val = shift @more; $i or $i = 0, push(@index, $i); } } $index[-1] = ++$i if defined $i; if (@index) { $id .= join '_', @index; # add instance number(s) to tag ID unless ($$tagTablePtr{$id}) { my $name = $$tagInfo{Name}; # embed indices at position of '1' in tag name my $n = ($name =~ tr/1/#/); for ($j=0; $j<$n; ++$j) { my $idx = $index[$j] || ''; $name =~ s/#/$idx/; } # put remaining indices at end of tag name for (; $j<@index; ++$j) { $name .= '_' if $name =~ /\d$/; $name .= $index[$j]; } AddTagToTable($tagTablePtr, $id, { %$tagInfo, Name => $name }); } $tagInfo = $et->GetTagInfo($tagTablePtr, $id) or next; } if (ref $val eq 'HASH') { # extract tags from this dictionary my ($table, $rootID, $rootName); if ($$tagInfo{SubDirectory}) { $table = GetTagTable($$tagInfo{SubDirectory}{TagTable}); } else { $table = $tagTablePtr; # use hash ID and Name as base for contained tags to avoid conflicts $rootID = $id; $rootName = $$tagInfo{Name}; } $count += ExtractTags($et, $val, $table, $rootID, $rootName, @index); } else { # handle this simple tag value $et->HandleTag($tagTablePtr, $id, $val); ++$count; } } pop @index if defined $i; } return $count; } #------------------------------------------------------------------------------ # Process BitTorrent file # Inputs: 0) ExifTool object reference, 1) dirInfo reference (with RAF set) # Returns: 1 on success, 0 if this wasn't a valid BitTorrent file sub ProcessTorrent($$) { my ($et, $dirInfo) = @_; my $success = 0; my $raf = $$dirInfo{RAF}; my $buff = ''; pos($buff) = 0; my $dict = ReadBencode($raf, \$buff); my $err = $$raf{BencodeError}; $et->Warn("Bencode error: $err") if $err; if (ref $dict eq 'HASH' and $$dict{announce}) { $et->SetFileType(); my $tagTablePtr = GetTagTable('Image::ExifTool::Torrent::Main'); ExtractTags($et, $dict, $tagTablePtr) and $success = 1; } return $success; } 1; # end __END__ =head1 NAME Image::ExifTool::Torrent - Read information from BitTorrent file =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read bencoded information from BitTorrent files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<https://wiki.theory.org/BitTorrentSpecification> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Torrent Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Unknown.pm��������������������������������������������������000644 �000765 �000024 �00000003304 12642461336 021710� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Unknown.pm # # Description: Unknown EXIF maker notes tags # # Revisions: 04/07/2004 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::Unknown; use strict; use vars qw($VERSION); use Image::ExifTool::Exif; $VERSION = '1.13'; # Unknown maker notes %Image::ExifTool::Unknown::Main = ( WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, CHECK_PROC => \&Image::ExifTool::Exif::CheckExif, GROUPS => { 0 => 'MakerNotes', 1 => 'MakerUnknown', 2 => 'Camera' }, # this seems to be a common fixture, so look for it in unknown maker notes 0x0e00 => { Name => 'PrintIM', Description => 'Print Image Matching', SubDirectory => { TagTable => 'Image::ExifTool::PrintIM::Main', }, }, ); 1; # end __END__ =head1 NAME Image::ExifTool::Unknown - Unknown EXIF maker notes tags =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION Image::ExifTool has definitions for the maker notes from many manufacturers, however information can sometimes be extracted from unknown manufacturers if the maker notes are in standard IFD format. This module contains the definitions necessary for Image::ExifTool to read the maker notes from unknown manufacturers. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/Unknown Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/VCard.pm����������������������������������������������������000644 �000765 �000024 �00000037411 12642461337 021257� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: VCard.pm # # Description: Read vCard and iCalendar meta information # # Revisions: 2015/04/05 - P. Harvey Created # 2015/05/02 - PH Added iCalendar support # # References: 1) http://en.m.wikipedia.org/wiki/VCard # 2) http://tools.ietf.org/html/rfc6350 # 3) http://tools.ietf.org/html/rfc5545 #------------------------------------------------------------------------------ package Image::ExifTool::VCard; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.04'; my %unescapeVCard = ( '\\'=>'\\', ','=>',', 'n'=>"\n", 'N'=>"\n" ); # lookup for iCalendar components (used to generate family 1 group names if top level) my %isComponent = ( Event=>1, Todo=>1, Journal=>1, Freebusy=>1, Timezone=>1, Alarm=>1 ); my %timeInfo = ( # convert common date/time formats to EXIF style ValueConv => q{ $val =~ s/(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(Z?)/$1:$2:$3 $4:$5:$6$7/g; $val =~ s/(\d{4})(\d{2})(\d{2})/$1:$2:$3/g; $val =~ s/(\d{4})-(\d{2})-(\d{2})/$1:$2:$3/g; return $val; }, PrintConv => '$self->ConvertDateTime($val)', ); # vCard tags (ref 1/2/PH) # Note: The case of all tag ID's is normalized to lowercase with uppercase first letter %Image::ExifTool::VCard::Main = ( GROUPS => { 2 => 'Document' }, VARS => { NO_LOOKUP => 1 }, # omit tags from lookup NOTES => q{ This table lists common vCard tags, but ExifTool will also extract any other vCard tags found. Tag names may have "Pref" added to indicate the preferred instance of a vCard property, and other "TYPE" parameters may also added to the tag name. VCF files may contain multiple vCard entries which are distinguished by the ExifTool family 3 group name (document number). See L<http://tools.ietf.org/html/rfc6350> for the vCard 4.0 specification. }, Version => { Name => 'VCardVersion', Description => 'VCard Version' }, Fn => { Name => 'FormattedName', Groups => { 2 => 'Author' } }, N => { Name => 'Name', Groups => { 2 => 'Author' } }, Bday => { Name => 'Birthday', Groups => { 2 => 'Time' }, %timeInfo }, Tz => { Name => 'TimeZone', Groups => { 2 => 'Time' } }, Adr => { Name => 'Address', Groups => { 2 => 'Location' } }, Geo => { Name => 'Geolocation', Groups => { 2 => 'Location' }, # when used as a parameter, VCard 4.0 adds a "geo:" prefix that we need to remove ValueConv => '$val =~ s/^geo://; $val', }, Anniversary => { }, Email => { }, Gender => { }, Impp => 'IMPP', Lang => 'Language', Logo => { }, Nickname => { }, Note => { }, Org => 'Organization', Photo => { Groups => { 2 => 'Preview' } }, Prodid => 'Software', Rev => 'Revision', Sound => { }, Tel => 'Telephone', Title => 'JobTitle', Uid => 'UID', Url => 'URL', 'X-ablabel' => { Name => 'ABLabel', PrintConv => '$val =~ s/^_\$!<(.*)>!\$_$/$1/; $val' }, 'X-abdate' => { Name => 'ABDate', Groups => { 2 => 'Time' }, %timeInfo }, 'X-aim' => 'AIM', 'X-icq' => 'ICQ', 'X-abuid' => 'AB_UID', 'X-abrelatednames' => 'ABRelatedNames', 'X-socialprofile' => 'SocialProfile', ); %Image::ExifTool::VCard::VCalendar = ( GROUPS => { 1 => 'VCalendar', 2 => 'Document' }, VARS => { NO_LOOKUP => 1 }, # omit tags from lookup NOTES => q{ The VCard module is also used to process iCalendar ICS files since they use a format similar to vCard. The following table lists standard iCalendar tags, but any existing tags will be extracted. Top-level iCalendar components (eg. Event, Todo, Timezone, etc.) are used for the family 1 group names, and embedded components (eg. Alarm) are added as a prefix to the tag name. See L<http://tools.ietf.org/html/rfc5545> for the official iCalendar 2.0 specification. }, Version => { Name => 'VCalendarVersion', Description => 'VCalendar Version' }, Calscale => 'CalendarScale', Method => { }, Prodid => 'Software', Attach => 'Attachment', Categories => { }, Class => 'Classification', Comment => { }, Description => { }, Geo => { Name => 'Geolocation', Groups => { 2 => 'Location' }, ValueConv => '$val =~ s/^geo://; $val', }, Location => { Name => 'Location', Groups => { 2 => 'Location' } }, 'Percent-complete' => 'PercentComplete', Priority => { }, Resources => { }, Status => { }, Summary => { }, Completed => { Name => 'DateTimeCompleted', Groups => { 2 => 'Time' }, %timeInfo }, Dtend => { Name => 'DateTimeEnd', Groups => { 2 => 'Time' }, %timeInfo }, Due => { Name => 'DateTimeDue', Groups => { 2 => 'Time' }, %timeInfo }, Dtstart => { Name => 'DateTimeStart', Groups => { 2 => 'Time' }, %timeInfo }, Duration => { }, Freebusy => 'FreeBusyTime', Transp => 'TimeTransparency', Tzid => { Name => 'TimezoneID', Groups => { 2 => 'Time' } }, Tzname => { Name => 'TimezoneName', Groups => { 2 => 'Time' } }, Tzoffsetfrom=> { Name => 'TimezoneOffsetFrom', Groups => { 2 => 'Time' } }, Tzoffsetto => { Name => 'TimezoneOffsetTo', Groups => { 2 => 'Time' } }, Tzurl => { Name => 'TimeZoneURL', Groups => { 2 => 'Time' } }, Attendee => { }, Contact => { }, Organizer => { }, 'Recurrence-id' => 'RecurrenceID', 'Related-to' => 'RelatedTo', Url => 'URL', Uid => 'UID', Exdate => { Name => 'ExceptionDateTimes', Groups => { 2 => 'Time' }, %timeInfo }, Rdate => { Name => 'RecurrenceDateTimes', Groups => { 2 => 'Time' }, %timeInfo }, Rrule => { Name => 'RecurrenceRule', Groups => { 2 => 'Time' } }, Action => { }, Repeat => { }, Trigger => { }, Created => { Name => 'DateCreated', Groups => { 2 => 'Time' }, %timeInfo }, Dtstamp => { Name => 'DateTimeStamp', Groups => { 2 => 'Time' }, %timeInfo }, 'Last-modified' => { Name => 'ModifyDate', Groups => { 2 => 'Time' }, %timeInfo }, Sequence => 'SequenceNumber', 'Request-status' => 'RequestStatus', Acknowledged=> { Name => 'Acknowledged', Groups => { 2 => 'Time' }, %timeInfo }, ); #------------------------------------------------------------------------------ # Get vCard tag, creating if necessary # Inputs: 0) ExifTool ref, 1) tag table ref, 2) tag ID, 3) tag Name, # 4) source tagInfo ref, 5) lang code # Returns: tagInfo ref sub GetVCardTag($$$$;$$) { my ($et, $tagTablePtr, $tag, $name, $srcInfo, $langCode) = @_; my $tagInfo = $$tagTablePtr{$tag}; unless ($tagInfo) { if ($srcInfo) { $tagInfo = { %$srcInfo }; } else { $tagInfo = { }; $et->VPrint(0, $$et{INDENT}, "[adding $tag]\n"); } $$tagInfo{Name} = $name; delete $$tagInfo{Description}; # create new description AddTagToTable($tagTablePtr, $tag, $tagInfo); } # handle alternate languages (the "language" parameter) $tagInfo = Image::ExifTool::GetLangInfo($tagInfo, $langCode) if $langCode; return $tagInfo; } #------------------------------------------------------------------------------ # Decode vCard text # Inputs: 0) ExifTool ref, 1) vCard text, 2) encoding # Returns: decoded text (or array ref for a list of values) sub DecodeVCardText($$;$) { my ($et, $val, $enc) = @_; $enc = defined($enc) ? lc $enc : ''; if ($enc eq 'b' or $enc eq 'base64') { require Image::ExifTool::XMP; $val = Image::ExifTool::XMP::DecodeBase64($val); } else { if ($enc eq 'quoted-printable') { # convert "=HH" hex codes to characters $val =~ s/=([0-9a-f]{2})/chr(hex($1))/ige; } $val = $et->Decode($val, 'UTF8'); # convert from UTF-8 # split into separate items if it contains an unescaped comma my $list = $val =~ s/(^|[^\\])((\\\\)*),/$1$2\0/g; # unescape necessary characters in value $val =~ s/\\(.)/$unescapeVCard{$1}||$1/sge; if ($list) { my @vals = split /\0/, $val; $val = \@vals; } } return $val; } #------------------------------------------------------------------------------ # Read information in a vCard file # Inputs: 0) ExifTool ref, 1) dirInfo ref # Returns: 1 on success, 0 if this wasn't a valid vCard file sub ProcessVCard($$) { local $_; my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $val, $ok, $component, %compNum, @count); return 0 unless $raf->Read($buff, 24) and $raf->Seek(0,0) and $buff=~/^BEGIN:(VCARD|VCALENDAR)\r\n/i; my ($type, $lbl, $tbl, $ext) = uc($1) eq 'VCARD' ? qw(VCard vCard Main VCF) : qw(ICS iCalendar VCalendar ICS); $et->SetFileType($type, undef, $ext); return 1 if $$et{OPTIONS}{FastScan} and $$et{OPTIONS}{FastScan} == 3; local $/ = "\r\n"; my $tagTablePtr = GetTagTable("Image::ExifTool::VCard::$tbl"); my $more = $raf->ReadLine($buff); # read first line chomp $buff if $more; while ($more) { # retrieve previous line from $buff $val = $buff if defined $buff; # read ahead to next line to see if is a continuation $more = $raf->ReadLine($buff); if ($more) { chomp $buff; # add continuation line if necessary $buff =~ s/^[ \t]// and $val .= $buff, undef($buff), next; } if ($val =~ /^(BEGIN|END):(V?)(\w+)$/i) { my ($begin, $v, $what) = ((lc($1) eq 'begin' ? 1 : 0), $2, ucfirst lc $3); if ($what eq 'Card' or $what eq 'Calendar') { if ($begin) { @count = ( { } ); # reset group counters } else { $ok = 1; # ok if we read at least on full VCARD or VCALENDAR } next; } # absorb top-level component into family 1 group name if ($isComponent{$what}) { if ($begin) { unless ($component) { # begin a new top-level component @count = ( { } ); $component = $what; $compNum{$component} = ($compNum{$component} || 0) + 1; next; } } elsif ($component and $component eq $what) { # this top-level component has ended undef $component; next; } } # keep count of each component at this level if ($begin) { $count[-1]{$what} = ($count[-1]{$what} || 0) + 1 if $v; push @count, { obj => $what }; } elsif (@count > 1) { pop @count; } next; } elsif ($ok) { $ok = 0; $$et{DOC_NUM} = ++$$et{DOC_COUNT}; # read next card as a new document } unless ($val =~ s/^([-A-Za-z0-9.]+)//) { $et->WarnOnce("Unrecognized line in $lbl file"); next; } my $tag = $1; # set group if it exists if ($tag =~ s/^([-A-Za-z0-9]+)\.//) { $$et{SET_GROUP1} = ucfirst lc $1; } elsif ($component) { $$et{SET_GROUP1} = $component . $compNum{$component}; } else { delete $$et{SET_GROUP1}; } my ($name, %param, $p, @val); # vCard tag ID's are case-insensitive, so normalize to lowercase with # an uppercase first letter for use as a tag name $name = ucfirst $tag if $tag =~ /[a-z]/; # preserve mixed case in name if it exists $tag = ucfirst lc $tag; # get source tagInfo reference my $srcInfo = $et->GetTagInfo($tagTablePtr, $tag); if ($srcInfo) { $name = $$srcInfo{Name}; # use our name } else { $name or $name = $tag; # remove leading "X-" from name if it exists $name =~ s/^X-// and $name = ucfirst $name; } # add object name(s) to tag if necessary if (@count > 1) { my $i; for ($i=$#count-1; $i>=0; --$i) { my $pre = $count[$i-1]{obj}; # use containing object name as tag prefix my $c = $count[$i]{$pre}; # add index for object number $c = '' unless defined $c; $tag = $pre . $c . $tag; $name = $pre . $c . $name; } } # parse parameters while ($val =~ s/^;([-A-Za-z0-9]*)(=?)//) { $p = ucfirst lc $1; # convert old vCard 2.x parameters to the new "TYPE=" format $2 or $val = $1 . $val, $p = 'Type'; # read parameter value for (;;) { last unless $val =~ s/^"([^"]*)",?// or $val =~ s/^([^";:,]+,?)//; my $v = $p eq 'Type' ? ucfirst lc $1 : $1; $param{$p} = defined($param{$p}) ? $param{$p} . $v : $v; } if (defined $param{$p}) { $param{$p} =~ s/\\(.)/$unescapeVCard{$1}||$1/sge; } else { $param{$p} = ''; } } $val =~ s/^:// or $et->WarnOnce("Invalid line in $lbl file"), next; # add 'Type' parameter to id and name if it exists $param{Type} and $tag .= $param{Type}, $name .= $param{Type}; # convert base64-encoded data if ($val =~ s{^data:(\w+)/(\w+);base64,}{}) { my $xtra = ucfirst(lc $1) . ucfirst(lc $2); $tag .= $xtra; $name .= $xtra; $param{Encoding} = 'base64'; } $val = DecodeVCardText($et, $val, $param{Encoding}); my $tagInfo = GetVCardTag($et, $tagTablePtr, $tag, $name, $srcInfo, $param{Language}); $et->HandleTag($tagTablePtr, $tag, $val, TagInfo => $tagInfo); # handle some other parameters that we care about (ignore the rest for now) foreach $p (qw(Geo Label Tzid)) { next unless defined $param{$p}; # use tag attributes from our table if it exists my $srcTag2 = $et->GetTagInfo($tagTablePtr, $p); my $pn = $srcTag2 ? $$srcTag2{Name} : $p; $val = DecodeVCardText($et, $param{$p}); # add parameter to tag ID and name my ($tg, $nm) = ($tag . $p, $name . $pn); $tagInfo = GetVCardTag($et, $tagTablePtr, $tg, $nm, $srcTag2, $param{Language}); $et->HandleTag($tagTablePtr, $tg, $val, TagInfo => $tagInfo); } } delete $$et{SET_GROUP1}; delete $$et{DOC_NUM}; $ok or $et->Warn("Missing $lbl end"); return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::VCard - Read vCard and iCalendar meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to read meta information from vCard VCF and iCalendar ICS files. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://en.m.wikipedia.org/wiki/VCard> =item L<http://tools.ietf.org/html/rfc6350> =item L<http://tools.ietf.org/html/rfc5545> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/VCard Tags>, L<Image::ExifTool::TagNames/VCard VCalendar Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Vorbis.pm���������������������������������������������������000644 �000765 �000024 �00000017067 12642461337 021531� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Vorbis.pm # # Description: Read Ogg Vorbis audio meta information # # Revisions: 2006/11/10 - P. Harvey Created # 2011/07/12 - PH Moved Ogg to a separate module and added Theora # # References: 1) http://www.xiph.org/vorbis/doc/ # 2) http://flac.sourceforge.net/ogg_mapping.html # 3) http://www.theora.org/doc/Theora.pdf #------------------------------------------------------------------------------ package Image::ExifTool::Vorbis; use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.08'; sub ProcessComments($$$); # Vorbis header types %Image::ExifTool::Vorbis::Main = ( NOTES => q{ Information extracted from Ogg Vorbis files. See L<http://www.xiph.org/vorbis/doc/> for the Vorbis specification. }, 1 => { Name => 'Identification', SubDirectory => { TagTable => 'Image::ExifTool::Vorbis::Identification' }, }, 3 => { Name => 'Comments', SubDirectory => { TagTable => 'Image::ExifTool::Vorbis::Comments' }, }, ); %Image::ExifTool::Vorbis::Identification = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Audio' }, 0 => { Name => 'VorbisVersion', Format => 'int32u', }, 4 => 'AudioChannels', 5 => { Name => 'SampleRate', Format => 'int32u', }, 9 => { Name => 'MaximumBitrate', Format => 'int32u', RawConv => '$val || undef', PrintConv => 'ConvertBitrate($val)', }, 13 => { Name => 'NominalBitrate', Format => 'int32u', RawConv => '$val || undef', PrintConv => 'ConvertBitrate($val)', }, 17 => { Name => 'MinimumBitrate', Format => 'int32u', RawConv => '$val || undef', PrintConv => 'ConvertBitrate($val)', }, ); %Image::ExifTool::Vorbis::Comments = ( PROCESS_PROC => \&ProcessComments, GROUPS => { 2 => 'Audio' }, NOTES => q{ The tags below are only some common tags found in the Vorbis comments of Ogg Vorbis and Ogg FLAC audio files, however ExifTool will extract values from any tag found, even if not listed here. }, vendor => { Notes => 'from comment header' }, TITLE => { Name => 'Title' }, VERSION => { Name => 'Version' }, ALBUM => { Name => 'Album' }, TRACKNUMBER=>{ Name => 'TrackNumber' }, ARTIST => { Name => 'Artist', Groups => { 2 => 'Author' }, List => 1 }, PERFORMER => { Name => 'Performer', Groups => { 2 => 'Author' }, List => 1 }, COPYRIGHT => { Name => 'Copyright', Groups => { 2 => 'Author' } }, LICENSE => { Name => 'License', Groups => { 2 => 'Author' } }, ORGANIZATION=>{Name => 'Organization', Groups => { 2 => 'Author' } }, DESCRIPTION=>{ Name => 'Description' }, GENRE => { Name => 'Genre' }, DATE => { Name => 'Date', Groups => { 2 => 'Time' } }, LOCATION => { Name => 'Location', Groups => { 2 => 'Location' } }, CONTACT => { Name => 'Contact', Groups => { 2 => 'Author' }, List => 1 }, ISRC => { Name => 'ISRCNumber' }, COVERARTMIME => { Name => 'CoverArtMIMEType' }, COVERART => { Name => 'CoverArt', Groups => { 2 => 'Preview' }, Notes => 'base64-encoded image', ValueConv => q{ require Image::ExifTool::XMP; Image::ExifTool::XMP::DecodeBase64($val); }, }, REPLAYGAIN_TRACK_PEAK => { Name => 'ReplayGainTrackPeak' }, REPLAYGAIN_TRACK_GAIN => { Name => 'ReplayGainTrackGain' }, REPLAYGAIN_ALBUM_PEAK => { Name => 'ReplayGainAlbumPeak' }, REPLAYGAIN_ALBUM_GAIN => { Name => 'ReplayGainAlbumGain' }, # observed in "Xiph.Org libVorbis I 20020717" ogg: ENCODED_USING => { Name => 'EncodedUsing' }, ENCODED_BY => { Name => 'EncodedBy' }, COMMENT => { Name => 'Comment' }, # in Theora documentation (ref 3) DIRECTOR => { Name => 'Director' }, PRODUCER => { Name => 'Producer' }, COMPOSER => { Name => 'Composer' }, ACTOR => { Name => 'Actor' }, ); # Vorbis composite tags %Image::ExifTool::Vorbis::Composite = ( Duration => { Require => { 0 => 'Vorbis:NominalBitrate', 1 => 'FileSize', }, RawConv => '$val[0] ? $val[1] * 8 / $val[0] : undef', PrintConv => 'ConvertDuration($val) . " (approx)"', # (only approximate) }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::Vorbis'); #------------------------------------------------------------------------------ # Process Vorbis Comments # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success, otherwise returns 0 and sets a Warning sub ProcessComments($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos}; my $pos = $$dirInfo{DirStart} || 0; my $end = $$dirInfo{DirLen} ? $pos + $$dirInfo{DirLen} : length $$dataPt; my ($num, $index); SetByteOrder('II'); for (;;) { last if $pos + 4 > $end; my $len = Get32u($dataPt, $pos); last if $pos + 4 + $len > $end; my $start = $pos + 4; my $buff = substr($$dataPt, $start, $len); $pos = $start + $len; my ($tag, $val); if (defined $num) { $buff =~ /(.*?)=(.*)/s or last; ($tag, $val) = ($1, $2); # Vorbis tag ID's are all capitals, so they may conflict with our internal tags # --> protect against this by adding a trailing underline if necessary $tag .= '_' if $Image::ExifTool::specialTags{$tag}; } else { $tag = 'vendor'; $val = $buff; $num = ($pos + 4 < $end) ? Get32u($dataPt, $pos) : 0; $et->VPrint(0, " + [Vorbis comments with $num entries]\n"); $pos += 4; } # add tag to table unless it exists already unless ($$tagTablePtr{$tag}) { my $name = ucfirst(lc($tag)); # remove invalid characters in tag name and capitalize following letters $name =~ s/[^\w-]+(.?)/\U$1/sg; $name =~ s/([a-z0-9])_([a-z])/$1\U$2/g; AddTagToTable($tagTablePtr, $tag, { Name => $name }); } $et->HandleTag($tagTablePtr, $tag, $et->Decode($val, 'UTF8'), Index => $index, DataPt => $dataPt, DataPos => $dataPos, Start => $start, Size => $len, ); # all done if this was our last tag $num-- or return 1; $index = (defined $index) ? $index + 1 : 0; } $et->Warn('Format error in Vorbis comments'); return 0; } 1; # end __END__ =head1 NAME Image::ExifTool::Vorbis - Read Ogg Vorbis audio meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from Ogg Vorbis audio headers. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.xiph.org/vorbis/doc/> =item L<http://flac.sourceforge.net/ogg_mapping.html> =item L<http://www.theora.org/doc/Theora.pdf> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/Vorbis Tags>, L<Image::ExifTool::TagNames/Ogg Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/WriteCanonRaw.pl��������������������������������������������000644 �000765 �000024 �00000060475 12642461337 023010� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: WriteCanonRaw.pl # # Description: Write Canon RAW (CRW and CR2) meta information # # Revisions: 01/25/2005 - P. Harvey Created # 09/16/2010 - PH Added ability to write XMP in CRW images #------------------------------------------------------------------------------ package Image::ExifTool::CanonRaw; use strict; use vars qw($VERSION $AUTOLOAD %crwTagFormat); use Image::ExifTool::Fixup; # map for adding directories to CRW my %crwMap = ( XMP => 'CanonVRD', CanonVRD => 'Trailer', ); # mappings to from RAW tagID to MakerNotes tagID # (Note: upper two bits of RawTagID are zero) my %mapRawTag = ( # RawTagID => Canon TagID 0x080b => 0x07, # CanonFirmwareVersion 0x0810 => 0x09, # OwnerName 0x0815 => 0x06, # CanonImageType 0x1028 => 0x03, # (unknown if no tag name specified) 0x1029 => 0x02, # FocalLength 0x102a => 0x04, # CanonShotInfo 0x102d => 0x01, # CanonCameraSettings 0x1033 => 0x0f, # CanonCustomFunctions (only verified for 10D) 0x1038 => 0x12, # CanonAFInfo 0x1039 => 0x13, 0x1093 => 0x93, 0x10a8 => 0xa8, 0x10a9 => 0xa9, # WhiteBalanceTable 0x10aa => 0xaa, 0x10ae => 0xae, # ColorTemperature 0x10b4 => 0xb4, # ColorSpace 0x10b5 => 0xb5, 0x10c0 => 0xc0, 0x10c1 => 0xc1, 0x180b => 0x0c, # SerialNumber 0x1817 => 0x08, # FileNumber 0x1834 => 0x10, 0x183b => 0x15, ); # translation from Rotation to Orientation values my %mapRotation = ( 0 => 1, 90 => 6, 180 => 3, 270 => 8, ); #------------------------------------------------------------------------------ # Initialize buffers for building MakerNotes from RAW data # Inputs: 0) ExifTool object reference sub InitMakerNotes($) { my $et = shift; $$et{MAKER_NOTE_INFO} = { Entries => { }, # directory entries keyed by tagID ValBuff => "\0\0\0\0", # value data buffer (start with zero nextIFD pointer) FixupTags => { }, # flags for tags with data in value buffer }; } #------------------------------------------------------------------------------ # Build maker notes from CanonRaw information # Inputs: 0) ExifTool object reference, 1) raw tag ID, 2) reference to tagInfo # 3) reference to value, 4) format name, 5) count # Notes: This will build the directory in the order the tags are found in the CRW # file, which isn't sequential (but Canon's version isn't sequential either...) sub BuildMakerNotes($$$$$$) { my ($et, $rawTag, $tagInfo, $valuePt, $formName, $count) = @_; my $tagID = $mapRawTag{$rawTag} || return; $formName or warn(sprintf "No format for tag 0x%x!\n",$rawTag), return; # special case: ignore user comment because it gets saved in EXIF # (and has the same raw tagID as CanonFileDescription) return if $tagInfo and $$tagInfo{Name} eq 'UserComment'; my $format = $Image::ExifTool::Exif::formatNumber{$formName}; my $fsiz = $Image::ExifTool::Exif::formatSize[$format]; my $size = length($$valuePt); my $value; if ($count and $size != $count * $fsiz) { if ($size < $count * $fsiz) { warn sprintf("Value too short for raw tag 0x%x\n",$rawTag); return; } # shorten value appropriately $size = $count * $fsiz; $value = substr($$valuePt, 0, $size); } else { $count = $size / $fsiz; $value = $$valuePt; } my $offsetVal; my $makerInfo = $$et{MAKER_NOTE_INFO}; if ($size > 4) { my $len = length $makerInfo->{ValBuff}; $offsetVal = Set32u($len); $makerInfo->{ValBuff} .= $value; # pad to an even number of bytes $size & 0x01 and $makerInfo->{ValBuff} .= "\0"; # set flag indicating that this tag needs a fixup $makerInfo->{FixupTags}->{$tagID} = 1; } else { $offsetVal = $value; $size < 4 and $offsetVal .= "\0" x (4 - $size); } $makerInfo->{Entries}->{$tagID} = Set16u($tagID) . Set16u($format) . Set32u($count) . $offsetVal; } #------------------------------------------------------------------------------ # Finish building and save MakerNotes # Inputs: 0) ExifTool object reference sub SaveMakerNotes($) { my $et = shift; # save maker notes my $makerInfo = $$et{MAKER_NOTE_INFO}; delete $$et{MAKER_NOTE_INFO}; my $dirEntries = $makerInfo->{Entries}; my $numEntries = scalar(keys %$dirEntries); my $fixup = new Image::ExifTool::Fixup; return unless $numEntries; # build the MakerNotes directory my $makerNotes = Set16u($numEntries); my $tagID; # write the entries in proper tag order (even though Canon doesn't do this...) foreach $tagID (sort { $a <=> $b } keys %$dirEntries) { $makerNotes .= $$dirEntries{$tagID}; next unless $makerInfo->{FixupTags}->{$tagID}; # add fixup for this pointer $fixup->AddFixup(length($makerNotes) - 4); } # save position of maker notes for pointer fixups $fixup->{Shift} += length($makerNotes); $$et{MAKER_NOTE_FIXUP} = $fixup; $$et{MAKER_NOTE_BYTE_ORDER} = GetByteOrder(); # add value data $makerNotes .= $makerInfo->{ValBuff}; # get MakerNotes tag info my $tagTablePtr = Image::ExifTool::GetTagTable('Image::ExifTool::Exif::Main'); my $tagInfo = $et->GetTagInfo($tagTablePtr, 0x927c, \$makerNotes); # save the MakerNotes $et->FoundTag($tagInfo, $makerNotes); # save the garbage collection some work later delete $makerInfo->{Entries}; delete $makerInfo->{ValBuff}; delete $makerInfo->{FixupTags}; # also generate Orientation tag since Rotation isn't transferred from RAW info my $rotation = $et->GetValue('Rotation', 'ValueConv'); if (defined $rotation and defined $mapRotation{$rotation}) { $tagInfo = $et->GetTagInfo($tagTablePtr, 0x112); $et->FoundTag($tagInfo, $mapRotation{$rotation}); } } #------------------------------------------------------------------------------ # Check CanonRaw information # Inputs: 0) ExifTool object reference, 1) tagInfo hash reference, # 2) raw value reference # Returns: error string or undef (and may change value) on success sub CheckCanonRaw($$$) { my ($et, $tagInfo, $valPtr) = @_; my $tagName = $$tagInfo{Name}; if ($tagName eq 'JpgFromRaw' or $tagName eq 'ThumbnailImage') { unless ($$valPtr =~ /^\xff\xd8/ or $et->Options('IgnoreMinorErrors')) { return '[minor] Not a valid image'; } } else { my $format = $$tagInfo{Format}; my $count = $$tagInfo{Count}; unless ($format) { my $tagType = ($$tagInfo{TagID} >> 8) & 0x38; $format = $crwTagFormat{$tagType}; } $format and return Image::ExifTool::CheckValue($valPtr, $format, $count); } return undef; } #------------------------------------------------------------------------------ # Write CR2 file # Inputs: 0) ExifTool ref, 1) dirInfo reference (must have read first 16 bytes) # 2) tag table reference # Returns: true on success sub WriteCR2($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt} or return 0; my $outfile = $$dirInfo{OutFile} or return 0; $$dirInfo{RAF} or return 0; # check CR2 signature if ($$dataPt !~ /^.{8}CR\x02\0/s) { my ($msg, $minor); if ($$dataPt =~ /^.{8}CR/s) { $msg = 'Unsupported Canon RAW file. May cause problems if rewritten'; $minor = 1; } elsif ($$dataPt =~ /^.{8}\xba\xb0\xac\xbb/s) { $msg = 'Can not currently write Canon 1D RAW images'; } else { $msg = 'Unrecognized Canon RAW file'; } return 0 if $et->Error($msg, $minor); } # CR2 has a 16-byte header $$dirInfo{NewDataPos} = 16; my $newData = $et->WriteDirectory($dirInfo, $tagTablePtr); return 0 unless defined $newData; unless ($$dirInfo{LastIFD}) { $et->Error("CR2 image IFD may not be deleted"); return 0; } if (length($newData)) { # build 16 byte header for Canon RAW file my $header = substr($$dataPt, 0, 16); # set IFD0 pointer (may not be 16 if edited by PhotoMechanic) Set32u(16, \$header, 4); # last 4 bytes of header is pointer to last IFD Set32u($$dirInfo{LastIFD}, \$header, 12); Write($outfile, $header, $newData) or return 0; undef $newData; # free memory # copy over image data now if necessary if (ref $$dirInfo{ImageData}) { $et->CopyImageData($$dirInfo{ImageData}, $outfile) or return 0; delete $$dirInfo{ImageData}; } } return 1; } #------------------------------------------------------------------------------ # Write CanonRaw (CRW) information # Inputs: 0) ExifTool object reference, 1) source dirInfo reference, # 2) tag table reference # Returns: true on success # Notes: Increments ExifTool CHANGED flag for each tag changed This routine is # different from all of the other write routines because Canon RAW files are # designed well! So it isn't necessary to buffer the data in memory before # writing it out. Therefore this routine doesn't return the directory data as # the rest of the Write routines do. Instead, it writes to the dirInfo # OutFile on the fly --> much faster, efficient, and less demanding on memory! sub WriteCanonRaw($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access to autoload this package my $blockStart = $$dirInfo{DirStart}; my $blockSize = $$dirInfo{DirLen}; my $raf = $$dirInfo{RAF} or return 0; my $outfile = $$dirInfo{OutFile} or return 0; my $outPos = $$dirInfo{OutPos} or return 0; my $outBase = $outPos; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my ($buff, $tagInfo); # 4 bytes at end of block give directory position within block $raf->Seek($blockStart+$blockSize-4, 0) or return 0; $raf->Read($buff, 4) == 4 or return 0; my $dirOffset = Get32u(\$buff,0) + $blockStart; $raf->Seek($dirOffset, 0) or return 0; $raf->Read($buff, 2) == 2 or return 0; my $entries = Get16u(\$buff,0); # get number of entries in directory # read the directory (10 bytes per entry) $raf->Read($buff, 10 * $entries) == 10 * $entries or return 0; my $newDir = ''; # get hash of new information keyed by tagID my $newTags = $et->GetNewTagInfoHash($tagTablePtr); # generate list of tags to add or delete (currently, we only allow JpgFromRaw # and ThumbnailImage, to be added or deleted from the root CanonRaw directory) my (@addTags, %delTag); if ($$dirInfo{Nesting} == 0) { my $tagID; foreach $tagID (keys %$newTags) { my $permanent = $newTags->{$tagID}->{Permanent}; push(@addTags, $tagID) if defined($permanent) and not $permanent; } } my $index; for ($index=0; ; ++$index) { my ($pt, $tag, $size, $valuePtr, $ptr, $value); if ($index<$entries) { $pt = 10 * $index; $tag = Get16u(\$buff, $pt); $size = Get32u(\$buff, $pt+2); $valuePtr = Get32u(\$buff, $pt+6); $ptr = $valuePtr + $blockStart; # all pointers relative to block start } # add any required new tags # NOTE: can't currently add tags where value is stored in directory if (@addTags and (not defined($tag) or $tag >= $addTags[0])) { my $addTag = shift @addTags; $tagInfo = $$newTags{$addTag}; my $newVal = $et->GetNewValue($tagInfo); if (defined $newVal) { # pad value to an even length (Canon ImageBrowser and ZoomBrowser # version 6.1.1 have problems with odd-sized embedded JPEG images # even if the value is padded to maintain alignment, so do this # before calculating the size for the directory entry) $newVal .= "\0" if length($newVal) & 0x01; # add new directory entry $newDir .= Set16u($addTag) . Set32u(length($newVal)) . Set32u($outPos - $outBase); # write new value data Write($outfile, $newVal) or return 0; $outPos += length($newVal); # update current position $verbose > 1 and print $out " + CanonRaw:$$tagInfo{Name}\n"; ++$$et{CHANGED}; } # set flag to delete this tag if found later $delTag{$addTag} = 1; } last unless defined $tag; # all done if no more directory entries return 0 if $tag & 0x8000; # top bit should not be set my $tagID = $tag & 0x3fff; # get tag ID my $tagType = ($tag >> 8) & 0x38; # get tag type my $valueInDir = ($tag & 0x4000); # flag for value in directory my $tagInfo = $et->GetTagInfo($tagTablePtr,$tagID); my $format = $crwTagFormat{$tagType}; my ($count, $subdir); if ($tagInfo) { $subdir = $$tagInfo{SubDirectory}; $format = $$tagInfo{Format} if $$tagInfo{Format}; $count = $$tagInfo{Count}; } if ($valueInDir) { $size = 8; $value = substr($buff, $pt+2, $size); # set count to 1 by default for normal values in directory $count = 1 if not defined $count and $format and $format ne 'string' and not $subdir; } else { if ($tagType==0x28 or $tagType==0x30) { # this type of tag specifies a raw subdirectory my $name; $tagInfo and $name = $$tagInfo{Name}; $name or $name = sprintf("CanonRaw_0x%.4x", $tagID); my %subdirInfo = ( DirName => $name, DataLen => 0, DirStart => $ptr, DirLen => $size, Nesting => $$dirInfo{Nesting} + 1, RAF => $raf, Parent => $$dirInfo{DirName}, OutFile => $outfile, OutPos => $outPos, ); my $result = $et->WriteDirectory(\%subdirInfo, $tagTablePtr); return 0 unless $result; # set size and pointer for this new directory $size = $subdirInfo{OutPos} - $outPos; $valuePtr = $outPos - $outBase; $outPos = $subdirInfo{OutPos}; } else { # verify that the value data is within this block $valuePtr + $size <= $blockSize or return 0; # read value from file $raf->Seek($ptr, 0) or return 0; $raf->Read($value, $size) == $size or return 0; } } # set count from tagInfo count if necessary if ($format and not $count) { # set count according to format and size my $fnum = $Image::ExifTool::Exif::formatNumber{$format}; my $fsiz = $Image::ExifTool::Exif::formatSize[$fnum]; $count = int($size / $fsiz); } # edit subdirectory if necessary if ($tagInfo) { if ($subdir and $$subdir{TagTable}) { my $name = $$tagInfo{Name}; my $newTagTable = Image::ExifTool::GetTagTable($$subdir{TagTable}); return 0 unless $newTagTable; my $subdirStart = 0; #### eval Start () $subdirStart = eval $$subdir{Start} if $$subdir{Start}; my $dirData = \$value; my %subdirInfo = ( Name => $name, DataPt => $dirData, DataLen => $size, DirStart => $subdirStart, DirLen => $size - $subdirStart, Nesting => $$dirInfo{Nesting} + 1, RAF => $raf, Parent => $$dirInfo{DirName}, ); #### eval Validate ($dirData, $subdirStart, $size) if (defined $$subdir{Validate} and not eval $$subdir{Validate}) { $et->Warn("Invalid $name data"); } else { $subdir = $et->WriteDirectory(\%subdirInfo, $newTagTable); if (defined $subdir and length $subdir) { if ($subdirStart) { # add header before data directory $value = substr($value, 0, $subdirStart) . $subdir; } else { $value = $subdir; } } } } elsif ($$newTags{$tagID}) { if ($delTag{$tagID}) { $verbose > 1 and print $out " - CanonRaw:$$tagInfo{Name}\n"; ++$$et{CHANGED}; next; # next since we already added this tag } my $oldVal; if ($format) { $oldVal = ReadValue(\$value, 0, $format, $count, $size); } else { $oldVal = $value; } my $nvHash = $et->GetNewValueHash($tagInfo); if ($et->IsOverwriting($nvHash, $oldVal)) { my $newVal = $et->GetNewValue($nvHash); my $verboseVal; $verboseVal = $newVal if $verbose > 1; # convert to specified format if necessary if (defined $newVal and $format) { $newVal = WriteValue($newVal, $format, $count); } if (defined $newVal) { $value = $newVal; ++$$et{CHANGED}; $et->VerboseValue("- CanonRaw:$$tagInfo{Name}", $oldVal); $et->VerboseValue("+ CanonRaw:$$tagInfo{Name}", $verboseVal); } } } } if ($valueInDir) { my $len = length $value; if ($len < 8) { # pad with original garbage in case it contained something useful $value .= substr($buff, $pt+2+8-$len, 8-$len); } elsif ($len > 8) { # this shouldn't happen warn "Value too long! -- trucated\n"; $value = substr($value, 0, 8); } # create new directory entry $newDir .= Set16u($tag) . $value; next; # all done this entry } if (defined $value) { # don't allow value to change length unless Writable is 'resize' my $writable = $$tagInfo{Writable}; my $diff = length($value) - $size; if ($diff) { if ($writable and $writable eq 'resize') { $size += $diff; # allow size to change } elsif ($diff > 0) { $value .= ("\0" x $diff); } else { $value = substr($value, 0, $size); } } # pad value if necessary to align on even-byte boundary (as per CIFF spec) $value .= "\0" if $size & 0x01; $valuePtr = $outPos - $outBase; # write out value data Write($outfile, $value) or return 0; $outPos += length($value); # update current position in outfile } # create new directory entry $newDir .= Set16u($tag) . Set32u($size) . Set32u($valuePtr); } # add the directory counts and offset to the directory start, $entries = length($newDir) / 10; $newDir = Set16u($entries) . $newDir . Set32u($outPos - $outBase); # write directory data Write($outfile, $newDir) or return 0; # update current output file position in dirInfo $$dirInfo{OutPos} = $outPos + length($newDir); # save outfile directory start (needed for rewriting VRD trailer) $$dirInfo{OutDirStart} = $outPos - $outBase; return 1; } #------------------------------------------------------------------------------ # write Canon RAW (CRW) file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid CRW file, # or -1 if a write error occurred sub WriteCRW($$) { my ($et, $dirInfo) = @_; my $outfile = $$dirInfo{OutFile}; my $raf = $$dirInfo{RAF}; my $rtnVal = 0; my ($buff, $err, $sig); $raf->Read($buff,2) == 2 or return 0; SetByteOrder($buff) or return 0; $raf->Read($buff,4) == 4 or return 0; $raf->Read($sig,8) == 8 or return 0; # get file signature $sig =~ /^HEAP(CCDR|JPGM)/ or return 0; # validate signature my $type = $1; my $hlen = Get32u(\$buff, 0); # get header length if ($$et{DEL_GROUP}{MakerNotes}) { if ($type eq 'CCDR') { $et->Error("Can't delete MakerNotes group in CRW file"); return 0; } else { ++$$et{CHANGED}; return 1; } } # make XMP the preferred group for CRW files if ($$et{FILE_TYPE} eq 'CRW') { $et->InitWriteDirs(\%crwMap, 'XMP'); } # write header $raf->Seek(0, 0) or return 0; $raf->Read($buff, $hlen) == $hlen or return 0; Write($outfile, $buff) or $err = 1; $raf->Seek(0, 2) or return 0; # seek to end of file my $filesize = $raf->Tell() or return 0; # build directory information for main raw directory my %dirInfo = ( DataLen => 0, DirStart => $hlen, DirLen => $filesize - $hlen, Nesting => 0, RAF => $raf, Parent => 'CRW', OutFile => $outfile, OutPos => $hlen, ); # process the raw directory my $tagTablePtr = Image::ExifTool::GetTagTable('Image::ExifTool::CanonRaw::Main'); my $success = $et->WriteDirectory(\%dirInfo, $tagTablePtr); my $trailPt; while ($success) { # check to see if trailer(s) exist(s) my $trailInfo = Image::ExifTool::IdentifyTrailer($raf) or last; # rewrite the trailer(s) $buff = ''; $$trailInfo{OutFile} = \$buff; $success = $et->ProcessTrailers($trailInfo) or last; $trailPt = $$trailInfo{OutFile}; # nothing to write if trailers were deleted undef $trailPt if length($$trailPt) < 4; last; } if ($success) { # add CanonVRD trailer if writing as a block $trailPt = $et->AddNewTrailers($trailPt,'CanonVRD'); if (not $trailPt and $$et{ADD_DIRS}{CanonVRD}) { # create CanonVRD from scratch if necessary my $outbuff = ''; my $saveOrder = GetByteOrder(); require Image::ExifTool::CanonVRD; if (Image::ExifTool::CanonVRD::ProcessCanonVRD($et, { OutFile => \$outbuff }) > 0) { $trailPt = \$outbuff; } SetByteOrder($saveOrder); } # write trailer if ($trailPt) { # must append DirStart pointer to end of trailer my $newDirStart = Set32u($dirInfo{OutDirStart}); my $len = length $$trailPt; my $pad = ($len & 0x01) ? ' ' : ''; # add pad byte if necessary Write($outfile, $pad, substr($$trailPt,0,$len-4), $newDirStart) or $err = 1; } $rtnVal = $err ? -1 : 1; } else { $et->Error('Error rewriting CRW file'); } return $rtnVal; } 1; # end __END__ =head1 NAME Image::ExifTool::WriteCanonRaw.pl - Write Canon RAW (CRW and CR2) information =head1 SYNOPSIS These routines are autoloaded by Image::ExifTool::CanonRaw. =head1 DESCRIPTION This file contains routines used by ExifTool to write Canon CRW and CR2 files and metadata. =head1 NOTES The CRW format is a pleasure to work with. All pointer offsets are relative to the start of the data for each directory. If TIFF/EXIF had implemented pointers in this way, it would be MUCH easier to read and write TIFF/JPEG files, and would lead to far fewer problems with corrupted metadata. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::CanonRaw(3pm)|Image::ExifTool::CanonRaw>, L<Image::ExifTool(3pm)|Image::ExifTool>, L<http://owl.phy.queensu.ca/~phil/exiftool/canon_raw.html> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/WriteExif.pl������������������������������������������������000644 �000765 �000024 �00000507752 12642461340 022171� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: WriteExif.pl # # Description: Write EXIF meta information # # Revisions: 12/13/2004 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::Exif; use strict; use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %compression %photometricInterpretation %orientation); use Image::ExifTool::Fixup; sub InsertWritableProperties($$;$); # some information may be stored in different IFD's with the same meaning. # Use this lookup to decide when we should delete information that is stored # in another IFD when we write it to the preferred IFD. my %crossDelete = ( ExifIFD => 'IFD0', IFD0 => 'ExifIFD', ); # mandatory tag default values my %mandatory = ( IFD0 => { 0x011a => 72, # XResolution 0x011b => 72, # YResolution 0x0128 => 2, # ResolutionUnit (inches) 0x0213 => 1, # YCbCrPositioning (centered) # 0x8769 => ????, # ExifOffset }, IFD1 => { 0x0103 => 6, # Compression (JPEG) 0x011a => 72, # XResolution 0x011b => 72, # YResolution 0x0128 => 2, # ResolutionUnit (inches) }, ExifIFD => { 0x9000 => '0230', # ExifVersion 0x9101 => "1 2 3 0",# ComponentsConfiguration 0xa000 => '0100', # FlashpixVersion 0xa001 => 0xffff, # ColorSpace (uncalibrated) # 0xa002 => ????, # ExifImageWidth # 0xa003 => ????, # ExifImageHeight }, GPS => { 0x0000 => '2 3 0 0',# GPSVersionID }, InteropIFD => { 0x0002 => '0100', # InteropVersion }, ); # The main EXIF table is unique because the tags from this table may appear # in many different directories. For this reason, we introduce a # "WriteGroup" member to the tagInfo that tells us the preferred location # for writing each tag. Here is the lookup for Writable flag (format) # and WriteGroup for all writable tags # - WriteGroup is ExifIFD unless otherwise specified # - Protected is 1 if the tag shouldn't be copied with SetNewValuesFromFile() my %writeTable = ( 0x0001 => { # InteropIndex Protected => 1, Writable => 'string', WriteGroup => 'InteropIFD', }, 0x0002 => { # InteropVersion Protected => 1, Writable => 'undef', Mandatory => 1, WriteGroup => 'InteropIFD', }, 0x000b => { # ProcessingSoftware Writable => 'string', WriteGroup => 'IFD0', }, 0x00fe => { # SubfileType Protected => 1, Writable => 'int32u', WriteGroup => 'IFD0', }, 0x00ff => { # OldSubfileType Protected => 1, Writable => 'int16u', WriteGroup => 'IFD0', }, 0x0100 => { # ImageWidth Protected => 1, Writable => 'int32u', WriteGroup => 'IFD0', }, 0x0101 => { # ImageHeight Protected => 1, Writable => 'int32u', WriteGroup => 'IFD0', }, 0x0102 => { # BitsPerSample Protected => 1, Writable => 'int16u', WriteGroup => 'IFD0', Count => -1, # can be 1 or 3: -1 means 'variable' }, 0x0103 => { # Compression Protected => 1, Writable => 'int16u', WriteGroup => 'IFD0', Mandatory => 1, }, 0x0106 => { # PhotometricInterpretation Protected => 1, Writable => 'int16u', WriteGroup => 'IFD0', }, 0x0107 => { # Thresholding Protected => 1, Writable => 'int16u', WriteGroup => 'IFD0', }, 0x0108 => { # CellWidth Protected => 1, Writable => 'int16u', WriteGroup => 'IFD0', }, 0x0109 => { # CellLength Protected => 1, Writable => 'int16u', WriteGroup => 'IFD0', }, 0x010a => { # FillOrder Protected => 1, Writable => 'int16u', WriteGroup => 'IFD0', }, 0x010d => { # DocumentName Writable => 'string', WriteGroup => 'IFD0', }, 0x010e => { # ImageDescription Writable => 'string', WriteGroup => 'IFD0', }, 0x010f => { # Make Writable => 'string', WriteGroup => 'IFD0', }, 0x0110 => { # Model Writable => 'string', WriteGroup => 'IFD0', }, 0x0112 => { # Orientation Writable => 'int16u', WriteGroup => 'IFD0', }, 0x0115 => { # SamplesPerPixel Protected => 1, Writable => 'int16u', WriteGroup => 'IFD0', }, 0x0116 => { # RowsPerStrip Protected => 1, Writable => 'int32u', WriteGroup => 'IFD0', }, 0x0118 => { # MinSampleValue Writable => 'int16u', WriteGroup => 'IFD0', }, 0x0119 => { # MaxSampleValue Writable => 'int16u', WriteGroup => 'IFD0', }, 0x011a => { # XResolution Writable => 'rational64u', WriteGroup => 'IFD0', Mandatory => 1, }, 0x011b => { # YResolution Writable => 'rational64u', WriteGroup => 'IFD0', Mandatory => 1, }, 0x011c => { # PlanarConfiguration Protected => 1, Writable => 'int16u', WriteGroup => 'IFD0', }, 0x011d => { # PageName Writable => 'string', WriteGroup => 'IFD0', }, 0x011e => { # XPosition Writable => 'rational64u', WriteGroup => 'IFD0', }, 0x011f => { # YPosition Writable => 'rational64u', WriteGroup => 'IFD0', }, 0x0122 => { # GrayResponseUnit Writable => 'int16u', WriteGroup => 'IFD0', }, 0x0128 => { # ResolutionUnit Writable => 'int16u', WriteGroup => 'IFD0', Mandatory => 1, }, 0x0129 => { # PageNumber Writable => 'int16u', WriteGroup => 'IFD0', Count => 2, }, 0x012d => { # TransferFunction Protected => 1, Writable => 'int16u', WriteGroup => 'IFD0', Count => 768, }, 0x0131 => { # Software Writable => 'string', WriteGroup => 'IFD0', }, 0x0132 => { # ModifyDate Writable => 'string', Shift => 'Time', WriteGroup => 'IFD0', PrintConvInv => '$self->InverseDateTime($val,0)', }, 0x013b => { # Artist Writable => 'string', WriteGroup => 'IFD0', }, 0x013c => { # HostComputer Writable => 'string', WriteGroup => 'IFD0', }, 0x013d => { # Predictor Protected => 1, Writable => 'int16u', WriteGroup => 'IFD0', }, 0x013e => { # WhitePoint Writable => 'rational64u', WriteGroup => 'IFD0', Count => 2, }, 0x013f => { # PrimaryChromaticities Writable => 'rational64u', WriteGroup => 'IFD0', Count => 6, }, 0x0141 => { # HalftoneHints Writable => 'int16u', WriteGroup => 'IFD0', Count => 2, }, 0x0142 => { # TileWidth Protected => 1, Writable => 'int32u', WriteGroup => 'IFD0', }, 0x0143 => { # TileLength Protected => 1, Writable => 'int32u', WriteGroup => 'IFD0', }, 0x014c => { # InkSet Writable => 'int16u', WriteGroup => 'IFD0', }, 0x0150 => { # TargetPrinter Writable => 'string', WriteGroup => 'IFD0', }, 0x013c => { # HostComputer Writable => 'string', WriteGroup => 'IFD0', }, 0x0211 => { # YCbCrCoefficients Protected => 1, Writable => 'rational64u', WriteGroup => 'IFD0', Count => 3, }, 0x0212 => { # YCbCrSubSampling Protected => 1, Writable => 'int16u', WriteGroup => 'IFD0', Count => 2, }, 0x0213 => { # YCbCrPositioning Protected => 1, Writable => 'int16u', WriteGroup => 'IFD0', Mandatory => 1, }, 0x0214 => { # ReferenceBlackWhite Writable => 'rational64u', WriteGroup => 'IFD0', Count => 6, }, 0x1000 => { # RelatedImageFileFormat Protected => 1, Writable => 'string', WriteGroup => 'InteropIFD', }, 0x1001 => { # RelatedImageWidth Protected => 1, Writable => 'int16u', WriteGroup => 'InteropIFD', }, 0x1002 => { # RelatedImageHeight (more commonly RelatedImageLength) Protected => 1, Writable => 'int16u', WriteGroup => 'InteropIFD', }, 0x4746 => { # Rating (MicrosoftPhoto) Writable => 'int16u', WriteGroup => 'IFD0', Avoid => 1, }, 0x4749 => { # RatingPercent (MicrosoftPhoto) Writable => 'int16u', WriteGroup => 'IFD0', Avoid => 1, }, 0x828d => { # CFARepeatPatternDim Protected => 1, Writable => 'int16u', WriteGroup => 'SubIFD', Count => 2, }, 0x828e => { # CFAPattern2 Protected => 1, Writable => 'int8u', WriteGroup => 'SubIFD', Count => -1, }, 0x8298 => { # Copyright Writable => 'string', WriteGroup => 'IFD0', RawConvInv => '$val . "\0"', PrintConvInv => sub { my ($val, $self) = @_; # encode if necessary my $enc = $self->Options('CharsetEXIF'); $val = $self->Encode($val,$enc) if $enc and $val !~ /\0/; if ($val =~ /(.*?)\s*[\n\r]+\s*(.*)/s) { return $1 unless length $2; # photographer copyright set to ' ' if it doesn't exist, according to spec. return((length($1) ? $1 : ' ') . "\0" . $2); } return $val; }, }, # # Most of the tags below this belong in the ExifIFD... # 0x829a => { # ExposureTime Writable => 'rational64u', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x829d => { # FNumber Writable => 'rational64u', PrintConvInv => '$val', }, 0x8546 => { # SEMInfo Writable => 'string', WriteGroup => 'IFD0', }, 0x87af => { # GeoTiffDirectory Writable => 'undef', WriteGroup => 'IFD0', # swap byte order if necessary RawConvInv => q{ return $val if length $val < 2; my $order = substr($val, -2); return $val unless $order eq 'II' or $order eq 'MM'; $val = substr($val, 0, -2); return $val if $order eq GetByteOrder(); return pack('v*',unpack('n*',$val)); }, }, 0x87b0 => { # GeoTiffDoubleParams Writable => 'undef', WriteGroup => 'IFD0', # swap byte order if necessary RawConvInv => q{ return $val if length $val < 2; my $order = substr($val, -2); return $val unless $order eq 'II' or $order eq 'MM'; $val = substr($val, 0, -2); return $val if $order eq GetByteOrder(); $val =~ s/(.{4})(.{4})/$2$1/sg; # swap words return pack('V*',unpack('N*',$val)); }, }, 0x87b1 => { # GeoTiffAsciiParams Writable => 'string', WriteGroup => 'IFD0', }, 0x8822 => 'int16u', # ExposureProgram 0x8824 => 'string', # SpectralSensitivity 0x8827 => { # ISO Writable => 'int16u', Count => -1, PrintConvInv => '$val=~tr/,//d; $val', }, 0x882a => { # TimeZoneOffset Writable => 'int16s', Count => -1, # can be 1 or 2 Notes => q{ 1 or 2 values: 1. The time zone offset of DateTimeOriginal from GMT in hours, 2. If present, the time zone offset of ModifyDate }, }, 0x882b => 'int16u', # SelfTimerMode 0x8830 => 'int16u', # SensitivityType 0x8831 => 'int32u', # StandardOutputSensitivity 0x8832 => 'int32u', # RecommendedExposureIndex 0x8833 => 'int32u', # ISOSpeed 0x8834 => 'int32u', # ISOSpeedLatitudeyyy 0x8835 => 'int32u', # ISOSpeedLatitudezzz 0x9000 => { # ExifVersion Writable => 'undef', Mandatory => 1, PrintConvInv => '$val=~tr/.//d; $val=~/^\d{4}$/ ? $val : undef', }, 0x9003 => { # DateTimeOriginal Writable => 'string', Shift => 'Time', PrintConvInv => '$self->InverseDateTime($val,0)', }, 0x9004 => { # CreateDate Writable => 'string', Shift => 'Time', PrintConvInv => '$self->InverseDateTime($val,0)', }, 0x9009 => 'undef', # GooglePlusUploadCode 0x9101 => { # ComponentsConfiguration Protected => 1, Writable => 'undef', Count => 4, Mandatory => 1, ValueConvInv => '$val=~tr/,//d; $val', # (so we can copy from XMP with -n) }, 0x9102 => { # CompressedBitsPerPixel Protected => 1, Writable => 'rational64u', }, 0x9201 => { # ShutterSpeedValue Writable => 'rational64s', ValueConvInv => '$val>0 ? -log($val)/log(2) : -100', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x9202 => { # ApertureValue Writable => 'rational64u', ValueConvInv => '$val>0 ? 2*log($val)/log(2) : 0', PrintConvInv => '$val', }, 0x9203 => 'rational64s',# BrightnessValue 0x9204 => { # ExposureCompensation Writable => 'rational64s', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, 0x9205 => { # MaxApertureValue Writable => 'rational64u', ValueConvInv => '$val>0 ? 2*log($val)/log(2) : 0', PrintConvInv => '$val', }, 0x9206 => { # SubjectDistance Writable => 'rational64u', PrintConvInv => '$val=~s/\s*m$//;$val', }, 0x9207 => 'int16u', # MeteringMode 0x9208 => 'int16u', # LightSource 0x9209 => 'int16u', # Flash 0x920a => { # FocalLength Writable => 'rational64u', PrintConvInv => '$val=~s/\s*mm$//;$val', }, 0x9211 => 'int32u', # ImageNumber 0x9212 => 'string', # SecurityClassification 0x9213 => 'string', # ImageHistory 0x9214 => { # SubjectArea Writable => 'int16u', Count => -1, # 2, 3 or 4 values }, # 0x927c => 'undef', # MakerNotes 0x9286 => { # UserComment Writable => 'undef', # (starts with "ASCII\0\0\0", "UNICODE\0", "JIS\0\0\0\0\0" or "\0\0\0\0\0\0\0\0") RawConvInv => 'Image::ExifTool::Exif::EncodeExifText($self,$val)', # SHOULD ADD SPECIAL LOGIC TO ALLOW CONDITIONAL OVERWRITE OF # "UNKNOWN" VALUES FILLED WITH SPACES }, 0x9290 => { # SubSecTime Writable => 'string', # extract fractional seconds from a full date/time value ValueConvInv => '$val=~/^(\d+)\s*$/ ? $1 : ($val=~/\.(\d+)/ ? $1 : undef)', }, 0x9291 => { # SubSecTimeOriginal Writable => 'string', ValueConvInv => '$val=~/^(\d+)\s*$/ ? $1 : ($val=~/\.(\d+)/ ? $1 : undef)', }, 0x9292 => { # SubSecTimeDigitized Writable => 'string', ValueConvInv => '$val=~/^(\d+)\s*$/ ? $1 : ($val=~/\.(\d+)/ ? $1 : undef)', }, 0x935c => { # ImageSourceData Writable => 'undef', WriteGroup => 'IFD0', Protected => 1, }, # 0x9928 => 'undef', # Opto-ElectricConversionFactor 0x9c9b => { # XPTitle Writable => 'int8u', WriteGroup => 'IFD0', Notes => q{ tags 0x9c9b-0x9c9f are used by Windows Explorer; special characters in these values are converted to UTF-8 by default, or Windows Latin1 with the -L option. XPTitle is ignored by Windows Explorer if ImageDescription exists }, ValueConvInv => '$self->Encode($val,"UCS2","II") . "\0\0"', }, 0x9c9c => { # XPComment Writable => 'int8u', WriteGroup => 'IFD0', ValueConvInv => '$self->Encode($val,"UCS2","II") . "\0\0"', }, 0x9c9d => { # XPAuthor Writable => 'int8u', WriteGroup => 'IFD0', Notes => 'ignored by Windows Explorer if Artist exists', ValueConvInv => '$self->Encode($val,"UCS2","II") . "\0\0"', }, 0x9c9e => { # XPKeywords Writable => 'int8u', WriteGroup => 'IFD0', ValueConvInv => '$self->Encode($val,"UCS2","II") . "\0\0"', }, 0x9c9f => { # XPSubject Writable => 'int8u', WriteGroup => 'IFD0', ValueConvInv => '$self->Encode($val,"UCS2","II") . "\0\0"', }, 0xa000 => { # FlashpixVersion Writable => 'undef', Mandatory => 1, PrintConvInv => '$val=~tr/.//d; $val=~/^\d{4}$/ ? $val : undef', }, 0xa001 => { # ColorSpace Writable => 'int16u', Mandatory => 1, }, 0xa002 => { # ExifImageWidth (could also be int32u) Writable => 'int16u', Mandatory => 1, }, 0xa003 => { # ExifImageHeight (could also be int32u) Writable => 'int16u', Mandatory => 1, }, 0xa004 => 'string', # RelatedSoundFile 0xa20b => { # FlashEnergy Writable => 'rational64u', Count => -1, # 1 or 2 (ref 12) }, # 0xa20c => 'undef', # SpatialFrequencyResponse 0xa20e => 'rational64u',# FocalPlaneXResolution 0xa20f => 'rational64u',# FocalPlaneYResolution 0xa210 => 'int16u', # FocalPlaneResolutionUnit 0xa214 => { # SubjectLocation Writable => 'int16u', Count => 2, }, 0xa215 => 'rational64u',# ExposureIndex 0xa217 => 'int16u', # SensingMethod 0xa300 => { # FileSource Writable => 'undef', ValueConvInv => '($val=~/^\d+$/ and $val < 256) ? chr($val) : $val', }, 0xa301 => { # SceneType Writable => 'undef', ValueConvInv => 'chr($val)', }, 0xa302 => { # CFAPattern Writable => 'undef', RawConvInv => q{ my @a = split ' ', $val; return $val if @a <= 2; # also accept binary data for backward compatibility return pack(GetByteOrder() eq 'II' ? 'v2C*' : 'n2C*', @a); }, PrintConvInv => 'Image::ExifTool::Exif::GetCFAPattern($val)', }, 0xa401 => 'int16u', # CustomRendered 0xa402 => 'int16u', # ExposureMode 0xa403 => 'int16u', # WhiteBalance 0xa404 => 'rational64u',# DigitalZoomRatio 0xa405 => { # FocalLengthIn35mmFormat Writable => 'int16u', PrintConvInv => '$val=~s/\s*mm$//;$val', }, 0xa406 => 'int16u', # SceneCaptureType 0xa407 => 'int16u', # GainControl 0xa408 => { # Contrast Writable => 'int16u', PrintConvInv => 'Image::ExifTool::Exif::ConvertParameter($val)', }, 0xa409 => { # Saturation Writable => 'int16u', PrintConvInv => 'Image::ExifTool::Exif::ConvertParameter($val)', }, 0xa40a => { # Sharpness Writable => 'int16u', PrintConvInv => 'Image::ExifTool::Exif::ConvertParameter($val)', }, # 0xa40b => 'undef', # DeviceSettingDescription 0xa40c => 'int16u', # SubjectDistanceRange 0xa420 => 'string', # ImageUniqueID 0xa430 => 'string', # OwnerName 0xa431 => 'string', # SerialNumber 0xa432 => { # LensInfo Writable => 'rational64u', Count => 4, PrintConvInv => \&ConvertLensInfo, }, 0xa433 => 'string', # LensMake 0xa434 => 'string', # LensModel 0xa435 => 'string', # LensSerialNumber 0xa500 => 'rational64u',# Gamma # # DNG stuff (mostly in IFD0, "Raw IFD" in SubIFD) # 0xc612 => { # DNGVersion Writable => 'int8u', WriteGroup => 'IFD0', Count => 4, Protected => 1, # (confuses Apple Preview if written to a TIFF image) PrintConvInv => '$val =~ tr/./ /; $val', }, 0xc613 => { # DNGBackwardVersion Writable => 'int8u', WriteGroup => 'IFD0', Count => 4, Protected => 1, PrintConvInv => '$val =~ tr/./ /; $val', }, 0xc614 => { # UniqueCameraModel Writable => 'string', WriteGroup => 'IFD0', }, 0xc615 => { # LocalizedCameraModel Writable => 'string', WriteGroup => 'IFD0', PrintConvInv => '$val', }, 0xc618 => { # LinearizationTable Writable => 'int16u', WriteGroup => 'SubIFD', Count => -1, Protected => 1, },, 0xc619 => { # BlackLevelRepeatDim Writable => 'int16u', WriteGroup => 'SubIFD', Count => 2, Protected => 1, }, 0xc61a => { # BlackLevel Writable => 'rational64u', WriteGroup => 'SubIFD', Count => -1, Protected => 1, }, 0xc61b => { # BlackLevelDeltaH Writable => 'rational64s', WriteGroup => 'SubIFD', Count => -1, Protected => 1, }, 0xc61c => { # BlackLevelDeltaV Writable => 'rational64s', WriteGroup => 'SubIFD', Count => -1, Protected => 1, }, 0xc61d => { # WhiteLevel Writable => 'int32u', WriteGroup => 'SubIFD', Count => -1, Protected => 1, }, 0xc61e => { # DefaultScale Writable => 'rational64u', WriteGroup => 'SubIFD', Count => 2, Protected => 1, }, 0xc61f => { # DefaultCropOrigin Writable => 'int32u', WriteGroup => 'SubIFD', Count => 2, Protected => 1, }, 0xc620 => { # DefaultCropSize Writable => 'int32u', WriteGroup => 'SubIFD', Count => 2, Protected => 1, }, 0xc621 => { # ColorMatrix1 Writable => 'rational64s', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc622 => { # ColorMatrix2 Writable => 'rational64s', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc623 => { # CameraCalibration1 Writable => 'rational64s', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc624 => { # CameraCalibration2 Writable => 'rational64s', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc625 => { # ReductionMatrix1 Writable => 'rational64s', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc626 => { # ReductionMatrix2 Writable => 'rational64s', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc627 => { # AnalogBalance Writable => 'rational64u', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc628 => { # AsShotNeutral Writable => 'rational64u', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc629 => { # AsShotWhiteXY Writable => 'rational64u', WriteGroup => 'IFD0', Count => 2, Protected => 1, }, 0xc62a => { # BaselineExposure Writable => 'rational64s', WriteGroup => 'IFD0', Protected => 1, }, 0xc62b => { # BaselineNoise Writable => 'rational64u', WriteGroup => 'IFD0', Protected => 1, }, 0xc62c => { # BaselineSharpness Writable => 'rational64u', WriteGroup => 'IFD0', Protected => 1, }, 0xc62d => { # BayerGreenSplit Writable => 'int32u', WriteGroup => 'SubIFD', Protected => 1, }, 0xc62e => { # LinearResponseLimit Writable => 'rational64u', WriteGroup => 'IFD0', Protected => 1, }, 0xc62f => { # CameraSerialNumber Writable => 'string', WriteGroup => 'IFD0', }, 0xc630 => { # DNGLensInfo Writable => 'rational64u', WriteGroup => 'IFD0', Count => 4, PrintConvInv => \&ConvertLensInfo, }, 0xc631 => { # ChromaBlurRadius Writable => 'rational64u', WriteGroup => 'SubIFD', Protected => 1, }, 0xc632 => { # AntiAliasStrength Writable => 'rational64u', WriteGroup => 'SubIFD', Protected => 1, }, 0xc633 => { # ShadowScale Writable => 'rational64u', WriteGroup => 'IFD0', Protected => 1, }, 0xc635 => { # MakerNoteSafety Writable => 'int16u', WriteGroup => 'IFD0', }, 0xc65a => { # CalibrationIlluminant1 Writable => 'int16u', WriteGroup => 'IFD0', Protected => 1, }, 0xc65b => { # CalibrationIlluminant2 Writable => 'int16u', WriteGroup => 'IFD0', Protected => 1, }, 0xc65c => { # BestQualityScale Writable => 'rational64u', WriteGroup => 'SubIFD', Protected => 1, }, 0xc65d => { # RawDataUniqueID Writable => 'int8u', WriteGroup => 'IFD0', Count => 16, Count => 16, ValueConvInv => 'pack("H*", $val)', Protected => 1, }, 0xc68b => { # OriginalRawFileName Writable => 'string', WriteGroup => 'IFD0', Protected => 1, }, 0xc68d => { # ActiveArea Writable => 'int32u', WriteGroup => 'SubIFD', Count => 4, Protected => 1, }, 0xc68e => { # MaskedAreas Writable => 'int32u', WriteGroup => 'SubIFD', Count => 4, Protected => 1, }, 0xc68f => { # AsShotICCProfile (writable directory) WriteGroup => 'IFD0', Protected => 1, WriteCheck => q{ require Image::ExifTool::ICC_Profile; return Image::ExifTool::ICC_Profile::ValidateICC(\$val); }, }, 0xc690 => { # AsShotPreProfileMatrix Writable => 'rational64s', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc691 => { # CurrentICCProfile (writable directory) Writable => 'undef', WriteGroup => 'IFD0', Protected => 1, WriteCheck => q{ require Image::ExifTool::ICC_Profile; return Image::ExifTool::ICC_Profile::ValidateICC(\$val); }, }, 0xc692 => { # CurrentPreProfileMatrix Writable => 'rational64s', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc6bf => { # ColorimetricReference Writable => 'int16u', WriteGroup => 'IFD0', Protected => 1, }, 0xc6d2 => { # PanasonicTitle (Panasonic DMC-TZ5, not a DNG tag) Writable => 'undef', WriteGroup => 'IFD0', ValueConvInv => '$self->Encode($val,"UTF8")', }, 0xc6d3 => { # PanasonicTitle2 (Panasonic DMC-FS7, not a DNG tag) Writable => 'undef', WriteGroup => 'IFD0', ValueConvInv => '$self->Encode($val,"UTF8")', }, 0xc6f3 => { # CameraCalibrationSig Writable => 'string', WriteGroup => 'IFD0', Protected => 1, }, 0xc6f4 => { # ProfileCalibrationSig Writable => 'string', WriteGroup => 'IFD0', Protected => 1, }, 0xc6f6 => { # AsShotProfileName Writable => 'string', WriteGroup => 'IFD0', Protected => 1, }, 0xc6f7 => { # NoiseReductionApplied Writable => 'rational64u', WriteGroup => 'SubIFD', Protected => 1, }, 0xc6f8 => { # ProfileName Writable => 'string', WriteGroup => 'IFD0', Protected => 1, }, 0xc6f9 => { # ProfileHueSatMapDims Writable => 'int32u', WriteGroup => 'IFD0', Count => 3, Protected => 1, }, 0xc6fa => { # ProfileHueSatMapData1 Writable => 'float', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc6fb => { # ProfileHueSatMapData2 Writable => 'float', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc6fc => { # ProfileToneCurve Writable => 'float', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc6fd => { # ProfileEmbedPolicy Writable => 'int32u', WriteGroup => 'IFD0', Protected => 1, }, 0xc6fe => { # ProfileCopyright Writable => 'string', WriteGroup => 'IFD0', Protected => 1, }, 0xc714 => { # ForwardMatrix1 Writable => 'rational64s', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc715 => { # ForwardMatrix2 Writable => 'rational64s', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc716 => { # PreviewApplicationName Writable => 'string', WriteGroup => 'IFD0', Protected => 1, }, 0xc717 => { # PreviewApplicationVersion Writable => 'string', WriteGroup => 'IFD0', Protected => 1, }, 0xc718 => { # PreviewSettingsName Writable => 'string', WriteGroup => 'IFD0', Protected => 1, }, 0xc719 => { # PreviewSettingsDigest Writable => 'int8u', WriteGroup => 'IFD0', Protected => 1, ValueConvInv => 'pack("H*", $val)', }, 0xc71a => { # PreviewColorSpace Writable => 'int32u', WriteGroup => 'IFD0', Protected => 1, PrintConv => { 0 => 'Unknown', 1 => 'Gray Gamma 2.2', 2 => 'sRGB', 3 => 'Adobe RGB', 4 => 'ProPhoto RGB', }, }, 0xc71b => { # PreviewDateTime Writable => 'string', WriteGroup => 'IFD0', Protected => 1, ValueConvInv => q{ require Image::ExifTool::XMP; return Image::ExifTool::XMP::FormatXMPDate($val); }, PrintConvInv => '$self->InverseDateTime($val,1,1)', }, 0xc71c => { # RawImageDigest Writable => 'int8u', WriteGroup => 'IFD0', Count => 16, Protected => 1, ValueConvInv => 'pack("H*", $val)', }, 0xc71d => { # OriginalRawFileDigest Writable => 'int8u', WriteGroup => 'IFD0', Count => 16, Protected => 1, ValueConvInv => 'pack("H*", $val)', }, 0xc725 => { # ProfileLookTableDims Writable => 'int32u', WriteGroup => 'IFD0', Count => 3, Protected => 1, }, 0xc726 => { # ProfileLookTableData Writable => 'float', WriteGroup => 'IFD0', Count => -1, Protected => 1, }, 0xc761 => { # NoiseProfile Writable => 'double', WriteGroup => 'SubIFD', Count => -1, Protected => 1, }, 0xc763 => { # TimeCodes Writable => 'int8u', WriteGroup => 'IFD0', Count => -1, # (8 * number of time codes, max 10) ValueConvInv => q{ my @a = map hex, split /[. ]+/, $val; join ' ', @a; }, PrintConvInv => q{ my @a = split ' ', $val; my @v; foreach (@a) { my @td = reverse split /T/; my $tz = 0x39; # default to unknown timezone if ($td[0] =~ s/([-+])(\d+):(\d+)$//) { if ($3 == 0) { $tz = hex(($1 eq '-') ? $2 : 0x26 - $2); } elsif ($3 == 30) { if ($1 eq '-') { $tz = $2 + 0x0a; $tz += 0x0a if $tz > 0x0f; } else { $tz = 0x3f - $2; $tz -= 0x0a if $tz < 0x3a; } } elsif ($3 == 45) { $tz = 0x32 if $1 eq '+' and $2 == 12; } } my @t = split /[:.]/, $td[0]; push @t, '00' while @t < 4; my $bg; if ($td[1]) { # date was specified: fill in date & timezone my @d = split /[-]/, $td[1]; next if @d < 3; $bg = sprintf('.%.2d.%.2d.%.2d.%.2x', $d[2], $d[1], $d[0]%100, $tz); $t[0] = sprintf('%.2x', hex($t[0]) + 0xc0); # set BGF1+BGF2 } else { # time only $bg = '.00.00.00.00'; } push @v, join('.', reverse(@t[0..3])) . $bg; } join ' ', @v; }, }, 0xc764 => { # FrameRate Writable => 'rational64s', WriteGroup => 'IFD0', PrintConvInv => '$val', }, 0xc772 => { # TStop Writable => 'rational64u', WriteGroup => 'IFD0', Count => -1, # (1 or 2) PrintConvInv => '$val=~tr/-/ /; $val', }, 0xc789 => { # ReelName Writable => 'string', WriteGroup => 'IFD0', }, 0xc791 => { # OriginalDefaultFinalSize Writable => 'int32u', WriteGroup => 'IFD0', Count => 2, Protected => 1, }, 0xc792 => { # OriginalBestQualitySize Writable => 'int32u', WriteGroup => 'IFD0', Count => 2, Protected => 1, }, 0xc793 => { # OriginalDefaultCropSize Writable => 'rational64u', WriteGroup => 'IFD0', Count => 2, Protected => 1, }, 0xc7a1 => { # CameraLabel Writable => 'string', WriteGroup => 'IFD0', }, 0xc7a3 => { # ProfileHueSatMapEncoding Writable => 'int32u', WriteGroup => 'IFD0', Protected => 1, }, 0xc7a4 => { # ProfileLookTableEncoding Writable => 'int32u', WriteGroup => 'IFD0', Protected => 1, }, 0xc7a5 => { # BaselineExposureOffset Writable => 'rational64s', # (incorrectly "RATIONAL" in DNG 1.4 spec) WriteGroup => 'IFD0', Protected => 1, }, 0xc7a6 => { # DefaultBlackRender Writable => 'int32u', WriteGroup => 'IFD0', Protected => 1, }, 0xc7a7 => { # NewRawImageDigest Writable => 'int8u', WriteGroup => 'IFD0', Count => 16, Protected => 1, ValueConvInv => 'pack("H*", $val)', }, 0xc7a8 => { # RawToPreviewGain Writable => 'double', WriteGroup => 'IFD0', Protected => 1, }, 0xc7b5 => { # DefaultUserCrop Writable => 'rational64u', WriteGroup => 'SubIFD', Count => 4, Protected => 1, }, # --- end DNG tags --- 0xea1d => { # OffsetSchema Writable => 'int32s', }, # tags produced by Photoshop Camera RAW # (avoid creating these tags unless there is no other option) 0xfde8 => { Name => 'OwnerName', Condition => '$$self{TIFF_TYPE} ne "DCR"', # (used for another purpose in Kodak DCR images) Avoid => 1, PSRaw => 1, Writable => 'string', ValueConv => '$val=~s/^.*: //;$val', ValueConvInv => q{"Owner's Name: $val"}, Notes => q{ tags 0xfde8-0xfdea and 0xfe4c-0xfe58 are generated by Photoshop Camera RAW. Some names are the same as other EXIF tags, but ExifTool will avoid writing these unless they already exist in the file }, }, 0xfde9 => { Name => 'SerialNumber', Condition => '$$self{TIFF_TYPE} ne "DCR"', # (used for another purpose in Kodak DCR SubIFD) Avoid => 1, PSRaw => 1, Writable => 'string', ValueConv => '$val=~s/^.*: //;$val', ValueConvInv => q{"Serial Number: $val"}, }, 0xfdea => { Name => 'Lens', Condition => '$$self{TIFF_TYPE} ne "DCR"', # (used for another purpose in Kodak DCR SubIFD) Avoid => 1, PSRaw => 1, Writable => 'string', ValueConv => '$val=~s/^.*: //;$val', ValueConvInv => q{"Lens: $val"}, }, 0xfe4c => { Name => 'RawFile', Avoid => 1, PSRaw => 1, Writable => 'string', ValueConv => '$val=~s/^.*: //;$val', ValueConvInv => q{"Raw File: $val"}, }, 0xfe4d => { Name => 'Converter', Avoid => 1, PSRaw => 1, Writable => 'string', ValueConv => '$val=~s/^.*: //;$val', ValueConvInv => q{"Converter: $val"}, }, 0xfe4e => { Name => 'WhiteBalance', Avoid => 1, PSRaw => 1, Writable => 'string', ValueConv => '$val=~s/^.*: //;$val', ValueConvInv => q{"White Balance: $val"}, }, 0xfe51 => { Name => 'Exposure', Avoid => 1, PSRaw => 1, Writable => 'string', ValueConv => '$val=~s/^.*: //;$val', ValueConvInv => q{"Exposure: $val"}, }, 0xfe52 => { Name => 'Shadows', Avoid => 1, PSRaw => 1, Writable => 'string', ValueConv => '$val=~s/^.*: //;$val', ValueConvInv => q{"Shadows: $val"}, }, 0xfe53 => { Name => 'Brightness', Avoid => 1, PSRaw => 1, Writable => 'string', ValueConv => '$val=~s/^.*: //;$val', ValueConvInv => q{"Brightness: $val"}, }, 0xfe54 => { Name => 'Contrast', Avoid => 1, PSRaw => 1, Writable => 'string', ValueConv => '$val=~s/^.*: //;$val', ValueConvInv => q{"Contrast: $val"}, }, 0xfe55 => { Name => 'Saturation', Avoid => 1, PSRaw => 1, Writable => 'string', ValueConv => '$val=~s/^.*: //;$val', ValueConvInv => q{"Saturation: $val"}, }, 0xfe56 => { Name => 'Sharpness', Avoid => 1, PSRaw => 1, Writable => 'string', ValueConv => '$val=~s/^.*: //;$val', ValueConvInv => q{"Sharpness: $val"}, }, 0xfe57 => { Name => 'Smoothness', Avoid => 1, PSRaw => 1, Writable => 'string', ValueConv => '$val=~s/^.*: //;$val', ValueConvInv => q{"Smoothness: $val"}, }, 0xfe58 => { Name => 'MoireFilter', Avoid => 1, PSRaw => 1, Writable => 'string', ValueConv => '$val=~s/^.*: //;$val', ValueConvInv => q{"Moire Filter: $val"}, }, ); # insert our writable properties into main EXIF tag table InsertWritableProperties(\%Image::ExifTool::Exif::Main, \%writeTable, \&CheckExif); #------------------------------------------------------------------------------ # Inverse print conversion for LensInfo # Inputs: 0) lens info string # Returns: PrintConvInv of string sub ConvertLensInfo($) { my $val = shift; my @a = GetLensInfo($val, 1); # (allow unknown "?" values) return @a ? join(' ', @a) : $val; } #------------------------------------------------------------------------------ # Get binary CFA Pattern from a text string # Inputs: Print-converted CFA pattern (eg. '[Blue,Green][Green,Red]') # Returns: CFA pattern as a string of numbers sub GetCFAPattern($) { my $val = shift; my @rows = split /\]\s*\[/, $val; @rows or warn("Rows not properly bracketed by '[]'\n"), return undef; my @cols = split /,/, $rows[0]; @cols or warn("Colors not separated by ','\n"), return undef; my $ny = @cols; my @a = (scalar(@rows), scalar(@cols)); my %cfaLookup = (red=>0, green=>1, blue=>2, cyan=>3, magenta=>4, yellow=>5, white=>6); my $row; foreach $row (@rows) { @cols = split /,/, $row; @cols == $ny or warn("Inconsistent number of colors in each row\n"), return undef; foreach (@cols) { tr/ \]\[//d; # remove remaining brackets and any spaces my $c = $cfaLookup{lc($_)}; defined $c or warn("Unknown color '$_'\n"), return undef; push @a, $c; } } return "@a"; } #------------------------------------------------------------------------------ # validate raw values for writing # Inputs: 0) ExifTool ref, 1) tagInfo hash ref, 2) raw value ref # Returns: error string or undef (and possibly changes value) on success sub CheckExif($$$) { my ($et, $tagInfo, $valPtr) = @_; my $format = $$tagInfo{Format} || $$tagInfo{Writable} || $$tagInfo{Table}{WRITABLE}; if (not $format or $format eq '1') { if ($$tagInfo{Groups}{0} eq 'MakerNotes') { return undef; # OK to have no format for makernotes } else { return 'No writable format'; } } return Image::ExifTool::CheckValue($valPtr, $format, $$tagInfo{Count}); } #------------------------------------------------------------------------------ # encode exif ASCII/Unicode text from UTF8 or Latin # Inputs: 0) ExifTool ref, 1) text string # Returns: encoded string # Note: MUST be called Raw conversion time so the EXIF byte order is known! sub EncodeExifText($$) { my ($et, $val) = @_; # does the string contain special characters? if ($val =~ /[\x80-\xff]/) { my $order = $et->GetNewValue('ExifUnicodeByteOrder'); return "UNICODE\0" . $et->Encode($val,'UTF16',$order); } else { return "ASCII\0\0\0$val"; } } #------------------------------------------------------------------------------ # insert writable properties into main tag table # Inputs: 0) tag table ref, 1) reference to writable properties # 2) [optional] CHECK_PROC reference sub InsertWritableProperties($$;$) { my ($tagTablePtr, $writeTablePtr, $checkProc) = @_; my $tag; $checkProc and $$tagTablePtr{CHECK_PROC} = $checkProc; foreach $tag (keys %$writeTablePtr) { my $writeInfo = $$writeTablePtr{$tag}; my @infoList = GetTagInfoList($tagTablePtr, $tag); if (@infoList) { my $tagInfo; foreach $tagInfo (@infoList) { if (ref $writeInfo) { my $key; foreach $key (keys %$writeInfo) { $$tagInfo{$key} = $$writeInfo{$key} unless defined $$tagInfo{$key}; } } else { $$tagInfo{Writable} = $writeInfo unless defined $$tagInfo{Writable}; } } } else { AddTagToTable($tagTablePtr, $tag, $writeInfo); } } } #------------------------------------------------------------------------------ # rebuild maker notes to properly contain all value data # (some manufacturers put value data outside maker notes!!) # Inputs: 0) ExifTool object ref, 1) tag table ref, 2) dirInfo ref # Returns: new maker note data (and creates MAKER_NOTE_FIXUP), or undef on error sub RebuildMakerNotes($$$) { my ($et, $tagTablePtr, $dirInfo) = @_; my $dirStart = $$dirInfo{DirStart}; my $dirLen = $$dirInfo{DirLen}; my $dataPt = $$dirInfo{DataPt}; my $dataPos = $$dirInfo{DataPos} || 0; my $rtnValue; my %subdirInfo = %$dirInfo; delete $$et{MAKER_NOTE_FIXUP}; # don't need to rebuild text, BinaryData or PreviewImage maker notes my $tagInfo = $$dirInfo{TagInfo}; my $subdir = $$tagInfo{SubDirectory}; my $proc = $$subdir{ProcessProc} || $$tagTablePtr{PROCESS_PROC} || \&ProcessExif; if (($proc ne \&ProcessExif and $$tagInfo{Name} =~ /Text/) or $proc eq \&Image::ExifTool::ProcessBinaryData or ($$tagInfo{PossiblePreview} and $dirLen > 6 and substr($$dataPt, $dirStart, 3) eq "\xff\xd8\xff")) { return substr($$dataPt, $dirStart, $dirLen); } my $saveOrder = GetByteOrder(); my $loc = Image::ExifTool::MakerNotes::LocateIFD($et,\%subdirInfo); if (defined $loc) { my $makerFixup = $subdirInfo{Fixup} = new Image::ExifTool::Fixup; # create new exiftool object to rewrite the directory without changing it my $newTool = new Image::ExifTool; $newTool->Options( IgnoreMinorErrors => $$et{OPTIONS}{IgnoreMinorErrors}, FixBase => $$et{OPTIONS}{FixBase}, ); $newTool->Init(); # must do this before calling WriteDirectory()! # don't copy over preview image $newTool->SetNewValue(PreviewImage => ''); # copy all transient members over in case they are used for writing # (Make, Model, etc) foreach (grep /[a-z]/, keys %$et) { $$newTool{$_} = $$et{$_}; } # fix base offsets if specified $newTool->Options(FixBase => $et->Options('FixBase')); # set GENERATE_PREVIEW_INFO flag so PREVIEW_INFO will be generated $$newTool{GENERATE_PREVIEW_INFO} = 1; # drop any large tags $$newTool{DROP_TAGS} = 1; # initialize other necessary data members $$newTool{FILE_TYPE} = $$et{FILE_TYPE}; $$newTool{TIFF_TYPE} = $$et{TIFF_TYPE}; # rewrite maker notes $rtnValue = $newTool->WriteDirectory(\%subdirInfo, $tagTablePtr); if (defined $rtnValue and length $rtnValue) { # add the dummy/empty preview image if necessary if ($$newTool{PREVIEW_INFO}) { $makerFixup->SetMarkerPointers(\$rtnValue, 'PreviewImage', length($rtnValue)); $rtnValue .= $$newTool{PREVIEW_INFO}{Data}; delete $$newTool{PREVIEW_INFO}; } # add makernote header if ($loc) { my $hdr = substr($$dataPt, $dirStart, $loc); # special case: convert Pentax/Samsung DNG maker notes to JPEG style # (in JPEG, Pentax makernotes are absolute and start with "AOC\0" for some # models, but in DNG images they are stored in tag 0xc634 of IFD0 and # start with either "PENTAX \0" or "SAMSUNG\0") if ($$dirInfo{Parent} eq 'IFD0' and $hdr =~ /^(PENTAX |SAMSUNG)\0/) { # convert to JPEG-style AOC maker notes if used by this model # (Note: this expression also appears in Exif.pm) if ($$et{Model} =~ /\b(K(-[57mrx]|(10|20|100|110|200)D|2000)|GX(10|20))\b/) { $hdr =~ s/^(PENTAX |SAMSUNG)\0/AOC\0/; # save fixup because AOC maker notes have absolute offsets $$et{MAKER_NOTE_FIXUP} = $makerFixup; } } $rtnValue = $hdr . $rtnValue; # adjust fixup for shift in start position $$makerFixup{Start} += length $hdr; } # shift offsets according to original position of maker notes, # and relative to the makernotes Base $$makerFixup{Shift} += $dataPos + $dirStart + $$dirInfo{Base} - $subdirInfo{Base}; # repair incorrect offsets if offsets were fixed $$makerFixup{Shift} += $subdirInfo{FixedBy} || 0; # fix up pointers to the specified offset $makerFixup->ApplyFixup(\$rtnValue); # save fixup information unless offsets were relative unless ($subdirInfo{Relative}) { # set shift so offsets are all relative to start of maker notes $$makerFixup{Shift} -= $dataPos + $dirStart; $$et{MAKER_NOTE_FIXUP} = $makerFixup; # save fixup for later } } } SetByteOrder($saveOrder); return $rtnValue; } #------------------------------------------------------------------------------ # Sort IFD directory entries # Inputs: 0) data reference, 1) directory start, 2) number of entries, # 3) flag to treat 0 as a valid tag ID (as opposed to an empty IFD entry) sub SortIFD($$$;$) { my ($dataPt, $dirStart, $numEntries, $allowZero) = @_; my ($index, %entries); # split the directory into separate entries for ($index=0; $index<$numEntries; ++$index) { my $entry = $dirStart + 2 + 12 * $index; my $tagID = Get16u($dataPt, $entry); my $entryData = substr($$dataPt, $entry, 12); # silly software can pad directories with zero entries -- put these at the end $tagID = 0x10000 unless $tagID or $index == 0 or $allowZero; # add new entry (allow for duplicate tag ID's, which shouldn't normally happen) if ($entries{$tagID}) { $entries{$tagID} .= $entryData; } else { $entries{$tagID} = $entryData; } } # sort the directory entries my @sortedTags = sort { $a <=> $b } keys %entries; # generate the sorted IFD my $newDir = ''; foreach (@sortedTags) { $newDir .= $entries{$_}; } # replace original directory with new, sorted one substr($$dataPt, $dirStart + 2, 12 * $numEntries) = $newDir; } #------------------------------------------------------------------------------ # Validate IFD entries (strict validation to test possible chained IFD's) # Inputs: 0) dirInfo ref (must have RAF set), 1) optional DirStart # Returns: true if IFD looks OK sub ValidateIFD($;$) { my ($dirInfo, $dirStart) = @_; my $raf = $$dirInfo{RAF} or return 0; my $base = $$dirInfo{Base}; $dirStart = $$dirInfo{DirStart} || 0 unless defined $dirStart; my $offset = $dirStart + ($$dirInfo{DataPos} || 0); my ($buff, $index); $raf->Seek($offset + $base, 0) and $raf->Read($buff,2) == 2 or return 0; my $numEntries = Get16u(\$buff,0); $numEntries > 1 and $numEntries < 64 or return 0; my $len = 12 * $numEntries; $raf->Read($buff, $len) == $len or return 0; my $lastID = -1; for ($index=0; $index<$numEntries; ++$index) { my $entry = 12 * $index; my $tagID = Get16u(\$buff, $entry); $tagID > $lastID or $$dirInfo{AllowOutOfOrderTags} or return 0; my $format = Get16u(\$buff, $entry+2); $format > 0 and $format <= 13 or return 0; my $count = Get32u(\$buff, $entry+4); $count > 0 or return 0; $lastID = $tagID; } return 1; } #------------------------------------------------------------------------------ # Get sorted list of offsets used in IFD # Inputs: 0) data ref, 1) directory start, 2) dataPos, 3) IFD entries, 4) tag table ref # Returns: 0) sorted list of offsets (only offsets after the end of the IFD) # 1) hash of list indices keyed by offset value # Notes: This is used in a patch to fix the count for tags in Kodak SubIFD3 sub GetOffList($$$$$) { my ($dataPt, $dirStart, $dataPos, $numEntries, $tagTablePtr) = @_; my $ifdEnd = $dirStart + 2 + 12 * $numEntries + $dataPos; my ($index, $offset, %offHash); for ($index=0; $index<$numEntries; ++$index) { my $entry = $dirStart + 2 + 12 * $index; my $format = Get16u($dataPt, $entry + 2); next if $format < 1 or $format > 13; my $count = Get16u($dataPt, $entry + 4); my $size = $formatSize[$format] * $count; if ($size <= 4) { my $tagID = Get16u($dataPt, $entry); next unless ref $$tagTablePtr{$tagID} eq 'HASH' and $$tagTablePtr{$tagID}{FixCount}; } my $offset = Get16u($dataPt, $entry + 8); $offHash{$offset} = 1 if $offset >= $ifdEnd; } # set offset hash values to indices in list my @offList = sort keys %offHash; $index = 0; foreach $offset (@offList) { $offHash{$offset} = $index++; } return(\@offList, \%offHash); } #------------------------------------------------------------------------------ # Update TIFF_END member if defined # Inputs: 0) ExifTool ref, 1) end of valid TIFF data sub UpdateTiffEnd($$) { my ($et, $end) = @_; if (defined $$et{TIFF_END} and $$et{TIFF_END} < $end) { $$et{TIFF_END} = $end; } } #------------------------------------------------------------------------------ # Handle error while writing EXIF # Inputs: 0) ExifTool ref, 1) error string, 2) tag table ref # Returns: undef on fatal error, or '' if minor error is ignored sub ExifErr($$$) { my ($et, $errStr, $tagTablePtr) = @_; # MakerNote errors are minor by default my $minor = ($$tagTablePtr{GROUPS}{0} eq 'MakerNotes'); if ($$tagTablePtr{VARS} and $$tagTablePtr{VARS}{MINOR_ERRORS}) { $et->Warn("$errStr. IFD dropped.") and return '' if $minor; $minor = 1; } return undef if $et->Error($errStr, $minor); return ''; } #------------------------------------------------------------------------------ # Read/Write IFD with TIFF-like header (used by DNG 1.2) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: Reading: 1 on success, otherwise returns 0 and sets a Warning # Writing: new data block or undef on error sub ProcessTiffIFD($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access my $raf = $$dirInfo{RAF}; my $base = $$dirInfo{Base} || 0; my $dirName = $$dirInfo{DirName}; my $magic = $$dirInfo{Subdir}{Magic} || 0x002a; my $buff; # structured with a TIFF-like header and relative offsets $raf->Seek($base, 0) and $raf->Read($buff, 8) == 8 or return 0; unless (SetByteOrder(substr($buff,0,2)) and Get16u(\$buff, 2) == $magic) { my $msg = "Invalid $dirName header"; if ($$dirInfo{IsWriting}) { $et->Error($msg); return undef; } else { $et->Warn($msg); return 0; } } my $offset = Get32u(\$buff, 4); my %dirInfo = ( DirName => $$dirInfo{DirName}, Parent => $$dirInfo{Parent}, Base => $base, DataPt => \$buff, DataLen => length $buff, DataPos => 0, DirStart => $offset, DirLen => length($buff) - $offset, RAF => $raf, NewDataPos => 8, ); if ($$dirInfo{IsWriting}) { # rewrite the Camera Profile IFD my $newDir = WriteExif($et, \%dirInfo, $tagTablePtr); # don't add header if error writing directory ($newDir is undef) # or if directory is being deleted ($newDir is empty) return $newDir unless $newDir; # return directory with TIFF-like header return GetByteOrder() . Set16u($magic) . Set32u(8) . $newDir; } if ($$et{HTML_DUMP}) { my $tip = sprintf("Byte order: %s endian\nIdentifier: 0x%.4x\n%s offset: 0x%.4x", (GetByteOrder() eq 'II') ? 'Little' : 'Big', $magic, $dirName, $offset); $et->HDump($base, 8, "$dirName header", $tip, 0); } return ProcessExif($et, \%dirInfo, $tagTablePtr); } #------------------------------------------------------------------------------ # Write EXIF directory # Inputs: 0) ExifTool object ref, 1) source dirInfo ref, 2) tag table ref # Returns: Exif data block (may be empty if no Exif data) or undef on error # Notes: Increments ExifTool CHANGED flag for each tag changed. Also updates # TIFF_END if defined with location of end of original TIFF image. # Returns IFD data in the following order: # 1. IFD0 directory followed by its data # 2. SubIFD directory followed by its data, thumbnail and image # 3. GlobalParameters, EXIF, GPS, Interop IFD's each with their data # 4. IFD1,IFD2,... directories each followed by their data # 5. Thumbnail and/or image data for each IFD, with IFD0 image last sub WriteExif($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access to autoload this package my $origDirInfo = $dirInfo; # save original dirInfo my $dataPt = $$dirInfo{DataPt}; unless ($dataPt) { my $emptyData = ''; $dataPt = \$emptyData; } my $dataPos = $$dirInfo{DataPos} || 0; my $dirStart = $$dirInfo{DirStart} || 0; my $dataLen = $$dirInfo{DataLen} || length($$dataPt); my $dirLen = $$dirInfo{DirLen} || ($dataLen - $dirStart); my $base = $$dirInfo{Base} || 0; my $firstBase = $base; my $raf = $$dirInfo{RAF}; my $dirName = $$dirInfo{DirName} || 'unknown'; my $fixup = $$dirInfo{Fixup} || new Image::ExifTool::Fixup; my $imageDataFlag = $$dirInfo{ImageData} || ''; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my ($nextIfdPos, %offsetData, $inMakerNotes); my (@offsetInfo, %xDelete, $strEnc); my $deleteAll = 0; my $newData = ''; # initialize buffer to receive new directory data my @imageData; # image data blocks to copy later if requested my $name = $$dirInfo{Name}; $name = $dirName unless $name and $dirName eq 'MakerNotes' and $name !~ /^MakerNote/; # set encoding for strings $strEnc = $et->Options('CharsetEXIF') if $$tagTablePtr{GROUPS}{0} eq 'EXIF'; # allow multiple IFD's in IFD0-IFD1-IFD2... chain $$dirInfo{Multi} = 1 if $dirName =~ /^(IFD0|SubIFD)$/ and not defined $$dirInfo{Multi}; $inMakerNotes = 1 if $$tagTablePtr{GROUPS}{0} eq 'MakerNotes'; my $ifd; #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # loop through each IFD # for ($ifd=0; ; ++$ifd) { # loop through multiple IFD's # save pointer to start of this IFD within the newData my $newStart = length($newData); my @subdirs; # list of subdirectory data and tag table pointers # determine if directory is contained within our data my $mustRead; if ($dirStart < 0 or $dirStart > $dataLen-2) { $mustRead = 1; } elsif ($dirLen > 2) { my $len = 2 + 12 * Get16u($dataPt, $dirStart); $mustRead = 1 if $dirStart + $len > $dataLen; } # read IFD from file if necessary if ($mustRead) { if ($raf) { # read the count of entries in this IFD my $offset = $dirStart + $dataPos; my ($buff, $buf2); unless ($raf->Seek($offset + $base, 0) and $raf->Read($buff,2) == 2) { return ExifErr($et, "Bad IFD or truncated file in $name", $tagTablePtr); } my $len = 12 * Get16u(\$buff,0); # (also read next IFD pointer if available) unless ($raf->Read($buf2, $len+4) >= $len) { return ExifErr($et, "Error reading $name", $tagTablePtr); } $buff .= $buf2; # make copy of dirInfo since we're going to modify it my %newDirInfo = %$dirInfo; $dirInfo = \%newDirInfo; # update directory parameters for the newly loaded IFD $dataPt = $$dirInfo{DataPt} = \$buff; $dirStart = $$dirInfo{DirStart} = 0; $dataPos = $$dirInfo{DataPos} = $offset; $dataLen = $$dirInfo{DataLen} = length $buff; $dirLen = $$dirInfo{DirLen} = $dataLen; # only account for nextIFD pointer if we are going to use it $len += 4 if $dataLen==$len+6 and ($$dirInfo{Multi} or $buff =~ /\0{4}$/); UpdateTiffEnd($et, $offset+$base+2+$len); } elsif ($dirLen) { # error if we can't load IFD (unless we are creating # from scratch, in which case dirLen will be zero) my $str = $et->Options('IgnoreMinorErrors') ? 'Deleted bad' : 'Bad'; $et->Error("$str $name directory", 1); } } my ($index, $dirEnd, $numEntries); if ($dirStart + 4 < $dataLen) { $numEntries = Get16u($dataPt, $dirStart); $dirEnd = $dirStart + 2 + 12 * $numEntries; if ($dirEnd > $dataLen) { return ExifErr($et, "Truncated $name directory", $tagTablePtr); } # sort entries if necessary (but not in maker notes IFDs) unless ($inMakerNotes) { my $lastID = -1; for ($index=0; $index<$numEntries; ++$index) { my $tagID = Get16u($dataPt, $dirStart + 2 + 12 * $index); # check for proper sequence (but ignore null entries at end) if ($tagID < $lastID and ($tagID or $$tagTablePtr{0})) { SortIFD($dataPt, $dirStart, $numEntries, $$tagTablePtr{0}); $et->Warn("Entries in $name were out of sequence. Fixed.",1); last; } $lastID = $tagID; } } } else { $numEntries = 0; $dirEnd = $dirStart; } # loop through new values and accumulate all information for this IFD my (%set, %mayDelete, $tagInfo); my $wrongDir = $crossDelete{$dirName}; foreach $tagInfo ($et->GetNewTagInfoList($tagTablePtr)) { my $tagID = $$tagInfo{TagID}; # evaluate conditional lists now if necessary if (ref $$tagTablePtr{$tagID} eq 'ARRAY' or $$tagInfo{Condition}) { my $curInfo = $et->GetTagInfo($tagTablePtr, $tagID); if (defined $curInfo and not $curInfo) { # need value to evaluate the condition my $val = $et->GetNewValue($tagInfo); # must convert to binary for evaluating in Condition if ($$tagInfo{Format} and defined $val) { $val = WriteValue($val, $$tagInfo{Format}, $$tagInfo{Count}); } if (defined $val) { my $fmt = $$tagInfo{Writable} || $$tagInfo{Format} || 'undef'; my $cnt = $$tagInfo{Count} || 1; # always use old format/count for Condition in maker notes if ($inMakerNotes) { for ($index=0; $index<$numEntries; ++$index) { my $entry = $dirStart + 2 + 12 * $index; my $id = Get16u($dataPt, $entry); if ($id eq $tagID) { my $f = Get16u($dataPt, $entry + 2); if ($formatName[$f]) { $fmt = $formatName[$f]; $cnt = Get32u($dataPt, $entry + 4); } last; } } } $curInfo = $et->GetTagInfo($tagTablePtr, $tagID, \$val, $fmt, $cnt); } else { # may want to delete this, but we need to see the value first $mayDelete{$tagID} = 1; } } # don't set this tag unless valid for the current condition next unless defined $curInfo and $curInfo eq $tagInfo; } if ($$tagInfo{WriteCondition}) { my $self = $et; # set $self to be used in eval #### eval WriteCondition ($self) unless (eval $$tagInfo{WriteCondition}) { $@ and warn $@; next; } } my $nvHash = $et->GetNewValueHash($tagInfo, $dirName); unless ($nvHash) { next unless $wrongDir; # delete stuff from the wrong directory if setting somewhere else $nvHash = $et->GetNewValueHash($tagInfo, $wrongDir); # don't cross delete if not overwriting next unless $et->IsOverwriting($nvHash); # don't cross delete if specifically deleting from the other directory # (Note: don't call GetValue() here because it shouldn't be called # if IsOverwriting returns < 0 -- eg. when shifting) next if not defined $$nvHash{Value} and $$nvHash{WantGroup} and lc($$nvHash{WantGroup}) eq lc($wrongDir); # remove this tag if found in this IFD $xDelete{$tagID} = 1; } if ($set{$tagID}) { # this tag is being set twice, which can happen if two Condition's # were true for this tag. Hopefully the only case where this can # happen is the MakerNotes tag since it may store two very different # types of information (MakerNotes and PreviewImage), but we want # to store the MakerNotes if both are available if ($tagID == 0x927c and $dirName =~ /^(ExifIFD|IFD0)$/) { next if $$tagInfo{Name} eq 'PreviewImage'; } else { $et->Warn(sprintf("Multiple new values for $name tag 0x%.4x",$tagID)); } } $set{$tagID} = $tagInfo; } # fix base offsets (some cameras incorrectly write maker notes in IFD0) if ($dirName eq 'MakerNotes' and $$dirInfo{Parent} =~ /^(ExifIFD|IFD0)$/ and $$et{TIFF_TYPE} !~ /^(ARW|SR2)$/ and not $$et{LeicaTrailerPos} and Image::ExifTool::MakerNotes::FixBase($et, $dirInfo)) { # update local variables from fixed values $base = $$dirInfo{Base}; $dataPos = $$dirInfo{DataPos}; } # initialize variables to handle mandatory tags my $mandatory = $mandatory{$dirName}; my ($allMandatory, $addMandatory); if ($mandatory) { # use X/Y resolution values from JFIF if available if ($dirName eq 'IFD0' and defined $$et{JFIFYResolution}) { my %ifd0Vals = %$mandatory; $ifd0Vals{0x011a} = $$et{JFIFXResolution}; $ifd0Vals{0x011b} = $$et{JFIFYResolution}; $ifd0Vals{0x0128} = $$et{JFIFResolutionUnit} + 1; $mandatory = \%ifd0Vals; } $allMandatory = $addMandatory = 0; # initialize to zero # add mandatory tags if creating a new directory unless ($numEntries) { foreach (keys %$mandatory) { $set{$_} or $set{$_} = $$tagTablePtr{$_}; } } } else { undef $deleteAll; # don't remove directory (no mandatory entries) } my ($addDirs, @newTags); if ($inMakerNotes) { $addDirs = { }; # can't currently add new directories in MakerNotes # allow non-permanent makernotes tags to be added # (note: we may get into trouble if there are too many of these # because we allow out-of-order tags in MakerNote IFD's but our # logic to add new tags relies on ordered entries) foreach (keys %set) { my $perm = $set{$_}{Permanent}; push @newTags, $_ if defined $perm and not $perm; } @newTags = sort { $a <=> $b } @newTags if @newTags > 1; } else { # get a hash of directories we will be writing in this one $addDirs = $et->GetAddDirHash($tagTablePtr, $dirName); # make a union of tags & dirs (can set whole dirs, like MakerNotes) my %allTags = ( %set, %$addDirs ); # make sorted list of new tags to be added @newTags = sort { $a <=> $b } keys(%allTags); } my $dirBuff = ''; # buffer for directory data my $valBuff = ''; # buffer for value data my @valFixups; # list of fixups for offsets in valBuff # fixup for offsets in dirBuff my $dirFixup = new Image::ExifTool::Fixup; my $entryBasedFixup; my $lastTagID = -1; my ($oldInfo, $oldFormat, $oldFormName, $oldCount, $oldSize, $oldValue, $oldImageData); my ($readFormat, $readFormName, $readCount); # format for reading old value(s) my ($entry, $valueDataPt, $valueDataPos, $valueDataLen, $valuePtr, $valEnd); my ($offList, $offHash, $ignoreCount, $fixCount); my $oldID = -1; my $newID = -1; # patch for Canon EOS 40D firmware 1.0.4 bug (incorrect directory counts) if ($inMakerNotes and $$et{Model} eq 'Canon EOS 40D') { my $fmt = Get16u($dataPt, $dirStart + 2 + 12 * ($numEntries - 1) + 2); if ($fmt < 1 or $fmt > 13) { # adjust the number of directory entries --$numEntries; $dirEnd -= 12; $ignoreCount = 1; } } #.............................................................................. # loop through entries in new directory # $index = 0; Entry: for (;;) { if (defined $oldID and $oldID == $newID) { # # read next entry from existing directory # if ($index < $numEntries) { $entry = $dirStart + 2 + 12 * $index; $oldID = Get16u($dataPt, $entry); $readFormat = $oldFormat = Get16u($dataPt, $entry+2); $readCount = $oldCount = Get32u($dataPt, $entry+4); undef $oldImageData; if ($oldFormat < 1 or $oldFormat > 13) { my $msg = "Bad format ($oldFormat) for $name entry $index"; # patch to preserve invalid directory entries in SubIFD3 of # various Kodak Z-series cameras (Z812, Z1085IS, Z1275) # and some Sony cameras such as the DSC-P10 if ($dirName eq 'MakerNotes' and (($$et{Make}=~/KODAK/i and $$dirInfo{Name} and $$dirInfo{Name} eq 'SubIFD3') or ($numEntries == 12 and $$et{Make} eq 'SONY' and $index >= 8))) { $dirBuff .= substr($$dataPt, $entry, 12); ++$index; $newID = $oldID; # we wrote this $et->Warn($msg, 1); next; } # don't write out null directory entry if ($oldFormat==0 and $index and $oldCount==0) { $ignoreCount = ($ignoreCount || 0) + 1; # must keep same directory size to avoid messing up our fixed offsets $dirBuff .= ("\0" x 12) if $$dirInfo{FixBase}; ++$index; $newID = $oldID; # pretend we wrote this next; } return ExifErr($et, $msg, $tagTablePtr); } $readFormName = $oldFormName = $formatName[$oldFormat]; $valueDataPt = $dataPt; $valueDataPos = $dataPos; $valueDataLen = $dataLen; $valuePtr = $entry + 8; # try direct method first for speed $oldInfo = $$tagTablePtr{$oldID}; if (ref $oldInfo ne 'HASH' or $$oldInfo{Condition}) { # must get unknown tags too # (necessary so we don't miss a tag we want to Drop) my $unk = $et->Options(Unknown => 1); $oldInfo = $et->GetTagInfo($tagTablePtr, $oldID); $et->Options(Unknown => $unk); } # patch incorrect count in Kodak SubIFD3 tags if ($oldCount < 2 and $oldInfo and $$oldInfo{FixCount}) { $offList or ($offList, $offHash) = GetOffList($dataPt, $dirStart, $dataPos, $numEntries, $tagTablePtr); my $i = $$offHash{Get32u($dataPt, $valuePtr)}; if (defined $i and $i < $#$offList) { $oldCount = int(($$offList[$i+1] - $$offList[$i]) / $formatSize[$oldFormat]); $fixCount = ($fixCount || 0) + 1 if $oldCount != $readCount; } } $oldSize = $oldCount * $formatSize[$oldFormat]; my $readFromFile; if ($oldSize > 4) { $valuePtr = Get32u($dataPt, $valuePtr); # fix valuePtr if necessary if ($$dirInfo{FixOffsets}) { $valEnd or $valEnd = $dataPos + $dirStart + 2 + 12 * $numEntries + 4; my ($tagID, $size, $wFlag) = ($oldID, $oldSize, 1); #### eval FixOffsets ($valuePtr, $valEnd, $size, $tagID, $wFlag) eval $$dirInfo{FixOffsets}; unless (defined $valuePtr) { unless ($$et{DROP_TAGS}) { my $tagStr = $oldInfo ? $$oldInfo{Name} : sprintf("tag 0x%.4x",$oldID); return undef if $et->Error("Bad $name offset for $tagStr", $inMakerNotes); } ++$index; $oldID = $newID; next; # drop this tag } } # offset shouldn't point into TIFF or IFD header my $suspect = ($valuePtr < 8); # convert offset to pointer in $$dataPt if ($$dirInfo{EntryBased} or (ref $$tagTablePtr{$oldID} eq 'HASH' and $$tagTablePtr{$oldID}{EntryBased})) { $valuePtr += $entry; } else { $valuePtr -= $dataPos; } # value shouldn't overlap our directory $suspect = 1 if $valuePtr < $dirEnd and $valuePtr+$oldSize > $dirStart; # get value by seeking in file if we are allowed if ($valuePtr < 0 or $valuePtr+$oldSize > $dataLen) { my ($pos, $tagStr, $invalidPreview, $tmpInfo, $leicaTrailer); if ($oldInfo) { $tagStr = $$oldInfo{Name}; $leicaTrailer = $$oldInfo{LeicaTrailer}; } elsif (defined $oldInfo) { $tmpInfo = $et->GetTagInfo($tagTablePtr, $oldID, \ '', $oldFormName, $oldCount); if ($tmpInfo) { $tagStr = $$tmpInfo{Name}; $leicaTrailer = $$tmpInfo{LeicaTrailer}; } } $tagStr or $tagStr = sprintf("tag 0x%.4x",$oldID); # allow PreviewImage to run outside EXIF segment in JPEG images if (not $raf) { if ($tagStr eq 'PreviewImage') { $raf = $$et{RAF}; if ($raf) { $pos = $raf->Tell(); if ($oldInfo and $$oldInfo{ChangeBase}) { # adjust base offset for this tag only #### eval ChangeBase ($dirStart,$dataPos) my $newBase = eval $$oldInfo{ChangeBase}; $valuePtr += $newBase; } } else { $invalidPreview = 1; } } elsif ($leicaTrailer) { # save information about Leica makernote trailer $$et{LeicaTrailer} = { TagInfo => $oldInfo || $tmpInfo, Offset => $base + $valuePtr + $dataPos, Size => $oldSize, Fixup => new Image::ExifTool::Fixup, }, $invalidPreview = 2; # remove SubDirectory to prevent processing (for now) my %copy = %{$oldInfo || $tmpInfo}; delete $copy{SubDirectory}; delete $copy{MakerNotes}; $oldInfo = \%copy; } } if ($oldSize > BINARY_DATA_LIMIT and $$origDirInfo{ImageData} and (not defined $oldInfo or ($oldInfo and not $$oldInfo{SubDirectory}))) { # copy huge data blocks later instead of loading into memory $oldValue = ''; # dummy empty value # copy this value later unless writing a new value unless ($set{$oldID}) { my $pad = $oldSize & 0x01 ? 1 : 0; # save block information to copy later (set directory offset later) $oldImageData = [$base+$valuePtr+$dataPos, $oldSize, $pad]; } } elsif ($raf) { my $success = ($raf->Seek($base+$valuePtr+$dataPos, 0) and $raf->Read($oldValue, $oldSize) == $oldSize); if (defined $pos) { $raf->Seek($pos, 0); undef $raf; # (sony A700 has 32-byte header on PreviewImage) unless ($success and $oldValue =~ /^(\xff\xd8\xff|(.|.{33})\xd8\xff\xdb)/s) { $invalidPreview = 1; $success = 1; # continue writing directory anyway } } unless ($success) { return undef if $et->Error("Error reading value for $name entry $index", $inMakerNotes); ++$index; $oldID = $newID; next; # drop this tag } } elsif (not $invalidPreview) { return undef if $et->Error("Bad $name offset for $tagStr", $inMakerNotes); ++$index; $oldID = $newID; next; # drop this tag } if ($invalidPreview) { # set value for invalid preview if ($$et{FILE_TYPE} eq 'JPEG') { # define dummy value for preview (or Leica MakerNote) to write later # (value must be larger than 4 bytes to generate PREVIEW_INFO, # and an even number of bytes so it won't be padded) $oldValue = 'LOAD_PREVIEW'; } else { $oldValue = 'none'; $oldSize = length $oldValue; } $valuePtr = 0; } else { UpdateTiffEnd($et, $base+$valuePtr+$dataPos+$oldSize); } # update pointers for value just read from file $valueDataPt = \$oldValue; $valueDataPos = $valuePtr + $dataPos; $valueDataLen = $oldSize; $valuePtr = 0; $readFromFile = 1; } if ($suspect) { my $tagStr = $oldInfo ? $$oldInfo{Name} : sprintf('tag 0x%.4x', $oldID); my $str = "Suspicious $name offset for $tagStr"; if ($inMakerNotes) { $et->Warn($str, 1); } else { return undef if $et->Error($str, 1); } } } # read value if we haven't already $oldValue = substr($$valueDataPt, $valuePtr, $oldSize) unless $readFromFile; # get tagInfo using value if necessary if (defined $oldInfo and not $oldInfo) { my $unk = $et->Options(Unknown => 1); $oldInfo = $et->GetTagInfo($tagTablePtr, $oldID, \$oldValue, $oldFormName, $oldCount); $et->Options(Unknown => $unk); # now that we have the value, we can resolve the Condition to finally # determine whether we want to delete this tag or not if ($mayDelete{$oldID} and $oldInfo and (not @newTags or $newTags[0] != $oldID)) { my $nvHash = $et->GetNewValueHash($oldInfo, $dirName); if (not $nvHash and $wrongDir) { # delete from wrong directory if necessary $nvHash = $et->GetNewValueHash($oldInfo, $wrongDir); $nvHash and $xDelete{$oldID} = 1; } if ($nvHash) { # we want to delete this tag after all, so insert it into our list $set{$oldID} = $oldInfo; unshift @newTags, $oldID; } } } # make sure we are handling the 'ifd' format properly if (($oldFormat == 13 or $oldFormat == 18) and (not $oldInfo or not $$oldInfo{SubIFD})) { my $str = sprintf('%s tag 0x%.4x IFD format not handled', $name, $oldID); $et->Error($str, $inMakerNotes); } # override format we use to read the value if specified if ($oldInfo) { # check for tags which must be integers if (($$oldInfo{IsOffset} or $$oldInfo{SubIFD}) and not $intFormat{$oldFormName}) { $et->Error("Invalid format ($oldFormName) for $name $$oldInfo{Name}", $inMakerNotes); ++$index; $oldID = $newID; next; # drop this tag } if ($$oldInfo{Drop} and $$et{DROP_TAGS} and ($$oldInfo{Drop} == 1 or $$oldInfo{Drop} < $oldSize)) { ++$index; $oldID = $newID; next; # drop this tag } if ($$oldInfo{Format}) { $readFormName = $$oldInfo{Format}; $readFormat = $formatNumber{$readFormName}; unless ($readFormat) { # we aren't reading in a standard EXIF format, so rewrite in old format $readFormName = $oldFormName; $readFormat = $oldFormat; } # adjust number of items to read if format size changed $readCount = $oldSize / $formatSize[$readFormat]; } } if ($oldID <= $lastTagID and not $inMakerNotes) { my $str = $oldInfo ? "$$oldInfo{Name} tag" : sprintf('tag 0x%x',$oldID); if ($oldID == $lastTagID) { $et->Warn("Duplicate $str in $name");; } else { $et->Warn("\u$str out of sequence in $name"); } } $lastTagID = $oldID; ++$index; # increment index for next time } else { undef $oldID; # no more existing entries } } # # write out all new tags, up to and including this one # $newID = $newTags[0]; my $isNew; # -1=tag is old, 0=tag same as existing, 1=tag is new if (not defined $oldID) { last unless defined $newID; $isNew = 1; } elsif (not defined $newID) { # maker notes will have no new tags defined if ($set{$oldID}) { $newID = $oldID; $isNew = 0; } else { $isNew = -1; } } else { $isNew = $oldID <=> $newID; } my $newInfo = $oldInfo; my $newFormat = $oldFormat; my $newFormName = $oldFormName; my $newCount = $oldCount; my $ifdFormName; my $newValue; my $newValuePt = $isNew >= 0 ? \$newValue : \$oldValue; my $isOverwriting; if ($isNew >= 0) { # add, edit or delete this tag shift @newTags; # remove from list if ($set{$newID}) { # # set the new tag value (or 'next' if deleting tag) # $newInfo = $set{$newID}; $newCount = $$newInfo{Count}; my ($val, $newVal, $n); my $nvHash = $et->GetNewValueHash($newInfo, $dirName); if ($isNew > 0) { # don't create new entry unless requested if ($nvHash) { next unless $$nvHash{IsCreating}; if ($$newInfo{IsOverwriting}) { my $proc = $$newInfo{IsOverwriting}; $isOverwriting = &$proc($et, $nvHash, $val, \$newVal); } else { $isOverwriting = $et->IsOverwriting($nvHash); } } else { next if $xDelete{$newID}; # don't create if cross deleting $newVal = $$mandatory{$newID}; # get value for mandatory tag $isOverwriting = 1; } # convert using new format if ($$newInfo{Format}) { $newFormName = $$newInfo{Format}; # use Writable flag to specify IFD format code $ifdFormName = $$newInfo{Writable}; } else { $newFormName = $$newInfo{Writable}; unless ($newFormName) { warn("No format for $name $$newInfo{Name}\n"); next; } } $newFormat = $formatNumber{$newFormName}; } elsif ($nvHash or $xDelete{$newID}) { unless ($nvHash) { $nvHash = $et->GetNewValueHash($newInfo, $wrongDir); } # read value if (length $oldValue >= $oldSize) { $val = ReadValue(\$oldValue, 0, $readFormName, $readCount, $oldSize); } else { $val = ''; } # determine write format (by default, use 'Writable' format) my $writable = $$newInfo{Writable}; # (or use existing format if 'Writable' not specified) $writable = $oldFormName unless $writable and $writable ne '1'; # (and override write format with 'Format' if specified) my $writeForm = $$newInfo{Format} || $writable; if ($writeForm ne $newFormName) { # write in specified format $newFormName = $writeForm; $newFormat = $formatNumber{$newFormName}; # use different IFD format code if necessary if ($inMakerNotes) { # always preserve IFD format in maker notes $ifdFormName = $oldFormName; } elsif ($writable ne $newFormName) { # use specified IFD format $ifdFormName = $writable; } } if ($inMakerNotes and $readFormName ne 'string' and $readFormName ne 'undef') { # keep same size in maker notes unless string or binary $newCount = $oldCount * $formatSize[$oldFormat] / $formatSize[$newFormat]; } if ($$newInfo{IsOverwriting}) { my $proc = $$newInfo{IsOverwriting}; $isOverwriting = &$proc($et, $nvHash, $val, \$newVal); } else { $isOverwriting = $et->IsOverwriting($nvHash, $val); } } if ($isOverwriting) { $newVal = $et->GetNewValue($nvHash) unless defined $newVal; # value undefined if deleting this tag # (also delete tag if cross-deleting and this isn't a date/time shift) if (not defined $newVal or ($xDelete{$newID} and not defined $$nvHash{Shift})) { if ($$newInfo{RawConvInv} and defined $$nvHash{Value}) { # error in RawConvInv, so rewrite existing tag goto NoOverwrite; # GOTO! } unless ($isNew) { ++$$et{CHANGED}; $et->VerboseValue("- $dirName:$$newInfo{Name}", $val); } next; } if ($newCount and $newCount < 0) { # set count to number of values if variable my @vals = split ' ',$newVal; $newCount = @vals; } # convert to binary format $newValue = WriteValue($newVal, $newFormName, $newCount); unless (defined $newValue) { $et->Warn("Invalid value for $dirName:$$newInfo{Name}"); goto NoOverwrite; # GOTO! } if (length $newValue) { # limit maximum value length in JPEG images # (max segment size is 65533 bytes and the min EXIF size is 96 incl an additional IFD entry) if ($$et{FILE_TYPE} eq 'JPEG' and length($newValue) > 65436 and $$newInfo{Name} ne 'PreviewImage') { my $name = $$newInfo{MakerNotes} ? 'MakerNotes' : $$newInfo{Name}; $et->Warn("$name too large to write in JPEG segment"); goto NoOverwrite; # GOTO! } # re-code if necessary if ($strEnc and $newFormName eq 'string') { $newValue = $et->Encode($newValue, $strEnc); } } else { $et->Warn("Can't write zero length $$newInfo{Name} in $$tagTablePtr{GROUPS}{1}"); goto NoOverwrite; # GOTO! } if ($isNew >= 0) { $newCount = length($newValue) / $formatSize[$newFormat]; ++$$et{CHANGED}; if (defined $allMandatory) { # not all mandatory if we are writing any tag specifically if ($nvHash) { undef $allMandatory; undef $deleteAll; } else { ++$addMandatory; # count mandatory tags that we added } } if ($verbose > 1) { $et->VerboseValue("- $dirName:$$newInfo{Name}", $val) unless $isNew; my $str = $nvHash ? '' : ' (mandatory)'; $et->VerboseValue("+ $dirName:$$newInfo{Name}", $newVal, $str); } } } else { NoOverwrite: next if $isNew > 0; $isNew = -1; # rewrite existing tag } # set format for EXIF IFD if different than conversion format if ($ifdFormName) { $newFormName = $ifdFormName; $newFormat = $formatNumber{$newFormName}; } } elsif ($isNew > 0) { # # create new subdirectory # # newInfo may not be defined if we try to add a mandatory tag # to a directory that doesn't support it (eg. IFD1 in RW2 images) $newInfo = $$addDirs{$newID} or next; # make sure we don't try to generate a new MakerNotes directory # or a SubIFD next if $$newInfo{MakerNotes} or $$newInfo{Name} eq 'SubIFD'; my $subTable; if ($$newInfo{SubDirectory}{TagTable}) { $subTable = Image::ExifTool::GetTagTable($$newInfo{SubDirectory}{TagTable}); } else { $subTable = $tagTablePtr; } # create empty source directory my %sourceDir = ( Parent => $dirName, Fixup => new Image::ExifTool::Fixup, ); $sourceDir{DirName} = $$newInfo{Groups}{1} if $$newInfo{SubIFD}; $newValue = $et->WriteDirectory(\%sourceDir, $subTable); # only add new directory if it isn't empty next unless defined $newValue and length($newValue); # set the fixup start location if ($$newInfo{SubIFD}) { # subdirectory is referenced by an offset in value buffer my $subdir = $newValue; $newValue = Set32u(0xfeedf00d); push @subdirs, { DataPt => \$subdir, Table => $subTable, Fixup => $sourceDir{Fixup}, Offset => length($dirBuff) + 8, Where => 'dirBuff', }; $newFormName = 'int32u'; $newFormat = $formatNumber{$newFormName}; } else { # subdirectory goes directly into value buffer $sourceDir{Fixup}{Start} += length($valBuff); # use Writable to set format, otherwise 'undef' $newFormName = $$newInfo{Writable}; unless ($newFormName and $formatNumber{$newFormName}) { $newFormName = 'undef'; } $newFormat = $formatNumber{$newFormName}; push @valFixups, $sourceDir{Fixup}; } } elsif ($$newInfo{Format} and $$newInfo{Writable} and $$newInfo{Writable} ne '1') { # use specified write format $newFormName = $$newInfo{Writable}; $newFormat = $formatNumber{$newFormName}; } elsif ($$addDirs{$newID} and $newInfo ne $$addDirs{$newID}) { # this can happen if we are trying to add a directory that doesn't exist # in this type of file (eg. try adding a SubIFD tag to an A100 image) $isNew = -1; } } if ($isNew < 0) { # just rewrite existing tag $newID = $oldID; $newValue = $oldValue; $newFormat = $oldFormat; # (just in case it changed) $newFormName = $oldFormName; # set offset of this entry in the directory so we can update the pointer # and save block information to copy this large block later if ($oldImageData) { $$oldImageData[3] = $newStart + length($dirBuff) + 2; push @imageData, $oldImageData; $$origDirInfo{ImageData} = \@imageData; } } if ($newInfo) { # # load necessary data for this tag (thumbnail image, etc) # if ($$newInfo{DataTag} and $isNew >= 0) { my $dataTag = $$newInfo{DataTag}; # load data for this tag unless (defined $offsetData{$dataTag} or $dataTag eq 'LeicaTrailer') { # prefer tag from Composite table if it exists (otherwise # PreviewImage data would be taken from Extra tag) my $compInfo = $Image::ExifTool::Composite{$dataTag}; $offsetData{$dataTag} = $et->GetNewValue($compInfo || $dataTag); my $err; if (defined $offsetData{$dataTag}) { my $len = length $offsetData{$dataTag}; if ($dataTag eq 'PreviewImage') { # must set DEL_PREVIEW flag now if preview fit into IFD $$et{DEL_PREVIEW} = 1 if $len <= 4; } elsif ($$et{FILE_TYPE} eq 'JPEG' and $len > 60000) { delete $offsetData{$dataTag}; $err = "$dataTag not written (too large for JPEG segment)"; } } else { $err = "$dataTag not found"; } if ($err) { $et->Warn($err) if $$newInfo{IsOffset}; delete $set{$newID}; # remove from list of tags we are setting next; } } } # # write maker notes # if ($$newInfo{MakerNotes}) { # don't write new makernotes if we are deleting this group if ($$et{DEL_GROUP}{MakerNotes} and ($$et{DEL_GROUP}{MakerNotes} != 2 or $isNew <= 0)) { if ($isNew <= 0) { ++$$et{CHANGED}; $verbose and print $out " Deleting MakerNotes\n"; } next; } my $saveOrder = GetByteOrder(); if ($isNew >= 0 and $set{$newID}) { # we are writing a whole new maker note block # --> add fixup information if necessary my $nvHash = $et->GetNewValueHash($newInfo, $dirName); if ($nvHash and $$nvHash{MAKER_NOTE_FIXUP}) { # must clone fixup because we will be shifting it my $makerFixup = $$nvHash{MAKER_NOTE_FIXUP}->Clone(); my $valLen = length($valBuff); $$makerFixup{Start} += $valLen; push @valFixups, $makerFixup; } } else { # update maker notes if possible my %subdirInfo = ( Base => $base, DataPt => $valueDataPt, DataPos => $valueDataPos, DataLen => $valueDataLen, DirStart => $valuePtr, DirLen => $oldSize, DirName => 'MakerNotes', Name => $$newInfo{Name}, Parent => $dirName, TagInfo => $newInfo, RAF => $raf, ); my ($subTable, $subdir, $loc, $writeProc, $notIFD); if ($$newInfo{SubDirectory}) { my $sub = $$newInfo{SubDirectory}; $subdirInfo{FixBase} = 1 if $$sub{FixBase}; $subdirInfo{FixOffsets} = $$sub{FixOffsets}; $subdirInfo{EntryBased} = $$sub{EntryBased}; $subdirInfo{NoFixBase} = 1 if defined $$sub{Base}; $subdirInfo{AutoFix} = $$sub{AutoFix}; } # get the proper tag table for these maker notes if ($oldInfo and $$oldInfo{SubDirectory}) { $subTable = $$oldInfo{SubDirectory}{TagTable}; $subTable and $subTable = Image::ExifTool::GetTagTable($subTable); $writeProc = $$oldInfo{SubDirectory}{WriteProc}; $notIFD = $$oldInfo{NotIFD}; } else { $et->Warn('Internal problem getting maker notes tag table'); } $writeProc or $writeProc = $$subTable{WRITE_PROC} if $subTable; $subTable or $subTable = $tagTablePtr; if ($writeProc and $writeProc eq \&Image::ExifTool::MakerNotes::WriteUnknownOrPreview and $oldValue =~ /^\xff\xd8\xff/) { $loc = 0; } elsif (not $notIFD) { # look for IFD-style maker notes $loc = Image::ExifTool::MakerNotes::LocateIFD($et,\%subdirInfo); } if (defined $loc) { # we need fixup data for this subdirectory $subdirInfo{Fixup} = new Image::ExifTool::Fixup; # rewrite maker notes my $changed = $$et{CHANGED}; $subdir = $et->WriteDirectory(\%subdirInfo, $subTable, $writeProc); if ($changed == $$et{CHANGED} and $subdirInfo{Fixup}->IsEmpty()) { # return original data if nothing changed and no fixups undef $subdir; } } elsif ($$subTable{PROCESS_PROC} and $$subTable{PROCESS_PROC} eq \&Image::ExifTool::ProcessBinaryData) { my $sub = $$oldInfo{SubDirectory}; if (defined $$sub{Start}) { #### eval Start ($valuePtr) my $start = eval $$sub{Start}; $loc = $start - $valuePtr; $subdirInfo{DirStart} = $start; $subdirInfo{DirLen} -= $loc; } else { $loc = 0; } # rewrite maker notes $subdir = $et->WriteDirectory(\%subdirInfo, $subTable); } elsif ($notIFD) { if ($writeProc) { $loc = 0; $subdir = $et->WriteDirectory(\%subdirInfo, $subTable); } } else { my $msg = 'Maker notes could not be parsed'; if ($$et{FILE_TYPE} eq 'JPEG') { $et->Warn($msg, 1); } else { $et->Error($msg, 1); } } if (defined $subdir) { next unless length $subdir; my $valLen = length($valBuff); # restore existing header and substitute the new # maker notes for the old value $newValue = substr($oldValue, 0, $loc) . $subdir; my $makerFixup = $subdirInfo{Fixup}; my $previewInfo = $$et{PREVIEW_INFO}; if ($subdirInfo{Relative}) { # apply a one-time fixup to $loc since offsets are relative $$makerFixup{Start} += $loc; # shift all offsets to be relative to new base my $baseShift = $valueDataPos + $valuePtr + $base - $subdirInfo{Base}; $$makerFixup{Shift} += $baseShift; $makerFixup->ApplyFixup(\$newValue); if ($previewInfo) { # remove all but PreviewImage fixup (since others shouldn't change) foreach (keys %{$$makerFixup{Pointers}}) { /_PreviewImage$/ or delete $$makerFixup{Pointers}{$_}; } # zero pointer so we can see how it gets shifted later $makerFixup->SetMarkerPointers(\$newValue, 'PreviewImage', 0); # set the pointer to the start of the EXIF information # add preview image fixup to list of value fixups $$makerFixup{Start} += $valLen; push @valFixups, $makerFixup; $$previewInfo{BaseShift} = $baseShift; $$previewInfo{Relative} = 1; } # don't shift anything if relative flag set to zero (Pentax patch) } elsif (not defined $subdirInfo{Relative}) { # shift offset base if shifted in the original image or if FixBase # was used, but be careful of automatic FixBase with negative shifts # since they may lead to negative (invalid) offsets (casio_edit_problem.jpg) my $baseShift = $base - $subdirInfo{Base}; if ($subdirInfo{AutoFix}) { $baseShift = 0; } elsif ($subdirInfo{FixBase} and $baseShift < 0 and # allow negative base shift if offsets are bigger (PentaxOptioWP.jpg) (not $subdirInfo{MinOffset} or $subdirInfo{MinOffset} + $baseShift < 0)) { my $fixBase = $et->Options('FixBase'); if (not defined $fixBase) { my $str = $et->Options('IgnoreMinorErrors') ? 'ignored' : 'fix or ignore?'; $et->Error("MakerNotes offsets may be incorrect ($str)", 1); } elsif ($fixBase eq '') { $et->Warn('Fixed incorrect MakerNotes offsets'); $baseShift = 0; } } $$makerFixup{Start} += $valLen + $loc; $$makerFixup{Shift} += $baseShift; # permanently fix makernote offset errors $$makerFixup{Shift} += $subdirInfo{FixedBy} || 0; push @valFixups, $makerFixup; if ($previewInfo and not $$previewInfo{NoBaseShift}) { $$previewInfo{BaseShift} = $baseShift; } } $newValuePt = \$newValue; # write new value } } SetByteOrder($saveOrder); # process existing subdirectory unless we are overwriting it entirely } elsif ($$newInfo{SubDirectory} and $isNew <= 0 and not $isOverwriting # don't edit directory if Writable is set to 0 and (not defined $$newInfo{Writable} or $$newInfo{Writable})) { my $subdir = $$newInfo{SubDirectory}; if ($$newInfo{SubIFD}) { # # rewrite existing sub IFD's # my $subTable = $tagTablePtr; if ($$subdir{TagTable}) { $subTable = Image::ExifTool::GetTagTable($$subdir{TagTable}); } # determine directory name for this IFD my $subdirName = $$newInfo{Groups}{1} || $$newInfo{Name}; # all makernotes directory names must be 'MakerNotes' $subdirName = 'MakerNotes' if $$subTable{GROUPS}{0} eq 'MakerNotes'; # must handle sub-IFD's specially since the values # are actually offsets to subdirectories unless ($readCount) { # can't have zero count return undef if $et->Error("$name entry $index has zero count", 2); next; } my $writeCount = 0; my $i; $newValue = ''; # reset value because we regenerate it below for ($i=0; $i<$readCount; ++$i) { my $off = $i * $formatSize[$readFormat]; my $val = ReadValue($valueDataPt, $valuePtr + $off, $readFormName, 1, $oldSize - $off); my $subdirStart = $val - $dataPos; my $subdirBase = $base; my $hdrLen; if (defined $$subdir{Start}) { #### eval Start ($val) my $newStart = eval $$subdir{Start}; unless (Image::ExifTool::IsInt($newStart)) { $et->Error("Bad subdirectory start for $$newInfo{Name}"); next; } $newStart -= $dataPos; $hdrLen = $newStart - $subdirStart; $subdirStart = $newStart; } if ($$subdir{Base}) { my $start = $subdirStart + $dataPos; #### eval Base ($start,$base) $subdirBase += eval $$subdir{Base}; } # add IFD number if more than one $subdirName =~ s/\d*$/$i/ if $i; my %subdirInfo = ( Base => $subdirBase, DataPt => $dataPt, DataPos => $dataPos - $subdirBase + $base, DataLen => $dataLen, DirStart => $subdirStart, DirName => $subdirName, Name => $$newInfo{Name}, TagInfo => $newInfo, Parent => $dirName, Fixup => new Image::ExifTool::Fixup, RAF => $raf, Subdir => $subdir, # set ImageData only for 1st level SubIFD's ImageData=> $imageDataFlag eq 'Main' ? 'SubIFD' : undef, ); # pass on header pointer only for certain sub IFD's $subdirInfo{HeaderPtr} = $$dirInfo{HeaderPtr} if $$newInfo{SubIFD} == 2; if ($$subdir{RelativeBase}) { # apply one-time fixup if offsets are relative (Sony IDC hack) delete $subdirInfo{Fixup}; delete $subdirInfo{ImageData}; } # is the subdirectory outside our current data? if ($subdirStart < 0 or $subdirStart + 2 > $dataLen) { if ($raf) { # reset SubDirectory buffer (we will load it later) my $buff = ''; $subdirInfo{DataPt} = \$buff; $subdirInfo{DataLen} = 0; } else { my @err = ("Can't read $subdirName data", $inMakerNotes); if ($$subTable{VARS} and $$subTable{VARS}{MINOR_ERRORS}) { $et->Warn($err[0] . '. Ignored.'); } elsif ($et->Error(@err)) { return undef; } next Entry; # don't write this directory } } my $subdirData = $et->WriteDirectory(\%subdirInfo, $subTable, $$subdir{WriteProc}); unless (defined $subdirData) { # WriteDirectory should have issued an error, but check just in case $et->Error("Error writing $subdirName") unless $$et{VALUE}{Error}; return undef; } # add back original header if necessary (eg. Ricoh GR) if ($hdrLen and $hdrLen > 0 and $subdirStart <= $dataLen) { $subdirData = substr($$dataPt, $subdirStart - $hdrLen, $hdrLen) . $subdirData; $subdirInfo{Fixup}{Start} += $hdrLen; } unless (length $subdirData) { next unless $inMakerNotes; # don't delete MakerNote Sub-IFD's, write empty IFD instead $subdirData = "\0" x 6; # reset SubIFD ImageData and Fixup just to be safe delete $subdirInfo{ImageData}; delete $subdirInfo{Fixup}; } # handle data blocks that we will transfer later if (ref $subdirInfo{ImageData}) { push @imageData, @{$subdirInfo{ImageData}}; $$origDirInfo{ImageData} = \@imageData; } # temporarily set value to subdirectory index # (will set to actual offset later when we know what it is) $newValue .= Set32u(0xfeedf00d); my ($offset, $where); if ($readCount > 1) { $offset = length($valBuff) + $i * 4; $where = 'valBuff'; } else { $offset = length($dirBuff) + 8; $where = 'dirBuff'; } # add to list of subdirectories we will append later push @subdirs, { DataPt => \$subdirData, Table => $subTable, Fixup => $subdirInfo{Fixup}, Offset => $offset, Where => $where, ImageData => $subdirInfo{ImageData}, }; ++$writeCount; # count number of subdirs written } next unless length $newValue; # must change location of subdir offset if we deleted # a directory and only one remains if ($writeCount < $readCount and $writeCount == 1) { $subdirs[-1]{Where} = 'dirBuff'; $subdirs[-1]{Offset} = length($dirBuff) + 8; } # set new format to int32u for IFD $newFormName = $$newInfo{FixFormat} || 'int32u'; $newFormat = $formatNumber{$newFormName}; $newValuePt = \$newValue; } elsif ((not defined $$subdir{Start} or $$subdir{Start} =~ /\$valuePtr/) and $$subdir{TagTable}) { # # rewrite other existing subdirectories ('$valuePtr' type only) # # set subdirectory Start and Base my $subdirStart = $valuePtr; if ($$subdir{Start}) { #### eval Start ($valuePtr) $subdirStart = eval $$subdir{Start}; # must adjust directory size if start changed $oldSize -= $subdirStart - $valuePtr; } my $subdirBase = $base; if ($$subdir{Base}) { my $start = $subdirStart + $valueDataPos; #### eval Base ($start,$base) $subdirBase += eval $$subdir{Base}; } my $subFixup = new Image::ExifTool::Fixup; my %subdirInfo = ( Base => $subdirBase, DataPt => $valueDataPt, DataPos => $valueDataPos - $subdirBase + $base, DataLen => $valueDataLen, DirStart => $subdirStart, DirName => $$subdir{DirName}, DirLen => $oldSize, Parent => $dirName, Fixup => $subFixup, RAF => $raf, TagInfo => $newInfo, ); unless ($oldSize) { # replace with dummy data if empty to prevent WriteDirectory # routines from accessing data they shouldn't my $tmp = ''; $subdirInfo{DataPt} = \$tmp; $subdirInfo{DataLen} = 0; $subdirInfo{DirStart} = 0; $subdirInfo{DataPos} += $subdirStart; } my $subTable = Image::ExifTool::GetTagTable($$subdir{TagTable}); my $oldOrder = GetByteOrder(); SetByteOrder($$subdir{ByteOrder}) if $$subdir{ByteOrder}; $newValue = $et->WriteDirectory(\%subdirInfo, $subTable, $$subdir{WriteProc}); SetByteOrder($oldOrder); if (defined $newValue) { my $hdrLen = $subdirStart - $valuePtr; if ($hdrLen) { $newValue = substr($$valueDataPt, $valuePtr, $hdrLen) . $newValue; $$subFixup{Start} += $hdrLen; } $newValuePt = \$newValue; } else { $newValuePt = \$oldValue; } unless (length $$newValuePt) { # don't delete a previously empty makernote directory next if $oldSize or not $inMakerNotes; } if ($$subFixup{Pointers} and $subdirInfo{Base} == $base) { $$subFixup{Start} += length $valBuff; push @valFixups, $subFixup; } else { # apply fixup in case we added a header ($hdrLen above) $subFixup->ApplyFixup(\$newValue); } } } elsif ($$newInfo{OffsetPair}) { # # keep track of offsets # my $dataTag = $$newInfo{DataTag} || ''; if ($dataTag eq 'CanonVRD') { # must decide now if we will write CanonVRD information my $hasVRD; if ($$et{NEW_VALUE}{$Image::ExifTool::Extra{CanonVRD}}) { # adding or deleting as a block $hasVRD = $et->GetNewValue('CanonVRD') ? 1 : 0; } elsif ($$et{DEL_GROUP}{CanonVRD} or $$et{DEL_GROUP}{Trailer}) { $hasVRD = 0; # deleting as a group } else { $hasVRD = ($$newValuePt ne "\0\0\0\0"); } if ($hasVRD) { # add a fixup, and set this offset later $dirFixup->AddFixup(length($dirBuff) + 8, $dataTag); } else { # there is (or will soon be) no VRD information, so set pointer to zero $newValue = "\0" x length($$newValuePt); $newValuePt = \$newValue; } } elsif ($dataTag eq 'OriginalDecisionData') { # handle Canon OriginalDecisionData (no associated length tag) # - I'm going out of my way here to preserve data which is # invalidated anyway by our edits my $odd; my $oddInfo = $Image::ExifTool::Composite{OriginalDecisionData}; if ($oddInfo and $$et{NEW_VALUE}{$oddInfo}) { $odd = $et->GetNewValue($dataTag); if ($verbose > 1) { print $out " - $dirName:$dataTag\n" if $$newValuePt ne "\0\0\0\0"; print $out " + $dirName:$dataTag\n" if $odd; } ++$$et{CHANGED}; } elsif ($$newValuePt ne "\0\0\0\0") { if (length($$newValuePt) == 4) { require Image::ExifTool::Canon; my $offset = Get32u($newValuePt,0); # absolute offset in JPEG images only $offset += $base unless $$et{FILE_TYPE} eq 'JPEG'; $odd = Image::ExifTool::Canon::ReadODD($et, $offset); $odd = $$odd if ref $odd; } else { $et->Error("Invalid $$newInfo{Name}",1); } } if ($odd) { my $newOffset = length($valBuff); # (ODD offset is absolute in JPEG, so add base offset!) $newOffset += $base if $$et{FILE_TYPE} eq 'JPEG'; $newValue = Set32u($newOffset); $dirFixup->AddFixup(length($dirBuff) + 8, $dataTag); $valBuff .= $odd; # add original decision data } else { $newValue = "\0\0\0\0"; } $newValuePt = \$newValue; } else { my $offsetInfo = $offsetInfo[$ifd]; # save original values (for updating TIFF_END later) my @vals; if ($isNew <= 0) { my $oldOrder = GetByteOrder(); # Minolta A200 stores these in the wrong byte order! SetByteOrder($$newInfo{ByteOrder}) if $$newInfo{ByteOrder}; @vals = ReadValue(\$oldValue, 0, $readFormName, $readCount, $oldSize); SetByteOrder($oldOrder); } # only support int32 pointers (for now) if ($formatSize[$newFormat] != 4 and $$newInfo{IsOffset}) { $isNew > 0 and warn("Internal error (Offset not int32)"), return undef; $newCount != $readCount and warn("Wrong count!"), return undef; # change to int32 $newFormName = 'int32u'; $newFormat = $formatNumber{$newFormName}; $newValue = WriteValue(join(' ',@vals), $newFormName, $newCount); unless (defined $newValue) { warn "Internal error writing offsets for $$newInfo{Name}\n"; return undef; } } $offsetInfo or $offsetInfo = $offsetInfo[$ifd] = { }; # save location of valuePtr in new directory # (notice we add 10 instead of 8 for valuePtr because # we will put a 2-byte count at start of directory later) my $ptr = $newStart + length($dirBuff) + 10; $newCount or $newCount = 1; # make sure count is set for offsetInfo # save value pointer and value count for each tag $$offsetInfo{$newID} = [$newInfo, $ptr, $newCount, \@vals, $newFormat]; } } elsif ($$newInfo{DataMember}) { # save any necessary data members (Make, Model, etc) my $formatStr = $newFormName; my $count = $newCount; # change to specified format if necessary if ($$newInfo{Format} and $$newInfo{Format} ne $formatStr) { $formatStr = $$newInfo{Format}; my $format = $formatNumber{$formatStr}; # adjust number of items for new format size $count = int(length($$newValuePt) / $formatSize[$format]) if $format; } my $val = ReadValue($newValuePt,0,$formatStr,$count,length($$newValuePt)); my $conv = $$newInfo{RawConv}; if ($conv) { # let the RawConv store the (possibly converted) data member if (ref $conv eq 'CODE') { &$conv($val, $et); } else { my ($self, $tag, $taginfo) = ($et, $$newInfo{Name}, $newInfo); #### eval RawConv ($self, $val, $tag, $tagInfo) eval $conv; } } else { $$et{$$newInfo{DataMember}} = $val; } } } # # write out the directory entry # my $newSize = length($$newValuePt); my $fsize = $formatSize[$newFormat]; my $offsetVal; $newCount = int(($newSize + $fsize - 1) / $fsize); # set proper count if ($newSize > 4) { # zero-pad to an even number of bytes (required by EXIF standard) # and make sure we are a multiple of the format size while ($newSize & 0x01 or $newSize < $newCount * $fsize) { $$newValuePt .= "\0"; ++$newSize; } my $entryBased; if ($$dirInfo{EntryBased} or ($newInfo and $$newInfo{EntryBased})) { $entryBased = 1; $offsetVal = Set32u(length($valBuff) - length($dirBuff)); } else { $offsetVal = Set32u(length $valBuff); } my ($dataTag, $putFirst); ($dataTag, $putFirst) = @$newInfo{'DataTag','PutFirst'} if $newInfo; if ($dataTag) { if ($dataTag eq 'PreviewImage' and ($$et{FILE_TYPE} eq 'JPEG' or $$et{GENERATE_PREVIEW_INFO})) { # hold onto the PreviewImage until we can determine if it fits $$et{PREVIEW_INFO} or $$et{PREVIEW_INFO} = { Data => $$newValuePt, Fixup => new Image::ExifTool::Fixup, }; $$et{PREVIEW_INFO}{ChangeBase} = 1 if $$newInfo{ChangeBase}; if ($$newInfo{IsOffset} and $$newInfo{IsOffset} eq '2') { $$et{PREVIEW_INFO}{NoBaseShift} = 1; } # use original preview size if we will attempt to load it later $newCount = $oldCount if $$newValuePt eq 'LOAD_PREVIEW'; $$newValuePt = ''; } elsif ($dataTag eq 'LeicaTrailer' and $$et{LeicaTrailer}) { $$newValuePt = ''; } } if ($putFirst and $$dirInfo{HeaderPtr}) { my $hdrPtr = $$dirInfo{HeaderPtr}; # place this value immediately after the TIFF header (eg. IIQ maker notes) $offsetVal = Set32u(length $$hdrPtr); $$hdrPtr .= $$newValuePt; } else { $valBuff .= $$newValuePt; # add value data to buffer # must save a fixup pointer for every pointer in the directory if ($entryBased) { $entryBasedFixup or $entryBasedFixup = new Image::ExifTool::Fixup; $entryBasedFixup->AddFixup(length($dirBuff) + 8, $dataTag); } else { $dirFixup->AddFixup(length($dirBuff) + 8, $dataTag); } } } else { $offsetVal = $$newValuePt; # save value in offset if 4 bytes or less # must pad value with zeros if less than 4 bytes $newSize < 4 and $offsetVal .= "\0" x (4 - $newSize); } # write the directory entry $dirBuff .= Set16u($newID) . Set16u($newFormat) . Set32u($newCount) . $offsetVal; # update flag to keep track of mandatory tags while (defined $allMandatory) { if (defined $$mandatory{$newID}) { # values must correspond to mandatory values my $form = $$newInfo{Format} || $newFormName; my $mandVal = WriteValue($$mandatory{$newID}, $form, $newCount); if (defined $mandVal and $mandVal eq $$newValuePt) { ++$allMandatory; # count mandatory tags last; } } undef $deleteAll; undef $allMandatory; } } if ($ignoreCount) { my $y = $ignoreCount > 1 ? 'ies' : 'y'; my $verb = $$dirInfo{FixBase} ? 'Ignored' : 'Removed'; $et->Warn("$verb $ignoreCount invalid entr$y from $name", 1); } if ($fixCount) { my $s = $fixCount > 1 ? 's' : ''; $et->Warn("Fixed invalid count$s for $fixCount $name tag$s", 1); } #.............................................................................. # write directory counts and nextIFD pointer and add value data to end of IFD # # determine now if there is or will be another IFD after this one my $nextIfdOffset; if ($dirEnd + 4 <= $dataLen) { $nextIfdOffset = Get32u($dataPt, $dirEnd); } else { $nextIfdOffset = 0; } my $isNextIFD = ($$dirInfo{Multi} and ($nextIfdOffset or # account for the case where we will create the next IFD # (IFD1 only, but not in TIFF-format images) ($dirName eq 'IFD0' and $$et{ADD_DIRS}{'IFD1'} and $$et{FILE_TYPE} ne 'TIFF'))); # calculate number of entries in new directory my $newEntries = length($dirBuff) / 12; # delete entire directory if we deleted a tag and only mandatory tags remain or we # attempted to create a directory with only mandatory tags and there is no nextIFD if ($allMandatory and not $isNextIFD and ($newEntries < $numEntries or $numEntries == 0)) { $newEntries = 0; $dirBuff = ''; $valBuff = ''; undef $dirFixup; # no fixups in this directory ++$deleteAll if defined $deleteAll; $verbose > 1 and print $out " - $allMandatory mandatory tag(s)\n"; $$et{CHANGED} -= $addMandatory; # didn't change these after all } if ($ifd and not $newEntries) { $verbose and print $out " Deleting IFD1\n"; last; # don't write IFD1 if empty } # apply one-time fixup for entry-based offsets if ($entryBasedFixup) { $$entryBasedFixup{Shift} = length($dirBuff) + 4; $entryBasedFixup->ApplyFixup(\$dirBuff); undef $entryBasedFixup; } # initialize next IFD pointer to zero my $nextIFD = Set32u(0); # some cameras use a different amount of padding after the makernote IFD if ($dirName eq 'MakerNotes' and $$dirInfo{Parent} =~ /^(ExifIFD|IFD0)$/) { my ($rel, $pad) = Image::ExifTool::MakerNotes::GetMakerNoteOffset($et); $nextIFD = "\0" x $pad if defined $pad and ($pad==0 or ($pad>4 and $pad<=32)); } # add directory entry count to start of IFD and next IFD pointer to end $newData .= Set16u($newEntries) . $dirBuff . $nextIFD; # get position of value data in newData my $valPos = length($newData); # go back now and set next IFD pointer if this isn't the first IFD if ($nextIfdPos) { # set offset to next IFD Set32u($newStart, \$newData, $nextIfdPos); $fixup->AddFixup($nextIfdPos,'NextIFD'); # add fixup for this offset in newData } # remember position of 'next IFD' pointer so we can set it next time around $nextIfdPos = length($nextIFD) ? $valPos - length($nextIFD) : undef; # add value data after IFD $newData .= $valBuff; # # add any subdirectories, adding fixup information # if (@subdirs) { my $subdir; foreach $subdir (@subdirs) { my $len = length($newData); # position of subdirectory in data my $subdirFixup = $$subdir{Fixup}; if ($subdirFixup) { $$subdirFixup{Start} += $len; $fixup->AddFixup($subdirFixup); } my $imageData = $$subdir{ImageData}; my $blockSize = 0; # must also update start position for ImageData fixups if (ref $imageData) { my $blockInfo; foreach $blockInfo (@$imageData) { my ($pos, $size, $pad, $entry, $subFix) = @$blockInfo; if ($subFix) { $$subFix{Start} += $len; # save expected image data offset for calculating shift later $$subFix{BlockLen} = length(${$$subdir{DataPt}}) + $blockSize; } $blockSize += $size + $pad; } } $newData .= ${$$subdir{DataPt}}; # add subdirectory to our data undef ${$$subdir{DataPt}}; # free memory now # set the pointer my $offset = $$subdir{Offset}; # if offset is in valBuff, it was added to the end of dirBuff # (plus 4 bytes for nextIFD pointer) $offset += length($dirBuff) + 4 if $$subdir{Where} eq 'valBuff'; $offset += $newStart + 2; # get offset in newData # check to be sure we got the right offset unless (Get32u(\$newData, $offset) == 0xfeedf00d) { $et->Error("Internal error while rewriting $name"); return undef; } # set the offset to the subdirectory data Set32u($len, \$newData, $offset); $fixup->AddFixup($offset); # add fixup for this offset in newData } } # add fixup for all offsets in directory according to value data position # (which is at the end of this directory) if ($dirFixup) { $$dirFixup{Start} = $newStart + 2; $$dirFixup{Shift} = $valPos - $$dirFixup{Start}; $fixup->AddFixup($dirFixup); } # add valueData fixups, adjusting for position of value data my $valFixup; foreach $valFixup (@valFixups) { $$valFixup{Start} += $valPos; $fixup->AddFixup($valFixup); } # stop if no next IFD pointer last unless $isNextIFD; # stop unless scanning for multiple IFD's if ($nextIfdOffset) { # continue with next IFD $dirStart = $nextIfdOffset - $dataPos; } else { # create IFD1 if necessary $verbose and print $out " Creating IFD1\n"; my $ifd1 = "\0" x 2; # empty IFD1 data (zero entry count) $dataPt = \$ifd1; $dirStart = 0; $dirLen = $dataLen = 2; } # increment IFD name my $ifdNum = $dirName =~ s/(\d+)$// ? $1 : 0; $dirName .= $ifdNum + 1; $name =~ s/\d+$//; $name .= $ifdNum + 1; $$et{DIR_NAME} = $$et{PATH}[-1] = $dirName; next unless $nextIfdOffset; # guard against writing the same directory twice my $addr = $nextIfdOffset + $base; if ($$et{PROCESSED}{$addr}) { $et->Error("$name pointer references previous $$et{PROCESSED}{$addr} directory", 1); last; } $$et{PROCESSED}{$addr} = $name; if ($dirName eq 'SubIFD1' and not ValidateIFD($dirInfo, $dirStart)) { if ($$et{TIFF_TYPE} eq 'TIFF') { $et->Error('Ignored bad IFD linked from SubIFD', 1); } elsif ($verbose) { $et->Warn('Ignored bad IFD linked from SubIFD'); } last; # don't write bad IFD } if ($$et{DEL_GROUP}{$dirName}) { $verbose and print $out " Deleting $dirName\n"; $raf and $et->Error("Deleting $dirName also deletes subsequent" . " IFD's and possibly image data", 1); ++$$et{CHANGED}; if ($$et{DEL_GROUP}{$dirName} == 2 and $$et{ADD_DIRS}{$dirName}) { my $emptyIFD = "\0" x 2; # start with empty IFD $dataPt = \$emptyIFD; $dirStart = 0; $dirLen = $dataLen = 2; } else { last; # don't write this IFD (or any subsequent IFD) } } else { $verbose and print $out " Rewriting $name\n"; } } #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # do our fixups now so we can more easily calculate offsets below $fixup->ApplyFixup(\$newData); # # determine total block size for deferred data # my $numBlocks = scalar @imageData; # save this so we scan only existing blocks later my $blockSize = 0; # total size of blocks to copy later my $blockInfo; foreach $blockInfo (@imageData) { my ($pos, $size, $pad) = @$blockInfo; $blockSize += $size + $pad; } # # copy over image data for IFD's, starting with the last IFD first # if (@offsetInfo) { my $ttwLen; # length of MRW TTW segment my @writeLater; # write image data last for ($ifd=$#offsetInfo; $ifd>=-1; --$ifd) { # build list of offsets to process my @offsetList; if ($ifd >= 0) { my $offsetInfo = $offsetInfo[$ifd] or next; # patch Panasonic RAW/RW2 StripOffsets/StripByteCounts if necessary my $stripOffsets = $$offsetInfo{0x111}; if ($stripOffsets and $$stripOffsets[0]{PanasonicHack}) { require Image::ExifTool::PanasonicRaw; my $err = Image::ExifTool::PanasonicRaw::PatchRawDataOffset($offsetInfo, $raf, $ifd); $err and $et->Error($err); } my $tagID; # loop through all tags in reverse order so we save thumbnail # data before main image data if both exist in the same IFD foreach $tagID (reverse sort keys %$offsetInfo) { my $tagInfo = $$offsetInfo{$tagID}[0]; next unless $$tagInfo{IsOffset}; # handle byte counts with offsets my $sizeInfo = $$offsetInfo{$$tagInfo{OffsetPair}}; $sizeInfo or $et->Error("No size tag for $dirName:$$tagInfo{Name}"), next; my $dataTag = $$tagInfo{DataTag}; # write TIFF image data (strips or tiles) later if requested if ($raf and defined $$origDirInfo{ImageData} and ($tagID == 0x111 or $tagID == 0x144 or # also defer writing of other big data such as JpgFromRaw in NEF ($$sizeInfo[3][0] and # (calculate approximate combined size of all blocks) $$sizeInfo[3][0] * scalar(@{$$sizeInfo[3]}) > 1000000)) and # but don't defer writing if replacing with new value (not defined $dataTag or not defined $offsetData{$dataTag})) { push @writeLater, [ $$offsetInfo{$tagID}, $sizeInfo ]; } else { push @offsetList, [ $$offsetInfo{$tagID}, $sizeInfo ]; } } } else { last unless @writeLater; @offsetList = @writeLater; } my $offsetPair; foreach $offsetPair (@offsetList) { my ($tagInfo, $offsets, $count, $oldOffset) = @{$$offsetPair[0]}; my ($cntInfo, $byteCounts, $count2, $oldSize, $format) = @{$$offsetPair[1]}; # must be the same number of offset and byte count values unless ($count == $count2) { $et->Error("Offsets/ByteCounts disagree on count for $$tagInfo{Name}"); return undef; } my $formatStr = $formatName[$format]; # follow pointer to value data if necessary $count > 1 and $offsets = Get32u(\$newData, $offsets); my $n = $count * $formatSize[$format]; $n > 4 and $byteCounts = Get32u(\$newData, $byteCounts); if ($byteCounts < 0 or $byteCounts + $n > length($newData)) { $et->Error("Error reading $$tagInfo{Name} byte counts"); return undef; } # get offset base and data pos (abnormal for some preview images) my ($dbase, $dpos, $wrongBase, $subIfdDataFixup); if ($$tagInfo{IsOffset} eq '2') { $dbase = $firstBase; $dpos = $dataPos + $base - $firstBase; } else { $dbase = $base; $dpos = $dataPos; } # use different base if necessary for some offsets (Minolta A200) if ($$tagInfo{WrongBase}) { my $self = $et; #### eval WrongBase ($self) $wrongBase = eval $$tagInfo{WrongBase} || 0; $dbase += $wrongBase; $dpos -= $wrongBase; } else { $wrongBase = 0; } my $oldOrder = GetByteOrder(); my $dataTag = $$tagInfo{DataTag}; # use different byte order for values of this offset pair if required (Minolta A200) SetByteOrder($$tagInfo{ByteOrder}) if $$tagInfo{ByteOrder}; # transfer the data referenced by all offsets of this tag for ($n=0; $n<$count; ++$n) { my ($oldEnd, $size); if (@$oldOffset and @$oldSize) { # calculate end offset of this block $oldEnd = $$oldOffset[$n] + $$oldSize[$n]; # update TIFF_END as if we read this data from file UpdateTiffEnd($et, $oldEnd + $dbase); } my $offsetPos = $offsets + $n * 4; my $byteCountPos = $byteCounts + $n * $formatSize[$format]; if ($$tagInfo{PanasonicHack}) { # use actual raw data length (may be different than StripByteCounts!) $size = $$oldSize[$n]; } else { # use size of new data $size = ReadValue(\$newData, $byteCountPos, $formatStr, 1, 4); } my $offset = $$oldOffset[$n]; if (defined $offset) { $offset -= $dpos; } elsif ($size != 0xfeedfeed) { $et->Error('Internal error (no offset)'); return undef; } my $newOffset = length($newData) - $wrongBase; my $buff; # look for 'feed' code to use our new data if ($size == 0xfeedfeed) { unless (defined $dataTag) { $et->Error("No DataTag defined for $$tagInfo{Name}"); return undef; } unless (defined $offsetData{$dataTag}) { $et->Error("Internal error (no $dataTag)"); return undef; } if ($count > 1) { $et->Error("Can't modify $$tagInfo{Name} with count $count"); return undef; } $buff = $offsetData{$dataTag}; if ($formatSize[$format] != 4) { $et->Error("$$cntInfo{Name} is not int32"); return undef; } # set the data size $size = length($buff); Set32u($size, \$newData, $byteCountPos); } elsif ($ifd < 0) { # pad if necessary (but don't pad contiguous image blocks) my $pad = 0; ++$pad if $size & 0x01 and ($n+1 >= $count or not $oldEnd or $oldEnd != $$oldOffset[$n+1]); # preserve original image padding if specified if ($$origDirInfo{PreserveImagePadding} and $n+1 < $count and $oldEnd and $$oldOffset[$n+1] > $oldEnd) { $pad = $$oldOffset[$n+1] - $oldEnd; } # copy data later push @imageData, [$offset+$dbase+$dpos, $size, $pad]; $newOffset += $blockSize; # data comes after other deferred data # create fixup for SubIFD ImageData if ($imageDataFlag eq 'SubIFD' and not $subIfdDataFixup) { $subIfdDataFixup = new Image::ExifTool::Fixup; $imageData[-1][4] = $subIfdDataFixup; } $size += $pad; # account for pad byte if necessary # return ImageData list $$origDirInfo{ImageData} = \@imageData; } elsif ($offset >= 0 and $offset+$size <= $dataLen) { # take data from old dir data buffer $buff = substr($$dataPt, $offset, $size); } elsif ($$et{TIFF_TYPE} eq 'MRW') { # TTW segment must be an even 4 bytes long, so pad now if necessary my $n = length $newData; $buff = ($n & 0x03) ? "\0" x (4 - ($n & 0x03)) : ''; $size = length($buff); # data exists after MRW TTW segment $ttwLen = length($newData) + $size unless defined $ttwLen; $newOffset = $offset + $dpos + $ttwLen - $dataLen; } elsif ($raf and $raf->Seek($offset+$dbase+$dpos,0) and $raf->Read($buff,$size) == $size) { # (data was read OK) # patch incorrect ThumbnailOffset in Sony A100 1.00 ARW images if ($$et{TIFF_TYPE} eq 'ARW' and $$tagInfo{Name} eq 'ThumbnailOffset' and $$et{Model} eq 'DSLR-A100' and $buff !~ /^\xff\xd8\xff/) { my $pos = $offset + $dbase + $dpos; my $try; if ($pos < 0x10000 and $raf->Seek($pos+0x10000,0) and $raf->Read($try,$size) == $size and $try =~ /^\xff\xd8\xff/) { $buff = $try; $et->Warn('Adjusted incorrect A100 ThumbnailOffset', 1); } else { $et->Error('Invalid ThumbnailImage'); } } } elsif ($$tagInfo{Name} eq 'ThumbnailOffset' and $offset>=0 and $offset<$dataLen) { # Grrr. The Canon 350D writes the thumbnail with an incorrect byte count my $diff = $offset + $size - $dataLen; $et->Warn("ThumbnailImage runs outside EXIF data by $diff bytes (truncated)",1); # set the size to the available data $size -= $diff; unless (WriteValue($size, $formatStr, 1, \$newData, $byteCountPos)) { warn 'Internal error writing thumbnail size'; } # get the truncated image $buff = substr($$dataPt, $offset, $size); } elsif ($$tagInfo{Name} eq 'PreviewImageStart' and $$et{FILE_TYPE} eq 'JPEG') { # try to load the preview image using the specified offset undef $buff; my $r = $$et{RAF}; if ($r and not $raf) { my $tell = $r->Tell(); # read and validate undef $buff unless $r->Seek($offset+$base+$dataPos,0) and $r->Read($buff,$size) == $size and $buff =~ /^.\xd8\xff[\xc4\xdb\xe0-\xef]/s; $r->Seek($tell, 0) or $et->Error('Seek error'), return undef; } # set flag if we must load PreviewImage $buff = 'LOAD_PREVIEW' unless defined $buff; } else { my $dataName = $dataTag || $$tagInfo{Name}; return undef if $et->Error("Error reading $dataName data in $name", $inMakerNotes); $buff = ''; } if ($$tagInfo{Name} eq 'PreviewImageStart') { if ($$et{FILE_TYPE} eq 'JPEG' and not $$tagInfo{MakerPreview}) { # hold onto the PreviewImage until we can determine if it fits $$et{PREVIEW_INFO} or $$et{PREVIEW_INFO} = { Data => $buff, Fixup => new Image::ExifTool::Fixup, }; if ($$tagInfo{IsOffset} and $$tagInfo{IsOffset} eq '2') { $$et{PREVIEW_INFO}{NoBaseShift} = 1; } if ($offset >= 0 and $offset+$size <= $dataLen) { # set flag indicating this preview wasn't in a trailer $$et{PREVIEW_INFO}{WasContained} = 1; } $buff = ''; } elsif ($$et{TIFF_TYPE} eq 'ARW' and $$et{Model} eq 'DSLR-A100') { # the A100 double-references the same preview, so ignore the # second one (the offset and size will be patched later) next if $$et{A100PreviewLength}; $$et{A100PreviewLength} = length $buff if defined $buff; } } # update offset accordingly and add to end of new data Set32u($newOffset, \$newData, $offsetPos); # add a pointer to fix up this offset value (marked with DataTag name) $fixup->AddFixup($offsetPos, $dataTag); # also add to subIfdDataFixup if necessary $subIfdDataFixup->AddFixup($offsetPos, $dataTag) if $subIfdDataFixup; # must also (sometimes) update StripOffsets in Panasonic RW2 images my $otherPos = $$offsetPair[0][5]; if ($otherPos and $$tagInfo{PanasonicHack}) { Set32u($newOffset, \$newData, $otherPos); $fixup->AddFixup($otherPos, $dataTag); } if ($ifd >= 0) { # buff length must be even (Note: may have changed since $size was set) $buff .= "\0" if length($buff) & 0x01; $newData .= $buff; # add this strip to the data } else { $blockSize += $size; # keep track of total size } } SetByteOrder($oldOrder); } } # verify that nothing else got written after determining TTW length if (defined $ttwLen and $ttwLen != length($newData)) { $et->Error('Internal error writing MRW TTW'); } } # # set offsets and generate fixups for tag values which were too large for memory # $blockSize = 0; foreach $blockInfo (@imageData) { my ($pos, $size, $pad, $entry, $subFix) = @$blockInfo; if (defined $entry) { my $format = Get16u(\$newData, $entry + 2); if ($format < 1 or $format > 13) { $et->Error('Internal error copying huge value'); last; } else { # set count and offset in directory entry Set32u($size / $formatSize[$format], \$newData, $entry + 4); Set32u(length($newData)+$blockSize, \$newData, $entry + 8); $fixup->AddFixup($entry + 8); # create special fixup for SubIFD data if ($imageDataFlag eq 'SubIFD') { my $subIfdDataFixup = new Image::ExifTool::Fixup; $subIfdDataFixup->AddFixup($entry + 8); # save fixup in imageData list $$blockInfo[4] = $subIfdDataFixup; } # must reset entry pointer so we don't use it again in a parent IFD! $$blockInfo[3] = undef; } } # apply additional shift required for contained SubIFD image data offsets if ($subFix and defined $$subFix{BlockLen} and $numBlocks > 0) { # our offset expects the data at the end of the SubIFD block (BlockLen + Start), # but it will actually be at length($newData) + $blockSize. So adjust # accordingly (and subtract an extra Start because this shift is applied later) $$subFix{Shift} += length($newData) - $$subFix{BlockLen} - 2 * $$subFix{Start} + $blockSize; $subFix->ApplyFixup(\$newData); } $blockSize += $size + $pad; --$numBlocks; } # # apply final shift to new data position if this is the top level IFD # unless ($$dirInfo{Fixup}) { my $hdrPtr = $$dirInfo{HeaderPtr}; my $newDataPos = $hdrPtr ? length $$hdrPtr : $$dirInfo{NewDataPos} || 0; # adjust CanonVRD offset to point to end of regular TIFF if necessary # (NOTE: This will be incorrect if multiple trailers exist, # but it is unlikely that it could ever be correct in this case anyway. # Also, this doesn't work for JPEG images (but CanonDPP doesn't set # this when editing JPEG images anyway)) $fixup->SetMarkerPointers(\$newData, 'CanonVRD', length($newData) + $blockSize); if ($newDataPos) { $$fixup{Shift} += $newDataPos; $fixup->ApplyFixup(\$newData); } # save fixup for adjusting Leica trailer offset if necessary $$et{LeicaTrailer}{Fixup}->AddFixup($fixup) if $$et{LeicaTrailer}; # save fixup for PreviewImage in JPEG file if necessary my $previewInfo = $$et{PREVIEW_INFO}; if ($previewInfo) { my $pt = \$$previewInfo{Data}; # image data or 'LOAD_PREVIEW' flag # now that we know the size of the EXIF data, first test to see if our new image fits # inside the EXIF segment (remember about the TIFF and EXIF headers: 8+6 bytes) if (($$pt ne 'LOAD_PREVIEW' and length($$pt) + length($newData) + 14 <= 0xfffd and not $$previewInfo{IsTrailer}) or $$previewInfo{IsShort}) # must fit in this segment if using short pointers { # It fits! (or must exist in EXIF segment), so fixup the # PreviewImage pointers and stuff the preview image in here my $newPos = length($newData) + $newDataPos; $newPos += ($$previewInfo{BaseShift} || 0); if ($$previewInfo{Relative}) { # calculate our base by looking at how far the pointer got shifted $newPos -= ($fixup->GetMarkerPointers(\$newData, 'PreviewImage') || 0); } $fixup->SetMarkerPointers(\$newData, 'PreviewImage', $newPos); $newData .= $$pt; # set flag to delete old preview unless it was contained in the EXIF $$et{DEL_PREVIEW} = 1 unless $$et{PREVIEW_INFO}{WasContained}; delete $$et{PREVIEW_INFO}; # done with our preview data } else { # Doesn't fit, or we still don't know, so save fixup information # and put the preview at the end of the file $$previewInfo{Fixup} or $$previewInfo{Fixup} = new Image::ExifTool::Fixup; $$previewInfo{Fixup}->AddFixup($fixup); } } elsif (defined $newData and $deleteAll) { $newData = ''; # delete both IFD0 and IFD1 since only mandatory tags remain } elsif ($$et{A100PreviewLength}) { # save preview image start for patching A100 quirks later $$et{A100PreviewStart} = $fixup->GetMarkerPointers(\$newData, 'PreviewImage'); } # save location of last IFD for use in Canon RAW header if ($newDataPos == 16) { my @ifdPos = $fixup->GetMarkerPointers(\$newData,'NextIFD'); $$origDirInfo{LastIFD} = pop @ifdPos; } # recrypt SR2 SubIFD data if necessary my $key = $$et{SR2SubIFDKey}; if ($key) { my $start = $fixup->GetMarkerPointers(\$newData, 'SR2SubIFDOffset'); my $len = $$et{SR2SubIFDLength}; # (must subtract 8 for size of TIFF header) if ($start and $start - 8 + $len <= length $newData) { require Image::ExifTool::Sony; Image::ExifTool::Sony::Decrypt(\$newData, $start - 8, $len, $key); } } } # return empty string if no entries in directory # (could be up to 10 bytes and still be empty) $newData = '' if defined $newData and length($newData) < 12; return $newData; # return our directory data } 1; # end __END__ =head1 NAME Image::ExifTool::WriteExif.pl - Write EXIF meta information =head1 SYNOPSIS This file is autoloaded by Image::ExifTool::Exif. =head1 DESCRIPTION This file contains routines to write EXIF metadata. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::Exif(3pm)|Image::ExifTool::Exif>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������Image-ExifTool-10.10/lib/Image/ExifTool/WriteIPTC.pl������������������������������������������������000644 �000765 �000024 �00000070677 12642461340 022036� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: WriteIPTC.pl # # Description: Write IPTC meta information # # Revisions: 12/15/2004 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::IPTC; use strict; # mandatory IPTC tags for each record my %mandatory = ( 1 => { 0 => 4, # EnvelopeRecordVersion }, 2 => { 0 => 4, # ApplicationRecordVersion }, 3 => { 0 => 4, # NewsPhotoVersion }, ); # manufacturer strings for IPTCPictureNumber my %manufacturer = ( 1 => 'Associated Press, USA', 2 => 'Eastman Kodak Co, USA', 3 => 'Hasselblad Electronic Imaging, Sweden', 4 => 'Tecnavia SA, Switzerland', 5 => 'Nikon Corporation, Japan', 6 => 'Coatsworth Communications Inc, Canada', 7 => 'Agence France Presse, France', 8 => 'T/One Inc, USA', 9 => 'Associated Newspapers, UK', 10 => 'Reuters London', 11 => 'Sandia Imaging Systems Inc, USA', 12 => 'Visualize, Spain', ); my %iptcCharsetInv = ( 'UTF8' => "\x1b%G", 'UTF-8' => "\x1b%G" ); # ISO 2022 Character Coding Notes # ------------------------------- # Character set designation: (0x1b I F, or 0x1b I I F) # Initial character 0x1b (ESC) # Intermediate character I: # 0x28 ('(') - G0, 94 chars # 0x29 (')') - G1, 94 chars # 0x2a ('*') - G2, 94 chars # 0x2b ('+') - G3, 94 chars # 0x2c (',') - G1, 96 chars # 0x2d ('-') - G2, 96 chars # 0x2e ('.') - G3, 96 chars # 0x24 I ('$I') - multiple byte graphic sets (I from above) # I 0x20 ('I ') - dynamically redefinable character sets # Final character: # 0x30 - 0x3f = private character set # 0x40 - 0x7f = standardized character set # Character set invocation: # G0 : SI = 0x15 # G1 : SO = 0x14, LS1R = 0x1b 0x7e ('~') # G2 : LS2 = 0x1b 0x6e ('n'), LS2R = 0x1b 0x7d ('}') # G3 : LS3 = 0x1b 0x6f ('o'), LS3R = 0x1b 0x7c ('|') # (the locking shift "R" codes shift into 0x80-0xff space) # Single character invocation: # G2 : SS2 = 0x1b 0x8e (or 0x4e in 7-bit) # G3 : SS3 = 0x1b 0x8f (or 0x4f in 7-bit) # Control chars (designated and invoked) # C0 : 0x1b 0x21 F (0x21 = '!') # C1 : 0x1b 0x22 F (0x22 = '"') # Complete codes (control+graphics, designated and invoked) # 0x1b 0x25 F (0x25 = '%') # 0x1b 0x25 I F # 0x1b 0x25 0x47 ("\x1b%G") - UTF-8 # 0x1b 0x25 0x40 ("\x1b%@") - return to ISO 2022 # ------------------------------- #------------------------------------------------------------------------------ # Inverse print conversion for CodedCharacterSet # Inputs: 0) value sub PrintInvCodedCharset($) { my $val = shift; my $code = $iptcCharsetInv{uc($val)}; unless ($code) { if (($code = $val) =~ s/ESC */\x1b/ig) { # translate ESC chars $code =~ s/, \x1b/\x1b/g; # remove comma separators $code =~ tr/ //d; # remove spaces } else { warn "Bad syntax (use 'UTF8' or 'ESC X Y[, ...]')\n"; } } return $code; } #------------------------------------------------------------------------------ # validate raw values for writing # Inputs: 0) ExifTool object ref, 1) tagInfo hash ref, 2) raw value ref # Returns: error string or undef (and possibly changes value) on success sub CheckIPTC($$$) { my ($et, $tagInfo, $valPtr) = @_; my $format = $$tagInfo{Format} || $$tagInfo{Table}{FORMAT} || ''; if ($format =~ /^int(\d+)/) { my $bytes = int(($1 || 0) / 8); if ($bytes ne 1 and $bytes ne 2 and $bytes ne 4) { return "Can't write $bytes-byte integer"; } my $val = $$valPtr; unless (Image::ExifTool::IsInt($val)) { return 'Not an integer' unless Image::ExifTool::IsHex($val); $val = $$valPtr = hex($val); } my $n; for ($n=0; $n<$bytes; ++$n) { $val >>= 8; } return "Value too large for $bytes-byte format" if $val; } elsif ($format =~ /^(string|digits|undef)\[?(\d+),?(\d*)\]?$/) { my ($fmt, $minlen, $maxlen) = ($1, $2, $3); my $len = length $$valPtr; if ($fmt eq 'digits') { return 'Non-numeric characters in value' unless $$valPtr =~ /^\d*$/; if ($len < $minlen and $len) { # left pad with zeros if necessary $$valPtr = ('0' x ($minlen - $len)) . $$valPtr; $len = $minlen; } } if (defined $minlen) { $maxlen or $maxlen = $minlen; if ($len < $minlen) { unless ($$et{OPTIONS}{IgnoreMinorErrors}) { return "[Minor] String too short (minlen is $minlen)"; } $$et{CHECK_WARN} = "String too short for IPTC:$$tagInfo{Name} (written anyway)"; } elsif ($len > $maxlen and not $$et{OPTIONS}{IgnoreMinorErrors}) { $$et{CHECK_WARN} = "[Minor] IPTC:$$tagInfo{Name} exceeds length limit (truncated)"; $$valPtr = substr($$valPtr, 0, $maxlen); } } } else { return "Bad IPTC Format ($format)"; } return undef; } #------------------------------------------------------------------------------ # format IPTC data for writing # Inputs: 0) ExifTool object ref, 1) tagInfo pointer, # 2) value reference (changed if necessary), # 3) reference to character set for translation (changed if necessary) # 4) record number, 5) flag set to read value (instead of write) sub FormatIPTC($$$$$;$) { my ($et, $tagInfo, $valPtr, $xlatPtr, $rec, $read) = @_; my $format = $$tagInfo{Format} || $$tagInfo{Table}{FORMAT}; return unless $format; if ($format =~ /^int(\d+)/) { if ($read) { my $len = length($$valPtr); if ($len <= 8) { # limit integer conversion to 8 bytes long my $val = 0; my $i; for ($i=0; $i<$len; ++$i) { $val = $val * 256 + ord(substr($$valPtr, $i, 1)); } $$valPtr = $val; } } else { my $len = int(($1 || 0) / 8); if ($len == 1) { # 1 byte $$valPtr = chr($$valPtr); } elsif ($len == 2) { # 2-byte integer $$valPtr = pack('n', $$valPtr); } else { # 4-byte integer $$valPtr = pack('N', $$valPtr); } } } elsif ($format =~ /^string/) { if ($rec == 1) { if ($$tagInfo{Name} eq 'CodedCharacterSet') { $$xlatPtr = HandleCodedCharset($et, $$valPtr); } } elsif ($$xlatPtr and $rec < 7 and $$valPtr =~ /[\x80-\xff]/) { TranslateCodedString($et, $valPtr, $xlatPtr, $read); } } } #------------------------------------------------------------------------------ # generate IPTC-format date # Inputs: 0) EXIF-format date string (YYYY:mm:dd) or date/time string # Returns: IPTC-format date string (YYYYmmdd), or undef and issue warning on error sub IptcDate($) { my $val = shift; unless ($val =~ s/^.*(\d{4}):?(\d{2}):?(\d{2}).*/$1$2$3/s) { warn "Invalid date format (use YYYY:mm:dd)\n"; undef $val; } return $val; } #------------------------------------------------------------------------------ # generate IPTC-format time # Inputs: 0) EXIF-format time string (HH:MM:SS[+/-HH:MM]) or date/time string # Returns: IPTC-format time string (HHMMSS+HHMM), or undef and issue warning on error sub IptcTime($) { my $val = shift; if ($val =~ /(.*?)\b(\d{1,2})(:?)(\d{2})(:?)(\d{2})(\S*)\s*$/s and ($3 or not $5)) { $val = sprintf("%.2d%.2d%.2d",$2,$4,$6); my ($date, $tz) = ($1, $7); if ($tz =~ /([+-]\d{1,2}):?(\d{2})/) { $tz = sprintf("%+.2d%.2d",$1,$2); } elsif ($tz =~ /Z/i) { $tz = '+0000'; # UTC } else { # use local system timezone by default my (@tm, $time); if ($date and $date =~ /^(\d{4}):(\d{2}):(\d{2})\s*$/ and eval { require Time::Local }) { # we were given a date too, so determine the local timezone # offset at the specified date/time my @d = ($3,$2-1,$1-1900); $val =~ /(\d{2})(\d{2})(\d{2})/; @tm = ($3,$2,$1,@d); $time = Image::ExifTool::TimeLocal(@tm); } else { # it is difficult to get the proper local timezone offset for this # time because the date tag is written separately. (The offset may be # different on a different date due to daylight savings time.) In this # case the best we can do easily is to use the current timezone offset. $time = time; @tm = localtime($time); } ($tz = Image::ExifTool::TimeZoneString(\@tm, $time)) =~ tr/://d; } $val .= $tz; } else { warn "Invalid time format (use HH:MM:SS[+/-HH:MM])\n"; undef $val; # time format error } return $val; } #------------------------------------------------------------------------------ # Inverse print conversion for IPTC date or time value # Inputs: 0) IPTC date or 'now' # Returns: IPTC date sub InverseDateOrTime($) { my $val = shift; return Image::ExifTool::TimeNow() if lc($val) eq 'now'; return $val; } #------------------------------------------------------------------------------ # Convert picture number # Inputs: 0) value # Returns: Converted value sub ConvertPictureNumber($) { my $val = shift; if ($val eq "\0" x 16) { $val = 'Unknown'; } elsif (length $val >= 16) { my @vals = unpack('nNA8n', $val); $val = $vals[0]; my $manu = $manufacturer{$val}; $val .= " ($manu)" if $manu; $val .= ', equip ' . $vals[1]; $vals[2] =~ s/(\d{4})(\d{2})(\d{2})/$1:$2:$3/; $val .= ", $vals[2], no. $vals[3]"; } else { $val = '<format error>' } return $val; } #------------------------------------------------------------------------------ # Inverse picture number conversion # Inputs: 0) value # Returns: Converted value (or undef on error) sub InvConvertPictureNumber($) { my $val = shift; $val =~ s/\(.*\)//g; # remove manufacturer description $val =~ tr/://d; # remove date separators $val =~ tr/0-9/ /c; # turn remaining non-numbers to spaces my @vals = split ' ', $val; if (@vals >= 4) { $val = pack('nNA8n', @vals); } elsif ($val =~ /unknown/i) { $val = "\0" x 16; } else { undef $val; } return $val; } #------------------------------------------------------------------------------ # Write IPTC data record # Inputs: 0) ExifTool object ref, 1) source dirInfo ref, 2) tag table ref # Returns: IPTC data block (may be empty if no IPTC data) # Notes: Increments ExifTool CHANGED flag for each tag changed sub DoWriteIPTC($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); # avoid editing IPTC directory unless necessary: # - improves speed # - avoids changing current MD5 digest unnecessarily # - avoids adding mandatory tags unless some other IPTC is changed unless (exists $$et{EDIT_DIRS}{$$dirInfo{DirName}} or # standard IPTC tags in other locations should be edited too (eg. AFCP_IPTC) ($tagTablePtr eq \%Image::ExifTool::IPTC::Main and exists $$et{EDIT_DIRS}{IPTC})) { print $out "$$et{INDENT} [nothing changed]\n" if $verbose; return undef; } my $dataPt = $$dirInfo{DataPt}; unless ($dataPt) { my $emptyData = ''; $dataPt = \$emptyData; } my $start = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen}; my ($tagInfo, %iptcInfo, $tag); # start by assuming default IPTC encoding my $xlat = $et->Options('CharsetIPTC'); undef $xlat if $xlat eq $et->Options('Charset'); # make sure our dataLen is defined (note: allow zero length directory) unless (defined $dirLen) { my $dataLen = $$dirInfo{DataLen}; $dataLen = length($$dataPt) unless defined $dataLen; $dirLen = $dataLen - $start; } # quick check for improperly byte-swapped IPTC if ($dirLen >= 4 and substr($$dataPt, $start, 1) ne "\x1c" and substr($$dataPt, $start + 3, 1) eq "\x1c") { $et->Warn('IPTC data was improperly byte-swapped'); my $newData = pack('N*', unpack('V*', substr($$dataPt, $start, $dirLen) . "\0\0\0")); $dataPt = \$newData; $start = 0; # NOTE: MUST NOT access $dirInfo DataPt, DirStart or DataLen after this! } # generate lookup so we can find the record numbers my %recordNum; foreach $tag (Image::ExifTool::TagTableKeys($tagTablePtr)) { $tagInfo = $$tagTablePtr{$tag}; $$tagInfo{SubDirectory} or next; my $table = $$tagInfo{SubDirectory}{TagTable} or next; my $subTablePtr = Image::ExifTool::GetTagTable($table); $recordNum{$subTablePtr} = $tag; } # loop through new values and accumulate all IPTC information # into lists based on their IPTC record type foreach $tagInfo ($et->GetNewTagInfoList()) { my $table = $$tagInfo{Table}; my $record = $recordNum{$table}; # ignore tags we aren't writing to this directory next unless defined $record; $iptcInfo{$record} = [] unless defined $iptcInfo{$record}; push @{$iptcInfo{$record}}, $tagInfo; } # get sorted list of records used. Might as well be organized and # write our records in order of record number first, then tag number my @recordList = sort { $a <=> $b } keys %iptcInfo; my ($record, %set); foreach $record (@recordList) { # sort tagInfo lists by tagID @{$iptcInfo{$record}} = sort { $$a{TagID} <=> $$b{TagID} } @{$iptcInfo{$record}}; # build hash of all tagIDs to set foreach $tagInfo (@{$iptcInfo{$record}}) { $set{$record}->{$$tagInfo{TagID}} = $tagInfo; } } # run through the old IPTC data, inserting our records in # sequence and deleting existing records where necessary # (the IPTC specification states that records must occur in # numerical order, but tags within records need not be ordered) my $pos = $start; my $tail = $pos; # old data written up to this point my $dirEnd = $start + $dirLen; my $newData = ''; my $lastRec = -1; my $lastRecPos = 0; my $allMandatory = 0; my %foundRec; # found flags: 0x01-existed before, 0x02-deleted, 0x04-created my $addNow; for (;;$tail=$pos) { # get next IPTC record from input directory my ($id, $rec, $tag, $len, $valuePtr); if ($pos + 5 <= $dirEnd) { my $buff = substr($$dataPt, $pos, 5); ($id, $rec, $tag, $len) = unpack("CCCn", $buff); if ($id == 0x1c) { if ($rec < $lastRec) { if ($rec == 0) { return undef if $et->Warn("IPTC record 0 encountered, subsequent records ignored", 2); undef $rec; $pos = $dirEnd; $len = 0; } else { return undef if $et->Warn("IPTC doesn't conform to spec: Records out of sequence", 2); } } # handle extended IPTC entry if necessary $pos += 5; # step to after field header if ($len & 0x8000) { my $n = $len & 0x7fff; # get num bytes in length field if ($pos + $n <= $dirEnd and $n <= 8) { # determine length (a big-endian, variable sized int) for ($len = 0; $n; ++$pos, --$n) { $len = $len * 256 + ord(substr($$dataPt, $pos, 1)); } } else { $len = $dirEnd; # invalid length } } $valuePtr = $pos; $pos += $len; # step $pos to next entry # make sure we don't go past the end of data # (this can only happen if original data is bad) $pos = $dirEnd if $pos > $dirEnd; } else { undef $rec; } } # write out all our records that come before this one my $writeRec = (not defined $rec or $rec != $lastRec); if ($writeRec or $addNow) { for (;;) { my $newRec = $recordList[0]; if ($addNow) { $tagInfo = $addNow; } elsif (not defined $newRec or $newRec != $lastRec) { # handle mandatory tags in last record unless it was empty if (length $newData > $lastRecPos) { if ($allMandatory > 1) { # entire lastRec contained mandatory tags, and at least one tag # was deleted, so delete entire record unless we specifically # added a mandatory tag my $num = 0; foreach (keys %{$foundRec{$lastRec}}) { my $code = $foundRec{$lastRec}->{$_}; $num = 0, last if $code & 0x04; ++$num if ($code & 0x03) == 0x01; } if ($num) { $newData = substr($newData, 0, $lastRecPos); $verbose > 1 and print $out " - $num mandatory tags\n"; } } elsif ($mandatory{$lastRec} and $tagTablePtr eq \%Image::ExifTool::IPTC::Main) { # add required mandatory tags my $mandatory = $mandatory{$lastRec}; my ($mandTag, $subTablePtr); foreach $mandTag (sort { $a <=> $b } keys %$mandatory) { next if $foundRec{$lastRec}->{$mandTag}; unless ($subTablePtr) { $tagInfo = $$tagTablePtr{$lastRec}; $tagInfo and $$tagInfo{SubDirectory} or warn("WriteIPTC: Internal error 1\n"), next; $$tagInfo{SubDirectory}{TagTable} or next; $subTablePtr = Image::ExifTool::GetTagTable($$tagInfo{SubDirectory}{TagTable}); } $tagInfo = $$subTablePtr{$mandTag} or warn("WriteIPTC: Internal error 2\n"), next; my $value = $$mandatory{$mandTag}; $et->VerboseValue("+ IPTC:$$tagInfo{Name}", $value, ' (mandatory)'); # apply necessary format conversions FormatIPTC($et, $tagInfo, \$value, \$xlat, $lastRec); $len = length $value; # generate our new entry my $entry = pack("CCCn", 0x1c, $lastRec, $mandTag, length($value)); $newData .= $entry . $value; # add entry to new IPTC data # (don't mark as changed if just mandatory tags changed) # ++$$et{CHANGED}; } } } last unless defined $newRec; $lastRec = $newRec; $lastRecPos = length $newData; $allMandatory = 1; } unless ($addNow) { # compare current entry with entry next in line to write out # (write out our tags in numerical order even though # this isn't required by the IPTC spec) last if defined $rec and $rec <= $newRec; $tagInfo = ${$iptcInfo{$newRec}}[0]; } my $newTag = $$tagInfo{TagID}; my $nvHash = $et->GetNewValueHash($tagInfo); # only add new values if... my ($doSet, @values); my $found = $foundRec{$newRec}->{$newTag} || 0; if ($found & 0x02) { # ...tag existed before and was deleted (unless we already added it) $doSet = 1 unless $found & 0x04; } elsif ($$tagInfo{List}) { # ...tag is List and it existed before or we are creating it $doSet = 1 if $found ? not $$nvHash{CreateOnly} : $$nvHash{IsCreating}; } else { # ...tag didn't exist before and we are creating it $doSet = 1 if not $found and $$nvHash{IsCreating}; } if ($doSet) { @values = $et->GetNewValue($nvHash); @values and $foundRec{$newRec}->{$newTag} = $found | 0x04; # write tags for each value in list my $value; foreach $value (@values) { $et->VerboseValue("+ $$dirInfo{DirName}:$$tagInfo{Name}", $value); # reset allMandatory flag if a non-mandatory tag is written if ($allMandatory) { my $mandatory = $mandatory{$newRec}; $allMandatory = 0 unless $mandatory and $$mandatory{$newTag}; } # apply necessary format conversions FormatIPTC($et, $tagInfo, \$value, \$xlat, $newRec); # (note: IPTC string values are NOT null terminated) $len = length $value; # generate our new entry my $entry = pack("CCC", 0x1c, $newRec, $newTag); if ($len <= 0x7fff) { $entry .= pack("n", $len); } else { # extended dataset tag $entry .= pack("nN", 0x8004, $len); } $newData .= $entry . $value; # add entry to new IPTC data ++$$et{CHANGED}; } } # continue on with regular programming if done adding tag now if ($addNow) { undef $addNow; next if $writeRec; last; } # remove this tagID from the sorted write list shift @{$iptcInfo{$newRec}}; shift @recordList unless @{$iptcInfo{$newRec}}; } if ($writeRec) { # all done if no more records to write last unless defined $rec; # update last record variables $lastRec = $rec; $lastRecPos = length $newData; $allMandatory = 1; } } # set flag indicating we found this tag $foundRec{$rec}->{$tag} = ($foundRec{$rec}->{$tag} || 0) || 0x01; # write out this record unless we are setting it with a new value $tagInfo = $set{$rec}->{$tag}; if ($tagInfo) { my $nvHash = $et->GetNewValueHash($tagInfo); $len = $pos - $valuePtr; my $val = substr($$dataPt, $valuePtr, $len); # remove null terminator if it exists (written by braindead software like Picasa 2.0) $val =~ s/\0+$// if $$tagInfo{Format} and $$tagInfo{Format} =~ /^string/; my $oldXlat = $xlat; FormatIPTC($et, $tagInfo, \$val, \$xlat, $rec, 1); if ($et->IsOverwriting($nvHash, $val)) { $xlat = $oldXlat; # don't change translation (not writing this value) $et->VerboseValue("- $$dirInfo{DirName}:$$tagInfo{Name}", $val); ++$$et{CHANGED}; # set deleted flag to indicate we found and deleted this tag $foundRec{$rec}->{$tag} |= 0x02; # increment allMandatory flag to indicate a tag was removed $allMandatory and ++$allMandatory; # write this tag now if overwriting an existing value if ($$nvHash{Value} and @{$$nvHash{Value}} and @recordList and $recordList[0] == $rec and not $foundRec{$rec}->{$tag} & 0x04) { $addNow = $tagInfo; } next; } } elsif ($rec == 1 and $tag == 90) { # handle CodedCharacterSet tag my $val = substr($$dataPt, $valuePtr, $pos - $valuePtr); $xlat = HandleCodedCharset($et, $val); } # reset allMandatory flag if a non-mandatory tag is written if ($allMandatory) { my $mandatory = $mandatory{$rec}; unless ($mandatory and $$mandatory{$tag}) { $allMandatory = 0; } } # write out the record $newData .= substr($$dataPt, $tail, $pos-$tail); } # make sure the rest of the data is zero if ($tail < $dirEnd) { my $pad = substr($$dataPt, $tail, $dirEnd-$tail); if ($pad =~ /[^\0]/) { return undef if $et->Warn('Unrecognized data in IPTC padding', 2); } } return $newData; } #------------------------------------------------------------------------------ # Write IPTC data record and calculate NewIPTCDigest # Inputs: 0) ExifTool object ref, 1) source dirInfo ref, 2) tag table ref # Returns: IPTC data block (may be empty if no IPTC data) # Notes: Increments ExifTool CHANGED flag for each tag changed sub WriteIPTC($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access to autoload this package my $newData = DoWriteIPTC($et, $dirInfo, $tagTablePtr); # calculate standard IPTC digests only if we are writing or deleting # Photoshop:IPTCDigest with a value of 'new' or 'old' while ($Image::ExifTool::Photoshop::iptcDigestInfo) { my $nvHash = $$et{NEW_VALUE}{$Image::ExifTool::Photoshop::iptcDigestInfo}; last unless defined $nvHash; last unless IsStandardIPTC($et->MetadataPath()); my @values = $et->GetNewValue($nvHash); push @values, @{$$nvHash{DelValue}} if $$nvHash{DelValue}; my $new = grep /^new$/, @values; my $old = grep /^old$/, @values; last unless $new or $old; unless (eval { require Digest::MD5 }) { $et->Warn('Digest::MD5 must be installed to calculate IPTC digest'); last; } my $dataPt; if ($new) { if (defined $newData) { $dataPt = \$newData; } else { $dataPt = $$dirInfo{DataPt}; if ($$dirInfo{DirStart} or length($$dataPt) != $$dirInfo{DirLen}) { my $buff = substr($$dataPt, $$dirInfo{DirStart}, $$dirInfo{DirLen}); $dataPt = \$buff; } } # set NewIPTCDigest data member unless IPTC is being deleted $$et{NewIPTCDigest} = Digest::MD5::md5($$dataPt) if length $$dataPt; } if ($old) { if ($new and not defined $newData) { $$et{OldIPTCDigest} = $$et{NewIPTCDigest}; } elsif ($$dirInfo{DataPt}) { #(may be undef if creating new IPTC) $dataPt = $$dirInfo{DataPt}; if ($$dirInfo{DirStart} or length($$dataPt) != $$dirInfo{DirLen}) { my $buff = substr($$dataPt, $$dirInfo{DirStart}, $$dirInfo{DirLen}); $dataPt = \$buff; } $$et{OldIPTCDigest} = Digest::MD5::md5($$dataPt) if length $$dataPt; } } last; } return $newData; } 1; # end __END__ =head1 NAME Image::ExifTool::WriteIPTC.pl - Write IPTC meta information =head1 SYNOPSIS This file is autoloaded by Image::ExifTool::IPTC. =head1 DESCRIPTION This file contains routines to write IPTC metadata, plus a few other seldom-used routines. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::IPTC(3pm)|Image::ExifTool::IPTC>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/WritePDF.pl�������������������������������������������������000644 �000765 �000024 �00000071473 12645453320 021705� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: WritePDF.pl # # Description: Write PDF meta information # # Revisions: 12/08/2007 - P. Harvey Created # # References: 1) http://partners.adobe.com/public/developer/pdf/index_reference.html # # Notes: The special "PDF-update" group can be deleted to revert exiftool updates #------------------------------------------------------------------------------ package Image::ExifTool::PDF; use strict; use vars qw($lastFetched); sub WriteObject($$); sub EncodeString($); sub CryptObject($); # comments to mark beginning and end of ExifTool incremental update my $beginComment = '%BeginExifToolUpdate'; my $endComment = '%EndExifToolUpdate '; my $keyExt; # crypt key extension my $pdfVer; # version of PDF file we are currently writing # internal tags used in dictionary objects my %myDictTags = ( _tags => 1, _stream => 1, _decrypted => 1, _needCrypt => 1, _filtered => 1, _entry_size => 1, _table => 1, ); # map for directories that we can add my %pdfMap = ( XMP => 'PDF', ); #------------------------------------------------------------------------------ # Validate raw PDF values for writing (string date integer real boolean name) # Inputs: 0) ExifTool object ref, 1) tagInfo hash ref, 2) raw value ref # Returns: error string or undef (and possibly changes value) on success sub CheckPDF($$$) { my ($et, $tagInfo, $valPtr) = @_; my $format = $$tagInfo{Writable} || $tagInfo->{Table}->{WRITABLE}; if (not $format) { return 'No writable format'; } elsif ($format eq 'string') { # (encode later because list-type string tags need to be encoded as a unit) } elsif ($format eq 'date') { # be flexible about this for now return 'Bad date format' unless $$valPtr =~ /^\d{4}/; } elsif ($format eq 'integer') { return 'Not an integer' unless Image::ExifTool::IsInt($$valPtr); } elsif ($format eq 'real') { return 'Not a real number' unless $$valPtr =~ /^[+-]?(?=\d|\.\d)\d*(\.\d*)?$/; } elsif ($format eq 'boolean') { $$valPtr = ($$valPtr and $$valPtr !~ /^f/i) ? 'true' : 'false'; } elsif ($format eq 'name') { return 'Invalid PDF name' if $$valPtr =~ /\0/; } else { return "Invalid PDF format '$format'"; } return undef; # value is OK } #------------------------------------------------------------------------------ # Format value for writing to PDF file # Inputs: 0) ExifTool ref, 1) value, 2) format string (string,date,integer,real,boolean,name) # Returns: formatted value or undef on error # Notes: Called at write time, so $pdfVer may be checked sub WritePDFValue($$$) { my ($et, $val, $format) = @_; if (not $format) { return undef; } elsif ($format eq 'string') { # encode as UCS2 if it contains any special characters $val = "\xfe\xff" . $et->Encode($val,'UCS2','MM') if $val =~ /[\x80-\xff]/; EncodeString(\$val); } elsif ($format eq 'date') { # convert date to "D:YYYYmmddHHMMSS+-HH'MM'" format $val =~ s/([-+]\d{2}):(\d{2})/$1'$2'/; # change timezone delimiters if necessary $val =~ tr/ ://d; # remove spaces and colons $val = "D:$val"; # add leading "D:" EncodeString(\$val); } elsif ($format =~ /^(integer|real|boolean)$/) { # no reformatting necessary } elsif ($format eq 'name') { return undef if $val =~ /\0/; if ($pdfVer >= 1.2) { $val =~ s/([\t\n\f\r ()<>[\]{}\/%#])/sprintf('#%.2x',ord $1)/sge; } else { return undef if $val =~ /[\t\n\f\r ()<>[\]{}\/%]/; } $val = "/$val"; # add leading '/' } else { return undef; } return $val; } #------------------------------------------------------------------------------ # Encode PDF string # Inputs: 0) reference to PDF string # Returns: (updates string with encoded data) sub EncodeString($) { my $strPt = shift; if (ref $$strPt eq 'ARRAY') { my $str; foreach $str (@{$$strPt}) { EncodeString(\$str); } return; } Crypt($strPt, $keyExt, 1); # encrypt if necessary # encode as hex if we have any control characters (except tab) if ($$strPt=~/[\x00-\x08\x0a-\x1f\x7f\xff]/) { # encode as hex my $str=''; my $len = length $$strPt; my $i = 0; for (;;) { my $n = $len - $i or last; $n = 40 if $n > 40; # break into reasonable-length lines $str .= $/ if $i; $str .= unpack('H*', substr($$strPt, $i, $n)); $i += $n; } $$strPt = "<$str>"; } else { $$strPt =~ s/([()\\])/\\$1/g; # must escape round brackets and backslashes $$strPt = "($$strPt)"; } } #------------------------------------------------------------------------------ # Encrypt an object # Inputs: 0) PDF object (encrypts in place) # Notes: Encrypts according to "_needCrypt" dictionary entry, # then deletes "_needCrypt" when done sub CryptObject($) { my $obj = $_[0]; if (not ref $obj) { # only literal strings and hex strings are encrypted if ($obj =~ /^[(<]/) { undef $lastFetched; # (reset this just in case) my $val = ReadPDFValue($obj); EncodeString(\$val); $_[0] = $val; } } elsif (ref $obj eq 'HASH') { my $tag; my $needCrypt = $$obj{_needCrypt}; foreach $tag (keys %$obj) { next if $myDictTags{$tag}; # re-encrypt necessary objects only (others are still encrypted) # (this is really annoying, but is necessary because objects stored # in encrypted streams are decrypted when extracting, but strings stored # as direct objects are decrypted later since they must be decoded # before being decrypted) if ($needCrypt) { next unless defined $$needCrypt{$tag} ? $$needCrypt{$tag} : $$needCrypt{'*'}; } CryptObject($$obj{$tag}); } delete $$obj{_needCrypt}; # avoid re-re-crypting } elsif (ref $obj eq 'ARRAY') { my $val; foreach $val (@$obj) { CryptObject($val); } } } #------------------------------------------------------------------------------ # Get free entries from xref stream dictionary that we wrote previously # Inputs: 0) xref dictionary reference # Returns: free entry hash (keys are object numbers, values are xref entry list refs) sub GetFreeEntries($) { my $dict = shift; my %xrefFree; # from the start we have only written xref stream entries in 'CNn' format, # so we can simplify things for now and only support this type of entry my $w = $$dict{W}; if (ref $w eq 'ARRAY' and "@$w" eq '1 4 2') { my $size = $$dict{_entry_size}; # this will be 7 for 'CNn' my $index = $$dict{Index}; my $len = length $$dict{_stream}; # scan the table for free objects my $num = scalar(@$index) / 2; my $pos = 0; my ($i, $j); for ($i=0; $i<$num; ++$i) { my $start = $$index[$i*2]; my $count = $$index[$i*2+1]; for ($j=0; $j<$count; ++$j) { last if $pos + $size > $len; my @t = unpack("x$pos CNn", $$dict{_stream}); # add entry if object was free $xrefFree{$start+$j} = [ $t[1], $t[2], 'f' ] if $t[0] == 0; $pos += $size; # step to next entry } } } return \%xrefFree; } #------------------------------------------------------------------------------ # Write PDF object # Inputs: 0) output file or scalar ref, 1) PDF object # Returns: true on success # Notes: inserts white space before object, but none afterward sub WriteObject($$) { my ($outfile, $obj) = @_; if (ref $obj eq 'SCALAR') { Write($outfile, ' ', $$obj) or return 0; } elsif (ref $obj eq 'ARRAY') { # write array Write($outfile, @$obj > 10 ? $/ : ' ', '[') or return 0; my $item; foreach $item (@$obj) { WriteObject($outfile, $item) or return 0; } Write($outfile, ' ]') or return 0; } elsif (ref $obj eq 'HASH') { # write dictionary my $tag; Write($outfile, $/, '<<') or return 0; # prepare object as required if it has a stream if ($$obj{_stream}) { # encrypt stream if necessary (must be done before determining Length) CryptStream($obj, $keyExt) if $$obj{_decrypted}; # write "Length" entry in dictionary $$obj{Length} = length $$obj{_stream}; push @{$$obj{_tags}}, 'Length'; # delete Filter-related entries since we don't yet write filtered streams delete $$obj{Filter}; delete $$obj{DecodeParms}; delete $$obj{DL}; } # don't write my internal entries my %wrote = %myDictTags; # write tags in original order, adding new ones later alphabetically foreach $tag (@{$$obj{_tags}}, sort keys %$obj) { # ignore already-written or missing entries next if $wrote{$tag} or not defined $$obj{$tag}; Write($outfile, $/, "/$tag") or return 0; WriteObject($outfile, $$obj{$tag}) or return 0; $wrote{$tag} = 1; } Write($outfile, $/, '>>') or return 0; if ($$obj{_stream}) { # write object stream # (a single 0x0d may not follow 'stream', so use 0x0d+0x0a here to be sure) Write($outfile, $/, "stream\x0d\x0a") or return 0; Write($outfile, $$obj{_stream}, $/, 'endstream') or return 0; } } else { # write string, number, name or object reference Write($outfile, ' ', $obj); } return 1; } #------------------------------------------------------------------------------ # Write PDF File # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if not valid PDF file, -1 on write error # Notes: dictionary structure: Main --+--> Info # +--> Root --> Metadata sub WritePDF($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $outfile = $$dirInfo{OutFile}; my ($buff, %capture, %newXRef, %newObj, $objRef); my ($out, $id, $gen, $obj); # make sure this is a PDF file my $pos = $raf->Tell(); $raf->Read($buff, 10) >= 8 or return 0; $buff =~ /^%PDF-(\d+\.\d+)/ or return 0; $raf->Seek($pos, 0); # create a new ExifTool object and use it to read PDF and XMP information my $newTool = new Image::ExifTool; $newTool->Options(List => 1); $newTool->Options(Password => $et->Options('Password')); $$newTool{PDF_CAPTURE} = \%capture; my $info = $newTool->ImageInfo($raf, 'XMP', 'PDF:*', 'Error', 'Warning'); # not a valid PDF file unless we got a version number # (note: can't just check $$info{PDFVersion} due to possibility of XMP-pdf:PDFVersion) my $vers = $newTool->GetInfo('PDF:PDFVersion'); ($pdfVer) = values %$vers; $pdfVer or $et->Error('Missing PDF:PDFVersion'), return 0; # check version number if ($pdfVer > 1.7) { if ($pdfVer >= 2.0) { $et->Error("Can't yet write PDF version $pdfVer"); # (future major version changes) return 1; } $et->Warn("ExifTool is untested with PDF version $pdfVer files", 1); } # fail if we had any serious errors while extracting information if ($capture{Error} or $$info{Error}) { $et->Error($capture{Error} || $$info{Error}); return 1; } # make sure we have everything we need to rewrite this file foreach $obj (qw(Main Root xref)) { next if $capture{$obj}; # any warning we received may give a clue about why this object is missing $et->Error($$info{Warning}) if $$info{Warning}; $et->Error("Can't find $obj object"); return 1; } $et->InitWriteDirs(\%pdfMap, 'XMP'); # copy file up to start of previous exiftool update or end of file # (comment, startxref & EOF with 11-digit offsets and 2-byte newlines is 63 bytes) $raf->Seek(-64,2) and $raf->Read($buff,64) and $raf->Seek(0,0) or return -1; my $rtn = 1; my $prevUpdate; # (now $endComment is before "startxref", but pre-7.41 we wrote it after the EOF) if ($buff =~ /$endComment(\d+)\s+(startxref\s+\d+\s+%%EOF\s+)?$/s) { $prevUpdate = $1; # rewrite the file up to the original EOF Image::ExifTool::CopyBlock($raf, $outfile, $prevUpdate) or $rtn = -1; # verify that we are now at the start of an ExifTool update unless ($raf->Read($buff, length $beginComment) and $buff eq $beginComment) { $et->Error('Previous ExifTool update is corrupted'); return $rtn; } $raf->Seek($prevUpdate, 0) or $rtn = -1; if ($$et{DEL_GROUP}{'PDF-update'}) { $et->VPrint(0, " Reverted previous ExifTool updates\n"); ++$$et{CHANGED}; return $rtn; } } elsif ($$et{DEL_GROUP}{'PDF-update'}) { $et->Error('File contains no previous ExifTool update'); return $rtn; } else { # rewrite the whole file while ($raf->Read($buff, 65536)) { Write($outfile, $buff) or $rtn = -1; } } $out = $et->Options('TextOut') if $et->Options('Verbose'); # # create our new PDF objects to write # my $xref = $capture{xref}; my $mainDict = $capture{Main}; my $metaRef = $capture{Root}->{Metadata}; my $nextObject; # start by finding reference for info object in case it was deleted # in a previous edit so we can re-use it here if adding PDF Info my $prevInfoRef; if ($prevUpdate) { unless ($capture{Prev}) { $et->Error("Can't locate trailer dictionary prior to last edit"); return $rtn; } $prevInfoRef = $capture{Prev}->{Info}; # start from previous size so the xref table doesn't continue # to grow if we repeatedly add and delete the Metadata object $nextObject = $capture{Prev}->{Size}; # don't re-use Meta reference if object was added in a previous update undef $metaRef if $metaRef and $$metaRef=~/^(\d+)/ and $1 >= $nextObject; } else { $prevInfoRef = $$mainDict{Info}; $nextObject = $$mainDict{Size}; } # delete entire PDF group if specified my $infoChanged = 0; if ($$et{DEL_GROUP}{PDF} and $capture{Info}) { delete $capture{Info}; $info = { XMP => $$info{XMP} }; # remove extracted PDF tags print $out " Deleting PDF Info dictionary\n" if $out; ++$infoChanged; } # create new Info dictionary if necessary $capture{Info} = { _tags => [ ] } unless $capture{Info}; my $infoDict = $capture{Info}; # must pre-determine Info reference to be used in encryption my $infoRef = $prevInfoRef || \ "$nextObject 0 R"; $keyExt = $$infoRef; # must encrypt all values in dictionary if they came from an encrypted stream CryptObject($infoDict) if $$infoDict{_needCrypt}; # must set line separator before calling WritePDFValue() local $/ = $capture{newline}; # rewrite PDF Info tags my $newTags = $et->GetNewTagInfoHash(\%Image::ExifTool::PDF::Info); my $tagID; foreach $tagID (sort keys %$newTags) { my $tagInfo = $$newTags{$tagID}; my $nvHash = $et->GetNewValueHash($tagInfo); my (@vals, $deleted); my $tag = $$tagInfo{Name}; my $val = $$info{$tag}; my $tagKey = $tag; unless (defined $val) { # must check for tag key with copy number ($tagKey) = grep /^$tag/, keys %$info; $val = $$info{$tagKey} if $tagKey; } if (defined $val) { my @oldVals; if (ref $val eq 'ARRAY') { @oldVals = @$val; $val = shift @oldVals; } for (;;) { if ($et->IsOverwriting($nvHash, $val) > 0) { $deleted = 1; $et->VerboseValue("- PDF:$tag", $val); ++$infoChanged; } else { push @vals, $val; } last unless @oldVals; $val = shift @oldVals; } # don't write this out if we deleted all values delete $$infoDict{$tagID} unless @vals; } elsif ($$nvHash{EditOnly}) { next; } # decide whether we want to write this tag # (native PDF information is always preferred, so don't check IsCreating) next unless $deleted or $$tagInfo{List} or not exists $$infoDict{$tagID}; # add new values to existing ones my @newVals = $et->GetNewValue($nvHash); if (@newVals) { push @vals, @newVals; ++$infoChanged; if ($out) { foreach $val (@newVals) { $et->VerboseValue("+ PDF:$tag", $val); } } } unless (@vals) { # remove this entry from the Info dictionary if no values remain delete $$infoDict{$tagID}; next; } # format value(s) for writing to PDF file my $writable = $$tagInfo{Writable} || $Image::ExifTool::PDF::Info{WRITABLE}; if (not $$tagInfo{List}) { $val = WritePDFValue($et, shift(@vals), $writable); } elsif ($$tagInfo{List} eq 'array') { foreach $val (@vals) { $val = WritePDFValue($et, $val, $writable); defined $val or undef(@vals), last; } $val = @vals ? \@vals : undef; } else { $val = WritePDFValue($et, join($et->Options('ListSep'), @vals), $writable); } if (defined $val) { $$infoDict{$tagID} = $val; ++$infoChanged; } else { $et->Warn("Error converting $$tagInfo{Name} value"); } } if ($infoChanged) { $$et{CHANGED} += $infoChanged; } elsif ($prevUpdate) { # must still write Info dictionary if it was previously updated my $oldPos = LocateObject($xref, $$infoRef); $infoChanged = 1 if $oldPos and $oldPos > $prevUpdate; } # create new Info dictionary if necessary if ($infoChanged) { # increment object count if we used a new object here if (scalar(keys %{$capture{Info}}) > 1) { $newObj{$$infoRef} = $capture{Info};# save to write later $$mainDict{Info} = $infoRef; # add reference to trailer dictionary ++$nextObject unless $prevInfoRef; } else { # remove Info from Main (trailer) dictionary delete $$mainDict{Info}; # write free entry in xref table if Info existed prior to all edits $newObj{$$infoRef} = '' if $prevInfoRef; } } # rewrite XMP my %xmpInfo = ( DataPt => $$info{XMP}, Parent => 'PDF', ); my $xmpTable = Image::ExifTool::GetTagTable('Image::ExifTool::XMP::Main'); my $oldChanged = $$et{CHANGED}; my $newXMP = $et->WriteDirectory(\%xmpInfo, $xmpTable); $newXMP = $$info{XMP} ? ${$$info{XMP}} : '' unless defined $newXMP; # WriteDirectory() will increment CHANGED erroneously if non-existent # XMP is deleted as a block -- so check for this unless ($newXMP or $$info{XMP}) { $$et{CHANGED} = $oldChanged; $et->VPrint(0, " (XMP not changed -- still empty)\n"); } my ($metaChanged, $rootChanged); if ($$et{CHANGED} != $oldChanged and defined $newXMP) { $metaChanged = 1; } elsif ($prevUpdate and $capture{Root}->{Metadata}) { # must still write Metadata dictionary if it was previously updated my $oldPos = LocateObject($xref, ${$capture{Root}->{Metadata}}); $metaChanged = 1 if $oldPos and $oldPos > $prevUpdate; } if ($metaChanged) { if ($newXMP) { unless ($metaRef) { # allocate new PDF object $metaRef = \ "$nextObject 0 R"; ++$nextObject; $capture{Root}->{Metadata} = $metaRef; $rootChanged = 1; # set flag to replace Root dictionary } # create the new metadata dictionary to write later $newObj{$$metaRef} = { Type => '/Metadata', Subtype => '/XML', # Length => length $newXMP, (set by WriteObject) _tags => [ qw(Type Subtype) ], _stream => $newXMP, _decrypted => 1, # (this will be ignored if EncryptMetadata is false) }; } elsif ($capture{Root}->{Metadata}) { # free existing metadata object $newObj{${$capture{Root}->{Metadata}}} = ''; delete $capture{Root}->{Metadata}; $rootChanged = 1; # set flag to replace Root dictionary } } # add new Root dictionary if necessary my $rootRef = $$mainDict{Root}; unless ($rootRef) { $et->Error("Can't find Root dictionary"); return $rtn; } if (not $rootChanged and $prevUpdate) { # must still write Root dictionary if it was previously updated my $oldPos = LocateObject($xref, $$rootRef); $rootChanged = 1 if $oldPos and $oldPos > $prevUpdate; } $newObj{$$rootRef} = $capture{Root} if $rootChanged; # # write incremental update if anything was changed # if ($$et{CHANGED}) { # remember position of original EOF my $oldEOF = Tell($outfile); Write($outfile, $beginComment) or $rtn = -1; # write new objects foreach $objRef (sort keys %newObj) { $objRef =~ /^(\d+) (\d+)/ or $rtn = -1, last; ($id, $gen) = ($1, $2); if (not $newObj{$objRef}) { ++$gen if $gen < 65535; # write free entry in xref table $newXRef{$id} = [ 0, $gen, 'f' ]; next; } # create new entry for xref table $newXRef{$id} = [ Tell($outfile) + length($/), $gen, 'n' ]; $keyExt = "$id $gen obj"; # (must set for stream encryption) Write($outfile, $/, $keyExt) or $rtn = -1; WriteObject($outfile, $newObj{$objRef}) or $rtn = -1; Write($outfile, $/, 'endobj') or $rtn = -1; } # Prev points to old xref table $$mainDict{Prev} = $capture{startxref} unless $prevUpdate; # add xref entry for head of free-object list $newXRef{0} = [ 0, 65535, 'f' ]; # must insert free xref entries from previous exiftool update if applicable if ($prevUpdate) { my $mainFree; # extract free entries from our previous Main xref stream if ($$mainDict{Type} and $$mainDict{Type} eq '/XRef') { $mainFree = GetFreeEntries($xref->{dicts}->[0]); } else { # free entries from Main xref table already captured for us $mainFree = $capture{mainFree}; } foreach $id (sort { $a <=> $b } keys %$mainFree) { $newXRef{$id} = $$mainFree{$id} unless $newXRef{$id}; } } # connect linked list of free object in our xref table my $prevFree = 0; foreach $id (sort { $b <=> $a } keys %newXRef) { # (reverse sort) next unless $newXRef{$id}->[2] eq 'f'; # skip if not free # no need to add free entry for objects added by us # in previous edits then freed again if ($id >= $nextObject) { delete $newXRef{$id}; # Note: deleting newXRef entry! next; } $newXRef{$id}->[0] = $prevFree; $prevFree = $id; } # prepare our main dictionary for writing $$mainDict{Size} = $nextObject; # update number of objects # must change the ID if it exists if (ref $$mainDict{ID} eq 'ARRAY' and @{$$mainDict{ID}} > 1) { # increment first byte since this is an easy change to make $id = $mainDict->{ID}->[1]; if ($id =~ /^<([0-9a-f]{2})/i) { my $byte = unpack('H2',chr((hex($1) + 1) & 0xff)); substr($id, 1, 2) = $byte; } elsif ($id =~ /^\((.)/s and $1 ne '\\' and $1 ne ')' and $1 ne '(') { my $ch = chr((ord($1) + 1) & 0xff); # avoid generating characters that could cause problems $ch = 'a' if $ch =~ /[()\\\x00-\x08\x0a-\x1f\x7f\xff]/; substr($id, 1, 1) = $ch; } $mainDict->{ID}->[1] = $id; } # remember position of xref table in file (we will write this next) my $startxref = Tell($outfile) + length($/); # must write xref as a stream in xref-stream-only files if ($$mainDict{Type} and $$mainDict{Type} eq '/XRef') { # create entry for the xref stream object itself $newXRef{$nextObject++} = [ Tell($outfile) + length($/), 0, 'n' ]; $$mainDict{Size} = $nextObject; # create xref stream and Index entry $$mainDict{W} = [ 1, 4, 2 ]; # int8u, int32u, int16u ('CNn') $$mainDict{Index} = [ ]; $$mainDict{_stream} = ''; my @ids = sort { $a <=> $b } keys %newXRef; while (@ids) { my $startID = $ids[0]; for (;;) { $id = shift @ids; my ($pos, $gen, $type) = @{$newXRef{$id}}; if ($pos > 0xffffffff) { $et->Error('Huge files not yet supported'); last; } $$mainDict{_stream} .= pack('CNn', $type eq 'f' ? 0 : 1, $pos, $gen); last if not @ids or $ids[0] != $id + 1; } # add Index entries for this section of the xref stream push @{$$mainDict{Index}}, $startID, $id - $startID + 1; } # write the xref stream object $keyExt = "$id 0 obj"; # (set anyway, but xref stream should NOT be encrypted) Write($outfile, $/, $keyExt) or $rtn = -1; WriteObject($outfile, $mainDict) or $rtn = -1; Write($outfile, $/, 'endobj') or $rtn = -1; } else { # write new xref table Write($outfile, $/, 'xref', $/) or $rtn = -1; # lines must be exactly 20 bytes, so pad newline if necessary my $endl = (length($/) == 1 ? ' ' : '') . $/; my @ids = sort { $a <=> $b } keys %newXRef; while (@ids) { my $startID = $ids[0]; $buff = ''; for (;;) { $id = shift @ids; $buff .= sprintf("%.10d %.5d %s%s", @{$newXRef{$id}}, $endl); last if not @ids or $ids[0] != $id + 1; } # write this (contiguous-numbered object) section of the xref table Write($outfile, $startID, ' ', $id - $startID + 1, $/, $buff) or $rtn = -1; } # write main (trailer) dictionary Write($outfile, 'trailer') or $rtn = -1; WriteObject($outfile, $mainDict) or $rtn = -1; } # write trailing comment (marker to allow edits to be reverted) Write($outfile, $/, $endComment, $oldEOF, $/) or $rtn = -1; # write pointer to main xref table and EOF marker Write($outfile, 'startxref', $/, $startxref, $/, '%%EOF', $/) or $rtn = -1; } elsif ($prevUpdate) { # nothing new changed, so copy over previous incremental update $raf->Seek($prevUpdate, 0) or $rtn = -1; while ($raf->Read($buff, 65536)) { Write($outfile, $buff) or $rtn = -1; } } if ($rtn > 0 and $$et{CHANGED} and ($$et{DEL_GROUP}{PDF} or $$et{DEL_GROUP}{XMP})) { $et->Warn('ExifTool PDF edits are reversible. Deleted tags may be recovered!', 1); } undef $newTool; undef %capture; return $rtn; } 1; # end __END__ =head1 NAME Image::ExifTool::WritePDF.pl - Write PDF meta information =head1 SYNOPSIS These routines are autoloaded by Image::ExifTool::PDF. =head1 DESCRIPTION This file contains routines to write PDF metadata. =head1 NOTES When writing a PDF, exiftool does not modify the existing data. Instead, the PDF file is appended with an incremental update which can easily be removed to revert the file (by using ExifTool to delete the special C<PDF-update> pseudo group). =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://partners.adobe.com/public/developer/pdf/index_reference.html> =back =head1 SEE ALSO L<Image::ExifTool::PDF(3pm)|Image::ExifTool::PDF>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/WritePhotoshop.pl�������������������������������������������000644 �000765 �000024 �00000025042 12642461341 023245� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: WritePhotoshop.pl # # Description: Write Photoshop IRB meta information # # Revisions: 12/17/2004 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::Photoshop; use strict; #------------------------------------------------------------------------------ # Strip resource name from value prepare resource name for writing into IRB # Inputs: 0) tagInfo ref, 1) resource name (padded pascal string), 2) new value ref # Returns: none (updates name and value if necessary) sub SetResourceName($$$) { my ($tagInfo, $name, $valPt) = @_; my $setName = $$tagInfo{SetResourceName}; if (defined $setName) { # extract resource name from value if ($$valPt =~ m{.*/#(.{0,255})#/$}s) { $name = $1; # strip name from value $$valPt = substr($$valPt, 0, -4 - length($name)); } elsif ($setName eq '1') { return; # use old name } else { $name = $setName; } # convert to padded pascal string $name = chr(length $name) . $name; $name .= "\0" if length($name) & 0x01; $_[1] = $name; # return new name } } #------------------------------------------------------------------------------ # Write Photoshop IRB resource # Inputs: 0) ExifTool object reference, 1) source dirInfo reference, # 2) tag table reference # Returns: IRB resource data (may be empty if no Photoshop data) # Notes: Increments ExifTool CHANGED flag for each tag changed sub WritePhotoshop($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access to autoload this package my $dataPt = $$dirInfo{DataPt}; unless ($dataPt) { my $emptyData = ''; $dataPt = \$emptyData; } my $start = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || (length($$dataPt) - $start); my $dirEnd = $start + $dirLen; my $newData = ''; # make a hash of new tag info, keyed on tagID my $newTags = $et->GetNewTagInfoHash($tagTablePtr); my ($addDirs, $editDirs) = $et->GetAddDirHash($tagTablePtr); SetByteOrder('MM'); # Photoshop is always big-endian # # rewrite existing tags in the old directory, deleting ones as necessary # (the Photoshop directory entries aren't in any particular order) # # Format: 0) Type, 4 bytes - '8BIM' (or the rare 'PHUT', 'DCSR' or 'AgHg') # 1) TagID,2 bytes # 2) Name, pascal string padded to even no. bytes # 3) Size, 4 bytes - N # 4) Data, N bytes my ($pos, $value, $size, $tagInfo, $tagID); for ($pos=$start; $pos+8<$dirEnd; $pos+=$size) { # each entry must be on same even byte boundary as directory start ++$pos if ($pos ^ $start) & 0x01; my $type = substr($$dataPt, $pos, 4); if ($type !~ /^(8BIM|PHUT|DCSR|AgHg)$/) { $et->Error("Bad Photoshop IRB resource"); undef $newData; last; } $tagID = Get16u($dataPt, $pos + 4); # get resource block name (pascal string padded to an even # of bytes) my $namelen = 1 + Get8u($dataPt, $pos + 6); ++$namelen if $namelen & 0x01; if ($pos + $namelen + 10 > $dirEnd) { $et->Error("Bad APP13 resource block"); undef $newData; last; } my $name = substr($$dataPt, $pos + 6, $namelen); $size = Get32u($dataPt, $pos + 6 + $namelen); $pos += $namelen + 10; if ($size + $pos > $dirEnd) { $et->Error("Bad APP13 resource data size $size"); undef $newData; last; } if ($$newTags{$tagID} and $type eq '8BIM') { $tagInfo = $$newTags{$tagID}; delete $$newTags{$tagID}; my $nvHash = $et->GetNewValueHash($tagInfo); # check to see if we are overwriting this tag $value = substr($$dataPt, $pos, $size); my $isOverwriting = $et->IsOverwriting($nvHash, $value); # handle special 'new' and 'old' values for IPTCDigest if (not $isOverwriting and $tagInfo eq $iptcDigestInfo) { if (grep /^new$/, @{$$nvHash{DelValue}}) { $isOverwriting = 1 if $$et{NewIPTCDigest} and $$et{NewIPTCDigest} eq $value; } if (grep /^old$/, @{$$nvHash{DelValue}}) { $isOverwriting = 1 if $$et{OldIPTCDigest} and $$et{OldIPTCDigest} eq $value; } } if ($isOverwriting) { $et->VerboseValue("- Photoshop:$$tagInfo{Name}", $value); # handle IPTCDigest specially because we want to write it last # so the new IPTC digest will be known if ($tagInfo eq $iptcDigestInfo) { $$newTags{$tagID} = $tagInfo; # add later $value = undef; } else { $value = $et->GetNewValue($nvHash); } ++$$et{CHANGED}; next unless defined $value; # next if tag is being deleted # set resource name if necessary SetResourceName($tagInfo, $name, \$value); $et->VerboseValue("+ Photoshop:$$tagInfo{Name}", $value); } } else { if ($type eq '8BIM') { $tagInfo = $$editDirs{$tagID}; unless ($tagInfo) { # process subdirectory anyway if writable (except EXIF to avoid recursion) # --> this allows IPTC to be processed if found here in TIFF images my $tmpInfo = $et->GetTagInfo($tagTablePtr, $tagID); if ($tmpInfo and $$tmpInfo{SubDirectory} and $tmpInfo->{SubDirectory}->{TagTable} ne 'Image::ExifTool::Exif::Main') { my $table = Image::ExifTool::GetTagTable($tmpInfo->{SubDirectory}->{TagTable}); $tagInfo = $tmpInfo if $$table{WRITE_PROC}; } } } if ($tagInfo) { $$addDirs{$tagID} and delete $$addDirs{$tagID}; my %subdirInfo = ( DataPt => $dataPt, DirStart => $pos, DataLen => $dirLen, DirLen => $size, Parent => $$dirInfo{DirName}, ); my $subTable = Image::ExifTool::GetTagTable($tagInfo->{SubDirectory}->{TagTable}); my $writeProc = $tagInfo->{SubDirectory}->{WriteProc}; my $newValue = $et->WriteDirectory(\%subdirInfo, $subTable, $writeProc); if (defined $newValue) { next unless length $newValue; # remove subdirectory entry $value = $newValue; SetResourceName($tagInfo, $name, \$value); } else { $value = substr($$dataPt, $pos, $size); # rewrite old directory } } else { $value = substr($$dataPt, $pos, $size); } } my $newSize = length $value; # write this directory entry $newData .= $type . Set16u($tagID) . $name . Set32u($newSize) . $value; $newData .= "\0" if $newSize & 0x01; # must null pad to even byte } # # write any remaining entries we didn't find in the old directory # (might as well write them in numerical tag order) # my @tagsLeft = sort { $a <=> $b } keys(%$newTags), keys(%$addDirs); foreach $tagID (@tagsLeft) { my $name = "\0\0"; if ($$newTags{$tagID}) { $tagInfo = $$newTags{$tagID}; my $nvHash = $et->GetNewValueHash($tagInfo); $value = $et->GetNewValue($nvHash); # handle new IPTCDigest value specially if ($tagInfo eq $iptcDigestInfo and defined $value) { if ($value eq 'new') { $value = $$et{NewIPTCDigest}; } elsif ($value eq 'old') { $value = $$et{OldIPTCDigest}; } # (we already know we want to create this tag) } else { # don't add this tag unless specified next unless $$nvHash{IsCreating}; } next unless defined $value; # next if tag is being deleted $et->VerboseValue("+ Photoshop:$$tagInfo{Name}", $value); ++$$et{CHANGED}; } else { $tagInfo = $$addDirs{$tagID}; # create new directory my %subdirInfo = ( Parent => $$dirInfo{DirName}, ); my $subTable = Image::ExifTool::GetTagTable($tagInfo->{SubDirectory}->{TagTable}); my $writeProc = $tagInfo->{SubDirectory}->{WriteProc}; $value = $et->WriteDirectory(\%subdirInfo, $subTable, $writeProc); next unless $value; } # set resource name if necessary SetResourceName($tagInfo, $name, \$value); $size = length($value); # write the new directory entry $newData .= '8BIM' . Set16u($tagID) . $name . Set32u($size) . $value; $newData .= "\0" if $size & 0x01; # must null pad to even numbered byte ++$$et{CHANGED}; } return $newData; } 1; # end __END__ =head1 NAME Image::ExifTool::WritePhotoshop.pl - Write Photoshop IRB meta information =head1 SYNOPSIS This file is autoloaded by Image::ExifTool::Photoshop. =head1 DESCRIPTION This file contains routines to write Photoshop metadata. =head1 NOTES Photoshop IRB blocks may have an associated resource name. By default, the existing name is preserved when rewriting a resource, and an empty name is used when creating a new resource. However, a different resource name may be specified by defining a C<SetResourceName> entry in the tag information hash. With this defined, a new resource name may be appended to the value in the form "VALUE/#NAME#/" (the slashes and hashes are literal). If C<SetResourceName> is anything other than '1', the value is used as a default resource name, and applied if no appended name is provided. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::Photoshop(3pm)|Image::ExifTool::Photoshop>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/WritePNG.pl�������������������������������������������������000644 �000765 �000024 �00000036461 12642461341 021715� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: WritePNG.pl # # Description: Write PNG meta information # # Revisions: 09/16/2005 - P. Harvey Created # # References: 1) http://www.libpng.org/pub/png/spec/1.2/ #------------------------------------------------------------------------------ package Image::ExifTool::PNG; use strict; #------------------------------------------------------------------------------ # Calculate CRC or update running CRC (ref 1) # Inputs: 0) data reference, 1) running crc to update (undef intially) # 2) data position (undef for 0), 3) data length (undef for all data), # Returns: updated CRC my @crcTable; sub CalculateCRC($;$$$) { my ($dataPt, $crc, $pos, $len) = @_; $crc = 0 unless defined $crc; $pos = 0 unless defined $pos; $len = length($$dataPt) - $pos unless defined $len; $crc ^= 0xffffffff; # undo 1's complement # build lookup table unless done already unless (@crcTable) { my ($c, $n, $k); for ($n=0; $n<256; ++$n) { for ($k=0, $c=$n; $k<8; ++$k) { $c = ($c & 1) ? 0xedb88320 ^ ($c >> 1) : $c >> 1; } $crcTable[$n] = $c; } } # calculate the CRC foreach (unpack("x${pos}C$len", $$dataPt)) { $crc = $crcTable[($crc^$_) & 0xff] ^ ($crc >> 8); } return $crc ^ 0xffffffff; # return 1's complement } #------------------------------------------------------------------------------ # Encode data in ASCII Hex # Inputs: 0) input data reference # Returns: Hex-encoded data (max 72 chars per line) sub HexEncode($) { my $dataPt = shift; my $len = length($$dataPt); my $hex = ''; my $pos; for ($pos = 0; $pos < $len; $pos += 36) { my $n = $len - $pos; $n > 36 and $n = 36; $hex .= unpack('H*',substr($$dataPt,$pos,$n)) . "\n"; } return $hex; } #------------------------------------------------------------------------------ # Write profile to tEXt or zTXt chunk (zTXt if Zlib is available) # Inputs: 0) outfile, 1) Raw profile type, 2) data ref # 3) profile header type (undef if not a text profile) # Returns: 1 on success sub WriteProfile($$$;$) { my ($outfile, $rawType, $dataPt, $profile) = @_; my ($buff, $prefix, $chunk, $deflate); if (eval { require Compress::Zlib }) { $deflate = Compress::Zlib::deflateInit(); } if (not defined $profile) { # write ICC profile as compressed iCCP chunk if possible return 0 unless $deflate; $buff = $deflate->deflate($$dataPt); return 0 unless defined $buff; $buff .= $deflate->flush(); my %rawTypeChunk = ( icm => 'iCCP' ); $chunk = $rawTypeChunk{$rawType} or return 0; $prefix = "$rawType\0\0"; $dataPt = \$buff; } else { # write as ASCII-hex encoded profile in tEXt or zTXt chunk my $txtHdr = sprintf("\n$profile profile\n%8d\n", length($$dataPt)); $buff = $txtHdr . HexEncode($dataPt); $chunk = 'tEXt'; # write as tEXt if deflate not available $prefix = "Raw profile type $rawType\0"; $dataPt = \$buff; # write profile as zTXt chunk if possible if ($deflate) { my $buf2 = $deflate->deflate($buff); if (defined $buf2) { $dataPt = \$buf2; $buf2 .= $deflate->flush(); $chunk = 'zTXt'; $prefix .= "\0"; # compression type byte (0=deflate) } } } my $hdr = pack('Na4', length($prefix) + length($$dataPt), $chunk) . $prefix; my $crc = CalculateCRC(\$hdr, undef, 4); $crc = CalculateCRC($dataPt, $crc); return Write($outfile, $hdr, $$dataPt, pack('N',$crc)); } #------------------------------------------------------------------------------ # Add iCCP to the PNG image if necessary (must come before PLTE and IDAT) # Inputs: 0) ExifTool object ref, 1) output file or scalar ref # Returns: true on success sub Add_iCCP($$) { my ($et, $outfile) = @_; if ($$et{ADD_DIRS}{ICC_Profile}) { # write new ICC data my $tagTablePtr = Image::ExifTool::GetTagTable('Image::ExifTool::ICC_Profile::Main'); my %dirInfo = ( Parent => 'PNG', DirName => 'ICC_Profile' ); my $buff = $et->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $buff and length $buff and WriteProfile($outfile, 'icm', \$buff)) { $et->VPrint(0, "Created ICC profile\n"); delete $$et{ADD_DIRS}{ICC_Profile}; # don't add it again $$et{PNGDoneDir}{ICC_Profile} = 2; } } return 1; } #------------------------------------------------------------------------------ # This routine is called after we edit an existing directory # Inputs: 0) ExifTool ref, 1) dir name, 2) output data ref # 3) flag set if location is non-standard (to update, but not create from scratch) # - on return, $$outBuff is set to '' if the directory is to be deleted sub DoneDir($$$;$) { my ($et, $dir, $outBuff, $nonStandard) = @_; # don't add this directory again unless this is in a non-standard location delete $$et{ADD_DIRS}{$dir} unless $nonStandard; # handle problem with duplicate XMP when using PNGEarlyXMP option return unless $dir eq 'XMP' and defined $$outBuff and length $$outBuff; if ($nonStandard and $$et{DEL_GROUP}{$dir}) { $et->VPrint(0," Deleting non-standard $dir\n"); $$outBuff = ''; } elsif (not $$et{PNGDoneDir}{$dir}) { $$et{PNGDoneDir}{$dir} = 1; # set flag indicating the directory exists } elsif ($$et{OPTIONS}{PNGEarlyXMP}) { if ($$et{PNGDoneDir}{$dir} == 2) { if ($$et{OPTIONS}{IgnoreMinorErrors}) { $et->Warn("Deleted existing $dir"); } else { $et->Error("Duplicate $dir created. Ignore to delete existing $dir", 1); return; } } elsif ($et->Warn("Duplicate $dir. Ignore to delete", 2)) { return; # warning not ignored: don't delete the duplicate } $et->VPrint(0," Deleting duplicate $dir\n"); $$outBuff = ''; } } #------------------------------------------------------------------------------ # Generate tEXt, zTXt or iTXt data for writing # Inputs: 0) ExifTool ref, 1) tagID, 2) tagInfo ref, 3) value string, 4) language code # Returns: chunk data (not including 8-byte chunk header) # Notes: Sets ExifTool TextChunkType member to the type of chunk written sub BuildTextChunk($$$$$) { my ($et, $tag, $tagInfo, $val, $lang) = @_; my ($xtra, $compVal, $iTXt, $comp); if ($$tagInfo{SubDirectory}) { if ($$tagInfo{Name} eq 'XMP') { $iTXt = 2; # write as iTXt but flag to avoid encoding # (never compress XMP) } else { $comp = 2; # compress raw profile if possible } } else { # compress if specified $comp = 1 if $et->Options('Compress'); if ($lang) { $iTXt = 1; # write as iTXt if it has a language code $tag =~ s/-$lang$//; # remove language code from tagID } elsif ($$et{OPTIONS}{Charset} ne 'Latin' and $val =~ /[\x80-\xff]/) { $iTXt = 1; # write as iTXt if it contains non-Latin special characters } } if ($comp) { my $warn; if (eval { require Compress::Zlib }) { my $deflate = Compress::Zlib::deflateInit(); $compVal = $deflate->deflate($val) if $deflate; if (defined $compVal) { $compVal .= $deflate->flush(); # only compress if it actually saves space unless (length($compVal) < length($val)) { undef $compVal; $warn = 'uncompressed data is smaller'; } } else { $warn = 'deflate error'; } } else { $warn = 'Compress::Zlib not available'; } # warn if any user-specified compression fails if ($warn and $comp == 1) { $et->Warn("PNG:$$tagInfo{Name} not compressed ($warn)", 1); } } # decide whether to write as iTXt, zTXt or tEXt if ($iTXt) { $$et{TextChunkType} = 'iTXt'; $xtra = (defined $compVal ? "\x01\0" : "\0\0") . ($lang || '') . "\0\0"; # iTXt is encoded as UTF-8 (but note that XMP is already UTF-8) $val = $et->Encode($val, 'UTF8') if $iTXt == 1; } elsif (defined $compVal) { $$et{TextChunkType} = 'zTXt'; $xtra = "\0"; } else { $$et{TextChunkType} = 'tEXt'; $xtra = ''; } return $tag . "\0" . $xtra . (defined $compVal ? $compVal : $val); } #------------------------------------------------------------------------------ # Add any outstanding new chunks to the PNG image # Inputs: 0) ExifTool object ref, 1) output file or scalar ref # 2-N) dirs to add (empty to add all, including PNG tags) # Returns: true on success sub AddChunks($$;@) { my ($et, $outfile, @add) = @_; my ($addTags, $tag, $dir, $err, $tagTablePtr); if (@add) { $addTags = { }; # don't add any PNG tags } else { $addTags = $$et{ADD_PNG}; # add all PNG tags... delete $$et{ADD_PNG}; # ...once # add all directories @add = sort keys %{$$et{ADD_DIRS}}; } # write any outstanding PNG tags foreach $tag (sort keys %$addTags) { my $tagInfo = $$addTags{$tag}; my $nvHash = $et->GetNewValueHash($tagInfo); # (native PNG information is always preferred, so don't check IsCreating) next unless $et->IsOverwriting($nvHash); my $val = $et->GetNewValue($nvHash); if (defined $val) { next if $$nvHash{EditOnly}; my $data; if ($$tagInfo{Table} eq \%Image::ExifTool::PNG::TextualData) { $data = BuildTextChunk($et, $tag, $tagInfo, $val, $$tagInfo{LangCode}); $data = $$et{TextChunkType} . $data; delete $$et{TextChunkType}; } else { $data = "$tag$val"; } my $hdr = pack('N', length($data) - 4); my $cbuf = pack('N', CalculateCRC(\$data, undef)); Write($outfile, $hdr, $data, $cbuf) or $err = 1; $et->VerboseValue("+ PNG:$$tagInfo{Name}", $val); $$et{PNGDoneTag}{$tag} = 1; # set flag indicating this tag was added ++$$et{CHANGED}; } } # create any necessary directories foreach $dir (@add) { next unless $$et{ADD_DIRS}{$dir}; # make sure we want to add it first my $buff; my %dirInfo = ( Parent => 'PNG', DirName => $dir, ); if ($dir eq 'IFD0') { $et->Warn('Creating non-standard EXIF in PNG', 1); $et->VPrint(0, "Creating EXIF profile:\n"); $$et{TIFF_TYPE} = 'APP1'; $tagTablePtr = Image::ExifTool::GetTagTable('Image::ExifTool::Exif::Main'); $buff = $et->WriteDirectory(\%dirInfo, $tagTablePtr, \&Image::ExifTool::WriteTIFF); if (defined $buff and length $buff) { $buff = $Image::ExifTool::exifAPP1hdr . $buff; WriteProfile($outfile, 'APP1', \$buff, 'generic') or $err = 1; } } elsif ($dir eq 'XMP') { $et->VPrint(0, "Creating XMP iTXt chunk:\n"); $tagTablePtr = Image::ExifTool::GetTagTable('Image::ExifTool::XMP::Main'); $dirInfo{ReadOnly} = 1; $buff = $et->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $buff and length $buff and # the packet is read-only (because of CRC) Image::ExifTool::XMP::ValidateXMP(\$buff, 'r')) { # (previously, XMP was created as a non-standard XMP profile chunk) # $buff = $Image::ExifTool::xmpAPP1hdr . $buff; # WriteProfile($outfile, 'APP1', \$buff, 'generic') or $err = 1; # (but now write XMP iTXt chunk according to XMP specification) $buff = "iTXtXML:com.adobe.xmp\0\0\0\0\0" . $buff; my $hdr = pack('N', length($buff) - 4); my $cbuf = pack('N', CalculateCRC(\$buff, undef)); Write($outfile, $hdr, $buff, $cbuf) or $err = 1; } } elsif ($dir eq 'IPTC') { $et->Warn('Creating non-standard EXIF in PNG', 1); $et->VPrint(0, "Creating IPTC profile:\n"); # write new IPTC data (stored in a Photoshop directory) $dirInfo{DirName} = 'Photoshop'; $tagTablePtr = Image::ExifTool::GetTagTable('Image::ExifTool::Photoshop::Main'); $buff = $et->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $buff and length $buff) { WriteProfile($outfile, 'iptc', \$buff, 'IPTC') or $err = 1; } } elsif ($dir eq 'ICC_Profile') { $et->VPrint(0, "Creating ICC profile:\n"); # write new ICC data (only done if we couldn't create iCCP chunk) $tagTablePtr = Image::ExifTool::GetTagTable('Image::ExifTool::ICC_Profile::Main'); $buff = $et->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $buff and length $buff) { WriteProfile($outfile, 'icm', \$buff, 'ICC') or $err = 1; $et->Warn('Wrote ICC as a raw profile (no Compress::Zlib)'); } } elsif ($dir eq 'PNG-pHYs') { $et->VPrint(0, "Creating pHYs chunk:\n"); $tagTablePtr = Image::ExifTool::GetTagTable('Image::ExifTool::PNG::PhysicalPixel'); my $blank = "\0\0\x0b\x12\0\0\x0b\x12\x01"; # 2834 pixels per meter (72 dpi) $dirInfo{DataPt} = \$blank; $buff = $et->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $buff and length $buff) { $buff = 'pHYs' . $buff; # CRC includes chunk name my $hdr = pack('N', length($buff) - 4); my $cbuf = pack('N', CalculateCRC(\$buff, undef)); Write($outfile, $hdr, $buff, $cbuf) or $err = 1; } } else { next; } delete $$et{ADD_DIRS}{$dir}; # don't add again # keep track of the directories that we added $$et{PNGDoneDir}{$dir} = 2 if defined $buff and length $buff; } return not $err; } 1; # end __END__ =head1 NAME Image::ExifTool::WritePNG.pl - Write PNG meta information =head1 SYNOPSIS These routines are autoloaded by Image::ExifTool::PNG. =head1 DESCRIPTION This file contains routines to write PNG metadata. =head1 NOTES Compress::Zlib is required to write compressed text. Existing text tags are always rewritten in their original form (compressed zTXt, uncompressed tEXt or internation iTXt), so pre-existing compressed information can only be modified if Compress::Zlib is available. Newly created textual information is written in uncompressed tEXt form by default, or as compressed zTXt if the Compress option is used and Compress::Zlib is available (but only if the resulting compressed data is smaller than the original text, which isn't always the case for short text strings). =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::PNG(3pm)|Image::ExifTool::PNG>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/WritePostScript.pl������������������������������������������000644 �000765 �000024 �00000072427 12642461341 023405� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: WritePostScript.pl # # Description: Write PostScript meta information # # Revisions: 03/03/2006 - P. Harvey Created # # References: (see references in PostScript.pm, plus:) # 1) http://www.adobe.com/products/postscript/pdfs/PLRM.pdf # 2) http://www-cdf.fnal.gov/offline/PostScript/PLRM2.pdf # 3) http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/pdf_creation_apis_and_specs/pdfmarkReference.pdf # 4) http://www.npes.org/standards/Tools/DCS20Spec.pdf # # Notes: (see NOTES in POD doc below) #------------------------------------------------------------------------------ package Image::ExifTool::PostScript; use strict; # Structure of a DSC PS/EPS document: # # %!PS-Adobe-3.0 [plus " EPSF-3.0" for EPS] # <comments> # %%EndComments [optional] # %%BeginXxxx # <stuff to ignore> # %%EndXxxx # %%BeginProlog # <prolog stuff> # %%EndProlog # %%BeginSetup # <setup stuff> # %%EndSetup # %ImageData x x x x [written by Photoshop] # %BeginPhotoshop: xxxx # <ascii-hex IRB information> # %EndPhotosop # %%BeginICCProfile: (name) <num> <type> # <ICC Profile info> # %%EndICCProfile # %begin_xml_code # <postscript code to define and read the XMP stream object> # %begin_xml_packet: xxxx # <XMP data> # %end_xml_packet # <postscript code to add XMP stream to dictionary> # %end_xml_code # %%Page: x x [PS only (optional?)] # <graphics commands> # %%PageTrailer # %%Trailer # <a bit more code to bracket EPS content for distiller> # %%EOF # map of where information is stored in PS image my %psMap = ( XMP => 'PostScript', Photoshop => 'PostScript', IPTC => 'Photoshop', EXIFInfo => 'Photoshop', IFD0 => 'EXIFInfo', IFD1 => 'IFD0', ICC_Profile => 'PostScript', ExifIFD => 'IFD0', GPS => 'IFD0', SubIFD => 'IFD0', GlobParamIFD => 'IFD0', PrintIM => 'IFD0', InteropIFD => 'ExifIFD', MakerNotes => 'ExifIFD', ); #------------------------------------------------------------------------------ # Write XMP directory to file, with begin/end tokens if necessary # Inputs: 0) outfile ref, 1) flags hash ref, 2-N) data to write # Returns: true on success sub WriteXMPDir($$@) { my $outfile = shift; my $flags = shift; my $success = 1; Write($outfile, "%begin_xml_code$/") or $success = 0 unless $$flags{WROTE_BEGIN}; Write($outfile, @_) or $success = 0; Write($outfile, "%end_xml_code$/") or $success = 0 unless $$flags{WROTE_BEGIN}; return $success; } #------------------------------------------------------------------------------ # Write a directory inside a PS document # Inputs: 0) ExifTool object ref, 1) output file reference, # 2) Directory name, 3) data reference, 4) flags hash ref # Returns: 0=error, 1=nothing written, 2=dir written ok sub WritePSDirectory($$$$$) { my ($et, $outfile, $dirName, $dataPt, $flags) = @_; my $success = 2; my $len = $dataPt ? length($$dataPt) : 0; my $create = $len ? 0 : 1; my %dirInfo = ( DataPt => $dataPt, DataLen => $len, DirStart => 0, DirLen => $len, DirName => $dirName, Parent => 'PostScript', ); # Note: $$flags{WROTE_BEGIN} may be 1 for XMP (it is always 0 for # other dirs, but if 1, the begin/end markers were already written) # # prepare necessary postscript code to support embedded XMP # my ($beforeXMP, $afterXMP, $reportedLen); if ($dirName eq 'XMP' and $len) { # isolate the XMP pos($$dataPt) = 0; unless ($$dataPt =~ /(.*)(<\?xpacket begin=.{7,13}W5M0MpCehiHzreSzNTczkc9d)/sg) { $et->Warn('No XMP packet start'); return WriteXMPDir($outfile, $flags, $$dataPt); } $beforeXMP = $1; my $xmp = $2; my $p1 = pos($$dataPt); unless ($$dataPt =~ m{<\?xpacket end=.(w|r).\?>}sg) { $et->Warn('No XMP packet end'); return WriteXMPDir($outfile, $flags, $$dataPt); } my $p2 = pos($$dataPt); $xmp .= substr($$dataPt, $p1, $p2-$p1); $afterXMP = substr($$dataPt, $p2); # determine if we can adjust the XMP size if ($beforeXMP =~ /%begin_xml_packet: (\d+)/s) { $reportedLen = $1; my @matches= ($beforeXMP =~ /\b$reportedLen\b/sg); undef $reportedLen unless @matches == 2; } # must edit in place if we can't reliably change the XMP length $dirInfo{InPlace} = 1 unless $reportedLen; # process XMP only $dirInfo{DataLen} = $dirInfo{DirLen} = length $xmp; $dirInfo{DataPt} = \$xmp; } my $tagTablePtr = Image::ExifTool::GetTagTable("Image::ExifTool::${dirName}::Main"); my $val = $et->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $val) { $dataPt = \$val; # use modified directory $len = length $val; } elsif ($dirName eq 'XMP') { return 1 unless $len; # just write the original XMP return WriteXMPDir($outfile, $flags, $$dataPt); } unless ($len) { return 1 if $create or $dirName ne 'XMP'; # nothing to create # it would be really difficult to delete the XMP, # so instead we write a blank XMP record $val = <<EMPTY_XMP; <?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool $Image::ExifTool::VERSION'> </x:xmpmeta> EMPTY_XMP $val .= ((' ' x 100) . "\n") x 24 unless $et->Options('Compact'); $val .= q{<?xpacket end='w'?>}; $dataPt = \$val; $len = length $val; } # # write XMP directory # if ($dirName eq 'XMP') { if ($create) { # create necessary PS/EPS code to support XMP $beforeXMP = <<HDR_END; /pdfmark where {pop true} {false} ifelse /currentdistillerparams where {pop currentdistillerparams /CoreDistVersion get 5000 ge } {false} ifelse and not {userdict /pdfmark /cleartomark load put} if [/NamespacePush pdfmark [/_objdef {exiftool_metadata_stream} /type /stream /OBJ pdfmark [{exiftool_metadata_stream} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT pdfmark /MetadataString $len string def % exact length of metadata /TempString 100 string def /ConsumeMetadata { currentfile TempString readline pop pop currentfile MetadataString readstring pop pop } bind def ConsumeMetadata %begin_xml_packet: $len HDR_END # note: use q() to get necessary linefeed before %end_xml_packet $afterXMP = q( %end_xml_packet [{exiftool_metadata_stream} MetadataString /PUT pdfmark ); if ($$flags{EPS}) { $afterXMP .= <<EPS_AFTER; [/Document 1 dict begin /Metadata {exiftool_metadata_stream} def currentdict end /BDC pdfmark [/NamespacePop pdfmark EPS_AFTER # write this at end of file $$flags{TRAILER} = "[/EMC pdfmark$/"; } else { # PS $afterXMP .= <<PS_AFTER; [{Catalog} {exiftool_metadata_stream} /Metadata pdfmark [/NamespacePop pdfmark PS_AFTER } $beforeXMP =~ s{\n}{$/}sg; # use proper newline characters $afterXMP =~ s{\n}{$/}sg; } else { # replace xmp size in PS code $reportedLen and $beforeXMP =~ s/\b$reportedLen\b/$len/sg; } WriteXMPDir($outfile, $flags, $beforeXMP, $$dataPt, $afterXMP) or $success = 0; # # Write Photoshop or ICC_Profile directory # } elsif ($dirName eq 'Photoshop' or $dirName eq 'ICC_Profile') { my ($startToken, $endToken); if ($dirName eq 'Photoshop') { $startToken = "%BeginPhotoshop: $len"; $endToken = '%EndPhotoshop'; } else { $startToken = '%%BeginICCProfile: (Photoshop Profile) -1 Hex'; $endToken = '%%EndICCProfile'; } Write($outfile, $startToken, $/) or $success = 0; # write as an ASCII-hex comment my $i; my $wid = 32; for ($i=0; $i<$len; $i+=$wid) { $wid > $len-$i and $wid = $len-$i; my $dat = substr($$dataPt, $i, $wid); Write($outfile, "% ", uc(unpack('H*',$dat)), $/) or $success = 0; } Write($outfile, $endToken, $/) or $success = 0; } else { $et->Warn("Can't write PS directory $dirName"); } undef $val; return $success; } #------------------------------------------------------------------------------ # Encode postscript tag/value # Inputs: 0) tag ID, 1) value # Returns: postscript comment # - adds brackets, escapes special characters, and limits line length sub EncodeTag($$) { my ($tag, $val) = @_; unless ($val =~ /^\d+$/) { $val =~ s/([()\\])/\\$1/g; # escape brackets and backslashes $val =~ s/\n/\\n/g; # escape newlines $val =~ s/\r/\\r/g; # escape carriage returns $val =~ s/\t/\\t/g; # escape tabs # use octal escape codes for other control characters $val =~ s/([\x00-\x1f\x7f\xff])/sprintf("\\%.3o",ord($1))/ge; $val = "($val)"; } my $line = "%%$tag: $val"; # postscript line limit is 255 characters (but it seems that # the limit may be 254 characters if the DOS CR/LF is used) # --> split if necessary using continuation comment "%%+" my $n; for ($n=254; length($line)>$n; $n+=254+length($/)) { substr($line, $n, 0) = "$/%%+"; } return $line . $/; } #------------------------------------------------------------------------------ # Write new tags information in comments section # Inputs: 0) ExifTool object ref, 1) output file ref, 2) reference to new tag hash # Returns: true on success sub WriteNewTags($$$) { my ($et, $outfile, $newTags) = @_; my $success = 1; my $tag; # get XMP hint and remove from tags hash my $xmpHint = $$newTags{XMP_HINT}; delete $$newTags{XMP_HINT}; foreach $tag (sort keys %$newTags) { my $tagInfo = $$newTags{$tag}; my $nvHash = $et->GetNewValueHash($tagInfo); next unless $$nvHash{IsCreating}; my $val = $et->GetNewValue($nvHash); $et->VerboseValue("+ PostScript:$$tagInfo{Name}", $val); Write($outfile, EncodeTag($tag, $val)) or $success = 0; ++$$et{CHANGED}; } # write XMP hint if necessary Write($outfile, "%ADO_ContainsXMP: MainFirst$/") or $success = 0 if $xmpHint; %$newTags = (); # all done with new tags return $success; } #------------------------------------------------------------------------------ # check to be sure we haven't read past end of PS data in DOS-style file # Inputs: 0) RAF ref, 1) pointer to end of PS, 2) data # - modifies data and sets RAF to EOF if end of PS is reached sub CheckPSEnd($$$) { my $pos = $_[0]->Tell(); if ($pos >= $_[1]) { $_[0]->Seek(0, 2); # seek to end of file so we can't read any more $_[2] = substr($_[2], 0, length($_[2]) - $pos + $_[1]) if $pos > $_[1]; } } #------------------------------------------------------------------------------ # Split into lines ending in any CR, LF or CR+LF combination # (this is annoying, and could be avoided if EPS files didn't mix linefeeds!) # Inputs: 0) data pointer, 1) reference to lines array # Notes: Updates data to contain next line and fills list with remaining lines sub SplitLine($$) { my ($dataPt, $lines) = @_; for (;;) { my $endl; # find the position of the first LF (\x0a) $endl = pos($$dataPt), pos($$dataPt) = 0 if $$dataPt =~ /\x0a/g; if ($$dataPt =~ /\x0d/g) { # find the first CR (\x0d) if (defined $endl) { # (remember, CR+LF is a DOS newline...) $endl = pos($$dataPt) if pos($$dataPt) < $endl - 1; } else { $endl = pos($$dataPt); } } elsif (not defined $endl) { push @$lines, $$dataPt; last; } # split into separate lines if (length $$dataPt == $endl) { push @$lines, $$dataPt; last; } else { push @$lines, substr($$dataPt, 0, $endl); $$dataPt = substr($$dataPt, $endl); } } $$dataPt = shift @$lines; # set $$dataPt to first line } #------------------------------------------------------------------------------ # Write PS file # Inputs: 0) ExifTool object reference, 1) source dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid PS file, # or -1 if a write error occurred sub WritePS($$) { my ($et, $dirInfo) = @_; $et or return 1; # allow dummy access to autoload this package my $tagTablePtr = Image::ExifTool::GetTagTable('Image::ExifTool::PostScript::Main'); my $raf = $$dirInfo{RAF}; my $outfile = $$dirInfo{OutFile}; my $verbose = $et->Options('Verbose'); my $out = $et->Options('TextOut'); my ($data, $buff, %flags, $err, $mode, $endToken); my ($dos, $psStart, $psEnd, $psNewStart, $xmpHint); $raf->Read($data, 4) == 4 or return 0; return 0 unless $data =~ /^(%!PS|%!Ad|\xc5\xd0\xd3\xc6)/; if ($data =~ /^%!Ad/) { # I've seen PS files start with "%!Adobe-PS"... return 0 unless $raf->Read($buff, 6) == 6 and $buff eq "obe-PS"; $data .= $buff; } elsif ($data =~ /^\xc5\xd0\xd3\xc6/) { # # process DOS binary PS files # # save DOS header then seek ahead and check PS header $raf->Read($dos, 26) == 26 or return 0; $dos = $data . $dos; SetByteOrder('II'); $psStart = Get32u(\$dos, 4); unless ($raf->Seek($psStart, 0) and $raf->Read($data, 4) == 4 and $data eq '%!PS') { $et->Error('Invalid PS header'); return 1; } $psEnd = $psStart + Get32u(\$dos, 8); my $base = Get32u(\$dos, 20); Set16u(0xffff, \$dos, 28); # ignore checksum if ($base) { my %dirInfo = ( Parent => 'PS', RAF => $raf, Base => $base, NoTiffEnd => 1, # no end-of-TIFF check ); $buff = $et->WriteTIFF(\%dirInfo); SetByteOrder('II'); # (WriteTIFF may change this) if ($buff) { $buff = substr($buff, $base); # remove header written by WriteTIFF() } else { # error rewriting TIFF, so just copy over original data my $len = Get32u(\$dos, 24); unless ($raf->Seek($base, 0) and $raf->Read($buff, $len) == $len) { $et->Error('Error reading embedded TIFF'); return 1; } $et->Warn('Bad embedded TIFF'); } Set32u(0, \$dos, 12); # zero metafile pointer Set32u(0, \$dos, 16); # zero metafile length Set32u(length($dos), \$dos, 20); # set TIFF pointer Set32u(length($buff), \$dos, 24); # set TIFF length } elsif (($base = Get32u(\$dos, 12)) != 0) { # copy over metafile section my $len = Get32u(\$dos, 16); unless ($raf->Seek($base, 0) and $raf->Read($buff, $len) == $len) { $et->Error('Error reading metafile section'); return 1; } Set32u(length($dos), \$dos, 12); # set metafile pointer } else { $buff = ''; } $psNewStart = length($dos) + length($buff); Set32u($psNewStart, \$dos, 4); # set pointer to start of PS Write($outfile, $dos, $buff) or $err = 1; $raf->Seek($psStart + 4, 0); # seek back to where we were } # # rewrite PostScript data # local $/ = GetInputRecordSeparator($raf); unless ($/ and $raf->ReadLine($buff)) { $et->Error('Invalid PostScript data'); return 1; } $data .= $buff; unless ($data =~ /^%!PS-Adobe-3\.(\d+)\b/ and $1 < 2) { if ($et->Error("Document does not conform to DSC spec. Metadata may be unreadable by other apps", 2)) { return 1; } } my $psRev = $1; # save PS revision number (3.x) Write($outfile, $data) or $err = 1; $flags{EPS} = 1 if $data =~ /EPSF/; # get hash of new information keyed by tagID and directories to add/edit my $newTags = $et->GetNewTagInfoHash($tagTablePtr); # figure out which directories we need to write (PostScript takes priority) $et->InitWriteDirs(\%psMap, 'PostScript'); my $addDirs = $$et{ADD_DIRS}; my $editDirs = $$et{EDIT_DIRS}; my %doneDir; # set XMP hint flag (1 for adding, 0 for deleting, undef for no change) $xmpHint = 1 if $$addDirs{XMP}; $xmpHint = 0 if $$et{DEL_GROUP}{XMP}; $$newTags{XMP_HINT} = $xmpHint if $xmpHint; # add special tag to newTags list my (@lines, $changedNL); my $altnl = ($/ eq "\x0d") ? "\x0a" : "\x0d"; for (;;) { if (@lines) { $data = shift @lines; } else { $raf->ReadLine($data) or last; $dos and CheckPSEnd($raf, $psEnd, $data); # split line if it contains other newline sequences if ($data =~ /$altnl/) { if (length($data) > 500000 and IsPC()) { # patch for Windows memory problem unless ($changedNL) { $changedNL = 1; my $t = $/; $/ = $altnl; $altnl = $t; $raf->Seek(-length($data), 1); next; } } else { # split into separate lines SplitLine(\$data, \@lines); } } } undef $changedNL; if ($endToken) { # look for end token if ($data =~ m/^$endToken\s*$/is) { undef $endToken; # found end: process this information if ($mode) { $doneDir{$mode} and $et->Error("Multiple $mode directories", 1); $doneDir{$mode} = 1; WritePSDirectory($et, $outfile, $mode, \$buff, \%flags) or $err = 1; # write end token if we wrote the begin token Write($outfile, $data) or $err = 1 if $flags{WROTE_BEGIN}; undef $buff; } else { Write($outfile, $data) or $err = 1; } } else { # buffer data in current begin/end block if (not defined $mode) { # pick up XMP in unrecognized blocks for editing in place if ($data =~ /^<\?xpacket begin=.{7,13}W5M0MpCehiHzreSzNTczkc9d/ and $$editDirs{XMP}) { $buff = $data; $mode = 'XMP'; } else { Write($outfile, $data) or $err = 1; } } elsif ($mode eq 'XMP') { $buff .= $data; } else { # data is ASCII-hex encoded $data =~ tr/0-9A-Fa-f//dc; # remove all but hex characters $buff .= pack('H*', $data); # translate from hex } } next; } elsif ($data =~ m{^(%{1,2})(Begin)(?!Object:)(.*?)[:\x0d\x0a]}i) { # comments section is over... write any new tags now WriteNewTags($et, $outfile, $newTags) or $err = 1 if %$newTags; undef $xmpHint; # the beginning of a data block (can only write XMP and Photoshop) my %modeLookup = ( _xml_code => 'XMP', photoshop => 'Photoshop', iccprofile => 'ICC_Profile', ); $verbose > 1 and print $out "$2$3\n"; $endToken = $1 . ($2 eq 'begin' ? 'end' : 'End') . $3; $mode = $modeLookup{lc($3)}; if ($mode and $$editDirs{$mode}) { $buff = ''; # initialize buffer for this block $flags{WROTE_BEGIN} = 0; } else { undef $mode; # not editing this directory Write($outfile, $data) or $err = 1; $flags{WROTE_BEGIN} = 1; } next; } elsif ($data =~ /^%%(?!Page:|PlateFile:|BeginObject:)(\w+): ?(.*)/s) { # rewrite information from PostScript tags in comments my ($tag, $val) = ($1, $2); # handle Adobe Illustrator files specially # - EVENTUALLY IT WOULD BE BETTER TO FIND ANOTHER IDENTIFICATION METHOD # (because Illustrator doesn't care if the Creator is changed) if ($tag eq 'Creator' and $val =~ /^Adobe Illustrator/) { # disable writing XMP to PostScript-format Adobe Illustrator files # because it confuses Illustrator if ($$editDirs{XMP}) { $et->Warn("Can't write XMP to PostScript-format Illustrator files"); # pretend like we wrote it already so we won't try to add it later $doneDir{XMP} = 1; } # don't allow "Creator" to be changed in Illustrator files # (we need it to be able to recognize these files) # --> find a better way to do this! if ($$newTags{$tag}) { $et->Warn("Can't change Postscript:Creator of Illustrator files"); delete $$newTags{$tag}; } } if ($$newTags{$tag}) { my $tagInfo = $$newTags{$tag}; delete $$newTags{$tag}; # write it then forget it next unless ref $tagInfo; # decode comment string (reading continuation lines if necessary) $val = DecodeComment($val, $raf, \@lines, \$data); $val = join $et->Options('ListSep'), @$val if ref $val eq 'ARRAY'; my $nvHash = $et->GetNewValueHash($tagInfo); if ($et->IsOverwriting($nvHash, $val)) { $et->VerboseValue("- PostScript:$$tagInfo{Name}", $val); $val = $et->GetNewValue($nvHash); ++$$et{CHANGED}; next unless defined $val; # next if tag is being deleted $et->VerboseValue("+ PostScript:$$tagInfo{Name}", $val); $data = EncodeTag($tag, $val); } } # (note: Adobe InDesign doesn't put colon after %ADO_ContainsXMP -- doh!) } elsif (defined $xmpHint and $data =~ m{^%ADO_ContainsXMP:? ?(.+?)[\x0d\x0a]*$}s) { # change the XMP hint if necessary if ($xmpHint) { $data = "%ADO_ContainsXMP: MainFirst$/" if $1 eq 'NoMain'; } else { $data = "%ADO_ContainsXMP: NoMain$/"; } # delete XMP hint flags delete $$newTags{XMP_HINT}; undef $xmpHint; } else { # look for end of comments section if (%$newTags and ($data !~ /^%\S/ or $data =~ /^%(%EndComments|%Page:|%PlateFile:|%BeginObject:|.*BeginLayer)/)) { # write new tags at end of comments section WriteNewTags($et, $outfile, $newTags) or $err = 1; undef $xmpHint; } # look for start of drawing commands (AI uses "%AI5_BeginLayer", # and Helios uses "%%BeginObject:") if ($data =~ /^%(%Page:|%PlateFile:|%BeginObject:|.*BeginLayer)/ or $data !~ m{^(%.*|\s*)$}s) { # we have reached the first page or drawing command, so create necessary # directories and copy the rest of the file, then all done my $dir; my $plateFile = ($data =~ /^%%PlateFile:/); # create Photoshop first, then XMP if necessary foreach $dir (qw{Photoshop ICC_Profile XMP}) { next unless $$editDirs{$dir} and not $doneDir{$dir}; if ($plateFile) { # PlateFile comments may contain offsets so we can't edit these files! $et->Warn("Can only edit PostScript information DCS Plate files"); last; } next unless $$addDirs{$dir} or $dir eq 'XMP'; $flags{WROTE_BEGIN} = 0; WritePSDirectory($et, $outfile, $dir, undef, \%flags) or $err = 1; $doneDir{$dir} = 1; } # copy rest of file if ($flags{TRAILER}) { # write trailer before %%EOF for (;;) { Write($outfile, $data) or $err = 1; if (@lines) { $data = shift @lines; } else { $raf->ReadLine($data) or undef($data), last; $dos and CheckPSEnd($raf, $psEnd, $data); if ($data =~ /[\x0d\x0a]%%EOF\b/g) { # split data before "%%EOF" # (necessary if data contains other newline sequences) my $pos = pos($data) - 5; push @lines, substr($data, $pos); $data = substr($data, 0, $pos); } } last if $data =~ /^%%EOF\b/; } Write($outfile, $flags{TRAILER}) or $err = 1; } # simply copy the rest of the file if any data is left if (defined $data) { Write($outfile, $data) or $err = 1; Write($outfile, @lines) or $err = 1 if @lines; while ($raf->Read($data, 65536)) { $dos and CheckPSEnd($raf, $psEnd, $data); Write($outfile, $data) or $err = 1; } } last; # all done! } } # write new information or copy existing line Write($outfile, $data) or $err = 1; } if ($dos and not $err) { # must go back and set length of PS section in DOS header (very dumb design) if (ref $outfile eq 'SCALAR') { Set32u(length($$outfile) - $psNewStart, $outfile, 8); } else { my $pos = tell $outfile; unless (seek($outfile, 8, 0) and print $outfile Set32u($pos - $psNewStart) and seek($outfile, $pos, 0)) { $et->Error("Can't write DOS-style PS files in non-seekable stream"); $err = 1; } } } # issue warning if we couldn't write any information unless ($err) { my (@notDone, $dir); delete $$newTags{XMP_HINT}; push @notDone, 'PostScript' if %$newTags; foreach $dir (qw{Photoshop ICC_Profile XMP}) { push @notDone, $dir if $$editDirs{$dir} and not $doneDir{$dir} and not $$et{DEL_GROUP}{$dir}; } @notDone and $et->Warn("Couldn't write ".join('/',@notDone).' information'); } $endToken and $et->Error("File missing $endToken"); return $err ? -1 : 1; } 1; # end __END__ =head1 NAME Image::ExifTool::WritePostScript.pl - Write PostScript meta information =head1 SYNOPSIS This file is autoloaded by Image::ExifTool::PostScript. =head1 DESCRIPTION This file contains routines to write meta information in PostScript documents. Six forms of meta information may be written: 1) PostScript comments (Adobe DSC specification) 2) XMP information embedded in a document-level XMP stream 3) EXIF information embedded in a Photoshop record 4) IPTC information embedded in a PhotoShop record 5) ICC_Profile information embedded in an ICCProfile record 6) TIFF information embedded in DOS-style binary header =head1 NOTES Currently, information is written only in the outer-level document. Photoshop will discard meta information in a PostScript document if it has to rasterize the image, and it will rasterize anything that doesn't contain the Photoshop-specific 'ImageData' tag. So don't expect Photoshop to read any meta information added to EPS images that it didn't create. The following two acronyms may be confusing since they are so similar and have different meanings with respect to PostScript documents: DSC = Document Structuring Conventions DCS = Desktop Color Separation =head1 REFERENCES See references in L<PostScript.pm|Image::ExifTool::PostScript>, plus: =over 4 =item L<http://www.adobe.com/products/postscript/pdfs/PLRM.pdf> =item L<http://www-cdf.fnal.gov/offline/PostScript/PLRM2.pdf> =item L<http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/pdf_creation_apis_and_specs/pdfmarkReference.pdf> =back =head1 ACKNOWLEDGEMENTS Thanks to Tim Kordick for his help testing the EPS writer. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::PostScript(3pm)|Image::ExifTool::PostScript>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/WriteQuickTime.pl�������������������������������������������000644 �000765 �000024 �00000034065 12642461341 023162� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: WriteQuickTime.pl # # Description: Write XMP to QuickTime (MOV and MP4) files # # Revisions: 2013-10-29 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::QuickTime; use strict; # map for adding directories to QuickTime-format files my %movMap = ( # MOV (no 'ftyp', or 'ftyp'='qt ') -> 'moov'-'udta'-'XMP_' XMP => 'UserData', UserData => 'Movie', Movie => 'MOV', ); my %mp4Map = ( # MP4 ('ftyp' compatible brand 'mp41', 'mp42' or 'f4v ') -> top level 'uuid' XMP => 'MOV', ); my %dirMap = ( MOV => \%movMap, MP4 => \%mp4Map, ); #------------------------------------------------------------------------------ # Check to see if path is current # Inputs: 0) ExifTool object ref, 1) directory name # Returns: true if current path is the root of the specified directory sub IsCurPath($$) { local $_; my ($et, $dir) = @_; $dir = $$et{DirMap}{$dir} and $dir eq $_ or last foreach reverse @{$$et{PATH}}; return($dir and $dir eq 'MOV'); } #------------------------------------------------------------------------------ # Write a series of QuickTime atoms from file or in memory # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref # Returns: A) if dirInfo contains DataPt: new directory data # B) otherwise: true on success, 0 if a write error occurred # (true but sets an Error on a file format error) sub WriteQuickTime($$$) { my ($et, $dirInfo, $tagTablePtr) = @_; my ($foundMDAT, @hold, $track); my $outfile = $$dirInfo{OutFile} or return 0; my $raf = $$dirInfo{RAF}; my $dataPt = $$dirInfo{DataPt}; my $dirName = $$dirInfo{DirName}; my $parent = $$dirInfo{Parent}; my $addDirs = $$et{ADD_DIRS}; my $rtnVal = 1; if ($dataPt) { $raf = new File::RandomAccess($dataPt); my $outBuff = ''; $outfile = \$outBuff; } else { return 0 unless $raf; } for (;;) { my ($hdr, $buff); my $n = $raf->Read($hdr, 8); unless ($n == 8) { if ($n == 4 and $hdr eq "\0\0\0\0") { # "for historical reasons" the udta is optionally terminated by 4 zeros (ref 1) # --> hold this terminator to the end push @hold, $hdr; } elsif ($n != 0) { $et->Error('File format error'); } last; } my ($size, $tag) = unpack('Na4', $hdr); if ($size >= 8) { $size -= 8; } elsif ($size == 1) { # read the extended size $raf->Read($buff, 8) == 8 or $et->Error('Truncated extended atom'), last; $hdr .= $buff; my ($hi, $lo) = unpack('NN', $buff); $size = $hi * 4294967296 + $lo - 16; $size < 0 and $et->Error('Invalid extended atom size'), last; } elsif (not $size and not $dataPt) { # size of zero is only valid for top-level atom, and # indicates the atom extends to the end of file if (not $raf->{FILE_PT}) { # get file size from image in memory $size = length ${$$raf{BUFF_PT}}; } else { $size = -s $$raf{FILE_PT}; } if ($size and ($size -= $raf->Tell()) >= 0 and $size <= 0x7fffffff) { Set32u($size + 8, \$hdr, 0); } elsif (@hold) { $et->Error("Sorry, can't yet add tags to this type of QuickTime file"); return $rtnVal; } else { # blindly copy the rest of the file Write($outfile, $hdr) or $rtnVal = 0; while ($raf->Read($buff, 65536)) { Write($outfile, $buff) or $rtnVal = 0, last; } return $rtnVal; } } else { $et->Error('Invalid atom size'); last; } # set flag if we have passed the 'mdat' atom $foundMDAT = 1 if $tag eq 'mdat'; # rewrite this atom my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag); if (defined $tagInfo and not $tagInfo) { my $n = $size < 256 ? $size : 256; unless ($raf->Read($buff, $n) == $n and $raf->Seek(-$n, 1)) { $et->Error("Read/seek error in $tag atom"); last; } $tagInfo = $et->GetTagInfo($tagTablePtr, $tag, \$buff); } if ($tagInfo) { if ($$tagInfo{Unknown}) { undef $tagInfo; } elsif ($size > 100000000) { # limit maximum size of atom that we load into memory my $mb = $size / 0x100000; $et->Warn("Not editing metadata in $tag atom. $mb MB is too big"); undef $tagInfo; } } if ($tagInfo) { # read the atom data $raf->Read($buff, $size) == $size or $et->Error("Error reading $tag data"), last; my $subdir = $$tagInfo{SubDirectory}; my $newData; if ($subdir) { my $subName = $$subdir{DirName} || $$tagInfo{Name}; my $start = $$subdir{Start} || 0; my $base = ($$dirInfo{Base} || 0) + $raf->Tell() - $size; my $dPos = 0; my $hdrLen = $start; if ($$subdir{Base}) { my $localBase = eval $$subdir{Base}; $dPos -= $localBase; $base -= $dPos; # get length of header before base offset $hdrLen -= $localBase if $localBase <= $hdrLen; } my %subdirInfo = ( Parent => $dirName, DirName => $subName, DataPt => \$buff, DataLen => $size, DataPos => $dPos, DirStart => $start, DirLen => $size - $start, Base => $base, HasData => $$subdir{HasData}, # necessary? Multi => $$subdir{Multi}, # necessary? OutFile => $outfile, ); # pass the header pointer if necessary (for EXIF IFD's # where the Base offset is at the end of the header) if ($hdrLen and $hdrLen < $size) { my $header = substr($buff,0,$hdrLen); $subdirInfo{HeaderPtr} = \$header; } SetByteOrder('II') if $$subdir{ByteOrder} and $$subdir{ByteOrder} =~ /^Little/; my $oldWriteGroup = $$et{CUR_WRITE_GROUP}; if ($subName eq 'Track') { $track or $track = 0; $$et{CUR_WRITE_GROUP} = 'Track' . (++$track); } my $subTable = GetTagTable($$subdir{TagTable}); # demote non-QuickTime errors to warnings $$et{DemoteErrors} = 1 unless $$subTable{GROUPS}{0} eq 'QuickTime'; my $oldChanged = $$et{CHANGED}; $newData = $et->WriteDirectory(\%subdirInfo, $subTable); if ($$et{DemoteErrors}) { # just copy existing subdirectory a non-quicktime error occurred $$et{CHANGED} = $oldChanged if $$et{DemoteErrors} > 1; delete $$et{DemoteErrors}; } undef $newData if $$et{CHANGED} == $oldChanged; # don't change unless necessary $$et{CUR_WRITE_GROUP} = $oldWriteGroup; SetByteOrder('MM'); # add back header if necessary if ($start and defined $newData and length $newData) { $newData = substr($buff,0,$start) . $newData; } # the directory exists, so we don't need to add it delete $$addDirs{$subName} if IsCurPath($et, $subName); } else { # --> this is where individual QuickTime tags would be edited, # (this is such a can of worms, so don't implement this for now) } if (defined $newData) { my $len = length $newData; $len > 0x7ffffff7 and $et->Error("$tag to large to write"), last; if ($len == $size or $dataPt or $foundMDAT) { # write the updated directory now Write($outfile, Set32u($len+8), $tag, $newData) or $rtnVal = 0, last; next; } else { # bad things happen if 'mdat' atom is moved (eg. Adobe Bridge crashes -- # there must be some absolute offsets somewhere that point into mdat), # so hold this atom and write it out later if ($len) { push @hold, Set32u($len+8), $tag, $newData; $et->VPrint(0," Moving '$tag' atom to after 'mdat'"); } else { $et->VPrint(0," Freeing '$tag' atom (and zeroing data)"); } # write a 'free' atom here to keep 'mdat' at the same offset substr($hdr, 4, 4) = 'free'; $buff = "\0" x length($buff); # zero out old data } } # write out the existing atom (or 'free' padding) Write($outfile, $hdr, $buff) or $rtnVal = 0, last; } else { # write the unknown/large atom header Write($outfile, $hdr) or $rtnVal = 0, last; next unless $size; # copy the atom data my $result = Image::ExifTool::CopyBlock($raf, $outfile, $size); defined $result or $rtnVal = 0, last; $result or $et->Error("Truncated $tag atom"), last; } } # add new directories at this level if necessary if (exists $$et{EDIT_DIRS}{$dirName}) { # get a hash of tagInfo references to add to this directory my $dirs = $et->GetAddDirHash($tagTablePtr, $dirName); # make sorted list of new tags to be added my @addTags = sort keys(%$dirs); my $tag; foreach $tag (@addTags) { my $tagInfo = $$dirs{$tag}; my $subdir = $$tagInfo{SubDirectory} or next; my $subName = $$subdir{DirName} || $$tagInfo{Name}; # QuickTime hierarchy is complex, so check full directory path before adding next unless IsCurPath($et, $subName); delete $$addDirs{$subName}; # add only once my $buff = ''; # write from scratch my %subdirInfo = ( Parent => $dirName, DirName => $subName, DataPt => \$buff, DirStart => 0, OutFile => $outfile, ); my $subTable = GetTagTable($$subdir{TagTable}); my $newData = $et->WriteDirectory(\%subdirInfo, $subTable); if ($newData and length($newData) <= 0x7ffffff7) { my $uuid = ''; # add atom ID if necessary (obtain from Condition expression) if ($$subdir{Start}) { my $cond = $$tagInfo{Condition}; $uuid = eval qq("$1") if $cond and $cond =~ m{=~\s*\/\^(.*)/}; length($uuid) == $$subdir{Start} or $et->Error('Internal UUID error'); } my $newHdr = Set32u(8+length($newData)+length($uuid)) . $tag . $uuid; Write($outfile, $newHdr, $newData) or $rtnVal = 0; } } } # write out any atoms that we are holding until the end Write($outfile, @hold) or $rtnVal = 0 if @hold; # issue minor error if we didn't find an 'mdat' atom # (we could duplicate atoms indefinitely through repeated editing if we # held back some atoms here, so in this case it isn't a minor error) $dataPt or $foundMDAT or $et->Error('No mdat atom found', @hold ? 0 : 1); return $dataPt ? ($rtnVal ? $$outfile : undef) : $rtnVal; } #------------------------------------------------------------------------------ # Write QuickTime-format MOV/MP4 file # Inputs: 0) ExifTool ref, 1) dirInfo ref # Returns: 1 on success, 0 if this wasn't a valid QuickTime file, # or -1 if a write error occurred sub WriteMOV($$) { my ($et, $dirInfo) = @_; $et or return 1; my $raf = $$dirInfo{RAF} or return 0; my ($buff, $ftype); # read the first atom header return 0 unless $raf->Read($buff, 8) == 8; my ($size, $tag) = unpack('Na4', $buff); return 0 if $size < 8 and $size != 1; # validate the file format my $tagTablePtr = GetTagTable('Image::ExifTool::QuickTime::Main'); return 0 unless $$tagTablePtr{$tag}; # determine the file type if ($tag eq 'ftyp' and $size >= 12 and $size < 100000 and $raf->Read($buff, $size-8) == $size-8 and $buff !~ /^(....)+(qt )/s) { # file is MP4 format if 'ftyp' exists without 'qt ' as a compatible brand $ftype = 'MP4'; } else { $ftype = 'MOV'; } $et->SetFileType($ftype); # need to set "FileType" tag for a Condition $et->InitWriteDirs($dirMap{$ftype}, 'XMP'); $$et{DirMap} = $dirMap{$ftype}; # need access to directory map when writing SetByteOrder('MM'); $raf->Seek(0,0); # write the file $$dirInfo{Parent} = ''; $$dirInfo{DirName} = 'MOV'; return WriteQuickTime($et, $dirInfo, $tagTablePtr) ? 1 : -1; } 1; # end __END__ =head1 NAME Image::ExifTool::WriteQuickTime.pl - Write XMP to QuickTime (MOV and MP4) files =head1 SYNOPSIS These routines are autoloaded by Image::ExifTool::QuickTime. =head1 DESCRIPTION This file contains routines used by ExifTool to write XMP metadata to QuickTime-based file formats like MOV and MP4. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::QuickTime(3pm)|Image::ExifTool::QuickTime>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Writer.pl���������������������������������������������������000644 �000765 �000024 �00001013643 12643773512 021537� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Writer.pl # # Description: ExifTool write routines # # Notes: Also contains some less used ExifTool functions # # URL: http://owl.phy.queensu.ca/~phil/exiftool/ # # Revisions: 12/16/2004 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool; use strict; use Image::ExifTool::TagLookup qw(FindTagInfo TagExists); use Image::ExifTool::Fixup; sub AssembleRational($$@); sub LastInList($); sub CreateDirectory($$); sub NextFreeTagKey($$); sub RemoveNewValueHash($$$); sub RemoveNewValuesForGroup($$); sub GetWriteGroup1($$); sub Sanitize($$); sub ConvInv($$$$$;$$); my $loadedAllTables; # flag indicating we loaded all tables # the following is a road map of where we write each directory # in the different types of files. my %tiffMap = ( IFD0 => 'TIFF', IFD1 => 'IFD0', XMP => 'IFD0', ICC_Profile => 'IFD0', ExifIFD => 'IFD0', GPS => 'IFD0', SubIFD => 'IFD0', GlobParamIFD => 'IFD0', PrintIM => 'IFD0', IPTC => 'IFD0', Photoshop => 'IFD0', InteropIFD => 'ExifIFD', MakerNotes => 'ExifIFD', CanonVRD => 'MakerNotes', # (so VRDOffset will get updated) NikonCapture => 'MakerNotes', # (to allow delete by group) ); my %exifMap = ( IFD1 => 'IFD0', EXIF => 'IFD0', # to write EXIF as a block ExifIFD => 'IFD0', GPS => 'IFD0', SubIFD => 'IFD0', GlobParamIFD => 'IFD0', PrintIM => 'IFD0', InteropIFD => 'ExifIFD', MakerNotes => 'ExifIFD', NikonCapture => 'MakerNotes', # (to allow delete by group) # (no CanonVRD trailer allowed) ); my %jpegMap = ( %exifMap, # covers all JPEG EXIF mappings JFIF => 'APP0', CIFF => 'APP0', IFD0 => 'APP1', XMP => 'APP1', ICC_Profile => 'APP2', FlashPix => 'APP2', MPF => 'APP2', Meta => 'APP3', MetaIFD => 'Meta', RMETA => 'APP5', Ducky => 'APP12', Photoshop => 'APP13', Adobe => 'APP14', IPTC => 'Photoshop', MakerNotes => ['ExifIFD', 'CIFF'], # (first parent is the default) CanonVRD => 'MakerNotes', # (so VRDOffset will get updated) NikonCapture => 'MakerNotes', # (to allow delete by group) Comment => 'COM', ); my %dirMap = ( JPEG => \%jpegMap, EXV => \%jpegMap, TIFF => \%tiffMap, ORF => \%tiffMap, RAW => \%tiffMap, EXIF => \%exifMap, ); # groups we are allowed to delete # Notes: # 1) these names must either exist in %dirMap, or be translated in InitWriteDirs()) # 2) any dependencies must be added to %excludeGroups my @delGroups = qw( Adobe AFCP APP0 APP1 APP2 APP3 APP4 APP5 APP6 APP7 APP8 APP9 APP10 APP11 APP12 APP13 APP14 APP15 CanonVRD CIFF Ducky EXIF ExifIFD File FlashPix FotoStation GlobParamIFD GPS ICC_Profile IFD0 IFD1 InteropIFD IPTC JFIF Jpeg2000 MakerNotes Meta MetaIFD MIE MPF NikonCapture PDF PDF-update PhotoMechanic Photoshop PNG PNG-pHYs PrintIM RMETA RSRC SubIFD Trailer XML XML-* XMP XMP-* ); # family 2 group names that we can delete my @delGroup2 = qw( Audio Author Camera Document ExifTool Image Location Other Preview Printing Time Video ); # lookup for all valid family 2 groups (lower case) my %family2groups = map { lc $_ => 1 } @delGroup2, 'Unknown'; # groups we don't delete when deleting all information my $protectedGroups = '(IFD1|SubIFD|InteropIFD|GlobParamIFD|PDF-update|Adobe)'; # other group names of new tag values to remove when deleting an entire group my %removeGroups = ( IFD0 => [ 'EXIF', 'MakerNotes' ], EXIF => [ 'MakerNotes' ], ExifIFD => [ 'MakerNotes', 'InteropIFD' ], Trailer => [ 'CanonVRD' ], #(because we can add back CanonVRD as a block) ); # related family 0/1 groups in @delGroups (and not already in %jpegMap) # that must be removed from delete list when excluding a group my %excludeGroups = ( EXIF => [ qw(IFD0 IFD1 ExifIFD GPS MakerNotes GlobParamIFD InteropIFD PrintIM SubIFD) ], IFD0 => [ 'EXIF' ], IFD1 => [ 'EXIF' ], ExifIFD => [ 'EXIF' ], GPS => [ 'EXIF' ], MakerNotes => [ 'EXIF' ], InteropIFD => [ 'EXIF' ], GlobParamIFD => [ 'EXIF' ], PrintIM => [ 'EXIF' ], CIFF => [ 'MakerNotes' ], # technically correct, but very uncommon and not a good reason to avoid deleting trailer # IPTC => [ qw(AFCP FotoStation Trailer) ], AFCP => [ 'Trailer' ], FotoStation => [ 'Trailer' ], CanonVRD => [ 'Trailer' ], PhotoMechanic=> [ 'Trailer' ], MIE => [ 'Trailer' ], ); # translate (lower case) wanted group when writing for tags where group name may change my %translateWantGroup = ( ciff => 'canonraw', ); # group names to translate for writing my %translateWriteGroup = ( EXIF => 'ExifIFD', Meta => 'MetaIFD', File => 'Comment', # any entry in this table causes the write group to be set from the # tag information instead of whatever the user specified... MIE => 'MIE', APP14 => 'APP14', ); # names of valid EXIF and Meta directories (lower case keys): my %exifDirs = ( gps => 'GPS', exififd => 'ExifIFD', subifd => 'SubIFD', globparamifd => 'GlobParamIFD', interopifd => 'InteropIFD', makernotes => 'MakerNotes', previewifd => 'PreviewIFD', # (in MakerNotes) metaifd => 'MetaIFD', # Kodak APP3 Meta ); # min/max values for integer formats my %intRange = ( 'int8u' => [0, 0xff], 'int8s' => [-0x80, 0x7f], 'int16u' => [0, 0xffff], 'int16uRev' => [0, 0xffff], 'int16s' => [-0x8000, 0x7fff], 'int32u' => [0, 0xffffffff], 'int32s' => [-0x80000000, 0x7fffffff], ); # lookup for file types with block-writable EXIF my %blockExifTypes = map { $_ => 1 } qw(JPEG PNG JP2 MIE EXIF); my $maxSegmentLen = 0xfffd; # maximum length of data in a JPEG segment my $maxXMPLen = $maxSegmentLen; # maximum length of XMP data in JPEG # value separators when conversion list is used (in SetNewValue) my %listSep = ( PrintConv => '; ?', ValueConv => ' ' ); # printConv hash keys to ignore when doing reverse lookup my %ignorePrintConv = map { $_ => 1 } qw(OTHER BITMASK Notes); #------------------------------------------------------------------------------ # Set tag value # Inputs: 0) ExifTool object reference # 1) tag key, tag name, or '*' (optionally prefixed by group name), # or undef to reset all previous SetNewValue() calls # 2) new value (scalar, scalar ref or list ref), or undef to delete tag # 3-N) Options: # Type => PrintConv, ValueConv or Raw - specifies value type # AddValue => true to add to list of existing values instead of overwriting # DelValue => true to delete this existing value value from a list # Group => family 0 or 1 group name (case insensitive) # Replace => 0, 1 or 2 - overwrite previous new values (2=reset) # Protected => bitmask to write tags with specified protections # EditOnly => true to only edit existing tags (don't create new tag) # EditGroup => true to only edit existing groups (don't create new group) # Shift => undef, 0, +1 or -1 - shift value if possible # NoFlat => treat flattened tags as 'unsafe' # NoShortcut => true to prevent looking up shortcut tags # ProtectSaved => protect existing new values with a save count greater than this # CreateGroups => [internal use] createGroups hash ref from related tags # ListOnly => [internal use] set only list or non-list tags # SetTags => [internal use] hash ref to return tagInfo refs of set tags # Returns: number of tags set (plus error string in list context) # Notes: For tag lists (like Keywords), call repeatedly with the same tag name for # each value in the list. Internally, the new information is stored in # the following members of the $$self{NEW_VALUE}{$tagInfo} hash: # TagInfo - tag info ref # DelValue - list ref for values to delete # Value - list ref for values to add (not defined if deleting the tag) # IsCreating - must be set for the tag to be added for the standard file types, # otherwise just changed if it already exists. This may be # overridden for file types with a PREFERRED metadata type. # Set to 2 to create inidividual tags but not new groups # EditOnly - flag set if tag should never be created (regardless of file type). # If this is set, then IsCreating must be false # CreateOnly - flag set if creating only (never edit existing tag) # CreateGroups - hash of all family 0 group names where tag may be created # WriteGroup - group name where information is being written (correct case) # WantGroup - group name as specified in call to function (case insensitive) # Next - pointer to next new value hash (if more than one) # NoReplace - set for List-type tag if value was created with Replace=0 # AddBefore - number of list items added by a subsequent Replace=0 call # IsNVH - Flag indicating this is a new value hash # Shift - shift value # Save - counter used by SaveNewValues()/RestoreNewValues() # MAKER_NOTE_FIXUP - pointer to fixup if necessary for a maker note value sub SetNewValue($;$$%) { local $_; my ($self, $tag, $value, %options) = @_; my ($err, $tagInfo, $family); my $verbose = $$self{OPTIONS}{Verbose}; my $out = $$self{OPTIONS}{TextOut}; my $protected = $options{Protected} || 0; my $listOnly = $options{ListOnly}; my $setTags = $options{SetTags}; my $noFlat = $options{NoFlat}; my $numSet = 0; unless (defined $tag) { delete $$self{NEW_VALUE}; $$self{SAVE_COUNT} = 0; $$self{DEL_GROUP} = { }; return 1; } # allow value to be scalar or list reference if (ref $value) { if (ref $value eq 'ARRAY') { # value is an ARRAY so it may have more than one entry # - set values both separately and as a combined string if there are more than one if (@$value > 1) { # set all list-type tags first my $replace = $options{Replace}; my $noJoin; foreach (@$value) { $noJoin = 1 if ref $_; my ($n, $e) = SetNewValue($self, $tag, $_, %options, ListOnly => 1); $err = $e if $e; $numSet += $n; delete $options{Replace}; # don't replace earlier values in list } return $numSet if $noJoin; # don't join if list contains objects # and now set only non-list tags $value = join $$self{OPTIONS}{ListSep}, @$value; $options{Replace} = $replace; $listOnly = $options{ListOnly} = 0; } else { $value = $$value[0]; } } elsif (ref $value eq 'SCALAR') { $value = $$value; } } # un-escape as necessary and make sure the Perl UTF-8 flag is OFF for the value # if perl is 5.6 or greater (otherwise our byte manipulations get corrupted!!) $self->Sanitize(\$value) if defined $value and not ref $value; # set group name in options if specified ($options{Group}, $tag) = ($1, $2) if $tag =~ /(.*):(.+)/; # allow trailing '#' for ValueConv value $options{Type} = 'ValueConv' if $tag =~ s/#$//; my $convType = $options{Type} || ($$self{OPTIONS}{PrintConv} ? 'PrintConv' : 'ValueConv'); my (@wantGroup, $family2); my $wantGroup = $options{Group}; if ($wantGroup) { foreach (split /:/, $wantGroup) { next unless length($_) and /^(\d+)?(.*)/; # separate family number and group name my ($f, $g) = ($1, lc $2); # save group/family unless '*' or 'all' push @wantGroup, [ $f, $g ] unless $g eq '*' or $g eq 'all'; if (defined $f) { $f > 2 and return 0; # only allow family 0, 1 or 2 $family2 = 1 if $f == 2; # set flag indicating family 2 was used } else { $family2 = 1 if $family2groups{$g}; } } undef $wantGroup unless @wantGroup; } $tag =~ s/ .*//; # convert from tag key to tag name if necessary $tag = '*' if lc($tag) eq 'all'; # use '*' instead of 'all' # # handle group delete # while ($tag eq '*' and not defined $value and not $family2 and @wantGroup < 2) { # set groups to delete my (@del, $grp); my $remove = ($options{Replace} and $options{Replace} > 1); if ($wantGroup) { @del = grep /^$wantGroup$/i, @delGroups unless $wantGroup =~ /^XM[LP]-\*$/i; # remove associated groups when excluding from mass delete if (@del and $remove) { # remove associated groups in other family push @del, @{$excludeGroups{$del[0]}} if $excludeGroups{$del[0]}; # remove upstream groups according to JPEG map my $dirName = $del[0]; my @dirNames; for (;;) { my $parent = $jpegMap{$dirName}; if (ref $parent) { push @dirNames, @$parent; $parent = pop @dirNames; } $dirName = $parent || shift @dirNames or last; push @del, $dirName; # exclude this too } } # allow MIE groups to be deleted by number, # and allow any XMP family 1 group to be deleted push @del, uc($wantGroup) if $wantGroup =~ /^(MIE\d+|XM[LP]-[-\w]*\w)$/i; } else { # push all groups plus '*', except the protected groups push @del, (grep !/^$protectedGroups$/, @delGroups), '*'; } if (@del) { ++$numSet; my @donegrps; my $delGroup = $$self{DEL_GROUP}; foreach $grp (@del) { if ($remove) { my $didExcl; if ($grp =~ /^(XM[LP])(-.*)?$/) { my $x = $1; if ($grp eq $x) { # exclude all related family 1 groups too foreach (keys %$delGroup) { next unless /^(-?)$x-/; push @donegrps, $_ unless $1; delete $$delGroup{$_}; } } elsif ($$delGroup{"$x-*"} and not $$delGroup{"-$grp"}) { # must also exclude XMP or XML to prevent bulk delete if ($$delGroup{$x}) { push @donegrps, $x; delete $$delGroup{$x}; } # flag XMP/XML family 1 group for exclusion with leading '-' $$delGroup{"-$grp"} = 1; $didExcl = 1; } } if (exists $$delGroup{$grp}) { delete $$delGroup{$grp}; } else { next unless $didExcl; } } else { $$delGroup{$grp} = 1; # add flag for XMP/XML family 1 groups if deleting all XMP if ($grp =~ /^XM[LP]$/) { $$delGroup{"$grp-*"} = 1; push @donegrps, "$grp-*"; } # remove all of this group from previous new values $self->RemoveNewValuesForGroup($grp); } push @donegrps, $grp; } if ($verbose > 1 and @donegrps) { @donegrps = sort @donegrps; my $msg = $remove ? 'Excluding from deletion' : 'Deleting tags in'; print $out " $msg: @donegrps\n"; } } elsif (grep /^$wantGroup$/i, @delGroup2) { last; # allow tags to be deleted by group2 name } else { $err = "Not a deletable group: $wantGroup"; } # all done return ($numSet, $err) if wantarray; $err and warn "$err\n"; return $numSet; } # initialize write/create flags my $createOnly; my $editOnly = $options{EditOnly}; my $editGroup = $options{EditGroup}; my $writeMode = $$self{OPTIONS}{WriteMode}; if ($writeMode ne 'wcg') { $createOnly = 1 if $writeMode !~ /w/i; # don't write existing tags if ($writeMode !~ /c/i) { return 0 if $createOnly; # nothing to do unless writing existing tags $editOnly = 1; # don't create new tags } elsif ($writeMode !~ /g/i) { $editGroup = 1; # don't create new groups } } # # get list of tags we want to set # my $origTag = $tag; my @matchingTags = FindTagInfo($tag); until (@matchingTags) { my $langCode; # allow language suffix of form "-en_CA" or "-<rfc3066>" on tag name if ($tag =~ /^([?*\w]+)-([a-z]{2})(_[a-z]{2})$/i or # MIE $tag =~ /^([?*\w]+)-([a-z]{2,3}|[xi])(-[a-z\d]{2,8}(-[a-z\d]{1,8})*)?$/i) # XMP/PNG { $tag = $1; # normalize case of language codes $langCode = lc($2); $langCode .= (length($3) == 3 ? uc($3) : lc($3)) if $3; my @newMatches = FindTagInfo($tag); foreach $tagInfo (@newMatches) { # only allow language codes in tables which support them next unless $$tagInfo{Table}; my $langInfoProc = $$tagInfo{Table}{LANG_INFO} or next; my $langInfo = &$langInfoProc($tagInfo, $langCode); push @matchingTags, $langInfo if $langInfo; } last if @matchingTags; } elsif (not $options{NoShortcut}) { # look for a shortcut or alias require Image::ExifTool::Shortcuts; my ($match) = grep /^\Q$tag\E$/i, keys %Image::ExifTool::Shortcuts::Main; undef $err; if ($match) { $options{NoShortcut} = 1; foreach $tag (@{$Image::ExifTool::Shortcuts::Main{$match}}) { my ($n, $e) = $self->SetNewValue($tag, $value, %options); $numSet += $n; $e and $err = $e; } undef $err if $numSet; # no error if any set successfully return ($numSet, $err) if wantarray; $err and warn "$err\n"; return $numSet; } } unless ($listOnly) { if (not TagExists($tag)) { $err = "Tag '$origTag' does not exist"; $err .= ' or has a bad language code' if $origTag =~ /-/; } elsif ($langCode) { $err = "Tag '$tag' does not support alternate languages"; } elsif ($wantGroup) { $err = "Sorry, $wantGroup:$origTag doesn't exist or isn't writable"; } else { $err = "Sorry, $origTag is not writable"; } $verbose > 2 and print $out "$err\n"; } # all done return ($numSet, $err) if wantarray; $err and warn "$err\n"; return $numSet; } # get group name that we're looking for my $foundMatch = 0; my ($ifdName, $mieGroup, $movGroup, $fg); # set family 1 group names foreach $fg (@wantGroup) { next if $$fg[0] and $$fg[0] != 1; $_ = $$fg[1]; # set $ifdName if this group is a valid IFD or SubIFD name if (/^IFD(\d+)$/i) { $ifdName = "IFD$1"; } elsif (/^SubIFD(\d+)$/i) { $ifdName = "SubIFD$1"; } elsif (/^Version(\d+)$/i) { $ifdName = "Version$1"; # Sony IDC VersionIFD } elsif (/^Track(\d+)$/i) { $movGroup = "Track$1"; # QuickTime track } elsif (/^MIE(\d*-?)(\w+)$/i) { $mieGroup = "MIE$1" . ucfirst(lc($2)); } else { $ifdName = $exifDirs{$_} if $exifDirs{$_}; if (not $ifdName and /^XMP\b/i) { # must load XMP table to set group1 names my $table = GetTagTable('Image::ExifTool::XMP::Main'); my $writeProc = $$table{WRITE_PROC}; $writeProc and &$writeProc(); } } } # # determine the groups for all tags found, and the tag with # the highest priority group # my (@tagInfoList, @writeAlsoList, %writeGroup, %preferred, %tagPriority); my (%avoid, $wasProtected, $noCreate, %highestPriority); TAG: foreach $tagInfo (@matchingTags) { $tag = $$tagInfo{Name}; # get tag name for warnings my $lcTag = lc $tag; # get lower-case tag name for use in variables # initialize highest priority if we are starting a new tag $highestPriority{$lcTag} = -999 unless defined $highestPriority{$lcTag}; my ($priority, $writeGroup); if ($wantGroup) { my @grp = $self->GetGroup($tagInfo); foreach $fg (@wantGroup) { my ($fam, $lcWant) = @$fg; $lcWant = $translateWantGroup{$lcWant} if $translateWantGroup{$lcWant}; # only set tag in specified group if (not defined $fam) { next if $lcWant eq lc $grp[0] or $lcWant eq lc $grp[2]; } elsif ($fam != 1 and not $$tagInfo{AllowGroup}) { next if $lcWant eq lc $grp[$fam]; next TAG; # wrong group } # handle family 1 groups specially if ($grp[0] eq 'EXIF' or $grp[0] eq 'SonyIDC') { next TAG unless $ifdName and $lcWant eq lc($ifdName); # can't yet write PreviewIFD tags $ifdName eq 'PreviewIFD' and ++$foundMatch, next TAG; $writeGroup = $ifdName; # write to the specified IFD } elsif ($grp[0] eq 'QuickTime' and $grp[1] eq 'Track#') { next TAG unless $movGroup and $lcWant eq lc($movGroup); $writeGroup = $movGroup; } elsif ($grp[0] eq 'MIE') { next TAG unless $mieGroup and $lcWant eq lc($mieGroup); $writeGroup = $mieGroup; # write to specific MIE group # set specific write group with document number if specified if ($writeGroup =~ /^MIE\d+$/ and $$tagInfo{Table}{WRITE_GROUP}) { $writeGroup = $$tagInfo{Table}{WRITE_GROUP}; $writeGroup =~ s/^MIE/$mieGroup/; } } elsif (not $$tagInfo{AllowGroup} or $lcWant !~ /^$$tagInfo{AllowGroup}$/i) { # allow group1 name to be specified next TAG unless $lcWant eq lc $grp[1]; } } $writeGroup or $writeGroup = $grp[0]; $priority = 1000; # highest priority since group was specified } ++$foundMatch; # must do a dummy call to the write proc to autoload write package # before checking Writable flag my $table = $$tagInfo{Table}; my $writeProc = $$table{WRITE_PROC}; # load source table if this was a user-defined table if ($$table{SRC_TABLE}) { my $src = GetTagTable($$table{SRC_TABLE}); $writeProc = $$src{WRITE_PROC} unless $writeProc; } next unless $writeProc and &$writeProc(); # must still check writable flags in case of UserDefined tags my $writable = $$tagInfo{Writable}; next unless $writable or ($$table{WRITABLE} and not defined $writable and not $$tagInfo{SubDirectory}); # set specific write group (if we didn't already) if (not $writeGroup or $translateWriteGroup{$writeGroup}) { # use default write group $writeGroup = $$tagInfo{WriteGroup} || $$tagInfo{Table}{WRITE_GROUP}; # use group 0 name if no WriteGroup specified my $group0 = $self->GetGroup($tagInfo, 0); $writeGroup or $writeGroup = $group0; # get priority for this group unless ($priority) { $priority = $$self{WRITE_PRIORITY}{lc($writeGroup)}; unless ($priority) { $priority = $$self{WRITE_PRIORITY}{lc($group0)} || 0; } } } # don't write tag if protected my $prot = $$tagInfo{Protected}; $prot = 1 if $noFlat and defined $$tagInfo{Flat}; if ($prot) { $prot &= ~$protected; if ($prot) { my %lkup = ( 1=>'unsafe', 2=>'protected', 3=>'unsafe and protected'); $wasProtected = $lkup{$prot}; if ($verbose > 1) { my $wgrp1 = $self->GetWriteGroup1($tagInfo, $writeGroup); print $out "Sorry, $wgrp1:$tag is $wasProtected for writing\n"; } next; } } # set priority for this tag $tagPriority{$tagInfo} = $priority; if ($priority > $highestPriority{$lcTag}) { $highestPriority{$lcTag} = $priority; $preferred{$lcTag} = { $tagInfo => 1 }; $avoid{$lcTag} = $$tagInfo{Avoid} ? 1 : 0; } elsif ($priority == $highestPriority{$lcTag}) { # create all tags with highest priority $preferred{$lcTag}{$tagInfo} = 1; ++$avoid{$lcTag} if $$tagInfo{Avoid}; } if ($$tagInfo{WriteAlso}) { # store WriteAlso tags separately so we can set them first push @writeAlsoList, $tagInfo; } else { push @tagInfoList, $tagInfo; } $writeGroup{$tagInfo} = $writeGroup; } # sort tag info list in reverse order of priority (higest number last) # so we get the highest priority error message in the end @tagInfoList = sort { $tagPriority{$a} <=> $tagPriority{$b} } @tagInfoList; # must write any tags which also write other tags first unshift @tagInfoList, @writeAlsoList if @writeAlsoList; # check priorities for each set of tags we are writing my $lcTag; foreach $lcTag (keys %preferred) { # don't create tags with priority 0 if group priorities are set if ($preferred{$lcTag} and $highestPriority{$lcTag} == 0 and %{$$self{WRITE_PRIORITY}}) { delete $preferred{$lcTag} } # avoid creating tags with 'Avoid' flag set if there are other alternatives if ($avoid{$lcTag} and $preferred{$lcTag}) { if ($avoid{$lcTag} < scalar(keys %{$preferred{$lcTag}})) { # just remove the 'Avoid' tags since there are other preferred tags foreach $tagInfo (@tagInfoList) { next unless $lcTag eq lc $$tagInfo{Name}; delete $preferred{$lcTag}{$tagInfo} if $$tagInfo{Avoid}; } } elsif ($highestPriority{$lcTag} < 1000) { # look for another priority tag to create instead my $nextHighest = 0; my @nextBestTags; foreach $tagInfo (@tagInfoList) { next unless $lcTag eq lc $$tagInfo{Name}; my $priority = $tagPriority{$tagInfo} or next; next if $priority == $highestPriority{$lcTag}; next if $priority < $nextHighest; next if $$tagInfo{Avoid} or $$tagInfo{Permanent}; next if $writeGroup{$tagInfo} eq 'MakerNotes'; if ($nextHighest < $priority) { $nextHighest = $priority; undef @nextBestTags; } push @nextBestTags, $tagInfo; } if (@nextBestTags) { # change our preferred tags to the next best tags delete $preferred{$lcTag}; foreach $tagInfo (@nextBestTags) { $preferred{$lcTag}{$tagInfo} = 1; } } } } } # # generate new value hash for each tag # my ($prioritySet, $createGroups, %alsoWrote); delete $$self{CHECK_WARN}; # reset CHECK_PROC warnings # loop through all valid tags to find the one(s) to write foreach $tagInfo (@tagInfoList) { next if $alsoWrote{$tagInfo}; # don't rewrite tags we already wrote # only process List or non-List tags if specified next if defined $listOnly and ($listOnly xor $$tagInfo{List}); my $noConv; my $writeGroup = $writeGroup{$tagInfo}; my $permanent = $$tagInfo{Permanent}; $writeGroup eq 'MakerNotes' and $permanent = 1 unless defined $permanent; my $wgrp1 = $self->GetWriteGroup1($tagInfo, $writeGroup); $tag = $$tagInfo{Name}; # get tag name for warnings my $pref = $preferred{lc $tag} || { }; my $shift = $options{Shift}; my $addValue = $options{AddValue}; if (defined $shift) { # (can't currently shift list-type tags) if (not $$tagInfo{List}) { unless ($shift) { # set shift according to AddValue/DelValue $shift = 1 if $addValue; if ($options{DelValue}) { # can shift a date/time with -=, but this is # a conditional delete operation for other tags $shift = -1 if $$tagInfo{Shift} and $$tagInfo{Shift} eq 'Time'; } } if ($shift and (not defined $value or not length $value)) { # (now allow -= to be used for shiftable tag - v8.05) #$err = "No value for time shift of $wgrp1:$tag"; #$verbose > 2 and print $out "$err\n"; #next; undef $shift; } } elsif ($shift) { $err = "$wgrp1:$tag is not shiftable"; $verbose > 2 and print $out "$err\n"; next; } } my $val = $value; if (defined $val) { # check to make sure this is a List or Shift tag if adding if ($addValue and not ($shift or $$tagInfo{List})) { if ($addValue eq '2') { undef $addValue; # quitely reset this option } else { $err = "Can't add $wgrp1:$tag (not a List type)"; $verbose > 2 and print $out "$err\n"; next; } } if ($shift) { if ($$tagInfo{Shift} and $$tagInfo{Shift} eq 'Time') { # add '+' or '-' prefix to indicate shift direction $val = ($shift > 0 ? '+' : '-') . $val; # check the shift for validity require 'Image/ExifTool/Shift.pl'; my $err2 = CheckShift($$tagInfo{Shift}, $val); if ($err2) { $err = "$err2 for $wgrp1:$tag"; $verbose > 2 and print $out "$err\n"; next; } } elsif (IsFloat($val)) { $val *= $shift; } else { $err = "Shift value for $wgrp1:$tag is not a number"; $verbose > 2 and print $out "$err\n"; next; } $noConv = 1; # no conversions if shifting tag } elsif (not length $val and $options{DelValue}) { $noConv = 1; # no conversions for deleting empty value } elsif (ref $val eq 'HASH' and not $$tagInfo{Struct}) { $err = "Can't write a structure to $wgrp1:$tag"; $verbose > 2 and print $out "$err\n"; next; } } elsif ($permanent) { # can't delete permanent tags, so set them to DelValue or empty string instead if (defined $$tagInfo{DelValue}) { $val = $$tagInfo{DelValue}; $noConv = 1; # DelValue is the raw value, so no conversion necessary } else { $val = ''; } } elsif ($addValue or $options{DelValue}) { $err = "No value to add or delete in $wgrp1:$tag"; $verbose > 2 and print $out "$err\n"; next; } else { if ($$tagInfo{DelCheck}) { #### eval DelCheck ($self, $tagInfo, $wantGroup) my $err2 = eval $$tagInfo{DelCheck}; $@ and warn($@), $err2 = 'Error evaluating DelCheck'; if (defined $err2) { # (allow other tags to be set using DelCheck as a hook) $err2 or goto WriteAlso; # GOTO! $err2 .= ' for' unless $err2 =~ /delete$/; $err = "$err2 $wgrp1:$tag"; $verbose > 2 and print $out "$err\n"; next; } } $noConv = 1; # value is not defined, so don't do conversion } # apply inverse PrintConv and ValueConv conversions # save ValueConv setting for use in ConvInv() unless ($noConv) { # set default conversion type used by ConvInv() and CHECK_PROC routines $$self{ConvType} = $convType; my $e; ($val,$e) = $self->ConvInv($val,$tagInfo,$tag,$wgrp1,$$self{ConvType},$wantGroup); if (defined $e) { # empty error string causes error to be ignored without setting the value $e or goto WriteAlso; # GOTO! $err = $e; } } if (not defined $val and defined $value) { # if value conversion failed, we must still add a NEW_VALUE # entry for this tag it it was a DelValue next unless $options{DelValue}; $val = 'xxx never delete xxx'; } $$self{NEW_VALUE} or $$self{NEW_VALUE} = { }; if ($options{Replace}) { # delete the previous new value $self->GetNewValueHash($tagInfo, $writeGroup, 'delete', $options{ProtectSaved}); # also delete related tag previous new values if ($$tagInfo{WriteAlso}) { my $wtag; foreach $wtag (keys %{$$tagInfo{WriteAlso}}) { my ($n,$e) = $self->SetNewValue($wtag, undef, Replace=>2); $numSet += $n; } } $options{Replace} == 2 and ++$numSet, next; } if (defined $val) { # we are editing this tag, so create a NEW_VALUE hash entry my $nvHash = $self->GetNewValueHash($tagInfo, $writeGroup, 'create', $options{ProtectSaved}); # ignore new values protected with ProtectSaved $nvHash or ++$numSet, next; # (increment $numSet to avoid warning) $$nvHash{NoReplace} = 1 if $$tagInfo{List} and not $options{Replace}; $$nvHash{WantGroup} = $wantGroup; $$nvHash{EditOnly} = 1 if $editOnly; # save maker note information if writing maker notes if ($$tagInfo{MakerNotes}) { $$nvHash{MAKER_NOTE_FIXUP} = $$self{MAKER_NOTE_FIXUP}; } if ($createOnly) { # create only (never edit) # empty item in DelValue list to never edit existing value $$nvHash{DelValue} = [ '' ]; $$nvHash{CreateOnly} = 1; } elsif ($options{DelValue} or $addValue or $shift) { # flag any AddValue or DelValue by creating the DelValue list $$nvHash{DelValue} or $$nvHash{DelValue} = [ ]; if ($shift) { # add shift value to list $$nvHash{Shift} = $val; } elsif ($options{DelValue}) { # don't create if we are replacing a specific value $$nvHash{IsCreating} = 0 unless $val eq '' or $$tagInfo{List}; # add delete value to list push @{$$nvHash{DelValue}}, ref $val eq 'ARRAY' ? @$val : $val; if ($verbose > 1) { my $verb = $permanent ? 'Replacing' : 'Deleting'; my $fromList = $$tagInfo{List} ? ' from list' : ''; my @vals = (ref $val eq 'ARRAY' ? @$val : $val); foreach (@vals) { if (ref $_ eq 'HASH') { require 'Image/ExifTool/XMPStruct.pl'; $_ = Image::ExifTool::XMP::SerializeStruct($_); } print $out "$verb $wgrp1:$tag$fromList if value is '$_'\n"; } } } } # set priority flag to add only the high priority info # (will only create the priority tag if it doesn't exist, # others get changed only if they already exist) if ($$pref{$tagInfo} or $$tagInfo{Table}{PREFERRED}) { if ($permanent or $shift) { # don't create permanent or Shift-ed tag but define IsCreating # so we know that it is the preferred tag $$nvHash{IsCreating} = 0; } elsif (($$tagInfo{List} and not $options{DelValue}) or not ($$nvHash{DelValue} and @{$$nvHash{DelValue}}) or # also create tag if any DelValue value is empty ('') grep(/^$/,@{$$nvHash{DelValue}})) { $$nvHash{IsCreating} = $editOnly ? 0 : ($editGroup ? 2 : 1); # add to hash of groups where this tag is being created $createGroups or $createGroups = $options{CreateGroups} || { }; $$createGroups{$self->GetGroup($tagInfo, 0)} = 1; $$nvHash{CreateGroups} = $createGroups; } } if ($$nvHash{IsCreating}) { if (%{$$self{DEL_GROUP}}) { my ($grp, @grps); foreach $grp (keys %{$$self{DEL_GROUP}}) { next if $$self{DEL_GROUP}{$grp} == 2; # set flag indicating tags were written after this group was deleted $$self{DEL_GROUP}{$grp} = 2; push @grps, $grp; } if ($verbose > 1 and @grps) { @grps = sort @grps; print $out " Writing new tags after deleting groups: @grps\n"; } } } elsif ($createOnly) { $noCreate = $permanent ? 'permanent' : ($$tagInfo{Avoid} ? 'avoided' : ''); $noCreate or $noCreate = $shift ? 'shifting' : 'not preferred'; $verbose > 2 and print $out "Not creating $wgrp1:$tag ($noCreate)\n"; next; # nothing to do (not creating and not editing) } if ($shift or not $options{DelValue}) { $$nvHash{Value} or $$nvHash{Value} = [ ]; if (not $$tagInfo{List}) { # not a List tag -- overwrite existing value $$nvHash{Value}[0] = $val; } elsif (defined $$nvHash{AddBefore} and @{$$nvHash{Value}} >= $$nvHash{AddBefore}) { # values from a later argument have been added (ie. Replace=0) # to this list, so the new values should come before these splice @{$$nvHash{Value}}, -$$nvHash{AddBefore}, 0, ref $val eq 'ARRAY' ? @$val : $val; } else { # add at end of existing list push @{$$nvHash{Value}}, ref $val eq 'ARRAY' ? @$val : $val; } if ($verbose > 1) { my $ifExists = $$nvHash{IsCreating} ? ( $createOnly ? ($$nvHash{IsCreating} == 2 ? " if $writeGroup exists and tag doesn't" : " if tag doesn't exist") : ($$nvHash{IsCreating} == 2 ? " if $writeGroup exists" : '')) : (($$nvHash{DelValue} and @{$$nvHash{DelValue}}) ? ' if tag was deleted' : ' if tag exists'); my $verb = ($shift ? 'Shifting' : ($addValue ? 'Adding' : 'Writing')); print $out "$verb $wgrp1:$tag$ifExists\n"; } } } elsif ($permanent) { $err = "Can't delete Permanent tag $wgrp1:$tag"; $verbose > 1 and print $out "$err\n"; next; } elsif ($addValue or $options{DelValue}) { $verbose > 1 and print $out "Adding/Deleting nothing does nothing\n"; next; } else { # create empty new value hash entry to delete this tag $self->GetNewValueHash($tagInfo, $writeGroup, 'delete'); my $nvHash = $self->GetNewValueHash($tagInfo, $writeGroup, 'create'); $$nvHash{WantGroup} = $wantGroup; $verbose > 1 and print $out "Deleting $wgrp1:$tag\n"; } $$setTags{$tagInfo} = 1 if $setTags; $prioritySet = 1 if $$pref{$tagInfo}; WriteAlso: ++$numSet; # also write related tags my $writeAlso = $$tagInfo{WriteAlso}; if ($writeAlso) { my ($wtag, $n); local $SIG{'__WARN__'} = \&SetWarning; foreach $wtag (keys %$writeAlso) { my %opts = ( Type => 'ValueConv', Protected => $protected | 0x02, AddValue => $addValue, DelValue => $options{DelValue}, Replace => $options{Replace}, # handle lists properly CreateGroups => $createGroups, SetTags => \%alsoWrote, # remember tags already written ); undef $evalWarning; #### eval WriteAlso ($val) my $v = eval $$writeAlso{$wtag}; $@ and $evalWarning = $@; unless ($evalWarning) { ($n,$evalWarning) = $self->SetNewValue($wtag, $v, %opts); $numSet += $n; # count this as being set if any related tag is set $prioritySet = 1 if $n and $$pref{$tagInfo}; } if ($evalWarning and (not $err or $verbose > 2)) { my $str = CleanWarning(); if ($str) { $str .= " for $wtag" unless $str =~ / for [-\w:]+$/; $str .= " in $wgrp1:$tag (WriteAlso)"; $err or $err = $str; print $out "$str\n" if $verbose > 2; } } } } } # print warning if we couldn't set our priority tag if (defined $err and not $prioritySet) { warn "$err\n" if $err and not wantarray; } elsif (not $numSet) { my $pre = $wantGroup ? ($ifdName || $wantGroup) . ':' : ''; if ($wasProtected) { $verbose = 0; # we already printed this verbose message unless ($options{Replace} and $options{Replace} == 2) { $err = "Sorry, $pre$tag is $wasProtected for writing"; } } elsif (not $listOnly) { if ($origTag =~ /[?*]/) { if ($noCreate) { $err = "No tags matching 'pre$origTag' will be created"; $verbose = 0; # (already printed) } elsif ($foundMatch) { $err = "Sorry, no writable tags matching '$pre$origTag'"; } else { $err = "No matching tags for '$pre$origTag'"; } } elsif ($noCreate) { $err = "Not creating $pre$tag"; $verbose = 0; # (already printed) } elsif ($foundMatch) { $err = "Sorry, $pre$tag is not writable"; } else { $err = "Tag '$pre$tag' does not exist"; } } if ($err) { $verbose > 2 and print $out "$err\n"; warn "$err\n" unless wantarray; } } elsif ($$self{CHECK_WARN}) { $err = $$self{CHECK_WARN}; $verbose > 2 and print $out "$err\n"; } elsif ($err and not $verbose) { undef $err; } return ($numSet, $err) if wantarray; return $numSet; } #------------------------------------------------------------------------------ # set new values from information in specified file # Inputs: 0) ExifTool object reference, 1) source file name or reference, etc # 2-N) List of tags to set (or all if none specified), or reference(s) to # hash for options to pass to SetNewValue. The Replace option defaults # to 1 for SetNewValuesFromFile -- set this to 0 to allow multiple tags # to be copied to a list # Returns: Hash of information set successfully (includes Warning or Error messages) # Notes: Tag names may contain a group prefix, a leading '-' to exclude from copy, # and/or a trailing '#' to copy the ValueConv value. The tag name '*' may # be used to represent all tags in a group. An optional destination tag # may be specified with '>DSTTAG' ('DSTTAG<TAG' also works, but in this # case the source tag may also be an expression involving tag names). sub SetNewValuesFromFile($$;@) { local $_; my ($self, $srcFile, @setTags) = @_; my ($key, $tag, @exclude, @reqTags); # get initial SetNewValuesFromFile options my %opts = ( Replace => 1 ); # replace existing list items by default while (ref $setTags[0] eq 'HASH') { $_ = shift @setTags; foreach $key (keys %$_) { $opts{$key} = $$_{$key}; } } # expand shortcuts @setTags and ExpandShortcuts(\@setTags); my $srcExifTool = new Image::ExifTool; # set flag to indicate we are being called from inside SetNewValuesFromFile() $$srcExifTool{TAGS_FROM_FILE} = 1; # synchronize and increment the file sequence number $$srcExifTool{FILE_SEQUENCE} = $$self{FILE_SEQUENCE}++; # set options for our extraction tool my $options = $$self{OPTIONS}; # copy both structured and flattened tags by default (but flattened tags are "unsafe") my $structOpt = defined $$options{Struct} ? $$options{Struct} : 2; # copy structures only if no tags specified (since flattened tags are "unsafe") $structOpt = 1 if $structOpt eq '2' and not @setTags; # +------------------------------------------+ # ! DON'T FORGET!! Must consider each new ! # ! option to decide how it is handled here. ! # +------------------------------------------+ $srcExifTool->Options( Binary => 1, Charset => $$options{Charset}, CharsetEXIF => $$options{CharsetEXIF}, CharsetFileName => $$options{CharsetFileName}, CharsetID3 => $$options{CharsetID3}, CharsetIPTC => $$options{CharsetIPTC}, CharsetPhotoshop=> $$options{CharsetPhotoshop}, Composite => $$options{Composite}, CoordFormat => $$options{CoordFormat} || '%d %d %.8f', # copy coordinates at high resolution unless otherwise specified DateFormat => $$options{DateFormat}, Duplicates => 1, Escape => $$options{Escape}, # Exclude set below ExtendedXMP => $$options{ExtendedXMP}, ExtractEmbedded => $$options{ExtractEmbedded}, FastScan => $$options{FastScan}, Filter => $$options{Filter}, FixBase => $$options{FixBase}, GlobalTimeShift => $$options{GlobalTimeShift}, IgnoreMinorErrors=>$$options{IgnoreMinorErrors}, Lang => $$options{Lang}, LargeFileSupport=> $$options{LargeFileSupport}, List => 1, ListItem => $$options{ListItem}, ListSep => $$options{ListSep}, MakerNotes => $$options{FastScan} && $$options{FastScan} > 1 ? undef : 1, MDItemTags => $$options{MDItemTags}, MissingTagValue => $$options{MissingTagValue}, NoPDFList => $$options{NoPDFList}, Password => $$options{Password}, PrintConv => $$options{PrintConv}, QuickTimeUTC => $$options{QuickTimeUTC}, RequestAll => 1, # (is this still necessary now that RequestTags are being set?) RequestTags => $$options{RequestTags}, ScanForXMP => $$options{ScanForXMP}, StrictDate => 1, Struct => $structOpt, SystemTags => $$options{SystemTags}, Unknown => $$options{Unknown}, UserParam => $$options{UserParam}, XMPAutoConv => $$options{XMPAutoConv}, ); foreach $tag (@setTags) { next if ref $tag; if ($tag =~ /^-(.*)/) { # avoid extracting tags that are excluded push @exclude, $1; next; } # add specified tags to list of requested tags $_ = $tag; if (/(.+?)\s*(>|<)\s*(.+)/) { if ($2 eq '>') { $_ = $1; } else { $_ = $3; /\$/ and push(@reqTags, /\$\{?(?:[-\w]+:)*([-\w?*]+)/g), next; } } push @reqTags, $2 if /(^|:)([-\w?*]+)#?$/; } if (@exclude) { ExpandShortcuts(\@exclude, 1); $srcExifTool->Options(Exclude => \@exclude); } $srcExifTool->Options(RequestTags => \@reqTags) if @reqTags; my $printConv = $$options{PrintConv}; if ($opts{Type}) { # save source type separately because it may be different than dst Type $opts{SrcType} = $opts{Type}; # override PrintConv option with initial Type if given $printConv = ($opts{Type} eq 'PrintConv' ? 1 : 0); $srcExifTool->Options(PrintConv => $printConv); } my $srcType = $printConv ? 'PrintConv' : 'ValueConv'; # get all tags from source file (including MakerNotes block) my $info = $srcExifTool->ImageInfo($srcFile); return $info if $$info{Error} and $$info{Error} eq 'Error opening file'; delete $$srcExifTool{VALUE}{Error}; # delete so we can check this later # sort tags in reverse order so we get priority tag last my @tags = reverse sort keys %$info; # # simply transfer all tags from source image if no tags specified # unless (@setTags) { # transfer maker note information to this object $$self{MAKER_NOTE_FIXUP} = $$srcExifTool{MAKER_NOTE_FIXUP}; $$self{MAKER_NOTE_BYTE_ORDER} = $$srcExifTool{MAKER_NOTE_BYTE_ORDER}; foreach $tag (@tags) { # don't try to set errors or warnings next if $tag =~ /^(Error|Warning)\b/; # get approprite value type if necessary if ($opts{SrcType} and $opts{SrcType} ne $srcType) { $$info{$tag} = $srcExifTool->GetValue($tag, $opts{SrcType}); } # set value for this tag my ($n, $e) = $self->SetNewValue($tag, $$info{$tag}, %opts); # delete this tag if we could't set it $n or delete $$info{$tag}; } return $info; } # # transfer specified tags in the proper order # # 1) loop through input list of tags to set, and build @setList my (@setList, $set, %setMatches, $t); foreach $t (@setTags) { if (ref $t eq 'HASH') { # update current options foreach $key (keys %$t) { $opts{$key} = $$t{$key}; } next; } # make a copy of the current options for this setTag # (also use this hash to store expression and wildcard flags, EXPR and WILD) my $opts = { %opts }; $tag = lc $t; # change tag/group names to all lower case my (@fg, $grp, $dst, $dstGrp, $dstTag, $isExclude); # handle redirection to another tag if ($tag =~ /(.+?)\s*(>|<)\s*(.+)/) { $dstGrp = ''; my $opt; if ($2 eq '>') { ($tag, $dstTag) = ($1, $3); # flag add and delete (eg. '+<' and '-<') redirections $opt = $1 if $tag =~ s/\s*([-+])$// or $dstTag =~ s/^([-+])\s*//; } else { ($tag, $dstTag) = ($3, $1); $opt = $1 if $dstTag =~ s/\s*([-+])$//; # handle expressions if ($tag =~ /\$/) { $tag = $t; # restore original case # recover leading whitespace (except for initial single space) $tag =~ s/(.+?)\s*(>|<) ?//; $$opts{EXPR} = 1; # flag this expression } else { $opt = $1 if $tag =~ s/^([-+])\s*//; } } # validate tag name(s) $$opts{EXPR} or ValidTagName($tag) or $self->Warn("Invalid tag name '$tag'"), next; ValidTagName($dstTag) or $self->Warn("Invalid tag name '$dstTag'"), next; # translate '+' and '-' to appropriate SetNewValue option if ($opt) { $$opts{{ '+' => 'AddValue', '-' => 'DelValue' }->{$opt}} = 1; $$opts{Shift} = 0; # shift if shiftable } ($dstGrp, $dstTag) = ($1, $2) if $dstTag =~ /(.*):(.+)/; # ValueConv may be specified separately on the destination with '#' $$opts{Type} = 'ValueConv' if $dstTag =~ s/#$//; # replace tag name of 'all' with '*' $dstTag = '*' if $dstTag eq 'all'; } unless ($$opts{EXPR}) { $isExclude = ($tag =~ s/^-//); if ($tag =~ /(.*):(.+)/) { ($grp, $tag) = ($1, $2); foreach (split /:/, $grp) { # save family/groups in list (ignoring 'all' and '*') next unless length($_) and /^(\d+)?(.*)/; push @fg, [ $1, $2 ] unless $2 eq '*' or $2 eq 'all'; } } # allow ValueConv to be specified by a '#' on the tag name if ($tag =~ s/#$//) { $$opts{SrcType} = 'ValueConv'; $$opts{Type} = 'ValueConv' unless $dstTag; } # replace 'all' with '*' in tag and group names $tag = '*' if $tag eq 'all'; # allow wildcards in tag names (handle differently from all tags: '*') if ($tag =~ /[?*]/ and $tag ne '*') { $$opts{WILD} = 1; # set flag indicating wildcards were used in source tag $tag =~ s/\*/[-\\w]*/g; $tag =~ s/\?/[-\\w]/g; } } # redirect, exclude or set this tag (Note: @fg is empty if we don't care about the group) if ($dstTag) { # redirect this tag $isExclude and return { Error => "Can't redirect excluded tag" }; # set destination group the same as source if necessary # (removed in 7.72 so '-xmp:*>*:*' will preserve XMP family 1 groups) # $dstGrp = $grp if $dstGrp eq '*' and $grp; # write to specified destination group/tag $dst = [ $dstGrp, $dstTag ]; } elsif ($isExclude) { # implicitly assume '*' if first entry is an exclusion unshift @setList, [ [ ], '*', [ '', '*' ], $opts ] unless @setList; # exclude this tag by leaving $dst undefined } else { $dst = [ $grp || '', $$opts{WILD} ? '*' : $tag ]; # use same group name for dest } # save in reverse order so we don't set tags before an exclude unshift @setList, [ \@fg, $tag, $dst, $opts ]; } # 2) initialize lists of matching tags for each setTag foreach $set (@setList) { $$set[2] and $setMatches{$set} = [ ]; } # 3) loop through all tags in source image and save tags matching each setTag my %rtnInfo; foreach $tag (@tags) { # don't try to set errors or warnings if ($tag =~ /^(Error|Warning)( |$)/) { $rtnInfo{$tag} = $$info{$tag}; next; } # only set specified tags my $lcTag = lc(GetTagName($tag)); my (@grp, %grp); SET: foreach $set (@setList) { # check first for matching tag unless ($$set[1] eq $lcTag or $$set[1] eq '*') { # handle wildcards next unless $$set[3]{WILD} and $lcTag =~ /^$$set[1]$/; } # then check for matching group if (@{$$set[0]}) { # get lower case group names if not done already unless (@grp) { @grp = map(lc, $srcExifTool->GetGroup($tag)); $grp{$_} = 1 foreach @grp; } foreach (@{$$set[0]}) { my ($f, $g) = @$_; if (defined $f) { next SET unless defined $grp[$f] and $g eq $grp[$f]; } else { next SET unless $grp{$g}; } } } last unless $$set[2]; # all done if we hit an exclude # add to the list of tags matching this setTag push @{$setMatches{$set}}, $tag; } } # 4) loop through each setTag in original order, setting new tag values foreach $set (reverse @setList) { # get options for SetNewValue my $opts = $$set[3]; # handle expressions if ($$opts{EXPR}) { my $val = $srcExifTool->InsertTagValues(\@tags, $$set[1], 'Error'); if ($$srcExifTool{VALUE}{Error}) { # pass on any error as a warning $tag = NextFreeTagKey(\%rtnInfo, 'Warning'); $rtnInfo{$tag} = $$srcExifTool{VALUE}{Error}; delete $$srcExifTool{VALUE}{Error}; next unless defined $val; } my ($dstGrp, $dstTag) = @{$$set[2]}; $$opts{Protected} = 1 unless $dstTag =~ /[?*]/ and $dstTag ne '*'; $$opts{Group} = $dstGrp if $dstGrp; my @rtnVals = $self->SetNewValue($dstTag, $val, %$opts); $rtnInfo{$dstTag} = $val if $rtnVals[0]; # tag was set successfully next; } foreach $tag (@{$setMatches{$set}}) { my ($val, $noWarn); if ($$opts{SrcType} and $$opts{SrcType} ne $srcType) { $val = $srcExifTool->GetValue($tag, $$opts{SrcType}); } else { $val = $$info{$tag}; } my ($dstGrp, $dstTag) = @{$$set[2]}; if ($dstGrp) { my @dstGrp = split /:/, $dstGrp; # destination group of '*' writes to same group as source tag # (family 1 unless otherwise specified) foreach (@dstGrp) { next unless /^(\d*)(all|\*)$/i; $_ = $1 . $srcExifTool->GetGroup($tag, length $1 ? $1 : 1); $noWarn = 1; # don't warn on wildcard destinations } $$opts{Group} = join ':', @dstGrp; } else { delete $$opts{Group}; } # transfer maker note information if setting this tag if ($$srcExifTool{TAG_INFO}{$tag}{MakerNotes}) { $$self{MAKER_NOTE_FIXUP} = $$srcExifTool{MAKER_NOTE_FIXUP}; $$self{MAKER_NOTE_BYTE_ORDER} = $$srcExifTool{MAKER_NOTE_BYTE_ORDER}; } if ($dstTag eq '*') { $dstTag = $tag; $noWarn = 1; } if ($$set[1] eq '*' or $$set[3]{WILD}) { # don't copy from protected binary tags when using wildcards next if $$srcExifTool{TAG_INFO}{$tag}{Protected} and $$srcExifTool{TAG_INFO}{$tag}{Binary}; # don't copy to protected tags when using wildcards delete $$opts{Protected}; # don't copy flattened tags if copying structures too when copying all $$opts{NoFlat} = $structOpt eq '2' ? 1 : 0; } else { # allow protected tags to be copied if specified explicitly $$opts{Protected} = 1 unless $dstTag =~ /[?*]/; delete $$opts{NoFlat}; } # set value(s) for this tag my ($rtn, $wrn) = $self->SetNewValue($dstTag, $val, %$opts); # this was added in version 9.14, and allowed actions like "-subject<all" to # write values of multiple tags into a list, but it had the side effect of # duplicating items if there were multiple list tags with the same name # (eg. -use mwg "-creator<creator"), so disable this as of ExifTool 9.36: # $$opts{Replace} = 0; # accumulate values from tags matching a single argument if ($wrn and not $noWarn) { # return this warning $rtnInfo{NextFreeTagKey(\%rtnInfo, 'Warning')} = $wrn; $noWarn = 1; } $rtnInfo{$tag} = $val if $rtn; # tag was set successfully } } return \%rtnInfo; # return information that we set } #------------------------------------------------------------------------------ # Get new value(s) for tag # Inputs: 0) ExifTool object reference, 1) tag name or tagInfo hash ref # 2) optional pointer to return new value hash reference (not part of public API) # or 0) ExifTool ref, 1) new value hash reference (not part of public API) # Returns: List of new Raw values (list may be empty if tag is being deleted) # Notes: 1) Preferentially returns new value from Extra table if writable Extra tag exists # 2) Must call AFTER IsOverwriting() returns 1 to get proper value for shifted times # 3) Tag name is case sensitive and may be prefixed by family 0 or 1 group name # 4) Value may have been modified by CHECK_PROC routine after ValueConv sub GetNewValue($$;$) { local $_; my $self = shift; my $tag = shift; my $nvHash; if ((ref $tag eq 'HASH' and $$tag{IsNVH}) or not defined $tag) { $nvHash = $tag; } else { my $newValueHashPt = shift; if ($$self{NEW_VALUE}) { my ($group, $tagInfo); if (ref $tag) { $nvHash = $self->GetNewValueHash($tag); } elsif (defined($tagInfo = $Image::ExifTool::Extra{$tag}) and $$tagInfo{Writable}) { $nvHash = $self->GetNewValueHash($tagInfo); } else { # separate group from tag name $group = $1 if $tag =~ s/(.*)://; my @tagInfoList = FindTagInfo($tag); # decide which tag we want GNV_TagInfo: foreach $tagInfo (@tagInfoList) { my $nvh = $self->GetNewValueHash($tagInfo) or next; # select tag in specified group if necessary while ($group and $group ne $$nvh{WriteGroup}) { my @grps = $self->GetGroup($tagInfo); if ($grps[0] eq $$nvh{WriteGroup}) { # check family 1 group only if WriteGroup is not specific last if $group eq $grps[1]; } else { # otherwise check family 0 group last if $group eq $grps[0]; } # step to next entry in list $nvh = $$nvh{Next} or next GNV_TagInfo; } $nvHash = $nvh; # give priority to the one we are creating last if defined $$nvHash{IsCreating}; } } } # return new value hash if requested $newValueHashPt and $$newValueHashPt = $nvHash; } unless ($nvHash and $$nvHash{Value}) { return () if wantarray; # return empty list return undef; } my $vals = $$nvHash{Value}; # do inverse raw conversion if necessary # - must also check after doing a Shift if ($$nvHash{TagInfo}{RawConvInv} or $$nvHash{Shift}) { my @copyVals = @$vals; # modify a copy of the values $vals = \@copyVals; my $tagInfo = $$nvHash{TagInfo}; my $conv = $$tagInfo{RawConvInv}; my $table = $$tagInfo{Table}; my ($val, $checkProc); $checkProc = $$table{CHECK_PROC} if $$nvHash{Shift} and $table; local $SIG{'__WARN__'} = \&SetWarning; undef $evalWarning; foreach $val (@$vals) { # must check value now if it was shifted if ($checkProc) { my $err = &$checkProc($self, $tagInfo, \$val); if ($err or not defined $val) { $err or $err = 'Error generating raw value'; $self->WarnOnce("$err for $$tagInfo{Name}"); @$vals = (); last; } next unless $conv; } else { last unless $conv; } # do inverse raw conversion if (ref($conv) eq 'CODE') { $val = &$conv($val, $self); } else { #### eval RawConvInv ($self, $val, $taginfo) $val = eval $conv; $@ and $evalWarning = $@; } if ($evalWarning) { # an empty warning ("\n") ignores tag with no error if ($evalWarning ne "\n") { my $err = CleanWarning() . " in $$tagInfo{Name} (RawConvInv)"; $self->WarnOnce($err); } @$vals = (); last; } } } # return our value(s) return @$vals if wantarray; return $$vals[0]; } #------------------------------------------------------------------------------ # Return the total number of new values set # Inputs: 0) ExifTool object reference # Returns: Scalar context) Number of new values that have been set # List context) Number of new values, number of "pseudo" values # ("pseudo" values are those which don't require rewriting the file to change) sub CountNewValues($) { my $self = shift; my $newVal = $$self{NEW_VALUE}; my $num = 0; my $tag; if ($newVal) { $num += scalar keys %$newVal; # don't count "fake" tags (only in Extra table) foreach $tag (qw{Geotag Geosync}) { --$num if defined $$newVal{$Image::ExifTool::Extra{$tag}}; } } $num += scalar keys %{$$self{DEL_GROUP}}; return $num unless wantarray; my $pseudo = 0; if ($newVal) { # (Note: all writable "pseudo" tags must be found in Extra table) foreach $tag (qw{FileName Directory FileModifyDate FileCreateDate HardLink TestName}) { ++$pseudo if defined $$newVal{$Image::ExifTool::Extra{$tag}}; } } return ($num, $pseudo); } #------------------------------------------------------------------------------ # Save new values for subsequent restore # Inputs: 0) ExifTool object reference # Returns: Number of times new values have been saved # Notes: increments Save flag each time routine is called sub SaveNewValues($) { my $self = shift; my $newValues = $$self{NEW_VALUE}; my $saveCount = ++$$self{SAVE_COUNT}; my $key; foreach $key (keys %$newValues) { my $nvHash = $$newValues{$key}; while ($nvHash) { # set Save count if not done already $$nvHash{Save} or $$nvHash{Save} = $saveCount; $nvHash = $$nvHash{Next}; } } # initialize hash for saving overwritten new values $$self{SAVE_NEW_VALUE} = { }; # make a copy of the delete group hash my %delGrp = %{$$self{DEL_GROUP}}; $$self{SAVE_DEL_GROUP} = \%delGrp; return $saveCount; } #------------------------------------------------------------------------------ # Restore new values to last saved state # Inputs: 0) ExifTool object reference # Notes: Restores saved new values, but currently doesn't restore them in the # original order, so there may be some minor side-effects when restoring tags # with overlapping groups. eg) XMP:Identifier, XMP-dc:Identifier sub RestoreNewValues($) { my $self = shift; my $newValues = $$self{NEW_VALUE}; my $savedValues = $$self{SAVE_NEW_VALUE}; my $key; # 1) remove any new values which don't have the Save flag set if ($newValues) { my @keys = keys %$newValues; foreach $key (@keys) { my $lastHash; my $nvHash = $$newValues{$key}; while ($nvHash) { if ($$nvHash{Save}) { $lastHash = $nvHash; } else { # remove this entry from the list if ($lastHash) { $$lastHash{Next} = $$nvHash{Next}; } elsif ($$nvHash{Next}) { $$newValues{$key} = $$nvHash{Next}; } else { delete $$newValues{$key}; } } $nvHash = $$nvHash{Next}; } } } # 2) restore saved new values if ($savedValues) { $newValues or $newValues = $$self{NEW_VALUE} = { }; foreach $key (keys %$savedValues) { if ($$newValues{$key}) { # add saved values to end of list my $nvHash = LastInList($$newValues{$key}); $$nvHash{Next} = $$savedValues{$key}; } else { $$newValues{$key} = $$savedValues{$key}; } } $$self{SAVE_NEW_VALUE} = { }; # reset saved new values } # 3) restore delete groups my %delGrp = %{$$self{SAVE_DEL_GROUP}}; $$self{DEL_GROUP} = \%delGrp; } #------------------------------------------------------------------------------ # Set filesystem time from from FileModifyDate or FileCreateDate tag # Inputs: 0) ExifTool object reference, 1) file name or file ref # 2) time (-M or -C) of original file (used for shift; obtained from file if not given) # 3) tag name to write (undef for 'FileModifyDate') # 4) flag set if argument 2 has already been converted to Unix seconds # Returns: 1=time changed OK, 0=nothing done, -1=error setting time # (increments CHANGED flag and sets corresponding WRITTEN tag) sub SetFileModifyDate($$;$$$) { my ($self, $file, $originalTime, $tag, $isUnixTime) = @_; my $nvHash; $tag = 'FileModifyDate' unless defined $tag; my $val = $self->GetNewValue($tag, \$nvHash); return 0 unless defined $val; my $isOverwriting = $self->IsOverwriting($nvHash); return 0 unless $isOverwriting; # can currently only set creation date on Windows systems return 0 if $tag eq 'FileCreateDate' and $^O ne 'MSWin32'; if ($isOverwriting < 0) { # are we shifting time? # use original time of this file if not specified unless (defined $originalTime) { my ($aTime, $mTime, $cTime) = $self->GetFileTime($file); $originalTime = ($tag eq 'FileCreateDate') ? $cTime : $mTime; return 0 unless defined $originalTime; $isUnixTime = 1; } $originalTime = int($^T - $originalTime*(24*3600) + 0.5) unless $isUnixTime; return 0 unless $self->IsOverwriting($nvHash, $originalTime); $val = $$nvHash{Value}[0]; # get shifted value } my ($aTime, $mTime, $cTime); if ($tag eq 'FileCreateDate') { eval { require Win32::API } or $self->WarnOnce("Install Win32::API to set $tag"), return -1; eval { require Win32API::File } or $self->WarnOnce("Install Win32API::File to set $tag"), return -1; $cTime = $val; } else { $aTime = $mTime = $val; } $self->SetFileTime($file, $aTime, $mTime, $cTime) or $self->Warn("Error setting $tag"), return -1; ++$$self{CHANGED}; $$self{WRITTEN}{$tag} = $val; # remember that we wrote this tag $self->VerboseValue("+ $tag", $val); return 1; } #------------------------------------------------------------------------------ # Change file name and/or directory from FileName and Directory tags # Inputs: 0) ExifTool object reference, 1) current file name (including path) # 2) new name (or undef to build from FileName and Directory tags) # 3) option: 'Link' to create link instead of renaming file # 'Test' to only print new file name # Returns: 1=name changed OK, 0=nothing changed, -1=error changing name # (and increments CHANGED flag if filename changed) # Notes: Will not overwrite existing file. Creates directories as necessary. sub SetFileName($$;$$) { my ($self, $file, $newName, $opt) = @_; my ($nvHash, $doName, $doDir); $opt or $opt = ''; # determine the new file name unless (defined $newName) { if ($opt) { if ($opt eq 'Link') { $newName = $self->GetNewValue('HardLink'); } elsif ($opt eq 'Test') { $newName = $self->GetNewValue('TestName'); } return 0 unless defined $newName; } else { my $filename = $self->GetNewValue('FileName', \$nvHash); $doName = 1 if defined $filename and $self->IsOverwriting($nvHash, $file); my $dir = $self->GetNewValue('Directory', \$nvHash); $doDir = 1 if defined $dir and $self->IsOverwriting($nvHash, $file); return 0 unless $doName or $doDir; # nothing to do if ($doName) { $newName = GetNewFileName($file, $filename); $newName = GetNewFileName($newName, $dir) if $doDir; } else { $newName = GetNewFileName($file, $dir); } } } $newName =~ tr/\0//d; # make sure name doesn't contain nulls # protect against empty file name length $newName or $self->Warn('New file name is empty'), return -1; # don't replace existing file if ($self->Exists($newName)) { if ($file ne $newName or $opt eq 'Link') { $self->Warn("File '$newName' already exists"); return -1; } else { $self->Warn('File name is unchanged'); return 0; } } if ($opt eq 'Test') { my $out = $$self{OPTIONS}{TextOut}; print $out "'$file' --> '$newName'\n"; return 1; } # create directory for new file if necessary my $result; if (($result = $self->CreateDirectory($newName)) != 0) { if ($result < 0) { $self->Warn("Error creating directory for '$newName'"); return -1; } $self->VPrint(0, "Created directory for '$newName'"); } if ($opt eq 'Link') { unless (link $file, $newName) { $self->Warn("Error creating link '$newName'"); return -1; } ++$$self{CHANGED}; $self->VerboseValue('+ HardLink', $newName); return 1; } # attempt to rename the file unless ($self->Rename($file, $newName)) { local (*EXIFTOOL_SFN_IN, *EXIFTOOL_SFN_OUT); # renaming didn't work, so copy the file instead unless ($self->Open(\*EXIFTOOL_SFN_IN, $file)) { $self->Warn("Error opening '$file'"); return -1; } unless ($self->Open(\*EXIFTOOL_SFN_OUT, $newName, '>')) { close EXIFTOOL_SFN_IN; $self->Warn("Error creating '$newName'"); return -1; } binmode EXIFTOOL_SFN_IN; binmode EXIFTOOL_SFN_OUT; my ($buff, $err); while (read EXIFTOOL_SFN_IN, $buff, 65536) { print EXIFTOOL_SFN_OUT $buff or $err = 1; } close EXIFTOOL_SFN_OUT or $err = 1; close EXIFTOOL_SFN_IN; if ($err) { $self->Unlink($newName); # erase bad output file $self->Warn("Error writing '$newName'"); return -1; } # preserve modification time my ($aTime, $mTime, $cTime) = $self->GetFileTime($file); $self->SetFileTime($newName, $aTime, $mTime, $cTime); # remove the original file $self->Unlink($file) or $self->Warn('Error removing old file'); } $$self{NewName} = $newName; # remember new file name ++$$self{CHANGED}; $self->VerboseValue('+ FileName', $newName); return 1; } #------------------------------------------------------------------------------ # Write information back to file # Inputs: 0) ExifTool object reference, # 1) input filename, file ref, RAF ref, or scalar ref (or '' or undef to create from scratch) # 2) output filename, file ref, or scalar ref (or undef to overwrite) # 3) optional output file type (required only if input file is not specified # and output file is a reference) # Returns: 1=file written OK, 2=file written but no changes made, 0=file write error sub WriteInfo($$;$$) { local ($_, *EXIFTOOL_FILE2, *EXIFTOOL_OUTFILE); my ($self, $infile, $outfile, $outType) = @_; my (@fileTypeList, $fileType, $tiffType, $hdr, $seekErr, $type, $tmpfile, $hardLink, $testName); my ($inRef, $outRef, $closeIn, $closeOut, $outPos, $outBuff, $eraseIn, $raf); my $oldRaf = $$self{RAF}; my $rtnVal = 0; # initialize member variables $self->Init(); # first, save original file modify date if necessary # (do this now in case we are modifying file in place and shifting date) my ($nvHash, $nvHash2, $originalTime, $createTime); my $fileModifyDate = $self->GetNewValue('FileModifyDate', \$nvHash); my $fileCreateDate = $self->GetNewValue('FileCreateDate', \$nvHash2); my ($aTime, $mTime, $cTime); if (defined $fileModifyDate and $self->IsOverwriting($nvHash) < 0 and defined $infile and ref $infile ne 'SCALAR') { ($aTime, $mTime, $cTime) = $self->GetFileTime($infile); $originalTime = $mTime; } if (defined $fileCreateDate and $self->IsOverwriting($nvHash2) < 0 and defined $infile and ref $infile ne 'SCALAR') { ($aTime, $mTime, $cTime) = $self->GetFileTime($infile) unless defined $cTime; $createTime = $cTime; } # # do quick in-place change of file dir/name or date if that is all we are doing # my ($numNew, $numPseudo) = $self->CountNewValues(); if (not defined $outfile and defined $infile) { $hardLink = $self->GetNewValue('HardLink'); $testName = $self->GetNewValue('TestName'); undef $hardLink if defined $hardLink and not length $hardLink; undef $testName if defined $testName and not length $testName; my $newFileName = $self->GetNewValue('FileName', \$nvHash); my $newDir = $self->GetNewValue('Directory'); if (defined $newDir and length $newDir) { $newDir .= '/' unless $newDir =~ m{/$}; } else { undef $newDir; } if ($numNew == $numPseudo) { $rtnVal = 2; if (defined $fileModifyDate and (not ref $infile or UNIVERSAL::isa($infile,'GLOB'))) { $self->SetFileModifyDate($infile) > 0 and $rtnVal = 1; } if (defined $fileCreateDate and (not ref $infile or UNIVERSAL::isa($infile,'GLOB'))) { $self->SetFileModifyDate($infile, undef, 'FileCreateDate') > 0 and $rtnVal = 1; } if ((defined $newFileName or defined $newDir) and not ref $infile) { $self->SetFileName($infile) > 0 and $rtnVal = 1; } if (defined $hardLink or defined $testName) { my $src = $$self{NewName}; $src = $infile unless defined $src; $hardLink and $self->SetFileName($src, $hardLink, 'Link') and $rtnVal = 1; $testName and $self->SetFileName($src, $testName, 'Test') and $rtnVal = 1; } return $rtnVal; } elsif (defined $newFileName and length $newFileName) { # can't simply rename file, so just set the output name if new FileName # --> in this case, must erase original copy if (ref $infile) { $outfile = $newFileName; # can't delete original } elsif ($self->IsOverwriting($nvHash, $infile)) { $outfile = GetNewFileName($infile, $newFileName); $eraseIn = 1; # delete original } } # set new directory if specified if (defined $newDir) { $outfile = $infile unless defined $outfile or ref $infile; if (defined $outfile) { $outfile = GetNewFileName($outfile, $newDir); $eraseIn = 1 unless ref $infile; } } } # # set up input file # if (ref $infile) { $inRef = $infile; if (UNIVERSAL::isa($inRef,'GLOB')) { seek($inRef, 0, 0); # make sure we are at the start of the file } elsif (UNIVERSAL::isa($inRef,'File::RandomAccess')) { $inRef->Seek(0); $raf = $inRef; } elsif ($] >= 5.006 and (eval { require Encode; Encode::is_utf8($$inRef) } or $@)) { # convert image data from UTF-8 to character stream if necessary my $buff = $@ ? pack('C*',unpack($] < 5.010000 ? 'U0C*' : 'C0C*',$$inRef)) : Encode::encode('utf8',$$inRef); if (defined $outfile) { $inRef = \$buff; } else { $$inRef = $buff; } } } elsif (defined $infile and $infile ne '') { # write to a temporary file if no output file given $outfile = $tmpfile = "${infile}_exiftool_tmp" unless defined $outfile; if ($self->Open(\*EXIFTOOL_FILE2, $infile)) { $fileType = GetFileType($infile); @fileTypeList = GetFileType($infile); $tiffType = $$self{FILE_EXT} = GetFileExtension($infile); $self->VPrint(0, "Rewriting $infile...\n"); $inRef = \*EXIFTOOL_FILE2; $closeIn = 1; # we must close the file since we opened it } else { $self->Error('Error opening file'); return 0; } } elsif (not defined $outfile) { $self->Error("WriteInfo(): Must specify infile or outfile\n"); return 0; } else { # create file from scratch $outType = GetFileExtension($outfile) unless $outType or ref $outfile; if (CanCreate($outType)) { $fileType = $tiffType = $outType; # use output file type if no input file $infile = "$fileType file"; # make bogus file name $self->VPrint(0, "Creating $infile...\n"); $inRef = \ ''; # set $inRef to reference to empty data } elsif ($outType) { $self->Error("Can't create $outType files"); return 0; } else { $self->Error("Can't create file (unknown type)"); return 0; } } unless (@fileTypeList) { if ($fileType) { @fileTypeList = ( $fileType ); } else { @fileTypeList = @fileTypes; $tiffType = 'TIFF'; } } # # set up output file # if (ref $outfile) { $outRef = $outfile; if (UNIVERSAL::isa($outRef,'GLOB')) { binmode($outRef); $outPos = tell($outRef); } else { # initialize our output buffer if necessary defined $$outRef or $$outRef = ''; $outPos = length($$outRef); } } elsif (not defined $outfile) { # editing in place, so write to memory first # (only when infile is a file ref or scalar ref) if ($raf) { $self->Error("Can't edit File::RandomAccess object in place"); return 0; } $outBuff = ''; $outRef = \$outBuff; $outPos = 0; } elsif ($self->Exists($outfile)) { $self->Error("File already exists: $outfile"); } elsif ($self->Open(\*EXIFTOOL_OUTFILE, $outfile, '>')) { $outRef = \*EXIFTOOL_OUTFILE; $closeOut = 1; # we must close $outRef binmode($outRef); $outPos = 0; } else { my $tmp = $tmpfile ? ' temporary' : ''; $self->Error("Error creating$tmp file: $outfile"); } # # write the file # until ($$self{VALUE}{Error}) { # create random access file object (disable seek test in case of straight copy) $raf or $raf = new File::RandomAccess($inRef, 1); $raf->BinMode(); if ($numNew == $numPseudo) { $rtnVal = 1; # just do a straight copy of the file (no "real" tags are being changed) my $buff; while ($raf->Read($buff, 65536)) { Write($outRef, $buff) or $rtnVal = -1, last; } last; } elsif (not ref $infile and ($infile eq '-' or $infile =~ /\|$/)) { # patch for Windows command shell pipe $$raf{TESTED} = -1; # force buffering } else { $raf->SeekTest(); } # $raf->Debug() and warn " RAF debugging enabled!\n"; my $inPos = $raf->Tell(); $$self{RAF} = $raf; my %dirInfo = ( RAF => $raf, OutFile => $outRef, ); $raf->Read($hdr, 1024) or $hdr = ''; $raf->Seek($inPos, 0) or $seekErr = 1; my $wrongType; until ($seekErr) { $type = shift @fileTypeList; # do quick test to see if this is the right file type if ($magicNumber{$type} and length($hdr) and $hdr !~ /^$magicNumber{$type}/s) { next if @fileTypeList; $wrongType = 1; last; } # save file type in member variable $dirInfo{Parent} = $$self{FILE_TYPE} = $$self{PATH}[0] = $type; # determine which directories we must write for this file type $self->InitWriteDirs($type); if ($type eq 'JPEG' or $type eq 'EXV') { $rtnVal = $self->WriteJPEG(\%dirInfo); } elsif ($type eq 'TIFF') { # disallow writing of some TIFF-based RAW images: if (grep /^$tiffType$/, @{$noWriteFile{TIFF}}) { $fileType = $tiffType; undef $rtnVal; } else { $dirInfo{Parent} = $tiffType; $rtnVal = $self->ProcessTIFF(\%dirInfo); } } elsif ($type eq 'GIF') { require Image::ExifTool::GIF; $rtnVal = Image::ExifTool::GIF::ProcessGIF($self,\%dirInfo); } elsif ($type eq 'CRW') { require Image::ExifTool::CanonRaw; $rtnVal = Image::ExifTool::CanonRaw::WriteCRW($self, \%dirInfo); } elsif ($type eq 'MRW') { require Image::ExifTool::MinoltaRaw; $rtnVal = Image::ExifTool::MinoltaRaw::ProcessMRW($self, \%dirInfo); } elsif ($type eq 'RAF') { require Image::ExifTool::FujiFilm; $rtnVal = Image::ExifTool::FujiFilm::WriteRAF($self, \%dirInfo); } elsif ($type eq 'ORF' or $type eq 'RAW') { $rtnVal = $self->ProcessTIFF(\%dirInfo); } elsif ($type eq 'X3F') { require Image::ExifTool::SigmaRaw; $rtnVal = Image::ExifTool::SigmaRaw::ProcessX3F($self, \%dirInfo); } elsif ($type eq 'PNG') { require Image::ExifTool::PNG; $rtnVal = Image::ExifTool::PNG::ProcessPNG($self, \%dirInfo); } elsif ($type eq 'MIE') { require Image::ExifTool::MIE; $rtnVal = Image::ExifTool::MIE::ProcessMIE($self, \%dirInfo); } elsif ($type eq 'XMP') { require Image::ExifTool::XMP; $rtnVal = Image::ExifTool::XMP::WriteXMP($self, \%dirInfo); } elsif ($type eq 'PPM') { require Image::ExifTool::PPM; $rtnVal = Image::ExifTool::PPM::ProcessPPM($self, \%dirInfo); } elsif ($type eq 'PSD') { require Image::ExifTool::Photoshop; $rtnVal = Image::ExifTool::Photoshop::ProcessPSD($self, \%dirInfo); } elsif ($type eq 'EPS' or $type eq 'PS') { require Image::ExifTool::PostScript; $rtnVal = Image::ExifTool::PostScript::WritePS($self, \%dirInfo); } elsif ($type eq 'PDF') { require Image::ExifTool::PDF; $rtnVal = Image::ExifTool::PDF::WritePDF($self, \%dirInfo); } elsif ($type eq 'ICC') { require Image::ExifTool::ICC_Profile; $rtnVal = Image::ExifTool::ICC_Profile::WriteICC($self, \%dirInfo); } elsif ($type eq 'VRD') { require Image::ExifTool::CanonVRD; $rtnVal = Image::ExifTool::CanonVRD::ProcessVRD($self, \%dirInfo); } elsif ($type eq 'DR4') { require Image::ExifTool::CanonVRD; $rtnVal = Image::ExifTool::CanonVRD::ProcessDR4($self, \%dirInfo); } elsif ($type eq 'JP2') { require Image::ExifTool::Jpeg2000; $rtnVal = Image::ExifTool::Jpeg2000::ProcessJP2($self, \%dirInfo); } elsif ($type eq 'IND') { require Image::ExifTool::InDesign; $rtnVal = Image::ExifTool::InDesign::ProcessIND($self, \%dirInfo); } elsif ($type eq 'MOV') { require Image::ExifTool::QuickTime; $rtnVal = Image::ExifTool::QuickTime::WriteMOV($self, \%dirInfo); } elsif ($type eq 'EXIF') { # go through WriteDirectory so block writes, etc are handled my $tagTablePtr = GetTagTable('Image::ExifTool::Exif::Main'); my $buff = $self->WriteDirectory(\%dirInfo, $tagTablePtr, \&WriteTIFF); if (defined $buff) { $rtnVal = Write($outRef, $buff) ? 1 : -1; } else { $rtnVal = 0; } } else { undef $rtnVal; # flag that we don't write this type of file } # all done unless we got the wrong type last if $rtnVal; last unless @fileTypeList; # seek back to original position in files for next try $raf->Seek($inPos, 0) or $seekErr = 1, last; if (UNIVERSAL::isa($outRef,'GLOB')) { seek($outRef, 0, $outPos); } else { $$outRef = substr($$outRef, 0, $outPos); } } # print file format errors unless ($rtnVal) { my $err; if ($seekErr) { $err = 'Error seeking in file'; } elsif ($fileType and defined $rtnVal) { if ($$self{VALUE}{Error}) { # existing error message will do } elsif ($fileType eq 'RAW') { $err = 'Writing this type of RAW file is not supported'; } else { if ($wrongType) { $err = "Not a valid $fileType"; # do a quick check to see what this file looks like foreach $type (@fileTypes) { next unless $magicNumber{$type}; next unless $hdr =~ /^$magicNumber{$type}/s; $err .= " (looks more like a $type)"; last; } } else { $err = 'Format error in file'; } } } elsif ($fileType) { # get specific type of file from extension $fileType = GetFileExtension($infile) if $infile and GetFileType($infile); $err = "Writing of $fileType files is not yet supported"; } else { $err = 'Writing of this type of file is not supported'; } $self->Error($err) if $err; $rtnVal = 0; # (in case it was undef) } # $raf->Close(); # only used to force debug output last; # (didn't really want to loop) } # don't return success code if any error occurred if ($rtnVal > 0) { unless (Tell($outRef) or $$self{VALUE}{Error}) { # don't write a file with zero length if (defined $hdr and length $hdr) { $self->Error("Can't delete all meta information from $type file"); } else { $self->Error('Nothing to write'); } } $rtnVal = 0 if $$self{VALUE}{Error}; } # rewrite original file in place if required if (defined $outBuff) { if ($rtnVal <= 0 or not $$self{CHANGED}) { # nothing changed, so no need to write $outBuff } elsif (UNIVERSAL::isa($inRef,'GLOB')) { my $len = length($outBuff); my $size; $rtnVal = -1 unless seek($inRef, 0, 2) and # seek to the end of file ($size = tell $inRef) >= 0 and # get the file size seek($inRef, 0, 0) and # seek back to the start print $inRef $outBuff and # write the new data ($len >= $size or # if necessary: eval { truncate($inRef, $len) }); # shorten output file } else { $$inRef = $outBuff; # replace original data } $outBuff = ''; # free memory but leave $outBuff defined } # close input file if we opened it if ($closeIn) { # errors on input file are significant if we edited the file in place $rtnVal and $rtnVal = -1 unless close($inRef) or not defined $outBuff; if ($rtnVal > 0) { # copy Mac OS resource fork if it exists if ($^O eq 'darwin' and -s "$infile/..namedfork/rsrc") { if ($$self{DEL_GROUP}{RSRC}) { $self->VPrint(0,"Deleting Mac OS resource fork\n"); ++$$self{CHANGED}; } else { $self->VPrint(0,"Copying Mac OS resource fork\n"); my ($buf, $err); local (*SRC, *DST); if ($self->Open(\*SRC, "$infile/..namedfork/rsrc")) { if ($self->Open(\*DST, "$outfile/..namedfork/rsrc", '>')) { binmode SRC; # (not necessary for Darwin, but let's be thorough) binmode DST; while (read SRC, $buf, 65536) { print DST $buf or $err = 'copying', last; } close DST or $err or $err = 'closing'; } else { # (this is normal if the destination filesystem isn't Mac OS) $self->Warn('Error creating Mac OS resource fork'); } close SRC; } else { $err = 'opening'; } $rtnVal = 0 if $err and $self->Error("Error $err Mac OS resource fork", 2); } } # erase input file if renaming while editing information in place $self->Unlink($infile) or $self->Warn('Error erasing original file') if $eraseIn; } } # close output file if we created it if ($closeOut) { # close file and set $rtnVal to -1 if there was an error $rtnVal and $rtnVal = -1 unless close($outRef); # erase the output file if we weren't successful if ($rtnVal <= 0) { $self->Unlink($outfile); # else rename temporary file if necessary } elsif ($tmpfile) { CopyFileAttrs($infile, $tmpfile); # copy attributes to new file unless ($self->Rename($tmpfile, $infile)) { # some filesystems won't overwrite with 'rename', so try erasing original if (not $self->Unlink($infile)) { $self->Unlink($tmpfile); $self->Error('Error renaming temporary file'); $rtnVal = 0; } elsif (not $self->Rename($tmpfile, $infile)) { $self->Error('Error renaming temporary file after deleting original'); $rtnVal = 0; } } } } # set FileModifyDate if requested (and if possible!) if ($rtnVal > 0 and ($closeOut or ($closeIn and defined $outBuff))) { my $target = $closeOut ? $outfile : $infile; if (defined $fileModifyDate and $self->SetFileModifyDate($target, $originalTime, undef, 1) > 0) { ++$$self{CHANGED}; # we changed something } # set FileCreateDate if requested (and if possible!) if (defined $fileCreateDate and $self->SetFileModifyDate($target, $createTime, 'FileCreateDate', 1)) { ++$$self{CHANGED}; # we changed something } # create hard link if requested and no output filename specified (and if possible!) if (defined $hardLink and $self->SetFileName($target, $hardLink, 'Link')) { ++$$self{CHANGED}; # we changed something (sort of) } defined $testName and $self->SetFileName($target, $testName, 'Test'); } # check for write error and set appropriate error message and return value if ($rtnVal < 0) { $self->Error('Error writing output file') unless $$self{VALUE}{Error}; $rtnVal = 0; # return 0 on failure } elsif ($rtnVal > 0) { ++$rtnVal unless $$self{CHANGED}; } # set things back to the way they were $$self{RAF} = $oldRaf; return $rtnVal; } #------------------------------------------------------------------------------ # Get list of all available tags for specified group # Inputs: 0) optional group name (or string of names separated by colons) # Returns: tag list (sorted alphabetically) # Notes: Can't get tags for specific IFD sub GetAllTags(;$) { local $_; my $group = shift; my (%allTags, @groups); @groups = split ':', $group if $group; my $et = new Image::ExifTool; LoadAllTables(); # first load all our tables my @tableNames = keys %allTables; # loop through all tables and save tag names to %allTags hash while (@tableNames) { my $table = GetTagTable(pop @tableNames); # generate flattened tag names for structure fields if this is an XMP table if ($$table{GROUPS} and $$table{GROUPS}{0} eq 'XMP') { Image::ExifTool::XMP::AddFlattenedTags($table); } my $tagID; foreach $tagID (TagTableKeys($table)) { my @infoArray = GetTagInfoList($table,$tagID); my $tagInfo; GATInfo: foreach $tagInfo (@infoArray) { my $tag = $$tagInfo{Name}; $tag or warn("no name for tag!\n"), next; # don't list subdirectories unless they are writable next if $$tagInfo{SubDirectory} and not $$tagInfo{Writable}; next if $$tagInfo{Hidden}; # ignore hidden tags if (@groups) { my @tg = $et->GetGroup($tagInfo); foreach $group (@groups) { next GATInfo unless grep /^$group$/i, @tg; } } $allTags{$tag} = 1; } } } return sort keys %allTags; } #------------------------------------------------------------------------------ # Get list of all writable tags # Inputs: 0) optional group name (or names separated by colons) # Returns: tag list (sorted alphabetically) sub GetWritableTags(;$) { local $_; my $group = shift; my (%writableTags, @groups); @groups = split ':', $group if $group; my $et = new Image::ExifTool; LoadAllTables(); my @tableNames = keys %allTables; while (@tableNames) { my $tableName = pop @tableNames; my $table = GetTagTable($tableName); # generate flattened tag names for structure fields if this is an XMP table if ($$table{GROUPS} and $$table{GROUPS}{0} eq 'XMP') { Image::ExifTool::XMP::AddFlattenedTags($table); } # attempt to load Write tables if autoloaded my @parts = split(/::/,$tableName); if (@parts > 3) { my $i = $#parts - 1; $parts[$i] = "Write$parts[$i]"; # add 'Write' before class name my $module = join('::',@parts[0..$i]); eval { require $module }; # (fails silently if nothing loaded) } my $tagID; foreach $tagID (TagTableKeys($table)) { my @infoArray = GetTagInfoList($table,$tagID); my $tagInfo; GWTInfo: foreach $tagInfo (@infoArray) { my $tag = $$tagInfo{Name}; $tag or warn("no name for tag!\n"), next; my $writable = $$tagInfo{Writable}; next unless $writable or ($$table{WRITABLE} and not defined $writable and not $$tagInfo{SubDirectory}); next if $$tagInfo{Hidden}; # ignore hidden tags if (@groups) { my @tg = $et->GetGroup($tagInfo); foreach $group (@groups) { next GWTInfo unless grep /^$group$/i, @tg; } } $writableTags{$tag} = 1; } } } return sort keys %writableTags; } #------------------------------------------------------------------------------ # Get list of all group names # Inputs: 0) Group family number # Returns: List of group names (sorted alphabetically) sub GetAllGroups($) { local $_; my $family = shift || 0; $family == 3 and return('Doc#', 'Main'); $family == 4 and return('Copy#'); LoadAllTables(); # first load all our tables my @tableNames = keys %allTables; # loop through all tag tables and get all group names my %allGroups; while (@tableNames) { my $table = GetTagTable(pop @tableNames); my ($grps, $grp, $tag, $tagInfo); $allGroups{$grp} = 1 if ($grps = $$table{GROUPS}) and ($grp = $$grps{$family}); foreach $tag (TagTableKeys($table)) { my @infoArray = GetTagInfoList($table, $tag); foreach $tagInfo (@infoArray) { next unless ($grps = $$tagInfo{Groups}) and ($grp = $$grps{$family}); $allGroups{$grp} = 1; } } } return sort keys %allGroups; } #------------------------------------------------------------------------------ # get priority group list for new values # Inputs: 0) ExifTool object reference # Returns: List of group names sub GetNewGroups($) { my $self = shift; return @{$$self{WRITE_GROUPS}}; } #------------------------------------------------------------------------------ # Get list of all deletable group names # Returns: List of group names (sorted alphabetically) sub GetDeleteGroups() { return sort @delGroups, @delGroup2; } #------------------------------------------------------------------------------ # Add user-defined tags at run time # Inputs: 0) destination table name, 1) tagID/tagInfo pairs for tags to add # Returns: number of tags added # Notes: will replace existing tags sub AddUserDefinedTags($%) { local $_; my ($tableName, %addTags) = @_; my $table = GetTagTable($tableName) or return 0; # add tags to writer lookup Image::ExifTool::TagLookup::AddTags(\%addTags, $tableName); my $tagID; my $num = 0; foreach $tagID (keys %addTags) { next if $specialTags{$tagID}; delete $$table{$tagID}; # delete old entry if it existed AddTagToTable($table, $tagID, $addTags{$tagID}, 1); ++$num; } return $num; } #============================================================================== # Functions below this are not part of the public API #------------------------------------------------------------------------------ # Maintain backward compatibility for old GetNewValues function name sub GetNewValues($$;$) { my ($self, $tag, $nvHashPt) = @_; return $self->GetNewValue($tag, $nvHashPt); } #------------------------------------------------------------------------------ # Un-escape string according to options settings and clear UTF-8 flag # Inputs: 0) ExifTool ref, 1) string ref or string ref ref # Notes: also de-references SCALAR values sub Sanitize($$) { my ($self, $valPt) = @_; # de-reference SCALAR references $$valPt = $$$valPt if ref $$valPt eq 'SCALAR'; # make sure the Perl UTF-8 flag is OFF for the value if perl 5.6 or greater # (otherwise our byte manipulations get corrupted!!) if ($] >= 5.006 and (eval { require Encode; Encode::is_utf8($$valPt) } or $@)) { # repack by hand if Encode isn't available $$valPt = $@ ? pack('C*',unpack($] < 5.010000 ? 'U0C*' : 'C0C*',$$valPt)) : Encode::encode('utf8',$$valPt); } # un-escape value if necessary if ($$self{OPTIONS}{Escape}) { # (XMP.pm and HTML.pm were require'd as necessary when option was set) if ($$self{OPTIONS}{Escape} eq 'XML') { $$valPt = Image::ExifTool::XMP::UnescapeXML($$valPt); } elsif ($$self{OPTIONS}{Escape} eq 'HTML') { $$valPt = Image::ExifTool::HTML::UnescapeHTML($$valPt); } } } #------------------------------------------------------------------------------ # Apply inverse conversions # Inputs: 0) ExifTool ref, 1) value, 2) tagInfo (or Struct item) ref, # 3) tag name, 4) group 1 name, 5) conversion type (or undef), # 6) [optional] want group ("" for structure field) # Returns: 0) converted value, 1) error string (or undef on success) # Notes: # - uses ExifTool "ConvType" member when conversion type is undef # - conversion types other than 'ValueConv' and 'PrintConv' are treated as 'Raw' sub ConvInv($$$$$;$$) { my ($self, $val, $tagInfo, $tag, $wgrp1, $convType, $wantGroup) = @_; my ($err, $type); Conv: for (;;) { if (not defined $type) { # split value into list if necessary if ($$tagInfo{List}) { my $listSplit = $$tagInfo{AutoSplit} || $$self{OPTIONS}{ListSplit}; if (defined $listSplit and not $$tagInfo{Struct} and ($wantGroup or not defined $wantGroup)) { $listSplit = ',?\s+' if $listSplit eq '1' and $$tagInfo{AutoSplit}; my @splitVal = split /$listSplit/, $val; $val = \@splitVal if @splitVal > 1; } } $type = $convType || $$self{ConvType} || 'PrintConv'; } elsif ($type eq 'PrintConv') { $type = 'ValueConv'; } else { # split raw value if necessary if ($$tagInfo{RawJoin} and $$tagInfo{List} and not ref $val) { my @splitVal = split ' ', $val; $val = \@splitVal if @splitVal > 1; } # finally, do our value check my ($err2, $v); if ($$tagInfo{WriteCheck}) { #### eval WriteCheck ($self, $tagInfo, $val) $err2 = eval $$tagInfo{WriteCheck}; $@ and warn($@), $err2 = 'Error evaluating WriteCheck'; } unless ($err2) { my $table = $$tagInfo{Table}; if ($table and $$table{CHECK_PROC} and not $$tagInfo{RawConvInv}) { my $checkProc = $$table{CHECK_PROC}; if (ref $val eq 'ARRAY') { # loop through array values foreach $v (@$val) { $err2 = &$checkProc($self, $tagInfo, \$v); last if $err2; } } else { $err2 = &$checkProc($self, $tagInfo, \$val); } } } if (defined $err2) { if ($err2) { $err = "$err2 for $wgrp1:$tag"; $self->VPrint(2, "$err\n"); undef $val; # value was invalid } else { $err = $err2; # empty error (quietly don't write tag) } } last; } my $conv = $$tagInfo{$type}; my $convInv = $$tagInfo{"${type}Inv"}; # nothing to do at this level if no conversion defined next unless defined $conv or defined $convInv; my (@valList, $index, $convList, $convInvList); if (ref $val eq 'ARRAY') { # handle ValueConv of ListSplit and AutoSplit values @valList = @$val; $val = $valList[$index = 0]; } elsif (ref $conv eq 'ARRAY' or ref $convInv eq 'ARRAY') { # handle conversion lists @valList = split /$listSep{$type}/, $val; $val = $valList[$index = 0]; if (ref $conv eq 'ARRAY') { $convList = $conv; $conv = $$conv[0]; } if (ref $convInv eq 'ARRAY') { $convInvList = $convInv; $convInv = $$convInv[0]; } } # loop through multiple values if necessary for (;;) { if ($convInv) { # capture eval warnings too local $SIG{'__WARN__'} = \&SetWarning; undef $evalWarning; if (ref($convInv) eq 'CODE') { $val = &$convInv($val, $self); } else { #### eval PrintConvInv/ValueConvInv ($val, $self, $wantGroup) $val = eval $convInv; $@ and $evalWarning = $@; } if ($evalWarning) { # an empty warning ("\n") ignores tag with no error if ($evalWarning eq "\n") { $err = '' unless defined $err; } else { $err = CleanWarning() . " in $wgrp1:$tag (${type}Inv)"; $self->VPrint(2, "$err\n"); } undef $val; last Conv; } elsif (not defined $val) { $err = "Error converting value for $wgrp1:$tag (${type}Inv)"; $self->VPrint(2, "$err\n"); last Conv; } } elsif ($conv) { if (ref $conv eq 'HASH') { my ($multi, $lc); # insert alternate language print conversions if required if ($$self{CUR_LANG} and $type eq 'PrintConv' and ref($lc = $$self{CUR_LANG}{$tag}) eq 'HASH' and ($lc = $$lc{PrintConv})) { my %newConv; foreach (keys %$conv) { my $val = $$conv{$_}; defined $$lc{$val} or $newConv{$_} = $val, next; $newConv{$_} = $self->Decode($$lc{$val}, 'UTF8'); } if ($$conv{BITMASK}) { foreach (keys %{$$conv{BITMASK}}) { my $val = $$conv{BITMASK}{$_}; defined $$lc{$val} or $newConv{BITMASK}{$_} = $val, next; $newConv{BITMASK}{$_} = $self->Decode($$lc{$val}, 'UTF8'); } } $conv = \%newConv; } if ($$conv{BITMASK}) { my $lookupBits = $$conv{BITMASK}; my ($wbits, $tbits) = @$tagInfo{'BitsPerWord','BitsTotal'}; my ($val2, $err2) = EncodeBits($val, $lookupBits, $wbits, $tbits); if ($err2) { # ok, try matching a straight value ($val, $multi) = ReverseLookup($val, $conv); unless (defined $val) { $err = "Can't encode $wgrp1:$tag ($err2)"; $self->VPrint(2, "$err\n"); last Conv; } } elsif (defined $val2) { $val = $val2; } else { delete $$conv{BITMASK}; ($val, $multi) = ReverseLookup($val, $conv); $$conv{BITMASK} = $lookupBits; } } else { ($val, $multi) = ReverseLookup($val, $conv); } unless (defined $val) { $err = "Can't convert $wgrp1:$tag (" . ($multi ? 'matches more than one' : 'not in') . " $type)"; $self->VPrint(2, "$err\n"); last Conv; } } elsif (not $$tagInfo{WriteAlso}) { $err = "Can't convert value for $wgrp1:$tag (no ${type}Inv)"; $self->VPrint(2, "$err\n"); undef $val; last Conv; } } last unless @valList; $valList[$index] = $val; if (++$index >= @valList) { # leave AutoSplit lists in ARRAY form, or join conversion lists $val = $$tagInfo{List} ? \@valList : join ' ', @valList; last; } $conv = $$convList[$index] if $convList; $convInv = $$convInvList[$index] if $convInvList; $val = $valList[$index]; } } # end ValueConv/PrintConv loop return($val, $err); } #------------------------------------------------------------------------------ # convert tag names to values in a string (eg. '${EXIF:ISO}x $$' --> '100x $') # Inputs: 0) ExifTool object ref, 1) reference to list of found tags # 2) string with embedded tag names, 3) Options: # undef - set missing tags to '' # 'Error' - issue minor error on missing tag (and return undef) # 'Warn' - issue minor warning on missing tag (and return undef) # Hash ref - hash for return of tag/value pairs # Returns: string with embedded tag values (or '$info{TAGNAME}' entries with Hash ref option) # Notes: # - tag names are not case sensitive and may end with '#' for ValueConv value # - uses MissingTagValue option if set # - '$GROUP:all' evaluates to 1 if any tag from GROUP exists, or 0 otherwise # - advanced feature allows Perl expressions inside braces (eg. '${model;tr/ //d}') # - an error/warning in an advanced expression ("${TAG;EXPR}") generates an error # if option set to 'Error', or a warning otherwise sub InsertTagValues($$$;$) { local $_; my ($self, $foundTags, $line, $opt) = @_; my $rtnStr = ''; while ($line =~ /(.*?)\$(\{\s*)?([-\w]*\w|\$|\/)(.*)/s) { my (@tags, $pre, $var, $bra, $val, $tg, @vals, $type, $expr, $level); ($pre, $bra, $var, $line) = ($1, $2, $3, $4); # "$$" represents a "$" symbol, and "$/" is a newline if ($var eq '$' or $var eq '/') { $var = "\n" if $var eq '/'; $rtnStr .= "$pre$var"; $line =~ s/^\s*\}// if $bra; next; } # allow multiple group names while ($line =~ /^:([-\w]*\w)(.*)/s) { my $group = $var; ($var, $line) = ($1, $2); $var = "$group:$var"; } # allow trailing '#' to indicate ValueConv value $type = 'ValueConv' if $line =~ s/^#//; # remove trailing bracket if there was a leading one # and extract Perl expression from inside brackets if it exists if ($bra and not $line =~ s/^\s*\}// and $line =~ s/^\s*;\s*(.*?)\}//s) { my $part = $1; $expr = ''; for ($level=0; ; --$level) { # increase nesting level for each opening brace ++$level while $part =~ /\{/g; $expr .= $part; last unless $level and $line =~ s/^(.*?)\}//s; # get next part $part = $1; $expr .= '}'; # this brace was part of the expression } # use default Windows filename filter if expression is empty $expr = 'tr(/\\\\?*:|"<>\\0)()d' unless length $expr; } push @tags, $var; ExpandShortcuts(\@tags); @tags or $rtnStr .= $pre, next; for (;;) { my $tag = shift @tags; my $lcTag = lc $tag; if ($lcTag eq 'all') { $val = 1; # always some tag available } elsif (defined $$self{OPTIONS}{UserParam}{$lcTag}) { $val = $$self{OPTIONS}{UserParam}{$lcTag}; } elsif ($tag =~ /(.*):(.+)/) { my $group; ($group, $tag) = ($1, $2); if (lc $tag eq 'all') { # see if any tag from the specified group exists my $match = $self->GroupMatches($group, $foundTags); $val = $match ? 1 : 0; } else { # find the specified tag my @matches = grep /^$tag(\s|$)/i, @$foundTags; @matches = $self->GroupMatches($group, \@matches); foreach $tg (@matches) { if (defined $val and $tg =~ / \((\d+)\)$/) { # take the most recently extracted tag my $tagNum = $1; next if $tag !~ / \((\d+)\)$/ or $1 > $tagNum; } $val = $self->GetValue($tg, $type); $tag = $tg; last unless $tag =~ / /; # all done if we got our best match } } } else { # get the tag value $val = $self->GetValue($tag, $type); unless (defined $val) { # check for tag name with different case ($tg) = grep /^$tag$/i, @$foundTags; if (defined $tg) { $val = $self->GetValue($tg, $type); $tag = $tg; } } } if (ref $val eq 'ARRAY') { $val = join($$self{OPTIONS}{ListSep}, @$val); } elsif (ref $val eq 'SCALAR') { if ($$self{OPTIONS}{Binary} or $$val =~ /^Binary data/) { $val = $$val; } else { $val = 'Binary data ' . length($$val) . ' bytes'; } } elsif (ref $val eq 'HASH') { require 'Image/ExifTool/XMPStruct.pl'; $val = Image::ExifTool::XMP::SerializeStruct($val); } elsif (not defined $val) { last unless @tags; next; } # evaluate advanced formatting expression if given (eg. "${TAG;EXPR}") if (defined $expr) { local $SIG{'__WARN__'} = \&SetWarning; undef $evalWarning; $_ = $val; #### eval translation expression ($_, $self) eval $expr; $val = $_; $@ and $evalWarning = $@; if ($evalWarning) { my $str = CleanWarning() . " for $tag"; ($opt and $opt eq 'Error') ? $self->Error($str) : $self->Warn($str); } } last unless @tags; push @vals, $val; undef $val; } if (@vals) { push @vals, $val if defined $val; $val = join '', @vals; } unless (defined $val or ref $opt) { $val = $$self{OPTIONS}{MissingTagValue}; unless (defined $val) { no strict 'refs'; return undef if $opt and &$opt($self, "Tag '$var' not defined", 2); $val = ''; } } if (ref $opt eq 'HASH') { $var .= '#' if $type; if (defined $expr) { # generate unique variable name for this modified tag value my $i = 1; ++$i while exists $$opt{"$val.expr$i"}; $var .= '.expr' . $i; } $rtnStr .= "$pre\$info{'$var'}"; $$opt{$var} = $val; } else { $rtnStr .= "$pre$val"; } } return $rtnStr . $line; } #------------------------------------------------------------------------------ # Is specified tag writable # Inputs: 0) tag name, case insensitive (optional group name currently ignored) # Returns: 0=exists but not writable, 1=writable, undef=doesn't exist sub IsWritable($) { my $tag = shift; $tag =~ s/^(.*)://; # ignore group name my @tagInfo = FindTagInfo($tag); unless (@tagInfo) { return 0 if TagExists($tag); return undef; } my $tagInfo; foreach $tagInfo (@tagInfo) { return $$tagInfo{Writable} ? 1 : 0 if defined $$tagInfo{Writable}; return 1 if $$tagInfo{Table}{WRITABLE}; # must call WRITE_PROC to autoload writer because this may set the writable tag my $writeProc = $$tagInfo{Table}{WRITE_PROC}; next unless $writeProc; &$writeProc(); # dummy call to autoload writer return 1 if $$tagInfo{Writable}; } return 0; } #------------------------------------------------------------------------------ # Create directory for specified file # Inputs: 0) ExifTool ref, 1) complete file name including path # Returns: 1 = directory created, 0 = nothing done, -1 = error my $k32CreateDir; sub CreateDirectory($$) { local $_; my ($self, $file) = @_; my $rtnVal = 0; my $enc = $$self{OPTIONS}{CharsetFileName}; my $dir; ($dir = $file) =~ s/[^\/]*$//; # remove filename from path specification # recode as UTF-8 if necessary if ($dir and not $self->IsDirectory($dir)) { my @parts = split /\//, $dir; $dir = ''; foreach (@parts) { $dir .= $_; if (length $dir and not $self->IsDirectory($dir)) { # create directory since it doesn't exist my $d2 = $dir; # (must make a copy in case EncodeFileName recodes it) if ($self->EncodeFileName($d2)) { # handle Windows Unicode directory names unless (eval { require Win32::API }) { $self->Warn('Install Win32::API to create directories with Unicode names'); return -1; } unless ($k32CreateDir) { return -1 if defined $k32CreateDir; $k32CreateDir = new Win32::API('KERNEL32', 'CreateDirectoryW', 'PP', 'I'); unless ($k32CreateDir) { $self->Warn('Error calling Win32::API::CreateDirectoryW'); $k32CreateDir = 0; return -1; } } $k32CreateDir->Call($d2, 0) or return -1; } else { mkdir($d2, 0777) or return -1; } $rtnVal = 1; } $dir .= '/'; } } return $rtnVal; } #------------------------------------------------------------------------------ # Copy file attributes from one file to another # Inputs: 0) source file name, 1) destination file name # Notes: eventually add support for extended attributes? sub CopyFileAttrs($$) { my ($src, $dst) = @_; my ($mode, $uid, $gid) = (stat($src))[2, 4, 5]; eval { chmod($mode & 07777, $dst) } if defined $mode; eval { chown($uid, $gid, $dst) } if defined $uid and defined $gid; } #------------------------------------------------------------------------------ # Get new file path name # Inputs: 0) existing name (may contain directory), # 1) new file name, new directory, or new path (dir+name) # Returns: new file path name sub GetNewFileName($$) { my ($oldName, $newName) = @_; my ($dir, $name) = ($oldName =~ m{(.*/)(.*)}); ($dir, $name) = ('', $oldName) unless defined $dir; if ($newName =~ m{/$}) { $newName = "$newName$name"; # change dir only } elsif ($newName !~ m{/}) { $newName = "$dir$newName"; # change name only if newname doesn't specify dir } # else change dir and name return $newName; } #------------------------------------------------------------------------------ # Get next available tag key # Inputs: 0) hash reference (keys are tag keys), 1) tag name # Returns: next available tag key sub NextFreeTagKey($$) { my ($info, $tag) = @_; return $tag unless exists $$info{$tag}; my $i; for ($i=1; ; ++$i) { my $key = "$tag ($i)"; return $key unless exists $$info{$key}; } } #------------------------------------------------------------------------------ # Reverse hash lookup # Inputs: 0) value, 1) hash reference # Returns: Hash key or undef if not found (plus flag for multiple matches in list context) sub ReverseLookup($$) { my ($val, $conv) = @_; return undef unless defined $val; my $multi; if ($val =~ /^Unknown\s*\((.*)\)$/i) { $val = $1; # was unknown if ($val =~ /^0x([\da-fA-F]+)$/) { $val = hex($val); # convert hex value } } else { my $qval = $val; $qval =~ s/\s+$//; # remove trailing whitespace $qval = quotemeta $qval; my @patterns = ( "^$qval\$", # exact match "^(?i)$qval\$", # case-insensitive "^(?i)$qval", # beginning of string "(?i)$qval", # substring ); # hash entries to ignore in reverse lookup my ($pattern, $found, $matches); PAT: foreach $pattern (@patterns) { $matches = scalar grep /$pattern/, values(%$conv); next unless $matches; # multiple matches are bad unless they were exact if ($matches > 1 and $pattern !~ /\$$/) { # don't match entries that we should ignore foreach (keys %ignorePrintConv) { --$matches if defined $$conv{$_} and $$conv{$_} =~ /$pattern/; } last if $matches > 1; } foreach (sort keys %$conv) { next if $$conv{$_} !~ /$pattern/ or $ignorePrintConv{$_}; $val = $_; $found = 1; last PAT; } } unless ($found) { # call OTHER conversion routine if available $val = $$conv{OTHER} ? &{$$conv{OTHER}}($val,1,$conv) : undef; $multi = 1 if $matches > 1; } } return ($val, $multi) if wantarray; return $val; } #------------------------------------------------------------------------------ # Return true if we are deleting or overwriting the specified tag # Inputs: 0) ExifTool object ref, 1) new value hash reference # 2) optional tag value (before RawConv) if deleting specific values # Returns: >0 - tag should be overwritten # =0 - the tag should be preserved # <0 - not sure, we need the value to know sub IsOverwriting($$;$) { my ($self, $nvHash, $val) = @_; return 0 unless $nvHash; # overwrite regardless if no DelValues specified return 1 unless $$nvHash{DelValue}; # never overwrite if DelValue list exists but is empty my $shift = $$nvHash{Shift}; return 0 unless @{$$nvHash{DelValue}} or defined $shift; # return "don't know" if we don't have a value to test return -1 unless defined $val; # apply raw conversion if necessary my $tagInfo = $$nvHash{TagInfo}; my $conv = $$tagInfo{RawConv}; if ($conv) { local $SIG{'__WARN__'} = \&SetWarning; undef $evalWarning; if (ref $conv eq 'CODE') { $val = &$conv($val, $self); } else { my $tag = $$tagInfo{Name}; #### eval RawConv ($self, $val, $tag, $tagInfo) $val = eval $conv; $@ and $evalWarning = $@; } return -1 unless defined $val; } # do not overwrite if only creating return 0 if $$nvHash{CreateOnly}; # apply time/number shift if necessary if (defined $shift) { my $shiftType = $$tagInfo{Shift}; unless ($shiftType and $shiftType eq 'Time') { unless (IsFloat($val)) { $self->Warn("Can't shift $$tagInfo{Name} (not a number)"); return 0; } $shiftType = 'Number'; # allow any number to be shifted } require 'Image/ExifTool/Shift.pl'; my $err = $self->ApplyShift($shiftType, $shift, $val, $nvHash); if ($err) { $self->Warn("$err when shifting $$tagInfo{Name}"); return 0; } # ensure that the shifted value is valid and reformat if necessary my $checkVal = $self->GetNewValue($nvHash); return 0 unless defined $checkVal; # don't bother overwriting if value is the same return 0 if $val eq $$nvHash{Value}[0]; return 1; } # return 1 if value matches a DelValue my $delVal; foreach $delVal (@{$$nvHash{DelValue}}) { return 1 if $val eq $delVal; } return 0; } #------------------------------------------------------------------------------ # Get write group for specified tag # Inputs: 0) new value hash reference # Returns: Write group name sub GetWriteGroup($) { return $_[0]{WriteGroup}; } #------------------------------------------------------------------------------ # Get name of write group or family 1 group # Inputs: 0) ExifTool ref, 1) tagInfo ref, 2) write group name # Returns: Name of group for verbose message sub GetWriteGroup1($$) { my ($self, $tagInfo, $writeGroup) = @_; return $writeGroup unless $writeGroup =~ /^(MakerNotes|XMP|Composite)$/; return $self->GetGroup($tagInfo, 1); } #------------------------------------------------------------------------------ # Get new value hash for specified tagInfo/writeGroup # Inputs: 0) ExifTool object reference, 1) reference to tag info hash # 2) Write group name, 3) Options: 'delete' or 'create' # 4) optional ProtectSaved value # Returns: new value hash reference for specified write group # (or first new value hash in linked list if write group not specified) # Notes: May return undef when 'create' is used with ProtectSaved sub GetNewValueHash($$;$$$) { my ($self, $tagInfo, $writeGroup, $opts) = @_; my $nvHash = $$self{NEW_VALUE}{$tagInfo}; my %opts; # quick lookup for options $opts and $opts{$opts} = 1; $writeGroup = '' unless defined $writeGroup; if ($writeGroup) { # find the new value in the list with the specified write group # (QuickTime is a special case because all group1 tags may be updated at once) while ($nvHash and $$nvHash{WriteGroup} ne $writeGroup and $$nvHash{WriteGroup} ne 'QuickTime') { $nvHash = $$nvHash{Next}; } } # remove this entry if deleting, or if creating a new entry and # this entry is marked with "Save" flag if (defined $nvHash and ($opts{'delete'} or ($opts{'create'} and $$nvHash{Save}))) { my $protect = (defined $_[4] and defined $$nvHash{Save} and $$nvHash{Save} > $_[4]); if ($protect and not ($$nvHash{NoReplace} and $opts{create})) { return undef; # honour ProtectSaved value by not writing this tag } elsif ($opts{'delete'}) { $self->RemoveNewValueHash($nvHash, $tagInfo); undef $nvHash; } else { # save a copy of this new value hash my %copy = %$nvHash; # make copy of Value and DelValue lists my $key; foreach $key (keys %copy) { next unless ref $copy{$key} eq 'ARRAY'; $copy{$key} = [ @{$copy{$key}} ]; } my $saveHash = $$self{SAVE_NEW_VALUE}; # add to linked list of saved new value hashes $copy{Next} = $$saveHash{$tagInfo}; $$saveHash{$tagInfo} = \%copy; delete $$nvHash{Save}; # don't save it again $$nvHash{AddBefore} = scalar @{$$nvHash{Value}} if $protect and $$nvHash{Value}; } } if (not defined $nvHash and $opts{'create'}) { # create a new entry $nvHash = { TagInfo => $tagInfo, WriteGroup => $writeGroup, IsNVH => 1, # set flag so we can recognize a new value hash }; # add entry to our NEW_VALUE hash if ($$self{NEW_VALUE}{$tagInfo}) { # add to end of linked list my $lastHash = LastInList($$self{NEW_VALUE}{$tagInfo}); $$lastHash{Next} = $nvHash; } else { $$self{NEW_VALUE}{$tagInfo} = $nvHash; } } return $nvHash; } #------------------------------------------------------------------------------ # Load all tag tables sub LoadAllTables() { return if $loadedAllTables; # load all of our non-referenced tables (first our modules) my $table; foreach $table (@loadAllTables) { my $tableName = "Image::ExifTool::$table"; $tableName .= '::Main' unless $table =~ /:/; GetTagTable($tableName); } # (then our special tables) GetTagTable('Image::ExifTool::Extra'); GetTagTable('Image::ExifTool::Composite'); # recursively load all tables referenced by the current tables my @tableNames = keys %allTables; my %pushedTables; while (@tableNames) { $table = GetTagTable(shift @tableNames); # call write proc if it exists in case it adds tags to the table my $writeProc = $$table{WRITE_PROC}; $writeProc and &$writeProc(); # recursively scan through tables in subdirectories foreach (TagTableKeys($table)) { my @infoArray = GetTagInfoList($table,$_); my $tagInfo; foreach $tagInfo (@infoArray) { my $subdir = $$tagInfo{SubDirectory} or next; my $tableName = $$subdir{TagTable} or next; # next if table already loaded or queued for loading next if $allTables{$tableName} or $pushedTables{$tableName}; push @tableNames, $tableName; # must scan this one too $pushedTables{$tableName} = 1; } } } $loadedAllTables = 1; } #------------------------------------------------------------------------------ # Remove new value hash from linked list (and save if necessary) # Inputs: 0) ExifTool object reference, 1) new value hash ref, 2) tagInfo ref sub RemoveNewValueHash($$$) { my ($self, $nvHash, $tagInfo) = @_; my $firstHash = $$self{NEW_VALUE}{$tagInfo}; if ($nvHash eq $firstHash) { # remove first entry from linked list if ($$nvHash{Next}) { $$self{NEW_VALUE}{$tagInfo} = $$nvHash{Next}; } else { delete $$self{NEW_VALUE}{$tagInfo}; } } else { # find the list element pointing to this hash $firstHash = $$firstHash{Next} while $$firstHash{Next} ne $nvHash; # remove from linked list $$firstHash{Next} = $$nvHash{Next}; } # save the existing entry if necessary if ($$nvHash{Save}) { my $saveHash = $$self{SAVE_NEW_VALUE}; # add to linked list of saved new value hashes $$nvHash{Next} = $$saveHash{$tagInfo}; $$saveHash{$tagInfo} = $nvHash; } } #------------------------------------------------------------------------------ # Remove all new value entries for specified group # Inputs: 0) ExifTool object reference, 1) group name sub RemoveNewValuesForGroup($$) { my ($self, $group) = @_; return unless $$self{NEW_VALUE}; # make list of all groups we must remove my @groups = ( $group ); push @groups, @{$removeGroups{$group}} if $removeGroups{$group}; my ($out, @keys, $hashKey); $out = $$self{OPTIONS}{TextOut} if $$self{OPTIONS}{Verbose} > 1; # loop though all new values, and remove any in this group @keys = keys %{$$self{NEW_VALUE}}; foreach $hashKey (@keys) { my $nvHash = $$self{NEW_VALUE}{$hashKey}; # loop through each entry in linked list for (;;) { my $nextHash = $$nvHash{Next}; my $tagInfo = $$nvHash{TagInfo}; my ($grp0,$grp1) = $self->GetGroup($tagInfo); my $wgrp = $$nvHash{WriteGroup}; # use group1 if write group is not specific $wgrp = $grp1 if $wgrp eq $grp0; if (grep /^($grp0|$wgrp)$/i, @groups) { $out and print $out "Removed new value for $wgrp:$$tagInfo{Name}\n"; # remove from linked list $self->RemoveNewValueHash($nvHash, $tagInfo); } $nvHash = $nextHash or last; } } } #------------------------------------------------------------------------------ # Get list of tagInfo hashes for all new data # Inputs: 0) ExifTool object reference, 1) optional tag table pointer # Returns: list of tagInfo hashes sub GetNewTagInfoList($;$) { my ($self, $tagTablePtr) = @_; my @tagInfoList; my $nv = $$self{NEW_VALUE}; if ($nv) { my $hashKey; foreach $hashKey (keys %$nv) { my $tagInfo = $$nv{$hashKey}{TagInfo}; next if $tagTablePtr and $tagTablePtr ne $$tagInfo{Table}; push @tagInfoList, $tagInfo; } } return @tagInfoList; } #------------------------------------------------------------------------------ # Get hash of tagInfo references keyed on tagID for a specific table # Inputs: 0) ExifTool object reference, 1-N) tag table pointers # Returns: hash reference # Notes: returns only one tagInfo ref for each conditional list sub GetNewTagInfoHash($@) { my $self = shift; my (%tagInfoHash, $hashKey); my $nv = $$self{NEW_VALUE}; while ($nv) { my $tagTablePtr = shift || last; foreach $hashKey (keys %$nv) { my $tagInfo = $$nv{$hashKey}{TagInfo}; next if $tagTablePtr and $tagTablePtr ne $$tagInfo{Table}; $tagInfoHash{$$tagInfo{TagID}} = $tagInfo; } } return \%tagInfoHash; } #------------------------------------------------------------------------------ # Get a tagInfo/tagID hash for subdirectories we need to add # Inputs: 0) ExifTool object reference, 1) parent tag table reference # 2) parent directory name (taken from GROUP0 of tag table if not defined) # Returns: Reference to Hash of subdirectory tagInfo references keyed by tagID # (plus Reference to edit directory hash in list context) sub GetAddDirHash($$;$) { my ($self, $tagTablePtr, $parent) = @_; $parent or $parent = $$tagTablePtr{GROUPS}{0}; my $tagID; my %addDirHash; my %editDirHash; my $addDirs = $$self{ADD_DIRS}; my $editDirs = $$self{EDIT_DIRS}; foreach $tagID (TagTableKeys($tagTablePtr)) { my @infoArray = GetTagInfoList($tagTablePtr,$tagID); my $tagInfo; foreach $tagInfo (@infoArray) { next unless $$tagInfo{SubDirectory}; # get name for this sub directory # (take directory name from SubDirectory DirName if it exists, # otherwise Group0 name of SubDirectory TagTable or tag Group1 name) my $dirName = $$tagInfo{SubDirectory}{DirName}; unless ($dirName) { # use tag name for directory name and save for next time $dirName = $$tagInfo{Name}; $$tagInfo{SubDirectory}{DirName} = $dirName; } # save this directory information if we are writing it if ($$editDirs{$dirName} and $$editDirs{$dirName} eq $parent) { $editDirHash{$tagID} = $tagInfo; $addDirHash{$tagID} = $tagInfo if $$addDirs{$dirName}; } } } return (\%addDirHash, \%editDirHash) if wantarray; return \%addDirHash; } #------------------------------------------------------------------------------ # Get localized version of tagInfo hash (used by MIE, XMP, PNG and QuickTime) # Inputs: 0) tagInfo hash ref, 1) locale code (eg. "en_CA" for MIE) # Returns: new tagInfo hash ref, or undef if invalid # - sets LangCode member in new tagInfo sub GetLangInfo($$) { my ($tagInfo, $langCode) = @_; # make a new tagInfo hash for this locale my $table = $$tagInfo{Table}; my $tagID = $$tagInfo{TagID} . '-' . $langCode; my $langInfo = $$table{$tagID}; unless ($langInfo) { # make a new tagInfo entry for this locale $langInfo = { %$tagInfo, Name => $$tagInfo{Name} . '-' . $langCode, Description => Image::ExifTool::MakeDescription($$tagInfo{Name}) . " ($langCode)", LangCode => $langCode, SrcTagInfo => $tagInfo, # save reference to original tagInfo }; AddTagToTable($table, $tagID, $langInfo); } return $langInfo; } #------------------------------------------------------------------------------ # initialize ADD_DIRS and EDIT_DIRS hashes for all directories that need # need to be created or will have tags changed in them # Inputs: 0) ExifTool object reference, 1) file type string (or map hash ref) # 2) preferred family 0 group name for creating tags # Notes: The ADD_DIRS and EDIT_DIRS keys are the directory names, and the values # are the names of the parent directories (undefined for a top-level directory) sub InitWriteDirs($$;$) { my ($self, $fileType, $preferredGroup) = @_; my $editDirs = $$self{EDIT_DIRS} = { }; my $addDirs = $$self{ADD_DIRS} = { }; my $fileDirs = $dirMap{$fileType}; unless ($fileDirs) { return unless ref $fileType eq 'HASH'; $fileDirs = $fileType; } my @tagInfoList = $self->GetNewTagInfoList(); my ($tagInfo, $nvHash); # save the preferred group $$self{PreferredGroup} = $preferredGroup; foreach $tagInfo (@tagInfoList) { # cycle through all hashes in linked list for ($nvHash=$self->GetNewValueHash($tagInfo); $nvHash; $nvHash=$$nvHash{Next}) { # are we creating this tag? (otherwise just deleting or editing it) my $isCreating = $$nvHash{IsCreating}; if ($isCreating) { # if another group is taking priority, only create # directory if specifically adding tags to this group # or if this tag isn't being added to the priority group $isCreating = 0 if $preferredGroup and $preferredGroup ne $self->GetGroup($tagInfo, 0) and $$nvHash{CreateGroups}{$preferredGroup}; } else { # creating this directory if any tag is preferred and has a value $isCreating = 1 if ($preferredGroup and $$nvHash{Value} and $preferredGroup eq $self->GetGroup($tagInfo, 0)) and not $$nvHash{EditOnly}; } # tag belongs to directory specified by WriteGroup, or by # the Group0 name if WriteGroup not defined my $dirName = $$nvHash{WriteGroup}; # remove MIE copy number(s) if they exist if ($dirName =~ /^MIE\d*(-[a-z]+)?\d*$/i) { $dirName = 'MIE' . ($1 || ''); } my @dirNames; while ($dirName) { my $parent = $$fileDirs{$dirName}; if (ref $parent) { push @dirNames, reverse @$parent; $parent = pop @dirNames; } $$editDirs{$dirName} = $parent; $$addDirs{$dirName} = $parent if $isCreating and $isCreating != 2; $dirName = $parent || shift @dirNames } } } if (%{$$self{DEL_GROUP}}) { # add delete groups to list of edited groups foreach (keys %{$$self{DEL_GROUP}}) { next if /^-/; # ignore excluded groups my $dirName = $_; # translate necessary group 0 names $dirName = $translateWriteGroup{$dirName} if $translateWriteGroup{$dirName}; # convert XMP group 1 names $dirName = 'XMP' if $dirName =~ /^XMP-/; my @dirNames; while ($dirName) { my $parent = $$fileDirs{$dirName}; if (ref $parent) { push @dirNames, reverse @$parent; $parent = pop @dirNames; } $$editDirs{$dirName} = $parent; $dirName = $parent || shift @dirNames } } } # special case to edit JFIF to get resolutions if editing EXIF information if ($$editDirs{IFD0} and $$fileDirs{JFIF}) { $$editDirs{JFIF} = 'IFD1'; $$editDirs{APP0} = undef; } if ($$self{OPTIONS}{Verbose}) { my $out = $$self{OPTIONS}{TextOut}; print $out " Editing tags in: "; foreach (sort keys %$editDirs) { print $out "$_ "; } print $out "\n"; return unless $$self{OPTIONS}{Verbose} > 1; print $out " Creating tags in: "; foreach (sort keys %$addDirs) { print $out "$_ "; } print $out "\n"; } } #------------------------------------------------------------------------------ # Write an image directory # Inputs: 0) ExifTool object reference, 1) source directory information reference # 2) tag table reference, 3) optional reference to writing procedure # Returns: New directory data or undefined on error sub WriteDirectory($$$;$) { my ($self, $dirInfo, $tagTablePtr, $writeProc) = @_; my ($out, $nvHash); $tagTablePtr or return undef; $out = $$self{OPTIONS}{TextOut} if $$self{OPTIONS}{Verbose}; # set directory name from default group0 name if not done already my $dirName = $$dirInfo{DirName}; my $dataPt = $$dirInfo{DataPt}; my $grp0 = $$tagTablePtr{GROUPS}{0}; $dirName or $dirName = $$dirInfo{DirName} = $grp0; if (%{$$self{DEL_GROUP}}) { my $delGroup = $$self{DEL_GROUP}; # delete entire directory if specified my $grp1 = $dirName; my $delFlag = ($$delGroup{$grp0} or $$delGroup{$grp1}); if ($delFlag) { unless ($blockExifTypes{$$self{FILE_TYPE}}) { # restrict delete logic to prevent entire tiff image from being killed # (don't allow IFD0 to be deleted, and delete only ExifIFD if EXIF specified) if ($$self{FILE_TYPE} eq 'PSD') { # don't delete Photoshop directories from PSD image undef $grp1 if $grp0 eq 'Photoshop'; } elsif ($$self{FILE_TYPE} =~ /^(EPS|PS)$/) { # allow anything to be deleted from PostScript files } elsif ($grp1 eq 'IFD0') { my $type = $$self{TIFF_TYPE} || $$self{FILE_TYPE}; $$delGroup{IFD0} and $self->Warn("Can't delete IFD0 from $type",1); undef $grp1; } elsif ($grp0 eq 'EXIF' and $$delGroup{$grp0}) { undef $grp1 unless $$delGroup{$grp1} or $grp1 eq 'ExifIFD'; } } if ($grp1) { if ($dataPt or $$dirInfo{RAF}) { ++$$self{CHANGED}; $out and print $out " Deleting $grp1\n"; # can no longer validate TIFF_END if deleting an entire IFD delete $$self{TIFF_END} if $dirName =~ /IFD/; } # don't add back into the wrong location my $right = $$self{ADD_DIRS}{$grp1}; # (take care because EXIF directory name may be either EXIF or IFD0, # but IFD0 will be the one that appears in the directory map) $right = $$self{ADD_DIRS}{IFD0} if not $right and $grp1 eq 'EXIF'; if ($delFlag == 2 and $right) { # also check grandparent because some routines create 2 levels in 1 my $right2 = $$self{ADD_DIRS}{$right} || ''; my $parent = $$dirInfo{Parent}; if (not $parent or $parent eq $right or $parent eq $right2) { # prevent duplicate directories from being recreated at the same path my $path = join '-', @{$$self{PATH}}, $dirName; $$self{Recreated} or $$self{Recreated} = { }; if ($$self{Recreated}{$path}) { my $p = $parent ? " in $parent" : ''; $self->Warn("Not recreating duplicate $grp1$p",1); return ''; } $$self{Recreated}{$path} = 1; # empty the directory my $data = ''; $$dirInfo{DataPt} = \$data; $$dirInfo{DataLen} = 0; $$dirInfo{DirStart} = 0; $$dirInfo{DirLen} = 0; delete $$dirInfo{RAF}; delete $$dirInfo{Base}; delete $$dirInfo{DataPos}; } else { $self->Warn("Not recreating $grp1 in $parent (should be in $right)",1); return ''; } } else { return '' unless $$dirInfo{NoDelete}; } } } } # use default proc from tag table if no proc specified $writeProc or $writeProc = $$tagTablePtr{WRITE_PROC} or return undef; # are we rewriting a pre-existing directory? my $isRewriting = ($$dirInfo{DirLen} or (defined $dataPt and length $$dataPt) or $$dirInfo{RAF}); # copy or delete new directory as a block if specified my $blockName = $dirName; $blockName = 'EXIF' if $blockName eq 'IFD0'; my $tagInfo = $Image::ExifTool::Extra{$blockName} || $$dirInfo{TagInfo}; while ($tagInfo and ($nvHash = $$self{NEW_VALUE}{$tagInfo}) and $self->IsOverwriting($nvHash) and not ($$nvHash{CreateOnly} and $isRewriting)) { # protect against writing EXIF to wrong file types, etc if ($blockName eq 'EXIF') { unless ($blockExifTypes{$$self{FILE_TYPE}}) { $self->Warn("Can't write EXIF as a block to $$self{FILE_TYPE} file"); last; } # this can happen if we call WriteDirectory for an EXIF directory without going # through WriteTIFF as the WriteProc (which happens if conditionally replacing # the EXIF block and the condition fails), but we never want to do a block write # in this case because the EXIF block would end up with two TIFF headers last unless $writeProc eq \&Image::ExifTool::WriteTIFF; } last unless $self->IsOverwriting($nvHash, $dataPt ? $$dataPt : ''); my $verb = 'Writing'; my $newVal = $self->GetNewValue($nvHash); unless (defined $newVal and length $newVal) { return '' unless $dataPt or $$dirInfo{RAF}; # nothing to do if block never existed $verb = 'Deleting'; $newVal = ''; } $$dirInfo{BlockWrite} = 1; # set flag indicating we did a block write $out and print $out " $verb $blockName as a block\n"; ++$$self{CHANGED}; return $newVal; } # guard against writing the same directory twice if (defined $dataPt and defined $$dirInfo{DirStart} and defined $$dirInfo{DataPos}) { my $addr = $$dirInfo{DirStart} + $$dirInfo{DataPos} + ($$dirInfo{Base}||0) + $$self{BASE}; # (Phase One P25 IIQ files have ICC_Profile duplicated in IFD0 and IFD1) if ($$self{PROCESSED}{$addr} and ($dirName ne 'ICC_Profile' or $$self{TIFF_TYPE} ne 'IIQ')) { if (defined $$dirInfo{DirLen} and not $$dirInfo{DirLen} and $dirName ne $$self{PROCESSED}{$addr}) { # it is hypothetically possible to have 2 different directories # with the same address if one has a length of zero } elsif ($self->Error("$dirName pointer references previous $$self{PROCESSED}{$addr} directory", 2)) { return undef; } else { $self->Warn("Deleting duplicate $dirName directory"); $out and print $out " Deleting $dirName\n"; return ''; # delete the duplicate directory } } else { $$self{PROCESSED}{$addr} = $dirName; } } my $oldDir = $$self{DIR_NAME}; my $name; if ($out) { $name = ($dirName eq 'MakerNotes' and $$dirInfo{TagInfo}) ? $$dirInfo{TagInfo}{Name} : $dirName; if (not defined $oldDir or $oldDir ne $name) { my $verb = $isRewriting ? 'Rewriting' : 'Creating'; print $out " $verb $name\n"; } } my $saveOrder = GetByteOrder(); my $oldChanged = $$self{CHANGED}; $$self{DIR_NAME} = $dirName; push @{$$self{PATH}}, $dirName; $$dirInfo{IsWriting} = 1; my $newData = &$writeProc($self, $dirInfo, $tagTablePtr); pop @{$$self{PATH}}; # nothing changed if error occurred or nothing was created $$self{CHANGED} = $oldChanged unless defined $newData and (length($newData) or $isRewriting); $$self{DIR_NAME} = $oldDir; SetByteOrder($saveOrder); print $out " Deleting $name\n" if $out and defined $newData and not length $newData; return $newData; } #------------------------------------------------------------------------------ # Uncommon utility routines to for reading binary data values # Inputs: 0) data reference, 1) offset into data sub Get64s($$) { my ($dataPt, $pos) = @_; my $pt = GetByteOrder() eq 'MM' ? 0 : 4; # get position of high word my $hi = Get32s($dataPt, $pos + $pt); # preserve sign bit of high word my $lo = Get32u($dataPt, $pos + 4 - $pt); return $hi * 4294967296 + $lo; } sub Get64u($$) { my ($dataPt, $pos) = @_; my $pt = GetByteOrder() eq 'MM' ? 0 : 4; # get position of high word my $hi = Get32u($dataPt, $pos + $pt); # (unsigned this time) my $lo = Get32u($dataPt, $pos + 4 - $pt); return $hi * 4294967296 + $lo; } # Decode extended 80-bit float used by Apple SANE and Intel 8087 # (note: different than the IEEE standard 80-bit float) sub GetExtended($$) { my ($dataPt, $pos) = @_; my $pt = GetByteOrder() eq 'MM' ? 0 : 2; # get position of exponent my $exp = Get16u($dataPt, $pos + $pt); my $sig = Get64u($dataPt, $pos + 2 - $pt); # get significand as int64u my $sign = $exp & 0x8000 ? -1 : 1; $exp = ($exp & 0x7fff) - 16383 - 63; # (-63 to fractionalize significand) return $sign * $sig * 2 ** $exp; } #------------------------------------------------------------------------------ # Dump data in hex and ASCII to console # Inputs: 0) data reference, 1) length or undef, 2-N) Options: # Options: Start => offset to start of data (default=0) # Addr => address to print for data start (default=DataPos+Base+Start) # DataPos => position of data within block (relative to Base) # Base => base offset for pointers from start of file # Width => width of printout (bytes, default=16) # Prefix => prefix to print at start of line (default='') # MaxLen => maximum length to dump # Out => output file reference # Len => data length sub HexDump($;$%) { my $dataPt = shift; my $len = shift; my %opts = @_; my $start = $opts{Start} || 0; my $addr = $opts{Addr}; my $wid = $opts{Width} || 16; my $prefix = $opts{Prefix} || ''; my $out = $opts{Out} || \*STDOUT; my $maxLen = $opts{MaxLen}; my $datLen = length($$dataPt) - $start; my $more; $len = $opts{Len} if defined $opts{Len}; $addr = $start + ($opts{DataPos} || 0) + ($opts{Base} || 0) unless defined $addr; $len = $datLen unless defined $len; if ($maxLen and $len > $maxLen) { # print one line less to allow for $more line below $maxLen = int(($maxLen - 1) / $wid) * $wid; $more = $len - $maxLen; $len = $maxLen; } if ($len > $datLen) { print $out "$prefix Warning: Attempted dump outside data\n"; print $out "$prefix ($len bytes specified, but only $datLen available)\n"; $len = $datLen; } my $format = sprintf("%%-%ds", $wid * 3); my $tmpl = 'H2' x $wid; # ('(H2)*' would have been nice, but older perl versions don't support it) my $i; for ($i=0; $i<$len; $i+=$wid) { $wid > $len-$i and $wid = $len-$i, $tmpl = 'H2' x $wid; printf $out "$prefix%8.4x: ", $addr+$i; my $dat = substr($$dataPt, $i+$start, $wid); my $s = join(' ', unpack($tmpl, $dat)); printf $out $format, $s; $dat =~ tr /\x00-\x1f\x7f-\xff/./; print $out "[$dat]\n"; } $more and print $out "$prefix [snip $more bytes]\n"; } #------------------------------------------------------------------------------ # Print verbose tag information # Inputs: 0) ExifTool object reference, 1) tag ID # 2) tag info reference (or undef) # 3-N) extra parms: # Parms: Index => Index of tag in menu (starting at 0) # Value => Tag value # DataPt => reference to value data block # DataPos => location of data block in file # Base => base added to all offsets # Size => length of value data within block # Format => value format string # Count => number of values # Extra => Extra Verbose=2 information to put after tag number # Table => Reference to tag table # --> plus any of these HexDump() options: Start, Addr, Width sub VerboseInfo($$$%) { my ($self, $tagID, $tagInfo, %parms) = @_; my $verbose = $$self{OPTIONS}{Verbose}; my $out = $$self{OPTIONS}{TextOut}; my ($tag, $line, $hexID); # generate hex number if tagID is numerical if (defined $tagID) { $tagID =~ /^\d+$/ and $hexID = sprintf("0x%.4x", $tagID); } else { $tagID = 'Unknown'; } # get tag name if ($tagInfo and $$tagInfo{Name}) { $tag = $$tagInfo{Name}; } else { my $prefix; $prefix = $parms{Table}{TAG_PREFIX} if $parms{Table}; if ($prefix or $hexID) { $prefix = 'Unknown' unless $prefix; $tag = $prefix . '_' . ($hexID ? $hexID : $tagID); } else { $tag = $tagID; } } my $dataPt = $parms{DataPt}; my $size = $parms{Size}; $size = length $$dataPt unless defined $size or not $dataPt; my $indent = $$self{INDENT}; # Level 1: print tag/value information $line = $indent; my $index = $parms{Index}; if (defined $index) { $line .= $index . ') '; $line .= ' ' if length($index) < 2; $indent .= ' '; # indent everything else to align with tag name } $line .= $tag; if ($tagInfo and $$tagInfo{SubDirectory}) { $line .= ' (SubDirectory) -->'; } else { my $maxLen = 90 - length($line); if (defined $parms{Value}) { $line .= ' = ' . $self->Printable($parms{Value}, $maxLen); } elsif ($dataPt) { my $start = $parms{Start} || 0; $line .= ' = ' . $self->Printable(substr($$dataPt,$start,$size), $maxLen); } } print $out "$line\n"; # Level 2: print detailed information about the tag if ($verbose > 1 and ($parms{Extra} or $parms{Format} or $parms{DataPt} or defined $size or $tagID =~ /\//)) { $line = $indent . '- Tag '; if ($hexID) { $line .= $hexID; } else { $tagID =~ s/([\0-\x1f\x7f-\xff])/sprintf('\\x%.2x',ord $1)/ge; $line .= "'$tagID'"; } $line .= $parms{Extra} if defined $parms{Extra}; my $format = $parms{Format}; if ($format or defined $size) { $line .= ' ('; if (defined $size) { $line .= "$size bytes"; $line .= ', ' if $format; } if ($format) { $line .= $format; $line .= '['.$parms{Count}.']' if $parms{Count}; } $line .= ')'; } $line .= ':' if $verbose > 2 and $parms{DataPt}; print $out "$line\n"; } # Level 3: do hex dump of value if ($verbose > 2 and $parms{DataPt}) { $parms{Out} = $out; $parms{Prefix} = $indent; # limit dump length if Verbose < 5 $parms{MaxLen} = $verbose == 3 ? 96 : 2048 if $verbose < 5; HexDump($dataPt, $size, %parms); } } #------------------------------------------------------------------------------ # Dump trailer information # Inputs: 0) ExifTool object ref, 1) dirInfo hash (RAF, DirName, DataPos, DirLen) # Notes: Restores current file position before returning sub DumpTrailer($$) { my ($self, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my $curPos = $raf->Tell(); my $trailer = $$dirInfo{DirName} || 'Unknown'; my $pos = $$dirInfo{DataPos}; my $verbose = $$self{OPTIONS}{Verbose}; my $htmlDump = $$self{HTML_DUMP}; my ($buff, $buf2); my $size = $$dirInfo{DirLen}; $pos = $curPos unless defined $pos; # get full trailer size if not specified for (;;) { unless ($size) { $raf->Seek(0, 2) or last; $size = $raf->Tell() - $pos; last unless $size; } $raf->Seek($pos, 0) or last; if ($htmlDump) { my $num = $raf->Read($buff, $size) or return; my $desc = "$trailer trailer"; $desc = "[$desc]" if $trailer eq 'Unknown'; $self->HDump($pos, $num, $desc, undef, 0x08); last; } my $out = $$self{OPTIONS}{TextOut}; printf $out "$trailer trailer (%d bytes at offset 0x%.4x):\n", $size, $pos; last unless $verbose > 2; my $num = $size; # number of bytes to read # limit size if not very verbose if ($verbose < 5) { my $limit = $verbose < 4 ? 96 : 512; $num = $limit if $num > $limit; } $raf->Read($buff, $num) == $num or return; # read the end of the trailer too if not done already if ($size > 2 * $num) { $raf->Seek($pos + $size - $num, 0); $raf->Read($buf2, $num); } elsif ($size > $num) { $raf->Seek($pos + $num, 0); $raf->Read($buf2, $size - $num); $buff .= $buf2; undef $buf2; } HexDump(\$buff, undef, Addr => $pos, Out => $out); if (defined $buf2) { print $out " [snip ", $size - $num * 2, " bytes]\n"; HexDump(\$buf2, undef, Addr => $pos + $size - $num, Out => $out); } last; } $raf->Seek($curPos, 0); } #------------------------------------------------------------------------------ # Dump unknown trailer information # Inputs: 0) ExifTool ref, 1) dirInfo ref (with RAF, DataPos and DirLen defined) # Notes: changes dirInfo elements sub DumpUnknownTrailer($$) { my ($self, $dirInfo) = @_; my $pos = $$dirInfo{DataPos}; my $endPos = $pos + $$dirInfo{DirLen}; # account for preview/MPF image trailer my $prePos = $$self{VALUE}{PreviewImageStart} || $$self{PreviewImageStart}; my $preLen = $$self{VALUE}{PreviewImageLength} || $$self{PreviewImageLength}; my $tag = 'PreviewImage'; my $mpImageNum = 0; my (%image, $lastOne); for (;;) { # add to Preview block list if valid and in the trailer $image{$prePos} = [$tag, $preLen] if $prePos and $preLen and $prePos+$preLen > $pos; last if $lastOne; # checked all images # look for MPF images (in the the proper order) ++$mpImageNum; $prePos = $$self{VALUE}{"MPImageStart ($mpImageNum)"}; if (defined $prePos) { $preLen = $$self{VALUE}{"MPImageLength ($mpImageNum)"}; } else { $prePos = $$self{VALUE}{'MPImageStart'}; $preLen = $$self{VALUE}{'MPImageLength'}; $lastOne = 1; } $tag = "MPImage$mpImageNum"; } # dump trailer sections in order $image{$endPos} = [ '', 0 ]; # add terminator "image" foreach $prePos (sort { $a <=> $b } keys %image) { if ($pos < $prePos) { # dump unknown trailer data $$dirInfo{DirName} = 'Unknown'; $$dirInfo{DataPos} = $pos; $$dirInfo{DirLen} = $prePos - $pos; $self->DumpTrailer($dirInfo); } ($tag, $preLen) = @{$image{$prePos}}; last unless $preLen; # dump image if verbose (it is htmlDump'd by ExtractImage) if ($$self{OPTIONS}{Verbose}) { $$dirInfo{DirName} = $tag; $$dirInfo{DataPos} = $prePos; $$dirInfo{DirLen} = $preLen; $self->DumpTrailer($dirInfo); } $pos = $prePos + $preLen; } } #------------------------------------------------------------------------------ # Find last element in linked list # Inputs: 0) element in list # Returns: Last element in list sub LastInList($) { my $element = shift; while ($$element{Next}) { $element = $$element{Next}; } return $element; } #------------------------------------------------------------------------------ # Print verbose directory information # Inputs: 0) ExifTool object reference, 1) directory name or dirInfo ref # 2) number of entries in directory (or 0 if unknown) # 3) optional size of directory in bytes sub VerboseDir($$;$$) { my ($self, $name, $entries, $size) = @_; return unless $$self{OPTIONS}{Verbose}; if (ref $name eq 'HASH') { $size = $$name{DirLen} unless $size; $name = $$name{Name} || $$name{DirName}; } my $indent = substr($$self{INDENT}, 0, -2); my $out = $$self{OPTIONS}{TextOut}; my $str = $entries ? " with $entries entries" : ''; $str .= ", $size bytes" if $size; print $out "$indent+ [$name directory$str]\n"; } #------------------------------------------------------------------------------ # Print verbose value while writing # Inputs: 0) ExifTool object ref, 1) heading "eg. '+ IPTC:Keywords', # 2) value, 3) [optional] extra text after value sub VerboseValue($$$;$) { return unless $_[0]{OPTIONS}{Verbose} > 1; my ($self, $str, $val, $xtra) = @_; my $out = $$self{OPTIONS}{TextOut}; $xtra or $xtra = ''; my $maxLen = 81 - length($str) - length($xtra); $val = $self->Printable($val, $maxLen); print $out " $str = '$val'$xtra\n"; } #------------------------------------------------------------------------------ # Pack Unicode numbers into UTF8 string # Inputs: 0-N) list of Unicode numbers # Returns: Packed UTF-8 string sub PackUTF8(@) { my @out; while (@_) { my $ch = pop; unshift(@out, $ch), next if $ch < 0x80; unshift(@out, 0x80 | ($ch & 0x3f)); $ch >>= 6; unshift(@out, 0xc0 | $ch), next if $ch < 0x20; unshift(@out, 0x80 | ($ch & 0x3f)); $ch >>= 6; unshift(@out, 0xe0 | $ch), next if $ch < 0x10; unshift(@out, 0x80 | ($ch & 0x3f)); $ch >>= 6; unshift(@out, 0xf0 | ($ch & 0x07)); } return pack('C*', @out); } #------------------------------------------------------------------------------ # Unpack numbers from UTF8 string # Inputs: 0) UTF-8 string # Returns: List of Unicode numbers (sets $evalWarning on error) sub UnpackUTF8($) { my (@out, $pos); pos($_[0]) = $pos = 0; # start at beginning of string for (;;) { my ($ch, $newPos, $val, $byte); if ($_[0] =~ /([\x80-\xff])/g) { $ch = ord($1); $newPos = pos($_[0]) - 1; } else { $newPos = length $_[0]; } # unpack 7-bit characters my $len = $newPos - $pos; push @out, unpack("x${pos}C$len",$_[0]) if $len; last unless defined $ch; $pos = $newPos + 1; # minimum lead byte for 2-byte sequence is 0xc2 (overlong sequences # not allowed), 0xf8-0xfd are restricted by RFC 3629 (no 5 or 6 byte # sequences), and 0xfe and 0xff are not valid in UTF-8 strings if ($ch < 0xc2 or $ch >= 0xf8) { push @out, ord('?'); # invalid UTF-8 $evalWarning = 'Bad UTF-8'; next; } # decode 2, 3 and 4-byte sequences my $n = 1; if ($ch < 0xe0) { $val = $ch & 0x1f; # 2-byte sequence } elsif ($ch < 0xf0) { $val = $ch & 0x0f; # 3-byte sequence ++$n; } else { $val = $ch & 0x07; # 4-byte sequence $n += 2; } unless ($_[0] =~ /\G([\x80-\xbf]{$n})/g) { pos($_[0]) = $pos; # restore position push @out, ord('?'); # invalid UTF-8 $evalWarning = 'Bad UTF-8'; next; } foreach $byte (unpack 'C*', $1) { $val = ($val << 6) | ($byte & 0x3f); } push @out, $val; # save Unicode character value $pos += $n; # position at end of UTF-8 character } return @out; } #------------------------------------------------------------------------------ # Return current time in EXIF format # Inputs: 0) flag to include timezone (0 to disable, undef or 1 to include) # Returns: time string sub TimeNow(;$) { my $tzFlag = shift; my $time = time(); my @tm = localtime $time; my $tz = ($tzFlag or not defined $tzFlag) ? TimeZoneString(\@tm, $time) : ''; return sprintf("%4d:%.2d:%.2d %.2d:%.2d:%.2d%s", $tm[5]+1900, $tm[4]+1, $tm[3], $tm[2], $tm[1], $tm[0], $tz); } #------------------------------------------------------------------------------ # Generate a new, random GUID # Inputs: <none> # Returns: GUID string my $guidCount; sub NewGUID() { my @tm = localtime time; $guidCount = 0 unless defined $guidCount and ++$guidCount < 0x100; return sprintf('%.4d%.2d%.2d%.2d%.2d%.2d%.2X%.4X%.4X%.4X%.4X', $tm[5]+1900, $tm[4]+1, $tm[3], $tm[2], $tm[1], $tm[0], $guidCount, $$ & 0xffff, rand(0x10000), rand(0x10000), rand(0x10000)); } #------------------------------------------------------------------------------ # Inverse date/time print conversion (reformat to YYYY:mm:dd HH:MM:SS[.ss][+-HH:MM|Z]) # Inputs: 0) ExifTool object ref, 1) Date/Time string, 2) timezone flag: # 0 - remove timezone and sub-seconds if they exist # 1 - add timezone if it doesn't exist # undef - leave timezone alone # 3) flag to allow date-only (YYYY, YYYY:mm or YYYY:mm:dd) or time without seconds # Returns: formatted date/time string (or undef and issues warning on error) # Notes: currently accepts different separators, but doesn't use DateFormat yet sub InverseDateTime($$;$$) { my ($self, $val, $tzFlag, $dateOnly) = @_; my ($rtnVal, $tz); # strip off timezone first if it exists if ($val =~ s/([+-])(\d{1,2}):?(\d{2})\s*$//i) { $tz = sprintf("$1%.2d:$3", $2); } elsif ($val =~ s/Z$//i) { $tz = 'Z'; } else { $tz = ''; # allow special value of 'now' return TimeNow($tzFlag) if lc($val) eq 'now'; } if ($val =~ /(\d{4})/g) { # get YYYY my $yr = $1; my @a = ($val =~ /\d{1,2}/g); # get mm, dd, HH, and maybe MM, SS length($_) < 2 and $_ = "0$_" foreach @a; # pad to 2 digits if necessary if (@a >= 3) { my $ss = $a[4]; # get SS push @a, '00' while @a < 5; # add MM, SS if not given # get sub-seconds if they exist (must be after SS, and have leading ".") my $fs = (@a > 5 and $val =~ /(\.\d+)\s*$/) ? $1 : ''; # add/remove timezone if necessary if ($tzFlag) { if (not $tz) { if (eval { require Time::Local }) { # determine timezone offset for this time my @args = ($a[4],$a[3],$a[2],$a[1],$a[0]-1,$yr-1900); my $diff = Time::Local::timegm(@args) - TimeLocal(@args); $tz = TimeZoneString($diff / 60); } else { $tz = 'Z'; # don't know time zone } } } elsif (defined $tzFlag) { $tz = $fs = ''; # remove timezone and sub-seconds } if (defined $ss) { $ss = ":$ss"; } elsif ($dateOnly) { $ss = ''; } else { $ss = ':00'; } # construct properly formatted date/time string $rtnVal = "$yr:$a[0]:$a[1] $a[2]:$a[3]$ss$fs$tz"; } elsif ($dateOnly) { $rtnVal = join ':', $yr, @a; } } $rtnVal or warn "Invalid date/time (use YYYY:mm:dd HH:MM:SS[.ss][+/-HH:MM|Z])\n"; return $rtnVal; } #------------------------------------------------------------------------------ # Set byte order according to our current preferences # Inputs: 0) ExifTool object ref # Returns: new byte order ('II' or 'MM') and sets current byte order # Notes: takes the first of the following that is valid: # 1) ByteOrder option # 2) new value for ExifByteOrder # 3) makenote byte order from last file read # 4) big endian sub SetPreferredByteOrder($) { my $self = shift; my $byteOrder = $self->Options('ByteOrder') || $self->GetNewValue('ExifByteOrder') || $$self{MAKER_NOTE_BYTE_ORDER} || 'MM'; unless (SetByteOrder($byteOrder)) { warn "Invalid byte order '$byteOrder'\n" if $self->Options('Verbose'); $byteOrder = $$self{MAKER_NOTE_BYTE_ORDER} || 'MM'; SetByteOrder($byteOrder); } return GetByteOrder(); } #------------------------------------------------------------------------------ # Assemble a continuing fraction into a rational value # Inputs: 0) numerator, 1) denominator # 2-N) list of fraction denominators, deepest first # Returns: numerator, denominator (in list context) sub AssembleRational($$@) { @_ < 3 and return @_; my ($num, $denom, $frac) = splice(@_, 0, 3); return AssembleRational($frac*$num+$denom, $num, @_); } #------------------------------------------------------------------------------ # Convert a floating point number (or 'inf' or 'undef' or a fraction) into a rational # Inputs: 0) floating point number, 1) optional maximum value (defaults to 0x7fffffff) # Returns: numerator, denominator (in list context) # Notes: # - the returned rational will be accurate to at least 8 significant figures if possible # - eg. an input of 3.14159265358979 returns a rational of 104348/33215, # which equals 3.14159265392142 and is accurate to 10 significant figures # - these routines were a bit tricky, but fun to write! sub Rationalize($;$) { my $val = shift; return (1, 0) if $val eq 'inf'; return (0, 0) if $val eq 'undef'; return ($1,$2) if $val =~ m{^([-+]?\d+)/(\d+)$}; # accept fractional values # Note: Just testing "if $val" doesn't work because '0.0' is true! (ugghh!) return (0, 1) if $val == 0; my $sign = $val < 0 ? ($val = -$val, -1) : 1; my ($num, $denom, @fracs); my $frac = $val; my $maxInt = shift || 0x7fffffff; for (;;) { my ($n, $d) = AssembleRational(int($frac + 0.5), 1, @fracs); if ($n > $maxInt or $d > $maxInt) { last if defined $num; return ($sign, $maxInt) if $val < 1; return ($sign * $maxInt, 1); } ($num, $denom) = ($n, $d); # save last good values my $err = ($n/$d-$val) / $val; # get error of this rational last if abs($err) < 1e-8; # all done if error is small my $int = int($frac); unshift @fracs, $int; last unless $frac -= $int; $frac = 1 / $frac; } return ($num * $sign, $denom); } #------------------------------------------------------------------------------ # Utility routines to for writing binary data values # Inputs: 0) value, 1) data ref, 2) offset # Notes: prototype is (@) so values can be passed from list if desired sub Set16s(@) { my $val = shift; $val < 0 and $val += 0x10000; return Set16u($val, @_); } sub Set32s(@) { my $val = shift; $val < 0 and $val += 0xffffffff, ++$val; return Set32u($val, @_); } sub Set64u(@) { my $val = shift; my $hi = int($val / 4294967296); my $lo = Set32u($val - $hi * 4294967296); $hi = Set32u($hi); $val = GetByteOrder() eq 'MM' ? $hi . $lo : $lo . $hi; $_[1] and substr(${$_[1]}, $_[2], length($val)) = $val; return $val; } sub SetRational64u(@) { my ($numer,$denom) = Rationalize($_[0],0xffffffff); my $val = Set32u($numer) . Set32u($denom); $_[1] and substr(${$_[1]}, $_[2], length($val)) = $val; return $val; } sub SetRational64s(@) { my ($numer,$denom) = Rationalize($_[0]); my $val = Set32s($numer) . Set32u($denom); $_[1] and substr(${$_[1]}, $_[2], length($val)) = $val; return $val; } sub SetRational32u(@) { my ($numer,$denom) = Rationalize($_[0],0xffff); my $val = Set16u($numer) . Set16u($denom); $_[1] and substr(${$_[1]}, $_[2], length($val)) = $val; return $val; } sub SetRational32s(@) { my ($numer,$denom) = Rationalize($_[0],0x7fff); my $val = Set16s($numer) . Set16u($denom); $_[1] and substr(${$_[1]}, $_[2], length($val)) = $val; return $val; } sub SetFixed16u(@) { my $val = int(shift() * 0x100 + 0.5); return Set16u($val, @_); } sub SetFixed16s(@) { my $val = shift; return Set16s(int($val * 0x100 + ($val < 0 ? -0.5 : 0.5)), @_); } sub SetFixed32u(@) { my $val = int(shift() * 0x10000 + 0.5); return Set32u($val, @_); } sub SetFixed32s(@) { my $val = shift; return Set32s(int($val * 0x10000 + ($val < 0 ? -0.5 : 0.5)), @_); } sub SetFloat(@) { my $val = SwapBytes(pack('f',$_[0]), 4); $_[1] and substr(${$_[1]}, $_[2], length($val)) = $val; return $val; } sub SetDouble(@) { # swap 32-bit words (ARM quirk) and bytes if necessary my $val = SwapBytes(SwapWords(pack('d',$_[0])), 8); $_[1] and substr(${$_[1]}, $_[2], length($val)) = $val; return $val; } #------------------------------------------------------------------------------ # hash lookups for writing binary data values my %writeValueProc = ( int8s => \&Set8s, int8u => \&Set8u, int16s => \&Set16s, int16u => \&Set16u, int16uRev => \&Set16uRev, int32s => \&Set32s, int32u => \&Set32u, int64u => \&Set64u, rational32s => \&SetRational32s, rational32u => \&SetRational32u, rational64s => \&SetRational64s, rational64u => \&SetRational64u, fixed16u => \&SetFixed16u, fixed16s => \&SetFixed16s, fixed32u => \&SetFixed32u, fixed32s => \&SetFixed32s, float => \&SetFloat, double => \&SetDouble, ifd => \&Set32u, ); # verify that we can write floats on this platform { my %writeTest = ( float => [ -3.14159, 'c0490fd0' ], double => [ -3.14159, 'c00921f9f01b866e' ], ); my $format; my $oldOrder = GetByteOrder(); SetByteOrder('MM'); foreach $format (keys %writeTest) { my ($val, $hex) = @{$writeTest{$format}}; # add floating point entries if we can write them next if unpack('H*', &{$writeValueProc{$format}}($val)) eq $hex; delete $writeValueProc{$format}; # we can't write them } SetByteOrder($oldOrder); } #------------------------------------------------------------------------------ # write binary data value (with current byte ordering) # Inputs: 0) value, 1) format string # 2) number of values: # undef = 1 for numerical types, or data length for string/undef types # -1 = number of space-delimited values in the input string # 3) optional data reference, 4) value offset (may be negative for bytes from end) # Returns: packed value (and sets value in data) or undef on error # Notes: May modify input value to round for integer formats sub WriteValue($$;$$$$) { my ($val, $format, $count, $dataPt, $offset) = @_; my $proc = $writeValueProc{$format}; my $packed; if ($proc) { my @vals = split(' ',$val); if ($count) { $count = @vals if $count < 0; } else { $count = 1; # assume 1 if count not specified } $packed = ''; while ($count--) { $val = shift @vals; return undef unless defined $val; # validate numerical formats if ($format =~ /^int/) { unless (IsInt($val) or IsHex($val)) { return undef unless IsFloat($val); # round to nearest integer $val = int($val + ($val < 0 ? -0.5 : 0.5)); $_[0] = $val; } } elsif (not IsFloat($val)) { return undef unless $format =~ /^rational/ and ($val eq 'inf' or $val eq 'undef' or IsRational($val)); } $packed .= &$proc($val); } } elsif ($format eq 'string' or $format eq 'undef') { $format eq 'string' and $val .= "\0"; # null-terminate strings if ($count and $count > 0) { my $diff = $count - length($val); if ($diff) { #warn "wrong string length!\n"; # adjust length of string to match specified count if ($diff < 0) { if ($format eq 'string') { return undef unless $count; $val = substr($val, 0, $count - 1) . "\0"; } else { $val = substr($val, 0, $count); } } else { $val .= "\0" x $diff; } } } else { $count = length($val); } $dataPt and substr($$dataPt, $offset, $count) = $val; return $val; } else { warn "Sorry, Can't write $format values on this platform\n"; return undef; } $dataPt and substr($$dataPt, $offset, length($packed)) = $packed; return $packed; } #------------------------------------------------------------------------------ # Encode bit mask (the inverse of DecodeBits()) # Inputs: 0) value to encode, 1) Reference to hash for encoding (or undef) # 2) optional number of bits per word (defaults to 32), 3) total bits # Returns: bit mask or undef on error (plus error string in list context) sub EncodeBits($$;$$) { my ($val, $lookup, $bits, $num) = @_; $bits or $bits = 32; $num or $num = $bits; my $words = int(($num + $bits - 1) / $bits); my @outVal = (0) x $words; if ($val ne '(none)') { my @vals = split /\s*,\s*/, $val; foreach $val (@vals) { my $bit; if ($lookup) { $bit = ReverseLookup($val, $lookup); # (Note: may get non-numerical $bit values from Unknown() tags) unless (defined $bit) { if ($val =~ /\[(\d+)\]/) { # numerical bit specification $bit = $1; } else { # don't return error string unless more than one value return undef unless @vals > 1 and wantarray; return (undef, "no match for '$val'"); } } } else { $bit = $val; } unless (IsInt($bit) and $bit < $num) { return undef unless wantarray; return (undef, IsInt($bit) ? 'bit number too high' : 'not an integer'); } my $word = int($bit / $bits); $outVal[$word] |= (1 << ($bit - $word * $bits)); } } return "@outVal"; } #------------------------------------------------------------------------------ # get current position in output file (or end of file if a scalar reference) # Inputs: 0) file or scalar reference # Returns: Current position or -1 on error sub Tell($) { my $outfile = shift; if (UNIVERSAL::isa($outfile,'GLOB')) { return tell($outfile); } else { return length($$outfile); } } #------------------------------------------------------------------------------ # write to file or memory # Inputs: 0) file or scalar reference, 1-N) list of stuff to write # Returns: true on success sub Write($@) { my $outfile = shift; if (UNIVERSAL::isa($outfile,'GLOB')) { return print $outfile @_; } elsif (ref $outfile eq 'SCALAR') { $$outfile .= join('', @_); return 1; } return 0; } #------------------------------------------------------------------------------ # Write trailer buffer to file (applying fixups if necessary) # Inputs: 0) ExifTool object ref, 1) trailer dirInfo ref, 2) output file ref # Returns: 1 on success sub WriteTrailerBuffer($$$) { my ($self, $trailInfo, $outfile) = @_; if ($$self{DEL_GROUP}{Trailer}) { $self->VPrint(0, " Deleting trailer ($$trailInfo{Offset} bytes)\n"); ++$$self{CHANGED}; return 1; } my $pos = Tell($outfile); my $trailPt = $$trailInfo{OutFile}; # apply fixup if necessary (AFCP requires this) if ($$trailInfo{Fixup}) { if ($pos > 0) { # shift offsets to final AFCP location and write it out $$trailInfo{Fixup}{Shift} += $pos; $$trailInfo{Fixup}->ApplyFixup($trailPt); } else { $self->Error("Can't get file position for trailer offset fixup",1); } } return Write($outfile, $$trailPt); } #------------------------------------------------------------------------------ # Add trailers as a block # Inputs: 0) ExifTool object ref, 1) [optional] trailer data raf, # 1 or 2-N) trailer types to add (or none to add all) # Returns: new trailer ref, or undef # - increments CHANGED if trailer was added sub AddNewTrailers($;@) { my ($self, @types) = @_; my $trailPt; ref $types[0] and $trailPt = shift @types; $types[0] or shift @types; # (in case undef data ref is passed) # add all possible trailers if none specified (currently only CanonVRD) @types or @types = qw(CanonVRD CanonDR4); # add trailers as a block (if not done already) my $type; foreach $type (@types) { next unless $$self{NEW_VALUE}{$Image::ExifTool::Extra{$type}}; next if $$self{"Did$type"}; my $val = $self->GetNewValue($type) or next; # DR4 record must be wrapped in VRD trailer package if ($type eq 'CanonDR4') { next if $$self{DidCanonVRD}; # (only allow one VRD trailer) require Image::ExifTool::CanonVRD; $val = Image::ExifTool::CanonVRD::WrapDR4($val); $$self{DidCanonVRD} = 1; } my $verb = $trailPt ? 'Writing' : 'Adding'; $self->VPrint(0, " $verb $type as a block\n"); if ($trailPt) { $$trailPt .= $val; } else { $trailPt = \$val; } $$self{"Did$type"} = 1; ++$$self{CHANGED}; } return $trailPt; } #------------------------------------------------------------------------------ # Write segment, splitting up into multiple segments if necessary # Inputs: 0) file or scalar reference, 1) segment marker # 2) segment header, 3) segment data ref, 4) segment type # Returns: number of segments written, or 0 on error sub WriteMultiSegment($$$$;$) { my ($outfile, $marker, $header, $dataPt, $type) = @_; $type or $type = ''; my $len = length($$dataPt); my $hdr = "\xff" . chr($marker); my $count = 0; my $maxLen = $maxSegmentLen - length($header); $maxLen -= 2 if $type eq 'ICC'; # leave room for segment counters my $num = int(($len + $maxLen - 1) / $maxLen); # number of segments to write my $n; # write data, splitting into multiple segments if necessary # (each segment gets its own header) for ($n=0; $n<$len; $n+=$maxLen) { ++$count; my $size = $len - $n; $size > $maxLen and $size = $maxLen; my $buff = substr($$dataPt,$n,$size); $size += length($header); if ($type eq 'ICC') { $buff = pack('CC', $count, $num) . $buff; $size += 2; } # write the new segment with appropriate header my $segHdr = $hdr . pack('n', $size + 2); Write($outfile, $segHdr, $header, $buff) or return 0; } return $count; } #------------------------------------------------------------------------------ # Write XMP segment(s) to JPEG file # Inputs: 0) ExifTool object ref, 1) outfile ref, 2) XMP data ref, # 3) extended XMP data ref, 4) 32-char extended XMP GUID (or undef if no extended data) # Returns: true on success, false on write error sub WriteMultiXMP($$$$$) { my ($self, $outfile, $dataPt, $extPt, $guid) = @_; my $success = 1; # write main XMP segment my $size = length($$dataPt) + length($xmpAPP1hdr); if ($size > $maxXMPLen) { $self->Error("XMP block too large for JPEG segment! ($size bytes)", 1); return 1; } my $app1hdr = "\xff\xe1" . pack('n', $size + 2); Write($outfile, $app1hdr, $xmpAPP1hdr, $$dataPt) or $success = 0; # write extended XMP segment(s) if necessary if (defined $guid) { $size = length($$extPt); my $maxLen = $maxXMPLen - 75; # maximum size without 75-byte header my $off; for ($off=0; $off<$size; $off+=$maxLen) { # header(75) = signature(35) + guid(32) + size(4) + offset(4) my $len = $size - $off; $len = $maxLen if $len > $maxLen; $app1hdr = "\xff\xe1" . pack('n', $len + 75 + 2); $self->VPrint(0, "Writing extended XMP segment ($len bytes)\n"); Write($outfile, $app1hdr, $xmpExtAPP1hdr, $guid, pack('N2', $size, $off), substr($$extPt, $off, $len)) or $success = 0; } } return $success; } #------------------------------------------------------------------------------ # WriteJPEG : Write JPEG image # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid JPEG file, or -1 if # an output file was specified and a write error occurred sub WriteJPEG($$) { my ($self, $dirInfo) = @_; my $outfile = $$dirInfo{OutFile}; my $raf = $$dirInfo{RAF}; my ($ch, $s, $length,$err, %doneDir, $isEXV, $creatingEXV); my $verbose = $$self{OPTIONS}{Verbose}; my $out = $$self{OPTIONS}{TextOut}; my $rtnVal = 0; my %dumpParms = ( Out => $out ); my ($writeBuffer, $oldOutfile); # used to buffer writing until PreviewImage position is known # check to be sure this is a valid JPG or EXV file unless ($raf->Read($s,2) == 2 and $s eq "\xff\xd8") { if (defined $s and length $s) { return 0 unless $s eq "\xff\x01" and $raf->Read($s,5) == 5 and $s eq 'Exiv2'; } else { return 0 unless $$self{FILE_TYPE} eq 'EXV'; $s = 'Exiv2'; $creatingEXV = 1; } Write($outfile,"\xff\x01") or $err = 1; $isEXV = 1; } $dumpParms{MaxLen} = 128 unless $verbose > 3; delete $$self{PREVIEW_INFO}; # reset preview information delete $$self{DEL_PREVIEW}; # reset flag to delete preview Write($outfile, $s) or $err = 1; # figure out what segments we need to write for the tags we have set my $addDirs = $$self{ADD_DIRS}; my $editDirs = $$self{EDIT_DIRS}; my $delGroup = $$self{DEL_GROUP}; my $path = $$self{PATH}; my $pn = scalar @$path; # set input record separator to 0xff (the JPEG marker) to make reading quicker local $/ = "\xff"; # # pre-scan image to determine if any create-able segment already exists # my $pos = $raf->Tell(); my ($marker, @dirOrder, %dirCount); Prescan: for (;;) { # read up to next marker (JPEG markers begin with 0xff) $raf->ReadLine($s) or last; # JPEG markers can be padded with unlimited 0xff's for (;;) { $raf->Read($ch, 1) or last Prescan; $marker = ord($ch); last unless $marker == 0xff; } # SOS signifies end of meta information if ($marker == 0xda) { push(@dirOrder, 'SOS'); $dirCount{SOS} = 1; last; } my $dirName; # handle SOF markers: SOF0-SOF15, except DHT(0xc4), JPGA(0xc8) and DAC(0xcc) if (($marker & 0xf0) == 0xc0 and ($marker == 0xc0 or $marker & 0x03)) { last unless $raf->Seek(7, 1); # read data for all markers except stand-alone # markers 0x00, 0x01 and 0xd0-0xd7 (NULL, TEM, RST0-RST7) } elsif ($marker!=0x00 and $marker!=0x01 and ($marker<0xd0 or $marker>0xd7)) { # read record length word last unless $raf->Read($s, 2) == 2; my $len = unpack('n',$s); # get data length last unless defined($len) and $len >= 2; $len -= 2; # subtract size of length word if (($marker & 0xf0) == 0xe0) { # is this an APP segment? my $n = $len < 64 ? $len : 64; $raf->Read($s, $n) == $n or last; $len -= $n; # Note: only necessary to recognize APP segments that we can create, # or delete as a group (and the names below should match @delGroups) if ($marker == 0xe0) { $s =~ /^JFIF\0/ and $dirName = 'JFIF'; $s =~ /^JFXX\0\x10/ and $dirName = 'JFXX'; $s =~ /^(II|MM).{4}HEAPJPGM/s and $dirName = 'CIFF'; } elsif ($marker == 0xe1) { $s =~ /^(.{0,4})$exifAPP1hdr/s and $dirName = 'IFD0'; $s =~ /^$xmpAPP1hdr/ and $dirName = 'XMP'; $s =~ /^$xmpExtAPP1hdr/ and $dirName = 'XMP'; } elsif ($marker == 0xe2) { $s =~ /^ICC_PROFILE\0/ and $dirName = 'ICC_Profile'; $s =~ /^FPXR\0/ and $dirName = 'FlashPix'; $s =~ /^MPF\0/ and $dirName = 'MPF'; } elsif ($marker == 0xe3) { $s =~ /^(Meta|META|Exif)\0\0/ and $dirName = 'Meta'; } elsif ($marker == 0xe5) { $s =~ /^RMETA\0/ and $dirName = 'RMETA'; } elsif ($marker == 0xec) { $s =~ /^Ducky/ and $dirName = 'Ducky'; } elsif ($marker == 0xed) { $s =~ /^$psAPP13hdr/ and $dirName = 'Photoshop'; } elsif ($marker == 0xee) { $s =~ /^Adobe/ and $dirName = 'Adobe'; } # initialize doneDir as a flag that the directory exists # (unless we are deleting it anyway) $doneDir{$dirName} = 0 if defined $dirName and not $$delGroup{$dirName}; } $raf->Seek($len, 1) or last; } $dirName or $dirName = JpegMarkerName($marker); $dirCount{$dirName} = ($dirCount{$dirName} || 0) + 1; push @dirOrder, $dirName; } unless ($marker and $marker == 0xda) { $isEXV or $self->Error('Corrupted JPEG image'), return 1; $marker and $marker ne 0xd9 and $self->Error('Corrupted EXV file'), return 1; push @dirOrder, 'EOI'; $dirCount{EOI} = 1; } $raf->Seek($pos, 0) or $self->Error('Seek error'), return 1; # # re-write the image # my ($combinedSegData, $segPos, %extendedXMP); my (@iccChunk, $iccChunkCount, $iccChunksTotal); # read through each segment in the JPEG file Marker: for (;;) { # read up to next marker (JPEG markers begin with 0xff) my $segJunk; $raf->ReadLine($segJunk) or $segJunk = ''; # remove the 0xff but write the rest of the junk up to this point # (this will handle the data after the first 7 bytes of SOF segments) chomp($segJunk); Write($outfile, $segJunk) if length $segJunk; # JPEG markers can be padded with unlimited 0xff's for (;;) { if ($raf->Read($ch, 1)) { $marker = ord($ch); last unless $marker == 0xff; } elsif ($creatingEXV) { # create EXV from scratch $marker = 0xd9; # EOI last; } else { $self->Error('Format error'); return 1; } } # read the segment data my $segData; # handle SOF markers: SOF0-SOF15, except DHT(0xc4), JPGA(0xc8) and DAC(0xcc) if (($marker & 0xf0) == 0xc0 and ($marker == 0xc0 or $marker & 0x03)) { last unless $raf->Read($segData, 7) == 7; # read data for all markers except stand-alone # markers 0x00, 0x01 and 0xd0-0xd7 (NULL, TEM, EOI, RST0-RST7) } elsif ($marker!=0x00 and $marker!=0x01 and $marker!=0xd9 and ($marker<0xd0 or $marker>0xd7)) { # read record length word last unless $raf->Read($s, 2) == 2; my $len = unpack('n',$s); # get data length last unless defined($len) and $len >= 2; $segPos = $raf->Tell(); $len -= 2; # subtract size of length word last unless $raf->Read($segData, $len) == $len; } # initialize variables for this segment my $hdr = "\xff" . chr($marker); # segment header my $markerName = JpegMarkerName($marker); my $dirName = shift @dirOrder; # get directory name # # create all segments that must come before this one # (nothing comes before SOI or after SOS) # while ($markerName ne 'SOI') { if (exists $$addDirs{JFIF} and not defined $doneDir{JFIF}) { $doneDir{JFIF} = 1; if ($verbose) { print $out "Creating APP0:\n"; print $out " Creating JFIF with default values\n"; } my $jfif = "\x01\x02\x01\0\x48\0\x48\0\0"; SetByteOrder('MM'); my $tagTablePtr = GetTagTable('Image::ExifTool::JFIF::Main'); my %dirInfo = ( DataPt => \$jfif, DirStart => 0, DirLen => length $jfif, Parent => 'JFIF', ); # must temporarily remove JFIF from DEL_GROUP so we can # delete JFIF and add it back again in a single step my $delJFIF = $$delGroup{JFIF}; delete $$delGroup{JFIF}; $$path[$pn] = 'JFIF'; my $newData = $self->WriteDirectory(\%dirInfo, $tagTablePtr); $$delGroup{JFIF} = $delJFIF if defined $delJFIF; if (defined $newData and length $newData) { my $app0hdr = "\xff\xe0" . pack('n', length($newData) + 7); Write($outfile,$app0hdr,"JFIF\0",$newData) or $err = 1; } } # don't create anything before APP0 or APP1 EXIF (containing IFD0) last if $markerName eq 'APP0' or $dirCount{IFD0}; # EXIF information must come immediately after APP0 if (exists $$addDirs{IFD0} and not defined $doneDir{IFD0}) { $doneDir{IFD0} = 1; $verbose and print $out "Creating APP1:\n"; # write new EXIF data $$self{TIFF_TYPE} = 'APP1'; my $tagTablePtr = GetTagTable('Image::ExifTool::Exif::Main'); my %dirInfo = ( DirName => 'IFD0', Parent => 'APP1', ); $$path[$pn] = 'APP1'; my $buff = $self->WriteDirectory(\%dirInfo, $tagTablePtr, \&WriteTIFF); if (defined $buff and length $buff) { my $size = length($buff) + length($exifAPP1hdr); if ($size <= $maxSegmentLen) { # switch to buffered output if required if (($$self{PREVIEW_INFO} or $$self{LeicaTrailer}) and not $oldOutfile) { $writeBuffer = ''; $oldOutfile = $outfile; $outfile = \$writeBuffer; # account for segment, EXIF and TIFF headers $$self{PREVIEW_INFO}{Fixup}{Start} += 18 if $$self{PREVIEW_INFO}; $$self{LeicaTrailer}{Fixup}{Start} += 18 if $$self{LeicaTrailer}; } # write the new segment with appropriate header my $app1hdr = "\xff\xe1" . pack('n', $size + 2); Write($outfile,$app1hdr,$exifAPP1hdr,$buff) or $err = 1; } else { delete $$self{PREVIEW_INFO}; $self->Warn("EXIF APP1 segment too large! ($size bytes)"); } } } # APP13 Photoshop segment next last if $dirCount{Photoshop}; if (exists $$addDirs{Photoshop} and not defined $doneDir{Photoshop}) { $doneDir{Photoshop} = 1; $verbose and print $out "Creating APP13:\n"; # write new APP13 Photoshop record to memory my $tagTablePtr = GetTagTable('Image::ExifTool::Photoshop::Main'); my %dirInfo = ( Parent => 'APP13', ); $$path[$pn] = 'APP13'; my $buff = $self->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $buff and length $buff) { WriteMultiSegment($outfile, 0xed, $psAPP13hdr, \$buff) or $err = 1; ++$$self{CHANGED}; } } # then APP1 XMP segment last if $dirCount{XMP}; if (exists $$addDirs{XMP} and not defined $doneDir{XMP}) { $doneDir{XMP} = 1; $verbose and print $out "Creating APP1:\n"; # write new XMP data my $tagTablePtr = GetTagTable('Image::ExifTool::XMP::Main'); my %dirInfo = ( Parent => 'APP1', # specify MaxDataLen so XMP is split if required MaxDataLen => $maxXMPLen - length($xmpAPP1hdr), ); $$path[$pn] = 'APP1'; my $buff = $self->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $buff and length $buff) { WriteMultiXMP($self, $outfile, \$buff, $dirInfo{ExtendedXMP}, $dirInfo{ExtendedGUID}) or $err = 1; } } # then APP2 ICC_Profile segment last if $dirCount{ICC_Profile}; if (exists $$addDirs{ICC_Profile} and not defined $doneDir{ICC_Profile}) { $doneDir{ICC_Profile} = 1; next if $$delGroup{ICC_Profile} and $$delGroup{ICC_Profile} != 2; $verbose and print $out "Creating APP2:\n"; # write new ICC_Profile data my $tagTablePtr = GetTagTable('Image::ExifTool::ICC_Profile::Main'); my %dirInfo = ( Parent => 'APP2', ); $$path[$pn] = 'APP2'; my $buff = $self->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $buff and length $buff) { WriteMultiSegment($outfile, 0xe2, "ICC_PROFILE\0", \$buff, 'ICC') or $err = 1; ++$$self{CHANGED}; } } # then APP12 Ducky segment last if $dirCount{Ducky}; if (exists $$addDirs{Ducky} and not defined $doneDir{Ducky}) { $doneDir{Ducky} = 1; $verbose and print $out "Creating APP12 Ducky:\n"; # write new Ducky segment data my $tagTablePtr = GetTagTable('Image::ExifTool::APP12::Ducky'); my %dirInfo = ( Parent => 'APP12', ); $$path[$pn] = 'APP12'; my $buff = $self->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $buff and length $buff) { my $size = length($buff) + 5; if ($size <= $maxSegmentLen) { # write the new segment with appropriate header my $app12hdr = "\xff\xec" . pack('n', $size + 2); Write($outfile, $app12hdr, 'Ducky', $buff) or $err = 1; } else { $self->Warn("Ducky APP12 segment too large! ($size bytes)"); } } } # then APP14 Adobe segment last if $dirCount{Adobe}; if (exists $$addDirs{Adobe} and not defined $doneDir{Adobe}) { $doneDir{Adobe} = 1; my $buff = $self->GetNewValue('Adobe'); if ($buff) { $verbose and print $out "Creating APP14:\n Creating Adobe segment\n"; my $size = length($buff); if ($size <= $maxSegmentLen) { # write the new segment with appropriate header my $app14hdr = "\xff\xee" . pack('n', $size + 2); Write($outfile, $app14hdr, $buff) or $err = 1; ++$$self{CHANGED}; } else { $self->Warn("Adobe APP14 segment too large! ($size bytes)"); } } } # finally, COM segment last if $dirCount{COM}; if (exists $$addDirs{COM} and not defined $doneDir{COM}) { $doneDir{COM} = 1; next if $$delGroup{File} and $$delGroup{File} != 2; my $newComment = $self->GetNewValue('Comment'); if (defined $newComment and length($newComment)) { if ($verbose) { print $out "Creating COM:\n"; $self->VerboseValue('+ Comment', $newComment); } WriteMultiSegment($outfile, 0xfe, '', \$newComment) or $err = 1; ++$$self{CHANGED}; } } last; # didn't want to loop anyway } $$path[$pn] = $markerName; # decrement counter for this directory since we are about to process it --$dirCount{$dirName}; # # rewrite existing segments # # handle SOF markers: SOF0-SOF15, except DHT(0xc4), JPGA(0xc8) and DAC(0xcc) if (($marker & 0xf0) == 0xc0 and ($marker == 0xc0 or $marker & 0x03)) { $verbose and print $out "JPEG $markerName:\n"; Write($outfile, $hdr, $segData) or $err = 1; next; } elsif ($marker == 0xda) { # SOS pop @$path; $verbose and print $out "JPEG SOS\n"; # write SOS segment $s = pack('n', length($segData) + 2); Write($outfile, $hdr, $s, $segData) or $err = 1; my ($buff, $endPos, $trailInfo); my $delPreview = $$self{DEL_PREVIEW}; $trailInfo = IdentifyTrailer($raf) unless $$delGroup{Trailer}; unless ($oldOutfile or $delPreview or $trailInfo or $$delGroup{Trailer}) { # blindly copy the rest of the file while ($raf->Read($buff, 65536)) { Write($outfile, $buff) or $err = 1, last; } $rtnVal = 1; # success unless we have a file write error last; # all done } # write the rest of the image (as quickly as possible) up to the EOI my $endedWithFF; for (;;) { my $n = $raf->Read($buff, 65536) or last Marker; if (($endedWithFF and $buff =~ m/^\xd9/sg) or $buff =~ m/\xff\xd9/sg) { $rtnVal = 1; # the JPEG is OK # write up to the EOI my $pos = pos($buff); Write($outfile, substr($buff, 0, $pos)) or $err = 1; $buff = substr($buff, $pos); last; } unless ($n == 65536) { $self->Error('JPEG EOI marker not found'); last Marker; } Write($outfile, $buff) or $err = 1; $endedWithFF = substr($buff, 65535, 1) eq "\xff" ? 1 : 0; } # remember position of last data copied $endPos = $raf->Tell() - length($buff); # rewrite trailers if they exist if ($trailInfo) { my $tbuf = ''; $raf->Seek(-length($buff), 1); # seek back to just after EOI $$trailInfo{OutFile} = \$tbuf; # rewrite the trailer $$trailInfo{ScanForAFCP} = 1; # scan if necessary $self->ProcessTrailers($trailInfo) or undef $trailInfo; } if (not $oldOutfile) { # do nothing special } elsif ($$self{LeicaTrailer}) { my $trailLen; if ($trailInfo) { $trailLen = $$trailInfo{DataPos} - $endPos; } else { $raf->Seek(0, 2) or $err = 1; $trailLen = $raf->Tell() - $endPos; } my $fixup = $$self{LeicaTrailer}{Fixup}; $$self{LeicaTrailer}{TrailPos} = $endPos; $$self{LeicaTrailer}{TrailLen} = $trailLen; # get _absolute_ position of new Leica trailer my $absPos = Tell($oldOutfile) + length($$outfile); require Image::ExifTool::Panasonic; my $dat = Image::ExifTool::Panasonic::ProcessLeicaTrailer($self, $absPos); # allow some junk before Leica trailer (just in case) my $junk = $$self{LeicaTrailerPos} - $endPos; # set MakerNote pointer and size (subtract 10 for segment and EXIF headers) $fixup->SetMarkerPointers($outfile, 'LeicaTrailer', length($$outfile) - 10 + $junk); # use this fixup to set the size too (sneaky) my $trailSize = defined($dat) ? length($dat) - $junk : $$self{LeicaTrailer}{Size}; $$fixup{Start} -= 4; $$fixup{Shift} += 4; $fixup->SetMarkerPointers($outfile, 'LeicaTrailer', $trailSize) if defined $trailSize; $$fixup{Start} += 4; $$fixup{Shift} -= 4; # clean up and write the buffered data $outfile = $oldOutfile; undef $oldOutfile; Write($outfile, $writeBuffer) or $err = 1; undef $writeBuffer; if (defined $dat) { Write($outfile, $dat) or $err = 1; # write new Leica trailer $delPreview = 1; # delete existing Leica trailer } } else { # locate preview image and fix up preview offsets my $scanLen = $$self{Make} =~ /^SONY/i ? 65536 : 1024; if (length($buff) < $scanLen) { # make sure we have enough trailer to scan my $buf2; $buff .= $buf2 if $raf->Read($buf2, $scanLen - length($buff)); } # get new preview image position, relative to EXIF base my $newPos = length($$outfile) - 10; # (subtract 10 for segment and EXIF headers) my $junkLen; # adjust position if image isn't at the start (eg. Olympus E-1/E-300) if ($buff =~ /(\xff\xd8\xff.|.\xd8\xff\xdb)(..)/sg) { my ($jpegHdr, $segLen) = ($1, $2); $junkLen = pos($buff) - 6; # Sony previewimage trailer has a 32 byte header if ($$self{Make} =~ /^SONY/i and $junkLen > 32) { # with some newer Sony models, the makernotes preview pointer # points to JPEG at end of EXIF inside MPImage preview (what a pain!) if ($jpegHdr eq "\xff\xd8\xff\xe1") { # is the first segment EXIF? $segLen = unpack('n', $segLen); # the EXIF segment length # Sony PreviewImage starts with last 2 bytes of EXIF segment # (and first byte is usually "\0", not "\xff", so don't check this) if (length($buff) > $junkLen + $segLen + 6 and substr($buff, $junkLen + $segLen + 3, 3) eq "\xd8\xff\xdb") { $junkLen += $segLen + 2; # (note: this will not copy the trailer after PreviewImage, # which is a 14kB block full of zeros for the A77) } } $junkLen -= 32; } $newPos += $junkLen; } # fix up the preview offsets to point to the start of the new image my $previewInfo = $$self{PREVIEW_INFO}; delete $$self{PREVIEW_INFO}; my $fixup = $$previewInfo{Fixup}; $newPos += ($$previewInfo{BaseShift} || 0); # adjust to absolute file offset if necessary (Samsung STMN) $newPos += Tell($oldOutfile) + 10 if $$previewInfo{Absolute}; if ($$previewInfo{Relative}) { # adjust for our base by looking at how far the pointer got shifted $newPos -= ($fixup->GetMarkerPointers($outfile, 'PreviewImage') || 0); } elsif ($$previewInfo{ChangeBase}) { # Leica S2 uses relative offsets for the preview only (leica sucks) my $makerOffset = $fixup->GetMarkerPointers($outfile, 'LeicaTrailer'); $newPos -= $makerOffset if $makerOffset; } $fixup->SetMarkerPointers($outfile, 'PreviewImage', $newPos); # clean up and write the buffered data $outfile = $oldOutfile; undef $oldOutfile; Write($outfile, $writeBuffer) or $err = 1; undef $writeBuffer; # write preview image if ($$previewInfo{Data} ne 'LOAD_PREVIEW') { # write any junk that existed before the preview image Write($outfile, substr($buff,0,$junkLen)) or $err = 1 if $junkLen; # write the saved preview image Write($outfile, $$previewInfo{Data}) or $err = 1; delete $$previewInfo{Data}; # (don't increment CHANGED because we could be rewriting existing preview) $delPreview = 1; # remove old preview } } # copy over preview image if necessary unless ($delPreview) { my $extra; if ($trailInfo) { # copy everything up to start of first processed trailer $extra = $$trailInfo{DataPos} - $endPos; } else { # copy everything up to end of file $raf->Seek(0, 2) or $err = 1; $extra = $raf->Tell() - $endPos; } if ($extra > 0) { if ($$delGroup{Trailer}) { $verbose and print $out " Deleting unknown trailer ($extra bytes)\n"; ++$$self{CHANGED}; } else { # copy over unknown trailer $verbose and print $out " Preserving unknown trailer ($extra bytes)\n"; $raf->Seek($endPos, 0) or $err = 1; CopyBlock($raf, $outfile, $extra) or $err = 1; } } } # write trailer if necessary if ($trailInfo) { $self->WriteTrailerBuffer($trailInfo, $outfile) or $err = 1; undef $trailInfo; } last; # all done parsing file } elsif ($marker==0xd9 and $isEXV) { # write EXV EOI Write($outfile, "\xff\xd9") or $err = 1; $rtnVal = 1; last; } elsif ($marker==0x00 or $marker==0x01 or ($marker>=0xd0 and $marker<=0xd7)) { $verbose and $marker and print $out "JPEG $markerName:\n"; # handle stand-alone markers 0x00, 0x01 and 0xd0-0xd7 (NULL, TEM, RST0-RST7) Write($outfile, $hdr) or $err = 1; next; } # # NOTE: A 'next' statement after this point will cause $$segDataPt # not to be written if there is an output file, so in this case # the $$self{CHANGED} flags must be updated # my $segDataPt = \$segData; $length = length($segData); if ($verbose) { print $out "JPEG $markerName ($length bytes):\n"; if ($verbose > 2 and $markerName =~ /^APP/) { HexDump($segDataPt, undef, %dumpParms); } } # group delete of APP segements if ($$delGroup{$dirName}) { $verbose and print $out " Deleting $dirName segment\n"; ++$$self{CHANGED}; next Marker; } my ($segType, $del); # rewrite this segment only if we are changing a tag which is contained in its # directory (or deleting '*', in which case we need to identify the segment type) while (exists $$editDirs{$markerName} or $$delGroup{'*'}) { my $oldChanged = $$self{CHANGED}; if ($marker == 0xe0) { # APP0 (JFIF, CIFF) if ($$segDataPt =~ /^JFIF\0/) { $segType = 'JFIF'; $$delGroup{JFIF} and $del = 1, last; last unless $$editDirs{JFIF}; SetByteOrder('MM'); my $tagTablePtr = GetTagTable('Image::ExifTool::JFIF::Main'); my %dirInfo = ( DataPt => $segDataPt, DataPos => $segPos, DataLen => $length, DirStart => 5, # directory starts after identifier DirLen => $length-5, Parent => $markerName, ); my $newData = $self->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $newData and length $newData) { $$segDataPt = "JFIF\0" . $newData; } } elsif ($$segDataPt =~ /^JFXX\0\x10/) { $segType = 'JFXX'; $$delGroup{JFIF} and $del = 1; } elsif ($$segDataPt =~ /^(II|MM).{4}HEAPJPGM/s) { $segType = 'CIFF'; $$delGroup{CIFF} and $del = 1, last; last unless $$editDirs{CIFF}; my $newData = ''; my %dirInfo = ( RAF => new File::RandomAccess($segDataPt), OutFile => \$newData, ); require Image::ExifTool::CanonRaw; if (Image::ExifTool::CanonRaw::WriteCRW($self, \%dirInfo) > 0) { if (length $newData) { $$segDataPt = $newData; } else { undef $segDataPt; $del = 1; # delete this segment } } } } elsif ($marker == 0xe1) { # APP1 (EXIF, XMP) # check for EXIF data if ($$segDataPt =~ /^(.{0,4})$exifAPP1hdr/is) { my $hdrLen = length $exifAPP1hdr; if (length $1) { $hdrLen += length $1; $self->Error('Unknown garbage at start of EXIF segment',1); } elsif ($$segDataPt !~ /^Exif\0/) { $self->Error('Incorrect EXIF segment identifier',1); } $segType = 'EXIF'; $doneDir{IFD0} and $self->Warn('Multiple APP1 EXIF segments'); $doneDir{IFD0} = 1; last unless $$editDirs{IFD0}; # check del groups now so we can change byte order in one step if ($$delGroup{IFD0} or $$delGroup{EXIF}) { delete $doneDir{IFD0}; # delete so we will create a new one $del = 1; last; } # rewrite EXIF as if this were a TIFF file in memory my %dirInfo = ( DataPt => $segDataPt, DataPos => -$hdrLen, # (remember: relative to Base!) DirStart => $hdrLen, Base => $segPos + $hdrLen, Parent => $markerName, DirName => 'IFD0', ); # write new EXIF data to memory my $tagTablePtr = GetTagTable('Image::ExifTool::Exif::Main'); my $buff = $self->WriteDirectory(\%dirInfo, $tagTablePtr, \&WriteTIFF); if (defined $buff) { # update segment with new data $$segDataPt = $exifAPP1hdr . $buff; } else { last Marker unless $self->Options('IgnoreMinorErrors'); $$self{CHANGED} = $oldChanged; # nothing changed } # switch to buffered output if required if (($$self{PREVIEW_INFO} or $$self{LeicaTrailer}) and not $oldOutfile) { $writeBuffer = ''; $oldOutfile = $outfile; $outfile = \$writeBuffer; # must account for segment, EXIF and TIFF headers $$self{PREVIEW_INFO}{Fixup}{Start} += 18 if $$self{PREVIEW_INFO}; $$self{LeicaTrailer}{Fixup}{Start} += 18 if $$self{LeicaTrailer}; } # delete segment if IFD contains no entries $del = 1 unless length($$segDataPt) > length($exifAPP1hdr); # check for XMP data } elsif ($$segDataPt =~ /^($xmpAPP1hdr|$xmpExtAPP1hdr)/) { $segType = 'XMP'; $$delGroup{XMP} and $del = 1, last; $doneDir{XMP} = ($doneDir{XMP} || 0) + 1; last unless $$editDirs{XMP}; if ($doneDir{XMP} + $dirCount{XMP} > 1) { # must assemble all XMP segments before writing my ($guid, $extXMP); if ($$segDataPt =~ /^$xmpExtAPP1hdr/) { # save extended XMP data if (length $$segDataPt < 75) { $extendedXMP{Error} = 'Truncated data'; } else { my ($size, $off) = unpack('x67N2', $$segDataPt); $guid = substr($$segDataPt, 35, 32); if ($guid =~ /[^A-Za-z0-9]/) { # (technically, should be uppercase) $extendedXMP{Error} = 'Invalid GUID'; } else { # remember extended data for each GUID $extXMP = $extendedXMP{$guid}; if ($extXMP) { $size == $$extXMP{Size} or $extendedXMP{Error} = 'Inconsistent size'; } else { $extXMP = $extendedXMP{$guid} = { }; } $$extXMP{Size} = $size; $$extXMP{$off} = substr($$segDataPt, 75); } } } else { # save all main XMP segments (should normally be only one) $extendedXMP{Main} = [] unless $extendedXMP{Main}; push @{$extendedXMP{Main}}, substr($$segDataPt, length $xmpAPP1hdr); } # continue processing only if we have read all the segments next Marker if $dirCount{XMP}; # reconstruct an XMP super-segment $$segDataPt = $xmpAPP1hdr; my $goodGuid = ''; foreach (@{$extendedXMP{Main}}) { # get the HasExtendedXMP GUID if it exists if (/:HasExtendedXMP\s*(=\s*['"]|>)(\w{32})/) { # warn of subsequent XMP blocks specifying a different # HasExtendedXMP (have never seen this) if ($goodGuid and $goodGuid ne $2) { $self->WarnOnce('Multiple XMP segments specifying different extended XMP GUID'); } $goodGuid = $2; # GUID for the standard extended XMP } $$segDataPt .= $_; } # GUID of the extended XMP that we want to read my $readGuid = $$self{OPTIONS}{ExtendedXMP} || 0; $readGuid = $goodGuid if $readGuid eq '1'; foreach $guid (sort keys %extendedXMP) { next unless length $guid == 32; # ignore other (internal) keys if ($guid ne $readGuid and $readGuid ne '2') { my $non = $guid eq $goodGuid ? '' : 'non-'; $self->Warn("Ignored ${non}standard extended XMP (GUID $guid)"); next; } if ($guid ne $goodGuid) { $self->Warn("Reading non-standard extended XMP (GUID $guid)"); } $extXMP = $extendedXMP{$guid}; next unless ref $extXMP eq 'HASH'; # (just to be safe) my $size = $$extXMP{Size}; my (@offsets, $off); for ($off=0; $off<$size; ) { last unless defined $$extXMP{$off}; push @offsets, $off; $off += length $$extXMP{$off}; } if ($off == $size) { # add all XMP to super-segment $$segDataPt .= $$extXMP{$_} foreach @offsets; } else { $self->Error("Incomplete extended XMP (GUID $guid)", 1); } } $self->Error("$extendedXMP{Error} in extended XMP", 1) if $extendedXMP{Error}; } my $start = length $xmpAPP1hdr; my $tagTablePtr = GetTagTable('Image::ExifTool::XMP::Main'); my %dirInfo = ( DataPt => $segDataPt, DirStart => $start, Parent => $markerName, # limit XMP size and create extended XMP if necessary MaxDataLen => $maxXMPLen - length($xmpAPP1hdr), ); my $newData = $self->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $newData) { undef %extendedXMP; if (length $newData) { # write multi-segment XMP (XMP plus extended XMP if necessary) WriteMultiXMP($self, $outfile, \$newData, $dirInfo{ExtendedXMP}, $dirInfo{ExtendedGUID}) or $err = 1; undef $$segDataPt; # free the old buffer next Marker; } else { $$segDataPt = ''; # delete the XMP } } else { $$self{CHANGED} = $oldChanged; $verbose and print $out " [XMP rewritten with no changes]\n"; if ($doneDir{XMP} > 1) { # re-write original multi-segment XMP my ($dat, $guid, $extXMP, $off); foreach $dat (@{$extendedXMP{Main}}) { # main XMP next unless length $dat; $s = pack('n', length($xmpAPP1hdr) + length($dat) + 2); Write($outfile, $hdr, $s, $xmpAPP1hdr, $dat) or $err = 1; } foreach $guid (sort keys %extendedXMP) { # extended XMP next unless length $guid == 32; $extXMP = $extendedXMP{$guid}; next unless ref $extXMP eq 'HASH'; my $size = $$extXMP{Size} or next; for ($off=0; defined $$extXMP{$off}; $off += length $$extXMP{$off}) { $s = pack('n', length($xmpExtAPP1hdr) + length($$extXMP{$off}) + 42); Write($outfile, $hdr, $s, $xmpExtAPP1hdr, $guid, pack('N2', $size, $off), $$extXMP{$off}) or $err = 1; } } undef $$segDataPt; # free the old buffer undef %extendedXMP; next Marker; } # continue on to re-write original single-segment XMP } $del = 1 unless length $$segDataPt; } elsif ($$segDataPt =~ /^http/ or $$segDataPt =~ /<exif:/) { $self->Warn('Ignored APP1 XMP segment with non-standard header', 1); } } elsif ($marker == 0xe2) { # APP2 (ICC Profile, FPXR, MPF) if ($$segDataPt =~ /^ICC_PROFILE\0/ and $length >= 14) { $segType = 'ICC_Profile'; $$delGroup{ICC_Profile} and $del = 1, last; # must concatenate blocks of profile my $chunkNum = Get8u($segDataPt, 12); my $chunksTot = Get8u($segDataPt, 13); if (defined $iccChunksTotal) { # abort parsing ICC_Profile if the total chunk count is inconsistent if ($chunksTot != $iccChunksTotal and defined $iccChunkCount) { # an error because the accumulated profile data will be lost $self->Error('Inconsistent ICC_Profile chunk count', 1); undef $iccChunkCount; # abort ICC_Profile parsing undef $chunkNum; # avoid 2nd warning below ++$$self{CHANGED}; # we are deleting the bad chunks before this one } } else { $iccChunkCount = 0; $iccChunksTotal = $chunksTot; $self->Warn('ICC_Profile chunk count is zero') if !$chunksTot; } if (defined $iccChunkCount) { # save this chunk if (defined $iccChunk[$chunkNum]) { $self->Warn("Duplicate ICC_Profile chunk number $chunkNum"); $iccChunk[$chunkNum] .= substr($$segDataPt, 14); } else { $iccChunk[$chunkNum] = substr($$segDataPt, 14); } # continue accumulating chunks unless we have all of them next Marker unless ++$iccChunkCount >= $iccChunksTotal; undef $iccChunkCount; # prevent reprocessing $doneDir{ICC_Profile} = 1; # combine the ICC_Profile chunks my $icc_profile = ''; defined $_ and $icc_profile .= $_ foreach @iccChunk; undef @iccChunk; # free memory $segDataPt = \$icc_profile; $length = length $icc_profile; my $tagTablePtr = GetTagTable('Image::ExifTool::ICC_Profile::Main'); my %dirInfo = ( DataPt => $segDataPt, DataPos => $segPos + 14, DataLen => $length, DirStart => 0, DirLen => $length, Parent => $markerName, ); my $newData = $self->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $newData) { undef $$segDataPt; # free the old buffer $segDataPt = \$newData; } length $$segDataPt or $del = 1, last; # write as ICC multi-segment WriteMultiSegment($outfile, $marker, "ICC_PROFILE\0", $segDataPt, 'ICC') or $err = 1; undef $$segDataPt; next Marker; } elsif (defined $chunkNum) { $self->WarnOnce('Invalid or extraneous ICC_Profile chunk(s)'); # fall through to preserve this extra profile... } } elsif ($$segDataPt =~ /^FPXR\0/) { $segType = 'FPXR'; $$delGroup{FlashPix} and $del = 1; } elsif ($$segDataPt =~ /^MPF\0/) { $segType = 'MPF'; $$delGroup{MPF} and $del = 1; } } elsif ($marker == 0xe3) { # APP3 (Kodak Meta) if ($$segDataPt =~ /^(Meta|META|Exif)\0\0/) { $segType = 'Kodak Meta'; $$delGroup{Meta} and $del = 1, last; $doneDir{Meta} and $self->Warn('Multiple APP3 Meta segments'); $doneDir{Meta} = 1; last unless $$editDirs{Meta}; # rewrite Meta IFD as if this were a TIFF file in memory my %dirInfo = ( DataPt => $segDataPt, DataPos => -6, # (remember: relative to Base!) DirStart => 6, Base => $segPos + 6, Parent => $markerName, DirName => 'Meta', ); # write new data to memory my $tagTablePtr = GetTagTable('Image::ExifTool::Kodak::Meta'); my $buff = $self->WriteDirectory(\%dirInfo, $tagTablePtr, \&WriteTIFF); if (defined $buff) { # update segment with new data $$segDataPt = substr($$segDataPt,0,6) . $buff; } else { last Marker unless $self->Options('IgnoreMinorErrors'); $$self{CHANGED} = $oldChanged; # nothing changed } # delete segment if IFD contains no entries $del = 1 unless length($$segDataPt) > 6; } } elsif ($marker == 0xe5) { # APP5 (Ricoh RMETA) if ($$segDataPt =~ /^RMETA\0/) { $segType = 'Ricoh RMETA'; $$delGroup{RMETA} and $del = 1; } } elsif ($marker == 0xec) { # APP12 (Ducky) if ($$segDataPt =~ /^Ducky/) { $segType = 'Ducky'; $$delGroup{Ducky} and $del = 1, last; $doneDir{Ducky} and $self->Warn('Multiple APP12 Ducky segments'); $doneDir{Ducky} = 1; last unless $$editDirs{Ducky}; my $tagTablePtr = GetTagTable('Image::ExifTool::APP12::Ducky'); my %dirInfo = ( DataPt => $segDataPt, DataPos => $segPos, DataLen => $length, DirStart => 5, # directory starts after identifier DirLen => $length-5, Parent => $markerName, ); my $newData = $self->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $newData) { undef $$segDataPt; # free the old buffer # add header to new segment unless empty $newData = 'Ducky' . $newData if length $newData; $segDataPt = \$newData; } else { $$self{CHANGED} = $oldChanged; } $del = 1 unless length $$segDataPt; } } elsif ($marker == 0xed) { # APP13 (Photoshop) if ($$segDataPt =~ /^$psAPP13hdr/) { $segType = 'Photoshop'; # add this data to the combined data if it exists if (defined $combinedSegData) { $combinedSegData .= substr($$segDataPt,length($psAPP13hdr)); $segDataPt = \$combinedSegData; $length = length $combinedSegData; # update length } # peek ahead to see if the next segment is photoshop data too if ($dirOrder[0] eq 'Photoshop') { # initialize combined data if necessary $combinedSegData = $$segDataPt unless defined $combinedSegData; next Marker; # get the next segment to combine } if ($doneDir{Photoshop}) { $self->Warn('Multiple Photoshop records'); # only rewrite the first Photoshop segment when deleting this group # (to remove multiples when deleting and adding back in one step) $$delGroup{Photoshop} and $del = 1, last; } $doneDir{Photoshop} = 1; # process APP13 Photoshop record my $tagTablePtr = GetTagTable('Image::ExifTool::Photoshop::Main'); my %dirInfo = ( DataPt => $segDataPt, DataPos => $segPos, DataLen => $length, DirStart => 14, # directory starts after identifier DirLen => $length-14, Parent => $markerName, ); my $newData = $self->WriteDirectory(\%dirInfo, $tagTablePtr); if (defined $newData) { undef $$segDataPt; # free the old buffer $segDataPt = \$newData; } else { $$self{CHANGED} = $oldChanged; } length $$segDataPt or $del = 1, last; # write as multi-segment WriteMultiSegment($outfile, $marker, $psAPP13hdr, $segDataPt) or $err = 1; undef $combinedSegData; undef $$segDataPt; next Marker; } } elsif ($marker == 0xee) { # APP14 (Adobe) if ($$segDataPt =~ /^Adobe/) { $segType = 'Adobe'; # delete it and replace it later if editing if ($$delGroup{Adobe} or $$editDirs{Adobe}) { $del = 1; undef $doneDir{Adobe}; # so we can add it back again above } } } elsif ($marker == 0xfe) { # COM (JPEG comment) my $newComment; unless ($doneDir{COM}) { $doneDir{COM} = 1; unless ($$delGroup{File} and $$delGroup{File} != 2) { my $tagInfo = $Image::ExifTool::Extra{Comment}; my $nvHash = $self->GetNewValueHash($tagInfo); my $val = $segData; $val =~ s/\0+$//; # allow for stupid software that adds NULL terminator if ($self->IsOverwriting($nvHash, $val) or $$delGroup{File}) { $newComment = $self->GetNewValue($nvHash); } else { delete $$editDirs{COM}; # we aren't editing COM after all last; } } } $self->VerboseValue('- Comment', $$segDataPt); if (defined $newComment and length $newComment) { # write out the comments $self->VerboseValue('+ Comment', $newComment); WriteMultiSegment($outfile, 0xfe, '', \$newComment) or $err = 1; } else { $verbose and print $out " Deleting COM segment\n"; } ++$$self{CHANGED}; # increment the changed flag undef $segDataPt; # don't write existing comment } last; # didn't want to loop anyway } # delete necessary segments (including unknown segments if deleting all) if ($del or ($$delGroup{'*'} and not $segType and $marker>=0xe0 and $marker<=0xef)) { $segType = 'unknown' unless $segType; $verbose and print $out " Deleting $markerName $segType segment\n"; ++$$self{CHANGED}; next Marker; } # write out this segment if $segDataPt is still defined if (defined $segDataPt and defined $$segDataPt) { # write the data for this record (the data could have been # modified, so recalculate the length word) my $size = length($$segDataPt); if ($size > $maxSegmentLen) { $segType or $segType = 'Unknown'; $self->Error("$segType $markerName segment too large! ($size bytes)"); $err = 1; } else { $s = pack('n', length($$segDataPt) + 2); Write($outfile, $hdr, $s, $$segDataPt) or $err = 1; } undef $$segDataPt; # free the buffer undef $segDataPt; } } # make sure the ICC_Profile was complete $self->Error('Incomplete ICC_Profile record', 1) if defined $iccChunkCount; pop @$path if @$path > $pn; # if oldOutfile is still set, there was an error copying the JPEG $oldOutfile and return 0; if ($rtnVal) { # add any new trailers we are creating my $trailPt = $self->AddNewTrailers(); Write($outfile, $$trailPt) or $err = 1 if $trailPt; } # set return value to -1 if we only had a write error $rtnVal = -1 if $rtnVal and $err; if ($creatingEXV and $rtnVal > 0 and not $$self{CHANGED}) { $self->Error('Nothing written'); $rtnVal = -1; } return $rtnVal; } #------------------------------------------------------------------------------ # Validate an image for writing # Inputs: 0) ExifTool object reference, 1) raw value reference # Returns: error string or undef on success sub CheckImage($$) { my ($self, $valPtr) = @_; if (length($$valPtr) and $$valPtr!~/^\xff\xd8/ and not $self->Options('IgnoreMinorErrors')) { return '[minor] Not a valid image'; } return undef; } #------------------------------------------------------------------------------ # check a value for validity # Inputs: 0) value reference, 1) format string, 2) optional count # Returns: error string, or undef on success # Notes: May modify value (if a count is specified for a string, it is null-padded # to the specified length, and floating point values are rounded to integer if required) sub CheckValue($$;$) { my ($valPtr, $format, $count) = @_; my (@vals, $val, $n); if ($format eq 'string' or $format eq 'undef') { return undef unless $count and $count > 0; my $len = length($$valPtr); if ($format eq 'string') { $len >= $count and return 'String too long'; } else { $len > $count and return 'Data too long'; } if ($len < $count) { $$valPtr .= "\0" x ($count - $len); } return undef; } if ($count and $count != 1) { @vals = split(' ',$$valPtr); $count < 0 and ($count = @vals or return undef); } else { $count = 1; @vals = ( $$valPtr ); } if (@vals != $count) { my $str = @vals > $count ? 'Too many' : 'Not enough'; return "$str values specified ($count required)"; } for ($n=0; $n<$count; ++$n) { $val = shift @vals; if ($format =~ /^int/) { # make sure the value is integer unless (IsInt($val)) { if (IsHex($val)) { $val = $$valPtr = hex($val); } else { # round single floating point values to the nearest integer return 'Not an integer' unless IsFloat($val) and $count == 1; $val = $$valPtr = int($val + ($val < 0 ? -0.5 : 0.5)); } } my $rng = $intRange{$format} or return "Bad int format: $format"; return "Value below $format minimum" if $val < $$rng[0]; # (allow 0xfeedfeed code as value for 16-bit pointers) return "Value above $format maximum" if $val > $$rng[1] and $val != 0xfeedfeed; } elsif ($format =~ /^rational/ or $format eq 'float' or $format eq 'double') { # make sure the value is a valid floating point number unless (IsFloat($val)) { # allow 'inf', 'undef' and fractional rational values if ($format =~ /^rational/) { next if $val eq 'inf' or $val eq 'undef'; if ($val =~ m{^([-+]?\d+)/(\d+)$}) { next unless $1 < 0 and $format =~ /u$/; return 'Must be an unsigned rational'; } } return 'Not a floating point number'; } if ($format =~ /^rational\d+u$/ and $val < 0) { return 'Must be a positive number'; } } } return undef; # success! } #------------------------------------------------------------------------------ # check new value for binary data block # Inputs: 0) ExifTool object ref, 1) tagInfo hash ref, 2) raw value ref # Returns: error string or undef (and may modify value) on success sub CheckBinaryData($$$) { my ($self, $tagInfo, $valPtr) = @_; my $format = $$tagInfo{Format}; unless ($format) { my $table = $$tagInfo{Table}; if ($table and $$table{FORMAT}) { $format = $$table{FORMAT}; } else { # use default 'int8u' unless specified $format = 'int8u'; } } my $count; if ($format =~ /(.*)\[(.*)\]/) { $format = $1; $count = $2; # can't evaluate $count now because we don't know $size yet undef $count if $count =~ /\$size/; } return CheckValue($valPtr, $format, $count); } #------------------------------------------------------------------------------ # Rename a file (with patch for Windows Unicode file names, and other problem) # Inputs: 0) ExifTool ref, 1) old name, 2) new name # Returns: true on success sub Rename($$$) { my ($self, $old, $new) = @_; my ($result, $try, $winUni); if ($self->EncodeFileName($old)) { $self->EncodeFileName($new, 1); $winUni = 1; } elsif ($self->EncodeFileName($new)) { $old = $_[1]; $self->EncodeFileName($old, 1); $winUni = 1; } for (;;) { if ($winUni) { $result = eval { Win32API::File::MoveFileExW($old, $new, Win32API::File::MOVEFILE_REPLACE_EXISTING() | Win32API::File::MOVEFILE_COPY_ALLOWED()) }; } else { $result = rename($old, $new); } last if $result or $^O ne 'MSWin32'; # keep trying for up to 0.5 seconds # (patch for Windows denial-of-service susceptibility) $try = ($try || 1) + 1; last if $try > 50; select(undef,undef,undef,0.01); # sleep for 0.01 sec } return $result; } #------------------------------------------------------------------------------ # Delete a file (with patch for Windows Unicode file names) # Inputs: 0) ExifTool ref, 1-N) names of files to delete # Returns: number of files deleted sub Unlink($@) { my $self = shift; my $result = 0; while (@_) { my $file = shift; if ($self->EncodeFileName($file)) { ++$result if eval { Win32API::File::DeleteFileW($file) }; } else { ++$result if unlink $file; } } return $result; } #------------------------------------------------------------------------------ # Set file times (Unix seconds since the epoch) # Inputs: 0) ExifTool ref, 1) file name or ref, 2) access time, 3) modification time, # 4) inode change or creation time (or undef for any time to avoid setting) # Returns: 1 on success, 0 on error my $k32SetFileTime; sub SetFileTime($$;$$$) { my ($self, $file, $atime, $mtime, $ctime) = @_; # open file by name if necessary unless (ref $file) { local *FH; $self->Open(\*FH, $file, '+<') or $self->Warn("SetFileTime error for '$file'"), return 0; $file = *FH; # (not \*FH, so *FH will be kept open until $file goes out of scope) } # on Windows, try to work around incorrect file times when daylight saving time is in effect if ($^O eq 'MSWin32') { if (not eval { require Win32::API }) { $self->WarnOnce('Install Win32::API for proper handling of Windows file times'); } elsif (not eval { require Win32API::File }) { $self->WarnOnce('Install Win32API::File for proper handling of Windows file times'); } else { # get Win32 handle, needed for SetFileTime my $win32Handle = eval { Win32API::File::GetOsFHandle($file) }; unless ($win32Handle) { $self->Warn("Win32API::File::GetOsFHandle returned invalid handle"); return 0; } # convert Unix seconds to FILETIME structs my $time; foreach $time ($atime, $mtime, $ctime) { # set to NULL if not defined (i.e. do not change) defined $time or $time = 0, next; # convert to 100 ns intervals since 0:00 UTC Jan 1, 1601 # (89 leap years between 1601 and 1970) my $wt = ($time + (((1970-1601)*365+89)*24*3600)) * 1e7; my $hi = int($wt / 4294967296); $time = pack 'LL', int($wt - $hi * 4294967296), $hi; # pack FILETIME struct } unless ($k32SetFileTime) { return 0 if defined $k32SetFileTime; $k32SetFileTime = new Win32::API('KERNEL32', 'SetFileTime', 'NPPP', 'I'); unless ($k32SetFileTime) { $self->Warn('Error calling Win32::API::SetFileTime'); $k32SetFileTime = 0; return 0; } } unless ($k32SetFileTime->Call($win32Handle, $ctime, $atime, $mtime)) { $self->Warn("Win32::API::SetFileTime returned " . Win32::GetLastError()); return 0; } return 1; } } # other os (or Windows fallback) return utime($atime, $mtime, $file) if defined $atime and defined $mtime; return 1; # (nothing to do) } #------------------------------------------------------------------------------ # Copy data block from RAF to output file in max 64kB chunks # Inputs: 0) RAF ref, 1) outfile ref, 2) block size # Returns: 1 on success, 0 on read error, undef on write error sub CopyBlock($$$) { my ($raf, $outfile, $size) = @_; my $buff; for (;;) { last unless $size > 0; my $n = $size > 65536 ? 65536 : $size; $raf->Read($buff, $n) == $n or return 0; Write($outfile, $buff) or return undef; $size -= $n; } return 1; } #------------------------------------------------------------------------------ # copy image data from one file to another # Inputs: 0) ExifTool object reference # 1) reference to list of image data [ position, size, pad bytes ] # 2) output file ref # Returns: true on success sub CopyImageData($$$) { my ($self, $imageDataBlocks, $outfile) = @_; my $raf = $$self{RAF}; my ($dataBlock, $err); my $num = @$imageDataBlocks; $self->VPrint(0, " Copying $num image data blocks\n") if $num; foreach $dataBlock (@$imageDataBlocks) { my ($pos, $size, $pad) = @$dataBlock; $raf->Seek($pos, 0) or $err = 'read', last; my $result = CopyBlock($raf, $outfile, $size); $result or $err = defined $result ? 'read' : 'writ'; # pad if necessary Write($outfile, "\0" x $pad) or $err = 'writ' if $pad; last if $err; } if ($err) { $self->Error("Error ${err}ing image data"); return 0; } return 1; } #------------------------------------------------------------------------------ # write to binary data block # Inputs: 0) ExifTool object ref, 1) source dirInfo ref, 2) tag table ref # Returns: Binary data block or undefined on error sub WriteBinaryData($$$) { my ($self, $dirInfo, $tagTablePtr) = @_; $self or return 1; # allow dummy access to autoload this package # get default format ('int8u' unless specified) my $dataPt = $$dirInfo{DataPt} or return undef; my $defaultFormat = $$tagTablePtr{FORMAT} || 'int8u'; my $increment = FormatSize($defaultFormat); unless ($increment) { warn "Unknown format $defaultFormat\n"; return undef; } # extract data members first if necessary my @varOffsets; if ($$tagTablePtr{DATAMEMBER}) { $$dirInfo{DataMember} = $$tagTablePtr{DATAMEMBER}; $$dirInfo{VarFormatData} = \@varOffsets; $self->ProcessBinaryData($dirInfo, $tagTablePtr); delete $$dirInfo{DataMember}; delete $$dirInfo{VarFormatData}; } my $dirStart = $$dirInfo{DirStart} || 0; my $dirLen = $$dirInfo{DirLen} || length($$dataPt) - $dirStart; my $newData = substr($$dataPt, $dirStart, $dirLen) or return undef; my $dirName = $$dirInfo{DirName}; my $varSize = 0; my @varInfo = @varOffsets; my $tagInfo; $dataPt = \$newData; foreach $tagInfo ($self->GetNewTagInfoList($tagTablePtr)) { my $tagID = $$tagInfo{TagID}; # evaluate conditional tags now if necessary if (ref $$tagTablePtr{$tagID} eq 'ARRAY' or $$tagInfo{Condition}) { my $writeInfo = $self->GetTagInfo($tagTablePtr, $tagID); next unless $writeInfo and $writeInfo eq $tagInfo; } # add offsets for variable-sized tags if necessary my $varFmt; while (@varInfo and $varInfo[0][0] < $tagID) { $varSize = $varInfo[0][1]; # get accumulated variable size shift @varInfo; } my $count = 1; my $format = $$tagInfo{Format}; my $entry = int($tagID) * $increment + $varSize; # relative offset of this entry if ($format) { if ($format =~ /(.*)\[(.*)\]/) { $format = $1; $count = $2; my $size = $dirLen; # used in eval # evaluate count to allow count to be based on previous values #### eval Format size ($size, $self) - NOTE: %val not supported for writing $count = eval $count; $@ and warn($@), next; } elsif ($format eq 'string') { # string with no specified count runs to end of block $count = ($dirLen > $entry) ? $dirLen - $entry : 0; } } else { $format = $defaultFormat; } # read/write using variable format if changed in Hook $format = $varInfo[0][2] if @varInfo and $varInfo[0][0] == $tagID; my $val = ReadValue($dataPt, $entry, $format, $count, $dirLen-$entry); next unless defined $val; my $nvHash = $self->GetNewValueHash($tagInfo, $$self{CUR_WRITE_GROUP}); next unless $self->IsOverwriting($nvHash, $val); my $newVal = $self->GetNewValue($nvHash); next unless defined $newVal; # can't delete from a binary table # only write masked bits if specified my $mask = $$tagInfo{Mask}; $newVal = ($newVal & $mask) | ($val & ~$mask) if defined $mask; # set the size if ($$tagInfo{DataTag} and not $$tagInfo{IsOffset}) { warn 'Internal error' unless $newVal == 0xfeedfeed; my $data = $self->GetNewValue($$tagInfo{DataTag}); $newVal = length($data) if defined $data; my $format = $$tagInfo{Format} || $$tagTablePtr{FORMAT} || 'int32u'; if ($format =~ /^int16/ and $newVal > 0xffff) { $self->Error("$$tagInfo{DataTag} is too large (64 kB max. for this file)"); } } my $rtnVal = WriteValue($newVal, $format, $count, $dataPt, $entry); if (defined $rtnVal) { $self->VerboseValue("- $dirName:$$tagInfo{Name}", $val); $self->VerboseValue("+ $dirName:$$tagInfo{Name}", $newVal); ++$$self{CHANGED}; } } # add necessary fixups for any offsets if ($$tagTablePtr{IS_OFFSET} and $$dirInfo{Fixup}) { $varSize = 0; @varInfo = @varOffsets; my $fixup = $$dirInfo{Fixup}; my $tagID; foreach $tagID (@{$$tagTablePtr{IS_OFFSET}}) { $tagInfo = $self->GetTagInfo($tagTablePtr, $tagID) or next; while (@varInfo and $varInfo[0][0] < $tagID) { $varSize = $varInfo[0][1]; shift @varInfo; } my $entry = $tagID * $increment + $varSize; # (no offset to dirStart for new dir data) next unless $entry <= $dirLen - 4; # (Ricoh has 16-bit preview image offsets, so can't just assume int32u) my $format = $$tagInfo{Format} || $$tagTablePtr{FORMAT} || 'int32u'; my $offset = ReadValue($dataPt, $entry, $format, 1, $dirLen-$entry); # ignore if offset is zero (eg. Ricoh DNG uses this to indicate no preview) next unless $offset; $fixup->AddFixup($entry, $$tagInfo{DataTag}, $format); # handle the preview image now if this is a JPEG file next unless $$self{FILE_TYPE} eq 'JPEG' and $$tagInfo{DataTag} and $$tagInfo{DataTag} eq 'PreviewImage' and defined $$tagInfo{OffsetPair}; # NOTE: here we assume there are no var-sized tags between the # OffsetPair tags. If this ever becomes possible we must recalculate # $varSize for the OffsetPair tag here! $entry = $$tagInfo{OffsetPair} * $increment + $varSize; my $size = ReadValue($dataPt, $entry, $format, 1, $dirLen-$entry); my $previewInfo = $$self{PREVIEW_INFO}; $previewInfo or $previewInfo = $$self{PREVIEW_INFO} = { Fixup => new Image::ExifTool::Fixup, }; # set flag indicating we are using short pointers $$previewInfo{IsShort} = 1 unless $format eq 'int32u'; $$previewInfo{Absolute} = 1 if $$tagInfo{IsOffset} and $$tagInfo{IsOffset} eq '3'; # get the value of the Composite::PreviewImage tag $$previewInfo{Data} = $self->GetNewValue($Image::ExifTool::Composite{PreviewImage}); unless (defined $$previewInfo{Data}) { if ($offset >= 0 and $offset + $size <= $$dirInfo{DataLen}) { $$previewInfo{Data} = substr(${$$dirInfo{DataPt}},$offset,$size); } else { $$previewInfo{Data} = 'LOAD_PREVIEW'; # flag to load preview later } } } } # write any necessary SubDirectories if ($$tagTablePtr{IS_SUBDIR}) { $varSize = 0; @varInfo = @varOffsets; my $tagID; foreach $tagID (@{$$tagTablePtr{IS_SUBDIR}}) { my $tagInfo = $self->GetTagInfo($tagTablePtr, $tagID); next unless defined $tagInfo; while (@varInfo and $varInfo[0][0] < $tagID) { $varSize = $varInfo[0][1]; shift @varInfo; } my $entry = int($tagID) * $increment + $varSize; last if $entry >= $dirLen; # get value for Condition if necessary unless ($tagInfo) { my $more = $dirLen - $entry; $more = 128 if $more > 128; my $v = substr($newData, $entry, $more); $tagInfo = $self->GetTagInfo($tagTablePtr, $tagID, \$v); next unless $tagInfo; } next unless $$tagInfo{SubDirectory}; # (just to be safe) my %subdirInfo = ( DataPt => \$newData, DirStart => $entry ); my $subTablePtr = GetTagTable($$tagInfo{SubDirectory}{TagTable}); my $dat = $self->WriteDirectory(\%subdirInfo, $subTablePtr); substr($newData, $entry) = $dat if defined $dat and length $dat; } } return $newData; } #------------------------------------------------------------------------------ # Write TIFF as a directory # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: New directory data or undefined on error sub WriteTIFF($$$) { my ($self, $dirInfo, $tagTablePtr) = @_; my $buff = ''; $$dirInfo{OutFile} = \$buff; return $buff if $self->ProcessTIFF($dirInfo, $tagTablePtr) > 0; return undef; } 1; # end __END__ =head1 NAME Image::ExifTool::Writer.pl - ExifTool routines for writing meta information =head1 SYNOPSIS These routines are autoloaded by Image::ExifTool when required. =head1 DESCRIPTION This module contains ExifTool write routines and other infrequently used routines. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool> =cut ���������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/WriteXMP.pl�������������������������������������������������000644 �000765 �000024 �00000164075 12642461341 021740� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: WriteXMP.pl # # Description: Write XMP meta information # # Revisions: 12/19/2004 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::XMP; use strict; use vars qw(%specialStruct %dateTimeInfo %stdXlatNS); use Image::ExifTool qw(:DataAccess :Utils); sub CheckXMP($$$); sub CaptureXMP($$$;$); sub SetPropertyPath($$;$$$$); my $debug = 0; my $numPadLines = 24; # number of blank padding lines # when writing extended XMP, resources bigger than this get placed in their own # rdf:Description so they can be moved to the extended segments if necessary my $newDescThresh = 10240; # 10 kB # individual resources and namespaces to place last in separate rdf:Description's # so they can be moved to extended XMP segments if required (see Oct. 2008 XMP spec) my %extendedRes = ( 'photoshop:History' => 1, 'xap:Thumbnails' => 1, 'xmp:Thumbnails' => 1, 'crs' => 1, 'crss' => 1, ); my $rdfDesc = 'rdf:Description'; # # packet/xmp/rdf headers and trailers # my $pktOpen = "<?xpacket begin='\xef\xbb\xbf' id='W5M0MpCehiHzreSzNTczkc9d'?>\n"; my $xmlOpen = "<?xml version='1.0' encoding='UTF-8'?>\n"; my $xmpOpenPrefix = "<x:xmpmeta xmlns:x='$nsURI{x}'"; my $rdfOpen = "<rdf:RDF xmlns:rdf='$nsURI{rdf}'>\n"; my $rdfClose = "</rdf:RDF>\n"; my $xmpClose = "</x:xmpmeta>\n"; my $pktCloseW = "<?xpacket end='w'?>"; # writable by default my $pktCloseR = "<?xpacket end='r'?>"; #------------------------------------------------------------------------------ # Get XMP opening tag (and set x:xmptk appropriately) # Inputs: 0) ExifTool object ref # Returns: x:xmpmeta opening tag sub XMPOpen($) { my $et = shift; my $nv = $$et{NEW_VALUE}{$Image::ExifTool::XMP::x{xmptk}}; my $tk; if (defined $nv) { $tk = $et->GetNewValue($nv); $et->VerboseValue(($tk ? '+' : '-') . ' XMP-x:XMPToolkit', $tk); ++$$et{CHANGED}; } else { $tk = "Image::ExifTool $Image::ExifTool::VERSION"; } my $str = $tk ? (" x:xmptk='" . EscapeXML($tk) . "'") : ''; return "$xmpOpenPrefix$str>\n"; } #------------------------------------------------------------------------------ # Validate XMP packet and set read or read/write mode # Inputs: 0) XMP data reference, 1) 'r' = read only, 'w' or undef = read/write # Returns: true if XMP is good (and adds packet header/trailer if necessary) sub ValidateXMP($;$) { my ($xmpPt, $mode) = @_; $$xmpPt =~ s/^\s*<!--.*?-->\s*//s; # remove leading comment if it exists unless ($$xmpPt =~ /^\0*<\0*\?\0*x\0*p\0*a\0*c\0*k\0*e\0*t/) { return '' unless $$xmpPt =~ /^<x(mp)?:x[ma]pmeta/; # add required xpacket header/trailer $$xmpPt = $pktOpen . $$xmpPt . $pktCloseW; } $mode = 'w' unless $mode; my $end = substr($$xmpPt, -32, 32); # check for proper xpacket trailer and set r/w mode if necessary return '' unless $end =~ s/(e\0*n\0*d\0*=\0*['"]\0*)([rw])(\0*['"]\0*\?\0*>)/$1$mode$3/; substr($$xmpPt, -32, 32) = $end if $2 ne $mode; return 1; } #------------------------------------------------------------------------------ # Check XMP date values for validity and format accordingly # Inputs: 1) date string # Returns: XMP date/time string (or undef on error) sub FormatXMPDate($) { my $val = shift; my ($y, $m, $d, $t, $tz); if ($val =~ /(\d{4}):(\d{2}):(\d{2}) (\d{2}:\d{2}(?::\d{2}(?:\.\d*)?)?)(.*)/) { ($y, $m, $d, $t, $tz) = ($1, $2, $3, $4, $5); $val = "$y-$m-${d}T$t"; } elsif ($val =~ /^\s*\d{4}(:\d{2}){0,2}\s*$/) { # this is just a date (YYYY, YYYY-mm or YYYY-mm-dd) $val =~ tr/:/-/; } elsif ($val =~ /^\s*(\d{2}:\d{2}(?::\d{2}(?:\.\d*)?)?)(.*)\s*$/) { # this is just a time ($t, $tz) = ($1, $2); $val = $t; } else { return undef; } if ($tz) { $tz =~ /^(Z|[+-]\d{2}:\d{2})$/ or return undef; $val .= $tz; } return $val; } #------------------------------------------------------------------------------ # Check XMP values for validity and format accordingly # Inputs: 0) ExifTool object ref, 1) tagInfo hash ref, 2) raw value ref # Returns: error string or undef (and may change value) on success # Note: copies structured information to avoid conflicts with calling code sub CheckXMP($$$) { my ($et, $tagInfo, $valPtr) = @_; if ($$tagInfo{Struct}) { require 'Image/ExifTool/XMPStruct.pl'; my ($item, $err, $w, $warn); unless (ref $$valPtr) { ($$valPtr, $warn) = InflateStruct($valPtr); # expect a structure HASH ref or ARRAY of structures unless (ref $$valPtr) { $$valPtr eq '' and $$valPtr = { }, return undef; # allow empty structures return 'Improperly formed structure'; } } if (ref $$valPtr eq 'ARRAY') { return 'Not a list tag' unless $$tagInfo{List}; my @copy = ( @{$$valPtr} ); # copy the list for ExifTool to use $$valPtr = \@copy; # return the copy foreach $item (@copy) { unless (ref $item eq 'HASH') { ($item, $w) = InflateStruct(\$item); # deserialize structure $w and $warn = $w; next if ref $item eq 'HASH'; $err = 'Improperly formed structure'; last; } ($item, $err) = CheckStruct($et, $item, $$tagInfo{Struct}); last if $err; } } else { ($$valPtr, $err) = CheckStruct($et, $$valPtr, $$tagInfo{Struct}); } $warn and $$et{CHECK_WARN} = $warn; return $err; } my $format = $$tagInfo{Writable}; # (if no format specified, value is a simple string) if (not $format or $format eq 'string' or $format eq 'lang-alt') { # convert value to UTF8 if necessary if ($$et{OPTIONS}{Charset} ne 'UTF8') { if ($$valPtr =~ /[\x80-\xff]/) { # convert from Charset to UTF-8 $$valPtr = $et->Encode($$valPtr,'UTF8'); } } else { # translate invalid XML characters to "." $$valPtr =~ tr/\0-\x08\x0b\x0c\x0e-\x1f/./; # fix any malformed UTF-8 characters if (FixUTF8($valPtr) and not $$et{WarnBadUTF8}) { $et->Warn('Malformed UTF-8 character(s)'); $$et{WarnBadUTF8} = 1; } } return undef; # success } if ($format eq 'rational' or $format eq 'real') { # make sure the value is a valid floating point number unless (Image::ExifTool::IsFloat($$valPtr) or # allow 'inf' and 'undef' rational values ($format eq 'rational' and ($$valPtr eq 'inf' or $$valPtr eq 'undef' or Image::ExifTool::IsRational($$valPtr)))) { return 'Not a floating point number'; } if ($format eq 'rational') { $$valPtr = join('/', Image::ExifTool::Rationalize($$valPtr)); } } elsif ($format eq 'integer') { # make sure the value is integer if (Image::ExifTool::IsInt($$valPtr)) { # no conversion required (converting to 'int' would remove leading '+') } elsif (Image::ExifTool::IsHex($$valPtr)) { $$valPtr = hex($$valPtr); } else { return 'Not an integer'; } } elsif ($format eq 'date') { my $newDate = FormatXMPDate($$valPtr); return "Invalid date/time (use YYYY:mm:dd HH:MM:SS[.ss][+/-HH:MM|Z])" unless $newDate; $$valPtr = $newDate; } elsif ($format eq 'boolean') { if (not $$valPtr or $$valPtr =~ /false/i or $$valPtr =~ /^no$/i) { $$valPtr = 'False'; } else { $$valPtr = 'True'; } } elsif ($format eq '1') { # this is the entire XMP data block return 'Invalid XMP data' unless ValidateXMP($valPtr); } else { return "Unknown XMP format: $format"; } return undef; # success! } #------------------------------------------------------------------------------ # Get PropertyPath for specified tagInfo # Inputs: 0) tagInfo reference # Returns: PropertyPath string sub GetPropertyPath($) { my $tagInfo = shift; SetPropertyPath($$tagInfo{Table}, $$tagInfo{TagID}) unless $$tagInfo{PropertyPath}; return $$tagInfo{PropertyPath}; } #------------------------------------------------------------------------------ # Set PropertyPath for specified tag (also for associated flattened tags and structure elements) # Inputs: 0) tagTable reference, 1) tagID, 2) tagID of parent structure, # 3) structure definition ref (or undef), 4) property list up to this point (or undef), # 5) flag set if any containing structure has a TYPE # Notes: also generates flattened tags if they don't already exist sub SetPropertyPath($$;$$$$) { my ($tagTablePtr, $tagID, $parentID, $structPtr, $propList, $isType) = @_; my $table = $structPtr || $tagTablePtr; my $tagInfo = $$table{$tagID}; my $flatInfo; return if ref($tagInfo) ne 'HASH'; # (shouldn't happen) if ($structPtr) { my $flatID = $parentID . ucfirst($tagID); $flatInfo = $$tagTablePtr{$flatID}; if ($flatInfo) { return if $$flatInfo{PropertyPath}; } else { # flattened tag doesn't exist, so create it now # (could happen if we were just writing a structure) $flatInfo = { Name => ucfirst($flatID), Flat => 1 }; AddTagToTable($tagTablePtr, $flatID, $flatInfo); } $isType = 1 if $$structPtr{TYPE}; } else { # don't override existing main table entry if already set by a Struct return if $$tagInfo{PropertyPath}; # use property path from original tagInfo if this is an alternate-language tag my $srcInfo = $$tagInfo{SrcTagInfo}; $$tagInfo{PropertyPath} = GetPropertyPath($srcInfo) if $srcInfo; return if $$tagInfo{PropertyPath}; # set property path for all flattened tags in structure if necessary if ($$tagInfo{RootTagInfo}) { SetPropertyPath($tagTablePtr, $$tagInfo{RootTagInfo}{TagID}); return if $$tagInfo{PropertyPath}; warn "Internal Error: Didn't set path from root for $tagID\n"; } } my $ns = $$tagInfo{Namespace} || $$table{NAMESPACE}; $ns or warn("No namespace for $tagID\n"), return; my (@propList, $listType); $propList and @propList = @$propList; push @propList, "$ns:$tagID"; # lang-alt lists are handled specially, signified by Writable='lang-alt' if ($$tagInfo{Writable} and $$tagInfo{Writable} eq 'lang-alt') { $listType = 'Alt'; # remove language code from property path if it exists $propList[-1] =~ s/-$$tagInfo{LangCode}$// if $$tagInfo{LangCode}; # handle lists of lang-alt lists (eg. XMP-plus:Custom tags) if ($$tagInfo{List} and $$tagInfo{List} ne '1') { push @propList, "rdf:$$tagInfo{List}", 'rdf:li 10'; } } else { $listType = $$tagInfo{List}; } # add required properties if this is a list push @propList, "rdf:$listType", 'rdf:li 10' if $listType and $listType ne '1'; # set PropertyPath for all flattened tags of this structure if necessary # (note: don't do this for variable-namespace structures (undef NAMESPACE)) my $strTable = $$tagInfo{Struct}; if ($strTable and $$strTable{NAMESPACE} and not ($parentID and # must test NoSubStruct flag to avoid infinite recursion (($$tagTablePtr{$parentID} and $$tagTablePtr{$parentID}{NoSubStruct}) or length $parentID > 500))) # avoid deep recursion { # make sure the structure namespace has been registered # (user-defined namespaces may not have been) RegisterNamespace($strTable) if ref $$strTable{NAMESPACE}; my $tag; foreach $tag (keys %$strTable) { # ignore special fields and any lang-alt fields we may have added next if $specialStruct{$tag} or $$strTable{$tag}{LangCode}; my $fullID = $parentID ? $parentID . ucfirst($tagID) : $tagID; SetPropertyPath($tagTablePtr, $tag, $fullID, $strTable, \@propList, $isType); } } # if this was a structure field and not a normal tag, # we set PropertyPath in the corresponding flattened tag if ($structPtr) { $tagInfo = $flatInfo; # set StructType flag if any containing structure has a TYPE $$tagInfo{StructType} = 1 if $isType; } # set property path for tagInfo in main table $$tagInfo{PropertyPath} = join '/', @propList; } #------------------------------------------------------------------------------ # Save XMP property name/value for rewriting # Inputs: 0) ExifTool object reference # 1) reference to array of XMP property path (last is current property) # 2) property value, 3) optional reference to hash of property attributes sub CaptureXMP($$$;$) { my ($et, $propList, $val, $attrs) = @_; return unless defined $val and @$propList > 2; if ($$propList[0] =~ /^x:x[ma]pmeta$/ and $$propList[1] eq 'rdf:RDF' and $$propList[2] =~ /$rdfDesc( |$)/) { # no properties to save yet if this is just the description return unless @$propList > 3; # ignore empty list properties if ($$propList[-1] =~ /^rdf:(Bag|Seq|Alt)$/) { $et->Warn("Ignored empty $$propList[-1] list for $$propList[-2]", 1); return; } # save information about this property my $capture = $$et{XMP_CAPTURE}; my $path = join('/', @$propList[3..$#$propList]); if (defined $$capture{$path}) { $$et{XMP_ERROR} = "Duplicate XMP property: $path"; } else { $$capture{$path} = [$val, $attrs || { }]; } } elsif ($$propList[0] eq 'rdf:RDF' and $$propList[1] =~ /$rdfDesc( |$)/) { # set flag so we don't write x:xmpmeta element $$et{XMP_NO_XMPMETA} = 1; # add missing x:xmpmeta element and try again unshift @$propList, 'x:xmpmeta'; CaptureXMP($et, $propList, $val, $attrs); } else { $$et{XMP_ERROR} = 'Improperly enclosed XMP property: ' . join('/',@$propList); } } #------------------------------------------------------------------------------ # Save information about resource containing blank node with nodeID # Inputs: 0) reference to blank node information hash # 1) reference to property list # 2) property value # 3) [optional] reference to attribute hash # Notes: This routine and ProcessBlankInfo() are also used for reading information, but # are uncommon so are put in this file to reduce compile time for the common case sub SaveBlankInfo($$$;$) { my ($blankInfo, $propListPt, $val, $attrs) = @_; my $propPath = join '/', @$propListPt; my @ids = ($propPath =~ m{ #([^ /]*)}g); my $id; # split the property path at each nodeID foreach $id (@ids) { my ($pre, $prop, $post) = ($propPath =~ m{^(.*?)/([^/]*) #$id((/.*)?)$}); defined $pre or warn("internal error parsing nodeID's"), next; # the element with the nodeID should be in the path prefix for subject # nodes and the path suffix for object nodes unless ($prop eq $rdfDesc) { if ($post) { $post = "/$prop$post"; } else { $pre = "$pre/$prop"; } } $$blankInfo{Prop}{$id}{Pre}{$pre} = 1; if ((defined $post and length $post) or (defined $val and length $val)) { # save the property value and attributes for each unique path suffix $$blankInfo{Prop}{$id}{Post}{$post} = [ $val, $attrs, $propPath ]; } } } #------------------------------------------------------------------------------ # Process blank-node information # Inputs: 0) ExifTool object ref, 1) tag table ref, # 2) blank node information hash ref, 3) flag set for writing sub ProcessBlankInfo($$$;$) { my ($et, $tagTablePtr, $blankInfo, $isWriting) = @_; $et->VPrint(1, " [Elements with nodeID set:]\n") unless $isWriting; my ($id, $pre, $post); # handle each nodeID separately foreach $id (sort keys %{$$blankInfo{Prop}}) { my $path = $$blankInfo{Prop}{$id}; # flag all resource names so we can warn later if some are unused my %unused; foreach $post (keys %{$$path{Post}}) { $unused{$post} = 1; } # combine property paths for all possible paths through this node foreach $pre (sort keys %{$$path{Pre}}) { # there will be no description for the object of a blank node next unless $pre =~ m{/$rdfDesc/}; foreach $post (sort keys %{$$path{Post}}) { my @propList = split m{/}, "$pre$post"; my ($val, $attrs) = @{$$path{Post}{$post}}; if ($isWriting) { CaptureXMP($et, \@propList, $val, $attrs); } else { FoundXMP($et, $tagTablePtr, \@propList, $val); } delete $unused{$post}; } } # save information from unused properties (if RDF is malformed like f-spot output) if (%unused) { $et->Options('Verbose') and $et->Warn('An XMP resource is about nothing'); foreach $post (sort keys %unused) { my ($val, $attrs, $propPath) = @{$$path{Post}{$post}}; my @propList = split m{/}, $propPath; if ($isWriting) { CaptureXMP($et, \@propList, $val, $attrs); } else { FoundXMP($et, $tagTablePtr, \@propList, $val); } } } } } #------------------------------------------------------------------------------ # Convert path to namespace used in file (this is a pain, but the XMP # spec only suggests 'preferred' namespace prefixes...) # Inputs: 0) ExifTool object reference, 1) property path # Returns: conforming property path sub ConformPathToNamespace($$) { my ($et, $path) = @_; my @propList = split('/',$path); my $nsUsed = $$et{XMP_NS}; my $prop; foreach $prop (@propList) { my ($ns, $tag) = $prop =~ /(.+?):(.*)/; next if $$nsUsed{$ns}; my $uri = $nsURI{$ns}; unless ($uri) { warn "No URI for namepace prefix $ns!\n"; next; } my $ns2; foreach $ns2 (keys %$nsUsed) { next unless $$nsUsed{$ns2} eq $uri; # use the existing namespace prefix instead of ours $prop = "$ns2:$tag"; last; } } return join('/',@propList); } #------------------------------------------------------------------------------ # Add necessary rdf:type element when writing structure # Inputs: 0) ExifTool ref, 1) tag table ref, 2) capture hash ref, 3) path string # 4) optional base path (already conformed to namespace) for elements in # variable-namespace structures sub AddStructType($$$$;$) { my ($et, $tagTablePtr, $capture, $path, $basePath) = @_; my @props = split '/', $path; my %doneID; for (;;) { pop @props; last unless @props; my $tagID = GetXMPTagID(\@props); next if $doneID{$tagID}; $doneID{$tagID} = 1; my $tagInfo = $$tagTablePtr{$tagID}; last unless ref $tagInfo eq 'HASH'; if ($$tagInfo{Struct}) { my $type = $$tagInfo{Struct}{TYPE}; if ($type) { my $pat = $$tagInfo{PropertyPath}; $pat or warn("Missing PropertyPath in AddStructType\n"), last; $pat = ConformPathToNamespace($et, $pat); $pat =~ s/ \d+/ \\d\+/g; $path =~ /^($pat)/ or warn("Wrong path in AddStructType\n"), last; my $p = $1 . '/rdf:type'; $p = "$basePath/$p" if $basePath; $$capture{$p} = [ '', { 'rdf:resource' => $type } ] unless $$capture{$p}; } } last unless $$tagInfo{StructType}; } } #------------------------------------------------------------------------------ # Utility routine to encode data in base64 # Inputs: 0) binary data string, 1) flag to avoid inserting newlines # Returns: base64-encoded string sub EncodeBase64($;$) { # encode the data in 45-byte chunks my $chunkSize = 45; my $len = length $_[0]; my $str = ''; my $i; for ($i=0; $i<$len; $i+=$chunkSize) { my $n = $len - $i; $n = $chunkSize if $n > $chunkSize; # add uuencoded data to output (minus size byte, but including trailing newline) $str .= substr(pack('u', substr($_[0], $i, $n)), 1); } # convert to base64 (remember that "\0" may be encoded as ' ' or '`') $str =~ tr/` -_/AA-Za-z0-9+\//; # convert pad characters at the end (remember to account for trailing newline) my $pad = 3 - ($len % 3); substr($str, -$pad-1, $pad) = ('=' x $pad) if $pad < 3; $str =~ tr/\n//d if $_[1]; # remove newlines if specified return $str; } #------------------------------------------------------------------------------ # sort tagInfo hash references by tag name sub ByTagName { return $$a{Name} cmp $$b{Name}; } #------------------------------------------------------------------------------ # sort alphabetically, but with rdf:type first in the structure sub TypeFirst { if ($a =~ /rdf:type$/) { return substr($a, 0, -8) cmp $b unless $b =~ /rdf:type$/; } elsif ($b =~ /rdf:type$/) { return $a cmp substr($b, 0, -8); } return $a cmp $b; } #------------------------------------------------------------------------------ # Limit size of XMP # Inputs: 0) ExifTool object ref, 1) XMP data ref (written up to start of $rdfClose), # 2) max XMP len, 3) rdf:about string, 4) list ref for description start offsets # 5) start offset of first description recommended for extended XMP # Returns: 0) extended XMP ref, 1) GUID and updates $$dataPt (or undef if no extended XMP) sub LimitXMPSize($$$$$$) { my ($et, $dataPt, $maxLen, $about, $startPt, $extStart) = @_; # return straight away if it isn't too big return undef if length($$dataPt) < $maxLen; push @$startPt, length($$dataPt); # add end offset to list my $newData = substr($$dataPt, 0, $$startPt[0]); my $guid = '0' x 32; # write the required xmpNote:HasExtendedXMP property $newData .= "\n <$rdfDesc rdf:about='$about'\n xmlns:xmpNote='$nsURI{xmpNote}'>\n" . " <xmpNote:HasExtendedXMP>$guid</xmpNote:HasExtendedXMP>\n" . " </$rdfDesc>\n"; my ($i, %descSize, $start); # calculate all description block sizes for ($i=1; $i<@$startPt; ++$i) { $descSize{$$startPt[$i-1]} = $$startPt[$i] - $$startPt[$i-1]; } pop @$startPt; # remove end offset # write the descriptions from smallest to largest, as many in main XMP as possible my @descStart = sort { $descSize{$a} <=> $descSize{$b} } @$startPt; my $extData = XMPOpen($et) . $rdfOpen; for ($i=0; $i<2; ++$i) { foreach $start (@descStart) { # write main XMP first (in order of size), then extended XMP afterwards (in order) next if $i xor $start >= $extStart; my $pt = (length($newData) + $descSize{$start} > $maxLen) ? \$extData : \$newData; $$pt .= substr($$dataPt, $start, $descSize{$start}); } } $extData .= $rdfClose . $xmpClose; # close rdf:RDF and x:xmpmeta # calculate GUID from MD5 of extended XMP data if (eval { require Digest::MD5 }) { $guid = uc unpack('H*', Digest::MD5::md5($extData)); $newData =~ s/0{32}/$guid/; # update GUID in main XMP segment } $et->VerboseValue('+ XMP-xmpNote:HasExtendedXMP', $guid); $$dataPt = $newData; # return main XMP block return (\$extData, $guid); # return extended XMP and its GUID } #------------------------------------------------------------------------------ # Write XMP information # Inputs: 0) ExifTool object reference, 1) source dirInfo reference, # 2) [optional] tag table reference # Returns: with tag table: new XMP data (may be empty if no XMP data) or undef on error # without tag table: 1 on success, 0 if not valid XMP file, -1 on write error # Notes: May set dirInfo InPlace flag to rewrite with specified DirLen # May set dirInfo ReadOnly flag to write as read-only XMP ('r' mode and no padding) # May set dirInfo Compact flag to force compact (drops 2kB of padding) # May set dirInfo MaxDataLen to limit output data length -- this causes ExtendedXMP # and ExtendedGUID to be returned in dirInfo if extended XMP was required sub WriteXMP($$;$) { my ($et, $dirInfo, $tagTablePtr) = @_; $et or return 1; # allow dummy access to autoload this package my $dataPt = $$dirInfo{DataPt}; my (%capture, %nsUsed, $xmpErr, $tagInfo, $about); my $changed = 0; my $xmpFile = (not $tagTablePtr); # this is an XMP data file if no $tagTablePtr # prefer XMP over other metadata formats in some types of files my $preferred = $xmpFile || ($$et{PreferredGroup} and $$et{PreferredGroup} eq 'XMP'); my $verbose = $et->Options('Verbose'); my $dirLen = $$dirInfo{DirLen}; $dirLen = length($$dataPt) if not defined $dirLen and $dataPt; # # extract existing XMP information into %capture hash # # define hash in ExifTool object to capture XMP information (also causes # CaptureXMP() instead of FoundXMP() to be called from ParseXMPElement()) # # The %capture hash is keyed on the complete property path beginning after # rdf:RDF/rdf:Description/. The values are array references with the # following entries: 0) value, 1) attribute hash reference. $$et{XMP_CAPTURE} = \%capture; $$et{XMP_NS} = \%nsUsed; delete $$et{XMP_NO_XMPMETA}; delete $$et{XMP_NO_XPACKET}; delete $$et{XMP_IS_XML}; delete $$et{XMP_IS_SVG}; if ($xmpFile or $dirLen) { delete $$et{XMP_ERROR}; delete $$et{XMP_ABOUT}; # extract all existing XMP information (to the XMP_CAPTURE hash) my $success = ProcessXMP($et, $dirInfo, $tagTablePtr); # don't continue if there is nothing to parse or if we had a parsing error unless ($success and not $$et{XMP_ERROR}) { my $err = $$et{XMP_ERROR} || 'Error parsing XMP'; # may ignore this error only if we were successful if ($xmpFile) { my $raf = $$dirInfo{RAF}; # allow empty XMP data so we can create something from nothing if ($success or not $raf->Seek(0,2) or $raf->Tell()) { # no error message if not an XMP file return 0 unless $$et{XMP_ERROR}; if ($et->Error($err, $success)) { delete $$et{XMP_CAPTURE}; return 0; } } } else { if ($et->Warn($err, $success)) { delete $$et{XMP_CAPTURE}; return undef; } } } $tagInfo = $Image::ExifTool::XMP::rdf{about}; if (defined $$et{NEW_VALUE}{$tagInfo}) { $about = $et->GetNewValue($$et{NEW_VALUE}{$tagInfo}) || ''; if ($verbose > 1) { my $wasAbout = $$et{XMP_ABOUT}; $et->VerboseValue('- XMP-rdf:About', UnescapeXML($wasAbout)) if defined $wasAbout; $et->VerboseValue('+ XMP-rdf:About', $about); } $about = EscapeXML($about); # must escape for XML ++$changed; } else { $about = $$et{XMP_ABOUT} || ''; } delete $$et{XMP_ERROR}; delete $$et{XMP_ABOUT}; } else { $about = ''; } # # handle writing XMP as a block to XMP file # if ($xmpFile) { $tagInfo = $Image::ExifTool::Extra{XMP}; if ($tagInfo and $$et{NEW_VALUE}{$tagInfo}) { my $rtnVal = 1; my $newVal = $et->GetNewValue($$et{NEW_VALUE}{$tagInfo}); if (defined $newVal and length $newVal) { $et->VPrint(0, " Writing XMP as a block\n"); ++$$et{CHANGED}; Write($$dirInfo{OutFile}, $newVal) or $rtnVal = -1; } delete $$et{XMP_CAPTURE}; return $rtnVal; } } # # delete groups in family 1 if requested # if (%{$$et{DEL_GROUP}} and (grep /^XMP-.+$/, keys %{$$et{DEL_GROUP}} or # (logic is a bit more complex for group names in exiftool XML files) grep m{^http://ns.exiftool.ca/}, values %nsUsed)) { my $del = $$et{DEL_GROUP}; my $path; foreach $path (keys %capture) { my @propList = split('/',$path); # get property list my ($tag, $ns) = GetXMPTagID(\@propList); # translate namespace if necessary $ns = $stdXlatNS{$ns} if $stdXlatNS{$ns}; my ($grp, @g); # no "XMP-" added to most groups in exiftool RDF/XML output file if ($nsUsed{$ns} and (@g = ($nsUsed{$ns} =~ m{^http://ns.exiftool.ca/(.*?)/(.*?)/}))) { if ($g[1] =~ /^\d/) { $grp = "XML-$g[0]"; #(all XML-* groups stored as uppercase DEL_GROUP key) my $ucg = uc $grp; next unless $$del{$ucg} or ($$del{'XML-*'} and not $$del{"-$ucg"}); } else { $grp = $g[1]; next unless $$del{$grp} or ($$del{$g[0]} and not $$del{"-$grp"}); } } else { $grp = "XMP-$ns"; my $ucg = uc $grp; next unless $$del{$ucg} or ($$del{'XMP-*'} and not $$del{"-$ucg"}); } $et->VerboseValue("- $grp:$tag", $capture{$path}->[0]); delete $capture{$path}; ++$changed; } } # delete HasExtendedXMP tag (we create it as needed) my $hasExtTag = 'xmpNote:HasExtendedXMP'; if ($capture{$hasExtTag}) { $et->VerboseValue("- XMP-$hasExtTag", $capture{$hasExtTag}->[0]); delete $capture{$hasExtTag}; } # set $xmpOpen now to to handle xmptk tag first my $xmpOpen = $$et{XMP_NO_XMPMETA} ? '' : XMPOpen($et); # # add, delete or change information as specified # # get hash of all information we want to change # (sorted by tag name so alternate languages come last, but with structures # first so flattened tags may be used to override individual structure elements) my @tagInfoList; foreach $tagInfo (sort ByTagName $et->GetNewTagInfoList()) { next unless $et->GetGroup($tagInfo, 0) eq 'XMP'; next if $$tagInfo{Name} eq 'XMP'; # (ignore full XMP block if we didn't write it already) if ($$tagInfo{Struct}) { unshift @tagInfoList, $tagInfo; } else { push @tagInfoList, $tagInfo; } } foreach $tagInfo (@tagInfoList) { my $tag = $$tagInfo{TagID}; my $path = GetPropertyPath($tagInfo); unless ($path) { $et->Warn("Can't write XMP:$tag (namespace unknown)"); next; } # skip tags that were handled specially if ($path eq 'rdf:about' or $path eq 'x:xmptk') { ++$changed; next; } my $isStruct = $$tagInfo{Struct}; # change our property path namespace prefixes to conform # to the ones used in this file $path = ConformPathToNamespace($et, $path); # find existing property my $cap = $capture{$path}; # MicrosoftPhoto screws up the case of some tags, and some other software, # including Adobe software, has been known to write the wrong list type or # not properly enclose properties in a list, so we check for this until ($cap) { # find and fix all incorrect property names if this is a structure or a flattened tag my @fixInfo; if ($isStruct or defined $$tagInfo{Flat}) { # get tagInfo for all containing (possibly nested) structures my @props = split '/', $path; my $tbl = $$tagInfo{Table}; while (@props) { my $info = $$tbl{GetXMPTagID(\@props)}; unshift @fixInfo, $info if ref $info eq 'HASH' and $$info{Struct} and (not @fixInfo or $fixInfo[0] ne $info); pop @props; } $et->WarnOnce("Error finding parent structure for $$tagInfo{Name}") unless @fixInfo; } # fix property path for this tag (last in the @fixInfo list) push @fixInfo, $tagInfo unless @fixInfo and $isStruct; # start from outermost containing structure, fixing incorrect list types, etc, # finally fixing the actual tag properties after all containing structures my $err; while (@fixInfo) { my $fixInfo = shift @fixInfo; my $fixPath = ConformPathToNamespace($et, GetPropertyPath($fixInfo)); my $regex = quotemeta($fixPath); $regex =~ s/ \d+/ \\d\+/g; # match any list index my $ok = $regex; my ($ok2, $match, $i, @fixed, %fixed, $fixed); # check for incorrect list types if ($regex =~ s{\\/rdf\\:(Bag|Seq|Alt)\\/}{/rdf:(Bag|Seq|Alt)/}g) { # also look for missing bottom-level list if ($regex =~ s{/rdf:\(Bag\|Seq\|Alt\)\/rdf\\:li\\ \\d\+$}{}) { $regex .= '(/.*)?' unless @fixInfo; } } elsif (not @fixInfo) { $ok2 = $regex; # check for properties in lists that shouldn't be (ref forum4325) $regex .= '(/rdf:(Bag|Seq|Alt)/rdf:li \d+)?'; } if (@fixInfo) { $regex .= '(/.*)?'; $ok .= '(/.*)?'; } my @matches = sort grep m{^$regex$}i, keys %capture; last unless @matches; if ($matches[0] =~ m{^$ok$}) { unless (@fixInfo) { $path = $matches[0]; $cap = $capture{$path}; } next; } # needs fixing... my @fixProps = split '/', $fixPath; foreach $match (@matches) { my @matchProps = split '/', $match; # remove superfluous list properties if necessary $#matchProps = $#fixProps if $ok2 and $#matchProps > $#fixProps; for ($i=0; $i<@fixProps; ++$i) { defined $matchProps[$i] or $matchProps[$i] = $fixProps[$i], next; next if $matchProps[$i] =~ / \d+$/ or $matchProps[$i] eq $fixProps[$i]; $matchProps[$i] = $fixProps[$i]; } $fixed = join '/', @matchProps; $err = 1 if $fixed{$fixed} or ($capture{$fixed} and $match ne $fixed); push @fixed, $fixed; $fixed{$fixed} = 1; } my $tg = $et->GetGroup($fixInfo, 1) . ':' . $$fixInfo{Name}; my $wrn = lc($fixed[0]) eq lc($matches[0]) ? 'tag ID case' : 'list type'; if ($err) { $et->Warn("Incorrect $wrn for existing $tg (not changed)"); } else { # fix the incorrect property paths for all values of this tag my $didFix; foreach $fixed (@fixed) { my $match = shift @matches; next if $fixed eq $match; $capture{$fixed} = $capture{$match}; delete $capture{$match}; # remove xml:lang attribute from incorrect lang-alt list if necessary delete $capture{$fixed}[1]{'xml:lang'} if $ok2 and $match !~ /^$ok2$/; $didFix = 1; } $cap = $capture{$path} || $capture{$fixed[0]} unless @fixInfo; if ($didFix) { $et->Warn("Fixed incorrect $wrn for $tg", 1); ++$changed; } } } last; } my $nvHash = $et->GetNewValueHash($tagInfo); my $overwrite = $et->IsOverwriting($nvHash); my $writable = $$tagInfo{Writable} || ''; my (%attrs, $deleted, $added, $existed); # delete existing entry if necessary if ($isStruct) { require 'Image/ExifTool/XMPStruct.pl'; ($deleted, $added, $existed) = DeleteStruct($et, \%capture, \$path, $nvHash, \$changed); next unless $deleted or $added or $et->IsOverwriting($nvHash); next if $existed and $$nvHash{CreateOnly}; } elsif ($cap) { next if $$nvHash{CreateOnly}; # (necessary for List-type tags) # take attributes from old values if they exist %attrs = %{$$cap[1]}; if ($overwrite) { my ($delPath, $oldLang, $delLang, $addLang, @matchingPaths); # check to see if this is an indexed list item if ($path =~ / /) { my $pp; ($pp = $path) =~ s/ \d+/ \\d\+/g; @matchingPaths = sort grep(/^$pp$/, keys %capture); } else { push @matchingPaths, $path; } foreach $path (@matchingPaths) { my ($val, $attrs) = @{$capture{$path}}; if ($writable eq 'lang-alt') { unless (defined $addLang) { # add to lang-alt list by default if creating this tag from scratch $addLang = $$nvHash{IsCreating} ? 1 : 0; } # get original language code (lc for comparisons) $oldLang = lc($$attrs{'xml:lang'} || 'x-default'); if ($overwrite < 0) { my $newLang = lc($$tagInfo{LangCode} || 'x-default'); next unless $oldLang eq $newLang; # only add new tag if we are overwriting this one # (note: this won't match if original XML contains CDATA!) $addLang = $et->IsOverwriting($nvHash, UnescapeXML($val)); next unless $addLang; } # delete all if deleting "x-default" and writing with no LangCode # (XMP spec requires x-default language exist and be first in list) if ($oldLang eq 'x-default' and not $$tagInfo{LangCode}) { $delLang = 1; # delete all languages $overwrite = 1; # force overwrite } elsif ($$tagInfo{LangCode} and not $delLang) { # only overwrite specified language next unless lc($$tagInfo{LangCode}) eq $oldLang; } } elsif ($overwrite < 0) { # only overwrite specific values if ($$nvHash{Shift}) { # values to be shifted are checked (hence re-formatted) late, # so we must un-format the to-be-shifted value for IsOverwriting() my $fmt = $$tagInfo{Writable} || ''; if ($fmt eq 'rational') { ConvertRational($val); } elsif ($fmt eq 'date') { $val = ConvertXMPDate($val); } } # (note: this won't match if original XML contains CDATA!) next unless $et->IsOverwriting($nvHash, UnescapeXML($val)); } if ($verbose > 1) { my $grp = $et->GetGroup($tagInfo, 1); my $tagName = $$tagInfo{Name}; $tagName =~ s/-$$tagInfo{LangCode}$// if $$tagInfo{LangCode}; $tagName .= '-' . $$attrs{'xml:lang'} if $$attrs{'xml:lang'}; $et->VerboseValue("- $grp:$tagName", $val); } # save attributes and path from first deleted property # so we can replace it exactly unless ($delPath) { %attrs = %$attrs; $delPath = $path; } # delete this tag delete $capture{$path}; ++$changed; # delete rdf:type tag if it is the only thing left in this structure if ($path =~ /^(.*)\// and $capture{"$1/rdf:type"}) { my $pp = $1; my @a = grep /^\Q$pp\E\/[^\/]+/, keys %capture; delete $capture{"$pp/rdf:type"} if @a == 1; } } next unless $delPath or $$tagInfo{List} or $addLang; if ($delPath) { $path = $delPath; $deleted = 1; } else { # don't change tag if we couldn't delete old copy # unless this is a list or an lang-alt tag next unless $$tagInfo{List} or $oldLang; # (match last index to put in same lang-alt list for Bag of lang-alt items) $path =~ m/.* (\d+)/g or warn "Internal error: no list index!\n", next; $added = $1; } } else { # we are never overwriting, so we must be adding to a list # match the last index unless this is a list of lang-alt lists my $pat = $writable eq 'lang-alt' ? '.* (\d+)(.*? \d+)' : '.* (\d+)'; if ($path =~ m/$pat/g) { $added = $1; # set position to end of matching index number pos($path) = pos($path) - length($2) if $2; } } if (defined $added) { my $len = length $added; my $pos = pos($path) - $len; my $nxt = substr($added, 1) + 1; # always insert x-default lang-alt entry first (as per XMP spec) # (need to test $overwrite because this will be a new lang-alt entry otherwise) if ($overwrite and $writable eq 'lang-alt' and (not $$tagInfo{LangCode} or $$tagInfo{LangCode} eq 'x-default')) { my $saveCap = $capture{$path}; for (;;) { my $p = $path; substr($p, $pos, $len) = length($nxt) . $nxt; # increment index in the path of the existing item my $nextCap = $capture{$p}; $capture{$p} = $saveCap; last unless $nextCap; $saveCap = $nextCap; ++$nxt; } } else { # add to end of list for (;;) { my $try = length($nxt) . $nxt; substr($path, $pos, $len) = $try; last unless $capture{$path}; $len = length $try; ++$nxt; } } } } # check to see if we want to create this tag # (create non-avoided tags in XMP data files by default) my $isCreating = ($$nvHash{IsCreating} or (($isStruct or ($preferred and not $$tagInfo{Avoid} and not defined $$nvHash{Shift})) and not $$nvHash{EditOnly})); # don't add new values unless... # ...tag existed before and was deleted, or we added it to a list next unless $deleted or defined $added or # ...tag didn't exist before and we are creating it (not $cap and $isCreating); # get list of new values (all done if no new values specified) my @newValues = $et->GetNewValue($nvHash) or next; # set language attribute for lang-alt lists $attrs{'xml:lang'} = $$tagInfo{LangCode} || 'x-default' if $writable eq 'lang-alt'; # add new value(s) to %capture hash my $subIdx; for (;;) { my $newValue = shift @newValues; if ($isStruct) { ++$changed if AddNewStruct($et, $tagInfo, \%capture, $path, $newValue, $$tagInfo{Struct}); } else { $newValue = EscapeXML($newValue); for (;;) { # (a cheap 'goto') if ($$tagInfo{Resource}) { # only store as a resource if it doesn't contain any illegal characters if ($newValue !~ /[^a-z0-9\:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=\.\-\_\~]/i) { $capture{$path} = [ '', { %attrs, 'rdf:resource' => $newValue } ]; last; } my $grp = $et->GetGroup($tagInfo, 1); $et->Warn("$grp:$$tagInfo{Name} written as a literal because value is not a valid URI", 1); # fall through to write as a string literal } delete $attrs{'rdf:resource'}; # (remove existing resource if necessary) $capture{$path} = [ $newValue, \%attrs ]; last; } if ($verbose > 1) { my $grp = $et->GetGroup($tagInfo, 1); $et->VerboseValue("+ $grp:$$tagInfo{Name}", $newValue); } ++$changed; # add rdf:type if necessary if ($$tagInfo{StructType}) { AddStructType($et, $$tagInfo{Table}, \%capture, $path); } } last unless @newValues; # match last index except for lang-alt items where we want to put each # item in a different lang-alt list (so match the 2nd-last for these) my $pat = $writable eq 'lang-alt' ? '.* (\d+)(.*? \d+)' : '.* (\d+)'; $path =~ m/$pat/g or warn("Internal error: no list index for $tag!\n"), next; my $idx = $1; my $len = length $1; my $pos = pos($path) - $len - ($2 ? length $2 : 0); # generate unique list sub-indices to store additional values in sequence if ($subIdx) { $idx = substr($idx, 0, -length($subIdx)); # remove old sub-index $subIdx = substr($subIdx, 1) + 1; $subIdx = length($subIdx) . $subIdx; } else { $subIdx = '10'; } substr($path, $pos, $len) = $idx . $subIdx; } # make sure any empty structures are deleted # (ExifTool shouldn't write these, but other software may) if (defined $$tagInfo{Flat}) { my $p = $path; while ($p =~ s/\/[^\/]+$//) { next unless $capture{$p}; # it is an error if this property has a value $et->Error("Improperly structured XMP ($p)",1) if $capture{$p}[0] =~ /\S/; delete $capture{$p}; # delete the (hopefully) empty structure } } } # remove the ExifTool members we created delete $$et{XMP_CAPTURE}; delete $$et{XMP_NS}; my $maxDataLen = $$dirInfo{MaxDataLen}; # get DataPt again because it may have been set by ProcessXMP $dataPt = $$dirInfo{DataPt}; # return now if we didn't change anything unless ($changed or ($maxDataLen and $dataPt and defined $$dataPt and length($$dataPt) > $maxDataLen)) { return undef unless $xmpFile; # just rewrite original XMP Write($$dirInfo{OutFile}, $$dataPt) or return -1 if $dataPt and defined $$dataPt; return 1; } # # write out the new XMP information (serialize it) # # start writing the XMP data my $newData = ''; if ($$et{XMP_NO_XPACKET}) { # write BOM if flag is set $newData .= "\xef\xbb\xbf" if $$et{XMP_NO_XPACKET} == 2; } else { $newData .= $pktOpen; } $newData .= $xmlOpen if $$et{XMP_IS_XML}; $newData .= $xmpOpen . $rdfOpen; # initialize current property path list my (@curPropList, @writeLast, @descStart, $extStart); my (%nsCur, $prop, $n, $path); my @pathList = sort TypeFirst keys %capture; # order properties to write large values last if we have a MaxDataLen limit if ($maxDataLen and @pathList) { my @pathTmp; my ($lastProp, $lastNS, $propSize) = ('', '', 0); my @pathLoop = (@pathList, ''); # add empty path to end of list for loop undef @pathList; foreach $path (@pathLoop) { $path =~ /^((\w*)[^\/]*)/; # get path element ($1) and ns ($2) if ($1 eq $lastProp) { push @pathTmp, $path; # accumulate all paths with same root } else { # put in list to write last if recommended or values are too large if ($extendedRes{$lastProp} or $extendedRes{$lastNS} or $propSize > $newDescThresh) { push @writeLast, @pathTmp; } else { push @pathList, @pathTmp; } last unless $path; # all done if we hit empty path @pathTmp = ( $path ); ($lastProp, $lastNS, $propSize) = ($1, $2, 0); } $propSize += length $capture{$path}->[0]; } } # write out all properties for (;;) { my (%nsNew, $newDesc); unless (@pathList) { last unless @writeLast; @pathList = @writeLast; undef @writeLast; $extStart = length $newData; $newDesc = 1; # start with a new description } $path = shift @pathList; my @propList = split('/',$path); # get property list # must open/close rdf:Description too unshift @propList, $rdfDesc; # make sure we have defined all necessary namespaces foreach $prop (@propList) { $prop =~ /(.*):/ or next; $1 eq 'rdf' and next; # rdf namespace already defined my $uri = $nsUsed{$1}; unless ($uri) { $uri = $nsURI{$1}; # we must have added a namespace $uri or $xmpErr = "Undefined XMP namespace: $1", next; } $nsNew{$1} = $uri; # need a new description if any new namespaces $newDesc = 1 unless $nsCur{$1}; } my $closeTo = 0; if ($newDesc) { # look forward to see if we will want to also open other namespaces # at this level (this is necessary to keep lists and structures from # being broken if a property introduces a new namespace; plus it # improves formatting) my ($path2, $ns2); foreach $path2 (@pathList) { my @ns2s = ($path2 =~ m{(?:^|/)([^/]+?):}g); my $opening = 0; foreach $ns2 (@ns2s) { next if $ns2 eq 'rdf'; $nsNew{$ns2} and ++$opening, next; last unless $opening; # get URI for this existing or new namespace my $uri = $nsUsed{$ns2} || $nsURI{$ns2} or last; $nsNew{$ns2} = $uri; # also open this namespace } last unless $opening; } } else { # find first property where the current path differs from the new path for ($closeTo=0; $closeTo<@curPropList; ++$closeTo) { last unless $closeTo < @propList; last unless $propList[$closeTo] eq $curPropList[$closeTo]; } } # close out properties down to the common base path while (@curPropList > $closeTo) { ($prop = pop @curPropList) =~ s/ .*//; $newData .= (' ' x scalar(@curPropList)) . " </$prop>\n"; } if ($newDesc) { # save rdf:Description start positions so we can reorder them if necessary push @descStart, length($newData) if $maxDataLen; # open the new description $prop = $rdfDesc; %nsCur = %nsNew; # save current namespaces $newData .= "\n <$prop rdf:about='$about'"; my @ns = sort keys %nsCur; # generate et:toolkit attribute if this is an exiftool RDF/XML output file if (@ns and $nsCur{$ns[0]} =~ m{^http://ns.exiftool.ca/}) { $newData .= "\n xmlns:et='http://ns.exiftool.ca/1.0/'" . " et:toolkit='Image::ExifTool $Image::ExifTool::VERSION'"; } foreach (@ns) { $newData .= "\n xmlns:$_='$nsCur{$_}'"; } $newData .= ">\n"; push @curPropList, $prop; } # loop over all values for this new property my ($val, $attrs) = @{$capture{$path}}; $debug and print "$path = $val\n"; # open new properties my ($attr, $dummy); for ($n=@curPropList; $n<$#propList; ++$n) { $prop = $propList[$n]; push @curPropList, $prop; # remove list index if it exists $prop =~ s/ .*//; $attr = ''; if ($prop ne $rdfDesc and ($propList[$n+1] !~ /^rdf:/ or ($propList[$n+1] eq 'rdf:type' and $n+1 == $#propList))) { # need parseType='Resource' to avoid new 'rdf:Description' $attr = " rdf:parseType='Resource'"; # check for empty structure if ($propList[$n+1] =~ /:~dummy~$/) { $newData .= (' ' x scalar(@curPropList)) . "<$prop$attr/>\n"; pop @curPropList; $dummy = 1; last; } } $newData .= (' ' x scalar(@curPropList)) . "<$prop$attr>\n"; } my $prop2 = pop @propList; # get new property name # add element unless it was a dummy structure field unless ($dummy or ($val eq '' and $prop2 =~ /:~dummy~$/)) { $prop2 =~ s/ .*//; # remove list index if it exists $newData .= (' ' x scalar(@curPropList)) . " <$prop2"; # write out attributes foreach $attr (sort keys %$attrs) { my $attrVal = $$attrs{$attr}; my $quot = ($attrVal =~ /'/) ? '"' : "'"; $newData .= " $attr=$quot$attrVal$quot"; } $newData .= length $val ? ">$val</$prop2>\n" : "/>\n"; } } # close off any open elements while ($prop = pop @curPropList) { $prop =~ s/ .*//; # remove list index if it exists $newData .= (' ' x scalar(@curPropList)) . " </$prop>\n"; } # limit XMP length and re-arrange if necessary to fit inside specified size my $compact = $$dirInfo{Compact} || $et->Options('Compact'); if ($maxDataLen) { # adjust maxDataLen to allow room for closing elements $maxDataLen -= length($rdfClose) + length($xmpClose) + length($pktCloseW); $extStart or $extStart = length $newData; my @rtn = LimitXMPSize($et, \$newData, $maxDataLen, $about, \@descStart, $extStart); # return extended XMP information in $dirInfo $$dirInfo{ExtendedXMP} = $rtn[0]; $$dirInfo{ExtendedGUID} = $rtn[1]; # compact if necessary to fit $compact = 1 if length($newData) + 101 * $numPadLines > $maxDataLen; } # # close out the XMP, clean up, and return our data # $newData .= $rdfClose; $newData .= $xmpClose unless $$et{XMP_NO_XMPMETA}; # remove the ExifTool members we created delete $$et{XMP_CAPTURE}; delete $$et{XMP_NS}; delete $$et{XMP_NO_XMPMETA}; # (the XMP standard recommends writing 2k-4k of white space before the # packet trailer, with a newline every 100 characters) unless ($$et{XMP_NO_XPACKET}) { my $pad = (' ' x 100) . "\n"; if ($$dirInfo{InPlace}) { # pad to specified DirLen my $len = length($newData) + length($pktCloseW); if ($len > $dirLen) { $et->Warn('Not enough room to edit XMP in place'); return undef; } my $num = int(($dirLen - $len) / length($pad)); if ($num) { $newData .= $pad x $num; $len += length($pad) * $num; } $len < $dirLen and $newData .= (' ' x ($dirLen - $len - 1)) . "\n"; } elsif (not $compact and not $xmpFile and not $$dirInfo{ReadOnly}) { $newData .= $pad x $numPadLines; } $newData .= ($$dirInfo{ReadOnly} ? $pktCloseR : $pktCloseW); } # return empty data if no properties exist and this is allowed unless (%capture or $xmpFile or $$dirInfo{InPlace} or $$dirInfo{NoDelete}) { $newData = ''; } if ($xmpErr) { if ($xmpFile) { $et->Error($xmpErr); return -1; } $et->Warn($xmpErr); return undef; } $$et{CHANGED} += $changed; $debug > 1 and $newData and print $newData,"\n"; return $newData unless $xmpFile; Write($$dirInfo{OutFile}, $newData) or return -1; return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::WriteXMP.pl - Write XMP meta information =head1 SYNOPSIS These routines are autoloaded by Image::ExifTool::XMP. =head1 DESCRIPTION This file contains routines to write XMP metadata. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::XMP(3pm)|Image::ExifTool::XMP>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/XMP.pm������������������������������������������������������000644 �000765 �000024 �00000501056 12642461342 020721� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: XMP.pm # # Description: Read XMP meta information # # Revisions: 11/25/2003 - P. Harvey Created # 10/28/2004 - P. Harvey Major overhaul to conform with XMP spec # 02/27/2005 - P. Harvey Also read UTF-16 and UTF-32 XMP # 08/30/2005 - P. Harvey Split tag tables into separate namespaces # 10/24/2005 - P. Harvey Added ability to parse .XMP files # 08/25/2006 - P. Harvey Added ability to handle blank nodes # 08/22/2007 - P. Harvey Added ability to handle alternate language tags # 09/26/2008 - P. Harvey Added Iptc4xmpExt tags (version 1.0 rev 2) # # References: 1) http://www.adobe.com/products/xmp/pdfs/xmpspec.pdf # 2) http://www.w3.org/TR/rdf-syntax-grammar/ (20040210) # 3) http://www.portfoliofaq.com/pfaq/v7mappings.htm # 4) http://www.iptc.org/IPTC4XMP/ # 5) http://creativecommons.org/technology/xmp # --> changed to http://wiki.creativecommons.org/Companion_File_metadata_specification (2007/12/21) # 6) http://www.optimasc.com/products/fileid/xmp-extensions.pdf # 7) Lou Salkind private communication # 8) http://partners.adobe.com/public/developer/en/xmp/sdk/XMPspecification.pdf # 9) http://www.w3.org/TR/SVG11/ # 10) http://www.adobe.com/devnet/xmp/pdfs/XMPSpecificationPart2.pdf (Oct 2008) # 11) http://www.extensis.com/en/support/kb_article.jsp?articleNumber=6102211 # 12) http://www.cipa.jp/std/documents/e/DC-010-2012_E.pdf # # Notes: - Property qualifiers are handled as if they were separate # properties (with no associated namespace). # # - Currently, there is no special treatment of the following # properties which could potentially affect the extracted # information: xml:base, rdf:parseType (note that parseType # Literal isn't allowed by the XMP spec). # # - The family 2 group names will be set to 'Unknown' for any XMP # tags not found in the XMP or Exif tag tables. #------------------------------------------------------------------------------ package Image::ExifTool::XMP; use strict; use vars qw($VERSION $AUTOLOAD @ISA @EXPORT_OK %stdXlatNS %nsURI %dateTimeInfo %xmpTableDefaults %specialStruct %sDimensions %sArea %sColorant); use Image::ExifTool qw(:Utils); use Image::ExifTool::Exif; require Exporter; $VERSION = '2.90'; @ISA = qw(Exporter); @EXPORT_OK = qw(EscapeXML UnescapeXML); sub ProcessXMP($$;$); sub WriteXMP($$;$); sub CheckXMP($$$); sub ParseXMPElement($$$;$$$$); sub DecodeBase64($); sub EncodeBase64($;$); sub SaveBlankInfo($$$;$); sub ProcessBlankInfo($$$;$); sub ValidateXMP($;$); sub UnescapeChar($$); sub AddFlattenedTags($;$$); sub FormatXMPDate($); sub ConvertRational($); sub ConvertRationalList($); # lookup for translating to ExifTool namespaces %stdXlatNS = ( # shorten ugly namespace prefixes 'Iptc4xmpCore' => 'iptcCore', 'Iptc4xmpExt' => 'iptcExt', 'photomechanic'=> 'photomech', 'MicrosoftPhoto' => 'microsoft', 'prismusagerights' => 'pur', 'GettyImagesGIFT' => 'getty', ); # translate ExifTool XMP family 1 group names to standard XMP namespace prefixes my %xmpNS = ( # shorten ugly namespace prefixes 'iptcCore' => 'Iptc4xmpCore', 'iptcExt' => 'Iptc4xmpExt', 'photomechanic'=> 'photomech', 'microsoft' => 'MicrosoftPhoto', 'gettyImages' => 'GettyImagesGIFT', # (prism changed their spec to now use 'pur') # 'pur' => 'prismusagerights', ); # Lookup to translate standard XMP namespace prefixes into URI's. This list # need not be complete, but it must contain an entry for each namespace prefix # (NAMESPACE) for writable tags in the XMP tables or in structures that doesn't # define a URI. Also, the namespace must be defined here for non-standard # namespace prefixes to be recognized. %nsURI = ( aux => 'http://ns.adobe.com/exif/1.0/aux/', album => 'http://ns.adobe.com/album/1.0/', cc => 'http://creativecommons.org/ns#', # changed 2007/12/21 - PH crs => 'http://ns.adobe.com/camera-raw-settings/1.0/', crss => 'http://ns.adobe.com/camera-raw-saved-settings/1.0/', dc => 'http://purl.org/dc/elements/1.1/', exif => 'http://ns.adobe.com/exif/1.0/', exifEX => 'http://cipa.jp/exif/1.0/', iX => 'http://ns.adobe.com/iX/1.0/', pdf => 'http://ns.adobe.com/pdf/1.3/', pdfx => 'http://ns.adobe.com/pdfx/1.3/', photoshop => 'http://ns.adobe.com/photoshop/1.0/', rdf => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', rdfs => 'http://www.w3.org/2000/01/rdf-schema#', stDim => 'http://ns.adobe.com/xap/1.0/sType/Dimensions#', stEvt => 'http://ns.adobe.com/xap/1.0/sType/ResourceEvent#', stFnt => 'http://ns.adobe.com/xap/1.0/sType/Font#', stJob => 'http://ns.adobe.com/xap/1.0/sType/Job#', stRef => 'http://ns.adobe.com/xap/1.0/sType/ResourceRef#', stVer => 'http://ns.adobe.com/xap/1.0/sType/Version#', stMfs => 'http://ns.adobe.com/xap/1.0/sType/ManifestItem#', tiff => 'http://ns.adobe.com/tiff/1.0/', 'x' => 'adobe:ns:meta/', xmpG => 'http://ns.adobe.com/xap/1.0/g/', xmpGImg => 'http://ns.adobe.com/xap/1.0/g/img/', xmp => 'http://ns.adobe.com/xap/1.0/', xmpBJ => 'http://ns.adobe.com/xap/1.0/bj/', xmpDM => 'http://ns.adobe.com/xmp/1.0/DynamicMedia/', xmpMM => 'http://ns.adobe.com/xap/1.0/mm/', xmpRights => 'http://ns.adobe.com/xap/1.0/rights/', xmpNote => 'http://ns.adobe.com/xmp/note/', xmpTPg => 'http://ns.adobe.com/xap/1.0/t/pg/', xmpidq => 'http://ns.adobe.com/xmp/Identifier/qual/1.0/', xmpPLUS => 'http://ns.adobe.com/xap/1.0/PLUS/', dex => 'http://ns.optimasc.com/dex/1.0/', mediapro => 'http://ns.iview-multimedia.com/mediapro/1.0/', expressionmedia => 'http://ns.microsoft.com/expressionmedia/1.0/', Iptc4xmpCore => 'http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/', Iptc4xmpExt => 'http://iptc.org/std/Iptc4xmpExt/2008-02-29/', MicrosoftPhoto => 'http://ns.microsoft.com/photo/1.0', MP1 => 'http://ns.microsoft.com/photo/1.1', #PH (MP1 is fabricated) MP => 'http://ns.microsoft.com/photo/1.2/', MPRI => 'http://ns.microsoft.com/photo/1.2/t/RegionInfo#', MPReg => 'http://ns.microsoft.com/photo/1.2/t/Region#', lr => 'http://ns.adobe.com/lightroom/1.0/', DICOM => 'http://ns.adobe.com/DICOM/', svg => 'http://www.w3.org/2000/svg', et => 'http://ns.exiftool.ca/1.0/', # # namespaces defined in XMP2.pl: # plus => 'http://ns.useplus.org/ldf/xmp/1.0/', # (prism recommendations from http://www.prismstandard.org/specifications/3.0/Image_Guide_3.0.htm) prism => 'http://prismstandard.org/namespaces/basic/2.0/', prl => 'http://prismstandard.org/namespaces/prl/2.1/', pur => 'http://prismstandard.org/namespaces/prismusagerights/2.1/', pmi => 'http://prismstandard.org/namespaces/pmi/2.2/', prm => 'http://prismstandard.org/namespaces/prm/3.0/', acdsee => 'http://ns.acdsee.com/iptc/1.0/', digiKam => 'http://www.digikam.org/ns/1.0/', swf => 'http://ns.adobe.com/swf/1.0', cell => 'http://developer.sonyericsson.com/cell/1.0/', aas => 'http://ns.apple.com/adjustment-settings/1.0/', 'mwg-rs' => 'http://www.metadataworkinggroup.com/schemas/regions/', 'mwg-kw' => 'http://www.metadataworkinggroup.com/schemas/keywords/', 'mwg-coll' => 'http://www.metadataworkinggroup.com/schemas/collections/', stArea => 'http://ns.adobe.com/xmp/sType/Area#', extensis => 'http://ns.extensis.com/extensis/1.0/', ics => 'http://ns.idimager.com/ics/1.0/', fpv => 'http://ns.fastpictureviewer.com/fpv/1.0/', creatorAtom=>'http://ns.adobe.com/creatorAtom/1.0/', 'apple-fi' => 'http://ns.apple.com/faceinfo/1.0/', GPano => 'http://ns.google.com/photos/1.0/panorama/', dwc => 'http://rs.tdwg.org/dwc/index.htm', GettyImagesGIFT => 'http://xmp.gettyimages.com/gift/1.0/', ); # build reverse namespace lookup my %uri2ns; { my $ns; foreach $ns (keys %nsURI) { $uri2ns{$nsURI{$ns}} = $ns; } } # conversions for GPS coordinates sub ToDegrees { require Image::ExifTool::GPS; Image::ExifTool::GPS::ToDegrees($_[0], 1); } my %latConv = ( ValueConv => \&ToDegrees, RawConv => 'require Image::ExifTool::GPS; $val', # to load Composite tags and routines ValueConvInv => q{ require Image::ExifTool::GPS; Image::ExifTool::GPS::ToDMS($self, $val, 2, "N"); }, PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', PrintConvInv => \&ToDegrees, ); my %longConv = ( ValueConv => \&ToDegrees, RawConv => 'require Image::ExifTool::GPS; $val', ValueConvInv => q{ require Image::ExifTool::GPS; Image::ExifTool::GPS::ToDMS($self, $val, 2, "E"); }, PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")', PrintConvInv => \&ToDegrees, ); %dateTimeInfo = ( # NOTE: Do NOT put "Groups" here because Groups hash must not be common! Writable => 'date', Shift => 'Time', PrintConv => '$self->ConvertDateTime($val)', PrintConvInv => '$self->InverseDateTime($val,undef,1)', ); # this conversion allows alternate language support for designated boolean tags my %boolConv = ( PrintConv => { OTHER => sub { # (inverse conversion is the same) my $val = shift; return 'False' if lc $val eq 'false'; return 'True' if lc $val eq 'true'; return $val; }, True => 'True', False => 'False', }, ); # XMP namespaces which we don't want to contribute to generated EXIF tag names # (Note: namespaces with non-standard prefixes aren't currently ignored) my %ignoreNamespace = ( 'x'=>1, rdf=>1, xmlns=>1, xml=>1, svg=>1, et=>1, office=>1 ); # XMP properties to ignore (set dynamically via dirInfo IgnoreProp) my %ignoreProp; # these are the attributes that we handle for properties that contain # sub-properties. Attributes for simple properties are easy, and we # just copy them over. These are harder since we don't store attributes # for properties without simple values. (maybe this will change...) # (special attributes are indicated by a list reference of tag information) my %recognizedAttrs = ( 'rdf:about' => [ 'Image::ExifTool::XMP::rdf', 'about', 'About' ], 'x:xmptk' => [ 'Image::ExifTool::XMP::x', 'xmptk', 'XMPToolkit' ], 'x:xaptk' => [ 'Image::ExifTool::XMP::x', 'xmptk', 'XMPToolkit' ], 'rdf:parseType' => 1, 'rdf:nodeID' => 1, 'et:toolkit' => 1, 'rdf:xmlns' => 1, # this is presumably the default namespace, which we currently ignore 'lastUpdate' => [ 'Image::ExifTool::XMP::XML', 'lastUpdate', 'LastUpdate' ], # found in XML from Sony ILCE-7S MP4 ); # special tags in structures below # NOTE: this lookup is duplicated in TagLookup.pm!! %specialStruct = ( STRUCT_NAME => 1, # [optional] name of structure NAMESPACE => 1, # [mandatory] namespace prefix used for fields of this structure NOTES => 1, # [optional] notes for documentation about this structure TYPE => 1, # [optional] rdf:type resource for struct (if used, the StructType flag # will be set automatically for all derived flattened tags when writing) ); # XMP structures (each structure is similar to a tag table so we can # recurse through them in SetPropertyPath() as if they were tag tables) # The main differences between structure field information and tagInfo hashes are: # 1) Field information hashes do not contain Name, Groups or Table entries, and # 2) The TagID entry is optional, and is used only if the key in the structure hash # is different from the TagID (currently only true for alternate language fields) # 3) Field information hashes support a additional "Namespace" property. my %sResourceRef = ( STRUCT_NAME => 'ResourceRef', NAMESPACE => 'stRef', documentID => { }, instanceID => { }, manager => { }, managerVariant => { }, manageTo => { }, manageUI => { }, renditionClass => { }, renditionParams => { }, versionID => { }, # added Oct 2008 alternatePaths => { List => 'Seq' }, filePath => { }, fromPart => { }, lastModifyDate => { %dateTimeInfo, Groups => { 2 => 'Time' } }, maskMarkers => { PrintConv => { All => 'All', None => 'None' } }, partMapping => { }, toPart => { }, # added May 2010 originalDocumentID => { }, # (undocumented property written by Adobe InDesign) ); my %sResourceEvent = ( STRUCT_NAME => 'ResourceEvent', NAMESPACE => 'stEvt', action => { }, instanceID => { }, parameters => { }, softwareAgent => { }, when => { %dateTimeInfo, Groups => { 2 => 'Time' } }, # added Oct 2008 changed => { }, ); my %sJobRef = ( STRUCT_NAME => 'JobRef', NAMESPACE => 'stJob', id => { }, name => { }, url => { }, ); my %sVersion = ( STRUCT_NAME => 'Version', NAMESPACE => 'stVer', comments => { }, event => { Struct => \%sResourceEvent }, modifier => { }, modifyDate => { %dateTimeInfo, Groups => { 2 => 'Time' } }, version => { }, ); my %sThumbnail = ( STRUCT_NAME => 'Thumbnail', NAMESPACE => 'xmpGImg', height => { Writable => 'integer' }, width => { Writable => 'integer' }, 'format' => { }, image => { Avoid => 1, Groups => { 2 => 'Preview' }, ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)', ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)', }, ); my %sPageInfo = ( STRUCT_NAME => 'PageInfo', NAMESPACE => 'xmpGImg', PageNumber => { Writable => 'integer', Namespace => 'xmpTPg' }, # override default namespace height => { Writable => 'integer' }, width => { Writable => 'integer' }, 'format' => { }, image => { Groups => { 2 => 'Preview' }, ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)', ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)', }, ); #my %sIdentifierScheme = ( # NAMESPACE => 'xmpidq', # Scheme => { }, # qualifier for xmp:Identifier only #); %sDimensions = ( STRUCT_NAME => 'Dimensions', NAMESPACE => 'stDim', w => { Writable => 'real' }, h => { Writable => 'real' }, unit => { }, ); %sArea = ( STRUCT_NAME => 'Area', NAMESPACE => 'stArea', 'x' => { Writable => 'real' }, 'y' => { Writable => 'real' }, w => { Writable => 'real' }, h => { Writable => 'real' }, d => { Writable => 'real' }, unit => { }, ); %sColorant = ( STRUCT_NAME => 'Colorant', NAMESPACE => 'xmpG', swatchName => { }, mode => { PrintConv => { CMYK=>'CMYK', RGB=>'RGB', LAB=>'Lab' } }, # note: do not implement closed choice for "type" because Adobe can't # get the case right: spec. says "PROCESS" but Indesign writes "Process" type => { }, cyan => { Writable => 'real' }, magenta => { Writable => 'real' }, yellow => { Writable => 'real' }, black => { Writable => 'real' }, red => { Writable => 'integer' }, green => { Writable => 'integer' }, blue => { Writable => 'integer' }, L => { Writable => 'real' }, A => { Writable => 'integer' }, B => { Writable => 'integer' }, # 'tint' observed in INDD sample - PH tint => { Writable => 'integer', Notes => 'not part of 2010 XMP specification' }, ); my %sFont = ( STRUCT_NAME => 'Font', NAMESPACE => 'stFnt', fontName => { }, fontFamily => { }, fontFace => { }, fontType => { }, versionString => { }, composite => { Writable => 'boolean' }, fontFileName=> { }, childFontFiles => { List => 'Seq' }, ); my %sOECF = ( STRUCT_NAME => 'OECF', NAMESPACE => 'exif', Columns => { Writable => 'integer' }, Rows => { Writable => 'integer' }, Names => { List => 'Seq' }, Values => { List => 'Seq', Writable => 'rational' }, ); # new LR2 crs structures (PH) my %sCorrectionMask = ( STRUCT_NAME => 'CorrectionMask', NAMESPACE => 'crs', # disable List behaviour of flattened Gradient/PaintBasedCorrections # because these are nested in lists and the flattened tags can't # do justice to this complex structure What => { List => 0 }, MaskValue => { Writable => 'real', List => 0, FlatName => 'Value' }, Radius => { Writable => 'real', List => 0 }, Flow => { Writable => 'real', List => 0 }, CenterWeight => { Writable => 'real', List => 0 }, Dabs => { List => 'Seq' }, ZeroX => { Writable => 'real', List => 0 }, ZeroY => { Writable => 'real', List => 0 }, FullX => { Writable => 'real', List => 0 }, FullY => { Writable => 'real', List => 0 }, # new elements used in CircularGradientBasedCorrections CorrectionMasks # and RetouchAreas Masks Top => { Writable => 'real', List => 0 }, Left => { Writable => 'real', List => 0 }, Bottom => { Writable => 'real', List => 0 }, Right => { Writable => 'real', List => 0 }, Angle => { Writable => 'real', List => 0 }, Midpoint => { Writable => 'real', List => 0 }, Roundness => { Writable => 'real', List => 0 }, Feather => { Writable => 'real', List => 0 }, Flipped => { Writable => 'boolean', List => 0 }, Version => { Writable => 'integer', List => 0 }, SizeX => { Writable => 'real', List => 0 }, SizeY => { Writable => 'real', List => 0 }, X => { Writable => 'real', List => 0 }, Y => { Writable => 'real', List => 0 }, Alpha => { Writable => 'real', List => 0 }, CenterValue => { Writable => 'real', List => 0 }, PerimeterValue=>{ Writable => 'real', List => 0 }, ); my %sCorrection = ( STRUCT_NAME => 'Correction', NAMESPACE => 'crs', What => { List => 0 }, CorrectionAmount => { FlatName => 'Amount', Writable => 'real', List => 0 }, CorrectionActive => { FlatName => 'Active', Writable => 'boolean', List => 0 }, LocalExposure => { FlatName => 'Exposure', Writable => 'real', List => 0 }, LocalSaturation => { FlatName => 'Saturation', Writable => 'real', List => 0 }, LocalContrast => { FlatName => 'Contrast', Writable => 'real', List => 0 }, LocalClarity => { FlatName => 'Clarity', Writable => 'real', List => 0 }, LocalSharpness => { FlatName => 'Sharpness', Writable => 'real', List => 0 }, LocalBrightness => { FlatName => 'Brightness', Writable => 'real', List => 0 }, LocalToningHue => { FlatName => 'Hue', Writable => 'real', List => 0 }, LocalToningSaturation => { FlatName => 'Saturation', Writable => 'real', List => 0 }, LocalExposure2012 => { FlatName => 'Exposure2012', Writable => 'real', List => 0 }, LocalContrast2012 => { FlatName => 'Contrast2012', Writable => 'real', List => 0 }, LocalHighlights2012 => { FlatName => 'Highlights2012', Writable => 'real', List => 0 }, LocalShadows2012 => { FlatName => 'Shadows2012', Writable => 'real', List => 0 }, LocalClarity2012 => { FlatName => 'Clarity2012', Writable => 'real', List => 0 }, LocalLuminanceNoise => { FlatName => 'LuminanceNoise', Writable => 'real', List => 0 }, LocalMoire => { FlatName => 'Moire', Writable => 'real', List => 0 }, LocalDefringe => { FlatName => 'Defringe', Writable => 'real', List => 0 }, LocalTemperature => { FlatName => 'Temperature',Writable => 'real', List => 0 }, LocalTint => { FlatName => 'Tint', Writable => 'real', List => 0 }, CorrectionMasks => { FlatName => 'Mask', Struct => \%sCorrectionMask, List => 'Seq', }, ); my %sRetouchArea = ( STRUCT_NAME => 'RetouchArea', NAMESPACE => 'crs', SpotType => { List => 0 }, SourceState => { List => 0 }, Method => { List => 0 }, SourceX => { Writable => 'real', List => 0 }, OffsetY => { Writable => 'real', List => 0 }, Opacity => { Writable => 'real', List => 0 }, Feather => { Writable => 'real', List => 0 }, Seed => { Writable => 'integer', List => 0 }, Masks => { FlatName => 'Mask', Struct => \%sCorrectionMask, List => 'Seq', }, ); # IPTC Extension 1.0 structures my %sLocationDetails = ( STRUCT_NAME => 'LocationDetails', NAMESPACE => 'Iptc4xmpExt', City => { }, CountryCode => { }, CountryName => { }, ProvinceState=> { }, Sublocation => { }, WorldRegion => { }, LocationId => { List => 'Bag' }, ); my %sCVTermDetails = ( STRUCT_NAME => 'CVTermDetails', NAMESPACE => 'Iptc4xmpExt', CvTermId => { }, CvTermName => { Writable => 'lang-alt' }, CvId => { }, CvTermRefinedAbout => { }, ); # main XMP tag table (tag ID's are used for the family 1 group names) %Image::ExifTool::XMP::Main = ( GROUPS => { 2 => 'Unknown' }, PROCESS_PROC => \&ProcessXMP, WRITE_PROC => \&WriteXMP, dc => { Name => 'dc', # (otherwise generated name would be 'Dc') SubDirectory => { TagTable => 'Image::ExifTool::XMP::dc' }, }, xmp => { Name => 'xmp', SubDirectory => { TagTable => 'Image::ExifTool::XMP::xmp' }, }, xmpDM => { Name => 'xmpDM', SubDirectory => { TagTable => 'Image::ExifTool::XMP::xmpDM' }, }, xmpRights => { Name => 'xmpRights', SubDirectory => { TagTable => 'Image::ExifTool::XMP::xmpRights' }, }, xmpNote => { Name => 'xmpNote', SubDirectory => { TagTable => 'Image::ExifTool::XMP::xmpNote' }, }, xmpMM => { Name => 'xmpMM', SubDirectory => { TagTable => 'Image::ExifTool::XMP::xmpMM' }, }, xmpBJ => { Name => 'xmpBJ', SubDirectory => { TagTable => 'Image::ExifTool::XMP::xmpBJ' }, }, xmpTPg => { Name => 'xmpTPg', SubDirectory => { TagTable => 'Image::ExifTool::XMP::xmpTPg' }, }, pdf => { Name => 'pdf', SubDirectory => { TagTable => 'Image::ExifTool::XMP::pdf' }, }, pdfx => { Name => 'pdfx', SubDirectory => { TagTable => 'Image::ExifTool::XMP::pdfx' }, }, photoshop => { Name => 'photoshop', SubDirectory => { TagTable => 'Image::ExifTool::XMP::photoshop' }, }, crs => { Name => 'crs', SubDirectory => { TagTable => 'Image::ExifTool::XMP::crs' }, }, # crss - it would be tedious to add the ability to write this aux => { Name => 'aux', SubDirectory => { TagTable => 'Image::ExifTool::XMP::aux' }, }, tiff => { Name => 'tiff', SubDirectory => { TagTable => 'Image::ExifTool::XMP::tiff' }, }, exif => { Name => 'exif', SubDirectory => { TagTable => 'Image::ExifTool::XMP::exif' }, }, exifEX => { Name => 'exifEX', SubDirectory => { TagTable => 'Image::ExifTool::XMP::exifEX' }, }, iptcCore => { Name => 'iptcCore', SubDirectory => { TagTable => 'Image::ExifTool::XMP::iptcCore' }, }, iptcExt => { Name => 'iptcExt', SubDirectory => { TagTable => 'Image::ExifTool::XMP::iptcExt' }, }, PixelLive => { SubDirectory => { TagTable => 'Image::ExifTool::XMP::PixelLive' }, }, xmpPLUS => { Name => 'xmpPLUS', SubDirectory => { TagTable => 'Image::ExifTool::XMP::xmpPLUS' }, }, plus => { Name => 'plus', SubDirectory => { TagTable => 'Image::ExifTool::XMP::plus' }, }, cc => { Name => 'cc', SubDirectory => { TagTable => 'Image::ExifTool::XMP::cc' }, }, dex => { Name => 'dex', SubDirectory => { TagTable => 'Image::ExifTool::XMP::dex' }, }, photomech => { Name => 'photomech', SubDirectory => { TagTable => 'Image::ExifTool::PhotoMechanic::XMP' }, }, mediapro => { Name => 'mediapro', SubDirectory => { TagTable => 'Image::ExifTool::XMP::MediaPro' }, }, expressionmedia => { Name => 'expressionmedia', SubDirectory => { TagTable => 'Image::ExifTool::XMP::ExpressionMedia' }, }, microsoft => { Name => 'microsoft', SubDirectory => { TagTable => 'Image::ExifTool::Microsoft::XMP' }, }, MP => { Name => 'MP', SubDirectory => { TagTable => 'Image::ExifTool::Microsoft::MP' }, }, MP1 => { Name => 'MP1', SubDirectory => { TagTable => 'Image::ExifTool::Microsoft::MP1' }, }, lr => { Name => 'lr', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Lightroom' }, }, DICOM => { Name => 'DICOM', SubDirectory => { TagTable => 'Image::ExifTool::XMP::DICOM' }, }, album => { Name => 'album', SubDirectory => { TagTable => 'Image::ExifTool::XMP::Album' }, }, prism => { Name => 'prism', SubDirectory => { TagTable => 'Image::ExifTool::XMP::prism' }, }, prl => { Name => 'prl', SubDirectory => { TagTable => 'Image::ExifTool::XMP::prl' }, }, pur => { Name => 'pur', SubDirectory => { TagTable => 'Image::ExifTool::XMP::pur' }, }, pmi => { Name => 'pmi', SubDirectory => { TagTable => 'Image::ExifTool::XMP::pmi' }, }, prm => { Name => 'prm', SubDirectory => { TagTable => 'Image::ExifTool::XMP::prm' }, }, rdf => { Name => 'rdf', SubDirectory => { TagTable => 'Image::ExifTool::XMP::rdf' }, }, 'x' => { Name => 'x', SubDirectory => { TagTable => 'Image::ExifTool::XMP::x' }, }, acdsee => { Name => 'acdsee', SubDirectory => { TagTable => 'Image::ExifTool::XMP::acdsee' }, }, digiKam => { Name => 'digiKam', SubDirectory => { TagTable => 'Image::ExifTool::XMP::digiKam' }, }, swf => { Name => 'swf', SubDirectory => { TagTable => 'Image::ExifTool::XMP::swf' }, }, cell => { Name => 'cell', SubDirectory => { TagTable => 'Image::ExifTool::XMP::cell' }, }, aas => { Name => 'aas', SubDirectory => { TagTable => 'Image::ExifTool::XMP::aas' }, }, 'mwg-rs' => { Name => 'mwg-rs', SubDirectory => { TagTable => 'Image::ExifTool::MWG::Regions' }, }, 'mwg-kw' => { Name => 'mwg-kw', SubDirectory => { TagTable => 'Image::ExifTool::MWG::Keywords' }, }, 'mwg-coll' => { Name => 'mwg-coll', SubDirectory => { TagTable => 'Image::ExifTool::MWG::Collections' }, }, extensis => { Name => 'extensis', SubDirectory => { TagTable => 'Image::ExifTool::XMP::extensis' }, }, ics => { Name => 'ics', SubDirectory => { TagTable => 'Image::ExifTool::XMP::ics' }, }, fpv => { Name => 'fpv', SubDirectory => { TagTable => 'Image::ExifTool::XMP::fpv' }, }, creatorAtom => { Name => 'creatorAtom', SubDirectory => { TagTable => 'Image::ExifTool::XMP::creatorAtom' }, }, 'apple-fi' => { Name => 'apple-fi', SubDirectory => { TagTable => 'Image::ExifTool::XMP::apple_fi' }, }, GPano => { Name => 'GPano', SubDirectory => { TagTable => 'Image::ExifTool::XMP::GPano' }, }, dwc => { Name => 'dwc', SubDirectory => { TagTable => 'Image::ExifTool::DarwinCore::Main' }, }, getty => { Name => 'getty', SubDirectory => { TagTable => 'Image::ExifTool::XMP::GettyImages' }, }, ); # hack to allow XML containing Dublin Core metadata to be handled like XMP (eg. EPUB - see ZIP.pm) %Image::ExifTool::XMP::XML = ( GROUPS => { 0 => 'XML', 1 => 'XML', 2 => 'Unknown' }, PROCESS_PROC => \&ProcessXMP, dc => { Name => 'dc', SubDirectory => { TagTable => 'Image::ExifTool::XMP::dc' }, }, lastUpdate => { Groups => { 2 => 'Time' }, ValueConv => 'Image::ExifTool::XMP::ConvertXMPDate($val)', PrintConv => '$self->ConvertDateTime($val)', }, ); # # Tag tables for all XMP namespaces: # # Writable - only need to define this for writable tags if not plain text # (boolean, integer, rational, real, date or lang-alt) # List - XMP list type (Bag, Seq or Alt, or set to 1 for elements in Struct lists -- # this is necessary to obtain proper list behaviour when reading/writing) # # (Note that family 1 group names are generated from the property namespace, not # the group1 names below which exist so the groups will appear in the list.) # %xmpTableDefaults = ( WRITE_PROC => \&WriteXMP, CHECK_PROC => \&CheckXMP, WRITABLE => 'string', LANG_INFO => \&GetLangInfo, ); # rdf attributes extracted %Image::ExifTool::XMP::rdf = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-rdf', 2 => 'Document' }, NAMESPACE => 'rdf', NOTES => q{ Most RDF attributes are handled internally, but the "about" attribute is treated specially to allow it to be set to a specific value if required. }, about => { Protected => 1 }, ); # x attributes extracted %Image::ExifTool::XMP::x = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-x', 2 => 'Document' }, NAMESPACE => 'x', NOTES => qq{ The "x" namespace is used for the "xmpmeta" wrapper, and may contain an "xmptk" attribute that is extracted as the XMPToolkit tag. When writing, the XMPToolkit tag is generated automatically by ExifTool unless specifically set to another value. }, xmptk => { Name => 'XMPToolkit', Protected => 1 }, ); # Dublin Core namespace properties (dc) %Image::ExifTool::XMP::dc = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-dc', 2 => 'Other' }, NAMESPACE => 'dc', TABLE_DESC => 'XMP Dublin Core', NOTES => 'Dublin Core namespace tags.', contributor => { Groups => { 2 => 'Author' }, List => 'Bag' }, coverage => { }, creator => { Groups => { 2 => 'Author' }, List => 'Seq' }, date => { Groups => { 2 => 'Time' }, List => 'Seq', %dateTimeInfo }, description => { Groups => { 2 => 'Image' }, Writable => 'lang-alt' }, 'format' => { Groups => { 2 => 'Image' } }, identifier => { Groups => { 2 => 'Image' } }, language => { List => 'Bag' }, publisher => { Groups => { 2 => 'Author' }, List => 'Bag' }, relation => { List => 'Bag' }, rights => { Groups => { 2 => 'Author' }, Writable => 'lang-alt' }, source => { Groups => { 2 => 'Author' }, Avoid => 1 }, subject => { Groups => { 2 => 'Image' }, List => 'Bag' }, title => { Groups => { 2 => 'Image' }, Writable => 'lang-alt' }, type => { Groups => { 2 => 'Image' }, List => 'Bag' }, ); # XMP namespace properties (xmp, xap) %Image::ExifTool::XMP::xmp = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-xmp', 2 => 'Image' }, NAMESPACE => 'xmp', NOTES => q{ XMP namespace tags. If the older "xap", "xapBJ", "xapMM" or "xapRights" namespace prefixes are found, they are translated to the newer "xmp", "xmpBJ", "xmpMM" and "xmpRights" prefixes for use in family 1 group names. }, Advisory => { List => 'Bag', Notes => 'deprecated' }, BaseURL => { }, # (date/time tags not as reliable as EXIF) CreateDate => { Groups => { 2 => 'Time' }, %dateTimeInfo, Priority => 0 }, CreatorTool => { }, Identifier => { Avoid => 1, List => 'Bag' }, Label => { }, MetadataDate=> { Groups => { 2 => 'Time' }, %dateTimeInfo }, ModifyDate => { Groups => { 2 => 'Time' }, %dateTimeInfo, Priority => 0 }, Nickname => { }, Rating => { Writable => 'real', Notes => 'a value from 0 to 5, or -1 for "rejected"' }, Thumbnails => { FlatName => 'Thumbnail', Struct => \%sThumbnail, List => 'Alt', }, # the following written by Adobe InDesign, not part of XMP spec: PageInfo => { FlatName => 'PageImage', Struct => \%sPageInfo, List => 'Seq', }, PageInfoImage => { Name => 'PageImage', Flat => 1 }, Title => { Avoid => 1, Notes => 'non-standard', Writable => 'lang-alt' }, #11 Author => { Avoid => 1, Notes => 'non-standard', Groups => { 2 => 'Author' } }, #11 Keywords => { Avoid => 1, Notes => 'non-standard' }, #11 Description => { Avoid => 1, Notes => 'non-standard', Writable => 'lang-alt' }, #11 Format => { Avoid => 1, Notes => 'non-standard' }, #11 ); # XMP Rights Management namespace properties (xmpRights, xapRights) %Image::ExifTool::XMP::xmpRights = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-xmpRights', 2 => 'Author' }, NAMESPACE => 'xmpRights', NOTES => 'XMP Rights Management namespace tags.', Certificate => { }, Marked => { Writable => 'boolean' }, Owner => { List => 'Bag' }, UsageTerms => { Writable => 'lang-alt' }, WebStatement => { }, ); # XMP Note namespace properties (xmpNote) %Image::ExifTool::XMP::xmpNote = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-xmpNote' }, NAMESPACE => 'xmpNote', NOTES => 'XMP Note namespace tags.', HasExtendedXMP => { Notes => q{ this tag is protected so it is not writable directly. Instead, it is set automatically to the GUID of the extended XMP when writing extended XMP to a JPEG image }, Protected => 2, }, ); # XMP xmpMM ManifestItem struct (ref PH, written by Adobe PDF library 8.0) my %sManifestItem = ( STRUCT_NAME => 'ManifestItem', NAMESPACE => 'stMfs', linkForm => { }, placedXResolution => { Namespace => 'xmpMM', Writable => 'real' }, placedYResolution => { Namespace => 'xmpMM', Writable => 'real' }, placedResolutionUnit=> { Namespace => 'xmpMM' }, reference => { Struct => \%sResourceRef }, ); # the xmpMM Pantry my %sPantryItem = ( STRUCT_NAME => 'PantryItem', NAMESPACE => undef, # stores any top-level XMP tags NOTES => q{ This structure must have an InstanceID field, but may also contain any other XMP properties. }, InstanceID => { Namespace => 'xmpMM' }, ); # XMP Media Management namespace properties (xmpMM, xapMM) %Image::ExifTool::XMP::xmpMM = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-xmpMM', 2 => 'Other' }, NAMESPACE => 'xmpMM', TABLE_DESC => 'XMP Media Management', NOTES => 'XMP Media Management namespace tags.', DerivedFrom => { Struct => \%sResourceRef }, DocumentID => { }, History => { Struct => \%sResourceEvent, List => 'Seq' }, # we treat these like list items since History is a list Ingredients => { Struct => \%sResourceRef, List => 'Bag' }, InstanceID => { }, #PH (CS3) ManagedFrom => { Struct => \%sResourceRef }, Manager => { Groups => { 2 => 'Author' } }, ManageTo => { Groups => { 2 => 'Author' } }, ManageUI => { }, ManagerVariant => { }, Manifest => { Struct => \%sManifestItem, List => 'Bag' }, OriginalDocumentID=> { }, Pantry => { Struct => \%sPantryItem, List => 'Bag' }, PreservedFileName => { }, # undocumented RenditionClass => { }, RenditionParams => { }, VersionID => { }, Versions => { Struct => \%sVersion, List => 'Seq' }, LastURL => { }, # (deprecated) RenditionOf => { Struct => \%sResourceRef }, # (deprecated) SaveID => { Writable => 'integer' }, # (deprecated) subject => { List => 'Seq', Avoid => 1, Notes => 'undocumented' }, ); # XMP Basic Job Ticket namespace properties (xmpBJ, xapBJ) %Image::ExifTool::XMP::xmpBJ = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-xmpBJ', 2 => 'Other' }, NAMESPACE => 'xmpBJ', TABLE_DESC => 'XMP Basic Job Ticket', NOTES => 'XMP Basic Job Ticket namespace tags.', # Note: JobRef is a List of structures. To accomplish this, we set the XMP # List=>'Bag', but since SubDirectory is defined, this tag isn't writable # directly. Then we need to set List=>1 for the members so the Writer logic # will allow us to add list items. JobRef => { Struct => \%sJobRef, List => 'Bag' }, ); # XMP Paged-Text namespace properties (xmpTPg) %Image::ExifTool::XMP::xmpTPg = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-xmpTPg', 2 => 'Image' }, NAMESPACE => 'xmpTPg', TABLE_DESC => 'XMP Paged-Text', NOTES => 'XMP Paged-Text namespace tags.', MaxPageSize => { Struct => \%sDimensions }, NPages => { Writable => 'integer' }, Fonts => { FlatName => '', Struct => \%sFont, List => 'Bag', }, FontsVersionString => { Name => 'FontVersion', Flat => 1 }, FontsComposite => { Name => 'FontComposite', Flat => 1 }, Colorants => { FlatName => 'Colorant', Struct => \%sColorant, List => 'Seq', }, PlateNames => { List => 'Seq' }, ); # PDF namespace properties (pdf) %Image::ExifTool::XMP::pdf = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-pdf', 2 => 'Image' }, NAMESPACE => 'pdf', TABLE_DESC => 'XMP PDF', NOTES => q{ Adobe PDF namespace tags. The official XMP specification defines only Keywords, PDFVersion, Producer and Trapped. The other tags are included because they have been observed in PDF files, but some are avoided when writing due to name conflicts with other XMP namespaces. }, Author => { Groups => { 2 => 'Author' } }, #PH ModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo }, #PH CreationDate=> { Groups => { 2 => 'Time' }, %dateTimeInfo }, #PH Creator => { Groups => { 2 => 'Author' }, Avoid => 1 }, Copyright => { Groups => { 2 => 'Author' }, Avoid => 1 }, #PH Marked => { Avoid => 1, Writable => 'boolean' }, #PH Subject => { Avoid => 1 }, Title => { Avoid => 1 }, Trapped => { #PH # remove leading '/' from '/True' or '/False' ValueConv => '$val=~s{^/}{}; $val', ValueConvInv => '"/$val"', PrintConv => { True => 'True', False => 'False', Unknown => 'Unknown' }, }, Keywords => { Priority => 0 }, PDFVersion => { }, Producer => { Groups => { 2 => 'Author' } }, ); # PDF extension namespace properties (pdfx) %Image::ExifTool::XMP::pdfx = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-pdfx', 2 => 'Document' }, NAMESPACE => 'pdfx', NOTES => q{ PDF extension tags. This namespace is used to store application-defined PDF information, so there are no pre-defined tags. User-defined tags must be created to enable writing of XMP-pdfx information. }, ); # Photoshop namespace properties (photoshop) %Image::ExifTool::XMP::photoshop = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-photoshop', 2 => 'Image' }, NAMESPACE => 'photoshop', TABLE_DESC => 'XMP Photoshop', NOTES => 'Adobe Photoshop namespace tags.', AuthorsPosition => { Groups => { 2 => 'Author' } }, CaptionWriter => { Groups => { 2 => 'Author' } }, Category => { }, City => { Groups => { 2 => 'Location' } }, ColorMode => { Writable => 'integer', # (as of July 2010 spec, courtesy of yours truly) PrintConvColumns => 2, PrintConv => { 0 => 'Bitmap', 1 => 'Grayscale', 2 => 'Indexed', 3 => 'RGB', 4 => 'CMYK', 7 => 'Multichannel', 8 => 'Duotone', 9 => 'Lab', }, }, Country => { Groups => { 2 => 'Location' } }, Credit => { Groups => { 2 => 'Author' } }, DateCreated => { Groups => { 2 => 'Time' }, %dateTimeInfo }, DocumentAncestors => { List => 'Bag', # Contrary to their own XMP specification, Adobe writes this as a simple Bag # of strings instead of structures, so comment out the structure definition... # FlatName => 'Document', # Struct => { # STRUCT_NAME => 'Ancestor', # NAMESPACE => 'photoshop', # AncestorID => { }, # }, }, Headline => { }, History => { }, #PH (CS3) ICCProfile => { Name => 'ICCProfileName' }, #PH Instructions => { }, LegacyIPTCDigest=> { }, #PH SidecarForExtension => { }, #PH (CS3) Source => { Groups => { 2 => 'Author' } }, State => { Groups => { 2 => 'Location' } }, # the XMP spec doesn't show SupplementalCategories as a 'Bag', but # that's the way Photoshop writes it [fixed in the June 2005 XMP spec]. # Also, it is incorrectly listed as "SupplementalCategory" in the # IPTC Standard Photo Metadata docs (2008rev2 and July 2009rev1) - PH SupplementalCategories => { List => 'Bag' }, TextLayers => { FlatName => 'Text', List => 'Seq', Struct => { STRUCT_NAME => 'Layer', NAMESPACE => 'photoshop', LayerName => { }, LayerText => { }, }, }, TransmissionReference => { }, Urgency => { Writable => 'integer', Notes => 'should be in the range 1-8 to conform with the XMP spec', PrintConv => { # (same values as IPTC:Urgency) 0 => '0 (reserved)', # (not standard XMP) 1 => '1 (most urgent)', 2 => 2, 3 => 3, 4 => 4, 5 => '5 (normal urgency)', 6 => 6, 7 => 7, 8 => '8 (least urgent)', 9 => '9 (user-defined priority)', # (not standard XMP) }, }, EmbeddedXMPDigest => { }, #PH (LR5) ); # Photoshop Camera Raw namespace properties (crs) - (ref 8,PH) %Image::ExifTool::XMP::crs = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-crs', 2 => 'Image' }, NAMESPACE => 'crs', TABLE_DESC => 'Photoshop Camera Raw namespace', NOTES => q{ Photoshop Camera Raw namespace tags. It is a shame that Adobe pollutes the metadata space with these incredibly bulky image editing parameters. }, AlreadyApplied => { Writable => 'boolean' }, #PH (written by LightRoom beta 4.1) AutoBrightness => { Writable => 'boolean' }, AutoContrast => { Writable => 'boolean' }, AutoExposure => { Writable => 'boolean' }, AutoShadows => { Writable => 'boolean' }, BlueHue => { Writable => 'integer' }, BlueSaturation => { Writable => 'integer' }, Brightness => { Writable => 'integer' }, CameraProfile => { }, ChromaticAberrationB=> { Writable => 'integer' }, ChromaticAberrationR=> { Writable => 'integer' }, ColorNoiseReduction => { Writable => 'integer' }, Contrast => { Writable => 'integer', Avoid => 1 }, Converter => { }, #PH guess (found in EXIF) CropTop => { Writable => 'real' }, CropLeft => { Writable => 'real' }, CropBottom => { Writable => 'real' }, CropRight => { Writable => 'real' }, CropAngle => { Writable => 'real' }, CropWidth => { Writable => 'real' }, CropHeight => { Writable => 'real' }, CropUnits => { Writable => 'integer', PrintConv => { 0 => 'pixels', 1 => 'inches', 2 => 'cm', }, }, Exposure => { Writable => 'real' }, GreenHue => { Writable => 'integer' }, GreenSaturation => { Writable => 'integer' }, HasCrop => { Writable => 'boolean' }, HasSettings => { Writable => 'boolean' }, LuminanceSmoothing => { Writable => 'integer' }, MoireFilter => { PrintConv => { Off=>'Off', On=>'On' } }, RawFileName => { }, RedHue => { Writable => 'integer' }, RedSaturation => { Writable => 'integer' }, Saturation => { Writable => 'integer', Avoid => 1 }, Shadows => { Writable => 'integer' }, ShadowTint => { Writable => 'integer' }, Sharpness => { Writable => 'integer', Avoid => 1 }, Smoothness => { Writable => 'integer' }, Temperature => { Writable => 'integer', Avoid => 1, Name => 'ColorTemperature' }, Tint => { Writable => 'integer' }, ToneCurve => { List => 'Seq' }, ToneCurveName => { PrintConv => { Linear => 'Linear', 'Medium Contrast' => 'Medium Contrast', 'Strong Contrast' => 'Strong Contrast', Custom => 'Custom', }, }, Version => { }, VignetteAmount => { Writable => 'integer' }, VignetteMidpoint=> { Writable => 'integer' }, WhiteBalance => { Avoid => 1, PrintConv => { 'As Shot' => 'As Shot', Auto => 'Auto', Daylight => 'Daylight', Cloudy => 'Cloudy', Shade => 'Shade', Tungsten => 'Tungsten', Fluorescent => 'Fluorescent', Flash => 'Flash', Custom => 'Custom', }, }, # new tags observed in Adobe Lightroom output - PH CameraProfileDigest => { }, Clarity => { Writable => 'integer' }, ConvertToGrayscale => { Writable => 'boolean' }, Defringe => { Writable => 'integer' }, FillLight => { Writable => 'integer' }, HighlightRecovery => { Writable => 'integer' }, HueAdjustmentAqua => { Writable => 'integer' }, HueAdjustmentBlue => { Writable => 'integer' }, HueAdjustmentGreen => { Writable => 'integer' }, HueAdjustmentMagenta => { Writable => 'integer' }, HueAdjustmentOrange => { Writable => 'integer' }, HueAdjustmentPurple => { Writable => 'integer' }, HueAdjustmentRed => { Writable => 'integer' }, HueAdjustmentYellow => { Writable => 'integer' }, IncrementalTemperature => { Writable => 'integer' }, IncrementalTint => { Writable => 'integer' }, LuminanceAdjustmentAqua => { Writable => 'integer' }, LuminanceAdjustmentBlue => { Writable => 'integer' }, LuminanceAdjustmentGreen => { Writable => 'integer' }, LuminanceAdjustmentMagenta => { Writable => 'integer' }, LuminanceAdjustmentOrange => { Writable => 'integer' }, LuminanceAdjustmentPurple => { Writable => 'integer' }, LuminanceAdjustmentRed => { Writable => 'integer' }, LuminanceAdjustmentYellow => { Writable => 'integer' }, ParametricDarks => { Writable => 'integer' }, ParametricHighlights => { Writable => 'integer' }, ParametricHighlightSplit => { Writable => 'integer' }, ParametricLights => { Writable => 'integer' }, ParametricMidtoneSplit => { Writable => 'integer' }, ParametricShadows => { Writable => 'integer' }, ParametricShadowSplit => { Writable => 'integer' }, SaturationAdjustmentAqua => { Writable => 'integer' }, SaturationAdjustmentBlue => { Writable => 'integer' }, SaturationAdjustmentGreen => { Writable => 'integer' }, SaturationAdjustmentMagenta => { Writable => 'integer' }, SaturationAdjustmentOrange => { Writable => 'integer' }, SaturationAdjustmentPurple => { Writable => 'integer' }, SaturationAdjustmentRed => { Writable => 'integer' }, SaturationAdjustmentYellow => { Writable => 'integer' }, SharpenDetail => { Writable => 'integer' }, SharpenEdgeMasking => { Writable => 'integer' }, SharpenRadius => { Writable => 'real' }, SplitToningBalance => { Writable => 'integer' }, SplitToningHighlightHue => { Writable => 'integer' }, SplitToningHighlightSaturation => { Writable => 'integer' }, SplitToningShadowHue => { Writable => 'integer' }, SplitToningShadowSaturation => { Writable => 'integer' }, Vibrance => { Writable => 'integer' }, # new tags written by LR 1.4 (not sure in what version they first appeared) GrayMixerRed => { Writable => 'integer' }, GrayMixerOrange => { Writable => 'integer' }, GrayMixerYellow => { Writable => 'integer' }, GrayMixerGreen => { Writable => 'integer' }, GrayMixerAqua => { Writable => 'integer' }, GrayMixerBlue => { Writable => 'integer' }, GrayMixerPurple => { Writable => 'integer' }, GrayMixerMagenta => { Writable => 'integer' }, RetouchInfo => { List => 'Seq' }, RedEyeInfo => { List => 'Seq' }, # new tags written by LR 2.0 (ref PH) CropUnit => { # was the XMP documentation wrong with "CropUnits"?? Writable => 'integer', PrintConv => { 0 => 'pixels', 1 => 'inches', 2 => 'cm', # have seen a value of 3 here! - PH }, }, PostCropVignetteAmount => { Writable => 'integer' }, PostCropVignetteMidpoint => { Writable => 'integer' }, PostCropVignetteFeather => { Writable => 'integer' }, PostCropVignetteRoundness => { Writable => 'integer' }, PostCropVignetteStyle => { Writable => 'integer' }, # disable List behaviour of flattened Gradient/PaintBasedCorrections # because these are nested in lists and the flattened tags can't # do justice to this complex structure GradientBasedCorrections => { FlatName => 'GradientBasedCorr', Struct => \%sCorrection, List => 'Seq', }, GradientBasedCorrectionsCorrectionMasks => { Name => 'GradientBasedCorrMasks', FlatName => 'GradientBasedCorrMask', Flat => 1 }, GradientBasedCorrectionsCorrectionMasksDabs => { Name => 'GradientBasedCorrMaskDabs', Flat => 1, List => 0, }, PaintBasedCorrections => { FlatName => 'PaintCorrection', Struct => \%sCorrection, List => 'Seq', }, PaintBasedCorrectionsCorrectionMasks => { Name => 'PaintBasedCorrectionMasks', FlatName => 'PaintCorrectionMask', Flat => 1, }, PaintBasedCorrectionsCorrectionMasksDabs => { Name => 'PaintCorrectionMaskDabs', Flat => 1, List => 0, }, # new tags written by LR 3 (thanks Wolfgang Guelcker) ProcessVersion => { }, LensProfileEnable => { Writable => 'integer' }, LensProfileSetup => { }, LensProfileName => { }, LensProfileFilename => { }, LensProfileDigest => { }, LensProfileDistortionScale => { Writable => 'integer' }, LensProfileChromaticAberrationScale => { Writable => 'integer' }, LensProfileVignettingScale => { Writable => 'integer' }, LensManualDistortionAmount => { Writable => 'integer' }, PerspectiveVertical => { Writable => 'integer' }, PerspectiveHorizontal => { Writable => 'integer' }, PerspectiveRotate => { Writable => 'real' }, PerspectiveScale => { Writable => 'integer' }, CropConstrainToWarp => { Writable => 'integer' }, LuminanceNoiseReductionDetail => { Writable => 'integer' }, LuminanceNoiseReductionContrast => { Writable => 'integer' }, ColorNoiseReductionDetail => { Writable => 'integer' }, GrainAmount => { Writable => 'integer' }, GrainSize => { Writable => 'integer' }, GrainFrequency => { Writable => 'integer' }, # new tags written by LR4 AutoLateralCA => { Writable => 'integer' }, Exposure2012 => { Writable => 'real' }, Contrast2012 => { Writable => 'integer' }, Highlights2012 => { Writable => 'integer' }, Shadows2012 => { Writable => 'integer' }, Whites2012 => { Writable => 'integer' }, Blacks2012 => { Writable => 'integer' }, Clarity2012 => { Writable => 'integer' }, PostCropVignetteHighlightContrast => { Writable => 'integer' }, ToneCurveName2012 => { }, ToneCurveRed => { List => 'Seq' }, ToneCurveGreen => { List => 'Seq' }, ToneCurveBlue => { List => 'Seq' }, ToneCurvePV2012 => { List => 'Seq' }, ToneCurvePV2012Red => { List => 'Seq' }, ToneCurvePV2012Green => { List => 'Seq' }, ToneCurvePV2012Blue => { List => 'Seq' }, DefringePurpleAmount => { Writable => 'integer' }, DefringePurpleHueLo => { Writable => 'integer' }, DefringePurpleHueHi => { Writable => 'integer' }, DefringeGreenAmount => { Writable => 'integer' }, DefringeGreenHueLo => { Writable => 'integer' }, DefringeGreenHueHi => { Writable => 'integer' }, # new tags written by LR5 AutoWhiteVersion => { Writable => 'integer' }, CircularGradientBasedCorrections => { FlatName => 'CircGradBasedCorr', Struct => \%sCorrection, List => 'Seq', }, CircularGradientBasedCorrectionsCorrectionMasks => { Name => 'CircGradBasedCorrMasks', FlatName => 'CircGradBasedCorrMask', Flat => 1 }, CircularGradientBasedCorrectionsCorrectionMasksDabs => { Name => 'CircGradBasedCorrMaskDabs', Flat => 1, List => 0, }, ColorNoiseReductionSmoothness => { Writable => 'integer' }, PerspectiveAspect => { Writable => 'integer' }, PerspectiveUpright => { Writable => 'integer' }, RetouchAreas => { FlatName => 'RetouchArea', Struct => \%sRetouchArea, List => 'Seq', }, RetouchAreasMasks => { Name => 'RetouchAreaMasks', FlatName => 'RetouchAreaMask', Flat => 1 }, RetouchAreasMasksDabs => { Name => 'RetouchAreaMaskDabs', Flat => 1, List => 0, }, UprightVersion => { Writable => 'integer' }, UprightCenterMode => { Writable => 'integer' }, UprightCenterNormX => { Writable => 'real' }, UprightCenterNormY => { Writable => 'real' }, UprightFocalMode => { Writable => 'integer' }, UprightFocalLength35mm => { Writable => 'real' }, UprightPreview => { Writable => 'boolean' }, UprightTransformCount => { Writable => 'integer' }, UprightDependentDigest => { }, UprightTransform_0 => { }, UprightTransform_1 => { }, UprightTransform_2 => { }, UprightTransform_3 => { }, UprightTransform_4 => { }, # more stuff seen in lens profile file (unknown source) What => { }, # (with value "LensProfileDefaultSettings") LensProfileMatchKeyExifMake => { }, LensProfileMatchKeyExifModel => { }, LensProfileMatchKeyCameraModelName => { }, LensProfileMatchKeyLensInfo => { }, LensProfileMatchKeyLensID => { }, LensProfileMatchKeyLensName => { }, LensProfileMatchKeyIsRaw => { Writable => 'boolean' }, LensProfileMatchKeySensorFormatFactor=>{ Writable => 'real' }, ); # Tiff namespace properties (tiff) %Image::ExifTool::XMP::tiff = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-tiff', 2 => 'Image' }, NAMESPACE => 'tiff', PRIORITY => 0, # not as reliable as actual TIFF tags TABLE_DESC => 'XMP TIFF', NOTES => q{ EXIF namespace for TIFF tags. See L<http://www.cipa.jp/std/documents/e/DC-010-2012_E.pdf> for the specification. }, ImageWidth => { Writable => 'integer' }, ImageLength => { Writable => 'integer', Name => 'ImageHeight' }, BitsPerSample => { Writable => 'integer', List => 'Seq', AutoSplit => 1 }, Compression => { Writable => 'integer', SeparateTable => 'EXIF Compression', PrintConv => \%Image::ExifTool::Exif::compression, }, PhotometricInterpretation => { Writable => 'integer', PrintConv => \%Image::ExifTool::Exif::photometricInterpretation, }, Orientation => { Writable => 'integer', PrintConv => \%Image::ExifTool::Exif::orientation, }, SamplesPerPixel => { Writable => 'integer' }, PlanarConfiguration => { Writable => 'integer', PrintConv => { 1 => 'Chunky', 2 => 'Planar', }, }, YCbCrSubSampling => { Writable => 'integer', List => 'Seq', # join the raw values before conversion to allow PrintConv to operate on # the combined string as it does for the corresponding EXIF tag RawJoin => 1, Notes => q{ while technically this is a list-type tag, for compatibility with its EXIF counterpart it is written and read as a simple string }, PrintConv => \%Image::ExifTool::JPEG::yCbCrSubSampling, }, YCbCrPositioning => { Writable => 'integer', PrintConv => { 1 => 'Centered', 2 => 'Co-sited', }, }, XResolution => { Writable => 'rational' }, YResolution => { Writable => 'rational' }, ResolutionUnit => { Writable => 'integer', Notes => 'the value 1 is not standard EXIF', PrintConv => { 1 => 'None', 2 => 'inches', 3 => 'cm', }, }, TransferFunction => { Writable => 'integer', List => 'Seq', AutoSplit => 1 }, WhitePoint => { Writable => 'rational', List => 'Seq', AutoSplit => 1 }, PrimaryChromaticities => { Writable => 'rational', List => 'Seq', AutoSplit => 1 }, YCbCrCoefficients => { Writable => 'rational', List => 'Seq', AutoSplit => 1 }, ReferenceBlackWhite => { Writable => 'rational', List => 'Seq', AutoSplit => 1 }, DateTime => { # (EXIF tag named ModifyDate, but this exists in XMP-xmp) Description => 'Date/Time Modified', Groups => { 2 => 'Time' }, %dateTimeInfo, }, ImageDescription => { Writable => 'lang-alt' }, Make => { Groups => { 2 => 'Camera' }, RawConv => '$$self{Make} ? $val : $$self{Make} = $val', }, Model => { Groups => { 2 => 'Camera' }, Description => 'Camera Model Name', RawConv => '$$self{Model} ? $val : $$self{Model} = $val', }, Software => { }, Artist => { Groups => { 2 => 'Author' } }, Copyright => { Groups => { 2 => 'Author' }, Writable => 'lang-alt' }, NativeDigest => { }, #PH ); # Exif namespace properties (exif) %Image::ExifTool::XMP::exif = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-exif', 2 => 'Image' }, NAMESPACE => 'exif', PRIORITY => 0, # not as reliable as actual EXIF tags NOTES => q{ EXIF namespace for EXIF tags. See L<http://www.cipa.jp/std/documents/e/DC-010-2012_E.pdf> for the specification. }, ExifVersion => { }, FlashpixVersion => { }, ColorSpace => { Writable => 'integer', # (some applications incorrectly write -1 as a long integer) ValueConv => '$val == 0xffffffff ? 0xffff : $val', ValueConvInv => '$val', PrintConv => { 1 => 'sRGB', 2 => 'Adobe RGB', 0xffff => 'Uncalibrated', }, }, ComponentsConfiguration => { Writable => 'integer', List => 'Seq', AutoSplit => 1, PrintConvColumns => 2, PrintConv => { 0 => '-', 1 => 'Y', 2 => 'Cb', 3 => 'Cr', 4 => 'R', 5 => 'G', 6 => 'B', }, }, CompressedBitsPerPixel => { Writable => 'rational' }, PixelXDimension => { Name => 'ExifImageWidth', Writable => 'integer' }, PixelYDimension => { Name => 'ExifImageHeight', Writable => 'integer' }, MakerNote => { }, UserComment => { Writable => 'lang-alt' }, RelatedSoundFile => { }, DateTimeOriginal => { Description => 'Date/Time Original', Groups => { 2 => 'Time' }, %dateTimeInfo, }, DateTimeDigitized => { # (EXIF tag named CreateDate, but this exists in XMP-xmp) Description => 'Date/Time Digitized', Groups => { 2 => 'Time' }, %dateTimeInfo, }, ExposureTime => { Writable => 'rational', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, FNumber => { Writable => 'rational', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', PrintConvInv => '$val', }, ExposureProgram => { Groups => { 2 => 'Camera' }, Writable => 'integer', PrintConv => { 0 => 'Not Defined', 1 => 'Manual', 2 => 'Program AE', 3 => 'Aperture-priority AE', 4 => 'Shutter speed priority AE', 5 => 'Creative (Slow speed)', 6 => 'Action (High speed)', 7 => 'Portrait', 8 => 'Landscape', }, }, SpectralSensitivity => { Groups => { 2 => 'Camera' } }, ISOSpeedRatings => { Name => 'ISO', Writable => 'integer', List => 'Seq', AutoSplit => 1, }, OECF => { Name => 'Opto-ElectricConvFactor', FlatName => 'OECF', Groups => { 2 => 'Camera' }, Struct => \%sOECF, }, ShutterSpeedValue => { Writable => 'rational', ValueConv => 'abs($val)<100 ? 1/(2**$val) : 0', PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', ValueConvInv => '$val>0 ? -log($val)/log(2) : 0', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, ApertureValue => { Writable => 'rational', ValueConv => 'sqrt(2) ** $val', PrintConv => 'sprintf("%.1f",$val)', ValueConvInv => '$val>0 ? 2*log($val)/log(2) : 0', PrintConvInv => '$val', }, BrightnessValue => { Writable => 'rational' }, ExposureBiasValue => { Name => 'ExposureCompensation', Writable => 'rational', PrintConv => 'Image::ExifTool::Exif::PrintFraction($val)', PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)', }, MaxApertureValue => { Groups => { 2 => 'Camera' }, Writable => 'rational', ValueConv => 'sqrt(2) ** $val', PrintConv => 'sprintf("%.1f",$val)', ValueConvInv => '$val>0 ? 2*log($val)/log(2) : 0', PrintConvInv => '$val', }, SubjectDistance => { Groups => { 2 => 'Camera' }, Writable => 'rational', PrintConv => '$val =~ /^(inf|undef)$/ ? $val : "$val m"', PrintConvInv => '$val=~s/\s*m$//;$val', }, MeteringMode => { Groups => { 2 => 'Camera' }, Writable => 'integer', PrintConv => { 1 => 'Average', 2 => 'Center-weighted average', 3 => 'Spot', 4 => 'Multi-spot', 5 => 'Multi-segment', 6 => 'Partial', 255 => 'Other', }, }, LightSource => { Groups => { 2 => 'Camera' }, SeparateTable => 'EXIF LightSource', PrintConv => \%Image::ExifTool::Exif::lightSource, }, Flash => { Groups => { 2 => 'Camera' }, Struct => { STRUCT_NAME => 'Flash', NAMESPACE => 'exif', Fired => { Writable => 'boolean', %boolConv }, Return => { Writable => 'integer', PrintConv => { 0 => 'No return detection', 2 => 'Return not detected', 3 => 'Return detected', }, }, Mode => { Writable => 'integer', PrintConv => { 0 => 'Unknown', 1 => 'On', 2 => 'Off', 3 => 'Auto', }, }, Function => { Writable => 'boolean', %boolConv }, RedEyeMode => { Writable => 'boolean', %boolConv }, }, }, FocalLength=> { Groups => { 2 => 'Camera' }, Writable => 'rational', PrintConv => 'sprintf("%.1f mm",$val)', PrintConvInv => '$val=~s/\s*mm$//;$val', }, SubjectArea => { Writable => 'integer', List => 'Seq', AutoSplit => 1 }, FlashEnergy => { Groups => { 2 => 'Camera' }, Writable => 'rational' }, SpatialFrequencyResponse => { Groups => { 2 => 'Camera' }, Struct => \%sOECF, }, FocalPlaneXResolution => { Groups => { 2 => 'Camera' }, Writable => 'rational' }, FocalPlaneYResolution => { Groups => { 2 => 'Camera' }, Writable => 'rational' }, FocalPlaneResolutionUnit => { Groups => { 2 => 'Camera' }, Writable => 'integer', Notes => 'values 1, 4 and 5 are not standard EXIF', PrintConv => { 1 => 'None', # (not standard EXIF) 2 => 'inches', 3 => 'cm', 4 => 'mm', # (not standard EXIF) 5 => 'um', # (not standard EXIF) }, }, SubjectLocation => { Writable => 'integer', List => 'Seq', AutoSplit => 1 }, ExposureIndex => { Writable => 'rational' }, SensingMethod => { Groups => { 2 => 'Camera' }, Writable => 'integer', Notes => 'values 1 and 6 are not standard EXIF', PrintConv => { 1 => 'Monochrome area', # (not standard EXIF) 2 => 'One-chip color area', 3 => 'Two-chip color area', 4 => 'Three-chip color area', 5 => 'Color sequential area', 6 => 'Monochrome linear', # (not standard EXIF) 7 => 'Trilinear', 8 => 'Color sequential linear', }, }, FileSource => { Writable => 'integer', PrintConv => { 1 => 'Film Scanner', 2 => 'Reflection Print Scanner', 3 => 'Digital Camera', } }, SceneType => { Writable => 'integer', PrintConv => { 1 => 'Directly photographed' } }, CFAPattern => { Struct => { STRUCT_NAME => 'CFAPattern', NAMESPACE => 'exif', Columns => { Writable => 'integer' }, Rows => { Writable => 'integer' }, Values => { Writable => 'integer', List => 'Seq' }, }, }, CustomRendered => { Writable => 'integer', PrintConv => { 0 => 'Normal', 1 => 'Custom', }, }, ExposureMode => { Groups => { 2 => 'Camera' }, Writable => 'integer', PrintConv => { 0 => 'Auto', 1 => 'Manual', 2 => 'Auto bracket', }, }, WhiteBalance => { Groups => { 2 => 'Camera' }, Writable => 'integer', PrintConv => { 0 => 'Auto', 1 => 'Manual', }, }, DigitalZoomRatio => { Writable => 'rational' }, FocalLengthIn35mmFilm => { Name => 'FocalLengthIn35mmFormat', Writable => 'integer', Groups => { 2 => 'Camera' }, PrintConv => '"$val mm"', PrintConvInv => '$val=~s/\s*mm$//;$val', }, SceneCaptureType => { Groups => { 2 => 'Camera' }, Writable => 'integer', PrintConv => { 0 => 'Standard', 1 => 'Landscape', 2 => 'Portrait', 3 => 'Night', }, }, GainControl => { Groups => { 2 => 'Camera' }, Writable => 'integer', PrintConv => { 0 => 'None', 1 => 'Low gain up', 2 => 'High gain up', 3 => 'Low gain down', 4 => 'High gain down', }, }, Contrast => { Groups => { 2 => 'Camera' }, Writable => 'integer', PrintConv => { 0 => 'Normal', 1 => 'Low', 2 => 'High', }, PrintConvInv => 'Image::ExifTool::Exif::ConvertParameter($val)', }, Saturation => { Groups => { 2 => 'Camera' }, Writable => 'integer', PrintConv => { 0 => 'Normal', 1 => 'Low', 2 => 'High', }, PrintConvInv => 'Image::ExifTool::Exif::ConvertParameter($val)', }, Sharpness => { Groups => { 2 => 'Camera' }, Writable => 'integer', PrintConv => { 0 => 'Normal', 1 => 'Soft', 2 => 'Hard', }, PrintConvInv => 'Image::ExifTool::Exif::ConvertParameter($val)', }, DeviceSettingDescription => { Groups => { 2 => 'Camera' }, Struct => { STRUCT_NAME => 'DeviceSettings', NAMESPACE => 'exif', Columns => { Writable => 'integer' }, Rows => { Writable => 'integer' }, Settings => { List => 'Seq' }, }, }, SubjectDistanceRange => { Groups => { 2 => 'Camera' }, Writable => 'integer', PrintConv => { 0 => 'Unknown', 1 => 'Macro', 2 => 'Close', 3 => 'Distant', }, }, ImageUniqueID => { }, GPSVersionID => { Groups => { 2 => 'Location' } }, GPSLatitude => { Groups => { 2 => 'Location' }, %latConv }, GPSLongitude => { Groups => { 2 => 'Location' }, %longConv }, GPSAltitudeRef => { Groups => { 2 => 'Location' }, Writable => 'integer', PrintConv => { 0 => 'Above Sea Level', 1 => 'Below Sea Level', }, }, GPSAltitude => { Groups => { 2 => 'Location' }, Writable => 'rational', RawConv => 'require Image::ExifTool::GPS; $val', # to load Composite tags and routines # extricate unsigned decimal number from string ValueConvInv => '$val=~/((?=\d|\.\d)\d*(?:\.\d*)?)/ ? $1 : undef', PrintConv => '$val =~ /^(inf|undef)$/ ? $val : "$val m"', PrintConvInv => '$val=~s/\s*m$//;$val', }, GPSTimeStamp => { Name => 'GPSDateTime', Description => 'GPS Date/Time', Groups => { 2 => 'Time' }, Notes => q{ a date/time tag called GPSTimeStamp by the XMP specification. This tag is renamed here to prevent direct copy from EXIF:GPSTimeStamp which is a time-only tag. Instead, the value of this tag should be taken from Composite:GPSDateTime when copying from EXIF }, %dateTimeInfo, }, GPSSatellites => { Groups => { 2 => 'Location' } }, GPSStatus => { Groups => { 2 => 'Location' }, PrintConv => { A => 'Measurement Active', V => 'Measurement Void', }, }, GPSMeasureMode => { Groups => { 2 => 'Location' }, Writable => 'integer', PrintConv => { 2 => '2-Dimensional', 3 => '3-Dimensional', }, }, GPSDOP => { Groups => { 2 => 'Location' }, Writable => 'rational' }, GPSSpeedRef => { Groups => { 2 => 'Location' }, PrintConv => { K => 'km/h', M => 'mph', N => 'knots', }, }, GPSSpeed => { Groups => { 2 => 'Location' }, Writable => 'rational' }, GPSTrackRef => { Groups => { 2 => 'Location' }, PrintConv => { M => 'Magnetic North', T => 'True North', }, }, GPSTrack => { Groups => { 2 => 'Location' }, Writable => 'rational' }, GPSImgDirectionRef => { Groups => { 2 => 'Location' }, PrintConv => { M => 'Magnetic North', T => 'True North', }, }, GPSImgDirection => { Groups => { 2 => 'Location' }, Writable => 'rational' }, GPSMapDatum => { Groups => { 2 => 'Location' } }, GPSDestLatitude => { Groups => { 2 => 'Location' }, %latConv }, GPSDestLongitude=> { Groups => { 2 => 'Location' }, %longConv }, GPSDestBearingRef => { Groups => { 2 => 'Location' }, PrintConv => { M => 'Magnetic North', T => 'True North', }, }, GPSDestBearing => { Groups => { 2 => 'Location' }, Writable => 'rational' }, GPSDestDistanceRef => { Groups => { 2 => 'Location' }, PrintConv => { K => 'Kilometers', M => 'Miles', N => 'Nautical Miles', }, }, GPSDestDistance => { Groups => { 2 => 'Location' }, Writable => 'rational', }, GPSProcessingMethod => { Groups => { 2 => 'Location' } }, GPSAreaInformation => { Groups => { 2 => 'Location' } }, GPSDifferential => { Groups => { 2 => 'Location' }, Writable => 'integer', PrintConv => { 0 => 'No Correction', 1 => 'Differential Corrected', }, }, GPSHPositioningError => { #12 Description => 'GPS Horizontal Positioning Error', Groups => { 2 => 'Location' }, Writable => 'rational', PrintConv => '"$val m"', PrintConvInv => '$val=~s/\s*m$//; $val', }, NativeDigest => { }, #PH ); # Exif extended properties (exifEX, ref 12) %Image::ExifTool::XMP::exifEX = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-exifEX', 2 => 'Image' }, NAMESPACE => 'exifEX', PRIORITY => 0, # not as reliable as actual EXIF tags NOTES => q{ EXIF tags added by the EXIF 2.3 for XMP specification (see L<http://www.cipa.jp/std/documents/e/DC-010-2012_E.pdf>). }, Gamma => { Writable => 'rational' }, PhotographicSensitivity => { Writable => 'integer' }, SensitivityType => { Writable => 'integer', PrintConv => { 0 => 'Unknown', 1 => 'Standard Output Sensitivity', 2 => 'Recommended Exposure Index', 3 => 'ISO Speed', 4 => 'Standard Output Sensitivity and Recommended Exposure Index', 5 => 'Standard Output Sensitivity and ISO Speed', 6 => 'Recommended Exposure Index and ISO Speed', 7 => 'Standard Output Sensitivity, Recommended Exposure Index and ISO Speed', }, }, StandardOutputSensitivity => { Writable => 'integer' }, RecommendedExposureIndex => { Writable => 'integer' }, ISOSpeed => { Writable => 'integer' }, ISOSpeedLatitudeyyy => { Description => 'ISO Speed Latitude yyy', Writable => 'integer', }, ISOSpeedLatitudezzz => { Description => 'ISO Speed Latitude zzz', Writable => 'integer', }, CameraOwnerName => { Name => 'OwnerName' }, BodySerialNumber => { Name => 'SerialNumber' }, LensSpecification => { Name => 'LensInfo', Writable => 'rational', List => 'Seq', RawJoin => 1, # join list into a string before ValueConv ValueConv => \&ConvertRationalList, ValueConvInv => sub { my $val = shift; my @vals = split ' ', $val; return $val unless @vals == 4; foreach (@vals) { $_ eq 'inf' and $_ = '1/0', next; $_ eq 'undef' and $_ = '0/0', next; Image::ExifTool::IsFloat($_) or return $val; my @a = Image::ExifTool::Rationalize($_); $_ = join '/', @a; } return \@vals; # return list reference (List-type tag) }, PrintConv => \&Image::ExifTool::Exif::PrintLensInfo, PrintConvInv => \&Image::ExifTool::Exif::ConvertLensInfo, Notes => q{ called LensSpecification by the spec. Unfortunately the EXIF 2.3 for XMP specification defined this new tag instead of using the existing XMP-aux:LensInfo }, }, LensMake => { }, LensModel => { }, LensSerialNumber => { }, InteroperabilityIndex => { Name => 'InteropIndex', Description => 'Interoperability Index', PrintConv => { R98 => 'R98 - DCF basic file (sRGB)', R03 => 'R03 - DCF option file (Adobe RGB)', THM => 'THM - DCF thumbnail file', }, }, ); # Auxiliary namespace properties (aux) - not fully documented (ref PH) %Image::ExifTool::XMP::aux = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-aux', 2 => 'Camera' }, NAMESPACE => 'aux', NOTES => q{ Adobe-defined auxiliary EXIF tags. This namespace existed in the XMP specification until it was dropped in 2012, presumably due to the introduction of the EXIF 2.3 for XMP specification and the exifEX namespace at this time. For this reason, tags below with equivalents in the L<exifEX namespace|/XMP exifEX Tags> are avoided when writing. }, Firmware => { }, #7 FlashCompensation => { Writable => 'rational' }, #7 ImageNumber => { }, #7 LensInfo => { #7 Notes => '4 rational values giving focal and aperture ranges', Avoid => 1, # convert to floating point values (or 'inf' or 'undef') ValueConv => \&ConvertRationalList, ValueConvInv => sub { my $val = shift; my @vals = split ' ', $val; return $val unless @vals == 4; foreach (@vals) { $_ eq 'inf' and $_ = '1/0', next; $_ eq 'undef' and $_ = '0/0', next; Image::ExifTool::IsFloat($_) or return $val; my @a = Image::ExifTool::Rationalize($_); $_ = join '/', @a; } return join ' ', @vals; # return string (string tag) }, # convert to the form "12-20mm f/3.8-4.5" or "50mm f/1.4" PrintConv => \&Image::ExifTool::Exif::PrintLensInfo, PrintConvInv => \&Image::ExifTool::Exif::ConvertLensInfo, }, Lens => { }, OwnerName => { Avoid => 1 }, #7 SerialNumber => { Avoid => 1 }, LensSerialNumber=> { Avoid => 1 }, LensID => { Priority => 0, # prevent this from getting set from a LensID that has been converted ValueConvInv => q{ warn "Expected one or more integer values" if $val =~ /[^\d ]/; return $val; }, }, ApproximateFocusDistance => { Writable => 'rational' }, #PH (LR3) # the following new in LR6 (ref forum6497) IsMergedPanorama => { Writable => 'boolean' }, IsMergedHDR => { Writable => 'boolean' }, DistortionCorrectionAlreadyApplied => { Writable => 'boolean' }, VignetteCorrectionAlreadyApplied => { Writable => 'boolean' }, LateralChromaticAberrationCorrectionAlreadyApplied => { Writable => 'boolean' }, ); # IPTC Core namespace properties (Iptc4xmpCore) (ref 4) %Image::ExifTool::XMP::iptcCore = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-iptcCore', 2 => 'Author' }, NAMESPACE => 'Iptc4xmpCore', TABLE_DESC => 'XMP IPTC Core', NOTES => q{ IPTC Core namespace tags. The actual IPTC Core namespace prefix is "Iptc4xmpCore", which is the prefix recorded in the file, but ExifTool shortens this for the "XMP-iptcCore" family 1 group name. (see L<http://www.iptc.org/IPTC4XMP/>) }, CountryCode => { Groups => { 2 => 'Location' } }, CreatorContactInfo => { Struct => { STRUCT_NAME => 'ContactInfo', NAMESPACE => 'Iptc4xmpCore', CiAdrCity => { }, CiAdrCtry => { }, CiAdrExtadr => { }, CiAdrPcode => { }, CiAdrRegion => { }, CiEmailWork => { }, CiTelWork => { }, CiUrlWork => { }, }, }, CreatorContactInfoCiAdrCity => { Flat => 1, Name => 'CreatorCity' }, CreatorContactInfoCiAdrCtry => { Flat => 1, Name => 'CreatorCountry' }, CreatorContactInfoCiAdrExtadr => { Flat => 1, Name => 'CreatorAddress' }, CreatorContactInfoCiAdrPcode => { Flat => 1, Name => 'CreatorPostalCode' }, CreatorContactInfoCiAdrRegion => { Flat => 1, Name => 'CreatorRegion' }, CreatorContactInfoCiEmailWork => { Flat => 1, Name => 'CreatorWorkEmail' }, CreatorContactInfoCiTelWork => { Flat => 1, Name => 'CreatorWorkTelephone' }, CreatorContactInfoCiUrlWork => { Flat => 1, Name => 'CreatorWorkURL' }, IntellectualGenre => { Groups => { 2 => 'Other' } }, Location => { Groups => { 2 => 'Location' } }, Scene => { Groups => { 2 => 'Other' }, List => 'Bag' }, SubjectCode => { Groups => { 2 => 'Other' }, List => 'Bag' }, ); # IPTC Extension namespace properties (Iptc4xmpExt) (ref 4) %Image::ExifTool::XMP::iptcExt = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-iptcExt', 2 => 'Author' }, NAMESPACE => 'Iptc4xmpExt', TABLE_DESC => 'XMP IPTC Extension', NOTES => q{ IPTC Extension namespace tags. The actual namespace prefix is "Iptc4xmpExt", but ExifTool shortens this for the "XMP-iptcExt" family 1 group name. (see L<http://www.iptc.org/IPTC4XMP/>) }, AboutCvTerm => { Struct => \%sCVTermDetails, List => 'Bag', }, AboutCvTermCvId => { Flat => 1, Name => 'AboutCvTermCvId' }, AboutCvTermCvTermId => { Flat => 1, Name => 'AboutCvTermId' }, AboutCvTermCvTermName => { Flat => 1, Name => 'AboutCvTermName' }, AboutCvTermCvTermRefinedAbout => { Flat => 1, Name => 'AboutCvTermRefinedAbout' }, AddlModelInfo => { Name => 'AdditionalModelInformation' }, ArtworkOrObject => { Struct => { STRUCT_NAME => 'ArtworkOrObjectDetails', NAMESPACE => 'Iptc4xmpExt', AOCopyrightNotice => { }, AOCreator => { List => 'Seq' }, AODateCreated=> { Groups => { 2 => 'Time' }, %dateTimeInfo }, AOSource => { }, AOSourceInvNo=> { }, AOTitle => { Writable => 'lang-alt' }, AOCurrentCopyrightOwnerName => { }, AOCurrentCopyrightOwnerId => { }, AOCurrentLicensorName => { }, AOCurrentLicensorId => { }, AOCreatorId => { List => 'Seq' }, AOCircaDateCreated => { }, AOStylePeriod => { List => 'Bag' }, AOSourceInvURL => { }, AOContentDescription => { Writable => 'lang-alt' }, AOContributionDescription => { Writable => 'lang-alt' }, AOPhysicalDescription => { Writable => 'lang-alt' }, }, List => 'Bag', }, ArtworkOrObjectAOCopyrightNotice => { Flat => 1, Name => 'ArtworkCopyrightNotice' }, ArtworkOrObjectAOCreator => { Flat => 1, Name => 'ArtworkCreator' }, ArtworkOrObjectAODateCreated => { Flat => 1, Name => 'ArtworkDateCreated' }, ArtworkOrObjectAOSource => { Flat => 1, Name => 'ArtworkSource' }, ArtworkOrObjectAOSourceInvNo => { Flat => 1, Name => 'ArtworkSourceInventoryNo' }, ArtworkOrObjectAOTitle => { Flat => 1, Name => 'ArtworkTitle' }, ArtworkOrObjectAOCurrentCopyrightOwnerName => { Flat => 1, Name => 'ArtworkCopyrightOwnerName' }, ArtworkOrObjectAOCurrentCopyrightOwnerId => { Flat => 1, Name => 'ArtworkCopyrightOwnerID' }, ArtworkOrObjectAOCurrentLicensorName => { Flat => 1, Name => 'ArtworkLicensorName' }, ArtworkOrObjectAOCurrentLicensorId => { Flat => 1, Name => 'ArtworkLicensorID' }, ArtworkOrObjectAOCreatorId => { Flat => 1, Name => 'ArtworkCreatorID' }, ArtworkOrObjectAOCircaDateCreated => { Flat => 1, Name => 'ArtworkCircaDateCreated' }, ArtworkOrObjectAOStylePeriod => { Flat => 1, Name => 'ArtworkStylePeriod' }, ArtworkOrObjectAOSourceInvURL => { Flat => 1, Name => 'ArtworkSourceInvURL' }, ArtworkOrObjectAOContentDescription => { Flat => 1, Name => 'ArtworkSContentDescription' }, ArtworkOrObjectAOContributionDescription => { Flat => 1, Name => 'ArtworkContributionDescription' }, ArtworkOrObjectAOPhysicalDescription => { Flat => 1, Name => 'ArtworkPhysicalDescription' }, CVterm => { Name => 'ControlledVocabularyTerm', List => 'Bag', Notes => 'deprecated by version 1.2', }, DigImageGUID => { Name => 'DigitalImageGUID' }, DigitalSourcefileType => { Name => 'DigitalSourceFileType', Notes => 'now deprecated -- replaced by DigitalSourceType', }, DigitalSourceType => { Name => 'DigitalSourceType' }, EmbdEncRightsExpr => { Struct => { STRUCT_NAME => 'EEREDetails', NAMESPACE => 'Iptc4xmpExt', EncRightsExpr => { }, RightsExprEncType => { }, RightsExprLangId => { }, }, List => 'Bag', }, EmbdEncRightsExprEncRightsExpr => { Flat => 1, Name => 'EmbeddedEncodedRightsExpr' }, EmbdEncRightsExprRightsExprEncType => { Flat => 1, Name => 'EmbeddedEncodedRightsExprType' }, EmbdEncRightsExprRightsExprLangId => { Flat => 1, Name => 'EmbeddedEncodedRightsExprLangID' }, Event => { Writable => 'lang-alt' }, IptcLastEdited => { Name => 'IPTCLastEdited', Groups => { 2 => 'Time' }, %dateTimeInfo, }, LinkedEncRightsExpr => { Struct => { STRUCT_NAME => 'LEREDetails', NAMESPACE => 'Iptc4xmpExt', LinkedRightsExpr => { }, RightsExprEncType => { }, RightsExprLangId => { }, }, List => 'Bag', }, LinkedEncRightsExprLinkedRightsExpr => { Flat => 1, Name => 'LinkedEncodedRightsExpr' }, LinkedEncRightsExprRightsExprEncType => { Flat => 1, Name => 'LinkedEncodedRightsExprType' }, LinkedEncRightsExprRightsExprLangId => { Flat => 1, Name => 'LinkedEncodedRightsExprLangID' }, LocationCreated => { Struct => \%sLocationDetails, Groups => { 2 => 'Location' }, List => 'Bag', }, LocationShown => { Struct => \%sLocationDetails, Groups => { 2 => 'Location' }, List => 'Bag', }, MaxAvailHeight => { Writable => 'integer' }, MaxAvailWidth => { Writable => 'integer' }, ModelAge => { List => 'Bag', Writable => 'integer' }, OrganisationInImageCode => { List => 'Bag' }, OrganisationInImageName => { List => 'Bag' }, PersonInImage => { List => 'Bag' }, PersonInImageWDetails => { Struct => { STRUCT_NAME => 'PersonDetails', NAMESPACE => 'Iptc4xmpExt', PersonId => { List => 'Bag' }, PersonName => { Writable => 'lang-alt' }, PersonCharacteristic => { Struct => \%sCVTermDetails, List => 'Bag', }, PersonDescription => { Writable => 'lang-alt' }, }, List => 'Bag', }, PersonInImageWDetailsPersonId => { Flat => 1, Name => 'PersonInImageId' }, PersonInImageWDetailsPersonName => { Flat => 1, Name => 'PersonInImageName' }, PersonInImageWDetailsPersonCharacteristic => { Flat => 1, Name => 'PersonInImageCharacteristic' }, PersonInImageWDetailsPersonCharacteristicCvId => { Flat => 1, Name => 'PersonInImageCvTermCvId' }, PersonInImageWDetailsPersonCharacteristicCvTermId => { Flat => 1, Name => 'PersonInImageCvTermId' }, PersonInImageWDetailsPersonCharacteristicCvTermName => { Flat => 1, Name => 'PersonInImageCvTermName' }, PersonInImageWDetailsPersonCharacteristicCvTermRefinedAbout => { Flat => 1, Name => 'PersonInImageCvTermRefinedAbout' }, PersonInImageWDetailsPersonDescription => { Flat => 1, Name => 'PersonInImageDescription' }, ProductInImage => { Struct => { STRUCT_NAME => 'ProductDetails', NAMESPACE => 'Iptc4xmpExt', ProductName => { Writable => 'lang-alt' }, ProductGTIN => { }, ProductDescription => { Writable => 'lang-alt' }, }, List => 'Bag', }, ProductInImageProductName => { Flat => 1, Name => 'ProductInImageName' }, ProductInImageProductGTIN => { Flat => 1, Name => 'ProductInImageGTIN' }, ProductInImageProductDescription => { Flat => 1, Name => 'ProductInImageDescription' }, RegistryId => { Name => 'RegistryID', Struct => { STRUCT_NAME => 'RegistryEntryDetails', NAMESPACE => 'Iptc4xmpExt', RegItemId => { }, RegOrgId => { }, }, List => 'Bag', }, RegistryIdRegItemId => { Flat => 1, Name => 'RegistryItemID' }, RegistryIdRegOrgId => { Flat => 1, Name => 'RegistryOrganisationID' }, ); # Adobe Lightroom namespace properties (lr) (ref PH) %Image::ExifTool::XMP::Lightroom = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-lr', 2 => 'Image' }, NAMESPACE => 'lr', TABLE_DESC => 'XMP Adobe Lightroom', NOTES => 'Adobe Lightroom "lr" namespace tags.', privateRTKInfo => { }, hierarchicalSubject => { List => 'Bag' }, ); # Adobe Album namespace properties (album) (ref PH) %Image::ExifTool::XMP::Album = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-album', 2 => 'Image' }, NAMESPACE => 'album', TABLE_DESC => 'XMP Adobe Album', NOTES => 'Adobe Album namespace tags.', Notes => { }, ); # table to add tags in other namespaces %Image::ExifTool::XMP::other = ( GROUPS => { 2 => 'Unknown' }, LANG_INFO => \&GetLangInfo, ); # Composite XMP tags %Image::ExifTool::XMP::Composite = ( # get latitude/logitude reference from XMP lat/long tags # (used to set EXIF GPS position from XMP tags) GPSLatitudeRef => { Require => 'XMP:GPSLatitude', ValueConv => q{ IsFloat($val[0]) and return $val[0] < 0 ? "S" : "N"; $val[0] =~ /^.*([NS])/; return $1; }, PrintConv => { N => 'North', S => 'South', }, }, GPSLongitudeRef => { Require => 'XMP:GPSLongitude', ValueConv => q{ IsFloat($val[0]) and return $val[0] < 0 ? "W" : "E"; $val[0] =~ /^.*([EW])/; return $1; }, PrintConv => { E => 'East', W => 'West', }, }, LensID => { Notes => 'attempt to convert numerical XMP-aux:LensID stored by Adobe applications', Require => { 0 => 'XMP-aux:LensID', 1 => 'Make', }, Desire => { 2 => 'LensInfo', 3 => 'FocalLength', 4 => 'LensModel', 5 => 'MaxApertureValue', }, Inhibit => { 6 => 'Composite:LensID', # don't override existing Composite:LensID }, ValueConv => '$val', PrintConv => 'Image::ExifTool::XMP::PrintLensID($self, @val)', }, Flash => { Notes => 'facilitates copying camera flash information between XMP and EXIF', Desire => { 0 => 'XMP:FlashFired', 1 => 'XMP:FlashReturn', 2 => 'XMP:FlashMode', 3 => 'XMP:FlashFunction', 4 => 'XMP:FlashRedEyeMode', 5 => 'XMP:Flash', # handle structured flash information too }, Writable => 1, PrintHex => 1, SeparateTable => 'EXIF Flash', ValueConv => q{ if (ref $val[5] eq 'HASH') { # copy structure fields into value array my $i = 0; $val[$i++] = $val[5]{$_} foreach qw(Fired Return Mode Function RedEyeMode); } return (($val[0] and lc($val[0]) eq 'true') ? 0x01 : 0) | (($val[1] || 0) << 1) | (($val[2] || 0) << 3) | (($val[3] and lc($val[3]) eq 'true') ? 0x20 : 0) | (($val[4] and lc($val[4]) eq 'true') ? 0x40 : 0); }, PrintConv => \%Image::ExifTool::Exif::flash, WriteAlso => { 'XMP:FlashFired' => '$val & 0x01 ? "True" : "False"', 'XMP:FlashReturn' => '($val & 0x06) >> 1', 'XMP:FlashMode' => '($val & 0x18) >> 3', 'XMP:FlashFunction' => '$val & 0x20 ? "True" : "False"', 'XMP:FlashRedEyeMode' => '$val & 0x40 ? "True" : "False"', }, }, ); # add our composite tags Image::ExifTool::AddCompositeTags('Image::ExifTool::XMP'); #------------------------------------------------------------------------------ # AutoLoad our writer routines when necessary # sub AUTOLOAD { return Image::ExifTool::DoAutoLoad($AUTOLOAD, @_); } #------------------------------------------------------------------------------ # Escape necessary XML characters in UTF-8 string # Inputs: 0) string to be escaped # Returns: escaped string my %charName = ('"'=>'quot', '&'=>'amp', "'"=>'#39', '<'=>'lt', '>'=>'gt'); sub EscapeXML($) { my $str = shift; $str =~ s/([&><'"])/&$charName{$1};/sg; # escape necessary XML characters return $str; } #------------------------------------------------------------------------------ # Unescape XML character references (entities and numerical) # Inputs: 0) string to be unescaped # 1) optional hash reference to convert entity names to numbers # Returns: unescaped string my %charNum = ('quot'=>34, 'amp'=>38, 'apos'=>39, 'lt'=>60, 'gt'=>62); sub UnescapeXML($;$) { my ($str, $conv) = @_; $conv = \%charNum unless $conv; $str =~ s/&(#?\w+);/UnescapeChar($1,$conv)/sge; return $str; } #------------------------------------------------------------------------------ # Escape string for XML, ensuring valid XML and UTF-8 # Inputs: 0) string # Returns: escaped string sub FullEscapeXML($) { my $str = shift; $str =~ s/([&><'"])/&$charName{$1};/sg; # escape necessary XML characters $str =~ s/\\/&#92;/sg; # escape backslashes too # then use C-escape sequences for invalid characters if ($str =~ /[\0-\x1f]/ or IsUTF8(\$str) < 0) { $str =~ s/([\0-\x1f\x80-\xff])/sprintf("\\x%.2x",ord $1)/sge; } return $str; } #------------------------------------------------------------------------------ # Unescape XML/C escaped string # Inputs: 0) string # Returns: unescaped string sub FullUnescapeXML($) { my $str = shift; # unescape C escape sequences first $str =~ s/\\x([\da-f]{2})/chr(hex($1))/sge; my $conv = \%charNum; $str =~ s/&(#?\w+);/UnescapeChar($1,$conv)/sge; return $str; } #------------------------------------------------------------------------------ # Convert XML character reference to UTF-8 # Inputs: 0) XML character reference stripped of the '&' and ';' (eg. 'quot', '#34', '#x22') # 1) hash reference for looking up character numbers by name # Returns: UTF-8 equivalent (or original character on conversion error) sub UnescapeChar($$) { my ($ch, $conv) = @_; my $val = $$conv{$ch}; unless (defined $val) { if ($ch =~ /^#x([0-9a-fA-F]+)$/) { $val = hex($1); } elsif ($ch =~ /^#(\d+)$/) { $val = $1; } else { return "&$ch;"; # should issue a warning here? [no] } } return chr($val) if $val < 0x80; # simple ASCII return pack('C0U', $val) if $] >= 5.006001; return Image::ExifTool::PackUTF8($val); } #------------------------------------------------------------------------------ # Does a string contain valid UTF-8 characters? # Inputs: 0) string reference # Returns: 0=regular ASCII, -1=invalid UTF-8, 1=valid UTF-8 with maximum 16-bit # wide characters, 2=valid UTF-8 requiring 32-bit wide characters # Notes: Changes current string position # (see http://www.fileformat.info/info/unicode/utf8.htm for help understanding this) sub IsUTF8($) { my $strPt = shift; pos($$strPt) = 0; # start at beginning of string return 0 unless $$strPt =~ /([\x80-\xff])/g; my $rtnVal = 1; for (;;) { my $ch = ord($1); # minimum lead byte for 2-byte sequence is 0xc2 (overlong sequences # not allowed), 0xf8-0xfd are restricted by RFC 3629 (no 5 or 6 byte # sequences), and 0xfe and 0xff are not valid in UTF-8 strings return -1 if $ch < 0xc2 or $ch >= 0xf8; # determine number of bytes remaining in sequence my $n; if ($ch < 0xe0) { $n = 1; } elsif ($ch < 0xf0) { $n = 2; } else { $n = 3; # character code is greater than 0xffff if more than 2 extra bytes # were required in the UTF-8 character $rtnVal = 2; } return -1 unless $$strPt =~ /\G[\x80-\xbf]{$n}/g; last unless $$strPt =~ /([\x80-\xff])/g; } return $rtnVal; } #------------------------------------------------------------------------------ # Fix malformed UTF8 (by replacing bad bytes with '?') # Inputs: 0) string reference # Returns: true if string was fixed, and updates string sub FixUTF8($) { my $strPt = shift; my $fixed; pos($$strPt) = 0; # start at beginning of string for (;;) { last unless $$strPt =~ /([\x80-\xff])/g; my $ch = ord($1); my $pos = pos($$strPt); # (see comments in IsUTF8() above) if ($ch >= 0xc2 and $ch < 0xf8) { my $n = $ch < 0xe0 ? 1 : ($ch < 0xf0 ? 2 : 3); next if $$strPt =~ /\G[\x80-\xbf]{$n}/g; } # replace bad character with '?' substr($$strPt, $pos-1, 1) = '?'; pos($$strPt) = $fixed = $pos; } return $fixed; } #------------------------------------------------------------------------------ # Utility routine to decode a base64 string # Inputs: 0) base64 string # Returns: reference to decoded data sub DecodeBase64($) { local($^W) = 0; # unpack('u',...) gives bogus warning in 5.00[123] my $str = shift; # truncate at first unrecognized character (base 64 data # may only contain A-Z, a-z, 0-9, +, /, =, or white space) $str =~ s/[^A-Za-z0-9+\/= \t\n\r\f].*//s; # translate to uucoded and remove padding and white space $str =~ tr/A-Za-z0-9+\/= \t\n\r\f/ -_/d; # convert the data to binary in chunks my $chunkSize = 60; my $uuLen = pack('c', 32 + $chunkSize * 3 / 4); # calculate length byte my $dat = ''; my ($i, $substr); # loop through the whole chunks my $len = length($str) - $chunkSize; for ($i=0; $i<=$len; $i+=$chunkSize) { $substr = substr($str, $i, $chunkSize); # get a chunk of the data $dat .= unpack('u', $uuLen . $substr); # decode it } $len += $chunkSize; # handle last partial chunk if necessary if ($i < $len) { $uuLen = pack('c', 32 + ($len-$i) * 3 / 4); # recalculate length $substr = substr($str, $i, $len-$i); # get the last partial chunk $dat .= unpack('u', $uuLen . $substr); # decode it } return \$dat; } #------------------------------------------------------------------------------ # Generate a tag ID for this XMP tag # Inputs: 0) tag property name list ref, 1) array ref for receiving structure property list # 2) array for receiving namespace list # Returns: tagID and outtermost interesting namespace (or '' if no namespace) sub GetXMPTagID($;$$) { my ($props, $structProps, $nsList) = @_; my ($tag, $prop, $namespace); foreach $prop (@$props) { # split name into namespace and property name # (Note: namespace can be '' for property qualifiers) my ($ns, $nm) = ($prop =~ /(.*?):(.*)/) ? ($1, $2) : ('', $prop); if ($ignoreNamespace{$ns} or $ignoreProp{$prop}) { # special case: don't ignore rdf numbered items unless ($prop =~ /^rdf:(_\d+)$/) { # save list index if necessary for structures if ($structProps and @$structProps and $prop =~ /^rdf:li (\d+)$/) { push @{$$structProps[-1]}, $1; } next; } $tag .= $1 if defined $tag; } else { $nm =~ s/ .*//; # remove nodeID if it exists # all uppercase is ugly, so convert it if ($nm !~ /[a-z]/) { my $xlat = $stdXlatNS{$ns} || $ns; my $info = $Image::ExifTool::XMP::Main{$xlat}; my $table; if (ref $info eq 'HASH' and $$info{SubDirectory}) { $table = GetTagTable($$info{SubDirectory}{TagTable}); } unless ($table and $$table{$nm}) { $nm = lc($nm); $nm =~ s/_([a-z])/\u$1/g; } } if (defined $tag) { $tag .= ucfirst($nm); # add to tag name } else { $tag = $nm; } # save structure information if necessary if ($structProps) { push @$structProps, [ $nm ]; push @$nsList, $ns if $nsList; } } # save namespace of first property to contribute to tag name $namespace = $ns unless $namespace; } if (wantarray) { return ($tag, $namespace || ''); } else { return $tag; } } #------------------------------------------------------------------------------ # Register namespace for specified user-defined table # Inputs: 0) tag/structure table ref # Returns: namespace prefix sub RegisterNamespace($) { my $table = shift; return $$table{NAMESPACE} unless ref $$table{NAMESPACE}; my $nsRef = $$table{NAMESPACE}; # recognize as either a list or hash my $ns; if (ref $nsRef eq 'ARRAY') { $ns = $$nsRef[0]; $nsURI{$ns} = $$nsRef[1]; $uri2ns{$$nsRef[1]} = $ns; } else { # must be a hash my @ns = sort keys %$nsRef; # allow multiple namespace definitions while (@ns) { $ns = pop @ns; if ($nsURI{$ns} and $nsURI{$ns} ne $$nsRef{$ns}) { warn "User-defined namespace prefix '$ns' conflicts with existing namespace\n"; } $nsURI{$ns} = $$nsRef{$ns}; $uri2ns{$$nsRef{$ns}} = $ns; } } return $$table{NAMESPACE} = $ns; } #------------------------------------------------------------------------------ # Generate flattened tags and add to table # Inputs: 0) tag table ref, 1) tag ID for Struct tag (if not defined, whole table is done), # 2) flag to not expand sub-structures # Returns: number of tags added (not counting those just initialized) # Notes: Must have verified that $$tagTablePtr{$tagID}{Struct} exists before calling this routine # - makes sure that the tagInfo Struct is a HASH reference sub AddFlattenedTags($;$$) { local $_; my ($tagTablePtr, $tagID, $noSubStruct) = @_; my $count = 0; my @tagIDs; if (defined $tagID) { push @tagIDs, $tagID; } else { foreach $tagID (TagTableKeys($tagTablePtr)) { my $tagInfo = $$tagTablePtr{$tagID}; next unless ref $tagInfo eq 'HASH' and $$tagInfo{Struct}; push @tagIDs, $tagID; } } # loop through specified tags foreach $tagID (@tagIDs) { my $tagInfo = $$tagTablePtr{$tagID}; $$tagInfo{Flattened} and next; # only generate flattened tags once $$tagInfo{Flattened} = 1; my $strTable = $$tagInfo{Struct}; unless (ref $strTable) { # (allow a structure name for backward compatibility only) my $strName = $strTable; $strTable = $Image::ExifTool::UserDefined::xmpStruct{$strTable} or next; $$strTable{STRUCT_NAME} or $$strTable{STRUCT_NAME} = "XMP $strName"; $$tagInfo{Struct} = $strTable; # replace old-style name with HASH ref delete $$tagInfo{SubDirectory}; # deprecated use of SubDirectory in Struct tags } # do not add flattened tags to variable-namespace structures next if exists $$strTable{NAMESPACE} and not defined $$strTable{NAMESPACE}; # get prefix for flattened tag names my $flat = (defined $$tagInfo{FlatName} ? $$tagInfo{FlatName} : $$tagInfo{Name}); # get family 2 group name for this structure tag my ($tagG2, $field); $tagG2 = $$tagInfo{Groups}{2} if $$tagInfo{Groups}; $tagG2 or $tagG2 = $$tagTablePtr{GROUPS}{2}; foreach $field (keys %$strTable) { next if $specialStruct{$field}; my $fieldInfo = $$strTable{$field}; next if $$fieldInfo{LangCode}; # don't flatten lang-alt tags next if $$fieldInfo{Struct} and $noSubStruct; # don't expand sub-structures if specified # build a tag ID for the corresponding flattened tag my $fieldName = ucfirst($field); my $flatField = $$fieldInfo{FlatName} || $fieldName; my $flatID = $tagID . $fieldName; my $flatInfo = $$tagTablePtr{$flatID}; if ($flatInfo) { ref $flatInfo eq 'HASH' or warn("$flatInfo is not a HASH!\n"), next; # (to be safe) # pre-defined flattened tags should have Flat flag set if (not defined $$flatInfo{Flat} and $Image::ExifTool::debug) { warn "Missing Flat flag for $$flatInfo{Name}\n"; } $$flatInfo{Flat} = 0; # copy all missing entries from field information foreach (keys %$fieldInfo) { # must not copy PropertyPath (but can't delete it afterwards # because the flat tag may already have this set) next if $_ eq 'PropertyPath' or defined $$flatInfo{$_}; # copy the property (making a copy of the Groups hash) $$flatInfo{$_} = $_ eq 'Groups' ? { %{$$fieldInfo{$_}} } : $$fieldInfo{$_}; } # (NOTE: Can NOT delete Groups because we need them if GotGroups was done) # re-generate List flag unless it is set to 0 delete $$flatInfo{List} if $$flatInfo{List}; } else { # generate new flattened tag information based on structure field my $flatName = $flat . $flatField; $flatInfo = { %$fieldInfo, Name => $flatName, Flat => 0 }; # make a copy of the Groups hash if necessary $$flatInfo{Groups} = { %{$$fieldInfo{Groups}} } if $$fieldInfo{Groups}; # add new flattened tag to table AddTagToTable($tagTablePtr, $flatID, $flatInfo); ++$count; } # propagate List flag (unless set to 0 in pre-defined flattened tag) unless (defined $$flatInfo{List}) { $$flatInfo{List} = $$fieldInfo{List} || 1 if $$fieldInfo{List} or $$tagInfo{List}; } # set group 2 name from the first existing family 2 group in the: # 1) structure field Groups, 2) structure table GROUPS, 3) structure tag Groups if ($$fieldInfo{Groups} and $$fieldInfo{Groups}{2}) { $$flatInfo{Groups}{2} = $$fieldInfo{Groups}{2}; } elsif ($$strTable{GROUPS} and $$strTable{GROUPS}{2}) { $$flatInfo{Groups}{2} = $$strTable{GROUPS}{2}; } else { $$flatInfo{Groups}{2} = $tagG2; } # save reference to top-level structure $$flatInfo{RootTagInfo} = $$tagInfo{RootTagInfo} || $tagInfo; # recursively generate flattened tags for sub-structures next unless $$flatInfo{Struct}; length($flatID) > 250 and warn("Possible deep recursion for tag $flatID\n"), last; # reset flattened tag just in case we flattened hierarchy in the wrong order # because we must start from the outtermost structure to get the List flags right # (this should only happen when building tag tables) delete $$flatInfo{Flattened}; $count += AddFlattenedTags($tagTablePtr, $flatID, $$flatInfo{NoSubStruct}); } } return $count; } #------------------------------------------------------------------------------ # Get localized version of tagInfo hash # Inputs: 0) tagInfo hash ref, 1) language code (eg. "x-default") # Returns: new tagInfo hash ref, or undef if invalid sub GetLangInfo($$) { my ($tagInfo, $langCode) = @_; # only allow alternate language tags in lang-alt lists return undef unless $$tagInfo{Writable} and $$tagInfo{Writable} eq 'lang-alt'; $langCode =~ tr/_/-/; # RFC 3066 specifies '-' as a separator my $langInfo = Image::ExifTool::GetLangInfo($tagInfo, $langCode); return $langInfo; } #------------------------------------------------------------------------------ # Get standard case for language code # Inputs: 0) Language code # Returns: Language code in standard case sub StandardLangCase($) { my $lang = shift; # make 2nd subtag uppercase only if it is 2 letters return lc($1) . uc($2) . lc($3) if $lang =~ /^([a-z]{2,3}|[xi])(-[a-z]{2})\b(.*)/i; return lc($lang); } #------------------------------------------------------------------------------ # Scan for XMP in a file # Inputs: 0) ExifTool object ref, 1) RAF reference # Returns: 1 if xmp was found, 0 otherwise # Notes: Currently only recognizes UTF8-encoded XMP sub ScanForXMP($$) { my ($et, $raf) = @_; my ($buff, $xmp); my $lastBuff = ''; $et->VPrint(0,"Scanning for XMP\n"); for (;;) { defined $buff or $raf->Read($buff, 65536) or return 0; unless (defined $xmp) { $lastBuff .= $buff; unless ($lastBuff =~ /(<\?xpacket begin=)/g) { # must keep last 15 bytes to match 16-byte "xpacket begin" string $lastBuff = length($buff) <= 15 ? $buff : substr($buff, -15); undef $buff; next; } $xmp = $1; $buff = substr($lastBuff, pos($lastBuff)); } my $pos = length($xmp) - 18; # (18 = length("<?xpacket end...") - 1) $xmp .= $buff; # add new data to our XMP pos($xmp) = $pos if $pos > 0; # set start for "xpacket end" scan if ($xmp =~ /<\?xpacket end=['"][wr]['"]\?>/g) { $buff = substr($xmp, pos($xmp)); # save data after end of XMP $xmp = substr($xmp, 0, pos($xmp)); # isolate XMP # check XMP for validity (not valid if it contains null bytes) $pos = rindex($xmp, "\0") + 1 or last; $lastBuff = substr($xmp, $pos); # re-parse beginning after last null byte undef $xmp; } else { undef $buff; } } unless ($$et{VALUE}{FileType}) { $$et{FILE_TYPE} = $$et{FILE_EXT}; $et->SetFileType('<unknown file containing XMP>', undef, ''); } my %dirInfo = ( DataPt => \$xmp, DirLen => length $xmp, DataLen => length $xmp, ); ProcessXMP($et, \%dirInfo); return 1; } #------------------------------------------------------------------------------ # Print conversion for XMP-aux:LensID # Inputs: 0) ExifTool ref, 1) LensID, 2) Make, 3) LensInfo, 4) FocalLength, # 5) LensModel, 6) MaxApertureValue # (yes, this is ugly -- blame Adobe) sub PrintLensID(@) { local $_; my ($et, $id, $make, $info, $focalLength, $lensModel, $maxAv) = @_; my ($mk, $printConv); my %alt = ( Pentax => 'Ricoh' ); # Pentax changed its name to Ricoh # missing: Olympus (no XMP:LensID written by Adobe) foreach $mk (qw(Canon Nikon Pentax Sony Sigma Samsung Leica)) { next unless $make =~ /$mk/i or ($alt{$mk} and $make =~ /$alt{$mk}/i); # get name of module containing the lens lookup (default "Make.pm") my $mod = { Sigma => 'SigmaRaw', Leica => 'Panasonic' }->{$mk} || $mk; require "Image/ExifTool/$mod.pm"; # get the name of the lens name lookup (default "makeLensTypes") # (canonLensTypes, pentaxLensTypes, nikonLensIDs, etc) my $convName = "Image::ExifTool::${mod}::" . ({ Nikon => 'nikonLensIDs' }->{$mk} || lc($mk) . 'LensTypes'); no strict 'refs'; %$convName or last; my $printConv = \%$convName; use strict 'refs'; # sf = short focal # lf = long focal # sa = max aperture at short focal # la = max aperture at long focal my ($sf, $lf, $sa, $la); if ($info) { my @a = split ' ', $info; $_ eq 'undef' and $_ = undef foreach @a; ($sf, $lf, $sa, $la) = @a; # for Sony and ambiguous LensID, $info data may be incorrect: # use only if it agrees with $focalLength and $maxAv (ref JR) if ($mk eq 'Sony' and (($focalLength and (($sf and $focalLength < $sf - 0.5) or ($lf and $focalLength > $lf + 0.5))) or ($maxAv and (($sa and $maxAv < $sa - 0.15) or ($la and $maxAv > $la + 0.15))))) { undef $sf; undef $lf; undef $sa; undef $la; } elsif ($maxAv) { # (using the short-focal-length max aperture in place of MaxAperture # is a bad approximation, so don't do this if MaxApertureValue exists) undef $sa; } } if ($mk eq 'Pentax' and $id =~ /^\d+$/) { # for Pentax, CS4 stores an int16u, but we use 2 x int8u $id = join(' ', unpack('C*', pack('n', $id))); } my $str = $$printConv{$id} || "Unknown ($id)"; # Nikon is a special case because Adobe doesn't store the full LensID if ($mk eq 'Nikon') { my $hex = sprintf("%.2X", $id); my (%newConv, %used); my $i = 0; foreach (grep /^$hex /, keys %$printConv) { my $lens = $$printConv{$_}; next if $used{$lens}; # avoid duplicates $used{$lens} = 1; $newConv{$i ? "$id.$i" : $id} = $lens; ++$i; } $printConv = \%newConv; } return Image::ExifTool::Exif::PrintLensID($et, $str, $printConv, undef, $id, $focalLength, $sa, $maxAv, $sf, $lf, $lensModel); } return "Unknown ($id)"; } #------------------------------------------------------------------------------ # Convert XMP date/time to EXIF format # Inputs: 0) XMP date/time string, 1) set if we aren't sure this is a date # Returns: EXIF date/time sub ConvertXMPDate($;$) { my ($val, $unsure) = @_; if ($val =~ /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}:\d{2})(:\d{2})?\s*(\S*)$/) { my $s = $5 || ''; # seconds may be missing $val = "$1:$2:$3 $4$s$6"; # convert back to EXIF time format } elsif (not $unsure and $val =~ /^(\d{4})(-\d{2}){0,2}/) { $val =~ tr/-/:/; } return $val; } #------------------------------------------------------------------------------ # Convert rational string value # Inputs: 0) string (converted to number, 'inf' or 'undef' on return if rational) # Returns: true if value was converted sub ConvertRational($) { my $val = $_[0]; $val =~ m{^(-?\d+)/(-?\d+)$} or return undef; if ($2 != 0) { $_[0] = $1 / $2; # calculate quotient } elsif ($1) { $_[0] = 'inf'; } else { $_[0] = 'undef'; } return 1; } #------------------------------------------------------------------------------ # Convert a string of floating point values to rationals # Inputs: 0) string of floating point numbers separated by spaces # Returns: string of rational numbers separated by spaces sub ConvertRationalList($) { my $val = shift; my @vals = split ' ', $val; return $val unless @vals == 4; foreach (@vals) { ConvertRational($_) or return $val; } return join ' ', @vals; } #------------------------------------------------------------------------------ # We found an XMP property name/value # Inputs: 0) ExifTool object ref, 1) Pointer to tag table # 2) reference to array of XMP property names (last is current property) # 3) property value, 4) attribute hash ref (for 'xml:lang' or 'rdf:datatype') # Returns: 1 if valid tag was found sub FoundXMP($$$$;$) { local $_; my ($et, $tagTablePtr, $props, $val, $attrs) = @_; my ($lang, @structProps, $rawVal, $rational); my ($tag, $ns) = GetXMPTagID($props, $$et{OPTIONS}{Struct} ? \@structProps : undef); return 0 unless $tag; # ignore things that aren't valid tags # translate namespace if necessary $ns = $stdXlatNS{$ns} if $stdXlatNS{$ns}; my $info = $$tagTablePtr{$ns}; my ($table, $added, $xns, $tagID); if ($info) { $table = $$info{SubDirectory}{TagTable} or warn "Missing TagTable for $tag!\n"; } elsif ($$props[0] eq 'svg:svg') { if (not $ns) { # disambiguate MetadataID by adding back the 'metadata' we ignored $tag = 'metadataId' if $tag eq 'id' and $$props[1] eq 'svg:metadata'; # use SVG namespace in SVG files if nothing better to use $table = 'Image::ExifTool::XMP::SVG'; } elsif (not grep /^rdf:/, @$props) { # only other SVG information if not inside RDF (call it XMP if in RDF) $table = 'Image::ExifTool::XMP::otherSVG'; } } if (not $ns and $$tagTablePtr{GROUPS}{0} ne 'XMP') { # this is a simple XML table (no namespaces) $tagID = $tag; } else { # look up this tag in the appropriate table $table or $table = 'Image::ExifTool::XMP::other'; $tagTablePtr = GetTagTable($table); if ($$tagTablePtr{NAMESPACE}) { $tagID = $tag; } else { # add XMP namespace prefix to avoid collisions in variable-namespace tables $xns = $xmpNS{$ns} || $ns; $tagID = "$xns:$tag"; # add namespace to top-level structure property $structProps[0][0] = "$xns:" . $structProps[0][0] if @structProps; } } my $tagInfo = $et->GetTagInfo($tagTablePtr, $tagID); $lang = $$attrs{'xml:lang'} if $attrs; # must add a new tag table entry if this tag isn't pre-defined # (or initialize from structure field if this is a pre-defined flattened tag) NoLoop: while (not $tagInfo or $$tagInfo{Flat}) { my (@tagList, @nsList); GetXMPTagID($props, \@tagList, \@nsList); my ($ta, $t, $ti, $addedFlat, $i, $j); # build tag ID strings for each level in the property path foreach $ta (@tagList) { # insert tag ID in index 1 of tagList list $t = $$ta[1] = $t ? $t . ucfirst($$ta[0]) : $$ta[0]; # generate flattened tags for top-level structure if necessary next if defined $addedFlat; $ti = $$tagTablePtr{$t} or next; next unless ref $ti eq 'HASH' and $$ti{Struct}; $addedFlat = AddFlattenedTags($tagTablePtr, $t); if ($tagInfo) { # all done if we just wanted to initialize the flattened tag if ($$tagInfo{Flat}) { warn "Orphan tagInfo with Flat flag set: $$tagInfo{Name}\n"; delete $$tagInfo{Flat}; } last NoLoop; } # all done if we generated the tag we are looking for $tagInfo = $$tagTablePtr{$tagID} and last NoLoop if $addedFlat; } my $name = ucfirst($tag); # search for the innermost containing structure # (in case tag is an unknown field in a known structure) # (only necessary if we found a structure above) if (defined $addedFlat) { my $t2 = ''; for ($i=$#tagList-1; $i>=0; --$i) { $t = $tagList[$i][1]; $t2 = $tagList[$i+1][0] . ucfirst($t2); # build relative tag id $ti = $$tagTablePtr{$t} or next; next unless ref $ti eq 'HASH'; my $strTable = $$ti{Struct} or next; my $flat = (defined $$ti{FlatName} ? $$ti{FlatName} : $$ti{Name}); $name = $flat . ucfirst($t2); # don't continue if structure is known but field is not last if $$strTable{NAMESPACE} or not exists $$strTable{NAMESPACE}; # this is a variable-namespace structure, so we must: # 1) get tagInfo from corresponding top-level XMP tag if it exists # 2) add new entry in this tag table, but with namespace prefix on tag ID my $n = $nsList[$i+1]; # namespace of structure field # translate to standard ExifTool namespace $n = $stdXlatNS{$n} if $stdXlatNS{$n}; my $xn = $xmpNS{$n} || $n; # standard XMP namespace # no need to continue with variable-namespace logic if # we are in our own namespace (right?) last if $xn eq ($$tagTablePtr{NAMESPACE} || ''); $tagID = "$xn:$tag"; # add namespace to avoid collisions # change structure properties to add the standard XMP namespace # prefix for this field (needed for variable-namespace fields) if (@structProps) { $structProps[$i+1][0] = "$xn:" . $structProps[$i+1][0]; } # copy tagInfo entries from the existing top-level XMP tag my $tg = $Image::ExifTool::XMP::Main{$n}; last unless ref $tg eq 'HASH' and $$tg{SubDirectory}; my $tbl = GetTagTable($$tg{SubDirectory}{TagTable}) or last; my $sti = $et->GetTagInfo($tbl, $t2); if (not $sti or $$sti{Flat}) { # again, we must initialize flattened tags if necessary # (but don't bother to recursively apply full logic to # allow nested variable-namespace strucures until someone # actually wants to do such a silly thing) my $t3 = ''; for ($j=$i+1; $j<@tagList; ++$j) { $t3 = $tagList[$j][0] . ucfirst($t3); my $ti3 = $$tbl{$t3} or next; next unless ref $ti3 eq 'HASH' and $$ti3{Struct}; last unless AddFlattenedTags($tbl, $t3); $sti = $$tbl{$t2}; last; } last unless $sti; } $tagInfo = { %$sti, Name => $flat . $$sti{Name}, WasAdded => 1, }; # be careful not to copy elements we shouldn't... delete $$tagInfo{Description}; # Description will be different # can't copy group hash because group 1 will be different and # we need to check this when writing tag to a specific group delete $$tagInfo{Groups}; $$tagInfo{Groups}{2} = $$sti{Groups}{2} if $$sti{Groups}; last; } } $tagInfo or $tagInfo = { Name => $name, WasAdded => 1 }; # add tag Namespace entry for tags in variable-namespace tables $$tagInfo{Namespace} = $xns if $xns; if ($$et{curURI}{$ns} and $$et{curURI}{$ns} =~ m{^http://ns.exiftool.ca/(.*?)/(.*?)/}) { my %grps = ( 0 => $1, 1 => $2 ); # apply a little magic to recover original group names # from this exiftool-written RDF/XML file if ($grps{1} =~ /^\d/) { # URI's with only family 0 are internal tags from the source file, # so change the group name to avoid confusion with tags from this file $grps{1} = "XML-$grps{0}"; $grps{0} = 'XML'; } $$tagInfo{Groups} = \%grps; # flag to avoid setting group 1 later $$tagInfo{StaticGroup1} = 1; } # construct tag information for this unknown tag # -> make this a List or lang-alt tag if necessary if (@$props > 2 and $$props[-1] =~ /^rdf:li \d+$/ and $$props[-2] =~ /^rdf:(Bag|Seq|Alt)$/) { if ($lang and $1 eq 'Alt') { $$tagInfo{Writable} = 'lang-alt'; } else { $$tagInfo{List} = $1; } # tried this, but maybe not a good idea for complex structures: #} elsif (grep / /, @$props) { # $$tagInfo{List} = 1; } AddTagToTable($tagTablePtr, $tagID, $tagInfo); $added = 1; last; } # decode value if necessary (et:encoding was used before exiftool 7.71) if ($attrs) { my $enc = $$attrs{'rdf:datatype'} || $$attrs{'et:encoding'}; if ($enc and $enc =~ /base64/) { $val = DecodeBase64($val); # (now a value ref) $val = $$val unless length $$val > 100 or $$val =~ /[\0-\x08\x0b\0x0c\x0e-\x1f]/; } } if (defined $lang and lc($lang) ne 'x-default') { $lang = StandardLangCase($lang); my $langInfo = GetLangInfo($tagInfo, $lang); $tagInfo = $langInfo if $langInfo; } # un-escape XML character entities (handling CDATA) pos($val) = 0; if ($val =~ /<!\[CDATA\[(.*?)\]\]>/sg) { my $p = pos $val; # unescape everything up to the start of the CDATA section # (the length of "<[[CDATA[]]>" is 12 characters) my $v = UnescapeXML(substr($val, 0, $p - length($1) - 12)) . $1; while ($val =~ /<!\[CDATA\[(.*?)\]\]>/sg) { my $p1 = pos $val; $v .= UnescapeXML(substr($val, $p, $p1 - length($1) - 12)) . $1; $p = $p1; } $val = $v . UnescapeXML(substr($val, $p)); } else { $val = UnescapeXML($val); } # decode from UTF8 $val = $et->Decode($val, 'UTF8'); # convert rational and date values to a more sensible format my $fmt = $$tagInfo{Writable}; my $new = $$tagInfo{WasAdded} && $$et{OPTIONS}{XMPAutoConv}; if ($fmt or $new) { $rawVal = $val; # save raw value for verbose output if (($new or $fmt eq 'rational') and ConvertRational($val)) { $rational = $rawVal; } else { $val = ConvertXMPDate($val, $new) if $new or $fmt eq 'date'; } # protect against large binary data in unknown tags $$tagInfo{Binary} = 1 if $new and length($val) > 65536; } # store the value for this tag my $key = $et->FoundTag($tagInfo, $val) or return 0; # save original components of rational numbers (used when copying) $$et{RATIONAL}{$key} = $rational if defined $rational; # save structure/list information if necessary if (@structProps and (@structProps > 1 or defined $structProps[0][1]) and not $$et{NO_STRUCT}) { $$et{TAG_EXTRA}{$key}{Struct} = \@structProps; $$et{IsStruct} = 1; } if ($ns and not $$tagInfo{StaticGroup1}) { # set group1 dynamically according to the namespace $et->SetGroup($key, "$$tagTablePtr{GROUPS}{0}-$ns"); } if ($$et{OPTIONS}{Verbose}) { if ($added) { my $g1 = $et->GetGroup($key, 1); $et->VPrint(0, $$et{INDENT}, "[adding $g1:$tag]\n"); } my $tagID = join('/',@$props); $et->VerboseInfo($tagID, $tagInfo, Value => $rawVal || $val); } return 1; } #------------------------------------------------------------------------------ # Recursively parse nested XMP data element # Inputs: 0) ExifTool ref, 1) tag table ref, 2) XMP data ref # 3) offset to start of XMP element, 4) offset to end of XMP element # 5) reference to array of enclosing XMP property names (undef if none) # 6) reference to blank node information hash # Returns: Number of contained XMP elements sub ParseXMPElement($$$;$$$$) { my ($et, $tagTablePtr, $dataPt, $start, $end, $propListPt, $blankInfo) = @_; my ($count, $nItems) = (0, 0); my $isWriting = $$et{XMP_CAPTURE}; my $isSVG = $$et{XMP_IS_SVG}; my $saveNS; # save xlatNS lookup if changed for the scope of this element # get our parse procs my ($attrProc, $foundProc); if ($$et{XMPParseOpts}) { $attrProc = $$et{XMPParseOpts}{AttrProc}; $foundProc = $$et{XMPParseOpts}{FoundProc} || \&FoundXMP; } else { $foundProc = \&FoundXMP; } $start or $start = 0; $end or $end = length $$dataPt; $propListPt or $propListPt = [ ]; my $processBlankInfo; # create empty blank node information hash if necessary $blankInfo or $blankInfo = $processBlankInfo = { Prop => { } }; # keep track of current nodeID at this nesting level my $oldNodeID = $$blankInfo{NodeID}; pos($$dataPt) = $start; # lookup for translating namespace prefixes my $xlatNS = $$et{xlatNS}; Element: for (;;) { # all done if there isn't enough data for another element # (the smallest possible element is 4 bytes, eg. "<a/>") last if pos($$dataPt) > $end - 4; # reset nodeID before processing each element my $nodeID = $$blankInfo{NodeID} = $oldNodeID; # get next element last if $$dataPt !~ m{<([?/]?)([-\w:.\x80-\xff]+)([^>]*)>}sg or pos($$dataPt) > $end; # (the only reason we match '<[?/]' is to keep from scanning past the # "<?xpacket end..." terminator or other closing token, so next if $1; my ($prop, $attrs) = ($2, $3); my $valStart = pos($$dataPt); my $valEnd; # only look for closing token if this is not an empty element # (empty elements end with '/', eg. <a:b/>) if ($attrs !~ s/\/$//) { my $nesting = 1; my $tok; for (;;) { # this match fails with perl 5.6.2 (perl bug!), but it works without # the '(.*?)', so we must do it differently... # $$dataPt =~ m/(.*?)<\/$prop>/sg or last Element; # my $val2 = $1; # find next matching closing token, or the next opening token # of a nested same-named element if ($$dataPt !~ m{<(/?)$prop([-\w:.\x80-\xff]*)(.*?(/?))>}sg or pos($$dataPt) > $end) { $et->Warn("XMP format error (no closing tag for $prop)"); last Element; } next if $2; # ignore opening properties with different names if ($1) { next if --$nesting; $valEnd = pos($$dataPt) - length($prop) - length($3) - 3; last; # this element is complete } # this is a nested opening token (or empty element) ++$nesting unless $4; } } else { $valEnd = $valStart; } $start = pos($$dataPt); # start from here the next time around # extract property attributes my ($parseResource, %attrs, @attrs); while ($attrs =~ m/(\S+?)\s*=\s*(['"])(.*?)\2/sg) { my ($attr, $val) = ($1, $3); # handle namespace prefixes (defined by xmlns:PREFIX, or used with PREFIX:tag) if ($attr =~ /(.*?):/) { if ($1 eq 'xmlns') { my $ns = substr($attr, 6); my $stdNS = $uri2ns{$val}; unless ($stdNS) { my $try = $val; # patch for Nikon NX2 URI bug for Microsoft PhotoInfo namespace $try =~ s{/$}{} or $try .= '/'; $stdNS = $uri2ns{$try}; if ($stdNS) { $val = $try; $et->WarnOnce("Fixed incorrect URI for xmlns:$ns", 1); } else { # look for same namespace with different version number $try = quotemeta $val; # (note: escapes slashes too) $try =~ s{\\/\d+\\\.\d+(\\/|$)}{\\/\\d+\\\.\\d+$1}; my ($good) = grep /^$try$/, keys %uri2ns; if ($good) { $stdNS = $uri2ns{$good}; $et->VPrint(0, $$et{INDENT}, "[different $stdNS version: $val]\n"); } } } # tame wild namespace prefixes (patches Microsoft stupidity) my $newNS; if ($stdNS) { # use standard namespace prefix if pre-defined if ($stdNS ne $ns) { $newNS = $stdNS; } elsif ($$xlatNS{$ns}) { # this prefix is re-defined to the standard prefix in this scope $newNS = ''; } } elsif ($$et{curNS}{$val}) { # use a consistent prefix over the entire XMP for a given namespace URI $newNS = $$et{curNS}{$val} if $$et{curNS}{$val} ne $ns; } else { my $curURI = $$et{curURI}; my $curNS = $$et{curNS}; my $usedNS = $ns; # use unique prefixes for all namespaces across the entire XMP if ($$curURI{$ns} or $nsURI{$ns}) { # generate a temporary namespace prefix to resolve any conflict my $i = 0; ++$i while $$curURI{"tmp$i"}; $newNS = $usedNS = "tmp$i"; } # keep track of the namespace prefixes and URI's used in this XMP $$curNS{$val} = $usedNS; $$curURI{$usedNS} = $val; } if (defined $newNS) { # save translation used in containing scope if necessary # create new namespace translation for the scope of this element $saveNS or $saveNS = $xlatNS, $xlatNS = $$et{xlatNS} = { %$xlatNS }; if (length $newNS) { # use the new namespace prefix $$xlatNS{$ns} = $newNS; $attr = 'xmlns:' . $newNS; } else { delete $$xlatNS{$ns}; } } } elsif ($$xlatNS{$1}) { $attr = $$xlatNS{$1} . substr($attr, length($1)); } } push @attrs, $attr; # preserve order $attrs{$attr} = $val; } # tame wild namespace prefixes (patch for Microsoft stupidity) if ($prop =~ /(.*?):/ and $$xlatNS{$1}) { $prop = $$xlatNS{$1} . substr($prop, length($1)); } if ($prop eq 'rdf:li') { # impose a reasonable maximum on the number of items in a list if ($nItems == 1000) { my ($tg,$ns) = GetXMPTagID($propListPt); if ($isWriting) { $et->Warn("Excessive number of items for $ns:$tg. Processing may be slow", 1); } elsif (not $$et{OPTIONS}{IgnoreMinorErrors}) { $et->Warn("Extracted only 1000 $ns:$tg items. Ignore minor errors to extract all", 2); last; } } # add index to list items so we can keep them in order # (this also enables us to keep structure elements grouped properly # for lists of structures, like JobRef) # Note: the list index is prefixed by the number of digits so sorting # alphabetically gives the correct order while still allowing a flexible # number of digits -- this scheme allows up to 9 digits in the index, # with index numbers ranging from 0 to 999999999. The sequence is: # 10,11,12-19,210,211-299,3100,3101-3999,41000...9999999999. $prop .= ' ' . length($nItems) . $nItems; # reset LIST_TAGS at the start of the outtermost list # (avoids accumulating incorrectly-written elements in a correctly-written list) if (not $nItems and not grep /^rdf:li /, @$propListPt) { $$et{LIST_TAGS} = { }; } ++$nItems; } elsif ($prop eq 'rdf:Description') { # remove unnecessary rdf:Description elements since parseType='Resource' # is more efficient (also necessary to make property path consistent) $parseResource = 1 if grep /^rdf:Description$/, @$propListPt; } elsif ($prop eq 'xmp:xmpmeta') { # patch MicrosoftPhoto unconformity $prop = 'x:xmpmeta'; } # hook for special parsing of attributes my $val; if ($attrProc) { $val = substr($$dataPt, $valStart, $valEnd - $valStart); if (&$attrProc(\@attrs, \%attrs, \$prop, \$val)) { # the value was changed, so reset $valStart/$valEnd to use $val instead $valStart = $valEnd; } } # add nodeID to property path (with leading ' #') if it exists if (defined $attrs{'rdf:nodeID'}) { $nodeID = $$blankInfo{NodeID} = $attrs{'rdf:nodeID'}; delete $attrs{'rdf:nodeID'}; $prop .= ' #' . $nodeID; undef $parseResource; # can't ignore if this is a node } # push this property name onto our hierarchy list push @$propListPt, $prop unless $parseResource; if ($isSVG) { # ignore everything but top level SVG tags and metadata unless Unknown set unless ($$et{OPTIONS}{Unknown} > 1 or $$et{OPTIONS}{Verbose}) { if (@$propListPt > 1 and $$propListPt[1] !~ /\b(metadata|desc|title)$/) { pop @$propListPt; next; } } if ($prop eq 'svg' or $prop eq 'metadata') { # add svg namespace prefix if missing to ignore these entries in the tag name $$propListPt[-1] = "svg:$prop"; } } # handle properties inside element attributes (RDF shorthand format): # (attributes take the form a:b='c' or a:b="c") my ($shortName, $shorthand, $ignored); foreach $shortName (@attrs) { next unless defined $attrs{$shortName}; my $propName = $shortName; my ($ns, $name); if ($propName =~ /(.*?):(.*)/) { $ns = $1; # specified namespace $name = $2; } elsif ($prop =~ /(\S*?):/) { $ns = $1; # assume same namespace as parent $name = $propName; $propName = "$ns:$name"; # generate full property name } else { # a property qualifier is the only property name that may not # have a namespace, and a qualifier shouldn't have attributes, # but what the heck, let's allow this anyway $ns = ''; $name = $propName; } if ($isWriting) { # keep track of our namespaces when writing if ($ns eq 'xmlns') { my $stdNS = $uri2ns{$attrs{$shortName}}; unless ($stdNS and ($stdNS eq 'x' or $stdNS eq 'iX')) { my $nsUsed = $$et{XMP_NS}; $$nsUsed{$name} = $attrs{$shortName} unless defined $$nsUsed{$name}; } delete $attrs{$shortName}; # (handled by namespace logic) next; } elsif ($recognizedAttrs{$propName}) { # save UUID to use same ID when writing if ($propName eq 'rdf:about') { if (not $$et{XMP_ABOUT}) { $$et{XMP_ABOUT} = $attrs{$shortName}; } elsif ($$et{XMP_ABOUT} ne $attrs{$shortName}) { $et->Error("Different 'rdf:about' attributes not handled", 1); } } next; } } my $shortVal = $attrs{$shortName}; if ($ignoreNamespace{$ns} or $ignoreProp{$prop}) { $ignored = $propName; # handle special attributes (extract as tags only once if not empty) if (ref $recognizedAttrs{$propName} and $shortVal) { my ($tbl, $id, $name) = @{$recognizedAttrs{$propName}}; my $tval = UnescapeXML($shortVal); unless (defined $$et{VALUE}{$name} and $$et{VALUE}{$name} eq $tval) { $et->HandleTag(GetTagTable($tbl), $id, $tval); } } next; } delete $attrs{$shortName}; # don't re-use this attribute push @$propListPt, $propName; # save this shorthand XMP property if (defined $nodeID) { SaveBlankInfo($blankInfo, $propListPt, $shortVal); } elsif ($isWriting) { CaptureXMP($et, $propListPt, $shortVal); } else { &$foundProc($et, $tagTablePtr, $propListPt, $shortVal); } pop @$propListPt; $shorthand = 1; } if ($isWriting) { if (ParseXMPElement($et, $tagTablePtr, $dataPt, $valStart, $valEnd, $propListPt, $blankInfo)) { # (no value since we found more properties within this one) # set an error on any ignored attributes here, because they will be lost $$et{XMP_ERROR} = "Can't handle XMP attribute '$ignored'" if $ignored; } elsif (not $shorthand or $valEnd != $valStart) { $val = substr($$dataPt, $valStart, $valEnd - $valStart); # remove comments and whitespace from rdf:Description only if ($prop eq 'rdf:Description') { $val =~ s/<!--.*?-->//g; $val =~ s/^\s+//; $val =~ s/\s+$//; } if (defined $nodeID) { SaveBlankInfo($blankInfo, $propListPt, $val, \%attrs); } else { CaptureXMP($et, $propListPt, $val, \%attrs); } } } else { # look for additional elements contained within this one if ($valStart == $valEnd or !ParseXMPElement($et, $tagTablePtr, $dataPt, $valStart, $valEnd, $propListPt, $blankInfo)) { my $wasEmpty; unless (defined $val) { $val = substr($$dataPt, $valStart, $valEnd - $valStart); # remove comments and whitespace from rdf:Description only if ($prop eq 'rdf:Description' and $val) { $val =~ s/<!--.*?-->//g; $val =~ s/^\s+//; $val =~ s/\s+$//; } # if element value is empty, take value from 'resource' attribute # (preferentially) or 'about' attribute (if no 'resource') if ($val eq '' and ($attrs =~ /\bresource=(['"])(.*?)\1/ or $attrs =~ /\babout=(['"])(.*?)\1/)) { $val = $2; $wasEmpty = 1; } } # there are no contained elements, so this must be a simple property value # (unless we already extracted shorthand values from this element) if (length $val or not $shorthand) { my $lastProp = $$propListPt[-1]; if (defined $nodeID) { SaveBlankInfo($blankInfo, $propListPt, $val); } elsif ($lastProp eq 'rdf:type' and $wasEmpty) { # do not extract empty structure types (for now) } elsif ($lastProp =~ /^et:(desc|prt|val)$/ and ($count or $1 eq 'desc')) { # ignore et:desc, and et:val if preceded by et:prt --$count; } else { &$foundProc($et, $tagTablePtr, $propListPt, $val, \%attrs); } } } } pop @$propListPt unless $parseResource; ++$count; last if $start >= $end; pos($$dataPt) = $start; $$dataPt =~ /\G\s+/gc; # skip white space after closing token } # # process resources referenced by blank nodeID's # if ($processBlankInfo and %{$$blankInfo{Prop}}) { ProcessBlankInfo($et, $tagTablePtr, $blankInfo, $isWriting); %$blankInfo = (); # free some memory } # restore namespace lookup from the containing scope $$et{xlatNS} = $saveNS if $saveNS; return $count; # return the number of elements found at this level } #------------------------------------------------------------------------------ # Process XMP data # Inputs: 0) ExifTool object reference, 1) DirInfo reference, 2) Pointer to tag table # Returns: 1 on success # Notes: The following flavours of XMP files are currently recognized: # - standard XMP with xpacket, x:xmpmeta and rdf:RDF elements # - XMP that is missing the xpacket and/or x:xmpmeta elements # - mutant Microsoft XMP with xmp:xmpmeta element # - XML files beginning with "<xml" # - SVG files that begin with "<svg" or "<!DOCTYPE svg" # - XMP and XML files beginning with a UTF-8 byte order mark # - UTF-8, UTF-16 and UTF-32 encoded XMP # - erroneously double-UTF8 encoded XMP # - otherwise valid files with leading XML comment sub ProcessXMP($$;$) { my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; my ($dirStart, $dirLen, $dataLen, $double); my ($buff, $fmt, $hasXMP, $isXML, $isRDF, $isSVG); my $rtnVal = 0; my $bom = 0; # namespaces and prefixes currently in effect while parsing the file, # and lookup to translate brain-dead-Microsoft-Photo-software prefixes $$et{curURI} = { }; $$et{curNS} = { }; $$et{xlatNS} = { }; # ignore non-standard XMP while in strict MWG compatibility mode if ($Image::ExifTool::MWG::strict and not $$et{XMP_CAPTURE} and $$et{FILE_TYPE} =~ /^(JPEG|TIFF|PSD)$/) { my $path = $et->MetadataPath(); unless ($path =~ /^(JPEG-APP1-XMP|TIFF-IFD0-XMP|PSD-XMP)$/) { $et->Warn("Ignored non-standard XMP at $path"); return 1; } } if ($dataPt) { $dirStart = $$dirInfo{DirStart} || 0; $dirLen = $$dirInfo{DirLen} || (length($$dataPt) - $dirStart); $dataLen = $$dirInfo{DataLen} || length($$dataPt); # check leading BOM (may indicate double-encoded UTF) pos($$dataPt) = $dirStart; $double = $1 if $$dataPt =~ /\G((\0\0)?\xfe\xff|\xff\xfe(\0\0)?|\xef\xbb\xbf)\0*<\0*\?\0*x\0*p\0*a\0*c\0*k\0*e\0*t/g; } else { my ($type, $buf2, $buf3); # read information from XMP file my $raf = $$dirInfo{RAF} or return 0; $raf->Read($buff, 256) or return 0; ($buf2 = $buff) =~ tr/\0//d; # cheap conversion to UTF-8 # remove leading comments if they exist (eg. ImageIngester) while ($buf2 =~ /^\s*<!--/) { # remove the comment if it is complete if ($buf2 =~ s/^\s*<!--.*?-->\s+//s) { # continue with parsing if we have more than 128 bytes remaining next if length $buf2 > 128; } else { # don't read more than 10k when looking for the end of comment return 0 if length($buf2) > 10000; } $raf->Read($buf3, 256) or last; # read more data if available $buff .= $buf3; $buf3 =~ tr/\0//d; $buf2 .= $buf3; } # check to see if this is XMP format # (CS2 writes .XMP files without the "xpacket begin") if ($buf2 =~ /^\s*(<\?xpacket begin=|<x(mp)?:x[ma]pmeta)/) { $hasXMP = 1; } else { # also recognize XML files and .XMP files with BOM and without x:xmpmeta if ($buf2 =~ /^(\xfe\xff)(<\?xml|<rdf:RDF|<x(mp)?:x[ma]pmeta)/g) { $fmt = 'n'; # UTF-16 or 32 MM with BOM } elsif ($buf2 =~ /^(\xff\xfe)(<\?xml|<rdf:RDF|<x(mp)?:x[ma]pmeta)/g) { $fmt = 'v'; # UTF-16 or 32 II with BOM } elsif ($buf2 =~ /^(\xef\xbb\xbf)?(<\?xml|<rdf:RDF|<x(mp)?:x[ma]pmeta)/g) { $fmt = 0; # UTF-8 with BOM or unknown encoding without BOM } elsif ($buf2 =~ /^(\xfe\xff|\xff\xfe|\xef\xbb\xbf)(<\?xpacket begin=)/g) { $double = $1; # double-encoded UTF } else { return 0; # not recognized XMP or XML } $bom = 1 if $1; if ($2 eq '<?xml') { if (defined $fmt and not $fmt and $buf2 =~ /^[^\n\r]*[\n\r]+<\?aid /s) { if ($$et{XMP_CAPTURE}) { $et->Error("ExifTool does not yet support writing of INX files"); return 0; } $type = 'INX'; } elsif ($buf2 =~ /<x(mp)?:x[ma]pmeta/) { $hasXMP = 1; } else { # identify SVG images and PLIST files by DOCTYPE if available if ($buf2 =~ /<!DOCTYPE\s+(\w+)/) { if ($1 eq 'svg') { $isSVG = 1; } elsif ($1 eq 'plist') { $type = 'PLIST'; } else { return 0; } } elsif ($buf2 =~ /<svg[\s>]/) { $isSVG = 1; } elsif ($buf2 =~ /<rdf:RDF/) { $isRDF = 1; } elsif ($buf2 =~ /<plist[\s>]/) { $type = 'PLIST'; } if ($isSVG and $$et{XMP_CAPTURE}) { $et->Error("ExifTool does not yet support writing of SVG images"); return 0; } } $isXML = 1; } elsif ($2 eq '<rdf:RDF') { $isRDF = 1; # recognize XMP without x:xmpmeta element } if ($buff =~ /^\0\0/) { $fmt = 'N'; # UTF-32 MM with or without BOM } elsif ($buff =~ /^..\0\0/s) { $fmt = 'V'; # UTF-32 II with or without BOM } elsif (not $fmt) { if ($buff =~ /^\0/) { $fmt = 'n'; # UTF-16 MM without BOM } elsif ($buff =~ /^.\0/s) { $fmt = 'v'; # UTF-16 II without BOM } } } my $size; if ($type) { if ($type eq 'PLIST') { my $ext = $$et{FILE_EXT}; $type = $ext if $ext and $ext eq 'MODD'; $tagTablePtr = GetTagTable('Image::ExifTool::PLIST::Main'); $$dirInfo{XMPParseOpts}{FoundProc} = \&Image::ExifTool::PLIST::FoundTag; } } else { if ($isSVG) { $type = 'SVG'; } elsif ($isXML and not $hasXMP and not $isRDF) { $type = 'XML'; my $ext = $$et{FILE_EXT}; $type = $ext if $ext and $ext eq 'COS'; # recognize COS by extension } } $et->SetFileType($type); my $fast = $et->Options('FastScan'); return 1 if $fast and $fast == 3; if ($type and $type eq 'INX') { # brute force search for first XMP packet in INX file # start: '<![CDATA[<?xpacket begin' (24 bytes) # end: '<?xpacket end="r"?>]]>' (22 bytes) $raf->Seek(0, 0) or return 0; $raf->Read($buff, 65536) or return 1; for (;;) { last if $buff =~ /<!\[CDATA\[<\?xpacket begin/g; $raf->Read($buf2, 65536) or return 1; $buff = substr($buff, -24) . $buf2; } $buff = substr($buff, pos($buff) - 15); # (discard '<![CDATA[' and before) for (;;) { last if $buff =~ /<\?xpacket end="[rw]"\?>\]\]>/g; my $n = length $buff; $raf->Read($buf2, 65536) or $et->Warn('Missing xpacket end'), return 1; $buff .= $buf2; pos($buff) = $n - 22; # don't miss end pattern if it was split } $size = pos($buff) - 3; # (discard ']]>' and after) $buff = substr($buff, 0, $size); } else { # read the entire file $raf->Seek(0, 2) or return 0; $size = $raf->Tell() or return 0; $raf->Seek(0, 0) or return 0; $raf->Read($buff, $size) == $size or return 0; } $dataPt = \$buff; $dirStart = 0; $dirLen = $dataLen = $size; } # decode the first layer of double-encoded UTF text (if necessary) if ($double) { my ($buf2, $fmt); $buff = substr($$dataPt, $dirStart + length $double); # remove leading BOM Image::ExifTool::SetWarning(undef); # clear old warning local $SIG{'__WARN__'} = \&Image::ExifTool::SetWarning; # assume that character data has been re-encoded in UTF, so re-pack # as characters and look for warnings indicating a false assumption if ($double eq "\xef\xbb\xbf") { require Image::ExifTool::Charset; my $uni = Image::ExifTool::Charset::Decompose(undef,$buff,'UTF8'); $buf2 = pack('C*', @$uni); } else { if (length($double) == 2) { $fmt = ($double eq "\xfe\xff") ? 'n' : 'v'; } else { $fmt = ($double eq "\0\0\xfe\xff") ? 'N' : 'V'; } $buf2 = pack('C*', unpack("$fmt*",$buff)); } if (Image::ExifTool::GetWarning()) { $et->Warn('Superfluous BOM at start of XMP'); $dataPt = \$buff; # use XMP with the BOM removed } else { $et->Warn('XMP is double UTF-encoded'); $dataPt = \$buf2; # use the decoded XMP } $dirStart = 0; $dirLen = $dataLen = length $$dataPt; } # extract XMP as a block if specified my $blockName = $$dirInfo{BlockInfo} ? $$dirInfo{BlockInfo}{Name} : 'XMP'; if (($$et{REQ_TAG_LOOKUP}{lc $blockName} or ($$et{TAGS_FROM_FILE} and not $$et{EXCL_TAG_LOOKUP}{lc $blockName})) and not $isSVG) { $et->FoundTag($$dirInfo{BlockInfo} || 'XMP', substr($$dataPt, $dirStart, $dirLen)); } $tagTablePtr or $tagTablePtr = GetTagTable('Image::ExifTool::XMP::Main'); if ($et->Options('Verbose') and not $$et{XMP_CAPTURE}) { my $dirType = $isSVG ? 'SVG' : $$tagTablePtr{GROUPS}{1}; $et->VerboseDir($dirType, 0, $dirLen); } # # convert UTF-16 or UTF-32 encoded XMP to UTF-8 if necessary # my $begin = '<?xpacket begin='; my $dirEnd = $dirStart + $dirLen; pos($$dataPt) = $dirStart; delete $$et{XMP_IS_XML}; delete $$et{XMP_IS_SVG}; if ($isXML or $isRDF) { $$et{XMP_IS_XML} = $isXML; $$et{XMP_IS_SVG} = $isSVG; $$et{XMP_NO_XPACKET} = 1 + $bom; } elsif ($$dataPt =~ /\G\Q$begin\E/gc) { delete $$et{XMP_NO_XPACKET}; } elsif ($$dataPt =~ /<x(mp)?:x[ma]pmeta/gc and pos($$dataPt) > $dirStart and pos($$dataPt) < $dirEnd) { $$et{XMP_NO_XPACKET} = 1 + $bom; } else { delete $$et{XMP_NO_XPACKET}; # check for UTF-16 encoding (insert one \0 between characters) $begin = join "\0", split //, $begin; # must reset pos because it was killed by previous unsuccessful //g match pos($$dataPt) = $dirStart; if ($$dataPt =~ /\G(\0)?\Q$begin\E\0./sg) { # validate byte ordering by checking for U+FEFF character if ($1) { # should be big-endian since we had a leading \0 $fmt = 'n' if $$dataPt =~ /\G\xfe\xff/g; } else { $fmt = 'v' if $$dataPt =~ /\G\0\xff\xfe/g; } } else { # check for UTF-32 encoding (with three \0's between characters) $begin =~ s/\0/\0\0\0/g; pos($$dataPt) = $dirStart; if ($$dataPt !~ /\G(\0\0\0)?\Q$begin\E\0\0\0./sg) { $fmt = 0; # set format to zero as indication we didn't find encoded XMP } elsif ($1) { # should be big-endian $fmt = 'N' if $$dataPt =~ /\G\0\0\xfe\xff/g; } else { $fmt = 'V' if $$dataPt =~ /\G\0\0\0\xff\xfe\0\0/g; } } defined $fmt or $et->Warn('XMP character encoding error'); } if ($fmt) { # trim if necessary to avoid converting non-UTF data if ($dirStart or $dirEnd != length($$dataPt)) { $buff = substr($$dataPt, $dirStart, $dirLen); $dataPt = \$buff; } # convert into UTF-8 if ($] >= 5.006001) { $buff = pack('C0U*', unpack("$fmt*",$$dataPt)); } else { $buff = Image::ExifTool::PackUTF8(unpack("$fmt*",$$dataPt)); } $dataPt = \$buff; $dirStart = 0; $dirLen = length $$dataPt; $dirEnd = $dirStart + $dirLen; } # avoid scanning for XMP later in case ScanForXMP is set $$et{FoundXMP} = 1 if $tagTablePtr eq \%Image::ExifTool::XMP::Main; # set XMP parsing options $$et{XMPParseOpts} = $$dirInfo{XMPParseOpts}; # ignore any specified properties (XML hack) if ($$dirInfo{IgnoreProp}) { %ignoreProp = %{$$dirInfo{IgnoreProp}}; } else { undef %ignoreProp; } # need to preserve list indices to be able to handle multi-dimensional lists my $keepFlat; if ($$et{OPTIONS}{Struct}) { if ($$et{OPTIONS}{Struct} eq '2') { $keepFlat = 1; # preserve flattened tags # setting NO_LIST to 0 combines list items in a TAG_EXTRA "NoList" element # to allow them to be re-listed later if necessary. A "NoListDel" element # is also created for tags that wouldn't have existed. $$et{NO_LIST} = 0; } else { $$et{NO_LIST} = 1; } } # don't generate structures if this isn't real XMP $$et{NO_STRUCT} = 1 if $$dirInfo{BlockInfo} or $$dirInfo{NoStruct}; # parse the XMP if (ParseXMPElement($et, $tagTablePtr, $dataPt, $dirStart, $dirEnd)) { $rtnVal = 1; } elsif ($$dirInfo{DirName} and $$dirInfo{DirName} eq 'XMP') { # if DirName was 'XMP' we expect well-formed XMP, so set Warning since it wasn't # (but allow empty XMP as written by some PhaseOne cameras) my $xmp = substr($$dataPt, $dirStart, $dirLen); if ($xmp =~ /^ *\0*$/) { $et->Warn('Invalid XMP'); } else { $et->Warn('Empty XMP',1); $rtnVal = 1; } } delete $$et{NO_STRUCT}; # return DataPt if successful in case we want it for writing $$dirInfo{DataPt} = $dataPt if $rtnVal and $$dirInfo{RAF}; # restore structures if necessary if ($$et{IsStruct}) { require 'Image/ExifTool/XMPStruct.pl'; RestoreStruct($et, $keepFlat); delete $$et{IsStruct}; } # reset NO_LIST flag (must do this _after_ RestoreStruct() above) delete $$et{NO_LIST}; delete $$et{XMPParseOpts}; delete $$et{curURI}; delete $$et{curNS}; delete $$et{xlatNS}; return $rtnVal; } 1; #end __END__ =head1 NAME Image::ExifTool::XMP - Read XMP meta information =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION XMP stands for Extensible Metadata Platform. It is a format based on XML that Adobe developed for embedding metadata information in image files. This module contains the definitions required by Image::ExifTool to read XMP information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.adobe.com/devnet/xmp/> =item L<http://www.w3.org/TR/rdf-syntax-grammar/> =item L<http://www.iptc.org/IPTC4XMP/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/XMP Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/XMP2.pl�����������������������������������������������������000644 �000765 �000024 �00000155375 12642461342 021013� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: XMP2.pl # # Description: Additional XMP namespace definitions # # Revisions: 10/12/2008 - P. Harvey Created # # References: 1) PLUS - http://ns.useplus.org/ # 2) PRISM - http://www.prismstandard.org/ # 3) http://www.portfoliofaq.com/pfaq/v7mappings.htm # 5) http://creativecommons.org/technology/xmp # --> changed to http://wiki.creativecommons.org/Companion_File_metadata_specification (2007/12/21) # 6) http://www.optimasc.com/products/fileid/xmp-extensions.pdf # 9) http://www.w3.org/TR/SVG11/ # 11) http://www.extensis.com/en/support/kb_article.jsp?articleNumber=6102211 # 12) XMPSpecificationPart3_May2013, page 58 #------------------------------------------------------------------------------ package Image::ExifTool::XMP; use strict; use Image::ExifTool qw(:Utils); use Image::ExifTool::XMP; # xmpDM structure definitions my %sCuePointParam = ( STRUCT_NAME => 'CuePointParam', NAMESPACE => 'xmpDM', key => { }, value => { }, ); my %sMarker = ( STRUCT_NAME => 'Marker', NAMESPACE => 'xmpDM', comment => { }, duration => { }, location => { }, name => { }, startTime => { }, target => { }, type => { }, # added Oct 2008 cuePointParams => { Struct => \%sCuePointParam, List => 'Seq' }, cuePointType=> { }, probability => { Writable => 'real' }, speaker => { }, ); my %sTime = ( STRUCT_NAME => 'Time', NAMESPACE => 'xmpDM', scale => { Writable => 'rational' }, value => { Writable => 'integer' }, ); my %sTimecode = ( STRUCT_NAME => 'Timecode', NAMESPACE => 'xmpDM', timeFormat => { PrintConv => { '24Timecode' => '24 fps', '25Timecode' => '25 fps', '2997DropTimecode' => '29.97 fps (drop)', '2997NonDropTimecode' => '29.97 fps (non-drop)', '30Timecode' => '30 fps', '50Timecode' => '50 fps', '5994DropTimecode' => '59.94 fps (drop)', '5994NonDropTimecode' => '59.94 fps (non-drop)', '60Timecode' => '60 fps', '23976Timecode' => '23.976 fps', }, }, timeValue => { }, value => { Writable => 'integer' }, ); # XMP Dynamic Media namespace properties (xmpDM) %Image::ExifTool::XMP::xmpDM = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-xmpDM', 2 => 'Image' }, NAMESPACE => 'xmpDM', NOTES => 'XMP Dynamic Media namespace tags.', absPeakAudioFilePath=> { }, album => { }, altTapeName => { }, altTimecode => { Struct => \%sTimecode }, artist => { Avoid => 1, Groups => { 2 => 'Author' } }, audioModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo }, audioSampleRate => { Writable => 'integer' }, audioSampleType => { PrintConv => { '8Int' => '8-bit integer', '16Int' => '16-bit integer', '24Int' => '24-bit integer', '32Int' => '32-bit integer', '32Float' => '32-bit float', 'Compressed' => 'Compressed', 'Packed' => 'Packed', 'Other' => 'Other', }, }, audioChannelType => { PrintConv => { 'Mono' => 'Mono', 'Stereo' => 'Stereo', '5.1' => '5.1', '7.1' => '7.1', '16 Channel' => '16 Channel', 'Other' => 'Other', }, }, audioCompressor => { }, beatSpliceParams => { Struct => { STRUCT_NAME => 'BeatSpliceStretch', NAMESPACE => 'xmpDM', riseInDecibel => { Writable => 'real' }, riseInTimeDuration => { Struct => \%sTime }, useFileBeatsMarker => { Writable => 'boolean' }, }, }, cameraAngle => { }, cameraLabel => { }, cameraModel => { }, cameraMove => { }, client => { }, comment => { Name => 'DMComment' }, composer => { Groups => { 2 => 'Author' } }, contributedMedia => { Struct => { STRUCT_NAME => 'Media', NAMESPACE => 'xmpDM', duration => { Struct => \%sTime }, managed => { Writable => 'boolean' }, path => { }, startTime => { Struct => \%sTime }, track => { }, webStatement=> { }, }, List => 'Bag', }, copyright => { Avoid => 1, Groups => { 2 => 'Author' } }, # (deprecated) director => { }, directorPhotography => { }, discNumber => { }, #12 duration => { Struct => \%sTime }, engineer => { }, fileDataRate => { Writable => 'rational' }, genre => { }, good => { Writable => 'boolean' }, instrument => { }, introTime => { Struct => \%sTime }, key => { PrintConvColumns => 3, PrintConv => { 'C' => 'C', 'C#' => 'C#', 'D' => 'D', 'D#' => 'D#', 'E' => 'E', 'F' => 'F', 'F#' => 'F#', 'G' => 'G', 'G#' => 'G#', 'A' => 'A', 'A#' => 'A#', 'B' => 'B', }, }, logComment => { }, loop => { Writable => 'boolean' }, lyrics => { }, #12 numberOfBeats => { Writable => 'real' }, markers => { Struct => \%sMarker, List => 'Seq' }, metadataModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo }, outCue => { Struct => \%sTime }, partOfCompilation=>{ Writable => 'boolean' }, #12 projectName => { }, projectRef => { Struct => { STRUCT_NAME => 'ProjectLink', NAMESPACE => 'xmpDM', path => { }, type => { PrintConv => { movie => 'Movie', still => 'Still Image', audio => 'Audio', custom => 'Custom', }, }, }, }, pullDown => { PrintConvColumns => 2, PrintConv => { 'WSSWW' => 'WSSWW', 'SSWWW' => 'SSWWW', 'SWWWS' => 'SWWWS', 'WWWSS' => 'WWWSS', 'WWSSW' => 'WWSSW', 'WWWSW' => 'WWWSW', 'WWSWW' => 'WWSWW', 'WSWWW' => 'WSWWW', 'SWWWW' => 'SWWWW', 'WWWWS' => 'WWWWS', }, }, relativePeakAudioFilePath => { }, relativeTimestamp => { Struct => \%sTime }, releaseDate => { Groups => { 2 => 'Time' }, %dateTimeInfo }, resampleParams => { Struct => { STRUCT_NAME => 'ResampleStretch', NAMESPACE => 'xmpDM', quality => { PrintConv => { Low => 'Low', Medium => 'Medium', High => 'High' } }, }, }, scaleType => { PrintConv => { Major => 'Major', Minor => 'Minor', Both => 'Both', Neither => 'Neither', }, }, scene => { Avoid => 1 }, shotDate => { Groups => { 2 => 'Time' }, %dateTimeInfo }, shotDay => { }, shotLocation => { }, shotName => { }, shotNumber => { }, shotSize => { }, speakerPlacement=> { }, startTimecode => { Struct => \%sTimecode }, startTimeSampleSize => { Writable => 'integer' }, #PH startTimeScale => { }, #PH (real?) stretchMode => { PrintConv => { 'Fixed length' => 'Fixed length', 'Time-Scale' => 'Time-Scale', 'Resample' => 'Resample', 'Beat Splice' => 'Beat Splice', 'Hybrid' => 'Hybrid', }, }, takeNumber => { Writable => 'integer' }, tapeName => { }, tempo => { Writable => 'real' }, timeScaleParams => { Struct => { STRUCT_NAME => 'TimeScaleStretch', NAMESPACE => 'xmpDM', frameOverlappingPercentage => { Writable => 'real' }, frameSize => { Writable => 'real' }, quality => { PrintConv => { Low => 'Low', Medium => 'Medium', High => 'High' } }, }, }, timeSignature => { PrintConvColumns => 3, PrintConv => { '2/4' => '2/4', '3/4' => '3/4', '4/4' => '4/4', '5/4' => '5/4', '7/4' => '7/4', '6/8' => '6/8', '9/8' => '9/8', '12/8'=> '12/8', 'other' => 'other', }, }, trackNumber => { Writable => 'integer' }, Tracks => { Struct => { STRUCT_NAME => 'Track', NAMESPACE => 'xmpDM', frameRate => { }, markers => { Struct => \%sMarker, List => 'Seq' }, trackName => { }, trackType => { }, }, List => 'Bag', }, videoAlphaMode => { PrintConv => { 'straight' => 'Straight', 'pre-multiplied', => 'Pre-multiplied', 'none' => 'None', }, }, videoAlphaPremultipleColor => { Struct => \%sColorant }, videoAlphaUnityIsTransparent => { Writable => 'boolean' }, videoColorSpace => { PrintConv => { 'sRGB' => 'sRGB', 'CCIR-601' => 'CCIR-601', 'CCIR-709' => 'CCIR-709', }, }, videoCompressor => { }, videoFieldOrder => { PrintConv => { Upper => 'Upper', Lower => 'Lower', Progressive => 'Progressive', }, }, videoFrameRate => { Writable => 'real' }, videoFrameSize => { Struct => \%sDimensions }, videoModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo }, videoPixelAspectRatio => { Writable => 'rational' }, videoPixelDepth => { PrintConv => { '8Int' => '8-bit integer', '16Int' => '16-bit integer', '24Int' => '24-bit integer', '32Int' => '32-bit integer', '32Float' => '32-bit float', 'Other' => 'Other', }, }, ); #------------------------------------------------------------------------------ # PLUS (Picture Licensing Universal System) # PLUS vocabulary conversions my %plusVocab = ( ValueConv => '$val =~ s{http://ns.useplus.org/ldf/vocab/}{}; $val', ValueConvInv => '"http://ns.useplus.org/ldf/vocab/$val"', ); # PLUS License Data Format 1.2.1 structures # (this seems crazy to me -- why did they define different ID/Name structures # for each field rather than just re-using the same structure?) my %plusLicensee = ( STRUCT_NAME => 'Licensee', NAMESPACE => 'plus', # all "rdf:type" properties removed in version 1.2.1 # (idiots. Why did they put them there in the first place? -- it required # a special patch for ExifTool to support these, and now they are gone!) # TYPE => 'plus:LicenseeDetail', (removed in 1.2.1) LicenseeID => { }, LicenseeName=> { }, ); my %plusEndUser = ( STRUCT_NAME => 'EndUser', NAMESPACE => 'plus', # TYPE => 'plus:EndUserDetail', (removed in 1.2.1) EndUserID => { }, EndUserName => { }, ); my %plusLicensor = ( STRUCT_NAME => 'Licensor', NAMESPACE => 'plus', # TYPE => 'plus:LicensorDetail', (removed in 1.2.1) LicensorID => { }, LicensorName => { }, LicensorStreetAddress => { }, LicensorExtendedAddress => { }, LicensorCity => { }, LicensorRegion => { }, LicensorPostalCode => { }, LicensorCountry => { }, LicensorTelephoneType1 => { %plusVocab, PrintConv => { 'work' => 'Work', 'cell' => 'Cell', 'fax' => 'FAX', 'home' => 'Home', 'pager' => 'Pager', }, }, LicensorTelephone1 => { }, LicensorTelephoneType2 => { %plusVocab, PrintConv => { 'work' => 'Work', 'cell' => 'Cell', 'fax' => 'FAX', 'home' => 'Home', 'pager' => 'Pager', }, }, LicensorTelephone2 => { }, LicensorEmail => { }, LicensorURL => { }, ); my %plusCopyrightOwner = ( STRUCT_NAME => 'CopyrightOwner', NAMESPACE => 'plus', # TYPE => 'plus:CopyrightOwnerDetail', (removed in 1.2.1) CopyrightOwnerID => { }, CopyrightOwnerName => { }, ); my %plusImageCreator = ( STRUCT_NAME => 'ImageCreator', NAMESPACE => 'plus', # TYPE => 'plus:ImageCreatorDetail', (removed in 1.2.1) ImageCreatorID => { }, ImageCreatorName => { }, ); my %plusImageSupplier = ( STRUCT_NAME => 'ImageSupplier', NAMESPACE => 'plus', # TYPE => 'plus:ImageSupplierDetail', (removed in 1.2.1) ImageSupplierID => { }, ImageSupplierName => { }, ); # PLUS License Data Format 1.2.0 (plus) (ref 1) %Image::ExifTool::XMP::plus = ( %xmpTableDefaults, GROUPS => { 0 => 'XMP', 1 => 'XMP-plus', 2 => 'Author' }, NAMESPACE => 'plus', NOTES => q{ PLUS License Data Format 1.2.1 namespace tags. Note that all controlled-vocabulary tags in this table (ie. tags with a fixed set of values) have raw values which begin with "http://ns.useplus.org/ldf/vocab/", but to reduce clutter this prefix has been removed from the values shown below. (see L<http://ns.useplus.org/>) }, Version => { Name => 'PLUSVersion' }, Licensee => { FlatName => '', Struct => \%plusLicensee, List => 'Seq', }, EndUser => { FlatName => '', Struct => \%plusEndUser, List => 'Seq', }, Licensor => { FlatName => '', Struct => \%plusLicensor, List => 'Seq', }, LicensorNotes => { Writable => 'lang-alt' }, MediaSummaryCode => { }, LicenseStartDate => { %dateTimeInfo, Groups => { 2 => 'Time'} }, LicenseEndDate => { %dateTimeInfo, Groups => { 2 => 'Time'} }, MediaConstraints => { Writable => 'lang-alt' }, RegionConstraints => { Writable => 'lang-alt' }, ProductOrServiceConstraints => { Writable => 'lang-alt' }, ImageFileConstraints => { List => 'Bag', %plusVocab, PrintConv => { 'IF-MFN' => 'Maintain File Name', 'IF-MID' => 'Maintain ID in File Name', 'IF-MMD' => 'Maintain Metadata', 'IF-MFT' => 'Maintain File Type', }, }, ImageAlterationConstraints => { List => 'Bag', %plusVocab, PrintConv => { 'AL-CRP' => 'No Cropping', 'AL-FLP' => 'No Flipping', 'AL-RET' => 'No Retouching', 'AL-CLR' => 'No Colorization', 'AL-DCL' => 'No De-Colorization', 'AL-MRG' => 'No Merging', }, }, ImageDuplicationConstraints => { %plusVocab, PrintConv => { 'DP-NDC' => 'No Duplication Constraints', 'DP-LIC' => 'Duplication Only as Necessary Under License', 'DP-NOD' => 'No Duplication', }, }, ModelReleaseStatus => { %plusVocab, PrintConv => { 'MR-NON' => 'None', 'MR-NAP' => 'Not Applicable', 'MR-UMR' => 'Unlimited Model Releases', 'MR-LMR' => 'Limited or Incomplete Model Releases', }, }, ModelReleaseID => { List => 'Bag' }, MinorModelAgeDisclosure => { %plusVocab, PrintConv => { 'AG-UNK' => 'Age Unknown', 'AG-A25' => 'Age 25 or Over', 'AG-A24' => 'Age 24', 'AG-A23' => 'Age 23', 'AG-A22' => 'Age 22', 'AG-A21' => 'Age 21', 'AG-A20' => 'Age 20', 'AG-A19' => 'Age 19', 'AG-A18' => 'Age 18', 'AG-A17' => 'Age 17', 'AG-A16' => 'Age 16', 'AG-A15' => 'Age 15', 'AG-U14' => 'Age 14 or Under', }, }, PropertyReleaseStatus => { %plusVocab, PrintConv => { 'PR-NON' => 'None', 'PR-NAP' => 'Not Applicable', 'PR-UPR' => 'Unlimited Property Releases', 'PR-LPR' => 'Limited or Incomplete Property Releases', }, }, PropertyReleaseID => { List => 'Bag' }, OtherConstraints => { Writable => 'lang-alt' }, CreditLineRequired => { %plusVocab, PrintConv => { 'CR-NRQ' => 'Not Required', 'CR-COI' => 'Credit on Image', 'CR-CAI' => 'Credit Adjacent To Image', 'CR-CCA' => 'Credit in Credits Area', }, }, AdultContentWarning => { %plusVocab, PrintConv => { 'CW-NRQ' => 'Not Required', 'CW-AWR' => 'Adult Content Warning Required', 'CW-UNK' => 'Unknown', }, }, OtherLicenseRequirements => { Writable => 'lang-alt' }, TermsAndConditionsText => { Writable => 'lang-alt' }, TermsAndConditionsURL => { }, OtherConditions => { Writable => 'lang-alt' }, ImageType => { %plusVocab, PrintConv => { 'TY-PHO' => 'Photographic Image', 'TY-ILL' => 'Illustrated Image', 'TY-MCI' => 'Multimedia or Composited Image', 'TY-VID' => 'Video', 'TY-OTR' => 'Other', }, }, LicensorImageID => { }, FileNameAsDelivered => { }, ImageFileFormatAsDelivered => { %plusVocab, PrintConv => { 'FF-JPG' => 'JPEG Interchange Formats (JPG, JIF, JFIF)', 'FF-TIF' => 'Tagged Image File Format (TIFF)', 'FF-GIF' => 'Graphics Interchange Format (GIF)', 'FF-RAW' => 'Proprietary RAW Image Format', 'FF-DNG' => 'Digital Negative (DNG)', 'FF-EPS' => 'Encapsulated PostScript (EPS)', 'FF-BMP' => 'Windows Bitmap (BMP)', 'FF-PSD' => 'Photoshop Document (PSD)', 'FF-PIC' => 'Macintosh Picture (PICT)', 'FF-PNG' => 'Portable Network Graphics (PNG)', 'FF-WMP' => 'Windows Media Photo (HD Photo)', 'FF-OTR' => 'Other', }, }, ImageFileSizeAsDelivered => { %plusVocab, PrintConv => { 'SZ-U01' => 'Up to 1 MB', 'SZ-U10' => 'Up to 10 MB', 'SZ-U30' => 'Up to 30 MB', 'SZ-U50' => 'Up to 50 MB', 'SZ-G50' => 'Greater than 50 MB', }, }, CopyrightStatus => { %plusVocab, PrintConv => { 'CS-PRO' => 'Protected', 'CS-PUB' => 'Public Domain', 'CS-UNK' => 'Unknown', }, }, CopyrightRegistrationNumber => { }, FirstPublicationDate => { %dateTimeInfo, Groups => { 2 => 'Time'} }, CopyrightOwner => { FlatName => '', Struct => \%plusCopyrightOwner, List => 'Seq', }, CopyrightOwnerImageID => { }, ImageCreator => { FlatName => '', Struct => \%plusImageCreator, List => 'Seq', }, ImageCreatorImageID => { }, ImageSupplier => { FlatName => '', Struct => \%plusImageSupplier, List => 'Seq', }, ImageSupplierImageID => { }, LicenseeImageID => { }, LicenseeImageNotes => { Writable => 'lang-alt' }, OtherImageInfo => { Writable => 'lang-alt' }, LicenseID => { }, LicensorTransactionID => { List => 'Bag' }, LicenseeTransactionID => { List => 'Bag' }, LicenseeProjectReference=> { List => 'Bag' }, LicenseTransactionDate => { %dateTimeInfo, Groups => { 2 => 'Time'} }, Reuse => { %plusVocab, PrintConv => { 'RE-REU' => 'Repeat Use', 'RE-NAP' => 'Not Applicable', }, }, OtherLicenseDocuments => { List => 'Bag' }, OtherLicenseInfo => { Writable => 'lang-alt' }, # Note: these are Bag's of lang-alt lists -- a nested list tag! Custom1 => { List => 'Bag', Writable => 'lang-alt' }, Custom2 => { List => 'Bag', Writable => 'lang-alt' }, Custom3 => { List => 'Bag', Writable => 'lang-alt' }, Custom4 => { List => 'Bag', Writable => 'lang-alt' }, Custom5 => { List => 'Bag', Writable => 'lang-alt' }, Custom6 => { List => 'Bag', Writable => 'lang-alt' }, Custom7 => { List => 'Bag', Writable => 'lang-alt' }, Custom8 => { List => 'Bag', Writable => 'lang-alt' }, Custom9 => { List => 'Bag', Writable => 'lang-alt' }, Custom10 => { List => 'Bag', Writable => 'lang-alt' }, ); #------------------------------------------------------------------------------ # PRISM # # NOTE: The "Avoid" flag is set for all PRISM tags # my %obsolete = ( # Notes => 'obsolete in 2.0', # ValueConvInv => sub { # my ($val, $self) = @_; # unless ($self->Options('IgnoreMinorErrors')) { # warn "Warning: [minor] Attempt to write obsolete tag\n"; # return undef; # } # return $val; # } # ); # PRISM structure definitions my %prismPublicationDate = ( STRUCT_NAME => 'prismPublicationDate', NAMESPACE => 'prism', date => { %dateTimeInfo, Groups => { 2 => 'Time'} }, 'a-platform'=> { }, ); # Publishing Requirements for Industry Standard Metadata (prism) (ref 2) %Image::ExifTool::XMP::prism = ( %xmpTableDefaults, GROUPS => { 0 => 'XMP', 1 => 'XMP-prism', 2 => 'Document' }, NAMESPACE => 'prism', NOTES => q{ Publishing Requirements for Industry Standard Metadata 3.0 namespace tags. (see L<http://www.prismstandard.org/>) }, acedemicField => { }, # (3.0) aggregateIssueNumber => { Writable => 'integer' }, # (3.0) aggregationType => { List => 'Bag' }, alternateTitle => { List => 'Bag', Struct => { # (becomes a structure in 3.0) STRUCT_NAME => 'prismAlternateTitle', NAMESPACE => 'prism', text => { }, 'a-platform'=> { }, 'a-lang' => { }, }, }, blogTitle => { }, # (3.0) blogURL => { }, # (3.0) bookEdition => { }, # (3.0) byteCount => { Writable => 'integer' }, channel => { List => 'Bag', Struct => { # (becomes a structure in 3.0) STRUCT_NAME => 'prismChannel', NAMESPACE => 'prism', channel => { }, subchannel1 => { }, subchannel2 => { }, subchannel3 => { }, subchannel4 => { }, 'a-lang' => { }, }, }, complianceProfile=>{ PrintConv => { three => 'Three' } }, contentType => { }, # (3.0) copyrightYear => { }, # (3.0) # copyright => { Groups => { 2 => 'Author' } }, # (deprecated in 3.0) corporateEntity => { List => 'Bag' }, coverDate => { %dateTimeInfo, Groups => { 2 => 'Time'} }, coverDisplayDate=> { }, creationDate => { %dateTimeInfo, Groups => { 2 => 'Time'} }, dateRecieved => { %dateTimeInfo, Groups => { 2 => 'Time'} }, device => { }, # (3.0) distributor => { }, doi => { Name => 'DOI', Description => 'Digital Object Identifier' }, edition => { }, eIssn => { }, #embargoDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} }, # (deprecated in 3.0) endingPage => { }, event => { List => 'Bag' }, #expirationDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} }, # (deprecated in 3.0) genre => { List => 'Bag' }, hasAlternative => { List => 'Bag' }, hasCorrection => { Struct => { # (becomes a structure in 3.0) STRUCT_NAME => 'prismHasCorrection', NAMESPACE => 'prism', text => { }, 'a-platform'=> { }, 'a-lang' => { }, }, }, # hasPreviousVersion => { }, # (not in 3.0) hasTranslation => { List => 'Bag' }, industry => { List => 'Bag' }, isAlternativeOf => { List => 'Bag' }, # (3.0) isbn => { Name => 'ISBN', List => 'Bag' }, # 2.1 (becomes a list in 3.0) isCorrectionOf => { List => 'Bag' }, issn => { Name => 'ISSN' }, issueIdentifier => { }, issueName => { }, issueTeaser => { }, # (3.0) issueType => { }, # (3.0) isTranslationOf => { }, keyword => { List => 'Bag' }, killDate => { Struct => { # (becomes a structure in 3.0) STRUCT_NAME => 'prismKillDate', NAMESPACE => 'prism', date => { %dateTimeInfo, Groups => { 2 => 'Time'} }, 'a-platform'=> { }, #PH (missed in spec?) }, }, 'link' => { List => 'Bag' }, # (3.0) location => { List => 'Bag' }, # metadataContainer => { }, (not valid for PRISM XMP) modificationDate=> { %dateTimeInfo, Groups => { 2 => 'Time'} }, nationalCatalogNumber => { }, # (3.0) number => { }, object => { List => 'Bag' }, onSaleDate => { # (3.0) List => 'Bag', Struct => { STRUCT_NAME => 'prismOnSaleDate', NAMESPACE => 'prism', date => { %dateTimeInfo, Groups => { 2 => 'Time'} }, 'a-platform'=> { }, }, }, onSaleDay => { # (3.0) List => 'Bag', Struct => { STRUCT_NAME => 'prismOnSaleDay', NAMESPACE => 'prism', day => { }, #PH (not named in spec) 'a-platform'=> { }, }, }, offSaleDate => { # (3.0) List => 'Bag', Struct => { STRUCT_NAME => 'prismOffSaleDate', NAMESPACE => 'prism', date => { %dateTimeInfo, Groups => { 2 => 'Time'} }, 'a-platform'=> { }, }, }, organization => { List => 'Bag' }, originPlatform => { List => 'Bag', PrintConv => { email => 'E-Mail', mobile => 'Mobile', broadcast => 'Broadcast', web => 'Web', 'print' => 'Print', recordableMedia => 'Recordable Media', other => 'Other', }, }, pageCount => { Writable => 'integer' }, # (3.0) pageProgressionDirection => { # (3.0) PrintConv => { LTR => 'Left to Right', RTL => 'Right to Left' }, }, pageRange => { List => 'Bag' }, person => { }, platform => { }, # (3.0) productCode => { }, # (3.0) profession => { }, # (3.0) publicationDate => { List => 'Bag', Struct => \%prismPublicationDate, # (becomes a structure in 3.0) }, publicationDisplayDate => { # (3.0) List => 'Bag', Struct => \%prismPublicationDate, }, publicationName => { }, publishingFrequency => { }, # (3.0) rating => { }, # rightsAgent => { }, # (deprecated in 3.0) samplePageRange => { }, # (3.0) section => { }, sellingAgency => { }, # (3.0) seriesNumber => { Writable => 'integer' }, # (3.0) seriesTitle => { }, # (3.0) sport => { }, # (3.0) startingPage => { }, subsection1 => { }, subsection2 => { }, subsection3 => { }, subsection4 => { }, subtitle => { }, # (3.0) supplementDisplayID => { }, # (3.0) supplementStartingPage => { }, # (3.0) supplementTitle => { }, # (3.0) teaser => { List => 'Bag' }, ticker => { List => 'Bag' }, timePeriod => { }, url => { Name => 'URL', List => 'Bag', Struct => { # (becomes a structure in 3.0) STRUCT_NAME => 'prismUrl', NAMESPACE => 'prism', url => { }, 'a-platform'=> { }, }, }, uspsNumber => { }, # (3.0) versionIdentifier => { }, volume => { }, wordCount => { Writable => 'integer' }, # tags that existed in version 1.3 # category => { %obsolete, List => 'Bag' }, # hasFormat => { %obsolete, List => 'Bag' }, # hasPart => { %obsolete, List => 'Bag' }, # isFormatOf => { %obsolete, List => 'Bag' }, # isPartOf => { %obsolete }, # isReferencedBy => { %obsolete, List => 'Bag' }, # isRequiredBy => { %obsolete, List => 'Bag' }, # isVersionOf => { %obsolete }, # objectTitle => { %obsolete, List => 'Bag' }, # receptionDate => { %obsolete }, # references => { %obsolete, List => 'Bag' }, # requires => { %obsolete, List => 'Bag' }, # tags in older versions # page # contentLength # creationTime # expirationTime # hasVersion # isAlternativeFor # isBasedOn # isBasisFor # modificationTime # publicationTime # receptionTime # releaseTime ); # PRISM Rights Language namespace (prl) (ref 2) %Image::ExifTool::XMP::prl = ( %xmpTableDefaults, GROUPS => { 0 => 'XMP', 1 => 'XMP-prl', 2 => 'Document' }, NAMESPACE => 'prl', NOTES => q{ PRISM Rights Language 2.1 namespace tags. These tags have been deprecated since the release of the PRISM Usage Rights 3.0. (see L<http://www.prismstandard.org/>) }, geography => { List => 'Bag' }, industry => { List => 'Bag' }, usage => { List => 'Bag' }, ); # PRISM Usage Rights namespace (prismusagerights) (ref 2) %Image::ExifTool::XMP::pur = ( %xmpTableDefaults, GROUPS => { 0 => 'XMP', 1 => 'XMP-pur', 2 => 'Document' }, NAMESPACE => 'pur', NOTES => q{ PRISM Usage Rights 3.0 namespace tags. (see L<http://www.prismstandard.org/>) }, adultContentWarning => { List => 'Bag' }, agreement => { List => 'Bag' }, copyright => { # (not clear in 3.0 spec, which lists only "bag Text", and called # "copyrightDate" instead of "copyright" the PRISM basic 3.0 spec) Writable => 'lang-alt', Groups => { 2 => 'Author' }, }, creditLine => { List => 'Bag' }, embargoDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} }, exclusivityEndDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} }, expirationDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} }, imageSizeRestriction=> { }, optionEndDate => { List => 'Bag', %dateTimeInfo, Groups => { 2 => 'Time'} }, permissions => { List => 'Bag' }, restrictions => { List => 'Bag' }, reuseProhibited => { Writable => 'boolean' }, rightsAgent => { }, rightsOwner => { }, # usageFee => { List => 'Bag' }, # (not in 3.0) ); # PRISM Metadata for Images namespace (pmi) (ref 2) %Image::ExifTool::XMP::pmi = ( %xmpTableDefaults, GROUPS => { 0 => 'XMP', 1 => 'XMP-pmi', 2 => 'Image' }, NAMESPACE => 'pmi', NOTES => q{ PRISM Metadata for Images 3.0 namespace tags. (see L<http://www.prismstandard.org/>) }, color => { PrintConv => { bw => 'BW', color => 'Color', sepia => 'Sepia', duotone => 'Duotone', tritone => 'Tritone', quadtone => 'Quadtone', }, }, contactInfo => { }, displayName => { }, distributorProductID => { }, eventAlias => { }, eventEnd => { }, eventStart => { }, eventSubtype => { }, eventType => { }, field => { }, framing => { }, location => { }, make => { }, manufacturer => { }, model => { }, modelYear => { }, objectDescription=>{ }, objectSubtype => { }, objectType => { }, orientation => { PrintConv => { horizontal => 'Horizontal', vertical => 'Vertical', } }, positionDescriptor => { }, productID => { }, productIDType => { }, season => { PrintConv => { spring => 'Spring', summer => 'Summer', fall => 'Fall', winter => 'Winter', }, }, sequenceName => { }, sequenceNumber => { }, sequenceTotalNumber => { }, setting => { }, shootID => { }, slideshowName => { }, slideshowNumber => { Writable => 'integer' }, slideshowTotalNumber => { Writable => 'integer' }, viewpoint => { }, visualTechnique => { }, ); # PRISM Recipe Metadata (prm) (ref 2) %Image::ExifTool::XMP::prm = ( %xmpTableDefaults, GROUPS => { 0 => 'XMP', 1 => 'XMP-prm', 2 => 'Document' }, NAMESPACE => 'prm', NOTES => q{ PRISM Recipe Metadata 3.0 namespace tags. (see L<http://www.prismstandard.org/>) }, cookingEquipment => { }, cookingMethod => { }, course => { }, cuisine => { }, dietaryNeeds => { }, dishType => { }, duration => { }, ingredientExclusion => { }, mainIngredient => { }, meal => { }, recipeEndingPage => { }, recipePageRange => { }, recipeSource => { }, recipeStartingPage => { }, recipeTitle => { }, servingSize => { }, skillLevel => { }, specialOccasion => { }, yield => { }, ); #------------------------------------------------------------------------------ # DICOM namespace properties (DICOM) (ref PH, written by CS3) %Image::ExifTool::XMP::DICOM = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-DICOM', 2 => 'Image' }, NAMESPACE => 'DICOM', NOTES => q{ DICOM namespace tags. These XMP tags allow some DICOM information to be stored in files of other than DICOM format. See the L<DICOM Tags documentation|Image::ExifTool::TagNames/DICOM Tags> for a list of tags available in DICOM-format files. }, # change some tag names to correspond with DICOM tags PatientName => { }, PatientID => { }, PatientSex => { }, PatientDOB => { Name => 'PatientBirthDate', Groups => { 2 => 'Time' }, %dateTimeInfo, }, StudyID => { }, StudyPhysician => { }, StudyDateTime => { Groups => { 2 => 'Time' }, %dateTimeInfo }, StudyDescription => { }, SeriesNumber => { }, SeriesModality => { }, SeriesDateTime => { Groups => { 2 => 'Time' }, %dateTimeInfo }, SeriesDescription => { }, EquipmentInstitution => { }, EquipmentManufacturer => { }, ); # PixelLive namespace properties (PixelLive) (ref 3) %Image::ExifTool::XMP::PixelLive = ( GROUPS => { 1 => 'XMP-PixelLive', 2 => 'Image' }, NAMESPACE => 'PixelLive', NOTES => q{ PixelLive namespace tags. These tags are not writable becase they are very uncommon and I haven't been able to locate a reference which gives the namespace URI. }, AUTHOR => { Name => 'Author', Avoid => 1, Groups => { 2 => 'Author' } }, COMMENTS => { Name => 'Comments', Avoid => 1 }, COPYRIGHT => { Name => 'Copyright',Avoid => 1, Groups => { 2 => 'Author' } }, DATE => { Name => 'Date', Avoid => 1, Groups => { 2 => 'Time' } }, GENRE => { Name => 'Genre', Avoid => 1 }, TITLE => { Name => 'Title', Avoid => 1 }, ); # Extensis Portfolio tags (extensis) (ref 11) %Image::ExifTool::XMP::extensis = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-extensis', 2 => 'Image' }, NAMESPACE => 'extensis', NOTES => 'Tags used by Extensis Portfolio.', Approved => { Writable => 'boolean' }, ApprovedBy => { }, ClientName => { }, JobName => { }, JobStatus => { }, RoutedTo => { }, RoutingNotes => { }, WorkToDo => { }, ); # IDimager structures (ref PH) my %sTagStruct; %sTagStruct = ( STRUCT_NAME => 'TagStructure', NAMESPACE => 'ics', LabelName => { }, Reference => { }, ParentReference => { }, SubLabels => { Struct => \%sTagStruct, List => 'Bag' }, ); my %sSubVersion = ( STRUCT_NAME => 'SubVersion', NAMESPACE => 'ics', VersRef => { }, FileName => { }, ); # IDimager namespace (ics) (ref PH) %Image::ExifTool::XMP::ics = ( %xmpTableDefaults, GROUPS => { 0 => 'XMP', 1 => 'XMP-ics', 2 => 'Image' }, NAMESPACE => 'ics', NOTES => q{ Tags used by IDimager. Nested TagStructure structures are unrolled to an arbitrary depth of 6 to avoid infinite recursion. }, ImageRef => { }, TagStructure => { Struct => \%sTagStruct, List => 'Bag' }, TagStructureLabelName => { Name => 'LabelName1', Flat => 1 }, TagStructureReference => { Name => 'Reference1', Flat => 1 }, TagStructureSubLabels => { Name => 'SubLables1', Flat => 1 }, TagStructureParentReference => { Name => 'ParentReference1', Flat => 1 }, TagStructureSubLabelsLabelName => { Name => 'LabelName2', Flat => 1 }, TagStructureSubLabelsReference => { Name => 'Reference2', Flat => 1 }, TagStructureSubLabelsSubLabels => { Name => 'SubLables2', Flat => 1 }, TagStructureSubLabelsParentReference => { Name => 'ParentReference2', Flat => 1 }, TagStructureSubLabelsSubLabelsLabelName => { Name => 'LabelName3', Flat => 1 }, TagStructureSubLabelsSubLabelsReference => { Name => 'Reference3', Flat => 1 }, TagStructureSubLabelsSubLabelsSubLabels => { Name => 'SubLables3', Flat => 1 }, TagStructureSubLabelsSubLabelsParentReference => { Name => 'ParentReference3', Flat => 1 }, TagStructureSubLabelsSubLabelsSubLabelsLabelName => { Name => 'LabelName4', Flat => 1 }, TagStructureSubLabelsSubLabelsSubLabelsReference => { Name => 'Reference4', Flat => 1 }, TagStructureSubLabelsSubLabelsSubLabelsSubLabels => { Name => 'SubLabels4', Flat => 1 }, TagStructureSubLabelsSubLabelsSubLabelsParentReference => { Name => 'ParentReference4', Flat => 1 }, TagStructureSubLabelsSubLabelsSubLabelsSubLabelsLabelName => { Name => 'LabelName5', Flat => 1 }, TagStructureSubLabelsSubLabelsSubLabelsSubLabelsReference => { Name => 'Reference5', Flat => 1 }, TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabels => { Name => 'SubLabels5', Flat => 1, NoSubStruct => 1 }, # break infinite recursion TagStructureSubLabelsSubLabelsSubLabelsSubLabelsParentReference => { Name => 'ParentReference5', Flat => 1 }, TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsLabelName => { Name => 'LabelName6', Flat => 1 }, TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsReference => { Name => 'Reference6', Flat => 1 }, TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsParentReference => { Name => 'ParentReference6', Flat => 1 }, SubVersions => { Struct => \%sSubVersion, List => 'Bag' }, SubVersionsVersRef => { Name => 'SubVersionReference', Flat => 1 }, SubVersionsFileName => { Name => 'SubVersionFileName', Flat => 1 }, ); # ACDSee namespace (acdsee) (ref PH) %Image::ExifTool::XMP::acdsee = ( %xmpTableDefaults, GROUPS => { 0 => 'XMP', 1 => 'XMP-acdsee', 2 => 'Image' }, NAMESPACE => 'acdsee', NOTES => q{ ACD Systems ACDSee namespace tags. (A note to software developers: Re-inventing your own private tags instead of using the equivalent tags in standard XMP namespaces defeats one of the most valuable features of metadata: interoperability. Your applications mumble to themselves instead of speaking out for the rest of the world to hear.) }, author => { Avoid => 1, Groups => { 2 => 'Author' } }, caption => { Avoid => 1 }, categories => { Avoid => 1 }, collections=> { Avoid => 1 }, datetime => { Name => 'DateTime', Avoid => 1, Groups => { 2 => 'Time' }, %dateTimeInfo }, keywords => { Avoid => 1, List => 'Bag' }, notes => { Avoid => 1 }, rating => { Avoid => 1, Writable => 'real' }, # integer? tagged => { Avoid => 1, Writable => 'boolean' }, rawrppused => { Writable => 'boolean' }, rpp => { Name => 'RPP', Writable => 'lang-alt', Notes => 'raw processing settings in XML format', Binary => 1, }, dpp => { Name => 'DPP', Writable => 'lang-alt', Notes => 'newer version of XML raw processing settings', Binary => 1, }, ); # Picture Licensing Universal System namespace properties (xmpPLUS) %Image::ExifTool::XMP::xmpPLUS = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-xmpPLUS', 2 => 'Author' }, NAMESPACE => 'xmpPLUS', NOTES => 'XMP Picture Licensing Universal System (PLUS) namespace tags.', CreditLineReq => { Writable => 'boolean' }, ReuseAllowed => { Writable => 'boolean' }, ); # Creative Commons namespace properties (cc) (ref 5) %Image::ExifTool::XMP::cc = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-cc', 2 => 'Author' }, NAMESPACE => 'cc', NOTES => q{ Creative Commons namespace tags. Note that the CC specification for XMP is non-existent, so ExifTool must make some assumptions about the format of the specific properties in XMP (see L<http://creativecommons.org/ns>). }, # Work properties license => { Resource => 1 }, attributionName => { }, attributionURL => { Resource => 1 }, morePermissions => { Resource => 1 }, useGuidelines => { Resource => 1 }, # License properties permits => { List => 'Bag', Resource => 1, PrintConv => { 'cc:Sharing' => 'Sharing', 'cc:DerivativeWorks' => 'Derivative Works', 'cc:Reproduction' => 'Reproduction', 'cc:Distribution' => 'Distribution', }, }, requires => { List => 'Bag', Resource => 1, PrintConv => { 'cc:Copyleft' => 'Copyleft', 'cc:LesserCopyleft' => 'Lesser Copyleft', 'cc:SourceCode' => 'Source Code', 'cc:ShareAlike' => 'Share Alike', 'cc:Notice' => 'Notice', 'cc:Attribution' => 'Attribution', }, }, prohibits => { List => 'Bag', Resource => 1, PrintConv => { 'cc:HighIncomeNationUse' => 'High Income Nation Use', 'cc:CommercialUse' => 'Commercial Use', }, }, jurisdiction => { Resource => 1 }, legalcode => { Name => 'LegalCode', Resource => 1 }, deprecatedOn => { %dateTimeInfo, Groups => { 2 => 'Time' } }, ); # Description Explorer namespace properties (dex) (ref 6) %Image::ExifTool::XMP::dex = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-dex', 2 => 'Image' }, NAMESPACE => 'dex', NOTES => q{ Description Explorer namespace tags. These tags are not very common. The Source and Rating tags are avoided when writing due to name conflicts with other XMP tags. (see L<http://www.optimasc.com/products/fileid/>) }, crc32 => { Name => 'CRC32', Writable => 'integer' }, source => { Avoid => 1 }, shortdescription => { Name => 'ShortDescription', Writable => 'lang-alt', }, licensetype => { Name => 'LicenseType', PrintConv => { unknown => 'Unknown', shareware => 'Shareware', freeware => 'Freeware', adware => 'Adware', demo => 'Demo', commercial => 'Commercial', 'public domain' => 'Public Domain', 'open source' => 'Open Source', }, }, revision => { }, rating => { Avoid => 1 }, os => { Name => 'OS', Writable => 'integer' }, ffid => { Name => 'FFID' }, ); # iView MediaPro namespace properties (mediapro) (ref PH) %Image::ExifTool::XMP::MediaPro = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-mediapro', 2 => 'Image' }, NAMESPACE => 'mediapro', NOTES => 'iView MediaPro namespace tags.', Event => { Avoid => 1, Notes => 'avoided due to conflict with XMP-iptcExt:Event', }, Location => { Avoid => 1, Groups => { 2 => 'Location' }, Notes => 'avoided due to conflict with XMP-iptcCore:Location', }, Status => { }, People => { List => 'Bag' }, UserFields => { List => 'Bag' }, CatalogSets => { List => 'Bag' }, ); # Microsoft ExpressionMedia namespace properties (expressionmedia) # (ref http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4235.0.html) %Image::ExifTool::XMP::ExpressionMedia = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-expressionmedia', 2 => 'Image' }, NAMESPACE => 'expressionmedia', NOTES => q{ Microsoft Expression Media namespace tags. These tags are avoided when writing due to name conflicts with tags in other schemas. }, Event => { Avoid => 1 }, Status => { Avoid => 1 }, People => { Avoid => 1, List => 'Bag' }, CatalogSets => { Avoid => 1, List => 'Bag' }, ); # DigiKam namespace tags (ref PH) %Image::ExifTool::XMP::digiKam = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-digiKam', 2 => 'Image' }, NAMESPACE => 'digiKam', NOTES => 'DigiKam namespace tags.', CaptionsAuthorNames => { Writable => 'lang-alt' }, CaptionsDateTimeStamps => { Writable => 'lang-alt', Groups => { 2 => 'Time' } }, TagsList => { List => 'Seq' }, ColorLabel => { }, PickLabel => { }, ImageHistory => { Avoid => 1, Notes => 'different format from EXIF:ImageHistory' }, LensCorrectionSettings => { }, ); # SWF namespace tags (ref PH) %Image::ExifTool::XMP::swf = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-swf', 2 => 'Image' }, NAMESPACE => 'swf', NOTES => 'Adobe SWF namespace tags.', type => { Avoid => 1 }, bgalpha => { Name => 'BackgroundAlpha', Writable => 'integer' }, forwardlock => { Name => 'ForwardLock', Writable => 'boolean' }, maxstorage => { Name => 'MaxStorage', Writable => 'integer' }, # (CS5) ); # Sony Ericsson cell phone location tags # refs: http://www.opencellid.org/api # http://zonetag.research.yahoo.com/faq_location.php # http://www.cs.columbia.edu/sip/drafts/LIF%20TS%20101%20v2.0.0.pdf %Image::ExifTool::XMP::cell = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-cell', 2 => 'Location' }, NAMESPACE => 'cell', NOTES => 'Location tags written by some Sony Ericsson phones.', mcc => { Name => 'MobileCountryCode' }, mnc => { Name => 'MobileNetworkCode' }, lac => { Name => 'LocationAreaCode' }, cellid => { Name => 'CellTowerID' }, cgi => { Name => 'CellGlobalID' }, r => { Name => 'CellR' }, # (what is this? Radius?) ); # Apple adjustment settings (ref PH) %Image::ExifTool::XMP::aas = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-aas', 2 => 'Image' }, NAMESPACE => 'aas', NOTES => 'Apple Adjustment Settings used by iPhone/iPad.', CropX => { Writable => 'integer', Avoid => 1 }, CropY => { Writable => 'integer', Avoid => 1 }, CropW => { Writable => 'integer', Avoid => 1 }, CropH => { Writable => 'integer', Avoid => 1 }, AffineA => { Writable => 'real' }, AffineB => { Writable => 'real' }, AffineC => { Writable => 'real' }, AffineD => { Writable => 'real' }, AffineX => { Writable => 'real' }, AffineY => { Writable => 'real' }, Vibrance => { Writable => 'real', Avoid => 1 }, Curve0x => { Writable => 'real' }, Curve0y => { Writable => 'real' }, Curve1x => { Writable => 'real' }, Curve1y => { Writable => 'real' }, Curve2x => { Writable => 'real' }, Curve2y => { Writable => 'real' }, Curve3x => { Writable => 'real' }, Curve3y => { Writable => 'real' }, Curve4x => { Writable => 'real' }, Curve4y => { Writable => 'real' }, Shadows => { Writable => 'real', Avoid => 1 }, Highlights => { Writable => 'real', Avoid => 1 }, ); # Adobe creatorAtom properties (ref PH) %Image::ExifTool::XMP::creatorAtom = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-creatorAtom', 2 => 'Image' }, NAMESPACE => 'creatorAtom', NOTES => 'Adobe creatorAtom tags, written by After Effects.', macAtom => { Struct => { STRUCT_NAME => 'MacAtom', NAMESPACE => 'creatorAtom', applicationCode => { }, invocationAppleEvent => { }, posixProjectPath => { }, }, }, windowsAtom => { Struct => { STRUCT_NAME => 'WindowsAtom', NAMESPACE => 'creatorAtom', extension => { }, invocationFlags => { }, uncProjectPath => { }, }, }, aeProjectLink => { # (After Effects Project Link) Struct => { STRUCT_NAME => 'AEProjectLink', NAMESPACE => 'creatorAtom', renderTimeStamp => { Writable => 'integer' }, compositionID => { }, renderQueueItemID => { }, renderOutputModuleIndex => { }, fullPath => { }, }, }, ); # FastPictureViewer namespace properties (http://www.fastpictureviewer.com/help/#rtfcomments) %Image::ExifTool::XMP::fpv = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-fpv', 2 => 'Image' }, NAMESPACE => 'fpv', NOTES => q{ Fast Picture Viewer tags (see L<http://www.fastpictureviewer.com/help/#rtfcomments>). }, RichTextComment => { }, ); # Apple FaceInfo namespace properties (ref PH) %Image::ExifTool::XMP::apple_fi = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-apple-fi', 2 => 'Image' }, NAMESPACE => 'apple-fi', NOTES => q{ Face information tags written by the Apple iPhone 5 inside the mwg-rs RegionExtensions. }, Timestamp => { Name => 'TimeStamp', Writable => 'integer', # (don't know how to convert this) }, FaceID => { Writable => 'integer' }, AngleInfoRoll => { Writable => 'integer' }, AngleInfoYaw => { Writable => 'integer' }, ConfidenceLevel => { Writable => 'integer' }, ); # Google panorama namespace properties # (ref http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4569.0.html) %Image::ExifTool::XMP::GPano = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-GPano', 2 => 'Image' }, NAMESPACE => 'GPano', NOTES => q{ Panorama tags written by Google Photosphere. See L<https://developers.google.com/panorama/metadata/> for the specification. }, UsePanoramaViewer => { Writable => 'boolean' }, CaptureSoftware => { }, StitchingSoftware => { }, ProjectionType => { }, PoseHeadingDegrees => { Writable => 'real' }, PosePitchDegrees => { Writable => 'real' }, PoseRollDegrees => { Writable => 'real' }, InitialViewHeadingDegrees => { Writable => 'integer' }, InitialViewPitchDegrees => { Writable => 'integer' }, InitialViewRollDegrees => { Writable => 'integer' }, InitialHorizontalFOVDegrees => { Writable => 'real' }, FirstPhotoDate => { %dateTimeInfo, Groups => { 2 => 'Time' } }, LastPhotoDate => { %dateTimeInfo, Groups => { 2 => 'Time' } }, SourcePhotosCount => { Writable => 'integer' }, ExposureLockUsed => { Writable => 'boolean' }, CroppedAreaImageWidthPixels => { Writable => 'integer' }, CroppedAreaImageHeightPixels => { Writable => 'integer' }, FullPanoWidthPixels => { Writable => 'integer' }, FullPanoHeightPixels => { Writable => 'integer' }, CroppedAreaLeftPixels => { Writable => 'integer' }, CroppedAreaTopPixels => { Writable => 'integer' }, # (the following have been observed, but are not in the specification) LargestValidInteriorRectLeft => { Writable => 'integer' }, LargestValidInteriorRectTop => { Writable => 'integer' }, LargestValidInteriorRectWidth => { Writable => 'integer' }, LargestValidInteriorRectHeight => { Writable => 'integer' }, ); # Getty Images namespace (ref PH) %Image::ExifTool::XMP::GettyImages = ( %xmpTableDefaults, GROUPS => { 1 => 'XMP-getty', 2 => 'Image' }, NAMESPACE => 'GettyImagesGIFT', NOTES => q{ The actual Getty Images namespace prefix is "GettyImagesGIFT", which is the prefix recorded in the file, but ExifTool shortens this for the "XMP-getty" family 1 group name. }, Personality => { }, OriginalFilename => { Name => 'OriginalFileName' }, ParentMEID => { }, ); # SVG namespace properties (ref 9) %Image::ExifTool::XMP::SVG = ( GROUPS => { 0 => 'SVG', 1 => 'SVG', 2 => 'Image' }, NAMESPACE => 'svg', LANG_INFO => \&GetLangInfo, NOTES => q{ SVG (Scalable Vector Graphics) image tags. By default, only the top-level SVG and Metadata tags are extracted from these images, but all graphics tags may be extracted by setting the Unknown option to 2 (-U on the command line). The SVG tags are not part of XMP as such, but are included with the XMP module for convenience. (see L<http://www.w3.org/TR/SVG11/>) }, version => 'SVGVersion', id => 'ID', metadataId => 'MetadataID', width => { Name => 'ImageWidth', ValueConv => '$val =~ s/px$//; $val', }, height => { Name => 'ImageHeight', ValueConv => '$val =~ s/px$//; $val', }, ); # table to add tags in other namespaces %Image::ExifTool::XMP::otherSVG = ( GROUPS => { 0 => 'SVG', 2 => 'Unknown' }, LANG_INFO => \&GetLangInfo, NAMESPACE => undef, # variable namespace ); # set "Avoid" flag for all PRISM tags my ($table, $key); foreach $table ( \%Image::ExifTool::XMP::prism, \%Image::ExifTool::XMP::prl, \%Image::ExifTool::XMP::pur, \%Image::ExifTool::XMP::pmi, \%Image::ExifTool::XMP::prm) { foreach $key (TagTableKeys($table)) { $$table{$key}{Avoid} = 1; } } 1; #end __END__ =head1 NAME Image::ExifTool::XMP2.pl - Additional XMP namespace definitions =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This file contains definitions for less common XMP namespaces. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://ns.useplus.org/> =item L<http://www.prismstandard.org/> =item L<http://www.portfoliofaq.com/pfaq/v7mappings.htm> =item L<http://creativecommons.org/technology/xmp> =item L<http://www.optimasc.com/products/fileid/xmp-extensions.pdf> =item L<http://www.w3.org/TR/SVG11/> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/XMP Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/XMPStruct.pl������������������������������������������������000644 �000765 �000024 �00000105455 12642461342 022130� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: XMPStruct.pl # # Description: XMP structure support # # Revisions: 01/01/2011 - P. Harvey Created #------------------------------------------------------------------------------ package Image::ExifTool::XMP; use strict; use vars qw(%specialStruct %stdXlatNS); use Image::ExifTool qw(:Utils); use Image::ExifTool::XMP; sub SerializeStruct($;$); sub InflateStruct($;$); sub DumpStruct($;$); sub CheckStruct($$$); sub AddNewStruct($$$$$$); sub ConvertStruct($$$$;$); #------------------------------------------------------------------------------ # Serialize a structure (or other object) into a simple string # Inputs: 0) HASH ref, ARRAY ref, or SCALAR, 1) closing bracket (or undef) # Returns: serialized structure string # eg) "{field=text with {braces|}|, and a comma, field2=val2,field3={field4=[a,b]}}" sub SerializeStruct($;$) { my ($obj, $ket) = @_; my ($key, $val, @vals, $rtnVal); if (ref $obj eq 'HASH') { foreach $key (sort keys %$obj) { push @vals, $key . '=' . SerializeStruct($$obj{$key}, '}'); } $rtnVal = '{' . join(',', @vals) . '}'; } elsif (ref $obj eq 'ARRAY') { foreach $val (@$obj) { push @vals, SerializeStruct($val, ']'); } $rtnVal = '[' . join(',', @vals) . ']'; } elsif (defined $obj) { $obj = $$obj if ref $obj eq 'SCALAR'; # escape necessary characters in string (closing bracket plus "," and "|") my $pat = $ket ? "\\$ket|,|\\|" : ',|\\|'; ($rtnVal = $obj) =~ s/($pat)/|$1/g; # also must escape opening bracket or whitespace at start of string $rtnVal =~ s/^([\s\[\{])/|$1/; } else { $rtnVal = ''; # allow undefined list items } return $rtnVal; } #------------------------------------------------------------------------------ # Inflate structure (or other object) from a serialized string # Inputs: 0) reference to object in string form (serialized using the '|' escape) # 1) extra delimiter for scalar values delimiters # Returns: 0) object as a SCALAR, HASH ref, or ARRAY ref (or undef on error), # 1) warning string (or undef) # Notes: modifies input string to remove parsed objects sub InflateStruct($;$) { my ($obj, $delim) = @_; my ($val, $warn, $part); if ($$obj =~ s/^\s*\{//) { my %struct; while ($$obj =~ s/^\s*([-\w:]+#?)\s*=//s) { my $tag = $1; my ($v, $w) = InflateStruct($obj, '}'); $warn = $w if $w and not $warn; return(undef, $warn) unless defined $v; $struct{$tag} = $v; # eat comma separator, or all done if there wasn't one last unless $$obj =~ s/^\s*,//s; } # eat closing brace and warn if we didn't find one unless ($$obj =~ s/^\s*\}//s or $warn) { if (length $$obj) { ($part = $$obj) =~ s/^\s*//s; $part =~ s/[\x0d\x0a].*//s; $part = substr($part,0,27) . '...' if length($part) > 30; $warn = "Invalid structure field at '$part'"; } else { $warn = 'Missing closing brace for structure'; } } $val = \%struct; } elsif ($$obj =~ s/^\s*\[//) { my @list; for (;;) { my ($v, $w) = InflateStruct($obj, ']'); $warn = $w if $w and not $warn; return(undef, $warn) unless defined $v; push @list, $v; last unless $$obj =~ s/^\s*,//s; } # eat closing bracket and warn if we didn't find one $$obj =~ s/^\s*\]//s or $warn or $warn = 'Missing closing bracket for list'; $val = \@list; } else { $$obj =~ s/^\s+//s; # remove leading whitespace # read scalar up to specified delimiter (or "," if not defined) $val = ''; $delim = $delim ? "\\$delim|,|\\||\$" : ',|\\||$'; for (;;) { $$obj =~ s/^(.*?)($delim)//s and $val .= $1; last unless $2; $2 eq '|' or $$obj = $2 . $$obj, last; $$obj =~ s/^(.)//s and $val .= $1; # add escaped character } } return($val, $warn); } #------------------------------------------------------------------------------ # Get XMP language code from tag name string # Inputs: 0) tag name string # Returns: 0) separated tag name, 1) language code (in standard case), or '' if # language code was 'x-default', or undef if the tag had no language code sub GetLangCode($) { my $tag = shift; if ($tag =~ /^(\w+)[-_]([a-z]{2,3}|[xi])([-_][a-z\d]{2,8}([-_][a-z\d]{1,8})*)?$/i) { # normalize case of language codes my ($tg, $langCode) = ($1, lc($2)); $langCode .= (length($3) == 3 ? uc($3) : lc($3)) if $3; $langCode =~ tr/_/-/; # RFC 3066 specifies '-' as a separator $langCode = '' if lc($langCode) eq 'x-default'; return($tg, $langCode); } else { return($tag, undef); } } #------------------------------------------------------------------------------ # Debugging routine to dump a structure, list or scalar # Inputs: 0) scalar, ARRAY ref or HASH ref, 1) indent (or undef) sub DumpStruct($;$) { local $_; my ($obj, $indent) = @_; $indent or $indent = ''; if (ref $obj eq 'HASH') { print "{\n"; foreach (sort keys %$obj) { print "$indent $_ = "; DumpStruct($$obj{$_}, "$indent "); } print $indent, "},\n"; } elsif (ref $obj eq 'ARRAY') { print "[\n"; foreach (@$obj) { print "$indent "; DumpStruct($_, "$indent "); } print $indent, "],\n", } else { print "\"$obj\",\n"; } } #------------------------------------------------------------------------------ # Recursively validate structure fields (tags) # Inputs: 0) ExifTool ref, 1) Structure ref, 2) structure table definition ref # Returns: 0) validated structure ref, 1) error string, or undef on success # Notes: # - fixes field names in structure and applies inverse conversions to values # - copies structure to avoid interdependencies with calling code on referenced values # - handles lang-alt tags, and '#' on field names # - resets UTF-8 flag of SCALAR values # - un-escapes for XML or HTML as per Escape option setting sub CheckStruct($$$) { my ($et, $struct, $strTable) = @_; my $strName = $$strTable{STRUCT_NAME} || ('XMP ' . RegisterNamespace($strTable)); ref $struct eq 'HASH' or return wantarray ? (undef, "Expecting $strName structure") : undef; my ($key, $err, $warn, %copy, $rtnVal, $val); Key: foreach $key (keys %$struct) { my $tag = $key; # allow trailing '#' to disable print conversion on a per-field basis my ($type, $fieldInfo); $type = 'ValueConv' if $tag =~ s/#$//; $fieldInfo = $$strTable{$tag} unless $specialStruct{$tag}; # fix case of field name if necessary unless ($fieldInfo) { # (sort in reverse to get lower case (not special) tags first) my ($fix) = reverse sort grep /^$tag$/i, keys %$strTable; $fieldInfo = $$strTable{$tag = $fix} if $fix and not $specialStruct{$fix}; } until (ref $fieldInfo eq 'HASH') { # generate wildcard fields on the fly (eg. mwg-rs:Extensions) unless ($$strTable{NAMESPACE}) { my ($grp, $tg, $langCode); ($grp, $tg) = $tag =~ /^(.+):(.+)/ ? (lc $1, $2) : ('', $tag); undef $grp if $grp eq 'XMP'; # (a group of 'XMP' is implied) require Image::ExifTool::TagLookup; my @matches = Image::ExifTool::TagLookup::FindTagInfo($tg); # also look for lang-alt tags unless (@matches) { ($tg, $langCode) = GetLangCode($tg); @matches = Image::ExifTool::TagLookup::FindTagInfo($tg) if defined $langCode; } my ($tagInfo, $priority, $ti, $g1); # find best matching tag foreach $ti (@matches) { my @grps = $et->GetGroup($ti); next unless $grps[0] eq 'XMP'; next if $grp and $grp ne lc $grps[1]; # must be lang-alt tag if we are writing an alternate language next if defined $langCode and not ($$ti{Writable} and $$ti{Writable} eq 'lang-alt'); my $pri = $$ti{Priority} || 1; $pri -= 10 if $$ti{Avoid}; next if defined $priority and $priority >= $pri; $priority = $pri; $tagInfo = $ti; $g1 = $grps[1]; } $tagInfo or $warn = "'$tag' is not a writable XMP tag", next Key; GetPropertyPath($tagInfo); # make sure property path is generated for this tag $tag = $$tagInfo{Name}; $tag = "$g1:$tag" if $grp; $tag .= "-$langCode" if $langCode; $fieldInfo = $$strTable{$tag}; # create new structure field if necessary $fieldInfo or $fieldInfo = $$strTable{$tag} = { %$tagInfo, # (also copies the necessary TagID and PropertyPath) Namespace => $$tagInfo{Table}{NAMESPACE}, LangCode => $langCode, }; # delete stuff we don't need (shouldn't cause harm, but better safe than sorry) # - need to keep StructType and Table in case we need to call AddStructType later delete $$fieldInfo{Description}; delete $$fieldInfo{Groups}; last; # write this dynamically-generated field } # generate lang-alt fields on the fly (eg. Iptc4xmpExt:AOTitle) my ($tg, $langCode) = GetLangCode($tag); if (defined $langCode) { $fieldInfo = $$strTable{$tg} unless $specialStruct{$tg}; unless ($fieldInfo) { my ($fix) = reverse sort grep /^$tg$/i, keys %$strTable; $fieldInfo = $$strTable{$tg = $fix} if $fix and not $specialStruct{$fix}; } if (ref $fieldInfo eq 'HASH' and $$fieldInfo{Writable} and $$fieldInfo{Writable} eq 'lang-alt') { my $srcInfo = $fieldInfo; $tag = $tg . '-' . $langCode if $langCode; $fieldInfo = $$strTable{$tag}; # create new structure field if necessary $fieldInfo or $fieldInfo = $$strTable{$tag} = { %$srcInfo, TagID => $tg, LangCode => $langCode, }; last; # write this lang-alt field } } $warn = "'$tag' is not a field of $strName"; next Key; } if (ref $$struct{$key} eq 'HASH') { $$fieldInfo{Struct} or $warn = "$tag is not a structure in $strName", next Key; # recursively check this structure ($val, $err) = CheckStruct($et, $$struct{$key}, $$fieldInfo{Struct}); $err and $warn = $err, next Key; $copy{$tag} = $val; } elsif (ref $$struct{$key} eq 'ARRAY') { $$fieldInfo{List} or $warn = "$tag is not a list in $strName", next Key; # check all items in the list my ($item, @copy); my $i = 0; foreach $item (@{$$struct{$key}}) { if (not ref $item) { $item = '' unless defined $item; # use empty string for missing items if ($$fieldInfo{Struct}) { # (allow empty structures) $item =~ /^\s*$/ or $warn = "$tag items are not valid structures", next Key; $copy[$i] = { }; # create hash for empty structure } else { $et->Sanitize(\$item); ($copy[$i],$err) = $et->ConvInv($item,$fieldInfo,$tag,$strName,$type,''); $err and $warn = $err, next Key; $err = CheckXMP($et, $fieldInfo, \$copy[$i]); $err and $warn = "$err in $strName $tag", next Key; } } elsif (ref $item eq 'HASH') { $$fieldInfo{Struct} or $warn = "$tag is not a structure in $strName", next Key; ($copy[$i], $err) = CheckStruct($et, $item, $$fieldInfo{Struct}); $err and $warn = $err, next Key; } else { $warn = "Invalid value for $tag in $strName"; next Key; } ++$i; } $copy{$tag} = \@copy; } elsif ($$fieldInfo{Struct}) { $warn = "Improperly formed structure in $strName $tag"; } else { $et->Sanitize(\$$struct{$key}); ($val,$err) = $et->ConvInv($$struct{$key},$fieldInfo,$tag,$strName,$type,''); $err and $warn = $err, next Key; $err = CheckXMP($et, $fieldInfo, \$val); $err and $warn = "$err in $strName $tag", next Key; # turn this into a list if necessary $copy{$tag} = $$fieldInfo{List} ? [ $val ] : $val; } } if (%copy or not $warn) { $rtnVal = \%copy; undef $err; $$et{CHECK_WARN} = $warn if $warn; } else { $err = $warn; } return wantarray ? ($rtnVal, $err) : $rtnVal; } #------------------------------------------------------------------------------ # Delete matching structures from existing linearized XMP # Inputs: 0) ExifTool ref, 1) capture hash ref, 2) structure path ref, # 3) new value hash ref, 4) reference to change counter # Returns: 0) delete flag, 1) list index of deleted structure if adding to list # 2) flag set if structure existed # Notes: updates path to new base path for structure to be added sub DeleteStruct($$$$$) { my ($et, $capture, $pathPt, $nvHash, $changed) = @_; my ($deleted, $added, $existed, $p, $pp, $val, $delPath); my (@structPaths, @matchingPaths, @delPaths); # find all existing elements belonging to this structure ($pp = $$pathPt) =~ s/ \d+/ \\d\+/g; @structPaths = sort grep(/^$pp(\/|$)/, keys %$capture); $existed = 1 if @structPaths; # delete only structures with matching fields if necessary if ($$nvHash{DelValue}) { if (@{$$nvHash{DelValue}}) { my $strTable = $$nvHash{TagInfo}{Struct}; # all fields must match corresponding elements in the same # root structure for it to be deleted foreach $val (@{$$nvHash{DelValue}}) { next unless ref $val eq 'HASH'; my (%cap, $p2, %match); next unless AddNewStruct(undef, undef, \%cap, $$pathPt, $val, $strTable); foreach $p (keys %cap) { if ($p =~ / /) { ($p2 = $p) =~ s/ \d+/ \\d\+/g; @matchingPaths = sort grep(/^$p2$/, @structPaths); } else { push @matchingPaths, $p; } foreach $p2 (@matchingPaths) { $p2 =~ /^($pp)/ or next; # language attribute must also match if it exists my $attr = $cap{$p}[1]; if ($$attr{'xml:lang'}) { my $a2 = $$capture{$p2}[1]; next unless $$a2{'xml:lang'} and $$a2{'xml:lang'} eq $$attr{'xml:lang'}; } if ($$capture{$p2} and $$capture{$p2}[0] eq $cap{$p}[0]) { # ($1 contains root path for this structure) $match{$1} = ($match{$1} || 0) + 1; } } } my $num = scalar(keys %cap); foreach $p (keys %match) { # do nothing unless all fields matched the same structure next unless $match{$p} == $num; # delete all elements of this structure foreach $p2 (@structPaths) { push @delPaths, $p2 if $p2 =~ /^$p/; } # remember path of first deleted structure $delPath = $p if not $delPath or $delPath gt $p; } } } # (else don't delete anything) } elsif (@structPaths) { @delPaths = @structPaths; # delete all $structPaths[0] =~ /^($pp)/; $delPath = $1; } if (@delPaths) { my $verbose = $et->Options('Verbose'); @delPaths = sort @delPaths if $verbose > 1; foreach $p (@delPaths) { $et->VerboseValue("- XMP-$p", $$capture{$p}[0]) if $verbose > 1; delete $$capture{$p}; $deleted = 1; ++$$changed; } $delPath or warn("Internal error 1 in DeleteStruct\n"), return(undef,undef,$existed); $$pathPt = $delPath; # return path of first element deleted } elsif ($$nvHash{TagInfo}{List}) { # NOTE: we don't yet properly handle lang-alt elements!!!! if (@structPaths) { $structPaths[-1] =~ /^($pp)/ or warn("Internal error 2 in DeleteStruct\n"), return(undef,undef,$existed); my $path = $1; # delete any improperly formatted xmp if ($$capture{$path}) { my $cap = $$capture{$path}; # an error unless this was an empty structure $et->Error("Improperly structured XMP ($path)",1) if ref $cap ne 'ARRAY' or $$cap[0]; delete $$capture{$path}; } # (match last index to put in same lang-alt list for Bag of lang-alt items) $path =~ m/.* (\d+)/g or warn("Internal error 3 in DeleteStruct\n"), return(undef,undef,$existed); $added = $1; # add after last item in list my $len = length $added; my $pos = pos($path) - $len; my $nxt = substr($added, 1) + 1; substr($path, $pos, $len) = length($nxt) . $nxt; $$pathPt = $path; } else { $added = '10'; } } return($deleted, $added, $existed); } #------------------------------------------------------------------------------ # Add new element to XMP capture hash # Inputs: 0) ExifTool ref, 1) TagInfo ref, 2) capture hash ref, # 3) resource path, 4) value ref, 5) hash ref for last used index numbers sub AddNewTag($$$$$$) { my ($et, $tagInfo, $capture, $path, $valPtr, $langIdx) = @_; my $val = EscapeXML($$valPtr); my %attrs; # support writing RDF "resource" values if ($$tagInfo{Resource}) { $attrs{'rdf:resource'} = $val; $val = ''; } if ($$tagInfo{Writable} and $$tagInfo{Writable} eq 'lang-alt') { # write the lang-alt tag my $langCode = $$tagInfo{LangCode}; # add indexed lang-alt list properties my $i = $$langIdx{$path} || 0; $$langIdx{$path} = $i + 1; # save next list index if ($i) { my $idx = length($i) . $i; $path =~ s/(.*) \d+/$1 $idx/; # set list index } $attrs{'xml:lang'} = $langCode || 'x-default'; } $$capture{$path} = [ $val, \%attrs ]; # print verbose message if ($et and $et->Options('Verbose') > 1) { $et->VerboseValue("+ XMP-$path", $val); } } #------------------------------------------------------------------------------ # Add new structure to capture hash for writing # Inputs: 0) ExifTool object ref (or undef for no warnings), # 1) tagInfo ref (or undef if no ExifTool), 2) capture hash ref, # 3) base path, 4) struct ref, 5) struct hash ref # Returns: number of tags changed # Notes: Escapes values for XML sub AddNewStruct($$$$$$) { my ($et, $tagInfo, $capture, $basePath, $struct, $strTable) = @_; my $verbose = $et ? $et->Options('Verbose') : 0; my ($tag, %langIdx); my $ns = $$strTable{NAMESPACE} || ''; my $changed = 0; # add dummy field to allow empty structures (name starts with '~' so it will come # after all valid structure fields, which is necessary when serializing the XMP later) %$struct or $$struct{'~dummy~'} = ''; foreach $tag (sort keys %$struct) { my $fieldInfo = $$strTable{$tag}; unless ($fieldInfo) { next unless $tag eq '~dummy~'; # check for dummy field $fieldInfo = { }; # create dummy field info for dummy structure } my $val = $$struct{$tag}; my $propPath = $$fieldInfo{PropertyPath}; unless ($propPath) { $propPath = ($$fieldInfo{Namespace} || $ns) . ':' . ($$fieldInfo{TagID} || $tag); if ($$fieldInfo{List}) { $propPath .= "/rdf:$$fieldInfo{List}/rdf:li 10"; } if ($$fieldInfo{Writable} and $$fieldInfo{Writable} eq 'lang-alt') { $propPath .= "/rdf:Alt/rdf:li 10"; } $$fieldInfo{PropertyPath} = $propPath; # save for next time } my $path = $basePath . '/' . ConformPathToNamespace($et, $propPath); my $addedTag; if (ref $val eq 'HASH') { my $subStruct = $$fieldInfo{Struct} or next; $changed += AddNewStruct($et, $tagInfo, $capture, $path, $val, $subStruct); } elsif (ref $val eq 'ARRAY') { next unless $$fieldInfo{List}; my $i = 0; my ($item, $p); # loop through all list items (note: can't yet write multi-dimensional lists) foreach $item (@{$val}) { if ($i) { # update first index in field property (may be list of lang-alt lists) $p = ConformPathToNamespace($et, $propPath); my $idx = length($i) . $i; $p =~ s/ \d+/ $idx/; $p = "$basePath/$p"; } else { $p = $path; } if (ref $item eq 'HASH') { my $subStruct = $$fieldInfo{Struct} or next; AddNewStruct($et, $tagInfo, $capture, $p, $item, $subStruct) or next; } elsif (length $item) { # don't write empty items in list AddNewTag($et, $fieldInfo, $capture, $p, \$item, \%langIdx); $addedTag = 1; } ++$changed; ++$i; } } else { AddNewTag($et, $fieldInfo, $capture, $path, \$val, \%langIdx); $addedTag = 1; ++$changed; } # this is tricky, but we must add the rdf:type for contained structures # in the case that a whole hierarchy was added at once by writing a # flattened tag inside a variable-namespace structure if ($addedTag and $$fieldInfo{StructType} and $$fieldInfo{Table}) { AddStructType($et, $$fieldInfo{Table}, $capture, $propPath, $basePath); } } # add 'rdf:type' property if necessary if ($$strTable{TYPE} and $changed) { my $path = $basePath . '/' . ConformPathToNamespace($et, "rdf:type"); unless ($$capture{$path}) { $$capture{$path} = [ '', { 'rdf:resource' => $$strTable{TYPE} } ]; $et->VerboseValue("+ XMP-$path", $$strTable{TYPE}) if $verbose > 1; } } return $changed; } #------------------------------------------------------------------------------ # Convert structure field values for printing # Inputs: 0) ExifTool ref, 1) tagInfo ref for structure tag, 2) value, # 3) conversion type: PrintConv, ValueConv or Raw (Both not allowed) # 4) tagID of parent structure (needed only if there was no flattened tag) # Notes: Makes a copy of the hash so any applied escapes won't affect raw values sub ConvertStruct($$$$;$) { my ($et, $tagInfo, $value, $type, $parentID) = @_; if (ref $value eq 'HASH') { my (%struct, $key); my $table = $$tagInfo{Table}; $parentID = $$tagInfo{TagID} unless $parentID; foreach $key (keys %$value) { my $tagID = $parentID . ucfirst($key); my $flatInfo = $$table{$tagID}; unless ($flatInfo) { # handle variable-namespace structures if ($key =~ /^XMP-(.*?:)(.*)/) { $tagID = $1 . $parentID . ucfirst($2); $flatInfo = $$table{$tagID}; } $flatInfo or $flatInfo = $tagInfo; } my $v = $$value{$key}; if (ref $v) { $v = ConvertStruct($et, $flatInfo, $v, $type, $tagID); } else { $v = $et->GetValue($flatInfo, $type, $v); } $struct{$key} = $v if defined $v; # save the converted value } return \%struct; } elsif (ref $value eq 'ARRAY') { if (defined $$et{OPTIONS}{ListItem}) { my $li = $$et{OPTIONS}{ListItem}; return undef unless defined $$value[$li]; undef $$et{OPTIONS}{ListItem}; # only do top-level list my $val = ConvertStruct($et, $tagInfo, $$value[$li], $type, $parentID); $$et{OPTIONS}{ListItem} = $li; return $val; } else { my (@list, $val); foreach $val (@$value) { my $v = ConvertStruct($et, $tagInfo, $val, $type, $parentID); push @list, $v if defined $v; } return \@list; } } else { return $et->GetValue($tagInfo, $type, $value); } } #------------------------------------------------------------------------------ # Restore XMP structures in extracted information # Inputs: 0) ExifTool object ref, 1) flag to keep original flattened tags # Notes: also restores lists (including multi-dimensional) sub RestoreStruct($;$) { local $_; my ($et, $keepFlat) = @_; my ($key, %structs, %var, %lists, $si, %listKeys); my $ex = $$et{TAG_EXTRA}; my $valueHash = $$et{VALUE}; my $tagExtra = $$et{TAG_EXTRA}; foreach $key (keys %{$$et{TAG_INFO}}) { $$ex{$key} or next; my $structProps = $$ex{$key}{Struct} or next; delete $$ex{$key}{Struct}; # (don't re-use) my $tagInfo = $$et{TAG_INFO}{$key}; # tagInfo for flattened tag my $table = $$tagInfo{Table}; my $prop = shift @$structProps; my $tag = $$prop[0]; # get reference to structure tag (or normal list tag if not a structure) my $strInfo = @$structProps ? $$table{$tag} : $tagInfo; if ($strInfo) { ref $strInfo eq 'HASH' or next; # (just to be safe) if (@$structProps and not $$strInfo{Struct}) { # this could happen for invalid XMP containing mixed lists # (or for something like this -- what should we do here?: # <meta:user-defined meta:name="License">test</meta:user-defined>) $et->Warn("$$strInfo{Name} is not a structure!") unless $$et{NO_STRUCT_WARN}; next; } } else { # create new entry in tag table for this structure my $g1 = $$table{GROUPS}{0} || 'XMP'; my $name = $tag; # tag keys will have a group 1 prefix when coming from import of XML from -X option if ($tag =~ /(.+):(.+)/) { my $ns; ($ns, $name) = ($1, $2); $ns =~ s/^XMP-//; # remove leading "XMP-" if it exists because we add it later $ns = $stdXlatNS{$ns} if $stdXlatNS{$ns}; $g1 .= "-$ns"; } $strInfo = { Name => ucfirst $name, Groups => { 1 => $g1 }, Struct => 'Unknown', }; # add Struct entry if this is a structure if (@$structProps) { # this is a structure $$strInfo{Struct} = { STRUCT_NAME => 'XMP Unknown' } if @$structProps; } elsif ($$tagInfo{LangCode}) { # this is lang-alt list $tag = $tag . '-' . $$tagInfo{LangCode}; $$strInfo{LangCode} = $$tagInfo{LangCode}; } AddTagToTable($table, $tag, $strInfo); } # use strInfo ref for base key to avoid collisions $tag = $strInfo; my $struct = \%structs; my $oldStruct = $structs{$strInfo}; # (fyi: 'lang-alt' Writable type will be valid even if tag is not pre-defined) my $writable = $$tagInfo{Writable} || ''; # walk through the stored structure property information # to rebuild this structure my ($err, $i); for (;;) { my $index = $$prop[1]; if ($index and not @$structProps) { # ignore this list if it is a simple lang-alt tag if ($writable eq 'lang-alt') { pop @$prop; # remove lang-alt index undef $index if @$prop < 2; } # add language code if necessary if ($$tagInfo{LangCode} and not ref $tag) { $tag = $tag . '-' . $$tagInfo{LangCode}; } } my $nextStruct = $$struct{$tag}; if (defined $index) { # the field is a list $index = substr $index, 1; # remove digit count if ($nextStruct) { ref $nextStruct eq 'ARRAY' or $err = 2, last; $struct = $nextStruct; } else { $struct = $$struct{$tag} = [ ]; } $nextStruct = $$struct[$index]; # descend into multi-dimensional lists for ($i=2; $$prop[$i]; ++$i) { if ($nextStruct) { ref $nextStruct eq 'ARRAY' or last; $struct = $nextStruct; } else { $lists{$struct} = $struct; $struct = $$struct[$index] = [ ]; } $nextStruct = $$struct[$index]; $index = substr $$prop[$i], 1; } if (ref $nextStruct eq 'HASH') { $struct = $nextStruct; # continue building sub-structure } elsif (@$structProps) { $lists{$struct} = $struct; $struct = $$struct[$index] = { }; } else { $lists{$struct} = $struct; $$struct[$index] = $$valueHash{$key}; last; } } else { if ($nextStruct) { ref $nextStruct eq 'HASH' or $err = 3, last; $struct = $nextStruct; } elsif (@$structProps) { $struct = $$struct{$tag} = { }; } else { $$struct{$tag} = $$valueHash{$key}; last; } } $prop = shift @$structProps or last; $tag = $$prop[0]; if ($tag =~ /(.+):(.+)/) { # tag in variable-namespace tables will have a leading # XMP namespace on the tag name. In this case, add # the corresponding group1 name to the tag ID. my ($ns, $name) = ($1, $2); $ns = $stdXlatNS{$ns} if $stdXlatNS{$ns}; $tag = "XMP-$ns:" . ucfirst $name; } else { $tag = ucfirst $tag; } } if ($err) { # this may happen if we have a structural error in the XMP # (like an improperly contained list for example) unless ($$et{NO_STRUCT_WARN}) { my $ns = $$tagInfo{Namespace} || $$tagInfo{Table}{NAMESPACE} || ''; $et->Warn("Error $err placing $ns:$$tagInfo{TagID} in structure or list", 1); } delete $structs{$strInfo} unless $oldStruct; } elsif ($tagInfo eq $strInfo) { # just a regular list tag if ($oldStruct) { # keep tag with lowest numbered key (well, not exactly, since # "Tag (10)" is lt "Tag (2)", but at least "Tag" is lt # everything else, and this is really what we care about) my $k = $listKeys{$oldStruct}; $k lt $key and $et->DeleteTag($key), next; $et->DeleteTag($k); # remove tag with greater copy number } # replace existing value with new list $$valueHash{$key} = $structs{$strInfo}; $listKeys{$structs{$strInfo}} = $key; # save key for this list tag } else { # save strInfo ref and file order if ($var{$strInfo}) { # set file order to just before the first associated flattened tag if ($var{$strInfo}[1] > $$et{FILE_ORDER}{$key}) { $var{$strInfo}[1] = $$et{FILE_ORDER}{$key} - 0.5; } } else { $var{$strInfo} = [ $strInfo, $$et{FILE_ORDER}{$key} - 0.5 ]; } # preserve original flattened tags if requested if ($keepFlat) { my $extra = $$tagExtra{$key} or next; # restore list behaviour of this flattened tag if ($$extra{NoList}) { $$valueHash{$key} = $$extra{NoList}; delete $$extra{NoList}; } elsif ($$extra{NoListDel}) { # delete this tag since its value was included another list $et->DeleteTag($key); } } else { $et->DeleteTag($key); # delete the flattened tag } } } # fill in undefined items in lists. In theory, undefined list items should # be fine, but in practice the calling code may not check for this (and # historically this wasn't necessary, so do this for backward compatibility) foreach $si (keys %lists) { defined $_ or $_ = '' foreach @{$lists{$si}}; } # save new structure tags foreach $si (keys %structs) { next unless $var{$si}; # already handled regular lists $key = $et->FoundTag($var{$si}[0], ''); $$valueHash{$key} = $structs{$si}; $$et{FILE_ORDER}{$key} = $var{$si}[1]; } } 1; #end __END__ =head1 NAME Image::ExifTool::XMPStruct.pl - XMP structure support =head1 SYNOPSIS This module is loaded automatically by Image::ExifTool when required. =head1 DESCRIPTION This file contains routines to provide read/write support of structured XMP information. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool::TagNames/XMP Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/ZIP.pm������������������������������������������������������000644 �000765 �000024 �00000060625 12642461342 020721� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: ZIP.pm # # Description: Read ZIP archive meta information # # Revisions: 10/28/2007 - P. Harvey Created # # References: 1) http://www.pkware.com/documents/casestudies/APPNOTE.TXT # 2) http://www.cpanforum.com/threads/9046 # 3) http://www.gzip.org/zlib/rfc-gzip.html # 4) http://DataCompression.info/ArchiveFormats/RAR202.txt # 5) https://jira.atlassian.com/browse/CONF-21706 # 6) http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/indesign/cs55-docs/IDML/idml-specification.pdf #------------------------------------------------------------------------------ package Image::ExifTool::ZIP; use strict; use vars qw($VERSION $warnString); use Image::ExifTool qw(:DataAccess :Utils); $VERSION = '1.18'; sub WarnProc($) { $warnString = $_[0]; } # file types for recognized Open Document "mimetype" values my %openDocType = ( 'application/vnd.oasis.opendocument.database' => 'ODB', #5 'application/vnd.oasis.opendocument.chart' => 'ODC', #5 'application/vnd.oasis.opendocument.formula' => 'ODF', #5 'application/vnd.oasis.opendocument.graphics' => 'ODG', #5 'application/vnd.oasis.opendocument.image' => 'ODI', #5 'application/vnd.oasis.opendocument.presentation' => 'ODP', 'application/vnd.oasis.opendocument.spreadsheet' => 'ODS', 'application/vnd.oasis.opendocument.text' => 'ODT', 'application/vnd.adobe.indesign-idml-package' => 'IDML', #6 (not open doc) 'application/epub+zip' => 'EPUB', #PH (not open doc) ); # ZIP metadata blocks %Image::ExifTool::ZIP::Main = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Other' }, FORMAT => 'int16u', NOTES => q{ The following tags are extracted from ZIP archives. ExifTool also extracts additional meta information from compressed documents inside some ZIP-based files such Office Open XML (DOCX, PPTX and XLSX), Open Document (ODB, ODC, ODF, ODG, ODI, ODP, ODS and ODT), iWork (KEY, PAGES, NUMBERS), Capture One Enhanced Image Package (EIP), Adobe InDesign Markup Language (IDML), and Electronic Publication (EPUB). The ExifTool family 3 groups may be used to organize ZIP tags by embedded document number (ie. the exiftool C<-g3> option). }, 2 => 'ZipRequiredVersion', 3 => { Name => 'ZipBitFlag', PrintConv => '$val ? sprintf("0x%.4x",$val) : $val', }, 4 => { Name => 'ZipCompression', PrintConv => { 0 => 'None', 1 => 'Shrunk', 2 => 'Reduced with compression factor 1', 3 => 'Reduced with compression factor 2', 4 => 'Reduced with compression factor 3', 5 => 'Reduced with compression factor 4', 6 => 'Imploded', 7 => 'Tokenized', 8 => 'Deflated', 9 => 'Enhanced Deflate using Deflate64(tm)', 10 => 'Imploded (old IBM TERSE)', 12 => 'BZIP2', 14 => 'LZMA (EFS)', 18 => 'IBM TERSE (new)', 19 => 'IBM LZ77 z Architecture (PFS)', 96 => 'JPEG recompressed', #2 97 => 'WavPack compressed', #2 98 => 'PPMd version I, Rev 1', }, }, 5 => { Name => 'ZipModifyDate', Format => 'int32u', Groups => { 2 => 'Time' }, ValueConv => sub { my $val = shift; return sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d', ($val >> 25) + 1980, # year ($val >> 21) & 0x0f, # month ($val >> 16) & 0x1f, # day ($val >> 11) & 0x1f, # hour ($val >> 5) & 0x3f, # minute $val & 0x1f # second ); }, PrintConv => '$self->ConvertDateTime($val)', }, 7 => { Name => 'ZipCRC', Format => 'int32u', PrintConv => 'sprintf("0x%.8x",$val)' }, 9 => { Name => 'ZipCompressedSize', Format => 'int32u' }, 11 => { Name => 'ZipUncompressedSize', Format => 'int32u' }, 13 => { Name => 'ZipFileNameLength', # don't store a tag -- just extract the value for use with ZipFileName Hidden => 1, RawConv => '$$self{ZipFileNameLength} = $val; undef', }, # 14 => 'ZipExtraFieldLength', 15 => { Name => 'ZipFileName', Format => 'string[$$self{ZipFileNameLength}]', }, ); # GNU ZIP tags (ref 3) %Image::ExifTool::ZIP::GZIP = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Other' }, NOTES => q{ These tags are extracted from GZIP (GNU ZIP) archives, but currently only for the first file in the archive. }, 2 => { Name => 'Compression', PrintConv => { 8 => 'Deflated', }, }, 3 => { Name => 'Flags', PrintConv => { BITMASK => { 0 => 'Text', 1 => 'CRC16', 2 => 'ExtraFields', 3 => 'FileName', 4 => 'Comment', }}, }, 4 => { Name => 'ModifyDate', Format => 'int32u', Groups => { 2 => 'Time' }, ValueConv => 'ConvertUnixTime($val,1)', PrintConv => '$self->ConvertDateTime($val)', }, 8 => { Name => 'ExtraFlags', PrintConv => { 0 => '(none)', 2 => 'Maximum Compression', 4 => 'Fastest Algorithm', }, }, 9 => { Name => 'OperatingSystem', PrintConv => { 0 => 'FAT filesystem (MS-DOS, OS/2, NT/Win32)', 1 => 'Amiga', 2 => 'VMS (or OpenVMS)', 3 => 'Unix', 4 => 'VM/CMS', 5 => 'Atari TOS', 6 => 'HPFS filesystem (OS/2, NT)', 7 => 'Macintosh', 8 => 'Z-System', 9 => 'CP/M', 10 => 'TOPS-20', 11 => 'NTFS filesystem (NT)', 12 => 'QDOS', 13 => 'Acorn RISCOS', 255 => 'unknown', }, }, 10 => 'ArchivedFileName', 11 => 'Comment', ); # RAR tags (ref 4) %Image::ExifTool::ZIP::RAR = ( PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData, GROUPS => { 2 => 'Other' }, NOTES => 'These tags are extracted from RAR archive files.', 0 => { Name => 'CompressedSize', Format => 'int32u', }, 4 => { Name => 'UncompressedSize', Format => 'int32u', }, 8 => { Name => 'OperatingSystem', PrintConv => { 0 => 'MS-DOS', 1 => 'OS/2', 2 => 'Win32', 3 => 'Unix', }, }, 13 => { Name => 'ModifyDate', Format => 'int32u', Groups => { 2 => 'Time' }, ValueConv => sub { my $val = shift; return sprintf('%.4d:%.2d:%.2d %.2d:%.2d:%.2d', ($val >> 25) + 1980, # year ($val >> 21) & 0x0f, # month ($val >> 16) & 0x1f, # day ($val >> 11) & 0x1f, # hour ($val >> 5) & 0x3f, # minute $val & 0x1f # second ); }, PrintConv => '$self->ConvertDateTime($val)', }, 18 => { Name => 'PackingMethod', PrintHex => 1, PrintConv => { 0x30 => 'Stored', 0x31 => 'Fastest', 0x32 => 'Fast', 0x33 => 'Normal', 0x34 => 'Good Compression', 0x35 => 'Best Compression', }, }, 19 => { Name => 'FileNameLength', Format => 'int16u', Hidden => 1, RawConv => '$$self{FileNameLength} = $val; undef', }, 25 => { Name => 'ArchivedFileName', Format => 'string[$$self{FileNameLength}]', }, ); #------------------------------------------------------------------------------ # Extract information from a RAR file (ref 4) # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid RAR file sub ProcessRAR($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($flags, $buff); return 0 unless $raf->Read($buff, 7) and $buff eq "Rar!\x1a\x07\0"; $et->SetFileType(); SetByteOrder('II'); my $tagTablePtr = GetTagTable('Image::ExifTool::ZIP::RAR'); my $docNum = 0; for (;;) { # read block header $raf->Read($buff, 7) == 7 or last; my ($type, $flags, $size) = unpack('xxCvv', $buff); $size -= 7; if ($flags & 0x8000) { $raf->Read($buff, 4) == 4 or last; $size += unpack('V',$buff) - 4; } last if $size < 0; next unless $size; # ignore blocks with no data # don't try to read very large blocks unless LargeFileSupport is enabled if ($size > 0x80000000 and not $et->Options('LargeFileSupport')) { $et->Warn('Large block encountered. Aborting.'); last; } # process the block if ($type == 0x74) { # file block # read maximum 4 KB from a file block my $n = $size > 4096 ? 4096 : $size; $raf->Read($buff, $n) == $n or last; # add compressed size to start of data so we can extract it with the other tags $buff = pack('V',$size) . $buff; $$et{DOC_NUM} = ++$docNum; $et->ProcessDirectory({ DataPt => \$buff }, $tagTablePtr); $size -= $n; } elsif ($type == 0x75 and $size > 6) { # comment block $raf->Read($buff, $size) == $size or last; # save comment, only if "Stored" (this is untested) if (Get8u(\$buff, 3) == 0x30) { $et->FoundTag('Comment', substr($buff, 6)); } next; } # seek to the start of the next block $raf->Seek($size, 1) or last if $size; } $$et{DOC_NUM} = 0; return 1; } #------------------------------------------------------------------------------ # Extract information from a GNU ZIP file (ref 3) # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid GZIP file sub ProcessGZIP($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($flags, $buff); return 0 unless $raf->Read($buff, 10) and $buff =~ /^\x1f\x8b\x08/; $et->SetFileType(); SetByteOrder('II'); my $tagTablePtr = GetTagTable('Image::ExifTool::ZIP::GZIP'); $et->HandleTag($tagTablePtr, 2, Get8u(\$buff, 2)); $et->HandleTag($tagTablePtr, 3, $flags = Get8u(\$buff, 3)); $et->HandleTag($tagTablePtr, 4, Get32u(\$buff, 4)); $et->HandleTag($tagTablePtr, 8, Get8u(\$buff, 8)); $et->HandleTag($tagTablePtr, 9, Get8u(\$buff, 9)); # extract file name and comment if they exist if ($flags & 0x18) { if ($flags & 0x04) { # skip extra field $raf->Read($buff, 2) == 2 or return 1; my $len = Get16u(\$buff, 0); $raf->Read($buff, $len) == $len or return 1; } $raf->Read($buff, 4096) or return 1; my $pos = 0; my $tagID; # loop for ArchivedFileName (10) and Comment (11) tags foreach $tagID (10, 11) { my $mask = $tagID == 10 ? 0x08 : 0x10; next unless $flags & $mask; my $end = $buff =~ /\0/g ? pos($buff) - 1 : length($buff); # (the doc specifies the string should be ISO 8859-1, # but in OS X it seems to be UTF-8, so don't translate # it because I could just as easily screw it up) my $str = substr($buff, $pos, $end - $pos); $et->HandleTag($tagTablePtr, $tagID, $str); last if $end >= length $buff; $pos = $end + 1; } } return 1; } #------------------------------------------------------------------------------ # Call HandleTags for attributes of an Archive::Zip member # Inputs: 0) ExifTool object ref, 1) member ref, 2) optional tag table ref sub HandleMember($$;$) { my ($et, $member, $tagTablePtr) = @_; $tagTablePtr or $tagTablePtr = GetTagTable('Image::ExifTool::ZIP::Main'); $et->HandleTag($tagTablePtr, 2, $member->versionNeededToExtract()); $et->HandleTag($tagTablePtr, 3, $member->bitFlag()); $et->HandleTag($tagTablePtr, 4, $member->compressionMethod()); $et->HandleTag($tagTablePtr, 5, $member->lastModFileDateTime()); $et->HandleTag($tagTablePtr, 7, $member->crc32()); $et->HandleTag($tagTablePtr, 9, $member->compressedSize()); $et->HandleTag($tagTablePtr, 11, $member->uncompressedSize()); $et->HandleTag($tagTablePtr, 15, $member->fileName()); } #------------------------------------------------------------------------------ # Extract information from a ZIP file # Inputs: 0) ExifTool object reference, 1) dirInfo reference # Returns: 1 on success, 0 if this wasn't a valid ZIP file sub ProcessZIP($$) { my ($et, $dirInfo) = @_; my $raf = $$dirInfo{RAF}; my ($buff, $buf2, $zip, $docNum); return 0 unless $raf->Read($buff, 30) and $buff =~ /^PK\x03\x04/; my $tagTablePtr = GetTagTable('Image::ExifTool::ZIP::Main'); # use Archive::Zip if avilable for (;;) { unless (eval { require Archive::Zip } and eval { require IO::File }) { if ($$et{FILE_EXT} and $$et{FILE_EXT} ne 'ZIP') { $et->Warn("Install Archive::Zip to decode compressed ZIP information"); } last; } # Archive::Zip requires a seekable IO::File object my $fh; if ($raf->{TESTED} >= 0) { unless (eval { require IO::File }) { # (this shouldn't happen because IO::File is a prerequisite of Archive::Zip) $et->Warn("Install IO::File to decode compressed ZIP information"); last; } $raf->Seek(0,0); $fh = $raf->{FILE_PT}; bless $fh, 'IO::File'; # Archive::Zip expects an IO::File object } elsif (eval { require IO::String }) { # read the whole file into memory (what else can I do?) $raf->Slurp(); $fh = new IO::String ${$raf->{BUFF_PT}}; } else { my $type = $raf->{FILE_PT} ? 'pipe or socket' : 'scalar reference'; $et->Warn("Install IO::String to decode compressed ZIP information from a $type"); last; } $et->VPrint(1, " --- using Archive::Zip ---\n"); $zip = new Archive::Zip; # catch all warnings! (Archive::Zip is bad for this) local $SIG{'__WARN__'} = \&WarnProc; my $status = $zip->readFromFileHandle($fh); if ($status eq '4' and $raf->{TESTED} >= 0 and eval { require IO::String } and $raf->Seek(0,2) and $raf->Tell() < 100000000) { # try again, reading it ourself this time in an attempt to avoid # a failed test with Perl 5.6.2 GNU/Linux 2.6.32-5-686 i686-linux-64int-ld $raf->Seek(0,0); $raf->Slurp(); $fh = new IO::String ${$raf->{BUFF_PT}}; $zip = new Archive::Zip; $status = $zip->readFromFileHandle($fh); } if ($status) { undef $zip; my %err = ( 1=>'Stream end error', 3=>'Format error', 4=>'IO error' ); my $err = $err{$status} || "Error $status"; $et->Warn("$err reading ZIP file"); last; } $$dirInfo{ZIP} = $zip; # check for an Office Open file (DOCX, etc) # --> read '[Content_Types].xml' to determine the file type my ($mime, @members, $epub); my $cType = $zip->memberNamed('[Content_Types].xml'); if ($cType) { ($buff, $status) = $zip->contents($cType); if (not $status and $buff =~ /ContentType\s*=\s*(['"])([^"']+)\.main(\+xml)?\1/) { $mime = $2; } } # check for docProps if we couldn't find a MIME type $mime or @members = $zip->membersMatching('^docProps/.*\.(xml|XML)$'); if ($mime or @members) { $$dirInfo{MIME} = $mime; require Image::ExifTool::OOXML; Image::ExifTool::OOXML::ProcessDOCX($et, $dirInfo); delete $$dirInfo{MIME}; last; } # check for an EIP file @members = $zip->membersMatching('^CaptureOne/.*\.(cos|COS)$'); if (@members) { require Image::ExifTool::CaptureOne; Image::ExifTool::CaptureOne::ProcessEIP($et, $dirInfo); last; } # check for an iWork file @members = $zip->membersMatching('^(index\.(xml|apxl)|QuickLook/Thumbnail\.jpg)$'); if (@members) { require Image::ExifTool::iWork; Image::ExifTool::iWork::Process_iWork($et, $dirInfo); last; } # check for an Open Document, IDML or EPUB file my $mType = $zip->memberNamed('mimetype'); if ($mType) { ($mime, $status) = $zip->contents($mType); if (not $status and $mime =~ /([\x21-\xfe]+)/s) { # clean up MIME type just in case (note that MIME is case insensitive) $mime = lc $1; $et->SetFileType($openDocType{$mime} || 'ZIP', $mime); $et->Warn("Unrecognized MIMEType $mime") unless $openDocType{$mime}; # extract Open Document metadata from "meta.xml" my $meta = $zip->memberNamed('meta.xml'); # IDML files have metadata in a different place (ref 6) $meta or $meta = $zip->memberNamed('META-INF/metadata.xml'); if ($meta) { ($buff, $status) = $zip->contents($meta); unless ($status) { my %dirInfo = ( DataPt => \$buff, DirLen => length $buff, DataLen => length $buff, ); # (avoid structure warnings when copying from XML) my $oldWarn = $$et{NO_STRUCT_WARN}; $$et{NO_STRUCT_WARN} = 1; $et->ProcessDirectory(\%dirInfo, GetTagTable('Image::ExifTool::XMP::Main')); $$et{NO_STRUCT_WARN} = $oldWarn; } } # process rootfile of EPUB container if applicable for (;;) { last if $meta and $mime ne 'application/epub+zip'; my $container = $zip->memberNamed('META-INF/container.xml'); ($buff, $status) = $zip->contents($container); last if $status; $buff =~ /<rootfile\s+[^>]*?\bfull-path=(['"])(.*?)\1/s or last; # load the rootfile data (OPF extension; contains XML metadata) my $meta2 = $zip->memberNamed($2) or last; $meta = $meta2; ($buff, $status) = $zip->contents($meta); last if $status; # use opf:event to generate more meaningful tag names for dc:date while ($buff =~ s{<dc:date opf:event="(\w+)">([^<]+)</dc:date>}{<dc:${1}Date>$2</dc:${1}Date>}s) { my $dcTable = GetTagTable('Image::ExifTool::XMP::dc'); my $tag = "${1}Date"; AddTagToTable($dcTable, $tag, { Name => ucfirst $tag, Groups => { 2 => 'Time' }, List => 'Seq', %Image::ExifTool::XMP::dateTimeInfo }) unless $$dcTable{$tag}; } my %dirInfo = ( DataPt => \$buff, DirLen => length $buff, DataLen => length $buff, IgnoreProp => { 'package' => 1, metadata => 1 }, ); # (avoid structure warnings when copying from XML) my $oldWarn = $$et{NO_STRUCT_WARN}; $$et{NO_STRUCT_WARN} = 1; $et->ProcessDirectory(\%dirInfo, GetTagTable('Image::ExifTool::XMP::XML')); $$et{NO_STRUCT_WARN} = $oldWarn; last; } if ($openDocType{$mime} or $meta) { # extract preview image(s) from "Thumbnails" directory if they exist my $type; my %tag = ( jpg => 'PreviewImage', png => 'PreviewPNG' ); foreach $type ('jpg', 'png') { my $thumb = $zip->memberNamed("Thumbnails/thumbnail.$type"); next unless $thumb; ($buff, $status) = $zip->contents($thumb); $et->FoundTag($tag{$type}, $buff) unless $status; } last; # all done since we recognized the MIME type or found metadata } # continue on to list ZIP contents... } } # otherwise just extract general ZIP information $et->SetFileType(); @members = $zip->members(); $docNum = 0; my $member; foreach $member (@members) { $$et{DOC_NUM} = ++$docNum; HandleMember($et, $member, $tagTablePtr); } last; } # all done if we processed this using Archive::Zip if ($zip) { delete $$dirInfo{ZIP}; delete $$et{DOC_NUM}; return 1; } # # process the ZIP file by hand (funny, but this seems easier than using Archive::Zip) # $docNum = 0; $et->VPrint(1, " -- processing as binary data --\n"); $raf->Seek(30, 0); $et->SetFileType(); SetByteOrder('II'); # A. Local file header: # local file header signature 0) 4 bytes (0x04034b50) # version needed to extract 4) 2 bytes # general purpose bit flag 6) 2 bytes # compression method 8) 2 bytes # last mod file time 10) 2 bytes # last mod file date 12) 2 bytes # crc-32 14) 4 bytes # compressed size 18) 4 bytes # uncompressed size 22) 4 bytes # file name length 26) 2 bytes # extra field length 28) 2 bytes for (;;) { my $len = Get16u(\$buff, 26) + Get16u(\$buff, 28); $raf->Read($buf2, $len) == $len or last; $$et{DOC_NUM} = ++$docNum; $buff .= $buf2; my %dirInfo = ( DataPt => \$buff, DataPos => $raf->Tell() - 30 - $len, DataLen => 30 + $len, DirStart => 0, DirLen => 30 + $len, ); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); my $flags = Get16u(\$buff, 6); if ($flags & 0x08) { # we don't yet support skipping stream mode data # (when this happens, the CRC, compressed size and uncompressed # sizes are set to 0 in the header. Instead, they are stored # after the compressed data with an optional header of 0x08074b50) $et->Warn('Stream mode data encountered, file list may be incomplete'); last; } $len = Get32u(\$buff, 18); # file data length $raf->Seek($len, 1) or last; # skip file data $raf->Read($buff, 30) == 30 and $buff =~ /^PK\x03\x04/ or last; } delete $$et{DOC_NUM}; return 1; } 1; # end __END__ =head1 NAME Image::ExifTool::ZIP - Read ZIP archive meta information =head1 SYNOPSIS This module is used by Image::ExifTool =head1 DESCRIPTION This module contains definitions required by Image::ExifTool to extract meta information from ZIP, GZIP and RAR archives. This includes ZIP-based file types like Office Open XML (DOCX, PPTX and XLSX), Open Document (ODB, ODC, ODF, ODG, ODI, ODP, ODS and ODT), iWork (KEY, PAGES, NUMBERS), Capture One Enhanced Image Package (EIP), Adobe InDesign Markup Language (IDML), and Electronic Publication (EPUB). =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 REFERENCES =over 4 =item L<http://www.pkware.com/documents/casestudies/APPNOTE.TXT> =item L<http://www.gzip.org/zlib/rfc-gzip.html> =item L<http://DataCompression.info/ArchiveFormats/RAR202.txt> =back =head1 SEE ALSO L<Image::ExifTool::TagNames/ZIP Tags>, L<Image::ExifTool::TagNames/OOXML Tags>, L<Image::ExifTool(3pm)|Image::ExifTool> =cut �����������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/cs.pm��������������������������������������������������000644 �000765 �000024 �00000133243 12642461342 021542� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: cs.pm # # Description: ExifTool Czech language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::cs; use strict; use vars qw($VERSION); $VERSION = '1.07'; %Image::ExifTool::Lang::cs::Translate = ( 'AEMeteringMode' => { PrintConv => { 'Multi-segment' => 'Multi segment', }, }, 'AEProgramMode' => { PrintConv => { 'Landscape' => 'Krajina', 'Macro' => 'Makro', 'Portrait' => 'Portrét', }, }, 'AFPoint' => { PrintConv => { 'None' => 'Žádná', }, }, 'AFPointBrightness' => { PrintConv => { 'Normal' => 'Normální', }, }, 'AFPointSelectionMethod' => { PrintConv => { 'Normal' => 'Normální', }, }, 'AFPointsInFocus' => { PrintConv => { 'None' => 'Žádná', }, }, 'APEVersion' => 'APE verze', 'ActiveD-Lighting' => { PrintConv => { 'Low' => 'MénÄ›', 'Normal' => 'Normální', }, }, 'ActiveD-LightingMode' => { PrintConv => { 'Low' => 'MénÄ›', 'Normal' => 'Normální', }, }, 'AdultContentWarning' => { PrintConv => { 'Unknown' => 'Neznámý', }, }, 'Annotations' => 'Poznámky Photoshop', 'Aperture' => 'Clona', 'ApertureValue' => 'Clona', 'Artist' => 'Autor', 'AssistButtonFunction' => { PrintConv => { 'Normal' => 'Normální', }, }, 'Author' => 'Autor', 'AuthorsPosition' => 'Pozice autora', 'AutoLightingOptimizer' => { PrintConv => { 'Low' => 'MénÄ›', }, }, 'AutoRotate' => { PrintConv => { 'None' => 'Žádná', 'Rotate 180' => '180° (dolů/vpravo)', 'Rotate 270 CW' => '90° po smÄ›ru HR (vlevo/dolů)', 'Rotate 90 CW' => '90° ptoti smÄ›ru HR (vpravo/nahoru)', 'n/a' => 'Neznámý', }, }, 'BadFaxLines' => 'Å patné faxové řádky', 'BannerImageType' => { PrintConv => { 'None' => 'Žádná', }, }, 'BatteryLevel' => 'Stav baterie', 'BitsPerSample' => 'PoÄet bitů na složku', 'BlurWarning' => { PrintConv => { 'None' => 'Žádná', }, }, 'Brightness' => 'Jas', 'BrightnessValue' => 'Jas', 'By-line' => 'Autor', 'CFAPattern' => 'CFA matrice', 'CFAPattern2' => 'CFA matice 2', 'CFARepeatPatternDim' => 'Velikost berevné matice CFA', 'CPUType' => { PrintConv => { 'None' => 'Žádná', }, }, 'CalibrationIlluminant1' => { PrintConv => { 'Cloudy' => 'Zataženo', 'Cool White Fluorescent' => 'Studená zářivka', 'Day White Fluorescent' => 'Denní zářivka', 'Daylight' => 'Denní svÄ›tlo', 'Daylight Fluorescent' => 'Denní svÄ›tlo', 'Fine Weather' => 'SluneÄno', 'Flash' => 'Blesk', 'Fluorescent' => 'Žárovka', 'ISO Studio Tungsten' => 'Studiová svÄ›tla', 'Other' => 'Jiné osvÄ›tlení', 'Shade' => 'Stíny', 'Standard Light A' => 'Standardní svÄ›tlo A', 'Standard Light B' => 'Standardní svÄ›tlo B', 'Standard Light C' => 'Standardní svÄ›tlo C', 'Tungsten (Incandescent)' => 'Zářivka', 'Unknown' => 'Neznámý', 'White Fluorescent' => 'Bílá zářivka', }, }, 'CalibrationIlluminant2' => { PrintConv => { 'Cloudy' => 'Zataženo', 'Cool White Fluorescent' => 'Studená zářivka', 'Day White Fluorescent' => 'Denní zářivka', 'Daylight' => 'Denní svÄ›tlo', 'Daylight Fluorescent' => 'Denní svÄ›tlo', 'Fine Weather' => 'SluneÄno', 'Flash' => 'Blesk', 'Fluorescent' => 'Žárovka', 'ISO Studio Tungsten' => 'Studiová svÄ›tla', 'Other' => 'Jiné osvÄ›tlení', 'Shade' => 'Stíny', 'Standard Light A' => 'Standardní svÄ›tlo A', 'Standard Light B' => 'Standardní svÄ›tlo B', 'Standard Light C' => 'Standardní svÄ›tlo C', 'Tungsten (Incandescent)' => 'Zářivka', 'Unknown' => 'Neznámý', 'White Fluorescent' => 'Bílá zářivka', }, }, 'CameraOrientation' => { Description => 'Orientace', PrintConv => { 'Horizontal (normal)' => '0° (nahoru/vlevo)', 'Rotate 270 CW' => '90° po smÄ›ru HR (vlevo/dolů)', 'Rotate 90 CW' => '90° ptoti smÄ›ru HR (vpravo/nahoru)', }, }, 'CanonExposureMode' => { PrintConv => { 'Aperture-priority AE' => 'Priorita clony', 'Manual' => 'Manuální', 'Shutter speed priority AE' => 'Priorita Äasu', }, }, 'Caption-Abstract' => 'Popisek', 'CaptionWriter' => 'Autor popisku', 'CaptureXResolutionUnit' => { PrintConv => { 'um' => 'µm (mikrometr)', }, }, 'CaptureYResolutionUnit' => { PrintConv => { 'um' => 'µm (mikrometr)', }, }, 'Categories' => 'Kategorie', 'Category' => 'Kategorie', 'CellLength' => 'Délka buňky', 'CellWidth' => 'Šířka buňky', 'CenterWeightedAreaSize' => { PrintConv => { 'Average' => 'PrůmÄ›r', }, }, 'ChrominanceNR_TIFF_JPEG' => { PrintConv => { 'Low' => 'MénÄ›', }, }, 'ChrominanceNoiseReduction' => { PrintConv => { 'Low' => 'MénÄ›', }, }, 'City' => 'MÄ›sto', 'CleanFaxData' => 'ÄŒistá fax data', 'ColorEffect' => { PrintConv => { 'Sepia' => 'Sépie', }, }, 'ColorFilter' => 'Barevný filtr', 'ColorMap' => 'Barevná mapa', 'ColorMode' => { PrintConv => { 'Landscape' => 'Krajina', 'Normal' => 'Normální', 'Portrait' => 'Portrét', }, }, 'ColorMoireReductionMode' => { PrintConv => { 'Low' => 'MénÄ›', }, }, 'ColorResponseUnit' => 'Odpovídající barevná jednotka', 'ColorSpace' => { Description => 'Barevný prostor', PrintConv => { 'ICC Profile' => 'ICC Profil', 'Uncalibrated' => 'Nekalibrován', }, }, 'ColorTemperature' => 'Teplota barev', 'ColorTone' => { PrintConv => { 'Normal' => 'Normální', }, }, 'CommanderGroupAMode' => { PrintConv => { 'Manual' => 'Manuální', }, }, 'CommanderGroupBMode' => { PrintConv => { 'Manual' => 'Manuální', }, }, 'CommanderInternalFlash' => { PrintConv => { 'Manual' => 'Manuální', }, }, 'Comment' => 'Komentář', 'ComponentsConfiguration' => 'UrÄení složek', 'CompressedBitsPerPixel' => 'KomprimaÄní mod', 'Compression' => { Description => 'Kompresní algoritmus', PrintConv => { 'JPEG' => 'JPEG komprese', 'JPEG (old-style)' => 'JPEG (pův. verze)', 'Kodak DCR Compressed' => 'Kodak DCR komprese', 'Kodak KDC Compressed' => 'Kodak KDC komprese', 'Next' => 'Kódování NeXT 2-bit', 'Nikon NEF Compressed' => 'Nikon NEF komprese', 'None' => 'Žádná', 'Pentax PEF Compressed' => 'Pentax PEF komprese', 'SGILog' => 'Kódování SGI 32-bit Log Luminance', 'SGILog24' => 'Kódování SGI 24-bit Log Luminance', 'Sony ARW Compressed' => 'Sony ARW komprese', 'Thunderscan' => 'Kódování ThunderScan 4-bit', 'Uncompressed' => 'Bez komprese', }, }, 'CompressionType' => { PrintConv => { 'None' => 'Žádná', }, }, 'ConsecutiveBadFaxLines' => 'Sekvence vadných faxových řádků', 'Contrast' => { Description => 'Kontrast', PrintConv => { 'High' => 'Více', 'Low' => 'MénÄ›', 'Normal' => 'Normální', }, }, 'ConversionLens' => { PrintConv => { 'Macro' => 'Makro', }, }, 'Copyright' => 'Držitel práv', 'CopyrightNotice' => 'Oznámení o autorských právech', 'CopyrightStatus' => { PrintConv => { 'Unknown' => 'Neznámý', }, }, 'Country' => 'ZemÄ›', 'Country-PrimaryLocationName' => 'ZemÄ›', 'CreateDate' => 'Datum a Äas generování digitálních dat', 'CreationDate' => 'Datum vytvoÅ™ení', 'Credit' => 'Kredit', 'CropUnit' => { PrintConv => { 'inches' => 'Palce', }, }, 'CropUnits' => { PrintConv => { 'inches' => 'Palce', }, }, 'CustomRendered' => { Description => 'Zpracování obrazu', PrintConv => { 'Custom' => 'Uživatelské zpracování', 'Normal' => 'Normální proces', }, }, 'DataImprint' => { PrintConv => { 'None' => 'Žádná', }, }, 'DateCreated' => 'Datum vytvoÅ™ení', 'DateTime' => 'Datum a Äas zmÄ›ny souboru', 'DateTimeOriginal' => 'Datum a Äas vzniku originálních dat', 'Description' => 'Popis', 'DeviceSettingDescription' => 'Popis nastavení zařízení', 'DialDirectionTvAv' => { PrintConv => { 'Normal' => 'Normální', }, }, 'DigitalZoom' => { Description => 'Digitální pÅ™iblížení', PrintConv => { 'None' => 'Žádná', }, }, 'DigitalZoomRatio' => 'Digitální zoom', 'Directory' => 'UmístÄ›ní souboru', 'DisplaySize' => { PrintConv => { 'Normal' => 'Normální', }, }, 'DisplayUnits' => { PrintConv => { 'inches' => 'Palce', }, }, 'DisplayXResolutionUnit' => { PrintConv => { 'um' => 'µm (mikrometr)', }, }, 'DisplayYResolutionUnit' => { PrintConv => { 'um' => 'µm (mikrometr)', }, }, 'DisplayedUnitsX' => { PrintConv => { 'inches' => 'Palce', }, }, 'DisplayedUnitsY' => { PrintConv => { 'inches' => 'Palce', }, }, 'DjVuVersion' => 'DjVu verze', 'DocumentName' => 'Jméno dokumentu', 'DotRange' => 'Bodová rozteÄ', 'DriveMode' => 'Režim spouÅ¡tÄ›', 'ETTLII' => { PrintConv => { 'Average' => 'PrůmÄ›r', }, }, 'EasyMode' => { PrintConv => { 'Landscape' => 'Krajina', 'Macro' => 'Makro', 'Manual' => 'Manuální', 'Night' => 'NoÄní foto', 'Portrait' => 'Portrét', }, }, 'Emphasis' => { PrintConv => { 'None' => 'Žádná', }, }, 'ExifImageHeight' => 'Výška', 'ExifImageWidth' => 'Šířka', 'ExifOffset' => 'Ukazatel Exif IFD', 'ExifToolVersion' => 'ExifTool verze', 'ExifVersion' => 'Exif verze', 'ExpandFilm' => 'Ext. film', 'ExpandFilterLens' => 'Ext. filtr objektivu', 'ExpandFlashLamp' => 'Ext. svÄ›tlo blesku', 'ExpandLens' => 'Ext. objektiv', 'ExpandScanner' => 'Ext. skener', 'ExpandSoftware' => 'Ext. Software', 'ExposureCompensation' => 'Korekce expozice', 'ExposureIndex' => 'Index expozice', 'ExposureMode' => { Description => 'Mód expozice', PrintConv => { 'Aperture Priority' => 'Priorita clony', 'Aperture-priority AE' => 'Priorita clony', 'Auto' => 'Automatická expozice', 'Auto bracket' => 'Auto braketing', 'Landscape' => 'Krajina', 'Manual' => 'Manuální expozice', 'Portrait' => 'Portrét', 'Shutter Priority' => 'Priorita Äasu', 'Shutter speed priority AE' => 'Priorita Äasu', }, }, 'ExposureModeInManual' => { PrintConv => { 'Center-weighted average' => 'ZvýraznÄ›ný stÅ™ed', 'Partial metering' => 'Blokové', 'Spot metering' => 'StÅ™edový bod', }, }, 'ExposureProgram' => { Description => 'ExpoziÄní mod', PrintConv => { 'Action (High speed)' => 'AkÄní program (ovlivnÄ›ný Äas závÄ›rky)', 'Aperture Priority' => 'Priorita clony', 'Aperture-priority AE' => 'Priorita clony', 'Bulb' => 'Žárovka', 'Creative (Slow speed)' => 'Kreativní program (ovlivnÄ›ná hloubka ostrosti)', 'Landscape' => 'Krajina', 'Manual' => 'Manuální', 'Not Defined' => 'Nedefinovaný', 'Portrait' => 'Portrét', 'Program AE' => 'Normální program', 'Shutter Priority' => 'Priorita Äasu', 'Shutter speed priority AE' => 'Priorita Äasu', }, }, 'ExposureTime' => 'ExpoziÄní Äas', 'ExposureTime2' => 'ExpoziÄní Äas 2', 'FNumber' => 'F hodnota', 'FaceOrientation' => { PrintConv => { 'Horizontal (normal)' => '0° (nahoru/vlevo)', 'Rotate 180' => '180° (dolů/vpravo)', 'Rotate 270 CW' => '90° po smÄ›ru HR (vlevo/dolů)', 'Rotate 90 CW' => '90° ptoti smÄ›ru HR (vpravo/nahoru)', }, }, 'FaxProfile' => { PrintConv => { 'Unknown' => 'Neznámý', }, }, 'FaxRecvParams' => 'Parametry příjemce faxu', 'FaxRecvTime' => 'ÄŒas příjmu faxu', 'FaxSubAddress' => 'Sub adresa faxu', 'FileFormat' => 'Formát', 'FileModifyDate' => 'Datum úpravy', 'FileName' => 'Jméno', 'FileSize' => 'Velikost', 'FileSource' => { Description => 'Zdroj dat', PrintConv => { 'Digital Camera' => 'Digitální fotoaparát', 'Film Scanner' => 'Filmový skener', 'Reflection Print Scanner' => 'Skener', }, }, 'FileType' => 'Typ', 'Filename' => 'Jméno', 'FillOrder' => { Description => 'PoÅ™adí výplnÄ›', PrintConv => { 'Normal' => 'Normální', }, }, 'FilterEffect' => { PrintConv => { 'None' => 'Žádná', }, }, 'FilterEffectMonochrome' => { PrintConv => { 'None' => 'Žádná', }, }, 'Flash' => { Description => 'Blesk', PrintConv => { 'Auto, Did not fire' => 'Blesk nepoužit, auto mod', 'Auto, Did not fire, Red-eye reduction' => 'Auto mod, nepoužit, redukce Äervených oÄí', 'Auto, Fired' => 'Blesk použit, auto mod', 'Auto, Fired, Red-eye reduction' => 'Blesk použit, auto mod, redukce Äervených oÄí', 'Auto, Fired, Red-eye reduction, Return detected' => 'Blesk použit, auto mod, redukce Äervených oÄí, odraz detekován', 'Auto, Fired, Red-eye reduction, Return not detected' => 'Blesk použit, auto mod, redukce Äervených oÄí, odraz nezjiÅ¡tÄ›n', 'Auto, Fired, Return detected' => 'Blesk použit, auto mod, odraz detekován', 'Auto, Fired, Return not detected' => 'Blesk použit, auto mod, odraz nedetekován', 'Did not fire' => 'Blesk ne', 'Fired' => 'Blesk ano', 'Fired, Red-eye reduction' => 'Blesk použit, redukce Äervených oÄí', 'Fired, Red-eye reduction, Return detected' => 'Blesk použit, redukce Äervených oÄí, odraz detekován', 'Fired, Red-eye reduction, Return not detected' => 'Blesk použit, redukce Äervených oÄí, odraz nezjiÅ¡tÄ›n', 'Fired, Return detected' => 'Odraz strobozáblesků detekován', 'Fired, Return not detected' => 'Odraz strobozáblesků nezjiÅ¡tÄ›n', 'No Flash' => 'Blesk ne', 'No flash function' => 'Blesk nezjiÅ¡tÄ›n', 'Off' => 'Blesk nepoužit, vynucený mod', 'Off, Did not fire' => 'Blesk nepoužit, vynucený mod', 'Off, Did not fire, Return not detected' => 'Blesk vypnut, bez záblesku, odraz nezachycen', 'Off, No flash function' => 'Neaktivní, bez funkce blesku', 'Off, Red-eye reduction' => 'Neaktivní, redukce Äervených oÄí', 'On' => 'Blesk použit, vynucený mod', 'On, Did not fire' => 'Blesk zapnut, nepoužit', 'On, Fired' => 'Blesk použit, vynucený mod', 'On, Red-eye reduction' => 'Blesk použit, vynucený mod, redukce Äervených oÄí', 'On, Red-eye reduction, Return detected' => 'Blesk použit, vynucený mod, redukce Äervených oÄí, odraz detekován', 'On, Red-eye reduction, Return not detected' => 'Blesk použit, vynucený mod, redukce Äervených oÄí, odraz nezjiÅ¡tÄ›n', 'On, Return detected' => 'Blesk použit, vynucený mod, odraz detekován', 'On, Return not detected' => 'Blesk použit, vynucený mod, odraz nezjiÅ¡tÄ›n', }, }, 'FlashControlMode' => { PrintConv => { 'Manual' => 'Manuální', }, }, 'FlashDevice' => { PrintConv => { 'None' => 'Žádná', }, }, 'FlashEnergy' => 'Síla záblesku', 'FlashExposureComp' => 'Kompenzace blesku', 'FlashGroupAControlMode' => { PrintConv => { 'Manual' => 'Manuální', }, }, 'FlashGroupBControlMode' => { PrintConv => { 'Manual' => 'Manuální', }, }, 'FlashGroupCControlMode' => { PrintConv => { 'Manual' => 'Manuální', }, }, 'FlashIntensity' => { PrintConv => { 'Normal' => 'Normální', }, }, 'FlashMode' => { PrintConv => { 'Normal' => 'Normální', 'Unknown' => 'Neznámý', }, }, 'FlashModel' => { PrintConv => { 'None' => 'Žádná', }, }, 'FlashOptions' => { PrintConv => { 'Normal' => 'Normální', }, }, 'FlashOptions2' => { PrintConv => { 'Normal' => 'Normální', }, }, 'FlashType' => { PrintConv => { 'None' => 'Žádná', }, }, 'FlashpixVersion' => 'Podporovaná verze Flashpix', 'FocalLength' => 'Ohnisková vzdálenost', 'FocalLength35efl' => 'Ohnisková vzdálenost', 'FocalLengthIn35mmFormat' => 'PÅ™epoÄtená ohnisková vzdálenost (35mm)', 'FocalPlaneResolutionUnit' => { Description => 'Jednotka rozliÅ¡ení senzoru', PrintConv => { 'None' => 'Žádná', 'inches' => 'Palce', 'um' => 'µm (mikrometr)', }, }, 'FocalPlaneXResolution' => 'Horizontální rozliÅ¡ení senzoru', 'FocalPlaneYResolution' => 'Vertikální rozliÅ¡ení senzoru', 'Focus' => { PrintConv => { 'Manual' => 'Manuální', }, }, 'FocusContinuous' => { PrintConv => { 'Manual' => 'Manuální', }, }, 'FocusMode' => { Description => 'OstÅ™ení', PrintConv => { 'Macro' => 'Makro', 'Manual' => 'Manuální', 'Normal' => 'Normální', }, }, 'FocusMode2' => { PrintConv => { 'Manual' => 'Manuální', }, }, 'FocusModeSetting' => { PrintConv => { 'Manual' => 'Manuální', }, }, 'FocusRange' => { PrintConv => { 'Macro' => 'Makro', 'Manual' => 'Manuální', 'Normal' => 'Normální', }, }, 'FocusTrackingLockOn' => { PrintConv => { 'Normal' => 'Normální', }, }, 'FrameRate' => 'Snímkovací frekvence', 'FrameSize' => 'Velikost snímku', 'FreeByteCounts' => 'PoÄet volných bytů', 'FreeOffsets' => 'Volná datová pozice', 'GIFVersion' => 'GIF verze', 'GPSAltitude' => 'NadmoÅ™ská výška', 'GPSAltitudeRef' => { Description => 'NadmoÅ™ská výška', PrintConv => { 'Above Sea Level' => 'NadmoÅ™ská výška', 'Below Sea Level' => 'NadmoÅ™ská výška (záporná hodnota)', }, }, 'GPSAreaInformation' => 'Název GPS oblasti', 'GPSDOP' => 'PÅ™esnost měření', 'GPSDateStamp' => 'GPS Datum', 'GPSDateTime' => 'GPS Äas (atomový Äas)', 'GPSDestBearing' => 'Azimut cíle', 'GPSDestBearingRef' => { Description => 'Reference azimutu cíle.', PrintConv => { 'Magnetic North' => 'Magnetický smÄ›r', 'True North' => 'Geografický smÄ›r', }, }, 'GPSDestDistance' => 'Vzdálenost k cíli', 'GPSDestDistanceRef' => { Description => 'Reference vzdálenosti cíle', PrintConv => { 'Kilometers' => 'Kilometry', 'Miles' => 'Míle', 'Nautical Miles' => 'Uzle', }, }, 'GPSDestLatitude' => 'ZemÄ›pisná šířka cíle', 'GPSDestLatitudeRef' => { Description => 'Reference pro zemÄ›pisnou šířku cíle', PrintConv => { 'North' => 'Severní šířka', 'South' => 'Jižní šířka', }, }, 'GPSDestLongitude' => 'ZemÄ›pisná délka cíle', 'GPSDestLongitudeRef' => { Description => 'Reference pro zemÄ›pisnou délku cíle', PrintConv => { 'East' => 'Východní délka', 'West' => 'Západní délka', }, }, 'GPSDifferential' => { Description => 'GPS rozdílová korekce', PrintConv => { 'Differential Corrected' => 'ZapoÄítaná rozdílová korekce', 'No Correction' => 'Měření bez korekce', }, }, 'GPSImgDirection' => 'Orientace obrázku', 'GPSImgDirectionRef' => { Description => 'Reference k orientaci obrázku', PrintConv => { 'Magnetic North' => 'Magnetický smÄ›r', 'True North' => 'Geografický smÄ›r', }, }, 'GPSInfo' => 'IFD ukazatel v GPS informacích', 'GPSLatitude' => 'ZemÄ›pisná šířka', 'GPSLatitudeRef' => { Description => 'Severní nebo Jižní šířka', PrintConv => { 'North' => 'Severní šířka', 'South' => 'Jižní šířka', }, }, 'GPSLongitude' => 'ZemÄ›pisná délka', 'GPSLongitudeRef' => { Description => 'Východní nebo západní délka', PrintConv => { 'East' => 'Východní délka', 'West' => 'Západní délka', }, }, 'GPSMapDatum' => 'Geodetická data', 'GPSMeasureMode' => { Description => 'Mod GPS', PrintConv => { '2-D' => '2-dimenzionální měření', '2-Dimensional' => '2-dimenzionální měření', '2-Dimensional Measurement' => '2-dimenzionální měření', '3-D' => '3-dimenzionální měření', '3-Dimensional' => '3-dimenzionální měření', '3-Dimensional Measurement' => '3-dimenzionální měření', }, }, 'GPSProcessingMethod' => 'Název procesní metody GPS', 'GPSSatellites' => 'GPS satelity využité pÅ™i měření', 'GPSSpeed' => 'Rychlost GPS pÅ™ijímaÄe', 'GPSSpeedRef' => { Description => 'Jednotka rychlosti', PrintConv => { 'km/h' => 'Kilometry za hodinu', 'knots' => 'Uzle', 'mph' => 'Míle za hodinu', }, }, 'GPSStatus' => { Description => 'Stav GPS pÅ™ijímaÄe', PrintConv => { 'Measurement Active' => 'Probíhá měření', 'Measurement Void' => 'Vzájemné měření', }, }, 'GPSTimeStamp' => 'GPS Äas (atomový Äas)', 'GPSTrack' => 'SmÄ›r pohybu', 'GPSTrackRef' => { Description => 'Reference pro smÄ›r pohybu', PrintConv => { 'Magnetic North' => 'Magnetický smÄ›r', 'True North' => 'Geografický smÄ›r', }, }, 'GPSVersionID' => 'Verze GPS TAGu', 'GainControl' => { Description => 'Míra jasu', PrintConv => { 'High gain down' => 'Silné zeslabení', 'High gain up' => 'Silné zesílení', 'Low gain down' => 'Slabé zeslabení', 'Low gain up' => 'Slabé zesílení', 'None' => 'Žádná', }, }, 'Gradation' => 'Pusobivy', 'GrayResponseCurve' => 'Å edá referenÄní kÅ™ivka', 'GrayResponseUnit' => { Description => 'Jednotka odezvy Å¡edé', PrintConv => { '0.0001' => 'Číslo udávající tisíce jednotek', '0.001' => 'Číslo udávající stovky jednotek', '0.1' => 'Číslo udávající desítky jednotek', '1e-05' => 'Číslo udávající desetitisíce jednotek', '1e-06' => 'Číslo udávající statisíce jednotek', }, }, 'HalftoneHints' => 'Půltóny', 'Headline' => 'Titulek', 'HighISONoiseReduction' => { PrintConv => { 'Low' => 'MénÄ›', 'Normal' => 'Normální', }, }, 'HostComputer' => 'Host', 'Hue' => 'Odstín', 'ICCProfile' => 'ICC-Profil', 'IPTC-NAA' => 'IPTC-NAA metadata', 'ISO' => 'Citlivost ISO', 'ISOSetting' => { PrintConv => { 'Manual' => 'Manuální', }, }, 'ImageDescription' => 'Popis obrázku', 'ImageHeight' => 'Výška', 'ImageHistory' => 'Historie obrázku', 'ImageNumber' => 'Číslo obrázku', 'ImageOrientation' => { PrintConv => { 'Portrait' => 'Portrét', }, }, 'ImageQuality' => { PrintConv => { 'Normal' => 'Normální', }, }, 'ImageSize' => 'Velikost snímku', 'ImageSourceData' => 'Zdrojová data obrázku', 'ImageTone' => { PrintConv => { 'Landscape' => 'Krajina', 'Portrait' => 'Portrét', }, }, 'ImageUniqueID' => 'JedineÄné ID obrázku', 'ImageWidth' => 'Šířka', 'Index' => 'NápovÄ›da', 'InkNames' => 'Název náplnÄ›', 'InkSet' => 'Inkoustová sada', 'Instructions' => 'Pokyny', 'InternalFlash' => { PrintConv => { 'Fired' => 'Blesk ano', 'Manual' => 'Manuální', 'No' => 'Blesk ne', }, }, 'InteropIndex' => { Description => 'Identifikace', PrintConv => { 'R03 - DCF option file (Adobe RGB)' => 'R03: DCF option file (Adobe RGB)', 'R98 - DCF basic file (sRGB)' => 'R98: DCF basic file (sRGB)', 'THM - DCF thumbnail file' => 'THM: DCF thumbnail file', }, }, 'InteropOffset' => 'ZnaÄka souÄinnosti', 'InteropVersion' => 'Verze kompatibility', 'JFIFVersion' => 'JFIF verze', 'JPEGQuality' => { PrintConv => { 'Standard' => 'Normální', }, }, 'Keyword' => 'KlíÄová slova', 'Keywords' => 'KlíÄová slova', 'LeafData' => 'Leaf data', 'Lens' => 'Objektiv', 'LensInfo' => 'Informace o optice', 'LicenseType' => { PrintConv => { 'Unknown' => 'Neznámý', }, }, 'LightSource' => { Description => 'Zdroj svÄ›tla', PrintConv => { 'Cloudy' => 'Zataženo', 'Cool White Fluorescent' => 'Studená zářivka', 'Day White Fluorescent' => 'Denní zářivka', 'Daylight' => 'Denní svÄ›tlo', 'Daylight Fluorescent' => 'Denní svÄ›tlo', 'Fine Weather' => 'SluneÄno', 'Flash' => 'Blesk', 'Fluorescent' => 'Žárovka', 'ISO Studio Tungsten' => 'Studiová svÄ›tla', 'Other' => 'Jiné osvÄ›tlení', 'Shade' => 'Stíny', 'Standard Light A' => 'Standardní svÄ›tlo A', 'Standard Light B' => 'Standardní svÄ›tlo B', 'Standard Light C' => 'Standardní svÄ›tlo C', 'Tungsten (Incandescent)' => 'Zářivka', 'Unknown' => 'Neznámý', 'White Fluorescent' => 'Bílá zářivka', }, }, 'Lightness' => 'Jas', 'Location' => 'Lokalita', 'LoopStyle' => { PrintConv => { 'Normal' => 'Normální', }, }, 'LuminanceNoiseReduction' => { PrintConv => { 'Low' => 'MénÄ›', }, }, 'MIEVersion' => 'MIE verze', 'Macro' => { PrintConv => { 'Macro' => 'Makro', 'Manual' => 'Manuální', 'Normal' => 'Normální', }, }, 'MacroMode' => { PrintConv => { 'Macro' => 'Makro', 'Normal' => 'Normální', }, }, 'Make' => 'Výrobce', 'MakerNote' => 'Privátní data výrobce', 'MakerNotes' => 'Poznámka výrobce', 'ManualFlashOutput' => { PrintConv => { 'Low' => 'MénÄ›', }, }, 'MaxAperture' => 'Maximální clona+C1233 objektivu', 'MaxApertureValue' => 'Max clona objektivu', 'MaxSampleValue' => 'Max. hodnota vzorku', 'MediaType' => { PrintConv => { 'Normal' => 'Normální', }, }, 'Metering' => { PrintConv => { 'Spot' => 'StÅ™edový bod', }, }, 'MeteringMode' => { Description => 'Režim měření expozice', PrintConv => { 'Average' => 'PrůmÄ›r', 'Center-weighted average' => 'ZvýraznÄ›ný stÅ™ed', 'Multi-segment' => 'Multi segment', 'Multi-spot' => 'Vícebodové', 'Other' => 'Jiné', 'Partial' => 'Blokové', 'Spot' => 'StÅ™edový bod', 'Unknown' => 'Neznámý', }, }, 'MeteringMode2' => { PrintConv => { 'Multi-segment' => 'Multi segment', }, }, 'MeteringMode3' => { PrintConv => { 'Multi-segment' => 'Multi segment', }, }, 'MinSampleValue' => 'Min. hodnota vzorku', 'MinoltaQuality' => { PrintConv => { 'Normal' => 'Normální', }, }, 'Model' => 'Typ fotoaparátu', 'Model2' => 'Typ zařízení (2)', 'ModifiedPictureStyle' => { PrintConv => { 'Landscape' => 'Krajina', 'None' => 'Žádná', 'Portrait' => 'Portrét', }, }, 'ModifiedSharpnessFreq' => { PrintConv => { 'Low' => 'MénÄ›', }, }, 'ModifiedToneCurve' => { PrintConv => { 'Manual' => 'Manuální', }, }, 'ModifiedWhiteBalance' => { PrintConv => { 'Cloudy' => 'Zataženo', 'Daylight' => 'Denní svÄ›tlo', 'Daylight Fluorescent' => 'Denní svÄ›tlo', 'Flash' => 'Blesk', 'Fluorescent' => 'Žárovka', 'Shade' => 'Stíny', 'Tungsten' => 'Zářivka', }, }, 'ModifyDate' => 'Datum a Äas zmÄ›ny souboru', 'MonochromeFilterEffect' => { PrintConv => { 'None' => 'Žádná', }, }, 'MonochromeToningEffect' => { PrintConv => { 'None' => 'Žádná', }, }, 'NEFCompression' => { PrintConv => { 'Uncompressed' => 'Bez komprese', }, }, 'Noise' => 'Å um', 'NoiseFilter' => { PrintConv => { 'Low' => 'MénÄ›', }, }, 'NoiseReduction' => { Description => 'PotlaÄení Å¡umu', PrintConv => { 'Normal' => 'Normální', }, }, 'NumberofInks' => 'Číslo náplnÄ›', 'ObjectFileType' => { PrintConv => { 'None' => 'Žádná', 'Unknown' => 'Neznámý', }, }, 'OldSubfileType' => 'Typ podsekce', 'Opto-ElectricConvFactor' => 'Optoel. konverzní faktor (OECF)', 'Orientation' => { Description => 'Orientace', PrintConv => { 'Horizontal (normal)' => '0° (nahoru/vlevo)', 'Mirror horizontal' => '0° (nahoru/vpravo)', 'Mirror horizontal and rotate 270 CW' => '90° po smÄ›ru HR (vlevo/nahoru)', 'Mirror horizontal and rotate 90 CW' => '90° ptoti smÄ›ru HR (vpravo/dolů)', 'Mirror vertical' => '180° (dolů/vlevo)', 'Rotate 180' => '180° (dolů/vpravo)', 'Rotate 270 CW' => '90° po smÄ›ru HR (vlevo/dolů)', 'Rotate 90 CW' => '90° ptoti smÄ›ru HR (vpravo/nahoru)', }, }, 'PEFVersion' => 'PEF verze', 'Padding' => 'Náhradní znaky', 'PageName' => 'Jméno stránky', 'PageNumber' => 'Číslo stránky', 'PhotoEffectsType' => { PrintConv => { 'None' => 'Žádná', }, }, 'PhotometricInterpretation' => { Description => 'Pixelové schéma', PrintConv => { 'BlackIsZero' => 'ÄŒerná je nula', 'Color Filter Array' => 'CFA (Color Filter Matrix)', 'Pixar LogL' => 'CIE Log2(L) (Log luminance)', 'Pixar LogLuv' => 'CIE Log2(L)(u\',v\') (Log luminance and chrominance)', 'RGB Palette' => 'Barevné schema', 'Transparency Mask' => 'Průhlednost', 'WhiteIsZero' => 'Bílá je nula', }, }, 'PhotoshopAnnotations' => 'Poznámky Photoshop', 'PictureFinish' => { PrintConv => { 'Portrait' => 'Portrét', }, }, 'PictureMode' => { PrintConv => { 'Aperture-priority AE' => 'Priorita clony', 'Landscape' => 'Krajina', 'Macro' => 'Makro', 'Manual' => 'Manuální', 'Portrait' => 'Portrét', 'Shutter speed priority AE' => 'Priorita Äasu', }, }, 'PictureMode2' => { PrintConv => { 'Aperture Priority' => 'Priorita clony', 'Manual' => 'Manuální', 'Shutter Speed Priority' => 'Priorita Äasu', }, }, 'PictureStyle' => { PrintConv => { 'Landscape' => 'Krajina', 'None' => 'Žádná', 'Portrait' => 'Portrét', }, }, 'PixelUnits' => { PrintConv => { 'Unknown' => 'Neznámý', }, }, 'PlanarConfiguration' => { Description => 'Uspořádání obrazových dat', PrintConv => { 'Chunky' => 'Chunky Format (prokládaný)', 'Planar' => 'Planární (dvojrozmÄ›rný)', }, }, 'Predictor' => { Description => 'Predikce', PrintConv => { 'Horizontal differencing' => 'Horizontální diferenciace', 'None' => 'Bez predikce', }, }, 'PreviewColorSpace' => { PrintConv => { 'Unknown' => 'Neznámý', }, }, 'PreviewImage' => 'Náhled', 'PreviewQuality' => { PrintConv => { 'Normal' => 'Normální', }, }, 'PrimaryChromaticities' => 'ChromatiÄnost primárních barev', 'ProgramLine' => { PrintConv => { 'Normal' => 'Normální', }, }, 'ProgramMode' => { PrintConv => { 'None' => 'Žádná', 'Portrait' => 'Portrét', }, }, 'Province-State' => 'Stát/provincie', 'Quality' => { PrintConv => { 'Low' => 'MénÄ›', 'Normal' => 'Normální', }, }, 'QualityMode' => { PrintConv => { 'Normal' => 'Normální', }, }, 'RAFVersion' => 'RAF verze', 'Rating' => 'Hodnocení', 'RatingPercent' => 'Hodnocení v procentech', 'RawJpgQuality' => { PrintConv => { 'Normal' => 'Normální', }, }, 'RecordMode' => { Description => 'Režim záznamu', PrintConv => { 'Aperture Priority' => 'Priorita clony', 'Manual' => 'Manuální', 'Shutter Priority' => 'Priorita Äasu', }, }, 'RecordingMode' => { PrintConv => { 'Landscape' => 'Krajina', 'Manual' => 'Manuální', 'Portrait' => 'Portrét', }, }, 'ReferenceBlackWhite' => 'ÄŒerný a bílý referenÄní bod', 'RelatedImageFileFormat' => 'Obrazový formát', 'RelatedImageHeight' => 'Výška obrázku', 'RelatedImageWidth' => 'Šířka obrázku', 'RelatedSoundFile' => 'Audio soubor', 'ResampleParamsQuality' => { PrintConv => { 'Low' => 'MénÄ›', }, }, 'ResolutionUnit' => { Description => 'Jednotka X a Y rozliÅ¡ení', PrintConv => { 'None' => 'Žádná', 'cm' => 'Pixely/cm', 'inches' => 'Palce', }, }, 'RetouchHistory' => { PrintConv => { 'None' => 'Žádná', }, }, 'Rotation' => { PrintConv => { 'Horizontal' => '0° (nahoru/vlevo)', 'Horizontal (Normal)' => '0° (nahoru/vlevo)', 'Horizontal (normal)' => '0° (nahoru/vlevo)', 'Rotate 180' => '180° (dolů/vpravo)', 'Rotate 270 CW' => '90° po smÄ›ru HR (vlevo/dolů)', 'Rotate 90 CW' => '90° ptoti smÄ›ru HR (vpravo/nahoru)', 'Rotated 180' => '180° (dolů/vpravo)', 'Rotated 270 CW' => '90° po smÄ›ru HR (vlevo/dolů)', 'Rotated 90 CW' => '90° ptoti smÄ›ru HR (vpravo/nahoru)', }, }, 'RowsPerStrip' => 'PoÄet řádek v Äásti', 'SPIFFVersion' => 'SPIFF verze', 'SVGVersion' => 'SVG verze', 'SampleFormat' => { Description => 'Formát vzorku', PrintConv => { 'Complex int' => 'Komplexní Äíslo', 'Float' => 'Desetinná Äárka', 'Signed' => 'Záporné Äíslo', 'Undefined' => 'Nedefinované', 'Unsigned' => 'Kladné Äíslo', }, }, 'SamplesPerPixel' => 'PoÄet složek', 'Saturation' => { Description => 'Saturace', PrintConv => { 'High' => 'Vysoká', 'Low' => 'Nízká', 'Normal' => 'Normální', }, }, 'SceneCaptureType' => { Description => 'Typ scény', PrintConv => { 'Landscape' => 'Krajina', 'Night' => 'NoÄní foto', 'Portrait' => 'Portrét', }, }, 'SceneMode' => { PrintConv => { 'Aperture Priority' => 'Priorita clony', 'Landscape' => 'Krajina', 'Macro' => 'Makro', 'Manual' => 'Manuální', 'Normal' => 'Normální', 'Portrait' => 'Portrét', 'Shutter Priority' => 'Priorita Äasu', 'Spot' => 'StÅ™edový bod', 'Sunset' => 'Západ', }, }, 'SceneModeUsed' => { PrintConv => { 'Aperture Priority' => 'Priorita clony', 'Landscape' => 'Krajina', 'Macro' => 'Makro', 'Manual' => 'Manuální', 'Portrait' => 'Portrét', 'Shutter Priority' => 'Priorita Äasu', }, }, 'SceneSelect' => { PrintConv => { 'Night' => 'NoÄní foto', }, }, 'SceneType' => { Description => 'Typ scény', PrintConv => { 'Directly photographed' => 'Přímo pořízený snímek', }, }, 'SecurityClassification' => { Description => 'BezpeÄnostní klasifikace', PrintConv => { 'Confidential' => 'DůvÄ›rný', 'Restricted' => 'Vyhrazený', 'Secret' => 'Tajný', 'Top Secret' => 'Velmi tajný', 'Unclassified' => 'NeurÄeno', }, }, 'SelfTimerMode' => 'Samospoušť', 'SensingMethod' => { Description => 'Metoda měření', PrintConv => { 'Color sequential area' => 'Barevný sekvenÄní ploÅ¡ný sensor', 'Color sequential linear' => 'Barevný sekvenÄné-lineární senzor', 'Monochrome area' => 'Monochromatický senzor', 'Monochrome linear' => 'Monochromatický lineární senzor', 'Not defined' => 'Nedefinovaný', 'One-chip color area' => 'JednoÄipový barevný senzor', 'Three-chip color area' => 'TříÄipový barevný senzor', 'Trilinear' => 'Třílineární senzor', 'Two-chip color area' => 'DvouÄipový barevný senzor', }, }, 'SequentialShot' => { PrintConv => { 'None' => 'Žádná', }, }, 'SerialNumber' => 'ID fotoaparátu', 'SetButtonCrossKeysFunc' => { PrintConv => { 'Normal' => 'Normální', }, }, 'ShadingCompensation' => 'Kompenzace stínování', 'Sharpness' => { Description => 'DoostÅ™ení', PrintConv => { 'Hard' => 'Silné', 'Normal' => 'Normální', 'Soft' => 'Lehké', }, }, 'SharpnessFrequency' => { PrintConv => { 'Low' => 'MénÄ›', }, }, 'ShootingMode' => { Description => 'Režim focení', PrintConv => { 'Aperture Priority' => 'Priorita clony', 'Macro' => 'Makro', 'Manual' => 'Manuální', 'Normal' => 'Normální', 'Portrait' => 'Portrét', 'Shutter Priority' => 'Priorita Äasu', 'Spot' => 'StÅ™edový bod', }, }, 'ShutterMode' => { PrintConv => { 'Aperture Priority' => 'Priorita clony', }, }, 'ShutterSpeed' => 'ExpoziÄní Äas', 'ShutterSpeedValue' => 'ÄŒas závÄ›rky', 'SlowShutter' => { PrintConv => { 'None' => 'Žádná', }, }, 'Software' => 'Použitý software', 'Source' => 'Zdroj', 'SpatialFrequencyResponse' => 'Spatial frequency response', 'SpecialEffectsOpticalFilter' => { PrintConv => { 'None' => 'Žádná', }, }, 'SpectralSensitivity' => 'Spektrální citlivost', 'State' => 'Stát', 'StripByteCounts' => 'Bytů na komprimovanou Äást', 'StripOffsets' => 'Pozice obrazových dat', 'SubSecCreateDate' => 'Datum a Äas generování digitálních dat', 'SubSecDateTimeOriginal' => 'Datum a Äas vzniku originálních dat', 'SubSecModifyDate' => 'Datum a Äas zmÄ›ny souboru', 'SubSecTime' => 'DateTime 1/100 sekundy', 'SubSecTimeDigitized' => 'DateTimeDigitized 1/100 sekund', 'SubSecTimeOriginal' => 'DateTimeOriginal 1/100 sekund', 'SubfileType' => 'Nový typ podsekce', 'Subject' => 'Popis', 'SubjectArea' => 'Pozice hlavního objektu', 'SubjectDistance' => 'Vzdálenost objektu', 'SubjectDistanceRange' => { Description => 'Rozsah vzdálenosti objektu', PrintConv => { 'Close' => 'Blízký', 'Distant' => 'Vzdálený', 'Macro' => 'Makro', 'Unknown' => 'Neznámý', }, }, 'SubjectLocation' => 'Pozice hlavního objektu', 'SubjectProgram' => { PrintConv => { 'None' => 'Žádná', 'Portrait' => 'Portrét', }, }, 'Subsystem' => { PrintConv => { 'Unknown' => 'Neznámý', }, }, 'SupplementalCategories' => 'Doplňkové kategorie', 'T4Options' => 'Plné bity', 'T6Options' => 'Volby T6', 'TargetPrinter' => 'Cílová tiskárna', 'Teleconverter' => { PrintConv => { 'None' => 'Žádná', }, }, 'Thresholding' => 'Práh', 'ThumbnailImage' => 'Náhled', 'ThumbnailImageSize' => 'Velkost náhledu', 'TileByteCounts' => 'PoÄet bytů prvku', 'TileLength' => 'Délka prvku', 'TileOffsets' => 'Offset prvku', 'TileWidth' => 'Šířka prvku', 'TimeScaleParamsQuality' => { PrintConv => { 'Low' => 'MénÄ›', }, }, 'Title' => 'Název', 'ToneCurve' => { PrintConv => { 'Manual' => 'Manuální', }, }, 'ToningEffect' => { PrintConv => { 'None' => 'Žádná', }, }, 'ToningEffectMonochrome' => { PrintConv => { 'None' => 'Žádná', }, }, 'TransferFunction' => 'Transfer funkce', 'Transformation' => { PrintConv => { 'Horizontal (normal)' => '0° (nahoru/vlevo)', 'Mirror horizontal' => '0° (nahoru/vpravo)', 'Mirror horizontal and rotate 270 CW' => '90° po smÄ›ru HR (vlevo/nahoru)', 'Mirror horizontal and rotate 90 CW' => '90° ptoti smÄ›ru HR (vpravo/dolů)', 'Mirror vertical' => '180° (dolů/vlevo)', 'Rotate 180' => '180° (dolů/vpravo)', 'Rotate 270 CW' => '90° po smÄ›ru HR (vlevo/dolů)', 'Rotate 90 CW' => '90° ptoti smÄ›ru HR (vpravo/nahoru)', }, }, 'TransmissionReference' => 'Reference pÅ™enosu', 'Trapped' => { PrintConv => { 'Unknown' => 'Neznámý', }, }, 'Urgency' => 'Naléhavost', 'UserComment' => 'Komentář', 'UserDef1PictureStyle' => { PrintConv => { 'Landscape' => 'Krajina', 'Portrait' => 'Portrét', }, }, 'UserDef2PictureStyle' => { PrintConv => { 'Landscape' => 'Krajina', 'Portrait' => 'Portrét', }, }, 'UserDef3PictureStyle' => { PrintConv => { 'Landscape' => 'Krajina', 'Portrait' => 'Portrét', }, }, 'VRDVersion' => 'VRD verze', 'Version' => 'Verze', 'VignetteControl' => { PrintConv => { 'Normal' => 'Normální', }, }, 'WBAdjLighting' => { PrintConv => { 'Daylight (direct sunlight)' => 'Denní svÄ›tlo (0)', 'Daylight (shade)' => 'Denní svÄ›tlo (1)', 'Daylight (cloudy)' => 'Denní svÄ›tlo (2)', 'Flash' => 'Blesk', 'None' => 'Žádná', }, }, 'WhiteBalance' => { Description => 'Vyvážení bílé', PrintConv => { 'Auto' => 'Automatické vyvážení bílé', 'Black & White' => 'ÄŒernobílé foto', 'Cloudy' => 'Zataženo', 'Cool White Fluorescent' => 'Chladná bílá fluorescentní', 'Custom 1' => 'VLASTNÃ1', 'Custom 2' => 'VLASTNÃ2', 'Custom 3' => 'VLASTNÃ3', 'Custom 4' => 'VLASTNÃ4', 'Day White Fluorescent' => 'Denní zářivka', 'Daylight' => 'Denní svÄ›tlo', 'Daylight Fluorescent' => 'Denní svÄ›tlo', 'Flash' => 'Blesk', 'Fluorescent' => 'Žárovka', 'Manual' => 'Manuální', 'Shade' => 'Stíny', 'Tungsten' => 'Zářivka', 'Unknown' => 'Neznámý', 'White Fluorescent' => 'Bílá zářivka', }, }, 'WhiteBalanceAdj' => { PrintConv => { 'Cloudy' => 'Zataženo', 'Daylight' => 'Denní svÄ›tlo', 'Flash' => 'Blesk', 'Fluorescent' => 'Žárovka', 'Shade' => 'Stíny', 'Tungsten' => 'Zářivka', }, }, 'WhiteBalanceMode' => { PrintConv => { 'Unknown' => 'Neznámý', }, }, 'WhiteBalanceSet' => { PrintConv => { 'Cloudy' => 'Zataženo', 'Daylight' => 'Denní svÄ›tlo', 'Daylight Fluorescent' => 'Denní svÄ›tlo', 'Flash' => 'Blesk', 'Manual' => 'Manuální', 'Shade' => 'Stíny', 'Tungsten' => 'Zářivka', 'White Fluorescent' => 'Bílá zářivka', }, }, 'WhitePoint' => 'ChromatiÄnost bílého bodu', 'Writer-Editor' => 'Autor popisku', 'XMP' => 'XMP metadata', 'XPAuthor' => 'Autor', 'XPComment' => 'Komentář', 'XPKeywords' => 'KlíÄová slova', 'XPSubject' => 'Popis', 'XPTitle' => 'Název', 'XPosition' => 'X-pozice', 'XResolution' => 'RozliÅ¡ení obrázku na šířku', 'YCbCrCoefficients' => 'Koeficienty transformaÄní YCbCr matrice', 'YCbCrPositioning' => { Description => 'Y a C pozice', PrintConv => { 'Centered' => 'Centrované', 'Co-sited' => 'Po stranách', }, }, 'YCbCrSubSampling' => 'Vzorkovací pomÄ›r Y k C', 'YPosition' => 'Y-pozice', 'YResolution' => 'RozliÅ¡ení obrázku na výšku', ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::cs.pm - ExifTool Czech language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke and Petr MichE<aacute>lek for providing this translation. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/de.pm��������������������������������������������������000644 �000765 �000024 �00001107061 12642461342 021525� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: de.pm # # Description: ExifTool German language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::de; use strict; use vars qw($VERSION); $VERSION = '1.30'; %Image::ExifTool::Lang::de::Translate = ( 'AEAperture' => 'AE-Blende', 'AEBAutoCancel' => { Description => 'Automatisches Bracketingende', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'AEBBracketValue' => 'AEB-Korrekturwert', 'AEBSequence' => 'Bracketing-Sequenz', 'AEBSequenceAutoCancel' => { Description => 'WB-Sequenz/autom. Abschaltung', PrintConv => { '-,0,+/Disabled' => '-,0,+/Aus', '-,0,+/Enabled' => '-,0,+/Ein', '0,-,+/Disabled' => '0,-,+/Aus', '0,-,+/Enabled' => '0,-,+/Ein', }, }, 'AEBShotCount' => 'Anzahl Belichtungsreihenaufnahmen', 'AEBXv' => 'AEB-Belichtungskorrektur', 'AEExposureTime' => 'AE-Belichtungszeit', 'AEExtra' => 'AE-Extra?', 'AEFlags' => { PrintConv => { 'AE lock' => 'AE Speicherung', 'Aperture wide open' => 'Offene Blende', 'Flash recommended?' => 'Blitz erforderlich', }, }, 'AEInfo' => 'Automatikbelichtungs-Informationen', 'AELock' => { Description => 'Belichtungsspeicher', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'AELockButton' => { Description => 'AE-L/AF-L-Taste', PrintConv => { 'AE Lock (hold)' => 'Nur Belichtung (halten)', 'AE Lock Only' => 'Nur Belichtung', 'AE-L/AF Area' => 'Belichtung & Messfeld', 'AE-L/AF-L/AF Area' => 'Bel. & Fokus & Messfeld', 'AE/AF Lock' => 'Belichtung & Fokus', 'AF Lock Only' => 'Nur Fokus', 'AF-L/AF Area' => 'Fokus & Messfeld', 'AF-ON' => 'AF-Aktivierung', 'AF-ON/AF Area' => 'AF-Aktiv. & Messfeld', 'FV Lock' => 'FV-Messwertspeicher', 'Focus Area Selection' => 'AF-Messfeldauswahl', }, }, 'AEMaxAperture' => 'Größte AE-Blende', 'AEMaxAperture2' => 'Größte AE-Blende (2)', 'AEMeteringMode' => { Description => 'AE Belichtungs-Messmethode', PrintConv => { 'Center-weighted average' => 'Mittenbetont', 'Multi-segment' => 'Multi-Segment', }, }, 'AEMeteringSegments' => 'AE-Messfelder', 'AEMicroadjustment' => { Description => 'AE Feinabstimmung', PrintConv => { 'Disable' => 'Deaktiviert', 'Enable' => 'Aktiviert', }, }, 'AEMinAperture' => 'Kleinste AE-Blende', 'AEMinExposureTime' => 'Kürzeste AE Belichtungszeit', 'AEProgramMode' => { Description => 'AE-Programm-Modus', PrintConv => { 'Av, B or X' => 'Av, B oder X', 'Candlelight' => 'Kerzenlicht', 'DOF Program' => 'Schärfentiefe-Priorität', 'DOF Program (P-Shift)' => 'Schärfentiefe-Priorität (P Shift)', 'Hi-speed Program' => 'HS-Priorität', 'Hi-speed Program (P-Shift)' => 'HS-Priorität (P Shift)', 'Kids' => 'Kinder', 'Landscape' => 'Landschaft', 'M, P or TAv' => 'M, P oder TAv', 'MTF Program' => 'MTF-Priorität', 'MTF Program (P-Shift)' => 'MTF-Priorität (P Shift)', 'Macro' => 'Makro', 'Night Scene' => 'Nachtszene', 'Night Scene Portrait' => 'Nacht-Porträt', 'No Flash' => 'Kein Blitz', 'Pet' => 'Haustiere', 'Portrait' => 'Porträt', 'Sunset' => 'Sonnenuntergang', 'Surf & Snow' => 'Surf & Schnee', 'Sv or Green Mode' => 'Sv oder "Grünes" AE-Programm', }, }, 'AESetting' => { Description => 'AE-Einstellung', PrintConv => { 'AE Lock' => 'AE-Speicherung', 'AE Lock + Exposure Comp.' => 'AE-Speicherung + Belichtungskorrektur', 'Exposure Compensation' => 'Belichtungskorrektur', 'No AE' => 'Kein AE', }, }, 'AEXv' => 'AE-Belichtungskorrektur', 'AE_ISO' => 'AE-ISO-Empfindlichkeit', 'AF-CPrioritySelection' => { Description => 'Priorität bei AF-C', PrintConv => { 'Focus' => 'Schärfepriorität', 'Release' => 'Auslösepriorität', 'Release + Focus' => 'Auslösepriorität & AF', }, }, 'AF-OnForMB-D10' => { Description => 'AF-ON-Taste (MB-D10)', PrintConv => { 'AE Lock (hold)' => 'Belichtung speichern ein/aus', 'AE Lock (reset on release)' => 'Bel. speichern ein/aus (Reset)', 'AE Lock Only' => 'Belichtung speichern', 'AE/AF Lock' => 'Belichtung & Fokus speichern', 'AF Lock Only' => 'Fokus speichern', 'AF-On' => 'Autofokus aktiviert', 'Same as FUNC Button' => 'Wie Funktionstaste', }, }, 'AF-SPrioritySelection' => { Description => 'Priorität bei AF-S (Einzel-AF)', PrintConv => { 'Focus' => 'Schärfepriorität', 'Release' => 'Auslösepriorität', }, }, 'AFActivation' => { Description => 'AF-Aktivierung', PrintConv => { 'AF-On Only' => 'Nur AF-ON-Taste', 'Shutter/AF-On' => 'AF-On-Taste & Auslöser', }, }, 'AFAdjustment' => 'AF-Korrektur', 'AFAndMeteringButtons' => { Description => 'AF And Mess-Tasten', PrintConv => { 'AE lock' => 'AE Speicherung', 'AF stop' => 'AE Stopp', 'Metering + AF start' => 'Messung + AF Start', 'Metering start' => 'Messung Start', 'No function' => 'Keine Funktion', }, }, 'AFAperture' => 'AF-Blende', 'AFArea' => 'AF Bereich', 'AFAreaHeight' => 'AF-Bereichshöhe', 'AFAreaHeights' => 'AF-Bereichshöhe', 'AFAreaIllumination' => { Description => 'Messfeld-LED', PrintConv => { 'Auto' => 'Automatisch', 'Off' => 'Aus', 'On' => 'Ein', }, }, 'AFAreaMode' => { Description => 'Messfeldsteuerung', PrintConv => { '1-area' => '1 Bereich', '1-area (high speed)' => '1 Bereich (kurze Verschlußzeit)', '23-area' => '23 Bereiche', '3-area (center)?' => '3 Bereiche (mitte)', '3-area (high speed)' => '3 Bereiche (kurze Verschlußzeit)', '3-area (left)?' => '3 Bereiche (links)', '3-area (right)?' => '3 Bereiche (rechts)', '5-area' => '5 Bereiche', '9-area' => '9 Bereiche', 'AF Point Expansion' => 'AF Punkt-Erweiterung', 'Auto (41 points)' => 'Automatisch (41 Punkte)', 'Auto-area' => 'Autom. Messfeldgr.', 'Center' => 'Mitte', 'Contrast-detect' => 'Kontrasterkennung', 'Contrast-detect (face priority)' => 'Kontrasterkennung (Gesichtserkennung)', 'Contrast-detect (normal area)' => 'Kontrasterkennung (Standardbereich)', 'Contrast-detect (subject tracking)' => 'Kontrasterkennung (Objektverfolgung)', 'Contrast-detect (wide area)' => 'Kontrasterkennung (großer Bereich)', 'Default' => 'Standard', 'Dynamic Area' => 'Dynamisch', 'Dynamic Area (21 points)' => 'Dynamischer Bereich (21 Punkte)', 'Dynamic Area (3D-tracking)' => 'Dynamischer Bereich (3D-Nachführung)', 'Dynamic Area (51 points)' => 'Dynamischer Bereich (51 Punkte)', 'Dynamic Area (51 points, 3D-tracking)' => 'Dynamischer Bereich (51 Punkte, 3D-Nachführung)', 'Dynamic Area (9 points)' => 'Dynamischer Bereich (9 Punkte)', 'Dynamic Area (closest subject)' => 'Dynamic Messfeldgruppensteuerung (priorität der kürzesten Aufnahmedistanz)', 'Dynamic Area (wide)' => 'Dynamische Messfeldsteuerung (groß)', 'Dynamic Area (wide, 3D-tracking)' => 'Dynamischer Bereich (groß, 3D-Nachführung)', 'Face + Tracking' => 'Gesichtserkennung + Nachführung', 'Face Detect' => 'Gesichtserkennung', 'Face Detect AF' => 'Gesichtserkennung AF', 'Face Priority (41 points)' => 'Gesichtserkennung (41 Punkte)', 'Face Tracking' => 'Gesichtserkennung', 'Flexible' => 'Angepasst', 'Flexible Spot' => 'Gesetzter Punkt', 'Flexizone Multi' => 'Mehrpunkt-Bereich', 'Flexizone Single' => 'Einpunkt-Bereich', 'Group Dynamic' => 'Dynamische Messfeldgruppensteuerung', 'Local' => 'Lokal', 'Manual' => 'Manuell', 'Multi' => 'Mehrpunkt', 'Multi-point AF or AI AF' => 'Mehrpunkt AF oder AI AF', 'Normal?' => 'Normal', 'Off (Manual Focus)' => 'Aus (Manueller Fokus)', 'Selective (for Miniature effect)' => 'Selektiv (für Vorschau-Effekt)', 'Single (135 points)' => 'Einpunkt (135 Punkte)', 'Single Area' => 'Einzelfeld', 'Single Area (wide)' => 'Einzelfeldmessung (groß)', 'Single-point AF' => 'Einpunkt AF', 'Spot Focusing' => 'Spotfokussierung', 'Spot Focusing 2' => 'Spotfokussierung 2', 'Spot Mode Off' => 'Spot-Modus Aus', 'Spot Mode On' => 'Spot-Modus Ein', 'Subject Tracking (41 points)' => 'Objektverfolgung (41 Punkte)', 'Touch' => 'Berührungspunkt', 'Tracking' => 'Nachführung', 'Wide' => 'Weit', 'Zone' => 'Bereich', 'Zone AF' => 'Zonen AF', 'n/a' => '(nicht gesetzt)', }, }, 'AFAreaModeSetting' => { Description => 'Messfeldsteuerung', PrintConv => { '3D-tracking (11 points)' => '3D Nachführung (11 Punkte)', 'Auto-area' => 'Automatischer Bereich', 'Center' => 'Mitte', 'Closest Subject' => 'Nächstes Objekt', 'Dynamic Area' => 'Dynamisch', 'Flexible Spot' => 'Gesetzter Punkt', 'Local' => 'Lokal', 'Multi' => 'Mehrpunkt', 'Single Area' => 'Einzelfeld', 'Wide' => 'Weit', 'Zone' => 'Bereich', }, }, 'AFAreaWidth' => 'AF-Bereichsbreite', 'AFAreaWidths' => 'AF-Bereichsbreite', 'AFAreaXPosition' => 'AF-Bereich X Position', 'AFAreaXPosition1' => 'AF-Bereich X Position 1', 'AFAreaXPositions' => 'AF Bereich X Positionen', 'AFAreaYPosition' => 'AF-Bereich Y Position', 'AFAreaYPosition1' => 'AF-Bereich Y Position 1', 'AFAreaYPositions' => 'AF Bereich Y Positionen', 'AFAreas' => 'AF-Bereiche', 'AFAssist' => { Description => 'AF-Hilfslicht', PrintConv => { 'Does not emit/Fires' => 'Kein Messlicht/Zündung', 'Emits/Does not fire' => 'Messlicht/keine Zündung', 'Emits/Fires' => 'Messlicht/Zündung', 'Off' => 'Aus', 'On' => 'Ein', 'Only ext. flash emits/Fires' => 'Nur ext. Messl./Zündung', }, }, 'AFAssistBeam' => { Description => 'AF-Hilfslicht Aussendung', PrintConv => { 'Does not emit' => 'Deaktiv', 'Emits' => 'Aktiv', 'Only ext. flash emits' => 'Nur bei ext. Blitz aktiv', }, }, 'AFAssistLamp' => { Description => 'AF Hilfslicht', PrintConv => { 'Disabled and Not Required' => 'Nicht eingestellt, war nicht nötig', 'Disabled but Required' => 'Nicht eingestellt, war aber nötig', 'Enabled but Not Used' => 'Eingestellt, aber nicht verwendet', 'Fired' => 'Blitz wurde ausgelöst', }, }, 'AFDefocus' => 'AF-Defocus', 'AFDuringLiveView' => { Description => 'AF bei Live View-Aufnahmen', PrintConv => { 'Disable' => 'Inaktiv', 'Enable' => 'Aktiv', 'Live mode' => 'LiveModus', 'Quick mode' => 'QuickModus', }, }, 'AFFineTune' => { Description => 'AF-Feinabstimmung', PrintConv => { 'Off' => 'Aus', 'On (1)' => 'An (1)', 'On (2)' => 'An (2)', }, }, 'AFFineTuneAdj' => 'AF-Feinabstimmung', 'AFIlluminator' => { PrintConv => { 'Off' => 'Aus', 'n/a' => '(nicht gesetzt)', }, }, 'AFImageHeight' => 'AF-Bildhöhe', 'AFImageWidth' => 'AF-Bildbreite', 'AFInFocus' => 'AF in Fokus', 'AFInfo' => 'AF-Modus', 'AFInfo2' => 'AF-Informationen', 'AFInfo2Version' => 'AF-Info-Version', 'AFIntegrationTime' => 'AF-Messzeit', 'AFMicroAdj' => 'AF Feinabstimmung', 'AFMicroAdjMode' => { Description => 'AF Feinabstimmung Modus', PrintConv => { 'Adjust all by the same amount' => 'Korrektur immer um gleichen Wert', 'Adjust by lens' => 'Korrektur objektivabhängig', 'Disable' => 'Deaktiviert', 'Off' => 'Aus', 'On' => 'An', }, }, 'AFMicroAdjRegisteredLenses' => 'AF Feinabstimmung bekannte Objektive', 'AFMicroAdjValue' => 'AF Feinabstimmung Wert', 'AFMicroadjustment' => { Description => 'AF Feinabstimmung', PrintConv => { 'Adjust all by same amount' => 'Alle auf gleichen Wert', 'Adjust by lens' => 'Abstimmung pro Objektiv', 'Disable' => 'Deaktivieren', }, }, 'AFMode' => { Description => 'AF-Modus', PrintConv => { 'Face Detection' => 'Gesichtserkennung', 'Off' => 'Aus', 'Tracking' => 'Nachführung', 'n/a' => '(nicht gesetzt)', }, }, 'AFOnAELockButtonSwitch' => { Description => 'AF-ON/AELocktaste- Schalter', PrintConv => { 'Disable' => 'Deaktiviert', 'Enable' => 'Aktiviert', }, }, 'AFPoint' => { Description => 'Gewählter AF-Punkt', PrintConv => { '(none)' => '(keiner)', 'Auto AF point selection' => 'Automatische Wahl des AF-Punktes', 'Bottom' => 'Unten', 'Bottom (horizontal)' => 'Unten (horizontal)', 'Bottom (vertical)' => 'Unten (vertikal)', 'Bottom Center' => 'Unten Mitte', 'Bottom Left' => 'Unten Links', 'Bottom Right' => 'Unten Rechts', 'Bottom-center (horizontal)' => 'Unten Mitte (horizontal)', 'Bottom-center (vertical)' => 'Unten Mitte (vertikal)', 'Bottom-left' => 'Unten Links', 'Bottom-left (horizontal)' => 'Unten Links (horizontal)', 'Bottom-left (vertical)' => 'Unten Links (vertikal)', 'Bottom-right' => 'Unten Rechts', 'Bottom-right (horizontal)' => 'Unten Rechts (horizontal)', 'Bottom-right (vertical)' => 'Unten Rechts (vertikal)', 'Center' => 'Mitte', 'Center (horizontal)' => 'Mitte (horizontal)', 'Center (vertical)' => 'Mitte (vertikal)', 'Center Left' => 'Mitte Links', 'Center Right' => 'Mitte Rechts', 'Face Detect' => 'Gesichtserkennung', 'Far Left' => 'Weit links', 'Far Left (horizontal)' => 'Weit links (horizontal)', 'Far Left (vertical)' => 'Weit links (vertikal)', 'Far Left/Right of Center' => 'Weit Links/Rechts der Mitte', 'Far Left/Right of Center/Bottom' => 'Weit Links/Rechts der Mitte/Unten', 'Far Right' => 'Weit rechts', 'Far Right (horizontal)' => 'Weit rechts (horizontal)', 'Far Right (vertical)' => 'Weit rechts (vertikal)', 'Left' => 'Links', 'Left (horizontal)' => 'Links (horizontal)', 'Left (or n/a)' => 'Links (oder Nicht gesetzt)', 'Left (vertical)' => 'Links (vertikal)', 'Lower Far Left' => 'Unten ganz links', 'Lower Far Right' => 'Unten ganz rechts', 'Lower-left' => 'Links unten', 'Lower-left (horizontal)' => 'Links unten (horizontal)', 'Lower-left (vertical)' => 'Links unten (vertikal)', 'Lower-middle' => 'Untere Mitte', 'Lower-right' => 'Rechts unten', 'Lower-right (horizontal)' => 'Rechts unten (horizontal)', 'Lower-right (vertical)' => 'Unten rechts (vertikal)', 'Manual AF point selection' => 'Manuell gewählter AF-Punkt', 'Mid-left' => 'Links mitte', 'Mid-left (horizontal)' => 'Links mitte (horizontal)', 'Mid-left (vertical)' => 'Links mitte (vertikal)', 'Mid-right' => 'Rechts mitte', 'Mid-right (horizontal)' => 'Rechts mitte (horizontal)', 'Mid-right (vertical)' => 'Rechts mitte (vertikal)', 'Near Left' => 'Nahe Links', 'Near Left/Right of Center' => 'Nahe Links/Rechts der Mitte', 'Near Right' => 'Nahe Rechts', 'Near Upper/Left' => 'Nahe Links oben', 'None' => 'Keiner', 'None (MF)' => 'Keiner (MF)', 'Right' => 'Rechts', 'Right (horizontal)' => 'Rechts (horizontal)', 'Right (vertical)' => 'Rechts (vertikal)', 'Top' => 'Oben', 'Top (horizontal)' => 'Oben (horizontal)', 'Top (vertical)' => 'Oben (vertikal)', 'Top Center' => 'Oben Mitte', 'Top Left' => 'Oben Links', 'Top Near-left' => 'Oben nahe-Links', 'Top Near-right' => 'Nahe Rechts-oben', 'Top Right' => 'Oben Rechts', 'Top-center (horizontal)' => 'Oben Mitte (horizontal)', 'Top-center (vertical)' => 'Oben Mitte (vertikal)', 'Top-left' => 'Oben Links', 'Top-left (horizontal)' => 'Oben Links (horizontal)', 'Top-left (vertical)' => 'Oben Links (vertikal)', 'Top-right' => 'Oben Rechts', 'Top-right (horizontal)' => 'Oben Rechts (horizontal)', 'Top-right (vertical)' => 'Oben Rechts (vertikal)', 'Upper Far Left' => 'Oben ganz links', 'Upper Far Right' => 'Oben ganz rechts', 'Upper Left' => 'Links oben', 'Upper Right' => 'Rechts oben', 'Upper-left' => 'Links oben', 'Upper-left (horizontal)' => 'Links oben (horizontal)', 'Upper-left (vertical)' => 'Links oben (vertikal)', 'Upper-middle' => 'Obere Mitte', 'Upper-right' => 'Rechts oben', 'Upper-right (horizontal)' => 'Rechts oben (horizontal)', 'Upper-right (vertical)' => 'Oben rechts (vertikal)', 'n/a' => '(nicht gesetzt)', }, }, 'AFPointActivationArea' => { Description => 'AF-Messfeld-Aktivierungsbereich', PrintConv => { 'Expanded' => 'Erweitert', }, }, 'AFPointAreaExpansion' => { Description => 'AF-Messbereich Ausweitung', PrintConv => { 'All 45 points area' => 'Alle 45 Punkte', 'Disable' => 'Aus', 'Enable' => 'An', 'Left/right AF points' => 'Möglich (linkes/rechtes zusätzliches AF-Messfeld)', 'Surrounding AF points' => 'Möglich (entsprechendes zusätzliches AF-Messfeld)', }, }, 'AFPointAtShutterRelease' => { Description => 'AF-Punkt beim Auslösen', PrintConv => { '(out of focus)' => '(ausserhalb Fokus)', 'Bottom (horizontal)' => 'Unten (horizontal)', 'Bottom (vertical)' => 'Unten (vertikal)', 'Center (horizontal)' => 'Mitte (horizontal)', 'Center (vertical)' => 'Mitte (vertikal)', 'Far Left' => 'Weit links', 'Far Left (horizontal)' => 'Weit links (horizontal)', 'Far Left (vertical)' => 'Weit links (vertikal)', 'Far Right' => 'Weit rechts', 'Far Right (horizontal)' => 'Weit rechts (horizontal)', 'Far Right (vertical)' => 'Weit rechts (vertikal)', 'Left' => 'Links', 'Left (horizontal)' => 'Links (horizontal)', 'Left (vertical)' => 'Links (vertikal)', 'Lower Far Left' => 'Unten ganz links', 'Lower Far Right' => 'Unten ganz rechts', 'Lower-left' => 'Links unten', 'Lower-left (horizontal)' => 'Links unten (horizontal)', 'Lower-left (vertical)' => 'Links unten (vertikal)', 'Lower-middle' => 'Unten mitte', 'Lower-right' => 'Rechts unten', 'Lower-right (horizontal)' => 'Rechts unten (horizontal)', 'Lower-right (vertical)' => 'Rechts unten (vertikal)', 'Near Left' => 'Nahe links', 'Near Right' => 'Nahe rechts', 'Right' => 'Rechts', 'Right (horizontal)' => 'Rechts (horizontal)', 'Right (vertical)' => 'Rechts (vertikal)', 'Top (horizontal)' => 'Oben (horizontal)', 'Top (vertical)' => 'Oben (vertikal)', 'Upper Far Left' => 'Oben ganz links', 'Upper Far Right' => 'Oben ganz rechts', 'Upper-left' => 'Links oben', 'Upper-left (horizontal)' => 'Links oben (horizontal)', 'Upper-left (vertical)' => 'Links oben (vertikal)', 'Upper-middle' => 'Oben mitte', 'Upper-right' => 'Rechts oben', 'Upper-right (horizontal)' => 'Rechts oben (horizontal)', 'Upper-right (vertical)' => 'Rechts oben (vertikal)', }, }, 'AFPointAutoSelection' => { Description => 'Automatische AF-Feldwahl', PrintConv => { 'Control-direct:disable/Main:disable' => 'Schnelleinstellrad-Direkt:nicht möglich/Haupt-Wahlrad:nein', 'Control-direct:disable/Main:enable' => 'Schnelleinstellrad-Direkt:nicht möglich/Haupt-Wahlrad:möglich', 'Control-direct:enable/Main:enable' => 'Schnelleinstellrad-Direkt:möglich/Haupt-Wahlrad:möglich', }, }, 'AFPointBrightness' => { Description => 'AF-Feld Helligkeit', PrintConv => { 'Brighter' => 'Heller', 'Extra High' => 'Extra Hoch', 'High' => 'Hoch', 'Low' => 'Niedrig', }, }, 'AFPointDisplayDuringFocus' => { Description => 'AF-Feld Anzeige während Fokus', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', 'On (when focus achieved)' => 'Ein (nach Scharfeinstellung)', }, }, 'AFPointIllumination' => { Description => 'Messfeld-LED', PrintConv => { 'Auto' => 'Automatisch', 'Off' => 'Aus', 'On' => 'Ein', }, }, 'AFPointInFocus' => { Description => 'AF-Punkt im Fokus', PrintConv => { '(none)' => '(keiner)', 'Bottom (horizontal)' => 'Unten (horizontal)', 'Bottom (vertical)' => 'Unten (vertikal)', 'Center (horizontal)' => 'Mitte (horizontal)', 'Center (vertical)' => 'Mitte (vertikal)', 'Far Left' => 'Weit links', 'Far Left (horizontal)' => 'Weit links(horizontal)', 'Far Left (vertical)' => 'Weit links (vertikal)', 'Far Right' => 'Weit rechts', 'Far Right (horizontal)' => 'Weit rechts (horizontal)', 'Far Right (vertical)' => 'Weit rechts (vertikal)', 'Left' => 'Links', 'Left (horizontal)' => 'Links (horizontal)', 'Left (vertical)' => 'Links (vertikal)', 'Lower Far Left' => 'Unten ganz Links', 'Lower Far Right' => 'Unten ganz rechts', 'Lower-left' => 'Links unten', 'Lower-left (horizontal)' => 'Links unten (horizontal)', 'Lower-left (vertical)' => 'Links unten (vertikal)', 'Lower-middle' => 'Unten mitte', 'Lower-right' => 'Rechts unten', 'Lower-right (horizontal)' => 'Rechts unten (horizontal)', 'Lower-right (vertical)' => 'Rechts unten (vertikal)', 'Near Left' => 'Nahe links', 'Near Right' => 'Nahe rechts', 'Right' => 'Rechts', 'Right (horizontal)' => 'Rechts (horizontal)', 'Right (vertical)' => 'Rechts (vertikal)', 'Top (horizontal)' => 'Oben (horizontal)', 'Top (vertical)' => 'Oben (vertikal)', 'Upper Far Left' => 'Oben ganz links', 'Upper Far Right' => 'Oben ganz rechts', 'Upper-left' => 'Links oben', 'Upper-left (horizontal)' => 'Links oben (horizontal)', 'Upper-left (vertical)' => 'Links oben (vertikal)', 'Upper-middle' => 'Oben mitte', 'Upper-right' => 'Rechts oben', 'Upper-right (horizontal)' => 'Rechts oben (horizontal)', 'Upper-right (vertical)' => 'Rechts oben (vertikal)', }, }, 'AFPointMode' => { Description => 'AF-Punkt-Modus', PrintConv => { 'Auto' => 'Automatisch', }, }, 'AFPointPosition' => 'AF-Punkt Position', 'AFPointRegistration' => { Description => 'AF-Feld Speicherung', PrintConv => { 'Automatic' => 'Automatisch', 'Bottom' => 'Unten', 'Center' => 'Mitte', 'Extreme Left' => 'Ganz links', 'Extreme Right' => 'Ganz rechts', 'Left' => 'Links', 'Right' => 'Rechts', 'Top' => 'Oben', }, }, 'AFPointSelected' => { Description => 'AF gewählter Punkt', PrintConv => { 'Auto' => 'Automatisch', 'Automatic Tracking AF' => 'Nachführ AF', 'Bottom' => 'Unten', 'Bottom-left' => 'Unten-links', 'Bottom-right' => 'Unten-rechts', 'Center' => 'Mitte', 'Face Detect AF' => 'Gesichtserkennungs-AF', 'Far Left' => 'Weit links', 'Far Right' => 'Weit rechts', 'Fixed Center' => 'Auf Mitte fixiert', 'Left' => 'Links', 'Lower Far Left' => 'Unten weit Links', 'Lower Far Right' => 'Unten weit Rechts', 'Lower-left' => 'Links unten', 'Lower-middle' => 'Untere Mitte', 'Lower-right' => 'Rechts unten', 'Mid-left' => 'Links mitte', 'Mid-right' => 'Rechts mitte', 'Near Left' => 'Nahe Links', 'Near Right' => 'Nahe Rechts', 'Right' => 'Rechts', 'Top' => 'Oben', 'Top-left' => 'Oben-links', 'Top-right' => 'Oben-rechts', 'Upper Far Left' => 'Oben weit Links', 'Upper Far Right' => 'Oben weit Rechts', 'Upper-left' => 'Links oben', 'Upper-middle' => 'Obere Mitte', 'Upper-right' => 'Rechts oben', }, }, 'AFPointSelected2' => { Description => 'AF gewählter Punkt 2', PrintConv => { 'Auto' => 'Automatisch', 'Bottom' => 'Unten', 'Center' => 'Mitte', 'Left' => 'Links', 'Lower-left' => 'Links unten', 'Lower-right' => 'Rechts unten', 'Mid-left' => 'Links mitte', 'Mid-right' => 'Rechts mitte', 'Right' => 'Rechts', 'Top' => 'Oben', 'Upper-left' => 'Links oben', 'Upper-right' => 'Rechts oben', }, }, 'AFPointSelection' => { Description => 'AF-Messfeldauswahl', PrintConv => { '11 Points' => '11 Messfelder', '51 Points' => '51 Messfelder (3D-Tracking)', }, }, 'AFPointSelectionMethod' => { Description => 'Wahlmethode für AF-Messfeld', PrintConv => { 'Multi-controller direct' => 'Multicontroller', 'Quick Control Dial direct' => 'Schnelleinstellrad', }, }, 'AFPointSet' => { Description => 'AF-Punkt Einstellung', PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'AFPointSpotMetering' => 'Anzahl AF-Messff./Spotmsg.', 'AFPoints' => 'AF-Punkte', 'AFPointsInFocus' => { Description => 'AF-Punkte im Fokus', PrintConv => { 'All' => 'Alle', 'All 11 Points' => 'Alle 11 Punkte', 'Bottom' => 'Unten', 'Bottom, Center' => 'Unten, Mitte', 'Bottom-center' => 'Unten-mitte', 'Bottom-left' => 'Unten-links', 'Bottom-right' => 'Unten-rechts', 'Center' => 'Mitte', 'Center (horizontal)' => 'Mitte (horizontal)', 'Center (vertical)' => 'Mitte (vertikal)', 'Center+Right' => 'Mitte Rechts', 'Far Left' => 'Weit links', 'Far Right' => 'Weit rechts', 'Fixed Center or Multiple' => 'Auf Mitte fixiert oder mehrere', 'Left' => 'Links', 'Left+Center' => 'Links Mitte', 'Left+Right' => 'Links Rechts', 'Lower-left' => 'Links unten', 'Lower-left, Bottom' => 'Links unten, Unten', 'Lower-left, Mid-left' => 'Links unten, Links mitte', 'Lower-right' => 'Rechts unten', 'Lower-right, Bottom' => 'Rechts unten, Unten', 'Lower-right, Mid-right' => 'Rechts unten, Rechts mitte', 'Mid-left' => 'Links mitte', 'Mid-left, Center' => 'Links mitte, Mitte', 'Mid-right' => 'Rechts mitte', 'Mid-right, Center' => 'Rechts mitte, Mitte', 'None' => 'Keiner', 'None (MF)' => 'Keiner (MF)', 'Right' => 'Rechts', 'Top' => 'Oben', 'Top, Center' => 'Oben, Mitte', 'Top-center' => 'Oben-Mitte', 'Top-left' => 'Oben-links', 'Top-right' => 'Oben-rechts', 'Upper-left' => 'Links oben', 'Upper-left, Mid-left' => 'Links oben, Links mitte', 'Upper-left, Top' => 'Links oben, Oben', 'Upper-right' => 'Rechts oben', 'Upper-right, Mid-right' => 'Rechts oben, Rechts mitte', 'Upper-right, Top' => 'Rechts oben, Oben', }, }, 'AFPointsInFocus1D' => 'AF-Punkte im Fokus 1D', 'AFPointsInFocus5D' => { Description => 'AF-Punkte im Fokus', PrintConv => { 'Bottom' => 'Unten', 'Center' => 'Mitte', 'Left' => 'Links', 'Lower-left' => 'Unten links', 'Lower-right' => 'Rechts unten', 'Right' => 'Rechts', 'Top' => 'Oben', 'Upper-left' => 'Links oben', 'Upper-right' => 'Rechts oben', }, }, 'AFPointsSelected' => 'AF gewählte Punkte', 'AFPointsUnknown1' => { Description => 'AF-Punkte Unbekannt 1', PrintConv => { 'All' => 'Alle', 'Bottom' => 'Unten', 'Center' => 'Mitte', 'Central 9 points' => 'Alle mittleren 9 Punkte', 'Left' => 'Links', 'Lower-left' => 'Links unten', 'Lower-right' => 'Rechts unten', 'Mid-left' => 'Links mitte', 'Mid-right' => 'Rechts mitte', 'Right' => 'Rechts', 'Top' => 'Oben', 'Upper-left' => 'Links oben', 'Upper-right' => 'Rechts oben', }, }, 'AFPointsUnknown2' => { Description => 'AF-Punkte Unbekannt 2?', PrintConv => { 'Auto' => 'Automatisch', 'Bottom' => 'Unten', 'Center' => 'Mitte', 'Left' => 'Links', 'Lower-left' => 'Links unten', 'Lower-right' => 'Rechts unten', 'Mid-left' => 'Links mitte', 'Mid-right' => 'Rechts mitte', 'Right' => 'Rechts', 'Top' => 'Oben', 'Upper-left' => 'Links oben', 'Upper-right' => 'Rechts oben', }, }, 'AFPointsUsed' => { Description => 'Verwendete AF-Punkte', PrintConv => { 'All 11 Points' => 'Alle 11 Punkte', 'Bottom' => 'Unten', 'Center' => 'Mitte', 'Far Left' => 'Weit links', 'Far Right' => 'Weit rechts', 'Lower-left' => 'Links unten', 'Lower-right' => 'Rechts unten', 'Mid-left' => 'Links mitte', 'Mid-right' => 'Rechts mitte', 'Top' => 'Oben', 'Upper-left' => 'Links oben', 'Upper-right' => 'Rechts oben', }, }, 'AFPredictor' => 'AF-Prädiktor', 'AFResponse' => 'Verwendeter AF', 'AFSearch' => { Description => 'AF Fokussierung', PrintConv => { 'Not Ready' => 'Nicht bereit', 'Ready' => 'Bereit', }, }, 'AFSensorActive' => { Description => 'Aktiver AF Sensor', PrintConv => { 'Bottom' => 'Unten', 'Bottom-left' => 'Unten Links', 'Bottom-right' => 'Unten Rechts', 'Center Vertical' => 'Mitte vertikal', 'Middle Horizontal' => 'Mitte horizontal', 'Top' => 'Oben', 'Top-left' => 'Oben Links', 'Top-right' => 'Rechts Oben', }, }, 'AFStatusActiveSensor' => { Description => 'Status aktiver AF Sensor', PrintConv => { 'In Focus' => 'Im Fokus', 'Out of Focus' => 'Nicht im Fokus', }, }, 'AFStatusBottom' => { Description => 'AF Status Unten', PrintConv => { 'In Focus' => 'Im Fokus', 'Out of Focus' => 'Nicht im Fokus', }, }, 'AFStatusBottom-left' => { Description => 'AF Status Unten Links', PrintConv => { 'In Focus' => 'Im Fokus', 'Out of Focus' => 'Nicht im Fokus', }, }, 'AFStatusBottom-right' => { Description => 'AF Status Unten Rechts', PrintConv => { 'In Focus' => 'Im Fokus', 'Out of Focus' => 'Nicht im Fokus', }, }, 'AFStatusCenterHorizontal' => { Description => 'AF Status Mitte horizontal', PrintConv => { 'In Focus' => 'Im Fokus', 'Out of Focus' => 'Nicht im Fokus', }, }, 'AFStatusCenterVertical' => { Description => 'AF Status Mitte vertikal', PrintConv => { 'In Focus' => 'Im Fokus', 'Out of Focus' => 'Nicht im Fokus', }, }, 'AFStatusLeft' => { Description => 'AF Status Links', PrintConv => { 'In Focus' => 'Im Fokus', 'Out of Focus' => 'Nicht im Fokus', }, }, 'AFStatusMiddleHorizontal' => { Description => 'AF Status Mitte horizontal', PrintConv => { 'In Focus' => 'Im Fokus', 'Out of Focus' => 'Nicht im Fokus', }, }, 'AFStatusRight' => { Description => 'AF Status Rechts', PrintConv => { 'In Focus' => 'Im Fokus', 'Out of Focus' => 'Nicht im Fokus', }, }, 'AFStatusTop' => { Description => 'AF Status Oben', PrintConv => { 'In Focus' => 'Im Fokus', 'Out of Focus' => 'Nicht im Fokus', }, }, 'AFStatusTop-left' => { Description => 'AF Status Oben Links', PrintConv => { 'In Focus' => 'Im Fokus', 'Out of Focus' => 'Nicht im Fokus', }, }, 'AFStatusTop-right' => { Description => 'AF Status Oben Rechts', PrintConv => { 'In Focus' => 'Im Fokus', 'Out of Focus' => 'Nicht im Fokus', }, }, 'AFType' => { Description => 'AF-Typ', PrintConv => { '15-point' => '15 Punkte', '19-point' => '19 Punkte', }, }, 'AIServoContinuousShooting' => 'Auslösepriorität', 'AIServoImagePriority' => { Description => 'AI Servo Priorität 1./2. Bild', PrintConv => { '1: AF, 2: Drive speed' => 'AF-Priorität/Transportgeschwindigkeit', '1: AF, 2: Tracking' => 'AF-Priorität/Nachführpriorität', '1: Release, 2: Drive speed' => 'Auslösung/Transportgeschwindigkeit', '1: Release, 2: Tracking' => '1: Auslösung, 2: Nachführung', }, }, 'AIServoTrackingMethod' => { Description => 'AI Servo AF Nachführung', PrintConv => { 'Continuous AF track priority' => 'AF Nachführ-Priorität', 'Main focus point priority' => 'Hauptfokussierungsfeld', }, }, 'AIServoTrackingSensitivity' => { Description => 'AI Servo Empfindlichkeit', PrintConv => { 'Fast' => 'Schnell', 'Medium Fast' => 'Mittel-Schnell', 'Medium Slow' => 'Mittel', 'Slow' => 'Langsam', }, }, 'APEVersion' => 'APE-Version', 'ARMVersion' => 'ARM-Version', 'AccessDate' => 'Zugriffsdatum', 'AccessoryType' => 'Zubehör-Typ', 'ActionAdvised' => 'Aktion empfohlen', 'ActiveArea' => 'Aktiver Bereich', 'ActiveD-Lighting' => { Description => 'Aktives D-Lighting', PrintConv => { 'High' => 'Hoch', 'Low' => 'Leicht', 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ActiveD-LightingMode' => { PrintConv => { 'High' => 'Hoch', 'Low' => 'Leicht', 'Off' => 'Aus', }, }, 'AddAspectRatioInfo' => { Description => 'Seitenverhältnisinfo zufügen', PrintConv => { 'Off' => 'Aus', }, }, 'AddOriginalDecisionData' => { Description => 'Originaldaten zufügen', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'Address' => 'Adresse', 'AdjustmentMode' => 'Korrekturmodus', 'AdultContentWarning' => { PrintConv => { 'Unknown' => 'Unbekannt', }, }, 'AdvancedRaw' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'AdvancedSceneMode' => { PrintConv => { 'Creative Macro' => 'Makro kreativ', 'Flower' => 'Blumen', 'HDR B&W' => 'HDR Schwarz-Weiß', 'High Key' => 'High-Key', 'Indoor Sports' => 'Hallensport', 'Low Key' => 'Low-Key', 'Outdoor Sports' => 'Freiluftsport', }, }, 'AdvancedSceneType' => 'Erweiterter Szenentyp', 'AlphaByteCount' => 'Anzahl Bytes der Alpha-Kanal-Daten', 'AlphaChannelsNames' => 'Alpha-Kanal-Namen', 'AlphaDataDiscard' => { Description => 'Verworfene Alpha-Kanal-Daten', PrintConv => { 'Flexbits Discarded' => 'FlexBits verworfen', 'Full Resolution' => 'Volle Auflösung', 'HighPass Frequency Data Discarded' => 'Hochpass-Frequenz-Daten verworfen', 'Highpass and LowPass Frequency Data Discarded' => 'Hochpass- und Tiefpass-Frequenz-Daten verworfen', }, }, 'AlphaOffset' => 'Alpha-Kanal-Datenposition', 'AlreadyApplied' => 'Bereits zugewiesen', 'AnalogBalance' => 'Analog-Balance', 'Annotation' => 'Anmerkung', 'Annotations' => 'Anmerkungen', 'Anti-Blur' => { Description => 'Verwacklungsschutz', PrintConv => { 'Off' => 'Aus', 'On (Continuous)' => 'Ein (Kontinuierlich)', 'On (Shooting)' => 'Ein (Aufnahme)', 'n/a' => '(nicht gesetzt)', }, }, 'AntiAliasStrength' => 'Anti-Aliasing Stärke', 'Aperture' => 'Blende', 'ApertureDisplayed' => 'Angezeigte Blende', 'ApertureRange' => { Description => 'Einstellung Verschlusszeitenbereich', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', }, }, 'ApertureRingUse' => { Description => 'Blendenring-Verwendung', PrintConv => { 'Permitted' => 'Erlaubt', 'Prohibited' => 'Nicht erlaubt', }, }, 'ApertureSetting' => 'Blendeneinstellung', 'ApertureValue' => 'Blende', 'ApplicationRecordVersion' => 'IPTC-Modell-2-Version', 'ApplyShootingMeteringMode' => { Description => 'Angewandter Belichtungs-/Messmodus', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', }, }, 'ApproximateFNumber' => 'F-Wert angenähert', 'ApproximateFocusDistance' => 'Fokus-Distanz angenähert', 'ArtFilter' => { Description => 'Kunst Filter', PrintConv => { 'Drawing' => 'Zeichnung', 'Fish Eye' => 'Fischauge', 'Off' => 'Aus', 'Reflection' => 'Reflektierung', 'Soft Focus' => 'Weichzeichner', 'Soft Focus 2' => 'Weichzeichner 2', 'Sparkle' => 'Perleffekt', 'Watercolor' => 'Wasserfarbe', 'Watercolor II' => 'Wasserfarbe II', }, }, 'ArtFilterEffect' => { Description => 'Filtereffekt Kunst', PrintConv => { 'B&W' => 'Schwarz/Weiß', 'Drawing' => 'Zeichnung', 'Fish Eye' => 'Fischauge', 'No Effect' => 'Ohne Effekt', 'Off' => 'Aus', 'Reflection' => 'Reflektierung', 'Soft Focus' => 'Weichzeichner', 'Soft Focus 2' => 'Weichzeichner 2', 'Sparkle' => 'Perleffekt', 'Watercolor' => 'Wasserfarbe', 'Watercolor II' => 'Wasserfarbe II', }, }, 'ArtMode' => { PrintConv => { 'Silent Movie' => 'Stillleben', }, }, 'Artist' => 'Künstler', 'ArtworkCreator' => 'Artwork Ersteller', 'AsShotICCProfile' => 'Aufnahme ICC-Profil', 'AsShotNeutral' => 'Aufnahme Neutral', 'AsShotPreProfileMatrix' => 'Aufnahme Pre Profil Matrix', 'AsShotProfileName' => 'Aufnahme Pre Profilname', 'AsShotWhiteXY' => 'Aufnahme Weiß XY', 'AspectRatio' => 'Bildformat', 'AssignBktButton' => { Description => 'Zugeordnete Belichtungsreihen-Taste', PrintConv => { 'Auto Bracketing' => 'Automatische Belichtungsreihe', 'Multiple Exposure' => 'Mehrfachbelichtung', }, }, 'AssignFuncButton' => { Description => 'FUNC.-Taste zuordnen', PrintConv => { 'Exposure comp./AEB setting' => 'Belichtungskorrektur/AEB-Einstellung', 'Image jump with main dial' => 'Bildsprung mit Haupt-Wahlrad', 'Image quality' => 'Qualität ändern', 'LCD brightness' => 'LCD-Helligkeit', 'Live view function settings' => 'Livebild Funktionseinstellung', }, }, 'AssistButtonFunction' => { Description => 'Funktion Assist-Taste', PrintConv => { 'Av+/- (AF point by QCD)' => 'Av+/- (AF-Feld mit Daumenrad)', 'FE lock' => 'FE Blitzmesswertspeicherung', 'Select HP (while pressing)' => 'Ausw.G.pos.(Ass-Taste gedr.)', 'Select Home Position' => 'Auswahl Grundposition', }, }, 'Audio' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'AudioCodecID' => { PrintConv => { 'Unknown -' => 'Unbekannt -', }, }, 'AudioDuration' => 'Audiodauer', 'AudioOutcue' => 'Audio-Outcue', 'AudioSamplingRate' => 'Audio-Samplingrate', 'AudioSamplingResolution' => 'Audio-Samplingauflösung', 'AudioType' => 'Audiotyp', 'Author' => 'Autor', 'AuthorURL' => 'Autor URL', 'AuthorsPosition' => 'Autorenposition', 'AutoAperture' => { Description => 'Blendenring auf A', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'AutoBracket' => 'Automatische Belichtungsreihe', 'AutoBracketModeM' => { Description => 'Belichtungsreihen bei M', PrintConv => { 'Flash Only' => 'Nur Blitz', 'Flash/Aperture' => 'Blitz & Blende', 'Flash/Speed' => 'Blitz & Zeit', 'Flash/Speed/Aperture' => 'Blitz, Zeit & Blende', }, }, 'AutoBracketOrder' => 'BKT-Reihenfolge', 'AutoBracketSet' => { Description => 'Belichtungsreihen', PrintConv => { 'AE & Flash' => 'Belichtung & Blitz', 'AE Only' => 'Nur Belichtung', 'Exposure' => 'Belichtung', 'Flash Only' => 'Nur Blitz', 'WB Bracketing' => 'Weißabgleichs-Belichtungsreihe', }, }, 'AutoBracketing' => { Description => 'Automatische Belichtungsreihe', PrintConv => { 'AE' => 'Belichtung', 'Contrast' => 'Kontrast', 'Effect' => 'Effekt', 'No flash & flash' => 'Kein Blitz & Blitz', 'Off' => 'Aus', 'On' => 'An', 'WB' => 'Weißabgleich', 'WB2' => 'Weißabgleich 2', }, }, 'AutoBracketingSet' => { Description => 'Automatische Belichtungsreihen-Einstellung', PrintConv => { 'AE & Flash' => 'Belichtung & Blitz', 'AE Only' => 'Nur Belichtung', 'Flash Only' => 'Nur Blitz', 'WB Bracketing' => 'Weißabgleich-Belichtungsreihe', }, }, 'AutoBrightness' => 'Helligkeit Auto', 'AutoContrast' => 'Kontrast Auto', 'AutoDistortionControl' => { Description => 'Automatische Verzeichnungskontrolle', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'AutoExposure' => 'Belichtung Auto', 'AutoExposureBracketing' => { Description => 'Auto-Belichtungsreihe', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'AutoFP' => { Description => 'FP-Kurzzeitsynchr.', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'AutoFocus' => { Description => 'Auto-Fokus', PrintConv => { 'Off' => 'Deaktiviert', 'On' => 'Aktiviert', }, }, 'AutoISO' => { Description => 'ISO-Automatik', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', 'On (high sensitivity)' => 'Ein (Hohe Empfindlichkeit)', }, }, 'AutoISOMax' => 'ISO-Automatik Max', 'AutoISOMinShutterSpeed' => 'ISO-Automatik Längste Belichtungszeit', 'AutoLightingOptimizer' => { Description => 'Autom. Belichtungsoptimierung', PrintConv => { 'Disable' => 'Inaktiv', 'Enable' => 'Aktiv', 'Low' => 'Gering', 'Off' => 'Aus', 'Strong' => 'Stark', 'n/a' => '(nicht gesetzt)', }, }, 'AutoLightingOptimizerOn' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'AutoPortraitFramed' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'AutoRedEye' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'AutoRotate' => { Description => 'Automatische Bilddrehung', PrintConv => { 'None' => 'Keine', 'Rotate 180' => '180° gedreht', 'Rotate 270 CW' => '90° gegen den Uhrzeigersinn', 'Rotate 90 CW' => '90° im Uhrzeigersinn', 'n/a' => '(nicht gesetzt)', }, }, 'AutoShadows' => 'Schatten Auto', 'AuxiliaryLens' => 'Vorsatzlinse', 'AvApertureSetting' => 'Av Blenden-Einstellung', 'AvSettingWithoutLens' => { Description => 'Blendeneinstellung ohne Objektiv', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', }, }, 'BWFilter' => 'S/W-Filter', 'BWMode' => { Description => 'Schwarz-Weiß Modus', PrintConv => { 'Off' => 'Aus', 'On' => 'An', }, }, 'BabyAge' => 'Kindesalter', 'BabyName' => 'Kindesname', 'BackLight' => 'Hintergrundbeleuchtung', 'BackgroundColor' => 'Hintergrundfarbe', 'BackgroundColorIndicator' => 'Indikator Hintergrundfarbe', 'BackgroundColorValue' => 'Hintergrundfarbwert', 'BackgroundTiling' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'BannerImageType' => { PrintConv => { 'None' => 'Keines', }, }, 'BaseExposureCompensation' => 'Basis-Belichtungskorrektur', 'BaseISO' => 'Basis-ISO', 'BaseName' => 'Basisname', 'BaseURL' => 'Basis URL', 'BaselineExposure' => 'Referenzbelichtung', 'BaselineExposureOffset' => 'Referenzbelichtung Abweichung', 'BaselineNoise' => 'Grundrauschen', 'BaselineSharpness' => 'Referenzschärfe', 'BatteryInfo' => 'Stromquelle', 'BatteryLevel' => 'Batteriestatus', 'BatteryOrder' => { Description => 'Akkureihenfolge', PrintConv => { 'Camera Battery First' => 'Zuerst Akku in der Kamera', 'MB-D10 First' => 'Zuerst Akkus im MB-D10', }, }, 'BatteryState' => { Description => 'Batteriestatus', PrintConv => { 'Almost full' => 'Fast Voll', 'Empty' => 'Leer', 'Full' => 'Voll', 'Half full' => 'Halb Voll', 'Low' => 'Niedrig', }, }, 'BayerGreenSplit' => 'Pixelaufteilung nach Bayer', 'BayerPattern' => 'Bayer Matrix', 'Beep' => { Description => 'Tonsignal', PrintConv => { 'High' => 'Hoch', 'Low' => 'Tief', 'Off' => 'Aus', 'On' => 'Ein', }, }, 'BestShotMode' => { Description => 'Bester Aufnahmemodus', PrintConv => { 'Autumn Leaves' => 'Herbstlaub', 'Baby CS' => 'Kleinkind', 'Backlight' => 'Hintergrundbeleuchtung', 'Beach' => 'Strand', 'Candlelight Portrait' => 'Kerzenlicht Porträt', 'Child CS' => 'Kinder', 'Children' => 'Kinder', 'Collection' => 'Sammlung', 'Fireworks' => 'Feuerwerk', 'Flower' => 'Blumen', 'Food' => 'Lebensmittel', 'For YouTube' => 'Für YouTube', 'For eBay' => 'Für eBay', 'High Sensitivity' => 'Hohe Empfindlichkeit', 'Natural Green' => 'Naturgrün', 'Night Scene' => 'Nachtszene', 'Night Scene Portrait' => 'Nacht-Porträt', 'People' => 'Menschen', 'Pet' => 'Haustiere', 'Pet CS' => 'Haustiere', 'Portrait' => 'Porträt', 'Silent' => 'Stillleben', 'Snow' => 'Schnee', 'Sports' => 'Sport', 'Sports CS' => 'Sport CS', 'Sundown' => 'Sonnenuntergang', 'Twilight' => 'Dämmerung', 'Underwater' => 'Unterwasser', }, }, 'BigImage' => 'Big Image Vorschaubild', 'BitDepth' => 'Bit-Tiefe', 'BitsPerSample' => 'Anzahl der Bits pro Komponente', 'BlackLevel' => 'Schwarzwert', 'BlackLevel2' => 'Schwarzwert 2', 'BlackLevelData' => 'Schwarzwert Daten', 'BlackLevelDeltaH' => 'Schwarzwert Delta H', 'BlackLevelDeltaV' => 'Schwarzwert Delta V', 'BlackPoint' => 'Schwarzpunkt', 'BlueAdjust' => 'Blau-Korrektur', 'BlueBalance' => 'Farbabgleich Blau', 'BlueHue' => 'Farbton Blau', 'BlueMatrixColumn' => 'Blau-Matrixspalte', 'BlueSaturation' => 'Sättigung Blau', 'BlueTRC' => 'Blau-Tonwertwiedergabe-Kurve', 'BlueX' => 'Blaupunkt X', 'BlueY' => 'Blaupunkt Y', 'BlurControl' => { Description => 'Bildstabilisierung', PrintConv => { 'High' => 'Hoch', 'Low' => 'Niedrig', 'Medium' => 'Mittel', 'Off' => 'Aus', }, }, 'BlurWarning' => { Description => 'Verwackelungswarnung', PrintConv => { 'Blur Warning' => 'Verwackelungswarnung', 'None' => 'Keine', }, }, 'BodyBatteryADLoad' => 'Kamerabatterie A/D unter Last', 'BodyBatteryADNoLoad' => 'Kamerabatterie A/D im Leerlauf', 'BodyBatteryState' => { Description => 'Kamerabatterie-Status', PrintConv => { 'Almost Empty' => 'Fast leer', 'Empty or Missing' => 'Leer oder nicht vorhanden', 'Full' => 'Voll geladen', 'Running Low' => 'Schwach', }, }, 'BodyFirmwareVersion' => 'Kamera-Firmware-Version', 'BracketMode' => { Description => 'Belichtungsreihen-Modus', PrintConv => { 'Off' => 'Aus', }, }, 'BracketSequence' => 'Belichtungsreihen-Abfolge', 'BracketShot' => 'Belichtungsreihen-Aufnahme', 'BracketShotNumber' => { Description => 'Belichtungsreihen-Bildnummer', PrintConv => { '1 of 2' => '1 von 2', '1 of 3' => '1 von 3', '1 of 5' => '1 von 5', '2 of 2' => '2 von 2', '2 of 3' => '2 von 3', '2 of 5' => '2 von 5', '3 of 3' => '3 von 3', '3 of 5' => '3 von 5', '4 of 5' => '4 von 5', '5 of 5' => '5 von 5', 'n/a' => '(nicht gesetzt)', }, }, 'BracketStep' => { Description => 'Belichtungsreihenschritte', PrintConv => { '1 EV' => '1 LW', '1/3 EV' => '1/3 LW', '2/3 EV' => '2/3 LW', }, }, 'BracketValue' => 'Belichtungsreihen-Wert', 'Brightness' => 'Helligkeit', 'BrightnessAdj' => 'Helligkeitskorrektur', 'BrightnessValue' => 'Helligkeit', 'BulbDuration' => 'Bulb-Dauer', 'BurstMode' => { Description => 'Burst Modus', PrintConv => { 'Auto Exposure Bracketing (AEB)' => 'Automatische Belichtungsreihe', 'Off' => 'Aus', 'On' => 'Ein', 'Unlimited' => 'Unbegrenzt', }, }, 'BurstMode2' => 'Burst Modus 2', 'BurstShot' => 'Burst Aufnahme', 'ButtonFunctionControlOff' => { Description => 'Tastenfunktion wenn Schnelleinstellrad OFF', PrintConv => { 'Disable main, Control, Multi-control' => 'Deaktiv Haupt-Wahlrad, Schnelleinstellrad, Multicontroller', 'Normal (enable)' => 'Normal (eingeschaltet)', }, }, 'By-line' => 'Ersteller', 'By-lineTitle' => 'Beruf des Erstellers', 'ByteOrder' => 'Bytereihenfolge', 'CCDSensitivity' => 'CCD Empfindlichkeit', 'CFALayout' => { Description => 'Farbfilter Anordnung', PrintConv => { 'Rectangular' => 'Rechteckig', }, }, 'CFAPattern' => 'Farbfiltermatrix', 'CFAPattern2' => 'Farbfiltermatrix 2', 'CFAPatternColumns' => 'Farbfiltermatrix Spalten', 'CFAPatternRows' => 'Farbfiltermatrix Zeilen', 'CFAPatternValues' => 'Farbfiltermatrix Werte', 'CFARepeatPatternDim' => 'Farbfiltermatrix-Größe', 'CLModeShootingSpeed' => 'Lowspeed-Bildrate', 'CMContrast' => 'CM Kontrast', 'CMExposureCompensation' => 'CM Belichtungskorrektur', 'CMHue' => 'CM Farbton', 'CMMFlags' => 'CMM-Flags', 'CMSaturation' => 'CM Farbsättigung', 'CMSharpness' => 'CM Schärfe', 'CMWhiteBalance' => 'CM Weißabgleich', 'CMWhiteBalanceComp' => 'CM Weißabgleichsausgleich', 'CMWhiteBalanceGrayPoint' => 'CM Weißabgleich Graupunkt', 'CPUArchitecture' => 'CPU Architektur', 'CPUByteOrder' => { Description => 'CPU Bytereihenfolge', PrintConv => { 'Big endian' => 'Big-endian', 'Little endian' => 'Little-endian', }, }, 'CPUCount' => 'Anzahl CPU', 'CPUFirmwareVersion' => 'CPU-Firmware-Version', 'CPUSubtype' => 'CPU Subtyp', 'CPUType' => { Description => 'CPU Typ', PrintConv => { 'Any' => 'Unbestimmt', 'None' => 'Unbestimmt', 'i860 big endian' => 'i860 big-endian', 'i860 little endian' => 'i860 little-endian', }, }, 'CalibrationIlluminant1' => { Description => 'Lichtquellenkalibrierung 1', PrintConv => { 'Cloudy' => 'Bewölkt', 'Cool White Fluorescent' => 'Neonlicht kaltweiß', 'Day White Fluorescent' => 'Neonlicht neutralweiß', 'Daylight' => 'Tageslicht', 'Daylight Fluorescent' => 'Neonlicht tageslichtweiß', 'Fine Weather' => 'Wolkenlos', 'Flash' => 'Blitz', 'Fluorescent' => 'Neonlicht', 'ISO Studio Tungsten' => 'ISO Studio-Kunstlicht (Glühbirne)', 'Other' => 'Andere Lichtquelle', 'Shade' => 'Schatten', 'Standard Light A' => 'Standard-Licht A', 'Standard Light B' => 'Standard-Licht B', 'Standard Light C' => 'Standard-Licht C', 'Tungsten (Incandescent)' => 'Kunstlicht (Glühbirne)', 'Unknown' => 'Unbekannt', 'Warm White Fluorescent' => 'Neonlicht warmweiß', 'White Fluorescent' => 'Neonlicht universalweiß', }, }, 'CalibrationIlluminant2' => { Description => 'Lichtquellenkalibrierung 2', PrintConv => { 'Cloudy' => 'Bewölkt', 'Cool White Fluorescent' => 'Neonlicht kaltweiß', 'Day White Fluorescent' => 'Neonlicht neutralweiß', 'Daylight' => 'Tageslicht', 'Daylight Fluorescent' => 'Neonlicht tageslichtweiß', 'Fine Weather' => 'Wolkenlos', 'Flash' => 'Blitz', 'Fluorescent' => 'Neonlicht', 'ISO Studio Tungsten' => 'ISO Studio-Kunstlicht (Glühbirne)', 'Other' => 'Andere Lichtquelle', 'Shade' => 'Schatten', 'Standard Light A' => 'Standard-Licht A', 'Standard Light B' => 'Standard-Licht B', 'Standard Light C' => 'Standard-Licht C', 'Tungsten (Incandescent)' => 'Kunstlicht (Glühbirne)', 'Unknown' => 'Unbekannt', 'Warm White Fluorescent' => 'Neonlicht warmweiß', 'White Fluorescent' => 'Neonlicht universalweiß', }, }, 'CameraBody' => 'Kamera Gehäuse', 'CameraByteOrder' => 'Kamera Bytereihenfolge', 'CameraCalibration1' => 'Kamerakalibrierung 1', 'CameraCalibration2' => 'Kamerakalibrierung 2', 'CameraColorCalibration01' => 'Kamera Farbkalibrierung 01', 'CameraColorCalibration02' => 'Kamera Farbkalibrierung 02', 'CameraColorCalibration03' => 'Kamera Farbkalibrierung 03', 'CameraColorCalibration04' => 'Kamera Farbkalibrierung 04', 'CameraColorCalibration05' => 'Kamera Farbkalibrierung 05', 'CameraColorCalibration06' => 'Kamera Farbkalibrierung 06', 'CameraColorCalibration07' => 'Kamera Farbkalibrierung 07', 'CameraColorCalibration08' => 'Kamera Farbkalibrierung 08', 'CameraColorCalibration09' => 'Kamera Farbkalibrierung 09', 'CameraColorCalibration10' => 'Kamera Farbkalibrierung 10', 'CameraColorCalibration11' => 'Kamera Farbkalibrierung 11', 'CameraColorCalibration12' => 'Kamera Farbkalibrierung 12', 'CameraColorCalibration13' => 'Kamera Farbkalibrierung 13', 'CameraColorCalibration14' => 'Kamera Farbkalibrierung 14', 'CameraColorCalibration15' => 'Kamera Farbkalibrierung 15', 'CameraID' => 'Kamera ID', 'CameraISO' => 'Kamera-ISO', 'CameraInfo' => 'Pentax-Modell', 'CameraInfoByteOrder' => 'Kamerainformation Bytereihenfolge', 'CameraModel' => 'Kamera Modell', 'CameraOrientation' => { Description => 'Ausrichtung der Kamera', PrintConv => { 'Downwards' => 'Abwärts', 'Rotate 180' => '180° gedreht', 'Rotate 270 CW' => '90° gegen den Uhrzeigersinn', 'Rotate 90 CW' => '90° im Uhrzeigersinn', 'Upwards' => 'Aufwärts', }, }, 'CameraProfile' => 'Kameraprofil', 'CameraProfileDigest' => 'Kennwert des Kameraprofils', 'CameraSerialNumber' => 'Kamera-Seriennummer', 'CameraSettings' => 'Kameraeinstellungen', 'CameraSettingsVersion' => 'Kameraeinstellungen-Version', 'CameraTemperature' => 'Kamera-Temperatur', 'CameraType' => { Description => 'Kameratyp', PrintConv => { 'Compact' => 'Kompakt', 'DV Camera' => 'DV Kamera', 'EOS High-end' => 'EOS Highend', 'EOS Mid-range' => 'EOS Mittelklasse', 'n/a' => '(nicht gesetzt)', }, }, 'CameraType2' => 'Kameratyp 2', 'CanonAFInfo' => 'AF-Info', 'CanonAFInfo2' => 'AF-Info (2)', 'CanonExposureMode' => { Description => 'Belichtungsmodus', PrintConv => { 'Aperture-priority AE' => 'Blendenpriorität', 'Bulb' => 'Bulb-Modus', 'Manual' => 'Manuell', 'Program AE' => 'Programmautomatik', 'Shutter speed priority AE' => 'Verschlusspriorität', }, }, 'CanonFileDescription' => 'Canon Dateibeschreibung', 'CanonFileInfo' => 'Dateiinformationen', 'CanonFileLength' => 'Dateilänge', 'CanonFirmwareVersion' => 'Firmware-Version', 'CanonFlashMode' => { Description => 'Blitz-Modus', PrintConv => { 'Auto' => 'Automatisch', 'External flash' => 'Externer Blitz', 'Off' => 'Aus', 'On' => 'Ein', 'Red-eye reduction' => 'Rote-Augen-Reduzierung', 'Red-eye reduction (Auto)' => 'Rote-Augen-Reduzierung (Automatisch)', 'Red-eye reduction (On)' => 'Rote-Augen-Reduzierung (Ein)', 'n/a' => '(nicht gesetzt)', }, }, 'CanonFocalLength' => 'Objektivart', 'CanonImageHeight' => 'Canon-Bildhöhe', 'CanonImageSize' => { Description => 'Canon-Bildgröße', PrintConv => { 'Large' => 'Groß', 'Medium' => 'Mittelgroß', 'Medium 1' => 'Mittelgroß 1', 'Medium 2' => 'Mittelgroß 2', 'Medium 3' => 'Mittelgroß 3', 'Medium Movie' => 'Mittelgroßer Film', 'Postcard' => 'Postkarte', 'Small' => 'Klein', 'Small 1' => 'Klein 1', 'Small 2' => 'Klein 2', 'Small 3' => 'Klein 3', 'Small Movie' => 'Kleiner Film', 'Widescreen' => 'Breitbild', }, }, 'CanonImageType' => 'Canon-Bildtyp', 'CanonImageWidth' => 'Canon-Bildbreite', 'CanonModelID' => 'Canon-Modell', 'Caption' => 'Bildtext', 'Caption-Abstract' => 'Beschreibung/Zusammenfassung', 'CaptionWriter' => 'Bildtextautor', 'CaptureXResolutionUnit' => { PrintConv => { 'um' => 'µm (Mikrometer)', }, }, 'CaptureYResolutionUnit' => { PrintConv => { 'um' => 'µm (Mikrometer)', }, }, 'CasioImageSize' => 'Casio Bildgröße', 'CatalogSets' => 'Katalogzusammenstellungen', 'Categories' => { Description => 'Kategorien', PrintConv => { 'People' => 'Menschen', 'Scenery' => 'Szene', }, }, 'Category' => 'Kategorie', 'CenterAFArea' => { Description => 'AF-Messfeldgröße', PrintConv => { 'Normal Zone' => 'Normal', 'Wide Zone' => 'Groß', }, }, 'CenterFocusPoint' => { Description => 'Fokuspunkt Mitte', PrintConv => { 'Normal Zone' => 'Normaler Bereich', 'Wide Zone' => 'Großer Bereich', }, }, 'CenterWeightedAreaSize' => { Description => 'Messfeldgröße', PrintConv => { 'Average' => 'Durchschnitt', }, }, 'Certificate' => 'Zertifikat', 'Channels' => 'Kanäle', 'Chapter' => 'Kapitel', 'CharacterSet' => 'Zeichensatz', 'Children' => 'Kinder', 'ChromaticAberration' => 'Farbabweichung', 'ChromaticAberrationB' => 'Farbabweichung B', 'ChromaticAberrationBlue' => 'Farbabweichung Blau', 'ChromaticAberrationCorr' => { Description => 'Farbabweichung Korrektur', PrintConv => { 'Off' => 'Aus', 'On' => 'An', }, }, 'ChromaticAberrationCorrection' => { Description => 'Farbabweichung Korrektur', PrintConv => { 'Off' => 'Aus', 'On' => 'An', }, }, 'ChromaticAberrationOn' => 'Farbabweichung An', 'ChromaticAberrationR' => 'Farbabweichung R', 'ChromaticAberrationRed' => 'Farbabweichung Rot', 'ChromaticAberrationSetting' => { Description => 'Farbabweichung Einstellung', PrintConv => { 'Off' => 'Aus', 'On' => 'An', }, }, 'Chromaticity' => 'Chromatizität', 'ChrominanceNR_TIFF_JPEG' => { PrintConv => { 'High' => 'Hoch', 'Low' => 'Leicht', 'Off' => 'Aus', }, }, 'ChrominanceNoiseReduction' => { PrintConv => { 'High' => 'Hoch', 'Low' => 'Leicht', 'Off' => 'Aus', }, }, 'CircleOfConfusion' => 'Unschärfekreis', 'City' => 'Stadt/Ort', 'ClassifyState' => 'Klassifizierungs-Status', 'CodePage' => { PrintConv => { 'Unicode UTF-16, big endian' => 'Unicode UTF-16, Big-endian', 'Unicode UTF-16, little endian' => 'Unicode UTF-16, Little-endian', 'Unicode UTF-32, big endian' => 'Unicode UTF-32, Big-endian', 'Unicode UTF-32, little endian' => 'Unicode UTF-32, Little-endian', }, }, 'CodedCharacterSet' => 'IPTC Characterset', 'CodedContentScanningKind' => { PrintConv => { 'Unknown' => 'Unbekannt', }, }, 'ColorAberrationControl' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ColorAdjustment' => 'Farbkorrektur', 'ColorAdjustmentMode' => { Description => 'Farbtonkorrektur Modus', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ColorBW' => 'Schwarz/Weiß', 'ColorBalance' => 'Farbabgleich', 'ColorBalance1' => 'Farbabgleich 1', 'ColorBalanceA' => 'Farbabgleich A', 'ColorBalanceAdj' => { Description => 'Farbabgleich Korrektur', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ColorBalanceBlue' => 'Farbbalance Blau', 'ColorBalanceGreen' => 'Farbbalance Grün', 'ColorBalanceRed' => 'Farbbalance Rot', 'ColorBitDepth' => 'Farbtiefe', 'ColorBoostType' => { PrintConv => { 'Nature' => 'Natur', 'People' => 'Menschen', }, }, 'ColorBooster' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ColorCompensationFilter' => 'Farbkorrektur-Filter', 'ColorComponents' => 'Anzahl der Bildkomponenten', 'ColorCorrection' => 'Farbkorrektur', 'ColorDataVersion' => 'Farbdaten Version', 'ColorEffect' => { Description => 'Farbeffekt', PrintConv => { 'Black & White' => 'Schwarz/Weiß', 'Cool' => 'Kühl', 'Off' => 'Aus', }, }, 'ColorFilter' => { Description => 'Farbfilter', PrintConv => { 'Black & White' => 'Schwarz/Weiß', 'Blue' => 'Blau', 'Green' => 'Grün', 'Off' => 'Aus', 'Purple' => 'Lila', 'Red' => 'Rot', 'Yellow' => 'Gelb', }, }, 'ColorHue' => 'Farbwiedergabe', 'ColorInfo' => 'Farb-Informationen', 'ColorMap' => 'Farbtafel', 'ColorMatrix' => 'Farb-Matrix', 'ColorMatrix1' => 'Farbmatrix 1', 'ColorMatrix2' => 'Farbmatrix 2', 'ColorMatrixNumber' => 'Farbmatrix Nummer', 'ColorMode' => { Description => 'Farbmodus', PrintConv => { 'Autumn' => 'Herbst', 'Autumn Leaves' => 'Herbstlaub', 'B & W' => 'S/W', 'B&W' => 'Schwarz/Weiß', 'B&W Red Filter' => 'Schwarz-Weiß Rotfilter', 'B&W Yellow Filter' => 'Schwarz-Weiß Gelbfilter', 'Black & White' => 'Schwarz/Weiß', 'Chrome' => 'Farbe', 'Clear' => 'Klar', 'Deep' => 'Tief', 'Duotone' => 'Zweiton', 'Evening' => 'Abends', 'Grayscale' => 'Graustufen', 'Indexed' => 'Indiziert', 'Indexed Color' => 'Indizierte Farben', 'Landscape' => 'Landschaft', 'Light' => 'Hell', 'Multichannel' => 'Mehrkanal', 'Natural' => 'Natürlich', 'Natural color' => 'Natürliche Farben', 'Natural sRGB' => 'Neutral sRGB', 'Natural+ sRGB' => 'Neutral+ sRGB', 'Night Portrait' => 'Nachtporträt', 'Night Scene' => 'Nachtszene', 'Night View' => 'Abendszene', 'Night View/Portrait' => 'Abendszene/Porträt', 'Off' => 'Aus', 'Portrait' => 'Porträt', 'RGB Color' => 'RGB Farbe', 'Solarization' => 'Solarisation', 'Sunset' => 'Sonnenuntergang', 'Vivid' => 'Lebhafte Farbe', 'Vivid color' => 'Lebhafte Farbe', 'n/a' => '(nicht gesetzt)', }, }, 'ColorMoireReduction' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ColorMoireReductionMode' => { PrintConv => { 'High' => 'Hoch', 'Low' => 'Leicht', 'Off' => 'Aus', }, }, 'ColorNoiseReduction' => 'Farbrauschunterdrückung', 'ColorNoiseReductionDetail' => 'Farbrauschunterdrückung Detail', 'ColorPalette' => 'Farbpalette', 'ColorPlanes' => 'Farbebenen', 'ColorProfile' => { Description => 'Farbprofil', PrintConv => { 'Embedded' => 'Eingebunden', 'Not Embedded' => 'Nicht eingebunden', }, }, 'ColorRepresentation' => 'Farbdarstellung', 'ColorReproduction' => 'Farbreproduktion', 'ColorSequence' => 'Farbreihenfolge', 'ColorSpace' => { Description => 'Farbraum', PrintConv => { 'B&W' => 'Schwarz/Weiß', 'ICC Profile' => 'ICC-Profil', 'Monochrome' => 'Monochrom', 'Natural sRGB' => 'Neutral sRGB', 'Natural+ sRGB' => 'Neutral+ sRGB', 'Uncalibrated' => 'Nicht festgelegt', 'Undefined' => 'Nicht definiert', }, }, 'ColorSpaceData' => 'Farbraum Daten', 'ColorTempAsShot' => 'Farbtemperatur Aufnahme', 'ColorTempAuto' => 'Farbtemperatur Auto', 'ColorTempCloudy' => 'Farbtemperatur Bewölkt', 'ColorTempCustom' => 'Farbtemperatur Benutzerdefiniert', 'ColorTempCustom1' => 'Farbtemperatur Benutzerdefiniert 1', 'ColorTempCustom2' => 'Farbtemperatur Benutzerdefiniert 2', 'ColorTempDaylight' => 'Farbtemperatur Tageslicht', 'ColorTempFlash' => 'Farbtemperatur Blitz', 'ColorTempFlashData' => 'Farbtemperatur Blitzdaten', 'ColorTempFluorescent' => 'Farbtemperatur Neonlicht', 'ColorTempKelvin' => 'Farbtemperatur Kelvin', 'ColorTempMeasured' => 'Farbtemperatur Messung', 'ColorTempPC1' => 'Farbtemperatur PC1', 'ColorTempPC2' => 'Farbtemperatur PC2', 'ColorTempPC3' => 'Farbtemperatur PC3', 'ColorTempShade' => 'Farbtemperatur Schatten', 'ColorTempTungsten' => 'Farbtemperatur Glühbirne', 'ColorTempUnknown' => 'Farbtemperatur Unbekannt', 'ColorTempUnknown10' => 'Farbtemperatur Unbekannt 10', 'ColorTempUnknown11' => 'Farbtemperatur Unbekannt 11', 'ColorTempUnknown12' => 'Farbtemperatur Unbekannt 12', 'ColorTempUnknown13' => 'Farbtemperatur Unbekannt 13', 'ColorTempUnknown14' => 'Farbtemperatur Unbekannt 14', 'ColorTempUnknown15' => 'Farbtemperatur Unbekannt 15', 'ColorTempUnknown16' => 'Farbtemperatur Unbekannt 16', 'ColorTempUnknown17' => 'Farbtemperatur Unbekannt 17', 'ColorTempUnknown18' => 'Farbtemperatur Unbekannt 18', 'ColorTempUnknown19' => 'Farbtemperatur Unbekannt 19', 'ColorTempUnknown2' => 'Farbtemperatur Unbekannt 2', 'ColorTempUnknown20' => 'Farbtemperatur Unbekannt 20', 'ColorTempUnknown3' => 'Farbtemperatur Unbekannt 3', 'ColorTempUnknown4' => 'Farbtemperatur Unbekannt 4', 'ColorTempUnknown5' => 'Farbtemperatur Unbekannt 5', 'ColorTempUnknown6' => 'Farbtemperatur Unbekannt 6', 'ColorTempUnknown7' => 'Farbtemperatur Unbekannt 7', 'ColorTempUnknown8' => 'Farbtemperatur Unbekannt 8', 'ColorTempUnknown9' => 'Farbtemperatur Unbekannt 9', 'ColorTemperature' => 'Farbtemperatur', 'ColorTemperatureAdj' => 'Farbtemperaturkorrektur', 'ColorTemperatureSetting' => { PrintConv => { 'Color Filter' => 'Farbfilter', }, }, 'ColorTone' => 'Farbton', 'ColorToneAdj' => 'Farbtonkorrektur', 'ColorToneFaithful' => { Description => 'Farbton Natürlich', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ColorToneLandscape' => { Description => 'Farbton Landschaft', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ColorToneMonochrome' => { PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ColorToneNeutral' => { Description => 'Farbton Neutral', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ColorTonePortrait' => { Description => 'Farbton Porträt', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ColorToneStandard' => { Description => 'Farbton Standard', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ColorToneUnknown' => { PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ColorToneUserDef1' => { Description => 'Farbton Benutzerdefiniert 1', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ColorToneUserDef2' => { Description => 'Farbton Benutzerdefiniert 2', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ColorToneUserDef3' => { Description => 'Farbton Benutzerdefiniert 3', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ColorTransform' => { Description => 'Farbtransformation', PrintConv => { 'Unknown (RGB or CMYK)' => 'Unbekannt (RGB oder CMYK)', }, }, 'ColorimetricReference' => 'Farbmetrische Referenz', 'CommandDials' => { Description => 'Einstellräder', PrintConv => { 'Reversed (Main Aperture, Sub Shutter)' => 'Vertauscht', 'Standard (Main Shutter, Sub Aperture)' => 'Standard', }, }, 'CommandDialsApertureSetting' => { Description => 'Einstellräder Blendeneinstellung', PrintConv => { 'Aperture Ring' => 'Mit Blendenring', 'Sub-command Dial' => 'Mit Einstellrad', }, }, 'CommandDialsChangeMainSub' => { Description => 'Einstellräder Funktionsbelegung', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'CommandDialsMenuAndPlayback' => { Description => 'Einstellräder Menüs und Wiedergabe', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'CommandDialsReverseRotation' => { Description => 'Einstellräder Auswahlrichtung', PrintConv => { 'No' => 'Standard', 'Yes' => 'Umgekehrt', }, }, 'CommanderChannel' => 'Master-Steuerung Kanal', 'CommanderGroupAManualOutput' => 'Master-Steuerung Gruppe A M Korr', 'CommanderGroupAMode' => { Description => 'Master-Steuerung Gruppe A Modus', PrintConv => { 'Auto Aperture' => 'Blendenautomatik (AA)', 'Manual' => 'Manuell', 'Off' => 'Aus', }, }, 'CommanderGroupA_TTL-AAComp' => 'Master-Steuerung Gruppe A TTL/AA Korr', 'CommanderGroupA_TTLComp' => 'Master-Steuerung Gruppe-A TTL-Korrektur', 'CommanderGroupBManualOutput' => 'Master-Steuerung Gruppe B M Korr', 'CommanderGroupBMode' => { Description => 'Master-Steuerung Gruppe B Modus', PrintConv => { 'Auto Aperture' => 'Blendenautomatik (AA)', 'Manual' => 'Manuell', 'Off' => 'Aus', }, }, 'CommanderGroupB_TTL-AAComp' => 'Master-Steuerung Gruppe B TTL/AA Korr', 'CommanderGroupB_TTLComp' => 'Master-Steuerung Gruppe-B TTL-Korrektur', 'CommanderInternalFlash' => { Description => 'Master-Steuerung Intgr. Blitz Modus', PrintConv => { 'Manual' => 'Manuell', 'Off' => 'Aus', }, }, 'CommanderInternalManualOutput' => 'Master-Steuerung Intgr. Blitz M Korr', 'CommanderInternalTTLComp' => 'Master-Steuerung Intgr. Blitz TTL Korr', 'Comment' => 'Kommentar', 'Comments' => 'Kommentare', 'Compilation' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'ComponentBitDepth' => 'Komponente Farbtiefe', 'ComponentsConfiguration' => 'Bedeutung jeder Komponente', 'CompressedBitsPerPixel' => 'Bildkomprimierungsmodus', 'CompressedImageSize' => 'Komprimierte Bildgröße', 'Compression' => { Description => 'Komprimierungsschema', PrintConv => { 'Bitfields' => 'Bitfelder', 'JBIG B&W' => 'JBIG Schwarz-Weiß', 'JBIG Color' => 'JBIG Farbe', 'JPEG' => 'JPEG-Komprimierung', 'JPEG (old-style)' => 'JPEG (alte Version)', 'Kodak DCR Compressed' => 'Kodak DCR-Komprimierung', 'Kodak KDC Compressed' => 'Kodak KDC-Komprimierung', 'Next' => 'NeXT 2-Bit Kodierung', 'Nikon NEF Compressed' => 'Nikon NEF-Komprimierung', 'None' => 'Keines', 'PNG' => 'PNG-Komprimierung', 'Pentax PEF Compressed' => 'Pentax PEF-Komprimierung', 'SGILog' => 'SGI 32-Bit Log Luminance Kodierung', 'SGILog24' => 'SGI 24-Bit Log Luminance Kodierung', 'Sony ARW Compressed' => 'Sony ARW-Komprimierung', 'Thunderscan' => 'ThunderScan 4-Bit Kodierung', 'Uncompressed' => 'Nicht komprimiert', }, }, 'CompressionFactor' => 'Komprimierungsfaktor', 'CompressionLevel' => 'Komprimierungsgrad', 'CompressionRatio' => 'Komprimierungsrate', 'CompressionType' => { Description => 'Komprimierungsschema', PrintConv => { 'Little-endian, no compression' => 'Little-endian, keine Komprimierung', 'None' => 'Keines', }, }, 'ConditionalFEC' => 'Blitzbelichtungskorrektur', 'ConnectionSpaceIlluminant' => 'Weißpunkt des Verbindungsfarbraums', 'ConstrainedCropHeight' => 'Crop erzeugte Höhe', 'ConstrainedCropWidth' => 'Crop erzeugte Breite', 'Contact' => 'Kontakt', 'ContentLocationCode' => 'Inhaltspositionscode', 'ContentLocationName' => 'Inhaltspositionsname', 'ContinuousBracketing' => { Description => 'Serienbild-Belichtungsreihe', PrintConv => { 'High' => 'Hoch', 'Low' => 'Niedrig', }, }, 'ContinuousDrive' => { Description => 'Aufnahme-Modus', PrintConv => { 'Continuous' => 'Serienaufnahme', 'Movie' => 'Filmen', 'Silent Single' => 'Stillleben', 'Single' => 'Einzelbild', }, }, 'ContinuousShootingSpeed' => { Description => 'Geschwindigkeit Reihenaufnahmen', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', }, }, 'ContinuousShotLimit' => { Description => 'Limit Anzahl Reihenaufnahmen', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', }, }, 'Contrast' => { Description => 'Kontrast', PrintConv => { '+1 (med high)' => '+1 (Leicht erhöht)', '+2 (high)' => '+2 (Stark)', '+3 (very high)' => '+3 (Sehr hoch)', '-1 (med low)' => '-1 (Leicht verringert)', '-2 (low)' => '-2 (Leicht)', '-3 (very low)' => '-3 (Sehr gering)', 'Film Simulation' => 'Film-Simulation', 'High' => 'Stark', 'Low' => 'Leicht', 'Med High' => 'Leicht erhöht', 'Med Low' => 'Leicht verringert', 'Medium High' => 'Mittel-Hoch', 'Medium Low' => 'Mittel-Gering', 'Very High' => 'Sehr hoch', 'Very Low' => 'Sehr gering', 'n/a' => '(nicht gesetzt)', }, }, 'Contrast2012' => 'Kontrast 2012', 'ContrastAdj' => 'Kontrastkorrektur', 'ContrastAdjustment' => 'Kontrastkorrektur', 'ContrastCurve' => 'Kontrast-Kurve', 'ContrastDetectAFArea' => 'AF-Bereich Kontrast gesteuert', 'ContrastFaithful' => { Description => 'Kontrast Natürlich', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ContrastHighlightShadowAdj' => { Description => 'Kontrast helle Stellen', PrintConv => { 'Off' => 'Aus', 'On' => 'An', }, }, 'ContrastLandscape' => { Description => 'Kontrast Landschaft', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ContrastMode' => { Description => 'Kontrast Modus', PrintConv => { 'High' => 'Hoch', 'High Dynamic' => 'Hoch dynamisch', 'Low' => 'Niedrig', 'Low Key' => 'Low-Key', 'Medium High' => 'Mitte hoch', 'Medium Low' => 'Mitte niedrig', }, }, 'ContrastMonochrome' => { Description => 'Kontrast Monochrom', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ContrastNeutral' => { Description => 'Kontrast Neutral', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ContrastPortrait' => { Description => 'Kontrast Porträt', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ContrastSetting' => 'Kontrasteinstellung', 'ContrastShadow' => 'Kontrast dunkle Stellen', 'ContrastStandard' => { Description => 'Kontrast Standard', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ContrastUnknown' => { PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ContrastUserDef1' => { Description => 'Kontrast Benutzerdefiniert 1', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ContrastUserDef2' => { Description => 'Kontrast Benutzerdefiniert 2', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ContrastUserDef3' => { Description => 'Kontrast Benutzerdefiniert 3', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'Contributor' => 'Mitwirkender', 'Contributors' => 'Mitwirkende', 'ControlDialSet' => { PrintConv => { 'Aperture' => 'Blende', 'Shutter Speed' => 'Belichtungszeit', }, }, 'ControlMode' => { Description => 'Steuerungsmethode', PrintConv => { 'Camera Local Control' => 'Lokale Kamerasteuerung', 'Computer Remote Control' => 'Kamerasteuerung per Computer', 'n/a' => '(nicht gesetzt)', }, }, 'ConversionLens' => { Description => 'Vorsatzlinse', PrintConv => { 'Macro' => 'Makro', 'Off' => 'Aus', 'Telephoto' => 'Tele', }, }, 'Converter' => 'Konverter', 'Copyright' => 'Urheberrechtsvermerk', 'CopyrightNotice' => 'Urheberrechtsvermerk', 'CopyrightStatus' => { PrintConv => { 'Unknown' => 'Unbekannt', }, }, 'CoringValues' => 'Coring Werte', 'Country' => 'Staat', 'Country-PrimaryLocationCode' => 'ISO-Landescode', 'Country-PrimaryLocationName' => 'Staat', 'CountryCode' => 'Länderkennzeichen', 'Coverage' => 'Anwendungsbereich', 'CreateDate' => 'Digitalisierungsdatum/-uhrzeit', 'CreationDate' => 'Aufnahmedatum', 'CreativeStyle' => { Description => 'Kreativmodus', PrintConv => { 'Autumn' => 'Herbst', 'Autumn Leaves' => 'Herbstlaub', 'B&W' => 'Schwarz/Weiß', 'Clear' => 'Klar', 'Deep' => 'Tief', 'Landscape' => 'Landschaft', 'Light' => 'Hell', 'Night View/Portrait' => 'Abendszene/Porträt', 'Portrait' => 'Porträt', 'Sunset' => 'Sonnenuntergang', 'Vivid' => 'Lebhafte Farbe', }, }, 'CreativeStyleSetting' => { PrintConv => { 'B&W' => 'Schwarz/Weiß', 'Landscape' => 'Landschaft', 'Portrait' => 'Porträt', 'Sunset' => 'Sonnenuntergang', }, }, 'Creator' => 'Ersteller', 'CreatorAddress' => 'Ersteller - Adresse', 'CreatorAppID' => { Description => 'Ersteller App ID', PrintConv => { 'Unknown' => 'Unbekannt', }, }, 'CreatorAppVersion' => 'Ersteller App Version', 'CreatorApplication' => 'Ersteller der Applikation', 'CreatorCity' => 'Ersteller - Ort', 'CreatorContactInfo' => 'Ersteller Kontaktinfo', 'CreatorCountry' => 'Ersteller - Land', 'CreatorPostalCode' => 'Ersteller - PLZ', 'CreatorRegion' => 'Ersteller - Staat/Provinz', 'CreatorTool' => 'Erzeugertool', 'CreatorWorkEmail' => 'Ersteller - E-Mail', 'CreatorWorkTelephone' => 'Ersteller - Telefon', 'CreatorWorkURL' => 'Ersteller - Webseite(n)', 'Credit' => 'Anbieter', 'CropActive' => { Description => 'Crop aktiviert', PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'CropAngle' => 'Crop Winkel', 'CropAspectRatio' => { Description => 'Crop Bildformat', PrintConv => { 'A-size Landscape' => 'DIN A Querformat', 'A-size Portrait' => 'DIN A Hochformat', 'Circle' => 'Kreis', 'Custom' => 'Benutzerdefiniert', 'Free' => 'Frei', 'Letter-size Landscape' => 'Letter Querformat', 'Letter-size Portrait' => 'Letter Querformat', }, }, 'CropBottom' => 'Crop Unten', 'CropBottomMargin' => 'Crop Rand Unten', 'CropCircleActive' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'CropHeight' => 'Crop Höhe', 'CropHiSpeed' => 'Highspeed-Bildformat', 'CropLeft' => 'Crop Links', 'CropLeftMargin' => 'Crop Rand Links', 'CropRight' => 'Crop Rechts', 'CropRightMargin' => 'Crop Rand Rechts', 'CropRotation' => 'Crop Drehung', 'CropTop' => 'Crop Oben', 'CropTopMargin' => 'Crop Rand Oben', 'CropUnit' => { Description => 'Crop Einheit', PrintConv => { 'inches' => 'Inch', 'pixels' => 'Pixel', }, }, 'CropUnits' => { Description => 'Crop Einheiten', PrintConv => { 'inches' => 'Inch', 'pixels' => 'Pixel', }, }, 'CropWidth' => 'Crop Breite', 'CroppedImageHeight' => 'Crop Bildhöhe', 'CroppedImageLeft' => 'Crop Bildanfang Links', 'CroppedImageTop' => 'Crop Bildanfang Oben', 'CroppedImageWidth' => 'Crop Bildbreite', 'CurrentICCProfile' => 'Aktuelles ICC-Profile', 'CurrentIPTCDigest' => 'Aktueller IPTC Kennwert', 'Curves' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'Custom1' => 'Benutzerdefiniert 1', 'Custom2' => 'Benutzerdefiniert 2', 'Custom3' => 'Benutzerdefiniert 3', 'Custom4' => 'Benutzerdefiniert 4', 'CustomLinear' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'CustomPictureStyleFileName' => 'Benutzer-Bildstil Dateiname', 'CustomRendered' => { Description => 'Benutzerdefinierte Bildverarbeitung', PrintConv => { 'Custom' => 'Benutzerdefinierter Prozess', 'Normal' => 'Standard-Prozess', }, }, 'D-LightingHQ' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'D-LightingHQSelected' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'D-LightingHS' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'D-RangeOptimizerMode' => { PrintConv => { 'Manual' => 'Manuell', 'Off' => 'Aus', }, }, 'DECPosition' => { Description => 'DEC-Position', PrintConv => { 'Contrast' => 'Kontrast', 'Exposure' => 'Belichtung', 'Saturation' => 'Sättigung', }, }, 'DLOOn' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'DNGBackwardVersion' => 'DNG Versionskompatibilität', 'DNGLensInfo' => 'DNG Objektiv-Informationen', 'DNGVersion' => 'DNG-Version', 'DOF' => 'Schärfentiefe', 'DSPFirmwareVersion' => 'DSP-Firmware-Version', 'DataCompressionMethod' => 'Daten Komprimierungsmethode', 'DataDump' => 'Daten-Dump', 'DataDump2' => 'Daten-Dump 2', 'DataImprint' => { Description => 'Daten-Einblendung', PrintConv => { 'MM/DD/HH:MM' => 'MM/TT/SS:MM', 'None' => 'Keine', 'YYYY/MM/DD' => 'JJJJ/MM/TT', }, }, 'DataLength' => 'Datenlänge', 'Date' => 'Datum', 'DateCreated' => 'Erstellungsdatum', 'DateDisplayFormat' => { Description => 'Datumsformat', PrintConv => { 'D/M/Y' => 'Tag/Monat/Jahr', 'M/D/Y' => 'Monat/Tag/Jahr', 'Y/M/D' => 'Jahr/Monat/Tag', }, }, 'DateSent' => 'Absendedatum', 'DateStampMode' => { Description => 'Zeitstempel-Modus', PrintConv => { 'Date' => 'Datum', 'Off' => 'Aus', }, }, 'DateTime' => 'Änderungsdatum', 'DateTimeCreated' => 'Erstellungsdatum/-uhrzeit', 'DateTimeDigitized' => 'Datum/Uhrzeit der Digitalisierung', 'DateTimeOriginal' => 'Erstellungsdatum/-uhrzeit', 'DateTimeStamp' => 'Datum Uhrzeitangabe', 'DaylightSavings' => { Description => 'Sommerzeit', PrintConv => { 'No' => 'Aus', 'Yes' => 'Ein', }, }, 'Declination' => 'Deklination', 'DefaultCropOrigin' => 'System-Crop Beginn', 'DefaultCropSize' => 'System-Crop Größe', 'DefaultDisplayHeight' => 'Default Anzeigehöhe', 'DefaultDisplayWidth' => 'Default Anzeigebreite', 'DefaultEraseOption' => { Description => 'System-Löscheinstellung', PrintConv => { 'Cancel selected' => 'Abbruch', 'Erase selected' => 'Löschen', }, }, 'DefaultImageColor' => 'System-Bildfarbe', 'DefaultScale' => 'Systemmaß', 'DeletedImageCount' => 'Anzahl gelöschter Bilder', 'Description' => 'Beschreibung', 'Destination' => 'Ziel', 'DestinationCity' => 'Zielort', 'DestinationCityCode' => 'Zielort-Code', 'DestinationDST' => { Description => 'Zielort Sommerzeit (DST)', PrintConv => { 'No' => 'Deaktiviert', 'Yes' => 'Aktiviert', }, }, 'DevelopmentDynamicRange' => 'Dynamikbereich Entwicklung', 'DeviceAttributes' => 'Geräte-Eigenschaften', 'DeviceManufacturer' => 'Gerätehersteller', 'DeviceMfgDesc' => 'Gerätehersteller-Bezeichnung', 'DeviceModel' => 'Geräte-Modell', 'DeviceModelDesc' => 'Geräte-Modell-Bezeichnung', 'DeviceSettingDescription' => 'Geräteeinstellung', 'DialDirectionTvAv' => { Description => 'Drehung Wählrad bei Tv/Av', PrintConv => { 'Reversed' => 'Umgekehrt', }, }, 'DigitalCreationDate' => 'Digitalisierungsdatum', 'DigitalCreationDateTime' => 'Digitalisierungsdatum/-uhrzeit', 'DigitalCreationTime' => 'Digitalisierungszeit', 'DigitalFilter01' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter02' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter03' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter04' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter05' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter06' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter07' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter08' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter09' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter10' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter11' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter12' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter13' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter14' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter15' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter16' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter17' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter18' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter19' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalFilter20' => { PrintConv => { 'Color Filter' => 'Farbfilter', 'Fisheye' => 'Fischauge', 'High Contrast' => 'Hoher Kontrast', }, }, 'DigitalGain' => 'Digitale Verstärkung', 'DigitalZoom' => { Description => 'Digital-Zoom', PrintConv => { 'Electronic magnification' => 'Elektronische Vergrößerung', 'None' => 'Kein', 'Off' => 'Aus', 'Other' => 'Unbekannt', }, }, 'DigitalZoomOn' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'DigitalZoomRatio' => 'Digitaler Zoom-Faktor', 'Directory' => 'Verzeichnis', 'DirectoryIndex' => 'Verzeichnis-Index', 'DirectoryNumber' => 'Ordner-Nummer', 'Disclaimer' => 'Haftungsbeschränkung', 'DisplayAllAFPoints' => { Description => 'Anzeige aller AF-Punkte', PrintConv => { 'Disable' => 'Deaktiviert', 'Enable' => 'Aktiviert', }, }, 'DisplayAperture' => 'Angezeigte Blende', 'DisplayHeight' => 'Anzeigehöhe', 'DisplayUnit' => { PrintConv => { 'Pixels' => 'Pixel', 'inches' => 'Inch', }, }, 'DisplayUnits' => { Description => 'Anzeigeeinheit', PrintConv => { 'inches' => 'Inch', 'meters' => 'Meter', }, }, 'DisplayXResolutionUnit' => { PrintConv => { 'um' => 'µm (Mikrometer)', }, }, 'DisplayYResolutionUnit' => { PrintConv => { 'um' => 'µm (Mikrometer)', }, }, 'DisplayedUnitsX' => { Description => 'Einheit der horiz. Auflösung', PrintConv => { 'inches' => 'Inch', }, }, 'DisplayedUnitsY' => { Description => 'Einheit der vert. Auflösung', PrintConv => { 'inches' => 'Inch', }, }, 'DistortionControl' => { Description => 'Verzeichnungskontrolle', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'DistortionCorrection' => { Description => 'Verzeichnungskorrektur', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', 'n/a' => '(nicht gesetzt)', }, }, 'DistortionCorrection2' => { Description => 'Verzeichnungskorrektur 2', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'DistortionCorrectionOn' => 'Verzeichnungskorrektur An', 'DistortionN' => 'Verzeichnung N', 'DistortionParam02' => 'Verzeichnungsparameter 02', 'DistortionParam04' => 'Verzeichnungsparameter 04', 'DistortionParam08' => 'Verzeichnungsparameter 08', 'DistortionParam09' => 'Verzeichnungsparameter 09', 'DistortionParam11' => 'Verzeichnungsparameter 11', 'DistortionScale' => 'Verzeichnungsausmaß', 'DistortionVersion' => 'Verzeichnung Version', 'DjVuVersion' => 'DjVu-Version', 'DocSecurity' => { Description => 'Dokumentensicherheit', PrintConv => { 'Locked for annotations' => 'Gesperrt für Anmerkungen', 'None' => 'Keine', 'Password protected' => 'Passwort geschützt', 'Read-only enforced' => 'Nur Lesen - erzwungen', 'Read-only recommended' => 'Nur Lesen - vorgeschlagen', }, }, 'Document' => 'Dokument', 'DocumentHistory' => 'Historie des Dokuments', 'DocumentName' => 'Dokumentenname', 'DocumentNotes' => 'Notizen zum Dokument', 'DriveMode' => { Description => 'Aufnahmeart', PrintConv => { '10 s Timer' => 'Selbstauslöser 10 s', '2 s Timer' => 'Selbstauslöser 2 s', 'Auto Bracket' => 'Belichtungsreihe', 'Bracketing' => 'Belichtungsreihe', 'Continuous' => 'Serienaufnahme', 'Continuous (Lo)' => 'Serienaufnahme (Niedrig)', 'Continuous Bracketing' => 'Serienbild-Belichtungsreihe', 'Continuous Exposure Bracketing' => 'Serienaufnahme Belichtungsreihe', 'Continuous High' => 'Serienaufnahme (Hi)', 'Continuous Low' => 'Serienaufnahme Niedrig', 'Continuous Shooting' => 'Serienaufnahme', 'HS continuous' => 'High-Speed Serienbild', 'Mirror Lock-up' => 'Spiegel hochgeklappt', 'Multi Shot' => 'Serienaufnahme', 'Multiple Exposure' => 'Mehrfachbelichtung', 'No Timer' => 'Ohne Selbstauslöser', 'Off' => 'Aus', 'Remote Control' => 'Fernauslöser', 'Remote Control (3 s delay)' => 'Fernauslöser (3 Sek. Verzögerung)', 'Self-Timer 2 sec' => 'Selbstauslöser 2 s', 'Self-timer' => 'Selbstauslöser', 'Self-timer (12 s)' => 'Selbstauslöser (12 Sek.)', 'Self-timer (2 s)' => 'Selbstauslöser (2 Sek.)', 'Self-timer 10 sec' => 'Selbstauslöser 10 s', 'Self-timer 2 sec, Mirror Lock-up' => 'Selbstauslöser 2 s, Spiegel hochgeklappt', 'Self-timer Operation' => 'Selbstauslöser', 'Shutter Button' => 'Kamera-Auslöser', 'Single' => 'Einzelbild', 'Single Exposure' => 'Einzelbelichtung', 'Single Frame' => 'Einzelbild', 'Single Shot' => 'Einzelbild', 'Single-Frame Bracketing' => 'Einzelbild-Belichtungsreihe', 'Single-frame' => 'Einzelbild', 'Single-frame Bracketing' => 'Einzelbild-Belichtungsreihe', 'Single-frame Exposure Bracketing' => 'Einzelbild Belichtungsreihe', 'Single-frame Shooting' => 'Einzelbild', 'UHS continuous' => 'Ultra High-Speed Serienbild', 'White Balance Bracketing' => 'Weißabgleichs-Belichtungsreihe', 'White Balance Bracketing High' => 'Weißabgleich-Belichtungsreihe Hoch', 'White Balance Bracketing Low' => 'Weißabgleich-Belichtungsreihe Niedrig', 'n/a' => '(nicht gesetzt)', }, }, 'DriveMode2' => { Description => 'Mehrfachbelichtung', PrintConv => { 'Continous Bracketing Low' => 'Serienaufnahme Belichtungsreihe Niedrig', 'Continuous' => 'Serienaufnahme', 'Continuous (Lo)' => 'Serienaufnahme (Niedrig)', 'Continuous Bracketing' => 'Serienaufnahme Belichtungsreihe', 'Continuous Bracketing 0.3 EV' => 'Serienaufnahme Belichtungsreihe 0.3 EV', 'Continuous Bracketing 0.7 EV' => 'Serienaufnahme Belichtungsreihe 0.7 EV', 'Continuous Bracketing High' => 'Serienaufnahme Belichtungsreihe Hoch', 'Continuous High' => 'Serienaufnahme Hoch', 'Continuous Low' => 'Serienaufnahme Niedrig', 'Exposure Bracket' => 'Belichtungsreihe', 'Mirror Lock-up' => 'Spiegel hochgeklappt', 'Multiple Exposure' => 'Mehrfachbelichtung', 'Remote Control' => 'Fernauslöser', 'Remote Control (3 s delay)' => 'Fernauslöser (3 s verzögert)', 'Self-timer (12 s)' => 'Selbstauslöser (12 s)', 'Self-timer (2 s)' => 'Selbstauslöser (2 s)', 'Self-timer 10 sec' => 'Selbstauslöser 10 s', 'Self-timer 2 sec' => 'Selbstauslöser 2 s', 'Self-timer 2 sec, Mirror Lock-up' => 'Selbstauslöser 2 s, Spiegel hochgeklappt', 'Single Frame' => 'Einzelbild', 'Single-frame' => 'Einzelbildaufnahme', 'Single-frame Bracketing' => 'Einzelbild Belichtungsreihe', 'Single-frame Bracketing High' => 'Einzelbild Belichtungsreihe Hoch', 'Single-frame Bracketing Low' => 'Einzelbild Belichtungsreihe Niedrig', 'White Balance Bracketing High' => 'Weißabgleich Belichtungsreihe Hoch', 'White Balance Bracketing Low' => 'Weißabgleich Belichtungsreihe Niedrig', }, }, 'DriveModeSetting' => { Description => 'Aufnahmeart Einstellung', PrintConv => { 'Continuous High' => 'Serienaufnahme Hoch', 'Continuous Low' => 'Serienaufnahme Niedrig', 'Self-timer 10 sec' => 'Selbstauslöser 10 s', 'Self-timer 2 sec, Mirror Lock-up' => 'Selbstauslöser 2 s, Spiegel hochgeklappt', 'Single Frame' => 'Einzelbild', }, }, 'DriveType' => { PrintConv => { 'Unknown' => 'Unbekannt', }, }, 'Duration' => 'Dauer', 'DustRemovalData' => 'Dunstentfernungsdaten', 'DynamicAFArea' => { Description => 'Dynamisches AF-Messfeld', PrintConv => { '21 Points' => '21 Messfelder', '51 Points' => '51 Messfelder', '51 Points (3D-tracking)' => '51 Messfelder (3D-Tracking)', '9 Points' => '9 Messfelder', }, }, 'DynamicRange' => { Description => 'Dynamikbereich', PrintConv => { 'Wide' => 'Weit', }, }, 'DynamicRangeExpansion' => { Description => 'Dynamikbereich-Erweiterung', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'DynamicRangeOptimizer' => { Description => 'Dynamikbereich-Optimierung', PrintConv => { 'Advanced Auto' => 'Erw. Automatik', 'Advanced Lv1' => 'Erw. Stufe 1', 'Advanced Lv2' => 'Erw. Stufe 2', 'Advanced Lv3' => 'Erw. Stufe 3', 'Advanced Lv4' => 'Erw. Stufe 4', 'Advanced Lv5' => 'Erw. Stufe 5', 'Auto' => 'Automatisch', 'Off' => 'Aus', }, }, 'DynamicRangeOptimizerBracket' => { PrintConv => { 'High' => 'Hoch', 'Low' => 'Niedrig', 'Off' => 'Aus', }, }, 'DynamicRangeOptimizerMode' => { PrintConv => { 'Off' => 'Aus', }, }, 'DynamicRangeSetting' => { Description => 'Dynamikbereich-Einstellungen', PrintConv => { 'Film Simulation' => 'Film-Simulation', 'Wide1 (230%)' => 'Weit1 (230%)', 'Wide2 (400%)' => 'Weit2 (400%)', }, }, 'E-DialInProgram' => { PrintConv => { 'Tv or Av' => 'Tv oder Av', }, }, 'ETTLII' => { PrintConv => { 'Average' => 'Integralmessung', 'Evaluative' => 'Mehrfeldmessung', }, }, 'EVStepInfo' => 'EV-Schritte Information', 'EVStepSize' => { Description => 'Belichtungswerte', PrintConv => { '1/2 EV' => '1/2 LW', '1/3 EV' => '1/3 LW', }, }, 'EVSteps' => { Description => 'LW-Schritte', PrintConv => { '1/2 EV Steps' => '1/2 LW-Schritte', '1/3 EV Steps' => '1/3 LW-Schritte', }, }, 'EasyExposureComp' => 'Easy Belichtungskorrektur', 'EasyExposureCompensation' => { Description => 'Easy Belichtungskorrektur', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', 'On (auto reset)' => 'Einstellrad (Reset)', }, }, 'EasyMode' => { Description => 'Easy-Modus', PrintConv => { 'Beach' => 'Strand', 'Black & White' => 'Schwarz/Weiß', 'Blur Reduction' => 'Unschärfereduktion', 'Color Accent' => 'Farbton', 'Color Swap' => 'Farbwechsel', 'Digital Macro' => 'Digitales Makro', 'Fireworks' => 'Feuerwerk', 'Foliage' => 'Laub', 'Full auto' => 'Vollautomatisch', 'Indoor' => 'Innenaufnahme', 'Kids & Pets' => 'Kinder & Tiere', 'Landscape' => 'Landschaft', 'Live View Control' => 'Live View Kontrolle', 'Low Light' => 'Wenig Licht', 'Low Light 2' => 'Wenig Licht 2', 'Macro' => 'Makro', 'Manual' => 'Manuell', 'Night' => 'Nachtszene', 'Night Scene' => 'Nachtszene', 'Night Snapshot' => 'Nacht Schnappschuss', 'Pan focus' => 'Pan Fokus', 'Portrait' => 'Porträt', 'Snow' => 'Schnee', 'Sports' => 'Sport', 'Sunset' => 'Sonnenuntergang', 'Super Macro' => 'Super-Makro', 'Super Macro 2' => 'Super Makro 2', 'Underwater' => 'Unterwasser', 'Zoom Blur' => 'Zoom Unschärfe', }, }, 'EdgeNoiseReduction' => { Description => 'Rauschunterdrückung Ecken', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'EditStatus' => 'Bearbeitungsstatus', 'Edition' => 'Ausgabe', 'EditorialUpdate' => 'Redaktionelle Überarbeitung', 'EffectiveLV' => 'Effektiver LW', 'EffectiveMaxAperture' => 'Effektiv größte Blende', 'Email' => 'E-Mail', 'EmbeddedImage' => 'Eingebettetes Bild', 'EmbeddedImageByteOrder' => 'Eingebettetes Bild Bytereihenfolge', 'EmbeddedImageHeight' => 'Eingebettetes Bild Bildhöhe', 'EmbeddedImageType' => 'Eingebettetes Bild Bildtyp', 'EmbeddedImageWidth' => 'Eingebettetes Bild Bildbreite', 'Emphasis' => { PrintConv => { 'None' => 'Keine', 'reserved' => 'reserviert', }, }, 'Encoding' => { PrintConv => { 'Unknown -' => 'Unbekannt -', }, }, 'EncodingProcess' => 'JPEG-Kodierung Prozess', 'Encryption' => 'Verschlüsselung', 'EnhanceDarkTones' => { Description => 'Dunkle Stellen aufhellen', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'Enhancement' => { PrintConv => { 'Blue' => 'Blau', 'Green' => 'Grün', 'Off' => 'Aus', 'Red' => 'Rot', 'Underwater' => 'Unterwasser', }, }, 'EnvelopePriority' => { Description => 'Priorität', PrintConv => { '0 (reserved)' => '0 (reserviert)', '1 (most urgent)' => '1 (sehr dringend)', '5 (normal urgency)' => '5 (normale Dringlichkeit)', '8 (least urgent)' => '8 (geringe Wichtigkeit)', '9 (user-defined priority)' => '9 (benutzerdefinierte Priorität)', }, }, 'EnvelopeRecordVersion' => 'IPTC-Modell-1-Version', 'EpsonImageHeight' => 'Epson-Bildhöhe', 'EpsonImageWidth' => 'Epson-Bildbreite', 'Equipment' => 'Equipment-IFD-Zeiger', 'EquipmentVersion' => 'Equipment-Version', 'Error' => 'Fehler', 'ExifByteOrder' => 'Exif Byte-Reihenfolge', 'ExifCameraInfo' => 'Exif Kamerainformationen', 'ExifImageHeight' => 'Exif-Bildhöhe', 'ExifImageWidth' => 'Exif-Bildbreite', 'ExifOffset' => 'Exif IFD-Zeiger', 'ExifToolVersion' => 'ExifTool-Version', 'ExifUnicodeByteOrder' => 'Exif Unicode Byte-Reihenfolge', 'ExifVersion' => 'Exif-Version', 'ExitPupilPosition' => 'Austrittspupillenposition', 'ExpandFilm' => 'Erweitert Film', 'ExpandFilterLens' => 'Erweitert Filterlinse', 'ExpandFlashLamp' => 'Erweitert Blitzlicht', 'ExpandLens' => 'Erweitert Objektiv', 'ExpandScanner' => 'Erweitert Scanner', 'ExpandSoftware' => 'Erweitert Software', 'ExpirationDate' => 'Ablaufdatum', 'ExpirationTime' => 'Ablaufzeit', 'Exposure' => 'Belichtung', 'Exposure2012' => 'Belichtung 2012', 'ExposureAdj' => 'Belichtungskorrektur', 'ExposureAdj2' => 'Belichtungskorrektur 2', 'ExposureAdjust' => 'Belichtungskorrektur', 'ExposureBias' => 'Belichtungskorrekturwert', 'ExposureBracketShotNumber' => 'Belichtungsreihen-Bildnummer', 'ExposureBracketStepSize' => 'Belichtungsreihen-Stufenabstand', 'ExposureBracketValue' => 'Belichtungsreihenwert', 'ExposureCompStepSize' => { Description => 'Belichtungskorrekturstufe', PrintConv => { '1 EV' => '1 LW', '1/2 EV' => '1/2 LW', '1/3 EV' => '1/3 LW', }, }, 'ExposureCompensation' => 'Belichtungskorrektur', 'ExposureCompensation2' => 'Belichtungskorrektur 2', 'ExposureCompensationMode' => 'Belichtungskorrekturmodus', 'ExposureControlStepSize' => { Description => 'Belichtungswert', PrintConv => { '1 EV' => '1 LW', '1/2 EV' => '1/2 LW', '1/3 EV' => '1/3 LW', }, }, 'ExposureDelayMode' => { Description => 'Spiegelvorauslösung', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ExposureDifference' => 'Belichtungsabweichung', 'ExposureIndex' => 'Belichtungsindex', 'ExposureLevelIncrements' => { Description => 'Belichtungswert', PrintConv => { '1-stop set, 1/3-stop comp.' => '1-Blende, 1/3-Blendenkompensation', '1/2 Stop' => '1/2 LW', '1/2-stop set, 1/2-stop comp.' => '1/2-Blende, 1/2-Blendenkompensation', '1/3 Stop' => '1/3 LW', '1/3-stop set, 1/3-stop comp.' => '1/3-Blende, 1/3-Blendenkompensation', }, }, 'ExposureMode' => { Description => 'Belichtungsmodus', PrintConv => { 'Anti Motion Blur' => 'Verwackelungsschutz', 'Aperture Priority' => 'Blendenpriorität', 'Aperture-priority AE' => 'Blendenpriorität', 'Auto' => 'Automatische Belichtung', 'Auto bracket' => 'Belichtungsreihe', 'Auto?' => 'Automatisch?', 'Backlight Correction HDR' => 'Hintergrundbeleuchtung HDR Korrektur', 'Beach' => 'Strand', 'Bulb' => 'Bulb-Modus', 'Fireworks' => 'Feuerwerk', 'Food' => 'Lebensmittel', 'High Sensitivity' => 'Hohe Empfindlichkeit', 'Landscape' => 'Landschaft', 'Macro' => 'Makro', 'Manual' => 'Manuelle Belichtung', 'Night Scene / Twilight' => 'Nachtszene / Dämmerung', 'Night View/Portrait' => 'Abendszene/Porträt', 'Pet' => 'Haustiere', 'Portrait' => 'Porträt', 'Program' => 'Programm', 'Program-shift' => 'Programm-Shift', 'Program-shift A' => 'Programmverschiebung A', 'Program-shift S' => 'Programmverschiebung S', 'Shutter Priority' => 'Verschlusspriorität', 'Shutter speed priority AE' => 'Verschlusspriorität', 'Snow' => 'Schnee', 'Sports' => 'Sport', 'Sunset' => 'Sonnenuntergang', 'Twilight Portrait' => 'Dämmerung Portät', 'Underwater' => 'Unterwasser', 'n/a' => '(nicht gesetzt)', }, }, 'ExposureModeInManual' => { Description => 'Belichtungsmodus bei manueller Belichtung', PrintConv => { 'Center-weighted average' => 'Mittenbetont', 'Evaluative metering' => 'Mehrfeldmessung', 'Partial metering' => 'Teilbild', 'Specified metering mode' => 'Spezifizierte Messmethode', 'Spot metering' => 'Spotmessung', }, }, 'ExposureProgram' => { Description => 'Belichtungsprogramm', PrintConv => { 'Action (High speed)' => 'Kreativ-Programm (ausgerichtet auf schnelle Verschlussgeschwindigkeit)', 'Anti Motion Blur' => 'Verwackelungsschutz', 'Aperture Priority' => 'Blendenpriorität', 'Aperture-priority AE' => 'Blendenpriorität', 'Creative (Slow speed)' => 'Kreativ-Programm (ausgerichtet auf Schärfentiefe)', 'Landscape' => 'Landschaft', 'Macro' => 'Makro', 'Manual' => 'Manuell', 'Night Portrait' => 'Nachtporträt', 'Night view' => 'Abendszene', 'Night view/portrait' => 'Abendszene/Porträt', 'Not Defined' => 'Nicht definiert', 'Portrait' => 'Porträt', 'Program' => 'Programm', 'Program AE' => 'Normal-Programm', 'Shutter Priority' => 'Verschlusspriorität', 'Shutter speed priority AE' => 'Verschlusspriorität', 'Sports' => 'Sport', 'Sunset' => 'Sonnenuntergang', }, }, 'ExposureTime' => 'Belichtungsdauer', 'ExposureTime2' => 'Belichtungsdauer 2', 'ExposureValue' => 'Belichtungsdauer', 'ExposureWarning' => { Description => 'Belichtungswarnung', PrintConv => { 'Bad exposure' => 'Schlechte Belichtung', 'Good' => 'OK', }, }, 'ExtendedWBDetect' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'Extender' => { Description => 'Konverter', PrintConv => { 'None' => 'Keiner', }, }, 'ExtenderFirmwareVersion' => 'Konverter-Firmware-Version', 'ExtenderMake' => 'Konverterhersteller', 'ExtenderModel' => 'Konverter-Modell', 'ExtenderSerialNumber' => 'Konverter-Seriennummer', 'ExtenderStatus' => { Description => 'Status Telekonverter', PrintConv => { 'Attached' => 'Angesetzt', 'Not attached' => 'Nicht angesetzt', 'Removed' => 'Entfernt', }, }, 'ExternalFlash' => { Description => 'Externer Blitz', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ExternalFlashAE1' => 'Externer Blitz AE1', 'ExternalFlashAE1_0' => 'Externer Blitz AE1 0', 'ExternalFlashAE2' => 'Externer Blitz AE2', 'ExternalFlashAE2_0' => 'Externer Blitz AE2 0', 'ExternalFlashBounce' => { Description => 'Externer Blitz - Bounce', PrintConv => { 'Bounce' => 'Mit Bounce', 'Direct' => 'Direkt', 'No' => 'Nein', 'Yes' => 'Ja', 'n/a' => '(nicht gesetzt)', }, }, 'ExternalFlashCompensation' => 'Externe Blitzbelichtungskorrektur', 'ExternalFlashExposureComp' => { Description => 'Belichtungskorrektur des externen Blitzgeräts', PrintConv => { '-0.5' => '-0.5 LW', '-1.0' => '-1.0 LW', '-1.5' => '-1.5 LW', '-2.0' => '-2.0 LW', '-2.5' => '-2.5 LW', '-3.0' => '-3.0 LW', '0.0' => '0.0 LW', '0.5' => '0.5 LW', '1.0' => '1.0 LW', 'n/a' => 'Nicht gesetzt (Aus oder Auto-Modi)', 'n/a (Manual Mode)' => 'Nicht gesetzt (Manueller Modus)', }, }, 'ExternalFlashFirmware' => { Description => 'Externer Blitz Firmware', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ExternalFlashFlags' => { Description => 'Externer Blitz Flags', PrintConv => { 'Fired' => 'Ausgelöst', }, }, 'ExternalFlashGValue' => 'Externer Blitz Leitzahl', 'ExternalFlashGuideNumber' => 'Leitzahl des externen Blitzgeräts', 'ExternalFlashMode' => { Description => 'Slave-Blitz-Messfeld 3', PrintConv => { 'Off' => 'Aus', 'On, Auto' => 'Ein, Auto', 'On, Contrast-control Sync' => 'Ein, Kontrast-Steuerungs-Synchronisation', 'On, Flash Problem' => 'Ein, Blitzproblem?', 'On, High-speed Sync' => 'Ein, High-Speed-Synchronisation', 'On, Manual' => 'Ein, Manuell', 'On, P-TTL Auto' => 'Ein, P-TTL-Blitzautomatik', 'On, Wireless' => 'Ein, Drahtlos', 'On, Wireless, High-speed Sync' => 'Ein, Drahtlos, High-Speed-Synchronisation', 'n/a - Off-Auto-Aperture' => 'K/A - Blendenring nicht auf A', }, }, 'ExternalFlashZoom' => 'Externer Blitz-Zoom', 'ExternalSensorBrightnessValue' => 'Externer Sensor Helligkeitswert', 'ExtraSamples' => 'Zusätzliche Komponenten', 'FEMicroadjustment' => { Description => 'FE Feinabstimmung', PrintConv => { 'Disable' => 'Deaktiviert', 'Enable' => 'Aktiviert', }, }, 'FNumber' => 'F-Wert', 'FOV' => 'Sichtfeld', 'Face0Position' => 'Position, 0. Gesicht', 'Face10Position' => 'Position, 10. Gesicht', 'Face10Size' => 'Größe, 10. Gesicht', 'Face11Position' => 'Position, 11. Gesicht', 'Face11Size' => 'Größe, 11. Gesicht', 'Face12Position' => 'Position, 12. Gesicht', 'Face12Size' => 'Größe, 12. Gesicht', 'Face13Position' => 'Position, 13. Gesicht', 'Face13Size' => 'Größe, 13. Gesicht', 'Face14Position' => 'Position, 14. Gesicht', 'Face14Size' => 'Größe, 14. Gesicht', 'Face15Position' => 'Position, 15. Gesicht', 'Face15Size' => 'Größe, 15. Gesicht', 'Face16Position' => 'Position, 16. Gesicht', 'Face16Size' => 'Größe, 16. Gesicht', 'Face17Position' => 'Position, 17. Gesicht', 'Face17Size' => 'Größe, 17. Gesicht', 'Face18Position' => 'Position, 18. Gesicht', 'Face18Size' => 'Größe, 18. Gesicht', 'Face19Position' => 'Position, 19. Gesicht', 'Face19Size' => 'Größe, 19. Gesicht', 'Face1Position' => 'Position, 1. Gesicht', 'Face1Size' => 'Größe, 1. Gesicht', 'Face20Position' => 'Position, 20. Gesicht', 'Face20Size' => 'Größe, 20. Gesicht', 'Face21Position' => 'Position, 21. Gesicht', 'Face21Size' => 'Größe, 21. Gesicht', 'Face22Position' => 'Position, 22. Gesicht', 'Face22Size' => 'Größe, 22. Gesicht', 'Face23Position' => 'Position, 23. Gesicht', 'Face23Size' => 'Größe, 23. Gesicht', 'Face24Position' => 'Position, 24. Gesicht', 'Face24Size' => 'Größe, 24. Gesicht', 'Face25Position' => 'Position, 25. Gesicht', 'Face25Size' => 'Größe, 25. Gesicht', 'Face26Position' => 'Position, 26. Gesicht', 'Face26Size' => 'Größe, 26. Gesicht', 'Face27Position' => 'Position, 27. Gesicht', 'Face27Size' => 'Größe, 27. Gesicht', 'Face28Position' => 'Position, 28. Gesicht', 'Face28Size' => 'Größe, 28. Gesicht', 'Face29Position' => 'Position, 29. Gesicht', 'Face29Size' => 'Größe, 29. Gesicht', 'Face2Position' => 'Position, 2. Gesicht', 'Face2Size' => 'Größe, 2. Gesicht', 'Face30Position' => 'Position, 30. Gesicht', 'Face30Size' => 'Größe, 30. Gesicht', 'Face31Position' => 'Position, 31. Gesicht', 'Face31Size' => 'Größe, 31. Gesicht', 'Face32Position' => 'Position, 32. Gesicht', 'Face32Size' => 'Größe, 32. Gesicht', 'Face3Position' => 'Position, 3. Gesicht', 'Face3Size' => 'Größe, 3. Gesicht', 'Face4Position' => 'Position, 4. Gesicht', 'Face4Size' => 'Größe, 4. Gesicht', 'Face5Position' => 'Position, 5. Gesicht', 'Face5Size' => 'Größe, 5. Gesicht', 'Face6Position' => 'Position, 6. Gesicht', 'Face6Size' => 'Größe, 6. Gesicht', 'Face7Position' => 'Position, 7. Gesicht', 'Face7Size' => 'Größe, 7. Gesicht', 'Face8Position' => 'Position, 8. Gesicht', 'Face8Size' => 'Größe, 8. Gesicht', 'Face9Position' => 'Position, 9. Gesicht', 'Face9Size' => 'Größe, 9. Gesicht', 'FaceDetect' => { Description => 'Gesichtserkennung', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'FaceDetectArea' => 'Gesichtserkennung Bereich', 'FaceDetectFrameSize' => 'Gesichtserkennung Bereichsgröße', 'FaceInfoUnknown' => 'Gesichterinformation Unbekannt', 'FaceOrientation' => { Description => 'Ausrichtung Gesichtserkennung', PrintConv => { 'Rotate 180' => '180° gedreht', 'Rotate 270 CW' => '90° gegen den Uhrzeigersinn', 'Rotate 90 CW' => '90° im Uhrzeigersinn', }, }, 'FacePositions' => 'Positionen der Gesichter', 'FacesDetected' => { Description => 'Gesichter erkannt', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'FacesRecognized' => 'Gesichter erkannt', 'FastSeek' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'FaxProfile' => { Description => 'Faxprofil', PrintConv => { 'Unknown' => 'Unbekannt', }, }, 'FaxRecvParams' => 'Fax-Empfangsparameter', 'FaxRecvTime' => 'Fax-Empfangszeit', 'FaxSubAddress' => 'Fax-Sub-Adresse', 'FileAccessDate' => 'Datum/Uhrzeit des letzten Dateizugriffs', 'FileCreateDate' => 'Datum/Uhrzeit der Dateierstellung', 'FileDescription' => 'Dateibeschreibung', 'FileExtension' => 'Dateiendung', 'FileFormat' => 'Dateiformat', 'FileIndex' => 'Datei-Index', 'FileInfo' => 'Datei-Informationen', 'FileInfoVersion' => 'Datei-Informationen-Version', 'FileInodeChangeDate' => 'Datum/Uhrzeit der letzten Inode-Änderung', 'FileModifyDate' => 'Datum/Uhrzeit der Dateiänderung', 'FileName' => 'Dateiname', 'FileNumber' => 'Dateinummer', 'FileNumberMemory' => { Description => 'Dateinummernspeicher', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'FileNumberSequence' => { Description => 'Nummernspeicher', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'FilePermissions' => 'Dateiberechtigungen', 'FileSequence' => 'Dateireihenfolge', 'FileSize' => 'Dateigröße', 'FileSource' => { Description => 'Dateiquelle', PrintConv => { 'Digital Camera' => 'Digital-Kamera', 'Film Scanner' => 'Film-Scanner', 'Reflection Print Scanner' => 'Scanner', 'Sigma Digital Camera' => 'Sigma Digital-Kamera', }, }, 'FileType' => 'Dateityp', 'FileTypeDescription' => 'Dateityp Beschreibung', 'FileVersion' => 'Dateiformatversion', 'Filename' => 'Dateiname', 'FillFlashAutoReduction' => { Description => 'E-TTL II-Automatikblitz-System', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', }, }, 'FilmMode' => { Description => 'Film-Modus', PrintConv => { 'F1/Studio Portrait' => 'F1/Studio-Porträt', 'F1a/Studio Portrait Enhanced Saturation' => 'F1a/Studio-Porträt Erweiterte Sättigung', 'F1b/Studio Portrait Smooth Skin Tone (ASTIA)' => 'F1b/Studio-Porträt Weiche Hauttöne', 'F1c/Studio Portrait Increased Sharpness' => 'F1c/Studio-Porträt Erhöhte Schärfe', 'F3/Studio Portrait Ex' => 'F3/Studio Porträt Ex', 'n/a' => '(nicht gesetzt)', }, }, 'FilmType' => 'Filmtyp', 'FilterEffect' => { Description => 'Filtereffekt', PrintConv => { 'Green' => 'Grün', 'None' => 'Keiner', 'Off' => 'Aus', 'Red' => 'Rot', 'Yellow' => 'Gelb', 'n/a' => '(nicht gesetzt)', }, }, 'FilterEffectFaithful' => { Description => 'Filtereffekt Natürlich', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'FilterEffectLandscape' => { Description => 'Filtereffekt Landschaft', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'FilterEffectMonochrome' => { Description => 'Filtereffekt Monochrom', PrintConv => { 'Green' => 'Grün', 'None' => 'Keiner', 'Red' => 'Rot', 'Yellow' => 'Gelb', 'n/a' => '(nicht gesetzt)', }, }, 'FilterEffectNeutral' => { Description => 'Filtereffekt Neutral', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'FilterEffectPortrait' => { Description => 'Filtereffekt Porträt', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'FilterEffectStandard' => { Description => 'Filtereffekt Standard', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'FilterEffectUnknown' => { Description => 'Filtereffekt Unbekannt', PrintConv => { 'Green' => 'Grün', 'None' => 'Keiner', 'Red' => 'Rot', 'Yellow' => 'Gelb', 'n/a' => '(nicht gesetzt)', }, }, 'FilterEffectUserDef1' => { Description => 'Filtereffekt Benutzerdefiniert 1', PrintConv => { 'Green' => 'Grün', 'None' => 'Keiner', 'Red' => 'Rot', 'Yellow' => 'Gelb', 'n/a' => '(nicht gesetzt)', }, }, 'FilterEffectUserDef2' => { Description => 'Filtereffekt Benutzerdefineirt 2', PrintConv => { 'Green' => 'Grün', 'None' => 'Keiner', 'Red' => 'Rot', 'Yellow' => 'Gelb', 'n/a' => '(nicht gesetzt)', }, }, 'FilterEffectUserDef3' => { Description => 'Filtereffekt Benutzerdefiniert 3', PrintConv => { 'Green' => 'Grün', 'None' => 'Keiner', 'Red' => 'Rot', 'Yellow' => 'Gelb', 'n/a' => '(nicht gesetzt)', }, }, 'FinderDisplayDuringExposure' => { Description => 'Sucheranzeige bei Belichtung', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'FineSharpness' => { Description => 'Detail-Schärfe', PrintConv => { 'Extra fine' => 'Extra', 'Off' => 'Aus', 'On' => 'An', }, }, 'FineTuneOptCenterWeighted' => 'Feinabst. der Bel.Messung Mittenbetonte Messung', 'FineTuneOptMatrixMetering' => 'Feinabst. der Bel.Messung Matrixmessung', 'FineTuneOptSpotMetering' => 'Feinabst. der Bel.Messung Spotmessung', 'FirmwareRevision' => 'Firmware-Revision', 'FirmwareRevision2' => 'Firmware-Revision 2', 'FirmwareVersion' => 'Firmware-Version', 'FixtureIdentifier' => 'Kennzeichnung', 'Flash' => { Description => 'Blitz', PrintConv => { 'Auto, Did not fire' => 'Blitz wurde nicht ausgelöst, Automodus', 'Auto, Did not fire, Red-eye reduction' => 'Blitz wurde nicht ausgelöst, Rote-Augen-Reduzierung', 'Auto, Fired' => 'Blitz wurde ausgelöst, Automodus', 'Auto, Fired, Red-eye reduction' => 'Blitz wurde ausgelöst, Automodus, Rote-Augen-Reduzierung', 'Auto, Fired, Red-eye reduction, Return detected' => 'Blitz wurde ausgelöst, Automodus, Messblitz-Licht zurückgeworfen, Rote-Augen-Reduzierung', 'Auto, Fired, Red-eye reduction, Return not detected' => 'Blitz wurde ausgelöst, Automodus, kein Messblitz-Licht zurückgeworfen, Rote-Augen-Reduzierung', 'Auto, Fired, Return detected' => 'Blitz wurde ausgelöst, Automodus, Messblitz-Licht zurückgeworfen', 'Auto, Fired, Return not detected' => 'Blitz wurde ausgelöst, Automodus, kein Messblitz-Licht zurückgeworfen', 'Did not fire' => 'Blitz wurde nicht ausgelöst', 'Fired' => 'Blitz wurde ausgelöst', 'Fired, Red-eye reduction' => 'Blitz wurde ausgelöst, Rote-Augen-Reduzierung', 'Fired, Red-eye reduction, Return detected' => 'Blitz wurde ausgelöst, Rote-Augen-Reduzierung, Messblitz-Licht zurückgeworfen', 'Fired, Red-eye reduction, Return not detected' => 'Blitz wurde ausgelöst, Rote-Augen-Reduzierung, kein Messblitz-Licht zurückgeworfen', 'Fired, Return detected' => 'Messblitz-Licht zurückgeworfen', 'Fired, Return not detected' => 'Kein Messblitz-Licht zurückgeworfen', 'No Flash' => 'Blitz wurde nicht ausgelöst', 'No flash function' => 'Keine Blitzfunktion', 'Off' => 'Aus', 'Off, Did not fire' => 'Blitz wurde nicht ausgelöst, Blitz unterdrücken-Modus', 'Off, Did not fire, Return not detected' => 'Deaktiviert, Blitz wurde nicht ausgelöst, kein Messblitz-Licht zurückgeworfen', 'Off, No flash function' => 'Deaktiviert, Keine Blitzfunktion', 'Off, Red-eye reduction' => 'Deaktiviert, Rote-Augen-Reduzierung', 'On' => 'Ein', 'On, Did not fire' => 'Ein, Blitz wurde nicht ausgelöst', 'On, Fired' => 'Blitz wurde ausgelöst, Blitz erzwingen-Modus', 'On, Red-eye reduction' => 'Blitz wurde ausgelöst, Blitz erzwingen-Modus, Rote-Augen-Reduzierung', 'On, Red-eye reduction, Return detected' => 'Blitz wurde ausgelöst, Blitz erzwingen-Modus, Rote-Augen-Reduzierung, Messblitz-Licht zurückgeworfen', 'On, Red-eye reduction, Return not detected' => 'Blitz wurde ausgelöst, Blitz erzwingen-Modus, Rote-Augen-Reduzierung, kein Messblitz-Licht zurückgeworfen', 'On, Return detected' => 'Blitz wurde ausgelöst, Blitz erzwingen-Modus, Messblitz-Licht zurückgeworfen', 'On, Return not detected' => 'Blitz wurde ausgelöst, Blitz erzwingen-Modus, kein Messblitz-Licht zurückgeworfen', }, }, 'FlashAction2' => { PrintConv => { 'Did not fire' => 'Blitz wurde nicht ausgelöst', 'Fired' => 'Blitz wurde ausgelöst', }, }, 'FlashActivity' => 'Blitz-Leistung', 'FlashBatteryLevel' => 'Blitz Batteriestatus', 'FlashBias' => 'Blitzkorrektur', 'FlashBits' => { Description => 'Blitz-Details', PrintConv => { '2nd-curtain sync used' => 'Synchronisatiopn auf 2. Verschlußvorhang', 'Built-in' => 'Integrierter Blitz', 'External' => 'Extern', 'FP sync enabled' => 'FP Synchronisation eingestellt', 'FP sync used' => 'FP Synchronistaion', 'Manual' => 'Manuell', }, }, 'FlashColorFilter' => 'Blitz Farbfilter', 'FlashCommanderMode' => { Description => 'Master-Steuerung', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'FlashCompensation' => 'Blitzbelichtungs-Korrektur', 'FlashControlBuilt-in' => { PrintConv => { 'Commander Mode' => 'Master-Steuerung', }, }, 'FlashControlMode' => { Description => 'Blitzlichtsteuerungsmodus', PrintConv => { 'Auto Aperture' => 'Blendenautomatik (AA)', 'Manual' => 'Manuell', 'Off' => 'Aus', 'Repeating Flash' => 'Stroboskopblitz', }, }, 'FlashCurtain' => { Description => 'Blitzsynchronisation auf Verschluß', PrintConv => { '1st' => '1. Vorhang', '2nd' => '2. Vorhang', }, }, 'FlashDefault' => { Description => 'Systemblitz', PrintConv => { 'Fill Flash' => 'Aufhellblitz', }, }, 'FlashDevice' => { Description => 'Blitzgerät', PrintConv => { 'External' => 'Extern', 'Internal' => 'Intern', 'Internal + External' => 'Intern + Extern', 'None' => 'Keines', }, }, 'FlashDistance' => 'Blitzabstand', 'FlashEnergy' => 'Blitzstärke', 'FlashExposureBracketValue' => 'Blitzbelichtungsreihenwert', 'FlashExposureComp' => 'Blitzbelichtungskorrektur', 'FlashExposureComp2' => 'Blitzbelichtungskorrektur 2', 'FlashExposureComp3' => 'Blitzbelichtungskorrektur 3', 'FlashExposureComp4' => 'Blitzbelichtungskorrektur 4', 'FlashExposureCompSet' => 'Eingestellte Blitz-Belichtungskorrektur', 'FlashExposureCompSet2' => 'Blitzbelichtungskorrektur 2', 'FlashExposureIndicator' => { Description => 'Blitz-Belichtungsindikator', PrintConv => { 'Bottom of Scale' => 'Unterer Wert', 'Not Indicated' => 'Nicht angezeigt', 'Over Scale' => 'Wert zu hoch', 'Top of Scale' => 'Oberer Wert', 'Under Scale' => 'Wert zu niedrig', }, }, 'FlashExposureIndicatorLast' => { Description => 'Blitz-Ende-Belichtungsindikator', PrintConv => { 'Bottom of Scale' => 'Unterer Wert', 'Not Indicated' => 'Nicht angezeigt', 'Over Scale' => 'Wert zu hoch', 'Top of Scale' => 'Oberer Wert', 'Under Scale' => 'Wert zu niedrig', }, }, 'FlashExposureIndicatorNext' => { Description => 'Blitz-Folge-Belichtungsindikator', PrintConv => { 'Bottom of Scale' => 'Unterer Wert', 'Not Indicated' => 'Nicht angezeigt', 'Over Scale' => 'Wert zu hoch', 'Top of Scale' => 'Oberer Wert', 'Under Scale' => 'Wert zu niedrig', }, }, 'FlashExposureLock' => { Description => 'Blitzbelichtung-Speicherung', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'FlashFired' => { Description => 'Blitz wurde ausgelöst', PrintConv => { 'False' => 'Nein', 'No' => 'Nein', 'True' => 'Ja', 'Yes' => 'Ja', }, }, 'FlashFiring' => { Description => 'Blitzzündung', PrintConv => { 'Does not fire' => 'Unterdrückt', 'Fires' => 'Aktiv', }, }, 'FlashFirmwareVersion' => 'Blitz-Firmware-Version', 'FlashFocalLength' => 'Blitz-Brennweite', 'FlashFunction' => { Description => 'Blitzfunktion', PrintConv => { 'Built-in flash' => 'Integrierter Blitz', 'False' => 'Nein', 'Manual' => 'Manuell', 'No flash' => 'Kein Blitz', 'Strobe' => 'Stroboskop', 'True' => 'Ja', }, }, 'FlashGNDistance' => { Description => 'Blitzleitzahl Entfernung', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'FlashGroupACompensation' => 'Gruppe A, Blitzbelichtungs-Korrektur', 'FlashGroupAControlMode' => { Description => 'Gruppe A, Blitzlichtsteuerungsmodus', PrintConv => { 'Auto Aperture' => 'Blendenautomatik (AA)', 'Manual' => 'Manuell', 'Off' => 'Aus', 'Repeating Flash' => 'Stroboskopblitz', }, }, 'FlashGroupAOutput' => 'Gruppe A, Blitz-Leistung', 'FlashGroupBCompensation' => 'Gruppe B, Blitzbelichtungs-Korrektur', 'FlashGroupBControlMode' => { Description => 'Gruppe B, Blitzlichtsteuerungsmodus', PrintConv => { 'Auto Aperture' => 'Blendenautomatik (AA)', 'Automatic' => 'Automatik', 'Manual' => 'Manuell', 'Off' => 'Aus', 'Repeating Flash' => 'Stroboskopblitz', }, }, 'FlashGroupBOutput' => 'Gruppe B, Blitz-Leistung', 'FlashGroupCCompensation' => 'Gruppe C, Blitzbelichtungs-Korrektur', 'FlashGroupCControlMode' => { Description => 'Gruppe C, Blitzlichtsteuerungsmodus', PrintConv => { 'Auto Aperture' => 'Blendenautomatik (AA)', 'Manual' => 'Manuell', 'Off' => 'Aus', 'Repeating Flash' => 'Stroboskopblitz', }, }, 'FlashGroupCOutput' => 'Gruppe C, Blitz-Leistung', 'FlashGuideNumber' => 'Blitzleitzahl', 'FlashInfo' => 'Blitz-Informationen', 'FlashInfoVersion' => 'Blitz-Informationen-Version', 'FlashIntensity' => { Description => 'Blitz Stärke', PrintConv => { 'High' => 'Hoch', 'Strong' => 'Stark', }, }, 'FlashLevel' => { Description => 'Blitzbelichtungskorr.', PrintConv => { 'High' => 'Hoch', 'n/a' => '(nicht gesetzt)', }, }, 'FlashMake' => 'Blitzgerätehersteller', 'FlashMetering' => { Description => 'Blitz-Messung', PrintConv => { 'Manual flash control' => 'Manuelle Blitz-Kontrolle', 'Pre-flash TTL' => 'Vorblitz TTL', }, }, 'FlashMeteringMode' => { Description => 'Blitz-Belichtungsmessmethode', PrintConv => { 'External Auto' => 'Extern Automatisch', 'External Manual' => 'Extern Manuell', 'Off' => 'Aus', }, }, 'FlashMeteringSegments' => 'Blitz-Messfelder', 'FlashMode' => { Description => 'Blitz-Modus', PrintConv => { '2nd Curtain' => 'Auf 2. Verschlußvorhang', 'Auto' => 'Automatisch', 'Auto, Did not fire' => 'Auto, nicht ausgelöst', 'Auto, Did not fire, Red-eye reduction' => 'Auto, nicht ausgelöst, Rote-Augen-Reduzierung', 'Auto, Fired' => 'Auto, ausgelöst', 'Auto, Fired, Red-eye reduction' => 'Auto, ausgelöst, Rote-Augen-Reduzierung', 'Did Not Fire' => 'Nicht ausgelöst', 'Disabled' => 'Deaktiviert', 'External, Auto' => 'Extern, Auto', 'External, Contrast-control Sync' => 'Extern, Kontrast-Steuerungs-Synchronisation', 'External, Flash Problem' => 'Extern, Blitzproblem?', 'External, High-speed Sync' => 'Extern, High-Speed-Synchronisation', 'External, Manual' => 'Extern, Manuell', 'External, P-TTL Auto' => 'Extern, P-TTL-Blitzautomatik', 'External, Wireless' => 'Extern, Drahtlos', 'External, Wireless, High-speed Sync' => 'Extern, Drahtlos, High-Speed-Synchronisation', 'Fill flash' => 'Aufhellblitz', 'Fill-in' => 'Aufhellen', 'Fired, Commander Mode' => 'Ausgelöst, Befehlsmodus', 'Fired, External' => 'Ausgelöst, Extern', 'Fired, Manual' => 'Ausgelöst, Manuell', 'Fired, TTL Mode' => 'Ausgelöst, TTL-Modus', 'Internal' => 'Intern', 'Not Ready' => 'Nicht bereit', 'Off' => 'Aus', 'Off, Did not fire' => 'Aus', 'Off?' => 'Aus?', 'On' => 'Ein', 'On, Did not fire' => 'Ein, nicht ausgelöst', 'On, Did not fire, Wireless (Master)' => 'Ein, nicht ausgelöst, Drahtlos (Hauptblitz)', 'On, Fired' => 'Ein', 'On, Red-eye reduction' => 'Ein, Rote-Augen-Reduzierung', 'On, Slow-sync' => 'Ein, Langzeit-Synchronisation', 'On, Slow-sync, Red-eye reduction' => 'Ein, Langzeit-Synchronisation, Rote-Augen-Reduzierung', 'On, Soft' => 'Ein, Softblitz', 'On, Trailing-curtain Sync' => 'Ein, 2. Verschlussvorhang', 'On, Wireless (Control)' => 'Ein, Drahtlos (Steuerblitz)', 'On, Wireless (Master)' => 'Ein, Drahtlos (Hauptblitz)', 'Rear flash sync' => 'Synchronisation auf den zweiten Verschlussvorhang', 'Red eye' => 'Rote-Augen-Reduzierung', 'Red-eye' => 'Rote Augen', 'Red-eye Reduction' => 'Rote-Augen-Reduzierung', 'Red-eye reduction' => 'Rote-Augen-Reduzierung', 'Unknown' => 'Unbekannt', 'Wireless' => 'Drahtlos', 'n/a - Off-Auto-Aperture' => 'K/A - Blendenring nicht auf A', }, }, 'FlashModel' => { Description => 'Blitz-Modell', PrintConv => { 'None' => 'Keines', }, }, 'FlashOptions' => { Description => 'Blitz-Optionen', PrintConv => { 'Auto' => 'Automatisch', 'Auto, Red-eye reduction' => 'Auto, Rote-Augen-Reduzierung', 'Red-eye reduction' => 'Rote-Augen-Reduzierung', 'Slow-sync' => 'Langzeit-Synchronisation', 'Slow-sync, Red-eye reduction' => 'Langzeit-Synchronisation, Rote-Augen-Reduzierung', 'Trailing-curtain Sync' => '2. Verschlussvorhang', 'Wireless (Control)' => 'Drahtlos (Steuerblitz)', 'Wireless (Master)' => 'Drahtlos (Hauptblitz)', }, }, 'FlashOptions2' => { Description => 'Blitz-Optionen (2)', PrintConv => { 'Auto' => 'Automatisch', 'Auto, Red-eye reduction' => 'Auto, Rote-Augen-Reduzierung', 'Red-eye reduction' => 'Rote-Augen-Reduzierung', 'Slow-sync' => 'Langzeit-Synchronisation', 'Slow-sync, Red-eye reduction' => 'Langzeit-Synchronisation, Rote-Augen-Reduzierung', 'Trailing-curtain Sync' => '2. Verschlussvorhang', 'Wireless (Control)' => 'Drahtlos (Steuerblitz)', 'Wireless (Master)' => 'Drahtlos (Hauptblitz)', }, }, 'FlashOutput' => 'Blitzstärke', 'FlashRedEyeMode' => { Description => 'Blitz Rote-Augen-Modus', PrintConv => { 'False' => 'Nein', 'True' => 'Ja', }, }, 'FlashRemoteControl' => { Description => 'Blitz Fernauslöser', PrintConv => { 'Off' => 'Aus', }, }, 'FlashReturn' => { Description => 'Blitz Reflexion', PrintConv => { 'No return detection' => 'Keine Erkennung', 'Return detected' => 'Reflexion erkannt', 'Return not detected' => 'Reflexion nicht erkannt', 'Subject Inside Flash Range' => 'Objekt innerhalb der Blitzreichweite', 'Subject Outside Flash Range' => 'Objekt ausserhalb der Blitzreichweite', }, }, 'FlashSerialNumber' => 'Blitz-Seriennummer', 'FlashSetting' => 'Blitzeinstellung', 'FlashShutterSpeed' => 'Längste Verschlussz. (Blitz)', 'FlashStatus' => { Description => 'Slave-Blitz-Messfeld 1', PrintConv => { 'Built-in Flash present' => 'Integrierter Blitz vorhanden', 'Built-in Flash present and fired' => 'Integrierter Blitz vorhanden und ausgelöst', 'External Flash present' => 'Externer Blitz vorhanden', 'External Flash present and fired' => 'Externer Blitz vorhanden und ausgelöst', 'External, Did not fire' => 'Extern, nicht ausgelöst', 'External, Fired' => 'Extern, ausgelöst', 'Internal, Did not fire' => 'Intern, nicht ausgelöst', 'Internal, Did not fire (0x08)' => 'Intern, nicht ausgelöst', 'Internal, Fired' => 'Intern, ausgelöst', 'No Flash present' => 'Kein Blitz vorhanden', 'Off' => 'Aus', 'Off (1)' => 'Aus (1)', }, }, 'FlashSyncMode' => 'Blitz-Synchronisationsmodus', 'FlashSyncSpeed' => 'Blitzsynchronzeit', 'FlashSyncSpeedAv' => { Description => 'Blitzsynchronzeit bei Av', PrintConv => { '1/200 Fixed' => '1/200 Fest', '1/200-1/60 Auto' => '1/200-1/60 automatisch', '1/250 Fixed' => '1/250 Fest', '1/250-1/60 Auto' => '1/200-1/60 automatisch', '1/300 Fixed' => '1/300 Fest', 'Auto' => 'Automatisch', }, }, 'FlashTTLMode' => 'Blitz TTL-Modus', 'FlashType' => { Description => 'Blitztyp', PrintConv => { 'Built-In Flash' => 'Intern', 'External' => 'Extern', 'None' => 'Keiner', }, }, 'FlashWarning' => { Description => 'Blitzsymbol', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'FlashpixVersion' => 'Unterstützte Flashpix-Version', 'FlickerReduce' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'FlipHorizontal' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'FocalLength' => 'Brennweite', 'FocalLength35efl' => 'Brennweite', 'FocalLengthIn35mmFormat' => 'Brennweite in 35 mm-Kleinbildformat', 'FocalPlaneDiagonal' => 'Diagonale des Sensors', 'FocalPlaneResolutionUnit' => { Description => 'Einheit der Sensorauflösung', PrintConv => { 'None' => 'Keine', 'inches' => 'Inch', 'um' => 'µm (Mikrometer)', }, }, 'FocalPlaneXResolution' => 'Sensorauflösung horizontal', 'FocalPlaneXSize' => 'Sensorgröße horizontal', 'FocalPlaneXUnknown' => 'Sensorgröße horizontal unbekannt', 'FocalPlaneYResolution' => 'Sensorauflösung vertikal', 'FocalPlaneYSize' => 'Sensorgröße vertikal', 'FocalPlaneYUnknown' => 'Sensorgröße vertikal unbekannt', 'FocalType' => { Description => 'Objektivart', PrintConv => { 'Fixed' => 'Festbrennweite', 'Zoom' => 'Zoom-Objektiv', }, }, 'FocalUnits' => 'Fokussiereinheit', 'Focus' => { Description => 'Schärfepriorität', PrintConv => { 'Auto-focus Didn\'t Lock' => 'Autofokus nicht gesperrt', 'Auto-focus Locked' => 'Autofokus gesperrt', 'Manual' => 'Manuell', }, }, 'FocusArea' => { Description => 'Fokus-Bereich', PrintConv => { 'Spot Focus' => 'Spot-AF-Messfeld', 'Wide Focus (normal)' => 'Großes AF-Messfeld (normal)', }, }, 'FocusAreaSelection' => { Description => 'Scrollen bei Messfeldauswahl', PrintConv => { 'No Wrap' => 'Am Rand stoppen', 'Wrap' => 'Umlaufend', }, }, 'FocusContinuous' => { Description => 'Fortlaufende Fokussierung', PrintConv => { 'Continuous' => 'Serienaufnahme', 'Manual' => 'Manuell', }, }, 'FocusDisplayAIServoAndMF' => { PrintConv => { 'Disable' => 'Deaktiviert', 'Enable' => 'Aktiviert', }, }, 'FocusDistance' => 'Fokus-Distanz', 'FocusDistanceLower' => 'Nahe Fokus-Distanz', 'FocusDistanceUpper' => 'Entfernte Fokus-Distanz', 'FocusInfoVersion' => 'FokusInfo Version', 'FocusMode' => { Description => 'Fokus-Modus', PrintConv => { 'AF-C' => 'AF-C (Kontinuierlicher Autofokus)', 'AF-S' => 'AF-S (Einzelautofokus)', 'AI Focus AF' => 'AI Fokus AF', 'Auto' => 'Automatisch', 'Continuous' => 'Serienaufnahme', 'Custom' => 'Benutzerdefiniert', 'Face detect' => 'Gesichtserkennung AF', 'Infinity' => 'Unendlich', 'Macro' => 'Makro', 'Macro (1)' => 'Makro (1)', 'Macro (2)' => 'Makro (2)', 'Manual' => 'Manuell', 'Manual Focus (3)' => 'Manueller Fokus (3)', 'Manual Focus (6)' => 'Manueller Fokus (6)', 'Multi AF' => 'Mehrpunkt AF', 'One-shot AF' => 'One-Shot AF', 'Pan Focus' => 'Pan-Fokus', 'Single' => 'Einzelbild', 'Single AF' => 'Einpunkt AF', 'Super Macro' => 'Super-Makro', 'n/a' => '(nicht gesetzt)', }, }, 'FocusMode2' => { Description => 'Fokus-Modus 2', PrintConv => { 'AF-C' => 'AF-C (Kontinuierlicher Autofokus)', 'AF-S' => 'AF-S (Einzelautofokus)', 'Manual' => 'Manuell', }, }, 'FocusModeSetting' => { Description => 'Autofokus', PrintConv => { 'AF-A' => 'AF-Automatik', 'AF-C' => 'AF-C (Kontinuierlicher Autofokus)', 'AF-S' => 'AF-S (Einzelautofokus)', 'Manual' => 'Manuell', }, }, 'FocusModeSwitch' => { Description => 'Fokus-Modus Schalter', PrintConv => { 'Manual' => 'Manuell', }, }, 'FocusPixel' => 'Fokus-Pixel', 'FocusPointWrap' => { Description => 'Scrollen bei Messfeldauswahl', PrintConv => { 'No Wrap' => 'Am Rand stoppen', 'Wrap' => 'Umlaufend', }, }, 'FocusPos' => 'Fokus-Position', 'FocusPosition' => 'Fokus-Distanz', 'FocusProcess' => { Description => 'Fokussierung', PrintConv => { 'AF Not Used' => 'Ohne AF', 'AF Used' => 'Mit AF', }, }, 'FocusRange' => { Description => 'Fokus-Bereich', PrintConv => { 'Auto' => 'Automatisch', 'Close' => 'Nah', 'Far Range' => 'Entfernt', 'Infinity' => 'Unendlich', 'Macro' => 'Makro', 'Manual' => 'Manuell', 'Middle Range' => 'Mittlerer Bereich', 'Not Known' => 'Nicht bekannt', 'Pan Focus' => 'Pan-Fokus', 'Super Macro' => 'Super-Makro', 'Very Close' => 'Sehr nah', }, }, 'FocusStepCount' => 'Fokus-Stufenzähler', 'FocusStepInfinity' => 'Fokus-Stufe Unendlich', 'FocusStepNear' => 'Fokus-Stufe Nah', 'FocusTrackingLockOn' => { Description => 'Schärfenarchiv. mit Lock-On', PrintConv => { '1 (Short)' => '5 (Kurz)', '1 Short' => '1 Kurz', '5 (Long)' => '5 (Lang)', '5 Long' => '5 Lang', 'Long' => 'Lang', 'Off' => 'Aus', 'Short' => 'Kurz', }, }, 'FocusWarning' => { Description => 'Fokus-Warnung', PrintConv => { 'Good' => 'OK', 'Out of focus' => 'Ausserhalb des Fokus', }, }, 'FocusingScreen' => 'Mattscheibe', 'FolderName' => 'Ordner-Name', 'FrameHeight' => 'Bereichshöhe', 'FrameNumber' => 'Bildnummer', 'FrameRate' => 'Bildwechselfrequenz', 'FrameSize' => 'Einzelbildgröße', 'FrameWidth' => 'Bereichsbreite', 'FreeByteCounts' => 'Anzahl Bytes des leeren Datenbereiches', 'FreeMemoryCardImages' => 'Platz auf Speicherkarten für', 'FreeOffsets' => 'Leerdatenposition', 'FujiFlashMode' => { Description => 'Blitz-Modus', PrintConv => { 'Auto' => 'Automatisch', 'External' => 'Externer Blitz', 'Off' => 'Unterdrückter Blitz', 'On' => 'Erzwungener Blitz', 'Red-eye reduction' => 'Rote-Augen-Reduzierung', }, }, 'FullImageSize' => 'Volle Bildgröße', 'FunctionButton' => { Description => 'Funktionstaste', PrintConv => { 'AF-area Mode' => 'Messfeldsteuerung', 'Auto Bracketing' => 'Belichtungsreihe', 'Center AF Area' => 'AF-Messfeldgröße', 'Center-weighted' => 'Mittenbetont', 'FV Lock' => 'FV-Messwertspeicher', 'Flash Off' => 'Blitz aus', 'Framing Grid' => 'Gitterlinien', 'ISO Display' => 'ISO-Anzeige', 'Image Quality' => 'Bildqualität', 'Matrix Metering' => 'Matrixmessung', 'Spot Metering' => 'Spotmessung', 'White Balance' => 'Weißabgleich', }, }, 'GEImageSize' => 'GE Bildgröße', 'GIFVersion' => 'GIF-Version', 'GPSAltitude' => 'Höhe', 'GPSAltitudeRef' => { Description => 'Bezugshöhe', PrintConv => { 'Above Sea Level' => 'Höhe über Normal-Null (Meeresspiegel)', 'Below Sea Level' => 'Höhe unter Normal-Null (Meeresspiegel)', }, }, 'GPSAreaInformation' => 'Name des GPS-Gebietes', 'GPSDOP' => 'Messgenauigkeit', 'GPSDateStamp' => 'GPS Datum', 'GPSDateTime' => 'GPS-Zeit (Atomuhr)', 'GPSDestBearing' => 'Motivrichtung', 'GPSDestBearingRef' => { Description => 'Referenz für Motivrichtung', PrintConv => { 'Magnetic North' => 'Magnetische Ausrichtung', 'True North' => 'Geographische Ausrichtung', }, }, 'GPSDestDistance' => 'Distanz zum Ziel', 'GPSDestDistanceRef' => { Description => 'Reference for distance to destination', PrintConv => { 'Kilometers' => 'Kilometer', 'Miles' => 'Meilen', 'Nautical Miles' => 'Knoten', }, }, 'GPSDestLatitude' => 'Breite des Zieles', 'GPSDestLatitudeRef' => { Description => 'Referenz für die Breite des Zieles', PrintConv => { 'North' => 'Nördliche Breite', 'South' => 'Südliche Breite', }, }, 'GPSDestLongitude' => 'Längengrad des Ziels', 'GPSDestLongitudeRef' => { Description => 'Referenz für die Länge des Zieles', PrintConv => { 'East' => 'Östliche Länge', 'West' => 'Westliche Länge', }, }, 'GPSDifferential' => { Description => 'GPS-Differentialkorrektur', PrintConv => { 'Differential Corrected' => 'Differentialkorrektur angewandt', 'No Correction' => 'Messung ohne Differentialkorrektur', }, }, 'GPSImgDirection' => 'Bildrichtung', 'GPSImgDirectionRef' => { Description => 'Referenz für die Ausrichtung des Bildes', PrintConv => { 'Magnetic North' => 'Magnetische Ausrichtung', 'True North' => 'Geographische Ausrichtung', }, }, 'GPSInfo' => 'GPS Info IFD-Zeiger', 'GPSLatitude' => 'Geografische Breite', 'GPSLatitudeRef' => { Description => 'Nördl. oder südl. Breite', PrintConv => { 'North' => 'Nördliche Breite', 'South' => 'Südliche Breite', }, }, 'GPSLongitude' => 'Geografische Länge', 'GPSLongitudeRef' => { Description => 'östl. oder westl. Länge', PrintConv => { 'East' => 'Östliche Länge', 'West' => 'Westliche Länge', }, }, 'GPSMapDatum' => 'Geodätisches Datum', 'GPSMeasureMode' => { Description => 'GPS-Messverfahren', PrintConv => { '2-D' => '2-Dimensionale Messung', '2-Dimensional' => '2-Dimensionale Messung', '2-Dimensional Measurement' => '2-Dimensionale Messung', '3-D' => '3-Dimensionale Messung', '3-Dimensional' => '3-Dimensionale Messung', '3-Dimensional Measurement' => '3-Dimensionale Messung', }, }, 'GPSProcessingMethod' => 'Name der GPS-Verarbeitungsmethode', 'GPSSatellites' => 'Für die Messung verwendete Satelliten', 'GPSSpeed' => 'Geschwindigkeit des GPS-Empfängers', 'GPSSpeedRef' => { Description => 'Geschwindigkeitseinheit', PrintConv => { 'km/h' => 'Kilometer pro Stunde', 'knots' => 'Knoten', 'mph' => 'Meilen pro Stunde', }, }, 'GPSStatus' => { Description => 'GPS-Empfänger-Status', PrintConv => { 'Measurement Active' => 'Messung aktiv', 'Measurement Void' => 'Messung ungültig', }, }, 'GPSTimeStamp' => 'GPS-Zeit (Atomuhr)', 'GPSTrack' => 'Bewegungsrichtung', 'GPSTrackRef' => { Description => 'Referenz für Bewegungsrichtung', PrintConv => { 'Magnetic North' => 'Magnetische Ausrichtung', 'True North' => 'Geographische Ausrichtung', }, }, 'GPSVersionID' => 'GPS-Tag-Version', 'GainControl' => { Description => 'Belichtungsverstärkung', PrintConv => { 'High gain down' => 'Hohe Helligkeitsminderung', 'High gain up' => 'Hohe Helligkeitsverstärkung', 'Low gain down' => 'Geringe Helligkeitsminderung', 'Low gain up' => 'Geringe Helligkeitsverstärkung', 'None' => 'Keine', }, }, 'Gapless' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'Gradation' => { PrintConv => { 'Auto-Override' => 'Automatisch', 'High Key' => 'High-Key', 'Low Key' => 'Low-Key', 'User-Selected' => 'Benutzerauswahl', 'n/a' => '(nicht gesetzt)', }, }, 'GrayResponseUnit' => { PrintConv => { '0.0001' => 'Nummer stellt ein 1000tel einer Einheit dar', '0.001' => 'Nummer stellt ein 100tel einer Einheit dar', '0.1' => 'Nummer stellt ein 10tel einer Einheit dar', '1e-05' => 'Nummer stellt ein 10000tel einer Einheit dar', '1e-06' => 'Nummer stellt ein 100000tel einer Einheit dar', }, }, 'GrayTRC' => 'Grau-Tonwertwiedergabe-Kurve', 'GreenAdjust' => 'Grün-Korrektur', 'GreenMatrixColumn' => 'Grün-Matrixspalte', 'GreenTRC' => 'Grün-Tonwertwiedergabe-Kurve', 'GreenX' => 'Grünpunkt X', 'GreenY' => 'Grünpunkt Y', 'GridDisplay' => { Description => 'Gitterlinien', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'GripBatteryADLoad' => 'Griffbatterie A/D unter Last', 'GripBatteryADNoLoad' => 'Griffbatterie A/D im Leerlauf', 'GripBatteryState' => { Description => 'Griffbatterie-Status', PrintConv => { 'Almost Empty' => 'Fast leer', 'Empty or Missing' => 'Leer oder nicht vorhanden', 'Full' => 'Voll geladen', 'Running Low' => 'Schwach', }, }, 'Grouping' => 'Gruppierung', 'HDR' => { Description => 'Auto HDR', PrintConv => { 'Off' => 'Aus', }, }, 'HDRImageType' => { Description => 'HDR Bildtyp', PrintConv => { 'HDR Image' => 'HDR Bild', 'Original Image' => 'Originalbild', }, }, 'Headline' => 'Überschrift', 'HeightResolution' => 'Vertikale Bildauflösung', 'HierarchicalSubject' => 'Hierarchische Schlüsselworte', 'HighISONoiseReduction' => { Description => 'Rauschunterdrückung bei hoher Empfindlichkeit', PrintConv => { 'Auto' => 'Automatisch', 'High' => 'Stärker', 'Low' => 'Schwächer', 'Off' => 'Aus', 'On' => 'Ein', 'Strong' => 'Stark', 'Weak' => 'Gering', 'Weakest' => 'Sehr gering', 'n/a' => '(nicht gesetzt)', }, }, 'HighISONoiseReduction2' => { Description => 'Rauschunterdrückung bei hoher Empfindlichkeit', PrintConv => { 'High' => 'Hoch', 'Low' => 'Niedrig', 'Off' => 'Aus', 'n/a' => '(nicht gesetzt)', }, }, 'HighLowKeyAdj' => 'High-/Low-Key Abstimmung', 'Highlight' => 'Helle Stellen', 'HighlightTonePriority' => { Description => 'Tonwert Priorität', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', 'Off' => 'Aus', 'On' => 'Ein', }, }, 'HometownCity' => 'Heimatort', 'HometownCityCode' => 'Heimatort-Code', 'HometownDST' => { Description => 'Heimatort Sommerzeit (DST)', PrintConv => { 'No' => 'Deaktiviert', 'Yes' => 'Aktiviert', }, }, 'Hue' => 'Farbton', 'HueAdj' => 'Farbtonkorrektur', 'HueAdjust' => { Description => 'Farbtonkorrektur', PrintConv => { 'Cool' => 'Kühl', 'Off' => 'Aus', 'Yellow' => 'Gelb', }, }, 'HueAdjustment' => 'Farbtonkorrektur', 'HueSetting' => 'Farbtoneinstellung', 'HuffmanTable' => 'Huffman Tabelle', 'HyperfocalDistance' => 'Hyperfokale Entfernung', 'ICCProfile' => 'ICC-Profil', 'ICCProfileName' => 'Name des ICC-Profils', 'ICC_Profile' => 'ICC-Profil', 'ID3Size' => 'ID3 Datenlänge', 'IDCCreativeStyle' => { PrintConv => { 'Autumn Leaves' => 'Herbstlaub', 'B&W' => 'Schwarz/Weiß', 'Landscape' => 'Landschaft', 'Night View' => 'Abendszene', 'Portrait' => 'Porträt', 'Sunset' => 'Sonnenuntergang', }, }, 'IDCPreviewImage' => 'IDC Vorschaubild', 'IDCPreviewLength' => 'IDC Vorschaubild-Datenlänge', 'IDCPreviewStart' => 'IDC Vorschaubild-Datenposition', 'IPTC-NAA' => 'IPTC-NAA Metadaten', 'IPTCDigest' => 'IPTC Kennwert', 'IPTCImageHeight' => 'IPTC-Bildhöhe', 'IPTCImageRotation' => { Description => 'IPTC Bildausrichtung', PrintConv => { '0' => 'Normal', '180' => '180° gedreht', '270' => '90° gegen den Uhrzeigersinn', '90' => '90° im Uhrzeigersinn', }, }, 'IPTCImageWidth' => 'IPTC-Bildbreite', 'IPTCPictureNumber' => 'IPTC Bildnummer', 'IPTCPixelHeight' => 'IPTC-Pixelhöhe', 'IPTCPixelWidth' => 'IPTC-Pixelbreite', 'ISO' => 'ISO-Empfindlichkeit', 'ISO2' => 'ISO-Empfindlichkeit (2)', 'ISOAuto' => 'ISO-Automatik', 'ISODisplay' => 'ISO-Anzeige', 'ISOExpansion' => { Description => 'ISO-Erweiterung', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ISOExpansion2' => { Description => 'ISO-Erweiterung (2)', PrintConv => { 'Off' => 'Aus', }, }, 'ISOFloor' => 'ISO-Untergrenze', 'ISOInfo' => 'ISO-Informationen', 'ISOSelection' => 'ISO-Auswahl', 'ISOSetting' => { Description => 'ISO-Einstellung', PrintConv => { '200 (Zone Matching High)' => '200 (Zonenabgleich High)', '80 (Zone Matching Low)' => '80 (Zonenabgleich Low)', 'Auto' => 'Automatisch', 'Manual' => 'Manuell', 'n/a' => '(nicht gesetzt)', }, }, 'ISOSpeedExpansion' => { Description => 'ISO-Erweiterung', PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'ISOSpeedIncrements' => { Description => 'ISO-Schrittweite', PrintConv => { '1 Stop' => '1 LW', '1/3 Stop' => '1/3 LW', }, }, 'ISOSpeedRange' => { Description => 'Einstellung ISO-Bereich', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', }, }, 'ISOStepSize' => { Description => 'ISO-Schrittweite', PrintConv => { '1 EV' => '1 LW', '1/2 EV' => '1/2 LW', '1/3 EV' => '1/3 LW', }, }, 'ISRCNumber' => 'ISRC Nummer', 'Illumination' => { Description => 'Displaybeleuchtung', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'Image::ExifTool::APP12::PictureInfo' => 'APP12 Bildinformation', 'Image::ExifTool::Canon::AFMicroAdj' => 'Canon AF Feinabstimmung', 'Image::ExifTool::Canon::CameraInfo1000D' => 'Canon KameraInfo 1000D', 'Image::ExifTool::Canon::CameraInfo1D' => 'Canon KameraInfo 1D', 'Image::ExifTool::Canon::CameraInfo1DX' => 'Canon KameraInfo 1DX', 'Image::ExifTool::Canon::CameraInfo1DmkII' => 'Canon KameraInfo 1DmkII', 'Image::ExifTool::Canon::CameraInfo1DmkIII' => 'Canon KameraInfo 1DmkIII', 'Image::ExifTool::Canon::CameraInfo1DmkIIN' => 'Canon KameraInfo 1DmkIIN', 'Image::ExifTool::Canon::CameraInfo1DmkIV' => 'Canon KameraInfo 1DmkIV', 'Image::ExifTool::Canon::CameraInfo40D' => 'Canon KameraInfo 40D', 'Image::ExifTool::Canon::CameraInfo450D' => 'Canon KameraInfo 450D', 'Image::ExifTool::Canon::CameraInfo500D' => 'Canon KameraInfo 500D', 'Image::ExifTool::Canon::CameraInfo50D' => 'Canon KameraInfo 50D', 'Image::ExifTool::Canon::CameraInfo550D' => 'Canon KameraInfo 550D', 'Image::ExifTool::Canon::CameraInfo5D' => 'Canon KameraInfo 5D', 'Image::ExifTool::Canon::CameraInfo5DmkII' => 'Canon KameraInfo 5DmkII', 'Image::ExifTool::Canon::CameraInfo5DmkIII' => 'Canon KameraInfo 5DmkIII', 'Image::ExifTool::Canon::CameraInfo600D' => 'Canon KameraInfo 600D', 'Image::ExifTool::Canon::CameraInfo60D' => 'Canon KameraInfo 60D', 'Image::ExifTool::Canon::CameraInfo650D' => 'Canon KameraInfo 650D', 'Image::ExifTool::Canon::CameraInfo7D' => 'Canon KameraInfo 7D', 'Image::ExifTool::Canon::CameraInfoPowerShot' => 'Canon KameraInfo PowerShot', 'Image::ExifTool::Canon::CameraInfoPowerShot2' => 'Canon KameraInfo PowerShot2', 'Image::ExifTool::Canon::CameraInfoUnknown32' => 'Canon KameraInfo Unbekannt32', 'Image::ExifTool::Canon::CropInfo' => 'Canon Crop Info', 'Image::ExifTool::CanonRaw::ImageFormat' => 'CanonRaw Bildformat', 'Image::ExifTool::DNG::OriginalRaw' => 'DNG Original RAW', 'Image::ExifTool::ICC_Profile::Measurement' => 'ICC_Profil Messung', 'Image::ExifTool::IPTC::ApplicationRecord' => 'IPTC Modell', 'Image::ExifTool::Jpeg2000::FileType' => 'Jpeg2000 Dateityp', 'Image::ExifTool::Jpeg2000::ImageHeader' => 'Jpeg2000 Bild-Header', 'Image::ExifTool::Kodak::CameraInfo' => 'Kodak KameraInfo', 'Image::ExifTool::MIE::Meta' => 'MIE Metadaten', 'Image::ExifTool::Minolta::CameraInfoA100' => 'Minolta KameraInfo A100', 'Image::ExifTool::Olympus::CameraSettings' => 'Olympus Kameraeinstellungen', 'Image::ExifTool::Olympus::FocusInfo' => 'Olympus FokusInfo', 'Image::ExifTool::Olympus::ImageProcessing' => 'Olympus Bildverarbeitung', 'Image::ExifTool::PNG::ImageHeader' => 'PNG Bild-Header', 'Image::ExifTool::PNG::PhysicalPixel' => 'PNG physikalische Pixel', 'Image::ExifTool::PNG::PrimaryChromaticities' => 'PNG primäre Chromatizität', 'Image::ExifTool::PNG::StereoImage' => 'PNG Stereobild', 'Image::ExifTool::PNG::TextualData' => 'PNG Textdaten', 'Image::ExifTool::PNG::VirtualPage' => 'PNG virtuelle Seite', 'Image::ExifTool::PSP::Creator' => 'PSP Ersteller', 'Image::ExifTool::Pentax::CameraInfo' => 'Pentax KameraInfo', 'Image::ExifTool::Sony::CameraInfo' => 'Sony KameraInfo', 'Image::ExifTool::Sony::CameraInfo2' => 'Sony KameraInfo2', 'ImageAdjustment' => 'Bildanpassung', 'ImageAreaOffset' => 'Bildbereichsoffset', 'ImageAuthentication' => { Description => 'Bild-Authentifikation', PrintConv => { 'Off' => 'Aus', 'On' => 'An', }, }, 'ImageBoundary' => 'Bildbegrenzung', 'ImageByteCount' => 'Anzahl Bytes der Bilddaten', 'ImageCount' => 'Bildzähler', 'ImageDataDiscard' => { Description => 'Verworfene Bilddaten', PrintConv => { 'Flexbits Discarded' => 'FlexBits verworfen', 'Full Resolution' => 'Volle Auflösung', 'HighPass Frequency Data Discarded' => 'Hochpass-Frequenz-Daten verworfen', 'Highpass and LowPass Frequency Data Discarded' => 'Hochpass- und Tiefpass-Frequenz-Daten verworfen', }, }, 'ImageDataSize' => 'Bilddatengröße', 'ImageDescription' => 'Bildbeschreibung', 'ImageDustOff' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ImageEditCount' => 'Bildverarbeitungszähler', 'ImageEditing' => { Description => 'Bildverarbeitung', PrintConv => { 'Cropped' => 'Beschnitten', 'Digital Filter' => 'Digitalfilter', 'Frame Synthesis?' => 'Rahmen?', 'None' => 'Unbearbeitet', }, }, 'ImageEffects' => { PrintConv => { 'High Key' => 'High-Key', }, }, 'ImageGeneration' => { Description => 'Bilderstellung', PrintConv => { 'Original Image' => 'Originalbild', 'Re-developed from RAW' => 'RAW generiert', }, }, 'ImageHeight' => 'Bildhöhe', 'ImageHistory' => 'Bild-Historie', 'ImageLength' => 'Bild-Datenlänge', 'ImageNumber' => 'Bildnummer', 'ImageNumber2' => 'Bildnummer (2)', 'ImageOffset' => 'Bilddatenposition', 'ImageOptimization' => 'Bildoptimierung', 'ImageOrientation' => { Description => 'Bildausrichtung', PrintConv => { 'Landscape' => 'Querformat', 'Portrait' => 'Porträt', 'Square' => 'Quadratisch', }, }, 'ImageProcessing' => 'Bildverarbeitung', 'ImageProcessingVersion' => 'Bildverarbeitung Version', 'ImageQuality' => { Description => 'Bildqualität', PrintConv => { 'High' => 'Hoch', }, }, 'ImageQuality2' => 'Bildqualität 2', 'ImageReview' => { Description => 'Bildkontrolle', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ImageReviewTime' => 'Ausschaltzeit Bildkontrolle', 'ImageRotated' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'ImageRotation' => { Description => 'Bildausrichtung', PrintConv => { 'None' => 'Keine', }, }, 'ImageSize' => 'Bildgröße', 'ImageStabilization' => { Description => 'Bildstabilisierung', PrintConv => { 'Anti-Shake' => 'Verwackeln', 'Best Shot' => 'Beste Aufnahme', 'CCD Shift + High Sensitivity' => 'CCD Shift + Hohe Empfindlichkeit', 'Dynamic' => 'Dynamisch', 'Dynamic (2)' => 'Dynamisch (2)', 'High Sensitivity' => 'Hohe Empfindlichkeit', 'None' => 'Keine', 'Off' => 'Aus', 'Off (0xbf)' => 'Aus (0xbf)', 'Off (1)' => 'Aus (1)', 'Off (2)' => 'Aus (2)', 'On' => 'Ein', 'On (0x3f)' => 'Ein (0x3f)', 'On (2)' => 'Ein (2)', 'On (mode 1, continuous)' => 'Ein (Modus 1, nachführend)', 'On (mode 2, shooting only)' => 'Ein (Modus 2, Aufnahme)', 'On, Mode 1' => 'Ein, Modus 1', 'On, Mode 2' => 'Ein, Modus 2', 'On, Mode 3' => 'Ein, Modus 3', 'On, Mode 4' => 'Ein, Modus 4', 'Optical' => 'Optisch', 'Panning' => 'Schwenken', 'Panning (2)' => 'Schwenken (2)', 'Sensor-shift' => 'Sensor-Shift', 'Shoot Only' => 'Aufnahme', 'Shoot Only (2)' => 'Aufnahme (2)', 'Slow Shutter' => 'Kurzer Verschluß', 'n/a' => '(nicht gesetzt)', }, }, 'ImageStabilizationSetting' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ImageStyle' => { PrintConv => { 'B&W' => 'Schwarz/Weiß', 'Landscape' => 'Landschaft', 'Night View/Portrait' => 'Abendszene/Porträt', 'Portrait' => 'Porträt', 'Sunset' => 'Sonnenuntergang', }, }, 'ImageTone' => { Description => 'Farbdynamik', PrintConv => { 'Bright' => 'Leuchtend', 'Landscape' => 'Landschaft', 'Monochrome' => 'Monochrom', 'Natural' => 'Natürlich', 'Portrait' => 'Porträt', }, }, 'ImageType' => { Description => 'Bildtyp', PrintConv => { 'Page' => 'Seite', 'Preview' => 'Vorschau', }, }, 'ImageUIDList' => 'Bilder UID Liste', 'ImageUniqueID' => 'Eindeutige Bild-ID', 'ImageWidth' => 'Bildbreite', 'InfoButtonWhenShooting' => { Description => 'INFO-Taste bei Aufnahme', PrintConv => { 'Displays camera settings' => 'Anzeige Kameradaten', 'Displays shooting functions' => 'Anzeige Aufnahmedaten', }, }, 'InitialZoomSetting' => { Description => 'Erste Vergrößerungsstufe', PrintConv => { 'High Magnification' => 'Starke Vergrößerung', 'Low Magnification' => 'Geringe Vergrößerung', 'Medium Magnification' => 'Mittlere Vergrößerung', }, }, 'Instructions' => 'Anweisungen', 'IntellectualGenre' => 'Genre', 'IntelligentAuto' => { PrintConv => { 'Advanced' => 'Erweitert', 'Off' => 'Aus', 'On' => 'Ein', }, }, 'IntelligentContrast' => { Description => 'Intelligenter Kontrast', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', 'n/a' => '(nicht gesetzt)', }, }, 'IntelligentD-Range' => { Description => 'Intelligenter D-Bereich', PrintConv => { 'High' => 'Hoch', 'Low' => 'Niedrig', 'Off' => 'Aus', }, }, 'IntelligentExposure' => { Description => 'Intelligente Belichtung', PrintConv => { 'High' => 'Hoch', 'Low' => 'Niedrig', 'Off' => 'Aus', }, }, 'IntelligentResolution' => { Description => 'Intelligente Bildauflösung', PrintConv => { 'Extended' => 'Erweitert', 'High' => 'Hoch', 'Low' => 'Niedrig', 'Off' => 'Aus', }, }, 'IntensityStereo' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'InternalFlash' => { Description => 'Integriertes Blitzgerät', PrintConv => { 'Commander Mode' => 'Master-Steuerung', 'Fired' => 'Blitz wurde ausgelöst', 'Manual' => 'Manuell', 'No' => 'Blitz wurde nicht ausgelöst', 'Off' => 'Aus', 'On' => 'Ein', 'Repeating Flash' => 'Stroboskopblitz', }, }, 'InternalFlashAE1' => 'Integriertes Blitzgerät AE1', 'InternalFlashAE1_0' => 'Integriertes Blitzgerät AE1 0', 'InternalFlashAE2' => 'Integriertes Blitzgerät AE2', 'InternalFlashAE2_0' => 'Integriertes Blitzgerät AE2 0', 'InternalFlashMode' => { Description => 'Slave-Blitz-Messfeld 2', PrintConv => { 'Did not fire, (Unknown 0xf4)' => 'Aus (Unbekannt 0xF4?)', 'Did not fire, Auto' => 'Aus, Auto', 'Did not fire, Auto, Red-eye reduction' => 'Aus, Auto, Rote-Augen-Reduzierung', 'Did not fire, Normal' => 'Aus, Normal', 'Did not fire, Red-eye reduction' => 'Aus, Rote-Augen-Reduzierung', 'Did not fire, Slow-sync' => 'Aus, Langzeit-Synchronisation', 'Did not fire, Slow-sync, Red-eye reduction' => 'Aus, Langzeit-Synchronisation, Rote-Augen-Reduzierung', 'Did not fire, Trailing-curtain Sync' => 'Aus, 2. Verschlussvorhang', 'Did not fire, Wireless (Control)' => 'Aus, Drahtlos (Steuerblitz)', 'Did not fire, Wireless (Master)' => 'Aus, Drahtlos (Hauptblitz)', 'Fired' => 'Ein', 'Fired, Auto' => 'Ein, Auto', 'Fired, Auto, Red-eye reduction' => 'Ein, Auto, Rote-Augen-Reduzierung', 'Fired, Red-eye reduction' => 'Ein, Rote-Augen-Reduzierung', 'Fired, Slow-sync' => 'Ein, Langzeit-Synchronisation', 'Fired, Slow-sync, Red-eye reduction' => 'Ein, Langzeit-Synchronisation, Rote-Augen-Reduzierung', 'Fired, Trailing-curtain Sync' => 'Ein, 2. Verschlussvorhang', 'Fired, Wireless (Control)' => 'Ein, Drahtlos (Steuerblitz)', 'Fired, Wireless (Master)' => 'Ein, Drahtlos (Hauptblitz)', 'n/a - Off-Auto-Aperture' => 'K/A - Blendenring nicht auf A', }, }, 'InternalFlashStrength' => 'Slave-Blitz-Messfeld 4', 'InternalName' => 'Interner Name', 'InternalSerialNumber' => 'Interne Seriennummer', 'InteropIndex' => { Description => 'Interoperabilitäts-Identifikation', PrintConv => { 'R03 - DCF option file (Adobe RGB)' => 'R03: DCF Option-Format (Adobe RGB)', 'R98 - DCF basic file (sRGB)' => 'R98: DCF Basic-Format (sRGB)', 'THM - DCF thumbnail file' => 'THM: DCF Miniaturbild-Format', }, }, 'InteropOffset' => 'Interoperabilitäts-Tag', 'InteropVersion' => 'Interoperabilitäts-Version', 'IntervalLength' => 'Intervallänge', 'IntervalMode' => { Description => 'Interval-Modus', PrintConv => { 'Still Image' => 'Standbild', 'Time-lapse Movie' => 'Zeitraffer-Film', }, }, 'IntervalNumber' => 'Intervalnummer', 'IsCustomPictureStyle' => { Description => 'Bildstil benutzerdefinert', PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'JFIFVersion' => 'JFIF-Version', 'JPEGDigest' => 'JPEG Kennwert', 'JPEGProc' => { Description => 'JPEG Verfahren', PrintConv => { 'Lossless' => 'Verlustfrei', }, }, 'JPEGQuality' => { Description => 'Bildqualität', PrintConv => { 'Extra Fine' => 'Extra-Fein', 'Fine' => 'Fein', 'Standard' => 'Standardqualität', 'n/a' => '(nicht gesetzt)', }, }, 'JPEGSize' => 'JPEG Größe', 'JPEGTables' => 'JPEG Tabellen', 'JobID' => 'Job-ID', 'JpgFromRaw' => 'Jpg From Raw Bild', 'JpgFromRawLength' => 'Jpg From Raw Datenlänge', 'JpgFromRawStart' => 'Jpg From Raw Datenposition', 'JpgRecordedPixels' => 'JPEG-Auflösung', 'Key' => 'Schlüssel', 'Keyword' => 'Schlüsselwort', 'Keywords' => 'Schlüsselwort', 'KodakImageHeight' => 'Kodak-Bildhöhe', 'KodakImageWidth' => 'Kodak-Bildbreite', 'LC1' => 'Objektiv-Wert', 'LC10' => 'Mv\' nv\'-Daten', 'LC11' => 'AVC 1/EXP-Wert', 'LC12' => 'Mv1 Avminsif-Wert', 'LC14' => 'UNT_12 UNT_6-Wert', 'LC15' => 'Incorporated Flash Suited END-Wert', 'LC2' => 'Entfernungscode', 'LC3' => 'K-Wert (LC3)', 'LC4' => 'Wert für Aberrationskorrektur im Nahbereich', 'LC5' => 'Wert für Aberrationskorrektur heller Farben', 'LC6' => 'Wert für Aberrationskorrektur bei offener Blende', 'LC7' => 'AF Minimum Actuation Condition-Wert', 'LCDDisplayAtPowerOn' => { Description => 'LCD-Display bei Kamera Ein', PrintConv => { 'Retain power off status' => 'Aus-Status beibehalten', }, }, 'LCDDisplayReturnToShoot' => { Description => 'LC-Display->Zurück zur Aufn.', PrintConv => { 'Also with * etc.' => 'Auch mit * etc.', 'With Shutter Button only' => 'Nur mit Auslöser', }, }, 'LCDIllumination' => { Description => 'Displaybeleuchtung', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'LCDIlluminationDuringBulb' => { Description => 'LCD-Beleuchtung bei Langzeitaufnahme', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'LCDPanels' => 'LCD oben/LCD Rückwand', 'LCHEditor' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'Label' => 'Bezeichnung', 'Landmark' => 'Sehenswürdigkeit', 'Language' => 'Sprache', 'LanguageCode' => { Description => 'Sprache', PrintConv => { 'Process default' => 'Systemeinstellung', }, }, 'LanguageIdentifier' => 'Sprachkennung', 'LastFileNumber' => 'Letzte Dateinummer', 'LastKeywordIPTC' => 'Letztes IPTC Schlüsselwort', 'LastKeywordXMP' => 'Letztes XMP Schlüsselwort', 'LateralChromaticAberration' => { Description => 'Laterale Farbabweichung', PrintConv => { 'Off' => 'Aus', 'n/a' => '(nicht gesetzt)', }, }, 'LeafData' => 'Leaf Daten', 'LegacyIPTCDigest' => 'Bisheriger IPTC Kennwert', 'Lens' => 'Objektiv', 'Lens35efl' => 'Objektiv', 'LensAFStopButton' => { Description => 'Funktion Objektiv-AF-Stopptaste', PrintConv => { 'AE lock' => 'AE-Speicherung', 'AE lock while metering' => 'AE-Sperre b. aktiv. Messung', 'AF Stop' => 'AF-Stopp', 'AF point: M->Auto/Auto->ctr' => 'AF-Messf: M->Aut./Aut.->Ctr', 'AF start' => 'AF-Start', 'AF stop' => 'AF-Stopp', 'IS start' => 'Start Bildstabilisierung', 'Switch to registered AF point' => 'Auf gesp. AF-Messf. schalten', }, }, 'LensApertureRange' => 'Objektiv Blendenbereich', 'LensData' => 'K-Wert', 'LensDataVersion' => 'Objektivdaten-Version', 'LensDistortionParams' => 'Objektiv Verzeichnungsparameter', 'LensDriveNoAF' => { Description => 'Schärfensuche wenn AF unmöglich', PrintConv => { 'Focus search off' => 'Schärfensuche aus', 'Focus search on' => 'Schärfensuche ein', }, }, 'LensFStops' => 'Objektiv-Blendenstufen', 'LensFirmwareVersion' => 'Objektiv-Firmware-Version', 'LensID' => 'Objektiv-ID', 'LensIDNumber' => 'Objektivkennnummer', 'LensInfo' => 'Objektiv-Informationen', 'LensKind' => 'Objektivtyp / Version (LC0)', 'LensMake' => 'Objektivhersteller', 'LensManufacturer' => 'Objektivhersteller', 'LensMaxApertureRange' => 'Objektiv Blendenbereich', 'LensModel' => 'Objektiv-Typ', 'LensProfileDigest' => 'Kennwert des Objektivprofils', 'LensProperties' => 'Objektivfunktionen?', 'LensSerialNumber' => 'Objektiv-Seriennummer', 'LensSpec' => 'Objektiv', 'LensType' => { Description => 'Objektivtyp', PrintConv => { 'Uncoded lens' => 'Nicht kodiertes Objektiv', }, }, 'LevelOrientation' => { Description => 'Level Ausrichtung', PrintConv => { 'Downwards' => 'Abwärts', 'Horizontal; Off Level' => 'Horizontal; ohne Level', 'Rotate 180' => '180° gedreht', 'Rotate 180; Off Level' => '180° gedreht; ohne Level', 'Rotate 270 CW' => '90° gegen den Uhrzeigersinn', 'Rotate 270 CW; Off Level' => '90° gegen den Uhrzeigersinn; ohne Level', 'Rotate 90 CW' => '90° im Uhrzeigersinn', 'Rotate 90 CW; Off Level' => '90° im Uhrzeigersinn; ohne Level', 'Upwards' => 'Aufwärts', }, }, 'License' => 'Lizenz', 'LicenseType' => { Description => 'Lizenztyp', PrintConv => { 'Commercial' => 'Kommerziell', 'Unknown' => 'Unbekannt', }, }, 'LightReading' => 'Helligkeitsauswertung', 'LightSource' => { Description => 'Lichtquelle', PrintConv => { 'Cloudy' => 'Bewölkt', 'Cool White Fluorescent' => 'Neonlicht kaltweiß', 'Day White Fluorescent' => 'Neonlicht neutralweiß', 'Daylight' => 'Tageslicht', 'Daylight Fluorescent' => 'Neonlicht tageslichtweiß', 'Evening Sunlight' => 'Abendstimmung', 'Fine Weather' => 'Wolkenlos', 'Flash' => 'Blitz', 'Fluorescent' => 'Neonlicht', 'ISO Studio Tungsten' => 'ISO Studio-Kunstlicht (Glühbirne)', 'One Touch White Balance' => 'Sofort-Weißabgleich', 'Other' => 'Andere Lichtquelle', 'Shade' => 'Schatten', 'Standard Light A' => 'Standard-Licht A', 'Standard Light B' => 'Standard-Licht B', 'Standard Light C' => 'Standard-Licht C', 'Tungsten' => 'Glühbirne', 'Tungsten (Incandescent)' => 'Kunstlicht (Glühbirne)', 'Unknown' => 'Unbekannt', 'Warm White Fluorescent' => 'Neonlicht warmweiß', 'White Fluorescent' => 'Neonlicht universalweiß', }, }, 'LightSourceSpecial' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'LightValue' => 'Lichtwert(ISO)', 'Lightness' => 'Graustufung', 'LinearizationTable' => 'Linearisierungstabelle', 'Lit' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'LiveViewAFAreaMode' => { Description => 'Live-View AF-Modus', PrintConv => { 'Face-Priority' => 'Gesichtserkennung', 'NormalArea' => 'Normaler Bereich', 'SubjectTracking' => 'Objektnachführung', 'WideArea' => 'Großer Bereich', }, }, 'LiveViewAFMethod' => { PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'LiveViewAFMode' => 'Live-View AF-Modus', 'LiveViewAFSetting' => { Description => 'Live View AF Einstellung', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'LiveViewExposureSimulation' => { Description => 'Livebild-Belichtungssimulator', PrintConv => { 'Disable (LCD auto adjust)' => 'Inaktiv (automatische LCD-Anzeige)', 'Enable (simulates exposure)' => 'Aktiv (simuliert Belichtung)', }, }, 'LiveViewFocusMode' => { Description => 'Live-View Fokus-Modus', PrintConv => { 'Manual' => 'Manuell', 'n/a' => '(nicht gesetzt)', }, }, 'LiveViewMetering' => { PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'LiveViewShooting' => { Description => 'Live View Aufnahme', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'LocalizedCameraModel' => 'Lokalisiertes Kameramodell', 'Location' => 'Aufnahmeort', 'LockMicrophoneButton' => { Description => 'Mikrofone-Tastenfunktion', PrintConv => { 'Protect (hold:record memo)' => 'Geschützt (drücken:Tonaufnahme)', 'Record memo (protect:disable)' => 'Tonaufnahme (ungeschützt)', }, }, 'LongExposureNoiseReduction' => { Description => 'Langzeit-Rauschminderung', PrintConv => { 'Auto' => 'Automatisch', 'Off' => 'Aus', 'On' => 'Ein', 'n/a' => '(nicht gesetzt)', }, }, 'LongExposureNoiseReduction2' => { Description => 'Langzeit Rauschunterdrückung 2', PrintConv => { 'Off' => 'Aus', 'On' => 'An', 'On (1D)' => 'An (1D)', }, }, 'Luminance' => 'Luminanz', 'LuminanceNoiseReduction' => { PrintConv => { 'High' => 'Hoch', 'Low' => 'Leicht', 'Off' => 'Aus', }, }, 'MB-D10Batteries' => { Description => 'Akku-/Batterietyp', PrintConv => { 'FR6 (AA lithium)' => 'FR6 (Mignon, Lithium)', 'HR6 (AA Ni-MH)' => 'HR6 (Mignon, NiMH)', 'LR6 (AA alkaline)' => 'LR6 (Mignon, Alkaline)', 'ZR6 (AA Ni-Mn)' => 'ZR6 (Mignon, NiMn)', }, }, 'MB-D10BatteryType' => 'Akku-/Batterietyp', 'MB-D80Batteries' => { Description => 'Akku-/Batterietyp', PrintConv => { 'FR6 (AA Lithium)' => 'FR6 (Mignon-Lithium)', 'HR6 (AA Ni-MH)' => 'HR6 (Mignon-Ni-MH)', 'LR6 (AA Alkaline)' => 'LR6 (Mignon-Alkaline)', 'ZR6 (AA Ni-Mg)' => 'ZR6 (Mignon-Ni-Mg)', }, }, 'MB-D80BatteryType' => 'MB-D80 Batterietyp', 'MCUVersion' => 'MCU-Version', 'MD5Digest' => 'MD5 Kennwert', 'MIEVersion' => 'MIE-Version', 'MIMEType' => 'MIME-Typ', 'MPImage' => 'MP Vorschaubild', 'MPImageFlags' => 'MP Vorschaubild Flags', 'MPImageFormat' => 'MP Vorschaubild Format', 'MPImageLength' => 'MP Vorschaubild-Datenlänge', 'MPImageStart' => 'MP Vorschaubild Datenposition', 'MPImageType' => { Description => 'MP Vorschaubild Typ', PrintConv => { 'Large Thumbnail (VGA equivalent)' => 'Vorschaubild groß (VGA)', 'Large Thumbnail (full HD equivalent)' => 'Vorschaubild groß (HD)', 'Multi-frame Panorama' => 'Mehrbild Panorama', 'Undefined' => 'Nicht definiert', }, }, 'MSStereo' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'Macro' => { Description => 'Makro', PrintConv => { 'Macro' => 'Makro', 'Manual' => 'Manuell', 'Off' => 'Aus', 'On' => 'Ein', 'Super Macro' => 'Super-Makro', 'n/a' => '(nicht gesetzt)', }, }, 'MacroLED' => { Description => 'Makro LED', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'MacroMagnification' => 'Makro Vergrößerung', 'MacroMode' => { Description => 'Makro-Modus', PrintConv => { 'Macro' => 'Makro', 'Macro Zoom' => 'Makro-Zoom', 'Off' => 'Aus', 'On' => 'Ein', 'Super Macro' => 'Super-Makro', 'Tele-Macro' => 'Tele-Makro', }, }, 'MagicFilter' => { PrintConv => { 'Drawing' => 'Zeichnung', 'Fish Eye' => 'Fischauge', 'Off' => 'Aus', 'Reflection' => 'Reflektierung', 'Soft Focus' => 'Weichzeichner', 'Soft Focus 2' => 'Weichzeichner 2', 'Sparkle' => 'Perleffekt', 'Watercolor' => 'Wasserfarben', }, }, 'MagnifiedView' => { Description => 'Lupenfunktion', PrintConv => { 'Image playback only' => 'Nur bei Bildwiedergabe', 'Image review and playback' => 'Sofortbild u. Wiedergabe', }, }, 'MainDialExposureComp' => { Description => 'Main Dial Belichtungskorrektur', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'Make' => 'Gerätehersteller', 'MakeAndModel' => 'Hersteller und Modell', 'MakerNote' => 'Hersteller-eigene Daten', 'MakerNoteApple' => 'Herstellerdaten Apple', 'MakerNoteCanon' => 'Herstellerdaten Canon', 'MakerNoteCasio' => 'Herstellerdaten Casio', 'MakerNoteCasio2' => 'Herstellerdaten Casio 2', 'MakerNoteFLIR' => 'Herstellerdaten FLIR', 'MakerNoteFujiFilm' => 'Herstellerdaten Fuji Film', 'MakerNoteGE' => 'Herstellerdaten GE', 'MakerNoteGE2' => 'Herstellerdaten GE2', 'MakerNoteHP' => 'Herstellerdaten HP', 'MakerNoteHP2' => 'Herstellerdaten HP2', 'MakerNoteHP4' => 'Herstellerdaten HP4', 'MakerNoteHP6' => 'Herstellerdaten HP6', 'MakerNoteHasselblad' => 'Herstellerdaten Hasselblad', 'MakerNoteISL' => 'Herstellerdaten ISL', 'MakerNoteJVC' => 'Herstellerdaten JVC', 'MakerNoteJVCText' => 'Herstellerdaten JVC Text', 'MakerNoteKodak10' => 'Herstellerdaten Kodak 10', 'MakerNoteKodak1a' => 'Herstellerdaten Kodak 1a', 'MakerNoteKodak1b' => 'Herstellerdaten Kodak 1b', 'MakerNoteKodak2' => 'Herstellerdaten Kodak 2', 'MakerNoteKodak3' => 'Herstellerdaten Kodak 3', 'MakerNoteKodak4' => 'Herstellerdaten Kodak 4', 'MakerNoteKodak5' => 'Herstellerdaten Kodak 5', 'MakerNoteKodak6a' => 'Herstellerdaten Kodak 6a', 'MakerNoteKodak6b' => 'Herstellerdaten Kodak 6b', 'MakerNoteKodak7' => 'Herstellerdaten Kodak 7', 'MakerNoteKodak8a' => 'Herstellerdaten Kodak 8a', 'MakerNoteKodak8b' => 'Herstellerdaten Kodak 8b', 'MakerNoteKodak9' => 'Herstellerdaten Kodak 9', 'MakerNoteKodakUnknown' => 'Herstellerdaten Kodak Unbekannt', 'MakerNoteKyocera' => 'Herstellerdaten Kyocera', 'MakerNoteLeica' => 'Herstellerdaten Leica', 'MakerNoteLeica2' => 'Herstellerdaten Leica 2', 'MakerNoteLeica3' => 'Herstellerdaten Leica 3', 'MakerNoteLeica4' => 'Herstellerdaten Leica 4', 'MakerNoteLeica5' => 'Herstellerdaten Leica 5', 'MakerNoteLeica6' => 'Herstellerdaten Leica 6', 'MakerNoteMinolta' => 'Herstellerdaten Minolta', 'MakerNoteMinolta2' => 'Herstellerdaten Minolta 2', 'MakerNoteMinolta3' => 'Herstellerdaten Minolta 3', 'MakerNoteNikon' => 'Herstellerdaten Nikon', 'MakerNoteNikon2' => 'Herstellerdaten Nikon 2', 'MakerNoteNikon3' => 'Herstellerdaten Nikon 3', 'MakerNoteOlympus' => 'Herstellerdaten Olympus', 'MakerNoteOlympus2' => 'Herstellerdaten Olympus 2', 'MakerNotePanasonic' => 'Herstellerdaten Panasonic', 'MakerNotePanasonic2' => 'Herstellerdaten Panasonic 2', 'MakerNotePentax' => 'Herstellerdaten Pentax', 'MakerNotePentax2' => 'Herstellerdaten Pentax 2', 'MakerNotePentax3' => 'Herstellerdaten Pentax 3', 'MakerNotePentax4' => 'Herstellerdaten Pentax 4', 'MakerNotePentax5' => 'Herstellerdaten Pentax 5', 'MakerNotePentax6' => 'Herstellerdaten Pentax 6', 'MakerNotePhaseOne' => 'Herstellerdaten Phase One', 'MakerNoteReconyx' => 'Herstellerdaten Reconyx', 'MakerNoteRicoh' => 'Herstellerdaten Ricoh', 'MakerNoteRicohText' => 'Herstellerdaten Ricoh Text', 'MakerNoteSafety' => { Description => 'Sicherheit der Hersteller-Informationsdaten', PrintConv => { 'Safe' => 'Sicher', 'Unsafe' => 'Unsicher', }, }, 'MakerNoteSamsung1a' => 'Herstellerdaten Samsung 1a', 'MakerNoteSamsung1b' => 'Herstellerdaten Samsung 1b', 'MakerNoteSamsung2' => 'Herstellerdaten Samsung 2', 'MakerNoteSanyo' => 'Herstellerdaten Sanyo', 'MakerNoteSanyoC4' => 'Herstellerdaten Sanyo C4', 'MakerNoteSanyoPatch' => 'Herstellerdaten Sanyo Patch', 'MakerNoteSigma' => 'Herstellerdaten Sigma', 'MakerNoteSony' => 'Herstellerdaten Sony', 'MakerNoteSony2' => 'Herstellerdaten Sony 2', 'MakerNoteSony3' => 'Herstellerdaten Sony 3', 'MakerNoteSony4' => 'Herstellerdaten Sony 4', 'MakerNoteSony5' => 'Herstellerdaten Sony 5', 'MakerNoteSonyEricsson' => 'Herstellerdaten Sony Ericsson', 'MakerNoteSonySRF' => 'Herstellerdaten Sony SRF', 'MakerNoteType' => 'Benutzerdaten Typ', 'MakerNoteUnknown' => 'Herstellerdaten Unbekannt', 'MakerNoteUnknownBinary' => 'Herstellerdaten Unbekannt-Binär', 'MakerNoteUnknownText' => 'Herstellerdaten Unbekannt-Text', 'MakerNoteVersion' => 'MakerNote-Version', 'MakerNotes' => 'Hinweise des Herstellers', 'ManometerPressure' => 'Gemessener Luft- bzw. Wasserdruck', 'ManometerReading' => 'Berechnete Höhe oder Tauchtiefe', 'ManualAFPointSelectPattern' => 'Manuelle Wahl der AF-Punkte', 'ManualFlash' => 'Manueller Blitz', 'ManualFlashOutput' => { Description => 'Manuelle Blitzstärke', PrintConv => { 'Full' => 'Voll', 'Low' => 'Gering', 'Medium' => 'Mittel', 'n/a' => '(nicht gesetzt)', }, }, 'ManualFlashStrength' => 'Manuelle Blitzstärke', 'ManualFocusDistance' => 'Manuelle Fokusdistanz', 'ManualTv' => { Description => 'Manuelle Tv/Av-Einstellung für Manuelle Belichtung', PrintConv => { 'Tv=Control/Av=Main' => 'Tv=Schnelleinstellrad/Av=Haupt-Wahlrad', 'Tv=Main/Av=Control' => 'Tv=Haupt-Wahlrad/Av=Schnelleinstellrad', }, }, 'ManufactureDate' => 'Herstellungsdatum', 'Marked' => 'Markiert', 'MasterDocumentID' => 'ID des Originaldokuments', 'MaxAperture' => 'Größte Blende', 'MaxApertureAtCurrentFocal' => 'Größte Blende bei aktueller Brennweite', 'MaxApertureAtMaxFocal' => 'Größte Blende bei größter Brennweite', 'MaxApertureAtMinFocal' => 'Größte Blende bei geringster Brennweite', 'MaxApertureValue' => 'Größtmögliche Blende', 'MaxContinuousRelease' => 'Max. Bildanzahl pro Serie', 'MaxFocalLength' => 'Größte Brennweite', 'MaxJPEGTableIndex' => 'Größter Index JPEG Tabellen', 'MaxSampleValue' => 'Größter Sample Wert', 'MeasuredEV' => 'Gemessener LW', 'MeasuredLV' => 'Lichtwert gemessen', 'MeasuredRGGB' => 'Messung RGGB', 'MeasuredRGGBData' => 'Messung RGGB', 'MeasurementBacking' => 'Basis der Messung', 'MeasurementFlare' => 'Messung Lichtschein', 'MeasurementGeometry' => { Description => 'Geometrie der Messung', PrintConv => { '0/45 or 45/0' => '0/45 oder 45/0', '0/d or d/0' => '0/d oder d/0', }, }, 'MeasurementIlluminant' => 'Messung Beleuchtung', 'MeasurementObserver' => 'Messung nach', 'MediaBlackPoint' => 'Medium-Schwarzpunkt', 'MediaWhitePoint' => 'Medium-Weißpunkt', 'MenuButtonDisplayPosition' => { Description => 'Positionsanzeige Menuetaste', PrintConv => { 'Previous' => 'Vorherige Anzeige', 'Previous (top if power off)' => 'Vorherige (Anfang nach AUS)', 'Top' => 'Oben', }, }, 'MenuButtonReturn' => { PrintConv => { 'Previous' => 'Vorherige Anzeige', 'Top' => 'Oben', }, }, 'MetadataCreator' => 'Metadaten Ersteller', 'MetadataDate' => 'Datum der Metadaten', 'MetadataID' => 'Metadaten ID', 'Metering' => { Description => 'Belichtungsmessung', PrintConv => { 'Center-weighted' => 'Mittenbetont', 'Matrix' => 'Matrixmessung', 'Spot' => 'Spotmessung', }, }, 'MeteringMode' => { Description => 'Belichtungsmessmethode', PrintConv => { 'Average' => 'Integralmessung', 'Center-weighted Average' => 'Mittenbetont', 'Center-weighted average' => 'Mittenbetont', 'Default' => 'System', 'Evaluative' => 'Mehrfeldmessung', 'Multi-segment' => 'Multi-Segment', 'Multi-spot' => 'MultiSpot', 'Other' => 'Andere', 'Partial' => 'Teilbild', 'Spot' => 'Spotmessung', 'Spot+Highlight control' => 'Spot+Helligkeitsbetont', 'Spot+Shadow control' => 'Spot+Schattenbetont', 'Unknown' => 'Unbekannt', }, }, 'MeteringMode2' => { Description => 'Belichtungs-Messmethode 2', PrintConv => { 'Center-weighted average' => 'Mittenbetont', 'Multi-segment' => 'Multi-Segment', }, }, 'MeteringMode3' => { Description => 'Belichtungs-Messmethode (3)', PrintConv => { 'Multi-segment' => 'Multi-Segment', }, }, 'MeteringTime' => { Description => 'Ausschaltzeit Belichtungsmesser', PrintConv => { 'No Limit' => 'Unbegrenzt', }, }, 'MinAperture' => 'Kleinste Blende', 'MinApertureValue' => 'Kleinste Blende', 'MinFocalLength' => 'Kleinste Brennweite', 'MinSampleValue' => 'Kleinster Sample Wert', 'MiniatureFilterOrientation' => { PrintConv => { 'Vertical' => 'Vertikal', }, }, 'MinoltaCameraSettings2' => 'Kameraeinstellungen 2', 'MinoltaCameraSettings5D' => 'Kameraeinstellungen (5D)', 'MinoltaCameraSettings7D' => 'Kameraeinstellungen (7D)', 'MinoltaDate' => 'Minolta-Datum', 'MinoltaImageSize' => { Description => 'Minolta-Bildgröße', PrintConv => { 'Full' => 'Volle Größe', 'Large' => 'Groß', 'Medium' => 'Mittelgroß', 'Small' => 'Klein', }, }, 'MinoltaMakerNote' => 'Minolta-Herstellerinformationen', 'MinoltaModelID' => 'Minolta-Modell', 'MinoltaQuality' => { Description => 'Minolta-Bildqualität', PrintConv => { 'Extra Fine' => 'Extra-Fein', 'Fine' => 'Fein', 'RAW+JPEG' => 'RAW + JPEG', 'Super Fine' => 'Super-Fein', }, }, 'MinoltaTime' => 'Minolta-Zeit', 'MirrorLockup' => { Description => 'Spiegelverriegelung', PrintConv => { 'Disable' => 'Ausgeschaltet', 'Enable' => 'Eingeschaltet', 'Enable: Down with Set' => 'Eingeschaltet: Abwärts mit SET (Taste)', }, }, 'ModeDialPosition' => { PrintConv => { 'Aperture-priority AE' => 'Blendenpriorität', 'Manual' => 'Manuell', 'No Flash' => 'Kein Blitz', 'Program AE' => 'Programmautomatik', 'Shutter speed priority AE' => 'Verschlußpriorität', }, }, 'Model' => 'Kameramodell', 'Model2' => 'Kameramodell (2)', 'ModelingFlash' => { Description => 'Einstelllicht', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ModifiedColorTemp' => 'Geänderte Farbtemperatur', 'ModifiedDigitalGain' => 'Digitale Verstärkung geändert', 'ModifiedPictureStyle' => { Description => 'Geänderter Bildstil', PrintConv => { 'Faithful' => 'Natürlich', 'Landscape' => 'Landschaft', 'Monochrome' => 'Monochrom', 'None' => 'Keiner', 'Portrait' => 'Porträt', 'User Def. 1' => 'Benutzerdefiniert 1', 'User Def. 2' => 'Benutzerdefiniert 2', 'User Def. 3' => 'Benutzerdefiniert 3', }, }, 'ModifiedSaturation' => { PrintConv => { 'Off' => 'Aus', }, }, 'ModifiedSharpness' => 'Schärfe verändert', 'ModifiedSharpnessFreq' => { PrintConv => { 'High' => 'Hoch', 'Highest' => 'Höchste', 'Low' => 'Leicht', 'Lowest' => 'Niedrigste', 'n/a' => '(nicht gesetzt)', }, }, 'ModifiedToneCurve' => { Description => 'Tonwertkurve verändert', PrintConv => { 'Custom' => 'Benutzerdefiniert', 'Manual' => 'Manuell', }, }, 'ModifiedWhiteBalance' => { PrintConv => { 'Auto' => 'Automatisch', 'Black & White' => 'Schwarz/Weiß', 'Cloudy' => 'Bewölkt', 'Custom' => 'Benutzerdefiniert', 'Custom 1' => 'Benutzerdefiniert 1', 'Custom 2' => 'Benutzerdefiniert 2', 'Custom 3' => 'Benutzerdefiniert 3', 'Custom 4' => 'Benutzerdefiniert 4', 'Daylight' => 'Tageslicht', 'Daylight Fluorescent' => 'Neonlicht tageslichtweiß', 'Flash' => 'Blitz', 'Fluorescent' => 'Neonlicht', 'Manual Temperature (Kelvin)' => 'Manuelle Temperatur (Kelvin)', 'Shade' => 'Schatten', 'Tungsten' => 'Glühbirne', 'Underwater' => 'Unterwasser', }, }, 'ModifyDate' => 'Änderungsdatum', 'MoireFilter' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'MonitorOffTime' => 'Ausschaltzeit des Monitors', 'MonochromeFilterEffect' => { Description => 'Filtereffekt Monochrom', PrintConv => { 'Green' => 'Grün', 'None' => 'Keiner', 'Red' => 'Rot', 'Yellow' => 'Gelb', }, }, 'MonochromeLinear' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'MonochromeToningEffect' => { Description => 'Tönungseffekt Monochrom', PrintConv => { 'Blue' => 'Blau', 'Green' => 'Grün', 'None' => 'Keiner', 'Purple' => 'Lila', }, }, 'Month' => 'Monat', 'MultiBurstImageHeight' => 'Multi-Burst Bildhöhe', 'MultiBurstImageWidth' => 'Multi-Burst Bildbreite', 'MultiBurstMode' => { Description => 'Mehrfach-Burst Modus', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'MultiControllerWhileMetering' => { Description => 'Multicontroller bei Messung', PrintConv => { 'AF point selection' => 'AF-Punkt-Auswahl', 'Off' => 'Aus', }, }, 'MultiExposure' => 'Mehrfachbelichtungsdaten', 'MultiExposureAutoGain' => { Description => 'Mehrfachbelichtung Automatik', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'MultiExposureMode' => { Description => 'Mehrfachbelichtungsmodus', PrintConv => { 'Image Overlay' => 'Bildüberlagerung', 'Multiple Exposure' => 'Mehrfachbelichtung', 'Off' => 'Aus', }, }, 'MultiExposureShots' => 'Mehrfachbelichtung Anzahl Aufnahmen', 'MultiExposureVersion' => 'Mehrfachbelichtungsdaten-Version', 'MultiFrameNoiseReduction' => { Description => 'Ruisond. Multi Frame', PrintConv => { 'Off' => 'Aus', 'On' => 'An', 'n/a' => '(nicht gesetzt)', }, }, 'MultiFunctionLock' => { PrintConv => { 'Main dial' => 'Haupt-Wahlrad', 'Multi-controller' => 'Multicontroller', 'Off' => 'Aus', 'On' => 'Ein', 'Quick control dial' => 'Schnelleinstellrad', }, }, 'MultiSelector' => { Description => 'Multifunktionswähler', PrintConv => { 'Do Nothing' => 'Ohne Funktion', 'Reset Meter-off Delay' => 'Ruhezustand verzögern', }, }, 'MultiSelectorPlaybackMode' => { Description => 'Mitteltaste Bei Wiedergabe', PrintConv => { 'Choose Folder' => 'Ordner auswählen', 'Thumbnail On/Off' => 'Bildindex ein/aus', 'View Histograms' => 'Histogramme anzeigen', 'Zoom On/Off' => 'Ausschnitt ein/aus', }, }, 'MultiSelectorShootMode' => { Description => 'Mitteltaste Bei Aufnahme', PrintConv => { 'Highlight Active Focus Point' => 'AF-Messfeld hervorheben', 'Not Used' => 'Ohne Funktion', 'Select Center Focus Point' => 'Mittleres AF-Messfeld', }, }, 'MultipleExposureMode' => { PrintConv => { 'Off' => 'Aus', 'On (2 frames)' => 'Ein (2 Bilder', 'On (3 frames)' => 'Ein (3 Bilder', }, }, 'MultipleExposureSet' => { Description => 'Mehrfachbelichtung', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'Mute' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'MyColorMode' => { Description => 'My Color-Modus', PrintConv => { 'B&W' => 'Schwarz/Weiß', 'Custom' => 'Benutzerdefiniert', 'Off' => 'Aus', }, }, 'MyColors' => 'My Color-Modus', 'NDFilter' => { Description => 'ND-Filter', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', 'n/a' => '(nicht gesetzt)', }, }, 'NEFBitDepth' => { PrintConv => { 'n/a (JPEG)' => 'Nicht gesetzt (JPEG)', }, }, 'NEFCompression' => { Description => 'RAW-Komprimierung', PrintConv => { 'Lossless' => 'Verlustfrei', 'Lossy (type 1)' => 'Verlustbehaftet (Type 1)', 'Lossy (type 2)' => 'Verlustbehaftet (Type 2)', 'Uncompressed' => 'Nicht komprimiert', }, }, 'NEFLinearizationTable' => 'Linearisierungstabelle', 'NativeDigest' => 'EXIF Kennwert', 'NetExposureCompensation' => 'Net Belichtungskorrektur', 'NewMieTag1' => 'Weiterer MIE Tag 1', 'NewPngTag1' => 'Weiterer PNG Tag 1', 'NewPngTag2' => 'Weiterer PNG Tag 2', 'NewPngTag3' => 'Weiterer PNG Tag 3', 'NewRawImageDigest' => 'Neuer RAW Image Kennwert', 'NewsPhotoVersion' => 'IPTC-Modell-3-Version', 'NikonCaptureData' => 'Nikon Capture-Daten', 'NikonCaptureOutput' => 'Nikon Capture-Ausgabe', 'NikonCaptureVersion' => 'Nikon Capture-Version', 'NikonICCProfile' => 'Nikon ICC-Profil', 'NikonImageSize' => { Description => 'Nikon Bildgröße', PrintConv => { 'Large' => 'Groß', 'Large (10.0 M)' => 'Groß (10.0M)', 'Medium' => 'Mittel', 'Medium (5.6 M)' => 'Mittel (5.6M)', 'Small' => 'Klein', 'Small (2.5 M)' => 'Klein (2.5M)', }, }, 'NoMemoryCard' => { Description => 'Auslösesperre', PrintConv => { 'Enable Release' => 'Aus', 'Release Locked' => 'Ein', }, }, 'Noise' => 'Bildrauschen', 'NoiseFilter' => { Description => 'Rauschfilter', PrintConv => { 'High' => 'Hoch', 'Low' => 'Leicht', 'Off' => 'Aus', 'n/a' => '(nicht gesetzt)', }, }, 'NoiseReduction' => { Description => 'Rauschreduktion', PrintConv => { 'Auto' => 'Automatisch', 'High (+1)' => 'Hoch (+1)', 'Highest (+2)' => 'Am höchsten (+2)', 'Low' => 'Gering', 'Low (-1)' => 'Niedrig (-1)', 'Lowest (-2)' => 'Am niedrigsten (+2)', 'Max' => 'Maximal', 'Noise Filter' => 'Rauschfilter', 'Noise Filter (ISO Boost)' => 'Rauschfilter (ISO Boost)', 'Noise Reduction' => 'Rauschreduktion', 'Off' => 'Aus', 'On' => 'Ein', 'Strong' => 'Stark', 'Weak' => 'Schwach', 'n/a' => '(nicht gesetzt)', }, }, 'NoiseReduction2' => { Description => 'Rauschunterdrückung 2', PrintConv => { 'Noise Filter' => 'Rauschfilter', 'Noise Filter (ISO Boost)' => 'Rauschfilter (ISO Boost)', 'Noise Reduction' => 'Rauschreduktion', }, }, 'NoiseReductionIntensity' => 'Stärke Rauschunterdrückung', 'NoiseReductionMethod' => { Description => 'Rauschunterdrückung Methode', PrintConv => { 'Better Quality' => 'Bessere Qualität"', 'Faster' => 'Schneller', }, }, 'NoiseReductionMode' => { Description => 'Rauschunterdrückungsmodus', PrintConv => { 'Off' => 'Aus', 'On' => 'An', }, }, 'NoiseReductionSharpness' => 'Rauschunterdrückung Schärfe', 'NoiseReductionValue' => 'Rauschunterdrückungswert', 'NominalMaxAperture' => 'Nominaler AVmin', 'NominalMinAperture' => 'Nominaler AVmax', 'Notes' => 'Hinweise', 'NumAFPoints' => 'Anzahl der AF-Punkte', 'NumChannels' => 'Anzahl Kanäle', 'NumColors' => 'Anzahl Farben', 'NumFacePositions' => 'Gesichtspositionen', 'NumImportantColors' => 'Anzahl Hauptfarben', 'NumberOfFocusPoints' => { Description => 'Anzahl AF-Punkte', PrintConv => { '11 Points' => '11 Punkte', '39 Points' => '39 Punkte', }, }, 'NumberOfImages' => 'Anzahl Bilder', 'NumberOfPlanes' => 'Anzahl Ebenen', 'OPIProxy' => { PrintConv => { 'Higher resolution image does not exist' => 'Höher aufgelöstes Bild nicht vorhanden', 'Higher resolution image exists' => 'Höher aufgelöstes Bild vorhanden', }, }, 'ObjectAttributeReference' => 'Gattung', 'ObjectCycle' => { Description => 'Objektzyklus', PrintConv => { 'Both Morning and Evening' => 'Beides', 'Evening' => 'Abends', 'Morning' => 'Morgens', }, }, 'ObjectDistance' => 'Objektabstand', 'ObjectFileType' => { Description => 'Objekt Dateityp', PrintConv => { 'Executable file' => 'Ausführbare Datei', 'None' => 'Keiner', 'Unknown' => 'Unbekannt', }, }, 'ObjectName' => 'Titel', 'ObjectPreviewData' => 'Objektdatenvorschau', 'ObjectPreviewFileFormat' => 'Dateiformat der Objektdatenvorschau', 'ObjectPreviewFileVersion' => 'Dateiformatversion der Objektdatenvorschau', 'ObjectTypeReference' => 'Objekttypreferenz', 'OffsetSchema' => 'Offset-Schema', 'OldSubfileType' => { Description => 'Unterdatei-Typ', PrintConv => { 'Full-resolution image' => 'Bild in voller Auflösung', 'Reduced-resolution image' => 'Bild in reduzierter Auflösung', 'Single page of multi-page image' => 'Einzelbild eines mehrseitigen Bildes', }, }, 'OlympusImageHeight' => 'Olympus-Bildhöhe', 'OlympusImageWidth' => 'Olympus-Bildbreite', 'OneTouchWB' => { Description => 'Sofort-Weißabgleich', PrintConv => { 'Off' => 'Aus', 'On' => 'An', 'On (Preset)' => 'An (Preset)', }, }, 'OperatingSystem' => { PrintConv => { 'unknown' => 'Unbekannt', }, }, 'OpticalZoom' => 'Optischer Zoom', 'OpticalZoomCode' => 'Optischer Zoom-Code', 'OpticalZoomMode' => { Description => 'Optischer Zoom-Modus', PrintConv => { 'Extended' => 'Erweitert', }, }, 'OpticalZoomOn' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'Opto-ElectricConvFactor' => 'Optoelektronischer Umrechnungsfaktor', 'OrderNumber' => 'Auftragsnummer', 'Organization' => 'Organisation', 'Orientation' => { Description => 'Ausrichtung', PrintConv => { 'Mirror horizontal' => 'Horizontal gespiegelt', 'Mirror horizontal and rotate 270 CW' => 'Horizontal gespiegelt und 90° gegen den Uhrzeigersinn', 'Mirror horizontal and rotate 90 CW' => 'Horizontal gespiegelt und 90° im Uhrzeigersinn', 'Mirror vertical' => 'Vertikal gespiegelt', 'Rotate 180' => '180° gedreht', 'Rotate 270 CW' => '90° gegen den Uhrzeigersinn', 'Rotate 90 CW' => '90° im Uhrzeigersinn', }, }, 'Orientation2' => { Description => 'Ausrichtung 2', PrintConv => { 'Rotate 180' => '180° gedreht', 'Rotate 270 CW' => '90° gegen den Uhrzeigersinn', 'Rotate 90 CW' => '90° im Uhrzeigersinn', }, }, 'OriginalFileName' => 'Original Dateiname', 'OriginalFileType' => 'Original Dateityp', 'OriginalImageHeight' => 'Bildbreite Original', 'OriginalImageWidth' => 'Bildbreite Original', 'OriginalRawCreator' => 'Original RAW Ersteller', 'OriginalRawFileData' => 'Original Raw Daten', 'OriginalRawFileDigest' => 'Original RAW Image Kennwert', 'OriginalRawFileName' => 'Original Raw Dateiname', 'OriginalRawFileType' => 'Original RAW Dateityp', 'OriginalRawImage' => 'Original RAW Bild', 'OriginalRawResource' => 'Original RAW Basisdaten', 'OriginalTHMCreator' => 'Original THM Ersteller', 'OriginalTHMFileType' => 'Original THM Dateityp', 'OriginalTHMImage' => 'Original THM Bild', 'OriginalTHMResource' => 'Original THM Basisdaten', 'OriginalTransmissionReference' => 'Jobkennung', 'OriginatingProgram' => 'Erstellungsprogramm', 'OtherImage' => 'Other Image Vorschaubild', 'OtherImageLength' => 'OtherImage Datenlänge', 'OtherImageStart' => 'Other Image Datenposition', 'OutputImageHeight' => 'Ausgabe-Bildhöhe', 'OutputImageWidth' => 'Ausgabe-Bildbreite', 'OutputResolution' => 'Ausgabe Auflösung', 'OverlayPlanes' => 'Überlagerungsebenen', 'Owner' => 'Besitzer', 'OwnerID' => 'Besitzer-ID', 'OwnerName' => 'Name des Besitzers', 'PEFVersion' => 'PEF-Version', 'PNGWarning' => 'PNG Warnung', 'Padding' => 'Platzhalter', 'PageName' => 'Seitenname', 'PageNumber' => 'Seitenummer', 'Pages' => 'Seiten', 'PanOrientation' => { Description => 'Pan Ausrichtung', PrintConv => { 'Bottom to top' => 'Von Unten nach Oben', 'Clockwise' => 'Im Uhrzeigersinn', 'Counter clockwise' => 'Gegen den Uhrzeigersinn', 'Left to right' => 'Von Links nach Rechts', 'Right to left' => 'Von Rechts nach Links', 'Start at bottom left' => 'Links unten beginnend', 'Start at bottom right' => 'Rechts unten beginnend', 'Start at top left' => 'Links oben beginnend', 'Start at top right' => 'Rechts oben beginnend', 'Top to bottom' => 'Von Oben nach Unten', '[unused]' => '[nicht verwendet]', }, }, 'PanasonicImageHeight' => 'Panasonic Bildhöhe', 'PanasonicImageWidth' => 'Panasonic Bildbreite', 'PanasonicTitle' => 'Titel', 'PanoramaCropBottom' => 'Panorama Crop Unten', 'PanoramaCropLeft' => 'Panorama Crop Links', 'PanoramaCropRight' => 'Panorame Crop Rechts', 'PanoramaCropTop' => 'Panorama Crop Oben', 'PanoramaDirection' => { Description => 'Panorama-Richtung', PrintConv => { '2x2 Matrix (Clockwise)' => '2x2 Matrix (im Uhrzeigersinn)', 'Bottom to Top' => 'Unten nach Oben', 'Left to Right' => 'Links nach Rechts', 'Right to Left' => 'Rechts nach Links', 'Top to Bottom' => 'Oben nach Unten', }, }, 'PanoramaFrameNumber' => 'Panorama-Bild', 'PanoramaMode' => 'Panorama Modus', 'PanoramaSize3D' => { PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'PentaxImageSize' => { Description => 'Pentax-Bildgröße', PrintConv => { '2304x1728 or 2592x1944' => '2304 x 1728 oder 2592 x 1944', '2560x1920 or 2304x1728' => '2560 x 1920 oder 2304 x 1728', '2816x2212 or 2816x2112' => '2816 x 2212 oder 2816 x 2112', '3008x2008 or 3040x2024' => '3008 x 2008 oder 3040 x 2024', 'Full' => 'Voll', }, }, 'PentaxModelID' => 'Pentax-Modell', 'PentaxVersion' => 'Pentax-Version', 'People' => 'Menschen', 'Permits' => { PrintConv => { 'Distribution' => 'Verteilung', 'Reproduction' => 'Reproduktion', }, }, 'PhaseDetectAF' => { Description => 'Auto-Fokus', PrintConv => { 'Off' => 'Aus', 'On (11-point)' => 'Ein (11-Punkt)', 'On (39-point)' => 'Ein (39 Punkte)', 'On (51-point)' => 'Ein (51-Punkt)', 'On (hybrid)' => 'Ein (Hybrid)', }, }, 'PhoneNumber' => 'Telefonnummer', 'PhotoEffect' => { Description => 'Foto-Effekt', PrintConv => { 'B&W' => 'Schwarz/Weiß', 'Custom' => 'Benutzerdefiniert', 'Off' => 'Aus', }, }, 'PhotoEffects' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'PhotoEffectsData' => 'Bildeffekt-Daten', 'PhotoEffectsType' => { Description => 'Bildeffekt-Methode', PrintConv => { 'B&W' => 'Schwarz/Weiß', 'None' => 'Keine', 'Tinted' => 'Getont', }, }, 'PhotoInfoPlayback' => { Description => 'Bildinfos & Wiedergabe', PrintConv => { 'Info Left-right, Playback Up-down' => 'Info <> / Wiedergabe', 'Info Up-down, Playback Left-right' => 'Info / Wiedergabe <>', }, }, 'PhotoStyle' => { Description => 'Fotostil', PrintConv => { 'Monochrome' => 'Schwarz/Weiß', 'Natural' => 'Natürlich', 'Portrait' => 'Porträt', 'Scenery' => 'Szene', 'Standard or Custom' => 'Standard oder benutzerdefiniert', 'Vivid' => 'Lebendig', }, }, 'PhotometricInterpretation' => { Description => 'Pixel-Schema', PrintConv => { 'BlackIsZero' => 'Schwarz ist Null', 'Color Filter Array' => 'CFA (Farbfiltermatrix)', 'Pixar LogL' => 'CIE Log2(L) (Log Luminanz)', 'Pixar LogLuv' => 'CIE Log2(L)(u\',v\') (Log Luminanz und Chrominanz)', 'Transparency Mask' => 'Transparenzmaske', 'WhiteIsZero' => 'Weiß ist Null', }, }, 'PhotoshopBGRThumbnail' => 'Photoshop BGR-Vorschaubild', 'PhotoshopFormat' => 'Photoshop-Format', 'PhotoshopQuality' => 'Photoshop-Qualität', 'PhysicalImageSize' => 'Physikalische Bildgröße', 'PictureControl' => { Description => 'Bildoptimierung', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'PictureControlActive' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'PictureControlAdjust' => { Description => 'Bildoptimierung-Anpassung', PrintConv => { 'Default Settings' => 'Standardeinstellungen', 'Full Control' => 'Manuelle Einstellung', 'Quick Adjust' => 'Schnelleinstellung', }, }, 'PictureControlBase' => 'Bildoptimierung-Basis', 'PictureControlName' => 'Bildoptimierung-Name', 'PictureControlQuickAdjust' => 'Bildoptimierung-Schnelleinstellung', 'PictureControlVersion' => 'Bildoptimierung-Version', 'PictureFinish' => { PrintConv => { 'Evening Scene' => 'Abendszene', 'Monochrome' => 'Monochrom', 'Natural' => 'Natürlich', 'Natural+' => 'Natürlich+', 'Night Portrait' => 'Nachtporträt', 'Night Scene' => 'Nachtszene', 'Portrait' => 'Porträt', 'Wind Scene' => 'Windszene', }, }, 'PictureMode' => { Description => 'Motivprogramm', PrintConv => { '1/2 EV steps' => '1/2 LW Schritte', '1/3 EV steps' => '1/3 LW Schitte', 'Anti-blur' => 'Motivschärfe-Modus', 'Aperture Priority' => 'Zeitautomatik', 'Aperture Priority, Off-Auto-Aperture' => 'Zeitautomatik (Blendenring nicht auf A)', 'Aperture-priority AE' => 'Blendenpriorität', 'Auto' => 'Automatisch', 'Auto PICT (Landscape)' => 'Auto PICT (Landschaft)', 'Auto PICT (Macro)' => 'Auto PICT (Makro)', 'Auto PICT (Portrait)' => 'Auto PICT (Porträt)', 'Auto PICT (Sport)' => 'Auto PICT (Motiv in Bewegung)', 'Auto PICT (Standard)' => 'Auto PICT (Normal)', 'Autumn' => 'Herbst', 'Backlight Silhouette' => 'Hintergrundbeleuchtung Silhouette', 'Beach' => 'Strand', 'Beach & Snow' => 'Strand & Schnee', 'Black & White' => 'Schwarz/Weiß', 'Blue' => 'Blau', 'Blur Control' => 'Bildstabilisierung', 'Blur Reduction' => 'Unschärfereduktion', 'Bulb' => 'Bulb-Modus', 'Bulb, Off-Auto-Aperture' => 'Bulb (Blendenring nicht auf A)', 'Candlelight' => 'Kerzenlicht', 'DOF Program' => 'Schärfentiefe-Priorität', 'DOF Program (HyP)' => 'Schärfentiefe-Priorität (Hyper-Programm)', 'Dark Pet' => 'Haustier (Dunkel)', 'Digital Filter' => 'Digitalfilter', 'Fireworks' => 'Feuerwerk', 'Fisheye' => 'Fischauge', 'Flash X-Sync Speed AE' => 'Blitz X-synch. Zeit', 'Flower' => 'Blumen', 'Food' => 'Lebensmittel', 'Forest' => 'Wald', 'Frame Composite' => 'Rahmen', 'Green' => 'Grün', 'Green Mode' => 'Grüner Modus', 'Half-length Portrait' => 'Brustbild', 'Hi-speed Program' => 'HS-Priorität', 'Hi-speed Program (HyP)' => 'HS-Priorität (Hyper-Programm)', 'Illustrations' => 'Dokument', 'Kids' => 'Kinder', 'Landscape' => 'Landschaft', 'Light Pet' => 'Haustier (Hell)', 'MTF Program' => 'MTF-Priorität', 'MTF Program (HyP)' => 'MTF-Priorität (Hyper-Programm)', 'Macro' => 'Makro', 'Manual' => 'Manuell', 'Manual, Off-Auto-Aperture' => 'Manuell (Blendenring nicht auf A)', 'Medium Pet' => 'Haustier (Neutrale Helligkeit)', 'Natural' => 'Natur', 'Natural Light' => 'Umgebungslicht', 'Natural Light & Flash' => 'Umgebungslicht & Blitz', 'Natural Skin Tone' => 'Nat. Hautton', 'Night Scene' => 'Nachtszene', 'Night Scene HDR' => 'Nachtszene', 'Night Scene Portrait' => 'Nacht-Porträt', 'No Flash' => 'Kein Blitz', 'Pet' => 'Haustiere', 'Pink' => 'Rosa', 'Portrait' => 'Porträt', 'Portrait 2' => 'Porträt 2', 'Program' => 'Programm', 'Program (HyP)' => 'Programmautomatik (Hyper-Programm)', 'Program AE' => 'Programmautomatik', 'Program Av Shift' => 'Av Shift-Belichtungsprogramm', 'Program Tv Shift' => 'Tv Shift-Belichtungsprogramm', 'Purple' => 'Violett', 'Red' => 'Rot', 'Self Portrait' => 'Selbstporträt', 'Sensitivity Priority AE' => 'Blenden- & Zeitautomatik (Sv, ISO-Vorgabe)', 'Shutter & Aperture Priority AE' => 'Empfindlichkeitsautomatik (TAv, Zeit-/Blendenvorgabe)', 'Shutter Speed Priority' => 'Verschlusspriorität', 'Shutter speed priority AE' => 'Verschlusspriorität', 'Snow' => 'Schnee', 'Soft' => 'Soft (Weichzeichnung)', 'Sports' => 'Sport', 'Sunset' => 'Sonnenuntergang', 'Surf & Snow' => 'Surf & Schnee', 'Synchro Sound Record' => 'Synchr. Sprachnotiz', 'Underwater' => 'Unterwasser', 'Yellow' => 'Gelb', }, }, 'PictureMode2' => { Description => 'Motivprogramm 2', PrintConv => { 'Aperture Priority' => 'Blendenpriorität', 'Aperture Priority, Off-Auto-Aperture' => 'Zeitautomatik (Blendenring nicht auf A)', 'Bulb' => 'Bulb-Modus', 'Bulb, Off-Auto-Aperture' => 'Bulb (Blendenring nicht auf A)', 'Flash X-Sync Speed AE' => 'Blitz X-synch. Zeit', 'Green Mode' => '"Grünes" AE-Programm', 'Manual' => 'Manuell', 'Manual, Off-Auto-Aperture' => 'Manuell (Blendenring nicht auf A)', 'Program AE' => 'Programmautomatik', 'Program Av Shift' => 'Av Shift-Belichtungsprogramm', 'Program Tv Shift' => 'Tv Shift-Belichtungsprogramm', 'Scene Mode' => 'Motivprogramm', 'Sensitivity Priority AE' => 'Blenden- & Zeitautomatik (Sv, ISO-Vorgabe)', 'Shutter & Aperture Priority AE' => 'Empfindlichkeitsautomatik (TAv, Zeit-/Blendenvorgabe)', 'Shutter Speed Priority' => 'Verschlusspriorität', }, }, 'PictureModeBWFilter' => { Description => 'Motivprogramm S/W Filter', PrintConv => { 'Green' => 'Grün', 'Red' => 'Rot', 'Yellow' => 'Gelb', 'n/a' => '(nicht gesetzt)', }, }, 'PictureModeContrast' => 'Motivprogramm Kontrast', 'PictureModeEffect' => { Description => 'Motivprogramm Effekt', PrintConv => { 'High' => 'Hoch', 'Low' => 'Niedrig', 'n/a' => '(nicht gesetzt)', }, }, 'PictureModeHue' => 'Motivprogramm Farbton', 'PictureModeSaturation' => 'Motivprogramm Farbsättigung', 'PictureModeSharpness' => 'Motivprogramm Schärfe', 'PictureModeTone' => { Description => 'Motivprogramm Tonwert', PrintConv => { 'Blue' => 'Blau', 'Green' => 'Grün', 'Purple' => 'Lila', 'n/a' => '(nicht gesetzt)', }, }, 'PictureStyle' => { Description => 'Bildstil', PrintConv => { 'Custom' => 'Benutzerdefiniert', 'Faithful' => 'Natürlich', 'High Saturation' => 'Hohe Farbsättigung', 'Landscape' => 'Landschaft', 'Low Saturation' => 'Geringe Farbsättigung', 'Monochrome' => 'Monochrom', 'None' => 'Keiner', 'Portrait' => 'Porträt', 'Unknown?' => 'Unbekannt?', 'User Def. 1' => 'Benutzerdefiniert 1', 'User Def. 2' => 'Benutzerdefiniert 2', 'User Def. 3' => 'Benutzerdefiniert 3', }, }, 'PictureWizardMode' => { PrintConv => { 'Forest' => 'Wald', 'Landscape' => 'Landschaft', 'Portrait' => 'Porträt', 'n/a' => '(nicht gesetzt)', }, }, 'PixelFormat' => { Description => 'Pixel-Format', PrintConv => { 'Black & White' => 'Schwarz/Weiß', }, }, 'PixelUnits' => { Description => 'Pixel Einheit', PrintConv => { 'Unknown' => 'Unbekannt', 'meters' => 'Meter', }, }, 'PixelsPerMeterX' => 'Pixel per Meter X', 'PixelsPerMeterY' => 'Pixel per Meter Y', 'PixelsPerUnitX' => 'Pixel pro X-Einheit', 'PixelsPerUnitY' => 'Pixel pro Y-Einheit', 'PlanarConfiguration' => { Description => 'Bilddatenausrichtung', PrintConv => { 'Chunky' => 'Kompaktformat', 'Planar' => 'Ebenes Format', }, }, 'Planes' => 'Ebenen', 'PostalCode' => 'Postleitzahl', 'PowerSource' => { Description => 'Stromquelle', PrintConv => { 'Body Battery' => 'Batterie im Gehäuse', 'External Power Supply' => 'Externe Stromversorgung', 'Grip Battery' => 'Batterie im Griff', }, }, 'Predictor' => { Description => 'Prädiktor', PrintConv => { 'Horizontal differencing' => 'Horizontale Differenzierung', 'None' => 'Kein Prädiktor-Schema in Benutzung', }, }, 'PresetWhiteBalance' => { Description => 'Weißabgleich Voreinstellung', PrintConv => { 'Cloudy' => 'Bewölkt', 'Daylight' => 'Tageslicht', 'Flash' => 'Blitz', 'Fluorescent' => 'Neonlicht', 'Shade' => 'Schatten', 'Tungsten' => 'Glühbirne', }, }, 'PresetWhiteBalanceAdj' => 'Weißabgleichkorrektur-Einstellung', 'Preview' => 'Preview-IFD-Zeiger', 'Preview0' => 'Vorschau 0', 'Preview1' => 'Vorschau 1', 'Preview2' => 'Vorschau 2', 'PreviewColorSpace' => { PrintConv => { 'Unknown' => 'Unbekannt', }, }, 'PreviewCropBottom' => 'Vorschau Crop Unten', 'PreviewCropLeft' => 'Vorschau Crop Links', 'PreviewCropRight' => 'Vorschau Crop Rechts', 'PreviewCropTop' => 'Vorschau Crop Oben', 'PreviewIFD' => 'Preview-IFD-Zeiger', 'PreviewImage' => 'Vorschaubild', 'PreviewImageBorders' => 'Vorschaubild-Ränder', 'PreviewImageData' => 'Vorschaubild-Daten', 'PreviewImageHeight' => 'Vorschaubild-Höhe', 'PreviewImageLength' => 'Vorschaubild-Datenlänge', 'PreviewImageName' => 'Vorschaubild-Name', 'PreviewImageSize' => 'Vorschaubild-Größe', 'PreviewImageStart' => 'Vorschaubild-Datenposition', 'PreviewImageType' => 'Vorschaubild-Typ', 'PreviewImageValid' => { Description => 'Vorschaubild gültig', PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'PreviewImageWidth' => 'Vorschaubild-Breite', 'PreviewPNG' => 'PNG Vorschaubild', 'PreviewQuality' => { Description => 'Vorschaubild-Qualität', PrintConv => { 'Fine' => 'Fein', 'Superfine' => 'Superfein', 'n/a' => '(nicht gesetzt)', }, }, 'PreviewSettingsDigest' => 'Kennwert der Voreinstellungen', 'PreviewWMF' => 'WMF Vorschaubild', 'PrimaryAFPoint' => { Description => 'Primärer AF-Punkt', PrintConv => { '(none)' => '(keiner)', 'Bottom' => 'Unten', 'C6 (Center)' => 'C6 (Mitte)', 'Center' => 'Mitte', 'Far Left' => 'Weit links', 'Far Right' => 'Weit rechts', 'Lower-left' => 'Links unten', 'Lower-right' => 'Rechts unten', 'Mid-left' => 'Links mitte', 'Mid-right' => 'Rechts mitte', 'Top' => 'Oben', 'Upper-left' => 'Links oben', 'Upper-right' => 'Rechts oben', }, }, 'PrimaryChromaticities' => 'Chromatizität der Primärfarben', 'PrimaryPlatform' => 'Hauptplattform', 'ProcessingInfo' => 'Verarbeitungsinformationen', 'ProcessingSoftware' => 'Verarbeitungssoftware', 'Producer' => 'Produzent', 'ProducerKeywords' => 'Hersteller Schlüsselwort', 'Producers' => 'Produzent', 'ProductID' => 'Produkt-ID', 'ProductionCode' => 'Herstellungskennzeichen', 'ProfileCMMType' => 'Profil CMM-Typ', 'ProfileClass' => { Description => 'Profil-Klasse', PrintConv => { 'Abstract Profile' => 'Abstract-Profil', 'ColorSpace Conversion Profile' => 'Farbraum-Konvertierungsprofile', 'DeviceLink Profile' => 'DeviceLink-Profil', 'Display Device Profile' => 'Bildschirm-Geräteprofil', 'Input Device Profile' => 'Eingabe-Geräteprofil', 'NamedColor Profile' => 'Named Color-Profil', 'Nikon Input Device Profile (NON-STANDARD!)' => 'Nikon-Profil ("nkpf")', 'Output Device Profile' => 'Ausgabe-Geräteprofil', }, }, 'ProfileConnectionSpace' => 'Profil-Verbindungsfarbraum', 'ProfileCopyright' => 'Urheberrechtsvermerk', 'ProfileCreator' => 'Profilersteller', 'ProfileDateTime' => 'Profil-Erstellungszeit', 'ProfileDescription' => 'Profil-Beschreibung', 'ProfileDescriptionML' => 'Profil-Beschreibung ML', 'ProfileFileSignature' => 'Profil-Datei-Signatur', 'ProfileID' => 'Profile-ID', 'ProfileSequenceDesc' => 'Profilsequenz-Beschreibung', 'ProfileToneCurve' => 'Tonwertkurve Profil', 'ProfileType' => { Description => 'Profiltyp', PrintConv => { 'Group 3 FAX' => 'Gruppe 3 Fax', 'Unspecified' => 'Nicht bekannt', }, }, 'ProfileVersion' => 'Profil-Version', 'ProgramISO' => { Description => 'ISO Programm', PrintConv => { 'Intelligent ISO' => 'ISO intelligent', 'n/a' => '(nicht gesetzt)', }, }, 'ProgramLine' => { Description => 'Belichtungsprogrammtyp', PrintConv => { 'Depth' => 'Schärfentiefe-Priorität', 'Hi Speed' => 'HS-Priorität', 'MTF' => 'MTF-Priorität', }, }, 'ProgramMode' => { Description => 'Programmmodus', PrintConv => { 'Night Portrait' => 'Nachtporträt', 'None' => 'Keiner', 'Portrait' => 'Porträt', 'Sports' => 'Sport', 'Sunset' => 'Sonnenuntergang', }, }, 'ProgramShift' => 'Programmverschiebung', 'ProgramVersion' => 'Programmversion', 'Prohibits' => { Description => 'Verbote', PrintConv => { 'Commercial Use' => 'Kommerzielle Verwendung', }, }, 'Protect' => 'Schutz', 'Province-State' => 'Bundesland/Kanton', 'Publisher' => 'Herausgeber', 'Quality' => { Description => 'Bildqualität', PrintConv => { 'Best' => 'Optimal', 'Better' => 'Besser', 'Compressed RAW' => 'Komprimiertes RAW', 'Compressed RAW + JPEG' => 'Komprimiertes RAW + JPEG', 'Extra Fine' => 'Extra-Fein', 'Fine' => 'Fein', 'Good' => 'Gut', 'High' => 'Hoch', 'Low' => 'Leicht', 'Normal' => 'Standardqualität', 'RAW + JPEG' => 'RAW+JPEG', 'Super Fine' => 'Super-Fein', 'Superfine' => 'Superfein', 'n/a' => '(nicht gesetzt)', }, }, 'QualityMode' => { PrintConv => { 'Fine' => 'Fein', }, }, 'QuickAdjust' => 'Schnelleinstellung', 'QuickControlDialInMeter' => { Description => 'Schnelleinstellrad bei Messung', PrintConv => { 'AF point selection' => 'Auswahl des AF-Messfelds', 'Exposure comp/Aperture' => 'Belichtungskorrektur/Blende', 'ISO speed' => 'ISO-Empfindlichkeit', }, }, 'QuickShot' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'RAFVersion' => 'RAF-Version', 'RasterizedCaption' => 'Rasterbeschreibung', 'Rating' => 'Bewertung', 'RatingPercent' => 'Bewertung in Prozent', 'RawAndJpgRecording' => { Description => 'Dateiformat und JPEG-Qualität', PrintConv => { 'JPEG (Best)' => 'JPEG (Optimal)', 'JPEG (Better)' => 'JPEG (Besser)', 'JPEG (Good)' => 'JPEG (Gut)', 'RAW (DNG, Best)' => 'RAW (DNG, Optimal)', 'RAW (DNG, Better)' => 'RAW (DNG, Besser)', 'RAW (DNG, Good)' => 'RAW (DNG, Gut)', 'RAW (PEF, Best)' => 'RAW (PEF, Optimal)', 'RAW (PEF, Better)' => 'RAW (PEF, Besser)', 'RAW (PEF, Good)' => 'RAW (PEF, Gut)', 'RAW+JPEG (DNG, Best)' => 'RAW+JPEG (DNG, Optimal)', 'RAW+JPEG (DNG, Better)' => 'RAW+JPEG (DNG, Besser)', 'RAW+JPEG (DNG, Good)' => 'RAW+JPEG (DNG, Gut)', 'RAW+JPEG (PEF, Best)' => 'RAW+JPEG (PEF, Optimal)', 'RAW+JPEG (PEF, Better)' => 'RAW+JPEG (PEF, Besser)', 'RAW+JPEG (PEF, Good)' => 'RAW+JPEG (PEF, Gut)', 'RAW+Large/Fine' => 'RAW+Groß/Fein', 'RAW+Large/Normal' => 'RAW+Groß/Normal', 'RAW+Medium/Fine' => 'RAW+Mittel/Fein', 'RAW+Medium/Normal' => 'RAW+Mittel/Normal', 'RAW+Small/Fine' => 'RAW+Klein/Fein', 'RAW+Small/Normal' => 'RAW+Klein/Normal', }, }, 'RawBrightnessAdj' => 'Raw Helligkeitskorrektur', 'RawColorAdj' => { Description => 'Raw Farbkorrektur', PrintConv => { 'Custom' => 'Benutzerdefiniert', 'Faithful' => 'Natürlich', 'Shot Settings' => 'Aufnahmeeinstellung', }, }, 'RawCropBottom' => 'Raw Crop Unten', 'RawCropLeft' => 'Raw Crop Links', 'RawCropRight' => 'Raw Crop Rechts', 'RawCropTop' => 'Raw Crop Oben', 'RawData' => 'Raw-Daten', 'RawDataByteOrder' => 'RAW Daten Bytereihenfolge', 'RawDataLength' => 'RAW-Daten Länge', 'RawDataOffset' => 'RAW-Daten Offset', 'RawDataUniqueID' => 'Raw-Daten eindeutige ID', 'RawDevArtFilter' => { PrintConv => { 'Drawing' => 'Zeichnung', 'Fish Eye' => 'Fischauge', 'Off' => 'Aus', 'Reflection' => 'Reflektierung', 'Soft Focus' => 'Weichzeichner', 'Soft Focus 2' => 'Weichzeichner 2', 'Sparkle' => 'Perleffekt', 'Watercolor' => 'Wasserfarbe', 'Watercolor II' => 'Wasserfarbe II', }, }, 'RawDevAutoGradation' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'RawDevNoiseReduction' => { Description => 'RAW Rauschunterdrückung', PrintConv => { 'Noise Filter' => 'Rauschfilter', 'Noise Filter (ISO Boost)' => 'Rauschfilter (ISO Boost)', 'Noise Reduction' => 'Rauschreduktion', }, }, 'RawDevPMPictureTone' => { PrintConv => { 'Blue' => 'Blau', 'Green' => 'Grün', 'Purple' => 'Lila', }, }, 'RawDevPM_BWFilter' => { PrintConv => { 'Green' => 'Grün', 'Red' => 'Rot', 'Yellow' => 'Gelb', }, }, 'RawDevPictureMode' => { PrintConv => { 'Natural' => 'Natürlich', }, }, 'RawDevWhiteBalance' => { PrintConv => { 'Color Temperature' => 'Farbtemperatur', }, }, 'RawFile' => 'RAW Datei', 'RawFileName' => 'RAW Dateiname', 'RawImageCenter' => 'RAW-Bildmitte', 'RawImageDigest' => 'RAW Image Kennwert', 'RawImageHeight' => 'Raw Bildhöhe', 'RawImageSegmentation' => 'Raw Bild Aufteilung', 'RawImageSize' => 'RAW-Bildgröße', 'RawImageWidth' => 'Raw Bildbreite', 'RawInfoVersion' => 'RawInfo Version', 'RawJpgQuality' => { Description => 'RAW JPEG-Qualität', PrintConv => { 'Fine' => 'Fein', 'Superfine' => 'Superfein', 'n/a' => '(nicht gesetzt)', }, }, 'RawJpgSize' => { Description => 'RAW JPEG-Größe', PrintConv => { 'Large' => 'Groß', 'Medium' => 'Mittelgroß', 'Medium 1' => 'Mittelgroß 1', 'Medium 2' => 'Mittelgroß 2', 'Medium 3' => 'Mittelgroß 3', 'Medium Movie' => 'Mittelgroßer Film', 'Postcard' => 'Postkarte', 'Small' => 'Klein', 'Small Movie' => 'Kleiner Film', 'Widescreen' => 'Breitbild', }, }, 'RawMeasuredRGGB' => 'Raw Messung RGGB', 'RecognizedFace1Age' => 'Alter erkanntes Gesicht 1', 'RecognizedFace1Name' => 'Name erkanntes Gesicht 1', 'RecognizedFace1Position' => 'Position erkanntes Gesicht 1', 'RecognizedFace2Age' => 'Alter erkanntes Gesicht 2', 'RecognizedFace2Name' => 'Name erkanntes Gesicht 2', 'RecognizedFace2Position' => 'Position erkanntes Gesicht 2', 'RecognizedFace3Age' => 'Alter erkanntes Gesicht 3', 'RecognizedFace3Name' => 'Name erkanntes Gesicht 3', 'RecognizedFace3Position' => 'Position erkanntes Gesicht 3', 'RecordMode' => { Description => 'Aufzeichnungsmodus', PrintConv => { 'Aperture Priority' => 'Blendenpriorität', 'Manual' => 'Manuell', 'Shutter Priority' => 'Verschlusspriorität', }, }, 'RecordingMode' => { PrintConv => { 'Auto' => 'Automatisch', 'Landscape' => 'Landschaft', 'Manual' => 'Manuell', 'Night Scene' => 'Nachtszene', 'Portrait' => 'Porträt', }, }, 'RedAdjust' => 'Rot-Korrektur', 'RedBalance' => 'Farbabgleich Rot', 'RedEyeCorrection' => { Description => 'Rote-Augen-Reduzierung', PrintConv => { 'Automatic' => 'Automatisch', 'Click on Eyes' => 'Klick auf Augen', 'Off' => 'Aus', }, }, 'RedEyeReduction' => { Description => 'Rote Augen Reduzierung', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'RedMatrixColumn' => 'Rot-Matrixspalte', 'RedSaturation' => 'Farbsättingung Rot', 'RedTRC' => 'Rot-Tonwertwiedergabe-Kurve', 'RedX' => 'Rotpunkt X', 'RedY' => 'Rotpunkt Y', 'ReductionMatrix1' => 'Reduktionsmatrix 1', 'ReductionMatrix2' => 'Reduktionsmatrix 2', 'ReferenceBlackWhite' => 'Schwarz-Weiß-Referenzpunkte', 'ReferenceDate' => 'Referenzdatum', 'ReferenceNumber' => 'Referenznummer', 'ReferenceService' => 'Referenzdienst', 'References' => 'Verweise', 'RelatedImageFileFormat' => 'Dateiformat der Bilddaten', 'RelatedImageHeight' => 'Bildhöhe', 'RelatedImageWidth' => 'Bildbreite', 'RelatedSoundFile' => 'Zugehörige Audio-Datei', 'ReleaseButtonToUseDial' => { Description => 'Tastenverhalten', PrintConv => { 'No' => 'Gedrückt halten', 'Yes' => 'Ein & aus', }, }, 'ReleaseDate' => 'Veröffentlichungsdatum', 'ReleaseMode' => { Description => 'Auslösemodus', PrintConv => { 'AE Bracketing' => 'Belichtungsreihe', 'Contrast Bracketing' => 'Kontrast Belichtungsreihe', 'High Speed Burst' => 'Aufnahme Burst', 'WB Bracketing' => 'Weißabgleich-Belichtungsreihe', 'n/a' => '(nicht gesetzt)', }, }, 'ReleaseTime' => 'Veröffentlichungszeit', 'RemoteOnDuration' => 'Fernauslöser', 'RenderingIntent' => { Description => 'Umrechnungsmethode', PrintConv => { 'ICC-Absolute Colorimetric' => 'Absolut farbmetrisch', 'Media-Relative Colorimetric' => 'Relativ farbmetrisch', 'Perceptual' => 'Wahrnehmungsorientiert (perzeptiv, fotografisch)', 'Saturation' => 'Sättigungserhaltend', }, }, 'RepeatingFlashCount' => 'Stroboskopblitz Anzahl', 'RepeatingFlashOutput' => 'Stroboskopblitz Leistung', 'RepeatingFlashRate' => 'Stroboskopblitz Freq.', 'ResampleParamsQuality' => { PrintConv => { 'High' => 'Hoch', 'Low' => 'Leicht', }, }, 'Resaved' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'Resolution' => 'Bildauflösung', 'ResolutionUnit' => { Description => 'Einheit der X- und Y-Auflösung', PrintConv => { 'None' => 'Keine', 'inches' => 'Inch', }, }, 'RetouchHistory' => { Description => 'Bildbearbeitungsschritte', PrintConv => { 'B & W' => 'Schwarz/Weiß', 'Color Custom' => 'Farbabgleich', 'Cyanotype' => 'Blauton', 'Distortion Control' => 'Verzeichnungskontrolle', 'Fisheye' => 'Fischauge', 'Image Overlay' => 'Bildmontage', 'None' => 'Keine', 'Perspective Control' => 'Perspektivenkontrolle', 'Red Eye' => 'Rote-Augen-Korrektur', 'Sky Light' => 'Skylight', 'Small Picture' => 'Kompaktbild', 'Soft Filter' => 'Weichzeichner', 'Trim' => 'Beschneiden', 'Warm Tone' => 'Warmer Farbton', }, }, 'ReverseIndicators' => 'Skalen spiegeln', 'ReverseShutterSpeedAperture' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'RevisionDate' => 'Revisionsdatum', 'RevisionNumber' => 'Revisionsnummer', 'RicohDate' => 'Ricoh Datum', 'RicohImageHeight' => 'Ricoh-Bildhöhe', 'RicohImageWidth' => 'Ricoh-Bildbreite', 'Rights' => 'Rechte', 'Rotation' => { Description => 'Ausrichtung', PrintConv => { 'Horizontal (Normal)' => 'Horizontal (normal)', 'Rotate 180' => '180° gedreht', 'Rotate 270 CW' => '90° gegen den Uhrzeigersinn', 'Rotate 90 CW' => '90° im Uhrzeigersinn', 'Rotated 180' => '180° gedreht', 'Rotated 270 CW' => '90° gegen den Uhrzeigersinn', 'Rotated 90 CW' => '90° im Uhrzeigersinn', }, }, 'RowsPerStrip' => 'Anzahl der Bild-Zeilen', 'SPIFFVersion' => 'SPIFF-Version', 'SRAWQuality' => { Description => 'SRAW Qualität', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SRActive' => { Description => 'Bildstabilisator', PrintConv => { 'No' => 'Deaktiviert', 'Yes' => 'Aktiviert', }, }, 'SRFocalLength' => 'SR Brennweite', 'SRHalfPressTime' => 'Auslöseverzögerung', 'SRResult' => { Description => 'Bildstabilisator', PrintConv => { 'Not stabilized' => 'Nicht stabilisiert', }, }, 'SVGVersion' => 'SVG-Version', 'SafetyShift' => { PrintConv => { 'Disable' => 'Nicht möglich', 'Enable (ISO speed)' => 'Möglich (ISO Empfindlichkeit)', 'Enable (Tv/Av)' => 'Möglich (Tv/Av)', }, }, 'SafetyShiftInAvOrTv' => { Description => 'Safety Shift in AV oder TV', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', }, }, 'SampleFormat' => { PrintConv => { 'Complex int' => 'Komplexer Integer', 'Float' => 'Fließkommawert', 'Signed' => 'Vorzeichenbehafteter Integer', 'Undefined' => 'Nicht definiert', 'Unsigned' => 'Vorzeichenloser Integer', }, }, 'SamplesPerPixel' => 'Anzahl der Komponenten', 'Saturation' => { Description => 'Farbsättigung', PrintConv => { '+1 (med high)' => '+1 (Leicht erhöht)', '+2 (high)' => '+2 (Hohe Farbsättigung)', '+3 (very high)' => '+3 (Sehr hoch)', '-1 (med low)' => '-1 (Leicht verringert)', '-2 (low)' => '-2 (Geringe Farbsättigung)', '-3 (very low)' => '-3 (Sehr gering)', 'B&W' => 'Schwarz/Weiß', 'B&W Green Filter' => 'Schwarz-Weiß Grünfilter', 'B&W Sepia' => 'Schwarz-Weiß Sepia', 'B&W Yellow Filter' => 'Schwarz-Weiß Gelbfilter', 'Black & White' => 'Schwarz/Weiß', 'Film Simulation' => 'Film-Simulation', 'High' => 'Hohe Farbsättigung', 'Low' => 'Geringe Farbsättigung', 'Medium High' => 'Mittel-Hoch', 'Medium Low' => 'Mittel-Gering', 'Natural' => 'Natürlich', 'None' => 'Nicht gesetzt', 'None (B&W)' => 'Keine (S&W)', 'Toning Effect' => 'Tönungseffekt', 'Vintage B&W' => 'Vintage Schwarz-Weiß', 'Vivid' => 'Lebhaft', }, }, 'SaturationAdj' => 'Sättigungskorrektur', 'SaturationAdjustmentAqua' => 'Farbsättigung Korrektur Cyan', 'SaturationAdjustmentBlue' => 'Farbsättigung Korrektur Blau', 'SaturationAdjustmentGreen' => 'Farbsättigung Korrektur Grün', 'SaturationAdjustmentMagenta' => 'Farbsättigung Korrektur Magenta', 'SaturationAdjustmentOrange' => 'Farbsättigung Korrektur Orange', 'SaturationAdjustmentPurple' => 'Farbsättigung Korrektur Lila', 'SaturationAdjustmentRed' => 'Farbsättigung Korrektur Rot', 'SaturationAdjustmentYellow' => 'Farbsättigung Korrektur Gelb', 'SaturationFaithful' => { Description => 'Farbsättigung Natürlich', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SaturationInfo' => 'Farbsättigung', 'SaturationLandscape' => { Description => 'Farbsättigung Landschaft', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SaturationMonochrome' => { PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SaturationNeutral' => { Description => 'Farbsättigung Neutral', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SaturationPlanes' => 'Sättigungsebenen', 'SaturationPortrait' => { Description => 'Farbsättigung Porträt', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SaturationSetting' => 'Sättigungseinstellung', 'SaturationStandard' => { Description => 'Farbsättigung Standard', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SaturationUnknown' => { PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SaturationUserDef1' => { Description => 'Farbsättigung Benutzerdefiniert 1', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SaturationUserDef2' => { Description => 'Farbsättigung Benutzerdefiniert 2', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SaturationUserDef3' => { Description => 'Farbsättigung Benutzerdefiniert 3', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ScaleFactor35efl' => 'Formatfaktor zu 35 mm', 'ScanImageEnhancer' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'Scene' => 'Szene', 'SceneAssist' => 'Szenen-Assistent', 'SceneCaptureType' => { Description => 'Szenenaufnahmetyp', PrintConv => { 'Landscape' => 'Landschaft', 'Night' => 'Nachtszene', 'Portrait' => 'Porträt', }, }, 'SceneMode' => { Description => 'Szenen-Modus', PrintConv => { '3D Sweep Panorama' => '3D Sweep-Panorama', 'Anti Motion Blur' => 'Verwackelungsschutz', 'Aperture Priority' => 'Blendenpriorität', 'Auto' => 'Automatisch', 'Available Light' => 'Verfügbares Licht', 'Baby' => 'Kleinkind', 'Beach' => 'Strand', 'Beach & Snow' => 'Strand & Schnee', 'Behind Glass' => 'Hinterglas', 'Candle' => 'Kerzenlicht', 'Candlelight' => 'Kerzenlicht', 'Children' => 'Kinder', 'Color Effects' => 'Farbeffekte', 'Cont. Priority AE' => 'Andauernde AE Priorität', 'Creative Control' => 'Kreativprogramm', 'Digital Filter' => 'Digitaler Filter', 'Documents' => 'Dokumente', 'Fireworks' => 'Feuerwerk', 'Food' => 'Lebensmittel', 'Handheld Night Shot' => 'Nachtaufnahme händisch', 'High Key' => 'High-Key', 'High Sensitivity' => 'Hohe Empfindlichkeit', 'Indoor' => 'Innenaufnahme', 'Intelligent ISO' => 'Iso Intelligent', 'Landscape' => 'Landschaft', 'Landscape+Portrait' => 'Landschaft+Porträt', 'Low Key' => 'Low-Key', 'Macro' => 'Makro', 'Manual' => 'Manuell', 'My Mode' => 'Benutzerdefiniert', 'Night Landscape' => 'Landschaft bei Nacht', 'Night Portrait' => 'Nachtporträt', 'Night Scene' => 'Nachtszene', 'Night Scenery' => 'Nachtszene', 'Night View/Portrait' => 'Abendszene/Porträt', 'Night+Portrait' => 'Nacht+Porträt', 'Off' => 'Aus', 'Pet' => 'Haustiere', 'Portrait' => 'Porträt', 'Program' => 'Programm', 'Self Portrait' => 'Selbstporträt', 'Self Portrait+Self Timer' => 'Selbstporträt+Selbstauslöser', 'Shutter Priority' => 'Verschlusspriorität', 'Snow' => 'Schnee', 'Sports' => 'Sport', 'Spot' => 'Spotmessung', 'Starry Night' => 'Sternennacht', 'Sunset' => 'Sonnenuntergang', 'Super Macro' => 'Super-Makro', 'Sweep Panorama' => 'Sweep-Panorama', 'Underwater' => 'Unterwasser', 'Underwater Macro' => 'Unterwasser Makro', 'Underwater Wide1' => 'Unterwasserlandschaft', 'Underwater Wide2' => 'Unterwasserlandschaft 2', 'n/a' => '(nicht gesetzt)', }, }, 'SceneModeUsed' => { Description => 'Szenen-Modus', PrintConv => { 'Aperture Priority' => 'Blendenpriorität', 'Beach' => 'Strand', 'Candlelight' => 'Kerzenlicht', 'Children' => 'Kinder', 'Fireworks' => 'Feuerwerk', 'Landscape' => 'Landschaft', 'Macro' => 'Makro', 'Manual' => 'Manuell', 'Night Landscape' => 'Landschaft bei Nacht', 'Night Portrait' => 'Nachtporträt', 'Portrait' => 'Porträt', 'Program' => 'Programm', 'Shutter Priority' => 'Verschlusspriorität', 'Snow' => 'Schnee', 'Sunset' => 'Sonnenuntergang', }, }, 'SceneSelect' => { PrintConv => { 'Night' => 'Nachtszene', 'Off' => 'Aus', }, }, 'SceneType' => { Description => 'Szenentyp', PrintConv => { 'Directly photographed' => 'Direkt aufgenommenes Bild', }, }, 'Security' => { Description => 'Sicherheit', PrintConv => { 'Locked for annotations' => 'Gesperrt für Anmerkungen', 'None' => 'Keine', 'Password protected' => 'Passwort geschützt', 'Read-only enforced' => 'Nur Lesen - erzwungen', 'Read-only recommended' => 'Nur Lesen - vorgeschlagen', }, }, 'SecurityClassification' => { Description => 'Sicherheitsklassifizierung', PrintConv => { 'Confidential' => 'Vertraulich', 'Restricted' => 'Eingeschränkt', 'Secret' => 'Geheim', 'Top Secret' => 'Streng geheim', 'Unclassified' => 'Nicht klassifiziert', }, }, 'SelectAFAreaSelectMode' => { Description => 'AF-Bereich Auswahlmodus', PrintConv => { 'Disable' => 'Deaktiviert', 'Enable' => 'Aktiviert', 'Select AF-modes' => 'Wahl AF-Modus', }, }, 'SelectableAFPoint' => { Description => 'Wählbares AF-Feld', PrintConv => { '11 points' => '11 Felder', '19 Points, Multi-controller selectable' => '19 Punkte, wählbar mit Multicontroller', '19 points' => '19 Felder', '45 points' => '45 Felder', 'Inner 9 Points, Multi-controller selectable' => 'Innere 9 Punkte, wählbar mit Multicontroller', 'Inner 9 points' => 'Innere 9 Felder', 'Outer 9 Points, Multi-controller selectable' => 'Äußere 9 Punkte, wählbar mit Multicontroller', 'Outer 9 points' => 'Äußere 9 Felder', }, }, 'SelfTimer' => { Description => 'Selbstauslöser', PrintConv => { '10 s / 3 pictures' => '10 s / 3 Bilder', 'Off' => 'Aus', 'On' => 'Ein', }, }, 'SelfTimer2' => 'Selbstauslöser (2)', 'SelfTimerMode' => 'Selbstauslösermodus', 'SelfTimerTime' => 'Selbstauslöser-Vorlaufzeit', 'SensingMethod' => { Description => 'Messmethode', PrintConv => { 'Color sequential area' => 'Color-Sequential-Area-Sensor', 'Color sequential linear' => 'Color-Sequential-Linear-Sensor', 'Monochrome area' => 'Monochrom-Sensor', 'Monochrome linear' => 'Monochrom-linearer Sensor', 'Not defined' => 'Nicht definiert', 'One-chip color area' => 'Ein-Chip-Farbsensor', 'Three-chip color area' => 'Drei-Chip-Farbsensor', 'Trilinear' => 'Trilinearer Sensor', 'Two-chip color area' => 'Zwei-Chip-Farbsensor', }, }, 'SensitivityAdjust' => 'ISO-Empfindlichkeitsanpassung', 'SensitivitySteps' => { Description => 'Empfindlichkeits-Schritte', PrintConv => { '1 EV Steps' => '1 LW-Schritte', 'As EV Steps' => 'Wie LW-Schritte', }, }, 'SensitivityType' => { Description => 'Art der Empfindlichkeit', PrintConv => { 'ISO Speed' => 'ISO Empfindlichkeit', 'Recommended Exposure Index' => 'Empfohlener Belichtungsindex', 'Recommended Exposure Index and ISO Speed' => 'Empfohlener Belichtungsindex und ISO Empfindlichkeit', 'Standard Output Sensitivity' => 'Standard Ausgabeempfindlichkeit', 'Standard Output Sensitivity and ISO Speed' => 'Standard Ausgabeempfindlichkeit und ISO Empfindlichkeit', 'Standard Output Sensitivity and Recommended Exposure Index' => 'Standard Ausgabeempfindlichkeit und empfohlener Belichtungsindex', 'Standard Output Sensitivity, Recommended Exposure Index and ISO Speed' => 'Standard Ausgabeempfindlichkeit,empfohlener Belichtungsindex und ISO Empfindlichkeit', 'Unknown' => 'Unbekannt', }, }, 'SensorBlueLevel' => 'Sensor Blau-Level', 'SensorBottomBorder' => 'Sensor unterer Rand', 'SensorCleaning' => { Description => 'Sensorreinigung', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', }, }, 'SensorHeight' => 'Sensor Höhe', 'SensorImageHeight' => 'Sensor-Bildhöhe', 'SensorImageWidth' => 'Sensor-Bildbreite', 'SensorLeftBorder' => 'Sensor linker Rand', 'SensorPixelSize' => 'Sensor-Pixelgröße', 'SensorRedLevel' => 'Sensor Rot-Level', 'SensorRightBorder' => 'Sensor rechter Rand', 'SensorSize' => 'Sensorgröße', 'SensorTemperature' => 'Sensor Temperatur', 'SensorTopBorder' => 'Sensor oberer Rand', 'SensorWidth' => 'Sensor Breite', 'SequenceNumber' => { Description => 'Bildsequenznummer', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SequentialShot' => { Description => 'Reihenaufnahme', PrintConv => { 'Adjust Exposure' => 'Belichtungskorrektur', 'Best' => 'Beste', 'None' => 'Keine', }, }, 'SerialNumber' => 'Seriennummer', 'SerialNumberFormat' => 'Seriennummer-Format', 'ServiceIdentifier' => 'Service-ID', 'SetButtonCrossKeysFunc' => { Description => 'SET Taste/Kreuztaste Funkt.', PrintConv => { 'Cross keys: AF point select' => 'Kreuztaste:AF Feld Auswahl', 'Set: Flash Exposure Comp' => 'SET:Blitzbelichtungskorrektur', 'Set: Parameter' => 'SET:Parameter ändern', 'Set: Picture Style' => 'SET:Bildstil', 'Set: Playback' => 'SET:Wiedergabe', 'Set: Quality' => 'SET:Qualität', }, }, 'SetButtonFunction' => 'Funktion SET-Taste b. Aufnahme', 'SetButtonWhenShooting' => { Description => 'SET-Taste bei Aufnahme', PrintConv => { 'Change ISO speed' => 'ISO-Wert ändern', 'Change parameters' => 'Parameter ändern', 'Default (no function)' => 'Normal (gesperrt)', 'Disabled' => 'Gesperrt', 'Flash exposure compensation' => 'Blitzbelichtungskorrektur', 'ISO speed' => 'ISO-Empfindlichkeit', 'Image playback' => 'Bildwiedergabe', 'Image quality' => 'Qualität ändern', 'Image size' => 'Bildgröße', 'LCD monitor On/Off' => 'LCD-Monitor Ein/Aus', 'Menu display' => 'Menüanzeige', 'Normal (disabled)' => 'Normal (gesperrt)', 'Picture style' => 'Bildstil', 'Quick control screen' => 'Schnelleinstellung Bildschirm', 'Record func. + media/folder' => 'Aufnahme-Funktion + Medium/Ordner', 'Record movie (Live View)' => 'Movie-Aufnahme (Livebild)', 'White balance' => 'Weißabgleich', }, }, 'SetFunctionWhenShooting' => { Description => 'SET-Taste bei Aufnahme', PrintConv => { 'Change Parameters' => 'Parameter ändern', 'Change Picture Style' => 'Bildstil', 'Change quality' => 'Qualität ändern', 'Default (no function)' => 'Normal (gesperrt)', 'Image replay' => 'Bildwiedergabe', 'Menu display' => 'Menüanzeige', }, }, 'ShadingCompensation' => { Description => 'Schattenaufhellung', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ShadingCompensation2' => { Description => 'Schattenaufhellung 2', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'Shadow' => 'Schatten', 'Shadows' => 'Schatten', 'ShakeReduction' => { Description => 'Bildstabilisator (Einstellung)', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ShakeReductionInfo' => 'Bildstabilisator', 'SharpenDetail' => 'Schärfungsdetail', 'SharpenRadius' => 'Schärfungsradius', 'Sharpening' => { Description => 'Schärfung', PrintConv => { 'High' => 'Hoch', 'Low' => 'Niedrig', 'Medium High' => 'Mittel', 'Off' => 'Aus', }, }, 'SharpeningAdj' => 'Schärfekorrektur', 'Sharpness' => { Description => 'Schärfe', PrintConv => { '+1 (med hard)' => '+1 (Leicht erhöht)', '+2 (hard)' => '+2 (Stark)', '+3 (very hard)' => '+3 (Sehr hoch)', '-1 (med soft)' => '-1 (Leicht verringert)', '-2 (soft)' => '-2 (Leicht)', '-3 (very soft)' => '-3 (Sehr weich)', 'Film Simulation' => 'Film-Simulation', 'Hard' => 'Stark', 'Hard2' => 'Hart2', 'Medium Hard' => 'Mittel-Hart', 'Medium Soft' => 'Mittel-Weich', 'Sharp' => 'Hart', 'Soft' => 'Leicht', 'Soft2' => 'Weich 2', 'n/a' => '(nicht gesetzt)', }, }, 'SharpnessAdj' => 'Schärfekorrektur', 'SharpnessFactor' => 'Schärfungsfaktor', 'SharpnessFaithful' => { Description => 'Schärfe Natürlich', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SharpnessFrequency' => { PrintConv => { 'High' => 'Hoch', 'Highest' => 'Höchste', 'Low' => 'Leicht', 'n/a' => '(nicht gesetzt)', }, }, 'SharpnessLandscape' => { Description => 'Schärfe Landschaft', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SharpnessMonochrome' => { Description => 'Schärfe Monochrom', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SharpnessNeutral' => { Description => 'Schärfe Neutral', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SharpnessOvershoot' => 'Schärfe Grenzwertüberschreitung', 'SharpnessPortrait' => { Description => 'Schärfe Porträt', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SharpnessSetting' => 'Schärfeeinstellung', 'SharpnessStandard' => { Description => 'Schärfe Standard', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SharpnessTable' => 'Schärfe Tabelle', 'SharpnessThreshold' => 'Schärfe Grenzwert', 'SharpnessUndershoot' => 'Schärfe Grenzwertunterschreitung', 'SharpnessUnknown' => { PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SharpnessUserDef1' => { Description => 'Schärfe Benutzerdefiniert 1', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SharpnessUserDef2' => { Description => 'Schärfe Benutzerdefiniert 2', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SharpnessUserDef3' => { Description => 'Schärfe Benutzerdefiniert 3', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ShootingInfoDisplay' => { Description => 'Aufnahmeinfo-Ansicht', PrintConv => { 'Auto' => 'Automatisch', 'Manual (dark on light)' => 'Manuell - Dunkel auf Hell', 'Manual (light on dark)' => 'Manuell - Hell auf dunkel', }, }, 'ShootingMode' => { Description => 'Aufnahmemodus', PrintConv => { 'Aperture Priority' => 'Blendenpriorität', 'Baby' => 'Kleinkind', 'Beach' => 'Strand', 'Candlelight' => 'Kerzenlicht', 'Color Effects' => 'Farbeffekte', 'Fireworks' => 'Feuerwerk', 'Food' => 'Lebensmittel', 'High Sensitivity' => 'Hohe Empfindlichkeit', 'Macro' => 'Makro', 'Manual' => 'Manuell', 'Night Portrait' => 'Nachtporträt', 'Night Scenery' => 'Nachtszene', 'Pet' => 'Haustiere', 'Portrait' => 'Porträt', 'Program' => 'Programm', 'Self Portrait' => 'Selbstportait', 'Shutter Priority' => 'Verschlusspriorität', 'Snow' => 'Schnee', 'Sports' => 'Sport', 'Spot' => 'Spotmessung', 'Starry Night' => 'Sternennacht', 'Sunset' => 'Sonnenuntergang', 'Underwater' => 'Unterwasser', }, }, 'ShootingModeSetting' => { Description => 'Messfeldsteuerung', PrintConv => { 'Continuous' => 'Serienaufnahme', 'Delayed Remote' => 'Fernauslöser m. Vorlauf', 'Quick-response Remote' => 'Fernauslöser', 'Self-timer' => 'Selbstauslöser', 'Single Frame' => 'Einzelbild', }, }, 'ShortDescription' => 'Kurzbeschreibung', 'ShortDocumentID' => 'Kurze Bild-ID', 'ShortReleaseTimeLag' => { Description => 'Verkürzte Auslöseverzögerung', PrintConv => { 'Disable' => 'Ausgeschaltet', 'Enable' => 'Eingeschaltet', }, }, 'ShotInfoVersion' => 'Aufnahmeinfo-Version', 'Shutter-AELock' => { Description => 'Auslöser/AE-Speicherung', PrintConv => { 'AE lock/AF' => 'AE-Speicherung/AF', 'AE/AF, No AE lock' => 'AE/AF, keine AE-Speicherung', 'AF/AE lock' => 'AF/AE-Speicherung', 'AF/AF lock' => 'AF/AF-Speicherung', 'AF/AF lock, No AE lock' => 'AF/AF-Speicherung, keine AE-Speicherung', }, }, 'ShutterAELButton' => 'Auslöser/AE-Speichertaste', 'ShutterButtonAFOnButton' => { Description => 'Auslöser/AF-Starttaste', PrintConv => { 'AE lock/Metering + AF start' => 'AESpeicherung/Messung+AFStart', 'Metering + AF start' => 'Messung+AFStart', 'Metering + AF start/AF stop' => 'Messung+AFStart / AFStopp', 'Metering + AF start/disable' => 'Messung+AFStart/Deaktiviert', 'Metering start/Meter + AF start' => 'Messung Start/Mess.+AFStart', }, }, 'ShutterCount' => 'Anzahl der Auslösungen', 'ShutterCurtainSync' => { Description => 'Verschluss-Synchronisation', PrintConv => { '1st-curtain sync' => '1. Verschlussvorhang', '2nd-curtain sync' => '2. Verschlussvorhang', }, }, 'ShutterMode' => { PrintConv => { 'Aperture Priority' => 'Blendenpriorität', 'Auto' => 'Automatisch', }, }, 'ShutterReleaseButtonAE-L' => { Description => 'Belichtungsspeicher', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ShutterReleaseMethod' => { PrintConv => { 'Continuous Shooting' => 'Serienaufnahme', 'Single Shot' => 'Einzelbild', }, }, 'ShutterReleaseNoCFCard' => { Description => 'Verschlussausl. ohne Karte', PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'ShutterReleaseTiming' => { PrintConv => { 'Priority on focus' => 'Schärfepriorität', 'Priority on shutter' => 'Verschlußpriorität', }, }, 'ShutterSpeed' => 'Belichtungsdauer', 'ShutterSpeedDisplayed' => 'Angezeigte Belichtungszeit', 'ShutterSpeedRange' => { Description => 'Einstellung Blendenbereich', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', }, }, 'ShutterSpeedSetting' => 'Belichtungszeit Einstellung', 'ShutterSpeedValue' => 'Belichtungszeit', 'SimilarityIndex' => 'Bildgleichheits-Index', 'SingleFrameBracketing' => { Description => 'Einzelbild-Belichtungsreihe', PrintConv => { 'High' => 'Hoch', 'Low' => 'Niedrig', }, }, 'SlaveFlashMeteringSegments' => 'Slave-Blitz-Messfeld', 'SlideShow' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'SlowShutter' => { Description => 'Langzeitbelichtungseinstellung', PrintConv => { 'Night Scene' => 'Nachtszene', 'None' => 'Keine', 'Off' => 'Aus', 'On' => 'Ein', 'n/a' => '(nicht gesetzt)', }, }, 'SlowSync' => { Description => 'Slow-Synchro', PrintConv => { 'Off' => 'Aus', 'On' => 'An', }, }, 'SoftSkinEffect' => { PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'SonyImageSize' => { Description => 'Sony Bildgröße', PrintConv => { 'Large' => 'Groß', 'Large (16:9)' => 'Groß (16:9)', 'Large (3:2)' => 'Groß (3:2)', 'Medium' => 'Mittel', 'Medium (16:9)' => 'Mittel (16:9)', 'Medium (3:2)' => 'Mittel (3:2)', 'Small' => 'Klein', 'Small (16:9)' => 'Klein (16:9)', 'Small (3:2)' => 'Klein (3:2)', }, }, 'Source' => 'Quelle', 'SpatialFrequencyResponse' => 'Raumfrequenz-Antwort', 'SpecialEffectMode' => { Description => 'Spezialeffekte Modus', PrintConv => { 'Mist Removal' => 'Dunstentfernung', 'Off' => 'Aus', 'Vivid Landscape' => 'Lebende Landschaft', }, }, 'SpecialEffectsOpticalFilter' => { Description => 'Spezialeffekt Filter', PrintConv => { 'Colored' => 'Farbfilter', 'Diffusion' => 'Diffusionsfilter', 'Multi-image' => 'Mehrfachbildfilter', 'None' => 'Keiner', 'Polarizing' => 'Polarisationsfilter', 'Split-field' => 'Splitfilter', 'Star' => 'Sternenfilter', }, }, 'SpecialInstructions' => 'Anweisungen', 'SpecialMode' => 'Spezialmodus', 'SpectralSensitivity' => 'Spektralempfindlichkeit', 'SpotFocusPointX' => 'Spot-Fokuspunkt X', 'SpotFocusPointY' => 'Spot-Fokuspunkt Y', 'SpotMeterLinkToAFPoint' => { Description => 'Spotmessung AF-Feld verknüpft', PrintConv => { 'Disable (use center AF point)' => 'Deaktiviert (zentrales AF-Feld)', 'Enable (use active AF point)' => 'Aktiviert (aktives AF-Feld)', }, }, 'SpotMeteringMode' => { Description => 'Spot-Messmethode', PrintConv => { 'AF Point' => 'AF-Punkt', 'Center' => 'Mitte', }, }, 'State' => 'Bundesland/Kanton', 'StereoMode' => 'Stereomodus', 'StripByteCounts' => 'Anzahl Bytes pro komprimiertem Bildabschnitt', 'StripOffsets' => 'Bilddatenposition', 'Sub-location' => 'Ort des Motivs', 'SubSecCreateDate' => 'Digitalisierungsdatum/-uhrzeit', 'SubSecDateTimeOriginal' => 'Erstellungsdatum/-uhrzeit', 'SubSecModifyDate' => 'Änderungsdatum', 'SubSecTime' => 'Datum/Uhrzeit 1/100 Sekunden', 'SubSecTimeDigitized' => 'Digitalisierungsdatum/-uhrzeit 1/100 Sekunden', 'SubSecTimeOriginal' => 'Erstellungsdatum/-uhrzeit 1/100 Sekunden', 'SubfileType' => { Description => 'Unterdatei-Typ', PrintConv => { 'Alternate reduced-resolution image' => 'Alternatives Bild in reduzierter Auflösung', 'Full-resolution Image' => 'Bild in voller Auflösung', 'Reduced-resolution image' => 'Bild in reduzierter Auflösung', 'Single page of multi-page image' => 'Einzelbild eines mehrseitigen Bildes', 'Single page of multi-page reduced-resolution image' => 'Einzelbild eines mehrseitigen Bildes in reduzierter Auflösung', 'TIFF-FX mixed raster content' => 'TIFF-FX gersteter Inhalt', 'TIFF/IT final page' => 'TIFF/IT endgültige Seite', 'Thumbnail image' => 'Miniaturbild', 'Transparency mask' => 'Transparenzmaske', 'Transparency mask of multi-page image' => 'Transparenzmaske eines mehrseitigen Bildes', 'Transparency mask of reduced-resolution image' => 'Transparenzmaske eines Bildes in reduzierter Auflösung', 'Transparency mask of reduced-resolution multi-page image' => 'Transparenzmaske eines mehrseitigen Bildes in reduzierter Auflösung', }, }, 'SubimageColor' => { PrintConv => { 'Monochrome' => 'Monochrom', }, }, 'Subject' => 'Thema', 'SubjectArea' => 'Hauptobjektposition', 'SubjectCode' => 'Themencode', 'SubjectDistance' => 'Objektentfernung', 'SubjectDistanceRange' => { Description => 'Objektdistanzbereich', PrintConv => { 'Close' => 'Nahaufnahme', 'Distant' => 'Fernaufnahme', 'Macro' => 'Makro', 'Unknown' => 'Unbekannt', }, }, 'SubjectLocation' => 'Hauptobjektposition', 'SubjectProgram' => { Description => 'Szenenauswahl', PrintConv => { 'Night portrait' => 'Nachtporträt', 'None' => 'Keine', 'Portrait' => 'Porträt', 'Sports action' => 'Sportereignis', 'Sunset' => 'Sonnenuntergang', }, }, 'SubjectReference' => 'Themencode', 'SubjectUnits' => { PrintConv => { 'meters' => 'Meter', 'radians' => 'Winkelgrade', }, }, 'Subsystem' => { PrintConv => { 'Unknown' => 'Unbekannt', }, }, 'SuperMacro' => { Description => 'Super Makro', PrintConv => { 'Off' => 'Aus', }, }, 'SuperimposedDisplay' => { Description => 'Eingeblendete Anzeige', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'SupplementalCategories' => 'Zusätzliche Kategorien', 'SvISOSetting' => 'Sv ISO-Einstellung', 'SwitchToRegisteredAFPoint' => { Description => 'Auf gesp. AF-Messf. schalten', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', 'Only while AEL is pressed' => 'Nur während AEL gedrückt', 'Switch with multi-controller' => 'Wechseln mit Multicontroller', }, }, 'T4Options' => 'Füllbits hinzugefügt', 'T6Options' => 'T6 Optionen', 'T82Options' => 'T82 Option', 'TIFFPreview' => 'TIFF Vorschaubild', 'TIFF_FXExtensions' => { PrintConv => { 'B&W JBIG2' => 'Schwarz-Weiß JBIG2', }, }, 'TTL_DA_ADown' => 'Slave-Blitz-Messfeld 6', 'TTL_DA_AUp' => 'Slave-Blitz-Messfeld 5', 'TTL_DA_BDown' => 'Slave-Blitz-Messfeld 8', 'TTL_DA_BUp' => 'Slave-Blitz-Messfeld 7', 'Tagged' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'TargetAperture' => 'Zielblendenwert', 'TargetCompressionRatio' => 'Ziel-Komprimierungsrate', 'TargetExposureTime' => 'Zielbelichtungszeit', 'Technology' => { Description => 'Technologie', PrintConv => { 'Active Matrix Display' => 'Aktives Matrix-Display', 'Cathode Ray Tube Display' => 'Kathodenstrahlröhrenbildschirm', 'Digital Camera' => 'Digitalkamera', 'Dye Sublimation Printer' => 'Thermosublimationsdrucker', 'Electrophotographic Printer' => 'Laserdrucker', 'Electrostatic Printer' => 'Elektrostatischer Drucker', 'Film Scanner' => 'Film-Scanner', 'Film Writer' => 'Film-Writer', 'Flexography' => 'Flexographie', 'Gravure' => 'Gravur', 'Ink Jet Printer' => 'Tintenstrahldrucker', 'Offset Lithography' => 'Offset Lithographie', 'Passive Matrix Display' => 'Passives Matrix-Display', 'Photo CD' => 'Photo-CD', 'Photo Image Setter' => 'Foto-Filmbelichter', 'Photographic Paper Printer' => 'Fotopapierdrucker', 'Projection Television' => 'Projektionsfernsehgerät', 'Reflective Scanner' => 'Reflexionsscanner', 'Thermal Wax Printer' => 'Thermowachsdrucker', 'Video Camera' => 'Videokamera', 'Video Monitor' => 'Video-Monitor', }, }, 'Teleconverter' => { Description => 'Telekonverter', PrintConv => { 'None' => 'Keiner', }, }, 'TextEncoding' => { PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'TextStamp' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ThumbnailFileName' => 'Miniaturbild-Dateiname', 'ThumbnailFormat' => 'Miniaturbild-Format', 'ThumbnailHeight' => 'Miniaturbild-Höhe', 'ThumbnailImage' => 'Miniaturbild', 'ThumbnailImageName' => 'Miniaturbild-Name', 'ThumbnailImageSize' => 'Miniaturbild-Größe', 'ThumbnailImageType' => 'Miniaturbild-Typ', 'ThumbnailImageValidArea' => 'Gültiger Bereich des Miniaturbildes', 'ThumbnailLength' => 'Miniaturbild-Datenlänge', 'ThumbnailOffset' => 'Miniaturbild-Datenposition', 'ThumbnailWidth' => 'Miniaturbild-Breite', 'Time' => 'Zeit', 'TimeCreated' => 'Erstellungszeit', 'TimeScaleParamsQuality' => { PrintConv => { 'High' => 'Hoch', 'Low' => 'Leicht', }, }, 'TimeSent' => 'Absendezeit', 'TimeSincePowerOn' => 'Einschaltdauer', 'TimeStamp' => 'Zeitstempel', 'TimeStamp1' => 'Zeitstempel (1)', 'TimeZone' => 'Zeitzone', 'TimeZoneCity' => { Description => 'Zeitzone Stadt', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'TimeZoneCode' => 'Zeitzonen-Code', 'TimeZoneInfo' => 'Zeitzonen-Info', 'TimeZoneOffset' => 'Zeitzonen-Offset', 'TimerFunctionButton' => { Description => 'Funktionstaste', PrintConv => { 'Auto Bracketing' => 'Belichtungsreihe', 'ISO' => 'ISO-Empfindlichkeit', 'Image Quality/Size' => 'Bildqualität/-größe', 'Self-timer' => 'Selbstauslöser', 'Shooting Mode' => 'Aufnahmebetriebsart', 'White Balance' => 'Weißabgleich', }, }, 'TimerLength' => { Description => 'Intervalldauer für Timer', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', }, }, 'Title' => 'Titel', 'ToneComp' => 'Tonwertkorrektur', 'ToneCurve' => { Description => 'Ton-Kurve', PrintConv => { 'Custom' => 'Benutzerdefiniert', 'Manual' => 'Manuell', }, }, 'ToneCurve1' => 'Tonwertkurve 1', 'ToneCurve2' => 'Tonwertkurve 2', 'ToneCurve3' => 'Tonwertkurve 3', 'ToneCurve4' => 'Tonwertkurve 4', 'ToneCurveActive' => { Description => 'Tonwertkurve aktiv', PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'ToneCurveBlue' => 'Tonwertkurve Blau', 'ToneCurveBlueX' => 'Tonwertkurve Blau X', 'ToneCurveBlueY' => 'Tonwertkurve Blau Y', 'ToneCurveBrightnessX' => 'Tonwertkurve Helligkeit X', 'ToneCurveBrightnessY' => 'Tonwertkurve Helligkeit Y', 'ToneCurveFileName' => 'Tonwertkurve Dateiname', 'ToneCurveGreen' => 'Tonwertkurve Grün', 'ToneCurveGreenX' => 'Tonwertkurve Grün X', 'ToneCurveGreenY' => 'Tonwertkurve Grün Y', 'ToneCurveInterpolation' => { Description => 'Tonwertkurve Interpolation', PrintConv => { 'Curve' => 'Kurve', 'Straight' => 'Gerade', }, }, 'ToneCurveMatching' => 'Tonwertkurve Übereinstimmung', 'ToneCurveMode' => { Description => 'Tonwertkurve Modus', PrintConv => { 'Luminance' => 'Luminanz', }, }, 'ToneCurveName' => { Description => 'Tonwertkurve Name', PrintConv => { 'Custom' => 'Benutzerdefiniert', 'Medium Contrast' => 'Kontrast mittel', 'Strong Contrast' => 'Kontrast stark', }, }, 'ToneCurveName2012' => 'Tonwertkurve Name 2012', 'ToneCurvePV2012' => 'Tonwertkurve PV2012', 'ToneCurvePV2012Blue' => 'Tonwertkurve PV2012 Blau', 'ToneCurvePV2012Green' => 'Tonwertkurve PV2012 Grün', 'ToneCurvePV2012Red' => 'Tonwertkurve PV2012 Rot', 'ToneCurveProperty' => { Description => 'Tonwertkurve Eigenschaft', PrintConv => { 'Custom 1' => 'Benutzerdefiniert 1', 'Custom 2' => 'Benutzerdefiniert 2', 'Custom 3' => 'Benutzerdefiniert 3', 'Custom 4' => 'Benutzerdefiniert 4', 'Custom 5' => 'Benutzerdefiniert 5', 'Shot Settings' => 'Aufnahmeeinstellung', }, }, 'ToneCurveRed' => 'Tonwertkurve Rot', 'ToneCurveRedX' => 'Tonwertkurve Rot X', 'ToneCurveRedY' => 'Tonwertkurve Rot Y', 'ToneCurveTable' => 'Tonwertkurve Tabelle', 'ToneCurves' => 'Ton-Kurven', 'ToningEffect' => { Description => 'Tönungseffekt', PrintConv => { 'B&W' => 'Schwarz/Weiß', 'Blue' => 'Blau', 'Blue-green' => 'Blau-Grün', 'Color' => 'Farbe', 'Green' => 'Grün', 'None' => 'Keiner', 'Purple' => 'Lila', 'Purple-blue' => 'Violett-Blau', 'Red' => 'Rot', 'Red-purple' => 'Rot-Violett', 'Yellow' => 'Gelb', 'n/a' => '(nicht gesetzt)', }, }, 'ToningEffectFaithful' => { Description => 'Tönungseffekt Natürlich', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ToningEffectLandscape' => { Description => 'Tönungseffekt Landschaft', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ToningEffectMonochrome' => { Description => 'Tönungseffekt Monochrom', PrintConv => { 'Blue' => 'Blau', 'Green' => 'Grün', 'None' => 'Keiner', 'Purple' => 'Lila', 'n/a' => '(nicht gesetzt)', }, }, 'ToningEffectNeutral' => { Description => 'Tönungseffekt Neutral', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ToningEffectPortrait' => { Description => 'Tönungseffekt Porträt', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ToningEffectStandard' => { Description => 'Tönungseffekt Standard', PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'ToningEffectUnknown' => { Description => 'Tönungseffekt Unbekannt', PrintConv => { 'Blue' => 'Blau', 'Green' => 'Grün', 'None' => 'Keiner', 'Purple' => 'Lila', 'n/a' => '(nicht gesetzt)', }, }, 'ToningEffectUserDef1' => { Description => 'Tönungseffekt Benutzerdefiniert 1', PrintConv => { 'Blue' => 'Blau', 'Green' => 'Grün', 'None' => 'Keiner', 'Purple' => 'Lila', 'n/a' => '(nicht gesetzt)', }, }, 'ToningEffectUserDef2' => { Description => 'Tönungseffekt Benutzerdefiniert 2', PrintConv => { 'Blue' => 'Blau', 'Green' => 'Grün', 'None' => 'Keiner', 'Purple' => 'Lila', 'n/a' => '(nicht gesetzt)', }, }, 'ToningEffectUserDef3' => { Description => 'Tönungseffekt Benutzerdefiniert 3', PrintConv => { 'Blue' => 'Blau', 'Green' => 'Grün', 'None' => 'Keiner', 'Purple' => 'Lila', 'n/a' => '(nicht gesetzt)', }, }, 'ToningSaturation' => 'Tönungssättigung', 'TotalZoom' => 'Gesamtzoom', 'TrailerSignature' => 'Signatur des Nachspanns', 'TransferFunction' => 'Transformationsfunktion', 'Transform' => { Description => 'Transformation', PrintConv => { 'Off' => 'Aus', 'Slim High' => 'Stark abnehmend', 'Slim Low' => 'Wenig abnehmend', 'Stretch High' => 'Stark streckend', 'Stretch Low' => 'Wenig streckend', }, }, 'Transformation' => { PrintConv => { 'Mirror horizontal' => 'Horizontal gespiegelt', 'Mirror horizontal and rotate 270 CW' => 'Horizontal gespiegelt und 90° gegen den Uhrzeigersinn', 'Mirror horizontal and rotate 90 CW' => 'Horizontal gespiegelt und 90° im Uhrzeigersinn', 'Mirror vertical' => 'Vertikal gespiegelt', 'Rotate 180' => '180° gedreht', 'Rotate 270 CW' => '90° gegen den Uhrzeigersinn', 'Rotate 90 CW' => '90° im Uhrzeigersinn', }, }, 'TransmissionReference' => 'Übertragungsbezug', 'Trapped' => { PrintConv => { 'Unknown' => 'Unbekannt', }, }, 'TravelDay' => 'Reisetag', 'TvExposureTimeSetting' => 'Tv Belichtungszeit-Einstellung', 'Type' => 'Typ', 'TypeOfOriginal' => { PrintConv => { 'B&W Document' => 'Schwarz-Weiß Dokument', 'B&W Print' => 'Schwarz-Weiß Druck', 'Color Document' => 'Farb Dokument', 'Color Print' => 'Farbdruck', }, }, 'USMLensElectronicMF' => { Description => 'USM-Objektiv, elektr. MF', PrintConv => { 'Disable after one-shot AF' => 'Nicht mögl. nach One-Shot AF', 'Disable in AF mode' => 'Nicht möglich im AF-Modus', 'Enable after one-shot AF' => 'Möglich nach One-Shot AF', }, }, 'Uncompressed' => { Description => 'Unkomprimiert', PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'UniqueCameraModel' => 'Eindeutige Kamerabezeichnung', 'UniqueDocumentID' => 'Eindeutige Bild-ID', 'Unknown' => 'Unbekannt', 'UnknownInfoVersion' => 'Unbekannte Info Version', 'UnknownLinear' => { PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'Unknown_CNDB' => 'CNDB unbekannt', 'Unsharp1Color' => { PrintConv => { 'Blue' => 'Blau', 'Green' => 'Grün', 'Red' => 'Rot', 'Yellow' => 'Gelb', }, }, 'Unsharp2Color' => { PrintConv => { 'Blue' => 'Blau', 'Green' => 'Grün', 'Red' => 'Rot', 'Yellow' => 'Gelb', }, }, 'Unsharp3Color' => { PrintConv => { 'Blue' => 'Blau', 'Green' => 'Grün', 'Red' => 'Rot', 'Yellow' => 'Gelb', }, }, 'Unsharp4Color' => { PrintConv => { 'Blue' => 'Blau', 'Green' => 'Grün', 'Red' => 'Rot', 'Yellow' => 'Gelb', }, }, 'UnsharpMask' => { Description => 'Unschärfemaske', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'Urgency' => { Description => 'Dringlichkeit', PrintConv => { '0 (reserved)' => '0 (reserviert)', '1 (most urgent)' => '1 (sehr dringend)', '5 (normal urgency)' => '5 (normale Dringlichkeit)', '8 (least urgent)' => '8 (geringe Dringlichkeit)', '9 (user-defined priority)' => '9 (benutzerdefinierte Priorität)', }, }, 'UsableMeteringModes' => { Description => 'Wahl nutzbarer Messmethoden', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', }, }, 'UsableShootingModes' => { Description => 'Wahl nutzbarer Aufnahmemodi', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', }, }, 'UsageTerms' => 'Verwendungsvorschriften', 'UserComment' => 'Benutzerkommentar', 'UserDef1PictureStyle' => { Description => 'Bildstil Benutzerdefiniert 1', PrintConv => { 'Faithful' => 'Natürlich', 'Landscape' => 'Landschaft', 'Monochrome' => 'Monochrom', 'Portrait' => 'Porträt', }, }, 'UserDef2PictureStyle' => { Description => 'Bildstil Benutzerdefiniert 2', PrintConv => { 'Faithful' => 'Natürlich', 'Landscape' => 'Landschaft', 'Monochrome' => 'Monochrom', 'Portrait' => 'Porträt', }, }, 'UserDef3PictureStyle' => { Description => 'Bildstil Benutzerdefiniert 3', PrintConv => { 'Faithful' => 'Natürlich', 'Landscape' => 'Landschaft', 'Monochrome' => 'Monochrom', 'Portrait' => 'Porträt', }, }, 'UserFields' => 'Benutzerfelder', 'UserProfile' => { Description => 'Benutzerprofil', PrintConv => { 'User Profile 0 (Dynamic)' => 'Benutzerprofil 0 (dynamisch)', 'User Profile 1' => 'Benutzerprofil 1', 'User Profile 2' => 'Benutzerprofil 2', 'User Profile 3' => 'Benutzerprofil 3', }, }, 'VFDisplayIllumination' => { PrintConv => { 'Disable' => 'Deaktiviert', 'Enable' => 'Aktiviert', }, }, 'VRDVersion' => 'VRD-Version', 'VRInfo' => 'Bildstabilisator-Informationen', 'VRInfoVersion' => 'VR-Info-Version', 'VR_0x66' => { PrintConv => { 'Off' => 'Aus', 'On (active)' => 'Ein (Aktiv)', 'On (normal)' => 'Ein (Normal)', }, }, 'ValidAFPoints' => 'Gültige AF-Punkte', 'ValidBits' => 'Verwendete Bits', 'ValidPixelDepth' => 'Farbtiefe', 'VariProgram' => 'Aufnahmeprogramm', 'VibrationReduction' => { Description => 'Bildstabilisation', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', 'On (1)' => 'Ein (1)', 'On (2)' => 'Ein (2)', 'On (3)' => 'Ein (3)', 'n/a' => '(nicht gesetzt)', }, }, 'ViewInfoDuringExposure' => { Description => 'Sucherinfo bei Belichtung', PrintConv => { 'Disable' => 'Nicht möglich', 'Enable' => 'Möglich', }, }, 'ViewfinderWarning' => { Description => 'Warnsymbol im Sucher', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'ViewfinderWarnings' => { PrintConv => { 'ISO expansion' => 'ISO-Erweiterung', }, }, 'ViewingMode2' => { PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'VignetteControl' => { Description => 'Vignettierungskorrektur', PrintConv => { 'High' => 'Hoch', 'Low' => 'Schwach', 'Normal' => 'Mittel', 'Off' => 'Aus', 'On' => 'Ein', }, }, 'VignetteControlIntensity' => 'Vignettierungskorrektur Stärke', 'VignettingCorrection' => { PrintConv => { 'n/a' => '(nicht gesetzt)', }, }, 'VirtualImageHeight' => 'Virtuelle Bildhöhe', 'VirtualImageWidth' => 'Virtuelle Bildbreite', 'VirtualPageUnits' => 'Virtuelle Seitenzahl', 'VoiceMemo' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'Volume' => 'Band', 'WBAdjColorTemp' => 'Weißabgleich Farbtemperaturkorrektur', 'WBAdjLighting' => { PrintConv => { 'Daylight (cloudy)' => 'Tageslicht (2)', 'Daylight (direct sunlight)' => 'Tageslicht (0)', 'Daylight (shade)' => 'Tageslicht (1)', 'Flash' => 'Blitz', 'Incandescent' => 'Glühbirne', 'None' => 'Keines', }, }, 'WBBlueLevel' => 'Farbabgleich Blau', 'WBBracketMode' => { Description => 'Weißabgleich Belichtungsreihen-Modus', PrintConv => { 'Off' => 'Aus', 'On (shift AB)' => 'Ein (AB-Verschiebung)', 'On (shift GM)' => 'Ein (GM-Verschiebung)', }, }, 'WBBracketShotNumber' => 'Weißabgleich-Belichtungsreihen-Bildnummer', 'WBBracketValueAB' => 'Weißabgleich AB-Belichtungsreihen-Wert', 'WBBracketValueGM' => 'Weißabgleich GM-Belichtungsreihen-Wert', 'WBFineTuneActive' => { Description => 'Weißabgleich Feinabstimmung aktiv', PrintConv => { 'No' => 'Nein', 'Yes' => 'Ja', }, }, 'WBFineTuneSaturation' => 'Weißabgleich Sättigung Feinabstimmung', 'WBFineTuneTone' => 'Weißabgleich Farbton Feinabstimmung', 'WBGreenLevel' => 'Farbabgleich Grün', 'WBMediaImageSizeSetting' => { Description => 'WB+Media/Bildgrößeneinstellung', PrintConv => { 'LCD monitor' => 'LCD-Monitor', 'Rear LCD panel' => 'Hinteres LCD-Panel', }, }, 'WBMode' => { PrintConv => { 'Auto' => 'Automatisch', }, }, 'WBRedLevel' => 'Farbabgleich Rot', 'WBShiftAB' => 'Weißabgleich AB-Korrektur', 'WBShiftGM' => 'Weißabgleich GM-Korrektur', 'WB_GBRGLevels' => 'Weißabgleich GBRG-Farbverteilung', 'WB_GLevel' => 'Weißabgleich G-Farbverteilung', 'WB_GLevel3000K' => 'Weißabgleich G-Farbverteilung 3000K', 'WB_GLevel3300K' => 'Weißabgleich G-Farbverteilung 3300K', 'WB_GLevel3600K' => 'Weißabgleich G-Farbverteilung 3600K', 'WB_GLevel3900K' => 'Weißabgleich G-Farbverteilung 3900K', 'WB_GLevel4000K' => 'Weißabgleich G-Farbverteilung 4000K', 'WB_GLevel4300K' => 'Weißabgleich G-Farbverteilung 4300K', 'WB_GLevel4500K' => 'Weißabgleich G-Farbverteilung 4500K', 'WB_GLevel4800K' => 'Weißabgleich G-Farbverteilung 4800K', 'WB_GLevel5300K' => 'Weißabgleich G-Farbverteilung 5300K', 'WB_GLevel6000K' => 'Weißabgleich G-Farbverteilung 6000K', 'WB_GLevel6600K' => 'Weißabgleich G-Farbverteilung 6600K', 'WB_GLevel7500K' => 'Weißabgleich G-Farbverteilung 7500K', 'WB_GRBGLevels' => 'Weißabgleich GRBG-Farbverteilung', 'WB_GRGBLevels' => 'Weißabgleich GRGB-Farbverteilung', 'WB_RBGGLevels' => 'Weißabgleich RBGG-Farbverteilung', 'WB_RBLevels' => 'Weißabgleich RB-Farbverteilung', 'WB_RBLevels3000K' => 'Weißabgleich RB-Farbverteilung 3000K', 'WB_RBLevels3300K' => 'Weißabgleich RB-Farbverteilung 3300K', 'WB_RBLevels3600K' => 'Weißabgleich RB-Farbverteilung 3600K', 'WB_RBLevels3900K' => 'Weißabgleich RB-Farbverteilung 3800K', 'WB_RBLevels4000K' => 'Weißabgleich RB-Farbverteilung 4000K', 'WB_RBLevels4300K' => 'Weißabgleich RB-Farbverteilung 4300K', 'WB_RBLevels4500K' => 'Weißabgleich RB-Farbverteilung 4500K', 'WB_RBLevels4800K' => 'Weißabgleich RB-Farbverteilung 4800K', 'WB_RBLevels5300K' => 'Weißabgleich RB-Farbverteilung 5300K', 'WB_RBLevels6000K' => 'Weißabgleich RB-Farbverteilung 6000K', 'WB_RBLevels6600K' => 'Weißabgleich RB-Farbverteilung 6600K', 'WB_RBLevels7500K' => 'Weißabgleich RB-Farbverteilung 7500K', 'WB_RBLevelsAuto' => 'Weißabgleich RB-Farbverteilung Automatik', 'WB_RBLevelsCWB1' => 'Weißabgleich RB-Farbverteilung CWB1', 'WB_RBLevelsCWB2' => 'Weißabgleich RB-Farbverteilung CWB2', 'WB_RBLevelsCWB3' => 'Weißabgleich RB-Farbverteilung CWB3', 'WB_RBLevelsCWB4' => 'Weißabgleich RB-Farbverteilung CWB4', 'WB_RBLevelsCloudy' => 'Weißabgleich RB-Farbverteilung Bewölkt', 'WB_RBLevelsCoolWhiteFluor' => 'Weißabgleich RB-Farbverteilung Neonlicht kaltweiß', 'WB_RBLevelsDayWhiteFluor' => 'Weißabgleich RB-Farbverteilung Neonlicht neutralweiß', 'WB_RBLevelsDaylightFluor' => 'Weißabgleich RB-Farbverteilung Neonlicht tageslichtweiß', 'WB_RBLevelsEveningSunlight' => 'Weißabgleich RB-Farbverteilung Sonnenuntergang', 'WB_RBLevelsFineWeather' => 'Weißabgleich RB-Farbverteilung Wolkenlos', 'WB_RBLevelsShade' => 'Weißabgleich RB-Farbverteilung Schatten', 'WB_RBLevelsTungsten' => 'Weißabgleich RB-Farbverteilung Glühbirne', 'WB_RBLevelsUsed' => 'Weißabgleich RB-Farbverteilung verwendet', 'WB_RBLevelsWhiteFluorescent' => 'Weißabgleich RB-Farbverteilung Neonlicht universalweiß', 'WB_RGBGLevels' => 'Weißabgleich RGBG-Farbverteilung', 'WB_RGBLevels' => 'Weißabgleich RGB-Farbverteilung', 'WB_RGBLevelsCloudy' => 'Weißabgleich RGB-Farbverteilung Bewölkt', 'WB_RGBLevelsDaylight' => 'Weißabgleich RGB-Farbverteilung Tageslicht', 'WB_RGBLevelsFlash' => 'Weißabgleich RGB-Farbverteilung Blitz', 'WB_RGBLevelsFluorescent' => 'Weißabgleich RGB-Farbverteilung Neonlicht', 'WB_RGBLevelsShade' => 'Weißabgleich RGB-Farbverteilung Schatten', 'WB_RGBLevelsTungsten' => 'Weißabgleich RGB-Farbverteilung Glühbirne', 'WB_RGGBLevels' => 'Weißabgleich RGGB-Farbverteilung', 'WB_RGGBLevelsAsShot' => 'Weißabgleich RGGB-Farbverteilung Aufnahme', 'WB_RGGBLevelsAuto' => 'Weißabgleich RGGB-Farbverteilung Auto', 'WB_RGGBLevelsCloudy' => 'Weißabgleich RGGB-Farbverteilung Bewölkt', 'WB_RGGBLevelsCustom' => 'Weißabgleich RGGB-Farbverteilung Benutzerdefiniert', 'WB_RGGBLevelsCustom1' => 'Weißabgleich RGGB-Farbverteilung Benutzerdefiniert 1', 'WB_RGGBLevelsCustom2' => 'Weißabgleich RGGB-Farbverteilung Benutzerdefiniert 2', 'WB_RGGBLevelsDaylight' => 'Weißabgleich RGGB-Farbverteilung Tageslicht', 'WB_RGGBLevelsFlash' => 'Weißabgleich RGGB-Farbverteilung Blitz', 'WB_RGGBLevelsFluorescent' => 'Weißabgleich RGGB-Farbverteilung Neonlicht', 'WB_RGGBLevelsFluorescentD' => 'Weißabgleich RGGB-Farbverteilung Neonlicht D', 'WB_RGGBLevelsFluorescentN' => 'Weißabgleich RGGB-Farbverteilung Neonlicht N', 'WB_RGGBLevelsFluorescentW' => 'Weißabgleich RGGB-Farbverteilung Neonlicht W', 'WB_RGGBLevelsKelvin' => 'Weißabgleich RGGB-Farbverteilung Kelvin', 'WB_RGGBLevelsMeasured' => 'Weißabgleich RGGB-Farbverteilung Messung', 'WB_RGGBLevelsPC1' => 'Weißabgleich RGGB-Farbverteilung PC1', 'WB_RGGBLevelsPC2' => 'Weißabgleich RGGB-Farbverteilung PC2', 'WB_RGGBLevelsPC3' => 'Weißabgleich RGGB-Farbverteilung PC3', 'WB_RGGBLevelsShade' => 'Weißabgleich RGGB-Farbverteilung Schatten', 'WB_RGGBLevelsTungsten' => 'Weißabgleich RGGB-Farbverteilung Glühbirne', 'WB_RGGBLevelsUnknown' => 'Weißabgleich RGGB-Farbverteilung Unbekannt', 'WB_RGGBLevelsUnknown10' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 10', 'WB_RGGBLevelsUnknown11' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 11', 'WB_RGGBLevelsUnknown12' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 12', 'WB_RGGBLevelsUnknown13' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 13', 'WB_RGGBLevelsUnknown14' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 14', 'WB_RGGBLevelsUnknown15' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 15', 'WB_RGGBLevelsUnknown16' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 16', 'WB_RGGBLevelsUnknown17' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 17', 'WB_RGGBLevelsUnknown18' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 18', 'WB_RGGBLevelsUnknown19' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 19', 'WB_RGGBLevelsUnknown2' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 2', 'WB_RGGBLevelsUnknown20' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 20', 'WB_RGGBLevelsUnknown3' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 3', 'WB_RGGBLevelsUnknown4' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 4', 'WB_RGGBLevelsUnknown5' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 5', 'WB_RGGBLevelsUnknown6' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 6', 'WB_RGGBLevelsUnknown7' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 7', 'WB_RGGBLevelsUnknown8' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 8', 'WB_RGGBLevelsUnknown9' => 'Weißabgleich RGGB-Farbverteilung Unbekannt 9', 'WCSProfiles' => 'Windows Color System-Profil', 'WangAnnotation' => 'Wang Anmerkung', 'Warning' => 'Warnung', 'Watermark' => 'Wasserzeichen', 'WhiteBalance' => { Description => 'Weißabgleich', PrintConv => { 'As Shot' => 'Aufnahme', 'Auto' => 'Automatisch', 'Black & White' => 'Schwarz/Weiß', 'Cloudy' => 'Bewölkt', 'Color Temperature/Color Filter' => 'Farbtemperatur/Farbfilter', 'Cool White Fluorescent' => 'Neonlicht kaltweiß', 'Custom' => 'Benutzerdefiniert', 'Custom 1' => 'Benutzerdefiniert 1', 'Custom 2' => 'Benutzerdefiniert 2', 'Custom 3' => 'Benutzerdefiniert 3', 'Custom 4' => 'Benutzerdefiniert 4', 'Custom2' => 'Benutzerdefiniert 2', 'Custom3' => 'Benutzerdefiniert 3', 'Custom4' => 'Benutzerdefiniert 4', 'Custom5' => 'Benutzerdefiniert 5', 'Day White Fluorescent' => 'Neonlicht neutralweiß', 'Daylight' => 'Tageslicht', 'Daylight Fluorescent' => 'Neonlicht tageslichtweiß', 'Flash' => 'Blitz', 'Flash?' => 'Blitz', 'Fluorescent' => 'Neonlicht', 'Incandescent' => 'Glühbirne', 'Living Room Warm White Fluorescent' => 'Neonlicht Wohnzimmer-warmweiß)', 'Manual' => 'Manuell', 'Manual Temperature (Kelvin)' => 'Manuelle Temperatur (Kelvin)', 'Shade' => 'Schatten', 'Tungsten' => 'Glühbirne', 'Underwater' => 'Unterwasser', 'Underwater 1 (Blue Water)' => 'Unterwasser 1 (blaues Wasser)', 'Underwater 2 (Green Water)' => 'Unterwasser 2 (grünes Wasser)', 'Unknown' => 'Unbekannt', 'User-Selected' => 'Benutzerdefiniert', 'Warm White Fluorescent' => 'Neonlicht warmweiß', 'White Fluorescent' => 'Neonlicht universalweiß', }, }, 'WhiteBalance2' => { Description => 'Weißabgleich 2', PrintConv => { '3000K (Tungsten light)' => '3000K (Glühbirne)', '3600K (Tungsten light-like)' => '3600K (ähnlich Glühbirne)', '4000K (Cool white fluorescent)' => '4000K (Neonlicht kaltweiß)', '4500K (Neutral white fluorescent)' => '4500K (Neonlicht neutralweiß)', '5300K (Fine Weather)' => '5300K (Wolkenlos)', '6000K (Cloudy)' => '6000K (Bewölkt)', '6600K (Daylight fluorescent)' => '6600K (Neonlicht tageslichtweiß)', '7500K (Fine Weather with Shade)' => '7500K (Sonne und Schatten)', 'Auto' => 'Automatisch', }, }, 'WhiteBalanceAdj' => { Description => 'Weißabgleich Korrektur', PrintConv => { 'Auto' => 'Automatisch', 'Cloudy' => 'Bewölkt', 'Daylight' => 'Tageslicht', 'Flash' => 'Blitz', 'Fluorescent' => 'Neonlicht', 'Off' => 'Aus', 'On' => 'Ein', 'Shade' => 'Schatten', 'Tungsten' => 'Glühbirne', }, }, 'WhiteBalanceAutoAdjustment' => { Description => 'Weißabgleich automatische Abstimmung', PrintConv => { 'Off' => 'Aus', 'On' => 'An', }, }, 'WhiteBalanceBias' => 'Weißabgleich Bias', 'WhiteBalanceBlue' => 'Farbabgleich Blau', 'WhiteBalanceBracket' => 'Weißabgleichs-Belichtungsreihe', 'WhiteBalanceBracketing' => { Description => 'Weißabgleichs-Belichtungsreihe', PrintConv => { 'High' => 'Hoch', 'Low' => 'Niedrig', 'Off' => 'Aus', }, }, 'WhiteBalanceComp' => 'Weißabgleichsausgleich', 'WhiteBalanceFineTune' => 'Weißabgleichsfeineinstellung', 'WhiteBalanceMatching' => 'Weißabgleich Übereinstimmung', 'WhiteBalanceMode' => { Description => 'Weißabgleich-Modus', PrintConv => { 'Auto (Cloudy)' => 'Automatisch (Bewölkt)', 'Auto (Day White Fluorescent)' => 'Automatisch (Neonlicht neutralweiß)', 'Auto (Daylight Fluorescent)' => 'Automatisch (Neonlicht tageslichtweiß)', 'Auto (Daylight)' => 'Automatisch (Tageslicht)', 'Auto (Flash)' => 'Automatisch (Blitz)', 'Auto (Shade)' => 'Automatisch (Schatten)', 'Auto (Tungsten)' => 'Automatisch (Glühbirne)', 'Auto (White Fluorescent)' => 'Automatisch (Neonlicht universalweiß)', 'Unknown' => 'Unbekannt', 'User-Selected' => 'Benutzerdefiniert', }, }, 'WhiteBalanceRed' => 'Farbabgleich Rot', 'WhiteBalanceSet' => { Description => 'Eingestellter Weißabgleich', PrintConv => { 'Auto' => 'Automatisch', 'Cloudy' => 'Bewölkt', 'Day White Fluorescent' => 'Neonlicht neutralweiß', 'Daylight' => 'Tageslicht', 'Daylight Fluorescent' => 'Neonlicht tageslichtweiß', 'Flash' => 'Blitz', 'Manual' => 'Manuell', 'Set Color Temperature 1' => 'Farbtemperatur-Einstellung 1', 'Set Color Temperature 2' => 'Farbtemperatur-Einstellung 2', 'Set Color Temperature 3' => 'Farbtemperatur-Einstellung 3', 'Shade' => 'Schatten', 'Tungsten' => 'Glühbirne', 'White Fluorescent' => 'Neonlicht universalweiß', }, }, 'WhiteBalanceSetting' => { Description => 'Weißabgleichs-Einstellung', PrintConv => { 'Color Temperature/Color Filter' => 'Farbtemperatur/Farbfilter', 'Custom' => 'Benutzerdefiniert', 'Preset' => 'Voreinstellung', }, }, 'WhiteBalanceTable' => 'Weißabgleich Tabelle', 'WhiteBalanceTemperature' => 'Weißabgleich Farbtemperatur', 'WhiteBoard' => 'Whiteboard Funktion', 'WhiteLevel' => 'Weißwert', 'WhitePoint' => 'Weißpunkt-Chromatizität', 'WhitePointX' => 'Weißpunkt X', 'WhitePointY' => 'Weißpunkt Y', 'Wide' => 'Breit', 'WideFocusZone' => { Description => 'Zone des großen AF-Messfeldes', PrintConv => { 'Center zone (horizontal orientation)' => 'Mittlere Zone (horizontale Ausrichtung)', 'Center zone (vertical orientation)' => 'Mittlere Zone (vertikale Ausrichtung)', 'Left zone' => 'Linke Zone', 'No zone' => 'Keine Zone', 'Right zone' => 'Rechte Zone', }, }, 'WideRange' => { PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'WidthResolution' => 'Horizontale Bildauflösung', 'WorldTime' => 'Zeitzone', 'WorldTimeLocation' => { Description => 'Weltzeit-Position', PrintConv => { 'Destination' => 'Zielort', 'Home' => 'Heimatort', 'Hometown' => 'Heimatort', }, }, 'Writer-Editor' => 'Verfasser der Beschreibung', 'Writers' => 'Schreiber', 'XMP' => 'XMP Metadaten', 'XPAuthor' => 'XP Autor', 'XPComment' => 'XP Kommentar', 'XPKeywords' => 'XP Schlüsselwort', 'XPSubject' => 'XP Thema', 'XPTitle' => 'XP Titel', 'XResolution' => 'Horizontale Bildauflösung', 'XYResolution' => 'XY Auflösung', 'YCbCrCoefficients' => 'YCbCr-Koeffizienten', 'YCbCrPositioning' => { Description => 'Y und C Ausrichtung', PrintConv => { 'Centered' => 'Zentriert', 'Co-sited' => 'Benachbart', }, }, 'YCbCrSubSampling' => 'Subsampling Rate von Y bis C', 'YResolution' => 'Vertikale Bildauflösung', 'Year' => 'Jahr', 'ZipCompression' => 'Zip Komprimierung', 'ZoneMatching' => { Description => 'Zonenabgleich', PrintConv => { 'High Key' => 'Hi', 'ISO Setting Used' => 'Aus (ISO-Einstellung verwendet)', 'Low Key' => 'Lo', }, }, 'ZoneMatchingOn' => { Description => 'Zonenabgleich', PrintConv => { 'Off' => 'Aus', 'On' => 'Ein', }, }, 'Zoom' => 'Zoom-Objektiv', 'ZoomPos' => 'Zoom Position', 'ZoomSourceWidth' => 'Vergrößerungs-Ursprungsgröße', 'ZoomStepCount' => 'Zoom-Stufenzähler', 'ZoomTargetWidth' => 'Vergrößerungs-Endgröße', 'ZoomedPreviewImage' => 'Vergrößertes Vorschaubild', 'ZoomedPreviewLength' => 'Vergößertes Vorschaubild-Datenlänge', 'ZoomedPreviewSize' => 'Vergößertes Vorschaubild-Größe', 'ZoomedPreviewStart' => 'Vergößertes Vorschaubild-Datenposition', ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::de.pm - ExifTool German language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke and Herbert Kauer for providing this translation. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/en_ca.pm�����������������������������������������������000644 �000765 �000024 �00000105231 12642461343 022177� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: en_ca.pm # # Description: ExifTool Canadian English language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::en_ca; use strict; use vars qw($VERSION); $VERSION = '1.10'; %Image::ExifTool::Lang::en_ca::Translate = ( 'AboveColor' => 'Above Colour', 'AdvancedFilter' => { PrintConv => { 'Partial Color Blue' => 'Partial Colour Blue', 'Partial Color Green' => 'Partial Colour Green', 'Partial Color Orange' => 'Partial Colour Orange', 'Partial Color Purple' => 'Partial Colour Purple', 'Partial Color Red' => 'Partial Colour Red', 'Partial Color Yellow' => 'Partial Colour Yellow', 'Pop Color' => 'Pop Colour', }, }, 'AdvancedSceneMode' => { PrintConv => { 'Color Select' => 'Colour Select', }, }, 'AllColorFlatField1' => 'All Colour Flat Field 1', 'AllColorFlatField2' => 'All Colour Flat Field 2', 'AllColorFlatField3' => 'All Colour Flat Field 3', 'AlternateDuotoneColors' => 'Alternate Duotone Colours', 'AlternateSpotColors' => 'Alternate Spot Colours', 'ArtFilter' => { PrintConv => { 'Pale & Light Color' => 'Pale & Light Colour', 'Pale & Light Color II' => 'Pale & Light Colour II', 'Partial Color' => 'Partial Colour', 'Partial Color II' => 'Partial Colour II', 'Partial Color III' => 'Partial Colour III', 'Watercolor' => 'Watercolour', 'Watercolor I' => 'Watercolour I', 'Watercolor II' => 'Watercolour II', }, }, 'ArtFilterEffect' => { PrintConv => { 'Pale & Light Color' => 'Pale & Light Colour', 'Pale & Light Color II' => 'Pale & Light Colour II', 'Partial Color' => 'Partial Colour', 'Partial Color II' => 'Partial Colour II', 'Partial Color III' => 'Partial Colour III', 'Watercolor' => 'Watercolour', 'Watercolor I' => 'Watercolour I', 'Watercolor II' => 'Watercolour II', }, }, 'BackgroundColor' => 'Background Colour', 'BackgroundColorIndicator' => { Description => 'Background Colour Indicator', PrintConv => { 'Specified Background Color' => 'Specified Background Colour', 'Unspecified Background Color' => 'Unspecified Background Colour', }, }, 'BackgroundColorValue' => 'Background Colour Value', 'BasicColorImageSequence' => 'Basic Colour Image Sequence', 'BelowColor' => 'Below Colour', 'BestShotMode' => { PrintConv => { 'Water Color' => 'Water Colour', }, }, 'BkColor' => 'Background Colour', 'BluePaletteColorTableData' => 'Blue Palette Colour Table Data', 'BluePaletteColorTableDescriptor' => 'Blue Palette Colour Table Descriptor', 'BorderColor' => 'Border Colour', 'CFAPlaneColor' => 'CFA Plane Colour', 'CameraColorCalibration01' => 'Camera Colour Calibration 01', 'CameraColorCalibration02' => 'Camera Colour Calibration 02', 'CameraColorCalibration03' => 'Camera Colour Calibration 03', 'CameraColorCalibration04' => 'Camera Colour Calibration 04', 'CameraColorCalibration05' => 'Camera Colour Calibration 05', 'CameraColorCalibration06' => 'Camera Colour Calibration 06', 'CameraColorCalibration07' => 'Camera Colour Calibration 07', 'CameraColorCalibration08' => 'Camera Colour Calibration 08', 'CameraColorCalibration09' => 'Camera Colour Calibration 09', 'CameraColorCalibration10' => 'Camera Colour Calibration 10', 'CameraColorCalibration11' => 'Camera Colour Calibration 11', 'CameraColorCalibration12' => 'Camera Colour Calibration 12', 'CameraColorCalibration13' => 'Camera Colour Calibration 13', 'CameraColorCalibration14' => 'Camera Colour Calibration 14', 'CameraColorCalibration15' => 'Camera Colour Calibration 15', 'CanonColorInfo1' => 'Canon Colour Info 1', 'CanonColorInfo2' => 'Canon Colour Info 2', 'ChromaticityColorant' => 'Chromaticity Colourant', 'CodingMethods' => { PrintConv => { 'JBIG color' => 'JBIG colour', }, }, 'Color' => { Description => 'Colour', PrintConv => { 'Color' => 'Colour', }, }, 'ColorAberrationControl' => 'Colour Aberration Control', 'ColorAdjustment' => 'Colour Adjustment', 'ColorAdjustmentMode' => 'Colour Adjustment Mode', 'ColorAverages' => 'Colour Averages', 'ColorBW' => 'Colour BW', 'ColorBalance' => 'Colour Balance', 'ColorBalanceAdj' => 'Colour Balance Adj', 'ColorBalanceBlue' => 'Colour Balance Blue', 'ColorBalanceGreen' => 'Colour Balance Green', 'ColorBalanceRed' => 'Colour Balance Red', 'ColorBalanceUnknown' => 'Colour Balance Unknown', 'ColorBalanceVersion' => 'Colour Balance Version', 'ColorBitDepth' => 'Colour Bit Depth', 'ColorBlur' => 'Colour Blur', 'ColorBlurOn' => 'Colour Blur On', 'ColorBoostLevel' => 'Colour Boost Level', 'ColorBoostType' => 'Colour Boost Type', 'ColorBooster' => 'Colour Booster', 'ColorCalibrationMatrix' => 'Colour Calibration Matrix', 'ColorCasts' => 'Colour Casts', 'ColorCharacterization' => 'Colour Characterization', 'ColorClass' => 'Colour Class', 'ColorCompensationFilter' => 'Colour Compensation Filter', 'ColorCompensationFilterCustom' => 'Colour Compensation Filter Custom', 'ColorCompensationFilterSet' => 'Colour Compensation Filter Set', 'ColorComponents' => 'Colour Components', 'ColorControl' => 'Colour Control', 'ColorCorrection' => 'Colour Correction', 'ColorDataVersion' => 'Colour Data Version', 'ColorDescriptor' => 'Colour Descriptor', 'ColorEffect' => 'Colour Effect', 'ColorFieldCode' => 'Colour Field Code', 'ColorFilter' => 'Colour Filter', 'ColorGain' => 'Colour Gain', 'ColorGroup' => 'Colour Group', 'ColorHalftoningInfo' => 'Colour Halftoning Info', 'ColorHue' => 'Colour Hue', 'ColorImagePrintingFlag' => 'Colour Image Printing Flag', 'ColorLabel' => 'Colour Label', 'ColorMap' => 'Colour Map', 'ColorMatrix' => 'Colour Matrix', 'ColorMatrix1' => 'Colour Matrix 1', 'ColorMatrix2' => 'Colour Matrix 2', 'ColorMatrixA' => 'Colour Matrix A', 'ColorMatrixAdobeRGB' => 'Colour Matrix Adobe RGB', 'ColorMatrixB' => 'Colour Matrix B', 'ColorMatrixNumber' => 'Colour Matrix Number', 'ColorMatrixSRGB' => 'Colour Matrix sRGB', 'ColorMode' => { Description => 'Colour Mode', PrintConv => { 'Indexed Color' => 'Indexed Colour', 'Natural color' => 'Natural colour', 'Neutral Color' => 'Neutral Colour', 'RGB Color' => 'RGB Colour', 'Saturated Color' => 'Saturated Colour', 'Vivid color' => 'Vivid colour', }, }, 'ColorMoireReduction' => 'Colour Moire Reduction', 'ColorMoireReductionMode' => 'Colour Moire Reduction Mode', 'ColorNoiseReduction' => 'Colour Noise Reduction', 'ColorNoiseReductionDetail' => 'Colour Noise Reduction Detail', 'ColorNoiseReductionIntensity' => 'Colour Noise Reduction Intensity', 'ColorNoiseReductionSharpness' => 'Colour Noise Reduction Sharpness', 'ColorNoiseReductionSmoothness' => 'Colour Noise Reduction Smoothness', 'ColorObjBackType' => 'Colour Obj Back Type', 'ColorObjName' => 'Colour Obj Name', 'ColorObjType' => 'Colour Obj Type', 'ColorObjVersion' => 'Colour Obj Version', 'ColorPalette' => 'Colour Palette', 'ColorPlanes' => 'Colour Planes', 'ColorPrimaries' => 'Colour Primaries', 'ColorProfile' => 'Colour Profile', 'ColorRangeLevels' => 'Colour Range Levels', 'ColorRepresentation' => 'Colour Representation', 'ColorReproduction' => 'Colour Reproduction', 'ColorResolutionDepth' => 'Colour Resolution Depth', 'ColorResponseUnit' => 'Colour Response Unit', 'ColorSamplersResource' => 'Colour Samplers Resource', 'ColorSamplersResource2' => 'Colour Samplers Resource 2', 'ColorSaturationAdj' => 'Colour Saturation Adj', 'ColorSequence' => 'Colour Sequence', 'ColorSiting' => 'Colour Siting', 'ColorSpace' => { Description => 'Colour Space', PrintConv => { 'No color space specified' => 'No colour space specified', }, }, 'ColorSpaceData' => 'Colour Space Data', 'ColorSpecApproximation' => 'Colour Spec Approximation', 'ColorSpecData' => 'Colour Spec Data', 'ColorSpecMethod' => { Description => 'Colour Spec Method', PrintConv => { 'Vendor Color' => 'Vendor Colour', }, }, 'ColorSpecPrecedence' => 'Colour Spec Precedence', 'ColorSpecification' => 'Colour Specification', 'ColorTable' => 'Colour Table', 'ColorTempAsShot' => 'Colour Temp As Shot', 'ColorTempAuto' => 'Colour Temp Auto', 'ColorTempCloudy' => 'Colour Temp Cloudy', 'ColorTempCustom' => 'Colour Temp Custom', 'ColorTempCustom1' => 'Colour Temp Custom 1', 'ColorTempCustom2' => 'Colour Temp Custom 2', 'ColorTempDaylight' => 'Colour Temp Daylight', 'ColorTempFlash' => 'Colour Temp Flash', 'ColorTempFlashData' => 'Colour Temp Flash Data', 'ColorTempFluorescent' => 'Colour Temp Fluorescent', 'ColorTempFluorescentD' => 'Colour Temp Fluorescent D', 'ColorTempFluorescentN' => 'Colour Temp Fluorescent N', 'ColorTempFluorescentW' => 'Colour Temp Fluorescent W', 'ColorTempKelvin' => 'Colour Temp Kelvin', 'ColorTempMeasured' => 'Colour Temp Measured', 'ColorTempPC1' => 'Colour Temp PC1', 'ColorTempPC2' => 'Colour Temp PC2', 'ColorTempPC3' => 'Colour Temp PC3', 'ColorTempShade' => 'Colour Temp Shade', 'ColorTempTungsten' => 'Colour Temp Tungsten', 'ColorTempUnknown' => 'Colour Temp Unknown', 'ColorTempUnknown10' => 'Colour Temp Unknown 10', 'ColorTempUnknown11' => 'Colour Temp Unknown 11', 'ColorTempUnknown12' => 'Colour Temp Unknown 12', 'ColorTempUnknown13' => 'Colour Temp Unknown 13', 'ColorTempUnknown14' => 'Colour Temp Unknown 14', 'ColorTempUnknown15' => 'Colour Temp Unknown 15', 'ColorTempUnknown16' => 'Colour Temp Unknown 16', 'ColorTempUnknown17' => 'Colour Temp Unknown 17', 'ColorTempUnknown18' => 'Colour Temp Unknown 18', 'ColorTempUnknown19' => 'Colour Temp Unknown 19', 'ColorTempUnknown2' => 'Colour Temp Unknown 2', 'ColorTempUnknown20' => 'Colour Temp Unknown 20', 'ColorTempUnknown21' => 'Colour Temp Unknown 21', 'ColorTempUnknown22' => 'Colour Temp Unknown 22', 'ColorTempUnknown23' => 'Colour Temp Unknown 23', 'ColorTempUnknown24' => 'Colour Temp Unknown 24', 'ColorTempUnknown25' => 'Colour Temp Unknown 25', 'ColorTempUnknown26' => 'Colour Temp Unknown 26', 'ColorTempUnknown27' => 'Colour Temp Unknown 27', 'ColorTempUnknown28' => 'Colour Temp Unknown 28', 'ColorTempUnknown29' => 'Colour Temp Unknown 29', 'ColorTempUnknown3' => 'Colour Temp Unknown 3', 'ColorTempUnknown30' => 'Colour Temp Unknown 30', 'ColorTempUnknown4' => 'Colour Temp Unknown 4', 'ColorTempUnknown5' => 'Colour Temp Unknown 5', 'ColorTempUnknown6' => 'Colour Temp Unknown 6', 'ColorTempUnknown7' => 'Colour Temp Unknown 7', 'ColorTempUnknown8' => 'Colour Temp Unknown 8', 'ColorTempUnknown9' => 'Colour Temp Unknown 9', 'ColorTemperature' => 'Colour Temperature', 'ColorTemperatureAdj' => 'Colour Temperature Adj', 'ColorTemperatureBG' => 'Colour Temperature BG', 'ColorTemperatureCustom' => 'Colour Temperature Custom', 'ColorTemperatureRG' => 'Colour Temperature RG', 'ColorTemperatureSet' => 'Colour Temperature Set', 'ColorTemperatureSetting' => { Description => 'Colour Temperature Setting', PrintConv => { 'Color Filter' => 'Colour Filter', }, }, 'ColorTone' => 'Colour Tone', 'ColorToneAdj' => 'Colour Tone Adj', 'ColorToneAuto' => 'Colour Tone Auto', 'ColorToneFaithful' => 'Colour Tone Faithful', 'ColorToneLandscape' => 'Colour Tone Landscape', 'ColorToneMonochrome' => 'Colour Tone Monochrome', 'ColorToneNeutral' => 'Colour Tone Neutral', 'ColorTonePortrait' => 'Colour Tone Portrait', 'ColorToneStandard' => 'Colour Tone Standard', 'ColorToneUserDef1' => 'Colour Tone User Def 1', 'ColorToneUserDef2' => 'Colour Tone User Def 2', 'ColorToneUserDef3' => 'Colour Tone User Def 3', 'ColorTransferFuncs' => 'Colour Transfer Funcs', 'ColorTransform' => 'Colour Transform', 'ColorTwistMatrix' => 'Colour Twist Matrix', 'ColorType' => { Description => 'Colour Type', PrintConv => { 'Color' => 'Colour', 'Color Alpha' => 'Colour Alpha', }, }, 'Colorant1Coordinates' => 'Colourant 1 Coordinates', 'Colorant1Name' => 'Colourant 1 Name', 'Colorant2Coordinates' => 'Colourant 2 Coordinates', 'Colorant2Name' => 'Colourant 2 Name', 'Colorant3Coordinates' => 'Colourant 3 Coordinates', 'Colorant3Name' => 'Colourant 3 Name', 'ColorantA' => 'Colourant A', 'ColorantB' => 'Colourant B', 'ColorantBlack' => 'Colourant Black', 'ColorantBlue' => 'Colourant Blue', 'ColorantCount' => 'Colourant Count', 'ColorantCyan' => 'Colourant Cyan', 'ColorantGreen' => 'Colourant Green', 'ColorantL' => 'Colourant L', 'ColorantMagenta' => 'Colourant Magenta', 'ColorantMode' => 'Colourant Mode', 'ColorantOrder' => 'Colourant Order', 'ColorantRed' => 'Colourant Red', 'ColorantSwatchName' => 'Colourant Swatch Name', 'ColorantTableOut' => 'Colourant Table Out', 'ColorantTint' => 'Colourant Tint', 'ColorantType' => 'Colourant Type', 'ColorantYellow' => 'Colourant Yellow', 'Colorants' => 'Colourants', 'ColorimetricIntentImageState' => 'Colourimetric Intent Image State', 'ColorimetricReference' => 'Colourimetric Reference', 'Colorimetry' => 'Colourimetry', 'ColorimetryCode' => 'Colourimetry Code', 'Colors' => 'Colours', 'Compression' => { PrintConv => { 'JBIG Color' => 'JBIG Colour', }, }, 'ContrastMode' => { PrintConv => { 'Dynamic (Color Film)' => 'Dynamic (Colour Film)', 'Dynamic Art (My Color)' => 'Dynamic Art (My Colour)', 'Elegant (My Color)' => 'Elegant (My Colour)', 'Nature (Color Film)' => 'Nature (Colour Film)', 'Nostalgic (Color Film)' => 'Nostalgic (Colour Film)', 'Retro (My Color)' => 'Retro (My Colour)', 'Smooth (Color Film) or Pure (My Color)' => 'Smooth (Colour Film) or Pure (My Colour)', 'Vibrant (Color Film) or Expressive (My Color)' => 'Vibrant (Colour Film) or Expressive (My Colour)', }, }, 'CustomColorTone' => 'Custom Colour Tone', 'D-LightingHQColorBoost' => 'D-Lighting HQ Colour Boost', 'D-LightingHSColorBoost' => 'D-Lighting HS Colour Boost', 'DefHilite' => 'Use Default Highlight Colour', 'DefaultImageColor' => 'Default Image Colour', 'DeltaType' => { PrintConv => { 'Color Addition' => 'Colour Addition', 'Color Replacement' => 'Colour Replacement', }, }, 'DigitalFilter01' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter02' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter03' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter04' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter05' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter06' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter07' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter08' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter09' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter10' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter11' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter12' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter13' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter14' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter15' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter16' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter17' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter18' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter19' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter20' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DisplayUnits' => { PrintConv => { 'meters' => 'Metres', }, }, 'EasyMode' => { PrintConv => { 'Color Accent' => 'Colour Accent', 'Color Swap' => 'Colour Swap', 'My Colors' => 'My Colours', }, }, 'EmbeddedImageColorSpace' => 'Embedded Image Colour Space', 'ExposureProgram' => { PrintConv => { 'Partial Color Blue' => 'Partial Colour Blue', 'Partial Color Green' => 'Partial Colour Green', 'Partial Color Red' => 'Partial Colour Red', 'Partial Color Yellow' => 'Partial Colour Yellow', 'Pop Color' => 'Pop Colour', }, }, 'FaithfulRawColorTone' => 'Faithful Raw Colour Tone', 'FaxProfile' => { PrintConv => { 'Lossless color and grayscale, L' => 'Lossless colour and grayscale, L', 'Lossy color and grayscale, C' => 'Lossy colour and grayscale, C', }, }, 'FgColor' => 'Foreground Colour', 'FilmColorProcess' => 'Film Colour Process', 'FilmMode' => { PrintConv => { 'Dynamic (color)' => 'Dynamic (colour)', 'Nature (color)' => 'Nature (colour)', 'Smooth (color)' => 'Smooth (colour)', 'Standard (color)' => 'Standard (colour)', }, }, 'FlagColor' => 'Flag Colour', 'FlashColorFilter' => 'Flash Colour Filter', 'FocalPlaneColorimetryEstimates' => 'Focal Plane Colourimetry Estimates', 'GammaColorTone' => 'Gamma Colour Tone', 'GenOpColor' => 'Gen Op Colour', 'GenreID' => { PrintConv => { 'Books|Kids|Basic Concepts|Colors' => 'Books|Kids|Basic Concepts|Colours', }, }, 'GreenPaletteColorTableData' => 'Green Palette Colour Table Data', 'GreenPaletteColorTableDescriptor' => 'Green Palette Colour Table Descriptor', 'HasColorMap' => 'Has Colour Map', 'HighlightColorDistortReduct' => 'Highlight Colour Distort Reduct', 'HiliteColor' => 'Highlight Colour', 'ImageAlterationConstraints' => { PrintConv => { 'No Colorization' => 'No Colourization', 'No De-Colorization' => 'No De-Colourization', }, }, 'ImageColor' => 'Image Colour', 'ImageColorIndicator' => { Description => 'Image Colour Indicator', PrintConv => { 'Specified Image Color' => 'Specified Image Colour', 'Unspecified Image Color' => 'Unspecified Image Colour', }, }, 'ImageColorValue' => 'Image Colour Value', 'ImageMedium' => { PrintConv => { 'Color hard copy' => 'Colour hard copy', 'Color negative' => 'Colour negative', 'Color reversal' => 'Colour reversal', }, }, 'InterchangeColorSpace' => 'Interchange Colour Space', 'Isotherm1Color' => 'Isotherm 1 Colour', 'Isotherm2Color' => 'Isotherm 2 Colour', 'LandscapeRawColorTone' => 'Landscape Raw Colour Tone', 'LargeBluePaletteColorTableData' => 'Large Blue Palette Colour Table Data', 'LargeBluePaletteColorTableDescr' => 'Large Blue Palette Colour Table Descr', 'LargeGreenPaletteColorTableData' => 'Large Green Palette Colour Table Data', 'LargeGreenPaletteColorTableDescr' => 'Large Green Palette Colour Table Descr', 'LargePaletteColorLookupTableUID' => 'Large Palette Colour Lookup Table UID', 'LargeRedPaletteColorTableData' => 'Large Red Palette Colour Table Data', 'LargeRedPaletteColorTableDescr' => 'Large Red Palette Colour Table Descr', 'MDColorTable' => 'MD Colour Table', 'MagicFilter' => { PrintConv => { 'Pale & Light Color' => 'Pale & Light Colour', 'Pale & Light Color II' => 'Pale & Light Colour II', 'Partial Color' => 'Partial Colour', 'Partial Color II' => 'Partial Colour II', 'Partial Color III' => 'Partial Colour III', 'Watercolor' => 'Watercolour', 'Watercolor I' => 'Watercolour I', 'Watercolor II' => 'Watercolour II', }, }, 'MandatoryBackground' => { PrintConv => { 'Color Advisory, Image Mandatory' => 'Colour Advisory, Image Mandatory', 'Color Mandatory, Image Advisory' => 'Colour Mandatory, Image Advisory', 'Color and Image Advisory' => 'Colour and Image Advisory', 'Color and Image Mandatory' => 'Colour and Image Mandatory', }, }, 'MattColor' => 'Matt Colour', 'MediaColor' => 'Media Colour', 'ModifiedColorTemp' => 'Modified Colour Temp', 'MyColorMode' => { Description => 'My Colour Mode', PrintConv => { 'Color Accent' => 'Colour Accent', 'Color Swap' => 'Colour Swap', }, }, 'NamedColor' => 'Named Colour', 'NamedColor2' => 'Named Colour 2', 'NeutralRawColorTone' => 'Neutral Raw Colour Tone', 'NewColorType' => 'New Colour Type', 'NumColors' => 'Num Colours', 'NumImportantColors' => 'Num Important Colours', 'OpColor' => 'Op Colour', 'OverflowColor' => 'Overflow Colour', 'PF25ColorMatrix' => 'PF25 Colour Matrix', 'PaletteColorTableUID' => 'Palette Colour Table UID', 'PaletteColors' => 'Palette Colours', 'PhotoEffect' => { PrintConv => { 'My Color Data' => 'My Colour Data', }, }, 'PhotometricInterpretation' => { PrintConv => { 'Color Filter Array' => 'Colour Filter Array', }, }, 'Photoshop2ColorTable' => 'Photoshop 2 Colour Table', 'PictureEffect' => { PrintConv => { 'Partial Color (blue)' => 'Partial Colour (blue)', 'Partial Color (green)' => 'Partial Colour (green)', 'Partial Color (red)' => 'Partial Colour (red)', 'Partial Color (yellow)' => 'Partial Colour (yellow)', 'Pop Color' => 'Pop Colour', 'Water Color' => 'Water Colour', 'Water Color 2' => 'Water Colour 2', }, }, 'PictureEffect2' => { PrintConv => { 'Partial Color' => 'Partial Colour', 'Pop Color' => 'Pop Colour', 'Water Color' => 'Water Colour', }, }, 'PictureIndexedColors' => 'Picture Indexed Colours', 'PictureType' => { PrintConv => { 'Bright(ly) Colored Fish' => 'Bright(ly) Coloured Fish', }, }, 'PictureWizardColor' => 'Picture Wizard Colour', 'PortraitRawColorTone' => 'Portrait Raw Colour Tone', 'PresetWhiteBalance' => { PrintConv => { 'Color Temperature' => 'Colour Temperature', }, }, 'PreviewColorSpace' => 'Preview Colour Space', 'ProfileClass' => { PrintConv => { 'ColorSpace Conversion Profile' => 'ColourSpace Conversion Profile', 'NamedColor Profile' => 'Named Colour Profile', }, }, 'PseudoColorType' => 'Pseudo Colour Type', 'QuantizationMethod' => { PrintConv => { 'Color Space Specific' => 'Colour Space Specific', }, }, 'RGBBkCol' => 'Background Colour', 'RGBFgCol' => 'Foreground Colour', 'ROIDisplayColor' => 'ROI Display Colour', 'RawColorAdj' => 'Raw Colour Adj', 'RawDevArtFilter' => { PrintConv => { 'Pale & Light Color' => 'Pale & Light Colour', 'Pale & Light Color II' => 'Pale & Light Colour II', 'Partial Color' => 'Partial Colour', 'Partial Color II' => 'Partial Colour II', 'Partial Color III' => 'Partial Colour III', 'Watercolor' => 'Watercolour', 'Watercolor I' => 'Watercolour I', 'Watercolor II' => 'Watercolour II', }, }, 'RawDevColorSpace' => 'Raw Dev Colour Space', 'RawDevMemoryColorEmphasis' => 'Raw Dev Memory Colour Emphasis', 'RawDevSettings' => { PrintConv => { 'Color Space' => 'Colour Space', 'WB Color Temp' => 'WB Colour Temp', }, }, 'RawDevWhiteBalance' => { PrintConv => { 'Color Temperature' => 'Colour Temperature', }, }, 'RedPaletteColorTableData' => 'Red Palette Colour Table Data', 'RedPaletteColorTableDescriptor' => 'Red Palette Colour Table Descriptor', 'ReflectionHardcopyOrigColorimetry' => 'Reflection Hardcopy Orig Colourimetry', 'ReflectionPrintOutputColorimetry' => 'Reflection Print Output Colourimetry', 'RenderingIntent' => { PrintConv => { 'ICC-Absolute Colorimetric' => 'ICC-Absolute Colourimetric', 'Media-Relative Colorimetric' => 'Media-Relative Colourimetric', }, }, 'RetouchHistory' => { PrintConv => { 'Color Custom' => 'Colour Custom', 'Color Outline' => 'Colour Outline', 'Color Sketch' => 'Colour Sketch', 'Selective Color' => 'Selective Colour', }, }, 'SBAInputImageColorspace' => 'SBA Input Image Colourspace', 'SRGBRendering' => { PrintConv => { 'Absolute Colorimetric' => 'Absolute Colourimetric', 'Relative Colorimetric' => 'Relative Colourimetric', }, }, 'SceneBalanceAlgorithmCommand' => { PrintConv => { 'Neutral SBA Off, Color SBA Off' => 'Neutral SBA Off, Colour SBA Off', 'Neutral SBA Off, Color SBA On' => 'Neutral SBA Off, Colour SBA On', 'Neutral SBA On, Color SBA Off' => 'Neutral SBA On, Colour SBA Off', 'Neutral SBA On, Color SBA On' => 'Neutral SBA On, Colour SBA On', }, }, 'SceneColorimetryEstimates' => 'Scene Colourimetry Estimates', 'SceneMode' => { PrintConv => { 'Color Effects' => 'Colour Effects', 'My Color' => 'My Colour', }, }, 'ScreenMinimumColorBitDepth' => 'Screen Minimum Colour Bit Depth', 'SegmentedBlueColorTableData' => 'Segmented Blue Colour Table Data', 'SegmentedGreenColorTableData' => 'Segmented Green Colour Table Data', 'SegmentedRedColorTableData' => 'Segmented Red Colour Table Data', 'SensingMethod' => { PrintConv => { 'Color sequential area' => 'Colour sequential area', 'Color sequential linear' => 'Colour sequential linear', 'One-chip color area' => 'One-chip colour area', 'Three-chip color area' => 'Three-chip colour area', 'Two-chip color area' => 'Two-chip colour area', }, }, 'ShootingMode' => { PrintConv => { 'Color Effects' => 'Colour Effects', 'My Color' => 'My Colour', }, }, 'ShutterPresentationColorCIELabVal' => 'Shutter Presentation Colour CIE Lab Val', 'SpecialEffectsOpticalFilter' => { PrintConv => { 'Colored' => 'Coloured', }, }, 'StandardRawColorTone' => 'Standard Raw Colour Tone', 'StdOutputColorMode' => 'Std Output Colour Mode', 'StreamColor' => 'Stream Colour', 'SubfileType' => { PrintConv => { 'Color IW44' => 'Colour IW44', }, }, 'SubimageColor' => 'Subimage Colour', 'TestTarget' => { PrintConv => { 'Color Chart' => 'Colour Chart', }, }, 'TextColor' => 'Text Colour', 'ToneCurveColorSpace' => 'Tone Curve Colour Space', 'ToningEffect' => { PrintConv => { 'Color' => 'Colour', }, }, 'TypeOfOriginal' => { PrintConv => { 'Color Document' => 'Colour Document', 'Color Print' => 'Colour Print', }, }, 'UCRBG' => 'Under Colour Removal & Black Gen.', 'USPTOOriginalContentType' => { PrintConv => { 'Color' => 'Colour', }, }, 'UltrasoundColorDataPresent' => 'Ultrasound Colour Data Present', 'UnderflowColor' => 'Underflow Colour', 'Unsharp1Color' => 'Unsharp 1 Colour', 'Unsharp2Color' => 'Unsharp 2 Colour', 'Unsharp3Color' => 'Unsharp 3 Colour', 'Unsharp4Color' => 'Unsharp 4 Colour', 'VideoAlphaPremultipleColor' => 'Video Alpha Premultiple Colour', 'VideoAlphaPremultipleColorA' => 'Video Alpha Premultiple Colour A', 'VideoAlphaPremultipleColorB' => 'Video Alpha Premultiple Colour B', 'VideoAlphaPremultipleColorBlack' => 'Video Alpha Premultiple Colour Black', 'VideoAlphaPremultipleColorBlue' => 'Video Alpha Premultiple Colour Blue', 'VideoAlphaPremultipleColorCyan' => 'Video Alpha Premultiple Colour Cyan', 'VideoAlphaPremultipleColorGreen' => 'Video Alpha Premultiple Colour Green', 'VideoAlphaPremultipleColorL' => 'Video Alpha Premultiple Colour L', 'VideoAlphaPremultipleColorMagenta' => 'Video Alpha Premultiple Colour Magenta', 'VideoAlphaPremultipleColorMode' => 'Video Alpha Premultiple Colour Mode', 'VideoAlphaPremultipleColorRed' => 'Video Alpha Premultiple Colour Red', 'VideoAlphaPremultipleColorSwatchName' => 'Video Alpha Premultiple Colour Swatch Name', 'VideoAlphaPremultipleColorTint' => 'Video Alpha Premultiple Colour Tint', 'VideoAlphaPremultipleColorType' => 'Video Alpha Premultiple Colour Type', 'VideoAlphaPremultipleColorYellow' => 'Video Alpha Premultiple Colour Yellow', 'VideoColorKind' => 'Video Colour Kind', 'VideoColorSpace' => 'Video Colour Space', 'WBAdjColorTemp' => 'WB Adj Colour Temp', 'WBAdjLighting' => { PrintConv => { 'High Color Rendering Fluorescent (3700K)' => 'High Colour Rendering Fluorescent (1)', 'High Color Rendering Fluorescent (5000K)' => 'High Colour Rendering Fluorescent (3)', 'High Color Rendering Fluorescent (cool white)' => 'High Colour Rendering Fluorescent (2)', 'High Color Rendering Fluorescent (daylight)' => 'High Colour Rendering Fluorescent (4)', 'High Color Rendering Fluorescent (warm white)' => 'High Colour Rendering Fluorescent (0)', 'Sodium Vapor Lamps' => 'Sodium Vapour Lamps', 'Standard Fluorescent (high temperature mercury vapor)' => 'Standard Fluorescent (high temperature mercury vapour)', }, }, 'WatercolorFilter' => 'Watercolour Filter', 'WhiteBalance' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Color Temperature' => 'Colour Temperature', 'Color Temperature Enhancement' => 'Colour Temperature Enhancement', 'Color Temperature/Color Filter' => 'Colour Temperature/Colour Filter', }, }, 'WhiteBalance2' => { PrintConv => { 'Auto (Keep Warm Color Off)' => 'Auto (Keep Warm Colour Off)', }, }, 'WhiteBalanceSet' => { PrintConv => { 'Set Color Temperature 1' => 'Set Colour Temperature 1', 'Set Color Temperature 2' => 'Set Colour Temperature 2', 'Set Color Temperature 3' => 'Set Colour Temperature 3', }, }, 'WhiteBalanceSetting' => { PrintConv => { 'Color Temperature/Color Filter' => 'Colour Temperature/Colour Filter', }, }, 'WorkColorSpace' => { Description => 'Work Colour Space', PrintConv => { 'ColorMatch RGB' => 'ColourMatch RGB', }, }, 'XMethod' => { PrintConv => { 'Color Closest Pixel and Alpha Linear Interpolation' => 'Colour Closest Pixel and Alpha Linear Interpolation', 'Color Linear Interpolation and Alpha Closest Pixel' => 'Colour Linear Interpolation and Alpha Closest Pixel', }, }, 'YMethod' => { PrintConv => { 'Color Closest Pixel and Alpha Linear Interpolation' => 'Colour Closest Pixel and Alpha Linear Interpolation', 'Color Linear Interpolation and Alpha Closest Pixel' => 'Colour Linear Interpolation and Alpha Closest Pixel', }, }, ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::en_ca.pm - ExifTool Canadian English language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/en_gb.pm�����������������������������������������������000644 �000765 �000024 �00000110663 12642461343 022211� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: en_gb.pm # # Description: ExifTool British English language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::en_gb; use strict; use vars qw($VERSION); $VERSION = '1.10'; %Image::ExifTool::Lang::en_gb::Translate = ( 'AboveColor' => 'Above Colour', 'AdvancedFilter' => { PrintConv => { 'Partial Color Blue' => 'Partial Colour Blue', 'Partial Color Green' => 'Partial Colour Green', 'Partial Color Orange' => 'Partial Colour Orange', 'Partial Color Purple' => 'Partial Colour Purple', 'Partial Color Red' => 'Partial Colour Red', 'Partial Color Yellow' => 'Partial Colour Yellow', 'Pop Color' => 'Pop Colour', }, }, 'AdvancedSceneMode' => { PrintConv => { 'Color Select' => 'Colour Select', }, }, 'AllColorFlatField1' => 'All Colour Flat Field 1', 'AllColorFlatField2' => 'All Colour Flat Field 2', 'AllColorFlatField3' => 'All Colour Flat Field 3', 'AlternateDuotoneColors' => 'Alternate Duotone Colours', 'AlternateSpotColors' => 'Alternate Spot Colours', 'ArtFilter' => { PrintConv => { 'Pale & Light Color' => 'Pale & Light Colour', 'Pale & Light Color II' => 'Pale & Light Colour II', 'Partial Color' => 'Partial Colour', 'Partial Color II' => 'Partial Colour II', 'Partial Color III' => 'Partial Colour III', 'Watercolor' => 'Watercolour', 'Watercolor I' => 'Watercolour I', 'Watercolor II' => 'Watercolour II', }, }, 'ArtFilterEffect' => { PrintConv => { 'Pale & Light Color' => 'Pale & Light Colour', 'Pale & Light Color II' => 'Pale & Light Colour II', 'Partial Color' => 'Partial Colour', 'Partial Color II' => 'Partial Colour II', 'Partial Color III' => 'Partial Colour III', 'Watercolor' => 'Watercolour', 'Watercolor I' => 'Watercolour I', 'Watercolor II' => 'Watercolour II', }, }, 'AudioIsInitialized' => 'Audio Is Initialised', 'AutoLightingOptimizer' => 'Auto Lighting Optimiser', 'AutoLightingOptimizerOn' => 'Auto Lighting Optimiser On', 'BackgroundColor' => 'Background Colour', 'BackgroundColorIndicator' => { Description => 'Background Colour Indicator', PrintConv => { 'Specified Background Color' => 'Specified Background Colour', 'Unspecified Background Color' => 'Unspecified Background Colour', }, }, 'BackgroundColorValue' => 'Background Colour Value', 'BasicColorImageSequence' => 'Basic Colour Image Sequence', 'BelowColor' => 'Below Colour', 'BestShotMode' => { PrintConv => { 'Water Color' => 'Water Colour', }, }, 'BkColor' => 'Background Colour', 'BluePaletteColorTableData' => 'Blue Palette Colour Table Data', 'BluePaletteColorTableDescriptor' => 'Blue Palette Colour Table Descriptor', 'BorderColor' => 'Border Colour', 'CFAPlaneColor' => 'CFA Plane Colour', 'CameraColorCalibration01' => 'Camera Colour Calibration 01', 'CameraColorCalibration02' => 'Camera Colour Calibration 02', 'CameraColorCalibration03' => 'Camera Colour Calibration 03', 'CameraColorCalibration04' => 'Camera Colour Calibration 04', 'CameraColorCalibration05' => 'Camera Colour Calibration 05', 'CameraColorCalibration06' => 'Camera Colour Calibration 06', 'CameraColorCalibration07' => 'Camera Colour Calibration 07', 'CameraColorCalibration08' => 'Camera Colour Calibration 08', 'CameraColorCalibration09' => 'Camera Colour Calibration 09', 'CameraColorCalibration10' => 'Camera Colour Calibration 10', 'CameraColorCalibration11' => 'Camera Colour Calibration 11', 'CameraColorCalibration12' => 'Camera Colour Calibration 12', 'CameraColorCalibration13' => 'Camera Colour Calibration 13', 'CameraColorCalibration14' => 'Camera Colour Calibration 14', 'CameraColorCalibration15' => 'Camera Colour Calibration 15', 'CanonColorInfo1' => 'Canon Colour Info 1', 'CanonColorInfo2' => 'Canon Colour Info 2', 'ChromaticityColorant' => 'Chromaticity Colourant', 'CodingMethods' => { PrintConv => { 'JBIG color' => 'JBIG colour', }, }, 'Color' => { Description => 'Colour', PrintConv => { 'Color' => 'Colour', }, }, 'ColorAberrationControl' => 'Colour Aberration Control', 'ColorAdjustment' => 'Colour Adjustment', 'ColorAdjustmentMode' => 'Colour Adjustment Mode', 'ColorAverages' => 'Colour Averages', 'ColorBW' => 'Colour BW', 'ColorBalance' => 'Colour Balance', 'ColorBalanceAdj' => 'Colour Balance Adj', 'ColorBalanceBlue' => 'Colour Balance Blue', 'ColorBalanceGreen' => 'Colour Balance Green', 'ColorBalanceRed' => 'Colour Balance Red', 'ColorBalanceUnknown' => 'Colour Balance Unknown', 'ColorBalanceVersion' => 'Colour Balance Version', 'ColorBitDepth' => 'Colour Bit Depth', 'ColorBlur' => 'Colour Blur', 'ColorBlurOn' => 'Colour Blur On', 'ColorBoostLevel' => 'Colour Boost Level', 'ColorBoostType' => 'Colour Boost Type', 'ColorBooster' => 'Colour Booster', 'ColorCalibrationMatrix' => 'Colour Calibration Matrix', 'ColorCasts' => 'Colour Casts', 'ColorCharacterization' => 'Colour Characterization', 'ColorClass' => 'Colour Class', 'ColorCompensationFilter' => 'Colour Compensation Filter', 'ColorCompensationFilterCustom' => 'Colour Compensation Filter Custom', 'ColorCompensationFilterSet' => 'Colour Compensation Filter Set', 'ColorComponents' => 'Colour Components', 'ColorControl' => 'Colour Control', 'ColorCorrection' => 'Colour Correction', 'ColorDataVersion' => 'Colour Data Version', 'ColorDescriptor' => 'Colour Descriptor', 'ColorEffect' => 'Colour Effect', 'ColorFieldCode' => 'Colour Field Code', 'ColorFilter' => 'Colour Filter', 'ColorGain' => 'Colour Gain', 'ColorGroup' => 'Colour Group', 'ColorHalftoningInfo' => 'Colour Halftoning Info', 'ColorHue' => 'Colour Hue', 'ColorImagePrintingFlag' => 'Colour Image Printing Flag', 'ColorLabel' => 'Colour Label', 'ColorMap' => 'Colour Map', 'ColorMatrix' => 'Colour Matrix', 'ColorMatrix1' => 'Colour Matrix 1', 'ColorMatrix2' => 'Colour Matrix 2', 'ColorMatrixA' => 'Colour Matrix A', 'ColorMatrixAdobeRGB' => 'Colour Matrix Adobe RGB', 'ColorMatrixB' => 'Colour Matrix B', 'ColorMatrixNumber' => 'Colour Matrix Number', 'ColorMatrixSRGB' => 'Colour Matrix sRGB', 'ColorMode' => { Description => 'Colour Mode', PrintConv => { 'Indexed Color' => 'Indexed Colour', 'Natural color' => 'Natural colour', 'Neutral Color' => 'Neutral Colour', 'RGB Color' => 'RGB Colour', 'Saturated Color' => 'Saturated Colour', 'Vivid color' => 'Vivid colour', }, }, 'ColorMoireReduction' => 'Colour Moire Reduction', 'ColorMoireReductionMode' => 'Colour Moire Reduction Mode', 'ColorNoiseReduction' => 'Colour Noise Reduction', 'ColorNoiseReductionDetail' => 'Colour Noise Reduction Detail', 'ColorNoiseReductionIntensity' => 'Colour Noise Reduction Intensity', 'ColorNoiseReductionSharpness' => 'Colour Noise Reduction Sharpness', 'ColorNoiseReductionSmoothness' => 'Colour Noise Reduction Smoothness', 'ColorObjBackType' => 'Colour Obj Back Type', 'ColorObjName' => 'Colour Obj Name', 'ColorObjType' => 'Colour Obj Type', 'ColorObjVersion' => 'Colour Obj Version', 'ColorPalette' => 'Colour Palette', 'ColorPlanes' => 'Colour Planes', 'ColorPrimaries' => 'Colour Primaries', 'ColorProfile' => 'Colour Profile', 'ColorRangeLevels' => 'Colour Range Levels', 'ColorRepresentation' => 'Colour Representation', 'ColorReproduction' => 'Colour Reproduction', 'ColorResolutionDepth' => 'Colour Resolution Depth', 'ColorResponseUnit' => 'Colour Response Unit', 'ColorSamplersResource' => 'Colour Samplers Resource', 'ColorSamplersResource2' => 'Colour Samplers Resource 2', 'ColorSaturationAdj' => 'Colour Saturation Adj', 'ColorSequence' => 'Colour Sequence', 'ColorSiting' => 'Colour Siting', 'ColorSpace' => { Description => 'Colour Space', PrintConv => { 'No color space specified' => 'No colour space specified', }, }, 'ColorSpaceData' => 'Colour Space Data', 'ColorSpecApproximation' => 'Colour Spec Approximation', 'ColorSpecData' => 'Colour Spec Data', 'ColorSpecMethod' => { Description => 'Colour Spec Method', PrintConv => { 'Vendor Color' => 'Vendor Colour', }, }, 'ColorSpecPrecedence' => 'Colour Spec Precedence', 'ColorSpecification' => 'Colour Specification', 'ColorTable' => 'Colour Table', 'ColorTempAsShot' => 'Colour Temp As Shot', 'ColorTempAuto' => 'Colour Temp Auto', 'ColorTempCloudy' => 'Colour Temp Cloudy', 'ColorTempCustom' => 'Colour Temp Custom', 'ColorTempCustom1' => 'Colour Temp Custom 1', 'ColorTempCustom2' => 'Colour Temp Custom 2', 'ColorTempDaylight' => 'Colour Temp Daylight', 'ColorTempFlash' => 'Colour Temp Flash', 'ColorTempFlashData' => 'Colour Temp Flash Data', 'ColorTempFluorescent' => 'Colour Temp Fluorescent', 'ColorTempFluorescentD' => 'Colour Temp Fluorescent D', 'ColorTempFluorescentN' => 'Colour Temp Fluorescent N', 'ColorTempFluorescentW' => 'Colour Temp Fluorescent W', 'ColorTempKelvin' => 'Colour Temp Kelvin', 'ColorTempMeasured' => 'Colour Temp Measured', 'ColorTempPC1' => 'Colour Temp PC1', 'ColorTempPC2' => 'Colour Temp PC2', 'ColorTempPC3' => 'Colour Temp PC3', 'ColorTempShade' => 'Colour Temp Shade', 'ColorTempTungsten' => 'Colour Temp Tungsten', 'ColorTempUnknown' => 'Colour Temp Unknown', 'ColorTempUnknown10' => 'Colour Temp Unknown 10', 'ColorTempUnknown11' => 'Colour Temp Unknown 11', 'ColorTempUnknown12' => 'Colour Temp Unknown 12', 'ColorTempUnknown13' => 'Colour Temp Unknown 13', 'ColorTempUnknown14' => 'Colour Temp Unknown 14', 'ColorTempUnknown15' => 'Colour Temp Unknown 15', 'ColorTempUnknown16' => 'Colour Temp Unknown 16', 'ColorTempUnknown17' => 'Colour Temp Unknown 17', 'ColorTempUnknown18' => 'Colour Temp Unknown 18', 'ColorTempUnknown19' => 'Colour Temp Unknown 19', 'ColorTempUnknown2' => 'Colour Temp Unknown 2', 'ColorTempUnknown20' => 'Colour Temp Unknown 20', 'ColorTempUnknown21' => 'Colour Temp Unknown 21', 'ColorTempUnknown22' => 'Colour Temp Unknown 22', 'ColorTempUnknown23' => 'Colour Temp Unknown 23', 'ColorTempUnknown24' => 'Colour Temp Unknown 24', 'ColorTempUnknown25' => 'Colour Temp Unknown 25', 'ColorTempUnknown26' => 'Colour Temp Unknown 26', 'ColorTempUnknown27' => 'Colour Temp Unknown 27', 'ColorTempUnknown28' => 'Colour Temp Unknown 28', 'ColorTempUnknown29' => 'Colour Temp Unknown 29', 'ColorTempUnknown3' => 'Colour Temp Unknown 3', 'ColorTempUnknown30' => 'Colour Temp Unknown 30', 'ColorTempUnknown4' => 'Colour Temp Unknown 4', 'ColorTempUnknown5' => 'Colour Temp Unknown 5', 'ColorTempUnknown6' => 'Colour Temp Unknown 6', 'ColorTempUnknown7' => 'Colour Temp Unknown 7', 'ColorTempUnknown8' => 'Colour Temp Unknown 8', 'ColorTempUnknown9' => 'Colour Temp Unknown 9', 'ColorTemperature' => 'Colour Temperature', 'ColorTemperatureAdj' => 'Colour Temperature Adj', 'ColorTemperatureBG' => 'Colour Temperature BG', 'ColorTemperatureCustom' => 'Colour Temperature Custom', 'ColorTemperatureRG' => 'Colour Temperature RG', 'ColorTemperatureSet' => 'Colour Temperature Set', 'ColorTemperatureSetting' => { Description => 'Colour Temperature Setting', PrintConv => { 'Color Filter' => 'Colour Filter', }, }, 'ColorTone' => 'Colour Tone', 'ColorToneAdj' => 'Colour Tone Adj', 'ColorToneAuto' => 'Colour Tone Auto', 'ColorToneFaithful' => 'Colour Tone Faithful', 'ColorToneLandscape' => 'Colour Tone Landscape', 'ColorToneMonochrome' => 'Colour Tone Monochrome', 'ColorToneNeutral' => 'Colour Tone Neutral', 'ColorTonePortrait' => 'Colour Tone Portrait', 'ColorToneStandard' => 'Colour Tone Standard', 'ColorToneUserDef1' => 'Colour Tone User Def 1', 'ColorToneUserDef2' => 'Colour Tone User Def 2', 'ColorToneUserDef3' => 'Colour Tone User Def 3', 'ColorTransferFuncs' => 'Colour Transfer Funcs', 'ColorTransform' => 'Colour Transform', 'ColorTwistMatrix' => 'Colour Twist Matrix', 'ColorType' => { Description => 'Colour Type', PrintConv => { 'Color' => 'Colour', 'Color Alpha' => 'Colour Alpha', }, }, 'Colorant1Coordinates' => 'Colourant 1 Coordinates', 'Colorant1Name' => 'Colourant 1 Name', 'Colorant2Coordinates' => 'Colourant 2 Coordinates', 'Colorant2Name' => 'Colourant 2 Name', 'Colorant3Coordinates' => 'Colourant 3 Coordinates', 'Colorant3Name' => 'Colourant 3 Name', 'ColorantA' => 'Colourant A', 'ColorantB' => 'Colourant B', 'ColorantBlack' => 'Colourant Black', 'ColorantBlue' => 'Colourant Blue', 'ColorantCount' => 'Colourant Count', 'ColorantCyan' => 'Colourant Cyan', 'ColorantGreen' => 'Colourant Green', 'ColorantL' => 'Colourant L', 'ColorantMagenta' => 'Colourant Magenta', 'ColorantMode' => 'Colourant Mode', 'ColorantOrder' => 'Colourant Order', 'ColorantRed' => 'Colourant Red', 'ColorantSwatchName' => 'Colourant Swatch Name', 'ColorantTableOut' => 'Colourant Table Out', 'ColorantTint' => 'Colourant Tint', 'ColorantType' => 'Colourant Type', 'ColorantYellow' => 'Colourant Yellow', 'Colorants' => 'Colourants', 'ColorimetricIntentImageState' => 'Colourimetric Intent Image State', 'ColorimetricReference' => 'Colourimetric Reference', 'Colorimetry' => 'Colourimetry', 'ColorimetryCode' => 'Colourimetry Code', 'Colors' => 'Colours', 'Compression' => { PrintConv => { 'JBIG Color' => 'JBIG Colour', }, }, 'ContrastMode' => { PrintConv => { 'Dynamic (Color Film)' => 'Dynamic (Colour Film)', 'Dynamic Art (My Color)' => 'Dynamic Art (My Colour)', 'Elegant (My Color)' => 'Elegant (My Colour)', 'Nature (Color Film)' => 'Nature (Colour Film)', 'Nostalgic (Color Film)' => 'Nostalgic (Colour Film)', 'Retro (My Color)' => 'Retro (My Colour)', 'Smooth (Color Film) or Pure (My Color)' => 'Smooth (Colour Film) or Pure (My Colour)', 'Vibrant (Color Film) or Expressive (My Color)' => 'Vibrant (Colour Film) or Expressive (My Colour)', }, }, 'CustomColorTone' => 'Custom Colour Tone', 'D-LightingHQColorBoost' => 'D-Lighting HQ Colour Boost', 'D-LightingHSColorBoost' => 'D-Lighting HS Colour Boost', 'D-RangeOptimizerHighlight' => 'D-Range Optimiser Highlight', 'D-RangeOptimizerMode' => 'D-Range Optimiser Mode', 'D-RangeOptimizerShadow' => 'D-Range Optimiser Shadow', 'D-RangeOptimizerValue' => 'D-Range Optimiser Value', 'DateTimeDigitized' => 'Date/Time Digitised', 'DefHilite' => 'Use Default Highlight Colour', 'DefaultImageColor' => 'Default Image Colour', 'DefineQuantizationTable' => 'Define Quantisation Table', 'DeltaType' => { PrintConv => { 'Color Addition' => 'Colour Addition', 'Color Replacement' => 'Colour Replacement', }, }, 'DigitalFilter01' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter02' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter03' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter04' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter05' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter06' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter07' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter08' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter09' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter10' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter11' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter12' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter13' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter14' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter15' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter16' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter17' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter18' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter19' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DigitalFilter20' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Extract Color' => 'Extract Colour', 'Invert Color' => 'Invert Colour', 'Water Color' => 'Water Colour', }, }, 'DisplayUnits' => { PrintConv => { 'meters' => 'Metres', }, }, 'DriveMode' => { PrintConv => { 'D-Range Optimizer Bracketing High' => 'D-Range Optimiser Bracketing High', 'D-Range Optimizer Bracketing Low' => 'D-Range Optimiser Bracketing Low', }, }, 'DriveMode2' => { PrintConv => { 'D-Range Optimizer Bracketing High' => 'D-Range Optimiser Bracketing High', 'D-Range Optimizer Bracketing Low' => 'D-Range Optimiser Bracketing Low', }, }, 'DynamicRangeOptimizer' => 'Dynamic Range Optimiser', 'DynamicRangeOptimizerBracket' => 'Dynamic Range Optimiser Bracket', 'DynamicRangeOptimizerLevel' => 'Dynamic Range Optimiser Level', 'DynamicRangeOptimizerMode' => 'Dynamic Range Optimiser Mode', 'DynamicRangeOptimizerSetting' => 'Dynamic Range Optimiser Setting', 'EasyMode' => { PrintConv => { 'Color Accent' => 'Colour Accent', 'Color Swap' => 'Colour Swap', 'My Colors' => 'My Colours', }, }, 'EmbeddedImageColorSpace' => 'Embedded Image Colour Space', 'ExposureProgram' => { PrintConv => { 'Partial Color Blue' => 'Partial Colour Blue', 'Partial Color Green' => 'Partial Colour Green', 'Partial Color Red' => 'Partial Colour Red', 'Partial Color Yellow' => 'Partial Colour Yellow', 'Pop Color' => 'Pop Colour', }, }, 'FaithfulRawColorTone' => 'Faithful Raw Colour Tone', 'FaxProfile' => { PrintConv => { 'Lossless color and grayscale, L' => 'Lossless colour and grayscale, L', 'Lossy color and grayscale, C' => 'Lossy colour and grayscale, C', }, }, 'FgColor' => 'Foreground Colour', 'FileFormat' => { PrintConv => { 'JPEG (lossy/non-quantization toggled)' => 'JPEG (lossy/non-quantisation toggled)', 'JPEG (non-quantization)' => 'JPEG (non-quantisation)', }, }, 'FilmColorProcess' => 'Film Colour Process', 'FilmMode' => { PrintConv => { 'Dynamic (color)' => 'Dynamic (colour)', 'Nature (color)' => 'Nature (colour)', 'Smooth (color)' => 'Smooth (colour)', 'Standard (color)' => 'Standard (colour)', }, }, 'FlagColor' => 'Flag Colour', 'FlashColorFilter' => 'Flash Colour Filter', 'FocalPlaneColorimetryEstimates' => 'Focal Plane Colourimetry Estimates', 'GammaColorTone' => 'Gamma Colour Tone', 'GenOpColor' => 'Gen Op Colour', 'GenreID' => { PrintConv => { 'Books|Kids|Basic Concepts|Colors' => 'Books|Kids|Basic Concepts|Colours', }, }, 'GreenPaletteColorTableData' => 'Green Palette Colour Table Data', 'GreenPaletteColorTableDescriptor' => 'Green Palette Colour Table Descriptor', 'HasColorMap' => 'Has Colour Map', 'HighlightColorDistortReduct' => 'Highlight Colour Distort Reduct', 'HiliteColor' => 'Highlight Colour', 'ImageAlterationConstraints' => { PrintConv => { 'No Colorization' => 'No Colourization', 'No De-Colorization' => 'No De-Colourization', }, }, 'ImageColor' => 'Image Colour', 'ImageColorIndicator' => { Description => 'Image Colour Indicator', PrintConv => { 'Specified Image Color' => 'Specified Image Colour', 'Unspecified Image Color' => 'Unspecified Image Colour', }, }, 'ImageColorValue' => 'Image Colour Value', 'ImageMedium' => { PrintConv => { 'Color hard copy' => 'Colour hard copy', 'Color negative' => 'Colour negative', 'Color reversal' => 'Colour reversal', }, }, 'ImageOptimization' => 'Image Optimisation', 'InitializedDataSize' => 'Initialised Data Size', 'InterchangeColorSpace' => 'Interchange Colour Space', 'Isotherm1Color' => 'Isotherm 1 Colour', 'Isotherm2Color' => 'Isotherm 2 Colour', 'LandscapeRawColorTone' => 'Landscape Raw Colour Tone', 'LargeBluePaletteColorTableData' => 'Large Blue Palette Colour Table Data', 'LargeBluePaletteColorTableDescr' => 'Large Blue Palette Colour Table Descr', 'LargeGreenPaletteColorTableData' => 'Large Green Palette Colour Table Data', 'LargeGreenPaletteColorTableDescr' => 'Large Green Palette Colour Table Descr', 'LargePaletteColorLookupTableUID' => 'Large Palette Colour Lookup Table UID', 'LargeRedPaletteColorTableData' => 'Large Red Palette Colour Table Data', 'LargeRedPaletteColorTableDescr' => 'Large Red Palette Colour Table Descr', 'MDColorTable' => 'MD Colour Table', 'MagicFilter' => { PrintConv => { 'Pale & Light Color' => 'Pale & Light Colour', 'Pale & Light Color II' => 'Pale & Light Colour II', 'Partial Color' => 'Partial Colour', 'Partial Color II' => 'Partial Colour II', 'Partial Color III' => 'Partial Colour III', 'Watercolor' => 'Watercolour', 'Watercolor I' => 'Watercolour I', 'Watercolor II' => 'Watercolour II', }, }, 'MandatoryBackground' => { PrintConv => { 'Color Advisory, Image Mandatory' => 'Colour Advisory, Image Mandatory', 'Color Mandatory, Image Advisory' => 'Colour Mandatory, Image Advisory', 'Color and Image Advisory' => 'Colour and Image Advisory', 'Color and Image Mandatory' => 'Colour and Image Mandatory', }, }, 'MattColor' => 'Matt Colour', 'MediaColor' => 'Media Colour', 'ModifiedColorTemp' => 'Modified Colour Temp', 'MyColorMode' => { Description => 'My Colour Mode', PrintConv => { 'Color Accent' => 'Colour Accent', 'Color Swap' => 'Colour Swap', }, }, 'NamedColor' => 'Named Colour', 'NamedColor2' => 'Named Colour 2', 'NeutralRawColorTone' => 'Neutral Raw Colour Tone', 'NewColorType' => 'New Colour Type', 'NumColors' => 'Num Colours', 'NumImportantColors' => 'Num Important Colours', 'OpColor' => 'Op Colour', 'OverflowColor' => 'Overflow Colour', 'PF25ColorMatrix' => 'PF25 Colour Matrix', 'PaletteColorTableUID' => 'Palette Colour Table UID', 'PaletteColors' => 'Palette Colours', 'PhotoEffect' => { PrintConv => { 'My Color Data' => 'My Colour Data', }, }, 'PhotometricInterpretation' => { PrintConv => { 'Color Filter Array' => 'Colour Filter Array', }, }, 'Photoshop2ColorTable' => 'Photoshop 2 Colour Table', 'PictureEffect' => { PrintConv => { 'Partial Color (blue)' => 'Partial Colour (blue)', 'Partial Color (green)' => 'Partial Colour (green)', 'Partial Color (red)' => 'Partial Colour (red)', 'Partial Color (yellow)' => 'Partial Colour (yellow)', 'Pop Color' => 'Pop Colour', 'Water Color' => 'Water Colour', 'Water Color 2' => 'Water Colour 2', }, }, 'PictureEffect2' => { PrintConv => { 'Partial Color' => 'Partial Colour', 'Pop Color' => 'Pop Colour', 'Water Color' => 'Water Colour', }, }, 'PictureIndexedColors' => 'Picture Indexed Colours', 'PictureType' => { PrintConv => { 'Bright(ly) Colored Fish' => 'Bright(ly) Coloured Fish', }, }, 'PictureWizardColor' => 'Picture Wizard Colour', 'PortraitRawColorTone' => 'Portrait Raw Colour Tone', 'PresetWhiteBalance' => { PrintConv => { 'Color Temperature' => 'Colour Temperature', }, }, 'PreviewColorSpace' => 'Preview Colour Space', 'ProfileClass' => { PrintConv => { 'ColorSpace Conversion Profile' => 'ColourSpace Conversion Profile', 'NamedColor Profile' => 'Named Colour Profile', }, }, 'PseudoColorType' => 'Pseudo Colour Type', 'QuantizationDefault' => 'Quantisation Default', 'QuantizationMethod' => { Description => 'Quantisation Method', PrintConv => { 'Color Space Specific' => 'Colour Space Specific', }, }, 'RGBBkCol' => 'Background Colour', 'RGBFgCol' => 'Foreground Colour', 'ROIDisplayColor' => 'ROI Display Colour', 'RawColorAdj' => 'Raw Colour Adj', 'RawDevArtFilter' => { PrintConv => { 'Pale & Light Color' => 'Pale & Light Colour', 'Pale & Light Color II' => 'Pale & Light Colour II', 'Partial Color' => 'Partial Colour', 'Partial Color II' => 'Partial Colour II', 'Partial Color III' => 'Partial Colour III', 'Watercolor' => 'Watercolour', 'Watercolor I' => 'Watercolour I', 'Watercolor II' => 'Watercolour II', }, }, 'RawDevColorSpace' => 'Raw Dev Colour Space', 'RawDevMemoryColorEmphasis' => 'Raw Dev Memory Colour Emphasis', 'RawDevSettings' => { PrintConv => { 'Color Space' => 'Colour Space', 'WB Color Temp' => 'WB Colour Temp', }, }, 'RawDevWhiteBalance' => { PrintConv => { 'Color Temperature' => 'Colour Temperature', }, }, 'RedPaletteColorTableData' => 'Red Palette Colour Table Data', 'RedPaletteColorTableDescriptor' => 'Red Palette Colour Table Descriptor', 'ReflectionHardcopyOrigColorimetry' => 'Reflection Hardcopy Orig Colourimetry', 'ReflectionPrintOutputColorimetry' => 'Reflection Print Output Colourimetry', 'RenderingIntent' => { PrintConv => { 'ICC-Absolute Colorimetric' => 'ICC-Absolute Colourimetric', 'Media-Relative Colorimetric' => 'Media-Relative Colourimetric', }, }, 'RetouchHistory' => { PrintConv => { 'Color Custom' => 'Colour Custom', 'Color Outline' => 'Colour Outline', 'Color Sketch' => 'Colour Sketch', 'Selective Color' => 'Selective Colour', }, }, 'SBAInputImageColorspace' => 'SBA Input Image Colourspace', 'SRGBRendering' => { PrintConv => { 'Absolute Colorimetric' => 'Absolute Colourimetric', 'Relative Colorimetric' => 'Relative Colourimetric', }, }, 'SceneBalanceAlgorithmCommand' => { PrintConv => { 'Neutral SBA Off, Color SBA Off' => 'Neutral SBA Off, Colour SBA Off', 'Neutral SBA Off, Color SBA On' => 'Neutral SBA Off, Colour SBA On', 'Neutral SBA On, Color SBA Off' => 'Neutral SBA On, Colour SBA Off', 'Neutral SBA On, Color SBA On' => 'Neutral SBA On, Colour SBA On', }, }, 'SceneColorimetryEstimates' => 'Scene Colourimetry Estimates', 'SceneMode' => { PrintConv => { 'Color Effects' => 'Colour Effects', 'My Color' => 'My Colour', }, }, 'ScreenMinimumColorBitDepth' => 'Screen Minimum Colour Bit Depth', 'SegmentedBlueColorTableData' => 'Segmented Blue Colour Table Data', 'SegmentedGreenColorTableData' => 'Segmented Green Colour Table Data', 'SegmentedRedColorTableData' => 'Segmented Red Colour Table Data', 'SensingMethod' => { PrintConv => { 'Color sequential area' => 'Colour sequential area', 'Color sequential linear' => 'Colour sequential linear', 'One-chip color area' => 'One-chip colour area', 'Three-chip color area' => 'Three-chip colour area', 'Two-chip color area' => 'Two-chip colour area', }, }, 'ShootingMode' => { PrintConv => { 'Color Effects' => 'Colour Effects', 'My Color' => 'My Colour', }, }, 'ShutterPresentationColorCIELabVal' => 'Shutter Presentation Colour CIE Lab Val', 'SpecialEffectsOpticalFilter' => { PrintConv => { 'Colored' => 'Coloured', }, }, 'StandardRawColorTone' => 'Standard Raw Colour Tone', 'StdOutputColorMode' => 'Std Output Colour Mode', 'StreamColor' => 'Stream Colour', 'SubSecTimeDigitized' => 'Sub Sec Time Digitised', 'SubfileType' => { PrintConv => { 'Color IW44' => 'Colour IW44', }, }, 'SubimageColor' => 'Subimage Colour', 'TestTarget' => { PrintConv => { 'Color Chart' => 'Colour Chart', }, }, 'TextColor' => 'Text Colour', 'ToneCurveColorSpace' => 'Tone Curve Colour Space', 'ToningEffect' => { PrintConv => { 'Color' => 'Colour', }, }, 'TypeOfOriginal' => { PrintConv => { 'Color Document' => 'Colour Document', 'Color Print' => 'Colour Print', }, }, 'UCRBG' => 'Under Colour Removal & Black Gen.', 'USPTOOriginalContentType' => { PrintConv => { 'Color' => 'Colour', }, }, 'UltrasoundColorDataPresent' => 'Ultrasound Colour Data Present', 'UnderflowColor' => 'Underflow Colour', 'UninitializedDataSize' => 'Uninitialised Data Size', 'Unsharp1Color' => 'Unsharp 1 Colour', 'Unsharp2Color' => 'Unsharp 2 Colour', 'Unsharp3Color' => 'Unsharp 3 Colour', 'Unsharp4Color' => 'Unsharp 4 Colour', 'VideoAlphaPremultipleColor' => 'Video Alpha Premultiple Colour', 'VideoAlphaPremultipleColorA' => 'Video Alpha Premultiple Colour A', 'VideoAlphaPremultipleColorB' => 'Video Alpha Premultiple Colour B', 'VideoAlphaPremultipleColorBlack' => 'Video Alpha Premultiple Colour Black', 'VideoAlphaPremultipleColorBlue' => 'Video Alpha Premultiple Colour Blue', 'VideoAlphaPremultipleColorCyan' => 'Video Alpha Premultiple Colour Cyan', 'VideoAlphaPremultipleColorGreen' => 'Video Alpha Premultiple Colour Green', 'VideoAlphaPremultipleColorL' => 'Video Alpha Premultiple Colour L', 'VideoAlphaPremultipleColorMagenta' => 'Video Alpha Premultiple Colour Magenta', 'VideoAlphaPremultipleColorMode' => 'Video Alpha Premultiple Colour Mode', 'VideoAlphaPremultipleColorRed' => 'Video Alpha Premultiple Colour Red', 'VideoAlphaPremultipleColorSwatchName' => 'Video Alpha Premultiple Colour Swatch Name', 'VideoAlphaPremultipleColorTint' => 'Video Alpha Premultiple Colour Tint', 'VideoAlphaPremultipleColorType' => 'Video Alpha Premultiple Colour Type', 'VideoAlphaPremultipleColorYellow' => 'Video Alpha Premultiple Colour Yellow', 'VideoColorKind' => 'Video Colour Kind', 'VideoColorSpace' => 'Video Colour Space', 'WBAdjColorTemp' => 'WB Adj Colour Temp', 'WBAdjLighting' => { PrintConv => { 'High Color Rendering Fluorescent (3700K)' => 'High Colour Rendering Fluorescent (1)', 'High Color Rendering Fluorescent (5000K)' => 'High Colour Rendering Fluorescent (3)', 'High Color Rendering Fluorescent (cool white)' => 'High Colour Rendering Fluorescent (2)', 'High Color Rendering Fluorescent (daylight)' => 'High Colour Rendering Fluorescent (4)', 'High Color Rendering Fluorescent (warm white)' => 'High Colour Rendering Fluorescent (0)', 'Sodium Vapor Lamps' => 'Sodium Vapour Lamps', 'Standard Fluorescent (high temperature mercury vapor)' => 'Standard Fluorescent (high temperature mercury vapour)', }, }, 'WatercolorFilter' => 'Watercolour Filter', 'WhiteBalance' => { PrintConv => { 'Color Filter' => 'Colour Filter', 'Color Temperature' => 'Colour Temperature', 'Color Temperature Enhancement' => 'Colour Temperature Enhancement', 'Color Temperature/Color Filter' => 'Colour Temperature/Colour Filter', }, }, 'WhiteBalance2' => { PrintConv => { 'Auto (Keep Warm Color Off)' => 'Auto (Keep Warm Colour Off)', }, }, 'WhiteBalanceSet' => { PrintConv => { 'Set Color Temperature 1' => 'Set Colour Temperature 1', 'Set Color Temperature 2' => 'Set Colour Temperature 2', 'Set Color Temperature 3' => 'Set Colour Temperature 3', }, }, 'WhiteBalanceSetting' => { PrintConv => { 'Color Temperature/Color Filter' => 'Colour Temperature/Colour Filter', }, }, 'WorkColorSpace' => { Description => 'Work Colour Space', PrintConv => { 'ColorMatch RGB' => 'ColourMatch RGB', }, }, 'XMethod' => { PrintConv => { 'Color Closest Pixel and Alpha Linear Interpolation' => 'Colour Closest Pixel and Alpha Linear Interpolation', 'Color Linear Interpolation and Alpha Closest Pixel' => 'Colour Linear Interpolation and Alpha Closest Pixel', }, }, 'YMethod' => { PrintConv => { 'Color Closest Pixel and Alpha Linear Interpolation' => 'Colour Closest Pixel and Alpha Linear Interpolation', 'Color Linear Interpolation and Alpha Closest Pixel' => 'Colour Linear Interpolation and Alpha Closest Pixel', }, }, ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::en_gb.pm - ExifTool British English language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut �����������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/es.pm��������������������������������������������������000644 �000765 �000024 �00000357730 12642461343 021556� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: es.pm # # Description: ExifTool Spanish language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::es; use strict; use vars qw($VERSION); $VERSION = '1.14'; %Image::ExifTool::Lang::es::Translate = ( 'AEAperture' => 'Aperture AE', 'AELock' => 'Bloqueo AE', 'AELockButton' => { Description => 'Botón Bloqueo AE', PrintConv => { 'None' => 'Ninguno', }, }, 'AELockButtonPlusDials' => { PrintConv => { 'None' => 'Ninguno', }, }, 'AEMaxAperture2' => 'Apertura máxima AE 2', 'AEMinAperture' => 'Apertura mínima AE', 'AEProgramMode' => { PrintConv => { 'Landscape' => 'Paisaje', 'Portrait' => 'Retrato', 'Standard' => 'Estándar', }, }, 'AESetting' => { PrintConv => { 'AE Lock' => 'Bloqueo AE', 'Exposure Compensation' => 'Compensación Exposición', }, }, 'AFAperture' => 'Apertura AF', 'AFAreaHeight' => 'AF Alto Ãrea', 'AFAreaHeights' => 'AF Alto Ãrea', 'AFAreaIllumination' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'AFAreaMode' => { Description => 'AF Modo Ãrea', PrintConv => { 'Face Detect AF' => 'Detección Caras AF', 'Multi-point AF or AI AF' => 'Multipunto AF o AI AF', 'Off (Manual Focus)' => 'Desactivado (Enfoque Manual)', 'Single-point AF' => 'Punto único AF)', 'Zone AF' => 'Zona AF', }, }, 'AFAreaWidth' => 'AF Ancho Ãrea', 'AFAreaWidths' => 'AF Ancho Ãrea', 'AFAssist' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'AFImageHeight' => 'AF Alto Imágen', 'AFImageWidth' => 'AF Ancho Imágen', 'AFMode' => 'Modo AF', 'AFPoint' => { Description => 'Punto AF', PrintConv => { 'Center' => 'Centro', 'Face Detect' => 'Detección Caras', 'Left' => 'Izquierda', 'None' => 'Ninguno', 'None (MF)' => 'Ninguno (MF)', 'Right' => 'Derecha', }, }, 'AFPointActivationArea' => { Description => 'Area de Activación Punto AF', PrintConv => { 'Standard' => 'Estándar', }, }, 'AFPointAreaExpansion' => { Description => 'Area Expansion Punto AF', PrintConv => { 'Disable' => 'Desactivado', }, }, 'AFPointAutoSelection' => 'Autoselección Punto AF', 'AFPointBrightness' => { Description => 'Brillo Punto AF', PrintConv => { 'Brighter' => 'Brillante', 'High' => 'Alto', 'Low' => 'Bajo', }, }, 'AFPointDisplayDuringFocus' => { Description => 'Mostrar Punto AF durante el enfoque', PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'AFPointIllumination' => { Description => 'Iluminación de Punto AF', PrintConv => { 'Brighter' => 'Brillante', 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'AFPointMode' => 'Modo Punto AF', 'AFPointPosition' => 'Posición Punto AF', 'AFPointRegistration' => 'Registro de Puntos AF', 'AFPointSelected' => { Description => 'Punto AF Seleccionado', PrintConv => { 'None' => 'Ninguno', }, }, 'AFPointSelected2' => 'Punto AF Seleccionado 2 ', 'AFPointSelection' => 'Selección de Punto AF', 'AFPointSelectionMethod' => 'Método Selección Punto AF', 'AFPoints' => 'Punto AF', 'AFPointsInFocus' => { Description => 'Puntos AF en foco', PrintConv => { 'All' => 'Todo', 'None' => 'Ninguno', }, }, 'AFPointsInFocus1D' => 'Puntos AF en foco', 'AFPointsInFocus5D' => { Description => 'Puntos AF en foco 5D', PrintConv => { 'Bottom' => 'Abajo', 'Center' => 'Centro', 'Left' => 'Izquierda', 'Lower-left' => 'Inferior izquierda', 'Lower-right' => 'Inferior derecha', 'Right' => 'Derecha', 'Top' => 'Arriba', 'Upper-left' => 'Superior izquierda', 'Upper-right' => 'Superior derecha', }, }, 'AFPointsSelected' => 'Puntos AF seleccionados', 'AFPointsUnknown1' => { PrintConv => { 'All' => 'Todo', }, }, 'AFPointsUsed' => 'Puntos AF utilizados', 'AIServoTrackingSensitivity' => { PrintConv => { 'Fast' => 'Rápido', 'Standard' => 'Estándar', }, }, 'APEVersion' => 'Versión APE', 'ARMIdentifier' => 'Identificador ARM', 'ARMVersion' => 'Versión ARM', 'AToB0' => 'A a B0', 'AToB1' => 'A a B1', 'AToB2' => 'A a B2', 'ActionAdvised' => { Description => 'Acción Aconsejada', PrintConv => { 'Object Kill' => 'Destruir Objecto', 'Object Reference' => 'Referencia Objecto', 'Object Replace' => 'Reemplazar Objecto', 'Ojbect Append' => 'Añadir Objeto', }, }, 'ActiveArea' => 'Ãrea Activa', 'ActiveD-Lighting' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'ActiveD-LightingMode' => { PrintConv => { 'High' => 'Alto', 'Off' => 'Desactivado', }, }, 'AddAspectRatioInfo' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'AddOriginalDecisionData' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'AdjustmentMode' => 'Modo Ajuste', 'AdvancedRaw' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'AdvancedSceneMode' => { PrintConv => { 'Monochrome' => 'Monocromo', 'Soft' => 'Suave', }, }, 'Album' => 'Ãlbum', 'AlphaByteCount' => 'Número Byte Alfa', 'AlphaDataDiscard' => { Description => 'Datos Alfa Descartados', PrintConv => { 'Flexbits Discarded' => 'FlexBits Descartado', 'Full Resolution' => 'Resolución Total', 'HighPass Frequency Data Discarded' => 'Datos Frecuencia High-Pass Descartados', 'Highpass and LowPass Frequency Data Discarded' => 'Dato Frecuencia High-Pass y Low-Pass Descartados', }, }, 'AlphaOffset' => 'Offset Alfa', 'AmbienceSelection' => { PrintConv => { 'Brighter' => 'Brillante', 'Cool' => 'Frío', 'Darker' => 'Oscuro', 'Intense' => 'Intenso', 'Monochrome' => 'Monocromo', 'Soft' => 'Suave', 'Standard' => 'Estándar', 'Vivid' => 'Vívido', 'Warm' => 'Cálido', }, }, 'AnalogBalance' => 'Balance Analógico', 'Annotation' => 'Anotación', 'Annotations' => 'Anotaciones', 'Anti-Blur' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'AntiAliasStrength' => 'Potencia Relativa del Filtro Antialiasing', 'Aperture' => 'Apertura', 'ApertureRange' => 'Rango Apertura', 'ApertureSetting' => 'Ajustes Apertura', 'ApertureValue' => 'Apertura', 'ApplicationRecordVersion' => 'Versión Registro Aplicación', 'ArtMode' => { PrintConv => { 'Monochrome' => 'Monocromo', 'Panorama' => 'Panoramica', }, }, 'Artist' => 'Autor', 'AsShotICCProfile' => 'Perfil ICC Captura', 'AsShotNeutral' => 'Captura Neutral', 'AsShotPreProfileMatrix' => 'Matriz Pre Perfil Captura', 'AsShotProfileName' => 'Nombre Perfil Captura', 'AsShotWhiteXY' => 'Captura Blanco X-Y', 'Audio' => { PrintConv => { 'Yes' => 'Si', }, }, 'AudioChannelType' => { PrintConv => { 'Other' => 'Otro', }, }, 'AudioChannels' => 'Canales Audio', 'AudioCodecID' => { PrintConv => { 'Unknown -' => 'Desconocido -', }, }, 'AudioDuration' => 'Duración Audio', 'AudioOutcue' => 'Cola Audio', 'AudioSampleType' => { PrintConv => { 'Other' => 'Otro', }, }, 'AudioSamplingRate' => 'Ratio Muestreo Audio', 'AudioSamplingResolution' => 'Resolución Muestreo Audio', 'AudioType' => { Description => 'Tipo Audio', PrintConv => { 'Mono Actuality' => 'Actualidad (audio mono (1 canal))', 'Mono Music' => 'Música transmitida por si misma (audio mono (1 canal))', 'Mono Question and Answer Session' => 'Sesión pregunta y respuesta (audio mono (1 canal))', 'Mono Raw Sound' => 'Sonido bruto (audio mono (1 canal))', 'Mono Response to a Question' => 'Respuesta a una pregunta (audio mono (1 canal))', 'Mono Scener' => 'Escena (audio mono (1 canal))', 'Mono Voicer' => 'Voz (audio mono (1 canal))', 'Mono Wrap' => 'Envolvente (audio mono (1 canal))', 'Stereo Actuality' => 'Actualidad (audio estéreo (2 canales))', 'Stereo Music' => 'Música transmitida por si misma (audio estéreo (2 canales))', 'Stereo Question and Answer Session' => 'Sesión pregunta y respuesta (audio estéreo (2 canales))', 'Stereo Raw Sound' => 'Sonido bruto (audio estéreo (2 canales))', 'Stereo Response to a Question' => 'Respuesta a una pregunta (audio estéreo (2 canales))', 'Stereo Scener' => 'Escena (audio estéreo (2 canales))', 'Stereo Voicer' => 'Voz (audio estéreo (2 canales))', 'Stereo Wrap' => 'Envolvente (audio estéreo (2 canales))', 'Text Only' => 'Solo texto (sin dato de objeto)', }, }, 'Author' => 'Autor', 'AuthorsPosition' => 'Posición del Autor', 'AutoAperture' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'AutoBracket' => 'Auto-horquillado', 'AutoExposureBracketing' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'AutoFP' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'AutoLightingOptimizer' => { PrintConv => { 'Low' => 'Bajo', 'Off' => 'Desactivado', 'Standard' => 'Estándar', 'Strong' => 'Fuerte', }, }, 'AutoLightingOptimizerOn' => { PrintConv => { 'Yes' => 'Si', }, }, 'AutoRedEye' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'AutoRotate' => { PrintConv => { 'None' => 'Ninguno', 'Rotate 180' => 'Girado 180°', 'Rotate 270 CW' => 'Girado 270° sentido reloj', 'Rotate 90 CW' => 'Girado 90° sentido reloj', }, }, 'AverageLevel' => 'Nivel Medio', 'BToA0' => 'B a A0', 'BToA1' => 'B a A1', 'BToA2' => 'B a A2', 'BackgroundColorIndicator' => 'Indicador Color Fondo', 'BackgroundColorValue' => 'Valor Color Fondo', 'BackgroundTiling' => { PrintConv => { 'Yes' => 'Si', }, }, 'BadFaxLines' => 'Líneas Fax Malas', 'BannerImageType' => { PrintConv => { 'None' => 'Ninguno', }, }, 'BaselineExposure' => 'Exposición Base', 'BaselineNoise' => 'Ruido Base', 'BaselineSharpness' => 'Nitidez Base', 'BatteryLevel' => 'Nivel Batería', 'BatteryState' => { PrintConv => { 'Low' => 'Bajo', }, }, 'BayerGreenSplit' => 'Mosaico Bayer Verde', 'Beep' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'BeepPitch' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', }, }, 'BestQualityScale' => 'Escala Mayor Calidad', 'BestShotMode' => { PrintConv => { 'Beach' => 'Playa', 'Fireworks' => 'Fuegos Artificiales', 'Food' => 'Comida', 'Monochrome' => 'Monocromo', 'Portrait' => 'Retrato', 'Snow' => 'Nieve', 'Underwater' => 'Subacuatica', }, }, 'BitsPerComponent' => 'Bits Por Componente', 'BitsPerExtendedRunLength' => 'Bits Por "Run Length" Extendido', 'BitsPerRunLength' => 'Bits Por "Run Length"', 'BitsPerSample' => 'Número de Bits Por Muestra', 'BlackLevel' => 'Nivel Negro', 'BlackLevelDeltaH' => 'Nivel Negro Delta H', 'BlackLevelDeltaV' => 'Nivel Negro Delta V', 'BlackLevelRepeatDim' => 'Dimensión Repetición Nivel Negro', 'BleachBypassToning' => { PrintConv => { 'Green' => 'Verde', 'Orange' => 'Naranja', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'BlocksPerFrame' => 'Bloques por Imagen', 'BlueBalance' => 'Balance de azules', 'BlueMatrixColumn' => 'Columna Matriz Azul', 'BlueTRC' => 'Curva Reproducción Tono Azul', 'BlurControl' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', }, }, 'BlurWarning' => { PrintConv => { 'None' => 'Ninguno', }, }, 'BodyFirmwareVersion' => 'Versión Firmware del cuerpo de la cámara', 'BracketMode' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'Brightness' => 'Brillo', 'BrightnessValue' => 'Luminosidad', 'By-line' => 'Creador', 'By-lineTitle' => 'Puesto del Creador', 'CFALayout' => { Description => 'Distribución CFA', PrintConv => { 'Even columns offset down 1/2 row' => 'Distribución escalonada A: columnas pares son movidas hacia abajo 1/2 fila', 'Even columns offset up 1/2 row' => 'Distribución escalonada B: columnas pares son movidas hacia arriba 1/2 fila', 'Even rows offset left 1/2 column' => 'Distribución escalonada D: filas pares son movidas a la izquierda 1/2 columna', 'Even rows offset right 1/2 column' => 'Distribución escalonada C: filas pares son movidas a la derecha 1/2 columna', 'Rectangular' => 'Distribución Rectangular (o cuadrada)', }, }, 'CFAPattern' => 'Patrón CFA', 'CFAPattern2' => 'Patrón CFA 2', 'CFAPlaneColor' => 'Color Plano CFA', 'CFARepeatPatternDim' => 'Dimensión Patrón Repetición CFA', 'CMMFlags' => 'Banderas CMM', 'CMYKEquivalent' => 'CMYK Equivalente', 'CPUType' => { PrintConv => { 'None' => 'Ninguno', }, }, 'CalibrationDateTime' => 'Fecha y Hora Calibración', 'CalibrationIlluminant1' => { Description => 'Calibración Iluminación 1', PrintConv => { 'Cloudy' => 'Tiempo Nublado', 'Cool White Fluorescent' => 'Fluorescente blanco cálido (W 3800 - 4500K)', 'Day White Fluorescent' => 'Fluorescente blanco día (N 4600 - 5500K)', 'Daylight' => 'Luz del día', 'Daylight Fluorescent' => 'Fluorescente luz de día (D 5700 - 7100K)', 'Fine Weather' => 'Buen tiempo', 'Fluorescent' => 'Fluorescente', 'ISO Studio Tungsten' => 'Tungsteno estudio ISO', 'Other' => 'Otras Fuentes Luz', 'Shade' => 'Sombrío', 'Standard Light A' => 'Luz Estándar A', 'Standard Light B' => 'Luz Estándar B', 'Standard Light C' => 'Luz Estándar C', 'Tungsten (Incandescent)' => 'Tungsteno (luz incandescente)', 'Unknown' => 'Desconocido', 'Warm White Fluorescent' => 'Fluorescente blanco cálido (L 2600 - 3250K)', 'White Fluorescent' => 'Fluorescente blanco (WW 3250 - 3800K)', }, }, 'CalibrationIlluminant2' => { Description => 'Calibración Iluminación 2', PrintConv => { 'Cloudy' => 'Tiempo Nublado', 'Cool White Fluorescent' => 'Fluorescente blanco cálido (W 3800 - 4500K)', 'Day White Fluorescent' => 'Fluorescente blanco día (N 4600 - 5500K)', 'Daylight' => 'Luz del día', 'Daylight Fluorescent' => 'Fluorescente luz de día (D 5700 - 7100K)', 'Fine Weather' => 'Buen tiempo', 'Fluorescent' => 'Fluorescente', 'ISO Studio Tungsten' => 'Tungsteno estudio ISO', 'Other' => 'Otras Fuentes Luz', 'Shade' => 'Sombrío', 'Standard Light A' => 'Luz Estándar A', 'Standard Light B' => 'Luz Estándar B', 'Standard Light C' => 'Luz Estándar C', 'Tungsten (Incandescent)' => 'Tungsteno (luz incandescente)', 'Unknown' => 'Desconocido', 'Warm White Fluorescent' => 'Fluorescente blanco cálido (L 2600 - 3250K)', 'White Fluorescent' => 'Fluorescente blanco (WW 3250 - 3800K)', }, }, 'CameraCalibration1' => 'Calibración Cámara 1', 'CameraCalibration2' => 'Calibración Cámara 2', 'CameraCalibrationSig' => 'Firma Calibración Cámara', 'CameraISO' => 'Camara-ISO', 'CameraOrientation' => { Description => 'Orientación Cámara', PrintConv => { 'Rotate 270 CW' => 'Girado 270° sentido reloj', 'Rotate 90 CW' => 'Girado 90° sentido reloj', }, }, 'CameraSerialNumber' => 'Número Serie Cámara', 'CameraTemperature' => 'Temperatura Cámara', 'CameraType' => 'Tipo Cámara', 'CameraType2' => 'Tipo Cámara', 'CanonFileLength' => 'Tamaño Archivo', 'CanonFlashMode' => { PrintConv => { 'Auto' => 'Automático', 'External flash' => 'Flash Externo', 'Off' => 'Desactivado', 'On' => 'Activado', 'Red-eye reduction' => 'Réducción ojos rojos', 'Red-eye reduction (Auto)' => 'Réducción ojos rojos (Automático)', 'Red-eye reduction (On)' => 'Réducción ojos rojos (Activado)', }, }, 'CanonImageSize' => { PrintConv => { '1280x720 Movie' => 'Película 1280x720', '1920x1080 Movie' => 'Película 1920x1080', '640x480 Movie' => 'Película 640x480', 'Large' => 'Ancho', 'Medium' => 'Medio', 'Medium 1' => 'Medio 1', 'Medium 2' => 'Medio 2', 'Medium 3' => 'Medio 3', 'Small' => 'Pequeño', 'Small 1' => 'Pequeño 1', 'Small 2' => 'Pequeño 2', 'Small 3' => 'Pequeño 3', 'Small Movie' => 'Película Pequeña', }, }, 'Caption-Abstract' => 'Título/Descripción', 'CaptionWriter' => 'Autor del Pie de Foto', 'Categories' => 'Categorías', 'Category' => 'Categoría', 'CellLength' => 'Alto Celda', 'CellWidth' => 'Ancho Celda', 'Certificate' => 'Certificado', 'Channels' => 'Canales', 'CharTarget' => 'Objetivo Caracter', 'CharacterSet' => 'Conjunto de Caracteres', 'ChromaBlurRadius' => 'Radio Mezcla Croma', 'ChromaticAdaptation' => 'Adaptación Cromática', 'Chromaticity' => 'Cromaticidad', 'ChrominanceNR_TIFF_JPEG' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'Off' => 'Desactivado', }, }, 'ChrominanceNoiseReduction' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'Off' => 'Desactivado', }, }, 'City' => 'Ciudad', 'ClassifyState' => 'Clasificar Estado', 'CleanFaxData' => 'Datos Fax Claro', 'ClipPath' => 'Camino Fragmento', 'CodedCharacterSet' => 'Juego Caracteres Codificado', 'ColorAberrationControl' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'ColorAdjustment' => 'Ajuste Color', 'ColorAdjustmentMode' => { Description => 'Modo Ajuste Color', PrintConv => { 'Off' => 'Apagado', 'On' => 'Encendido', }, }, 'ColorBalanceAdj' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'ColorBooster' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'ColorCalibrationMatrix' => 'Tabla Matriz Calibración Color', 'ColorCharacterization' => 'Caracterización Color', 'ColorComponents' => 'Componentes de Color', 'ColorEffect' => { PrintConv => { 'Cool' => 'Frío', 'Warm' => 'Cálido', }, }, 'ColorFilter' => { Description => 'Filtro de Color', PrintConv => { 'Green' => 'Verde', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'ColorMap' => 'Mapa Color', 'ColorMatrix' => 'Matriz de Color', 'ColorMatrix1' => 'Matriz Color 1', 'ColorMatrix2' => 'Matriz Color 2', 'ColorMatrixA' => 'Matriz de Color A', 'ColorMatrixAdobeRGB' => 'Matriz de Color Adobe RGB', 'ColorMatrixB' => 'Matriz de Color B', 'ColorMatrixNumber' => 'Número de Matriz de Color', 'ColorMatrixSRGB' => 'Matriz de Color SRGB', 'ColorMode' => { Description => 'Modo de Color', PrintConv => { 'Autumn Leaves' => 'Hojas de otoño', 'B&W' => 'ByN', 'Clear' => 'Claro', 'Deep' => 'Profundo', 'Evening' => 'Tarde', 'Landscape' => 'Paisaje', 'Light' => 'Luz', 'Neutral' => 'Neutro', 'Night View' => 'Vista nocturna', 'Night View/Portrait' => 'Retrato noct.', 'Portrait' => 'Retrato', 'Standard' => 'Estándar', 'Sunset' => 'Puesta sol', 'Vivid' => 'Vívido', }, }, 'ColorMoireReduction' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'ColorMoireReductionMode' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'Off' => 'Desactivado', }, }, 'ColorPalette' => 'Paleta Color', 'ColorRepresentation' => { Description => 'Representación Color', PrintConv => { '3 Components, Frame Sequential in Multiple Objects' => 'Tres componentes, Marco secuencial en múltiples objectos', '3 Components, Frame Sequential in One Object' => 'Tres componentes, Marco secuencial en un único objeto', '3 Components, Line Sequential' => 'Tres componentes, Línea secuencial', '3 Components, Pixel Sequential' => 'Tres componentes, Pixel secuencial', '3 Components, Single Frame' => 'Tres componentes, Marco simple', '3 Components, Special Interleaving' => 'Tres componentes, Entrelazado especial', '4 Components, Frame Sequential in Multiple Objects' => 'Cuatro componentes, Marco secuencial en múltiples objectos', '4 Components, Frame Sequential in One Object' => 'Cuatro componentes, Marco secuencial en un único objeto', '4 Components, Line Sequential' => 'Cuatro componentes, Línea secuencial', '4 Components, Pixel Sequential' => 'Cuatro componentes, Pixel secuencial', '4 Components, Single Frame' => 'Cuatro componentes, Marco simple', '4 Components, Special Interleaving' => 'Cuatro componentes, Entrelazado especial', 'Monochrome, Single Frame' => 'Monocromo, Marco simple', 'No Image, Single Frame' => 'Sin imagen, Marco simple', }, }, 'ColorResponseUnit' => 'Unidad Respuesta Color', 'ColorSequence' => 'Representación de Color', 'ColorSpace' => { Description => 'Espacio Color', PrintConv => { 'ICC Profile' => 'Perfil ICC', 'Monochrome' => 'Monocromo', 'Uncalibrated' => 'Sin calibrar', 'Wide Gamut RGB' => 'Gamut RVB Grande', }, }, 'ColorSpaceData' => 'Espacio Color Datos', 'ColorTable' => 'Tabla Color', 'ColorTempAuto' => 'Temperatura Color Automática', 'ColorTempCloudy' => 'Temperatura Color Nublado', 'ColorTempCustom' => 'Temperatura Color Personalizada', 'ColorTempCustom1' => 'Temperatura Color Personalizada 1', 'ColorTempCustom2' => 'Temperatura Color Personalizada 2', 'ColorTempDaylight' => 'Temperatura Color Luz de Día', 'ColorTempFlash' => 'Temperatura Color Flash', 'ColorTempFluorescent' => 'Temperatura Color Fluorescente', 'ColorTempKelvin' => 'Temperatura Color Kelvin', 'ColorTempMeasured' => 'Temperatura Color Medida', 'ColorTempShade' => 'Temperatura Color Sombrío', 'ColorTempTungsten' => 'Temperatura Color Tungsteno', 'ColorTempUnknown' => 'Temperatura de Color Desconocida', 'ColorTempUnknown10' => 'Temperatura de Color Desconocida 10', 'ColorTempUnknown11' => 'Temperatura de Color Desconocida 11', 'ColorTempUnknown12' => 'Temperatura de Color Desconocida 12', 'ColorTempUnknown13' => 'Temperatura de Color Desconocida 13', 'ColorTempUnknown14' => 'Temperatura de Color Desconocida 14', 'ColorTempUnknown15' => 'Temperatura de Color Desconocida 15', 'ColorTempUnknown16' => 'Temperatura de Color Desconocida 16', 'ColorTempUnknown17' => 'Temperatura de Color Desconocida 17', 'ColorTempUnknown18' => 'Temperatura de Color Desconocida 18', 'ColorTempUnknown19' => 'Temperatura de Color Desconocida 19', 'ColorTempUnknown2' => 'Temperatura de Color Desconocida 2', 'ColorTempUnknown20' => 'Temperatura de Color Desconocida 20', 'ColorTempUnknown3' => 'Temperatura de Color Desconocida 3', 'ColorTempUnknown4' => 'Temperatura de Color Desconocida 4', 'ColorTempUnknown5' => 'Temperatura de Color Desconocida 5', 'ColorTempUnknown6' => 'Temperatura de Color Desconocida 6', 'ColorTempUnknown7' => 'Temperatura de Color Desconocida 7', 'ColorTempUnknown8' => 'Temperatura de Color Desconocida 8', 'ColorTempUnknown9' => 'Temperatura de Color Desconocida 9', 'ColorTemperature' => 'Temperatura de Color', 'ColorTone' => { Description => 'Tono de Color', PrintConv => { 'Normal' => 'Estándar', }, }, 'ColorantOrder' => 'Orden Colorante', 'ColorantTable' => 'Tabla Colorante', 'ColorimetricReference' => 'Referencia Colorimétrica', 'CommandDialsChangeMainSub' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'CommandDialsMenuAndPlayback' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'CommandDialsReverseRotation' => { PrintConv => { 'Yes' => 'Si', }, }, 'CommanderGroupAMode' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'CommanderGroupBMode' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'CommanderInternalFlash' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'Comment' => 'Comentario', 'Compatibility' => 'Compatibilidad', 'Compilation' => { PrintConv => { 'Yes' => 'Si', }, }, 'ComponentsConfiguration' => 'Configuración de Componentes', 'Composer' => 'Compositor', 'CompressedBitsPerPixel' => 'Modo Compresión Imagen', 'CompressedSize' => 'Tamaño Comprimido', 'Compression' => { Description => 'Compresión', PrintConv => { 'JPEG' => 'Compresión JPEG', 'JPEG (old-style)' => 'JPEG (estilo antiguo)', 'Kodak DCR Compressed' => 'Compresión Kodak DCR', 'Kodak KDC Compressed' => 'Compresión Kodak KDC', 'Next' => 'Codificación NeXT 2-bit', 'Nikon NEF Compressed' => 'Compresión Nikon NEF', 'None' => 'Ninguno', 'Pentax PEF Compressed' => 'Compresión Pentax PEF', 'SGILog' => 'Codificación Log Luminancia SGI 32-bit', 'SGILog24' => 'Codificación Log Luminancia SGI 24-bit', 'Sony ARW Compressed' => 'Compresión Sony ARW', 'Thunderscan' => 'Codificación ThunderScan 4-bit', 'Uncompressed' => 'Sin comprimir', }, }, 'CompressionFactor' => 'Factor de compresión', 'CompressionLevel' => 'Nivel Compresión', 'CompressionType' => { Description => 'Tipo Compresión', PrintConv => { 'None' => 'Ninguno', }, }, 'CompressorName' => 'Nombre Compresor', 'Conductor' => 'Director', 'Conductors' => 'Directores', 'ConnectionSpaceIlluminant' => 'Iluminación Espacio Conexión', 'ConsecutiveBadFaxLines' => 'Líneas Fax Malas Consecutivas', 'Contact' => 'Contacto', 'ContentLocationCode' => 'Código Localización Contenido', 'ContentLocationName' => 'Nombre Localización Contenido', 'ContinuousBracketing' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', }, }, 'ContinuousDrive' => { PrintConv => { 'Continuous' => 'Continuo', 'Continuous, High' => 'Continuo, Alto', 'Continuous, Low' => 'Continuo, Bajo', 'Continuous, Speed Priority' => 'Continuo, Prioridad Velocidad', 'Movie' => 'Película', 'Single' => 'Simple', }, }, 'Contrast' => { Description => 'Contraste', PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'Normal' => 'Estándar', }, }, 'ContrastMode' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', }, }, 'ContrastSetting' => 'Ajustes de Contraste', 'CopyrightNotice' => 'Aviso Copyright', 'Country' => 'País', 'Country-PrimaryLocationCode' => 'Código País ISO', 'Country-PrimaryLocationName' => 'País', 'CountryCode' => 'Código País', 'CreateDate' => 'Fecha y Hora de Datos Digital', 'CreationDate' => 'Fecha Creación', 'CreativeStyle' => { PrintConv => { 'Autumn Leaves' => 'Hojas de otoño', 'B&W' => 'ByN', 'Clear' => 'Claro', 'Deep' => 'Profundo', 'Landscape' => 'Paisaje', 'Light' => 'Luz', 'Neutral' => 'Neutro', 'Night View/Portrait' => 'Retrato noct.', 'Portrait' => 'Retrato', 'Standard' => 'Estándar', 'Sunset' => 'Puesta sol', 'Vivid' => 'Vívido', }, }, 'CreativeStyleSetting' => { PrintConv => { 'Landscape' => 'Paisaje', 'Portrait' => 'Retrato', 'Standard' => 'Estándar', 'Vivid' => 'Vívido', }, }, 'Creator' => 'Creador', 'CreatorAddress' => 'Creador - Dirección', 'CreatorCity' => 'Creador - Ciudad', 'CreatorContactInfo' => 'Contacto Creador', 'CreatorCountry' => 'Creador - País', 'CreatorPostalCode' => 'Creador - Código Postal', 'CreatorRegion' => 'Creador - Estado/Provincia', 'CreatorWorkEmail' => 'Creador - Email(s)', 'CreatorWorkTelephone' => 'Creador - Teléfono(s)', 'CreatorWorkURL' => 'Creador - Website(s)', 'Credit' => 'Proveedor', 'CropActive' => { PrintConv => { 'Yes' => 'Si', }, }, 'CropHeight' => 'Recorte Altura', 'CropLeft' => 'Recorte Izquierda', 'CropTop' => 'Recorte Arriba', 'CropWidth' => 'Recorte Anchura', 'CroppedImageHeight' => 'Alto Imágen Recortada', 'CroppedImageLeft' => 'Izquierda Imágen Recortada', 'CroppedImageTop' => 'Superior Imágen Recortada', 'CroppedImageWidth' => 'Ancho Imágen Recortada', 'CurrentICCProfile' => 'Perfil ICC Actual', 'CurrentPreProfileMatrix' => 'Matriz Pre Perfil Actual', 'Curves' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'CustomRendered' => { Description => 'Proceso Imagen Personalizado', PrintConv => { 'Custom' => 'Proceso personalizado', 'Normal' => 'Proceso normal', }, }, 'CustomSaturation' => 'Saturación personalizada', 'D-LightingHQ' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'D-LightingHQSelected' => { PrintConv => { 'Yes' => 'Si', }, }, 'D-LightingHS' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'DNGBackwardVersion' => 'Versión Antigua DNG', 'DNGLensInfo' => 'Distancia Focal Mínima', 'DNGVersion' => 'Versión DNG', 'DOF' => 'Profundidad de campo', 'Data' => 'Datos', 'DataCompressionMethod' => 'Proveedor/Propietario Algoritmo Compresión Datos', 'DataImprint' => { PrintConv => { 'None' => 'Ninguno', }, }, 'DataPackets' => ' Paquetes de Datos', 'DataType' => 'Tipo Datos', 'Date' => 'Fecha', 'DateCreated' => 'Fecha Creación', 'DateSent' => 'Fecha Envío', 'DateStampMode' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'DateTimeOriginal' => 'Fecha y Hora de Datos Original', 'DaylightSavings' => { PrintConv => { 'Yes' => 'Si', }, }, 'DefaultBlackRender' => { PrintConv => { 'None' => 'Ninguno', }, }, 'DefaultCropOrigin' => 'Origen Corte Defecto', 'DefaultCropSize' => 'Tamaño Corte Defecto', 'DefaultScale' => 'Escala por Defecto', 'DerivedFromMaskMarkers' => { PrintConv => { 'All' => 'Todo', 'None' => 'Ninguno', }, }, 'Description' => 'Descripción', 'Destination' => 'Destino', 'DestinationDST' => { PrintConv => { 'Yes' => 'Si', }, }, 'DeviceAttributes' => 'Atributos Dispositivo', 'DeviceManufacturer' => 'Fabricante Dispositivo', 'DeviceMfgDesc' => 'Descripción Fabricante Dispositivo', 'DeviceModel' => 'Modelo Dispositivo', 'DeviceModelDesc' => 'Descripción Modelo Dispositivo', 'DeviceSettingDescription' => 'Descripción Ajustes Dispositivo', 'DigitalCreationDate' => 'Fecha Creación Digital', 'DigitalCreationTime' => 'Hora Creación Digital', 'DigitalFilter01' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter02' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter03' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter04' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter05' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter06' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter07' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter08' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter09' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter10' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter11' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter12' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter13' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter14' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter15' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter16' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter17' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter18' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter19' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalFilter20' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'DigitalSignature' => 'Firma Digital', 'DigitalZoom' => { Description => 'Zoom Digital', PrintConv => { 'None' => 'Ninguno', 'Off' => 'Desactivado', }, }, 'DigitalZoomOn' => { Description => 'Zoom Digital Encendido', PrintConv => { 'Off' => 'Apagado', 'On' => 'Encendido', }, }, 'DigitalZoomRatio' => 'Ratio Zoom Digital', 'Directory' => 'Ubicación del Fichero', 'DistortionControl' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'DistortionCorrection' => { Description => 'Corrección Distorsión', PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'DistortionCorrection2' => { Description => 'Corrección Distorsión 2', PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'DistortionCorrectionOn' => 'Corrección Distorsión Activada', 'DocSecurity' => { PrintConv => { 'None' => 'Ninguno', }, }, 'DocumentHistory' => 'Historial del Documento', 'DocumentName' => 'Nombre Documento', 'DocumentNotes' => 'Notas del Documento', 'DotRange' => 'Intervalo Puntos', 'DriveMode' => { Description => 'Modo Entrada', PrintConv => { 'Off' => 'Desactivado', }, }, 'Duration' => 'Duración', 'DynamicRange' => { PrintConv => { 'Standard' => 'Estándar', }, }, 'DynamicRangeOptimizer' => { Description => 'Optim.gama diná', PrintConv => { 'Advanced Auto' => 'Avanzado Autom', 'Advanced Lv1' => 'Avanzado Nvl.1', 'Advanced Lv2' => 'Avanzado Nvl.2', 'Advanced Lv3' => 'Avanzado Nvl.3', 'Advanced Lv4' => 'Avanzado Nvl.4', 'Advanced Lv5' => 'Avanzado Nvl.5', 'Off' => 'Desactivado', 'Standard' => 'Estándar', }, }, 'DynamicRangeOptimizerBracket' => { PrintConv => { 'Low' => 'Bajo', }, }, 'DynamicRangeOptimizerMode' => { PrintConv => { 'Standard' => 'Estándar', }, }, 'DynamicRangeOptimizerSetting' => { PrintConv => { 'Standard' => 'Estándar', }, }, 'EasyExposureCompensation' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'EasyMode' => { PrintConv => { 'Beach' => 'Playa', 'Black & White' => 'Blanco y Negro', 'Digital Macro' => 'Macro digital', 'Easy' => 'Fácil', 'Fireworks' => 'Fuegos Artificiales', 'Fisheye Effect' => 'Efecto Ojo de Pez', 'Flash Off' => 'Flash Desactivado', 'Foliage' => 'Follaje', 'Gray Scale' => 'Escala de Grises', 'Indoor' => 'Interior', 'Kids & Pets' => 'Niños y Mascotas', 'Landscape' => 'Paisaje', 'Monochrome' => 'Monocromo', 'Neutral' => 'Neutro', 'Night' => 'Nocturno', 'Night Scene' => 'Escena Nocturna', 'Night Snapshot' => 'Fotografía Nocturna', 'Nostalgic' => 'Nostalgico', 'Portrait' => 'Retrato', 'Smile' => 'Sonrisa', 'Snow' => 'Nieve', 'Sports' => 'Deportes', 'Sunset' => 'Puesta de sol', 'Surface' => 'Superficie', 'Underwater' => 'Subacuatica', 'Vivid' => 'Vívido', }, }, 'EdgeNoiseReduction' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'EditStatus' => 'Estado Edición', 'EditorialUpdate' => { Description => 'Actualización Editorial', PrintConv => { 'Additional language' => 'Idioma Adicional', }, }, 'EffectiveMaxAperture' => 'Aperture Máxima Efectiva', 'Emphasis' => { PrintConv => { 'None' => 'Ninguno', }, }, 'EncodedBy' => 'Codificado por', 'EncodingProcess' => 'Proceso de codificación', 'EncodingSettings' => 'Ajustes de Codificación', 'EncodingTime' => 'Hora de codificación', 'EndPoints' => 'Puntos Finales', 'EnhanceDarkTones' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'Enhancement' => { PrintConv => { 'Green' => 'Verde', 'Red' => 'Rojo', 'Underwater' => 'Subacuatica', }, }, 'EnvelopeNumber' => 'Número Sobre', 'EnvelopePriority' => { Description => 'Prioridad Sobre', PrintConv => { '0 (reserved)' => '0 (reservada para uso futuro)', '1 (most urgent)' => '1 (más urgente)', '5 (normal urgency)' => '5 (urgencia normal)', '8 (least urgent)' => '8 (menos urgente)', '9 (user-defined priority)' => '9 (prioridad definida por el usuario)', }, }, 'EnvelopeRecordVersion' => 'Versión Registro Sobre', 'EquipmentVersion' => 'Versión Equipo', 'ErrorCorrection' => 'Correción Error', 'ErrorCorrectionType' => 'Tipo Corrección Error', 'ExcursionTolerance' => { Description => 'Tolerancia Excursión', PrintConv => { 'Allowed' => 'Puede ocurrir', 'Not Allowed' => 'No Permitido (defecto)', }, }, 'ExifCameraInfo' => 'Información Cámara Exif', 'ExifImageHeight' => 'Alto Imagen', 'ExifImageWidth' => 'Ancho Imagen', 'ExifOffset' => 'Puntero Exif IFD', 'ExifToolVersion' => 'Versión Exiftool', 'ExifVersion' => 'Versión Exif', 'ExpandFilm' => 'Película Expandida', 'ExpandFilterLens' => 'Filtro Objetivo Expandida', 'ExpandFlashLamp' => 'Lampara Flash Expandida', 'ExpandLens' => 'Objetivo Expandido', 'ExpandScanner' => 'Escaner Expandido', 'ExpandSoftware' => 'Software Expandido', 'ExpirationDate' => 'Fecha Expiración', 'ExpirationTime' => 'Hora Expiración', 'ExposureCompensation' => 'Compensación Exposición', 'ExposureDelayMode' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'ExposureIndex' => 'Ãndice Exposición', 'ExposureMode' => { Description => 'Modo Exposición', PrintConv => { 'Aperture-priority AE' => 'Prioridad Aberture AE', 'Auto' => 'Exposición automática', 'Auto bracket' => 'Auto-horquillado', 'Beach' => 'Playa', 'Fireworks' => 'Fuegos Artificiales', 'Food' => 'Comida', 'Landscape' => 'Paisaje', 'Manual' => 'Exposición manual', 'Panorama' => 'Panoramica', 'Portrait' => 'Retrato', 'Program AE' => 'Programa AE', 'Shutter speed priority AE' => 'Prioridad velocidad obturador AE', 'Snow' => 'Nieve', 'Underwater' => 'Subacuatica', }, }, 'ExposureProgram' => { Description => 'Programa Exposición', PrintConv => { 'Action (High speed)' => 'Programa acción (orientado a velocidad de obturación rápida)', 'Aperture-priority AE' => 'Prioridad Apertura', 'Creative (Slow speed)' => 'Programa creativo (orientado a profundidad de campo)', 'Landscape' => 'Modo paisaje (para fotos de paisaje con el fondo en enfoque)', 'Manual' => 'Exposición manual', 'Not Defined' => 'No definido', 'Portrait' => 'Modo retrato (para fotos de cerca con el fondo fuera de enfoque)', 'Program AE' => 'Programa normal', 'Shutter speed priority AE' => 'Prioridad obturador', }, }, 'ExposureTime' => 'Tiempo de Exposición', 'ExposureTime2' => 'Tiempo de Exposición 2', 'Extender' => { PrintConv => { 'None' => 'Ninguno', }, }, 'ExternalFlash' => { Description => 'Flash Externo', PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'ExternalFlashBounce' => { PrintConv => { 'Yes' => 'Si', }, }, 'ExternalFlashMode' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'ExternalFlashZoom' => 'Zoom Flash Externo', 'ExtraSamples' => 'Muestra Extra', 'FNumber' => 'Número F', 'FOV' => 'Angulo de Visión', 'FaceDetectArea' => 'Area detección caras', 'FaceDetectFrameSize' => 'Tamaño Area detección caras', 'FaceOrientation' => { PrintConv => { 'Horizontal (normal)' => '0° (arriba/izquierda)', 'Rotate 180' => 'Girado 180°', 'Rotate 270 CW' => 'Girado 270° sentido reloj', 'Rotate 90 CW' => 'Girado 90° sentido reloj', }, }, 'FacesDetected' => 'Caras Detectadas', 'FastSeek' => { PrintConv => { 'Yes' => 'Si', }, }, 'FaxProfile' => { PrintConv => { 'Unknown' => 'Desconocido', }, }, 'FaxRecvParams' => 'Parámetros Recepción Fax', 'FaxRecvTime' => 'Hora Recepción Fax', 'FaxSubAddress' => 'Subdirección Fax', 'FileAccessDate' => 'Fecha y hora de Acceso', 'FileCreateDate' => 'Fecha y hora de Creación', 'FileFormat' => 'Formato Archivo', 'FileLength' => 'Tamaño Archivo', 'FileModifyDate' => 'Fecha Actualización', 'FileName' => 'Nombre Archivo', 'FileNumberMemory' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'FileNumberSequence' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'FileOwner' => 'Propietario del Archivo', 'FilePermissions' => 'Permisos', 'FileSize' => 'Tamaño Archivo', 'FileSource' => { Description => 'Fuente Archivo', PrintConv => { 'Digital Camera' => 'Cámara Digital', 'Film Scanner' => 'Escaner Película', 'Reflection Print Scanner' => 'Escaner de Reflexión', }, }, 'FileType' => 'Tipo Archivo', 'FileVersion' => 'Versión Formato Archivo', 'Filename' => 'Nombre archivo', 'FillOrder' => 'Orden Rellenado', 'FilterEffect' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Ninguno', 'Off' => 'Desactivado', 'Orange' => 'Naranja', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'FilterEffectMonochrome' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Ninguno', 'Orange' => 'Naranja', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'FilterEffectUnknown' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Ninguno', 'Orange' => 'Naranja', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'FilterEffectUserDef1' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Ninguno', 'Orange' => 'Naranja', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'FilterEffectUserDef2' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Ninguno', 'Orange' => 'Naranja', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'FilterEffectUserDef3' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Ninguno', 'Orange' => 'Naranja', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'FinderDisplayDuringExposure' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'FirmwareVersion' => 'Versión Firmware', 'FixtureIdentifier' => 'Identificador Marca', 'Flags' => { PrintConv => { 'Comment' => 'Comentario', 'FileName' => 'Nombre de Archivo', 'Text' => 'Texto', }, }, 'Flash' => { PrintConv => { 'Auto, Did not fire' => 'Flash no disparado, modo automático', 'Auto, Did not fire, Red-eye reduction' => 'Auto, Flash no disparado, modo reducción ojos rojos', 'Auto, Fired' => 'Flash disparado, modo automático', 'Auto, Fired, Red-eye reduction' => 'Flash disparado, modo automático, modo reducción ojos rojos', 'Auto, Fired, Red-eye reduction, Return detected' => 'Flash disparado, modo automático, retorno luz detectado, modo reducción ojos rojos', 'Auto, Fired, Red-eye reduction, Return not detected' => 'Flash disparado, modo automático, retorno luz no detectado, modo reducción ojos rojos', 'Auto, Fired, Return detected' => 'Flash disparado, modo automático, retorno luz detectado', 'Auto, Fired, Return not detected' => 'Flash disparado, modo automático, retorno luz no detectado', 'Did not fire' => 'No se ha disparado el flash', 'Fired' => 'Flash disparado', 'Fired, Red-eye reduction' => 'Flash disparado, modo reducción ojos rojos', 'Fired, Red-eye reduction, Return detected' => 'Flash disparado, modo reducción ojos rojos, retorno luz detectado', 'Fired, Red-eye reduction, Return not detected' => 'Flash disparado, modo reducción ojos rojos, retorno luz no detectado', 'Fired, Return detected' => 'Luz devuelta en captador detectada', 'Fired, Return not detected' => 'Luz devuelta en captador no detectada', 'No Flash' => 'Flash no disparado', 'No flash function' => 'Sin función flash', 'Off' => 'Desactivado', 'Off, Did not fire' => 'Flash no disparado, modo flash forzado', 'Off, Did not fire, Return not detected' => 'Apagado, flash no disparado, retorno luz no detectado', 'Off, No flash function' => 'Apagado, sin función flash', 'Off, Red-eye reduction' => 'Apagado, modo reducción ojos rojos', 'On' => 'Activado', 'On, Did not fire' => 'Encendido, flash no disparado', 'On, Fired' => 'Flash disparado, modo flash forzardo', 'On, Red-eye reduction' => 'Flash disparado, modo flash forzado, modo reducción ojos rojos', 'On, Red-eye reduction, Return detected' => 'Flash disparado, modo flash forzado, modo reducción ojos rojos, retorno luz detectado', 'On, Red-eye reduction, Return not detected' => 'Flash disparado, modo flash forzado, modo reducción ojos rojos, retorno luz no detectado', 'On, Return detected' => 'Flash disparado, modo flash forzado, retorno luz detectado', 'On, Return not detected' => 'Flash disparado, modo flash forzado, retorno luz no detectado', }, }, 'FlashColorFilter' => { PrintConv => { 'None' => 'Ninguno', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'FlashCommanderMode' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'FlashControlMode' => { Description => 'Modo Control Flash', PrintConv => { 'Off' => 'Desactivado', 'Repeating Flash' => 'Flash Estroboscopico', }, }, 'FlashDevice' => { PrintConv => { 'None' => 'Ninguno', }, }, 'FlashEnergy' => 'Energía Flash', 'FlashExposureComp' => 'Compensación Exposición Flash', 'FlashExposureLock' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'FlashFired' => { PrintConv => { 'Yes' => 'Si', }, }, 'FlashFocalLength' => 'Longitud Flash Flash', 'FlashGroupAControlMode' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'FlashGroupBControlMode' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'FlashGroupCControlMode' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'FlashIntensity' => { Description => 'Intensidad Flash', PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', }, }, 'FlashLevel' => { PrintConv => { 'Low' => 'Bajo', }, }, 'FlashMeteringMode' => { PrintConv => { 'External Auto' => 'Externo Automatico', 'External Manual' => 'Externo Manual', 'Off' => 'Desactivado', }, }, 'FlashMode' => { Description => 'Modo Flash', PrintConv => { 'Auto' => 'Automático', 'Disabled' => 'Desactivado', 'Force' => 'Forzado', 'Off' => 'Apagado', 'On' => 'Encendido', 'Red eye' => 'Ojos rojos', }, }, 'FlashModel' => { Description => 'Modelo Flash', PrintConv => { 'None' => 'Ninguno', }, }, 'FlashOutput' => 'Flash Salida', 'FlashRemoteControl' => 'Control Remote Flash', 'FlashSerialNumber' => 'Número Serie Flash', 'FlashSource' => { PrintConv => { 'None' => 'Ninguno', }, }, 'FlashStatus' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'FlashType' => { Description => 'Tipo Flash', PrintConv => { 'None' => 'Ninguno', }, }, 'FlashWarning' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'FlashpixVersion' => 'Versión Flashpix Soportado', 'FlickerReduce' => { Description => 'Reducir Parpadeo', PrintConv => { 'Off' => 'Apagado', 'On' => 'Encendido', }, }, 'FlipHorizontal' => { PrintConv => { 'Yes' => 'Si', }, }, 'FocalLength' => 'Distancia Focal Objetivo', 'FocalLength35efl' => 'Longitud Focal (Conversión a 35 mm)', 'FocalLengthIn35mmFormat' => 'Distancia Focal en Película de 35 mm', 'FocalPlaneResolutionUnit' => { Description => 'Unidad Resolución Plano Focal', PrintConv => { 'None' => 'Ninguno', 'inches' => 'Pulgada', 'um' => 'µm (Micrometro)', }, }, 'FocalPlaneXResolution' => 'Resolución X Plano Focal', 'FocalPlaneYResolution' => 'Resolución Y Plano Focal', 'FocusContinuous' => { PrintConv => { 'Continuous' => 'Continuo', 'Single' => 'Sencillo', }, }, 'FocusMode' => { Description => 'Modo Enfoque', PrintConv => { 'Continuous' => 'Continuo', 'Manual Focus (3)' => 'Enfoque Manual (6)', 'Manual Focus (6)' => 'Enfoque Manual (6)', 'Single' => 'Simple', }, }, 'FocusRange' => { Description => 'Rango de Enfoque', PrintConv => { 'Close' => 'Próximo', 'Infinity' => 'Infinito', 'Not Known' => 'Desconocido', 'Very Close' => 'Muy Próximo', }, }, 'FocusSetting' => 'Ajuste Enfoque', 'FocusTrackingLockOn' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'ForwardMatrix1' => 'Matriz Avance 1', 'ForwardMatrix2' => 'Matriz Avance 2', 'FrameRate' => 'Velocidad del Fotograma', 'FrameSize' => 'Tamaño del Fotograma', 'FreeByteCounts' => 'Número Bytes Libres', 'FreeOffsets' => 'Offsets Libres', 'FuncButton' => { PrintConv => { 'None' => 'Ninguno', }, }, 'FuncButtonPlusDials' => { PrintConv => { 'None' => 'Ninguno', }, }, 'GEModel' => 'Modelo', 'GPSAltitude' => 'Altitud', 'GPSAltitudeRef' => { Description => 'Referencia Altitud', PrintConv => { 'Above Sea Level' => 'Nivel del Mar', 'Below Sea Level' => 'Referencia Nivel del Mar (valor negativo)', }, }, 'GPSAreaInformation' => 'Nombre de Zona GPS', 'GPSDOP' => 'Precisión Medición', 'GPSDateStamp' => 'Fecha GPS', 'GPSDestBearing' => 'Orientación de Destino', 'GPSDestBearingRef' => { Description => 'Referencia para Orientación de Destino', PrintConv => { 'Magnetic North' => 'Dirección magnética', 'True North' => 'Dirección real', }, }, 'GPSDestDistance' => 'Distancia a Destino', 'GPSDestDistanceRef' => { Description => 'Referencia para Distancia a Destino', PrintConv => { 'Kilometers' => 'Kilómetros', 'Miles' => 'Millas', 'Nautical Miles' => 'Nudos', }, }, 'GPSDestLatitude' => 'Latitud de Destino', 'GPSDestLatitudeRef' => { Description => 'Referencia para Latitud de Destino', PrintConv => { 'North' => 'Latitud norte', 'South' => 'Latitud sur', }, }, 'GPSDestLongitude' => 'Longitud de Destino', 'GPSDestLongitudeRef' => { Description => 'Referencia para Longitud de Destino', PrintConv => { 'East' => 'Longitud este', 'West' => 'Longitud oeste', }, }, 'GPSDifferential' => { Description => 'Corrección Diferencial GPS', PrintConv => { 'Differential Corrected' => 'Corrección diferencial aplicada', 'No Correction' => 'Medición sin corrección diferencial', }, }, 'GPSImgDirection' => 'Dirección de Imagen', 'GPSImgDirectionRef' => { Description => 'Referencia para Dirección de Imagen', PrintConv => { 'Magnetic North' => 'Dirección magnética', 'True North' => 'Dirección real', }, }, 'GPSInfo' => 'Puntero IFD de Información GPS', 'GPSLatitude' => 'Latitud', 'GPSLatitudeRef' => { Description => 'Latitud Norte o Sur', PrintConv => { 'North' => 'Latitud norte', 'South' => 'Latitud sur', }, }, 'GPSLongitude' => 'Longitud', 'GPSLongitudeRef' => { Description => 'Longitud Este u Oeste', PrintConv => { 'East' => 'Longitud Este', 'West' => 'Longitud Oeste', }, }, 'GPSMapDatum' => 'Dato Medición Geodésica Usado', 'GPSMeasureMode' => { Description => 'Modo Medición GPS', PrintConv => { '2-Dimensional Measurement' => 'Medición bidimensional', '3-Dimensional Measurement' => 'Medición tridimensional', }, }, 'GPSProcessingMethod' => 'Nombre del Método de Procesado GPS', 'GPSSatellites' => 'Satélites GPS Usados para Medida', 'GPSSpeed' => 'Velocidad del Receptor GPS', 'GPSSpeedRef' => { Description => 'Unidad Velocidad', PrintConv => { 'km/h' => 'Kilómetros por hora', 'knots' => 'Nudos', 'mph' => 'Millas por hora', }, }, 'GPSStatus' => { Description => 'Estado Receptor GPS', PrintConv => { 'Measurement Active' => 'Medición Activa', 'Measurement Void' => 'Medición Vacía', }, }, 'GPSTimeStamp' => 'Hora GPS (reloj atómico)', 'GPSTrack' => 'Dirección de Movimiento', 'GPSTrackRef' => { Description => 'Referencia de Dirección de Movimiento', PrintConv => { 'Magnetic North' => 'Dirección magnética', 'True North' => 'Dirección real', }, }, 'GPSVersionID' => 'Versión Etiqueta GPS', 'GainControl' => { Description => 'Control Ganancia', PrintConv => { 'High gain down' => 'Atenuación alta', 'High gain up' => 'Ganancia alta', 'Low gain down' => 'Atenuación baja', 'Low gain up' => 'Ganancia debil', 'None' => 'Ninguno', }, }, 'GammaCompensatedValue' => 'Valor Compensado Gamma', 'Gapless' => { PrintConv => { 'Yes' => 'Si', }, }, 'Genre' => { Description => 'Género', PrintConv => { 'None' => 'Ninguno', 'Other' => 'Otro', }, }, 'GenreID' => 'ID Género', 'GeoTiffAsciiParams' => 'Etiqueta Parámetros Ascii Geo', 'GeoTiffDirectory' => 'Etiqueta Directorio Clave Geo', 'GeoTiffDoubleParams' => 'Etiqueta Parámetros Doble Geo', 'Gradation' => 'Luminosidad', 'GrayResponseCurve' => 'Curva Respuesta Gris', 'GrayResponseUnit' => { Description => 'Unidad Respuesta Gris', PrintConv => { '0.0001' => 'Número representa la milésima de una unidad', '0.001' => 'Número representa la centésima de una unidad', '0.1' => 'Número representa la décima de una unidad', '1e-05' => 'Número representa la diezmilésima de una unidad', '1e-06' => 'Número representa la cienmilésima de una unidad', }, }, 'GrayTRC' => 'Columna Matriz Gris', 'GreenMatrixColumn' => 'Columna Matriz Verde', 'GreenTRC' => 'Curva Reproducción Tono Verde', 'GridDisplay' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'HCUsage' => 'Uso HC', 'HDR' => { Description => 'Auto HDR', PrintConv => { 'Off' => 'Desactivado', }, }, 'HDRSmoothing' => { PrintConv => { 'Low' => 'Bajo', 'Off' => 'Desactivado', }, }, 'HalftoneHints' => 'Indicación Medio Tono', 'HasAttachedImages' => 'Tiene Imagenes Adjuntas', 'HasAudio' => 'Tiene Audio', 'HasImage' => 'Tiene Imagen', 'HasScript' => 'Tiene Script', 'HasVideo' => 'Tiene Video', 'Headline' => 'Titular', 'HeightResolution' => 'Resolución Imagen Vertical', 'HighISONoiseReduction' => { Description => 'Reducción Ruido ISO Alta', PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'Off' => 'Desactivado', 'On' => 'Activado', 'Standard' => 'Estándar', 'Strong' => 'Fuerte', }, }, 'HighISONoiseReduction2' => { PrintConv => { 'Low' => 'Bajo', }, }, 'Highlight' => 'Realce', 'HighlightColorDistortReduct' => { PrintConv => { 'Standard' => 'Estándar', }, }, 'HighlightTonePriority' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'HometownDST' => { PrintConv => { 'Yes' => 'Si', }, }, 'HostComputer' => 'Ordenador Principal', 'Hue' => { Description => 'Tono', PrintConv => { 'None' => 'Ninguno', }, }, 'HyperfocalDistance' => 'Distancia Hiperfocal', 'ICCProfile' => 'Perfil ICC', 'ICC_Profile' => 'Perfil Color Entrada ICC', 'IDCCreativeStyle' => { PrintConv => { 'Landscape' => 'Retrato', 'Neutral' => 'Neutro', 'Standard' => 'Estándar', 'Vivid' => 'Vívido', }, }, 'IPTC-NAA' => 'Metadato IPTC-NAA', 'IPTCBitsPerSample' => 'Número de Bits por Muestra', 'IPTCImageHeight' => 'Número de Líneas', 'IPTCImageRotation' => { Description => 'Rotación Imagen', PrintConv => { '0' => 'Sin rotación', '180' => 'Rotación 180 grados', '270' => 'Rotación 270 grados', '90' => 'Rotación 90 grados', }, }, 'IPTCImageWidth' => 'Pixels por Línea', 'IPTCPictureNumber' => 'Número Imagen', 'IPTCPixelHeight' => 'Tamaño Pixel Perpendicular a Dirección Escaneo', 'IPTCPixelWidth' => 'Tamaño Pixel en Dirección Escaneo', 'ISO' => 'Ratio Velocidad ISO', 'ISOAutoParameters' => { PrintConv => { 'Fast' => 'Rápido', 'Standard' => 'Estándar', }, }, 'ISOExpansion' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'ISOExpansion2' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'ISOSetting' => 'Ajuste ISO', 'ISOSpeedExpansion' => { PrintConv => { 'Yes' => 'Si', }, }, 'IT8Header' => 'Cabecera IT8', 'Illumination' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'Image::ExifTool::AIFF::Comment' => 'Comentario AIFF', 'ImageAuthentication' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'ImageByteCount' => 'Número Byte Imagen', 'ImageColor' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'ImageColorIndicator' => 'Indicador Color Imagen', 'ImageColorValue' => 'Valor Color Imagen', 'ImageDataDiscard' => { Description => 'Datos Imagen Descartado', PrintConv => { 'Flexbits Discarded' => 'FlexBits Descartados', 'Full Resolution' => 'Resolución Total', 'HighPass Frequency Data Discarded' => 'Datos Frecuencia High-Pass Descartados', 'Highpass and LowPass Frequency Data Discarded' => 'Dato Frecuencia High-Pass y Low-Pass Descartados', }, }, 'ImageDepth' => 'Ancho Imagen', 'ImageDescription' => 'Título Imagen', 'ImageDustOff' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'ImageEditing' => { PrintConv => { 'None' => 'Ninguno', }, }, 'ImageFileFormatAsDelivered' => { PrintConv => { 'Other' => 'Otro', }, }, 'ImageHeight' => 'Alto Imagen', 'ImageHistory' => 'Historia Imagen', 'ImageID' => 'ID Imagen', 'ImageInfo' => 'Info Imagen', 'ImageLayer' => 'Capa Imagen', 'ImageLength' => 'Longitud Imagen', 'ImageNumber' => 'Número Imagen', 'ImageOffset' => 'Offset Imagen', 'ImageOrientation' => { Description => 'Orientación Imagen', PrintConv => { 'Landscape' => 'Paisaje', 'Portrait' => 'Retrato', 'Square' => 'Cuadro', }, }, 'ImageQuality' => { PrintConv => { 'High' => 'Alto', 'Standard' => 'Estándar', }, }, 'ImageResourceBlocks' => 'Bloques Recursos Imagen', 'ImageReview' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'ImageRotated' => { PrintConv => { 'Yes' => 'Si', }, }, 'ImageRotation' => { PrintConv => { 'None' => 'Ninguno', }, }, 'ImageSize' => 'Tamaño de la Imagen', 'ImageSourceData' => 'Datos Fuente Imagen', 'ImageStabilization' => { Description => 'Estabilización Imagen', PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'ImageStabilizationSetting' => 'Ajustes Estabilización Imagen', 'ImageStyle' => { PrintConv => { 'Landscape' => 'Paisaje', 'Neutral' => 'Neutro', 'Portrait' => 'Retrato', 'Standard' => 'Estándar', 'Vivid' => 'Vívido', }, }, 'ImageTone' => { PrintConv => { 'Landscape' => 'Paisaje', 'Monochrome' => 'Monocromo', 'Portrait' => 'Retrato', }, }, 'ImageType' => { Description => 'Tipo Imagen', PrintConv => { 'Other' => 'Otro', }, }, 'ImageUniqueID' => 'ID Único Imagen', 'ImageWidth' => 'Ancho Imagen', 'Index' => 'Ãndice', 'Indexed' => 'Indizado', 'IngredientsMaskMarkers' => { PrintConv => { 'All' => 'Todo', 'None' => 'Ninguno', }, }, 'InitialKey' => 'Clave inicial', 'InkNames' => 'Nombres Tinta', 'InkSet' => 'Conjunto Tinta', 'Instructions' => 'Instrucciones', 'IntellectualGenre' => 'Género Intelectual', 'IntelligentContrast' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', 'n/a' => 'No Aplica', }, }, 'IntelligentD-Range' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'Standard' => 'Estándar', }, }, 'IntelligentExposure' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'Standard' => 'Estándar', }, }, 'IntelligentResolution' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'Standard' => 'Estándar', }, }, 'IntensityStereo' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'InterchangeColorSpace' => { PrintConv => { 'CMY (K) Device Dependent' => 'Dispositivo dependiente CMY(K)', 'RGB Device Dependent' => 'Dispositivo dependiente RGB', }, }, 'IntergraphMatrix' => 'Etiqueta Matriz Intergráfica', 'Interlace' => 'Entrelazado', 'InternalFlash' => 'Flash Interno', 'InternalFlashAE1' => 'Flash Interno AE1', 'InternalFlashAE1_0' => 'Flash Interno', 'InternalFlashAE2' => 'Flash Interno AE2', 'InternalFlashAE2_0' => 'Flash Interno AE2', 'InternalFlashMode' => { Description => 'Modo Flash Interno', PrintConv => { 'Fired' => 'Activado', }, }, 'InternalFlashTable' => 'Tabla Flash Interno', 'InternalSerialNumber' => 'Número Serie Interno', 'InteropIndex' => { Description => 'Identificación Interoperabilidad', PrintConv => { 'R03 - DCF option file (Adobe RGB)' => 'R03: Archivo opción DCF (Adobe RGB)', 'R98 - DCF basic file (sRGB)' => 'R98: Archivo básico DCF (sRGB)', 'THM - DCF thumbnail file' => 'THM: Archivo miniatura DCF', }, }, 'InteropOffset' => 'Etiqueta de Interoperabilidad', 'InteropVersion' => 'Versión Interoperabilidad', 'Is_Protected' => 'Está protegido', 'Is_Trusted' => 'Es de confianza', 'JFIFVersion' => 'Versión JFIF', 'JPEGACTables' => 'Tablas AC JPEG', 'JPEGDCTables' => 'Tablas DC JPEG', 'JPEGLosslessPredictors' => 'Predictores Sin Perdidas JPEG', 'JPEGPointTransforms' => 'Tranformadores Puntos JPEG', 'JPEGProc' => 'Proc JPEG', 'JPEGQTables' => 'Tablas Q JPEG', 'JPEGQuality' => { Description => 'Calidad', PrintConv => { 'Extra Fine' => 'Extrafina', 'Fine' => 'Fina', 'Standard' => 'Calidad estándar', }, }, 'JPEGRestartInterval' => 'Intervalo Reinicio JPEG', 'JPEGTables' => 'Tablas JPEG', 'JobID' => 'ID del Trabajo', 'JobTitle' => 'Cargo', 'Keyword' => 'Palabras Clave', 'Keywords' => 'Clave', 'LCDIllumination' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'LCDIlluminationDuringBulb' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'LCHEditor' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'Language' => 'Idioma', 'LanguageCode' => { PrintConv => { 'Neutral' => 'Neutro', }, }, 'LanguageIdentifier' => 'Identificador Idioma', 'LanguageList' => 'Lista de Idiomas', 'LeafData' => 'Datos Hoja', 'Lens' => 'Objetivo', 'LensApertureRange' => 'Intervalo Apertura Objetivo', 'LensFirmwareVersion' => 'Versión Firmware Objetivo', 'LensID' => 'ID Objetivo', 'LensIDNumber' => 'Número ID Objetivo', 'LensInfo' => 'Información del Objetivo', 'LensModel' => 'Modelo Objetivo', 'LensProperties' => 'Propiedades Objetivo', 'LensSerialNumber' => 'Número Serie Objetivo', 'LensType' => { Description => 'Tipo Objetivo', PrintConv => { 'None' => 'Ninguno', }, }, 'LightSource' => { Description => 'Fuente Luz', PrintConv => { 'Cloudy' => 'Tiempo Nublado', 'Cool White Fluorescent' => 'Fluorescente blanco cálido (W 3800 - 4500K)', 'Day White Fluorescent' => 'Fluorescente blanco día (N 4600 - 5500K)', 'Daylight' => 'Luz del día', 'Daylight Fluorescent' => 'Fluorescente luz de día (D 5700 - 7100K)', 'Fine Weather' => 'Buen tiempo', 'Fluorescent' => 'Fluorescente', 'ISO Studio Tungsten' => 'Tungsteno estudio ISO', 'Other' => 'Otras Fuentes Luz', 'Shade' => 'Sombrío', 'Standard Light A' => 'Luz Estándar A', 'Standard Light B' => 'Luz Estándar B', 'Standard Light C' => 'Luz Estándar C', 'Tungsten (Incandescent)' => 'Tungsteno (luz incandescente)', 'Unknown' => 'Desconocido', 'Warm White Fluorescent' => 'Fluorescente blanco cálido (L 2600 - 3250K)', 'White Fluorescent' => 'Fluorescente blanco (WW 3250 - 3800K)', }, }, 'LightSourceSpecial' => { Description => 'Fuente Luz Especial', PrintConv => { 'Off' => 'Apagado', 'On' => 'Encendido', }, }, 'Lightness' => 'Luminosidad', 'LinearResponseLimit' => 'Límite Respuesta Lineal', 'LinearizationTable' => 'Tabla Linearización', 'Lit' => { PrintConv => { 'Yes' => 'Si', }, }, 'LiveViewShooting' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'LocalizedCameraModel' => 'Modelo Cámara Traducido', 'Location' => 'Localización', 'LongExposureNoiseReduction' => { Description => 'RR Exp.Larga', PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'LookupTable' => 'Tabla de Consulta', 'Luminance' => 'Luminancia', 'LuminanceNoiseReduction' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'Off' => 'Desactivado', }, }, 'Lyrics' => 'Letras', 'Lyrics_Synchronised' => 'Letras Sincronizadas', 'MSStereo' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'Macro' => { PrintConv => { 'Off' => 'Apagado', 'On' => 'Encendido', 'View' => 'Vista', }, }, 'MacroMode' => 'Modo Macro', 'MainDialExposureComp' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'Make' => 'Marca', 'MakeAndModel' => 'Marca y Modelo', 'MakerNote' => 'Dato Privado DNG', 'MakerNoteOffset' => 'Offset Maker Note', 'MakerNoteSafety' => { Description => 'Seguridad Maker Note', PrintConv => { 'Safe' => 'Seguro', 'Unsafe' => 'No Seguro', }, }, 'MakerNoteType' => 'Tipo Maker Note', 'MakerNoteVersion' => 'Versión nota Fabricante', 'MakerNotes' => 'Notas del Fabricante', 'ManagedFromMaskMarkers' => { PrintConv => { 'All' => 'Todo', 'None' => 'Ninguno', }, }, 'ManifestReferenceMaskMarkers' => { PrintConv => { 'All' => 'Todo', 'None' => 'Ninguno', }, }, 'ManometerPressure' => 'Presión Manometrica', 'ManometerReading' => 'Lectura Manometrica', 'ManualFlashOutput' => { PrintConv => { 'Full' => 'Completo', 'Low' => 'Bajo', 'Medium' => 'Medio', 'n/a' => 'No Aplica', }, }, 'ManualFocusDistance' => 'Distancia Enfoque Manual', 'Marker' => 'Marcador', 'MaskedAreas' => 'Ãrea Oculta', 'MasterDocumentID' => 'ID de Documento Maestro', 'Matteing' => 'Mate', 'MaxAperture' => 'Máxima Apertura del Objetivo', 'MaxApertureAtMaxFocal' => 'Apertura máxima a focal máxima', 'MaxApertureAtMinFocal' => 'Apertura máxima a focal mínima', 'MaxApertureValue' => 'Apertura Lente Máxima', 'MaxFaces' => 'Máximo caras', 'MaxFocalLength' => 'Longitud focal máxima', 'MaxPacketSize' => 'Tamaño Máximo Paquete', 'MaxSampleValue' => 'Valor Muestra Max', 'MaximumDensityRange' => 'Rango Densidad Maxima', 'Measurement' => 'Observador de Medida', 'MeasurementBacking' => 'Apoyo de Medida', 'MeasurementFlare' => 'Llama de Medida', 'MeasurementGeometry' => { Description => 'Geometría de Medida', PrintConv => { '0/45 or 45/0' => '0/45 o 45/0', '0/d or d/0' => '0/d o d/0', }, }, 'MeasurementIlluminant' => 'Iluminación de Medida', 'MeasurementObserver' => 'Observador de Medida', 'MediaBlackPoint' => 'Punto Negro Medio', 'MediaWhitePoint' => 'Punto Blanco Medio', 'MeteringMode' => { Description => 'Modo Medición', PrintConv => { 'Average' => 'Promedio', 'Center-weighted average' => 'Media ponderada al centro', 'Multi-segment' => 'Multi-segmento', 'Multi-spot' => 'Multi-puntual', 'Other' => 'Otro', 'Partial' => 'Parcial', 'Spot' => 'Puntual', 'Unknown' => 'Desconocido', }, }, 'MinAperture' => 'Apertura mínima', 'MinFocalLength' => 'Longitud focal mínima', 'MinPacketSize' => 'Tamaño Mínimo Paquete', 'MinSampleValue' => 'Valor Muestra Min', 'MinoltaQuality' => { PrintConv => { 'Standard' => 'Estándar', }, }, 'ModeDialPosition' => { PrintConv => { 'Panorama' => 'Panoramica', }, }, 'Model' => 'Modelo', 'Model2' => 'Modelo Equipamiento Entrada Imagen (2)', 'ModelReleaseStatus' => { PrintConv => { 'None' => 'Ninguno', }, }, 'ModelTiePoint' => 'Etiqueta Modelo Punto Lazo', 'ModelTransform' => 'Etiqueta Modelo Transformación', 'ModelingFlash' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'ModifiedBy' => 'Modificado por', 'ModifiedPictureStyle' => { PrintConv => { 'High Saturation' => 'Saturación Alta', 'Landscape' => 'Paisaje', 'Low Saturation' => 'Saturación Baja', 'Monochrome' => 'Monocromo', 'Neutral' => 'Neutro', 'None' => 'Ninguno', 'Portrait' => 'Retrato', 'Standard' => 'Estándar', }, }, 'ModifiedSharpnessFreq' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'Standard' => 'Estándar', }, }, 'ModifiedToneCurve' => { PrintConv => { 'Standard' => 'Estándar', }, }, 'ModifiedWhiteBalance' => { PrintConv => { 'Underwater' => 'Subacuatica', }, }, 'ModifyDate' => 'Fecha y Hora de Cambio del Archivo', 'MoireFilter' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'MonochromeFilterEffect' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Ninguno', 'Orange' => 'Naranja', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'MonochromeLinear' => { PrintConv => { 'Yes' => 'Si', }, }, 'MonochromeToning' => { PrintConv => { 'None' => 'Ninguno', }, }, 'MonochromeToningEffect' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Ninguno', }, }, 'MultiExposureAutoGain' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'MultiExposureMode' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'MultiFrameNoiseReduction' => { Description => 'Reduc. ruido varios fotogr.', PrintConv => { 'None' => 'Ninguno', 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'MultipleExposureMode' => 'Modo Exposición Múltiple', 'MultipleExposureSet' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'Mute' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'MyColorMode' => { PrintConv => { 'Neutral' => 'Neutro', 'Off' => 'Desactivado', 'Vivid' => 'Vívido', }, }, 'NDFilter' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'NSC_Description' => 'Descripción NSC', 'Name' => 'Nombre', 'NamedColor2' => 'Color Llamado 2', 'NativeDisplayInfo' => 'Información Pantalla Nativa', 'NewsPhotoVersion' => 'Versión Registro Foto Noticias', 'Noise' => 'Ruido', 'NoiseFilter' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'Off' => 'Desactivado', 'Standard' => 'Estándar', }, }, 'NoiseReduction' => { Description => 'Reducción Ruido', PrintConv => { 'Low' => 'Bajo', 'Off' => 'Desactivado', 'Standard' => 'Estándar', }, }, 'NoiseReductionApplied' => 'Reducción Ruido Aplicada', 'NominalMaxAperture' => 'Apertura máxima nominal', 'NominalMinAperture' => 'Apertura mínima nominal', 'NumAFPoints' => 'Número de Puntos AF', 'NumChannels' => 'Número Canales', 'NumColors' => 'Número de colores', 'NumImportantColors' => 'Número Colores Importantes', 'NumIndexEntries' => 'Número de Entradas de Ãndice', 'NumSampleFrames' => 'Número de fotogramas', 'NumberOfFrames' => 'Número de imágenes', 'NumberofInks' => 'Número de Tintas', 'OPIProxy' => 'Proxy OPI', 'ObjectAttributeReference' => 'Género Intelectual', 'ObjectCycle' => { Description => 'Ciclo Objecto', PrintConv => { 'Both Morning and Evening' => 'Ambos', 'Evening' => 'Tarde', 'Morning' => 'Mañana', }, }, 'ObjectFileType' => { PrintConv => { 'None' => 'Ninguno', 'Unknown' => 'Desconocido', }, }, 'ObjectName' => 'Título', 'ObjectPreviewData' => 'Datos Previos del Objecto', 'ObjectPreviewFileFormat' => 'Formato Archivo Previo de Objecto', 'ObjectPreviewFileVersion' => 'Versión Formato Archivo Previo del Objecto', 'ObjectTypeReference' => 'Referencia Tipo Objeto', 'OffsetSchema' => 'Offset Esquema', 'OperatingSystem' => { Description => 'Sistema Operativo', PrintConv => { 'unknown' => 'desconocido', }, }, 'OpticalZoomMode' => { PrintConv => { 'Standard' => 'Estándar', }, }, 'OpticalZoomOn' => { Description => 'Zoom Óptico Encendido', PrintConv => { 'Off' => 'Apagado', 'On' => 'Encendido', }, }, 'Opto-ElectricConvFactor' => 'Factor Conversión Optoeléctrico', 'Orientation' => { Description => 'Orientación de Imagen', PrintConv => { 'Horizontal (normal)' => '0° (arriba/izquierda)', 'Mirror horizontal' => 'Invertir horizontal', 'Mirror horizontal and rotate 270 CW' => 'Invertir horizontal y rotar 270° sentido reloj', 'Mirror horizontal and rotate 90 CW' => 'Invertir horizontal y rotar 90° sentido reloj', 'Mirror vertical' => 'Invertir vertical', 'Rotate 180' => 'Girado 180°', 'Rotate 270 CW' => 'Girado 270° sentido reloj', 'Rotate 90 CW' => 'Girado 90° sentido reloj', }, }, 'OriginPlatform' => { PrintConv => { 'Other' => 'Otro', }, }, 'OriginalAlbumTitle' => 'Título Original Album', 'OriginalArtist' => 'Artista original', 'OriginalFileName' => 'Nombre archivo original', 'OriginalLyricist' => 'Letrista Original', 'OriginalRawFileData' => 'Dato Archivo Raw Original', 'OriginalRawFileDigest' => 'Cifrado Archivo Raw Original', 'OriginalRawFileName' => 'Nombre Archivo Raw Original', 'OriginalReleaseYear' => 'Año Versión Original', 'OriginalTransmissionReference' => 'Identificador de Trabajo', 'OriginatingProgram' => 'Programa Originario', 'OutputResponse' => 'Respuesta Salida', 'Owner' => 'Propietario', 'OwnerID' => 'ID del Propietario', 'OwnerName' => 'Nombre del Propietario', 'PF25ColorMatrix' => 'Matriz de Color PF25', 'PackingMethod' => { PrintConv => { 'Best Compression' => 'Mejor Compresión', 'Fast' => 'Rápido', 'Fastest' => 'Mas Rápido', 'Good Compression' => 'Buena Compresión', 'Stored' => 'Almacenado', }, }, 'Padding' => 'Margen Inferior', 'PageName' => 'Nombre Página', 'PageNumber' => 'Número Página', 'PanoramaSize3D' => { PrintConv => { 'Standard' => 'Estándar', }, }, 'Period' => 'Período', 'PhotoEffect' => { PrintConv => { 'B&W' => 'Blanco y Negro', 'Custom' => 'Personalizado', 'Neutral' => 'Neutro', 'Off' => 'Desactivado', 'Vivid' => 'Vívido', }, }, 'PhotoEffects' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'PhotoEffectsType' => { PrintConv => { 'None' => 'Ninguno', }, }, 'PhotometricInterpretation' => { Description => 'Interpretación Fotométrica', PrintConv => { 'BlackIsZero' => 'Negro es cero', 'Color Filter Array' => 'CFA (Matriz Filtro Color)', 'Pixar LogL' => 'CIE Log2(L) (Log luminancia)', 'Pixar LogLuv' => 'CIE Log2(L)(u\',v\') (Log luminancia y crominancia)', 'RGB Palette' => 'Paleta Color', 'Transparency Mask' => 'Máscara de transparencia', 'WhiteIsZero' => 'Blanco es cero', }, }, 'PhotoshopAnnotations' => 'Anotaciones Photoshop', 'PhotoshopFormat' => { PrintConv => { 'Standard' => 'Estándar', }, }, 'PictInfo' => 'Info Imagen', 'Picture' => 'Imágen', 'PictureControl' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'PictureControlActive' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'PictureDescription' => 'Descripción Imágen', 'PictureFinish' => { PrintConv => { 'Monochrome' => 'Monocromo', 'Portrait' => 'Retrato', }, }, 'PictureMode' => { PrintConv => { 'Beach' => 'Playa', 'Fireworks' => 'Fuegos Artificiales', 'Food' => 'Comida', 'Green' => 'Verde', 'Landscape' => 'Paisaje', 'Panorama' => 'Panoramica', 'Portrait' => 'Retrato', 'Red' => 'Rojo', 'Snow' => 'Nieve', 'Soft' => 'Suave', 'Standard' => 'Estándar', 'Underwater' => 'Subacuatica', 'Vivid' => 'Vívido', 'Yellow' => 'Amarillo', }, }, 'PictureModeBWFilter' => { PrintConv => { 'Green' => 'Verde', 'Neutral' => 'Neutro', 'Orange' => 'Naranja', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'PictureModeEffect' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'Standard' => 'Estándar', }, }, 'PictureModeTone' => { PrintConv => { 'Green' => 'Verde', 'Neutral' => 'Neutro', }, }, 'PictureStyle' => { PrintConv => { 'Faithful' => 'Fiel', 'High Saturation' => 'Saturación Alta', 'Landscape' => 'Paisaje', 'Low Saturation' => 'Saturación Baja', 'Monochrome' => 'Monocromo', 'Neutral' => 'Neutro', 'None' => 'Ninguno', 'Portrait' => 'Retrato', 'Standard' => 'Estándar', }, }, 'PictureType' => { Description => 'Tipo Imágen', PrintConv => { '32x32 PNG Icon' => 'Icono PNG 32x32', 'Artist' => 'Artista', 'Back Cover' => 'Cubierta Posterior', 'Composer' => 'Compositor', 'Conductor' => 'Director', 'Front Cover' => 'Cubierta Frontal', 'Illustration' => 'Ilustración', 'Lyricist' => 'Letrista', 'Media' => 'Soporte', 'Other' => 'Otro', 'Other Icon' => 'Otro Icono', 'Performance' => 'Interpretación', 'Recording Session' => 'Sesión Grabación', }, }, 'PictureWizardMode' => { PrintConv => { 'Cool' => 'Frío', 'Landscape' => 'Paisaje', 'Portrait' => 'Retrato', 'Standard' => 'Estándar', 'Vivid' => 'Vívido', }, }, 'PixelFormat' => 'Formato Pixel', 'PixelIntensityRange' => 'Intervalo Intensidad Pixel', 'PixelScale' => 'Etiqueta Escala Pixel Modelo', 'PlanarConfiguration' => { Description => 'Ajuste Datos Imagen', PrintConv => { 'Chunky' => 'Formato \'Chunky\' (Entrelazado)', 'Planar' => 'Formato \'Planar\'', }, }, 'Predictor' => { PrintConv => { 'Horizontal differencing' => 'Diferenciación Horizontal', 'None' => 'No se usa esquema de predicción antes de codificar', }, }, 'Preview0' => 'Previa 0', 'Preview1' => 'Previa 1', 'Preview2' => 'Previa 2', 'PreviewApplicationName' => 'Nombre Aplicación Previa', 'PreviewApplicationVersion' => 'Versión Aplicación Previa', 'PreviewButton' => { PrintConv => { 'None' => 'Ninguno', }, }, 'PreviewButtonPlusDials' => { PrintConv => { 'None' => 'Ninguno', }, }, 'PreviewColorSpace' => { Description => 'Espacio Color Previa', PrintConv => { 'Unknown' => 'Desconocido', }, }, 'PreviewDateTime' => 'Fecha y Hora Previa', 'PreviewImage' => 'Vista Previa', 'PreviewImageLength' => 'Longitud Imagen Previa', 'PreviewImageSize' => 'Tamaño Imagen Previa', 'PreviewImageStart' => 'Inicio Imagen Previa', 'PreviewImageValid' => { PrintConv => { 'Yes' => 'Si', }, }, 'PreviewSettingsDigest' => 'Cifrado Configuración Previa', 'PreviewSettingsName' => 'Nombre Configuración Previa', 'PrimaryAFPoint' => 'Punto AF primario', 'PrimaryChromaticities' => 'Cromaticidades de Colores Primarios', 'PrimaryPlatform' => 'Plataforma Primaria', 'ProcessingSoftware' => 'Tratamiendo de Software', 'Producer' => 'Productor', 'ProductID' => 'ID Producto', 'ProfileCMMType' => 'Tipo Perfil CMM', 'ProfileCalibrationSig' => 'Firma Perfil Calibración', 'ProfileClass' => { Description => 'Clase Perfil', PrintConv => { 'Abstract Profile' => 'Perfil Abstracto', 'ColorSpace Conversion Profile' => 'Perfil Conversión Espacio Color', 'DeviceLink Profile' => 'Perfil Dispositivo Conexión', 'Display Device Profile' => 'Perfil Dispositivo Pantalla', 'Input Device Profile' => 'Perfil Dispositivo Entrada', 'NamedColor Profile' => 'Perfil Color Nombrado', 'Nikon Input Device Profile (NON-STANDARD!)' => 'Perfil Nikon ("nkpf")', 'Output Device Profile' => 'Perfil Dispositivo Salida', }, }, 'ProfileConnectionSpace' => 'Espacio Conexión Perfil', 'ProfileCopyright' => 'Copyright', 'ProfileCreator' => 'Creador Perfil', 'ProfileDateTime' => 'Fecha y Hora Perfil', 'ProfileDescription' => 'Descripción Perfil', 'ProfileDescriptionML' => 'Descripción Perfil ML', 'ProfileEmbedPolicy' => { Description => 'Perfil Política Incrustada', PrintConv => { 'Allow Copying' => 'Permitir copia', 'Embed if Used' => 'Incrustar si se usa', 'Never Embed' => 'Incrustado nunca', 'No Restrictions' => 'Sin restricciones', }, }, 'ProfileFileSignature' => 'Firma Archivo Perfil', 'ProfileHueSatMapData1' => 'Perfil Matiz Sat. Mapa Dato 1', 'ProfileHueSatMapData2' => 'Perfil Matiz Sat. Mapa Dato 2', 'ProfileHueSatMapDims' => 'Divisiones Matiz', 'ProfileID' => 'ID Perfil', 'ProfileLookTableData' => 'Perfil Datos Tabla Consulta', 'ProfileLookTableDims' => 'Divisiones Matiz', 'ProfileName' => 'Nombre Perfil', 'ProfileSequenceDesc' => 'Descripción Secuencia Perfil', 'ProfileToneCurve' => 'Perfil Curva Tono', 'ProfileVersion' => 'Versión Perfil', 'ProgramMode' => { PrintConv => { 'None' => 'Ninguno', 'Portrait' => 'Retrato', }, }, 'ProgramVersion' => 'Versión Programa', 'Projects' => 'Proyectos', 'PromotionURL' => 'URL Promocional', 'PropertyReleaseStatus' => { PrintConv => { 'None' => 'Ninguno', }, }, 'Protect' => 'Protección', 'ProtectionType' => 'Tipo Protección', 'Provider' => 'Proveedor', 'ProviderCopyright' => 'Copyright Proveedor', 'Province-State' => 'Provincia/Estado', 'Publisher' => 'Editor', 'Quality' => { Description => 'Calidad', PrintConv => { 'Compressed RAW' => 'cRAW', 'Compressed RAW + JPEG' => 'cRAW+JPEG', 'Extra Fine' => 'Extrafina', 'Fine' => 'Fina', 'High' => 'Alto', 'Low' => 'Bajo', 'Normal' => 'Calidad estándar', 'RAW + JPEG' => 'RAW+JPEG', 'Standard' => 'Estándar', 'n/a' => 'no aplica', }, }, 'QuantizationMethod' => { Description => 'Método Cuantización', PrintConv => { 'AP Domestic Analogue' => 'AP Doméstico Análogo', 'Color Space Specific' => 'Espacio Color Específico', 'Compression Method Specific' => 'Método Compresión Específico', 'Gamma Compensated' => 'Gamma Compensada', 'IPTC Ref B' => 'IPTC ref "B"', 'Linear Density' => 'Densidad lineal', 'Linear Dot Percent' => 'Porcentaje Punto lineal', 'Linear Reflectance/Transmittance' => 'Reflectancia/transmitancia lineal', }, }, 'QuickShot' => { Description => 'Disparo Rápido', PrintConv => { 'Off' => 'Apagado', 'On' => 'Encendido', }, }, 'RadioStationName' => 'Nombre Emisora Radio', 'RadioStationOwner' => 'Propietario Emisora Radio', 'RasterPadding' => 'Relleno Trama', 'RasterizedCaption' => 'Título Rasterizado', 'Rating' => { Description => 'Clasificación', PrintConv => { 'none' => 'Ninguno', }, }, 'RatingPercent' => 'Valoración en Porcentaje', 'RawCustomSaturation' => 'Raw Saturación personalizada', 'RawDataUniqueID' => 'ID Único Dato Raw', 'RawDevAutoGradation' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'RawDevNoiseReduction' => { PrintConv => { 'Noise Filter' => 'Filtro ruido', 'Noise Filter (ISO Boost)' => 'Filtro ruido (ISO Boost)', 'Noise Reduction' => 'Reducción ruido', }, }, 'RawDevPMPictureTone' => { PrintConv => { 'Green' => 'Verde', 'Neutral' => 'Neutro', }, }, 'RawDevPM_BWFilter' => { PrintConv => { 'Green' => 'Verde', 'Neutral' => 'Neutro', 'Orange' => 'Naranja', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'RawDevPictureMode' => { PrintConv => { 'Vivid' => 'Vívido', }, }, 'RawDevSettings' => { PrintConv => { 'Noise Reduction' => 'Reducción ruido', }, }, 'RawImageDigest' => 'Cifrado Imagen RAW', 'RawJpgSize' => { PrintConv => { 'Medium' => 'Medio', 'Medium 1' => 'Medio 1 ', 'Medium 2' => 'Medio 2', 'Medium 3' => 'Medio 3', 'Postcard' => 'Tarjeta Postal', 'Small 1' => 'Pequeño 1', 'Small 2' => 'Pequeño 21', 'Small 3' => 'Pequeño 3', }, }, 'RecordMode' => 'Modo de Grabación', 'RecordShutterRelease' => { Description => 'Soltar Obturador Grabación', PrintConv => { 'Press start, press stop' => 'Pulsa para iniciar, pulsa para parar', 'Record while down' => 'Grabar mientras se pulsa', }, }, 'RecordedTrackNumber' => 'Número Pista grabada', 'RecordingMode' => { PrintConv => { 'Panorama' => 'Panoramica', 'Portrait' => 'Retrato', }, }, 'RedEyeCorrection' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'RedEyeReduction' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'RedMatrixColumn' => 'Columna Matriz Rojo', 'RedTRC' => 'Curva Reproducción Tono Rojo', 'ReductionMatrix1' => 'Matriz Reducción 1', 'ReductionMatrix2' => 'Matriz Reducción 2', 'ReferenceBlackWhite' => 'Par de Valores de Referencia Blanco y Negro', 'ReferenceDate' => 'Fecha Referencia', 'ReferenceNumber' => 'Número Referencia', 'ReferenceService' => 'Servicio Referencia', 'RelatedImageFileFormat' => 'Formato Archivo Imagen Relacionado', 'RelatedImageHeight' => 'Alto Imagen Relacionada', 'RelatedImageWidth' => 'Ancho Imagen Relacionada', 'RelatedSoundFile' => 'Archivo Audio Relacionado', 'ReleaseButtonToUseDial' => { PrintConv => { 'Yes' => 'Si', }, }, 'ReleaseDate' => 'Fecha Lanzamiento', 'ReleaseTime' => 'Hora Lanzamiento', 'RenderingIntent' => { Description => 'Intento Interpretación', PrintConv => { 'ICC-Absolute Colorimetric' => 'Colorimétrica Absoluta', 'Media-Relative Colorimetric' => 'Colorimétrica Relativa', 'Saturation' => 'Saturación', }, }, 'RenditionOfMaskMarkers' => { PrintConv => { 'All' => 'Todo', 'None' => 'Ninguno', }, }, 'ResampleParamsQuality' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', }, }, 'Resaved' => { Description => 'Regrabado', PrintConv => { 'Yes' => 'Si', }, }, 'Reserved1' => 'Reservado 1', 'Resolution' => 'Resolución', 'ResolutionMode' => 'Modo Resolución', 'ResolutionUnit' => { Description => 'Unidad de Resolución de X e Y', PrintConv => { 'None' => 'Ninguno', 'cm' => 'Píxeles/cm', 'inches' => 'Pulgada', }, }, 'RetouchHistory' => { PrintConv => { 'None' => 'Ninguno', }, }, 'RevisionNumber' => 'Número Revisión', 'Rotation' => { Description => 'Rotación', PrintConv => { 'Rotate 180' => 'Girado 180°', 'Rotate 270 CW' => 'Girado 270° sentido reloj', 'Rotate 90 CW' => 'Girado 90° sentido reloj', 'Rotated 180' => 'Girado 180°', 'Rotated 270 CW' => 'Girado 270° sentido reloj', 'Rotated 90 CW' => 'Girado 90° sentido reloj', }, }, 'RowInterleaveFactor' => 'Factor Interpolar Fila', 'RowsPerStrip' => 'Número de Filas por Tira', 'SMaxSampleValue' => 'Valor Muestra Max S', 'SMinSampleValue' => 'Valor Muestra Min S', 'SRAWQuality' => { PrintConv => { 'n/a' => 'No Aplica', }, }, 'SRActive' => { PrintConv => { 'Yes' => 'Si', }, }, 'SampleFormat' => 'Formato Muestra', 'SampleRate' => 'Frecuencia muestreo', 'SampleSize' => 'Tamaño muestra', 'SampleStructure' => { Description => 'Estructura Muestreo', PrintConv => { 'CompressionDependent' => 'Definido dentro del proceso de compresión', 'Orthogonal4-2-2Sampling' => 'Ortogonal con las frecuencias de muestreo en el ratio de 4:2:2:(4)', 'OrthogonalConstangSampling' => 'Ortogonal con la mismas frecuencias de muestreo relativo en cada componente', }, }, 'SamplesPerPixel' => 'Número de Componentes', 'SanyoQuality' => { Description => 'Calidad Sanyo', PrintConv => { 'Fine/High' => 'Fino/Alto', 'Fine/Low' => 'Fino/Bajo', 'Fine/Medium' => 'Fino/Medio', 'Fine/Medium High' => 'Fino/Medio Alto', 'Fine/Medium Low' => 'Fino/Medio bajo', 'Fine/Super High' => 'Fino/Super Alto', 'Fine/Very High' => 'Fino/Muy Alto', 'Fine/Very Low' => 'Fino/Muy bajo', 'Normal/High' => 'Normal/Alto', 'Normal/Low' => 'Normal/Bajo', 'Normal/Medium' => 'Normal/Medio', 'Normal/Medium High' => 'Normal/Medio Alto', 'Normal/Medium Low' => 'Normal/Medio bajo', 'Normal/Super High' => 'Normal/Super Alto', 'Normal/Very High' => 'Normal/Muy Alto', 'Normal/Very Low' => 'Normal/Muy bajo', 'Super Fine/High' => 'Super Fino/Alto', 'Super Fine/Low' => 'Super Fino/Bajo', 'Super Fine/Medium' => 'Super Fino/Medio', 'Super Fine/Medium High' => 'Super Fino/Medio Alto', 'Super Fine/Medium Low' => 'Super Fino/Medio Bajo', 'Super Fine/Super High' => 'Super Fino/Super Alto', 'Super Fine/Very High' => 'Super Fino/Muy Alto', 'Super Fine/Very Low' => 'Super Fino/Muy Bajo', }, }, 'SanyoThumbnail' => 'Miniatura Sanyo', 'Saturation' => { Description => 'Saturación', PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'None' => 'Ninguno', 'None (B&W)' => 'Ninguna (N&B)', 'Normal' => 'Estándar', 'Vivid' => 'Vívido', }, }, 'ScanImageEnhancer' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'ScanningDirection' => { Description => 'Dirección Escaneo', PrintConv => { 'Bottom-Top, L-R' => 'Abajo a arriba, izquierda a derecha', 'Bottom-Top, R-L' => 'Abajo a arriba, derecha a izquierda', 'L-R, Bottom-Top' => 'Izquierda a derecha, abajo a arriba', 'L-R, Top-Bottom' => 'Izquierda a derecha, arriba a abajo', 'R-L, Bottom-Top' => 'Derecha a izquierda, abajo a arriba', 'R-L, Top-Bottom' => 'Derecha a izquierda, arriba a abajo', 'Top-Bottom, L-R' => 'Arriba a abajo, izquierda a derecha', 'Top-Bottom, R-L' => 'Arriba a abajo, derecha a izquierda', }, }, 'Scene' => 'Escena', 'SceneCaptureType' => { Description => 'Tipo Captura Escena', PrintConv => { 'Landscape' => 'Paisaje', 'Night' => 'Escena nocturna', 'Portrait' => 'Retrato', 'Standard' => 'Estándar', }, }, 'SceneMode' => { Description => 'Selección de escena', PrintConv => { '3D Sweep Panorama' => '3D', 'Anti Motion Blur' => 'Anti movimiento', 'Beach' => 'Playa', 'Cont. Priority AE' => 'AE prioridad cont.', 'Fireworks' => 'Fuegos Artificiales', 'Food' => 'Comida', 'Handheld Night Shot' => 'Toma noct. manual', 'Indoor' => 'Interior', 'Landscape' => 'Paisaje', 'Night Portrait' => 'Retrato noct.', 'Night Scene' => 'Vista nocturna', 'Night View/Portrait' => 'Vista/retrato nocturno', 'Off' => 'Desactivado', 'Panorama' => 'Panoramica', 'Portrait' => 'Retrato', 'Snow' => 'Nieve', 'Sports' => 'Acción deportiva', 'Standard' => 'Estándar', 'Sunset' => 'Puesta sol', 'Sweep Panorama' => 'Barrido panorámico', 'Underwater' => 'Subacuatica', 'Vivid' => 'Vívido', }, }, 'SceneModeUsed' => { PrintConv => { 'Beach' => 'Playa', 'Fireworks' => 'Fuegos Artificiales', 'Landscape' => 'Paisaje', 'Panorama' => 'Panoramica', 'Portrait' => 'Retrato', 'Snow' => 'Nieve', }, }, 'SceneSelect' => { Description => 'Selección Escena', PrintConv => { 'Lamp' => 'Lámpara', 'Night' => 'Noche', 'Off' => 'Apagado', 'Sport' => 'Deporte', 'User 1' => 'Usuario 1', 'User 2' => 'Usuario 2', }, }, 'SceneType' => { Description => 'Tipo Escena', PrintConv => { 'Directly photographed' => 'Imagen fotografiada directamente', }, }, 'Security' => { PrintConv => { 'None' => 'Ninguno', }, }, 'SecurityClassification' => { Description => 'Clasificación Seguridad', PrintConv => { 'Confidential' => 'Confidencial', 'Restricted' => 'Restringida', 'Secret' => 'Secreta', 'Top Secret' => 'Alto secreto', 'Unclassified' => 'Sin clasificar', }, }, 'SelectableAFPoint' => 'Punto AF seleccionable', 'SelfTimer' => { Description => 'Temporizador Automático', PrintConv => { 'Off' => 'Apagado', 'On' => 'Encendido', }, }, 'SelfTimerMode' => 'Modo Automático', 'SensingMethod' => { Description => 'Método Sensor', PrintConv => { 'Color sequential area' => 'Sensor de color secuencial', 'Color sequential linear' => 'Sensor lineal de color secuencial', 'Monochrome area' => 'Sensor monocromo', 'Monochrome linear' => 'Sensor lineal monocromo', 'Not defined' => 'No definido', 'One-chip color area' => 'Sensor monochip de color', 'Three-chip color area' => 'Sensor tres chips de color', 'Trilinear' => 'Sensor trilineal', 'Two-chip color area' => 'Sensor bichip de color', }, }, 'SensitivityType' => { PrintConv => { 'Unknown' => 'Desconocido', }, }, 'SequenceShotInterval' => { Description => 'Intervalo Disparo Secuencial', PrintConv => { '10 frames/s' => '10 cuadros/s', '15 frames/s' => '15 cuadros/s', '20 frames/s' => '20 cuadros/s', '5 frames/s' => '5 cuadros/s', }, }, 'SequentialShot' => { Description => 'Disparo Secuencial', PrintConv => { 'Adjust Exposure' => 'Ajustar Exposición', 'Best' => 'Mejor', 'None' => 'Ninguno', 'Standard' => 'Estándar', }, }, 'SerialNumber' => 'Número Serie', 'ServiceIdentifier' => 'Identificador Servicio', 'ShadingCompensation' => 'Compensación de Sombreado', 'ShadingCompensation2' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'Shadow' => 'Sombrío', 'ShadowScale' => 'Escala Sombrío', 'ShakeReduction' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'Sharpening' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', }, }, 'Sharpness' => { Description => 'Nitidez', PrintConv => { 'Hard' => 'Fuerte', 'Normal' => 'Estándar', 'Sharp' => 'Nitido', 'Soft' => 'Suave', }, }, 'SharpnessFrequency' => { PrintConv => { 'High' => 'Alto', 'Highest' => 'Muy Alto', 'Low' => 'Bajo', 'Lowest' => 'Mas bajo', 'Standard' => 'Estándar', 'n/a' => 'No Aplica', }, }, 'ShootingMode' => { Description => 'Modo de Disparo', PrintConv => { 'Beach' => 'Playa', 'Fireworks' => 'Fuegos Artificiales', 'Food' => 'Comida', 'Portrait' => 'Retrato', 'Snow' => 'Nieve', 'Underwater' => 'Subacuatica', }, }, 'ShortDocumentID' => 'ID Corta del Documento', 'Shutter-AELock' => 'Disparador Bloqueo AE', 'ShutterCount' => 'Contador de disparos', 'ShutterReleaseButtonAE-L' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'ShutterReleaseNoCFCard' => { PrintConv => { 'Yes' => 'Si', }, }, 'ShutterSpeed' => 'Tiempo de Exposición', 'ShutterSpeedValue' => 'Velocidad Obturación', 'Signature_Name' => 'Firma', 'SimilarityIndex' => 'Ãndice de Similitudes', 'SingleFrameBracketing' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', }, }, 'Site' => 'Sitio', 'SlideShow' => { PrintConv => { 'Yes' => 'Si', }, }, 'SlowShutter' => { PrintConv => { 'None' => 'Ninguno', 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'SoftSkinEffect' => { PrintConv => { 'Low' => 'Bajo', }, }, 'Software' => 'Programa Utilizado', 'SoftwareVersion' => 'Versión Software', 'SonyImageSize' => { PrintConv => { 'Standard' => 'Estándar', }, }, 'SonyQuality' => { PrintConv => { 'Standard' => 'Estándar', }, }, 'Source' => 'Fuente', 'SpatialFrequencyResponse' => 'Respuesta Frecuencia Espacial', 'SpecialEffectsOpticalFilter' => { PrintConv => { 'None' => 'Ninguno', }, }, 'SpecialInstructions' => 'Instrucciones', 'SpecialMode' => 'Modo Especial', 'SpectralSensitivity' => 'Sensibilidad Espectral', 'Speed' => { PrintConv => { 'Fast' => 'Rápido', }, }, 'SpotMeteringMode' => { PrintConv => { 'AF Point' => 'Punto AF', 'Center' => 'Centro', }, }, 'State' => 'Estado', 'StreamColor' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'StreamType' => { PrintConv => { 'Binary' => 'Binario', 'File Transfer' => 'Transferencia Archivo', }, }, 'StripByteCounts' => 'Bytes por Tira Comprimida', 'StripOffsets' => 'Localización Datos Imagen', 'Sub-location' => 'Localización', 'SubSecTime' => 'Subsegundos DateTime', 'SubSecTimeDigitized' => 'Subsegundos DateTimeDigitized', 'SubSecTimeOriginal' => 'Subsegundos DateTimeOriginal', 'SubTileBlockSize' => 'Tamaño Bloque Submosaico', 'SubfileType' => 'Nuevo Tipo Subarchivo', 'SubimageColor' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'Subject' => 'Sujeto', 'SubjectArea' => 'Zona Sujeto', 'SubjectDistance' => 'Distancia Sujeto', 'SubjectDistanceRange' => { Description => 'Intervalo Distancia Sujeto', PrintConv => { 'Close' => 'Vista cercana', 'Distant' => 'Vista alejada', 'Unknown' => 'Desconocido', }, }, 'SubjectLocation' => 'Localización Sujeto', 'SubjectProgram' => { PrintConv => { 'None' => 'Ninguno', 'Portrait' => 'Retrato', }, }, 'SubjectReference' => 'Código Sujeto', 'Subsystem' => { PrintConv => { 'Unknown' => 'Desconocido', }, }, 'Subtitle' => 'Subtitulo', 'SubtitleDescription' => 'Descripción Subtitulo', 'SuperimposedDisplay' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'SupplementalCategories' => 'Categoría Suplementaria', 'SupplementalType' => { Description => 'Tipo Suplemento', PrintConv => { 'Main Image' => 'No Definido', 'Rasterized Caption' => 'Título Rasterizado', 'Reduced Resolution Image' => 'Imagen resolución reducida', }, }, 'SweepPanoramaSize' => { PrintConv => { 'Standard' => 'Estándar', }, }, 'SwitchToRegisteredAFPoint' => 'Conmutación de Punto AF registrado', 'SynchronizedLyricsType' => { PrintConv => { 'Other' => 'Otro', }, }, 'T4Options' => 'Opciones T4', 'T6Options' => 'Opciones T6', 'TIFF-EPStandardID' => 'ID Estándar TIFF/EP', 'Tagged' => { PrintConv => { 'Yes' => 'Si', }, }, 'TargetPrinter' => 'Impresora Objetivo', 'Technology' => { Description => 'Tecnología', PrintConv => { 'Active Matrix Display' => 'Pantalla Matriz Activa', 'Cathode Ray Tube Display' => 'Pantalla Tubo Rayos Catódicos', 'Digital Camera' => 'Cámara Digital', 'Dye Sublimation Printer' => 'Impresora Sublimación', 'Electrophotographic Printer' => 'Impresora Electrofotográfica (Laser)', 'Electrostatic Printer' => 'Impresora Electrostática', 'Film Scanner' => 'Escaner Película', 'Film Writer' => 'Impresora Película', 'Flexography' => 'Flexografía', 'Gravure' => 'Grabado', 'Ink Jet Printer' => 'Impresora Inyección Tinta', 'Offset Lithography' => 'Litografía Offset', 'Passive Matrix Display' => 'Pantalla Matriz Pasiva', 'Photo Image Setter' => 'Marco Foto', 'Photographic Paper Printer' => 'Impresora Papel Fotográfico', 'Projection Television' => 'Televisión Proyección', 'Reflective Scanner' => 'Escaner Reflectivo', 'Silkscreen' => 'Pantalla Sedosa', 'Thermal Wax Printer' => 'Impresora Cera Termal', 'Video Camera' => 'Videocámara', 'Video Monitor' => 'Monitor Video', }, }, 'Teleconverter' => { PrintConv => { 'None' => 'Ninguno', }, }, 'Text' => 'Texto', 'TextStamp' => { PrintConv => { 'On' => 'Activado', }, }, 'Thresholding' => 'Umbral', 'ThumbnailImage' => 'Miniatura', 'ThumbnailImageSize' => 'Tamaño de la Vista en Miniatura', 'TileByteCounts' => 'Número Byte Elemento', 'TileDepth' => 'Ancho Elemento', 'TileLength' => 'Largo Elemento', 'TileOffsets' => 'Offsets Elemento', 'TileWidth' => 'Ancho Elemento', 'TimeCreated' => 'Hora Creación', 'TimeScaleParamsQuality' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', }, }, 'TimeSent' => 'Hora Envío', 'TimeSignature' => { PrintConv => { 'other' => 'Otro', }, }, 'TimeStamp' => 'Marca de Tiempo', 'TimeStamp1' => 'Marca de Tiempo 1', 'TimeZoneOffset' => 'Offset Zona Horaria', 'Title' => 'Título', 'ToneCurve' => { PrintConv => { 'Standard' => 'Estándar', }, }, 'ToneCurveActive' => { PrintConv => { 'Yes' => 'Si', }, }, 'ToningEffect' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Ninguno', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'ToningEffectMonochrome' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Ninguno', }, }, 'ToningEffectUnknown' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Ninguno', }, }, 'ToningEffectUserDef1' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Ninguno', }, }, 'ToningEffectUserDef2' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Ninguno', }, }, 'ToningEffectUserDef3' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Ninguno', }, }, 'ToolName' => 'Nombre Herramienta', 'ToolVersion' => 'Versión Herramienta', 'TotalFrames' => 'Total Imagenes', 'Track' => 'Pista', 'TrackCreateDate' => 'Fecha creación Track', 'TrackDefault' => 'Pista Defecto', 'TrackForced' => 'Pista Forzada', 'TrackHeaderVersion' => 'Versión cabecera Pista', 'TrackID' => 'ID Pista', 'TrackName' => 'Nombre Pista', 'TrackNumber' => 'Número Pista', 'TrackType' => 'Tipo Pista', 'TrackUsed' => 'Pista utilizada', 'Tracks' => 'Pistas', 'TransferFunction' => 'Función Transferencia', 'TransferRange' => 'Intervalo Transferencia', 'Transformation' => { Description => 'Transformación', PrintConv => { 'Mirror horizontal' => 'Invertir horizontal', 'Mirror horizontal and rotate 270 CW' => 'Invertir horizontal y rotar 270° sentido reloj', 'Mirror horizontal and rotate 90 CW' => 'Invertir horizontal y rotar 90° sentido reloj', 'Mirror vertical' => 'Invertir vertical', 'Rotate 180' => 'Girado 180°', 'Rotate 270 CW' => 'Girado 270° sentido reloj', 'Rotate 90 CW' => 'Girado 90° sentido reloj', }, }, 'TransmissionReference' => 'Referencia de Transmisión', 'TransparencyIndicator' => 'Indicador Transparencia', 'TrapIndicator' => 'Indicador Tampa', 'Type' => 'Tipo', 'Uncompressed' => { Description => 'Sin Comprimir', PrintConv => { 'Yes' => 'Si', }, }, 'UncompressedSize' => 'Tamaño Descomprimido', 'UniqueCameraModel' => 'Modelo Cámara Unico', 'UniqueDocumentID' => 'ID de Documento Única', 'UniqueFileIdentifier' => 'Identificador Unico Archivo', 'UniqueObjectName' => 'Nombre Único de Objeto', 'Unknown' => 'Desconocido', 'Unsharp1Color' => { PrintConv => { 'Green' => 'Verde', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'Unsharp2Color' => { PrintConv => { 'Green' => 'Verde', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'Unsharp3Color' => { PrintConv => { 'Green' => 'Verde', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'Unsharp4Color' => { PrintConv => { 'Green' => 'Verde', 'Red' => 'Rojo', 'Yellow' => 'Amarillo', }, }, 'UnsharpMask' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'Urgency' => { Description => 'Urgencia', PrintConv => { '0 (reserved)' => '0 (reservado para futuro uso)', '1 (most urgent)' => '1 (más urgente)', '5 (normal urgency)' => '5 (urgencia normal)', '8 (least urgent)' => '8 (menos urgente)', '9 (user-defined priority)' => '9 (reservado para futuro uso)', }, }, 'UserComment' => 'Comentarios Usuario', 'UserDef1PictureStyle' => { PrintConv => { 'Landscape' => 'Paisaje', 'Monochrome' => 'Monocromo', 'Neutral' => 'Neutro', 'Portrait' => 'Retrato', 'Standard' => 'Estándar', }, }, 'UserDef2PictureStyle' => { PrintConv => { 'Landscape' => 'Paisaje', 'Monochrome' => 'Monocromo', 'Neutral' => 'Neutro', 'Portrait' => 'Retrato', 'Standard' => 'Estándar', }, }, 'UserDef3PictureStyle' => { PrintConv => { 'Landscape' => 'Paisaje', 'Monochrome' => 'Monocromo', 'Neutral' => 'Neutro', 'Portrait' => 'Retrato', 'Standard' => 'Estándar', }, }, 'VR_0x66' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'ValidAFPoints' => 'Puntos AF validos', 'Version' => 'Versión PrintIM', 'VersionYear' => 'Año versión', 'VibrationReduction' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'VideoAlphaMode' => { PrintConv => { 'None' => 'Ninguno', }, }, 'VideoCardGamma' => 'Tarjeta Video Gamma', 'VideoCompressor' => 'Video Compresor', 'VideoFieldOrder' => { PrintConv => { 'Lower' => 'Inferior', 'Progressive' => 'Progresivo', 'Upper' => 'Superior', }, }, 'VideoHeight' => 'Altura Video', 'VideoPixelDepth' => { PrintConv => { '16-bit integer' => 'Entero 16-bits', '24-bit integer' => 'Entero 24-bits', '32-bit float' => 'Flotante 32-bits', '32-bit integer' => 'Entero 32-bits', '8-bit integer' => 'Entero 8-bits', 'Other' => 'Otro', }, }, 'VideoQuality' => { PrintConv => { 'Low' => 'Bajo', 'Standard' => 'Estándar', }, }, 'VideoWidth' => 'Ancho Video', 'ViewCompressionFactor' => 'Ver Factor de compresión', 'ViewfinderWarning' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'ViewfinderWarnings' => { PrintConv => { 'Monochrome' => 'Monocromo', }, }, 'ViewingCondDesc' => 'Descripción en Condiciones de Visión', 'ViewingCondIlluminant' => 'Iluminación en Condiciones de Visión', 'ViewingCondIlluminantType' => 'Tipo Iluminación en Condiciones de Visión', 'ViewingCondSurround' => 'Entorno en Condiciones de Visión', 'ViewingConditions' => 'Iluminación en Condiciones de Visión', 'VignetteControl' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'VoiceMemo' => { Description => 'Notas Voz', PrintConv => { 'Off' => 'Apagado', 'On' => 'Encendido', }, }, 'WBAdjLighting' => { PrintConv => { 'None' => 'Ninguno', }, }, 'WBBracketMode' => { PrintConv => { 'Off' => 'Desactivado', }, }, 'WBFineTuneActive' => { PrintConv => { 'Yes' => 'Si', }, }, 'WCSProfiles' => 'Perfil Sistema Color Windows', 'WhiteBalance' => { Description => 'Balance de Blancos', PrintConv => { 'Auto' => 'Automático', 'Black & White' => 'Monocromo', 'Cloudy' => 'Nublado', 'Color Temperature/Color Filter' => 'Temperatura de color / Filtro de color', 'Cool White Fluorescent' => 'Fluorescente blanco frío', 'Custom' => 'Personalizado', 'Custom 1' => 'Personalizado 1', 'Custom 2' => 'Personalizado 2', 'Custom 3' => 'Personalizado 3', 'Custom 4' => 'Personalizado 4', 'Day White Fluorescent' => 'Fluorescente blanco de día', 'Daylight' => 'Luz de día', 'Daylight Fluorescent' => 'Fluorescente luz de día', 'Fluorescent' => 'Flourescente', 'Manual' => 'Equilibrio del blanco manual', 'Manual Temperature (Kelvin)' => 'Temperatura Manual (Kelvin)', 'Shade' => 'Sombrío', 'Tungsten' => 'Tungsteno', 'Underwater' => 'Subacuatica', 'Unknown' => 'Desconocido', 'Warm White Fluorescent' => 'Fluorescente blanco cálido', 'White Fluorescent' => 'Fluorescente blanco', }, }, 'WhiteBalanceAdj' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'WhiteBalanceBracketing' => { PrintConv => { 'High' => 'Alto', 'Low' => 'Bajo', }, }, 'WhiteLevel' => 'Nivel Blanco', 'WhitePoint' => 'Cromaticidad Punto Blanco', 'WideRange' => { Description => 'Intervalo Extendido', PrintConv => { 'Off' => 'Apagado', 'On' => 'Encendido', }, }, 'WidthResolution' => 'Resolución Imagen Horizontal', 'Writer' => 'Escritor', 'Writer-Editor' => 'Título/Descripción Escritor', 'X3FillLight' => 'Luz Relleno X3', 'XClipPathUnits' => 'Unidades Camino Fragmento X', 'XMP' => 'Metadatos XMP', 'XPosition' => 'Posición X', 'XResolution' => 'Resolución Imagen Horizontal', 'YCbCrCoefficients' => 'Coeficientes de Matriz de Tranformación de Espacio de Color', 'YCbCrPositioning' => { Description => 'Posicionamiento Y y C', PrintConv => { 'Centered' => 'Centrado', 'Co-sited' => 'Vecino', }, }, 'YCbCrSubSampling' => 'Ratio Submuestreo de Y a C', 'YClipPathUnits' => 'Unidades Camino Fragmento Y', 'YPosition' => 'Posición Y', 'YResolution' => 'Resolución Imagen Vertical', 'Year' => 'Año', 'YearCreated' => 'Año Creación', 'ZipCompressedSize' => 'Zip Tamaño Comprimido', 'ZipCompression' => { Description => 'Compresión Zip', PrintConv => { 'None' => 'Ninguno', 'Reduced with compression factor 1' => 'Reducido con factor de compresión 1', 'Reduced with compression factor 2' => 'Reducido con factor de compresión 2', 'Reduced with compression factor 3' => 'Reducido con factor de compresión 3', 'Reduced with compression factor 4' => 'Reducido con factor de compresión 4', }, }, 'ZipUncompressedSize' => 'Zip Tamaño Descomprimido', 'ZoneMatching' => { Description => 'Zone matching', PrintConv => { 'High Key' => 'Alto', 'ISO Setting Used' => 'Desactivado', 'Low Key' => 'Bajo', }, }, 'ZoneMatchingMode' => { PrintConv => { 'Standard' => 'Estándar', }, }, 'ZoneMatchingOn' => { PrintConv => { 'Off' => 'Desactivado', 'On' => 'Activado', }, }, 'ZoomPos' => 'Posición Zoom', ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::es.pm - ExifTool Spanish language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke, Santiago del BrE<iacute>o GonzE<aacute>lez and Emilio Sancha for providing this translation. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut ����������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/fi.pm��������������������������������������������������000644 �000765 �000024 �00000330230 12642461343 021527� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: fi.pm # # Description: ExifTool Finnish language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::fi; use strict; use vars qw($VERSION); $VERSION = '1.02'; %Image::ExifTool::Lang::fi::Translate = ( 'AEAperture' => 'AE-aukko', 'AEBBracketValue' => 'AEB-haarukointiarvo', 'AEBXv' => 'AEB-valotuksen korjaus', 'AEExposureTime' => 'AE-valotusaika', 'AEInfo' => 'Automaattivalotustiedot', 'AELock' => { Description => 'AE-lukitus', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'AELockButton' => 'AE-lukituspainike', 'AEMeteringMode' => 'AE-valotuksen mittaustapa', 'AEMeteringSegments' => 'AE-mittaussegmentit', 'AEProgramMode' => 'AE-ohjelmatapa', 'AESetting' => 'AE-asetus', 'AEXv' => 'AE-valotuksen korjaus', 'AF-CPrioritySelection' => 'AF-C -esivalinnat', 'AF-OnForMB-D10' => 'AF-ON -painike (MB-D10)', 'AF-SPrioritySelection' => 'AF-S -esivalinnat', 'AFActivation' => 'AF-aktivointi', 'AFAdjustment' => 'AF-säätö', 'AFAperture' => 'AF-aukko', 'AFArea' => 'AF-alue', 'AFAreaHeight' => 'AF-alueen korkeus', 'AFAreaIllumination' => 'AF-alueen valaisu', 'AFAreaMode' => 'AF-aluetarkennus', 'AFAreaModeSetting' => 'AF-aluemittaustavan asetus', 'AFAreaWidth' => 'AF-alueen leveys', 'AFAreas' => 'AF-alueet', 'AFAssist' => 'AF-apu', 'AFAssistLamp' => { PrintConv => { 'Disabled and Not Required' => 'Deaktivoitu eikä tarpeen', 'Disabled but Required' => 'Deaktivoitu mutta tarpeen', 'Enabled but Not Used' => 'Aktivoitu muttei käytetty', 'Fired' => 'Lauennut', }, }, 'AFDefocus' => 'AF-defokus (poikkeama polttopisteestä)', 'AFFineTune' => 'AF-hienosäätö', 'AFImageHeight' => 'AF-kuvan korkeus', 'AFImageWidth' => 'AF-kuvan leveys', 'AFInfo' => 'Automaattitarkennustiedot', 'AFInfo2' => 'AF-tiedot', 'AFInfo2Version' => 'AF-tietojen versio', 'AFIntegrationTime' => 'AF-integrointiaika', 'AFMode' => 'AF-muoto', 'AFPoint' => { Description => 'AF-piste', PrintConv => { 'Bottom Center' => 'Alhaalla keskellä', 'Bottom Left' => 'Alavasemmalla', 'Bottom Right' => 'Alaoikealla', 'Center' => 'Keskellä', 'Center Left' => 'Keskellä vasemmalla', 'Center Right' => 'Keskellä oikealla', 'Far Left/Right of Center' => 'Kaukana vasemmalla/keskioikealla', 'Far Left/Right of Center/Bottom' => 'Kaukana vasemmalla/keskioikealla/alhaalla', 'Near Left/Right of Center' => 'Hieman vasemmalla/keskioikealla', 'Near Upper/Left' => 'Hieman ylhäällä/vasemmalla', 'Top Center' => 'Ylhäällä keskellä', 'Top Left' => 'Ylävasemmalla', 'Top Near-left' => 'Hieman ylävasemmalla', 'Top Near-right' => 'Hieman yläoikealla', 'Top Right' => 'Yläoikealla', 'Upper Left' => 'Ylävasemmalla', 'Upper Right' => 'Yläoikealla', }, }, 'AFPointIllumination' => 'AF -pistevalaisu', 'AFPointMode' => 'AF-pistetapa', 'AFPointSelected' => { Description => 'Valittu AF-piste', PrintConv => { 'Auto' => 'Automaattinen', 'Automatic Tracking AF' => 'Automaattiseuranta-AF', 'Bottom' => 'Alas', 'Center' => 'Keskelle', 'Face Detect AF' => 'Kasvojentunnistus-AF', 'Fixed Center' => 'Kiinteästi keskustaan', 'Left' => 'Vasemmalle', 'Lower-left' => 'Alavasemmalle', 'Lower-right' => 'Alaoikealle', 'Mid-left' => 'Keskivasemmalle', 'Mid-right' => 'Keskioikealle', 'Right' => 'Oikealle', 'Top' => 'Ylös', 'Upper-left' => 'Ylävasemmalle', 'Upper-right' => 'Yläoikealle', }, }, 'AFPointSelected2' => 'Valittu AF-piste 2', 'AFPointSelection' => 'AF-pistevalinnat', 'AFPoints' => 'AF-pisteet', 'AFPointsInFocus' => { Description => 'Tarkennuksen AF-pisteet', PrintConv => { 'Bottom-center' => 'Alakeski', 'Bottom-left' => 'Alavasen', 'Bottom-right' => 'Alaoikea', 'Center' => 'Keski', 'Fixed Center or Multiple' => 'Kiinteästi keskellä tai useita', 'Left' => 'Vasen', 'None' => 'Ei yhtään', 'Right' => 'Oikea', 'Top-center' => 'Yläkeski', 'Top-left' => 'Yläoikea', 'Top-right' => 'Yläoikea', }, }, 'AFPointsSelected' => 'Valitut AF-pisteet', 'AFPointsUsed' => 'Käytetyt AF-pisteet', 'AFPredictor' => 'Ennakoiva AF', 'AFResponse' => 'Käytetty AF', 'AFResult' => 'AF-tulos', 'AFSearch' => { Description => 'AF-haku', PrintConv => { 'Not Ready' => 'Ei valmis', 'Ready' => 'Valmis', }, }, 'ARMIdentifier' => 'ARM-tunnistin', 'ARMVersion' => 'ARM-versio', 'AToB0' => 'A - B0', 'AToB1' => 'A - B1', 'AToB2' => 'A - B2', 'AccessoryType' => 'Lisälaitetyyppi', 'ActionAdvised' => { Description => 'Suositettava toiminto', PrintConv => { 'Object Kill' => 'Objektin tuhonta', 'Object Reference' => 'Objektiviite', 'Object Replace' => 'Objektin korvaus', 'Ojbect Append' => 'Objektiliitäntä', }, }, 'ActiveArea' => 'Aktiivialue', 'ActiveD-Lighting' => 'Aktiivinen D-Lighting', 'ActiveD-LightingMode' => 'Aktivoitu D-Lighting-tapa', 'AdjustmentMode' => 'Säätötapa', 'AdvancedRaw' => 'Edistynyt RAW', 'AdvancedSceneMode' => { Description => 'Edistynyt näkymätapa', PrintConv => { 'Auto' => 'Automaattinen', 'Creative' => 'Luova', 'Indoor/Architecture/Objects/HDR B&W' => 'Sisällä/arkkitehtuuri/kohteet', 'Normal' => 'Normaali', 'Outdoor/Illuminations/Flower/HDR Art' => 'Ulkona/valaistukset/kukka', }, }, 'AlphaByteCount' => 'Alfa-tavujen määrä', 'AlphaChannelsNames' => 'Alfa-kanavien nimet', 'AlphaDataDiscard' => { Description => 'Alfa-data hylätty', PrintConv => { 'Flexbits Discarded' => 'FlexBits hylätty', 'Full Resolution' => 'Täysi resoluutio', 'HighPass Frequency Data Discarded' => 'Ylipäästötaajuusdata hylätty', 'Highpass and LowPass Frequency Data Discarded' => 'Yli- ja alipäästötaajuusdata hylätty', }, }, 'AlphaOffset' => 'Alfa-siirtymä', 'AnalogBalance' => 'Analoginen tasapaino', 'AntiAliasStrength' => 'Kameran anti-alias -suotimen suhteellinen vahvuus', 'Aperture' => 'Aukko', 'ApertureRingUse' => 'Himmenninrenkaan käyttö', 'ApertureValue' => 'Aukkoarvo', 'ApplicationRecordVersion' => 'Sovellustietueen versio', 'ArtFilter' => 'Taidesuodin', 'Artist' => 'Kuvan luonut henkilö', 'AsShotICCProfile' => 'Kuin kuvatessa -ICC-profiili', 'AsShotNeutral' => 'Kuin kuvatessa -neutraali', 'AsShotPreProfileMatrix' => 'Kuin kuvatessa -pre-profiilimatriisi', 'AsShotProfileName' => 'Kuin kuvatessa -profiilin nimi', 'AsShotWhiteXY' => 'Kuin kuvatessa -valkoinen X-Y', 'Audio' => { Description => 'Ääni', PrintConv => { 'No' => 'Ei', 'Yes' => 'Kyllä', }, }, 'AudioDuration' => 'Audion kesto', 'AudioOutcue' => 'Audion lopetus', 'AudioSamplingRate' => 'Audion näytetaajuus', 'AudioSamplingResolution' => 'Audion näyteresoluutio', 'AudioType' => { Description => 'Audiotyyppi', PrintConv => { 'Mono Actuality' => 'Aktuaalisuus (monoaudio (1 kanava))', 'Mono Music' => 'Musiikki, itsensä välittämä (monoaudio (1 kanava))', 'Mono Question and Answer Session' => 'Kysymys- ja vastausistunto (monoaudio (1 kanava))', 'Mono Raw Sound' => 'Raakaääni (monoaudio (1 kanava))', 'Mono Response to a Question' => 'Vastaus kysymykseen (monoaudio (1 kanava))', 'Mono Scener' => 'Kohtaus (monoaudio (1 kanava))', 'Mono Voicer' => 'Ihmisääni (monoaudio (1 kanava))', 'Mono Wrap' => 'Pakkaus (monoaudio (1 kanava))', 'Stereo Actuality' => 'Aktuaalisuus (stereoaudio (2 kanavaa))', 'Stereo Music' => 'Musiikki, itsensä välittämä (stereomono (2 kanavaa))', 'Stereo Question and Answer Session' => 'Kysymys- ja vastausistunto (stereoaudio (2 kanavaa))', 'Stereo Raw Sound' => 'Raakaääni (stereoaudio (2 kanavaa))', 'Stereo Response to a Question' => 'Vastaus kysymykseen (stereoaudio (2 kanavaa))', 'Stereo Scener' => 'Kohtaus (stereoaudio (2 kanavaa))', 'Stereo Voicer' => 'Ihmisääni (stereoaudio (2 kanavaa))', 'Stereo Wrap' => 'Pakkaus (stereoaudio (2 kanavaa))', 'Text Only' => 'Vain teksti (ei objektidataa)', }, }, 'Author' => 'Tekijä', 'AutoAperture' => 'Himmenninrengas A:ssa', 'AutoBracket' => 'Automaattihaarukointi', 'AutoBracketSet' => 'Haarukointisarja', 'AutoBracketing' => { Description => 'Automaattinen haarukointi', PrintConv => { 'No flash & flash' => 'Ei salamaa & Salama', 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'AutoDistortionControl' => 'Automaattinen vääristymäkorjaus', 'AutoExposureBracketing' => 'Automaattinen valotuksen haarukointi', 'AutoFP' => 'Automaattinen FP', 'AutoFocus' => { Description => 'Automaattitarkennus', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'AutoISO' => { Description => 'Automaatti-ISO', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'AutoRedEye' => 'Automaattinen punasilmien esto', 'AutoRotate' => 'Automaattinen kuvankierto', 'AuxiliaryLens' => 'Lisälinssi', 'AvApertureSetting' => 'Av-aukkoasetus', 'BToA0' => 'B - A0', 'BToA1' => 'B - A1', 'BToA2' => 'B - A2', 'BWMode' => { Description => 'M/V-muoto', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'BackgroundColor' => 'Taustaväri', 'BackgroundColorIndicator' => 'Taustavärin ilmaisin', 'BackgroundColorValue' => 'Taustavärin arvo', 'BadFaxLines' => 'Huonot faksirivit', 'BaseExposureCompensation' => 'Valotuksen perussäätö', 'BaseISO' => 'Perus-ISO', 'BaselineExposure' => 'Valotuksen perusta', 'BaselineNoise' => 'Kohinan perusta', 'BaselineSharpness' => 'Terävyyden perusta', 'BatteryLevel' => 'Pariston varaus', 'BatteryOrder' => 'Paristojärjestys', 'BayerGreenSplit' => 'Bayer Green Split -suodin', 'Beep' => 'Äänimerkki', 'BestQualityScale' => 'Parhaan laadun asteikko', 'BestShotMode' => { Description => 'Parhaan kuvan tapa', PrintConv => { 'Off' => 'Pois', }, }, 'BitDepth' => 'Bittisyvyys', 'BitsPerComponent' => 'Bittejä per komponentti', 'BitsPerExtendedRunLength' => 'Bittejä per jatkettu jakson pituus', 'BitsPerPixel' => 'Bittejä per pikseli', 'BitsPerRunLength' => 'Bittejä per jakson pituus', 'BitsPerSample' => 'Bittejä per näyte', 'BlackLevel' => 'Mustan taso', 'BlackLevel2' => 'Mustan taso 2', 'BlackLevelDeltaH' => 'Mustan tason Delta H', 'BlackLevelDeltaV' => 'Mustan tason Delta V', 'BlackLevelRepeatDim' => 'Mustan tason toiston dimensio', 'BlackMaskBottomBorder' => 'Mustan maskin alareuna', 'BlackMaskLeftBorder' => 'Mustan maskin vasen reuna', 'BlackMaskRightBorder' => 'Mustan maskin oikea reuna', 'BlackMaskTopBorder' => 'Mustan maskin yläreuna', 'BlackPoint' => 'Musta piste', 'BlueBalance' => 'Sinitasapaino', 'BlueMatrixColumn' => 'Sinisen matriisin sarake', 'BlueTRC' => 'Sinisen toonin toistokäyrä', 'BlueX' => 'Sininen X', 'BlueY' => 'Sininen Y', 'BlurWarning' => { Description => 'Tärinävaroitus', PrintConv => { 'Blur Warning' => 'Tärinävaroitus', 'None' => 'Ei mitään', }, }, 'BodyFirmwareVersion' => 'Rungon laiteohjelmistoversio', 'BorderID' => 'Kehyksen ID', 'BorderLocation' => 'Kehyksen sijainti', 'BorderName' => 'Kehyksen nimi', 'BorderType' => 'Kehyksen tyyppi', 'BordersVersion' => 'Kehysten versio', 'BracketMode' => 'Haarukointitapa', 'BracketSequence' => 'Haarukointijärjestys', 'BracketShotNumber' => 'Haarukoinnin otosnumero', 'BracketStep' => 'Haarukointiväli', 'BracketValue' => 'Haarukointiarvo', 'Brightness' => 'Kirkkaus', 'BrightnessData' => 'Kirkkausdata', 'BrightnessValue' => 'Kirkkausarvo', 'BulbDuration' => 'Aikavalotuksen kesto', 'BurstMode' => { Description => 'Sarjatapa', PrintConv => { 'Infinite' => 'Ääretön', 'Off' => 'Pois', 'On' => 'Matala/korkea laatu', 'Unlimited' => 'Rajaton', }, }, 'By-line' => 'Tekijä', 'By-lineTitle' => 'Tekijän ammattinimike', 'CCDScanMode' => { Description => 'CCD-skannaustapa', PrintConv => { 'Interlaced' => 'Lomitettu', 'Progressive' => 'Progressiivinen', }, }, 'CFALayout' => { Description => 'CFA-sommitelma', PrintConv => { 'Even columns offset down 1/2 row' => 'Horjahtanut sommitelma A: parilliset sarakkeet siirtyneet alas 1/2 riviä', 'Even columns offset up 1/2 row' => 'Horjahtanut sommitelma B: parilliset sarakkeet osiirtyneet ylös 1/2 riviä', 'Even rows offset left 1/2 column' => 'Horjahtanut sommitelma D: parilliset rivit siirtyneet vasemmalle 1/2 saraketta', 'Even rows offset right 1/2 column' => 'Horjahtanut sommitelma C: parilliset rivit siirtyneet oikealle 1/2 saraketta', 'Rectangular' => 'Suorakulmainen (tai neliömäinen) sommitelma', }, }, 'CFAPattern' => 'CFA-kuvio', 'CFAPattern2' => 'CFA-kuvio 2', 'CFAPlaneColor' => 'CFA-tasoväri', 'CFARepeatPatternDim' => 'Toistuvan CFA-kuvion laajuus', 'CLModeShootingSpeed' => 'Hidas jatkuva kuvaus (CL)', 'CMContrast' => 'CM:n kontrasti', 'CMExposureCompensation' => 'CM:n valotuksen säätö', 'CMHue' => 'CM:n sävy', 'CMMFlags' => 'CMM-liput', 'CMSaturation' => 'CM:n värikylläisyys', 'CMSharpness' => 'CM:n terävyys', 'CMWhiteBalance' => 'CM:n valkotasapaino', 'CMWhiteBalanceComp' => 'CM:n valkotasapainon säätö', 'CMWhiteBalanceGrayPoint' => 'CM:n valkotasapainon harmaapiste', 'CMYKEquivalent' => 'CMYK-vastaava', 'CPUFirmwareVersion' => 'CPU-laiteohjelmistoversio', 'CalibrationDateTime' => 'Kalibroinnin päiväysaika', 'CalibrationIlluminant1' => { Description => 'Valaistuksen kalibrointi 1', PrintConv => { 'Unknown' => 'Tuntematon', }, }, 'CalibrationIlluminant2' => { Description => 'Valaistuksen kalibrointi 2', PrintConv => { 'Unknown' => 'Tuntematon', }, }, 'CameraCalibration1' => 'Kameran kalibrointi 1', 'CameraCalibration2' => 'Kameran kalibrointi 2', 'CameraCalibrationSig' => 'Kameran kalibrointitunniste', 'CameraID' => 'Kameran ID', 'CameraISO' => 'Kamera-ISO', 'CameraOwner' => 'Kameran omistaja', 'CameraParameters' => 'Kameran parametrit', 'CameraSerialNumber' => 'Kameran rungon nro', 'CameraSettings' => 'Kameran asetukset', 'CameraSettingsVersion' => 'Kamera-asetusten versio', 'CameraTemperature' => 'Kameran lämpötila', 'CameraType' => 'Kameratyyppi', 'CameraType2' => 'Kameratyyppi 2', 'CanonAFInfo' => 'AF-info', 'CanonAFInfo2' => 'AF-info (2)', 'CanonFileInfo' => 'Tiedostoinfo', 'CanonFileLength' => 'Tiedoston pituus', 'CanonFirmwareVersion' => 'Laiteohjelmiston versio', 'CanonFlags' => 'Canon-liput', 'CanonImageType' => 'Kuvatyyppi', 'CanonModelID' => 'Mallin ID', 'Caption-Abstract' => 'Seloste/Kuvaus', 'CaptureConditionsPAR' => 'PAR-kuvausolosuhteet', 'CaptureDeviceFID' => 'Kuvauslaitteen FID', 'CasioImageSize' => 'Casion kuvakoko', 'Category' => 'Kategoria', 'CellLength' => 'Kennon pituus', 'CellWidth' => 'Kennon leveys', 'CenterAFArea' => 'Keskialueen AF', 'CharTarget' => 'Kirjainmerkin kohde', 'CharacterSet' => 'Merkistö', 'ChromaBlurRadius' => 'Kromaattisen sumeuden säde', 'ChromaticAdaptation' => 'Kromaattinen adaptaatio', 'Chromaticity' => 'Kromaattisuus', 'City' => 'Kaupunki', 'ClassifyState' => 'Luokitustila', 'CleanFaxData' => 'Poista faksidata', 'ClipPath' => 'Leikepolku', 'CodedCharacterSet' => 'Koodattu merkistö', 'ColorAberrationControl' => 'Väripoikkeaman hallinta', 'ColorAdjustment' => 'Värien säätö', 'ColorAdjustmentMode' => { Description => 'Värin säätötapa', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'ColorBalance' => 'Väritasapaino', 'ColorBalanceAdj' => 'Väritasapainon säätö', 'ColorBalanceBlue' => 'Väritasapaino sininen', 'ColorBalanceGreen' => 'Väritasapaino vihreä', 'ColorBalanceRed' => 'Väritasapaino punainen', 'ColorBoostData' => 'Väritehostusdata', 'ColorBoostLevel' => 'Väritehostustaso', 'ColorBoostType' => 'Väritehostustyyppi', 'ColorBooster' => 'Väritehostus', 'ColorCalibrationMatrix' => 'Värien kalibrointimatriisitaulukko', 'ColorCharacterization' => 'Värin luonnehdinta', 'ColorCompensationFilter' => 'Värikorjailusuodin', 'ColorControl' => 'Värisäätö', 'ColorEffect' => { Description => 'Väriefekti', PrintConv => { 'Black & White' => 'Musta & Valkoinen', 'Cool' => 'Viileä', 'Off' => 'Pois', 'Sepia' => 'Seepia', 'Warm' => 'Lämmin', }, }, 'ColorFilter' => { Description => 'Värisuodin', PrintConv => { 'Off' => 'Pois', }, }, 'ColorGain' => 'Värien vahvistus', 'ColorHue' => 'Värisävy', 'ColorInfo' => 'Väritiedot', 'ColorMap' => 'Värikartta', 'ColorMatrix' => 'Värimatriisi', 'ColorMatrix1' => 'Värimatriisi 1', 'ColorMatrix2' => 'Värimatriisi 2', 'ColorMatrixNumber' => 'Värimatriisin numero', 'ColorMode' => { Description => 'Värimuoto', PrintConv => { 'Autumn Leaves' => 'Syksyn lehdet', 'B & W' => 'M & V', 'B&W' => 'M&V', 'Black & White' => 'Heleät värit', 'Chrome' => 'Kellastunut', 'Clear' => 'Selkeä', 'Deep' => 'Syvä', 'Evening' => 'Ilta', 'Landscape' => 'Maisema', 'Light' => 'Valoisa', 'Natural' => 'Luonnollinen', 'Natural color' => 'Luonnonvalo', 'Natural sRGB' => 'Luonnollinen sRGB', 'Natural+ sRGB' => 'Luonnollinen+ sRGB', 'Neutral' => 'Neutraali', 'Night Portrait' => 'Yön muotokuva', 'Night Scene' => 'Yönäkymä', 'Night View' => 'Iltanäkymä', 'Night View/Portrait' => 'Yönäkymä', 'Normal' => 'Normaali', 'Off' => 'Pois', 'Portrait' => 'Muotokuva', 'Sepia' => 'Seepia', 'Solarization' => 'Solarisaatio', 'Standard' => 'Vakio', 'Sunset' => 'Auringonlasku', 'Vivid' => 'Heleät värit', 'Vivid color' => 'Heleä väri', }, }, 'ColorMoireReduction' => 'Värimoareen vaimennus', 'ColorPalette' => 'Väripaletti', 'ColorProfile' => 'Väriprofiili', 'ColorRepresentation' => 'Väriesitys', 'ColorReproduction' => 'Värientoisto', 'ColorResponseUnit' => 'Värin vasteyksikkö', 'ColorSamplersResource' => 'Värinäytteenotinresurssit', 'ColorSequence' => 'Värien esitys', 'ColorSpace' => { Description => 'Väriavaruus', PrintConv => { 'ICC Profile' => 'ICC-profiili', 'Uncalibrated' => 'Kalibroimaton', 'Wide Gamut RGB' => 'Laaja Gamut RVB', }, }, 'ColorTable' => 'Väritaulukko', 'ColorTemperature' => 'Värilämpötila', 'ColorTone' => 'Värisävy', 'ColorToneFaithful' => 'Kohdeuskollinen värisävy', 'ColorToneLandscape' => 'Maisemakuvan värisävy', 'ColorToneNeutral' => 'Neutraali värisävy', 'ColorTonePortrait' => 'Muotokuvan värisävy', 'ColorToneStandard' => 'Vakiovärisävy', 'ColorType' => 'Värityyppi', 'ColorantOrder' => 'Väriainejärjestys', 'ColorantTable' => 'Väriainetaulukko', 'ColorimetricReference' => 'Kolorimetrinen referenssi', 'Comment' => 'Kommentti', 'ComponentsConfiguration' => 'Kunkin komponentin tarkoitus', 'CompressedBitsPerPixel' => 'Kuvan pakkausmuoto', 'CompressedImageSize' => 'Pakatun kuvan koko', 'Compression' => 'Pakkausskeema', 'CompressionRatio' => 'Pakkaussuhde', 'ConnectionSpaceIlluminant' => 'Yhteystilan valaistus', 'ConsecutiveBadFaxLines' => 'Peräkkäiset huonot faksirivit', 'Contact' => 'Kontakti', 'ContentLocationCode' => 'Sisällön sijaintikoodi', 'ContentLocationName' => 'Sisällön sijaintinimi', 'ContinuousBracketing' => 'Jatkuva haarukointi', 'Contrast' => { Description => 'Kontrasti', PrintConv => { 'Film Simulation' => 'Filminsimulaatio', 'High' => 'Korkea', 'Low' => 'Matala', 'Medium High' => 'Korkeahko', 'Medium Low' => 'Matalahko', 'Normal' => 'Vakio', }, }, 'ContrastAdjustment' => 'Kontrastin säätö', 'ContrastCurve' => 'Kontrastikäyrä', 'ContrastFaithful' => 'Kohdeuskollinen kontrasti', 'ContrastLandscape' => 'Maisemakuvan kontrasti', 'ContrastMonochrome' => 'Yksivärikuvan kontrasti', 'ContrastNeutral' => 'Neutraali kontrasti', 'ContrastPortrait' => 'Muotokuvan kontrasti', 'ContrastSetting' => 'Kontrastiasetus', 'ContrastStandard' => 'Vakiokontrasti', 'ControlMode' => 'Ohjaustapa', 'ConversionLens' => { Description => 'Objektiivilisäke', PrintConv => { 'Macro' => 'Makro', 'Off' => 'Pois', 'Telephoto' => 'Tele', 'Wide' => 'Laajakulma', }, }, 'Converter' => 'Konvertteri', 'Copyright' => 'Profiilin copyright', 'CopyrightFlag' => 'Copyright-lippu', 'CopyrightNotice' => 'Tekijänoikeusilmoitus', 'CoringFilter' => 'Ydinsuodin', 'CoringValues' => 'Ydinsuodatusarvot', 'Country-PrimaryLocationCode' => 'ISO-maakoodi', 'Country-PrimaryLocationName' => 'Maa', 'CreateDate' => 'Digitaalisen datan luonnin päiväys ja aika', 'CreationDate' => 'Luontipäivä', 'CreativeStyle' => { Description => 'Luova tyyli', PrintConv => { 'Autumn Leaves' => 'Syksyn lehdet', 'B&W' => 'M&V', 'Clear' => 'Selkeä', 'Deep' => 'Syvä', 'Landscape' => 'Maisema', 'Light' => 'Valoisa', 'Neutral' => 'Neutraali', 'Night View/Portrait' => 'Yönäkymä', 'Portrait' => 'Muotokuva', 'Sepia' => 'Seepia', 'Standard' => 'Vakio', 'Sunset' => 'Auringonlasku', 'Vivid' => 'Heleät värit', }, }, 'CreatorAddress' => 'Tekijä - Osoite', 'CreatorCity' => 'Tekijä - Kaupunki', 'CreatorCountry' => 'Tekijä - Maa', 'CreatorPostalCode' => 'Tekijä - Postinumero', 'CreatorRegion' => 'Tekijä - Valtio/Provinssi', 'CreatorWorkEmail' => 'Tekijä - email(it)', 'CreatorWorkTelephone' => 'Tekijä - Puhelinnumero(t)', 'CreatorWorkURL' => 'Tekijä - Web-sivusto(t)', 'Credit' => 'Tarjoaja', 'CropBottom' => 'Rajaus alhaalta', 'CropData' => 'Rajausdata', 'CropLeft' => 'Rajaus vasemmalta', 'CropOutputHeight' => 'Rajaustuloksen korkeus', 'CropOutputPixels' => 'Rajaustulokset pikselit', 'CropOutputResolution' => 'Rajaustuloksen resoluutio', 'CropOutputScale' => 'Rajaustuloksen mittasuhteet', 'CropOutputWidth' => 'Rajaustuloksen leveys', 'CropRight' => 'Rajaus oikealta', 'CropScaledResolution' => 'Rajauksen skaalausresoluutio', 'CropSourceResolution' => 'Rajauslähteen resoluutio', 'CropTop' => 'Rajaus ylhäältä', 'CurrentICCProfile' => 'Nykyinen ICC-profiili', 'CurrentPreProfileMatrix' => 'Nykyinen pre-profiilimatriisi', 'Curves' => 'Käyrät', 'Custom1' => 'Mukautus 1', 'Custom2' => 'Mukautus 2', 'Custom3' => 'Mukautus 3', 'Custom4' => 'Mukautus 4', 'CustomRendered' => { Description => 'Mukautettu kuvankäsittely', PrintConv => { 'Custom' => 'Mukautettu käsittely', 'Normal' => 'Normaali käsittely', }, }, 'CustomSaturation' => 'Mukautettu värikylläisyys', 'D-LightingHQColorBoost' => 'D-Lighting HQ -väritehostus', 'D-LightingHQHighlight' => 'D-Lighting HQ -valoalue', 'D-LightingHQSelected' => 'Valittu D-Lighting HQ', 'D-LightingHQShadow' => 'D-Lighting HQ -varjoalue', 'D-LightingHSAdjustment' => 'D-Lighting HS -säätö', 'D-LightingHSColorBoost' => 'D-Lighting HS -väritehostus', 'DECPosition' => 'DEC-sijainti', 'DNGBackwardVersion' => 'Edellinen DNG-versio', 'DNGVersion' => 'DNG-versio', 'DSPFirmwareVersion' => 'DSP-laiteohjelmistoversio', 'DataDump' => 'Datadumppi', 'DataImprint' => 'Datan sisällytys', 'DataType' => 'Mattaus', 'Date' => 'Päiväys', 'DateCreated' => 'Luontipäiväys', 'DateImprint' => 'Päiväysleima', 'DateSent' => 'Lähetyspäivä', 'DateStampMode' => 'Päiväysleiman muoto', 'DateTime' => 'Päiväysaika', 'DateTimeOriginal' => 'Alkuperäisen datan luonnin päiväys ja aika', 'DealerIDNumber' => 'Myyjän ID-numero', 'DefaultCropOrigin' => 'Oletusrajauksen alkuperä', 'DefaultCropSize' => 'Oletusrajauskoko', 'DefaultScale' => 'Oletusasteikko', 'DeletedImageCount' => 'Poistettujen kuvien määrä', 'Description' => 'Deskriptio', 'Destination' => 'Kohde', 'DestinationCity' => 'Kohdepaikkakunta', 'DestinationCityCode' => 'Kohdepaikkakoodi', 'DestinationDST' => { Description => 'Kohteen kesäaika (DST)', PrintConv => { 'No' => 'Ei', 'Yes' => 'Kyllä', }, }, 'DevelopmentDynamicRange' => 'Dynamiikka-alueen kehitys', 'DeviceAttributes' => 'Laiteattribuutit', 'DeviceManufacturer' => 'Laitteen valmistaja', 'DeviceMfgDesc' => 'Laitteen valmistajan kuvaus', 'DeviceModel' => 'Laitteen malli', 'DeviceModelDesc' => 'Laitemallin kuvaus', 'DeviceSettingDescription' => 'Laiteasetusten kuvaus', 'DigitalCreationDate' => 'Digitalisointipäiväys', 'DigitalCreationTime' => 'Digitalisointiaika', 'DigitalDEEHighlightAdj' => 'Digitaalinen DEE -vaalean pään säätö', 'DigitalDEEShadowAdj' => 'Digitaalinen DEE-varjonsäätö', 'DigitalDEEThreshold' => 'Digitaalinen DEE-kynnys', 'DigitalEffectsName' => 'Digitaalisten efektien nimi', 'DigitalEffectsType' => 'Digitaalisten efektien tyyppi', 'DigitalEffectsVersion' => 'Digitaalisten efektien versio', 'DigitalGEM' => 'Digitaalinen GEM', 'DigitalGain' => 'Digitaalinen vahvistus', 'DigitalICE' => 'Digitaalinen ICE', 'DigitalROC' => 'Digitaalinen ROC', 'DigitalZoom' => 'Digitaalinen zoom', 'DigitalZoomOn' => { Description => 'Digitaalinen zoom', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'DigitalZoomRatio' => 'Digitaalinen zoomaussuhde', 'DirectoryIndex' => 'Kansioindeksi', 'DirectoryNumber' => 'Kansion numero', 'DisplayAperture' => 'Aukon näyttö', 'DisplayedUnitsX' => 'Vaakaresoluution yksikkö', 'DisplayedUnitsY' => 'Pystyresoluution yksikkö', 'DistortionCorrection' => 'Vääristymäkorjaus', 'DocumentHistory' => 'Dokumentin historia', 'DocumentName' => 'Dokumentin nimi', 'DocumentNotes' => 'Dokumentin huomautukset', 'DotRange' => 'Pisteiden määrä', 'DriveMode' => 'Kuvaustapa', 'DriveMode2' => 'Kuvaustapa 2', 'DustRemovalData' => 'Pölynpoistodata', 'DynamicAFArea' => 'Dynaamisen alueen AF', 'DynamicRange' => { Description => 'Dynamiikka-alue', PrintConv => { 'Standard' => 'Vakio', 'Wide' => 'Laaja', }, }, 'DynamicRangeExpansion' => { Description => 'Dynamiikka-alueen laajennus', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'DynamicRangeOptimizer' => { Description => 'Dynamiikka-alueen optimointi', PrintConv => { 'Advanced Auto' => 'Edistynyt automatiikka', 'Advanced Lv1' => 'Edistynyt taso 1', 'Advanced Lv2' => 'Edistynyt taso 2', 'Advanced Lv3' => 'Edistynyt taso 3', 'Advanced Lv4' => 'Edistynyt taso 4', 'Advanced Lv5' => 'Edistynyt taso 5', 'Off' => 'Pois', 'Standard' => 'Vakio', }, }, 'DynamicRangeSetting' => { Description => 'Dynamiikka-alueen säätö', PrintConv => { 'Film Simulation' => 'Filminsimulaatio', 'Standard (100%)' => 'Vakio (100%)', 'Wide1 (230%)' => 'Laaja 1 (230%)', 'Wide2 (400%)' => 'Laaja 2 (400%)', }, }, 'E-DialInProgram' => 'Säätökiekko ohjelmassa', 'EVStepInfo' => 'EV-askeltiedot', 'EVStepSize' => 'EV-askeleen koko', 'EVSteps' => 'EV-askeleet', 'EasyExposureCompensation' => 'Valotuksen pikakorjaus', 'EasyMode' => 'Helppo tapa', 'EdgeNoiseReduction' => 'Reunakohinan vaimennus', 'EditStatus' => 'Editoinnin tila', 'EditTagArray' => 'Muokkaa tagiryhmää', 'EditorialUpdate' => { Description => 'Sisällön päivitys', PrintConv => { 'Additional language' => 'Lisäkielet', }, }, 'EffectiveLV' => 'Tehollinen valoarvo (LV)', 'EffectiveMaxAperture' => 'Suurin tehollinen aukko', 'Encoder' => 'Kooderi', 'EncodingProcess' => 'Koodausmetodi', 'EndPoints' => 'Loppupisteet', 'EnhanceDarkTones' => 'Tummien sävyjen parantelu', 'Enhancement' => { Description => 'Parantelu', PrintConv => { 'Blue' => 'Sininen', 'Flesh Tones' => 'Lihanvärinen', 'Green' => 'Vihreä', 'Off' => 'Pois', 'Red' => 'Punainen', }, }, 'EnhancerValues' => 'Korjainarvot', 'EnvelopeNumber' => 'Pakkauksen numero', 'EnvelopePriority' => { Description => 'Pakkauksen prioriteetti', PrintConv => { '0 (reserved)' => '0 (varattu tulevaan käyttöön)', '1 (most urgent)' => '1 (hyvin kiireellinen)', '5 (normal urgency)' => '5 (normaali kiireellisyys)', '8 (least urgent)' => '8 (lievän kiireellinen)', '9 (user-defined priority)' => '9 (käyttäjän määrittämä prioriteetti)', }, }, 'EnvelopeRecordVersion' => 'Pakkaustietueen versio', 'EpsonImageHeight' => 'Epson-kuvan korkeus', 'EpsonImageWidth' => 'Epson-kuvan leveys', 'EpsonSoftware' => 'Epson-ohjelmisto', 'Equipment' => 'Välineistön IFD-osoitin', 'EquipmentVersion' => 'Välineistöversio', 'ExcursionTolerance' => { Description => 'Toleranssin ekskursio', PrintConv => { 'Allowed' => 'Voi toteutua', 'Not Allowed' => 'Ei sallittu (oletus)', }, }, 'ExifCameraInfo' => 'Exif-kameratiedot', 'ExifImageHeight' => 'Kuvan korkeus', 'ExifImageWidth' => 'Kuvan leveys', 'ExifVersion' => 'Exif-versio', 'ExitPupilPosition' => 'Lähtöpupillin sijainti', 'ExpandFilm' => 'Filmilaajennus', 'ExpandFilterLens' => 'Suodinlinssilaajennus', 'ExpandFlashLamp' => 'Salamavalolaajennus', 'ExpandLens' => 'Objektiivilaajennus', 'ExpandScanner' => 'Skannerilaajennus', 'ExpandSoftware' => 'Ohjelmistolaajennus', 'ExpirationDate' => 'Päättymispäiväys', 'ExpirationTime' => 'Päättymisaika', 'Exposure' => 'Valotus', 'ExposureBracketStepSize' => 'Valotuksen haarukointiväli', 'ExposureBracketValue' => 'Valotushaarukoinnin arvo', 'ExposureCompensation' => 'Valotuksen korjaus', 'ExposureDelayMode' => 'Valotuksen viivetila', 'ExposureDifference' => 'Valotusero', 'ExposureIndex' => 'Valotusindeksi', 'ExposureMode' => { Description => 'Valotustapa', PrintConv => { 'Aperture Priority' => 'Aukon esivalinta', 'Aperture-priority AE' => 'Aukon esivalinta AE', 'Auto' => 'Automaattinen', 'Auto bracket' => 'Automaattihaarukointi', 'Landscape' => 'Maisema', 'Manual' => 'Manuaalinen', 'Night Scene / Twilight' => 'Yönäkymä', 'Program' => 'Ohjelma', 'Program AE' => 'Ohjelma-AE', 'Program-shift' => 'Ohjelma-siirto', 'Shutter Priority' => 'Ajan esivalinta', 'Shutter speed priority AE' => 'Ajan esivalinta AE', 'n/a' => 'Ei asetettu', }, }, 'ExposureProgram' => { Description => 'Valotusohjelma', PrintConv => { 'Action (High speed)' => 'Toimintaohjelma (painotettu suljinnopeutta)', 'Aperture-priority AE' => 'Aukon esivalinta', 'Creative (Slow speed)' => 'Luova ohjelma (painotettu syväterävyyttä)', 'Landscape' => 'Maisemamoodi (maisemakuviin terävällä taustalla)', 'Manual' => 'Manuaalinen', 'Not Defined' => 'Ei määritetty', 'Portrait' => 'Muotokuvamoodi (lähikuviin epäterävällä taustalla)', 'Program AE' => 'Normaali ohjelma', 'Shutter speed priority AE' => 'Ajan esivalinta', }, }, 'ExposureTime' => 'Valotusaika', 'ExposureTime2' => 'Valotusaika 2', 'ExposureWarning' => { Description => 'Valotusvaroitus', PrintConv => { 'Bad exposure' => 'Valotusvirhe', 'Good' => 'OK', }, }, 'ExtendedWBDetect' => { Description => 'Laajennettu valkotas. tunnistus', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'Extender' => 'Konvertteri', 'ExtenderFirmwareVersion' => 'Konvertterin laiteohjelmistoversio', 'ExtenderModel' => 'Konvertterimalli', 'ExtenderSerialNumber' => 'Konvertterin sarjanumero', 'ExternalFlash' => 'Ulkoinen salama', 'ExternalFlashAE1' => 'Ulkoinen salama AE 1?', 'ExternalFlashAE1_0' => 'Ulkoinen salama AE 1 (0)?', 'ExternalFlashAE2' => 'Ulkoinen salama AE 2?', 'ExternalFlashAE2_0' => 'Ulkoinen salama AE 2 (0)?', 'ExternalFlashBounce' => { Description => 'Ulkoisen salaman heijastus', PrintConv => { 'Bounce or Off' => 'Heijastus tai pois', 'Direct' => 'Suora', 'No' => 'Ei', 'Yes' => 'Kyllä', }, }, 'ExternalFlashExposureComp' => 'Ulkoisen salaman valotuksen säätö', 'ExternalFlashFlags' => 'Ulkoisen salaman liput', 'ExternalFlashGuideNumber' => 'Ulkoisen salaman ohjeluku?', 'ExternalFlashMode' => 'Ulkoisen salaman tapa', 'ExternalFlashZoom' => 'Ulkoisen salaman zoom', 'ExtraSamples' => 'Lisänäytteet', 'FNumber' => 'Aukkoarvo', 'Face1Position' => 'Kasvojen 1 sijainti', 'Face2Position' => 'Kasvojen 2 sijainti', 'Face3Position' => 'Kasvojen 3 sijainti', 'Face4Position' => 'Kasvojen 4 sijainti', 'Face5Position' => 'Kasvojen 5 sijainti', 'Face6Position' => 'Kasvojen 6 sijainti', 'Face7Position' => 'Kasvojen 7 sijainti', 'Face8Position' => 'Kasvojen 8 sijainti', 'Face9Position' => 'Kasvojen 9 sijainti', 'FaceDetect' => 'Kasvojen tunnistus', 'FacePositions' => 'Kasvojen sijainnit', 'FacesDetected' => 'Tunnistetut kasvot', 'FaxRecvParams' => 'Faxin vastaanottoparametrit', 'FaxRecvTime' => 'Faxin vastaanottoaika', 'FaxSubAddress' => 'Faxin alaosoite', 'FileFormat' => 'Tiedostomuoto', 'FileIndex' => 'Tiedostoindeksi', 'FileInfo' => 'Tiedostoinfot', 'FileInfoVersion' => 'Tiedostoinfojen versio', 'FileNumber' => 'Tiedoston numero', 'FileNumberMemory' => 'Tiedostonumeromuisti', 'FileNumberSequence' => 'Tiedostojen numerojärjestys', 'FileSize' => 'Tiedoston koko', 'FileSource' => { Description => 'Tiedoston lähde', PrintConv => { 'Digital Camera' => 'Digitaalikamera', 'Film Scanner' => 'Filmiskanneri', 'Reflection Print Scanner' => 'Heijastava skanneri', }, }, 'FileType' => 'Tiedostotyyppi', 'Filename' => 'Tiedostonimi', 'FillOrder' => 'Täyttöjärjestys', 'FilmCategory' => 'Filmiluokka', 'FilmGencode' => 'Filmin gencode', 'FilmMode' => { Description => 'Filmitila', PrintConv => { 'Dynamic (B&W)' => 'Dynaaminen (M&V)', 'Dynamic (color)' => 'Dynaaminen (väri)', 'F0/Standard (PROVIA)' => 'F0/vakio', 'F1/Studio Portrait' => 'F1/studiomuotokuva', 'F1a/Studio Portrait Enhanced Saturation' => 'F1a/studiomuotokuva laajennettu värikylläisyys', 'F1b/Studio Portrait Smooth Skin Tone (ASTIA)' => 'F1b/studiomuotokuva pehmeä ihonväri', 'F1c/Studio Portrait Increased Sharpness' => 'F1c/studiomuotokuva lisätty terävyys', 'F3/Studio Portrait Ex' => 'F3/studiomuotokuva Ex', 'Nature (color)' => 'Luonnollinen (väri)', 'Nostalgic' => 'Nostalginen väri', 'Smooth (B&W)' => 'Pehmeä (M&V)', 'Smooth (color)' => 'Pehmeä (väri)', 'Standard (B&W)' => 'Vakio (M&V)', 'Standard (color)' => 'Vakio (väri)', 'Vibrant' => 'Eloisa väri', }, }, 'FilmProductCode' => 'Filmin tuotekoodi', 'FilmType' => 'Filmityyppi', 'Filter' => 'Suodin', 'FilterEffect' => 'Suodinefekti', 'FilterEffectMonochrome' => 'Yksivärisuodintehoste', 'Firmware' => 'Laiteohjelmisto', 'FirmwareDate' => 'Laiteohjelmiston päiväys', 'FirmwareID' => 'Laiteohjelmiston ID', 'FirmwareRevision' => 'Laiteohjelmiston revisio', 'FirmwareVersion' => 'Laiteohjelmiston versio', 'FixtureIdentifier' => 'Ominaisuuden tunnistin', 'Flash' => { Description => 'Salama', PrintConv => { 'Auto, Did not fire' => 'Salama ei lauennut, automaattimoodi', 'Auto, Did not fire, Red-eye reduction' => 'Automaattinen, salama ei lauennut, punasilmien esto', 'Auto, Fired' => 'Salama lauennut, automaattimoodi', 'Auto, Fired, Red-eye reduction' => 'Salama lauennut, automaattimoodi, punasilmien estomoodi', 'Auto, Fired, Red-eye reduction, Return detected' => 'Salama lauennut, automaattimoodi, heijastusvalo havaittu, punasilmien estomoodi', 'Auto, Fired, Red-eye reduction, Return not detected' => 'Salama lauennut, automaattimoodi, heijastusvaloa ei havaittu, punasilmien estomoodi', 'Auto, Fired, Return detected' => 'Salama lauennut, automaattimoodi. heijastusvalo havaittu', 'Auto, Fired, Return not detected' => 'Salama lauennut, automaattimoodi, heijastusvaloa ei havaittu', 'Fired' => 'Salama lauennut', 'Fired, Red-eye reduction' => 'Salama lauennut, punasilmien estomoodi', 'Fired, Red-eye reduction, Return detected' => 'Salama lauennut, punasilmien estomoodi, heijastusvalo havaittu', 'Fired, Red-eye reduction, Return not detected' => 'Salama lauennut, punasilmien estomoodi, heijastusvaloa ei havaittu', 'Fired, Return detected' => 'Strobo-salaman heijastus havaittu', 'Fired, Return not detected' => 'Strobo-salaman heijastusta ei havaittu', 'No Flash' => 'Salama ei lauennut', 'No flash function' => 'Ei salamatoimintoa', 'Off, Did not fire' => 'Salama ei lauennut, pakkosalamatila', 'Off, Did not fire, Return not detected' => 'Pois, salama ei lauennut, heijastusta ei havaittu', 'Off, No flash function' => 'Pois, ei salamatoimintoa', 'Off, Red-eye reduction' => 'Pois, punasilmien esto', 'On, Did not fire' => 'Päällä, salama ei lauennut', 'On, Fired' => 'Salama lauennut, pakkosalamatila', 'On, Red-eye reduction' => 'Salama lauennut, pakkosalamatila, punasilmien estomoodi', 'On, Red-eye reduction, Return detected' => 'Salama lauennut, pakkosalamatila, punasilmien estomoodi, heijastusvalo havaittu', 'On, Red-eye reduction, Return not detected' => 'Salama lauennut, pakkosalamatila, punasilmien estomoodi, heijastusvaloa ei havaittu', 'On, Return detected' => 'Salama lauennut, pakkosalamatila, heijastusvalo havaittu', 'On, Return not detected' => 'Salama lauennut, pakkosalamatila, heijastusvaloa ei havaittu', }, }, 'FlashActivity' => 'Salaman toiminta', 'FlashBias' => 'Salaman muutos', 'FlashChargeLevel' => 'Salaman varaustila', 'FlashCompensation' => 'Salaman säätö', 'FlashControlMode' => 'Salaman ohjaustapa', 'FlashDevice' => 'Salamalaite', 'FlashDistance' => 'Salamaetäisyys', 'FlashEnergy' => 'Salaman teho', 'FlashExposureBracketValue' => 'Salamavalotuksen haarukoinnin arvo', 'FlashExposureComp' => 'Salaman kirkkauden säätö', 'FlashFired' => { Description => 'Salama lauennut', PrintConv => { 'No' => 'Ei', 'Yes' => 'Kyllä', }, }, 'FlashFirmwareVersion' => 'Salaman laiteohjelmistoversio', 'FlashFocalLength' => 'Salaman polttoväli', 'FlashGuideNumber' => 'Salaman ohjeluku', 'FlashInfoVersion' => 'Salaman tietojen versio', 'FlashIntensity' => { Description => 'Salaman teho', PrintConv => { 'High' => 'Korkea', 'Low' => 'Matala', 'Normal' => 'Normaali', 'Strong' => 'Voimakas', 'Weak' => 'Heikko', }, }, 'FlashMetering' => 'Salamamittaus', 'FlashMeteringSegments' => 'Salaman mittaussegmentit', 'FlashMode' => { Description => 'Salamatapa', PrintConv => { 'Auto' => 'Automaattinen', 'Did Not Fire' => 'Ei lauennut', 'Disabled' => 'Deaktivoitu', 'Fired, Commander Mode' => 'Lauennut, pakkotapa', 'Fired, External' => 'Lauennut, ulkoinen', 'Fired, Manual' => 'Lauennut, manuaalinen', 'Fired, TTL Mode' => 'Lauennut, TTL-tapa', 'Force' => 'Pakkotapa', 'Not Ready' => 'Ei valmis', 'Off' => 'Pois (3)', 'On' => 'Päällä (2)', 'Red eye' => 'Punasilmien esto', }, }, 'FlashModel' => { Description => 'Salaman malli', PrintConv => { 'None' => 'Ei mitään', }, }, 'FlashOptions' => 'Salamavalinnat', 'FlashOutput' => 'Salaman teho', 'FlashRemoteControl' => 'Salaman kaukosäätö', 'FlashSerialNumber' => 'Salaman sarjanumero', 'FlashSetting' => 'Salaman asetus', 'FlashShutterSpeed' => 'Suljinaika salamakuvauksessa', 'FlashStatus' => 'Salaman tila', 'FlashSyncSpeed' => 'Salaman täsmäysaika', 'FlashType' => { Description => 'Salamatyyppi', PrintConv => { 'E-System' => 'E-järjestelmä', 'None' => 'Ei mitään', 'Simple E-System' => 'Yksinkertainen E-järjestelmä', }, }, 'FlashWarning' => 'Salamavaroitus', 'FlashpixVersion' => 'Tuettu Flashpix-versio', 'FlickerReduce' => { Description => 'Värinän vaimennus', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'FlipHorizontal' => 'Kiepautus vaakatasossa', 'FocalLength' => 'Polttoväli', 'FocalLengthIn35mmFormat' => 'Polttoväli 35 mm filmikoolla', 'FocalPlaneDiagonal' => 'Polttopistetason lävistäjä', 'FocalPlaneResolutionUnit' => { Description => 'Polttopistetason resoluutioyksikkö', PrintConv => { 'None' => 'Ei mitään', 'inches' => 'Tuuma', 'um' => 'µm (mikrometri)', }, }, 'FocalPlaneXResolution' => 'Polttopistetason vaakaresoluutio', 'FocalPlaneXSize' => 'Polttopistetason leveys', 'FocalPlaneYResolution' => 'Polttopistetason pystyresoluutio', 'FocalPlaneYSize' => 'Polttopistetason korkeus', 'FocalType' => 'Objektiivityyppi', 'Focus' => 'Tarkennusesivalinta', 'FocusArea' => 'Tarkennusalue', 'FocusAreaSelection' => 'Tarkennusalueen valinta', 'FocusContinuous' => 'Jatkuva tarkennus', 'FocusDistanceLower' => 'Lähitarkennus', 'FocusDistanceUpper' => 'Kaukotarkennus', 'FocusMode' => { Description => 'Tarkennustapa', PrintConv => { 'Auto' => 'Automaattinen', 'Manual' => 'Manuaalinen', }, }, 'FocusMode2' => 'Tarkennustapa', 'FocusPixel' => 'Tarkennuspikseli', 'FocusPosition' => 'Polttopisteen paikka', 'FocusProcess' => 'Tarkennusprosessi', 'FocusRange' => { Description => 'Tarkennusalue', PrintConv => { 'Macro' => 'Makro', 'Normal' => 'Normaali', }, }, 'FocusSetting' => 'Tarkennusasetus', 'FocusStepCount' => 'Tarkennusaskelmäärä', 'FocusWarning' => { Description => 'Tarkennusvaroitus', PrintConv => { 'Good' => 'OK', 'Out of focus' => 'Epätarkka', }, }, 'FolderName' => 'Kansion nimi', 'ForwardMatrix1' => 'Eteenpäin-matriisi 1', 'ForwardMatrix2' => 'Eteenpäin-matriisi 2', 'FrameHeight' => 'Ruudun korkeus', 'FrameNumber' => 'Ruudun numero', 'FrameWidth' => 'Ruudun leveys', 'FreeByteCounts' => 'Vapaiden tavujen määrät', 'FreeMemoryCardImages' => 'Muistikortilla tilaa', 'FreeOffsets' => 'Vapaat siirtymät', 'FujiFlashMode' => { Description => 'Salamatila', PrintConv => { 'External' => 'Ulkoinen salama', 'Off' => 'Pois', 'On' => 'Päällä', 'Red-eye reduction' => 'Punasilmäisyyden vähennys', }, }, 'GEMInfo' => 'GEM-tiedot', 'GEModel' => 'Malli', 'GIFVersion' => 'GIF-versio', 'GPSAltitude' => 'Korkeus', 'GPSAltitudeRef' => { Description => 'Viitekorkeus', PrintConv => { 'Above Sea Level' => 'Merenpinnan korkeus', 'Below Sea Level' => 'Merenpinnan viitekorkeus (negatiivinen arvo)', }, }, 'GPSAreaInformation' => 'GPS-alueen nimi', 'GPSDOP' => 'Mittaustarkkuus', 'GPSDateStamp' => 'GPS-päiväys', 'GPSDestBearing' => 'Kohteen suuntima', 'GPSDestBearingRef' => { Description => 'Kohteen suuntiman viite', PrintConv => { 'Magnetic North' => 'Magneettinen suunta', 'True North' => 'Todellinen suunta', }, }, 'GPSDestDistance' => 'Etäisyys kohteeseen', 'GPSDestDistanceRef' => { Description => 'Viite etäisyydelle kohteeseen', PrintConv => { 'Kilometers' => 'Kilometriä', 'Miles' => 'Mailia', 'Nautical Miles' => 'Solmua', }, }, 'GPSDestLatitude' => 'Kohteen leveysaste', 'GPSDestLatitudeRef' => { Description => 'Kohteen leveysasteen viite', PrintConv => { 'North' => 'Pohjoista leveyttä', 'South' => 'Eteläistä leveyttä', }, }, 'GPSDestLongitude' => 'Kohteen pituusaste', 'GPSDestLongitudeRef' => { Description => 'Kohteen pituusasteen viite', PrintConv => { 'East' => 'Itäistä pituutta', 'West' => 'Läntistä pituutta', }, }, 'GPSDifferential' => { Description => 'GPS-differentiaalikorjaus', PrintConv => { 'Differential Corrected' => 'Differentiaalikorjausta käytetty', 'No Correction' => 'Mittaus ilman differentiaalikorjausta', }, }, 'GPSImgDirection' => 'Kuvan´ suunta', 'GPSImgDirectionRef' => { Description => 'Kuvan suunnan viite', PrintConv => { 'Magnetic North' => 'Magneettinen suunta', 'True North' => 'Todellinen suunta', }, }, 'GPSLatitude' => 'Leveysaste', 'GPSLatitudeRef' => { Description => 'Pohjoista tai eteläistä leveyttä', PrintConv => { 'North' => 'Pohjoista leveyttä', 'South' => 'Eteläistä leveyttä', }, }, 'GPSLongitude' => 'Pituusaste', 'GPSLongitudeRef' => { Description => 'Itäistä tai läntistä pituutta', PrintConv => { 'East' => 'Itäistä pituutta', 'West' => 'Läntistä pituutta', }, }, 'GPSMapDatum' => 'Käytetty geodeettinen karttadata', 'GPSMeasureMode' => { Description => 'GPS-mittaustapa', PrintConv => { '2-Dimensional Measurement' => '2-ulotteinen mittaus', '3-Dimensional Measurement' => '3-ulotteinen mittaus', }, }, 'GPSProcessingMethod' => 'GPS-prosessointimetodin nimi', 'GPSSatellites' => 'Mittaukseen käytetyt GPS-satelliitit', 'GPSSpeed' => 'GPS-vastaanottimen nopeus', 'GPSSpeedRef' => { Description => 'Nopeusyksikkö', PrintConv => { 'km/h' => 'Kilometriä per tunti', 'knots' => 'Solmua', 'mph' => 'Mailia per tunti', }, }, 'GPSStatus' => { Description => 'GPS-vastaanottimen tila', PrintConv => { 'Measurement Active' => 'Mittaus aktiivinen', 'Measurement Void' => 'Mittaus virheellinen', }, }, 'GPSTimeStamp' => 'GPS-aika (atomikello)', 'GPSTrack' => 'Liikkeen suunta', 'GPSTrackRef' => { Description => 'Liikkeen suunnan viite', PrintConv => { 'Magnetic North' => 'Magneettinen suunta', 'True North' => 'Todellinen suunta', }, }, 'GPSVersionID' => 'GPS-tagin versio', 'GainBase' => 'Perusvahvistus', 'GainControl' => { Description => 'Herkkyyden säätö', PrintConv => { 'High gain down' => 'Suuri valoisuuden vähennys', 'High gain up' => 'Suuri valoisuuden lisäys', 'Low gain down' => 'Pieni valoisuuden vähennys', 'Low gain up' => 'Pieni valoisuuden lisäys', 'None' => 'Ei mitään', }, }, 'GammaCompensatedValue' => 'Kompensoidun gamman arvo', 'GeoTiffAsciiParams' => 'Geo-ASCII -parametrien tagi', 'GeoTiffDirectory' => 'Geo-avain -hakemiston tagi', 'GeoTiffDoubleParams' => 'Geo-kaksoisparametrien tagi', 'Gradation' => 'Porrastus', 'GrayPoint' => 'Harmaapiste', 'GrayResponseCurve' => 'Harmaan vastekäyrä', 'GrayResponseUnit' => { Description => 'Harmaan vasteyksikkö', PrintConv => { '0.0001' => 'Numero edustaa yksikön tuhannesosia', '0.001' => 'Numero edustaa yksikön sadasosia', '0.1' => 'Numero edustaa yksikön kymmenyksiä', '1e-05' => 'Numero edustaa yksikön kymmenestuhannesosia', '1e-06' => 'Numero edustaa yksikön sadastuhannesosia', }, }, 'GrayScale' => 'Harmaa-asteikko', 'GrayTRC' => 'Harmaan toonin toistokäyrä', 'GreenMatrixColumn' => 'Vihreän matriisin sarake', 'GreenTRC' => 'Vihreän toonin toistokäyrä', 'GreenX' => 'Vihreä X', 'GreenY' => 'Vihreä Y', 'GridDisplay' => 'Ristikko', 'HCUsage' => 'HC-käyttö', 'HalftoneHints' => 'Puolisävyviitteet', 'Headline' => 'Otsikko', 'HighISONoiseReduction' => { Description => 'Korkean ISO-tason kohinan vaimennus', PrintConv => { 'High' => 'Korkea', 'Low' => 'Matala', 'Minimal' => 'Minimaalinen', 'Normal' => 'Normaali', 'Off' => 'Pois', }, }, 'Highlight' => 'Valoalue', 'HighlightData' => 'Valoalueen data', 'HighlightProtection' => 'Valoalueen suojaus', 'HometownCity' => 'Kotiseutu', 'HometownCityCode' => 'Kotiseutukoodi', 'HometownDST' => { Description => 'Kotiseudun kesäaika (DST)', PrintConv => { 'No' => 'Ei', 'Yes' => 'Kyllä', }, }, 'HostComputer' => 'Isäntätietokone', 'Hue' => 'Sävy', 'HueAdjustment' => 'Värisävyn säätö', 'HueSetting' => 'Sävyn asetus', 'HuffmanTable' => 'Huffman-taulukko', 'ICCProfile' => 'ICC-profiili', 'ICC_Profile' => 'ICC-syötteen väriprofiili', 'IPTC-NAA' => 'IPTC-NAA -metadata', 'IPTCBitsPerSample' => 'Bittien määrä per näyte', 'IPTCData' => 'IPTC-data', 'IPTCDigest' => 'IPTC-yhteenveto', 'IPTCImageHeight' => 'Viivojen määrä', 'IPTCImageRotation' => { Description => 'Kuvan kierto', PrintConv => { '0' => 'Ei kiertoa', '180' => '180 asteen kierto', '270' => '270 asteen kierto', '90' => '90 asteen kierto', }, }, 'IPTCImageWidth' => 'Pikseleitä per viiva', 'IPTCPictureNumber' => 'Kuvan numero', 'IPTCPixelHeight' => 'Pikselikoko suorassa kulmassa skannaussuuntaan', 'IPTCPixelWidth' => 'Pikselikoko skannaussuunnassa', 'ISO' => 'ISO-herkkyys', 'ISOAuto' => 'Automaattinen ISO', 'ISODisplay' => 'ISO-näyttö', 'ISOExpansion' => 'ISO-laajennus', 'ISOFloor' => 'ISO-alaraja', 'ISOInfo' => 'ISO-tiedot', 'ISOSelection' => 'ISO-valinta', 'ISOSetting' => 'ISO-asetus', 'ISOValue' => 'ISO-arvo', 'IT8Header' => 'IT8-ylätunniste', 'Illumination' => 'Näytön valaisu', 'ImageAdjustment' => 'Kuvan säätö', 'ImageAreaOffset' => 'Kuva-alueen siirtymä', 'ImageAuthentication' => { Description => 'Kuvan aitoustodennus', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'ImageBoundary' => 'Kuvan rajat', 'ImageByteCount' => 'Kuvan tavumäärä', 'ImageColorIndicator' => 'Kuvan värin ilmaisin', 'ImageColorValue' => 'Kuvan värin arvo', 'ImageCount' => 'Kuvamäärä', 'ImageData' => 'Kuvadata', 'ImageDataDiscard' => { Description => 'Kuvadatan hylkäys', PrintConv => { 'Flexbits Discarded' => 'FlexBits hylätty', 'Full Resolution' => 'Täysi resoluutio', 'HighPass Frequency Data Discarded' => 'Ylipäästötaajuusdata hylätty', 'Highpass and LowPass Frequency Data Discarded' => 'Yli- ja alipäästötaajuusdata hylätty', }, }, 'ImageDataSize' => 'Kuvadatan koko', 'ImageDepth' => 'Kuvan syvyys', 'ImageDescription' => 'Kuvan otsake', 'ImageDustOff' => 'Kuvan pölynpoisto', 'ImageEditCount' => 'Kuvan prosessointimäärä', 'ImageHeight' => 'Kuvan korkeus', 'ImageHistory' => 'Kuvahistoria', 'ImageID' => 'Kuvan ID', 'ImageInfo' => 'Kuvatiedot', 'ImageLayer' => 'Kuvataso', 'ImageNumber' => 'Tiedostonumero', 'ImageOffset' => 'Kuvan siirtrymä', 'ImageOptimization' => 'Kuvan optimointi', 'ImageOrientation' => { Description => 'Kuvan suunta', PrintConv => { 'Landscape' => 'Vaakakuva', 'Portrait' => 'Pystykuva', 'Square' => 'Neliömäinen', }, }, 'ImagePrintStatus' => 'Kuvan tulostuksen tila', 'ImageProcessing' => 'Kuvan prosessointi', 'ImageProcessingVersion' => 'Kuvaprosessoinnin versio', 'ImageQuality' => 'Kuvan laatu', 'ImageQuality2' => 'Kuvan laatu 2', 'ImageReview' => 'Kuvan tarkastelu', 'ImageReviewTime' => 'Kuvan katseluaika', 'ImageRotationStatus' => 'Kuvan kierron tila', 'ImageSize' => 'Kuvakoko', 'ImageSourceData' => 'Kuvan lähdedata', 'ImageSourceEK' => 'EK-kuvalähde', 'ImageStabilization' => { Description => 'Kuvanvakautus', PrintConv => { 'Best Shot' => 'Paras kuva', 'Off' => 'Pois', 'On' => 'Päällä', 'On, Mode 1' => 'Päällä, tapa 1', 'On, Mode 2' => 'Päällä, tapa 2', }, }, 'ImageTone' => { Description => 'Kuvamuoto', PrintConv => { 'Bleach Bypass' => 'Bleach bypass -esivalotus', 'Bright' => 'Kirkas', 'Landscape' => 'Maisema', 'Monochrome' => 'Yksivärinen', 'Muted' => 'Vaimennettu', 'Natural' => 'Luonnollinen', 'Portrait' => 'Muotokuva', 'Reversal Film' => 'Kääntöfilmi', 'Vibrant' => 'Eloisa', }, }, 'ImageType' => 'Sivu', 'ImageUniqueID' => 'Kuvan uniikki ID', 'ImageWidth' => 'Kuvan leveys', 'Indexed' => 'Indeksoitu', 'InkNames' => 'Musteiden nimet', 'InkSet' => 'Mustesarja', 'IntellectualGenre' => 'Intellektuaalinen genre', 'IntelligentAuto' => 'Intelligentti automatiikka', 'IntergraphMatrix' => 'Intergraph-matriisi -tagi', 'Interlace' => 'Lomitus', 'InternalFlash' => { Description => 'Sisäinen salama', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'InternalFlashAE1' => 'Sisäinen salama AE 1?', 'InternalFlashAE1_0' => 'Sisäinen salama AE 1 (0)?', 'InternalFlashAE2' => 'Sisäinen salama AE 2?', 'InternalFlashAE2_0' => 'Sisäinen salama AE 2 (0)?', 'InternalFlashMode' => 'Sisäisen salaman tapa', 'InternalFlashStrength' => 'Sisäisen salaman teho', 'InternalFlashTable' => 'Sisäisen salaman taulukko', 'InternalSerialNumber' => 'Sisäinen sarjanumero', 'InteropIndex' => { Description => 'Interoperabiliteetin identifiointi', PrintConv => { 'R03 - DCF option file (Adobe RGB)' => 'R03: DCF-valintatiedosto (Adobe RGB)', 'R98 - DCF basic file (sRGB)' => 'R98: DCF-perustiedosto (sRGB)', 'THM - DCF thumbnail file' => 'THM: DCF-näytekuvatiedosto', }, }, 'InteropVersion' => 'Interoperabiliteetin versio', 'IntervalLength' => 'Ajastusvälin pituus', 'IntervalMode' => 'Ajastettu kuvaustapa', 'IntervalNumber' => 'Ajastuksen numero', 'JFIFVersion' => 'JFIF-versio', 'JPEGACTables' => 'JPEG:n AC-taulukot', 'JPEGDCTables' => 'JPEG:n DC-taulukot', 'JPEGLosslessPredictors' => 'JPEG:n häviöttömät prediktorit', 'JPEGPointTransforms' => 'JPEG:n pistemuunnot', 'JPEGProc' => 'JPEG-proc', 'JPEGQTables' => 'JPEG:n Q-taulukot', 'JPEGQuality' => { Description => 'JPEG-laatu', PrintConv => { 'Extra Fine' => 'Erityishieno', 'Fine' => 'Hieno', 'Standard' => 'Normaali', 'n/a' => 'Ei asetettu', }, }, 'JPEGRestartInterval' => 'JPEG:n uudelleenaloitusväli', 'JPEGTables' => 'JPEG-taulukot', 'JobID' => 'Työn ID', 'Keyword' => 'Avainsana', 'Keywords' => 'Avainsana', 'LCDIllumination' => 'LCD:n valaisu', 'Language' => 'Kieli', 'LanguageIdentifier' => 'Kielen tunnistin', 'LastFileNumber' => 'Viimeinen tiedostonumero', 'LeafData' => 'Leaf-data', 'Lens' => 'Objektiivi', 'LensApertureRange' => 'Objektiivin aukkoalue', 'LensDataVersion' => 'Objektiividatan versio', 'LensDistortionParams' => 'Linssivääristymän parametrit', 'LensFStops' => 'Objektiivin aukkoarvot', 'LensFirmwareVersion' => 'Objektiivin laiteohjelmistoversio', 'LensID' => 'Objektiivin ID', 'LensIDNumber' => 'Objektiivin ID-numero', 'LensInfo' => 'Objektiivin tiedot', 'LensSerialNumber' => 'Objektiivin sarjanumero', 'LensTemperature' => 'Objektiivin lämpötila', 'LensType' => 'Objektiivityyppi', 'LightCondition' => 'Valaistusolot', 'LightReading' => 'Valolukema', 'LightSource' => { Description => 'Valonlähde', PrintConv => { 'Cloudy' => 'Pilvinen', 'Cool White Fluorescent' => 'Viileä valkoinen loistelamppu (W 3900 - 4500K)', 'Day White Fluorescent' => 'Valkoinen päivänvaloloistelamppu (N 4600 - 5400K)', 'Daylight' => 'Päivänvalo', 'Daylight Fluorescent' => 'Päivänvaloloistelamppu (D 5700 - 7100K)', 'Fine Weather' => 'Pilvetön', 'Flash' => 'Salama', 'Fluorescent' => 'Loistevalo', 'ISO Studio Tungsten' => 'ISO studiokeinovalo (hehkulamppu)', 'Other' => 'Muu valonlähde', 'Shade' => 'Varjo', 'Standard Light A' => 'Standardivalo A', 'Standard Light B' => 'Standardivalo B', 'Standard Light C' => 'Standardivalo C', 'Tungsten (Incandescent)' => 'Keinovalo (hehkulamppu)', 'Unknown' => 'Tuntematon', 'White Fluorescent' => 'Lämmin valkoinen loistelamppu (WW 3200 - 3700K)', }, }, 'LightSourceSpecial' => { Description => 'Erikoisvalonlähde', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'LinearResponseLimit' => 'Lineaarisen vasteen raja', 'LinearizationTable' => 'Linearisaatiotaulukko', 'LiveViewAF' => 'Suoranäyttö-AF', 'LocalizedCameraModel' => 'Lokalisoitu kameramalli', 'Location' => 'Sijainti', 'LongExposureNoiseReduction' => { Description => 'Pitkien valotusten kohinan vaimennus', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', 'n/a' => 'Ei asetettu', }, }, 'LookupTable' => 'Hakutaulukko', 'Luminance' => 'Luminanssi', 'MB-D10BatteryType' => 'MB-D10 -paristotyyppi', 'MB-D80Batteries' => 'MB-D80 -paristot', 'MCUVersion' => 'MCU-versio', 'Macro' => { Description => 'Makro', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', 'n/a' => 'Ei asetettu', }, }, 'MacroMode' => { Description => 'Makrotapa', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', 'Super Macro' => 'Supermakro', 'Tele-Macro' => 'Telemakro', }, }, 'Magnification' => 'Suurennus', 'Make' => 'Valmistaja', 'MakeAndModel' => 'Valmistaja ja malli', 'MakerNote' => 'DNG-erityistiedot', 'MakerNoteOffset' => 'Valmistajatietojen siirtymä', 'MakerNoteSafety' => { Description => 'Valmistatietojen turvallisuus', PrintConv => { 'Safe' => 'Turvallinen', 'Unsafe' => 'Turvaton', }, }, 'MakerNoteType' => 'Valmistajatietojen tyyppi', 'MakerNoteVersion' => 'Valmistajatietojen versio', 'ManometerPressure' => 'Manometrin ilmaisema paine', 'ManualFlash' => 'Manuaalinen salama', 'ManualFlashOutput' => 'Salaman käsisäätö', 'ManualFocusDistance' => 'Manuaalinen etäisyydensäätö', 'ManufactureDate' => 'Valmistuspäiväys', 'MaskedAreas' => 'Maskilliset alueet', 'MasterDocumentID' => 'Alkuperäisdokumentin ID', 'MasterGain' => 'Yleisvahvistus', 'Matteing' => 'Mattaus', 'MaxAperture' => 'Suurin aukko', 'MaxApertureAtCurrentFocal' => 'Suurin aukko nykyisellä polttovälillä', 'MaxApertureAtMaxFocal' => 'Suurin aukko pisimmällä polttovälillä', 'MaxApertureAtMinFocal' => 'Suurin aukko lyhimmällä polttovälillä', 'MaxApertureValue' => 'Objektiivin maksimiaukko', 'MaxFocalLength' => 'Pisin polttoväli', 'MaxSampleValue' => 'Näytteen maksimiarvo', 'MaximumDensityRange' => 'Tiheyden maksimilaajuus', 'MeasuredEV' => 'Mitattu EV', 'MeasurementBacking' => 'Mittaustuenta', 'MeasurementFlare' => 'Hajavalomittaus', 'MeasurementGeometry' => 'Mittausgeometria', 'MeasurementIlluminant' => 'Valaistusmittaus', 'MeasurementObserver' => 'Mittauksen tarkkailija', 'MediaBlackPoint' => 'Median musta piste', 'MediaWhitePoint' => 'Median valkoinen piste', 'Medium' => 'Keskikokoa', 'MetadataNumber' => 'Metadatan määrä', 'Metering' => 'Valonmittaus', 'MeteringMode' => { Description => 'Valonmittaustapa', PrintConv => { 'Average' => 'Keskiarvo', 'Center-weighted average' => 'Keskustapainotteinen keskiarvo', 'Multi-segment' => 'Monisegmenttimittaus', 'Multi-spot' => 'Monipiste', 'Other' => 'Muu', 'Partial' => 'Osa-alue', 'Pattern+AF' => 'Kuvio + AF', 'Spot' => 'Pistemittaus', 'Spot+Highlight control' => 'Pistemittaus + valoalueen säätö', 'Spot+Shadow control' => 'Pistemittaus + varjoalueen säätö', 'Unknown' => 'Tuntematon', }, }, 'MeteringTime' => 'Mittausaika', 'MinAperture' => 'Pienin aukko', 'MinFocalLength' => 'Lyhin polttoväli', 'MinSampleValue' => 'Näytteen minimiarvo', 'MinoltaCameraSettings2' => 'Kameran asetukset 2', 'MinoltaCameraSettings5D' => 'Kameran asetukset (5D)', 'MinoltaCameraSettings7D' => 'Kamera-asetukset (7D)', 'MinoltaMakerNote' => 'Minolta-valmistajatiedot', 'MinoltaQuality' => { Description => 'Kuvakoko', PrintConv => { 'Economy' => 'Taloudellinen', 'Extra fine' => 'Erityishieno', 'Fine' => 'Hieno', 'Standard' => 'Normaali', 'Super Fine' => 'Superhieno', }, }, 'Model' => 'Malli', 'Model2' => 'Kuvasyötelaitteen malli (2)', 'ModelAndVersion' => 'Malli ja versio', 'ModelTiePoint' => 'Sidospistemalli-tagi', 'ModelTransform' => 'Muuntomalli-tagi', 'ModelingFlash' => 'Mallinnussalama', 'ModifiedDigitalGain' => 'Modifioitu digitaalinen vahvistus', 'ModifiedInfo' => 'Modifioidut tiedot', 'ModifiedParamFlag' => 'Modifioitu parametrilippu', 'ModifiedPictureStyle' => 'Modifioitu kuvan tyyli', 'ModifiedSaturation' => { Description => 'Modifoitu värikylläisyys', PrintConv => { 'CM1 (Red Enhance)' => 'CM1 (punaisen parantelu)', 'CM2 (Green Enhance)' => 'CM2 (vihreän parantelu)', 'CM3 (Blue Enhance)' => 'CM3 (sinisen parantelu)', 'CM4 (Skin Tones)' => 'CM4 (ihonvärin parantelu)', 'Off' => 'Pois', }, }, 'ModifiedSensorBlueLevel' => 'Modifioitu anturin sinitaso', 'ModifiedSensorRedLevel' => 'Modifioitu anturin punataso', 'ModifiedSharpness' => 'Modifioitu terävyys', 'ModifiedToneCurve' => 'Modifioitu sävykäyrä', 'ModifiedWhiteBalance' => 'Modifioitu valkotasapaino', 'ModifiedWhiteBalanceBlue' => 'Modifioitu valkotasapainon sininen', 'ModifiedWhiteBalanceRed' => 'Modifioitu valkotasapainon punainen', 'ModifyDate' => 'Tiedostomuutoksen päiväys ja aika', 'MultiExposure' => 'Monivalotusdata', 'MultiExposureAutoGain' => 'Monivalotuksen automaattivalotus', 'MultiExposureMode' => 'Monivalotustapa', 'MultiExposureShots' => 'Monivalotusotoksia', 'MultiExposureVersion' => 'Monivalotusdatan versio', 'MultiSample' => 'Moninäyte', 'MultiSelector' => 'Monivalitsin', 'MultipleExposureSet' => 'Monivalotus', 'MyColorMode' => 'Oma värimuoto', 'NDFilter' => 'ND-suodin', 'NEFLinearizationTable' => 'Linearisaatiotaulukko', 'NamedColor2' => 'Nimetty väri 2', 'NativeDisplayInfo' => 'Paikallisen näytön tiedot', 'NativeResolutionUnit' => 'Paikallisen resoluution yksikkö', 'NativeXResolution' => 'Paikallinen vaakaresoluutio', 'NativeYResolution' => 'Paikallinen pystyresoluutio', 'NikonCaptureData' => 'Nikon Capture -data', 'NikonCaptureOffsets' => 'Nikon Capture -siirtymät', 'NikonCaptureOutput' => 'Nikon Capture -tuotos', 'NikonCaptureVersion' => 'Nikon Capture -versio', 'NikonICCProfile' => 'Nikon ICC-profiilin osoitin', 'NoMemoryCard' => 'Ei muistikorttia', 'Noise' => 'Kohina', 'NoiseFilter' => 'Kohinasuodin', 'NoiseReduction' => { Description => 'Kohinan vähennys', PrintConv => { 'High (+1)' => '+1 (korkea)', 'Highest (+2)' => '+2 (korkein)', 'Low' => 'Matala', 'Low (-1)' => '-1 (matala)', 'Lowest (-2)' => '-2 (matalin)', 'Normal' => 'Vakio', 'Off' => 'Pois', 'On' => 'Päällä', 'Standard' => '±0 (vakio)', }, }, 'NoiseReductionApplied' => 'Suoritettu kohinan vähennys', 'NoiseReductionData' => 'Kohinanvaimennusdata', 'NoiseReductionIntensity' => 'Kohinanvaimennuksen voimakkuus', 'NoiseReductionMethod' => 'Kohinanvaimennusmetodi', 'NoiseReductionSharpness' => 'Kohinanvaimennuksen terävyys', 'NumIndexEntries' => 'Indeksimerkintöjen määrä', 'NumberOfChannels' => 'Kanavien määrä', 'NumberofInks' => 'Musteiden numerot', 'OPIProxy' => 'OPI-välipalvelin', 'ObjectAttributeReference' => 'Intellektuaalinen genre', 'ObjectCycle' => { Description => 'Objektin sykli', PrintConv => { 'Both Morning and Evening' => 'Molempina', 'Evening' => 'Iltaisin', 'Morning' => 'Aamuisin', }, }, 'ObjectDistance' => 'Kohteen etäisyys', 'ObjectName' => 'Nimike', 'ObjectPreviewData' => 'Objektidatan esikatseludata', 'ObjectPreviewFileFormat' => 'Objektidatan esikatselun tiedostomuoto', 'ObjectPreviewFileVersion' => 'Objektidatan esikatselun tiedostomuodon versio', 'ObjectTypeReference' => 'Objektyypin viiteryhmä', 'OffsetSchema' => 'Siirtymäskeema', 'OlympusImageHeight' => 'Kuvan korkeus', 'OlympusImageWidth' => 'Kuvan leveys', 'OneTouchWB' => { Description => 'Pikavalkotasapaino', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', 'On (Preset)' => 'Päällä (esiasetus)', }, }, 'OpticalZoomCode' => 'Optisen zoomin koodi', 'OpticalZoomMode' => { Description => 'Optinen zoomaustapa', PrintConv => { 'Extended' => 'Laajennettu', 'Standard' => 'Vakio', }, }, 'OpticalZoomOn' => { Description => 'Optinen zoom', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'Opto-ElectricConvFactor' => 'Optoelektrinen muuntokerroin', 'OrderNumber' => 'Valokuva-CD:n ostotilausnumero', 'Orientation' => { Description => 'Kuvan suunta', PrintConv => { 'Horizontal (normal)' => '0° (ylä/vasen)', 'Mirror horizontal' => '0° (ylä/oikea)', 'Mirror horizontal and rotate 270 CW' => '90° myötäpäivään (vasen/ylä)', 'Mirror horizontal and rotate 90 CW' => '90° vastapäivään (oikea/ala)', 'Mirror vertical' => '180° (ala/vasen)', 'Rotate 180' => '180° (ala/oikea)', 'Rotate 270 CW' => '90° myötäpäivään (vasen/ala)', 'Rotate 90 CW' => '90° vastapäivään (oikea/ylä)', }, }, 'OriginalDecisionDataOffset' => 'Alkuperäisen ratkaisudatan siirtymä', 'OriginalRawFileData' => 'Originaali raw-tiedoston data', 'OriginalRawFileDigest' => 'Alkuperäisen raw-tiedoston tiivistelmä', 'OriginalRawFileName' => 'Originaali raw-tiedoston nimi', 'OriginalTransmissionReference' => 'Tehtävän tunnistin', 'OriginatingProgram' => 'Luontiohjelma', 'OutputImageHeight' => 'Tuotoskuvan korkeus', 'OutputImageWidth' => 'Tuotoskuvan leveys', 'OutputResolution' => 'Tuotoksen resoluutio', 'OutputResponse' => 'Tuotosvaste', 'OwnerID' => 'Omistajan ID', 'OwnerName' => 'Omistajan nimi', 'Padding' => 'Täyte', 'PageName' => 'Sivun nimi', 'PageNumber' => 'Sivunumero', 'PanasonicExifVersion' => 'Panasonic-exif -versio', 'PanasonicRawVersion' => 'Panasonic-RAW:n versio', 'PanasonicTitle' => 'Otsikko', 'PanoramaDirection' => 'Panoraaman suunta', 'PanoramaMode' => 'Panoraamatapa', 'PentaxImageSize' => { Description => 'Pentax-kuvakoko', PrintConv => { '2304x1728 or 2592x1944' => '2304 x 1728 tai 2592 x 1944', '2560x1920 or 2304x1728' => '2560 x 1920 tai 2304 x 1728', '2816x2212 or 2816x2112' => '2816 x 2212 tai 2816 x 2112', '3008x2008 or 3040x2024' => '3008 x 2008 tai 3040 x 2024', 'Full' => 'Täysi', }, }, 'PentaxVersion' => 'Pentax-versio', 'People' => 'Ihmiset', 'PeripheralLighting' => 'Oheislaitevalaistus', 'PeripheralLightingSetting' => 'Oheislaitevalaistuksen asetus', 'PeripheralLightingValue' => 'Oheislaitevalaistuksen arvo', 'PhotoEffect' => 'Valokuvaefekti', 'PhotoEffects' => 'Valokuvaefektit', 'PhotoEffectsBlue' => 'Valokuvaefekti sininen', 'PhotoEffectsData' => 'Valokuvaefektidata', 'PhotoEffectsGreen' => 'Valokuvaefekti vihreä', 'PhotoEffectsRed' => 'Valokuvaefekti punainen', 'PhotoEffectsType' => 'Valokuvaefektityyppi', 'PhotometricInterpretation' => { Description => 'Pikseliskeema', PrintConv => { 'BlackIsZero' => 'Musta on nolla', 'Color Filter Array' => 'CFA (värisuodinmatriisi)', 'Pixar LogL' => 'CIE Log2(L) (Log-luminanssi)', 'Pixar LogLuv' => 'CIE Log2(L)(u\',v\') (Log-luminanssi ja -krominanssi)', 'RGB Palette' => 'Väripaletti', 'Transparency Mask' => 'Läpinäkyvyysmaski', 'WhiteIsZero' => 'Valkoinen on nolla', }, }, 'PhotoshopBGRThumbnail' => 'Photoshopin BRG-näytekuva', 'PhotoshopFormat' => 'Photoshop-muoto', 'PhotoshopQuality' => 'Photoshop-laatu', 'PictInfo' => 'Kuvatiedot', 'PictureControl' => 'Kuvan optimointi', 'PictureControlActive' => 'Kuvan käsittely aktivoitu', 'PictureControlAdjust' => 'Kuvan optimoinnin säätö', 'PictureControlBase' => 'Kuvan perusoptimointi', 'PictureControlData' => 'Kuvan käsittely', 'PictureControlMode' => 'Kuvan käsittelytapa', 'PictureControlName' => 'Kuvan optimoinnin nimi', 'PictureControlQuickAdjust' => 'Kuvan optimoinnin pikasäätö', 'PictureControlVersion' => 'Kuvan optimoinnin versio', 'PictureFinish' => 'Kuvan viimeistely', 'PictureMode' => { Description => 'Kuvausohjelma', PrintConv => { 'Anti-blur' => 'Epätarkkuden vähennys', 'Aperture-priority AE' => 'Aukon esivalinta AE', 'Auto' => 'Automaattinen', 'Beach' => 'Hiekkaranta', 'Beach & Snow' => 'Hiekkaranta & Lumi', 'Fireworks' => 'Ilotulitus', 'Flower' => 'Kukka', 'Landscape' => 'Maisema', 'Macro' => 'Lähikuva (Kukka)', 'Manual' => 'Manuaalinen', 'Museum' => 'Museo', 'Natural Light' => 'Luonnonvalo', 'Natural Light & Flash' => 'Luonnonvalo & Salama', 'Night Scene' => 'Yö', 'Party' => 'Juhlat', 'Portrait' => 'Muotokuva', 'Program AE' => 'Automaattinen valotusohjelma', 'Shutter speed priority AE' => 'Ajan esivalinta AE', 'Snow' => 'Lumi', 'Sports' => 'Urheilu', 'Sunset' => 'Auringonlasku', 'Text' => 'Teksti', 'Underwater' => 'Veden alla', }, }, 'PictureMode2' => 'Kuvamuoto 2', 'PictureModeBWFilter' => { Description => 'BW-suodin -kuvamuoto', PrintConv => { 'Green' => 'Vihreä', 'Neutral' => 'Neutraali', 'Orange' => 'Oranssi', 'Red' => 'Punainen', 'Yellow' => 'Keltainen', 'n/a' => 'E.s.', }, }, 'PictureModeContrast' => 'Kontrastinen kuvamuoto', 'PictureModeHue' => 'Sävykäs kuvamuoto?', 'PictureModeSaturation' => 'Värikylläinen kuvamuoto', 'PictureModeSharpness' => 'Terävä kuvamuoto', 'PictureModeTone' => { Description => 'Vivahteikas kuvamuoto', PrintConv => { 'Blue' => 'Sininen', 'Green' => 'Vihreä', 'Neutral' => 'Neutraali', 'Purple' => 'Violetti', 'Sepia' => 'Seepia', 'n/a' => 'E.s.', }, }, 'PictureStyle' => 'Kuvan tyyli', 'PixelAspectRatio' => 'Pikselien kokosuhde', 'PixelFormat' => 'Pikseliformaatti', 'PixelIntensityRange' => 'Pikseli-intensiteetin alue', 'PixelScale' => 'Pikseliasteikkomalli-tagi', 'PlanarConfiguration' => { Description => 'Kuvadatan järjestys', PrintConv => { 'Chunky' => 'Lohkoformaatti (lomitettu)', 'Planar' => 'Tasoformaatti', }, }, 'PlaybackMenusTime' => 'Toistovalikkojen aika', 'PowerSource' => 'Virtalähde', 'PreCaptureFrames' => 'Esiasetetut kehykset', 'Predictor' => { Description => 'Prediktori', PrintConv => { 'Horizontal differencing' => 'Horisontaalinen differointi', 'None' => 'Prediktioskeemaa ei käytetty ennen koodausta', }, }, 'Preview' => 'Esikatselu', 'Preview0' => 'Esikatselu 0', 'Preview1' => 'Esikatselu 1', 'Preview2' => 'Esikatselu 2', 'PreviewApplicationName' => 'Sovelluksen nimen esikatselu', 'PreviewApplicationVersion' => 'Sovellusversion esikatselu', 'PreviewColorSpace' => { Description => 'Väriavaruuden esikatselu', PrintConv => { 'Unknown' => 'Tuntematon', }, }, 'PreviewDateTime' => 'Päiväyksen ja ajan esikatselu', 'PreviewImage' => 'Kuvan esikatselu', 'PreviewImageBorders' => 'Kuvan reunojen esikatselu', 'PreviewImageData' => 'Kuvadatan tarkastelu', 'PreviewImageLength' => 'Kuvan pituuden esikatselu', 'PreviewImageSize' => 'Kuvakoon esikatselu', 'PreviewImageStart' => 'Esikatselukuvan alku', 'PreviewImageValid' => { Description => 'Kelvollinen esikatselukuva', PrintConv => { 'No' => 'Ei', 'Yes' => 'Kyllä', }, }, 'PreviewSettingsDigest' => 'Asetustiivistelmän esikatselu', 'PreviewSettingsName' => 'Asetusten nimen esikatselu', 'PrimaryAFPoint' => 'Ensisijainen AF-piste', 'PrimaryChromaticities' => 'Päävärien kromaattisuudet', 'PrimaryPlatform' => 'Primaari alusta', 'PrintQuality' => 'Tulostuslaatu', 'ProcessingInfo' => 'Prosessointitiedot', 'ProcessingSoftware' => 'Prosessointiohjelmisto', 'ProductID' => 'Tuotteen ID', 'ProfileCMMType' => 'CMM-tyypin profiili', 'ProfileCalibrationSig' => 'Profiilin kalibrointitunniste', 'ProfileClass' => 'Profiilin luokka', 'ProfileConnectionSpace' => 'Profiilin yhteystila', 'ProfileCopyright' => 'Profiilin copyright', 'ProfileCreator' => 'Profiilin luoja', 'ProfileDateTime' => 'Profiilin päiväysaika', 'ProfileDescription' => 'Profiilin kuvaus', 'ProfileDescriptionML' => 'Monikieliprofiilin kuvaus', 'ProfileEmbedPolicy' => { Description => 'Profiilin upotusmenetelmä', PrintConv => { 'Allow Copying' => 'Salli kopiointi', 'Embed if Used' => 'Upota jos käytössä', 'Never Embed' => 'Älä koskaan upota', 'No Restrictions' => 'Ei rajoituksia', }, }, 'ProfileFileSignature' => 'Profiilidatan tunniste', 'ProfileHueSatMapData1' => 'Profiilin Sävy Värik. -kartan data 1', 'ProfileHueSatMapData2' => 'Profiilin Sävy Värik. -kartan data 2', 'ProfileID' => 'Profiilin ID', 'ProfileLookTableData' => 'Profiilin hakutaulukon data', 'ProfileName' => 'Profiilin nimi', 'ProfileSequenceDesc' => 'Profiilisarjan kuvaus', 'ProfileToneCurve' => 'Profiilin toonin käyrä', 'ProfileVersion' => 'Profiilin versio', 'ProgramISO' => 'Ohjelma-ISO', 'ProgramLine' => 'Valotusohjelma', 'ProgramMode' => 'Ohjelman muoto', 'ProgramShift' => 'Ohjelmasiirto', 'ProgramVersion' => 'Ohjelmaversio', 'ProgressiveScans' => 'Progressiiviset skannaukset', 'Province-State' => 'Provinssi/Valtio', 'Quality' => { Description => 'Laatu', PrintConv => { 'Best' => 'Paras', 'Better' => 'Parempi', 'Compressed RAW' => 'Pakattu RAW', 'Compressed RAW + JPEG' => 'Pakattu RAW + JPEG', 'Economy' => 'Taloudellinen', 'Extra Fine' => 'Erityishieno', 'Fine' => 'Hieno', 'Good' => 'Hyvä', 'Normal' => 'Normaali', 'Standard' => 'Vakio', 'Super Fine' => 'Superhieno', 'n/a' => 'Ei asetettu', }, }, 'QualityMode' => { Description => 'Kuvalaatu', PrintConv => { 'Economy' => 'Taloudellinen', 'Fine' => 'Hieno', 'Normal' => 'Normaali', }, }, 'QuantizationMethod' => { Description => 'Kvantisointimetodi', PrintConv => { 'AP Domestic Analogue' => 'AP domestinen analogia', 'Color Space Specific' => 'Erityisväriavaruus', 'Compression Method Specific' => 'Erityispakkausmetodi', 'Gamma Compensated' => 'Kompensoitu gamma', 'IPTC Ref B' => 'IPTC ref "B"', 'Linear Density' => 'Lineaarinen tiheys', 'Linear Dot Percent' => 'Lineaarinen pisteprosentti', 'Linear Reflectance/Transmittance' => 'Lineaarinen heijastavuus/läpäisevyys', }, }, 'QuickAdjust' => 'Pikasäätö', 'QuickShot' => { Description => 'Pikakuvaus', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'ROCInfo' => 'ROC-tiedot', 'RangeFinder' => 'Alue-etsin', 'RasterPadding' => 'Rasteritäyte', 'RasterizedCaption' => 'Rasteroitu seloste', 'Rating' => 'Arvostelu', 'RawDataOffset' => 'RAW-datan siirtymä', 'RawDataUniqueID' => 'Raw-datan uniikki ID', 'RawDevColorSpace' => 'Väriavaruus', 'RawDevContrastValue' => 'Kontrastiarvo', 'RawDevEditStatus' => { Description => 'Editointitila', PrintConv => { 'Edited (Landscape)' => 'Studio (maisema)', 'Edited (Portrait)' => 'Studio (muotokuva)', 'Original' => 'Alkuperäinen', }, }, 'RawDevEngine' => { Description => 'Moottori', PrintConv => { 'Advanced High Speed' => 'Edistynyt suurnopeus', 'High Function' => 'Hyvä suorituskyky', 'High Speed' => 'Suurnopeus', }, }, 'RawDevExposureBiasValue' => 'Valotuksen korjausarvo', 'RawDevGrayPoint' => 'Harmaapiste', 'RawDevMemoryColorEmphasis' => 'Muistivärin korostus', 'RawDevNoiseReduction' => 'Kohinasuodin (ISO-tehostus)', 'RawDevSaturationEmphasis' => 'Värikylläisyyden korostus', 'RawDevSettings' => 'Kohinanvaimennus', 'RawDevSharpnessValue' => 'Kontrastiarvo', 'RawDevVersion' => 'RAW-kehityksen versio', 'RawDevWBFineAdjustment' => 'Valkotasapainon hienosäätö', 'RawDevWhiteBalanceValue' => 'Valkotasapainon arvo', 'RawImageCenter' => 'RAW-kuvan keskusta', 'RawImageDigest' => 'RAW-kuvan tiivistelmä', 'RawImageHeight' => 'Kuvan korkeus', 'RawImageSize' => 'RAW-kuvakoko', 'RawImageWidth' => 'Kuvan leveys', 'RawInfoVersion' => 'RAW Info -versio', 'RecognizedFace1Age' => 'Tunnistettujen kasvojen 1 ikä', 'RecognizedFace1Name' => 'Tunnistettujen kasvojen 1 nimi', 'RecognizedFace1Position' => 'Tunnistettujen kasvojen 1 sijainti', 'RecognizedFace2Age' => 'Tunnistettujen kasvojen 2 ikä', 'RecognizedFace2Name' => 'Tunnistettujen kasvojen 2 nimi', 'RecognizedFace2Position' => 'Tunnistettujen kasvojen 2 sijainti', 'RecognizedFace3Age' => 'Tunnistettujen kasvojen 2 ikä', 'RecognizedFace3Name' => 'Tunnistettujen kasvojen 3 nimi', 'RecognizedFace3Position' => 'Tunnistettujen kasvojen 3 sijainti', 'RecognizedFaceFlags' => 'Tunnistettujen kasvojen liput', 'RecordMode' => { Description => 'Tallennustapa', PrintConv => { 'Aperture Priority' => 'Aukon esivalinta', 'Best Shot' => 'Paras kuva', 'Manual' => 'Manuaalinen', 'Movie' => 'Elokuva', 'Movie (19)' => 'Elokuva (19)', 'Program AE' => 'AE-ohjelma', 'Shutter Priority' => 'Ajan esivalinta', 'YouTube Movie' => 'YouTube-elokuva', }, }, 'RecordShutterRelease' => { Description => 'Laukaisujen tallennus', PrintConv => { 'Press start, press stop' => 'Aloitus painaen, lopetus painaen', 'Record while down' => 'Tallennus laukaisin alhaalla', }, }, 'RecordingMode' => 'Tallennustapa', 'RedBalance' => 'Punatasapaino', 'RedEyeCorrection' => 'Punasilmäkorjaus', 'RedEyeData' => 'Punasilmädata', 'RedMatrixColumn' => 'Punaisen matriisin sarake', 'RedTRC' => 'Punaisen toonin toistokäyrä', 'RedX' => 'Punainen X', 'RedY' => 'Punainen Y', 'ReductionMatrix1' => 'Reduktiomatriisi 1', 'ReductionMatrix2' => 'Reduktiomatriisi 2', 'ReferenceBlackWhite' => 'Musta ja valkoinen viitearvopari', 'ReferenceDate' => 'Viitepäiväys', 'ReferenceNumber' => 'Viitenumero', 'ReferenceService' => 'Viitepalvelu', 'RelatedImageFileFormat' => 'Kuvatiedoston muoto', 'RelatedImageHeight' => 'Kuvan korkeus', 'RelatedImageWidth' => 'Kuvan leveys', 'RelatedSoundFile' => 'Asiaan liittyvä audiotiedosto', 'ReleaseButtonToUseDial' => 'Käytä valitsinta vapauttaen painike', 'ReleaseDate' => 'Julkaisupäiväys', 'ReleaseMode' => 'Laukaisutapa', 'ReleaseTime' => 'Julkaisuaika', 'RemoteOnDuration' => 'Kaukolaukaisin', 'RenderingIntent' => 'Muokkausmenetelmä', 'Resaved' => { Description => 'Tallennus uudelleen', PrintConv => { 'No' => 'Ei', 'Yes' => 'Kyllä', }, }, 'ResolutionMode' => 'Resoluutiomuoto', 'ResolutionUnit' => 'X- ja Y-resoluution yksikkö', 'RetouchHistory' => 'Korjailuhistoria', 'ReverseIndicators' => 'Käänteiset ilmaisimet', 'RevisionNumber' => 'Revision numero', 'RollGuidElements' => 'Guid-elementtien vieritys', 'Rotation' => { Description => 'Kierto', PrintConv => { 'Horizontal (normal)' => 'Vaakatasossa (normaali)', 'Rotate 270 CW' => 'Kierto 90° VP', 'Rotate 90 CW' => 'Kierto 90° MP', }, }, 'RowInterleaveFactor' => 'Rivin lomitusfaktori', 'RowsPerStrip' => 'Rivien määrä per strippi', 'SBAExposureRecord' => 'SBA-valotuksen tallennus', 'SBAInputImageBitDepth' => 'SBA-syötekuvan bittisyvyys', 'SBAInputImageColorspace' => 'SBA-syötekuvan väriavaruus', 'SMaxSampleValue' => 'S-maksimiminäytteen arvo', 'SMinSampleValue' => 'S-miniminäytteen arvo', 'SRFocalLength' => 'Vakain (SR) eri polttoväleillä', 'SRResult' => 'Kuvanvakain', 'SampleFormat' => 'Näyteformaatti', 'SampleStructure' => { Description => 'Näytteiden rakenne', PrintConv => { 'CompressionDependent' => 'Määritetty pakkaustoiminnon yhteydessä', 'Orthogonal4-2-2Sampling' => 'Toisistaan riippumattomat näytetaajuuksin suhteessa 4:2:2:(4)', 'OrthogonalConstangSampling' => 'Toisistaan riippumattomat samoin suhteellisin näytetaajuuksin kussakin komponentissa', }, }, 'SamplesPerPixel' => 'Komponenttien määrä', 'SanyoQuality' => { Description => 'Sanyo-laatu', PrintConv => { 'Fine/High' => 'Hieno/korkea', 'Fine/Low' => 'Hieno/matala', 'Fine/Medium' => 'Hieno/keskilaatu', 'Fine/Medium High' => 'Hieno/korkeahko', 'Fine/Medium Low' => 'Hieno/matalahko', 'Fine/Super High' => 'Hieno/superkorkea', 'Fine/Very High' => 'Hieno/hyvin korkea', 'Fine/Very Low' => 'Hieno/hyvin matala', 'Normal/High' => 'Normaali/korkea', 'Normal/Low' => 'Normaali/matala', 'Normal/Medium' => 'Normaali/keskilaatu', 'Normal/Medium High' => 'Normaali/korkeahko', 'Normal/Medium Low' => 'Normaali/matalahko', 'Normal/Super High' => 'Normaali/superkorkea', 'Normal/Very High' => 'Normaali/hyvin korkea', 'Normal/Very Low' => 'Normaali/hyvin matala', 'Super Fine/High' => 'Superhieno/korkea', 'Super Fine/Low' => 'Superhieno/matala', 'Super Fine/Medium' => 'Superhieno/keskilaatu', 'Super Fine/Medium High' => 'Superhieno/korkeahko', 'Super Fine/Medium Low' => 'Superhieno/matalahko', 'Super Fine/Super High' => 'Superhieno/superkorkea', 'Super Fine/Very High' => 'Superhieno/hyvin korkea', 'Super Fine/Very Low' => 'Superhieno/hyvin matala', }, }, 'SanyoThumbnail' => 'Sanyo-näytekuva', 'Saturation' => { Description => 'Värikylläisyys', PrintConv => { 'Film Simulation' => 'Filminsimulaatio', 'High' => 'Korkea', 'Low' => 'Matala', 'Medium High' => 'Korkeahko', 'Medium Low' => 'Matalahko', 'None (B&W)' => 'Ei mitään (M&V)', 'Normal' => 'Vakio', }, }, 'SaturationFaithful' => 'Kohdeuskollinen värikylläisyys', 'SaturationLandscape' => 'Maisemakuvan värikylläisyys', 'SaturationNeutral' => 'Neutraali värikylläisyys', 'SaturationPortrait' => 'Muotokuvan värikylläisyys', 'SaturationSetting' => 'Värikylläisyyden sasetus', 'SaturationStandard' => 'Vakiovärikylläisyys', 'ScanImageEnhancer' => { Description => 'Skannauskuvan parantelu', PrintConv => { 'Off' => 'Pois', }, }, 'ScanningDirection' => { Description => 'Skannaussuunta', PrintConv => { 'Bottom-Top, L-R' => 'Alhaalta ylös, vasemmalta oikealle', 'Bottom-Top, R-L' => 'Alhaalta ylös, oikealta vasemmalle', 'L-R, Bottom-Top' => 'Vasemmalta oikealle, alhaalta ylös', 'L-R, Top-Bottom' => 'Vasemmalta oikealle, ylhäältä alas', 'R-L, Bottom-Top' => 'Oikealta vasemmalle, alhaalta ylös', 'R-L, Top-Bottom' => 'Oikealta vasemmalle, ylhäältä alas', 'Top-Bottom, L-R' => 'Ylhäältä alas, vasemmalta oikealle', 'Top-Bottom, R-L' => 'Ylhäältä alas, oikealta vasemmalle', }, }, 'Scene' => 'Näyttämö', 'SceneArea' => 'Näkymäalue?', 'SceneAssist' => 'Näkymä-avustaja', 'SceneCaptureType' => { Description => 'Kuvatun näkymän tyyppi', PrintConv => { 'Landscape' => 'Maisema', 'Night' => 'Yönäkymä', 'Portrait' => 'Muotokuva', 'Standard' => 'Standardi', }, }, 'SceneDetect' => 'Kohtauksen tunnistus', 'SceneMode' => { Description => 'Näkymän muoto', PrintConv => { '2 in 1' => '2 1:ssä', 'Auction' => 'Huutokauppa', 'Auto' => 'Automaattinen', 'Available Light' => 'Vallitseva valo', 'Beach' => 'Hiekkaranta', 'Beach & Snow' => 'Hiekkaranta&Lumi', 'Behind Glass' => 'Lasin takaa', 'Candle' => 'Kynttilä', 'Children' => 'Lapset', 'Cuisine' => 'Ateria', 'Digital Image Stabilization' => 'Digitaalinen kuvanvakautus', 'Documents' => 'Dokumentit', 'Face Portrait' => 'Kasvokuva', 'Fireworks' => 'Ilotulitus', 'Food' => 'Ateria', 'High Key' => 'High key -yläsävykuva', 'Indoor' => 'Sisäkuva', 'Landscape' => 'Maisema', 'Landscape+Portrait' => 'Maisema+muotokuva', 'Low Key' => 'Low key -alasävykuva', 'Macro' => 'Makro', 'Movie' => 'Elokuva', 'Museum' => 'Museo', 'My Mode' => 'Oma tapa', 'Nature Macro' => 'Luontomakro', 'Night Portrait' => 'Yön muotokuva', 'Night Scene' => 'Iltanäkymä', 'Night View/Portrait' => 'Iltanäkymä/Yön muotokuva', 'Night+Portrait' => 'Yö+muotokuva', 'Normal' => 'Normaali', 'Panorama' => 'Panoraama', 'Pet' => 'Lemmikki', 'Portrait' => 'Muotokuva', 'Self Portrait' => 'Omakuva', 'Self Portrait+Self Timer' => 'Omakuva+itselaukaisin', 'Self Protrait+Timer' => 'Omakuva+itselaukaisin', 'Shoot & Select' => 'Kuvaa & Valitse', 'Shoot & Select1' => 'Kuvaus&valinta 1', 'Shoot & Select2' => 'Kuvaus&valinta 2', 'Shooting Guide' => 'Kuvausopas', 'Smile Shot' => 'Hymykuva', 'Snow' => 'Lumi', 'Sport' => 'Urheilu', 'Sports' => 'Urheilutapahtuma', 'Standard' => 'Vakio', 'Sunset' => 'Auringonlasku', 'Super Macro' => 'Supermakro', 'Text' => 'Teksti', 'Underwater Macro' => 'Veden alla makro', 'Underwater Snapshot' => 'Veden alla tilannekuva', 'Underwater Wide1' => 'Veden alla laaja 1', 'Underwater Wide2' => 'Veden alla laaja 2', 'Vivid' => 'Heleä', }, }, 'SceneSelect' => { Description => 'Näkymän valinta', PrintConv => { 'Lamp' => 'Lamppu', 'Night' => 'Yö', 'Off' => 'Pois', 'Sport' => 'Urheilu', 'User 1' => 'Käyttäjä 1', 'User 2' => 'Käyttäjä 2', }, }, 'SceneType' => { Description => 'Näkymätyyppi', PrintConv => { 'Directly photographed' => 'Suoraan otettu valokuva', }, }, 'SecurityClassification' => { Description => 'Turvallisuusluokitus', PrintConv => { 'Confidential' => 'Luottamuksellinen', 'Restricted' => 'Rajoitettu', 'Secret' => 'Salainen', 'Top Secret' => 'Huippusalainen', 'Unclassified' => 'Ei luokiteltu', }, }, 'SelfTimer' => { Description => 'Itselaukaisin', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'SelfTimerMode' => 'Itselaukaisumoodi', 'SelfTimerShotCount' => 'Itselaukaisimen otosmäärä', 'SelfTimerTime' => 'Itselaukaisimen viive', 'SensingMethod' => { Description => 'Mittausmetodi', PrintConv => { 'Color sequential area' => 'Peräkkäisvärialueen anturi', 'Color sequential linear' => 'Peräkkäisvärien lineaarianturi', 'Monochrome area' => 'Monokromialueen anturi', 'Monochrome linear' => 'Monokromilineaarinen anturi', 'Not defined' => 'Ei määritetty', 'One-chip color area' => 'Yhden chipin värialueen anturi', 'Three-chip color area' => 'Kolmen chipin värialueen anturi', 'Trilinear' => 'Trilineaarinen anturi', 'Two-chip color area' => 'Kahden chipin värialueen anturi', }, }, 'SensitivityAdjust' => 'Herkkyyden asetus', 'SensitivitySteps' => 'Herkkyysaskeleet', 'SensorBlueLevel' => 'Anturin sinitaso', 'SensorBottomBorder' => 'Anturin alareuna', 'SensorHeight' => 'Anturin korkeus', 'SensorLeftBorder' => 'Anturin vasen reuna', 'SensorPixelSize' => 'Anturin pikselikoko', 'SensorRedLevel' => 'Anturin punataso', 'SensorRightBorder' => 'Anturin oikea reuna', 'SensorTemperature' => 'Anturin lämpötila', 'SensorTopBorder' => 'Anturin yläreuna', 'SensorWidth' => 'Anturin leveys', 'Sequence' => 'Järjestys', 'SequenceNumber' => 'Järjestysnumero', 'SequenceShotInterval' => { Description => 'Sarjakuvauksen taajuus', PrintConv => { '10 frames/s' => '10 ruutua/s', '15 frames/s' => '15 ruutua/s', '20 frames/s' => '20 ruutua/s', '5 frames/s' => '5 ruutua/s', }, }, 'SequentialShot' => { Description => 'Sarjakuvaus', PrintConv => { 'Adjust Exposure' => 'Valotuksen säätö', 'Best' => 'Paras', 'None' => 'Ei mitään', 'Standard' => 'Vakio', }, }, 'SerialNumber' => 'Sarjanumero', 'SerialNumberFormat' => 'Sarjanumeron muoto', 'ServiceIdentifier' => 'Palvelun tunnistin', 'ShadingCompensation' => { Description => 'Varjostumakorjaus', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'Shadow' => 'Varjo', 'ShadowProtection' => 'Varjoalueen suojaus ', 'ShadowScale' => 'Varjoasteikko', 'Sharpness' => { Description => 'Terävyys', PrintConv => { 'Film Simulation' => 'Filminsimulaatio', 'Hard' => 'Kova', 'Hard2' => 'Kova 2', 'Medium Hard' => 'Kovahko', 'Medium Soft' => 'Pehmeähkö', 'Normal' => 'Vakio', 'Soft' => 'Pehmeä', 'Soft2' => 'Pehmeä 2', 'n/a' => 'E.s.', }, }, 'SharpnessFactor' => 'Terävöintikerroin', 'SharpnessFaithful' => 'Kohdeuskollinen terävyys', 'SharpnessFreqTable' => 'Terävyyden taajuustaulukko', 'SharpnessFrequency' => 'Terävyystaajuus', 'SharpnessLandscape' => 'Maisemakuvan terävyys', 'SharpnessMonochrome' => 'Yksivärikuvan terävyys', 'SharpnessNeutral' => 'Neutraali terävyys', 'SharpnessPortrait' => 'Muotokuvan terävyys', 'SharpnessSetting' => 'Terävyysasetus', 'SharpnessStandard' => 'Vakioterävyys', 'SharpnessTable' => 'Terävyystaulukko', 'ShootingInfoDisplay' => 'Kuvaustietojen näyttö', 'ShootingMode' => 'IR-kauko-ohjaus', 'ShortDocumentID' => 'Lyhyt dokumentin ID', 'ShortOwnerName' => 'Omistajan lyhyt nimi', 'ShotInfoVersion' => 'Otostietojen versio', 'ShutterCount' => 'Laukaisumäärä', 'ShutterReleaseButtonAE-L' => 'Laukaisin AE-L', 'ShutterSpeedValue' => 'Suljinnopeuden arvo', 'SimilarityIndex' => 'Yhtäläisyysindeksi', 'Site' => 'Sivusto', 'SlaveFlashMeteringSegments' => 'Orjasalaman mittaussegmentit', 'SlowShutter' => 'Hidas suljin', 'SlowSync' => { Description => 'Hidas suljin', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'Software' => 'Ohjelmisto', 'SoftwareVersion' => 'Ohjelmistoversio', 'Source' => 'Lähde', 'SourceImageDirectory' => 'Lähdekuvan kansio', 'SourceImageFileName' => 'Lähdekuvan tiedostonimi', 'SourceImageVolumeName' => 'Lähdekuvan taltion nimi', 'SpatialFrequencyResponse' => 'Spatiaalisen taajuuden vaste', 'SpecialInstructions' => 'Ohjeet', 'SpecialMode' => 'Erikoistapa', 'SpectralSensitivity' => 'Spektraalinen herkkyys', 'SpotFocusPointX' => 'Pistetarkennuksen piste X', 'SpotFocusPointY' => 'Pistetarkennuksen piste Y', 'SpotMeteringMode' => 'Pistemittaustapa', 'StorageMethod' => 'Tallennusmetodi', 'StraightenAngle' => 'Kuvan suoristus', 'StripByteCounts' => 'Tavuja per pakattu strippi', 'StripOffsets' => 'Kuvadatan sijainti', 'Sub-location' => 'Sijainti', 'SubSecTime' => 'DateTime sekunnin murto-osina', 'SubSecTimeDigitized' => 'DateTimeDigitized sekunnin murto-osina', 'SubSecTimeOriginal' => 'DateTimeOriginal sekunnin murto-osina', 'SubTileBlockSize' => 'Alalaattalohkon koko', 'Subject' => 'Aihe', 'SubjectArea' => 'Kohdealue', 'SubjectDistance' => 'Kohteen etäisyys', 'SubjectDistanceRange' => { Description => 'Objektiivin tarkennusetäisyys', PrintConv => { 'Close' => 'Lähikuva', 'Distant' => 'Etäkuva', 'Macro' => 'Makro', 'Unknown' => 'Tuntematon', }, }, 'SubjectLocation' => 'Kohteen sijainti', 'SubjectProgram' => 'Kuvausohjelma', 'SubjectReference' => 'Aiheen koodi', 'SuperMacro' => { Description => 'Supermakro', PrintConv => { 'Off' => 'Pois', 'On (1)' => 'Päällä (1)', 'On (2)' => 'Päällä (2)', }, }, 'SupplementalCategories' => 'Täydentävä kategoria', 'SupplementalType' => { Description => 'Lisäystyyppi', PrintConv => { 'Main Image' => 'Ei asetettu', 'Rasterized Caption' => 'Rasteroitu seloste', 'Reduced Resolution Image' => 'Alennetun resoluution kuva', }, }, 'SvISOSetting' => 'Sv-ISO-asetus', 'T4Options' => 'Lisätyt täytebitit', 'T6Options' => 'T6-valinnat', 'TIFF-EPStandardID' => 'TIFF/EP-standardin ID', 'TargetAperture' => 'Tavoiteaukko', 'TargetExposureTime' => 'Tavoitevalotusaika', 'TargetPrinter' => 'Kohdetulostin', 'Technology' => { Description => 'Teknologia', PrintConv => { 'Digital Camera' => 'Digitaalikamera', 'Dye Sublimation Printer' => 'Lämpösublimaatiotulostin', 'Electrophotographic Printer' => 'Lasertulostin', 'Electrostatic Printer' => 'Sähköstaattinen tulostin', 'Film Scanner' => 'Filmiskanneri', 'Film Writer' => 'Filmitulostin', 'Flexography' => 'Fleksografia', 'Gravure' => 'Syväpaino', 'Ink Jet Printer' => 'Mustesuihkutulostin', 'Offset Lithography' => 'Offsetlitografia', 'Photo CD' => 'Valokuva-CD', 'Photo Image Setter' => 'Valokuvaimagesetteri', 'Photographic Paper Printer' => 'Valokuvapaperitulostin', 'Projection Television' => 'Projektiotelevisio', 'Reflective Scanner' => 'Heijastusskanneri', 'Silkscreen' => 'Silkkipaino', 'Thermal Wax Printer' => 'Lämpövahatulostin', 'Video Camera' => 'Videokamera', 'Video Monitor' => 'Videomonitori', }, }, 'Text' => 'Teksti', 'TextInfo' => 'Tekstitiedot', 'TextStamp' => { Description => 'Tekstileimasin', PrintConv => { 'Off' => 'Päällä', }, }, 'Thresholding' => 'Kynnystys', 'ThumbnailImage' => 'Näytekuva', 'ThumbnailImageValidArea' => 'Näytekuvan kelpaava alue', 'TileByteCounts' => 'Ruutujen tavumäärät', 'TileDepth' => 'Ruudun syvyys', 'TileLength' => 'Ruudun pituus', 'TileOffsets' => 'Ruutusiirtymät', 'TileWidth' => 'Otsikon leveys', 'Time' => 'Aika', 'TimeCreated' => 'Luontiaika', 'TimeSent' => 'Lähetysaika', 'TimeSincePowerOn' => 'Virran päälläoloaika', 'TimeStamp' => 'Aikaleima', 'TimeZone' => 'Aikavyöhyke', 'TimeZoneOffset' => 'Aikavyöhykkeen siirtymä', 'TimerFunctionButton' => 'Ajastustoimintopainike', 'Title' => 'Otsikko', 'ToneComp' => 'Sävykorjailu', 'ToneCurve' => 'Sävykäyrä', 'ToneCurveMatching' => 'Sävykäyrän täsmäys', 'ToneCurveTable' => 'Sävykäyrätaulukko', 'ToneCurves' => 'Sävykäyrät', 'ToningEffect' => 'Sävytysefekti', 'ToningEffectMonochrome' => 'Yksivärisävytysefekti', 'ToningSaturation' => 'Sävykylläisyys', 'TransferFunction' => 'Muuntotoiminto', 'TransferRange' => 'Siirtonopeus', 'Transform' => 'Muunna', 'Transformation' => { Description => 'Muunto', PrintConv => { 'Mirror horizontal' => 'Peilaa vaakasuunnassa', 'Mirror horizontal and rotate 270 CW' => 'Peilaa vaakasuunnassa ja kierrä 270° myötäpäivään', 'Mirror horizontal and rotate 90 CW' => 'Peilaa vaakasuunnassa ja kierrä 90° myötäpäivään', 'Mirror vertical' => 'Peilaa pystysuunnassa', 'Rotate 180' => 'Kierrä 180°', 'Rotate 270 CW' => 'Kierrä 90° myötäpäivään', 'Rotate 90 CW' => 'Kierrä 90° myötäpäivään', }, }, 'TransparencyIndicator' => 'Läpinäkyvyyden ilmaisin', 'TravelDay' => 'Matkapäivä', 'TvExposureTimeSetting' => 'Tv-valotusaikaasetus', 'Type' => 'Tyyppi', 'Uncompressed' => { Description => 'Pakkaamaton', PrintConv => { 'No' => 'Ei', 'Yes' => 'Kyllä', }, }, 'UniqueCameraModel' => 'Uniikki kameramalli', 'UniqueDocumentID' => 'Uniikin dokumentin ID', 'Unknown' => 'Tuntematon', 'Unsharp1Color' => 'Terävöinti 1 -väri', 'Unsharp1HaloWidth' => 'Terävöinti 1 -halolaajuus', 'Unsharp1Intensity' => 'Terävöinti 1 -voimakkuus', 'Unsharp1Threshold' => 'Terävöinti 1 -kynnys', 'Unsharp2Color' => 'Terävöinti 2 -väri', 'Unsharp2HaloWidth' => 'Terävöinti 2 -halolaajuus', 'Unsharp2Intensity' => 'Terävöinti 2 -voimakkuus', 'Unsharp2Threshold' => 'Terävöinti 2 -kynnys', 'Unsharp3Color' => 'Terävöinti 3 -väri', 'Unsharp3HaloWidth' => 'Terävöinti 3 -halolaajuus', 'Unsharp3Intensity' => 'Terävöinti 3 -voimakkuus', 'Unsharp3Threshold' => 'Terävöinti 3 -kynnys', 'Unsharp4Color' => 'Terävöinti 4 -väri', 'Unsharp4HaloWidth' => 'Terävöinti 4 -halolaajuus', 'Unsharp4Intensity' => 'Terävöinti 4 -voimakkuus', 'Unsharp4Threshold' => 'Terävöinti 4 -kynnys', 'UnsharpCount' => 'Terävöintimäärä', 'UnsharpData' => 'Terävöintidata', 'UnsharpMask' => 'Epäterävä maski', 'Urgency' => { Description => 'Kiireellisyys', PrintConv => { '0 (reserved)' => '0 (varattu tulevaan käyttöön)', '1 (most urgent)' => '1 (hyvin kiireellinen)', '5 (normal urgency)' => '5 (normaali kiirellisyys)', '8 (least urgent)' => '8 (lievän kiireellinen)', '9 (user-defined priority)' => '9 (varattu tulevaan käyttöön)', }, }, 'UserComment' => 'Käyttäjän kommentti', 'UserSelectGroupTitle' => 'Käyttäjän valitseman ryhmän otsikko', 'VRDOffset' => 'VRD-siirtymä', 'VRInfo' => 'Kuvanvakaimen tiedot', 'VRInfoVersion' => 'VR- (kuvanvakain) tietojen versio', 'ValidAFPoints' => 'Kelpaavat AF-pisteet', 'VariProgram' => 'Kuvausohjelma', 'Version' => 'Versio', 'VibrationReduction' => 'Kuvanvakautus', 'VideoCardGamma' => 'Grafiikkakortin gamma', 'ViewfinderWarning' => 'Etsinvaroitus', 'ViewingCondDesc' => 'Katseluolojen kuvaus', 'VignetteControl' => { Description => 'Vinjetoinnin korjaus', PrintConv => { 'High' => 'Korkea', 'Low' => 'Matala', 'Normal' => 'Normaali', 'Off' => 'Pois', }, }, 'VignetteControlIntensity' => 'Vinjetoinnin korjauksen voimakkuus', 'VoiceMemo' => { Description => 'Äänen tallennus', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'WBAdjData' => 'Valkotaspainon säätödata', 'WBBlueLevel' => 'Valkotas. sinisen taso', 'WBBracketMode' => 'Valkotasapaino-haarukointitapa', 'WBBracketValueAB' => 'Valkotasapainon AB-haarukointiarvo', 'WBBracketValueGM' => 'Valkotasapainon GM-haarukointiarvo', 'WBGreenLevel' => 'Vihreän taso', 'WBMode' => { Description => 'Valkotasapainotila', PrintConv => { 'Auto' => 'Automaattinen', }, }, 'WBRedLevel' => 'Valkotas. punaisen taso', 'WBShiftAB' => 'Valkotas. säätö keltainen/sininen', 'WBShiftGM' => 'Valkotas. säätö vihreä/magenta', 'WB_RBLevels' => 'Valkotasapaino punainen/sininen', 'WB_RBLevelsAuto' => 'Valkotas. RB-tasot, automatiikka', 'WB_RBLevelsCoolWhiteFluor' => 'Valkotas. RB-tasot, viileän valk. loistel.', 'WB_RBLevelsDayWhiteFluor' => 'Valkotas. RB-tasot, valk. päivänvaloloistel.', 'WB_RBLevelsDaylightFluor' => 'Valkotas. RB-tasot, päivänvaloloistel.', 'WB_RBLevelsEveningSunlight' => 'Valkotas. RB-tasot, ilta-aurinko', 'WB_RBLevelsFineWeather' => 'Valkotas. RB-tasot, kaunis sää', 'WB_RBLevelsShade' => 'Valkotas. RB-tasot, varjo', 'WB_RBLevelsTungsten' => 'Valkotas. RB-tasot, hehkulamppu', 'WB_RBLevelsUsed' => 'Käytetyt valkotas. RB-tasot', 'WB_RBLevelsWhiteFluorescent' => 'Valkotas. RB-tasot, valk. loistelamppu', 'WB_RGGBLevelsCloudy' => 'Valkotasapainon RGGB-tasojen pilvinen', 'WB_RGGBLevelsDaylight' => 'Valkotasapainon RGGB-tasojen päivänvalo', 'WB_RGGBLevelsFlash' => 'Valkotasapainon RGGB-tasojen salama', 'WB_RGGBLevelsFluorescentD' => 'Valkotasapainon RGGB-tasojen loistelamppu D', 'WB_RGGBLevelsFluorescentN' => 'Valkotasapainon RGGB-tasojen loistelamppu N', 'WB_RGGBLevelsFluorescentW' => 'Valkotasapainon RGGB-tasojen loistelamppu W', 'WB_RGGBLevelsShade' => 'Valkotasapainon RGGB-tasojen varjo', 'WB_RGGBLevelsTungsten' => 'Valkotasapainon RGGB-tasojen hehkulamppu', 'Watermark' => 'Vesileima', 'WatermarkType' => 'Vesileiman tyyppi', 'WhiteBalance' => { Description => 'Valkotasapaino', PrintConv => { 'Auto' => 'Automaattinen', 'Cloudy' => 'Pilvinen', 'Custom' => 'Mukautus', 'Custom2' => 'Mukautus 2', 'Custom3' => 'Mukautus 3', 'Custom4' => 'Mukautus 4', 'Day White Fluorescent' => 'Valkoinen päivänvaloloistelamppu', 'Daylight' => 'Auringonvalo', 'Daylight Fluorescent' => 'Päivänvaloloistelamppu', 'Flash' => 'Salama', 'Incandescent' => 'Hehkulamppu', 'Living Room Warm White Fluorescent' => 'Asuinhuoneen lämmin valkoinen loistelamppu', 'Manual' => 'Manuaalinen', 'Warm White Fluorescent' => 'Lämmin valkoinen loistelamppu', 'White Fluorescent' => 'Valkoinen loistelamppu', }, }, 'WhiteBalance2' => { Description => 'Valkotasapaino', PrintConv => { '3000K (Tungsten light)' => '3000 K (hehkulamppu)', '3600K (Tungsten light-like)' => '3600 K (hehkulamppumainen valo)', '4000K (Cool white fluorescent)' => '4000 K (viileän valkoinen loistelamppu)', '4500K (Neutral white fluorescent)' => '4500 K (neutraali valkoinen loistelamppu)', '5300K (Fine Weather)' => '5300 K (kaunis sää)', '6000K (Cloudy)' => '6000 K (pilvinen)', '6600K (Daylight fluorescent)' => '6600 K (päivänvaloloistelamppu)', '7500K (Fine Weather with Shade)' => '7500 K (kaunis sää ja varjoja)', 'Auto' => 'Automaattinen', 'Custom WB 1' => 'Mukautettu valkotasapaino 1', 'Custom WB 2' => 'Mukautettu valkotasapaino 2', 'Custom WB 2900K' => 'Mukautettu valkotasapaino 2900 K', 'Custom WB 3' => 'Mukautettu valkotasapaino 3', 'Custom WB 4' => 'Mukautettu valkotasapaino 4', 'Custom WB 5400K' => 'Mukautettu valkotasapaino 5400 K', 'Custom WB 8000K' => 'Mukautettu valkotasapaino 8000 K', }, }, 'WhiteBalanceAdj' => 'Väritasapainon säätö', 'WhiteBalanceBias' => 'Valkotasapainon korjaus', 'WhiteBalanceBlue' => 'Valkotasapaino sininen', 'WhiteBalanceBracket' => 'Valkotasapainon haarukointi', 'WhiteBalanceBracketing' => 'Valkotasapainohaarukointi', 'WhiteBalanceComp' => 'Valkotasapainon säätö', 'WhiteBalanceFineTune' => 'Valkotasapainon hienosäätö', 'WhiteBalanceMatching' => 'Valkotasapainon täsmäys', 'WhiteBalanceMode' => { Description => 'Valkotasapainon muoto', PrintConv => { 'Auto (Cloudy)' => 'Automaattinen (pilvinen)', 'Auto (Day White Fluorescent)' => 'Automaattinen (valkoinen päivänvaloloistelamppu)', 'Auto (Daylight Fluorescent)' => 'Automaattinen (päivänvaloloistelamppu)', 'Auto (Daylight)' => 'Automaattinen (auringonvalo)', 'Auto (Flash)' => 'Automaattinen (salama)', 'Auto (Shade)' => 'Automaattinen (varjo)', 'Auto (Tungsten)' => 'Automaattinen (hehkulamppu)', 'Auto (White Fluorescent)' => 'Automaattinen (valkoinen loistelamppu)', 'Unknown' => 'Automaattinen (ei tunnistettu)', 'User-Selected' => 'Itse valittu', }, }, 'WhiteBalanceRed' => 'Valkotasapaino punainen', 'WhiteBalanceSet' => 'Asetettu valkotasapaino', 'WhiteBalanceTable' => 'Valkotasapainotaulukko', 'WhiteBalanceTemperature' => 'Valkotaspainon lämpötila', 'WhiteBoard' => 'Valkoinen pohja', 'WhiteLevel' => 'Valkoinen taso', 'WhitePoint' => 'Valkoinen piste', 'WhitePointX' => 'Valkoinen piste X', 'WhitePointY' => 'Valkoinen piste Y', 'Wide' => 'Laaja', 'WideFocusZone' => 'Laaja-alatarkennuksen alue', 'WideRange' => { Description => 'Laaja alue', PrintConv => { 'Off' => 'Pois', 'On' => 'Päällä', }, }, 'WorldTimeLocation' => { Description => 'Maailmanaikasijainti', PrintConv => { 'Destination' => 'Kohde', 'Home' => 'Koti', 'Hometown' => 'Kotiseutu', }, }, 'Writer-Editor' => 'Selosteen/Kuvatekstin kirjoittaja', 'X3FillLight' => 'X3-täytevalo', 'XClipPathUnits' => 'X-leikepolkuyksiköt', 'XMP' => 'XMP-metadata', 'XPosition' => 'X-sijainti', 'XResolution' => 'Kuvan vaakaresoluutio', 'YCbCrCoefficients' => 'Väriavaruuden muunnon matriisikertoimet', 'YCbCrPositioning' => 'Y:n ja C:n sijoitus', 'YCbCrSubSampling' => 'Suhteen Y - C subsamplaus', 'YClipPathUnits' => 'Y-leikepolkuyksiköt', 'YPosition' => 'Y-sijainti', 'YResolution' => 'Kuvan pystyresoluutio', 'ZoneMatching' => { Description => 'Yli/alivalotuksen esto', PrintConv => { 'High Key' => 'Yläsävykuva', 'ISO Setting Used' => 'Pois (käytetty ISO-asetusta)', 'Low Key' => 'Alasävykuva', }, }, 'Zoom' => 'Zoom-objektiivi', 'ZoomSourceWidth' => 'Zoomauksen lähtökoko', 'ZoomStepCount' => 'Zoom-askelmäärä', 'ZoomTargetWidth' => 'Zoomauksen loppukoko', ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::fi.pm - ExifTool Finnish language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke and Jarkko ME<auml>kineva for providing this translation. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/fr.pm��������������������������������������������������000644 �000765 �000024 �00000475114 12642461343 021553� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: fr.pm # # Description: ExifTool French language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::fr; use strict; use vars qw($VERSION); $VERSION = '1.30'; %Image::ExifTool::Lang::fr::Translate = ( 'AEAperture' => 'Ouverture AE', 'AEBAutoCancel' => { Description => 'Annulation bracketing auto', PrintConv => { 'Off' => 'Arrêt', 'On' => 'Marche', }, }, 'AEBSequence' => 'Séquence de bracketing', 'AEBSequenceAutoCancel' => { Description => 'Séquence auto AEB/annuler', PrintConv => { '-,0,+/Disabled' => '-,0,+/Désactivé', '-,0,+/Enabled' => '-,0,+/Activé', '0,-,+/Disabled' => '0,-,+/Désactivé', '0,-,+/Enabled' => '0,-,+/Activé', }, }, 'AEBShotCount' => 'Nombre de vues bracketées', 'AEBXv' => 'Compensation d\'expo. auto en bracketing', 'AEExposureTime' => 'Temps d\'exposition AE', 'AEExtra' => 'Suppléments AE', 'AEInfo' => 'Info sur l\'exposition auto', 'AELock' => { Description => 'Verrouillage AE', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'AEMaxAperture' => 'Ouverture maxi AE', 'AEMaxAperture2' => 'Ouverture maxi AE (2)', 'AEMeteringMode' => { Description => 'Mode de mesure AE', PrintConv => { 'Multi-segment' => 'Multizone', }, }, 'AEMeteringSegments' => 'Segments de mesure AE', 'AEMinAperture' => 'Ouverture mini AE', 'AEMinExposureTime' => 'Temps d\'exposition mini AE', 'AEProgramMode' => { Description => 'Mode programme AE', PrintConv => { 'Av, B or X' => 'Av, B ou X', 'Candlelight' => 'Bougie', 'DOF Program' => 'Programme PdC', 'DOF Program (P-Shift)' => 'Programme PdC (décalage P)', 'Hi-speed Program' => 'Programme grande vitesse', 'Hi-speed Program (P-Shift)' => 'Programme grande vitesse (décalage P)', 'Kids' => 'Enfants', 'Landscape' => 'Paysage', 'M, P or TAv' => 'M, P ou TAv', 'MTF Program' => 'Programme FTM', 'MTF Program (P-Shift)' => 'Programme FTM (décalage P)', 'Museum' => 'Musée', 'Night Scene' => 'Nocturne', 'Night Scene Portrait' => 'Portrait nocturne', 'No Flash' => 'Sans flash', 'Pet' => 'Animaux de compagnie', 'Sunset' => 'Coucher de soleil', 'Surf & Snow' => 'Surf et neige', 'Sv or Green Mode' => 'Sv ou mode vert', 'Text' => 'Texte', }, }, 'AEXv' => 'Compensation d\'exposition auto', 'AE_ISO' => 'Sensibilité ISO AE', 'AFAdjustment' => 'Ajustement AF', 'AFAperture' => 'Ouverture AF', 'AFAreaIllumination' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'AFAreaMode' => { Description => 'Mode de zone AF', PrintConv => { '1-area' => 'Mise au point 1 zone', '1-area (high speed)' => 'Mise au point 1 zone (haute vitesse)', '3-area (center)?' => 'Mise au point 3 zones (au centre) ?', '3-area (high speed)' => 'Mise au point 3 zones (haute vitesse)', '3-area (left)?' => 'Mise au point 3 zones (à gauche) ?', '3-area (right)?' => 'Mise au point 3 zones (à droite) ?', '5-area' => 'Mise au point 5 zones', '9-area' => 'Mise au point 9 zones', 'Face Detect AF' => 'Dét. visage', 'Spot Focusing' => 'Mise au point Spot', 'Spot Mode Off' => 'Mode Spot désactivé', 'Spot Mode On' => 'Mode Spot enclenché', }, }, 'AFAssist' => { Description => 'Faisceau d\'assistance AF', PrintConv => { 'Does not emit/Fires' => 'N\'émet pas/Se déclenche', 'Emits/Does not fire' => 'Emet/Ne se déclenche pas', 'Emits/Fires' => 'Emet/Se déclenche', 'Off' => 'Désactivé', 'On' => 'Activé', 'Only ext. flash emits/Fires' => 'Flash ext émet/Se déclenche', }, }, 'AFAssistBeam' => { Description => 'Faisceau d\'assistance AF', PrintConv => { 'Does not emit' => 'Désactivé', 'Emits' => 'Activé', 'Only ext. flash emits' => 'Uniquement par flash ext.', }, }, 'AFDefocus' => 'Défocalisation AF', 'AFDuringLiveView' => { Description => 'AF pendant la visée directe', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activé', 'Live mode' => 'Mode visée directe', 'Quick mode' => 'Mode rapide', }, }, 'AFInfo' => 'Info autofocus', 'AFInfo2' => 'Infos AF', 'AFInfo2Version' => 'Version des infos AF', 'AFIntegrationTime' => 'Temps d\'intégration AF', 'AFMicroadjustment' => { Description => 'Micro-ajustement de l\'AF', PrintConv => { 'Adjust all by same amount' => 'Ajuster idem tous obj', 'Adjust by lens' => 'Ajuster par objectif', 'Disable' => 'Désactivé', }, }, 'AFMode' => 'Mode AF', 'AFOnAELockButtonSwitch' => { Description => 'Permutation touche AF/Mémo', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activé', }, }, 'AFPoint' => { Description => 'Point AF', PrintConv => { 'Bottom' => 'Bas', 'Center' => 'Centre', 'Far Left' => 'Extrême-gauche', 'Far Right' => 'Extrême-droit', 'Left' => 'Gauche', 'Lower-left' => 'Bas-gauche', 'Lower-right' => 'Bas-droit', 'Mid-left' => 'Milieu gauche', 'Mid-right' => 'Milieu droit', 'None' => 'Aucune', 'Right' => 'Droit', 'Top' => 'Haut', 'Upper-left' => 'Haut-gauche', 'Upper-right' => 'Haut-droit', }, }, 'AFPointActivationArea' => { Description => 'Zone activation collimateurs AF', PrintConv => { 'Automatic expanded (max. 13)' => 'Expansion auto (13 max.)', 'Expanded (TTL. of 7 AF points)' => 'Expansion (TTL 7 collimat.)', 'Single AF point' => 'Un seul collimateur AF', }, }, 'AFPointAreaExpansion' => { Description => 'Extension de la zone AF', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activé', 'Left/right AF points' => 'Activé (gauche/droite collimateurs autofocus d\'assistance)', 'Surrounding AF points' => 'Activée (Collimateurs autofocus d\'assistance environnants)', }, }, 'AFPointAutoSelection' => { Description => 'Sélection des collimateurs automatique', PrintConv => { 'Control-direct:disable/Main:disable' => 'Contrôle rapide-Directe:désactivé/Principale:désactivé', 'Control-direct:disable/Main:enable' => 'Contrôle rapide-Directe:désactivé/Principale:activé', 'Control-direct:enable/Main:enable' => 'Contrôle rapide-Directe:activé/Principale:activé', }, }, 'AFPointBrightness' => { Description => 'Intensité d\'illumination AF', PrintConv => { 'Brighter' => 'Forte', 'Normal' => 'Normale', }, }, 'AFPointDisplayDuringFocus' => { Description => 'Affichage de point AF pendant mise au point', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', 'On (when focus achieved)' => 'Activé (si mise au point effectuée)', }, }, 'AFPointIllumination' => { Description => 'Eclairage des collimateurs AF', PrintConv => { 'Brighter' => 'Plus brillant', 'Off' => 'Désactivé', 'On' => 'Activé', 'On without dimming' => 'Activé sans atténuation', }, }, 'AFPointMode' => 'Mode de mise au point AF', 'AFPointRegistration' => { Description => 'Validation du point AF', PrintConv => { 'Automatic' => 'Auto', 'Bottom' => 'Bas', 'Center' => 'Centre', 'Extreme Left' => 'Extrême gauche', 'Extreme Right' => 'Extrême droite', 'Left' => 'Gauche', 'Right' => 'Droit', 'Top' => 'Haut', }, }, 'AFPointSelected' => { Description => 'Point AF sélectionné', PrintConv => { 'Automatic Tracking AF' => 'AF en suivi auto', 'Bottom' => 'Bas', 'Center' => 'Centre', 'Face Detect AF' => 'AF en reconnaissance de visage', 'Fixed Center' => 'Fixe au centre', 'Left' => 'Gauche', 'Lower-left' => 'Bas gauche', 'Lower-right' => 'Bas droit', 'Mid-left' => 'Milieu gauche', 'Mid-right' => 'Milieu droit', 'Right' => 'Droit', 'Top' => 'Haut', 'Upper-left' => 'Haut gauche', 'Upper-right' => 'Haut droite', }, }, 'AFPointSelected2' => 'Point AF sélectionné 2', 'AFPointSelection' => 'Méthode sélect. collimateurs AF', 'AFPointSelectionMethod' => { Description => 'Méthode sélection collim. AF', PrintConv => { 'Multi-controller direct' => 'Multicontrôleur direct', 'Normal' => 'Normale', 'Quick Control Dial direct' => 'Molette AR directe', }, }, 'AFPointSpotMetering' => { Description => 'Nombre collimateurs/mesure spot', PrintConv => { '11/Active AF point' => '11/collimateur AF actif', '11/Center AF point' => '11/collimateur AF central', '45/Center AF point' => '45/collimateur AF central', '9/Active AF point' => '9/collimateur AF actif', }, }, 'AFPointsInFocus' => { Description => 'Points AF nets', PrintConv => { 'All' => 'Tous', 'Bottom' => 'Bas', 'Bottom, Center' => 'Bas + centre', 'Bottom-center' => 'Bas centre', 'Bottom-left' => 'Bas gauche', 'Bottom-right' => 'Bas droit', 'Center' => 'Centre', 'Center (horizontal)' => 'Centre (horizontal)', 'Center (vertical)' => 'Centre (vertical)', 'Center+Right' => 'Centre+droit', 'Fixed Center or Multiple' => 'Centre fixe ou multiple', 'Left' => 'Gauche', 'Left+Center' => 'Gauch+centre', 'Left+Right' => 'Gauche+droit', 'Lower-left, Bottom' => 'Bas gauche + bas', 'Lower-left, Mid-left' => 'Bas gauche + milieu gauche', 'Lower-right, Bottom' => 'Bas droit + bas', 'Lower-right, Mid-right' => 'Bas droit + milieu droit', 'Mid-left' => 'Milieu gauche', 'Mid-left, Center' => 'Milieu gauche + centre', 'Mid-right' => 'Milieu droit', 'Mid-right, Center' => 'Milieu droit + centre', 'None' => 'Aucune', 'None (MF)' => 'Aucune (MF)', 'Right' => 'Droit', 'Top' => 'Haut', 'Top, Center' => 'Haut + centre', 'Top-center' => 'Haut centre', 'Top-left' => 'Haut gauche', 'Top-right' => 'Haut droit', 'Upper-left, Mid-left' => 'Haut gauche + milieu gauche', 'Upper-left, Top' => 'Haut gauche + haut', 'Upper-right, Mid-right' => 'Haut droit + milieu droit', 'Upper-right, Top' => 'Haut droit + haut', }, }, 'AFPointsSelected' => 'Points AF sélectionnés', 'AFPointsUnknown1' => { PrintConv => { 'All' => 'Tous', 'Central 9 points' => '9 points centraux', }, }, 'AFPointsUnknown2' => 'Points AF inconnus 2', 'AFPointsUsed' => { Description => 'Points AF utilisés', PrintConv => { 'Bottom' => 'Bas', 'Center' => 'Centre', 'Mid-left' => 'Milieu gauche', 'Mid-right' => 'Milieu droit', 'Top' => 'Haut', }, }, 'AFPredictor' => 'Prédicteur AF', 'AFResponse' => 'Réponse AF', 'AIServoContinuousShooting' => 'Priorité vit. méca. AI Servo', 'AIServoImagePriority' => { Description => '1er Servo Ai/2e priorité déclenchement', PrintConv => { '1: AF, 2: Drive speed' => 'Priorité AF/Priorité cadence vues', '1: AF, 2: Tracking' => 'Priorité AF/Priorité suivi AF', '1: Release, 2: Drive speed' => 'Déclenchement/Priorité cadence vues', }, }, 'AIServoTrackingMethod' => { Description => 'Méthode de suivi autofocus AI Servo', PrintConv => { 'Continuous AF track priority' => 'Priorité suivi AF en continu', 'Main focus point priority' => 'Priorité point AF principal', }, }, 'AIServoTrackingSensitivity' => { Description => 'Sensibili. de suivi AI Servo', PrintConv => { 'Fast' => 'Rapide', 'Medium Fast' => 'Moyenne rapide', 'Medium Slow' => 'Moyenne lent', 'Moderately fast' => 'Moyennement rapide', 'Moderately slow' => 'Moyennement lent', 'Slow' => 'Lent', }, }, 'APEVersion' => 'Version APE', 'ARMIdentifier' => 'Identificateur ARM', 'ARMVersion' => 'Version ARM', 'AToB0' => 'A à B0', 'AToB1' => 'A à B1', 'AToB2' => 'A à B2', 'AccessoryType' => 'Type d\'accessoire', 'ActionAdvised' => { Description => 'Action conseillée', PrintConv => { 'Object Kill' => 'Destruction d\'objet', 'Object Reference' => 'Référence d\'objet', 'Object Replace' => 'Remplacement d\'objet', 'Ojbect Append' => 'Ajout d\'objet', }, }, 'ActiveArea' => 'Zone active', 'ActiveD-Lighting' => { PrintConv => { 'Low' => 'Bas', 'Normal' => 'Normale', 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ActiveD-LightingMode' => { PrintConv => { 'Low' => 'Bas', 'Normal' => 'Normale', 'Off' => 'Désactivé', }, }, 'AddAspectRatioInfo' => { Description => 'Ajouter info ratio d\'aspect', PrintConv => { 'Off' => 'Désactivé', }, }, 'AddOriginalDecisionData' => { Description => 'Aj. données décis. origine', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'AdditionalModelInformation' => 'Modèle d\'Information additionnel', 'Address' => 'Adresse', 'AdultContentWarning' => { PrintConv => { 'Unknown' => 'Inconnu', }, }, 'AdvancedRaw' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'AdvancedSceneMode' => { PrintConv => { 'Color Select' => 'Désaturation partielle', 'Cross Process' => 'Dévelop. croisé', 'Dynamic Monochrome' => 'Monochrome dynamique', 'Expressive' => 'Expressif', 'High Dynamic' => 'Dynamique haute', 'High Key' => 'Tons clairs', 'Impressive Art' => 'Impressionisme', 'Low Key' => 'Clair-obscur', 'Miniature' => 'Effet miniature', 'Retro' => 'Rétro', 'Sepia' => 'Sépia', 'Soft' => 'Mise au point douce', 'Star' => 'Filtre étoile', 'Toy Effect' => 'Effet jouet', }, }, 'Advisory' => 'Adversité', 'AnalogBalance' => 'Balance analogique', 'Annotations' => 'Annotations Photoshop', 'Anti-Blur' => { PrintConv => { 'Off' => 'Désactivé', 'n/a' => 'Non établie', }, }, 'AntiAliasStrength' => 'Puissance relative du filtre anticrénelage de l\'appareil', 'Aperture' => 'Ouverture', 'ApertureRange' => { Description => 'Régler gamme d\'ouvertures', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activée', }, }, 'ApertureRingUse' => { Description => 'Utilisation de la bague de diaphragme', PrintConv => { 'Permitted' => 'Autorisée', 'Prohibited' => 'Interdite', }, }, 'ApertureValue' => 'Ouverture', 'ApplicationRecordVersion' => 'Version d\'enregistrement', 'ApplyShootingMeteringMode' => { Description => 'Appliquer mode de prise de vue/de mesure', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activée', }, }, 'Artist' => 'Artiste', 'ArtworkCopyrightNotice' => 'Notice copyright de l\'Illustration', 'ArtworkCreator' => 'Créateur de l\'Illustration', 'ArtworkDateCreated' => 'Date de création de l\'Illustration', 'ArtworkSource' => 'Source de l\'Illustration', 'ArtworkSourceInventoryNo' => 'No d\'Inventaire du source de l\'Illustration', 'ArtworkTitle' => 'Titre de l\'Illustration', 'AsShotICCProfile' => 'Profil ICC à la prise de vue', 'AsShotNeutral' => 'Balance neutre à la prise de vue', 'AsShotPreProfileMatrix' => 'Matrice de pré-profil à la prise de vue', 'AsShotProfileName' => 'Nom du profil du cliché', 'AsShotWhiteXY' => 'Balance blanc X-Y à la prise de vue', 'AssignFuncButton' => { Description => 'Changer fonct. touche FUNC.', PrintConv => { 'Exposure comp./AEB setting' => 'Correct. expo/réglage AEB', 'Image jump with main dial' => 'Saut image par molette principale', 'Image quality' => 'Changer de qualité', 'LCD brightness' => 'Luminosité LCD', 'Live view function settings' => 'Réglages Visée par l’écran', }, }, 'AssistButtonFunction' => { Description => 'Touche de fonction rapide', PrintConv => { 'Av+/- (AF point by QCD)' => 'Av+/- (AF par mol. AR)', 'FE lock' => 'Mémo expo. au flash', 'Normal' => 'Normale', 'Select HP (while pressing)' => 'Sélect. HP (en appuyant)', 'Select Home Position' => 'Sélect. position origine', }, }, 'Audio' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'AudioDuration' => 'Durée audio', 'AudioOutcue' => 'Queue audio', 'AudioSamplingRate' => 'Taux d\'échantillonnage audio', 'AudioSamplingResolution' => 'Résolution d\'échantillonnage audio', 'AudioType' => { Description => 'Type audio', PrintConv => { 'Mono Actuality' => 'Actualité (audio mono (1 canal))', 'Mono Music' => 'Musique, transmise par elle-même (audio mono (1 canal))', 'Mono Question and Answer Session' => 'Question et réponse (audio mono (1 canal))', 'Mono Raw Sound' => 'Son brut (audio mono (1 canal))', 'Mono Response to a Question' => 'Réponse à une question (audio mono (1 canal))', 'Mono Scener' => 'Scener (audio mono (1 canal))', 'Mono Voicer' => 'Voix (audio mono (1 canal))', 'Mono Wrap' => 'Wrap (audio mono (1 canal))', 'Stereo Actuality' => 'Actualité (audio stéréo (2 canaux))', 'Stereo Music' => 'Musique, transmise par elle-même (audio stéréo (2 canaux))', 'Stereo Question and Answer Session' => 'Question et réponse (audio stéréo (2 canaux))', 'Stereo Raw Sound' => 'Son brut (audio stéréo (2 canaux))', 'Stereo Response to a Question' => 'Réponse à une question (audio stéréo (2 canaux))', 'Stereo Scener' => 'Scener (audio stéréo (2 canaux))', 'Stereo Voicer' => 'Voix (audio stéréo (2 canaux))', 'Stereo Wrap' => 'Wrap (audio stéréo (2 canaux))', 'Text Only' => 'Texte seul (pas de données d\'objet)', }, }, 'Author' => 'Auteur', 'AuthorsPosition' => 'Titre du créateur', 'AutoAperture' => { Description => 'Auto-diaph', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'AutoBracketing' => { Description => 'Bracketing auto', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'AutoExposureBracketing' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'AutoFP' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'AutoFocus' => { Description => 'Auto-Focus', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'AutoISO' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'AutoLightingOptimizer' => { Description => 'Correction auto de luminosité', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Actif', 'Low' => 'Faible', 'Off' => 'Désactivé', 'Strong' => 'Importante', 'n/a' => 'Non établie', }, }, 'AutoLightingOptimizerOn' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'AutoRedEye' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'AutoRotate' => { Description => 'Rotation automatique', PrintConv => { 'None' => 'Aucune', 'Rotate 180' => '180° (bas/droit)', 'Rotate 270 CW' => '90° sens horaire (gauche/bas)', 'Rotate 90 CW' => '90° sens antihoraire (droit/haut)', 'n/a' => 'Inconnu', }, }, 'AuxiliaryLens' => 'Objectif Auxiliaire', 'AvApertureSetting' => 'Réglage d\'ouverture Av', 'AvSettingWithoutLens' => { Description => 'Réglage Av sans objectif', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activé', }, }, 'BToA0' => 'B à A0', 'BToA1' => 'B à A1', 'BToA2' => 'B à A2', 'BWMode' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'BackgroundColorIndicator' => 'Indicateur de couleur d\'arrière-plan', 'BackgroundColorValue' => 'Valeur de couleur d\'arrière-plan', 'BackgroundTiling' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'BadFaxLines' => 'Mauvaises lignes de Fax', 'BannerImageType' => { PrintConv => { 'None' => 'Aucune', }, }, 'BaseExposureCompensation' => 'Compensation d\'exposition de base', 'BaseURL' => 'URL de base', 'BaselineExposure' => 'Exposition de base', 'BaselineNoise' => 'Bruit de base', 'BaselineSharpness' => 'Accentuation de base', 'BatteryInfo' => 'Source d\'alimentation', 'BatteryLevel' => 'Niveau de batterie', 'BayerGreenSplit' => 'Séparation de vert Bayer', 'Beep' => { PrintConv => { 'High' => 'Bruyant', 'Low' => 'Calme', 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'BestQualityScale' => 'Echelle de meilleure qualité', 'BitsPerComponent' => 'Bits par composante', 'BitsPerExtendedRunLength' => 'Bits par « Run Length » étendue', 'BitsPerRunLength' => 'Bits par « Run Length »', 'BitsPerSample' => 'Nombre de bits par échantillon', 'BlackLevel' => 'Niveau noir', 'BlackLevelDeltaH' => 'Delta H du niveau noir', 'BlackLevelDeltaV' => 'Delta V du niveau noir', 'BlackLevelRepeatDim' => 'Dimension de répétition du niveau noir', 'BlackPoint' => 'Point noir', 'BlueBalance' => 'Balance bleue', 'BlueMatrixColumn' => 'Colonne de matrice bleue', 'BlueTRC' => 'Courbe de reproduction des tons bleus', 'BlurWarning' => { PrintConv => { 'None' => 'Aucune', }, }, 'BodyBatteryADLoad' => 'Tension accu boîtier en charge', 'BodyBatteryADNoLoad' => 'Tension accu boîtier à vide', 'BodyBatteryState' => { Description => 'État de accu boîtier', PrintConv => { 'Almost Empty' => 'Presque vide', 'Empty or Missing' => 'Vide ou absent', 'Full' => 'Plein', 'Running Low' => 'En baisse', }, }, 'BracketMode' => { PrintConv => { 'Off' => 'Désactivé', }, }, 'BracketShotNumber' => { Description => 'Numéro de cliché en bracketing', PrintConv => { '1 of 3' => '1 sur 3', '1 of 5' => '1 sur 5', '2 of 3' => '2 sur 3', '2 of 5' => '2 sur 5', '3 of 3' => '3 sur 3', '3 of 5' => '3 sur 5', '4 of 5' => '4 sur 5', '5 of 5' => '5 sur 5', 'n/a' => 'Non établie', }, }, 'Brightness' => 'Luminosité', 'BrightnessValue' => 'Luminosité', 'BulbDuration' => 'Durée du pose longue', 'BurstMode' => { Description => 'Mode Rafale', PrintConv => { 'Infinite' => 'Infini', 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ButtonFunctionControlOff' => { Description => 'Fonction de touche si Contrôle Rapide OFF', PrintConv => { 'Disable main, Control, Multi-control' => 'Désactivés principale, Contrôle rapide, Multicontrôleur', 'Normal (enable)' => 'Normale (activée)', }, }, 'By-line' => 'Créateur', 'By-lineTitle' => 'Fonction du créateur', 'CFALayout' => { Description => 'Organisation CFA', PrintConv => { 'Even columns offset down 1/2 row' => 'Organisation décalée A : les colonnes paires sont décalées vers le bas d\'une demi-rangée.', 'Even columns offset up 1/2 row' => 'Organisation décalée B : les colonnes paires sont décalées vers le haut d\'une demi-rangée.', 'Even rows offset left 1/2 column' => 'Organisation décalée D : les rangées paires sont décalées vers la gauche d\'une demi-colonne.', 'Even rows offset right 1/2 column' => 'Organisation décalée C : les rangées paires sont décalées vers la droite d\'une demi-colonne.', 'Rectangular' => 'Plan rectangulaire (ou carré)', }, }, 'CFAPattern' => 'Matrice de filtrage couleur', 'CFAPattern2' => 'Modèle CFA 2', 'CFAPlaneColor' => 'Couleur de plan CFA', 'CFARepeatPatternDim' => 'Dimension du modèle de répétition CFA', 'CMMFlags' => 'Drapeaux CMM', 'CMYKEquivalent' => 'Equivalent CMJK', 'CPUFirmwareVersion' => 'Version de firmware de CPU', 'CPUType' => { PrintConv => { 'None' => 'Aucune', }, }, 'CalibrationDateTime' => 'Date et heure de calibration', 'CalibrationIlluminant1' => { Description => 'Illuminant de calibration 1', PrintConv => { 'Cloudy' => 'Temps nuageux', 'Cool White Fluorescent' => 'Fluorescente type soft', 'Day White Fluorescent' => 'Fluorescente type blanc', 'Daylight' => 'Lumière du jour', 'Daylight Fluorescent' => 'Fluorescente type jour', 'Fine Weather' => 'Beau temps', 'Fluorescent' => 'Fluorescente', 'ISO Studio Tungsten' => 'Tungstène studio ISO', 'Other' => 'Autre source de lumière', 'Shade' => 'Ombre', 'Standard Light A' => 'Lumière standard A', 'Standard Light B' => 'Lumière standard B', 'Standard Light C' => 'Lumière standard C', 'Tungsten (Incandescent)' => 'Tungstène (lumière incandescente)', 'Unknown' => 'Inconnue', 'Warm White Fluorescent' => 'Fluorescent blanc chaud', 'White Fluorescent' => 'Fluorescent blanc', }, }, 'CalibrationIlluminant2' => { Description => 'Illuminant de calibration 2', PrintConv => { 'Cloudy' => 'Temps nuageux', 'Cool White Fluorescent' => 'Fluorescente type soft', 'Day White Fluorescent' => 'Fluorescente type blanc', 'Daylight' => 'Lumière du jour', 'Daylight Fluorescent' => 'Fluorescente type jour', 'Fine Weather' => 'Beau temps', 'Fluorescent' => 'Fluorescente', 'ISO Studio Tungsten' => 'Tungstène studio ISO', 'Other' => 'Autre source de lumière', 'Shade' => 'Ombre', 'Standard Light A' => 'Lumière standard A', 'Standard Light B' => 'Lumière standard B', 'Standard Light C' => 'Lumière standard C', 'Tungsten (Incandescent)' => 'Tungstène (lumière incandescente)', 'Unknown' => 'Inconnue', 'Warm White Fluorescent' => 'Fluorescent blanc chaud', 'White Fluorescent' => 'Fluorescent blanc', }, }, 'CameraCalibration1' => 'Calibration d\'appareil 1', 'CameraCalibration2' => 'Calibration d\'appareil 2', 'CameraCalibrationSig' => 'Signature de calibration de l\'appareil', 'CameraOrientation' => { Description => 'Orientation de l\'image', PrintConv => { 'Horizontal (normal)' => '0° (haut/gauche)', 'Rotate 270 CW' => '90° sens horaire (gauche/bas)', 'Rotate 90 CW' => '90° sens antihoraire (droit/haut)', }, }, 'CameraSerialNumber' => 'Numéro de série de l\'appareil', 'CameraSettings' => 'Réglages de l\'appareil', 'CameraTemperature' => 'Température de l\'appareil', 'CameraType' => 'Type d\'objectif Pentax', 'CanonExposureMode' => { PrintConv => { 'Aperture-priority AE' => 'Priorité ouverture', 'Bulb' => 'Pose B', 'Manual' => 'Manuelle', 'Program AE' => 'Programme d\'exposition automatique', 'Shutter speed priority AE' => 'Priorité vitesse', }, }, 'CanonFirmwareVersion' => 'Version de firmware', 'CanonFlashMode' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', 'Red-eye reduction' => 'Réduction yeux rouges', }, }, 'CanonImageSize' => { PrintConv => { 'Large' => 'Grande', 'Medium' => 'Moyenne', 'Medium 1' => 'Moyenne 1', 'Medium 2' => 'Moyenne 2', 'Medium 3' => 'Moyenne 3', 'Small' => 'Petite', 'Small 1' => 'Petite 1', 'Small 2' => 'Petite 2', 'Small 3' => 'Petite 3', }, }, 'Caption-Abstract' => 'Légende / Description', 'CaptionWriter' => 'Rédacteur', 'CaptureXResolutionUnit' => { PrintConv => { 'um' => 'µm (micromètre)', }, }, 'CaptureYResolutionUnit' => { PrintConv => { 'um' => 'µm (micromètre)', }, }, 'Categories' => 'Catégories', 'Category' => 'Catégorie', 'CellLength' => 'Longueur de cellule', 'CellWidth' => 'Largeur de cellule', 'CenterWeightedAreaSize' => { PrintConv => { 'Average' => 'Moyenne', }, }, 'Certificate' => 'Certificat', 'CharTarget' => 'Cible caractère', 'CharacterSet' => 'Jeu de caractères', 'ChromaBlurRadius' => 'Rayon de flou de chromatisme', 'ChromaticAdaptation' => 'Adaptation chromatique', 'Chromaticity' => 'Chromaticité', 'ChrominanceNR_TIFF_JPEG' => { PrintConv => { 'Low' => 'Bas', 'Off' => 'Désactivé', }, }, 'ChrominanceNoiseReduction' => { PrintConv => { 'Low' => 'Bas', 'Off' => 'Désactivé', }, }, 'CircleOfConfusion' => 'Cercle de confusion', 'City' => 'Ville', 'ClassifyState' => 'État de classification', 'CleanFaxData' => 'Données de Fax propres', 'ClipPath' => 'Chemin de rognage', 'CodedCharacterSet' => 'Jeu de caractères codé', 'CollectionName' => 'Nom de collection', 'ColorAberrationControl' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ColorAdjustmentMode' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ColorBalance' => 'Balance des couleurs', 'ColorBalanceAdj' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ColorBooster' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ColorCalibrationMatrix' => 'Table de matrice de calibration de couleur', 'ColorCharacterization' => 'Caractérisation de couleur', 'ColorComponents' => 'Composants colorimétriques', 'ColorEffect' => { Description => 'Effet de couleurs', PrintConv => { 'Black & White' => 'Noir et blanc', 'Cool' => 'Froide', 'Off' => 'Désactivé', 'Sepia' => 'Sépia', 'Warm' => 'Chaude', }, }, 'ColorFilter' => { Description => 'Filtre de couleur', PrintConv => { 'Blue' => 'Bleu', 'Green' => 'Vert', 'Off' => 'Désactivé', 'Red' => 'Rouge', 'Yellow' => 'Jaune', }, }, 'ColorHue' => 'Teinte de couleur', 'ColorInfo' => 'Info couleur', 'ColorMap' => 'Charte de couleur', 'ColorMatrix1' => 'Matrice de couleur 1', 'ColorMatrix2' => 'Matrice de couleur 2', 'ColorMode' => { Description => 'Mode colorimétrique', PrintConv => { 'Adobe RGB' => 'AdobeRVB', 'Autumn Leaves' => 'Feuilles automne', 'B&W' => 'Noir & Blanc', 'Clear' => 'Lumineux', 'Deep' => 'Profond', 'Evening' => 'Soir', 'Landscape' => 'Paysage', 'Light' => 'Pastel', 'Natural' => 'Naturel', 'Neutral' => 'Neutre', 'Night Scene' => 'Nocturne', 'Night View' => 'Vision nocturne', 'Night View/Portrait' => 'Portrait nocturne', 'Normal' => 'Normale', 'Off' => 'Désactivé', 'RGB' => 'RVB', 'Sunset' => 'Coucher de soleil', 'Vivid' => 'Vives', }, }, 'ColorMoireReduction' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ColorMoireReductionMode' => { PrintConv => { 'Low' => 'Bas', 'Off' => 'Désactivé', }, }, 'ColorPalette' => 'Palette de couleur', 'ColorRepresentation' => { Description => 'Représentation de couleur', PrintConv => { '3 Components, Frame Sequential in Multiple Objects' => 'Trois composantes, Vue séquentielle dans différents objets', '3 Components, Frame Sequential in One Object' => 'Trois composantes, Vue séquentielle dans un objet', '3 Components, Line Sequential' => 'Trois composantes, Ligne séquentielle', '3 Components, Pixel Sequential' => 'Trois composantes, Pixel séquentiel', '3 Components, Single Frame' => 'Trois composantes, Vue unique', '3 Components, Special Interleaving' => 'Trois composantes, Entrelacement spécial', '4 Components, Frame Sequential in Multiple Objects' => 'Quatre composantes, Vue séquentielle dans différents objets', '4 Components, Frame Sequential in One Object' => 'Quatre composantes, Vue séquentielle dans un objet', '4 Components, Line Sequential' => 'Quatre composantes, Ligne séquentielle', '4 Components, Pixel Sequential' => 'Quatre composantes, Pixel séquentiel', '4 Components, Single Frame' => 'Quatre composantes, Vue unique', '4 Components, Special Interleaving' => 'Quatre composantes, Entrelacement spécial', 'Monochrome, Single Frame' => 'Monochrome, Vue unique', 'No Image, Single Frame' => 'Pas d\'image, Vue unique', }, }, 'ColorResponseUnit' => 'Unité de réponse couleur', 'ColorSequence' => 'Séquence de couleur', 'ColorSpace' => { Description => 'Espace colorimétrique', PrintConv => { 'ICC Profile' => 'Profil ICC', 'RGB' => 'RVB', 'Uncalibrated' => 'Non calibré', 'Wide Gamut RGB' => 'Wide Gamut RVB', 'sRGB' => 'sRVB', }, }, 'ColorSpaceData' => 'Espace de couleur de données', 'ColorTable' => 'Tableau de couleurs', 'ColorTemperature' => 'Température de couleur', 'ColorTone' => { Description => 'Teinte couleur', PrintConv => { 'Normal' => 'Normale', }, }, 'ColorType' => { PrintConv => { 'RGB' => 'RVB', }, }, 'ColorantOrder' => 'Ordre de colorant', 'ColorantTable' => 'Table de colorant', 'ColorimetricReference' => 'Référence colorimétrique', 'CommandDialsChangeMainSub' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'CommandDialsMenuAndPlayback' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'CommandDialsReverseRotation' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'CommanderGroupAMode' => { PrintConv => { 'Manual' => 'Manuelle', 'Off' => 'Désactivé', }, }, 'CommanderGroupBMode' => { PrintConv => { 'Manual' => 'Manuelle', 'Off' => 'Désactivé', }, }, 'CommanderInternalFlash' => { PrintConv => { 'Manual' => 'Manuelle', 'Off' => 'Désactivé', }, }, 'Comment' => 'Commentaire', 'Comments' => 'Commentaires', 'Compilation' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'ComponentsConfiguration' => 'Signification de chaque composante', 'CompressedBitsPerPixel' => 'Mode de compression d\'image', 'Compression' => { Description => 'Schéma de compression', PrintConv => { 'JBIG Color' => 'JBIG Couleur', 'JPEG' => 'Compression JPEG', 'JPEG (old-style)' => 'JPEG (ancien style)', 'Kodak DCR Compressed' => 'Compression Kodak DCR', 'Kodak KDC Compressed' => 'Compression Kodak KDC', 'Next' => 'Encodage NeXT 2 bits', 'Nikon NEF Compressed' => 'Compression Nikon NEF', 'None' => 'Aucune', 'Pentax PEF Compressed' => 'Compression Pentax PEF', 'SGILog' => 'Encodage Log luminance SGI 32 bits', 'SGILog24' => 'Encodage Log luminance SGI 24 bits', 'Sony ARW Compressed' => 'Compression Sony ARW', 'Thunderscan' => 'Encodage ThunderScan 4 bits', 'Uncompressed' => 'Non compressé', }, }, 'CompressionType' => { PrintConv => { 'None' => 'Aucune', }, }, 'ConditionalFEC' => 'Compensation exposition flash', 'ConnectionSpaceIlluminant' => 'Illuminant d\'espace de connexion', 'ConsecutiveBadFaxLines' => 'Mauvaises lignes de Fax consécutives', 'ContentLocationCode' => 'Code du lieu du contenu', 'ContentLocationName' => 'Nom du lieu du contenu', 'ContinuousDrive' => { PrintConv => { 'Movie' => 'Vidéo', }, }, 'ContinuousShootingSpeed' => { Description => 'Vitesse de prise de vues en continu', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activée', }, }, 'ContinuousShotLimit' => { Description => 'Limiter nombre de vues en continu', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activée', }, }, 'Contrast' => { Description => 'Contraste', PrintConv => { '+1 (med high)' => '+1 (Assez fort)', '+2 (high)' => '+2 (Forte)', '+3 (very high)' => '+3 (Très fort)', '-1 (med low)' => '-1 (Assez faible)', '-2 (low)' => '-2 (Faible)', '-3 (very low)' => '-3 (Très faible)', '0 (normal)' => '0 (Normale)', 'High' => 'Dur', 'Low' => 'Doux', 'Medium High' => 'Moyen Haut', 'Medium Low' => 'Moyen Faible', 'Normal' => 'Normale', 'n/a' => 'Non établie', }, }, 'ContrastCurve' => 'Courbe de contraste', 'Contributor' => 'Contributeur', 'ControlMode' => { PrintConv => { 'n/a' => 'Non établie', }, }, 'ConversionLens' => { Description => 'Complément Optique', PrintConv => { 'Off' => 'Désactivé', 'Telephoto' => 'Télé', 'Wide' => 'Grand angulaire', }, }, 'Copyright' => 'Propriétaire du copyright', 'CopyrightNotice' => 'Mention de copyright', 'CopyrightStatus' => { PrintConv => { 'Unknown' => 'Inconnu', }, }, 'Country' => 'Pays', 'Country-PrimaryLocationCode' => 'Code de pays ISO', 'Country-PrimaryLocationName' => 'Pays', 'CountryCode' => 'Code pays', 'Coverage' => 'Couverture', 'CreateDate' => 'Date de la création des données numériques', 'CreationDate' => 'Date de création', 'Creator' => 'Créateur', 'CreatorAddress' => 'Adresse du créateur', 'CreatorCity' => 'Lieu d\'Habitation du créateur', 'CreatorContactInfo' => 'Contact créateur', 'CreatorCountry' => 'Pays du créateur', 'CreatorPostalCode' => 'Code postal du créateur', 'CreatorRegion' => 'Région du créateur', 'CreatorTool' => 'Outil de création', 'CreatorWorkEmail' => 'Courriel professionnel du créateur', 'CreatorWorkTelephone' => 'Téléphone professionnel créateur', 'CreatorWorkURL' => 'URL professionnelle du créateur', 'Credit' => 'Fournisseur', 'CropActive' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'CropUnit' => { PrintConv => { 'inches' => 'Pouce', }, }, 'CropUnits' => { PrintConv => { 'inches' => 'Pouce', }, }, 'CurrentICCProfile' => 'Profil ICC actuel', 'CurrentIPTCDigest' => 'Sommaire courant IPTC', 'CurrentPreProfileMatrix' => 'Matrice de pré-profil actuelle', 'Curves' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'CustomRendered' => { Description => 'Traitement d\'image personnalisé', PrintConv => { 'Custom' => 'Traitement personnalisé', 'Normal' => 'Traitement normal', }, }, 'D-LightingHQ' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'D-LightingHQSelected' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'D-LightingHS' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'DNGBackwardVersion' => 'Version DNG antérieure', 'DNGLensInfo' => 'Distance focale minimale', 'DNGVersion' => 'Version DNG', 'DOF' => 'Profondeur de champ', 'DSPFirmwareVersion' => 'Version de firmware de DSP', 'DataCompressionMethod' => 'Fournisseur/propriétaire de l\'algorithme de compression de données', 'DataDump' => 'Vidage données', 'DataImprint' => { PrintConv => { 'None' => 'Aucune', 'Text' => 'Texte', }, }, 'DataType' => 'Type de données', 'DateCreated' => 'Date de création', 'DateDisplayFormat' => { Description => 'Format date', PrintConv => { 'D/M/Y' => 'Jour/Mois/Année', 'M/D/Y' => 'Mois/Jour/Année', 'Y/M/D' => 'Année/Mois/Jour', }, }, 'DateSent' => 'Date d\'envoi', 'DateStampMode' => { PrintConv => { 'Date & Time' => 'Date et heure', 'Off' => 'Désactivé', }, }, 'DateTime' => 'Date de modification du fichier', 'DateTimeCreated' => 'Date/heure de création', 'DateTimeDigitized' => 'Date/heure de la numérisation', 'DateTimeOriginal' => 'Date de la création des données originales', 'DaylightSavings' => { Description => 'Heure d\'été', PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'DefaultCropOrigin' => 'Origine de rognage par défaut', 'DefaultCropSize' => 'Taille de rognage par défaut', 'DefaultScale' => 'Echelle par défaut', 'DeletedImageCount' => 'Compteur d\'images supprimées', 'DestinationCity' => 'Ville de destination', 'DestinationCityCode' => 'Code ville de destination', 'DestinationDST' => { Description => 'Heure d\'été de destination', PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'DeviceAttributes' => 'Attributs d\'appareil', 'DeviceManufacturer' => 'Fabricant de l\'appareil', 'DeviceMfgDesc' => 'Description du fabricant d\'appareil', 'DeviceModel' => 'Modèle de l\'appareil', 'DeviceModelDesc' => 'Description du modèle d\'appareil', 'DeviceSettingDescription' => 'Description des réglages du dispositif', 'DialDirectionTvAv' => { Description => 'Sens rotation molette Tv/Av', PrintConv => { 'Normal' => 'Normale', 'Reversed' => 'Sens inversé', }, }, 'DigitalCreationDate' => 'Date de numérisation', 'DigitalCreationTime' => 'Heure de numérisation', 'DigitalImageGUID' => 'GUID de l\'image numérique', 'DigitalSourceFileType' => 'Type de fichier de la source numérique', 'DigitalZoom' => { Description => 'Zoom numérique', PrintConv => { 'None' => 'Aucune', 'Off' => 'Désactivé', }, }, 'DigitalZoomOn' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'DigitalZoomRatio' => 'Rapport de zoom numérique', 'Directory' => 'Dossier', 'DirectoryNumber' => 'Numéro de dossier', 'DisplaySize' => { PrintConv => { 'Normal' => 'Normale', }, }, 'DisplayUnits' => { PrintConv => { 'inches' => 'Pouce', }, }, 'DisplayXResolutionUnit' => { PrintConv => { 'um' => 'µm (micromètre)', }, }, 'DisplayYResolutionUnit' => { PrintConv => { 'um' => 'µm (micromètre)', }, }, 'DisplayedUnitsX' => { PrintConv => { 'inches' => 'Pouce', }, }, 'DisplayedUnitsY' => { PrintConv => { 'inches' => 'Pouce', }, }, 'DistortionCorrection' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'DistortionCorrection2' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'DjVuVersion' => 'Version DjVu', 'DocumentHistory' => 'Historique du document', 'DocumentName' => 'Nom du document', 'DocumentNotes' => 'Remarques sur le document', 'DotRange' => 'Étendue de points', 'DriveMode' => { Description => 'Mode de prise de vue', PrintConv => { 'Burst' => 'Rafale', 'Continuous' => 'Continu', 'Continuous High' => 'Continu (ultrarapide)', 'Continuous Shooting' => 'Prise de vues en continu', 'Multiple Exposure' => 'Exposition multiple', 'No Timer' => 'Pas de retardateur', 'Off' => 'Désactivé', 'Remote Control' => 'Télécommande', 'Remote Control (3 s delay)' => 'Télécommande (retard 3 s)', 'Self-timer (12 s)' => 'Retardateur (12 s)', 'Self-timer (2 s)' => 'Retardateur (2 s)', 'Self-timer Operation' => 'Retardateur', 'Shutter Button' => 'Déclencheur', 'Single Exposure' => 'Exposition unique', 'Single-frame' => 'Vue par vue', 'Single-frame Shooting' => 'Prise de vue unique', }, }, 'DriveMode2' => { Description => 'Exposition multiple', PrintConv => { 'Single-frame' => 'Vue par vue', }, }, 'Duration' => 'Durée', 'DynamicRangeExpansion' => { Description => 'Expansion de la dynamique', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'DynamicRangeOptimizer' => { Description => 'Optimiseur Dyna', PrintConv => { 'Advanced Auto' => 'Avancé Auto', 'Advanced Lv1' => 'Avancé Niv1', 'Advanced Lv2' => 'Avancé Niv2', 'Advanced Lv3' => 'Avancé Niv3', 'Advanced Lv4' => 'Avancé Niv4', 'Advanced Lv5' => 'Avancé Niv5', 'Auto' => 'Auto.', 'Off' => 'Désactivé', }, }, 'E-DialInProgram' => { PrintConv => { 'P Shift' => 'Décalage P', 'Tv or Av' => 'Tv ou Av', }, }, 'ETTLII' => { PrintConv => { 'Average' => 'Moyenne', 'Evaluative' => 'Évaluative', }, }, 'EVStepInfo' => 'Info de pas IL', 'EVSteps' => { Description => 'Pas IL', PrintConv => { '1/2 EV Steps' => 'Pas de 1/2 IL', '1/3 EV Steps' => 'Pas de 1/3 IL', }, }, 'EasyExposureCompensation' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'EasyMode' => { PrintConv => { 'Beach' => 'Plage', 'Color Accent' => 'Couleur contrastée', 'Color Swap' => 'Permuter couleur', 'Fireworks' => 'Feu d\'artifice', 'Foliage' => 'Feuillages', 'Indoor' => 'Intérieur', 'Kids & Pets' => 'Enfants & animaux', 'Landscape' => 'Paysage', 'Manual' => 'Manuelle', 'Night' => 'Scène de nuit', 'Night Snapshot' => 'Mode Nuit', 'Snow' => 'Neige', 'Sports' => 'Sport', 'Super Macro' => 'Super macro', 'Underwater' => 'Sous-marin', }, }, 'EdgeNoiseReduction' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'EditStatus' => 'Statut d\'édition', 'EditorialUpdate' => { Description => 'Mise à jour éditoriale', PrintConv => { 'Additional language' => 'Langues supplémentaires', }, }, 'EffectiveLV' => 'Indice de lumination effectif', 'EffectiveMaxAperture' => 'Ouverture effective maxi de l\'Objectif', 'Emphasis' => { PrintConv => { 'None' => 'Aucune', }, }, 'EncodingProcess' => { Description => 'Procédé de codage', PrintConv => { 'Baseline DCT, Huffman coding' => 'Baseline DCT, codage Huffman', 'Extended sequential DCT, Huffman coding' => 'Extended sequential DCT, codage Huffman', 'Extended sequential DCT, arithmetic coding' => 'Extended sequential DCT, codage arithmétique', 'Lossless, Differential Huffman coding' => 'Lossless, codage Huffman différentiel', 'Lossless, Huffman coding' => 'Lossless, codage Huffman', 'Lossless, arithmetic coding' => 'Lossless, codage arithmétique', 'Lossless, differential arithmetic coding' => 'Lossless, codage arithmétique différentiel', 'Progressive DCT, Huffman coding' => 'Progressive DCT, codage Huffman', 'Progressive DCT, arithmetic coding' => 'Progressive DCT, codage arithmétique', 'Progressive DCT, differential Huffman coding' => 'Progressive DCT, codage Huffman différentiel', 'Progressive DCT, differential arithmetic coding' => 'Progressive DCT, codage arithmétique différentiel', 'Sequential DCT, differential Huffman coding' => 'Sequential DCT, codage Huffman différentiel', 'Sequential DCT, differential arithmetic coding' => 'Sequential DCT, codage arithmétique différentiel', }, }, 'Encryption' => 'Chiffrage', 'EndPoints' => 'Points de terminaison', 'EnhanceDarkTones' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'Enhancement' => { PrintConv => { 'Blue' => 'Bleu', 'Green' => 'Vert', 'Off' => 'Désactivé', 'Red' => 'Rouge', }, }, 'EnvelopeNumber' => 'Numéro d\'enveloppe', 'EnvelopePriority' => { Description => 'Priorité d\'enveloppe', PrintConv => { '0 (reserved)' => '0 (réservé pour utilisation future)', '1 (most urgent)' => '1 (très urgent)', '5 (normal urgency)' => '5 (normalement urgent)', '8 (least urgent)' => '8 (moins urgent)', '9 (user-defined priority)' => '9 (priorité définie par l\'utilisateur)', }, }, 'EnvelopeRecordVersion' => 'Version d\'enregistrement', 'Error' => 'Erreur', 'Event' => 'Evenement', 'ExcursionTolerance' => { Description => 'Tolérance d\'excursion ', PrintConv => { 'Allowed' => 'Possible', 'Not Allowed' => 'Non permis (défaut)', }, }, 'ExifByteOrder' => 'Indicateur d\'ordre des octets Exif', 'ExifCameraInfo' => 'Info d\'appareil photo Exif', 'ExifImageHeight' => 'Hauteur d\'image', 'ExifImageWidth' => 'Largeur d\'image', 'ExifOffset' => 'Pointeur Exif IFD', 'ExifToolVersion' => 'Version ExifTool', 'ExifUnicodeByteOrder' => 'Indicateur d\'ordre des octets Unicode Exif', 'ExifVersion' => 'Version Exif', 'ExitPupilPosition' => 'Position de la pupille de sortie', 'ExpandFilm' => 'Extension film', 'ExpandFilterLens' => 'Extension lentille filtre', 'ExpandFlashLamp' => 'Extension lampe flash', 'ExpandLens' => 'Extension objectif', 'ExpandScanner' => 'Extension Scanner', 'ExpandSoftware' => 'Extension logiciel', 'ExpirationDate' => 'Date d\'expiration', 'ExpirationTime' => 'Heure d\'expiration', 'ExposureBracketStepSize' => 'Intervalle de bracketing d\'exposition', 'ExposureBracketValue' => 'Valeur Bracketing Expo', 'ExposureCompensation' => 'Décalage d\'exposition', 'ExposureDelayMode' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ExposureDifference' => 'Correction d\'exposition', 'ExposureIndex' => 'Indice d\'exposition', 'ExposureLevelIncrements' => { Description => 'Paliers de réglage d\'expo', PrintConv => { '1-stop set, 1/3-stop comp.' => 'Réglage 1 valeur, correction 1/3 val.', '1/2 Stop' => 'Palier 1/2', '1/2-stop set, 1/2-stop comp.' => 'Réglage 1/2 valeur, correction 1/2 val.', '1/3 Stop' => 'Palier 1/3', '1/3-stop set, 1/3-stop comp.' => 'Réglage 1/3 valeur, correction 1/3 val.', }, }, 'ExposureMode' => { Description => 'Mode d\'exposition', PrintConv => { 'Aperture Priority' => 'Priorité ouverture', 'Aperture-priority AE' => 'Priorité ouverture', 'Auto' => 'Exposition automatique', 'Auto bracket' => 'Bracketting auto', 'Bulb' => 'Pose B', 'Landscape' => 'Paysage', 'Manual' => 'Exposition manuelle', 'Night Scene / Twilight' => 'Nocturne', 'Shutter Priority' => 'Priorité vitesse', 'Shutter speed priority AE' => 'Priorité vitesse', }, }, 'ExposureModeInManual' => { Description => 'Mode d\'exposition manuelle', PrintConv => { 'Center-weighted average' => 'Centrale pondérée', 'Evaluative metering' => 'Mesure évaluativ', 'Partial metering' => 'Partielle', 'Specified metering mode' => 'Mode de mesure spécifié', 'Spot metering' => 'Spot', }, }, 'ExposureProgram' => { Description => 'Programme d\'exposition', PrintConv => { 'Action (High speed)' => 'Programme action (orienté grandes vitesses d\'obturation)', 'Aperture Priority' => 'Priorité ouverture', 'Aperture-priority AE' => 'Priorité ouverture', 'Creative (Slow speed)' => 'Programme créatif (orienté profondeur de champ)', 'Landscape' => 'Mode paysage', 'Manual' => 'Manuel', 'Not Defined' => 'Non défini', 'Portrait' => 'Mode portrait', 'Program AE' => 'Programme normal', 'Shutter Priority' => 'Priorité vitesse', 'Shutter speed priority AE' => 'Priorité vitesse', }, }, 'ExposureTime' => 'Temps de pose', 'ExposureTime2' => 'Temps de pose 2', 'ExtendedWBDetect' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ExtenderStatus' => { PrintConv => { 'Attached' => 'Attaché', 'Not attached' => 'Non attaché', 'Removed' => 'Retiré', }, }, 'ExternalFlash' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ExternalFlashBounce' => { Description => 'Réflexion flash externe', PrintConv => { 'Bounce' => 'Avec réflecteur', 'No' => 'Non', 'Yes' => 'Oui', 'n/a' => 'Non établie', }, }, 'ExternalFlashExposureComp' => { Description => 'Compensation d\'exposition flash externe', PrintConv => { '-0.5' => '-0.5 IL', '-1.0' => '-1.0 IL', '-1.5' => '-1.5 IL', '-2.0' => '-2.0 IL', '-2.5' => '-2.5 IL', '-3.0' => '-3.0 IL', '0.0' => '0.0 IL', '0.5' => '0.5 IL', '1.0' => '1.0 IL', 'n/a' => 'Non établie (éteint ou modes auto)', 'n/a (Manual Mode)' => 'Non établie (mode manuel)', }, }, 'ExternalFlashGuideNumber' => 'Nombre guide flash externe', 'ExternalFlashMode' => { Description => 'Segment de mesure flash esclave 3', PrintConv => { 'Off' => 'Désactivé', 'On, Auto' => 'En service, auto', 'On, Contrast-control Sync' => 'En service, synchro contrôle des contrastes', 'On, Flash Problem' => 'En service, problème de flash', 'On, High-speed Sync' => 'En service, synchro haute vitesse', 'On, Manual' => 'En service, manuel', 'On, P-TTL Auto' => 'En service, auto P-TTL', 'On, Wireless' => 'En service, sans cordon', 'On, Wireless, High-speed Sync' => 'En service, sans cordon, synchro haute vitesse', 'n/a - Off-Auto-Aperture' => 'N/c - auto-diaph hors service', }, }, 'ExtraSamples' => 'Echantillons supplémentaires', 'FNumber' => 'Nombre F', 'FOV' => 'Champ de vision', 'FaceOrientation' => { PrintConv => { 'Horizontal (normal)' => '0° (haut/gauche)', 'Rotate 180' => '180° (bas/droit)', 'Rotate 270 CW' => '90° sens horaire (gauche/bas)', 'Rotate 90 CW' => '90° sens antihoraire (droit/haut)', }, }, 'FastSeek' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'FaxProfile' => { PrintConv => { 'Unknown' => 'Inconnu', }, }, 'FaxRecvParams' => 'Paramètres de réception Fax', 'FaxRecvTime' => 'Temps de réception Fax', 'FaxSubAddress' => 'Sous-adresse Fax', 'FileFormat' => 'Format de fichier', 'FileInfo' => 'Infos Fichier', 'FileInfoVersion' => 'Version des Infos Fichier', 'FileModifyDate' => 'Date/heure de modification du fichier', 'FileName' => 'Nom de fichier', 'FileNumber' => 'Numéro de fichier', 'FileNumberMemory' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'FileNumberSequence' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'FileSize' => 'Taille du fichier', 'FileSource' => { Description => 'Source du fichier', PrintConv => { 'Digital Camera' => 'Appareil photo numérique', 'Film Scanner' => 'Scanner de film', 'Reflection Print Scanner' => 'Scanner par réflexion', }, }, 'FileType' => 'Type de fichier', 'FileVersion' => 'Version de format de fichier', 'Filename' => 'Nom du fichier ', 'FillFlashAutoReduction' => { Description => 'Mesure E-TTL', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activé', }, }, 'FillOrder' => { Description => 'Ordre de remplissage', PrintConv => { 'Normal' => 'Normale', }, }, 'FilmMode' => { Description => 'Mode Film', PrintConv => { 'Dynamic (B&W)' => 'Vives (N & Bà)', 'Dynamic (color)' => 'Couleurs vives', 'Nature (color)' => 'Couleurs naturelles', 'Smooth (B&W)' => 'Pastel (N & B)', 'Smooth (color)' => 'Couleurs pastel', 'Standard (B&W)' => 'Normales (N & B)', 'Standard (color)' => 'Couleurs normales', }, }, 'FilterEffect' => { Description => 'Effet de filtre', PrintConv => { 'Green' => 'Vert', 'None' => 'Aucune', 'Off' => 'Désactivé', 'Red' => 'Rouge', 'Yellow' => 'Jaune', 'n/a' => 'Non établie', }, }, 'FilterEffectMonochrome' => { PrintConv => { 'Green' => 'Vert', 'None' => 'Aucune', 'Red' => 'Rouge', 'Yellow' => 'Jaune', }, }, 'FinderDisplayDuringExposure' => { Description => 'Affich. viseur pendant expo.', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'FirmwareVersion' => 'Version de firmware', 'FixtureIdentifier' => 'Identificateur d\'installation', 'Flash' => { Description => 'Flash ', PrintConv => { 'Auto, Did not fire' => 'Flash non déclenché, mode auto', 'Auto, Did not fire, Red-eye reduction' => 'Auto, flash non déclenché, mode réduction yeux rouges', 'Auto, Fired' => 'Flash déclenché, mode auto', 'Auto, Fired, Red-eye reduction' => 'Flash déclenché, mode auto, mode réduction yeux rouges, lumière renvoyée détectée', 'Auto, Fired, Red-eye reduction, Return detected' => 'Flash déclenché, mode auto, lumière renvoyée détectée, mode réduction yeux rouges', 'Auto, Fired, Red-eye reduction, Return not detected' => 'Flash déclenché, mode auto, lumière renvoyée non détectée, mode réduction yeux rouges', 'Auto, Fired, Return detected' => 'Flash déclenché, mode auto, lumière renvoyée détectée', 'Auto, Fired, Return not detected' => 'Flash déclenché, mode auto, lumière renvoyée non détectée', 'Did not fire' => 'Flash non déclenché', 'Fired' => 'Flash déclenché', 'Fired, Red-eye reduction' => 'Flash déclenché, mode réduction yeux rouges', 'Fired, Red-eye reduction, Return detected' => 'Flash déclenché, mode réduction yeux rouges, lumière renvoyée détectée', 'Fired, Red-eye reduction, Return not detected' => 'Flash déclenché, mode réduction yeux rouges, lumière renvoyée non détectée', 'Fired, Return detected' => 'Lumière renvoyée sur le capteur détectée', 'Fired, Return not detected' => 'Lumière renvoyée sur le capteur non détectée', 'No Flash' => 'Flash non déclenché', 'No flash function' => 'Pas de fonction flash', 'Off' => 'Désactivé', 'Off, Did not fire' => 'Flash non déclenché, mode flash forcé', 'Off, Did not fire, Return not detected' => 'Éteint, flash non déclenché, lumière renvoyée non détectée', 'Off, No flash function' => 'Éteint, pas de fonction flash', 'Off, Red-eye reduction' => 'Éteint, mode réduction yeux rouges', 'On' => 'Activé', 'On, Did not fire' => 'Hors service, flash non déclenché', 'On, Fired' => 'Flash déclenché, mode flash forcé', 'On, Red-eye reduction' => 'Flash déclenché, mode forcé, mode réduction yeux rouges', 'On, Red-eye reduction, Return detected' => 'Flash déclenché, mode forcé, mode réduction yeux rouges, lumière renvoyée détectée', 'On, Red-eye reduction, Return not detected' => 'Flash déclenché, mode forcé, mode réduction yeux rouges, lumière renvoyée non détectée', 'On, Return detected' => 'Flash déclenché, mode flash forcé, lumière renvoyée détectée', 'On, Return not detected' => 'Flash déclenché, mode flash forcé, lumière renvoyée non détectée', }, }, 'FlashBias' => 'Décalage Flash', 'FlashCommanderMode' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'FlashCompensation' => 'Compensation flash', 'FlashControlMode' => { Description => 'Mode de Contrôle du Flash', PrintConv => { 'Manual' => 'Manuelle', 'Off' => 'Désactivé', }, }, 'FlashDevice' => { PrintConv => { 'None' => 'Aucune', }, }, 'FlashEnergy' => 'Énergie du flash', 'FlashExposureBracketValue' => 'Valeur Bracketing Flash', 'FlashExposureComp' => 'Compensation d\'exposition au flash', 'FlashExposureCompSet' => 'Réglage de compensation d\'exposition au flash', 'FlashExposureLock' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'FlashFired' => { Description => 'Flash utilisé', PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'FlashFiring' => { Description => 'Émission de l\'éclair', PrintConv => { 'Does not fire' => 'Désactivé', 'Fires' => 'Activé', }, }, 'FlashFocalLength' => 'Focale Flash', 'FlashFunction' => 'Fonction flash', 'FlashGroupAControlMode' => { PrintConv => { 'Manual' => 'Manuelle', 'Off' => 'Désactivé', }, }, 'FlashGroupBControlMode' => { PrintConv => { 'Manual' => 'Manuelle', 'Off' => 'Désactivé', }, }, 'FlashGroupCControlMode' => { PrintConv => { 'Manual' => 'Manuelle', 'Off' => 'Désactivé', }, }, 'FlashInfo' => 'Information flash', 'FlashInfoVersion' => 'Version de l\'info Flash', 'FlashIntensity' => { PrintConv => { 'High' => 'Haut', 'Low' => 'Bas', 'Normal' => 'Normale', 'Strong' => 'Forte', }, }, 'FlashMeteringSegments' => 'Segments de mesure flash', 'FlashMode' => { Description => 'Mode flash', PrintConv => { 'Auto, Did not fire' => 'Auto, non déclenché', 'Auto, Did not fire, Red-eye reduction' => 'Auto, non déclenché, réduction yeux rouges', 'Auto, Fired' => 'Auto, déclenché', 'Auto, Fired, Red-eye reduction' => 'Auto, déclenché, réduction yeux rouges', 'Did Not Fire' => 'Eclair non-déclenché', 'External, Auto' => 'Externe, auto', 'External, Contrast-control Sync' => 'Externe, synchro contrôle des contrastes', 'External, Flash Problem' => 'Externe, problème de flash ?', 'External, High-speed Sync' => 'Externe, synchro haute vitesse', 'External, Manual' => 'Externe, manuel', 'External, P-TTL Auto' => 'Externe, P-TTL', 'External, Wireless' => 'Externe, sans cordon', 'External, Wireless, High-speed Sync' => 'Externe, sans cordon, synchro haute vitesse', 'Fired, Commander Mode' => 'Eclair déclenché, Mode maître', 'Fired, External' => 'Eclair déclenché, Exterieur', 'Fired, Manual' => 'Eclair déclenché, Manuel', 'Fired, TTL Mode' => 'Eclair déclenché, Mode TTL', 'Internal' => 'Interne', 'Normal' => 'Normale', 'Off' => 'Désactivé', 'Off, Did not fire' => 'Hors service', 'On' => 'Activé', 'On, Did not fire' => 'En service, non déclenché', 'On, Fired' => 'En service', 'On, Red-eye reduction' => 'En service, réduction yeux rouges', 'On, Slow-sync' => 'En service, synchro lente', 'On, Slow-sync, Red-eye reduction' => 'En service, synchro lente, réduction yeux rouges', 'On, Soft' => 'En service, doux', 'On, Trailing-curtain Sync' => 'En service, synchro 2e rideau', 'On, Wireless (Control)' => 'En service, sans cordon (esclave)', 'On, Wireless (Master)' => 'En service, sans cordon (maître)', 'Red-eye Reduction' => 'Réduction yeux rouges', 'Red-eye reduction' => 'Réduction yeux rouges', 'Unknown' => 'Inconnu', 'n/a - Off-Auto-Aperture' => 'N/c - auto-diaph hors service', }, }, 'FlashModel' => { Description => 'Modèle de Flash', PrintConv => { 'None' => 'Aucune', }, }, 'FlashOptions' => { Description => 'Options de flash', PrintConv => { 'Auto, Red-eye reduction' => 'Auto, réduction yeux rouges', 'Normal' => 'Normale', 'Red-eye reduction' => 'Réduction yeux rouges', 'Slow-sync' => 'Synchro lente', 'Slow-sync, Red-eye reduction' => 'Synchro lente, réduction yeux rouges', 'Trailing-curtain Sync' => 'Synchro 2e rideau', 'Wireless (Control)' => 'Sans cordon (contrôleur)', 'Wireless (Master)' => 'Sans cordon (maître)', }, }, 'FlashOptions2' => { Description => 'Options de flash (2)', PrintConv => { 'Auto, Red-eye reduction' => 'Auto, réduction yeux rouges', 'Normal' => 'Normale', 'Red-eye reduction' => 'Réduction yeux rouges', 'Slow-sync' => 'Synchro lente', 'Slow-sync, Red-eye reduction' => 'Synchro lente, réduction yeux rouges', 'Trailing-curtain Sync' => 'Synchro 2e rideau', 'Wireless (Control)' => 'Sans cordon (contrôleur)', 'Wireless (Master)' => 'Sans cordon (maître)', }, }, 'FlashOutput' => 'Puissance de l\'éclair', 'FlashRedEyeMode' => 'Flash mode anti-yeux rouges', 'FlashReturn' => { PrintConv => { 'No return detection' => 'Pas de détection de retour', 'Return detected' => 'Retour détecté', 'Return not detected' => 'Retour non détecté', }, }, 'FlashSetting' => 'Réglages Flash', 'FlashStatus' => { Description => 'Segment de mesure flash esclave 1', PrintConv => { 'External, Did not fire' => 'Externe, non déclenché', 'External, Fired' => 'Externe, déclenché', 'Internal, Did not fire' => 'Interne, non déclenché', 'Internal, Fired' => 'Interne, déclenché', 'Off' => 'Désactivé', }, }, 'FlashSyncSpeedAv' => { Description => 'Vitesse synchro en mode Av', PrintConv => { '1/200 Fixed' => '1/200 fixe', '1/250 Fixed' => '1/250 fixe', '1/300 Fixed' => '1/300 fixe', }, }, 'FlashType' => { Description => 'Type de flash', PrintConv => { 'Built-In Flash' => 'Intégré', 'External' => 'Externe', 'None' => 'Aucune', }, }, 'FlashWarning' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'FlashpixVersion' => 'Version Flashpix supportée', 'FlickerReduce' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'FlipHorizontal' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'FocalLength' => 'Focale de l\'objectif', 'FocalLength35efl' => 'Focale de l\'objectif', 'FocalLengthIn35mmFormat' => 'Distance focale sur film 35 mm', 'FocalPlaneResolutionUnit' => { Description => 'Unité de résolution de plan focal', PrintConv => { 'None' => 'Aucune', 'inches' => 'Pouce', 'um' => 'µm (micromètre)', }, }, 'FocalPlaneXResolution' => 'Résolution X du plan focal', 'FocalPlaneYResolution' => 'Résolution Y du plan focal', 'Focus' => { PrintConv => { 'Manual' => 'Manuelle', }, }, 'FocusContinuous' => { PrintConv => { 'Manual' => 'Manuelle', }, }, 'FocusDistance' => 'Distance de mise au point', 'FocusMode' => { Description => 'Mode mise au point', PrintConv => { 'AF-C' => 'AF-C (prise de vue en rafale)', 'AF-S' => 'AF-S (prise de vue unique)', 'Auto, Continuous' => 'Auto, continue', 'Auto, Focus button' => 'Bouton autofocus', 'Continuous' => 'Auto, continue', 'Infinity' => 'Infini', 'Manual' => 'Manuelle', 'Normal' => 'Normale', 'Pan Focus' => 'Hyperfocale', }, }, 'FocusMode2' => { Description => 'Mode mise au point 2', PrintConv => { 'AF-C' => 'AF-C (prise de vue en rafale)', 'AF-S' => 'AF-S (prise de vue unique)', 'Manual' => 'Manuelle', }, }, 'FocusModeSetting' => { PrintConv => { 'AF-C' => 'AF-C (prise de vue en rafale)', 'AF-S' => 'AF-S (prise de vue unique)', 'Manual' => 'Manuelle', }, }, 'FocusPosition' => 'Distance de mise au point', 'FocusRange' => { PrintConv => { 'Infinity' => 'Infini', 'Manual' => 'Manuelle', 'Normal' => 'Normale', 'Pan Focus' => 'Hyperfocale', 'Super Macro' => 'Super macro', }, }, 'FocusTrackingLockOn' => { PrintConv => { 'Normal' => 'Normale', 'Off' => 'Désactivé', }, }, 'FocusingScreen' => 'Verre de visée', 'ForwardMatrix1' => 'Matrice forward 1', 'ForwardMatrix2' => 'Matrice forward 2', 'FrameNumber' => 'Numéro de vue', 'FrameRate' => 'Vitesse', 'FrameSize' => 'Taille du cadre', 'FreeByteCounts' => 'Nombre d\'octets libres', 'FreeOffsets' => 'Offsets libres', 'FujiFlashMode' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', 'Red-eye reduction' => 'Réduction yeux rouges', }, }, 'GIFVersion' => 'Version GIF', 'GPSAltitude' => 'Altitude', 'GPSAltitudeRef' => { Description => 'Référence d\'altitude', PrintConv => { 'Above Sea Level' => 'Au-dessus du niveau de la mer', 'Below Sea Level' => 'Au-dessous du niveau de la mer', }, }, 'GPSAreaInformation' => 'Nom de la zone GPS', 'GPSDOP' => 'Précision de mesure', 'GPSDateStamp' => 'Date GPS', 'GPSDateTime' => 'Heure GPS (horloge atomique)', 'GPSDestBearing' => 'Orientation de la destination', 'GPSDestBearingRef' => { Description => 'Référence de l\'orientation de la destination', PrintConv => { 'Magnetic North' => 'Nord magnétique', 'True North' => 'Direction vraie', }, }, 'GPSDestDistance' => 'Distance à la destination', 'GPSDestDistanceRef' => { Description => 'Référence de la distance à la destination', PrintConv => { 'Kilometers' => 'Kilomètres', 'Nautical Miles' => 'Milles marins', }, }, 'GPSDestLatitude' => 'Latitude de destination', 'GPSDestLatitudeRef' => { Description => 'Référence de la latitude de destination', PrintConv => { 'North' => 'Latitude nord', 'South' => 'Latitude sud', }, }, 'GPSDestLongitude' => 'Longitude de destination', 'GPSDestLongitudeRef' => { Description => 'Référence de la longitude de destination', PrintConv => { 'East' => 'Longitude est', 'West' => 'Longitude ouest', }, }, 'GPSDifferential' => { Description => 'Correction différentielle GPS', PrintConv => { 'Differential Corrected' => 'Correction différentielle appliquée', 'No Correction' => 'Mesure sans correction différentielle', }, }, 'GPSImgDirection' => 'Direction de l\'image', 'GPSImgDirectionRef' => { Description => 'Référence pour la direction l\'image', PrintConv => { 'Magnetic North' => 'Direction magnétique', 'True North' => 'Direction vraie', }, }, 'GPSInfo' => 'Pointeur IFD d\'informations GPS', 'GPSLatitude' => 'Latitude', 'GPSLatitudeRef' => { Description => 'Latitude nord ou sud', PrintConv => { 'North' => 'Latitude nord', 'South' => 'Latitude sud', }, }, 'GPSLongitude' => 'Longitude', 'GPSLongitudeRef' => { Description => 'Longitude est ou ouest', PrintConv => { 'East' => 'Longitude est', 'West' => 'Longitude ouest', }, }, 'GPSMapDatum' => 'Données de surveillance géodésique utilisées', 'GPSMeasureMode' => { Description => 'Mode de mesure GPS', PrintConv => { '2-D' => 'Mesure à deux dimensions', '2-Dimensional' => 'Mesure à deux dimensions', '2-Dimensional Measurement' => 'Mesure à deux dimensions', '3-D' => 'Mesure à trois dimensions', '3-Dimensional' => 'Mesure à trois dimensions', '3-Dimensional Measurement' => 'Mesure à trois dimensions', }, }, 'GPSPosition' => 'Position GPS', 'GPSProcessingMethod' => 'Nom de la méthode de traitement GPS', 'GPSSatellites' => 'Satellites GPS utilisés pour la mesure', 'GPSSpeed' => 'Vitesse du récepteur GPS', 'GPSSpeedRef' => { Description => 'Unité de vitesse', PrintConv => { 'km/h' => 'Kilomètres par heure', 'knots' => 'NÅ“uds', 'mph' => 'Miles par heure', }, }, 'GPSStatus' => { Description => 'État du récepteur GPS', PrintConv => { 'Measurement Active' => 'Mesure active', 'Measurement Void' => 'Mesure vide', }, }, 'GPSTimeStamp' => 'Heure GPS (horloge atomique)', 'GPSTrack' => 'Direction de déplacement', 'GPSTrackRef' => { Description => 'Référence pour la direction de déplacement', PrintConv => { 'Magnetic North' => 'Direction magnétique', 'True North' => 'Direction vraie', }, }, 'GPSVersionID' => 'Version de tag GPS', 'GainControl' => { Description => 'Contrôle de gain', PrintConv => { 'High gain down' => 'Forte atténuation', 'High gain up' => 'Fort gain', 'Low gain down' => 'Faible atténuation', 'Low gain up' => 'Faible gain', 'None' => 'Aucune', }, }, 'GammaCompensatedValue' => 'Valeur de compensation gamma', 'Gapless' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'GeoTiffAsciiParams' => 'Tag de paramètres Ascii GeoTiff', 'GeoTiffDirectory' => 'Tag de répertoire de clé GeoTiff', 'GeoTiffDoubleParams' => 'Tag de paramètres doubles GeoTiff', 'Gradation' => 'Gradation', 'GrayResponseCurve' => 'Courbe de réponse du gris', 'GrayResponseUnit' => { Description => 'Unité de réponse en gris', PrintConv => { '0.0001' => 'Le nombre représente des millièmes d\'unité', '0.001' => 'Le nombre représente des centièmes d\'unité', '0.1' => 'Le nombre représente des dixièmes d\'unité', '1e-05' => 'Le nombre représente des dix-millièmes d\'unité', '1e-06' => 'Le nombre représente des cent-millièmes d\'unité', }, }, 'GrayTRC' => 'Courbe de reproduction des tons gris', 'GreenMatrixColumn' => 'Colonne de matrice verte', 'GreenTRC' => 'Courbe de reproduction des tons verts', 'GridDisplay' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'GripBatteryADLoad' => 'Tension accu poignée en charge', 'GripBatteryADNoLoad' => 'Tension accu poignée à vide', 'GripBatteryState' => { Description => 'État de accu poignée', PrintConv => { 'Almost Empty' => 'Presque vide', 'Empty or Missing' => 'Vide ou absent', 'Full' => 'Plein', 'Running Low' => 'En baisse', }, }, 'HCUsage' => 'Usage HC', 'HDR' => { Description => 'HDR auto', PrintConv => { 'Off' => 'Désactivée', }, }, 'HalftoneHints' => 'Indications sur les demi-teintes', 'Headline' => 'Titre principal', 'HierarchicalSubject' => 'Sujet hiérarchique', 'HighISONoiseReduction' => { Description => 'Réduction du bruit en haute sensibilité ISO', PrintConv => { 'Auto' => 'Auto.', 'High' => 'Fort', 'Low' => 'Bas', 'Normal' => 'Normale', 'Off' => 'Désactivé', 'On' => 'Activé', 'Strong' => 'Importante', 'Weak' => 'Faible', 'Weakest' => 'La plus faible', }, }, 'HighlightTonePriority' => { Description => 'Priorité hautes lumières', PrintConv => { 'Disable' => 'Désactivée', 'Enable' => 'Activée', 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'History' => 'Récapitulatif', 'HometownCity' => 'Ville de résidence', 'HometownCityCode' => 'Code ville de résidence', 'HometownDST' => { Description => 'Heure d\'été de résidence', PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'HostComputer' => 'Ordinateur hôte', 'Hue' => 'Nuance', 'HueAdjustment' => 'Teinte', 'HyperfocalDistance' => 'Distance hyperfocale', 'ICCProfile' => 'Profil ICC', 'ICCProfileName' => 'Nom du profil ICC', 'ICC_Profile' => 'Profil de couleur ICC d\'entrée', 'ID3Size' => 'Taille ID3', 'IPTC-NAA' => 'Métadonnées IPTC-NAA', 'IPTCBitsPerSample' => 'Nombre de bits par échantillon', 'IPTCImageHeight' => 'Nombre de lignes', 'IPTCImageRotation' => { Description => 'Rotation d\'image', PrintConv => { '0' => 'Pas de rotation', '180' => 'Rotation de 180 degrés', '270' => 'Rotation de 270 degrés', '90' => 'Rotation de 90 degrés', }, }, 'IPTCImageWidth' => 'Pixels par ligne', 'IPTCPictureNumber' => 'Numéro d\'image', 'IPTCPixelHeight' => 'Taille de pixel perpendiculairement à la direction de scan', 'IPTCPixelWidth' => 'Taille de pixel dans la direction de scan', 'ISO' => 'Sensibilité ISO', 'ISOExpansion' => { Description => 'Extension sensibilité ISO', PrintConv => { 'Off' => 'Arrêt', 'On' => 'Marche', }, }, 'ISOExpansion2' => { PrintConv => { 'Off' => 'Désactivé', }, }, 'ISOFloor' => 'Seuil ISO', 'ISOInfo' => 'Info ISO', 'ISOSelection' => 'Choix ISO', 'ISOSetting' => { Description => 'Réglage ISO', PrintConv => { 'Manual' => 'Manuelle', }, }, 'ISOSpeedExpansion' => { Description => 'Extension de sensibilité ISO', PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'ISOSpeedIncrements' => { Description => 'Incréments de sensibilité ISO', PrintConv => { '1/3 Stop' => 'Palier 1/3', }, }, 'ISOSpeedRange' => { Description => 'Régler l\'extension de sensibilité ISO', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activée', }, }, 'IT8Header' => 'En-tête IT8', 'Identifier' => 'Identifiant', 'Illumination' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ImageAdjustment' => 'Ajustement Image', 'ImageAreaOffset' => 'Décalage de zone d\'image', 'ImageAuthentication' => { Description => 'Authentication de l\'image', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ImageBoundary' => 'Cadre Image', 'ImageColorIndicator' => 'Indicateur de couleur d\'image', 'ImageColorValue' => 'Valeur de couleur d\'image', 'ImageCount' => 'Compteur d\'images', 'ImageDataSize' => 'Taille de l\'image', 'ImageDepth' => 'Profondeur d\'image', 'ImageDescription' => 'Description d\'image', 'ImageDustOff' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ImageEditCount' => 'Compteur de traitement d\'image', 'ImageEditing' => { Description => 'Traitement de l\'image', PrintConv => { 'Cropped' => 'Recadré', 'Digital Filter' => 'Filtre numérique', 'Frame Synthesis?' => 'Synthèse de vue ?', 'None' => 'Aucun', }, }, 'ImageHeight' => 'Hauteur d\'image', 'ImageHistory' => 'Historique de l\'image', 'ImageID' => 'ID d\'image', 'ImageLayer' => 'Couche image', 'ImageNumber' => 'Numéro d\'image', 'ImageOptimization' => 'Optimisation d\'image', 'ImageOrientation' => { Description => 'Orientation d\'image', PrintConv => { 'Landscape' => 'Paysage', 'Square' => 'Carré', }, }, 'ImageProcessing' => 'Retouche d\'image', 'ImageQuality' => { PrintConv => { 'Normal' => 'Normale', }, }, 'ImageReview' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ImageRotated' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'ImageSize' => 'Taille de l\'Image', 'ImageSourceData' => 'Données source d\'image', 'ImageStabilization' => { Description => 'Stabilisation d\'image', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', 'On, Mode 1' => 'Enclenché, Mode 1', 'On, Mode 2' => 'Enclenché, Mode 2', }, }, 'ImageTone' => { Description => 'Ton de l\'image', PrintConv => { 'Bright' => 'Brillant', 'Landscape' => 'Paysage', 'Natural' => 'Naturel', }, }, 'ImageType' => 'Type d\'image', 'ImageUniqueID' => 'Identificateur unique d\'image', 'ImageWidth' => 'Largeur d\'image', 'Indexed' => 'Indexé', 'InfoButtonWhenShooting' => { Description => 'Touche INFO au déclenchement', PrintConv => { 'Displays camera settings' => 'Affiche les réglages en cours', 'Displays shooting functions' => 'Affiche les fonctions', }, }, 'InkNames' => 'Nom des encres', 'InkSet' => 'Encrage', 'IntellectualGenre' => 'Genre intellectuel', 'IntelligentAuto' => 'Mode Auto intelligent', 'IntensityStereo' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'InterchangeColorSpace' => { PrintConv => { 'CMY (K) Device Dependent' => 'CMY(K) dépendant de l\'appareil', 'RGB Device Dependent' => 'RVB dépendant de l\'appareil', }, }, 'IntergraphMatrix' => 'Tag de matrice intergraphe', 'Interlace' => 'Entrelacement', 'InternalFlash' => { PrintConv => { 'Fired' => 'Flash déclenché', 'Manual' => 'Manuelle', 'No' => 'Flash non déclenché', 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'InternalFlashMode' => { Description => 'Segment de mesure flash esclave 2', PrintConv => { 'Did not fire, (Unknown 0xf4)' => 'Hors service (inconnue 0xF4)', 'Did not fire, Auto' => 'Hors service, auto', 'Did not fire, Auto, Red-eye reduction' => 'Hors service, auto, réduction yeux rouges', 'Did not fire, Normal' => 'Hors service, normal', 'Did not fire, Red-eye reduction' => 'Hors service, réduction yeux rouges', 'Did not fire, Slow-sync' => 'Hors service, synchro lente', 'Did not fire, Slow-sync, Red-eye reduction' => 'Hors service, synchro lente, réduction yeux rouges', 'Did not fire, Trailing-curtain Sync' => 'Hors service, synchro 2e rideau', 'Did not fire, Wireless (Control)' => 'Hors service, sans cordon (contrôleur)', 'Did not fire, Wireless (Master)' => 'Hors service, sans cordon (maître)', 'Fired' => 'Activé', 'Fired, Auto' => 'En service, auto', 'Fired, Auto, Red-eye reduction' => 'En service, auto, réduction yeux rouges', 'Fired, Red-eye reduction' => 'En service, réduction yeux rouges', 'Fired, Slow-sync' => 'En service, synchro lente', 'Fired, Slow-sync, Red-eye reduction' => 'En service, synchro lente, réduction yeux rouges', 'Fired, Trailing-curtain Sync' => 'En service, synchro 2e rideau', 'Fired, Wireless (Control)' => 'En service, sans cordon (contrôleur)', 'Fired, Wireless (Master)' => 'En service, sans cordon (maître)', 'n/a - Off-Auto-Aperture' => 'N/c - auto-diaph hors service', }, }, 'InternalFlashStrength' => 'Segment de mesure flash esclave 4', 'InternalSerialNumber' => 'Numéro de série interne', 'InteropIndex' => { Description => 'Identification d\'interopérabilité', PrintConv => { 'R03 - DCF option file (Adobe RGB)' => 'R03: fichier d\'option DCF (Adobe RGB)', 'R98 - DCF basic file (sRGB)' => 'R98: fichier de base DCF (sRGB)', 'THM - DCF thumbnail file' => 'THM: fichier de vignette DCF', }, }, 'InteropOffset' => 'Indicateur d\'interfonctionnement', 'InteropVersion' => 'Version d\'interopérabilité', 'IptcLastEdited' => 'Dernière édition IPTC', 'JFIFVersion' => 'Version JFIF', 'JPEGACTables' => 'Tableaux AC JPEG', 'JPEGDCTables' => 'Tableaux DC JPEG', 'JPEGLosslessPredictors' => 'Prédicteurs JPEG sans perte', 'JPEGPointTransforms' => 'Transformations de point JPEG', 'JPEGProc' => 'Proc JPEG', 'JPEGQTables' => 'Tableaux Q JPEG', 'JPEGQuality' => { Description => 'Qualité', PrintConv => { 'Extra Fine' => 'Extra fine', 'Standard' => 'Normale', }, }, 'JPEGRestartInterval' => 'Intervalle de redémarrage JPEG', 'JPEGTables' => 'Tableaux JPEG', 'JobID' => 'ID de la tâche', 'JpgRecordedPixels' => { Description => 'Pixels enregistrés JPEG', PrintConv => { '10 MP' => '10 Mpx', '2 MP' => '2 Mpx', '6 MP' => '6 Mpx', }, }, 'Keyword' => 'Mots clé', 'Keywords' => 'Mots-clés', 'LC1' => 'Données d\'objectif', 'LC10' => 'Données mv\' nv\'', 'LC11' => 'Données AVC 1/EXP', 'LC12' => 'Données mv1 Avminsif', 'LC14' => 'Données UNT_12 UNT_6', 'LC15' => 'Données d\'adaptation de flash incorporé', 'LC2' => 'Code de distance', 'LC3' => 'Valeur K', 'LC4' => 'Données de correction d\'aberration à courte distance', 'LC5' => 'Données de correction d\'aberration chromatique', 'LC6' => 'Données d\'aberration d\'ouverture', 'LC7' => 'Données de condition minimale de déclenchement AF', 'LCDDisplayAtPowerOn' => { Description => 'État LCD lors de l\'allumage', PrintConv => { 'Display' => 'Allumé', 'Retain power off status' => 'État précédent', }, }, 'LCDDisplayReturnToShoot' => { Description => 'Affich. LCD -> Prise de vues', PrintConv => { 'Also with * etc.' => 'Aussi par * etc.', 'With Shutter Button only' => 'Par déclencheur uniq.', }, }, 'LCDIllumination' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'LCDIlluminationDuringBulb' => { Description => 'Éclairage LCD pendant pose longue', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'LCDPanels' => { Description => 'Ecran LCD supérieur/arrière', PrintConv => { 'ISO/File no.' => 'ISO/No. fichier', 'ISO/Remain. shots' => 'ISO/Vues restantes', 'Remain. shots/File no.' => 'Vues restantes/No. fichier', 'Shots in folder/Remain. shots' => 'Vues dans dossier/Vues restantes', }, }, 'LCHEditor' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'Language' => 'Langage', 'LanguageIdentifier' => 'Identificateur de langue', 'LastKeywordIPTC' => 'Dernier mot-clé IPTC', 'LastKeywordXMP' => 'Dernier mot-clé XMP', 'LeafData' => 'Données Leaf', 'Lens' => 'Objectif ', 'LensAFStopButton' => { Description => 'Fonct. touche AF objectif', PrintConv => { 'AE lock' => 'Verrouillage AE', 'AE lock while metering' => 'Verr. AE posemètre actif', 'AF Stop' => 'Arrêt AF', 'AF mode: ONE SHOT <-> AI SERVO' => 'Mode AF: ONE SHOT <-> AI SERVO', 'AF point: M -> Auto / Auto -> Ctr.' => 'Colli: M -> Auto / Auto -> Ctr.', 'AF point: M->Auto/Auto->ctr' => 'Collim.AF: M->Auto/Auto->ctr', 'AF start' => 'Activation AF', 'AF stop' => 'Arrêt AF', 'IS start' => 'Activation stab. image', 'Switch to registered AF point' => 'Activer le collimateur autofocus enregistré', }, }, 'LensData' => 'Valeur K (LC3)', 'LensDataVersion' => 'Version des Données Objectif', 'LensDriveNoAF' => { Description => 'Pilot. obj. si AF impossible', PrintConv => { 'Focus search off' => 'Pas de recherche du point', 'Focus search on' => 'Recherche du point', }, }, 'LensFStops' => 'Nombre de diaphs de l\'objectif', 'LensID' => 'ID Lens', 'LensIDNumber' => 'Numéro d\'Objectif', 'LensInfo' => 'Informations sur l\'objectif', 'LensKind' => 'Sorte d\'objectif / version (LC0)', 'LensMake' => 'Fabricant d\'objectif', 'LensModel' => 'Modèle d\'objectif', 'LensSerialNumber' => 'Numéro de série objectif', 'LensType' => 'Sorte d\'objectif', 'LicenseType' => { PrintConv => { 'Unknown' => 'Inconnu', }, }, 'LightReading' => 'Lecture de la lumière', 'LightSource' => { Description => 'Source de lumière', PrintConv => { 'Cloudy' => 'Temps nuageux', 'Cool White Fluorescent' => 'Fluorescente type soft', 'Day White Fluorescent' => 'Fluorescente type blanc', 'Daylight' => 'Lumière du jour', 'Daylight Fluorescent' => 'Fluorescente type jour', 'Fine Weather' => 'Beau temps', 'Fluorescent' => 'Fluorescente', 'ISO Studio Tungsten' => 'Tungstène studio ISO', 'Other' => 'Autre source de lumière', 'Shade' => 'Ombre', 'Standard Light A' => 'Lumière standard A', 'Standard Light B' => 'Lumière standard B', 'Standard Light C' => 'Lumière standard C', 'Tungsten (Incandescent)' => 'Tungstène (lumière incandescente)', 'Unknown' => 'Inconnue', 'Warm White Fluorescent' => 'Fluorescent blanc chaud', 'White Fluorescent' => 'Fluorescent blanc', }, }, 'LightSourceSpecial' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'LightValue' => 'Luminosité', 'Lightness' => 'Luminosité', 'LinearResponseLimit' => 'Limite de réponse linéaire', 'LinearizationTable' => 'Table de linéarisation', 'Lit' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'LiveViewExposureSimulation' => { Description => 'Simulation d\'exposition directe', PrintConv => { 'Disable (LCD auto adjust)' => 'Désactivée (réglage écran auto)', 'Enable (simulates exposure)' => 'Activée (simulation exposition)', }, }, 'LiveViewShooting' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'LocalizedCameraModel' => 'Nom traduit de modèle d\'appareil', 'Location' => 'Lieu', 'LockMicrophoneButton' => { Description => 'Fonction de touche microphone', PrintConv => { 'Protect (hold:record memo)' => 'Protéger (maintien: enregistrement sonore)', 'Record memo (protect:disable)' => 'Enregistrement sonore (protéger: désactivée)', }, }, 'LongExposureNoiseReduction' => { Description => 'Réduct. bruit longue expo.', PrintConv => { 'Off' => 'Arrêt', 'On' => 'Marche', }, }, 'LookupTable' => 'Table de correspondance', 'LoopStyle' => { PrintConv => { 'Normal' => 'Normale', }, }, 'LuminanceNoiseReduction' => { PrintConv => { 'Low' => 'Bas', 'Off' => 'Désactivé', }, }, 'MCUVersion' => 'Version MCU', 'MIEVersion' => 'Version MIE', 'MIMEType' => 'Type MIME', 'MSStereo' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'Macro' => { PrintConv => { 'Manual' => 'Manuelle', 'Normal' => 'Normale', 'Off' => 'Désactivé', 'On' => 'Activé', 'Super Macro' => 'Super macro', }, }, 'MacroMode' => { Description => 'Mode Macro', PrintConv => { 'Normal' => 'Normale', 'Off' => 'Désactivé', 'On' => 'Activé', 'Super Macro' => 'Super macro', 'Tele-Macro' => 'Macro en télé', }, }, 'MagnifiedView' => { Description => 'Agrandissement en lecture', PrintConv => { 'Image playback only' => 'Lecture image uniquement', 'Image review and playback' => 'Aff. inst. et lecture', }, }, 'MainDialExposureComp' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'Make' => 'Fabricant', 'MakeAndModel' => 'Fabricant et modèle', 'MakerNote' => 'Données privées DNG', 'MakerNoteSafety' => { Description => 'Sécurité de note de fabricant', PrintConv => { 'Safe' => 'Sûre', 'Unsafe' => 'Pas sûre', }, }, 'MakerNoteVersion' => 'Version des informations spécifiques fabricant', 'MakerNotes' => 'Notes fabricant', 'ManualFlashOutput' => { PrintConv => { 'Low' => 'Bas', 'n/a' => 'Non établie', }, }, 'ManualFocusDistance' => 'Distance de Mise-au-point Manuelle', 'ManualTv' => { Description => 'Régl. Tv/Av manuel pour exp. M', PrintConv => { 'Tv=Control/Av=Main' => 'Tv=Contrôle rapide/Av=Principale', 'Tv=Control/Av=Main w/o lens' => 'Tv=Contrôle rapide/Av=Principale sans objectif', 'Tv=Main/Av=Control' => 'Tv=Principale/Av=Contrôle rapide', 'Tv=Main/Av=Main w/o lens' => 'Tv=Principale/Av=Contrôle rapide sans objectif', }, }, 'ManufactureDate' => 'Date de fabrication', 'Marked' => 'Marqué', 'MaskedAreas' => 'Zones masquées', 'MasterDocumentID' => 'ID du document maître', 'Matteing' => 'Matité', 'MaxAperture' => 'Données Avmin', 'MaxApertureAtMaxFocal' => 'Ouverture à la focale maxi', 'MaxApertureAtMinFocal' => 'Ouverture à la focale mini', 'MaxApertureValue' => 'Ouverture maximale de l\'objectif', 'MaxAvailHeight' => 'Hauteur max Disponible', 'MaxAvailWidth' => 'Largeur max Disponible', 'MaxFocalLength' => 'Focale maxi', 'MaxSampleValue' => 'Valeur maxi d\'échantillon', 'MaxVal' => 'Valeur max', 'MaximumDensityRange' => 'Etendue maximale de densité', 'Measurement' => 'Observateur de mesure', 'MeasurementBacking' => 'Support de mesure', 'MeasurementFlare' => 'Flare de mesure', 'MeasurementGeometry' => { Description => 'Géométrie de mesure', PrintConv => { '0/45 or 45/0' => '0/45 ou 45/0', '0/d or d/0' => '0/d ou d/0', }, }, 'MeasurementIlluminant' => 'Illuminant de mesure', 'MeasurementObserver' => 'Observateur de mesure', 'MediaBlackPoint' => 'Point noir moyen', 'MediaType' => { PrintConv => { 'Normal' => 'Normale', }, }, 'MediaWhitePoint' => 'Point blanc moyen', 'MenuButtonDisplayPosition' => { Description => 'Position début touche menu', PrintConv => { 'Previous' => 'Précédente', 'Previous (top if power off)' => 'Précédente (Haut si dés.)', 'Top' => 'Haut', }, }, 'MenuButtonReturn' => { PrintConv => { 'Previous' => 'Précédente', 'Top' => 'Haut', }, }, 'MetadataDate' => 'Date des metadonnées', 'MeteringMode' => { Description => 'Mode de mesure', PrintConv => { 'Average' => 'Moyenne', 'Center-weighted average' => 'Centrale pondérée', 'Evaluative' => 'Évaluative', 'Multi-segment' => 'Multizone', 'Multi-spot' => 'MultiSpot', 'Other' => 'Autre', 'Partial' => 'Partielle', 'Unknown' => 'Inconnu', }, }, 'MeteringMode2' => { Description => 'Mode de mesure 2', PrintConv => { 'Multi-segment' => 'Multizone', }, }, 'MeteringMode3' => { Description => 'Mode de mesure (3)', PrintConv => { 'Multi-segment' => 'Multizone', }, }, 'MinAperture' => 'Ouverture mini', 'MinFocalLength' => 'Focale mini', 'MinSampleValue' => 'Valeur mini d\'échantillon', 'MinoltaQuality' => { Description => 'Qualité', PrintConv => { 'Normal' => 'Normale', }, }, 'MirrorLockup' => { Description => 'Verrouillage du miroir', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activé', 'Enable: Down with Set' => 'Activé: Retour par touche SET', }, }, 'ModDate' => 'Date de modification', 'Model' => 'Modèle d\'appareil photo', 'Model2' => 'Modèle d\'équipement de prise de vue (2)', 'ModelAge' => 'Age du modèle', 'ModelTiePoint' => 'Tag de lien d modèle', 'ModelTransform' => 'Tag de transformation de modèle', 'ModelingFlash' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ModifiedPictureStyle' => { PrintConv => { 'Landscape' => 'Paysage', 'None' => 'Aucune', }, }, 'ModifiedSaturation' => { PrintConv => { 'Off' => 'Désactivé', }, }, 'ModifiedSharpnessFreq' => { PrintConv => { 'High' => 'Haut', 'Highest' => 'Plus haut', 'Low' => 'Doux', 'n/a' => 'Non établie', }, }, 'ModifiedToneCurve' => { PrintConv => { 'Manual' => 'Manuelle', }, }, 'ModifiedWhiteBalance' => { PrintConv => { 'Cloudy' => 'Temps nuageux', 'Daylight' => 'Lumière du jour', 'Daylight Fluorescent' => 'Fluorescente type jour', 'Fluorescent' => 'Fluorescente', 'Shade' => 'Ombre', 'Tungsten' => 'Tungstène (lumière incandescente)', }, }, 'ModifyDate' => 'Date de modification de fichier', 'MoireFilter' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'MonochromeFilterEffect' => { PrintConv => { 'Green' => 'Vert', 'None' => 'Aucune', 'Red' => 'Rouge', 'Yellow' => 'Jaune', }, }, 'MonochromeLinear' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'MonochromeToningEffect' => { PrintConv => { 'Blue' => 'Bleu', 'Green' => 'Vert', 'None' => 'Aucune', }, }, 'MultiExposure' => 'Infos Surimpression', 'MultiExposureAutoGain' => { Description => 'Auto-expo des surimpressions', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'MultiExposureMode' => { Description => 'Mode de surimpression', PrintConv => { 'Off' => 'Désactivé', }, }, 'MultiExposureShots' => 'Nombre de prises de vue', 'MultiExposureVersion' => 'Version Surimpression', 'MultiFrameNoiseReduction' => { Description => 'Réduc. bruit multi-photos', PrintConv => { 'Off' => 'Désactivée', 'On' => 'Activé(e)', }, }, 'MultipleExposureSet' => { Description => 'Exposition multiple', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'Mute' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'MyColorMode' => { PrintConv => { 'Off' => 'Désactivé', }, }, 'NDFilter' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'NEFCompression' => { PrintConv => { 'Uncompressed' => 'Non compressé', }, }, 'NEFLinearizationTable' => 'Table de Linearization', 'Name' => 'Nom', 'NamedColor2' => 'Couleur nommée 2', 'NativeDigest' => 'Sommaire natif', 'NativeDisplayInfo' => 'Information sur l\'affichage natif', 'NewsPhotoVersion' => 'Version d\'enregistrement news photo', 'Nickname' => 'Surnom', 'NikonCaptureData' => 'Données Nikon Capture', 'NikonCaptureVersion' => 'Version Nikon Capture', 'Noise' => 'Bruit', 'NoiseFilter' => { PrintConv => { 'Low' => 'Bas', 'Off' => 'Désactivé', }, }, 'NoiseReduction' => { Description => 'Réduction du bruit', PrintConv => { 'High (+1)' => '+1 (haut)', 'Highest (+2)' => '+2 (le plus haut)', 'Low' => 'Bas', 'Low (-1)' => '-1 (bas)', 'Lowest (-2)' => '-2 (le plus bas)', 'Normal' => 'Normale', 'Off' => 'Désactivé', 'On' => 'Activé', 'Standard' => '±0 (normal)', }, }, 'NoiseReductionApplied' => 'Réduction de bruit appliquée', 'NominalMaxAperture' => 'Ouverture maxi nominal', 'NominalMinAperture' => 'Ouverture mini nominal', 'NumIndexEntries' => 'Nombre d\'entrées d\'index', 'NumberofInks' => 'Nombre d\'encres', 'OECFColumns' => 'Colonnes OECF', 'OECFNames' => 'Noms OECF', 'OECFRows' => 'Lignes OECF', 'OECFValues' => 'Valeurs OECF', 'OPIProxy' => 'Proxy OPI', 'ObjectAttributeReference' => 'Genre intellectuel', 'ObjectCycle' => { Description => 'Cycle d\'objet', PrintConv => { 'Both Morning and Evening' => 'Les deux', 'Evening' => 'Soir', 'Morning' => 'Matin', }, }, 'ObjectFileType' => { PrintConv => { 'None' => 'Aucune', 'Unknown' => 'Inconnu', }, }, 'ObjectName' => 'Titre', 'ObjectPreviewData' => 'Données de la miniature de l\'objet', 'ObjectPreviewFileFormat' => 'Format de fichier de la miniature de l\'objet', 'ObjectPreviewFileVersion' => 'Version de format de fichier de la miniature de l\'objet', 'ObjectTypeReference' => 'Référence de type d\'objet', 'OffsetSchema' => 'Schéma de décalage', 'OldSubfileType' => 'Type du sous-fichier', 'OneTouchWB' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'OpticalZoomMode' => { Description => 'Mode Zoom optique', PrintConv => { 'Extended' => 'Optique EX', 'Standard' => 'Normal', }, }, 'OpticalZoomOn' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'Opto-ElectricConvFactor' => 'Facteur de conversion optoélectrique', 'Orientation' => { Description => 'Orientation de l\'image', PrintConv => { 'Horizontal (normal)' => '0° (haut/gauche)', 'Mirror horizontal' => '0° (haut/droit)', 'Mirror horizontal and rotate 270 CW' => '90° sens horaire (gauche/haut)', 'Mirror horizontal and rotate 90 CW' => '90° sens antihoraire (droit/bas)', 'Mirror vertical' => '180° (bas/gauche)', 'Rotate 180' => '180° (bas/droit)', 'Rotate 270 CW' => '90° sens horaire (gauche/bas)', 'Rotate 90 CW' => '90° sens antihoraire (droit/haut)', }, }, 'OriginalRawFileData' => 'Données du fichier raw d\'origine', 'OriginalRawFileDigest' => 'Digest du fichier raw original', 'OriginalRawFileName' => 'Nom du fichier raw d\'origine', 'OriginalTransmissionReference' => 'Identificateur de tâche', 'OriginatingProgram' => 'Programme d\'origine', 'OtherImage' => 'Autre image', 'OutputResponse' => 'Réponse de sortie', 'Owner' => 'Propriétaire', 'OwnerID' => 'ID du propriétaire', 'OwnerName' => 'Nom du propriétaire', 'PDFVersion' => 'Version PDF', 'PEFVersion' => 'Version PEF', 'Padding' => 'Remplissage', 'PageName' => 'Nom de page', 'PageNumber' => 'Page numéro', 'PanasonicExifVersion' => 'Version Exif Panasonic', 'PanasonicRawVersion' => 'Version Panasonic RAW', 'PanasonicTitle' => 'Titre', 'PentaxImageSize' => { Description => 'Taille d\'image Pentax', PrintConv => { '2304x1728 or 2592x1944' => '2304 x 1728 ou 2592 x 1944', '2560x1920 or 2304x1728' => '2560 x 1920 ou 2304 x 1728', '2816x2212 or 2816x2112' => '2816 x 2212 ou 2816 x 2112', '3008x2008 or 3040x2024' => '3008 x 2008 ou 3040 x 2024', 'Full' => 'Pleine', }, }, 'PentaxModelID' => 'Modèle Pentax', 'PentaxVersion' => 'Version Pentax', 'PeripheralLighting' => { Description => 'Correction éclairage périphérique', PrintConv => { 'Off' => 'Désactiver', 'On' => 'Activer', }, }, 'PersonInImage' => 'Personnage sur l\'Image', 'PhaseDetectAF' => 'Auto-Focus', 'PhotoEffect' => { PrintConv => { 'Off' => 'Désactivé', }, }, 'PhotoEffects' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'PhotoEffectsType' => { PrintConv => { 'None' => 'Aucune', }, }, 'PhotometricInterpretation' => { Description => 'Schéma de pixel', PrintConv => { 'BlackIsZero' => 'Zéro pour noir', 'Color Filter Array' => 'CFA (Matrice de filtre de couleur)', 'Pixar LogL' => 'CIE Log2(L) (Log luminance)', 'Pixar LogLuv' => 'CIE Log2(L)(u\',v\') (Log luminance et chrominance)', 'RGB' => 'RVB', 'RGB Palette' => 'Palette RVB', 'Transparency Mask' => 'Masque de transparence', 'WhiteIsZero' => 'Zéro pour blanc', }, }, 'PhotoshopAnnotations' => 'Annotations Photoshop', 'PictureControl' => { Description => 'Optimisation d\'image', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'PictureControlActive' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'PictureControlAdjust' => { Description => 'Ajustement de l\'optimisation d\'image', PrintConv => { 'Default Settings' => 'Paramètres par défault', 'Full Control' => 'Réglages manuels', 'Quick Adjust' => 'Réglages rapides', }, }, 'PictureControlBase' => 'Optimisation d\'image de base', 'PictureControlName' => 'Nom de l\'optimisation d\'image', 'PictureControlQuickAdjust' => 'Optimisation d\'image - Réglages rapides', 'PictureControlVersion' => 'Version de l\'Optimisation d\'image', 'PictureFinish' => { PrintConv => { 'Natural' => 'Naturel', 'Night Scene' => 'Nocturne', }, }, 'PictureMode' => { Description => 'Mode d\'image', PrintConv => { '1/2 EV steps' => 'Pas de 1/2 IL', '1/3 EV steps' => 'Pas de 1/3 IL', 'Aperture Priority' => 'Priorité ouverture', 'Aperture Priority, Off-Auto-Aperture' => 'Priorité ouverture (auto-diaph hors service)', 'Aperture-priority AE' => 'Priorité ouverture', 'Auto PICT (Landscape)' => 'Auto PICT (paysage)', 'Auto PICT (Macro)' => 'Auto PICT (macro)', 'Auto PICT (Portrait)' => 'Auto PICT (portrait)', 'Auto PICT (Sport)' => 'Auto PICT (sport)', 'Auto PICT (Standard)' => 'Auto PICT (standard)', 'Autumn' => 'Automne', 'Blur Reduction' => 'Réduction du flou', 'Bulb' => 'Pose B', 'Bulb, Off-Auto-Aperture' => 'Pose B (auto-diaph hors service)', 'Candlelight' => 'Bougie', 'DOF Program' => 'Programme PdC', 'DOF Program (HyP)' => 'Programme PdC (Hyper-programme)', 'Dark Pet' => 'Animal foncé', 'Digital Filter' => 'Filtre numérique', 'Fireworks' => 'Feux d\'artifice', 'Flash X-Sync Speed AE' => 'Synchro X flash vitesse AE', 'Food' => 'Nourriture', 'Frame Composite' => 'Vue composite', 'Green Mode' => 'Mode vert', 'Half-length Portrait' => 'Portrait (buste)', 'Hi-speed Program' => 'Programme grande vitesse', 'Hi-speed Program (HyP)' => 'Programme grande vitesse (Hyper-programme)', 'Kids' => 'Enfants', 'Landscape' => 'Paysage', 'Light Pet' => 'Animal clair', 'MTF Program' => 'Programme FTM', 'MTF Program (HyP)' => 'Programme FTM (Hyper-programme)', 'Manual' => 'Manuelle', 'Manual, Off-Auto-Aperture' => 'Manuel (auto-diaph hors service)', 'Medium Pet' => 'Animal demi-teintes', 'Museum' => 'Musée', 'Natural Skin Tone' => 'Ton chair naturel', 'Night Scene' => 'Nocturne', 'Night Scene Portrait' => 'Portrait nocturne', 'No Flash' => 'Sans flash', 'Pet' => 'Animaux de compagnie', 'Program' => 'Programme', 'Program (HyP)' => 'Programme AE (Hyper-programme)', 'Program AE' => 'Priorité vitesse', 'Program Av Shift' => 'Décalage programme Av', 'Program Tv Shift' => 'Décalage programme Tv', 'Self Portrait' => 'Autoportrait', 'Sensitivity Priority AE' => 'Priorité sensibilité AE', 'Shutter & Aperture Priority AE' => 'Priorité vitesse et ouverture AE', 'Shutter Speed Priority' => 'Priorité vitesse', 'Shutter speed priority AE' => 'Priorité vitesse', 'Snow' => 'Neige', 'Soft' => 'Doux', 'Sunset' => 'Coucher de soleil', 'Surf & Snow' => 'Surf et neige', 'Synchro Sound Record' => 'Enregistrement de son synchro', 'Text' => 'Texte', 'Underwater' => 'Sous-marine', }, }, 'PictureMode2' => { Description => 'Mode d\'image 2', PrintConv => { 'Aperture Priority' => 'Priorité ouverture', 'Aperture Priority, Off-Auto-Aperture' => 'Priorité ouverture (auto-diaph hors service)', 'Auto PICT' => 'Image auto', 'Bulb' => 'Pose B', 'Bulb, Off-Auto-Aperture' => 'Pose B (auto-diaph hors service)', 'Flash X-Sync Speed AE' => 'Expo auto, vitesse de synchro flash X', 'Green Mode' => 'Mode vert', 'Manual' => 'Manuelle', 'Manual, Off-Auto-Aperture' => 'Manuel (auto-diaph hors service)', 'Program AE' => 'Programme AE', 'Program Av Shift' => 'Décalage programme Av', 'Program Tv Shift' => 'Décalage programme Tv', 'Scene Mode' => 'Mode scène', 'Sensitivity Priority AE' => 'Expo auto, priorité sensibilité', 'Shutter & Aperture Priority AE' => 'Expo auto, priorité vitesse et ouverture', 'Shutter Speed Priority' => 'Priorité vitesse', }, }, 'PictureModeBWFilter' => { PrintConv => { 'Green' => 'Vert', 'Red' => 'Rouge', 'Yellow' => 'Jaune', 'n/a' => 'Non établie', }, }, 'PictureModeTone' => { PrintConv => { 'Blue' => 'Bleu', 'Green' => 'Vert', 'n/a' => 'Non établie', }, }, 'PictureStyle' => { Description => 'Style d\'image', PrintConv => { 'Faithful' => 'Fidèle', 'High Saturation' => 'Saturation élevée', 'Landscape' => 'Paysage', 'Low Saturation' => 'Faible saturation', 'Neutral' => 'Neutre', 'None' => 'Aucune', }, }, 'PixelIntensityRange' => 'Intervalle d\'intensité de pixel', 'PixelScale' => 'Tag d\'échelle de pixel modèle', 'PixelUnits' => { PrintConv => { 'Unknown' => 'Inconnu', }, }, 'PlanarConfiguration' => { Description => 'Arrangement des données image', PrintConv => { 'Chunky' => 'Format « chunky » (entrelacé)', 'Planar' => 'Format « planar »', }, }, 'PostalCode' => 'Code Postal', 'PowerSource' => { Description => 'Source d\'alimentation', PrintConv => { 'Body Battery' => 'Accu boîtier', 'External Power Supply' => 'Alimentation externe', 'Grip Battery' => 'Accu poignée', }, }, 'Predictor' => { Description => 'Prédicteur', PrintConv => { 'Horizontal differencing' => 'Différentiation horizontale', 'None' => 'Aucun schéma de prédicteur utilisé avant l\'encodage', }, }, 'Preview0' => 'Aperçu 0', 'Preview1' => 'Aperçu 1', 'Preview2' => 'Aperçu 2', 'PreviewApplicationName' => 'Nom de l\'application d\'aperçu', 'PreviewApplicationVersion' => 'Version de l\'application d\'aperçu', 'PreviewColorSpace' => { Description => 'Espace de couleur de l\'aperçu', PrintConv => { 'Unknown' => 'Inconnu', }, }, 'PreviewDateTime' => 'Horodatage d\'aperçu', 'PreviewImage' => 'Aperçu', 'PreviewImageBorders' => 'Limites d\'image miniature', 'PreviewImageData' => 'Données d\'image miniature', 'PreviewImageLength' => 'Longueur d\'image miniature', 'PreviewImageSize' => 'Taille d\'image miniature', 'PreviewImageStart' => 'Début d\'image miniature', 'PreviewImageValid' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'PreviewQuality' => { PrintConv => { 'Normal' => 'Normale', }, }, 'PreviewSettingsDigest' => 'Digest des réglages d\'aperçu', 'PreviewSettingsName' => 'Nom des réglages d\'aperçu', 'PrimaryAFPoint' => { PrintConv => { 'Bottom' => 'Bas', 'C6 (Center)' => 'C6 (Centre)', 'Center' => 'Centre', 'Mid-left' => 'Milieu gauche', 'Mid-right' => 'Milieu droit', 'Top' => 'Haut', }, }, 'PrimaryChromaticities' => 'Chromaticité des couleurs primaires', 'PrimaryPlatform' => 'Plateforme primaire', 'ProcessingSoftware' => 'Logiciel de traitement', 'Producer' => 'Producteur', 'ProductID' => 'ID de produit', 'ProductionCode' => 'L\'appareil est passé en SAV', 'ProfileCMMType' => 'Type de profil CMM', 'ProfileCalibrationSig' => 'Signature de calibration de profil', 'ProfileClass' => { Description => 'Classe de profil', PrintConv => { 'Abstract Profile' => 'Profil de résumé', 'ColorSpace Conversion Profile' => 'Profil de conversion d\'espace de couleur', 'DeviceLink Profile' => 'Profil de liaison', 'Display Device Profile' => 'Profil d\'appareil d\'affichage', 'Input Device Profile' => 'Profil d\'appareil d\'entrée', 'NamedColor Profile' => 'Profil de couleur nommée', 'Nikon Input Device Profile (NON-STANDARD!)' => 'Profil Nikon ("nkpf")', 'Output Device Profile' => 'Profil d\'appareil de sortie', }, }, 'ProfileConnectionSpace' => 'Espace de connexion de profil', 'ProfileCopyright' => 'Copyright du profil', 'ProfileCreator' => 'Créateur du profil', 'ProfileDateTime' => 'Horodatage du profil', 'ProfileDescription' => 'Description du profil', 'ProfileDescriptionML' => 'Description de profil ML', 'ProfileEmbedPolicy' => { Description => 'Règles d\'usage du profil incluses', PrintConv => { 'Allow Copying' => 'Permet la copie', 'Embed if Used' => 'Inclus si utilisé', 'Never Embed' => 'Jamais inclus', 'No Restrictions' => 'Pas de restriction', }, }, 'ProfileFileSignature' => 'Signature de fichier de profil', 'ProfileHueSatMapData1' => 'Données de profil teinte sat. 1', 'ProfileHueSatMapData2' => 'Données de profil teinte sat. 2', 'ProfileHueSatMapDims' => 'Divisions de teinte', 'ProfileID' => 'ID du profil', 'ProfileLookTableData' => 'Données de table de correspondance de profil', 'ProfileLookTableDims' => 'Divisions de teinte', 'ProfileName' => 'Nom du profil', 'ProfileSequenceDesc' => 'Description de séquence du profil', 'ProfileToneCurve' => 'Courbe de ton du profil', 'ProfileVersion' => 'Version de profil', 'ProgramISO' => 'Programme ISO', 'ProgramLine' => { Description => 'Ligne de programme', PrintConv => { 'Depth' => 'Priorité profondeur de champ', 'Hi Speed' => 'Priorité grande vitesse', 'MTF' => 'Priorité FTM', 'Normal' => 'Normale', }, }, 'ProgramMode' => { PrintConv => { 'None' => 'Aucune', 'Sunset' => 'Coucher de soleil', 'Text' => 'Texte', }, }, 'ProgramShift' => 'Décalage Programme', 'ProgramVersion' => 'Version du programme', 'Protect' => 'Protéger', 'Province-State' => 'État / Région', 'Publisher' => 'Editeur', 'Quality' => { Description => 'Qualité', PrintConv => { 'Best' => 'La meilleure', 'Better' => 'Meilleure', 'Compressed RAW' => 'cRAW', 'Compressed RAW + JPEG' => 'cRAW+JPEG', 'Extra Fine' => 'Extra fine', 'Good' => 'Bonne', 'Low' => 'Bas', 'Normal' => 'Normale', 'RAW + JPEG' => 'RAW+JPEG', }, }, 'QualityMode' => { Description => 'Qualité', PrintConv => { 'Fine' => 'Haute', 'Normal' => 'Normale', }, }, 'QuantizationMethod' => { Description => 'Méthode de quantification', PrintConv => { 'Color Space Specific' => 'Spécifique à l\'espace de couleur', 'Compression Method Specific' => 'Spécifique à la méthode de compression', 'Gamma Compensated' => 'Compensée gamma', 'IPTC Ref B' => 'IPTC réf "B"', 'Linear Density' => 'Densité linéaire', 'Linear Dot Percent' => 'Pourcentage de point linéaire', 'Linear Reflectance/Transmittance' => 'Réflectance/transmittance linéaire', }, }, 'QuickAdjust' => 'Réglages rapides', 'QuickControlDialInMeter' => { Description => 'Molette de contrôle rapide en mesure', PrintConv => { 'AF point selection' => 'Sélection collimateur AF', 'Exposure comp/Aperture' => 'Correction exposition/ouverture', 'ISO speed' => 'Sensibilité ISO', }, }, 'QuickShot' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'RAFVersion' => 'Version RAF', 'RasterPadding' => 'Remplissage raster', 'RasterizedCaption' => 'Légende rastérisée', 'Rating' => 'Évaluation', 'RatingPercent' => 'Rapport en pourcentage', 'RawAndJpgRecording' => { Description => 'Enregistrement RAW et JPEG', PrintConv => { 'JPEG (Best)' => 'JPEG (le meilleur)', 'JPEG (Better)' => 'JPEG (meilleur)', 'JPEG (Good)' => 'JPEG (bon)', 'RAW (DNG, Best)' => 'RAW (DNG, le meilleur)', 'RAW (DNG, Better)' => 'RAW (DNG, meilleur)', 'RAW (DNG, Good)' => 'RAW (DNG, bon)', 'RAW (PEF, Best)' => 'RAW (PEF, le meilleur)', 'RAW (PEF, Better)' => 'RAW (PEF, meilleur)', 'RAW (PEF, Good)' => 'RAW (PEF, bon)', 'RAW+JPEG (DNG, Best)' => 'RAW+JPEG (DNG, le meilleur)', 'RAW+JPEG (DNG, Better)' => 'RAW+JPEG (DNG, meilleur)', 'RAW+JPEG (DNG, Good)' => 'RAW+JPEG (DNG, bon)', 'RAW+JPEG (PEF, Best)' => 'RAW+JPEG (PEF, le meilleur)', 'RAW+JPEG (PEF, Better)' => 'RAW+JPEG (PEF, meilleur)', 'RAW+JPEG (PEF, Good)' => 'RAW+JPEG (PEF, bon)', 'RAW+Large/Fine' => 'RAW+grande/fine', 'RAW+Large/Normal' => 'RAW+grande/normale', 'RAW+Medium/Fine' => 'RAW+moyenne/fine', 'RAW+Medium/Normal' => 'RAW+moyenne/normale', 'RAW+Small/Fine' => 'RAW+petite/fine', 'RAW+Small/Normal' => 'RAW+petite/normale', }, }, 'RawDataOffset' => 'Décalage données Raw', 'RawDataUniqueID' => 'ID unique de données brutes', 'RawDevAutoGradation' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'RawDevPMPictureTone' => { PrintConv => { 'Blue' => 'Bleu', 'Green' => 'Vert', }, }, 'RawDevPM_BWFilter' => { PrintConv => { 'Green' => 'Vert', 'Red' => 'Rouge', 'Yellow' => 'Jaune', }, }, 'RawDevPictureMode' => { PrintConv => { 'Natural' => 'Naturel', }, }, 'RawDevWhiteBalance' => { PrintConv => { 'Color Temperature' => 'Température de couleur', }, }, 'RawImageCenter' => 'Centre Image RAW', 'RawImageDigest' => 'Digest d\'image brute', 'RawImageHeight' => 'Hauteur de l\'image brute', 'RawImageSize' => 'Taille d\'image RAW', 'RawImageWidth' => 'Largeur de l\'image brute', 'RawJpgQuality' => { PrintConv => { 'Normal' => 'Normale', }, }, 'RecordMode' => { Description => 'Mode d\'enregistrement', PrintConv => { 'Aperture Priority' => 'Priorité ouverture', 'Manual' => 'Manuelle', 'Shutter Priority' => 'Priorité vitesse', }, }, 'RecordingMode' => { PrintConv => { 'Landscape' => 'Paysage', 'Manual' => 'Manuelle', 'Night Scene' => 'Nocturne', }, }, 'RedBalance' => 'Balance rouge', 'RedEyeCorrection' => { PrintConv => { 'Automatic' => 'Auto', 'Off' => 'Désactivé', }, }, 'RedEyeReduction' => { Description => 'Réduction yeux rouges', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'RedMatrixColumn' => 'Colonne de matrice rouge', 'RedTRC' => 'Courbe de reproduction des tons rouges', 'ReductionMatrix1' => 'Matrice de réduction 1', 'ReductionMatrix2' => 'Matrice de réduction 2', 'ReferenceBlackWhite' => 'Paire de valeurs de référence noir et blanc', 'ReferenceDate' => 'Date de référence', 'ReferenceNumber' => 'Numéro de référence', 'ReferenceService' => 'Service de référence', 'RelatedImageFileFormat' => 'Format de fichier image apparenté', 'RelatedImageHeight' => 'Hauteur d\'image apparentée', 'RelatedImageWidth' => 'Largeur d\'image apparentée', 'RelatedSoundFile' => 'Fichier audio apparenté', 'ReleaseButtonToUseDial' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'ReleaseDate' => 'Date de version', 'ReleaseTime' => 'Heure de version', 'RenderingIntent' => { Description => 'Intention de rendu', PrintConv => { 'ICC-Absolute Colorimetric' => 'Colorimétrique absolu', 'Media-Relative Colorimetric' => 'Colorimétrique relatif', 'Perceptual' => 'Perceptif', }, }, 'ResampleParamsQuality' => { PrintConv => { 'Low' => 'Bas', }, }, 'Resaved' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'Resolution' => 'Résolution d\'image', 'ResolutionUnit' => { Description => 'Unité de résolution en X et Y', PrintConv => { 'None' => 'Aucune', 'cm' => 'Pixels/cm', 'inches' => 'Pouce', }, }, 'RetouchHistory' => { Description => 'Historique retouche', PrintConv => { 'None' => 'Aucune', }, }, 'RevisionNumber' => 'Numéro de révision', 'Rights' => 'Droits', 'Rotation' => { PrintConv => { 'Rotate 270 CW' => 'Rotation à 270 ° - sens antihoraire', 'Rotate 90 CW' => 'Rotation 90 ° - sens horaire', }, }, 'RowInterleaveFactor' => 'Facteur d\'entrelacement des lignes', 'RowsPerStrip' => 'Nombre de rangées par bande', 'SMaxSampleValue' => 'Valeur maxi d\'échantillon S', 'SMinSampleValue' => 'Valeur mini d\'échantillon S', 'SPIFFVersion' => 'Version SPIFF', 'SRAWQuality' => { PrintConv => { 'n/a' => 'Non établie', }, }, 'SRActive' => { Description => 'Réduction de bougé active', PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'SRFocalLength' => 'Focale de réduction de bougé', 'SRHalfPressTime' => 'Temps entre mesure et déclenchement', 'SRResult' => { Description => 'Stabilisation', PrintConv => { 'Not stabilized' => 'Non stabilisé', }, }, 'SVGVersion' => 'Version SVG', 'SafetyShift' => { Description => 'Décalage de sécurité', PrintConv => { 'Disable' => 'Désactivé', 'Enable (ISO speed)' => 'Activé (sensibilité ISO)', 'Enable (Tv/Av)' => 'Activé (Tv/Av)', }, }, 'SafetyShiftInAvOrTv' => { Description => 'Décalage de sécurité Av ou Tv', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activé', }, }, 'SampleFormat' => { Description => 'Format d\'échantillon', PrintConv => { 'Complex int' => 'Entier complexe', 'Float' => 'Réel à virgule flottante', 'Signed' => 'Entier signé', 'Undefined' => 'Non défini', 'Unsigned' => 'Entier non signé', }, }, 'SampleStructure' => { Description => 'Structure d\'échantillonnage', PrintConv => { 'CompressionDependent' => 'Définie dans le processus de compression', 'Orthogonal4-2-2Sampling' => 'Orthogonale, avec les fréquences d\'échantillonnage dans le rapport 4:2:2:(4)', 'OrthogonalConstangSampling' => 'Orthogonale, avec les mêmes fréquences d\'échantillonnage relatives sur chaque composante', }, }, 'SamplesPerPixel' => 'Nombre de composantes', 'Saturation' => { PrintConv => { '+1 (med high)' => '+1 (Assez fort)', '+2 (high)' => '+2 (Forte)', '+3 (very high)' => '+3 (Très fort)', '-1 (med low)' => '-1 (Assez faible)', '-2 (low)' => '-2 (Faible)', '-3 (very low)' => '-3 (Très faible)', '0 (normal)' => '0 (Normale)', 'High' => 'Forte', 'Low' => 'Faible', 'None' => 'Non établie', 'Normal' => 'Normale', }, }, 'ScanImageEnhancer' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ScanningDirection' => { Description => 'Direction de scannage', PrintConv => { 'Bottom-Top, L-R' => 'De bas en haut, de gauche à droite', 'Bottom-Top, R-L' => 'De bas en haut, de droite à gauche', 'L-R, Bottom-Top' => 'De gauche à droite, de bas en haut', 'L-R, Top-Bottom' => 'De gauche à droite, de haut en bas', 'R-L, Bottom-Top' => 'De droite à gauche, de bas en haut', 'R-L, Top-Bottom' => 'De droite à gauche, de haut en bas', 'Top-Bottom, L-R' => 'De haut en bas, de gauche à droite', 'Top-Bottom, R-L' => 'De haut en bas, de droite à gauche', }, }, 'Scene' => 'Scène', 'SceneAssist' => 'Assistant Scene', 'SceneCaptureType' => { Description => 'Type de capture de scène', PrintConv => { 'Landscape' => 'Paysage', 'Night' => 'Scène de nuit', }, }, 'SceneMode' => { Description => 'Modes scène', PrintConv => { '3D Sweep Panorama' => '3D', 'Anti Motion Blur' => 'Anti-flou de mvt', 'Aperture Priority' => 'Priorité ouverture', 'Auto' => 'Auto.', 'Candlelight' => 'Bougie', 'Cont. Priority AE' => 'AE priorité continue', 'Handheld Night Shot' => 'Vue de nuit manuelle', 'Landscape' => 'Paysage', 'Manual' => 'Manuelle', 'Night Portrait' => 'Portrait nocturne', 'Night Scene' => 'Nocturne', 'Night View/Portrait' => 'Vision/portrait nocturne', 'Normal' => 'Normale', 'Off' => 'Désactivé', 'Shutter Priority' => 'Priorité vitesse', 'Snow' => 'Neige', 'Sunset' => 'Coucher de soleil', 'Super Macro' => 'Super macro', 'Sweep Panorama' => 'Panora. par balayage', 'Text' => 'Texte', }, }, 'SceneModeUsed' => { PrintConv => { 'Aperture Priority' => 'Priorité ouverture', 'Candlelight' => 'Bougie', 'Landscape' => 'Paysage', 'Manual' => 'Manuelle', 'Shutter Priority' => 'Priorité vitesse', 'Snow' => 'Neige', 'Sunset' => 'Coucher de soleil', 'Text' => 'Texte', }, }, 'SceneSelect' => { PrintConv => { 'Night' => 'Scène de nuit', 'Off' => 'Désactivé', }, }, 'SceneType' => { Description => 'Type de scène', PrintConv => { 'Directly photographed' => 'Image photographiée directement', }, }, 'SecurityClassification' => { Description => 'Classement de sécurité', PrintConv => { 'Confidential' => 'Confidentiel', 'Restricted' => 'Restreint', 'Top Secret' => 'Top secret', 'Unclassified' => 'Non classé', }, }, 'SelectableAFPoint' => { Description => 'Collimateurs AF sélectionnables', PrintConv => { '11 points' => '11 collimateurs', '19 points' => '19 collimateurs', '45 points' => '45 collimateurs', 'Inner 9 points' => '9 collimateurs centraux', 'Outer 9 points' => '9 collimateurs périphériques', }, }, 'SelfTimer' => { Description => 'Retardateur', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'SelfTimer2' => 'Retardateur (2)', 'SelfTimerMode' => 'Mode auto-timer', 'SensingMethod' => { Description => 'Méthode de capture', PrintConv => { 'Color sequential area' => 'Capteur couleur séquentiel', 'Color sequential linear' => 'Capteur couleur séquentiel linéaire', 'Monochrome area' => 'Capteur monochrome', 'Monochrome linear' => 'Capteur linéaire monochrome', 'Not defined' => 'Non définie', 'One-chip color area' => 'Capteur monochip couleur', 'Three-chip color area' => 'Capteur trois chips couleur', 'Trilinear' => 'Capteur trilinéaire', 'Two-chip color area' => 'Capteur deux chips couleur', }, }, 'SensitivityAdjust' => 'Réglage de sensibilité', 'SensitivitySteps' => { Description => 'Pas de sensibilité', PrintConv => { '1 EV Steps' => 'Pas de 1 IL', 'As EV Steps' => 'Comme pas IL', }, }, 'SensitivityType' => 'Type de sensibilité', 'SensorCleaning' => { PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activé', }, }, 'SensorHeight' => 'Hauteur du capteur', 'SensorPixelSize' => 'Taille des pixels du capteur', 'SensorWidth' => 'Largeur du capteur', 'SequenceNumber' => 'Numéro de Séquence', 'SequentialShot' => { PrintConv => { 'None' => 'Aucune', }, }, 'SerialNumber' => 'Numéro de série', 'ServiceIdentifier' => 'Identificateur de service', 'SetButtonCrossKeysFunc' => { Description => 'Réglage touche SET/joypad', PrintConv => { 'Cross keys: AF point select' => 'Joypad:Sélec. collim. AF', 'Normal' => 'Normale', 'Set: Flash Exposure Comp' => 'SET:Cor expo flash', 'Set: Parameter' => 'SET:Changer de paramètres', 'Set: Picture Style' => 'SET:Style d’image', 'Set: Playback' => 'SET:Lecture', 'Set: Quality' => 'SET:Qualité', }, }, 'SetButtonWhenShooting' => { Description => 'Touche SET au déclenchement', PrintConv => { 'Change parameters' => 'Changer de paramètres', 'Default (no function)' => 'Normal (désactivée)', 'Disabled' => 'Désactivée', 'Flash exposure compensation' => 'Correction expo flash', 'ISO speed' => 'Sensibilité ISO', 'Image playback' => 'Lecture de l\'image', 'Image quality' => 'Changer de qualité', 'Image size' => 'Taille d\'image', 'LCD monitor On/Off' => 'Écran LCD On/Off', 'Menu display' => 'Affichage du menu', 'Normal (disabled)' => 'Normal (désactivée)', 'Picture style' => 'Style d\'image', 'Quick control screen' => 'Écran de contrôle rapide', 'Record func. + media/folder' => 'Fonction enregistrement + média/dossier', 'Record movie (Live View)' => 'Enr. vidéo (visée écran)', 'White balance' => 'Balance des blancs', }, }, 'SetFunctionWhenShooting' => { Description => 'Touche SET au déclenchement', PrintConv => { 'Change Parameters' => 'Changer de paramètres', 'Change Picture Style' => 'Style d\'image', 'Change quality' => 'Changer de qualité', 'Default (no function)' => 'Normal (désactivée)', 'Image replay' => 'Lecture de l\'image', 'Menu display' => 'Affichage du menu', }, }, 'ShadingCompensation' => { Description => 'Compensation de l\'ombrage', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ShadingCompensation2' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ShadowScale' => 'Echelle d\'ombre', 'ShakeReduction' => { Description => 'Réduction du bougé (réglage)', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ShakeReductionInfo' => 'Stabilisation', 'Sharpness' => { Description => 'Accentuation', PrintConv => { '+1 (med hard)' => '+1 (Assez dure)', '+2 (hard)' => '+2 (Dure)', '+3 (very hard)' => '+3 (Très dure)', '-1 (med soft)' => '-1 (Assez dure)', '-2 (soft)' => '-2 (Douce)', '-3 (very soft)' => '-3 (Très douce)', '0 (normal)' => '0 (Normale)', 'Hard' => 'Dure', 'Normal' => 'Normale', 'Soft' => 'Douce', 'n/a' => 'Non établie', }, }, 'SharpnessFrequency' => { PrintConv => { 'High' => 'Haut', 'Highest' => 'Plus haut', 'Low' => 'Doux', 'n/a' => 'Non établie', }, }, 'ShootingMode' => { Description => 'Télécommande IR', PrintConv => { 'Aerial Photo' => 'Photo aérienne', 'Aperture Priority' => 'Priorité ouverture', 'Baby' => 'Bébé', 'Beach' => 'Plage', 'Candlelight' => 'Eclairage Bougie', 'Color Effects' => 'Effets de couleurs', 'Fireworks' => 'Feu d\'artifice', 'Food' => 'Nourriture', 'High Sensitivity' => 'Haute sensibilité', 'High Speed Continuous Shooting' => 'Déclenchement continu à grande vitesse', 'Intelligent Auto' => 'Mode Auto intelligent', 'Intelligent ISO' => 'ISO Intelligent', 'Manual' => 'Manuel', 'Movie Preview' => 'Prévisualisation vidéo', 'Night Portrait' => 'Portrait de nuit', 'Normal' => 'Normale', 'Panning' => 'Panoramique', 'Panorama Assist' => 'Assistant Panorama', 'Party' => 'Fête', 'Pet' => 'Animal domestique', 'Program' => 'Programme', 'Scenery' => 'Paysage', 'Shutter Priority' => 'Priorité vitesse', 'Snow' => 'Neige', 'Soft Skin' => 'Peau douce', 'Starry Night' => 'Nuit étoilée', 'Sunset' => 'Coucher de soleil', 'Underwater' => 'Subaquatique', }, }, 'ShortDocumentID' => 'ID court de document', 'ShortReleaseTimeLag' => { Description => 'Inertie au déclenchement réduite', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activé', }, }, 'ShotInfoVersion' => 'Version des Infos prise de vue', 'Shutter-AELock' => { Description => 'Déclencheur/Touche verr. AE', PrintConv => { 'AE lock/AF' => 'Verrouillage AE/autofocus', 'AE/AF, No AE lock' => 'AE/AF, pas de verrou. AE', 'AF/AE lock' => 'Autofocus/verrouillage AE', 'AF/AF lock' => 'Autofocus/verrouillage AF', 'AF/AF lock, No AE lock' => 'AF/verr.AF, pas de verr.AE', }, }, 'ShutterAELButton' => { Description => 'Déclencheur/Touche verr. AE', PrintConv => { 'AE lock/AF' => 'Verrouillage AE/Autofocus', 'AE/AF, No AE lock' => 'AE/AF, pas de verrou. AE', 'AF/AE lock stop' => 'Autofocus/Verrouillage AE', 'AF/AF lock, No AE lock' => 'AF/verr.AF, pas de verr.AE', }, }, 'ShutterButtonAFOnButton' => { Description => 'Déclencheur/Touche AF', PrintConv => { 'AE lock/Metering + AF start' => 'Mémo expo/lct. mesure+AF', 'Metering + AF start' => 'Mesure + lancement AF', 'Metering + AF start/AF stop' => 'Mesure + lancement/arrêt AF', 'Metering + AF start/disable' => 'Lct. mesure+AF/désactivée', 'Metering start/Meter + AF start' => 'Lct. mesure/lct. mesure+AF', }, }, 'ShutterCount' => 'Comptage des déclenchements', 'ShutterCurtainSync' => { Description => 'Synchronisation du rideau', PrintConv => { '1st-curtain sync' => 'Synchronisation premier rideau', '2nd-curtain sync' => 'Synchronisation deuxième rideau', }, }, 'ShutterMode' => { PrintConv => { 'Aperture Priority' => 'Priorité ouverture', }, }, 'ShutterReleaseButtonAE-L' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ShutterReleaseNoCFCard' => { Description => 'Déclench. obtur. sans carte', PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'ShutterSpeed' => 'Temps de pose', 'ShutterSpeedRange' => { Description => 'Régler gamme de vitesses', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activée', }, }, 'ShutterSpeedValue' => 'Vitesse d\'obturation', 'SidecarForExtension' => 'Extension', 'SimilarityIndex' => 'Indice de similarité', 'SlaveFlashMeteringSegments' => 'Segments de mesure flash esclave', 'SlideShow' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'SlowShutter' => { Description => 'Vitesse d\'obturation lente', PrintConv => { 'Night Scene' => 'Nocturne', 'None' => 'Aucune', 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'SlowSync' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'Software' => 'Logiciel', 'SpatialFrequencyResponse' => 'Réponse spatiale en fréquence', 'SpecialEffectsOpticalFilter' => { PrintConv => { 'None' => 'Aucune', }, }, 'SpectralSensitivity' => 'Sensibilité spectrale', 'SpotMeterLinkToAFPoint' => { Description => 'Mesure spot liée au collimateur AF', PrintConv => { 'Disable (use center AF point)' => 'Désactivée (utiliser collimateur AF central)', 'Enable (use active AF point)' => 'Activé (utiliser collimateur AF actif)', }, }, 'SpotMeteringMode' => { PrintConv => { 'Center' => 'Centre', }, }, 'State' => 'État / Région', 'StreamType' => { PrintConv => { 'Text' => 'Texte', }, }, 'StripByteCounts' => 'Octets par bande compressée', 'StripOffsets' => 'Emplacement des données image', 'Sub-location' => 'Lieu', 'SubSecCreateDate' => 'Date de la création des données numériques', 'SubSecDateTimeOriginal' => 'Date de la création des données originales', 'SubSecModifyDate' => 'Date de modification de fichier', 'SubSecTime' => 'Fractions de seconde de DateTime', 'SubSecTimeDigitized' => 'Fractions de seconde de DateTimeDigitized', 'SubSecTimeOriginal' => 'Fractions de seconde de DateTimeOriginal', 'SubTileBlockSize' => 'Taille de bloc de sous-tuile', 'SubfileType' => 'Type du nouveau sous-fichier', 'SubimageColor' => { PrintConv => { 'RGB' => 'RVB', }, }, 'Subject' => 'Sujet', 'SubjectArea' => 'Zone du sujet', 'SubjectCode' => 'Code sujet', 'SubjectDistance' => 'Distance du sujet', 'SubjectDistanceRange' => { Description => 'Intervalle de distance du sujet', PrintConv => { 'Close' => 'Vue rapprochée', 'Distant' => 'Vue distante', 'Unknown' => 'Inconnu', }, }, 'SubjectLocation' => 'Zone du sujet', 'SubjectProgram' => { PrintConv => { 'None' => 'Aucune', 'Sunset' => 'Coucher de soleil', 'Text' => 'Texte', }, }, 'SubjectReference' => 'Code de sujet', 'Subsystem' => { PrintConv => { 'Unknown' => 'Inconnu', }, }, 'SuperMacro' => { PrintConv => { 'Off' => 'Désactivé', }, }, 'SuperimposedDisplay' => { Description => 'Affichage superposé', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'SupplementalCategories' => 'Catégorie d\'appoint', 'SupplementalType' => { Description => 'Type de supplément', PrintConv => { 'Main Image' => 'Non établi', 'Rasterized Caption' => 'Titre rastérisé', 'Reduced Resolution Image' => 'Image de résolution réduite', }, }, 'SvISOSetting' => 'Réglage ISO Sv', 'SwitchToRegisteredAFPoint' => { Description => 'Activer collimateur enregistré', PrintConv => { 'Assist' => 'Touche d\'assistance', 'Assist + AF' => 'Touche d\'assistance + touche AF', 'Disable' => 'Désactivé', 'Enable' => 'Activé', 'Only while pressing assist' => 'Seulement en appuyant touche d\'assistance', }, }, 'T4Options' => 'Bits de remplissage ajoutés', 'T6Options' => 'Options T6', 'TTL_DA_ADown' => 'Segment de mesure flash esclave 6', 'TTL_DA_AUp' => 'Segment de mesure flash esclave 5', 'TTL_DA_BDown' => 'Segment de mesure flash esclave 8', 'TTL_DA_BUp' => 'Segment de mesure flash esclave 7', 'Tagged' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'TargetPrinter' => 'Imprimante cible', 'Technology' => { Description => 'Technologie', PrintConv => { 'Active Matrix Display' => 'Afficheur à matrice active', 'Cathode Ray Tube Display' => 'Afficheur à tube cathodique', 'Digital Camera' => 'Appareil photo numérique', 'Dye Sublimation Printer' => 'Imprimante à sublimation thermique', 'Electrophotographic Printer' => 'Imprimante électrophotographique', 'Electrostatic Printer' => 'Imprimante électrostatique', 'Film Scanner' => 'Scanner de film', 'Flexography' => 'Flexographie', 'Ink Jet Printer' => 'Imprimante à jet d\'encre', 'Offset Lithography' => 'Lithographie offset', 'Passive Matrix Display' => 'Afficheur à matrice passive', 'Photo CD' => 'CD photo', 'Photo Image Setter' => 'Cadre photo', 'Photographic Paper Printer' => 'Imprimante à papier photo', 'Projection Television' => 'Téléviseur à projection', 'Reflective Scanner' => 'Scanner à réflexion', 'Silkscreen' => 'Ecran de soie', 'Thermal Wax Printer' => 'Imprimante thermique à cire', 'Video Camera' => 'Caméra vidéo', 'Video Monitor' => 'Moniteur vidéo', }, }, 'Teleconverter' => { PrintConv => { 'None' => 'Aucune', }, }, 'Text' => 'Texte', 'TextStamp' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'Thresholding' => 'Seuil', 'ThumbnailHeight' => 'Hauteur de la vignette', 'ThumbnailImage' => 'Vignette', 'ThumbnailImageSize' => 'Taille des miniatures', 'ThumbnailLength' => 'Longueur de la vignette', 'ThumbnailOffset' => 'Décalage de la vignette', 'ThumbnailWidth' => 'Hauteur de la vignette', 'TileByteCounts' => 'Nombre d\'octets d\'élément', 'TileDepth' => 'Profondeur d\'élément', 'TileLength' => 'Longueur d\'élément', 'TileOffsets' => 'Décalages d\'élément', 'TileWidth' => 'Largeur d\'élément', 'Time' => 'Heure', 'TimeCreated' => 'Heure de création', 'TimeScaleParamsQuality' => { PrintConv => { 'Low' => 'Bas', }, }, 'TimeSent' => 'Heure d\'envoi', 'TimeSincePowerOn' => 'Temps écoulé depuis la mise en marche', 'TimeZone' => 'Fuseau horaire', 'TimeZoneOffset' => 'Offset de zone de date', 'TimerLength' => { Description => 'Durée du retardateur', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activée', }, }, 'Title' => 'Titre', 'ToneComp' => 'Correction de tonalité', 'ToneCurve' => { Description => 'Courbe de ton', PrintConv => { 'Manual' => 'Manuelle', }, }, 'ToneCurveActive' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'ToneCurves' => 'Courbes de ton', 'ToningEffect' => { Description => 'Virage', PrintConv => { 'Blue' => 'Bleu', 'Green' => 'Vert', 'None' => 'Aucune', 'Red' => 'Rouge', 'Yellow' => 'Jaune', 'n/a' => 'Non établie', }, }, 'ToningEffectMonochrome' => { PrintConv => { 'Blue' => 'Bleu', 'Green' => 'Vert', 'None' => 'Aucune', }, }, 'ToningSaturation' => 'Saturation du virage', 'TransferFunction' => 'Fonction de transfert', 'TransferRange' => 'Intervalle de transfert', 'Transformation' => { PrintConv => { 'Horizontal (normal)' => '0° (haut/gauche)', 'Mirror horizontal' => '0° (haut/droit)', 'Mirror horizontal and rotate 270 CW' => '90° sens horaire (gauche/haut)', 'Mirror horizontal and rotate 90 CW' => '90° sens antihoraire (droit/bas)', 'Mirror vertical' => '180° (bas/gauche)', 'Rotate 180' => '180° (bas/droit)', 'Rotate 270 CW' => '90° sens horaire (gauche/bas)', 'Rotate 90 CW' => '90° sens antihoraire (droit/haut)', }, }, 'TransmissionReference' => 'Référence transmission', 'TransparencyIndicator' => 'Indicateur de transparence', 'TrapIndicator' => 'Indicateur de piège', 'Trapped' => { Description => 'Piégé', PrintConv => { 'False' => 'Faux', 'True' => 'Vrai', 'Unknown' => 'Inconnu', }, }, 'TravelDay' => 'Date du Voyage', 'TvExposureTimeSetting' => 'Réglage de temps de pose Tv', 'URL' => 'URL ', 'USMLensElectronicMF' => { Description => 'MF électronique à objectif USM', PrintConv => { 'Always turned off' => 'Toujours débrayé', 'Disable after one-shot AF' => 'Désactivée après One-Shot AF', 'Disable in AF mode' => 'Désactivée en mode AF', 'Enable after one-shot AF' => 'Activée après AF One-Shot', 'Turns off after one-shot AF' => 'Débrayé après One-Shot AF', 'Turns on after one-shot AF' => 'Activé après One-Shot AF', }, }, 'Uncompressed' => { Description => 'Non.comprimé', PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'UniqueCameraModel' => 'Nom unique de modèle d\'appareil', 'UniqueDocumentID' => 'ID unique de document', 'UniqueObjectName' => 'Nom Unique d\'Objet', 'Unknown' => 'Inconnu', 'Unsharp1Color' => { PrintConv => { 'Blue' => 'Bleu', 'Green' => 'Vert', 'RGB' => 'RVB', 'Red' => 'Rouge', 'Yellow' => 'Jaune', }, }, 'Unsharp2Color' => { PrintConv => { 'Blue' => 'Bleu', 'Green' => 'Vert', 'RGB' => 'RVB', 'Red' => 'Rouge', 'Yellow' => 'Jaune', }, }, 'Unsharp3Color' => { PrintConv => { 'Blue' => 'Bleu', 'Green' => 'Vert', 'RGB' => 'RVB', 'Red' => 'Rouge', 'Yellow' => 'Jaune', }, }, 'Unsharp4Color' => { PrintConv => { 'Blue' => 'Bleu', 'Green' => 'Vert', 'RGB' => 'RVB', 'Red' => 'Rouge', 'Yellow' => 'Jaune', }, }, 'UnsharpMask' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'Urgency' => { Description => 'Urgence', PrintConv => { '0 (reserved)' => '0 (réservé pour utilisation future)', '1 (most urgent)' => '1 (très urgent)', '5 (normal urgency)' => '5 (normalement urgent)', '8 (least urgent)' => '8 (moins urgent)', '9 (user-defined priority)' => '9 (réservé pour utilisation future)', }, }, 'UsableMeteringModes' => { Description => 'Sélectionner modes de mesure', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activée', }, }, 'UsableShootingModes' => { Description => 'Sélectionner modes de prise de vue', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activée', }, }, 'UsageTerms' => 'Conditions d\'Utilisation', 'UserComment' => 'Commentaire utilisateur', 'UserDef1PictureStyle' => { PrintConv => { 'Landscape' => 'Paysage', }, }, 'UserDef2PictureStyle' => { PrintConv => { 'Landscape' => 'Paysage', }, }, 'UserDef3PictureStyle' => { PrintConv => { 'Landscape' => 'Paysage', }, }, 'VRDVersion' => 'Version VRD', 'VRInfo' => 'Information stabilisateur', 'VRInfoVersion' => 'Info Version VR', 'VR_0x66' => { PrintConv => { 'Off' => 'Désactivé', }, }, 'VariProgram' => 'Variprogramme', 'VibrationReduction' => { Description => 'Reduction des vibrations', PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', 'n/a' => 'Non établie', }, }, 'VideoCardGamma' => 'Gamma de la carte vidéo', 'ViewInfoDuringExposure' => { Description => 'Infos viseur pendant exposition', PrintConv => { 'Disable' => 'Désactivé', 'Enable' => 'Activé', }, }, 'ViewfinderWarning' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'ViewingCondDesc' => 'Description des conditions de visionnage', 'ViewingCondIlluminant' => 'Illuminant des conditions de visionnage', 'ViewingCondIlluminantType' => 'Type d\'illuminant des conditions de visionnage', 'ViewingCondSurround' => 'Environnement des conditions de visionnage', 'VignetteControl' => { Description => 'Controle du vignettage', PrintConv => { 'High' => 'Haut', 'Low' => 'Bas', 'Normal' => 'Normale', 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'VoiceMemo' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'WBAdjLighting' => { PrintConv => { 'Daylight (cloudy)' => 'Lumière du jour (2)', 'Daylight (direct sunlight)' => 'Lumière du jour (0)', 'Daylight (shade)' => 'Lumière du jour (1)', 'None' => 'Aucune', }, }, 'WBBlueLevel' => 'Niveau Bleu Balance des Blancs', 'WBBracketMode' => { PrintConv => { 'Off' => 'Désactivé', }, }, 'WBFineTuneActive' => { PrintConv => { 'No' => 'Non', 'Yes' => 'Oui', }, }, 'WBGreenLevel' => 'Niveau Vert Balance des Blancs', 'WBMediaImageSizeSetting' => { Description => 'Réglage de balance des blancs + taille d\'image', PrintConv => { 'LCD monitor' => 'Écran LCD', 'Rear LCD panel' => 'Panneau LCD arrière', }, }, 'WBRedLevel' => 'Niveau Rouge Balance des Blancs', 'WBShiftAB' => 'Décalage Balance Blancs ambre-bleu', 'WBShiftGM' => 'Décalage Balance Blancs vert-magenta', 'WB_GBRGLevels' => 'Niveaux BB VBRV', 'WB_GRBGLevels' => 'Niveaux BB VRBV', 'WB_GRGBLevels' => 'Niveaux BB VRVB', 'WB_RBGGLevels' => 'Niveaux BB RBVV', 'WB_RBLevels' => 'Niveaux BB RB', 'WB_RBLevels3000K' => 'Niveaux BB RB 3000K', 'WB_RBLevels3300K' => 'Niveaux BB RB 3300K', 'WB_RBLevels3600K' => 'Niveaux BB RB 3600K', 'WB_RBLevels3900K' => 'Niveaux BB RB 3800K', 'WB_RBLevels4000K' => 'Niveaux BB RB 4000K', 'WB_RBLevels4300K' => 'Niveaux BB RB 4300K', 'WB_RBLevels4500K' => 'Niveaux BB RB 4500K', 'WB_RBLevels4800K' => 'Niveaux BB RB 4800K', 'WB_RBLevels5300K' => 'Niveaux BB RB 5300K', 'WB_RBLevels6000K' => 'Niveaux BB RB 6000K', 'WB_RBLevels6600K' => 'Niveaux BB RB 6600K', 'WB_RBLevels7500K' => 'Niveaux BB RB 7500K', 'WB_RBLevelsCloudy' => 'Niveaux BB RB nuageux', 'WB_RBLevelsShade' => 'Niveaux BB RB ombre', 'WB_RBLevelsTungsten' => 'Niveaux BB RB tungstène', 'WB_RGBGLevels' => 'Niveaux BB RVBV', 'WB_RGBLevels' => 'Niveaux BB RVB', 'WB_RGBLevelsCloudy' => 'Niveaux BB RVB nuageux', 'WB_RGBLevelsDaylight' => 'Niveaux BB RVB lumière jour', 'WB_RGBLevelsFlash' => 'Niveaux BB RVB flash', 'WB_RGBLevelsFluorescent' => 'Niveaux BB RVB fluorescent', 'WB_RGBLevelsShade' => 'Niveaux BB RVB ombre', 'WB_RGBLevelsTungsten' => 'Niveaux BB RVB tungstène', 'WB_RGGBLevels' => 'Niveaux BB RVVB', 'WB_RGGBLevelsCloudy' => 'Niveaux BB RVVB nuageux', 'WB_RGGBLevelsDaylight' => 'Niveaux BB RVVB lumière jour', 'WB_RGGBLevelsFlash' => 'Niveaux BB RVVB flash', 'WB_RGGBLevelsFluorescent' => 'Niveaux BB RVVB fluorescent', 'WB_RGGBLevelsFluorescentD' => 'Niveaux BB RVVB fluorescent', 'WB_RGGBLevelsFluorescentN' => 'Niveaux BB RVVB fluo N', 'WB_RGGBLevelsFluorescentW' => 'Niveaux BB RVVB fluo W', 'WB_RGGBLevelsShade' => 'Niveaux BB RVVB ombre', 'WB_RGGBLevelsTungsten' => 'Niveaux BB RVVB tungstène', 'WCSProfiles' => 'Profil Windows Color System', 'Warning' => 'Attention', 'WebStatement' => 'Relevé Web', 'WhiteBalance' => { Description => 'Balance des blancs', PrintConv => { 'Auto' => 'Equilibrage des blancs automatique', 'Black & White' => 'Monochrome', 'Cloudy' => 'Temps nuageux', 'Color Temperature/Color Filter' => 'Temp. Couleur / Filtre couleur', 'Cool White Fluorescent' => 'Fluorescente type soft', 'Custom' => 'Personnalisée', 'Custom 1' => 'Personnalisée 1', 'Custom 2' => 'Personnalisée 2', 'Custom 3' => 'Personnalisée 3', 'Custom 4' => 'Personnalisée 4', 'Day White Fluorescent' => 'Fluorescente type blanc', 'Daylight' => 'Lumière du jour', 'Daylight Fluorescent' => 'Fluorescente type jour', 'Fluorescent' => 'Fluorescente', 'Manual' => 'Manuelle', 'Manual Temperature (Kelvin)' => 'Température de couleur (Kelvin)', 'Shade' => 'Ombre', 'Tungsten' => 'Tungstène (lumière incandescente)', 'Unknown' => 'Inconnu', 'User-Selected' => 'Sélectionnée par l\'utilisateur', 'Warm White Fluorescent' => 'Fluorescent blanc chaud', 'White Fluorescent' => 'Fluorescent blanc', }, }, 'WhiteBalanceAdj' => { PrintConv => { 'Cloudy' => 'Temps nuageux', 'Daylight' => 'Lumière du jour', 'Fluorescent' => 'Fluorescente', 'Off' => 'Désactivé', 'On' => 'Activé', 'Shade' => 'Ombre', 'Tungsten' => 'Tungstène (lumière incandescente)', }, }, 'WhiteBalanceBias' => 'Décalage de Balance des blancs', 'WhiteBalanceFineTune' => 'Balance des blancs - Réglage fin', 'WhiteBalanceMode' => { Description => 'Mode de balance des blancs', PrintConv => { 'Auto (Cloudy)' => 'Auto (nuageux)', 'Auto (Day White Fluorescent)' => 'Auto (fluo jour)', 'Auto (Daylight Fluorescent)' => 'Auto (fluo lum. jour)', 'Auto (Daylight)' => 'Auto (lumière du jour)', 'Auto (Flash)' => 'Auto (flash)', 'Auto (Shade)' => 'Auto (ombre)', 'Auto (Tungsten)' => 'Auto (tungstène)', 'Auto (White Fluorescent)' => 'Auto (fluo blanc)', 'Unknown' => 'Inconnu', 'User-Selected' => 'Sélectionnée par l\'utilisateur', }, }, 'WhiteBalanceSet' => { Description => 'Réglage de balance des blancs', PrintConv => { 'Cloudy' => 'Temps nuageux', 'Day White Fluorescent' => 'Fluorescent blanc jour', 'Daylight' => 'Lumière du jour', 'Daylight Fluorescent' => 'Fluorescente type jour', 'Manual' => 'Manuelle', 'Set Color Temperature 1' => 'Température de couleur définie 1', 'Set Color Temperature 2' => 'Température de couleur définie 2', 'Set Color Temperature 3' => 'Température de couleur définie 3', 'Shade' => 'Ombre', 'Tungsten' => 'Tungstène (lumière incandescente)', 'White Fluorescent' => 'Fluorescent blanc', }, }, 'WhiteLevel' => 'Niveau blanc', 'WhitePoint' => 'Chromaticité du point blanc', 'WideRange' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, 'WorldTime' => 'Fuseau horaire', 'WorldTimeLocation' => { Description => 'Position en temps mondial', PrintConv => { 'Home' => 'Départ', 'Hometown' => 'Résidence', }, }, 'Writer-Editor' => 'Auteur de la légende / description', 'XClipPathUnits' => 'Unités de chemin de rognage en X', 'XMP' => 'Métadonnées XMP', 'XPAuthor' => 'Auteur', 'XPComment' => 'Commentaire', 'XPKeywords' => 'Mots clé', 'XPSubject' => 'Sujet', 'XPTitle' => 'Titre', 'XPosition' => 'Position en X', 'XResolution' => 'Résolution d\'image horizontale', 'YCbCrCoefficients' => 'Coefficients de la matrice de transformation de l\'espace de couleurs', 'YCbCrPositioning' => { Description => 'Positionnement Y et C', PrintConv => { 'Centered' => 'Centré', 'Co-sited' => 'Côte à côte', }, }, 'YCbCrSubSampling' => 'Rapport de sous-échantillonnage Y à C', 'YClipPathUnits' => 'Unités de chemin de rognage en Y', 'YPosition' => 'Position en Y', 'YResolution' => 'Résolution d\'image verticale', 'Year' => 'Année', 'ZoneMatching' => { Description => 'Ajustage de la zone', PrintConv => { 'High Key' => 'Hi', 'ISO Setting Used' => 'Désactivée', 'Low Key' => 'Lo', }, }, 'ZoneMatchingOn' => { PrintConv => { 'Off' => 'Désactivé', 'On' => 'Activé', }, }, ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::fr.pm - ExifTool French language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke, Bernard Guillotin, Jean Glasser, Jean Piquemal, Harry Nizard and Alphonse Philippe for providing this translation. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/it.pm��������������������������������������������������000644 �000765 �000024 �00000751462 12642461343 021563� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: it.pm # # Description: ExifTool Italian language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::it; use strict; use vars qw($VERSION); $VERSION = '1.12'; %Image::ExifTool::Lang::it::Translate = ( 'A100DataOffset' => 'Offset dati A100', 'AAFManufacturerID' => 'ID AAF produttore', 'ACoordOfBottomRightCorner' => 'Una coord in basso a destra', 'ACoordOfTopRightCorner' => 'Una coord in alto a destra', 'AEAperture' => 'Apertura esposizione automatica', 'AEBAutoCancel' => { PrintConv => { 'Off' => 'Spento', }, }, 'AEBSequenceAutoCancel' => { PrintConv => { '-,0,+/Disabled' => '-,0,+/Disabilitato', '-,0,+/Enabled' => '-,0,+/Abilitato', '0,-,+/Disabled' => '0,-,+/Disabilitato', '0,-,+/Enabled' => '0,-,+/Abilitato', }, }, 'AEExposureTime' => 'Durata esposizione automatica', 'AEFlags' => { Description => 'Flag esposizione automatica', PrintConv => { 'AE lock' => 'Blocco esposizione automatica', 'Aperture wide open' => 'Diaframma molto aperto', 'Flash recommended?' => 'Flash consigliato?', }, }, 'AELExposureIndicator' => { PrintConv => { 'Not Indicated' => 'Non indicato', }, }, 'AELock' => { Description => 'Blocco esposizione automatica', PrintConv => { 'Off' => 'Spento', 'On' => 'Acceso', }, }, 'AELockButton' => { Description => 'Pulsante blocco esposizione automatica', PrintConv => { 'Flash Off' => 'Flash spento', 'None' => 'Nessuno', 'Preview' => 'Anteprima', 'Virtual Horizon' => 'Orizzonte virtuale', }, }, 'AELockButtonPlusDials' => { PrintConv => { 'Choose Image Area' => 'Seleziona area immagine', 'None' => 'Nessuno', }, }, 'AEMeteringMode' => { PrintConv => { 'Center-weighted average' => 'Media centrale ponderata', 'Multi-segment' => 'Multi zona', }, }, 'AEMicroadjustment' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'AEProgramMode' => { PrintConv => { 'Kids' => 'Bambini', 'Landscape' => 'Orizzontale', 'No Flash' => 'No flash', 'Portrait' => 'Verticale', 'Program' => 'Programma', 'Sunset' => 'Tramonto', 'Text' => 'Testo', }, }, 'AESetting' => { PrintConv => { 'Exposure Compensation' => 'Compensazione esposizione', }, }, 'AE_ISO' => 'ISO esposizione automatica', 'AFAndMeteringButtons' => { PrintConv => { 'No function' => 'Nessuna funzione', }, }, 'AFAperture' => 'Diaframma AF', 'AFAreaIllumination' => { PrintConv => { 'Off' => 'Spento', }, }, 'AFAreaMode' => { Description => 'Modo AF', PrintConv => { 'Dynamic Area' => 'Area Dinamica', 'Dynamic Area (closest subject)' => 'Area Dinamica più Vicina al Soggetto', 'Group Dynamic' => 'Gruppo Dinamico', 'Local' => 'Locale', 'Off (Manual Focus)' => 'Spento (focus manuale)', 'Single Area' => 'Area Singola', }, }, 'AFAssist' => { PrintConv => { 'Off' => 'Spento', }, }, 'AFDuringLiveView' => { PrintConv => { 'Enable' => 'Abilita', 'Quick mode' => 'Modo veloce', }, }, 'AFFineTune' => { PrintConv => { 'Off' => 'Spento', }, }, 'AFIlluminator' => { PrintConv => { 'Off' => 'Spento', 'n/a' => 'n/d', }, }, 'AFInfo' => 'Modo AF', 'AFMode' => { Description => 'Modo AF', PrintConv => { 'Off' => 'Spento', 'n/a' => 'n/d', }, }, 'AFOnAELockButtonSwitch' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'AFPoint' => { Description => 'Punto AF', PrintConv => { '(none)' => '(nessuno)', 'Bottom' => 'Basso', 'Center' => 'Centro', 'Far Left' => 'Tutto a sinistra', 'Far Right' => 'Tutto a destra', 'Left' => 'Sinistra', 'Lower-left' => 'Inferiore sinistro', 'Lower-right' => 'Inferiore destro', 'Mid-left' => 'Centro/Sinistra', 'Mid-right' => 'Centro/Destra', 'None' => 'Nessuno', 'Right' => 'Destra', 'Right (horizontal)' => 'Destra (orizzontale)', 'Right (vertical)' => 'Destra (verticale)', 'Top' => 'Alto', 'Upper-left' => 'Superiore sinistro', 'Upper-right' => 'Superiore destro', }, }, 'AFPointActivationArea' => { PrintConv => { 'Expanded' => 'Espanso', }, }, 'AFPointAreaExpansion' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'AFPointBrightness' => { PrintConv => { 'Low' => 'Basso', 'Normal' => 'Normale', }, }, 'AFPointDisplayDuringFocus' => { PrintConv => { 'Off' => 'Spento', }, }, 'AFPointIllumination' => { PrintConv => { 'Off' => 'Spento', }, }, 'AFPointMode' => { PrintConv => { 'Fixed Center' => 'Centro fisso', 'Select' => 'Seleziona', }, }, 'AFPointRegistration' => { PrintConv => { 'Bottom' => 'Basso', 'Center' => 'Centro', 'Extreme Left' => 'Tutto a Sinistra', 'Extreme Right' => 'Tutto a Destra', 'Left' => 'Sinistra', 'Right' => 'Destra', 'Top' => 'Alto', }, }, 'AFPointSelected' => { PrintConv => { 'Bottom' => 'Basso', 'Center' => 'Centro', 'Far Left' => 'Tutto a sinistra', 'Far Right' => 'Tutto a destra', 'Fixed Center' => 'Centro fisso', 'Left' => 'Sinistra', 'None' => 'Nessuno', 'Right' => 'Destra', 'Top' => 'Alto', }, }, 'AFPointSelected2' => { PrintConv => { 'Center' => 'Centro', 'Left' => 'Sinistra', 'Right' => 'Destra', }, }, 'AFPointSelection' => { PrintConv => { '11 Points' => '11 punti', }, }, 'AFPointSelectionMethod' => { PrintConv => { 'Normal' => 'Normale', }, }, 'AFPoints' => { PrintConv => { 'Center' => 'Centro', 'Left' => 'Sinistra', 'Right' => 'Destra', }, }, 'AFPointsInFocus' => { Description => 'Punti a fuoco', PrintConv => { 'Bottom' => 'Basso', 'Center' => 'Centro', 'Far Left' => 'Tutto a sinistra', 'Far Right' => 'Tutto a destra', 'Left' => 'Sinistra', 'Lower-left' => 'Inferiore sinistro', 'Lower-right' => 'Inferiore destro', 'None' => 'Nessuno', 'Right' => 'Destra', 'Top' => 'Alto', 'Upper-left' => 'Superiore sinistro', 'Upper-right' => 'Superiore destro', }, }, 'AFPointsInFocus1D' => 'Punti a fuoco 1D', 'AFPointsInFocus5D' => { Description => 'Punti a fuoco 5D', PrintConv => { 'Center' => 'Centro', 'Left' => 'Sinistra', 'Right' => 'Destra', }, }, 'AFPointsUnknown1' => { PrintConv => { 'Center' => 'Centro', 'Left' => 'Sinistra', 'Right' => 'Destra', }, }, 'AFPointsUnknown2' => { PrintConv => { 'Center' => 'Centro', 'Left' => 'Sinistra', 'Right' => 'Destra', }, }, 'AFPointsUsed' => { PrintConv => { 'Bottom' => 'Basso', 'Center' => 'Centro', 'Far Left' => 'Tutto a sinistra', 'Far Right' => 'Tutto a destra', 'Lower-left' => 'Inferiore sinistro', 'Lower-right' => 'Inferiore destro', 'Top' => 'Alto', 'Upper-left' => 'Superiore sinistro', 'Upper-right' => 'Superiore destro', }, }, 'AFSearch' => { PrintConv => { 'Not Ready' => 'Non pronto', 'Ready' => 'Pronto', }, }, 'AFWithShutter' => { PrintConv => { 'Off' => 'Spento', }, }, 'AIServoImagePriority' => { PrintConv => { '1: AF, 2: Drive speed' => '1: AF, 2: drive speed', '1: AF, 2: Tracking' => '1: AF, 2: puntamento', '1: Release, 2: Drive speed' => '1: rilascio, 2: drive speed', '1: Release, 2: Tracking' => '1: rilascio, 2: puntamento', }, }, 'AIServoTrackingSensitivity' => { PrintConv => { 'Fast' => 'Veloce', }, }, 'APEVersion' => 'Versione APE', 'ARMIdentifier' => 'ID ARM', 'ARMVersion' => 'Versione ARM', 'AToB0' => 'Da A a B0', 'AToB1' => 'Da A a B1', 'AToB2' => 'Da A a B2', 'AberrationCorrectionDistance' => 'Distanza della correzione di aberrazione', 'About' => 'Informazioni su', 'AbsPeakAudioFilePath' => 'Percorso file audio del picco assoluto', 'AbsoluteChannelDisplayScale' => 'Scala assoluta canale', 'Abstract' => 'Sommario', 'AbstractPriorCodeSequence' => 'Sequenza codice precedente astratto', 'AbstractPriorValue' => 'Valore codice precedente astratto', 'AccessDate' => 'Data di accesso', 'AccessionNumber' => 'Numero di adesione', 'AccessoryCode' => 'Codice accessorio', 'AccessoryType' => 'Tipo accessorio', 'AccountName' => 'Nome account', 'AccountingReferenceNumber' => 'Riferimento contabile', 'AcqreconRecordChecksum' => 'Checksum del record AcqRecon', 'AcquiredImageAreaDoseProduct' => 'Dose prodotto dell\'area acquisita', 'AcquisitionComments' => 'Commenti acquisizione', 'AcquisitionContextDescription' => 'Descrizione contesto acquisizione', 'AcquisitionContextSequence' => 'Sequenza contesto acquisizione', 'AcquisitionContrast' => 'Contrasto acquisizione', 'AcquisitionDate' => 'Data acquisizione', 'AcquisitionDateTime' => 'Data/ora acquisizione', 'AcquisitionDeviceProcessingCode' => 'Codice processo di acquisizione del dispositivo', 'AcquisitionDeviceProcessingDescr' => 'Descrizione processo di acquisizione del dispositivo', 'AcquisitionDeviceTypeCodeSequence' => 'Sequenza codici tipo di acquisizione del dispositivo', 'AcquisitionDuration' => 'Durata acquisizione', 'AcquisitionEndConditionData' => 'Dati condizione fine acquisizione', 'AcquisitionGroupLength' => 'Lunghezza gruppo di acquisizione', 'AcquisitionIndex' => 'Indice acquisizione', 'AcquisitionMatrix' => 'Matrice acquisizione', 'AcquisitionNumber' => 'Numero acquisizione', 'AcquisitionProtocolDescription' => 'Descrizione protocollo di acquisizione', 'AcquisitionProtocolName' => 'Nome protocollo di acquisizione', 'AcquisitionStartCondition' => 'Condizione iniziale acquisizione', 'AcquisitionStartConditionData' => 'Dati condizione iniziale acquisizione', 'AcquisitionTerminationCondition' => 'Condizione finale acquisizione', 'AcquisitionTime' => 'Ora acquisizione', 'AcquisitionTimeDay' => 'Ora acquisizione - Giorno', 'AcquisitionTimeMonth' => 'Ora acquisizione - Mese', 'AcquisitionTimeSynchronized' => 'Ora acquisizione sincronizzata', 'AcquisitionTimeYear' => 'Ora acquisizione - Anno', 'AcquisitionTimeYearMonth' => 'Ora acquisizione - Anno mese', 'AcquisitionTimeYearMonthDay' => 'Ora acquisizione - Anno mese giorno', 'AcquisitionType' => 'Tipo acquisizione', 'AcquisitionsInSeries' => 'Acquisizioni in serie', 'AcquisitionsInStudy' => 'Acquisizioni in esame', 'AcrossScanSpatialResolution' => 'Attraverso risoluzione di scansione spaziale', 'ActionAdvised' => { Description => 'Azione consigliata', PrintConv => { 'Object Append' => 'Allega oggetto', 'Object Kill' => 'Distruzione oggetto', 'Object Reference' => 'Riferimento oggetto', 'Object Replace' => 'Sostituzione oggetto', }, }, 'ActiveArea' => 'Area attiva', 'ActiveD-Lighting' => { Description => 'D-Lighting attivo', PrintConv => { 'Extra High' => 'Molto alto', 'High' => 'Alto', 'Low' => 'Basso', 'Normal' => 'Normale', 'Off' => 'Spento', 'On' => 'Acceso', }, }, 'ActiveD-LightingMode' => { Description => 'Modalità D-Lighting attiva', PrintConv => { 'Extra High' => 'Molto alto', 'High' => 'Alto', 'Low' => 'Basso', 'Normal' => 'Normale', 'Off' => 'Spento', 'Unchanged' => 'Immutato', }, }, 'ActiveFormatDescriptor' => 'Descrittore formato attivo', 'ActiveLinesperFrame' => 'Linee per quadro attuali', 'ActiveSamplesperLine' => 'Linee per campione attuali', 'ActiveSourceDiameter' => 'Diametro sorgente attuale', 'ActiveSourceLength' => 'Lunghezza sorgente attuale', 'ActiveState' => 'Stato attivo', 'Actor' => 'Attore', 'ActualCardiacTriggerDelayTime' => 'Tempo di ritardo corrente trigger cardiaco', 'ActualCompensation' => 'Compensazione corrente', 'ActualFrameDuration' => 'Durata frame attuale', 'ActualHumanPerformersSequence' => 'Sequenza attuale esecutori umani', 'ActualReceiveGainAnalog' => 'Guadagno analogico in ricezione attuale', 'ActualReceiveGainDigital' => 'Guadagno digitale in ricezione attuale', 'ActualRespiratoryTriggerDelayTime' => 'Tempo di ritardo corrente trigger respiratorio', 'ActualSeriesDataTimeStamp' => 'Marca temporale serie di dati attuali', 'Ad-ID' => 'ID Ad', 'AdaptiveMapFormat' => 'Formato mappa adattativa', 'AddAspectRatioInfo' => { Description => 'Aggiunta info rapporto di aspetto', PrintConv => { 'Off' => 'Spento', }, }, 'AddIntermediateSequence' => 'Aggiunta sequenza intermedia', 'AddNearSequence' => 'Aggiunta sequenza vicina', 'AddOriginalDecisionData' => { Description => 'Aggiunta dati decisione originale', PrintConv => { 'Off' => 'Spento', 'On' => 'Acceso', }, }, 'AddOtherSequence' => 'Aggiunta altra sequenza', 'AddPower' => 'Aggiunta potenza', 'AdditionalDrugSequence' => 'Sequenza farmaci addizionali', 'AdditionalModelInformation' => 'Ulteriori informazioni modello', 'AdditionalPatientHistory' => 'Ulteriore storia del paziente', 'Address' => 'Indirizzo', 'AddressLine' => 'Linea indirizzo', 'AddressNameValueSets' => 'Gruppi di valori nome indirizzo', 'AddressSets' => 'Gruppi di indirizzi', 'AddressTrial' => 'Studio indirizzo', 'AdjustmentMode' => 'Modo adattamento', 'AdministrationRouteCodeSequence' => 'Sequenza codici percorso di amministrazione', 'AdmissionID' => 'ID ammissione', 'AdmittingDate' => 'Data ammissione', 'AdmittingDiagnosesCodeSequence' => 'Sequenza codici diagnosi ammissione', 'AdmittingDiagnosesDescription' => 'Descrizioni diagnosi ammissione', 'AdmittingTime' => 'Ora ammissione', 'AdobeCMType' => 'Tipo Adobe CM', 'AdoptedNeutral' => 'Adottato neutro', 'AdultContentWarning' => { Description => 'Avviso contenuto per adulti', PrintConv => { 'Adult Content Warning Required' => 'Avviso contenuto per adulti richiesto', 'Not Required' => 'Non richiesto', 'Unknown' => 'Sconosciuto', }, }, 'AdvancedContentEncryption' => 'Crittografia avanzata del contenuto', 'AdvancedMutualExcl' => 'Mutua esclusione avanzata', 'AdvancedRaw' => { Description => 'Raw avanzato', PrintConv => { 'Off' => 'Spento', 'On' => 'Acceso', }, }, 'AdvancedSceneMode' => { Description => 'Modo scena avanzato', PrintConv => { 'Architecture' => 'Architettura', 'Color Select' => 'Selezione colore', 'Creative Macro' => 'Macro creativo', 'Creative Night Scenery' => 'Scenario notturno creativo', 'Creative Portrait' => 'Ritratto creativo', 'Creative Scenery' => 'Scenario creativo', 'Creative Sports' => 'Sport creativi', 'Cross Process' => 'Cross process', 'Dynamic Art' => 'Arte dinamica', 'Dynamic Monochrome' => 'Monocromatico dinamico', 'Elegant' => 'Elegante', 'Expressive' => 'Espressivo', 'Flower' => 'Fiore', 'HDR Art' => 'HDR artistico', 'HDR B&W' => 'HDR in bianco e nero', 'High Dynamic' => 'High dynamic', 'High Key' => 'High key', 'Illuminations' => 'Illuminazioni', 'Indoor Portrait' => 'Ritratto al chiuso', 'Indoor Sports' => 'Sport al chiuso', 'Low Key' => 'Low key', 'Minature' => 'Minuatura', 'Monochrome' => 'Monocromatico', 'Nature' => 'Natura', 'Objects' => 'Oggetti', 'Off' => 'Spento', 'Outdoor Portrait' => 'Ritratto all\'aperto', 'Outdoor Sports' => 'Sport all\'aperto', 'Pure' => 'Puro', 'Retro' => 'Retrò', 'Sepia' => 'Seppia', 'Soft' => 'Morbido', 'Star' => 'Stella', 'Toy Effect' => 'Effetto giocattolo', }, }, 'AdvancedSceneType' => 'Tipo scena avanzato', 'AdvantageCompOverflow' => 'Overflow componente avanzato', 'AdvantageCompUnderflow' => 'Underflow componente avanzato', 'AdventRevision' => 'Revisione arrivo', 'AdventScale' => 'Scala arrivo', 'AdvertisingMaterialReference' => 'Riferimento materiale pubblicitario', 'Advisory' => 'Consultivo', 'AlbumArtistSortOrder' => 'Ordinamento album-artista', 'AlbumSortOrder' => 'Ordinamento album', 'AliasLayerMetadata' => 'Livello metadati alias', 'AlphaByteCount' => 'Numero byte trasparenza', 'AlphaDataDiscard' => { Description => 'Scarto dati trasparenza', PrintConv => { 'Flexbits Discarded' => 'Flexbit scartati', 'Full Resolution' => 'Risoluzione piena', 'HighPass Frequency Data Discarded' => 'Dati in frequenza passa-alto scartati', 'Highpass and LowPass Frequency Data Discarded' => 'Dati in frequenza passa-alto e passa-basso scartati', }, }, 'AlphaInterlace' => { PrintConv => { 'Noninterlaced' => 'Non interlacciato', }, }, 'AlphaOffset' => 'Scostamento trasparenza', 'AlphaTransparency' => { PrintConv => { 'Not Inverted' => 'Non invertito', }, }, 'AmbienceSelection' => { PrintConv => { 'Vivid' => 'Vivace', }, }, 'AnalogBalance' => 'Bilanciamento analogico', 'Annotation' => 'Annotazione', 'Annotations' => 'Annotazioni', 'Anti-Blur' => { PrintConv => { 'Off' => 'Spento', 'n/a' => 'n/d', }, }, 'AntiAliasStrength' => 'Forza antialiasing', 'Aperture' => 'Diaframma', 'ApertureDisplayed' => 'Diaframma mostrato', 'ApertureRange' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'ApertureRingUse' => { PrintConv => { 'Prohibited' => 'Proibito', }, }, 'ApertureValue' => 'Apertura diaframma', 'AppleStoreCountry' => { PrintConv => { 'Italy' => 'Italia', 'Japan' => 'Giappone', 'Norway' => 'Norvegia', 'Portugal' => 'Portogallo', 'Sweden' => 'Svezia', 'United Kingdom' => 'Regno Unito', 'United States' => 'Stati Uniti', }, }, 'ApplicationNotes' => 'Note applicazione', 'ApplicationRecordVersion' => 'Versione Registrazione Applicazione', 'ApplyShootingMeteringMode' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'ArtFilter' => { PrintConv => { 'Fish Eye' => 'Fish-eye', 'Fragmented' => 'Frammentato', 'Gentle Sepia' => 'Seppia leggero', 'Off' => 'Spento', 'Reflection' => 'Riflessione', }, }, 'ArtFilterEffect' => { PrintConv => { 'Fish Eye' => 'Fish-eye', 'Fragmented' => 'Frammentato', 'Gentle Sepia' => 'Seppia leggero', 'Off' => 'Spento', 'Reflection' => 'Riflessione', 'Star Light' => 'Luce stelle', }, }, 'ArtMode' => { PrintConv => { 'Normal' => 'Normale', }, }, 'Artist' => 'Persona che ha creato l\'immagine', 'Artist2' => 'Artista 2', 'ArtistURL' => 'URL artista', 'AsShotICCProfile' => 'Profilo ICC allo scatto', 'AsShotNeutral' => 'Neutrale allo scatto', 'AsShotPreProfileMatrix' => 'Matrice pre-profilo allo scatto', 'AsShotProfileName' => 'Nome profilo allo scatto', 'AsShotWhiteXY' => 'Bilanciamento del bianco X-T allo scatto', 'AspectRatio' => 'Rapporto immagine', 'AspectRatioType' => { Description => 'Tipo rapporto immagine', PrintConv => { 'Fixed' => 'Fisso', }, }, 'AspectRatioX' => 'Rapporto immagine X', 'AspectRatioY' => 'Rapporto immagine Y', 'AssistButtonFunction' => { PrintConv => { 'Normal' => 'Normale', }, }, 'Attachments' => 'Allegati', 'Audio' => { PrintConv => { 'Yes' => 'Sì', }, }, 'AudioAttributes' => { Description => 'Attributi audio', PrintConv => { 'Encrypted' => 'Crittografato', }, }, 'AudioBytes' => 'Byte audio', 'AudioChannelType' => 'Tipo canale audio', 'AudioChannels' => 'Canali audio', 'AudioCodec' => 'Codec audio', 'AudioCodecDescription' => 'Descrizione codec audio', 'AudioCodecID' => { Description => 'ID codec audio', PrintConv => { 'QDesign Music' => 'Musica QDesign', 'Unknown -' => 'Sconosciuto -', }, }, 'AudioCodecInfo' => 'Info codec audio', 'AudioCodecName' => 'Nome codec audio', 'AudioCompression' => 'Compressione audio', 'AudioCompressionAlgorithm' => 'Algoritmo di compressione audio', 'AudioFormat' => 'Formato audio', 'AudioLayer' => 'Livello audio', 'AudioStreamType' => { PrintConv => { 'Reserved' => 'Riservato', }, }, 'AudioType' => { Description => 'Tipo Audio', PrintConv => { 'Text Only' => 'Solo testo', }, }, 'Author' => 'Autore', 'AuthorsPosition' => 'Posizione dell\'autore', 'AutoAperture' => { PrintConv => { 'Off' => 'Spento', }, }, 'AutoBracketModeM' => { PrintConv => { 'Flash Only' => 'Solo flash', }, }, 'AutoBracketSet' => { PrintConv => { 'Exposure' => 'Esposizione', 'Flash Only' => 'Solo flash', }, }, 'AutoBracketing' => { PrintConv => { 'Off' => 'Spento', }, }, 'AutoDistortionControl' => { PrintConv => { 'Off' => 'Spento', }, }, 'AutoExposureBracketing' => { PrintConv => { 'Off' => 'Spento', }, }, 'AutoFP' => { PrintConv => { 'Off' => 'Spento', }, }, 'AutoFocus' => { PrintConv => { 'Off' => 'Spento', }, }, 'AutoISO' => { PrintConv => { 'Off' => 'Spento', }, }, 'AutoLightingOptimizer' => { PrintConv => { 'Enable' => 'Abilita', 'Low' => 'Basso', 'Off' => 'Spento', 'Strong' => 'Forte', 'n/a' => 'n/d', }, }, 'AutoLightingOptimizerOn' => { PrintConv => { 'Yes' => 'Sì', }, }, 'AutoRedEye' => { PrintConv => { 'Off' => 'Spento', }, }, 'AutoRotate' => { PrintConv => { 'None' => 'Nessuno', 'Rotate 180' => 'Ruota di 180°', 'Rotate 270 CW' => 'Ruota di 270° in senso orario', 'Rotate 90 CW' => 'Ruota di 90° senso orario', 'n/a' => 'n/d', }, }, 'AuxiliaryLens' => 'Obiettivo Ausiliario', 'AvSettingWithoutLens' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'AverageLevel' => 'Livello medio', 'Azimuth' => { PrintConv => { 'NNW' => 'NNO', }, }, 'BWMode' => { PrintConv => { 'Off' => 'Spento', }, }, 'BackgroundColorIndicator' => { Description => 'Indicatore colore di sfondo', PrintConv => { 'Specified Background Color' => 'Colore di sfondo specificato', 'Unspecified Background Color' => 'Colore di sfondo non specificato', }, }, 'BackgroundColorValue' => 'Valore colore di sfondo', 'BackgroundTiling' => { PrintConv => { 'Yes' => 'Sì', }, }, 'BadFaxLines' => 'Linee fax non valide', 'BannerImageType' => { PrintConv => { 'None' => 'Nessuno', }, }, 'BaselineExposure' => 'Esposizione di riferimento', 'BaselineNoise' => 'Rumore di riferimento', 'BaselineSharpness' => 'Nitidezza di riferimento', 'BatteryLevel' => 'Livello batteria', 'BatteryState' => { PrintConv => { 'Low' => 'Basso', }, }, 'BeatsPerMinute' => 'Battiti al minuto', 'Beep' => { PrintConv => { 'Low' => 'Basso', 'Off' => 'Spento', }, }, 'BeepPitch' => { PrintConv => { 'Low' => 'Basso', 'Off' => 'Spento', }, }, 'BeepVolume' => { PrintConv => { 'Off' => 'Spento', }, }, 'BestQualityScale' => 'Scala qualità migliore', 'BestShotMode' => { PrintConv => { 'Children' => 'Bambini', 'Fireworks' => 'Fuochi artificiali', 'Flower' => 'Fiore', 'For YouTube' => 'Per YouTube', 'For eBay' => 'Per eBay', 'Off' => 'Spento', 'Retro' => 'Retrò', 'Scenery' => 'Paesaggio', 'Short Movie' => 'Filmato breve', 'Text' => 'Testo', }, }, 'BitsPerComponent' => 'Bits per componente', 'BitsPerExtendedRunLength' => 'Bit per rrun-length esteso', 'BitsPerRunLength' => 'Bit per rrun-length', 'BitsPerSample' => 'Numero di bit per componente', 'BlackLevel' => 'Livello del nero', 'BlackLevelDeltaH' => 'Livello del nero - Delta H', 'BlackLevelDeltaV' => 'Livello del nero - Delta V', 'BlackLevelRepeatDim' => 'Dim ripeti livello del nero', 'BleachBypassToning' => { PrintConv => { 'Green' => 'Verde', 'Off' => 'Spento', 'Purple' => 'Porpora', 'Red' => 'Rosso', }, }, 'BlocksPerFrame' => 'Blocchi per frame', 'BlueBalance' => 'Bilanciamento del blu', 'BlueMatrixColumn' => 'Colonna della Matrice Blu', 'BlueTRC' => 'Curva riproduzione tono blu', 'BlurControl' => { PrintConv => { 'Low' => 'Basso', 'Off' => 'Spento', }, }, 'BlurWarning' => { PrintConv => { 'None' => 'Nessuno', }, }, 'BracketMode' => { PrintConv => { 'Off' => 'Spento', }, }, 'BracketShotNumber' => { PrintConv => { '1 of 2' => '1 di 5', '1 of 3' => '1 di 3', '1 of 5' => '1 di 2', 'n/a' => 'n/d', }, }, 'Brightness' => 'Luminosità', 'BrightnessValue' => 'Valore di luminosità', 'BuildDate' => 'Data compilazione', 'BuildVersion' => 'Versione compilazione', 'BurstMode' => { PrintConv => { 'Off' => 'Spento', }, }, 'ButtonFunctionControlOff' => { PrintConv => { 'Normal (enable)' => 'Normale (abilitato)', }, }, 'By-line' => 'Creatore', 'By-lineTitle' => 'Titolo Creatore', 'CCDScanMode' => { PrintConv => { 'Progressive' => 'Progressivo', }, }, 'CFALayout' => { Description => 'Layout CFA', PrintConv => { 'Even columns offset down 1/2 row' => 'Colonne pari giù di 1/2 riga', 'Even columns offset up 1/2 row' => 'Colonne pari su di 1/2 riga', 'Even rows offset down by 1/2 row, even columns offset left by 1/2 column' => 'Righe pari giù di 1/2 riga, colonne pari a sinistra di 1/2 colonna', 'Even rows offset down by 1/2 row, even columns offset right by 1/2 column' => 'Righe pari giù di 1/2 riga, colonne pari a destra di 1/2 colonna', 'Even rows offset left 1/2 column' => 'Righe pari a sinistra di 1/2 colonna', 'Even rows offset right 1/2 column' => 'Righe pari a destra di 1/2 colonna', 'Even rows offset up by 1/2 row, even columns offset left by 1/2 column' => 'Righe pari su 1/2 riga, colonne pari a sinistra di 1/2 colonna', 'Even rows offset up by 1/2 row, even columns offset right by 1/2 column' => 'Righe pari su 1/2 riga, colonne pari a destra di 1/2 colonna', 'Rectangular' => 'Rettangolare', }, }, 'CFAPattern' => 'Pattern CFA', 'CFAPattern2' => 'Pattern CFA 2', 'CFAPlaneColor' => 'Piano colori CFA', 'CFARepeatPatternDim' => 'Dim pattern ripetuto CFA', 'CHMVersion' => 'Versione CHM', 'CIP3DataFile' => 'File di dati CIP3', 'CIP3Sheet' => 'Foglio CIP3', 'CIP3Side' => 'Lato CIP3', 'CMYKEquivalent' => 'CMYK equivalente', 'CPUArchitecture' => 'Architettura CPU', 'CPUByteOrder' => { Description => 'Ordine byte CPU', PrintConv => { 'Big endian' => 'Big-endian', 'Little endian' => 'Little-endian', }, }, 'CPUCount' => 'Numero processori', 'CPUSubtype' => { Description => 'Sottotipo CPU', PrintConv => { 'ARM (all)' => 'ARM (tutti)', 'HPPA (all)' => 'HPPA (tutti)', 'MC680x0 (all)' => 'MC680x0 (tutti)', 'MC88000 (all)' => 'MC88000 (tutti)', 'MC98000 (all)' => 'MC98000 (tutti)', 'MIPS (all)' => 'MIPS (tutti)', 'NS32032 (all)' => 'NS32032 (tutti)', 'NS32032 DPC (032 CPU)' => 'NS32032 DPC (CPU 032)', 'NS32332 (all)' => 'NS32332 (tutti)', 'NS32332 DPC (032 CPU)' => 'NS32332 DPC (CPU 032)', 'PowerPC (all)' => 'PowerPC (tutti)', 'RS6000 (all)' => 'RS6000 (tutti)', 'RT (all)' => 'RT (tutti)', 'SPARC (all)' => 'SPARC (tutti)', 'VAX (all)' => 'VAX (tutti)', 'i386 (all)' => 'i386 (tutti)', 'i860 (all)' => 'i860 (tutti)', 'i860 little (all)' => 'i860 little (tutti)', }, }, 'CPUType' => { Description => 'Tipo CPU', PrintConv => { 'Any' => 'Qualsiasi', 'Axis Communications 32-bit embedded processor' => 'Processore integrato a 32 bit Axis Communications', 'None' => 'Nessuno', 'S/390 (old)' => 'S/390 (precedente)', 'i860 big endian' => 'i860 big-endian', 'i860 little endian' => 'i860 little-endian', 'm32r (old)' => 'm32r (precedente)', 'v850 (old)' => 'v850 (precedente)', }, }, 'CalibrationDateTime' => 'Data/ora di calibrazione', 'CalibrationIlluminant1' => { Description => 'Calibration illuminazione 1', PrintConv => { 'Cloudy' => 'Nuvoloso', 'Cool White Fluorescent' => 'Fluorescente a luce calda', 'Day White Fluorescent' => 'Fluorescente a luce del giorno bianca', 'Daylight' => 'Luce del giorno', 'Daylight Fluorescent' => 'Fluorescente a luce del giorno', 'Fine Weather' => 'Bel tempo', 'Fluorescent' => 'Fluorescente', 'ISO Studio Tungsten' => 'Tungsteno studio ISO', 'Other' => 'Altra Sorgente di Luce', 'Shade' => 'Ombrato', 'Standard Light A' => 'Luce standard A', 'Standard Light B' => 'Luce standard B', 'Standard Light C' => 'Luce standard C', 'Tungsten (Incandescent)' => 'Tungsteno (luce incandescente)', 'Unknown' => 'Sconosciuto', 'Warm White Fluorescent' => 'Luce fluorescente bianca calda', 'White Fluorescent' => 'Fluorescente bianca', }, }, 'CalibrationIlluminant2' => { Description => 'Calibration illuminazione 2', PrintConv => { 'Cloudy' => 'Nuvoloso', 'Cool White Fluorescent' => 'Fluorescente a luce calda', 'Day White Fluorescent' => 'Fluorescente a luce del giorno bianca', 'Daylight' => 'Luce del giorno', 'Daylight Fluorescent' => 'Fluorescente a luce del giorno', 'Fine Weather' => 'Bel tempo', 'Fluorescent' => 'Fluorescente', 'ISO Studio Tungsten' => 'Tungsteno studio ISO', 'Other' => 'Altra Sorgente di Luce', 'Shade' => 'Ombrato', 'Standard Light A' => 'Luce standard A', 'Standard Light B' => 'Luce standard B', 'Standard Light C' => 'Luce standard C', 'Tungsten (Incandescent)' => 'Tungsteno (luce incandescente)', 'Unknown' => 'Sconosciuto', 'Warm White Fluorescent' => 'Luce fluorescente bianca calda', 'White Fluorescent' => 'Fluorescente bianca', }, }, 'CameraAngle' => 'Angolo fotocamera', 'CameraBody' => 'Corpo fotocamera', 'CameraByteOrder' => 'Ordine byte fotocamera', 'CameraCalibration1' => 'Calibrazione fotocamera 1', 'CameraCalibration2' => 'Calibrazione fotocamera 2', 'CameraCalibrationSig' => 'Segnale calibrazione fotocamera', 'CameraColorCalibration01' => 'Calibrazione colore fotocamera 01', 'CameraColorCalibration02' => 'Calibrazione colore fotocamera 02', 'CameraColorCalibration03' => 'Calibrazione colore fotocamera 03', 'CameraColorCalibration04' => 'Calibrazione colore fotocamera 04', 'CameraColorCalibration05' => 'Calibrazione colore fotocamera 05', 'CameraColorCalibration06' => 'Calibrazione colore fotocamera 06', 'CameraColorCalibration07' => 'Calibrazione colore fotocamera 07', 'CameraColorCalibration08' => 'Calibrazione colore fotocamera 08', 'CameraColorCalibration09' => 'Calibrazione colore fotocamera 09', 'CameraColorCalibration10' => 'Calibrazione colore fotocamera 10', 'CameraColorCalibration11' => 'Calibrazione colore fotocamera 11', 'CameraColorCalibration12' => 'Calibrazione colore fotocamera 12', 'CameraColorCalibration13' => 'Calibrazione colore fotocamera 13', 'CameraColorCalibration14' => 'Calibrazione colore fotocamera 14', 'CameraColorCalibration15' => 'Calibrazione colore fotocamera 15', 'CameraDateTime' => 'Data/ora fotocamera', 'CameraDirection' => 'Direzione fotocamera', 'CameraID' => 'ID fotocamera', 'CameraISO' => 'ISO fotocamera', 'CameraIdentifier' => 'Identificativo fotocamera', 'CameraLabel' => 'Etichetta fotocamera', 'CameraMaker' => 'Marca fotocamera', 'CameraManufacturer' => 'Produttore fotocamera', 'CameraModel' => 'Modello fotocamera', 'CameraMotion' => 'Camera motion', 'CameraMove' => 'Sposta fotocamera', 'CameraName' => 'Nome fotocamera', 'CameraObjBackType' => 'Nome oggetto nero fotocamera', 'CameraObjName' => 'Nome oggetto fotocamera', 'CameraObjType' => 'Tipo oggetto fotocamera', 'CameraObjVersion' => 'Versione oggetto fotocamera', 'CameraOrientation' => { Description => 'Orientazione fotocamera', PrintConv => { 'Horizontal (normal)' => 'Orizzontale (normale)', 'Rotate 180' => 'Ruota di 180°', 'Rotate 270 CW' => 'Ruota di 270° in senso orario', 'Rotate 90 CW' => 'Ruota di 90° senso orario', }, }, 'CameraOwner' => 'Proprietario fotocamera', 'CameraParameters' => 'Parametri fotocamera', 'CameraProfile' => 'Profilo fotocamera', 'CameraProfileDigest' => 'Sommario profilo fotocamera', 'CameraProfileVersion' => 'Versione profilo fotocamera', 'CameraSerialNumber' => 'Numero di serie fotocamera', 'CameraSettingsVersion' => 'Versione impostazioni fotocamera', 'CameraTemperature' => 'Temperatura fotocamera', 'CameraTemperature2' => 'Temperatura fotocamera 2', 'CameraTemperature3' => 'Temperatura fotocamera 3', 'CameraTemperature4' => 'Temperatura fotocamera 4', 'CameraTemperature5' => 'Temperatura fotocamera 5', 'CameraType' => { Description => 'Tipo fotocamera', PrintConv => { 'n/a' => 'n/d', }, }, 'CameraType2' => 'Tipo fotocamera 2', 'CanonExposureMode' => { PrintConv => { 'Aperture-priority AE' => 'Priorità diaframma', 'Manual' => 'Manuale', 'Program AE' => 'Programma AE', 'Shutter speed priority AE' => 'Priorità otturatore AE', }, }, 'CanonFlashMode' => { PrintConv => { 'External flash' => 'Flash esterno', 'Off' => 'Spento', 'Red-eye reduction' => 'Riduzione occhi rossi', 'Red-eye reduction (Auto)' => 'Riduzione occhi rossi (auto)', 'Red-eye reduction (On)' => 'Riduzione occhi rossi (attivo)', }, }, 'CanonImageSize' => { PrintConv => { 'Postcard' => 'Cartolina', }, }, 'Caption-Abstract' => 'Didascalia/descrizione', 'CaptionWriter' => 'Autore della didascalia', 'CardShutterLock' => { PrintConv => { 'Off' => 'Spento', }, }, 'CasioQuality' => { Description => 'Qualità Casio', PrintConv => { 'Normal' => 'Normale', }, }, 'Categories' => { Description => 'Categorie', PrintConv => { 'Events' => 'Eventi', 'Scenery' => 'Paesaggio', 'To Do' => 'Da fare', }, }, 'Category' => 'Categoria', 'CellLength' => 'Lunghezza cella', 'CellWidth' => 'Larghezza cella', 'CenterWeightedAreaSize' => { PrintConv => { 'Average' => 'Media', }, }, 'ChExtra' => 'Larghezza aggiunta per caratteri non spaziatori', 'Channel' => 'Canale', 'ChannelID' => 'ID canale', 'ChannelIdentificationCode' => 'Codice identificativo canale', 'ChannelLabel' => 'Etichetta canale', 'ChannelLength' => 'Lunghezza canale', 'ChannelMode' => 'Modo canale', 'ChannelNumber' => 'Numero canale', 'ChannelPositions' => 'Posizioni canale', 'ChannelStatus' => 'Stato canale', 'ChannelStatusMode' => 'Modo stato canale', 'ChannelTotalTime' => 'Tempo totale canale', 'ChannelWidth' => 'Larghezza canale', 'Channels' => 'Canali', 'Chapter' => 'Capitolo', 'ChapterPhysicalEquivalent' => { PrintConv => { 'Session' => 'Sessione', 'Side' => 'Lato', }, }, 'ChapterProcessTime' => { PrintConv => { 'For Duration of Chapter' => 'Per la durata del capitolo', }, }, 'CharacterSet' => { Description => 'Set di caratteri', PrintConv => { 'Windows, Arabic' => 'Windows, Arabo', 'Windows, Chinese (Simplified)' => 'Windows, Cinese semplificato', 'Windows, Cyrillic' => 'Windows, Cirillico', 'Windows, Greek' => 'Windows, Greco', 'Windows, Hebrew' => 'Windows, Ebraico', 'Windows, Japan (Shift - JIS X-0208)' => 'Windows, Giappone (Shift - JIS X-0208)', 'Windows, Korea (Shift - KSC 5601)' => 'Windows, Corea (Shift - KSC 5601)', 'Windows, Latin2 (Eastern European)' => 'Windows, Latin2 (Europa orientale)', 'Windows, Turkish' => 'Windows, Turco', }, }, 'Characters' => 'Caratteri', 'CharactersWithSpaces' => 'Caratteri con spazi', 'Children' => 'Bambini', 'ChromaBlurRadius' => 'Raggio sfocatura cromatica', 'ChromaticAberrationCorrection' => { PrintConv => { 'Off' => 'Spento', }, }, 'ChromaticAdaptation' => 'Adattamento cromatico', 'Chromaticity' => 'Cromatismo', 'ChrominanceNR_TIFF_JPEG' => { PrintConv => { 'Low' => 'Basso', 'Off' => 'Spento', }, }, 'ChrominanceNoiseReduction' => { PrintConv => { 'Low' => 'Basso', 'Off' => 'Spento', }, }, 'City' => 'Città', 'ClassifyState' => 'Stato di Classificazione', 'CleanFaxData' => { Description => 'Dati fax precisi', PrintConv => { 'Clean' => 'Pulito', 'Regenerated' => 'Rigenerato', 'Unclean' => 'Sporco', }, }, 'ClipPath' => 'Percoso clip', 'CodePage' => { PrintConv => { 'Japanese (JIS 0208-1990 and 0121-1990)' => 'Giapponese (JIS 0208-1990 e 0121-1990)', 'Russian/Cyrillic (KOI8-R)' => 'Russo/Cirillico (KOI8-R)', }, }, 'CodeSize' => 'Dimensione codice', 'CodedCharacterSet' => 'Impostazione Caratteri Codificati', 'CodedContentScanningKind' => { PrintConv => { 'Mixed' => 'Misto', 'Progressive' => 'Progressivo', 'Unknown' => 'Sconosciuto', }, }, 'CodingMethods' => { Description => 'Metodi di codifica', PrintConv => { 'Baseline JPEG' => 'Linea di base JPEG', 'JBIG color' => 'JBIG a colori', 'Modified Huffman' => 'Huffman modificato', 'Unspecified compression' => 'Compressione non specificata', }, }, 'ColorAberrationControl' => { PrintConv => { 'Off' => 'Spento', }, }, 'ColorAdjustmentMode' => { PrintConv => { 'Off' => 'Spento', }, }, 'ColorBalance' => 'Bilanciamento Colore', 'ColorBalanceAdj' => { PrintConv => { 'Off' => 'Spento', }, }, 'ColorBooster' => { PrintConv => { 'Off' => 'Spento', }, }, 'ColorCharacterization' => 'Caratterizzazione colore', 'ColorClass' => { PrintConv => { '0 (None)' => '0 (Nessuno)', '1 (Winner)' => '1 (Vincitore)', }, }, 'ColorEffect' => { PrintConv => { 'Off' => 'Spento', 'Sepia' => 'Seppia', }, }, 'ColorFilter' => { Description => 'Filtro colori', PrintConv => { 'Green' => 'Verde', 'Off' => 'Spento', 'Purple' => 'Porpora', 'Red' => 'Rosso', 'Sepia' => 'Seppia', 'Yellow' => 'Giallo', }, }, 'ColorHue' => 'Colore Hue', 'ColorMap' => 'Mappa colore', 'ColorMatrix1' => 'Matrice colore 1', 'ColorMatrix2' => 'Matrice colore 2', 'ColorMode' => { Description => 'Modo colore', PrintConv => { 'Autumn Leaves' => 'Foglie d\'autunno', 'B&W' => 'B/N', 'Clear' => 'Trasparente', 'Deep' => 'Cupa', 'Evening' => 'Sera', 'Grayscale' => 'Scala di grigi', 'Landscape' => 'Orizzontale', 'Light' => 'Chiara', 'Neutral' => 'Neutra', 'Night View' => 'Visione notturna', 'Night View/Portrait' => 'Rit. notturno', 'Normal' => 'Normale', 'Off' => 'Spento', 'Portrait' => 'Verticale', 'RGB Color' => 'Colore RGB', 'Saturated Color' => 'Colore saturato', 'Sepia' => 'Seppia', 'Sunset' => 'Tramonto', 'Vivid' => 'Vivace', 'Vivid color' => 'Colore vivace', 'n/a' => 'n/d', }, }, 'ColorMoireReduction' => { PrintConv => { 'Off' => 'Spento', }, }, 'ColorMoireReductionMode' => { PrintConv => { 'Low' => 'Basso', 'Off' => 'Spento', }, }, 'ColorPalette' => 'Palette di Colore', 'ColorProfile' => { PrintConv => { 'Not Embedded' => 'Non incorporato', }, }, 'ColorRepresentation' => { Description => 'Rappresentazione del Colore', PrintConv => { 'No Image, Single Frame' => 'Nessuna immagine, quadro singolo', }, }, 'ColorResponseUnit' => 'Unità risposta colore', 'ColorSequence' => 'Sequenza colori', 'ColorSpace' => { Description => 'Spazio colore', PrintConv => { 'Gray-scale' => 'Scala di grigi', 'Grayscale' => 'Scala di grigi', 'ICC Profile' => 'Profilo ICC', 'Uncalibrated' => 'Non calibrato', }, }, 'ColorSpaceData' => 'Dati Spazio Colore', 'ColorSpecApproximation' => { PrintConv => { 'Not Specified' => 'Non specificato', }, }, 'ColorSpecMethod' => { PrintConv => { 'Enumerated' => 'Enumerato', }, }, 'ColorTable' => 'Tabella colore', 'ColorTemperature' => 'Temperatura colore', 'ColorTemperatureSetting' => { PrintConv => { 'Temperature' => 'Temperatura', }, }, 'ColorTone' => { PrintConv => { 'Normal' => 'Normale', }, }, 'ColorToneFaithful' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ColorToneLandscape' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ColorToneMonochrome' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ColorToneNeutral' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ColorTonePortrait' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ColorToneStandard' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ColorToneUnknown' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ColorToneUserDef1' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ColorToneUserDef2' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ColorToneUserDef3' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ColorType' => { PrintConv => { 'Grayscale' => 'Scala di grigi', 'RGB with Alpha' => 'RGB con trasparenza', }, }, 'ColorimetricReference' => 'Riferimento colorimetrico', 'CommandDialsChangeMainSub' => { PrintConv => { 'Off' => 'Spento', }, }, 'CommandDialsMenuAndPlayback' => { PrintConv => { 'Off' => 'Spento', }, }, 'CommandDialsReverseRotation' => { PrintConv => { 'Yes' => 'Sì', }, }, 'CommanderGroupAMode' => { PrintConv => { 'Auto Aperture' => 'Diaframma automatico', 'Manual' => 'Manuale', 'Off' => 'Spento', }, }, 'CommanderGroupBMode' => { PrintConv => { 'Auto Aperture' => 'Diaframma automatico', 'Manual' => 'Manuale', 'Off' => 'Spento', }, }, 'CommanderInternalFlash' => { PrintConv => { 'Manual' => 'Manuale', 'Off' => 'Spento', }, }, 'Comment' => 'Commento', 'CommentTime' => 'Ora commento', 'Comments' => 'Commenti', 'CommercialURL' => 'URL pubblicitario', 'CompanyName' => 'Nome azienda', 'Compilation' => { PrintConv => { 'Yes' => 'Sì', }, }, 'ComponentsConfiguration' => 'Configurazione componenti', 'Composer' => 'Compositore', 'ComposerSortOrder' => 'Ordinamento compositore', 'CompositionAdjust' => { PrintConv => { 'Off' => 'Spento', }, }, 'CompositionMode' => { PrintConv => { 'Replace' => 'Sostituisci', }, }, 'Compressed' => { PrintConv => { 'False' => 'Falso', }, }, 'CompressedBitsPerPixel' => 'Bit per pixel compressi', 'Compression' => { Description => 'Compressione', PrintConv => { 'Adobe Deflate' => 'Deflate Adobe', 'JBIG B&W' => 'JBIG B&N', 'JBIG Color' => 'JBIG a colori', 'JPEG' => 'Compressione JPEG', 'JPEG (old-style)' => 'JPEG (vecchio stile)', 'Kodak DCR Compressed' => 'Kodak DCR compresso', 'Kodak KDC Compressed' => 'Kodak KDC compresso', 'Microsoft Document Imaging (MDI) Binary Level Codec' => 'Microsoft Document Imaging (MDI) - Codec a livello binario', 'Microsoft Document Imaging (MDI) Progressive Transform Codec' => 'Microsoft Document Imaging (MDI) - Codec a trasformazione progressiva', 'Microsoft Document Imaging (MDI) Vector' => 'Microsoft Document Imaging (MDI) - Vettore', 'Next' => 'Codifica NeXT', 'Nikon NEF Compressed' => 'Nikon NEF compresso', 'None' => 'Nessuno', 'Packed RAW' => 'RAW pacchettizzato', 'Pentax PEF Compressed' => 'Pentax PEF compresso', 'RLE Encoding' => 'Codifica RLE', 'Samsung SRW Compressed' => 'Samsung SRW compresso', 'Sony ARW Compressed' => 'Sony ARW compresso', 'T4/Group 3 Fax' => 'Fax T4/Group 3', 'T6/Group 4 Fax' => 'Fax T6/Group 4', 'Uncompressed' => 'Non compresso', }, }, 'CompressionLevel' => 'Livello di compressione', 'CompressionType' => { Description => 'Tipo compressione', PrintConv => { 'Little-endian, no compression' => 'Little-endian, senza compressione', 'None' => 'Nessuno', }, }, 'CompressorName' => 'Nome compressione', 'ConditionalFEC' => 'Compensazione Esposizione Flash', 'Conductor' => 'Direttore d\'orchestra', 'ConsecutiveBadFaxLines' => 'Linee fax non valide consecutive', 'Contact' => 'Contatto', 'ContentEncodingType' => { PrintConv => { 'Encryption' => 'Crittografia', }, }, 'ContentEncryptionAlgorithm' => { PrintConv => { 'Not Encrypted' => 'Non crittografato', }, }, 'ContentLocationCode' => 'Codice ubicazione contenuto', 'ContentLocationName' => 'Nome Ubicazione Contenuto', 'ContentSignatureAlgorithm' => { PrintConv => { 'Not Signed' => 'Senza segno', }, }, 'ContentSignatureHashAlgorithm' => { PrintConv => { 'Not Signed' => 'Senza segno', }, }, 'ContinuousBracketing' => { PrintConv => { 'Low' => 'Basso', }, }, 'ContinuousShootingSpeed' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'ContinuousShotLimit' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'Contrast' => { Description => 'Contrasto', PrintConv => { 'High' => 'Alto', 'Low' => 'Basso', 'Normal' => 'Normale', }, }, 'ContrastCurve' => 'Curva di contrasto', 'ContrastDetectAF' => { PrintConv => { 'Off' => 'Spento', }, }, 'ContrastFaithful' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ContrastHighlightShadowAdj' => { PrintConv => { 'Off' => 'Spento', }, }, 'ContrastLandscape' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ContrastMode' => { PrintConv => { 'Elegant (My Color)' => 'Elegante (mio colore)', 'Expressive' => 'Espressivo', 'Low' => 'Basso', 'Normal' => 'Normale', 'Nostalgic (Color Film)' => 'Nostalgico (pellicola a colori)', 'Retro' => 'Retrò', 'Retro (My Color)' => 'Retro (colore personalizzato)', }, }, 'ContrastMonochrome' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ContrastNeutral' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ContrastPortrait' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ContrastStandard' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ContrastUnknown' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ContrastUserDef1' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ContrastUserDef2' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ContrastUserDef3' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ControlDialSet' => { PrintConv => { 'Shutter Speed' => 'Tempo esposizione', }, }, 'ControlMode' => { PrintConv => { 'Camera Local Control' => 'Controllo locale fotocamera', 'n/a' => 'n/d', }, }, 'ConversionLens' => { PrintConv => { 'Off' => 'Spento', }, }, 'Converter' => 'Convertitore', 'Copyright' => 'Titolare del copyright', 'CopyrightFlag' => { PrintConv => { 'False' => 'Falso', }, }, 'CopyrightNotice' => 'Info Copyright', 'CopyrightStatus' => { PrintConv => { 'Not specified' => 'Non specificato', 'Protected' => 'Protetto', 'Public Domain' => 'Pubblico dominio', 'Unknown' => 'Sconosciuto', }, }, 'CopyrightURL' => 'URL copyright', 'Country' => 'Paese', 'Country-PrimaryLocationCode' => 'Codice ISO Nazione', 'Country-PrimaryLocationName' => 'Nazione', 'CreateDate' => 'Data di creazione', 'CreationDate' => 'Data di creazione', 'CreativeStyle' => { PrintConv => { 'Autumn Leaves' => 'Foglie d\'autunno', 'B&W' => 'B/N', 'Clear' => 'Trasparente', 'Deep' => 'Cupa', 'Landscape' => 'Orizzontale', 'Light' => 'Chiara', 'Neutral' => 'Neutra', 'Night View/Portrait' => 'Rit. notturno', 'Portrait' => 'Verticale', 'Sepia' => 'Seppia', 'Sunset' => 'Tramonto', 'Vivid' => 'Vivace', }, }, 'CreativeStyleSetting' => { PrintConv => { 'Landscape' => 'Orizzontale', 'Sunset' => 'Tramonto', 'Vivid' => 'Vivace', }, }, 'Creator' => 'Creatore', 'CreatorAddress' => 'Autore - Indirizzo', 'CreatorAppID' => { PrintConv => { 'Unknown' => 'Sconosciuto', }, }, 'CreatorCity' => 'Autore - Città', 'CreatorCountry' => 'Autore - Nazione', 'CreatorPostalCode' => 'Autore - Codice Postale', 'CreatorRegion' => 'Autore - Stato/Provincia', 'CreatorWorkEmail' => 'Autore - E.Mail', 'CreatorWorkTelephone' => 'Autore - Numero di Telefono', 'CreatorWorkURL' => 'Autore - Sito web', 'Credit' => 'Fornitore', 'CreditLineRequired' => { PrintConv => { 'Not Required' => 'Non richiesto', }, }, 'CropActive' => { PrintConv => { 'Yes' => 'Sì', }, }, 'CropUnit' => { PrintConv => { 'inches' => 'Pollici', }, }, 'CropUnits' => { PrintConv => { 'inches' => 'Pollici', }, }, 'CrossProcess' => { PrintConv => { 'Favorite 1' => 'Preferito 1', 'Favorite 2' => 'Preferito 2', 'Favorite 3' => 'Preferito 3', 'Off' => 'Spento', 'Random' => 'Casuale', }, }, 'CurrentICCProfile' => 'Profilo ICC attuale', 'CurrentPreProfileMatrix' => 'Matrice di pre-profilo attuale', 'Curves' => { PrintConv => { 'Off' => 'Spento', }, }, 'CustomRendered' => { Description => 'Resa personalizzata', PrintConv => { 'Custom' => 'Personalizzata', 'Normal' => 'Normale', }, }, 'CustomWBError' => { PrintConv => { 'Error' => 'Errore', }, }, 'D-LightingHQ' => { PrintConv => { 'Off' => 'Spento', }, }, 'D-LightingHQSelected' => { PrintConv => { 'Yes' => 'Sì', }, }, 'D-LightingHS' => { PrintConv => { 'Off' => 'Spento', }, }, 'D-RangeOptimizerMode' => { PrintConv => { 'Manual' => 'Manuale', 'Off' => 'Spento', }, }, 'DECPosition' => { PrintConv => { 'Exposure' => 'Esposizione', 'Saturation' => 'Saturazione', }, }, 'DNGBackwardVersion' => 'Versione precedente DNG', 'DNGLensInfo' => 'Informazioni lenti DNG', 'DNGPrivateData' => 'Dati privati DNG', 'DNGVersion' => 'Versione DNG', 'DataImprint' => { PrintConv => { 'None' => 'Nessuno', 'Text' => 'Testo', }, }, 'DataType' => 'Tipo di dati', 'Date' => 'Data', 'DateCreated' => 'Data di creazione', 'DateDisplayFormat' => { Description => 'Formato Data', PrintConv => { 'D/M/Y' => 'Giorno/mese/anno', 'M/D/Y' => 'Mese/giorno/anno', 'Y/M/D' => 'Anno/mese/giorno', }, }, 'DateImprint' => { PrintConv => { 'Off' => 'Spento', }, }, 'DateSent' => 'Data d\'invio', 'DateStampMode' => { PrintConv => { 'Off' => 'Spento', }, }, 'DateTime' => 'Data/ora', 'DateTimeOriginal' => 'Data/ora originale di creazione', 'DaylightSavings' => { PrintConv => { 'Off' => 'Spento', 'Yes' => 'Sì', }, }, 'Decode' => 'Decodifica', 'DefaultCropOrigin' => 'Ritaglio origine predefinito', 'DefaultCropSize' => 'Ritaglio dimensione predefinito', 'DefaultImageColor' => 'Colore immagine predefinito', 'DefaultScale' => 'Scala predefinita', 'DeletedImageCount' => 'Conteggio Immagini Cancellate', 'DeltaType' => { PrintConv => { 'Absolute' => 'Assoluto', }, }, 'Description' => 'Descrizione', 'Destination' => 'Destinazione', 'DestinationCity' => { PrintConv => { 'Jerusalem' => 'Gerusalemme', 'Lisbon' => 'Lisbona', 'London' => 'Londra', 'Milan' => 'Milano', 'Prague' => 'Praga', 'Rome' => 'Roma', 'Stockholm' => 'Stoccolma', 'Tehran' => 'Teheran', }, }, 'DestinationDST' => { PrintConv => { 'Yes' => 'Sì', }, }, 'DeviceAttributes' => 'Attributi Dispositivo', 'DeviceManufacturer' => 'Costruttore dispositivo', 'DeviceMfgDesc' => 'Descrizione del Costruttore Dispositivo', 'DeviceModel' => 'Modello Dispositivo', 'DeviceModelDesc' => 'Descrizione Modello Dispositivo', 'DeviceSettingDescription' => 'Descrizione impostazioni dispositivo', 'DialDirectionTvAv' => { PrintConv => { 'Normal' => 'Normale', 'Reversed' => 'Invertito', }, }, 'DigitalCreationDate' => 'Data di creazione digitale', 'DigitalCreationTime' => 'Ora di Creazione Digitale', 'DigitalFilter01' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter02' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter03' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter04' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter05' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter06' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter07' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter08' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter09' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter10' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter11' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter12' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter13' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter14' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter15' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter16' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter17' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter18' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter19' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalFilter20' => { PrintConv => { 'Fisheye' => 'Fish-eye', 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Retro' => 'Retrò', 'Shading' => 'Ombreggiatura', 'Starburst' => 'Esplosione stellare', }, }, 'DigitalZoom' => { Description => 'Zoom Digitale', PrintConv => { 'None' => 'Nessuno', 'Off' => 'Spento', }, }, 'DigitalZoomOn' => { PrintConv => { 'Off' => 'Spento', }, }, 'DigitalZoomRatio' => 'Rapporto zoom digitale', 'Directory' => 'Posizione file', 'DisplayAllAFPoints' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'DisplaySize' => { PrintConv => { 'Normal' => 'Normale', }, }, 'DisplayUnits' => { PrintConv => { 'inches' => 'Pollici', }, }, 'DisplayedUnitsX' => { PrintConv => { 'inches' => 'Pollici', }, }, 'DisplayedUnitsY' => { PrintConv => { 'inches' => 'Pollici', }, }, 'DistortionControl' => { PrintConv => { 'Off' => 'Spento', }, }, 'DistortionCorrection' => { PrintConv => { 'Off' => 'Spento', 'n/a' => 'n/d', }, }, 'DistortionCorrection2' => { PrintConv => { 'Off' => 'Spento', }, }, 'DjVuVersion' => 'Versione DjVu', 'DocSecurity' => { PrintConv => { 'None' => 'Nessuno', }, }, 'DocumentHistory' => 'Cronologia documento', 'DocumentName' => 'Nome documento', 'DocumentNotes' => 'Note del Documento', 'DotRange' => 'Intervallo puntuale', 'DriveMode' => { Description => 'Modalità esecuzione', PrintConv => { '10 s Timer' => 'Timer 10 s', 'Off' => 'Spento', 'Self-Timer 2 sec' => 'Autoscatto 2 sec', 'Self-timer' => 'Autoscatto', 'Self-timer (12 s)' => 'Autoscatto (12 s)', 'Self-timer (2 s)' => 'Autoscatto (2 s)', 'Self-timer 10 sec' => 'Autoscatto 10 sec', 'Self-timer Operation' => 'Operazione autoscatto', 'n/a' => 'n/d', }, }, 'DriveMode2' => { PrintConv => { 'Self-timer (12 s)' => 'Autoscatto (12 s)', 'Self-timer (2 s)' => 'Autoscatto (2 s)', 'Self-timer 10 sec' => 'Autoscatto 10 sec', 'Self-timer 2 sec' => 'Autoscatto 2 sec', }, }, 'DriveModeSetting' => { PrintConv => { 'Self-timer 10 sec' => 'Autoscatto 10 sec', }, }, 'DriveType' => { PrintConv => { 'Fixed Disk' => 'Disco fisso', 'Unknown' => 'Sconosciuto', }, }, 'DynamicRangeExpansion' => { PrintConv => { 'Off' => 'Spento', }, }, 'DynamicRangeOptimizer' => { Description => 'Ott.gamma din.', PrintConv => { 'Advanced Auto' => 'Avanz.autom.', 'Advanced Lv1' => 'Liv.Avanzato 1', 'Advanced Lv2' => 'Liv.Avanzato 2', 'Advanced Lv3' => 'Liv.Avanzato 3', 'Advanced Lv4' => 'Liv.Avanzato 4', 'Advanced Lv5' => 'Liv.Avanzato 5', 'Auto' => 'Automatico', 'Off' => 'Spento', }, }, 'DynamicRangeOptimizerBracket' => { PrintConv => { 'Low' => 'Basso', 'Off' => 'Spento', }, }, 'DynamicRangeOptimizerMode' => { PrintConv => { 'Off' => 'Spento', }, }, 'DynamicRangeOptimizerSetting' => { PrintConv => { 'Off' => 'Spento', }, }, 'DynamicRangeSetting' => { PrintConv => { 'Manual' => 'Manuale', }, }, 'ETTLII' => { PrintConv => { 'Average' => 'Media', }, }, 'EVSteps' => { PrintConv => { '1/2 EV Steps' => 'Step 1/2 EV', '1/3 EV Steps' => 'Step 1/3 EV', }, }, 'EXIFVersion' => 'Versione EXIF', 'EXRAuto' => { PrintConv => { 'Manual' => 'Manuale', }, }, 'EasyExposureComp' => { PrintConv => { 'Off' => 'Spento', }, }, 'EasyExposureCompensation' => { PrintConv => { 'Off' => 'Spento', }, }, 'EasyMode' => { PrintConv => { 'Fireworks' => 'Fuochi artificiali', 'Fisheye Effect' => 'Effetto fish-eye', 'Flash Off' => 'Flash spento', 'Kids & Pets' => 'Bambini e animali dimestici', 'Landscape' => 'Orizzontale', 'Manual' => 'Manuale', 'Night' => 'Scena notturna', 'Nostalgic' => 'Nostalgico', 'Portrait' => 'Verticale', 'Quick Shot' => 'Scatto veloce', 'Sepia' => 'Seppia', 'Sunset' => 'Tramonto', 'Vivid' => 'Vivace', 'Zoom Blur' => 'Sfocatura zoom', }, }, 'EdgeNoiseReduction' => { PrintConv => { 'Off' => 'Spento', }, }, 'EditStatus' => 'Modifica Stato', 'EditorialUpdate' => { Description => 'Aggiornamento Editoriale', PrintConv => { 'Additional language' => 'Linguaggio addizionale', }, }, 'EffectiveMaxAperture' => 'Diaframma massimo effettivo', 'Elevation' => 'Elevazione', 'Emphasis' => { PrintConv => { 'None' => 'Nessuno', 'reserved' => 'riservato', }, }, 'EncodedBy' => 'Codificato da', 'EncodedPixelsDimensions' => 'Dimensioni pixel codificati', 'EncodedUsing' => 'Codificato usando', 'EncodedWith' => 'Codificato con', 'Encoder' => 'Codificatore', 'EncoderSettings' => 'Impostazioni codificatore', 'EncoderVersion' => 'Versione codificatore', 'Encoding' => { Description => 'Codifica', PrintConv => { 'QDesign Music' => 'Musica QDesign', 'Unknown -' => 'Sconosciuto -', }, }, 'EncodingProcess' => 'Processo di codifica', 'EncodingScheme' => 'Schema di codifica', 'EncodingSettings' => 'Impostazioni di codifica', 'EncodingTime' => 'Durata codifica', 'Encryption' => 'Crittografia', 'EndOfItems' => 'Fine elementi', 'EndPoints' => 'Punti finali', 'EndTime' => 'Ora fine', 'EndUser' => 'Utente finale', 'EndUserID' => 'ID utente finale', 'EndUserName' => 'Nome utente finale', 'EndingPage' => 'Pagina finale', 'EnhanceDarkTones' => { PrintConv => { 'Off' => 'Spento', }, }, 'Enhancement' => { Description => 'Miglioramento', PrintConv => { 'Green' => 'Verde', 'Off' => 'Spento', 'Red' => 'Rosso', 'Scenery' => 'Paesaggio', }, }, 'EnhancementOrModificationDescription' => 'Descrizione miglioramento/modifica', 'EntryPoint' => 'Punto d\'ingresso', 'EnvelopePriority' => { PrintConv => { '0 (reserved)' => '0 (riservato)', '1 (most urgent)' => '1 (molto urgente)', '5 (normal urgency)' => '5 (urgenza normale)', '8 (least urgent)' => '8 (meno urgente)', '9 (user-defined priority)' => '9 (priorità definita dall\'utente)', }, }, 'Error' => 'Errore', 'ErrorCorrection' => 'Correzione errore', 'ErrorCorrectionType' => 'Tipo correzione errore', 'EthnicGroup' => 'Gruppo etnico', 'Event' => 'Evento', 'EventAbsoluteDuration' => 'Durata assoluta evento', 'Events' => 'Eventi', 'ExcursionTolerance' => { PrintConv => { 'Allowed' => 'Possibile', 'Not Allowed' => 'Non permesso', }, }, 'ExecutionStatus' => 'Stato esecuzione', 'ExecutionStatusInfo' => 'Info stato esecuzione', 'ExifByteOrder' => 'Ordine dei byte Exif', 'ExifCameraInfo' => 'Info Exif fotocamera', 'ExifImageHeight' => 'Altezza immagine Exif', 'ExifImageWidth' => 'Larghezza immagine Exif', 'ExifInfo2' => 'Info 2 Exif', 'ExifOffset' => 'Puntatore Exif IFD', 'ExifToolVersion' => 'Numero versione ExifTool', 'ExifUnicodeByteOrder' => 'Ordine unicode dei byte Exif', 'ExifVersion' => 'Versione Exif', 'ExitPupilPosition' => 'Posizione pupilla d\'uscita', 'ExpirationDate' => 'Data scadenza', 'ExpirationTime' => 'Ora scadenza', 'Expires' => 'Scade', 'ExposedArea' => 'Area esposta', 'Exposure' => 'Esposizione', 'Exposure2012' => 'Esposizione 2012', 'ExposureBracketValue' => 'Valore Esposizione a Forcella', 'ExposureBracketingIndicatorLast' => { PrintConv => { 'Not Indicated' => 'Non indicato', }, }, 'ExposureCompensation' => 'Compensazione esposizione', 'ExposureCompensationMode' => 'Modo compensazione esposizione', 'ExposureControlMode' => 'Modo controllo esposizione', 'ExposureControlModeDescription' => 'Descrizione modo controllo esposizione', 'ExposureDelayMode' => { PrintConv => { 'Off' => 'Spento', }, }, 'ExposureDifference' => 'Differenza esposizione', 'ExposureIndex' => 'Indice di esposizione', 'ExposureIndicator' => { PrintConv => { 'Not Indicated' => 'Non indicato', }, }, 'ExposureLevelIncrements' => { PrintConv => { '1/2 Stop' => '1/2 stop', '1/3 Stop' => '1/3 stop', }, }, 'ExposureMode' => { Description => 'Modo esposizione', PrintConv => { 'Aperture Priority' => 'Priorità diaframma', 'Aperture-priority AE' => 'Priorità diaframma', 'Auto bracket' => 'A forcella automatica', 'Fireworks' => 'Fuochi artificiali', 'Landscape' => 'Orizzontale', 'Manual' => 'Manuale', 'Portrait' => 'Verticale', 'Program' => 'Programma', 'Program AE' => 'Programma AE', 'Shutter Priority' => 'Priorità otturatore', 'Shutter speed priority AE' => 'Priorità otturatore AE', 'Sunset' => 'Tramonto', 'n/a' => 'n/d', }, }, 'ExposureModeInManual' => { Description => 'Modo esposizione in manuale', PrintConv => { 'Center-weighted average' => 'Media centrale ponderata', 'Partial metering' => 'Parziale', }, }, 'ExposureModulationType' => 'Tipo modulazione esposizione', 'ExposureProgram' => { Description => 'Programma esposizione', PrintConv => { 'Action (High speed)' => 'Azione (alta velocità)', 'Aperture Priority' => 'Priorità diaframma', 'Aperture-priority AE' => 'Priorità diaframma', 'Bulb' => 'Bulbo', 'Creative (Slow speed)' => 'Creativo (bassa velocità)', 'Landscape' => 'Orizzontale', 'Manual' => 'Manuale', 'Not Defined' => 'Non definito', 'Portrait' => 'Verticale', 'Posterization' => 'Posterizzazione', 'Posterization B/W' => 'Posterizzazione B&N', 'Program' => 'Programma', 'Program AE' => 'Programma AE', 'Retro Photo' => 'Foto retrò', 'Shutter Priority' => 'Priorità otturatore', 'Shutter speed priority AE' => 'Priorità otturatore AE', 'Sunset' => 'Tramonto', 'Sweep Panorama' => 'Panoramica ad arco', }, }, 'ExposureSequence' => 'Sequenza esposizione', 'ExposureStatus' => 'Stato esposizione', 'ExposureTime' => 'Tempo esposizione', 'ExposureTime2' => 'Tempo esposizione 2', 'ExposureTimeInMicroSec' => 'Tempo esposizione in microsecondi', 'ExposureTimeInMilliSec' => 'Tempo esposizione in millisecondi', 'ExposureTuning' => 'Sintonizzazione esposizione', 'ExposureUnknown' => 'Esposizione sconosciuta', 'ExposureValue' => 'Valore esposizione', 'ExtendedWBDetect' => { PrintConv => { 'Off' => 'Spento', }, }, 'Extender' => { PrintConv => { 'None' => 'Nessuno', }, }, 'ExtenderStatus' => { PrintConv => { 'Not attached' => 'Non applicabile', 'Removed' => 'Rimosso', }, }, 'ExtensionPersistence' => { PrintConv => { 'Potentially Invalidated By Modification' => 'Potenzialmente invalidato per modifica', }, }, 'ExternalFlash' => { Description => 'Flash esterno', PrintConv => { 'Off' => 'Spento', }, }, 'ExternalFlashBounce' => { PrintConv => { 'Yes' => 'Sì', 'n/a' => 'n/d', }, }, 'ExternalFlashExposureComp' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ExternalFlashFirmware' => { PrintConv => { '1.01 (SB-800 or Metz 58 AF-1)' => '1.01 (SB-800 o Metz 58 AF-1)', 'n/a' => 'n/d', }, }, 'ExternalFlashFlags' => 'Flags Flash Esterno', 'ExternalFlashMode' => { PrintConv => { 'Off' => 'Spento', }, }, 'ExtraFlags' => { PrintConv => { '(none)' => '(nessuno)', 'Fastest Algorithm' => 'Algoritmo più veloce', }, }, 'ExtraSamples' => { Description => 'Campioni extra', PrintConv => { 'Associated Alpha' => 'Associati alla trasparenza', 'Unassociated Alpha' => 'Non associati alla trasparenza', 'Unspecified' => 'Non specificati', }, }, 'EyeStartAF' => { PrintConv => { 'Off' => 'Spento', }, }, 'FEMicroadjustment' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'FNumber' => 'Numero F', 'Face1Category' => { PrintConv => { 'Family' => 'Famiglia', }, }, 'Face2Category' => { PrintConv => { 'Family' => 'Famiglia', }, }, 'Face3Category' => { PrintConv => { 'Family' => 'Famiglia', }, }, 'Face4Category' => { PrintConv => { 'Family' => 'Famiglia', }, }, 'Face5Category' => { PrintConv => { 'Family' => 'Famiglia', }, }, 'Face6Category' => { PrintConv => { 'Family' => 'Famiglia', }, }, 'Face7Category' => { PrintConv => { 'Family' => 'Famiglia', }, }, 'Face8Category' => { PrintConv => { 'Family' => 'Famiglia', }, }, 'FaceDetection' => { PrintConv => { 'Off' => 'Spento', }, }, 'FaceOrientation' => { PrintConv => { 'Horizontal (normal)' => 'Orizzontale (normale)', 'Rotate 180' => 'Ruota di 180°', 'Rotate 270 CW' => 'Ruota di 270° in senso orario', 'Rotate 90 CW' => 'Ruota di 90° senso orario', }, }, 'FacesDetected' => { Description => 'Facce rimosse', PrintConv => { 'n/a' => 'n/d', }, }, 'FacesRecognized' => 'Facce riconosciute', 'FamilyName' => 'Nome famiglia', 'FastSeek' => { PrintConv => { 'Yes' => 'Sì', }, }, 'FaxNumber' => 'Numero di fax', 'FaxProfile' => { Description => 'Profilo fax', PrintConv => { 'Extended B&W lossless, F' => 'Bianco e nero esteso senza perdita, F', 'Lossless JBIG B&W, J' => 'Senza perdita JBIG bianco e nero, J', 'Lossless color and grayscale, L' => 'Senza perdita a colori e scala di grigi, L', 'Lossy color and grayscale, C' => 'Con perdita a colori e scala di grigi, C', 'Minimal B&W lossless, S' => 'Bianco e nero minimale con perdita, S', 'Mixed raster content, M' => 'Contenuto raster misto, M', 'Multi Profiles' => 'Profili multipli', 'Profile T' => 'Profilo T', 'Unknown' => 'Sconosciuto', }, }, 'FaxRecvParams' => 'Parametri ricezione fax', 'FaxRecvTime' => 'Ora ricezione fax', 'FaxSubAddress' => 'Sotto-indirizzo fax', 'FileAttributes' => { PrintConv => { 'Encrypted' => 'Crittografato', 'Encrypted?' => 'Crittografato?', 'Normal' => 'Normale', 'Not indexed' => 'Non indicizzato', 'Read-only' => 'Sola lettura', 'System' => 'Sistema', }, }, 'FileDescription' => 'Descrizione file', 'FileDescriptors' => 'Descrittori file', 'FileFlags' => { Description => 'Attributi file', PrintConv => { 'Info inferred' => 'Info desunte', 'Private build' => 'Compilazione privata', 'Special build' => 'Compilazione speciale', }, }, 'FileFlagsMask' => 'Maschera attributi file', 'FileFormat' => { Description => 'Formato file', PrintConv => { 'Ritzaus Bureau NITF version (RBNITF DTD)' => 'Versione Ritzaus Bureau NITF (RBNITF DTD)', }, }, 'FileFunctionFlags' => { PrintConv => { 'Fragmented' => 'Frammentato', }, }, 'FileID' => 'ID file', 'FileIndex' => 'Indice file', 'FileIndex2' => 'Indice file 2', 'FileLength' => 'Dimensioni file', 'FileModifyDate' => 'Data aggiornamento', 'FileName' => 'Nome file', 'FileNameLength' => 'Lunghezza nome file', 'FileNumber' => 'Numero file', 'FileNumberMemory' => { PrintConv => { 'Off' => 'Spento', }, }, 'FileNumberSequence' => { PrintConv => { 'Off' => 'Spento', }, }, 'FileOS' => 'OS del file', 'FileOwner' => 'Proprietario del file', 'FilePermissions' => 'Permessi file', 'FileProfileVersion' => 'Versione profilo file', 'FileSecurityReport' => 'Rapporto sicurezza file', 'FileSequence' => 'Sequenza file', 'FileSetID' => 'ID gruppo file', 'FileSize' => 'Dimensione file', 'FileSizeBytes' => 'Dimensione file in byte', 'FileSource' => { Description => 'Origine file', PrintConv => { 'Digital Camera' => 'Fotocamera digitale', 'Film Scanner' => 'Scanner per pellicola', 'Reflection Print Scanner' => 'Scanner a riflessione', 'Sigma Digital Camera' => 'Fotocamera digitale Sigma', }, }, 'FileSubtype' => 'Sottotipo file', 'FileType' => 'Tipo di file', 'FileURL' => 'URL file', 'FileVersion' => 'Versione file', 'FileVersionNumber' => 'Numero versione file', 'Filename' => 'Nome file', 'Files' => 'File', 'FillFlashAutoReduction' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'FillOrder' => { Description => 'Ordine riempimento', PrintConv => { 'Normal' => 'Normale', 'Reversed' => 'Invertito', }, }, 'FilmMode' => { PrintConv => { 'Nostalgic' => 'Nostalgico', 'Standard (B&W)' => 'Standard (B&N)', 'Standard (color)' => 'Standard (colori)', 'n/a' => 'n/d', }, }, 'FilterEffect' => { Description => 'Effetto Filtro', PrintConv => { 'Green' => 'Verde', 'None' => 'Nessuno', 'Off' => 'Spento', 'Orange' => 'Arancio', 'Red' => 'Rosso', 'Yellow' => 'Giallo', 'n/a' => 'n/d', }, }, 'FilterEffectFaithful' => { PrintConv => { 'n/a' => 'n/d', }, }, 'FilterEffectLandscape' => { PrintConv => { 'n/a' => 'n/d', }, }, 'FilterEffectMonochrome' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Nessuno', 'Orange' => 'Arancio', 'Red' => 'Rosso', 'Yellow' => 'Giallo', 'n/a' => 'n/d', }, }, 'FilterEffectNeutral' => { PrintConv => { 'n/a' => 'n/d', }, }, 'FilterEffectPortrait' => { PrintConv => { 'n/a' => 'n/d', }, }, 'FilterEffectStandard' => { PrintConv => { 'n/a' => 'n/d', }, }, 'FilterEffectUnknown' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Nessuno', 'Red' => 'Rosso', 'n/a' => 'n/d', }, }, 'FilterEffectUserDef1' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Nessuno', 'Red' => 'Rosso', 'n/a' => 'n/d', }, }, 'FilterEffectUserDef2' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Nessuno', 'Red' => 'Rosso', 'n/a' => 'n/d', }, }, 'FilterEffectUserDef3' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Nessuno', 'Red' => 'Rosso', 'n/a' => 'n/d', }, }, 'FinalFrameBlocks' => 'Blocchi frame finali', 'FinderDisplayDuringExposure' => { PrintConv => { 'Off' => 'Spento', }, }, 'FineSharpness' => { PrintConv => { 'Normal' => 'Normale', 'Off' => 'Spento', }, }, 'FirmwareDate' => 'Data firmware', 'FirmwareID' => 'ID firmware', 'FirmwareName' => 'Nome firmware', 'FirmwareRevision' => 'Revisione firmware', 'FirmwareRevision2' => 'Revisione 2 firmware', 'FirmwareVersion' => 'Versione firmware', 'FirstChar' => 'Primo carattere', 'FirstObject' => 'Primo oggetto', 'FirstObjectID' => 'ID primo oggetto', 'FixtureIdentifier' => 'Identificatore d\'installazione', 'Flags' => { PrintConv => { 'FileName' => 'Nome file', 'Text' => 'Testo', }, }, 'Flash' => { PrintConv => { 'Auto, Did not fire' => 'Auto, flash non emesso', 'Auto, Did not fire, Red-eye reduction' => 'Auto, flash non emesso, riduzione occhi rossi', 'Auto, Fired' => 'Auto, flash emesso', 'Auto, Fired, Red-eye reduction' => 'Auto, flash emesso, riduzione occhi rossi', 'Auto, Fired, Red-eye reduction, Return detected' => 'Auto, flash emesso, riduzione occhi rossi, luce di ritorno rilevata', 'Auto, Fired, Red-eye reduction, Return not detected' => 'Auto, flash emesso, riduzione occhi rossi, luce di ritorno non rilevata', 'Auto, Fired, Return detected' => 'Auto, flash emesso, luce di ritorno rilevata', 'Auto, Fired, Return not detected' => 'Auto, flash emesso, luce di ritorno non rilevata', 'Did not fire' => 'Flash non emesso', 'Fired' => 'Emesso', 'Fired, Red-eye reduction' => 'Emesso, riduzione occhi rossi', 'Fired, Red-eye reduction, Return detected' => 'Emesso, riduzione occhi rossi, ritorno rilevato', 'Fired, Red-eye reduction, Return not detected' => 'Emesso, riduzione occhi rossi, ritorno non rilevato', 'Fired, Return detected' => 'Emesso, ritorno rilevato', 'Fired, Return not detected' => 'Emesso, ritorno non rilevato', 'Flash Fired' => 'Flash emesso', 'No Flash' => 'Flash non emesso', 'No flash function' => 'Nessuna funzione flash', 'Off' => 'Flash non emesso, modalità flash forzata', 'Off, Did not fire' => 'Flash non emesso, modalità flash forzata', 'Off, Did not fire, Return not detected' => 'Off, Non emesso. Luce di ritorno non rilevata', 'Off, No flash function' => 'Off, Nessuna funzione flash', 'Off, Red-eye reduction' => 'Disattivato, riduzione occhi rossi', 'On' => 'Flash emesso, modalità flash forzata', 'On, Did not fire' => 'Attivato, non emesso', 'On, Fired' => 'Attivato, emesso', 'On, Red-eye reduction' => 'Attivato, riiduzione occhi rossi', 'On, Red-eye reduction, Return detected' => 'Attivato, riiduzione occhi rossi, ritorno rilevato', 'On, Red-eye reduction, Return not detected' => 'Attivato, riiduzione occhi rossi, ritorno non rilevato', 'On, Return detected' => 'Attivato, ritorno rilevato', 'On, Return not detected' => 'Attivato, ritorno non rilevato', }, }, 'FlashBits' => { PrintConv => { 'External' => 'Esterno', 'Manual' => 'Manuale', }, }, 'FlashButtonFunction' => { PrintConv => { 'ISO speed' => 'Velocità ISO', }, }, 'FlashColorFilter' => { PrintConv => { 'None' => 'Nessuno', 'Red' => 'Rosso', }, }, 'FlashCommanderMode' => { Description => 'Modo Commander', PrintConv => { 'Off' => 'Spento', }, }, 'FlashCompensation' => 'Compensazione flash', 'FlashControl' => 'Controllo flash', 'FlashControlBuilt-in' => { PrintConv => { 'Manual' => 'Manuale', 'Repeating Flash' => 'Ripetizione flash', }, }, 'FlashControlMode' => { Description => 'Modo Controllo Flash', PrintConv => { 'Auto Aperture' => 'Diaframma automatico', 'Manual' => 'Manuale', 'Off' => 'Spento', 'Repeating Flash' => 'Ripetizione flash', }, }, 'FlashDevice' => { PrintConv => { 'External' => 'Esterno', 'None' => 'Nessuno', }, }, 'FlashEnergy' => 'Energia del flash', 'FlashExposureBracketValue' => 'Valore Esposizione a Forcella Flash', 'FlashExposureComp' => 'Compensazione Esposizione Flash', 'FlashExposureIndicator' => { PrintConv => { 'Not Indicated' => 'Non indicato', }, }, 'FlashExposureIndicatorLast' => { PrintConv => { 'Not Indicated' => 'Non indicato', }, }, 'FlashExposureIndicatorNext' => { PrintConv => { 'Not Indicated' => 'Non indicato', }, }, 'FlashExposureLock' => { PrintConv => { 'Off' => 'Spento', }, }, 'FlashFired' => { Description => 'Flash emesso', PrintConv => { 'External' => 'Esterno', 'Yes' => 'Sì', }, }, 'FlashFiring' => 'Emissione flash', 'FlashFirmwareVersion' => 'Versione firmware flash', 'FlashFocalLength' => 'Lunghezza focale flash', 'FlashFunction' => { Description => 'Funzione flash', PrintConv => { 'Manual' => 'Manuale', }, }, 'FlashGNDistance' => { PrintConv => { 'n/a' => 'n/d', }, }, 'FlashGroupAControlMode' => { Description => 'Gruppo A Modo Controllo Flash', PrintConv => { 'Auto Aperture' => 'Diaframma automatico', 'Manual' => 'Manuale', 'Off' => 'Spento', 'Repeating Flash' => 'Ripetizione flash', }, }, 'FlashGroupBControlMode' => { Description => 'Gruppo B Modo Controllo Flash', PrintConv => { 'Auto Aperture' => 'Diaframma automatico', 'Manual' => 'Manuale', 'Off' => 'Spento', 'Repeating Flash' => 'Ripetizione flash', }, }, 'FlashGroupCControlMode' => { Description => 'Gruppo C Modo Controllo Flash', PrintConv => { 'Manual' => 'Manuale', 'Off' => 'Spento', 'Repeating Flash' => 'Ripetizione flash', }, }, 'FlashInfoVersion' => 'Info Versione Flash', 'FlashIntensity' => { PrintConv => { 'Low' => 'Basso', 'Normal' => 'Normale', 'Strong' => 'Forte', }, }, 'FlashLevel' => { Description => 'Livello flash', PrintConv => { 'Low' => 'Basso', 'Normal' => 'Normale', }, }, 'FlashMeteringMode' => { PrintConv => { 'Off' => 'Spento', }, }, 'FlashMode' => { Description => 'Modo flash', PrintConv => { 'Did Not Fire' => 'Non emesso', 'Fired, Commander Mode' => 'Emesso, Modalità Commander', 'Fired, External' => 'Emesso Esterno', 'Fired, Manual' => 'Emesso, Manuale', 'Fired, TTL Mode' => 'Emesso, Modalità TTL', 'Flash Off' => 'Flash spento', 'Normal' => 'Normale', 'Not Ready' => 'Non pronto', 'Off' => 'Spento', 'Off, Did not fire' => 'Spendo, non emesso', 'Off?' => 'Spento?', 'Red eye' => 'Occhi rossi', 'Red-Eye' => 'Occhi rossi', 'Red-Eye?' => 'Occhi rossi?', 'Red-eye' => 'Occhi rossi', 'Red-eye Reduction' => 'Riduzione occhi rossi', 'Red-eye reduction' => 'Riduzione occhi rossi', 'Unknown' => 'Sconosciuta', }, }, 'FlashModel' => { Description => 'Modello flash', PrintConv => { 'None' => 'Nessuno', }, }, 'FlashOptions' => { Description => 'Opzioni flash', PrintConv => { 'Normal' => 'Normale', 'Red-eye reduction' => 'Riduzione occhi rossi', }, }, 'FlashOptions2' => { Description => 'Opzioni 2 flash', PrintConv => { 'Normal' => 'Normale', 'Red-eye reduction' => 'Riduzione occhi rossi', }, }, 'FlashRemoteControl' => { Description => 'Telecomando flash', PrintConv => { 'Off' => 'Spento', }, }, 'FlashReturn' => 'Ritorno flash', 'FlashSerialNumber' => 'Numero di serie del flash', 'FlashSetting' => 'Impostazione flash', 'FlashSource' => { Description => 'Fonte flash', PrintConv => { 'External' => 'Esterno', 'None' => 'Nessuno', }, }, 'FlashStatus' => { Description => 'Stato flash', PrintConv => { 'Off' => 'Spento', 'Off (1)' => 'Spento (1)', }, }, 'FlashSyncSpeed' => { PrintConv => { '1/250 s (auto FP)' => '1/250 s (piano focale auto)', '1/320 s (auto FP)' => '1/320 s (piano focale auto)', }, }, 'FlashSyncSpeedAv' => { PrintConv => { '1/200 Fixed' => '1/200 fisso', '1/200-1/60 Auto' => '1/200-1/60 auto', '1/250 Fixed' => '1/250 fisso', '1/250-1/60 Auto' => '1/250-1/60 auto', '1/300 Fixed' => '1/300 fisso', '1/300-1/60 Auto' => '1/300-1/60 auto', }, }, 'FlashType' => { Description => 'Tipo di flash', PrintConv => { 'External' => 'Esterno', 'None' => 'Nessuno', 'Off' => 'Spento', }, }, 'FlashVersion' => 'Versione del flash', 'FlashWarning' => { PrintConv => { 'Off' => 'Spento', }, }, 'FlashpixVersion' => 'Versione Flashpix', 'FlickerReduce' => { PrintConv => { 'Off' => 'Spento', }, }, 'FlipHorizontal' => { PrintConv => { 'Yes' => 'Sì', }, }, 'FocalLength' => 'Lunghezza focale', 'FocalLength35efl' => 'Lunghezza focale', 'FocalLength35mm' => 'Lunghezza focale 35mm', 'FocalLengthIn35mmFormat' => 'Lunghezza focale in formato 35mm', 'FocalPlaneDiagonal' => 'Diagonale piano focale', 'FocalPlaneResolutionUnit' => { Description => 'Unità risoluzione piano focale', PrintConv => { 'None' => 'Nessuno', 'inches' => 'pollici', }, }, 'FocalPlaneXResolution' => 'Risoluzione X del piano focale', 'FocalPlaneXSize' => 'Dimensione X del piano focale', 'FocalPlaneXUnknown' => 'X del piano focale sconisciuta', 'FocalPlaneYResolution' => 'Risoluzione Y del piano focale', 'FocalPlaneYSize' => 'Dimensione Y del piano focale', 'FocalPlaneYUnknown' => 'Y del piano focale sconisciuta', 'FocalType' => { PrintConv => { 'Fixed' => 'Fisso', }, }, 'Focus' => { PrintConv => { 'Manual' => 'Manuale', }, }, 'FocusContinuous' => { PrintConv => { 'Manual' => 'Manuale', }, }, 'FocusDisplayAIServoAndMF' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'FocusDistance' => 'Distanza fuoco', 'FocusMode' => { Description => 'Modalità messa a fuoco', PrintConv => { 'Manual' => 'Manuale', 'Normal' => 'Normale', 'n/a' => 'n/d', }, }, 'FocusMode2' => { Description => 'Modalità messa a fuoco 2', PrintConv => { 'Manual' => 'Manuale', }, }, 'FocusModeSetting' => { PrintConv => { 'Manual' => 'Manuale', }, }, 'FocusModeSwitch' => { PrintConv => { 'Manual' => 'Manuale', }, }, 'FocusPos' => 'Posizione fuoco', 'FocusPosition' => 'Posizione fuoco', 'FocusRange' => { PrintConv => { 'Manual' => 'Manuale', 'Normal' => 'Normale', 'Not Known' => 'Sconosciuto', 'Very Close' => 'Molto vicino', }, }, 'FocusStatus' => { PrintConv => { 'Failed' => 'Fallito', 'Not confirmed' => 'Non confermato', }, }, 'FocusTrackingLockOn' => { PrintConv => { '1 (Short)' => '1 (Breve)', '1 Short' => '1 breve', 'Normal' => 'Normale', 'Off' => 'Spento', 'Short' => 'Breve', }, }, 'FontFamily' => { Description => 'Tipo di carattere', PrintConv => { 'Swiss' => 'Svizzera', }, }, 'FontFileName' => 'Nome file carattere', 'FontName' => 'Nome carattere', 'FontSize' => 'Dimensioni carattere', 'FontSubfamily' => 'Sottotipo di carattere', 'FontSubfamilyID' => 'ID sottotipo di carattere', 'FontType' => 'Tipo di carattere', 'FontVersion' => 'Versione carattere', 'FontWeight' => 'Peso carattere', 'Fonts' => 'Caratteri', 'For' => 'Per', 'Format' => 'Formato', 'ForwardMatrix1' => 'Matrice predittiva 1', 'ForwardMatrix2' => 'Matrice predittiva 2', 'FrameRate' => 'Frequenza fotogramma', 'FrameSize' => 'Dimensioni fotogrammi', 'FreeByteCounts' => 'Byte disponibili', 'FreeOffsets' => 'Offset disponibili', 'FujiFlashMode' => { PrintConv => { 'External' => 'Esterno', 'Off' => 'Spento', 'Red-eye reduction' => 'Riduzione occhi rossi', }, }, 'FuncButton' => { PrintConv => { 'Flash Off' => 'Flash spento', 'None' => 'Nessuno', 'Preview' => 'Anteprima', 'Virtual Horizon' => 'Orizzonte virtuale', }, }, 'FuncButtonPlusDials' => { PrintConv => { 'Choose Image Area' => 'Seleziona area immagine', 'None' => 'Nessuno', }, }, 'FunctionButton' => { PrintConv => { 'Flash Off' => 'Flash spento', }, }, 'GDALMetadata' => 'Metadati GDAL', 'GDALNoData' => 'Nessun dato GDAL', 'GIFVersion' => 'Versione GIF', 'GPSAltitude' => 'Altitudine GPS', 'GPSAltitudeRef' => { Description => 'Riferimento altitudine GPS', PrintConv => { 'Above Sea Level' => 'Sul livello del mare', 'Below Sea Level' => 'Sotto il livello del mare', }, }, 'GPSAreaInformation' => 'Informazioni area GPS', 'GPSDOP' => 'Precisione misurazione GPS', 'GPSDateStamp' => 'Data GPS', 'GPSDateTime' => 'Ora GPS (orologio atomico)', 'GPSDestBearing' => 'Direzione destinazione GPS', 'GPSDestBearingRef' => { Description => 'Riferimento direzione destinazione GPS', PrintConv => { 'Magnetic North' => 'Nord magnetico', 'True North' => 'Nord geografico', }, }, 'GPSDestDistance' => 'Distanza destinazione GPS', 'GPSDestDistanceRef' => { Description => 'Riferimento distanza destinazione GPS', PrintConv => { 'Kilometers' => 'Chilometri', 'Miles' => 'Miglia', 'Nautical Miles' => 'Miglia nautiche', }, }, 'GPSDestLatitude' => 'Latitudine destinazione GPS', 'GPSDestLatitudeRef' => { Description => 'Riferimento latitudine destinazione GPS', PrintConv => { 'North' => 'Nord', 'South' => 'Sud', }, }, 'GPSDestLongitude' => 'Longitudine destinazione GPS', 'GPSDestLongitudeRef' => { Description => 'Riferimento per longitudine di destinazione', PrintConv => { 'East' => 'Est', 'West' => 'Ovest', }, }, 'GPSDifferential' => { Description => 'Correzione differenziale GPS', PrintConv => { 'Differential Corrected' => 'Correzione differenziale applicata', 'No Correction' => 'Misurazione senza correzione differenziale', }, }, 'GPSHPositioningError' => 'Errore posizionamento orizzontale GPS', 'GPSImgDirection' => 'Direzione di immagine', 'GPSImgDirectionRef' => { Description => 'Riferimento per direzione di immagine', PrintConv => { 'Magnetic North' => 'Nord magnetico', 'True North' => 'Nord geografico', }, }, 'GPSInfo' => 'Puntatore GPS Info IFD', 'GPSLatitude' => 'Latitudine', 'GPSLatitudeRef' => { Description => 'Latitudine Nord o Sud', PrintConv => { 'North' => 'Latitudine Nord', 'South' => 'Latitudine Sud', }, }, 'GPSLongitude' => 'Longitudine', 'GPSLongitudeRef' => { Description => 'Longitudine Est o Ovest', PrintConv => { 'East' => 'Longitudine Est', 'West' => 'Longitudine Ovest', }, }, 'GPSMapDatum' => 'Dati di rilevamento geodetico utilizzati', 'GPSMeasureMode' => { Description => 'Modalità misurazione GPS', PrintConv => { '2-Dimensional Measurement' => 'Misurazione 2D', '3-Dimensional Measurement' => 'Misurazione tridimensionale', }, }, 'GPSProcessingMethod' => 'Nome metodo di elaborazione GPS', 'GPSSatellites' => 'Satelliti GPS usati per la misurazione', 'GPSSpeed' => 'Velocità ricevitore GPS', 'GPSSpeedRef' => { Description => 'Unità velocità', PrintConv => { 'km/h' => 'Chilometri all\'ora', 'knots' => 'Nodi', 'mph' => 'Miglie all\'ora', }, }, 'GPSStatus' => { Description => 'Stato ricevitore GPS', PrintConv => { 'Measurement Active' => 'Misurazione in corso', 'Measurement Void' => 'Interoperatività misurazione', }, }, 'GPSTimeStamp' => 'Ora GPS (orologio atomico)', 'GPSTrack' => 'Direzione di movimento', 'GPSTrackRef' => { Description => 'Riferimento per direzione di movimento', PrintConv => { 'Magnetic North' => 'Direzione magnetica', 'True North' => 'Direzione effettiva', }, }, 'GPSVersionID' => 'Versione tag GPS', 'GTModelType' => { PrintConv => { 'Projected' => 'Proiettato', }, }, 'GainControl' => { Description => 'Controllo di Guadagno', PrintConv => { 'High gain down' => 'Diminuire il guadagno alto', 'High gain up' => 'Aumentare il guadagno alto', 'Low gain down' => 'Diminuire il guadagno basso', 'Low gain up' => 'Aumentare il guadagno basso', 'None' => 'Nessuno', }, }, 'GammaCompensatedValue' => 'Valore di Compensazione Gamma', 'Gapless' => { PrintConv => { 'Yes' => 'Sì', }, }, 'Genre' => { Description => 'Genere', PrintConv => { 'Acapella' => 'A cappella', 'Acid Jazz' => 'Acid jazz', 'Acid Punk' => 'Acid punk', 'Acoustic' => 'Acustica', 'Ambient' => 'Ambientale', 'Avantgarde' => 'Avanguardia', 'Ballad' => 'Ballata', 'Bass' => 'Basso', 'Big Band' => 'Big band', 'Black Metal' => 'Black metal', 'Booty Bass' => 'Basso booty', 'Celtic' => 'Celtica', 'Chamber Music' => 'Musica da camera', 'Chorus' => 'Coro', 'Christian Gangsta' => 'Gangsta cristiano', 'Christian Rap' => 'Rap cristiano', 'Christian Rock' => 'Rock cristiano', 'Classic Rock' => 'Rock classico', 'Classical' => 'Classica', 'Club-House' => 'Club-house', 'Comedy' => 'Commedia', 'Contemporary C' => 'C contemporaneo', 'Country' => 'Nazione', 'Cover' => 'Copertina', 'Dance Hall' => 'Dance hall', 'Death Metal' => 'Death metal', 'Drum & Bass' => 'Batteria e basso', 'Drum Solo' => 'Batteria solo', 'Duet' => 'Duetto', 'Easy Listening' => 'Easy listening', 'Electronic' => 'Elettronica', 'Ethnic' => 'Etnica', 'Euro-House' => 'Euro-house', 'Euro-Techno' => 'Euro-techno', 'Fast Fusion' => 'Fast fusion', 'Folk-Rock' => 'Folk-rock', 'Game' => 'Gioco', 'Gothic' => 'Gotica', 'Gothic Rock' => 'Rock gotico', 'Hard Rock' => 'Hard rock', 'Heavy Metal' => 'Heavy metal', 'Hip-Hop' => 'Hip-hop', 'Humour' => 'Umoristica', 'Instrumental' => 'Strumentale', 'Instrumental Pop' => 'Pop strumentale', 'Instrumental Rock' => 'Rock strumentale', 'Jazz+Funk' => 'Jazz+funk', 'Latin' => 'Latina', 'Lo-Fi' => 'Lo-fi', 'Meditative' => 'Medidativa', 'National Folk' => 'Folklore nazionale', 'Native American' => 'Nativi americani', 'New Age' => 'New age', 'New Wave' => 'New wave', 'Noise' => 'Rumore', 'None' => 'Nessuno', 'Oldies' => 'Vecchi successi', 'Other' => 'Altro', 'Polsk Punk' => 'Punk polacco', 'Pop-Folk' => 'Pop-folk', 'Pop/Funk' => 'Pop/funk', 'Porn Groove' => 'Porn groove', 'Power Ballad' => 'Power ballad', 'Progressive Rock' => 'Progressive rock', 'Psychadelic' => 'Psichedelica', 'Psychedelic Rock' => 'Rock psichedelica', 'Punk Rock' => 'Punk rock', 'Retro' => 'Retrò', 'Rhythmic Soul' => 'Rhythmic soul', 'Rock & Roll' => 'Rock & roll', 'Satire' => 'Satira', 'Slow Jam' => 'Slow jam', 'Slow Rock' => 'Slow rock', 'Sound Clip' => 'Clip sonora', 'Soundtrack' => 'Colonna sonora', 'Southern Rock' => 'Southern rock', 'Speech' => 'Parlato', 'Symphonic Rock' => 'Rock sinfonico', 'Symphony' => 'Sinfonia', 'Techno-Industrial' => 'Techno-industrial', 'Terror' => 'Terrore', 'Thrash Metal' => 'Thrash metal', 'Tribal' => 'Tribale', 'Trip-Hop' => 'Trip-hop', }, }, 'GenreID' => 'ID genere', 'GeoTiffAsciiParams' => 'Parametri Geo Tiff Ascii', 'GeoTiffDirectory' => 'Cartella Geo Tiff', 'GeoTiffDoubleParams' => 'Parametri Geo Tiff Double', 'GeogGeodeticDatum' => { PrintConv => { 'Lisbon' => 'Lisbona', 'Stockholm 1938' => 'Stoccolma 1938', }, }, 'GeogPrimeMeridian' => { PrintConv => { 'Lisbon' => 'Lisbona', 'Rome' => 'Roma', 'Stockholm' => 'Stoccolma', }, }, 'GeographicType' => { PrintConv => { 'Greek' => 'Greco', 'Lisbon' => 'Lisbona', 'Stockholm 1938' => 'Stoccolma 1938', }, }, 'Gradation' => { Description => 'Ottimizzaz.', PrintConv => { 'Normal' => 'Normale', 'n/a' => 'n/d', }, }, 'GrayResponseCurve' => 'Curva di risposta Grigio', 'GrayResponseUnit' => { Description => 'Unità di risposta Grigio', PrintConv => { '1e-05' => '1e-005', '1e-06' => '1e-006', }, }, 'GrayTRC' => 'Curva Riproduzione Tono Grigio', 'GreenMatrixColumn' => 'Colonna della Matrice Verde', 'GreenTRC' => 'Curva Riproduziozne Tono Verde', 'GridDisplay' => { PrintConv => { 'Off' => 'Spento', }, }, 'Grouping' => 'Raggruppamento', 'HCUsage' => { Description => 'Uso HC', PrintConv => { 'Line Art' => 'Line art', }, }, 'HDR' => { Description => 'HDR auto', PrintConv => { 'Off' => 'Disattivata', }, }, 'HDRSetting' => { PrintConv => { 'Off' => 'Spento', }, }, 'HalftoneHints' => 'Suggerimenti mezzi toni', 'HandlerType' => { PrintConv => { 'Text' => 'Testo', }, }, 'Headline' => 'Intestazione', 'HeightResolution' => 'Risoluzione altezza', 'HighISONoiseReduction' => { Description => 'Riduzione Rumore High ISO', PrintConv => { 'Auto' => 'Automatico', 'High' => 'Hi', 'Low' => 'Leggero', 'Normal' => 'Normale', 'Off' => 'Disattivata', 'Strong' => 'Forte', 'n/a' => 'n/d', }, }, 'HighSpeedSync' => { PrintConv => { 'Off' => 'Spento', }, }, 'HighlightTonePriority' => { PrintConv => { 'Enable' => 'Abilita', 'Off' => 'Spento', }, }, 'HometownCity' => { PrintConv => { 'Jerusalem' => 'Gerusalemme', 'Lisbon' => 'Lisbona', 'London' => 'Londra', 'Milan' => 'Milano', 'Prague' => 'Praga', 'Rome' => 'Roma', 'Stockholm' => 'Stoccolma', 'Tehran' => 'Teheran', }, }, 'HometownDST' => { PrintConv => { 'Yes' => 'Sì', }, }, 'HostComputer' => 'Computer ospite', 'HotKey' => { PrintConv => { '(none)' => '(nessuno)', }, }, 'Hue' => { Description => 'Tonalità', PrintConv => { 'None' => 'Nessuno', 'Normal' => 'Normale', }, }, 'HueAdjustment' => 'Regolazione Hue', 'ICCProfile' => 'Profili ICC', 'IDCCreativeStyle' => { PrintConv => { 'Camera Setting' => 'Impostazioni fotocamera', 'Landscape' => 'Orizzontale', 'Light' => 'Chiara', 'Real' => 'Reale', 'Sepia' => 'Seppia', 'Sunset' => 'Tramonto', 'Vivid' => 'Vivace', }, }, 'INGRReserved' => 'Riseervato a INGR', 'IPTC-NAA' => 'Metadati IPTC-NAA', 'IPTCBitsPerSample' => 'Numero di Bits per Campione', 'IPTCImageHeight' => 'Numero di linee', 'IPTCImageRotation' => { Description => 'Rotazione Immagine', PrintConv => { '0' => 'Nessuna rotazione', '180' => 'Rotazione di 180 gradi', '270' => 'Rotazione di 270 gradi', '90' => 'Rotazione di 90 gradi', }, }, 'IPTCImageWidth' => 'Pixels per linea', 'IPTCPictureNumber' => 'Numero Immagine', 'ISO' => 'Sensibilità ISO', 'ISOAuto' => { Description => 'ISO auto', PrintConv => { 'Off' => 'Spento', }, }, 'ISOAutoParameters' => { Description => 'Parametri ISO auto', PrintConv => { 'Fast' => 'Veloce', }, }, 'ISODisplay' => { PrintConv => { 'Off' => 'Spento', }, }, 'ISOExpansion' => { PrintConv => { 'Off' => 'Spento', }, }, 'ISOExpansion2' => { PrintConv => { 'Off' => 'Spento', }, }, 'ISOInfo' => 'Info ISO', 'ISOSelection' => 'Selezione ISO', 'ISOSensitivityStep' => 'Passo sensibilità ISO', 'ISOSetting' => { Description => 'Impostazione ISO', PrintConv => { '100 (Low)' => '100 (basso)', 'Manual' => 'Manuale', 'n/a' => 'n/d', }, }, 'ISOSpeed' => 'Velocità ISO', 'ISOSpeedExpansion' => { PrintConv => { 'Yes' => 'Sì', }, }, 'ISOSpeedIncrements' => { PrintConv => { '1 Stop' => '1 stop', '1/3 Stop' => '1/3 stop', }, }, 'ISOSpeedLatitudeyyy' => 'Velocità ISO - Latitudine yyy', 'ISOSpeedLatitudezzz' => 'Velocità ISO - Latitudine zzz', 'ISOSpeedRange' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'ISOValue' => 'Valore ISO', 'IT8Header' => 'Intestazione IT8', 'Illumination' => { PrintConv => { 'Off' => 'Spento', }, }, 'Image::ExifTool::AIFF::Comment' => 'Commento AIFF', 'Image::ExifTool::EXE::CHM' => 'EXE CHM', 'Image::ExifTool::EXE::ELF' => 'EXE ELF', 'Image::ExifTool::EXE::MachO' => 'EXE MachO', 'Image::ExifTool::EXE::Main' => 'EXE', 'Image::ExifTool::EXE::PEF' => 'EXE PEF', 'Image::ExifTool::EXE::PEString' => 'EXE PEString', 'Image::ExifTool::EXE::PEVersion' => 'EXE PEVersion', 'Image::ExifTool::Exif::Main' => 'Exif', 'Image::ExifTool::FLAC::Main' => 'FLAC', 'Image::ExifTool::Flash::Main' => 'Flash', 'Image::ExifTool::Flash::Video' => 'Video flash', 'Image::ExifTool::FlashPix::Main' => 'FlashPix', 'Image::ExifTool::Font::Main' => 'Carattere', 'Image::ExifTool::Font::Name' => 'Nome carattere', 'Image::ExifTool::Font::PFM' => 'Carattere PFM', 'Image::ExifTool::GPS::Main' => 'GPS', 'Image::ExifTool::ID3::Private' => 'ID3 privato', 'Image::ExifTool::ID3::v1' => 'ID3 v1', 'Image::ExifTool::ID3::v1_Enh' => 'ID3 v1_Enh', 'Image::ExifTool::ID3::v2_2' => 'ID3 v2_2', 'Image::ExifTool::ID3::v2_3' => 'ID3 v2_3', 'Image::ExifTool::ID3::v2_4' => 'ID3 v2_4', 'Image::ExifTool::ITC::Main' => 'ITC', 'Image::ExifTool::JFIF::Main' => 'JFIF', 'Image::ExifTool::Kodak::DcMD' => 'Kodak DcMD', 'Image::ExifTool::Kodak::Free' => 'Kodak Free', 'Image::ExifTool::Kodak::KDC_IFD' => 'KDC_IFD Kodak', 'Image::ExifTool::Kodak::Main' => 'Kodak', 'Image::ExifTool::Microsoft::Stitch' => 'Microsoft Stitch', 'Image::ExifTool::Olympus::AVI' => 'AVI Olympus', 'Image::ExifTool::Olympus::Main' => 'Olympus', 'Image::ExifTool::PSP::Creator' => 'Creatore PSP', 'Image::ExifTool::PSP::Image' => 'Immagine PSP', 'Image::ExifTool::PSP::Main' => 'PSP', 'Image::ExifTool::PanasonicRaw::Main' => 'PanasonicRaw', 'Image::ExifTool::PostScript::Main' => 'PostScript', 'Image::ExifTool::PrintIM::Main' => 'PrintIM', 'Image::ExifTool::Qualcomm::Main' => 'Qualcomm', 'Image::ExifTool::QuickTime::Main' => 'QuickTime', 'Image::ExifTool::RIFF::Main' => 'RIFF', 'Image::ExifTool::Radiance::Main' => 'Radianza', 'Image::ExifTool::Rawzor::Main' => 'Rawzor', 'Image::ExifTool::Real::AudioV3' => 'Real AudioV3', 'Image::ExifTool::Real::AudioV4' => 'Real AudioV4', 'Image::ExifTool::Real::AudioV5' => 'Real AudioV5', 'Image::ExifTool::Ricoh::AVI' => 'AVI Ricoh', 'Image::ExifTool::Ricoh::FaceInfo' => 'FaceInfo Ricoh', 'Image::ExifTool::Ricoh::FirmwareInfo' => 'Info firmware Ricoh', 'Image::ExifTool::Ricoh::ImageInfo' => 'Info immagine Ricoh', 'Image::ExifTool::Ricoh::Main' => 'Ricoh', 'Image::ExifTool::Ricoh::RMETA' => 'RMETA Ricoh', 'Image::ExifTool::Ricoh::SerialInfo' => 'Info seriale Ricoh', 'Image::ExifTool::Ricoh::Subdir' => 'Sotto-cartella Ricoh', 'Image::ExifTool::Ricoh::Text' => 'Testo Ricoh', 'Image::ExifTool::Samsung::INFO' => 'Samsung INFO', 'Image::ExifTool::Samsung::MP4' => 'Samsung MP4', 'Image::ExifTool::Samsung::PictureWizard' => 'Samsung PictureWizard', 'Image::ExifTool::Sanyo::Main' => 'Sanyo', 'Image::ExifTool::Sigma::Main' => 'Sigma', 'ImageAdjustment' => 'Regolazione Immagine', 'ImageAlterationConstraints' => { PrintConv => { 'No Merging' => 'Nessuna fusione', }, }, 'ImageAuthentication' => { PrintConv => { 'Off' => 'Spento', }, }, 'ImageByteCount' => 'Numero di byte dell\'immagine', 'ImageColorIndicator' => { Description => 'Indicazione colore dell\'immagine', PrintConv => { 'Specified Image Color' => 'Colore immagine specificato', 'Unspecified Image Color' => 'Colore immagine non specificato', }, }, 'ImageColorValue' => 'Valore colore dell\'immagine', 'ImageCount' => 'Conteggio Immagini', 'ImageDataDiscard' => { Description => 'Dati scartati dell\'immagine', PrintConv => { 'Flexbits Discarded' => 'Flexbit scartati', 'Full Resolution' => 'Risoluzione completa', 'HighPass Frequency Data Discarded' => 'Dati in frequenza passa-alto scartati', 'Highpass and LowPass Frequency Data Discarded' => 'Dati in frequenza passa-alto e passa-basso scartati', }, }, 'ImageDataSize' => 'Dimensione Dati Immagine', 'ImageDepth' => 'Profondità Immagine', 'ImageDescription' => 'Descrizione Immagine', 'ImageDustOff' => { PrintConv => { 'Off' => 'Spento', }, }, 'ImageEditing' => { PrintConv => { 'None' => 'Nessuno', 'Resized' => 'Ridimensionato', }, }, 'ImageHeight' => 'Altezza immagine', 'ImageHistory' => 'Cronologia immagine', 'ImageID' => 'ID Immagine', 'ImageLayer' => 'Livello immagine', 'ImageNumber' => 'Numero immagine', 'ImageOffset' => 'Offset immagine', 'ImageOptimization' => 'Ottimizzazione Immagine', 'ImageOrientation' => { Description => 'Orientamento Immagine', PrintConv => { 'Landscape' => 'Orizzontale', 'Portrait' => 'Verticale', 'Square' => 'Quadrata', }, }, 'ImageQuality' => { Description => 'Qualità Immagine', PrintConv => { 'Normal' => 'Normale', }, }, 'ImageReview' => { PrintConv => { 'Off' => 'Spento', }, }, 'ImageRotated' => { PrintConv => { 'Yes' => 'Sì', }, }, 'ImageRotation' => { PrintConv => { 'None' => 'Nessuno', }, }, 'ImageSize' => 'Dimensioni immagini', 'ImageSourceData' => 'Dati origine immagine', 'ImageStabilization' => { Description => 'Stabilizzazione Immagine', PrintConv => { 'Off' => 'Spento', 'Off (1)' => 'Spento (1)', 'Off (2)' => 'Spento (2)', 'n/a' => 'n/d', }, }, 'ImageStabilizationSetting' => { PrintConv => { 'Off' => 'Spento', }, }, 'ImageStyle' => { PrintConv => { 'Landscape' => 'Orizzontale', 'Sunset' => 'Tramonto', 'Vivid' => 'Vivace', }, }, 'ImageTone' => { PrintConv => { 'Landscape' => 'Orizzontale', 'Portrait' => 'Verticale', 'Radiant' => 'Radiante', }, }, 'ImageType' => { Description => 'Tipo immagine', PrintConv => { 'Page' => 'Pagina', 'Preview' => 'Anteprima', }, }, 'ImageUniqueID' => 'ID unico immagine', 'ImageVersion' => 'Versione immagine', 'ImageWidth' => 'Larghezza immagine', 'Index' => 'Indice', 'Indexable' => { PrintConv => { 'False' => 'Falso', }, }, 'Indexed' => { Description => 'Indicizzato', PrintConv => { 'Indexed' => 'Indicizzato', 'Not indexed' => 'Non indicizzato', }, }, 'InfraredIlluminator' => { PrintConv => { 'Off' => 'Spento', }, }, 'InitialDisplayEffect' => { PrintConv => { 'Off' => 'Spento', }, }, 'InitialKey' => 'Chiave iniziale', 'InitializedDataSize' => 'Dimensione dati inizializzati', 'InkNames' => 'Nomi inchiostri', 'InkSet' => { Description => 'Gruppo inchiostri', PrintConv => { 'Not CMYK' => 'Non CMYK', }, }, 'Instructions' => 'Istruzioni', 'IntellectualGenre' => 'Genere Intellettuale', 'IntelligentAuto' => { PrintConv => { 'Off' => 'Spento', }, }, 'IntelligentContrast' => { PrintConv => { 'Off' => 'Spento', 'n/a' => 'n/d', }, }, 'IntelligentD-Range' => { PrintConv => { 'Low' => 'Basso', 'Off' => 'Spento', }, }, 'IntelligentExposure' => { PrintConv => { 'Low' => 'Basso', 'Off' => 'Spento', }, }, 'IntelligentResolution' => { PrintConv => { 'Extended' => 'Esteso', 'Low' => 'Basso', 'Off' => 'Spento', }, }, 'IntensityStereo' => { PrintConv => { 'Off' => 'Spento', }, }, 'Interlace' => { Description => 'Interlacciamento', PrintConv => { 'Noninterlaced' => 'Non interlacciato', 'Progressive' => 'Progressivo', }, }, 'InterleavedField' => { PrintConv => { 'Even' => 'Pari', }, }, 'InternalFlash' => { PrintConv => { 'Fired' => 'Flash emesso', 'Manual' => 'Manuale', 'No' => 'Flash non emesso', 'Off' => 'Spento', 'Repeating Flash' => 'Ripetizione flash', }, }, 'InternalName' => 'Nome interno', 'InternetRadioStationName' => 'Nome stazione radio internet', 'InternetRadioStationOwner' => 'Proprietario stazione radio internet', 'InternetRadioStationURL' => 'URL stazione radio internet', 'InteropIndex' => { Description => 'Identificazione interoperatività', PrintConv => { 'R03 - DCF option file (Adobe RGB)' => 'R03 - file opzioni DCF (Adobe RGB)', 'R98 - DCF basic file (sRGB)' => 'R98 - file base DCF (sRGB)', 'THM - DCF thumbnail file' => 'File miniatura THM - DCF', }, }, 'InteropOffset' => 'Etichetta interoperatività', 'InteropVersion' => 'Versione interoperatività', 'InterpretedBy' => 'Interpetrato da', 'InvolvedPeople' => 'Persone coinvolte', 'Italic' => 'Corsivo', 'JFIFVersion' => 'Versione JFIF', 'JPEGACTables' => 'Tabelle JPEGAC', 'JPEGDCTables' => 'Tabelle JPEGDC', 'JPEGLosslessPredictors' => 'Predittori JPEG senza perdita', 'JPEGPointTransforms' => 'Trasformazioni puntiali JPEG', 'JPEGProc' => { Description => 'Proc JPEG', PrintConv => { 'Baseline' => 'Linea di base', 'Lossless' => 'Senza perdita', }, }, 'JPEGQTables' => 'Tabelle JPEGQ', 'JPEGQuality' => { Description => 'Qualità', PrintConv => { 'Extra Fine' => 'Extra fine', 'Standard' => 'Normale', 'n/a' => 'n/d', }, }, 'JPEGRestartInterval' => 'Intervallo riavvio JPEG', 'JPEGTables' => 'Tabelle JPEG', 'JobID' => 'ID processo', 'JobName' => 'Nome processo', 'JobRef' => 'Rif processo', 'JobStatus' => 'Stato processo', 'JpgFromRaw' => 'JPG da raw', 'JpgFromRawLength' => 'Lunghezza JPG da raw', 'JpgFromRawStart' => 'Inizio JPG da raw', 'Keyword' => 'Parola chiave', 'KeywordInfo' => 'Info parola chiave', 'Keywords' => 'Parole chiave', 'Kinds' => 'Tipi', 'LCDIllumination' => { PrintConv => { 'Off' => 'Spento', }, }, 'LCDIlluminationDuringBulb' => { PrintConv => { 'Off' => 'Spento', }, }, 'LCHEditor' => { PrintConv => { 'Off' => 'Spento', }, }, 'Language' => 'Lingua', 'LanguageCode' => { Description => 'Codice lingua', PrintConv => { 'Albanian' => 'Albanese', 'Arabic' => 'Arabo', 'Armenian' => 'Armeno', 'Azeri' => 'Azero', 'Basque' => 'Basco', 'Belarusian' => 'Bielorusso', 'Breton' => 'Bretone', 'Bulgarian' => 'Bulgaro', 'Catalan' => 'Catalano', 'Chinese (Simplified)' => 'Cinese (semplificato)', 'Chinese (Traditional)' => 'Cinese (tradizionale)', 'Croato-Serbian (Latin)' => 'Serbo-croato (alfabeto latino)', 'Czech' => 'Ceco', 'Danish' => 'Danese', 'Dutch' => 'Olandese', 'Dutch (Belgian)' => 'Olandese (Belgio)', 'English (Australian)' => 'Inglese (Australia)', 'English (British)' => 'Inglese (Gran Bretagna)', 'English (Canadian)' => 'Inglese (Canada)', 'English (U.S.)' => 'Inglese (U.S.A.)', 'Estonian' => 'Estone', 'Farsi' => 'Persiano', 'Finnish' => 'Finlandese', 'French' => 'Francese', 'French (Belgian)' => 'Francese (Belgio)', 'French (Canadian)' => 'Francese (Canada)', 'French (Swiss)' => 'Francese (Svizzera)', 'Gaelic' => 'Gaelico', 'Galician' => 'Galiziano', 'Georgian' => 'Georgiano', 'German' => 'Tedesco', 'German (Austrian)' => 'Tedesco (Austria)', 'German (Swiss)' => 'Tedesco (Svizzera)', 'Greek' => 'Greco', 'Hebrew' => 'Ebraico', 'Hungarian' => 'Ungherese', 'Icelandic' => 'Islandese', 'Indonesian' => 'Indonesiano', 'Invariant' => 'Invariante', 'Italian' => 'Italiano', 'Italian (Swiss)' => 'Italiano (Svizzera)', 'Japanese' => 'Giapponese', 'Kazak' => 'Kazako', 'Korean' => 'Coreano', 'Kyrgyz' => 'Kirghizo', 'Latvian' => 'Lettone', 'Lithuanian' => 'Lituano', 'Macedonian' => 'Macedone', 'Mongolian' => 'Mongolo', 'Nepali' => 'Nepalese', 'Neutral' => 'Neutrale', 'Neutral 2' => 'Neutrale 2', 'Norwegian (Bokml)' => 'Norvegese (BokmÃ¥l)', 'Norwegian (Nynorsk)' => 'Norvegese (Nynorsk)', 'Polish' => 'Polacco', 'Portuguese' => 'Portogese', 'Portuguese (Brazilian)' => 'Portoghese (Brasile)', 'Process default' => 'Predefinita del processo', 'Rhaeto-Romanic' => 'Reto-romanico', 'Romanian' => 'Rumeno', 'Russian' => 'Russo', 'Sanskrit' => 'Sanscrito', 'Serbo-Croatian (Cyrillic)' => 'Serbo-croato (cirillico)', 'Slovak' => 'Slovacco', 'Slovenian' => 'Sloveno', 'Spanish (Castilian)' => 'Spagnolo (Castiglia)', 'Spanish (Mexican)' => 'Spagnolo (Messico)', 'Spanish (Modern)' => 'Spagnolo moderno', 'Swedish' => 'Svedese', 'Syriac' => 'Siriaco', 'Turkish' => 'Turco', 'Ukrainian' => 'Ucraino', 'Uzbek' => 'Usbeco', 'Vietnamese' => 'Vietnamita', 'Welsh' => 'Gallese', }, }, 'LanguageIdentifier' => 'Identificativo lingua', 'LanguageList' => 'Lista lingue', 'LanguageName' => 'Nome lingua', 'LateralChromaticAberration' => { PrintConv => { 'Off' => 'Spento', 'n/a' => 'n/d', }, }, 'Layout' => { PrintConv => { 'Tiles' => 'Tasselli', }, }, 'LegalCopyright' => 'Copyright legali', 'LegalTrademarks' => 'Marchi legali', 'Length' => 'Durata', 'Lens' => 'Obiettivo', 'Lens35efl' => 'Obiettivo', 'LensDataVersion' => 'Versione Dati Obiettivo', 'LensFStops' => 'F-Stops Obiettivo', 'LensID' => { Description => 'Obiettivo Utilizzato', PrintConv => { 'Ricoh Lens A16 24-85mm F3.5-5.5' => 'Obiettivo Ricoh A16 24-85mm F3.5-5.5', 'Ricoh Lens P10 28-300mm F3.5-5.6 VC' => 'Obiettivo Ricoh P10 28-300mm F3.5-5.6 VC', 'Ricoh Lens S10 24-70mm F2.5-4.4 VC' => 'Obiettivo Ricoh S10 24-70mm F2.5-4.4 VC', }, }, 'LensIDNumber' => 'Numero ID Obiettivo', 'LensInfo' => 'Informazioni obiettivo', 'LensMake' => 'Marca obiettivo', 'LensModel' => 'Modello obiettivo', 'LensSerialNumber' => 'Numero di serie obiettivo', 'LensShutterLock' => { PrintConv => { 'Off' => 'Spento', }, }, 'LensSpec' => 'Obiettivo', 'LensType' => { Description => 'Tipo obiettivo', PrintConv => { '02 Standard Zoom 5-15mm F2.8-4.5' => '02 Zoom standard 5-15mm F2.8-4.5', '04 Toy Lens Wide 6.3mm F7.1' => '04 Grandangolare toy 6.3mm F7.1', '05 Toy Lens Telephoto 18mm F8' => '05 Teleobiettivo toy 18mm F8', '1.4x Teleconverter' => 'Moltiplicatore di focale 1.4x', 'None' => 'Nessuno', 'Sigma 100-300mm F4 EX (APO (D) or D IF)' => 'Sigma 100-300mm F4 EX (APO (D) o D IF)', }, }, 'LevelGaugePitch' => { PrintConv => { 'Off' => 'Spento', }, }, 'LevelGaugeRoll' => { PrintConv => { 'Off' => 'Spento', }, }, 'LevelOrientation' => { PrintConv => { 'Horizontal (normal)' => 'Orizzontale', 'Rotate 180' => 'Ruota di 180°', 'Rotate 270 CW' => 'Ruota di 270° in senso orario', 'Rotate 90 CW' => 'Ruota di 90° senso orario', }, }, 'License' => 'Licenza', 'LicenseID' => 'ID licenza', 'LicenseType' => { PrintConv => { 'Public Domain' => 'Pubblico dominio', 'Unknown' => 'Sconosciuto', }, }, 'LightCondition' => 'Condizione luce', 'LightSource' => { Description => 'Sorgente di luce', PrintConv => { 'Cloudy' => 'Nuvoloso', 'Cool White Fluorescent' => 'Fluorescente a luce calda', 'Day White Fluorescent' => 'Fluorescente a luce del giorno bianca', 'Daylight' => 'Luce del giorno', 'Daylight Fluorescent' => 'Fluorescente a luce del giorno', 'Evening Sunlight' => 'Luce solare serale', 'Fine Weather' => 'Bel tempo', 'Fluorescent' => 'Fluorescente', 'ISO Studio Tungsten' => 'Tungsteno studio ISO', 'Other' => 'Altra Sorgente di Luce', 'Shade' => 'Ombrato', 'Standard Light A' => 'Luce standard A', 'Standard Light B' => 'Luce standard B', 'Standard Light C' => 'Luce standard C', 'Tungsten (Incandescent)' => 'Tungsteno (luce incandescente)', 'Unknown' => 'Sconosciuto', 'Warm White Fluorescent' => 'Luce fluorescente bianca calda', 'White Fluorescent' => 'Fluorescente bianca', }, }, 'LightSourceSpecial' => { PrintConv => { 'Off' => 'Spento', }, }, 'LightingMode' => { PrintConv => { 'Off' => 'Spento', }, }, 'Lightness' => 'Luce', 'Line' => 'Linea', 'LineOrder' => { PrintConv => { 'Random Y' => 'Casuale Y', }, }, 'LinearResponseLimit' => 'Limite risposta lineare', 'LinearizationTable' => 'Tabella di linearizzazione', 'Lines' => 'Linee', 'LinkAEToAFPoint' => { PrintConv => { 'Off' => 'Spento', }, }, 'LinkerVersion' => 'Versione linker', 'Lit' => { PrintConv => { 'Yes' => 'Sì', }, }, 'LiveViewAFMethod' => { PrintConv => { 'n/a' => 'n/d', }, }, 'LiveViewAFSetting' => { PrintConv => { 'n/a' => 'n/d', }, }, 'LiveViewFocusMode' => { PrintConv => { 'Manual' => 'Manuale', 'n/a' => 'n/d', }, }, 'LiveViewMetering' => { PrintConv => { 'n/a' => 'n/d', }, }, 'LiveViewShooting' => { PrintConv => { 'Off' => 'Spento', }, }, 'LocalDeltaType' => { PrintConv => { 'Absolute' => 'Assoluto', }, }, 'LocalizedCameraModel' => 'Modello fotocamera localizzato', 'Location' => 'Località', 'LocationKind' => 'Tipo località', 'LocationName' => 'Nome località', 'LocationNote' => 'Note località', 'LongDescription' => 'Descrizione estesa', 'LongExposureNoiseReduction' => { Description => 'Espososizione lunga riduzione rumore', PrintConv => { 'Off' => 'Spento', 'Off (65535)' => 'Spento (65535)', 'On' => 'Attivata', 'n/a' => 'n/d', }, }, 'LongExposureNoiseReduction2' => { Description => 'Espososizione lunga riduzione rumore 2', PrintConv => { 'Off' => 'Spento', }, }, 'LongText' => 'Testo lungo', 'LoopStyle' => { PrintConv => { 'Normal' => 'Normale', }, }, 'LuminanceNoiseReduction' => { PrintConv => { 'Low' => 'Basso', 'Off' => 'Spento', }, }, 'Lyricist' => 'Paroliere', 'Lyrics' => 'Testo', 'MCUVersion' => 'Versione MCU', 'MDColorTable' => 'Tabella colori MD', 'MDFileTag' => 'Tag file MD', 'MDFileUnits' => 'Unità file MD', 'MDLabName' => 'Nome lab MD', 'MDPrepDate' => 'Data prep MD', 'MDPrepTime' => 'Ora prep MD', 'MDSampleInfo' => 'Info campione MD', 'MDScalePixel' => 'Scala pixel MD', 'MIEVersion' => 'Versione MIE', 'MIMEType' => 'Tipo mime', 'MIMETypeOfEncapsulatedDocument' => 'Tipo mime del documento incapsulato', 'MSDocumentText' => 'Testo documento MS', 'MSDocumentTextPosition' => 'Posizione testo documento MS', 'MSPropertySetStorage' => 'Gruppo di memoria proprietà MS', 'MSStereo' => { PrintConv => { 'Off' => 'Spento', }, }, 'MachineType' => { Description => 'Tipo macchina', PrintConv => { 'ARM little endian' => 'ARM little-endian', 'Alpha AXP (old)' => 'Alpha AXP (precedente)', 'EFI Byte Code' => 'Byte code EFI', 'Intel 386 or later, and compatibles' => 'Intel 386 o successivo e compatibili', 'MIPS little endian (R4000)' => 'MIPS little-endian (R4000)', 'MIPS little endian WCI v2' => 'MIPS little-endian WCI v2', 'MIPS with FPU' => 'MIPS con FPU', 'MIPS16 with FPU' => 'MIPS16 con FPU', 'Mitsubishi M32R little endian' => 'Mitsubishi M32R little-endian', 'Motorola 68000 series' => 'Serie Motorola 68000', 'PowerPC little endian' => 'PowerPC little-endian', 'PowerPC with floating point support' => 'PowerPC con supporto numeri in in virgola mobile', 'clr pure MSIL' => 'clr con MSIL puro', }, }, 'Macro' => { PrintConv => { 'Manual' => 'Manuale', 'Normal' => 'Normale', 'Off' => 'Spento', 'n/a' => 'n/d', }, }, 'MacroLED' => { PrintConv => { 'Off' => 'Spento', }, }, 'MacroMode' => { PrintConv => { 'Normal' => 'Normale', 'Off' => 'Spento', }, }, 'MagicFilter' => { PrintConv => { 'Fish Eye' => 'Fish-eye', 'Fragmented' => 'Frammentato', 'Gentle Sepia' => 'Seppia leggero', 'Off' => 'Spento', 'Reflection' => 'Riflessione', }, }, 'MainDialExposureComp' => { PrintConv => { 'Off' => 'Spento', }, }, 'Make' => 'Costruttore', 'MakeAndModel' => 'Marca e Modello', 'MakerNote' => 'Dati DNG Privati', 'MakerNoteCanon' => 'Note marca Canon', 'MakerNoteCasio' => 'Note marca Casio', 'MakerNoteCasio2' => 'Note marca Casio 2', 'MakerNoteFujiFilm' => 'Note marca Fuji Film', 'MakerNoteGE' => 'Note marca GE', 'MakerNoteGE2' => 'Note marca GE2', 'MakerNoteHP' => 'Note marca HP', 'MakerNoteHP2' => 'Note marca HP2', 'MakerNoteHP4' => 'Note marca HP4', 'MakerNoteHP6' => 'Note marca HP6', 'MakerNoteHasselblad' => 'Note marca Hasselblad', 'MakerNoteISL' => 'Note marca ISL', 'MakerNoteJVC' => 'Note marca JVC', 'MakerNoteJVCText' => 'Note marca JVC - Testo', 'MakerNoteKodak10' => 'Note marca Kodak 10', 'MakerNoteKodak1a' => 'Note marca Kodak 1a', 'MakerNoteKodak1b' => 'Note marca Kodak 1b', 'MakerNoteKodak2' => 'Note marca Kodak 2', 'MakerNoteKodak3' => 'Note marca Kodak 3', 'MakerNoteKodak4' => 'Note marca Kodak 4', 'MakerNoteKodak5' => 'Note marca Kodak 5', 'MakerNoteKodak6a' => 'Note marca Kodak 6a', 'MakerNoteKodak6b' => 'Note marca Kodak 6b', 'MakerNoteKodak7' => 'Note marca Kodak 7', 'MakerNoteKodak8a' => 'Note marca Kodak 8a', 'MakerNoteKodak8b' => 'Note marca Kodak 8b', 'MakerNoteKodak9' => 'Note marca Kodak 9', 'MakerNoteKodakUnknown' => 'Note marca Kodak sconosciuta', 'MakerNoteKyocera' => 'Note marca Kyocera', 'MakerNoteLeica' => 'Note marca Leica', 'MakerNoteLeica2' => 'Note marca Leica 2', 'MakerNoteLeica3' => 'Note marca Leica 3', 'MakerNoteLeica4' => 'Note marca Leica 4', 'MakerNoteLeica5' => 'Note marca Leica 5', 'MakerNoteLeica6' => 'Note marca Leica 6', 'MakerNoteMinolta' => 'Note marca Minolta', 'MakerNoteMinolta2' => 'Note marca Minolta 2', 'MakerNoteMinolta3' => 'Note marca Minolta 3', 'MakerNoteNikon' => 'Note marca Nikon', 'MakerNoteNikon2' => 'Note marca Nikon 2', 'MakerNoteNikon3' => 'Note marca Nikon 3', 'MakerNoteOlympus' => 'Note marca Olympus', 'MakerNoteOlympus2' => 'Note marca Olympus 2', 'MakerNotePanasonic' => 'Note marca Panasonic', 'MakerNotePanasonic2' => 'Note marca Panasonic 2', 'MakerNotePentax' => 'Note marca Pentax', 'MakerNotePentax2' => 'Note marca Pentax 2', 'MakerNotePentax3' => 'Note marca Pentax 3', 'MakerNotePentax4' => 'Note marca Pentax 4', 'MakerNotePentax5' => 'Note marca Pentax 5', 'MakerNotePentax6' => 'Note marca Pentax 6', 'MakerNotePhaseOne' => 'Note marca Phase One', 'MakerNoteReconyx' => 'Note marca Reconyx', 'MakerNoteRicoh' => 'Note marca Ricoh', 'MakerNoteRicohText' => 'Note marca Ricoh - Testo', 'MakerNoteSafety' => { Description => 'Note marca Safety', PrintConv => { 'Safe' => 'Sicuro', 'Unsafe' => 'Non sicuro', }, }, 'MakerNoteSamsung1a' => 'Note marca Samsung 1a', 'MakerNoteSamsung1b' => 'Note marca Samsung 1b', 'MakerNoteSamsung2' => 'Note marca Samsung 2', 'MakerNoteSanyo' => 'Note marca Sanyo', 'MakerNoteSanyoC4' => 'Note marca Sanyo C4', 'MakerNoteSanyoPatch' => 'Note marca Sanyo Patch', 'MakerNoteSigma' => 'Note marca Sigma', 'MakerNoteSony' => 'Note marca Sony', 'MakerNoteSony2' => 'Note marca Sony 2', 'MakerNoteSony3' => 'Note marca Sony 3', 'MakerNoteSony4' => 'Note marca Sony 4', 'MakerNoteSonyEricsson' => 'Note marca Sony Ericsson', 'MakerNoteSonySRF' => 'Note marca Sony SRF', 'MakerNoteUnknown' => 'Note marca sconosciuta', 'MakerNoteUnknownText' => 'Note marca sconosciuta - Testo', 'MakerNoteVersion' => 'Note Versione Costruttore', 'MakerNotes' => 'Note produttore', 'ManualFlashOutput' => { PrintConv => { 'Low' => 'Basso', 'n/a' => 'n/d', }, }, 'ManualFocusDistance' => 'Messa a Fuoco Manuale', 'MarkerID' => 'ID marker', 'MaskedAreas' => 'Aree mascherate', 'MasterDocumentID' => 'ID Documento Principale', 'Matteing' => 'Opacizzazione', 'MaxAperture' => 'Massima apertura delle lenti', 'MaxApertureAtMaxFocal' => 'Diaframma massimo alla focale massima', 'MaxApertureAtMinFocal' => 'Diaframma massimo alla focale minima', 'MaxApertureValue' => 'Diaframma massimo obiettivo', 'MaxFocalLength' => 'Lunghezza focale massima', 'MaxSampleValue' => 'Massimo valore campioni', 'MeasurementGeometry' => { PrintConv => { '0/45 or 45/0' => '0/45 o 45/0', '0/d or d/0' => '0/d o d/0', }, }, 'MediaBlackPoint' => 'Media Punto Nero', 'MediaType' => { PrintConv => { 'Normal (Music)' => 'Normale (musica)', }, }, 'MediaWhitePoint' => 'Media Punto Bianco', 'MenuButtonDisplayPosition' => { PrintConv => { 'Top' => 'Alto', }, }, 'MenuButtonReturn' => { PrintConv => { 'Top' => 'Alto', }, }, 'MeteringMode' => { Description => 'Modalità misurazione', PrintConv => { 'Average' => 'Media', 'Center-weighted Average' => 'Media centrale ponderata', 'Center-weighted average' => 'Media centrale ponderata', 'Multi-segment' => 'Multi-zona', 'Multi-spot' => 'Multi-punto', 'Other' => 'Altro', 'Partial' => 'Parziale', 'Spot' => 'Punto', 'Unknown' => 'Sconosciuto', }, }, 'MeteringMode2' => { PrintConv => { 'Center-weighted average' => 'Media centrale ponderata', 'Multi-segment' => 'Multi zona', }, }, 'MeteringMode3' => { PrintConv => { 'Center-weighted average' => 'Media centrale ponderata', 'Multi-segment' => 'Multi zona', }, }, 'MeteringTime' => { PrintConv => { 'No Limit' => 'Nessun limite', }, }, 'MinFocalLength' => 'Lunghezza focale minima', 'MinSampleValue' => 'Minimo valore campioni', 'MiniatureFilterOrientation' => { PrintConv => { 'Horizontal' => 'Orizzontale', 'Vertical' => 'Verticale', }, }, 'MinoltaQuality' => { Description => 'Qualità', PrintConv => { 'Normal' => 'Normale', }, }, 'MirrorLockup' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'ModeNumber' => 'Numero modo', 'Model' => 'Nome modello fotocamera', 'Model2' => 'Modello 2', 'ModelReleaseStatus' => { PrintConv => { 'None' => 'Nessuno', 'Not Applicable' => 'Non applicabile', }, }, 'ModelingFlash' => { PrintConv => { 'Off' => 'Spento', }, }, 'ModifiedPictureStyle' => { PrintConv => { 'Landscape' => 'Orizzontale', 'None' => 'Nessuno', 'Portrait' => 'Verticale', }, }, 'ModifiedSaturation' => { PrintConv => { 'Off' => 'Spento', }, }, 'ModifiedSharpnessFreq' => { PrintConv => { 'Low' => 'Basso', 'n/a' => 'n/d', }, }, 'ModifiedToneCurve' => { PrintConv => { 'Manual' => 'Manuale', }, }, 'ModifiedWhiteBalance' => { PrintConv => { 'Cloudy' => 'Nuvoloso', 'Daylight' => 'Luce del giorno', 'Daylight Fluorescent' => 'Fluorescente a luce del giorno', 'Fluorescent' => 'Fluorescente', 'Shade' => 'Ombrato', 'Tungsten' => 'Tungsteno (luce incandescente)', }, }, 'ModifyDate' => 'Data modifica', 'MoireFilter' => { Description => 'Filtro moire', PrintConv => { 'Off' => 'Spento', }, }, 'MonitorDisplayOff' => { PrintConv => { 'Manual' => 'Manuale', }, }, 'MonochromeFilterEffect' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Nessuno', 'Orange' => 'Arancio', 'Red' => 'Rosso', 'Yellow' => 'Giallo', }, }, 'MonochromeLinear' => { PrintConv => { 'Yes' => 'Sì', }, }, 'MonochromeToning' => { PrintConv => { 'None' => 'Nessuno', }, }, 'MonochromeToningEffect' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Nessuno', 'Purple' => 'Porpora', 'Sepia' => 'Seppia', }, }, 'MultiBurstMode' => { PrintConv => { 'Off' => 'Spento', }, }, 'MultiControllerWhileMetering' => { PrintConv => { 'Off' => 'Spento', }, }, 'MultiExposure' => 'Dati Esposizione Multipla', 'MultiExposureAutoGain' => { Description => 'Guadagno Automatico Esposizione Multipla', PrintConv => { 'Off' => 'Spento', }, }, 'MultiExposureMode' => { Description => 'Modo Esposizione Multipla', PrintConv => { 'Off' => 'Spento', }, }, 'MultiExposureShots' => 'Scatti Esposizione Multipla', 'MultiExposureVersion' => 'Versione Dati Esposizione Multipla', 'MultiFrameNoiseReduction' => { Description => 'Riduz. distur. su più fotogr.', PrintConv => { 'None' => 'Nessuno', 'Off' => 'Spento', 'On' => 'Attivata', 'n/a' => 'n/d', }, }, 'MultiFunctionLock' => { PrintConv => { 'Off' => 'Spento', }, }, 'MultiProfiles' => { Description => 'Profili multipli', PrintConv => { 'JBIG2 Profile M' => 'JBIG2 TIFF FX', 'N Layer Profile M' => 'Livello N profilo M', 'Profile C' => 'Profilo C', 'Profile F' => 'Profilo F', 'Profile J' => 'Profilo J', 'Profile L' => 'Profilo L', 'Profile M' => 'Profilo M', 'Profile S' => 'Profilo S', 'Profile T' => 'Profilo T', 'Resolution/Image Width' => 'Risoluzione/larghezza immagine', 'Shared Data' => 'Dati condivisi', }, }, 'MultiSelectorLiveView' => { PrintConv => { 'Not Used' => 'Non usato', 'Reset' => 'Reimposta', 'Zoom On/Off' => 'Zoon sì/no', }, }, 'MultiSelectorPlaybackMode' => { PrintConv => { 'Choose Folder' => 'Seleziona cartella', 'Thumbnail On/Off' => 'Thumbnail sì/no', 'Zoom On/Off' => 'Zoon sì/no', }, }, 'MultiSelectorShootMode' => { PrintConv => { 'Not Used' => 'Non usato', }, }, 'MultipleExposureMode' => { PrintConv => { 'Off' => 'Spento', }, }, 'MultipleExposureSet' => { PrintConv => { 'Off' => 'Spento', }, }, 'MusicCDIdentifier' => 'Identificativo CD musicale', 'MusicianCredits' => 'Info sul musicista', 'Mute' => { PrintConv => { 'Off' => 'Spento', }, }, 'MyColorMode' => { PrintConv => { 'Off' => 'Spento', 'Sepia' => 'Seppia', 'Vivid' => 'Vivace', 'Vivid Blue' => 'Blu vivace', 'Vivid Green' => 'Verde vivace', }, }, 'NDFilter' => { PrintConv => { 'Off' => 'Spento', 'n/a' => 'n/d', }, }, 'NEFCompression' => { Description => 'Compressione RAW', PrintConv => { 'Lossless' => 'Senza perdita', 'Uncompressed' => 'Non compresso', }, }, 'Name' => 'Nome', 'NamedColor2' => 'Colore Chiamato 2', 'NativeDisplayInfo' => 'Info Display Nativo', 'NeutralDensityFilter' => { PrintConv => { 'Off' => 'Spento', }, }, 'NikonCaptureData' => 'Dati Nikon Capture', 'NikonCaptureVersion' => 'Versione Nikon Capture', 'NoMemoryCard' => 'Scheda di memoria assente', 'Noise' => 'Rumore', 'NoiseFilter' => { Description => 'Filtro rumore', PrintConv => { 'Low' => 'Basso', 'Off' => 'Spento', 'n/a' => 'n/d', }, }, 'NoiseProfile' => 'Profilo rumore', 'NoiseReduction' => { Description => 'Riduzione rumore', PrintConv => { 'Low' => 'Basso', 'Low (-1)' => 'Basso (-1)', 'Noise Filter' => 'Filtro rumore', 'Noise Reduction' => 'Riduzione rumore', 'Normal' => 'Normale', 'Off' => 'Spento', 'Strong' => 'Forte', 'n/a' => 'n/d', }, }, 'NoiseReduction2' => { Description => 'Riduzione rumore 2', PrintConv => { 'Noise Filter' => 'Filtro rumore', 'Noise Reduction' => 'Riduzione rumore', }, }, 'NoiseReductionApplied' => 'Riduzione rumore applicata', 'NoiseReductionIntensity' => 'Intensità riduzione rumore', 'NoiseReductionMethod' => { Description => 'Metodo riduzione rumore', PrintConv => { 'Faster' => 'Più veloce', }, }, 'NoiseReductionMode' => { Description => 'Modo riduzione rumore', PrintConv => { 'Off' => 'Spento', }, }, 'NoiseReductionValue' => 'Valore riduzione rumore', 'Notes' => 'Note', 'Now' => 'Adesso', 'NumChannels' => 'Numero canali', 'NumSampleFrames' => 'Numero fotogrammi campionamento', 'NumberOfFocusPoints' => { PrintConv => { '11 Points' => '11 punti', }, }, 'NumberofInks' => 'Numero di inchiostri', 'OKButton' => { PrintConv => { 'Not Used' => 'Non usato', 'Off' => 'Spento', }, }, 'OPIProxy' => { Description => 'Proxy OPI', PrintConv => { 'Higher resolution image does not exist' => 'Immagine a risoluzione maggiore non esistente', 'Higher resolution image exists' => 'Immagine a risoluzione maggiore esistente', }, }, 'OSVersion' => 'Versione OS', 'Object' => 'Oggetto', 'ObjectAttributeReference' => 'Genere intellettuale', 'ObjectCycle' => { Description => 'Ciclo oggetto', PrintConv => { 'Both Morning and Evening' => 'Entrambi', 'Evening' => 'Sera', 'Morning' => 'Mattino', }, }, 'ObjectFileType' => { Description => 'Tipo file oggetto', PrintConv => { 'Core file' => 'File core', 'Demand paged executable' => 'Eseguibile paginato a richiesta', 'Dynamic link editor' => 'Editor con collegamenti dinamici', 'Dynamic link library' => 'Libreria a collegamento dinamico', 'Dynamically bound bundle' => 'Pacchetto incorporato dinamicamente', 'Dynamically bound shared library' => 'Libreria condivisa collegata dinamicamente', 'Executable application' => 'Applicazione eseguibile', 'Executable file' => 'File eseguibile', 'Fixed VM shared library' => 'Libreria fissa VM condivisa', 'Font' => 'Carattere', 'None' => 'Nessuno', 'Preloaded executable' => 'Eseguibile precaricato', 'Relocatable file' => 'File rilocabile', 'Relocatable object' => 'Oggetto rilocabile', 'Shared library stub for static linking' => 'Stub libreria condivisa per il collegamenti statici', 'Shared object file' => 'File con oggetti condivisi', 'Static library' => 'Libreria statica', 'Unknown' => 'Sconosciuto', }, }, 'ObjectName' => 'Titolo', 'ObjectPreviewFileFormat' => { PrintConv => { 'Ritzaus Bureau NITF version (RBNITF DTD)' => 'Versione Ritzaus Bureau NITF (RBNITF DTD)', }, }, 'ObjectTypeReference' => 'Riferimento Tipo Oggetto', 'OldSubfileType' => { Description => 'Vecchio tipo sotto-file', PrintConv => { 'Full-resolution image' => 'Immagine con risoluzione originale', 'Reduced-resolution image' => 'Immagine a risoluzione ridotta', 'Single page of multi-page image' => 'Singola pagina di un\'immagine multi-pagina', }, }, 'OneTouchWB' => { PrintConv => { 'Off' => 'Spento', }, }, 'OpEndPic' => 'Fine immagine', 'OpcodeList1' => 'Lista opcode 1', 'OpcodeList2' => 'Lista opcode 2', 'OpcodeList3' => 'Lista opcode 3', 'OpticalZoomMode' => { PrintConv => { 'Extended' => 'Esteso', }, }, 'OpticalZoomOn' => { PrintConv => { 'Off' => 'Spento', }, }, 'Opto-ElectricConvFactor' => 'Fattore di conversione optoelettrica', 'Orientation' => { Description => 'Orientamento', PrintConv => { 'Horizontal (normal)' => 'Orizzontale (normale)', 'Mirror horizontal' => 'Rifletti orizzontalmente', 'Mirror horizontal and rotate 270 CW' => 'Rifletti orizzontalmente e ruota di 270° in senso orario', 'Mirror horizontal and rotate 90 CW' => 'Rifletti orizzontalmente e ruota di 90° in senso orario', 'Mirror vertical' => 'Rifletti verticalmente', 'Rotate 180' => 'Ruota di 180°', 'Rotate 270 CW' => 'Ruota di 270° in senso orario', 'Rotate 90 CW' => 'Ruota di 90° senso orario', 'Tiled' => 'Tassellato', }, }, 'Origin' => 'Origine', 'OriginCode' => 'Codice origine', 'OriginPlatform' => { Description => 'Piattaforma origine', PrintConv => { 'Print' => 'Stampa', }, }, 'OriginalAlbum' => 'Album originale', 'OriginalAlbumTitle' => 'Titolo album originale', 'OriginalArtist' => 'Artista originale', 'OriginalFileName' => 'Nome file originale', 'OriginalLyricist' => 'Paroliere originale', 'OriginalMedia' => { PrintConv => { 'False' => 'Falso', }, }, 'OriginalRawFileData' => 'Dati file raw originale', 'OriginalRawFileDigest' => 'Sommario file raw originale', 'OriginalRawFileName' => 'Nome file raw originale', 'OriginalReleaseTime' => 'Ora di rilascio originale', 'OriginalReleaseYear' => 'Anno di rilascio originale', 'OriginalTransmissionReference' => 'ID Lavoro', 'OriginatingProgram' => 'Programma d\'origine', 'OtherCodecDescription' => 'Descrizione altro codec', 'OtherCodecName' => 'Nome altro codec', 'OtherImageLength' => 'Altra lunghezza immagine', 'OtherImageStart' => 'Altro inizio immagine', 'OwnerID' => 'ID proprietario', 'OwnerName' => 'Nome proprietario', 'PEFVersion' => 'Versione PEF', 'PEType' => 'Tipo PE', 'PackingMethod' => { PrintConv => { 'Fast' => 'Veloce', 'Fastest' => 'Massimamente veloce', 'Normal' => 'Normale', }, }, 'PageName' => 'Nome pagina', 'PageNumber' => 'Numero pagina', 'PanOrientation' => { PrintConv => { '[unused]' => '[non usato]', }, }, 'PanasonicRawVersion' => 'Versione raw Panasonic', 'PanasonicTitle' => 'Titolo Panasonic', 'PanasonicTitle2' => 'Titolo Panasonic 2', 'PanoramaSize3D' => { Description => 'Dimensione panomara 3D', PrintConv => { 'Wide' => 'Ampio', 'n/a' => 'n/d', }, }, 'PartOfSet' => 'Parte del gruppo', 'PaymentURL' => 'URL pagamento', 'PeakValue' => 'Valore di picco', 'PerformerSortOrder' => 'Ordinamento interprete', 'PeripheralLighting' => { PrintConv => { 'Off' => 'Spento', }, }, 'PeripheralLightingSetting' => { PrintConv => { 'Off' => 'Spento', }, }, 'PhaseDetectAF' => { PrintConv => { 'Off' => 'Spento', }, }, 'PhotoEffect' => { PrintConv => { 'Off' => 'Spento', 'Sepia' => 'Seppia', 'Vivid' => 'Vivace', }, }, 'PhotoEffects' => { PrintConv => { 'Off' => 'Spento', }, }, 'PhotoEffectsType' => { PrintConv => { 'None' => 'Nessuno', 'Sepia' => 'Seppia', 'Tinted' => 'Tinteggiato', }, }, 'PhotoInfoPlayback' => { PrintConv => { 'Off' => 'Spento', }, }, 'PhotometricInterpretation' => { Description => 'Interpretazione fotometrica', PrintConv => { 'BlackIsZero' => 'Nero è zero', 'Color Filter Array' => 'Array filtro colore', 'Linear Raw' => 'Raw lineare', 'Pixar LogL' => 'Pixar LogLuv', 'Pixar LogLuv' => 'Pixar LogL', 'RGB Palette' => 'Tavolozza RGB', 'Transparency Mask' => 'Maschera trasparenza', 'WhiteIsZero' => 'Bianco è zero', }, }, 'PhotoshopFormat' => { PrintConv => { 'Progressive' => 'Progressivo', }, }, 'Picture' => 'Immagine', 'PictureControl' => { PrintConv => { 'Off' => 'Spento', }, }, 'PictureControlActive' => { PrintConv => { 'Off' => 'Spento', }, }, 'PictureControlAdjust' => { PrintConv => { 'Default Settings' => 'Impostazioni Predefinite', 'Full Control' => 'Controllo completo', 'Quick Adjust' => 'Regolazione rapida', }, }, 'PictureDescription' => 'Descrizione immagine', 'PictureEffect' => { PrintConv => { 'Off' => 'Spento', 'Posterization' => 'Posterizzazione', 'Posterization B/W' => 'Posterizzazione B&N', 'Retro Photo' => 'Foto retrò', }, }, 'PictureFinish' => { PrintConv => { 'Evening Scene' => 'Scena serale', 'Portrait' => 'Verticale', }, }, 'PictureFormat' => 'Formato immagine', 'PictureMIMEType' => 'MIME type immagine', 'PictureMode' => { PrintConv => { '1/2 EV steps' => 'Step 1/2 EV', '1/3 EV steps' => 'Step 1/3 EV', 'Aperture-priority AE' => 'Priorità diaframma', 'Fireworks' => 'Fuochi artificiali', 'Fisheye' => 'Fish-eye', 'Flower' => 'Fiore', 'Forest' => 'Foresta', 'Green' => 'Verde', 'Kids' => 'Bambini', 'Landscape' => 'Orizzontale', 'Manual' => 'Manuale', 'No Flash' => 'No flash', 'Portrait' => 'Verticale', 'Program' => 'Programma', 'Program (HyP)' => 'Programma (HyP)', 'Program AE' => 'Programma AE', 'Purple' => 'Porpora', 'Quick Macro' => 'Macro veloce', 'Red' => 'Rosso', 'Sepia' => 'Seppia', 'Shutter speed priority AE' => 'Priorità otturatore AE', 'Sunset' => 'Tramonto', 'Text' => 'Testo', 'Vivid' => 'Vivace', }, }, 'PictureMode2' => { PrintConv => { 'Aperture Priority' => 'Priorità diaframma', 'Manual' => 'Manuale', 'Program AE' => 'Programma AE', 'Scene Mode' => 'Modo scena', 'Shutter Speed Priority' => 'Priorità otturatore', }, }, 'PictureModeBWFilter' => { PrintConv => { 'Green' => 'Verde', 'Orange' => 'Arancio', 'Red' => 'Rosso', 'Yellow' => 'Giallo', 'n/a' => 'n/d', }, }, 'PictureModeEffect' => { PrintConv => { 'Low' => 'Basso', 'n/a' => 'n/d', }, }, 'PictureModeTone' => { PrintConv => { 'Green' => 'Verde', 'Purple' => 'Porpora', 'Sepia' => 'Seppia', 'n/a' => 'n/d', }, }, 'PictureStyle' => { PrintConv => { 'Landscape' => 'Orizzontale', 'None' => 'Nessuno', 'Portrait' => 'Verticale', }, }, 'PictureType' => { Description => 'Tipo immagine', PrintConv => { '32x32 PNG Icon' => 'Icona PNG 32x32', 'Artist' => 'Artista', 'Back Cover' => 'Retrocopertina', 'Band Logo' => 'Logo band', 'Bright(ly) Colored Fish' => 'Pesci dai vivaci colori', 'Capture from Movie or Video' => 'Acquisizione da film o video', 'Composer' => 'Compositore', 'Conductor' => 'Direttore d\'orchestra', 'Front Cover' => 'Copertina', 'Illustration' => 'Illustrazione', 'Lead Artist' => 'Artista principale', 'Leaflet' => 'Volantino', 'Lyricist' => 'Paroliere', 'Other' => 'Altro', 'Other Icon' => 'Altra icona', 'Performance' => 'Interpretazione', 'Publisher Logo' => 'Logo editore', 'Recording Session' => 'Sessione registrazione', 'Recording Studio or Location' => 'Studio/luogo registrazione', }, }, 'PictureWizardMode' => { PrintConv => { 'Forest' => 'Foresta', 'Landscape' => 'Orizzontale', 'Retro' => 'Retrò', 'Vivid' => 'Vivace', 'n/a' => 'n/d', }, }, 'PixelFormat' => { Description => 'Formato pixel', PrintConv => { '112-bit 6 Channels Alpha' => '112-bit 6 canali trasparenza', '112-bit 7 Channels' => '112-bit 7 canali', '128-bit 7 Channels Alpha' => '128-bit 7 canali trasparenza', '128-bit 8 Channels' => '128-bit 8 canali', '128-bit PRGBA Float' => '128-bit PRGBA virgola mobile', '128-bit RGB Float' => '128-bit RGB virgola mobile', '128-bit RGBA Fixed Point' => '128-bit RGBA virgola fissa', '128-bit RGBA Float' => '128-bit RGBA virgola mobile', '144-bit 8 Channels Alpha' => '144-bit 8 canali trasparenza', '16-bit Gray' => '16-bit grigio', '16-bit Gray Half' => '16-bit grigio metà', '24-bit 3 Channels' => '24-bit 3 canali', '32-bit 3 Channels Alpha' => '32-bit 3 canali trasparenza', '32-bit 4 Channels' => '32-bit 4 canali', '32-bit Gray Fixed Point' => '32-bit punto grigio virgola fissa', '32-bit Gray Float' => '32-bit punto grigio virgola mobile', '40-bit 4 Channels Alpha' => '40-bit 4 canali trasparenza', '40-bit 5 Channels' => '40-bit 5 canali', '40-bit CMYK Alpha' => '40-bit CMYK trasparenza', '48-bit 3 Channels' => '48-bit 3 canali', '48-bit 5 Channels Alpha' => '48-bit 5 canali trasparenza', '48-bit 6 Channels' => '48-bit 6 canali', '48-bit RGB Fixed Point' => '48-bit RGB virgola fissa', '48-bit RGB Half' => '48-bit RGB metà', '56-bit 6 Channels Alpha' => '56-bit 6 canali trasparenza', '56-bit 7 Channels' => '56-bit 7 canali', '64-bit 3 Channels Alpha' => '64-bit 3 canali trasparenza', '64-bit 4 Channels' => '64-bit 4 canali', '64-bit 7 Channels Alpha' => '64-bit 7 canali trasparenza', '64-bit 8 Channels' => '64-bit 8 canali', '64-bit RGBA Fixed Point' => '64-bit RGBA virgola fissa', '64-bit RGBA Half' => '64-bit RGBA mezzi toni', '72-bit 8 Channels Alpha' => '72-bit 8 canali trasparenza', '8-bit Gray' => '8-bit grigio', '80-bit 4 Channels Alpha' => '80-bit 4 canali trasparenza', '80-bit 5 Channels' => '80-bit 5 canali', '80-bit CMYK Alpha' => '80-bit CMYK trasparenza', '96-bit 5 Channels Alpha' => '96-bit 5 canali trasparenza', '96-bit 6 Channels' => '96-bit 6 canali', '96-bit RGB Fixed Point' => '96-bit RGB virgola fissa', 'Black & White' => 'Bianco e nero', }, }, 'PixelIntensityRange' => 'Intervallo intensità pixel', 'PixelMagicJBIGOptions' => 'Opzioni Pixel Magic JBIG', 'PixelScale' => 'Scala pixel', 'PixelUnits' => { PrintConv => { 'Unknown' => 'Sconosciuto', }, }, 'PlanarConfiguration' => { Description => 'Configurazione planare', PrintConv => { 'Chunky' => 'Spezzettato', 'Planar' => 'Planare', }, }, 'PlayCounter' => 'Conteggio esecuzioni', 'PlayGap' => { PrintConv => { 'No Gap' => 'Nessun salto', }, }, 'PlaylistDelay' => 'Attesa playlist', 'PortraitRefiner' => { PrintConv => { 'Off' => 'Spento', }, }, 'Position' => 'Posizione', 'PostScriptFontName' => 'Nome carattere PostScript', 'PostprocessingFunction' => 'Funzione post-processamento', 'PowerSource' => 'Fonte alimentazione', 'PowerUpTime' => 'Ora accensione', 'Predictor' => { Description => 'Predittore', PrintConv => { 'Horizontal differencing' => 'Differenziazione orizzontale', 'None' => 'Nessuno', }, }, 'PredictorColumns' => 'Colonne predittore', 'PredictorConstants' => 'Costanti predittore', 'PredictorRows' => 'Righe predittore', 'PreferredFamily' => 'Famiglia preferita', 'PreferredSubfamily' => 'Sotto-famiglia preferita', 'PreferredVolume' => 'Volume preferito', 'Prefs' => 'Preferenze', 'PresetWhiteBalance' => { PrintConv => { 'Camera Setting' => 'Impostazioni fotocamera', 'Fluorescent' => 'Fluorescente', 'Shade' => 'Ombrato', }, }, 'PrevFileName' => 'Nome file precedente', 'PrevSize' => 'Dimensione precedente', 'PrevUID' => 'UID precedente', 'Preview' => 'Anteprima', 'Preview0' => 'Anteprima 0 ', 'Preview1' => 'Anteprima 1 ', 'Preview2' => 'Anteprima 2', 'PreviewApplicationName' => 'Nome applicazione anteprima ', 'PreviewApplicationVersion' => 'Versione applicazione anteprima ', 'PreviewButton' => { Description => 'Pulsante anteprima', PrintConv => { 'Flash Off' => 'Flash spento', 'None' => 'Nessuno', 'Preview' => 'Anteprima', 'Virtual Horizon' => 'Orizzonte virtuale', }, }, 'PreviewButtonPlusDials' => { PrintConv => { 'Choose Image Area' => 'Seleziona area immagine', 'None' => 'Nessuno', }, }, 'PreviewColorSpace' => { Description => 'Spazio colore anteprima', PrintConv => { 'Gray Gamma 2.2' => 'Gamma grigio 2.2', 'Unknown' => 'Sconosciuto', }, }, 'PreviewDate' => 'Data anteprima', 'PreviewDateTime' => 'Data ora anteprima', 'PreviewDuration' => 'Durata anteprima', 'PreviewIFD' => 'Anteprima Puntatore IFD', 'PreviewImage' => 'Immagine anteprima', 'PreviewImageBorders' => 'Bordi immagine anteprima', 'PreviewImageData' => 'Altezza immagine anteprima', 'PreviewImageHeight' => 'Altezza immagine anteprima', 'PreviewImageLength' => 'Lunghezza immagine anteprima', 'PreviewImageName' => 'Nome immagine anteprima', 'PreviewImageSize' => 'Dimensioni immagine anteprima', 'PreviewImageStart' => 'Inizio immagine anteprima', 'PreviewImageType' => 'Tipo immagine anteprima', 'PreviewImageValid' => { Description => 'Immagine anteprima valida', PrintConv => { 'Yes' => 'Sì', }, }, 'PreviewImageWidth' => 'Larghezza immagine anteprima', 'PreviewInfo' => 'Info anteprima', 'PreviewQuality' => { Description => 'Qualtià anteprima', PrintConv => { 'Normal' => 'Normale', }, }, 'PreviewSettingsDigest' => 'Sommario impostazioni anteprima', 'PreviewSettingsName' => 'Nome impostazioni anteprima', 'PrimaryAFPoint' => { PrintConv => { '(none)' => '(nessuno)', 'Bottom' => 'Basso', 'C6 (Center)' => 'C6 (Centro)', 'Center' => 'Centro', 'Far Left' => 'Tutto a sinistra', 'Far Right' => 'Tutto a destra', 'Lower-left' => 'Inferiore sinistro', 'Lower-right' => 'Inferiore destro', 'Mid-left' => 'Centro/sinistra', 'Mid-right' => 'Centro/destra', 'Top' => 'Alto', 'Upper-left' => 'Superiore sinistro', 'Upper-right' => 'Superiore destro', }, }, 'PrimaryChromaticities' => 'Cromatismo dei colori primari', 'PrimaryPlatform' => 'Piattaforma primaria', 'PrintIM' => 'Stampa Image Matching', 'PrintIMVersion' => 'Versione PrintIM', 'PrintPriority' => 'Priorità stampa', 'PrintQuality' => 'Qualità stampa', 'PrintScale' => 'Scala stampa', 'PrinterName' => 'Nome stampante', 'Priority' => 'Priorità', 'PrivateBuild' => 'Compilazione privata', 'ProcessingSoftware' => 'Software di elaborazione', 'ProducedNotice' => 'Note prodotte', 'Product' => 'Prodotto', 'ProductDescription' => 'Descrizione prodotto', 'ProductID' => 'ID prodotto', 'ProductName' => 'Nome prodotto', 'ProductVersion' => 'Versione prodotto', 'ProductVersionNumber' => 'Numero di versione prodotto', 'Profession' => 'Professione', 'Profile' => 'Profilo', 'ProfileAndLevel' => 'Profilo e livello', 'ProfileCMMType' => 'Tipo profilo CMM', 'ProfileCalibrationSig' => 'Segn calibrazione profilo', 'ProfileClass' => { Description => 'Classe profilo', PrintConv => { 'Abstract Profile' => 'Profilo Astratto', 'ColorSpace Conversion Profile' => 'Profilo Conversione Spazio Colore', 'DeviceLink Profile' => 'Profilo Dispositivo di Collegamento', 'Display Device Profile' => 'Profilo Dispositivo Visualizzazione', 'Input Device Profile' => 'Profilo dispositivo di Input', 'NamedColor Profile' => 'Profilo Colore Chiamato', 'Nikon Input Device Profile (NON-STANDARD!)' => 'Profilo Nikon ("nkpf")', 'Output Device Profile' => 'Profilo Dispositivo Output', }, }, 'ProfileConnectionSpace' => 'Spazio connessione profilo', 'ProfileCopyright' => 'Copyright profilo', 'ProfileCreator' => 'Autore profilo', 'ProfileDateTime' => 'Data/ora profilo', 'ProfileDescription' => 'Descrizione del Profilo', 'ProfileDescriptionML' => 'Descrizione profilo multilinguaggio.', 'ProfileEmbedPolicy' => { Description => 'Politica incorporamento profilo', PrintConv => { 'Allow Copying' => 'Permetti la copia', 'Embed if Used' => 'Incorpora se usato', 'Never Embed' => 'Non incorporare mai', 'No Restrictions' => 'Nessuna restrizione', }, }, 'ProfileFileSignature' => 'Firma file profilo', 'ProfileID' => { Description => 'ID profilo', PrintConv => { 'Not Specified' => 'Non specificato', }, }, 'ProfileName' => 'Nome profilo', 'ProfileSequenceDesc' => 'Descrizione della Sequenza del Profilo', 'ProfileType' => { Description => 'Tipo profilo', PrintConv => { 'Unspecified' => 'Non specificato', }, }, 'ProfileVersion' => 'Versione profilo', 'ProgID' => 'ID programma', 'ProgramISO' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ProgramKind' => 'Tipo di programma', 'ProgramLine' => { PrintConv => { 'Normal' => 'Normale', }, }, 'ProgramMode' => { Description => 'Modo programma', PrintConv => { 'None' => 'Nessuno', 'Portrait' => 'Verticale', 'Sunset' => 'Tramonto', 'Text' => 'Testo', }, }, 'ProgramName' => 'Nome programma', 'ProgramNumber' => 'Numero programma', 'ProgramVersion' => 'Versione programma', 'ProgrammingGroupKind' => 'Tipo gruppo programmazione', 'ProgrammingGroupTitle' => 'Titolo gruppo programmazione', 'ProgressiveScans' => 'Scansioni progressive', 'Project' => 'Progetto', 'ProjectName' => 'Nome progetto', 'ProjectNumber' => 'Numero progetto', 'ProjectRef' => 'Rif progetto', 'ProjectSet' => 'Set progetto', 'ProjectedCSType' => { Description => 'Tipo CS proiettato', PrintConv => { 'ETRS89 Poland CS2000 zone 5' => 'ETRS89 Poland CS2000 zona 5', 'ETRS89 Poland CS2000 zone 7' => 'ETRS89 Poland CS2000 zona 7', 'ETRS89 Poland CS2000 zone 8' => 'ETRS89 Poland CS2000 zona 8', 'PSAD56 UTM zone 17S' => 'PSAD56 UTM zona 17S', 'PSAD56 UTM zone 18N' => 'PSAD56 UTM zona 18N', 'PSAD56 UTM zone 18S' => 'PSAD56 UTM zona 18S', 'PSAD56 UTM zone 19N' => 'PSAD56 UTM zona 19N', 'PSAD56 UTM zone 19S' => 'PSAD56 UTM zona 19S', 'PSAD56 UTM zone 20N' => 'PSAD56 UTM zona 20N', 'PSAD56 UTM zone 20S' => 'PSAD56 UTM zona 20S', 'PSAD56 UTM zone 21N' => 'PSAD56 UTM zona 21N', 'Pulkovo Gauss zone 10' => 'Pulkovo Gauss zona 10', 'Pulkovo Gauss zone 11' => 'Pulkovo Gauss zona 11', 'Pulkovo Gauss zone 12' => 'Pulkovo Gauss zona 12', 'Pulkovo Gauss zone 13' => 'Pulkovo Gauss zona 13', 'Pulkovo Gauss zone 14' => 'Pulkovo Gauss zona 14', 'Pulkovo Gauss zone 15' => 'Pulkovo Gauss zona 15', 'Pulkovo Gauss zone 16' => 'Pulkovo Gauss zona 16', 'Pulkovo Gauss zone 17' => 'Pulkovo Gauss zona 17', 'Pulkovo Gauss zone 18' => 'Pulkovo Gauss zona 18', 'Pulkovo Gauss zone 19' => 'Pulkovo Gauss zona 19', 'Pulkovo Gauss zone 20' => 'Pulkovo Gauss zona 20', 'Pulkovo Gauss zone 21' => 'Pulkovo Gauss zona 21', 'Pulkovo Gauss zone 22' => 'Pulkovo Gauss zona 22', 'Pulkovo Gauss zone 23' => 'Pulkovo Gauss zona 23', 'Pulkovo Gauss zone 24' => 'Pulkovo Gauss zona 24', 'Pulkovo Gauss zone 25' => 'Pulkovo Gauss zona 25', 'Pulkovo Gauss zone 26' => 'Pulkovo Gauss zona 26', 'Pulkovo Gauss zone 27' => 'Pulkovo Gauss zona 27', 'Pulkovo Gauss zone 28' => 'Pulkovo Gauss zona 28', 'Pulkovo Gauss zone 29' => 'Pulkovo Gauss zona 29', 'Pulkovo Gauss zone 30' => 'Pulkovo Gauss zona 30', 'Pulkovo Gauss zone 31' => 'Pulkovo Gauss zona 31', 'Pulkovo Gauss zone 32' => 'Pulkovo Gauss zona 32', 'Pulkovo Gauss zone 4' => 'Pulkovo Gauss zona 4', 'Pulkovo Gauss zone 5' => 'Pulkovo Gauss zona 5', 'Pulkovo Gauss zone 6' => 'Pulkovo Gauss zona 6', 'Pulkovo Gauss zone 7' => 'Pulkovo Gauss zona 7', 'Pulkovo Gauss zone 8' => 'Pulkovo Gauss zona 8', 'Pulkovo Gauss zone 9' => 'Pulkovo Gauss zona 9', 'Sudan UTM zone 35N' => 'Sudan UTM zona 35N', 'Sudan UTM zone 36N' => 'Sudan UTM zona 36N', }, }, 'Projection' => 'Proiezione', 'ProjectionAlgorithm' => 'Algoritmo proiezione', 'ProjectionAngle' => 'Angolo proiezione', 'Projects' => 'Progetti', 'Properties' => 'Proprietà', 'PropertyReleaseStatus' => { PrintConv => { 'None' => 'Nessuno', 'Not Applicable' => 'Non applicabile', }, }, 'Protect' => 'Proteggi', 'Protected' => 'Protetto', 'ProtocolName' => 'Nome protocollo', 'Province-State' => 'Provincia/Stato', 'PublicationDate' => 'Data pubblicazione', 'PublicationName' => 'Nome pubblicazione', 'PublicationSets' => 'Set pupplicazione', 'Publisher' => 'Editore', 'PublisherURL' => 'URL editore', 'PurchaseDate' => 'Data acquisto', 'PurchaserAccountName' => 'Nome account acquirente', 'PurchaserAccountNumber' => 'Numero account acquirente', 'PurchaserIdentificationKind' => 'Tipo identificazione acquirente', 'PurchaserIdentificationValue' => 'Valore identificazione acquirente', 'PurchasingDepartment' => 'Reparto acquirente', 'PurchasingOrganizationName' => 'Nome organizzazione acquirente', 'Purpose' => 'Scopo', 'PurposeOfReferenceCodeSequence' => 'Scopo sequenza codici riferimento', 'PyramidLevels' => 'Livelli piramite', 'Quality' => { Description => 'Qualità', PrintConv => { 'Compressed RAW' => 'RAW compresso', 'Compressed RAW + JPEG' => 'RAW+JPEG compresso', 'Extra Fine' => 'Extra fine', 'Low' => 'Basso', 'Normal' => 'Normale', 'RAW + JPEG' => 'RAW+JPEG', 'n/a' => 'n/d', }, }, 'QualityControlImage' => 'Immagine controllo qualità', 'QualityFlag' => 'Indicatore qualità', 'QualityMode' => { Description => 'Modo qualità', PrintConv => { 'Normal' => 'Normale', }, }, 'Quantity' => 'Quantità', 'QuantitySequence' => 'Sequenza quantità', 'QuantizationDefault' => 'Default quantizzazione', 'QuantizationMethod' => 'Metodo quantizzazione', 'QueueStatus' => 'Stato coda', 'QuickAdjust' => 'Regolazione rapida', 'QuickControlDialInMeter' => { PrintConv => { 'ISO speed' => 'Velocità ISO', }, }, 'QuickEdit' => 'Modifica velote', 'QuickMaskInfo' => 'Info maschera veloce', 'QuickShot' => { Description => 'Scatto veloce', PrintConv => { 'Off' => 'Spento', }, }, 'R2ABlueCtbl00' => 'R2 A blu Stbl 30', 'R2ABlueCtbl01' => 'R2 A blu Stbl 29', 'R2ABlueCtbl02' => 'R2 A blu Stbl 28', 'R2ABlueCtbl03' => 'R2 A blu Stbl 27', 'R2ABlueCtbl04' => 'R2 A blu Stbl 26', 'R2ABlueCtbl05' => 'R2 A blu Stbl 25', 'R2ABlueCtbl06' => 'R2 A blu Stbl 24', 'R2ABlueCtbl07' => 'R2 A blu Stbl 23', 'R2ABlueCtbl08' => 'R2 A blu Stbl 22', 'R2ABlueCtbl09' => 'R2 A blu Stbl 21', 'R2ABlueCtbl10' => 'R2 A blu Stbl 20', 'R2ABlueCtbl11' => 'R2 A blu Stbl 19', 'R2ABlueCtbl12' => 'R2 A blu Stbl 18', 'R2ABlueCtbl13' => 'R2 A blu Stbl 17', 'R2ABlueCtbl14' => 'R2 A blu Stbl 16', 'R2ABlueCtbl15' => 'R2 A blu Stbl 15', 'R2ABlueCtbl16' => 'R2 A blu Stbl 14', 'R2ABlueCtbl17' => 'R2 A blu Stbl 13', 'R2ABlueCtbl18' => 'R2 A blu Stbl 12', 'R2ABlueCtbl19' => 'R2 A blu Stbl 11', 'R2ABlueCtbl20' => 'R2 A blu Stbl 10', 'R2ABlueCtbl21' => 'R2 A blu Stbl 09', 'R2ABlueCtbl22' => 'R2 A blu Stbl 08', 'R2ABlueCtbl23' => 'R2 A blu Stbl 07', 'R2ABlueCtbl24' => 'R2 A blu Stbl 06', 'R2ABlueCtbl25' => 'R2 A blu Stbl 05', 'R2ABlueCtbl26' => 'R2 A blu Stbl 04', 'R2ABlueCtbl27' => 'R2 A blu Stbl 03', 'R2ABlueCtbl28' => 'R2 A blu Stbl 02', 'R2ABlueCtbl29' => 'R2 A blu Stbl 01', 'R2ABlueCtbl30' => 'R2 A blu Stbl 00', 'R2ABlueCtbl31' => 'R2 A blu Ctbl 31', 'R2ABlueStbl00' => 'R2 A blu Ctbl 30', 'R2ABlueStbl01' => 'R2 A blu Ctbl 29', 'R2ABlueStbl02' => 'R2 A blu Ctbl 28', 'R2ABlueStbl03' => 'R2 A blu Ctbl 27', 'R2ABlueStbl04' => 'R2 A blu Ctbl 26', 'R2ABlueStbl05' => 'R2 A blu Ctbl 25', 'R2ABlueStbl06' => 'R2 A blu Ctbl 24', 'R2ABlueStbl07' => 'R2 A blu Ctbl 23', 'R2ABlueStbl08' => 'R2 A blu Ctbl 22', 'R2ABlueStbl09' => 'R2 A blu Ctbl 21', 'R2ABlueStbl10' => 'R2 A blu Ctbl 20', 'R2ABlueStbl11' => 'R2 A blu Ctbl 19', 'R2ABlueStbl12' => 'R2 A blu Ctbl 18', 'R2ABlueStbl13' => 'R2 A blu Ctbl 17', 'R2ABlueStbl14' => 'R2 A blu Ctbl 16', 'R2ABlueStbl15' => 'R2 A blu Ctbl 15', 'R2ABlueStbl16' => 'R2 A blu Ctbl 14', 'R2ABlueStbl17' => 'R2 A blu Ctbl 13', 'R2ABlueStbl18' => 'R2 A blu Ctbl 12', 'R2ABlueStbl19' => 'R2 A blu Ctbl 11', 'R2ABlueStbl20' => 'R2 A blu Ctbl 10', 'R2ABlueStbl21' => 'R2 A blu Ctbl 09', 'R2ABlueStbl22' => 'R2 A blu Ctbl 08', 'R2ABlueStbl23' => 'R2 A blu Ctbl 07', 'R2ABlueStbl24' => 'R2 A blu Ctbl 06', 'R2ABlueStbl25' => 'R2 A blu Ctbl 05', 'R2ABlueStbl26' => 'R2 A blu Ctbl 04', 'R2ABlueStbl27' => 'R2 A blu Ctbl 03', 'R2ABlueStbl28' => 'R2 A blu Ctbl 02', 'R2ABlueStbl29' => 'R2 A blu Ctbl 01', 'R2ABlueStbl30' => 'R2 A blu Ctbl 00', 'R2ABlueStbl31' => 'R2 A blu Stbl 31', 'R2AGreenCtbl00' => 'R2 A verde Ctbl 00', 'R2AGreenCtbl01' => 'R2 A verde Ctbl 01', 'R2AGreenCtbl02' => 'R2 A verde Ctbl 02', 'R2AGreenCtbl03' => 'R2 A verde Ctbl 03', 'R2AGreenCtbl04' => 'R2 A verde Ctbl 04', 'R2AGreenCtbl05' => 'R2 A verde Ctbl 05', 'R2AGreenCtbl06' => 'R2 A verde Ctbl 06', 'R2AGreenCtbl07' => 'R2 A verde Ctbl 07', 'R2AGreenCtbl08' => 'R2 A verde Ctbl 08', 'R2AGreenCtbl09' => 'R2 A verde Ctbl 09', 'R2AGreenCtbl10' => 'R2 A verde Ctbl 10', 'R2AGreenCtbl11' => 'R2 A verde Ctbl 11', 'R2AGreenCtbl12' => 'R2 A verde Ctbl 12', 'R2AGreenCtbl13' => 'R2 A verde Ctbl 13', 'R2AGreenCtbl14' => 'R2 A verde Ctbl 14', 'R2AGreenCtbl15' => 'R2 A verde Ctbl 15', 'R2AGreenCtbl16' => 'R2 A verde Ctbl 16', 'R2AGreenCtbl17' => 'R2 A verde Ctbl 17', 'R2AGreenCtbl18' => 'R2 A verde Ctbl 18', 'R2AGreenCtbl19' => 'R2 A verde Ctbl 19', 'R2AGreenCtbl20' => 'R2 A verde Ctbl 20', 'R2AGreenCtbl21' => 'R2 A verde Ctbl 21', 'R2AGreenCtbl22' => 'R2 A verde Ctbl 22', 'R2AGreenCtbl23' => 'R2 A verde Ctbl 23', 'R2AGreenCtbl24' => 'R2 A verde Ctbl 24', 'R2AGreenCtbl25' => 'R2 A verde Ctbl 25', 'R2AGreenCtbl26' => 'R2 A verde Ctbl 26', 'R2AGreenCtbl27' => 'R2 A verde Ctbl 27', 'R2AGreenCtbl28' => 'R2 A verde Ctbl 28', 'R2AGreenCtbl29' => 'R2 A verde Ctbl 29', 'R2AGreenCtbl30' => 'R2 A verde Ctbl 30', 'R2AGreenCtbl31' => 'R2 A verde Ctbl 31', 'R2AGreenStbl00' => 'R2 A verde Stbl 00', 'R2AGreenStbl01' => 'R2 A verde Stbl 01', 'R2AGreenStbl02' => 'R2 A verde Stbl 02', 'R2AGreenStbl03' => 'R2 A verde Stbl 03', 'R2AGreenStbl04' => 'R2 A verde Stbl 04', 'R2AGreenStbl05' => 'R2 A verde Stbl 05', 'R2AGreenStbl06' => 'R2 A verde Stbl 06', 'R2AGreenStbl07' => 'R2 A verde Stbl 07', 'R2AGreenStbl08' => 'R2 A verde Stbl 08', 'R2AGreenStbl09' => 'R2 A verde Stbl 09', 'R2AGreenStbl10' => 'R2 A verde Stbl 10', 'R2AGreenStbl11' => 'R2 A verde Stbl 11', 'R2AGreenStbl12' => 'R2 A verde Stbl 12', 'R2AGreenStbl13' => 'R2 A verde Stbl 13', 'R2AGreenStbl14' => 'R2 A verde Stbl 14', 'R2AGreenStbl15' => 'R2 A verde Stbl 15', 'R2AGreenStbl16' => 'R2 A verde Stbl 16', 'R2AGreenStbl17' => 'R2 A verde Stbl 17', 'R2AGreenStbl18' => 'R2 A verde Stbl 18', 'R2AGreenStbl19' => 'R2 A verde Stbl 19', 'R2AGreenStbl20' => 'R2 A verde Stbl 20', 'R2AGreenStbl21' => 'R2 A verde Stbl 21', 'R2AGreenStbl22' => 'R2 A verde Stbl 22', 'R2AGreenStbl23' => 'R2 A verde Stbl 23', 'R2AGreenStbl24' => 'R2 A verde Stbl 24', 'R2AGreenStbl25' => 'R2 A verde Stbl 25', 'R2AGreenStbl26' => 'R2 A verde Stbl 26', 'R2AGreenStbl27' => 'R2 A verde Stbl 27', 'R2AGreenStbl28' => 'R2 A verde Stbl 28', 'R2AGreenStbl29' => 'R2 A verde Stbl 29', 'R2AGreenStbl30' => 'R2 A verde Stbl 30', 'R2AGreenStbl31' => 'R2 A verde Stbl 31', 'R2AHeight' => 'R2 A altezza', 'R2AIntervals' => 'R2 A intervalli', 'R2ARedCtbl00' => 'R2 A rosso Ctbl 00', 'R2ARedCtbl01' => 'R2 A rosso Ctbl 01', 'R2ARedCtbl02' => 'R2 A rosso Ctbl 02', 'R2ARedCtbl03' => 'R2 A rosso Ctbl 03', 'R2ARedCtbl04' => 'R2 A rosso Ctbl 04', 'R2ARedCtbl05' => 'R2 A rosso Ctbl 05', 'R2ARedCtbl06' => 'R2 A rosso Ctbl 06', 'R2ARedCtbl07' => 'R2 A rosso Ctbl 07', 'R2ARedCtbl08' => 'R2 A rosso Ctbl 08', 'R2ARedCtbl09' => 'R2 A rosso Ctbl 09', 'R2ARedCtbl10' => 'R2 A rosso Ctbl 10', 'R2ARedCtbl11' => 'R2 A rosso Ctbl 11', 'R2ARedCtbl12' => 'R2 A rosso Ctbl 12', 'R2ARedCtbl13' => 'R2 A rosso Ctbl 13', 'R2ARedCtbl14' => 'R2 A rosso Ctbl 14', 'R2ARedCtbl15' => 'R2 A rosso Ctbl 15', 'R2ARedCtbl16' => 'R2 A rosso Ctbl 16', 'R2ARedCtbl17' => 'R2 A rosso Ctbl 17', 'R2ARedCtbl18' => 'R2 A rosso Ctbl 18', 'R2ARedCtbl19' => 'R2 A rosso Ctbl 19', 'R2ARedCtbl20' => 'R2 A rosso Ctbl 20', 'R2ARedCtbl21' => 'R2 A rosso Ctbl 21', 'R2ARedCtbl22' => 'R2 A rosso Ctbl 22', 'R2ARedCtbl23' => 'R2 A rosso Ctbl 23', 'R2ARedCtbl24' => 'R2 A rosso Ctbl 24', 'R2ARedCtbl25' => 'R2 A rosso Ctbl 25', 'R2ARedCtbl26' => 'R2 A rosso Ctbl 26', 'R2ARedCtbl27' => 'R2 A rosso Ctbl 27', 'R2ARedCtbl28' => 'R2 A rosso Ctbl 28', 'R2ARedCtbl29' => 'R2 A rosso Ctbl 29', 'R2ARedCtbl30' => 'R2 A rosso Ctbl 30', 'R2ARedCtbl31' => 'R2 A rosso Ctbl 31', 'R2ARedStbl00' => 'R2 A rosso Stbl 00', 'R2ARedStbl01' => 'R2 A rosso Stbl 01', 'R2ARedStbl02' => 'R2 A rosso Stbl 02', 'R2ARedStbl03' => 'R2 A rosso Stbl 03', 'R2ARedStbl04' => 'R2 A rosso Stbl 04', 'R2ARedStbl05' => 'R2 A rosso Stbl 05', 'R2ARedStbl06' => 'R2 A rosso Stbl 06', 'R2ARedStbl07' => 'R2 A rosso Stbl 07', 'R2ARedStbl08' => 'R2 A rosso Stbl 08', 'R2ARedStbl09' => 'R2 A rosso Stbl 09', 'R2ARedStbl10' => 'R2 A rosso Stbl 10', 'R2ARedStbl11' => 'R2 A rosso Stbl 11', 'R2ARedStbl12' => 'R2 A rosso Stbl 12', 'R2ARedStbl13' => 'R2 A rosso Stbl 13', 'R2ARedStbl14' => 'R2 A rosso Stbl 14', 'R2ARedStbl15' => 'R2 A rosso Stbl 15', 'R2ARedStbl16' => 'R2 A rosso Stbl 16', 'R2ARedStbl17' => 'R2 A rosso Stbl 17', 'R2ARedStbl18' => 'R2 A rosso Stbl 18', 'R2ARedStbl19' => 'R2 A rosso Stbl 19', 'R2ARedStbl20' => 'R2 A rosso Stbl 20', 'R2ARedStbl21' => 'R2 A rosso Stbl 21', 'R2ARedStbl22' => 'R2 A rosso Stbl 22', 'R2ARedStbl23' => 'R2 A rosso Stbl 23', 'R2ARedStbl24' => 'R2 A rosso Stbl 24', 'R2ARedStbl25' => 'R2 A rosso Stbl 25', 'R2ARedStbl26' => 'R2 A rosso Stbl 26', 'R2ARedStbl27' => 'R2 A rosso Stbl 27', 'R2ARedStbl28' => 'R2 A rosso Stbl 28', 'R2ARedStbl29' => 'R2 A rosso Stbl 29', 'R2ARedStbl30' => 'R2 A rosso Stbl 30', 'R2ARedStbl31' => 'R2 A rosso Stbl 31', 'R2AWidth' => 'R2 A larghezza', 'R2D65BlueCtbl00' => 'R2 D65 blu Ctbl 00', 'R2D65BlueCtbl01' => 'R2 D65 blu Ctbl 01', 'R2D65BlueCtbl02' => 'R2 D65 blu Ctbl 02', 'R2D65BlueCtbl03' => 'R2 D65 blu Ctbl 03', 'R2D65BlueCtbl04' => 'R2 D65 blu Ctbl 04', 'R2D65BlueCtbl05' => 'R2 D65 blu Ctbl 05', 'R2D65BlueCtbl06' => 'R2 D65 blu Ctbl 06', 'R2D65BlueCtbl07' => 'R2 D65 blu Ctbl 07', 'R2D65BlueCtbl08' => 'R2 D65 blu Ctbl 08', 'R2D65BlueCtbl09' => 'R2 D65 blu Ctbl 09', 'R2D65BlueCtbl10' => 'R2 D65 blu Ctbl 10', 'R2D65BlueCtbl11' => 'R2 D65 blu Ctbl 11', 'R2D65BlueCtbl12' => 'R2 D65 blu Ctbl 12', 'R2D65BlueCtbl13' => 'R2 D65 blu Ctbl 13', 'R2D65BlueCtbl14' => 'R2 D65 blu Ctbl 14', 'R2D65BlueCtbl15' => 'R2 D65 blu Ctbl 15', 'R2D65BlueCtbl16' => 'R2 D65 blu Ctbl 16', 'R2D65BlueCtbl17' => 'R2 D65 blu Ctbl 17', 'R2D65BlueCtbl18' => 'R2 D65 blu Ctbl 18', 'R2D65BlueCtbl19' => 'R2 D65 blu Ctbl 19', 'R2D65BlueCtbl20' => 'R2 D65 blu Ctbl 20', 'R2D65BlueCtbl21' => 'R2 D65 blu Ctbl 21', 'R2D65BlueCtbl22' => 'R2 D65 blu Ctbl 22', 'R2D65BlueCtbl23' => 'R2 D65 blu Ctbl 23', 'R2D65BlueCtbl24' => 'R2 D65 blu Ctbl 24', 'R2D65BlueCtbl25' => 'R2 D65 blu Ctbl 25', 'R2D65BlueCtbl26' => 'R2 D65 blu Ctbl 26', 'R2D65BlueCtbl27' => 'R2 D65 blu Ctbl 27', 'R2D65BlueCtbl28' => 'R2 D65 blu Ctbl 28', 'R2D65BlueCtbl29' => 'R2 D65 blu Ctbl 29', 'R2D65BlueCtbl30' => 'R2 D65 blu Ctbl 30', 'R2D65BlueCtbl31' => 'R2 D65 blu Ctbl 31', 'R2D65BlueStbl00' => 'R2 D65 blu Stbl 00', 'R2D65BlueStbl01' => 'R2 D65 blu Stbl 01', 'R2D65BlueStbl02' => 'R2 D65 blu Stbl 02', 'R2D65BlueStbl03' => 'R2 D65 blu Stbl 03', 'R2D65BlueStbl04' => 'R2 D65 blu Stbl 04', 'R2D65BlueStbl05' => 'R2 D65 blu Stbl 05', 'R2D65BlueStbl06' => 'R2 D65 blu Stbl 06', 'R2D65BlueStbl07' => 'R2 D65 blu Stbl 07', 'R2D65BlueStbl08' => 'R2 D65 blu Stbl 08', 'R2D65BlueStbl09' => 'R2 D65 blu Stbl 09', 'R2D65BlueStbl10' => 'R2 D65 blu Stbl 10', 'R2D65BlueStbl11' => 'R2 D65 blu Stbl 11', 'R2D65BlueStbl12' => 'R2 D65 blu Stbl 12', 'R2D65BlueStbl13' => 'R2 D65 blu Stbl 13', 'R2D65BlueStbl14' => 'R2 D65 blu Stbl 14', 'R2D65BlueStbl15' => 'R2 D65 blu Stbl 15', 'R2D65BlueStbl16' => 'R2 D65 blu Stbl 16', 'R2D65BlueStbl17' => 'R2 D65 blu Stbl 17', 'R2D65BlueStbl18' => 'R2 D65 blu Stbl 18', 'R2D65BlueStbl19' => 'R2 D65 blu Stbl 19', 'R2D65BlueStbl20' => 'R2 D65 blu Stbl 20', 'R2D65BlueStbl21' => 'R2 D65 blu Stbl 21', 'R2D65BlueStbl22' => 'R2 D65 blu Stbl 22', 'R2D65BlueStbl23' => 'R2 D65 blu Stbl 23', 'R2D65BlueStbl24' => 'R2 D65 blu Stbl 24', 'R2D65BlueStbl25' => 'R2 D65 blu Stbl 25', 'R2D65BlueStbl26' => 'R2 D65 blu Stbl 26', 'R2D65BlueStbl27' => 'R2 D65 blu Stbl 27', 'R2D65BlueStbl28' => 'R2 D65 blu Stbl 28', 'R2D65BlueStbl29' => 'R2 D65 blu Stbl 29', 'R2D65BlueStbl30' => 'R2 D65 blu Stbl 30', 'R2D65BlueStbl31' => 'R2 D65 blu Stbl 31', 'R2D65GreenCtbl00' => 'R2 D65 verde Ctbl 00', 'R2D65GreenCtbl01' => 'R2 D65 verde Ctbl 01', 'R2D65GreenCtbl02' => 'R2 D65 verde Ctbl 02', 'R2D65GreenCtbl03' => 'R2 D65 verde Ctbl 03', 'R2D65GreenCtbl04' => 'R2 D65 verde Ctbl 04', 'R2D65GreenCtbl05' => 'R2 D65 verde Ctbl 05', 'R2D65GreenCtbl06' => 'R2 D65 verde Ctbl 06', 'R2D65GreenCtbl07' => 'R2 D65 verde Ctbl 07', 'R2D65GreenCtbl08' => 'R2 D65 verde Ctbl 08', 'R2D65GreenCtbl09' => 'R2 D65 verde Ctbl 09', 'R2D65GreenCtbl10' => 'R2 D65 verde Ctbl 10', 'R2D65GreenCtbl11' => 'R2 D65 verde Ctbl 11', 'R2D65GreenCtbl12' => 'R2 D65 verde Ctbl 12', 'R2D65GreenCtbl13' => 'R2 D65 verde Ctbl 13', 'R2D65GreenCtbl14' => 'R2 D65 verde Ctbl 14', 'R2D65GreenCtbl15' => 'R2 D65 verde Ctbl 15', 'R2D65GreenCtbl16' => 'R2 D65 verde Ctbl 16', 'R2D65GreenCtbl17' => 'R2 D65 verde Ctbl 17', 'R2D65GreenCtbl18' => 'R2 D65 verde Ctbl 18', 'R2D65GreenCtbl19' => 'R2 D65 verde Ctbl 19', 'R2D65GreenCtbl20' => 'R2 D65 verde Ctbl 20', 'R2D65GreenCtbl21' => 'R2 D65 verde Ctbl 21', 'R2D65GreenCtbl22' => 'R2 D65 verde Ctbl 22', 'R2D65GreenCtbl23' => 'R2 D65 verde Ctbl 23', 'R2D65GreenCtbl24' => 'R2 D65 verde Ctbl 24', 'R2D65GreenCtbl25' => 'R2 D65 verde Ctbl 25', 'R2D65GreenCtbl26' => 'R2 D65 verde Ctbl 26', 'R2D65GreenCtbl27' => 'R2 D65 verde Ctbl 27', 'R2D65GreenCtbl28' => 'R2 D65 verde Ctbl 28', 'R2D65GreenCtbl29' => 'R2 D65 verde Ctbl 29', 'R2D65GreenCtbl30' => 'R2 D65 verde Ctbl 30', 'R2D65GreenCtbl31' => 'R2 D65 verde Ctbl 31', 'R2D65GreenStbl00' => 'R2 D65 verde Stbl 00', 'R2D65GreenStbl01' => 'R2 D65 verde Stbl 01', 'R2D65GreenStbl02' => 'R2 D65 verde Stbl 02', 'R2D65GreenStbl03' => 'R2 D65 verde Stbl 03', 'R2D65GreenStbl04' => 'R2 D65 verde Stbl 04', 'R2D65GreenStbl05' => 'R2 D65 verde Stbl 05', 'R2D65GreenStbl06' => 'R2 D65 verde Stbl 06', 'R2D65GreenStbl07' => 'R2 D65 verde Stbl 07', 'R2D65GreenStbl08' => 'R2 D65 verde Stbl 08', 'R2D65GreenStbl09' => 'R2 D65 verde Stbl 09', 'R2D65GreenStbl10' => 'R2 D65 verde Stbl 10', 'R2D65GreenStbl11' => 'R2 D65 verde Stbl 11', 'R2D65GreenStbl12' => 'R2 D65 verde Stbl 12', 'R2D65GreenStbl13' => 'R2 D65 verde Stbl 13', 'R2D65GreenStbl14' => 'R2 D65 verde Stbl 14', 'R2D65GreenStbl15' => 'R2 D65 verde Stbl 15', 'R2D65GreenStbl16' => 'R2 D65 verde Stbl 16', 'R2D65GreenStbl17' => 'R2 D65 verde Stbl 17', 'R2D65GreenStbl18' => 'R2 D65 verde Stbl 18', 'R2D65GreenStbl19' => 'R2 D65 verde Stbl 19', 'R2D65GreenStbl20' => 'R2 D65 verde Stbl 20', 'R2D65GreenStbl21' => 'R2 D65 verde Stbl 21', 'R2D65GreenStbl22' => 'R2 D65 verde Stbl 22', 'R2D65GreenStbl23' => 'R2 D65 verde Stbl 23', 'R2D65GreenStbl24' => 'R2 D65 verde Stbl 24', 'R2D65GreenStbl25' => 'R2 D65 verde Stbl 25', 'R2D65GreenStbl26' => 'R2 D65 verde Stbl 26', 'R2D65GreenStbl27' => 'R2 D65 verde Stbl 27', 'R2D65GreenStbl28' => 'R2 D65 verde Stbl 28', 'R2D65GreenStbl29' => 'R2 D65 verde Stbl 29', 'R2D65GreenStbl30' => 'R2 D65 verde Stbl 30', 'R2D65GreenStbl31' => 'R2 D65 verde Stbl 31', 'R2D65Height' => 'R2 D65 altezza', 'R2D65Intervals' => 'R2 D65 intervalli', 'R2D65RedCtbl00' => 'R2 D65 rosso Ctbl 00', 'R2D65RedCtbl01' => 'R2 D65 rosso Ctbl 01', 'R2D65RedCtbl02' => 'R2 D65 rosso Ctbl 02', 'R2D65RedCtbl03' => 'R2 D65 rosso Ctbl 03', 'R2D65RedCtbl04' => 'R2 D65 rosso Ctbl 04', 'R2D65RedCtbl05' => 'R2 D65 rosso Ctbl 05', 'R2D65RedCtbl06' => 'R2 D65 rosso Ctbl 06', 'R2D65RedCtbl07' => 'R2 D65 rosso Ctbl 07', 'R2D65RedCtbl08' => 'R2 D65 rosso Ctbl 08', 'R2D65RedCtbl09' => 'R2 D65 rosso Ctbl 09', 'R2D65RedCtbl10' => 'R2 D65 rosso Ctbl 10', 'R2D65RedCtbl11' => 'R2 D65 rosso Ctbl 11', 'R2D65RedCtbl12' => 'R2 D65 rosso Ctbl 12', 'R2D65RedCtbl13' => 'R2 D65 rosso Ctbl 13', 'R2D65RedCtbl14' => 'R2 D65 rosso Ctbl 14', 'R2D65RedCtbl15' => 'R2 D65 rosso Ctbl 15', 'R2D65RedCtbl16' => 'R2 D65 rosso Ctbl 16', 'R2D65RedCtbl17' => 'R2 D65 rosso Ctbl 17', 'R2D65RedCtbl18' => 'R2 D65 rosso Ctbl 18', 'R2D65RedCtbl19' => 'R2 D65 rosso Ctbl 19', 'R2D65RedCtbl20' => 'R2 D65 rosso Ctbl 20', 'R2D65RedCtbl21' => 'R2 D65 rosso Ctbl 21', 'R2D65RedCtbl22' => 'R2 D65 rosso Ctbl 22', 'R2D65RedCtbl23' => 'R2 D65 rosso Ctbl 23', 'R2D65RedCtbl24' => 'R2 D65 rosso Ctbl 24', 'R2D65RedCtbl25' => 'R2 D65 rosso Ctbl 25', 'R2D65RedCtbl26' => 'R2 D65 rosso Ctbl 26', 'R2D65RedCtbl27' => 'R2 D65 rosso Ctbl 27', 'R2D65RedCtbl28' => 'R2 D65 rosso Ctbl 28', 'R2D65RedCtbl29' => 'R2 D65 rosso Ctbl 29', 'R2D65RedCtbl30' => 'R2 D65 rosso Ctbl 30', 'R2D65RedCtbl31' => 'R2 D65 rosso Ctbl 31', 'R2D65RedStbl00' => 'R2 D65 rosso Stbl 00', 'R2D65RedStbl01' => 'R2 D65 rosso Stbl 01', 'R2D65RedStbl02' => 'R2 D65 rosso Stbl 02', 'R2D65RedStbl03' => 'R2 D65 rosso Stbl 03', 'R2D65RedStbl04' => 'R2 D65 rosso Stbl 04', 'R2D65RedStbl05' => 'R2 D65 rosso Stbl 05', 'R2D65RedStbl06' => 'R2 D65 rosso Stbl 06', 'R2D65RedStbl07' => 'R2 D65 rosso Stbl 07', 'R2D65RedStbl08' => 'R2 D65 rosso Stbl 08', 'R2D65RedStbl09' => 'R2 D65 rosso Stbl 09', 'R2D65RedStbl10' => 'R2 D65 rosso Stbl 10', 'R2D65RedStbl11' => 'R2 D65 rosso Stbl 11', 'R2D65RedStbl12' => 'R2 D65 rosso Stbl 12', 'R2D65RedStbl13' => 'R2 D65 rosso Stbl 13', 'R2D65RedStbl14' => 'R2 D65 rosso Stbl 14', 'R2D65RedStbl15' => 'R2 D65 rosso Stbl 15', 'R2D65RedStbl16' => 'R2 D65 rosso Stbl 16', 'R2D65RedStbl17' => 'R2 D65 rosso Stbl 17', 'R2D65RedStbl18' => 'R2 D65 rosso Stbl 18', 'R2D65RedStbl19' => 'R2 D65 rosso Stbl 19', 'R2D65RedStbl20' => 'R2 D65 rosso Stbl 20', 'R2D65RedStbl21' => 'R2 D65 rosso Stbl 21', 'R2D65RedStbl22' => 'R2 D65 rosso Stbl 22', 'R2D65RedStbl23' => 'R2 D65 rosso Stbl 23', 'R2D65RedStbl24' => 'R2 D65 rosso Stbl 24', 'R2D65RedStbl25' => 'R2 D65 rosso Stbl 25', 'R2D65RedStbl26' => 'R2 D65 rosso Stbl 26', 'R2D65RedStbl27' => 'R2 D65 rosso Stbl 27', 'R2D65RedStbl28' => 'R2 D65 rosso Stbl 28', 'R2D65RedStbl29' => 'R2 D65 rosso Stbl 29', 'R2D65RedStbl30' => 'R2 D65 rosso Stbl 30', 'R2D65RedStbl31' => 'R2 D65 rosso Stbl 31', 'R2D65Width' => 'R2 D65 larghezza', 'R2TL84BlueCtbl00' => 'R2 TL84 blu Ctbl 00', 'R2TL84BlueCtbl01' => 'R2 TL84 blu Ctbl 01', 'R2TL84BlueCtbl02' => 'R2 TL84 blu Ctbl 02', 'R2TL84BlueCtbl03' => 'R2 TL84 blu Ctbl 03', 'R2TL84BlueCtbl04' => 'R2 TL84 blu Ctbl 04', 'R2TL84BlueCtbl05' => 'R2 TL84 blu Ctbl 05', 'R2TL84BlueCtbl06' => 'R2 TL84 blu Ctbl 06', 'R2TL84BlueCtbl07' => 'R2 TL84 blu Ctbl 07', 'R2TL84BlueCtbl08' => 'R2 TL84 blu Ctbl 08', 'R2TL84BlueCtbl09' => 'R2 TL84 blu Ctbl 09', 'R2TL84BlueCtbl10' => 'R2 TL84 blu Ctbl 10', 'R2TL84BlueCtbl11' => 'R2 TL84 blu Ctbl 11', 'R2TL84BlueCtbl12' => 'R2 TL84 blu Ctbl 12', 'R2TL84BlueCtbl13' => 'R2 TL84 blu Ctbl 13', 'R2TL84BlueCtbl14' => 'R2 TL84 blu Ctbl 14', 'R2TL84BlueCtbl15' => 'R2 TL84 blu Ctbl 15', 'R2TL84BlueCtbl16' => 'R2 TL84 blu Ctbl 16', 'R2TL84BlueCtbl17' => 'R2 TL84 blu Ctbl 17', 'R2TL84BlueCtbl18' => 'R2 TL84 blu Ctbl 18', 'R2TL84BlueCtbl19' => 'R2 TL84 blu Ctbl 19', 'R2TL84BlueCtbl20' => 'R2 TL84 blu Ctbl 20', 'R2TL84BlueCtbl21' => 'R2 TL84 blu Ctbl 21', 'R2TL84BlueCtbl22' => 'R2 TL84 blu Ctbl 22', 'R2TL84BlueCtbl23' => 'R2 TL84 blu Ctbl 23', 'R2TL84BlueCtbl24' => 'R2 TL84 blu Ctbl 24', 'R2TL84BlueCtbl25' => 'R2 TL84 blu Ctbl 25', 'R2TL84BlueCtbl26' => 'R2 TL84 blu Ctbl 26', 'R2TL84BlueCtbl27' => 'R2 TL84 blu Ctbl 27', 'R2TL84BlueCtbl28' => 'R2 TL84 blu Ctbl 28', 'R2TL84BlueCtbl29' => 'R2 TL84 blu Ctbl 29', 'R2TL84BlueCtbl30' => 'R2 TL84 blu Ctbl 30', 'R2TL84BlueCtbl31' => 'R2 TL84 blu Ctbl 31', 'R2TL84BlueStbl00' => 'R2 TL84 blu Stbl 00', 'R2TL84BlueStbl01' => 'R2 TL84 blu Stbl 01', 'R2TL84BlueStbl02' => 'R2 TL84 blu Stbl 02', 'R2TL84BlueStbl03' => 'R2 TL84 blu Stbl 03', 'R2TL84BlueStbl04' => 'R2 TL84 blu Stbl 04', 'R2TL84BlueStbl05' => 'R2 TL84 blu Stbl 05', 'R2TL84BlueStbl06' => 'R2 TL84 blu Stbl 06', 'R2TL84BlueStbl07' => 'R2 TL84 blu Stbl 07', 'R2TL84BlueStbl08' => 'R2 TL84 blu Stbl 08', 'R2TL84BlueStbl09' => 'R2 TL84 blu Stbl 09', 'R2TL84BlueStbl10' => 'R2 TL84 blu Stbl 10', 'R2TL84BlueStbl11' => 'R2 TL84 blu Stbl 11', 'R2TL84BlueStbl12' => 'R2 TL84 blu Stbl 12', 'R2TL84BlueStbl13' => 'R2 TL84 blu Stbl 13', 'R2TL84BlueStbl14' => 'R2 TL84 blu Stbl 14', 'R2TL84BlueStbl15' => 'R2 TL84 blu Stbl 15', 'R2TL84BlueStbl16' => 'R2 TL84 blu Stbl 16', 'R2TL84BlueStbl17' => 'R2 TL84 blu Stbl 17', 'R2TL84BlueStbl18' => 'R2 TL84 blu Stbl 18', 'R2TL84BlueStbl19' => 'R2 TL84 blu Stbl 19', 'R2TL84BlueStbl20' => 'R2 TL84 blu Stbl 20', 'R2TL84BlueStbl21' => 'R2 TL84 blu Stbl 21', 'R2TL84BlueStbl22' => 'R2 TL84 blu Stbl 22', 'R2TL84BlueStbl23' => 'R2 TL84 blu Stbl 23', 'R2TL84BlueStbl24' => 'R2 TL84 blu Stbl 24', 'R2TL84BlueStbl25' => 'R2 TL84 blu Stbl 25', 'R2TL84BlueStbl26' => 'R2 TL84 blu Stbl 26', 'R2TL84BlueStbl27' => 'R2 TL84 blu Stbl 27', 'R2TL84BlueStbl28' => 'R2 TL84 blu Stbl 28', 'R2TL84BlueStbl29' => 'R2 TL84 blu Stbl 29', 'R2TL84BlueStbl30' => 'R2 TL84 blu Stbl 30', 'R2TL84BlueStbl31' => 'R2 TL84 blu Stbl 31', 'R2TL84GreenCtbl00' => 'R2 TL84 verde Ctbl 00', 'R2TL84GreenCtbl01' => 'R2 TL84 verde Ctbl 01', 'R2TL84GreenCtbl02' => 'R2 TL84 verde Ctbl 02', 'R2TL84GreenCtbl03' => 'R2 TL84 verde Ctbl 03', 'R2TL84GreenCtbl04' => 'R2 TL84 verde Ctbl 04', 'R2TL84GreenCtbl05' => 'R2 TL84 verde Ctbl 05', 'R2TL84GreenCtbl06' => 'R2 TL84 verde Ctbl 06', 'R2TL84GreenCtbl07' => 'R2 TL84 verde Ctbl 07', 'R2TL84GreenCtbl08' => 'R2 TL84 verde Ctbl 08', 'R2TL84GreenCtbl09' => 'R2 TL84 verde Ctbl 09', 'R2TL84GreenCtbl10' => 'R2 TL84 verde Ctbl 10', 'R2TL84GreenCtbl11' => 'R2 TL84 verde Ctbl 11', 'R2TL84GreenCtbl12' => 'R2 TL84 verde Ctbl 12', 'R2TL84GreenCtbl13' => 'R2 TL84 verde Ctbl 13', 'R2TL84GreenCtbl14' => 'R2 TL84 verde Ctbl 14', 'R2TL84GreenCtbl15' => 'R2 TL84 verde Ctbl 15', 'R2TL84GreenCtbl16' => 'R2 TL84 verde Ctbl 16', 'R2TL84GreenCtbl17' => 'R2 TL84 verde Ctbl 17', 'R2TL84GreenCtbl18' => 'R2 TL84 verde Ctbl 18', 'R2TL84GreenCtbl19' => 'R2 TL84 verde Ctbl 19', 'R2TL84GreenCtbl20' => 'R2 TL84 verde Ctbl 20', 'R2TL84GreenCtbl21' => 'R2 TL84 verde Ctbl 21', 'R2TL84GreenCtbl22' => 'R2 TL84 verde Ctbl 22', 'R2TL84GreenCtbl23' => 'R2 TL84 verde Ctbl 23', 'R2TL84GreenCtbl24' => 'R2 TL84 verde Ctbl 24', 'R2TL84GreenCtbl25' => 'R2 TL84 verde Ctbl 25', 'R2TL84GreenCtbl26' => 'R2 TL84 verde Ctbl 26', 'R2TL84GreenCtbl27' => 'R2 TL84 verde Ctbl 27', 'R2TL84GreenCtbl28' => 'R2 TL84 verde Ctbl 28', 'R2TL84GreenCtbl29' => 'R2 TL84 verde Ctbl 29', 'R2TL84GreenCtbl30' => 'R2 TL84 verde Ctbl 30', 'R2TL84GreenCtbl31' => 'R2 TL84 verde Ctbl 31', 'R2TL84GreenStbl00' => 'R2 TL84 verde Stbl 00', 'R2TL84GreenStbl01' => 'R2 TL84 verde Stbl 01', 'R2TL84GreenStbl02' => 'R2 TL84 verde Stbl 02', 'R2TL84GreenStbl03' => 'R2 TL84 verde Stbl 03', 'R2TL84GreenStbl04' => 'R2 TL84 verde Stbl 04', 'R2TL84GreenStbl05' => 'R2 TL84 verde Stbl 05', 'R2TL84GreenStbl06' => 'R2 TL84 verde Stbl 06', 'R2TL84GreenStbl07' => 'R2 TL84 verde Stbl 07', 'R2TL84GreenStbl08' => 'R2 TL84 verde Stbl 08', 'R2TL84GreenStbl09' => 'R2 TL84 verde Stbl 09', 'R2TL84GreenStbl10' => 'R2 TL84 verde Stbl 10', 'R2TL84GreenStbl11' => 'R2 TL84 verde Stbl 11', 'R2TL84GreenStbl12' => 'R2 TL84 verde Stbl 12', 'R2TL84GreenStbl13' => 'R2 TL84 verde Stbl 13', 'R2TL84GreenStbl14' => 'R2 TL84 verde Stbl 14', 'R2TL84GreenStbl15' => 'R2 TL84 verde Stbl 15', 'R2TL84GreenStbl16' => 'R2 TL84 verde Stbl 16', 'R2TL84GreenStbl17' => 'R2 TL84 verde Stbl 17', 'R2TL84GreenStbl18' => 'R2 TL84 verde Stbl 18', 'R2TL84GreenStbl19' => 'R2 TL84 verde Stbl 19', 'R2TL84GreenStbl20' => 'R2 TL84 verde Stbl 20', 'R2TL84GreenStbl21' => 'R2 TL84 verde Stbl 21', 'R2TL84GreenStbl22' => 'R2 TL84 verde Stbl 22', 'R2TL84GreenStbl23' => 'R2 TL84 verde Stbl 23', 'R2TL84GreenStbl24' => 'R2 TL84 verde Stbl 24', 'R2TL84GreenStbl25' => 'R2 TL84 verde Stbl 25', 'R2TL84GreenStbl26' => 'R2 TL84 verde Stbl 26', 'R2TL84GreenStbl27' => 'R2 TL84 verde Stbl 27', 'R2TL84GreenStbl28' => 'R2 TL84 verde Stbl 28', 'R2TL84GreenStbl29' => 'R2 TL84 verde Stbl 29', 'R2TL84GreenStbl30' => 'R2 TL84 verde Stbl 30', 'R2TL84GreenStbl31' => 'R2 TL84 verde Stbl 31', 'R2TL84Height' => 'R2 TL84 altezza', 'R2TL84Intervals' => 'R2 TL84 intervalli', 'R2TL84RedCtbl00' => 'R2 TL84 rosso Ctbl 00', 'R2TL84RedCtbl01' => 'R2 TL84 rosso Ctbl 01', 'R2TL84RedCtbl02' => 'R2 TL84 rosso Ctbl 02', 'R2TL84RedCtbl03' => 'R2 TL84 rosso Ctbl 03', 'R2TL84RedCtbl04' => 'R2 TL84 rosso Ctbl 04', 'R2TL84RedCtbl05' => 'R2 TL84 rosso Ctbl 05', 'R2TL84RedCtbl06' => 'R2 TL84 rosso Ctbl 06', 'R2TL84RedCtbl07' => 'R2 TL84 rosso Ctbl 07', 'R2TL84RedCtbl08' => 'R2 TL84 rosso Ctbl 08', 'R2TL84RedCtbl09' => 'R2 TL84 rosso Ctbl 09', 'R2TL84RedCtbl10' => 'R2 TL84 rosso Ctbl 10', 'R2TL84RedCtbl11' => 'R2 TL84 rosso Ctbl 11', 'R2TL84RedCtbl12' => 'R2 TL84 rosso Ctbl 12', 'R2TL84RedCtbl13' => 'R2 TL84 rosso Ctbl 13', 'R2TL84RedCtbl14' => 'R2 TL84 rosso Ctbl 14', 'R2TL84RedCtbl15' => 'R2 TL84 rosso Ctbl 15', 'R2TL84RedCtbl16' => 'R2 TL84 rosso Ctbl 16', 'R2TL84RedCtbl17' => 'R2 TL84 rosso Ctbl 17', 'R2TL84RedCtbl18' => 'R2 TL84 rosso Ctbl 18', 'R2TL84RedCtbl19' => 'R2 TL84 rosso Ctbl 19', 'R2TL84RedCtbl20' => 'R2 TL84 rosso Ctbl 20', 'R2TL84RedCtbl21' => 'R2 TL84 rosso Ctbl 21', 'R2TL84RedCtbl22' => 'R2 TL84 rosso Ctbl 22', 'R2TL84RedCtbl23' => 'R2 TL84 rosso Ctbl 23', 'R2TL84RedCtbl24' => 'R2 TL84 rosso Ctbl 24', 'R2TL84RedCtbl25' => 'R2 TL84 rosso Ctbl 25', 'R2TL84RedCtbl26' => 'R2 TL84 rosso Ctbl 26', 'R2TL84RedCtbl27' => 'R2 TL84 rosso Ctbl 27', 'R2TL84RedCtbl28' => 'R2 TL84 rosso Ctbl 28', 'R2TL84RedCtbl29' => 'R2 TL84 rosso Ctbl 29', 'R2TL84RedCtbl30' => 'R2 TL84 rosso Ctbl 30', 'R2TL84RedCtbl31' => 'R2 TL84 rosso Ctbl 31', 'R2TL84RedStbl00' => 'R2 TL84 rosso Stbl 00', 'R2TL84RedStbl01' => 'R2 TL84 rosso Stbl 01', 'R2TL84RedStbl02' => 'R2 TL84 rosso Stbl 02', 'R2TL84RedStbl03' => 'R2 TL84 rosso Stbl 03', 'R2TL84RedStbl04' => 'R2 TL84 rosso Stbl 04', 'R2TL84RedStbl05' => 'R2 TL84 rosso Stbl 05', 'R2TL84RedStbl06' => 'R2 TL84 rosso Stbl 06', 'R2TL84RedStbl07' => 'R2 TL84 rosso Stbl 07', 'R2TL84RedStbl08' => 'R2 TL84 rosso Stbl 08', 'R2TL84RedStbl09' => 'R2 TL84 rosso Stbl 09', 'R2TL84RedStbl10' => 'R2 TL84 rosso Stbl 10', 'R2TL84RedStbl11' => 'R2 TL84 rosso Stbl 11', 'R2TL84RedStbl12' => 'R2 TL84 rosso Stbl 12', 'R2TL84RedStbl13' => 'R2 TL84 rosso Stbl 13', 'R2TL84RedStbl14' => 'R2 TL84 rosso Stbl 14', 'R2TL84RedStbl15' => 'R2 TL84 rosso Stbl 15', 'R2TL84RedStbl16' => 'R2 TL84 rosso Stbl 16', 'R2TL84RedStbl17' => 'R2 TL84 rosso Stbl 17', 'R2TL84RedStbl18' => 'R2 TL84 rosso Stbl 18', 'R2TL84RedStbl19' => 'R2 TL84 rosso Stbl 19', 'R2TL84RedStbl20' => 'R2 TL84 rosso Stbl 20', 'R2TL84RedStbl21' => 'R2 TL84 rosso Stbl 21', 'R2TL84RedStbl22' => 'R2 TL84 rosso Stbl 22', 'R2TL84RedStbl23' => 'R2 TL84 rosso Stbl 23', 'R2TL84RedStbl24' => 'R2 TL84 rosso Stbl 24', 'R2TL84RedStbl25' => 'R2 TL84 rosso Stbl 25', 'R2TL84RedStbl26' => 'R2 TL84 rosso Stbl 26', 'R2TL84RedStbl27' => 'R2 TL84 rosso Stbl 27', 'R2TL84RedStbl28' => 'R2 TL84 rosso Stbl 28', 'R2TL84RedStbl29' => 'R2 TL84 rosso Stbl 29', 'R2TL84RedStbl30' => 'R2 TL84 rosso Stbl 30', 'R2TL84RedStbl31' => 'R2 TL84 rosso Stbl 31', 'R2TL84Width' => 'R2 TL84 larghezza', 'RAFVersion' => 'Versione RAF', 'RGBCurveLimits' => 'Limiti curva RGB', 'RGBCurvePoints' => 'Punti curva RGB', 'RadialPosition' => 'Posizione radiale', 'RandomIndexMetadata' => 'Indice casuale metadati', 'RandomIndexMetadataV10' => 'Indice casuale metadati V10', 'RangeFinder' => { PrintConv => { 'Off' => 'Spento', }, }, 'RasterPadding' => { PrintConv => { 'Long Sector' => 'Settore lungo', 'Long Word' => 'Parola lunga', 'Sector' => 'Settore', 'Word' => 'Parola', }, }, 'RasterizedCaption' => 'Didascalia rasterizzata', 'Rating' => { Description => 'Valutazione', PrintConv => { 'Explicit' => 'Esplicito', }, }, 'RatingPercent' => 'Valutazione percentuale', 'RawAndJpgRecording' => { Description => 'Registrazione raw e jpg', PrintConv => { 'Off' => 'Spento', 'RAW (DNG, Best)' => 'RAW (DNG, migliore)', 'RAW (DNG, Better)' => 'RAW (DNG, più buona)', 'RAW (DNG, Good)' => 'RAW (DNG, buona)', 'RAW (PEF, Best)' => 'RAW (PEF, migliore)', 'RAW (PEF, Better)' => 'RAW (PEF, più buona)', 'RAW (PEF, Good)' => 'RAW (PEF, buona)', 'RAW+JPEG (DNG, Best)' => 'RAW+JPEG (DNG, migliore)', 'RAW+JPEG (DNG, Better)' => 'RAW+JPEG (DNG, più buona)', 'RAW+JPEG (DNG, Good)' => 'RAW+JPEG (DNG, buona)', 'RAW+JPEG (PEF, Best)' => 'RAW+JPEG (PEF, migliore)', 'RAW+JPEG (PEF, Better)' => 'RAW+JPEG (PEF, più buona)', 'RAW+JPEG (PEF, Good)' => 'RAW+JPEG (PEF, buona)', }, }, 'RawColorAdj' => { PrintConv => { 'Shot Settings' => 'Impostazioni scatto', }, }, 'RawDataOffset' => 'Offset dati raw', 'RawDataUniqueID' => 'ID unico dati raw', 'RawDepth' => 'Profondità raw', 'RawDevAutoGradation' => { PrintConv => { 'Off' => 'Spento', }, }, 'RawDevEditStatus' => { PrintConv => { 'Original' => 'Originale', }, }, 'RawDevNoiseReduction' => { PrintConv => { 'Noise Filter' => 'Filtro rumore', 'Noise Reduction' => 'Riduzione rumore', }, }, 'RawDevPMPictureTone' => { PrintConv => { 'Green' => 'Verde', 'Purple' => 'Porpora', 'Sepia' => 'Seppia', }, }, 'RawDevPM_BWFilter' => { PrintConv => { 'Green' => 'Verde', 'Orange' => 'Arancio', 'Red' => 'Rosso', 'Yellow' => 'Giallo', }, }, 'RawDevPictureMode' => { PrintConv => { 'Sepia' => 'Seppia', 'Vivid' => 'Vivace', }, }, 'RawDevSettings' => { PrintConv => { 'Noise Reduction' => 'Riduzione rumore', 'Saturation' => 'Saturazione', 'Sharpness' => 'Nitidezza', }, }, 'RawFile' => 'File raw', 'RawFileName' => 'Nome file raw', 'RawImageCenter' => 'Centro immagine raw', 'RawImageDigest' => 'Sommario file raw', 'RawImageFullSize' => 'Dimensione finale immagine raw', 'RawImageHeight' => 'Altezza immagine raw', 'RawImageMode' => 'Modo immagine raw', 'RawImageSegmentation' => 'Segmentazione file raw', 'RawImageSize' => 'Dimensione immagine raw', 'RawImageWidth' => 'Larghezza immagine raw', 'RawInfoVersion' => 'Info versione raw', 'RawJpgHeight' => 'Altezza jpg raw', 'RawJpgQuality' => { Description => 'Qualità jpg raw', PrintConv => { 'Normal' => 'Normale', }, }, 'RawJpgSize' => { Description => 'Dimensione jpg raw', PrintConv => { 'Postcard' => 'Cartolina', }, }, 'RawJpgWidth' => 'Larghezza jpg raw', 'ReadStatus' => 'Stato lettura', 'RecommendedExposureIndex' => 'Indice esposizione raccomandato', 'RecordDisplay' => { PrintConv => { 'Horizontal' => 'Orizzontale', }, }, 'RecordMode' => { Description => 'Modo registrazione', PrintConv => { 'Aperture Priority' => 'Priorità diaframma', 'Manual' => 'Manuale', 'Program AE' => 'Programma AE', 'Shutter Priority' => 'Priorità otturatore', }, }, 'RecordShutterRelease' => { PrintConv => { 'Press start, press stop' => 'Premi start, premi stop', }, }, 'RecordedFormat' => 'Formato registrato', 'RecordingDates' => 'Date registrazioni', 'RecordingLabelName' => 'Nome etichetta registrazione', 'RecordingMode' => { Description => 'Modo registrazione', PrintConv => { 'Landscape' => 'Orizzontale', 'Manual' => 'Manuale', 'Portrait' => 'Verticale', }, }, 'RecordingTime' => 'Tempo registrazione', 'RedAdjust' => 'Correzione rosso', 'RedBalance' => 'Bilanciamento rosso', 'RedCurveLimits' => 'Limiti curva rosso', 'RedCurvePoints' => 'Punti curva rosso', 'RedEyeCorrection' => { Description => 'Correzione occhi rossi', PrintConv => { 'Off' => 'Spento', }, }, 'RedEyeInfo' => 'Info occhi rossi', 'RedEyeReduction' => { Description => 'Riduzione occhi rossi', PrintConv => { 'Off' => 'Spento', }, }, 'RedGain' => 'Guadagno rosso', 'RedHue' => 'Tinta rosso', 'RedMatrixColumn' => 'Colonna matrice rosso', 'RedPaletteColorTableData' => 'Dati tabella tavolozza colori rosso', 'RedPaletteColorTableDescriptor' => 'Descrittore tabella tavolozza colori rosso', 'RedPrimary' => 'Rosso primario', 'RedSample' => 'Campione rosso', 'RedSaturation' => 'Saturazione rosso', 'RedTRC' => 'Curva riproduzione tono rosso', 'ReductionMatrix1' => 'Matrice di riduzione 1', 'ReductionMatrix2' => 'Matrice di riduzione 2', 'Reference' => 'Riferimento', 'Reference1' => 'Riferimento 1', 'Reference2' => 'Riferimento 2', 'Reference3' => 'Riferimento 3', 'Reference4' => 'Riferimento 4', 'Reference5' => 'Riferimento 5', 'Reference6' => 'Riferimento 6', 'ReferenceBlackWhite' => 'Coppia valori riferimento di bianco e nero', 'ReferenceBlock' => 'Blocco di riferimento', 'ReferenceChannels' => 'Canali di riferimento', 'ReferenceCoordinates' => 'Coordinate di riferimento', 'ReferenceDate' => 'Data di riferimento', 'ReferenceNumber' => 'Numero di riferimento', 'ReferencePixelPhysicalValueX' => 'Valore fisico valore X pixel di riferimento', 'ReferencePixelPhysicalValueY' => 'Valore fisico valore Y pixel di riferimento', 'ReferencePixelX0' => 'Pixel X0 di riferimento', 'ReferencePixelY0' => 'Pixel Y0 di riferimento', 'ReferencePriority' => 'Priorità riferimento', 'ReferenceService' => 'Riferimento di servizio', 'ReferenceToRecordedSound' => 'Riferimento a suono registrato', 'ReferenceVirtual' => 'Riferimento virtuale', 'Refresh' => 'Aggiorna', 'RegionCode' => 'Codice regione', 'RegionInfo' => 'Info regione', 'RegionList' => 'Elenco regioni', 'RegionName' => 'Nome regione', 'RegionOfResidence' => 'Regione di residenza', 'RelatedImageFileFormat' => 'Formato file immagine correlato', 'RelatedImageHeight' => 'Numero delle righe dei dati immagine', 'RelatedImageWidth' => 'Larghezza immagine correlata', 'RelatedSoundFile' => 'File audio relativo', 'Relation' => 'Relazione', 'RelativeVolumeAdjustment' => 'Correzione relativa volume', 'ReleaseButtonToUseDial' => { PrintConv => { 'Yes' => 'Sì', }, }, 'ReleaseDate' => 'Data di rilascio', 'ReleaseMode' => { PrintConv => { 'Normal' => 'Normale', 'n/a' => 'n/d', }, }, 'ReleaseTime' => 'Ora di rilascio', 'RenderingIntent' => { PrintConv => { 'ICC-Absolute Colorimetric' => 'Colorimetrico Assoluto', 'Media-Relative Colorimetric' => 'Colorimetrico Relativo', 'Perceptual' => 'Percentuale', 'Saturation' => 'Saturazione', }, }, 'RenderingType3D' => 'Tipo resa 3D', 'RepeatingFlashCount' => 'Conteggio ripetizione flash', 'RepeatingFlashOutput' => 'Uscita ripetizione flash', 'RepeatingFlashRate' => 'Frequenza ripetizione flash', 'ReplyTo' => 'Rispondi a', 'Resaved' => { PrintConv => { 'Yes' => 'Sì', }, }, 'Reserved' => 'Riservato', 'Reserved1' => 'Riservato 1', 'Resolution' => 'Risoluzione', 'ResolutionMode' => 'Modo risoluzione', 'ResolutionUnit' => { Description => 'Unità risoluzione', PrintConv => { 'None' => 'Nessuno', 'inches' => 'Pollici', }, }, 'ResonantNucleus' => 'Nucleo risonante', 'ResourceID' => 'ID risorsa', 'ResourceType' => 'Tipo risorsa', 'Resources' => 'Risorse', 'ResourcesNeeded' => 'Risorse richieste', 'Restrictions' => 'Restrizioni', 'ResultsID' => 'ID risultati', 'RetouchHistory' => { Description => 'Cronologia ritocco', PrintConv => { 'Fisheye' => 'Fish-eye', 'None' => 'Nessuno', 'Quick Retouch' => 'Ritocco veloce', 'Red Eye' => 'Occhi rossi', 'Red Intensifier' => 'Intensificatore rosso', 'Resize' => 'Ridimensione', 'Sepia' => 'Seppia', 'Straighten' => 'Raddrizza', }, }, 'RetouchInfo' => 'Info ritocco', 'Reuse' => { Description => 'Riutilizza', PrintConv => { 'Not Applicable' => 'Non applicabile', }, }, 'ReverseIndicators' => 'Inverti indicatori', 'ReversedByteOrder' => 'Ordine byte invertito', 'Revision' => 'Revisione', 'RevisionDate' => 'Data revisione', 'RevisionNumber' => 'Numero revisione', 'RicohDate' => 'Data Ricoh', 'RicohImageHeight' => 'Altezza immagine Ricoh', 'RicohImageWidth' => 'Larghezza immagine Ricoh', 'RicohRDC2' => 'RDC2 Ricoh', 'RightAscension' => 'Ascensione retta', 'Robots' => 'Robot', 'RoleName' => 'Nome ruolo', 'RoomNumber' => 'Numero stanza', 'RoomOrSuiteName' => 'Numero stanza/suite', 'RootFormatVersion' => 'Versione formato radice', 'Rotation' => { Description => 'Rotazione', PrintConv => { 'Horizontal' => 'Orizzontale', 'Horizontal (Normal)' => 'Orizzontale (normale)', 'Horizontal (normal)' => 'Orizzontale (normale)', 'Rotate 180' => 'Ruota di 180°', 'Rotate 270 CW' => 'Ruota di 270° in senso orario', 'Rotate 90 CW' => 'Ruota di 90° senso orario', 'Rotated 180' => 'Ruotato di 180°', 'Rotated 270 CW' => 'Ruotato di 270° in senso orario', 'Rotated 90 CW' => 'Ruotato di 90° in senso orario', }, }, 'RotationAngle' => 'Angolo rotazione', 'RotationDirection' => 'Direzione rotazione', 'RowsPerStrip' => 'Righe per striscia', 'RunWindow' => { PrintConv => { 'Normal' => 'Normale', 'Restore' => 'Ripristina', }, }, 'SEMInfo' => 'Info SEM', 'SPIFFVersion' => 'Versione SPIFF', 'SRAWQuality' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SRActive' => { PrintConv => { 'Yes' => 'Sì', }, }, 'SRGBRendering' => { PrintConv => { 'Saturation' => 'Saturazione', }, }, 'SRResult' => { PrintConv => { 'Not ready' => 'Non pronto', }, }, 'SVGVersion' => 'Versione SVG', 'SafetyShiftInAvOrTv' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'SampleBits' => 'Bit campione', 'SampleFormat' => { Description => 'Formato campioni', PrintConv => { 'Complex float' => 'Virgola mobile immaginario', 'Complex int' => 'Intero immaginario', 'Float' => 'Virgola mobile', 'Signed' => 'Con segno', 'Undefined' => 'Non definito', 'Unsigned' => 'Senza segno', }, }, 'SampleIndex' => 'Indice campione', 'SampleRate' => 'Frequenza campionamento', 'SampleRate2' => 'Frequenza campionamento 2', 'SampleSize' => 'Dimensione campione', 'SampleSizes' => 'Dimensioni campione', 'SampleStructure' => 'Struttura d\'esempio', 'SampleText' => 'Testo d\'esempio', 'SamplesPerPixel' => 'Campioni per pixel', 'SamplesPerPixelUsed' => 'Campioni per pixel', 'SamplingFrequency' => 'Frequenza campionamento', 'Saturation' => { Description => 'Saturazione', PrintConv => { 'High' => 'Alta', 'Low' => 'Basso', 'None' => 'Nessuno', 'None (B&W)' => 'Nessuno (B&N)', 'Normal' => 'Normale', 'Vivid' => 'Vivace', }, }, 'SaturationAdj' => 'Correzione saturazione', 'SaturationFaithful' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SaturationLandscape' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SaturationMonochrome' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SaturationNeutral' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SaturationPortrait' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SaturationStandard' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SaturationUnknown' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SaturationUserDef1' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SaturationUserDef2' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SaturationUserDef3' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ScanImageEnhancer' => { PrintConv => { 'Off' => 'Spento', }, }, 'ScanningDirection' => { PrintConv => { 'R-L, Bottom-Top' => 'D-S, basso-alto', 'R-L, Top-Bottom' => 'D-S, alto-basso', }, }, 'Scene' => 'Scena', 'SceneArea' => 'Area scena', 'SceneCaptureType' => { Description => 'Tipo cattura scena', PrintConv => { 'Landscape' => 'Orizzontale', 'Night' => 'Notte', 'Portrait' => 'Verticale', }, }, 'SceneMode' => { Description => 'Modo scena', PrintConv => { '3D Sweep Panorama' => '3D', 'Anti Motion Blur' => 'Riduz. sfocat. movim.', 'Aperture Priority' => 'Priorità diaframma', 'Auto' => 'Automatico', 'Children' => 'Bambini', 'Cont. Priority AE' => 'AE prior. avan.cont.', 'Fireworks' => 'Fuochi artificiali', 'Handheld Night Shot' => 'Foto nott. senza trepp.', 'Landscape' => 'Orizzontale', 'Manual' => 'Manuale', 'Night Portrait' => 'Rit. notturno', 'Night Scene' => 'Visione notturna', 'Night View/Portrait' => 'Visione/Ritratto notturni', 'Normal' => 'Normale', 'Off' => 'Spento', 'Portrait' => 'Verticale', 'Program' => 'Programma', 'Scenery' => 'Paesaggio', 'Shutter Priority' => 'Priorità otturatore', 'Sports' => 'Evento sportivo', 'Sunset' => 'Tramonto', 'Sweep Panorama' => 'Panoramica ad arco', 'Text' => 'Testo', 'Vivid' => 'Vivace', 'n/a' => 'n/d', }, }, 'SceneModeUsed' => { Description => 'Modo scena usato', PrintConv => { 'Aperture Priority' => 'Priorità diaframma', 'Children' => 'Bambini', 'Fireworks' => 'Fuochi artificiali', 'Landscape' => 'Orizzontale', 'Manual' => 'Manuale', 'Portrait' => 'Verticale', 'Program' => 'Programma', 'Shutter Priority' => 'Priorità otturatore', 'Sunset' => 'Tramonto', 'Text' => 'Testo', }, }, 'SceneNumber' => 'Numero scena', 'SceneSelect' => { PrintConv => { 'Night' => 'Scena notturna', 'Off' => 'Spento', }, }, 'SceneType' => { Description => 'Tipo scena', PrintConv => { 'Directly photographed' => 'Immagine fotografata direttamente', }, }, 'School' => 'Scuola', 'ScreenTips' => { PrintConv => { 'Off' => 'Spento', }, }, 'Section' => 'Sezione', 'SectorSize' => 'Dimensione settore', 'Security' => { Description => 'Sicurezza', PrintConv => { 'None' => 'Nessuno', }, }, 'SecurityClassification' => { Description => 'Classificazione sicurezza', PrintConv => { 'Confidential' => 'Confidenziale', 'Restricted' => 'Riservato', 'Secret' => 'Segreto', 'Top Secret' => 'Massima segretezza', 'Unclassified' => 'Non classificato', }, }, 'SelectAFAreaSelectMode' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'SelectableAFPoint' => { PrintConv => { '11 points' => '11 punti', }, }, 'Selected' => 'Selezionato', 'SelfTimer' => { Description => 'Autoscatto', PrintConv => { 'Off' => 'Spento', }, }, 'SelfTimer2' => 'Autoscatto 2', 'SelfTimerInterval' => 'Intervallo autoscatto', 'SelfTimerMode' => 'Modo autoscatto', 'SelfTimerTime' => 'Tempo autoscatto', 'SenderAddress' => 'Indirizzo mittente', 'SenderName' => 'Nome mittente', 'SensingMethod' => { Description => 'Metodo misurazione esposimetrica', PrintConv => { 'Color sequential area' => 'Area sequenziale a colori', 'Color sequential linear' => 'Lineare sequenziale a colori', 'Not defined' => 'Non definito', 'One-chip color area' => 'Sensore area a colori a un chip', 'Three-chip color area' => 'Sensore area a colori a tre chip', 'Trilinear' => 'Trilineare', 'Two-chip color area' => 'Sensore area a colori a due chip', }, }, 'Sensitivity' => 'Sensibilità', 'SensitivityCalibrated' => 'Sensibilità calibrata', 'SensitivitySteps' => { Description => 'Passi sensibilità', PrintConv => { '1 EV Steps' => 'Step 1 EV', }, }, 'SensitivityType' => { Description => 'Tipo sensibilità', PrintConv => { 'ISO Speed' => 'Velocità ISO', 'Recommended Exposure Index' => 'Indice esposizione raccomandato', 'Recommended Exposure Index and ISO Speed' => 'Indice esposizione raccomandato e velocità ISO', 'Standard Output Sensitivity' => 'Sensibilità predefinita uscita', 'Standard Output Sensitivity and ISO Speed' => 'Sensibilità predefinita uscita e velocità ISO', 'Standard Output Sensitivity and Recommended Exposure Index' => 'Sensibilità predefinita uscita e indice esposizione consigliato', 'Standard Output Sensitivity, Recommended Exposure Index and ISO Speed' => 'Sensibilità predefinita uscita, indice esposizione consigliato e velocità ISO', 'Unknown' => 'Sconosciuto', }, }, 'SensorAreas' => 'Aree sensore', 'SensorCleaning' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'SensorHeight' => 'Altezza sensore', 'SensorID' => 'ID sensore', 'SensorLeftBorder' => 'Bordo sinistro sensore', 'SensorMode' => 'Modo sensore', 'SensorPixelSize' => 'Dimensione pixel sensore', 'SensorRedLevel' => 'Livello rosso sensore', 'SensorSize' => 'Dimensione sensore', 'SensorTemperature' => 'Temperatura sensore', 'SensorTopBorder' => 'Bordo superiore sensore', 'SensorType' => 'Tipo sensore', 'SensorTypeCode' => 'Codice tipo sensore', 'SensorWidth' => 'Larghezza sensore', 'Sequence' => 'Sequenza', 'SequenceName' => 'Nome sequenza', 'SequenceNumber' => { Description => 'Numero sequenza', PrintConv => { 'n/a' => 'n/d', }, }, 'SequenceShotInterval' => { PrintConv => { '10 frames/s' => '10 frame/s', }, }, 'SequentialShot' => { PrintConv => { 'None' => 'Nessuno', }, }, 'SerialNumber' => 'Numero di serie', 'SerialNumberFormat' => { Description => 'Formato numero di serie', PrintConv => { 'Format 1' => 'Formato 1', 'Format 2' => 'Formato 2', }, }, 'ServiceID' => 'ID servizio', 'ServiceIdentifier' => 'Identificativo servizio', 'ServiceOrganizationName' => 'Nome organizzazione servizio', 'SetButtonCrossKeysFunc' => { PrintConv => { 'Normal' => 'Normale', }, }, 'SetButtonWhenShooting' => { PrintConv => { 'Change ISO speed' => 'Cambia velocità ISO', 'Change parameters' => 'Cambia parametri', 'ISO speed' => 'Velocità ISO', 'Normal (disabled)' => 'Normale (disabilitato)', 'White balance' => 'Bilanciameno bianco', }, }, 'SetCookie' => 'Imposta cookie', 'SetFunctionWhenShooting' => { PrintConv => { 'Change Parameters' => 'Cambia parametri', }, }, 'SetInfo' => 'Imposta info', 'SetSubtitle' => 'Imposta sottotitoli', 'ShadingCompensation' => { Description => 'Compensazione ombreggiatura', PrintConv => { 'Off' => 'Spento', }, }, 'ShadingCompensation2' => { Description => 'Compensazione ombreggiatura 2', PrintConv => { 'Off' => 'Spento', }, }, 'Shadow' => 'Ombra', 'ShadowCorrection' => { PrintConv => { 'Normal' => 'Normale', 'Off' => 'Spento', 'Strong' => 'Forte', }, }, 'ShadowScale' => 'Scala ombre', 'Shadows' => 'Ombre', 'ShakeReduction' => { PrintConv => { 'Off' => 'Spento', 'Off (4)' => 'Spento (4)', }, }, 'SharedData' => 'Dati condivisi', 'Sharpening' => { PrintConv => { 'Low' => 'Basso', 'Normal' => 'Normale', 'Off' => 'Spento', }, }, 'Sharpness' => { Description => 'Nitidezza', PrintConv => { 'Hard' => 'Forte', 'Normal' => 'Normale', 'Soft' => 'Leggera', 'n/a' => 'n/d', }, }, 'SharpnessFaithful' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SharpnessFrequency' => { PrintConv => { 'Low' => 'Basso', 'n/a' => 'n/d', }, }, 'SharpnessLandscape' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SharpnessMonochrome' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SharpnessNeutral' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SharpnessPortrait' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SharpnessStandard' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SharpnessUnknown' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SharpnessUserDef1' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SharpnessUserDef2' => { PrintConv => { 'n/a' => 'n/d', }, }, 'SharpnessUserDef3' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ShootingMode' => { Description => 'Modo scatto', PrintConv => { 'Aperture Priority' => 'Priorità diaframma', 'Fireworks' => 'Fuochi artificiali', 'Manual' => 'Manuale', 'Normal' => 'Normale', 'Portrait' => 'Verticale', 'Program' => 'Programma', 'Scenery' => 'Paesaggio', 'Shutter Priority' => 'Priorità otturatore', 'Sunset' => 'Tramonto', }, }, 'ShootingModeSetting' => { Description => 'Impostazione modo scatto', PrintConv => { 'Self-timer' => 'Autoscatto', }, }, 'ShortComment' => 'Commento breve', 'ShortDescription' => 'Descrizione breve', 'ShortDocumentID' => 'ID documento breve', 'ShortReleaseTimeLag' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'ShotComment' => 'Commento scatto', 'ShotCommentKind' => 'Tipo commento scatto', 'ShotDate' => 'Data scatto', 'ShotDay' => 'Giorno scatto', 'ShotDescription' => 'Descrizione scatto', 'ShotDuration' => 'Durata scatto', 'ShotInfoVersion' => 'Info versione scatto', 'ShotList' => 'Elenco scatti', 'ShotLocation' => 'Posizione scatto', 'ShotLocationSets' => 'Insiemi posizione scatto', 'ShotName' => 'Nome scatto', 'ShotNumber' => 'Numero scatto', 'ShotSize' => 'Dimensione scatto', 'ShutterCount' => 'Conteggio scatti', 'ShutterMode' => { PrintConv => { 'Aperture Priority' => 'Priorità diaframma', }, }, 'ShutterReleaseButtonAE-L' => { PrintConv => { 'Off' => 'Spento', }, }, 'ShutterReleaseNoCFCard' => { PrintConv => { 'Yes' => 'Sì', }, }, 'ShutterSpeed' => 'Tempo esposizione', 'ShutterSpeedRange' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'ShutterSpeedValue' => 'Velocità otturatore', 'SideNumber' => 'Numero lato', 'Sidebars' => 'Barre laterali', 'SimilarityIndex' => 'Indice di Somiglianza', 'SingleFrameBracketing' => { PrintConv => { 'Low' => 'Basso', }, }, 'Site' => 'Sito', 'Size' => 'Dimensioni', 'SlideShow' => { PrintConv => { 'Yes' => 'Sì', }, }, 'SlowShutter' => { PrintConv => { 'None' => 'Nessuno', 'Off' => 'Spento', 'n/a' => 'n/d', }, }, 'SlowSync' => { PrintConv => { 'Off' => 'Spento', }, }, 'SmartRange' => { PrintConv => { 'Off' => 'Spento', }, }, 'SmileShutter' => { PrintConv => { 'Off' => 'Spento', }, }, 'Smoothness' => 'Arrotondamento', 'Software' => 'Software utilizzato', 'Source' => 'Origine', 'SourceTitle' => 'Titolo fonte', 'SourceTrackID' => 'ID traccia fonte', 'SourceTrackIDs' => 'ID traccia fonte', 'SourceType' => 'Tipo fonte', 'SourceURL' => 'URL fonte', 'SourceValue' => 'Valore fonte', 'SpatialFrequencyResponse' => 'Risposta in frequenza spaziale', 'SpecialBuild' => 'Compilazione speciale', 'SpecialEffectMode' => { PrintConv => { 'Off' => 'Spento', }, }, 'SpecialEffectSetting' => { PrintConv => { 'Off' => 'Spento', }, }, 'SpecialEffectsOpticalFilter' => { PrintConv => { 'None' => 'Nessuno', 'Star' => 'Stella', }, }, 'SpecialInstructions' => 'Istruzioni', 'SpectralSensitivity' => 'Sensibilità spettro', 'Speed' => { Description => 'Velocità', PrintConv => { 'Fast' => 'Veloce', 'Medium' => 'Medio', 'Slow' => 'Lento', }, }, 'SpotMeteringMode' => { PrintConv => { 'Center' => 'Centro', }, }, 'StandardOutputSensitivity' => 'Sensibilità predefinita uscita', 'StartTime' => 'Ora inizio', 'State' => 'Stato', 'StorageMethod' => { PrintConv => { 'Linear' => 'Lineare', }, }, 'StreamType' => { PrintConv => { 'File Transfer' => 'Trasferimento file', 'Text' => 'Testo', }, }, 'StretchMode' => { PrintConv => { 'Fixed length' => 'Lunghezza fissa', }, }, 'StripByteCounts' => 'Byte per striscia', 'StripOffsets' => 'Offset striscia', 'StripRowCounts' => 'Numero righe striscia', 'Sub-location' => 'Località', 'SubSecCreateDate' => 'Data di creazione', 'SubSecDateTimeOriginal' => 'Data/ora originali', 'SubSecModifyDate' => 'Data modifica', 'SubSecTime' => 'Sottosecondi ora', 'SubSecTimeDigitized' => 'Sottosecondi ora digitalizzazione', 'SubSecTimeOriginal' => 'Sottosecondi ora originale', 'SubTileBlockSize' => 'Dimensione blocco sotto-tasselli', 'SubfileType' => { Description => 'Tipo sotto-file', PrintConv => { 'Full-resolution Image' => 'Immagine con risoluzione originale', 'Reduced-resolution image' => 'Immagine a risoluzione ridotta', 'Single page of multi-page image' => 'Singola pagina di un\'immagine multi-pagina', 'Single page of multi-page reduced-resolution image' => 'Singola pagina di un\'immagine multi-pagina a risoluzione ridotta', 'TIFF-FX mixed raster content' => 'Contenuto raster misto TIFF-FX', 'TIFF/IT final page' => 'Pagina finale TIFF/IT', 'Thumbnail image' => 'Miniatura', 'Transparency mask' => 'Maschera trasparenza', 'Transparency mask of multi-page image' => 'Maschera trasparenza di immagine multi-pagina', 'Transparency mask of reduced-resolution image' => 'Maschera trasparenza di immagine a risoluzione ridotta', 'Transparency mask of reduced-resolution multi-page image' => 'Maschera trasparenza di immagine multi-pagina a risoluzione ridotta', 'invalid' => 'non valido', }, }, 'SubimageColor' => { PrintConv => { 'RGB (uncalibrated)' => 'RGB (non calibrato)', 'RGB with Opacity' => 'RGB con opacità', 'RGB with Opacity (uncalibrated)' => 'RGB con opacità (non calibrato)', }, }, 'Subject' => 'Soggetto', 'SubjectArea' => 'Area soggetto', 'SubjectCode' => 'Codice sottetto', 'SubjectDistance' => 'Distanza soggetto', 'SubjectDistanceRange' => { Description => 'Intervallo distanza soggetto', PrintConv => { 'Close' => 'Vicino', 'Distant' => 'Lontano', 'Unknown' => 'Sconosciuto', }, }, 'SubjectLocation' => 'Posizione soggetto', 'SubjectName' => 'Nome soggetto', 'SubjectProgram' => { PrintConv => { 'None' => 'Nessuno', 'Portrait' => 'Verticale', 'Sunset' => 'Tramonto', 'Text' => 'Testo', }, }, 'SubjectReference' => 'Codice Soggetto', 'SubjectUnits' => { PrintConv => { 'radians' => 'Radianti', }, }, 'Subsystem' => { Description => 'Sottosistema', PrintConv => { 'EFI ROM' => 'ROM EFI', 'EFI application' => 'Applicazione EFI', 'EFI boot service' => 'Servizio di avvio EFI', 'EFI runtime driver' => 'Driver a runtine EFI', 'Native' => 'Nativo', 'OS/2 command line' => 'Linea di comando OS/2', 'POSIX command line' => 'Linea di comando POSIX', 'Unknown' => 'Sconosciuto', 'Windows command line' => 'Linea di comando Windows', }, }, 'SubsystemVersion' => 'Versione sottosistema', 'Subtitle' => 'Sottotitolo', 'Suffix' => 'Suffisso', 'SuggestedPalette' => 'Tavolozza suggerita', 'Summary' => 'Sommario', 'SuperMacro' => { PrintConv => { 'Off' => 'Spento', }, }, 'SuperimposedDisplay' => { PrintConv => { 'Off' => 'Spento', }, }, 'SupplementalCategories' => 'Categoria Supplementare', 'SupplementalType' => { PrintConv => { 'Main Image' => 'Non impostato', 'Rasterized Caption' => 'Didascalia rasterizzata', 'Reduced Resolution Image' => 'Risoluzione immagine ridotta', }, }, 'SurroundMode' => { PrintConv => { 'Not Dolby surround' => 'Non Dolby surround', 'Not indicated' => 'Non indicato', }, }, 'SweepPanoramaDirection' => { Description => 'Direzione panoramica ad arco', PrintConv => { 'Left' => 'Sinistra', 'Right' => 'Destra', }, }, 'SweepPanoramaSize' => 'Dimensione panoramica ad arco', 'SwitchToRegisteredAFPoint' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'SynchronizedLyricText' => 'Testo sincronizzato', 'SystemNameOrNumber' => 'Nome/numero sistema', 'T4Options' => { Description => 'Opzioni T4', PrintConv => { '2-Dimensional encoding' => 'Codifica 2D', 'Fill bits added' => 'Bit di riempimento aggiunti', 'Uncompressed' => 'Non compresso', }, }, 'T6Options' => { Description => 'Opzioni T6', PrintConv => { 'Uncompressed' => 'Non compresso', }, }, 'T82Options' => 'Opzioni T82', 'T88Options' => 'Opzioni T88', 'TIFFPreview' => 'Anteprima TIFF', 'TIFFSummary' => 'Sommario TIFF', 'TIFF_FXExtensions' => { Description => 'Estensioni TIFF FX', PrintConv => { 'B&W JBIG2' => 'JBIG2 bianco e nero', 'JBIG2 Profile M' => 'JBIG2 TIFF FX', 'N Layer Profile M' => 'Livello N profilo M', 'Resolution/Image Width' => 'Risoluzione/larghezza immagine', 'Shared Data' => 'Dati condivisi', }, }, 'Tagged' => { PrintConv => { 'Yes' => 'Sì', }, }, 'TaggingTime' => 'Ora tag', 'TargetDeltaType' => { PrintConv => { 'Absolute' => 'Assoluto', }, }, 'TargetPrinter' => 'Stampante di destinazione', 'Technology' => { Description => 'Tecnologia', PrintConv => { 'Active Matrix Display' => 'Display a matrice attiva', 'Cathode Ray Tube Display' => 'Monitor con Tubo a Raggi Catodici', 'Digital Camera' => 'Fotocamera Digitale', 'Dye Sublimation Printer' => 'Stampante a Sublimazione Termica', 'Electrophotographic Printer' => 'Stampante Laser', 'Electrostatic Printer' => 'Stampante Elettrostatica', 'Film Scanner' => 'Scanner per Pellicola', 'Ink Jet Printer' => 'Stampante Ink Jet', 'Offset Lithography' => 'Litografía Offset', 'Passive Matrix Display' => 'Display a Matrice passiva', 'Photographic Paper Printer' => 'Stampante per Carta Fotografica', 'Projection Television' => 'Proiettore televisivo', 'Reflective Scanner' => 'Scanner a riflessione', 'Thermal Wax Printer' => 'Stampante Thermal Wax', }, }, 'Teleconverter' => { PrintConv => { 'None' => 'Nessuno', }, }, 'Temperature' => 'Temperatura', 'Template' => 'Modello', 'TermsOfUse' => 'Termini di utilizzo', 'TestTarget' => { PrintConv => { 'Grayscale' => 'Scala di grigi', }, }, 'Text' => 'Testo', 'TextColor' => 'Colore testo', 'TextComments' => 'Testo commenti', 'TextEncoding' => { Description => 'Codifica testo', PrintConv => { 'n/a' => 'n/d', }, }, 'TextFace' => { Description => 'Aspetto testo', PrintConv => { 'Extend' => 'Estendi', 'Italic' => 'Corsivo', 'Shadow' => 'Ombra', }, }, 'TextFont' => { Description => 'Carattere testo', PrintConv => { 'System' => 'Sistema', }, }, 'TextLayers' => 'Livelli testo', 'TextSize' => 'Dimenione testo', 'TextStamp' => { PrintConv => { 'Off' => 'Spento', }, }, 'TextString' => 'Stringa testo', 'TextValue' => 'Valore testo', 'Thresholding' => { Description => 'Soglia', PrintConv => { 'No dithering or halftoning' => 'Nessun dithering o resa a mezzi toni', 'Randomized dither' => 'Dither casuale', }, }, 'ThumbnailFileName' => 'Nome file miniatura', 'ThumbnailFormat' => 'Formato miniatura', 'ThumbnailHeight' => 'Miniatura', 'ThumbnailImage' => 'Miniatura', 'ThumbnailImageName' => 'Nome miniatura', 'ThumbnailImageSize' => 'Dimensione miniatura', 'ThumbnailImageType' => 'Tipo miniatura', 'ThumbnailImageValidArea' => 'Area valida miniatura', 'ThumbnailLength' => 'Dimensioni miniatura', 'ThumbnailOffset' => 'Offset miniatura', 'ThumbnailWidth' => 'Larghezza miniatura', 'Thumbnails' => 'Miniature', 'TileByteCounts' => 'Byte tassello', 'TileDepth' => 'Profondità tassello', 'TileLength' => 'Lunghezza tassello', 'TileOffsets' => 'Offset tasselli', 'TileWidth' => 'Larghezza tassello', 'Tiles' => 'Tasselli', 'Time' => 'Ora', 'TimeCreated' => 'Ora di Creazione', 'TimeSent' => 'Ora d\'invio', 'TimeStamp' => 'Marcatura oraria', 'TimeStamp1' => 'Marcatura oraria 1', 'TimeZone' => 'Fuso orario', 'TimeZoneCity' => { Description => 'Città fuso orario', PrintConv => { 'London' => 'Londra', 'Tehran' => 'Teheran', 'n/a' => 'n/d', }, }, 'TimeZoneCode' => 'Codice fuso orario', 'TimeZoneInfo' => 'Info fuso orario', 'TimeZoneOffset' => 'Scostamento fuso orario', 'TimerFunctionButton' => { PrintConv => { 'Self-timer' => 'Autoscatto', 'Shooting Mode' => 'Modo scatto', 'White Balance' => 'Bilanciameno bianco', }, }, 'TimerLength' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'Tint' => 'Tinta', 'Title' => 'Titolo', 'Title2' => 'Titolo 2', 'TitleKind' => 'Tipo titolo', 'TitleLen' => 'Lungh titolo', 'TitleNum' => 'Num titolo', 'TitleOfParts' => 'Titolo parti', 'TitleSortOrder' => 'Ordinamento titolo', 'TitlesOfParts' => 'Titoli parti', 'TitlesSets' => 'Insiemi di titoli', 'ToDoTitle' => 'Titolo da fare', 'ToneComp' => 'Compensazione Tono', 'ToneCurve' => { PrintConv => { 'Manual' => 'Manuale', }, }, 'ToneCurveActive' => { PrintConv => { 'Yes' => 'Sì', }, }, 'ToneCurveName' => { PrintConv => { 'Linear' => 'Lineare', 'Strong Contrast' => 'Contrasto elevato', }, }, 'ToneCurveProperty' => { PrintConv => { 'Linear' => 'Lineare', 'Shot Settings' => 'Impostazioni scatto', }, }, 'ToningEffect' => { PrintConv => { 'Blue-green' => 'Blu-Verde', 'Green' => 'Verde', 'None' => 'Nessuno', 'Purple' => 'Porpora', 'Purple-blue' => 'Porpora-blu', 'Red' => 'Rosso', 'Red-purple' => 'Rosso-porpora', 'Sepia' => 'Seppia', 'Yellow' => 'Giallo', 'n/a' => 'n/d', }, }, 'ToningEffectFaithful' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ToningEffectLandscape' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ToningEffectMonochrome' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Nessuno', 'Purple' => 'Porpora', 'Sepia' => 'Seppia', 'n/a' => 'n/d', }, }, 'ToningEffectNeutral' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ToningEffectPortrait' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ToningEffectStandard' => { PrintConv => { 'n/a' => 'n/d', }, }, 'ToningEffectUnknown' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Nessuno', 'Purple' => 'Porpora', 'Sepia' => 'Seppia', 'n/a' => 'n/d', }, }, 'ToningEffectUserDef1' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Nessuno', 'Purple' => 'Porpora', 'Sepia' => 'Seppia', 'n/a' => 'n/d', }, }, 'ToningEffectUserDef2' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Nessuno', 'Purple' => 'Porpora', 'Sepia' => 'Seppia', 'n/a' => 'n/d', }, }, 'ToningEffectUserDef3' => { PrintConv => { 'Green' => 'Verde', 'None' => 'Nessuno', 'Purple' => 'Porpora', 'Sepia' => 'Seppia', 'n/a' => 'n/d', }, }, 'ToolName' => 'Nome strumento', 'ToolVersion' => 'Versione strumento', 'TotalFrames' => 'Frame totali', 'Track' => 'Traccia', 'TrackProperty' => { PrintConv => { 'Read only' => 'Sola lettura', }, }, 'TransferFunction' => 'Funzione di trasferimento', 'TransferRange' => 'Intervallo di trasferimento', 'Transform' => { PrintConv => { 'Off' => 'Spento', }, }, 'Transformation' => { Description => 'Trasformazione', PrintConv => { 'Horizontal (normal)' => 'Orizzontale (normale)', 'Mirror horizontal' => 'Rifletti orizzontalmente', 'Mirror horizontal and rotate 270 CW' => 'Rifletti orizzontalmente e ruota di 270° in senso orario', 'Mirror horizontal and rotate 90 CW' => 'Rifletti orizzontalmente e ruota di 90° in senso orario', 'Mirror vertical' => 'Rifletti verticalmente', 'Rotate 180' => 'Ruota di 180°', 'Rotate 270 CW' => 'Ruota di 270° in senso orario', 'Rotate 90 CW' => 'Ruota di 90° senso orario', }, }, 'TransmissionReference' => 'Riferimento trasmissione', 'TransparencyIndicator' => 'Indicatore trasparenza', 'TrapIndicator' => 'Indicatore trap', 'Trapped' => { PrintConv => { 'False' => 'Falso', 'Unknown' => 'Sconosciuto', }, }, 'TungstenAWB' => { PrintConv => { 'Strong Correction' => 'Correzione elevata', }, }, 'TxFace' => 'Stile carattere testo', 'TxFont' => 'Numero carattere', 'TxSize' => 'Dimenione testo', 'UIC1Tag' => 'Tag UIC1', 'UIC2Tag' => 'Tag UIC2', 'UIC3Tag' => 'Tag UIC3', 'UIC4Tag' => 'Tag UIC4', 'USPTOOriginalContentType' => { PrintConv => { 'Color' => 'Colore', 'Grayscale' => 'Scala di grigi', 'Text or Drawing' => 'Testo o disegno', }, }, 'UV-IRFilterCorrection' => { PrintConv => { 'Not Active' => 'Non attivo', }, }, 'Uncompressed' => { Description => 'Non compresso', PrintConv => { 'Yes' => 'Sì', }, }, 'UninitializedDataSize' => 'Dimensione dati non inizializzati', 'UniqueCameraModel' => 'Modello unico fotocamera', 'UniqueDocumentID' => 'ID Unico del Documento', 'Units' => 'Unità', 'Unknown' => 'Sconosciuto', 'Unsharp1Color' => { PrintConv => { 'Green' => 'Verde', 'Red' => 'Rosso', 'Yellow' => 'Giallo', }, }, 'Unsharp2Color' => { PrintConv => { 'Green' => 'Verde', 'Red' => 'Rosso', 'Yellow' => 'Giallo', }, }, 'Unsharp3Color' => { PrintConv => { 'Green' => 'Verde', 'Red' => 'Rosso', 'Yellow' => 'Giallo', }, }, 'Unsharp4Color' => { PrintConv => { 'Green' => 'Verde', 'Red' => 'Rosso', 'Yellow' => 'Giallo', }, }, 'UnsharpMask' => { PrintConv => { 'Off' => 'Spento', }, }, 'Urgency' => { Description => 'Urgenza', PrintConv => { '0 (reserved)' => '0 (riservato)', '1 (most urgent)' => '1 (molto urgente)', '5 (normal urgency)' => '5 (urgenza normale)', '8 (least urgent)' => '8 (meno urgent)e', '9 (user-defined priority)' => '9 (riservato per usi futuri)', }, }, 'UsableMeteringModes' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'UsableShootingModes' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'UserAccess' => { PrintConv => { 'Print' => 'Stampa', }, }, 'UserComment' => 'Commento utente', 'UserDef1PictureStyle' => { PrintConv => { 'Landscape' => 'Orizzontale', 'Portrait' => 'Verticale', }, }, 'UserDef2PictureStyle' => { PrintConv => { 'Landscape' => 'Orizzontale', 'Portrait' => 'Verticale', }, }, 'UserDef3PictureStyle' => { PrintConv => { 'Landscape' => 'Orizzontale', 'Portrait' => 'Verticale', }, }, 'UserDefinedText' => 'Testo personalizzato', 'UserDefinedURL' => 'URL personalizzato', 'VFDisplayIllumination' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'VRDVersion' => 'Versione VRD', 'VRInfo' => 'Info Riduzione Vibrazione', 'VRInfoVersion' => 'Info Versione VR', 'VR_0x66' => { PrintConv => { 'Off' => 'Spento', }, }, 'Value' => 'Valore', 'VariousModes' => 'Modi vari', 'VariousModes2' => 'Modi vari 2', 'Version' => 'Numero versione immagine', 'Version2' => 'Versione 2', 'VersionBF' => 'Versione BF', 'VersionCreateDate' => 'Data creazione versione', 'VersionID' => 'ID versione', 'VersionIdentifier' => 'Identificativo versione', 'VersionInfo' => 'Info versione', 'VersionModifyDate' => 'Data modifica versione', 'VersionNumber' => 'Numero versione', 'VersionNumberString' => 'Stringa numero versione', 'VersionTitle' => 'Titolo versione', 'VersionYear' => 'Anno versione', 'Versions' => 'Versioni', 'VerticalCSType' => { PrintConv => { 'Caspian Sea' => 'Mar Caspio', 'WGS 84 ellipsoid' => 'Ellissoide WGS 84', }, }, 'VerticalUnits' => 'Unità verticali', 'VibrationReduction' => { Description => 'Riduzione vibrazione', PrintConv => { 'Off' => 'Spento', 'n/a' => 'n/d', }, }, 'VideoAlphaMode' => { PrintConv => { 'None' => 'Nessuno', }, }, 'VideoAttributes' => { PrintConv => { 'Encrypted' => 'Crittografato', }, }, 'VideoBitrate' => 'Bitrate video', 'VideoCardGamma' => 'Gamma della Scheda Video', 'VideoCodec' => 'Codec video', 'VideoCodecDescription' => 'Descrizione codec video', 'VideoCodecID' => 'ID codec video', 'VideoCodecInfo' => 'Info codec video', 'VideoCodecName' => 'Nome codec video', 'VideoFieldOrder' => { PrintConv => { 'Progressive' => 'Progressivo', }, }, 'VideoQuality' => { PrintConv => { 'Low' => 'Basso', }, }, 'VideoScanType' => { PrintConv => { 'Progressive' => 'Progressivo', }, }, 'VideoStreamType' => { PrintConv => { 'Reserved' => 'Riservato', }, }, 'ViewInfoDuringExposure' => { PrintConv => { 'Enable' => 'Abilita', }, }, 'ViewfinderWarning' => { PrintConv => { 'Off' => 'Spento', }, }, 'ViewingCondDesc' => 'Descrizione Condizioni di Visualizzazione', 'ViewingMode2' => { PrintConv => { 'n/a' => 'n/d', }, }, 'VignetteControl' => { PrintConv => { 'Low' => 'Basso', 'Normal' => 'Normale', 'Off' => 'Spento', }, }, 'VignettingCorrection' => { PrintConv => { 'Off' => 'Spento', 'n/a' => 'n/d', }, }, 'VirtualImageHeight' => 'Altezza immagine virtuale', 'VirtualImageWidth' => 'Larghezza immagine virtuale', 'VirtualPageUnits' => 'Unità pagina virtuale', 'VoiceMemo' => { PrintConv => { 'Off' => 'Spento', }, }, 'WBAdjLighting' => { PrintConv => { 'Daylight (direct sunlight)' => 'Luce del giorno (0)', 'Daylight (shade)' => 'Luce del giorno (1)', 'Daylight (cloudy)' => 'Luce del giorno (2)', 'None' => 'Nessuno', }, }, 'WBBracketMode' => { PrintConv => { 'Off' => 'Spento', }, }, 'WBFineTuneActive' => { PrintConv => { 'Yes' => 'Sì', }, }, 'WCSProfiles' => 'Profilo Windows Color System', 'WhiteBalance' => { Description => 'Bilanciameno bianco', PrintConv => { 'Auto' => 'Equilibrio del bianco automatico', 'Black & White' => 'Monocromatico', 'Cloudy' => 'Nuvoloso', 'Color Temperature/Color Filter' => 'Temperatura colore / Filtro colore', 'Cool White Fluorescent' => 'Fluorescente bianca fredda', 'Custom' => 'Personalizzato', 'Custom 1' => 'PERSONAL.1', 'Custom 2' => 'PERSONAL.2', 'Custom 3' => 'PERSONAL.3', 'Custom 4' => 'PERSONAL.4', 'Day White Fluorescent' => 'Fluorescente a luce del giorno bianca', 'Daylight' => 'Luce del giorno', 'Daylight Fluorescent' => 'Fluorescente a luce del giorno', 'Fluorescent' => 'Fluorescente', 'Manual' => 'Manuale', 'Shade' => 'Ombrato', 'Tungsten' => 'Tungsteno (luce incandescente)', 'Unknown' => 'Sconosciuto', 'Warm White Fluorescent' => 'Luce fluorescente bianca calda', 'White Fluorescent' => 'Fluorescente bianca', }, }, 'WhiteBalance2' => 'Bilanciameno bianco 2', 'WhiteBalanceAdj' => { Description => 'Adattamento bilanciamento bianco', PrintConv => { 'Cloudy' => 'Nuvoloso', 'Daylight' => 'Luce del giorno', 'Fluorescent' => 'Fluorescente', 'Off' => 'Spento', 'Shade' => 'Ombrato', 'Shot Settings' => 'Impostazioni scatto', 'Tungsten' => 'Tungsteno (luce incandescente)', }, }, 'WhiteBalanceAutoAdjustment' => { Description => 'Adattamento automatico bilanciamento bianco', PrintConv => { 'Off' => 'Spento', }, }, 'WhiteBalanceBracketing' => { PrintConv => { 'Low' => 'Basso', 'Off' => 'Spento', }, }, 'WhiteBalanceFineTune' => 'Regolazione Fine Bilanciamento Bianco', 'WhiteBalanceMode' => { PrintConv => { 'Unknown' => 'Sconosciuto', }, }, 'WhiteBalanceSet' => { PrintConv => { 'Cloudy' => 'Nuvoloso', 'Daylight' => 'Luce del giorno', 'Daylight Fluorescent' => 'Fluorescente a luce del giorno', 'Manual' => 'Manuale', 'Shade' => 'Ombrato', 'Tungsten' => 'Tungsteno (luce incandescente)', 'White Fluorescent' => 'Fluorescente bianca', }, }, 'WhiteBalanceSetting' => { PrintConv => { 'Fluorescent (+1)' => 'Fluorescente (+1)', 'Fluorescent (+2)' => 'Fluorescente (+2)', 'Fluorescent (+3)' => 'Fluorescente (+3)', 'Fluorescent (-1)' => 'Fluorescente (-1)', 'Fluorescent (-2)' => 'Fluorescente (-2)', 'Fluorescent (-3)' => 'Fluorescente (-3)', 'Fluorescent (0)' => 'Fluorescente (0)', 'Shade (+1)' => 'Ombrato (+1)', 'Shade (+2)' => 'Ombrato (+2)', 'Shade (+3)' => 'Ombrato (+3)', 'Shade (-1)' => 'Ombrato (-1)', 'Shade (-2)' => 'Ombrato (-2)', 'Shade (-3)' => 'Ombrato (-3)', 'Shade (0)' => 'Ombrato (0)', }, }, 'WhiteLevel' => 'Livello bianco', 'WhitePoint' => 'Punto bianco', 'WideRange' => { PrintConv => { 'Off' => 'Spento', }, }, 'WidthResolution' => 'Risoluzione larghezza', 'Writer-Editor' => 'Autore Didascalia/Descrizione', 'XMethod' => { PrintConv => { 'No Magnification' => 'Nessun ingrandimento', }, }, 'XPAuthor' => 'Autore', 'XPComment' => 'Commento XP', 'XPKeywords' => 'Parole chiave XP', 'XPSubject' => 'Soggetto XP', 'XPTitle' => 'Titolo XP', 'XPosition' => 'Posizione X', 'XResolution' => 'Risoluzione orizzontale immagine', 'YCbCrCoefficients' => 'Coefficienti matrice trasformazione spazio colori', 'YCbCrPositioning' => { Description => 'Posizionamento Y e C', PrintConv => { 'Centered' => 'Centrato', 'Co-sited' => 'Affiancato', }, }, 'YCbCrSubSampling' => 'Indice sottocampionamento da Y a C', 'YMethod' => { PrintConv => { 'No Magnification' => 'Nessun ingrandimento', }, }, 'YPosition' => 'Posizione Y', 'YResolution' => 'Risoluzione verticale immagine', 'Year' => 'Anno', 'ZipCompression' => { PrintConv => { 'None' => 'Nessuno', 'Reduced with compression factor 1' => 'Ridotto con fattore compressione 1', 'Reduced with compression factor 2' => 'Ridotto con fattore compressione 2', 'Reduced with compression factor 3' => 'Ridotto con fattore compressione 3', 'Reduced with compression factor 4' => 'Ridotto con fattore compressione 4', }, }, 'ZoneMatching' => { Description => 'Adeguamento zona', PrintConv => { 'High Key' => 'Hi', 'ISO Setting Used' => 'Impostazione ISO usata', 'Low Key' => 'Lo', }, }, 'ZoneMatchingMode' => { PrintConv => { 'Off' => 'Spento', }, }, 'ZoneMatchingOn' => { PrintConv => { 'Off' => 'Spento', }, }, 'ZoomCenter' => 'Centro zoom', 'ZoomFactor' => 'Fattore di zoom', 'ZoomPos' => 'Posizione zoom', 'iTunesU' => 'ITunes U', ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::it.pm - ExifTool Italian language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke, Ferdinando Agovino, Emilio Dati and Michele Locati for providing this translation. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/ja.pm��������������������������������������������������000644 �000765 �000024 �00000627736 12642461343 021547� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: ja.pm # # Description: ExifTool Japanese language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::ja; use strict; use vars qw($VERSION); $VERSION = '1.22'; %Image::ExifTool::Lang::ja::Translate = ( 'AEAperture' => 'AE絞り', 'AEBAutoCancel' => { Description => 'ブラケティング自動解除', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'AEBBracketValue' => 'AEBブラケット値', 'AEBSequence' => 'ブラケティング順åº', 'AEBSequenceAutoCancel' => { Description => 'ブラケティング順åº/自動解除', PrintConv => { '-,0,+/Disabled' => 'ï¼â†’0 →+/ã—ãªã„', '-,0,+/Enabled' => 'ï¼â†’0 →+/ã™ã‚‹', '0,-,+/Disabled' => '0 →ï¼â†’+/ã—ãªã„', '0,-,+/Enabled' => '0 →ï¼â†’+/ã™ã‚‹', }, }, 'AEBShotCount' => 'ãƒ–ãƒ©ã‚±ãƒ†ã‚£ãƒ³ã‚°æ™‚ã®æ’®å½±æžšæ•°', 'AEBXv' => 'AEブラケット 露出補正', 'AEExposureTime' => 'AE露出時間', 'AEExtra' => 'AE特別?', 'AEInfo' => '自動露出情報', 'AELock' => { Description => 'AEロック', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'AELockButton' => { Description => 'AE-L/AF-L', PrintConv => { 'AE-L/AF Area' => 'AE-L/AFエリア', 'AE-L/AF-L/AF Area' => 'AE-L/AF-L/AFエリア', 'AF-L/AF Area' => 'AF-L/AFエリア', 'AF-ON/AF Area' => 'AFオン/AFエリア', 'FV Lock' => 'FVロック', 'Focus Area Selection' => 'ãƒ•ã‚©ãƒ¼ã‚«ã‚¹ã‚¨ãƒªã‚¢é¸æŠž', }, }, 'AEMaxAperture' => 'AE最大絞り', 'AEMaxAperture2' => 'AE最大絞り(2)', 'AEMeteringMode' => { Description => 'AE測光モード', PrintConv => { 'Multi-segment' => 'パターン', }, }, 'AEMeteringSegments' => '自動露出測光値', 'AEMinAperture' => 'AE最å°çµžã‚Š', 'AEMinExposureTime' => 'AE最å°éœ²å‡ºæ™‚é–“', 'AEProgramMode' => { Description => 'AEプログラムモード', PrintConv => { 'Av, B or X' => 'Av, Bã‹X', 'Candlelight' => 'キャンドルライト', 'DOF Program' => '深度優先プログラム', 'DOF Program (P-Shift)' => '深度優先プログラム(Pシフト)', 'Hi-speed Program' => '高速優先プログラム', 'Hi-speed Program (P-Shift)' => '高速優先プログラム(Pシフト)', 'Kids' => 'キッズ', 'Landscape' => '風景', 'M, P or TAv' => 'M, Pã‹TAv', 'MTF Program' => 'MTF優先プログラム', 'MTF Program (P-Shift)' => 'MTF優先プログラム(Pシフト)', 'Macro' => 'マクロ', 'Museum' => 'ミュージアム', 'Night Scene' => '夜景', 'Night Scene Portrait' => '人物ã€å¤œæ™¯', 'No Flash' => 'フラッシュ無ã—', 'Pet' => 'ペット', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Sport' => 'スãƒãƒ¼ãƒ„', 'Standard' => 'スタンダード', 'Sunset' => '夕日', 'Surf & Snow' => 'サーフ&スノー', 'Sv or Green Mode' => 'Svã‹ã‚°ãƒªãƒ¼ãƒ³ãƒ¢ãƒ¼ãƒ‰', 'Text' => 'テキスト', }, }, 'AESetting' => { Description => '自動露出設定', PrintConv => { 'Exposure Compensation' => '露出補正', }, }, 'AEXv' => 'AE 露出補正', 'AE_ISO' => 'AE ISO感度', 'AF-CPrioritySelection' => { Description => 'AF-Cãƒ—ãƒ©ã‚¤ã‚ªãƒªãƒ†ã‚£ãƒ¼é¸æŠž', PrintConv => { 'Focus' => 'フォーカス', 'Release' => 'レリーズ', 'Release + Focus' => 'レリーズ+フォーカス', }, }, 'AF-OnForMB-D10' => { Description => 'MB-D10用AFオン', PrintConv => { 'AE Lock (hold)' => 'AEロック(ホールド)', 'AE Lock (reset on release)' => 'AEロック(レリーズ時リセット)', 'AE Lock Only' => 'AEロックã®ã¿', 'AE/AF Lock' => 'AE/AFロック', 'AF Lock Only' => 'AFロックã®ã¿', 'AF-On' => 'AFオン', 'Same as FUNC Button' => 'ファンクションボタンã¨åŒä¸€', }, }, 'AF-SPrioritySelection' => { Description => 'AF-Sãƒ—ãƒ©ã‚¤ã‚ªãƒªãƒ†ã‚£ãƒ¼é¸æŠž', PrintConv => { 'Focus' => 'フォーカス', 'Release' => 'レリーズ', }, }, 'AFActivation' => { Description => 'AFアクティベーション', PrintConv => { 'AF-On Only' => 'AFオンã®ã¿', 'Shutter/AF-On' => 'シャッター/AFオン', }, }, 'AFAdjustment' => 'AF微調整', 'AFArea' => 'AFエリア', 'AFAreaHeight' => 'AFエリア高ã•', 'AFAreaHeights' => 'AFエリア高ã•', 'AFAreaIllumination' => { Description => 'AFエリアイルミãƒãƒ¼ã‚·ãƒ§ãƒ³', PrintConv => { 'Auto' => 'オート', 'Off' => 'オフ', 'On' => 'オン', }, }, 'AFAreaMode' => { Description => 'AFエリアモード', PrintConv => { '1-area' => '1点', '1-area (high speed)' => '高速1点', '3-area (center)?' => '3点中央?', '3-area (left)?' => '3点左?', '3-area (right)?' => '3点å³ï¼Ÿ', '5-area' => '5点', 'Auto-area' => '自動エリアAF', 'Dynamic Area' => 'ダイナミックエリア', 'Dynamic Area (closest subject)' => 'ダイナミック(é‡ç‚¹ä¸»é¡Œï¼‰', 'Dynamic Area (wide)' => 'ダイナミック(ワイド)', 'Face Detect AF' => '顔優先', 'Group Dynamic' => 'グループダイナミック', 'Normal?' => 'ノーマル?', 'Single Area' => 'シングルãƒã‚¤ãƒ³ãƒˆ', 'Single Area (wide)' => 'シングルãƒã‚¤ãƒ³ãƒˆï¼ˆãƒ¯ã‚¤ãƒ‰ï¼‰', 'Spot Focusing' => 'スãƒãƒƒãƒˆãƒ•ォーカス', 'Spot Mode On' => 'スãƒãƒƒãƒˆãƒ¢ãƒ¼ãƒ‰ã‚ªãƒ³', }, }, 'AFAreaModeSetting' => { Description => 'AFエリアモード', PrintConv => { 'Closest Subject' => 'オートエリア', 'Dynamic Area' => 'ダイナミックエリア', 'Single Area' => 'シングルãƒã‚¤ãƒ³ãƒˆ', }, }, 'AFAreaWidth' => 'AFエリア幅', 'AFAreaWidths' => 'AFエリア幅', 'AFAreas' => 'AFエリア', 'AFAssist' => { Description => 'AFアシスト', PrintConv => { 'Does not emit/Fires' => 'ã—ãªã„/ã™ã‚‹', 'Emits/Does not fire' => 'ã™ã‚‹/ã—ãªã„', 'Emits/Fires' => 'ã™ã‚‹/ã™ã‚‹', 'Off' => 'オフ', 'On' => 'オン', 'Only ext. flash emits/Fires' => '外部ストロボã®ã¿ã™ã‚‹/ã™ã‚‹', }, }, 'AFAssistBeam' => { Description => 'AFè£œåŠ©å…‰ã®æŠ•å…‰', PrintConv => { 'Does not emit' => 'ã—ãªã„', 'Emits' => 'ã™ã‚‹', 'Only ext. flash emits' => '外部ストロボã®ã¿ã™ã‚‹', }, }, 'AFDefocus' => 'AFã¼ã‘é‡', 'AFDuringLiveView' => { Description => 'ライブビュー撮影中ã®AF', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', 'Live mode' => 'ライブモード', 'Quick mode' => 'クイックモード', }, }, 'AFFineTune' => 'AFファインãƒãƒ¥ãƒ¼ãƒ³', 'AFFineTuneAdj' => 'AFファインãƒãƒ¥ãƒ¼ãƒ³', 'AFImageHeight' => 'AFç”»åƒé«˜ã•', 'AFImageWidth' => 'AFç”»åƒå¹…', 'AFInfo' => 'AFモード', 'AFInfo2' => 'AF情報', 'AFInfo2Version' => 'AF情報ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'AFIntegrationTime' => 'AFé›†ç©æ™‚é–“', 'AFMicroadjustment' => { Description => 'AFマイクロアジャストメント', PrintConv => { 'Adjust all by same amount' => '全レンズ一律調整', 'Adjust by lens' => 'レンズã”ã¨ã«èª¿æ•´', 'Disable' => 'ã—ãªã„', }, }, 'AFMode' => 'AFモード', 'AFOnAELockButtonSwitch' => { Description => 'AF-ON/AEロックボタン入替', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'AFPoint' => { Description => 'AFé¸æŠžãƒã‚¤ãƒ³ãƒˆ', PrintConv => { 'Auto AF point selection' => 'オートAFãƒã‚¤ãƒ³ãƒˆé¸æŠž', 'Bottom' => '下', 'Center' => '中央', 'Face Detect' => 'é¡”èªè­˜', 'Left' => 'å·¦', 'Manual AF point selection' => 'マニュアルAFãƒã‚¤ãƒ³ãƒˆé¸æŠž', 'Mid-left' => '中央左', 'Mid-right' => '中央å³', 'None' => 'ç„¡ã—', 'None (MF)' => 'ç„¡ã—(MF)', 'Right' => 'å³', 'Top' => '上', }, }, 'AFPointActivationArea' => { Description => 'AFフレームã®é ˜åŸŸæ‹¡å¤§', PrintConv => { 'Standard' => 'スタンダード', }, }, 'AFPointAreaExpansion' => { Description => 'ä»»æ„é¸æŠžæ™‚ã®AFフレーム領域拡大', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', 'Left/right AF points' => 'ã™ã‚‹(å·¦å³1領域アシスト有効)', 'Surrounding AF points' => 'ã™ã‚‹(周囲1領域アシスト有効)', }, }, 'AFPointAutoSelection' => { Description => 'AFãƒ•ãƒ¬ãƒ¼ãƒ è‡ªå‹•é¸æŠžã®é¸æŠžå¯å¦', PrintConv => { 'Control-direct:disable/Main:disable' => 'サブ電å­ãƒ€ã‚¤ãƒ¤ãƒ«ç›´æŽ¥:ä¸å¯/メイン電å­ãƒ€ã‚¤ãƒ¤ãƒ«â†’ä¸å¯', 'Control-direct:disable/Main:enable' => 'サブ電å­ãƒ€ã‚¤ãƒ¤ãƒ«ç›´æŽ¥:ä¸å¯/メイン電å­ãƒ€ã‚¤ãƒ¤ãƒ«â†’å¯', 'Control-direct:enable/Main:enable' => 'サブ電å­ãƒ€ã‚¤ãƒ¤ãƒ«ç›´æŽ¥:å¯/メイン電å­ãƒ€ã‚¤ãƒ¤ãƒ«â†’å¯', }, }, 'AFPointBrightness' => { Description => 'AFフレーム点ç¯è¼åº¦', PrintConv => { 'Brighter' => '明るã„', 'Normal' => '標準', }, }, 'AFPointDisplayDuringFocus' => { Description => 'æ¸¬è·æ™‚ã®AFフレーム表示', PrintConv => { 'Off' => 'ã—ãªã„', 'On' => 'ã™ã‚‹', 'On (when focus achieved)' => 'ã™ã‚‹(åˆç„¦æ™‚)', }, }, 'AFPointIllumination' => { Description => 'AFãƒã‚¤ãƒ³ãƒˆã‚¤ãƒ«ãƒŸãƒãƒ¼ã‚·ãƒ§ãƒ³', PrintConv => { 'Auto' => 'オート', 'Off' => 'オフ', 'On' => 'オン', }, }, 'AFPointMode' => { Description => 'AF測è·ç‚¹ãƒ¢ãƒ¼ãƒ‰', PrintConv => { 'Auto' => 'オート', }, }, 'AFPointRegistration' => { Description => 'AFフレームã®ç™»éŒ²', PrintConv => { 'Automatic' => 'オート', 'Bottom' => '下', 'Center' => '中央', 'Extreme Left' => '左端', 'Extreme Right' => 'å³ç«¯', 'Left' => 'å·¦', 'Right' => 'å³', 'Top' => '上', }, }, 'AFPointSelected' => { Description => 'AF測è·ç‚¹', PrintConv => { 'Auto' => 'オート', 'Automatic Tracking AF' => '自動追尾', 'Bottom' => '下', 'Center' => '中央', 'Face Detect AF' => 'é¡”èªè­˜', 'Fixed Center' => '中央固定', 'Left' => 'å·¦', 'Lower-left' => '左下', 'Lower-right' => 'å³ä¸‹', 'Mid-left' => '中央左', 'Mid-right' => '中央å³', 'Right' => 'å³', 'Top' => '上', 'Upper-left' => '左上', 'Upper-right' => 'å³ä¸Š', }, }, 'AFPointSelected2' => { Description => 'AF測è·ç‚¹é¸æŠž2', PrintConv => { 'Auto' => 'オート', }, }, 'AFPointSelection' => { Description => 'AFãƒã‚¤ãƒ³ãƒˆé¸æŠž', PrintConv => { '11 Points' => '11点', '51 Points' => '51点(3Dトラッキング)', }, }, 'AFPointSelectionMethod' => { Description => 'AFãƒ•ãƒ¬ãƒ¼ãƒ é¸æŠžæ–¹æ³•', PrintConv => { 'Multi-controller direct' => 'マルãƒã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ', 'Normal' => '標準', 'Quick Control Dial direct' => 'サブ電å­ãƒ€ã‚¤ãƒ¤ãƒ«ãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ', }, }, 'AFPointSpotMetering' => 'AFフレーム数ï¼ã‚¹ãƒãƒƒãƒˆæ¸¬å…‰', 'AFPoints' => 'AFãƒã‚¤ãƒ³ãƒˆ', 'AFPointsInFocus' => { Description => 'AF測è·ç‚¹', PrintConv => { 'All' => 'å…¨ã¦', 'Bottom' => '下', 'Bottom, Center' => '下+中央', 'Bottom-center' => '中央下', 'Bottom-left' => '左下', 'Bottom-right' => 'å³ä¸‹', 'Center' => '中央', 'Center (horizontal)' => '中央(水平)', 'Center (vertical)' => '中央(水平)', 'Center+Right' => '中央+å³', 'Fixed Center or Multiple' => '中央固定ã¾ãŸã¯è¤‡æ•°', 'Left' => 'å·¦', 'Left+Center' => 'å·¦+中央', 'Left+Right' => 'å·¦+å³', 'Lower-left, Bottom' => '左下+下', 'Lower-left, Mid-left' => '左下+中央左', 'Lower-right, Bottom' => 'å³ä¸‹+下', 'Lower-right, Mid-right' => 'å³ä¸‹+中央å³', 'Mid-left' => '中央左', 'Mid-left, Center' => '中央左+中央', 'Mid-right' => '中央å³', 'Mid-right, Center' => '中央å³+中央', 'None' => 'ç„¡ã—', 'None (MF)' => 'ç„¡ã—(MF)', 'Right' => 'å³', 'Top' => '上', 'Top, Center' => '上+中央', 'Top-center' => '中央上', 'Top-left' => '左上', 'Top-right' => 'å³ä¸Š', 'Upper-left, Mid-left' => '左上+中央左', 'Upper-left, Top' => '左上+上', 'Upper-right, Mid-right' => 'å³ä¸Š+中央å³', 'Upper-right, Top' => 'å³ä¸Š+上', }, }, 'AFPointsInFocus1D' => 'AF測è·ç‚¹(1D)', 'AFPointsInFocus5D' => 'AF測è·ç‚¹', 'AFPointsSelected' => 'AFãƒã‚¤ãƒ³ãƒˆé¸æŠž', 'AFPointsUnknown2' => { Description => 'AF測è·ç‚¹ 未確èª2?', PrintConv => { 'Auto' => 'オート', }, }, 'AFPointsUsed' => { Description => 'AF測è·ç‚¹', PrintConv => { 'Bottom' => '下', 'Center' => '中央', 'Mid-left' => '中央左', 'Mid-right' => '中央å³', 'Top' => '上', }, }, 'AFPredictor' => 'AF予測', 'AFResponse' => 'AFレスãƒãƒ³ã‚¹', 'AFResult' => 'AFçµæžœ', 'AFSearch' => { Description => 'AFサーãƒ', PrintConv => { 'Not Ready' => '準備ãŒã§ãã¦ã„ãªã„', 'Ready' => '準備完了', }, }, 'AIServoContinuousShooting' => 'AI SERVO 連続撮影・撮影速度優先', 'AIServoImagePriority' => { Description => 'AIサーボ1コマ目/2コマ目以é™å‹•作', PrintConv => { '1: AF, 2: Drive speed' => 'ピント優先/撮影速度優先', '1: AF, 2: Tracking' => 'ピント優先/被写体追従優先', '1: Release, 2: Drive speed' => 'レリーズ優先/撮影速度最優先', }, }, 'AIServoTrackingMethod' => { Description => 'AIã‚µãƒ¼ãƒœæ™‚ã®æ¸¬è·ç‚¹é¸æŠžç‰¹æ€§', PrintConv => { 'Continuous AF track priority' => '測è·é€£ç¶šæ€§å„ªå…ˆ', 'Main focus point priority' => '測è·ä¸­å¿ƒå„ªå…ˆ', }, }, 'AIServoTrackingSensitivity' => { Description => 'AIサーボ時ã®è¢«å†™ä½“è¿½å¾“æ•æ„Ÿåº¦', PrintConv => { 'Fast' => '速ã„', 'Slow' => 'é…ã„', 'Standard' => 'スタンダード', }, }, 'APEVersion' => 'APEãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'ARMIdentifier' => 'ARM識別å­', 'ARMVersion' => 'ARMãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'AToB0' => 'Aã‹ã‚‰B0', 'AToB1' => 'Aã‹ã‚‰B1', 'AToB2' => 'Aã‹ã‚‰B2', 'AccessoryType' => 'アクセサリータイプ', 'ActionAdvised' => '動作推奨', 'ActiveArea' => 'アクティブ領域', 'ActiveD-Lighting' => { Description => 'アクティブDライティング', PrintConv => { 'High' => '高ã„', 'Low' => 'ソフト', 'Normal' => '標準', 'Off' => 'オフ', 'On' => 'オン', }, }, 'ActiveD-LightingMode' => { PrintConv => { 'High' => '高ã„', 'Low' => 'ソフト', 'Normal' => '標準', 'Off' => 'オフ', }, }, 'AddAspectRatioInfo' => { Description => 'アスペクト比情報ã®ä»˜åŠ ', PrintConv => { 'Off' => 'オフ', }, }, 'AddOriginalDecisionData' => { Description => 'オリジナル画åƒåˆ¤å®šç”¨ãƒ‡ãƒ¼ã‚¿ã®ä»˜åŠ ', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'AdjustmentMode' => '調整モード', 'AdultContentWarning' => { PrintConv => { 'Unknown' => '䏿˜Ž', }, }, 'AdvancedRaw' => { Description => 'アドãƒãƒ³ã‚¹RAW', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'AdvancedSceneMode' => { PrintConv => { 'Auto' => 'インテリジェントオート', }, }, 'Album' => 'アルãƒãƒ ', 'AlphaByteCount' => 'アルファãƒã‚¤ãƒˆæ•°', 'AlphaDataDiscard' => { Description => 'アルファデータ破棄', PrintConv => { 'Flexbits Discarded' => 'フレックスビット破棄', 'Full Resolution' => '完全ãªè§£åƒåº¦', 'HighPass Frequency Data Discarded' => 'ãƒã‚¤ãƒ‘ス周波数データ破棄', 'Highpass and LowPass Frequency Data Discarded' => 'ãƒã‚¤ãƒ‘スã¨ãƒ­ãƒ¼ãƒ‘ス周波数データ破棄', }, }, 'AlphaOffset' => 'アルファオフセット', 'AnalogBalance' => 'アナログãƒãƒ©ãƒ³ã‚¹', 'Annotations' => 'フォトショップ注釈', 'Anti-Blur' => { PrintConv => { 'Off' => 'オフ', 'On (Continuous)' => 'オン(連写)', 'On (Shooting)' => 'オン(撮影)', 'n/a' => '該当無ã—', }, }, 'AntiAliasStrength' => 'カメラã®ã‚¢ãƒ³ãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ãƒ•ィルタã®ç›¸å¯¾çš„ãªå¼·åº¦', 'Aperture' => '絞り', 'ApertureRange' => { Description => '絞り数値ã®åˆ¶å¾¡ç¯„囲ã®è¨­å®š', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'ApertureRingUse' => { Description => '絞りリングã®ä½¿ç”¨', PrintConv => { 'Permitted' => '許å¯', 'Prohibited' => 'ç¦æ­¢', }, }, 'ApertureValue' => '絞り', 'ApplicationRecordVersion' => 'アプリケーションレコードãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'ApplyShootingMeteringMode' => { Description => '撮影・測光モードã®å‘¼å‡º', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'Artist' => 'ç”»åƒä½œæˆè€…', 'AsShotICCProfile' => '撮影時ICCプロファイル', 'AsShotNeutral' => 'ニュートラルショット', 'AsShotPreProfileMatrix' => '撮影時プロファイルマトリックス', 'AsShotProfileName' => '撮影時プロフィールå', 'AsShotWhiteXY' => 'ホワイトX-Yショット', 'AssignFuncButton' => { Description => 'FUNC.ãƒœã‚¿ãƒ³ã®æ©Ÿèƒ½', PrintConv => { 'Exposure comp./AEB setting' => '露出補正ï¼AEB設定', 'Image jump with main dial' => 'メイン電å­ãƒ€ã‚¤ãƒ¤ãƒ« ã§ã®ç”»åƒé€ã‚Š', 'Image quality' => 'è¨˜éŒ²ç”»è³ªé¸æŠž', 'LCD brightness' => 'æ¶²æ™¶ã®æ˜Žã‚‹ã•', 'Live view function settings' => 'ライブビュー機能設定', }, }, 'AssistButtonFunction' => { Description => 'ã‚¢ã‚·ã‚¹ãƒˆãƒœã‚¿ãƒ³ã®æ©Ÿèƒ½', PrintConv => { 'Av+/- (AF point by QCD)' => 'Av±(サブ電å­ï¼šAFãƒ•ãƒ¬ãƒ¼ãƒ é¸æŠžï¼‰', 'FE lock' => 'FEロック', 'Normal' => '標準', 'Select HP (while pressing)' => 'HPã«ç§»å‹•(押ã—ã¦ã„る間)', 'Select Home Position' => 'HPã«ç§»å‹•', }, }, 'Audio' => { Description => '音声', PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'AudioDuration' => 'オーディオ時間', 'AudioOutcue' => 'オーディオ終了åˆå›³', 'AudioSamplingRate' => 'オーディオサンプリングレート', 'AudioSamplingResolution' => 'オーディオサンプリング解åƒåº¦', 'AudioType' => 'オーディオタイプ', 'Author' => '作者', 'AuthorsPosition' => 'å½¹è·å', 'AutoAperture' => { Description => '自動絞り', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'AutoBracket' => 'オートブラケット', 'AutoBracketModeM' => { Description => 'オートブラケット(モードM)', PrintConv => { 'Flash Only' => 'フラッシュã®ã¿', 'Flash/Aperture' => 'フラッシュ/絞り', 'Flash/Speed' => 'フラッシュ/シャッター速度', 'Flash/Speed/Aperture' => 'フラッシュ/シャッター速度/絞り', }, }, 'AutoBracketOrder' => 'ブラケット順', 'AutoBracketSet' => { Description => 'オートブラケット設定', PrintConv => { 'AE & Flash' => '自動露出&フラッシュ', 'AE Only' => '自動露出ã®ã¿', 'Flash Only' => 'フラッシュã®ã¿', 'WB Bracketing' => 'ホワイトãƒãƒ©ãƒ³ã‚¹ãƒ–ラケット', }, }, 'AutoBracketing' => { Description => 'オートブラケット', PrintConv => { 'No flash & flash' => 'フラッシュ無ã—&フラッシュ有り', 'Off' => 'オフ', 'On' => 'オン', }, }, 'AutoExposureBracketing' => { Description => 'フラッシュãƒã‚¤ã‚¢ã‚¹', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', 'On (shot 1)' => 'オン(ショット1)', 'On (shot 2)' => 'オン(ショット2)', 'On (shot 3)' => 'オン(ショット3)', }, }, 'AutoFP' => { Description => 'オートFP', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'AutoFocus' => { Description => 'オートフォーカス', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'AutoISO' => { Description => 'ISOオート', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'AutoISOMax' => 'ISOオート 最大感度', 'AutoISOMinShutterSpeed' => 'ISOオート 最å°ã‚·ãƒ£ãƒƒã‚¿ãƒ¼é€Ÿåº¦', 'AutoLightingOptimizer' => { Description => 'オートライティングオプティマイザ', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', 'Low' => 'ソフト', 'Off' => 'オフ', 'Standard' => 'スタンダード', 'Strong' => 'å¼·', 'n/a' => '該当無ã—', }, }, 'AutoLightingOptimizerOn' => { PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'AutoRedEye' => { PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'AutoRotate' => { Description => '自動回転', PrintConv => { 'None' => 'ç„¡ã—', 'Rotate 180' => '180度回転', 'Rotate 270 CW' => '270度回転 CW', 'Rotate 90 CW' => '90度回転 CW', 'n/a' => 'ソフトウェアã§å›žè»¢', }, }, 'AuxiliaryLens' => '補助レンズ', 'AvApertureSetting' => 'Av絞り設定', 'AvSettingWithoutLens' => { Description => 'ãƒ¬ãƒ³ã‚ºæœªè£…ç€æ™‚ã®çµžã‚Šæ•°å€¤è¨­å®š', PrintConv => { 'Disable' => 'ä¸å¯', 'Enable' => 'å¯', }, }, 'BToA0' => 'Bã‹ã‚‰A0', 'BToA1' => 'Bã‹ã‚‰A1', 'BToA2' => 'Bã‹ã‚‰A2', 'BWFilter' => '白黒フィルター', 'BWMode' => { Description => '白黒モード', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'BabyAge' => '赤ã¡ã‚ƒã‚“/ペットã®å¹´é½¢', 'BackgroundColorIndicator' => '背景色指標', 'BackgroundColorValue' => '背景色値', 'BackgroundTiling' => { PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'BadFaxLines' => '粗悪ãªFAXç·š', 'BannerImageType' => { PrintConv => { 'None' => 'ç„¡ã—', }, }, 'BaseExposureCompensation' => '基本露出補正', 'BaseISO' => 'ベース感度', 'BaselineExposure' => 'ベースライン露出', 'BaselineNoise' => 'ベースラインノイズ', 'BaselineSharpness' => 'ベースラインシャープãƒã‚¹', 'BatteryInfo' => 'é›»æº', 'BatteryLevel' => 'ãƒãƒƒãƒ†ãƒªãƒ¼ãƒ¬ãƒ™ãƒ«', 'BatteryOrder' => { Description => 'ãƒãƒƒãƒ†ãƒªãƒ¼é †', PrintConv => { 'Camera Battery First' => 'カメラã®ãƒãƒƒãƒ†ãƒªãƒ¼ã‚’最åˆã«ä½¿ã†', 'MB-D10 First' => 'MB-D10ã®ãƒãƒƒãƒ†ãƒªãƒ¼ã‚’最åˆã«ä½¿ã†', }, }, 'BayerGreenSplit' => 'ベイヤーグリーン分割', 'Beep' => { Description => 'ビープ', PrintConv => { 'High' => '高ã„', 'Low' => '低ã„', 'Off' => 'オフ', 'On' => 'オン', }, }, 'BestQualityScale' => '高å“質スケール', 'BestShotMode' => { Description => 'ベストショットモード', PrintConv => { 'Off' => 'オフ', }, }, 'BitDepth' => 'ビット深度', 'BitsPerComponent' => 'コンãƒãƒ¼ãƒãƒ³ãƒˆã‚ãŸã‚Šãƒ“ット', 'BitsPerExtendedRunLength' => '拡張ランレングスã‚ãŸã‚Šã®ãƒ“ット', 'BitsPerRunLength' => 'ランレングスã‚ãŸã‚Šã®ãƒ“ット', 'BitsPerSample' => 'コンãƒãƒ¼ãƒãƒ³ãƒˆã®ãƒ“ット数', 'BlackLevel' => '黒レベル', 'BlackLevel2' => '黒レベル2', 'BlackLevelDeltaH' => '黒レベルデルタH', 'BlackLevelDeltaV' => '黒レベルデルタV', 'BlackLevelRepeatDim' => '黒レベルå復値', 'BlackPoint' => '黒点', 'BlueBalance' => 'ブルーãƒãƒ©ãƒ³ã‚¹', 'BlueMatrixColumn' => 'é’色マトリックス列', 'BlueTRC' => 'é’色調増殖曲線', 'BlurWarning' => { Description => '手振れ警告', PrintConv => { 'Blur Warning' => '手振れ警告', 'None' => 'ç„¡ã—', }, }, 'BodyBatteryADLoad' => 'é›»æºA/D本体起動時', 'BodyBatteryADNoLoad' => 'é›»æºA/D本体オフ時', 'BodyBatteryState' => 'é›»æºçŠ¶æ…‹æœ¬ä½“', 'BodyFirmwareVersion' => '本体ファームウェアãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'BracketMode' => { Description => 'ブラケットモード', PrintConv => { 'Off' => 'オフ', }, }, 'BracketSequence' => 'ブラケットシーケンス', 'BracketShotNumber' => { Description => 'ブラケットショット数', PrintConv => { 'n/a' => '該当無ã—', }, }, 'BracketStep' => { Description => 'ブラケットステップ', PrintConv => { '1 EV' => '1ステップ', '1/3 EV' => '1/3ステップ', '2/3 EV' => '2/3ステップ', }, }, 'BracketValue' => 'ブラケット値', 'Brightness' => 'ブライトãƒã‚¹', 'BrightnessData' => 'ブライトãƒã‚¹ãƒ‡ãƒ¼ã‚¿', 'BrightnessValue' => 'ブライトãƒã‚¹', 'BulbDuration' => 'ãƒãƒ«ãƒ–時間', 'BurstMode' => { Description => 'ブラストモード', PrintConv => { 'Infinite' => 'ç„¡é™', 'Off' => 'オフ', 'On' => 'オン', }, }, 'ButtonFunctionControlOff' => { Description => 'サブ電å­ãƒ€ã‚¤ãƒ¤ãƒ«ã€ˆOFF〉時ã®ãƒœã‚¿ãƒ³æ“作', PrintConv => { 'Disable main, Control, Multi-control' => 'メイン電å­ãƒ€ã‚¤ãƒ¤ãƒ«ã€ã‚µãƒ–é›»å­ãƒ€ã‚¤ãƒ¤ãƒ«ã€ãƒžãƒ«ãƒã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãƒ¼ã¯ç„¡åй', 'Normal (enable)' => '通常(有効)', }, }, 'By-line' => '製作者', 'By-lineTitle' => '製作者ã®è·ç¨®', 'CCDScanMode' => { Description => 'CCDスキャンモード', PrintConv => { 'Interlaced' => 'インタレース', 'Progressive' => 'プログレッシブ', }, }, 'CFALayout' => 'CFAレイアウト', 'CFAPattern' => 'CFAパターン', 'CFAPattern2' => 'CFAパターン2', 'CFAPlaneColor' => 'CFAプレーン色', 'CFARepeatPatternDim' => 'CFAå復パターン特性', 'CLModeShootingSpeed' => 'CLモード撮影速度', 'CMContrast' => 'CMコントラスト', 'CMExposureCompensation' => 'CM露出補正', 'CMHue' => 'CM色相', 'CMMFlags' => 'CMMフラグ', 'CMSaturation' => 'CM彩度', 'CMSharpness' => 'CMシャープãƒã‚¹', 'CMWhiteBalance' => 'CMホワイトãƒãƒ©ãƒ³ã‚¹', 'CMWhiteBalanceComp' => 'CMホワイトãƒãƒ©ãƒ³ã‚¹è£œæ­£', 'CMWhiteBalanceGrayPoint' => 'CMホワイトãƒãƒ©ãƒ³ã‚¹ã‚°ãƒ¬ãƒ¼ãƒã‚¤ãƒ³ãƒˆ', 'CMYKEquivalent' => 'CMYK等価物', 'CPUFirmwareVersion' => 'CPUファームウエアãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'CPUType' => { PrintConv => { 'None' => 'ç„¡ã—', }, }, 'CalibrationDateTime' => 'キャリブレーション日時', 'CalibrationIlluminant1' => { Description => 'å…‰æºã‚­ãƒ£ãƒªãƒ–レーション1', PrintConv => { 'Cloudy' => '曇り', 'Cool White Fluorescent' => '白色è›å…‰ç¯', 'Day White Fluorescent' => '昼白色è›å…‰ç¯', 'Daylight' => '昼光', 'Daylight Fluorescent' => '昼光色è›å…‰ç¯', 'Fine Weather' => '良ã„天気', 'Flash' => 'ストロボ', 'Fluorescent' => 'è›å…‰ç¯', 'ISO Studio Tungsten' => 'ISOスタジオタングステン', 'Other' => 'ãã®ä»–ã®å…‰æº', 'Shade' => '日陰', 'Standard Light A' => '標準ライトA', 'Standard Light B' => '標準ライトB', 'Standard Light C' => '標準ライトC', 'Tungsten (Incandescent)' => 'タングステン(白熱ç¯)', 'Unknown' => '䏿˜Ž', 'Warm White Fluorescent' => '暖白光色è›å…‰ç¯', 'White Fluorescent' => '温白色è›å…‰ç¯', }, }, 'CalibrationIlluminant2' => { Description => 'å…‰æºã‚­ãƒ£ãƒªãƒ–レーション2', PrintConv => { 'Cloudy' => '曇り', 'Cool White Fluorescent' => '白色è›å…‰ç¯', 'Day White Fluorescent' => '昼白色è›å…‰ç¯', 'Daylight' => '昼光', 'Daylight Fluorescent' => '昼光色è›å…‰ç¯', 'Fine Weather' => '良ã„天気', 'Flash' => 'ストロボ', 'Fluorescent' => 'è›å…‰ç¯', 'ISO Studio Tungsten' => 'ISOスタジオタングステン', 'Other' => 'ãã®ä»–ã®å…‰æº', 'Shade' => '日陰', 'Standard Light A' => '標準ライトA', 'Standard Light B' => '標準ライトB', 'Standard Light C' => '標準ライトC', 'Tungsten (Incandescent)' => 'タングステン(白熱ç¯)', 'Unknown' => '䏿˜Ž', 'Warm White Fluorescent' => '暖白光色è›å…‰ç¯', 'White Fluorescent' => '温白色è›å…‰ç¯', }, }, 'CameraCalibration1' => 'カメラキャリブレーション1', 'CameraCalibration2' => 'カメラキャリブレーション2', 'CameraCalibrationSig' => 'カメラキャリブレーションサイン', 'CameraID' => 'カメラID', 'CameraISO' => 'カメラISO', 'CameraInfo' => 'ペンタックスモデル', 'CameraOrientation' => { Description => 'ç”»åƒã®å‘ã', PrintConv => { 'Horizontal (normal)' => '水平(標準)', 'Rotate 270 CW' => '270度回転 CW', 'Rotate 90 CW' => '90度回転 CW', }, }, 'CameraParameters' => 'カメラパラメーター', 'CameraSerialNumber' => 'カメラシリアル番å·', 'CameraSettings' => 'カメラ設定', 'CameraSettingsVersion' => 'カメラ設定ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'CameraTemperature' => 'カメラ温度', 'CameraType' => { Description => 'カメラタイプ', PrintConv => { 'Compact' => 'コンパクト', 'DV Camera' => 'DVカメラ', 'EOS High-end' => 'EOSãƒã‚¤ã‚¨ãƒ³ãƒ‰', 'EOS Mid-range' => 'EOSミドルレンジ', }, }, 'CameraType2' => 'カメラタイプ2', 'CanonAFInfo' => 'AF情報', 'CanonAFInfo2' => 'AF情報2', 'CanonExposureMode' => { Description => '露出モード', PrintConv => { 'Aperture-priority AE' => '絞り優先', 'Bulb' => 'ãƒãƒ«ãƒ–', 'Depth-of-field AE' => '被写界深度AE', 'Easy' => 'ç°¡å˜', 'Manual' => 'マニュアル', 'Program AE' => 'プログラムAE', 'Shutter speed priority AE' => 'シャッター優先', }, }, 'CanonFileInfo' => 'ファイル情報', 'CanonFileLength' => 'ファイル長', 'CanonFirmwareVersion' => 'ファームウェアãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'CanonFlashMode' => { Description => 'フラッシュモード', PrintConv => { 'Auto' => 'オート', 'External flash' => '外付フラッシュ', 'Off' => 'オフ', 'On' => 'オン', 'Red-eye reduction' => '赤目軽減', 'Red-eye reduction (Auto)' => '赤目軽減(オート)', 'Red-eye reduction (On)' => '赤目軽減(オン)', 'Slow-sync' => 'スローシンクロ', }, }, 'CanonFocalLength' => 'フォーカスタイプ', 'CanonImageHeight' => 'ç”»åƒé«˜ã•', 'CanonImageSize' => { Description => 'イメージサイズ', PrintConv => { 'Large' => 'ラージ', 'Medium' => 'ミドル', 'Medium 1' => 'ミドル1', 'Medium 2' => 'ミドル2', 'Medium 3' => 'ミドル3', 'Medium Movie' => 'ミディアム動画', 'Postcard' => 'ãƒã‚¬ã‚­', 'Small' => 'スモール', 'Small 1' => 'スモール1', 'Small 2' => 'スモール2', 'Small 3' => 'スモール3', 'Small Movie' => 'スモール動画', 'Widescreen' => 'ワイド画é¢', }, }, 'CanonImageType' => 'イメージタイプ', 'CanonImageWidth' => 'ç”»åƒå¹…', 'CanonModelID' => 'モデルID', 'Caption-Abstract' => '表題/説明', 'CaptionWriter' => 'キャプション作æˆè€…', 'CasioImageSize' => 'カシオイメージサイズ', 'Categories' => 'カテゴリー', 'Category' => 'カテゴリー', 'CellLength' => 'セル長', 'CellWidth' => 'セル幅', 'CenterAFArea' => { Description => '中央AFエリア', PrintConv => { 'Normal Zone' => 'ノーマルゾーン', 'Wide Zone' => 'ワイドゾーン', }, }, 'CenterWeightedAreaSize' => { Description => '中央é‡ç‚¹ã‚¨ãƒªã‚¢', PrintConv => { 'Average' => 'å¹³å‡', }, }, 'CharTarget' => '目的文字', 'CharacterSet' => 'キャラクターセット', 'ChromaBlurRadius' => '彩度ã¼ã‘åŠå¾„', 'ChromaticAdaptation' => '色彩順応化', 'Chromaticity' => '色度', 'ChrominanceNR_TIFF_JPEG' => { PrintConv => { 'High' => '高ã„', 'Low' => 'ソフト', 'Off' => 'オフ', }, }, 'ChrominanceNoiseReduction' => { PrintConv => { 'High' => '高ã„', 'Low' => 'ソフト', 'Off' => 'オフ', }, }, 'City' => '都市', 'ClassifyState' => '分類状態', 'CleanFaxData' => '純粋ãªFAXデータ', 'ClipPath' => 'クリップパス', 'CodedCharacterSet' => 'キャラクタセットコード', 'ColorAberrationControl' => { Description => '色åŽå·®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ColorAdjustment' => '色調整', 'ColorAdjustmentMode' => { Description => '色調整モード', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ColorBalance' => 'カラーãƒãƒ©ãƒ³ã‚¹', 'ColorBalanceAdj' => { Description => 'カラーãƒãƒ©ãƒ³ã‚¹èª¿æ•´', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ColorBalanceBlue' => 'カラーãƒãƒ©ãƒ³ã‚¹é’', 'ColorBalanceGreen' => 'カラーãƒãƒ©ãƒ³ã‚¹ç·‘', 'ColorBalanceRed' => 'カラーãƒãƒ©ãƒ³ã‚¹èµ¤', 'ColorBoostData' => 'カラーブーストデータ', 'ColorBoostLevel' => 'カラーブーストレベル1', 'ColorBoostType' => { Description => 'カラーブーストタイプ', PrintConv => { 'Nature' => '自然', 'People' => '人々', }, }, 'ColorBooster' => { Description => 'カラーブースター', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ColorCalibrationMatrix' => 'カラーキャリブレーションマトリックステーブル', 'ColorCharacterization' => 'カラー特徴æå†™', 'ColorControl' => 'カラーコントロール', 'ColorEffect' => { Description => 'カラーエフェクト', PrintConv => { 'Black & White' => '白黒', 'Cool' => '冷色', 'Off' => 'オフ', 'Sepia' => 'セピア', 'Warm' => '暖色', }, }, 'ColorFilter' => { Description => 'カラーフィルター', PrintConv => { 'Black & White' => '白黒', 'Blue' => 'é’', 'Green' => 'ç·‘', 'Off' => 'オフ', 'Pink' => 'ピンク', 'Purple' => 'ç´«', 'Red' => '赤', 'Sepia' => 'セピア', 'Yellow' => '黄色', }, }, 'ColorGain' => 'カラーゲイン', 'ColorHue' => '色相', 'ColorInfo' => '色情報', 'ColorMap' => 'カラーマップ', 'ColorMatrix' => 'カラーマトリックス', 'ColorMatrix1' => 'カラーマトリックス1', 'ColorMatrix2' => 'カラーマトリックス2', 'ColorMatrixNumber' => 'カラーマトリックス番å·', 'ColorMode' => { Description => 'カラーモード', PrintConv => { 'Autumn Leaves' => '紅葉', 'B & W' => '白黒', 'B&W' => '白黒', 'Black & White' => '白黒', 'Chrome' => 'クローム', 'Clear' => 'クリアー', 'Deep' => 'ディープ', 'Evening' => '夕焼ã‘', 'Landscape' => '風景', 'Light' => 'ライト', 'Natural' => 'ナãƒãƒ¥ãƒ©ãƒ«', 'Natural color' => 'ナãƒãƒ¥ãƒ©ãƒ«ã‚«ãƒ©ãƒ¼', 'Natural sRGB' => 'ナãƒãƒ¥ãƒ©ãƒ« sRGB', 'Natural+ sRGB' => 'ナãƒãƒ¥ãƒ©ãƒ«+ sRGB', 'Neutral' => 'ニュートラル', 'Night Portrait' => '人物夜景', 'Night Scene' => '夜景', 'Night View' => 'ナイトビュー', 'Night View/Portrait' => '夜景/夜景ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Normal' => 'ノーマル', 'Off' => 'オフ', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Sepia' => 'セピア', 'Solarization' => 'ソラリゼーション', 'Standard' => 'スタンダード', 'Sunset' => '夕日', 'Vivid' => 'ビビッド', 'Vivid color' => 'ビビッドカラー', }, }, 'ColorMoireReduction' => { PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ColorMoireReductionMode' => { Description => '色モアレリダクション', PrintConv => { 'High' => '高ã„', 'Low' => 'ソフト', 'Off' => 'オフ', }, }, 'ColorPalette' => 'カラーパレット', 'ColorProfile' => { Description => 'カラープロフィール', PrintConv => { 'Embedded' => '埋ã‚è¾¼ã¿', 'Not Embedded' => '埋ã‚è¾¼ã¿ç„¡ã—', }, }, 'ColorRepresentation' => '色表ç¾', 'ColorReproduction' => '色å†ç¾', 'ColorResponseUnit' => '色応答å˜ä½', 'ColorSequence' => 'カラーシーケンス', 'ColorSpace' => { Description => '色空間', PrintConv => { 'ICC Profile' => 'ICCプロフィール', 'Monochrome' => 'モノトーン', 'Uncalibrated' => '未調整', }, }, 'ColorSpaceData' => 'カラースペースデータ', 'ColorTable' => 'カラーテーブル', 'ColorTemperature' => '色温度', 'ColorTone' => { Description => 'カラートーン', PrintConv => { 'Normal' => '標準', }, }, 'ColorToneFaithful' => 'カラートーン忠実設定', 'ColorToneLandscape' => 'カラートーン風景', 'ColorToneNeutral' => 'カラートーンニュートラル', 'ColorTonePortrait' => 'カラートーンãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'ColorToneStandard' => 'カラートーンスタンダード', 'ColorToneUserDef1' => 'カラートーンユーザ設定1', 'ColorToneUserDef2' => 'カラートーンユーザ設定2', 'ColorToneUserDef3' => 'カラートーンユーザ設定3', 'ColorantOrder' => 'ç€è‰²é †', 'ColorantTable' => 'ç€è‰²ãƒ†ãƒ¼ãƒ–ル', 'ColorimetricReference' => '比色分æžå‚ç…§', 'CommandDials' => { Description => 'コマンダーダイヤル', PrintConv => { 'Reversed (Main Aperture, Sub Shutter)' => 'リãƒãƒ¼ã‚¹', 'Standard (Main Shutter, Sub Aperture)' => 'デフォルト', }, }, 'CommandDialsApertureSetting' => { Description => 'コマンドダイヤルカスタマイズ 絞り設定', PrintConv => { 'Aperture Ring' => '絞りリング', 'Sub-command Dial' => 'サブコントロールダイヤル', }, }, 'CommandDialsChangeMainSub' => { Description => 'コマンドダイヤルカスタマイズ メイン/サブ変更', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'CommandDialsMenuAndPlayback' => { Description => 'コマンドダイヤルカスタマイズ メニューã¨å†ç”Ÿ', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'CommandDialsReverseRotation' => { Description => 'コマンドダイヤルカスタマイズ å›žè»¢ä¿æŒ', PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'CommanderChannel' => 'コマンダーモード ãƒãƒ£ãƒ³ãƒãƒ«', 'CommanderGroupAManualOutput' => 'コマンダーモード グループA M 補正', 'CommanderGroupAMode' => { Description => 'コマンダーモード グループA モード', PrintConv => { 'Auto Aperture' => '自動絞り(AA)', 'Manual' => 'マニュアル', 'Off' => 'オフ', }, }, 'CommanderGroupA_TTL-AAComp' => 'コマンダーモード 内蔵フラッシュ TTL/AA 補正', 'CommanderGroupBManualOutput' => 'コマンダーモード グループB M 補正', 'CommanderGroupBMode' => { Description => 'コマンダーモード グループB モード', PrintConv => { 'Auto Aperture' => '自動絞り(AA)', 'Manual' => 'マニュアル', 'Off' => 'オフ', }, }, 'CommanderGroupB_TTL-AAComp' => 'コマンダーモード グループB TTL/AA 補正', 'CommanderInternalFlash' => { Description => 'コマンダーモード 内蔵フラッシュ モード', PrintConv => { 'Manual' => 'マニュアル', 'Off' => 'オフ', }, }, 'CommanderInternalManualOutput' => 'コマンダーモード 内蔵フラッシュ M 補正', 'CommanderInternalTTLComp' => 'コマンダーモード 内蔵フラッシュ TTL 補正', 'Comment' => 'コメント', 'Compilation' => { PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'ComponentsConfiguration' => '儿§‹æˆè¦ç´ ã®æ„味', 'CompressedBitsPerPixel' => 'ç”»åƒåœ§ç¸®ãƒ¢ãƒ¼ãƒ‰', 'CompressedImageSize' => '圧縮画åƒã‚µã‚¤ã‚º', 'Compression' => { Description => '圧縮計画', PrintConv => { 'JPEG' => 'JPEG圧縮率', 'JPEG (old-style)' => 'JPEG(å¤ã„å½¢å¼)', 'None' => 'ç„¡ã—', 'Uncompressed' => 'éžåœ§ç¸®', }, }, 'CompressionRatio' => '圧縮率', 'CompressionType' => { PrintConv => { 'None' => 'ç„¡ã—', }, }, 'ConditionalFEC' => 'フラッシュ露出補正', 'ConnectionSpaceIlluminant' => '接続スペース光æº', 'ConsecutiveBadFaxLines' => '連続的ã«ç²—悪ãªFAXç·š', 'Contact' => '連絡', 'ContentLocationCode' => '内容ä½ç½®ã‚³ãƒ¼ãƒ‰', 'ContentLocationName' => '内容ä½ç½®å', 'ContinuousDrive' => { Description => 'ドライブモード', PrintConv => { 'Continuous' => '連続撮影', 'Continuous, High' => '連写(High)', 'Continuous, Low' => '連写(Low)', 'Continuous, Speed Priority' => '高速連写', 'Movie' => 'å‹•ç”»', 'Single' => '1コマ撮影', }, }, 'ContinuousShootingSpeed' => { Description => '連続撮影速度', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'ContinuousShotLimit' => { Description => 'é€£ç¶šæ’®å½±æ™‚ã®æ’®å½±æžšæ•°åˆ¶é™', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'Contrast' => { Description => 'コントラスト', PrintConv => { '+1 (med high)' => '+1 (å°‘ã—高ã„)', '+2 (high)' => '+2 (ãƒãƒ¼ãƒ‰)', '+3 (very high)' => '+3 (ã‹ãªã‚Šé«˜ã„)', '-1 (med low)' => '-1 (å°‘ã—低ã„)', '-2 (low)' => '-2 (ソフト)', '-3 (very low)' => '-3 (ã‹ãªã‚Šä½Žã„)', '0 (normal)' => '0 (スタンダード)', 'Film Simulation' => 'フィルムシミュレーション', 'High' => 'ãƒãƒ¼ãƒ‰', 'Low' => 'ソフト', 'Medium High' => 'å°‘ã—高ã„', 'Medium Low' => 'å°‘ã—低ã„', 'Normal' => 'スタンダード', }, }, 'ContrastCurve' => 'コントラストカーブ', 'ContrastFaithful' => 'コントラスト忠実設定', 'ContrastLandscape' => 'コントラスト風景', 'ContrastMonochrome' => 'コントラストモノクロ', 'ContrastNeutral' => 'コントラストニュートラル', 'ContrastPortrait' => 'コントラストãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'ContrastSetting' => 'コントラスト設定', 'ContrastStandard' => 'コントラストスタンダード', 'ContrastUserDef1' => 'コントラストユーザ設定1', 'ContrastUserDef2' => 'コントラストユーザ設定2', 'ContrastUserDef3' => 'コントラストユーザ設定3', 'ControlMode' => { Description => 'コントロールモード', PrintConv => { 'Camera Local Control' => 'カメラローカルコントロール', 'Computer Remote Control' => 'コンピュータリモートコントロール', 'n/a' => '該当無ã—', }, }, 'ConversionLens' => { Description => 'コンãƒãƒ¼ã‚¸ãƒ§ãƒ³ãƒ¬ãƒ³ã‚º', PrintConv => { 'Macro' => 'マクロ', 'Off' => 'オフ', 'Telephoto' => 'テレフォト', 'Wide' => 'ワイド', }, }, 'Converter' => 'コンãƒãƒ¼ã‚¿ãƒ¼', 'Copyright' => '版権所有者', 'CopyrightNotice' => '著作権表示', 'CopyrightStatus' => { PrintConv => { 'Unknown' => '䏿˜Ž', }, }, 'CoringFilter' => 'コアリングフィルタ', 'CoringValues' => 'コアリング値', 'Country' => '国å', 'Country-PrimaryLocationCode' => 'ISO国コード', 'Country-PrimaryLocationName' => '国', 'CountryCode' => '撮影国コード', 'CreateDate' => 'ãƒ‡ã‚¸ã‚¿ãƒ«ãƒ‡ãƒ¼ã‚¿ä½œæˆæ—¥æ™‚', 'CreationDate' => 'ä½œæˆæ—¥æ™‚', 'CreativeStyle' => { Description => 'クリエイティブスタイル', PrintConv => { 'Autumn' => 'ç§‹', 'Autumn Leaves' => '紅葉', 'B&W' => '白黒', 'Clear' => 'クリアー', 'Deep' => 'ディープ', 'Landscape' => '風景', 'Light' => 'ライト', 'Neutral' => 'ニュートラル', 'Night View/Portrait' => '夜景/夜景ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Sepia' => 'セピア', 'Standard' => 'スタンダード', 'Sunset' => '夕日', 'Vivid' => 'ビビッド', }, }, 'Creator' => '製作者', 'CreatorAddress' => 'クリエーター -ã€€ä½æ‰€', 'CreatorCity' => 'クリエーター - 街', 'CreatorContactInfo' => '作æˆè€…ã®ã‚³ãƒ³ タクト先', 'CreatorCountry' => 'クリエーター - 国', 'CreatorPostalCode' => 'クリエーター - 郵便番å·', 'CreatorRegion' => 'クリエーター - 国/å·ž', 'CreatorWorkEmail' => 'クリエーター - 電å­ãƒ¡ãƒ¼ãƒ«', 'CreatorWorkTelephone' => 'クリエーター - 電話番å·', 'CreatorWorkURL' => 'クリエーター - WEBサイト', 'Credit' => 'プロãƒã‚¤ãƒ€ãƒ¼', 'CropActive' => { PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'CropData' => 'クロップデータ', 'CropHeight' => '最終高ã•', 'CropHiSpeed' => 'ãƒã‚¤ã‚¹ãƒ”ードクロップ', 'CropLeft' => '開始オフセットX', 'CropTop' => '開始オフセットY', 'CropWidth' => '最終幅', 'CurrentICCProfile' => 'カレントICCプロファイル', 'CurrentPreProfileMatrix' => 'カレントプロファイルマトリックス', 'Curves' => { Description => 'カーブ', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'Custom1' => 'カスタム1', 'Custom2' => 'カスタム2', 'Custom3' => 'カスタム3', 'Custom4' => 'カスタム4', 'CustomRendered' => { Description => 'カスタム画åƒå‡¦ç†', PrintConv => { 'Custom' => 'カスタム処ç†', 'Normal' => '標準処ç†', }, }, 'CustomSaturation' => 'カスタム彩度', 'D-LightingHQ' => { Description => 'DライティングHQ', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'D-LightingHQColorBoost' => 'DライティングHQカラーブースト', 'D-LightingHQHighlight' => 'DライティングHQãƒã‚¤ãƒ©ã‚¤ãƒˆ', 'D-LightingHQSelected' => { Description => 'DライティングHQé¸æŠž', PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'D-LightingHQShadow' => 'DライティングHQシャドウ', 'D-LightingHS' => { Description => 'DライティングHS', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'D-LightingHSAdjustment' => 'DライティングHS調整', 'D-LightingHSColorBoost' => 'DライティングHSカラーブースト', 'DECPosition' => { Description => 'DECä½ç½®', PrintConv => { 'Contrast' => 'コントラスト', 'Exposure' => '露出', 'Filter' => 'フィルター', 'Saturation' => '彩度', }, }, 'DNGBackwardVersion' => 'DNGãƒãƒƒã‚¯ãƒ¯ãƒ¼ãƒ‰ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'DNGLensInfo' => 'レンズ情報', 'DNGVersion' => 'DNGãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'DSPFirmwareVersion' => 'DSPファームウエアãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'DataCompressionMethod' => 'データ圧縮アルゴリズム プロãƒã‚¤ãƒ€ãƒ¼/オーナー', 'DataDump' => 'データダンプ', 'DataImprint' => { Description => 'データインプリント', PrintConv => { 'None' => 'ç„¡ã—', 'Text' => 'テキスト', }, }, 'DataType' => '日付型', 'Date' => '日付', 'DateCreated' => 'ä½œæˆæ—¥ä»˜', 'DateDisplayFormat' => { Description => '日付形å¼', PrintConv => { 'D/M/Y' => 'æ—¥/月/å¹´', 'M/D/Y' => '月/æ—¥/å¹´', 'Y/M/D' => 'å¹´/月/æ—¥', }, }, 'DateSent' => 'ç™ºé€æ—¥ä»˜', 'DateStampMode' => { Description => '日付スタンプモード', PrintConv => { 'Date' => '日付', 'Off' => 'オフ', }, }, 'DateTime' => 'ãƒ•ã‚¡ã‚¤ãƒ«ä½œæˆæ—¥æ™‚', 'DateTimeOriginal' => 'ã‚ªãƒªã‚¸ãƒŠãƒ«ãƒ‡ãƒ¼ã‚¿ä½œæˆæ—¥æ™‚', 'DaylightSavings' => { Description => '夿™‚é–“', PrintConv => { 'No' => 'オフ', 'Yes' => 'オン', }, }, 'DefaultCropOrigin' => 'デフォルト切å–り基点', 'DefaultCropSize' => 'デフォルト切å–りサイズ', 'DefaultScale' => 'デフォルトスケール', 'DeletedImageCount' => '削除イメージカウント', 'Description' => '説明', 'Destination' => '宛先', 'DestinationCity' => '目的地', 'DestinationCityCode' => '目的地コード', 'DestinationDST' => { Description => '目的地DST', PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'DevelopmentDynamicRange' => '進化ダイナミックレンジ', 'DeviceAttributes' => '機器属性', 'DeviceManufacturer' => '機器メーカー', 'DeviceMfgDesc' => '機器メーカー説明', 'DeviceModel' => '機器モデル', 'DeviceModelDesc' => '機器モデル説明', 'DeviceSettingDescription' => 'デãƒã‚¤ã‚¹è¨­å®šã®èª¬æ˜Ž', 'DialDirectionTvAv' => { Description => 'Tv/Av値設定時ã®ãƒ€ã‚¤ãƒ¤ãƒ«å›žè»¢', PrintConv => { 'Normal' => '通常', 'Reversed' => '設定方å‘ã‚’å転', }, }, 'DigitalCreationDate' => 'ãƒ‡ã‚¸ã‚¿ãƒ«ä½œæˆæ—¥ä»˜', 'DigitalCreationTime' => 'ãƒ‡ã‚¸ã‚¿ãƒ«ä½œæˆæ™‚é–“', 'DigitalGEM' => 'デジタルGEM', 'DigitalICE' => 'デジタルICE', 'DigitalROC' => 'デジタルROC', 'DigitalZoom' => { Description => 'デジタルズーム', PrintConv => { 'None' => 'ç„¡ã—', 'Off' => 'オフ', 'Other' => '未確èª', }, }, 'DigitalZoomOn' => { Description => 'デジタルズームオン', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'DigitalZoomRatio' => 'デジタルズーム比率', 'Directory' => 'ファイルã®å ´æ‰€', 'DirectoryIndex' => 'ディレクトリ索引', 'DirectoryNumber' => 'ディレクトリ番å·', 'DisplayAperture' => '絞り表示', 'DisplaySize' => { PrintConv => { 'Normal' => '標準', }, }, 'DistortionCorrection' => { Description => '歪曲修正', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'DistortionCorrection2' => { Description => '歪曲補正編集', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'DjVuVersion' => 'DjVuãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'DocumentHistory' => '文書履歴', 'DocumentName' => 'ドキュメントå', 'DocumentNotes' => '文書ノート', 'DotRange' => 'ドット範囲', 'DriveMode' => { Description => 'ドライブモード', PrintConv => { 'Bracketing' => 'ブラケット', 'Burst' => '高速連射', 'Continuous' => '連続撮影', 'Continuous High' => '連射 (Hi)', 'Continuous Shooting' => '連続撮影', 'HS continuous' => 'HS連写', 'Interval' => 'インターãƒãƒ«', 'Multiple Exposure' => '複数ã®éœ²å‡º', 'No Timer' => 'タイマー無ã—', 'Off' => 'オフ', 'Remote Control' => 'リモコン', 'Remote Control (3 s delay)' => 'リモコン (3秒後レリーズ)', 'Self-timer' => 'セルフタイマー', 'Self-timer (12 s)' => 'セルフタイマー (12ç§’)', 'Self-timer (2 s)' => 'セルフタイマー (2ç§’)', 'Self-timer Operation' => 'セルフタイマー', 'Shutter Button' => 'シャッターボタン', 'Single' => '1コマ撮影', 'Single Exposure' => 'シングル露出', 'Single Frame' => '1コマ撮影', 'Single Shot' => '1コマ撮影', 'Single-frame' => '1コマ撮影', 'Single-frame Shooting' => '1コマ撮影', 'UHS continuous' => 'UHS連写', }, }, 'DriveMode2' => { Description => '多é‡éœ²å…‰', PrintConv => { 'Single-frame' => '1コマ撮影', }, }, 'DynamicAFArea' => { Description => 'ダイナミックAFエリア', PrintConv => { '21 Points' => '21点', '51 Points' => '51点', '51 Points (3D-tracking)' => '51点(3Dトラッキング)', '9 Points' => '9点', }, }, 'DynamicRange' => { Description => 'ダイナミックレンジ', PrintConv => { 'Standard' => 'スタンダード', 'Wide' => 'ワイド', }, }, 'DynamicRangeExpansion' => { Description => 'ダイナミックレンジ拡大', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'DynamicRangeOptimizer' => { Description => 'Dレンジオプティマイザー', PrintConv => { 'Advanced Auto' => 'アドãƒãƒ³ã‚¹ã‚ªãƒ¼ãƒˆ', 'Advanced Lv1' => 'アドãƒãƒ³ã‚¹Lv1', 'Advanced Lv2' => 'アドãƒãƒ³ã‚¹Lv2', 'Advanced Lv3' => 'アドãƒãƒ³ã‚¹Lv3', 'Advanced Lv4' => 'アドãƒãƒ³ã‚¹Lv4', 'Advanced Lv5' => 'アドãƒãƒ³ã‚¹Lv5', 'Auto' => 'オート', 'Off' => 'オフ', 'Standard' => 'スタンダード', }, }, 'DynamicRangeSetting' => 'ダイナミックレンジ設定', 'E-DialInProgram' => { Description => 'é›»å­ãƒ€ã‚¤ãƒ¤ãƒ«ãƒ—ログラム', PrintConv => { 'P Shift' => 'Pシフト', 'Tv or Av' => 'Tvã‹Av', }, }, 'ETTLII' => { PrintConv => { 'Average' => 'å¹³å‡', 'Evaluative' => '評価', }, }, 'EVStepInfo' => 'EVステップ情報', 'EVStepSize' => { Description => 'EVステップ', PrintConv => { '1/2 EV' => '1/2ステップ', '1/3 EV' => '1/3ステップ', }, }, 'EVSteps' => { Description => '露出ステップ', PrintConv => { '1/2 EV Steps' => '1/2 EVステップ', '1/3 EV Steps' => '1/3 EVステップ', }, }, 'EasyExposureCompensation' => { Description => 'ç°¡å˜ãªéœ²å‡ºè£œæ­£', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', 'On (auto reset)' => 'オン(自動リセット)', }, }, 'EasyMode' => { Description => 'ç°¡å˜ãƒ¢ãƒ¼ãƒ‰', PrintConv => { 'Aquarium' => 'æ°´æ—館', 'Beach' => 'ビーãƒ', 'Black & White' => '白黒', 'Color Accent' => 'カラーアクセント', 'Color Swap' => 'スイッãƒã‚«ãƒ©ãƒ¼', 'Digital Macro' => 'デジタルマクロ', 'Fast shutter' => '高速シャッター', 'Fireworks' => '花ç«', 'Flash Off' => 'フラッシュオフ', 'Foliage' => '葉', 'Full auto' => 'フルオート', 'Gray Scale' => 'グレースケール', 'ISO 3200' => 'ISO3200', 'Indoor' => '室内', 'Kids & Pets' => 'キッズ&ペット', 'Landscape' => '風景', 'Long Shutter' => '長秒シャッター', 'Macro' => 'マクロ', 'Manual' => 'マニュアル', 'My Colors' => 'ワンãƒã‚¤ãƒ³ãƒˆã‚«ãƒ©ãƒ¼', 'Neutral' => 'ニュートラル', 'Night' => '夜景', 'Night Scene' => '夜景', 'Night Snapshot' => 'ナイトスナップ', 'Pan focus' => 'パンフォーカス', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Sepia' => 'セピア', 'Slow shutter' => 'スローシャッター', 'Snow' => 'スノー', 'Sports' => 'スãƒãƒ¼ãƒ„', 'Still Image' => '陿­¢ç”»åƒ', 'Sunset' => '夕焼ã‘', 'Super Macro' => 'スーパーマクロ', 'Underwater' => '水中', 'Vivid' => 'ビビッド', }, }, 'EdgeNoiseReduction' => { Description => 'エッジノイズリダクション', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'EditStatus' => '編集状態', 'EditorialUpdate' => { Description => '更新編集', PrintConv => { 'Additional language' => '追加言語', }, }, 'EffectiveLV' => '効果レベル', 'Emphasis' => { PrintConv => { 'None' => 'ç„¡ã—', }, }, 'EncodingProcess' => 'JPEGã®ç¬¦å·åŒ–処ç†', 'EndPoints' => '末端', 'EnhanceDarkTones' => { PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'Enhancement' => { Description => '強度', PrintConv => { 'Blue' => 'é’', 'Flesh Tones' => '肌調', 'Green' => 'ç·‘', 'Off' => 'オフ', 'Red' => '赤', }, }, 'Enhancer' => '増大値2', 'EnhancerValues' => '増大値', 'EnvelopeNumber' => 'エンベロープ数', 'EnvelopePriority' => { Description => 'エンベロープ優先度', PrintConv => { '0 (reserved)' => '0 (å°†æ¥æ‹¡å¼µç”¨)', '1 (most urgent)' => '1 (高ã„緊急性)', '5 (normal urgency)' => '5 (普通ã®ç·Šæ€¥æ€§)', '8 (least urgent)' => '8 (低ã„緊急性)', '9 (user-defined priority)' => '9 (ユーザ定義優先度)', }, }, 'EnvelopeRecordVersion' => 'エンベロープレコードãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'EpsonImageHeight' => 'エプソン画åƒé«˜', 'EpsonImageWidth' => 'エプソン画åƒå¹…', 'EpsonSoftware' => 'エプソンソフトウェア', 'Equipment' => 'イクイップメントIFDãƒã‚¤ãƒ³ã‚¿ãƒ¼', 'EquipmentVersion' => 'イクイップメントãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'ExcursionTolerance' => '振幅許容範囲', 'ExifCameraInfo' => 'Exifカメラ情報', 'ExifImageHeight' => 'ç”»åƒé«˜ã•', 'ExifImageWidth' => 'ç”»åƒå¹…', 'ExifOffset' => 'Exif IFDã¸ã®ãƒã‚¤ãƒ³ã‚¿', 'ExifToolVersion' => 'ExifToolãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'ExifVersion' => 'Exifãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'ExpandFilm' => '拡張フイルム', 'ExpandFilterLens' => '拡張レンズフィルター', 'ExpandFlashLamp' => '拡張フラッシュランプ', 'ExpandLens' => '拡張レンズ', 'ExpandScanner' => '拡張スキャナー', 'ExpandSoftware' => '拡張ソフト', 'ExpirationDate' => '有効日付', 'ExpirationTime' => '有効時間', 'Exposure' => '露出', 'ExposureBracketStepSize' => '露出ブラケットステップサイズ', 'ExposureBracketValue' => '露出ブラケット値', 'ExposureCompStepSize' => { Description => '露出補正/ファインãƒãƒ¥ãƒ¼ãƒ³', PrintConv => { '1 EV' => '1ステップ', '1/2 EV' => '1/2ステップ', '1/3 EV' => '1/3ステップ', }, }, 'ExposureCompensation' => '露出補正値', 'ExposureControlStepSize' => { Description => '露出制御ã®EVステップ', PrintConv => { '1 EV' => '1ステップ', '1/2 EV' => '1/2ステップ', '1/3 EV' => '1/3ステップ', }, }, 'ExposureDelayMode' => { Description => '露出é…延モード', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ExposureDifference' => '露出差', 'ExposureIndex' => '露出指標', 'ExposureLevelIncrements' => { Description => '露出制御ã®EVステップ', PrintConv => { '1-stop set, 1/3-stop comp.' => '設定1 露出補正1/3', '1/2 Stop' => '1/2ステップ', '1/2-stop set, 1/2-stop comp.' => '設定1/2 露出補正1/2', '1/3 Stop' => '1/3ステップ', '1/3-stop set, 1/3-stop comp.' => '設定1/3 露出補正1/3', }, }, 'ExposureMode' => { Description => '露光モード', PrintConv => { 'Aperture Priority' => '絞り優先', 'Aperture-priority AE' => '絞り優先', 'Auto' => '自動露出', 'Auto bracket' => 'オートブラケット', 'Bulb' => 'ãƒãƒ«ãƒ–', 'Landscape' => '風景', 'Manual' => 'マニュアル露出', 'Night Scene / Twilight' => '夜景', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Program' => 'プログラム', 'Program AE' => 'プログラムAE', 'Program-shift' => 'プログラムシフト', 'Shutter Priority' => 'シャッター優先', 'Shutter speed priority AE' => 'シャッター優先', 'n/a' => '未設定', }, }, 'ExposureModeInManual' => { Description => 'ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«éœ²å‡ºæ™‚ã®æ¸¬å…‰ãƒ¢ãƒ¼ãƒ‰', PrintConv => { 'Center-weighted average' => '中央é‡ç‚¹', 'Evaluative metering' => '評価測光', 'Partial metering' => '部分', 'Specified metering mode' => '設定測光モード', 'Spot metering' => 'スãƒãƒƒãƒˆ', }, }, 'ExposureProgram' => { Description => '露出プログラム', PrintConv => { 'Action (High speed)' => 'スãƒãƒ¼ãƒ„モード(高速シャッター優先)', 'Aperture Priority' => '絞り優先', 'Aperture-priority AE' => '絞り優先', 'Bulb' => 'ãƒãƒ«ãƒ–', 'Creative (Slow speed)' => 'クリエイティブプログラム(被写界深度優先)', 'Landscape' => '風景モード', 'Manual' => 'マニュアル', 'Not Defined' => '未定義', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆãƒ¢ãƒ¼ãƒ‰', 'Program' => 'プログラム', 'Program AE' => 'ノーマルプログラム', 'Shutter Priority' => 'シャッター優先', 'Shutter speed priority AE' => 'シャッター優先', }, }, 'ExposureTime' => '露出時間', 'ExposureTime2' => '露出時間 2', 'ExposureWarning' => { Description => '露出警告', PrintConv => { 'Bad exposure' => '露出失敗', 'Good' => '驿­£', }, }, 'ExtendedWBDetect' => { Description => 'å»¶é•·WB検出', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'Extender' => 'エクステンダー', 'ExtenderFirmwareVersion' => 'エクステンダーファームウェアãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'ExtenderModel' => 'エクステンダーモデル', 'ExtenderSerialNumber' => 'エクステンダーシリアル番å·', 'ExternalFlash' => { Description => '外付フラッシュ', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ExternalFlashAE1' => '外付フラッシュAE1?', 'ExternalFlashAE1_0' => '外付フラッシュAE1(0)?', 'ExternalFlashAE2' => '外付フラッシュAE2?', 'ExternalFlashAE2_0' => '外付フラッシュAE2(0)?', 'ExternalFlashBounce' => { Description => '外付フラッシュãƒã‚¦ãƒ³ã‚¹', PrintConv => { 'Bounce' => 'ãƒã‚¦ãƒ³ã‚¹', 'Bounce or Off' => 'ãƒã‚¦ãƒ³ã‚¹ã‹ã‚ªãƒ•', 'Direct' => 'ダイレクト', 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', 'n/a' => '該当無ã—', }, }, 'ExternalFlashExposureComp' => { Description => '外付ストロボ露出補正', PrintConv => { 'n/a' => '未設定(オフã‹ã‚ªãƒ¼ãƒˆãƒ¢ãƒ¼ãƒ‰ï¼‰', 'n/a (Manual Mode)' => '未設定(マニュアルモード)', }, }, 'ExternalFlashFlags' => '外付フラッシュフラグ', 'ExternalFlashGuideNumber' => '外付フラッシュガイドナンãƒãƒ¼ï¼Ÿ', 'ExternalFlashMode' => { Description => '外付フラッシュモード', PrintConv => { 'Off' => 'オフ', 'On, Auto' => 'オンã€ã‚ªãƒ¼ãƒˆ', 'On, Contrast-control Sync' => 'オンã€å…‰é‡æ¯”制御シンクロ', 'On, Flash Problem' => 'オンã€ãƒ•ラッシュã®å•題?', 'On, High-speed Sync' => 'オンã€ãƒã‚¤ã‚¹ãƒ”ードシンクロ', 'On, Manual' => 'オンã€ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«', 'On, P-TTL Auto' => 'オンã€P-TTLオート', 'On, Wireless' => 'オンã€ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹', 'On, Wireless, High-speed Sync' => 'オンã€ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ã€ãƒã‚¤ã‚¹ãƒ”ードシンクロ', 'n/a - Off-Auto-Aperture' => '該当ãªã—-自動絞りオフ', }, }, 'ExternalFlashZoom' => '外付フラッシュズーム', 'ExtraSamples' => '特別サンプル', 'FNumber' => 'F値', 'Face0Position' => 'é¡”0ä½ç½®', 'Face1Position' => 'é¡”1ä½ç½®', 'Face2Position' => 'é¡”2ä½ç½®', 'Face3Position' => 'é¡”3ä½ç½®', 'Face4Position' => 'é¡”4ä½ç½®', 'Face5Position' => 'é¡”5ä½ç½®', 'Face6Position' => 'é¡”6ä½ç½®', 'Face7Position' => 'é¡”7ä½ç½®', 'Face8Position' => 'é¡”8ä½ç½®', 'Face9Position' => 'é¡”9ä½ç½®', 'FaceDetect' => { Description => 'é¡”èªè­˜', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'FaceDetectArea' => '顔エリア', 'FaceDetectFrameSize' => 'フレームサイズ', 'FaceOrientation' => { PrintConv => { 'Horizontal (normal)' => '水平(標準)', 'Rotate 180' => '180度回転', 'Rotate 270 CW' => '270度回転 CW', 'Rotate 90 CW' => '90度回転 CW', }, }, 'FacesDetected' => 'é¡”èªè­˜', 'FastSeek' => { PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'FaxProfile' => { PrintConv => { 'Unknown' => '䏿˜Ž', }, }, 'FaxRecvParams' => 'FAXå—信パラメータ', 'FaxRecvTime' => 'FAXå—信時間', 'FaxSubAddress' => 'FAXサブアドレス', 'FileFormat' => 'ファイル形å¼', 'FileIndex' => 'ファイル索引', 'FileInfo' => 'ファイル情報', 'FileInfoVersion' => 'ファイル情報ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'FileModifyDate' => '更新日時', 'FileName' => 'ファイルå', 'FileNumber' => 'ファイル番å·', 'FileNumberMemory' => { Description => 'ファイル番å·ãƒ¡ãƒ¢ãƒª', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'FileNumberSequence' => { Description => 'ファイル番å·é€£ç•ª', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'FileSize' => 'ファイルã®ã‚µã‚¤ã‚º', 'FileSource' => { Description => 'ファイルソース', PrintConv => { 'Digital Camera' => 'デジタルカメラ', 'Film Scanner' => 'フィルムスキャナー', 'Reflection Print Scanner' => 'åå°„å°åˆ·ã‚¹ã‚­ãƒ£ãƒŠãƒ¼', }, }, 'FileType' => 'ファイルタイプ', 'FileVersion' => 'ファイル形å¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'Filename' => 'ファイルå', 'FillFlashAutoReduction' => { Description => '日中シンクロ・ストロボ露出自動低減制御', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'FillOrder' => { Description => 'フルオーダー', PrintConv => { 'Normal' => '標準', }, }, 'FilmMode' => { Description => 'フィルムモード', PrintConv => { 'Dynamic (B&W)' => 'ダイナミック(白黒)', 'Dynamic (color)' => 'ダイナミック(カラー)', 'Nature (color)' => 'ナãƒãƒ¥ãƒ©ãƒ«ï¼ˆã‚«ãƒ©ãƒ¼ï¼‰', 'Smooth (B&W)' => '滑らã‹ï¼ˆç™½é»’)', 'Smooth (color)' => '滑らã‹ï¼ˆã‚«ãƒ©ãƒ¼ï¼‰', 'Standard (B&W)' => 'スタンダード(白黒)', 'Standard (color)' => 'スタンダード(カラー)', }, }, 'FilmType' => 'フィルムタイプ', 'Filter' => { Description => 'フィルター', PrintConv => { 'Off' => 'オフ', }, }, 'FilterEffect' => { Description => 'フィルター効果', PrintConv => { 'Green' => 'ç·‘', 'None' => 'ç„¡ã—', 'Off' => 'オフ', 'Orange' => 'オレンジ', 'Red' => '赤', 'Yellow' => '黄色', 'n/a' => '該当無ã—', }, }, 'FilterEffectMonochrome' => { Description => 'モノクロフィルター効果', PrintConv => { 'Green' => 'ç·‘', 'None' => 'ç„¡ã—', 'Orange' => 'オレンジ', 'Red' => '赤', 'Yellow' => '黄色', }, }, 'FinderDisplayDuringExposure' => { Description => '露光中ã®ãƒ•ァインダー内表示', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'FineTuneOptCenterWeighted' => '最é©éœ²å‡ºå¾®èª¿æ•´ 中央é‡ç‚¹æ¸¬å…‰', 'FineTuneOptMatrixMetering' => '最é©éœ²å‡ºå¾®èª¿æ•´ 分割測光', 'FineTuneOptSpotMetering' => '最é©éœ²å‡ºå¾®èª¿æ•´ スãƒãƒƒãƒˆæ¸¬å…‰', 'Firmware' => 'ファームウェア', 'FirmwareDate' => 'ファームウェア日付', 'FirmwareRevision' => 'ファームウェアリビジョン', 'FirmwareVersion' => 'ファームウェアãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'FixtureIdentifier' => 'フィクãƒãƒ£ãƒ¼è­˜åˆ¥å­', 'Flash' => { Description => 'ストロボ', PrintConv => { 'Auto, Did not fire' => 'フラッシュ未発光ã€ã‚ªãƒ¼ãƒˆãƒ¢ãƒ¼ãƒ‰', 'Auto, Did not fire, Red-eye reduction' => 'オートã€ãƒ•ラッシュ未発光ã€èµ¤ç›®è»½æ¸›ãƒ¢ãƒ¼ãƒ‰', 'Auto, Fired' => 'フラッシュ発光ã€ã‚ªãƒ¼ãƒˆãƒ¢ãƒ¼ãƒ‰', 'Auto, Fired, Red-eye reduction' => 'フラッシュ発光ã€ã‚ªãƒ¼ãƒˆãƒ¢ãƒ¼ãƒ‰ã€èµ¤ç›®è»½æ¸›ãƒ¢ãƒ¼ãƒ‰', 'Auto, Fired, Red-eye reduction, Return detected' => 'フラッシュ発光ã€ã‚ªãƒ¼ãƒˆãƒ¢ãƒ¼ãƒ‰ã€ã‚¹ãƒˆãƒ­ãƒœå…‰æ¤œçŸ¥ã€èµ¤ç›®è»½æ¸›ãƒ¢ãƒ¼ãƒ‰', 'Auto, Fired, Red-eye reduction, Return not detected' => 'フラッシュ発光ã€ã‚ªãƒ¼ãƒˆãƒ¢ãƒ¼ãƒ‰ã€ã‚¹ãƒˆãƒ­ãƒœå…‰æœªæ¤œçŸ¥ã€èµ¤ç›®è»½æ¸›ãƒ¢ãƒ¼ãƒ‰', 'Auto, Fired, Return detected' => 'フラッシュ発光ã€ã‚ªãƒ¼ãƒˆãƒ¢ãƒ¼ãƒ‰ã€ã‚¹ãƒˆãƒ­ãƒœå…‰æ¤œçŸ¥', 'Auto, Fired, Return not detected' => 'フラッシュ発光ã€ã‚ªãƒ¼ãƒˆãƒ¢ãƒ¼ãƒ‰ã€ã‚¹ãƒˆãƒ­ãƒœå…‰æœªæ¤œçŸ¥', 'Did not fire' => 'フラッシュ未発光', 'Fired' => 'フラッシュ発光', 'Fired, Red-eye reduction' => 'フラッシュ発光ã€èµ¤ç›®è»½æ¸›ãƒ¢ãƒ¼ãƒ‰', 'Fired, Red-eye reduction, Return detected' => 'フラッシュ発光ã€èµ¤ç›®è»½æ¸›ãƒ¢ãƒ¼ãƒ‰ã€ã‚¹ãƒˆãƒ­ãƒœå…‰æ¤œçŸ¥', 'Fired, Red-eye reduction, Return not detected' => 'フラッシュ発光ã€èµ¤ç›®è»½æ¸›ãƒ¢ãƒ¼ãƒ‰ã€ã‚¹ãƒˆãƒ­ãƒœå…‰æœªæ¤œçŸ¥', 'Fired, Return detected' => 'ストロボ光検知', 'Fired, Return not detected' => 'ストロボ光未検知', 'No Flash' => 'フラッシュ未発光', 'No flash function' => 'フラッシュ機能無ã—', 'Off' => 'オフ', 'Off, Did not fire' => 'フラッシュ未発光ã€å¼·åˆ¶ç™ºå…‰ãƒ¢ãƒ¼ãƒ‰', 'Off, Did not fire, Return not detected' => 'オフã€ãƒ•ラッシュ未発光ã€ã‚¹ãƒˆãƒ­ãƒœå…‰æœªæ¤œçŸ¥', 'Off, No flash function' => 'オフã€ãƒ•ラッシュ機能無ã—', 'Off, Red-eye reduction' => 'オフã€èµ¤ç›®è»½æ¸›ãƒ¢ãƒ¼ãƒ‰', 'On' => 'オン', 'On, Did not fire' => 'オンã€ãƒ•ラッシュ未発光', 'On, Fired' => 'フラッシュ発光ã€å¼·åˆ¶ç™ºå…‰ãƒ¢ãƒ¼ãƒ‰', 'On, Red-eye reduction' => 'フラッシュ発光ã€å¼·åˆ¶ç™ºå…‰ãƒ¢ãƒ¼ãƒ‰ã€èµ¤ç›®è»½æ¸›ãƒ¢ãƒ¼ãƒ‰', 'On, Red-eye reduction, Return detected' => 'フラッシュ発光ã€å¼·åˆ¶ç™ºå…‰ãƒ¢ãƒ¼ãƒ‰ã€èµ¤ç›®è»½æ¸›ãƒ¢ãƒ¼ãƒ‰ã€ã‚¹ãƒˆãƒ­ãƒœå…‰æ¤œçŸ¥', 'On, Red-eye reduction, Return not detected' => 'フラッシュ発光ã€å¼·åˆ¶ç™ºå…‰ãƒ¢ãƒ¼ãƒ‰ã€èµ¤ç›®è»½æ¸›ãƒ¢ãƒ¼ãƒ‰ã€ã‚¹ãƒˆãƒ­ãƒœå…‰æœªæ¤œçŸ¥', 'On, Return detected' => 'フラッシュ発光ã€å¼·åˆ¶ç™ºå…‰ãƒ¢ãƒ¼ãƒ‰ã€ã‚¹ãƒˆãƒ­ãƒœå…‰æ¤œçŸ¥', 'On, Return not detected' => 'フラッシュ発光ã€å¼·åˆ¶ç™ºå…‰ãƒ¢ãƒ¼ãƒ‰ã€ã‚¹ãƒˆãƒ­ãƒœå…‰æœªæ¤œçŸ¥', }, }, 'FlashActivity' => 'フラッシュ稼åƒ', 'FlashBias' => 'フラッシュãƒã‚¤ã‚¢ã‚¹', 'FlashBits' => 'フラッシュ詳細', 'FlashChargeLevel' => 'フラッシュãƒãƒ£ãƒ¼ã‚¸ãƒ¬ãƒ™ãƒ«', 'FlashCommanderMode' => { Description => 'コマンダーモード', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'FlashCompensation' => 'フラッシュ補正', 'FlashControlMode' => { Description => 'フラッシュコントロールモード', PrintConv => { 'Auto Aperture' => '自動絞り(AA)', 'Manual' => 'マニュアル', 'Off' => 'オフ', 'Repeating Flash' => 'リピーティングフラッシュ', }, }, 'FlashDevice' => { Description => 'フラッシュデãƒã‚¤ã‚¹', PrintConv => { 'External' => '外付ã‘', 'Internal' => '内蔵', 'Internal + External' => '内蔵+外付ã‘', 'None' => 'ç„¡ã—', }, }, 'FlashDistance' => 'フラッシュ強度', 'FlashEnergy' => 'フラッシュ強度', 'FlashExposureBracketValue' => 'フラッシュ露出ブラケット値', 'FlashExposureComp' => 'フラッシュ露出補正', 'FlashExposureCompSet' => 'ストロボ露出補正設定', 'FlashExposureLock' => { PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'FlashFired' => { Description => 'フラッシュ発光', PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'FlashFiring' => { Description => 'ストロボã®ç™ºå…‰', PrintConv => { 'Does not fire' => 'ã—ãªã„', 'Fires' => 'ã™ã‚‹', }, }, 'FlashFirmwareVersion' => 'フラッシュファームウェアãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'FlashFocalLength' => 'フラッシュ焦点è·é›¢', 'FlashGroupACompensation' => 'グループAフラッシュ補正', 'FlashGroupAControlMode' => { Description => 'グループAフラッシュコントロールモード', PrintConv => { 'Auto Aperture' => '自動絞り(AA)', 'Manual' => 'マニュアル', 'Off' => 'オフ', 'Repeating Flash' => 'リピーティングフラッシュ', }, }, 'FlashGroupAOutput' => 'グループAフラッシュ出力', 'FlashGroupBCompensation' => 'グループBフラッシュ補正', 'FlashGroupBControlMode' => { Description => 'グループBフラッシュコントロールモード', PrintConv => { 'Auto Aperture' => '自動絞り(AA)', 'Manual' => 'マニュアル', 'Off' => 'オフ', 'Repeating Flash' => 'リピーティングフラッシュ', }, }, 'FlashGroupBOutput' => 'グループBフラッシュ出力', 'FlashGroupCCompensation' => 'グループCフラッシュ補正', 'FlashGroupCControlMode' => { Description => 'グループCフラッシュコントロールモード', PrintConv => { 'Auto Aperture' => '自動絞り(AA)', 'Manual' => 'マニュアル', 'Off' => 'オフ', 'Repeating Flash' => 'リピーティングフラッシュ', }, }, 'FlashGroupCOutput' => 'グループCフラッシュ出力', 'FlashGuideNumber' => 'フラッシュガイドナンãƒãƒ¼', 'FlashInfo' => 'ストロボ情報', 'FlashInfoVersion' => 'フラッシュ情報ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'FlashIntensity' => { Description => 'フラッシュ強度', PrintConv => { 'High' => '高ã„', 'Low' => '低ã„', 'Normal' => '標準', 'Strong' => 'å¼·ã„', 'Weak' => 'å¼±ã„', }, }, 'FlashLevel' => 'フラッシュ補正', 'FlashMetering' => 'フラッシュ計測', 'FlashMeteringSegments' => 'フラッシュ測光値', 'FlashMode' => { Description => 'フラッシュモード', PrintConv => { 'Auto' => 'オート', 'Auto, Did not fire' => 'オートã€ç™ºå…‰ç„¡ã—', 'Auto, Did not fire, Red-eye reduction' => 'オートã€ç™ºå…‰ç„¡ã—ã€èµ¤ç›®è»½æ¸›', 'Auto, Fired' => 'オートã€ç™ºå…‰', 'Auto, Fired, Red-eye reduction' => 'オートã€ç™ºå…‰ã€èµ¤ç›®è»½æ¸›', 'Did Not Fire' => 'ç™ºå…‰ç¦æ­¢', 'External, Auto' => '外付ã€ã‚ªãƒ¼ãƒˆ', 'External, Contrast-control Sync' => '外付ã€å…‰é‡æ¯”制御シンクロ', 'External, Flash Problem' => '外付ã€ãƒ•ラッシュã®å•題?', 'External, High-speed Sync' => '外付ã€ãƒã‚¤ã‚¹ãƒ”ードシンクロ', 'External, Manual' => '外付ã€ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«', 'External, P-TTL Auto' => '外付ã€P-TTL自動調光', 'External, Wireless' => '外付ã€ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹', 'External, Wireless, High-speed Sync' => '外付ã€ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ã€ãƒã‚¤ã‚¹ãƒ”ードシンクロ', 'Fill flash' => '強制発光', 'Fired, Commander Mode' => '発光ã€ã‚³ãƒžãƒ³ãƒ€ãƒ¼ãƒ¢ãƒ¼ãƒ‰', 'Fired, External' => '発光ã€å¤–付', 'Fired, Manual' => '発光ã€ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«', 'Fired, TTL Mode' => '発光ã€TTLモード', 'Internal' => '内蔵', 'Normal' => '標準', 'Off' => 'オフ', 'Off, Did not fire' => 'オフ', 'Off?' => 'オフ?', 'On' => 'オン', 'On, Did not fire' => 'オンã€ç™ºå…‰ç„¡ã—', 'On, Fired' => 'オン', 'On, Red-eye reduction' => 'オンã€èµ¤ç›®è»½æ¸›', 'On, Slow-sync' => 'オンã€ã‚¹ãƒ­ãƒ¼ã‚·ãƒ³ã‚¯ãƒ­', 'On, Slow-sync, Red-eye reduction' => 'オンã€ã‚¹ãƒ­ãƒ¼ã‚·ãƒ³ã‚¯ãƒ­ã€èµ¤ç›®è»½æ¸›', 'On, Soft' => 'オンã€ã‚½ãƒ•ト', 'On, Trailing-curtain Sync' => 'オンã€å¾Œå¹•シンクロ', 'On, Wireless (Control)' => 'オンã€ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ (コントロール)', 'On, Wireless (Master)' => 'オンã€ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ (マスター)', 'Rear flash sync' => 'リアフラッシュシンクロ', 'Red-eye Reduction' => '赤目軽減', 'Red-eye reduction' => '赤目軽減', 'Unknown' => '䏿˜Ž', 'Wireless' => 'ワイヤレス', 'n/a - Off-Auto-Aperture' => '該当ãªã—-自動絞りオフ', }, }, 'FlashModel' => { Description => 'フラッシュモデル', PrintConv => { 'None' => 'ç„¡ã—', }, }, 'FlashOptions' => { Description => 'フラッシュオプション', PrintConv => { 'Auto' => 'オート', 'Auto, Red-eye reduction' => 'オートã€èµ¤ç›®è»½æ¸›', 'Normal' => '標準', 'Red-eye reduction' => '赤目軽減', 'Slow-sync' => 'スローシンクロ', 'Slow-sync, Red-eye reduction' => 'スローシンクロã€èµ¤ç›®è»½æ¸›', 'Trailing-curtain Sync' => '後幕シンクロ', 'Wireless (Control)' => 'ワイヤレス(コントロール発光)', 'Wireless (Master)' => 'ワイヤレス(マスター発光)', }, }, 'FlashOptions2' => { Description => 'ストロボオプション(2)', PrintConv => { 'Auto' => 'オート', 'Auto, Red-eye reduction' => 'オートã€èµ¤ç›®è»½æ¸›', 'Normal' => '標準', 'Red-eye reduction' => '赤目軽減', 'Slow-sync' => 'スローシンクロ', 'Slow-sync, Red-eye reduction' => 'スローシンクロã€èµ¤ç›®è»½æ¸›', 'Trailing-curtain Sync' => '後幕シンクロ', 'Wireless (Control)' => 'ワイヤレス(コントロール発光)', 'Wireless (Master)' => 'ワイヤレス(マスター発光)', }, }, 'FlashOutput' => 'フラッシュ出力', 'FlashRemoteControl' => 'フラッシュリモートコントロール', 'FlashSerialNumber' => 'フラッシュシリアル番å·', 'FlashSetting' => 'フラッシュ設定', 'FlashShutterSpeed' => 'フラッシュシャッター速度', 'FlashStatus' => { Description => 'ストロボ状態', PrintConv => { 'External, Did not fire' => 'å¤–ä»˜ã€æœªç™ºå…‰', 'External, Fired' => '外付ã€ç™ºå…‰', 'Internal, Did not fire' => 'å†…è”µã€æœªç™ºå…‰', 'Internal, Fired' => '内蔵ã€ç™ºå…‰', 'Off' => 'オフ', }, }, 'FlashSyncSpeed' => 'フラッシュåŒèª¿é€Ÿåº¦', 'FlashSyncSpeedAv' => { Description => 'Avモード時ã®ã‚¹ãƒˆãƒ­ãƒœåŒèª¿é€Ÿåº¦', PrintConv => { '1/200 Fixed' => '1/200秒固定', '1/250 Fixed' => '1/250秒固定', '1/300 Fixed' => '1/300秒固定', 'Auto' => 'オート', }, }, 'FlashType' => { Description => 'フラッシュタイプ', PrintConv => { 'E-System' => 'E-システム', 'None' => 'ç„¡ã—', 'Simple E-System' => 'シンプルE-システム', }, }, 'FlashWarning' => { Description => 'フラッシュ警告', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'FlashpixVersion' => 'サãƒãƒ¼ãƒˆãƒ•ラッシュピックスãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'FlickerReduce' => { Description => 'フリッカー軽減', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'FlipHorizontal' => { Description => '横フリップ', PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'FocalLength' => 'レンズ焦点è·é›¢', 'FocalLength35efl' => 'レンズ焦点è·é›¢', 'FocalLengthIn35mmFormat' => '35mmフイルムæ›ç®—焦点è·é›¢', 'FocalPlaneDiagonal' => '焦点é¢å¯¾è§’ç·š', 'FocalPlaneResolutionUnit' => { Description => '焦点é¢è§£åƒåº¦å˜ä½', PrintConv => { 'None' => 'ç„¡ã—', 'inches' => 'インãƒ', }, }, 'FocalPlaneXResolution' => '焦点é¢Xè§£åƒåº¦', 'FocalPlaneXSize' => '焦点é¢Xサイズ', 'FocalPlaneXUnknown' => '焦点é¢Xサイズ', 'FocalPlaneYResolution' => '焦点é¢Yè§£åƒåº¦', 'FocalPlaneYSize' => '焦点é¢Yサイズ', 'FocalPlaneYUnknown' => '焦点é¢Yサイズ', 'FocalType' => { Description => 'フォーカスタイプ', PrintConv => { 'Fixed' => '固定', 'Zoom' => 'ズーム', }, }, 'FocalUnits' => '焦点å˜ä½/mm', 'Focus' => { Description => 'フォーカス', PrintConv => { 'Manual' => 'マニュアル', }, }, 'FocusArea' => 'フォーカスエリア', 'FocusAreaSelection' => { Description => 'フォーカスãƒã‚¤ãƒ³ãƒˆãƒ©ãƒƒãƒ—アラウンド', PrintConv => { 'No Wrap' => 'ノーラップ', 'Wrap' => 'ラップ', }, }, 'FocusContinuous' => { Description => '連続フォーカス', PrintConv => { 'Continuous' => '連続', 'Manual' => 'マニュアル', 'Single' => 'シングル', }, }, 'FocusDistance' => '被写体è·é›¢', 'FocusDistanceLower' => '焦点è·é›¢ä½Žéƒ¨åˆ†', 'FocusDistanceUpper' => '焦点è·é›¢é«˜éƒ¨åˆ†', 'FocusMode' => { Description => 'フォーカスモード', PrintConv => { 'AI Focus AF' => 'AIフォーカスAF', 'AI Servo AF' => 'AIサーボAF', 'Auto' => 'オート', 'Auto, Continuous' => 'オートã€ã‚³ãƒ³ãƒ†ã‚£ãƒ‹ãƒ¥ã‚¢ã‚¹', 'Auto, Focus button' => 'オートã€ãƒ•ォーカスボタン', 'Continuous' => '連写', 'Continuous AF' => 'コンティニュアスAF', 'Custom' => 'カスタム', 'Infinity' => 'ç„¡é™é ', 'Macro' => 'マクロ', 'Macro (1)' => 'マクロ(1)', 'Macro (2)' => 'マクロ(2)', 'Manual' => 'マニュアル', 'Manual Focus (3)' => 'マニュアルフォーカス(3)', 'Manual Focus (6)' => 'マニュアルフォーカス(6)', 'Multi AF' => 'マルãƒAF', 'Normal' => '標準', 'One-shot AF' => 'ワンショットAF', 'Pan Focus' => 'パンフォーカス', 'Sequential shooting AF' => 'シーケンシャルシューティングAF', 'Single' => 'シングル', 'Single AF' => 'シングルAF', 'Super Macro' => 'スーパーマクロ', }, }, 'FocusMode2' => 'フォーカスモード2', 'FocusModeSetting' => { Description => 'フォーカスモード', PrintConv => { 'Manual' => 'マニュアル', }, }, 'FocusPixel' => '焦点解åƒåº¦', 'FocusPointWrap' => { Description => 'フォーカスãƒã‚¤ãƒ³ãƒˆãƒ©ãƒƒãƒ—アラウンド', PrintConv => { 'No Wrap' => 'ノーラップ', 'Wrap' => 'ラップ', }, }, 'FocusPosition' => 'フォーカスè·é›¢', 'FocusProcess' => { Description => 'フォーカスプロセス', PrintConv => { 'AF Not Used' => 'AF未使用', 'AF Used' => 'AF使用', }, }, 'FocusRange' => { Description => 'フォーカスレンジ', PrintConv => { 'Auto' => 'オート', 'Close' => '近景', 'Far Range' => 'é æ™¯', 'Infinity' => 'ç„¡é™é ', 'Macro' => 'マクロ', 'Manual' => 'マニュアル', 'Middle Range' => '中間範囲', 'Normal' => 'ノーマル', 'Not Known' => '䏿˜Ž', 'Pan Focus' => 'パンフォーカス', 'Super Macro' => 'スーパーマクロ', 'Very Close' => '近接', }, }, 'FocusSetting' => 'フォーカス設定', 'FocusStepCount' => 'フォーカスステップ数', 'FocusStepInfinity' => 'ç„¡é™ãƒ¬ãƒ³ã‚ºã‚¹ãƒ†ãƒƒãƒ—', 'FocusStepNear' => 'ニアステップ数', 'FocusTrackingLockOn' => { Description => 'フォーカストラッキングã¨ãƒ­ãƒƒã‚¯ã‚ªãƒ³', PrintConv => { 'Long' => 'ロング', 'Normal' => '標準', 'Off' => 'オフ', 'Short' => 'ショート', }, }, 'FocusWarning' => { Description => 'フォーカス警告', PrintConv => { 'Good' => 'ジャスピン', 'Out of focus' => 'ピンボケ', }, }, 'FocusingScreen' => 'フォーカシングスクリーン', 'FolderName' => 'フォルダå', 'ForwardMatrix1' => 'å‰è¡Œåˆ—1', 'ForwardMatrix2' => 'å‰è¡Œåˆ—2', 'FrameHeight' => 'フレーム高', 'FrameNumber' => 'フレーム番å·', 'FrameRate' => 'フレームレート', 'FrameSize' => 'フレームサイズ', 'FrameWidth' => 'フレーム幅', 'FreeByteCounts' => 'フリーãƒã‚¤ãƒˆæ•°', 'FreeMemoryCardImages' => 'フリーメモリーカードイメージ', 'FreeOffsets' => 'フリーオフセット', 'FujiFlashMode' => { Description => 'フラッシュモード', PrintConv => { 'Auto' => 'オート', 'External' => '外付フラッシュ', 'Off' => 'オフ', 'On' => 'オン', 'Red-eye reduction' => '赤目軽減', }, }, 'FunctionButton' => { Description => 'FUNCボタン', PrintConv => { 'AF-area Mode' => 'AFエリアモード', 'Center AF Area' => '中央AFエリア', 'Center-weighted' => '中央é‡ç‚¹æ¸¬å…‰', 'FV Lock' => 'FVロック', 'Flash Off' => 'フラッシュオフ', 'Framing Grid' => 'フレーミンググリッド', 'ISO Display' => 'ISO表示', 'Matrix Metering' => '分割測光', 'Spot Metering' => 'スãƒãƒƒãƒˆæ¸¬å…‰', }, }, 'GEMInfo' => 'GEM情報', 'GEModel' => 'モデル', 'GIFVersion' => 'GIFãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'GPSAltitude' => '高度', 'GPSAltitudeRef' => { Description => 'å‚照高度', PrintConv => { 'Above Sea Level' => 'æµ·æ°´é¢', 'Below Sea Level' => 'å‚ç…§æµ·æ°´é¢(è² ã®å€¤)', }, }, 'GPSAreaInformation' => 'GPSエリアã®åç§°', 'GPSDOP' => '測定精度', 'GPSDateStamp' => 'GPSデータ', 'GPSDateTime' => 'GPS時間(åŽŸå­æ™‚計)', 'GPSDestBearing' => 'ç›®çš„åœ°ã®æ–¹å‘', 'GPSDestBearingRef' => { Description => 'ç›®çš„åœ°ã®æ–¹å‘ã®å‚ç…§', PrintConv => { 'Magnetic North' => 'ç£æ°—ã®æ–¹å‘', 'True North' => 'æ­£å¸¸ãªæ–¹å‘', }, }, 'GPSDestDistance' => '目的地ã®è·é›¢', 'GPSDestDistanceRef' => { Description => '目的地ã®è·é›¢ã®å‚ç…§', PrintConv => { 'Kilometers' => 'キロメートル', 'Miles' => 'マイル', 'Nautical Miles' => 'ノット', }, }, 'GPSDestLatitude' => '目的地ã®ç·¯åº¦', 'GPSDestLatitudeRef' => { Description => '目的地ã®ç·¯åº¦ã®ãŸã‚ã®å‚ç…§', PrintConv => { 'North' => '北緯', 'South' => 'å—ç·¯', }, }, 'GPSDestLongitude' => '目的地ã®çµŒåº¦', 'GPSDestLongitudeRef' => { Description => '目的地ã®çµŒåº¦ã®ãŸã‚ã®å‚ç…§', PrintConv => { 'East' => 'æ±çµŒ', 'West' => '西経', }, }, 'GPSDifferential' => { Description => 'GPS誤差修正', PrintConv => { 'Differential Corrected' => '誤差修正ã‚り', 'No Correction' => '誤差修正無ã—', }, }, 'GPSImgDirection' => 'ã‚¤ãƒ¡ãƒ¼ã‚¸ã®æ–¹å‘', 'GPSImgDirectionRef' => { Description => 'ç”»åƒæ–¹å‘å‚ç…§', PrintConv => { 'Magnetic North' => 'ç£æ°—ã®æ–¹å‘', 'True North' => 'æœ¬å½“ã®æ–¹å‘', }, }, 'GPSInfo' => 'GPS IFDã¸ã®ãƒã‚¤ãƒ³ã‚¿', 'GPSLatitude' => '緯度', 'GPSLatitudeRef' => { Description => '北緯ã¾ãŸã¯å—ç·¯', PrintConv => { 'North' => '北緯', 'South' => 'å—ç·¯', }, }, 'GPSLongitude' => '経度', 'GPSLongitudeRef' => { Description => 'æ±çµŒã¾ãŸã¯è¥¿çµŒ', PrintConv => { 'East' => 'æ±çµŒ', 'West' => '西経', }, }, 'GPSMapDatum' => 'データãŒä½¿ã£ãŸæ¸¬åœ°æ¸¬é‡', 'GPSMeasureMode' => { Description => 'GPS測定モード', PrintConv => { '2-D' => '2次元測定', '2-Dimensional' => '2次元測定', '2-Dimensional Measurement' => '2次元測定', '3-D' => '3次元測定', '3-Dimensional' => '3次元測定', '3-Dimensional Measurement' => '3次元測定', }, }, 'GPSProcessingMethod' => 'GPSå‡¦ç†æ–¹æ³•ã®åç§°', 'GPSSatellites' => '測定ã®ãŸã‚ã«ä½¿ã‚れãŸGPS衛星', 'GPSSpeed' => 'GPSå—信機ã®ã‚¹ãƒ”ード', 'GPSSpeedRef' => { Description => 'スピードå˜ä½', PrintConv => { 'km/h' => '時速(km)', 'knots' => 'ノット', 'mph' => '時速(マイル)', }, }, 'GPSStatus' => { Description => 'GPSå—信機ステータス', PrintConv => { 'Measurement Active' => '測定アクティブ', 'Measurement Void' => '測定無効', }, }, 'GPSTimeStamp' => 'GPS時間(åŽŸå­æ™‚計)', 'GPSTrack' => '動作方å‘', 'GPSTrackRef' => { Description => '動作方å‘ã®å‚ç…§', PrintConv => { 'Magnetic North' => 'ç£æ°—ã®æ–¹å‘', 'True North' => 'æœ¬å½“ã®æ–¹å‘', }, }, 'GPSVersionID' => 'GPSã‚¿ã‚°ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'GainBase' => '基本ゲイン', 'GainControl' => { Description => 'ゲインコントロール', PrintConv => { 'High gain down' => '高ã„ゲインダウン', 'High gain up' => '高ã„ゲインアップ', 'Low gain down' => '低ã„ゲインダウン', 'Low gain up' => '低ã„ゲインアップ', 'None' => 'ç„¡ã—', }, }, 'Gamma' => 'ガンマ', 'GammaCompensatedValue' => 'ガンマ補償値', 'Gamut' => '全域', 'Gapless' => { PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'GeoTiffAsciiParams' => 'ジオアスキー設定タグ', 'GeoTiffDirectory' => 'ジオキーディレクトリタグ', 'GeoTiffDoubleParams' => 'ジオダブル設定タグ', 'Gradation' => 'グラデーション', 'GrayPoint' => 'グレーãƒã‚¤ãƒ³ãƒˆ', 'GrayResponseCurve' => 'グレーå応曲線', 'GrayResponseUnit' => { Description => 'グレーå応å˜ä½', PrintConv => { '0.0001' => 'å˜ä½ã®æ•°ã¯1000を表ã™', '0.001' => 'å˜ä½ã®æ•°ã¯100を表ã™', '0.1' => 'å˜ä½ã®æ•°ã¯10を表ã™', '1e-05' => 'å˜ä½ã®æ•°ã¯10-1000を表ã™', '1e-06' => 'å˜ä½ã®æ•°ã¯100-1000を表ã™', }, }, 'GrayScale' => 'グレースケール', 'GrayTRC' => 'ç°è‰²èª¿å¢—殖曲線', 'GreenMatrixColumn' => '緑色マトリックス列', 'GreenTRC' => '緑色調増殖曲線', 'GridDisplay' => { Description => 'ビューファインダーグリッド表示', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'GripBatteryADLoad' => 'é›»æºA/Dグリップ起動時', 'GripBatteryADNoLoad' => 'é›»æºA/Dグリップオフ時', 'GripBatteryState' => 'é›»æºçŠ¶æ…‹ã‚°ãƒªãƒƒãƒ—', 'HCUsage' => 'HC使用', 'HDR' => { Description => 'オートHDR', PrintConv => { 'Off' => '切', }, }, 'HalftoneHints' => 'ãƒãƒ¼ãƒ•トーンヒント', 'Headline' => 'ヘッドライン', 'HeightResolution' => 'é«˜ã•æ–¹å‘ã®ç”»åƒè§£åƒåº¦', 'HighISONoiseReduction' => { Description => '高感度ノイズリダクション', PrintConv => { 'Auto' => 'オート', 'High' => '高ã„', 'Low' => 'ソフト', 'Minimal' => '最å°', 'Normal' => '標準', 'Off' => 'オフ', 'On' => 'オン', 'Standard' => 'スタンダード', 'Strong' => 'å¼·', 'Weak' => 'å¼±', 'Weakest' => '微弱', }, }, 'Highlight' => 'ãƒã‚¤ãƒ©ã‚¤ãƒˆ', 'HighlightTonePriority' => { Description => '高è¼åº¦å´ãƒ»éšŽèª¿å„ªå…ˆ', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', 'Off' => 'オフ', 'On' => 'オン', }, }, 'HometownCity' => 'ç¾åœ¨åœ°', 'HometownCityCode' => 'ç¾åœ¨åœ°ã‚³ãƒ¼ãƒ‰', 'HometownDST' => { Description => 'ç¾åœ¨åœ°DST', PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'HostComputer' => 'ホストコンピューター', 'Hue' => '色相', 'HueAdjustment' => '色相調整', 'HueSetting' => '色相設定', 'ICCProfile' => 'ICCプロフィール', 'ICC_Profile' => 'ICC入力色プロフィール', 'IPTC-NAA' => 'IPTC-NAAメタデータ', 'IPTCBitsPerSample' => 'サンプルã‚ãŸã‚Šãƒ“ット数', 'IPTCData' => 'IPTCデータ', 'IPTCImageHeight' => 'ライン数', 'IPTCImageRotation' => 'イメージ回転', 'IPTCImageWidth' => 'ラインã‚ãŸã‚Šã®ãƒ”クセル数', 'IPTCPictureNumber' => '写真番å·', 'IPTCPixelHeight' => 'スキャン方å‘垂直ピクセルサイズ', 'IPTCPixelWidth' => 'スキャン方å‘ピクセルサイズ', 'ISO' => 'ISOスピードレート', 'ISO2' => 'ISO(2)', 'ISOAuto' => 'ISOオート', 'ISODisplay' => 'ISO表示', 'ISOExpansion' => { Description => 'ISO感度拡張', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ISOExpansion2' => { Description => 'ISO拡大(2)', PrintConv => { 'Off' => 'オフ', }, }, 'ISOFloor' => '最低感度', 'ISOInfo' => 'ISO情報', 'ISOSelection' => 'ISOé¸æŠž', 'ISOSetting' => { Description => 'ISO設定', PrintConv => { 'Auto' => 'オート', 'Manual' => 'マニュアル', }, }, 'ISOSpeedExpansion' => { Description => 'ISO感度拡張', PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'ISOSpeedIncrements' => { Description => 'ISO感度ステップ値', PrintConv => { '1 Stop' => '1ステップ', '1/3 Stop' => '1/3ステップ', }, }, 'ISOSpeedRange' => { Description => 'ISO感度ã®åˆ¶å¾¡ç¯„囲ã®è¨­å®š', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'ISOStepSize' => { Description => 'ISO感度ステップ値', PrintConv => { '1 EV' => '1ステップ', '1/2 EV' => '1/2ステップ', '1/3 EV' => '1/3ステップ', }, }, 'ISOValue' => 'ISO感度', 'IT8Header' => 'IT8ヘッダー', 'Illumination' => { Description => 'イルミãƒãƒ¼ã‚·ãƒ§ãƒ³', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'Image::ExifTool::NikonCapture::RedEyeData' => 'Nikon Capture 赤目データ', 'ImageAdjustment' => 'イメージ調整', 'ImageAreaOffset' => 'イメージ領域オフセット', 'ImageAuthentication' => { Description => 'イメージèªè¨¼', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ImageBoundary' => 'イメージ境界線', 'ImageByteCount' => 'ç”»åƒãƒã‚¤ãƒˆæ•°', 'ImageColorIndicator' => 'ç”»åƒè‰²æŒ‡æ¨™', 'ImageColorValue' => 'ç”»åƒè‰²å€¤', 'ImageCount' => 'イメージカウント', 'ImageDataDiscard' => { Description => 'イメージデータ廃棄', PrintConv => { 'Flexbits Discarded' => 'フレックスビット破棄', 'Full Resolution' => '完全ãªè§£åƒåº¦', 'HighPass Frequency Data Discarded' => 'ãƒã‚¤ãƒ‘ス周波数データ破棄', 'Highpass and LowPass Frequency Data Discarded' => 'ãƒã‚¤ãƒ‘スã¨ãƒ­ãƒ¼ãƒ‘ス周波数データ破棄', }, }, 'ImageDataSize' => 'イメージデータサイズ', 'ImageDepth' => 'ã‚¤ãƒ¡ãƒ¼ã‚¸ã®æ·±ã•', 'ImageDescription' => 'イメージ説明', 'ImageDustOff' => { PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ImageEditCount' => 'ç”»åƒå‡¦ç†ã‚«ã‚¦ãƒ³ãƒˆ', 'ImageEditing' => { Description => 'イメージ処ç†', PrintConv => { 'Cropped' => 'クロップ', 'Digital Filter' => 'デジタルフィルター', 'Frame Synthesis?' => 'ãƒ•ãƒ¬ãƒ¼ãƒ åˆæˆï¼Ÿ', 'None' => '未処ç†', }, }, 'ImageHeight' => 'ç”»åƒé«˜ã•', 'ImageHistory' => 'ç”»åƒå±¥æ­´', 'ImageID' => 'イメージID', 'ImageInfo' => 'ç”»åƒæƒ…å ±', 'ImageLayer' => 'イメージレイヤー', 'ImageNumber' => 'イメージ番å·', 'ImageNumber2' => 'イメージ番å·(2)', 'ImageOffset' => 'イメージオフセット', 'ImageOptimization' => 'イメージ最é©åŒ–', 'ImageOrientation' => { Description => 'イメージ方å‘', PrintConv => { 'Landscape' => 'ランドスケープ', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Square' => '正方形', }, }, 'ImageProcessing' => 'イメージ処ç†', 'ImageProcessingVersion' => 'ç”»åƒå‡¦ç†ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'ImageQuality' => { Description => 'ç”»åƒå“質', PrintConv => { 'High' => '高ã„', 'Motion Picture' => 'å‹•ç”»', 'Normal' => '標準', }, }, 'ImageQuality2' => 'イメージå“質2', 'ImageResourceBlocks' => 'イメージリソースブロック', 'ImageReview' => { Description => 'ç”»åƒè©•価', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ImageReviewTime' => '自動オフタイマー ç”»åƒè©•価時間', 'ImageRotated' => { PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'ImageSize' => 'イメージサイズ', 'ImageSourceData' => 'イメージソースデータ', 'ImageStabilization' => { Description => 'イメージスタビライザー', PrintConv => { 'Best Shot' => 'ベストショット', 'Off' => 'オフ', 'On' => 'オン', 'On, Mode 1' => 'オンã€ãƒ¢ãƒ¼ãƒ‰ï¼‘', 'On, Mode 2' => 'オンã€ãƒ¢ãƒ¼ãƒ‰ï¼’', }, }, 'ImageTone' => { Description => 'ç”»åƒä»•上', PrintConv => { 'Bright' => '鮮やã‹', 'Landscape' => '風景', 'Monochrome' => 'モノトーン', 'Natural' => 'ナãƒãƒ¥ãƒ©ãƒ«', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Vibrant' => 'é›…(MIYABI)', }, }, 'ImageType' => 'ページ', 'ImageUniqueID' => 'ユニークãªã‚¤ãƒ¡ãƒ¼ã‚¸ID', 'ImageWidth' => 'ç”»åƒå¹…', 'Index' => '目次', 'Indexed' => 'インデックス', 'InfoButtonWhenShooting' => { Description => '撮影時ã®INFOボタン', PrintConv => { 'Displays camera settings' => 'カメラ設定内容を表示', 'Displays shooting functions' => '撮影機能ã®è¨­å®šçŠ¶æ…‹ã‚’è¡¨ç¤º', }, }, 'InitialZoomSetting' => { Description => 'åˆæœŸã‚ºãƒ¼ãƒ è¨­å®š', PrintConv => { 'High Magnification' => 'é«˜ã„æ‹¡å¤§', 'Low Magnification' => 'ä½Žã„æ‹¡å¤§', 'Medium Magnification' => '中間拡大', }, }, 'InkNames' => 'インクå', 'InkSet' => 'インクセット', 'Instructions' => '詳細', 'IntellectualGenre' => 'インテリジャンル', 'IntelligentAuto' => 'インテリジェントオート', 'IntensityStereo' => { PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'IntergraphMatrix' => '相互グラフマトリックスタグ', 'Interlace' => 'インタレース', 'InternalFlash' => { Description => '内蔵フラッシュコントロール', PrintConv => { 'Commander Mode' => 'コマンダーモード', 'Fired' => 'フラッシュ発光', 'Manual' => 'マニュアル', 'No' => 'フラッシュ未発光', 'Off' => 'オフ', 'On' => 'オン', 'Repeating Flash' => 'リピーティングフラッシュ', }, }, 'InternalFlashAE1' => '内蔵フラッシュAE1?', 'InternalFlashAE1_0' => '内蔵フラッシュAE1(0)?', 'InternalFlashAE2' => '内蔵フラッシュAE2?', 'InternalFlashAE2_0' => '内蔵フラッシュAE2(0)?', 'InternalFlashMode' => { Description => '内蔵ストロボモード', PrintConv => { 'Did not fire, (Unknown 0xf4)' => 'ã‚ªãƒ•ï¼ˆæœªç¢ºèª 0xF4?)', 'Did not fire, Auto' => 'オフã€ã‚ªãƒ¼ãƒˆ', 'Did not fire, Auto, Red-eye reduction' => 'オフã€ã‚ªãƒ¼ãƒˆã€èµ¤ç›®è»½æ¸›', 'Did not fire, Normal' => 'ã‚ªãƒ•ã€æ¨™æº–', 'Did not fire, Red-eye reduction' => 'オフã€èµ¤ç›®è»½æ¸›', 'Did not fire, Slow-sync' => 'オフã€ã‚¹ãƒ­ãƒ¼ã‚·ãƒ³ã‚¯ãƒ­', 'Did not fire, Slow-sync, Red-eye reduction' => 'オフã€ã‚¹ãƒ­ãƒ¼ã‚·ãƒ³ã‚¯ãƒ­ã€èµ¤ç›®è»½æ¸›', 'Did not fire, Trailing-curtain Sync' => 'オフã€å¾Œå¹•シンクロ', 'Did not fire, Wireless (Control)' => 'オフã€ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ï¼ˆã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ç™ºå…‰ï¼‰', 'Did not fire, Wireless (Master)' => 'オフã€ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ï¼ˆãƒžã‚¹ã‚¿ãƒ¼ç™ºå…‰ï¼‰', 'Fired' => 'オン', 'Fired, Auto' => 'オンã€ã‚ªãƒ¼ãƒˆ', 'Fired, Auto, Red-eye reduction' => 'オンã€ã‚ªãƒ¼ãƒˆã€èµ¤ç›®è»½æ¸›', 'Fired, Red-eye reduction' => 'オンã€èµ¤ç›®è»½æ¸›', 'Fired, Slow-sync' => 'オンã€ã‚¹ãƒ­ãƒ¼ã‚·ãƒ³ã‚¯ãƒ­', 'Fired, Slow-sync, Red-eye reduction' => 'オンã€ã‚¹ãƒ­ãƒ¼ã‚·ãƒ³ã‚¯ãƒ­ã€èµ¤ç›®è»½æ¸›', 'Fired, Trailing-curtain Sync' => 'オンã€å¾Œå¹•シンクロ', 'Fired, Wireless (Control)' => 'オンã€ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ï¼ˆã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ç™ºå…‰ï¼‰', 'Fired, Wireless (Master)' => 'オンã€ãƒ¯ã‚¤ãƒ¤ãƒ¬ã‚¹ï¼ˆãƒžã‚¹ã‚¿ãƒ¼ç™ºå…‰ï¼‰', 'n/a - Off-Auto-Aperture' => '該当ãªã—-自動絞りオフ', }, }, 'InternalFlashStrength' => '内蔵フラッシュ強度', 'InternalFlashTable' => '内蔵フラッシュテーブル', 'InternalSerialNumber' => '内部シリアル番å·', 'InteropIndex' => { Description => 'インターオペラビリティID', PrintConv => { 'R03 - DCF option file (Adobe RGB)' => 'R03: DCFオプションファイル(Adobe RGB)', 'R98 - DCF basic file (sRGB)' => 'R98: DCF基本ファイル(sRGB)', 'THM - DCF thumbnail file' => 'THM: DCFサムãƒã‚¤ãƒ«ãƒ•ァイル', }, }, 'InteropOffset' => 'äº’æ›æ€§IFDã¸ã®ãƒã‚¤ãƒ³ã‚¿', 'InteropVersion' => 'インターオペラビリティãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'IntervalLength' => 'インターãƒãƒ«é•·', 'IntervalMode' => 'インターãƒãƒ«ãƒ¢ãƒ¼ãƒ‰', 'IntervalNumber' => 'インターãƒãƒ«æ•°', 'JFIFVersion' => 'JFIFãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'JPEGACTables' => 'JPEG AC テーブル', 'JPEGDCTables' => 'JPEG DC テーブル', 'JPEGLosslessPredictors' => 'JPEGロスレス予測', 'JPEGPointTransforms' => 'JPEGä½ç½®å¤‰æ›', 'JPEGProc' => 'JPEG処ç†', 'JPEGQTables' => 'JPEG Q テーブル', 'JPEGQuality' => { Description => 'JPEG å“質', PrintConv => { 'Extra Fine' => 'エクストラファイン', 'Fine' => 'ファイン', 'Standard' => 'ノーマル', 'n/a' => '未設定', }, }, 'JPEGRestartInterval' => 'JPEGå†é–‹é–“éš”', 'JPEGTables' => 'JPEGテーブル', 'JobID' => 'ジョブID', 'JpgRecordedPixels' => 'JPEG記録サイズ', 'Keyword' => 'キーワード', 'Keywords' => 'キーワード', 'LC1' => 'レンズデータ', 'LC10' => 'Mv\' nv\' データ', 'LC11' => 'AVC 1/EXP データ', 'LC12' => 'Mv1 Avminsifデータ', 'LC14' => 'UNT_12 UNT_6 データ', 'LC15' => 'çµ±åˆãƒ•ラッシュ最é©ã‚¨ãƒ³ãƒ‰ãƒ‡ãƒ¼ã‚¿', 'LC2' => 'è·é›¢ã‚³ãƒ¼ãƒ‰ãƒ‡ãƒ¼ã‚¿', 'LC3' => 'K値(', 'LC4' => 'è¿‘è·é›¢åŽå·®è¨‚正データ', 'LC5' => '明色åŽå·®è¨‚正データ', 'LC6' => 'オープンåŽå·®ãƒ‡ãƒ¼ã‚¿', 'LC7' => 'AF最低作動状態データ(LC7)', 'LCDDisplayAtPowerOn' => { Description => 'é›»æºã‚¹ã‚¤ãƒƒãƒã€ˆONã€‰æ™‚ã®æ¶²æ™¶ç‚¹ç¯', PrintConv => { 'Display' => '点ç¯', 'Retain power off status' => 'é›»æºã€ˆOFF〉時ã®çŠ¶æ…‹ã‚’ä¿æŒ', }, }, 'LCDDisplayReturnToShoot' => { Description => 'æ¶²æ™¶ãƒ¢ãƒ‹ã‚¿ãƒ¼è¡¨ç¤ºä¸­ã®æ’®å½±çŠ¶æ…‹å¾©å¸°', PrintConv => { 'Also with * etc.' => '*ボタンãªã©ã§ã‚‚復帰', 'With Shutter Button only' => 'シャッターボタンã§ã®ã¿å¾©å¸°', }, }, 'LCDIllumination' => { Description => 'LCDイルミãƒãƒ¼ã‚·ãƒ§ãƒ³', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'LCDIlluminationDuringBulb' => { Description => 'ãƒãƒ«ãƒ–撮影中ã®è¡¨ç¤ºãƒ‘ãƒãƒ«ç…§æ˜Ž', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'LCDPanels' => '上é¢è¡¨ç¤ºãƒ‘ãƒãƒ«ï¼èƒŒé¢è¡¨ç¤ºãƒ‘ãƒãƒ«', 'LCHEditor' => { Description => 'LCHエディター', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'LanguageIdentifier' => '言語識別å­', 'LastFileNumber' => '最終ファイル番å·', 'LeafData' => 'リーフデータ', 'Lens' => 'レンズ', 'Lens35efl' => 'レンズ', 'LensAFStopButton' => { Description => 'レンズ・AFã‚¹ãƒˆãƒƒãƒ—ãƒœã‚¿ãƒ³ã®æ©Ÿèƒ½', PrintConv => { 'AE lock' => 'AEロック', 'AE lock while metering' => 'AEロック(タイマー中)', 'AF Stop' => 'AFストップ', 'AF point: M->Auto/Auto->ctr' => '測è·ç‚¹ ä»»æ„→自動/自動→中央', 'AF start' => 'AFスタート', 'AF stop' => 'AFストップ', 'IS start' => '手ブレ補正機能作動', 'One Shot <-> AI servo' => 'ワンショット/AIサーボ', 'Switch to registered AF point' => '登録AFフレームã¸ã®åˆ‡ã‚Šæ›ãˆ', }, }, 'LensApertureRange' => 'レンズ絞り範囲', 'LensData' => 'K値(LC3)', 'LensDistortionParams' => 'レンズ歪曲パラメータ', 'LensDriveNoAF' => { Description => 'AF測è·ä¸èƒ½æ™‚ã®ãƒ¬ãƒ³ã‚ºå‹•作', PrintConv => { 'Focus search off' => '駆動ã—ãªã„', 'Focus search on' => 'サーãƒé§†å‹•ã™ã‚‹', }, }, 'LensFStops' => 'レンズF値', 'LensFirmwareVersion' => 'レンズファームウェアãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'LensID' => 'レンズID', 'LensInfo' => 'レンズ情報', 'LensKind' => 'レンズ種類/ãƒãƒ¼ã‚¸ãƒ§ãƒ³(LC0)', 'LensProperties' => 'レンズ機能?', 'LensSerialNumber' => 'レンズシリアル番å·', 'LensSpec' => 'レンズ', 'LensTemperature' => 'レンズ温度', 'LensType' => 'レンズタイプ', 'LicenseType' => { PrintConv => { 'Unknown' => '䏿˜Ž', }, }, 'LightCondition' => 'ライトコンディション', 'LightReading' => 'ライトリーディング', 'LightSource' => { Description => 'å…‰æº', PrintConv => { 'Cloudy' => '曇り', 'Cool White Fluorescent' => '白色è›å…‰ç¯', 'Custom 1-4' => 'カスタム1-4', 'Day White Fluorescent' => '昼白色è›å…‰ç¯', 'Daylight' => '昼光', 'Daylight Fluorescent' => '昼光色è›å…‰ç¯', 'Fine Weather' => '良ã„天気', 'Flash' => 'ストロボ', 'Fluorescent' => 'è›å…‰ç¯', 'ISO Studio Tungsten' => 'ISOスタジオタングステン', 'Other' => 'ãã®ä»–ã®å…‰æº', 'Shade' => '日陰', 'Standard Light A' => '標準ライトA', 'Standard Light B' => '標準ライトB', 'Standard Light C' => '標準ライトC', 'Tungsten (Incandescent)' => 'タングステン(白熱ç¯)', 'Unknown' => '䏿˜Ž', 'Warm White Fluorescent' => '暖白光色è›å…‰ç¯', 'White Fluorescent' => '温白色è›å…‰ç¯', }, }, 'LightSourceSpecial' => { Description => 'å…‰æºã‚¹ãƒšã‚·ãƒ£ãƒ«', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'Lightness' => '明度', 'LinearResponseLimit' => 'ç·šåž‹å応é™ç•Œ', 'LinearizationTable' => '線形化テーブル', 'Lit' => { PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'LiveViewExposureSimulation' => { Description => 'ライブビュー露出シミュレーション', PrintConv => { 'Disable (LCD auto adjust)' => 'ã—ãªã„(驿­£è¡¨ç¤º)', 'Enable (simulates exposure)' => 'ã™ã‚‹(撮影露出イメージ表示)', }, }, 'LiveViewShooting' => { PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'LocalizedCameraModel' => 'é™å®šã‚«ãƒ¡ãƒ©ãƒ¢ãƒ‡ãƒ«', 'Location' => '撮影場所', 'LockMicrophoneButton' => { Description => 'プロテクト/録音ボタン ã‚¿ãƒ³ã®æ©Ÿèƒ½', PrintConv => { 'Protect (hold:record memo)' => 'プロテクト(長押ã—ã§éŒ²éŸ³)', 'Record memo (protect:disable)' => '録音(プロテクトä¸å¯)', }, }, 'LongExposureNoiseReduction' => { Description => '長秒露光ノイズリダクション', PrintConv => { 'Auto' => 'オート', 'Off' => 'オフ', 'On' => 'オン', 'n/a' => '未設定', }, }, 'LookupTable' => 'ルックアップテーブル', 'LoopStyle' => { PrintConv => { 'Normal' => '標準', }, }, 'Luminance' => 'è¼åº¦', 'LuminanceNoiseReduction' => { PrintConv => { 'High' => '高ã„', 'Low' => 'ソフト', 'Off' => 'オフ', }, }, 'MB-D10Batteries' => 'MB-D10é›»æºã‚¿ã‚¤ãƒ—', 'MB-D10BatteryType' => 'MB-D10é›»æºã‚¿ã‚¤ãƒ—', 'MB-D80Batteries' => 'MB-D80ãƒãƒƒãƒ†ãƒªãƒ¼', 'MIEVersion' => 'MIEãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'MIMEType' => 'MIMEタイプ', 'MSStereo' => { PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'Macro' => { Description => 'マクロ', PrintConv => { 'Macro' => 'マクロ', 'Manual' => 'マニュアル', 'Normal' => '標準', 'Off' => 'オフ', 'On' => 'オン', 'Super Macro' => 'スーパーマクロ', 'n/a' => '未設定', }, }, 'MacroMode' => { Description => 'マクロモード', PrintConv => { 'Macro' => 'マクロ', 'Normal' => 'ノーマル', 'Off' => 'オフ', 'On' => 'オン', 'Super Macro' => 'スーパーマクロ', 'Tele-Macro' => 'テレマクロ', }, }, 'MagnifiedView' => { Description => '拡大ズーム表示', PrintConv => { 'Image playback only' => 'å†ç”Ÿæ™‚ã®ã¿', 'Image review and playback' => '撮影直後ã¨å†ç”Ÿæ™‚', }, }, 'MainDialExposureComp' => { Description => 'Main Dial 露出補正', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'Make' => 'メーカー', 'MakeAndModel' => '作æˆã¨ãƒ¢ãƒ‡ãƒ«', 'MakerNote' => 'DNGプライベートデータ', 'MakerNoteOffset' => 'メーカーノートオフセット', 'MakerNoteSafety' => { Description => 'メーカーノートセーフティ', PrintConv => { 'Safe' => '安全', 'Unsafe' => 'å±é™º', }, }, 'MakerNoteType' => 'メーカーノートタイプ', 'MakerNoteVersion' => 'メーカーノートãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'MakerNotes' => 'メーカーノート', 'ManometerPressure' => '気圧計圧力', 'ManometerReading' => '気圧計高度', 'ManualFlash' => 'マニュアルフラッシュ', 'ManualFlashOutput' => { Description => 'マニュアルフラッシュ出力', PrintConv => { 'Low' => 'ソフト', 'n/a' => '該当無ã—', }, }, 'ManualFocusDistance' => 'マニュアルフォーカスè·é›¢', 'ManualTv' => { Description => 'マニュアル露出時Tvã€Av値設定', PrintConv => { 'Tv=Control/Av=Main' => 'Tv値=サブ電å­ãƒ€ã‚¤ãƒ¤ãƒ«/Av値=メイン電å­ãƒ€ã‚¤ãƒ¤ãƒ«', 'Tv=Main/Av=Control' => 'Tv値=メイン電å­ãƒ€ã‚¤ãƒ¤ãƒ«/Av値=サブ電å­ãƒ€ã‚¤ãƒ¤ãƒ«', }, }, 'ManufactureDate' => '製造日付?', 'MaskedAreas' => 'マスク領域', 'MasterDocumentID' => 'マスタ文書ID', 'MasterGain' => 'マスターゲイン', 'Matteing' => 'マッãƒãƒ³ã‚°', 'MaxAperture' => '最大絞り', 'MaxApertureAtCurrentFocal' => 'ç¾åœ¨ç„¦ç‚¹è·é›¢ã®æœ€å¤§çµžã‚Š', 'MaxApertureAtMaxFocal' => '最大焦点時最大絞り', 'MaxApertureAtMinFocal' => '最å°ç„¦ç‚¹æ™‚最大絞り', 'MaxApertureValue' => '最大レンズå£å¾„', 'MaxContinuousRelease' => '最大連写レリーズ', 'MaxFocalLength' => '最大焦点è·é›¢', 'MaxSampleValue' => '最大サンプル値', 'MaximumDensityRange' => '最大密度範囲', 'MeasuredEV' => '計測EV', 'Measurement' => '測定オブザーãƒãƒ¼', 'MeasurementBacking' => 'ãƒãƒƒã‚¯æ¸¬å®š', 'MeasurementFlare' => 'フレア測定', 'MeasurementGeometry' => '幾何学測定', 'MeasurementIlluminant' => 'å…‰æºæ¸¬å®š', 'MeasurementObserver' => '測定オブザーãƒãƒ¼', 'MediaBlackPoint' => 'メディア黒点', 'MediaType' => { PrintConv => { 'Movie' => 'å‹•ç”»', 'Normal' => '標準', }, }, 'MediaWhitePoint' => 'メディア白点', 'Medium' => 'ミドル', 'MenuButtonDisplayPosition' => { Description => 'メニューã®è¡¨ç¤ºä½ç½®', PrintConv => { 'Previous' => 'ç›´å‰ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼', 'Previous (top if power off)' => 'ç›´å‰ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ï¼ˆé›»æºåˆ‡ã§å…ˆé ­ï¼‰', 'Top' => 'メニューã®å…ˆé ­', }, }, 'MenuButtonReturn' => { PrintConv => { 'Previous' => 'ç›´å‰ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼', 'Top' => '上', }, }, 'Metering' => { Description => '測光', PrintConv => { 'Center-weighted' => '中央é‡ç‚¹', 'Matrix' => '分割', 'Spot' => 'スãƒãƒƒãƒˆ', }, }, 'MeteringMode' => { Description => '測光モード', PrintConv => { 'Average' => 'å¹³å‡', 'Center-weighted average' => '中央é‡ç‚¹', 'Default' => 'デフォルト', 'Evaluative' => '評価', 'Multi-segment' => 'パターン', 'Multi-spot' => 'マルãƒã‚¹ãƒãƒƒãƒˆ', 'Other' => 'ãã®ä»–', 'Partial' => '部分', 'Pattern+AF' => 'パターン+AF', 'Spot' => 'スãƒãƒƒãƒˆ', 'Spot+Highlight control' => 'スãƒãƒƒãƒˆ+ãƒã‚¤ãƒ©ã‚¤ãƒˆã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«', 'Spot+Shadow control' => 'スãƒãƒƒãƒˆ+シャドウコントロール', 'Unknown' => '䏿˜Ž', }, }, 'MeteringMode2' => { Description => '測光モード2', PrintConv => { 'Multi-segment' => 'パターン', }, }, 'MeteringMode3' => { Description => '測光モード3', PrintConv => { 'Multi-segment' => 'パターン', }, }, 'MeteringTime' => '自動オフタイマー メータオフ時間', 'MinAperture' => '最å°çµžã‚Š', 'MinFocalLength' => '最å°ç„¦ç‚¹è·é›¢', 'MinSampleValue' => '最å°ã‚µãƒ³ãƒ—ル値', 'MinoltaCameraSettings2' => 'カメラ設定2', 'MinoltaCameraSettings5D' => 'カメラ設定(5D)', 'MinoltaCameraSettings7D' => 'カメラ設定(7D)', 'MinoltaDate' => '日付', 'MinoltaImageSize' => { Description => 'イメージサイズ', PrintConv => { 'Full' => 'フル', 'Large' => 'ラージ', 'Medium' => 'ミドル', 'Small' => 'スモール', }, }, 'MinoltaMakerNote' => 'ミノルタメーカーノート', 'MinoltaModelID' => 'モデルID', 'MinoltaQuality' => { Description => 'イメージå“質', PrintConv => { 'Economy' => 'エコノミー', 'Extra Fine' => 'エクストラファイン', 'Extra fine' => 'エクストラファイン', 'Fine' => 'ファイン', 'Normal' => '標準', 'Standard' => 'スタンダード', 'Super Fine' => 'スーパーファイン', }, }, 'MinoltaTime' => '時間', 'MirrorLockup' => { Description => 'ミラーアップ撮影', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', 'Enable: Down with Set' => 'ã™ã‚‹(SETボタンã§ãƒ€ã‚¦ãƒ³)', }, }, 'Model' => 'ç”»åƒå…¥åŠ›æ©Ÿå™¨ãƒ¢ãƒ‡ãƒ«', 'Model2' => 'ç”»åƒå…¥åŠ›æ©Ÿå™¨ãƒ¢ãƒ‡ãƒ«(2)', 'ModelTiePoint' => 'モデル拘æŸãƒã‚¤ãƒ³ãƒˆã‚¿ã‚°', 'ModelTransform' => 'モデル変化タグ', 'ModelingFlash' => { Description => 'モデリングフラッシュ', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ModifiedPictureStyle' => { PrintConv => { 'CM Set 1' => 'CMセット1', 'CM Set 2' => 'CMセット2', 'Faithful' => '忠実設定', 'High Saturation' => '高彩度', 'Landscape' => '風景', 'Low Saturation' => '低彩度', 'Monochrome' => 'モノトーン', 'Neutral' => 'ニュートラル', 'None' => 'ç„¡ã—', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Standard' => 'スタンダード', 'User Def. 1' => 'ユーザ設定1', 'User Def. 2' => 'ユーザ設定2', 'User Def. 3' => 'ユーザ設定3', }, }, 'ModifiedSaturation' => { Description => '彩度修正', PrintConv => { 'CM1 (Red Enhance)' => 'CM1 (赤増)', 'CM2 (Green Enhance)' => 'CM2 (緑増)', 'CM3 (Blue Enhance)' => 'CM3 (é’増)', 'CM4 (Skin Tones)' => 'CM4 (肌色増)', 'Off' => 'オフ', }, }, 'ModifiedSharpnessFreq' => { PrintConv => { 'High' => '高ã„', 'Low' => 'ソフト', 'Standard' => 'スタンダード', 'n/a' => '該当無ã—', }, }, 'ModifiedToneCurve' => { PrintConv => { 'Custom' => 'カスタム', 'Manual' => 'マニュアル', 'Standard' => 'スタンダード', }, }, 'ModifiedWhiteBalance' => { PrintConv => { 'Auto' => 'オート', 'Black & White' => '白黒', 'Cloudy' => '曇り', 'Custom' => 'カスタム', 'Custom 1' => 'カスタム1', 'Custom 2' => 'カスタム2', 'Custom 3' => 'カスタム3', 'Custom 4' => 'カスタム4', 'Daylight' => '昼光', 'Daylight Fluorescent' => '昼光色è›å…‰ç¯', 'Flash' => 'ストロボ', 'Fluorescent' => 'è›å…‰ç¯', 'Manual Temperature (Kelvin)' => 'マニュアル白熱ç¯ï¼ˆã‚±ãƒ«ãƒ“ン)', 'PC Set1' => 'PC設定1', 'PC Set2' => 'PC設定2', 'PC Set3' => 'PC設定3', 'PC Set4' => 'PC設定4', 'PC Set5' => 'PC設定5', 'Shade' => '日陰', 'Tungsten' => 'タングステン(白熱ç¯)', 'Underwater' => '水中', }, }, 'ModifyDate' => 'ãƒ•ã‚¡ã‚¤ãƒ«ä½œæˆæ—¥æ™‚', 'MoireFilter' => { PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'MonitorOffTime' => 'モニターオフé…延時間', 'MonochromeFilterEffect' => { PrintConv => { 'Green' => 'ç·‘', 'None' => 'ç„¡ã—', 'Orange' => 'オレンジ', 'Red' => '赤', 'Yellow' => '黄色', }, }, 'MonochromeLinear' => { PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'MonochromeToningEffect' => { PrintConv => { 'Blue' => 'é’', 'Green' => 'ç·‘', 'None' => 'ç„¡ã—', 'Purple' => 'ç´«', 'Sepia' => 'セピア', }, }, 'MultiExposure' => '多é‡éœ²å‡ºãƒ‡ãƒ¼ã‚¿', 'MultiExposureAutoGain' => { Description => '多é‡éœ²å‡ºè‡ªå‹•ゲイン', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'MultiExposureMode' => { Description => '多é‡éœ²å‡ºãƒ¢ãƒ¼ãƒ‰', PrintConv => { 'Image Overlay' => 'イメージオーãƒãƒ¼ãƒ¬ã‚¤', 'Multiple Exposure' => '多é‡éœ²å‡º', 'Off' => 'オフ', }, }, 'MultiExposureShots' => '多é‡éœ²å‡ºã‚·ãƒ§ãƒƒãƒˆ', 'MultiExposureVersion' => '多é‡éœ²å‡ºãƒ‡ãƒ¼ã‚¿ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'MultiFrameNoiseReduction' => { Description => 'マルãƒã‚·ãƒ§ãƒƒãƒˆãƒŽã‚¤ã‚ºãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³', PrintConv => { 'Off' => '切', 'On' => 'å…¥', }, }, 'MultiSample' => 'マルãƒã‚µãƒ³ãƒ—ル', 'MultiSelector' => { Description => 'マルãƒé¸æŠž', PrintConv => { 'Do Nothing' => '何もã—ãªã„', 'Reset Meter-off Delay' => 'メーターオフé…延時間リセット', }, }, 'MultiSelectorPlaybackMode' => { Description => 'マルãƒé¸æŠž å†ç”Ÿãƒ¢ãƒ¼ãƒ‰', PrintConv => { 'Choose Folder' => 'ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼é¸æŠž', 'Thumbnail On/Off' => 'サムãƒã‚¤ãƒ«ã€€ã‚ªãƒ³/オフ', 'View Histograms' => 'ヒストグラム表示', 'Zoom On/Off' => 'ズーム オン/オフ', }, }, 'MultiSelectorShootMode' => { Description => 'マルãƒé¸æŠž 撮影モード', PrintConv => { 'Highlight Active Focus Point' => 'ãƒã‚¤ãƒ©ã‚¤ãƒˆã‚¢ã‚¯ãƒ†ã‚£ãƒ–フォーカスãƒã‚¤ãƒ³ãƒˆ', 'Not Used' => '未使用', 'Select Center Focus Point' => '中央フォーカスãƒã‚¤ãƒ³ãƒˆé¸æŠž', }, }, 'MultipleExposureSet' => { Description => '多é‡éœ²å‡ºè¨­å®š', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'Mute' => { PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'MyColorMode' => { Description => 'マイカラーモード', PrintConv => { 'B&W' => '白黒', 'Color Accent' => 'カラーアクセント', 'Color Swap' => 'スイッãƒã‚«ãƒ©ãƒ¼', 'Custom' => 'カスタム', 'Dark Skin Tone' => 'ダークスキン調', 'Light Skin Tone' => 'ライトスカイ調', 'Neutral' => 'ニュートラル', 'Off' => 'オフ', 'Positive Film' => 'ãƒã‚¸ãƒ•ィルム', 'Sepia' => 'セピア', 'Vivid' => 'ビビッド', 'Vivid Blue' => 'ビビッドé’', 'Vivid Green' => 'ビビッド緑', 'Vivid Red' => 'ビビッド赤', }, }, 'MyColors' => 'マイカラーモード', 'NDFilter' => { Description => 'NDフィルター', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'NEFCompression' => { Description => 'RAW圧縮', PrintConv => { 'Lossless' => 'ロスレス', 'Lossy (type 1)' => '圧縮(タイプ1)', 'Lossy (type 2)' => '圧縮(タイプ2)', 'Uncompressed' => 'éžåœ§ç¸®', }, }, 'NEFLinearizationTable' => '線形化表', 'NamedColor2' => '色åç§°2', 'NativeDisplayInfo' => 'ãƒã‚¤ãƒ†ã‚£ãƒ–ディスプレイ情報', 'NewsPhotoVersion' => 'å ±é“写真レコードãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'NikonCaptureData' => 'ニコンキャプãƒãƒ£ãƒ¼ãƒ‡ãƒ¼ã‚¿', 'NikonCaptureOffsets' => 'ニコンキャプãƒãƒ£ãƒ¼ã‚ªãƒ•セット', 'NikonCaptureVersion' => 'ニコンキャプãƒãƒ£ãƒ¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'NoMemoryCard' => { Description => 'メモリーカード無ã—', PrintConv => { 'Enable Release' => 'レリーズå¯èƒ½', 'Release Locked' => 'レリーズロック', }, }, 'Noise' => 'ノイズ', 'NoiseFilter' => { Description => 'ピクãƒãƒ£ãƒ¼ãƒ¢ãƒ¼ãƒ‰ãƒŽã‚¤ã‚ºãƒ•ィルター', PrintConv => { 'High' => '高ã„', 'Low' => 'ソフト', 'Off' => 'オフ', 'Standard' => 'スタンダード', }, }, 'NoiseReduction' => { Description => 'ノイズリダクション', PrintConv => { 'Auto' => 'オート', 'Low' => '低ã„', 'Normal' => '標準', 'Off' => 'オフ', 'On' => 'オン', 'Standard' => 'スタンダード', }, }, 'NoiseReduction2' => 'ノイズリダクション2', 'NoiseReductionApplied' => 'é©ç”¨ãƒŽã‚¤ã‚ºãƒªãƒ€ã‚¯ã‚·ãƒ§ãƒ³', 'NoiseReductionData' => 'ノイズリダクションデータ', 'NoiseReductionIntensity' => 'ノイズリダクション強度', 'NoiseReductionMethod' => 'ノイズリダクション方法', 'NoiseReductionSharpness' => 'ノイズリダクションシャープãƒã‚¹', 'NominalMaxAperture' => '最大絞り', 'NominalMinAperture' => '最å°çµžã‚Š', 'NumAFPoints' => 'AFãƒã‚¤ãƒ³ãƒˆç•ªå·', 'NumIndexEntries' => 'インデックスエントリ数', 'NumberofInks' => 'インク番å·', 'OPIProxy' => 'OPIプロキシー', 'ObjectAttributeReference' => 'インテリジャンル', 'ObjectCycle' => 'オブジェクトサイクル', 'ObjectDistance' => '被写体ã¨ã®è·é›¢', 'ObjectFileType' => { PrintConv => { 'None' => 'ç„¡ã—', 'Unknown' => '䏿˜Ž', }, }, 'ObjectName' => 'タイトル', 'ObjectPreviewData' => 'オブジェクトデータプレビューデータ', 'ObjectPreviewFileFormat' => 'オブジェクトデータプレビューファイル形å¼', 'ObjectPreviewFileVersion' => 'オブジェクトデータプレビューファイル形å¼ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'ObjectTypeReference' => 'オブジェクトタイプå‚ç…§', 'OffsetSchema' => 'ã‚ªãƒ•ã‚»ãƒƒãƒˆã®æ¦‚è¦', 'OlympusImageHeight' => 'イメージ高', 'OlympusImageWidth' => 'イメージ幅', 'OneTouchWB' => { Description => 'ワンタッãƒãƒ›ãƒ¯ã‚¤ãƒˆãƒãƒ©ãƒ³ã‚¹', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', 'On (Preset)' => 'オン(プリセット)', }, }, 'OpticalZoomCode' => '光学ズームコード', 'OpticalZoomMode' => { Description => '光学ズームモード', PrintConv => { 'Extended' => 'EX光学', 'Standard' => 'スタンダード', }, }, 'OpticalZoomOn' => { Description => '光学ズームオン', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'Opto-ElectricConvFactor' => '光電交æ›é–¢æ•°', 'OrderNumber' => 'オーダー番å·', 'Orientation' => { Description => 'ç”»åƒã®å‘ã', PrintConv => { 'Horizontal (normal)' => '水平(標準)', 'Rotate 180' => '180度回転', 'Rotate 270 CW' => '270度回転 CW', 'Rotate 90 CW' => '90度回転 CW', }, }, 'OriginalDecisionDataOffset' => 'オリジナル決定データオフセット', 'OriginalRawFileData' => 'オリジナルRAWファイルデータ', 'OriginalRawFileDigest' => 'オリジナルRAWファイルè¦ç´„', 'OriginalRawFileName' => 'オリジナルRAWファイルå', 'OriginalTransmissionReference' => '作業識別å­', 'OriginatingProgram' => '開始プログラム', 'OutputResponse' => '出力å応', 'OwnerID' => 'オーナーID', 'OwnerName' => 'オーナーå', 'PEFVersion' => 'PEFãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'Padding' => '引ã伸ã°ã—', 'PageName' => 'ページå', 'PageNumber' => 'ページ番å·', 'PanasonicExifVersion' => 'パナソニックExifãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'PanasonicRawVersion' => 'パナソニックRAWãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'PanasonicTitle' => 'タイトル', 'PanoramaDirection' => 'F値', 'PanoramaMode' => 'パノラマモード', 'PentaxImageSize' => 'ペンタックスイメージサイズ', 'PentaxModelID' => 'ペンタックスモデル', 'PentaxVersion' => 'ペンタックスãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'People' => '人々', 'PhaseDetectAF' => { Description => 'オートフォーカス', PrintConv => { 'Off' => 'オフ', 'On (51-point)' => 'オン', }, }, 'PhotoEffect' => { Description => '写真効果', PrintConv => { 'B&W' => '白黒', 'Custom' => 'カスタム', 'Neutral' => 'ニュートラル', 'Off' => 'オフ', 'Sepia' => 'セピア', 'Vivid' => 'ビビッド', }, }, 'PhotoEffects' => { Description => 'フォトエフェクト', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'PhotoEffectsBlue' => 'フォトエフェクトé’', 'PhotoEffectsData' => 'フォトエフェクトデータ', 'PhotoEffectsGreen' => 'フォトエフェクト緑', 'PhotoEffectsRed' => 'フォトエフェクト赤', 'PhotoEffectsType' => { Description => 'フォトエフェクトタイプ', PrintConv => { 'B&W' => '白黒', 'None' => 'ç„¡ã—', 'Sepia' => 'セピア', 'Tinted' => '淡調', }, }, 'PhotoInfoPlayback' => { Description => '写真情報/å†ç”Ÿ', PrintConv => { 'Info Left-right, Playback Up-down' => '情報<>/å†ç”Ÿ', 'Info Up-down, Playback Left-right' => '情報/å†ç”Ÿ<>', }, }, 'PhotometricInterpretation' => { Description => 'ピクセル形å¼', PrintConv => { 'BlackIsZero' => 'é»’ã¯ã‚¼ãƒ­', 'Color Filter Array' => 'CFA (カラーフィルターマトリックス)', 'Pixar LogL' => 'CIE Log2(L) (ログè¼åº¦)', 'Pixar LogLuv' => 'CIE Log2(L)(u\',v\') (ログè¼åº¦ã¨åŸºæº–色)', 'RGB Palette' => 'パレット色', 'Transparency Mask' => '逿˜Žåº¦ãƒžã‚¹ã‚¯', 'WhiteIsZero' => '白ã¯ã‚¼ãƒ­', }, }, 'PhotoshopAnnotations' => 'フォトショップ注釈', 'PhotoshopFormat' => { PrintConv => { 'Standard' => 'スタンダード', }, }, 'PictInfo' => '写真情報', 'PictureControl' => { Description => 'ピクãƒãƒ£ãƒ¼ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'PictureControlActive' => { PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'PictureControlAdjust' => { Description => 'ピクãƒãƒ£ãƒ¼ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«èª¿æ•´', PrintConv => { 'Default Settings' => 'デフォルト設定', 'Full Control' => 'フルコントロール', 'Quick Adjust' => 'クイック調整', }, }, 'PictureControlBase' => 'ピクãƒãƒ£ãƒ¼ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒ™ãƒ¼ã‚¹', 'PictureControlName' => 'ピクãƒãƒ£ãƒ¼ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«å', 'PictureControlQuickAdjust' => 'ピクãƒãƒ£ãƒ¼ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã‚¯ã‚¤ãƒƒã‚¯èª¿æ•´', 'PictureControlVersion' => 'ピクãƒãƒ£ãƒ¼ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'PictureFinish' => { Description => 'ピクãƒãƒ£ãƒ¼ãƒ•ィニッシュ', PrintConv => { 'Monochrome' => 'モノトーン', 'Natural' => 'ナãƒãƒ¥ãƒ©ãƒ«', 'Night Portrait' => '人物夜景', 'Night Scene' => '夜景', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', }, }, 'PictureMode' => { Description => 'ピクãƒãƒ£ãƒ¼ãƒ¢ãƒ¼ãƒ‰', PrintConv => { '1/2 EV steps' => '1/2 EVステップ', '1/3 EV steps' => '1/3 EVステップ', 'Anti-blur' => '手振れ補正', 'Aperture Priority' => '絞り優先', 'Aperture Priority, Off-Auto-Aperture' => '絞り優先(自動絞りOFF)', 'Aperture-priority AE' => '絞り優先', 'Auto' => 'オート', 'Auto PICT (Landscape)' => 'オートピクãƒãƒ£ãƒ¼ï¼ˆé¢¨æ™¯ï¼‰', 'Auto PICT (Macro)' => 'オートピクãƒãƒ£ãƒ¼ï¼ˆãƒžã‚¯ãƒ­ï¼‰', 'Auto PICT (Portrait)' => 'オートピクãƒãƒ£ãƒ¼ï¼ˆãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆï¼‰', 'Auto PICT (Sport)' => 'オートピクãƒãƒ£ãƒ¼ï¼ˆã‚¹ãƒãƒ¼ãƒ„)', 'Auto PICT (Standard)' => 'オートピクãƒãƒ£ãƒ¼ï¼ˆæ¨™æº–)', 'Autumn' => 'ç§‹', 'Beach' => 'ビーãƒ', 'Beach & Snow' => 'ビーãƒï¼†ã‚¹ãƒŽãƒ¼', 'Blur Reduction' => 'Digital SR', 'Bulb' => 'ãƒãƒ«ãƒ–', 'Bulb, Off-Auto-Aperture' => 'ãƒãƒ«ãƒ–(自動絞りOFF)', 'Candlelight' => 'キャンドルライト', 'DOF Program' => '深度優先プログラム', 'DOF Program (HyP)' => '深度優先プログラム(ãƒã‚¤ãƒ‘ープログラム)', 'Dark Pet' => 'ペット黒色', 'Digital Filter' => 'デジタルフィルター', 'Fireworks' => '花ç«', 'Flash X-Sync Speed AE' => 'ストロボåŒèª¿é€Ÿåº¦AE', 'Flower' => '花', 'Food' => 'æ–™ç†', 'Frame Composite' => 'ãƒ•ãƒ¬ãƒ¼ãƒ åˆæˆ', 'Green Mode' => 'グリーンモード', 'Hi-speed Program' => '高速優先プログラム', 'Hi-speed Program (HyP)' => '高速優先プログラム(ãƒã‚¤ãƒ‘ープログラム)', 'Illustrations' => 'イラスト', 'Kids' => 'キッズ', 'Landscape' => '風景', 'Light Pet' => 'ペット白色', 'MTF Program' => 'MTF優先プログラム', 'MTF Program (HyP)' => 'MTF優先プログラム(ãƒã‚¤ãƒ‘ープログラム)', 'Macro' => 'マクロ', 'Manual' => 'マニュアル', 'Manual, Off-Auto-Aperture' => 'マニュアル(自動絞りOFF)', 'Medium Pet' => 'ペットç°è‰²', 'Monotone' => 'モノトーン', 'Museum' => '美術館', 'Muted' => 'å¼±ã‚ã‚‹', 'Natural' => 'ナãƒãƒ¥ãƒ©ãƒ«', 'Natural Light' => 'ナãƒãƒ¥ãƒ©ãƒ«ãƒ•ォト', 'Natural Light & Flash' => 'ナãƒãƒ¥ãƒ©ãƒ«ãƒ•ォト&フラッシュ', 'Natural Skin Tone' => '美肌', 'Night Scene' => '夜景', 'Night Scene Portrait' => '人物ã€å¤œæ™¯', 'No Flash' => 'フラッシュ無ã—', 'Panorama' => 'パノラマ', 'Party' => 'パーティ', 'Pet' => 'ペット', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Program' => 'プログラム', 'Program (HyP)' => 'プログラムAE(ãƒã‚¤ãƒ‘ープログラム)', 'Program AE' => 'プログラムAE', 'Program Av Shift' => 'プログラムAvシフト', 'Program Tv Shift' => 'プログラムTvシフト', 'Self Portrait' => '自分撮り', 'Sensitivity Priority AE' => '感度優先AE', 'Sepia' => 'セピア', 'Shutter & Aperture Priority AE' => 'シャッター&絞り優先AE', 'Shutter Speed Priority' => 'シャッター優先', 'Shutter speed priority AE' => 'シャッター優先', 'Snow' => 'スノー', 'Soft' => 'ソフト', 'Sport' => 'スãƒãƒ¼ãƒ„', 'Sports' => 'スãƒãƒ¼ãƒ„', 'Standard' => 'スタンダード', 'Sunset' => '夕日', 'Surf & Snow' => 'サーフ&スノー', 'Synchro Sound Record' => 'ボイスレコーディング', 'Text' => 'テキスト', 'Underwater' => '水中', 'Vivid' => 'ビビッド', }, }, 'PictureMode2' => { Description => 'ピクãƒãƒ£ãƒ¼ãƒ¢ãƒ¼ãƒ‰ 2', PrintConv => { 'Aperture Priority' => '絞り優先', 'Aperture Priority, Off-Auto-Aperture' => '絞り優先(自動絞りオフ)', 'Auto PICT' => 'オートピクãƒãƒ£', 'Bulb' => 'ãƒãƒ«ãƒ–', 'Bulb, Off-Auto-Aperture' => 'ãƒãƒ«ãƒ–(自動絞りオフ)', 'Flash X-Sync Speed AE' => 'ストロボåŒèª¿é€Ÿåº¦AE', 'Green Mode' => 'グリーンモード', 'Manual' => 'マニュアル', 'Manual, Off-Auto-Aperture' => 'マニュアル(自動絞りオフ)', 'Program AE' => 'プログラムAE', 'Program Av Shift' => 'プログラムAvシフト', 'Program Tv Shift' => 'プログラムTvシフト', 'Scene Mode' => 'シーンモード', 'Sensitivity Priority AE' => '感度優先AE', 'Shutter & Aperture Priority AE' => 'シャッター&絞り優先AE', 'Shutter Speed Priority' => 'シャッター優先', }, }, 'PictureModeBWFilter' => { Description => 'ピクãƒãƒ£ãƒ¼ãƒ¢ãƒ¼ãƒ‰BWフィルター', PrintConv => { 'Green' => 'ç·‘', 'Neutral' => 'ニュートラル', 'Orange' => 'オレンジ', 'Red' => '赤', 'Yellow' => '黄色', 'n/a' => '該当無ã—', }, }, 'PictureModeContrast' => 'ピクãƒãƒ£ãƒ¼ãƒ¢ãƒ¼ãƒ‰ã‚³ãƒ³ãƒˆãƒ©ã‚¹ãƒˆ', 'PictureModeHue' => 'ピクãƒãƒ£ãƒ¼ãƒ¢ãƒ¼ãƒ‰è‰²ç›¸ï¼Ÿ', 'PictureModeSaturation' => 'ピクãƒãƒ£ãƒ¼ãƒ¢ãƒ¼ãƒ‰å½©åº¦', 'PictureModeSharpness' => 'ピクãƒãƒ£ãƒ¼ãƒ¢ãƒ¼ãƒ‰ã‚·ãƒ£ãƒ¼ãƒ—ãƒã‚¹', 'PictureModeTone' => { Description => 'ピクãƒãƒ£ãƒ¼ãƒ¢ãƒ¼ãƒ‰ãƒˆãƒ¼ãƒ³', PrintConv => { 'Blue' => 'é’', 'Green' => 'ç·‘', 'Neutral' => 'ニュートラル', 'Purple' => 'ç´«', 'Sepia' => 'セピア', 'n/a' => '該当無ã—', }, }, 'PictureStyle' => { Description => 'ピクãƒãƒ£ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ«', PrintConv => { 'CM Set 1' => 'CMセット1', 'CM Set 2' => 'CMセット2', 'Faithful' => '忠実設定', 'High Saturation' => '高彩度', 'Landscape' => '風景', 'Low Saturation' => '低彩度', 'Monochrome' => 'モノトーン', 'Neutral' => 'ニュートラル', 'None' => 'ç„¡ã—', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Standard' => 'スタンダード', 'User Def. 1' => 'ユーザ設定1', 'User Def. 2' => 'ユーザ設定2', 'User Def. 3' => 'ユーザ設定3', }, }, 'PixelFormat' => { Description => 'ピクセルフォーマット', PrintConv => { 'Black & White' => '白黒', }, }, 'PixelIntensityRange' => 'ピクセル強度範囲', 'PixelScale' => 'モデル画素スケールタグ', 'PixelUnits' => { PrintConv => { 'Unknown' => '䏿˜Ž', }, }, 'PlanarConfiguration' => { Description => 'ç”»åƒãƒ‡ãƒ¼ã‚¿ã®ä¸¦ã³', PrintConv => { 'Chunky' => 'ç‚¹é †æ¬¡å½¢å¼ (é‡ã­åˆã‚ã›)', 'Planar' => 'å¹³é¢å½¢å¼', }, }, 'PowerSource' => { Description => 'é›»æº', PrintConv => { 'Body Battery' => '本体電æº', 'External Power Supply' => '外部電æº', 'Grip Battery' => 'ãƒãƒƒãƒ†ãƒªãƒ¼ã‚°ãƒªãƒƒãƒ—', }, }, 'PreCaptureFrames' => 'プレキャプãƒãƒ£ãƒ¼ãƒ•レーム', 'Predictor' => '指標', 'Preview' => 'プレビューIFDãƒã‚¤ãƒ³ã‚¿ãƒ¼', 'Preview0' => 'プレビュー0', 'Preview1' => 'プレビュー1', 'Preview2' => 'プレビュー2', 'PreviewApplicationName' => 'プレビューアプリケーションå', 'PreviewApplicationVersion' => 'プレビューアプリケーションãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'PreviewColorSpace' => { Description => 'プレビュー色空間', PrintConv => { 'Unknown' => '䏿˜Ž', }, }, 'PreviewDateTime' => 'プレビュー日時', 'PreviewIFD' => 'プレビューIFDãƒã‚¤ãƒ³ã‚¿ãƒ¼', 'PreviewImage' => 'プレビューイメージ', 'PreviewImageBorders' => 'プレビュー画åƒå¢ƒç•Œ', 'PreviewImageData' => 'プレビュー画åƒãƒ‡ãƒ¼ã‚¿', 'PreviewImageLength' => 'プレビューイメージ容é‡', 'PreviewImageSize' => 'プレビューイメージサイズ', 'PreviewImageStart' => 'プレビューイメージ開始', 'PreviewImageValid' => { Description => '有効プレビュー画åƒ', PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'PreviewQuality' => { PrintConv => { 'Economy' => 'エコノミー', 'Fine' => 'ファイン', 'Normal' => '標準', 'Normal Movie' => '標準動画', 'Superfine' => 'S.ファイン', }, }, 'PreviewSettingsDigest' => 'プレビュー設定è¦ç´„', 'PreviewSettingsName' => 'プレビュー設定å', 'PrimaryAFPoint' => { Description => 'プライマリAFãƒã‚¤ãƒ³ãƒˆ', PrintConv => { 'Bottom' => '下', 'C6 (Center)' => 'C6 (中央)', 'Center' => '中央', 'Mid-left' => '中央左', 'Mid-right' => '中央å³', 'Top' => '上', }, }, 'PrimaryChromaticities' => '原色色度', 'PrimaryPlatform' => '主è¦ãƒ—ラットフォーム', 'PrintIM' => 'プリントイメージマッãƒãƒ³ã‚°', 'ProcessingSoftware' => '処ç†ã‚½ãƒ•トウェア', 'ProductID' => '製å“ID', 'ProductionCode' => 'カメラãŒä¿®ç†ã•れãŸã‹ï¼Ÿ', 'ProfileCMMType' => 'CMMタイププロフィール', 'ProfileCalibrationSig' => 'プロフィールキャリブレーションサイン', 'ProfileClass' => { Description => 'プロフィールクラス', PrintConv => { 'Abstract Profile' => '抜粋プロフィール', 'ColorSpace Conversion Profile' => '色空間変æ›ãƒ—ロフィール', 'DeviceLink Profile' => 'デãƒã‚¤ã‚¹ãƒªãƒ³ã‚¯ãƒ—ロフィール', 'Display Device Profile' => '表示装置プロフィール', 'Input Device Profile' => '入力装置プロフィール', 'NamedColor Profile' => '色å称プロフィール', 'Nikon Input Device Profile (NON-STANDARD!)' => 'ニコンプロフィール("nkpf")', 'Output Device Profile' => '出力装置プロフィール', }, }, 'ProfileConnectionSpace' => '接続スペースプロフィール', 'ProfileCopyright' => 'プロフィール著作権', 'ProfileCreator' => 'プロフィール製作者', 'ProfileDateTime' => 'プロフィール日時', 'ProfileDescription' => 'プロフィール説明', 'ProfileDescriptionML' => 'プロフィール説明ML', 'ProfileEmbedPolicy' => { Description => 'プロフィール埋ã‚è¾¼ã¿æ–¹é‡', PrintConv => { 'Allow Copying' => 'コピー許å¯', 'Embed if Used' => '埋ã‚è¾¼ã¿ä½¿ç”¨', 'Never Embed' => '埋ã‚è¾¼ã¿ç¦æ­¢', 'No Restrictions' => '無制é™', }, }, 'ProfileFileSignature' => 'プロフィールファイルシグãƒãƒ¼ãƒãƒ£', 'ProfileHueSatMapData1' => '色相Sat.マップデータプロフィール1', 'ProfileHueSatMapData2' => '色相Sat.マップデータプロフィール2', 'ProfileHueSatMapDims' => '色境界', 'ProfileID' => 'プロフィールID', 'ProfileLookTableData' => '表示テーブルデータプロフィール', 'ProfileLookTableDims' => '色境界', 'ProfileName' => 'プロフィールå', 'ProfileSequenceDesc' => 'プロフィールシーケンス説明', 'ProfileToneCurve' => 'トーンカーブプロフィール', 'ProfileVersion' => 'プロフィールãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'ProgramISO' => 'プログラムISO', 'ProgramLine' => { Description => 'プログラムライン', PrintConv => { 'Depth' => '深度優先', 'Hi Speed' => '高速優先', 'MTF' => 'MTF優先', 'Normal' => 'ノーマル', }, }, 'ProgramMode' => { PrintConv => { 'Night Portrait' => '人物夜景', 'None' => 'ç„¡ã—', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Sports' => 'スãƒãƒ¼ãƒ„', 'Sunset' => '夕日', 'Text' => 'テキスト', }, }, 'ProgramShift' => 'プログラムシフト', 'ProgramVersion' => 'プログラムãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'Province-State' => '行政区/å·ž', 'Quality' => { Description => 'å“質', PrintConv => { 'Best' => 'S.ファイン', 'Better' => 'ファイン', 'Compressed RAW' => 'cRAW', 'Compressed RAW + JPEG' => 'cRAW+JPEG', 'Economy' => 'エコノミー', 'Extra Fine' => 'エクストラファイン', 'Fine' => 'ファイン', 'Good' => 'エコノミー', 'Low' => '低画質', 'Normal' => 'ノーマル', 'Premium' => 'プレミアム', 'RAW + JPEG' => 'RAW+JPEG', 'Standard' => 'スタンダード', 'n/a' => '未設定', }, }, 'QualityMode' => { Description => 'å“質モード', PrintConv => { 'Economy' => 'エコノミー', 'Fine' => 'ファイン', 'Normal' => 'ノーマル', }, }, 'QuantizationMethod' => 'é‡å­åŒ–方法', 'QuickAdjust' => 'クイック調整', 'QuickControlDialInMeter' => { Description => '測光タイマー中ã®ã‚µãƒ–é›»å­ãƒ€ã‚¤ãƒ¤ãƒ«', PrintConv => { 'AF point selection' => 'AFãƒ•ãƒ¬ãƒ¼ãƒ é¸æŠž', 'Exposure comp/Aperture' => '露出補正/絞り数値', 'ISO speed' => 'ISO感度', }, }, 'QuickShot' => { Description => 'クイックショット', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'RAFVersion' => 'RAFãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'ROCInfo' => 'ROC情報', 'RasterPadding' => 'ラスタパディング', 'RasterizedCaption' => 'ラスタ化表題', 'Rating' => '格付ã‘', 'RatingPercent' => '格付ã‘(%)', 'RawAndJpgRecording' => { Description => 'RAWã¨JPEG記録', PrintConv => { 'RAW+Large/Fine' => 'RAW+ラージï¼ãƒ•ァイン', 'RAW+Large/Normal' => 'RAW+ラージï¼ãƒŽãƒ¼ãƒžãƒ«', 'RAW+Medium/Fine' => 'RAW+ミドルï¼ãƒ•ァイン', 'RAW+Medium/Normal' => 'RAW+ミドルï¼ãƒŽãƒ¼ãƒžãƒ«', 'RAW+Small/Fine' => 'RAW+スモールï¼ãƒ•ァイン', 'RAW+Small/Normal' => 'RAW+スモールï¼ãƒŽãƒ¼ãƒžãƒ«', }, }, 'RawColorAdj' => { PrintConv => { 'Custom' => 'カスタム', 'Faithful' => '忠実設定', }, }, 'RawDataOffset' => 'RAWデータオフセット', 'RawDataUniqueID' => 'RAWデータユニークID', 'RawDevAutoGradation' => { PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'RawDevColorSpace' => '色空間', 'RawDevContrastValue' => 'コントラスト値', 'RawDevEditStatus' => { Description => '編集状態', PrintConv => { 'Edited (Landscape)' => 'スタジオ(風景)', 'Edited (Portrait)' => 'スタジオ(ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆï¼‰', 'Original' => 'オリジナル', }, }, 'RawDevEngine' => { Description => 'エンジン', PrintConv => { 'Advanced High Speed' => 'アドãƒãƒ³ã‚¹é«˜é€Ÿ', 'High Function' => '高機能', 'High Speed' => '高速', }, }, 'RawDevExposureBiasValue' => '露出ãƒã‚¤ã‚¢ã‚¹å€¤', 'RawDevGrayPoint' => 'グレーãƒã‚¤ãƒ³ãƒˆ', 'RawDevMemoryColorEmphasis' => '記憶色強調', 'RawDevNoiseReduction' => 'ノイズフィルター(増感)', 'RawDevPMPictureTone' => { PrintConv => { 'Blue' => 'é’', 'Green' => 'ç·‘', 'Neutral' => 'ニュートラル', 'Purple' => 'ç´«', 'Sepia' => 'セピア', }, }, 'RawDevPM_BWFilter' => { PrintConv => { 'Green' => 'ç·‘', 'Neutral' => 'ニュートラル', 'Orange' => 'オレンジ', 'Red' => '赤', 'Yellow' => '黄色', }, }, 'RawDevPictureMode' => { PrintConv => { 'Natural' => 'ナãƒãƒ¥ãƒ©ãƒ«', 'Sepia' => 'セピア', 'Vivid' => 'ビビッド', }, }, 'RawDevSaturationEmphasis' => '彩度強調', 'RawDevSettings' => 'ノイズリダクション', 'RawDevSharpnessValue' => 'コントラスト値', 'RawDevVersion' => 'RAW展開ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'RawDevWBFineAdjustment' => 'ホワイトãƒãƒ©ãƒ³ã‚¹å¾®èª¿æ•´', 'RawDevWhiteBalance' => { PrintConv => { 'Color Temperature' => '色温度', }, }, 'RawDevWhiteBalanceValue' => 'ホワイトãƒãƒ©ãƒ³ã‚¹å€¤', 'RawImageCenter' => 'RAWイメージセンター', 'RawImageDigest' => 'RAWイメージè¦ç´„', 'RawImageHeight' => 'イメージ高ã•', 'RawImageSegmentation' => 'RAWイメージ部分番å·', 'RawImageSize' => 'RAWイメージサイズ', 'RawImageWidth' => 'イメージ幅', 'RawInfoVersion' => 'RAW情報ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'RawJpgQuality' => { Description => 'RAW JPEG å“質', PrintConv => { 'Economy' => 'エコノミー', 'Fine' => 'ファイン', 'Normal' => '標準', 'Normal Movie' => '標準動画', 'Superfine' => 'S.ファイン', }, }, 'RawJpgSize' => { Description => 'RAW JPEG サイズ', PrintConv => { 'Large' => 'ラージ', 'Medium' => 'ミドル', 'Medium 1' => 'ミドル1', 'Medium 2' => 'ミドル2', 'Medium 3' => 'ミドル3', 'Medium Movie' => 'ミディアム動画', 'Postcard' => 'ãƒã‚¬ã‚­', 'Small' => 'スモール', 'Small Movie' => 'スモール動画', 'Widescreen' => 'ワイド画é¢', }, }, 'RecordMode' => { Description => '記録モード', PrintConv => { 'Aperture Priority' => '絞り優先', 'Best Shot' => 'ベストショット', 'Manual' => 'マニュアル', 'Movie' => 'å‹•ç”»', 'Movie (19)' => '動画(19)', 'Program AE' => 'プログラムAE', 'Shutter Priority' => 'シャッター優先', 'YouTube Movie' => 'YouTubeå‹•ç”»', }, }, 'RecordShutterRelease' => 'レコードシャッターレリーズ', 'RecordingMode' => { Description => '記録モード', PrintConv => { 'Auto' => 'オート', 'Landscape' => '風景', 'Manual' => 'マニュアル', 'Night Scene' => '夜景', 'Panorama' => 'パノラマ', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Single Shutter' => 'シングルシャッター', }, }, 'RedBalance' => 'レッドãƒãƒ©ãƒ³ã‚¹', 'RedEyeCorrection' => { PrintConv => { 'Automatic' => 'オート', 'Off' => 'オフ', }, }, 'RedEyeData' => '赤目データ', 'RedEyeReduction' => { PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'RedMatrixColumn' => '赤色マトリックス列', 'RedTRC' => '赤色調増殖曲線', 'ReductionMatrix1' => '縮å°ãƒžãƒˆãƒªãƒƒã‚¯ã‚¹1', 'ReductionMatrix2' => '縮å°ãƒžãƒˆãƒªãƒƒã‚¯ã‚¹2', 'ReferenceBlackWhite' => '白黒ã®åŸºæº–値ã®ä¸€çµ„', 'ReferenceDate' => 'å‚照日付', 'ReferenceNumber' => 'å‚ç…§æ•°', 'ReferenceService' => 'å‚照サービス', 'RelatedImageFileFormat' => '関連イメージファイル形å¼', 'RelatedImageHeight' => '関連イメージ高', 'RelatedImageWidth' => '関連イメージ幅', 'RelatedSoundFile' => '関連オーディオファイル', 'ReleaseButtonToUseDial' => { Description => 'レリーズボタンã‹ã‚‰ä½¿ç”¨ãƒ€ã‚¤ãƒ¤ãƒ«', PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'ReleaseDate' => 'リリース日付', 'ReleaseTime' => 'リリース時間', 'RemoteOnDuration' => 'リモートæŒç¶šæ™‚é–“', 'RenderingIntent' => { Description => 'æ„æ€è¡¨ç¾', PrintConv => { 'ICC-Absolute Colorimetric' => '絶対比色分æž', 'Media-Relative Colorimetric' => '相対比色分æž', 'Perceptual' => '知覚的', 'Saturation' => '飽和', }, }, 'RepeatingFlashCount' => 'リピーティングフラッシュ 時間', 'RepeatingFlashOutput' => 'リピーティングフラッシュ 出力', 'RepeatingFlashRate' => 'リピーティングフラッシュ 周波数', 'ResampleParamsQuality' => { PrintConv => { 'High' => '高ã„', 'Low' => 'ソフト', }, }, 'Resaved' => { Description => '予約', PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'ResolutionMode' => 'è§£åƒåº¦ãƒ¢ãƒ¼ãƒ‰', 'ResolutionUnit' => { Description => 'Xã¨Yè§£åƒåº¦å˜ä½', PrintConv => { 'None' => 'ç„¡ã—', 'cm' => 'ピクセル/cm', 'inches' => 'インãƒ', }, }, 'RetouchHistory' => { Description => 'レタッãƒå±¥æ­´', PrintConv => { 'None' => 'ç„¡ã—', 'Sepia' => 'セピア', }, }, 'ReverseIndicators' => '指標逆転', 'Rotation' => { Description => '回転', PrintConv => { 'Horizontal' => '水平(標準)', 'Horizontal (Normal)' => '水平(標準)', 'Horizontal (normal)' => '水平(標準)', 'Rotate 180' => '180度回転', 'Rotate 270 CW' => '270度回転 CW', 'Rotate 90 CW' => '90度回転 CW', 'Rotated 180' => '180度回転', 'Rotated 270 CW' => '270度回転 CW', 'Rotated 90 CW' => '90度回転 CW', }, }, 'RowInterleaveFactor' => '列を挟むè¦å› ', 'RowsPerStrip' => '1片ã®åˆ—æ•°', 'SMaxSampleValue' => 'S 最大サンプル値', 'SMinSampleValue' => 'S 最å°ã‚µãƒ³ãƒ—ル値', 'SPIFFVersion' => 'SPIFFãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'SRAWQuality' => { PrintConv => { 'n/a' => '該当無ã—', }, }, 'SRActive' => { Description => '手ã¶ã‚Œè£œæ­£çŠ¶æ…‹', PrintConv => { 'No' => 'オフ', 'Yes' => 'オン', }, }, 'SRFocalLength' => 'SR焦点è·é›¢', 'SRHalfPressTime' => 'ã‚·ãƒ£ãƒƒã‚¿ãƒ¼åŠæŠ¼ã—æ™‚é–“', 'SRResult' => { Description => 'SR効果', PrintConv => { 'Not stabilized' => 'ãªã—', }, }, 'SVGVersion' => 'SVGãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'SafetyShift' => { Description => 'セイフティシフト', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable (ISO speed)' => 'ã™ã‚‹(ISO感度)', 'Enable (Tv/Av)' => 'ã™ã‚‹(Tv/Av値)', }, }, 'SafetyShiftInAvOrTv' => { Description => 'セイフティシフトã®è¨­å®š', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'SampleFormat' => 'サンプル形å¼', 'SampleStructure' => 'サンプリング構造', 'SamplesPerPixel' => 'コンãƒãƒ¼ãƒãƒ³ãƒˆæ•°', 'SanyoQuality' => 'サンヨーå“質', 'SanyoThumbnail' => 'サンヨーサムãƒã‚¤ãƒ«', 'Saturation' => { Description => '彩度', PrintConv => { '+1 (med high)' => '+1 (å°‘ã—高ã„)', '+2 (high)' => '+2 (ãƒãƒ¼ãƒ‰)', '+3 (very high)' => '+3 (ã‹ãªã‚Šé«˜ã„)', '-1 (med low)' => '-1 (å°‘ã—低ã„)', '-2 (low)' => '-2 (ソフト)', '-3 (very low)' => '-3 (ã‹ãªã‚Šä½Žã„)', '0 (normal)' => '0 (スタンダード)', 'Film Simulation' => 'フィルムシミュレーション', 'High' => '高ã„彩度', 'Low' => '低ã„彩度', 'Medium High' => 'å°‘ã—高ã„', 'Medium Low' => 'å°‘ã—低ã„', 'None' => '未設定', 'None (B&W)' => 'ç„¡ã—(黒&白)', 'Normal' => '標準', }, }, 'SaturationFaithful' => '彩度忠実設定', 'SaturationLandscape' => '彩度風景', 'SaturationNeutral' => '彩度ニュートラル', 'SaturationPortrait' => '彩度ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'SaturationSetting' => '彩度設定', 'SaturationStandard' => '彩度スタンダード', 'SaturationUserDef1' => '彩度ユーザ設定1', 'SaturationUserDef2' => '彩度ユーザ設定2', 'SaturationUserDef3' => '彩度ユーザ設定3', 'ScanImageEnhancer' => { PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ScanningDirection' => '走査方å‘', 'Scene' => 'å ´é¢', 'SceneArea' => 'シーンエリア?', 'SceneAssist' => 'シーン調整', 'SceneCaptureType' => { Description => 'シーンキャプãƒãƒ£ã‚¿ã‚¤ãƒ—', PrintConv => { 'Landscape' => '風景', 'Night' => '夜景', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Standard' => 'スタンダード', }, }, 'SceneDetect' => 'シーン検出', 'SceneDetectData' => 'シーン検出データ?', 'SceneMode' => { Description => 'シーンモード', PrintConv => { '2 in 1' => '2イン1', '3D Sweep Panorama' => '3D', 'Aerial Photo' => '空撮', 'Anti Motion Blur' => '人物ブレ軽減', 'Aperture Priority' => '絞り優先', 'Auction' => 'アクション', 'Auto' => 'オート', 'Auto+' => 'Auto アドãƒãƒ³ã‚¹', 'Available Light' => '自然光', 'Baby' => '赤ã¡ã‚ƒã‚“', 'Beach' => 'ビーãƒ', 'Beach & Snow' => 'ビーãƒï¼†ã‚¹ãƒŽãƒ¼', 'Behind Glass' => 'ガラス越ã—', 'Candle' => 'キャンドル', 'Candlelight' => 'キャンドルライト', 'Children' => 'å­ä¾›', 'Color Effects' => 'カラーエフェクト', 'Cont. Priority AE' => '連続撮影優先AE', 'Cuisine' => 'æ–™ç†', 'Digital Image Stabilization' => 'デジタル手振れ補正', 'Documents' => '文書', 'Face Portrait' => 'å¯é¡”', 'Fireworks' => '花ç«', 'Food' => 'æ–™ç†', 'Handheld Night Shot' => '手æŒã¡å¤œæ™¯', 'High Key' => 'ãƒã‚¤ã‚­ãƒ¼', 'High Sensitivity' => '高感度', 'High Speed Continuous Shooting' => '高速連写', 'Indoor' => '屋内撮影', 'Intelligent Auto' => 'インテリジェントオート', 'Intelligent ISO' => 'インテリジェントISO', 'Landscape' => '風景', 'Landscape+Portrait' => '風景+人物', 'Low Key' => 'ローキー', 'Macro' => 'マクロ', 'Manual' => 'マニュアル', 'Movie' => 'å‹•ç”»', 'Movie Preview' => '動画プレビュー', 'Museum' => '美術館', 'My Mode' => 'マイモード', 'Nature Macro' => '自然マクロ', 'Night Portrait' => '人物夜景', 'Night Scene' => '夜景', 'Night Scenery' => '夜景', 'Night View/Portrait' => 'ナイトビュー/ãƒãƒ¼ãƒˆãƒ¬ã‚¤ãƒˆ', 'Night+Portrait' => '夜景+人物', 'Normal' => 'ノーマル', 'Off' => 'オフ', 'Panning' => 'パンニング', 'Panorama' => 'パノラマ', 'Panorama Assist' => 'パノラマアシスト', 'Party' => 'パーティ', 'Pet' => 'ペット', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Program' => 'プログラム', 'Scenery' => '風景', 'Self Portrait' => '自分撮り', 'Self Portrait+Self Timer' => '自分撮り+セルフタイマー', 'Self Protrait+Timer' => '自分撮り+セルフタイマー', 'Shoot & Select' => 'ショット&セレクト', 'Shoot & Select1' => 'ショット&セレクト1', 'Shoot & Select2' => 'ショット&セレクト2', 'Shooting Guide' => '撮影ガイド', 'Shutter Priority' => 'シャッター優先', 'Simple' => 'シンプル', 'Smile Shot' => 'スマイルショット', 'Snow' => 'スノー', 'Soft Skin' => 'ソフトスキン', 'Sport' => 'スãƒãƒ¼ãƒ„', 'Sports' => 'スãƒãƒ¼ãƒ„', 'Spot' => 'スãƒãƒƒãƒˆ', 'Standard' => 'スタンダード', 'Starry Night' => '星空', 'Sunset' => '夕日', 'Super Macro' => 'スーパーマクロ', 'Sweep Panorama' => 'スイングパノラマ', 'Text' => 'テキスト', 'Underwater' => '水中', 'Underwater Macro' => '水中マクロ', 'Underwater Snapshot' => '水中スナップ', 'Underwater Wide1' => '水中ワイド1', 'Underwater Wide2' => '水中ワイド2', 'Vivid' => 'ビビッド', }, }, 'SceneModeUsed' => { Description => 'シーンモード', PrintConv => { 'Aperture Priority' => '絞り優先', 'Beach' => 'ビーãƒ', 'Candlelight' => 'キャンドルライト', 'Fireworks' => '花ç«', 'Landscape' => '風景', 'Macro' => 'マクロ', 'Manual' => 'マニュアル', 'Night Portrait' => '人物夜景', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Program' => 'プログラム', 'Shutter Priority' => 'シャッター優先', 'Snow' => 'スノー', 'Sunset' => '夕日', 'Text' => 'テキスト', }, }, 'SceneSelect' => { Description => 'ã‚·ãƒ¼ãƒ³é¸æŠž', PrintConv => { 'Lamp' => 'ランプ', 'Night' => '夜景', 'Off' => 'オフ', 'Sport' => 'スãƒãƒ¼ãƒ„', 'TV' => 'テレビ', 'User 1' => 'ユーザー1', 'User 2' => 'ユーザー2', }, }, 'SceneType' => { Description => 'シーンタイプ', PrintConv => { 'Directly photographed' => '直接撮影画åƒ', }, }, 'SecurityClassification' => { Description => 'セキュリティ区分', PrintConv => { 'Confidential' => '機密文書', 'Restricted' => 'é™å®š', 'Secret' => '秘密', 'Top Secret' => '最高機密', 'Unclassified' => '未分類', }, }, 'SelectableAFPoint' => { Description => 'ä»»æ„é¸æŠžå¯èƒ½ãªAFフレーム', PrintConv => { '11 points' => '11点', '19 points' => '19点', '45 points' => '45点', 'Inner 9 points' => '9点(内å´)', 'Outer 9 points' => '9点(外å´)', }, }, 'SelfTimer' => { Description => 'セルフタイマー長', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'SelfTimer2' => 'セルフタイマー(2)', 'SelfTimerMode' => 'セルフタイマーモード', 'SelfTimerTime' => 'セルフタイマーé…延時間', 'SensingMethod' => { Description => 'センサー方å¼', PrintConv => { 'Color sequential area' => 'シーケンシャルカラーセンサー', 'Color sequential linear' => 'シーケンシャルカラーラインセンサー', 'Monochrome area' => 'モノクロエリアセンサー', 'Monochrome linear' => 'モノクロラインセンサー', 'Not defined' => '未定義', 'One-chip color area' => 'å˜æ¿å¼ã‚«ãƒ©ãƒ¼ã‚»ãƒ³ã‚µãƒ¼', 'Three-chip color area' => '3æ¿å¼ã‚«ãƒ©ãƒ¼ã‚»ãƒ³ã‚µãƒ¼', 'Trilinear' => '3ラインセンサー', 'Two-chip color area' => 'ï¼’æ¿å¼ã‚«ãƒ©ãƒ¼ã‚»ãƒ³ã‚µãƒ¼', }, }, 'SensitivityAdjust' => '感度調節', 'SensitivitySteps' => { Description => '感度ステップ', PrintConv => { '1 EV Steps' => '1EVステップ', 'As EV Steps' => '露出ステップã«å¾“ã†', }, }, 'SensorCleaning' => { PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'SensorHeight' => 'センサー高ã•', 'SensorImageHeight' => 'センサー高ã•', 'SensorImageWidth' => 'センサー幅', 'SensorLeftBorder' => 'イメージ左部', 'SensorPixelSize' => 'センサーピクセルサイズ', 'SensorTemperature' => 'センサー温度', 'SensorTopBorder' => 'イメージ上部', 'SensorWidth' => 'センサー幅', 'Sequence' => 'シーケンス', 'SequenceNumber' => 'シーケンス番å·', 'SequenceShotInterval' => 'シーケンスショットインターãƒãƒ«', 'SequentialShot' => { Description => 'シーケンシャルショット', PrintConv => { 'None' => 'ç„¡ã—', 'Standard' => 'スタンダード', }, }, 'SerialNumber' => 'シリアル番å·', 'SerialNumberFormat' => 'シリアル番å·å½¢å¼', 'ServiceIdentifier' => 'サービス識別å­', 'SetButtonCrossKeysFunc' => { Description => 'SETボタン/å字キー機能', PrintConv => { 'Cross keys: AF point select' => 'å字キー:AFãƒ•ãƒ¬ãƒ¼ãƒ é¸æŠž', 'Normal' => '標準', 'Set: Flash Exposure Comp' => 'SET:調光補正', 'Set: Parameter' => 'SET:ç¾åƒãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼é¸æŠž', 'Set: Picture Style' => 'SET:ピクãƒãƒ£ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ«', 'Set: Playback' => 'SET:ç”»åƒã®å†ç”Ÿ', 'Set: Quality' => 'SET:記録画質', }, }, 'SetButtonWhenShooting' => { Description => '撮影時ã®SETボタン', PrintConv => { 'Change parameters' => 'ç¾åƒãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼é¸æŠž', 'Default (no function)' => '通常(ãªã—)', 'Disabled' => '無効', 'Flash exposure compensation' => '調光補正', 'ISO speed' => 'ISO感度', 'Image playback' => 'ç”»åƒå†ç”Ÿ', 'Image quality' => 'è¨˜éŒ²ç”»è³ªé¸æŠž', 'Image size' => 'ç”»åƒã‚µã‚¤ã‚º', 'LCD monitor On/Off' => '液晶モニターã®å…¥/切', 'Menu display' => 'メニュー表示', 'Normal (disabled)' => '通常(無効)', 'Picture style' => 'ピクãƒãƒ£ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ«', 'Quick control screen' => 'クイック設定画é¢', 'Record func. + media/folder' => '記録機能ã¨ãƒ¡ãƒ‡ã‚£ã‚¢ãƒ»ãƒ•ォルダ', 'Record movie (Live View)' => '動画撮影(ライブビュー)', 'White balance' => 'ホワイトãƒãƒ©ãƒ³ã‚¹', }, }, 'SetFunctionWhenShooting' => { Description => '撮影時ã®ã‚»ãƒƒãƒˆãƒœã‚¿ãƒ³æ©Ÿèƒ½', PrintConv => { 'Change Parameters' => 'ç¾åƒãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼é¸æŠž', 'Change quality' => 'è¨˜éŒ²ç”»è³ªé¸æŠž', 'Default (no function)' => '通常(ãªã—)', 'Image replay' => 'ç”»åƒã®å†ç”Ÿ', 'Menu display' => 'メニュー表示', }, }, 'ShadingCompensation' => { Description => '陰影修正', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ShadingCompensation2' => { Description => '陰影補正編集', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'Shadow' => 'シャドウ', 'ShadowScale' => 'シャドウスケール', 'Shadows' => 'シャドウ', 'ShakeReduction' => { Description => '手ã¶ã‚Œè£œæ­£(設定)', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ShakeReductionInfo' => 'SR効果', 'Sharpness' => { Description => 'シャープãƒã‚¹', PrintConv => { '+1 (med hard)' => '+1 (å°‘ã—ãƒãƒ¼ãƒ‰)', '+2 (hard)' => '+2 (ãƒãƒ¼ãƒ‰)', '+3 (very hard)' => '+3 (ã‹ãªã‚Šãƒãƒ¼ãƒ‰)', '-1 (med soft)' => '-1 (ミドルソフト)', '-2 (soft)' => '-2 (ソフト)', '-3 (very soft)' => '-3 (ã‹ãªã‚Šã‚½ãƒ•ト)', '0 (normal)' => '0 (ノーマル)', 'Film Simulation' => 'フィルムシミュレーション', 'Hard' => 'ãƒãƒ¼ãƒ‰', 'Hard2' => 'ãƒãƒ¼ãƒ‰2', 'Medium Hard' => 'ミドルãƒãƒ¼ãƒ‰', 'Medium Soft' => 'ミドルソフト', 'Normal' => 'ノーマル', 'Sharp' => 'シャープ', 'Soft' => 'ソフト', 'Soft2' => 'ソフト2', 'n/a' => '該当無ã—', }, }, 'SharpnessFactor' => 'シャープãƒã‚¹è¦å› ', 'SharpnessFaithful' => 'シャープãƒã‚¹å¿ å®Ÿè¨­å®š', 'SharpnessFrequency' => { PrintConv => { 'High' => '高ã„', 'Low' => 'ソフト', 'Standard' => 'スタンダード', 'n/a' => '該当無ã—', }, }, 'SharpnessLandscape' => 'シャープãƒã‚¹é¢¨æ™¯', 'SharpnessMonochrome' => 'シャープãƒã‚¹ãƒ¢ãƒŽã‚¯ãƒ­', 'SharpnessNeutral' => 'シャープãƒã‚¹ãƒ‹ãƒ¥ãƒ¼ãƒˆãƒ©ãƒ«', 'SharpnessPortrait' => 'シャープãƒã‚¹ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'SharpnessSetting' => 'シャープãƒã‚¹è¨­å®š', 'SharpnessStandard' => 'シャープãƒã‚¹ã‚¹ã‚¿ãƒ³ãƒ€ãƒ¼ãƒ‰', 'SharpnessUserDef1' => 'シャープãƒã‚¹ãƒ¦ãƒ¼ã‚¶è¨­å®š1', 'SharpnessUserDef2' => 'シャープãƒã‚¹ãƒ¦ãƒ¼ã‚¶è¨­å®š2', 'SharpnessUserDef3' => 'シャープãƒã‚¹ãƒ¦ãƒ¼ã‚¶è¨­å®š3', 'ShootingInfoDisplay' => { Description => '撮影情報表示', PrintConv => { 'Auto' => 'オート', 'Manual (dark on light)' => '手動-黒地ã«ç™½', 'Manual (light on dark)' => '手動-白地ã«é»’', }, }, 'ShootingMode' => { Description => '撮影モード', PrintConv => { 'Aerial Photo' => '空撮', 'Aperture Priority' => '絞り優先', 'Baby' => '赤ã¡ã‚ƒã‚“', 'Beach' => 'ビーãƒ', 'Candlelight' => 'キャンドルライト', 'Clipboard' => 'メモ', 'Color Effects' => 'カラーエフェクト', 'Economy' => 'エコモード', 'Fireworks' => '花ç«', 'Food' => 'æ–™ç†', 'High Sensitivity' => '高感度', 'High Speed Continuous Shooting' => '高速連写', 'Intelligent Auto' => 'インテリジェントオート', 'Intelligent ISO' => 'インテリジェントISO', 'Macro' => 'マクロ', 'Manual' => 'マニュアル', 'Movie Preview' => '動画プレビュー', 'Night Portrait' => '人物夜景', 'Night Scenery' => '夜景', 'Normal' => '標準', 'Panning' => 'パンニング', 'Panorama Assist' => 'パノラマアシスト', 'Party' => 'パーティ', 'Pet' => 'ペット', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Program' => 'プログラム', 'Scenery' => '風景', 'Self Portrait' => '自分撮り', 'Shutter Priority' => 'シャッター優先', 'Simple' => 'シンプル', 'Snow' => 'スノー', 'Soft Skin' => 'ソフトスキン', 'Sports' => 'スãƒãƒ¼ãƒ„', 'Spot' => 'スãƒãƒƒãƒˆ', 'Starry Night' => '星空', 'Sunset' => '夕日', 'Underwater' => '水中', }, }, 'ShootingModeSetting' => { Description => '撮影モード', PrintConv => { 'Continuous' => '連続撮影', 'Delayed Remote' => 'é…延リモート', 'Quick-response Remote' => '峿™‚リモート', 'Self-timer' => 'セルフタイマー', 'Single Frame' => '1コマ撮影', }, }, 'ShortDocumentID' => '短文書ID', 'ShortOwnerName' => '短ã„オーナーå', 'ShortReleaseTimeLag' => { Description => 'レリーズタイムラグ最速化', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'ShotInfoVersion' => 'ショット情報ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'Shutter-AELock' => { Description => 'シャッターボタン/AEロックボタン', PrintConv => { 'AE lock/AF' => 'AEロック/AF', 'AE/AF, No AE lock' => 'AE/AF(AEロックãªã—)', 'AF/AE lock' => 'AF/AEロック', 'AF/AF lock' => 'AF/AFロック', 'AF/AF lock, No AE lock' => 'AF/AFロック(AEロックãªã—)', }, }, 'ShutterAELButton' => 'シャッターボタンï¼AEロックボタン', 'ShutterButtonAFOnButton' => { Description => 'シャッター/AF-ONボタン', PrintConv => { 'AE lock/Metering + AF start' => 'AEロック/測光・AFé–‹å§‹', 'Metering + AF start' => '測光・AFé–‹å§‹', 'Metering + AF start/AF stop' => '測光・AFé–‹å§‹/AFストップ', 'Metering + AF start/disable' => '測光・AFé–‹å§‹/無効', 'Metering start/Meter + AF start' => '測光開始/測光・AFé–‹å§‹', }, }, 'ShutterCount' => 'シャッター回数', 'ShutterCurtainSync' => { Description => 'ストロボã®ã‚·ãƒ³ã‚¯ãƒ­ã‚¿ã‚¤ãƒŸãƒ³ã‚°', PrintConv => { '1st-curtain sync' => '先幕シンクロ', '2nd-curtain sync' => '後幕シンクロ', }, }, 'ShutterMode' => { PrintConv => { 'Aperture Priority' => '絞り優先', 'Auto' => 'オート', }, }, 'ShutterReleaseButtonAE-L' => { Description => 'シャッターレリーズボタン AE-L', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ShutterReleaseNoCFCard' => { Description => 'CFカード未装填時ã®ãƒ¬ãƒªãƒ¼ã‚º', PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'ShutterSpeed' => '露出時間', 'ShutterSpeedRange' => { Description => 'シャッター速度ã®åˆ¶å¾¡ç¯„囲ã®è¨­å®š', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'ShutterSpeedValue' => 'シャッタースピード', 'SimilarityIndex' => '類似インデックス', 'Site' => 'サイト', 'SlaveFlashMeteringSegments' => 'スレーブフラッシュ測光値', 'SlideShow' => { PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'SlowShutter' => { Description => 'スローシャッター', PrintConv => { 'Night Scene' => '夜景', 'None' => 'ç„¡ã—', 'Off' => 'オフ', 'On' => 'オン', }, }, 'SlowSync' => { Description => 'スローシンクロ', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'Software' => 'ソフトウェア', 'SoftwareVersion' => 'ソフトウェアãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'Source' => 'ソース', 'SpatialFrequencyResponse' => '空間周波数特性', 'SpecialEffectsOpticalFilter' => { PrintConv => { 'None' => 'ç„¡ã—', }, }, 'SpecialInstructions' => '手順', 'SpecialMode' => 'スペシャルモード', 'SpectralSensitivity' => 'スペクトル感度', 'SpotFocusPointX' => 'スãƒãƒƒãƒˆãƒ•ォーカスãƒã‚¤ãƒ³ãƒˆX', 'SpotFocusPointY' => 'スãƒãƒƒãƒˆãƒ•ォーカスãƒã‚¤ãƒ³ãƒˆY', 'SpotMeterLinkToAFPoint' => { Description => '測è·ç‚¹é€£å‹•スãƒãƒƒãƒˆæ¸¬å…‰', PrintConv => { 'Disable (use center AF point)' => 'ã—ãªã„(中央固定', 'Enable (use active AF point)' => 'ã™ã‚‹(測è·ç‚¹é€£å‹•)', }, }, 'SpotMeteringMode' => { Description => 'スãƒãƒƒãƒˆãƒ¡ãƒ¼ã‚¿ãƒ¼ãƒ¢ãƒ¼ãƒ‰', PrintConv => { 'Center' => '中央', }, }, 'State' => '都é“府県å', 'StoNits' => 'Stoニット', 'StraightenAngle' => 'ストレートアングル', 'StreamType' => { PrintConv => { 'Text' => 'テキスト', }, }, 'StripByteCounts' => '圧縮片ã®ãƒã‚¤ãƒˆæ•°', 'StripOffsets' => 'ç”»åƒãƒ‡ãƒ¼ã‚¿ä½ç½®', 'Sub-location' => '場所', 'SubSecCreateDate' => 'ãƒ‡ã‚¸ã‚¿ãƒ«ãƒ‡ãƒ¼ã‚¿ä½œæˆæ—¥æ™‚', 'SubSecDateTimeOriginal' => 'ã‚ªãƒªã‚¸ãƒŠãƒ«ãƒ‡ãƒ¼ã‚¿ä½œæˆæ—¥æ™‚', 'SubSecModifyDate' => 'ãƒ•ã‚¡ã‚¤ãƒ«ä½œæˆæ—¥æ™‚', 'SubSecTime' => 'DateTimeサブ秒', 'SubSecTimeDigitized' => 'DateTimeDigitizedサブ秒', 'SubSecTimeOriginal' => 'DateTimeOriginalサブ秒', 'SubTileBlockSize' => 'サブタイトルブロックサイズ', 'SubfileType' => 'æ–°è¦ã‚µãƒ–ファイルタイプ', 'SubimageColor' => { PrintConv => { 'Monochrome' => 'モノトーン', }, }, 'Subject' => 'サブジェクト', 'SubjectArea' => '対象領域', 'SubjectCode' => 'サブジェクトコード', 'SubjectDistance' => '対象è·é›¢', 'SubjectDistanceRange' => { Description => '被写体è·é›¢ç¯„囲', PrintConv => { 'Close' => '近景', 'Distant' => 'é æ™¯', 'Macro' => 'マクロ', 'Unknown' => '䏿˜Ž', }, }, 'SubjectLocation' => '対象領域', 'SubjectProgram' => { Description => '被写体プログラム', PrintConv => { 'Night portrait' => '人物夜景', 'None' => 'ç„¡ã—', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Sports action' => 'スãƒãƒ¼ãƒ„アクション', 'Sunset' => '夕日', 'Text' => 'テキスト', }, }, 'SubjectReference' => 'サブジェクトコード', 'Subsystem' => { PrintConv => { 'Unknown' => '䏿˜Ž', }, }, 'SuperMacro' => { Description => 'スーパーマクロ', PrintConv => { 'Off' => 'オフ', 'On (1)' => 'オン(1)', 'On (2)' => 'オン(2)', }, }, 'SuperimposedDisplay' => { Description => 'スーパーインãƒãƒ¼ã‚ºã®è¡¨ç¤º', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'SupplementalCategories' => '補足カテゴリー', 'SupplementalType' => '補足タイプ', 'SvISOSetting' => 'SVISO感度設定', 'SwitchToRegisteredAFPoint' => { Description => '登録AFフレームã¸ã®åˆ‡ã‚Šæ›ãˆ', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'T4Options' => 'T4オプション', 'T6Options' => 'T6オプション', 'TIFF-EPStandardID' => 'TIFF/EP標準ID', 'TTL_DA_ADown' => 'TTL D/A Aãƒãƒ£ãƒ³ãƒãƒ«ã€€ãƒ€ã‚¦ãƒ³', 'TTL_DA_AUp' => 'TTL D/A Aãƒãƒ£ãƒ³ãƒãƒ« アップ', 'TTL_DA_BDown' => 'TTL D/A Bãƒãƒ£ãƒ³ãƒãƒ«ã€€ãƒ€ã‚¦ãƒ³', 'TTL_DA_BUp' => 'TTL D/A Bãƒãƒ£ãƒ³ãƒãƒ«ã€€ã‚¢ãƒƒãƒ—', 'Tagged' => { PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'TargetAperture' => 'ターゲット絞り', 'TargetExposureTime' => 'ターゲット露出時間', 'TargetPrinter' => '標的プリンタ', 'Technology' => { Description => 'テクノロジー', PrintConv => { 'Active Matrix Display' => 'アクティブマトリクス型ディスプレイ', 'Cathode Ray Tube Display' => 'CRTディスプレイ', 'Digital Camera' => 'デジタルカメラ', 'Dye Sublimation Printer' => '昇è¯åž‹ãƒ—リンター', 'Electrophotographic Printer' => 'é™é›»è¨˜éŒ²å¼ãƒ—リンター', 'Electrostatic Printer' => 'é™é›»æ°—プリンター', 'Film Scanner' => 'フイルムスキャナー', 'Film Writer' => 'フィルムライター', 'Flexography' => 'アニリンå°åˆ·', 'Gravure' => 'グラビアå°åˆ·', 'Ink Jet Printer' => 'インクジェットプリンター', 'Offset Lithography' => 'オフセットå°åˆ·', 'Passive Matrix Display' => 'å˜ç´”マトリクス型ディスプレイ', 'Photo CD' => 'フォトCD', 'Photo Image Setter' => 'フォトイメージセッター', 'Photographic Paper Printer' => 'å°ç”»ç´™ãƒ—リンター', 'Projection Television' => 'プロジェクションテレビ', 'Reflective Scanner' => 'å射スキャナ', 'Silkscreen' => 'シルクスクリーンå°åˆ·', 'Thermal Wax Printer' => '熱転写プリンター', 'Video Camera' => 'ビデオカメラ', 'Video Monitor' => 'ビデオモニター', }, }, 'Teleconverter' => { PrintConv => { 'None' => 'ç„¡ã—', }, }, 'Text' => 'テキスト', 'TextInfo' => 'テキスト情報', 'TextStamp' => { PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'Thresholding' => '閾値化', 'ThumbnailImage' => 'サムãƒã‚¤ãƒ«ç”»åƒ', 'ThumbnailImageSize' => 'サムãƒã‚¤ãƒ«ã‚µã‚¤ã‚º', 'ThumbnailImageValidArea' => 'サムãƒã‚¤ãƒ«ç”»åƒæœ‰åŠ¹é ˜åŸŸ', 'TileByteCounts' => 'タイルã®ãƒã‚¤ãƒˆæ•°', 'TileDepth' => 'ã‚¿ã‚¤ãƒ«ã®æ·±ã•', 'TileLength' => 'タイルã®é•·ã•', 'TileOffsets' => 'タイルã®ã‚ªãƒ•セット', 'TileWidth' => 'タイルã®å¹…', 'Time' => '時間', 'TimeCreated' => 'ä½œæˆæ™‚é–“', 'TimeScaleParamsQuality' => { PrintConv => { 'High' => '高ã„', 'Low' => 'ソフト', }, }, 'TimeSent' => 'ç™ºé€æ™‚é–“', 'TimeSincePowerOn' => 'é›»æºã‚ªãƒ³çµŒéŽæ™‚é–“', 'TimeStamp' => 'タイムスタンプ', 'TimeStamp1' => 'タイムスタンプ1', 'TimeZone' => 'タイムゾーン', 'TimeZoneOffset' => 'タイムゾーンオフセット', 'TimerFunctionButton' => { Description => 'ファンクションボタン', PrintConv => { 'ISO' => 'ISO感度', 'Image Quality/Size' => 'ç”»åƒå“質/サイズ', 'Self-timer' => 'セルフタイマー', 'Shooting Mode' => '撮影モード', 'White Balance' => 'ホワイトãƒãƒ©ãƒ³ã‚¹', }, }, 'TimerLength' => { Description => 'å„ç¨®ã‚¿ã‚¤ãƒžãƒ¼ä¿æŒæ™‚é–“', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'Title' => 'タイトル', 'ToneComp' => 'トーン補正', 'ToneCurve' => { Description => 'トーンカーブ', PrintConv => { 'Custom' => 'カスタム', 'Manual' => 'マニュアル', 'Standard' => 'スタンダード', }, }, 'ToneCurveActive' => { PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'ToneCurveName' => { PrintConv => { 'Custom' => 'カスタム', }, }, 'ToneCurves' => 'トーンカーブ(s)', 'ToningEffect' => { Description => 'トーン効果', PrintConv => { 'B&W' => '白黒', 'Blue' => 'é’', 'Blue-green' => 'é’ç·‘', 'Cyanotype' => 'é’写真', 'Green' => 'ç·‘', 'None' => 'ç„¡ã—', 'Purple' => 'ç´«', 'Purple-blue' => 'é’ç´«', 'Red' => '赤', 'Red-purple' => '赤紫', 'Sepia' => 'セピア', 'Yellow' => '黄色', 'n/a' => '該当無ã—', }, }, 'ToningEffectMonochrome' => { Description => 'モノクロトーン効果', PrintConv => { 'Blue' => 'é’', 'Green' => 'ç·‘', 'None' => 'ç„¡ã—', 'Purple' => 'ç´«', 'Sepia' => 'セピア', }, }, 'ToningSaturation' => '彩度トーン', 'TransferFunction' => 'è»¢é€æ©Ÿèƒ½', 'TransferRange' => '転é€ç¯„囲', 'Transformation' => { Description => '変形', PrintConv => { 'Horizontal (normal)' => '水平(標準)', 'Rotate 180' => '180度回転', 'Rotate 270 CW' => '270度回転 CW', 'Rotate 90 CW' => '90度回転 CW', }, }, 'TransmissionReference' => 'é€ä¿¡å…ƒè¨˜éŒ²', 'TransparencyIndicator' => '逿˜Žåº¦æŒ‡æ¨™', 'TrapIndicator' => 'トラップインジケーター', 'Trapped' => { PrintConv => { 'Unknown' => '䏿˜Ž', }, }, 'TravelDay' => 'トラベル日付', 'TvExposureTimeSetting' => 'Tv露出時間設定', 'Type' => 'タイプ', 'USMLensElectronicMF' => { Description => 'USMレンズã®é›»å­å¼æ‰‹å‹•フォーカス', PrintConv => { 'Disable after one-shot AF' => 'ワンショットAF作動後・ä¸å¯', 'Disable in AF mode' => 'AF時ã™ã¹ã¦ä¸å¯', 'Enable after one-shot AF' => 'ワンショットAF作動後・å¯', }, }, 'Uncompressed' => { Description => 'éžåœ§ç¸®', PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'UniqueCameraModel' => 'ユニークカメラモデル', 'UniqueDocumentID' => 'ユニーク文書ID', 'UniqueObjectName' => 'ユニーク・ãƒãƒ¼ãƒ ãƒ»ã‚ªãƒ–・オブジェクト', 'Unknown' => '䏿˜Ž', 'Unsharp1Color' => { Description => 'アンシャープ1カラー', PrintConv => { 'Blue' => 'é’', 'Cyan' => 'シアン', 'Green' => 'ç·‘', 'Magenta' => 'マゼンダ', 'Red' => '赤', 'Yellow' => '黄色', }, }, 'Unsharp1HaloWidth' => 'アンシャープ1円光幅', 'Unsharp1Intensity' => 'アンシャープ1強度', 'Unsharp1Threshold' => 'アンシャープ1起点', 'Unsharp2Color' => { Description => 'アンシャープ2カラー', PrintConv => { 'Blue' => 'é’', 'Cyan' => 'シアン', 'Green' => 'ç·‘', 'Magenta' => 'マゼンダ', 'Red' => '赤', 'Yellow' => '黄色', }, }, 'Unsharp2HaloWidth' => 'アンシャープ2円光幅', 'Unsharp2Intensity' => 'アンシャープ2強度', 'Unsharp2Threshold' => 'アンシャープ2起点', 'Unsharp3Color' => { Description => 'アンシャープ3カラー', PrintConv => { 'Blue' => 'é’', 'Cyan' => 'シアン', 'Green' => 'ç·‘', 'Magenta' => 'マゼンダ', 'Red' => '赤', 'Yellow' => '黄色', }, }, 'Unsharp3HaloWidth' => 'アンシャープ3円光幅', 'Unsharp3Intensity' => 'アンシャープ3強度', 'Unsharp3Threshold' => 'アンシャープ3起点', 'Unsharp4Color' => { Description => 'アンシャープ4カラー', PrintConv => { 'Blue' => 'é’', 'Cyan' => 'シアン', 'Green' => 'ç·‘', 'Magenta' => 'マゼンダ', 'Red' => '赤', 'Yellow' => '黄色', }, }, 'Unsharp4HaloWidth' => 'アンシャープ4円光幅', 'Unsharp4Intensity' => 'アンシャープ4強度', 'Unsharp4Threshold' => 'アンシャープ4起点', 'UnsharpCount' => 'アンシャープカウント', 'UnsharpData' => 'アンシャープデータ', 'UnsharpMask' => { Description => 'アンシャープマスク', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'Urgency' => '緊急性', 'UsableMeteringModes' => { Description => '測光モードã®é™å®š', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'UsableShootingModes' => { Description => '撮影モードã®é™å®š', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'UserComment' => 'ユーザーコメント', 'UserDef1PictureStyle' => { Description => 'ユーザ設定1 ピクãƒãƒ£ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ«', PrintConv => { 'Faithful' => '忠実設定', 'Landscape' => '風景', 'Monochrome' => 'モノトーン', 'Neutral' => 'ニュートラル', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Standard' => 'スタンダード', }, }, 'UserDef2PictureStyle' => { Description => 'ユーザ設定2 ピクãƒãƒ£ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ«', PrintConv => { 'Faithful' => '忠実設定', 'Landscape' => '風景', 'Monochrome' => 'モノトーン', 'Neutral' => 'ニュートラル', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Standard' => 'スタンダード', }, }, 'UserDef3PictureStyle' => { Description => 'ユーザ設定3 ピクãƒãƒ£ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ«', PrintConv => { 'Faithful' => '忠実設定', 'Landscape' => '風景', 'Monochrome' => 'モノトーン', 'Neutral' => 'ニュートラル', 'Portrait' => 'ãƒãƒ¼ãƒˆãƒ¬ãƒ¼ãƒˆ', 'Standard' => 'スタンダード', }, }, 'VRDVersion' => 'VRDãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'VRInfo' => 'VR(手振れ補正)情報', 'VRInfoVersion' => 'VR情報ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'VR_0x66' => { PrintConv => { 'Off' => 'オフ', 'On (active)' => 'オン(アクティブ)', 'On (normal)' => 'オン(ノーマル)', }, }, 'ValidAFPoints' => '有効ãªAFãƒã‚¤ãƒ³ãƒˆ', 'ValidBits' => 'ピクセルã«ã¤ã有効ãªãƒ“ット', 'VariProgram' => 'ãƒãƒªãƒ—ログラム', 'Version' => 'ãƒãƒ¼ã‚¸ãƒ§ãƒ³', 'VibrationReduction' => { Description => '手振れ補正(VR)', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', 'On (1)' => 'オン(1)', 'On (2)' => 'オン(2)', 'On (3)' => 'オン(3)', 'n/a' => '該当無ã—', }, }, 'VideoCardGamma' => 'ビデオカードガンマ', 'ViewInfoDuringExposure' => { Description => '露光中ã®ãƒ•ァインダー内表示', PrintConv => { 'Disable' => 'ã—ãªã„', 'Enable' => 'ã™ã‚‹', }, }, 'ViewfinderWarning' => { Description => 'ビューファインダー警告表示', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'ViewingCondDesc' => '視è´çŠ¶æ…‹èª¬æ˜Ž', 'ViewingCondIlluminant' => '視è´çŠ¶æ…‹å…‰æº', 'ViewingCondIlluminantType' => '視è´çŠ¶æ…‹å…‰æºã‚¿ã‚¤ãƒ—', 'ViewingCondSurround' => '視è´çŠ¶æ…‹å‘¨è¾º', 'ViewingConditions' => '視è´çŠ¶æ…‹å…‰æº', 'VignetteControl' => { Description => 'ビãƒãƒƒãƒˆã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«', PrintConv => { 'High' => '高ã„', 'Low' => '低ã„', 'Normal' => '標準', 'Off' => 'オフ', 'On' => 'オン', }, }, 'VignetteControlIntensity' => 'ビãƒãƒƒãƒˆã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«å¼·åº¦', 'VoiceMemo' => { Description => 'ボイスメモ', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'WBAdjData' => 'ホワイトãƒãƒ©ãƒ³ã‚¹èª¿æ•´ãƒ‡ãƒ¼ã‚¿', 'WBAdjLighting' => { Description => 'ホワイトãƒãƒ©ãƒ³ã‚¹èª¿æ•´ã€ãƒ©ã‚¤ãƒ†ã‚£ãƒ³ã‚°', PrintConv => { 'Daylight' => '昼光', 'Flash' => 'ストロボ', 'High Color Rendering Fluorescent (3700K)' => 'ãƒã‚¤ã‚«ãƒ©ãƒ¼ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°è›å…‰ç¯ (1)', 'High Color Rendering Fluorescent (5000K)' => 'ãƒã‚¤ã‚«ãƒ©ãƒ¼ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°è›å…‰ç¯ (3)', 'High Color Rendering Fluorescent (cool white)' => 'ãƒã‚¤ã‚«ãƒ©ãƒ¼ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°è›å…‰ç¯ (2)', 'High Color Rendering Fluorescent (daylight)' => 'ãƒã‚¤ã‚«ãƒ©ãƒ¼ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°è›å…‰ç¯ (4)', 'High Color Rendering Fluorescent (warm white)' => 'ãƒã‚¤ã‚«ãƒ©ãƒ¼ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°è›å…‰ç¯ (0)', 'Incandescent' => 'é›»çƒ', 'None' => 'ç„¡ã—', 'Standard Fluorescent (3700K)' => '標準è›å…‰ç¯ (1)', 'Standard Fluorescent (5000K)' => '標準è›å…‰ç¯ (3)', 'Standard Fluorescent (6500K)' => '標準è›å…‰ç¯ (4)', 'Standard Fluorescent (cool white)' => '標準è›å…‰ç¯ (2)', 'Standard Fluorescent (high temperature mercury vapor)' => '標準è›å…‰ç¯ (5)', 'Standard Fluorescent (warm white)' => '標準è›å…‰ç¯ (0)', }, }, 'WBAdjMode' => { Description => 'ホワイトãƒãƒ©ãƒ³ã‚¹èª¿æ•´ãƒ¢ãƒ¼ãƒ‰', PrintConv => { 'Calculate Automatically' => '自動計算', 'Recorded Value' => '記録値', 'Use Gray Point' => 'グレーãƒã‚¤ãƒ³ãƒˆä½¿ç”¨', 'Use Temperature' => '温度使用', }, }, 'WBAdjTemperature' => 'ホワイトãƒãƒ©ãƒ³ã‚¹èª¿æ•´ã€è‰²æ¸©åº¦', 'WBBlueLevel' => 'ホワイトãƒãƒ©ãƒ³ã‚¹é’レベル', 'WBBracketMode' => { Description => 'ホワイトãƒãƒ©ãƒ³ã‚¹ãƒ–ラケットモード', PrintConv => { 'Off' => 'オフ', 'On (shift AB)' => 'オン(シフトAB)', 'On (shift GM)' => 'オン(シフトGM)', }, }, 'WBBracketValueAB' => 'ホワイトãƒãƒ©ãƒ³ã‚¹ãƒ–ラケット値AB', 'WBBracketValueGM' => 'ホワイトãƒãƒ©ãƒ³ã‚¹ãƒ–ラケット値GM', 'WBFineTuneActive' => { PrintConv => { 'No' => 'ã„ã„ãˆ', 'Yes' => 'ã¯ã„', }, }, 'WBGreenLevel' => 'ホワイトãƒãƒ©ãƒ³ã‚¹ç·‘レベル', 'WBMediaImageSizeSetting' => { Description => 'WB/メディア・画åƒã‚µã‚¤ã‚ºã®è¨­å®š', PrintConv => { 'LCD monitor' => '液晶モニター', 'Rear LCD panel' => '背é¢è¡¨ç¤ºãƒ‘ãƒãƒ«', }, }, 'WBMode' => { Description => 'ホワイトãƒãƒ©ãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰', PrintConv => { 'Auto' => 'オート', }, }, 'WBRedLevel' => 'ホワイトãƒãƒ©ãƒ³ã‚¹èµ¤ãƒ¬ãƒ™ãƒ«', 'WBShiftAB' => 'WB AB補正', 'WBShiftGM' => 'WB GM補正', 'WB_GBRGLevels' => 'WB GBRG レベル', 'WB_GRBGLevels' => 'WB GRBG レベル', 'WB_GRGBLevels' => 'WB GRGB レベル', 'WB_RBGGLevels' => 'WB RBGG レベル', 'WB_RBLevels' => 'WB RBレベル', 'WB_RBLevels3000K' => 'WB RGGB3000Kレベル', 'WB_RBLevels3300K' => 'WB RGGB3300Kレベル', 'WB_RBLevels3600K' => 'WB RGGB3600Kレベル', 'WB_RBLevels3900K' => 'WB RGGB3800Kレベル', 'WB_RBLevels4000K' => 'WB RGGB4000Kレベル', 'WB_RBLevels4300K' => 'WB RGGB4300Kレベル', 'WB_RBLevels4500K' => 'WB RGGB4500Kレベル', 'WB_RBLevels4800K' => 'WB RGGB4800Kレベル', 'WB_RBLevels5300K' => 'WB RGGB5300Kレベル', 'WB_RBLevels6000K' => 'WB RGGB6000Kレベル', 'WB_RBLevels6600K' => 'WB RGGB6600Kレベル', 'WB_RBLevels7500K' => 'WB RGGB7500Kレベル', 'WB_RBLevelsAuto' => 'WB RB レベル オート', 'WB_RBLevelsCloudy' => 'WB RB レベル 曇天', 'WB_RBLevelsCoolWhiteFluor' => 'WB RB レベル 冷白è›å…‰ç¯', 'WB_RBLevelsDayWhiteFluor' => 'WB RB レベル 昼白è›å…‰ç¯', 'WB_RBLevelsDaylightFluor' => 'WB RB レベル 昼光è›å…‰ç¯', 'WB_RBLevelsEveningSunlight' => 'WB RB レベル 夕日', 'WB_RBLevelsFineWeather' => 'WB RB レベル 晴天', 'WB_RBLevelsShade' => 'WB RB レベル 日陰', 'WB_RBLevelsTungsten' => 'WB RB レベル 白熱ç¯', 'WB_RBLevelsUsed' => 'WB RB レベル使用', 'WB_RBLevelsWhiteFluorescent' => 'WB RB レベル 白è›å…‰ç¯', 'WB_RGBGLevels' => 'WB RGBG レベル', 'WB_RGBLevels' => 'WB RGB レベル', 'WB_RGBLevelsCloudy' => 'WB RGB レベル 曇天', 'WB_RGBLevelsDaylight' => 'WB RGB レベル 昼光', 'WB_RGBLevelsFlash' => 'WB RGB レベル ストロボ', 'WB_RGBLevelsFluorescent' => 'WB RGGB レベル è›å…‰ç¯', 'WB_RGBLevelsShade' => 'WB RGB レベル 日陰', 'WB_RGBLevelsTungsten' => 'WB RGB レベル 白熱ç¯', 'WB_RGGBLevels' => 'WB RGGB レベル', 'WB_RGGBLevelsCloudy' => 'WB RGGB レベル 曇天', 'WB_RGGBLevelsDaylight' => 'WB RGGB レベル 昼光', 'WB_RGGBLevelsFlash' => 'WB RGGB レベル ストロボ', 'WB_RGGBLevelsFluorescent' => 'WB RGGB レベル è›å…‰ç¯', 'WB_RGGBLevelsFluorescentD' => 'WB RGGB レベル è›å…‰ç¯(D)', 'WB_RGGBLevelsFluorescentN' => 'WB RGGB レベル è›å…‰ç¯(N)', 'WB_RGGBLevelsFluorescentW' => 'WB RGGB レベル è›å…‰ç¯(W)', 'WB_RGGBLevelsShade' => 'WB RGGB レベル 日陰', 'WB_RGGBLevelsTungsten' => 'WB RGGB レベル 白熱ç¯', 'WCSProfiles' => 'Windowsカラーシステムプロフィール', 'WhiteBalance' => { Description => 'ホワイトãƒãƒ©ãƒ³ã‚¹', PrintConv => { 'Auto' => 'オート', 'Black & White' => '白黒', 'Cloudy' => '曇り', 'Color Temperature/Color Filter' => '色温度マニュアル指定', 'Cool White Fluorescent' => '白色è›å…‰ç¯', 'Custom' => 'カスタム', 'Custom 1' => 'カスタム1', 'Custom 2' => 'カスタム2', 'Custom 3' => 'カスタム3', 'Custom 4' => 'カスタム4', 'Custom2' => 'カスタム2', 'Custom3' => 'カスタム3', 'Custom4' => 'カスタム4', 'Custom5' => 'カスタム5', 'Day White Fluorescent' => '昼白色è›å…‰ç¯', 'Daylight' => '昼光', 'Daylight Fluorescent' => '昼光色è›å…‰ç¯', 'Flash' => 'ストロボ', 'Fluorescent' => 'è›å…‰ç¯', 'Incandescent' => 'é›»çƒ', 'Kelvin' => 'ケルビン', 'Living Room Warm White Fluorescent' => 'リビング暖白光色è›å…‰ç¯', 'Manual' => 'マニュアル', 'Manual Temperature (Kelvin)' => 'マニュアル白熱ç¯ï¼ˆã‚±ãƒ«ãƒ“ン)', 'PC Set1' => 'PC設定1', 'PC Set2' => 'PC設定2', 'PC Set3' => 'PC設定3', 'PC Set4' => 'PC設定4', 'PC Set5' => 'PC設定5', 'Shade' => '日陰', 'Tungsten' => 'タングステン(白熱ç¯)', 'Underwater' => '水中', 'Unknown' => '䏿˜Ž', 'User-Selected' => 'ãƒ¦ãƒ¼ã‚¶é¸æŠž', 'Warm White Fluorescent' => '暖白光色è›å…‰ç¯', 'White Fluorescent' => '温白色è›å…‰ç¯', }, }, 'WhiteBalance2' => { Description => 'ホワイトãƒãƒ©ãƒ³ã‚¹2', PrintConv => { '3000K (Tungsten light)' => '3000K (白熱電çƒ)', '3600K (Tungsten light-like)' => '3600K (白熱電çƒ-like)', '4000K (Cool white fluorescent)' => '4000K (è›å…‰ç¯ï¼‘)', '4500K (Neutral white fluorescent)' => '4500K (è›å…‰ç¯ï¼’)', '5300K (Fine Weather)' => '5300K (晴天)', '6000K (Cloudy)' => '6000K (曇り)', '6600K (Daylight fluorescent)' => '6600K (è›å…‰ç¯ï¼“)', '7500K (Fine Weather with Shade)' => '7500K (晴天ã¨å½±)', 'Auto' => 'オート', 'Custom WB 1' => 'カスタムホワイトãƒãƒ©ãƒ³ã‚¹1', 'Custom WB 2' => 'カスタムホワイトãƒãƒ©ãƒ³ã‚¹2', 'Custom WB 2900K' => 'カスタムホワイトãƒãƒ©ãƒ³ã‚¹2900K', 'Custom WB 3' => 'カスタムホワイトãƒãƒ©ãƒ³ã‚¹3', 'Custom WB 4' => 'カスタムホワイトãƒãƒ©ãƒ³ã‚¹4', 'Custom WB 5400K' => 'カスタムホワイトãƒãƒ©ãƒ³ã‚¹5400K', 'Custom WB 8000K' => 'カスタムホワイトãƒãƒ©ãƒ³ã‚¹8000K', }, }, 'WhiteBalanceAdj' => { Description => 'ホワイトãƒãƒ©ãƒ³ã‚¹èª¿æ•´', PrintConv => { 'Auto' => 'オート', 'Cloudy' => '曇り', 'Daylight' => '昼光', 'Flash' => 'ストロボ', 'Fluorescent' => 'è›å…‰ç¯', 'Off' => 'オフ', 'On' => 'オン', 'Shade' => '日陰', 'Tungsten' => 'タングステン(白熱ç¯)', }, }, 'WhiteBalanceBias' => 'ホワイトãƒãƒ©ãƒ³ã‚¹ãƒã‚¤ã‚¢ã‚¹', 'WhiteBalanceBracket' => 'ホワイトãƒãƒ©ãƒ³ã‚¹ãƒ–ラケット', 'WhiteBalanceComp' => 'ホワイトãƒãƒ©ãƒ³ã‚¹è£œæ­£', 'WhiteBalanceFineTune' => 'ホワイトãƒãƒ©ãƒ³ã‚¹ãƒ•ァインãƒãƒ¥ãƒ¼ãƒ³', 'WhiteBalanceMode' => { Description => 'ホワイトãƒãƒ©ãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰', PrintConv => { 'Auto (Cloudy)' => 'オート(曇天)', 'Auto (Day White Fluorescent)' => 'オート(昼白色è›å…‰ç¯ï¼‰', 'Auto (Daylight Fluorescent)' => 'オート(昼光色è›å…‰ç¯ï¼‰', 'Auto (Daylight)' => 'オート(昼光)', 'Auto (Flash)' => 'オート(ストロボ)', 'Auto (Shade)' => 'オート(日陰)', 'Auto (Tungsten)' => 'オート(白熱ç¯ï¼‰', 'Auto (White Fluorescent)' => 'オート(白色è›å…‰ç¯ï¼‰', 'Unknown' => '䏿˜Ž', 'User-Selected' => 'ãƒ¦ãƒ¼ã‚¶ãƒ¼é¸æŠž', }, }, 'WhiteBalanceSet' => { Description => 'ホワイトãƒãƒ©ãƒ³ã‚¹è¨­å®š', PrintConv => { 'Auto' => 'オート', 'Cloudy' => '曇り', 'Day White Fluorescent' => '昼白色è›å…‰ç¯', 'Daylight' => '昼光', 'Daylight Fluorescent' => '昼光色è›å…‰ç¯', 'Flash' => 'ストロボ', 'Manual' => 'マニュアル', 'Set Color Temperature 1' => '色温度設定1', 'Set Color Temperature 2' => '色温度設定2', 'Set Color Temperature 3' => '色温度設定3', 'Shade' => '日陰', 'Tungsten' => 'タングステン(白熱ç¯)', 'White Fluorescent' => '温白色è›å…‰ç¯', }, }, 'WhiteBalanceTemperature' => 'ホワイトãƒãƒ©ãƒ³ã‚¹æ¸©åº¦', 'WhiteBoard' => 'ホワイトボード', 'WhiteLevel' => '白レベル', 'WhitePoint' => '白点色度', 'Wide' => 'ワイド', 'WideFocusZone' => 'ワイドフォーカスゾーン', 'WideRange' => { Description => 'ワイドレンジ', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'WidthResolution' => 'å¹…æ–¹å‘ã®ç”»åƒè§£åƒåº¦', 'WorldTime' => 'タイムゾーン', 'WorldTimeLocation' => { Description => 'ワールドタイムä½ç½®', PrintConv => { 'Destination' => '目的地', 'Home' => '自宅', 'Hometown' => 'ç¾åœ¨åœ°', }, }, 'Writer-Editor' => '表題/説明ã®ä½œå®¶', 'X3FillLight' => 'X3光を満ãŸã™', 'XClipPathUnits' => 'Xクリップパスå˜ä½', 'XMP' => 'XMPメタデータ', 'XPAuthor' => '作者', 'XPComment' => 'コメント', 'XPKeywords' => 'キーワード', 'XPSubject' => 'サブジェクト', 'XPTitle' => 'タイトル', 'XPosition' => 'Xä½ç½®', 'XResolution' => 'ç”»åƒå¹…ã®è§£åƒåº¦', 'YCbCrCoefficients' => 'カラースペース変化マトリックス係数', 'YCbCrPositioning' => { Description => 'Yã¨Cã®ä½ç½®', PrintConv => { 'Centered' => '中央', 'Co-sited' => '相互é…ç½®', }, }, 'YCbCrSubSampling' => 'Yã¨Cã®ã‚µãƒ–サンプリング比率', 'YClipPathUnits' => 'Yクリップパスå˜ä½', 'YPosition' => 'Yä½ç½®', 'YResolution' => 'ç”»åƒé«˜ã•ã®è§£åƒåº¦', 'ZoneMatching' => { Description => 'ゾーンマッãƒãƒ³ã‚°', PrintConv => { 'High Key' => 'ãƒã‚¤ã‚­ãƒ¼', 'ISO Setting Used' => 'オフ(ISO設定使用)', 'Low Key' => 'ローキー', }, }, 'ZoneMatchingOn' => { Description => 'ゾーンマッãƒãƒ³ã‚°', PrintConv => { 'Off' => 'オフ', 'On' => 'オン', }, }, 'Zoom' => 'ズーム', 'ZoomSourceWidth' => 'ズームソース幅', 'ZoomStepCount' => 'ズームステップ数', 'ZoomTargetWidth' => 'ズームターゲット幅', ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::ja.pm - ExifTool Japanese language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke and Kazunari Nishina for providing this translation. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut ����������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/ko.pm��������������������������������������������������000644 �000765 �000024 �00000204737 12642461343 021556� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: ko.pm # # Description: ExifTool Korean language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::ko; use strict; use vars qw($VERSION); $VERSION = '1.06'; %Image::ExifTool::Lang::ko::Translate = ( 'AELock' => { Description => 'AE ê³ ì •', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'AELockButton' => { Description => 'AE-L/AF-L', PrintConv => { 'AE Lock (hold)' => 'AE ê³ ì •(유지)', 'AE Lock Only' => 'AE ê³ ì •', 'AE/AF Lock' => 'AE/AF ê³ ì •', 'AF Lock Only' => 'AF ê³ ì •', }, }, 'AF-CPrioritySelection' => { Description => 'AF-C ì„ íƒ ìš°ì„ ', PrintConv => { 'Focus' => 'í¬ì»¤ìФ', 'Release' => '릴리즈', 'Release + Focus' => '릴리즈 + í¬ì»¤ìФ', }, }, 'AF-OnForMB-D10' => { Description => 'MB-D10ì—서 AF-On', PrintConv => { 'AE Lock (hold)' => 'AE ê³ ì • (유지)', 'AE Lock (reset on release)' => 'AE ê³ ì • (릴리즈때 리셋)', 'AE Lock Only' => 'AE ê³ ì •', 'AE/AF Lock' => 'AE/AF ê³ ì •', 'AF Lock Only' => 'AF ê³ ì •', 'AF-On' => 'AF-ON', 'Same as FUNC Button' => 'FUNC 버튼과 ê°™ìŒ', }, }, 'AF-SPrioritySelection' => { Description => 'AF-S ì„ íƒ ìš°ì„ ', PrintConv => { 'Focus' => 'í¬ì»¤ìФ', 'Release' => '릴리즈', }, }, 'AFActivation' => { Description => 'AF ìž‘ë™', PrintConv => { 'AF-On Only' => 'AF-ON ê³ ì •', 'Shutter/AF-On' => '셔터/AF-ON', }, }, 'AFAperture' => 'AF 조리개', 'AFAreaIllumination' => { Description => 'AF í¬ì¸íЏ 조명', PrintConv => { 'Auto' => 'ìžë™', 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'AFAreaMode' => { Description => 'AF ì˜ì—­ 모드', PrintConv => { 'Auto-area' => 'ìžë™ ì˜ì—­ AF', 'Dynamic Area' => '다ì´ë‚´ë¯¹ ì˜ì—­', 'Dynamic Area (closest subject)' => '다ì´ë‚´ë¯¹ ì˜ì—­ (지근거리 ìš°ì„ )', 'Dynamic Area (wide)' => '다ì´ë‚´ë¯¹ ì˜ì—­ (와ì´ë“œ)', 'Group Dynamic' => '그룹 다ì´ë‚´ë¯¹', 'Single Area' => '싱글 ì˜ì—­', 'Single Area (wide)' => '싱글 ì˜ì—­ (와ì´ë“œ)', }, }, 'AFAreaModeSetting' => { Description => 'AF ì˜ì—­ 모드', PrintConv => { 'Closest Subject' => '접사', 'Dynamic Area' => '다ì´ë‚´ë¯¹ ì˜ì—­', 'Single Area' => '싱글 ì˜ì—­', }, }, 'AFAssist' => { Description => '내장 AF ë³´ì¡°ê´‘', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'AFFineTune' => 'AF 미세 ì¡°ì •', 'AFFineTuneAdj' => 'AF 미세 ì¡°ì •', 'AFInfo' => 'AF 모드', 'AFInfo2' => 'AF ì •ë³´', 'AFInfo2Version' => 'AF ì •ë³´ 버전', 'AFMode' => 'AF 모드', 'AFPoint' => { Description => 'AF í¬ì¸íЏ', PrintConv => { 'Bottom' => '하단', 'Center' => '중앙', 'Far Left' => '맨 좌측', 'Far Right' => '맨 우측', 'Left' => '왼쪽', 'Lower-left' => '좌하단', 'Lower-right' => '우하단', 'Mid-left' => '왼쪽', 'Mid-right' => '오른쪽', 'Right' => '오른쪽', 'Top' => 'ìƒë‹¨', 'Upper-left' => '좌ìƒë‹¨', 'Upper-right' => 'ìš°ìƒë‹¨', }, }, 'AFPointIllumination' => { Description => 'AF í¬ì¸íЏ 조명', PrintConv => { 'Auto' => 'ìžë™', 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'AFPointMode' => { PrintConv => { 'Auto' => 'ìžë™', }, }, 'AFPointSelected' => { PrintConv => { 'Auto' => 'ìžë™', }, }, 'AFPointSelected2' => { PrintConv => { 'Auto' => 'ìžë™', }, }, 'AFPointSelection' => { Description => 'AF í¬ì¸íЏ ì„ íƒ', PrintConv => { '11 Points' => '11 í¬ì¸íЏ', '51 Points' => '51 í¬ì¸íЏ', }, }, 'AFPointsInFocus' => { Description => 'ì´ˆì ì—ì„œì˜ AF í¬ì¸íЏ', PrintConv => { 'Far Left' => '맨 좌측', 'Far Right' => '맨 우측', 'Lower-left' => '좌하단', 'Lower-right' => '우하단', 'Upper-left' => '좌ìƒë‹¨', 'Upper-right' => 'ìš°ìƒë‹¨', }, }, 'AFPointsUnknown2' => { PrintConv => { 'Auto' => 'ìžë™', }, }, 'AFPointsUsed' => { Description => 'ì‚¬ìš©ëœ AF í¬ì¸íЏ', PrintConv => { 'Bottom' => '하단', 'Center' => '중앙', 'Far Left' => '맨 좌측', 'Far Right' => '맨 우측', 'Lower-left' => '좌하단', 'Lower-right' => '우하단', 'Top' => 'ìƒë‹¨', 'Upper-left' => '좌ìƒë‹¨', 'Upper-right' => 'ìš°ìƒë‹¨', }, }, 'AFResponse' => 'AF ë°˜ì‘', 'ActiveD-Lighting' => { Description => '액티브 D-Lighting', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ActiveD-LightingMode' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'AddAspectRatioInfo' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'AddOriginalDecisionData' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'AdvancedRaw' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'Album' => '앨범', 'Anti-Blur' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'Aperture' => '조리개', 'ApertureValue' => '조리개', 'ApplicationRecordVersion' => '어플리케ì´ì…˜ ê¸°ë¡ ë²„ì „', 'Artist' => 'ì´ë¯¸ì§€ë¥¼ 만든 사람', 'Author' => '작성ìž', 'AuthorsPosition' => 'ì§ì±…', 'AutoAperture' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'AutoBracketModeM' => { Description => 'ìžë™ 브ë¼ì¼€íŒ… (모드 M)', PrintConv => { 'Flash Only' => '플래시', 'Flash/Aperture' => '플래시/조리개', 'Flash/Speed' => '플래시/스피드', 'Flash/Speed/Aperture' => '플래시/스피드/조리개', }, }, 'AutoBracketOrder' => '브ë¼ì¼€íŒ… 순서', 'AutoBracketSet' => { Description => 'ìžë™ 브ë¼ì¼€íŒ… 설정', PrintConv => { 'AE & Flash' => 'AE & 플래시', 'AE Only' => 'AE 브ë¼ì¼€íŒ…', 'Flash Only' => '플래시 브ë¼ì¼€íŒ…', 'WB Bracketing' => 'WB 브ë¼ì¼€íŒ…', }, }, 'AutoBracketing' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'AutoExposureBracketing' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'AutoFP' => { Description => 'ìžë™ FP', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'AutoFocus' => { Description => '오토í¬ì»¤ìФ', PrintConv => { 'Off' => '비활성', 'On' => '활성', }, }, 'AutoISO' => { Description => 'ìžë™ ISO', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'AutoISOMax' => 'ìžë™ ISO 최대 ê°ë„', 'AutoISOMinShutterSpeed' => 'ìžë™ ISO 최소 셔터 ì†ë„', 'AutoLightingOptimizer' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'AutoRedEye' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'AuxiliaryLens' => 'ë³´ì¡° 렌즈', 'BWMode' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'BatteryLevel' => '베터리 레벨', 'BatteryOrder' => { Description => '배터리 순서', PrintConv => { 'Camera Battery First' => 'ì¹´ë©”ë¼ ë°°í„°ë¦¬ ìš°ì„ ', 'MB-D10 First' => 'MB-D10 배터리 ìš°ì„ ', }, }, 'Beep' => { Description => 'ì „ìžìŒ', PrintConv => { 'High' => 'í¬ê²Œ', 'Low' => '작게', 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'BitsPerSample' => 'ì„±ë¶„ì— ë”°ë¥¸ 비트 수', 'BracketMode' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'Brightness' => 'ë°ê¸°', 'BrightnessValue' => 'ë°ê¸°', 'BurstMode' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'By-line' => '제작ìž', 'CFAPattern' => 'CFA 패턴', 'CLModeShootingSpeed' => 'CL 모드 ì´¬ì˜ ì†ë„', 'CalibrationIlluminant1' => { PrintConv => { 'Cloudy' => 'í린 날씨', 'Cool White Fluorescent' => '냉백색 형광등 (W 3800 - 4500K)', 'Day White Fluorescent' => '주백색 형광등 (N 4600 - 5500K)', 'Daylight' => '주광', 'Daylight Fluorescent' => '주광색 형광등 (D 5700 - 7100K)', 'Fine Weather' => 'ë§‘ì€ ë‚ ì”¨', 'Flash' => '플래시', 'Fluorescent' => '형광등', 'ISO Studio Tungsten' => 'ISO 스튜디오 텅스í…', 'Other' => '기타 ê´‘ì›', 'Shade' => '그늘', 'Standard Light A' => '표준 ê´‘ì› A', 'Standard Light B' => '표준 ê´‘ì› B', 'Standard Light C' => '표준 ê´‘ì› C', 'Tungsten (Incandescent)' => 'í……ìŠ¤í… (백열등)', 'Unknown' => '알 수 ì—†ìŒ', 'Warm White Fluorescent' => '따뜻한 í°ìƒ‰ 형광 (L 2600 - 3250K)', 'White Fluorescent' => '백색 형광등 (WW 3250 - 3800K)', }, }, 'CalibrationIlluminant2' => { PrintConv => { 'Cloudy' => 'í린 날씨', 'Cool White Fluorescent' => '냉백색 형광등 (W 3800 - 4500K)', 'Day White Fluorescent' => '주백색 형광등 (N 4600 - 5500K)', 'Daylight' => '주광', 'Daylight Fluorescent' => '주광색 형광등 (D 5700 - 7100K)', 'Fine Weather' => 'ë§‘ì€ ë‚ ì”¨', 'Flash' => '플래시', 'Fluorescent' => '형광등', 'ISO Studio Tungsten' => 'ISO 스튜디오 텅스í…', 'Other' => '기타 ê´‘ì›', 'Shade' => '그늘', 'Standard Light A' => '표준 ê´‘ì› A', 'Standard Light B' => '표준 ê´‘ì› B', 'Standard Light C' => '표준 ê´‘ì› C', 'Tungsten (Incandescent)' => 'í……ìŠ¤í… (백열등)', 'Unknown' => '알 수 ì—†ìŒ', 'Warm White Fluorescent' => '따뜻한 í°ìƒ‰ 형광 (L 2600 - 3250K)', 'White Fluorescent' => '백색 형광등 (WW 3250 - 3800K)', }, }, 'CanonExposureMode' => { PrintConv => { 'Manual' => '수ë™', }, }, 'CanonFlashMode' => { PrintConv => { 'Auto' => 'ìžë™', 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'Caption-Abstract' => '제목/설명', 'CaptionWriter' => '캡션 작성ìž', 'Categories' => '범주', 'Category' => '범주', 'CenterAFArea' => { Description => '중앙 ì´ˆì  ì˜ì—­', PrintConv => { 'Normal Zone' => 'ì¼ë°˜ ì˜ì—­', 'Wide Zone' => '와ì´ë“œ ì˜ì—­', }, }, 'CenterWeightedAreaSize' => '중앙 ì¤‘ì  ì˜ì—­', 'ChrominanceNR_TIFF_JPEG' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'ChrominanceNoiseReduction' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'City' => 'ë„시', 'CodedCharacterSet' => 'ì½”ë“œëœ ìºë¦­í„° 세트', 'ColorAberrationControl' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ColorBalance' => '컬러 밸런스', 'ColorBalanceAdj' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ColorBooster' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ColorEffect' => { PrintConv => { 'Off' => '꺼ì§', 'Sepia' => '세피아', }, }, 'ColorFilter' => { Description => '색 í•„í„°', PrintConv => { 'Green' => '녹색', 'Off' => '꺼ì§', 'Red' => '빨강', 'Yellow' => '노랑', }, }, 'ColorHue' => 'ìƒ‰ìƒ í˜•ì‹', 'ColorMode' => { Description => '컬러 모드', PrintConv => { 'Autumn Leaves' => '단í’', 'B&W' => 'í‘ë°±', 'Clear' => '반투명', 'Deep' => '진한', 'Landscape' => 'í’ê²½', 'Light' => 'ë¼ì´íЏ', 'Neutral' => '뉴트럴', 'Night View' => '야경', 'Night View/Portrait' => '야경 ì¸ë¬¼', 'Off' => '꺼ì§', 'Portrait' => 'ì¸ë¬¼', 'Standard' => '표준', 'Sunset' => 'ì¼ëª°', 'Vivid' => 'ìƒìƒí•œ', }, }, 'ColorMoireReduction' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ColorMoireReductionMode' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'ColorSpace' => { Description => '색공간', PrintConv => { 'ICC Profile' => 'ICC 프로필', 'Uncalibrated' => 'ì¡°ì •ë˜ì§€ 않ìŒ', }, }, 'ColorTemperature' => '색 온ë„', 'CommandDials' => { Description => '커맨드 다ì´ì–¼', PrintConv => { 'Reversed (Main Aperture, Sub Shutter)' => 'ì—­ë°©í–¥', 'Standard (Main Shutter, Sub Aperture)' => '기본', }, }, 'CommandDialsApertureSetting' => { Description => '커맨드 다ì´ì–¼ 수정 조리개 설정', PrintConv => { 'Aperture Ring' => '조리개 ë§', 'Sub-command Dial' => '서브 커맨드 다ì´ì–¼', }, }, 'CommandDialsChangeMainSub' => { Description => '커맨드 다ì´ì–¼ 수정 매ì¸/서브 êµì²´', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'CommandDialsMenuAndPlayback' => { Description => '커맨드 다ì´ì–¼ 수정 매뉴와 재ìƒ', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'CommandDialsReverseRotation' => { Description => '커맨드 다ì´ì–¼ 수정 ë°©í–¥ 전환', PrintConv => { 'No' => '아니오', 'Yes' => '예', }, }, 'CommanderChannel' => '커맨드모드 채ë„', 'CommanderGroupAManualOutput' => '커맨드모드 그룹 A M Comp', 'CommanderGroupAMode' => { Description => '커맨드모드 그룹 A 모드', PrintConv => { 'Auto Aperture' => 'ìžë™ 조리개 (AA)', 'Manual' => '수ë™', 'Off' => '꺼ì§', }, }, 'CommanderGroupA_TTL-AAComp' => '커맨드모드 그룹 A TTL/AA Comp', 'CommanderGroupBManualOutput' => '커맨드모드 그룹 B M Comp', 'CommanderGroupBMode' => { Description => '커맨드모드 그룹 B 모드', PrintConv => { 'Auto Aperture' => 'ìžë™ 조리개 (AA)', 'Manual' => '수ë™', 'Off' => '꺼ì§', }, }, 'CommanderGroupB_TTL-AAComp' => '커맨드모드 그룹 B TTL/AA Comp', 'CommanderInternalFlash' => { Description => '커맨드모드 내장 플래시 모드', PrintConv => { 'Manual' => '수ë™', 'Off' => '꺼ì§', }, }, 'CommanderInternalManualOutput' => '커맨드모드 내장플래시 M Comp.', 'CommanderInternalTTLComp' => '커맨드모드 내장플래시 TTL Comp', 'Comment' => '코멘트', 'ComponentsConfiguration' => 'ê° êµ¬ì„± ìš”ì†Œì˜ ì˜ë¯¸', 'CompressedBitsPerPixel' => 'ì´ë¯¸ì§€ ì••ì¶• 모드', 'Compression' => { Description => 'ì••ì¶• 설계', PrintConv => { 'JPEG' => 'JPEG ì••ì¶•', 'JPEG (old-style)' => 'JPEG (예전 스타ì¼)', 'Kodak DCR Compressed' => 'Kodak DCR ì••ì¶•', 'Kodak KDC Compressed' => 'Kodak KDC ì••ì¶•', 'Next' => 'NeXT 2-bit ì¸ì½”딩', 'Nikon NEF Compressed' => 'Nikon NEF ì••ì¶•', 'Pentax PEF Compressed' => 'Pentax PEF ì••ì¶•', 'SGILog' => 'SGI 32-bit Log íœ˜ë„ ì¸ì½”딩', 'SGILog24' => 'SGI 24-bit Log íœ˜ë„ ì¸ì½”딩', 'Sony ARW Compressed' => 'Sony ARW ì••ì¶•', 'Thunderscan' => 'ThunderScan 4-bit ì¸ì½”딩', 'Uncompressed' => '무압축', }, }, 'Contact' => 'ì—°ë½ì²˜', 'Contrast' => { Description => '대비', PrintConv => { 'High' => '강하게', 'Low' => '약하게', 'Normal' => '표준', }, }, 'ContrastCurve' => '대비 커브', 'ConversionLens' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'Copyright' => '저작권 소유ìž', 'CopyrightNotice' => '저작권 공고', 'Country' => '국명', 'Country-PrimaryLocationName' => 'êµ­ê°€', 'CreateDate' => '디지털 ë°ì´í„° ìƒì„± ì¼ì‹œ', 'CreationDate' => 'ì´¬ì˜ ë‚ ì§œ', 'Credit' => 'ì •ë³´', 'Curves' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'CustomRendered' => { Description => 'ì‚¬ìš©ìž ì´ë¯¸ì§€ 처리', PrintConv => { 'Custom' => 'ì‚¬ìš©ìž ì²˜ë¦¬', 'Normal' => '표준 처리', }, }, 'D-LightingHQ' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'D-LightingHS' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'DataDump' => 'ë°ì´í„° ë¤í”„', 'DateCreated' => '만들어진 ë‚ ì§œ', 'DateDisplayFormat' => { Description => 'ë‚ ì§œ 형ì‹', PrintConv => { 'D/M/Y' => 'ì¼/ì›”/ë…„', 'M/D/Y' => 'ì›”/ì¼/ë…„', 'Y/M/D' => 'ë…„/ì›”/ì¼', }, }, 'DateStampMode' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'DateTimeOriginal' => 'ì›ë³¸ ë°ì´í„° ìƒì„± ì¼ì‹œ', 'DaylightSavings' => { Description => 'ì¼ê´‘ 시간 절약', PrintConv => { 'No' => '꺼ì§', 'Yes' => '켜ì§', }, }, 'DeletedImageCount' => 'ì‚­ì œëœ ì´ë¯¸ì§€ 카운트', 'DeviceSettingDescription' => '장비 설정 설명', 'DigitalZoom' => { Description => '디지털 줌', PrintConv => { 'Off' => '꺼ì§', }, }, 'DigitalZoomRatio' => '디지털 줌 비율', 'Directory' => '파ì¼ìœ„치', 'DirectoryNumber' => '디렉토리 숫ìž', 'DistortionCorrection' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'DistortionCorrection2' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'DriveMode' => { Description => '드ë¼ì´ë¸Œ 모드', PrintConv => { 'Multiple Exposure' => '다중 노출', 'Off' => '꺼ì§', }, }, 'DynamicAFArea' => { Description => '다ì´ë‚´ë¯¹ AF ì˜ì—­', PrintConv => { '21 Points' => '21 í¬ì¸íЏ', '51 Points' => '51 í¬ì¸íЏ', '51 Points (3D-tracking)' => '51í¬ì¸íЏ (3D-트래킹)', '9 Points' => '9 í¬ì¸íЏ', }, }, 'DynamicRangeExpansion' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'DynamicRangeOptimizer' => { Description => 'D-ë ˆì¸ì§€ 최ì í™”', PrintConv => { 'Advanced Auto' => '고급 ìžë™', 'Advanced Lv1' => '고급 레벨1', 'Advanced Lv2' => '고급 레벨2', 'Advanced Lv3' => '고급 레벨3', 'Advanced Lv4' => '고급 레벨4', 'Advanced Lv5' => '고급 레벨5', 'Auto' => 'ìžë™', 'Off' => '꺼ì§', 'Standard' => '표준', }, }, 'EVStepSize' => { Description => '노출 설정 간격', PrintConv => { '1/2 EV' => '1/2 스í…', '1/3 EV' => '1/3 스í…', }, }, 'EasyExposureCompensation' => { Description => '쉬운 노출 ë³´ì •', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', 'On (auto reset)' => 'ì¼œì§ (ìžë™ 리셋)', }, }, 'EasyMode' => { PrintConv => { 'Manual' => '수ë™', }, }, 'EdgeNoiseReduction' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'EffectiveMaxAperture' => '유효 최대 조리개', 'EnhanceDarkTones' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'Enhancement' => { PrintConv => { 'Green' => '녹색', 'Off' => '꺼ì§', 'Red' => '빨강', }, }, 'EnvelopeRecordVersion' => 'ì••ì¶• ê¸°ë¡ ë²„ì „', 'ExifImageHeight' => 'ì´ë¯¸ì§€ 높ì´', 'ExifImageWidth' => 'ì´ë¯¸ì§€ ë„“ì´', 'ExifOffset' => 'Exif IFD Pointer', 'ExifVersion' => 'Exif 버전', 'ExitPupilPosition' => '출구공 위치', 'ExposureBracketValue' => '노출 브ë¼ì¼€íŒ… ê°’', 'ExposureCompStepSize' => '노출보정/미세조정', 'ExposureCompensation' => '노출 ë³´ì •', 'ExposureControlStepSize' => '노출 ì¡°ì • EV 스í…', 'ExposureDelayMode' => { Description => '노출 대기 모드', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ExposureDifference' => '노출 ë³´ì •', 'ExposureIndex' => '노출 ì¸ë±ìФ', 'ExposureMode' => { Description => '노출 모드', PrintConv => { 'Auto' => 'ìžë™ 노출', 'Auto bracket' => '오토 브ë¼ì¼€ìŠ¤íŒ…', 'Manual' => 'ìˆ˜ë™ ë…¸ì¶œ', }, }, 'ExposureProgram' => { Description => '노출 프로그램', PrintConv => { 'Action (High speed)' => '스í¬ì¸  모드 (빠른 셔터 ìŠ¤í”¼ë“œì— íŽ¸í–¥ë¨)', 'Aperture-priority AE' => '조리개 ìš°ì„ ', 'Bulb' => '벌브', 'Creative (Slow speed)' => 'ë…ì°½ì  í”„ë¡œê·¸ëž¨ (피사계심ë„ì— íŽ¸í–¥ë¨)', 'Landscape' => 'í’ê²½ 모드 (ë°°ê²½ì˜ ì¸í¬ì»¤ìŠ¤ê°€ 있는 í’ê²½ 사진)', 'Manual' => '수ë™', 'Not Defined' => 'ì •ì˜ë˜ì§€ 않ìŒ', 'Portrait' => 'ì¸ë¬¼ 모드 (ë°°ê²½ì˜ ì•„ì›ƒí¬ì»¤ìŠ¤ê°€ 있는 근접 사진)', 'Program AE' => '보통 프로그램', 'Shutter speed priority AE' => '셔터 ìš°ì„ ', }, }, 'ExposureTime' => '노출 시간', 'ExtendedWBDetect' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ExternalFlash' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ExternalFlashFlags' => '외장 플래시 플래그', 'ExternalFlashMode' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'FNumber' => 'F 숫ìž', 'FaceOrientation' => { PrintConv => { 'Horizontal (normal)' => '0° (위쪽/좌측)', 'Rotate 180' => '180° (아래/우측)', 'Rotate 270 CW' => '90° 시계방향 (좌측/아래)', 'Rotate 90 CW' => '90° 반시계방향 (우측/위쪽)', }, }, 'FileFormat' => '형ì‹', 'FileInfo' => 'íŒŒì¼ ì •ë³´', 'FileInfoVersion' => 'íŒŒì¼ ì •ë³´ 버전', 'FileModifyDate' => '갱신 ì¼ìž', 'FileName' => '파ì¼ëª…', 'FileNumber' => 'íŒŒì¼ ìˆ«ìž', 'FileNumberMemory' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'FileNumberSequence' => { Description => '파ì¼ëª… ì—°ì† ë²ˆí˜¸', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'FileSize' => '파ì¼í¬ê¸°', 'FileSource' => { Description => 'íŒŒì¼ ì¶œì²˜', PrintConv => { 'Digital Camera' => '디지털 ì¹´ë©”ë¼', 'Film Scanner' => '필름 스ìºë„ˆ', 'Reflection Print Scanner' => '반사 프린트 스ìºë„ˆ', }, }, 'FileType' => '파ì¼í˜•ì‹', 'Filename' => '파ì¼ëª…', 'FilmType' => '필름 형ì‹', 'Filter' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'FilterEffect' => { Description => 'í•„í„° 효과', PrintConv => { 'Green' => '녹색', 'Off' => '꺼ì§', 'Orange' => '주황', 'Red' => '빨강', 'Yellow' => '노랑', 'n/a' => '설정 안ë¨', }, }, 'FilterEffectMonochrome' => { PrintConv => { 'Green' => '녹색', 'Orange' => '주황', 'Red' => '빨강', 'Yellow' => '노랑', }, }, 'FinderDisplayDuringExposure' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'FineTuneOptCenterWeighted' => 'ìµœì  ë…¸ì¶œ ì¡°ì • 중앙 중ì ', 'FineTuneOptMatrixMetering' => 'ìµœì  ë…¸ì¶œ ì¡°ì • í‰ê°€ 측광', 'FineTuneOptSpotMetering' => 'ìµœì  ë…¸ì¶œ ì¡°ì • 스팟', 'Flash' => { Description => '플래시', PrintConv => { 'Auto, Did not fire' => '플래시 발광 안ë¨, ìžë™ëª¨ë“œ', 'Auto, Did not fire, Red-eye reduction' => 'ìžë™, 발광안ë¨, ì ëª©ê°ì†Œ', 'Auto, Fired' => '플래시 발광, ìžë™ëª¨ë“œ', 'Auto, Fired, Red-eye reduction' => '플래시 발광, ìžë™ëª¨ë“œ, ì ëª©ê°ì†Œëª¨ë“œ', 'Auto, Fired, Red-eye reduction, Return detected' => '플래시 발광, ìžë™ëª¨ë“œ, 복귀광 ê°ì§€ë¨, ì ëª©ê°ì†Œëª¨ë“œ', 'Auto, Fired, Red-eye reduction, Return not detected' => '플래시 발광, ìžë™ëª¨ë“œ, 복귀광 ê°ì§€ì•ˆë¨, ì ëª©ê°ì†Œëª¨ë“œ', 'Auto, Fired, Return detected' => '플래시 발광, ìžë™ëª¨ë“œ, 복귀광 ê°ì§€ë¨', 'Auto, Fired, Return not detected' => '플래시 발광, ìžë™ëª¨ë“œ, 복귀광 ê°ì§€ 안ë¨', 'Did not fire' => '플래시가 ì ë“±í•˜ì§€ 않았습니다', 'Fired' => '플래시 발광', 'Fired, Red-eye reduction' => '플래시 발광, ì ëª©ê°ì†Œëª¨ë“œ', 'Fired, Red-eye reduction, Return detected' => '플래시 발광, ì ëª©ê°ì†Œëª¨ë“œ, 복귀광 ê°ì§€ë¨', 'Fired, Red-eye reduction, Return not detected' => '플래시 발광, ì ëª©ê°ì†Œëª¨ë“œ, 복귀광 ê°ì§€ 안ë¨', 'Fired, Return detected' => '스트로브 복귀광 ê°ì§€ë¨', 'Fired, Return not detected' => '스트로브 복귀광 ê°ì§€ 안ë¨', 'No Flash' => '플래시 발광 안ë¨', 'No flash function' => '플래시 ìž‘ë™ ì—†ìŒ', 'Off, Did not fire' => '플래시 발광 안ë¨, 강제발광모드', 'Off, Did not fire, Return not detected' => '꺼ì§, 발광 안ë¨, 복귀광 ê°ì§€ 안ë¨', 'Off, No flash function' => '꺼ì§, 플래시 ìž‘ë™ ì—†ìŒ', 'Off, Red-eye reduction' => '꺼ì§, ì ëª©ê°ì†Œ', 'On, Did not fire' => '켜ì§, 플래시 발광 안ë¨', 'On, Fired' => '플래시 발광, 강제발광모드', 'On, Red-eye reduction' => '플래시 발광, 강제발광모드, ì ëª©ê°ì†Œëª¨ë“œ', 'On, Red-eye reduction, Return detected' => '플래시 발광, 강제발광모드, ì ëª©ê°ì†Œëª¨ë“œ, 복귀광 ê°ì§€ë¨', 'On, Red-eye reduction, Return not detected' => '플래시 발광, 강제발광모드, ì ëª©ê°ì†Œëª¨ë“œ, 복귀광 ê°ì§€ 안ë¨', 'On, Return detected' => '플래시 발광, 강제발광모드, 복귀광 ê°ì§€ë¨', 'On, Return not detected' => '플래시 발광, 강제발광모드, 복귀광 ê°ì§€ 안ë¨', }, }, 'FlashCommanderMode' => { Description => 'ì»¤ë§¨ë” ëª¨ë“œ', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'FlashCompensation' => '플래시 ë³´ì •', 'FlashControlMode' => { Description => '플래시 컨트롤 모드', PrintConv => { 'Auto Aperture' => 'ìžë™ 조리개 (AA)', 'Manual' => '수ë™', 'Off' => '꺼ì§', 'Repeating Flash' => '리피팅 플래시', }, }, 'FlashEnergy' => '플래시 ì—너지', 'FlashExposureBracketValue' => '플래시 노출 브ë¼ì¼€íŒ… ê°’', 'FlashExposureComp' => '플래시 노출 ë³´ì •', 'FlashExposureLock' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'FlashFired' => '플래시 발광ë¨', 'FlashFocalLength' => '플래시 ì´ˆì  ê¸¸ì´', 'FlashGroupACompensation' => '그룹 A 플래시 ë³´ì •', 'FlashGroupAControlMode' => { Description => '그룹 A 플래시 모드', PrintConv => { 'Auto Aperture' => 'ìžë™ 조리개 (AA)', 'Manual' => '수ë™', 'Off' => '꺼ì§', 'Repeating Flash' => '리피팅 플래시', }, }, 'FlashGroupAOutput' => '그룹 A 플래시 출력', 'FlashGroupBCompensation' => '그룹 B 플래시 ë³´ì •', 'FlashGroupBControlMode' => { Description => '그룹 B 플래시 모드', PrintConv => { 'Auto Aperture' => 'ìžë™ 조리개 (AA)', 'Manual' => '수ë™', 'Off' => '꺼ì§', 'Repeating Flash' => '리피팅 플래시', }, }, 'FlashGroupBOutput' => '그룹 B 플래시 출력', 'FlashGroupCCompensation' => '그룹 C 플래시 ë³´ì •', 'FlashGroupCControlMode' => { Description => '그룹 C 플래시 컨트롤 모드', PrintConv => { 'Auto Aperture' => 'ìžë™ 조리개 (AA)', 'Manual' => '수ë™', 'Off' => '꺼ì§', 'Repeating Flash' => '리피팅 플래시', }, }, 'FlashGroupCOutput' => '그룹 C 플래시 출력', 'FlashInfoVersion' => '플래시 ì •ë³´ 버전', 'FlashLevel' => '플래시 ë³´ì •', 'FlashMode' => { Description => '플래시 모드', PrintConv => { 'Did Not Fire' => '발광 안ë¨', 'Fired, Commander Mode' => '발광ë¨, ì»¤ë§¨ë” ëª¨ë“œ', 'Fired, External' => '발광ë¨, 외장', 'Fired, Manual' => '발광ë¨, 수ë™', 'Fired, TTL Mode' => '발광ë¨, TTL 모드', }, }, 'FlashModel' => '플래시 모ë¸', 'FlashOptions' => { PrintConv => { 'Auto' => 'ìžë™', }, }, 'FlashOptions2' => { PrintConv => { 'Auto' => 'ìžë™', }, }, 'FlashOutput' => '플래시 출력', 'FlashSetting' => '플래시 설정', 'FlashShutterSpeed' => '플래시 셔터 스피드', 'FlashStatus' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'FlashSyncSpeed' => '플래시 ë™ì¡° ì†ë„', 'FlashSyncSpeedAv' => { PrintConv => { 'Auto' => 'ìžë™', }, }, 'FlashType' => '플래시 형ì‹', 'FlashWarning' => { Description => '플래시 경고', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'FlashpixVersion' => 'ì§€ì›ë˜ëŠ” Flashpix 버전', 'FocalLength' => 'ì´ˆì  ê¸¸ì´', 'FocalLength35efl' => 'ì´ˆì ê±°ë¦¬ (35mm 변환)', 'FocalLengthIn35mmFormat' => '35 mm 필름 환산 ì´ˆì ê¸¸ì´', 'FocalPlaneResolutionUnit' => { Description => 'ì´ˆì ë©´ í•´ìƒë„ 단위', PrintConv => { 'None' => 'ì—†ìŒ', 'inches' => 'ì¸ì¹˜', 'um' => 'µm (마ì´í¬ë¡œë¯¸í„°)', }, }, 'FocalPlaneXResolution' => 'ìˆ˜í‰ í•´ìƒë„ ì´ˆì ë©´', 'FocalPlaneYResolution' => 'ìˆ˜ì§ í•´ìƒë„ ì´ˆì ë©´', 'Focus' => { Description => 'í¬ì»¤ìФ', PrintConv => { 'Manual' => '수ë™', }, }, 'FocusArea' => 'AF í¬ì¸íЏ 순환', 'FocusAreaSelection' => { Description => 'AF í¬ì¸íЏ 순환', PrintConv => { 'No Wrap' => '꺼ì§', 'Wrap' => '켜ì§', }, }, 'FocusContinuous' => { PrintConv => { 'Manual' => '수ë™', }, }, 'FocusDistance' => 'ì´ˆì  ê±°ë¦¬', 'FocusMode' => { Description => 'ì´ˆì ëª¨ë“œ', PrintConv => { 'Manual' => '수ë™', }, }, 'FocusMode2' => { PrintConv => { 'Manual' => '수ë™', }, }, 'FocusModeSetting' => { Description => 'ì´ˆì  ëª¨ë“œ', PrintConv => { 'AF-A' => 'ìžë™ AF 서보', 'AF-C' => '컨티뉴어스 AF 서보', 'AF-S' => '싱글 AF 서보', 'Manual' => '수ë™', }, }, 'FocusPointWrap' => { Description => 'ì´ˆì  í¬ì¸íЏ 순환', PrintConv => { 'No Wrap' => '순환 안함', 'Wrap' => '순환', }, }, 'FocusPosition' => 'ì´ˆì  ìœ„ì¹˜', 'FocusRange' => { PrintConv => { 'Auto' => 'ìžë™', 'Manual' => '수ë™', }, }, 'FocusTrackingLockOn' => { Description => 'ì´ˆì  íŠ¸ëž˜í‚¹ Lock-On', PrintConv => { 'Long' => '길게', 'Normal' => '표준', 'Off' => '꺼ì§', 'Short' => '짧게', }, }, 'FrameRate' => '프레임 비율', 'FrameSize' => '프레임 í¬ê¸°', 'FujiFlashMode' => { PrintConv => { 'Auto' => 'ìžë™', }, }, 'FunctionButton' => { Description => '펑션 버튼', PrintConv => { 'AF-area Mode' => 'AF ì˜ì—­ 모드 설정', 'Center AF Area' => '중앙 ì´ˆì  ì˜ì—­', 'Center-weighted' => '중앙부 ì¤‘ì  ì¸¡ê´‘', 'FV Lock' => 'FV ê³ ì •', 'Flash Off' => '플래시 OFF', 'Framing Grid' => '격ìžì„  표시', 'ISO Display' => 'ISO 표시', 'Matrix Metering' => '멀티 패턴 측광', 'Spot Metering' => '스팟 측광', }, }, 'GPSAltitude' => 'ê³ ë„', 'GPSAltitudeRef' => { Description => 'ê³ ë„ ì°¸ì¡°', PrintConv => { 'Above Sea Level' => 'í•´ë©´', 'Below Sea Level' => 'í•´ë©´ 참조(ìŒìˆ˜ ê°’)', }, }, 'GPSAreaInformation' => 'GPS ì˜ì—­ ì´ë¦„', 'GPSDOP' => '측정 ì •ë°€ë„', 'GPSDateStamp' => 'GPS ë‚ ì§œ', 'GPSDestBearing' => '목ì ì§€ì˜ 방위', 'GPSDestBearingRef' => '목ì ì§€ ë°©ìœ„ì˜ ê¸°ì¤€', 'GPSDestDistance' => '목ì ì§€ê¹Œì§€ì˜ 거리', 'GPSDestDistanceRef' => '목ì ì§€ê¹Œì§€ì˜ 거리 단위', 'GPSDestLatitude' => '목ì ì§€ì˜ 위ë„', 'GPSDestLatitudeRef' => '목ì ì§€ 위ë„ì˜ ê¸°ì¤€', 'GPSDestLongitude' => '목ì ì§€ì˜ ê²½ë„', 'GPSDestLongitudeRef' => '목ì ì§€ ê²½ë„ì˜ ê¸°ì¤€', 'GPSDifferential' => { Description => 'GPS 편차 ë³´ì •', PrintConv => { 'Differential Corrected' => '편차 ë³´ì • ì ìš©', 'No Correction' => '편차 ë³´ì • ì—†ì´ ì¸¡ì •', }, }, 'GPSImgDirection' => 'ì´ë¯¸ì§€ ë°©í–¥', 'GPSImgDirectionRef' => 'ì´ë¯¸ì§€ ë°©í–¥ì˜ ê¸°ì¤€', 'GPSInfo' => 'GPS Info IFD Pointer', 'GPSLatitude' => '위ë„', 'GPSLatitudeRef' => { Description => 'ë¶ìœ„ ë˜ëŠ” 남위', PrintConv => { 'North' => 'ë¶ìœ„', 'South' => '남위', }, }, 'GPSLongitude' => 'ê²½ë„', 'GPSLongitudeRef' => { Description => 'ë™ê²½ ë˜ëŠ” 서경', PrintConv => { 'East' => 'ë™ê²½', 'West' => '서경', }, }, 'GPSMapDatum' => 'ì‚¬ìš©ëœ ì¸¡ì§€ ë°ì´í„°', 'GPSMeasureMode' => { Description => 'GPS 측정 모드', PrintConv => { '2-Dimensional Measurement' => '2-ì°¨ì› ì¸¡ëŸ‰(í‰ë©´ 측량)', '3-Dimensional Measurement' => '3ì°¨ì› ì¸¡ì •', }, }, 'GPSProcessingMethod' => 'GPS 처리 ë°©ì‹ ì´ë¦„', 'GPSSatellites' => 'ì¸¡ì •ì— ì‚¬ìš©ëœ GPS 위성', 'GPSSpeed' => 'GPS 수신기 ì†ë„', 'GPSSpeedRef' => { Description => 'ì†ë„ 단위', PrintConv => { 'km/h' => '시간당 킬로미터', 'knots' => '노트', 'mph' => '시간당 마ì¼', }, }, 'GPSStatus' => { Description => 'GPS 수신기 ìƒíƒœ', PrintConv => { 'Measurement Active' => 'ì§„í–‰ ì¤‘ì¸ ì¸¡ì •', 'Measurement Void' => '측정 ìƒí˜¸ 운용성', }, }, 'GPSTimeStamp' => 'GPS 시간(ì›ìž 시계)', 'GPSTrack' => 'ì´ë™ ë°©í–¥', 'GPSTrackRef' => { Description => 'ì´ë™ ë°©í–¥ì˜ ê¸°ì¤€', PrintConv => { 'Magnetic North' => 'ìžê¸° ë°©í–¥', 'True North' => '실제 ë°©í–¥', }, }, 'GPSVersionID' => 'GPS 태그 버전', 'GainControl' => { Description => 'ì´ë“ 제어', PrintConv => { 'High gain down' => 'ë†’ì€ ì´ë“ ê°ì†Œ', 'High gain up' => 'ë†’ì€ ì´ë“ ì¦ê°€', 'Low gain down' => 'ì ì€ ì´ë“ ê°ì†Œ', 'Low gain up' => 'ì ì€ ì´ë“ ì¦ê°€', 'None' => 'ì—†ìŒ', }, }, 'Gamma' => 'ê°ë§ˆ', 'Gradation' => '계조', 'GridDisplay' => { Description => 'ê²©ìž í‘œì‹œ', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'HDR' => { Description => 'ìžë™ HDR', PrintConv => { 'Off' => 'ì—†ìŒ', }, }, 'Headline' => '헤드ë¼ì¸', 'HighISONoiseReduction' => { Description => 'ê³ ISOì—서 ë…¸ì´ì¦ˆì œê±°', PrintConv => { 'Auto' => 'ìžë™', 'High' => '강함', 'Low' => '약함', 'Minimal' => '최소', 'Normal' => '표준', 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'HighlightTonePriority' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'Hue' => '색ìƒ', 'HueAdjustment' => '색조', 'ISO' => 'ISO ì†ë„', 'ISOAuto' => 'ìžë™ ISO', 'ISODisplay' => 'ISO 표시', 'ISOExpansion' => { Description => 'ISO 확장', PrintConv => { 'Off' => '꺼ì§', }, }, 'ISOExpansion2' => { Description => 'ISO 확장 (2)', PrintConv => { 'Off' => '꺼ì§', }, }, 'ISOInfo' => 'ISO ì •ë³´', 'ISOSelection' => 'ISO ì„ íƒ', 'ISOSetting' => { Description => 'ISO 설정', PrintConv => { 'Auto' => 'ìžë™', 'Manual' => '수ë™', }, }, 'ISOStepSize' => 'ISO ê°ë„ ìŠ¤í… ìˆ˜ì¹˜', 'Illumination' => { Description => '조명', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ImageAdjustment' => 'ì´ë¯¸ì§€ ì¡°ì •', 'ImageAuthentication' => { Description => 'ì´ë¯¸ì§€ ì¸ì¦', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ImageBoundary' => 'ì´ë¯¸ì§€ 경계', 'ImageCount' => 'ì´ë¯¸ì§€ 카운트', 'ImageDataSize' => 'ì´ë¯¸ì§€ ë°ì´í„° í¬ê¸°', 'ImageDustOff' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ImageHeight' => 'ì´ë¯¸ì§€ 높ì´', 'ImageHistory' => 'ì´ë¯¸ì§€ ì´ë ¥', 'ImageNumber' => 'ì´ë¯¸ì§€ 숫ìž', 'ImageOptimization' => 'ì´ë¯¸ì§€ 최ì í™”', 'ImageProcessing' => 'ì´ë¯¸ì§€ 처리', 'ImageQuality' => 'ì´ë¯¸ì§€ 화질', 'ImageReview' => { Description => 'ì´ë¯¸ì§€ 미리보기', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ImageReviewTime' => 'ì´ë¯¸ì§€ ìž¬ìƒ ì‹œê°„', 'ImageSize' => 'ì´ë¯¸ì§€ í¬ê¸°', 'ImageStabilization' => { Description => 'ì†ë–¨ë¦¼ ë³´ì •', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ImageUniqueID' => '고유 ì´ë¯¸ì§€ ID', 'ImageWidth' => 'ì´ë¯¸ì§€ ë„“ì´', 'Index' => '색ì¸', 'InitialZoomSetting' => { Description => 'ì´ë‹ˆì…œ 줌 설정', PrintConv => { 'High Magnification' => 'í° í™•ëŒ€', 'Low Magnification' => 'ìž‘ì€ í™•ëŒ€', 'Medium Magnification' => '중간 확대', }, }, 'Instructions' => '안내', 'IntensityStereo' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'InternalFlash' => { Description => '내장플래시 컨트롤', PrintConv => { 'Commander Mode' => 'ì»¤ë§¨ë” ëª¨ë“œ', 'Manual' => '수ë™', 'Off' => '꺼ì§', 'On' => '켜ì§', 'Repeating Flash' => '리피팅 플래시', }, }, 'InternalFlashMode' => { PrintConv => { 'On' => '켜ì§', }, }, 'InteropIndex' => 'ìƒí˜¸ìš´ìš©ì„± ì¦ëª…', 'InteropOffset' => 'ìƒí˜¸ 운용성 태그', 'InteropVersion' => 'ìƒí˜¸ 운용성 버전', 'JPEGQuality' => { Description => '화질', PrintConv => { 'Extra Fine' => 'ì—‘ìŠ¤íŠ¸ë¼ íŒŒì¸', 'Fine' => '파ì¸', 'Standard' => '표준화질', }, }, 'Keyword' => '키워드', 'Keywords' => '키워드', 'LCDIllumination' => { Description => 'LCD 조명', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'LCDIlluminationDuringBulb' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'LCHEditor' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'Lens' => '렌즈', 'LensDataVersion' => '렌즈 ë°ì´í„° 버전', 'LensFStops' => '렌즈 F-숫ìž', 'LensID' => 'ì‚¬ìš©ëœ ë Œì¦ˆ', 'LensIDNumber' => '렌즈 ID 숫ìž', 'LensInfo' => '렌즈 ì •ë³´', 'LensType' => '렌즈 형ì‹', 'LightSource' => { Description => 'ê´‘ì› ì¢…ë¥˜', PrintConv => { 'Cloudy' => 'í린 날씨', 'Cool White Fluorescent' => '냉백색 형광등 (W 3800 - 4500K)', 'Day White Fluorescent' => '주백색 형광등 (N 4600 - 5500K)', 'Daylight' => '주광', 'Daylight Fluorescent' => '주광색 형광등 (D 5700 - 7100K)', 'Fine Weather' => 'ë§‘ì€ ë‚ ì”¨', 'Flash' => '플래시', 'Fluorescent' => '형광등', 'ISO Studio Tungsten' => 'ISO 스튜디오 텅스í…', 'Other' => '기타 ê´‘ì›', 'Shade' => '그늘', 'Standard Light A' => '표준 ê´‘ì› A', 'Standard Light B' => '표준 ê´‘ì› B', 'Standard Light C' => '표준 ê´‘ì› C', 'Tungsten (Incandescent)' => 'í……ìŠ¤í… (백열등)', 'Unknown' => '알 수 ì—†ìŒ', 'Warm White Fluorescent' => '따뜻한 í°ìƒ‰ 형광 (L 2600 - 3250K)', 'White Fluorescent' => '백색 형광등 (WW 3250 - 3800K)', }, }, 'Lightness' => '명ë„', 'LinearizationTable' => '선형ë„표', 'LiveViewShooting' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'Location' => '위치', 'LongExposureNoiseReduction' => { Description => '장시간 노출 NR', PrintConv => { 'Auto' => 'ìžë™', 'Off' => 'ì—†ìŒ', 'On' => '있ìŒ', }, }, 'LuminanceNoiseReduction' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'MB-D10Batteries' => 'MB-D10 배터리 형ì‹', 'MB-D10BatteryType' => 'MB-D10 배터리 형ì‹', 'MB-D80Batteries' => { Description => 'MB-D80 배터리', PrintConv => { 'FR6 (AA Lithium)' => 'FR6 (AA 리튬)', 'LR6 (AA Alkaline)' => 'LR6 (AA 알카ë¼ì¸)', }, }, 'MCUVersion' => 'MCU 버전', 'MSStereo' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'Macro' => { PrintConv => { 'Manual' => '수ë™', }, }, 'MacroMode' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'MainDialExposureComp' => { Description => '노출 ë³´ì •', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'Make' => 'ë©”ì´ì»¤', 'MakerNote' => '제조사 노트', 'MakerNoteVersion' => '제조사노트 버전', 'MakerNotes' => '제조업체 ì •ë³´', 'ManualFlashOutput' => '내장 플래시 ìˆ˜ë™ ì¶œë ¥', 'ManualFocusDistance' => 'ìˆ˜ë™ ì´ˆì  ê±°ë¦¬', 'MaxAperture' => '최대 렌즈 조리개', 'MaxApertureAtMaxFocal' => '최대 ì´ˆì ê¸¸ì´ì—서 최대 조리개', 'MaxApertureAtMinFocal' => '최소 ì´ˆì ê¸¸ì´ì—서 최대 조리개', 'MaxApertureValue' => '최대 렌즈 조리개', 'MaxContinuousRelease' => '최대 연사 릴리즈', 'MaxFocalLength' => '최대 ì´ˆì ê¸¸ì´', 'Metering' => { Description => '측광', PrintConv => { 'Center-weighted' => '중앙부 중ì ', 'Matrix' => '멀티패턴', 'Spot' => '스팟', }, }, 'MeteringMode' => { Description => '측광 모드', PrintConv => { 'Average' => 'í‰ê· ', 'Center-weighted average' => 'ì¤‘ì•™ì¤‘ì  í‰ê· ', 'Multi-segment' => '멀티 패턴', 'Multi-spot' => '멀티 스팟', 'Other' => '기타', 'Partial' => '부분', 'Spot' => '스팟', 'Unknown' => '알 수 ì—†ìŒ', }, }, 'MeteringTime' => { Description => 'ìžë™ 측광 êº¼ì§ ì‹œê°„', PrintConv => { 'No Limit' => '무제한', }, }, 'MinFocalLength' => '최소 ì´ˆì ê¸¸ì´', 'Model' => 'ì¹´ë©”ë¼ ëª¨ë¸', 'ModelingFlash' => { Description => '최대', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ModifiedSaturation' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'ModifiedToneCurve' => { PrintConv => { 'Manual' => '수ë™', }, }, 'ModifiedWhiteBalance' => { PrintConv => { 'Auto' => 'ìžë™', }, }, 'ModifyDate' => 'íŒŒì¼ ë³€ê²½ ë‚ ì§œ ë° ì‹œê°„', 'MoireFilter' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'MonitorOffTime' => '모니터 êº¼ì§ ì‹œê°„', 'MonochromeFilterEffect' => { PrintConv => { 'Green' => '녹색', 'Orange' => '주황', 'Red' => '빨강', 'Yellow' => '노랑', }, }, 'MonochromeToningEffect' => { PrintConv => { 'Green' => '녹색', }, }, 'MultiExposure' => '다중 노출 ë°ì´í„°', 'MultiExposureAutoGain' => { Description => '다중 노출 ìžë™ 게ì¸', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'MultiExposureMode' => { Description => '다중노출 모드', PrintConv => { 'Image Overlay' => 'ì´ë¯¸ì§€ 오버레ì´', 'Multiple Exposure' => '다중 노출', 'Off' => '꺼ì§', }, }, 'MultiExposureShots' => '다중 노출 ì´¬ì˜', 'MultiExposureVersion' => '다중 노출 ë°ì´í„° 버전', 'MultiFrameNoiseReduction' => { Description => '다중 프레임 ë…¸ì´ì¦ˆ ê°ì‡„', PrintConv => { 'Off' => 'ì—†ìŒ', 'On' => '있ìŒ', }, }, 'MultiSelector' => { Description => '멀티셀렉터', PrintConv => { 'Do Nothing' => 'ì•„ë¬´ê²ƒë„ ì•ˆí•¨', 'Reset Meter-off Delay' => '노출계 êº¼ì§ ì‹œê°„ 초기화', }, }, 'MultiSelectorPlaybackMode' => { Description => '멀티셀렉터 ìž¬ìƒ ëª¨ë“œ', PrintConv => { 'Choose Folder' => 'í´ë” ì„ íƒ', 'Thumbnail On/Off' => 'ì„¬ë„¤ì¼ on/off', 'View Histograms' => '히스토그램 표시', 'Zoom On/Off' => '줌 on/off', }, }, 'MultiSelectorShootMode' => { Description => '멀티셀렉터 ì´¬ì˜ ëª¨ë“œ', PrintConv => { 'Highlight Active Focus Point' => '활성 ì´ˆì  í¬ì¸íЏ 하ì´ë¼ì´íЏ', 'Not Used' => '사용 안ë¨', 'Select Center Focus Point' => '중앙 ì´ˆì  í¬ì¸íЏ ì„ íƒ', }, }, 'MultipleExposureSet' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'Mute' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'MyColorMode' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'NDFilter' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'NEFCompression' => { Description => 'RAW ì••ì¶•', PrintConv => { 'Lossless' => 'ì†ì‹¤ ì—†ìŒ', 'Lossy (type 1)' => 'ì†ì‹¤ë¨ (타입 1)', 'Lossy (type 2)' => 'ì†ì‹¤ë¨ (타입 2)', 'Uncompressed' => 'ì••ì¶•ë˜ì§€ 않ìŒ', }, }, 'NEFLinearizationTable' => '선형ë„표', 'NikonCaptureData' => 'Nikon Capture ë°ì´í„°', 'NikonCaptureVersion' => 'Nikon Capture 버전', 'NikonImageSize' => { Description => 'ì´ë¯¸ì§€ í¬ê¸°', PrintConv => { 'Large (10.0 M)' => 'í° (10.0M)', 'Medium (5.6 M)' => '중간 (5.6M)', 'Small (2.5 M)' => 'ìž‘ì€ (2.5M)', }, }, 'NoMemoryCard' => { Description => '메모리카드 ì—†ì„ ê²½ìš°', PrintConv => { 'Enable Release' => '릴리즈 허용', 'Release Locked' => '릴리즈 잠금', }, }, 'Noise' => 'ë…¸ì´ì¦ˆ', 'NoiseFilter' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'NoiseReduction' => { Description => 'ë…¸ì´ì¦ˆ 제거', PrintConv => { 'Auto' => 'ìžë™', 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'OneTouchWB' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'Opto-ElectricConvFactor' => 'ê´‘ì „ìž ë³€í™˜ 계수', 'Orientation' => { Description => 'ì´ë¯¸ì§€ 위치', PrintConv => { 'Horizontal (normal)' => '0° (위쪽/좌측)', 'Mirror horizontal' => '0° (위쪽/우측)', 'Mirror horizontal and rotate 270 CW' => '90° 시계방향 (좌측/위쪽)', 'Mirror horizontal and rotate 90 CW' => '90° 반시계방향 (우측/아래)', 'Mirror vertical' => '180° (아래/좌측)', 'Rotate 180' => '180° (아래/우측)', 'Rotate 270 CW' => '90° 시계방향 (좌측/아래)', 'Rotate 90 CW' => '90° 반시계방향 (우측/위쪽)', }, }, 'PhaseDetectAF' => { Description => '오토í¬ì»¤ìФ', PrintConv => { 'Off' => '비활성', 'On (51-point)' => '활성', }, }, 'PhotoEffect' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'PhotoEffects' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'PhotoInfoPlayback' => { Description => '사진 ì •ë³´/재ìƒ', PrintConv => { 'Info Left-right, Playback Up-down' => 'ì •ë³´ <> / 재ìƒ', 'Info Up-down, Playback Left-right' => 'ì •ë³´ / ìž¬ìƒ <>', }, }, 'PhotometricInterpretation' => { Description => '픽셀 형ì‹', PrintConv => { 'BlackIsZero' => 'ë¸”ëž™ì€ ì œë¡œìž„', 'RGB Palette' => '팔렛트 컬러', 'Transparency Mask' => '투명 마스í¬', 'WhiteIsZero' => 'í™”ì´íŠ¸ëŠ” 제로임', }, }, 'PictureControl' => { Description => '픽ì³ì»¨íŠ¸ë¡¤', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'PictureControlActive' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'PictureControlAdjust' => { Description => '픽ì³ì»¨íŠ¸ë¡¤ ì¡°ì •', PrintConv => { 'Default Settings' => '기본 설정', 'Full Control' => 'ì „ì²´ 제어', 'Quick Adjust' => '빠른 ì¡°ì •', }, }, 'PictureControlBase' => '픽ì³ì»¨íŠ¸ë¡¤ 기초', 'PictureControlName' => '픽ì³ì»¨íŠ¸ë¡¤ ì´ë¦„', 'PictureControlQuickAdjust' => '픽ì³ì»¨íŠ¸ë¡¤ 빠른 ì¡°ì •', 'PictureControlVersion' => '픽ì³ì»¨íŠ¸ë¡¤ 버전', 'PictureMode' => { PrintConv => { 'Auto' => 'ìžë™', 'Manual' => '수ë™', }, }, 'PictureMode2' => { PrintConv => { 'Manual' => '수ë™', }, }, 'PictureModeBWFilter' => { PrintConv => { 'Green' => '녹색', 'Orange' => '주황', 'Red' => '빨강', 'Yellow' => '노랑', }, }, 'PictureModeTone' => { PrintConv => { 'Green' => '녹색', }, }, 'PlanarConfiguration' => { Description => 'ì´ë¯¸ì§€ ë°ì´í„° ì •ë ¬', PrintConv => { 'Chunky' => '청키 형ì‹', 'Planar' => 'í‰ë©´ 형ì‹', }, }, 'Preview' => 'IFD í¬ì¸í„° 미리보기', 'PreviewIFD' => 'IFD í¬ì¸í„° 미리보기', 'PrimaryAFPoint' => { PrintConv => { 'Bottom' => '하단', 'C6 (Center)' => 'C6 (중앙)', 'Center' => '중앙', 'Far Left' => '맨 좌측', 'Far Right' => '맨 우측', 'Lower-left' => '좌하단', 'Lower-right' => '우하단', 'Mid-left' => '왼쪽', 'Mid-right' => '오른쪽', 'Top' => 'ìƒë‹¨', 'Upper-left' => '좌ìƒë‹¨', 'Upper-right' => 'ìš°ìƒë‹¨', }, }, 'PrimaryChromaticities' => '기본 색ë„', 'ProgramShift' => '프로그램 쉬프트', 'Province-State' => 'ë„', 'Quality' => { Description => '화질', PrintConv => { 'Compressed RAW' => 'cRAW', 'Compressed RAW + JPEG' => 'cRAW+JPEG', 'Extra Fine' => 'ì—‘ìŠ¤íŠ¸ë¼ íŒŒì¸', 'Fine' => '파ì¸', 'Low' => '저화질', 'Normal' => '표준화질', 'RAW + JPEG' => 'RAW+JPEG', 'Standard' => '표준', }, }, 'QuickAdjust' => '빠른 ì¡°ì •', 'RawDevAutoGradation' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'RawDevPMPictureTone' => { PrintConv => { 'Green' => '녹색', }, }, 'RawDevPM_BWFilter' => { PrintConv => { 'Green' => '녹색', 'Orange' => '주황', 'Red' => '빨강', 'Yellow' => '노랑', }, }, 'RawImageCenter' => 'RAW ì´ë¯¸ì§€ 중앙', 'RecordMode' => { Description => 'ì´ë¯¸ì§€ 화질 모드', PrintConv => { 'Manual' => '수ë™', }, }, 'RecordingMode' => { PrintConv => { 'Auto' => 'ìžë™', 'Manual' => '수ë™', }, }, 'RedEyeCorrection' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'RedEyeReduction' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ReferenceBlackWhite' => 'í‘ë°± 참조 ê°’ì˜ ìŒ', 'RelatedImageFileFormat' => '관련 ì´ë¯¸ì§€ íŒŒì¼ í˜•ì‹', 'RelatedImageHeight' => '관련 ì´ë¯¸ì§€ 길ì´', 'RelatedImageWidth' => '관련 ì´ë¯¸ì§€ 너비', 'RelatedSoundFile' => 'ì—°ê´€ëœ ì˜¤ë””ì˜¤ 파ì¼', 'ReleaseButtonToUseDial' => { Description => '다ì´ì–¼ë¡œ 릴리즈 버튼 사용', PrintConv => { 'No' => '아니오', 'Yes' => '예', }, }, 'RemoteOnDuration' => '리모컨 ì§€ì† ì‹œê°„', 'RepeatingFlashCount' => '리피팅 플래시 시간', 'RepeatingFlashOutput' => '리피팅 플래시 출력', 'RepeatingFlashRate' => '리피팅 플래시 간격', 'ResolutionUnit' => { Description => 'X 와 Y í•´ìƒë„ 단위', PrintConv => { 'None' => 'ì—†ìŒ', 'cm' => '센티미터', 'inches' => 'ì¸ì¹˜', }, }, 'RetouchHistory' => { Description => '리터치 ì´ë ¥', PrintConv => { 'B & W' => 'í‘ë°±', 'Color Custom' => '커스텀 컬러', 'Cyanotype' => '청사진', 'Image Overlay' => 'ì´ë¯¸ì§€ 오버레ì´', 'None' => 'ì—†ìŒ', 'Sepia' => '세피아', 'Sky Light' => 'ìŠ¤ì¹´ì´ ë¼ì´íЏ', 'Small Picture' => '스몰', 'Trim' => '트리ë°', 'Warm Tone' => '따뜻한 톤', }, }, 'ReverseIndicators' => 'ì¸ë””ì¼€ì´í„° 전환', 'Rotation' => { Description => 'ì¹´ë©”ë¼ íšŒì „ ë°©í–¥', PrintConv => { 'Horizontal' => '0° (수í‰)', 'Rotated 180' => '180° (ìƒí•˜ë°˜ì „)', 'Rotated 270 CW' => '90° 좌회전', 'Rotated 90 CW' => '90° 우회전', }, }, 'RowsPerStrip' => '스트립 당 í–‰ì˜ ìˆ˜', 'SamplesPerPixel' => '구성 요소 수', 'Saturation' => { Description => '채ë„', PrintConv => { 'High' => '고채ë„', 'Low' => '저채ë„', 'Normal' => '표준', }, }, 'ScanImageEnhancer' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'SceneAssist' => 'ë³´ì¡° 센서', 'SceneCaptureType' => { Description => '장면 ê¸°ë¡ í˜•ì‹', PrintConv => { 'Landscape' => 'í’ê²½', 'Night' => '야경', 'Portrait' => 'ì¸ë¬¼', 'Standard' => '표준', }, }, 'SceneMode' => { Description => '장면 모드', PrintConv => { '3D Sweep Panorama' => '3D', 'Anti Motion Blur' => 'ì¸ë¬¼ í”들림 ë°©ì§€', 'Auto' => 'ìžë™', 'Cont. Priority AE' => 'ì—°ì† ì´¬ì˜ ìš°ì„  AE', 'Handheld Night Shot' => 'ì†ìœ¼ë¡œ 야간 ì´¬ì˜', 'Landscape' => 'í’ê²½', 'Macro' => '매í¬ë¡œ', 'Manual' => '수ë™', 'Night Portrait' => '야경 ì¸ë¬¼', 'Night Scene' => '야경', 'Night View/Portrait' => '야경/ì¸ë¬¼', 'Off' => '꺼ì§', 'Portrait' => 'ì¸ë¬¼', 'Sports' => '스í¬ì¸  ì•¡ì…˜', 'Sunset' => 'ì„ì–‘ì´¬ì˜', 'Sweep Panorama' => '스위프 파노ë¼ë§ˆ', }, }, 'SceneModeUsed' => { PrintConv => { 'Manual' => '수ë™', }, }, 'SceneType' => { Description => '장면 형ì‹', PrintConv => { 'Directly photographed' => 'ì§ì ‘ ì´¬ì˜ëœ ì´ë¯¸ì§€', }, }, 'SecurityClassification' => { Description => '보안 분류', PrintConv => { 'Confidential' => '기밀', 'Restricted' => '제한', 'Secret' => '비밀', 'Top Secret' => '1급비밀', 'Unclassified' => '분류안ë¨', }, }, 'SelfTimerMode' => '셀프 타ì´ë¨¸ 모드', 'SelfTimerTime' => '셀프타ì´ë¨¸', 'SensingMethod' => { Description => '검출 ë°©ì‹', PrintConv => { 'Color sequential area' => 'ìƒ‰ìƒ ìˆœì°¨ ì˜ì—­ 센서', 'Color sequential linear' => 'ìƒ‰ìƒ ìˆœì°¨ 선형 센서', 'Monochrome area' => '모노í¬ë¡¬ ì˜ì—­ 센서', 'Monochrome linear' => '모노í¬ë¡¬ 선형 센서', 'Not defined' => 'ì •ì˜ë˜ì§€ 않ìŒ', 'One-chip color area' => 'One-chip ìƒ‰ìƒ ì˜ì—­ 센서', 'Three-chip color area' => 'Three-chip ìƒ‰ìƒ ì˜ì—­ 센서', 'Trilinear' => 'Trilinear 센서', 'Two-chip color area' => 'Two-chip ìƒ‰ìƒ ì˜ì—­ 센서', }, }, 'SensorPixelSize' => '센서 픽셀 í¬ê¸°', 'SerialNumber' => '시리얼번호', 'ShadingCompensation' => { Description => '주변광량 ë³´ì •', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ShadingCompensation2' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ShakeReduction' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'Sharpness' => { Description => '선명ë„', PrintConv => { 'Hard' => '강하게', 'Normal' => '표준', 'Soft' => '약하게', }, }, 'ShootingInfoDisplay' => { Description => 'ì´¬ì˜ ì •ë³´ 표시', PrintConv => { 'Auto' => 'ìžë™', 'Manual (dark on light)' => 'ìˆ˜ë™ - ë°ì€ë°°ê²½ì— ì–´ë‘움', 'Manual (light on dark)' => 'ìˆ˜ë™ - ì–´ë‘ìš´ ë°°ê²½ì— ë°ìŒ', }, }, 'ShootingMode' => { Description => 'ì›ê²© 리모컨', PrintConv => { 'Manual' => '수ë™', }, }, 'ShootingModeSetting' => { Description => 'ì´¬ì˜ ëª¨ë“œ', PrintConv => { 'Continuous' => '연사', 'Delayed Remote' => 'ì´¬ì˜ëŒ€ê¸° 리모컨', 'Quick-response Remote' => 'ì¦‰ì‹œì´¬ì˜ ë¦¬ëª¨ì»¨', 'Self-timer' => '셀프타ì´ë¨¸', 'Single Frame' => '싱글 프레임', }, }, 'ShotInfoVersion' => 'ì´¬ì˜ ì •ë³´ 버전', 'ShutterCount' => '셔터 카운트', 'ShutterMode' => { PrintConv => { 'Auto' => 'ìžë™', }, }, 'ShutterReleaseButtonAE-L' => { Description => '셔터 릴리즈 버튼 AE-L', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ShutterSpeed' => '노출 시간', 'ShutterSpeedValue' => '셔터 ì†ë„', 'SlowShutter' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'SlowSync' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'Software' => '소프트웨어', 'Source' => '소스', 'SpatialFrequencyResponse' => '공간 주파수 ì‘답', 'SpectralSensitivity' => 'ë¶„ê´‘ ê°ë„', 'State' => 'ë„', 'StripByteCounts' => 'ì••ì¶•ëœ ìŠ¤íŠ¸ë¦½ 당 ë°”ì´íЏ', 'StripOffsets' => 'ì´ë¯¸ì§€ ë°ì´í„° 위치', 'SubSecTime' => 'ì¼ì‹œ 1/100 ì´ˆ', 'SubSecTimeDigitized' => '디지털화 ì¼ì‹œ 1/100 ì´ˆ', 'SubSecTimeOriginal' => 'ì›ë³¸ì¼ì‹œ 1/100 ì´ˆ', 'SubfileType' => '새로운 ì„œë¸ŒíŒŒì¼ í˜•ì‹', 'SubjectArea' => '피사체 ì˜ì—­', 'SubjectDistance' => 'í”¼ì‚¬ì²´ì˜ ê±°ë¦¬', 'SubjectDistanceRange' => { Description => '피사체 거리 한계', PrintConv => { 'Close' => '근경', 'Distant' => 'ì›ê²½', 'Macro' => '매í¬ë¡œ', 'Unknown' => '알 수 ì—†ìŒ', }, }, 'SubjectLocation' => '피사체 위치', 'SuperMacro' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'SuperimposedDisplay' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'SupplementalCategories' => 'ë³´ì¶© 범주', 'TextStamp' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ThumbnailImage' => '축소 그림', 'ThumbnailImageSize' => '갤러리 í¬ê¸°', 'TimeZone' => '표준 시간대', 'TimerFunctionButton' => { Description => 'Fn 버튼', PrintConv => { 'ISO' => 'ISO ê°ë„', 'Image Quality/Size' => 'ì´ë¯¸ì§€ 화질/í¬ê¸°', 'Self-timer' => '셀프타ì´ë¨¸', 'Shooting Mode' => 'ì´¬ì˜ ëª¨ë“œ', 'White Balance' => 'í™”ì´íЏ 밸런스', }, }, 'Title' => '제목', 'ToneComp' => '계조 ë³´ì •', 'ToneCurve' => { PrintConv => { 'Manual' => '수ë™', }, }, 'ToningEffect' => { Description => '조색 효과', PrintConv => { 'B&W' => 'í‘ë°±', 'Blue' => '블루', 'Blue-green' => '블루-그린', 'Green' => '녹색', 'Purple-blue' => 'í¼í”Œ-블루', 'Red' => '빨강', 'Red-purple' => '레드-í¼í”Œ', 'Yellow' => '노랑', 'n/a' => '설정 안ë¨', }, }, 'ToningEffectMonochrome' => { PrintConv => { 'Green' => '녹색', }, }, 'ToningSaturation' => 'ì±„ë„ ì¡°ì •', 'TransferFunction' => '전송 기능', 'TransmissionReference' => '전송 참조', 'Uncompressed' => 'ì••ì¶•ë˜ì§€ 않ìŒ', 'Unsharp1Color' => { PrintConv => { 'Green' => '녹색', 'Red' => '빨강', 'Yellow' => '노랑', }, }, 'Unsharp2Color' => { PrintConv => { 'Green' => '녹색', 'Red' => '빨강', 'Yellow' => '노랑', }, }, 'Unsharp3Color' => { PrintConv => { 'Green' => '녹색', 'Red' => '빨강', 'Yellow' => '노랑', }, }, 'Unsharp4Color' => { PrintConv => { 'Green' => '녹색', 'Red' => '빨강', 'Yellow' => '노랑', }, }, 'UnsharpMask' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'Urgency' => '중요ë„', 'UserComment' => 'ì‚¬ìš©ìž ì½”ë©˜íŠ¸', 'VRInfo' => 'ì†ë–¨ë¦¼ ë³´ì • ì •ë³´', 'VRInfoVersion' => 'VR ì •ë³´ 버전', 'VR_0x66' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'VariProgram' => '다중 프로그램', 'VibrationReduction' => { Description => 'ì†ë–¨ë¦¼ ë³´ì •', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'ViewfinderWarning' => { Description => '뷰파ì¼ë” 경고', PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'VignetteControl' => { Description => '비네팅 컨트롤', PrintConv => { 'High' => '높ìŒ', 'Low' => 'ë‚®ìŒ', 'Normal' => '표준', 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'WBBracketMode' => { PrintConv => { 'Off' => '꺼ì§', }, }, 'WBMode' => { PrintConv => { 'Auto' => 'ìžë™', }, }, 'WhiteBalance' => { Description => 'í™”ì´íŠ¸ë°¸ëŸ°ìŠ¤', PrintConv => { 'Auto' => 'ìžë™', 'Black & White' => 'í‘ë°±', 'Cloudy' => 'í린날', 'Color Temperature/Color Filter' => '색 ì˜¨ë„ / 컬러 í•„í„°', 'Cool White Fluorescent' => '차가운 백색 형광', 'Custom' => 'ì‚¬ìš©ìž ì •ì˜', 'Custom 1' => 'ê°œì¸ì„¤ì •1', 'Custom 2' => 'ê°œì¸ì„¤ì •2', 'Custom 3' => 'ê°œì¸ì„¤ì •3', 'Custom 4' => 'ê°œì¸ì„¤ì •4', 'Day White Fluorescent' => '중성 백색 형광', 'Daylight' => 'ë§‘ì€ë‚ ', 'Daylight Fluorescent' => 'ì¼ê´‘ 형광', 'Flash' => '플래시', 'Fluorescent' => '형광등', 'Manual' => '수ë™', 'Shade' => '그늘', 'Tungsten' => '백열등', 'Unknown' => '알 수 ì—†ìŒ', 'Warm White Fluorescent' => '따뜻한 í°ìƒ‰ 형광', 'White Fluorescent' => '백색 형광등', }, }, 'WhiteBalance2' => { PrintConv => { 'Auto' => 'ìžë™', }, }, 'WhiteBalanceAdj' => { PrintConv => { 'Auto' => 'ìžë™', 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, 'WhiteBalanceFineTune' => 'í™”ì´íŠ¸ë°¸ëŸ°ìŠ¤ ì¡°ì •', 'WhiteBalanceSet' => { PrintConv => { 'Auto' => 'ìžë™', 'Manual' => '수ë™', }, }, 'WhitePoint' => 'í°ìƒ‰ ì  ìƒ‰ë„', 'WorldTime' => '표준 시간대', 'Writer-Editor' => '캡션 작성ìž', 'XResolution' => 'ìˆ˜í‰ í•´ìƒë„', 'YCbCrCoefficients' => 'ìƒ‰ìƒ ê³µê°„ 변환 매트릭스 계수', 'YCbCrPositioning' => { Description => 'Y and C 위치', PrintConv => { 'Centered' => '중앙', 'Co-sited' => '주변', }, }, 'YCbCrSubSampling' => 'Y->C ì„œë¸Œìƒ˜í”Œë§ ë¹„ìœ¨', 'YResolution' => 'ìˆ˜ì§ í•´ìƒë„', 'ZoneMatching' => { Description => 'ì˜ì—­ 전환', PrintConv => { 'High Key' => 'Hi', 'ISO Setting Used' => 'ì—†ìŒ', 'Low Key' => 'Lo', }, }, 'ZoneMatchingOn' => { PrintConv => { 'Off' => '꺼ì§', 'On' => '켜ì§', }, }, ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::ko.pm - ExifTool Korean language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke and Jeong Beom Kim for providing this translation. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut ���������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/nl.pm��������������������������������������������������000644 �000765 �000024 �00000262605 12642461343 021554� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: nl.pm # # Description: ExifTool Dutch language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::nl; use strict; use vars qw($VERSION); $VERSION = '1.11'; %Image::ExifTool::Lang::nl::Translate = ( 'AEBAutoCancel' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'AELock' => { Description => 'AE-vergrendeling', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'AELockButton' => { Description => 'AE-L/AF-L', PrintConv => { 'AE Lock (hold)' => 'AE-vergrendeling vast', 'AE Lock Only' => 'AE-vergrendeling', 'AE-L/AF Area' => 'AE-L/AF veld', 'AE-L/AF-L/AF Area' => 'AE-L/AF-L/AF veld', 'AE/AF Lock' => 'AE/AF-vergrendeling', 'AF Lock Only' => 'AF-vergrendeling', 'AF-L/AF Area' => 'AF-L/AF veld', 'AF-ON/AF Area' => 'AF-ON/AF veld', 'FV Lock' => 'FV-vergrendeling', 'Focus Area Selection' => 'AF-veld', }, }, 'AEMeteringMode' => { PrintConv => { 'Multi-segment' => 'Multi segment', }, }, 'AEProgramMode' => { PrintConv => { 'Landscape' => 'Landschap', 'Portrait' => 'Portret', 'Standard' => 'Standaard', }, }, 'AF-CPrioritySelection' => { Description => 'Selectie AF-C-prioriteit', PrintConv => { 'Focus' => 'Scherpstelling', 'Release' => 'Ontspannen', 'Release + Focus' => 'Ontspannen + scherpstelling', }, }, 'AF-OnForMB-D10' => { Description => 'Functie AF-ON-knop MBD10', PrintConv => { 'AE Lock (hold)' => 'AE-vergrendeling (vast)', 'AE Lock (reset on release)' => 'AE-vergr. (herstel na ontspan.)', 'AE Lock Only' => 'AE-vergrendeling', 'AE/AF Lock' => 'AE/AF-vergrendeling', 'AF Lock Only' => 'AF-vergrendeling', 'AF-On' => 'AF-ON', 'Same as FUNC Button' => 'Zelfde als FUNC.-knop', }, }, 'AF-SPrioritySelection' => { Description => 'Selectie AF-S-prioriteit', PrintConv => { 'Focus' => 'Scherpstelling', 'Release' => 'Ontspannen', }, }, 'AFActivation' => { Description => 'AF activering', PrintConv => { 'AF-On Only' => 'Alleen AF-ON', 'Shutter/AF-On' => 'Ontspanknop/AF-ON', }, }, 'AFAreaIllumination' => { Description => 'AF-veld verlichting', PrintConv => { 'Auto' => 'Automatisch', 'Off' => 'Uit', 'On' => 'Aan', }, }, 'AFAreaMode' => { Description => 'AF-veldstand', PrintConv => { 'Auto-area' => 'Automatischveld AF', 'Dynamic Area' => 'Dynamisch veld', 'Single Area' => 'Enkelveld', }, }, 'AFAreaModeSetting' => { Description => 'AF-veldstand', PrintConv => { 'Closest Subject' => 'Dichtstbz. onderw.', 'Dynamic Area' => 'Dynamisch veld', 'Single Area' => 'Enkelveld', }, }, 'AFAssist' => { Description => 'AF-hulpverlichting', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'AFPoint' => { PrintConv => { 'None' => 'Geen', }, }, 'AFPointActivationArea' => { PrintConv => { 'Standard' => 'Standaard', }, }, 'AFPointBrightness' => { PrintConv => { 'Normal' => 'Normaal', }, }, 'AFPointDisplayDuringFocus' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'AFPointIllumination' => { Description => 'Verlichting scherpstelpunt', PrintConv => { 'Auto' => 'Automatisch', 'Off' => 'Uit', 'On' => 'Aan', }, }, 'AFPointMode' => { PrintConv => { 'Auto' => 'Automatisch', }, }, 'AFPointRegistration' => { PrintConv => { 'Automatic' => 'Automatisch', }, }, 'AFPointSelected' => { PrintConv => { 'Auto' => 'Automatisch', }, }, 'AFPointSelected2' => { PrintConv => { 'Auto' => 'Automatisch', }, }, 'AFPointSelection' => { Description => 'Selectie scherpstelpunt', PrintConv => { '11 Points' => '11 punten', '51 Points' => '51 punten (3D-tracking)', }, }, 'AFPointSelectionMethod' => { PrintConv => { 'Normal' => 'Normaal', }, }, 'AFPointsInFocus' => { PrintConv => { 'None' => 'Geen', }, }, 'AFPointsUnknown2' => { PrintConv => { 'Auto' => 'Automatisch', }, }, 'AIServoTrackingSensitivity' => { PrintConv => { 'Standard' => 'Standaard', }, }, 'APEVersion' => 'APE versie', 'ARMIdentifier' => 'ARM herkenningscode', 'ARMVersion' => 'ARM versie', 'ActionAdvised' => { Description => 'Actie advies', PrintConv => { 'Object Kill' => 'Object verwijderen', 'Object Reference' => 'Object referentie', 'Object Replace' => 'Object vervangen', 'Ojbect Append' => 'Object toevoegen', }, }, 'ActiveD-Lighting' => { PrintConv => { 'High' => 'Hoog', 'Low' => 'Laag', 'Normal' => 'Normaal', 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ActiveD-LightingMode' => { PrintConv => { 'High' => 'Hoog', 'Low' => 'Laag', 'Normal' => 'Normaal', 'Off' => 'Uit', }, }, 'AddAspectRatioInfo' => { PrintConv => { 'Off' => 'Uit', }, }, 'AddOriginalDecisionData' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'AdultContentWarning' => { PrintConv => { 'Unknown' => 'Onbekend', }, }, 'AdvancedRaw' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'AlphaByteCount' => 'Aantal alphagegevens in bytes', 'AlphaDataDiscard' => { Description => 'Afgedankte alphagegevens', PrintConv => { 'Flexbits Discarded' => 'Afgedankte flexbits', 'Full Resolution' => 'Volledige resolutie', 'HighPass Frequency Data Discarded' => 'Afgedankte hoogdoorlaat frequentiegegevens', 'Highpass and LowPass Frequency Data Discarded' => 'Afgedankte hoogdoorlaat en laagdoorlaat frequentiegegevens', }, }, 'AlphaOffset' => 'Alphaverplaatsing', 'Anti-Blur' => { PrintConv => { 'Off' => 'Uit', }, }, 'Aperture' => 'Diafragma', 'ApertureValue' => 'Diafragma', 'ApplicationRecordVersion' => 'Gegevensversie', 'Artist' => 'Maker van de afbeelding', 'AssistButtonFunction' => { PrintConv => { 'Normal' => 'Normaal', }, }, 'Audio' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'AudioDuration' => 'Audio duur', 'AudioOutcue' => 'Audio eindaftiteling', 'AudioSamplingRate' => 'Audio bemonsteringssnelheid', 'AudioSamplingResolution' => 'Audio bemonsteringsresolutie', 'AudioType' => { Description => 'Type audio', PrintConv => { 'Mono Actuality' => 'Actualiteit (mono (1 kanaal) audio)', 'Mono Music' => 'Muziek, zelf verstuurd (mono (1 kanaal) audio)', 'Mono Question and Answer Session' => 'Vraag en antwoord sessie (mono (1 kanaal) audio)', 'Mono Raw Sound' => 'Ruwe geluid (mono (1 kanaal) audio)', 'Mono Response to a Question' => 'Beantwoord een vraag (mono (1 kanaal) audio)', 'Mono Scener' => 'Toneel (mono (1 kanaal) audio)', 'Mono Voicer' => 'Stem (mono (1 kanaals) audio)', 'Mono Wrap' => 'Wrap (mono (1 kanaals) audio)', 'Stereo Actuality' => 'Actualiteit (stereo (2 kanalen) audio)', 'Stereo Music' => 'Muziek, zelf verstuurd (stereo (2 kanalen) audio)', 'Stereo Question and Answer Session' => 'Vraag en antwoord sessie (stereo (2 kanalen) audio)', 'Stereo Raw Sound' => 'Ruwe geluid (stereo (2 kanalen) audio)', 'Stereo Response to a Question' => 'Beantwoord een vraag (stereo (2 kanalen) audio)', 'Stereo Scener' => 'Toneel (stereo (2 kanaals) audio)', 'Stereo Voicer' => 'Stem (stereo (2 kanaals) audio)', 'Stereo Wrap' => 'Wrap (stereo (2 kanaals) audio)', 'Text Only' => 'Alleen tekst (geen objectgegevens)', }, }, 'Author' => 'Auteur', 'AuthorsPosition' => 'Positie van de auteur', 'AutoAperture' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'AutoBracketModeM' => { Description => 'Auto bracketing (M-stand)', PrintConv => { 'Flash Only' => 'Alleen flits', 'Flash/Aperture' => 'Flits/diafragma', 'Flash/Speed' => 'Flits/sluitertijd', 'Flash/Speed/Aperture' => 'Flits/sluitertijd/diafragma', }, }, 'AutoBracketOrder' => 'Bracketingvolgorde', 'AutoBracketSet' => { Description => 'Inst. voor auto bracketing', PrintConv => { 'AE & Flash' => 'AE & flits', 'AE Only' => 'Alleen AE', 'Flash Only' => 'Alleen flits', 'WB Bracketing' => 'Witbalans bracketing', }, }, 'AutoBracketing' => { PrintConv => { 'Off' => 'Uit', }, }, 'AutoExposureBracketing' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'AutoFP' => { Description => 'Auto FP', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'AutoFocus' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'AutoISO' => { Description => 'ISO auto', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'AutoISOMax' => 'ISO auto Maximale', 'AutoISOMinShutterSpeed' => 'ISO auto Langste sluitertijd', 'AutoLightingOptimizer' => { PrintConv => { 'Low' => 'Laag', 'Off' => 'Uit', 'Standard' => 'Standaard', }, }, 'AutoLightingOptimizerOn' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'AutoRedEye' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'AutoRotate' => { PrintConv => { 'None' => 'Geen', 'Rotate 180' => '180° (onder/rechts)', 'Rotate 270 CW' => 'Draai 270° met de klok mee', 'Rotate 90 CW' => '90° tegen de klok in (rechts/boven)', 'n/a' => 'Onbekend', }, }, 'BWMode' => { PrintConv => { 'Off' => 'Uit', }, }, 'BackgroundColorIndicator' => 'Achtergrond kleur indicator', 'BackgroundColorValue' => 'Achtergrond kleur waarde', 'BackgroundTiling' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'BannerImageType' => { PrintConv => { 'None' => 'Geen', }, }, 'BatteryLevel' => 'Batterij status', 'BatteryOrder' => { Description => 'Batterijvolgorde', PrintConv => { 'Camera Battery First' => 'Camerabatterij eerst', 'MB-D10 First' => 'MB-D10 batterijen eerst', }, }, 'Beep' => { Description => 'Signaal', PrintConv => { 'High' => 'Hoog', 'Low' => 'Laag', 'Off' => 'Uit', 'On' => 'Aan', }, }, 'BitsPerSample' => 'Aantal Bits per component', 'BlueMatrixColumn' => 'Blauwe matrixkolom', 'BlueTRC' => 'Blauwe toon reproductie curve', 'BlurWarning' => { PrintConv => { 'None' => 'Geen', }, }, 'BracketMode' => { PrintConv => { 'Off' => 'Uit', }, }, 'BracketStep' => { PrintConv => { '1 EV' => '1 stop', '1/3 EV' => '1/3 stop', '2/3 EV' => '2/3 stop', }, }, 'Brightness' => 'Helderheid', 'BrightnessValue' => 'Helderheid', 'BurstMode' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'By-line' => 'Maker', 'By-lineTitle' => 'Beroep van de maker', 'CFAPattern' => 'Kleur filter matrix', 'CFAPattern2' => 'Kleurfiltermatrix 2', 'CFARepeatPatternDim' => 'Kleurfiltermatrix grootte', 'CLModeShootingSpeed' => 'Opnamesnelheid', 'CMMFlags' => 'CMM vlaggen', 'CPUType' => { PrintConv => { 'None' => 'Geen', }, }, 'CalibrationIlluminant1' => { PrintConv => { 'Cloudy' => 'Bewolkt', 'Cool White Fluorescent' => 'Koel wit TL-licht', 'Day White Fluorescent' => 'Daglicht wit TL-licht', 'Daylight' => 'Daglicht', 'Daylight Fluorescent' => 'Daglicht TL-licht', 'Fine Weather' => 'Onbewolkt', 'Flash' => 'Flits', 'Fluorescent' => 'Fluoresceren', 'ISO Studio Tungsten' => 'ISO studio kunstlicht (gloeilamp)', 'Other' => 'Andere lichtbron', 'Shade' => 'Schaduw', 'Standard Light A' => 'Standaard licht A', 'Standard Light B' => 'Standaard licht B', 'Standard Light C' => 'Standaard licht C', 'Tungsten (Incandescent)' => 'Kunstlicht (gloeilamp)', 'Unknown' => 'Onbekend', 'Warm White Fluorescent' => 'Warm wit TL-licht', 'White Fluorescent' => 'Wit TL-licht', }, }, 'CalibrationIlluminant2' => { PrintConv => { 'Cloudy' => 'Bewolkt', 'Cool White Fluorescent' => 'Koel wit TL-licht', 'Day White Fluorescent' => 'Daglicht wit TL-licht', 'Daylight' => 'Daglicht', 'Daylight Fluorescent' => 'Daglicht TL-licht', 'Fine Weather' => 'Onbewolkt', 'Flash' => 'Flits', 'Fluorescent' => 'Fluoresceren', 'ISO Studio Tungsten' => 'ISO studio kunstlicht (gloeilamp)', 'Other' => 'Andere lichtbron', 'Shade' => 'Schaduw', 'Standard Light A' => 'Standaard licht A', 'Standard Light B' => 'Standaard licht B', 'Standard Light C' => 'Standaard licht C', 'Tungsten (Incandescent)' => 'Kunstlicht (gloeilamp)', 'Unknown' => 'Onbekend', 'Warm White Fluorescent' => 'Warm wit TL-licht', 'White Fluorescent' => 'Wit TL-licht', }, }, 'CameraOrientation' => { Description => 'Oriëntatie van de afbeelding', PrintConv => { 'Horizontal (normal)' => '0° (boven/links)', 'Rotate 270 CW' => 'Draai 270° met de klok mee', 'Rotate 90 CW' => '90° tegen de klok in (rechts/boven)', }, }, 'CanonExposureMode' => { PrintConv => { 'Aperture-priority AE' => 'Diafragmaprioriteit', 'Manual' => 'Handmatig', 'Shutter speed priority AE' => 'Sluiterprioriteit', }, }, 'CanonFlashMode' => { PrintConv => { 'Auto' => 'Automatisch', 'Off' => 'Uit', 'On' => 'Aan', }, }, 'Caption-Abstract' => 'Titel/Beschrijving', 'CaptionWriter' => 'Schrijver van het onderschrift', 'CaptureXResolutionUnit' => { PrintConv => { 'um' => 'µm (micrometer)', }, }, 'CaptureYResolutionUnit' => { PrintConv => { 'um' => 'µm (micrometer)', }, }, 'Categories' => 'Categorieën', 'Category' => 'Categorie', 'CellLength' => 'Cel lengte', 'CellWidth' => 'Cel breedte', 'CenterAFArea' => { Description => 'Centrale AF-veld', PrintConv => { 'Normal Zone' => 'Normaal', 'Wide Zone' => 'Breed', }, }, 'CenterWeightedAreaSize' => { Description => 'Grootte meetgebied', PrintConv => { 'Average' => 'Gemiddeld', }, }, 'CharacterSet' => 'Tekenset', 'ChrominanceNR_TIFF_JPEG' => { PrintConv => { 'High' => 'Hoog', 'Low' => 'Laag', 'Off' => 'Uit', }, }, 'ChrominanceNoiseReduction' => { PrintConv => { 'High' => 'Hoog', 'Low' => 'Laag', 'Off' => 'Uit', }, }, 'City' => 'Plaats', 'ClassifyState' => 'Rangschik status', 'CodedCharacterSet' => 'Gecodeerde character set', 'ColorAberrationControl' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ColorAdjustmentMode' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ColorBalanceAdj' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ColorBooster' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ColorEffect' => { PrintConv => { 'Off' => 'Uit', }, }, 'ColorFilter' => { Description => 'Kleurfilter', PrintConv => { 'Off' => 'Uit', }, }, 'ColorMode' => { Description => 'Instellingen', PrintConv => { 'Autumn Leaves' => 'Herfstbladeren', 'B&W' => 'Zwart-wit', 'Clear' => 'Doorzichtig', 'Deep' => 'Diep', 'Evening' => 'Avond', 'Landscape' => 'Landschap', 'Light' => 'Licht', 'Neutral' => 'Neutraal', 'Night View' => 'Nacht', 'Night View/Portrait' => 'Nachtportret', 'Normal' => 'Normaal', 'Off' => 'Uit', 'Portrait' => 'Portret', 'Standard' => 'Standaard', 'Sunset' => 'Zonsondergang', 'Vivid' => 'Levendige kleuren', }, }, 'ColorMoireReduction' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ColorMoireReductionMode' => { PrintConv => { 'High' => 'Hoog', 'Low' => 'Laag', 'Off' => 'Uit', }, }, 'ColorSpace' => { Description => 'Kleur ruimte', PrintConv => { 'ICC Profile' => 'ICC-profiel', 'Uncalibrated' => 'Niet vastgelegd', }, }, 'ColorSpaceData' => 'Gegevenskleurenruimte', 'ColorTable' => 'Kleur tabel', 'ColorTemperature' => 'Kleurtemperatuur', 'ColorTone' => { PrintConv => { 'Normal' => 'Normaal', }, }, 'CommandDials' => { Description => 'Instelschijven', PrintConv => { 'Reversed (Main Aperture, Sub Shutter)' => 'Verwissel hoofd/sec.', 'Standard (Main Shutter, Sub Aperture)' => 'Standaard', }, }, 'CommandDialsApertureSetting' => { Description => 'Functie instelschijven inst. Instellen diafragma', PrintConv => { 'Aperture Ring' => 'Diafragmaring', 'Sub-command Dial' => 'Secundaire instelschijf', }, }, 'CommandDialsChangeMainSub' => { Description => 'Functie instelschijven inst. Verwissel hoofd/secundair', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'CommandDialsMenuAndPlayback' => { Description => 'Functie instelschijven inst. Menu’s en weergave', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'CommandDialsReverseRotation' => { Description => 'Functie instelschijven inst. Rotatie omkeren', PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'CommanderChannel' => 'Commanderstand Kanaal', 'CommanderGroupAManualOutput' => 'Commanderstand Groep A M Corrct', 'CommanderGroupAMode' => { Description => 'Commanderstand Groep A Stand', PrintConv => { 'Manual' => 'Handmatig', 'Off' => 'Uit', 'TTL' => 'DDL', }, }, 'CommanderGroupA_TTL-AAComp' => 'Commanderstand Groep A DDL/AA Corrct', 'CommanderGroupBManualOutput' => 'Commanderstand Groep B M Corrct', 'CommanderGroupBMode' => { Description => 'Commanderstand Groep B Stand', PrintConv => { 'Manual' => 'Handmatig', 'Off' => 'Uit', 'TTL' => 'DDL', }, }, 'CommanderGroupB_TTL-AAComp' => 'Commanderstand Groep B DDL/AA Corrct', 'CommanderInternalFlash' => { Description => 'Commanderstand Ingb. flitsr Stand', PrintConv => { 'Manual' => 'Handmatig', 'Off' => 'Uit', 'TTL' => 'DDL', }, }, 'CommanderInternalManualOutput' => 'Commanderstand Ingb. flitsr M Corrct', 'CommanderInternalTTLComp' => 'Commanderstand Ingb. flitsr DDL Corrct', 'Comment' => 'Kommentaar', 'Compilation' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'ComponentsConfiguration' => 'Betekenis van elke component', 'CompressedBitsPerPixel' => 'Afbeelding compressie modus', 'Compression' => { Description => 'Compressie schema', PrintConv => { 'JPEG' => 'JPEG-compressie', 'JPEG (old-style)' => 'JPEG (oude versie)', 'Kodak DCR Compressed' => 'Kodak DCR gcomprimeerd', 'Kodak KDC Compressed' => 'Kodak KDC gecomprimeerd', 'Next' => 'NeXT 2-Bit codering', 'Nikon NEF Compressed' => 'Nikon NEF gecomprimeerd', 'None' => 'Geen', 'Pentax PEF Compressed' => 'Pentax PEF gecomprimeerd', 'SGILog' => 'SGI 32-Bit Log Luminance gecodeerd', 'SGILog24' => 'SGI 24-Bit Log Luminance gecodeerd', 'Sony ARW Compressed' => 'Sony ARW gecomprimeerd', 'Thunderscan' => 'ThunderScan 4-Bit codering', 'Uncompressed' => 'Niet gecomprimeerd', }, }, 'CompressionType' => { PrintConv => { 'None' => 'Geen', }, }, 'ConnectionSpaceIlluminant' => 'Witpunt van connectiekleurruimte', 'ContentLocationCode' => 'Locatiecode van inhoud', 'ContentLocationName' => 'Locatienaam van inhoud', 'ContinuousDrive' => { PrintConv => { 'Continuous' => 'Continu', }, }, 'Contrast' => { Description => 'Kontrast', PrintConv => { 'High' => 'Hoog', 'Low' => 'Laag', 'Normal' => 'Normaal', }, }, 'ConversionLens' => { PrintConv => { 'Off' => 'Uit', }, }, 'Copyright' => 'Copyright houder', 'CopyrightNotice' => 'Copyright vermelding', 'CopyrightStatus' => { PrintConv => { 'Unknown' => 'Onbekend', }, }, 'Country' => 'Land', 'Country-PrimaryLocationCode' => 'ISO landcode', 'Country-PrimaryLocationName' => 'Land', 'CreateDate' => 'Datum van de originele data generatie', 'CreationDate' => 'Opname datum', 'Creator' => 'Maker', 'CreatorAddress' => 'Maker - Adres', 'CreatorCity' => 'Maker - Plaats', 'CreatorCountry' => 'Maker - Land', 'CreatorPostalCode' => 'Maker - Postcode', 'CreatorRegion' => 'Maker - Provincie', 'CreatorWorkEmail' => 'Maker - E-mail', 'CreatorWorkTelephone' => 'Maker - Telefoonnummer', 'CreatorWorkURL' => 'Maker - Website(s)', 'Credit' => 'Leverancier', 'CropActive' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'Curves' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'CustomRendered' => { Description => 'Gebruiker gedefineerde beeldverwerking', PrintConv => { 'Custom' => 'Gebruiker gedefineerd proces', 'Normal' => 'Standaard proces', }, }, 'D-LightingHQ' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'D-LightingHQSelected' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'D-LightingHS' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'DataImprint' => { PrintConv => { 'None' => 'Geen', }, }, 'DateCreated' => 'Opnamedatum', 'DateSent' => 'Datum van zenden', 'DateStampMode' => { PrintConv => { 'Off' => 'Uit', }, }, 'DateTime' => 'Datum bestand wijziging', 'DateTimeOriginal' => 'Datum van de originele data generatie', 'DaylightSavings' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'Description' => 'Beschrijving', 'Destination' => 'Bestemming', 'DestinationDST' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'DeviceAttributes' => 'Apparaateigenschappen', 'DeviceManufacturer' => 'Apparaatproducent', 'DeviceMfgDesc' => 'Apparaatproducent kenmerk', 'DeviceModel' => 'Apparaatmodel', 'DeviceModelDesc' => 'Apparaatmodel kenmerk', 'DeviceSettingDescription' => 'Toestelinstellingen', 'DialDirectionTvAv' => { PrintConv => { 'Normal' => 'Normaal', }, }, 'DigitalCreationDate' => 'Digitale opnamedatum', 'DigitalCreationTime' => 'Digitaal opnametijdstip', 'DigitalZoom' => { Description => 'Digitaal zoomen', PrintConv => { 'None' => 'Geen', 'Off' => 'Uit', }, }, 'DigitalZoomOn' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'DigitalZoomRatio' => 'Digitale zoom factor', 'Directory' => 'Plaats van het bestand', 'DisplaySize' => { PrintConv => { 'Normal' => 'Normaal', }, }, 'DisplayXResolutionUnit' => { PrintConv => { 'um' => 'µm (micrometer)', }, }, 'DisplayYResolutionUnit' => { PrintConv => { 'um' => 'µm (micrometer)', }, }, 'DistortionCorrection' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'DistortionCorrection2' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'DjVuVersion' => 'DjVu versie', 'DocumentHistory' => 'Documentgeschiedenis', 'DocumentName' => 'Document naam', 'DocumentNotes' => 'Documentopmerkingen', 'DriveMode' => { Description => 'Ontspannermodus', PrintConv => { 'Continuous' => 'Continu', 'Continuous Shooting' => 'Continu', 'Off' => 'Uit', 'Self-timer' => 'Zelfontspanner', 'Self-timer Operation' => 'Zelfontspanner', 'Single' => 'Enkel beeld', 'Single Frame' => 'Enkel beeld', 'Single Shot' => 'Enkel beeld', 'Single-frame Shooting' => 'Enkel beeld', }, }, 'DynamicAFArea' => { Description => 'Dynamisch AF-veld', PrintConv => { '21 Points' => '21 punten', '51 Points' => '51 punten', '51 Points (3D-tracking)' => '51 punten (3D-tracking)', '9 Points' => '9 punten', }, }, 'DynamicRange' => { PrintConv => { 'Standard' => 'Standaard', }, }, 'DynamicRangeExpansion' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'DynamicRangeOptimizer' => { Description => 'Dyn.-bereikoptim', PrintConv => { 'Advanced Auto' => 'Geavancrd Auto', 'Advanced Lv1' => 'Geavanceerd-1', 'Advanced Lv2' => 'Geavanceerd-2', 'Advanced Lv3' => 'Geavanceerd-3', 'Advanced Lv4' => 'Geavanceerd-4', 'Advanced Lv5' => 'Geavanceerd-5', 'Auto' => 'Automatisch', 'Off' => 'Uit', 'Standard' => 'Standaard', }, }, 'ETTLII' => { PrintConv => { 'Average' => 'Gemiddeld', }, }, 'EVStepSize' => { Description => 'LW stapgrootte', PrintConv => { '1/2 EV' => '1/2 stop', '1/3 EV' => '1/3 stop', }, }, 'EasyExposureCompensation' => { Description => 'Eenv. belichtingscorrectie', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', 'On (auto reset)' => 'Aan (autoherstel)', }, }, 'EasyMode' => { PrintConv => { 'Landscape' => 'Landschap', 'Manual' => 'Handmatig', 'Night' => 'Nachtscene', 'Portrait' => 'Portret', }, }, 'EdgeNoiseReduction' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'EditStatus' => 'Bewerkingsstatus', 'EditorialUpdate' => { Description => 'Redactionele bewerking', PrintConv => { 'Additional language' => 'Extra taal', }, }, 'Emphasis' => { PrintConv => { 'None' => 'Geen', }, }, 'EnhanceDarkTones' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'Enhancement' => { PrintConv => { 'Off' => 'Uit', }, }, 'EnvelopeNumber' => 'Basisdatanummer', 'EnvelopePriority' => { Description => 'Prioriteit', PrintConv => { '0 (reserved)' => '0 (Gereserveerd voor toekomstig gebruik)', '1 (most urgent)' => '1 (Meest belangrijk)', '5 (normal urgency)' => '5 (Normaal)', '8 (least urgent)' => '8 (Minst belangrijk)', '9 (user-defined priority)' => '9 (Door gebruiker aangegeven prioriteit)', }, }, 'EnvelopeRecordVersion' => 'Recordversie', 'ExifCameraInfo' => 'Exif Camera-informatie', 'ExifImageHeight' => 'Afbeelding hoogte', 'ExifImageWidth' => 'Afbeelding breedte', 'ExifOffset' => 'Exif IFD-wijzer', 'ExifToolVersion' => 'ExifTool versie', 'ExifVersion' => 'Exif versie', 'ExpandFilm' => 'Breid film uit', 'ExpandFilterLens' => 'Breid filterlens uit', 'ExpandFlashLamp' => 'Breid flitser uit', 'ExpandLens' => 'Breid objectief', 'ExpandScanner' => 'Breid scanner uit', 'ExpandSoftware' => 'Breid software uit', 'ExpirationDate' => 'Verloopdatum', 'ExpirationTime' => 'Verlooptijdstip', 'ExposureCompStepSize' => { Description => 'Stapgrootte belichtingscorr.', PrintConv => { '1 EV' => '1 stop', '1/2 EV' => '1/2 stop', '1/3 EV' => '1/3 stop', }, }, 'ExposureCompensation' => 'Belichtingscorrectie', 'ExposureControlStepSize' => { Description => 'Stapgrootte inst. belichting', PrintConv => { '1 EV' => '1 stop', '1/2 EV' => '1/2 stop', '1/3 EV' => '1/3 stop', }, }, 'ExposureDelayMode' => { Description => 'Spiegelvoorontspanning', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ExposureIndex' => 'Belichtingsindex', 'ExposureLevelIncrements' => { Description => 'Stapgrootte inst. belichting', PrintConv => { '1/2 Stop' => '1/2 stop', '1/3 Stop' => '1/3 stop', }, }, 'ExposureMode' => { Description => 'Belichting modus', PrintConv => { 'Aperture Priority' => 'Diafragmaprioriteit', 'Aperture-priority AE' => 'Diafragmaprioriteit', 'Auto' => 'Automatische belichting', 'Auto bracket' => 'Belichting serie', 'Landscape' => 'Landschap', 'Manual' => 'Handmatige belichting', 'Portrait' => 'Portret', 'Shutter Priority' => 'Sluiterprioriteit', 'Shutter speed priority AE' => 'Sluiterprioriteit', }, }, 'ExposureModeInManual' => { PrintConv => { 'Center-weighted average' => 'Centrum gemiddelde', 'Partial metering' => 'Gedeelte', }, }, 'ExposureProgram' => { Description => 'Belichtingsprogramma', PrintConv => { 'Action (High speed)' => 'Actie programma (georiënteerd op snelle sluitertijden)', 'Aperture Priority' => 'Diafragmaprioriteit', 'Aperture-priority AE' => 'Diafragmaprioriteit', 'Creative (Slow speed)' => 'Creatief programma (georiënteerd op scherptediepte)', 'Landscape' => 'Landschap modus', 'Manual' => 'Handmatig', 'Not Defined' => 'Niet gedefinieerd', 'Portrait' => 'Portret modus', 'Program AE' => 'Normaal programma', 'Shutter Priority' => 'Sluiterprioriteit', 'Shutter speed priority AE' => 'Sluiterprioriteit', }, }, 'ExposureTime' => 'Belichtingstijd', 'ExposureTime2' => 'Belichtingstijd 2', 'ExtendedWBDetect' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ExternalFlash' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ExternalFlashBounce' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'ExternalFlashMode' => { PrintConv => { 'Off' => 'Uit', }, }, 'ExtraSamples' => 'Extra componenten', 'FNumber' => 'F waarde', 'FaceOrientation' => { PrintConv => { 'Horizontal (normal)' => '0° (boven/links)', 'Rotate 180' => '180° (onder/rechts)', 'Rotate 270 CW' => 'Draai 270° met de klok mee', 'Rotate 90 CW' => '90° tegen de klok in (rechts/boven)', }, }, 'FastSeek' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'FaxProfile' => { PrintConv => { 'Unknown' => 'Onbekend', }, }, 'FaxRecvParams' => 'Fax ontvangst parameters', 'FaxRecvTime' => 'Fax ontvangst tijd', 'FaxSubAddress' => 'Fax sub adres', 'FileFormat' => 'Fileformaat', 'FileModifyDate' => 'Datum actualisering', 'FileName' => 'Bestandnaam', 'FileNumberMemory' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'FileNumberSequence' => { Description => 'Opeenvolgende nummering', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'FileSize' => 'Bestandgrootte', 'FileSource' => { Description => 'Bestand bron', PrintConv => { 'Digital Camera' => 'Digitale camera', 'Film Scanner' => 'Film scanner', 'Reflection Print Scanner' => 'Scanner', }, }, 'FileType' => 'Bestandtype', 'FileVersion' => 'Fileformaat versie', 'Filename' => 'Bestandnaam', 'FillOrder' => { Description => 'Vul volgorde', PrintConv => { 'Normal' => 'Normaal', }, }, 'Filter' => { PrintConv => { 'Off' => 'Uit', }, }, 'FilterEffect' => { PrintConv => { 'None' => 'Geen', 'Off' => 'Uit', }, }, 'FilterEffectMonochrome' => { PrintConv => { 'None' => 'Geen', }, }, 'FinderDisplayDuringExposure' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'FineTuneOptCenterWeighted' => 'Fijnafst. voor opt. belichting Centrumgericht', 'FineTuneOptMatrixMetering' => 'Fijnafst. voor opt. belichting Matrixmeting', 'FineTuneOptSpotMetering' => 'Fijnafst. voor opt. belichting Spotmeting', 'FixtureIdentifier' => 'Kenmerk', 'Flash' => { Description => 'Flits', PrintConv => { 'Auto, Did not fire' => 'Flits werd niet ontstoken, automodus', 'Auto, Did not fire, Red-eye reduction' => 'Flits werd niet ontstoken, rode ogen reductie', 'Auto, Fired' => 'Flits werd ontstoken, automodus', 'Auto, Fired, Red-eye reduction' => 'Flits werd ontstoken, automodus, rode ogen reductie', 'Auto, Fired, Red-eye reduction, Return detected' => 'Flits werd ontstoken, automodus, gereflecteerd flitslicht, rode ogen reductie', 'Auto, Fired, Red-eye reduction, Return not detected' => 'Flits werd ontstoken, automodus, geen gereflecteerd flitslicht, rode ogen reductie', 'Auto, Fired, Return detected' => 'Flits werd ontstoken, automodus, gereflecteerd flitslicht', 'Auto, Fired, Return not detected' => 'Flits werd ontstoken, automodus, geen gereflecteerd flitslicht', 'Did not fire' => 'Geen flits', 'Fired' => 'Flits afgevuurd', 'Fired, Red-eye reduction' => 'Flits werd ontstoken, Rode ogen reductie', 'Fired, Red-eye reduction, Return detected' => 'Flits werd ontstoken, rode ogen reductie, gereflecteerd flitslicht', 'Fired, Red-eye reduction, Return not detected' => 'Flits werd ontstoken, rode oen reductie, geen gereflecteerd flitslicht', 'Fired, Return detected' => 'Gereflecteerd flitslicht gedetecteerd', 'Fired, Return not detected' => 'Geen gereflecteerd flitslicht gedetecteerd', 'No Flash' => 'Geen flits', 'No flash function' => 'Geen flits functie', 'Off' => 'Uit', 'Off, Did not fire' => 'Flits werd niet ontstoken, flits onderdruk modus', 'Off, Did not fire, Return not detected' => 'Gedeactiveerd, flits werd niet ontstoken, geen gereflecteerd flitslicht', 'Off, No flash function' => 'Gedeactiveerd, geen flits functie', 'Off, Red-eye reduction' => 'Gedeactiveerd, rode ogen reductie', 'On' => 'Aan', 'On, Did not fire' => 'Aan, flits werd niet ontstoken', 'On, Fired' => 'Flits werd ontstoken, flits afdwing modus', 'On, Red-eye reduction' => 'Flits werd ontstoken, flits afdwing modus, rode ogen reductie', 'On, Red-eye reduction, Return detected' => 'Flits werd ontstoken, flits afdwing modus, rode ogen reductie, gereflecteerd flitslicht', 'On, Red-eye reduction, Return not detected' => 'Flits werd ontstoken, flits afdwing modus, rode ogen reductie, geen gereflecteerd flitslicht', 'On, Return detected' => 'Flits werd ontstoken, flits afdwing modus, gereflecteerd flitslicht gedetecteerd', 'On, Return not detected' => 'Flits werd ontstoken, flits afdwing modus, geen gereflecteerd flitslicht gedetecteerd', }, }, 'FlashCommanderMode' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'FlashCompensation' => 'Flitscorrectie', 'FlashControlMode' => { PrintConv => { 'Manual' => 'Handmatig', 'Off' => 'Uit', 'Repeating Flash' => 'Stroboscopisch flitsen', }, }, 'FlashDevice' => { PrintConv => { 'None' => 'Geen', }, }, 'FlashEnergy' => 'Flits energie', 'FlashExposureComp' => 'Flitscompensatie', 'FlashExposureLock' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'FlashFired' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'FlashGroupAControlMode' => { PrintConv => { 'Manual' => 'Handmatig', 'Off' => 'Uit', 'Repeating Flash' => 'Stroboscopisch flitsen', }, }, 'FlashGroupBControlMode' => { PrintConv => { 'Manual' => 'Handmatig', 'Off' => 'Uit', 'Repeating Flash' => 'Stroboscopisch flitsen', }, }, 'FlashGroupCControlMode' => { PrintConv => { 'Manual' => 'Handmatig', 'Off' => 'Uit', 'Repeating Flash' => 'Stroboscopisch flitsen', }, }, 'FlashIntensity' => { PrintConv => { 'High' => 'Hoog', 'Normal' => 'Normaal', }, }, 'FlashLevel' => 'Flitscorrectie', 'FlashMode' => { PrintConv => { 'Auto' => 'Automatisch', 'Normal' => 'Normaal', 'Off' => 'Uit', 'On' => 'Aan', 'Unknown' => 'Onbekend', }, }, 'FlashModel' => { PrintConv => { 'None' => 'Geen', }, }, 'FlashOptions' => { PrintConv => { 'Auto' => 'Automatisch', 'Normal' => 'Normaal', }, }, 'FlashOptions2' => { PrintConv => { 'Auto' => 'Automatisch', 'Normal' => 'Normaal', }, }, 'FlashShutterSpeed' => 'Langste sluitertijd bij flits', 'FlashStatus' => { PrintConv => { 'Off' => 'Uit', }, }, 'FlashSyncSpeed' => 'Flitssynchronisatie snelheid', 'FlashSyncSpeedAv' => { PrintConv => { 'Auto' => 'Automatisch', }, }, 'FlashType' => { PrintConv => { 'None' => 'Geen', }, }, 'FlashWarning' => { Description => 'Flitswaarschuwing', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'FlashpixVersion' => 'Ondersteunde Flashpix versie', 'FlickerReduce' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'FlipHorizontal' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'FocalLength' => 'Brandpuntafstand', 'FocalLength35efl' => 'Brandpuntafstand', 'FocalLengthIn35mmFormat' => 'Brandpuntafstand in 35 mm kleinbeeld formaat', 'FocalPlaneResolutionUnit' => { Description => 'Sensor resolutie eenheid', PrintConv => { 'None' => 'Geen', 'inches' => 'inch', 'um' => 'µm (micrometer)', }, }, 'FocalPlaneXResolution' => 'Horizontale sensor resolutie', 'FocalPlaneYResolution' => 'Verticale sensor resolutie', 'Focus' => { Description => 'Scherpstelling', PrintConv => { 'Manual' => 'Handmatig', }, }, 'FocusArea' => 'Scherpstelveld', 'FocusAreaSelection' => { Description => 'Doorloop scherpstelpunt', PrintConv => { 'No Wrap' => 'Geen doorloop', 'Wrap' => 'Doorloop', }, }, 'FocusContinuous' => { PrintConv => { 'Continuous' => 'Continu', 'Manual' => 'Handmatig', }, }, 'FocusMode' => { Description => 'Focus modus', PrintConv => { 'Auto' => 'Automatisch', 'Continuous' => 'Continu', 'Manual' => 'Handmatig', 'Normal' => 'Normaal', }, }, 'FocusMode2' => { PrintConv => { 'Manual' => 'Handmatig', }, }, 'FocusModeSetting' => { Description => 'Scherpstelstand', PrintConv => { 'AF-A' => 'Automatische AF', 'AF-C' => 'Continue AF', 'AF-S' => 'Enkelvoudige AF', 'Manual' => 'Handmatig', }, }, 'FocusPointWrap' => { Description => 'Doorloop scherpstelpunt', PrintConv => { 'No Wrap' => 'Geen doorloop', 'Wrap' => 'Doorloop', }, }, 'FocusRange' => { PrintConv => { 'Auto' => 'Automatisch', 'Manual' => 'Handmatig', 'Normal' => 'Normaal', }, }, 'FocusTrackingLockOn' => { Description => 'Focus Tracking met Lock-On', PrintConv => { 'Long' => 'Lang', 'Normal' => 'Normaal', 'Off' => 'Uit', 'Short' => 'Kort', }, }, 'FrameRate' => 'Beeldwisselsnelheid', 'FrameSize' => 'Beeldformaat', 'FreeByteCounts' => 'Aantal bytes van het lege databereik', 'FreeOffsets' => 'Vrije data posities', 'FujiFlashMode' => { PrintConv => { 'Auto' => 'Automatisch', }, }, 'FunctionButton' => { Description => 'FUNC. knop', PrintConv => { 'AF-area Mode' => 'AF-veldstand', 'Center AF Area' => 'Centrale AF-veld', 'Center-weighted' => 'Centrumgericht', 'FV Lock' => 'FV-vergrendeling', 'Flash Off' => 'Flitser uit', 'Framing Grid' => 'Rasterweergave', 'ISO Display' => 'ISO-weergave', 'Matrix Metering' => 'Matrixmeting', 'Spot Metering' => 'Spotmeting', }, }, 'GIFVersion' => 'GIF versie', 'GPSAltitude' => 'Hoogte', 'GPSAltitudeRef' => { Description => 'Hoogte referentie', PrintConv => { 'Above Sea Level' => 'Zee spiegel', 'Below Sea Level' => 'Zee spiegel referentie (negatieve waarde)', }, }, 'GPSAreaInformation' => 'Naam van het GPS gebied', 'GPSDOP' => 'Meet nauwkeurigheid', 'GPSDateStamp' => 'GPS datum', 'GPSDateTime' => 'GPS tijd (atoomklok)', 'GPSDestBearing' => 'Motiefrichting', 'GPSDestBearingRef' => { Description => 'Referentie voor de motiefrichting', PrintConv => { 'Magnetic North' => 'Magnetische uitrichting', 'True North' => 'Geografische uitrichting', }, }, 'GPSDestDistance' => 'Afstand tot bestemming', 'GPSDestDistanceRef' => { Description => 'Referentie voor de afstand tot de bestemming', PrintConv => { 'Miles' => 'Mijlen', 'Nautical Miles' => 'Knopen', }, }, 'GPSDestLatitude' => 'Breedte van het doel', 'GPSDestLatitudeRef' => { Description => 'Referentie voor de breedte van het doel', PrintConv => { 'North' => 'Noordelijke breedte', 'South' => 'Zuidelijke breedte', }, }, 'GPSDestLongitude' => 'Lengtegraad van het doel', 'GPSDestLongitudeRef' => { Description => 'Referentie voor de lengte van het doel', PrintConv => { 'East' => 'Oostelijke lengte', 'West' => 'Westlijke lengte', }, }, 'GPSDifferential' => { Description => 'GPS differentiaal correctie', PrintConv => { 'Differential Corrected' => 'Differentiaal correctie toegepast', 'No Correction' => 'Meting zonder differentiaal correctie', }, }, 'GPSImgDirection' => 'Richting van de afbeelding', 'GPSImgDirectionRef' => { Description => 'Referentie voor de uitrichting van de afbeelding', PrintConv => { 'Magnetic North' => 'Magnetische uitrichting', 'True North' => 'Geografische uitrichting', }, }, 'GPSInfo' => 'GPS Info IFD-wijzer', 'GPSLatitude' => 'Breedte graad', 'GPSLatitudeRef' => { Description => 'Noord. of zuid. breedte', PrintConv => { 'North' => 'Noordelijke breedte', 'South' => 'Zuidlijke breedte', }, }, 'GPSLongitude' => 'Geografische lengte', 'GPSLongitudeRef' => { Description => 'Oost. of west. lengte', PrintConv => { 'East' => 'Oostlijke lengte', 'West' => 'Westlijke lengte', }, }, 'GPSMapDatum' => 'Geodatische datum', 'GPSMeasureMode' => { Description => 'GPS meet methode', PrintConv => { '2-D' => '2 dimensionale meting', '2-Dimensional' => '2 dimensionale meting', '2-Dimensional Measurement' => '2 dimensionale meting', '3-D' => '3 dimensionale meting', '3-Dimensional' => '3 dimensionale meting', '3-Dimensional Measurement' => '3 dimensionale meting', }, }, 'GPSProcessingMethod' => 'Naam van de GPS verwerk methode', 'GPSSatellites' => 'Voor de meting gebruikte satellieten', 'GPSSpeed' => 'Snelheid van de GPS ontvanger', 'GPSSpeedRef' => { Description => 'Snelheids eenheid', PrintConv => { 'km/h' => 'Kilometer per uur', 'knots' => 'Knopen', 'mph' => 'Mijl per uur', }, }, 'GPSStatus' => { Description => 'GPS ontvanger status', PrintConv => { 'Measurement Active' => 'Meting loopt', 'Measurement Void' => 'Interoperabiliteit voor metingen', }, }, 'GPSTimeStamp' => 'GPS tijd (atoomklok)', 'GPSTrack' => 'Bewegingsrichting', 'GPSTrackRef' => { Description => 'Referentie voor de bewegingsrichting', PrintConv => { 'Magnetic North' => 'Magnetische uitrichting', 'True North' => 'Geographische uitrichting', }, }, 'GPSVersionID' => 'GPS tag versie', 'GainControl' => { Description => 'Belichtingsversterking', PrintConv => { 'High gain down' => 'Hoge helderheidsverminderring', 'High gain up' => 'Hoge helderheidsvesterking', 'Low gain down' => 'Kleine helderheidsverminderring', 'Low gain up' => 'Kleine helderheidsvesterking', 'None' => 'Geen', }, }, 'Gapless' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'Gradation' => 'Levendig', 'GrayResponseUnit' => { PrintConv => { '0.0001' => 'Nummer stelt een 1000ste van een eenheid voor', '0.001' => 'Nummer stelt een 100ste van een eenheid voor', '0.1' => 'Nummer stelt een 10de van een eenheid voor', '1e-05' => 'Nummer stelt een 10000ste van een eenheid voor', '1e-06' => 'Nummer stelt een 100000ste van een eenheid voor', }, }, 'GrayTRC' => 'Grijze toon reproductie curve', 'GreenMatrixColumn' => 'Groene matrixkolom', 'GreenTRC' => 'Groene toon reproductie curve', 'GridDisplay' => { Description => 'Rasterweergave in zoeker', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'HDR' => { Description => 'Auto HDR', PrintConv => { 'Off' => 'Uit', }, }, 'Headline' => 'Opschrift', 'HeightResolution' => 'Beeldresolutie verticaal', 'HighISONoiseReduction' => { Description => 'NR bij hoge-ISO', PrintConv => { 'Auto' => 'Automatisch', 'High' => 'Hi', 'Low' => 'Laag', 'Normal' => 'Normaal', 'Off' => 'Uit', 'On' => 'Aan', 'Standard' => 'Standaard', }, }, 'HighlightTonePriority' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'HometownDST' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'Hue' => 'Kleurtoon', 'ICCProfile' => 'ICC Profiel', 'IPTC-NAA' => 'IPTC-NAA metadata', 'ISO' => 'ISO gevoeligheid', 'ISOAuto' => 'ISO auto', 'ISODisplay' => 'ISO-weergave', 'ISOExpansion' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ISOExpansion2' => { PrintConv => { 'Off' => 'Uit', }, }, 'ISOSetting' => { PrintConv => { 'Auto' => 'Automatisch', 'Manual' => 'Handmatig', }, }, 'ISOSpeedExpansion' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'ISOSpeedIncrements' => { Description => 'ISO-stapgrootte', PrintConv => { '1 Stop' => '1 stop', '1/3 Stop' => '1/3 stop', }, }, 'ISOStepSize' => { Description => 'ISO-stapgrootte', PrintConv => { '1 EV' => '1 stop', '1/2 EV' => '1/2 stop', '1/3 EV' => '1/3 stop', }, }, 'Illumination' => { Description => 'Verlichting', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ImageAuthentication' => { PrintConv => { 'Off' => 'Uit', }, }, 'ImageByteCount' => 'Aantal beeldgegevens in bytes', 'ImageColorIndicator' => 'Afbeelding kleur indicator', 'ImageColorValue' => 'Afbeelding kleur waarde', 'ImageDataDiscard' => { Description => 'Afgedankte beeldgegevens', PrintConv => { 'Flexbits Discarded' => 'Afgedankte flexbits', 'Full Resolution' => 'Volledige resolutie', 'HighPass Frequency Data Discarded' => 'Afgedankte hoogdoorlaat frequentiegegevens', 'Highpass and LowPass Frequency Data Discarded' => 'Afgedankte hoogdoorlaat en laagdoorlaat frequentiegegevens', }, }, 'ImageDescription' => 'Afbeelding beschrijving', 'ImageDustOff' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ImageHeight' => 'Afbeeldingshoogte', 'ImageHistory' => 'Afbeelding geschiedenis', 'ImageNumber' => 'Afbeelding nummer', 'ImageOffset' => 'Beeldverplaatsing', 'ImageOrientation' => { Description => 'Foto oriëntatie', PrintConv => { 'Landscape' => 'Landschap', 'Portrait' => 'Portret', 'Square' => 'Vierkant', }, }, 'ImageQuality' => { Description => 'Bldkwaliteit', PrintConv => { 'High' => 'Hoog', 'Normal' => 'Normaal', }, }, 'ImageQuality2' => 'Bldkwaliteit 2', 'ImageReview' => { Description => 'Beeld terugspelen', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ImageReviewTime' => 'Timers uit Beeld terugspelen', 'ImageRotated' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'ImageSize' => 'Beeldformaat', 'ImageStabilization' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ImageTone' => { PrintConv => { 'Landscape' => 'Landschap', 'Portrait' => 'Portret', }, }, 'ImageType' => 'Beeldtype', 'ImageUniqueID' => 'Uniek afbeeldings ID', 'ImageWidth' => 'Afbeeldingsbreedte', 'InitialZoomSetting' => { Description => 'Aanvankelijke zoominstelling', PrintConv => { 'High Magnification' => 'Hoge zoom', 'Low Magnification' => 'Lage zoom', 'Medium Magnification' => 'Gemiddelde zoom', }, }, 'Instructions' => 'Instructies', 'IntellectualGenre' => 'Genre', 'IntensityStereo' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'InternalFlash' => { Description => 'Flitssturing ingeb. flitser', PrintConv => { 'Commander Mode' => 'Commanderstand', 'Fired' => 'Flits afgevuurd', 'Manual' => 'Handmatig', 'No' => 'Geen flits', 'Off' => 'Uit', 'On' => 'Aan', 'Repeating Flash' => 'Stroboscopisch flitsen', 'TTL' => 'DDL', }, }, 'InternalFlashMode' => { PrintConv => { 'On' => 'Aan', }, }, 'InteropIndex' => { Description => 'Interoperabiliteits Identificatie', PrintConv => { 'R03 - DCF option file (Adobe RGB)' => 'R03: DCF Optie formaat (Adobe RGB)', 'R98 - DCF basic file (sRGB)' => 'R98: DCF Basis formaat (sRGB)', 'THM - DCF thumbnail file' => 'THM: DCF Miniatuur formaat', }, }, 'InteropOffset' => 'Interoperabiliteit-tag', 'InteropVersion' => 'Interoperabiliteits versie', 'JFIFVersion' => 'JFIF versie', 'JPEGQuality' => { Description => 'Beeldkwaliteit', PrintConv => { 'Extra Fine' => 'Extra fijn', 'Fine' => 'Fijn', 'Standard' => 'Normaal', }, }, 'JobID' => 'ID van baan', 'Keyword' => 'Trefwoorden', 'Keywords' => 'Trefwoord', 'LCDIllumination' => { Description => 'LCD-verlichting', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'LCDIlluminationDuringBulb' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'LCHEditor' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'LanguageIdentifier' => 'Taalherkenning', 'Lens' => 'Objectief', 'LensInfo' => 'Lensgegevens', 'LicenseType' => { PrintConv => { 'Unknown' => 'Onbekend', }, }, 'LightSource' => { Description => 'Lichtbron', PrintConv => { 'Cloudy' => 'Bewolkt', 'Cool White Fluorescent' => 'Koel wit TL-licht', 'Day White Fluorescent' => 'Daglicht wit TL-licht', 'Daylight' => 'Daglicht', 'Daylight Fluorescent' => 'Daglicht TL-licht', 'Fine Weather' => 'Onbewolkt', 'Flash' => 'Flits', 'Fluorescent' => 'Fluoresceren', 'ISO Studio Tungsten' => 'ISO studio kunstlicht (gloeilamp)', 'Other' => 'Andere lichtbron', 'Shade' => 'Schaduw', 'Standard Light A' => 'Standaard licht A', 'Standard Light B' => 'Standaard licht B', 'Standard Light C' => 'Standaard licht C', 'Tungsten (Incandescent)' => 'Kunstlicht (gloeilamp)', 'Unknown' => 'Onbekend', 'Warm White Fluorescent' => 'Warm wit TL-licht', 'White Fluorescent' => 'Wit TL-licht', }, }, 'LightSourceSpecial' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'Lightness' => 'Helderheid', 'Lit' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'LiveViewShooting' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'Location' => 'Lokatie', 'LongExposureNoiseReduction' => { Description => 'NR lang-belicht', PrintConv => { 'Auto' => 'Automatisch', 'Off' => 'Uit', 'On' => 'Aan', }, }, 'LoopStyle' => { PrintConv => { 'Normal' => 'Normaal', }, }, 'LuminanceNoiseReduction' => { PrintConv => { 'High' => 'Hoog', 'Low' => 'Laag', 'Off' => 'Uit', }, }, 'MB-D10Batteries' => 'MB-D10 batterijen', 'MB-D10BatteryType' => 'MB-D10 batterijen', 'MB-D80Batteries' => 'MB-D80 batterijen', 'MIEVersion' => 'MIE versie', 'MSStereo' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'Macro' => { PrintConv => { 'Manual' => 'Handmatig', 'Normal' => 'Normaal', 'Off' => 'Uit', 'On' => 'Aan', }, }, 'MacroMode' => { PrintConv => { 'Normal' => 'Normaal', 'Off' => 'Uit', 'On' => 'Aan', }, }, 'MainDialExposureComp' => { Description => 'Main Dial Belichtingscorrectie', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'Make' => 'Fabrikant', 'MakeAndModel' => 'Producent en model', 'MakerNote' => 'Fabrikant informatie', 'MakerNotes' => 'Wenken van de fabrikant', 'ManualFlashOutput' => { Description => 'Ingebouwde flitser Handmatig Sterkte', PrintConv => { 'Low' => 'Laag', }, }, 'MasterDocumentID' => 'ID van hoofddocument', 'MaxAperture' => 'Maximale lensopening', 'MaxApertureValue' => 'Grootste diafragma', 'MaxContinuousRelease' => 'Max. aant. continuopnamen', 'MaxSampleValue' => 'Max sample waarde', 'MediaBlackPoint' => 'Media zwartpunt', 'MediaType' => { PrintConv => { 'Normal' => 'Normaal', }, }, 'MediaWhitePoint' => 'Media Witpunt', 'Metering' => { Description => 'Lichtmeting', PrintConv => { 'Center-weighted' => 'Centrumgericht', 'Matrix' => 'Matrixmeting', }, }, 'MeteringMode' => { Description => 'Belichting meet methode', PrintConv => { 'Average' => 'Gemiddeld', 'Center-weighted average' => 'Centrum gemiddelde', 'Multi-segment' => 'Multi segment', 'Multi-spot' => 'MultiSpot', 'Other' => 'Andere', 'Partial' => 'Gedeelte', 'Unknown' => 'Onbekend', }, }, 'MeteringMode2' => { PrintConv => { 'Multi-segment' => 'Multi segment', }, }, 'MeteringMode3' => { PrintConv => { 'Multi-segment' => 'Multi segment', }, }, 'MeteringTime' => { Description => 'Timers uit Belichtingsmeters', PrintConv => { 'No Limit' => 'Altijd aan', }, }, 'MinSampleValue' => 'Min sample waarde', 'MinoltaQuality' => { PrintConv => { 'Normal' => 'Normaal', 'Standard' => 'Standaard', }, }, 'Model' => 'Camera model', 'Model2' => 'Camera model (2)', 'ModelingFlash' => { Description => 'Instellicht', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ModifiedPictureStyle' => { PrintConv => { 'Landscape' => 'Landschap', 'None' => 'Geen', 'Portrait' => 'Portret', 'Standard' => 'Standaard', }, }, 'ModifiedSaturation' => { PrintConv => { 'Off' => 'Uit', }, }, 'ModifiedSharpnessFreq' => { PrintConv => { 'High' => 'Hoog', 'Low' => 'Laag', 'Standard' => 'Standaard', }, }, 'ModifiedToneCurve' => { PrintConv => { 'Manual' => 'Handmatig', 'Standard' => 'Standaard', }, }, 'ModifiedWhiteBalance' => { PrintConv => { 'Auto' => 'Automatisch', 'Cloudy' => 'Bewolkt', 'Daylight' => 'Daglicht', 'Daylight Fluorescent' => 'Daglicht TL-licht', 'Flash' => 'Flits', 'Fluorescent' => 'Fluoresceren', 'Shade' => 'Schaduw', 'Tungsten' => 'Kunstlicht (gloeilamp)', }, }, 'ModifyDate' => 'Datum bestand wijziging', 'MoireFilter' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'MonitorOffTime' => 'Monitor uit', 'MonochromeFilterEffect' => { PrintConv => { 'None' => 'Geen', }, }, 'MonochromeLinear' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'MonochromeToningEffect' => { PrintConv => { 'None' => 'Geen', }, }, 'MultiExposureAutoGain' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'MultiExposureMode' => { PrintConv => { 'Off' => 'Uit', }, }, 'MultiFrameNoiseReduction' => { Description => 'Ruisond. Multi Frame', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'MultiSelector' => { Description => 'Multi-selector', PrintConv => { 'Do Nothing' => 'Doe niets', 'Reset Meter-off Delay' => 'Activeer lichtmeter', }, }, 'MultiSelectorPlaybackMode' => { Description => 'Centrale knop multiselector Weergavestand', PrintConv => { 'Choose Folder' => 'Map selecteren', 'Thumbnail On/Off' => 'Miniatuur aan/uit', 'View Histograms' => 'Histogrammen weergeven', 'Zoom On/Off' => 'Zoom aan/uit', }, }, 'MultiSelectorShootMode' => { Description => 'Centrale knop multiselector Opnamestand', PrintConv => { 'Highlight Active Focus Point' => 'Actieve AF-punt markeren', 'Not Used' => 'Geen functie', 'Select Center Focus Point' => 'Middelste AF-punt selecteren', }, }, 'MultipleExposureSet' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'Mute' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'MyColorMode' => { PrintConv => { 'Off' => 'Uit', }, }, 'NDFilter' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'NEFCompression' => { PrintConv => { 'Uncompressed' => 'Niet gecomprimeerd', }, }, 'NikonImageSize' => 'Beeldformaat', 'NoMemoryCard' => { Description => 'Geen geheugenkaart', PrintConv => { 'Enable Release' => 'Ontgrendel ontspanknop', 'Release Locked' => 'Vergrendel ontspanknop', }, }, 'Noise' => 'Ruis', 'NoiseFilter' => { PrintConv => { 'High' => 'Hoog', 'Low' => 'Laag', 'Off' => 'Uit', 'Standard' => 'Standaard', }, }, 'NoiseReduction' => { Description => 'Ruisreductie', PrintConv => { 'Auto' => 'Automatisch', 'Normal' => 'Normaal', 'Off' => 'Uit', 'On' => 'Aan', 'Standard' => 'Standaard', }, }, 'ObjectAttributeReference' => 'Intellectuele genre', 'ObjectCycle' => { Description => 'Objectcyclus', PrintConv => { 'Both Morning and Evening' => 'Beide', 'Evening' => 'Avond', 'Morning' => 'Ochtend', }, }, 'ObjectFileType' => { PrintConv => { 'None' => 'Geen', 'Unknown' => 'Onbekend', }, }, 'ObjectName' => 'Titel', 'ObjectPreviewData' => 'Voorvertoning objectgegevens', 'ObjectPreviewFileFormat' => 'Voorvertoning objectgegevens bestandsformaat', 'ObjectPreviewFileVersion' => 'Voorvertoning objectgegevens bestandsformaatversie', 'ObjectTypeReference' => 'Referentie van Object type', 'OldSubfileType' => 'Subbestand type', 'OneTouchWB' => { PrintConv => { 'Off' => 'Uit', }, }, 'OpticalZoomMode' => { PrintConv => { 'Standard' => 'Standaard', }, }, 'OpticalZoomOn' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'Opto-ElectricConvFactor' => 'Opto elektronische omreken factor', 'Orientation' => { Description => 'Oriëntatie van de afbeelding', PrintConv => { 'Horizontal (normal)' => '0° (boven/links)', 'Mirror horizontal' => 'Horizontaal gespiegeld', 'Mirror horizontal and rotate 270 CW' => 'Spiegel horizontaal en draai 270° met de klok mee', 'Mirror horizontal and rotate 90 CW' => 'Spiegel horizontaal en draai 90° met de klok mee', 'Mirror vertical' => 'Vertikaal gespiegeld', 'Rotate 180' => '180° (onder/rechts)', 'Rotate 270 CW' => 'Draai 270° met de klok mee', 'Rotate 90 CW' => '90° tegen de klok in (rechts/boven)', }, }, 'OriginalTransmissionReference' => 'Werknummer', 'OriginatingProgram' => 'Oorspronkelijk programma', 'OwnerID' => 'ID van eigenaar', 'PEFVersion' => 'PEF versie', 'Padding' => 'Plaatshouder', 'PageName' => 'Pagina naam', 'PageNumber' => 'Pagina nummer', 'PhotoEffect' => { PrintConv => { 'Off' => 'Uit', }, }, 'PhotoEffects' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'PhotoEffectsType' => { PrintConv => { 'None' => 'Geen', }, }, 'PhotoInfoPlayback' => { Description => 'Functie van multi-selector', PrintConv => { 'Info Left-right, Playback Up-down' => 'Info <> / Foto’s', 'Info Up-down, Playback Left-right' => 'Info / Foto’s <>', }, }, 'PhotometricInterpretation' => { Description => 'Pixel schema', PrintConv => { 'BlackIsZero' => 'Zwart is nul', 'Color Filter Array' => 'CFA (Kleur Filter Matrix)', 'Pixar LogL' => 'CIE Log2(L) (Log Luminantie)', 'Pixar LogLuv' => 'CIE Log2(L)(u\',v\') (Log Luminantie en Chrominantie)', 'RGB Palette' => 'RGB palet', 'Transparency Mask' => 'Transparent masker', 'WhiteIsZero' => 'Wit is nul', }, }, 'PhotoshopFormat' => { PrintConv => { 'Standard' => 'Standaard', }, }, 'PictureControl' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'PictureControlActive' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'PictureFinish' => { PrintConv => { 'Portrait' => 'Portret', }, }, 'PictureMode' => { PrintConv => { 'Aperture-priority AE' => 'Diafragmaprioriteit', 'Auto' => 'Automatisch', 'Landscape' => 'Landschap', 'Manual' => 'Handmatig', 'Portrait' => 'Portret', 'Shutter speed priority AE' => 'Sluiterprioriteit', 'Standard' => 'Standaard', }, }, 'PictureMode2' => { PrintConv => { 'Aperture Priority' => 'Diafragmaprioriteit', 'Manual' => 'Handmatig', 'Shutter Speed Priority' => 'Sluiterprioriteit', }, }, 'PictureStyle' => { PrintConv => { 'Landscape' => 'Landschap', 'None' => 'Geen', 'Portrait' => 'Portret', 'Standard' => 'Standaard', }, }, 'PixelFormat' => 'Pixelformaat', 'PixelUnits' => { PrintConv => { 'Unknown' => 'Onbekend', }, }, 'PlanarConfiguration' => { Description => 'Afbeelding data arrangement', PrintConv => { 'Chunky' => 'Chunky Formaat (Interleaved)', 'Planar' => 'Planar Formaat', }, }, 'Predictor' => { PrintConv => { 'Horizontal differencing' => 'Horizontale differencering', 'None' => 'Geen prodictor schema in gebruik', }, }, 'PreviewColorSpace' => { PrintConv => { 'Unknown' => 'Onbekend', }, }, 'PreviewImage' => 'Voorbeeld', 'PreviewImageValid' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'PreviewQuality' => { PrintConv => { 'Normal' => 'Normaal', }, }, 'PrimaryChromaticities' => 'Chromaticiteit van primaire kleuren', 'PrimaryPlatform' => 'Primaire platform', 'ProcessingSoftware' => 'Verwerkingssoftware', 'ProductID' => 'Produkt ID', 'ProfileCMMType' => 'Profiel CMM-type', 'ProfileClass' => { Description => 'Profielklasse', PrintConv => { 'Abstract Profile' => 'Abstractprofiel', 'ColorSpace Conversion Profile' => 'Kleurenruimteprofiel', 'DeviceLink Profile' => 'Apparaatverbindingsprofiel', 'Display Device Profile' => 'Beeldschermapparaatprofiel', 'Input Device Profile' => 'Invoerapparaatprofiel', 'NamedColor Profile' => 'Genoemd kleurenprofiel', 'Nikon Input Device Profile (NON-STANDARD!)' => 'Nikonprofiel ("nkpf")', 'Output Device Profile' => 'Uitvoerapparaatprofiel', }, }, 'ProfileConnectionSpace' => 'Profielconnectieruimte', 'ProfileCopyright' => 'Profielcopyright', 'ProfileCreator' => 'Profielproducent', 'ProfileDateTime' => 'Datum 1e aanmaak profiel', 'ProfileDescription' => 'Profielbeschrijving', 'ProfileDescriptionML' => 'Profielbeschrijving ML', 'ProfileFileSignature' => 'Profiel filekenmerk', 'ProfileID' => 'Profiel-ID', 'ProfileSequenceDesc' => 'Profielvolgorde beschrijving', 'ProfileVersion' => 'Profielversie', 'ProgramLine' => { PrintConv => { 'Normal' => 'Normaal', }, }, 'ProgramMode' => { PrintConv => { 'None' => 'Geen', 'Portrait' => 'Portret', }, }, 'ProgramVersion' => 'Programmaversie', 'Province-State' => 'Provincie', 'Quality' => { Description => 'Beeldkwaliteit', PrintConv => { 'Compressed RAW' => 'cRAW', 'Compressed RAW + JPEG' => 'cRAW+JPEG', 'Extra Fine' => 'Extra fijn', 'Fine' => 'Fijn', 'High' => 'Hoog', 'Low' => 'Laag', 'Normal' => 'Normaal', 'RAW + JPEG' => 'RAW+JPEG', 'Standard' => 'Standaard', }, }, 'QualityMode' => { PrintConv => { 'Normal' => 'Normaal', }, }, 'QuickShot' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'RAFVersion' => 'RAF versie', 'RasterizedCaption' => 'Gerasterde titel', 'Rating' => 'Waardering', 'RatingPercent' => 'Waardering in procent', 'RawDevAutoGradation' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'RawJpgQuality' => { PrintConv => { 'Normal' => 'Normaal', }, }, 'RecordMode' => { Description => 'Opnamemodus', PrintConv => { 'Aperture Priority' => 'Diafragmaprioriteit', 'Manual' => 'Handmatig', 'Shutter Priority' => 'Sluiterprioriteit', }, }, 'RecordingMode' => { PrintConv => { 'Auto' => 'Automatisch', 'Landscape' => 'Landschap', 'Manual' => 'Handmatig', 'Portrait' => 'Portret', }, }, 'RedEyeCorrection' => { PrintConv => { 'Automatic' => 'Automatisch', 'Off' => 'Uit', }, }, 'RedEyeReduction' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'RedMatrixColumn' => 'Rode matrixkolom', 'RedTRC' => 'Rode toon reproductie curve', 'ReferenceBlackWhite' => 'Zwart/wit referentie punten', 'ReferenceDate' => 'Referentiedatum', 'ReferenceNumber' => 'Referentienummer', 'ReferenceService' => 'Referentieservice', 'RelatedImageFileFormat' => 'Bestandsformaat van de afbeelding', 'RelatedImageHeight' => 'Afbeeldingshoogte', 'RelatedImageWidth' => 'Afbeeldingsbreedte', 'RelatedSoundFile' => 'Bijbehorend audio bestand', 'ReleaseButtonToUseDial' => { Description => 'Knop loslaten voor instelsch.', PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'ReleaseDate' => 'Datum van vrijgave', 'ReleaseTime' => 'Tijdstip van vrijgave', 'RemoteOnDuration' => 'Afstandsbediening', 'RenderingIntent' => { Description => 'Rendermethode', PrintConv => { 'ICC-Absolute Colorimetric' => 'Absoluut colorimetrisch', 'Media-Relative Colorimetric' => 'Relatieve colorimetrisch', 'Perceptual' => 'Waarnemend', 'Saturation' => 'Verzadiging', }, }, 'RepeatingFlashCount' => 'Stroboscopisch flitsen Aantal', 'RepeatingFlashOutput' => 'Stroboscopisch flitsen Sterkte', 'RepeatingFlashRate' => 'Stroboscopisch flitsen Freq.', 'ResampleParamsQuality' => { PrintConv => { 'High' => 'Hoog', 'Low' => 'Laag', }, }, 'Resaved' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'ResolutionUnit' => { Description => 'Eenheid van de X und Y resolutie', PrintConv => { 'None' => 'Geen', 'cm' => 'centimeter', }, }, 'RetouchHistory' => { PrintConv => { 'None' => 'Geen', }, }, 'ReverseIndicators' => 'Aanduidingen omkeren', 'Rotation' => { PrintConv => { 'Horizontal' => '0° (boven/links)', 'Horizontal (Normal)' => '0° (boven/links)', 'Horizontal (normal)' => '0° (boven/links)', 'Rotate 180' => '180° (onder/rechts)', 'Rotate 270 CW' => 'Draai 270° met de klok mee', 'Rotate 90 CW' => '90° tegen de klok in (rechts/boven)', 'Rotated 180' => '180° (onder/rechts)', 'Rotated 270 CW' => 'Draai 270° met de klok mee', 'Rotated 90 CW' => '90° tegen de klok in (rechts/boven)', }, }, 'RowsPerStrip' => 'Aantal lijnen in de afbeelding', 'SPIFFVersion' => 'SPIFF versie', 'SRActive' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'SVGVersion' => 'SVG versie', 'SampleFormat' => { Description => 'Sample Formaat', PrintConv => { 'Complex int' => 'Complexe integer', 'Float' => 'Drijvende komma waarde', 'Signed' => 'Integer met voorteken', 'Undefined' => 'Niet gedefinierd', 'Unsigned' => 'Integer zonder voorteken', }, }, 'SamplesPerPixel' => 'Aantal van de componenten', 'Saturation' => { Description => 'Kleurverzadiging', PrintConv => { 'High' => 'Hoge kleurvezadiging', 'Low' => 'Lage kleurverzadiging', 'Normal' => 'Normaal', }, }, 'ScanImageEnhancer' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'SceneCaptureType' => { Description => 'Scene opname type', PrintConv => { 'Landscape' => 'Landschap', 'Night' => 'Nachtscene', 'Portrait' => 'Portret', 'Standard' => 'Standaard', }, }, 'SceneMode' => { Description => 'Scènekeuze', PrintConv => { '3D Sweep Panorama' => '3D', 'Anti Motion Blur' => 'Anti-bewegingswaas', 'Aperture Priority' => 'Diafragmaprioriteit', 'Auto' => 'Automatisch', 'Cont. Priority AE' => 'Continuvoork. AE', 'Handheld Night Shot' => 'Nachtopname uit hand', 'Landscape' => 'Landschap', 'Manual' => 'Handmatig', 'Night Portrait' => 'Nachtportret', 'Night Scene' => 'Nacht', 'Night View/Portrait' => 'Nacht/portret', 'Normal' => 'Normaal', 'Off' => 'Uit', 'Portrait' => 'Portret', 'Shutter Priority' => 'Sluiterprioriteit', 'Sports' => 'Sportactie', 'Standard' => 'Standaard', 'Sunset' => 'Zonsondergang', 'Sweep Panorama' => 'Panorama d. beweg.', }, }, 'SceneModeUsed' => { PrintConv => { 'Aperture Priority' => 'Diafragmaprioriteit', 'Landscape' => 'Landschap', 'Manual' => 'Handmatig', 'Portrait' => 'Portret', 'Shutter Priority' => 'Sluiterprioriteit', }, }, 'SceneSelect' => { PrintConv => { 'Night' => 'Nachtscene', 'Off' => 'Uit', }, }, 'SceneType' => { Description => 'Scene type', PrintConv => { 'Directly photographed' => 'Direkt opgenomen afbeelding', }, }, 'SecurityClassification' => { Description => 'Veiligheid classificering', PrintConv => { 'Confidential' => 'Vertrouwelijk', 'Restricted' => 'Begrensd', 'Secret' => 'Geheim', 'Top Secret' => 'Streng geheim', 'Unclassified' => 'Niet geclassificeerd', }, }, 'SelfTimer' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'SelfTimerMode' => 'Zelfontspanner mode', 'SelfTimerTime' => 'Vertraging zelfontspanner', 'SensingMethod' => { Description => 'Meet methode', PrintConv => { 'Color sequential area' => 'Color sequential area sensor', 'Color sequential linear' => 'Kleur sequentiële lineaire sensor', 'Monochrome area' => 'Monochrome sensor', 'Monochrome linear' => 'Monochrome lineaire sensor', 'Not defined' => 'Niet gedefineerd', 'One-chip color area' => 'Één chip kleur sensor', 'Three-chip color area' => 'Drie chip kleur sensor', 'Trilinear' => 'Trilineaire sensor', 'Two-chip color area' => 'Twee chip kleur sensor', }, }, 'SequentialShot' => { PrintConv => { 'None' => 'Geen', 'Standard' => 'Standaard', }, }, 'SerialNumber' => 'Camera-ID', 'ServiceIdentifier' => 'Service ID', 'SetButtonCrossKeysFunc' => { PrintConv => { 'Normal' => 'Normaal', }, }, 'ShadingCompensation' => { Description => 'Schaduwcompensatie', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ShadingCompensation2' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ShakeReduction' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'Sharpness' => { Description => 'Scherpte', PrintConv => { 'Hard' => '+', 'Normal' => 'Normaal', 'Soft' => 'Zacht', }, }, 'SharpnessFrequency' => { PrintConv => { 'High' => 'Hoog', 'Low' => 'Laag', 'Standard' => 'Standaard', }, }, 'ShootingInfoDisplay' => { Description => 'Weergave opname-info', PrintConv => { 'Auto' => 'Automatisch', 'Manual (dark on light)' => 'Handmatig - Donker op licht', 'Manual (light on dark)' => 'Handmatig - Licht op donker', }, }, 'ShootingMode' => { Description => 'Opnamestand', PrintConv => { 'Aperture Priority' => 'Diafragmaprioriteit', 'Manual' => 'Handmatig', 'Normal' => 'Normaal', 'Portrait' => 'Portret', 'Shutter Priority' => 'Sluiterprioriteit', }, }, 'ShootingModeSetting' => { Description => 'Opnamestand', PrintConv => { 'Continuous' => 'Continu', 'Delayed Remote' => 'Vertraagd op afstand', 'Quick-response Remote' => 'Direct op afstand', 'Self-timer' => 'Zelfontspanner', 'Single Frame' => 'Enkel beeld', }, }, 'ShortDocumentID' => 'Korte foto ID', 'ShutterMode' => { PrintConv => { 'Aperture Priority' => 'Diafragmaprioriteit', 'Auto' => 'Automatisch', }, }, 'ShutterReleaseButtonAE-L' => { Description => 'AE-vergr. ontspanknop', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ShutterReleaseNoCFCard' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'ShutterSpeed' => 'Belichtingstijd', 'ShutterSpeedValue' => 'Belichtingstijd', 'SimilarityIndex' => 'Fotogelijkheidsindex', 'SlideShow' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'SlowShutter' => { PrintConv => { 'None' => 'Geen', 'Off' => 'Uit', 'On' => 'Aan', }, }, 'SlowSync' => { PrintConv => { 'Off' => 'Uit', }, }, 'Software' => 'Gebruikte software', 'Source' => 'Bron', 'SpatialFrequencyResponse' => 'Spatial frequency response', 'SpecialEffectsOpticalFilter' => { PrintConv => { 'None' => 'Geen', }, }, 'SpecialInstructions' => 'Instructies', 'SpectralSensitivity' => 'Spectrale gevoeligheid', 'State' => 'Staat', 'StripByteCounts' => 'Aantal bytes per gecomprimeerd afbeelding deel', 'StripOffsets' => 'Positie van afbeelding data', 'Sub-location' => 'Locatie', 'SubSecCreateDate' => 'Datum van de originele data generatie', 'SubSecDateTimeOriginal' => 'Datum van de originele data generatie', 'SubSecModifyDate' => 'Datum bestand wijziging', 'SubSecTime' => 'DateTime 1/100 seconden', 'SubSecTimeDigitized' => 'DateTimeDigitized 1/100 seconden', 'SubSecTimeOriginal' => 'DateTimeOriginal 1/100 seconden', 'SubfileType' => 'Nieuw subbestand type', 'Subject' => 'Onderwerp', 'SubjectArea' => 'Positie hoofdobject', 'SubjectDistance' => 'Object afstand', 'SubjectDistanceRange' => { Description => 'Objectief afstandsbereik', PrintConv => { 'Close' => 'Dichtbij', 'Distant' => 'Verweg', 'Unknown' => 'Onbekend', }, }, 'SubjectLocation' => 'Positie hoofdobject', 'SubjectProgram' => { PrintConv => { 'None' => 'Geen', 'Portrait' => 'Portret', }, }, 'SubjectReference' => 'Onderwerp code', 'Subsystem' => { PrintConv => { 'Unknown' => 'Onbekend', }, }, 'SuperMacro' => { PrintConv => { 'Off' => 'Uit', }, }, 'SuperimposedDisplay' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'SupplementalCategories' => 'Aanvullende categorie', 'T4Options' => 'Opvul bit toegevoegd', 'T6Options' => 'T6 Opties', 'Tagged' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'TargetPrinter' => 'Doel Printer', 'Technology' => { Description => 'Technologie', PrintConv => { 'Active Matrix Display' => 'Actieve matrixdisplay', 'Cathode Ray Tube Display' => 'CRT-beeldscherm', 'Digital Camera' => 'Digitale camera', 'Dye Sublimation Printer' => 'Dye sublimation printer', 'Electrophotographic Printer' => 'Laserprinter', 'Electrostatic Printer' => 'Electrostatische printer', 'Film Scanner' => 'Filmscanner', 'Film Writer' => 'Filmprinter', 'Flexography' => 'Flexografie', 'Gravure' => 'Fotogravure - koperdiepdruk', 'Ink Jet Printer' => 'Inkjet printer', 'Offset Lithography' => 'Offset Lithografie', 'Passive Matrix Display' => 'Passieve matrixdisplay', 'Photo CD' => 'Photo-CD', 'Photo Image Setter' => 'Fotofilmbelichter', 'Photographic Paper Printer' => 'Fotopapier printer', 'Projection Television' => 'Projectietelevisie', 'Reflective Scanner' => 'Reflectieve Scanner', 'Thermal Wax Printer' => 'Thermische was printer', 'Video Camera' => 'Videocamera', 'Video Monitor' => 'Videomonitor', }, }, 'Teleconverter' => { PrintConv => { 'None' => 'Geen', }, }, 'TextStamp' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ThumbnailImage' => 'Miniatuur', 'ThumbnailImageSize' => 'Thumbnail formaat', 'TimeCreated' => 'Opnametijdstip', 'TimeScaleParamsQuality' => { PrintConv => { 'High' => 'Hoog', 'Low' => 'Laag', }, }, 'TimeSent' => 'Tijdstip van zenden', 'TimerFunctionButton' => { Description => 'Fn-knop', PrintConv => { 'ISO' => 'ISO-gevoeligheid', 'Image Quality/Size' => 'Bldkwaliteit/-formaat', 'Self-timer' => 'Zelfontspanner', 'Shooting Mode' => 'Opnamestand', 'White Balance' => 'Witbalans', }, }, 'Title' => 'Titel', 'ToneCurve' => { PrintConv => { 'Manual' => 'Handmatig', 'Standard' => 'Standaard', }, }, 'ToneCurveActive' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'ToningEffect' => { PrintConv => { 'None' => 'Geen', }, }, 'ToningEffectMonochrome' => { PrintConv => { 'None' => 'Geen', }, }, 'TransferFunction' => 'Transformatie functie', 'Transformation' => { PrintConv => { 'Horizontal (normal)' => '0° (boven/links)', 'Mirror horizontal' => 'Horizontaal gespiegeld', 'Mirror horizontal and rotate 270 CW' => 'Spiegel horizontaal en draai 270° met de klok mee', 'Mirror horizontal and rotate 90 CW' => 'Spiegel horizontaal en draai 90° met de klok mee', 'Mirror vertical' => 'Vertikaal gespiegeld', 'Rotate 180' => '180° (onder/rechts)', 'Rotate 270 CW' => 'Draai 270° met de klok mee', 'Rotate 90 CW' => '90° tegen de klok in (rechts/boven)', }, }, 'TransmissionReference' => 'Transmissiereferentie', 'Trapped' => { PrintConv => { 'Unknown' => 'Onbekend', }, }, 'Uncompressed' => { Description => 'Niet gecomprimeerd', PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'UniqueDocumentID' => 'Uniek foto ID', 'UniqueObjectName' => 'Unieke Naam van het Object', 'Unknown' => 'Onbekend', 'UnsharpMask' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'Urgency' => { Description => 'Urgentie', PrintConv => { '0 (reserved)' => '0 (Gereserveerd voor toekomstig gebruik)', '1 (most urgent)' => '1 (zeer dringend)', '5 (normal urgency)' => '5 (dringend)', '8 (least urgent)' => '8 (minst dringend)', '9 (user-defined priority)' => '9 (Gereserveerd voor toekomstig gebruik)', }, }, 'UserComment' => 'Gebruiker kommentaar', 'UserDef1PictureStyle' => { PrintConv => { 'Landscape' => 'Landschap', 'Portrait' => 'Portret', 'Standard' => 'Standaard', }, }, 'UserDef2PictureStyle' => { PrintConv => { 'Landscape' => 'Landschap', 'Portrait' => 'Portret', 'Standard' => 'Standaard', }, }, 'UserDef3PictureStyle' => { PrintConv => { 'Landscape' => 'Landschap', 'Portrait' => 'Portret', 'Standard' => 'Standaard', }, }, 'VRDVersion' => 'VRD versie', 'VR_0x66' => { PrintConv => { 'Off' => 'Uit', }, }, 'Version' => 'Versie', 'VibrationReduction' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'ViewfinderWarning' => { Description => 'Zoekerwaarschuwing', PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'VignetteControl' => { PrintConv => { 'High' => 'Hoog', 'Normal' => 'Normaal', 'Off' => 'Uit', 'On' => 'Aan', }, }, 'VoiceMemo' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'WBAdjLighting' => { PrintConv => { 'Daylight (direct sunlight)' => 'Daglicht (0)', 'Daylight (shade)' => 'Daglicht (1)', 'Daylight (cloudy)' => 'Daglicht (2)', 'Flash' => 'Flits', 'None' => 'Geen', }, }, 'WBBracketMode' => { PrintConv => { 'Off' => 'Uit', }, }, 'WBFineTuneActive' => { PrintConv => { 'No' => 'Nee', 'Yes' => 'Ja', }, }, 'WBMode' => { PrintConv => { 'Auto' => 'Automatisch', }, }, 'WCSProfiles' => 'Windows kleursysteemprofiel', 'WhiteBalance' => { Description => 'Witbalans', PrintConv => { 'Auto' => 'Automatisch', 'Black & White' => 'Monochroom', 'Cloudy' => 'Bewolkt', 'Color Temperature/Color Filter' => 'Kleurtemperatuur / Kleurfilter', 'Cool White Fluorescent' => 'Koelwit TL-licht', 'Custom' => 'Eigen instel.', 'Custom 1' => 'VOORKEUR 1', 'Custom 2' => 'VOORKEUR 2', 'Custom 3' => 'VOORKEUR 3', 'Custom 4' => 'VOORKEUR 4', 'Day White Fluorescent' => 'Daglicht wit TL-licht', 'Daylight' => 'Daglicht', 'Daylight Fluorescent' => 'Daglicht TL-licht', 'Flash' => 'Flits', 'Fluorescent' => 'Fluoresceren', 'Manual' => 'Handmatig', 'Shade' => 'Schaduw', 'Tungsten' => 'Kunstlicht (gloeilamp)', 'Unknown' => 'Onbekend', 'Warm White Fluorescent' => 'Warm wit TL-licht', 'White Fluorescent' => 'Wit TL-licht', }, }, 'WhiteBalance2' => { PrintConv => { 'Auto' => 'Automatisch', }, }, 'WhiteBalanceAdj' => { PrintConv => { 'Auto' => 'Automatisch', 'Cloudy' => 'Bewolkt', 'Daylight' => 'Daglicht', 'Flash' => 'Flits', 'Fluorescent' => 'Fluoresceren', 'Off' => 'Uit', 'On' => 'Aan', 'Shade' => 'Schaduw', 'Tungsten' => 'Kunstlicht (gloeilamp)', }, }, 'WhiteBalanceMode' => { PrintConv => { 'Unknown' => 'Onbekend', }, }, 'WhiteBalanceSet' => { PrintConv => { 'Auto' => 'Automatisch', 'Cloudy' => 'Bewolkt', 'Daylight' => 'Daglicht', 'Daylight Fluorescent' => 'Daglicht TL-licht', 'Flash' => 'Flits', 'Manual' => 'Handmatig', 'Shade' => 'Schaduw', 'Tungsten' => 'Kunstlicht (gloeilamp)', 'White Fluorescent' => 'Warm wit TL-licht', }, }, 'WhitePoint' => 'Wit punt chromaticiteit', 'WideRange' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, 'WidthResolution' => 'Beeldresolutie horizontaal', 'Writer-Editor' => 'Titel/Beschrijving auteur', 'XMP' => 'XMP metadata', 'XPAuthor' => 'Auteur', 'XPComment' => 'Kommentaar', 'XPKeywords' => 'Trefwoorden', 'XPSubject' => 'Onderwerp', 'XPTitle' => 'Titel', 'XPosition' => 'X positie', 'XResolution' => 'Horizontale afbeelding resolutie', 'YCbCrCoefficients' => 'YCbCr coëfficiënt', 'YCbCrPositioning' => { Description => 'Y en C positie', PrintConv => { 'Centered' => 'Gecentreerd', 'Co-sited' => 'Naast liggend', }, }, 'YCbCrSubSampling' => 'Subsampling ratio van Y tot C', 'YPosition' => 'Y positie', 'YResolution' => 'Vertikale afbeelding resolutie', 'ZoneMatching' => { Description => 'Zoneaanpassing', PrintConv => { 'High Key' => 'Hi', 'ISO Setting Used' => 'Uit', 'Low Key' => 'Lo', }, }, 'ZoneMatchingOn' => { PrintConv => { 'Off' => 'Uit', 'On' => 'Aan', }, }, ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::nl.pm - ExifTool Dutch language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke, Peter Moonen, Herman Beld and Peter van der Laan for providing this translation. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut ���������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/pl.pm��������������������������������������������������000644 �000765 �000024 �00000132753 12642461343 021556� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: pl.pm # # Description: ExifTool Polish language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::pl; use strict; use vars qw($VERSION); $VERSION = '1.10'; %Image::ExifTool::Lang::pl::Translate = ( 'A100DataOffset' => 'PrzesuniÄ™cie danych A100', 'AEAperture' => 'Priorytet AE', 'AEExposureTime' => 'Czas ekspozycji AE', 'AEInfo' => 'Informacja o automatycznej ekspozycji', 'AELock' => { Description => 'Blokada AE', PrintConv => { 'Off' => 'Wyłączona', 'On' => 'Włączona', }, }, 'AEMeteringMode' => 'Tryb pomiaru AE', 'AEMeteringSegments' => 'Segmenty pomiaru AE', 'AEProgramMode' => 'Tryb programu AE', 'AFAdjustment' => 'Korekta AF', 'AFInfo' => 'Informacje autofocusa', 'AFIntegrationTime' => 'Czas integracji AF', 'AFPoint' => { PrintConv => { 'None' => 'Brak', }, }, 'AFPointMode' => 'Tryb Autofokusa', 'AFPointSelected' => { Description => 'Wybrany punkt AF', PrintConv => { 'Auto' => 'Automatyczny', 'Automatic Tracking AF' => 'ÅšledzÄ…cy AF', 'Bottom' => 'Dolny', 'Center' => 'Centralny', 'Face Detect AF' => 'Wykrywanie twarzy', 'Fixed Center' => 'Centralny', 'Left' => 'Lewy', 'Lower-left' => 'Dolny-lewy', 'Lower-right' => 'Dolny-prawy', 'Mid-left' => 'Åšrodek-lewy', 'Mid-right' => 'Åšrodek-prawy', 'Right' => 'Prawy', 'Top' => 'Górny', 'Upper-left' => 'Górny-lewy', 'Upper-right' => 'Górny-prawy', }, }, 'AFPointSelected2' => 'Wybrany punkt autofokusa 2', 'AFPointsInFocus' => { Description => 'Punkty AF w ostroÅ›ci', PrintConv => { 'Bottom-center' => 'Dolny-centralny', 'Bottom-left' => 'Dolny-lewy', 'Bottom-right' => 'Dolny-prawy', 'Center' => 'Centralny', 'Fixed Center or Multiple' => 'Centralny lub wiele', 'Left' => 'Lewy', 'None' => 'Brak', 'Right' => 'Prawy', 'Top-center' => 'Górny-centralny', 'Top-left' => 'Górny-lewy', 'Top-right' => 'Górny-prawy', }, }, 'AFPointsSelected' => 'Wybrane punkty AF', 'AFPredictor' => 'PrzewidujÄ…cy AF', 'Aperture' => 'PrzysÅ‚ona', 'ApertureRingUse' => 'Użycie pierÅ›cienia przysÅ‚ony', 'ApertureValue' => 'PrzysÅ‚ona', 'Artist' => 'Artysta', 'Author' => 'Autor', 'AuthorsPosition' => 'Pozycja autora', 'AutoAperture' => 'Automatyczna przysÅ‚ona', 'AutoBracketing' => 'Bracketing automatyczny', 'AutoRotate' => { PrintConv => { 'None' => 'Brak', 'Rotate 180' => '180° (dół/prawo)', 'Rotate 270 CW' => '90° CW (lewo/dół)', 'Rotate 90 CW' => '90° CCW (prawo/góra)', }, }, 'AvApertureSetting' => 'Ustawienia priorytetu przysÅ‚ony Av', 'BadFaxLines' => 'Uszkodzone wiersze transmisji Fax', 'BannerImageType' => { PrintConv => { 'None' => 'Brak', }, }, 'BaseExposureCompensation' => 'Podstawowa kompensacja ekspozycji', 'BitsPerSample' => 'Liczba bitów na skÅ‚adnik', 'BlackPoint' => 'Punkt czerni', 'BlueBalance' => 'Balans niebieskiego', 'BlurWarning' => { PrintConv => { 'None' => 'Brak', }, }, 'BracketShotNumber' => 'Ilość zdjęć w bracketingu', 'Brightness' => 'Jasność', 'By-line' => 'Autor', 'CFAPattern' => 'Wzorzec CFA', 'CMMFlags' => 'Flagi CMM', 'CPUFirmwareVersion' => 'Wersja firmware CPU', 'CPUType' => { PrintConv => { 'None' => 'Brak', }, }, 'CalibrationIlluminant1' => { PrintConv => { 'Cloudy' => 'Zachmurzone niebo', 'Cool White Fluorescent' => 'Zimna biaÅ‚a jarzeniówka (W 3800 - 4500K)', 'Day White Fluorescent' => 'Jarzeniówka z naturalnym biaÅ‚ym Å›wiatÅ‚em (N 4600 - 5500K)', 'Daylight' => 'ÅšwiatÅ‚o dzienne', 'Daylight Fluorescent' => 'Jarzeniówka dajÄ…ca Å›wiatÅ‚o dzienne (D 5700 - 7100K)', 'Fine Weather' => 'Dobra pogoda', 'Flash' => 'Lampa bÅ‚yskowa', 'Fluorescent' => 'Jarzeniowy', 'ISO Studio Tungsten' => 'ISO dla studyjnych lamp żarowych', 'Other' => 'Inne źródÅ‚o Å›wiatÅ‚a', 'Shade' => 'CieÅ„', 'Standard Light A' => 'Standardowe Å›wiatÅ‚o A', 'Standard Light B' => 'Standardowe Å›wiatÅ‚o B', 'Standard Light C' => 'Standardowe Å›wiatÅ‚o C', 'Tungsten (Incandescent)' => 'ÅšwiatÅ‚o żarowe', 'Unknown' => 'Nieznane', 'White Fluorescent' => 'BiaÅ‚a jarzeniówka (WW3250 - 3800K)', }, }, 'CalibrationIlluminant2' => { PrintConv => { 'Cloudy' => 'Zachmurzone niebo', 'Cool White Fluorescent' => 'Zimna biaÅ‚a jarzeniówka (W 3800 - 4500K)', 'Day White Fluorescent' => 'Jarzeniówka z naturalnym biaÅ‚ym Å›wiatÅ‚em (N 4600 - 5500K)', 'Daylight' => 'ÅšwiatÅ‚o dzienne', 'Daylight Fluorescent' => 'Jarzeniówka dajÄ…ca Å›wiatÅ‚o dzienne (D 5700 - 7100K)', 'Fine Weather' => 'Dobra pogoda', 'Flash' => 'Lampa bÅ‚yskowa', 'Fluorescent' => 'Jarzeniowy', 'ISO Studio Tungsten' => 'ISO dla studyjnych lamp żarowych', 'Other' => 'Inne źródÅ‚o Å›wiatÅ‚a', 'Shade' => 'CieÅ„', 'Standard Light A' => 'Standardowe Å›wiatÅ‚o A', 'Standard Light B' => 'Standardowe Å›wiatÅ‚o B', 'Standard Light C' => 'Standardowe Å›wiatÅ‚o C', 'Tungsten (Incandescent)' => 'ÅšwiatÅ‚o żarowe', 'Unknown' => 'Nieznane', 'White Fluorescent' => 'BiaÅ‚a jarzeniówka (WW3250 - 3800K)', }, }, 'CameraOrientation' => { Description => 'Orientacja obrazu', PrintConv => { 'Horizontal (normal)' => '0° (góra/lewo)', 'Rotate 270 CW' => '90° CW (lewo/dół)', 'Rotate 90 CW' => '90° CCW (prawo/góra)', }, }, 'CameraSettings' => 'Ustawienia aparatu', 'CameraTemperature' => 'Temperatura aparatu', 'Caption-Abstract' => 'Podpis', 'CaptionWriter' => 'Autor podpisu', 'Categories' => 'Kategorie', 'Category' => 'Kategorie', 'CellLength' => 'DÅ‚ugość komórki', 'CellWidth' => 'Szerokość komórki', 'City' => 'Miasto', 'CleanFaxData' => { Description => 'Poprawne wiersze transmisji Fax', PrintConv => { 'Clean' => 'Dobry', 'Regenerated' => 'Ponowiony', 'Unclean' => 'Niedobry', }, }, 'ClipPath' => 'Åšcieżka obciÄ™cia', 'CodingMethods' => { Description => 'Metody kompresji', PrintConv => { 'Baseline JPEG' => 'JPEG podstawowa', 'JBIG color' => 'JBIG kolor', 'Modified Huffman' => 'Huffmana zmodyfikowana', 'Modified MR' => 'Zmodyfikowany MR', 'Modified Read' => 'Zmodyfikowany odczyt', 'Unspecified compression' => 'Nie podane', }, }, 'ColorFilter' => 'Filtr kolorowy', 'ColorInfo' => 'Informacje o kolorze', 'ColorMap' => 'Mapa kolorów', 'ColorMatrix1' => 'Macierz kolorów 1', 'ColorMatrix2' => 'Macierz kolorów 2', 'ColorSpace' => { Description => 'Informacja o przestrzeni barwowej', PrintConv => { 'Uncalibrated' => 'Nie skalibrowany', }, }, 'ColorSpaceData' => 'Dane przestrzeni barw', 'ColorTemperature' => 'Temperatura barwowa', 'Comment' => 'Komentarz', 'ComponentsConfiguration' => 'Znaczenie każdego komponentu', 'CompressedBitsPerPixel' => 'Tryb kompresji obrazu', 'Compression' => { Description => 'Algorytm kompresji', PrintConv => { 'Epson ERF Compressed' => 'Skompresowany Epson ERF', 'JBIG B&W' => 'JBIG Czarno BiaÅ‚y', 'JBIG Color' => 'JBIG Kolorowy', 'JPEG' => 'Kompresja JPEG', 'JPEG (old-style)' => 'JPEG (w starym stylu)', 'Kodak DCR Compressed' => 'Skompresowany Kodak DCR', 'Kodak KDC Compressed' => 'Skompresowany Kodak KDC', 'Next' => 'Kodowanie 2-bitowe NeXT', 'Nikon NEF Compressed' => 'Skompresowany Nikon NEF', 'None' => 'Brak', 'Packed RAW' => 'Spakowany RAW', 'Pentax PEF Compressed' => 'Skompresowany Pentax PEF', 'SGILog' => 'Kodowanie 32-bitowe SGI Log Luminance', 'SGILog24' => 'Kodowanie 24-bitowe SGI Log Luminance', 'Samsung SRW Compressed' => 'Skompresowany Samsung SRW', 'Sony ARW Compressed' => 'Skompresowany Sony ARW', 'Thunderscan' => 'Kodowanie 4-bitowe ThunderScan', 'Uncompressed' => 'Bez kompresji', }, }, 'CompressionType' => { PrintConv => { 'None' => 'Brak', }, }, 'ConsecutiveBadFaxLines' => 'Sekwencja uszkodzonych wierszy transmisji Fax', 'Contrast' => { Description => 'Kontrast', PrintConv => { 'High' => 'Ostre', 'Low' => 'MiÄ™kkie', 'Normal' => 'Standard', }, }, 'Copyright' => 'Posiadacz praw autorskich', 'CopyrightNotice' => 'Informacja o prawach autorskich', 'Country' => 'Kraj', 'Country-PrimaryLocationName' => 'Kraj', 'CreateDate' => 'Data utworzenia', 'CreationDate' => 'Data utworzenia', 'Credit' => 'PodziÄ™kowania', 'CropUnit' => { PrintConv => { 'inches' => 'Cal', }, }, 'CropUnits' => { PrintConv => { 'inches' => 'Cal', }, }, 'CustomRendered' => { Description => 'Przetwarzanie zdjęć wedÅ‚ug ustawieÅ„ wÅ‚asnych', PrintConv => { 'Custom' => 'Proces zdefiniowany przez użytkownika', 'Normal' => 'Normalny proces', }, }, 'DNGBackwardVersion' => 'Poprzednia wersja DNG', 'DNGVersion' => 'Wersja DNG', 'DSPFirmwareVersion' => 'Wersja firmware DSP', 'DataDump' => 'Zrzut danych?', 'DataImprint' => { PrintConv => { 'None' => 'Brak', }, }, 'DataType' => 'Typ daty', 'Date' => 'Data', 'DateCreated' => 'Data utworzenia', 'DateSent' => 'WysÅ‚ano datÄ™', 'DateTimeOriginal' => 'Pierwotna data i godzina', 'Decode' => 'Zdekodowany', 'DefaultImageColor' => 'DomyÅ›lny kolor w obrazie', 'Description' => 'Opis', 'DestinationCity' => 'Miasto przeznaczenia', 'DestinationCityCode' => 'Kod miasta przeznaczenia', 'DestinationDST' => { Description => 'Czas letni miasta przeznaczenia', PrintConv => { 'No' => 'Nie', 'Yes' => 'Tak', }, }, 'DeviceAttributes' => 'Atrybuty urzÄ…dzenia', 'DeviceManufacturer' => 'Producent urzÄ…dzenia', 'DeviceModel' => 'Model urzÄ…dzenia', 'DeviceSettingDescription' => 'Opis ustawieÅ„ urzÄ…dzenia', 'DigitalZoom' => 'Cyfrowy zoom', 'DigitalZoomRatio' => 'Współczynnik cyfrowego zoomu', 'Directory' => 'Lokalizacja pliku', 'DisplayUnits' => { PrintConv => { 'inches' => 'Cal', }, }, 'DisplayedUnitsX' => { PrintConv => { 'inches' => 'Cal', }, }, 'DisplayedUnitsY' => { PrintConv => { 'inches' => 'Cal', }, }, 'DocumentName' => 'Nazwa dokumentu', 'DriveMode' => 'Tryb przesuwu', 'DriveMode2' => 'Tryb zdjęć 2', 'Duration' => 'Czas', 'DynamicRangeExpansion' => { Description => 'Rozszerzenie zakresu dynamiki', PrintConv => { 'Off' => 'Wyłączone', 'On' => 'Włączone', }, }, 'E-DialInProgram' => 'Program E-Dial', 'EVStepInfo' => 'Informacja o krokach EV', 'EVSteps' => 'Krok EV', 'EffectiveLV' => 'Efektywne LV', 'Emphasis' => { PrintConv => { 'None' => 'Brak', }, }, 'EnvelopePriority' => { PrintConv => { '0 (reserved)' => '0 (zarezerwowane na przyszÅ‚ość)', '1 (most urgent)' => '1 (najpilniejszy)', '5 (normal urgency)' => '5 (zwykÅ‚y)', '8 (least urgent)' => '8 (niezbyt pilny)', '9 (user-defined priority)' => '9 (priorytet okreÅ›lony przez użytkownika)', }, }, 'ExifImageHeight' => 'Wysokość obrazu', 'ExifImageWidth' => 'Szerokość obrazu', 'ExifOffset' => 'Wskaźnik Exif IFD', 'ExifVersion' => 'Wersja Exif', 'ExposureBracketStepSize' => 'Krok bracketingu ekspozycji', 'ExposureCompensation' => 'Różnica ekspozycji', 'ExposureIndex' => 'Wskaźnik ekspozycji', 'ExposureMode' => { Description => 'Tryb ekspozycji', PrintConv => { 'Auto' => 'Automatyczna ekspozycja', 'Auto bracket' => 'Funkcja Autobracketing', 'Manual' => 'Manualna ekspozycja', }, }, 'ExposureProgram' => { Description => 'Program ekspozycji', PrintConv => { 'Action (High speed)' => 'Program akcji', 'Aperture-priority AE' => 'Priorytet przysÅ‚ony', 'Creative (Slow speed)' => 'Program kreatywny', 'Landscape' => 'Krajobraz', 'Manual' => 'Manualna ekspozycja', 'Portrait' => 'Portret', 'Program AE' => 'Normalny program', 'Shutter speed priority AE' => 'Priorytet migawki', }, }, 'ExposureTime' => 'Czas ekspozycji', 'ExternalFlashExposureComp' => 'Kompensacja ekspozycji zewnetrznej lampy', 'ExternalFlashGuideNumber' => 'Liczba przewodnia lampy zewnÄ™trznej', 'ExternalFlashMode' => 'Tryb lampy zewnÄ™trznej', 'FNumber' => 'PrzysÅ‚ona', 'FaceOrientation' => { PrintConv => { 'Horizontal (normal)' => '0° (góra/lewo)', 'Rotate 180' => '180° (dół/prawo)', 'Rotate 270 CW' => '90° CW (lewo/dół)', 'Rotate 90 CW' => '90° CCW (prawo/góra)', }, }, 'FaxProfile' => { Description => 'Profil faxu (rodzaj zawartoÅ›ci)', PrintConv => { 'Extended B&W lossless, F' => 'Rozszerzony cz.b. bezstratny, F', 'Lossless JBIG B&W, J' => 'Bezstratny JBIG cz.b., J', 'Lossless color and grayscale, L' => 'Bezstratne kolor i skala szaroÅ›ci, L', 'Lossy color and grayscale, C' => 'Stratne kolor i skala szaroÅ›ci, C', 'Minimal B&W lossless, S' => 'Minimalny cz.b. bezstratny, S', 'Mixed raster content, M' => 'Raster — zawartość mieszana, M', 'Multi Profiles' => 'Wiele profili', 'Unknown' => 'Nieznany', }, }, 'FileFormat' => 'Format', 'FileModifyDate' => 'Data aktualizacji', 'FileName' => 'Nazwa pliku', 'FileSize' => 'Wielkość pliku', 'FileSource' => { Description => 'ŹródÅ‚o pliku', PrintConv => { 'Digital Camera' => 'DSC', 'Film Scanner' => 'Skaner do materiałów transparentnych', 'Reflection Print Scanner' => 'Skaner do zdjęć', }, }, 'FileType' => 'Typ pliku', 'Filename' => 'Nazwa pliku', 'FillOrder' => { Description => 'Kolejność wypeÅ‚niania', PrintConv => { 'Normal' => 'Normalna', 'Reversed' => 'ZajÄ™te', }, }, 'FilterEffectMonochrome' => { PrintConv => { 'None' => 'Brak', }, }, 'Flash' => { Description => 'Lampa', PrintConv => { 'Auto, Fired' => 'Włączony (Automatyczny bÅ‚ysk lampy)', 'Auto, Fired, Red-eye reduction' => '"Włączony (BÅ‚ysk automatyczny, Redukcja efektu czerwonych oczu)"', 'Auto, Fired, Red-eye reduction, Return detected' => '"Włączony (BÅ‚ysk automatyczny, Redukcja efektu czerwonych oczu, rejestracja Å›wiatÅ‚a odbitego)"', 'Auto, Fired, Return detected' => '"Włączony (Automatyczny bÅ‚ysk lampy, rejestracja Å›wiatÅ‚a odbitego)"', 'Did not fire' => 'Nie nastÄ…piÅ‚ bÅ‚ysk lampy', 'Fired' => 'NastÄ…piÅ‚ bÅ‚ysk lampy', 'Fired, Red-eye reduction' => 'Włączony (Redukcja efektu czerwonych oczu)', 'Fired, Red-eye reduction, Return detected' => '"Włączony (Redukcja efektu czerwonych oczu, rejestracja Å›wiatÅ‚a odbitego)"', 'Fired, Return detected' => 'Włączony (Rejestracja Å›wiatÅ‚a odbitego)', 'No Flash' => 'Brak funkcji lampy bÅ‚yskowej', 'On, Fired' => 'Włączony (BÅ‚ysk dopeÅ‚niajÄ…cy)', 'On, Red-eye reduction' => '"Włączony (BÅ‚ysk dopeÅ‚niajÄ…cy, Redukcja efektu czerwonych oczu)"', 'On, Red-eye reduction, Return detected' => '"Włączony (BÅ‚ysk dopeÅ‚niajÄ…cy, Redukcja efektu czerwonych oczu, rejestracja Å›wiatÅ‚a odbitego)"', 'On, Return detected' => '"Włączony (BÅ‚ysk dopeÅ‚niajÄ…cy, rejestracja Å›wiatÅ‚a odbitego)"', }, }, 'FlashDevice' => { PrintConv => { 'None' => 'Brak', }, }, 'FlashEnergy' => 'SiÅ‚a lampy bÅ‚yskowej', 'FlashExposureComp' => 'Kompensacja lampy', 'FlashMeteringSegments' => 'Segmenty pomiaru bÅ‚ysku', 'FlashMode' => 'Tryb lampy', 'FlashModel' => { PrintConv => { 'None' => 'Brak', }, }, 'FlashOptions' => 'Opcje lampy', 'FlashStatus' => 'Stan lampy', 'FlashType' => { PrintConv => { 'None' => 'Brak', }, }, 'FlashpixVersion' => 'ObsÅ‚ugiwana wersja Flashpix', 'FocalLength' => 'Ogniskowa', 'FocalLength35efl' => 'DÅ‚ugość ogniskowej (w wartoÅ›ciach dla formatu maÅ‚oobrazkowego)', 'FocalLengthIn35mmFormat' => 'DÅ‚ugość ogniskowej dla aparatów maÅ‚oobrazkowych', 'FocalPlaneResolutionUnit' => { Description => 'Jednostka rozdzielczoÅ›ci w pÅ‚aszczyźnie ogniskowej', PrintConv => { 'None' => 'Brak', 'inches' => 'Cal', 'um' => 'µm (mikrometr)', }, }, 'FocalPlaneXResolution' => 'Rozdzielczość w pÅ‚aszczyźnie ogniskowej - oÅ› x', 'FocalPlaneYResolution' => 'Rozdzielczość w pÅ‚aszczyźnie ogniskowej - oÅ› y', 'FocusMode' => 'Tryb ostrzenia', 'FocusMode2' => 'Tryb Autofokusa 2', 'FrameNumber' => 'Numer zdjÄ™cia', 'FrameRate' => 'CzÄ™stotliwość zmiany kadrów', 'FrameSize' => 'Wielkość kadru', 'FreeByteCounts' => 'Liczba wolnych bajtów', 'FreeOffsets' => 'Wolne offsety', 'GDALMetadata' => 'Metadane GDAL', 'GDALNoData' => 'Brak danych GDAL', 'GPSAltitude' => 'Wysokość', 'GPSAltitudeRef' => { Description => 'Wysokość odniesienia', PrintConv => { 'Above Sea Level' => 'Poziom morza', 'Below Sea Level' => 'WzglÄ™dem poziomu morza (wartość ujemna)', }, }, 'GPSAreaInformation' => 'Nazwa obszaru GPS', 'GPSDOP' => 'Precyzja pomiaru', 'GPSDateStamp' => 'Dane GPS', 'GPSDestBearing' => 'Azymut punktu docelowego', 'GPSDestBearingRef' => 'Wartość odniesienia dla azymutu punktu docelowego.', 'GPSDestDistance' => 'OdlegÅ‚ość do punktu docelowego.', 'GPSDestDistanceRef' => 'Wartość odniesienia dla odlegÅ‚oÅ›ci do punktu docelowego.', 'GPSDestLatitude' => 'Szerokość geograficzna punktu docelowego', 'GPSDestLatitudeRef' => 'Wartość odniesienia dla szerokoÅ›ci geograficznej punktu docelowego.', 'GPSDestLongitude' => 'DÅ‚ugość geograficzna punktu docelowego', 'GPSDestLongitudeRef' => 'Wartość odniesienia dla dÅ‚ugoÅ›ci geograficznej punktu docelowego.', 'GPSDifferential' => { Description => 'Różnicowa korekcja GPS', PrintConv => { 'Differential Corrected' => 'Zastosowanie korekcji różnicowej', 'No Correction' => 'Pomiar bez korekcji różnicowej', }, }, 'GPSHPositioningError' => 'Błąd poziomy wyznaczenia pozycji', 'GPSImgDirection' => 'Kierunek obrazu', 'GPSImgDirectionRef' => 'Wartość odniesienia dla kierunku obrazu', 'GPSInfo' => 'Wskaźnik GPS Info IFD', 'GPSLatitude' => 'Szerokość geograficzna', 'GPSLatitudeRef' => { Description => 'Szerokość geograficzna północna lub poÅ‚udniowa', PrintConv => { 'North' => 'SzerokoÅ›ci północnej', 'South' => 'SzerokoÅ›ci poÅ‚udniowej', }, }, 'GPSLongitude' => 'DÅ‚ugość geograficzna', 'GPSLongitudeRef' => { Description => 'DÅ‚ugość geograficzna wschodnia lub zachodnia', PrintConv => { 'East' => 'DÅ‚ugoÅ›ci wschodniej', 'West' => 'DÅ‚ugoÅ›ci zachodniej', }, }, 'GPSMapDatum' => 'Wykorzystane dane z badaÅ„ geodezyjnych', 'GPSMeasureMode' => { Description => 'Tryb pomiaru GPS', PrintConv => { '3-Dimensional Measurement' => 'Pomiar 3-wymiarowy', }, }, 'GPSProcessingMethod' => 'Nazwa metody przetwarzania GPS', 'GPSSatellites' => 'Satelity GPS używane do pomiaru', 'GPSSpeed' => 'PrÄ™dkość odbiornika GPS', 'GPSSpeedRef' => { Description => 'Jednostka prÄ™dkoÅ›ci', PrintConv => { 'km/h' => 'Kilometrów na godzinÄ™', 'knots' => 'WÄ™zÅ‚y', 'mph' => 'Mil na godzinÄ™', }, }, 'GPSStatus' => { Description => 'Stan odbiornika GPS', PrintConv => { 'Measurement Active' => 'Trwa pomiar', 'Measurement Void' => 'Wzajemna niesprzeczność pomiarów', }, }, 'GPSTimeStamp' => 'Czas GPS (zegar atomowy)', 'GPSTrack' => 'Kierunek przesuniÄ™cia', 'GPSTrackRef' => { Description => 'Wartość odniesienia dla kierunku ruchu', PrintConv => { 'Magnetic North' => 'Kierunek strzaÅ‚ki magnetycznej', 'True North' => 'Rzeczywisty kierunek', }, }, 'GPSVersionID' => 'Wersja znacznika GPS', 'GainControl' => { Description => 'Sterowanie krokiem', PrintConv => { 'High gain down' => 'Z dużym krokiem do doÅ‚u', 'High gain up' => 'Z dużym krokiem w górÄ™', 'Low gain down' => 'Z maÅ‚ym krokiem do doÅ‚u', 'Low gain up' => 'Z maÅ‚ym krokiem w górÄ™', 'None' => 'Brak', }, }, 'Genre' => 'Gatunek', 'Gradation' => 'Gradacja', 'GrayResponseCurve' => 'Krzywa odpowiedzi SzaroÅ›ci', 'GrayResponseUnit' => 'Wielkość jednostki dla krzywej odpowiedzi szaroÅ›ci', 'HalftoneHints' => 'Półtony', 'Headline' => 'Nagłówek', 'HighISONoiseReduction' => 'Redukcja szumu przy wysokim ISO', 'HometownCity' => 'Miasto domowe', 'HometownCityCode' => 'Kod miasta domowego', 'HometownDST' => { Description => 'Czas letni miasta domowego', PrintConv => { 'No' => 'Nie', 'Yes' => 'Tak', }, }, 'HostComputer' => 'Komputer użyty do wygenerowania obrazu', 'Hue' => 'Barwa', 'ICCProfile' => 'Profil ICC', 'ISO' => 'CzuÅ‚ość ISO', 'ISOFloor' => 'Minimalne ISO', 'ISOSetting' => 'Ustawienia ISO', 'ImageAreaOffset' => 'PrzesuniÄ™cie obszaru obrazu', 'ImageDescription' => 'Opis obrazu', 'ImageEditCount' => 'Licznik przetworzonych zdjęć', 'ImageHeight' => 'Wysokość obrazu', 'ImageID' => 'Identyfikator obrazu', 'ImageProcessing' => 'Przetwarzanie obrazu', 'ImageSize' => 'Rozmiar zdjÄ™cia', 'ImageTone' => { Description => 'OdcieÅ„ zdjÄ™cia', PrintConv => { 'Bright' => 'Jasny', 'Landscape' => 'Krajobraz', 'Monochrome' => 'Monochromatyczny', 'Natural' => 'Naturalny', 'Portrait' => 'Portret', }, }, 'ImageType' => { Description => 'Rodzaj obrazu', PrintConv => { 'Page' => 'Strona', }, }, 'ImageUniqueID' => 'Unikalny kod ID zdjÄ™cia', 'ImageWidth' => 'Szerokość obrazu', 'Index' => 'Indeks', 'Indexed' => { Description => 'Indeksowane', PrintConv => { 'Indexed' => 'Indeksowane', 'Not indexed' => 'Nie indeksowane', }, }, 'InkNames' => 'Nazwy tuszy', 'InkSet' => { Description => 'Zestaw tuszy', PrintConv => { 'Not CMYK' => 'Nie CMYK', }, }, 'Instructions' => 'Instrukcje', 'InternalFlashMode' => 'Tryb wewnÄ™trznej lampy', 'InternalFlashStrength' => 'Moc wewnÄ™trznej lampy', 'InteropIndex' => { Description => 'Identyfikacja wzajemnej zgodnoÅ›ci', PrintConv => { 'R03 - DCF option file (Adobe RGB)' => 'R03: Plik pomocniczy DCF (Adobe RGB)', 'R98 - DCF basic file (sRGB)' => 'R98: Plik zasadniczy DCF (sRGB)', 'THM - DCF thumbnail file' => 'THM: Plik miniatury DCF', }, }, 'InteropOffset' => 'Znacznik wzajemnej zgodnoÅ›ci', 'InteropVersion' => 'Wersja wzajemnej zgodnoÅ›ci', 'JPEGProc' => { PrintConv => { 'Baseline' => 'JPEG Podstawowy', 'Lossless' => 'Bezstratny', }, }, 'JPEGQuality' => { Description => 'Jakość', PrintConv => { 'Standard' => 'Standardowa jakość', }, }, 'JPEGRestartInterval' => 'JPEG odstÄ™p restartów', 'Keywords' => 'SÅ‚owa kluczowe', 'Lens' => 'Obiektyw', 'LensID' => 'ID obiektywu', 'LensInfo' => 'Informacja o obiektywie', 'LensMake' => 'Producent obiektywu', 'LensModel' => 'Model obiektywu', 'LensSerialNumber' => 'Numer seryjny obiektywu', 'LightReading' => 'Pomiar Å›wiatÅ‚a', 'LightSource' => { Description => 'ŹródÅ‚o Å›wiatÅ‚a', PrintConv => { 'Cloudy' => 'Zachmurzone niebo', 'Cool White Fluorescent' => 'Zimna biaÅ‚a jarzeniówka (W 3800 - 4500K)', 'Day White Fluorescent' => 'Jarzeniówka z naturalnym biaÅ‚ym Å›wiatÅ‚em (N 4600 - 5500K)', 'Daylight' => 'ÅšwiatÅ‚o dzienne', 'Daylight Fluorescent' => 'Jarzeniówka dajÄ…ca Å›wiatÅ‚o dzienne (D 5700 - 7100K)', 'Fine Weather' => 'Dobra pogoda', 'Flash' => 'Lampa bÅ‚yskowa', 'Fluorescent' => 'Jarzeniowy', 'ISO Studio Tungsten' => 'ISO dla studyjnych lamp żarowych', 'Other' => 'Inne źródÅ‚o Å›wiatÅ‚a', 'Shade' => 'CieÅ„', 'Standard Light A' => 'Standardowe Å›wiatÅ‚o A', 'Standard Light B' => 'Standardowe Å›wiatÅ‚o B', 'Standard Light C' => 'Standardowe Å›wiatÅ‚o C', 'Tungsten (Incandescent)' => 'ÅšwiatÅ‚o żarowe', 'Unknown' => 'Nieznane', 'White Fluorescent' => 'BiaÅ‚a jarzeniówka (WW3250 - 3800K)', }, }, 'Lightness' => 'Jasność', 'LocalizedCameraModel' => 'Lokalizowany model aparatu', 'Location' => 'Miejsce', 'Luminance' => 'Luminancja', 'Macro' => 'Makro', 'Make' => 'Producent', 'MakeAndModel' => 'Producent i model', 'MakerNote' => 'Prywatne dane DNG', 'MakerNotes' => 'Dane producenta', 'MaxAperture' => 'Maks. przysÅ‚ona obiektywu', 'MaxSampleValue' => 'Maksymalny rozmiar próbki', 'MeasurementGeometry' => { Description => 'Geometria pomiaru', PrintConv => { '0/45 or 45/0' => '0/45 lub 45/0', '0/d or d/0' => '0/d lub d/0', }, }, 'MediaBlackPoint' => 'Punkt czerni materiaÅ‚u', 'MediaWhitePoint' => 'Punkt bieli materiaÅ‚u', 'MeteringMode' => { Description => 'Tryb pomiaru', PrintConv => { 'Average' => 'Åšredni', 'Center-weighted average' => 'Centralnie ważony uÅ›redniony', 'Multi-segment' => 'Wzór', 'Multi-spot' => 'Wielopunktowy', 'Other' => 'Inne', 'Partial' => 'Częściowy', 'Spot' => 'Punktowy', 'Unknown' => 'Nieznane', }, }, 'MinSampleValue' => 'Minimalny rozmiar próbki', 'ModeNumber' => 'Numer trybu', 'Model' => 'Aparat', 'ModifiedPictureStyle' => { PrintConv => { 'None' => 'Brak', }, }, 'ModifyDate' => 'Data i godzina zmiany pliku', 'MonochromeFilterEffect' => { PrintConv => { 'None' => 'Brak', }, }, 'MonochromeToningEffect' => { PrintConv => { 'None' => 'Brak', }, }, 'MultipleExposureSet' => 'Wielokrotna ekspozycja', 'NEFCompression' => { PrintConv => { 'Uncompressed' => 'Bez kompresji', }, }, 'NativeDisplayInfo' => 'Informacja o natywnym(?) wyÅ›wietlaczu', 'Noise' => 'Szumy', 'NoiseReduction' => { Description => 'Redukcja szumów', PrintConv => { 'Off' => 'Wyłączona', 'On' => 'Włączona', }, }, 'NumberofInks' => 'Liczba tuszy', 'ObjectFileType' => { PrintConv => { 'None' => 'Brak', }, }, 'OldSubfileType' => { Description => 'Stary typ podsekcji', PrintConv => { 'Full-resolution image' => 'Obraz w peÅ‚nej rozdzielczoÅ›ci', 'Reduced-resolution image' => 'Obraz o zredukowanej rozdzielczoÅ›ci', 'Single page of multi-page image' => 'Jedna strona obrazu wielostronicowego', }, }, 'Opto-ElectricConvFactor' => 'Współczynnik przeksztaÅ‚cenia optyczno-elektrycznego', 'Orientation' => { Description => 'Orientacja obrazu', PrintConv => { 'Horizontal (normal)' => '0° (góra/lewo)', 'Mirror horizontal' => '0° (góra/prawo)', 'Mirror horizontal and rotate 270 CW' => '90° CW (lewo/góra)', 'Mirror horizontal and rotate 90 CW' => '90° CCW (prawo/dół)', 'Mirror vertical' => '180° (dół/lewo)', 'Rotate 180' => '180° (dół/prawo)', 'Rotate 270 CW' => '90° CW (lewo/dół)', 'Rotate 90 CW' => '90° CCW (prawo/góra)', }, }, 'OwnerName' => 'Nazwa wÅ‚aÅ›ciciela', 'PageName' => 'Nazwa strony', 'PageNumber' => 'Numer strony', 'PentaxImageSize' => { Description => 'Rozmiar obrazu Pentax\'a', PrintConv => { '2304x1728 or 2592x1944' => '2304 x 1728 lub 2592 x 1944', '2560x1920 or 2304x1728' => '2560 x 1920 lub 2304 x 1728', '2816x2212 or 2816x2112' => '2816 x 2212 lub 2816 x 2112', '3008x2008 or 3040x2024' => '3008 x 2008 lub 3040 x 2024', 'Full' => 'PeÅ‚ny', }, }, 'PentaxVersion' => 'Wersja Pentax\'a', 'PhotoEffectsType' => { PrintConv => { 'None' => 'Brak', }, }, 'PhotometricInterpretation' => { Description => 'Schemat pikseli', PrintConv => { 'BlackIsZero' => 'Czarny jest zerem', 'Color Filter Array' => 'CFA (Filtr kolorów matrycy)', 'Pixar LogL' => 'CIE Log2(L) (Log luminancji)', 'Pixar LogLuv' => 'CIE Log2(l)(u\',v\') (Log luminancji i chrominancji)', 'RGB Palette' => 'Paleta kolorów', 'Transparency Mask' => 'Maska przeźroczystoÅ›ci', 'WhiteIsZero' => 'BiaÅ‚y jest zerem', }, }, 'PictureMode' => 'Tryb obrazu', 'PictureMode2' => 'Tryb obrazu 2', 'PictureStyle' => { PrintConv => { 'None' => 'Brak', }, }, 'PixelFormat' => { Description => 'Format zapisu koloru', PrintConv => { '128-bit PRGBA Float' => '128-bitów PRGBA (zapis zmienno przecinkowy)', '128-bit RGB Float' => '128-bitów RGB (zapis zmienno przecinkowy)', '128-bit RGBA Float' => '128-bitów RGBA (zapis zmienno przecinkowy)', '16-bit Gray' => '16-bitów Szarość', '32-bit Gray Float' => '32-bity Szarość (zapis zmienno przecinkowy)', '48-bit RGB Fixed Point' => '48-bitów RGB (zapis staÅ‚opozycyjny)', '8-bit Gray' => '8-bitów Szarość', '96-bit RGB Fixed Point' => '96-bitów RGB (zapis staÅ‚opozycyjny)', 'Black & White' => 'Czarno BiaÅ‚y', }, }, 'PlanarConfiguration' => { Description => 'UkÅ‚ad danych obrazu', PrintConv => { 'Chunky' => 'Format "chunky" (z przeplotem)', 'Planar' => 'Format "planar"', }, }, 'PowerSource' => 'Zasilanie', 'Predictor' => { Description => 'Przelicznik', PrintConv => { 'Horizontal differencing' => 'W oparciu o różnicÄ™ w poziomie', 'None' => 'Bez przelicznika', }, }, 'Preview0' => 'PodglÄ…d 0', 'Preview1' => 'PodglÄ…d 1', 'Preview2' => 'PodglÄ…d 2', 'PreviewColorSpace' => { PrintConv => { 'Unknown' => 'Nieznany', }, }, 'PreviewImage' => 'PodglÄ…d', 'PreviewImageBorders' => 'Ramka podglÄ…du', 'PreviewImageData' => 'Dane podglÄ…du obrazu', 'PreviewImageLength' => 'DÅ‚ugość miniatury z podglÄ…dem', 'PreviewImageSize' => 'Rozmiar podglÄ…du', 'PreviewImageStart' => 'PoczÄ…tek miniatury z podglÄ…dem', 'PrimaryChromaticities' => 'Tonalność kolorów podstawowych', 'ProcessingSoftware' => 'Oprogramowanie wykorzystane do przetwarzania', 'ProductID' => 'ID produktu', 'ProfileCMMType' => 'Typ profilu CMM', 'ProfileClass' => { Description => 'Klasa profilu', PrintConv => { 'Abstract Profile' => 'Profil abstrakcyjny', 'ColorSpace Conversion Profile' => 'Profil konwersji przestrzeni barw', 'DeviceLink Profile' => 'Profil DeviceLink', 'Display Device Profile' => 'Profil urzÄ…dzenia wyÅ›wietlajÄ…cego', 'Input Device Profile' => 'Profil urzÄ…dzenia wejÅ›ciowego', 'NamedColor Profile' => 'Nazwany profil kolorów', 'Nikon Input Device Profile (NON-STANDARD!)' => 'Profil Nikon ("nkpf")', 'Output Device Profile' => 'Profil urzÄ…dzenia wyjÅ›ciowego', }, }, 'ProfileConnectionSpace' => 'Profil Connection Space', 'ProfileDateTime' => 'Data i czas profilu', 'ProfileDescription' => 'Opis profilu', 'ProfileDescriptionML' => 'WielojÄ™zyczny opis profilu.', 'ProfileSequenceDesc' => 'Opis sekwencji profilu', 'ProfileType' => { Description => 'Typ profilu', PrintConv => { 'Unspecified' => 'Nie podany', }, }, 'ProfileVersion' => 'Wersja profilu', 'ProgramLine' => 'Linia programu', 'ProgramMode' => { PrintConv => { 'None' => 'Brak', }, }, 'Province-State' => 'Region', 'Quality' => { Description => 'Jakość', PrintConv => { 'Best' => 'Najlepsza', 'Better' => 'Lepsza', 'Good' => 'Dobra', 'Low' => 'Niska jakość', 'Normal' => 'Standardowa jakość', }, }, 'Rating' => 'Ocena', 'RatingPercent' => 'Ocena procentowo', 'RawImageSize' => 'Rozmiar obrazu RAW', 'RecordMode' => 'Tryb zapisu', 'RedBalance' => 'Balans czerwonego', 'RedMatrixColumn' => 'Kolumna matrycy czerwieni', 'RedTRC' => 'Krzywa reprodukcji czerwieni', 'ReferenceBlackWhite' => 'Para wartoÅ›ci odniesienia dla czarno-biaÅ‚ego obrazu', 'RelatedImageFileFormat' => 'Format pliku powiÄ…zanego zdjÄ™cia', 'RelatedImageHeight' => 'DÅ‚ugość powiÄ…zanego zdjÄ™cia', 'RelatedImageWidth' => 'Szerokość powiÄ…zanego zdjÄ™cia', 'RelatedSoundFile' => 'PowiÄ…zany plik audio', 'ResolutionUnit' => { Description => 'Jednostka rozdzielczoÅ›ci X i Y', PrintConv => { 'None' => 'Brak', 'cm' => 'centymetry', 'inches' => 'Cal', }, }, 'RetouchHistory' => { PrintConv => { 'None' => 'Brak', }, }, 'Rotation' => { Description => 'Obrót', PrintConv => { 'Horizontal' => '0° (góra/lewo)', 'Horizontal (Normal)' => '0° (góra/lewo)', 'Horizontal (normal)' => '0° (góra/lewo)', 'Rotate 180' => '180° (dół/prawo)', 'Rotate 270 CW' => '90° CW (lewo/dół)', 'Rotate 90 CW' => '90° CCW (prawo/góra)', 'Rotated 180' => '180° (dół/prawo)', 'Rotated 270 CW' => '90° CW (lewo/dół)', 'Rotated 90 CW' => '90° CCW (prawo/góra)', }, }, 'RowsPerStrip' => 'Liczba rzÄ™dów w pasku', 'SRFocalLength' => 'DÅ‚ugość fokalna SR', 'SRResult' => 'Stabilizacja obrazu', 'SampleFormat' => { Description => 'Format próbki', PrintConv => { 'Float' => 'Zmienno przecinkowa', 'Signed' => 'CaÅ‚kowita ze znakiem', 'Undefined' => 'Nie podano', 'Unsigned' => 'CaÅ‚kowita bez znaku', }, }, 'SamplesPerPixel' => 'Liczba skÅ‚adników', 'Saturation' => { Description => 'Nasycenie', PrintConv => { 'High' => 'Wysokie nasycenie', 'Low' => 'Niskie nasycenie', 'Normal' => 'Standardowy', }, }, 'SceneCaptureType' => { Description => 'UjÄ™cie z programem tematycznym', PrintConv => { 'Landscape' => 'Krajobraz', 'Night' => 'Sceny nocne', 'Portrait' => 'Portret', 'Standard' => 'Standardowy', }, }, 'SceneMode' => { Description => 'Tryby tematyczne', PrintConv => { 'Sunset' => 'Zachód sÅ‚oÅ„ca', }, }, 'SceneType' => { Description => 'Rodzaj sceny', PrintConv => { 'Directly photographed' => 'ZdjÄ™cie uzyskane bezpoÅ›rednio', }, }, 'SensingMethod' => { Description => 'Metoda pomiaru', PrintConv => { 'Color sequential area' => 'Sekwencyjny sensor obszaru koloru', 'Color sequential linear' => 'Sekwencyjny liniowy sensor koloru', 'One-chip color area' => 'Jednoprocesorowy sensor obszaru koloru', 'Three-chip color area' => 'Trójprocesorowy sensor obszaru koloru', 'Trilinear' => 'Trój liniowy sensor', 'Two-chip color area' => 'Dwuprocesorowy sensor obszaru koloru', }, }, 'SensitivityAdjust' => 'Regulacja czuÅ‚oÅ›ci', 'SensitivitySteps' => 'Krok ustawienia czuÅ‚oÅ›ci', 'SequentialShot' => { PrintConv => { 'None' => 'Brak', }, }, 'SerialNumber' => 'ID aparatu fotograficznego', 'ServiceIdentifier' => 'Identyfikator usÅ‚ugi', 'ShadingCompensation' => 'Kompensacja zacienienia', 'Sharpness' => { Description => 'Ostrość', PrintConv => { 'Hard' => 'Ostry', 'Normal' => 'Standardowy', 'Soft' => 'MiÄ™kki', }, }, 'ShootingMode' => 'Tryb fotografowania', 'ShutterCount' => 'Licznik migawki', 'ShutterSpeed' => 'Czas ekspozycji', 'ShutterSpeedValue' => 'PrÄ™dkość migawki', 'SlaveFlashMeteringSegments' => 'Segmenty pomiarowe lampy podrzÄ™dnej', 'SlowShutter' => { PrintConv => { 'None' => 'Brak', }, }, 'Software' => 'Oprogramowanie', 'Source' => 'ŹródÅ‚o', 'SpatialFrequencyResponse' => 'Przestrzenno - czÄ™stotliwoÅ›ciowa charakterystyka', 'SpecialEffectsOpticalFilter' => { PrintConv => { 'None' => 'Brak', }, }, 'SpectralSensitivity' => 'CzuÅ‚ość spektralna', 'State' => 'Region', 'StripByteCounts' => 'Bajtów na skompresowany pasek', 'StripOffsets' => 'Lokalizacja danych zdjÄ™cia', 'SubSecTime' => '"Data i godzina, subsekundy"', 'SubSecTimeDigitized' => '"Cyfrowa data i godzina, subsekundy"', 'SubSecTimeOriginal' => '"Pierwotna data i godzina, sub-sekundy"', 'SubfileType' => { Description => 'Typ podsekcji', PrintConv => { 'Full-resolution Image' => 'Obraz w peÅ‚nej rozdzielczoÅ›ci', 'Reduced-resolution image' => 'Obraz o zredukowanej rozdzielczoÅ›ci', 'Single page of multi-page image' => 'Jedna strona obrazu wielostronicowego', 'Single page of multi-page reduced-resolution image' => 'Jedna strona obrazu wielostronicowego o zredukowanej rozdzielczoÅ›ci', 'TIFF/IT final page' => 'Ostatnia strona TIFF/IT', 'Transparency mask' => 'Maska przezroczystoÅ›ci', 'Transparency mask of multi-page image' => 'Maska przezroczystoÅ›ci obrazu wielostronicowego', 'Transparency mask of reduced-resolution image' => 'Maska przezroczystoÅ›ci obrazu o zredukowanej rozdzielczoÅ›ci', 'Transparency mask of reduced-resolution multi-page image' => 'Maska przezroczystoÅ›ci obrazu wielostronicowego o zredukowanej rozdzielczoÅ›ci', 'invalid' => 'Błędny', }, }, 'SubjectArea' => 'Obszar obiektu', 'SubjectDistance' => 'OdlegÅ‚ość od obiektu', 'SubjectDistanceRange' => { Description => 'Zakres odlegÅ‚oÅ›ci do obiektu', PrintConv => { 'Close' => 'Zbliżenie', 'Distant' => 'OdlegÅ‚y plan', 'Macro' => 'Makro', }, }, 'SubjectLocation' => 'Lokalizacja obiektu', 'SubjectProgram' => { PrintConv => { 'None' => 'Brak', }, }, 'SupplementalCategories' => 'Kategorie dodatkowe', 'SvISOSetting' => 'Ustawienia ISO Sv', 'T6Options' => { PrintConv => { 'Uncompressed' => 'Nieskompresowany', }, }, 'TargetPrinter' => 'Docelowa drukarka', 'Technology' => { Description => 'Technologia', PrintConv => { 'Active Matrix Display' => 'WyÅ›wietlacz z matrycÄ… aktywnÄ…', 'Cathode Ray Tube Display' => 'WyÅ›wietlacz kineskopowy', 'Digital Camera' => 'Aparat cyfrowy', 'Dye Sublimation Printer' => 'Drukarka termosublimacyjna', 'Electrophotographic Printer' => 'Drukarka laserowa', 'Film Scanner' => 'Skaner do filmów', 'Film Writer' => 'Zapis na filmie', 'Ink Jet Printer' => 'Drukarka atramentowa', 'Passive Matrix Display' => 'WyÅ›wietlacz z matrycÄ… pasywnÄ…', 'Photo CD' => 'Foto-CD', 'Photographic Paper Printer' => 'Drukarka z papierem fotograficznym', 'Projection Television' => 'Projektor telewizyjny', 'Reflective Scanner' => 'Skaner', 'Video Camera' => 'Kamera wideo', 'Video Monitor' => 'Monitor wideo', }, }, 'Teleconverter' => { PrintConv => { 'None' => 'Brak', }, }, 'Text' => 'Tekst', 'Thresholding' => 'Progowanie', 'ThumbnailImage' => 'Miniatura', 'ThumbnailImageSize' => 'Rozmiar miniaturki', 'TileByteCounts' => 'Liczba bajtów na kafelek', 'TileLength' => 'Wysokość kafelka', 'TileOffsets' => 'PrzesuniÄ™cie kafelków', 'TileWidth' => 'Szerokość kafelka', 'Time' => 'Czas', 'Title' => 'TytuÅ‚', 'ToneCurve' => 'Krzywa barwy', 'ToneCurves' => 'Krzywe barwy', 'ToningEffectMonochrome' => { PrintConv => { 'None' => 'Brak', }, }, 'Track' => 'Åšcieżka', 'TransferFunction' => 'Funkcja transferu', 'Transformation' => { Description => 'PrzeksztaÅ‚cenie', PrintConv => { 'Horizontal (normal)' => '0° (góra/lewo)', 'Mirror horizontal' => '0° (góra/prawo)', 'Mirror horizontal and rotate 270 CW' => '90° CW (lewo/góra)', 'Mirror horizontal and rotate 90 CW' => '90° CCW (prawo/dół)', 'Mirror vertical' => '180° (dół/lewo)', 'Rotate 180' => '180° (dół/prawo)', 'Rotate 270 CW' => '90° CW (lewo/dół)', 'Rotate 90 CW' => '90° CCW (prawo/góra)', }, }, 'TransmissionReference' => 'OdnoÅ›nik transmisji', 'TvExposureTimeSetting' => 'Ustawienia czasu ekspozycji TV', 'Uncompressed' => 'Nieskompresowany', 'UniqueCameraModel' => 'Unikatowy model aparatu', 'Unknown' => 'Nieznany', 'Urgency' => 'Priorytet', 'UserComment' => 'Komentarz użytkownika', 'VersionYear' => 'Rok wersji', 'VideoCardGamma' => 'Gamma karty graficznej', 'WBAdjLighting' => { PrintConv => { 'None' => 'Brak', }, }, 'WB_RGGBLevelsCloudy' => 'Poziomy WB RGGB - zachmurzenie ', 'WB_RGGBLevelsDaylight' => 'Poziomy WB RGGB - Å›wiatÅ‚o dzienne ', 'WB_RGGBLevelsFlash' => 'Poziomy WB RGGB - lampa bÅ‚yskowa ', 'WB_RGGBLevelsFluorescentD' => 'Poziomy WB RGGB - Å›wiatÅ‚o fluorescencyjne ', 'WB_RGGBLevelsFluorescentN' => 'Poziomy WB RGGB - Å›wiatÅ‚o fluorescencyjne N ', 'WB_RGGBLevelsFluorescentW' => 'Poziomy WB RGGB - Å›wiatÅ‚o fluorescencyjne W ', 'WB_RGGBLevelsShade' => 'Poziomy WB RGGB - cieÅ„ ', 'WB_RGGBLevelsTungsten' => 'Poziomy WB RGGB - Å›wiatÅ‚o żarowe ', 'WhiteBalance' => { Description => 'Balans bieli', PrintConv => { 'Auto' => 'Automatyczny balans bieli', 'Black & White' => 'Monochromatyczny', 'Cloudy' => 'Pochmurna pogoda', 'Cool White Fluorescent' => 'Jarzeniówka z zimnym biaÅ‚ym Å›wiatÅ‚em', 'Custom 1' => 'WÅASNE 1', 'Custom 2' => 'WÅASNE 2', 'Custom 3' => 'WÅASNE 3', 'Custom 4' => 'WÅASNE 4', 'Day White Fluorescent' => 'Jarzeniówka z naturalnym biaÅ‚ym Å›wiatÅ‚em', 'Daylight' => 'ÅšwiatÅ‚o dzienne', 'Daylight Fluorescent' => 'Jarzeniówka ze Å›wiatÅ‚em dziennym', 'Fluorescent' => 'Jarzeniowy', 'Manual' => 'Manualny balans bieli', 'Shade' => 'CieÅ„', 'Tungsten' => 'ÅšwiatÅ‚o żarówek', }, }, 'WhiteBalanceMode' => { Description => 'Tryb balansu bieli', PrintConv => { 'Auto (Cloudy)' => 'Automatyczny (zachmurzenie)', 'Auto (Day White Fluorescent)' => 'Automatyczny (biaÅ‚e fluorescencyjne Å›wiatÅ‚o dzienne)', 'Auto (Daylight Fluorescent)' => 'Automatyczny (fluorescencyjne Å›wiatÅ‚o dzienne)', 'Auto (Daylight)' => 'Automatyczny (Å›wiatÅ‚o dzienne)', 'Auto (Flash)' => 'Automatyczny (lampa bÅ‚yskowa)', 'Auto (Shade)' => 'Automatyczny (cieÅ„)', 'Auto (Tungsten)' => 'Automatyczny (Å›wiatÅ‚o żarowe)', 'Auto (White Fluorescent)' => 'Automatyczny (biaÅ‚e Å›wiatÅ‚o fluorescencyjne)', 'Unknown' => 'Automatyczny (nie wykryty)', 'User-Selected' => 'Użytkownika', }, }, 'WhiteBalanceSet' => 'Ustawienie balansu bieli', 'WhitePoint' => 'Chromatyczność biaÅ‚ego punktu', 'WorldTimeLocation' => { Description => 'Miejsca czasu Å›wiatowego', PrintConv => { 'Destination' => 'Przeznaczenie', 'Hometown' => 'Miasto domowe', }, }, 'Writer-Editor' => 'Autor podpisu', 'XClipPathUnits' => 'Jednostki wzdÅ‚uż osi X dla Å›cieżki obciÄ™cia', 'XPosition' => 'WspółrzÄ™dna X', 'XResolution' => 'Rozdzielczość obrazu w poziomie', 'YCbCrCoefficients' => 'Współczynniki matrycy transformacji przestrzeni barwowej', 'YCbCrPositioning' => { Description => 'Pozycje Y i C', PrintConv => { 'Centered' => 'WyÅ›rodkowane', 'Co-sited' => 'Obok siebie (?)', }, }, 'YCbCrSubSampling' => 'Współczynnik podpróbkowania(?) Y do C', 'YClipPathUnits' => 'Jednostki wzdÅ‚uż osi Y dla Å›cieżki obciÄ™cia', 'YPosition' => 'WspółrzÄ™dna Y', 'YResolution' => 'Rozdzielczość obrazu w pionie', 'Year' => 'Rok', ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::pl.pm - ExifTool Polish language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke, Przemyslaw Sulek and Kacper Perschke for providing this translation. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut ���������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/ru.pm��������������������������������������������������000644 �000765 �000024 �00000113237 12642461343 021565� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: ru.pm # # Description: ExifTool Russian language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::ru; use strict; use vars qw($VERSION); $VERSION = '1.04'; %Image::ExifTool::Lang::ru::Translate = ( 'ActiveArea' => 'ÐÐºÑ‚Ð¸Ð²Ð½Ð°Ñ Ð¾Ð±Ð»Ð°Ñть', 'Album' => 'Ðльбом', 'AnalogBalance' => 'Ðналоговый Ð±Ð°Ð»Ð°Ð½Ñ Ð±ÐµÐ»Ð¾Ð³Ð¾', 'AntiAliasStrength' => 'ОтноÑÐ¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñила Ñглаживающего фильтра ÑенÑора', 'Aperture' => 'Диафрагма', 'ApertureValue' => 'Диафрагма', 'Artist' => 'ИÑполнитель', 'AsShotICCProfile' => 'ICC профиль Ñнимка', 'AsShotNeutral' => 'Ðейтральный цвет при Ñъёмке', 'AsShotPreProfileMatrix' => 'ÐŸÑ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñ†Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ð¼Ð°Ñ‚Ñ€Ð¸Ñ†Ð° Ñнимка', 'AsShotProfileName' => 'Ð˜Ð¼Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ, аÑÑоциированного Ñо Ñнимком', 'AsShotWhiteXY' => 'Ðейтральный цвет x,y', 'Author' => 'Ðвтор', 'AuthorsPosition' => 'ДолжноÑть автора', 'BaselineExposure' => 'Ð‘Ð°Ð·Ð¾Ð²Ð°Ñ ÑкÑпозициÑ', 'BaselineNoise' => 'Базовый шум', 'BaselineSharpness' => 'Ð‘Ð°Ð·Ð¾Ð²Ð°Ñ Ñ‡Ñ‘Ñ‚ÐºÐ¾Ñть', 'BayerGreenSplit' => 'Разделение зелёных каналов в матрице Байера', 'BestQualityScale' => 'МаÑштаб Ñ Ð½Ð°Ð¸Ð»ÑƒÑ‡ÑˆÐ¸Ð¼ качеÑтвом', 'BitsPerSample' => 'КоличеÑтво бит на компонент', 'BlackLevel' => 'Уровень чёрного', 'BlackLevelDeltaH' => 'Горизонтальное раÑпределение ÑƒÑ€Ð¾Ð²Ð½Ñ Ñ‡Ñ‘Ñ€Ð½Ð¾Ð³Ð¾', 'BlackLevelDeltaV' => 'Вертикальное раÑпределение ÑƒÑ€Ð¾Ð²Ð½Ñ Ñ‡Ñ‘Ñ€Ð½Ð¾Ð³Ð¾', 'BlackLevelRepeatDim' => 'Размер матрицы уровней чёрного', 'Brightness' => 'ЯркоÑть', 'By-line' => 'Ðвтор', 'CFALayout' => { Description => 'Структура CFA', PrintConv => { 'Even columns offset down 1/2 row' => 'Смещённое раÑположение A: чётные Ñтолбцы Ñмещены вниз на полпикÑела', 'Even columns offset up 1/2 row' => 'Смещённое раÑположение B: чётные Ñтолбцы Ñмещены вверх на полпикÑела', 'Even rows offset left 1/2 column' => 'Смещённое раÑположение D: чётные Ñтроки Ñмещены влево на полпикÑела', 'Even rows offset right 1/2 column' => 'Смещённое раÑположение C: чётные Ñтроки Ñмещены вправо на полпикÑела', 'Rectangular' => 'ПрÑмоугольное (или квадратное) раÑположение Ñлементов', }, }, 'CFAPattern' => 'CFA карта', 'CalibrationIlluminant1' => { Description => 'Калибровочный иллюминант â„–1', PrintConv => { 'Cloudy' => 'ОблачноÑть', 'Cool White Fluorescent' => 'ФлуореÑцентный белый холодный (W 3800 - 4500K)', 'Day White Fluorescent' => 'ФлуореÑцентный белый дневной', 'Daylight' => 'Дневной Ñвет', 'Daylight Fluorescent' => 'ФлуореÑцентный белый дневного Ñвета (D 5700 - 7100K)', 'Fine Weather' => 'ЯÑÐ½Ð°Ñ Ð¿Ð¾Ð³Ð¾Ð´Ð°', 'Flash' => 'Ð’Ñпышка', 'Fluorescent' => 'ФлуореÑцентный', 'ISO Studio Tungsten' => 'ISO Ð´Ð»Ñ Ñтудийных ламп накаливаниÑ', 'Other' => 'другой иÑточник Ñвета', 'Shade' => 'Тень', 'Standard Light A' => 'Стандартный Ñвет A', 'Standard Light B' => 'Стандартный Ñвет B', 'Standard Light C' => 'Стандартный Ñвет C', 'Tungsten (Incandescent)' => 'Лампа Ð½Ð°ÐºÐ°Ð»Ð¸Ð²Ð°Ð½Ð¸Ñ (Ñркий Ñвет)', 'Unknown' => 'неизвеÑтно', 'Warm White Fluorescent' => 'ФлуореÑцентный теплый белый (L 2600 - 3250K)', 'White Fluorescent' => 'ФлуореÑцентный белый (WW 3250 - 3800K)', }, }, 'CalibrationIlluminant2' => { Description => 'Калибровочный иллюминант â„–2', PrintConv => { 'Cloudy' => 'ОблачноÑть', 'Cool White Fluorescent' => 'ФлуореÑцентный белый холодный (W 3800 - 4500K)', 'Day White Fluorescent' => 'ФлуореÑцентный белый дневной', 'Daylight' => 'Дневной Ñвет', 'Daylight Fluorescent' => 'ФлуореÑцентный белый дневного Ñвета (D 5700 - 7100K)', 'Fine Weather' => 'ЯÑÐ½Ð°Ñ Ð¿Ð¾Ð³Ð¾Ð´Ð°', 'Flash' => 'Ð’Ñпышка', 'Fluorescent' => 'ФлуореÑцентный', 'ISO Studio Tungsten' => 'ISO Ð´Ð»Ñ Ñтудийных ламп накаливаниÑ', 'Other' => 'другой иÑточник Ñвета', 'Shade' => 'Тень', 'Standard Light A' => 'Стандартный Ñвет A', 'Standard Light B' => 'Стандартный Ñвет B', 'Standard Light C' => 'Стандартный Ñвет C', 'Tungsten (Incandescent)' => 'Лампа Ð½Ð°ÐºÐ°Ð»Ð¸Ð²Ð°Ð½Ð¸Ñ (Ñркий Ñвет)', 'Unknown' => 'неизвеÑтно', 'Warm White Fluorescent' => 'ФлуореÑцентный теплый белый (L 2600 - 3250K)', 'White Fluorescent' => 'ФлуореÑцентный белый (WW 3250 - 3800K)', }, }, 'CameraCalibration1' => 'ÐšÐ°Ð»Ð¸Ð±Ñ€Ð¾Ð²Ð¾Ñ‡Ð½Ð°Ñ Ð¼Ð°Ñ‚Ñ€Ð¸Ñ†Ð° фотоаппарата â„–1', 'CameraCalibration2' => 'ÐšÐ°Ð»Ð¸Ð±Ñ€Ð¾Ð²Ð¾Ñ‡Ð½Ð°Ñ Ð¼Ð°Ñ‚Ñ€Ð¸Ñ†Ð° фотоаппарата â„–2', 'CameraCalibrationSig' => 'Сигнатура калибровки фотоаппарата', 'CameraSerialNumber' => 'Серийный номер фотоаппарата', 'Caption-Abstract' => 'ПодпиÑÑŒ', 'CaptionWriter' => 'Ðвтор подпиÑи', 'Categories' => 'Категории', 'Category' => 'Категории', 'ChromaBlurRadius' => 'Ð Ð°Ð´Ð¸ÑƒÑ ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ñ†Ð²ÐµÑ‚Ð½Ð¾Ñти', 'City' => 'Город', 'ColorEffect' => { PrintConv => { 'Sepia' => 'СепиÑ', }, }, 'ColorFilter' => 'Цветовой фильтр', 'ColorMatrix1' => 'Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ð¼Ð°Ñ‚Ñ€Ð¸Ñ†Ð° â„–1', 'ColorMatrix2' => 'Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ð¼Ð°Ñ‚Ñ€Ð¸Ñ†Ð° â„–2', 'ColorMode' => { Description => 'ТворчеÑкийСтиль', PrintConv => { 'Autumn Leaves' => 'ОÑенние лиÑтьÑ', 'B&W' => 'Черно-белое', 'Clear' => 'Прозрачный', 'Deep' => 'Глубокий', 'Landscape' => 'Пейзаж', 'Light' => 'Бледный', 'Neutral' => 'Ðейтральный', 'Night View' => 'Ðочной вид', 'Night View/Portrait' => 'Ðочной портрет', 'Portrait' => 'Портрет', 'Standard' => 'Стандартное', 'Sunset' => 'Закат', 'Vivid' => 'Яркий цвет', }, }, 'ColorSpace' => { Description => 'Данные о цветовой Ñреде', PrintConv => { 'ICC Profile' => 'Профиль ICC', 'Uncalibrated' => 'Ðе калиброванный', }, }, 'ColorTemperature' => 'Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ñ‚ÐµÐ¼Ð¿ÐµÑ€Ð°Ñ‚ÑƒÑ€Ð°', 'ColorimetricReference' => 'КолориметричеÑкий Ñталон', 'Comment' => 'Комментарий', 'ComponentsConfiguration' => 'Значение каждого компонента', 'CompressedBitsPerPixel' => 'Режим ÑÐ¶Ð°Ñ‚Ð¸Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ', 'Compression' => { Description => 'Схема ÑжатиÑ', PrintConv => { 'JPEG' => 'JPEG Ñжатие', 'Uncompressed' => 'без ÑжатиÑ', }, }, 'Contrast' => { Description => 'КонтраÑтноÑть', PrintConv => { 'High' => 'Резко', 'Low' => 'МÑгко', 'Normal' => 'Стандарт', }, }, 'Copyright' => 'Владелец копирайта', 'CopyrightNotice' => 'Уведомление об авторÑких правах', 'Country' => 'Страна', 'Country-PrimaryLocationName' => 'Страна', 'CreateDate' => 'Дата ÑозданиÑ', 'CreationDate' => 'Дата ÑозданиÑ', 'Credit' => 'ФамилиÑ', 'CurrentICCProfile' => 'Текущий ICC профиль', 'CurrentPreProfileMatrix' => 'Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñ†Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ð¼Ð°Ñ‚Ñ€Ð¸Ñ†Ð°', 'CustomRendered' => { Description => 'Обработка Ñнимков по перÑональным наÑтройкам', PrintConv => { 'Custom' => '"ПроцеÑÑ, наÑтроенный пользователем"', 'Normal' => 'Ðормальный процеÑÑ', }, }, 'DNGBackwardVersion' => 'СовмеÑÑ‚Ð¸Ð¼Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ DNG', 'DNGLensInfo' => 'Минимальное фокуÑное раÑÑтоÑние', 'DNGVersion' => 'ВерÑÐ¸Ñ DNG', 'DateCreated' => 'Дата ÑозданиÑ', 'DateTimeOriginal' => 'ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ð´Ð°Ñ‚Ð° и времÑ', 'DefaultCropOrigin' => 'Положение обрезанного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾-умолчанию', 'DefaultCropSize' => 'Размер обрезанного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾-умолчанию', 'DefaultScale' => 'Стандартный маÑштаб', 'DeviceSettingDescription' => 'ОпиÑание наÑтроек уÑтройÑтва', 'DigitalZoom' => 'Цифровой зум', 'DigitalZoomRatio' => 'Показатель цифрового зума', 'Directory' => '"Файл, размещение"', 'DriveMode' => 'Режим ÑпуÑка', 'DynamicRangeOptimizer' => { Description => 'Оптим.Д-диапаз.', PrintConv => { 'Advanced Auto' => 'Улучш.авто', 'Advanced Lv1' => 'Улучш.уровень1', 'Advanced Lv2' => 'Улучш.уровень2', 'Advanced Lv3' => 'Улучш.уровень3', 'Advanced Lv4' => 'Улучш.уровень4', 'Advanced Lv5' => 'Улучш.уровень5', 'Auto' => 'Ðвто', 'Off' => 'Отключено', 'Standard' => 'Стандартное', }, }, 'ExifImageHeight' => 'ДопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð²Ñ‹Ñота Ñнимка', 'ExifImageWidth' => 'ДопуÑÑ‚Ð¸Ð¼Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° Ñнимка', 'ExifOffset' => 'Exif IFD указатель', 'ExifVersion' => 'Exif верÑиÑ', 'ExposureCompensation' => '"ЭкÑпозициÑ, калибровка"', 'ExposureIndex' => '"ЭкÑпозициÑ, показатель"', 'ExposureMode' => { Description => '"ЭкÑпозициÑ, режим"', PrintConv => { 'Auto' => 'ÐвтоÑкÑпозициÑ', 'Auto bracket' => 'ÐвтобрÑкетинг', 'Manual' => 'Ð ÑƒÑ‡Ð½Ð°Ñ ÑкÑпозициÑ', }, }, 'ExposureProgram' => { Description => 'ЭкÑÐ¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ', PrintConv => { 'Action (High speed)' => 'Экшен/боевик', 'Aperture-priority AE' => 'Приоритет диафрагмы', 'Bulb' => 'Лампа', 'Creative (Slow speed)' => 'ТворчеÑÐºÐ°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°', 'Landscape' => 'Пейзаж', 'Manual' => '"ЭкÑпозициÑ, ручнаÑ"', 'Portrait' => 'Портрет', 'Program AE' => 'ÐÐ¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°', 'Shutter speed priority AE' => 'Приоритет выдержки', }, }, 'ExposureTime' => 'Выдержка', 'FNumber' => 'Диафрагма', 'FaceOrientation' => { PrintConv => { 'Horizontal (normal)' => 'Положительное направление', 'Rotate 180' => 'Поворот на 180°', 'Rotate 270 CW' => 'Поворот на 270° по чаÑовой Ñтрелке', 'Rotate 90 CW' => 'Поворот на 90° по чаÑовой Ñтрелке', }, }, 'FileFormat' => 'Формат', 'FileModifyDate' => 'Дата обновлениÑ', 'FileName' => 'Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°', 'FileSize' => 'Размер файла', 'FileSource' => { Description => 'ИÑточник файла', PrintConv => { 'Digital Camera' => 'DSC', 'Film Scanner' => 'Сканнер проÑвечивающего типа', 'Reflection Print Scanner' => 'Сканнер отражающего типа', }, }, 'FileType' => 'Тип файла', 'Filename' => 'Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°', 'Flash' => { Description => 'Ð’Ñпышка', PrintConv => { 'Auto, Fired' => 'Вкл. (автоматичеÑÐºÐ°Ñ Ð²Ñпышка)', 'Auto, Fired, Red-eye reduction' => '"Вкл. (автоматичеÑÐºÐ°Ñ Ð²Ñпышка, Ñнижение Ñффекта «краÑных глаз»)"', 'Auto, Fired, Red-eye reduction, Return detected' => '"Вкл. (автоматичеÑÐºÐ°Ñ Ð²Ñпышка, Ñнижение Ñффекта «краÑных глаз», региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð½Ð¾Ð³Ð¾ луча)"', 'Auto, Fired, Return detected' => '"Вкл. (автоматичеÑÐºÐ°Ñ Ð²Ñпышка, региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð½Ð¾Ð³Ð¾ луча)"', 'Did not fire' => 'Ð’Ñпышка не Ñработала', 'Fired' => 'Ð’Ñпышка Ñработала', 'Fired, Red-eye reduction' => 'Вкл. (Ñнижение Ñффекта «краÑных глаз»)', 'Fired, Red-eye reduction, Return detected' => '"Вкл. (Ñнижение Ñффекта «краÑных глаз», региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð½Ð¾Ð³Ð¾ луча)"', 'Fired, Return detected' => 'Вкл. (региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð½Ð¾Ð³Ð¾ луча)', 'No Flash' => 'Ðет функции вÑпышки', 'On, Fired' => 'Вкл. (принудительнаÑ)', 'On, Red-eye reduction' => '"Вкл. (принудительнаÑ, Ñнижение Ñффекта «краÑных глаз»)"', 'On, Red-eye reduction, Return detected' => '"Вкл. (принудительнаÑ, Ñнижение Ñффекта «краÑных глаз», региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð½Ð¾Ð³Ð¾ луча)"', 'On, Return detected' => '"Вкл. (принудительнаÑ, региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð½Ð¾Ð³Ð¾ луча)"', }, }, 'FlashEnergy' => 'МощноÑть вÑпышки', 'FlashExposureComp' => 'ÐšÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ Ð²Ñпышки', 'FlashpixVersion' => 'ÐŸÐ¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Flashpix', 'FocalLength' => 'ФокуÑное раÑÑтоÑние', 'FocalLength35efl' => 'ФокуÑное раÑÑтоÑние (приведено к 35 мм)', 'FocalLengthIn35mmFormat' => 'ФокуÑное раÑÑтоÑние Ð´Ð»Ñ 35-мм фотопленки', 'FocalPlaneResolutionUnit' => { Description => 'Элемент Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð² фокальной плоÑкоÑти', PrintConv => { 'inches' => 'дюйм', }, }, 'FocalPlaneXResolution' => 'Разрешение в фокальной плоÑкоÑти по X', 'FocalPlaneYResolution' => 'Разрешение в фокальной плоÑкоÑти по Y', 'FocusMode' => 'ФокуÑировка', 'ForwardMatrix1' => 'ПрÑÐ¼Ð°Ñ Ð¼Ð°Ñ‚Ñ€Ð¸Ñ†Ð° â„–1', 'ForwardMatrix2' => 'ПрÑÐ¼Ð°Ñ Ð¼Ð°Ñ‚Ñ€Ð¸Ñ†Ð° â„–2', 'FrameRate' => 'ПлотноÑть кадров', 'FrameSize' => '"Кадр, размер"', 'GPSAltitude' => 'Ð’Ñ‹Ñота', 'GPSAltitudeRef' => { Description => 'Определение по выÑоте', PrintConv => { 'Above Sea Level' => 'Уровень морÑ', 'Below Sea Level' => 'Опорное значение ÑƒÑ€Ð¾Ð²Ð½Ñ Ð¼Ð¾Ñ€Ñ (негативное значение)', }, }, 'GPSAreaInformation' => 'Ðазвание облаÑти GPS', 'GPSDOP' => 'ТочноÑть измерениÑ', 'GPSDateStamp' => 'Дата GPS', 'GPSDestBearing' => 'Ðзимут пункта назначениÑ', 'GPSDestBearingRef' => 'ÐžÐ¿Ð¾Ñ€Ð½Ð°Ñ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð´Ð»Ñ Ð°Ð·Ð¸Ð¼ÑƒÑ‚Ð° пункта назначениÑ', 'GPSDestDistance' => 'РаÑÑтоÑние до пункта назначениÑ', 'GPSDestDistanceRef' => 'ÐžÐ¿Ð¾Ñ€Ð½Ð°Ñ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° раÑÑтоÑÐ½Ð¸Ñ Ð´Ð¾ пункта назначениÑ', 'GPSDestLatitude' => 'Широта пункта назначениÑ', 'GPSDestLatitudeRef' => 'ÐžÐ¿Ð¾Ñ€Ð½Ð°Ñ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð´Ð»Ñ ÑˆÐ¸Ñ€Ð¾Ñ‚Ñ‹ пункта назначениÑ', 'GPSDestLongitude' => 'Долгота пункта назначениÑ', 'GPSDestLongitudeRef' => 'ÐžÐ¿Ð¾Ñ€Ð½Ð°Ñ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð´Ð»Ñ Ð´Ð¾Ð»Ð³Ð¾Ñ‚Ñ‹ пункта назначениÑ', 'GPSDifferential' => { Description => 'Ð”Ð¸Ñ„Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ GPS', PrintConv => { 'Differential Corrected' => 'Ð”Ð¸Ñ„Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð°', 'No Correction' => 'Измерение без дифференциальной коррекции', }, }, 'GPSImgDirection' => 'Ðаправление изображениÑ', 'GPSImgDirectionRef' => 'ÐžÐ¿Ð¾Ñ€Ð½Ð°Ñ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð´Ð»Ñ Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ', 'GPSInfo' => 'IFD указатель информации GPS', 'GPSLatitude' => 'Широта', 'GPSLatitudeRef' => { Description => 'Ð¡ÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð¸Ð»Ð¸ ÑŽÐ¶Ð½Ð°Ñ ÑˆÐ¸Ñ€Ð¾Ñ‚Ð°', PrintConv => { 'North' => 'Ð¡ÐµÐ²ÐµÑ€Ð½Ð°Ñ ÑˆÐ¸Ñ€Ð¾Ñ‚Ð°', 'South' => 'Ð®Ð¶Ð½Ð°Ñ ÑˆÐ¸Ñ€Ð¾Ñ‚Ð°', }, }, 'GPSLongitude' => 'Долгота', 'GPSLongitudeRef' => { Description => 'ВоÑÑ‚Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð»Ð¸ Ð·Ð°Ð¿Ð°Ð´Ð½Ð°Ñ Ð´Ð¾Ð»Ð³Ð¾Ñ‚Ð°', PrintConv => { 'East' => 'ВоÑÑ‚Ð¾Ñ‡Ð½Ð°Ñ Ð´Ð¾Ð»Ð³Ð¾Ñ‚Ð°', 'West' => 'Ð—Ð°Ð¿Ð°Ð´Ð½Ð°Ñ Ð´Ð¾Ð»Ð³Ð¾Ñ‚Ð°', }, }, 'GPSMapDatum' => 'ИÑпользованы данные геодезичеÑких иÑÑледований', 'GPSMeasureMode' => { Description => 'Режим Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ GPS', PrintConv => { '3-Dimensional Measurement' => '3-мерное измерение', }, }, 'GPSProcessingMethod' => 'Ðазвание метода обработки GPS', 'GPSSatellites' => '"Спутники GPS, иÑпользуемые Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ"', 'GPSSpeed' => 'СкороÑть GPS-уÑтройÑтва', 'GPSSpeedRef' => { Description => 'СкороÑтной Ñлемент', PrintConv => { 'km/h' => 'Километры в чаÑ', 'knots' => 'Узлы', 'mph' => 'Мили в чаÑ', }, }, 'GPSStatus' => { Description => 'СоÑтоÑние GPS-уÑтройÑтва', PrintConv => { 'Measurement Active' => 'ПроизводитÑÑ Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ðµ', 'Measurement Void' => 'Ð’Ð·Ð°Ð¸Ð¼Ð½Ð°Ñ ÑовмеÑтимоÑть измерений', }, }, 'GPSTimeStamp' => 'GPS-Ð²Ñ€ÐµÐ¼Ñ (атомные чаÑÑ‹)', 'GPSTrack' => 'Ðаправление движениÑ', 'GPSTrackRef' => { Description => 'ÐžÐ¿Ð¾Ñ€Ð½Ð°Ñ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ', PrintConv => { 'Magnetic North' => 'Ðаправление магнитной Ñтрелки', 'True North' => 'ИÑтинное направление', }, }, 'GPSVersionID' => 'ВерÑÐ¸Ñ GPS-Ñ‚Ñга', 'GainControl' => { Description => 'Управление шагом', PrintConv => { 'High gain down' => 'С большим шагом вниз', 'High gain up' => 'С большим шагом вверх', 'Low gain down' => 'С малым шагом вниз', 'Low gain up' => 'С малым шагом вверх', 'None' => 'Ðет', }, }, 'Gamma' => 'Гамма', 'Gradation' => 'ВпечатлÑющ.режим', 'HDR' => { Description => 'Ðвто HDR', PrintConv => { 'Off' => 'Отключено', }, }, 'Headline' => 'Заголовок', 'HighISONoiseReduction' => { Description => 'NR выÑокого ISO', PrintConv => { 'Auto' => 'Ðвто', 'High' => 'Hi', 'Low' => 'Lo', 'Normal' => 'ÐормальнаÑ', 'Off' => 'Отключено', }, }, 'Hue' => 'Оттенок', 'ISO' => 'Значение ISO', 'ImageHeight' => 'Ð’Ñ‹Ñота Ñнимка', 'ImageSize' => '"Снимок, размер"', 'ImageStabilization' => { PrintConv => { 'CCD Shift' => 'ОптичеÑкий Ñтабилизатор', 'High Sensitivity' => 'Движение объекта Ñъёмки', 'Off' => 'Выкл', 'Off (1)' => 'Выкл (1)', }, }, 'ImageUniqueID' => 'Уникальный ID-код Ñнимка', 'ImageWidth' => 'Ширина Ñнимка', 'Index' => 'ИндекÑ', 'Instructions' => 'ИнÑтрукции', 'InteropIndex' => 'Ð˜Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð²Ð·Ð°Ð¸Ð¼Ð½Ð¾Ð¹ ÑовмеÑтимоÑти', 'InteropOffset' => 'ТÑг взаимной ÑовмеÑтимоÑти', 'InteropVersion' => 'ВерÑÐ¸Ñ Ð²Ð·Ð°Ð¸Ð¼Ð½Ð¾Ð¹ ÑовмеÑтимоÑти', 'JPEGQuality' => { Description => 'КачеÑтво изображениÑ', PrintConv => { 'Extra Fine' => 'СверхвыÑокое', 'Fine' => 'Ð’Ñ‹Ñокое', 'Standard' => 'Стандартное качеÑтво', }, }, 'Keywords' => 'Ключевые Ñлова', 'Lens' => 'Объектив', 'LensInfo' => 'Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± объективе', 'LightSource' => { Description => 'ИÑточник Ñвета', PrintConv => { 'Cloudy' => 'ОблачноÑть', 'Cool White Fluorescent' => 'ФлуореÑцентный белый холодный (W 3800 - 4500K)', 'Day White Fluorescent' => 'ФлуореÑцентный белый дневной', 'Daylight' => 'Дневной Ñвет', 'Daylight Fluorescent' => 'ФлуореÑцентный белый дневного Ñвета (D 5700 - 7100K)', 'Fine Weather' => 'ЯÑÐ½Ð°Ñ Ð¿Ð¾Ð³Ð¾Ð´Ð°', 'Flash' => 'Ð’Ñпышка', 'Fluorescent' => 'ФлуореÑцентный', 'ISO Studio Tungsten' => 'ISO Ð´Ð»Ñ Ñтудийных ламп накаливаниÑ', 'Other' => 'другой иÑточник Ñвета', 'Shade' => 'Тень', 'Standard Light A' => 'Стандартный Ñвет A', 'Standard Light B' => 'Стандартный Ñвет B', 'Standard Light C' => 'Стандартный Ñвет C', 'Tungsten (Incandescent)' => 'Лампа Ð½Ð°ÐºÐ°Ð»Ð¸Ð²Ð°Ð½Ð¸Ñ (Ñркий Ñвет)', 'Unknown' => 'неизвеÑтно', 'Warm White Fluorescent' => 'ФлуореÑцентный теплый белый (L 2600 - 3250K)', 'White Fluorescent' => 'ФлуореÑцентный белый (WW 3250 - 3800K)', }, }, 'Lightness' => 'ОÑвещенноÑть', 'LinearResponseLimit' => 'Предел линейного отклика', 'LinearizationTable' => 'Таблица линеаризации', 'LocalizedCameraModel' => 'Локализованное название фотоаппарата', 'Location' => 'МеÑто Ñъемки', 'LongExposureNoiseReduction' => { Description => 'NR долгой ÑкÑп.', PrintConv => { 'Off' => 'Отключено', 'On' => 'Включено', }, }, 'Make' => 'Изготовитель', 'MakerNote' => 'Приватные данные DNG', 'MakerNoteSafety' => { Description => 'БезопаÑноÑть «примечаний производителÑ»', PrintConv => { 'Safe' => 'БезопаÑно', 'Unsafe' => 'ÐебезопаÑно', }, }, 'MakerNotes' => 'Данные производителей', 'MaskedAreas' => 'Ðеактивные облаÑти', 'MaxAperture' => 'МакÑ. диафрагма объектива', 'MeteringMode' => { Description => 'ЭкÑпозамер', PrintConv => { 'Average' => 'Средний', 'Center-weighted average' => 'Центрально-взвешенный Ñредний', 'Multi-segment' => 'Узор', 'Multi-spot' => 'Многозональный', 'Other' => 'Другое', 'Partial' => 'ЧаÑтичный', 'Spot' => 'Точечный', 'Unknown' => 'неизвеÑтно', }, }, 'Model' => 'Камера', 'ModifyDate' => '"Файл, изменить дату и времÑ"', 'MultiFrameNoiseReduction' => { Description => 'Многокадр. шумоподавл.', PrintConv => { 'Off' => 'Отключено', 'On' => 'Включено', }, }, 'NoiseReduction' => 'Шумоподавление', 'NoiseReductionApplied' => 'Применённое шумоподавление', 'Opto-ElectricConvFactor' => 'Фактор оптико-ÑлектричеÑкого преобразованиÑ', 'Orientation' => { Description => 'ОриентациÑ', PrintConv => { 'Horizontal (normal)' => 'Положительное направление', 'Rotate 180' => 'Поворот на 180°', 'Rotate 270 CW' => 'Поворот на 270° по чаÑовой Ñтрелке', 'Rotate 90 CW' => 'Поворот на 90° по чаÑовой Ñтрелке', }, }, 'OriginalRawFileData' => 'ИÑходные данные raw-файла', 'OriginalRawFileDigest' => 'Сигнатура иÑходного Raw-файла', 'OriginalRawFileName' => 'ИÑходное Ð¸Ð¼Ñ Raw-файла', 'PhotometricInterpretation' => 'СоÑтав пикÑела', 'PlanarConfiguration' => { Description => 'ÐžÑ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… изображениÑ', PrintConv => { 'Chunky' => 'крупный формат', 'Planar' => 'планарный формат', }, }, 'PreviewApplicationName' => 'Ð˜Ð¼Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð¿Ñ€Ð¾Ñмотра', 'PreviewApplicationVersion' => 'ВерÑÐ¸Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð¿Ñ€Ð¾Ñмотра', 'PreviewColorSpace' => { Description => 'Цветовое проÑтранÑтво предпроÑмотра', PrintConv => { 'Unknown' => 'ÐеизвеÑтно', }, }, 'PreviewDateTime' => 'Дата и Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€ÐµÐ´Ð¿Ñ€Ð¾Ñмотра', 'PreviewSettingsDigest' => 'Сигнатура наÑтроек предпроÑмотра', 'PreviewSettingsName' => 'Ðазвание наÑтроек предпроÑмотра', 'PrimaryChromaticities' => 'ТональноÑть оÑновных цветов', 'ProfileCalibrationSig' => 'Сигнатура калибровки профилÑ', 'ProfileCopyright' => 'ÐвторÑкие права профилÑ', 'ProfileEmbedPolicy' => { Description => 'Политика Ð²Ð½ÐµÐ´Ñ€ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ', PrintConv => { 'Allow Copying' => 'Разрешено копирование', 'Embed if Used' => 'Внедрить еÑли иÑпользован', 'Never Embed' => 'Ðикогда не внедрÑть', 'No Restrictions' => 'Ðет ограничений', }, }, 'ProfileHueSatMapData1' => 'Даные Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ñ‚ÐµÐ½ÐºÐ°/наÑыщенноÑти â„–1', 'ProfileHueSatMapData2' => 'Даные Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ñ‚ÐµÐ½ÐºÐ°/наÑыщенноÑти â„–2', 'ProfileHueSatMapDims' => 'КоличеÑтво образцов оттенков', 'ProfileLookTableData' => 'Данные таблицы проÑмотра', 'ProfileLookTableDims' => 'КоличеÑтво образцов оттенков', 'ProfileName' => 'Ð˜Ð¼Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ', 'ProfileToneCurve' => 'ÐšÑ€Ð¸Ð²Ð°Ñ ÑрокÑти профилÑ', 'Province-State' => 'ОблаÑть/район', 'Quality' => { Description => 'КачеÑтво изображениÑ', PrintConv => { 'Compressed RAW' => 'cRAW', 'Compressed RAW + JPEG' => 'cRAW+JPEG', 'Extra Fine' => 'СверхвыÑокое', 'Fine' => 'Ð’Ñ‹Ñокое', 'Low' => 'Ðизкое качеÑтво', 'Normal' => 'Стандартное качеÑтво', 'RAW + JPEG' => 'RAW+JPEG', 'Standard' => 'Стандартное', }, }, 'RawDataUniqueID' => 'Уникальный идентификатор файла', 'RawImageDigest' => 'Сигнатура RAW-файла', 'RecordMode' => 'Режим запиÑи', 'ReductionMatrix1' => 'Матрица редукции â„–1', 'ReductionMatrix2' => 'Матрица редукции 2', 'ReferenceBlackWhite' => 'Пара опорных значений черного и белого', 'RelatedImageFileFormat' => 'Формат файла ÑвÑзанного Ñнимка', 'RelatedImageHeight' => 'Длина ÑвÑзанного Ñнимка', 'RelatedImageWidth' => 'Ширина ÑвÑзанного Ñнимка', 'RelatedSoundFile' => 'СвÑзанный аудио-файл', 'ResolutionUnit' => { Description => 'Элемент Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ð¾ X и Y', PrintConv => { 'cm' => 'Ñантиметры', 'inches' => 'дюймы', }, }, 'RowInterleaveFactor' => 'Ширина Ñ‡ÐµÑ€ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтрок', 'RowsPerStrip' => 'ЧиÑло Ñ€Ñдов в полоÑе', 'SamplesPerPixel' => 'КоличеÑтво компонентов', 'Saturation' => { Description => 'ÐаÑыщенноÑть', PrintConv => { 'High' => 'Ð’Ñ‹ÑÐ¾ÐºÐ°Ñ Ð½Ð°ÑыщенноÑть', 'Low' => 'ÐÐ¸Ð·ÐºÐ°Ñ Ð½Ð°ÑыщенноÑть', 'Normal' => 'Стандартный', }, }, 'SceneCaptureType' => { Description => 'Ð¡ÑŽÐ¶ÐµÑ‚Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°', PrintConv => { 'Landscape' => 'Пейзаж', 'Night' => 'ÐÐ¾Ñ‡Ð½Ð°Ñ Ñъемка', 'Portrait' => 'Портрет', 'Standard' => 'Стандартный', }, }, 'SceneMode' => { Description => 'Выбор Ñцены', PrintConv => { '3D Sweep Panorama' => '3D', 'Anti Motion Blur' => 'УÑтр. размыт. движ.', 'Auto' => 'Ðвто', 'Cont. Priority AE' => 'Ðепрер. приор. ÐЭ', 'Handheld Night Shot' => 'ÐÐ¾Ñ‡Ð½Ð°Ñ Ñъемка Ñ Ñ€ÑƒÐº', 'Landscape' => 'Пейзаж', 'Macro' => 'МакроÑъёмка', 'Night Portrait' => 'Ðочной портрет', 'Night Scene' => 'Ðочной вид', 'Night View/Portrait' => 'Ðочной вид/портрет', 'Portrait' => 'Портрет', 'Sports' => 'Спортивные Ñцены', 'Sunset' => 'Закат', 'Sweep Panorama' => 'Панорамный обзор', }, }, 'SceneType' => { Description => 'Тип Ñюжета', PrintConv => { 'Directly photographed' => 'ÐепоÑредÑтвенно полученный Ñнимок', }, }, 'SensingMethod' => { Description => 'Метод региÑтрации', PrintConv => { 'Color sequential area' => 'ПоÑледовательный ÑенÑор цветовой облаÑти', 'Color sequential linear' => 'ПоÑледовательный линейный цветовой ÑенÑор', 'One-chip color area' => 'ОднопроцеÑÑорный ÑенÑор цветовой облаÑти', 'Three-chip color area' => 'ТрехпроцеÑÑорный ÑенÑор цветовой облаÑти', 'Trilinear' => 'Трехлинейный цветовой ÑенÑор', 'Two-chip color area' => 'ДвухпроцеÑÑорный ÑенÑор цветовой облаÑти', }, }, 'SerialNumber' => 'ID-код фотокамеры', 'ShadingCompensation' => 'УÑтранение теней', 'ShadowScale' => 'Диапазон теней', 'Sharpness' => { Description => 'РезкоÑть', PrintConv => { 'Hard' => 'Резкий', 'Normal' => 'Стандартный', 'Soft' => 'МÑгкий', }, }, 'ShootingMode' => 'Режим Ñъемки', 'ShutterSpeed' => 'Выдержка', 'ShutterSpeedValue' => 'Выдержка', 'Software' => 'Ð˜Ð¼Ñ Ð¸ верÑÐ¸Ñ ÐŸÐž', 'Source' => 'ИÑточник', 'SpatialFrequencyResponse' => 'ПроÑтранÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ Ñ‡Ð°ÑÑ‚Ð¾Ñ‚Ð½Ð°Ñ Ñ…Ð°Ñ€Ð°ÐºÑ‚ÐµÑ€Ð¸Ñтика', 'SpectralSensitivity' => 'Ð¡Ð¿ÐµÐºÑ‚Ñ€Ð°Ð»ÑŒÐ½Ð°Ñ Ñ‡ÑƒÐ²ÑтвительноÑть', 'State' => 'ОблаÑть', 'StripByteCounts' => 'Байт на Ñжатую полоÑу', 'StripOffsets' => 'РаÑположение данных изображениÑ', 'SubSecTime' => '"Дата и времÑ, Ñуб-Ñекунды"', 'SubSecTimeDigitized' => '"Дата и Ð²Ñ€ÐµÐ¼Ñ Ñ†Ð¸Ñ„Ñ€Ð¾Ð²Ð¾Ðµ, Ñуб-Ñекунды"', 'SubSecTimeOriginal' => '"Дата и Ð²Ñ€ÐµÐ¼Ñ Ð¸Ñходное, Ñуб-Ñекунды"', 'SubTileBlockSize' => 'Размер блока в тайле', 'SubjectArea' => 'ОблаÑть объекта', 'SubjectDistance' => 'РаÑÑтоÑние до объекта', 'SubjectDistanceRange' => { Description => 'Диапазон раÑÑтоÑний до объекта', PrintConv => { 'Close' => 'Крупный план', 'Distant' => 'Удаленный план', 'Macro' => 'Макро', }, }, 'SubjectLocation' => 'РаÑположение объекта', 'SupplementalCategories' => 'Дополнительные категории', 'ThumbnailImage' => 'Пиктограмма', 'ThumbnailImageSize' => 'Размер пиктограмм', 'Title' => 'Заголовок', 'TransferFunction' => 'Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ½Ð¾Ñа', 'TransmissionReference' => 'СÑылка на иÑточник', 'UniqueCameraModel' => 'Ð£Ð½Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ фотоаппарата', 'Urgency' => 'ПриоритетноÑть', 'UserComment' => 'Комментарии пользователÑ', 'WhiteBalance' => { Description => 'Ð‘Ð°Ð»Ð°Ð½Ñ Ð±ÐµÐ»Ð¾Ð³Ð¾', PrintConv => { 'Auto' => 'ÐвтоматичеÑкий Ð±Ð°Ð»Ð°Ð½Ñ Ð±ÐµÐ»Ð¾Ð³Ð¾', 'Black & White' => 'Монохром', 'Cloudy' => 'ОблачноÑть', 'Color Temperature/Color Filter' => 'Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ñ‚ÐµÐ¼Ð¿ÐµÑ€Ð°Ñ‚ÑƒÑ€Ð° / Цветовой фильтр', 'Cool White Fluorescent' => 'ФлуореÑцентный белый холодный', 'Custom' => 'Пользователь', 'Custom 1' => 'ПЕРСОÐÐЛЬÐЫЙ 1', 'Custom 2' => 'ПЕРСОÐÐЛЬÐЫЙ 2', 'Custom 3' => 'ПЕРСОÐÐЛЬÐЫЙ 3', 'Custom 4' => 'ПЕРСОÐÐЛЬÐЫЙ 4', 'Day White Fluorescent' => 'ФлуореÑцентный белый дневной', 'Daylight' => 'Дневной Ñвет', 'Daylight Fluorescent' => 'ФлуореÑцентный дневной', 'Flash' => 'Ð’Ñпышка', 'Fluorescent' => 'ФлуореÑцентный', 'Manual' => 'Ð ÑƒÑ‡Ð½Ð°Ñ Ð½Ð°Ñтройка баланÑа белого', 'Shade' => 'Тень', 'Tungsten' => 'Лампа накаливаниÑ', 'Unknown' => 'неизвеÑтно', 'Warm White Fluorescent' => 'ФлуореÑцентный теплый белый', 'White Fluorescent' => 'ФлуореÑцентный белый', }, }, 'WhiteLevel' => 'Уровень белого', 'WhitePoint' => 'ЦветноÑть белой точки', 'Writer-Editor' => 'Ðвтор подпиÑи', 'YCbCrCoefficients' => 'Матричные коÑффициенты Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ†Ð²ÐµÑ‚Ð¾Ð²Ð¾Ð¹ Ñреды', 'YCbCrPositioning' => { Description => 'ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð¿Ð¾ Y и C', PrintConv => { 'Centered' => 'центрованный', 'Co-sited' => 'Ñовпадающий по меÑту', }, }, 'YCbCrSubSampling' => 'КоÑффициент ÑубдиÑкретизации Y и C', 'ZoneMatching' => { Description => 'СоответÑтвие облаÑтей', PrintConv => { 'High Key' => 'Hi', 'ISO Setting Used' => 'Отключено', 'Low Key' => 'Lo', }, }, ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::ru.pm - ExifTool Russian language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke, Sergey Shemetov, Dmitry Yerokhin and Anton Sukhinov for providing this translation. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/sv.pm��������������������������������������������������000644 �000765 �000024 �00000052267 12642461344 021575� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: sv.pm # # Description: ExifTool Swedish language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::sv; use strict; use vars qw($VERSION); $VERSION = '1.05'; %Image::ExifTool::Lang::sv::Translate = ( 'Aperture' => 'Bländare', 'ApertureValue' => 'Bländare', 'Artist' => 'Upphovsman', 'Author' => 'Upphovsman', 'AuthorsPosition' => 'Författarens befattning', 'BitsPerSample' => 'Antal bitar per komponent', 'Brightness' => 'Ljusstyrka', 'By-line' => 'Upphovsman', 'CFAPattern' => 'CFA-mönster', 'CalibrationIlluminant1' => { PrintConv => { 'Cloudy' => 'Mulet', 'Cool White Fluorescent' => 'Kalljusrör (W 3800 - 4500 k)', 'Day White Fluorescent' => 'Dagljusrör, högdager (N 4600 - 5500k)', 'Daylight' => 'Dagsljus', 'Daylight Fluorescent' => 'Dagljusrör (D 5700 - 7100 k)', 'Fine Weather' => 'Fint väder', 'Flash' => 'Blixt', 'Fluorescent' => 'Lysrörsbelysning', 'ISO Studio Tungsten' => 'ISO tungsten studiobelysning', 'Other' => 'Annan ljuskälla', 'Shade' => 'Skugga', 'Standard Light A' => 'Standardljus A', 'Standard Light B' => 'Standardljus B', 'Standard Light C' => 'Standardljus C', 'Tungsten (Incandescent)' => 'Tungsten', 'Unknown' => 'Okänt', 'Warm White Fluorescent' => 'Varmt vitt fluorescerande (L 2600 - 3250k)', 'White Fluorescent' => 'Vit lysrörsbelysning (WW 3250 - 3800 k)', }, }, 'CalibrationIlluminant2' => { PrintConv => { 'Cloudy' => 'Mulet', 'Cool White Fluorescent' => 'Kalljusrör (W 3800 - 4500 k)', 'Day White Fluorescent' => 'Dagljusrör, högdager (N 4600 - 5500k)', 'Daylight' => 'Dagsljus', 'Daylight Fluorescent' => 'Dagljusrör (D 5700 - 7100 k)', 'Fine Weather' => 'Fint väder', 'Flash' => 'Blixt', 'Fluorescent' => 'Lysrörsbelysning', 'ISO Studio Tungsten' => 'ISO tungsten studiobelysning', 'Other' => 'Annan ljuskälla', 'Shade' => 'Skugga', 'Standard Light A' => 'Standardljus A', 'Standard Light B' => 'Standardljus B', 'Standard Light C' => 'Standardljus C', 'Tungsten (Incandescent)' => 'Tungsten', 'Unknown' => 'Okänt', 'Warm White Fluorescent' => 'Varmt vitt fluorescerande (L 2600 - 3250k)', 'White Fluorescent' => 'Vit lysrörsbelysning (WW 3250 - 3800 k)', }, }, 'Caption-Abstract' => 'Bildtext', 'CaptionWriter' => 'Bildtextredigerare', 'Categories' => 'Kategorier', 'Category' => 'Kategorier', 'City' => 'Ort', 'ColorFilter' => 'Färgfilter', 'ColorMode' => { Description => 'Kreativa inst.', PrintConv => { 'Autumn Leaves' => 'Höstlöv', 'B&W' => 'Svartvitt', 'Clear' => 'Klart', 'Deep' => 'Djupt', 'Landscape' => 'Landskap', 'Light' => 'Ljust', 'Neutral' => 'Neutralt', 'Night View' => 'Nattvy', 'Night View/Portrait' => 'Nattporträtt', 'Portrait' => 'Porträtt', 'Sunset' => 'SolnedgÃ¥ng', 'Vivid' => 'Levande färg', }, }, 'ColorSpace' => { Description => 'FärgomrÃ¥desinformation', PrintConv => { 'ICC Profile' => 'ICC-profil', 'Uncalibrated' => 'Ej kalibrerat', }, }, 'ColorTemperature' => 'Färgtemperatur', 'Comment' => 'Kommentar', 'ComponentsConfiguration' => 'Enskilda komponenters betydelse', 'CompressedBitsPerPixel' => 'Bildkomprimeringsläge', 'Compression' => { Description => 'Komprimeringsschema', PrintConv => { 'JPEG' => 'JPEG-komprimering', 'Uncompressed' => 'Ingen komprimering', }, }, 'Contrast' => { Description => 'Kontrast', PrintConv => { 'High' => 'HÃ¥rd', 'Low' => 'Mjuk', 'Normal' => 'Standard', }, }, 'Copyright' => 'Copyright-innehavare', 'CopyrightNotice' => 'Copyrightmeddelande', 'Country' => 'Land', 'Country-PrimaryLocationName' => 'Land', 'CreateDate' => 'Skapat datum', 'CreationDate' => 'Skapad datum', 'Credit' => 'Medverkande', 'CustomRendered' => { Description => 'Anpassad bildbearbetning', PrintConv => { 'Custom' => 'Anpassad process', 'Normal' => 'Normal process', }, }, 'DateCreated' => 'Skapat datum', 'DateTimeOriginal' => 'Ursprungligt datum & tid', 'DeviceSettingDescription' => 'Beskrivning av enhetsinställning', 'DigitalZoomRatio' => 'Digitalt zoomomfÃ¥ng', 'Directory' => 'Filplats', 'DriveMode' => 'Enhetsläge', 'DynamicRangeOptimizer' => { Description => 'Opt.av dyn.omr.', PrintConv => { 'Advanced Auto' => 'Avancerad auto', 'Advanced Lv1' => 'Avancerad niv1', 'Advanced Lv2' => 'Avancerad niv2', 'Advanced Lv3' => 'Avancerad niv3', 'Advanced Lv4' => 'Avancerad niv4', 'Advanced Lv5' => 'Avancerad niv5', 'Auto' => 'Automatisk', 'Off' => 'Av', }, }, 'ExifImageHeight' => 'Giltig bildhöjd', 'ExifImageWidth' => 'Giltig bildbredd', 'ExifOffset' => 'IFD-pekare för Exif', 'ExifVersion' => 'Exif-version', 'ExposureCompensation' => 'Exponeringsförskjutning', 'ExposureIndex' => 'Exponeringsindex', 'ExposureMode' => { Description => 'Exponeringsläge', PrintConv => { 'Auto' => 'Automatisk exponering', 'Auto bracket' => 'Automatisk alternativexponering', 'Manual' => 'Manuell exponering', }, }, 'ExposureProgram' => { Description => 'Exponeringsprogram', PrintConv => { 'Action (High speed)' => 'Sport', 'Aperture-priority AE' => 'Bländarprioritet', 'Bulb' => 'Glödlampa', 'Creative (Slow speed)' => 'Kreativ', 'Landscape' => 'Liggande', 'Manual' => 'Manuell exponering', 'Portrait' => 'StÃ¥ende', 'Program AE' => 'Normalt program', 'Shutter speed priority AE' => 'Slutarprioritet', }, }, 'ExposureTime' => 'Exponeringstid', 'FNumber' => 'Bländare', 'FaceOrientation' => { PrintConv => { 'Horizontal (normal)' => 'Positiv riktning', 'Rotate 90 CW' => 'Rotera 90° medurs', }, }, 'FileFormat' => 'Format', 'FileModifyDate' => 'Uppdateringsdatum', 'FileName' => 'Filnamn', 'FileSize' => 'Filstorlek', 'FileSource' => { Description => 'Filkälla', PrintConv => { 'Digital Camera' => 'DSC', 'Film Scanner' => 'Skanner av transparent typ', 'Reflection Print Scanner' => 'Skanner av reflextyp', }, }, 'FileType' => 'Filtyp', 'Filename' => 'Filnamn', 'Flash' => { Description => 'Blixt', PrintConv => { 'Auto, Fired' => 'PÃ… (automatisk blixt)', 'Auto, Fired, Red-eye reduction' => '"PÃ… (automatisk blixt, reducering av röda ögon)"', 'Auto, Fired, Red-eye reduction, Return detected' => '"PÃ… (automatisk blixt, reducering av röda ögon, reflekterat ljus)"', 'Auto, Fired, Return detected' => '"PÃ… (automatisk blixt, reflekterat ljus)"', 'Did not fire' => 'Blixten utlöstes inte', 'Fired' => 'Blixten utlöstes', 'Fired, Red-eye reduction' => 'PÃ… (reducering av röda ögon)', 'Fired, Red-eye reduction, Return detected' => '"PÃ… (reducering av röda ögon, reflekterat ljus)"', 'Fired, Return detected' => 'PÃ… (reflekterat ljus)', 'No Flash' => 'Ingen blixtfunktion', 'On, Fired' => 'PÃ… (upplättnad)', 'On, Red-eye reduction' => '"PÃ… (upplättnad, reducering av röda ögon)"', 'On, Red-eye reduction, Return detected' => '"PÃ… upplättnad reducering av röda ögon, reflekterat ljus)"', 'On, Return detected' => '"PÃ… (upplättnad, reflekterat ljus)"', }, }, 'FlashEnergy' => 'Blixtenergi', 'FlashExposureComp' => 'Blixtkompensering', 'FlashpixVersion' => 'Flashpix-version som stöds', 'FocalLength' => 'Brännvidd', 'FocalLength35efl' => 'Brännvidd (i 35 mm format)', 'FocalLengthIn35mmFormat' => 'Brännvidd för 35 mm-film', 'FocalPlaneResolutionUnit' => { PrintConv => { 'inches' => 'tum', }, }, 'FocusMode' => 'Fokustyp', 'FrameRate' => 'Bildfrekvens', 'FrameSize' => 'Bildstorlek', 'GPSAltitude' => 'Höjd', 'GPSAltitudeRef' => { Description => 'Höjdreferens', PrintConv => { 'Above Sea Level' => 'HavsnivÃ¥', 'Below Sea Level' => 'HavsnivÃ¥ref. (negativt värde)', }, }, 'GPSAreaInformation' => 'Namn pÃ¥ GPS-omrÃ¥de', 'GPSDOP' => 'MÃ¥ttprecision', 'GPSDateStamp' => 'GPS-datum', 'GPSDestBearing' => 'Destination', 'GPSDestBearingRef' => 'Referens för destination', 'GPSDestDistance' => 'AvstÃ¥nd till destination', 'GPSDestDistanceRef' => 'Referens för avstÃ¥nd till destination', 'GPSDestLatitude' => 'Destinationsbredd', 'GPSDestLatitudeRef' => 'Referens för destionationsbredd', 'GPSDestLongitude' => 'Destionationslängd', 'GPSDestLongitudeRef' => 'Referens för destinationslängd', 'GPSDifferential' => { Description => 'GPS-differentialkorrigering', PrintConv => { 'Differential Corrected' => 'Differentialkorrigering använd', 'No Correction' => 'Mätning utan differentialkorrigering', }, }, 'GPSImgDirection' => 'Bildriktning', 'GPSImgDirectionRef' => 'Referens för bildriktning', 'GPSInfo' => 'IFD-pekare för GPS-information', 'GPSLatitude' => 'Bredd', 'GPSLatitudeRef' => { Description => 'Nordlig eller sydlig bredd', PrintConv => { 'North' => 'Nordlig bredd', 'South' => 'Sydlig bredd', }, }, 'GPSLongitude' => 'Längd', 'GPSLongitudeRef' => { Description => 'Östlig eller västlig längd', PrintConv => { 'East' => 'Östlig längd', 'West' => 'Västlig längd', }, }, 'GPSMapDatum' => 'Geodetiska mätningsdata använda', 'GPSMeasureMode' => { Description => 'GPS-mätningsläge', PrintConv => { '3-Dimensional Measurement' => '3D-mätning', }, }, 'GPSProcessingMethod' => 'Namn pÃ¥ GPS-bearbetningsmetod', 'GPSSatellites' => 'GPS-satelliter använda för mätning', 'GPSSpeed' => 'Hastighet pÃ¥ GPS-mottagare', 'GPSSpeedRef' => { Description => 'Hastighetsenhet', PrintConv => { 'km/h' => 'Km/tim', 'knots' => 'Knop', 'mph' => 'Miles/tim', }, }, 'GPSStatus' => { Description => 'GPS-mottagarstatus', PrintConv => { 'Measurement Active' => 'Mätning pÃ¥gÃ¥r', 'Measurement Void' => 'Mätningssamverkan', }, }, 'GPSTimeStamp' => 'GPS-tid (atomur)', 'GPSTrack' => 'Rörelseriktning', 'GPSTrackRef' => { Description => 'Referens för rörelseriktning', PrintConv => { 'Magnetic North' => 'Magnetisk riktning', 'True North' => 'Verklig riktning', }, }, 'GPSVersionID' => 'GPS tag version', 'GainControl' => { Description => 'Förstärkningskontroll', PrintConv => { 'High gain down' => 'Hög förstärkning ned', 'High gain up' => 'Hög förstärkning upp', 'Low gain down' => 'LÃ¥g förstärkning ned', 'Low gain up' => 'LÃ¥g förstärkning upp', 'None' => 'Ingen', }, }, 'Gradation' => 'Effektfull', 'HDR' => { Description => 'Auto HDR', PrintConv => { 'Off' => 'Av', }, }, 'Headline' => 'Rubrik', 'HighISONoiseReduction' => { Description => 'Hög-ISO brusred', PrintConv => { 'Auto' => 'Automatisk', 'High' => 'Hög', 'Low' => 'LÃ¥g', 'Off' => 'Av', }, }, 'Hue' => 'Nyans', 'ICCProfile' => 'ICC profil', 'ISO' => 'ISO värde', 'ImageHeight' => 'Bildhöjd', 'ImageSize' => 'Bildstorlek', 'ImageUniqueID' => 'Unikt bild-ID', 'ImageWidth' => 'Bildbredd', 'Index' => 'SmÃ¥bilder', 'Instructions' => 'Instruktioner', 'InteropIndex' => 'Interoperability Identification', 'InteropOffset' => 'Interoperability tag', 'InteropVersion' => 'Interoperability Version', 'JPEGQuality' => { Description => 'Bildkvalitet', PrintConv => { 'Extra Fine' => 'Extra fin', 'Fine' => 'Fin', 'Standard' => 'Standardkvalitet', }, }, 'Keywords' => 'Nyckelord', 'Lens' => 'Objektiv', 'LensInfo' => 'Objektivinformation', 'LightSource' => { Description => 'Ljuskälla', PrintConv => { 'Cloudy' => 'Mulet', 'Cool White Fluorescent' => 'Kalljusrör (W 3800 - 4500 k)', 'Day White Fluorescent' => 'Dagljusrör, högdager (N 4600 - 5500k)', 'Daylight' => 'Dagsljus', 'Daylight Fluorescent' => 'Dagljusrör (D 5700 - 7100 k)', 'Fine Weather' => 'Fint väder', 'Flash' => 'Blixt', 'Fluorescent' => 'Lysrörsbelysning', 'ISO Studio Tungsten' => 'ISO tungsten studiobelysning', 'Other' => 'Annan ljuskälla', 'Shade' => 'Skugga', 'Standard Light A' => 'Standardljus A', 'Standard Light B' => 'Standardljus B', 'Standard Light C' => 'Standardljus C', 'Tungsten (Incandescent)' => 'Tungsten', 'Unknown' => 'Okänt', 'Warm White Fluorescent' => 'Varmt vitt fluorescerande (L 2600 - 3250k)', 'White Fluorescent' => 'Vit lysrörsbelysning (WW 3250 - 3800 k)', }, }, 'Lightness' => 'Ljushet', 'Location' => 'Plats', 'LongExposureNoiseReduction' => { Description => 'LÃ¥ngexp.brusred', PrintConv => { 'Off' => 'Av', 'On' => 'PÃ¥', }, }, 'Make' => 'Tillverkare', 'MakerNotes' => 'Tillverkare', 'MaxAperture' => 'Största bländare', 'MeteringMode' => { Description => 'Mätningstyp', PrintConv => { 'Average' => 'Genomsnitt', 'Center-weighted average' => 'Centrumvägd genomsnittsmätning', 'Multi-segment' => 'Mönster', 'Multi-spot' => 'MultiSpot', 'Other' => 'Annat', 'Partial' => 'Delvis', 'Unknown' => 'Okänt', }, }, 'Model' => 'Kamera', 'ModifyDate' => 'Filändringsdatum och -tid', 'MultiFrameNoiseReduction' => { Description => 'Multi Frame brusred.', PrintConv => { 'Off' => 'Av', 'On' => 'PÃ¥', }, }, 'NoiseReduction' => 'Brusreducering', 'Opto-ElectricConvFactor' => 'Optoelektrisk konverteringsfaktor', 'Orientation' => { Description => 'Orientering', PrintConv => { 'Horizontal (normal)' => 'Positiv riktning', 'Rotate 90 CW' => 'Rotera 90° medurs', }, }, 'PhotometricInterpretation' => 'Pixelsammansättning', 'PlanarConfiguration' => { Description => 'Bilddataordning', PrintConv => { 'Chunky' => 'Kompakt format', 'Planar' => 'Planar format', }, }, 'PrimaryChromaticities' => 'Kromaticitet för primärfärger', 'Province-State' => 'Län/provins', 'Quality' => { Description => 'Bildkvalitet', PrintConv => { 'Compressed RAW' => 'cRAW', 'Compressed RAW + JPEG' => 'cRAW+JPEG', 'Extra Fine' => 'Extra fin', 'Fine' => 'Fin', 'Low' => 'LÃ¥g kvalitet', 'Normal' => 'Standardkvalitet', 'RAW + JPEG' => 'RAW+JPEG', }, }, 'RecordMode' => 'Inspelningsläge', 'ReferenceBlackWhite' => 'Par av svartvita referensvärden', 'RelatedImageFileFormat' => 'Tillhörande bildfilsformat', 'RelatedImageHeight' => 'Tillhörande bildlängd', 'RelatedImageWidth' => 'Tillhörande bildbredd', 'RelatedSoundFile' => 'Tillhörande ljudfil', 'ResolutionUnit' => { Description => 'Enhet för X- och Y-upplösning', PrintConv => { 'cm' => 'centimeter', 'inches' => 'tum', }, }, 'RowsPerStrip' => 'Antal rader', 'SamplesPerPixel' => 'Antal komponenter', 'Saturation' => { Description => 'Mättnad', PrintConv => { 'High' => 'Hög mättnad', 'Low' => 'LÃ¥g mättnad', 'Normal' => 'Standard', }, }, 'SceneCaptureType' => { Description => 'Motivtyp', PrintConv => { 'Landscape' => 'Landskap', 'Night' => 'Nattmotiv', 'Portrait' => 'Porträtt', }, }, 'SceneMode' => { Description => 'Scenval', PrintConv => { '3D Sweep Panorama' => '3D', 'Anti Motion Blur' => 'Anti-rörelseoskärpa', 'Auto' => 'Automatisk', 'Cont. Priority AE' => 'Kont. prioritet AE', 'Handheld Night Shot' => 'Manuell nattbild', 'Landscape' => 'Landskap', 'Macro' => 'Makro', 'Night Portrait' => 'Nattporträtt', 'Night Scene' => 'Nattvy', 'Night View/Portrait' => 'Nattvy/porträtt', 'Portrait' => 'Porträtt', 'Sports' => 'Sporthändelse', 'Sunset' => 'SolnedgÃ¥ng', 'Sweep Panorama' => 'Panorering', }, }, 'SceneType' => { Description => 'Motivtyp', PrintConv => { 'Directly photographed' => 'En direktfotograferad bild', }, }, 'SensingMethod' => { Description => 'Avkänningsmetod', PrintConv => { 'Color sequential area' => 'Color sequential area sensor', 'Color sequential linear' => 'Color sequential linear sensor', 'One-chip color area' => 'One-chip color area sensor', 'Three-chip color area' => 'Three-chip color area sensor', 'Trilinear' => 'Trilinear sensor', 'Two-chip color area' => 'Two-chip color area sensor', }, }, 'SerialNumber' => 'Kamera-ID', 'ShadingCompensation' => 'Skuggkompensering', 'Sharpness' => { Description => 'Skärpa', PrintConv => { 'Hard' => 'HÃ¥rd', 'Normal' => 'Standard', 'Soft' => 'Mjuk', }, }, 'ShootingMode' => 'Fotograferingsläge', 'ShutterSpeed' => 'Exponeringstid', 'ShutterSpeedValue' => 'Slutartid', 'Software' => 'Programvara', 'Source' => 'Källa', 'SpatialFrequencyResponse' => 'FrekvensomfÃ¥ng', 'SpectralSensitivity' => 'Spektral känslighet', 'State' => 'Län', 'StripByteCounts' => 'Byte komprimerade', 'StripOffsets' => 'Plats för bilddata', 'SubSecTime' => 'DateTime subseconds', 'SubSecTimeDigitized' => 'DateTimeDigitized subseconds', 'SubSecTimeOriginal' => 'DateTimeOriginal subseconds', 'SubjectArea' => 'Motivyta', 'SubjectDistance' => 'MotivavstÃ¥nd', 'SubjectDistanceRange' => { Description => 'MotivavstÃ¥nd', PrintConv => { 'Close' => 'Nära hÃ¥ll', 'Distant' => 'LÃ¥ngt hÃ¥ll', 'Macro' => 'Makro', }, }, 'SubjectLocation' => 'Motivets placering', 'SupplementalCategories' => 'Tilläggskategorier', 'ThumbnailImage' => 'Miniatyr', 'ThumbnailImageSize' => 'Miniatyrstorlek', 'Title' => 'Titel', 'TransferFunction' => 'Överföringsfunktion', 'TransmissionReference' => 'Sändningsreferens', 'Urgency' => 'Prioritet', 'UserComment' => 'Användarkommentarer', 'WhiteBalance' => { Description => 'Vitbalans', PrintConv => { 'Auto' => 'Automatisk vitbalans', 'Black & White' => 'Monokrom', 'Cloudy' => 'Mulet', 'Color Temperature/Color Filter' => 'Färgtemperatur / Färgfilter', 'Cool White Fluorescent' => 'Kalljusrör', 'Custom' => 'Special', 'Custom 1' => 'ANPASSNING1', 'Custom 2' => 'ANPASSNING2', 'Custom 3' => 'ANPASSNING3', 'Custom 4' => 'ANPASSNING4', 'Day White Fluorescent' => '"Dagljusrör, högdager"', 'Daylight' => 'Dagsljus', 'Daylight Fluorescent' => 'Dagljusrör', 'Flash' => 'Blixt', 'Fluorescent' => 'Lysrörsbelysning', 'Manual' => 'Manuell vitbalans', 'Shade' => 'Skugga', 'Tungsten' => 'Glödlampa', 'Unknown' => 'Okänt', 'Warm White Fluorescent' => 'Varmt vitt fluorescerande', 'White Fluorescent' => 'Vit lysrörsbelysning', }, }, 'WhitePoint' => 'Vitpunktskromaticitet', 'Writer-Editor' => 'Bildtextredigerare', 'YCbCrCoefficients' => 'Koefficienter för färgomrÃ¥desomvandling', 'YCbCrPositioning' => { Description => 'Y- och C-placering', PrintConv => { 'Centered' => 'Centrerad', }, }, 'YCbCrSubSampling' => 'Subsampling ratio of Y to C', 'ZoneMatching' => { Description => 'Zonmatchning', PrintConv => { 'High Key' => 'Hög', 'ISO Setting Used' => 'Av', 'Low Key' => 'LÃ¥g', }, }, ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::sv.pm - ExifTool Swedish language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke and BjE<ouml>rn SE<ouml>derstrE<ouml>m for providing this translation. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/tr.pm��������������������������������������������������000644 �000765 �000024 �00000045260 12642461344 021565� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: tr.pm # # Description: ExifTool Turkish language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::tr; use strict; use vars qw($VERSION); $VERSION = '1.04'; %Image::ExifTool::Lang::tr::Translate = ( 'Album' => 'Albüm', 'Aperture' => 'Açıklık', 'ApertureValue' => 'Açıklık', 'Artist' => 'Sanatçı', 'Author' => 'Yazar', 'AuthorsPosition' => 'Yazarın Pozisyonu', 'BitsPerSample' => 'Komponent başına bit sayısı', 'Brightness' => 'Parlaklık', 'By-line' => 'Yazar', 'CFAPattern' => 'CFA deseni', 'CalibrationIlluminant1' => { PrintConv => { 'Cloudy' => 'Bulutlu Hava', 'Cool White Fluorescent' => 'SoÄŸuk beyaz floresan (W 3800 - 4500K)', 'Day White Fluorescent' => 'Gün beyaz floresan (N 4600 - 5500K)', 'Daylight' => 'Günışığı', 'Daylight Fluorescent' => 'Günışığı floresan (D 5700 - 7100K)', 'Fine Weather' => 'İyi hava', 'Flash' => 'FlaÅŸ', 'Fluorescent' => 'Floresan', 'ISO Studio Tungsten' => 'ISO stüdyo tungsten', 'Other' => 'DiÄŸer ışık kaynağı', 'Shade' => 'Gölge', 'Standard Light A' => 'Standard Işık A', 'Standard Light B' => 'Standard Işık B', 'Standard Light C' => 'Standard Işık C', 'Tungsten (Incandescent)' => 'Tungsten', 'Unknown' => 'Bilinmeyen', 'White Fluorescent' => 'Beyaz floresan (WW 3250 - 3800K)', }, }, 'CalibrationIlluminant2' => { PrintConv => { 'Cloudy' => 'Bulutlu Hava', 'Cool White Fluorescent' => 'SoÄŸuk beyaz floresan (W 3800 - 4500K)', 'Day White Fluorescent' => 'Gün beyaz floresan (N 4600 - 5500K)', 'Daylight' => 'Günışığı', 'Daylight Fluorescent' => 'Günışığı floresan (D 5700 - 7100K)', 'Fine Weather' => 'İyi hava', 'Flash' => 'FlaÅŸ', 'Fluorescent' => 'Floresan', 'ISO Studio Tungsten' => 'ISO stüdyo tungsten', 'Other' => 'DiÄŸer ışık kaynağı', 'Shade' => 'Gölge', 'Standard Light A' => 'Standard Işık A', 'Standard Light B' => 'Standard Işık B', 'Standard Light C' => 'Standard Işık C', 'Tungsten (Incandescent)' => 'Tungsten', 'Unknown' => 'Bilinmeyen', 'White Fluorescent' => 'Beyaz floresan (WW 3250 - 3800K)', }, }, 'Caption-Abstract' => 'Açıklama', 'CaptionWriter' => 'Açıklama Yazarı', 'Categories' => 'Kategoriler', 'Category' => 'Kategoriler', 'City' => 'Åžehir', 'ColorFilter' => 'Renk Filtresi', 'ColorSpace' => { Description => 'Renk alanı bilgisi', PrintConv => { 'Uncalibrated' => 'Kalibre edilmemiÅŸ', }, }, 'ColorTemperature' => 'Renk Sıcaklığı', 'Comment' => 'Yorum', 'ComponentsConfiguration' => 'Her komponentin anlamı', 'CompressedBitsPerPixel' => 'İmaj sıkıştıma modu', 'Compression' => { Description => 'Sıkıştırma planı', PrintConv => { 'JPEG' => 'JPEG Sıkıştırma', 'Uncompressed' => 'Sıkıştırılmamış', }, }, 'Contrast' => { Description => 'Kontrast', PrintConv => { 'High' => 'Sert', 'Low' => 'YumuÅŸak', 'Normal' => 'Standard', }, }, 'Copyright' => 'Telif hakkı sahibi', 'CopyrightNotice' => 'Telif Hakkı Uyarısı', 'Country' => 'Ülke', 'Country-PrimaryLocationName' => 'Ülke', 'CreateDate' => 'OluÅŸturma Tarihi', 'CreationDate' => 'Yaratılış tarihi', 'Credit' => 'Jenerik', 'CustomRendered' => { Description => 'Özel imaj iÅŸleme', PrintConv => { 'Custom' => 'Özel iÅŸlem', 'Normal' => 'Normal iÅŸlem', }, }, 'DateCreated' => 'OluÅŸturma Tarihi', 'DateTimeOriginal' => 'Orjinal Tarih & Zaman', 'DeviceSettingDescription' => 'Cihaz ayar tanımları', 'DigitalZoom' => 'Dijital Zoom', 'DigitalZoomRatio' => 'Dijital zoom oranı', 'Directory' => 'Dosya Konumu', 'DriveMode' => 'Sürüş Modu', 'ExifImageHeight' => 'Geçerli imaj yüksekliÄŸi', 'ExifImageWidth' => 'Geçerli imaj eni', 'ExifOffset' => 'Exif IFD İmleci', 'ExifVersion' => 'Exif sürüm', 'ExposureCompensation' => 'Pozlama Sapması', 'ExposureIndex' => 'Pozlama indeksi', 'ExposureMode' => { Description => 'Pozlama modu', PrintConv => { 'Auto' => 'Otomatik', 'Auto bracket' => 'Otomatik çerçeve', 'Manual' => 'Manuel pozlama', }, }, 'ExposureProgram' => { Description => 'Pozlama program', PrintConv => { 'Action (High speed)' => 'Hareket programı', 'Aperture-priority AE' => 'Apertür önceliÄŸi', 'Bulb' => 'Ampul', 'Creative (Slow speed)' => 'Yaratıcı program', 'Landscape' => 'Manzara', 'Manual' => 'Manuel Pozlama', 'Portrait' => 'Portre', 'Program AE' => 'Normal program', 'Shutter speed priority AE' => 'Deklanşör önceliÄŸi', }, }, 'ExposureTime' => 'Poz süresi', 'FNumber' => 'Açıklık', 'FaceOrientation' => { PrintConv => { 'Horizontal (normal)' => 'Pozitif yön', 'Rotate 90 CW' => 'Saat yönünde 90° döndür', }, }, 'FileFormat' => 'Format', 'FileModifyDate' => 'Güncellenen Tarih', 'FileName' => 'Dosya adı', 'FileSize' => 'Dosya boyutu', 'FileSource' => { Description => 'Dosya kaynağı', PrintConv => { 'Digital Camera' => 'DSC', 'Film Scanner' => 'Transparan tip tarayıcı', 'Reflection Print Scanner' => 'Refleks tipi tarayıcı', }, }, 'FileType' => 'Dosya türü', 'Filename' => 'Dosya adı', 'Flash' => { Description => 'FlaÅŸ', PrintConv => { 'Auto, Fired' => 'AÇIK (Otom-flaÅŸ)', 'Auto, Fired, Red-eye reduction' => '"AÇIK (Otom-flaÅŸ, Kırmızı-Göz Azaltma)"', 'Auto, Fired, Red-eye reduction, Return detected' => '"AÇIK (Otom-flaÅŸ, Kırmızı-Göz Azaltma, Geri dönen ışık bulundu)"', 'Auto, Fired, Return detected' => '"AÇIK (Otom-flaÅŸ, Geri dönen ışık bulundu)"', 'Did not fire' => 'FlaÅŸ patlamadı', 'Fired' => 'FlaÅŸ patladı', 'Fired, Red-eye reduction' => 'AÇIK (Kırmızı-Göz Azaltma)', 'Fired, Red-eye reduction, Return detected' => '"AÇIK (Kırmızı-Göz Azaltma, Geri dönen ışık bulundu)"', 'Fired, Return detected' => 'AÇIK (Geri dönen ışık bulundu)', 'No Flash' => 'FlaÅŸ fonksiyonu yok', 'On, Fired' => 'AÇIK (Doldurma)', 'On, Red-eye reduction' => '"AÇIK (Doldurma, Kırmızı-Göz Önleme)"', 'On, Red-eye reduction, Return detected' => '"AÇIK (Doldurma, Kırmızı-Göz Önleme, Geri dönen ışık bulundu)"', 'On, Return detected' => '"AÇIK (Doldurma, Geri dönen ışık bulundu)"', }, }, 'FlashEnergy' => 'FlaÅŸ enerjisi', 'FlashExposureComp' => 'FlaÅŸ Telafisi', 'FlashpixVersion' => 'Desteklenen Flashpix sürümü', 'FocalLength' => 'Odak uzunluÄŸu', 'FocalLength35efl' => 'Odak Uzaklığı (35 mm dengi)', 'FocalLengthIn35mmFormat' => '35mm filmde odak uzaklığı', 'FocalPlaneResolutionUnit' => { Description => 'Odak düzlemi çözünürlük birimi', PrintConv => { 'inches' => 'inç', }, }, 'FocalPlaneXResolution' => 'Odak düzlemi X çözünürlüğü', 'FocalPlaneYResolution' => 'Odak düzlemi Y çözünürlüğü', 'FocusMode' => 'Odak modu', 'FrameRate' => 'Kare Hızı', 'FrameSize' => 'Kare Boyutu', 'GPSAltitude' => 'Yükseklik', 'GPSAltitudeRef' => { Description => 'Yükselti referansı', PrintConv => { 'Above Sea Level' => 'Deniz düzeyi', 'Below Sea Level' => 'Deniz düzeyi referansı (negatif deÄŸer)', }, }, 'GPSAreaInformation' => 'GPS Alanının ismi', 'GPSDOP' => 'Ölçüm hassaslığı', 'GPSDateStamp' => 'GPS alanı', 'GPSDestBearing' => 'Varış yönü', 'GPSDestBearingRef' => 'Varış yönü için referans', 'GPSDestDistance' => 'Varışa uzaklık', 'GPSDestDistanceRef' => 'Varışa uzaklık için referans', 'GPSDestLatitude' => 'Varışın enlemi', 'GPSDestLatitudeRef' => 'Varışın enlemi için referans', 'GPSDestLongitude' => 'Varışın boylamı', 'GPSDestLongitudeRef' => 'Varışın boylamı için referans', 'GPSDifferential' => { Description => 'GPS diferansiyel düzeltme', PrintConv => { 'Differential Corrected' => 'Difrensiyel düzeltme uygulandı', 'No Correction' => 'Difrensiyel düzeltme olmadan ölçüm', }, }, 'GPSImgDirection' => 'İmajın yönü', 'GPSImgDirectionRef' => 'İmajın yönü için referans', 'GPSInfo' => 'GPS Info IDF İmleci', 'GPSLatitude' => 'Enlem', 'GPSLatitudeRef' => { Description => 'Kuzey veya Güney Enlemi', PrintConv => { 'North' => 'Kuzey enlemi', 'South' => 'Güney enlemi', }, }, 'GPSLongitude' => 'Boylam', 'GPSLongitudeRef' => { Description => 'DoÄŸu veya Batı Boylamı', PrintConv => { 'East' => 'DoÄŸu boylamı', 'West' => 'Batı boylamı', }, }, 'GPSMapDatum' => 'Geodetik veri kullanıldı', 'GPSMeasureMode' => { Description => 'GPS ölçüm modu', PrintConv => { '3-Dimensional Measurement' => '3-boyutlu ölçüm', }, }, 'GPSProcessingMethod' => 'GPS iÅŸlem metodunun ismi', 'GPSSatellites' => 'Ölçüm için kullanılan GPS uyduları', 'GPSSpeed' => 'GSP alıcının hızı', 'GPSSpeedRef' => { Description => 'Hız Ünitesi', PrintConv => { 'km/h' => 'km / saat', 'knots' => 'Knot', 'mph' => 'Mil / saat', }, }, 'GPSStatus' => { Description => 'GPS alıcı durumu', PrintConv => { 'Measurement Active' => 'İlerlemeli ölçüm', 'Measurement Void' => 'Ölçü Birlikte İşlerliÄŸi', }, }, 'GPSTimeStamp' => 'GPS saati (atomik saat)', 'GPSTrack' => 'Hareket yönü', 'GPSTrackRef' => { Description => 'Hareket yönü için referans', PrintConv => { 'Magnetic North' => 'Manyetik yön', 'True North' => 'Gerçek yön', }, }, 'GPSVersionID' => 'GSP etiket sürümü', 'GainControl' => { Description => 'Kontrol Kazan', PrintConv => { 'High gain down' => 'Yüksek kazanç aÅŸağı', 'High gain up' => 'Yüksek kazanç yukarı', 'Low gain down' => 'Düşek kazanç aÅŸağı', 'Low gain up' => 'Düşük kazanç yukarı', 'None' => 'Hiçbiri', }, }, 'Gradation' => 'Dereceleme', 'Headline' => 'BaÅŸlık', 'Hue' => 'Renk', 'ICCProfile' => 'ICC Profili', 'ISO' => 'ISO deÄŸeri', 'ImageHeight' => 'İmaj yüksekliÄŸi', 'ImageSize' => 'İmaj Boyutu', 'ImageUniqueID' => 'Kendine has imaj ID', 'ImageWidth' => 'İmaj geniÅŸliÄŸi', 'Index' => 'İndeks', 'Instructions' => 'Talimatlar', 'InteropIndex' => 'Interoperabilite Tanımı', 'InteropOffset' => 'Interoperabilite etiketi', 'InteropVersion' => 'Interoperabilite Sürümü', 'JPEGQuality' => { PrintConv => { 'Standard' => 'Standart Kalite', }, }, 'Keywords' => 'Anahtar sözcükler', 'Lens' => 'Objektif', 'LensInfo' => 'Lens Bilgisi', 'LightSource' => { Description => 'Işık kaynağı', PrintConv => { 'Cloudy' => 'Bulutlu Hava', 'Cool White Fluorescent' => 'SoÄŸuk beyaz floresan (W 3800 - 4500K)', 'Day White Fluorescent' => 'Gün beyaz floresan (N 4600 - 5500K)', 'Daylight' => 'Günışığı', 'Daylight Fluorescent' => 'Günışığı floresan (D 5700 - 7100K)', 'Fine Weather' => 'İyi hava', 'Flash' => 'FlaÅŸ', 'Fluorescent' => 'Floresan', 'ISO Studio Tungsten' => 'ISO stüdyo tungsten', 'Other' => 'DiÄŸer ışık kaynağı', 'Shade' => 'Gölge', 'Standard Light A' => 'Standard Işık A', 'Standard Light B' => 'Standard Işık B', 'Standard Light C' => 'Standard Işık C', 'Tungsten (Incandescent)' => 'Tungsten', 'Unknown' => 'Bilinmeyen', 'White Fluorescent' => 'Beyaz floresan (WW 3250 - 3800K)', }, }, 'Lightness' => 'Işık', 'Location' => 'Mevki', 'Make' => 'Üretici', 'MakerNotes' => 'Üretici notları', 'MaxAperture' => 'Maksimum lens açıklığı', 'MeteringMode' => { Description => 'Ölçü modu', PrintConv => { 'Average' => 'Ortalama', 'Center-weighted average' => 'CenterWeightedAverage', 'Multi-segment' => 'Desen', 'Multi-spot' => 'Multispot', 'Other' => 'DiÄŸer', 'Partial' => 'Kısmen', 'Unknown' => 'Bilinmeyen', }, }, 'Model' => 'Kamera', 'ModifyDate' => 'Dosya deÄŸiÅŸim tarih ve zamanı', 'NoiseReduction' => 'Parazit azaltımı', 'Opto-ElectricConvFactor' => 'Optoelektrik çevrim faktörü', 'Orientation' => { Description => 'Yönelim', PrintConv => { 'Horizontal (normal)' => 'Pozitif yön', 'Rotate 90 CW' => 'Saat yönünde 90° döndür', }, }, 'PhotometricInterpretation' => 'Piksel kompozisyonu', 'PlanarConfiguration' => { Description => 'İmaj veri aranjmanı', PrintConv => { 'Chunky' => 'Chunky format', 'Planar' => 'Planar format', }, }, 'PrimaryChromaticities' => 'İlklerin kromatikleri', 'Province-State' => 'Eyalet/Bölge', 'Quality' => { PrintConv => { 'Low' => 'Düşük Kalite', 'Normal' => 'Standart Kalite', }, }, 'RecordMode' => 'Kayıt modu', 'ReferenceBlackWhite' => 'Bir çift siyah ve beyaz referans deÄŸerleri', 'RelatedImageFileFormat' => 'İlgili Görüntü Dosya Formatı', 'RelatedImageHeight' => 'İlgili İmaj YüksekliÄŸi', 'RelatedImageWidth' => 'İlgili İmaj GeniÅŸliÄŸi', 'RelatedSoundFile' => 'İlgili ses dosyası', 'ResolutionUnit' => { Description => 'X ve Y birim çözünürlüğü', PrintConv => { 'cm' => 'santimetre', 'inches' => 'inç', }, }, 'RowsPerStrip' => 'Åžerit başına satır sayısı', 'SamplesPerPixel' => 'Komponent sayısı', 'Saturation' => { Description => 'Doyma', PrintConv => { 'High' => 'Yüksek Doyma', 'Low' => 'Düşük Doyma', 'Normal' => 'Standard', }, }, 'SceneCaptureType' => { Description => 'Senaryo yakalama tipi', PrintConv => { 'Landscape' => 'Manzara', 'Night' => 'Gece çekimi', 'Portrait' => 'Portre', }, }, 'SceneMode' => { PrintConv => { 'Sunset' => 'Günbatımı', }, }, 'SceneType' => { Description => 'Senaryo tipi', PrintConv => { 'Directly photographed' => 'DoÄŸrudan fotograflanmış imaj', }, }, 'SensingMethod' => { Description => 'Alıcı metodu', PrintConv => { 'Color sequential area' => 'Renk ardaşık alan alıcısı', 'Color sequential linear' => 'Renk ardışık çizgisel alıcı', 'One-chip color area' => 'Tek-çip renk alanı alıcı', 'Three-chip color area' => 'Üç-çip renk alanı alıcı', 'Trilinear' => 'Triple çizgisel alıcı', 'Two-chip color area' => 'İki-çip renk alanı alıcı', }, }, 'SerialNumber' => 'Kamera ID', 'ShadingCompensation' => 'Gölgelendirme Telafisi', 'Sharpness' => { Description => 'Keskinlik', PrintConv => { 'Hard' => 'Sert', 'Normal' => 'Standard', 'Soft' => 'YumuÅŸak', }, }, 'ShootingMode' => 'Çekim Modu', 'ShutterSpeed' => 'Poz süresi', 'ShutterSpeedValue' => 'Deklanşör hızı', 'Software' => 'Kullanılan yazılım', 'Source' => 'Kaynak', 'SpatialFrequencyResponse' => 'Uzaysal frekans cevabı', 'SpectralSensitivity' => 'Uzaysal hassaslık', 'State' => 'Eyalet', 'StripByteCounts' => 'Sıkıştırılmış ÅŸerit başına bayt', 'StripOffsets' => 'İmaj veri konumu', 'SubSecTime' => 'TarihZaman altsaniyeler', 'SubSecTimeDigitized' => 'TarihZamanDijitize altsaniyeler', 'SubSecTimeOriginal' => 'TarihZamanOrjinal altsaniyeler', 'SubjectArea' => 'Obje alanı', 'SubjectDistance' => 'Obje uzaklığı', 'SubjectDistanceRange' => { Description => 'Obje uzaklık menzili', PrintConv => { 'Close' => 'Yakın görüntü', 'Distant' => 'Uzak görüntü', 'Macro' => 'Makro', }, }, 'SubjectLocation' => 'Obje konumu', 'SupplementalCategories' => 'Tamamlayıcı Kategoriler', 'ThumbnailImage' => 'Küçük Resim', 'ThumbnailImageSize' => 'Küçük resim boyutu', 'Title' => 'BaÅŸlık', 'TransferFunction' => 'Transfer fonksiyonu', 'TransmissionReference' => 'İletim BaÅŸvurusu', 'Urgency' => 'Acil', 'UserComment' => 'Kullanıcı yorumları', 'WhiteBalance' => { Description => 'Beyaz ayarı', PrintConv => { 'Auto' => 'Otomatik beyaz ayarı', 'Black & White' => 'Monokrom', 'Cloudy' => 'Bulutlu hava', 'Cool White Fluorescent' => 'SoÄŸuk beyaz floresan', 'Custom 1' => 'ÖZEL1', 'Custom 2' => 'ÖZEL2', 'Custom 3' => 'ÖZEL3', 'Custom 4' => 'ÖZEL4', 'Day White Fluorescent' => 'Gün beyaz floresan', 'Daylight' => 'Günışığı', 'Daylight Fluorescent' => 'Günışığı floresan', 'Fluorescent' => 'Floresan', 'Manual' => 'Elle beyaz ayarı', 'Shade' => 'Gölge', 'Tungsten' => 'Tungsten ışık', }, }, 'WhitePoint' => 'Beya nokta kromatik', 'Writer-Editor' => 'Açıklama Yazarı', 'YCbCrCoefficients' => 'Renk alanı transformasyon matriks katsayısı', 'YCbCrPositioning' => { Description => 'Y ve C konumlama', PrintConv => { 'Centered' => 'Ortalanmış', 'Co-sited' => 'Birlikte-konumlanmış', }, }, 'YCbCrSubSampling' => 'Y den C\'ye alt örnekleme oranı', ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::tr.pm - ExifTool Turkish language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke, Hasan Yildirim and Cihan Ulusoy for providing this translation. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/zh_cn.pm�����������������������������������������������000644 �000765 �000024 �00000111456 12642461344 022242� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: zh_cn.pm # # Description: ExifTool Simplified Chinese language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::zh_cn; use strict; use vars qw($VERSION); $VERSION = '1.08'; %Image::ExifTool::Lang::zh_cn::Translate = ( 'AEProgramMode' => { PrintConv => { 'Landscape' => '风景', 'Portrait' => '人物', }, }, 'AFAreaIllumination' => { PrintConv => { 'Auto' => '自动', }, }, 'AFPointIllumination' => { PrintConv => { 'Auto' => '自动', }, }, 'AFPointMode' => { PrintConv => { 'Auto' => '自动', }, }, 'AFPointRegistration' => { PrintConv => { 'Automatic' => '自动', }, }, 'AFPointSelected' => { PrintConv => { 'Auto' => '自动', }, }, 'AFPointSelected2' => { PrintConv => { 'Auto' => '自动', }, }, 'AFPointsUnknown2' => { PrintConv => { 'Auto' => '自动', }, }, 'APEVersion' => 'APE 版本', 'AdultContentWarning' => { PrintConv => { 'Unknown' => '未知', }, }, 'Album' => '相册', 'Anti-Blur' => { PrintConv => { 'n/a' => '未设置', }, }, 'Aperture' => '光圈数', 'ApertureValue' => '光圈', 'Artist' => '图åƒä½œè€…', 'Author' => '作者', 'AuthorsPosition' => 'èŒä½', 'AutoLightingOptimizer' => { PrintConv => { 'n/a' => '未设置', }, }, 'AutoRotate' => { PrintConv => { 'Rotate 180' => '180° (底/å³)', 'Rotate 270 CW' => '90° CW (å·¦/底)', 'Rotate 90 CW' => '90° CCW (å³/上)', 'n/a' => '未知', }, }, 'BatteryLevel' => '电池电é‡', 'BitsPerSample' => 'æ¯ä¸ªç»„件的比特数', 'BracketShotNumber' => { PrintConv => { 'n/a' => '未设置', }, }, 'Brightness' => '亮度', 'BrightnessValue' => '亮度', 'By-line' => '作者', 'CFAPattern' => 'CFA 模å¼', 'CalibrationIlluminant1' => { PrintConv => { 'Cloudy' => '阴天', 'Cool White Fluorescent' => '冷白色è§å…‰ç¯ï¼ˆW3800-4500K)', 'Day White Fluorescent' => '日光白色è§å…‰ç¯ï¼ˆN4600-5500K)', 'Daylight' => '太阳光', 'Daylight Fluorescent' => '日光色è§å…‰ç¯ï¼ˆD5700-7100K)', 'Fine Weather' => '晴天', 'Flash' => '闪光', 'Fluorescent' => 'è§å…‰', 'ISO Studio Tungsten' => 'ISO相室白炽ç¯', 'Other' => 'å…¶ä»–å…‰æº', 'Shade' => '阴影', 'Standard Light A' => '标准光A', 'Standard Light B' => '标准光B', 'Standard Light C' => '标准光C', 'Tungsten (Incandescent)' => '白炽ç¯', 'Unknown' => '未知', 'Warm White Fluorescent' => '暖白è§å…‰ç¯ï¼ˆL2600-3250K)', 'White Fluorescent' => '白色è§å…‰ç¯ï¼ˆWW3250-3800K)', }, }, 'CalibrationIlluminant2' => { PrintConv => { 'Cloudy' => '阴天', 'Cool White Fluorescent' => '冷白色è§å…‰ç¯ï¼ˆW3800-4500K)', 'Day White Fluorescent' => '日光白色è§å…‰ç¯ï¼ˆN4600-5500K)', 'Daylight' => '太阳光', 'Daylight Fluorescent' => '日光色è§å…‰ç¯ï¼ˆD5700-7100K)', 'Fine Weather' => '晴天', 'Flash' => '闪光', 'Fluorescent' => 'è§å…‰', 'ISO Studio Tungsten' => 'ISO相室白炽ç¯', 'Other' => 'å…¶ä»–å…‰æº', 'Shade' => '阴影', 'Standard Light A' => '标准光A', 'Standard Light B' => '标准光B', 'Standard Light C' => '标准光C', 'Tungsten (Incandescent)' => '白炽ç¯', 'Unknown' => '未知', 'Warm White Fluorescent' => '暖白è§å…‰ç¯ï¼ˆL2600-3250K)', 'White Fluorescent' => '白色è§å…‰ç¯ï¼ˆWW3250-3800K)', }, }, 'CameraOrientation' => { Description => '图åƒå–å‘', PrintConv => { 'Horizontal (normal)' => '0° (上/å·¦)', 'Rotate 270 CW' => '90° CW (å·¦/底)', 'Rotate 90 CW' => '90° CCW (å³/上)', }, }, 'CanonExposureMode' => { PrintConv => { 'Aperture-priority AE' => '光圈优先', 'Manual' => '手动', 'Shutter speed priority AE' => '快门优先', }, }, 'CanonFlashMode' => { PrintConv => { 'Auto' => '自动', }, }, 'Caption-Abstract' => '说明', 'CaptionWriter' => '说明作者', 'CaptureXResolutionUnit' => { PrintConv => { 'um' => 'µm (微米)', }, }, 'CaptureYResolutionUnit' => { PrintConv => { 'um' => 'µm (微米)', }, }, 'Categories' => '类别', 'Category' => '类别', 'City' => '城市', 'ColorEffect' => { PrintConv => { 'Sepia' => '怀旧深咖啡色', }, }, 'ColorFilter' => '颜色滤镜', 'ColorMode' => { Description => '创æ„风格', PrintConv => { 'Autumn Leaves' => '红å¶', 'B&W' => '黑白', 'Clear' => '清澈', 'Deep' => '深色', 'Landscape' => '风景', 'Light' => '轻淡', 'Neutral' => '中性', 'Night View' => '夜景', 'Night View/Portrait' => '夜晚肖åƒ', 'Portrait' => '人物', 'Standard' => '标准', 'Sunset' => '黄æ˜', 'Vivid' => '生动色彩', }, }, 'ColorSpace' => { Description => '色彩空间信æ¯', PrintConv => { 'ICC Profile' => '色彩特性文件', 'Uncalibrated' => '自å‘', }, }, 'ColorTemperature' => '色温', 'CommanderGroupAMode' => { PrintConv => { 'Manual' => '手动', }, }, 'CommanderGroupBMode' => { PrintConv => { 'Manual' => '手动', }, }, 'CommanderInternalFlash' => { PrintConv => { 'Manual' => '手动', }, }, 'Comment' => '注释', 'ComponentsConfiguration' => 'å„分组的å«ä¹‰', 'CompressedBitsPerPixel' => '图åƒåŽ‹ç¼©æ¨¡å¼', 'Compression' => { Description => '压缩方案', PrintConv => { 'JPEG' => 'JEPG压缩率', 'JPEG (old-style)' => 'JPEG (æ—§æ ·å¼)', 'Kodak DCR Compressed' => '柯达 DCR 压缩', 'Kodak KDC Compressed' => '柯达 KDC 压缩', 'Next' => 'NeXT 2比特编ç ', 'Nikon NEF Compressed' => '尼康 NEF 压缩', 'Pentax PEF Compressed' => '宾得 PEF 压缩', 'SGILog' => 'SGI 32比特对数亮度编ç ', 'SGILog24' => 'SGI 24比特对数亮度编ç ', 'Sony ARW Compressed' => '索尼 ARW 压缩', 'Thunderscan' => 'ThunderScan 4比特编ç ', 'Uncompressed' => '未压缩', }, }, 'Contrast' => { Description => '对比度', PrintConv => { 'High' => '硬调', 'Low' => '软调', 'Normal' => '标准', }, }, 'ControlMode' => { PrintConv => { 'n/a' => '未设置', }, }, 'Copyright' => '专利拥有者', 'CopyrightNotice' => '版æƒä¿¡æ¯', 'CopyrightStatus' => { PrintConv => { 'Unknown' => '未知', }, }, 'Country' => '国家', 'Country-PrimaryLocationName' => '国家', 'CreateDate' => 'æ•°å­—æ•°æ®äº§ç”Ÿçš„æ—¥æœŸå’Œæ—¶é—´', 'Credit' => '作者', 'CustomRendered' => { Description => '用户自定义图åƒå¤„ç†', PrintConv => { 'Custom' => '自定义处ç†', 'Normal' => '普通模å¼', }, }, 'DateCreated' => '创建日期', 'DateTime' => '文件改å˜çš„æ—¥æœŸå’Œæ—¶é—´', 'DateTimeOriginal' => '原始数æ®äº§ç”Ÿçš„æ—¥æœŸå’Œæ—¶é—´', 'DeviceSettingDescription' => '设备设定说明', 'DigitalZoom' => 'æ•°ç å˜ç„¦', 'DigitalZoomRatio' => 'æ•°ç å˜ç„¦æ¯”', 'Directory' => '文件存储ä½ç½®', 'DisplayXResolutionUnit' => { PrintConv => { 'um' => 'µm (微米)', }, }, 'DisplayYResolutionUnit' => { PrintConv => { 'um' => 'µm (微米)', }, }, 'DjVuVersion' => 'DjVu 版本', 'DriveMode' => '驱动模å¼', 'DynamicRangeOptimizer' => { Description => '动æ€èŒƒå›´ä¼˜åŒ–', PrintConv => { 'Advanced Auto' => '高级自动', 'Advanced Lv1' => '高级优化程度 1', 'Advanced Lv2' => '高级优化程度 2', 'Advanced Lv3' => '高级优化程度 3', 'Advanced Lv4' => '高级优化程度 4', 'Advanced Lv5' => '高级优化程度 5', 'Auto' => '自动', 'Off' => 'å…³', 'Standard' => '标准', }, }, 'EasyMode' => { PrintConv => { 'Landscape' => '风景', 'Manual' => '手动', 'Night' => '夜景', 'Portrait' => '人物', }, }, 'ExifImageHeight' => 'åƒé«˜', 'ExifImageWidth' => 'åƒå®½', 'ExifOffset' => 'Exif IFD 指针', 'ExifToolVersion' => 'ExifTool 版本', 'ExifVersion' => 'Exif 版本', 'ExpandFilm' => '胶片扩展', 'ExpandFilterLens' => '滤镜扩展', 'ExpandFlashLamp' => 'é—ªå…‰ç¯æ‰©å±•', 'ExpandLens' => '镜头扩展', 'ExpandScanner' => '扫æä»ªæ‰©å±•', 'ExpandSoftware' => '软件扩展', 'ExposureCompensation' => 'æ›å…‰åå·®', 'ExposureIndex' => 'æ›å…‰ç´¢å¼•', 'ExposureMode' => { Description => 'æ›å…‰æ¨¡å¼', PrintConv => { 'Aperture Priority' => '光圈优先', 'Aperture-priority AE' => '光圈优先', 'Auto' => '自动æ›å…‰', 'Auto bracket' => '自动支架', 'Landscape' => '风景', 'Manual' => '手动æ›å…‰', 'Portrait' => '人物', 'Shutter Priority' => '快门优先', 'Shutter speed priority AE' => '快门优先', 'n/a' => '未设置', }, }, 'ExposureProgram' => { Description => 'æ›å…‰ç¨‹åº', PrintConv => { 'Action (High speed)' => 'è¿åŠ¨æ‘„å½±', 'Aperture Priority' => '光圈优先', 'Aperture-priority AE' => '光圈优先', 'Creative (Slow speed)' => 'åˆ›æ„æ‘„å½±', 'Landscape' => '风景', 'Manual' => '手动', 'Portrait' => '人物', 'Program AE' => '一般程åº', 'Shutter Priority' => '快门优先', 'Shutter speed priority AE' => '快门优先', }, }, 'ExposureTime' => 'æ›å…‰æ—¶é—´', 'ExposureTime2' => 'æ›å…‰æ—¶é—´ 2', 'ExternalFlashBounce' => { PrintConv => { 'n/a' => '未设置', }, }, 'ExternalFlashExposureComp' => { PrintConv => { 'n/a' => '未设置 (Off or Auto Modes)', 'n/a (Manual Mode)' => '未设置 (Manual Mode)', }, }, 'FNumber' => '光圈数', 'FaceOrientation' => { PrintConv => { 'Horizontal (normal)' => '0° (上/å·¦)', 'Rotate 180' => '180° (底/å³)', 'Rotate 270 CW' => '90° CW (å·¦/底)', 'Rotate 90 CW' => '90° CCW (å³/上)', }, }, 'FaxProfile' => { PrintConv => { 'Unknown' => '未知', }, }, 'FileFormat' => 'æ ¼å¼', 'FileModifyDate' => '更新日期', 'FileName' => '文件å', 'FileSize' => '文件大å°', 'FileSource' => { Description => 'æ–‡ä»¶æ¥æº', PrintConv => { 'Digital Camera' => 'æ•°ç ç›¸æœº', 'Film Scanner' => '胶片扫æä»ª', 'Reflection Print Scanner' => 'å射型扫æä»ª', }, }, 'FileType' => '文件格å¼', 'FilterEffect' => { PrintConv => { 'n/a' => '未设置', }, }, 'Flash' => { Description => '闪光', PrintConv => { 'Auto, Fired' => 'å¼€ (自动闪光)', 'Auto, Fired, Red-eye reduction' => 'å¼€ (自动闪光,å‡è½»çº¢çœ¼)', 'Auto, Fired, Red-eye reduction, Return detected' => 'å¼€ (强制闪光,å‡è½»çº¢çœ¼ï¼Œæ£€æµ‹è¿”回光)', 'Auto, Fired, Return detected' => 'å¼€ (自动闪光,检测返回光)', 'Did not fire' => 'é—ªå…‰ç¯æœªäº®', 'Fired' => '闪光ç¯äº®', 'Fired, Red-eye reduction' => 'å¼€ (å‡è½»çº¢çœ¼)', 'Fired, Red-eye reduction, Return detected' => 'å¼€ (å‡è½»çº¢çœ¼ï¼Œæ£€æµ‹è¿”回光)', 'Fired, Return detected' => 'å¼€ (检测返回光)', 'No Flash' => '无闪光功能', 'On, Fired' => 'å¼€ (强制闪光)', 'On, Red-eye reduction' => 'å¼€ (强制闪光(å‡è½»çº¢çœ¼))', 'On, Red-eye reduction, Return detected' => 'å¼€ (强制闪光,å‡è½»çº¢çœ¼ï¼Œæ£€æµ‹è¿”回光)', 'On, Return detected' => 'å¼€ (强制闪光,检测返回光)', }, }, 'FlashControlMode' => { PrintConv => { 'Manual' => '手动', }, }, 'FlashEnergy' => '闪光强度', 'FlashExposureComp' => '闪光补å¿', 'FlashGroupAControlMode' => { PrintConv => { 'Manual' => '手动', }, }, 'FlashGroupBControlMode' => { PrintConv => { 'Manual' => '手动', }, }, 'FlashGroupCControlMode' => { PrintConv => { 'Manual' => '手动', }, }, 'FlashMode' => { PrintConv => { 'Auto' => '自动', 'Unknown' => '未知', }, }, 'FlashOptions' => { PrintConv => { 'Auto' => '自动', }, }, 'FlashOptions2' => { PrintConv => { 'Auto' => '自动', }, }, 'FlashSyncSpeedAv' => { PrintConv => { 'Auto' => '自动', }, }, 'FlashpixVersion' => '支æŒçš„ Flashpix 版本', 'FocalLength' => '焦è·', 'FocalLength35efl' => '焦点è·ç¦»(35 mm æ¢ç®—)', 'FocalLengthIn35mmFormat' => '35 mm æ¢ç®—镜头焦点è·ç¦»', 'FocalPlaneResolutionUnit' => { Description => '焦平é¢åˆ†è¾¨çއå•ä½', PrintConv => { 'inches' => '英寸', 'um' => 'µm (微米)', }, }, 'FocalPlaneXResolution' => 'ç„¦å¹³é¢ X 分辨率', 'FocalPlaneYResolution' => 'ç„¦å¹³é¢ Y 分辨率', 'Focus' => { PrintConv => { 'Manual' => '手动', }, }, 'FocusContinuous' => { PrintConv => { 'Manual' => '手动', }, }, 'FocusMode' => { Description => '对焦模å¼', PrintConv => { 'Auto' => '自动', 'Manual' => '手动', }, }, 'FocusMode2' => { PrintConv => { 'Manual' => '手动', }, }, 'FocusModeSetting' => { PrintConv => { 'Manual' => '手动', }, }, 'FocusRange' => { PrintConv => { 'Auto' => '自动', 'Manual' => '手动', }, }, 'FrameRate' => '更新速率', 'FrameSize' => 'ç”»é¢å°ºå¯¸', 'FreeByteCounts' => '空白字节数', 'FujiFlashMode' => { PrintConv => { 'Auto' => '自动', }, }, 'GIFVersion' => 'GIF 版本', 'GPSAltitude' => '海拔高度', 'GPSAltitudeRef' => { Description => '高度基准', PrintConv => { 'Above Sea Level' => 'æµ·å¹³é¢', 'Below Sea Level' => 'æµ·æ‹”(负值)', }, }, 'GPSAreaInformation' => 'GPS区域å', 'GPSDOP' => '测é‡ç²¾åº¦', 'GPSDateStamp' => 'GPS日期', 'GPSDestBearing' => '目的地方ä½', 'GPSDestBearingRef' => '目的地方ä½å‚ç…§', 'GPSDestDistance' => '离终点的è·ç¦»', 'GPSDestDistanceRef' => { Description => 'è·ç›®çš„地è·ç¦»å‚ç…§', PrintConv => { 'Kilometers' => '公里数', 'Miles' => '英里数', 'Nautical Miles' => '节数', }, }, 'GPSDestLatitude' => '终点纬度', 'GPSDestLatitudeRef' => { Description => '目的地的北纬或å—纬', PrintConv => { 'North' => '北纬', 'South' => 'å—纬', }, }, 'GPSDestLongitude' => '终点ç»åº¦', 'GPSDestLongitudeRef' => { Description => 'ç›®çš„åœ°çš„ä¸œç»æˆ–西ç»', PrintConv => { 'East' => '东ç»', 'West' => '西ç»', }, }, 'GPSDifferential' => { Description => 'GPS 差分校正', PrintConv => { 'Differential Corrected' => '差分校正定ä½', 'No Correction' => 'éžå·®åˆ†æ ¡æ­£æµ‹é‡', }, }, 'GPSImgDirection' => 'å›¾åƒæ–¹å‘', 'GPSImgDirectionRef' => 'å›¾åƒæ–¹å‘å‚ç…§', 'GPSInfo' => 'GPS Info IFD 指针', 'GPSLatitude' => '纬度', 'GPSLatitudeRef' => { Description => '北纬或者å—纬', PrintConv => { 'North' => '北纬', 'South' => 'å—纬', }, }, 'GPSLongitude' => 'ç»åº¦', 'GPSLongitudeRef' => { Description => 'ä¸œç»æˆ–者西ç»', PrintConv => { 'East' => '东ç»', 'West' => '西ç»', }, }, 'GPSMapDatum' => 'ä½¿ç”¨çš„å¤§åœ°æµ‹é‡æ•°æ®', 'GPSMeasureMode' => { Description => 'GPSæµ‹é‡æ¨¡å¼', PrintConv => { '2-D' => '2维测é‡', '2-Dimensional' => '2维测é‡', '2-Dimensional Measurement' => '2维测é‡', '3-D' => '3维测é‡', '3-Dimensional' => '3维测é‡', '3-Dimensional Measurement' => '3维测é‡', }, }, 'GPSProcessingMethod' => 'å®šä½æ–¹å¼åç§°', 'GPSSatellites' => '用于定ä½çš„ GPS 嫿˜Ÿä¿¡å·', 'GPSSpeed' => 'GPS接收器的速度', 'GPSSpeedRef' => { Description => '速度å•ä½', PrintConv => { 'km/h' => '公里/å°æ—¶', 'knots' => '海里/å°æ—¶', 'mph' => '英里/å°æ—¶', }, }, 'GPSStatus' => { Description => 'GPS 接收器状æ€', PrintConv => { 'Measurement Active' => '正在测é‡ä¸­', 'Measurement Void' => '测é‡ä¸­æ–­', }, }, 'GPSTimeStamp' => 'GPS æ—¶é—´(原å­é’Ÿ)', 'GPSTrack' => 'è¿åŠ¨æ–¹å‘', 'GPSTrackRef' => { Description => 'è¿åŠ¨æ–¹å‘å‚ç…§', PrintConv => { 'Magnetic North' => 'ç£åœºæ–¹å‘', 'True North' => '真方å‘', }, }, 'GPSVersionID' => 'GPS标签版本', 'GainControl' => { Description => '增益控制', PrintConv => { 'High gain down' => '强å‡å°‘', 'High gain up' => '强增益', 'Low gain down' => 'å¼±å‡å°‘', 'Low gain up' => '弱增益', 'None' => 'æ— ', }, }, 'Gamma' => '对比系数', 'Gradation' => 'ç°é˜¶', 'HDR' => { Description => '自动HDR', PrintConv => { 'Off' => 'å…³', }, }, 'Headline' => '标题', 'HighISONoiseReduction' => { Description => '高ISOé™å™ª', PrintConv => { 'Auto' => '自动', 'High' => '强', 'Low' => 'å¼±', 'Normal' => '标准', 'Off' => 'å…³', }, }, 'Hue' => '色相', 'ICCProfile' => 'ICC 规范', 'IPTC-NAA' => 'IPTC-NAA 元数æ®', 'ISOSetting' => { PrintConv => { 'Auto' => '自动', 'Manual' => '手动', }, }, 'ImageDescription' => 'å›¾åƒæ ‡é¢˜', 'ImageHeight' => 'åƒé«˜', 'ImageOrientation' => { PrintConv => { 'Portrait' => '人物', }, }, 'ImageSize' => '图åƒå°ºå¯¸', 'ImageTone' => { PrintConv => { 'Landscape' => '风景', 'Portrait' => '人物', }, }, 'ImageUniqueID' => '图åƒå”¯ä¸€æ ‡è¯†', 'ImageWidth' => 'åƒå®½', 'Index' => '索引', 'Instructions' => '指示', 'InternalFlash' => { PrintConv => { 'Manual' => '手动', }, }, 'InteropIndex' => { Description => '互用标识', PrintConv => { 'THM - DCF thumbnail file' => 'THM: DCF 缩略图文件', }, }, 'InteropOffset' => '互用指针', 'InteropVersion' => '互用版本', 'JFIFVersion' => 'JFIF 版本', 'JPEGQuality' => { Description => '图åƒè´¨é‡', PrintConv => { 'Extra Fine' => '超精细', 'Fine' => '精细', 'Standard' => '标准画质', 'n/a' => '未设置', }, }, 'Keyword' => '关键è¯', 'Keywords' => '关键字', 'Lens' => '镜头', 'LensInfo' => '镜头信æ¯', 'LensType' => '未设置', 'LicenseType' => { PrintConv => { 'Unknown' => '未知', }, }, 'LightSource' => { Description => 'å…‰æº', PrintConv => { 'Cloudy' => '阴天', 'Cool White Fluorescent' => '冷白色è§å…‰ç¯ï¼ˆW3800-4500K)', 'Day White Fluorescent' => '日光白色è§å…‰ç¯ï¼ˆN4600-5500K)', 'Daylight' => '太阳光', 'Daylight Fluorescent' => '日光色è§å…‰ç¯ï¼ˆD5700-7100K)', 'Fine Weather' => '晴天', 'Flash' => '闪光', 'Fluorescent' => 'è§å…‰', 'ISO Studio Tungsten' => 'ISO相室白炽ç¯', 'Other' => 'å…¶ä»–å…‰æº', 'Shade' => '阴影', 'Standard Light A' => '标准光A', 'Standard Light B' => '标准光B', 'Standard Light C' => '标准光C', 'Tungsten (Incandescent)' => '白炽ç¯', 'Unknown' => '未知', 'Warm White Fluorescent' => '暖白è§å…‰ç¯ï¼ˆL2600-3250K)', 'White Fluorescent' => '白色è§å…‰ç¯ï¼ˆWW3250-3800K)', }, }, 'Lightness' => '明暗度', 'LongExposureNoiseReduction' => { Description => 'é•¿æ—¶é—´æ›å…‰é™å™ª', PrintConv => { 'Auto' => '自动', 'Off' => 'å…³', 'On' => 'å¼€', 'n/a' => '未设置', }, }, 'MIEVersion' => 'MIE 版本', 'Macro' => { PrintConv => { 'Manual' => '手动', 'n/a' => '未设置', }, }, 'Make' => '厂商', 'MakerNote' => '厂商注释', 'MakerNotes' => '制造商记录', 'ManualFlashOutput' => { PrintConv => { 'n/a' => '未设置', }, }, 'MaxAperture' => '镜头光圈最大值', 'MaxApertureValue' => '最大镜头光圈', 'MeteringMode' => { Description => 'æµ‹é‡æ–¹å¼', PrintConv => { 'Average' => 'å¹³å‡', 'Center-weighted average' => '中央é‡ç‚¹', 'Multi-segment' => '分割测光', 'Multi-spot' => '多点', 'Other' => '其它', 'Partial' => '部分测光', 'Spot' => '点测光', 'Unknown' => '未知', }, }, 'Model' => 'åž‹å·', 'ModifiedPictureStyle' => { PrintConv => { 'Landscape' => '风景', 'Portrait' => '人物', }, }, 'ModifiedSharpnessFreq' => { PrintConv => { 'n/a' => '未设置', }, }, 'ModifiedToneCurve' => { PrintConv => { 'Manual' => '手动', }, }, 'ModifiedWhiteBalance' => { PrintConv => { 'Auto' => '自动', 'Cloudy' => '阴天', 'Daylight' => '太阳光', 'Flash' => '闪光', 'Fluorescent' => 'è§å…‰', 'Shade' => '阴影', }, }, 'ModifyDate' => '文件改å˜çš„æ—¥æœŸå’Œæ—¶é—´', 'MultiFrameNoiseReduction' => { Description => '多帧é™å™ª', PrintConv => { 'Off' => 'å…³', 'On' => 'å¼€', }, }, 'NEFCompression' => { PrintConv => { 'Uncompressed' => '未压缩', }, }, 'Noise' => '噪声', 'NoiseReduction' => { Description => 'å‡å°‘噪声', PrintConv => { 'Auto' => '自动', }, }, 'ObjectFileType' => { PrintConv => { 'Unknown' => '未知', }, }, 'Opto-ElectricConvFactor' => '光电转æ¢å› å­', 'Orientation' => { Description => '图åƒå–å‘', PrintConv => { 'Horizontal (normal)' => '0° (上/å·¦)', 'Mirror horizontal' => '0° (上/å³)', 'Mirror horizontal and rotate 270 CW' => '90° CW (å·¦/上)', 'Mirror horizontal and rotate 90 CW' => '90° CCW (å³/底)', 'Mirror vertical' => '180° (底/å·¦)', 'Rotate 180' => '180° (底/å³)', 'Rotate 270 CW' => '90° CW (å·¦/底)', 'Rotate 90 CW' => '90° CCW (å³/上)', }, }, 'PEFVersion' => 'PEF 版本', 'PageNumber' => '页数', 'PhotometricInterpretation' => { Description => 'åƒç´ æ–¹æ¡ˆ', PrintConv => { 'BlackIsZero' => '零黑色', 'Color Filter Array' => 'CFA (颜色滤镜矩阵)', 'Pixar LogL' => 'CIE Log2(L) (对数亮度)', 'Pixar LogLuv' => 'CIE Log2(L)(u\',v\') (对数亮度和色度)', 'RGB Palette' => '调色æ¿é¢œè‰²', 'Transparency Mask' => '逿˜Žè’™æ¿', 'WhiteIsZero' => '零白色', }, }, 'PictureFinish' => { PrintConv => { 'Portrait' => '人物', }, }, 'PictureMode' => { PrintConv => { 'Aperture-priority AE' => '光圈优先', 'Auto' => '自动', 'Landscape' => '风景', 'Manual' => '手动', 'Portrait' => '人物', 'Shutter speed priority AE' => '快门优先', }, }, 'PictureMode2' => { PrintConv => { 'Aperture Priority' => '光圈优先', 'Manual' => '手动', 'Shutter Speed Priority' => '快门优先', }, }, 'PictureModeBWFilter' => { PrintConv => { 'n/a' => '未设置', }, }, 'PictureModeTone' => { PrintConv => { 'n/a' => '未设置', }, }, 'PictureStyle' => { PrintConv => { 'Landscape' => '风景', 'Portrait' => '人物', }, }, 'PixelUnits' => { PrintConv => { 'Unknown' => '未知', }, }, 'PlanarConfiguration' => { Description => 'å›¾åƒæ•°æ®æŽ’列', PrintConv => { 'Chunky' => 'ç‚¹é¡ºåºæ ¼å¼', 'Planar' => '平颿 ¼å¼', }, }, 'PreviewColorSpace' => { PrintConv => { 'Unknown' => '未知', }, }, 'PrimaryChromaticities' => 'åŽŸè‰²è‰²åº¦åæ ‡å€¼', 'ProgramMode' => { PrintConv => { 'Portrait' => '人物', }, }, 'Province-State' => 'å·žï¼çœ', 'Quality' => { Description => '图åƒè´¨é‡', PrintConv => { 'Compressed RAW' => 'cRAW', 'Compressed RAW + JPEG' => 'cRAW+JPEG', 'Extra Fine' => '超精细', 'Fine' => '精细', 'Low' => '低画质', 'Normal' => '标准画质', 'RAW + JPEG' => 'RAW+JPEG', 'Standard' => '标准', 'n/a' => '未设置', }, }, 'RAFVersion' => 'RAF 版本', 'Rating' => '评分', 'RatingPercent' => '百分比评级', 'RecordMode' => { Description => '记录模å¼', PrintConv => { 'Aperture Priority' => '光圈优先', 'Manual' => '手动', 'Shutter Priority' => '快门优先', }, }, 'RecordingMode' => { PrintConv => { 'Auto' => '自动', 'Landscape' => '风景', 'Manual' => '手动', 'Portrait' => '人物', }, }, 'RedEyeCorrection' => { PrintConv => { 'Automatic' => '自动', }, }, 'ReferenceBlackWhite' => '黑白å‚照值对', 'RelatedImageFileFormat' => 'ç›¸å…³å›¾åƒæ–‡ä»¶æ ¼å¼', 'RelatedImageHeight' => '相关图åƒé«˜åº¦', 'RelatedImageWidth' => '相关图åƒå®½åº¦', 'RelatedSoundFile' => '相关的音频文件', 'ResolutionUnit' => { Description => '图åƒé«˜å®½åˆ†è¾¨çއå•ä½', PrintConv => { 'cm' => 'åƒç´ /厘米', 'inches' => '英寸', }, }, 'Rotation' => { PrintConv => { 'Horizontal' => '0° (上/å·¦)', 'Horizontal (Normal)' => '0° (上/å·¦)', 'Horizontal (normal)' => '0° (上/å·¦)', 'Rotate 180' => '180° (底/å³)', 'Rotate 270 CW' => '90° CW (å·¦/底)', 'Rotate 90 CW' => '90° CCW (å³/上)', 'Rotated 180' => '180° (底/å³)', 'Rotated 270 CW' => '90° CW (å·¦/底)', 'Rotated 90 CW' => '90° CCW (å³/上)', }, }, 'RowsPerStrip' => 'æ¯æ¡å¸¦çš„行数', 'SPIFFVersion' => 'SPIFF 版本', 'SRAWQuality' => { PrintConv => { 'n/a' => '未设置', }, }, 'SVGVersion' => 'SVG 版本', 'SamplesPerPixel' => '组件数', 'Saturation' => { Description => '饱和度', PrintConv => { 'High' => '高饱和度', 'Low' => '低饱和度', 'None' => '未设置', 'Normal' => '标准', }, }, 'SceneCaptureType' => { Description => 'å–æ™¯ç±»åž‹', PrintConv => { 'Landscape' => '风景', 'Night' => '夜景', 'Portrait' => '人物', 'Standard' => '标准', }, }, 'SceneMode' => { Description => '场景选择', PrintConv => { '3D Sweep Panorama' => '3D', 'Anti Motion Blur' => '动作防抖', 'Aperture Priority' => '光圈优先', 'Auto' => '自动', 'Cont. Priority AE' => 'è¿žç»­æ‹æ‘„优先AE', 'Handheld Night Shot' => '手æŒå¤œæ™¯æ‹æ‘„', 'Landscape' => '风景', 'Macro' => 'å¾®è·', 'Manual' => '手动', 'Night Portrait' => '夜晚肖åƒ', 'Night Scene' => '夜景', 'Night View/Portrait' => '夜景/è‚–åƒ', 'Portrait' => '人物', 'Shutter Priority' => '快门优先', 'Sports' => 'è¿åŠ¨æ¨¡å¼', 'Sunset' => '夕阳', 'Sweep Panorama' => '扫æå…¨æ™¯', }, }, 'SceneModeUsed' => { PrintConv => { 'Aperture Priority' => '光圈优先', 'Landscape' => '风景', 'Manual' => '手动', 'Portrait' => '人物', 'Shutter Priority' => '快门优先', }, }, 'SceneSelect' => { PrintConv => { 'Night' => '夜景', }, }, 'SceneType' => { Description => '场景类型', PrintConv => { 'Directly photographed' => 'ç›´æŽ¥æ‹æ‘„的图åƒ', }, }, 'SensingMethod' => { Description => '感应方法', PrintConv => { 'Color sequential area' => '色彩连续区感应器', 'Color sequential linear' => '色彩连续线性感应器', 'One-chip color area' => 'å•片色彩区感应器', 'Three-chip color area' => '3 片色彩区传感器', 'Trilinear' => '3 线传感器', 'Two-chip color area' => '2 片色彩区传感器', }, }, 'SerialNumber' => '照相机标识', 'ShadingCompensation' => '阴影补å¿', 'Sharpness' => { Description => 'é”度', PrintConv => { 'Hard' => '强', 'Normal' => '标准', 'Soft' => 'å¼±', 'n/a' => '未设置', }, }, 'SharpnessFrequency' => { PrintConv => { 'n/a' => '未设置', }, }, 'ShootingInfoDisplay' => { PrintConv => { 'Auto' => '自动', }, }, 'ShootingMode' => { Description => 'æ‹æ‘„模å¼', PrintConv => { 'Aperture Priority' => '光圈优先', 'Manual' => '手动', 'Portrait' => '人物', 'Shutter Priority' => '快门优先', }, }, 'ShutterMode' => { PrintConv => { 'Aperture Priority' => '光圈优先', 'Auto' => '自动', }, }, 'ShutterSpeed' => 'æ›å…‰æ—¶é—´', 'ShutterSpeedValue' => '快门速度', 'Software' => '使用软件', 'Source' => 'æ¥æº', 'SpatialFrequencyResponse' => '空间频率å“应', 'SpectralSensitivity' => 'å…‰è°±çµæ•度', 'State' => 'å·ž', 'StripByteCounts' => 'æ¯åŽ‹ç¼©æ¡å¸¦çš„字节数', 'StripOffsets' => 'å›¾åƒæ•°æ®ä½ç½®', 'SubSecCreateDate' => 'æ•°å­—æ•°æ®äº§ç”Ÿçš„æ—¥æœŸå’Œæ—¶é—´', 'SubSecDateTimeOriginal' => '原始数æ®äº§ç”Ÿçš„æ—¥æœŸå’Œæ—¶é—´', 'SubSecModifyDate' => '文件改å˜çš„æ—¥æœŸå’Œæ—¶é—´', 'SubSecTime' => '时间的次秒', 'SubSecTimeDigitized' => '数字化时间的次秒', 'SubSecTimeOriginal' => '原始时间的次秒', 'Subject' => '主题', 'SubjectArea' => '被摄对象区域', 'SubjectDistance' => '目标è·ç¦»', 'SubjectDistanceRange' => { Description => '被摄对象è·ç¦»èŒƒå›´', PrintConv => { 'Close' => '近景', 'Distant' => '远景', 'Macro' => 'å¾®è·', 'Unknown' => '未知', }, }, 'SubjectLocation' => '被摄对象ä½ç½®', 'SubjectProgram' => { PrintConv => { 'Portrait' => '人物', }, }, 'Subsystem' => { PrintConv => { 'Unknown' => '未知', }, }, 'SupplementalCategories' => '追加类别', 'SupplementalType' => { PrintConv => { 'Main Image' => '未设置', }, }, 'T4Options' => '未压缩', 'T6Options' => 'T6 选项', 'ThumbnailImage' => '缩略图', 'ThumbnailImageSize' => '缩图尺寸', 'Title' => '标题', 'ToneCurve' => { PrintConv => { 'Manual' => '手动', }, }, 'ToningEffect' => { PrintConv => { 'n/a' => '未设置', }, }, 'TransferFunction' => 'ä¼ é€åŠŸèƒ½', 'Transformation' => { PrintConv => { 'Horizontal (normal)' => '0° (上/å·¦)', 'Mirror horizontal' => '0° (上/å³)', 'Mirror horizontal and rotate 270 CW' => '90° CW (å·¦/上)', 'Mirror horizontal and rotate 90 CW' => '90° CCW (å³/底)', 'Mirror vertical' => '180° (底/å·¦)', 'Rotate 180' => '180° (底/å³)', 'Rotate 270 CW' => '90° CW (å·¦/底)', 'Rotate 90 CW' => '90° CCW (å³/上)', }, }, 'TransmissionReference' => '传输记录', 'Trapped' => { PrintConv => { 'Unknown' => '未知', }, }, 'Urgency' => '紧急度', 'UserComment' => '用户注释', 'UserDef1PictureStyle' => { PrintConv => { 'Landscape' => '风景', 'Portrait' => '人物', }, }, 'UserDef2PictureStyle' => { PrintConv => { 'Landscape' => '风景', 'Portrait' => '人物', }, }, 'UserDef3PictureStyle' => { PrintConv => { 'Landscape' => '风景', 'Portrait' => '人物', }, }, 'VRDVersion' => 'VRD 版本', 'Version' => '版本', 'VibrationReduction' => { PrintConv => { 'n/a' => '未设置', }, }, 'WBAdjLighting' => { PrintConv => { 'Daylight (direct sunlight)' => '太阳光 (0)', 'Daylight (shade)' => '太阳光 (1)', 'Daylight (cloudy)' => '太阳光 (2)', 'Flash' => '闪光', }, }, 'WBMode' => { PrintConv => { 'Auto' => '自动', }, }, 'WhiteBalance' => { Description => '白平衡', PrintConv => { 'Auto' => '自动', 'Black & White' => '黑白', 'Cloudy' => '阴天', 'Color Temperature/Color Filter' => '色温 / 彩色滤光片', 'Cool White Fluorescent' => '白色è§å…‰ç¯', 'Custom' => '自定义', 'Custom 1' => '自定义1', 'Custom 2' => '自定义2', 'Custom 3' => '自定义3', 'Custom 4' => '自定义4', 'Day White Fluorescent' => '日光白色è§å…‰ç¯', 'Daylight' => '太阳光', 'Daylight Fluorescent' => '日光色è§å…‰ç¯', 'Flash' => '闪光', 'Fluorescent' => 'è§å…‰', 'Manual' => '手动', 'Shade' => '阴影', 'Tungsten' => '白炽ç¯', 'Unknown' => '未知', 'Warm White Fluorescent' => '暖白è§å…‰ç¯', 'White Fluorescent' => '白色è§å…‰ç¯', }, }, 'WhiteBalance2' => { PrintConv => { 'Auto' => '自动', }, }, 'WhiteBalanceAdj' => { PrintConv => { 'Auto' => '自动', 'Cloudy' => '阴天', 'Daylight' => '太阳光', 'Flash' => '闪光', 'Fluorescent' => 'è§å…‰', 'Shade' => '阴影', }, }, 'WhiteBalanceMode' => { PrintConv => { 'Unknown' => '未知', }, }, 'WhiteBalanceSet' => { PrintConv => { 'Auto' => '自动', 'Cloudy' => '阴天', 'Daylight' => '太阳光', 'Flash' => '闪光', 'Manual' => '手动', 'Shade' => '阴影', }, }, 'WhitePoint' => '白点色度', 'Writer-Editor' => '说明作者', 'XMP' => 'XMP 元数æ®', 'XPAuthor' => '作者', 'XPComment' => '注释', 'XPKeywords' => '关键è¯', 'XPSubject' => '主题', 'XPTitle' => '标题', 'YCbCrCoefficients' => 'è‰²å½©ç©ºé—´å˜æ¢çŸ©é˜µç³»æ•°', 'YCbCrPositioning' => { Description => 'YCC åƒç´ ç»“æž„(Y å’Œ C çš„ä½ç½®)', PrintConv => { 'Centered' => '中心的', 'Co-sited' => '一致', }, }, 'YCbCrSubSampling' => 'YCC åƒç´ ç»“æž„(Y 至 C çš„å­é‡‡æ ·çއ)', 'ZoneMatching' => { Description => '区域匹é…', PrintConv => { 'High Key' => '强', 'ISO Setting Used' => 'å…³', 'Low Key' => 'å¼±', }, }, ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::zh_cn.pm - ExifTool Simplified Chinese language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke and Haibing Zhong for providing this translation. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Lang/zh_tw.pm�����������������������������������������������000644 �000765 �000024 �00000065527 12642461344 022303� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: zh_tw.pm # # Description: ExifTool Traditional Chinese language translations # # Notes: This file generated automatically by Image::ExifTool::TagInfoXML #------------------------------------------------------------------------------ package Image::ExifTool::Lang::zh_tw; use strict; use vars qw($VERSION); $VERSION = '1.06'; %Image::ExifTool::Lang::zh_tw::Translate = ( 'Album' => '相簿', 'Aperture' => '光圈', 'ApertureValue' => '光圈', 'Artist' => 'å½±åƒå»ºç«‹è€…', 'Author' => '作者', 'AuthorsPosition' => 'è·ä½', 'BatteryLevel' => '電池容é‡', 'BitsPerSample' => 'æ¯å€‹å…ƒä»¶ bits 組æˆçš„æ•¸é‡', 'Brightness' => '亮度', 'BrightnessValue' => '亮度', 'By-line' => '作者', 'CFAPattern' => '彩色濾é¡é™£åˆ—圖', 'CFAPattern2' => 'CFA æ¨¡å¼ 2', 'CFARepeatPatternDim' => 'CFA é‡è¤‡æ¨¡å¼å°ºå¯¸', 'CalibrationIlluminant1' => { PrintConv => { 'Cloudy' => '多雲', 'Cool White Fluorescent' => '冷白色熒光燈 (W 3800 - 4500K)', 'Day White Fluorescent' => '日光白色熒光燈 (N 4600 - 5500K)', 'Daylight' => '日光', 'Daylight Fluorescent' => '日光熒光燈 (D 5700 - 7100K)', 'Fine Weather' => '晴天', 'Flash' => '閃光燈', 'Fluorescent' => '日光燈', 'ISO Studio Tungsten' => 'ISO æ”影棚鎢燈', 'Other' => 'å…¶ä»–å…‰æº', 'Shade' => '陰天', 'Standard Light A' => '標準燈光 A', 'Standard Light B' => '標準燈光 B', 'Standard Light C' => '標準燈光 C', 'Tungsten (Incandescent)' => '鎢絲燈', 'Unknown' => '未知', 'Warm White Fluorescent' => '暖白螢光燈 (L 2600 - 3250K)', 'White Fluorescent' => '白色熒光燈 (WW 3250 - 3800K)', }, }, 'CalibrationIlluminant2' => { PrintConv => { 'Cloudy' => '多雲', 'Cool White Fluorescent' => '冷白色熒光燈 (W 3800 - 4500K)', 'Day White Fluorescent' => '日光白色熒光燈 (N 4600 - 5500K)', 'Daylight' => '日光', 'Daylight Fluorescent' => '日光熒光燈 (D 5700 - 7100K)', 'Fine Weather' => '晴天', 'Flash' => '閃光燈', 'Fluorescent' => '日光燈', 'ISO Studio Tungsten' => 'ISO æ”影棚鎢燈', 'Other' => 'å…¶ä»–å…‰æº', 'Shade' => '陰天', 'Standard Light A' => '標準燈光 A', 'Standard Light B' => '標準燈光 B', 'Standard Light C' => '標準燈光 C', 'Tungsten (Incandescent)' => '鎢絲燈', 'Unknown' => '未知', 'Warm White Fluorescent' => '暖白螢光燈 (L 2600 - 3250K)', 'White Fluorescent' => '白色熒光燈 (WW 3250 - 3800K)', }, }, 'Caption-Abstract' => '說明', 'CaptionWriter' => '說明作者', 'Categories' => '類別', 'Category' => '類別', 'CellLength' => '元件長度', 'CellWidth' => '元件寬度', 'City' => '城市', 'ColorEffect' => { PrintConv => { 'Sepia' => '懷舊深咖啡色', }, }, 'ColorFilter' => 'é¡è‰²æ¿¾é¡', 'ColorMap' => '色彩地圖', 'ColorMode' => { Description => '風格設定', PrintConv => { 'Autumn Leaves' => '秋葉', 'B&W' => '黑白', 'Clear' => '逿˜Ž', 'Deep' => '深色', 'Landscape' => '風景', 'Light' => '淡色', 'Neutral' => '中性', 'Night View' => '夜景', 'Night View/Portrait' => '夜間肖åƒ', 'Portrait' => 'è‚–åƒ', 'Standard' => '標準', 'Sunset' => 'æ—¥è½', 'Vivid' => '鮮明色彩', }, }, 'ColorResponseUnit' => 'é¡è‰²å應單ä½', 'ColorSpace' => { Description => '色彩空間', PrintConv => { 'ICC Profile' => '色彩æè¿°æª”', 'Uncalibrated' => '未校準', }, }, 'ColorTemperature' => '色溫', 'Comment' => '註解', 'ComponentsConfiguration' => 'æ¯å€‹çµ„æˆéƒ¨åˆ†çš„æ„ç¾©', 'CompressedBitsPerPixel' => 'å½±åƒå£“縮模å¼', 'Compression' => { Description => '壓縮方å¼', PrintConv => { 'JPEG' => 'JPEG壓縮率', 'JPEG (old-style)' => 'JPEG (舊å¼)', 'Kodak DCR Compressed' => 'Kodak DCR 壓縮', 'Kodak KDC Compressed' => 'Kodak KDC 壓縮', 'Next' => 'NeXT 2-bit 編碼', 'Nikon NEF Compressed' => 'Nikon NEF 壓縮', 'Pentax PEF Compressed' => 'Pentax PEF 壓縮', 'SGILog' => 'SGI 32-bit Log Luminance 編碼', 'SGILog24' => 'SGI 24-bit Log Luminance 編碼', 'Sony ARW Compressed' => 'Sony ARW 壓縮', 'Thunderscan' => 'ThunderScan 4-bit 編碼', 'Uncompressed' => '未壓縮', }, }, 'Contrast' => { Description => 'å°æ¯”', PrintConv => { 'High' => '硬', 'Low' => '軟', 'Normal' => '標準', }, }, 'Copyright' => 'ç‰ˆæ¬Šæ“æœ‰äºº', 'CopyrightNotice' => 'ç‰ˆæ¬Šè²æ˜Ž', 'Country' => '國家', 'Country-PrimaryLocationName' => '國家', 'CreateDate' => '數ä½åŒ–的日期時間', 'CreationDate' => '建立日期', 'Credit' => '作者', 'CustomRendered' => { Description => '自訂影åƒè™•ç†', PrintConv => { 'Custom' => '自訂程åº', 'Normal' => '正常程åº', }, }, 'DateCreated' => '建立日期', 'DateTimeOriginal' => 'åŽŸå§‹å½±åƒæ—¥æœŸæ™‚é–“', 'DeviceSettingDescription' => 'è£å‚™è¨­å®šèªªæ˜Ž', 'DigitalZoom' => '數碼變焦', 'DigitalZoomRatio' => '數ä½è®Šç„¦æ¯”率', 'Directory' => '儲存擋案ä½ç½®', 'DocumentName' => '文件å稱', 'DriveMode' => '激勵模å¼', 'DynamicRangeOptimizer' => { Description => 'å‹•æ…‹ç¯„åœæœ€ä½³åŒ–', PrintConv => { 'Advanced Auto' => '進階自動', 'Advanced Lv1' => '進階等級 1', 'Advanced Lv2' => '進階等級 2', 'Advanced Lv3' => '進階等級 3', 'Advanced Lv4' => '進階等級 4', 'Advanced Lv5' => '進階等級 5', 'Auto' => '自動', 'Off' => '關閉', 'Standard' => '標準', }, }, 'ExifImageHeight' => 'å½±åƒé«˜åº¦', 'ExifImageWidth' => 'å½±åƒå¯¬åº¦', 'ExifOffset' => 'Exif IFD指é‡', 'ExifVersion' => 'Exif 版本', 'ExpandFilm' => '展開相片', 'ExpandFilterLens' => '展開濾é¡', 'ExpandFlashLamp' => '展開閃光燈', 'ExpandLens' => '展開é¡é ­', 'ExpandScanner' => '展開掃æå™¨', 'ExpandSoftware' => '展開軟體', 'ExposureCompensation' => 'æ›å…‰è£œå„Ÿ', 'ExposureIndex' => 'æ›å…‰æŒ‡æ•¸', 'ExposureMode' => { Description => 'æ›å…‰æ¨¡å¼', PrintConv => { 'Auto' => '自動æ›å…‰', 'Auto bracket' => 'è‡ªå‹•åŒ…åœæ›å…‰', 'Manual' => '手動æ›å…‰', }, }, 'ExposureProgram' => { Description => 'æ‹æ”模å¼', PrintConv => { 'Action (High speed)' => 'å‹•æ…‹æ¨¡å¼ (高速快門)', 'Aperture-priority AE' => '光圈優先', 'Creative (Slow speed)' => '景深優先', 'Landscape' => '風景模å¼', 'Manual' => '手動', 'Not Defined' => '未定義', 'Portrait' => 'è‚–åƒæ¨¡å¼ (背景在焦è·ä»¥å¤–的特寫照片)', 'Program AE' => '正常', 'Shutter speed priority AE' => '快門優先', }, }, 'ExposureTime' => 'æ›å…‰æ™‚é–“', 'ExtraSamples' => 'é¡å¤–的樣本', 'FNumber' => '光圈', 'FaceOrientation' => { PrintConv => { 'Horizontal (normal)' => '0° (頂端/左邊)', 'Rotate 180' => '180° (底部/å³é‚Š)', 'Rotate 270 CW' => '90° CW (左邊/底部)', 'Rotate 90 CW' => '90° CCW (å³é‚Š/頂端)', }, }, 'FaxRecvParams' => 'å‚³çœŸæŽ¥æ”¶åƒæ•¸', 'FaxRecvTime' => '傳真接收時間', 'FaxSubAddress' => '傳真附屬地å€', 'FileFormat' => 'æ ¼å¼', 'FileModifyDate' => '更新日期', 'FileName' => '檔案å稱', 'FileSize' => '檔案大å°', 'FileSource' => { Description => '檔案來æº', PrintConv => { 'Digital Camera' => '數ä½ç›¸æ©Ÿ', 'Film Scanner' => '底片掃æå™¨', 'Reflection Print Scanner' => 'åå°„åˆ—å°æŽƒæå™¨', }, }, 'FileType' => '檔案格å¼', 'Filename' => '檔案å稱', 'FillOrder' => '填寫訂單', 'Flash' => { Description => '閃光燈', PrintConv => { 'Auto, Did not fire' => '閃光燈未擊發, 自動模å¼', 'Auto, Did not fire, Red-eye reduction' => '自動, 閃光燈未擊發, 防紅眼模å¼', 'Auto, Fired' => '閃光燈擊發, 自動模å¼', 'Auto, Fired, Red-eye reduction' => '閃光燈擊發, 自動模å¼, 防紅眼模å¼', 'Auto, Fired, Red-eye reduction, Return detected' => '閃光燈擊發, 自動模å¼, 嵿¸¬åˆ°åå°„å…‰, 防紅眼模å¼', 'Auto, Fired, Red-eye reduction, Return not detected' => '閃光燈擊發, 自動模å¼, æœªåµæ¸¬åˆ°åå°„å…‰, 防紅眼模å¼', 'Auto, Fired, Return detected' => '閃光燈擊發, 自動模å¼, 嵿¸¬åˆ°åå°„å…‰', 'Auto, Fired, Return not detected' => '閃光燈擊發, 自動模å¼, æœªåµæ¸¬åˆ°åå°„å…‰', 'Did not fire' => '閃光燈未亮', 'Fired' => '閃光燈擊發', 'Fired, Red-eye reduction' => '閃光燈擊發, 防紅眼模å¼', 'Fired, Red-eye reduction, Return detected' => '閃光燈擊發, 防紅眼模å¼, 嵿¸¬åˆ°åå°„å…‰', 'Fired, Red-eye reduction, Return not detected' => '閃光燈擊發, 防紅眼模å¼, æœªåµæ¸¬åˆ°åå°„å…‰', 'Fired, Return detected' => '嵿¸¬åˆ° Strobe åå°„å…‰', 'Fired, Return not detected' => 'æœªåµæ¸¬åˆ° Strobe åå°„å…‰', 'No Flash' => '閃光燈未擊發', 'No flash function' => '沒有閃光功能', 'Off, Did not fire' => '閃光燈未擊發, 強制閃光模å¼', 'Off, Did not fire, Return not detected' => '關閉, 閃光燈未擊發, åå°„æœªåµæ¸¬', 'Off, No flash function' => '關閉, 沒有閃光功能', 'Off, Red-eye reduction' => '關閉, 防紅眼模å¼', 'On, Did not fire' => '開啟, 閃光燈未擊發', 'On, Fired' => '閃光燈擊發, 強制閃光模å¼', 'On, Red-eye reduction' => '閃光燈擊發, 強制閃光模å¼, 防紅眼模å¼', 'On, Red-eye reduction, Return detected' => '閃光燈擊發, 強制閃光模å¼, 防紅眼模å¼, 嵿¸¬åˆ°åå°„å…‰', 'On, Red-eye reduction, Return not detected' => '閃光燈擊發, 強制閃光模å¼, 防紅眼模å¼, æœªåµæ¸¬åˆ°åå°„å…‰', 'On, Return detected' => '閃光燈擊發, 強制閃光模å¼, 嵿¸¬åˆ°åå°„å…‰', 'On, Return not detected' => '閃光燈擊發, 強制閃光模å¼, æœªåµæ¸¬åˆ°åå°„å…‰', }, }, 'FlashEnergy' => '閃光能é‡', 'FlashExposureComp' => '閃光補償', 'FlashpixVersion' => 'æ”¯æ´ Flashpix 版本', 'FocalLength' => '焦è·', 'FocalLength35efl' => '焦è·(35mmæ›ç®—)', 'FocalLengthIn35mmFormat' => '35mm 相機等效焦è·', 'FocalPlaneResolutionUnit' => { Description => '焦平é¢åˆ†è¾¨çއ單ä½', PrintConv => { 'None' => 'ç„¡', 'inches' => '英å‹', 'um' => 'µm (微米)', }, }, 'FocalPlaneXResolution' => 'X軸焦平é¢åˆ†è¾¨çއ', 'FocalPlaneYResolution' => 'Y軸焦平é¢åˆ†è¾¨çއ', 'FocusMode' => 'å°ç„¦æ¨¡å¼', 'FrameRate' => '書é¢é€Ÿçއ', 'FrameSize' => 'ç•«é¢å°ºå¯¸', 'GPSAltitude' => '海拔高度', 'GPSAltitudeRef' => { Description => '海拔高度åƒè€ƒ', PrintConv => { 'Above Sea Level' => 'æµ·å¹³é¢', 'Below Sea Level' => 'æµ·å¹³é¢åƒè€ƒ(負值)', }, }, 'GPSAreaInformation' => 'GPSå€åŸŸå稱', 'GPSDOP' => '測é‡ç²¾åº¦', 'GPSDateStamp' => 'GPS 日期', 'GPSDestBearing' => '目的地方ä½', 'GPSDestBearingRef' => { Description => '目的地方ä½ä¾æ“š', PrintConv => { 'Magnetic North' => 'ç£æ€§çš„æ–¹ä½', 'True North' => '真實的方ä½', }, }, 'GPSDestDistance' => '目的地è·é›¢', 'GPSDestDistanceRef' => { Description => '目的地è·é›¢ä¾æ“š', PrintConv => { 'Kilometers' => '公里', 'Miles' => '英里', 'Nautical Miles' => '節', }, }, 'GPSDestLatitude' => '目的地緯度', 'GPSDestLatitudeRef' => { Description => 'ç›®çš„åœ°çš„ç·¯åº¦ä¾æ“š', PrintConv => { 'North' => '北緯', 'South' => 'å—ç·¯', }, }, 'GPSDestLongitude' => '目的地經度', 'GPSDestLongitudeRef' => { Description => 'ç›®çš„åœ°çš„ç¶“åº¦ä¾æ“š', PrintConv => { 'East' => 'æ±ç¶“', 'West' => '西經', }, }, 'GPSDifferential' => { Description => 'GPS 定ä½å差修正', PrintConv => { 'Differential Corrected' => '定ä½å差修正', 'No Correction' => '無定ä½å差修正', }, }, 'GPSImgDirection' => 'å½±åƒæ–¹ä½', 'GPSImgDirectionRef' => { Description => 'å½±åƒæ–¹ä½ä¾æ“š', PrintConv => { 'Magnetic North' => 'ç£æ€§çš„æ–¹ä½ ', 'True North' => '真實的方ä½', }, }, 'GPSInfo' => 'GPS Info IFD指é‡', 'GPSLatitude' => '緯度', 'GPSLatitudeRef' => { Description => '北/å—ç·¯', PrintConv => { 'North' => '北緯', 'South' => 'å—ç·¯', }, }, 'GPSLongitude' => '經度', 'GPSLongitudeRef' => { Description => 'æ±/西經', PrintConv => { 'East' => 'æ±ç¶“', 'West' => '西經', }, }, 'GPSMapDatum' => 'ä½¿ç”¨å¤§åœ°æ¸¬é‡æ•¸æ“š', 'GPSMeasureMode' => { Description => 'GPS æ¸¬é‡æ¨¡å¼', PrintConv => { '2-Dimensional Measurement' => '2-三維測é‡', '3-Dimensional Measurement' => '3-三維測é‡', }, }, 'GPSProcessingMethod' => 'GPS處ç†å稱', 'GPSSatellites' => '用於測é‡çš„å…¨çƒè¡›æ˜Ÿå®šä½ç³»çµ±è¡›æ˜Ÿ', 'GPSSpeed' => 'GPS 接收機的速度', 'GPSSpeedRef' => { Description => '速度單ä½', PrintConv => { 'km/h' => '時速', 'knots' => '節', 'mph' => '英里', }, }, 'GPSStatus' => { Description => 'GPS接收機的狀態', PrintConv => { 'Measurement Active' => 'æ¸¬é‡æœ‰æ•ˆ', 'Measurement Void' => '測é‡ç„¡æ•ˆ', }, }, 'GPSTimeStamp' => 'GPS 時間 (原å­é˜)', 'GPSTrack' => '移動方ä½', 'GPSTrackRef' => { Description => '移動方ä½ä¾æ“š', PrintConv => { 'Magnetic North' => 'ç£æ€§çš„æ–¹ä½ ', 'True North' => '真實的方ä½', }, }, 'GPSVersionID' => 'GPS 標籤版本', 'GainControl' => { Description => '增益控制', PrintConv => { 'High gain down' => '高衰減', 'High gain up' => '高增益', 'Low gain down' => '低衰減', 'Low gain up' => '低增益', 'None' => 'ç„¡', }, }, 'Gamma' => 'å°æ¯”系數', 'Gradation' => 'ç°éšŽ', 'GrayResponseCurve' => 'ç°è‰²å應曲線', 'GrayResponseUnit' => 'ç°è‰²å應單ä½', 'HDR' => { Description => 'Auto HDR', PrintConv => { 'Off' => '關閉', }, }, 'Headline' => '標題', 'HighISONoiseReduction' => { Description => '高 ISO 雜訊消除', PrintConv => { 'Auto' => '自動', 'High' => '高', 'Low' => '低', 'Normal' => '一般', 'Off' => '關閉', }, }, 'HostComputer' => '主機', 'Hue' => '色相', 'ICCProfile' => 'ICC 色彩設定檔', 'IPTC-NAA' => 'IPTC-NAA 元資料', 'ImageDescription' => 'å½±åƒæ¨™é¡Œ', 'ImageHeight' => 'å½±åƒé«˜åº¦', 'ImageHistory' => 'å½±åƒæ­·å²', 'ImageNumber' => 'å½±åƒç·¨è™Ÿ', 'ImageSize' => 'å½±åƒå°ºå¯¸', 'ImageSourceData' => 'å½±åƒä¾†æºè³‡æ–™', 'ImageUniqueID' => 'ç¨ç‰¹çš„å½±åƒID', 'ImageWidth' => 'å½±åƒå¯¬åº¦', 'Index' => '索引', 'Instructions' => '說明', 'Interlace' => '交錯', 'InteropIndex' => '互通性鑑定', 'InteropOffset' => '互用標記', 'InteropVersion' => '互通性版本', 'JPEGQuality' => { Description => 'å½±åƒå“質', PrintConv => { 'Extra Fine' => '超精細', 'Fine' => '精細', 'Standard' => '標準å“質', }, }, 'Keyword' => 'é—œéµå­—', 'Keywords' => 'é—œéµå­—', 'Lens' => 'é¡é ­', 'LensInfo' => 'é¡é ­è³‡è¨Š', 'LightSource' => { Description => 'å…‰æº', PrintConv => { 'Cloudy' => '多雲', 'Cool White Fluorescent' => '冷白色熒光燈 (W 3800 - 4500K)', 'Day White Fluorescent' => '日光白色熒光燈 (N 4600 - 5500K)', 'Daylight' => '日光', 'Daylight Fluorescent' => '日光熒光燈 (D 5700 - 7100K)', 'Fine Weather' => '晴天', 'Flash' => '閃光燈', 'Fluorescent' => '日光燈', 'ISO Studio Tungsten' => 'ISO æ”影棚鎢燈', 'Other' => 'å…¶ä»–å…‰æº', 'Shade' => '陰天', 'Standard Light A' => '標準燈光 A', 'Standard Light B' => '標準燈光 B', 'Standard Light C' => '標準燈光 C', 'Tungsten (Incandescent)' => '鎢絲燈', 'Unknown' => '未知', 'Warm White Fluorescent' => '暖白螢光燈 (L 2600 - 3250K)', 'White Fluorescent' => '白色熒光燈 (WW 3250 - 3800K)', }, }, 'Lightness' => '明暗度', 'Location' => '地å€', 'LongExposureNoiseReduction' => { Description => '消除長æ›é›œè¨Š', PrintConv => { 'Off' => '關閉', 'On' => '開啟', }, }, 'Make' => '製造商', 'MakerNote' => '製造商註解', 'MakerNotes' => '製造商記錄', 'MaxAperture' => 'é¡é ­å…‰åœˆæœ€å¤§å€¼', 'MaxApertureValue' => 'é¡é ­æœ€å¤§å…‰åœˆ', 'MaxSampleValue' => '大樣å“值', 'MeteringMode' => { Description => '測光模å¼', PrintConv => { 'Average' => '平凿¸¬å…‰', 'Center-weighted average' => '中央é‡é»žå¹³å‡æ¸¬å…‰', 'Multi-segment' => '評價測光', 'Multi-spot' => '多點測光', 'Other' => 'å…¶ä»–', 'Partial' => '局部測光', 'Spot' => '點測光', 'Unknown' => '未知', }, }, 'MinSampleValue' => 'å°æ¨£å“值', 'Model' => '相機型號', 'Model2' => '第二影åƒè¼¸å…¥è¨­å‚™', 'ModifyDate' => 'æª”æ¡ˆå»ºç«‹æ—¥æœŸåŠæ™‚é–“', 'MultiFrameNoiseReduction' => { Description => '多框雜訊消除', PrintConv => { 'Off' => '關閉', 'On' => '開啟', }, }, 'Noise' => '雜訊', 'NoiseReduction' => '雜訊抑制', 'Opto-ElectricConvFactor' => '光電轉æ›å› å­', 'Orientation' => { Description => 'å½±åƒçš„æ–¹å‘', PrintConv => { 'Horizontal (normal)' => '0° (頂端/左邊)', 'Mirror horizontal' => '0° (頂端/å³é‚Š)', 'Mirror horizontal and rotate 270 CW' => '90° CW (左邊/頂端)', 'Mirror horizontal and rotate 90 CW' => '90° CCW (å³é‚Š/底部)', 'Mirror vertical' => '180° (底部/左邊)', 'Rotate 180' => '180° (底部/å³é‚Š)', 'Rotate 270 CW' => '90° CW (左邊/底部)', 'Rotate 90 CW' => '90° CCW (å³é‚Š/頂端)', }, }, 'Padding' => 'å¡«å……', 'PageName' => 'å稱', 'PageNumber' => 'é æ¬¡', 'PhotometricInterpretation' => { Description => 'åƒç´ æ ¼å¼', PrintConv => { 'BlackIsZero' => '黑色為零', 'Color Filter Array' => 'CFA (彩色濾光片矩陣)', 'RGB Palette' => '調色æ¿çš„é¡è‰²', 'Transparency Mask' => '逿˜Žé®ç½©', 'WhiteIsZero' => '白色為零', }, }, 'PlanarConfiguration' => { Description => 'å½±åƒè³‡æ–™ç·¨æŽ’æ–¹å¼', PrintConv => { 'Chunky' => 'Chunky æ ¼å¼ (交錯型)', 'Planar' => 'Planar æ ¼å¼ (å¹³é¢åž‹)', }, }, 'Predictor' => { Description => 'é æ¸¬', PrintConv => { 'Horizontal differencing' => 'æ°´å¹³å€åˆ¥', 'None' => '沒有使用éŽé æ¸¬ç·¨ç¢¼æ–¹æ¡ˆ', }, }, 'PrimaryChromaticities' => 'é é¸çš„色度', 'ProcessingSoftware' => '處ç†è»Ÿé«”', 'Province-State' => 'å·ž/çœ', 'Quality' => { Description => 'å½±åƒå“質', PrintConv => { 'Compressed RAW' => 'cRAW', 'Compressed RAW + JPEG' => 'cRAW+JPEG', 'Extra Fine' => '超精細', 'Fine' => '精細', 'Low' => '低å“質', 'Normal' => '標準å“質', 'RAW + JPEG' => 'RAW+JPEG', 'Standard' => '標準', }, }, 'Rating' => '評分', 'RatingPercent' => '評分的百分比', 'RecordMode' => '記錄模å¼', 'ReferenceBlackWhite' => 'å°é»‘色和白色的åƒè€ƒåƒ¹å€¼', 'RelatedImageFileFormat' => 'ç›¸é—œçš„å½±åƒæª”案格å¼', 'RelatedImageHeight' => '相關的影åƒé«˜åº¦', 'RelatedImageWidth' => '相關的影åƒå¯¬åº¦', 'RelatedSoundFile' => '相關的音頻檔案', 'ResolutionUnit' => { Description => '寬與高的單ä½', PrintConv => { 'None' => 'ç„¡', 'cm' => '公分', 'inches' => '英å‹', }, }, 'RowsPerStrip' => 'æ¯æ¢åˆ—數', 'SamplesPerPixel' => '元件數é‡', 'Saturation' => { Description => '飽和度', PrintConv => { 'High' => '高飽和度', 'Low' => '低飽和度', 'Normal' => '標準', }, }, 'SceneCaptureType' => { Description => '場景擷å–類型', PrintConv => { 'Landscape' => '風景', 'Night' => '夜景', 'Portrait' => 'è‚–åƒ', 'Standard' => '標準', }, }, 'SceneMode' => { Description => 'å ´æ™¯é¸æ“‡', PrintConv => { '3D Sweep Panorama' => '3D', 'Anti Motion Blur' => '防止移動模糊', 'Auto' => '自動', 'Cont. Priority AE' => '連æ‹å„ªå…ˆAE', 'Handheld Night Shot' => '手æŒå¤œæ‹', 'Landscape' => '風景', 'Macro' => 'è¶…è¿‘æ‹æ”', 'Night Portrait' => '夜間肖åƒ', 'Night Scene' => '夜景', 'Night View/Portrait' => '夜景/è‚–åƒ', 'Portrait' => 'è‚–åƒ', 'Sports' => 'é‹å‹•å ´é¢', 'Sunset' => '夕陽', 'Sweep Panorama' => '全景æ”å½±', }, }, 'SceneType' => { Description => '場景類型', PrintConv => { 'Directly photographed' => 'ç›´æŽ¥æ‹æ”的影åƒ', }, }, 'SecurityClassification' => { Description => '安全分類', PrintConv => { 'Confidential' => '秘密', 'Restricted' => 'é™åˆ¶', 'Secret' => '機密', 'Top Secret' => '最高機密', 'Unclassified' => '未分類', }, }, 'SelfTimerMode' => 'å€’æ•¸è‡ªæ‹æ¨¡å¼', 'SensingMethod' => { Description => '感測器類型', PrintConv => { 'Color sequential area' => '連續彩色感測器', 'Color sequential linear' => '連續彩色線性感測器', 'Monochrome area' => '單色感測器', 'Monochrome linear' => '單色線性感測器', 'Not defined' => '未定義', 'One-chip color area' => '單晶片彩色感測器', 'Three-chip color area' => '三晶片彩色感測器', 'Trilinear' => '三線性感測器', 'Two-chip color area' => '雙晶片彩色感測器', }, }, 'SerialNumber' => '照相機ID', 'ShadingCompensation' => '陰影補償', 'Sharpness' => { Description => '銳利度', PrintConv => { 'Hard' => '硬', 'Normal' => '標準', 'Soft' => '軟', }, }, 'ShootingMode' => 'æ‹æ”模å¼', 'ShutterSpeed' => 'æ›å…‰æ™‚é–“', 'ShutterSpeedValue' => 'å¿«é–€', 'Software' => '軟體', 'Source' => '來æº', 'SpatialFrequencyResponse' => '空間頻率響應', 'SpectralSensitivity' => 'å…‰è­œéˆæ•度', 'State' => 'å·ž', 'StripByteCounts' => 'æ­¤è³‡æ–™å€æ®µçš„容é‡', 'StripOffsets' => 'å½±åƒè³‡æ–™ä½å€', 'SubSecTime' => '日期時間秒', 'SubSecTimeDigitized' => '數ä½åŒ–的日期時間秒', 'SubSecTimeOriginal' => 'åŽŸå§‹å½±åƒæ—¥æœŸæ™‚é–“ç§’', 'SubfileType' => 'æ–°çš„ subfile 類型', 'Subject' => '主旨', 'SubjectArea' => '主題地å€', 'SubjectDistance' => '主體è·é›¢ç¯„åœ', 'SubjectDistanceRange' => { Description => '主體è·é›¢ç¯„åœ', PrintConv => { 'Close' => 'è¿‘', 'Distant' => 'é ', 'Macro' => 'å¾®è·', 'Unknown' => '未知', }, }, 'SubjectLocation' => '主題ä½ç½®', 'SupplementalCategories' => '補充類別', 'T4Options' => '未壓縮', 'ThumbnailImage' => '縮略圖', 'ThumbnailImageSize' => '縮圖尺寸', 'Title' => '標題', 'TransferFunction' => '傳éžå‡½æ•¸', 'TransmissionReference' => '傳輸附註', 'Urgency' => '緊急度', 'UserComment' => '使用者註解', 'WhiteBalance' => { Description => '白平衡', PrintConv => { 'Auto' => '自動', 'Black & White' => '黑白', 'Cloudy' => '多雲', 'Color Temperature/Color Filter' => '色溫 / 彩色濾é¡', 'Cool White Fluorescent' => '冷白色螢光燈', 'Custom' => '自設', 'Custom 1' => '用戶自定1', 'Custom 2' => '用戶自定2', 'Custom 3' => '用戶自定3', 'Custom 4' => '用戶自定4', 'Day White Fluorescent' => '日光白色螢光燈', 'Daylight' => '日光', 'Daylight Fluorescent' => '日光色螢光燈', 'Flash' => '閃光燈', 'Fluorescent' => '熒光燈', 'Manual' => '手動', 'Shade' => '陰天', 'Tungsten' => '白熾燈', 'Warm White Fluorescent' => '暖白螢光燈', 'White Fluorescent' => '白色熒光燈', }, }, 'WhitePoint' => '白點色度', 'Writer-Editor' => '說明作者', 'XMP' => 'XMP 元資料', 'XPosition' => 'X ä½ç½®', 'XResolution' => '水平解æžåº¦', 'YCbCrCoefficients' => 'é¡è‰²ç©ºé–“變化矩陣系數', 'YCbCrPositioning' => { Description => 'Y åŠ C 的設定', PrintConv => { 'Centered' => '中心', 'Co-sited' => '一致', }, }, 'YCbCrSubSampling' => 'Y 到 C 的抽樣比率', 'YPosition' => 'Y ä½ç½®', 'YResolution' => '垂直解æžåº¦', 'ZoneMatching' => { Description => 'å€åŸŸåŒ¹é…', PrintConv => { 'High Key' => '高', 'ISO Setting Used' => '關閉', 'Low Key' => '低', }, }, ); 1; # end __END__ =head1 NAME Image::ExifTool::Lang::zh_tw.pm - ExifTool Traditional Chinese language translations =head1 DESCRIPTION This file is used by Image::ExifTool to generate localized tag descriptions and values. =head1 AUTHOR Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 ACKNOWLEDGEMENTS Thanks to Jens Duttke and MikeF for providing this translation. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool>, L<Image::ExifTool::TagInfoXML(3pm)|Image::ExifTool::TagInfoXML> =cut �������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/Arabic.pm�������������������������������������������000644 �000765 �000024 �00000003571 11417362673 023034� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Arabic.pm # # Description: cp1256 to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1256.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::Arabic = ( 0x80 => 0x20ac, 0x81 => 0x067e, 0x82 => 0x201a, 0x83 => 0x0192, 0x84 => 0x201e, 0x85 => 0x2026, 0x86 => 0x2020, 0x87 => 0x2021, 0x88 => 0x02c6, 0x89 => 0x2030, 0x8a => 0x0679, 0x8b => 0x2039, 0x8c => 0x0152, 0x8d => 0x0686, 0x8e => 0x0698, 0x8f => 0x0688, 0x90 => 0x06af, 0x91 => 0x2018, 0x92 => 0x2019, 0x93 => 0x201c, 0x94 => 0x201d, 0x95 => 0x2022, 0x96 => 0x2013, 0x97 => 0x2014, 0x98 => 0x06a9, 0x99 => 0x2122, 0x9a => 0x0691, 0x9b => 0x203a, 0x9c => 0x0153, 0x9d => 0x200c, 0x9e => 0x200d, 0x9f => 0x06ba, 0xa1 => 0x060c, 0xaa => 0x06be, 0xba => 0x061b, 0xbf => 0x061f, 0xc0 => 0x06c1, 0xc1 => 0x0621, 0xc2 => 0x0622, 0xc3 => 0x0623, 0xc4 => 0x0624, 0xc5 => 0x0625, 0xc6 => 0x0626, 0xc7 => 0x0627, 0xc8 => 0x0628, 0xc9 => 0x0629, 0xca => 0x062a, 0xcb => 0x062b, 0xcc => 0x062c, 0xcd => 0x062d, 0xce => 0x062e, 0xcf => 0x062f, 0xd0 => 0x0630, 0xd1 => 0x0631, 0xd2 => 0x0632, 0xd3 => 0x0633, 0xd4 => 0x0634, 0xd5 => 0x0635, 0xd6 => 0x0636, 0xd8 => 0x0637, 0xd9 => 0x0638, 0xda => 0x0639, 0xdb => 0x063a, 0xdc => 0x0640, 0xdd => 0x0641, 0xde => 0x0642, 0xdf => 0x0643, 0xe1 => 0x0644, 0xe3 => 0x0645, 0xe4 => 0x0646, 0xe5 => 0x0647, 0xe6 => 0x0648, 0xec => 0x0649, 0xed => 0x064a, 0xf0 => 0x064b, 0xf1 => 0x064c, 0xf2 => 0x064d, 0xf3 => 0x064e, 0xf5 => 0x064f, 0xf6 => 0x0650, 0xf8 => 0x0651, 0xfa => 0x0652, 0xfd => 0x200e, 0xfe => 0x200f, 0xff => 0x06d2, ); 1; # end ���������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/Baltic.pm�������������������������������������������000644 �000765 �000024 �00000003303 11417362673 023042� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Baltic.pm # # Description: cp1257 to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1257.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::Baltic = ( 0x80 => 0x20ac, 0x82 => 0x201a, 0x84 => 0x201e, 0x85 => 0x2026, 0x86 => 0x2020, 0x87 => 0x2021, 0x89 => 0x2030, 0x8b => 0x2039, 0x8d => 0xa8, 0x8e => 0x02c7, 0x8f => 0xb8, 0x91 => 0x2018, 0x92 => 0x2019, 0x93 => 0x201c, 0x94 => 0x201d, 0x95 => 0x2022, 0x96 => 0x2013, 0x97 => 0x2014, 0x99 => 0x2122, 0x9b => 0x203a, 0x9d => 0xaf, 0x9e => 0x02db, 0xa8 => 0xd8, 0xaa => 0x0156, 0xaf => 0xc6, 0xb8 => 0xf8, 0xba => 0x0157, 0xbf => 0xe6, 0xc0 => 0x0104, 0xc1 => 0x012e, 0xc2 => 0x0100, 0xc3 => 0x0106, 0xc6 => 0x0118, 0xc7 => 0x0112, 0xc8 => 0x010c, 0xca => 0x0179, 0xcb => 0x0116, 0xcc => 0x0122, 0xcd => 0x0136, 0xce => 0x012a, 0xcf => 0x013b, 0xd0 => 0x0160, 0xd1 => 0x0143, 0xd2 => 0x0145, 0xd4 => 0x014c, 0xd8 => 0x0172, 0xd9 => 0x0141, 0xda => 0x015a, 0xdb => 0x016a, 0xdd => 0x017b, 0xde => 0x017d, 0xe0 => 0x0105, 0xe1 => 0x012f, 0xe2 => 0x0101, 0xe3 => 0x0107, 0xe6 => 0x0119, 0xe7 => 0x0113, 0xe8 => 0x010d, 0xea => 0x017a, 0xeb => 0x0117, 0xec => 0x0123, 0xed => 0x0137, 0xee => 0x012b, 0xef => 0x013c, 0xf0 => 0x0161, 0xf1 => 0x0144, 0xf2 => 0x0146, 0xf4 => 0x014d, 0xf8 => 0x0173, 0xf9 => 0x0142, 0xfa => 0x015b, 0xfb => 0x016b, 0xfd => 0x017c, 0xfe => 0x017e, 0xff => 0x02d9, ); 1; # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/Cyrillic.pm�����������������������������������������000644 �000765 �000024 �00000004471 11417362674 023426� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Cyrillic.pm # # Description: cp1251 to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::Cyrillic = ( 0x80 => 0x0402, 0x81 => 0x0403, 0x82 => 0x201a, 0x83 => 0x0453, 0x84 => 0x201e, 0x85 => 0x2026, 0x86 => 0x2020, 0x87 => 0x2021, 0x88 => 0x20ac, 0x89 => 0x2030, 0x8a => 0x0409, 0x8b => 0x2039, 0x8c => 0x040a, 0x8d => 0x040c, 0x8e => 0x040b, 0x8f => 0x040f, 0x90 => 0x0452, 0x91 => 0x2018, 0x92 => 0x2019, 0x93 => 0x201c, 0x94 => 0x201d, 0x95 => 0x2022, 0x96 => 0x2013, 0x97 => 0x2014, 0x99 => 0x2122, 0x9a => 0x0459, 0x9b => 0x203a, 0x9c => 0x045a, 0x9d => 0x045c, 0x9e => 0x045b, 0x9f => 0x045f, 0xa1 => 0x040e, 0xa2 => 0x045e, 0xa3 => 0x0408, 0xa5 => 0x0490, 0xa8 => 0x0401, 0xaa => 0x0404, 0xaf => 0x0407, 0xb2 => 0x0406, 0xb3 => 0x0456, 0xb4 => 0x0491, 0xb8 => 0x0451, 0xb9 => 0x2116, 0xba => 0x0454, 0xbc => 0x0458, 0xbd => 0x0405, 0xbe => 0x0455, 0xbf => 0x0457, 0xc0 => 0x0410, 0xc1 => 0x0411, 0xc2 => 0x0412, 0xc3 => 0x0413, 0xc4 => 0x0414, 0xc5 => 0x0415, 0xc6 => 0x0416, 0xc7 => 0x0417, 0xc8 => 0x0418, 0xc9 => 0x0419, 0xca => 0x041a, 0xcb => 0x041b, 0xcc => 0x041c, 0xcd => 0x041d, 0xce => 0x041e, 0xcf => 0x041f, 0xd0 => 0x0420, 0xd1 => 0x0421, 0xd2 => 0x0422, 0xd3 => 0x0423, 0xd4 => 0x0424, 0xd5 => 0x0425, 0xd6 => 0x0426, 0xd7 => 0x0427, 0xd8 => 0x0428, 0xd9 => 0x0429, 0xda => 0x042a, 0xdb => 0x042b, 0xdc => 0x042c, 0xdd => 0x042d, 0xde => 0x042e, 0xdf => 0x042f, 0xe0 => 0x0430, 0xe1 => 0x0431, 0xe2 => 0x0432, 0xe3 => 0x0433, 0xe4 => 0x0434, 0xe5 => 0x0435, 0xe6 => 0x0436, 0xe7 => 0x0437, 0xe8 => 0x0438, 0xe9 => 0x0439, 0xea => 0x043a, 0xeb => 0x043b, 0xec => 0x043c, 0xed => 0x043d, 0xee => 0x043e, 0xef => 0x043f, 0xf0 => 0x0440, 0xf1 => 0x0441, 0xf2 => 0x0442, 0xf3 => 0x0443, 0xf4 => 0x0444, 0xf5 => 0x0445, 0xf6 => 0x0446, 0xf7 => 0x0447, 0xf8 => 0x0448, 0xf9 => 0x0449, 0xfa => 0x044a, 0xfb => 0x044b, 0xfc => 0x044c, 0xfd => 0x044d, 0xfe => 0x044e, 0xff => 0x044f, ); 1; # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/Greek.pm��������������������������������������������000644 �000765 �000024 �00000003711 11417362674 022705� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Greek.pm # # Description: cp1253 to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1253.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::Greek = ( 0x80 => 0x20ac, 0x82 => 0x201a, 0x83 => 0x0192, 0x84 => 0x201e, 0x85 => 0x2026, 0x86 => 0x2020, 0x87 => 0x2021, 0x89 => 0x2030, 0x8b => 0x2039, 0x91 => 0x2018, 0x92 => 0x2019, 0x93 => 0x201c, 0x94 => 0x201d, 0x95 => 0x2022, 0x96 => 0x2013, 0x97 => 0x2014, 0x99 => 0x2122, 0x9b => 0x203a, 0xa1 => 0x0385, 0xa2 => 0x0386, 0xaf => 0x2015, 0xb4 => 0x0384, 0xb8 => 0x0388, 0xb9 => 0x0389, 0xba => 0x038a, 0xbc => 0x038c, 0xbe => 0x038e, 0xbf => 0x038f, 0xc0 => 0x0390, 0xc1 => 0x0391, 0xc2 => 0x0392, 0xc3 => 0x0393, 0xc4 => 0x0394, 0xc5 => 0x0395, 0xc6 => 0x0396, 0xc7 => 0x0397, 0xc8 => 0x0398, 0xc9 => 0x0399, 0xca => 0x039a, 0xcb => 0x039b, 0xcc => 0x039c, 0xcd => 0x039d, 0xce => 0x039e, 0xcf => 0x039f, 0xd0 => 0x03a0, 0xd1 => 0x03a1, 0xd3 => 0x03a3, 0xd4 => 0x03a4, 0xd5 => 0x03a5, 0xd6 => 0x03a6, 0xd7 => 0x03a7, 0xd8 => 0x03a8, 0xd9 => 0x03a9, 0xda => 0x03aa, 0xdb => 0x03ab, 0xdc => 0x03ac, 0xdd => 0x03ad, 0xde => 0x03ae, 0xdf => 0x03af, 0xe0 => 0x03b0, 0xe1 => 0x03b1, 0xe2 => 0x03b2, 0xe3 => 0x03b3, 0xe4 => 0x03b4, 0xe5 => 0x03b5, 0xe6 => 0x03b6, 0xe7 => 0x03b7, 0xe8 => 0x03b8, 0xe9 => 0x03b9, 0xea => 0x03ba, 0xeb => 0x03bb, 0xec => 0x03bc, 0xed => 0x03bd, 0xee => 0x03be, 0xef => 0x03bf, 0xf0 => 0x03c0, 0xf1 => 0x03c1, 0xf2 => 0x03c2, 0xf3 => 0x03c3, 0xf4 => 0x03c4, 0xf5 => 0x03c5, 0xf6 => 0x03c6, 0xf7 => 0x03c7, 0xf8 => 0x03c8, 0xf9 => 0x03c9, 0xfa => 0x03ca, 0xfb => 0x03cb, 0xfc => 0x03cc, 0xfd => 0x03cd, 0xfe => 0x03ce, ); 1; # end �������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/Hebrew.pm�������������������������������������������000644 �000765 �000024 �00000003337 11417362674 023070� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Hebrew.pm # # Description: cp1255 to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1255.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::Hebrew = ( 0x80 => 0x20ac, 0x82 => 0x201a, 0x83 => 0x0192, 0x84 => 0x201e, 0x85 => 0x2026, 0x86 => 0x2020, 0x87 => 0x2021, 0x88 => 0x02c6, 0x89 => 0x2030, 0x8b => 0x2039, 0x91 => 0x2018, 0x92 => 0x2019, 0x93 => 0x201c, 0x94 => 0x201d, 0x95 => 0x2022, 0x96 => 0x2013, 0x97 => 0x2014, 0x98 => 0x02dc, 0x99 => 0x2122, 0x9b => 0x203a, 0xa4 => 0x20aa, 0xaa => 0xd7, 0xba => 0xf7, 0xc0 => 0x05b0, 0xc1 => 0x05b1, 0xc2 => 0x05b2, 0xc3 => 0x05b3, 0xc4 => 0x05b4, 0xc5 => 0x05b5, 0xc6 => 0x05b6, 0xc7 => 0x05b7, 0xc8 => 0x05b8, 0xc9 => 0x05b9, 0xcb => 0x05bb, 0xcc => 0x05bc, 0xcd => 0x05bd, 0xce => 0x05be, 0xcf => 0x05bf, 0xd0 => 0x05c0, 0xd1 => 0x05c1, 0xd2 => 0x05c2, 0xd3 => 0x05c3, 0xd4 => 0x05f0, 0xd5 => 0x05f1, 0xd6 => 0x05f2, 0xd7 => 0x05f3, 0xd8 => 0x05f4, 0xe0 => 0x05d0, 0xe1 => 0x05d1, 0xe2 => 0x05d2, 0xe3 => 0x05d3, 0xe4 => 0x05d4, 0xe5 => 0x05d5, 0xe6 => 0x05d6, 0xe7 => 0x05d7, 0xe8 => 0x05d8, 0xe9 => 0x05d9, 0xea => 0x05da, 0xeb => 0x05db, 0xec => 0x05dc, 0xed => 0x05dd, 0xee => 0x05de, 0xef => 0x05df, 0xf0 => 0x05e0, 0xf1 => 0x05e1, 0xf2 => 0x05e2, 0xf3 => 0x05e3, 0xf4 => 0x05e4, 0xf5 => 0x05e5, 0xf6 => 0x05e6, 0xf7 => 0x05e7, 0xf8 => 0x05e8, 0xf9 => 0x05e9, 0xfa => 0x05ea, 0xfd => 0x200e, 0xfe => 0x200f, ); 1; # end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/JIS.pm����������������������������������������������000644 �000765 �000024 �00000371314 11417362674 022304� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: JIS.pm # # Description: JIS X 0208 (1990) to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0208.TXT #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::JIS = ( 0x2121 => 0x3000, 0x2122 => 0x3001, 0x2123 => 0x3002, 0x2124 => 0xff0c, 0x2125 => 0xff0e, 0x2126 => 0x30fb, 0x2127 => 0xff1a, 0x2128 => 0xff1b, 0x2129 => 0xff1f, 0x212a => 0xff01, 0x212b => 0x309b, 0x212c => 0x309c, 0x212d => 0x00b4, 0x212e => 0xff40, 0x212f => 0x00a8, 0x2130 => 0xff3e, 0x2131 => 0xffe3, 0x2132 => 0xff3f, 0x2133 => 0x30fd, 0x2134 => 0x30fe, 0x2135 => 0x309d, 0x2136 => 0x309e, 0x2137 => 0x3003, 0x2138 => 0x4edd, 0x2139 => 0x3005, 0x213a => 0x3006, 0x213b => 0x3007, 0x213c => 0x30fc, 0x213d => 0x2015, 0x213e => 0x2010, 0x213f => 0xff0f, 0x2140 => 0x005c, 0x2141 => 0x301c, 0x2142 => 0x2016, 0x2143 => 0xff5c, 0x2144 => 0x2026, 0x2145 => 0x2025, 0x2146 => 0x2018, 0x2147 => 0x2019, 0x2148 => 0x201c, 0x2149 => 0x201d, 0x214a => 0xff08, 0x214b => 0xff09, 0x214c => 0x3014, 0x214d => 0x3015, 0x214e => 0xff3b, 0x214f => 0xff3d, 0x2150 => 0xff5b, 0x2151 => 0xff5d, 0x2152 => 0x3008, 0x2153 => 0x3009, 0x2154 => 0x300a, 0x2155 => 0x300b, 0x2156 => 0x300c, 0x2157 => 0x300d, 0x2158 => 0x300e, 0x2159 => 0x300f, 0x215a => 0x3010, 0x215b => 0x3011, 0x215c => 0xff0b, 0x215d => 0x2212, 0x215e => 0x00b1, 0x215f => 0x00d7, 0x2160 => 0x00f7, 0x2161 => 0xff1d, 0x2162 => 0x2260, 0x2163 => 0xff1c, 0x2164 => 0xff1e, 0x2165 => 0x2266, 0x2166 => 0x2267, 0x2167 => 0x221e, 0x2168 => 0x2234, 0x2169 => 0x2642, 0x216a => 0x2640, 0x216b => 0x00b0, 0x216c => 0x2032, 0x216d => 0x2033, 0x216e => 0x2103, 0x216f => 0xffe5, 0x2170 => 0xff04, 0x2171 => 0x00a2, 0x2172 => 0x00a3, 0x2173 => 0xff05, 0x2174 => 0xff03, 0x2175 => 0xff06, 0x2176 => 0xff0a, 0x2177 => 0xff20, 0x2178 => 0x00a7, 0x2179 => 0x2606, 0x217a => 0x2605, 0x217b => 0x25cb, 0x217c => 0x25cf, 0x217d => 0x25ce, 0x217e => 0x25c7, 0x2221 => 0x25c6, 0x2222 => 0x25a1, 0x2223 => 0x25a0, 0x2224 => 0x25b3, 0x2225 => 0x25b2, 0x2226 => 0x25bd, 0x2227 => 0x25bc, 0x2228 => 0x203b, 0x2229 => 0x3012, 0x222a => 0x2192, 0x222b => 0x2190, 0x222c => 0x2191, 0x222d => 0x2193, 0x222e => 0x3013, 0x223a => 0x2208, 0x223b => 0x220b, 0x223c => 0x2286, 0x223d => 0x2287, 0x223e => 0x2282, 0x223f => 0x2283, 0x2240 => 0x222a, 0x2241 => 0x2229, 0x224a => 0x2227, 0x224b => 0x2228, 0x224c => 0x00ac, 0x224d => 0x21d2, 0x224e => 0x21d4, 0x224f => 0x2200, 0x2250 => 0x2203, 0x225c => 0x2220, 0x225d => 0x22a5, 0x225e => 0x2312, 0x225f => 0x2202, 0x2260 => 0x2207, 0x2261 => 0x2261, 0x2262 => 0x2252, 0x2263 => 0x226a, 0x2264 => 0x226b, 0x2265 => 0x221a, 0x2266 => 0x223d, 0x2267 => 0x221d, 0x2268 => 0x2235, 0x2269 => 0x222b, 0x226a => 0x222c, 0x2272 => 0x212b, 0x2273 => 0x2030, 0x2274 => 0x266f, 0x2275 => 0x266d, 0x2276 => 0x266a, 0x2277 => 0x2020, 0x2278 => 0x2021, 0x2279 => 0x00b6, 0x227e => 0x25ef, 0x2330 => 0xff10, 0x2331 => 0xff11, 0x2332 => 0xff12, 0x2333 => 0xff13, 0x2334 => 0xff14, 0x2335 => 0xff15, 0x2336 => 0xff16, 0x2337 => 0xff17, 0x2338 => 0xff18, 0x2339 => 0xff19, 0x2341 => 0xff21, 0x2342 => 0xff22, 0x2343 => 0xff23, 0x2344 => 0xff24, 0x2345 => 0xff25, 0x2346 => 0xff26, 0x2347 => 0xff27, 0x2348 => 0xff28, 0x2349 => 0xff29, 0x234a => 0xff2a, 0x234b => 0xff2b, 0x234c => 0xff2c, 0x234d => 0xff2d, 0x234e => 0xff2e, 0x234f => 0xff2f, 0x2350 => 0xff30, 0x2351 => 0xff31, 0x2352 => 0xff32, 0x2353 => 0xff33, 0x2354 => 0xff34, 0x2355 => 0xff35, 0x2356 => 0xff36, 0x2357 => 0xff37, 0x2358 => 0xff38, 0x2359 => 0xff39, 0x235a => 0xff3a, 0x2361 => 0xff41, 0x2362 => 0xff42, 0x2363 => 0xff43, 0x2364 => 0xff44, 0x2365 => 0xff45, 0x2366 => 0xff46, 0x2367 => 0xff47, 0x2368 => 0xff48, 0x2369 => 0xff49, 0x236a => 0xff4a, 0x236b => 0xff4b, 0x236c => 0xff4c, 0x236d => 0xff4d, 0x236e => 0xff4e, 0x236f => 0xff4f, 0x2370 => 0xff50, 0x2371 => 0xff51, 0x2372 => 0xff52, 0x2373 => 0xff53, 0x2374 => 0xff54, 0x2375 => 0xff55, 0x2376 => 0xff56, 0x2377 => 0xff57, 0x2378 => 0xff58, 0x2379 => 0xff59, 0x237a => 0xff5a, 0x2421 => 0x3041, 0x2422 => 0x3042, 0x2423 => 0x3043, 0x2424 => 0x3044, 0x2425 => 0x3045, 0x2426 => 0x3046, 0x2427 => 0x3047, 0x2428 => 0x3048, 0x2429 => 0x3049, 0x242a => 0x304a, 0x242b => 0x304b, 0x242c => 0x304c, 0x242d => 0x304d, 0x242e => 0x304e, 0x242f => 0x304f, 0x2430 => 0x3050, 0x2431 => 0x3051, 0x2432 => 0x3052, 0x2433 => 0x3053, 0x2434 => 0x3054, 0x2435 => 0x3055, 0x2436 => 0x3056, 0x2437 => 0x3057, 0x2438 => 0x3058, 0x2439 => 0x3059, 0x243a => 0x305a, 0x243b => 0x305b, 0x243c => 0x305c, 0x243d => 0x305d, 0x243e => 0x305e, 0x243f => 0x305f, 0x2440 => 0x3060, 0x2441 => 0x3061, 0x2442 => 0x3062, 0x2443 => 0x3063, 0x2444 => 0x3064, 0x2445 => 0x3065, 0x2446 => 0x3066, 0x2447 => 0x3067, 0x2448 => 0x3068, 0x2449 => 0x3069, 0x244a => 0x306a, 0x244b => 0x306b, 0x244c => 0x306c, 0x244d => 0x306d, 0x244e => 0x306e, 0x244f => 0x306f, 0x2450 => 0x3070, 0x2451 => 0x3071, 0x2452 => 0x3072, 0x2453 => 0x3073, 0x2454 => 0x3074, 0x2455 => 0x3075, 0x2456 => 0x3076, 0x2457 => 0x3077, 0x2458 => 0x3078, 0x2459 => 0x3079, 0x245a => 0x307a, 0x245b => 0x307b, 0x245c => 0x307c, 0x245d => 0x307d, 0x245e => 0x307e, 0x245f => 0x307f, 0x2460 => 0x3080, 0x2461 => 0x3081, 0x2462 => 0x3082, 0x2463 => 0x3083, 0x2464 => 0x3084, 0x2465 => 0x3085, 0x2466 => 0x3086, 0x2467 => 0x3087, 0x2468 => 0x3088, 0x2469 => 0x3089, 0x246a => 0x308a, 0x246b => 0x308b, 0x246c => 0x308c, 0x246d => 0x308d, 0x246e => 0x308e, 0x246f => 0x308f, 0x2470 => 0x3090, 0x2471 => 0x3091, 0x2472 => 0x3092, 0x2473 => 0x3093, 0x2521 => 0x30a1, 0x2522 => 0x30a2, 0x2523 => 0x30a3, 0x2524 => 0x30a4, 0x2525 => 0x30a5, 0x2526 => 0x30a6, 0x2527 => 0x30a7, 0x2528 => 0x30a8, 0x2529 => 0x30a9, 0x252a => 0x30aa, 0x252b => 0x30ab, 0x252c => 0x30ac, 0x252d => 0x30ad, 0x252e => 0x30ae, 0x252f => 0x30af, 0x2530 => 0x30b0, 0x2531 => 0x30b1, 0x2532 => 0x30b2, 0x2533 => 0x30b3, 0x2534 => 0x30b4, 0x2535 => 0x30b5, 0x2536 => 0x30b6, 0x2537 => 0x30b7, 0x2538 => 0x30b8, 0x2539 => 0x30b9, 0x253a => 0x30ba, 0x253b => 0x30bb, 0x253c => 0x30bc, 0x253d => 0x30bd, 0x253e => 0x30be, 0x253f => 0x30bf, 0x2540 => 0x30c0, 0x2541 => 0x30c1, 0x2542 => 0x30c2, 0x2543 => 0x30c3, 0x2544 => 0x30c4, 0x2545 => 0x30c5, 0x2546 => 0x30c6, 0x2547 => 0x30c7, 0x2548 => 0x30c8, 0x2549 => 0x30c9, 0x254a => 0x30ca, 0x254b => 0x30cb, 0x254c => 0x30cc, 0x254d => 0x30cd, 0x254e => 0x30ce, 0x254f => 0x30cf, 0x2550 => 0x30d0, 0x2551 => 0x30d1, 0x2552 => 0x30d2, 0x2553 => 0x30d3, 0x2554 => 0x30d4, 0x2555 => 0x30d5, 0x2556 => 0x30d6, 0x2557 => 0x30d7, 0x2558 => 0x30d8, 0x2559 => 0x30d9, 0x255a => 0x30da, 0x255b => 0x30db, 0x255c => 0x30dc, 0x255d => 0x30dd, 0x255e => 0x30de, 0x255f => 0x30df, 0x2560 => 0x30e0, 0x2561 => 0x30e1, 0x2562 => 0x30e2, 0x2563 => 0x30e3, 0x2564 => 0x30e4, 0x2565 => 0x30e5, 0x2566 => 0x30e6, 0x2567 => 0x30e7, 0x2568 => 0x30e8, 0x2569 => 0x30e9, 0x256a => 0x30ea, 0x256b => 0x30eb, 0x256c => 0x30ec, 0x256d => 0x30ed, 0x256e => 0x30ee, 0x256f => 0x30ef, 0x2570 => 0x30f0, 0x2571 => 0x30f1, 0x2572 => 0x30f2, 0x2573 => 0x30f3, 0x2574 => 0x30f4, 0x2575 => 0x30f5, 0x2576 => 0x30f6, 0x2621 => 0x0391, 0x2622 => 0x0392, 0x2623 => 0x0393, 0x2624 => 0x0394, 0x2625 => 0x0395, 0x2626 => 0x0396, 0x2627 => 0x0397, 0x2628 => 0x0398, 0x2629 => 0x0399, 0x262a => 0x039a, 0x262b => 0x039b, 0x262c => 0x039c, 0x262d => 0x039d, 0x262e => 0x039e, 0x262f => 0x039f, 0x2630 => 0x03a0, 0x2631 => 0x03a1, 0x2632 => 0x03a3, 0x2633 => 0x03a4, 0x2634 => 0x03a5, 0x2635 => 0x03a6, 0x2636 => 0x03a7, 0x2637 => 0x03a8, 0x2638 => 0x03a9, 0x2641 => 0x03b1, 0x2642 => 0x03b2, 0x2643 => 0x03b3, 0x2644 => 0x03b4, 0x2645 => 0x03b5, 0x2646 => 0x03b6, 0x2647 => 0x03b7, 0x2648 => 0x03b8, 0x2649 => 0x03b9, 0x264a => 0x03ba, 0x264b => 0x03bb, 0x264c => 0x03bc, 0x264d => 0x03bd, 0x264e => 0x03be, 0x264f => 0x03bf, 0x2650 => 0x03c0, 0x2651 => 0x03c1, 0x2652 => 0x03c3, 0x2653 => 0x03c4, 0x2654 => 0x03c5, 0x2655 => 0x03c6, 0x2656 => 0x03c7, 0x2657 => 0x03c8, 0x2658 => 0x03c9, 0x2721 => 0x0410, 0x2722 => 0x0411, 0x2723 => 0x0412, 0x2724 => 0x0413, 0x2725 => 0x0414, 0x2726 => 0x0415, 0x2727 => 0x0401, 0x2728 => 0x0416, 0x2729 => 0x0417, 0x272a => 0x0418, 0x272b => 0x0419, 0x272c => 0x041a, 0x272d => 0x041b, 0x272e => 0x041c, 0x272f => 0x041d, 0x2730 => 0x041e, 0x2731 => 0x041f, 0x2732 => 0x0420, 0x2733 => 0x0421, 0x2734 => 0x0422, 0x2735 => 0x0423, 0x2736 => 0x0424, 0x2737 => 0x0425, 0x2738 => 0x0426, 0x2739 => 0x0427, 0x273a => 0x0428, 0x273b => 0x0429, 0x273c => 0x042a, 0x273d => 0x042b, 0x273e => 0x042c, 0x273f => 0x042d, 0x2740 => 0x042e, 0x2741 => 0x042f, 0x2751 => 0x0430, 0x2752 => 0x0431, 0x2753 => 0x0432, 0x2754 => 0x0433, 0x2755 => 0x0434, 0x2756 => 0x0435, 0x2757 => 0x0451, 0x2758 => 0x0436, 0x2759 => 0x0437, 0x275a => 0x0438, 0x275b => 0x0439, 0x275c => 0x043a, 0x275d => 0x043b, 0x275e => 0x043c, 0x275f => 0x043d, 0x2760 => 0x043e, 0x2761 => 0x043f, 0x2762 => 0x0440, 0x2763 => 0x0441, 0x2764 => 0x0442, 0x2765 => 0x0443, 0x2766 => 0x0444, 0x2767 => 0x0445, 0x2768 => 0x0446, 0x2769 => 0x0447, 0x276a => 0x0448, 0x276b => 0x0449, 0x276c => 0x044a, 0x276d => 0x044b, 0x276e => 0x044c, 0x276f => 0x044d, 0x2770 => 0x044e, 0x2771 => 0x044f, 0x2821 => 0x2500, 0x2822 => 0x2502, 0x2823 => 0x250c, 0x2824 => 0x2510, 0x2825 => 0x2518, 0x2826 => 0x2514, 0x2827 => 0x251c, 0x2828 => 0x252c, 0x2829 => 0x2524, 0x282a => 0x2534, 0x282b => 0x253c, 0x282c => 0x2501, 0x282d => 0x2503, 0x282e => 0x250f, 0x282f => 0x2513, 0x2830 => 0x251b, 0x2831 => 0x2517, 0x2832 => 0x2523, 0x2833 => 0x2533, 0x2834 => 0x252b, 0x2835 => 0x253b, 0x2836 => 0x254b, 0x2837 => 0x2520, 0x2838 => 0x252f, 0x2839 => 0x2528, 0x283a => 0x2537, 0x283b => 0x253f, 0x283c => 0x251d, 0x283d => 0x2530, 0x283e => 0x2525, 0x283f => 0x2538, 0x2840 => 0x2542, 0x3021 => 0x4e9c, 0x3022 => 0x5516, 0x3023 => 0x5a03, 0x3024 => 0x963f, 0x3025 => 0x54c0, 0x3026 => 0x611b, 0x3027 => 0x6328, 0x3028 => 0x59f6, 0x3029 => 0x9022, 0x302a => 0x8475, 0x302b => 0x831c, 0x302c => 0x7a50, 0x302d => 0x60aa, 0x302e => 0x63e1, 0x302f => 0x6e25, 0x3030 => 0x65ed, 0x3031 => 0x8466, 0x3032 => 0x82a6, 0x3033 => 0x9bf5, 0x3034 => 0x6893, 0x3035 => 0x5727, 0x3036 => 0x65a1, 0x3037 => 0x6271, 0x3038 => 0x5b9b, 0x3039 => 0x59d0, 0x303a => 0x867b, 0x303b => 0x98f4, 0x303c => 0x7d62, 0x303d => 0x7dbe, 0x303e => 0x9b8e, 0x303f => 0x6216, 0x3040 => 0x7c9f, 0x3041 => 0x88b7, 0x3042 => 0x5b89, 0x3043 => 0x5eb5, 0x3044 => 0x6309, 0x3045 => 0x6697, 0x3046 => 0x6848, 0x3047 => 0x95c7, 0x3048 => 0x978d, 0x3049 => 0x674f, 0x304a => 0x4ee5, 0x304b => 0x4f0a, 0x304c => 0x4f4d, 0x304d => 0x4f9d, 0x304e => 0x5049, 0x304f => 0x56f2, 0x3050 => 0x5937, 0x3051 => 0x59d4, 0x3052 => 0x5a01, 0x3053 => 0x5c09, 0x3054 => 0x60df, 0x3055 => 0x610f, 0x3056 => 0x6170, 0x3057 => 0x6613, 0x3058 => 0x6905, 0x3059 => 0x70ba, 0x305a => 0x754f, 0x305b => 0x7570, 0x305c => 0x79fb, 0x305d => 0x7dad, 0x305e => 0x7def, 0x305f => 0x80c3, 0x3060 => 0x840e, 0x3061 => 0x8863, 0x3062 => 0x8b02, 0x3063 => 0x9055, 0x3064 => 0x907a, 0x3065 => 0x533b, 0x3066 => 0x4e95, 0x3067 => 0x4ea5, 0x3068 => 0x57df, 0x3069 => 0x80b2, 0x306a => 0x90c1, 0x306b => 0x78ef, 0x306c => 0x4e00, 0x306d => 0x58f1, 0x306e => 0x6ea2, 0x306f => 0x9038, 0x3070 => 0x7a32, 0x3071 => 0x8328, 0x3072 => 0x828b, 0x3073 => 0x9c2f, 0x3074 => 0x5141, 0x3075 => 0x5370, 0x3076 => 0x54bd, 0x3077 => 0x54e1, 0x3078 => 0x56e0, 0x3079 => 0x59fb, 0x307a => 0x5f15, 0x307b => 0x98f2, 0x307c => 0x6deb, 0x307d => 0x80e4, 0x307e => 0x852d, 0x3121 => 0x9662, 0x3122 => 0x9670, 0x3123 => 0x96a0, 0x3124 => 0x97fb, 0x3125 => 0x540b, 0x3126 => 0x53f3, 0x3127 => 0x5b87, 0x3128 => 0x70cf, 0x3129 => 0x7fbd, 0x312a => 0x8fc2, 0x312b => 0x96e8, 0x312c => 0x536f, 0x312d => 0x9d5c, 0x312e => 0x7aba, 0x312f => 0x4e11, 0x3130 => 0x7893, 0x3131 => 0x81fc, 0x3132 => 0x6e26, 0x3133 => 0x5618, 0x3134 => 0x5504, 0x3135 => 0x6b1d, 0x3136 => 0x851a, 0x3137 => 0x9c3b, 0x3138 => 0x59e5, 0x3139 => 0x53a9, 0x313a => 0x6d66, 0x313b => 0x74dc, 0x313c => 0x958f, 0x313d => 0x5642, 0x313e => 0x4e91, 0x313f => 0x904b, 0x3140 => 0x96f2, 0x3141 => 0x834f, 0x3142 => 0x990c, 0x3143 => 0x53e1, 0x3144 => 0x55b6, 0x3145 => 0x5b30, 0x3146 => 0x5f71, 0x3147 => 0x6620, 0x3148 => 0x66f3, 0x3149 => 0x6804, 0x314a => 0x6c38, 0x314b => 0x6cf3, 0x314c => 0x6d29, 0x314d => 0x745b, 0x314e => 0x76c8, 0x314f => 0x7a4e, 0x3150 => 0x9834, 0x3151 => 0x82f1, 0x3152 => 0x885b, 0x3153 => 0x8a60, 0x3154 => 0x92ed, 0x3155 => 0x6db2, 0x3156 => 0x75ab, 0x3157 => 0x76ca, 0x3158 => 0x99c5, 0x3159 => 0x60a6, 0x315a => 0x8b01, 0x315b => 0x8d8a, 0x315c => 0x95b2, 0x315d => 0x698e, 0x315e => 0x53ad, 0x315f => 0x5186, 0x3160 => 0x5712, 0x3161 => 0x5830, 0x3162 => 0x5944, 0x3163 => 0x5bb4, 0x3164 => 0x5ef6, 0x3165 => 0x6028, 0x3166 => 0x63a9, 0x3167 => 0x63f4, 0x3168 => 0x6cbf, 0x3169 => 0x6f14, 0x316a => 0x708e, 0x316b => 0x7114, 0x316c => 0x7159, 0x316d => 0x71d5, 0x316e => 0x733f, 0x316f => 0x7e01, 0x3170 => 0x8276, 0x3171 => 0x82d1, 0x3172 => 0x8597, 0x3173 => 0x9060, 0x3174 => 0x925b, 0x3175 => 0x9d1b, 0x3176 => 0x5869, 0x3177 => 0x65bc, 0x3178 => 0x6c5a, 0x3179 => 0x7525, 0x317a => 0x51f9, 0x317b => 0x592e, 0x317c => 0x5965, 0x317d => 0x5f80, 0x317e => 0x5fdc, 0x3221 => 0x62bc, 0x3222 => 0x65fa, 0x3223 => 0x6a2a, 0x3224 => 0x6b27, 0x3225 => 0x6bb4, 0x3226 => 0x738b, 0x3227 => 0x7fc1, 0x3228 => 0x8956, 0x3229 => 0x9d2c, 0x322a => 0x9d0e, 0x322b => 0x9ec4, 0x322c => 0x5ca1, 0x322d => 0x6c96, 0x322e => 0x837b, 0x322f => 0x5104, 0x3230 => 0x5c4b, 0x3231 => 0x61b6, 0x3232 => 0x81c6, 0x3233 => 0x6876, 0x3234 => 0x7261, 0x3235 => 0x4e59, 0x3236 => 0x4ffa, 0x3237 => 0x5378, 0x3238 => 0x6069, 0x3239 => 0x6e29, 0x323a => 0x7a4f, 0x323b => 0x97f3, 0x323c => 0x4e0b, 0x323d => 0x5316, 0x323e => 0x4eee, 0x323f => 0x4f55, 0x3240 => 0x4f3d, 0x3241 => 0x4fa1, 0x3242 => 0x4f73, 0x3243 => 0x52a0, 0x3244 => 0x53ef, 0x3245 => 0x5609, 0x3246 => 0x590f, 0x3247 => 0x5ac1, 0x3248 => 0x5bb6, 0x3249 => 0x5be1, 0x324a => 0x79d1, 0x324b => 0x6687, 0x324c => 0x679c, 0x324d => 0x67b6, 0x324e => 0x6b4c, 0x324f => 0x6cb3, 0x3250 => 0x706b, 0x3251 => 0x73c2, 0x3252 => 0x798d, 0x3253 => 0x79be, 0x3254 => 0x7a3c, 0x3255 => 0x7b87, 0x3256 => 0x82b1, 0x3257 => 0x82db, 0x3258 => 0x8304, 0x3259 => 0x8377, 0x325a => 0x83ef, 0x325b => 0x83d3, 0x325c => 0x8766, 0x325d => 0x8ab2, 0x325e => 0x5629, 0x325f => 0x8ca8, 0x3260 => 0x8fe6, 0x3261 => 0x904e, 0x3262 => 0x971e, 0x3263 => 0x868a, 0x3264 => 0x4fc4, 0x3265 => 0x5ce8, 0x3266 => 0x6211, 0x3267 => 0x7259, 0x3268 => 0x753b, 0x3269 => 0x81e5, 0x326a => 0x82bd, 0x326b => 0x86fe, 0x326c => 0x8cc0, 0x326d => 0x96c5, 0x326e => 0x9913, 0x326f => 0x99d5, 0x3270 => 0x4ecb, 0x3271 => 0x4f1a, 0x3272 => 0x89e3, 0x3273 => 0x56de, 0x3274 => 0x584a, 0x3275 => 0x58ca, 0x3276 => 0x5efb, 0x3277 => 0x5feb, 0x3278 => 0x602a, 0x3279 => 0x6094, 0x327a => 0x6062, 0x327b => 0x61d0, 0x327c => 0x6212, 0x327d => 0x62d0, 0x327e => 0x6539, 0x3321 => 0x9b41, 0x3322 => 0x6666, 0x3323 => 0x68b0, 0x3324 => 0x6d77, 0x3325 => 0x7070, 0x3326 => 0x754c, 0x3327 => 0x7686, 0x3328 => 0x7d75, 0x3329 => 0x82a5, 0x332a => 0x87f9, 0x332b => 0x958b, 0x332c => 0x968e, 0x332d => 0x8c9d, 0x332e => 0x51f1, 0x332f => 0x52be, 0x3330 => 0x5916, 0x3331 => 0x54b3, 0x3332 => 0x5bb3, 0x3333 => 0x5d16, 0x3334 => 0x6168, 0x3335 => 0x6982, 0x3336 => 0x6daf, 0x3337 => 0x788d, 0x3338 => 0x84cb, 0x3339 => 0x8857, 0x333a => 0x8a72, 0x333b => 0x93a7, 0x333c => 0x9ab8, 0x333d => 0x6d6c, 0x333e => 0x99a8, 0x333f => 0x86d9, 0x3340 => 0x57a3, 0x3341 => 0x67ff, 0x3342 => 0x86ce, 0x3343 => 0x920e, 0x3344 => 0x5283, 0x3345 => 0x5687, 0x3346 => 0x5404, 0x3347 => 0x5ed3, 0x3348 => 0x62e1, 0x3349 => 0x64b9, 0x334a => 0x683c, 0x334b => 0x6838, 0x334c => 0x6bbb, 0x334d => 0x7372, 0x334e => 0x78ba, 0x334f => 0x7a6b, 0x3350 => 0x899a, 0x3351 => 0x89d2, 0x3352 => 0x8d6b, 0x3353 => 0x8f03, 0x3354 => 0x90ed, 0x3355 => 0x95a3, 0x3356 => 0x9694, 0x3357 => 0x9769, 0x3358 => 0x5b66, 0x3359 => 0x5cb3, 0x335a => 0x697d, 0x335b => 0x984d, 0x335c => 0x984e, 0x335d => 0x639b, 0x335e => 0x7b20, 0x335f => 0x6a2b, 0x3360 => 0x6a7f, 0x3361 => 0x68b6, 0x3362 => 0x9c0d, 0x3363 => 0x6f5f, 0x3364 => 0x5272, 0x3365 => 0x559d, 0x3366 => 0x6070, 0x3367 => 0x62ec, 0x3368 => 0x6d3b, 0x3369 => 0x6e07, 0x336a => 0x6ed1, 0x336b => 0x845b, 0x336c => 0x8910, 0x336d => 0x8f44, 0x336e => 0x4e14, 0x336f => 0x9c39, 0x3370 => 0x53f6, 0x3371 => 0x691b, 0x3372 => 0x6a3a, 0x3373 => 0x9784, 0x3374 => 0x682a, 0x3375 => 0x515c, 0x3376 => 0x7ac3, 0x3377 => 0x84b2, 0x3378 => 0x91dc, 0x3379 => 0x938c, 0x337a => 0x565b, 0x337b => 0x9d28, 0x337c => 0x6822, 0x337d => 0x8305, 0x337e => 0x8431, 0x3421 => 0x7ca5, 0x3422 => 0x5208, 0x3423 => 0x82c5, 0x3424 => 0x74e6, 0x3425 => 0x4e7e, 0x3426 => 0x4f83, 0x3427 => 0x51a0, 0x3428 => 0x5bd2, 0x3429 => 0x520a, 0x342a => 0x52d8, 0x342b => 0x52e7, 0x342c => 0x5dfb, 0x342d => 0x559a, 0x342e => 0x582a, 0x342f => 0x59e6, 0x3430 => 0x5b8c, 0x3431 => 0x5b98, 0x3432 => 0x5bdb, 0x3433 => 0x5e72, 0x3434 => 0x5e79, 0x3435 => 0x60a3, 0x3436 => 0x611f, 0x3437 => 0x6163, 0x3438 => 0x61be, 0x3439 => 0x63db, 0x343a => 0x6562, 0x343b => 0x67d1, 0x343c => 0x6853, 0x343d => 0x68fa, 0x343e => 0x6b3e, 0x343f => 0x6b53, 0x3440 => 0x6c57, 0x3441 => 0x6f22, 0x3442 => 0x6f97, 0x3443 => 0x6f45, 0x3444 => 0x74b0, 0x3445 => 0x7518, 0x3446 => 0x76e3, 0x3447 => 0x770b, 0x3448 => 0x7aff, 0x3449 => 0x7ba1, 0x344a => 0x7c21, 0x344b => 0x7de9, 0x344c => 0x7f36, 0x344d => 0x7ff0, 0x344e => 0x809d, 0x344f => 0x8266, 0x3450 => 0x839e, 0x3451 => 0x89b3, 0x3452 => 0x8acc, 0x3453 => 0x8cab, 0x3454 => 0x9084, 0x3455 => 0x9451, 0x3456 => 0x9593, 0x3457 => 0x9591, 0x3458 => 0x95a2, 0x3459 => 0x9665, 0x345a => 0x97d3, 0x345b => 0x9928, 0x345c => 0x8218, 0x345d => 0x4e38, 0x345e => 0x542b, 0x345f => 0x5cb8, 0x3460 => 0x5dcc, 0x3461 => 0x73a9, 0x3462 => 0x764c, 0x3463 => 0x773c, 0x3464 => 0x5ca9, 0x3465 => 0x7feb, 0x3466 => 0x8d0b, 0x3467 => 0x96c1, 0x3468 => 0x9811, 0x3469 => 0x9854, 0x346a => 0x9858, 0x346b => 0x4f01, 0x346c => 0x4f0e, 0x346d => 0x5371, 0x346e => 0x559c, 0x346f => 0x5668, 0x3470 => 0x57fa, 0x3471 => 0x5947, 0x3472 => 0x5b09, 0x3473 => 0x5bc4, 0x3474 => 0x5c90, 0x3475 => 0x5e0c, 0x3476 => 0x5e7e, 0x3477 => 0x5fcc, 0x3478 => 0x63ee, 0x3479 => 0x673a, 0x347a => 0x65d7, 0x347b => 0x65e2, 0x347c => 0x671f, 0x347d => 0x68cb, 0x347e => 0x68c4, 0x3521 => 0x6a5f, 0x3522 => 0x5e30, 0x3523 => 0x6bc5, 0x3524 => 0x6c17, 0x3525 => 0x6c7d, 0x3526 => 0x757f, 0x3527 => 0x7948, 0x3528 => 0x5b63, 0x3529 => 0x7a00, 0x352a => 0x7d00, 0x352b => 0x5fbd, 0x352c => 0x898f, 0x352d => 0x8a18, 0x352e => 0x8cb4, 0x352f => 0x8d77, 0x3530 => 0x8ecc, 0x3531 => 0x8f1d, 0x3532 => 0x98e2, 0x3533 => 0x9a0e, 0x3534 => 0x9b3c, 0x3535 => 0x4e80, 0x3536 => 0x507d, 0x3537 => 0x5100, 0x3538 => 0x5993, 0x3539 => 0x5b9c, 0x353a => 0x622f, 0x353b => 0x6280, 0x353c => 0x64ec, 0x353d => 0x6b3a, 0x353e => 0x72a0, 0x353f => 0x7591, 0x3540 => 0x7947, 0x3541 => 0x7fa9, 0x3542 => 0x87fb, 0x3543 => 0x8abc, 0x3544 => 0x8b70, 0x3545 => 0x63ac, 0x3546 => 0x83ca, 0x3547 => 0x97a0, 0x3548 => 0x5409, 0x3549 => 0x5403, 0x354a => 0x55ab, 0x354b => 0x6854, 0x354c => 0x6a58, 0x354d => 0x8a70, 0x354e => 0x7827, 0x354f => 0x6775, 0x3550 => 0x9ecd, 0x3551 => 0x5374, 0x3552 => 0x5ba2, 0x3553 => 0x811a, 0x3554 => 0x8650, 0x3555 => 0x9006, 0x3556 => 0x4e18, 0x3557 => 0x4e45, 0x3558 => 0x4ec7, 0x3559 => 0x4f11, 0x355a => 0x53ca, 0x355b => 0x5438, 0x355c => 0x5bae, 0x355d => 0x5f13, 0x355e => 0x6025, 0x355f => 0x6551, 0x3560 => 0x673d, 0x3561 => 0x6c42, 0x3562 => 0x6c72, 0x3563 => 0x6ce3, 0x3564 => 0x7078, 0x3565 => 0x7403, 0x3566 => 0x7a76, 0x3567 => 0x7aae, 0x3568 => 0x7b08, 0x3569 => 0x7d1a, 0x356a => 0x7cfe, 0x356b => 0x7d66, 0x356c => 0x65e7, 0x356d => 0x725b, 0x356e => 0x53bb, 0x356f => 0x5c45, 0x3570 => 0x5de8, 0x3571 => 0x62d2, 0x3572 => 0x62e0, 0x3573 => 0x6319, 0x3574 => 0x6e20, 0x3575 => 0x865a, 0x3576 => 0x8a31, 0x3577 => 0x8ddd, 0x3578 => 0x92f8, 0x3579 => 0x6f01, 0x357a => 0x79a6, 0x357b => 0x9b5a, 0x357c => 0x4ea8, 0x357d => 0x4eab, 0x357e => 0x4eac, 0x3621 => 0x4f9b, 0x3622 => 0x4fa0, 0x3623 => 0x50d1, 0x3624 => 0x5147, 0x3625 => 0x7af6, 0x3626 => 0x5171, 0x3627 => 0x51f6, 0x3628 => 0x5354, 0x3629 => 0x5321, 0x362a => 0x537f, 0x362b => 0x53eb, 0x362c => 0x55ac, 0x362d => 0x5883, 0x362e => 0x5ce1, 0x362f => 0x5f37, 0x3630 => 0x5f4a, 0x3631 => 0x602f, 0x3632 => 0x6050, 0x3633 => 0x606d, 0x3634 => 0x631f, 0x3635 => 0x6559, 0x3636 => 0x6a4b, 0x3637 => 0x6cc1, 0x3638 => 0x72c2, 0x3639 => 0x72ed, 0x363a => 0x77ef, 0x363b => 0x80f8, 0x363c => 0x8105, 0x363d => 0x8208, 0x363e => 0x854e, 0x363f => 0x90f7, 0x3640 => 0x93e1, 0x3641 => 0x97ff, 0x3642 => 0x9957, 0x3643 => 0x9a5a, 0x3644 => 0x4ef0, 0x3645 => 0x51dd, 0x3646 => 0x5c2d, 0x3647 => 0x6681, 0x3648 => 0x696d, 0x3649 => 0x5c40, 0x364a => 0x66f2, 0x364b => 0x6975, 0x364c => 0x7389, 0x364d => 0x6850, 0x364e => 0x7c81, 0x364f => 0x50c5, 0x3650 => 0x52e4, 0x3651 => 0x5747, 0x3652 => 0x5dfe, 0x3653 => 0x9326, 0x3654 => 0x65a4, 0x3655 => 0x6b23, 0x3656 => 0x6b3d, 0x3657 => 0x7434, 0x3658 => 0x7981, 0x3659 => 0x79bd, 0x365a => 0x7b4b, 0x365b => 0x7dca, 0x365c => 0x82b9, 0x365d => 0x83cc, 0x365e => 0x887f, 0x365f => 0x895f, 0x3660 => 0x8b39, 0x3661 => 0x8fd1, 0x3662 => 0x91d1, 0x3663 => 0x541f, 0x3664 => 0x9280, 0x3665 => 0x4e5d, 0x3666 => 0x5036, 0x3667 => 0x53e5, 0x3668 => 0x533a, 0x3669 => 0x72d7, 0x366a => 0x7396, 0x366b => 0x77e9, 0x366c => 0x82e6, 0x366d => 0x8eaf, 0x366e => 0x99c6, 0x366f => 0x99c8, 0x3670 => 0x99d2, 0x3671 => 0x5177, 0x3672 => 0x611a, 0x3673 => 0x865e, 0x3674 => 0x55b0, 0x3675 => 0x7a7a, 0x3676 => 0x5076, 0x3677 => 0x5bd3, 0x3678 => 0x9047, 0x3679 => 0x9685, 0x367a => 0x4e32, 0x367b => 0x6adb, 0x367c => 0x91e7, 0x367d => 0x5c51, 0x367e => 0x5c48, 0x3721 => 0x6398, 0x3722 => 0x7a9f, 0x3723 => 0x6c93, 0x3724 => 0x9774, 0x3725 => 0x8f61, 0x3726 => 0x7aaa, 0x3727 => 0x718a, 0x3728 => 0x9688, 0x3729 => 0x7c82, 0x372a => 0x6817, 0x372b => 0x7e70, 0x372c => 0x6851, 0x372d => 0x936c, 0x372e => 0x52f2, 0x372f => 0x541b, 0x3730 => 0x85ab, 0x3731 => 0x8a13, 0x3732 => 0x7fa4, 0x3733 => 0x8ecd, 0x3734 => 0x90e1, 0x3735 => 0x5366, 0x3736 => 0x8888, 0x3737 => 0x7941, 0x3738 => 0x4fc2, 0x3739 => 0x50be, 0x373a => 0x5211, 0x373b => 0x5144, 0x373c => 0x5553, 0x373d => 0x572d, 0x373e => 0x73ea, 0x373f => 0x578b, 0x3740 => 0x5951, 0x3741 => 0x5f62, 0x3742 => 0x5f84, 0x3743 => 0x6075, 0x3744 => 0x6176, 0x3745 => 0x6167, 0x3746 => 0x61a9, 0x3747 => 0x63b2, 0x3748 => 0x643a, 0x3749 => 0x656c, 0x374a => 0x666f, 0x374b => 0x6842, 0x374c => 0x6e13, 0x374d => 0x7566, 0x374e => 0x7a3d, 0x374f => 0x7cfb, 0x3750 => 0x7d4c, 0x3751 => 0x7d99, 0x3752 => 0x7e4b, 0x3753 => 0x7f6b, 0x3754 => 0x830e, 0x3755 => 0x834a, 0x3756 => 0x86cd, 0x3757 => 0x8a08, 0x3758 => 0x8a63, 0x3759 => 0x8b66, 0x375a => 0x8efd, 0x375b => 0x981a, 0x375c => 0x9d8f, 0x375d => 0x82b8, 0x375e => 0x8fce, 0x375f => 0x9be8, 0x3760 => 0x5287, 0x3761 => 0x621f, 0x3762 => 0x6483, 0x3763 => 0x6fc0, 0x3764 => 0x9699, 0x3765 => 0x6841, 0x3766 => 0x5091, 0x3767 => 0x6b20, 0x3768 => 0x6c7a, 0x3769 => 0x6f54, 0x376a => 0x7a74, 0x376b => 0x7d50, 0x376c => 0x8840, 0x376d => 0x8a23, 0x376e => 0x6708, 0x376f => 0x4ef6, 0x3770 => 0x5039, 0x3771 => 0x5026, 0x3772 => 0x5065, 0x3773 => 0x517c, 0x3774 => 0x5238, 0x3775 => 0x5263, 0x3776 => 0x55a7, 0x3777 => 0x570f, 0x3778 => 0x5805, 0x3779 => 0x5acc, 0x377a => 0x5efa, 0x377b => 0x61b2, 0x377c => 0x61f8, 0x377d => 0x62f3, 0x377e => 0x6372, 0x3821 => 0x691c, 0x3822 => 0x6a29, 0x3823 => 0x727d, 0x3824 => 0x72ac, 0x3825 => 0x732e, 0x3826 => 0x7814, 0x3827 => 0x786f, 0x3828 => 0x7d79, 0x3829 => 0x770c, 0x382a => 0x80a9, 0x382b => 0x898b, 0x382c => 0x8b19, 0x382d => 0x8ce2, 0x382e => 0x8ed2, 0x382f => 0x9063, 0x3830 => 0x9375, 0x3831 => 0x967a, 0x3832 => 0x9855, 0x3833 => 0x9a13, 0x3834 => 0x9e78, 0x3835 => 0x5143, 0x3836 => 0x539f, 0x3837 => 0x53b3, 0x3838 => 0x5e7b, 0x3839 => 0x5f26, 0x383a => 0x6e1b, 0x383b => 0x6e90, 0x383c => 0x7384, 0x383d => 0x73fe, 0x383e => 0x7d43, 0x383f => 0x8237, 0x3840 => 0x8a00, 0x3841 => 0x8afa, 0x3842 => 0x9650, 0x3843 => 0x4e4e, 0x3844 => 0x500b, 0x3845 => 0x53e4, 0x3846 => 0x547c, 0x3847 => 0x56fa, 0x3848 => 0x59d1, 0x3849 => 0x5b64, 0x384a => 0x5df1, 0x384b => 0x5eab, 0x384c => 0x5f27, 0x384d => 0x6238, 0x384e => 0x6545, 0x384f => 0x67af, 0x3850 => 0x6e56, 0x3851 => 0x72d0, 0x3852 => 0x7cca, 0x3853 => 0x88b4, 0x3854 => 0x80a1, 0x3855 => 0x80e1, 0x3856 => 0x83f0, 0x3857 => 0x864e, 0x3858 => 0x8a87, 0x3859 => 0x8de8, 0x385a => 0x9237, 0x385b => 0x96c7, 0x385c => 0x9867, 0x385d => 0x9f13, 0x385e => 0x4e94, 0x385f => 0x4e92, 0x3860 => 0x4f0d, 0x3861 => 0x5348, 0x3862 => 0x5449, 0x3863 => 0x543e, 0x3864 => 0x5a2f, 0x3865 => 0x5f8c, 0x3866 => 0x5fa1, 0x3867 => 0x609f, 0x3868 => 0x68a7, 0x3869 => 0x6a8e, 0x386a => 0x745a, 0x386b => 0x7881, 0x386c => 0x8a9e, 0x386d => 0x8aa4, 0x386e => 0x8b77, 0x386f => 0x9190, 0x3870 => 0x4e5e, 0x3871 => 0x9bc9, 0x3872 => 0x4ea4, 0x3873 => 0x4f7c, 0x3874 => 0x4faf, 0x3875 => 0x5019, 0x3876 => 0x5016, 0x3877 => 0x5149, 0x3878 => 0x516c, 0x3879 => 0x529f, 0x387a => 0x52b9, 0x387b => 0x52fe, 0x387c => 0x539a, 0x387d => 0x53e3, 0x387e => 0x5411, 0x3921 => 0x540e, 0x3922 => 0x5589, 0x3923 => 0x5751, 0x3924 => 0x57a2, 0x3925 => 0x597d, 0x3926 => 0x5b54, 0x3927 => 0x5b5d, 0x3928 => 0x5b8f, 0x3929 => 0x5de5, 0x392a => 0x5de7, 0x392b => 0x5df7, 0x392c => 0x5e78, 0x392d => 0x5e83, 0x392e => 0x5e9a, 0x392f => 0x5eb7, 0x3930 => 0x5f18, 0x3931 => 0x6052, 0x3932 => 0x614c, 0x3933 => 0x6297, 0x3934 => 0x62d8, 0x3935 => 0x63a7, 0x3936 => 0x653b, 0x3937 => 0x6602, 0x3938 => 0x6643, 0x3939 => 0x66f4, 0x393a => 0x676d, 0x393b => 0x6821, 0x393c => 0x6897, 0x393d => 0x69cb, 0x393e => 0x6c5f, 0x393f => 0x6d2a, 0x3940 => 0x6d69, 0x3941 => 0x6e2f, 0x3942 => 0x6e9d, 0x3943 => 0x7532, 0x3944 => 0x7687, 0x3945 => 0x786c, 0x3946 => 0x7a3f, 0x3947 => 0x7ce0, 0x3948 => 0x7d05, 0x3949 => 0x7d18, 0x394a => 0x7d5e, 0x394b => 0x7db1, 0x394c => 0x8015, 0x394d => 0x8003, 0x394e => 0x80af, 0x394f => 0x80b1, 0x3950 => 0x8154, 0x3951 => 0x818f, 0x3952 => 0x822a, 0x3953 => 0x8352, 0x3954 => 0x884c, 0x3955 => 0x8861, 0x3956 => 0x8b1b, 0x3957 => 0x8ca2, 0x3958 => 0x8cfc, 0x3959 => 0x90ca, 0x395a => 0x9175, 0x395b => 0x9271, 0x395c => 0x783f, 0x395d => 0x92fc, 0x395e => 0x95a4, 0x395f => 0x964d, 0x3960 => 0x9805, 0x3961 => 0x9999, 0x3962 => 0x9ad8, 0x3963 => 0x9d3b, 0x3964 => 0x525b, 0x3965 => 0x52ab, 0x3966 => 0x53f7, 0x3967 => 0x5408, 0x3968 => 0x58d5, 0x3969 => 0x62f7, 0x396a => 0x6fe0, 0x396b => 0x8c6a, 0x396c => 0x8f5f, 0x396d => 0x9eb9, 0x396e => 0x514b, 0x396f => 0x523b, 0x3970 => 0x544a, 0x3971 => 0x56fd, 0x3972 => 0x7a40, 0x3973 => 0x9177, 0x3974 => 0x9d60, 0x3975 => 0x9ed2, 0x3976 => 0x7344, 0x3977 => 0x6f09, 0x3978 => 0x8170, 0x3979 => 0x7511, 0x397a => 0x5ffd, 0x397b => 0x60da, 0x397c => 0x9aa8, 0x397d => 0x72db, 0x397e => 0x8fbc, 0x3a21 => 0x6b64, 0x3a22 => 0x9803, 0x3a23 => 0x4eca, 0x3a24 => 0x56f0, 0x3a25 => 0x5764, 0x3a26 => 0x58be, 0x3a27 => 0x5a5a, 0x3a28 => 0x6068, 0x3a29 => 0x61c7, 0x3a2a => 0x660f, 0x3a2b => 0x6606, 0x3a2c => 0x6839, 0x3a2d => 0x68b1, 0x3a2e => 0x6df7, 0x3a2f => 0x75d5, 0x3a30 => 0x7d3a, 0x3a31 => 0x826e, 0x3a32 => 0x9b42, 0x3a33 => 0x4e9b, 0x3a34 => 0x4f50, 0x3a35 => 0x53c9, 0x3a36 => 0x5506, 0x3a37 => 0x5d6f, 0x3a38 => 0x5de6, 0x3a39 => 0x5dee, 0x3a3a => 0x67fb, 0x3a3b => 0x6c99, 0x3a3c => 0x7473, 0x3a3d => 0x7802, 0x3a3e => 0x8a50, 0x3a3f => 0x9396, 0x3a40 => 0x88df, 0x3a41 => 0x5750, 0x3a42 => 0x5ea7, 0x3a43 => 0x632b, 0x3a44 => 0x50b5, 0x3a45 => 0x50ac, 0x3a46 => 0x518d, 0x3a47 => 0x6700, 0x3a48 => 0x54c9, 0x3a49 => 0x585e, 0x3a4a => 0x59bb, 0x3a4b => 0x5bb0, 0x3a4c => 0x5f69, 0x3a4d => 0x624d, 0x3a4e => 0x63a1, 0x3a4f => 0x683d, 0x3a50 => 0x6b73, 0x3a51 => 0x6e08, 0x3a52 => 0x707d, 0x3a53 => 0x91c7, 0x3a54 => 0x7280, 0x3a55 => 0x7815, 0x3a56 => 0x7826, 0x3a57 => 0x796d, 0x3a58 => 0x658e, 0x3a59 => 0x7d30, 0x3a5a => 0x83dc, 0x3a5b => 0x88c1, 0x3a5c => 0x8f09, 0x3a5d => 0x969b, 0x3a5e => 0x5264, 0x3a5f => 0x5728, 0x3a60 => 0x6750, 0x3a61 => 0x7f6a, 0x3a62 => 0x8ca1, 0x3a63 => 0x51b4, 0x3a64 => 0x5742, 0x3a65 => 0x962a, 0x3a66 => 0x583a, 0x3a67 => 0x698a, 0x3a68 => 0x80b4, 0x3a69 => 0x54b2, 0x3a6a => 0x5d0e, 0x3a6b => 0x57fc, 0x3a6c => 0x7895, 0x3a6d => 0x9dfa, 0x3a6e => 0x4f5c, 0x3a6f => 0x524a, 0x3a70 => 0x548b, 0x3a71 => 0x643e, 0x3a72 => 0x6628, 0x3a73 => 0x6714, 0x3a74 => 0x67f5, 0x3a75 => 0x7a84, 0x3a76 => 0x7b56, 0x3a77 => 0x7d22, 0x3a78 => 0x932f, 0x3a79 => 0x685c, 0x3a7a => 0x9bad, 0x3a7b => 0x7b39, 0x3a7c => 0x5319, 0x3a7d => 0x518a, 0x3a7e => 0x5237, 0x3b21 => 0x5bdf, 0x3b22 => 0x62f6, 0x3b23 => 0x64ae, 0x3b24 => 0x64e6, 0x3b25 => 0x672d, 0x3b26 => 0x6bba, 0x3b27 => 0x85a9, 0x3b28 => 0x96d1, 0x3b29 => 0x7690, 0x3b2a => 0x9bd6, 0x3b2b => 0x634c, 0x3b2c => 0x9306, 0x3b2d => 0x9bab, 0x3b2e => 0x76bf, 0x3b2f => 0x6652, 0x3b30 => 0x4e09, 0x3b31 => 0x5098, 0x3b32 => 0x53c2, 0x3b33 => 0x5c71, 0x3b34 => 0x60e8, 0x3b35 => 0x6492, 0x3b36 => 0x6563, 0x3b37 => 0x685f, 0x3b38 => 0x71e6, 0x3b39 => 0x73ca, 0x3b3a => 0x7523, 0x3b3b => 0x7b97, 0x3b3c => 0x7e82, 0x3b3d => 0x8695, 0x3b3e => 0x8b83, 0x3b3f => 0x8cdb, 0x3b40 => 0x9178, 0x3b41 => 0x9910, 0x3b42 => 0x65ac, 0x3b43 => 0x66ab, 0x3b44 => 0x6b8b, 0x3b45 => 0x4ed5, 0x3b46 => 0x4ed4, 0x3b47 => 0x4f3a, 0x3b48 => 0x4f7f, 0x3b49 => 0x523a, 0x3b4a => 0x53f8, 0x3b4b => 0x53f2, 0x3b4c => 0x55e3, 0x3b4d => 0x56db, 0x3b4e => 0x58eb, 0x3b4f => 0x59cb, 0x3b50 => 0x59c9, 0x3b51 => 0x59ff, 0x3b52 => 0x5b50, 0x3b53 => 0x5c4d, 0x3b54 => 0x5e02, 0x3b55 => 0x5e2b, 0x3b56 => 0x5fd7, 0x3b57 => 0x601d, 0x3b58 => 0x6307, 0x3b59 => 0x652f, 0x3b5a => 0x5b5c, 0x3b5b => 0x65af, 0x3b5c => 0x65bd, 0x3b5d => 0x65e8, 0x3b5e => 0x679d, 0x3b5f => 0x6b62, 0x3b60 => 0x6b7b, 0x3b61 => 0x6c0f, 0x3b62 => 0x7345, 0x3b63 => 0x7949, 0x3b64 => 0x79c1, 0x3b65 => 0x7cf8, 0x3b66 => 0x7d19, 0x3b67 => 0x7d2b, 0x3b68 => 0x80a2, 0x3b69 => 0x8102, 0x3b6a => 0x81f3, 0x3b6b => 0x8996, 0x3b6c => 0x8a5e, 0x3b6d => 0x8a69, 0x3b6e => 0x8a66, 0x3b6f => 0x8a8c, 0x3b70 => 0x8aee, 0x3b71 => 0x8cc7, 0x3b72 => 0x8cdc, 0x3b73 => 0x96cc, 0x3b74 => 0x98fc, 0x3b75 => 0x6b6f, 0x3b76 => 0x4e8b, 0x3b77 => 0x4f3c, 0x3b78 => 0x4f8d, 0x3b79 => 0x5150, 0x3b7a => 0x5b57, 0x3b7b => 0x5bfa, 0x3b7c => 0x6148, 0x3b7d => 0x6301, 0x3b7e => 0x6642, 0x3c21 => 0x6b21, 0x3c22 => 0x6ecb, 0x3c23 => 0x6cbb, 0x3c24 => 0x723e, 0x3c25 => 0x74bd, 0x3c26 => 0x75d4, 0x3c27 => 0x78c1, 0x3c28 => 0x793a, 0x3c29 => 0x800c, 0x3c2a => 0x8033, 0x3c2b => 0x81ea, 0x3c2c => 0x8494, 0x3c2d => 0x8f9e, 0x3c2e => 0x6c50, 0x3c2f => 0x9e7f, 0x3c30 => 0x5f0f, 0x3c31 => 0x8b58, 0x3c32 => 0x9d2b, 0x3c33 => 0x7afa, 0x3c34 => 0x8ef8, 0x3c35 => 0x5b8d, 0x3c36 => 0x96eb, 0x3c37 => 0x4e03, 0x3c38 => 0x53f1, 0x3c39 => 0x57f7, 0x3c3a => 0x5931, 0x3c3b => 0x5ac9, 0x3c3c => 0x5ba4, 0x3c3d => 0x6089, 0x3c3e => 0x6e7f, 0x3c3f => 0x6f06, 0x3c40 => 0x75be, 0x3c41 => 0x8cea, 0x3c42 => 0x5b9f, 0x3c43 => 0x8500, 0x3c44 => 0x7be0, 0x3c45 => 0x5072, 0x3c46 => 0x67f4, 0x3c47 => 0x829d, 0x3c48 => 0x5c61, 0x3c49 => 0x854a, 0x3c4a => 0x7e1e, 0x3c4b => 0x820e, 0x3c4c => 0x5199, 0x3c4d => 0x5c04, 0x3c4e => 0x6368, 0x3c4f => 0x8d66, 0x3c50 => 0x659c, 0x3c51 => 0x716e, 0x3c52 => 0x793e, 0x3c53 => 0x7d17, 0x3c54 => 0x8005, 0x3c55 => 0x8b1d, 0x3c56 => 0x8eca, 0x3c57 => 0x906e, 0x3c58 => 0x86c7, 0x3c59 => 0x90aa, 0x3c5a => 0x501f, 0x3c5b => 0x52fa, 0x3c5c => 0x5c3a, 0x3c5d => 0x6753, 0x3c5e => 0x707c, 0x3c5f => 0x7235, 0x3c60 => 0x914c, 0x3c61 => 0x91c8, 0x3c62 => 0x932b, 0x3c63 => 0x82e5, 0x3c64 => 0x5bc2, 0x3c65 => 0x5f31, 0x3c66 => 0x60f9, 0x3c67 => 0x4e3b, 0x3c68 => 0x53d6, 0x3c69 => 0x5b88, 0x3c6a => 0x624b, 0x3c6b => 0x6731, 0x3c6c => 0x6b8a, 0x3c6d => 0x72e9, 0x3c6e => 0x73e0, 0x3c6f => 0x7a2e, 0x3c70 => 0x816b, 0x3c71 => 0x8da3, 0x3c72 => 0x9152, 0x3c73 => 0x9996, 0x3c74 => 0x5112, 0x3c75 => 0x53d7, 0x3c76 => 0x546a, 0x3c77 => 0x5bff, 0x3c78 => 0x6388, 0x3c79 => 0x6a39, 0x3c7a => 0x7dac, 0x3c7b => 0x9700, 0x3c7c => 0x56da, 0x3c7d => 0x53ce, 0x3c7e => 0x5468, 0x3d21 => 0x5b97, 0x3d22 => 0x5c31, 0x3d23 => 0x5dde, 0x3d24 => 0x4fee, 0x3d25 => 0x6101, 0x3d26 => 0x62fe, 0x3d27 => 0x6d32, 0x3d28 => 0x79c0, 0x3d29 => 0x79cb, 0x3d2a => 0x7d42, 0x3d2b => 0x7e4d, 0x3d2c => 0x7fd2, 0x3d2d => 0x81ed, 0x3d2e => 0x821f, 0x3d2f => 0x8490, 0x3d30 => 0x8846, 0x3d31 => 0x8972, 0x3d32 => 0x8b90, 0x3d33 => 0x8e74, 0x3d34 => 0x8f2f, 0x3d35 => 0x9031, 0x3d36 => 0x914b, 0x3d37 => 0x916c, 0x3d38 => 0x96c6, 0x3d39 => 0x919c, 0x3d3a => 0x4ec0, 0x3d3b => 0x4f4f, 0x3d3c => 0x5145, 0x3d3d => 0x5341, 0x3d3e => 0x5f93, 0x3d3f => 0x620e, 0x3d40 => 0x67d4, 0x3d41 => 0x6c41, 0x3d42 => 0x6e0b, 0x3d43 => 0x7363, 0x3d44 => 0x7e26, 0x3d45 => 0x91cd, 0x3d46 => 0x9283, 0x3d47 => 0x53d4, 0x3d48 => 0x5919, 0x3d49 => 0x5bbf, 0x3d4a => 0x6dd1, 0x3d4b => 0x795d, 0x3d4c => 0x7e2e, 0x3d4d => 0x7c9b, 0x3d4e => 0x587e, 0x3d4f => 0x719f, 0x3d50 => 0x51fa, 0x3d51 => 0x8853, 0x3d52 => 0x8ff0, 0x3d53 => 0x4fca, 0x3d54 => 0x5cfb, 0x3d55 => 0x6625, 0x3d56 => 0x77ac, 0x3d57 => 0x7ae3, 0x3d58 => 0x821c, 0x3d59 => 0x99ff, 0x3d5a => 0x51c6, 0x3d5b => 0x5faa, 0x3d5c => 0x65ec, 0x3d5d => 0x696f, 0x3d5e => 0x6b89, 0x3d5f => 0x6df3, 0x3d60 => 0x6e96, 0x3d61 => 0x6f64, 0x3d62 => 0x76fe, 0x3d63 => 0x7d14, 0x3d64 => 0x5de1, 0x3d65 => 0x9075, 0x3d66 => 0x9187, 0x3d67 => 0x9806, 0x3d68 => 0x51e6, 0x3d69 => 0x521d, 0x3d6a => 0x6240, 0x3d6b => 0x6691, 0x3d6c => 0x66d9, 0x3d6d => 0x6e1a, 0x3d6e => 0x5eb6, 0x3d6f => 0x7dd2, 0x3d70 => 0x7f72, 0x3d71 => 0x66f8, 0x3d72 => 0x85af, 0x3d73 => 0x85f7, 0x3d74 => 0x8af8, 0x3d75 => 0x52a9, 0x3d76 => 0x53d9, 0x3d77 => 0x5973, 0x3d78 => 0x5e8f, 0x3d79 => 0x5f90, 0x3d7a => 0x6055, 0x3d7b => 0x92e4, 0x3d7c => 0x9664, 0x3d7d => 0x50b7, 0x3d7e => 0x511f, 0x3e21 => 0x52dd, 0x3e22 => 0x5320, 0x3e23 => 0x5347, 0x3e24 => 0x53ec, 0x3e25 => 0x54e8, 0x3e26 => 0x5546, 0x3e27 => 0x5531, 0x3e28 => 0x5617, 0x3e29 => 0x5968, 0x3e2a => 0x59be, 0x3e2b => 0x5a3c, 0x3e2c => 0x5bb5, 0x3e2d => 0x5c06, 0x3e2e => 0x5c0f, 0x3e2f => 0x5c11, 0x3e30 => 0x5c1a, 0x3e31 => 0x5e84, 0x3e32 => 0x5e8a, 0x3e33 => 0x5ee0, 0x3e34 => 0x5f70, 0x3e35 => 0x627f, 0x3e36 => 0x6284, 0x3e37 => 0x62db, 0x3e38 => 0x638c, 0x3e39 => 0x6377, 0x3e3a => 0x6607, 0x3e3b => 0x660c, 0x3e3c => 0x662d, 0x3e3d => 0x6676, 0x3e3e => 0x677e, 0x3e3f => 0x68a2, 0x3e40 => 0x6a1f, 0x3e41 => 0x6a35, 0x3e42 => 0x6cbc, 0x3e43 => 0x6d88, 0x3e44 => 0x6e09, 0x3e45 => 0x6e58, 0x3e46 => 0x713c, 0x3e47 => 0x7126, 0x3e48 => 0x7167, 0x3e49 => 0x75c7, 0x3e4a => 0x7701, 0x3e4b => 0x785d, 0x3e4c => 0x7901, 0x3e4d => 0x7965, 0x3e4e => 0x79f0, 0x3e4f => 0x7ae0, 0x3e50 => 0x7b11, 0x3e51 => 0x7ca7, 0x3e52 => 0x7d39, 0x3e53 => 0x8096, 0x3e54 => 0x83d6, 0x3e55 => 0x848b, 0x3e56 => 0x8549, 0x3e57 => 0x885d, 0x3e58 => 0x88f3, 0x3e59 => 0x8a1f, 0x3e5a => 0x8a3c, 0x3e5b => 0x8a54, 0x3e5c => 0x8a73, 0x3e5d => 0x8c61, 0x3e5e => 0x8cde, 0x3e5f => 0x91a4, 0x3e60 => 0x9266, 0x3e61 => 0x937e, 0x3e62 => 0x9418, 0x3e63 => 0x969c, 0x3e64 => 0x9798, 0x3e65 => 0x4e0a, 0x3e66 => 0x4e08, 0x3e67 => 0x4e1e, 0x3e68 => 0x4e57, 0x3e69 => 0x5197, 0x3e6a => 0x5270, 0x3e6b => 0x57ce, 0x3e6c => 0x5834, 0x3e6d => 0x58cc, 0x3e6e => 0x5b22, 0x3e6f => 0x5e38, 0x3e70 => 0x60c5, 0x3e71 => 0x64fe, 0x3e72 => 0x6761, 0x3e73 => 0x6756, 0x3e74 => 0x6d44, 0x3e75 => 0x72b6, 0x3e76 => 0x7573, 0x3e77 => 0x7a63, 0x3e78 => 0x84b8, 0x3e79 => 0x8b72, 0x3e7a => 0x91b8, 0x3e7b => 0x9320, 0x3e7c => 0x5631, 0x3e7d => 0x57f4, 0x3e7e => 0x98fe, 0x3f21 => 0x62ed, 0x3f22 => 0x690d, 0x3f23 => 0x6b96, 0x3f24 => 0x71ed, 0x3f25 => 0x7e54, 0x3f26 => 0x8077, 0x3f27 => 0x8272, 0x3f28 => 0x89e6, 0x3f29 => 0x98df, 0x3f2a => 0x8755, 0x3f2b => 0x8fb1, 0x3f2c => 0x5c3b, 0x3f2d => 0x4f38, 0x3f2e => 0x4fe1, 0x3f2f => 0x4fb5, 0x3f30 => 0x5507, 0x3f31 => 0x5a20, 0x3f32 => 0x5bdd, 0x3f33 => 0x5be9, 0x3f34 => 0x5fc3, 0x3f35 => 0x614e, 0x3f36 => 0x632f, 0x3f37 => 0x65b0, 0x3f38 => 0x664b, 0x3f39 => 0x68ee, 0x3f3a => 0x699b, 0x3f3b => 0x6d78, 0x3f3c => 0x6df1, 0x3f3d => 0x7533, 0x3f3e => 0x75b9, 0x3f3f => 0x771f, 0x3f40 => 0x795e, 0x3f41 => 0x79e6, 0x3f42 => 0x7d33, 0x3f43 => 0x81e3, 0x3f44 => 0x82af, 0x3f45 => 0x85aa, 0x3f46 => 0x89aa, 0x3f47 => 0x8a3a, 0x3f48 => 0x8eab, 0x3f49 => 0x8f9b, 0x3f4a => 0x9032, 0x3f4b => 0x91dd, 0x3f4c => 0x9707, 0x3f4d => 0x4eba, 0x3f4e => 0x4ec1, 0x3f4f => 0x5203, 0x3f50 => 0x5875, 0x3f51 => 0x58ec, 0x3f52 => 0x5c0b, 0x3f53 => 0x751a, 0x3f54 => 0x5c3d, 0x3f55 => 0x814e, 0x3f56 => 0x8a0a, 0x3f57 => 0x8fc5, 0x3f58 => 0x9663, 0x3f59 => 0x976d, 0x3f5a => 0x7b25, 0x3f5b => 0x8acf, 0x3f5c => 0x9808, 0x3f5d => 0x9162, 0x3f5e => 0x56f3, 0x3f5f => 0x53a8, 0x3f60 => 0x9017, 0x3f61 => 0x5439, 0x3f62 => 0x5782, 0x3f63 => 0x5e25, 0x3f64 => 0x63a8, 0x3f65 => 0x6c34, 0x3f66 => 0x708a, 0x3f67 => 0x7761, 0x3f68 => 0x7c8b, 0x3f69 => 0x7fe0, 0x3f6a => 0x8870, 0x3f6b => 0x9042, 0x3f6c => 0x9154, 0x3f6d => 0x9310, 0x3f6e => 0x9318, 0x3f6f => 0x968f, 0x3f70 => 0x745e, 0x3f71 => 0x9ac4, 0x3f72 => 0x5d07, 0x3f73 => 0x5d69, 0x3f74 => 0x6570, 0x3f75 => 0x67a2, 0x3f76 => 0x8da8, 0x3f77 => 0x96db, 0x3f78 => 0x636e, 0x3f79 => 0x6749, 0x3f7a => 0x6919, 0x3f7b => 0x83c5, 0x3f7c => 0x9817, 0x3f7d => 0x96c0, 0x3f7e => 0x88fe, 0x4021 => 0x6f84, 0x4022 => 0x647a, 0x4023 => 0x5bf8, 0x4024 => 0x4e16, 0x4025 => 0x702c, 0x4026 => 0x755d, 0x4027 => 0x662f, 0x4028 => 0x51c4, 0x4029 => 0x5236, 0x402a => 0x52e2, 0x402b => 0x59d3, 0x402c => 0x5f81, 0x402d => 0x6027, 0x402e => 0x6210, 0x402f => 0x653f, 0x4030 => 0x6574, 0x4031 => 0x661f, 0x4032 => 0x6674, 0x4033 => 0x68f2, 0x4034 => 0x6816, 0x4035 => 0x6b63, 0x4036 => 0x6e05, 0x4037 => 0x7272, 0x4038 => 0x751f, 0x4039 => 0x76db, 0x403a => 0x7cbe, 0x403b => 0x8056, 0x403c => 0x58f0, 0x403d => 0x88fd, 0x403e => 0x897f, 0x403f => 0x8aa0, 0x4040 => 0x8a93, 0x4041 => 0x8acb, 0x4042 => 0x901d, 0x4043 => 0x9192, 0x4044 => 0x9752, 0x4045 => 0x9759, 0x4046 => 0x6589, 0x4047 => 0x7a0e, 0x4048 => 0x8106, 0x4049 => 0x96bb, 0x404a => 0x5e2d, 0x404b => 0x60dc, 0x404c => 0x621a, 0x404d => 0x65a5, 0x404e => 0x6614, 0x404f => 0x6790, 0x4050 => 0x77f3, 0x4051 => 0x7a4d, 0x4052 => 0x7c4d, 0x4053 => 0x7e3e, 0x4054 => 0x810a, 0x4055 => 0x8cac, 0x4056 => 0x8d64, 0x4057 => 0x8de1, 0x4058 => 0x8e5f, 0x4059 => 0x78a9, 0x405a => 0x5207, 0x405b => 0x62d9, 0x405c => 0x63a5, 0x405d => 0x6442, 0x405e => 0x6298, 0x405f => 0x8a2d, 0x4060 => 0x7a83, 0x4061 => 0x7bc0, 0x4062 => 0x8aac, 0x4063 => 0x96ea, 0x4064 => 0x7d76, 0x4065 => 0x820c, 0x4066 => 0x8749, 0x4067 => 0x4ed9, 0x4068 => 0x5148, 0x4069 => 0x5343, 0x406a => 0x5360, 0x406b => 0x5ba3, 0x406c => 0x5c02, 0x406d => 0x5c16, 0x406e => 0x5ddd, 0x406f => 0x6226, 0x4070 => 0x6247, 0x4071 => 0x64b0, 0x4072 => 0x6813, 0x4073 => 0x6834, 0x4074 => 0x6cc9, 0x4075 => 0x6d45, 0x4076 => 0x6d17, 0x4077 => 0x67d3, 0x4078 => 0x6f5c, 0x4079 => 0x714e, 0x407a => 0x717d, 0x407b => 0x65cb, 0x407c => 0x7a7f, 0x407d => 0x7bad, 0x407e => 0x7dda, 0x4121 => 0x7e4a, 0x4122 => 0x7fa8, 0x4123 => 0x817a, 0x4124 => 0x821b, 0x4125 => 0x8239, 0x4126 => 0x85a6, 0x4127 => 0x8a6e, 0x4128 => 0x8cce, 0x4129 => 0x8df5, 0x412a => 0x9078, 0x412b => 0x9077, 0x412c => 0x92ad, 0x412d => 0x9291, 0x412e => 0x9583, 0x412f => 0x9bae, 0x4130 => 0x524d, 0x4131 => 0x5584, 0x4132 => 0x6f38, 0x4133 => 0x7136, 0x4134 => 0x5168, 0x4135 => 0x7985, 0x4136 => 0x7e55, 0x4137 => 0x81b3, 0x4138 => 0x7cce, 0x4139 => 0x564c, 0x413a => 0x5851, 0x413b => 0x5ca8, 0x413c => 0x63aa, 0x413d => 0x66fe, 0x413e => 0x66fd, 0x413f => 0x695a, 0x4140 => 0x72d9, 0x4141 => 0x758f, 0x4142 => 0x758e, 0x4143 => 0x790e, 0x4144 => 0x7956, 0x4145 => 0x79df, 0x4146 => 0x7c97, 0x4147 => 0x7d20, 0x4148 => 0x7d44, 0x4149 => 0x8607, 0x414a => 0x8a34, 0x414b => 0x963b, 0x414c => 0x9061, 0x414d => 0x9f20, 0x414e => 0x50e7, 0x414f => 0x5275, 0x4150 => 0x53cc, 0x4151 => 0x53e2, 0x4152 => 0x5009, 0x4153 => 0x55aa, 0x4154 => 0x58ee, 0x4155 => 0x594f, 0x4156 => 0x723d, 0x4157 => 0x5b8b, 0x4158 => 0x5c64, 0x4159 => 0x531d, 0x415a => 0x60e3, 0x415b => 0x60f3, 0x415c => 0x635c, 0x415d => 0x6383, 0x415e => 0x633f, 0x415f => 0x63bb, 0x4160 => 0x64cd, 0x4161 => 0x65e9, 0x4162 => 0x66f9, 0x4163 => 0x5de3, 0x4164 => 0x69cd, 0x4165 => 0x69fd, 0x4166 => 0x6f15, 0x4167 => 0x71e5, 0x4168 => 0x4e89, 0x4169 => 0x75e9, 0x416a => 0x76f8, 0x416b => 0x7a93, 0x416c => 0x7cdf, 0x416d => 0x7dcf, 0x416e => 0x7d9c, 0x416f => 0x8061, 0x4170 => 0x8349, 0x4171 => 0x8358, 0x4172 => 0x846c, 0x4173 => 0x84bc, 0x4174 => 0x85fb, 0x4175 => 0x88c5, 0x4176 => 0x8d70, 0x4177 => 0x9001, 0x4178 => 0x906d, 0x4179 => 0x9397, 0x417a => 0x971c, 0x417b => 0x9a12, 0x417c => 0x50cf, 0x417d => 0x5897, 0x417e => 0x618e, 0x4221 => 0x81d3, 0x4222 => 0x8535, 0x4223 => 0x8d08, 0x4224 => 0x9020, 0x4225 => 0x4fc3, 0x4226 => 0x5074, 0x4227 => 0x5247, 0x4228 => 0x5373, 0x4229 => 0x606f, 0x422a => 0x6349, 0x422b => 0x675f, 0x422c => 0x6e2c, 0x422d => 0x8db3, 0x422e => 0x901f, 0x422f => 0x4fd7, 0x4230 => 0x5c5e, 0x4231 => 0x8cca, 0x4232 => 0x65cf, 0x4233 => 0x7d9a, 0x4234 => 0x5352, 0x4235 => 0x8896, 0x4236 => 0x5176, 0x4237 => 0x63c3, 0x4238 => 0x5b58, 0x4239 => 0x5b6b, 0x423a => 0x5c0a, 0x423b => 0x640d, 0x423c => 0x6751, 0x423d => 0x905c, 0x423e => 0x4ed6, 0x423f => 0x591a, 0x4240 => 0x592a, 0x4241 => 0x6c70, 0x4242 => 0x8a51, 0x4243 => 0x553e, 0x4244 => 0x5815, 0x4245 => 0x59a5, 0x4246 => 0x60f0, 0x4247 => 0x6253, 0x4248 => 0x67c1, 0x4249 => 0x8235, 0x424a => 0x6955, 0x424b => 0x9640, 0x424c => 0x99c4, 0x424d => 0x9a28, 0x424e => 0x4f53, 0x424f => 0x5806, 0x4250 => 0x5bfe, 0x4251 => 0x8010, 0x4252 => 0x5cb1, 0x4253 => 0x5e2f, 0x4254 => 0x5f85, 0x4255 => 0x6020, 0x4256 => 0x614b, 0x4257 => 0x6234, 0x4258 => 0x66ff, 0x4259 => 0x6cf0, 0x425a => 0x6ede, 0x425b => 0x80ce, 0x425c => 0x817f, 0x425d => 0x82d4, 0x425e => 0x888b, 0x425f => 0x8cb8, 0x4260 => 0x9000, 0x4261 => 0x902e, 0x4262 => 0x968a, 0x4263 => 0x9edb, 0x4264 => 0x9bdb, 0x4265 => 0x4ee3, 0x4266 => 0x53f0, 0x4267 => 0x5927, 0x4268 => 0x7b2c, 0x4269 => 0x918d, 0x426a => 0x984c, 0x426b => 0x9df9, 0x426c => 0x6edd, 0x426d => 0x7027, 0x426e => 0x5353, 0x426f => 0x5544, 0x4270 => 0x5b85, 0x4271 => 0x6258, 0x4272 => 0x629e, 0x4273 => 0x62d3, 0x4274 => 0x6ca2, 0x4275 => 0x6fef, 0x4276 => 0x7422, 0x4277 => 0x8a17, 0x4278 => 0x9438, 0x4279 => 0x6fc1, 0x427a => 0x8afe, 0x427b => 0x8338, 0x427c => 0x51e7, 0x427d => 0x86f8, 0x427e => 0x53ea, 0x4321 => 0x53e9, 0x4322 => 0x4f46, 0x4323 => 0x9054, 0x4324 => 0x8fb0, 0x4325 => 0x596a, 0x4326 => 0x8131, 0x4327 => 0x5dfd, 0x4328 => 0x7aea, 0x4329 => 0x8fbf, 0x432a => 0x68da, 0x432b => 0x8c37, 0x432c => 0x72f8, 0x432d => 0x9c48, 0x432e => 0x6a3d, 0x432f => 0x8ab0, 0x4330 => 0x4e39, 0x4331 => 0x5358, 0x4332 => 0x5606, 0x4333 => 0x5766, 0x4334 => 0x62c5, 0x4335 => 0x63a2, 0x4336 => 0x65e6, 0x4337 => 0x6b4e, 0x4338 => 0x6de1, 0x4339 => 0x6e5b, 0x433a => 0x70ad, 0x433b => 0x77ed, 0x433c => 0x7aef, 0x433d => 0x7baa, 0x433e => 0x7dbb, 0x433f => 0x803d, 0x4340 => 0x80c6, 0x4341 => 0x86cb, 0x4342 => 0x8a95, 0x4343 => 0x935b, 0x4344 => 0x56e3, 0x4345 => 0x58c7, 0x4346 => 0x5f3e, 0x4347 => 0x65ad, 0x4348 => 0x6696, 0x4349 => 0x6a80, 0x434a => 0x6bb5, 0x434b => 0x7537, 0x434c => 0x8ac7, 0x434d => 0x5024, 0x434e => 0x77e5, 0x434f => 0x5730, 0x4350 => 0x5f1b, 0x4351 => 0x6065, 0x4352 => 0x667a, 0x4353 => 0x6c60, 0x4354 => 0x75f4, 0x4355 => 0x7a1a, 0x4356 => 0x7f6e, 0x4357 => 0x81f4, 0x4358 => 0x8718, 0x4359 => 0x9045, 0x435a => 0x99b3, 0x435b => 0x7bc9, 0x435c => 0x755c, 0x435d => 0x7af9, 0x435e => 0x7b51, 0x435f => 0x84c4, 0x4360 => 0x9010, 0x4361 => 0x79e9, 0x4362 => 0x7a92, 0x4363 => 0x8336, 0x4364 => 0x5ae1, 0x4365 => 0x7740, 0x4366 => 0x4e2d, 0x4367 => 0x4ef2, 0x4368 => 0x5b99, 0x4369 => 0x5fe0, 0x436a => 0x62bd, 0x436b => 0x663c, 0x436c => 0x67f1, 0x436d => 0x6ce8, 0x436e => 0x866b, 0x436f => 0x8877, 0x4370 => 0x8a3b, 0x4371 => 0x914e, 0x4372 => 0x92f3, 0x4373 => 0x99d0, 0x4374 => 0x6a17, 0x4375 => 0x7026, 0x4376 => 0x732a, 0x4377 => 0x82e7, 0x4378 => 0x8457, 0x4379 => 0x8caf, 0x437a => 0x4e01, 0x437b => 0x5146, 0x437c => 0x51cb, 0x437d => 0x558b, 0x437e => 0x5bf5, 0x4421 => 0x5e16, 0x4422 => 0x5e33, 0x4423 => 0x5e81, 0x4424 => 0x5f14, 0x4425 => 0x5f35, 0x4426 => 0x5f6b, 0x4427 => 0x5fb4, 0x4428 => 0x61f2, 0x4429 => 0x6311, 0x442a => 0x66a2, 0x442b => 0x671d, 0x442c => 0x6f6e, 0x442d => 0x7252, 0x442e => 0x753a, 0x442f => 0x773a, 0x4430 => 0x8074, 0x4431 => 0x8139, 0x4432 => 0x8178, 0x4433 => 0x8776, 0x4434 => 0x8abf, 0x4435 => 0x8adc, 0x4436 => 0x8d85, 0x4437 => 0x8df3, 0x4438 => 0x929a, 0x4439 => 0x9577, 0x443a => 0x9802, 0x443b => 0x9ce5, 0x443c => 0x52c5, 0x443d => 0x6357, 0x443e => 0x76f4, 0x443f => 0x6715, 0x4440 => 0x6c88, 0x4441 => 0x73cd, 0x4442 => 0x8cc3, 0x4443 => 0x93ae, 0x4444 => 0x9673, 0x4445 => 0x6d25, 0x4446 => 0x589c, 0x4447 => 0x690e, 0x4448 => 0x69cc, 0x4449 => 0x8ffd, 0x444a => 0x939a, 0x444b => 0x75db, 0x444c => 0x901a, 0x444d => 0x585a, 0x444e => 0x6802, 0x444f => 0x63b4, 0x4450 => 0x69fb, 0x4451 => 0x4f43, 0x4452 => 0x6f2c, 0x4453 => 0x67d8, 0x4454 => 0x8fbb, 0x4455 => 0x8526, 0x4456 => 0x7db4, 0x4457 => 0x9354, 0x4458 => 0x693f, 0x4459 => 0x6f70, 0x445a => 0x576a, 0x445b => 0x58f7, 0x445c => 0x5b2c, 0x445d => 0x7d2c, 0x445e => 0x722a, 0x445f => 0x540a, 0x4460 => 0x91e3, 0x4461 => 0x9db4, 0x4462 => 0x4ead, 0x4463 => 0x4f4e, 0x4464 => 0x505c, 0x4465 => 0x5075, 0x4466 => 0x5243, 0x4467 => 0x8c9e, 0x4468 => 0x5448, 0x4469 => 0x5824, 0x446a => 0x5b9a, 0x446b => 0x5e1d, 0x446c => 0x5e95, 0x446d => 0x5ead, 0x446e => 0x5ef7, 0x446f => 0x5f1f, 0x4470 => 0x608c, 0x4471 => 0x62b5, 0x4472 => 0x633a, 0x4473 => 0x63d0, 0x4474 => 0x68af, 0x4475 => 0x6c40, 0x4476 => 0x7887, 0x4477 => 0x798e, 0x4478 => 0x7a0b, 0x4479 => 0x7de0, 0x447a => 0x8247, 0x447b => 0x8a02, 0x447c => 0x8ae6, 0x447d => 0x8e44, 0x447e => 0x9013, 0x4521 => 0x90b8, 0x4522 => 0x912d, 0x4523 => 0x91d8, 0x4524 => 0x9f0e, 0x4525 => 0x6ce5, 0x4526 => 0x6458, 0x4527 => 0x64e2, 0x4528 => 0x6575, 0x4529 => 0x6ef4, 0x452a => 0x7684, 0x452b => 0x7b1b, 0x452c => 0x9069, 0x452d => 0x93d1, 0x452e => 0x6eba, 0x452f => 0x54f2, 0x4530 => 0x5fb9, 0x4531 => 0x64a4, 0x4532 => 0x8f4d, 0x4533 => 0x8fed, 0x4534 => 0x9244, 0x4535 => 0x5178, 0x4536 => 0x586b, 0x4537 => 0x5929, 0x4538 => 0x5c55, 0x4539 => 0x5e97, 0x453a => 0x6dfb, 0x453b => 0x7e8f, 0x453c => 0x751c, 0x453d => 0x8cbc, 0x453e => 0x8ee2, 0x453f => 0x985b, 0x4540 => 0x70b9, 0x4541 => 0x4f1d, 0x4542 => 0x6bbf, 0x4543 => 0x6fb1, 0x4544 => 0x7530, 0x4545 => 0x96fb, 0x4546 => 0x514e, 0x4547 => 0x5410, 0x4548 => 0x5835, 0x4549 => 0x5857, 0x454a => 0x59ac, 0x454b => 0x5c60, 0x454c => 0x5f92, 0x454d => 0x6597, 0x454e => 0x675c, 0x454f => 0x6e21, 0x4550 => 0x767b, 0x4551 => 0x83df, 0x4552 => 0x8ced, 0x4553 => 0x9014, 0x4554 => 0x90fd, 0x4555 => 0x934d, 0x4556 => 0x7825, 0x4557 => 0x783a, 0x4558 => 0x52aa, 0x4559 => 0x5ea6, 0x455a => 0x571f, 0x455b => 0x5974, 0x455c => 0x6012, 0x455d => 0x5012, 0x455e => 0x515a, 0x455f => 0x51ac, 0x4560 => 0x51cd, 0x4561 => 0x5200, 0x4562 => 0x5510, 0x4563 => 0x5854, 0x4564 => 0x5858, 0x4565 => 0x5957, 0x4566 => 0x5b95, 0x4567 => 0x5cf6, 0x4568 => 0x5d8b, 0x4569 => 0x60bc, 0x456a => 0x6295, 0x456b => 0x642d, 0x456c => 0x6771, 0x456d => 0x6843, 0x456e => 0x68bc, 0x456f => 0x68df, 0x4570 => 0x76d7, 0x4571 => 0x6dd8, 0x4572 => 0x6e6f, 0x4573 => 0x6d9b, 0x4574 => 0x706f, 0x4575 => 0x71c8, 0x4576 => 0x5f53, 0x4577 => 0x75d8, 0x4578 => 0x7977, 0x4579 => 0x7b49, 0x457a => 0x7b54, 0x457b => 0x7b52, 0x457c => 0x7cd6, 0x457d => 0x7d71, 0x457e => 0x5230, 0x4621 => 0x8463, 0x4622 => 0x8569, 0x4623 => 0x85e4, 0x4624 => 0x8a0e, 0x4625 => 0x8b04, 0x4626 => 0x8c46, 0x4627 => 0x8e0f, 0x4628 => 0x9003, 0x4629 => 0x900f, 0x462a => 0x9419, 0x462b => 0x9676, 0x462c => 0x982d, 0x462d => 0x9a30, 0x462e => 0x95d8, 0x462f => 0x50cd, 0x4630 => 0x52d5, 0x4631 => 0x540c, 0x4632 => 0x5802, 0x4633 => 0x5c0e, 0x4634 => 0x61a7, 0x4635 => 0x649e, 0x4636 => 0x6d1e, 0x4637 => 0x77b3, 0x4638 => 0x7ae5, 0x4639 => 0x80f4, 0x463a => 0x8404, 0x463b => 0x9053, 0x463c => 0x9285, 0x463d => 0x5ce0, 0x463e => 0x9d07, 0x463f => 0x533f, 0x4640 => 0x5f97, 0x4641 => 0x5fb3, 0x4642 => 0x6d9c, 0x4643 => 0x7279, 0x4644 => 0x7763, 0x4645 => 0x79bf, 0x4646 => 0x7be4, 0x4647 => 0x6bd2, 0x4648 => 0x72ec, 0x4649 => 0x8aad, 0x464a => 0x6803, 0x464b => 0x6a61, 0x464c => 0x51f8, 0x464d => 0x7a81, 0x464e => 0x6934, 0x464f => 0x5c4a, 0x4650 => 0x9cf6, 0x4651 => 0x82eb, 0x4652 => 0x5bc5, 0x4653 => 0x9149, 0x4654 => 0x701e, 0x4655 => 0x5678, 0x4656 => 0x5c6f, 0x4657 => 0x60c7, 0x4658 => 0x6566, 0x4659 => 0x6c8c, 0x465a => 0x8c5a, 0x465b => 0x9041, 0x465c => 0x9813, 0x465d => 0x5451, 0x465e => 0x66c7, 0x465f => 0x920d, 0x4660 => 0x5948, 0x4661 => 0x90a3, 0x4662 => 0x5185, 0x4663 => 0x4e4d, 0x4664 => 0x51ea, 0x4665 => 0x8599, 0x4666 => 0x8b0e, 0x4667 => 0x7058, 0x4668 => 0x637a, 0x4669 => 0x934b, 0x466a => 0x6962, 0x466b => 0x99b4, 0x466c => 0x7e04, 0x466d => 0x7577, 0x466e => 0x5357, 0x466f => 0x6960, 0x4670 => 0x8edf, 0x4671 => 0x96e3, 0x4672 => 0x6c5d, 0x4673 => 0x4e8c, 0x4674 => 0x5c3c, 0x4675 => 0x5f10, 0x4676 => 0x8fe9, 0x4677 => 0x5302, 0x4678 => 0x8cd1, 0x4679 => 0x8089, 0x467a => 0x8679, 0x467b => 0x5eff, 0x467c => 0x65e5, 0x467d => 0x4e73, 0x467e => 0x5165, 0x4721 => 0x5982, 0x4722 => 0x5c3f, 0x4723 => 0x97ee, 0x4724 => 0x4efb, 0x4725 => 0x598a, 0x4726 => 0x5fcd, 0x4727 => 0x8a8d, 0x4728 => 0x6fe1, 0x4729 => 0x79b0, 0x472a => 0x7962, 0x472b => 0x5be7, 0x472c => 0x8471, 0x472d => 0x732b, 0x472e => 0x71b1, 0x472f => 0x5e74, 0x4730 => 0x5ff5, 0x4731 => 0x637b, 0x4732 => 0x649a, 0x4733 => 0x71c3, 0x4734 => 0x7c98, 0x4735 => 0x4e43, 0x4736 => 0x5efc, 0x4737 => 0x4e4b, 0x4738 => 0x57dc, 0x4739 => 0x56a2, 0x473a => 0x60a9, 0x473b => 0x6fc3, 0x473c => 0x7d0d, 0x473d => 0x80fd, 0x473e => 0x8133, 0x473f => 0x81bf, 0x4740 => 0x8fb2, 0x4741 => 0x8997, 0x4742 => 0x86a4, 0x4743 => 0x5df4, 0x4744 => 0x628a, 0x4745 => 0x64ad, 0x4746 => 0x8987, 0x4747 => 0x6777, 0x4748 => 0x6ce2, 0x4749 => 0x6d3e, 0x474a => 0x7436, 0x474b => 0x7834, 0x474c => 0x5a46, 0x474d => 0x7f75, 0x474e => 0x82ad, 0x474f => 0x99ac, 0x4750 => 0x4ff3, 0x4751 => 0x5ec3, 0x4752 => 0x62dd, 0x4753 => 0x6392, 0x4754 => 0x6557, 0x4755 => 0x676f, 0x4756 => 0x76c3, 0x4757 => 0x724c, 0x4758 => 0x80cc, 0x4759 => 0x80ba, 0x475a => 0x8f29, 0x475b => 0x914d, 0x475c => 0x500d, 0x475d => 0x57f9, 0x475e => 0x5a92, 0x475f => 0x6885, 0x4760 => 0x6973, 0x4761 => 0x7164, 0x4762 => 0x72fd, 0x4763 => 0x8cb7, 0x4764 => 0x58f2, 0x4765 => 0x8ce0, 0x4766 => 0x966a, 0x4767 => 0x9019, 0x4768 => 0x877f, 0x4769 => 0x79e4, 0x476a => 0x77e7, 0x476b => 0x8429, 0x476c => 0x4f2f, 0x476d => 0x5265, 0x476e => 0x535a, 0x476f => 0x62cd, 0x4770 => 0x67cf, 0x4771 => 0x6cca, 0x4772 => 0x767d, 0x4773 => 0x7b94, 0x4774 => 0x7c95, 0x4775 => 0x8236, 0x4776 => 0x8584, 0x4777 => 0x8feb, 0x4778 => 0x66dd, 0x4779 => 0x6f20, 0x477a => 0x7206, 0x477b => 0x7e1b, 0x477c => 0x83ab, 0x477d => 0x99c1, 0x477e => 0x9ea6, 0x4821 => 0x51fd, 0x4822 => 0x7bb1, 0x4823 => 0x7872, 0x4824 => 0x7bb8, 0x4825 => 0x8087, 0x4826 => 0x7b48, 0x4827 => 0x6ae8, 0x4828 => 0x5e61, 0x4829 => 0x808c, 0x482a => 0x7551, 0x482b => 0x7560, 0x482c => 0x516b, 0x482d => 0x9262, 0x482e => 0x6e8c, 0x482f => 0x767a, 0x4830 => 0x9197, 0x4831 => 0x9aea, 0x4832 => 0x4f10, 0x4833 => 0x7f70, 0x4834 => 0x629c, 0x4835 => 0x7b4f, 0x4836 => 0x95a5, 0x4837 => 0x9ce9, 0x4838 => 0x567a, 0x4839 => 0x5859, 0x483a => 0x86e4, 0x483b => 0x96bc, 0x483c => 0x4f34, 0x483d => 0x5224, 0x483e => 0x534a, 0x483f => 0x53cd, 0x4840 => 0x53db, 0x4841 => 0x5e06, 0x4842 => 0x642c, 0x4843 => 0x6591, 0x4844 => 0x677f, 0x4845 => 0x6c3e, 0x4846 => 0x6c4e, 0x4847 => 0x7248, 0x4848 => 0x72af, 0x4849 => 0x73ed, 0x484a => 0x7554, 0x484b => 0x7e41, 0x484c => 0x822c, 0x484d => 0x85e9, 0x484e => 0x8ca9, 0x484f => 0x7bc4, 0x4850 => 0x91c6, 0x4851 => 0x7169, 0x4852 => 0x9812, 0x4853 => 0x98ef, 0x4854 => 0x633d, 0x4855 => 0x6669, 0x4856 => 0x756a, 0x4857 => 0x76e4, 0x4858 => 0x78d0, 0x4859 => 0x8543, 0x485a => 0x86ee, 0x485b => 0x532a, 0x485c => 0x5351, 0x485d => 0x5426, 0x485e => 0x5983, 0x485f => 0x5e87, 0x4860 => 0x5f7c, 0x4861 => 0x60b2, 0x4862 => 0x6249, 0x4863 => 0x6279, 0x4864 => 0x62ab, 0x4865 => 0x6590, 0x4866 => 0x6bd4, 0x4867 => 0x6ccc, 0x4868 => 0x75b2, 0x4869 => 0x76ae, 0x486a => 0x7891, 0x486b => 0x79d8, 0x486c => 0x7dcb, 0x486d => 0x7f77, 0x486e => 0x80a5, 0x486f => 0x88ab, 0x4870 => 0x8ab9, 0x4871 => 0x8cbb, 0x4872 => 0x907f, 0x4873 => 0x975e, 0x4874 => 0x98db, 0x4875 => 0x6a0b, 0x4876 => 0x7c38, 0x4877 => 0x5099, 0x4878 => 0x5c3e, 0x4879 => 0x5fae, 0x487a => 0x6787, 0x487b => 0x6bd8, 0x487c => 0x7435, 0x487d => 0x7709, 0x487e => 0x7f8e, 0x4921 => 0x9f3b, 0x4922 => 0x67ca, 0x4923 => 0x7a17, 0x4924 => 0x5339, 0x4925 => 0x758b, 0x4926 => 0x9aed, 0x4927 => 0x5f66, 0x4928 => 0x819d, 0x4929 => 0x83f1, 0x492a => 0x8098, 0x492b => 0x5f3c, 0x492c => 0x5fc5, 0x492d => 0x7562, 0x492e => 0x7b46, 0x492f => 0x903c, 0x4930 => 0x6867, 0x4931 => 0x59eb, 0x4932 => 0x5a9b, 0x4933 => 0x7d10, 0x4934 => 0x767e, 0x4935 => 0x8b2c, 0x4936 => 0x4ff5, 0x4937 => 0x5f6a, 0x4938 => 0x6a19, 0x4939 => 0x6c37, 0x493a => 0x6f02, 0x493b => 0x74e2, 0x493c => 0x7968, 0x493d => 0x8868, 0x493e => 0x8a55, 0x493f => 0x8c79, 0x4940 => 0x5edf, 0x4941 => 0x63cf, 0x4942 => 0x75c5, 0x4943 => 0x79d2, 0x4944 => 0x82d7, 0x4945 => 0x9328, 0x4946 => 0x92f2, 0x4947 => 0x849c, 0x4948 => 0x86ed, 0x4949 => 0x9c2d, 0x494a => 0x54c1, 0x494b => 0x5f6c, 0x494c => 0x658c, 0x494d => 0x6d5c, 0x494e => 0x7015, 0x494f => 0x8ca7, 0x4950 => 0x8cd3, 0x4951 => 0x983b, 0x4952 => 0x654f, 0x4953 => 0x74f6, 0x4954 => 0x4e0d, 0x4955 => 0x4ed8, 0x4956 => 0x57e0, 0x4957 => 0x592b, 0x4958 => 0x5a66, 0x4959 => 0x5bcc, 0x495a => 0x51a8, 0x495b => 0x5e03, 0x495c => 0x5e9c, 0x495d => 0x6016, 0x495e => 0x6276, 0x495f => 0x6577, 0x4960 => 0x65a7, 0x4961 => 0x666e, 0x4962 => 0x6d6e, 0x4963 => 0x7236, 0x4964 => 0x7b26, 0x4965 => 0x8150, 0x4966 => 0x819a, 0x4967 => 0x8299, 0x4968 => 0x8b5c, 0x4969 => 0x8ca0, 0x496a => 0x8ce6, 0x496b => 0x8d74, 0x496c => 0x961c, 0x496d => 0x9644, 0x496e => 0x4fae, 0x496f => 0x64ab, 0x4970 => 0x6b66, 0x4971 => 0x821e, 0x4972 => 0x8461, 0x4973 => 0x856a, 0x4974 => 0x90e8, 0x4975 => 0x5c01, 0x4976 => 0x6953, 0x4977 => 0x98a8, 0x4978 => 0x847a, 0x4979 => 0x8557, 0x497a => 0x4f0f, 0x497b => 0x526f, 0x497c => 0x5fa9, 0x497d => 0x5e45, 0x497e => 0x670d, 0x4a21 => 0x798f, 0x4a22 => 0x8179, 0x4a23 => 0x8907, 0x4a24 => 0x8986, 0x4a25 => 0x6df5, 0x4a26 => 0x5f17, 0x4a27 => 0x6255, 0x4a28 => 0x6cb8, 0x4a29 => 0x4ecf, 0x4a2a => 0x7269, 0x4a2b => 0x9b92, 0x4a2c => 0x5206, 0x4a2d => 0x543b, 0x4a2e => 0x5674, 0x4a2f => 0x58b3, 0x4a30 => 0x61a4, 0x4a31 => 0x626e, 0x4a32 => 0x711a, 0x4a33 => 0x596e, 0x4a34 => 0x7c89, 0x4a35 => 0x7cde, 0x4a36 => 0x7d1b, 0x4a37 => 0x96f0, 0x4a38 => 0x6587, 0x4a39 => 0x805e, 0x4a3a => 0x4e19, 0x4a3b => 0x4f75, 0x4a3c => 0x5175, 0x4a3d => 0x5840, 0x4a3e => 0x5e63, 0x4a3f => 0x5e73, 0x4a40 => 0x5f0a, 0x4a41 => 0x67c4, 0x4a42 => 0x4e26, 0x4a43 => 0x853d, 0x4a44 => 0x9589, 0x4a45 => 0x965b, 0x4a46 => 0x7c73, 0x4a47 => 0x9801, 0x4a48 => 0x50fb, 0x4a49 => 0x58c1, 0x4a4a => 0x7656, 0x4a4b => 0x78a7, 0x4a4c => 0x5225, 0x4a4d => 0x77a5, 0x4a4e => 0x8511, 0x4a4f => 0x7b86, 0x4a50 => 0x504f, 0x4a51 => 0x5909, 0x4a52 => 0x7247, 0x4a53 => 0x7bc7, 0x4a54 => 0x7de8, 0x4a55 => 0x8fba, 0x4a56 => 0x8fd4, 0x4a57 => 0x904d, 0x4a58 => 0x4fbf, 0x4a59 => 0x52c9, 0x4a5a => 0x5a29, 0x4a5b => 0x5f01, 0x4a5c => 0x97ad, 0x4a5d => 0x4fdd, 0x4a5e => 0x8217, 0x4a5f => 0x92ea, 0x4a60 => 0x5703, 0x4a61 => 0x6355, 0x4a62 => 0x6b69, 0x4a63 => 0x752b, 0x4a64 => 0x88dc, 0x4a65 => 0x8f14, 0x4a66 => 0x7a42, 0x4a67 => 0x52df, 0x4a68 => 0x5893, 0x4a69 => 0x6155, 0x4a6a => 0x620a, 0x4a6b => 0x66ae, 0x4a6c => 0x6bcd, 0x4a6d => 0x7c3f, 0x4a6e => 0x83e9, 0x4a6f => 0x5023, 0x4a70 => 0x4ff8, 0x4a71 => 0x5305, 0x4a72 => 0x5446, 0x4a73 => 0x5831, 0x4a74 => 0x5949, 0x4a75 => 0x5b9d, 0x4a76 => 0x5cf0, 0x4a77 => 0x5cef, 0x4a78 => 0x5d29, 0x4a79 => 0x5e96, 0x4a7a => 0x62b1, 0x4a7b => 0x6367, 0x4a7c => 0x653e, 0x4a7d => 0x65b9, 0x4a7e => 0x670b, 0x4b21 => 0x6cd5, 0x4b22 => 0x6ce1, 0x4b23 => 0x70f9, 0x4b24 => 0x7832, 0x4b25 => 0x7e2b, 0x4b26 => 0x80de, 0x4b27 => 0x82b3, 0x4b28 => 0x840c, 0x4b29 => 0x84ec, 0x4b2a => 0x8702, 0x4b2b => 0x8912, 0x4b2c => 0x8a2a, 0x4b2d => 0x8c4a, 0x4b2e => 0x90a6, 0x4b2f => 0x92d2, 0x4b30 => 0x98fd, 0x4b31 => 0x9cf3, 0x4b32 => 0x9d6c, 0x4b33 => 0x4e4f, 0x4b34 => 0x4ea1, 0x4b35 => 0x508d, 0x4b36 => 0x5256, 0x4b37 => 0x574a, 0x4b38 => 0x59a8, 0x4b39 => 0x5e3d, 0x4b3a => 0x5fd8, 0x4b3b => 0x5fd9, 0x4b3c => 0x623f, 0x4b3d => 0x66b4, 0x4b3e => 0x671b, 0x4b3f => 0x67d0, 0x4b40 => 0x68d2, 0x4b41 => 0x5192, 0x4b42 => 0x7d21, 0x4b43 => 0x80aa, 0x4b44 => 0x81a8, 0x4b45 => 0x8b00, 0x4b46 => 0x8c8c, 0x4b47 => 0x8cbf, 0x4b48 => 0x927e, 0x4b49 => 0x9632, 0x4b4a => 0x5420, 0x4b4b => 0x982c, 0x4b4c => 0x5317, 0x4b4d => 0x50d5, 0x4b4e => 0x535c, 0x4b4f => 0x58a8, 0x4b50 => 0x64b2, 0x4b51 => 0x6734, 0x4b52 => 0x7267, 0x4b53 => 0x7766, 0x4b54 => 0x7a46, 0x4b55 => 0x91e6, 0x4b56 => 0x52c3, 0x4b57 => 0x6ca1, 0x4b58 => 0x6b86, 0x4b59 => 0x5800, 0x4b5a => 0x5e4c, 0x4b5b => 0x5954, 0x4b5c => 0x672c, 0x4b5d => 0x7ffb, 0x4b5e => 0x51e1, 0x4b5f => 0x76c6, 0x4b60 => 0x6469, 0x4b61 => 0x78e8, 0x4b62 => 0x9b54, 0x4b63 => 0x9ebb, 0x4b64 => 0x57cb, 0x4b65 => 0x59b9, 0x4b66 => 0x6627, 0x4b67 => 0x679a, 0x4b68 => 0x6bce, 0x4b69 => 0x54e9, 0x4b6a => 0x69d9, 0x4b6b => 0x5e55, 0x4b6c => 0x819c, 0x4b6d => 0x6795, 0x4b6e => 0x9baa, 0x4b6f => 0x67fe, 0x4b70 => 0x9c52, 0x4b71 => 0x685d, 0x4b72 => 0x4ea6, 0x4b73 => 0x4fe3, 0x4b74 => 0x53c8, 0x4b75 => 0x62b9, 0x4b76 => 0x672b, 0x4b77 => 0x6cab, 0x4b78 => 0x8fc4, 0x4b79 => 0x4fad, 0x4b7a => 0x7e6d, 0x4b7b => 0x9ebf, 0x4b7c => 0x4e07, 0x4b7d => 0x6162, 0x4b7e => 0x6e80, 0x4c21 => 0x6f2b, 0x4c22 => 0x8513, 0x4c23 => 0x5473, 0x4c24 => 0x672a, 0x4c25 => 0x9b45, 0x4c26 => 0x5df3, 0x4c27 => 0x7b95, 0x4c28 => 0x5cac, 0x4c29 => 0x5bc6, 0x4c2a => 0x871c, 0x4c2b => 0x6e4a, 0x4c2c => 0x84d1, 0x4c2d => 0x7a14, 0x4c2e => 0x8108, 0x4c2f => 0x5999, 0x4c30 => 0x7c8d, 0x4c31 => 0x6c11, 0x4c32 => 0x7720, 0x4c33 => 0x52d9, 0x4c34 => 0x5922, 0x4c35 => 0x7121, 0x4c36 => 0x725f, 0x4c37 => 0x77db, 0x4c38 => 0x9727, 0x4c39 => 0x9d61, 0x4c3a => 0x690b, 0x4c3b => 0x5a7f, 0x4c3c => 0x5a18, 0x4c3d => 0x51a5, 0x4c3e => 0x540d, 0x4c3f => 0x547d, 0x4c40 => 0x660e, 0x4c41 => 0x76df, 0x4c42 => 0x8ff7, 0x4c43 => 0x9298, 0x4c44 => 0x9cf4, 0x4c45 => 0x59ea, 0x4c46 => 0x725d, 0x4c47 => 0x6ec5, 0x4c48 => 0x514d, 0x4c49 => 0x68c9, 0x4c4a => 0x7dbf, 0x4c4b => 0x7dec, 0x4c4c => 0x9762, 0x4c4d => 0x9eba, 0x4c4e => 0x6478, 0x4c4f => 0x6a21, 0x4c50 => 0x8302, 0x4c51 => 0x5984, 0x4c52 => 0x5b5f, 0x4c53 => 0x6bdb, 0x4c54 => 0x731b, 0x4c55 => 0x76f2, 0x4c56 => 0x7db2, 0x4c57 => 0x8017, 0x4c58 => 0x8499, 0x4c59 => 0x5132, 0x4c5a => 0x6728, 0x4c5b => 0x9ed9, 0x4c5c => 0x76ee, 0x4c5d => 0x6762, 0x4c5e => 0x52ff, 0x4c5f => 0x9905, 0x4c60 => 0x5c24, 0x4c61 => 0x623b, 0x4c62 => 0x7c7e, 0x4c63 => 0x8cb0, 0x4c64 => 0x554f, 0x4c65 => 0x60b6, 0x4c66 => 0x7d0b, 0x4c67 => 0x9580, 0x4c68 => 0x5301, 0x4c69 => 0x4e5f, 0x4c6a => 0x51b6, 0x4c6b => 0x591c, 0x4c6c => 0x723a, 0x4c6d => 0x8036, 0x4c6e => 0x91ce, 0x4c6f => 0x5f25, 0x4c70 => 0x77e2, 0x4c71 => 0x5384, 0x4c72 => 0x5f79, 0x4c73 => 0x7d04, 0x4c74 => 0x85ac, 0x4c75 => 0x8a33, 0x4c76 => 0x8e8d, 0x4c77 => 0x9756, 0x4c78 => 0x67f3, 0x4c79 => 0x85ae, 0x4c7a => 0x9453, 0x4c7b => 0x6109, 0x4c7c => 0x6108, 0x4c7d => 0x6cb9, 0x4c7e => 0x7652, 0x4d21 => 0x8aed, 0x4d22 => 0x8f38, 0x4d23 => 0x552f, 0x4d24 => 0x4f51, 0x4d25 => 0x512a, 0x4d26 => 0x52c7, 0x4d27 => 0x53cb, 0x4d28 => 0x5ba5, 0x4d29 => 0x5e7d, 0x4d2a => 0x60a0, 0x4d2b => 0x6182, 0x4d2c => 0x63d6, 0x4d2d => 0x6709, 0x4d2e => 0x67da, 0x4d2f => 0x6e67, 0x4d30 => 0x6d8c, 0x4d31 => 0x7336, 0x4d32 => 0x7337, 0x4d33 => 0x7531, 0x4d34 => 0x7950, 0x4d35 => 0x88d5, 0x4d36 => 0x8a98, 0x4d37 => 0x904a, 0x4d38 => 0x9091, 0x4d39 => 0x90f5, 0x4d3a => 0x96c4, 0x4d3b => 0x878d, 0x4d3c => 0x5915, 0x4d3d => 0x4e88, 0x4d3e => 0x4f59, 0x4d3f => 0x4e0e, 0x4d40 => 0x8a89, 0x4d41 => 0x8f3f, 0x4d42 => 0x9810, 0x4d43 => 0x50ad, 0x4d44 => 0x5e7c, 0x4d45 => 0x5996, 0x4d46 => 0x5bb9, 0x4d47 => 0x5eb8, 0x4d48 => 0x63da, 0x4d49 => 0x63fa, 0x4d4a => 0x64c1, 0x4d4b => 0x66dc, 0x4d4c => 0x694a, 0x4d4d => 0x69d8, 0x4d4e => 0x6d0b, 0x4d4f => 0x6eb6, 0x4d50 => 0x7194, 0x4d51 => 0x7528, 0x4d52 => 0x7aaf, 0x4d53 => 0x7f8a, 0x4d54 => 0x8000, 0x4d55 => 0x8449, 0x4d56 => 0x84c9, 0x4d57 => 0x8981, 0x4d58 => 0x8b21, 0x4d59 => 0x8e0a, 0x4d5a => 0x9065, 0x4d5b => 0x967d, 0x4d5c => 0x990a, 0x4d5d => 0x617e, 0x4d5e => 0x6291, 0x4d5f => 0x6b32, 0x4d60 => 0x6c83, 0x4d61 => 0x6d74, 0x4d62 => 0x7fcc, 0x4d63 => 0x7ffc, 0x4d64 => 0x6dc0, 0x4d65 => 0x7f85, 0x4d66 => 0x87ba, 0x4d67 => 0x88f8, 0x4d68 => 0x6765, 0x4d69 => 0x83b1, 0x4d6a => 0x983c, 0x4d6b => 0x96f7, 0x4d6c => 0x6d1b, 0x4d6d => 0x7d61, 0x4d6e => 0x843d, 0x4d6f => 0x916a, 0x4d70 => 0x4e71, 0x4d71 => 0x5375, 0x4d72 => 0x5d50, 0x4d73 => 0x6b04, 0x4d74 => 0x6feb, 0x4d75 => 0x85cd, 0x4d76 => 0x862d, 0x4d77 => 0x89a7, 0x4d78 => 0x5229, 0x4d79 => 0x540f, 0x4d7a => 0x5c65, 0x4d7b => 0x674e, 0x4d7c => 0x68a8, 0x4d7d => 0x7406, 0x4d7e => 0x7483, 0x4e21 => 0x75e2, 0x4e22 => 0x88cf, 0x4e23 => 0x88e1, 0x4e24 => 0x91cc, 0x4e25 => 0x96e2, 0x4e26 => 0x9678, 0x4e27 => 0x5f8b, 0x4e28 => 0x7387, 0x4e29 => 0x7acb, 0x4e2a => 0x844e, 0x4e2b => 0x63a0, 0x4e2c => 0x7565, 0x4e2d => 0x5289, 0x4e2e => 0x6d41, 0x4e2f => 0x6e9c, 0x4e30 => 0x7409, 0x4e31 => 0x7559, 0x4e32 => 0x786b, 0x4e33 => 0x7c92, 0x4e34 => 0x9686, 0x4e35 => 0x7adc, 0x4e36 => 0x9f8d, 0x4e37 => 0x4fb6, 0x4e38 => 0x616e, 0x4e39 => 0x65c5, 0x4e3a => 0x865c, 0x4e3b => 0x4e86, 0x4e3c => 0x4eae, 0x4e3d => 0x50da, 0x4e3e => 0x4e21, 0x4e3f => 0x51cc, 0x4e40 => 0x5bee, 0x4e41 => 0x6599, 0x4e42 => 0x6881, 0x4e43 => 0x6dbc, 0x4e44 => 0x731f, 0x4e45 => 0x7642, 0x4e46 => 0x77ad, 0x4e47 => 0x7a1c, 0x4e48 => 0x7ce7, 0x4e49 => 0x826f, 0x4e4a => 0x8ad2, 0x4e4b => 0x907c, 0x4e4c => 0x91cf, 0x4e4d => 0x9675, 0x4e4e => 0x9818, 0x4e4f => 0x529b, 0x4e50 => 0x7dd1, 0x4e51 => 0x502b, 0x4e52 => 0x5398, 0x4e53 => 0x6797, 0x4e54 => 0x6dcb, 0x4e55 => 0x71d0, 0x4e56 => 0x7433, 0x4e57 => 0x81e8, 0x4e58 => 0x8f2a, 0x4e59 => 0x96a3, 0x4e5a => 0x9c57, 0x4e5b => 0x9e9f, 0x4e5c => 0x7460, 0x4e5d => 0x5841, 0x4e5e => 0x6d99, 0x4e5f => 0x7d2f, 0x4e60 => 0x985e, 0x4e61 => 0x4ee4, 0x4e62 => 0x4f36, 0x4e63 => 0x4f8b, 0x4e64 => 0x51b7, 0x4e65 => 0x52b1, 0x4e66 => 0x5dba, 0x4e67 => 0x601c, 0x4e68 => 0x73b2, 0x4e69 => 0x793c, 0x4e6a => 0x82d3, 0x4e6b => 0x9234, 0x4e6c => 0x96b7, 0x4e6d => 0x96f6, 0x4e6e => 0x970a, 0x4e6f => 0x9e97, 0x4e70 => 0x9f62, 0x4e71 => 0x66a6, 0x4e72 => 0x6b74, 0x4e73 => 0x5217, 0x4e74 => 0x52a3, 0x4e75 => 0x70c8, 0x4e76 => 0x88c2, 0x4e77 => 0x5ec9, 0x4e78 => 0x604b, 0x4e79 => 0x6190, 0x4e7a => 0x6f23, 0x4e7b => 0x7149, 0x4e7c => 0x7c3e, 0x4e7d => 0x7df4, 0x4e7e => 0x806f, 0x4f21 => 0x84ee, 0x4f22 => 0x9023, 0x4f23 => 0x932c, 0x4f24 => 0x5442, 0x4f25 => 0x9b6f, 0x4f26 => 0x6ad3, 0x4f27 => 0x7089, 0x4f28 => 0x8cc2, 0x4f29 => 0x8def, 0x4f2a => 0x9732, 0x4f2b => 0x52b4, 0x4f2c => 0x5a41, 0x4f2d => 0x5eca, 0x4f2e => 0x5f04, 0x4f2f => 0x6717, 0x4f30 => 0x697c, 0x4f31 => 0x6994, 0x4f32 => 0x6d6a, 0x4f33 => 0x6f0f, 0x4f34 => 0x7262, 0x4f35 => 0x72fc, 0x4f36 => 0x7bed, 0x4f37 => 0x8001, 0x4f38 => 0x807e, 0x4f39 => 0x874b, 0x4f3a => 0x90ce, 0x4f3b => 0x516d, 0x4f3c => 0x9e93, 0x4f3d => 0x7984, 0x4f3e => 0x808b, 0x4f3f => 0x9332, 0x4f40 => 0x8ad6, 0x4f41 => 0x502d, 0x4f42 => 0x548c, 0x4f43 => 0x8a71, 0x4f44 => 0x6b6a, 0x4f45 => 0x8cc4, 0x4f46 => 0x8107, 0x4f47 => 0x60d1, 0x4f48 => 0x67a0, 0x4f49 => 0x9df2, 0x4f4a => 0x4e99, 0x4f4b => 0x4e98, 0x4f4c => 0x9c10, 0x4f4d => 0x8a6b, 0x4f4e => 0x85c1, 0x4f4f => 0x8568, 0x4f50 => 0x6900, 0x4f51 => 0x6e7e, 0x4f52 => 0x7897, 0x4f53 => 0x8155, 0x5021 => 0x5f0c, 0x5022 => 0x4e10, 0x5023 => 0x4e15, 0x5024 => 0x4e2a, 0x5025 => 0x4e31, 0x5026 => 0x4e36, 0x5027 => 0x4e3c, 0x5028 => 0x4e3f, 0x5029 => 0x4e42, 0x502a => 0x4e56, 0x502b => 0x4e58, 0x502c => 0x4e82, 0x502d => 0x4e85, 0x502e => 0x8c6b, 0x502f => 0x4e8a, 0x5030 => 0x8212, 0x5031 => 0x5f0d, 0x5032 => 0x4e8e, 0x5033 => 0x4e9e, 0x5034 => 0x4e9f, 0x5035 => 0x4ea0, 0x5036 => 0x4ea2, 0x5037 => 0x4eb0, 0x5038 => 0x4eb3, 0x5039 => 0x4eb6, 0x503a => 0x4ece, 0x503b => 0x4ecd, 0x503c => 0x4ec4, 0x503d => 0x4ec6, 0x503e => 0x4ec2, 0x503f => 0x4ed7, 0x5040 => 0x4ede, 0x5041 => 0x4eed, 0x5042 => 0x4edf, 0x5043 => 0x4ef7, 0x5044 => 0x4f09, 0x5045 => 0x4f5a, 0x5046 => 0x4f30, 0x5047 => 0x4f5b, 0x5048 => 0x4f5d, 0x5049 => 0x4f57, 0x504a => 0x4f47, 0x504b => 0x4f76, 0x504c => 0x4f88, 0x504d => 0x4f8f, 0x504e => 0x4f98, 0x504f => 0x4f7b, 0x5050 => 0x4f69, 0x5051 => 0x4f70, 0x5052 => 0x4f91, 0x5053 => 0x4f6f, 0x5054 => 0x4f86, 0x5055 => 0x4f96, 0x5056 => 0x5118, 0x5057 => 0x4fd4, 0x5058 => 0x4fdf, 0x5059 => 0x4fce, 0x505a => 0x4fd8, 0x505b => 0x4fdb, 0x505c => 0x4fd1, 0x505d => 0x4fda, 0x505e => 0x4fd0, 0x505f => 0x4fe4, 0x5060 => 0x4fe5, 0x5061 => 0x501a, 0x5062 => 0x5028, 0x5063 => 0x5014, 0x5064 => 0x502a, 0x5065 => 0x5025, 0x5066 => 0x5005, 0x5067 => 0x4f1c, 0x5068 => 0x4ff6, 0x5069 => 0x5021, 0x506a => 0x5029, 0x506b => 0x502c, 0x506c => 0x4ffe, 0x506d => 0x4fef, 0x506e => 0x5011, 0x506f => 0x5006, 0x5070 => 0x5043, 0x5071 => 0x5047, 0x5072 => 0x6703, 0x5073 => 0x5055, 0x5074 => 0x5050, 0x5075 => 0x5048, 0x5076 => 0x505a, 0x5077 => 0x5056, 0x5078 => 0x506c, 0x5079 => 0x5078, 0x507a => 0x5080, 0x507b => 0x509a, 0x507c => 0x5085, 0x507d => 0x50b4, 0x507e => 0x50b2, 0x5121 => 0x50c9, 0x5122 => 0x50ca, 0x5123 => 0x50b3, 0x5124 => 0x50c2, 0x5125 => 0x50d6, 0x5126 => 0x50de, 0x5127 => 0x50e5, 0x5128 => 0x50ed, 0x5129 => 0x50e3, 0x512a => 0x50ee, 0x512b => 0x50f9, 0x512c => 0x50f5, 0x512d => 0x5109, 0x512e => 0x5101, 0x512f => 0x5102, 0x5130 => 0x5116, 0x5131 => 0x5115, 0x5132 => 0x5114, 0x5133 => 0x511a, 0x5134 => 0x5121, 0x5135 => 0x513a, 0x5136 => 0x5137, 0x5137 => 0x513c, 0x5138 => 0x513b, 0x5139 => 0x513f, 0x513a => 0x5140, 0x513b => 0x5152, 0x513c => 0x514c, 0x513d => 0x5154, 0x513e => 0x5162, 0x513f => 0x7af8, 0x5140 => 0x5169, 0x5141 => 0x516a, 0x5142 => 0x516e, 0x5143 => 0x5180, 0x5144 => 0x5182, 0x5145 => 0x56d8, 0x5146 => 0x518c, 0x5147 => 0x5189, 0x5148 => 0x518f, 0x5149 => 0x5191, 0x514a => 0x5193, 0x514b => 0x5195, 0x514c => 0x5196, 0x514d => 0x51a4, 0x514e => 0x51a6, 0x514f => 0x51a2, 0x5150 => 0x51a9, 0x5151 => 0x51aa, 0x5152 => 0x51ab, 0x5153 => 0x51b3, 0x5154 => 0x51b1, 0x5155 => 0x51b2, 0x5156 => 0x51b0, 0x5157 => 0x51b5, 0x5158 => 0x51bd, 0x5159 => 0x51c5, 0x515a => 0x51c9, 0x515b => 0x51db, 0x515c => 0x51e0, 0x515d => 0x8655, 0x515e => 0x51e9, 0x515f => 0x51ed, 0x5160 => 0x51f0, 0x5161 => 0x51f5, 0x5162 => 0x51fe, 0x5163 => 0x5204, 0x5164 => 0x520b, 0x5165 => 0x5214, 0x5166 => 0x520e, 0x5167 => 0x5227, 0x5168 => 0x522a, 0x5169 => 0x522e, 0x516a => 0x5233, 0x516b => 0x5239, 0x516c => 0x524f, 0x516d => 0x5244, 0x516e => 0x524b, 0x516f => 0x524c, 0x5170 => 0x525e, 0x5171 => 0x5254, 0x5172 => 0x526a, 0x5173 => 0x5274, 0x5174 => 0x5269, 0x5175 => 0x5273, 0x5176 => 0x527f, 0x5177 => 0x527d, 0x5178 => 0x528d, 0x5179 => 0x5294, 0x517a => 0x5292, 0x517b => 0x5271, 0x517c => 0x5288, 0x517d => 0x5291, 0x517e => 0x8fa8, 0x5221 => 0x8fa7, 0x5222 => 0x52ac, 0x5223 => 0x52ad, 0x5224 => 0x52bc, 0x5225 => 0x52b5, 0x5226 => 0x52c1, 0x5227 => 0x52cd, 0x5228 => 0x52d7, 0x5229 => 0x52de, 0x522a => 0x52e3, 0x522b => 0x52e6, 0x522c => 0x98ed, 0x522d => 0x52e0, 0x522e => 0x52f3, 0x522f => 0x52f5, 0x5230 => 0x52f8, 0x5231 => 0x52f9, 0x5232 => 0x5306, 0x5233 => 0x5308, 0x5234 => 0x7538, 0x5235 => 0x530d, 0x5236 => 0x5310, 0x5237 => 0x530f, 0x5238 => 0x5315, 0x5239 => 0x531a, 0x523a => 0x5323, 0x523b => 0x532f, 0x523c => 0x5331, 0x523d => 0x5333, 0x523e => 0x5338, 0x523f => 0x5340, 0x5240 => 0x5346, 0x5241 => 0x5345, 0x5242 => 0x4e17, 0x5243 => 0x5349, 0x5244 => 0x534d, 0x5245 => 0x51d6, 0x5246 => 0x535e, 0x5247 => 0x5369, 0x5248 => 0x536e, 0x5249 => 0x5918, 0x524a => 0x537b, 0x524b => 0x5377, 0x524c => 0x5382, 0x524d => 0x5396, 0x524e => 0x53a0, 0x524f => 0x53a6, 0x5250 => 0x53a5, 0x5251 => 0x53ae, 0x5252 => 0x53b0, 0x5253 => 0x53b6, 0x5254 => 0x53c3, 0x5255 => 0x7c12, 0x5256 => 0x96d9, 0x5257 => 0x53df, 0x5258 => 0x66fc, 0x5259 => 0x71ee, 0x525a => 0x53ee, 0x525b => 0x53e8, 0x525c => 0x53ed, 0x525d => 0x53fa, 0x525e => 0x5401, 0x525f => 0x543d, 0x5260 => 0x5440, 0x5261 => 0x542c, 0x5262 => 0x542d, 0x5263 => 0x543c, 0x5264 => 0x542e, 0x5265 => 0x5436, 0x5266 => 0x5429, 0x5267 => 0x541d, 0x5268 => 0x544e, 0x5269 => 0x548f, 0x526a => 0x5475, 0x526b => 0x548e, 0x526c => 0x545f, 0x526d => 0x5471, 0x526e => 0x5477, 0x526f => 0x5470, 0x5270 => 0x5492, 0x5271 => 0x547b, 0x5272 => 0x5480, 0x5273 => 0x5476, 0x5274 => 0x5484, 0x5275 => 0x5490, 0x5276 => 0x5486, 0x5277 => 0x54c7, 0x5278 => 0x54a2, 0x5279 => 0x54b8, 0x527a => 0x54a5, 0x527b => 0x54ac, 0x527c => 0x54c4, 0x527d => 0x54c8, 0x527e => 0x54a8, 0x5321 => 0x54ab, 0x5322 => 0x54c2, 0x5323 => 0x54a4, 0x5324 => 0x54be, 0x5325 => 0x54bc, 0x5326 => 0x54d8, 0x5327 => 0x54e5, 0x5328 => 0x54e6, 0x5329 => 0x550f, 0x532a => 0x5514, 0x532b => 0x54fd, 0x532c => 0x54ee, 0x532d => 0x54ed, 0x532e => 0x54fa, 0x532f => 0x54e2, 0x5330 => 0x5539, 0x5331 => 0x5540, 0x5332 => 0x5563, 0x5333 => 0x554c, 0x5334 => 0x552e, 0x5335 => 0x555c, 0x5336 => 0x5545, 0x5337 => 0x5556, 0x5338 => 0x5557, 0x5339 => 0x5538, 0x533a => 0x5533, 0x533b => 0x555d, 0x533c => 0x5599, 0x533d => 0x5580, 0x533e => 0x54af, 0x533f => 0x558a, 0x5340 => 0x559f, 0x5341 => 0x557b, 0x5342 => 0x557e, 0x5343 => 0x5598, 0x5344 => 0x559e, 0x5345 => 0x55ae, 0x5346 => 0x557c, 0x5347 => 0x5583, 0x5348 => 0x55a9, 0x5349 => 0x5587, 0x534a => 0x55a8, 0x534b => 0x55da, 0x534c => 0x55c5, 0x534d => 0x55df, 0x534e => 0x55c4, 0x534f => 0x55dc, 0x5350 => 0x55e4, 0x5351 => 0x55d4, 0x5352 => 0x5614, 0x5353 => 0x55f7, 0x5354 => 0x5616, 0x5355 => 0x55fe, 0x5356 => 0x55fd, 0x5357 => 0x561b, 0x5358 => 0x55f9, 0x5359 => 0x564e, 0x535a => 0x5650, 0x535b => 0x71df, 0x535c => 0x5634, 0x535d => 0x5636, 0x535e => 0x5632, 0x535f => 0x5638, 0x5360 => 0x566b, 0x5361 => 0x5664, 0x5362 => 0x562f, 0x5363 => 0x566c, 0x5364 => 0x566a, 0x5365 => 0x5686, 0x5366 => 0x5680, 0x5367 => 0x568a, 0x5368 => 0x56a0, 0x5369 => 0x5694, 0x536a => 0x568f, 0x536b => 0x56a5, 0x536c => 0x56ae, 0x536d => 0x56b6, 0x536e => 0x56b4, 0x536f => 0x56c2, 0x5370 => 0x56bc, 0x5371 => 0x56c1, 0x5372 => 0x56c3, 0x5373 => 0x56c0, 0x5374 => 0x56c8, 0x5375 => 0x56ce, 0x5376 => 0x56d1, 0x5377 => 0x56d3, 0x5378 => 0x56d7, 0x5379 => 0x56ee, 0x537a => 0x56f9, 0x537b => 0x5700, 0x537c => 0x56ff, 0x537d => 0x5704, 0x537e => 0x5709, 0x5421 => 0x5708, 0x5422 => 0x570b, 0x5423 => 0x570d, 0x5424 => 0x5713, 0x5425 => 0x5718, 0x5426 => 0x5716, 0x5427 => 0x55c7, 0x5428 => 0x571c, 0x5429 => 0x5726, 0x542a => 0x5737, 0x542b => 0x5738, 0x542c => 0x574e, 0x542d => 0x573b, 0x542e => 0x5740, 0x542f => 0x574f, 0x5430 => 0x5769, 0x5431 => 0x57c0, 0x5432 => 0x5788, 0x5433 => 0x5761, 0x5434 => 0x577f, 0x5435 => 0x5789, 0x5436 => 0x5793, 0x5437 => 0x57a0, 0x5438 => 0x57b3, 0x5439 => 0x57a4, 0x543a => 0x57aa, 0x543b => 0x57b0, 0x543c => 0x57c3, 0x543d => 0x57c6, 0x543e => 0x57d4, 0x543f => 0x57d2, 0x5440 => 0x57d3, 0x5441 => 0x580a, 0x5442 => 0x57d6, 0x5443 => 0x57e3, 0x5444 => 0x580b, 0x5445 => 0x5819, 0x5446 => 0x581d, 0x5447 => 0x5872, 0x5448 => 0x5821, 0x5449 => 0x5862, 0x544a => 0x584b, 0x544b => 0x5870, 0x544c => 0x6bc0, 0x544d => 0x5852, 0x544e => 0x583d, 0x544f => 0x5879, 0x5450 => 0x5885, 0x5451 => 0x58b9, 0x5452 => 0x589f, 0x5453 => 0x58ab, 0x5454 => 0x58ba, 0x5455 => 0x58de, 0x5456 => 0x58bb, 0x5457 => 0x58b8, 0x5458 => 0x58ae, 0x5459 => 0x58c5, 0x545a => 0x58d3, 0x545b => 0x58d1, 0x545c => 0x58d7, 0x545d => 0x58d9, 0x545e => 0x58d8, 0x545f => 0x58e5, 0x5460 => 0x58dc, 0x5461 => 0x58e4, 0x5462 => 0x58df, 0x5463 => 0x58ef, 0x5464 => 0x58fa, 0x5465 => 0x58f9, 0x5466 => 0x58fb, 0x5467 => 0x58fc, 0x5468 => 0x58fd, 0x5469 => 0x5902, 0x546a => 0x590a, 0x546b => 0x5910, 0x546c => 0x591b, 0x546d => 0x68a6, 0x546e => 0x5925, 0x546f => 0x592c, 0x5470 => 0x592d, 0x5471 => 0x5932, 0x5472 => 0x5938, 0x5473 => 0x593e, 0x5474 => 0x7ad2, 0x5475 => 0x5955, 0x5476 => 0x5950, 0x5477 => 0x594e, 0x5478 => 0x595a, 0x5479 => 0x5958, 0x547a => 0x5962, 0x547b => 0x5960, 0x547c => 0x5967, 0x547d => 0x596c, 0x547e => 0x5969, 0x5521 => 0x5978, 0x5522 => 0x5981, 0x5523 => 0x599d, 0x5524 => 0x4f5e, 0x5525 => 0x4fab, 0x5526 => 0x59a3, 0x5527 => 0x59b2, 0x5528 => 0x59c6, 0x5529 => 0x59e8, 0x552a => 0x59dc, 0x552b => 0x598d, 0x552c => 0x59d9, 0x552d => 0x59da, 0x552e => 0x5a25, 0x552f => 0x5a1f, 0x5530 => 0x5a11, 0x5531 => 0x5a1c, 0x5532 => 0x5a09, 0x5533 => 0x5a1a, 0x5534 => 0x5a40, 0x5535 => 0x5a6c, 0x5536 => 0x5a49, 0x5537 => 0x5a35, 0x5538 => 0x5a36, 0x5539 => 0x5a62, 0x553a => 0x5a6a, 0x553b => 0x5a9a, 0x553c => 0x5abc, 0x553d => 0x5abe, 0x553e => 0x5acb, 0x553f => 0x5ac2, 0x5540 => 0x5abd, 0x5541 => 0x5ae3, 0x5542 => 0x5ad7, 0x5543 => 0x5ae6, 0x5544 => 0x5ae9, 0x5545 => 0x5ad6, 0x5546 => 0x5afa, 0x5547 => 0x5afb, 0x5548 => 0x5b0c, 0x5549 => 0x5b0b, 0x554a => 0x5b16, 0x554b => 0x5b32, 0x554c => 0x5ad0, 0x554d => 0x5b2a, 0x554e => 0x5b36, 0x554f => 0x5b3e, 0x5550 => 0x5b43, 0x5551 => 0x5b45, 0x5552 => 0x5b40, 0x5553 => 0x5b51, 0x5554 => 0x5b55, 0x5555 => 0x5b5a, 0x5556 => 0x5b5b, 0x5557 => 0x5b65, 0x5558 => 0x5b69, 0x5559 => 0x5b70, 0x555a => 0x5b73, 0x555b => 0x5b75, 0x555c => 0x5b78, 0x555d => 0x6588, 0x555e => 0x5b7a, 0x555f => 0x5b80, 0x5560 => 0x5b83, 0x5561 => 0x5ba6, 0x5562 => 0x5bb8, 0x5563 => 0x5bc3, 0x5564 => 0x5bc7, 0x5565 => 0x5bc9, 0x5566 => 0x5bd4, 0x5567 => 0x5bd0, 0x5568 => 0x5be4, 0x5569 => 0x5be6, 0x556a => 0x5be2, 0x556b => 0x5bde, 0x556c => 0x5be5, 0x556d => 0x5beb, 0x556e => 0x5bf0, 0x556f => 0x5bf6, 0x5570 => 0x5bf3, 0x5571 => 0x5c05, 0x5572 => 0x5c07, 0x5573 => 0x5c08, 0x5574 => 0x5c0d, 0x5575 => 0x5c13, 0x5576 => 0x5c20, 0x5577 => 0x5c22, 0x5578 => 0x5c28, 0x5579 => 0x5c38, 0x557a => 0x5c39, 0x557b => 0x5c41, 0x557c => 0x5c46, 0x557d => 0x5c4e, 0x557e => 0x5c53, 0x5621 => 0x5c50, 0x5622 => 0x5c4f, 0x5623 => 0x5b71, 0x5624 => 0x5c6c, 0x5625 => 0x5c6e, 0x5626 => 0x4e62, 0x5627 => 0x5c76, 0x5628 => 0x5c79, 0x5629 => 0x5c8c, 0x562a => 0x5c91, 0x562b => 0x5c94, 0x562c => 0x599b, 0x562d => 0x5cab, 0x562e => 0x5cbb, 0x562f => 0x5cb6, 0x5630 => 0x5cbc, 0x5631 => 0x5cb7, 0x5632 => 0x5cc5, 0x5633 => 0x5cbe, 0x5634 => 0x5cc7, 0x5635 => 0x5cd9, 0x5636 => 0x5ce9, 0x5637 => 0x5cfd, 0x5638 => 0x5cfa, 0x5639 => 0x5ced, 0x563a => 0x5d8c, 0x563b => 0x5cea, 0x563c => 0x5d0b, 0x563d => 0x5d15, 0x563e => 0x5d17, 0x563f => 0x5d5c, 0x5640 => 0x5d1f, 0x5641 => 0x5d1b, 0x5642 => 0x5d11, 0x5643 => 0x5d14, 0x5644 => 0x5d22, 0x5645 => 0x5d1a, 0x5646 => 0x5d19, 0x5647 => 0x5d18, 0x5648 => 0x5d4c, 0x5649 => 0x5d52, 0x564a => 0x5d4e, 0x564b => 0x5d4b, 0x564c => 0x5d6c, 0x564d => 0x5d73, 0x564e => 0x5d76, 0x564f => 0x5d87, 0x5650 => 0x5d84, 0x5651 => 0x5d82, 0x5652 => 0x5da2, 0x5653 => 0x5d9d, 0x5654 => 0x5dac, 0x5655 => 0x5dae, 0x5656 => 0x5dbd, 0x5657 => 0x5d90, 0x5658 => 0x5db7, 0x5659 => 0x5dbc, 0x565a => 0x5dc9, 0x565b => 0x5dcd, 0x565c => 0x5dd3, 0x565d => 0x5dd2, 0x565e => 0x5dd6, 0x565f => 0x5ddb, 0x5660 => 0x5deb, 0x5661 => 0x5df2, 0x5662 => 0x5df5, 0x5663 => 0x5e0b, 0x5664 => 0x5e1a, 0x5665 => 0x5e19, 0x5666 => 0x5e11, 0x5667 => 0x5e1b, 0x5668 => 0x5e36, 0x5669 => 0x5e37, 0x566a => 0x5e44, 0x566b => 0x5e43, 0x566c => 0x5e40, 0x566d => 0x5e4e, 0x566e => 0x5e57, 0x566f => 0x5e54, 0x5670 => 0x5e5f, 0x5671 => 0x5e62, 0x5672 => 0x5e64, 0x5673 => 0x5e47, 0x5674 => 0x5e75, 0x5675 => 0x5e76, 0x5676 => 0x5e7a, 0x5677 => 0x9ebc, 0x5678 => 0x5e7f, 0x5679 => 0x5ea0, 0x567a => 0x5ec1, 0x567b => 0x5ec2, 0x567c => 0x5ec8, 0x567d => 0x5ed0, 0x567e => 0x5ecf, 0x5721 => 0x5ed6, 0x5722 => 0x5ee3, 0x5723 => 0x5edd, 0x5724 => 0x5eda, 0x5725 => 0x5edb, 0x5726 => 0x5ee2, 0x5727 => 0x5ee1, 0x5728 => 0x5ee8, 0x5729 => 0x5ee9, 0x572a => 0x5eec, 0x572b => 0x5ef1, 0x572c => 0x5ef3, 0x572d => 0x5ef0, 0x572e => 0x5ef4, 0x572f => 0x5ef8, 0x5730 => 0x5efe, 0x5731 => 0x5f03, 0x5732 => 0x5f09, 0x5733 => 0x5f5d, 0x5734 => 0x5f5c, 0x5735 => 0x5f0b, 0x5736 => 0x5f11, 0x5737 => 0x5f16, 0x5738 => 0x5f29, 0x5739 => 0x5f2d, 0x573a => 0x5f38, 0x573b => 0x5f41, 0x573c => 0x5f48, 0x573d => 0x5f4c, 0x573e => 0x5f4e, 0x573f => 0x5f2f, 0x5740 => 0x5f51, 0x5741 => 0x5f56, 0x5742 => 0x5f57, 0x5743 => 0x5f59, 0x5744 => 0x5f61, 0x5745 => 0x5f6d, 0x5746 => 0x5f73, 0x5747 => 0x5f77, 0x5748 => 0x5f83, 0x5749 => 0x5f82, 0x574a => 0x5f7f, 0x574b => 0x5f8a, 0x574c => 0x5f88, 0x574d => 0x5f91, 0x574e => 0x5f87, 0x574f => 0x5f9e, 0x5750 => 0x5f99, 0x5751 => 0x5f98, 0x5752 => 0x5fa0, 0x5753 => 0x5fa8, 0x5754 => 0x5fad, 0x5755 => 0x5fbc, 0x5756 => 0x5fd6, 0x5757 => 0x5ffb, 0x5758 => 0x5fe4, 0x5759 => 0x5ff8, 0x575a => 0x5ff1, 0x575b => 0x5fdd, 0x575c => 0x60b3, 0x575d => 0x5fff, 0x575e => 0x6021, 0x575f => 0x6060, 0x5760 => 0x6019, 0x5761 => 0x6010, 0x5762 => 0x6029, 0x5763 => 0x600e, 0x5764 => 0x6031, 0x5765 => 0x601b, 0x5766 => 0x6015, 0x5767 => 0x602b, 0x5768 => 0x6026, 0x5769 => 0x600f, 0x576a => 0x603a, 0x576b => 0x605a, 0x576c => 0x6041, 0x576d => 0x606a, 0x576e => 0x6077, 0x576f => 0x605f, 0x5770 => 0x604a, 0x5771 => 0x6046, 0x5772 => 0x604d, 0x5773 => 0x6063, 0x5774 => 0x6043, 0x5775 => 0x6064, 0x5776 => 0x6042, 0x5777 => 0x606c, 0x5778 => 0x606b, 0x5779 => 0x6059, 0x577a => 0x6081, 0x577b => 0x608d, 0x577c => 0x60e7, 0x577d => 0x6083, 0x577e => 0x609a, 0x5821 => 0x6084, 0x5822 => 0x609b, 0x5823 => 0x6096, 0x5824 => 0x6097, 0x5825 => 0x6092, 0x5826 => 0x60a7, 0x5827 => 0x608b, 0x5828 => 0x60e1, 0x5829 => 0x60b8, 0x582a => 0x60e0, 0x582b => 0x60d3, 0x582c => 0x60b4, 0x582d => 0x5ff0, 0x582e => 0x60bd, 0x582f => 0x60c6, 0x5830 => 0x60b5, 0x5831 => 0x60d8, 0x5832 => 0x614d, 0x5833 => 0x6115, 0x5834 => 0x6106, 0x5835 => 0x60f6, 0x5836 => 0x60f7, 0x5837 => 0x6100, 0x5838 => 0x60f4, 0x5839 => 0x60fa, 0x583a => 0x6103, 0x583b => 0x6121, 0x583c => 0x60fb, 0x583d => 0x60f1, 0x583e => 0x610d, 0x583f => 0x610e, 0x5840 => 0x6147, 0x5841 => 0x613e, 0x5842 => 0x6128, 0x5843 => 0x6127, 0x5844 => 0x614a, 0x5845 => 0x613f, 0x5846 => 0x613c, 0x5847 => 0x612c, 0x5848 => 0x6134, 0x5849 => 0x613d, 0x584a => 0x6142, 0x584b => 0x6144, 0x584c => 0x6173, 0x584d => 0x6177, 0x584e => 0x6158, 0x584f => 0x6159, 0x5850 => 0x615a, 0x5851 => 0x616b, 0x5852 => 0x6174, 0x5853 => 0x616f, 0x5854 => 0x6165, 0x5855 => 0x6171, 0x5856 => 0x615f, 0x5857 => 0x615d, 0x5858 => 0x6153, 0x5859 => 0x6175, 0x585a => 0x6199, 0x585b => 0x6196, 0x585c => 0x6187, 0x585d => 0x61ac, 0x585e => 0x6194, 0x585f => 0x619a, 0x5860 => 0x618a, 0x5861 => 0x6191, 0x5862 => 0x61ab, 0x5863 => 0x61ae, 0x5864 => 0x61cc, 0x5865 => 0x61ca, 0x5866 => 0x61c9, 0x5867 => 0x61f7, 0x5868 => 0x61c8, 0x5869 => 0x61c3, 0x586a => 0x61c6, 0x586b => 0x61ba, 0x586c => 0x61cb, 0x586d => 0x7f79, 0x586e => 0x61cd, 0x586f => 0x61e6, 0x5870 => 0x61e3, 0x5871 => 0x61f6, 0x5872 => 0x61fa, 0x5873 => 0x61f4, 0x5874 => 0x61ff, 0x5875 => 0x61fd, 0x5876 => 0x61fc, 0x5877 => 0x61fe, 0x5878 => 0x6200, 0x5879 => 0x6208, 0x587a => 0x6209, 0x587b => 0x620d, 0x587c => 0x620c, 0x587d => 0x6214, 0x587e => 0x621b, 0x5921 => 0x621e, 0x5922 => 0x6221, 0x5923 => 0x622a, 0x5924 => 0x622e, 0x5925 => 0x6230, 0x5926 => 0x6232, 0x5927 => 0x6233, 0x5928 => 0x6241, 0x5929 => 0x624e, 0x592a => 0x625e, 0x592b => 0x6263, 0x592c => 0x625b, 0x592d => 0x6260, 0x592e => 0x6268, 0x592f => 0x627c, 0x5930 => 0x6282, 0x5931 => 0x6289, 0x5932 => 0x627e, 0x5933 => 0x6292, 0x5934 => 0x6293, 0x5935 => 0x6296, 0x5936 => 0x62d4, 0x5937 => 0x6283, 0x5938 => 0x6294, 0x5939 => 0x62d7, 0x593a => 0x62d1, 0x593b => 0x62bb, 0x593c => 0x62cf, 0x593d => 0x62ff, 0x593e => 0x62c6, 0x593f => 0x64d4, 0x5940 => 0x62c8, 0x5941 => 0x62dc, 0x5942 => 0x62cc, 0x5943 => 0x62ca, 0x5944 => 0x62c2, 0x5945 => 0x62c7, 0x5946 => 0x629b, 0x5947 => 0x62c9, 0x5948 => 0x630c, 0x5949 => 0x62ee, 0x594a => 0x62f1, 0x594b => 0x6327, 0x594c => 0x6302, 0x594d => 0x6308, 0x594e => 0x62ef, 0x594f => 0x62f5, 0x5950 => 0x6350, 0x5951 => 0x633e, 0x5952 => 0x634d, 0x5953 => 0x641c, 0x5954 => 0x634f, 0x5955 => 0x6396, 0x5956 => 0x638e, 0x5957 => 0x6380, 0x5958 => 0x63ab, 0x5959 => 0x6376, 0x595a => 0x63a3, 0x595b => 0x638f, 0x595c => 0x6389, 0x595d => 0x639f, 0x595e => 0x63b5, 0x595f => 0x636b, 0x5960 => 0x6369, 0x5961 => 0x63be, 0x5962 => 0x63e9, 0x5963 => 0x63c0, 0x5964 => 0x63c6, 0x5965 => 0x63e3, 0x5966 => 0x63c9, 0x5967 => 0x63d2, 0x5968 => 0x63f6, 0x5969 => 0x63c4, 0x596a => 0x6416, 0x596b => 0x6434, 0x596c => 0x6406, 0x596d => 0x6413, 0x596e => 0x6426, 0x596f => 0x6436, 0x5970 => 0x651d, 0x5971 => 0x6417, 0x5972 => 0x6428, 0x5973 => 0x640f, 0x5974 => 0x6467, 0x5975 => 0x646f, 0x5976 => 0x6476, 0x5977 => 0x644e, 0x5978 => 0x652a, 0x5979 => 0x6495, 0x597a => 0x6493, 0x597b => 0x64a5, 0x597c => 0x64a9, 0x597d => 0x6488, 0x597e => 0x64bc, 0x5a21 => 0x64da, 0x5a22 => 0x64d2, 0x5a23 => 0x64c5, 0x5a24 => 0x64c7, 0x5a25 => 0x64bb, 0x5a26 => 0x64d8, 0x5a27 => 0x64c2, 0x5a28 => 0x64f1, 0x5a29 => 0x64e7, 0x5a2a => 0x8209, 0x5a2b => 0x64e0, 0x5a2c => 0x64e1, 0x5a2d => 0x62ac, 0x5a2e => 0x64e3, 0x5a2f => 0x64ef, 0x5a30 => 0x652c, 0x5a31 => 0x64f6, 0x5a32 => 0x64f4, 0x5a33 => 0x64f2, 0x5a34 => 0x64fa, 0x5a35 => 0x6500, 0x5a36 => 0x64fd, 0x5a37 => 0x6518, 0x5a38 => 0x651c, 0x5a39 => 0x6505, 0x5a3a => 0x6524, 0x5a3b => 0x6523, 0x5a3c => 0x652b, 0x5a3d => 0x6534, 0x5a3e => 0x6535, 0x5a3f => 0x6537, 0x5a40 => 0x6536, 0x5a41 => 0x6538, 0x5a42 => 0x754b, 0x5a43 => 0x6548, 0x5a44 => 0x6556, 0x5a45 => 0x6555, 0x5a46 => 0x654d, 0x5a47 => 0x6558, 0x5a48 => 0x655e, 0x5a49 => 0x655d, 0x5a4a => 0x6572, 0x5a4b => 0x6578, 0x5a4c => 0x6582, 0x5a4d => 0x6583, 0x5a4e => 0x8b8a, 0x5a4f => 0x659b, 0x5a50 => 0x659f, 0x5a51 => 0x65ab, 0x5a52 => 0x65b7, 0x5a53 => 0x65c3, 0x5a54 => 0x65c6, 0x5a55 => 0x65c1, 0x5a56 => 0x65c4, 0x5a57 => 0x65cc, 0x5a58 => 0x65d2, 0x5a59 => 0x65db, 0x5a5a => 0x65d9, 0x5a5b => 0x65e0, 0x5a5c => 0x65e1, 0x5a5d => 0x65f1, 0x5a5e => 0x6772, 0x5a5f => 0x660a, 0x5a60 => 0x6603, 0x5a61 => 0x65fb, 0x5a62 => 0x6773, 0x5a63 => 0x6635, 0x5a64 => 0x6636, 0x5a65 => 0x6634, 0x5a66 => 0x661c, 0x5a67 => 0x664f, 0x5a68 => 0x6644, 0x5a69 => 0x6649, 0x5a6a => 0x6641, 0x5a6b => 0x665e, 0x5a6c => 0x665d, 0x5a6d => 0x6664, 0x5a6e => 0x6667, 0x5a6f => 0x6668, 0x5a70 => 0x665f, 0x5a71 => 0x6662, 0x5a72 => 0x6670, 0x5a73 => 0x6683, 0x5a74 => 0x6688, 0x5a75 => 0x668e, 0x5a76 => 0x6689, 0x5a77 => 0x6684, 0x5a78 => 0x6698, 0x5a79 => 0x669d, 0x5a7a => 0x66c1, 0x5a7b => 0x66b9, 0x5a7c => 0x66c9, 0x5a7d => 0x66be, 0x5a7e => 0x66bc, 0x5b21 => 0x66c4, 0x5b22 => 0x66b8, 0x5b23 => 0x66d6, 0x5b24 => 0x66da, 0x5b25 => 0x66e0, 0x5b26 => 0x663f, 0x5b27 => 0x66e6, 0x5b28 => 0x66e9, 0x5b29 => 0x66f0, 0x5b2a => 0x66f5, 0x5b2b => 0x66f7, 0x5b2c => 0x670f, 0x5b2d => 0x6716, 0x5b2e => 0x671e, 0x5b2f => 0x6726, 0x5b30 => 0x6727, 0x5b31 => 0x9738, 0x5b32 => 0x672e, 0x5b33 => 0x673f, 0x5b34 => 0x6736, 0x5b35 => 0x6741, 0x5b36 => 0x6738, 0x5b37 => 0x6737, 0x5b38 => 0x6746, 0x5b39 => 0x675e, 0x5b3a => 0x6760, 0x5b3b => 0x6759, 0x5b3c => 0x6763, 0x5b3d => 0x6764, 0x5b3e => 0x6789, 0x5b3f => 0x6770, 0x5b40 => 0x67a9, 0x5b41 => 0x677c, 0x5b42 => 0x676a, 0x5b43 => 0x678c, 0x5b44 => 0x678b, 0x5b45 => 0x67a6, 0x5b46 => 0x67a1, 0x5b47 => 0x6785, 0x5b48 => 0x67b7, 0x5b49 => 0x67ef, 0x5b4a => 0x67b4, 0x5b4b => 0x67ec, 0x5b4c => 0x67b3, 0x5b4d => 0x67e9, 0x5b4e => 0x67b8, 0x5b4f => 0x67e4, 0x5b50 => 0x67de, 0x5b51 => 0x67dd, 0x5b52 => 0x67e2, 0x5b53 => 0x67ee, 0x5b54 => 0x67b9, 0x5b55 => 0x67ce, 0x5b56 => 0x67c6, 0x5b57 => 0x67e7, 0x5b58 => 0x6a9c, 0x5b59 => 0x681e, 0x5b5a => 0x6846, 0x5b5b => 0x6829, 0x5b5c => 0x6840, 0x5b5d => 0x684d, 0x5b5e => 0x6832, 0x5b5f => 0x684e, 0x5b60 => 0x68b3, 0x5b61 => 0x682b, 0x5b62 => 0x6859, 0x5b63 => 0x6863, 0x5b64 => 0x6877, 0x5b65 => 0x687f, 0x5b66 => 0x689f, 0x5b67 => 0x688f, 0x5b68 => 0x68ad, 0x5b69 => 0x6894, 0x5b6a => 0x689d, 0x5b6b => 0x689b, 0x5b6c => 0x6883, 0x5b6d => 0x6aae, 0x5b6e => 0x68b9, 0x5b6f => 0x6874, 0x5b70 => 0x68b5, 0x5b71 => 0x68a0, 0x5b72 => 0x68ba, 0x5b73 => 0x690f, 0x5b74 => 0x688d, 0x5b75 => 0x687e, 0x5b76 => 0x6901, 0x5b77 => 0x68ca, 0x5b78 => 0x6908, 0x5b79 => 0x68d8, 0x5b7a => 0x6922, 0x5b7b => 0x6926, 0x5b7c => 0x68e1, 0x5b7d => 0x690c, 0x5b7e => 0x68cd, 0x5c21 => 0x68d4, 0x5c22 => 0x68e7, 0x5c23 => 0x68d5, 0x5c24 => 0x6936, 0x5c25 => 0x6912, 0x5c26 => 0x6904, 0x5c27 => 0x68d7, 0x5c28 => 0x68e3, 0x5c29 => 0x6925, 0x5c2a => 0x68f9, 0x5c2b => 0x68e0, 0x5c2c => 0x68ef, 0x5c2d => 0x6928, 0x5c2e => 0x692a, 0x5c2f => 0x691a, 0x5c30 => 0x6923, 0x5c31 => 0x6921, 0x5c32 => 0x68c6, 0x5c33 => 0x6979, 0x5c34 => 0x6977, 0x5c35 => 0x695c, 0x5c36 => 0x6978, 0x5c37 => 0x696b, 0x5c38 => 0x6954, 0x5c39 => 0x697e, 0x5c3a => 0x696e, 0x5c3b => 0x6939, 0x5c3c => 0x6974, 0x5c3d => 0x693d, 0x5c3e => 0x6959, 0x5c3f => 0x6930, 0x5c40 => 0x6961, 0x5c41 => 0x695e, 0x5c42 => 0x695d, 0x5c43 => 0x6981, 0x5c44 => 0x696a, 0x5c45 => 0x69b2, 0x5c46 => 0x69ae, 0x5c47 => 0x69d0, 0x5c48 => 0x69bf, 0x5c49 => 0x69c1, 0x5c4a => 0x69d3, 0x5c4b => 0x69be, 0x5c4c => 0x69ce, 0x5c4d => 0x5be8, 0x5c4e => 0x69ca, 0x5c4f => 0x69dd, 0x5c50 => 0x69bb, 0x5c51 => 0x69c3, 0x5c52 => 0x69a7, 0x5c53 => 0x6a2e, 0x5c54 => 0x6991, 0x5c55 => 0x69a0, 0x5c56 => 0x699c, 0x5c57 => 0x6995, 0x5c58 => 0x69b4, 0x5c59 => 0x69de, 0x5c5a => 0x69e8, 0x5c5b => 0x6a02, 0x5c5c => 0x6a1b, 0x5c5d => 0x69ff, 0x5c5e => 0x6b0a, 0x5c5f => 0x69f9, 0x5c60 => 0x69f2, 0x5c61 => 0x69e7, 0x5c62 => 0x6a05, 0x5c63 => 0x69b1, 0x5c64 => 0x6a1e, 0x5c65 => 0x69ed, 0x5c66 => 0x6a14, 0x5c67 => 0x69eb, 0x5c68 => 0x6a0a, 0x5c69 => 0x6a12, 0x5c6a => 0x6ac1, 0x5c6b => 0x6a23, 0x5c6c => 0x6a13, 0x5c6d => 0x6a44, 0x5c6e => 0x6a0c, 0x5c6f => 0x6a72, 0x5c70 => 0x6a36, 0x5c71 => 0x6a78, 0x5c72 => 0x6a47, 0x5c73 => 0x6a62, 0x5c74 => 0x6a59, 0x5c75 => 0x6a66, 0x5c76 => 0x6a48, 0x5c77 => 0x6a38, 0x5c78 => 0x6a22, 0x5c79 => 0x6a90, 0x5c7a => 0x6a8d, 0x5c7b => 0x6aa0, 0x5c7c => 0x6a84, 0x5c7d => 0x6aa2, 0x5c7e => 0x6aa3, 0x5d21 => 0x6a97, 0x5d22 => 0x8617, 0x5d23 => 0x6abb, 0x5d24 => 0x6ac3, 0x5d25 => 0x6ac2, 0x5d26 => 0x6ab8, 0x5d27 => 0x6ab3, 0x5d28 => 0x6aac, 0x5d29 => 0x6ade, 0x5d2a => 0x6ad1, 0x5d2b => 0x6adf, 0x5d2c => 0x6aaa, 0x5d2d => 0x6ada, 0x5d2e => 0x6aea, 0x5d2f => 0x6afb, 0x5d30 => 0x6b05, 0x5d31 => 0x8616, 0x5d32 => 0x6afa, 0x5d33 => 0x6b12, 0x5d34 => 0x6b16, 0x5d35 => 0x9b31, 0x5d36 => 0x6b1f, 0x5d37 => 0x6b38, 0x5d38 => 0x6b37, 0x5d39 => 0x76dc, 0x5d3a => 0x6b39, 0x5d3b => 0x98ee, 0x5d3c => 0x6b47, 0x5d3d => 0x6b43, 0x5d3e => 0x6b49, 0x5d3f => 0x6b50, 0x5d40 => 0x6b59, 0x5d41 => 0x6b54, 0x5d42 => 0x6b5b, 0x5d43 => 0x6b5f, 0x5d44 => 0x6b61, 0x5d45 => 0x6b78, 0x5d46 => 0x6b79, 0x5d47 => 0x6b7f, 0x5d48 => 0x6b80, 0x5d49 => 0x6b84, 0x5d4a => 0x6b83, 0x5d4b => 0x6b8d, 0x5d4c => 0x6b98, 0x5d4d => 0x6b95, 0x5d4e => 0x6b9e, 0x5d4f => 0x6ba4, 0x5d50 => 0x6baa, 0x5d51 => 0x6bab, 0x5d52 => 0x6baf, 0x5d53 => 0x6bb2, 0x5d54 => 0x6bb1, 0x5d55 => 0x6bb3, 0x5d56 => 0x6bb7, 0x5d57 => 0x6bbc, 0x5d58 => 0x6bc6, 0x5d59 => 0x6bcb, 0x5d5a => 0x6bd3, 0x5d5b => 0x6bdf, 0x5d5c => 0x6bec, 0x5d5d => 0x6beb, 0x5d5e => 0x6bf3, 0x5d5f => 0x6bef, 0x5d60 => 0x9ebe, 0x5d61 => 0x6c08, 0x5d62 => 0x6c13, 0x5d63 => 0x6c14, 0x5d64 => 0x6c1b, 0x5d65 => 0x6c24, 0x5d66 => 0x6c23, 0x5d67 => 0x6c5e, 0x5d68 => 0x6c55, 0x5d69 => 0x6c62, 0x5d6a => 0x6c6a, 0x5d6b => 0x6c82, 0x5d6c => 0x6c8d, 0x5d6d => 0x6c9a, 0x5d6e => 0x6c81, 0x5d6f => 0x6c9b, 0x5d70 => 0x6c7e, 0x5d71 => 0x6c68, 0x5d72 => 0x6c73, 0x5d73 => 0x6c92, 0x5d74 => 0x6c90, 0x5d75 => 0x6cc4, 0x5d76 => 0x6cf1, 0x5d77 => 0x6cd3, 0x5d78 => 0x6cbd, 0x5d79 => 0x6cd7, 0x5d7a => 0x6cc5, 0x5d7b => 0x6cdd, 0x5d7c => 0x6cae, 0x5d7d => 0x6cb1, 0x5d7e => 0x6cbe, 0x5e21 => 0x6cba, 0x5e22 => 0x6cdb, 0x5e23 => 0x6cef, 0x5e24 => 0x6cd9, 0x5e25 => 0x6cea, 0x5e26 => 0x6d1f, 0x5e27 => 0x884d, 0x5e28 => 0x6d36, 0x5e29 => 0x6d2b, 0x5e2a => 0x6d3d, 0x5e2b => 0x6d38, 0x5e2c => 0x6d19, 0x5e2d => 0x6d35, 0x5e2e => 0x6d33, 0x5e2f => 0x6d12, 0x5e30 => 0x6d0c, 0x5e31 => 0x6d63, 0x5e32 => 0x6d93, 0x5e33 => 0x6d64, 0x5e34 => 0x6d5a, 0x5e35 => 0x6d79, 0x5e36 => 0x6d59, 0x5e37 => 0x6d8e, 0x5e38 => 0x6d95, 0x5e39 => 0x6fe4, 0x5e3a => 0x6d85, 0x5e3b => 0x6df9, 0x5e3c => 0x6e15, 0x5e3d => 0x6e0a, 0x5e3e => 0x6db5, 0x5e3f => 0x6dc7, 0x5e40 => 0x6de6, 0x5e41 => 0x6db8, 0x5e42 => 0x6dc6, 0x5e43 => 0x6dec, 0x5e44 => 0x6dde, 0x5e45 => 0x6dcc, 0x5e46 => 0x6de8, 0x5e47 => 0x6dd2, 0x5e48 => 0x6dc5, 0x5e49 => 0x6dfa, 0x5e4a => 0x6dd9, 0x5e4b => 0x6de4, 0x5e4c => 0x6dd5, 0x5e4d => 0x6dea, 0x5e4e => 0x6dee, 0x5e4f => 0x6e2d, 0x5e50 => 0x6e6e, 0x5e51 => 0x6e2e, 0x5e52 => 0x6e19, 0x5e53 => 0x6e72, 0x5e54 => 0x6e5f, 0x5e55 => 0x6e3e, 0x5e56 => 0x6e23, 0x5e57 => 0x6e6b, 0x5e58 => 0x6e2b, 0x5e59 => 0x6e76, 0x5e5a => 0x6e4d, 0x5e5b => 0x6e1f, 0x5e5c => 0x6e43, 0x5e5d => 0x6e3a, 0x5e5e => 0x6e4e, 0x5e5f => 0x6e24, 0x5e60 => 0x6eff, 0x5e61 => 0x6e1d, 0x5e62 => 0x6e38, 0x5e63 => 0x6e82, 0x5e64 => 0x6eaa, 0x5e65 => 0x6e98, 0x5e66 => 0x6ec9, 0x5e67 => 0x6eb7, 0x5e68 => 0x6ed3, 0x5e69 => 0x6ebd, 0x5e6a => 0x6eaf, 0x5e6b => 0x6ec4, 0x5e6c => 0x6eb2, 0x5e6d => 0x6ed4, 0x5e6e => 0x6ed5, 0x5e6f => 0x6e8f, 0x5e70 => 0x6ea5, 0x5e71 => 0x6ec2, 0x5e72 => 0x6e9f, 0x5e73 => 0x6f41, 0x5e74 => 0x6f11, 0x5e75 => 0x704c, 0x5e76 => 0x6eec, 0x5e77 => 0x6ef8, 0x5e78 => 0x6efe, 0x5e79 => 0x6f3f, 0x5e7a => 0x6ef2, 0x5e7b => 0x6f31, 0x5e7c => 0x6eef, 0x5e7d => 0x6f32, 0x5e7e => 0x6ecc, 0x5f21 => 0x6f3e, 0x5f22 => 0x6f13, 0x5f23 => 0x6ef7, 0x5f24 => 0x6f86, 0x5f25 => 0x6f7a, 0x5f26 => 0x6f78, 0x5f27 => 0x6f81, 0x5f28 => 0x6f80, 0x5f29 => 0x6f6f, 0x5f2a => 0x6f5b, 0x5f2b => 0x6ff3, 0x5f2c => 0x6f6d, 0x5f2d => 0x6f82, 0x5f2e => 0x6f7c, 0x5f2f => 0x6f58, 0x5f30 => 0x6f8e, 0x5f31 => 0x6f91, 0x5f32 => 0x6fc2, 0x5f33 => 0x6f66, 0x5f34 => 0x6fb3, 0x5f35 => 0x6fa3, 0x5f36 => 0x6fa1, 0x5f37 => 0x6fa4, 0x5f38 => 0x6fb9, 0x5f39 => 0x6fc6, 0x5f3a => 0x6faa, 0x5f3b => 0x6fdf, 0x5f3c => 0x6fd5, 0x5f3d => 0x6fec, 0x5f3e => 0x6fd4, 0x5f3f => 0x6fd8, 0x5f40 => 0x6ff1, 0x5f41 => 0x6fee, 0x5f42 => 0x6fdb, 0x5f43 => 0x7009, 0x5f44 => 0x700b, 0x5f45 => 0x6ffa, 0x5f46 => 0x7011, 0x5f47 => 0x7001, 0x5f48 => 0x700f, 0x5f49 => 0x6ffe, 0x5f4a => 0x701b, 0x5f4b => 0x701a, 0x5f4c => 0x6f74, 0x5f4d => 0x701d, 0x5f4e => 0x7018, 0x5f4f => 0x701f, 0x5f50 => 0x7030, 0x5f51 => 0x703e, 0x5f52 => 0x7032, 0x5f53 => 0x7051, 0x5f54 => 0x7063, 0x5f55 => 0x7099, 0x5f56 => 0x7092, 0x5f57 => 0x70af, 0x5f58 => 0x70f1, 0x5f59 => 0x70ac, 0x5f5a => 0x70b8, 0x5f5b => 0x70b3, 0x5f5c => 0x70ae, 0x5f5d => 0x70df, 0x5f5e => 0x70cb, 0x5f5f => 0x70dd, 0x5f60 => 0x70d9, 0x5f61 => 0x7109, 0x5f62 => 0x70fd, 0x5f63 => 0x711c, 0x5f64 => 0x7119, 0x5f65 => 0x7165, 0x5f66 => 0x7155, 0x5f67 => 0x7188, 0x5f68 => 0x7166, 0x5f69 => 0x7162, 0x5f6a => 0x714c, 0x5f6b => 0x7156, 0x5f6c => 0x716c, 0x5f6d => 0x718f, 0x5f6e => 0x71fb, 0x5f6f => 0x7184, 0x5f70 => 0x7195, 0x5f71 => 0x71a8, 0x5f72 => 0x71ac, 0x5f73 => 0x71d7, 0x5f74 => 0x71b9, 0x5f75 => 0x71be, 0x5f76 => 0x71d2, 0x5f77 => 0x71c9, 0x5f78 => 0x71d4, 0x5f79 => 0x71ce, 0x5f7a => 0x71e0, 0x5f7b => 0x71ec, 0x5f7c => 0x71e7, 0x5f7d => 0x71f5, 0x5f7e => 0x71fc, 0x6021 => 0x71f9, 0x6022 => 0x71ff, 0x6023 => 0x720d, 0x6024 => 0x7210, 0x6025 => 0x721b, 0x6026 => 0x7228, 0x6027 => 0x722d, 0x6028 => 0x722c, 0x6029 => 0x7230, 0x602a => 0x7232, 0x602b => 0x723b, 0x602c => 0x723c, 0x602d => 0x723f, 0x602e => 0x7240, 0x602f => 0x7246, 0x6030 => 0x724b, 0x6031 => 0x7258, 0x6032 => 0x7274, 0x6033 => 0x727e, 0x6034 => 0x7282, 0x6035 => 0x7281, 0x6036 => 0x7287, 0x6037 => 0x7292, 0x6038 => 0x7296, 0x6039 => 0x72a2, 0x603a => 0x72a7, 0x603b => 0x72b9, 0x603c => 0x72b2, 0x603d => 0x72c3, 0x603e => 0x72c6, 0x603f => 0x72c4, 0x6040 => 0x72ce, 0x6041 => 0x72d2, 0x6042 => 0x72e2, 0x6043 => 0x72e0, 0x6044 => 0x72e1, 0x6045 => 0x72f9, 0x6046 => 0x72f7, 0x6047 => 0x500f, 0x6048 => 0x7317, 0x6049 => 0x730a, 0x604a => 0x731c, 0x604b => 0x7316, 0x604c => 0x731d, 0x604d => 0x7334, 0x604e => 0x732f, 0x604f => 0x7329, 0x6050 => 0x7325, 0x6051 => 0x733e, 0x6052 => 0x734e, 0x6053 => 0x734f, 0x6054 => 0x9ed8, 0x6055 => 0x7357, 0x6056 => 0x736a, 0x6057 => 0x7368, 0x6058 => 0x7370, 0x6059 => 0x7378, 0x605a => 0x7375, 0x605b => 0x737b, 0x605c => 0x737a, 0x605d => 0x73c8, 0x605e => 0x73b3, 0x605f => 0x73ce, 0x6060 => 0x73bb, 0x6061 => 0x73c0, 0x6062 => 0x73e5, 0x6063 => 0x73ee, 0x6064 => 0x73de, 0x6065 => 0x74a2, 0x6066 => 0x7405, 0x6067 => 0x746f, 0x6068 => 0x7425, 0x6069 => 0x73f8, 0x606a => 0x7432, 0x606b => 0x743a, 0x606c => 0x7455, 0x606d => 0x743f, 0x606e => 0x745f, 0x606f => 0x7459, 0x6070 => 0x7441, 0x6071 => 0x745c, 0x6072 => 0x7469, 0x6073 => 0x7470, 0x6074 => 0x7463, 0x6075 => 0x746a, 0x6076 => 0x7476, 0x6077 => 0x747e, 0x6078 => 0x748b, 0x6079 => 0x749e, 0x607a => 0x74a7, 0x607b => 0x74ca, 0x607c => 0x74cf, 0x607d => 0x74d4, 0x607e => 0x73f1, 0x6121 => 0x74e0, 0x6122 => 0x74e3, 0x6123 => 0x74e7, 0x6124 => 0x74e9, 0x6125 => 0x74ee, 0x6126 => 0x74f2, 0x6127 => 0x74f0, 0x6128 => 0x74f1, 0x6129 => 0x74f8, 0x612a => 0x74f7, 0x612b => 0x7504, 0x612c => 0x7503, 0x612d => 0x7505, 0x612e => 0x750c, 0x612f => 0x750e, 0x6130 => 0x750d, 0x6131 => 0x7515, 0x6132 => 0x7513, 0x6133 => 0x751e, 0x6134 => 0x7526, 0x6135 => 0x752c, 0x6136 => 0x753c, 0x6137 => 0x7544, 0x6138 => 0x754d, 0x6139 => 0x754a, 0x613a => 0x7549, 0x613b => 0x755b, 0x613c => 0x7546, 0x613d => 0x755a, 0x613e => 0x7569, 0x613f => 0x7564, 0x6140 => 0x7567, 0x6141 => 0x756b, 0x6142 => 0x756d, 0x6143 => 0x7578, 0x6144 => 0x7576, 0x6145 => 0x7586, 0x6146 => 0x7587, 0x6147 => 0x7574, 0x6148 => 0x758a, 0x6149 => 0x7589, 0x614a => 0x7582, 0x614b => 0x7594, 0x614c => 0x759a, 0x614d => 0x759d, 0x614e => 0x75a5, 0x614f => 0x75a3, 0x6150 => 0x75c2, 0x6151 => 0x75b3, 0x6152 => 0x75c3, 0x6153 => 0x75b5, 0x6154 => 0x75bd, 0x6155 => 0x75b8, 0x6156 => 0x75bc, 0x6157 => 0x75b1, 0x6158 => 0x75cd, 0x6159 => 0x75ca, 0x615a => 0x75d2, 0x615b => 0x75d9, 0x615c => 0x75e3, 0x615d => 0x75de, 0x615e => 0x75fe, 0x615f => 0x75ff, 0x6160 => 0x75fc, 0x6161 => 0x7601, 0x6162 => 0x75f0, 0x6163 => 0x75fa, 0x6164 => 0x75f2, 0x6165 => 0x75f3, 0x6166 => 0x760b, 0x6167 => 0x760d, 0x6168 => 0x7609, 0x6169 => 0x761f, 0x616a => 0x7627, 0x616b => 0x7620, 0x616c => 0x7621, 0x616d => 0x7622, 0x616e => 0x7624, 0x616f => 0x7634, 0x6170 => 0x7630, 0x6171 => 0x763b, 0x6172 => 0x7647, 0x6173 => 0x7648, 0x6174 => 0x7646, 0x6175 => 0x765c, 0x6176 => 0x7658, 0x6177 => 0x7661, 0x6178 => 0x7662, 0x6179 => 0x7668, 0x617a => 0x7669, 0x617b => 0x766a, 0x617c => 0x7667, 0x617d => 0x766c, 0x617e => 0x7670, 0x6221 => 0x7672, 0x6222 => 0x7676, 0x6223 => 0x7678, 0x6224 => 0x767c, 0x6225 => 0x7680, 0x6226 => 0x7683, 0x6227 => 0x7688, 0x6228 => 0x768b, 0x6229 => 0x768e, 0x622a => 0x7696, 0x622b => 0x7693, 0x622c => 0x7699, 0x622d => 0x769a, 0x622e => 0x76b0, 0x622f => 0x76b4, 0x6230 => 0x76b8, 0x6231 => 0x76b9, 0x6232 => 0x76ba, 0x6233 => 0x76c2, 0x6234 => 0x76cd, 0x6235 => 0x76d6, 0x6236 => 0x76d2, 0x6237 => 0x76de, 0x6238 => 0x76e1, 0x6239 => 0x76e5, 0x623a => 0x76e7, 0x623b => 0x76ea, 0x623c => 0x862f, 0x623d => 0x76fb, 0x623e => 0x7708, 0x623f => 0x7707, 0x6240 => 0x7704, 0x6241 => 0x7729, 0x6242 => 0x7724, 0x6243 => 0x771e, 0x6244 => 0x7725, 0x6245 => 0x7726, 0x6246 => 0x771b, 0x6247 => 0x7737, 0x6248 => 0x7738, 0x6249 => 0x7747, 0x624a => 0x775a, 0x624b => 0x7768, 0x624c => 0x776b, 0x624d => 0x775b, 0x624e => 0x7765, 0x624f => 0x777f, 0x6250 => 0x777e, 0x6251 => 0x7779, 0x6252 => 0x778e, 0x6253 => 0x778b, 0x6254 => 0x7791, 0x6255 => 0x77a0, 0x6256 => 0x779e, 0x6257 => 0x77b0, 0x6258 => 0x77b6, 0x6259 => 0x77b9, 0x625a => 0x77bf, 0x625b => 0x77bc, 0x625c => 0x77bd, 0x625d => 0x77bb, 0x625e => 0x77c7, 0x625f => 0x77cd, 0x6260 => 0x77d7, 0x6261 => 0x77da, 0x6262 => 0x77dc, 0x6263 => 0x77e3, 0x6264 => 0x77ee, 0x6265 => 0x77fc, 0x6266 => 0x780c, 0x6267 => 0x7812, 0x6268 => 0x7926, 0x6269 => 0x7820, 0x626a => 0x792a, 0x626b => 0x7845, 0x626c => 0x788e, 0x626d => 0x7874, 0x626e => 0x7886, 0x626f => 0x787c, 0x6270 => 0x789a, 0x6271 => 0x788c, 0x6272 => 0x78a3, 0x6273 => 0x78b5, 0x6274 => 0x78aa, 0x6275 => 0x78af, 0x6276 => 0x78d1, 0x6277 => 0x78c6, 0x6278 => 0x78cb, 0x6279 => 0x78d4, 0x627a => 0x78be, 0x627b => 0x78bc, 0x627c => 0x78c5, 0x627d => 0x78ca, 0x627e => 0x78ec, 0x6321 => 0x78e7, 0x6322 => 0x78da, 0x6323 => 0x78fd, 0x6324 => 0x78f4, 0x6325 => 0x7907, 0x6326 => 0x7912, 0x6327 => 0x7911, 0x6328 => 0x7919, 0x6329 => 0x792c, 0x632a => 0x792b, 0x632b => 0x7940, 0x632c => 0x7960, 0x632d => 0x7957, 0x632e => 0x795f, 0x632f => 0x795a, 0x6330 => 0x7955, 0x6331 => 0x7953, 0x6332 => 0x797a, 0x6333 => 0x797f, 0x6334 => 0x798a, 0x6335 => 0x799d, 0x6336 => 0x79a7, 0x6337 => 0x9f4b, 0x6338 => 0x79aa, 0x6339 => 0x79ae, 0x633a => 0x79b3, 0x633b => 0x79b9, 0x633c => 0x79ba, 0x633d => 0x79c9, 0x633e => 0x79d5, 0x633f => 0x79e7, 0x6340 => 0x79ec, 0x6341 => 0x79e1, 0x6342 => 0x79e3, 0x6343 => 0x7a08, 0x6344 => 0x7a0d, 0x6345 => 0x7a18, 0x6346 => 0x7a19, 0x6347 => 0x7a20, 0x6348 => 0x7a1f, 0x6349 => 0x7980, 0x634a => 0x7a31, 0x634b => 0x7a3b, 0x634c => 0x7a3e, 0x634d => 0x7a37, 0x634e => 0x7a43, 0x634f => 0x7a57, 0x6350 => 0x7a49, 0x6351 => 0x7a61, 0x6352 => 0x7a62, 0x6353 => 0x7a69, 0x6354 => 0x9f9d, 0x6355 => 0x7a70, 0x6356 => 0x7a79, 0x6357 => 0x7a7d, 0x6358 => 0x7a88, 0x6359 => 0x7a97, 0x635a => 0x7a95, 0x635b => 0x7a98, 0x635c => 0x7a96, 0x635d => 0x7aa9, 0x635e => 0x7ac8, 0x635f => 0x7ab0, 0x6360 => 0x7ab6, 0x6361 => 0x7ac5, 0x6362 => 0x7ac4, 0x6363 => 0x7abf, 0x6364 => 0x9083, 0x6365 => 0x7ac7, 0x6366 => 0x7aca, 0x6367 => 0x7acd, 0x6368 => 0x7acf, 0x6369 => 0x7ad5, 0x636a => 0x7ad3, 0x636b => 0x7ad9, 0x636c => 0x7ada, 0x636d => 0x7add, 0x636e => 0x7ae1, 0x636f => 0x7ae2, 0x6370 => 0x7ae6, 0x6371 => 0x7aed, 0x6372 => 0x7af0, 0x6373 => 0x7b02, 0x6374 => 0x7b0f, 0x6375 => 0x7b0a, 0x6376 => 0x7b06, 0x6377 => 0x7b33, 0x6378 => 0x7b18, 0x6379 => 0x7b19, 0x637a => 0x7b1e, 0x637b => 0x7b35, 0x637c => 0x7b28, 0x637d => 0x7b36, 0x637e => 0x7b50, 0x6421 => 0x7b7a, 0x6422 => 0x7b04, 0x6423 => 0x7b4d, 0x6424 => 0x7b0b, 0x6425 => 0x7b4c, 0x6426 => 0x7b45, 0x6427 => 0x7b75, 0x6428 => 0x7b65, 0x6429 => 0x7b74, 0x642a => 0x7b67, 0x642b => 0x7b70, 0x642c => 0x7b71, 0x642d => 0x7b6c, 0x642e => 0x7b6e, 0x642f => 0x7b9d, 0x6430 => 0x7b98, 0x6431 => 0x7b9f, 0x6432 => 0x7b8d, 0x6433 => 0x7b9c, 0x6434 => 0x7b9a, 0x6435 => 0x7b8b, 0x6436 => 0x7b92, 0x6437 => 0x7b8f, 0x6438 => 0x7b5d, 0x6439 => 0x7b99, 0x643a => 0x7bcb, 0x643b => 0x7bc1, 0x643c => 0x7bcc, 0x643d => 0x7bcf, 0x643e => 0x7bb4, 0x643f => 0x7bc6, 0x6440 => 0x7bdd, 0x6441 => 0x7be9, 0x6442 => 0x7c11, 0x6443 => 0x7c14, 0x6444 => 0x7be6, 0x6445 => 0x7be5, 0x6446 => 0x7c60, 0x6447 => 0x7c00, 0x6448 => 0x7c07, 0x6449 => 0x7c13, 0x644a => 0x7bf3, 0x644b => 0x7bf7, 0x644c => 0x7c17, 0x644d => 0x7c0d, 0x644e => 0x7bf6, 0x644f => 0x7c23, 0x6450 => 0x7c27, 0x6451 => 0x7c2a, 0x6452 => 0x7c1f, 0x6453 => 0x7c37, 0x6454 => 0x7c2b, 0x6455 => 0x7c3d, 0x6456 => 0x7c4c, 0x6457 => 0x7c43, 0x6458 => 0x7c54, 0x6459 => 0x7c4f, 0x645a => 0x7c40, 0x645b => 0x7c50, 0x645c => 0x7c58, 0x645d => 0x7c5f, 0x645e => 0x7c64, 0x645f => 0x7c56, 0x6460 => 0x7c65, 0x6461 => 0x7c6c, 0x6462 => 0x7c75, 0x6463 => 0x7c83, 0x6464 => 0x7c90, 0x6465 => 0x7ca4, 0x6466 => 0x7cad, 0x6467 => 0x7ca2, 0x6468 => 0x7cab, 0x6469 => 0x7ca1, 0x646a => 0x7ca8, 0x646b => 0x7cb3, 0x646c => 0x7cb2, 0x646d => 0x7cb1, 0x646e => 0x7cae, 0x646f => 0x7cb9, 0x6470 => 0x7cbd, 0x6471 => 0x7cc0, 0x6472 => 0x7cc5, 0x6473 => 0x7cc2, 0x6474 => 0x7cd8, 0x6475 => 0x7cd2, 0x6476 => 0x7cdc, 0x6477 => 0x7ce2, 0x6478 => 0x9b3b, 0x6479 => 0x7cef, 0x647a => 0x7cf2, 0x647b => 0x7cf4, 0x647c => 0x7cf6, 0x647d => 0x7cfa, 0x647e => 0x7d06, 0x6521 => 0x7d02, 0x6522 => 0x7d1c, 0x6523 => 0x7d15, 0x6524 => 0x7d0a, 0x6525 => 0x7d45, 0x6526 => 0x7d4b, 0x6527 => 0x7d2e, 0x6528 => 0x7d32, 0x6529 => 0x7d3f, 0x652a => 0x7d35, 0x652b => 0x7d46, 0x652c => 0x7d73, 0x652d => 0x7d56, 0x652e => 0x7d4e, 0x652f => 0x7d72, 0x6530 => 0x7d68, 0x6531 => 0x7d6e, 0x6532 => 0x7d4f, 0x6533 => 0x7d63, 0x6534 => 0x7d93, 0x6535 => 0x7d89, 0x6536 => 0x7d5b, 0x6537 => 0x7d8f, 0x6538 => 0x7d7d, 0x6539 => 0x7d9b, 0x653a => 0x7dba, 0x653b => 0x7dae, 0x653c => 0x7da3, 0x653d => 0x7db5, 0x653e => 0x7dc7, 0x653f => 0x7dbd, 0x6540 => 0x7dab, 0x6541 => 0x7e3d, 0x6542 => 0x7da2, 0x6543 => 0x7daf, 0x6544 => 0x7ddc, 0x6545 => 0x7db8, 0x6546 => 0x7d9f, 0x6547 => 0x7db0, 0x6548 => 0x7dd8, 0x6549 => 0x7ddd, 0x654a => 0x7de4, 0x654b => 0x7dde, 0x654c => 0x7dfb, 0x654d => 0x7df2, 0x654e => 0x7de1, 0x654f => 0x7e05, 0x6550 => 0x7e0a, 0x6551 => 0x7e23, 0x6552 => 0x7e21, 0x6553 => 0x7e12, 0x6554 => 0x7e31, 0x6555 => 0x7e1f, 0x6556 => 0x7e09, 0x6557 => 0x7e0b, 0x6558 => 0x7e22, 0x6559 => 0x7e46, 0x655a => 0x7e66, 0x655b => 0x7e3b, 0x655c => 0x7e35, 0x655d => 0x7e39, 0x655e => 0x7e43, 0x655f => 0x7e37, 0x6560 => 0x7e32, 0x6561 => 0x7e3a, 0x6562 => 0x7e67, 0x6563 => 0x7e5d, 0x6564 => 0x7e56, 0x6565 => 0x7e5e, 0x6566 => 0x7e59, 0x6567 => 0x7e5a, 0x6568 => 0x7e79, 0x6569 => 0x7e6a, 0x656a => 0x7e69, 0x656b => 0x7e7c, 0x656c => 0x7e7b, 0x656d => 0x7e83, 0x656e => 0x7dd5, 0x656f => 0x7e7d, 0x6570 => 0x8fae, 0x6571 => 0x7e7f, 0x6572 => 0x7e88, 0x6573 => 0x7e89, 0x6574 => 0x7e8c, 0x6575 => 0x7e92, 0x6576 => 0x7e90, 0x6577 => 0x7e93, 0x6578 => 0x7e94, 0x6579 => 0x7e96, 0x657a => 0x7e8e, 0x657b => 0x7e9b, 0x657c => 0x7e9c, 0x657d => 0x7f38, 0x657e => 0x7f3a, 0x6621 => 0x7f45, 0x6622 => 0x7f4c, 0x6623 => 0x7f4d, 0x6624 => 0x7f4e, 0x6625 => 0x7f50, 0x6626 => 0x7f51, 0x6627 => 0x7f55, 0x6628 => 0x7f54, 0x6629 => 0x7f58, 0x662a => 0x7f5f, 0x662b => 0x7f60, 0x662c => 0x7f68, 0x662d => 0x7f69, 0x662e => 0x7f67, 0x662f => 0x7f78, 0x6630 => 0x7f82, 0x6631 => 0x7f86, 0x6632 => 0x7f83, 0x6633 => 0x7f88, 0x6634 => 0x7f87, 0x6635 => 0x7f8c, 0x6636 => 0x7f94, 0x6637 => 0x7f9e, 0x6638 => 0x7f9d, 0x6639 => 0x7f9a, 0x663a => 0x7fa3, 0x663b => 0x7faf, 0x663c => 0x7fb2, 0x663d => 0x7fb9, 0x663e => 0x7fae, 0x663f => 0x7fb6, 0x6640 => 0x7fb8, 0x6641 => 0x8b71, 0x6642 => 0x7fc5, 0x6643 => 0x7fc6, 0x6644 => 0x7fca, 0x6645 => 0x7fd5, 0x6646 => 0x7fd4, 0x6647 => 0x7fe1, 0x6648 => 0x7fe6, 0x6649 => 0x7fe9, 0x664a => 0x7ff3, 0x664b => 0x7ff9, 0x664c => 0x98dc, 0x664d => 0x8006, 0x664e => 0x8004, 0x664f => 0x800b, 0x6650 => 0x8012, 0x6651 => 0x8018, 0x6652 => 0x8019, 0x6653 => 0x801c, 0x6654 => 0x8021, 0x6655 => 0x8028, 0x6656 => 0x803f, 0x6657 => 0x803b, 0x6658 => 0x804a, 0x6659 => 0x8046, 0x665a => 0x8052, 0x665b => 0x8058, 0x665c => 0x805a, 0x665d => 0x805f, 0x665e => 0x8062, 0x665f => 0x8068, 0x6660 => 0x8073, 0x6661 => 0x8072, 0x6662 => 0x8070, 0x6663 => 0x8076, 0x6664 => 0x8079, 0x6665 => 0x807d, 0x6666 => 0x807f, 0x6667 => 0x8084, 0x6668 => 0x8086, 0x6669 => 0x8085, 0x666a => 0x809b, 0x666b => 0x8093, 0x666c => 0x809a, 0x666d => 0x80ad, 0x666e => 0x5190, 0x666f => 0x80ac, 0x6670 => 0x80db, 0x6671 => 0x80e5, 0x6672 => 0x80d9, 0x6673 => 0x80dd, 0x6674 => 0x80c4, 0x6675 => 0x80da, 0x6676 => 0x80d6, 0x6677 => 0x8109, 0x6678 => 0x80ef, 0x6679 => 0x80f1, 0x667a => 0x811b, 0x667b => 0x8129, 0x667c => 0x8123, 0x667d => 0x812f, 0x667e => 0x814b, 0x6721 => 0x968b, 0x6722 => 0x8146, 0x6723 => 0x813e, 0x6724 => 0x8153, 0x6725 => 0x8151, 0x6726 => 0x80fc, 0x6727 => 0x8171, 0x6728 => 0x816e, 0x6729 => 0x8165, 0x672a => 0x8166, 0x672b => 0x8174, 0x672c => 0x8183, 0x672d => 0x8188, 0x672e => 0x818a, 0x672f => 0x8180, 0x6730 => 0x8182, 0x6731 => 0x81a0, 0x6732 => 0x8195, 0x6733 => 0x81a4, 0x6734 => 0x81a3, 0x6735 => 0x815f, 0x6736 => 0x8193, 0x6737 => 0x81a9, 0x6738 => 0x81b0, 0x6739 => 0x81b5, 0x673a => 0x81be, 0x673b => 0x81b8, 0x673c => 0x81bd, 0x673d => 0x81c0, 0x673e => 0x81c2, 0x673f => 0x81ba, 0x6740 => 0x81c9, 0x6741 => 0x81cd, 0x6742 => 0x81d1, 0x6743 => 0x81d9, 0x6744 => 0x81d8, 0x6745 => 0x81c8, 0x6746 => 0x81da, 0x6747 => 0x81df, 0x6748 => 0x81e0, 0x6749 => 0x81e7, 0x674a => 0x81fa, 0x674b => 0x81fb, 0x674c => 0x81fe, 0x674d => 0x8201, 0x674e => 0x8202, 0x674f => 0x8205, 0x6750 => 0x8207, 0x6751 => 0x820a, 0x6752 => 0x820d, 0x6753 => 0x8210, 0x6754 => 0x8216, 0x6755 => 0x8229, 0x6756 => 0x822b, 0x6757 => 0x8238, 0x6758 => 0x8233, 0x6759 => 0x8240, 0x675a => 0x8259, 0x675b => 0x8258, 0x675c => 0x825d, 0x675d => 0x825a, 0x675e => 0x825f, 0x675f => 0x8264, 0x6760 => 0x8262, 0x6761 => 0x8268, 0x6762 => 0x826a, 0x6763 => 0x826b, 0x6764 => 0x822e, 0x6765 => 0x8271, 0x6766 => 0x8277, 0x6767 => 0x8278, 0x6768 => 0x827e, 0x6769 => 0x828d, 0x676a => 0x8292, 0x676b => 0x82ab, 0x676c => 0x829f, 0x676d => 0x82bb, 0x676e => 0x82ac, 0x676f => 0x82e1, 0x6770 => 0x82e3, 0x6771 => 0x82df, 0x6772 => 0x82d2, 0x6773 => 0x82f4, 0x6774 => 0x82f3, 0x6775 => 0x82fa, 0x6776 => 0x8393, 0x6777 => 0x8303, 0x6778 => 0x82fb, 0x6779 => 0x82f9, 0x677a => 0x82de, 0x677b => 0x8306, 0x677c => 0x82dc, 0x677d => 0x8309, 0x677e => 0x82d9, 0x6821 => 0x8335, 0x6822 => 0x8334, 0x6823 => 0x8316, 0x6824 => 0x8332, 0x6825 => 0x8331, 0x6826 => 0x8340, 0x6827 => 0x8339, 0x6828 => 0x8350, 0x6829 => 0x8345, 0x682a => 0x832f, 0x682b => 0x832b, 0x682c => 0x8317, 0x682d => 0x8318, 0x682e => 0x8385, 0x682f => 0x839a, 0x6830 => 0x83aa, 0x6831 => 0x839f, 0x6832 => 0x83a2, 0x6833 => 0x8396, 0x6834 => 0x8323, 0x6835 => 0x838e, 0x6836 => 0x8387, 0x6837 => 0x838a, 0x6838 => 0x837c, 0x6839 => 0x83b5, 0x683a => 0x8373, 0x683b => 0x8375, 0x683c => 0x83a0, 0x683d => 0x8389, 0x683e => 0x83a8, 0x683f => 0x83f4, 0x6840 => 0x8413, 0x6841 => 0x83eb, 0x6842 => 0x83ce, 0x6843 => 0x83fd, 0x6844 => 0x8403, 0x6845 => 0x83d8, 0x6846 => 0x840b, 0x6847 => 0x83c1, 0x6848 => 0x83f7, 0x6849 => 0x8407, 0x684a => 0x83e0, 0x684b => 0x83f2, 0x684c => 0x840d, 0x684d => 0x8422, 0x684e => 0x8420, 0x684f => 0x83bd, 0x6850 => 0x8438, 0x6851 => 0x8506, 0x6852 => 0x83fb, 0x6853 => 0x846d, 0x6854 => 0x842a, 0x6855 => 0x843c, 0x6856 => 0x855a, 0x6857 => 0x8484, 0x6858 => 0x8477, 0x6859 => 0x846b, 0x685a => 0x84ad, 0x685b => 0x846e, 0x685c => 0x8482, 0x685d => 0x8469, 0x685e => 0x8446, 0x685f => 0x842c, 0x6860 => 0x846f, 0x6861 => 0x8479, 0x6862 => 0x8435, 0x6863 => 0x84ca, 0x6864 => 0x8462, 0x6865 => 0x84b9, 0x6866 => 0x84bf, 0x6867 => 0x849f, 0x6868 => 0x84d9, 0x6869 => 0x84cd, 0x686a => 0x84bb, 0x686b => 0x84da, 0x686c => 0x84d0, 0x686d => 0x84c1, 0x686e => 0x84c6, 0x686f => 0x84d6, 0x6870 => 0x84a1, 0x6871 => 0x8521, 0x6872 => 0x84ff, 0x6873 => 0x84f4, 0x6874 => 0x8517, 0x6875 => 0x8518, 0x6876 => 0x852c, 0x6877 => 0x851f, 0x6878 => 0x8515, 0x6879 => 0x8514, 0x687a => 0x84fc, 0x687b => 0x8540, 0x687c => 0x8563, 0x687d => 0x8558, 0x687e => 0x8548, 0x6921 => 0x8541, 0x6922 => 0x8602, 0x6923 => 0x854b, 0x6924 => 0x8555, 0x6925 => 0x8580, 0x6926 => 0x85a4, 0x6927 => 0x8588, 0x6928 => 0x8591, 0x6929 => 0x858a, 0x692a => 0x85a8, 0x692b => 0x856d, 0x692c => 0x8594, 0x692d => 0x859b, 0x692e => 0x85ea, 0x692f => 0x8587, 0x6930 => 0x859c, 0x6931 => 0x8577, 0x6932 => 0x857e, 0x6933 => 0x8590, 0x6934 => 0x85c9, 0x6935 => 0x85ba, 0x6936 => 0x85cf, 0x6937 => 0x85b9, 0x6938 => 0x85d0, 0x6939 => 0x85d5, 0x693a => 0x85dd, 0x693b => 0x85e5, 0x693c => 0x85dc, 0x693d => 0x85f9, 0x693e => 0x860a, 0x693f => 0x8613, 0x6940 => 0x860b, 0x6941 => 0x85fe, 0x6942 => 0x85fa, 0x6943 => 0x8606, 0x6944 => 0x8622, 0x6945 => 0x861a, 0x6946 => 0x8630, 0x6947 => 0x863f, 0x6948 => 0x864d, 0x6949 => 0x4e55, 0x694a => 0x8654, 0x694b => 0x865f, 0x694c => 0x8667, 0x694d => 0x8671, 0x694e => 0x8693, 0x694f => 0x86a3, 0x6950 => 0x86a9, 0x6951 => 0x86aa, 0x6952 => 0x868b, 0x6953 => 0x868c, 0x6954 => 0x86b6, 0x6955 => 0x86af, 0x6956 => 0x86c4, 0x6957 => 0x86c6, 0x6958 => 0x86b0, 0x6959 => 0x86c9, 0x695a => 0x8823, 0x695b => 0x86ab, 0x695c => 0x86d4, 0x695d => 0x86de, 0x695e => 0x86e9, 0x695f => 0x86ec, 0x6960 => 0x86df, 0x6961 => 0x86db, 0x6962 => 0x86ef, 0x6963 => 0x8712, 0x6964 => 0x8706, 0x6965 => 0x8708, 0x6966 => 0x8700, 0x6967 => 0x8703, 0x6968 => 0x86fb, 0x6969 => 0x8711, 0x696a => 0x8709, 0x696b => 0x870d, 0x696c => 0x86f9, 0x696d => 0x870a, 0x696e => 0x8734, 0x696f => 0x873f, 0x6970 => 0x8737, 0x6971 => 0x873b, 0x6972 => 0x8725, 0x6973 => 0x8729, 0x6974 => 0x871a, 0x6975 => 0x8760, 0x6976 => 0x875f, 0x6977 => 0x8778, 0x6978 => 0x874c, 0x6979 => 0x874e, 0x697a => 0x8774, 0x697b => 0x8757, 0x697c => 0x8768, 0x697d => 0x876e, 0x697e => 0x8759, 0x6a21 => 0x8753, 0x6a22 => 0x8763, 0x6a23 => 0x876a, 0x6a24 => 0x8805, 0x6a25 => 0x87a2, 0x6a26 => 0x879f, 0x6a27 => 0x8782, 0x6a28 => 0x87af, 0x6a29 => 0x87cb, 0x6a2a => 0x87bd, 0x6a2b => 0x87c0, 0x6a2c => 0x87d0, 0x6a2d => 0x96d6, 0x6a2e => 0x87ab, 0x6a2f => 0x87c4, 0x6a30 => 0x87b3, 0x6a31 => 0x87c7, 0x6a32 => 0x87c6, 0x6a33 => 0x87bb, 0x6a34 => 0x87ef, 0x6a35 => 0x87f2, 0x6a36 => 0x87e0, 0x6a37 => 0x880f, 0x6a38 => 0x880d, 0x6a39 => 0x87fe, 0x6a3a => 0x87f6, 0x6a3b => 0x87f7, 0x6a3c => 0x880e, 0x6a3d => 0x87d2, 0x6a3e => 0x8811, 0x6a3f => 0x8816, 0x6a40 => 0x8815, 0x6a41 => 0x8822, 0x6a42 => 0x8821, 0x6a43 => 0x8831, 0x6a44 => 0x8836, 0x6a45 => 0x8839, 0x6a46 => 0x8827, 0x6a47 => 0x883b, 0x6a48 => 0x8844, 0x6a49 => 0x8842, 0x6a4a => 0x8852, 0x6a4b => 0x8859, 0x6a4c => 0x885e, 0x6a4d => 0x8862, 0x6a4e => 0x886b, 0x6a4f => 0x8881, 0x6a50 => 0x887e, 0x6a51 => 0x889e, 0x6a52 => 0x8875, 0x6a53 => 0x887d, 0x6a54 => 0x88b5, 0x6a55 => 0x8872, 0x6a56 => 0x8882, 0x6a57 => 0x8897, 0x6a58 => 0x8892, 0x6a59 => 0x88ae, 0x6a5a => 0x8899, 0x6a5b => 0x88a2, 0x6a5c => 0x888d, 0x6a5d => 0x88a4, 0x6a5e => 0x88b0, 0x6a5f => 0x88bf, 0x6a60 => 0x88b1, 0x6a61 => 0x88c3, 0x6a62 => 0x88c4, 0x6a63 => 0x88d4, 0x6a64 => 0x88d8, 0x6a65 => 0x88d9, 0x6a66 => 0x88dd, 0x6a67 => 0x88f9, 0x6a68 => 0x8902, 0x6a69 => 0x88fc, 0x6a6a => 0x88f4, 0x6a6b => 0x88e8, 0x6a6c => 0x88f2, 0x6a6d => 0x8904, 0x6a6e => 0x890c, 0x6a6f => 0x890a, 0x6a70 => 0x8913, 0x6a71 => 0x8943, 0x6a72 => 0x891e, 0x6a73 => 0x8925, 0x6a74 => 0x892a, 0x6a75 => 0x892b, 0x6a76 => 0x8941, 0x6a77 => 0x8944, 0x6a78 => 0x893b, 0x6a79 => 0x8936, 0x6a7a => 0x8938, 0x6a7b => 0x894c, 0x6a7c => 0x891d, 0x6a7d => 0x8960, 0x6a7e => 0x895e, 0x6b21 => 0x8966, 0x6b22 => 0x8964, 0x6b23 => 0x896d, 0x6b24 => 0x896a, 0x6b25 => 0x896f, 0x6b26 => 0x8974, 0x6b27 => 0x8977, 0x6b28 => 0x897e, 0x6b29 => 0x8983, 0x6b2a => 0x8988, 0x6b2b => 0x898a, 0x6b2c => 0x8993, 0x6b2d => 0x8998, 0x6b2e => 0x89a1, 0x6b2f => 0x89a9, 0x6b30 => 0x89a6, 0x6b31 => 0x89ac, 0x6b32 => 0x89af, 0x6b33 => 0x89b2, 0x6b34 => 0x89ba, 0x6b35 => 0x89bd, 0x6b36 => 0x89bf, 0x6b37 => 0x89c0, 0x6b38 => 0x89da, 0x6b39 => 0x89dc, 0x6b3a => 0x89dd, 0x6b3b => 0x89e7, 0x6b3c => 0x89f4, 0x6b3d => 0x89f8, 0x6b3e => 0x8a03, 0x6b3f => 0x8a16, 0x6b40 => 0x8a10, 0x6b41 => 0x8a0c, 0x6b42 => 0x8a1b, 0x6b43 => 0x8a1d, 0x6b44 => 0x8a25, 0x6b45 => 0x8a36, 0x6b46 => 0x8a41, 0x6b47 => 0x8a5b, 0x6b48 => 0x8a52, 0x6b49 => 0x8a46, 0x6b4a => 0x8a48, 0x6b4b => 0x8a7c, 0x6b4c => 0x8a6d, 0x6b4d => 0x8a6c, 0x6b4e => 0x8a62, 0x6b4f => 0x8a85, 0x6b50 => 0x8a82, 0x6b51 => 0x8a84, 0x6b52 => 0x8aa8, 0x6b53 => 0x8aa1, 0x6b54 => 0x8a91, 0x6b55 => 0x8aa5, 0x6b56 => 0x8aa6, 0x6b57 => 0x8a9a, 0x6b58 => 0x8aa3, 0x6b59 => 0x8ac4, 0x6b5a => 0x8acd, 0x6b5b => 0x8ac2, 0x6b5c => 0x8ada, 0x6b5d => 0x8aeb, 0x6b5e => 0x8af3, 0x6b5f => 0x8ae7, 0x6b60 => 0x8ae4, 0x6b61 => 0x8af1, 0x6b62 => 0x8b14, 0x6b63 => 0x8ae0, 0x6b64 => 0x8ae2, 0x6b65 => 0x8af7, 0x6b66 => 0x8ade, 0x6b67 => 0x8adb, 0x6b68 => 0x8b0c, 0x6b69 => 0x8b07, 0x6b6a => 0x8b1a, 0x6b6b => 0x8ae1, 0x6b6c => 0x8b16, 0x6b6d => 0x8b10, 0x6b6e => 0x8b17, 0x6b6f => 0x8b20, 0x6b70 => 0x8b33, 0x6b71 => 0x97ab, 0x6b72 => 0x8b26, 0x6b73 => 0x8b2b, 0x6b74 => 0x8b3e, 0x6b75 => 0x8b28, 0x6b76 => 0x8b41, 0x6b77 => 0x8b4c, 0x6b78 => 0x8b4f, 0x6b79 => 0x8b4e, 0x6b7a => 0x8b49, 0x6b7b => 0x8b56, 0x6b7c => 0x8b5b, 0x6b7d => 0x8b5a, 0x6b7e => 0x8b6b, 0x6c21 => 0x8b5f, 0x6c22 => 0x8b6c, 0x6c23 => 0x8b6f, 0x6c24 => 0x8b74, 0x6c25 => 0x8b7d, 0x6c26 => 0x8b80, 0x6c27 => 0x8b8c, 0x6c28 => 0x8b8e, 0x6c29 => 0x8b92, 0x6c2a => 0x8b93, 0x6c2b => 0x8b96, 0x6c2c => 0x8b99, 0x6c2d => 0x8b9a, 0x6c2e => 0x8c3a, 0x6c2f => 0x8c41, 0x6c30 => 0x8c3f, 0x6c31 => 0x8c48, 0x6c32 => 0x8c4c, 0x6c33 => 0x8c4e, 0x6c34 => 0x8c50, 0x6c35 => 0x8c55, 0x6c36 => 0x8c62, 0x6c37 => 0x8c6c, 0x6c38 => 0x8c78, 0x6c39 => 0x8c7a, 0x6c3a => 0x8c82, 0x6c3b => 0x8c89, 0x6c3c => 0x8c85, 0x6c3d => 0x8c8a, 0x6c3e => 0x8c8d, 0x6c3f => 0x8c8e, 0x6c40 => 0x8c94, 0x6c41 => 0x8c7c, 0x6c42 => 0x8c98, 0x6c43 => 0x621d, 0x6c44 => 0x8cad, 0x6c45 => 0x8caa, 0x6c46 => 0x8cbd, 0x6c47 => 0x8cb2, 0x6c48 => 0x8cb3, 0x6c49 => 0x8cae, 0x6c4a => 0x8cb6, 0x6c4b => 0x8cc8, 0x6c4c => 0x8cc1, 0x6c4d => 0x8ce4, 0x6c4e => 0x8ce3, 0x6c4f => 0x8cda, 0x6c50 => 0x8cfd, 0x6c51 => 0x8cfa, 0x6c52 => 0x8cfb, 0x6c53 => 0x8d04, 0x6c54 => 0x8d05, 0x6c55 => 0x8d0a, 0x6c56 => 0x8d07, 0x6c57 => 0x8d0f, 0x6c58 => 0x8d0d, 0x6c59 => 0x8d10, 0x6c5a => 0x9f4e, 0x6c5b => 0x8d13, 0x6c5c => 0x8ccd, 0x6c5d => 0x8d14, 0x6c5e => 0x8d16, 0x6c5f => 0x8d67, 0x6c60 => 0x8d6d, 0x6c61 => 0x8d71, 0x6c62 => 0x8d73, 0x6c63 => 0x8d81, 0x6c64 => 0x8d99, 0x6c65 => 0x8dc2, 0x6c66 => 0x8dbe, 0x6c67 => 0x8dba, 0x6c68 => 0x8dcf, 0x6c69 => 0x8dda, 0x6c6a => 0x8dd6, 0x6c6b => 0x8dcc, 0x6c6c => 0x8ddb, 0x6c6d => 0x8dcb, 0x6c6e => 0x8dea, 0x6c6f => 0x8deb, 0x6c70 => 0x8ddf, 0x6c71 => 0x8de3, 0x6c72 => 0x8dfc, 0x6c73 => 0x8e08, 0x6c74 => 0x8e09, 0x6c75 => 0x8dff, 0x6c76 => 0x8e1d, 0x6c77 => 0x8e1e, 0x6c78 => 0x8e10, 0x6c79 => 0x8e1f, 0x6c7a => 0x8e42, 0x6c7b => 0x8e35, 0x6c7c => 0x8e30, 0x6c7d => 0x8e34, 0x6c7e => 0x8e4a, 0x6d21 => 0x8e47, 0x6d22 => 0x8e49, 0x6d23 => 0x8e4c, 0x6d24 => 0x8e50, 0x6d25 => 0x8e48, 0x6d26 => 0x8e59, 0x6d27 => 0x8e64, 0x6d28 => 0x8e60, 0x6d29 => 0x8e2a, 0x6d2a => 0x8e63, 0x6d2b => 0x8e55, 0x6d2c => 0x8e76, 0x6d2d => 0x8e72, 0x6d2e => 0x8e7c, 0x6d2f => 0x8e81, 0x6d30 => 0x8e87, 0x6d31 => 0x8e85, 0x6d32 => 0x8e84, 0x6d33 => 0x8e8b, 0x6d34 => 0x8e8a, 0x6d35 => 0x8e93, 0x6d36 => 0x8e91, 0x6d37 => 0x8e94, 0x6d38 => 0x8e99, 0x6d39 => 0x8eaa, 0x6d3a => 0x8ea1, 0x6d3b => 0x8eac, 0x6d3c => 0x8eb0, 0x6d3d => 0x8ec6, 0x6d3e => 0x8eb1, 0x6d3f => 0x8ebe, 0x6d40 => 0x8ec5, 0x6d41 => 0x8ec8, 0x6d42 => 0x8ecb, 0x6d43 => 0x8edb, 0x6d44 => 0x8ee3, 0x6d45 => 0x8efc, 0x6d46 => 0x8efb, 0x6d47 => 0x8eeb, 0x6d48 => 0x8efe, 0x6d49 => 0x8f0a, 0x6d4a => 0x8f05, 0x6d4b => 0x8f15, 0x6d4c => 0x8f12, 0x6d4d => 0x8f19, 0x6d4e => 0x8f13, 0x6d4f => 0x8f1c, 0x6d50 => 0x8f1f, 0x6d51 => 0x8f1b, 0x6d52 => 0x8f0c, 0x6d53 => 0x8f26, 0x6d54 => 0x8f33, 0x6d55 => 0x8f3b, 0x6d56 => 0x8f39, 0x6d57 => 0x8f45, 0x6d58 => 0x8f42, 0x6d59 => 0x8f3e, 0x6d5a => 0x8f4c, 0x6d5b => 0x8f49, 0x6d5c => 0x8f46, 0x6d5d => 0x8f4e, 0x6d5e => 0x8f57, 0x6d5f => 0x8f5c, 0x6d60 => 0x8f62, 0x6d61 => 0x8f63, 0x6d62 => 0x8f64, 0x6d63 => 0x8f9c, 0x6d64 => 0x8f9f, 0x6d65 => 0x8fa3, 0x6d66 => 0x8fad, 0x6d67 => 0x8faf, 0x6d68 => 0x8fb7, 0x6d69 => 0x8fda, 0x6d6a => 0x8fe5, 0x6d6b => 0x8fe2, 0x6d6c => 0x8fea, 0x6d6d => 0x8fef, 0x6d6e => 0x9087, 0x6d6f => 0x8ff4, 0x6d70 => 0x9005, 0x6d71 => 0x8ff9, 0x6d72 => 0x8ffa, 0x6d73 => 0x9011, 0x6d74 => 0x9015, 0x6d75 => 0x9021, 0x6d76 => 0x900d, 0x6d77 => 0x901e, 0x6d78 => 0x9016, 0x6d79 => 0x900b, 0x6d7a => 0x9027, 0x6d7b => 0x9036, 0x6d7c => 0x9035, 0x6d7d => 0x9039, 0x6d7e => 0x8ff8, 0x6e21 => 0x904f, 0x6e22 => 0x9050, 0x6e23 => 0x9051, 0x6e24 => 0x9052, 0x6e25 => 0x900e, 0x6e26 => 0x9049, 0x6e27 => 0x903e, 0x6e28 => 0x9056, 0x6e29 => 0x9058, 0x6e2a => 0x905e, 0x6e2b => 0x9068, 0x6e2c => 0x906f, 0x6e2d => 0x9076, 0x6e2e => 0x96a8, 0x6e2f => 0x9072, 0x6e30 => 0x9082, 0x6e31 => 0x907d, 0x6e32 => 0x9081, 0x6e33 => 0x9080, 0x6e34 => 0x908a, 0x6e35 => 0x9089, 0x6e36 => 0x908f, 0x6e37 => 0x90a8, 0x6e38 => 0x90af, 0x6e39 => 0x90b1, 0x6e3a => 0x90b5, 0x6e3b => 0x90e2, 0x6e3c => 0x90e4, 0x6e3d => 0x6248, 0x6e3e => 0x90db, 0x6e3f => 0x9102, 0x6e40 => 0x9112, 0x6e41 => 0x9119, 0x6e42 => 0x9132, 0x6e43 => 0x9130, 0x6e44 => 0x914a, 0x6e45 => 0x9156, 0x6e46 => 0x9158, 0x6e47 => 0x9163, 0x6e48 => 0x9165, 0x6e49 => 0x9169, 0x6e4a => 0x9173, 0x6e4b => 0x9172, 0x6e4c => 0x918b, 0x6e4d => 0x9189, 0x6e4e => 0x9182, 0x6e4f => 0x91a2, 0x6e50 => 0x91ab, 0x6e51 => 0x91af, 0x6e52 => 0x91aa, 0x6e53 => 0x91b5, 0x6e54 => 0x91b4, 0x6e55 => 0x91ba, 0x6e56 => 0x91c0, 0x6e57 => 0x91c1, 0x6e58 => 0x91c9, 0x6e59 => 0x91cb, 0x6e5a => 0x91d0, 0x6e5b => 0x91d6, 0x6e5c => 0x91df, 0x6e5d => 0x91e1, 0x6e5e => 0x91db, 0x6e5f => 0x91fc, 0x6e60 => 0x91f5, 0x6e61 => 0x91f6, 0x6e62 => 0x921e, 0x6e63 => 0x91ff, 0x6e64 => 0x9214, 0x6e65 => 0x922c, 0x6e66 => 0x9215, 0x6e67 => 0x9211, 0x6e68 => 0x925e, 0x6e69 => 0x9257, 0x6e6a => 0x9245, 0x6e6b => 0x9249, 0x6e6c => 0x9264, 0x6e6d => 0x9248, 0x6e6e => 0x9295, 0x6e6f => 0x923f, 0x6e70 => 0x924b, 0x6e71 => 0x9250, 0x6e72 => 0x929c, 0x6e73 => 0x9296, 0x6e74 => 0x9293, 0x6e75 => 0x929b, 0x6e76 => 0x925a, 0x6e77 => 0x92cf, 0x6e78 => 0x92b9, 0x6e79 => 0x92b7, 0x6e7a => 0x92e9, 0x6e7b => 0x930f, 0x6e7c => 0x92fa, 0x6e7d => 0x9344, 0x6e7e => 0x932e, 0x6f21 => 0x9319, 0x6f22 => 0x9322, 0x6f23 => 0x931a, 0x6f24 => 0x9323, 0x6f25 => 0x933a, 0x6f26 => 0x9335, 0x6f27 => 0x933b, 0x6f28 => 0x935c, 0x6f29 => 0x9360, 0x6f2a => 0x937c, 0x6f2b => 0x936e, 0x6f2c => 0x9356, 0x6f2d => 0x93b0, 0x6f2e => 0x93ac, 0x6f2f => 0x93ad, 0x6f30 => 0x9394, 0x6f31 => 0x93b9, 0x6f32 => 0x93d6, 0x6f33 => 0x93d7, 0x6f34 => 0x93e8, 0x6f35 => 0x93e5, 0x6f36 => 0x93d8, 0x6f37 => 0x93c3, 0x6f38 => 0x93dd, 0x6f39 => 0x93d0, 0x6f3a => 0x93c8, 0x6f3b => 0x93e4, 0x6f3c => 0x941a, 0x6f3d => 0x9414, 0x6f3e => 0x9413, 0x6f3f => 0x9403, 0x6f40 => 0x9407, 0x6f41 => 0x9410, 0x6f42 => 0x9436, 0x6f43 => 0x942b, 0x6f44 => 0x9435, 0x6f45 => 0x9421, 0x6f46 => 0x943a, 0x6f47 => 0x9441, 0x6f48 => 0x9452, 0x6f49 => 0x9444, 0x6f4a => 0x945b, 0x6f4b => 0x9460, 0x6f4c => 0x9462, 0x6f4d => 0x945e, 0x6f4e => 0x946a, 0x6f4f => 0x9229, 0x6f50 => 0x9470, 0x6f51 => 0x9475, 0x6f52 => 0x9477, 0x6f53 => 0x947d, 0x6f54 => 0x945a, 0x6f55 => 0x947c, 0x6f56 => 0x947e, 0x6f57 => 0x9481, 0x6f58 => 0x947f, 0x6f59 => 0x9582, 0x6f5a => 0x9587, 0x6f5b => 0x958a, 0x6f5c => 0x9594, 0x6f5d => 0x9596, 0x6f5e => 0x9598, 0x6f5f => 0x9599, 0x6f60 => 0x95a0, 0x6f61 => 0x95a8, 0x6f62 => 0x95a7, 0x6f63 => 0x95ad, 0x6f64 => 0x95bc, 0x6f65 => 0x95bb, 0x6f66 => 0x95b9, 0x6f67 => 0x95be, 0x6f68 => 0x95ca, 0x6f69 => 0x6ff6, 0x6f6a => 0x95c3, 0x6f6b => 0x95cd, 0x6f6c => 0x95cc, 0x6f6d => 0x95d5, 0x6f6e => 0x95d4, 0x6f6f => 0x95d6, 0x6f70 => 0x95dc, 0x6f71 => 0x95e1, 0x6f72 => 0x95e5, 0x6f73 => 0x95e2, 0x6f74 => 0x9621, 0x6f75 => 0x9628, 0x6f76 => 0x962e, 0x6f77 => 0x962f, 0x6f78 => 0x9642, 0x6f79 => 0x964c, 0x6f7a => 0x964f, 0x6f7b => 0x964b, 0x6f7c => 0x9677, 0x6f7d => 0x965c, 0x6f7e => 0x965e, 0x7021 => 0x965d, 0x7022 => 0x965f, 0x7023 => 0x9666, 0x7024 => 0x9672, 0x7025 => 0x966c, 0x7026 => 0x968d, 0x7027 => 0x9698, 0x7028 => 0x9695, 0x7029 => 0x9697, 0x702a => 0x96aa, 0x702b => 0x96a7, 0x702c => 0x96b1, 0x702d => 0x96b2, 0x702e => 0x96b0, 0x702f => 0x96b4, 0x7030 => 0x96b6, 0x7031 => 0x96b8, 0x7032 => 0x96b9, 0x7033 => 0x96ce, 0x7034 => 0x96cb, 0x7035 => 0x96c9, 0x7036 => 0x96cd, 0x7037 => 0x894d, 0x7038 => 0x96dc, 0x7039 => 0x970d, 0x703a => 0x96d5, 0x703b => 0x96f9, 0x703c => 0x9704, 0x703d => 0x9706, 0x703e => 0x9708, 0x703f => 0x9713, 0x7040 => 0x970e, 0x7041 => 0x9711, 0x7042 => 0x970f, 0x7043 => 0x9716, 0x7044 => 0x9719, 0x7045 => 0x9724, 0x7046 => 0x972a, 0x7047 => 0x9730, 0x7048 => 0x9739, 0x7049 => 0x973d, 0x704a => 0x973e, 0x704b => 0x9744, 0x704c => 0x9746, 0x704d => 0x9748, 0x704e => 0x9742, 0x704f => 0x9749, 0x7050 => 0x975c, 0x7051 => 0x9760, 0x7052 => 0x9764, 0x7053 => 0x9766, 0x7054 => 0x9768, 0x7055 => 0x52d2, 0x7056 => 0x976b, 0x7057 => 0x9771, 0x7058 => 0x9779, 0x7059 => 0x9785, 0x705a => 0x977c, 0x705b => 0x9781, 0x705c => 0x977a, 0x705d => 0x9786, 0x705e => 0x978b, 0x705f => 0x978f, 0x7060 => 0x9790, 0x7061 => 0x979c, 0x7062 => 0x97a8, 0x7063 => 0x97a6, 0x7064 => 0x97a3, 0x7065 => 0x97b3, 0x7066 => 0x97b4, 0x7067 => 0x97c3, 0x7068 => 0x97c6, 0x7069 => 0x97c8, 0x706a => 0x97cb, 0x706b => 0x97dc, 0x706c => 0x97ed, 0x706d => 0x9f4f, 0x706e => 0x97f2, 0x706f => 0x7adf, 0x7070 => 0x97f6, 0x7071 => 0x97f5, 0x7072 => 0x980f, 0x7073 => 0x980c, 0x7074 => 0x9838, 0x7075 => 0x9824, 0x7076 => 0x9821, 0x7077 => 0x9837, 0x7078 => 0x983d, 0x7079 => 0x9846, 0x707a => 0x984f, 0x707b => 0x984b, 0x707c => 0x986b, 0x707d => 0x986f, 0x707e => 0x9870, 0x7121 => 0x9871, 0x7122 => 0x9874, 0x7123 => 0x9873, 0x7124 => 0x98aa, 0x7125 => 0x98af, 0x7126 => 0x98b1, 0x7127 => 0x98b6, 0x7128 => 0x98c4, 0x7129 => 0x98c3, 0x712a => 0x98c6, 0x712b => 0x98e9, 0x712c => 0x98eb, 0x712d => 0x9903, 0x712e => 0x9909, 0x712f => 0x9912, 0x7130 => 0x9914, 0x7131 => 0x9918, 0x7132 => 0x9921, 0x7133 => 0x991d, 0x7134 => 0x991e, 0x7135 => 0x9924, 0x7136 => 0x9920, 0x7137 => 0x992c, 0x7138 => 0x992e, 0x7139 => 0x993d, 0x713a => 0x993e, 0x713b => 0x9942, 0x713c => 0x9949, 0x713d => 0x9945, 0x713e => 0x9950, 0x713f => 0x994b, 0x7140 => 0x9951, 0x7141 => 0x9952, 0x7142 => 0x994c, 0x7143 => 0x9955, 0x7144 => 0x9997, 0x7145 => 0x9998, 0x7146 => 0x99a5, 0x7147 => 0x99ad, 0x7148 => 0x99ae, 0x7149 => 0x99bc, 0x714a => 0x99df, 0x714b => 0x99db, 0x714c => 0x99dd, 0x714d => 0x99d8, 0x714e => 0x99d1, 0x714f => 0x99ed, 0x7150 => 0x99ee, 0x7151 => 0x99f1, 0x7152 => 0x99f2, 0x7153 => 0x99fb, 0x7154 => 0x99f8, 0x7155 => 0x9a01, 0x7156 => 0x9a0f, 0x7157 => 0x9a05, 0x7158 => 0x99e2, 0x7159 => 0x9a19, 0x715a => 0x9a2b, 0x715b => 0x9a37, 0x715c => 0x9a45, 0x715d => 0x9a42, 0x715e => 0x9a40, 0x715f => 0x9a43, 0x7160 => 0x9a3e, 0x7161 => 0x9a55, 0x7162 => 0x9a4d, 0x7163 => 0x9a5b, 0x7164 => 0x9a57, 0x7165 => 0x9a5f, 0x7166 => 0x9a62, 0x7167 => 0x9a65, 0x7168 => 0x9a64, 0x7169 => 0x9a69, 0x716a => 0x9a6b, 0x716b => 0x9a6a, 0x716c => 0x9aad, 0x716d => 0x9ab0, 0x716e => 0x9abc, 0x716f => 0x9ac0, 0x7170 => 0x9acf, 0x7171 => 0x9ad1, 0x7172 => 0x9ad3, 0x7173 => 0x9ad4, 0x7174 => 0x9ade, 0x7175 => 0x9adf, 0x7176 => 0x9ae2, 0x7177 => 0x9ae3, 0x7178 => 0x9ae6, 0x7179 => 0x9aef, 0x717a => 0x9aeb, 0x717b => 0x9aee, 0x717c => 0x9af4, 0x717d => 0x9af1, 0x717e => 0x9af7, 0x7221 => 0x9afb, 0x7222 => 0x9b06, 0x7223 => 0x9b18, 0x7224 => 0x9b1a, 0x7225 => 0x9b1f, 0x7226 => 0x9b22, 0x7227 => 0x9b23, 0x7228 => 0x9b25, 0x7229 => 0x9b27, 0x722a => 0x9b28, 0x722b => 0x9b29, 0x722c => 0x9b2a, 0x722d => 0x9b2e, 0x722e => 0x9b2f, 0x722f => 0x9b32, 0x7230 => 0x9b44, 0x7231 => 0x9b43, 0x7232 => 0x9b4f, 0x7233 => 0x9b4d, 0x7234 => 0x9b4e, 0x7235 => 0x9b51, 0x7236 => 0x9b58, 0x7237 => 0x9b74, 0x7238 => 0x9b93, 0x7239 => 0x9b83, 0x723a => 0x9b91, 0x723b => 0x9b96, 0x723c => 0x9b97, 0x723d => 0x9b9f, 0x723e => 0x9ba0, 0x723f => 0x9ba8, 0x7240 => 0x9bb4, 0x7241 => 0x9bc0, 0x7242 => 0x9bca, 0x7243 => 0x9bb9, 0x7244 => 0x9bc6, 0x7245 => 0x9bcf, 0x7246 => 0x9bd1, 0x7247 => 0x9bd2, 0x7248 => 0x9be3, 0x7249 => 0x9be2, 0x724a => 0x9be4, 0x724b => 0x9bd4, 0x724c => 0x9be1, 0x724d => 0x9c3a, 0x724e => 0x9bf2, 0x724f => 0x9bf1, 0x7250 => 0x9bf0, 0x7251 => 0x9c15, 0x7252 => 0x9c14, 0x7253 => 0x9c09, 0x7254 => 0x9c13, 0x7255 => 0x9c0c, 0x7256 => 0x9c06, 0x7257 => 0x9c08, 0x7258 => 0x9c12, 0x7259 => 0x9c0a, 0x725a => 0x9c04, 0x725b => 0x9c2e, 0x725c => 0x9c1b, 0x725d => 0x9c25, 0x725e => 0x9c24, 0x725f => 0x9c21, 0x7260 => 0x9c30, 0x7261 => 0x9c47, 0x7262 => 0x9c32, 0x7263 => 0x9c46, 0x7264 => 0x9c3e, 0x7265 => 0x9c5a, 0x7266 => 0x9c60, 0x7267 => 0x9c67, 0x7268 => 0x9c76, 0x7269 => 0x9c78, 0x726a => 0x9ce7, 0x726b => 0x9cec, 0x726c => 0x9cf0, 0x726d => 0x9d09, 0x726e => 0x9d08, 0x726f => 0x9ceb, 0x7270 => 0x9d03, 0x7271 => 0x9d06, 0x7272 => 0x9d2a, 0x7273 => 0x9d26, 0x7274 => 0x9daf, 0x7275 => 0x9d23, 0x7276 => 0x9d1f, 0x7277 => 0x9d44, 0x7278 => 0x9d15, 0x7279 => 0x9d12, 0x727a => 0x9d41, 0x727b => 0x9d3f, 0x727c => 0x9d3e, 0x727d => 0x9d46, 0x727e => 0x9d48, 0x7321 => 0x9d5d, 0x7322 => 0x9d5e, 0x7323 => 0x9d64, 0x7324 => 0x9d51, 0x7325 => 0x9d50, 0x7326 => 0x9d59, 0x7327 => 0x9d72, 0x7328 => 0x9d89, 0x7329 => 0x9d87, 0x732a => 0x9dab, 0x732b => 0x9d6f, 0x732c => 0x9d7a, 0x732d => 0x9d9a, 0x732e => 0x9da4, 0x732f => 0x9da9, 0x7330 => 0x9db2, 0x7331 => 0x9dc4, 0x7332 => 0x9dc1, 0x7333 => 0x9dbb, 0x7334 => 0x9db8, 0x7335 => 0x9dba, 0x7336 => 0x9dc6, 0x7337 => 0x9dcf, 0x7338 => 0x9dc2, 0x7339 => 0x9dd9, 0x733a => 0x9dd3, 0x733b => 0x9df8, 0x733c => 0x9de6, 0x733d => 0x9ded, 0x733e => 0x9def, 0x733f => 0x9dfd, 0x7340 => 0x9e1a, 0x7341 => 0x9e1b, 0x7342 => 0x9e1e, 0x7343 => 0x9e75, 0x7344 => 0x9e79, 0x7345 => 0x9e7d, 0x7346 => 0x9e81, 0x7347 => 0x9e88, 0x7348 => 0x9e8b, 0x7349 => 0x9e8c, 0x734a => 0x9e92, 0x734b => 0x9e95, 0x734c => 0x9e91, 0x734d => 0x9e9d, 0x734e => 0x9ea5, 0x734f => 0x9ea9, 0x7350 => 0x9eb8, 0x7351 => 0x9eaa, 0x7352 => 0x9ead, 0x7353 => 0x9761, 0x7354 => 0x9ecc, 0x7355 => 0x9ece, 0x7356 => 0x9ecf, 0x7357 => 0x9ed0, 0x7358 => 0x9ed4, 0x7359 => 0x9edc, 0x735a => 0x9ede, 0x735b => 0x9edd, 0x735c => 0x9ee0, 0x735d => 0x9ee5, 0x735e => 0x9ee8, 0x735f => 0x9eef, 0x7360 => 0x9ef4, 0x7361 => 0x9ef6, 0x7362 => 0x9ef7, 0x7363 => 0x9ef9, 0x7364 => 0x9efb, 0x7365 => 0x9efc, 0x7366 => 0x9efd, 0x7367 => 0x9f07, 0x7368 => 0x9f08, 0x7369 => 0x76b7, 0x736a => 0x9f15, 0x736b => 0x9f21, 0x736c => 0x9f2c, 0x736d => 0x9f3e, 0x736e => 0x9f4a, 0x736f => 0x9f52, 0x7370 => 0x9f54, 0x7371 => 0x9f63, 0x7372 => 0x9f5f, 0x7373 => 0x9f60, 0x7374 => 0x9f61, 0x7375 => 0x9f66, 0x7376 => 0x9f67, 0x7377 => 0x9f6c, 0x7378 => 0x9f6a, 0x7379 => 0x9f77, 0x737a => 0x9f72, 0x737b => 0x9f76, 0x737c => 0x9f95, 0x737d => 0x9f9c, 0x737e => 0x9fa0, 0x7421 => 0x582f, 0x7422 => 0x69c7, 0x7423 => 0x9059, 0x7424 => 0x7464, 0x7425 => 0x51dc, 0x7426 => 0x7199, ); 1; # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/Latin.pm��������������������������������������������000644 �000765 �000024 �00000001671 11417362674 022722� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Latin.pm # # Description: cp1252 to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::Latin = ( 0x80 => 0x20ac, 0x82 => 0x201a, 0x83 => 0x0192, 0x84 => 0x201e, 0x85 => 0x2026, 0x86 => 0x2020, 0x87 => 0x2021, 0x88 => 0x02c6, 0x89 => 0x2030, 0x8a => 0x0160, 0x8b => 0x2039, 0x8c => 0x0152, 0x8e => 0x017d, 0x91 => 0x2018, 0x92 => 0x2019, 0x93 => 0x201c, 0x94 => 0x201d, 0x95 => 0x2022, 0x96 => 0x2013, 0x97 => 0x2014, 0x98 => 0x02dc, 0x99 => 0x2122, 0x9a => 0x0161, 0x9b => 0x203a, 0x9c => 0x0153, 0x9e => 0x017e, 0x9f => 0x0178, ); 1; # end �����������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/Latin2.pm�������������������������������������������000644 �000765 �000024 �00000003303 11417362674 022776� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Latin2.pm # # Description: cp1250 to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1250.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::Latin2 = ( 0x80 => 0x20ac, 0x82 => 0x201a, 0x84 => 0x201e, 0x85 => 0x2026, 0x86 => 0x2020, 0x87 => 0x2021, 0x89 => 0x2030, 0x8a => 0x0160, 0x8b => 0x2039, 0x8c => 0x015a, 0x8d => 0x0164, 0x8e => 0x017d, 0x8f => 0x0179, 0x91 => 0x2018, 0x92 => 0x2019, 0x93 => 0x201c, 0x94 => 0x201d, 0x95 => 0x2022, 0x96 => 0x2013, 0x97 => 0x2014, 0x99 => 0x2122, 0x9a => 0x0161, 0x9b => 0x203a, 0x9c => 0x015b, 0x9d => 0x0165, 0x9e => 0x017e, 0x9f => 0x017a, 0xa1 => 0x02c7, 0xa2 => 0x02d8, 0xa3 => 0x0141, 0xa5 => 0x0104, 0xaa => 0x015e, 0xaf => 0x017b, 0xb2 => 0x02db, 0xb3 => 0x0142, 0xb9 => 0x0105, 0xba => 0x015f, 0xbc => 0x013d, 0xbd => 0x02dd, 0xbe => 0x013e, 0xbf => 0x017c, 0xc0 => 0x0154, 0xc3 => 0x0102, 0xc5 => 0x0139, 0xc6 => 0x0106, 0xc8 => 0x010c, 0xca => 0x0118, 0xcc => 0x011a, 0xcf => 0x010e, 0xd0 => 0x0110, 0xd1 => 0x0143, 0xd2 => 0x0147, 0xd5 => 0x0150, 0xd8 => 0x0158, 0xd9 => 0x016e, 0xdb => 0x0170, 0xde => 0x0162, 0xe0 => 0x0155, 0xe3 => 0x0103, 0xe5 => 0x013a, 0xe6 => 0x0107, 0xe8 => 0x010d, 0xea => 0x0119, 0xec => 0x011b, 0xef => 0x010f, 0xf0 => 0x0111, 0xf1 => 0x0144, 0xf2 => 0x0148, 0xf5 => 0x0151, 0xf8 => 0x0159, 0xf9 => 0x016f, 0xfb => 0x0171, 0xfe => 0x0163, 0xff => 0x02d9, ); 1; # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacArabic.pm����������������������������������������000644 �000765 �000024 �00000004777 11417362674 023467� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacArabic.pm # # Description: Mac Arabic to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/ARABIC.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode # and directional characters are ignored #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacArabic = ( 0x80 => 0xc4, 0x81 => 0xa0, 0x82 => 0xc7, 0x83 => 0xc9, 0x84 => 0xd1, 0x85 => 0xd6, 0x86 => 0xdc, 0x87 => 0xe1, 0x88 => 0xe0, 0x89 => 0xe2, 0x8a => 0xe4, 0x8b => 0x06ba, 0x8c => 0xab, 0x8d => 0xe7, 0x8e => 0xe9, 0x8f => 0xe8, 0x90 => 0xea, 0x91 => 0xeb, 0x92 => 0xed, 0x93 => 0x2026, 0x94 => 0xee, 0x95 => 0xef, 0x96 => 0xf1, 0x97 => 0xf3, 0x98 => 0xbb, 0x99 => 0xf4, 0x9a => 0xf6, 0x9b => 0xf7, 0x9c => 0xfa, 0x9d => 0xf9, 0x9e => 0xfb, 0x9f => 0xfc, 0xa0 => 0x20, 0xa1 => 0x21, 0xa2 => 0x22, 0xa3 => 0x23, 0xa4 => 0x24, 0xa5 => 0x066a, 0xa6 => 0x26, 0xa7 => 0x27, 0xa8 => 0x28, 0xa9 => 0x29, 0xaa => 0x2a, 0xab => 0x2b, 0xac => 0x060c, 0xad => 0x2d, 0xae => 0x2e, 0xaf => 0x2f, 0xb0 => 0x0660, 0xb1 => 0x0661, 0xb2 => 0x0662, 0xb3 => 0x0663, 0xb4 => 0x0664, 0xb5 => 0x0665, 0xb6 => 0x0666, 0xb7 => 0x0667, 0xb8 => 0x0668, 0xb9 => 0x0669, 0xba => 0x3a, 0xbb => 0x061b, 0xbc => 0x3c, 0xbd => 0x3d, 0xbe => 0x3e, 0xbf => 0x061f, 0xc0 => 0x274a, 0xc1 => 0x0621, 0xc2 => 0x0622, 0xc3 => 0x0623, 0xc4 => 0x0624, 0xc5 => 0x0625, 0xc6 => 0x0626, 0xc7 => 0x0627, 0xc8 => 0x0628, 0xc9 => 0x0629, 0xca => 0x062a, 0xcb => 0x062b, 0xcc => 0x062c, 0xcd => 0x062d, 0xce => 0x062e, 0xcf => 0x062f, 0xd0 => 0x0630, 0xd1 => 0x0631, 0xd2 => 0x0632, 0xd3 => 0x0633, 0xd4 => 0x0634, 0xd5 => 0x0635, 0xd6 => 0x0636, 0xd7 => 0x0637, 0xd8 => 0x0638, 0xd9 => 0x0639, 0xda => 0x063a, 0xdb => 0x5b, 0xdc => 0x5c, 0xdd => 0x5d, 0xde => 0x5e, 0xdf => 0x5f, 0xe0 => 0x0640, 0xe1 => 0x0641, 0xe2 => 0x0642, 0xe3 => 0x0643, 0xe4 => 0x0644, 0xe5 => 0x0645, 0xe6 => 0x0646, 0xe7 => 0x0647, 0xe8 => 0x0648, 0xe9 => 0x0649, 0xea => 0x064a, 0xeb => 0x064b, 0xec => 0x064c, 0xed => 0x064d, 0xee => 0x064e, 0xef => 0x064f, 0xf0 => 0x0650, 0xf1 => 0x0651, 0xf2 => 0x0652, 0xf3 => 0x067e, 0xf4 => 0x0679, 0xf5 => 0x0686, 0xf6 => 0x06d5, 0xf7 => 0x06a4, 0xf8 => 0x06af, 0xf9 => 0x0688, 0xfa => 0x0691, 0xfb => 0x7b, 0xfc => 0x7c, 0xfd => 0x7d, 0xfe => 0x0698, 0xff => 0x06d2, ); 1; # end �Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacChineseCN.pm�������������������������������������000644 �000765 �000024 �00000374524 11417362674 024105� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacChineseCN.pm # # Description: Mac Chinese Simplified to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/CHINSIMP.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacChineseCN = ( 0x80 => [0xfc,0xf87f], 0x81 => 0xf880, 0x82 => 0xf881, 0xfd => 0xa9, 0xfe => 0x2122, 0xff => 0x2026, 0xa1 => { 0xa1 => 0x3000, 0xa2 => 0x3001, 0xa3 => 0x3002, 0xa4 => 0xb7, 0xa5 => 0x02c9, 0xa6 => 0x02c7, 0xa7 => 0xa8, 0xa8 => 0x3003, 0xa9 => 0x3005, 0xaa => 0x2014, 0xab => 0x301c, 0xac => 0x2016, 0xad => 0x22ef, 0xae => 0x2018, 0xaf => 0x2019, 0xb0 => 0x201c, 0xb1 => 0x201d, 0xb2 => 0x3014, 0xb3 => 0x3015, 0xb4 => 0x3008, 0xb5 => 0x3009, 0xb6 => 0x300a, 0xb7 => 0x300b, 0xb8 => 0x300c, 0xb9 => 0x300d, 0xba => 0x300e, 0xbb => 0x300f, 0xbc => 0x3016, 0xbd => 0x3017, 0xbe => 0x3010, 0xbf => 0x3011, 0xc0 => 0xb1, 0xc1 => 0xd7, 0xc2 => 0xf7, 0xc3 => 0x2236, 0xc4 => 0x2227, 0xc5 => 0x2228, 0xc6 => 0x2211, 0xc7 => 0x220f, 0xc8 => 0x222a, 0xc9 => 0x2229, 0xca => 0x2208, 0xcb => 0x2237, 0xcc => 0x221a, 0xcd => 0x22a5, 0xce => 0x2225, 0xcf => 0x2220, 0xd0 => 0x2312, 0xd1 => 0x2299, 0xd2 => 0x222b, 0xd3 => 0x222e, 0xd4 => 0x2261, 0xd5 => 0x224c, 0xd6 => 0x2248, 0xd7 => 0x223d, 0xd8 => 0x221d, 0xd9 => 0x2260, 0xda => 0x226e, 0xdb => 0x226f, 0xdc => 0x2264, 0xdd => 0x2265, 0xde => 0x221e, 0xdf => 0x2235, 0xe0 => 0x2234, 0xe1 => 0x2642, 0xe2 => 0x2640, 0xe3 => 0xb0, 0xe4 => 0x2032, 0xe5 => 0x2033, 0xe6 => 0x2103, 0xe7 => 0xff04, 0xe8 => 0xa4, 0xe9 => 0xa2, 0xea => 0xa3, 0xeb => 0x2030, 0xec => 0xa7, 0xed => 0x2116, 0xee => 0x2606, 0xef => 0x2605, 0xf0 => 0x25cb, 0xf1 => 0x25cf, 0xf2 => 0x25ce, 0xf3 => 0x25c7, 0xf4 => 0x25c6, 0xf5 => 0x25a1, 0xf6 => 0x25a0, 0xf7 => 0x25b3, 0xf8 => 0x25b2, 0xf9 => 0x203b, 0xfa => 0x2192, 0xfb => 0x2190, 0xfc => 0x2191, 0xfd => 0x2193, 0xfe => 0x3013, }, 0xa2 => { 0xb1 => 0x2488, 0xb2 => 0x2489, 0xb3 => 0x248a, 0xb4 => 0x248b, 0xb5 => 0x248c, 0xb6 => 0x248d, 0xb7 => 0x248e, 0xb8 => 0x248f, 0xb9 => 0x2490, 0xba => 0x2491, 0xbb => 0x2492, 0xbc => 0x2493, 0xbd => 0x2494, 0xbe => 0x2495, 0xbf => 0x2496, 0xc0 => 0x2497, 0xc1 => 0x2498, 0xc2 => 0x2499, 0xc3 => 0x249a, 0xc4 => 0x249b, 0xc5 => 0x2474, 0xc6 => 0x2475, 0xc7 => 0x2476, 0xc8 => 0x2477, 0xc9 => 0x2478, 0xca => 0x2479, 0xcb => 0x247a, 0xcc => 0x247b, 0xcd => 0x247c, 0xce => 0x247d, 0xcf => 0x247e, 0xd0 => 0x247f, 0xd1 => 0x2480, 0xd2 => 0x2481, 0xd3 => 0x2482, 0xd4 => 0x2483, 0xd5 => 0x2484, 0xd6 => 0x2485, 0xd7 => 0x2486, 0xd8 => 0x2487, 0xd9 => 0x2460, 0xda => 0x2461, 0xdb => 0x2462, 0xdc => 0x2463, 0xdd => 0x2464, 0xde => 0x2465, 0xdf => 0x2466, 0xe0 => 0x2467, 0xe1 => 0x2468, 0xe2 => 0x2469, 0xe5 => 0x3220, 0xe6 => 0x3221, 0xe7 => 0x3222, 0xe8 => 0x3223, 0xe9 => 0x3224, 0xea => 0x3225, 0xeb => 0x3226, 0xec => 0x3227, 0xed => 0x3228, 0xee => 0x3229, 0xf1 => 0x2160, 0xf2 => 0x2161, 0xf3 => 0x2162, 0xf4 => 0x2163, 0xf5 => 0x2164, 0xf6 => 0x2165, 0xf7 => 0x2166, 0xf8 => 0x2167, 0xf9 => 0x2168, 0xfa => 0x2169, 0xfb => 0x216a, 0xfc => 0x216b, }, 0xa3 => { 0xa1 => 0xff01, 0xa2 => 0xff02, 0xa3 => 0xff03, 0xa4 => 0xa5, 0xa5 => 0xff05, 0xa6 => 0xff06, 0xa7 => 0xff07, 0xa8 => 0xff08, 0xa9 => 0xff09, 0xaa => 0xff0a, 0xab => 0xff0b, 0xac => 0xff0c, 0xad => 0xff0d, 0xae => 0xff0e, 0xaf => 0xff0f, 0xb0 => 0xff10, 0xb1 => 0xff11, 0xb2 => 0xff12, 0xb3 => 0xff13, 0xb4 => 0xff14, 0xb5 => 0xff15, 0xb6 => 0xff16, 0xb7 => 0xff17, 0xb8 => 0xff18, 0xb9 => 0xff19, 0xba => 0xff1a, 0xbb => 0xff1b, 0xbc => 0xff1c, 0xbd => 0xff1d, 0xbe => 0xff1e, 0xbf => 0xff1f, 0xc0 => 0xff20, 0xc1 => 0xff21, 0xc2 => 0xff22, 0xc3 => 0xff23, 0xc4 => 0xff24, 0xc5 => 0xff25, 0xc6 => 0xff26, 0xc7 => 0xff27, 0xc8 => 0xff28, 0xc9 => 0xff29, 0xca => 0xff2a, 0xcb => 0xff2b, 0xcc => 0xff2c, 0xcd => 0xff2d, 0xce => 0xff2e, 0xcf => 0xff2f, 0xd0 => 0xff30, 0xd1 => 0xff31, 0xd2 => 0xff32, 0xd3 => 0xff33, 0xd4 => 0xff34, 0xd5 => 0xff35, 0xd6 => 0xff36, 0xd7 => 0xff37, 0xd8 => 0xff38, 0xd9 => 0xff39, 0xda => 0xff3a, 0xdb => 0xff3b, 0xdc => 0xff3c, 0xdd => 0xff3d, 0xde => 0xff3e, 0xdf => 0xff3f, 0xe0 => 0xff40, 0xe1 => 0xff41, 0xe2 => 0xff42, 0xe3 => 0xff43, 0xe4 => 0xff44, 0xe5 => 0xff45, 0xe6 => 0xff46, 0xe7 => 0xff47, 0xe8 => 0xff48, 0xe9 => 0xff49, 0xea => 0xff4a, 0xeb => 0xff4b, 0xec => 0xff4c, 0xed => 0xff4d, 0xee => 0xff4e, 0xef => 0xff4f, 0xf0 => 0xff50, 0xf1 => 0xff51, 0xf2 => 0xff52, 0xf3 => 0xff53, 0xf4 => 0xff54, 0xf5 => 0xff55, 0xf6 => 0xff56, 0xf7 => 0xff57, 0xf8 => 0xff58, 0xf9 => 0xff59, 0xfa => 0xff5a, 0xfb => 0xff5b, 0xfc => 0xff5c, 0xfd => 0xff5d, 0xfe => 0x203e, }, 0xa4 => { 0xa1 => 0x3041, 0xa2 => 0x3042, 0xa3 => 0x3043, 0xa4 => 0x3044, 0xa5 => 0x3045, 0xa6 => 0x3046, 0xa7 => 0x3047, 0xa8 => 0x3048, 0xa9 => 0x3049, 0xaa => 0x304a, 0xab => 0x304b, 0xac => 0x304c, 0xad => 0x304d, 0xae => 0x304e, 0xaf => 0x304f, 0xb0 => 0x3050, 0xb1 => 0x3051, 0xb2 => 0x3052, 0xb3 => 0x3053, 0xb4 => 0x3054, 0xb5 => 0x3055, 0xb6 => 0x3056, 0xb7 => 0x3057, 0xb8 => 0x3058, 0xb9 => 0x3059, 0xba => 0x305a, 0xbb => 0x305b, 0xbc => 0x305c, 0xbd => 0x305d, 0xbe => 0x305e, 0xbf => 0x305f, 0xc0 => 0x3060, 0xc1 => 0x3061, 0xc2 => 0x3062, 0xc3 => 0x3063, 0xc4 => 0x3064, 0xc5 => 0x3065, 0xc6 => 0x3066, 0xc7 => 0x3067, 0xc8 => 0x3068, 0xc9 => 0x3069, 0xca => 0x306a, 0xcb => 0x306b, 0xcc => 0x306c, 0xcd => 0x306d, 0xce => 0x306e, 0xcf => 0x306f, 0xd0 => 0x3070, 0xd1 => 0x3071, 0xd2 => 0x3072, 0xd3 => 0x3073, 0xd4 => 0x3074, 0xd5 => 0x3075, 0xd6 => 0x3076, 0xd7 => 0x3077, 0xd8 => 0x3078, 0xd9 => 0x3079, 0xda => 0x307a, 0xdb => 0x307b, 0xdc => 0x307c, 0xdd => 0x307d, 0xde => 0x307e, 0xdf => 0x307f, 0xe0 => 0x3080, 0xe1 => 0x3081, 0xe2 => 0x3082, 0xe3 => 0x3083, 0xe4 => 0x3084, 0xe5 => 0x3085, 0xe6 => 0x3086, 0xe7 => 0x3087, 0xe8 => 0x3088, 0xe9 => 0x3089, 0xea => 0x308a, 0xeb => 0x308b, 0xec => 0x308c, 0xed => 0x308d, 0xee => 0x308e, 0xef => 0x308f, 0xf0 => 0x3090, 0xf1 => 0x3091, 0xf2 => 0x3092, 0xf3 => 0x3093, }, 0xa5 => { 0xa1 => 0x30a1, 0xa2 => 0x30a2, 0xa3 => 0x30a3, 0xa4 => 0x30a4, 0xa5 => 0x30a5, 0xa6 => 0x30a6, 0xa7 => 0x30a7, 0xa8 => 0x30a8, 0xa9 => 0x30a9, 0xaa => 0x30aa, 0xab => 0x30ab, 0xac => 0x30ac, 0xad => 0x30ad, 0xae => 0x30ae, 0xaf => 0x30af, 0xb0 => 0x30b0, 0xb1 => 0x30b1, 0xb2 => 0x30b2, 0xb3 => 0x30b3, 0xb4 => 0x30b4, 0xb5 => 0x30b5, 0xb6 => 0x30b6, 0xb7 => 0x30b7, 0xb8 => 0x30b8, 0xb9 => 0x30b9, 0xba => 0x30ba, 0xbb => 0x30bb, 0xbc => 0x30bc, 0xbd => 0x30bd, 0xbe => 0x30be, 0xbf => 0x30bf, 0xc0 => 0x30c0, 0xc1 => 0x30c1, 0xc2 => 0x30c2, 0xc3 => 0x30c3, 0xc4 => 0x30c4, 0xc5 => 0x30c5, 0xc6 => 0x30c6, 0xc7 => 0x30c7, 0xc8 => 0x30c8, 0xc9 => 0x30c9, 0xca => 0x30ca, 0xcb => 0x30cb, 0xcc => 0x30cc, 0xcd => 0x30cd, 0xce => 0x30ce, 0xcf => 0x30cf, 0xd0 => 0x30d0, 0xd1 => 0x30d1, 0xd2 => 0x30d2, 0xd3 => 0x30d3, 0xd4 => 0x30d4, 0xd5 => 0x30d5, 0xd6 => 0x30d6, 0xd7 => 0x30d7, 0xd8 => 0x30d8, 0xd9 => 0x30d9, 0xda => 0x30da, 0xdb => 0x30db, 0xdc => 0x30dc, 0xdd => 0x30dd, 0xde => 0x30de, 0xdf => 0x30df, 0xe0 => 0x30e0, 0xe1 => 0x30e1, 0xe2 => 0x30e2, 0xe3 => 0x30e3, 0xe4 => 0x30e4, 0xe5 => 0x30e5, 0xe6 => 0x30e6, 0xe7 => 0x30e7, 0xe8 => 0x30e8, 0xe9 => 0x30e9, 0xea => 0x30ea, 0xeb => 0x30eb, 0xec => 0x30ec, 0xed => 0x30ed, 0xee => 0x30ee, 0xef => 0x30ef, 0xf0 => 0x30f0, 0xf1 => 0x30f1, 0xf2 => 0x30f2, 0xf3 => 0x30f3, 0xf4 => 0x30f4, 0xf5 => 0x30f5, 0xf6 => 0x30f6, }, 0xa6 => { 0xa1 => 0x0391, 0xa2 => 0x0392, 0xa3 => 0x0393, 0xa4 => 0x0394, 0xa5 => 0x0395, 0xa6 => 0x0396, 0xa7 => 0x0397, 0xa8 => 0x0398, 0xa9 => 0x0399, 0xaa => 0x039a, 0xab => 0x039b, 0xac => 0x039c, 0xad => 0x039d, 0xae => 0x039e, 0xaf => 0x039f, 0xb0 => 0x03a0, 0xb1 => 0x03a1, 0xb2 => 0x03a3, 0xb3 => 0x03a4, 0xb4 => 0x03a5, 0xb5 => 0x03a6, 0xb6 => 0x03a7, 0xb7 => 0x03a8, 0xb8 => 0x03a9, 0xc1 => 0x03b1, 0xc2 => 0x03b2, 0xc3 => 0x03b3, 0xc4 => 0x03b4, 0xc5 => 0x03b5, 0xc6 => 0x03b6, 0xc7 => 0x03b7, 0xc8 => 0x03b8, 0xc9 => 0x03b9, 0xca => 0x03ba, 0xcb => 0x03bb, 0xcc => 0x03bc, 0xcd => 0x03bd, 0xce => 0x03be, 0xcf => 0x03bf, 0xd0 => 0x03c0, 0xd1 => 0x03c1, 0xd2 => 0x03c3, 0xd3 => 0x03c4, 0xd4 => 0x03c5, 0xd5 => 0x03c6, 0xd6 => 0x03c7, 0xd7 => 0x03c8, 0xd8 => 0x03c9, 0xd9 => [0xff0c,0xf87e], 0xda => [0x3002,0xf87e], 0xdb => [0x3001,0xf87e], 0xdc => [0xff1a,0xf87e], 0xdd => [0xff1b,0xf87e], 0xde => [0xff01,0xf87e], 0xdf => [0xff1f,0xf87e], 0xe0 => 0xfe35, 0xe1 => 0xfe36, 0xe2 => 0xfe39, 0xe3 => 0xfe3a, 0xe4 => 0xfe3f, 0xe5 => 0xfe40, 0xe6 => 0xfe3d, 0xe7 => 0xfe3e, 0xe8 => 0xfe41, 0xe9 => 0xfe42, 0xea => 0xfe43, 0xeb => 0xfe44, 0xec => [0x3016,0xf87e], 0xed => [0x3017,0xf87e], 0xee => 0xfe3b, 0xef => 0xfe3c, 0xf0 => 0xfe37, 0xf1 => 0xfe38, 0xf2 => 0xfe31, 0xf3 => [0x22ef,0xf87e], 0xf4 => 0xfe33, 0xf5 => 0xfe34, }, 0xa7 => { 0xa1 => 0x0410, 0xa2 => 0x0411, 0xa3 => 0x0412, 0xa4 => 0x0413, 0xa5 => 0x0414, 0xa6 => 0x0415, 0xa7 => 0x0401, 0xa8 => 0x0416, 0xa9 => 0x0417, 0xaa => 0x0418, 0xab => 0x0419, 0xac => 0x041a, 0xad => 0x041b, 0xae => 0x041c, 0xaf => 0x041d, 0xb0 => 0x041e, 0xb1 => 0x041f, 0xb2 => 0x0420, 0xb3 => 0x0421, 0xb4 => 0x0422, 0xb5 => 0x0423, 0xb6 => 0x0424, 0xb7 => 0x0425, 0xb8 => 0x0426, 0xb9 => 0x0427, 0xba => 0x0428, 0xbb => 0x0429, 0xbc => 0x042a, 0xbd => 0x042b, 0xbe => 0x042c, 0xbf => 0x042d, 0xc0 => 0x042e, 0xc1 => 0x042f, 0xd1 => 0x0430, 0xd2 => 0x0431, 0xd3 => 0x0432, 0xd4 => 0x0433, 0xd5 => 0x0434, 0xd6 => 0x0435, 0xd7 => 0x0451, 0xd8 => 0x0436, 0xd9 => 0x0437, 0xda => 0x0438, 0xdb => 0x0439, 0xdc => 0x043a, 0xdd => 0x043b, 0xde => 0x043c, 0xdf => 0x043d, 0xe0 => 0x043e, 0xe1 => 0x043f, 0xe2 => 0x0440, 0xe3 => 0x0441, 0xe4 => 0x0442, 0xe5 => 0x0443, 0xe6 => 0x0444, 0xe7 => 0x0445, 0xe8 => 0x0446, 0xe9 => 0x0447, 0xea => 0x0448, 0xeb => 0x0449, 0xec => 0x044a, 0xed => 0x044b, 0xee => 0x044c, 0xef => 0x044d, 0xf0 => 0x044e, 0xf1 => 0x044f, }, 0xa8 => { 0xa1 => 0x0101, 0xa2 => 0xe1, 0xa3 => 0x01ce, 0xa4 => 0xe0, 0xa5 => 0x0113, 0xa6 => 0xe9, 0xa7 => 0x011b, 0xa8 => 0xe8, 0xa9 => 0x012b, 0xaa => 0xed, 0xab => 0x01d0, 0xac => 0xec, 0xad => 0x014d, 0xae => 0xf3, 0xaf => 0x01d2, 0xb0 => 0xf2, 0xb1 => 0x016b, 0xb2 => 0xfa, 0xb3 => 0x01d4, 0xb4 => 0xf9, 0xb5 => 0x01d6, 0xb6 => 0x01d8, 0xb7 => 0x01da, 0xb8 => 0x01dc, 0xb9 => 0xfc, 0xba => 0xea, 0xbb => 0x0251, 0xbc => 0x1e3f, 0xbd => 0x0144, 0xbe => 0x0148, 0xbf => 0x01f9, 0xc0 => 0x0261, 0xc5 => 0x3105, 0xc6 => 0x3106, 0xc7 => 0x3107, 0xc8 => 0x3108, 0xc9 => 0x3109, 0xca => 0x310a, 0xcb => 0x310b, 0xcc => 0x310c, 0xcd => 0x310d, 0xce => 0x310e, 0xcf => 0x310f, 0xd0 => 0x3110, 0xd1 => 0x3111, 0xd2 => 0x3112, 0xd3 => 0x3113, 0xd4 => 0x3114, 0xd5 => 0x3115, 0xd6 => 0x3116, 0xd7 => 0x3117, 0xd8 => 0x3118, 0xd9 => 0x3119, 0xda => 0x311a, 0xdb => 0x311b, 0xdc => 0x311c, 0xdd => 0x311d, 0xde => 0x311e, 0xdf => 0x311f, 0xe0 => 0x3120, 0xe1 => 0x3121, 0xe2 => 0x3122, 0xe3 => 0x3123, 0xe4 => 0x3124, 0xe5 => 0x3125, 0xe6 => 0x3126, 0xe7 => 0x3127, 0xe8 => 0x3128, 0xe9 => 0x3129, }, 0xa9 => { 0xa4 => 0x2500, 0xa5 => 0x2501, 0xa6 => 0x2502, 0xa7 => 0x2503, 0xa8 => 0x2504, 0xa9 => 0x2505, 0xaa => 0x2506, 0xab => 0x2507, 0xac => 0x2508, 0xad => 0x2509, 0xae => 0x250a, 0xaf => 0x250b, 0xb0 => 0x250c, 0xb1 => 0x250d, 0xb2 => 0x250e, 0xb3 => 0x250f, 0xb4 => 0x2510, 0xb5 => 0x2511, 0xb6 => 0x2512, 0xb7 => 0x2513, 0xb8 => 0x2514, 0xb9 => 0x2515, 0xba => 0x2516, 0xbb => 0x2517, 0xbc => 0x2518, 0xbd => 0x2519, 0xbe => 0x251a, 0xbf => 0x251b, 0xc0 => 0x251c, 0xc1 => 0x251d, 0xc2 => 0x251e, 0xc3 => 0x251f, 0xc4 => 0x2520, 0xc5 => 0x2521, 0xc6 => 0x2522, 0xc7 => 0x2523, 0xc8 => 0x2524, 0xc9 => 0x2525, 0xca => 0x2526, 0xcb => 0x2527, 0xcc => 0x2528, 0xcd => 0x2529, 0xce => 0x252a, 0xcf => 0x252b, 0xd0 => 0x252c, 0xd1 => 0x252d, 0xd2 => 0x252e, 0xd3 => 0x252f, 0xd4 => 0x2530, 0xd5 => 0x2531, 0xd6 => 0x2532, 0xd7 => 0x2533, 0xd8 => 0x2534, 0xd9 => 0x2535, 0xda => 0x2536, 0xdb => 0x2537, 0xdc => 0x2538, 0xdd => 0x2539, 0xde => 0x253a, 0xdf => 0x253b, 0xe0 => 0x253c, 0xe1 => 0x253d, 0xe2 => 0x253e, 0xe3 => 0x253f, 0xe4 => 0x2540, 0xe5 => 0x2541, 0xe6 => 0x2542, 0xe7 => 0x2543, 0xe8 => 0x2544, 0xe9 => 0x2545, 0xea => 0x2546, 0xeb => 0x2547, 0xec => 0x2548, 0xed => 0x2549, 0xee => 0x254a, 0xef => 0x254b, }, 0xb0 => { 0xa1 => 0x554a, 0xa2 => 0x963f, 0xa3 => 0x57c3, 0xa4 => 0x6328, 0xa5 => 0x54ce, 0xa6 => 0x5509, 0xa7 => 0x54c0, 0xa8 => 0x7691, 0xa9 => 0x764c, 0xaa => 0x853c, 0xab => 0x77ee, 0xac => 0x827e, 0xad => 0x788d, 0xae => 0x7231, 0xaf => 0x9698, 0xb0 => 0x978d, 0xb1 => 0x6c28, 0xb2 => 0x5b89, 0xb3 => 0x4ffa, 0xb4 => 0x6309, 0xb5 => 0x6697, 0xb6 => 0x5cb8, 0xb7 => 0x80fa, 0xb8 => 0x6848, 0xb9 => 0x80ae, 0xba => 0x6602, 0xbb => 0x76ce, 0xbc => 0x51f9, 0xbd => 0x6556, 0xbe => 0x71ac, 0xbf => 0x7ff1, 0xc0 => 0x8884, 0xc1 => 0x50b2, 0xc2 => 0x5965, 0xc3 => 0x61ca, 0xc4 => 0x6fb3, 0xc5 => 0x82ad, 0xc6 => 0x634c, 0xc7 => 0x6252, 0xc8 => 0x53ed, 0xc9 => 0x5427, 0xca => 0x7b06, 0xcb => 0x516b, 0xcc => 0x75a4, 0xcd => 0x5df4, 0xce => 0x62d4, 0xcf => 0x8dcb, 0xd0 => 0x9776, 0xd1 => 0x628a, 0xd2 => 0x8019, 0xd3 => 0x575d, 0xd4 => 0x9738, 0xd5 => 0x7f62, 0xd6 => 0x7238, 0xd7 => 0x767d, 0xd8 => 0x67cf, 0xd9 => 0x767e, 0xda => 0x6446, 0xdb => 0x4f70, 0xdc => 0x8d25, 0xdd => 0x62dc, 0xde => 0x7a17, 0xdf => 0x6591, 0xe0 => 0x73ed, 0xe1 => 0x642c, 0xe2 => 0x6273, 0xe3 => 0x822c, 0xe4 => 0x9881, 0xe5 => 0x677f, 0xe6 => 0x7248, 0xe7 => 0x626e, 0xe8 => 0x62cc, 0xe9 => 0x4f34, 0xea => 0x74e3, 0xeb => 0x534a, 0xec => 0x529e, 0xed => 0x7eca, 0xee => 0x90a6, 0xef => 0x5e2e, 0xf0 => 0x6886, 0xf1 => 0x699c, 0xf2 => 0x8180, 0xf3 => 0x7ed1, 0xf4 => 0x68d2, 0xf5 => 0x78c5, 0xf6 => 0x868c, 0xf7 => 0x9551, 0xf8 => 0x508d, 0xf9 => 0x8c24, 0xfa => 0x82de, 0xfb => 0x80de, 0xfc => 0x5305, 0xfd => 0x8912, 0xfe => 0x5265, }, 0xb1 => { 0xa1 => 0x8584, 0xa2 => 0x96f9, 0xa3 => 0x4fdd, 0xa4 => 0x5821, 0xa5 => 0x9971, 0xa6 => 0x5b9d, 0xa7 => 0x62b1, 0xa8 => 0x62a5, 0xa9 => 0x66b4, 0xaa => 0x8c79, 0xab => 0x9c8d, 0xac => 0x7206, 0xad => 0x676f, 0xae => 0x7891, 0xaf => 0x60b2, 0xb0 => 0x5351, 0xb1 => 0x5317, 0xb2 => 0x8f88, 0xb3 => 0x80cc, 0xb4 => 0x8d1d, 0xb5 => 0x94a1, 0xb6 => 0x500d, 0xb7 => 0x72c8, 0xb8 => 0x5907, 0xb9 => 0x60eb, 0xba => 0x7119, 0xbb => 0x88ab, 0xbc => 0x5954, 0xbd => 0x82ef, 0xbe => 0x672c, 0xbf => 0x7b28, 0xc0 => 0x5d29, 0xc1 => 0x7ef7, 0xc2 => 0x752d, 0xc3 => 0x6cf5, 0xc4 => 0x8e66, 0xc5 => 0x8ff8, 0xc6 => 0x903c, 0xc7 => 0x9f3b, 0xc8 => 0x6bd4, 0xc9 => 0x9119, 0xca => 0x7b14, 0xcb => 0x5f7c, 0xcc => 0x78a7, 0xcd => 0x84d6, 0xce => 0x853d, 0xcf => 0x6bd5, 0xd0 => 0x6bd9, 0xd1 => 0x6bd6, 0xd2 => 0x5e01, 0xd3 => 0x5e87, 0xd4 => 0x75f9, 0xd5 => 0x95ed, 0xd6 => 0x655d, 0xd7 => 0x5f0a, 0xd8 => 0x5fc5, 0xd9 => 0x8f9f, 0xda => 0x58c1, 0xdb => 0x81c2, 0xdc => 0x907f, 0xdd => 0x965b, 0xde => 0x97ad, 0xdf => 0x8fb9, 0xe0 => 0x7f16, 0xe1 => 0x8d2c, 0xe2 => 0x6241, 0xe3 => 0x4fbf, 0xe4 => 0x53d8, 0xe5 => 0x535e, 0xe6 => 0x8fa8, 0xe7 => 0x8fa9, 0xe8 => 0x8fab, 0xe9 => 0x904d, 0xea => 0x6807, 0xeb => 0x5f6a, 0xec => 0x8198, 0xed => 0x8868, 0xee => 0x9cd6, 0xef => 0x618b, 0xf0 => 0x522b, 0xf1 => 0x762a, 0xf2 => 0x5f6c, 0xf3 => 0x658c, 0xf4 => 0x6fd2, 0xf5 => 0x6ee8, 0xf6 => 0x5bbe, 0xf7 => 0x6448, 0xf8 => 0x5175, 0xf9 => 0x51b0, 0xfa => 0x67c4, 0xfb => 0x4e19, 0xfc => 0x79c9, 0xfd => 0x997c, 0xfe => 0x70b3, }, 0xb2 => { 0xa1 => 0x75c5, 0xa2 => 0x5e76, 0xa3 => 0x73bb, 0xa4 => 0x83e0, 0xa5 => 0x64ad, 0xa6 => 0x62e8, 0xa7 => 0x94b5, 0xa8 => 0x6ce2, 0xa9 => 0x535a, 0xaa => 0x52c3, 0xab => 0x640f, 0xac => 0x94c2, 0xad => 0x7b94, 0xae => 0x4f2f, 0xaf => 0x5e1b, 0xb0 => 0x8236, 0xb1 => 0x8116, 0xb2 => 0x818a, 0xb3 => 0x6e24, 0xb4 => 0x6cca, 0xb5 => 0x9a73, 0xb6 => 0x6355, 0xb7 => 0x535c, 0xb8 => 0x54fa, 0xb9 => 0x8865, 0xba => 0x57e0, 0xbb => 0x4e0d, 0xbc => 0x5e03, 0xbd => 0x6b65, 0xbe => 0x7c3f, 0xbf => 0x90e8, 0xc0 => 0x6016, 0xc1 => 0x64e6, 0xc2 => 0x731c, 0xc3 => 0x88c1, 0xc4 => 0x6750, 0xc5 => 0x624d, 0xc6 => 0x8d22, 0xc7 => 0x776c, 0xc8 => 0x8e29, 0xc9 => 0x91c7, 0xca => 0x5f69, 0xcb => 0x83dc, 0xcc => 0x8521, 0xcd => 0x9910, 0xce => 0x53c2, 0xcf => 0x8695, 0xd0 => 0x6b8b, 0xd1 => 0x60ed, 0xd2 => 0x60e8, 0xd3 => 0x707f, 0xd4 => 0x82cd, 0xd5 => 0x8231, 0xd6 => 0x4ed3, 0xd7 => 0x6ca7, 0xd8 => 0x85cf, 0xd9 => 0x64cd, 0xda => 0x7cd9, 0xdb => 0x69fd, 0xdc => 0x66f9, 0xdd => 0x8349, 0xde => 0x5395, 0xdf => 0x7b56, 0xe0 => 0x4fa7, 0xe1 => 0x518c, 0xe2 => 0x6d4b, 0xe3 => 0x5c42, 0xe4 => 0x8e6d, 0xe5 => 0x63d2, 0xe6 => 0x53c9, 0xe7 => 0x832c, 0xe8 => 0x8336, 0xe9 => 0x67e5, 0xea => 0x78b4, 0xeb => 0x643d, 0xec => 0x5bdf, 0xed => 0x5c94, 0xee => 0x5dee, 0xef => 0x8be7, 0xf0 => 0x62c6, 0xf1 => 0x67f4, 0xf2 => 0x8c7a, 0xf3 => 0x6400, 0xf4 => 0x63ba, 0xf5 => 0x8749, 0xf6 => 0x998b, 0xf7 => 0x8c17, 0xf8 => 0x7f20, 0xf9 => 0x94f2, 0xfa => 0x4ea7, 0xfb => 0x9610, 0xfc => 0x98a4, 0xfd => 0x660c, 0xfe => 0x7316, }, 0xb3 => { 0xa1 => 0x573a, 0xa2 => 0x5c1d, 0xa3 => 0x5e38, 0xa4 => 0x957f, 0xa5 => 0x507f, 0xa6 => 0x80a0, 0xa7 => 0x5382, 0xa8 => 0x655e, 0xa9 => 0x7545, 0xaa => 0x5531, 0xab => 0x5021, 0xac => 0x8d85, 0xad => 0x6284, 0xae => 0x949e, 0xaf => 0x671d, 0xb0 => 0x5632, 0xb1 => 0x6f6e, 0xb2 => 0x5de2, 0xb3 => 0x5435, 0xb4 => 0x7092, 0xb5 => 0x8f66, 0xb6 => 0x626f, 0xb7 => 0x64a4, 0xb8 => 0x63a3, 0xb9 => 0x5f7b, 0xba => 0x6f88, 0xbb => 0x90f4, 0xbc => 0x81e3, 0xbd => 0x8fb0, 0xbe => 0x5c18, 0xbf => 0x6668, 0xc0 => 0x5ff1, 0xc1 => 0x6c89, 0xc2 => 0x9648, 0xc3 => 0x8d81, 0xc4 => 0x886c, 0xc5 => 0x6491, 0xc6 => 0x79f0, 0xc7 => 0x57ce, 0xc8 => 0x6a59, 0xc9 => 0x6210, 0xca => 0x5448, 0xcb => 0x4e58, 0xcc => 0x7a0b, 0xcd => 0x60e9, 0xce => 0x6f84, 0xcf => 0x8bda, 0xd0 => 0x627f, 0xd1 => 0x901e, 0xd2 => 0x9a8b, 0xd3 => 0x79e4, 0xd4 => 0x5403, 0xd5 => 0x75f4, 0xd6 => 0x6301, 0xd7 => 0x5319, 0xd8 => 0x6c60, 0xd9 => 0x8fdf, 0xda => 0x5f1b, 0xdb => 0x9a70, 0xdc => 0x803b, 0xdd => 0x9f7f, 0xde => 0x4f88, 0xdf => 0x5c3a, 0xe0 => 0x8d64, 0xe1 => 0x7fc5, 0xe2 => 0x65a5, 0xe3 => 0x70bd, 0xe4 => 0x5145, 0xe5 => 0x51b2, 0xe6 => 0x866b, 0xe7 => 0x5d07, 0xe8 => 0x5ba0, 0xe9 => 0x62bd, 0xea => 0x916c, 0xeb => 0x7574, 0xec => 0x8e0c, 0xed => 0x7a20, 0xee => 0x6101, 0xef => 0x7b79, 0xf0 => 0x4ec7, 0xf1 => 0x7ef8, 0xf2 => 0x7785, 0xf3 => 0x4e11, 0xf4 => 0x81ed, 0xf5 => 0x521d, 0xf6 => 0x51fa, 0xf7 => 0x6a71, 0xf8 => 0x53a8, 0xf9 => 0x8e87, 0xfa => 0x9504, 0xfb => 0x96cf, 0xfc => 0x6ec1, 0xfd => 0x9664, 0xfe => 0x695a, }, 0xb4 => { 0xa1 => 0x7840, 0xa2 => 0x50a8, 0xa3 => 0x77d7, 0xa4 => 0x6410, 0xa5 => 0x89e6, 0xa6 => 0x5904, 0xa7 => 0x63e3, 0xa8 => 0x5ddd, 0xa9 => 0x7a7f, 0xaa => 0x693d, 0xab => 0x4f20, 0xac => 0x8239, 0xad => 0x5598, 0xae => 0x4e32, 0xaf => 0x75ae, 0xb0 => 0x7a97, 0xb1 => 0x5e62, 0xb2 => 0x5e8a, 0xb3 => 0x95ef, 0xb4 => 0x521b, 0xb5 => 0x5439, 0xb6 => 0x708a, 0xb7 => 0x6376, 0xb8 => 0x9524, 0xb9 => 0x5782, 0xba => 0x6625, 0xbb => 0x693f, 0xbc => 0x9187, 0xbd => 0x5507, 0xbe => 0x6df3, 0xbf => 0x7eaf, 0xc0 => 0x8822, 0xc1 => 0x6233, 0xc2 => 0x7ef0, 0xc3 => 0x75b5, 0xc4 => 0x8328, 0xc5 => 0x78c1, 0xc6 => 0x96cc, 0xc7 => 0x8f9e, 0xc8 => 0x6148, 0xc9 => 0x74f7, 0xca => 0x8bcd, 0xcb => 0x6b64, 0xcc => 0x523a, 0xcd => 0x8d50, 0xce => 0x6b21, 0xcf => 0x806a, 0xd0 => 0x8471, 0xd1 => 0x56f1, 0xd2 => 0x5306, 0xd3 => 0x4ece, 0xd4 => 0x4e1b, 0xd5 => 0x51d1, 0xd6 => 0x7c97, 0xd7 => 0x918b, 0xd8 => 0x7c07, 0xd9 => 0x4fc3, 0xda => 0x8e7f, 0xdb => 0x7be1, 0xdc => 0x7a9c, 0xdd => 0x6467, 0xde => 0x5d14, 0xdf => 0x50ac, 0xe0 => 0x8106, 0xe1 => 0x7601, 0xe2 => 0x7cb9, 0xe3 => 0x6dec, 0xe4 => 0x7fe0, 0xe5 => 0x6751, 0xe6 => 0x5b58, 0xe7 => 0x5bf8, 0xe8 => 0x78cb, 0xe9 => 0x64ae, 0xea => 0x6413, 0xeb => 0x63aa, 0xec => 0x632b, 0xed => 0x9519, 0xee => 0x642d, 0xef => 0x8fbe, 0xf0 => 0x7b54, 0xf1 => 0x7629, 0xf2 => 0x6253, 0xf3 => 0x5927, 0xf4 => 0x5446, 0xf5 => 0x6b79, 0xf6 => 0x50a3, 0xf7 => 0x6234, 0xf8 => 0x5e26, 0xf9 => 0x6b86, 0xfa => 0x4ee3, 0xfb => 0x8d37, 0xfc => 0x888b, 0xfd => 0x5f85, 0xfe => 0x902e, }, 0xb5 => { 0xa1 => 0x6020, 0xa2 => 0x803d, 0xa3 => 0x62c5, 0xa4 => 0x4e39, 0xa5 => 0x5355, 0xa6 => 0x90f8, 0xa7 => 0x63b8, 0xa8 => 0x80c6, 0xa9 => 0x65e6, 0xaa => 0x6c2e, 0xab => 0x4f46, 0xac => 0x60ee, 0xad => 0x6de1, 0xae => 0x8bde, 0xaf => 0x5f39, 0xb0 => 0x86cb, 0xb1 => 0x5f53, 0xb2 => 0x6321, 0xb3 => 0x515a, 0xb4 => 0x8361, 0xb5 => 0x6863, 0xb6 => 0x5200, 0xb7 => 0x6363, 0xb8 => 0x8e48, 0xb9 => 0x5012, 0xba => 0x5c9b, 0xbb => 0x7977, 0xbc => 0x5bfc, 0xbd => 0x5230, 0xbe => 0x7a3b, 0xbf => 0x60bc, 0xc0 => 0x9053, 0xc1 => 0x76d7, 0xc2 => 0x5fb7, 0xc3 => 0x5f97, 0xc4 => 0x7684, 0xc5 => 0x8e6c, 0xc6 => 0x706f, 0xc7 => 0x767b, 0xc8 => 0x7b49, 0xc9 => 0x77aa, 0xca => 0x51f3, 0xcb => 0x9093, 0xcc => 0x5824, 0xcd => 0x4f4e, 0xce => 0x6ef4, 0xcf => 0x8fea, 0xd0 => 0x654c, 0xd1 => 0x7b1b, 0xd2 => 0x72c4, 0xd3 => 0x6da4, 0xd4 => 0x7fdf, 0xd5 => 0x5ae1, 0xd6 => 0x62b5, 0xd7 => 0x5e95, 0xd8 => 0x5730, 0xd9 => 0x8482, 0xda => 0x7b2c, 0xdb => 0x5e1d, 0xdc => 0x5f1f, 0xdd => 0x9012, 0xde => 0x7f14, 0xdf => 0x98a0, 0xe0 => 0x6382, 0xe1 => 0x6ec7, 0xe2 => 0x7898, 0xe3 => 0x70b9, 0xe4 => 0x5178, 0xe5 => 0x975b, 0xe6 => 0x57ab, 0xe7 => 0x7535, 0xe8 => 0x4f43, 0xe9 => 0x7538, 0xea => 0x5e97, 0xeb => 0x60e6, 0xec => 0x5960, 0xed => 0x6dc0, 0xee => 0x6bbf, 0xef => 0x7889, 0xf0 => 0x53fc, 0xf1 => 0x96d5, 0xf2 => 0x51cb, 0xf3 => 0x5201, 0xf4 => 0x6389, 0xf5 => 0x540a, 0xf6 => 0x9493, 0xf7 => 0x8c03, 0xf8 => 0x8dcc, 0xf9 => 0x7239, 0xfa => 0x789f, 0xfb => 0x8776, 0xfc => 0x8fed, 0xfd => 0x8c0d, 0xfe => 0x53e0, }, 0xb6 => { 0xa1 => 0x4e01, 0xa2 => 0x76ef, 0xa3 => 0x53ee, 0xa4 => 0x9489, 0xa5 => 0x9876, 0xa6 => 0x9f0e, 0xa7 => 0x952d, 0xa8 => 0x5b9a, 0xa9 => 0x8ba2, 0xaa => 0x4e22, 0xab => 0x4e1c, 0xac => 0x51ac, 0xad => 0x8463, 0xae => 0x61c2, 0xaf => 0x52a8, 0xb0 => 0x680b, 0xb1 => 0x4f97, 0xb2 => 0x606b, 0xb3 => 0x51bb, 0xb4 => 0x6d1e, 0xb5 => 0x515c, 0xb6 => 0x6296, 0xb7 => 0x6597, 0xb8 => 0x9661, 0xb9 => 0x8c46, 0xba => 0x9017, 0xbb => 0x75d8, 0xbc => 0x90fd, 0xbd => 0x7763, 0xbe => 0x6bd2, 0xbf => 0x728a, 0xc0 => 0x72ec, 0xc1 => 0x8bfb, 0xc2 => 0x5835, 0xc3 => 0x7779, 0xc4 => 0x8d4c, 0xc5 => 0x675c, 0xc6 => 0x9540, 0xc7 => 0x809a, 0xc8 => 0x5ea6, 0xc9 => 0x6e21, 0xca => 0x5992, 0xcb => 0x7aef, 0xcc => 0x77ed, 0xcd => 0x953b, 0xce => 0x6bb5, 0xcf => 0x65ad, 0xd0 => 0x7f0e, 0xd1 => 0x5806, 0xd2 => 0x5151, 0xd3 => 0x961f, 0xd4 => 0x5bf9, 0xd5 => 0x58a9, 0xd6 => 0x5428, 0xd7 => 0x8e72, 0xd8 => 0x6566, 0xd9 => 0x987f, 0xda => 0x56e4, 0xdb => 0x949d, 0xdc => 0x76fe, 0xdd => 0x9041, 0xde => 0x6387, 0xdf => 0x54c6, 0xe0 => 0x591a, 0xe1 => 0x593a, 0xe2 => 0x579b, 0xe3 => 0x8eb2, 0xe4 => 0x6735, 0xe5 => 0x8dfa, 0xe6 => 0x8235, 0xe7 => 0x5241, 0xe8 => 0x60f0, 0xe9 => 0x5815, 0xea => 0x86fe, 0xeb => 0x5ce8, 0xec => 0x9e45, 0xed => 0x4fc4, 0xee => 0x989d, 0xef => 0x8bb9, 0xf0 => 0x5a25, 0xf1 => 0x6076, 0xf2 => 0x5384, 0xf3 => 0x627c, 0xf4 => 0x904f, 0xf5 => 0x9102, 0xf6 => 0x997f, 0xf7 => 0x6069, 0xf8 => 0x800c, 0xf9 => 0x513f, 0xfa => 0x8033, 0xfb => 0x5c14, 0xfc => 0x9975, 0xfd => 0x6d31, 0xfe => 0x4e8c, }, 0xb7 => { 0xa1 => 0x8d30, 0xa2 => 0x53d1, 0xa3 => 0x7f5a, 0xa4 => 0x7b4f, 0xa5 => 0x4f10, 0xa6 => 0x4e4f, 0xa7 => 0x9600, 0xa8 => 0x6cd5, 0xa9 => 0x73d0, 0xaa => 0x85e9, 0xab => 0x5e06, 0xac => 0x756a, 0xad => 0x7ffb, 0xae => 0x6a0a, 0xaf => 0x77fe, 0xb0 => 0x9492, 0xb1 => 0x7e41, 0xb2 => 0x51e1, 0xb3 => 0x70e6, 0xb4 => 0x53cd, 0xb5 => 0x8fd4, 0xb6 => 0x8303, 0xb7 => 0x8d29, 0xb8 => 0x72af, 0xb9 => 0x996d, 0xba => 0x6cdb, 0xbb => 0x574a, 0xbc => 0x82b3, 0xbd => 0x65b9, 0xbe => 0x80aa, 0xbf => 0x623f, 0xc0 => 0x9632, 0xc1 => 0x59a8, 0xc2 => 0x4eff, 0xc3 => 0x8bbf, 0xc4 => 0x7eba, 0xc5 => 0x653e, 0xc6 => 0x83f2, 0xc7 => 0x975e, 0xc8 => 0x5561, 0xc9 => 0x98de, 0xca => 0x80a5, 0xcb => 0x532a, 0xcc => 0x8bfd, 0xcd => 0x5420, 0xce => 0x80ba, 0xcf => 0x5e9f, 0xd0 => 0x6cb8, 0xd1 => 0x8d39, 0xd2 => 0x82ac, 0xd3 => 0x915a, 0xd4 => 0x5429, 0xd5 => 0x6c1b, 0xd6 => 0x5206, 0xd7 => 0x7eb7, 0xd8 => 0x575f, 0xd9 => 0x711a, 0xda => 0x6c7e, 0xdb => 0x7c89, 0xdc => 0x594b, 0xdd => 0x4efd, 0xde => 0x5fff, 0xdf => 0x6124, 0xe0 => 0x7caa, 0xe1 => 0x4e30, 0xe2 => 0x5c01, 0xe3 => 0x67ab, 0xe4 => 0x8702, 0xe5 => 0x5cf0, 0xe6 => 0x950b, 0xe7 => 0x98ce, 0xe8 => 0x75af, 0xe9 => 0x70fd, 0xea => 0x9022, 0xeb => 0x51af, 0xec => 0x7f1d, 0xed => 0x8bbd, 0xee => 0x5949, 0xef => 0x51e4, 0xf0 => 0x4f5b, 0xf1 => 0x5426, 0xf2 => 0x592b, 0xf3 => 0x6577, 0xf4 => 0x80a4, 0xf5 => 0x5b75, 0xf6 => 0x6276, 0xf7 => 0x62c2, 0xf8 => 0x8f90, 0xf9 => 0x5e45, 0xfa => 0x6c1f, 0xfb => 0x7b26, 0xfc => 0x4f0f, 0xfd => 0x4fd8, 0xfe => 0x670d, }, 0xb8 => { 0xa1 => 0x6d6e, 0xa2 => 0x6daa, 0xa3 => 0x798f, 0xa4 => 0x88b1, 0xa5 => 0x5f17, 0xa6 => 0x752b, 0xa7 => 0x629a, 0xa8 => 0x8f85, 0xa9 => 0x4fef, 0xaa => 0x91dc, 0xab => 0x65a7, 0xac => 0x812f, 0xad => 0x8151, 0xae => 0x5e9c, 0xaf => 0x8150, 0xb0 => 0x8d74, 0xb1 => 0x526f, 0xb2 => 0x8986, 0xb3 => 0x8d4b, 0xb4 => 0x590d, 0xb5 => 0x5085, 0xb6 => 0x4ed8, 0xb7 => 0x961c, 0xb8 => 0x7236, 0xb9 => 0x8179, 0xba => 0x8d1f, 0xbb => 0x5bcc, 0xbc => 0x8ba3, 0xbd => 0x9644, 0xbe => 0x5987, 0xbf => 0x7f1a, 0xc0 => 0x5490, 0xc1 => 0x5676, 0xc2 => 0x560e, 0xc3 => 0x8be5, 0xc4 => 0x6539, 0xc5 => 0x6982, 0xc6 => 0x9499, 0xc7 => 0x76d6, 0xc8 => 0x6e89, 0xc9 => 0x5e72, 0xca => 0x7518, 0xcb => 0x6746, 0xcc => 0x67d1, 0xcd => 0x7aff, 0xce => 0x809d, 0xcf => 0x8d76, 0xd0 => 0x611f, 0xd1 => 0x79c6, 0xd2 => 0x6562, 0xd3 => 0x8d63, 0xd4 => 0x5188, 0xd5 => 0x521a, 0xd6 => 0x94a2, 0xd7 => 0x7f38, 0xd8 => 0x809b, 0xd9 => 0x7eb2, 0xda => 0x5c97, 0xdb => 0x6e2f, 0xdc => 0x6760, 0xdd => 0x7bd9, 0xde => 0x768b, 0xdf => 0x9ad8, 0xe0 => 0x818f, 0xe1 => 0x7f94, 0xe2 => 0x7cd5, 0xe3 => 0x641e, 0xe4 => 0x9550, 0xe5 => 0x7a3f, 0xe6 => 0x544a, 0xe7 => 0x54e5, 0xe8 => 0x6b4c, 0xe9 => 0x6401, 0xea => 0x6208, 0xeb => 0x9e3d, 0xec => 0x80f3, 0xed => 0x7599, 0xee => 0x5272, 0xef => 0x9769, 0xf0 => 0x845b, 0xf1 => 0x683c, 0xf2 => 0x86e4, 0xf3 => 0x9601, 0xf4 => 0x9694, 0xf5 => 0x94ec, 0xf6 => 0x4e2a, 0xf7 => 0x5404, 0xf8 => 0x7ed9, 0xf9 => 0x6839, 0xfa => 0x8ddf, 0xfb => 0x8015, 0xfc => 0x66f4, 0xfd => 0x5e9a, 0xfe => 0x7fb9, }, 0xb9 => { 0xa1 => 0x57c2, 0xa2 => 0x803f, 0xa3 => 0x6897, 0xa4 => 0x5de5, 0xa5 => 0x653b, 0xa6 => 0x529f, 0xa7 => 0x606d, 0xa8 => 0x9f9a, 0xa9 => 0x4f9b, 0xaa => 0x8eac, 0xab => 0x516c, 0xac => 0x5bab, 0xad => 0x5f13, 0xae => 0x5de9, 0xaf => 0x6c5e, 0xb0 => 0x62f1, 0xb1 => 0x8d21, 0xb2 => 0x5171, 0xb3 => 0x94a9, 0xb4 => 0x52fe, 0xb5 => 0x6c9f, 0xb6 => 0x82df, 0xb7 => 0x72d7, 0xb8 => 0x57a2, 0xb9 => 0x6784, 0xba => 0x8d2d, 0xbb => 0x591f, 0xbc => 0x8f9c, 0xbd => 0x83c7, 0xbe => 0x5495, 0xbf => 0x7b8d, 0xc0 => 0x4f30, 0xc1 => 0x6cbd, 0xc2 => 0x5b64, 0xc3 => 0x59d1, 0xc4 => 0x9f13, 0xc5 => 0x53e4, 0xc6 => 0x86ca, 0xc7 => 0x9aa8, 0xc8 => 0x8c37, 0xc9 => 0x80a1, 0xca => 0x6545, 0xcb => 0x987e, 0xcc => 0x56fa, 0xcd => 0x96c7, 0xce => 0x522e, 0xcf => 0x74dc, 0xd0 => 0x5250, 0xd1 => 0x5be1, 0xd2 => 0x6302, 0xd3 => 0x8902, 0xd4 => 0x4e56, 0xd5 => 0x62d0, 0xd6 => 0x602a, 0xd7 => 0x68fa, 0xd8 => 0x5173, 0xd9 => 0x5b98, 0xda => 0x51a0, 0xdb => 0x89c2, 0xdc => 0x7ba1, 0xdd => 0x9986, 0xde => 0x7f50, 0xdf => 0x60ef, 0xe0 => 0x704c, 0xe1 => 0x8d2f, 0xe2 => 0x5149, 0xe3 => 0x5e7f, 0xe4 => 0x901b, 0xe5 => 0x7470, 0xe6 => 0x89c4, 0xe7 => 0x572d, 0xe8 => 0x7845, 0xe9 => 0x5f52, 0xea => 0x9f9f, 0xeb => 0x95fa, 0xec => 0x8f68, 0xed => 0x9b3c, 0xee => 0x8be1, 0xef => 0x7678, 0xf0 => 0x6842, 0xf1 => 0x67dc, 0xf2 => 0x8dea, 0xf3 => 0x8d35, 0xf4 => 0x523d, 0xf5 => 0x8f8a, 0xf6 => 0x6eda, 0xf7 => 0x68cd, 0xf8 => 0x9505, 0xf9 => 0x90ed, 0xfa => 0x56fd, 0xfb => 0x679c, 0xfc => 0x88f9, 0xfd => 0x8fc7, 0xfe => 0x54c8, }, 0xba => { 0xa1 => 0x9ab8, 0xa2 => 0x5b69, 0xa3 => 0x6d77, 0xa4 => 0x6c26, 0xa5 => 0x4ea5, 0xa6 => 0x5bb3, 0xa7 => 0x9a87, 0xa8 => 0x9163, 0xa9 => 0x61a8, 0xaa => 0x90af, 0xab => 0x97e9, 0xac => 0x542b, 0xad => 0x6db5, 0xae => 0x5bd2, 0xaf => 0x51fd, 0xb0 => 0x558a, 0xb1 => 0x7f55, 0xb2 => 0x7ff0, 0xb3 => 0x64bc, 0xb4 => 0x634d, 0xb5 => 0x65f1, 0xb6 => 0x61be, 0xb7 => 0x608d, 0xb8 => 0x710a, 0xb9 => 0x6c57, 0xba => 0x6c49, 0xbb => 0x592f, 0xbc => 0x676d, 0xbd => 0x822a, 0xbe => 0x58d5, 0xbf => 0x568e, 0xc0 => 0x8c6a, 0xc1 => 0x6beb, 0xc2 => 0x90dd, 0xc3 => 0x597d, 0xc4 => 0x8017, 0xc5 => 0x53f7, 0xc6 => 0x6d69, 0xc7 => 0x5475, 0xc8 => 0x559d, 0xc9 => 0x8377, 0xca => 0x83cf, 0xcb => 0x6838, 0xcc => 0x79be, 0xcd => 0x548c, 0xce => 0x4f55, 0xcf => 0x5408, 0xd0 => 0x76d2, 0xd1 => 0x8c89, 0xd2 => 0x9602, 0xd3 => 0x6cb3, 0xd4 => 0x6db8, 0xd5 => 0x8d6b, 0xd6 => 0x8910, 0xd7 => 0x9e64, 0xd8 => 0x8d3a, 0xd9 => 0x563f, 0xda => 0x9ed1, 0xdb => 0x75d5, 0xdc => 0x5f88, 0xdd => 0x72e0, 0xde => 0x6068, 0xdf => 0x54fc, 0xe0 => 0x4ea8, 0xe1 => 0x6a2a, 0xe2 => 0x8861, 0xe3 => 0x6052, 0xe4 => 0x8f70, 0xe5 => 0x54c4, 0xe6 => 0x70d8, 0xe7 => 0x8679, 0xe8 => 0x9e3f, 0xe9 => 0x6d2a, 0xea => 0x5b8f, 0xeb => 0x5f18, 0xec => 0x7ea2, 0xed => 0x5589, 0xee => 0x4faf, 0xef => 0x7334, 0xf0 => 0x543c, 0xf1 => 0x539a, 0xf2 => 0x5019, 0xf3 => 0x540e, 0xf4 => 0x547c, 0xf5 => 0x4e4e, 0xf6 => 0x5ffd, 0xf7 => 0x745a, 0xf8 => 0x58f6, 0xf9 => 0x846b, 0xfa => 0x80e1, 0xfb => 0x8774, 0xfc => 0x72d0, 0xfd => 0x7cca, 0xfe => 0x6e56, }, 0xbb => { 0xa1 => 0x5f27, 0xa2 => 0x864e, 0xa3 => 0x552c, 0xa4 => 0x62a4, 0xa5 => 0x4e92, 0xa6 => 0x6caa, 0xa7 => 0x6237, 0xa8 => 0x82b1, 0xa9 => 0x54d7, 0xaa => 0x534e, 0xab => 0x733e, 0xac => 0x6ed1, 0xad => 0x753b, 0xae => 0x5212, 0xaf => 0x5316, 0xb0 => 0x8bdd, 0xb1 => 0x69d0, 0xb2 => 0x5f8a, 0xb3 => 0x6000, 0xb4 => 0x6dee, 0xb5 => 0x574f, 0xb6 => 0x6b22, 0xb7 => 0x73af, 0xb8 => 0x6853, 0xb9 => 0x8fd8, 0xba => 0x7f13, 0xbb => 0x6362, 0xbc => 0x60a3, 0xbd => 0x5524, 0xbe => 0x75ea, 0xbf => 0x8c62, 0xc0 => 0x7115, 0xc1 => 0x6da3, 0xc2 => 0x5ba6, 0xc3 => 0x5e7b, 0xc4 => 0x8352, 0xc5 => 0x614c, 0xc6 => 0x9ec4, 0xc7 => 0x78fa, 0xc8 => 0x8757, 0xc9 => 0x7c27, 0xca => 0x7687, 0xcb => 0x51f0, 0xcc => 0x60f6, 0xcd => 0x714c, 0xce => 0x6643, 0xcf => 0x5e4c, 0xd0 => 0x604d, 0xd1 => 0x8c0e, 0xd2 => 0x7070, 0xd3 => 0x6325, 0xd4 => 0x8f89, 0xd5 => 0x5fbd, 0xd6 => 0x6062, 0xd7 => 0x86d4, 0xd8 => 0x56de, 0xd9 => 0x6bc1, 0xda => 0x6094, 0xdb => 0x6167, 0xdc => 0x5349, 0xdd => 0x60e0, 0xde => 0x6666, 0xdf => 0x8d3f, 0xe0 => 0x79fd, 0xe1 => 0x4f1a, 0xe2 => 0x70e9, 0xe3 => 0x6c47, 0xe4 => 0x8bb3, 0xe5 => 0x8bf2, 0xe6 => 0x7ed8, 0xe7 => 0x8364, 0xe8 => 0x660f, 0xe9 => 0x5a5a, 0xea => 0x9b42, 0xeb => 0x6d51, 0xec => 0x6df7, 0xed => 0x8c41, 0xee => 0x6d3b, 0xef => 0x4f19, 0xf0 => 0x706b, 0xf1 => 0x83b7, 0xf2 => 0x6216, 0xf3 => 0x60d1, 0xf4 => 0x970d, 0xf5 => 0x8d27, 0xf6 => 0x7978, 0xf7 => 0x51fb, 0xf8 => 0x573e, 0xf9 => 0x57fa, 0xfa => 0x673a, 0xfb => 0x7578, 0xfc => 0x7a3d, 0xfd => 0x79ef, 0xfe => 0x7b95, }, 0xbc => { 0xa1 => 0x808c, 0xa2 => 0x9965, 0xa3 => 0x8ff9, 0xa4 => 0x6fc0, 0xa5 => 0x8ba5, 0xa6 => 0x9e21, 0xa7 => 0x59ec, 0xa8 => 0x7ee9, 0xa9 => 0x7f09, 0xaa => 0x5409, 0xab => 0x6781, 0xac => 0x68d8, 0xad => 0x8f91, 0xae => 0x7c4d, 0xaf => 0x96c6, 0xb0 => 0x53ca, 0xb1 => 0x6025, 0xb2 => 0x75be, 0xb3 => 0x6c72, 0xb4 => 0x5373, 0xb5 => 0x5ac9, 0xb6 => 0x7ea7, 0xb7 => 0x6324, 0xb8 => 0x51e0, 0xb9 => 0x810a, 0xba => 0x5df1, 0xbb => 0x84df, 0xbc => 0x6280, 0xbd => 0x5180, 0xbe => 0x5b63, 0xbf => 0x4f0e, 0xc0 => 0x796d, 0xc1 => 0x5242, 0xc2 => 0x60b8, 0xc3 => 0x6d4e, 0xc4 => 0x5bc4, 0xc5 => 0x5bc2, 0xc6 => 0x8ba1, 0xc7 => 0x8bb0, 0xc8 => 0x65e2, 0xc9 => 0x5fcc, 0xca => 0x9645, 0xcb => 0x5993, 0xcc => 0x7ee7, 0xcd => 0x7eaa, 0xce => 0x5609, 0xcf => 0x67b7, 0xd0 => 0x5939, 0xd1 => 0x4f73, 0xd2 => 0x5bb6, 0xd3 => 0x52a0, 0xd4 => 0x835a, 0xd5 => 0x988a, 0xd6 => 0x8d3e, 0xd7 => 0x7532, 0xd8 => 0x94be, 0xd9 => 0x5047, 0xda => 0x7a3c, 0xdb => 0x4ef7, 0xdc => 0x67b6, 0xdd => 0x9a7e, 0xde => 0x5ac1, 0xdf => 0x6b7c, 0xe0 => 0x76d1, 0xe1 => 0x575a, 0xe2 => 0x5c16, 0xe3 => 0x7b3a, 0xe4 => 0x95f4, 0xe5 => 0x714e, 0xe6 => 0x517c, 0xe7 => 0x80a9, 0xe8 => 0x8270, 0xe9 => 0x5978, 0xea => 0x7f04, 0xeb => 0x8327, 0xec => 0x68c0, 0xed => 0x67ec, 0xee => 0x78b1, 0xef => 0x7877, 0xf0 => 0x62e3, 0xf1 => 0x6361, 0xf2 => 0x7b80, 0xf3 => 0x4fed, 0xf4 => 0x526a, 0xf5 => 0x51cf, 0xf6 => 0x8350, 0xf7 => 0x69db, 0xf8 => 0x9274, 0xf9 => 0x8df5, 0xfa => 0x8d31, 0xfb => 0x89c1, 0xfc => 0x952e, 0xfd => 0x7bad, 0xfe => 0x4ef6, }, 0xbd => { 0xa1 => 0x5065, 0xa2 => 0x8230, 0xa3 => 0x5251, 0xa4 => 0x996f, 0xa5 => 0x6e10, 0xa6 => 0x6e85, 0xa7 => 0x6da7, 0xa8 => 0x5efa, 0xa9 => 0x50f5, 0xaa => 0x59dc, 0xab => 0x5c06, 0xac => 0x6d46, 0xad => 0x6c5f, 0xae => 0x7586, 0xaf => 0x848b, 0xb0 => 0x6868, 0xb1 => 0x5956, 0xb2 => 0x8bb2, 0xb3 => 0x5320, 0xb4 => 0x9171, 0xb5 => 0x964d, 0xb6 => 0x8549, 0xb7 => 0x6912, 0xb8 => 0x7901, 0xb9 => 0x7126, 0xba => 0x80f6, 0xbb => 0x4ea4, 0xbc => 0x90ca, 0xbd => 0x6d47, 0xbe => 0x9a84, 0xbf => 0x5a07, 0xc0 => 0x56bc, 0xc1 => 0x6405, 0xc2 => 0x94f0, 0xc3 => 0x77eb, 0xc4 => 0x4fa5, 0xc5 => 0x811a, 0xc6 => 0x72e1, 0xc7 => 0x89d2, 0xc8 => 0x997a, 0xc9 => 0x7f34, 0xca => 0x7ede, 0xcb => 0x527f, 0xcc => 0x6559, 0xcd => 0x9175, 0xce => 0x8f7f, 0xcf => 0x8f83, 0xd0 => 0x53eb, 0xd1 => 0x7a96, 0xd2 => 0x63ed, 0xd3 => 0x63a5, 0xd4 => 0x7686, 0xd5 => 0x79f8, 0xd6 => 0x8857, 0xd7 => 0x9636, 0xd8 => 0x622a, 0xd9 => 0x52ab, 0xda => 0x8282, 0xdb => 0x6854, 0xdc => 0x6770, 0xdd => 0x6377, 0xde => 0x776b, 0xdf => 0x7aed, 0xe0 => 0x6d01, 0xe1 => 0x7ed3, 0xe2 => 0x89e3, 0xe3 => 0x59d0, 0xe4 => 0x6212, 0xe5 => 0x85c9, 0xe6 => 0x82a5, 0xe7 => 0x754c, 0xe8 => 0x501f, 0xe9 => 0x4ecb, 0xea => 0x75a5, 0xeb => 0x8beb, 0xec => 0x5c4a, 0xed => 0x5dfe, 0xee => 0x7b4b, 0xef => 0x65a4, 0xf0 => 0x91d1, 0xf1 => 0x4eca, 0xf2 => 0x6d25, 0xf3 => 0x895f, 0xf4 => 0x7d27, 0xf5 => 0x9526, 0xf6 => 0x4ec5, 0xf7 => 0x8c28, 0xf8 => 0x8fdb, 0xf9 => 0x9773, 0xfa => 0x664b, 0xfb => 0x7981, 0xfc => 0x8fd1, 0xfd => 0x70ec, 0xfe => 0x6d78, }, 0xbe => { 0xa1 => 0x5c3d, 0xa2 => 0x52b2, 0xa3 => 0x8346, 0xa4 => 0x5162, 0xa5 => 0x830e, 0xa6 => 0x775b, 0xa7 => 0x6676, 0xa8 => 0x9cb8, 0xa9 => 0x4eac, 0xaa => 0x60ca, 0xab => 0x7cbe, 0xac => 0x7cb3, 0xad => 0x7ecf, 0xae => 0x4e95, 0xaf => 0x8b66, 0xb0 => 0x666f, 0xb1 => 0x9888, 0xb2 => 0x9759, 0xb3 => 0x5883, 0xb4 => 0x656c, 0xb5 => 0x955c, 0xb6 => 0x5f84, 0xb7 => 0x75c9, 0xb8 => 0x9756, 0xb9 => 0x7adf, 0xba => 0x7ade, 0xbb => 0x51c0, 0xbc => 0x70af, 0xbd => 0x7a98, 0xbe => 0x63ea, 0xbf => 0x7a76, 0xc0 => 0x7ea0, 0xc1 => 0x7396, 0xc2 => 0x97ed, 0xc3 => 0x4e45, 0xc4 => 0x7078, 0xc5 => 0x4e5d, 0xc6 => 0x9152, 0xc7 => 0x53a9, 0xc8 => 0x6551, 0xc9 => 0x65e7, 0xca => 0x81fc, 0xcb => 0x8205, 0xcc => 0x548e, 0xcd => 0x5c31, 0xce => 0x759a, 0xcf => 0x97a0, 0xd0 => 0x62d8, 0xd1 => 0x72d9, 0xd2 => 0x75bd, 0xd3 => 0x5c45, 0xd4 => 0x9a79, 0xd5 => 0x83ca, 0xd6 => 0x5c40, 0xd7 => 0x5480, 0xd8 => 0x77e9, 0xd9 => 0x4e3e, 0xda => 0x6cae, 0xdb => 0x805a, 0xdc => 0x62d2, 0xdd => 0x636e, 0xde => 0x5de8, 0xdf => 0x5177, 0xe0 => 0x8ddd, 0xe1 => 0x8e1e, 0xe2 => 0x952f, 0xe3 => 0x4ff1, 0xe4 => 0x53e5, 0xe5 => 0x60e7, 0xe6 => 0x70ac, 0xe7 => 0x5267, 0xe8 => 0x6350, 0xe9 => 0x9e43, 0xea => 0x5a1f, 0xeb => 0x5026, 0xec => 0x7737, 0xed => 0x5377, 0xee => 0x7ee2, 0xef => 0x6485, 0xf0 => 0x652b, 0xf1 => 0x6289, 0xf2 => 0x6398, 0xf3 => 0x5014, 0xf4 => 0x7235, 0xf5 => 0x89c9, 0xf6 => 0x51b3, 0xf7 => 0x8bc0, 0xf8 => 0x7edd, 0xf9 => 0x5747, 0xfa => 0x83cc, 0xfb => 0x94a7, 0xfc => 0x519b, 0xfd => 0x541b, 0xfe => 0x5cfb, }, 0xbf => { 0xa1 => 0x4fca, 0xa2 => 0x7ae3, 0xa3 => 0x6d5a, 0xa4 => 0x90e1, 0xa5 => 0x9a8f, 0xa6 => 0x5580, 0xa7 => 0x5496, 0xa8 => 0x5361, 0xa9 => 0x54af, 0xaa => 0x5f00, 0xab => 0x63e9, 0xac => 0x6977, 0xad => 0x51ef, 0xae => 0x6168, 0xaf => 0x520a, 0xb0 => 0x582a, 0xb1 => 0x52d8, 0xb2 => 0x574e, 0xb3 => 0x780d, 0xb4 => 0x770b, 0xb5 => 0x5eb7, 0xb6 => 0x6177, 0xb7 => 0x7ce0, 0xb8 => 0x625b, 0xb9 => 0x6297, 0xba => 0x4ea2, 0xbb => 0x7095, 0xbc => 0x8003, 0xbd => 0x62f7, 0xbe => 0x70e4, 0xbf => 0x9760, 0xc0 => 0x5777, 0xc1 => 0x82db, 0xc2 => 0x67ef, 0xc3 => 0x68f5, 0xc4 => 0x78d5, 0xc5 => 0x9897, 0xc6 => 0x79d1, 0xc7 => 0x58f3, 0xc8 => 0x54b3, 0xc9 => 0x53ef, 0xca => 0x6e34, 0xcb => 0x514b, 0xcc => 0x523b, 0xcd => 0x5ba2, 0xce => 0x8bfe, 0xcf => 0x80af, 0xd0 => 0x5543, 0xd1 => 0x57a6, 0xd2 => 0x6073, 0xd3 => 0x5751, 0xd4 => 0x542d, 0xd5 => 0x7a7a, 0xd6 => 0x6050, 0xd7 => 0x5b54, 0xd8 => 0x63a7, 0xd9 => 0x62a0, 0xda => 0x53e3, 0xdb => 0x6263, 0xdc => 0x5bc7, 0xdd => 0x67af, 0xde => 0x54ed, 0xdf => 0x7a9f, 0xe0 => 0x82e6, 0xe1 => 0x9177, 0xe2 => 0x5e93, 0xe3 => 0x88e4, 0xe4 => 0x5938, 0xe5 => 0x57ae, 0xe6 => 0x630e, 0xe7 => 0x8de8, 0xe8 => 0x80ef, 0xe9 => 0x5757, 0xea => 0x7b77, 0xeb => 0x4fa9, 0xec => 0x5feb, 0xed => 0x5bbd, 0xee => 0x6b3e, 0xef => 0x5321, 0xf0 => 0x7b50, 0xf1 => 0x72c2, 0xf2 => 0x6846, 0xf3 => 0x77ff, 0xf4 => 0x7736, 0xf5 => 0x65f7, 0xf6 => 0x51b5, 0xf7 => 0x4e8f, 0xf8 => 0x76d4, 0xf9 => 0x5cbf, 0xfa => 0x7aa5, 0xfb => 0x8475, 0xfc => 0x594e, 0xfd => 0x9b41, 0xfe => 0x5080, }, 0xc0 => { 0xa1 => 0x9988, 0xa2 => 0x6127, 0xa3 => 0x6e83, 0xa4 => 0x5764, 0xa5 => 0x6606, 0xa6 => 0x6346, 0xa7 => 0x56f0, 0xa8 => 0x62ec, 0xa9 => 0x6269, 0xaa => 0x5ed3, 0xab => 0x9614, 0xac => 0x5783, 0xad => 0x62c9, 0xae => 0x5587, 0xaf => 0x8721, 0xb0 => 0x814a, 0xb1 => 0x8fa3, 0xb2 => 0x5566, 0xb3 => 0x83b1, 0xb4 => 0x6765, 0xb5 => 0x8d56, 0xb6 => 0x84dd, 0xb7 => 0x5a6a, 0xb8 => 0x680f, 0xb9 => 0x62e6, 0xba => 0x7bee, 0xbb => 0x9611, 0xbc => 0x5170, 0xbd => 0x6f9c, 0xbe => 0x8c30, 0xbf => 0x63fd, 0xc0 => 0x89c8, 0xc1 => 0x61d2, 0xc2 => 0x7f06, 0xc3 => 0x70c2, 0xc4 => 0x6ee5, 0xc5 => 0x7405, 0xc6 => 0x6994, 0xc7 => 0x72fc, 0xc8 => 0x5eca, 0xc9 => 0x90ce, 0xca => 0x6717, 0xcb => 0x6d6a, 0xcc => 0x635e, 0xcd => 0x52b3, 0xce => 0x7262, 0xcf => 0x8001, 0xd0 => 0x4f6c, 0xd1 => 0x59e5, 0xd2 => 0x916a, 0xd3 => 0x70d9, 0xd4 => 0x6d9d, 0xd5 => 0x52d2, 0xd6 => 0x4e50, 0xd7 => 0x96f7, 0xd8 => 0x956d, 0xd9 => 0x857e, 0xda => 0x78ca, 0xdb => 0x7d2f, 0xdc => 0x5121, 0xdd => 0x5792, 0xde => 0x64c2, 0xdf => 0x808b, 0xe0 => 0x7c7b, 0xe1 => 0x6cea, 0xe2 => 0x68f1, 0xe3 => 0x695e, 0xe4 => 0x51b7, 0xe5 => 0x5398, 0xe6 => 0x68a8, 0xe7 => 0x7281, 0xe8 => 0x9ece, 0xe9 => 0x7bf1, 0xea => 0x72f8, 0xeb => 0x79bb, 0xec => 0x6f13, 0xed => 0x7406, 0xee => 0x674e, 0xef => 0x91cc, 0xf0 => 0x9ca4, 0xf1 => 0x793c, 0xf2 => 0x8389, 0xf3 => 0x8354, 0xf4 => 0x540f, 0xf5 => 0x6817, 0xf6 => 0x4e3d, 0xf7 => 0x5389, 0xf8 => 0x52b1, 0xf9 => 0x783e, 0xfa => 0x5386, 0xfb => 0x5229, 0xfc => 0x5088, 0xfd => 0x4f8b, 0xfe => 0x4fd0, }, 0xc1 => { 0xa1 => 0x75e2, 0xa2 => 0x7acb, 0xa3 => 0x7c92, 0xa4 => 0x6ca5, 0xa5 => 0x96b6, 0xa6 => 0x529b, 0xa7 => 0x7483, 0xa8 => 0x54e9, 0xa9 => 0x4fe9, 0xaa => 0x8054, 0xab => 0x83b2, 0xac => 0x8fde, 0xad => 0x9570, 0xae => 0x5ec9, 0xaf => 0x601c, 0xb0 => 0x6d9f, 0xb1 => 0x5e18, 0xb2 => 0x655b, 0xb3 => 0x8138, 0xb4 => 0x94fe, 0xb5 => 0x604b, 0xb6 => 0x70bc, 0xb7 => 0x7ec3, 0xb8 => 0x7cae, 0xb9 => 0x51c9, 0xba => 0x6881, 0xbb => 0x7cb1, 0xbc => 0x826f, 0xbd => 0x4e24, 0xbe => 0x8f86, 0xbf => 0x91cf, 0xc0 => 0x667e, 0xc1 => 0x4eae, 0xc2 => 0x8c05, 0xc3 => 0x64a9, 0xc4 => 0x804a, 0xc5 => 0x50da, 0xc6 => 0x7597, 0xc7 => 0x71ce, 0xc8 => 0x5be5, 0xc9 => 0x8fbd, 0xca => 0x6f66, 0xcb => 0x4e86, 0xcc => 0x6482, 0xcd => 0x9563, 0xce => 0x5ed6, 0xcf => 0x6599, 0xd0 => 0x5217, 0xd1 => 0x88c2, 0xd2 => 0x70c8, 0xd3 => 0x52a3, 0xd4 => 0x730e, 0xd5 => 0x7433, 0xd6 => 0x6797, 0xd7 => 0x78f7, 0xd8 => 0x9716, 0xd9 => 0x4e34, 0xda => 0x90bb, 0xdb => 0x9cde, 0xdc => 0x6dcb, 0xdd => 0x51db, 0xde => 0x8d41, 0xdf => 0x541d, 0xe0 => 0x62ce, 0xe1 => 0x73b2, 0xe2 => 0x83f1, 0xe3 => 0x96f6, 0xe4 => 0x9f84, 0xe5 => 0x94c3, 0xe6 => 0x4f36, 0xe7 => 0x7f9a, 0xe8 => 0x51cc, 0xe9 => 0x7075, 0xea => 0x9675, 0xeb => 0x5cad, 0xec => 0x9886, 0xed => 0x53e6, 0xee => 0x4ee4, 0xef => 0x6e9c, 0xf0 => 0x7409, 0xf1 => 0x69b4, 0xf2 => 0x786b, 0xf3 => 0x998f, 0xf4 => 0x7559, 0xf5 => 0x5218, 0xf6 => 0x7624, 0xf7 => 0x6d41, 0xf8 => 0x67f3, 0xf9 => 0x516d, 0xfa => 0x9f99, 0xfb => 0x804b, 0xfc => 0x5499, 0xfd => 0x7b3c, 0xfe => 0x7abf, }, 0xc2 => { 0xa1 => 0x9686, 0xa2 => 0x5784, 0xa3 => 0x62e2, 0xa4 => 0x9647, 0xa5 => 0x697c, 0xa6 => 0x5a04, 0xa7 => 0x6402, 0xa8 => 0x7bd3, 0xa9 => 0x6f0f, 0xaa => 0x964b, 0xab => 0x82a6, 0xac => 0x5362, 0xad => 0x9885, 0xae => 0x5e90, 0xaf => 0x7089, 0xb0 => 0x63b3, 0xb1 => 0x5364, 0xb2 => 0x864f, 0xb3 => 0x9c81, 0xb4 => 0x9e93, 0xb5 => 0x788c, 0xb6 => 0x9732, 0xb7 => 0x8def, 0xb8 => 0x8d42, 0xb9 => 0x9e7f, 0xba => 0x6f5e, 0xbb => 0x7984, 0xbc => 0x5f55, 0xbd => 0x9646, 0xbe => 0x622e, 0xbf => 0x9a74, 0xc0 => 0x5415, 0xc1 => 0x94dd, 0xc2 => 0x4fa3, 0xc3 => 0x65c5, 0xc4 => 0x5c65, 0xc5 => 0x5c61, 0xc6 => 0x7f15, 0xc7 => 0x8651, 0xc8 => 0x6c2f, 0xc9 => 0x5f8b, 0xca => 0x7387, 0xcb => 0x6ee4, 0xcc => 0x7eff, 0xcd => 0x5ce6, 0xce => 0x631b, 0xcf => 0x5b6a, 0xd0 => 0x6ee6, 0xd1 => 0x5375, 0xd2 => 0x4e71, 0xd3 => 0x63a0, 0xd4 => 0x7565, 0xd5 => 0x62a1, 0xd6 => 0x8f6e, 0xd7 => 0x4f26, 0xd8 => 0x4ed1, 0xd9 => 0x6ca6, 0xda => 0x7eb6, 0xdb => 0x8bba, 0xdc => 0x841d, 0xdd => 0x87ba, 0xde => 0x7f57, 0xdf => 0x903b, 0xe0 => 0x9523, 0xe1 => 0x7ba9, 0xe2 => 0x9aa1, 0xe3 => 0x88f8, 0xe4 => 0x843d, 0xe5 => 0x6d1b, 0xe6 => 0x9a86, 0xe7 => 0x7edc, 0xe8 => 0x5988, 0xe9 => 0x9ebb, 0xea => 0x739b, 0xeb => 0x7801, 0xec => 0x8682, 0xed => 0x9a6c, 0xee => 0x9a82, 0xef => 0x561b, 0xf0 => 0x5417, 0xf1 => 0x57cb, 0xf2 => 0x4e70, 0xf3 => 0x9ea6, 0xf4 => 0x5356, 0xf5 => 0x8fc8, 0xf6 => 0x8109, 0xf7 => 0x7792, 0xf8 => 0x9992, 0xf9 => 0x86ee, 0xfa => 0x6ee1, 0xfb => 0x8513, 0xfc => 0x66fc, 0xfd => 0x6162, 0xfe => 0x6f2b, }, 0xc3 => { 0xa1 => 0x8c29, 0xa2 => 0x8292, 0xa3 => 0x832b, 0xa4 => 0x76f2, 0xa5 => 0x6c13, 0xa6 => 0x5fd9, 0xa7 => 0x83bd, 0xa8 => 0x732b, 0xa9 => 0x8305, 0xaa => 0x951a, 0xab => 0x6bdb, 0xac => 0x77db, 0xad => 0x94c6, 0xae => 0x536f, 0xaf => 0x8302, 0xb0 => 0x5192, 0xb1 => 0x5e3d, 0xb2 => 0x8c8c, 0xb3 => 0x8d38, 0xb4 => 0x4e48, 0xb5 => 0x73ab, 0xb6 => 0x679a, 0xb7 => 0x6885, 0xb8 => 0x9176, 0xb9 => 0x9709, 0xba => 0x7164, 0xbb => 0x6ca1, 0xbc => 0x7709, 0xbd => 0x5a92, 0xbe => 0x9541, 0xbf => 0x6bcf, 0xc0 => 0x7f8e, 0xc1 => 0x6627, 0xc2 => 0x5bd0, 0xc3 => 0x59b9, 0xc4 => 0x5a9a, 0xc5 => 0x95e8, 0xc6 => 0x95f7, 0xc7 => 0x4eec, 0xc8 => 0x840c, 0xc9 => 0x8499, 0xca => 0x6aac, 0xcb => 0x76df, 0xcc => 0x9530, 0xcd => 0x731b, 0xce => 0x68a6, 0xcf => 0x5b5f, 0xd0 => 0x772f, 0xd1 => 0x919a, 0xd2 => 0x9761, 0xd3 => 0x7cdc, 0xd4 => 0x8ff7, 0xd5 => 0x8c1c, 0xd6 => 0x5f25, 0xd7 => 0x7c73, 0xd8 => 0x79d8, 0xd9 => 0x89c5, 0xda => 0x6ccc, 0xdb => 0x871c, 0xdc => 0x5bc6, 0xdd => 0x5e42, 0xde => 0x68c9, 0xdf => 0x7720, 0xe0 => 0x7ef5, 0xe1 => 0x5195, 0xe2 => 0x514d, 0xe3 => 0x52c9, 0xe4 => 0x5a29, 0xe5 => 0x7f05, 0xe6 => 0x9762, 0xe7 => 0x82d7, 0xe8 => 0x63cf, 0xe9 => 0x7784, 0xea => 0x85d0, 0xeb => 0x79d2, 0xec => 0x6e3a, 0xed => 0x5e99, 0xee => 0x5999, 0xef => 0x8511, 0xf0 => 0x706d, 0xf1 => 0x6c11, 0xf2 => 0x62bf, 0xf3 => 0x76bf, 0xf4 => 0x654f, 0xf5 => 0x60af, 0xf6 => 0x95fd, 0xf7 => 0x660e, 0xf8 => 0x879f, 0xf9 => 0x9e23, 0xfa => 0x94ed, 0xfb => 0x540d, 0xfc => 0x547d, 0xfd => 0x8c2c, 0xfe => 0x6478, }, 0xc4 => { 0xa1 => 0x6479, 0xa2 => 0x8611, 0xa3 => 0x6a21, 0xa4 => 0x819c, 0xa5 => 0x78e8, 0xa6 => 0x6469, 0xa7 => 0x9b54, 0xa8 => 0x62b9, 0xa9 => 0x672b, 0xaa => 0x83ab, 0xab => 0x58a8, 0xac => 0x9ed8, 0xad => 0x6cab, 0xae => 0x6f20, 0xaf => 0x5bde, 0xb0 => 0x964c, 0xb1 => 0x8c0b, 0xb2 => 0x725f, 0xb3 => 0x67d0, 0xb4 => 0x62c7, 0xb5 => 0x7261, 0xb6 => 0x4ea9, 0xb7 => 0x59c6, 0xb8 => 0x6bcd, 0xb9 => 0x5893, 0xba => 0x66ae, 0xbb => 0x5e55, 0xbc => 0x52df, 0xbd => 0x6155, 0xbe => 0x6728, 0xbf => 0x76ee, 0xc0 => 0x7766, 0xc1 => 0x7267, 0xc2 => 0x7a46, 0xc3 => 0x62ff, 0xc4 => 0x54ea, 0xc5 => 0x5450, 0xc6 => 0x94a0, 0xc7 => 0x90a3, 0xc8 => 0x5a1c, 0xc9 => 0x7eb3, 0xca => 0x6c16, 0xcb => 0x4e43, 0xcc => 0x5976, 0xcd => 0x8010, 0xce => 0x5948, 0xcf => 0x5357, 0xd0 => 0x7537, 0xd1 => 0x96be, 0xd2 => 0x56ca, 0xd3 => 0x6320, 0xd4 => 0x8111, 0xd5 => 0x607c, 0xd6 => 0x95f9, 0xd7 => 0x6dd6, 0xd8 => 0x5462, 0xd9 => 0x9981, 0xda => 0x5185, 0xdb => 0x5ae9, 0xdc => 0x80fd, 0xdd => 0x59ae, 0xde => 0x9713, 0xdf => 0x502a, 0xe0 => 0x6ce5, 0xe1 => 0x5c3c, 0xe2 => 0x62df, 0xe3 => 0x4f60, 0xe4 => 0x533f, 0xe5 => 0x817b, 0xe6 => 0x9006, 0xe7 => 0x6eba, 0xe8 => 0x852b, 0xe9 => 0x62c8, 0xea => 0x5e74, 0xeb => 0x78be, 0xec => 0x64b5, 0xed => 0x637b, 0xee => 0x5ff5, 0xef => 0x5a18, 0xf0 => 0x917f, 0xf1 => 0x9e1f, 0xf2 => 0x5c3f, 0xf3 => 0x634f, 0xf4 => 0x8042, 0xf5 => 0x5b7d, 0xf6 => 0x556e, 0xf7 => 0x954a, 0xf8 => 0x954d, 0xf9 => 0x6d85, 0xfa => 0x60a8, 0xfb => 0x67e0, 0xfc => 0x72de, 0xfd => 0x51dd, 0xfe => 0x5b81, }, 0xc5 => { 0xa1 => 0x62e7, 0xa2 => 0x6cde, 0xa3 => 0x725b, 0xa4 => 0x626d, 0xa5 => 0x94ae, 0xa6 => 0x7ebd, 0xa7 => 0x8113, 0xa8 => 0x6d53, 0xa9 => 0x519c, 0xaa => 0x5f04, 0xab => 0x5974, 0xac => 0x52aa, 0xad => 0x6012, 0xae => 0x5973, 0xaf => 0x6696, 0xb0 => 0x8650, 0xb1 => 0x759f, 0xb2 => 0x632a, 0xb3 => 0x61e6, 0xb4 => 0x7cef, 0xb5 => 0x8bfa, 0xb6 => 0x54e6, 0xb7 => 0x6b27, 0xb8 => 0x9e25, 0xb9 => 0x6bb4, 0xba => 0x85d5, 0xbb => 0x5455, 0xbc => 0x5076, 0xbd => 0x6ca4, 0xbe => 0x556a, 0xbf => 0x8db4, 0xc0 => 0x722c, 0xc1 => 0x5e15, 0xc2 => 0x6015, 0xc3 => 0x7436, 0xc4 => 0x62cd, 0xc5 => 0x6392, 0xc6 => 0x724c, 0xc7 => 0x5f98, 0xc8 => 0x6e43, 0xc9 => 0x6d3e, 0xca => 0x6500, 0xcb => 0x6f58, 0xcc => 0x76d8, 0xcd => 0x78d0, 0xce => 0x76fc, 0xcf => 0x7554, 0xd0 => 0x5224, 0xd1 => 0x53db, 0xd2 => 0x4e53, 0xd3 => 0x5e9e, 0xd4 => 0x65c1, 0xd5 => 0x802a, 0xd6 => 0x80d6, 0xd7 => 0x629b, 0xd8 => 0x5486, 0xd9 => 0x5228, 0xda => 0x70ae, 0xdb => 0x888d, 0xdc => 0x8dd1, 0xdd => 0x6ce1, 0xde => 0x5478, 0xdf => 0x80da, 0xe0 => 0x57f9, 0xe1 => 0x88f4, 0xe2 => 0x8d54, 0xe3 => 0x966a, 0xe4 => 0x914d, 0xe5 => 0x4f69, 0xe6 => 0x6c9b, 0xe7 => 0x55b7, 0xe8 => 0x76c6, 0xe9 => 0x7830, 0xea => 0x62a8, 0xeb => 0x70f9, 0xec => 0x6f8e, 0xed => 0x5f6d, 0xee => 0x84ec, 0xef => 0x68da, 0xf0 => 0x787c, 0xf1 => 0x7bf7, 0xf2 => 0x81a8, 0xf3 => 0x670b, 0xf4 => 0x9e4f, 0xf5 => 0x6367, 0xf6 => 0x78b0, 0xf7 => 0x576f, 0xf8 => 0x7812, 0xf9 => 0x9739, 0xfa => 0x6279, 0xfb => 0x62ab, 0xfc => 0x5288, 0xfd => 0x7435, 0xfe => 0x6bd7, }, 0xc6 => { 0xa1 => 0x5564, 0xa2 => 0x813e, 0xa3 => 0x75b2, 0xa4 => 0x76ae, 0xa5 => 0x5339, 0xa6 => 0x75de, 0xa7 => 0x50fb, 0xa8 => 0x5c41, 0xa9 => 0x8b6c, 0xaa => 0x7bc7, 0xab => 0x504f, 0xac => 0x7247, 0xad => 0x9a97, 0xae => 0x98d8, 0xaf => 0x6f02, 0xb0 => 0x74e2, 0xb1 => 0x7968, 0xb2 => 0x6487, 0xb3 => 0x77a5, 0xb4 => 0x62fc, 0xb5 => 0x9891, 0xb6 => 0x8d2b, 0xb7 => 0x54c1, 0xb8 => 0x8058, 0xb9 => 0x4e52, 0xba => 0x576a, 0xbb => 0x82f9, 0xbc => 0x840d, 0xbd => 0x5e73, 0xbe => 0x51ed, 0xbf => 0x74f6, 0xc0 => 0x8bc4, 0xc1 => 0x5c4f, 0xc2 => 0x5761, 0xc3 => 0x6cfc, 0xc4 => 0x9887, 0xc5 => 0x5a46, 0xc6 => 0x7834, 0xc7 => 0x9b44, 0xc8 => 0x8feb, 0xc9 => 0x7c95, 0xca => 0x5256, 0xcb => 0x6251, 0xcc => 0x94fa, 0xcd => 0x4ec6, 0xce => 0x8386, 0xcf => 0x8461, 0xd0 => 0x83e9, 0xd1 => 0x84b2, 0xd2 => 0x57d4, 0xd3 => 0x6734, 0xd4 => 0x5703, 0xd5 => 0x666e, 0xd6 => 0x6d66, 0xd7 => 0x8c31, 0xd8 => 0x66dd, 0xd9 => 0x7011, 0xda => 0x671f, 0xdb => 0x6b3a, 0xdc => 0x6816, 0xdd => 0x621a, 0xde => 0x59bb, 0xdf => 0x4e03, 0xe0 => 0x51c4, 0xe1 => 0x6f06, 0xe2 => 0x67d2, 0xe3 => 0x6c8f, 0xe4 => 0x5176, 0xe5 => 0x68cb, 0xe6 => 0x5947, 0xe7 => 0x6b67, 0xe8 => 0x7566, 0xe9 => 0x5d0e, 0xea => 0x8110, 0xeb => 0x9f50, 0xec => 0x65d7, 0xed => 0x7948, 0xee => 0x7941, 0xef => 0x9a91, 0xf0 => 0x8d77, 0xf1 => 0x5c82, 0xf2 => 0x4e5e, 0xf3 => 0x4f01, 0xf4 => 0x542f, 0xf5 => 0x5951, 0xf6 => 0x780c, 0xf7 => 0x5668, 0xf8 => 0x6c14, 0xf9 => 0x8fc4, 0xfa => 0x5f03, 0xfb => 0x6c7d, 0xfc => 0x6ce3, 0xfd => 0x8bab, 0xfe => 0x6390, }, 0xc7 => { 0xa1 => 0x6070, 0xa2 => 0x6d3d, 0xa3 => 0x7275, 0xa4 => 0x6266, 0xa5 => 0x948e, 0xa6 => 0x94c5, 0xa7 => 0x5343, 0xa8 => 0x8fc1, 0xa9 => 0x7b7e, 0xaa => 0x4edf, 0xab => 0x8c26, 0xac => 0x4e7e, 0xad => 0x9ed4, 0xae => 0x94b1, 0xaf => 0x94b3, 0xb0 => 0x524d, 0xb1 => 0x6f5c, 0xb2 => 0x9063, 0xb3 => 0x6d45, 0xb4 => 0x8c34, 0xb5 => 0x5811, 0xb6 => 0x5d4c, 0xb7 => 0x6b20, 0xb8 => 0x6b49, 0xb9 => 0x67aa, 0xba => 0x545b, 0xbb => 0x8154, 0xbc => 0x7f8c, 0xbd => 0x5899, 0xbe => 0x8537, 0xbf => 0x5f3a, 0xc0 => 0x62a2, 0xc1 => 0x6a47, 0xc2 => 0x9539, 0xc3 => 0x6572, 0xc4 => 0x6084, 0xc5 => 0x6865, 0xc6 => 0x77a7, 0xc7 => 0x4e54, 0xc8 => 0x4fa8, 0xc9 => 0x5de7, 0xca => 0x9798, 0xcb => 0x64ac, 0xcc => 0x7fd8, 0xcd => 0x5ced, 0xce => 0x4fcf, 0xcf => 0x7a8d, 0xd0 => 0x5207, 0xd1 => 0x8304, 0xd2 => 0x4e14, 0xd3 => 0x602f, 0xd4 => 0x7a83, 0xd5 => 0x94a6, 0xd6 => 0x4fb5, 0xd7 => 0x4eb2, 0xd8 => 0x79e6, 0xd9 => 0x7434, 0xda => 0x52e4, 0xdb => 0x82b9, 0xdc => 0x64d2, 0xdd => 0x79bd, 0xde => 0x5bdd, 0xdf => 0x6c81, 0xe0 => 0x9752, 0xe1 => 0x8f7b, 0xe2 => 0x6c22, 0xe3 => 0x503e, 0xe4 => 0x537f, 0xe5 => 0x6e05, 0xe6 => 0x64ce, 0xe7 => 0x6674, 0xe8 => 0x6c30, 0xe9 => 0x60c5, 0xea => 0x9877, 0xeb => 0x8bf7, 0xec => 0x5e86, 0xed => 0x743c, 0xee => 0x7a77, 0xef => 0x79cb, 0xf0 => 0x4e18, 0xf1 => 0x90b1, 0xf2 => 0x7403, 0xf3 => 0x6c42, 0xf4 => 0x56da, 0xf5 => 0x914b, 0xf6 => 0x6cc5, 0xf7 => 0x8d8b, 0xf8 => 0x533a, 0xf9 => 0x86c6, 0xfa => 0x66f2, 0xfb => 0x8eaf, 0xfc => 0x5c48, 0xfd => 0x9a71, 0xfe => 0x6e20, }, 0xc8 => { 0xa1 => 0x53d6, 0xa2 => 0x5a36, 0xa3 => 0x9f8b, 0xa4 => 0x8da3, 0xa5 => 0x53bb, 0xa6 => 0x5708, 0xa7 => 0x98a7, 0xa8 => 0x6743, 0xa9 => 0x919b, 0xaa => 0x6cc9, 0xab => 0x5168, 0xac => 0x75ca, 0xad => 0x62f3, 0xae => 0x72ac, 0xaf => 0x5238, 0xb0 => 0x529d, 0xb1 => 0x7f3a, 0xb2 => 0x7094, 0xb3 => 0x7638, 0xb4 => 0x5374, 0xb5 => 0x9e4a, 0xb6 => 0x69b7, 0xb7 => 0x786e, 0xb8 => 0x96c0, 0xb9 => 0x88d9, 0xba => 0x7fa4, 0xbb => 0x7136, 0xbc => 0x71c3, 0xbd => 0x5189, 0xbe => 0x67d3, 0xbf => 0x74e4, 0xc0 => 0x58e4, 0xc1 => 0x6518, 0xc2 => 0x56b7, 0xc3 => 0x8ba9, 0xc4 => 0x9976, 0xc5 => 0x6270, 0xc6 => 0x7ed5, 0xc7 => 0x60f9, 0xc8 => 0x70ed, 0xc9 => 0x58ec, 0xca => 0x4ec1, 0xcb => 0x4eba, 0xcc => 0x5fcd, 0xcd => 0x97e7, 0xce => 0x4efb, 0xcf => 0x8ba4, 0xd0 => 0x5203, 0xd1 => 0x598a, 0xd2 => 0x7eab, 0xd3 => 0x6254, 0xd4 => 0x4ecd, 0xd5 => 0x65e5, 0xd6 => 0x620e, 0xd7 => 0x8338, 0xd8 => 0x84c9, 0xd9 => 0x8363, 0xda => 0x878d, 0xdb => 0x7194, 0xdc => 0x6eb6, 0xdd => 0x5bb9, 0xde => 0x7ed2, 0xdf => 0x5197, 0xe0 => 0x63c9, 0xe1 => 0x67d4, 0xe2 => 0x8089, 0xe3 => 0x8339, 0xe4 => 0x8815, 0xe5 => 0x5112, 0xe6 => 0x5b7a, 0xe7 => 0x5982, 0xe8 => 0x8fb1, 0xe9 => 0x4e73, 0xea => 0x6c5d, 0xeb => 0x5165, 0xec => 0x8925, 0xed => 0x8f6f, 0xee => 0x962e, 0xef => 0x854a, 0xf0 => 0x745e, 0xf1 => 0x9510, 0xf2 => 0x95f0, 0xf3 => 0x6da6, 0xf4 => 0x82e5, 0xf5 => 0x5f31, 0xf6 => 0x6492, 0xf7 => 0x6d12, 0xf8 => 0x8428, 0xf9 => 0x816e, 0xfa => 0x9cc3, 0xfb => 0x585e, 0xfc => 0x8d5b, 0xfd => 0x4e09, 0xfe => 0x53c1, }, 0xc9 => { 0xa1 => 0x4f1e, 0xa2 => 0x6563, 0xa3 => 0x6851, 0xa4 => 0x55d3, 0xa5 => 0x4e27, 0xa6 => 0x6414, 0xa7 => 0x9a9a, 0xa8 => 0x626b, 0xa9 => 0x5ac2, 0xaa => 0x745f, 0xab => 0x8272, 0xac => 0x6da9, 0xad => 0x68ee, 0xae => 0x50e7, 0xaf => 0x838e, 0xb0 => 0x7802, 0xb1 => 0x6740, 0xb2 => 0x5239, 0xb3 => 0x6c99, 0xb4 => 0x7eb1, 0xb5 => 0x50bb, 0xb6 => 0x5565, 0xb7 => 0x715e, 0xb8 => 0x7b5b, 0xb9 => 0x6652, 0xba => 0x73ca, 0xbb => 0x82eb, 0xbc => 0x6749, 0xbd => 0x5c71, 0xbe => 0x5220, 0xbf => 0x717d, 0xc0 => 0x886b, 0xc1 => 0x95ea, 0xc2 => 0x9655, 0xc3 => 0x64c5, 0xc4 => 0x8d61, 0xc5 => 0x81b3, 0xc6 => 0x5584, 0xc7 => 0x6c55, 0xc8 => 0x6247, 0xc9 => 0x7f2e, 0xca => 0x5892, 0xcb => 0x4f24, 0xcc => 0x5546, 0xcd => 0x8d4f, 0xce => 0x664c, 0xcf => 0x4e0a, 0xd0 => 0x5c1a, 0xd1 => 0x88f3, 0xd2 => 0x68a2, 0xd3 => 0x634e, 0xd4 => 0x7a0d, 0xd5 => 0x70e7, 0xd6 => 0x828d, 0xd7 => 0x52fa, 0xd8 => 0x97f6, 0xd9 => 0x5c11, 0xda => 0x54e8, 0xdb => 0x90b5, 0xdc => 0x7ecd, 0xdd => 0x5962, 0xde => 0x8d4a, 0xdf => 0x86c7, 0xe0 => 0x820c, 0xe1 => 0x820d, 0xe2 => 0x8d66, 0xe3 => 0x6444, 0xe4 => 0x5c04, 0xe5 => 0x6151, 0xe6 => 0x6d89, 0xe7 => 0x793e, 0xe8 => 0x8bbe, 0xe9 => 0x7837, 0xea => 0x7533, 0xeb => 0x547b, 0xec => 0x4f38, 0xed => 0x8eab, 0xee => 0x6df1, 0xef => 0x5a20, 0xf0 => 0x7ec5, 0xf1 => 0x795e, 0xf2 => 0x6c88, 0xf3 => 0x5ba1, 0xf4 => 0x5a76, 0xf5 => 0x751a, 0xf6 => 0x80be, 0xf7 => 0x614e, 0xf8 => 0x6e17, 0xf9 => 0x58f0, 0xfa => 0x751f, 0xfb => 0x7525, 0xfc => 0x7272, 0xfd => 0x5347, 0xfe => 0x7ef3, }, 0xca => { 0xa1 => 0x7701, 0xa2 => 0x76db, 0xa3 => 0x5269, 0xa4 => 0x80dc, 0xa5 => 0x5723, 0xa6 => 0x5e08, 0xa7 => 0x5931, 0xa8 => 0x72ee, 0xa9 => 0x65bd, 0xaa => 0x6e7f, 0xab => 0x8bd7, 0xac => 0x5c38, 0xad => 0x8671, 0xae => 0x5341, 0xaf => 0x77f3, 0xb0 => 0x62fe, 0xb1 => 0x65f6, 0xb2 => 0x4ec0, 0xb3 => 0x98df, 0xb4 => 0x8680, 0xb5 => 0x5b9e, 0xb6 => 0x8bc6, 0xb7 => 0x53f2, 0xb8 => 0x77e2, 0xb9 => 0x4f7f, 0xba => 0x5c4e, 0xbb => 0x9a76, 0xbc => 0x59cb, 0xbd => 0x5f0f, 0xbe => 0x793a, 0xbf => 0x58eb, 0xc0 => 0x4e16, 0xc1 => 0x67ff, 0xc2 => 0x4e8b, 0xc3 => 0x62ed, 0xc4 => 0x8a93, 0xc5 => 0x901d, 0xc6 => 0x52bf, 0xc7 => 0x662f, 0xc8 => 0x55dc, 0xc9 => 0x566c, 0xca => 0x9002, 0xcb => 0x4ed5, 0xcc => 0x4f8d, 0xcd => 0x91ca, 0xce => 0x9970, 0xcf => 0x6c0f, 0xd0 => 0x5e02, 0xd1 => 0x6043, 0xd2 => 0x5ba4, 0xd3 => 0x89c6, 0xd4 => 0x8bd5, 0xd5 => 0x6536, 0xd6 => 0x624b, 0xd7 => 0x9996, 0xd8 => 0x5b88, 0xd9 => 0x5bff, 0xda => 0x6388, 0xdb => 0x552e, 0xdc => 0x53d7, 0xdd => 0x7626, 0xde => 0x517d, 0xdf => 0x852c, 0xe0 => 0x67a2, 0xe1 => 0x68b3, 0xe2 => 0x6b8a, 0xe3 => 0x6292, 0xe4 => 0x8f93, 0xe5 => 0x53d4, 0xe6 => 0x8212, 0xe7 => 0x6dd1, 0xe8 => 0x758f, 0xe9 => 0x4e66, 0xea => 0x8d4e, 0xeb => 0x5b70, 0xec => 0x719f, 0xed => 0x85af, 0xee => 0x6691, 0xef => 0x66d9, 0xf0 => 0x7f72, 0xf1 => 0x8700, 0xf2 => 0x9ecd, 0xf3 => 0x9f20, 0xf4 => 0x5c5e, 0xf5 => 0x672f, 0xf6 => 0x8ff0, 0xf7 => 0x6811, 0xf8 => 0x675f, 0xf9 => 0x620d, 0xfa => 0x7ad6, 0xfb => 0x5885, 0xfc => 0x5eb6, 0xfd => 0x6570, 0xfe => 0x6f31, }, 0xcb => { 0xa1 => 0x6055, 0xa2 => 0x5237, 0xa3 => 0x800d, 0xa4 => 0x6454, 0xa5 => 0x8870, 0xa6 => 0x7529, 0xa7 => 0x5e05, 0xa8 => 0x6813, 0xa9 => 0x62f4, 0xaa => 0x971c, 0xab => 0x53cc, 0xac => 0x723d, 0xad => 0x8c01, 0xae => 0x6c34, 0xaf => 0x7761, 0xb0 => 0x7a0e, 0xb1 => 0x542e, 0xb2 => 0x77ac, 0xb3 => 0x987a, 0xb4 => 0x821c, 0xb5 => 0x8bf4, 0xb6 => 0x7855, 0xb7 => 0x6714, 0xb8 => 0x70c1, 0xb9 => 0x65af, 0xba => 0x6495, 0xbb => 0x5636, 0xbc => 0x601d, 0xbd => 0x79c1, 0xbe => 0x53f8, 0xbf => 0x4e1d, 0xc0 => 0x6b7b, 0xc1 => 0x8086, 0xc2 => 0x5bfa, 0xc3 => 0x55e3, 0xc4 => 0x56db, 0xc5 => 0x4f3a, 0xc6 => 0x4f3c, 0xc7 => 0x9972, 0xc8 => 0x5df3, 0xc9 => 0x677e, 0xca => 0x8038, 0xcb => 0x6002, 0xcc => 0x9882, 0xcd => 0x9001, 0xce => 0x5b8b, 0xcf => 0x8bbc, 0xd0 => 0x8bf5, 0xd1 => 0x641c, 0xd2 => 0x8258, 0xd3 => 0x64de, 0xd4 => 0x55fd, 0xd5 => 0x82cf, 0xd6 => 0x9165, 0xd7 => 0x4fd7, 0xd8 => 0x7d20, 0xd9 => 0x901f, 0xda => 0x7c9f, 0xdb => 0x50f3, 0xdc => 0x5851, 0xdd => 0x6eaf, 0xde => 0x5bbf, 0xdf => 0x8bc9, 0xe0 => 0x8083, 0xe1 => 0x9178, 0xe2 => 0x849c, 0xe3 => 0x7b97, 0xe4 => 0x867d, 0xe5 => 0x968b, 0xe6 => 0x968f, 0xe7 => 0x7ee5, 0xe8 => 0x9ad3, 0xe9 => 0x788e, 0xea => 0x5c81, 0xeb => 0x7a57, 0xec => 0x9042, 0xed => 0x96a7, 0xee => 0x795f, 0xef => 0x5b59, 0xf0 => 0x635f, 0xf1 => 0x7b0b, 0xf2 => 0x84d1, 0xf3 => 0x68ad, 0xf4 => 0x5506, 0xf5 => 0x7f29, 0xf6 => 0x7410, 0xf7 => 0x7d22, 0xf8 => 0x9501, 0xf9 => 0x6240, 0xfa => 0x584c, 0xfb => 0x4ed6, 0xfc => 0x5b83, 0xfd => 0x5979, 0xfe => 0x5854, }, 0xcc => { 0xa1 => 0x736d, 0xa2 => 0x631e, 0xa3 => 0x8e4b, 0xa4 => 0x8e0f, 0xa5 => 0x80ce, 0xa6 => 0x82d4, 0xa7 => 0x62ac, 0xa8 => 0x53f0, 0xa9 => 0x6cf0, 0xaa => 0x915e, 0xab => 0x592a, 0xac => 0x6001, 0xad => 0x6c70, 0xae => 0x574d, 0xaf => 0x644a, 0xb0 => 0x8d2a, 0xb1 => 0x762b, 0xb2 => 0x6ee9, 0xb3 => 0x575b, 0xb4 => 0x6a80, 0xb5 => 0x75f0, 0xb6 => 0x6f6d, 0xb7 => 0x8c2d, 0xb8 => 0x8c08, 0xb9 => 0x5766, 0xba => 0x6bef, 0xbb => 0x8892, 0xbc => 0x78b3, 0xbd => 0x63a2, 0xbe => 0x53f9, 0xbf => 0x70ad, 0xc0 => 0x6c64, 0xc1 => 0x5858, 0xc2 => 0x642a, 0xc3 => 0x5802, 0xc4 => 0x68e0, 0xc5 => 0x819b, 0xc6 => 0x5510, 0xc7 => 0x7cd6, 0xc8 => 0x5018, 0xc9 => 0x8eba, 0xca => 0x6dcc, 0xcb => 0x8d9f, 0xcc => 0x70eb, 0xcd => 0x638f, 0xce => 0x6d9b, 0xcf => 0x6ed4, 0xd0 => 0x7ee6, 0xd1 => 0x8404, 0xd2 => 0x6843, 0xd3 => 0x9003, 0xd4 => 0x6dd8, 0xd5 => 0x9676, 0xd6 => 0x8ba8, 0xd7 => 0x5957, 0xd8 => 0x7279, 0xd9 => 0x85e4, 0xda => 0x817e, 0xdb => 0x75bc, 0xdc => 0x8a8a, 0xdd => 0x68af, 0xde => 0x5254, 0xdf => 0x8e22, 0xe0 => 0x9511, 0xe1 => 0x63d0, 0xe2 => 0x9898, 0xe3 => 0x8e44, 0xe4 => 0x557c, 0xe5 => 0x4f53, 0xe6 => 0x66ff, 0xe7 => 0x568f, 0xe8 => 0x60d5, 0xe9 => 0x6d95, 0xea => 0x5243, 0xeb => 0x5c49, 0xec => 0x5929, 0xed => 0x6dfb, 0xee => 0x586b, 0xef => 0x7530, 0xf0 => 0x751c, 0xf1 => 0x606c, 0xf2 => 0x8214, 0xf3 => 0x8146, 0xf4 => 0x6311, 0xf5 => 0x6761, 0xf6 => 0x8fe2, 0xf7 => 0x773a, 0xf8 => 0x8df3, 0xf9 => 0x8d34, 0xfa => 0x94c1, 0xfb => 0x5e16, 0xfc => 0x5385, 0xfd => 0x542c, 0xfe => 0x70c3, }, 0xcd => { 0xa1 => 0x6c40, 0xa2 => 0x5ef7, 0xa3 => 0x505c, 0xa4 => 0x4ead, 0xa5 => 0x5ead, 0xa6 => 0x633a, 0xa7 => 0x8247, 0xa8 => 0x901a, 0xa9 => 0x6850, 0xaa => 0x916e, 0xab => 0x77b3, 0xac => 0x540c, 0xad => 0x94dc, 0xae => 0x5f64, 0xaf => 0x7ae5, 0xb0 => 0x6876, 0xb1 => 0x6345, 0xb2 => 0x7b52, 0xb3 => 0x7edf, 0xb4 => 0x75db, 0xb5 => 0x5077, 0xb6 => 0x6295, 0xb7 => 0x5934, 0xb8 => 0x900f, 0xb9 => 0x51f8, 0xba => 0x79c3, 0xbb => 0x7a81, 0xbc => 0x56fe, 0xbd => 0x5f92, 0xbe => 0x9014, 0xbf => 0x6d82, 0xc0 => 0x5c60, 0xc1 => 0x571f, 0xc2 => 0x5410, 0xc3 => 0x5154, 0xc4 => 0x6e4d, 0xc5 => 0x56e2, 0xc6 => 0x63a8, 0xc7 => 0x9893, 0xc8 => 0x817f, 0xc9 => 0x8715, 0xca => 0x892a, 0xcb => 0x9000, 0xcc => 0x541e, 0xcd => 0x5c6f, 0xce => 0x81c0, 0xcf => 0x62d6, 0xd0 => 0x6258, 0xd1 => 0x8131, 0xd2 => 0x9e35, 0xd3 => 0x9640, 0xd4 => 0x9a6e, 0xd5 => 0x9a7c, 0xd6 => 0x692d, 0xd7 => 0x59a5, 0xd8 => 0x62d3, 0xd9 => 0x553e, 0xda => 0x6316, 0xdb => 0x54c7, 0xdc => 0x86d9, 0xdd => 0x6d3c, 0xde => 0x5a03, 0xdf => 0x74e6, 0xe0 => 0x889c, 0xe1 => 0x6b6a, 0xe2 => 0x5916, 0xe3 => 0x8c4c, 0xe4 => 0x5f2f, 0xe5 => 0x6e7e, 0xe6 => 0x73a9, 0xe7 => 0x987d, 0xe8 => 0x4e38, 0xe9 => 0x70f7, 0xea => 0x5b8c, 0xeb => 0x7897, 0xec => 0x633d, 0xed => 0x665a, 0xee => 0x7696, 0xef => 0x60cb, 0xf0 => 0x5b9b, 0xf1 => 0x5a49, 0xf2 => 0x4e07, 0xf3 => 0x8155, 0xf4 => 0x6c6a, 0xf5 => 0x738b, 0xf6 => 0x4ea1, 0xf7 => 0x6789, 0xf8 => 0x7f51, 0xf9 => 0x5f80, 0xfa => 0x65fa, 0xfb => 0x671b, 0xfc => 0x5fd8, 0xfd => 0x5984, 0xfe => 0x5a01, }, 0xce => { 0xa1 => 0x5dcd, 0xa2 => 0x5fae, 0xa3 => 0x5371, 0xa4 => 0x97e6, 0xa5 => 0x8fdd, 0xa6 => 0x6845, 0xa7 => 0x56f4, 0xa8 => 0x552f, 0xa9 => 0x60df, 0xaa => 0x4e3a, 0xab => 0x6f4d, 0xac => 0x7ef4, 0xad => 0x82c7, 0xae => 0x840e, 0xaf => 0x59d4, 0xb0 => 0x4f1f, 0xb1 => 0x4f2a, 0xb2 => 0x5c3e, 0xb3 => 0x7eac, 0xb4 => 0x672a, 0xb5 => 0x851a, 0xb6 => 0x5473, 0xb7 => 0x754f, 0xb8 => 0x80c3, 0xb9 => 0x5582, 0xba => 0x9b4f, 0xbb => 0x4f4d, 0xbc => 0x6e2d, 0xbd => 0x8c13, 0xbe => 0x5c09, 0xbf => 0x6170, 0xc0 => 0x536b, 0xc1 => 0x761f, 0xc2 => 0x6e29, 0xc3 => 0x868a, 0xc4 => 0x6587, 0xc5 => 0x95fb, 0xc6 => 0x7eb9, 0xc7 => 0x543b, 0xc8 => 0x7a33, 0xc9 => 0x7d0a, 0xca => 0x95ee, 0xcb => 0x55e1, 0xcc => 0x7fc1, 0xcd => 0x74ee, 0xce => 0x631d, 0xcf => 0x8717, 0xd0 => 0x6da1, 0xd1 => 0x7a9d, 0xd2 => 0x6211, 0xd3 => 0x65a1, 0xd4 => 0x5367, 0xd5 => 0x63e1, 0xd6 => 0x6c83, 0xd7 => 0x5deb, 0xd8 => 0x545c, 0xd9 => 0x94a8, 0xda => 0x4e4c, 0xdb => 0x6c61, 0xdc => 0x8bec, 0xdd => 0x5c4b, 0xde => 0x65e0, 0xdf => 0x829c, 0xe0 => 0x68a7, 0xe1 => 0x543e, 0xe2 => 0x5434, 0xe3 => 0x6bcb, 0xe4 => 0x6b66, 0xe5 => 0x4e94, 0xe6 => 0x6342, 0xe7 => 0x5348, 0xe8 => 0x821e, 0xe9 => 0x4f0d, 0xea => 0x4fae, 0xeb => 0x575e, 0xec => 0x620a, 0xed => 0x96fe, 0xee => 0x6664, 0xef => 0x7269, 0xf0 => 0x52ff, 0xf1 => 0x52a1, 0xf2 => 0x609f, 0xf3 => 0x8bef, 0xf4 => 0x6614, 0xf5 => 0x7199, 0xf6 => 0x6790, 0xf7 => 0x897f, 0xf8 => 0x7852, 0xf9 => 0x77fd, 0xfa => 0x6670, 0xfb => 0x563b, 0xfc => 0x5438, 0xfd => 0x9521, 0xfe => 0x727a, }, 0xcf => { 0xa1 => 0x7a00, 0xa2 => 0x606f, 0xa3 => 0x5e0c, 0xa4 => 0x6089, 0xa5 => 0x819d, 0xa6 => 0x5915, 0xa7 => 0x60dc, 0xa8 => 0x7184, 0xa9 => 0x70ef, 0xaa => 0x6eaa, 0xab => 0x6c50, 0xac => 0x7280, 0xad => 0x6a84, 0xae => 0x88ad, 0xaf => 0x5e2d, 0xb0 => 0x4e60, 0xb1 => 0x5ab3, 0xb2 => 0x559c, 0xb3 => 0x94e3, 0xb4 => 0x6d17, 0xb5 => 0x7cfb, 0xb6 => 0x9699, 0xb7 => 0x620f, 0xb8 => 0x7ec6, 0xb9 => 0x778e, 0xba => 0x867e, 0xbb => 0x5323, 0xbc => 0x971e, 0xbd => 0x8f96, 0xbe => 0x6687, 0xbf => 0x5ce1, 0xc0 => 0x4fa0, 0xc1 => 0x72ed, 0xc2 => 0x4e0b, 0xc3 => 0x53a6, 0xc4 => 0x590f, 0xc5 => 0x5413, 0xc6 => 0x6380, 0xc7 => 0x9528, 0xc8 => 0x5148, 0xc9 => 0x4ed9, 0xca => 0x9c9c, 0xcb => 0x7ea4, 0xcc => 0x54b8, 0xcd => 0x8d24, 0xce => 0x8854, 0xcf => 0x8237, 0xd0 => 0x95f2, 0xd1 => 0x6d8e, 0xd2 => 0x5f26, 0xd3 => 0x5acc, 0xd4 => 0x663e, 0xd5 => 0x9669, 0xd6 => 0x73b0, 0xd7 => 0x732e, 0xd8 => 0x53bf, 0xd9 => 0x817a, 0xda => 0x9985, 0xdb => 0x7fa1, 0xdc => 0x5baa, 0xdd => 0x9677, 0xde => 0x9650, 0xdf => 0x7ebf, 0xe0 => 0x76f8, 0xe1 => 0x53a2, 0xe2 => 0x9576, 0xe3 => 0x9999, 0xe4 => 0x7bb1, 0xe5 => 0x8944, 0xe6 => 0x6e58, 0xe7 => 0x4e61, 0xe8 => 0x7fd4, 0xe9 => 0x7965, 0xea => 0x8be6, 0xeb => 0x60f3, 0xec => 0x54cd, 0xed => 0x4eab, 0xee => 0x9879, 0xef => 0x5df7, 0xf0 => 0x6a61, 0xf1 => 0x50cf, 0xf2 => 0x5411, 0xf3 => 0x8c61, 0xf4 => 0x8427, 0xf5 => 0x785d, 0xf6 => 0x9704, 0xf7 => 0x524a, 0xf8 => 0x54ee, 0xf9 => 0x56a3, 0xfa => 0x9500, 0xfb => 0x6d88, 0xfc => 0x5bb5, 0xfd => 0x6dc6, 0xfe => 0x6653, }, 0xd0 => { 0xa1 => 0x5c0f, 0xa2 => 0x5b5d, 0xa3 => 0x6821, 0xa4 => 0x8096, 0xa5 => 0x5578, 0xa6 => 0x7b11, 0xa7 => 0x6548, 0xa8 => 0x6954, 0xa9 => 0x4e9b, 0xaa => 0x6b47, 0xab => 0x874e, 0xac => 0x978b, 0xad => 0x534f, 0xae => 0x631f, 0xaf => 0x643a, 0xb0 => 0x90aa, 0xb1 => 0x659c, 0xb2 => 0x80c1, 0xb3 => 0x8c10, 0xb4 => 0x5199, 0xb5 => 0x68b0, 0xb6 => 0x5378, 0xb7 => 0x87f9, 0xb8 => 0x61c8, 0xb9 => 0x6cc4, 0xba => 0x6cfb, 0xbb => 0x8c22, 0xbc => 0x5c51, 0xbd => 0x85aa, 0xbe => 0x82af, 0xbf => 0x950c, 0xc0 => 0x6b23, 0xc1 => 0x8f9b, 0xc2 => 0x65b0, 0xc3 => 0x5ffb, 0xc4 => 0x5fc3, 0xc5 => 0x4fe1, 0xc6 => 0x8845, 0xc7 => 0x661f, 0xc8 => 0x8165, 0xc9 => 0x7329, 0xca => 0x60fa, 0xcb => 0x5174, 0xcc => 0x5211, 0xcd => 0x578b, 0xce => 0x5f62, 0xcf => 0x90a2, 0xd0 => 0x884c, 0xd1 => 0x9192, 0xd2 => 0x5e78, 0xd3 => 0x674f, 0xd4 => 0x6027, 0xd5 => 0x59d3, 0xd6 => 0x5144, 0xd7 => 0x51f6, 0xd8 => 0x80f8, 0xd9 => 0x5308, 0xda => 0x6c79, 0xdb => 0x96c4, 0xdc => 0x718a, 0xdd => 0x4f11, 0xde => 0x4fee, 0xdf => 0x7f9e, 0xe0 => 0x673d, 0xe1 => 0x55c5, 0xe2 => 0x9508, 0xe3 => 0x79c0, 0xe4 => 0x8896, 0xe5 => 0x7ee3, 0xe6 => 0x589f, 0xe7 => 0x620c, 0xe8 => 0x9700, 0xe9 => 0x865a, 0xea => 0x5618, 0xeb => 0x987b, 0xec => 0x5f90, 0xed => 0x8bb8, 0xee => 0x84c4, 0xef => 0x9157, 0xf0 => 0x53d9, 0xf1 => 0x65ed, 0xf2 => 0x5e8f, 0xf3 => 0x755c, 0xf4 => 0x6064, 0xf5 => 0x7d6e, 0xf6 => 0x5a7f, 0xf7 => 0x7eea, 0xf8 => 0x7eed, 0xf9 => 0x8f69, 0xfa => 0x55a7, 0xfb => 0x5ba3, 0xfc => 0x60ac, 0xfd => 0x65cb, 0xfe => 0x7384, }, 0xd1 => { 0xa1 => 0x9009, 0xa2 => 0x7663, 0xa3 => 0x7729, 0xa4 => 0x7eda, 0xa5 => 0x9774, 0xa6 => 0x859b, 0xa7 => 0x5b66, 0xa8 => 0x7a74, 0xa9 => 0x96ea, 0xaa => 0x8840, 0xab => 0x52cb, 0xac => 0x718f, 0xad => 0x5faa, 0xae => 0x65ec, 0xaf => 0x8be2, 0xb0 => 0x5bfb, 0xb1 => 0x9a6f, 0xb2 => 0x5de1, 0xb3 => 0x6b89, 0xb4 => 0x6c5b, 0xb5 => 0x8bad, 0xb6 => 0x8baf, 0xb7 => 0x900a, 0xb8 => 0x8fc5, 0xb9 => 0x538b, 0xba => 0x62bc, 0xbb => 0x9e26, 0xbc => 0x9e2d, 0xbd => 0x5440, 0xbe => 0x4e2b, 0xbf => 0x82bd, 0xc0 => 0x7259, 0xc1 => 0x869c, 0xc2 => 0x5d16, 0xc3 => 0x8859, 0xc4 => 0x6daf, 0xc5 => 0x96c5, 0xc6 => 0x54d1, 0xc7 => 0x4e9a, 0xc8 => 0x8bb6, 0xc9 => 0x7109, 0xca => 0x54bd, 0xcb => 0x9609, 0xcc => 0x70df, 0xcd => 0x6df9, 0xce => 0x76d0, 0xcf => 0x4e25, 0xd0 => 0x7814, 0xd1 => 0x8712, 0xd2 => 0x5ca9, 0xd3 => 0x5ef6, 0xd4 => 0x8a00, 0xd5 => 0x989c, 0xd6 => 0x960e, 0xd7 => 0x708e, 0xd8 => 0x6cbf, 0xd9 => 0x5944, 0xda => 0x63a9, 0xdb => 0x773c, 0xdc => 0x884d, 0xdd => 0x6f14, 0xde => 0x8273, 0xdf => 0x5830, 0xe0 => 0x71d5, 0xe1 => 0x538c, 0xe2 => 0x781a, 0xe3 => 0x96c1, 0xe4 => 0x5501, 0xe5 => 0x5f66, 0xe6 => 0x7130, 0xe7 => 0x5bb4, 0xe8 => 0x8c1a, 0xe9 => 0x9a8c, 0xea => 0x6b83, 0xeb => 0x592e, 0xec => 0x9e2f, 0xed => 0x79e7, 0xee => 0x6768, 0xef => 0x626c, 0xf0 => 0x4f6f, 0xf1 => 0x75a1, 0xf2 => 0x7f8a, 0xf3 => 0x6d0b, 0xf4 => 0x9633, 0xf5 => 0x6c27, 0xf6 => 0x4ef0, 0xf7 => 0x75d2, 0xf8 => 0x517b, 0xf9 => 0x6837, 0xfa => 0x6f3e, 0xfb => 0x9080, 0xfc => 0x8170, 0xfd => 0x5996, 0xfe => 0x7476, }, 0xd2 => { 0xa1 => 0x6447, 0xa2 => 0x5c27, 0xa3 => 0x9065, 0xa4 => 0x7a91, 0xa5 => 0x8c23, 0xa6 => 0x59da, 0xa7 => 0x54ac, 0xa8 => 0x8200, 0xa9 => 0x836f, 0xaa => 0x8981, 0xab => 0x8000, 0xac => 0x6930, 0xad => 0x564e, 0xae => 0x8036, 0xaf => 0x7237, 0xb0 => 0x91ce, 0xb1 => 0x51b6, 0xb2 => 0x4e5f, 0xb3 => 0x9875, 0xb4 => 0x6396, 0xb5 => 0x4e1a, 0xb6 => 0x53f6, 0xb7 => 0x66f3, 0xb8 => 0x814b, 0xb9 => 0x591c, 0xba => 0x6db2, 0xbb => 0x4e00, 0xbc => 0x58f9, 0xbd => 0x533b, 0xbe => 0x63d6, 0xbf => 0x94f1, 0xc0 => 0x4f9d, 0xc1 => 0x4f0a, 0xc2 => 0x8863, 0xc3 => 0x9890, 0xc4 => 0x5937, 0xc5 => 0x9057, 0xc6 => 0x79fb, 0xc7 => 0x4eea, 0xc8 => 0x80f0, 0xc9 => 0x7591, 0xca => 0x6c82, 0xcb => 0x5b9c, 0xcc => 0x59e8, 0xcd => 0x5f5d, 0xce => 0x6905, 0xcf => 0x8681, 0xd0 => 0x501a, 0xd1 => 0x5df2, 0xd2 => 0x4e59, 0xd3 => 0x77e3, 0xd4 => 0x4ee5, 0xd5 => 0x827a, 0xd6 => 0x6291, 0xd7 => 0x6613, 0xd8 => 0x9091, 0xd9 => 0x5c79, 0xda => 0x4ebf, 0xdb => 0x5f79, 0xdc => 0x81c6, 0xdd => 0x9038, 0xde => 0x8084, 0xdf => 0x75ab, 0xe0 => 0x4ea6, 0xe1 => 0x88d4, 0xe2 => 0x610f, 0xe3 => 0x6bc5, 0xe4 => 0x5fc6, 0xe5 => 0x4e49, 0xe6 => 0x76ca, 0xe7 => 0x6ea2, 0xe8 => 0x8be3, 0xe9 => 0x8bae, 0xea => 0x8c0a, 0xeb => 0x8bd1, 0xec => 0x5f02, 0xed => 0x7ffc, 0xee => 0x7fcc, 0xef => 0x7ece, 0xf0 => 0x8335, 0xf1 => 0x836b, 0xf2 => 0x56e0, 0xf3 => 0x6bb7, 0xf4 => 0x97f3, 0xf5 => 0x9634, 0xf6 => 0x59fb, 0xf7 => 0x541f, 0xf8 => 0x94f6, 0xf9 => 0x6deb, 0xfa => 0x5bc5, 0xfb => 0x996e, 0xfc => 0x5c39, 0xfd => 0x5f15, 0xfe => 0x9690, }, 0xd3 => { 0xa1 => 0x5370, 0xa2 => 0x82f1, 0xa3 => 0x6a31, 0xa4 => 0x5a74, 0xa5 => 0x9e70, 0xa6 => 0x5e94, 0xa7 => 0x7f28, 0xa8 => 0x83b9, 0xa9 => 0x8424, 0xaa => 0x8425, 0xab => 0x8367, 0xac => 0x8747, 0xad => 0x8fce, 0xae => 0x8d62, 0xaf => 0x76c8, 0xb0 => 0x5f71, 0xb1 => 0x9896, 0xb2 => 0x786c, 0xb3 => 0x6620, 0xb4 => 0x54df, 0xb5 => 0x62e5, 0xb6 => 0x4f63, 0xb7 => 0x81c3, 0xb8 => 0x75c8, 0xb9 => 0x5eb8, 0xba => 0x96cd, 0xbb => 0x8e0a, 0xbc => 0x86f9, 0xbd => 0x548f, 0xbe => 0x6cf3, 0xbf => 0x6d8c, 0xc0 => 0x6c38, 0xc1 => 0x607f, 0xc2 => 0x52c7, 0xc3 => 0x7528, 0xc4 => 0x5e7d, 0xc5 => 0x4f18, 0xc6 => 0x60a0, 0xc7 => 0x5fe7, 0xc8 => 0x5c24, 0xc9 => 0x7531, 0xca => 0x90ae, 0xcb => 0x94c0, 0xcc => 0x72b9, 0xcd => 0x6cb9, 0xce => 0x6e38, 0xcf => 0x9149, 0xd0 => 0x6709, 0xd1 => 0x53cb, 0xd2 => 0x53f3, 0xd3 => 0x4f51, 0xd4 => 0x91c9, 0xd5 => 0x8bf1, 0xd6 => 0x53c8, 0xd7 => 0x5e7c, 0xd8 => 0x8fc2, 0xd9 => 0x6de4, 0xda => 0x4e8e, 0xdb => 0x76c2, 0xdc => 0x6986, 0xdd => 0x865e, 0xde => 0x611a, 0xdf => 0x8206, 0xe0 => 0x4f59, 0xe1 => 0x4fde, 0xe2 => 0x903e, 0xe3 => 0x9c7c, 0xe4 => 0x6109, 0xe5 => 0x6e1d, 0xe6 => 0x6e14, 0xe7 => 0x9685, 0xe8 => 0x4e88, 0xe9 => 0x5a31, 0xea => 0x96e8, 0xeb => 0x4e0e, 0xec => 0x5c7f, 0xed => 0x79b9, 0xee => 0x5b87, 0xef => 0x8bed, 0xf0 => 0x7fbd, 0xf1 => 0x7389, 0xf2 => 0x57df, 0xf3 => 0x828b, 0xf4 => 0x90c1, 0xf5 => 0x5401, 0xf6 => 0x9047, 0xf7 => 0x55bb, 0xf8 => 0x5cea, 0xf9 => 0x5fa1, 0xfa => 0x6108, 0xfb => 0x6b32, 0xfc => 0x72f1, 0xfd => 0x80b2, 0xfe => 0x8a89, }, 0xd4 => { 0xa1 => 0x6d74, 0xa2 => 0x5bd3, 0xa3 => 0x88d5, 0xa4 => 0x9884, 0xa5 => 0x8c6b, 0xa6 => 0x9a6d, 0xa7 => 0x9e33, 0xa8 => 0x6e0a, 0xa9 => 0x51a4, 0xaa => 0x5143, 0xab => 0x57a3, 0xac => 0x8881, 0xad => 0x539f, 0xae => 0x63f4, 0xaf => 0x8f95, 0xb0 => 0x56ed, 0xb1 => 0x5458, 0xb2 => 0x5706, 0xb3 => 0x733f, 0xb4 => 0x6e90, 0xb5 => 0x7f18, 0xb6 => 0x8fdc, 0xb7 => 0x82d1, 0xb8 => 0x613f, 0xb9 => 0x6028, 0xba => 0x9662, 0xbb => 0x66f0, 0xbc => 0x7ea6, 0xbd => 0x8d8a, 0xbe => 0x8dc3, 0xbf => 0x94a5, 0xc0 => 0x5cb3, 0xc1 => 0x7ca4, 0xc2 => 0x6708, 0xc3 => 0x60a6, 0xc4 => 0x9605, 0xc5 => 0x8018, 0xc6 => 0x4e91, 0xc7 => 0x90e7, 0xc8 => 0x5300, 0xc9 => 0x9668, 0xca => 0x5141, 0xcb => 0x8fd0, 0xcc => 0x8574, 0xcd => 0x915d, 0xce => 0x6655, 0xcf => 0x97f5, 0xd0 => 0x5b55, 0xd1 => 0x531d, 0xd2 => 0x7838, 0xd3 => 0x6742, 0xd4 => 0x683d, 0xd5 => 0x54c9, 0xd6 => 0x707e, 0xd7 => 0x5bb0, 0xd8 => 0x8f7d, 0xd9 => 0x518d, 0xda => 0x5728, 0xdb => 0x54b1, 0xdc => 0x6512, 0xdd => 0x6682, 0xde => 0x8d5e, 0xdf => 0x8d43, 0xe0 => 0x810f, 0xe1 => 0x846c, 0xe2 => 0x906d, 0xe3 => 0x7cdf, 0xe4 => 0x51ff, 0xe5 => 0x85fb, 0xe6 => 0x67a3, 0xe7 => 0x65e9, 0xe8 => 0x6fa1, 0xe9 => 0x86a4, 0xea => 0x8e81, 0xeb => 0x566a, 0xec => 0x9020, 0xed => 0x7682, 0xee => 0x7076, 0xef => 0x71e5, 0xf0 => 0x8d23, 0xf1 => 0x62e9, 0xf2 => 0x5219, 0xf3 => 0x6cfd, 0xf4 => 0x8d3c, 0xf5 => 0x600e, 0xf6 => 0x589e, 0xf7 => 0x618e, 0xf8 => 0x66fe, 0xf9 => 0x8d60, 0xfa => 0x624e, 0xfb => 0x55b3, 0xfc => 0x6e23, 0xfd => 0x672d, 0xfe => 0x8f67, }, 0xd5 => { 0xa1 => 0x94e1, 0xa2 => 0x95f8, 0xa3 => 0x7728, 0xa4 => 0x6805, 0xa5 => 0x69a8, 0xa6 => 0x548b, 0xa7 => 0x4e4d, 0xa8 => 0x70b8, 0xa9 => 0x8bc8, 0xaa => 0x6458, 0xab => 0x658b, 0xac => 0x5b85, 0xad => 0x7a84, 0xae => 0x503a, 0xaf => 0x5be8, 0xb0 => 0x77bb, 0xb1 => 0x6be1, 0xb2 => 0x8a79, 0xb3 => 0x7c98, 0xb4 => 0x6cbe, 0xb5 => 0x76cf, 0xb6 => 0x65a9, 0xb7 => 0x8f97, 0xb8 => 0x5d2d, 0xb9 => 0x5c55, 0xba => 0x8638, 0xbb => 0x6808, 0xbc => 0x5360, 0xbd => 0x6218, 0xbe => 0x7ad9, 0xbf => 0x6e5b, 0xc0 => 0x7efd, 0xc1 => 0x6a1f, 0xc2 => 0x7ae0, 0xc3 => 0x5f70, 0xc4 => 0x6f33, 0xc5 => 0x5f20, 0xc6 => 0x638c, 0xc7 => 0x6da8, 0xc8 => 0x6756, 0xc9 => 0x4e08, 0xca => 0x5e10, 0xcb => 0x8d26, 0xcc => 0x4ed7, 0xcd => 0x80c0, 0xce => 0x7634, 0xcf => 0x969c, 0xd0 => 0x62db, 0xd1 => 0x662d, 0xd2 => 0x627e, 0xd3 => 0x6cbc, 0xd4 => 0x8d75, 0xd5 => 0x7167, 0xd6 => 0x7f69, 0xd7 => 0x5146, 0xd8 => 0x8087, 0xd9 => 0x53ec, 0xda => 0x906e, 0xdb => 0x6298, 0xdc => 0x54f2, 0xdd => 0x86f0, 0xde => 0x8f99, 0xdf => 0x8005, 0xe0 => 0x9517, 0xe1 => 0x8517, 0xe2 => 0x8fd9, 0xe3 => 0x6d59, 0xe4 => 0x73cd, 0xe5 => 0x659f, 0xe6 => 0x771f, 0xe7 => 0x7504, 0xe8 => 0x7827, 0xe9 => 0x81fb, 0xea => 0x8d1e, 0xeb => 0x9488, 0xec => 0x4fa6, 0xed => 0x6795, 0xee => 0x75b9, 0xef => 0x8bca, 0xf0 => 0x9707, 0xf1 => 0x632f, 0xf2 => 0x9547, 0xf3 => 0x9635, 0xf4 => 0x84b8, 0xf5 => 0x6323, 0xf6 => 0x7741, 0xf7 => 0x5f81, 0xf8 => 0x72f0, 0xf9 => 0x4e89, 0xfa => 0x6014, 0xfb => 0x6574, 0xfc => 0x62ef, 0xfd => 0x6b63, 0xfe => 0x653f, }, 0xd6 => { 0xa1 => 0x5e27, 0xa2 => 0x75c7, 0xa3 => 0x90d1, 0xa4 => 0x8bc1, 0xa5 => 0x829d, 0xa6 => 0x679d, 0xa7 => 0x652f, 0xa8 => 0x5431, 0xa9 => 0x8718, 0xaa => 0x77e5, 0xab => 0x80a2, 0xac => 0x8102, 0xad => 0x6c41, 0xae => 0x4e4b, 0xaf => 0x7ec7, 0xb0 => 0x804c, 0xb1 => 0x76f4, 0xb2 => 0x690d, 0xb3 => 0x6b96, 0xb4 => 0x6267, 0xb5 => 0x503c, 0xb6 => 0x4f84, 0xb7 => 0x5740, 0xb8 => 0x6307, 0xb9 => 0x6b62, 0xba => 0x8dbe, 0xbb => 0x53ea, 0xbc => 0x65e8, 0xbd => 0x7eb8, 0xbe => 0x5fd7, 0xbf => 0x631a, 0xc0 => 0x63b7, 0xc1 => 0x81f3, 0xc2 => 0x81f4, 0xc3 => 0x7f6e, 0xc4 => 0x5e1c, 0xc5 => 0x5cd9, 0xc6 => 0x5236, 0xc7 => 0x667a, 0xc8 => 0x79e9, 0xc9 => 0x7a1a, 0xca => 0x8d28, 0xcb => 0x7099, 0xcc => 0x75d4, 0xcd => 0x6ede, 0xce => 0x6cbb, 0xcf => 0x7a92, 0xd0 => 0x4e2d, 0xd1 => 0x76c5, 0xd2 => 0x5fe0, 0xd3 => 0x949f, 0xd4 => 0x8877, 0xd5 => 0x7ec8, 0xd6 => 0x79cd, 0xd7 => 0x80bf, 0xd8 => 0x91cd, 0xd9 => 0x4ef2, 0xda => 0x4f17, 0xdb => 0x821f, 0xdc => 0x5468, 0xdd => 0x5dde, 0xde => 0x6d32, 0xdf => 0x8bcc, 0xe0 => 0x7ca5, 0xe1 => 0x8f74, 0xe2 => 0x8098, 0xe3 => 0x5e1a, 0xe4 => 0x5492, 0xe5 => 0x76b1, 0xe6 => 0x5b99, 0xe7 => 0x663c, 0xe8 => 0x9aa4, 0xe9 => 0x73e0, 0xea => 0x682a, 0xeb => 0x86db, 0xec => 0x6731, 0xed => 0x732a, 0xee => 0x8bf8, 0xef => 0x8bdb, 0xf0 => 0x9010, 0xf1 => 0x7af9, 0xf2 => 0x70db, 0xf3 => 0x716e, 0xf4 => 0x62c4, 0xf5 => 0x77a9, 0xf6 => 0x5631, 0xf7 => 0x4e3b, 0xf8 => 0x8457, 0xf9 => 0x67f1, 0xfa => 0x52a9, 0xfb => 0x86c0, 0xfc => 0x8d2e, 0xfd => 0x94f8, 0xfe => 0x7b51, }, 0xd7 => { 0xa1 => 0x4f4f, 0xa2 => 0x6ce8, 0xa3 => 0x795d, 0xa4 => 0x9a7b, 0xa5 => 0x6293, 0xa6 => 0x722a, 0xa7 => 0x62fd, 0xa8 => 0x4e13, 0xa9 => 0x7816, 0xaa => 0x8f6c, 0xab => 0x64b0, 0xac => 0x8d5a, 0xad => 0x7bc6, 0xae => 0x6869, 0xaf => 0x5e84, 0xb0 => 0x88c5, 0xb1 => 0x5986, 0xb2 => 0x649e, 0xb3 => 0x58ee, 0xb4 => 0x72b6, 0xb5 => 0x690e, 0xb6 => 0x9525, 0xb7 => 0x8ffd, 0xb8 => 0x8d58, 0xb9 => 0x5760, 0xba => 0x7f00, 0xbb => 0x8c06, 0xbc => 0x51c6, 0xbd => 0x6349, 0xbe => 0x62d9, 0xbf => 0x5353, 0xc0 => 0x684c, 0xc1 => 0x7422, 0xc2 => 0x8301, 0xc3 => 0x914c, 0xc4 => 0x5544, 0xc5 => 0x7740, 0xc6 => 0x707c, 0xc7 => 0x6d4a, 0xc8 => 0x5179, 0xc9 => 0x54a8, 0xca => 0x8d44, 0xcb => 0x59ff, 0xcc => 0x6ecb, 0xcd => 0x6dc4, 0xce => 0x5b5c, 0xcf => 0x7d2b, 0xd0 => 0x4ed4, 0xd1 => 0x7c7d, 0xd2 => 0x6ed3, 0xd3 => 0x5b50, 0xd4 => 0x81ea, 0xd5 => 0x6e0d, 0xd6 => 0x5b57, 0xd7 => 0x9b03, 0xd8 => 0x68d5, 0xd9 => 0x8e2a, 0xda => 0x5b97, 0xdb => 0x7efc, 0xdc => 0x603b, 0xdd => 0x7eb5, 0xde => 0x90b9, 0xdf => 0x8d70, 0xe0 => 0x594f, 0xe1 => 0x63cd, 0xe2 => 0x79df, 0xe3 => 0x8db3, 0xe4 => 0x5352, 0xe5 => 0x65cf, 0xe6 => 0x7956, 0xe7 => 0x8bc5, 0xe8 => 0x963b, 0xe9 => 0x7ec4, 0xea => 0x94bb, 0xeb => 0x7e82, 0xec => 0x5634, 0xed => 0x9189, 0xee => 0x6700, 0xef => 0x7f6a, 0xf0 => 0x5c0a, 0xf1 => 0x9075, 0xf2 => 0x6628, 0xf3 => 0x5de6, 0xf4 => 0x4f50, 0xf5 => 0x67de, 0xf6 => 0x505a, 0xf7 => 0x4f5c, 0xf8 => 0x5750, 0xf9 => 0x5ea7, }, 0xd8 => { 0xa1 => 0x4e8d, 0xa2 => 0x4e0c, 0xa3 => 0x5140, 0xa4 => 0x4e10, 0xa5 => 0x5eff, 0xa6 => 0x5345, 0xa7 => 0x4e15, 0xa8 => 0x4e98, 0xa9 => 0x4e1e, 0xaa => 0x9b32, 0xab => 0x5b6c, 0xac => 0x5669, 0xad => 0x4e28, 0xae => 0x79ba, 0xaf => 0x4e3f, 0xb0 => 0x5315, 0xb1 => 0x4e47, 0xb2 => 0x592d, 0xb3 => 0x723b, 0xb4 => 0x536e, 0xb5 => 0x6c10, 0xb6 => 0x56df, 0xb7 => 0x80e4, 0xb8 => 0x9997, 0xb9 => 0x6bd3, 0xba => 0x777e, 0xbb => 0x9f17, 0xbc => 0x4e36, 0xbd => 0x4e9f, 0xbe => 0x9f10, 0xbf => 0x4e5c, 0xc0 => 0x4e69, 0xc1 => 0x4e93, 0xc2 => 0x8288, 0xc3 => 0x5b5b, 0xc4 => 0x556c, 0xc5 => 0x560f, 0xc6 => 0x4ec4, 0xc7 => 0x538d, 0xc8 => 0x539d, 0xc9 => 0x53a3, 0xca => 0x53a5, 0xcb => 0x53ae, 0xcc => 0x9765, 0xcd => 0x8d5d, 0xce => 0x531a, 0xcf => 0x53f5, 0xd0 => 0x5326, 0xd1 => 0x532e, 0xd2 => 0x533e, 0xd3 => 0x8d5c, 0xd4 => 0x5366, 0xd5 => 0x5363, 0xd6 => 0x5202, 0xd7 => 0x5208, 0xd8 => 0x520e, 0xd9 => 0x522d, 0xda => 0x5233, 0xdb => 0x523f, 0xdc => 0x5240, 0xdd => 0x524c, 0xde => 0x525e, 0xdf => 0x5261, 0xe0 => 0x525c, 0xe1 => 0x84af, 0xe2 => 0x527d, 0xe3 => 0x5282, 0xe4 => 0x5281, 0xe5 => 0x5290, 0xe6 => 0x5293, 0xe7 => 0x5182, 0xe8 => 0x7f54, 0xe9 => 0x4ebb, 0xea => 0x4ec3, 0xeb => 0x4ec9, 0xec => 0x4ec2, 0xed => 0x4ee8, 0xee => 0x4ee1, 0xef => 0x4eeb, 0xf0 => 0x4ede, 0xf1 => 0x4f1b, 0xf2 => 0x4ef3, 0xf3 => 0x4f22, 0xf4 => 0x4f64, 0xf5 => 0x4ef5, 0xf6 => 0x4f25, 0xf7 => 0x4f27, 0xf8 => 0x4f09, 0xf9 => 0x4f2b, 0xfa => 0x4f5e, 0xfb => 0x4f67, 0xfc => 0x6538, 0xfd => 0x4f5a, 0xfe => 0x4f5d, }, 0xd9 => { 0xa1 => 0x4f5f, 0xa2 => 0x4f57, 0xa3 => 0x4f32, 0xa4 => 0x4f3d, 0xa5 => 0x4f76, 0xa6 => 0x4f74, 0xa7 => 0x4f91, 0xa8 => 0x4f89, 0xa9 => 0x4f83, 0xaa => 0x4f8f, 0xab => 0x4f7e, 0xac => 0x4f7b, 0xad => 0x4faa, 0xae => 0x4f7c, 0xaf => 0x4fac, 0xb0 => 0x4f94, 0xb1 => 0x4fe6, 0xb2 => 0x4fe8, 0xb3 => 0x4fea, 0xb4 => 0x4fc5, 0xb5 => 0x4fda, 0xb6 => 0x4fe3, 0xb7 => 0x4fdc, 0xb8 => 0x4fd1, 0xb9 => 0x4fdf, 0xba => 0x4ff8, 0xbb => 0x5029, 0xbc => 0x504c, 0xbd => 0x4ff3, 0xbe => 0x502c, 0xbf => 0x500f, 0xc0 => 0x502e, 0xc1 => 0x502d, 0xc2 => 0x4ffe, 0xc3 => 0x501c, 0xc4 => 0x500c, 0xc5 => 0x5025, 0xc6 => 0x5028, 0xc7 => 0x507e, 0xc8 => 0x5043, 0xc9 => 0x5055, 0xca => 0x5048, 0xcb => 0x504e, 0xcc => 0x506c, 0xcd => 0x507b, 0xce => 0x50a5, 0xcf => 0x50a7, 0xd0 => 0x50a9, 0xd1 => 0x50ba, 0xd2 => 0x50d6, 0xd3 => 0x5106, 0xd4 => 0x50ed, 0xd5 => 0x50ec, 0xd6 => 0x50e6, 0xd7 => 0x50ee, 0xd8 => 0x5107, 0xd9 => 0x510b, 0xda => 0x4edd, 0xdb => 0x6c3d, 0xdc => 0x4f58, 0xdd => 0x4f65, 0xde => 0x4fce, 0xdf => 0x9fa0, 0xe0 => 0x6c46, 0xe1 => 0x7c74, 0xe2 => 0x516e, 0xe3 => 0x5dfd, 0xe4 => 0x9ec9, 0xe5 => 0x9998, 0xe6 => 0x5181, 0xe7 => 0x5914, 0xe8 => 0x52f9, 0xe9 => 0x530d, 0xea => 0x8a07, 0xeb => 0x5310, 0xec => 0x51eb, 0xed => 0x5919, 0xee => 0x5155, 0xef => 0x4ea0, 0xf0 => 0x5156, 0xf1 => 0x4eb3, 0xf2 => 0x886e, 0xf3 => 0x88a4, 0xf4 => 0x4eb5, 0xf5 => 0x8114, 0xf6 => 0x88d2, 0xf7 => 0x7980, 0xf8 => 0x5b34, 0xf9 => 0x8803, 0xfa => 0x7fb8, 0xfb => 0x51ab, 0xfc => 0x51b1, 0xfd => 0x51bd, 0xfe => 0x51bc, }, 0xda => { 0xa1 => 0x51c7, 0xa2 => 0x5196, 0xa3 => 0x51a2, 0xa4 => 0x51a5, 0xa5 => 0x8ba0, 0xa6 => 0x8ba6, 0xa7 => 0x8ba7, 0xa8 => 0x8baa, 0xa9 => 0x8bb4, 0xaa => 0x8bb5, 0xab => 0x8bb7, 0xac => 0x8bc2, 0xad => 0x8bc3, 0xae => 0x8bcb, 0xaf => 0x8bcf, 0xb0 => 0x8bce, 0xb1 => 0x8bd2, 0xb2 => 0x8bd3, 0xb3 => 0x8bd4, 0xb4 => 0x8bd6, 0xb5 => 0x8bd8, 0xb6 => 0x8bd9, 0xb7 => 0x8bdc, 0xb8 => 0x8bdf, 0xb9 => 0x8be0, 0xba => 0x8be4, 0xbb => 0x8be8, 0xbc => 0x8be9, 0xbd => 0x8bee, 0xbe => 0x8bf0, 0xbf => 0x8bf3, 0xc0 => 0x8bf6, 0xc1 => 0x8bf9, 0xc2 => 0x8bfc, 0xc3 => 0x8bff, 0xc4 => 0x8c00, 0xc5 => 0x8c02, 0xc6 => 0x8c04, 0xc7 => 0x8c07, 0xc8 => 0x8c0c, 0xc9 => 0x8c0f, 0xca => 0x8c11, 0xcb => 0x8c12, 0xcc => 0x8c14, 0xcd => 0x8c15, 0xce => 0x8c16, 0xcf => 0x8c19, 0xd0 => 0x8c1b, 0xd1 => 0x8c18, 0xd2 => 0x8c1d, 0xd3 => 0x8c1f, 0xd4 => 0x8c20, 0xd5 => 0x8c21, 0xd6 => 0x8c25, 0xd7 => 0x8c27, 0xd8 => 0x8c2a, 0xd9 => 0x8c2b, 0xda => 0x8c2e, 0xdb => 0x8c2f, 0xdc => 0x8c32, 0xdd => 0x8c33, 0xde => 0x8c35, 0xdf => 0x8c36, 0xe0 => 0x5369, 0xe1 => 0x537a, 0xe2 => 0x961d, 0xe3 => 0x9622, 0xe4 => 0x9621, 0xe5 => 0x9631, 0xe6 => 0x962a, 0xe7 => 0x963d, 0xe8 => 0x963c, 0xe9 => 0x9642, 0xea => 0x9649, 0xeb => 0x9654, 0xec => 0x965f, 0xed => 0x9667, 0xee => 0x966c, 0xef => 0x9672, 0xf0 => 0x9674, 0xf1 => 0x9688, 0xf2 => 0x968d, 0xf3 => 0x9697, 0xf4 => 0x96b0, 0xf5 => 0x9097, 0xf6 => 0x909b, 0xf7 => 0x909d, 0xf8 => 0x9099, 0xf9 => 0x90ac, 0xfa => 0x90a1, 0xfb => 0x90b4, 0xfc => 0x90b3, 0xfd => 0x90b6, 0xfe => 0x90ba, }, 0xdb => { 0xa1 => 0x90b8, 0xa2 => 0x90b0, 0xa3 => 0x90cf, 0xa4 => 0x90c5, 0xa5 => 0x90be, 0xa6 => 0x90d0, 0xa7 => 0x90c4, 0xa8 => 0x90c7, 0xa9 => 0x90d3, 0xaa => 0x90e6, 0xab => 0x90e2, 0xac => 0x90dc, 0xad => 0x90d7, 0xae => 0x90db, 0xaf => 0x90eb, 0xb0 => 0x90ef, 0xb1 => 0x90fe, 0xb2 => 0x9104, 0xb3 => 0x9122, 0xb4 => 0x911e, 0xb5 => 0x9123, 0xb6 => 0x9131, 0xb7 => 0x912f, 0xb8 => 0x9139, 0xb9 => 0x9143, 0xba => 0x9146, 0xbb => 0x520d, 0xbc => 0x5942, 0xbd => 0x52a2, 0xbe => 0x52ac, 0xbf => 0x52ad, 0xc0 => 0x52be, 0xc1 => 0x54ff, 0xc2 => 0x52d0, 0xc3 => 0x52d6, 0xc4 => 0x52f0, 0xc5 => 0x53df, 0xc6 => 0x71ee, 0xc7 => 0x77cd, 0xc8 => 0x5ef4, 0xc9 => 0x51f5, 0xca => 0x51fc, 0xcb => 0x9b2f, 0xcc => 0x53b6, 0xcd => 0x5f01, 0xce => 0x755a, 0xcf => 0x5def, 0xd0 => 0x574c, 0xd1 => 0x57a9, 0xd2 => 0x57a1, 0xd3 => 0x587e, 0xd4 => 0x58bc, 0xd5 => 0x58c5, 0xd6 => 0x58d1, 0xd7 => 0x5729, 0xd8 => 0x572c, 0xd9 => 0x572a, 0xda => 0x5733, 0xdb => 0x5739, 0xdc => 0x572e, 0xdd => 0x572f, 0xde => 0x575c, 0xdf => 0x573b, 0xe0 => 0x5742, 0xe1 => 0x5769, 0xe2 => 0x5785, 0xe3 => 0x576b, 0xe4 => 0x5786, 0xe5 => 0x577c, 0xe6 => 0x577b, 0xe7 => 0x5768, 0xe8 => 0x576d, 0xe9 => 0x5776, 0xea => 0x5773, 0xeb => 0x57ad, 0xec => 0x57a4, 0xed => 0x578c, 0xee => 0x57b2, 0xef => 0x57cf, 0xf0 => 0x57a7, 0xf1 => 0x57b4, 0xf2 => 0x5793, 0xf3 => 0x57a0, 0xf4 => 0x57d5, 0xf5 => 0x57d8, 0xf6 => 0x57da, 0xf7 => 0x57d9, 0xf8 => 0x57d2, 0xf9 => 0x57b8, 0xfa => 0x57f4, 0xfb => 0x57ef, 0xfc => 0x57f8, 0xfd => 0x57e4, 0xfe => 0x57dd, }, 0xdc => { 0xa1 => 0x580b, 0xa2 => 0x580d, 0xa3 => 0x57fd, 0xa4 => 0x57ed, 0xa5 => 0x5800, 0xa6 => 0x581e, 0xa7 => 0x5819, 0xa8 => 0x5844, 0xa9 => 0x5820, 0xaa => 0x5865, 0xab => 0x586c, 0xac => 0x5881, 0xad => 0x5889, 0xae => 0x589a, 0xaf => 0x5880, 0xb0 => 0x99a8, 0xb1 => 0x9f19, 0xb2 => 0x61ff, 0xb3 => 0x8279, 0xb4 => 0x827d, 0xb5 => 0x827f, 0xb6 => 0x828f, 0xb7 => 0x828a, 0xb8 => 0x82a8, 0xb9 => 0x8284, 0xba => 0x828e, 0xbb => 0x8291, 0xbc => 0x8297, 0xbd => 0x8299, 0xbe => 0x82ab, 0xbf => 0x82b8, 0xc0 => 0x82be, 0xc1 => 0x82b0, 0xc2 => 0x82c8, 0xc3 => 0x82ca, 0xc4 => 0x82e3, 0xc5 => 0x8298, 0xc6 => 0x82b7, 0xc7 => 0x82ae, 0xc8 => 0x82cb, 0xc9 => 0x82cc, 0xca => 0x82c1, 0xcb => 0x82a9, 0xcc => 0x82b4, 0xcd => 0x82a1, 0xce => 0x82aa, 0xcf => 0x829f, 0xd0 => 0x82c4, 0xd1 => 0x82ce, 0xd2 => 0x82a4, 0xd3 => 0x82e1, 0xd4 => 0x8309, 0xd5 => 0x82f7, 0xd6 => 0x82e4, 0xd7 => 0x830f, 0xd8 => 0x8307, 0xd9 => 0x82dc, 0xda => 0x82f4, 0xdb => 0x82d2, 0xdc => 0x82d8, 0xdd => 0x830c, 0xde => 0x82fb, 0xdf => 0x82d3, 0xe0 => 0x8311, 0xe1 => 0x831a, 0xe2 => 0x8306, 0xe3 => 0x8314, 0xe4 => 0x8315, 0xe5 => 0x82e0, 0xe6 => 0x82d5, 0xe7 => 0x831c, 0xe8 => 0x8351, 0xe9 => 0x835b, 0xea => 0x835c, 0xeb => 0x8308, 0xec => 0x8392, 0xed => 0x833c, 0xee => 0x8334, 0xef => 0x8331, 0xf0 => 0x839b, 0xf1 => 0x835e, 0xf2 => 0x832f, 0xf3 => 0x834f, 0xf4 => 0x8347, 0xf5 => 0x8343, 0xf6 => 0x835f, 0xf7 => 0x8340, 0xf8 => 0x8317, 0xf9 => 0x8360, 0xfa => 0x832d, 0xfb => 0x833a, 0xfc => 0x8333, 0xfd => 0x8366, 0xfe => 0x8365, }, 0xdd => { 0xa1 => 0x8368, 0xa2 => 0x831b, 0xa3 => 0x8369, 0xa4 => 0x836c, 0xa5 => 0x836a, 0xa6 => 0x836d, 0xa7 => 0x836e, 0xa8 => 0x83b0, 0xa9 => 0x8378, 0xaa => 0x83b3, 0xab => 0x83b4, 0xac => 0x83a0, 0xad => 0x83aa, 0xae => 0x8393, 0xaf => 0x839c, 0xb0 => 0x8385, 0xb1 => 0x837c, 0xb2 => 0x83b6, 0xb3 => 0x83a9, 0xb4 => 0x837d, 0xb5 => 0x83b8, 0xb6 => 0x837b, 0xb7 => 0x8398, 0xb8 => 0x839e, 0xb9 => 0x83a8, 0xba => 0x83ba, 0xbb => 0x83bc, 0xbc => 0x83c1, 0xbd => 0x8401, 0xbe => 0x83e5, 0xbf => 0x83d8, 0xc0 => 0x5807, 0xc1 => 0x8418, 0xc2 => 0x840b, 0xc3 => 0x83dd, 0xc4 => 0x83fd, 0xc5 => 0x83d6, 0xc6 => 0x841c, 0xc7 => 0x8438, 0xc8 => 0x8411, 0xc9 => 0x8406, 0xca => 0x83d4, 0xcb => 0x83df, 0xcc => 0x840f, 0xcd => 0x8403, 0xce => 0x83f8, 0xcf => 0x83f9, 0xd0 => 0x83ea, 0xd1 => 0x83c5, 0xd2 => 0x83c0, 0xd3 => 0x8426, 0xd4 => 0x83f0, 0xd5 => 0x83e1, 0xd6 => 0x845c, 0xd7 => 0x8451, 0xd8 => 0x845a, 0xd9 => 0x8459, 0xda => 0x8473, 0xdb => 0x8487, 0xdc => 0x8488, 0xdd => 0x847a, 0xde => 0x8489, 0xdf => 0x8478, 0xe0 => 0x843c, 0xe1 => 0x8446, 0xe2 => 0x8469, 0xe3 => 0x8476, 0xe4 => 0x848c, 0xe5 => 0x848e, 0xe6 => 0x8431, 0xe7 => 0x846d, 0xe8 => 0x84c1, 0xe9 => 0x84cd, 0xea => 0x84d0, 0xeb => 0x84e6, 0xec => 0x84bd, 0xed => 0x84d3, 0xee => 0x84ca, 0xef => 0x84bf, 0xf0 => 0x84ba, 0xf1 => 0x84e0, 0xf2 => 0x84a1, 0xf3 => 0x84b9, 0xf4 => 0x84b4, 0xf5 => 0x8497, 0xf6 => 0x84e5, 0xf7 => 0x84e3, 0xf8 => 0x850c, 0xf9 => 0x750d, 0xfa => 0x8538, 0xfb => 0x84f0, 0xfc => 0x8539, 0xfd => 0x851f, 0xfe => 0x853a, }, 0xde => { 0xa1 => 0x8556, 0xa2 => 0x853b, 0xa3 => 0x84ff, 0xa4 => 0x84fc, 0xa5 => 0x8559, 0xa6 => 0x8548, 0xa7 => 0x8568, 0xa8 => 0x8564, 0xa9 => 0x855e, 0xaa => 0x857a, 0xab => 0x77a2, 0xac => 0x8543, 0xad => 0x8572, 0xae => 0x857b, 0xaf => 0x85a4, 0xb0 => 0x85a8, 0xb1 => 0x8587, 0xb2 => 0x858f, 0xb3 => 0x8579, 0xb4 => 0x85ae, 0xb5 => 0x859c, 0xb6 => 0x8585, 0xb7 => 0x85b9, 0xb8 => 0x85b7, 0xb9 => 0x85b0, 0xba => 0x85d3, 0xbb => 0x85c1, 0xbc => 0x85dc, 0xbd => 0x85ff, 0xbe => 0x8627, 0xbf => 0x8605, 0xc0 => 0x8629, 0xc1 => 0x8616, 0xc2 => 0x863c, 0xc3 => 0x5efe, 0xc4 => 0x5f08, 0xc5 => 0x593c, 0xc6 => 0x5941, 0xc7 => 0x8037, 0xc8 => 0x5955, 0xc9 => 0x595a, 0xca => 0x5958, 0xcb => 0x530f, 0xcc => 0x5c22, 0xcd => 0x5c25, 0xce => 0x5c2c, 0xcf => 0x5c34, 0xd0 => 0x624c, 0xd1 => 0x626a, 0xd2 => 0x629f, 0xd3 => 0x62bb, 0xd4 => 0x62ca, 0xd5 => 0x62da, 0xd6 => 0x62d7, 0xd7 => 0x62ee, 0xd8 => 0x6322, 0xd9 => 0x62f6, 0xda => 0x6339, 0xdb => 0x634b, 0xdc => 0x6343, 0xdd => 0x63ad, 0xde => 0x63f6, 0xdf => 0x6371, 0xe0 => 0x637a, 0xe1 => 0x638e, 0xe2 => 0x63b4, 0xe3 => 0x636d, 0xe4 => 0x63ac, 0xe5 => 0x638a, 0xe6 => 0x6369, 0xe7 => 0x63ae, 0xe8 => 0x63bc, 0xe9 => 0x63f2, 0xea => 0x63f8, 0xeb => 0x63e0, 0xec => 0x63ff, 0xed => 0x63c4, 0xee => 0x63de, 0xef => 0x63ce, 0xf0 => 0x6452, 0xf1 => 0x63c6, 0xf2 => 0x63be, 0xf3 => 0x6445, 0xf4 => 0x6441, 0xf5 => 0x640b, 0xf6 => 0x641b, 0xf7 => 0x6420, 0xf8 => 0x640c, 0xf9 => 0x6426, 0xfa => 0x6421, 0xfb => 0x645e, 0xfc => 0x6484, 0xfd => 0x646d, 0xfe => 0x6496, }, 0xdf => { 0xa1 => 0x647a, 0xa2 => 0x64b7, 0xa3 => 0x64b8, 0xa4 => 0x6499, 0xa5 => 0x64ba, 0xa6 => 0x64c0, 0xa7 => 0x64d0, 0xa8 => 0x64d7, 0xa9 => 0x64e4, 0xaa => 0x64e2, 0xab => 0x6509, 0xac => 0x6525, 0xad => 0x652e, 0xae => 0x5f0b, 0xaf => 0x5fd2, 0xb0 => 0x7519, 0xb1 => 0x5f11, 0xb2 => 0x535f, 0xb3 => 0x53f1, 0xb4 => 0x53fd, 0xb5 => 0x53e9, 0xb6 => 0x53e8, 0xb7 => 0x53fb, 0xb8 => 0x5412, 0xb9 => 0x5416, 0xba => 0x5406, 0xbb => 0x544b, 0xbc => 0x5452, 0xbd => 0x5453, 0xbe => 0x5454, 0xbf => 0x5456, 0xc0 => 0x5443, 0xc1 => 0x5421, 0xc2 => 0x5457, 0xc3 => 0x5459, 0xc4 => 0x5423, 0xc5 => 0x5432, 0xc6 => 0x5482, 0xc7 => 0x5494, 0xc8 => 0x5477, 0xc9 => 0x5471, 0xca => 0x5464, 0xcb => 0x549a, 0xcc => 0x549b, 0xcd => 0x5484, 0xce => 0x5476, 0xcf => 0x5466, 0xd0 => 0x549d, 0xd1 => 0x54d0, 0xd2 => 0x54ad, 0xd3 => 0x54c2, 0xd4 => 0x54b4, 0xd5 => 0x54d2, 0xd6 => 0x54a7, 0xd7 => 0x54a6, 0xd8 => 0x54d3, 0xd9 => 0x54d4, 0xda => 0x5472, 0xdb => 0x54a3, 0xdc => 0x54d5, 0xdd => 0x54bb, 0xde => 0x54bf, 0xdf => 0x54cc, 0xe0 => 0x54d9, 0xe1 => 0x54da, 0xe2 => 0x54dc, 0xe3 => 0x54a9, 0xe4 => 0x54aa, 0xe5 => 0x54a4, 0xe6 => 0x54dd, 0xe7 => 0x54cf, 0xe8 => 0x54de, 0xe9 => 0x551b, 0xea => 0x54e7, 0xeb => 0x5520, 0xec => 0x54fd, 0xed => 0x5514, 0xee => 0x54f3, 0xef => 0x5522, 0xf0 => 0x5523, 0xf1 => 0x550f, 0xf2 => 0x5511, 0xf3 => 0x5527, 0xf4 => 0x552a, 0xf5 => 0x5567, 0xf6 => 0x558f, 0xf7 => 0x55b5, 0xf8 => 0x5549, 0xf9 => 0x556d, 0xfa => 0x5541, 0xfb => 0x5555, 0xfc => 0x553f, 0xfd => 0x5550, 0xfe => 0x553c, }, 0xe0 => { 0xa1 => 0x5537, 0xa2 => 0x5556, 0xa3 => 0x5575, 0xa4 => 0x5576, 0xa5 => 0x5577, 0xa6 => 0x5533, 0xa7 => 0x5530, 0xa8 => 0x555c, 0xa9 => 0x558b, 0xaa => 0x55d2, 0xab => 0x5583, 0xac => 0x55b1, 0xad => 0x55b9, 0xae => 0x5588, 0xaf => 0x5581, 0xb0 => 0x559f, 0xb1 => 0x557e, 0xb2 => 0x55d6, 0xb3 => 0x5591, 0xb4 => 0x557b, 0xb5 => 0x55df, 0xb6 => 0x55bd, 0xb7 => 0x55be, 0xb8 => 0x5594, 0xb9 => 0x5599, 0xba => 0x55ea, 0xbb => 0x55f7, 0xbc => 0x55c9, 0xbd => 0x561f, 0xbe => 0x55d1, 0xbf => 0x55eb, 0xc0 => 0x55ec, 0xc1 => 0x55d4, 0xc2 => 0x55e6, 0xc3 => 0x55dd, 0xc4 => 0x55c4, 0xc5 => 0x55ef, 0xc6 => 0x55e5, 0xc7 => 0x55f2, 0xc8 => 0x55f3, 0xc9 => 0x55cc, 0xca => 0x55cd, 0xcb => 0x55e8, 0xcc => 0x55f5, 0xcd => 0x55e4, 0xce => 0x8f94, 0xcf => 0x561e, 0xd0 => 0x5608, 0xd1 => 0x560c, 0xd2 => 0x5601, 0xd3 => 0x5624, 0xd4 => 0x5623, 0xd5 => 0x55fe, 0xd6 => 0x5600, 0xd7 => 0x5627, 0xd8 => 0x562d, 0xd9 => 0x5658, 0xda => 0x5639, 0xdb => 0x5657, 0xdc => 0x562c, 0xdd => 0x564d, 0xde => 0x5662, 0xdf => 0x5659, 0xe0 => 0x565c, 0xe1 => 0x564c, 0xe2 => 0x5654, 0xe3 => 0x5686, 0xe4 => 0x5664, 0xe5 => 0x5671, 0xe6 => 0x566b, 0xe7 => 0x567b, 0xe8 => 0x567c, 0xe9 => 0x5685, 0xea => 0x5693, 0xeb => 0x56af, 0xec => 0x56d4, 0xed => 0x56d7, 0xee => 0x56dd, 0xef => 0x56e1, 0xf0 => 0x56f5, 0xf1 => 0x56eb, 0xf2 => 0x56f9, 0xf3 => 0x56ff, 0xf4 => 0x5704, 0xf5 => 0x570a, 0xf6 => 0x5709, 0xf7 => 0x571c, 0xf8 => 0x5e0f, 0xf9 => 0x5e19, 0xfa => 0x5e14, 0xfb => 0x5e11, 0xfc => 0x5e31, 0xfd => 0x5e3b, 0xfe => 0x5e3c, }, 0xe1 => { 0xa1 => 0x5e37, 0xa2 => 0x5e44, 0xa3 => 0x5e54, 0xa4 => 0x5e5b, 0xa5 => 0x5e5e, 0xa6 => 0x5e61, 0xa7 => 0x5c8c, 0xa8 => 0x5c7a, 0xa9 => 0x5c8d, 0xaa => 0x5c90, 0xab => 0x5c96, 0xac => 0x5c88, 0xad => 0x5c98, 0xae => 0x5c99, 0xaf => 0x5c91, 0xb0 => 0x5c9a, 0xb1 => 0x5c9c, 0xb2 => 0x5cb5, 0xb3 => 0x5ca2, 0xb4 => 0x5cbd, 0xb5 => 0x5cac, 0xb6 => 0x5cab, 0xb7 => 0x5cb1, 0xb8 => 0x5ca3, 0xb9 => 0x5cc1, 0xba => 0x5cb7, 0xbb => 0x5cc4, 0xbc => 0x5cd2, 0xbd => 0x5ce4, 0xbe => 0x5ccb, 0xbf => 0x5ce5, 0xc0 => 0x5d02, 0xc1 => 0x5d03, 0xc2 => 0x5d27, 0xc3 => 0x5d26, 0xc4 => 0x5d2e, 0xc5 => 0x5d24, 0xc6 => 0x5d1e, 0xc7 => 0x5d06, 0xc8 => 0x5d1b, 0xc9 => 0x5d58, 0xca => 0x5d3e, 0xcb => 0x5d34, 0xcc => 0x5d3d, 0xcd => 0x5d6c, 0xce => 0x5d5b, 0xcf => 0x5d6f, 0xd0 => 0x5d5d, 0xd1 => 0x5d6b, 0xd2 => 0x5d4b, 0xd3 => 0x5d4a, 0xd4 => 0x5d69, 0xd5 => 0x5d74, 0xd6 => 0x5d82, 0xd7 => 0x5d99, 0xd8 => 0x5d9d, 0xd9 => 0x8c73, 0xda => 0x5db7, 0xdb => 0x5dc5, 0xdc => 0x5f73, 0xdd => 0x5f77, 0xde => 0x5f82, 0xdf => 0x5f87, 0xe0 => 0x5f89, 0xe1 => 0x5f8c, 0xe2 => 0x5f95, 0xe3 => 0x5f99, 0xe4 => 0x5f9c, 0xe5 => 0x5fa8, 0xe6 => 0x5fad, 0xe7 => 0x5fb5, 0xe8 => 0x5fbc, 0xe9 => 0x8862, 0xea => 0x5f61, 0xeb => 0x72ad, 0xec => 0x72b0, 0xed => 0x72b4, 0xee => 0x72b7, 0xef => 0x72b8, 0xf0 => 0x72c3, 0xf1 => 0x72c1, 0xf2 => 0x72ce, 0xf3 => 0x72cd, 0xf4 => 0x72d2, 0xf5 => 0x72e8, 0xf6 => 0x72ef, 0xf7 => 0x72e9, 0xf8 => 0x72f2, 0xf9 => 0x72f4, 0xfa => 0x72f7, 0xfb => 0x7301, 0xfc => 0x72f3, 0xfd => 0x7303, 0xfe => 0x72fa, }, 0xe2 => { 0xa1 => 0x72fb, 0xa2 => 0x7317, 0xa3 => 0x7313, 0xa4 => 0x7321, 0xa5 => 0x730a, 0xa6 => 0x731e, 0xa7 => 0x731d, 0xa8 => 0x7315, 0xa9 => 0x7322, 0xaa => 0x7339, 0xab => 0x7325, 0xac => 0x732c, 0xad => 0x7338, 0xae => 0x7331, 0xaf => 0x7350, 0xb0 => 0x734d, 0xb1 => 0x7357, 0xb2 => 0x7360, 0xb3 => 0x736c, 0xb4 => 0x736f, 0xb5 => 0x737e, 0xb6 => 0x821b, 0xb7 => 0x5925, 0xb8 => 0x98e7, 0xb9 => 0x5924, 0xba => 0x5902, 0xbb => 0x9963, 0xbc => 0x9967, 0xbd => 0x9968, 0xbe => 0x9969, 0xbf => 0x996a, 0xc0 => 0x996b, 0xc1 => 0x996c, 0xc2 => 0x9974, 0xc3 => 0x9977, 0xc4 => 0x997d, 0xc5 => 0x9980, 0xc6 => 0x9984, 0xc7 => 0x9987, 0xc8 => 0x998a, 0xc9 => 0x998d, 0xca => 0x9990, 0xcb => 0x9991, 0xcc => 0x9993, 0xcd => 0x9994, 0xce => 0x9995, 0xcf => 0x5e80, 0xd0 => 0x5e91, 0xd1 => 0x5e8b, 0xd2 => 0x5e96, 0xd3 => 0x5ea5, 0xd4 => 0x5ea0, 0xd5 => 0x5eb9, 0xd6 => 0x5eb5, 0xd7 => 0x5ebe, 0xd8 => 0x5eb3, 0xd9 => 0x8d53, 0xda => 0x5ed2, 0xdb => 0x5ed1, 0xdc => 0x5edb, 0xdd => 0x5ee8, 0xde => 0x5eea, 0xdf => 0x81ba, 0xe0 => 0x5fc4, 0xe1 => 0x5fc9, 0xe2 => 0x5fd6, 0xe3 => 0x5fcf, 0xe4 => 0x6003, 0xe5 => 0x5fee, 0xe6 => 0x6004, 0xe7 => 0x5fe1, 0xe8 => 0x5fe4, 0xe9 => 0x5ffe, 0xea => 0x6005, 0xeb => 0x6006, 0xec => 0x5fea, 0xed => 0x5fed, 0xee => 0x5ff8, 0xef => 0x6019, 0xf0 => 0x6035, 0xf1 => 0x6026, 0xf2 => 0x601b, 0xf3 => 0x600f, 0xf4 => 0x600d, 0xf5 => 0x6029, 0xf6 => 0x602b, 0xf7 => 0x600a, 0xf8 => 0x603f, 0xf9 => 0x6021, 0xfa => 0x6078, 0xfb => 0x6079, 0xfc => 0x607b, 0xfd => 0x607a, 0xfe => 0x6042, }, 0xe3 => { 0xa1 => 0x606a, 0xa2 => 0x607d, 0xa3 => 0x6096, 0xa4 => 0x609a, 0xa5 => 0x60ad, 0xa6 => 0x609d, 0xa7 => 0x6083, 0xa8 => 0x6092, 0xa9 => 0x608c, 0xaa => 0x609b, 0xab => 0x60ec, 0xac => 0x60bb, 0xad => 0x60b1, 0xae => 0x60dd, 0xaf => 0x60d8, 0xb0 => 0x60c6, 0xb1 => 0x60da, 0xb2 => 0x60b4, 0xb3 => 0x6120, 0xb4 => 0x6126, 0xb5 => 0x6115, 0xb6 => 0x6123, 0xb7 => 0x60f4, 0xb8 => 0x6100, 0xb9 => 0x610e, 0xba => 0x612b, 0xbb => 0x614a, 0xbc => 0x6175, 0xbd => 0x61ac, 0xbe => 0x6194, 0xbf => 0x61a7, 0xc0 => 0x61b7, 0xc1 => 0x61d4, 0xc2 => 0x61f5, 0xc3 => 0x5fdd, 0xc4 => 0x96b3, 0xc5 => 0x95e9, 0xc6 => 0x95eb, 0xc7 => 0x95f1, 0xc8 => 0x95f3, 0xc9 => 0x95f5, 0xca => 0x95f6, 0xcb => 0x95fc, 0xcc => 0x95fe, 0xcd => 0x9603, 0xce => 0x9604, 0xcf => 0x9606, 0xd0 => 0x9608, 0xd1 => 0x960a, 0xd2 => 0x960b, 0xd3 => 0x960c, 0xd4 => 0x960d, 0xd5 => 0x960f, 0xd6 => 0x9612, 0xd7 => 0x9615, 0xd8 => 0x9616, 0xd9 => 0x9617, 0xda => 0x9619, 0xdb => 0x961a, 0xdc => 0x4e2c, 0xdd => 0x723f, 0xde => 0x6215, 0xdf => 0x6c35, 0xe0 => 0x6c54, 0xe1 => 0x6c5c, 0xe2 => 0x6c4a, 0xe3 => 0x6ca3, 0xe4 => 0x6c85, 0xe5 => 0x6c90, 0xe6 => 0x6c94, 0xe7 => 0x6c8c, 0xe8 => 0x6c68, 0xe9 => 0x6c69, 0xea => 0x6c74, 0xeb => 0x6c76, 0xec => 0x6c86, 0xed => 0x6ca9, 0xee => 0x6cd0, 0xef => 0x6cd4, 0xf0 => 0x6cad, 0xf1 => 0x6cf7, 0xf2 => 0x6cf8, 0xf3 => 0x6cf1, 0xf4 => 0x6cd7, 0xf5 => 0x6cb2, 0xf6 => 0x6ce0, 0xf7 => 0x6cd6, 0xf8 => 0x6cfa, 0xf9 => 0x6ceb, 0xfa => 0x6cee, 0xfb => 0x6cb1, 0xfc => 0x6cd3, 0xfd => 0x6cef, 0xfe => 0x6cfe, }, 0xe4 => { 0xa1 => 0x6d39, 0xa2 => 0x6d27, 0xa3 => 0x6d0c, 0xa4 => 0x6d43, 0xa5 => 0x6d48, 0xa6 => 0x6d07, 0xa7 => 0x6d04, 0xa8 => 0x6d19, 0xa9 => 0x6d0e, 0xaa => 0x6d2b, 0xab => 0x6d4d, 0xac => 0x6d2e, 0xad => 0x6d35, 0xae => 0x6d1a, 0xaf => 0x6d4f, 0xb0 => 0x6d52, 0xb1 => 0x6d54, 0xb2 => 0x6d33, 0xb3 => 0x6d91, 0xb4 => 0x6d6f, 0xb5 => 0x6d9e, 0xb6 => 0x6da0, 0xb7 => 0x6d5e, 0xb8 => 0x6d93, 0xb9 => 0x6d94, 0xba => 0x6d5c, 0xbb => 0x6d60, 0xbc => 0x6d7c, 0xbd => 0x6d63, 0xbe => 0x6e1a, 0xbf => 0x6dc7, 0xc0 => 0x6dc5, 0xc1 => 0x6dde, 0xc2 => 0x6e0e, 0xc3 => 0x6dbf, 0xc4 => 0x6de0, 0xc5 => 0x6e11, 0xc6 => 0x6de6, 0xc7 => 0x6ddd, 0xc8 => 0x6dd9, 0xc9 => 0x6e16, 0xca => 0x6dab, 0xcb => 0x6e0c, 0xcc => 0x6dae, 0xcd => 0x6e2b, 0xce => 0x6e6e, 0xcf => 0x6e4e, 0xd0 => 0x6e6b, 0xd1 => 0x6eb2, 0xd2 => 0x6e5f, 0xd3 => 0x6e86, 0xd4 => 0x6e53, 0xd5 => 0x6e54, 0xd6 => 0x6e32, 0xd7 => 0x6e25, 0xd8 => 0x6e44, 0xd9 => 0x6edf, 0xda => 0x6eb1, 0xdb => 0x6e98, 0xdc => 0x6ee0, 0xdd => 0x6f2d, 0xde => 0x6ee2, 0xdf => 0x6ea5, 0xe0 => 0x6ea7, 0xe1 => 0x6ebd, 0xe2 => 0x6ebb, 0xe3 => 0x6eb7, 0xe4 => 0x6ed7, 0xe5 => 0x6eb4, 0xe6 => 0x6ecf, 0xe7 => 0x6e8f, 0xe8 => 0x6ec2, 0xe9 => 0x6e9f, 0xea => 0x6f62, 0xeb => 0x6f46, 0xec => 0x6f47, 0xed => 0x6f24, 0xee => 0x6f15, 0xef => 0x6ef9, 0xf0 => 0x6f2f, 0xf1 => 0x6f36, 0xf2 => 0x6f4b, 0xf3 => 0x6f74, 0xf4 => 0x6f2a, 0xf5 => 0x6f09, 0xf6 => 0x6f29, 0xf7 => 0x6f89, 0xf8 => 0x6f8d, 0xf9 => 0x6f8c, 0xfa => 0x6f78, 0xfb => 0x6f72, 0xfc => 0x6f7c, 0xfd => 0x6f7a, 0xfe => 0x6fd1, }, 0xe5 => { 0xa1 => 0x6fc9, 0xa2 => 0x6fa7, 0xa3 => 0x6fb9, 0xa4 => 0x6fb6, 0xa5 => 0x6fc2, 0xa6 => 0x6fe1, 0xa7 => 0x6fee, 0xa8 => 0x6fde, 0xa9 => 0x6fe0, 0xaa => 0x6fef, 0xab => 0x701a, 0xac => 0x7023, 0xad => 0x701b, 0xae => 0x7039, 0xaf => 0x7035, 0xb0 => 0x704f, 0xb1 => 0x705e, 0xb2 => 0x5b80, 0xb3 => 0x5b84, 0xb4 => 0x5b95, 0xb5 => 0x5b93, 0xb6 => 0x5ba5, 0xb7 => 0x5bb8, 0xb8 => 0x752f, 0xb9 => 0x9a9e, 0xba => 0x6434, 0xbb => 0x5be4, 0xbc => 0x5bee, 0xbd => 0x8930, 0xbe => 0x5bf0, 0xbf => 0x8e47, 0xc0 => 0x8b07, 0xc1 => 0x8fb6, 0xc2 => 0x8fd3, 0xc3 => 0x8fd5, 0xc4 => 0x8fe5, 0xc5 => 0x8fee, 0xc6 => 0x8fe4, 0xc7 => 0x8fe9, 0xc8 => 0x8fe6, 0xc9 => 0x8ff3, 0xca => 0x8fe8, 0xcb => 0x9005, 0xcc => 0x9004, 0xcd => 0x900b, 0xce => 0x9026, 0xcf => 0x9011, 0xd0 => 0x900d, 0xd1 => 0x9016, 0xd2 => 0x9021, 0xd3 => 0x9035, 0xd4 => 0x9036, 0xd5 => 0x902d, 0xd6 => 0x902f, 0xd7 => 0x9044, 0xd8 => 0x9051, 0xd9 => 0x9052, 0xda => 0x9050, 0xdb => 0x9068, 0xdc => 0x9058, 0xdd => 0x9062, 0xde => 0x905b, 0xdf => 0x66b9, 0xe0 => 0x9074, 0xe1 => 0x907d, 0xe2 => 0x9082, 0xe3 => 0x9088, 0xe4 => 0x9083, 0xe5 => 0x908b, 0xe6 => 0x5f50, 0xe7 => 0x5f57, 0xe8 => 0x5f56, 0xe9 => 0x5f58, 0xea => 0x5c3b, 0xeb => 0x54ab, 0xec => 0x5c50, 0xed => 0x5c59, 0xee => 0x5b71, 0xef => 0x5c63, 0xf0 => 0x5c66, 0xf1 => 0x7fbc, 0xf2 => 0x5f2a, 0xf3 => 0x5f29, 0xf4 => 0x5f2d, 0xf5 => 0x8274, 0xf6 => 0x5f3c, 0xf7 => 0x9b3b, 0xf8 => 0x5c6e, 0xf9 => 0x5981, 0xfa => 0x5983, 0xfb => 0x598d, 0xfc => 0x59a9, 0xfd => 0x59aa, 0xfe => 0x59a3, }, 0xe6 => { 0xa1 => 0x5997, 0xa2 => 0x59ca, 0xa3 => 0x59ab, 0xa4 => 0x599e, 0xa5 => 0x59a4, 0xa6 => 0x59d2, 0xa7 => 0x59b2, 0xa8 => 0x59af, 0xa9 => 0x59d7, 0xaa => 0x59be, 0xab => 0x5a05, 0xac => 0x5a06, 0xad => 0x59dd, 0xae => 0x5a08, 0xaf => 0x59e3, 0xb0 => 0x59d8, 0xb1 => 0x59f9, 0xb2 => 0x5a0c, 0xb3 => 0x5a09, 0xb4 => 0x5a32, 0xb5 => 0x5a34, 0xb6 => 0x5a11, 0xb7 => 0x5a23, 0xb8 => 0x5a13, 0xb9 => 0x5a40, 0xba => 0x5a67, 0xbb => 0x5a4a, 0xbc => 0x5a55, 0xbd => 0x5a3c, 0xbe => 0x5a62, 0xbf => 0x5a75, 0xc0 => 0x80ec, 0xc1 => 0x5aaa, 0xc2 => 0x5a9b, 0xc3 => 0x5a77, 0xc4 => 0x5a7a, 0xc5 => 0x5abe, 0xc6 => 0x5aeb, 0xc7 => 0x5ab2, 0xc8 => 0x5ad2, 0xc9 => 0x5ad4, 0xca => 0x5ab8, 0xcb => 0x5ae0, 0xcc => 0x5ae3, 0xcd => 0x5af1, 0xce => 0x5ad6, 0xcf => 0x5ae6, 0xd0 => 0x5ad8, 0xd1 => 0x5adc, 0xd2 => 0x5b09, 0xd3 => 0x5b17, 0xd4 => 0x5b16, 0xd5 => 0x5b32, 0xd6 => 0x5b37, 0xd7 => 0x5b40, 0xd8 => 0x5c15, 0xd9 => 0x5c1c, 0xda => 0x5b5a, 0xdb => 0x5b65, 0xdc => 0x5b73, 0xdd => 0x5b51, 0xde => 0x5b53, 0xdf => 0x5b62, 0xe0 => 0x9a75, 0xe1 => 0x9a77, 0xe2 => 0x9a78, 0xe3 => 0x9a7a, 0xe4 => 0x9a7f, 0xe5 => 0x9a7d, 0xe6 => 0x9a80, 0xe7 => 0x9a81, 0xe8 => 0x9a85, 0xe9 => 0x9a88, 0xea => 0x9a8a, 0xeb => 0x9a90, 0xec => 0x9a92, 0xed => 0x9a93, 0xee => 0x9a96, 0xef => 0x9a98, 0xf0 => 0x9a9b, 0xf1 => 0x9a9c, 0xf2 => 0x9a9d, 0xf3 => 0x9a9f, 0xf4 => 0x9aa0, 0xf5 => 0x9aa2, 0xf6 => 0x9aa3, 0xf7 => 0x9aa5, 0xf8 => 0x9aa7, 0xf9 => 0x7e9f, 0xfa => 0x7ea1, 0xfb => 0x7ea3, 0xfc => 0x7ea5, 0xfd => 0x7ea8, 0xfe => 0x7ea9, }, 0xe7 => { 0xa1 => 0x7ead, 0xa2 => 0x7eb0, 0xa3 => 0x7ebe, 0xa4 => 0x7ec0, 0xa5 => 0x7ec1, 0xa6 => 0x7ec2, 0xa7 => 0x7ec9, 0xa8 => 0x7ecb, 0xa9 => 0x7ecc, 0xaa => 0x7ed0, 0xab => 0x7ed4, 0xac => 0x7ed7, 0xad => 0x7edb, 0xae => 0x7ee0, 0xaf => 0x7ee1, 0xb0 => 0x7ee8, 0xb1 => 0x7eeb, 0xb2 => 0x7eee, 0xb3 => 0x7eef, 0xb4 => 0x7ef1, 0xb5 => 0x7ef2, 0xb6 => 0x7f0d, 0xb7 => 0x7ef6, 0xb8 => 0x7efa, 0xb9 => 0x7efb, 0xba => 0x7efe, 0xbb => 0x7f01, 0xbc => 0x7f02, 0xbd => 0x7f03, 0xbe => 0x7f07, 0xbf => 0x7f08, 0xc0 => 0x7f0b, 0xc1 => 0x7f0c, 0xc2 => 0x7f0f, 0xc3 => 0x7f11, 0xc4 => 0x7f12, 0xc5 => 0x7f17, 0xc6 => 0x7f19, 0xc7 => 0x7f1c, 0xc8 => 0x7f1b, 0xc9 => 0x7f1f, 0xca => 0x7f21, 0xcb => 0x7f22, 0xcc => 0x7f23, 0xcd => 0x7f24, 0xce => 0x7f25, 0xcf => 0x7f26, 0xd0 => 0x7f27, 0xd1 => 0x7f2a, 0xd2 => 0x7f2b, 0xd3 => 0x7f2c, 0xd4 => 0x7f2d, 0xd5 => 0x7f2f, 0xd6 => 0x7f30, 0xd7 => 0x7f31, 0xd8 => 0x7f32, 0xd9 => 0x7f33, 0xda => 0x7f35, 0xdb => 0x5e7a, 0xdc => 0x757f, 0xdd => 0x5ddb, 0xde => 0x753e, 0xdf => 0x9095, 0xe0 => 0x738e, 0xe1 => 0x7391, 0xe2 => 0x73ae, 0xe3 => 0x73a2, 0xe4 => 0x739f, 0xe5 => 0x73cf, 0xe6 => 0x73c2, 0xe7 => 0x73d1, 0xe8 => 0x73b7, 0xe9 => 0x73b3, 0xea => 0x73c0, 0xeb => 0x73c9, 0xec => 0x73c8, 0xed => 0x73e5, 0xee => 0x73d9, 0xef => 0x987c, 0xf0 => 0x740a, 0xf1 => 0x73e9, 0xf2 => 0x73e7, 0xf3 => 0x73de, 0xf4 => 0x73ba, 0xf5 => 0x73f2, 0xf6 => 0x740f, 0xf7 => 0x742a, 0xf8 => 0x745b, 0xf9 => 0x7426, 0xfa => 0x7425, 0xfb => 0x7428, 0xfc => 0x7430, 0xfd => 0x742e, 0xfe => 0x742c, }, 0xe8 => { 0xa1 => 0x741b, 0xa2 => 0x741a, 0xa3 => 0x7441, 0xa4 => 0x745c, 0xa5 => 0x7457, 0xa6 => 0x7455, 0xa7 => 0x7459, 0xa8 => 0x7477, 0xa9 => 0x746d, 0xaa => 0x747e, 0xab => 0x749c, 0xac => 0x748e, 0xad => 0x7480, 0xae => 0x7481, 0xaf => 0x7487, 0xb0 => 0x748b, 0xb1 => 0x749e, 0xb2 => 0x74a8, 0xb3 => 0x74a9, 0xb4 => 0x7490, 0xb5 => 0x74a7, 0xb6 => 0x74d2, 0xb7 => 0x74ba, 0xb8 => 0x97ea, 0xb9 => 0x97eb, 0xba => 0x97ec, 0xbb => 0x674c, 0xbc => 0x6753, 0xbd => 0x675e, 0xbe => 0x6748, 0xbf => 0x6769, 0xc0 => 0x67a5, 0xc1 => 0x6787, 0xc2 => 0x676a, 0xc3 => 0x6773, 0xc4 => 0x6798, 0xc5 => 0x67a7, 0xc6 => 0x6775, 0xc7 => 0x67a8, 0xc8 => 0x679e, 0xc9 => 0x67ad, 0xca => 0x678b, 0xcb => 0x6777, 0xcc => 0x677c, 0xcd => 0x67f0, 0xce => 0x6809, 0xcf => 0x67d8, 0xd0 => 0x680a, 0xd1 => 0x67e9, 0xd2 => 0x67b0, 0xd3 => 0x680c, 0xd4 => 0x67d9, 0xd5 => 0x67b5, 0xd6 => 0x67da, 0xd7 => 0x67b3, 0xd8 => 0x67dd, 0xd9 => 0x6800, 0xda => 0x67c3, 0xdb => 0x67b8, 0xdc => 0x67e2, 0xdd => 0x680e, 0xde => 0x67c1, 0xdf => 0x67fd, 0xe0 => 0x6832, 0xe1 => 0x6833, 0xe2 => 0x6860, 0xe3 => 0x6861, 0xe4 => 0x684e, 0xe5 => 0x6862, 0xe6 => 0x6844, 0xe7 => 0x6864, 0xe8 => 0x6883, 0xe9 => 0x681d, 0xea => 0x6855, 0xeb => 0x6866, 0xec => 0x6841, 0xed => 0x6867, 0xee => 0x6840, 0xef => 0x683e, 0xf0 => 0x684a, 0xf1 => 0x6849, 0xf2 => 0x6829, 0xf3 => 0x68b5, 0xf4 => 0x688f, 0xf5 => 0x6874, 0xf6 => 0x6877, 0xf7 => 0x6893, 0xf8 => 0x686b, 0xf9 => 0x68c2, 0xfa => 0x696e, 0xfb => 0x68fc, 0xfc => 0x691f, 0xfd => 0x6920, 0xfe => 0x68f9, }, 0xe9 => { 0xa1 => 0x6924, 0xa2 => 0x68f0, 0xa3 => 0x690b, 0xa4 => 0x6901, 0xa5 => 0x6957, 0xa6 => 0x68e3, 0xa7 => 0x6910, 0xa8 => 0x6971, 0xa9 => 0x6939, 0xaa => 0x6960, 0xab => 0x6942, 0xac => 0x695d, 0xad => 0x6984, 0xae => 0x696b, 0xaf => 0x6980, 0xb0 => 0x6998, 0xb1 => 0x6978, 0xb2 => 0x6934, 0xb3 => 0x69cc, 0xb4 => 0x6987, 0xb5 => 0x6988, 0xb6 => 0x69ce, 0xb7 => 0x6989, 0xb8 => 0x6966, 0xb9 => 0x6963, 0xba => 0x6979, 0xbb => 0x699b, 0xbc => 0x69a7, 0xbd => 0x69bb, 0xbe => 0x69ab, 0xbf => 0x69ad, 0xc0 => 0x69d4, 0xc1 => 0x69b1, 0xc2 => 0x69c1, 0xc3 => 0x69ca, 0xc4 => 0x69df, 0xc5 => 0x6995, 0xc6 => 0x69e0, 0xc7 => 0x698d, 0xc8 => 0x69ff, 0xc9 => 0x6a2f, 0xca => 0x69ed, 0xcb => 0x6a17, 0xcc => 0x6a18, 0xcd => 0x6a65, 0xce => 0x69f2, 0xcf => 0x6a44, 0xd0 => 0x6a3e, 0xd1 => 0x6aa0, 0xd2 => 0x6a50, 0xd3 => 0x6a5b, 0xd4 => 0x6a35, 0xd5 => 0x6a8e, 0xd6 => 0x6a79, 0xd7 => 0x6a3d, 0xd8 => 0x6a28, 0xd9 => 0x6a58, 0xda => 0x6a7c, 0xdb => 0x6a91, 0xdc => 0x6a90, 0xdd => 0x6aa9, 0xde => 0x6a97, 0xdf => 0x6aab, 0xe0 => 0x7337, 0xe1 => 0x7352, 0xe2 => 0x6b81, 0xe3 => 0x6b82, 0xe4 => 0x6b87, 0xe5 => 0x6b84, 0xe6 => 0x6b92, 0xe7 => 0x6b93, 0xe8 => 0x6b8d, 0xe9 => 0x6b9a, 0xea => 0x6b9b, 0xeb => 0x6ba1, 0xec => 0x6baa, 0xed => 0x8f6b, 0xee => 0x8f6d, 0xef => 0x8f71, 0xf0 => 0x8f72, 0xf1 => 0x8f73, 0xf2 => 0x8f75, 0xf3 => 0x8f76, 0xf4 => 0x8f78, 0xf5 => 0x8f77, 0xf6 => 0x8f79, 0xf7 => 0x8f7a, 0xf8 => 0x8f7c, 0xf9 => 0x8f7e, 0xfa => 0x8f81, 0xfb => 0x8f82, 0xfc => 0x8f84, 0xfd => 0x8f87, 0xfe => 0x8f8b, }, 0xea => { 0xa1 => 0x8f8d, 0xa2 => 0x8f8e, 0xa3 => 0x8f8f, 0xa4 => 0x8f98, 0xa5 => 0x8f9a, 0xa6 => 0x8ece, 0xa7 => 0x620b, 0xa8 => 0x6217, 0xa9 => 0x621b, 0xaa => 0x621f, 0xab => 0x6222, 0xac => 0x6221, 0xad => 0x6225, 0xae => 0x6224, 0xaf => 0x622c, 0xb0 => 0x81e7, 0xb1 => 0x74ef, 0xb2 => 0x74f4, 0xb3 => 0x74ff, 0xb4 => 0x750f, 0xb5 => 0x7511, 0xb6 => 0x7513, 0xb7 => 0x6534, 0xb8 => 0x65ee, 0xb9 => 0x65ef, 0xba => 0x65f0, 0xbb => 0x660a, 0xbc => 0x6619, 0xbd => 0x6772, 0xbe => 0x6603, 0xbf => 0x6615, 0xc0 => 0x6600, 0xc1 => 0x7085, 0xc2 => 0x66f7, 0xc3 => 0x661d, 0xc4 => 0x6634, 0xc5 => 0x6631, 0xc6 => 0x6636, 0xc7 => 0x6635, 0xc8 => 0x8006, 0xc9 => 0x665f, 0xca => 0x6654, 0xcb => 0x6641, 0xcc => 0x664f, 0xcd => 0x6656, 0xce => 0x6661, 0xcf => 0x6657, 0xd0 => 0x6677, 0xd1 => 0x6684, 0xd2 => 0x668c, 0xd3 => 0x66a7, 0xd4 => 0x669d, 0xd5 => 0x66be, 0xd6 => 0x66db, 0xd7 => 0x66dc, 0xd8 => 0x66e6, 0xd9 => 0x66e9, 0xda => 0x8d32, 0xdb => 0x8d33, 0xdc => 0x8d36, 0xdd => 0x8d3b, 0xde => 0x8d3d, 0xdf => 0x8d40, 0xe0 => 0x8d45, 0xe1 => 0x8d46, 0xe2 => 0x8d48, 0xe3 => 0x8d49, 0xe4 => 0x8d47, 0xe5 => 0x8d4d, 0xe6 => 0x8d55, 0xe7 => 0x8d59, 0xe8 => 0x89c7, 0xe9 => 0x89ca, 0xea => 0x89cb, 0xeb => 0x89cc, 0xec => 0x89ce, 0xed => 0x89cf, 0xee => 0x89d0, 0xef => 0x89d1, 0xf0 => 0x726e, 0xf1 => 0x729f, 0xf2 => 0x725d, 0xf3 => 0x7266, 0xf4 => 0x726f, 0xf5 => 0x727e, 0xf6 => 0x727f, 0xf7 => 0x7284, 0xf8 => 0x728b, 0xf9 => 0x728d, 0xfa => 0x728f, 0xfb => 0x7292, 0xfc => 0x6308, 0xfd => 0x6332, 0xfe => 0x63b0, }, 0xeb => { 0xa1 => 0x643f, 0xa2 => 0x64d8, 0xa3 => 0x8004, 0xa4 => 0x6bea, 0xa5 => 0x6bf3, 0xa6 => 0x6bfd, 0xa7 => 0x6bf5, 0xa8 => 0x6bf9, 0xa9 => 0x6c05, 0xaa => 0x6c07, 0xab => 0x6c06, 0xac => 0x6c0d, 0xad => 0x6c15, 0xae => 0x6c18, 0xaf => 0x6c19, 0xb0 => 0x6c1a, 0xb1 => 0x6c21, 0xb2 => 0x6c29, 0xb3 => 0x6c24, 0xb4 => 0x6c2a, 0xb5 => 0x6c32, 0xb6 => 0x6535, 0xb7 => 0x6555, 0xb8 => 0x656b, 0xb9 => 0x724d, 0xba => 0x7252, 0xbb => 0x7256, 0xbc => 0x7230, 0xbd => 0x8662, 0xbe => 0x5216, 0xbf => 0x809f, 0xc0 => 0x809c, 0xc1 => 0x8093, 0xc2 => 0x80bc, 0xc3 => 0x670a, 0xc4 => 0x80bd, 0xc5 => 0x80b1, 0xc6 => 0x80ab, 0xc7 => 0x80ad, 0xc8 => 0x80b4, 0xc9 => 0x80b7, 0xca => 0x80e7, 0xcb => 0x80e8, 0xcc => 0x80e9, 0xcd => 0x80ea, 0xce => 0x80db, 0xcf => 0x80c2, 0xd0 => 0x80c4, 0xd1 => 0x80d9, 0xd2 => 0x80cd, 0xd3 => 0x80d7, 0xd4 => 0x6710, 0xd5 => 0x80dd, 0xd6 => 0x80eb, 0xd7 => 0x80f1, 0xd8 => 0x80f4, 0xd9 => 0x80ed, 0xda => 0x810d, 0xdb => 0x810e, 0xdc => 0x80f2, 0xdd => 0x80fc, 0xde => 0x6715, 0xdf => 0x8112, 0xe0 => 0x8c5a, 0xe1 => 0x8136, 0xe2 => 0x811e, 0xe3 => 0x812c, 0xe4 => 0x8118, 0xe5 => 0x8132, 0xe6 => 0x8148, 0xe7 => 0x814c, 0xe8 => 0x8153, 0xe9 => 0x8174, 0xea => 0x8159, 0xeb => 0x815a, 0xec => 0x8171, 0xed => 0x8160, 0xee => 0x8169, 0xef => 0x817c, 0xf0 => 0x817d, 0xf1 => 0x816d, 0xf2 => 0x8167, 0xf3 => 0x584d, 0xf4 => 0x5ab5, 0xf5 => 0x8188, 0xf6 => 0x8182, 0xf7 => 0x8191, 0xf8 => 0x6ed5, 0xf9 => 0x81a3, 0xfa => 0x81aa, 0xfb => 0x81cc, 0xfc => 0x6726, 0xfd => 0x81ca, 0xfe => 0x81bb, }, 0xec => { 0xa1 => 0x81c1, 0xa2 => 0x81a6, 0xa3 => 0x6b24, 0xa4 => 0x6b37, 0xa5 => 0x6b39, 0xa6 => 0x6b43, 0xa7 => 0x6b46, 0xa8 => 0x6b59, 0xa9 => 0x98d1, 0xaa => 0x98d2, 0xab => 0x98d3, 0xac => 0x98d5, 0xad => 0x98d9, 0xae => 0x98da, 0xaf => 0x6bb3, 0xb0 => 0x5f40, 0xb1 => 0x6bc2, 0xb2 => 0x89f3, 0xb3 => 0x6590, 0xb4 => 0x9f51, 0xb5 => 0x6593, 0xb6 => 0x65bc, 0xb7 => 0x65c6, 0xb8 => 0x65c4, 0xb9 => 0x65c3, 0xba => 0x65cc, 0xbb => 0x65ce, 0xbc => 0x65d2, 0xbd => 0x65d6, 0xbe => 0x7080, 0xbf => 0x709c, 0xc0 => 0x7096, 0xc1 => 0x709d, 0xc2 => 0x70bb, 0xc3 => 0x70c0, 0xc4 => 0x70b7, 0xc5 => 0x70ab, 0xc6 => 0x70b1, 0xc7 => 0x70e8, 0xc8 => 0x70ca, 0xc9 => 0x7110, 0xca => 0x7113, 0xcb => 0x7116, 0xcc => 0x712f, 0xcd => 0x7131, 0xce => 0x7173, 0xcf => 0x715c, 0xd0 => 0x7168, 0xd1 => 0x7145, 0xd2 => 0x7172, 0xd3 => 0x714a, 0xd4 => 0x7178, 0xd5 => 0x717a, 0xd6 => 0x7198, 0xd7 => 0x71b3, 0xd8 => 0x71b5, 0xd9 => 0x71a8, 0xda => 0x71a0, 0xdb => 0x71e0, 0xdc => 0x71d4, 0xdd => 0x71e7, 0xde => 0x71f9, 0xdf => 0x721d, 0xe0 => 0x7228, 0xe1 => 0x706c, 0xe2 => 0x7118, 0xe3 => 0x7166, 0xe4 => 0x71b9, 0xe5 => 0x623e, 0xe6 => 0x623d, 0xe7 => 0x6243, 0xe8 => 0x6248, 0xe9 => 0x6249, 0xea => 0x793b, 0xeb => 0x7940, 0xec => 0x7946, 0xed => 0x7949, 0xee => 0x795b, 0xef => 0x795c, 0xf0 => 0x7953, 0xf1 => 0x795a, 0xf2 => 0x7962, 0xf3 => 0x7957, 0xf4 => 0x7960, 0xf5 => 0x796f, 0xf6 => 0x7967, 0xf7 => 0x797a, 0xf8 => 0x7985, 0xf9 => 0x798a, 0xfa => 0x799a, 0xfb => 0x79a7, 0xfc => 0x79b3, 0xfd => 0x5fd1, 0xfe => 0x5fd0, }, 0xed => { 0xa1 => 0x603c, 0xa2 => 0x605d, 0xa3 => 0x605a, 0xa4 => 0x6067, 0xa5 => 0x6041, 0xa6 => 0x6059, 0xa7 => 0x6063, 0xa8 => 0x60ab, 0xa9 => 0x6106, 0xaa => 0x610d, 0xab => 0x615d, 0xac => 0x61a9, 0xad => 0x619d, 0xae => 0x61cb, 0xaf => 0x61d1, 0xb0 => 0x6206, 0xb1 => 0x8080, 0xb2 => 0x807f, 0xb3 => 0x6c93, 0xb4 => 0x6cf6, 0xb5 => 0x6dfc, 0xb6 => 0x77f6, 0xb7 => 0x77f8, 0xb8 => 0x7800, 0xb9 => 0x7809, 0xba => 0x7817, 0xbb => 0x7818, 0xbc => 0x7811, 0xbd => 0x65ab, 0xbe => 0x782d, 0xbf => 0x781c, 0xc0 => 0x781d, 0xc1 => 0x7839, 0xc2 => 0x783a, 0xc3 => 0x783b, 0xc4 => 0x781f, 0xc5 => 0x783c, 0xc6 => 0x7825, 0xc7 => 0x782c, 0xc8 => 0x7823, 0xc9 => 0x7829, 0xca => 0x784e, 0xcb => 0x786d, 0xcc => 0x7856, 0xcd => 0x7857, 0xce => 0x7826, 0xcf => 0x7850, 0xd0 => 0x7847, 0xd1 => 0x784c, 0xd2 => 0x786a, 0xd3 => 0x789b, 0xd4 => 0x7893, 0xd5 => 0x789a, 0xd6 => 0x7887, 0xd7 => 0x789c, 0xd8 => 0x78a1, 0xd9 => 0x78a3, 0xda => 0x78b2, 0xdb => 0x78b9, 0xdc => 0x78a5, 0xdd => 0x78d4, 0xde => 0x78d9, 0xdf => 0x78c9, 0xe0 => 0x78ec, 0xe1 => 0x78f2, 0xe2 => 0x7905, 0xe3 => 0x78f4, 0xe4 => 0x7913, 0xe5 => 0x7924, 0xe6 => 0x791e, 0xe7 => 0x7934, 0xe8 => 0x9f9b, 0xe9 => 0x9ef9, 0xea => 0x9efb, 0xeb => 0x9efc, 0xec => 0x76f1, 0xed => 0x7704, 0xee => 0x770d, 0xef => 0x76f9, 0xf0 => 0x7707, 0xf1 => 0x7708, 0xf2 => 0x771a, 0xf3 => 0x7722, 0xf4 => 0x7719, 0xf5 => 0x772d, 0xf6 => 0x7726, 0xf7 => 0x7735, 0xf8 => 0x7738, 0xf9 => 0x7750, 0xfa => 0x7751, 0xfb => 0x7747, 0xfc => 0x7743, 0xfd => 0x775a, 0xfe => 0x7768, }, 0xee => { 0xa1 => 0x7762, 0xa2 => 0x7765, 0xa3 => 0x777f, 0xa4 => 0x778d, 0xa5 => 0x777d, 0xa6 => 0x7780, 0xa7 => 0x778c, 0xa8 => 0x7791, 0xa9 => 0x779f, 0xaa => 0x77a0, 0xab => 0x77b0, 0xac => 0x77b5, 0xad => 0x77bd, 0xae => 0x753a, 0xaf => 0x7540, 0xb0 => 0x754e, 0xb1 => 0x754b, 0xb2 => 0x7548, 0xb3 => 0x755b, 0xb4 => 0x7572, 0xb5 => 0x7579, 0xb6 => 0x7583, 0xb7 => 0x7f58, 0xb8 => 0x7f61, 0xb9 => 0x7f5f, 0xba => 0x8a48, 0xbb => 0x7f68, 0xbc => 0x7f74, 0xbd => 0x7f71, 0xbe => 0x7f79, 0xbf => 0x7f81, 0xc0 => 0x7f7e, 0xc1 => 0x76cd, 0xc2 => 0x76e5, 0xc3 => 0x8832, 0xc4 => 0x9485, 0xc5 => 0x9486, 0xc6 => 0x9487, 0xc7 => 0x948b, 0xc8 => 0x948a, 0xc9 => 0x948c, 0xca => 0x948d, 0xcb => 0x948f, 0xcc => 0x9490, 0xcd => 0x9494, 0xce => 0x9497, 0xcf => 0x9495, 0xd0 => 0x949a, 0xd1 => 0x949b, 0xd2 => 0x949c, 0xd3 => 0x94a3, 0xd4 => 0x94a4, 0xd5 => 0x94ab, 0xd6 => 0x94aa, 0xd7 => 0x94ad, 0xd8 => 0x94ac, 0xd9 => 0x94af, 0xda => 0x94b0, 0xdb => 0x94b2, 0xdc => 0x94b4, 0xdd => 0x94b6, 0xde => 0x94b7, 0xdf => 0x94b8, 0xe0 => 0x94b9, 0xe1 => 0x94ba, 0xe2 => 0x94bc, 0xe3 => 0x94bd, 0xe4 => 0x94bf, 0xe5 => 0x94c4, 0xe6 => 0x94c8, 0xe7 => 0x94c9, 0xe8 => 0x94ca, 0xe9 => 0x94cb, 0xea => 0x94cc, 0xeb => 0x94cd, 0xec => 0x94ce, 0xed => 0x94d0, 0xee => 0x94d1, 0xef => 0x94d2, 0xf0 => 0x94d5, 0xf1 => 0x94d6, 0xf2 => 0x94d7, 0xf3 => 0x94d9, 0xf4 => 0x94d8, 0xf5 => 0x94db, 0xf6 => 0x94de, 0xf7 => 0x94df, 0xf8 => 0x94e0, 0xf9 => 0x94e2, 0xfa => 0x94e4, 0xfb => 0x94e5, 0xfc => 0x94e7, 0xfd => 0x94e8, 0xfe => 0x94ea, }, 0xef => { 0xa1 => 0x94e9, 0xa2 => 0x94eb, 0xa3 => 0x94ee, 0xa4 => 0x94ef, 0xa5 => 0x94f3, 0xa6 => 0x94f4, 0xa7 => 0x94f5, 0xa8 => 0x94f7, 0xa9 => 0x94f9, 0xaa => 0x94fc, 0xab => 0x94fd, 0xac => 0x94ff, 0xad => 0x9503, 0xae => 0x9502, 0xaf => 0x9506, 0xb0 => 0x9507, 0xb1 => 0x9509, 0xb2 => 0x950a, 0xb3 => 0x950d, 0xb4 => 0x950e, 0xb5 => 0x950f, 0xb6 => 0x9512, 0xb7 => 0x9513, 0xb8 => 0x9514, 0xb9 => 0x9515, 0xba => 0x9516, 0xbb => 0x9518, 0xbc => 0x951b, 0xbd => 0x951d, 0xbe => 0x951e, 0xbf => 0x951f, 0xc0 => 0x9522, 0xc1 => 0x952a, 0xc2 => 0x952b, 0xc3 => 0x9529, 0xc4 => 0x952c, 0xc5 => 0x9531, 0xc6 => 0x9532, 0xc7 => 0x9534, 0xc8 => 0x9536, 0xc9 => 0x9537, 0xca => 0x9538, 0xcb => 0x953c, 0xcc => 0x953e, 0xcd => 0x953f, 0xce => 0x9542, 0xcf => 0x9535, 0xd0 => 0x9544, 0xd1 => 0x9545, 0xd2 => 0x9546, 0xd3 => 0x9549, 0xd4 => 0x954c, 0xd5 => 0x954e, 0xd6 => 0x954f, 0xd7 => 0x9552, 0xd8 => 0x9553, 0xd9 => 0x9554, 0xda => 0x9556, 0xdb => 0x9557, 0xdc => 0x9558, 0xdd => 0x9559, 0xde => 0x955b, 0xdf => 0x955e, 0xe0 => 0x955f, 0xe1 => 0x955d, 0xe2 => 0x9561, 0xe3 => 0x9562, 0xe4 => 0x9564, 0xe5 => 0x9565, 0xe6 => 0x9566, 0xe7 => 0x9567, 0xe8 => 0x9568, 0xe9 => 0x9569, 0xea => 0x956a, 0xeb => 0x956b, 0xec => 0x956c, 0xed => 0x956f, 0xee => 0x9571, 0xef => 0x9572, 0xf0 => 0x9573, 0xf1 => 0x953a, 0xf2 => 0x77e7, 0xf3 => 0x77ec, 0xf4 => 0x96c9, 0xf5 => 0x79d5, 0xf6 => 0x79ed, 0xf7 => 0x79e3, 0xf8 => 0x79eb, 0xf9 => 0x7a06, 0xfa => 0x5d47, 0xfb => 0x7a03, 0xfc => 0x7a02, 0xfd => 0x7a1e, 0xfe => 0x7a14, }, 0xf0 => { 0xa1 => 0x7a39, 0xa2 => 0x7a37, 0xa3 => 0x7a51, 0xa4 => 0x9ecf, 0xa5 => 0x99a5, 0xa6 => 0x7a70, 0xa7 => 0x7688, 0xa8 => 0x768e, 0xa9 => 0x7693, 0xaa => 0x7699, 0xab => 0x76a4, 0xac => 0x74de, 0xad => 0x74e0, 0xae => 0x752c, 0xaf => 0x9e20, 0xb0 => 0x9e22, 0xb1 => 0x9e28, 0xb2 => 0x9e29, 0xb3 => 0x9e2a, 0xb4 => 0x9e2b, 0xb5 => 0x9e2c, 0xb6 => 0x9e32, 0xb7 => 0x9e31, 0xb8 => 0x9e36, 0xb9 => 0x9e38, 0xba => 0x9e37, 0xbb => 0x9e39, 0xbc => 0x9e3a, 0xbd => 0x9e3e, 0xbe => 0x9e41, 0xbf => 0x9e42, 0xc0 => 0x9e44, 0xc1 => 0x9e46, 0xc2 => 0x9e47, 0xc3 => 0x9e48, 0xc4 => 0x9e49, 0xc5 => 0x9e4b, 0xc6 => 0x9e4c, 0xc7 => 0x9e4e, 0xc8 => 0x9e51, 0xc9 => 0x9e55, 0xca => 0x9e57, 0xcb => 0x9e5a, 0xcc => 0x9e5b, 0xcd => 0x9e5c, 0xce => 0x9e5e, 0xcf => 0x9e63, 0xd0 => 0x9e66, 0xd1 => 0x9e67, 0xd2 => 0x9e68, 0xd3 => 0x9e69, 0xd4 => 0x9e6a, 0xd5 => 0x9e6b, 0xd6 => 0x9e6c, 0xd7 => 0x9e71, 0xd8 => 0x9e6d, 0xd9 => 0x9e73, 0xda => 0x7592, 0xdb => 0x7594, 0xdc => 0x7596, 0xdd => 0x75a0, 0xde => 0x759d, 0xdf => 0x75ac, 0xe0 => 0x75a3, 0xe1 => 0x75b3, 0xe2 => 0x75b4, 0xe3 => 0x75b8, 0xe4 => 0x75c4, 0xe5 => 0x75b1, 0xe6 => 0x75b0, 0xe7 => 0x75c3, 0xe8 => 0x75c2, 0xe9 => 0x75d6, 0xea => 0x75cd, 0xeb => 0x75e3, 0xec => 0x75e8, 0xed => 0x75e6, 0xee => 0x75e4, 0xef => 0x75eb, 0xf0 => 0x75e7, 0xf1 => 0x7603, 0xf2 => 0x75f1, 0xf3 => 0x75fc, 0xf4 => 0x75ff, 0xf5 => 0x7610, 0xf6 => 0x7600, 0xf7 => 0x7605, 0xf8 => 0x760c, 0xf9 => 0x7617, 0xfa => 0x760a, 0xfb => 0x7625, 0xfc => 0x7618, 0xfd => 0x7615, 0xfe => 0x7619, }, 0xf1 => { 0xa1 => 0x761b, 0xa2 => 0x763c, 0xa3 => 0x7622, 0xa4 => 0x7620, 0xa5 => 0x7640, 0xa6 => 0x762d, 0xa7 => 0x7630, 0xa8 => 0x763f, 0xa9 => 0x7635, 0xaa => 0x7643, 0xab => 0x763e, 0xac => 0x7633, 0xad => 0x764d, 0xae => 0x765e, 0xaf => 0x7654, 0xb0 => 0x765c, 0xb1 => 0x7656, 0xb2 => 0x766b, 0xb3 => 0x766f, 0xb4 => 0x7fca, 0xb5 => 0x7ae6, 0xb6 => 0x7a78, 0xb7 => 0x7a79, 0xb8 => 0x7a80, 0xb9 => 0x7a86, 0xba => 0x7a88, 0xbb => 0x7a95, 0xbc => 0x7aa6, 0xbd => 0x7aa0, 0xbe => 0x7aac, 0xbf => 0x7aa8, 0xc0 => 0x7aad, 0xc1 => 0x7ab3, 0xc2 => 0x8864, 0xc3 => 0x8869, 0xc4 => 0x8872, 0xc5 => 0x887d, 0xc6 => 0x887f, 0xc7 => 0x8882, 0xc8 => 0x88a2, 0xc9 => 0x88c6, 0xca => 0x88b7, 0xcb => 0x88bc, 0xcc => 0x88c9, 0xcd => 0x88e2, 0xce => 0x88ce, 0xcf => 0x88e3, 0xd0 => 0x88e5, 0xd1 => 0x88f1, 0xd2 => 0x891a, 0xd3 => 0x88fc, 0xd4 => 0x88e8, 0xd5 => 0x88fe, 0xd6 => 0x88f0, 0xd7 => 0x8921, 0xd8 => 0x8919, 0xd9 => 0x8913, 0xda => 0x891b, 0xdb => 0x890a, 0xdc => 0x8934, 0xdd => 0x892b, 0xde => 0x8936, 0xdf => 0x8941, 0xe0 => 0x8966, 0xe1 => 0x897b, 0xe2 => 0x758b, 0xe3 => 0x80e5, 0xe4 => 0x76b2, 0xe5 => 0x76b4, 0xe6 => 0x77dc, 0xe7 => 0x8012, 0xe8 => 0x8014, 0xe9 => 0x8016, 0xea => 0x801c, 0xeb => 0x8020, 0xec => 0x8022, 0xed => 0x8025, 0xee => 0x8026, 0xef => 0x8027, 0xf0 => 0x8029, 0xf1 => 0x8028, 0xf2 => 0x8031, 0xf3 => 0x800b, 0xf4 => 0x8035, 0xf5 => 0x8043, 0xf6 => 0x8046, 0xf7 => 0x804d, 0xf8 => 0x8052, 0xf9 => 0x8069, 0xfa => 0x8071, 0xfb => 0x8983, 0xfc => 0x9878, 0xfd => 0x9880, 0xfe => 0x9883, }, 0xf2 => { 0xa1 => 0x9889, 0xa2 => 0x988c, 0xa3 => 0x988d, 0xa4 => 0x988f, 0xa5 => 0x9894, 0xa6 => 0x989a, 0xa7 => 0x989b, 0xa8 => 0x989e, 0xa9 => 0x989f, 0xaa => 0x98a1, 0xab => 0x98a2, 0xac => 0x98a5, 0xad => 0x98a6, 0xae => 0x864d, 0xaf => 0x8654, 0xb0 => 0x866c, 0xb1 => 0x866e, 0xb2 => 0x867f, 0xb3 => 0x867a, 0xb4 => 0x867c, 0xb5 => 0x867b, 0xb6 => 0x86a8, 0xb7 => 0x868d, 0xb8 => 0x868b, 0xb9 => 0x86ac, 0xba => 0x869d, 0xbb => 0x86a7, 0xbc => 0x86a3, 0xbd => 0x86aa, 0xbe => 0x8693, 0xbf => 0x86a9, 0xc0 => 0x86b6, 0xc1 => 0x86c4, 0xc2 => 0x86b5, 0xc3 => 0x86ce, 0xc4 => 0x86b0, 0xc5 => 0x86ba, 0xc6 => 0x86b1, 0xc7 => 0x86af, 0xc8 => 0x86c9, 0xc9 => 0x86cf, 0xca => 0x86b4, 0xcb => 0x86e9, 0xcc => 0x86f1, 0xcd => 0x86f2, 0xce => 0x86ed, 0xcf => 0x86f3, 0xd0 => 0x86d0, 0xd1 => 0x8713, 0xd2 => 0x86de, 0xd3 => 0x86f4, 0xd4 => 0x86df, 0xd5 => 0x86d8, 0xd6 => 0x86d1, 0xd7 => 0x8703, 0xd8 => 0x8707, 0xd9 => 0x86f8, 0xda => 0x8708, 0xdb => 0x870a, 0xdc => 0x870d, 0xdd => 0x8709, 0xde => 0x8723, 0xdf => 0x873b, 0xe0 => 0x871e, 0xe1 => 0x8725, 0xe2 => 0x872e, 0xe3 => 0x871a, 0xe4 => 0x873e, 0xe5 => 0x8748, 0xe6 => 0x8734, 0xe7 => 0x8731, 0xe8 => 0x8729, 0xe9 => 0x8737, 0xea => 0x873f, 0xeb => 0x8782, 0xec => 0x8722, 0xed => 0x877d, 0xee => 0x877e, 0xef => 0x877b, 0xf0 => 0x8760, 0xf1 => 0x8770, 0xf2 => 0x874c, 0xf3 => 0x876e, 0xf4 => 0x878b, 0xf5 => 0x8753, 0xf6 => 0x8763, 0xf7 => 0x877c, 0xf8 => 0x8764, 0xf9 => 0x8759, 0xfa => 0x8765, 0xfb => 0x8793, 0xfc => 0x87af, 0xfd => 0x87a8, 0xfe => 0x87d2, }, 0xf3 => { 0xa1 => 0x87c6, 0xa2 => 0x8788, 0xa3 => 0x8785, 0xa4 => 0x87ad, 0xa5 => 0x8797, 0xa6 => 0x8783, 0xa7 => 0x87ab, 0xa8 => 0x87e5, 0xa9 => 0x87ac, 0xaa => 0x87b5, 0xab => 0x87b3, 0xac => 0x87cb, 0xad => 0x87d3, 0xae => 0x87bd, 0xaf => 0x87d1, 0xb0 => 0x87c0, 0xb1 => 0x87ca, 0xb2 => 0x87db, 0xb3 => 0x87ea, 0xb4 => 0x87e0, 0xb5 => 0x87ee, 0xb6 => 0x8816, 0xb7 => 0x8813, 0xb8 => 0x87fe, 0xb9 => 0x880a, 0xba => 0x881b, 0xbb => 0x8821, 0xbc => 0x8839, 0xbd => 0x883c, 0xbe => 0x7f36, 0xbf => 0x7f42, 0xc0 => 0x7f44, 0xc1 => 0x7f45, 0xc2 => 0x8210, 0xc3 => 0x7afa, 0xc4 => 0x7afd, 0xc5 => 0x7b08, 0xc6 => 0x7b03, 0xc7 => 0x7b04, 0xc8 => 0x7b15, 0xc9 => 0x7b0a, 0xca => 0x7b2b, 0xcb => 0x7b0f, 0xcc => 0x7b47, 0xcd => 0x7b38, 0xce => 0x7b2a, 0xcf => 0x7b19, 0xd0 => 0x7b2e, 0xd1 => 0x7b31, 0xd2 => 0x7b20, 0xd3 => 0x7b25, 0xd4 => 0x7b24, 0xd5 => 0x7b33, 0xd6 => 0x7b3e, 0xd7 => 0x7b1e, 0xd8 => 0x7b58, 0xd9 => 0x7b5a, 0xda => 0x7b45, 0xdb => 0x7b75, 0xdc => 0x7b4c, 0xdd => 0x7b5d, 0xde => 0x7b60, 0xdf => 0x7b6e, 0xe0 => 0x7b7b, 0xe1 => 0x7b62, 0xe2 => 0x7b72, 0xe3 => 0x7b71, 0xe4 => 0x7b90, 0xe5 => 0x7ba6, 0xe6 => 0x7ba7, 0xe7 => 0x7bb8, 0xe8 => 0x7bac, 0xe9 => 0x7b9d, 0xea => 0x7ba8, 0xeb => 0x7b85, 0xec => 0x7baa, 0xed => 0x7b9c, 0xee => 0x7ba2, 0xef => 0x7bab, 0xf0 => 0x7bb4, 0xf1 => 0x7bd1, 0xf2 => 0x7bc1, 0xf3 => 0x7bcc, 0xf4 => 0x7bdd, 0xf5 => 0x7bda, 0xf6 => 0x7be5, 0xf7 => 0x7be6, 0xf8 => 0x7bea, 0xf9 => 0x7c0c, 0xfa => 0x7bfe, 0xfb => 0x7bfc, 0xfc => 0x7c0f, 0xfd => 0x7c16, 0xfe => 0x7c0b, }, 0xf4 => { 0xa1 => 0x7c1f, 0xa2 => 0x7c2a, 0xa3 => 0x7c26, 0xa4 => 0x7c38, 0xa5 => 0x7c41, 0xa6 => 0x7c40, 0xa7 => 0x81fe, 0xa8 => 0x8201, 0xa9 => 0x8202, 0xaa => 0x8204, 0xab => 0x81ec, 0xac => 0x8844, 0xad => 0x8221, 0xae => 0x8222, 0xaf => 0x8223, 0xb0 => 0x822d, 0xb1 => 0x822f, 0xb2 => 0x8228, 0xb3 => 0x822b, 0xb4 => 0x8238, 0xb5 => 0x823b, 0xb6 => 0x8233, 0xb7 => 0x8234, 0xb8 => 0x823e, 0xb9 => 0x8244, 0xba => 0x8249, 0xbb => 0x824b, 0xbc => 0x824f, 0xbd => 0x825a, 0xbe => 0x825f, 0xbf => 0x8268, 0xc0 => 0x887e, 0xc1 => 0x8885, 0xc2 => 0x8888, 0xc3 => 0x88d8, 0xc4 => 0x88df, 0xc5 => 0x895e, 0xc6 => 0x7f9d, 0xc7 => 0x7f9f, 0xc8 => 0x7fa7, 0xc9 => 0x7faf, 0xca => 0x7fb0, 0xcb => 0x7fb2, 0xcc => 0x7c7c, 0xcd => 0x6549, 0xce => 0x7c91, 0xcf => 0x7c9d, 0xd0 => 0x7c9c, 0xd1 => 0x7c9e, 0xd2 => 0x7ca2, 0xd3 => 0x7cb2, 0xd4 => 0x7cbc, 0xd5 => 0x7cbd, 0xd6 => 0x7cc1, 0xd7 => 0x7cc7, 0xd8 => 0x7ccc, 0xd9 => 0x7ccd, 0xda => 0x7cc8, 0xdb => 0x7cc5, 0xdc => 0x7cd7, 0xdd => 0x7ce8, 0xde => 0x826e, 0xdf => 0x66a8, 0xe0 => 0x7fbf, 0xe1 => 0x7fce, 0xe2 => 0x7fd5, 0xe3 => 0x7fe5, 0xe4 => 0x7fe1, 0xe5 => 0x7fe6, 0xe6 => 0x7fe9, 0xe7 => 0x7fee, 0xe8 => 0x7ff3, 0xe9 => 0x7cf8, 0xea => 0x7d77, 0xeb => 0x7da6, 0xec => 0x7dae, 0xed => 0x7e47, 0xee => 0x7e9b, 0xef => 0x9eb8, 0xf0 => 0x9eb4, 0xf1 => 0x8d73, 0xf2 => 0x8d84, 0xf3 => 0x8d94, 0xf4 => 0x8d91, 0xf5 => 0x8db1, 0xf6 => 0x8d67, 0xf7 => 0x8d6d, 0xf8 => 0x8c47, 0xf9 => 0x8c49, 0xfa => 0x914a, 0xfb => 0x9150, 0xfc => 0x914e, 0xfd => 0x914f, 0xfe => 0x9164, }, 0xf5 => { 0xa1 => 0x9162, 0xa2 => 0x9161, 0xa3 => 0x9170, 0xa4 => 0x9169, 0xa5 => 0x916f, 0xa6 => 0x917d, 0xa7 => 0x917e, 0xa8 => 0x9172, 0xa9 => 0x9174, 0xaa => 0x9179, 0xab => 0x918c, 0xac => 0x9185, 0xad => 0x9190, 0xae => 0x918d, 0xaf => 0x9191, 0xb0 => 0x91a2, 0xb1 => 0x91a3, 0xb2 => 0x91aa, 0xb3 => 0x91ad, 0xb4 => 0x91ae, 0xb5 => 0x91af, 0xb6 => 0x91b5, 0xb7 => 0x91b4, 0xb8 => 0x91ba, 0xb9 => 0x8c55, 0xba => 0x9e7e, 0xbb => 0x8db8, 0xbc => 0x8deb, 0xbd => 0x8e05, 0xbe => 0x8e59, 0xbf => 0x8e69, 0xc0 => 0x8db5, 0xc1 => 0x8dbf, 0xc2 => 0x8dbc, 0xc3 => 0x8dba, 0xc4 => 0x8dc4, 0xc5 => 0x8dd6, 0xc6 => 0x8dd7, 0xc7 => 0x8dda, 0xc8 => 0x8dde, 0xc9 => 0x8dce, 0xca => 0x8dcf, 0xcb => 0x8ddb, 0xcc => 0x8dc6, 0xcd => 0x8dec, 0xce => 0x8df7, 0xcf => 0x8df8, 0xd0 => 0x8de3, 0xd1 => 0x8df9, 0xd2 => 0x8dfb, 0xd3 => 0x8de4, 0xd4 => 0x8e09, 0xd5 => 0x8dfd, 0xd6 => 0x8e14, 0xd7 => 0x8e1d, 0xd8 => 0x8e1f, 0xd9 => 0x8e2c, 0xda => 0x8e2e, 0xdb => 0x8e23, 0xdc => 0x8e2f, 0xdd => 0x8e3a, 0xde => 0x8e40, 0xdf => 0x8e39, 0xe0 => 0x8e35, 0xe1 => 0x8e3d, 0xe2 => 0x8e31, 0xe3 => 0x8e49, 0xe4 => 0x8e41, 0xe5 => 0x8e42, 0xe6 => 0x8e51, 0xe7 => 0x8e52, 0xe8 => 0x8e4a, 0xe9 => 0x8e70, 0xea => 0x8e76, 0xeb => 0x8e7c, 0xec => 0x8e6f, 0xed => 0x8e74, 0xee => 0x8e85, 0xef => 0x8e8f, 0xf0 => 0x8e94, 0xf1 => 0x8e90, 0xf2 => 0x8e9c, 0xf3 => 0x8e9e, 0xf4 => 0x8c78, 0xf5 => 0x8c82, 0xf6 => 0x8c8a, 0xf7 => 0x8c85, 0xf8 => 0x8c98, 0xf9 => 0x8c94, 0xfa => 0x659b, 0xfb => 0x89d6, 0xfc => 0x89de, 0xfd => 0x89da, 0xfe => 0x89dc, }, 0xf6 => { 0xa1 => 0x89e5, 0xa2 => 0x89eb, 0xa3 => 0x89ef, 0xa4 => 0x8a3e, 0xa5 => 0x8b26, 0xa6 => 0x9753, 0xa7 => 0x96e9, 0xa8 => 0x96f3, 0xa9 => 0x96ef, 0xaa => 0x9706, 0xab => 0x9701, 0xac => 0x9708, 0xad => 0x970f, 0xae => 0x970e, 0xaf => 0x972a, 0xb0 => 0x972d, 0xb1 => 0x9730, 0xb2 => 0x973e, 0xb3 => 0x9f80, 0xb4 => 0x9f83, 0xb5 => 0x9f85, 0xb6 => 0x9f86, 0xb7 => 0x9f87, 0xb8 => 0x9f88, 0xb9 => 0x9f89, 0xba => 0x9f8a, 0xbb => 0x9f8c, 0xbc => 0x9efe, 0xbd => 0x9f0b, 0xbe => 0x9f0d, 0xbf => 0x96b9, 0xc0 => 0x96bc, 0xc1 => 0x96bd, 0xc2 => 0x96ce, 0xc3 => 0x96d2, 0xc4 => 0x77bf, 0xc5 => 0x96e0, 0xc6 => 0x928e, 0xc7 => 0x92ae, 0xc8 => 0x92c8, 0xc9 => 0x933e, 0xca => 0x936a, 0xcb => 0x93ca, 0xcc => 0x938f, 0xcd => 0x943e, 0xce => 0x946b, 0xcf => 0x9c7f, 0xd0 => 0x9c82, 0xd1 => 0x9c85, 0xd2 => 0x9c86, 0xd3 => 0x9c87, 0xd4 => 0x9c88, 0xd5 => 0x7a23, 0xd6 => 0x9c8b, 0xd7 => 0x9c8e, 0xd8 => 0x9c90, 0xd9 => 0x9c91, 0xda => 0x9c92, 0xdb => 0x9c94, 0xdc => 0x9c95, 0xdd => 0x9c9a, 0xde => 0x9c9b, 0xdf => 0x9c9e, 0xe0 => 0x9c9f, 0xe1 => 0x9ca0, 0xe2 => 0x9ca1, 0xe3 => 0x9ca2, 0xe4 => 0x9ca3, 0xe5 => 0x9ca5, 0xe6 => 0x9ca6, 0xe7 => 0x9ca7, 0xe8 => 0x9ca8, 0xe9 => 0x9ca9, 0xea => 0x9cab, 0xeb => 0x9cad, 0xec => 0x9cae, 0xed => 0x9cb0, 0xee => 0x9cb1, 0xef => 0x9cb2, 0xf0 => 0x9cb3, 0xf1 => 0x9cb4, 0xf2 => 0x9cb5, 0xf3 => 0x9cb6, 0xf4 => 0x9cb7, 0xf5 => 0x9cba, 0xf6 => 0x9cbb, 0xf7 => 0x9cbc, 0xf8 => 0x9cbd, 0xf9 => 0x9cc4, 0xfa => 0x9cc5, 0xfb => 0x9cc6, 0xfc => 0x9cc7, 0xfd => 0x9cca, 0xfe => 0x9ccb, }, 0xf7 => { 0xa1 => 0x9ccc, 0xa2 => 0x9ccd, 0xa3 => 0x9cce, 0xa4 => 0x9ccf, 0xa5 => 0x9cd0, 0xa6 => 0x9cd3, 0xa7 => 0x9cd4, 0xa8 => 0x9cd5, 0xa9 => 0x9cd7, 0xaa => 0x9cd8, 0xab => 0x9cd9, 0xac => 0x9cdc, 0xad => 0x9cdd, 0xae => 0x9cdf, 0xaf => 0x9ce2, 0xb0 => 0x977c, 0xb1 => 0x9785, 0xb2 => 0x9791, 0xb3 => 0x9792, 0xb4 => 0x9794, 0xb5 => 0x97af, 0xb6 => 0x97ab, 0xb7 => 0x97a3, 0xb8 => 0x97b2, 0xb9 => 0x97b4, 0xba => 0x9ab1, 0xbb => 0x9ab0, 0xbc => 0x9ab7, 0xbd => 0x9e58, 0xbe => 0x9ab6, 0xbf => 0x9aba, 0xc0 => 0x9abc, 0xc1 => 0x9ac1, 0xc2 => 0x9ac0, 0xc3 => 0x9ac5, 0xc4 => 0x9ac2, 0xc5 => 0x9acb, 0xc6 => 0x9acc, 0xc7 => 0x9ad1, 0xc8 => 0x9b45, 0xc9 => 0x9b43, 0xca => 0x9b47, 0xcb => 0x9b49, 0xcc => 0x9b48, 0xcd => 0x9b4d, 0xce => 0x9b51, 0xcf => 0x98e8, 0xd0 => 0x990d, 0xd1 => 0x992e, 0xd2 => 0x9955, 0xd3 => 0x9954, 0xd4 => 0x9adf, 0xd5 => 0x9ae1, 0xd6 => 0x9ae6, 0xd7 => 0x9aef, 0xd8 => 0x9aeb, 0xd9 => 0x9afb, 0xda => 0x9aed, 0xdb => 0x9af9, 0xdc => 0x9b08, 0xdd => 0x9b0f, 0xde => 0x9b13, 0xdf => 0x9b1f, 0xe0 => 0x9b23, 0xe1 => 0x9ebd, 0xe2 => 0x9ebe, 0xe3 => 0x7e3b, 0xe4 => 0x9e82, 0xe5 => 0x9e87, 0xe6 => 0x9e88, 0xe7 => 0x9e8b, 0xe8 => 0x9e92, 0xe9 => 0x93d6, 0xea => 0x9e9d, 0xeb => 0x9e9f, 0xec => 0x9edb, 0xed => 0x9edc, 0xee => 0x9edd, 0xef => 0x9ee0, 0xf0 => 0x9edf, 0xf1 => 0x9ee2, 0xf2 => 0x9ee9, 0xf3 => 0x9ee7, 0xf4 => 0x9ee5, 0xf5 => 0x9eea, 0xf6 => 0x9eef, 0xf7 => 0x9f22, 0xf8 => 0x9f2c, 0xf9 => 0x9f2f, 0xfa => 0x9f39, 0xfb => 0x9f37, 0xfc => 0x9f3d, 0xfd => 0x9f3e, 0xfe => 0x9f44, }, ); 1; # end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacChineseTW.pm�������������������������������������000644 �000765 �000024 �00000703750 11417362674 024134� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacChineseTW.pm # # Description: Mac Chinese Traditional to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/CHINTRAD.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacChineseTW = ( 0x80 => [0x5c,0xf87f], 0x81 => 0xf880, 0x82 => 0xf881, 0xfd => 0xa9, 0xfe => 0x2122, 0xff => 0x2026, 0xa1 => { 0x40 => 0x3000, 0x41 => 0xff0c, 0x42 => 0x3001, 0x43 => 0x3002, 0x44 => 0xff0e, 0x45 => 0xb7, 0x46 => 0xff1b, 0x47 => 0xff1a, 0x48 => 0xff1f, 0x49 => 0xff01, 0x4a => 0xfe30, 0x4b => 0x22ef, 0x4c => 0x2025, 0x4d => [0xff0c,0xf87d], 0x4e => [0x3001,0xf87d], 0x4f => [0xff0e,0xf87d], 0x50 => [0xff0e,0xf87e], 0x51 => [0xff1b,0xf87d], 0x52 => [0xff1a,0xf87d], 0x53 => [0xff1f,0xf87d], 0x54 => [0xff01,0xf87d], 0x55 => 0xff5c, 0x56 => 0x2013, 0x57 => 0xfe31, 0x58 => 0x2014, 0x59 => 0xfe33, 0x5a => [0xff3f,0xf87f], 0x5b => 0xfe34, 0x5c => 0xfe4f, 0x5d => 0xff08, 0x5e => 0xff09, 0x5f => 0xfe35, 0x60 => 0xfe36, 0x61 => 0xff5b, 0x62 => 0xff5d, 0x63 => 0xfe37, 0x64 => 0xfe38, 0x65 => 0x3014, 0x66 => 0x3015, 0x67 => 0xfe39, 0x68 => 0xfe3a, 0x69 => 0x3010, 0x6a => 0x3011, 0x6b => 0xfe3b, 0x6c => 0xfe3c, 0x6d => 0x300a, 0x6e => 0x300b, 0x6f => 0xfe3d, 0x70 => 0xfe3e, 0x71 => 0x3008, 0x72 => 0x3009, 0x73 => 0xfe3f, 0x74 => 0xfe40, 0x75 => 0x300c, 0x76 => 0x300d, 0x77 => 0xfe41, 0x78 => 0xfe42, 0x79 => 0x300e, 0x7a => 0x300f, 0x7b => 0xfe43, 0x7c => 0xfe44, 0x7d => [0xff08,0xf87f], 0x7e => [0xff09,0xf87f], 0xa1 => [0xff5b,0xf87f], 0xa2 => [0xff5d,0xf87f], 0xa3 => [0x3014,0xf87f], 0xa4 => [0x3015,0xf87f], 0xa5 => 0x2018, 0xa6 => 0x2019, 0xa7 => 0x201c, 0xa8 => 0x201d, 0xa9 => 0x301d, 0xaa => 0x301e, 0xab => 0x2035, 0xac => 0x2032, 0xad => 0xff03, 0xae => 0xff06, 0xaf => 0xff0a, 0xb0 => 0x203b, 0xb1 => 0xa7, 0xb2 => 0x3003, 0xb3 => 0x25cb, 0xb4 => 0x25cf, 0xb5 => 0x25b3, 0xb6 => 0x25b2, 0xb7 => 0x25ce, 0xb8 => 0x2606, 0xb9 => 0x2605, 0xba => 0x25c7, 0xbb => 0x25c6, 0xbc => 0x25a1, 0xbd => 0x25a0, 0xbe => 0x25bd, 0xbf => 0x25bc, 0xc0 => 0x32a3, 0xc1 => 0x2105, 0xc2 => 0x203e, 0xc3 => [0x203e,0xf87c], 0xc4 => 0xff3f, 0xc5 => [0xff3f,0xf87c], 0xc6 => 0xfe49, 0xc7 => 0xfe4a, 0xc8 => 0xfe4d, 0xc9 => 0xfe4e, 0xca => 0xfe4b, 0xcb => [0xfe4b,0xf87c], 0xcc => 0xfe5f, 0xcd => 0xfe60, 0xce => 0xfe61, 0xcf => 0xff0b, 0xd0 => 0xff0d, 0xd1 => 0xd7, 0xd2 => 0xf7, 0xd3 => 0xb1, 0xd4 => 0x221a, 0xd5 => 0xff1c, 0xd6 => 0xff1e, 0xd7 => 0xff1d, 0xd8 => 0x2266, 0xd9 => 0x2267, 0xda => 0x2260, 0xdb => 0x221e, 0xdc => 0x2252, 0xdd => 0x2261, 0xde => 0xfe62, 0xdf => 0xfe63, 0xe0 => 0xfe64, 0xe1 => 0xfe65, 0xe2 => 0xfe66, 0xe3 => 0x223c, 0xe4 => 0x2229, 0xe5 => 0x222a, 0xe6 => 0x22a5, 0xe7 => 0x2220, 0xe8 => 0x221f, 0xe9 => 0x22bf, 0xea => 0x33d2, 0xeb => 0x33d1, 0xec => 0x222b, 0xed => 0x222e, 0xee => 0x2235, 0xef => 0x2234, 0xf0 => 0x2640, 0xf1 => 0x2642, 0xf2 => 0x2295, 0xf3 => 0x2609, 0xf4 => 0x2191, 0xf5 => 0x2193, 0xf6 => 0x2190, 0xf7 => 0x2192, 0xf8 => 0x2196, 0xf9 => 0x2197, 0xfa => 0x2199, 0xfb => 0x2198, 0xfc => 0x2225, 0xfd => 0x2223, 0xfe => [0xff0f,0xf87f], }, 0xa2 => { 0x40 => [0xff3c,0xf87f], 0x41 => 0xff0f, 0x42 => 0xff3c, 0x43 => 0xff04, 0x44 => 0xa5, 0x45 => 0x3012, 0x46 => 0xa2, 0x47 => 0xa3, 0x48 => 0xff05, 0x49 => 0xff20, 0x4a => 0x2103, 0x4b => 0x2109, 0x4c => 0xfe69, 0x4d => 0xfe6a, 0x4e => 0xfe6b, 0x4f => 0x33d5, 0x50 => 0x339c, 0x51 => 0x339d, 0x52 => 0x339e, 0x53 => 0x33ce, 0x54 => 0x33a1, 0x55 => 0x338e, 0x56 => 0x338f, 0x57 => 0x33c4, 0x58 => 0xb0, 0x59 => 0x5159, 0x5a => 0x515b, 0x5b => 0x515e, 0x5c => 0x515d, 0x5d => 0x5161, 0x5e => 0x5163, 0x5f => 0x55e7, 0x60 => 0x74e9, 0x61 => 0x7cce, 0x62 => 0x2581, 0x63 => 0x2582, 0x64 => 0x2583, 0x65 => 0x2584, 0x66 => 0x2585, 0x67 => 0x2586, 0x68 => 0x2587, 0x69 => 0x2588, 0x6a => 0x258f, 0x6b => 0x258e, 0x6c => 0x258d, 0x6d => 0x258c, 0x6e => 0x258b, 0x6f => 0x258a, 0x70 => 0x2589, 0x71 => 0x253c, 0x72 => 0x2534, 0x73 => 0x252c, 0x74 => 0x2524, 0x75 => 0x251c, 0x76 => 0x2594, 0x77 => 0x2500, 0x78 => 0x2502, 0x79 => [0x2502,0xf87f], 0x7a => 0x250c, 0x7b => 0x2510, 0x7c => 0x2514, 0x7d => 0x2518, 0x7e => 0x256d, 0xa1 => 0x256e, 0xa2 => 0x2570, 0xa3 => 0x256f, 0xa4 => 0x2550, 0xa5 => 0x255e, 0xa6 => 0x256a, 0xa7 => 0x2561, 0xa8 => 0x25e2, 0xa9 => 0x25e3, 0xaa => 0x25e5, 0xab => 0x25e4, 0xac => 0x2571, 0xad => 0x2572, 0xae => 0x2573, 0xaf => 0xff10, 0xb0 => 0xff11, 0xb1 => 0xff12, 0xb2 => 0xff13, 0xb3 => 0xff14, 0xb4 => 0xff15, 0xb5 => 0xff16, 0xb6 => 0xff17, 0xb7 => 0xff18, 0xb8 => 0xff19, 0xb9 => 0x2160, 0xba => 0x2161, 0xbb => 0x2162, 0xbc => 0x2163, 0xbd => 0x2164, 0xbe => 0x2165, 0xbf => 0x2166, 0xc0 => 0x2167, 0xc1 => 0x2168, 0xc2 => 0x2169, 0xc3 => 0x3021, 0xc4 => 0x3022, 0xc5 => 0x3023, 0xc6 => 0x3024, 0xc7 => 0x3025, 0xc8 => 0x3026, 0xc9 => 0x3027, 0xca => 0x3028, 0xcb => 0x3029, 0xcc => [0x5341,0xf87f], 0xcd => 0x5344, 0xce => [0x5345,0xf87f], 0xcf => 0xff21, 0xd0 => 0xff22, 0xd1 => 0xff23, 0xd2 => 0xff24, 0xd3 => 0xff25, 0xd4 => 0xff26, 0xd5 => 0xff27, 0xd6 => 0xff28, 0xd7 => 0xff29, 0xd8 => 0xff2a, 0xd9 => 0xff2b, 0xda => 0xff2c, 0xdb => 0xff2d, 0xdc => 0xff2e, 0xdd => 0xff2f, 0xde => 0xff30, 0xdf => 0xff31, 0xe0 => 0xff32, 0xe1 => 0xff33, 0xe2 => 0xff34, 0xe3 => 0xff35, 0xe4 => 0xff36, 0xe5 => 0xff37, 0xe6 => 0xff38, 0xe7 => 0xff39, 0xe8 => 0xff3a, 0xe9 => 0xff41, 0xea => 0xff42, 0xeb => 0xff43, 0xec => 0xff44, 0xed => 0xff45, 0xee => 0xff46, 0xef => 0xff47, 0xf0 => 0xff48, 0xf1 => 0xff49, 0xf2 => 0xff4a, 0xf3 => 0xff4b, 0xf4 => 0xff4c, 0xf5 => 0xff4d, 0xf6 => 0xff4e, 0xf7 => 0xff4f, 0xf8 => 0xff50, 0xf9 => 0xff51, 0xfa => 0xff52, 0xfb => 0xff53, 0xfc => 0xff54, 0xfd => 0xff55, 0xfe => 0xff56, }, 0xa3 => { 0x40 => 0xff57, 0x41 => 0xff58, 0x42 => 0xff59, 0x43 => 0xff5a, 0x44 => 0x0391, 0x45 => 0x0392, 0x46 => 0x0393, 0x47 => 0x0394, 0x48 => 0x0395, 0x49 => 0x0396, 0x4a => 0x0397, 0x4b => 0x0398, 0x4c => 0x0399, 0x4d => 0x039a, 0x4e => 0x039b, 0x4f => 0x039c, 0x50 => 0x039d, 0x51 => 0x039e, 0x52 => 0x039f, 0x53 => 0x03a0, 0x54 => 0x03a1, 0x55 => 0x03a3, 0x56 => 0x03a4, 0x57 => 0x03a5, 0x58 => 0x03a6, 0x59 => 0x03a7, 0x5a => 0x03a8, 0x5b => 0x03a9, 0x5c => 0x03b1, 0x5d => 0x03b2, 0x5e => 0x03b3, 0x5f => 0x03b4, 0x60 => 0x03b5, 0x61 => 0x03b6, 0x62 => 0x03b7, 0x63 => 0x03b8, 0x64 => 0x03b9, 0x65 => 0x03ba, 0x66 => 0x03bb, 0x67 => 0x03bc, 0x68 => 0x03bd, 0x69 => 0x03be, 0x6a => 0x03bf, 0x6b => 0x03c0, 0x6c => 0x03c1, 0x6d => 0x03c3, 0x6e => 0x03c4, 0x6f => 0x03c5, 0x70 => 0x03c6, 0x71 => 0x03c7, 0x72 => 0x03c8, 0x73 => 0x03c9, 0x74 => 0x3105, 0x75 => 0x3106, 0x76 => 0x3107, 0x77 => 0x3108, 0x78 => 0x3109, 0x79 => 0x310a, 0x7a => 0x310b, 0x7b => 0x310c, 0x7c => 0x310d, 0x7d => 0x310e, 0x7e => 0x310f, 0xa1 => 0x3110, 0xa2 => 0x3111, 0xa3 => 0x3112, 0xa4 => 0x3113, 0xa5 => 0x3114, 0xa6 => 0x3115, 0xa7 => 0x3116, 0xa8 => 0x3117, 0xa9 => 0x3118, 0xaa => 0x3119, 0xab => 0x311a, 0xac => 0x311b, 0xad => 0x311c, 0xae => 0x311d, 0xaf => 0x311e, 0xb0 => 0x311f, 0xb1 => 0x3120, 0xb2 => 0x3121, 0xb3 => 0x3122, 0xb4 => 0x3123, 0xb5 => 0x3124, 0xb6 => 0x3125, 0xb7 => 0x3126, 0xb8 => 0x3127, 0xb9 => 0x3128, 0xba => 0x3129, 0xbb => 0x02d9, 0xbc => 0x02c9, 0xbd => 0x02ca, 0xbe => 0x02c7, 0xbf => 0x02cb, }, 0xa4 => { 0x40 => 0x4e00, 0x41 => 0x4e59, 0x42 => 0x4e01, 0x43 => 0x4e03, 0x44 => 0x4e43, 0x45 => 0x4e5d, 0x46 => 0x4e86, 0x47 => 0x4e8c, 0x48 => 0x4eba, 0x49 => 0x513f, 0x4a => 0x5165, 0x4b => 0x516b, 0x4c => 0x51e0, 0x4d => 0x5200, 0x4e => 0x5201, 0x4f => 0x529b, 0x50 => 0x5315, 0x51 => 0x5341, 0x52 => 0x535c, 0x53 => 0x53c8, 0x54 => 0x4e09, 0x55 => 0x4e0b, 0x56 => 0x4e08, 0x57 => 0x4e0a, 0x58 => 0x4e2b, 0x59 => 0x4e38, 0x5a => 0x51e1, 0x5b => 0x4e45, 0x5c => 0x4e48, 0x5d => 0x4e5f, 0x5e => 0x4e5e, 0x5f => 0x4e8e, 0x60 => 0x4ea1, 0x61 => 0x5140, 0x62 => 0x5203, 0x63 => 0x52fa, 0x64 => 0x5343, 0x65 => 0x53c9, 0x66 => 0x53e3, 0x67 => 0x571f, 0x68 => 0x58eb, 0x69 => 0x5915, 0x6a => 0x5927, 0x6b => 0x5973, 0x6c => 0x5b50, 0x6d => 0x5b51, 0x6e => 0x5b53, 0x6f => 0x5bf8, 0x70 => 0x5c0f, 0x71 => 0x5c22, 0x72 => 0x5c38, 0x73 => 0x5c71, 0x74 => 0x5ddd, 0x75 => 0x5de5, 0x76 => 0x5df1, 0x77 => 0x5df2, 0x78 => 0x5df3, 0x79 => 0x5dfe, 0x7a => 0x5e72, 0x7b => 0x5efe, 0x7c => 0x5f0b, 0x7d => 0x5f13, 0x7e => 0x624d, 0xa1 => 0x4e11, 0xa2 => 0x4e10, 0xa3 => 0x4e0d, 0xa4 => 0x4e2d, 0xa5 => 0x4e30, 0xa6 => 0x4e39, 0xa7 => 0x4e4b, 0xa8 => 0x5c39, 0xa9 => 0x4e88, 0xaa => 0x4e91, 0xab => 0x4e95, 0xac => 0x4e92, 0xad => 0x4e94, 0xae => 0x4ea2, 0xaf => 0x4ec1, 0xb0 => 0x4ec0, 0xb1 => 0x4ec3, 0xb2 => 0x4ec6, 0xb3 => 0x4ec7, 0xb4 => 0x4ecd, 0xb5 => 0x4eca, 0xb6 => 0x4ecb, 0xb7 => 0x4ec4, 0xb8 => 0x5143, 0xb9 => 0x5141, 0xba => 0x5167, 0xbb => 0x516d, 0xbc => 0x516e, 0xbd => 0x516c, 0xbe => 0x5197, 0xbf => 0x51f6, 0xc0 => 0x5206, 0xc1 => 0x5207, 0xc2 => 0x5208, 0xc3 => 0x52fb, 0xc4 => 0x52fe, 0xc5 => 0x52ff, 0xc6 => 0x5316, 0xc7 => 0x5339, 0xc8 => 0x5348, 0xc9 => 0x5347, 0xca => 0x5345, 0xcb => 0x535e, 0xcc => 0x5384, 0xcd => 0x53cb, 0xce => 0x53ca, 0xcf => 0x53cd, 0xd0 => 0x58ec, 0xd1 => 0x5929, 0xd2 => 0x592b, 0xd3 => 0x592a, 0xd4 => 0x592d, 0xd5 => 0x5b54, 0xd6 => 0x5c11, 0xd7 => 0x5c24, 0xd8 => 0x5c3a, 0xd9 => 0x5c6f, 0xda => 0x5df4, 0xdb => 0x5e7b, 0xdc => 0x5eff, 0xdd => 0x5f14, 0xde => 0x5f15, 0xdf => 0x5fc3, 0xe0 => 0x6208, 0xe1 => 0x6236, 0xe2 => 0x624b, 0xe3 => 0x624e, 0xe4 => 0x652f, 0xe5 => 0x6587, 0xe6 => 0x6597, 0xe7 => 0x65a4, 0xe8 => 0x65b9, 0xe9 => 0x65e5, 0xea => 0x66f0, 0xeb => 0x6708, 0xec => 0x6728, 0xed => 0x6b20, 0xee => 0x6b62, 0xef => 0x6b79, 0xf0 => 0x6bcb, 0xf1 => 0x6bd4, 0xf2 => 0x6bdb, 0xf3 => 0x6c0f, 0xf4 => 0x6c34, 0xf5 => 0x706b, 0xf6 => 0x722a, 0xf7 => 0x7236, 0xf8 => 0x723b, 0xf9 => 0x7247, 0xfa => 0x7259, 0xfb => 0x725b, 0xfc => 0x72ac, 0xfd => 0x738b, 0xfe => 0x4e19, }, 0xa5 => { 0x40 => 0x4e16, 0x41 => 0x4e15, 0x42 => 0x4e14, 0x43 => 0x4e18, 0x44 => 0x4e3b, 0x45 => 0x4e4d, 0x46 => 0x4e4f, 0x47 => 0x4e4e, 0x48 => 0x4ee5, 0x49 => 0x4ed8, 0x4a => 0x4ed4, 0x4b => 0x4ed5, 0x4c => 0x4ed6, 0x4d => 0x4ed7, 0x4e => 0x4ee3, 0x4f => 0x4ee4, 0x50 => 0x4ed9, 0x51 => 0x4ede, 0x52 => 0x5145, 0x53 => 0x5144, 0x54 => 0x5189, 0x55 => 0x518a, 0x56 => 0x51ac, 0x57 => 0x51f9, 0x58 => 0x51fa, 0x59 => 0x51f8, 0x5a => 0x520a, 0x5b => 0x52a0, 0x5c => 0x529f, 0x5d => 0x5305, 0x5e => 0x5306, 0x5f => 0x5317, 0x60 => 0x531d, 0x61 => 0x4edf, 0x62 => 0x534a, 0x63 => 0x5349, 0x64 => 0x5361, 0x65 => 0x5360, 0x66 => 0x536f, 0x67 => 0x536e, 0x68 => 0x53bb, 0x69 => 0x53ef, 0x6a => 0x53e4, 0x6b => 0x53f3, 0x6c => 0x53ec, 0x6d => 0x53ee, 0x6e => 0x53e9, 0x6f => 0x53e8, 0x70 => 0x53fc, 0x71 => 0x53f8, 0x72 => 0x53f5, 0x73 => 0x53eb, 0x74 => 0x53e6, 0x75 => 0x53ea, 0x76 => 0x53f2, 0x77 => 0x53f1, 0x78 => 0x53f0, 0x79 => 0x53e5, 0x7a => 0x53ed, 0x7b => 0x53fb, 0x7c => 0x56db, 0x7d => 0x56da, 0x7e => 0x5916, 0xa1 => 0x592e, 0xa2 => 0x5931, 0xa3 => 0x5974, 0xa4 => 0x5976, 0xa5 => 0x5b55, 0xa6 => 0x5b83, 0xa7 => 0x5c3c, 0xa8 => 0x5de8, 0xa9 => 0x5de7, 0xaa => 0x5de6, 0xab => 0x5e02, 0xac => 0x5e03, 0xad => 0x5e73, 0xae => 0x5e7c, 0xaf => 0x5f01, 0xb0 => 0x5f18, 0xb1 => 0x5f17, 0xb2 => 0x5fc5, 0xb3 => 0x620a, 0xb4 => 0x6253, 0xb5 => 0x6254, 0xb6 => 0x6252, 0xb7 => 0x6251, 0xb8 => 0x65a5, 0xb9 => 0x65e6, 0xba => 0x672e, 0xbb => 0x672c, 0xbc => 0x672a, 0xbd => 0x672b, 0xbe => 0x672d, 0xbf => 0x6b63, 0xc0 => 0x6bcd, 0xc1 => 0x6c11, 0xc2 => 0x6c10, 0xc3 => 0x6c38, 0xc4 => 0x6c41, 0xc5 => 0x6c40, 0xc6 => 0x6c3e, 0xc7 => 0x72af, 0xc8 => 0x7384, 0xc9 => 0x7389, 0xca => 0x74dc, 0xcb => 0x74e6, 0xcc => 0x7518, 0xcd => 0x751f, 0xce => 0x7528, 0xcf => 0x7529, 0xd0 => 0x7530, 0xd1 => 0x7531, 0xd2 => 0x7532, 0xd3 => 0x7533, 0xd4 => 0x758b, 0xd5 => 0x767d, 0xd6 => 0x76ae, 0xd7 => 0x76bf, 0xd8 => 0x76ee, 0xd9 => 0x77db, 0xda => 0x77e2, 0xdb => 0x77f3, 0xdc => 0x793a, 0xdd => 0x79be, 0xde => 0x7a74, 0xdf => 0x7acb, 0xe0 => 0x4e1e, 0xe1 => 0x4e1f, 0xe2 => 0x4e52, 0xe3 => 0x4e53, 0xe4 => 0x4e69, 0xe5 => 0x4e99, 0xe6 => 0x4ea4, 0xe7 => 0x4ea6, 0xe8 => 0x4ea5, 0xe9 => 0x4eff, 0xea => 0x4f09, 0xeb => 0x4f19, 0xec => 0x4f0a, 0xed => 0x4f15, 0xee => 0x4f0d, 0xef => 0x4f10, 0xf0 => 0x4f11, 0xf1 => 0x4f0f, 0xf2 => 0x4ef2, 0xf3 => 0x4ef6, 0xf4 => 0x4efb, 0xf5 => 0x4ef0, 0xf6 => 0x4ef3, 0xf7 => 0x4efd, 0xf8 => 0x4f01, 0xf9 => 0x4f0b, 0xfa => 0x5149, 0xfb => 0x5147, 0xfc => 0x5146, 0xfd => 0x5148, 0xfe => 0x5168, }, 0xa6 => { 0x40 => 0x5171, 0x41 => 0x518d, 0x42 => 0x51b0, 0x43 => 0x5217, 0x44 => 0x5211, 0x45 => 0x5212, 0x46 => 0x520e, 0x47 => 0x5216, 0x48 => 0x52a3, 0x49 => 0x5308, 0x4a => 0x5321, 0x4b => 0x5320, 0x4c => 0x5370, 0x4d => 0x5371, 0x4e => 0x5409, 0x4f => 0x540f, 0x50 => 0x540c, 0x51 => 0x540a, 0x52 => 0x5410, 0x53 => 0x5401, 0x54 => 0x540b, 0x55 => 0x5404, 0x56 => 0x5411, 0x57 => 0x540d, 0x58 => 0x5408, 0x59 => 0x5403, 0x5a => 0x540e, 0x5b => 0x5406, 0x5c => 0x5412, 0x5d => 0x56e0, 0x5e => 0x56de, 0x5f => 0x56dd, 0x60 => 0x5733, 0x61 => 0x5730, 0x62 => 0x5728, 0x63 => 0x572d, 0x64 => 0x572c, 0x65 => 0x572f, 0x66 => 0x5729, 0x67 => 0x5919, 0x68 => 0x591a, 0x69 => 0x5937, 0x6a => 0x5938, 0x6b => 0x5984, 0x6c => 0x5978, 0x6d => 0x5983, 0x6e => 0x597d, 0x6f => 0x5979, 0x70 => 0x5982, 0x71 => 0x5981, 0x72 => 0x5b57, 0x73 => 0x5b58, 0x74 => 0x5b87, 0x75 => 0x5b88, 0x76 => 0x5b85, 0x77 => 0x5b89, 0x78 => 0x5bfa, 0x79 => 0x5c16, 0x7a => 0x5c79, 0x7b => 0x5dde, 0x7c => 0x5e06, 0x7d => 0x5e76, 0x7e => 0x5e74, 0xa1 => 0x5f0f, 0xa2 => 0x5f1b, 0xa3 => 0x5fd9, 0xa4 => 0x5fd6, 0xa5 => 0x620e, 0xa6 => 0x620c, 0xa7 => 0x620d, 0xa8 => 0x6210, 0xa9 => 0x6263, 0xaa => 0x625b, 0xab => 0x6258, 0xac => 0x6536, 0xad => 0x65e9, 0xae => 0x65e8, 0xaf => 0x65ec, 0xb0 => 0x65ed, 0xb1 => 0x66f2, 0xb2 => 0x66f3, 0xb3 => 0x6709, 0xb4 => 0x673d, 0xb5 => 0x6734, 0xb6 => 0x6731, 0xb7 => 0x6735, 0xb8 => 0x6b21, 0xb9 => 0x6b64, 0xba => 0x6b7b, 0xbb => 0x6c16, 0xbc => 0x6c5d, 0xbd => 0x6c57, 0xbe => 0x6c59, 0xbf => 0x6c5f, 0xc0 => 0x6c60, 0xc1 => 0x6c50, 0xc2 => 0x6c55, 0xc3 => 0x6c61, 0xc4 => 0x6c5b, 0xc5 => 0x6c4d, 0xc6 => 0x6c4e, 0xc7 => 0x7070, 0xc8 => 0x725f, 0xc9 => 0x725d, 0xca => 0x767e, 0xcb => 0x7af9, 0xcc => 0x7c73, 0xcd => 0x7cf8, 0xce => 0x7f36, 0xcf => 0x7f8a, 0xd0 => 0x7fbd, 0xd1 => 0x8001, 0xd2 => 0x8003, 0xd3 => 0x800c, 0xd4 => 0x8012, 0xd5 => 0x8033, 0xd6 => 0x807f, 0xd7 => 0x8089, 0xd8 => 0x808b, 0xd9 => 0x808c, 0xda => 0x81e3, 0xdb => 0x81ea, 0xdc => 0x81f3, 0xdd => 0x81fc, 0xde => 0x820c, 0xdf => 0x821b, 0xe0 => 0x821f, 0xe1 => 0x826e, 0xe2 => 0x8272, 0xe3 => 0x827e, 0xe4 => 0x866b, 0xe5 => 0x8840, 0xe6 => 0x884c, 0xe7 => 0x8863, 0xe8 => 0x897f, 0xe9 => 0x9621, 0xea => 0x4e32, 0xeb => 0x4ea8, 0xec => 0x4f4d, 0xed => 0x4f4f, 0xee => 0x4f47, 0xef => 0x4f57, 0xf0 => 0x4f5e, 0xf1 => 0x4f34, 0xf2 => 0x4f5b, 0xf3 => 0x4f55, 0xf4 => 0x4f30, 0xf5 => 0x4f50, 0xf6 => 0x4f51, 0xf7 => 0x4f3d, 0xf8 => 0x4f3a, 0xf9 => 0x4f38, 0xfa => 0x4f43, 0xfb => 0x4f54, 0xfc => 0x4f3c, 0xfd => 0x4f46, 0xfe => 0x4f63, }, 0xa7 => { 0x40 => 0x4f5c, 0x41 => 0x4f60, 0x42 => 0x4f2f, 0x43 => 0x4f4e, 0x44 => 0x4f36, 0x45 => 0x4f59, 0x46 => 0x4f5d, 0x47 => 0x4f48, 0x48 => 0x4f5a, 0x49 => 0x514c, 0x4a => 0x514b, 0x4b => 0x514d, 0x4c => 0x5175, 0x4d => 0x51b6, 0x4e => 0x51b7, 0x4f => 0x5225, 0x50 => 0x5224, 0x51 => 0x5229, 0x52 => 0x522a, 0x53 => 0x5228, 0x54 => 0x52ab, 0x55 => 0x52a9, 0x56 => 0x52aa, 0x57 => 0x52ac, 0x58 => 0x5323, 0x59 => 0x5373, 0x5a => 0x5375, 0x5b => 0x541d, 0x5c => 0x542d, 0x5d => 0x541e, 0x5e => 0x543e, 0x5f => 0x5426, 0x60 => 0x544e, 0x61 => 0x5427, 0x62 => 0x5446, 0x63 => 0x5443, 0x64 => 0x5433, 0x65 => 0x5448, 0x66 => 0x5442, 0x67 => 0x541b, 0x68 => 0x5429, 0x69 => 0x544a, 0x6a => 0x5439, 0x6b => 0x543b, 0x6c => 0x5438, 0x6d => 0x542e, 0x6e => 0x5435, 0x6f => 0x5436, 0x70 => 0x5420, 0x71 => 0x543c, 0x72 => 0x5440, 0x73 => 0x5431, 0x74 => 0x542b, 0x75 => 0x541f, 0x76 => 0x542c, 0x77 => 0x56ea, 0x78 => 0x56f0, 0x79 => 0x56e4, 0x7a => 0x56eb, 0x7b => 0x574a, 0x7c => 0x5751, 0x7d => 0x5740, 0x7e => 0x574d, 0xa1 => 0x5747, 0xa2 => 0x574e, 0xa3 => 0x573e, 0xa4 => 0x5750, 0xa5 => 0x574f, 0xa6 => 0x573b, 0xa7 => 0x58ef, 0xa8 => 0x593e, 0xa9 => 0x599d, 0xaa => 0x5992, 0xab => 0x59a8, 0xac => 0x599e, 0xad => 0x59a3, 0xae => 0x5999, 0xaf => 0x5996, 0xb0 => 0x598d, 0xb1 => 0x59a4, 0xb2 => 0x5993, 0xb3 => 0x598a, 0xb4 => 0x59a5, 0xb5 => 0x5b5d, 0xb6 => 0x5b5c, 0xb7 => 0x5b5a, 0xb8 => 0x5b5b, 0xb9 => 0x5b8c, 0xba => 0x5b8b, 0xbb => 0x5b8f, 0xbc => 0x5c2c, 0xbd => 0x5c40, 0xbe => 0x5c41, 0xbf => 0x5c3f, 0xc0 => 0x5c3e, 0xc1 => 0x5c90, 0xc2 => 0x5c91, 0xc3 => 0x5c94, 0xc4 => 0x5c8c, 0xc5 => 0x5deb, 0xc6 => 0x5e0c, 0xc7 => 0x5e8f, 0xc8 => 0x5e87, 0xc9 => 0x5e8a, 0xca => 0x5ef7, 0xcb => 0x5f04, 0xcc => 0x5f1f, 0xcd => 0x5f64, 0xce => 0x5f62, 0xcf => 0x5f77, 0xd0 => 0x5f79, 0xd1 => 0x5fd8, 0xd2 => 0x5fcc, 0xd3 => 0x5fd7, 0xd4 => 0x5fcd, 0xd5 => 0x5ff1, 0xd6 => 0x5feb, 0xd7 => 0x5ff8, 0xd8 => 0x5fea, 0xd9 => 0x6212, 0xda => 0x6211, 0xdb => 0x6284, 0xdc => 0x6297, 0xdd => 0x6296, 0xde => 0x6280, 0xdf => 0x6276, 0xe0 => 0x6289, 0xe1 => 0x626d, 0xe2 => 0x628a, 0xe3 => 0x627c, 0xe4 => 0x627e, 0xe5 => 0x6279, 0xe6 => 0x6273, 0xe7 => 0x6292, 0xe8 => 0x626f, 0xe9 => 0x6298, 0xea => 0x626e, 0xeb => 0x6295, 0xec => 0x6293, 0xed => 0x6291, 0xee => 0x6286, 0xef => 0x6539, 0xf0 => 0x653b, 0xf1 => 0x6538, 0xf2 => 0x65f1, 0xf3 => 0x66f4, 0xf4 => 0x675f, 0xf5 => 0x674e, 0xf6 => 0x674f, 0xf7 => 0x6750, 0xf8 => 0x6751, 0xf9 => 0x675c, 0xfa => 0x6756, 0xfb => 0x675e, 0xfc => 0x6749, 0xfd => 0x6746, 0xfe => 0x6760, }, 0xa8 => { 0x40 => 0x6753, 0x41 => 0x6757, 0x42 => 0x6b65, 0x43 => 0x6bcf, 0x44 => 0x6c42, 0x45 => 0x6c5e, 0x46 => 0x6c99, 0x47 => 0x6c81, 0x48 => 0x6c88, 0x49 => 0x6c89, 0x4a => 0x6c85, 0x4b => 0x6c9b, 0x4c => 0x6c6a, 0x4d => 0x6c7a, 0x4e => 0x6c90, 0x4f => 0x6c70, 0x50 => 0x6c8c, 0x51 => 0x6c68, 0x52 => 0x6c96, 0x53 => 0x6c92, 0x54 => 0x6c7d, 0x55 => 0x6c83, 0x56 => 0x6c72, 0x57 => 0x6c7e, 0x58 => 0x6c74, 0x59 => 0x6c86, 0x5a => 0x6c76, 0x5b => 0x6c8d, 0x5c => 0x6c94, 0x5d => 0x6c98, 0x5e => 0x6c82, 0x5f => 0x7076, 0x60 => 0x707c, 0x61 => 0x707d, 0x62 => 0x7078, 0x63 => 0x7262, 0x64 => 0x7261, 0x65 => 0x7260, 0x66 => 0x72c4, 0x67 => 0x72c2, 0x68 => 0x7396, 0x69 => 0x752c, 0x6a => 0x752b, 0x6b => 0x7537, 0x6c => 0x7538, 0x6d => 0x7682, 0x6e => 0x76ef, 0x6f => 0x77e3, 0x70 => 0x79c1, 0x71 => 0x79c0, 0x72 => 0x79bf, 0x73 => 0x7a76, 0x74 => 0x7cfb, 0x75 => 0x7f55, 0x76 => 0x8096, 0x77 => 0x8093, 0x78 => 0x809d, 0x79 => 0x8098, 0x7a => 0x809b, 0x7b => 0x809a, 0x7c => 0x80b2, 0x7d => 0x826f, 0x7e => 0x8292, 0xa1 => 0x828b, 0xa2 => 0x828d, 0xa3 => 0x898b, 0xa4 => 0x89d2, 0xa5 => 0x8a00, 0xa6 => 0x8c37, 0xa7 => 0x8c46, 0xa8 => 0x8c55, 0xa9 => 0x8c9d, 0xaa => 0x8d64, 0xab => 0x8d70, 0xac => 0x8db3, 0xad => 0x8eab, 0xae => 0x8eca, 0xaf => 0x8f9b, 0xb0 => 0x8fb0, 0xb1 => 0x8fc2, 0xb2 => 0x8fc6, 0xb3 => 0x8fc5, 0xb4 => 0x8fc4, 0xb5 => 0x5de1, 0xb6 => 0x9091, 0xb7 => 0x90a2, 0xb8 => 0x90aa, 0xb9 => 0x90a6, 0xba => 0x90a3, 0xbb => 0x9149, 0xbc => 0x91c6, 0xbd => 0x91cc, 0xbe => 0x9632, 0xbf => 0x962e, 0xc0 => 0x9631, 0xc1 => 0x962a, 0xc2 => 0x962c, 0xc3 => 0x4e26, 0xc4 => 0x4e56, 0xc5 => 0x4e73, 0xc6 => 0x4e8b, 0xc7 => 0x4e9b, 0xc8 => 0x4e9e, 0xc9 => 0x4eab, 0xca => 0x4eac, 0xcb => 0x4f6f, 0xcc => 0x4f9d, 0xcd => 0x4f8d, 0xce => 0x4f73, 0xcf => 0x4f7f, 0xd0 => 0x4f6c, 0xd1 => 0x4f9b, 0xd2 => 0x4f8b, 0xd3 => 0x4f86, 0xd4 => 0x4f83, 0xd5 => 0x4f70, 0xd6 => 0x4f75, 0xd7 => 0x4f88, 0xd8 => 0x4f69, 0xd9 => 0x4f7b, 0xda => 0x4f96, 0xdb => 0x4f7e, 0xdc => 0x4f8f, 0xdd => 0x4f91, 0xde => 0x4f7a, 0xdf => 0x5154, 0xe0 => 0x5152, 0xe1 => 0x5155, 0xe2 => 0x5169, 0xe3 => 0x5177, 0xe4 => 0x5176, 0xe5 => 0x5178, 0xe6 => 0x51bd, 0xe7 => 0x51fd, 0xe8 => 0x523b, 0xe9 => 0x5238, 0xea => 0x5237, 0xeb => 0x523a, 0xec => 0x5230, 0xed => 0x522e, 0xee => 0x5236, 0xef => 0x5241, 0xf0 => 0x52be, 0xf1 => 0x52bb, 0xf2 => 0x5352, 0xf3 => 0x5354, 0xf4 => 0x5353, 0xf5 => 0x5351, 0xf6 => 0x5366, 0xf7 => 0x5377, 0xf8 => 0x5378, 0xf9 => 0x5379, 0xfa => 0x53d6, 0xfb => 0x53d4, 0xfc => 0x53d7, 0xfd => 0x5473, 0xfe => 0x5475, }, 0xa9 => { 0x40 => 0x5496, 0x41 => 0x5478, 0x42 => 0x5495, 0x43 => 0x5480, 0x44 => 0x547b, 0x45 => 0x5477, 0x46 => 0x5484, 0x47 => 0x5492, 0x48 => 0x5486, 0x49 => 0x547c, 0x4a => 0x5490, 0x4b => 0x5471, 0x4c => 0x5476, 0x4d => 0x548c, 0x4e => 0x549a, 0x4f => 0x5462, 0x50 => 0x5468, 0x51 => 0x548b, 0x52 => 0x547d, 0x53 => 0x548e, 0x54 => 0x56fa, 0x55 => 0x5783, 0x56 => 0x5777, 0x57 => 0x576a, 0x58 => 0x5769, 0x59 => 0x5761, 0x5a => 0x5766, 0x5b => 0x5764, 0x5c => 0x577c, 0x5d => 0x591c, 0x5e => 0x5949, 0x5f => 0x5947, 0x60 => 0x5948, 0x61 => 0x5944, 0x62 => 0x5954, 0x63 => 0x59be, 0x64 => 0x59bb, 0x65 => 0x59d4, 0x66 => 0x59b9, 0x67 => 0x59ae, 0x68 => 0x59d1, 0x69 => 0x59c6, 0x6a => 0x59d0, 0x6b => 0x59cd, 0x6c => 0x59cb, 0x6d => 0x59d3, 0x6e => 0x59ca, 0x6f => 0x59af, 0x70 => 0x59b3, 0x71 => 0x59d2, 0x72 => 0x59c5, 0x73 => 0x5b5f, 0x74 => 0x5b64, 0x75 => 0x5b63, 0x76 => 0x5b97, 0x77 => 0x5b9a, 0x78 => 0x5b98, 0x79 => 0x5b9c, 0x7a => 0x5b99, 0x7b => 0x5b9b, 0x7c => 0x5c1a, 0x7d => 0x5c48, 0x7e => 0x5c45, 0xa1 => 0x5c46, 0xa2 => 0x5cb7, 0xa3 => 0x5ca1, 0xa4 => 0x5cb8, 0xa5 => 0x5ca9, 0xa6 => 0x5cab, 0xa7 => 0x5cb1, 0xa8 => 0x5cb3, 0xa9 => 0x5e18, 0xaa => 0x5e1a, 0xab => 0x5e16, 0xac => 0x5e15, 0xad => 0x5e1b, 0xae => 0x5e11, 0xaf => 0x5e78, 0xb0 => 0x5e9a, 0xb1 => 0x5e97, 0xb2 => 0x5e9c, 0xb3 => 0x5e95, 0xb4 => 0x5e96, 0xb5 => 0x5ef6, 0xb6 => 0x5f26, 0xb7 => 0x5f27, 0xb8 => 0x5f29, 0xb9 => 0x5f80, 0xba => 0x5f81, 0xbb => 0x5f7f, 0xbc => 0x5f7c, 0xbd => 0x5fdd, 0xbe => 0x5fe0, 0xbf => 0x5ffd, 0xc0 => 0x5ff5, 0xc1 => 0x5fff, 0xc2 => 0x600f, 0xc3 => 0x6014, 0xc4 => 0x602f, 0xc5 => 0x6035, 0xc6 => 0x6016, 0xc7 => 0x602a, 0xc8 => 0x6015, 0xc9 => 0x6021, 0xca => 0x6027, 0xcb => 0x6029, 0xcc => 0x602b, 0xcd => 0x601b, 0xce => 0x6216, 0xcf => 0x6215, 0xd0 => 0x623f, 0xd1 => 0x623e, 0xd2 => 0x6240, 0xd3 => 0x627f, 0xd4 => 0x62c9, 0xd5 => 0x62cc, 0xd6 => 0x62c4, 0xd7 => 0x62bf, 0xd8 => 0x62c2, 0xd9 => 0x62b9, 0xda => 0x62d2, 0xdb => 0x62db, 0xdc => 0x62ab, 0xdd => 0x62d3, 0xde => 0x62d4, 0xdf => 0x62cb, 0xe0 => 0x62c8, 0xe1 => 0x62a8, 0xe2 => 0x62bd, 0xe3 => 0x62bc, 0xe4 => 0x62d0, 0xe5 => 0x62d9, 0xe6 => 0x62c7, 0xe7 => 0x62cd, 0xe8 => 0x62b5, 0xe9 => 0x62da, 0xea => 0x62b1, 0xeb => 0x62d8, 0xec => 0x62d6, 0xed => 0x62d7, 0xee => 0x62c6, 0xef => 0x62ac, 0xf0 => 0x62ce, 0xf1 => 0x653e, 0xf2 => 0x65a7, 0xf3 => 0x65bc, 0xf4 => 0x65fa, 0xf5 => 0x6614, 0xf6 => 0x6613, 0xf7 => 0x660c, 0xf8 => 0x6606, 0xf9 => 0x6602, 0xfa => 0x660e, 0xfb => 0x6600, 0xfc => 0x660f, 0xfd => 0x6615, 0xfe => 0x660a, }, 0xaa => { 0x40 => 0x6607, 0x41 => 0x670d, 0x42 => 0x670b, 0x43 => 0x676d, 0x44 => 0x678b, 0x45 => 0x6795, 0x46 => 0x6771, 0x47 => 0x679c, 0x48 => 0x6773, 0x49 => 0x6777, 0x4a => 0x6787, 0x4b => 0x679d, 0x4c => 0x6797, 0x4d => 0x676f, 0x4e => 0x6770, 0x4f => 0x677f, 0x50 => 0x6789, 0x51 => 0x677e, 0x52 => 0x6790, 0x53 => 0x6775, 0x54 => 0x679a, 0x55 => 0x6793, 0x56 => 0x677c, 0x57 => 0x676a, 0x58 => 0x6772, 0x59 => 0x6b23, 0x5a => 0x6b66, 0x5b => 0x6b67, 0x5c => 0x6b7f, 0x5d => 0x6c13, 0x5e => 0x6c1b, 0x5f => 0x6ce3, 0x60 => 0x6ce8, 0x61 => 0x6cf3, 0x62 => 0x6cb1, 0x63 => 0x6ccc, 0x64 => 0x6ce5, 0x65 => 0x6cb3, 0x66 => 0x6cbd, 0x67 => 0x6cbe, 0x68 => 0x6cbc, 0x69 => 0x6ce2, 0x6a => 0x6cab, 0x6b => 0x6cd5, 0x6c => 0x6cd3, 0x6d => 0x6cb8, 0x6e => 0x6cc4, 0x6f => 0x6cb9, 0x70 => 0x6cc1, 0x71 => 0x6cae, 0x72 => 0x6cd7, 0x73 => 0x6cc5, 0x74 => 0x6cf1, 0x75 => 0x6cbf, 0x76 => 0x6cbb, 0x77 => 0x6ce1, 0x78 => 0x6cdb, 0x79 => 0x6cca, 0x7a => 0x6cac, 0x7b => 0x6cef, 0x7c => 0x6cdc, 0x7d => 0x6cd6, 0x7e => 0x6ce0, 0xa1 => 0x7095, 0xa2 => 0x708e, 0xa3 => 0x7092, 0xa4 => 0x708a, 0xa5 => 0x7099, 0xa6 => 0x722c, 0xa7 => 0x722d, 0xa8 => 0x7238, 0xa9 => 0x7248, 0xaa => 0x7267, 0xab => 0x7269, 0xac => 0x72c0, 0xad => 0x72ce, 0xae => 0x72d9, 0xaf => 0x72d7, 0xb0 => 0x72d0, 0xb1 => 0x73a9, 0xb2 => 0x73a8, 0xb3 => 0x739f, 0xb4 => 0x73ab, 0xb5 => 0x73a5, 0xb6 => 0x753d, 0xb7 => 0x759d, 0xb8 => 0x7599, 0xb9 => 0x759a, 0xba => 0x7684, 0xbb => 0x76c2, 0xbc => 0x76f2, 0xbd => 0x76f4, 0xbe => 0x77e5, 0xbf => 0x77fd, 0xc0 => 0x793e, 0xc1 => 0x7940, 0xc2 => 0x7941, 0xc3 => 0x79c9, 0xc4 => 0x79c8, 0xc5 => 0x7a7a, 0xc6 => 0x7a79, 0xc7 => 0x7afa, 0xc8 => 0x7cfe, 0xc9 => 0x7f54, 0xca => 0x7f8c, 0xcb => 0x7f8b, 0xcc => 0x8005, 0xcd => 0x80ba, 0xce => 0x80a5, 0xcf => 0x80a2, 0xd0 => 0x80b1, 0xd1 => 0x80a1, 0xd2 => 0x80ab, 0xd3 => 0x80a9, 0xd4 => 0x80b4, 0xd5 => 0x80aa, 0xd6 => 0x80af, 0xd7 => 0x81e5, 0xd8 => 0x81fe, 0xd9 => 0x820d, 0xda => 0x82b3, 0xdb => 0x829d, 0xdc => 0x8299, 0xdd => 0x82ad, 0xde => 0x82bd, 0xdf => 0x829f, 0xe0 => 0x82b9, 0xe1 => 0x82b1, 0xe2 => 0x82ac, 0xe3 => 0x82a5, 0xe4 => 0x82af, 0xe5 => 0x82b8, 0xe6 => 0x82a3, 0xe7 => 0x82b0, 0xe8 => 0x82be, 0xe9 => 0x82b7, 0xea => 0x864e, 0xeb => 0x8671, 0xec => 0x521d, 0xed => 0x8868, 0xee => 0x8ecb, 0xef => 0x8fce, 0xf0 => 0x8fd4, 0xf1 => 0x8fd1, 0xf2 => 0x90b5, 0xf3 => 0x90b8, 0xf4 => 0x90b1, 0xf5 => 0x90b6, 0xf6 => 0x91c7, 0xf7 => 0x91d1, 0xf8 => 0x9577, 0xf9 => 0x9580, 0xfa => 0x961c, 0xfb => 0x9640, 0xfc => 0x963f, 0xfd => 0x963b, 0xfe => 0x9644, }, 0xab => { 0x40 => 0x9642, 0x41 => 0x96b9, 0x42 => 0x96e8, 0x43 => 0x9752, 0x44 => 0x975e, 0x45 => 0x4e9f, 0x46 => 0x4ead, 0x47 => 0x4eae, 0x48 => 0x4fe1, 0x49 => 0x4fb5, 0x4a => 0x4faf, 0x4b => 0x4fbf, 0x4c => 0x4fe0, 0x4d => 0x4fd1, 0x4e => 0x4fcf, 0x4f => 0x4fdd, 0x50 => 0x4fc3, 0x51 => 0x4fb6, 0x52 => 0x4fd8, 0x53 => 0x4fdf, 0x54 => 0x4fca, 0x55 => 0x4fd7, 0x56 => 0x4fae, 0x57 => 0x4fd0, 0x58 => 0x4fc4, 0x59 => 0x4fc2, 0x5a => 0x4fda, 0x5b => 0x4fce, 0x5c => 0x4fde, 0x5d => 0x4fb7, 0x5e => 0x5157, 0x5f => 0x5192, 0x60 => 0x5191, 0x61 => 0x51a0, 0x62 => 0x524e, 0x63 => 0x5243, 0x64 => 0x524a, 0x65 => 0x524d, 0x66 => 0x524c, 0x67 => 0x524b, 0x68 => 0x5247, 0x69 => 0x52c7, 0x6a => 0x52c9, 0x6b => 0x52c3, 0x6c => 0x52c1, 0x6d => 0x530d, 0x6e => 0x5357, 0x6f => 0x537b, 0x70 => 0x539a, 0x71 => 0x53db, 0x72 => 0x54ac, 0x73 => 0x54c0, 0x74 => 0x54a8, 0x75 => 0x54ce, 0x76 => 0x54c9, 0x77 => 0x54b8, 0x78 => 0x54a6, 0x79 => 0x54b3, 0x7a => 0x54c7, 0x7b => 0x54c2, 0x7c => 0x54bd, 0x7d => 0x54aa, 0x7e => 0x54c1, 0xa1 => 0x54c4, 0xa2 => 0x54c8, 0xa3 => 0x54af, 0xa4 => 0x54ab, 0xa5 => 0x54b1, 0xa6 => 0x54bb, 0xa7 => 0x54a9, 0xa8 => 0x54a7, 0xa9 => 0x54bf, 0xaa => 0x56ff, 0xab => 0x5782, 0xac => 0x578b, 0xad => 0x57a0, 0xae => 0x57a3, 0xaf => 0x57a2, 0xb0 => 0x57ce, 0xb1 => 0x57ae, 0xb2 => 0x5793, 0xb3 => 0x5955, 0xb4 => 0x5951, 0xb5 => 0x594f, 0xb6 => 0x594e, 0xb7 => 0x5950, 0xb8 => 0x59dc, 0xb9 => 0x59d8, 0xba => 0x59ff, 0xbb => 0x59e3, 0xbc => 0x59e8, 0xbd => 0x5a03, 0xbe => 0x59e5, 0xbf => 0x59ea, 0xc0 => 0x59da, 0xc1 => 0x59e6, 0xc2 => 0x5a01, 0xc3 => 0x59fb, 0xc4 => 0x5b69, 0xc5 => 0x5ba3, 0xc6 => 0x5ba6, 0xc7 => 0x5ba4, 0xc8 => 0x5ba2, 0xc9 => 0x5ba5, 0xca => 0x5c01, 0xcb => 0x5c4e, 0xcc => 0x5c4f, 0xcd => 0x5c4d, 0xce => 0x5c4b, 0xcf => 0x5cd9, 0xd0 => 0x5cd2, 0xd1 => 0x5df7, 0xd2 => 0x5e1d, 0xd3 => 0x5e25, 0xd4 => 0x5e1f, 0xd5 => 0x5e7d, 0xd6 => 0x5ea0, 0xd7 => 0x5ea6, 0xd8 => 0x5efa, 0xd9 => 0x5f08, 0xda => 0x5f2d, 0xdb => 0x5f65, 0xdc => 0x5f88, 0xdd => 0x5f85, 0xde => 0x5f8a, 0xdf => 0x5f8b, 0xe0 => 0x5f87, 0xe1 => 0x5f8c, 0xe2 => 0x5f89, 0xe3 => 0x6012, 0xe4 => 0x601d, 0xe5 => 0x6020, 0xe6 => 0x6025, 0xe7 => 0x600e, 0xe8 => 0x6028, 0xe9 => 0x604d, 0xea => 0x6070, 0xeb => 0x6068, 0xec => 0x6062, 0xed => 0x6046, 0xee => 0x6043, 0xef => 0x606c, 0xf0 => 0x606b, 0xf1 => 0x606a, 0xf2 => 0x6064, 0xf3 => 0x6241, 0xf4 => 0x62dc, 0xf5 => 0x6316, 0xf6 => 0x6309, 0xf7 => 0x62fc, 0xf8 => 0x62ed, 0xf9 => 0x6301, 0xfa => 0x62ee, 0xfb => 0x62fd, 0xfc => 0x6307, 0xfd => 0x62f1, 0xfe => 0x62f7, }, 0xac => { 0x40 => 0x62ef, 0x41 => 0x62ec, 0x42 => 0x62fe, 0x43 => 0x62f4, 0x44 => 0x6311, 0x45 => 0x6302, 0x46 => 0x653f, 0x47 => 0x6545, 0x48 => 0x65ab, 0x49 => 0x65bd, 0x4a => 0x65e2, 0x4b => 0x6625, 0x4c => 0x662d, 0x4d => 0x6620, 0x4e => 0x6627, 0x4f => 0x662f, 0x50 => 0x661f, 0x51 => 0x6628, 0x52 => 0x6631, 0x53 => 0x6624, 0x54 => 0x66f7, 0x55 => 0x67ff, 0x56 => 0x67d3, 0x57 => 0x67f1, 0x58 => 0x67d4, 0x59 => 0x67d0, 0x5a => 0x67ec, 0x5b => 0x67b6, 0x5c => 0x67af, 0x5d => 0x67f5, 0x5e => 0x67e9, 0x5f => 0x67ef, 0x60 => 0x67c4, 0x61 => 0x67d1, 0x62 => 0x67b4, 0x63 => 0x67da, 0x64 => 0x67e5, 0x65 => 0x67b8, 0x66 => 0x67cf, 0x67 => 0x67de, 0x68 => 0x67f3, 0x69 => 0x67b0, 0x6a => 0x67d9, 0x6b => 0x67e2, 0x6c => 0x67dd, 0x6d => 0x67d2, 0x6e => 0x6b6a, 0x6f => 0x6b83, 0x70 => 0x6b86, 0x71 => 0x6bb5, 0x72 => 0x6bd2, 0x73 => 0x6bd7, 0x74 => 0x6c1f, 0x75 => 0x6cc9, 0x76 => 0x6d0b, 0x77 => 0x6d32, 0x78 => 0x6d2a, 0x79 => 0x6d41, 0x7a => 0x6d25, 0x7b => 0x6d0c, 0x7c => 0x6d31, 0x7d => 0x6d1e, 0x7e => 0x6d17, 0xa1 => 0x6d3b, 0xa2 => 0x6d3d, 0xa3 => 0x6d3e, 0xa4 => 0x6d36, 0xa5 => 0x6d1b, 0xa6 => 0x6cf5, 0xa7 => 0x6d39, 0xa8 => 0x6d27, 0xa9 => 0x6d38, 0xaa => 0x6d29, 0xab => 0x6d2e, 0xac => 0x6d35, 0xad => 0x6d0e, 0xae => 0x6d2b, 0xaf => 0x70ab, 0xb0 => 0x70ba, 0xb1 => 0x70b3, 0xb2 => 0x70ac, 0xb3 => 0x70af, 0xb4 => 0x70ad, 0xb5 => 0x70b8, 0xb6 => 0x70ae, 0xb7 => 0x70a4, 0xb8 => 0x7230, 0xb9 => 0x7272, 0xba => 0x726f, 0xbb => 0x7274, 0xbc => 0x72e9, 0xbd => 0x72e0, 0xbe => 0x72e1, 0xbf => 0x73b7, 0xc0 => 0x73ca, 0xc1 => 0x73bb, 0xc2 => 0x73b2, 0xc3 => 0x73cd, 0xc4 => 0x73c0, 0xc5 => 0x73b3, 0xc6 => 0x751a, 0xc7 => 0x752d, 0xc8 => 0x754f, 0xc9 => 0x754c, 0xca => 0x754e, 0xcb => 0x754b, 0xcc => 0x75ab, 0xcd => 0x75a4, 0xce => 0x75a5, 0xcf => 0x75a2, 0xd0 => 0x75a3, 0xd1 => 0x7678, 0xd2 => 0x7686, 0xd3 => 0x7687, 0xd4 => 0x7688, 0xd5 => 0x76c8, 0xd6 => 0x76c6, 0xd7 => 0x76c3, 0xd8 => 0x76c5, 0xd9 => 0x7701, 0xda => 0x76f9, 0xdb => 0x76f8, 0xdc => 0x7709, 0xdd => 0x770b, 0xde => 0x76fe, 0xdf => 0x76fc, 0xe0 => 0x7707, 0xe1 => 0x77dc, 0xe2 => 0x7802, 0xe3 => 0x7814, 0xe4 => 0x780c, 0xe5 => 0x780d, 0xe6 => 0x7946, 0xe7 => 0x7949, 0xe8 => 0x7948, 0xe9 => 0x7947, 0xea => 0x79b9, 0xeb => 0x79ba, 0xec => 0x79d1, 0xed => 0x79d2, 0xee => 0x79cb, 0xef => 0x7a7f, 0xf0 => 0x7a81, 0xf1 => 0x7aff, 0xf2 => 0x7afd, 0xf3 => 0x7c7d, 0xf4 => 0x7d02, 0xf5 => 0x7d05, 0xf6 => 0x7d00, 0xf7 => 0x7d09, 0xf8 => 0x7d07, 0xf9 => 0x7d04, 0xfa => 0x7d06, 0xfb => 0x7f38, 0xfc => 0x7f8e, 0xfd => 0x7fbf, 0xfe => 0x8004, }, 0xad => { 0x40 => 0x8010, 0x41 => 0x800d, 0x42 => 0x8011, 0x43 => 0x8036, 0x44 => 0x80d6, 0x45 => 0x80e5, 0x46 => 0x80da, 0x47 => 0x80c3, 0x48 => 0x80c4, 0x49 => 0x80cc, 0x4a => 0x80e1, 0x4b => 0x80db, 0x4c => 0x80ce, 0x4d => 0x80de, 0x4e => 0x80e4, 0x4f => 0x80dd, 0x50 => 0x81f4, 0x51 => 0x8222, 0x52 => 0x82e7, 0x53 => 0x8303, 0x54 => 0x8305, 0x55 => 0x82e3, 0x56 => 0x82db, 0x57 => 0x82e6, 0x58 => 0x8304, 0x59 => 0x82e5, 0x5a => 0x8302, 0x5b => 0x8309, 0x5c => 0x82d2, 0x5d => 0x82d7, 0x5e => 0x82f1, 0x5f => 0x8301, 0x60 => 0x82dc, 0x61 => 0x82d4, 0x62 => 0x82d1, 0x63 => 0x82de, 0x64 => 0x82d3, 0x65 => 0x82df, 0x66 => 0x82ef, 0x67 => 0x8306, 0x68 => 0x8650, 0x69 => 0x8679, 0x6a => 0x867b, 0x6b => 0x867a, 0x6c => 0x884d, 0x6d => 0x886b, 0x6e => 0x8981, 0x6f => 0x89d4, 0x70 => 0x8a08, 0x71 => 0x8a02, 0x72 => 0x8a03, 0x73 => 0x8c9e, 0x74 => 0x8ca0, 0x75 => 0x8d74, 0x76 => 0x8d73, 0x77 => 0x8db4, 0x78 => 0x8ecd, 0x79 => 0x8ecc, 0x7a => 0x8ff0, 0x7b => 0x8fe6, 0x7c => 0x8fe2, 0x7d => 0x8fea, 0x7e => 0x8fe5, 0xa1 => 0x8fed, 0xa2 => 0x8feb, 0xa3 => 0x8fe4, 0xa4 => 0x8fe8, 0xa5 => 0x90ca, 0xa6 => 0x90ce, 0xa7 => 0x90c1, 0xa8 => 0x90c3, 0xa9 => 0x914b, 0xaa => 0x914a, 0xab => 0x91cd, 0xac => 0x9582, 0xad => 0x9650, 0xae => 0x964b, 0xaf => 0x964c, 0xb0 => 0x964d, 0xb1 => 0x9762, 0xb2 => 0x9769, 0xb3 => 0x97cb, 0xb4 => 0x97ed, 0xb5 => 0x97f3, 0xb6 => 0x9801, 0xb7 => 0x98a8, 0xb8 => 0x98db, 0xb9 => 0x98df, 0xba => 0x9996, 0xbb => 0x9999, 0xbc => 0x4e58, 0xbd => 0x4eb3, 0xbe => 0x500c, 0xbf => 0x500d, 0xc0 => 0x5023, 0xc1 => 0x4fef, 0xc2 => 0x5026, 0xc3 => 0x5025, 0xc4 => 0x4ff8, 0xc5 => 0x5029, 0xc6 => 0x5016, 0xc7 => 0x5006, 0xc8 => 0x503c, 0xc9 => 0x501f, 0xca => 0x501a, 0xcb => 0x5012, 0xcc => 0x5011, 0xcd => 0x4ffa, 0xce => 0x5000, 0xcf => 0x5014, 0xd0 => 0x5028, 0xd1 => 0x4ff1, 0xd2 => 0x5021, 0xd3 => 0x500b, 0xd4 => 0x5019, 0xd5 => 0x5018, 0xd6 => 0x4ff3, 0xd7 => 0x4fee, 0xd8 => 0x502d, 0xd9 => 0x502a, 0xda => 0x4ffe, 0xdb => 0x502b, 0xdc => 0x5009, 0xdd => 0x517c, 0xde => 0x51a4, 0xdf => 0x51a5, 0xe0 => 0x51a2, 0xe1 => 0x51cd, 0xe2 => 0x51cc, 0xe3 => 0x51c6, 0xe4 => 0x51cb, 0xe5 => 0x5256, 0xe6 => 0x525c, 0xe7 => 0x5254, 0xe8 => 0x525b, 0xe9 => 0x525d, 0xea => 0x532a, 0xeb => 0x537f, 0xec => 0x539f, 0xed => 0x539d, 0xee => 0x53df, 0xef => 0x54e8, 0xf0 => 0x5510, 0xf1 => 0x5501, 0xf2 => 0x5537, 0xf3 => 0x54fc, 0xf4 => 0x54e5, 0xf5 => 0x54f2, 0xf6 => 0x5506, 0xf7 => 0x54fa, 0xf8 => 0x5514, 0xf9 => 0x54e9, 0xfa => 0x54ed, 0xfb => 0x54e1, 0xfc => 0x5509, 0xfd => 0x54ee, 0xfe => 0x54ea, }, 0xae => { 0x40 => 0x54e6, 0x41 => 0x5527, 0x42 => 0x5507, 0x43 => 0x54fd, 0x44 => 0x550f, 0x45 => 0x5703, 0x46 => 0x5704, 0x47 => 0x57c2, 0x48 => 0x57d4, 0x49 => 0x57cb, 0x4a => 0x57c3, 0x4b => 0x5809, 0x4c => 0x590f, 0x4d => 0x5957, 0x4e => 0x5958, 0x4f => 0x595a, 0x50 => 0x5a11, 0x51 => 0x5a18, 0x52 => 0x5a1c, 0x53 => 0x5a1f, 0x54 => 0x5a1b, 0x55 => 0x5a13, 0x56 => 0x59ec, 0x57 => 0x5a20, 0x58 => 0x5a23, 0x59 => 0x5a29, 0x5a => 0x5a25, 0x5b => 0x5a0c, 0x5c => 0x5a09, 0x5d => 0x5b6b, 0x5e => 0x5c58, 0x5f => 0x5bb0, 0x60 => 0x5bb3, 0x61 => 0x5bb6, 0x62 => 0x5bb4, 0x63 => 0x5bae, 0x64 => 0x5bb5, 0x65 => 0x5bb9, 0x66 => 0x5bb8, 0x67 => 0x5c04, 0x68 => 0x5c51, 0x69 => 0x5c55, 0x6a => 0x5c50, 0x6b => 0x5ced, 0x6c => 0x5cfd, 0x6d => 0x5cfb, 0x6e => 0x5cea, 0x6f => 0x5ce8, 0x70 => 0x5cf0, 0x71 => 0x5cf6, 0x72 => 0x5d01, 0x73 => 0x5cf4, 0x74 => 0x5dee, 0x75 => 0x5e2d, 0x76 => 0x5e2b, 0x77 => 0x5eab, 0x78 => 0x5ead, 0x79 => 0x5ea7, 0x7a => 0x5f31, 0x7b => 0x5f92, 0x7c => 0x5f91, 0x7d => 0x5f90, 0x7e => 0x6059, 0xa1 => 0x6063, 0xa2 => 0x6065, 0xa3 => 0x6050, 0xa4 => 0x6055, 0xa5 => 0x606d, 0xa6 => 0x6069, 0xa7 => 0x606f, 0xa8 => 0x6084, 0xa9 => 0x609f, 0xaa => 0x609a, 0xab => 0x608d, 0xac => 0x6094, 0xad => 0x608c, 0xae => 0x6085, 0xaf => 0x6096, 0xb0 => 0x6247, 0xb1 => 0x62f3, 0xb2 => 0x6308, 0xb3 => 0x62ff, 0xb4 => 0x634e, 0xb5 => 0x633e, 0xb6 => 0x632f, 0xb7 => 0x6355, 0xb8 => 0x6342, 0xb9 => 0x6346, 0xba => 0x634f, 0xbb => 0x6349, 0xbc => 0x633a, 0xbd => 0x6350, 0xbe => 0x633d, 0xbf => 0x632a, 0xc0 => 0x632b, 0xc1 => 0x6328, 0xc2 => 0x634d, 0xc3 => 0x634c, 0xc4 => 0x6548, 0xc5 => 0x6549, 0xc6 => 0x6599, 0xc7 => 0x65c1, 0xc8 => 0x65c5, 0xc9 => 0x6642, 0xca => 0x6649, 0xcb => 0x664f, 0xcc => 0x6643, 0xcd => 0x6652, 0xce => 0x664c, 0xcf => 0x6645, 0xd0 => 0x6641, 0xd1 => 0x66f8, 0xd2 => 0x6714, 0xd3 => 0x6715, 0xd4 => 0x6717, 0xd5 => 0x6821, 0xd6 => 0x6838, 0xd7 => 0x6848, 0xd8 => 0x6846, 0xd9 => 0x6853, 0xda => 0x6839, 0xdb => 0x6842, 0xdc => 0x6854, 0xdd => 0x6829, 0xde => 0x68b3, 0xdf => 0x6817, 0xe0 => 0x684c, 0xe1 => 0x6851, 0xe2 => 0x683d, 0xe3 => 0x67f4, 0xe4 => 0x6850, 0xe5 => 0x6840, 0xe6 => 0x683c, 0xe7 => 0x6843, 0xe8 => 0x682a, 0xe9 => 0x6845, 0xea => 0x6813, 0xeb => 0x6818, 0xec => 0x6841, 0xed => 0x6b8a, 0xee => 0x6b89, 0xef => 0x6bb7, 0xf0 => 0x6c23, 0xf1 => 0x6c27, 0xf2 => 0x6c28, 0xf3 => 0x6c26, 0xf4 => 0x6c24, 0xf5 => 0x6cf0, 0xf6 => 0x6d6a, 0xf7 => 0x6d95, 0xf8 => 0x6d88, 0xf9 => 0x6d87, 0xfa => 0x6d66, 0xfb => 0x6d78, 0xfc => 0x6d77, 0xfd => 0x6d59, 0xfe => 0x6d93, }, 0xaf => { 0x40 => 0x6d6c, 0x41 => 0x6d89, 0x42 => 0x6d6e, 0x43 => 0x6d5a, 0x44 => 0x6d74, 0x45 => 0x6d69, 0x46 => 0x6d8c, 0x47 => 0x6d8a, 0x48 => 0x6d79, 0x49 => 0x6d85, 0x4a => 0x6d65, 0x4b => 0x6d94, 0x4c => 0x70ca, 0x4d => 0x70d8, 0x4e => 0x70e4, 0x4f => 0x70d9, 0x50 => 0x70c8, 0x51 => 0x70cf, 0x52 => 0x7239, 0x53 => 0x7279, 0x54 => 0x72fc, 0x55 => 0x72f9, 0x56 => 0x72fd, 0x57 => 0x72f8, 0x58 => 0x72f7, 0x59 => 0x7386, 0x5a => 0x73ed, 0x5b => 0x7409, 0x5c => 0x73ee, 0x5d => 0x73e0, 0x5e => 0x73ea, 0x5f => 0x73de, 0x60 => 0x7554, 0x61 => 0x755d, 0x62 => 0x755c, 0x63 => 0x755a, 0x64 => 0x7559, 0x65 => 0x75be, 0x66 => 0x75c5, 0x67 => 0x75c7, 0x68 => 0x75b2, 0x69 => 0x75b3, 0x6a => 0x75bd, 0x6b => 0x75bc, 0x6c => 0x75b9, 0x6d => 0x75c2, 0x6e => 0x75b8, 0x6f => 0x768b, 0x70 => 0x76b0, 0x71 => 0x76ca, 0x72 => 0x76cd, 0x73 => 0x76ce, 0x74 => 0x7729, 0x75 => 0x771f, 0x76 => 0x7720, 0x77 => 0x7728, 0x78 => 0x77e9, 0x79 => 0x7830, 0x7a => 0x7827, 0x7b => 0x7838, 0x7c => 0x781d, 0x7d => 0x7834, 0x7e => 0x7837, 0xa1 => 0x7825, 0xa2 => 0x782d, 0xa3 => 0x7820, 0xa4 => 0x781f, 0xa5 => 0x7832, 0xa6 => 0x7955, 0xa7 => 0x7950, 0xa8 => 0x7960, 0xa9 => 0x795f, 0xaa => 0x7956, 0xab => 0x795e, 0xac => 0x795d, 0xad => 0x7957, 0xae => 0x795a, 0xaf => 0x79e4, 0xb0 => 0x79e3, 0xb1 => 0x79e7, 0xb2 => 0x79df, 0xb3 => 0x79e6, 0xb4 => 0x79e9, 0xb5 => 0x79d8, 0xb6 => 0x7a84, 0xb7 => 0x7a88, 0xb8 => 0x7ad9, 0xb9 => 0x7b06, 0xba => 0x7b11, 0xbb => 0x7c89, 0xbc => 0x7d21, 0xbd => 0x7d17, 0xbe => 0x7d0b, 0xbf => 0x7d0a, 0xc0 => 0x7d20, 0xc1 => 0x7d22, 0xc2 => 0x7d14, 0xc3 => 0x7d10, 0xc4 => 0x7d15, 0xc5 => 0x7d1a, 0xc6 => 0x7d1c, 0xc7 => 0x7d0d, 0xc8 => 0x7d19, 0xc9 => 0x7d1b, 0xca => 0x7f3a, 0xcb => 0x7f5f, 0xcc => 0x7f94, 0xcd => 0x7fc5, 0xce => 0x7fc1, 0xcf => 0x8006, 0xd0 => 0x8018, 0xd1 => 0x8015, 0xd2 => 0x8019, 0xd3 => 0x8017, 0xd4 => 0x803d, 0xd5 => 0x803f, 0xd6 => 0x80f1, 0xd7 => 0x8102, 0xd8 => 0x80f0, 0xd9 => 0x8105, 0xda => 0x80ed, 0xdb => 0x80f4, 0xdc => 0x8106, 0xdd => 0x80f8, 0xde => 0x80f3, 0xdf => 0x8108, 0xe0 => 0x80fd, 0xe1 => 0x810a, 0xe2 => 0x80fc, 0xe3 => 0x80ef, 0xe4 => 0x81ed, 0xe5 => 0x81ec, 0xe6 => 0x8200, 0xe7 => 0x8210, 0xe8 => 0x822a, 0xe9 => 0x822b, 0xea => 0x8228, 0xeb => 0x822c, 0xec => 0x82bb, 0xed => 0x832b, 0xee => 0x8352, 0xef => 0x8354, 0xf0 => 0x834a, 0xf1 => 0x8338, 0xf2 => 0x8350, 0xf3 => 0x8349, 0xf4 => 0x8335, 0xf5 => 0x8334, 0xf6 => 0x834f, 0xf7 => 0x8332, 0xf8 => 0x8339, 0xf9 => 0x8336, 0xfa => 0x8317, 0xfb => 0x8340, 0xfc => 0x8331, 0xfd => 0x8328, 0xfe => 0x8343, }, 0xb0 => { 0x40 => 0x8654, 0x41 => 0x868a, 0x42 => 0x86aa, 0x43 => 0x8693, 0x44 => 0x86a4, 0x45 => 0x86a9, 0x46 => 0x868c, 0x47 => 0x86a3, 0x48 => 0x869c, 0x49 => 0x8870, 0x4a => 0x8877, 0x4b => 0x8881, 0x4c => 0x8882, 0x4d => 0x887d, 0x4e => 0x8879, 0x4f => 0x8a18, 0x50 => 0x8a10, 0x51 => 0x8a0e, 0x52 => 0x8a0c, 0x53 => 0x8a15, 0x54 => 0x8a0a, 0x55 => 0x8a17, 0x56 => 0x8a13, 0x57 => 0x8a16, 0x58 => 0x8a0f, 0x59 => 0x8a11, 0x5a => 0x8c48, 0x5b => 0x8c7a, 0x5c => 0x8c79, 0x5d => 0x8ca1, 0x5e => 0x8ca2, 0x5f => 0x8d77, 0x60 => 0x8eac, 0x61 => 0x8ed2, 0x62 => 0x8ed4, 0x63 => 0x8ecf, 0x64 => 0x8fb1, 0x65 => 0x9001, 0x66 => 0x9006, 0x67 => 0x8ff7, 0x68 => 0x9000, 0x69 => 0x8ffa, 0x6a => 0x8ff4, 0x6b => 0x9003, 0x6c => 0x8ffd, 0x6d => 0x9005, 0x6e => 0x8ff8, 0x6f => 0x9095, 0x70 => 0x90e1, 0x71 => 0x90dd, 0x72 => 0x90e2, 0x73 => 0x9152, 0x74 => 0x914d, 0x75 => 0x914c, 0x76 => 0x91d8, 0x77 => 0x91dd, 0x78 => 0x91d7, 0x79 => 0x91dc, 0x7a => 0x91d9, 0x7b => 0x9583, 0x7c => 0x9662, 0x7d => 0x9663, 0x7e => 0x9661, 0xa1 => 0x965b, 0xa2 => 0x965d, 0xa3 => 0x9664, 0xa4 => 0x9658, 0xa5 => 0x965e, 0xa6 => 0x96bb, 0xa7 => 0x98e2, 0xa8 => 0x99ac, 0xa9 => 0x9aa8, 0xaa => 0x9ad8, 0xab => 0x9b25, 0xac => 0x9b32, 0xad => 0x9b3c, 0xae => 0x4e7e, 0xaf => 0x507a, 0xb0 => 0x507d, 0xb1 => 0x505c, 0xb2 => 0x5047, 0xb3 => 0x5043, 0xb4 => 0x504c, 0xb5 => 0x505a, 0xb6 => 0x5049, 0xb7 => 0x5065, 0xb8 => 0x5076, 0xb9 => 0x504e, 0xba => 0x5055, 0xbb => 0x5075, 0xbc => 0x5074, 0xbd => 0x5077, 0xbe => 0x504f, 0xbf => 0x500f, 0xc0 => 0x506f, 0xc1 => 0x506d, 0xc2 => 0x515c, 0xc3 => 0x5195, 0xc4 => 0x51f0, 0xc5 => 0x526a, 0xc6 => 0x526f, 0xc7 => 0x52d2, 0xc8 => 0x52d9, 0xc9 => 0x52d8, 0xca => 0x52d5, 0xcb => 0x5310, 0xcc => 0x530f, 0xcd => 0x5319, 0xce => 0x533f, 0xcf => 0x5340, 0xd0 => 0x533e, 0xd1 => 0x53c3, 0xd2 => 0x66fc, 0xd3 => 0x5546, 0xd4 => 0x556a, 0xd5 => 0x5566, 0xd6 => 0x5544, 0xd7 => 0x555e, 0xd8 => 0x5561, 0xd9 => 0x5543, 0xda => 0x554a, 0xdb => 0x5531, 0xdc => 0x5556, 0xdd => 0x554f, 0xde => 0x5555, 0xdf => 0x552f, 0xe0 => 0x5564, 0xe1 => 0x5538, 0xe2 => 0x552e, 0xe3 => 0x555c, 0xe4 => 0x552c, 0xe5 => 0x5563, 0xe6 => 0x5533, 0xe7 => 0x5541, 0xe8 => 0x5557, 0xe9 => 0x5708, 0xea => 0x570b, 0xeb => 0x5709, 0xec => 0x57df, 0xed => 0x5805, 0xee => 0x580a, 0xef => 0x5806, 0xf0 => 0x57e0, 0xf1 => 0x57e4, 0xf2 => 0x57fa, 0xf3 => 0x5802, 0xf4 => 0x5835, 0xf5 => 0x57f7, 0xf6 => 0x57f9, 0xf7 => 0x5920, 0xf8 => 0x5962, 0xf9 => 0x5a36, 0xfa => 0x5a41, 0xfb => 0x5a49, 0xfc => 0x5a66, 0xfd => 0x5a6a, 0xfe => 0x5a40, }, 0xb1 => { 0x40 => 0x5a3c, 0x41 => 0x5a62, 0x42 => 0x5a5a, 0x43 => 0x5a46, 0x44 => 0x5a4a, 0x45 => 0x5b70, 0x46 => 0x5bc7, 0x47 => 0x5bc5, 0x48 => 0x5bc4, 0x49 => 0x5bc2, 0x4a => 0x5bbf, 0x4b => 0x5bc6, 0x4c => 0x5c09, 0x4d => 0x5c08, 0x4e => 0x5c07, 0x4f => 0x5c60, 0x50 => 0x5c5c, 0x51 => 0x5c5d, 0x52 => 0x5d07, 0x53 => 0x5d06, 0x54 => 0x5d0e, 0x55 => 0x5d1b, 0x56 => 0x5d16, 0x57 => 0x5d22, 0x58 => 0x5d11, 0x59 => 0x5d29, 0x5a => 0x5d14, 0x5b => 0x5d19, 0x5c => 0x5d24, 0x5d => 0x5d27, 0x5e => 0x5d17, 0x5f => 0x5de2, 0x60 => 0x5e38, 0x61 => 0x5e36, 0x62 => 0x5e33, 0x63 => 0x5e37, 0x64 => 0x5eb7, 0x65 => 0x5eb8, 0x66 => 0x5eb6, 0x67 => 0x5eb5, 0x68 => 0x5ebe, 0x69 => 0x5f35, 0x6a => 0x5f37, 0x6b => 0x5f57, 0x6c => 0x5f6c, 0x6d => 0x5f69, 0x6e => 0x5f6b, 0x6f => 0x5f97, 0x70 => 0x5f99, 0x71 => 0x5f9e, 0x72 => 0x5f98, 0x73 => 0x5fa1, 0x74 => 0x5fa0, 0x75 => 0x5f9c, 0x76 => 0x607f, 0x77 => 0x60a3, 0x78 => 0x6089, 0x79 => 0x60a0, 0x7a => 0x60a8, 0x7b => 0x60cb, 0x7c => 0x60b4, 0x7d => 0x60e6, 0x7e => 0x60bd, 0xa1 => 0x60c5, 0xa2 => 0x60bb, 0xa3 => 0x60b5, 0xa4 => 0x60dc, 0xa5 => 0x60bc, 0xa6 => 0x60d8, 0xa7 => 0x60d5, 0xa8 => 0x60c6, 0xa9 => 0x60df, 0xaa => 0x60b8, 0xab => 0x60da, 0xac => 0x60c7, 0xad => 0x621a, 0xae => 0x621b, 0xaf => 0x6248, 0xb0 => 0x63a0, 0xb1 => 0x63a7, 0xb2 => 0x6372, 0xb3 => 0x6396, 0xb4 => 0x63a2, 0xb5 => 0x63a5, 0xb6 => 0x6377, 0xb7 => 0x6367, 0xb8 => 0x6398, 0xb9 => 0x63aa, 0xba => 0x6371, 0xbb => 0x63a9, 0xbc => 0x6389, 0xbd => 0x6383, 0xbe => 0x639b, 0xbf => 0x636b, 0xc0 => 0x63a8, 0xc1 => 0x6384, 0xc2 => 0x6388, 0xc3 => 0x6399, 0xc4 => 0x63a1, 0xc5 => 0x63ac, 0xc6 => 0x6392, 0xc7 => 0x638f, 0xc8 => 0x6380, 0xc9 => 0x637b, 0xca => 0x6369, 0xcb => 0x6368, 0xcc => 0x637a, 0xcd => 0x655d, 0xce => 0x6556, 0xcf => 0x6551, 0xd0 => 0x6559, 0xd1 => 0x6557, 0xd2 => 0x555f, 0xd3 => 0x654f, 0xd4 => 0x6558, 0xd5 => 0x6555, 0xd6 => 0x6554, 0xd7 => 0x659c, 0xd8 => 0x659b, 0xd9 => 0x65ac, 0xda => 0x65cf, 0xdb => 0x65cb, 0xdc => 0x65cc, 0xdd => 0x65ce, 0xde => 0x665d, 0xdf => 0x665a, 0xe0 => 0x6664, 0xe1 => 0x6668, 0xe2 => 0x6666, 0xe3 => 0x665e, 0xe4 => 0x66f9, 0xe5 => 0x52d7, 0xe6 => 0x671b, 0xe7 => 0x6881, 0xe8 => 0x68af, 0xe9 => 0x68a2, 0xea => 0x6893, 0xeb => 0x68b5, 0xec => 0x687f, 0xed => 0x6876, 0xee => 0x68b1, 0xef => 0x68a7, 0xf0 => 0x6897, 0xf1 => 0x68b0, 0xf2 => 0x6883, 0xf3 => 0x68c4, 0xf4 => 0x68ad, 0xf5 => 0x6886, 0xf6 => 0x6885, 0xf7 => 0x6894, 0xf8 => 0x689d, 0xf9 => 0x68a8, 0xfa => 0x689f, 0xfb => 0x68a1, 0xfc => 0x6882, 0xfd => 0x6b32, 0xfe => 0x6bba, }, 0xb2 => { 0x40 => 0x6beb, 0x41 => 0x6bec, 0x42 => 0x6c2b, 0x43 => 0x6d8e, 0x44 => 0x6dbc, 0x45 => 0x6df3, 0x46 => 0x6dd9, 0x47 => 0x6db2, 0x48 => 0x6de1, 0x49 => 0x6dcc, 0x4a => 0x6de4, 0x4b => 0x6dfb, 0x4c => 0x6dfa, 0x4d => 0x6e05, 0x4e => 0x6dc7, 0x4f => 0x6dcb, 0x50 => 0x6daf, 0x51 => 0x6dd1, 0x52 => 0x6dae, 0x53 => 0x6dde, 0x54 => 0x6df9, 0x55 => 0x6db8, 0x56 => 0x6df7, 0x57 => 0x6df5, 0x58 => 0x6dc5, 0x59 => 0x6dd2, 0x5a => 0x6e1a, 0x5b => 0x6db5, 0x5c => 0x6dda, 0x5d => 0x6deb, 0x5e => 0x6dd8, 0x5f => 0x6dea, 0x60 => 0x6df1, 0x61 => 0x6dee, 0x62 => 0x6de8, 0x63 => 0x6dc6, 0x64 => 0x6dc4, 0x65 => 0x6daa, 0x66 => 0x6dec, 0x67 => 0x6dbf, 0x68 => 0x6de6, 0x69 => 0x70f9, 0x6a => 0x7109, 0x6b => 0x710a, 0x6c => 0x70fd, 0x6d => 0x70ef, 0x6e => 0x723d, 0x6f => 0x727d, 0x70 => 0x7281, 0x71 => 0x731c, 0x72 => 0x731b, 0x73 => 0x7316, 0x74 => 0x7313, 0x75 => 0x7319, 0x76 => 0x7387, 0x77 => 0x7405, 0x78 => 0x740a, 0x79 => 0x7403, 0x7a => 0x7406, 0x7b => 0x73fe, 0x7c => 0x740d, 0x7d => 0x74e0, 0x7e => 0x74f6, 0xa1 => 0x74f7, 0xa2 => 0x751c, 0xa3 => 0x7522, 0xa4 => 0x7565, 0xa5 => 0x7566, 0xa6 => 0x7562, 0xa7 => 0x7570, 0xa8 => 0x758f, 0xa9 => 0x75d4, 0xaa => 0x75d5, 0xab => 0x75b5, 0xac => 0x75ca, 0xad => 0x75cd, 0xae => 0x768e, 0xaf => 0x76d4, 0xb0 => 0x76d2, 0xb1 => 0x76db, 0xb2 => 0x7737, 0xb3 => 0x773e, 0xb4 => 0x773c, 0xb5 => 0x7736, 0xb6 => 0x7738, 0xb7 => 0x773a, 0xb8 => 0x786b, 0xb9 => 0x7843, 0xba => 0x784e, 0xbb => 0x7965, 0xbc => 0x7968, 0xbd => 0x796d, 0xbe => 0x79fb, 0xbf => 0x7a92, 0xc0 => 0x7a95, 0xc1 => 0x7b20, 0xc2 => 0x7b28, 0xc3 => 0x7b1b, 0xc4 => 0x7b2c, 0xc5 => 0x7b26, 0xc6 => 0x7b19, 0xc7 => 0x7b1e, 0xc8 => 0x7b2e, 0xc9 => 0x7c92, 0xca => 0x7c97, 0xcb => 0x7c95, 0xcc => 0x7d46, 0xcd => 0x7d43, 0xce => 0x7d71, 0xcf => 0x7d2e, 0xd0 => 0x7d39, 0xd1 => 0x7d3c, 0xd2 => 0x7d40, 0xd3 => 0x7d30, 0xd4 => 0x7d33, 0xd5 => 0x7d44, 0xd6 => 0x7d2f, 0xd7 => 0x7d42, 0xd8 => 0x7d32, 0xd9 => 0x7d31, 0xda => 0x7f3d, 0xdb => 0x7f9e, 0xdc => 0x7f9a, 0xdd => 0x7fcc, 0xde => 0x7fce, 0xdf => 0x7fd2, 0xe0 => 0x801c, 0xe1 => 0x804a, 0xe2 => 0x8046, 0xe3 => 0x812f, 0xe4 => 0x8116, 0xe5 => 0x8123, 0xe6 => 0x812b, 0xe7 => 0x8129, 0xe8 => 0x8130, 0xe9 => 0x8124, 0xea => 0x8202, 0xeb => 0x8235, 0xec => 0x8237, 0xed => 0x8236, 0xee => 0x8239, 0xef => 0x838e, 0xf0 => 0x839e, 0xf1 => 0x8398, 0xf2 => 0x8378, 0xf3 => 0x83a2, 0xf4 => 0x8396, 0xf5 => 0x83bd, 0xf6 => 0x83ab, 0xf7 => 0x8392, 0xf8 => 0x838a, 0xf9 => 0x8393, 0xfa => 0x8389, 0xfb => 0x83a0, 0xfc => 0x8377, 0xfd => 0x837b, 0xfe => 0x837c, }, 0xb3 => { 0x40 => 0x8386, 0x41 => 0x83a7, 0x42 => 0x8655, 0x43 => 0x5f6a, 0x44 => 0x86c7, 0x45 => 0x86c0, 0x46 => 0x86b6, 0x47 => 0x86c4, 0x48 => 0x86b5, 0x49 => 0x86c6, 0x4a => 0x86cb, 0x4b => 0x86b1, 0x4c => 0x86af, 0x4d => 0x86c9, 0x4e => 0x8853, 0x4f => 0x889e, 0x50 => 0x8888, 0x51 => 0x88ab, 0x52 => 0x8892, 0x53 => 0x8896, 0x54 => 0x888d, 0x55 => 0x888b, 0x56 => 0x8993, 0x57 => 0x898f, 0x58 => 0x8a2a, 0x59 => 0x8a1d, 0x5a => 0x8a23, 0x5b => 0x8a25, 0x5c => 0x8a31, 0x5d => 0x8a2d, 0x5e => 0x8a1f, 0x5f => 0x8a1b, 0x60 => 0x8a22, 0x61 => 0x8c49, 0x62 => 0x8c5a, 0x63 => 0x8ca9, 0x64 => 0x8cac, 0x65 => 0x8cab, 0x66 => 0x8ca8, 0x67 => 0x8caa, 0x68 => 0x8ca7, 0x69 => 0x8d67, 0x6a => 0x8d66, 0x6b => 0x8dbe, 0x6c => 0x8dba, 0x6d => 0x8edb, 0x6e => 0x8edf, 0x6f => 0x9019, 0x70 => 0x900d, 0x71 => 0x901a, 0x72 => 0x9017, 0x73 => 0x9023, 0x74 => 0x901f, 0x75 => 0x901d, 0x76 => 0x9010, 0x77 => 0x9015, 0x78 => 0x901e, 0x79 => 0x9020, 0x7a => 0x900f, 0x7b => 0x9022, 0x7c => 0x9016, 0x7d => 0x901b, 0x7e => 0x9014, 0xa1 => 0x90e8, 0xa2 => 0x90ed, 0xa3 => 0x90fd, 0xa4 => 0x9157, 0xa5 => 0x91ce, 0xa6 => 0x91f5, 0xa7 => 0x91e6, 0xa8 => 0x91e3, 0xa9 => 0x91e7, 0xaa => 0x91ed, 0xab => 0x91e9, 0xac => 0x9589, 0xad => 0x966a, 0xae => 0x9675, 0xaf => 0x9673, 0xb0 => 0x9678, 0xb1 => 0x9670, 0xb2 => 0x9674, 0xb3 => 0x9676, 0xb4 => 0x9677, 0xb5 => 0x966c, 0xb6 => 0x96c0, 0xb7 => 0x96ea, 0xb8 => 0x96e9, 0xb9 => 0x7ae0, 0xba => 0x7adf, 0xbb => 0x9802, 0xbc => 0x9803, 0xbd => 0x9b5a, 0xbe => 0x9ce5, 0xbf => 0x9e75, 0xc0 => 0x9e7f, 0xc1 => 0x9ea5, 0xc2 => 0x9ebb, 0xc3 => 0x50a2, 0xc4 => 0x508d, 0xc5 => 0x5085, 0xc6 => 0x5099, 0xc7 => 0x5091, 0xc8 => 0x5080, 0xc9 => 0x5096, 0xca => 0x5098, 0xcb => 0x509a, 0xcc => 0x6700, 0xcd => 0x51f1, 0xce => 0x5272, 0xcf => 0x5274, 0xd0 => 0x5275, 0xd1 => 0x5269, 0xd2 => 0x52de, 0xd3 => 0x52dd, 0xd4 => 0x52db, 0xd5 => 0x535a, 0xd6 => 0x53a5, 0xd7 => 0x557b, 0xd8 => 0x5580, 0xd9 => 0x55a7, 0xda => 0x557c, 0xdb => 0x558a, 0xdc => 0x559d, 0xdd => 0x5598, 0xde => 0x5582, 0xdf => 0x559c, 0xe0 => 0x55aa, 0xe1 => 0x5594, 0xe2 => 0x5587, 0xe3 => 0x558b, 0xe4 => 0x5583, 0xe5 => 0x55b3, 0xe6 => 0x55ae, 0xe7 => 0x559f, 0xe8 => 0x553e, 0xe9 => 0x55b2, 0xea => 0x559a, 0xeb => 0x55bb, 0xec => 0x55ac, 0xed => 0x55b1, 0xee => 0x557e, 0xef => 0x5589, 0xf0 => 0x55ab, 0xf1 => 0x5599, 0xf2 => 0x570d, 0xf3 => 0x582f, 0xf4 => 0x582a, 0xf5 => 0x5834, 0xf6 => 0x5824, 0xf7 => 0x5830, 0xf8 => 0x5831, 0xf9 => 0x5821, 0xfa => 0x581d, 0xfb => 0x5820, 0xfc => 0x58f9, 0xfd => 0x58fa, 0xfe => 0x5960, }, 0xb4 => { 0x40 => 0x5a77, 0x41 => 0x5a9a, 0x42 => 0x5a7f, 0x43 => 0x5a92, 0x44 => 0x5a9b, 0x45 => 0x5aa7, 0x46 => 0x5b73, 0x47 => 0x5b71, 0x48 => 0x5bd2, 0x49 => 0x5bcc, 0x4a => 0x5bd3, 0x4b => 0x5bd0, 0x4c => 0x5c0a, 0x4d => 0x5c0b, 0x4e => 0x5c31, 0x4f => 0x5d4c, 0x50 => 0x5d50, 0x51 => 0x5d34, 0x52 => 0x5d47, 0x53 => 0x5dfd, 0x54 => 0x5e45, 0x55 => 0x5e3d, 0x56 => 0x5e40, 0x57 => 0x5e43, 0x58 => 0x5e7e, 0x59 => 0x5eca, 0x5a => 0x5ec1, 0x5b => 0x5ec2, 0x5c => 0x5ec4, 0x5d => 0x5f3c, 0x5e => 0x5f6d, 0x5f => 0x5fa9, 0x60 => 0x5faa, 0x61 => 0x5fa8, 0x62 => 0x60d1, 0x63 => 0x60e1, 0x64 => 0x60b2, 0x65 => 0x60b6, 0x66 => 0x60e0, 0x67 => 0x611c, 0x68 => 0x6123, 0x69 => 0x60fa, 0x6a => 0x6115, 0x6b => 0x60f0, 0x6c => 0x60fb, 0x6d => 0x60f4, 0x6e => 0x6168, 0x6f => 0x60f1, 0x70 => 0x610e, 0x71 => 0x60f6, 0x72 => 0x6109, 0x73 => 0x6100, 0x74 => 0x6112, 0x75 => 0x621f, 0x76 => 0x6249, 0x77 => 0x63a3, 0x78 => 0x638c, 0x79 => 0x63cf, 0x7a => 0x63c0, 0x7b => 0x63e9, 0x7c => 0x63c9, 0x7d => 0x63c6, 0x7e => 0x63cd, 0xa1 => 0x63d2, 0xa2 => 0x63e3, 0xa3 => 0x63d0, 0xa4 => 0x63e1, 0xa5 => 0x63d6, 0xa6 => 0x63ed, 0xa7 => 0x63ee, 0xa8 => 0x6376, 0xa9 => 0x63f4, 0xaa => 0x63ea, 0xab => 0x63db, 0xac => 0x6452, 0xad => 0x63da, 0xae => 0x63f9, 0xaf => 0x655e, 0xb0 => 0x6566, 0xb1 => 0x6562, 0xb2 => 0x6563, 0xb3 => 0x6591, 0xb4 => 0x6590, 0xb5 => 0x65af, 0xb6 => 0x666e, 0xb7 => 0x6670, 0xb8 => 0x6674, 0xb9 => 0x6676, 0xba => 0x666f, 0xbb => 0x6691, 0xbc => 0x667a, 0xbd => 0x667e, 0xbe => 0x6677, 0xbf => 0x66fe, 0xc0 => 0x66ff, 0xc1 => 0x671f, 0xc2 => 0x671d, 0xc3 => 0x68fa, 0xc4 => 0x68d5, 0xc5 => 0x68e0, 0xc6 => 0x68d8, 0xc7 => 0x68d7, 0xc8 => 0x6905, 0xc9 => 0x68df, 0xca => 0x68f5, 0xcb => 0x68ee, 0xcc => 0x68e7, 0xcd => 0x68f9, 0xce => 0x68d2, 0xcf => 0x68f2, 0xd0 => 0x68e3, 0xd1 => 0x68cb, 0xd2 => 0x68cd, 0xd3 => 0x690d, 0xd4 => 0x6912, 0xd5 => 0x690e, 0xd6 => 0x68c9, 0xd7 => 0x68da, 0xd8 => 0x696e, 0xd9 => 0x68fb, 0xda => 0x6b3e, 0xdb => 0x6b3a, 0xdc => 0x6b3d, 0xdd => 0x6b98, 0xde => 0x6b96, 0xdf => 0x6bbc, 0xe0 => 0x6bef, 0xe1 => 0x6c2e, 0xe2 => 0x6c2f, 0xe3 => 0x6c2c, 0xe4 => 0x6e2f, 0xe5 => 0x6e38, 0xe6 => 0x6e54, 0xe7 => 0x6e21, 0xe8 => 0x6e32, 0xe9 => 0x6e67, 0xea => 0x6e4a, 0xeb => 0x6e20, 0xec => 0x6e25, 0xed => 0x6e23, 0xee => 0x6e1b, 0xef => 0x6e5b, 0xf0 => 0x6e58, 0xf1 => 0x6e24, 0xf2 => 0x6e56, 0xf3 => 0x6e6e, 0xf4 => 0x6e2d, 0xf5 => 0x6e26, 0xf6 => 0x6e6f, 0xf7 => 0x6e34, 0xf8 => 0x6e4d, 0xf9 => 0x6e3a, 0xfa => 0x6e2c, 0xfb => 0x6e43, 0xfc => 0x6e1d, 0xfd => 0x6e3e, 0xfe => 0x6ecb, }, 0xb5 => { 0x40 => 0x6e89, 0x41 => 0x6e19, 0x42 => 0x6e4e, 0x43 => 0x6e63, 0x44 => 0x6e44, 0x45 => 0x6e72, 0x46 => 0x6e69, 0x47 => 0x6e5f, 0x48 => 0x7119, 0x49 => 0x711a, 0x4a => 0x7126, 0x4b => 0x7130, 0x4c => 0x7121, 0x4d => 0x7136, 0x4e => 0x716e, 0x4f => 0x711c, 0x50 => 0x724c, 0x51 => 0x7284, 0x52 => 0x7280, 0x53 => 0x7336, 0x54 => 0x7325, 0x55 => 0x7334, 0x56 => 0x7329, 0x57 => 0x743a, 0x58 => 0x742a, 0x59 => 0x7433, 0x5a => 0x7422, 0x5b => 0x7425, 0x5c => 0x7435, 0x5d => 0x7436, 0x5e => 0x7434, 0x5f => 0x742f, 0x60 => 0x741b, 0x61 => 0x7426, 0x62 => 0x7428, 0x63 => 0x7525, 0x64 => 0x7526, 0x65 => 0x756b, 0x66 => 0x756a, 0x67 => 0x75e2, 0x68 => 0x75db, 0x69 => 0x75e3, 0x6a => 0x75d9, 0x6b => 0x75d8, 0x6c => 0x75de, 0x6d => 0x75e0, 0x6e => 0x767b, 0x6f => 0x767c, 0x70 => 0x7696, 0x71 => 0x7693, 0x72 => 0x76b4, 0x73 => 0x76dc, 0x74 => 0x774f, 0x75 => 0x77ed, 0x76 => 0x785d, 0x77 => 0x786c, 0x78 => 0x786f, 0x79 => 0x7a0d, 0x7a => 0x7a08, 0x7b => 0x7a0b, 0x7c => 0x7a05, 0x7d => 0x7a00, 0x7e => 0x7a98, 0xa1 => 0x7a97, 0xa2 => 0x7a96, 0xa3 => 0x7ae5, 0xa4 => 0x7ae3, 0xa5 => 0x7b49, 0xa6 => 0x7b56, 0xa7 => 0x7b46, 0xa8 => 0x7b50, 0xa9 => 0x7b52, 0xaa => 0x7b54, 0xab => 0x7b4d, 0xac => 0x7b4b, 0xad => 0x7b4f, 0xae => 0x7b51, 0xaf => 0x7c9f, 0xb0 => 0x7ca5, 0xb1 => 0x7d5e, 0xb2 => 0x7d50, 0xb3 => 0x7d68, 0xb4 => 0x7d55, 0xb5 => 0x7d2b, 0xb6 => 0x7d6e, 0xb7 => 0x7d72, 0xb8 => 0x7d61, 0xb9 => 0x7d66, 0xba => 0x7d62, 0xbb => 0x7d70, 0xbc => 0x7d73, 0xbd => 0x5584, 0xbe => 0x7fd4, 0xbf => 0x7fd5, 0xc0 => 0x800b, 0xc1 => 0x8052, 0xc2 => 0x8085, 0xc3 => 0x8155, 0xc4 => 0x8154, 0xc5 => 0x814b, 0xc6 => 0x8151, 0xc7 => 0x814e, 0xc8 => 0x8139, 0xc9 => 0x8146, 0xca => 0x813e, 0xcb => 0x814c, 0xcc => 0x8153, 0xcd => 0x8174, 0xce => 0x8212, 0xcf => 0x821c, 0xd0 => 0x83e9, 0xd1 => 0x8403, 0xd2 => 0x83f8, 0xd3 => 0x840d, 0xd4 => 0x83e0, 0xd5 => 0x83c5, 0xd6 => 0x840b, 0xd7 => 0x83c1, 0xd8 => 0x83ef, 0xd9 => 0x83f1, 0xda => 0x83f4, 0xdb => 0x8457, 0xdc => 0x840a, 0xdd => 0x83f0, 0xde => 0x840c, 0xdf => 0x83cc, 0xe0 => 0x83fd, 0xe1 => 0x83f2, 0xe2 => 0x83ca, 0xe3 => 0x8438, 0xe4 => 0x840e, 0xe5 => 0x8404, 0xe6 => 0x83dc, 0xe7 => 0x8407, 0xe8 => 0x83d4, 0xe9 => 0x83df, 0xea => 0x865b, 0xeb => 0x86df, 0xec => 0x86d9, 0xed => 0x86ed, 0xee => 0x86d4, 0xef => 0x86db, 0xf0 => 0x86e4, 0xf1 => 0x86d0, 0xf2 => 0x86de, 0xf3 => 0x8857, 0xf4 => 0x88c1, 0xf5 => 0x88c2, 0xf6 => 0x88b1, 0xf7 => 0x8983, 0xf8 => 0x8996, 0xf9 => 0x8a3b, 0xfa => 0x8a60, 0xfb => 0x8a55, 0xfc => 0x8a5e, 0xfd => 0x8a3c, 0xfe => 0x8a41, }, 0xb6 => { 0x40 => 0x8a54, 0x41 => 0x8a5b, 0x42 => 0x8a50, 0x43 => 0x8a46, 0x44 => 0x8a34, 0x45 => 0x8a3a, 0x46 => 0x8a36, 0x47 => 0x8a56, 0x48 => 0x8c61, 0x49 => 0x8c82, 0x4a => 0x8caf, 0x4b => 0x8cbc, 0x4c => 0x8cb3, 0x4d => 0x8cbd, 0x4e => 0x8cc1, 0x4f => 0x8cbb, 0x50 => 0x8cc0, 0x51 => 0x8cb4, 0x52 => 0x8cb7, 0x53 => 0x8cb6, 0x54 => 0x8cbf, 0x55 => 0x8cb8, 0x56 => 0x8d8a, 0x57 => 0x8d85, 0x58 => 0x8d81, 0x59 => 0x8dce, 0x5a => 0x8ddd, 0x5b => 0x8dcb, 0x5c => 0x8dda, 0x5d => 0x8dd1, 0x5e => 0x8dcc, 0x5f => 0x8ddb, 0x60 => 0x8dc6, 0x61 => 0x8efb, 0x62 => 0x8ef8, 0x63 => 0x8efc, 0x64 => 0x8f9c, 0x65 => 0x902e, 0x66 => 0x9035, 0x67 => 0x9031, 0x68 => 0x9038, 0x69 => 0x9032, 0x6a => 0x9036, 0x6b => 0x9102, 0x6c => 0x90f5, 0x6d => 0x9109, 0x6e => 0x90fe, 0x6f => 0x9163, 0x70 => 0x9165, 0x71 => 0x91cf, 0x72 => 0x9214, 0x73 => 0x9215, 0x74 => 0x9223, 0x75 => 0x9209, 0x76 => 0x921e, 0x77 => 0x920d, 0x78 => 0x9210, 0x79 => 0x9207, 0x7a => 0x9211, 0x7b => 0x9594, 0x7c => 0x958f, 0x7d => 0x958b, 0x7e => 0x9591, 0xa1 => 0x9593, 0xa2 => 0x9592, 0xa3 => 0x958e, 0xa4 => 0x968a, 0xa5 => 0x968e, 0xa6 => 0x968b, 0xa7 => 0x967d, 0xa8 => 0x9685, 0xa9 => 0x9686, 0xaa => 0x968d, 0xab => 0x9672, 0xac => 0x9684, 0xad => 0x96c1, 0xae => 0x96c5, 0xaf => 0x96c4, 0xb0 => 0x96c6, 0xb1 => 0x96c7, 0xb2 => 0x96ef, 0xb3 => 0x96f2, 0xb4 => 0x97cc, 0xb5 => 0x9805, 0xb6 => 0x9806, 0xb7 => 0x9808, 0xb8 => 0x98e7, 0xb9 => 0x98ea, 0xba => 0x98ef, 0xbb => 0x98e9, 0xbc => 0x98f2, 0xbd => 0x98ed, 0xbe => 0x99ae, 0xbf => 0x99ad, 0xc0 => 0x9ec3, 0xc1 => 0x9ecd, 0xc2 => 0x9ed1, 0xc3 => 0x4e82, 0xc4 => 0x50ad, 0xc5 => 0x50b5, 0xc6 => 0x50b2, 0xc7 => 0x50b3, 0xc8 => 0x50c5, 0xc9 => 0x50be, 0xca => 0x50ac, 0xcb => 0x50b7, 0xcc => 0x50bb, 0xcd => 0x50af, 0xce => 0x50c7, 0xcf => 0x527f, 0xd0 => 0x5277, 0xd1 => 0x527d, 0xd2 => 0x52df, 0xd3 => 0x52e6, 0xd4 => 0x52e4, 0xd5 => 0x52e2, 0xd6 => 0x52e3, 0xd7 => 0x532f, 0xd8 => 0x55df, 0xd9 => 0x55e8, 0xda => 0x55d3, 0xdb => 0x55e6, 0xdc => 0x55ce, 0xdd => 0x55dc, 0xde => 0x55c7, 0xdf => 0x55d1, 0xe0 => 0x55e3, 0xe1 => 0x55e4, 0xe2 => 0x55ef, 0xe3 => 0x55da, 0xe4 => 0x55e1, 0xe5 => 0x55c5, 0xe6 => 0x55c6, 0xe7 => 0x55e5, 0xe8 => 0x55c9, 0xe9 => 0x5712, 0xea => 0x5713, 0xeb => 0x585e, 0xec => 0x5851, 0xed => 0x5858, 0xee => 0x5857, 0xef => 0x585a, 0xf0 => 0x5854, 0xf1 => 0x586b, 0xf2 => 0x584c, 0xf3 => 0x586d, 0xf4 => 0x584a, 0xf5 => 0x5862, 0xf6 => 0x5852, 0xf7 => 0x584b, 0xf8 => 0x5967, 0xf9 => 0x5ac1, 0xfa => 0x5ac9, 0xfb => 0x5acc, 0xfc => 0x5abe, 0xfd => 0x5abd, 0xfe => 0x5abc, }, 0xb7 => { 0x40 => 0x5ab3, 0x41 => 0x5ac2, 0x42 => 0x5ab2, 0x43 => 0x5d69, 0x44 => 0x5d6f, 0x45 => 0x5e4c, 0x46 => 0x5e79, 0x47 => 0x5ec9, 0x48 => 0x5ec8, 0x49 => 0x5f12, 0x4a => 0x5f59, 0x4b => 0x5fac, 0x4c => 0x5fae, 0x4d => 0x611a, 0x4e => 0x610f, 0x4f => 0x6148, 0x50 => 0x611f, 0x51 => 0x60f3, 0x52 => 0x611b, 0x53 => 0x60f9, 0x54 => 0x6101, 0x55 => 0x6108, 0x56 => 0x614e, 0x57 => 0x614c, 0x58 => 0x6144, 0x59 => 0x614d, 0x5a => 0x613e, 0x5b => 0x6134, 0x5c => 0x6127, 0x5d => 0x610d, 0x5e => 0x6106, 0x5f => 0x6137, 0x60 => 0x6221, 0x61 => 0x6222, 0x62 => 0x6413, 0x63 => 0x643e, 0x64 => 0x641e, 0x65 => 0x642a, 0x66 => 0x642d, 0x67 => 0x643d, 0x68 => 0x642c, 0x69 => 0x640f, 0x6a => 0x641c, 0x6b => 0x6414, 0x6c => 0x640d, 0x6d => 0x6436, 0x6e => 0x6416, 0x6f => 0x6417, 0x70 => 0x6406, 0x71 => 0x656c, 0x72 => 0x659f, 0x73 => 0x65b0, 0x74 => 0x6697, 0x75 => 0x6689, 0x76 => 0x6687, 0x77 => 0x6688, 0x78 => 0x6696, 0x79 => 0x6684, 0x7a => 0x6698, 0x7b => 0x668d, 0x7c => 0x6703, 0x7d => 0x6994, 0x7e => 0x696d, 0xa1 => 0x695a, 0xa2 => 0x6977, 0xa3 => 0x6960, 0xa4 => 0x6954, 0xa5 => 0x6975, 0xa6 => 0x6930, 0xa7 => 0x6982, 0xa8 => 0x694a, 0xa9 => 0x6968, 0xaa => 0x696b, 0xab => 0x695e, 0xac => 0x6953, 0xad => 0x6979, 0xae => 0x6986, 0xaf => 0x695d, 0xb0 => 0x6963, 0xb1 => 0x695b, 0xb2 => 0x6b47, 0xb3 => 0x6b72, 0xb4 => 0x6bc0, 0xb5 => 0x6bbf, 0xb6 => 0x6bd3, 0xb7 => 0x6bfd, 0xb8 => 0x6ea2, 0xb9 => 0x6eaf, 0xba => 0x6ed3, 0xbb => 0x6eb6, 0xbc => 0x6ec2, 0xbd => 0x6e90, 0xbe => 0x6e9d, 0xbf => 0x6ec7, 0xc0 => 0x6ec5, 0xc1 => 0x6ea5, 0xc2 => 0x6e98, 0xc3 => 0x6ebc, 0xc4 => 0x6eba, 0xc5 => 0x6eab, 0xc6 => 0x6ed1, 0xc7 => 0x6e96, 0xc8 => 0x6e9c, 0xc9 => 0x6ec4, 0xca => 0x6ed4, 0xcb => 0x6eaa, 0xcc => 0x6ea7, 0xcd => 0x6eb4, 0xce => 0x714e, 0xcf => 0x7159, 0xd0 => 0x7169, 0xd1 => 0x7164, 0xd2 => 0x7149, 0xd3 => 0x7167, 0xd4 => 0x715c, 0xd5 => 0x716c, 0xd6 => 0x7166, 0xd7 => 0x714c, 0xd8 => 0x7165, 0xd9 => 0x715e, 0xda => 0x7146, 0xdb => 0x7168, 0xdc => 0x7156, 0xdd => 0x723a, 0xde => 0x7252, 0xdf => 0x7337, 0xe0 => 0x7345, 0xe1 => 0x733f, 0xe2 => 0x733e, 0xe3 => 0x746f, 0xe4 => 0x745a, 0xe5 => 0x7455, 0xe6 => 0x745f, 0xe7 => 0x745e, 0xe8 => 0x7441, 0xe9 => 0x743f, 0xea => 0x7459, 0xeb => 0x745b, 0xec => 0x745c, 0xed => 0x7576, 0xee => 0x7578, 0xef => 0x7600, 0xf0 => 0x75f0, 0xf1 => 0x7601, 0xf2 => 0x75f2, 0xf3 => 0x75f1, 0xf4 => 0x75fa, 0xf5 => 0x75ff, 0xf6 => 0x75f4, 0xf7 => 0x75f3, 0xf8 => 0x76de, 0xf9 => 0x76df, 0xfa => 0x775b, 0xfb => 0x776b, 0xfc => 0x7766, 0xfd => 0x775e, 0xfe => 0x7763, }, 0xb8 => { 0x40 => 0x7779, 0x41 => 0x776a, 0x42 => 0x776c, 0x43 => 0x775c, 0x44 => 0x7765, 0x45 => 0x7768, 0x46 => 0x7762, 0x47 => 0x77ee, 0x48 => 0x788e, 0x49 => 0x78b0, 0x4a => 0x7897, 0x4b => 0x7898, 0x4c => 0x788c, 0x4d => 0x7889, 0x4e => 0x787c, 0x4f => 0x7891, 0x50 => 0x7893, 0x51 => 0x787f, 0x52 => 0x797a, 0x53 => 0x797f, 0x54 => 0x7981, 0x55 => 0x842c, 0x56 => 0x79bd, 0x57 => 0x7a1c, 0x58 => 0x7a1a, 0x59 => 0x7a20, 0x5a => 0x7a14, 0x5b => 0x7a1f, 0x5c => 0x7a1e, 0x5d => 0x7a9f, 0x5e => 0x7aa0, 0x5f => 0x7b77, 0x60 => 0x7bc0, 0x61 => 0x7b60, 0x62 => 0x7b6e, 0x63 => 0x7b67, 0x64 => 0x7cb1, 0x65 => 0x7cb3, 0x66 => 0x7cb5, 0x67 => 0x7d93, 0x68 => 0x7d79, 0x69 => 0x7d91, 0x6a => 0x7d81, 0x6b => 0x7d8f, 0x6c => 0x7d5b, 0x6d => 0x7f6e, 0x6e => 0x7f69, 0x6f => 0x7f6a, 0x70 => 0x7f72, 0x71 => 0x7fa9, 0x72 => 0x7fa8, 0x73 => 0x7fa4, 0x74 => 0x8056, 0x75 => 0x8058, 0x76 => 0x8086, 0x77 => 0x8084, 0x78 => 0x8171, 0x79 => 0x8170, 0x7a => 0x8178, 0x7b => 0x8165, 0x7c => 0x816e, 0x7d => 0x8173, 0x7e => 0x816b, 0xa1 => 0x8179, 0xa2 => 0x817a, 0xa3 => 0x8166, 0xa4 => 0x8205, 0xa5 => 0x8247, 0xa6 => 0x8482, 0xa7 => 0x8477, 0xa8 => 0x843d, 0xa9 => 0x8431, 0xaa => 0x8475, 0xab => 0x8466, 0xac => 0x846b, 0xad => 0x8449, 0xae => 0x846c, 0xaf => 0x845b, 0xb0 => 0x843c, 0xb1 => 0x8435, 0xb2 => 0x8461, 0xb3 => 0x8463, 0xb4 => 0x8469, 0xb5 => 0x846d, 0xb6 => 0x8446, 0xb7 => 0x865e, 0xb8 => 0x865c, 0xb9 => 0x865f, 0xba => 0x86f9, 0xbb => 0x8713, 0xbc => 0x8708, 0xbd => 0x8707, 0xbe => 0x8700, 0xbf => 0x86fe, 0xc0 => 0x86fb, 0xc1 => 0x8702, 0xc2 => 0x8703, 0xc3 => 0x8706, 0xc4 => 0x870a, 0xc5 => 0x8859, 0xc6 => 0x88df, 0xc7 => 0x88d4, 0xc8 => 0x88d9, 0xc9 => 0x88dc, 0xca => 0x88d8, 0xcb => 0x88dd, 0xcc => 0x88e1, 0xcd => 0x88ca, 0xce => 0x88d5, 0xcf => 0x88d2, 0xd0 => 0x899c, 0xd1 => 0x89e3, 0xd2 => 0x8a6b, 0xd3 => 0x8a72, 0xd4 => 0x8a73, 0xd5 => 0x8a66, 0xd6 => 0x8a69, 0xd7 => 0x8a70, 0xd8 => 0x8a87, 0xd9 => 0x8a7c, 0xda => 0x8a63, 0xdb => 0x8aa0, 0xdc => 0x8a71, 0xdd => 0x8a85, 0xde => 0x8a6d, 0xdf => 0x8a62, 0xe0 => 0x8a6e, 0xe1 => 0x8a6c, 0xe2 => 0x8a79, 0xe3 => 0x8a7b, 0xe4 => 0x8a3e, 0xe5 => 0x8a68, 0xe6 => 0x8c62, 0xe7 => 0x8c8a, 0xe8 => 0x8c89, 0xe9 => 0x8cca, 0xea => 0x8cc7, 0xeb => 0x8cc8, 0xec => 0x8cc4, 0xed => 0x8cb2, 0xee => 0x8cc3, 0xef => 0x8cc2, 0xf0 => 0x8cc5, 0xf1 => 0x8de1, 0xf2 => 0x8ddf, 0xf3 => 0x8de8, 0xf4 => 0x8def, 0xf5 => 0x8df3, 0xf6 => 0x8dfa, 0xf7 => 0x8dea, 0xf8 => 0x8de4, 0xf9 => 0x8de6, 0xfa => 0x8eb2, 0xfb => 0x8f03, 0xfc => 0x8f09, 0xfd => 0x8efe, 0xfe => 0x8f0a, }, 0xb9 => { 0x40 => 0x8f9f, 0x41 => 0x8fb2, 0x42 => 0x904b, 0x43 => 0x904a, 0x44 => 0x9053, 0x45 => 0x9042, 0x46 => 0x9054, 0x47 => 0x903c, 0x48 => 0x9055, 0x49 => 0x9050, 0x4a => 0x9047, 0x4b => 0x904f, 0x4c => 0x904e, 0x4d => 0x904d, 0x4e => 0x9051, 0x4f => 0x903e, 0x50 => 0x9041, 0x51 => 0x9112, 0x52 => 0x9117, 0x53 => 0x916c, 0x54 => 0x916a, 0x55 => 0x9169, 0x56 => 0x91c9, 0x57 => 0x9237, 0x58 => 0x9257, 0x59 => 0x9238, 0x5a => 0x923d, 0x5b => 0x9240, 0x5c => 0x923e, 0x5d => 0x925b, 0x5e => 0x924b, 0x5f => 0x9264, 0x60 => 0x9251, 0x61 => 0x9234, 0x62 => 0x9249, 0x63 => 0x924d, 0x64 => 0x9245, 0x65 => 0x9239, 0x66 => 0x923f, 0x67 => 0x925a, 0x68 => 0x9598, 0x69 => 0x9698, 0x6a => 0x9694, 0x6b => 0x9695, 0x6c => 0x96cd, 0x6d => 0x96cb, 0x6e => 0x96c9, 0x6f => 0x96ca, 0x70 => 0x96f7, 0x71 => 0x96fb, 0x72 => 0x96f9, 0x73 => 0x96f6, 0x74 => 0x9756, 0x75 => 0x9774, 0x76 => 0x9776, 0x77 => 0x9810, 0x78 => 0x9811, 0x79 => 0x9813, 0x7a => 0x980a, 0x7b => 0x9812, 0x7c => 0x980c, 0x7d => 0x98fc, 0x7e => 0x98f4, 0xa1 => 0x98fd, 0xa2 => 0x98fe, 0xa3 => 0x99b3, 0xa4 => 0x99b1, 0xa5 => 0x99b4, 0xa6 => 0x9ae1, 0xa7 => 0x9ce9, 0xa8 => 0x9e82, 0xa9 => 0x9f0e, 0xaa => 0x9f13, 0xab => 0x9f20, 0xac => 0x50e7, 0xad => 0x50ee, 0xae => 0x50e5, 0xaf => 0x50d6, 0xb0 => 0x50ed, 0xb1 => 0x50da, 0xb2 => 0x50d5, 0xb3 => 0x50cf, 0xb4 => 0x50d1, 0xb5 => 0x50f1, 0xb6 => 0x50ce, 0xb7 => 0x50e9, 0xb8 => 0x5162, 0xb9 => 0x51f3, 0xba => 0x5283, 0xbb => 0x5282, 0xbc => 0x5331, 0xbd => 0x53ad, 0xbe => 0x55fe, 0xbf => 0x5600, 0xc0 => 0x561b, 0xc1 => 0x5617, 0xc2 => 0x55fd, 0xc3 => 0x5614, 0xc4 => 0x5606, 0xc5 => 0x5609, 0xc6 => 0x560d, 0xc7 => 0x560e, 0xc8 => 0x55f7, 0xc9 => 0x5616, 0xca => 0x561f, 0xcb => 0x5608, 0xcc => 0x5610, 0xcd => 0x55f6, 0xce => 0x5718, 0xcf => 0x5716, 0xd0 => 0x5875, 0xd1 => 0x587e, 0xd2 => 0x5883, 0xd3 => 0x5893, 0xd4 => 0x588a, 0xd5 => 0x5879, 0xd6 => 0x5885, 0xd7 => 0x587d, 0xd8 => 0x58fd, 0xd9 => 0x5925, 0xda => 0x5922, 0xdb => 0x5924, 0xdc => 0x596a, 0xdd => 0x5969, 0xde => 0x5ae1, 0xdf => 0x5ae6, 0xe0 => 0x5ae9, 0xe1 => 0x5ad7, 0xe2 => 0x5ad6, 0xe3 => 0x5ad8, 0xe4 => 0x5ae3, 0xe5 => 0x5b75, 0xe6 => 0x5bde, 0xe7 => 0x5be7, 0xe8 => 0x5be1, 0xe9 => 0x5be5, 0xea => 0x5be6, 0xeb => 0x5be8, 0xec => 0x5be2, 0xed => 0x5be4, 0xee => 0x5bdf, 0xef => 0x5c0d, 0xf0 => 0x5c62, 0xf1 => 0x5d84, 0xf2 => 0x5d87, 0xf3 => 0x5e5b, 0xf4 => 0x5e63, 0xf5 => 0x5e55, 0xf6 => 0x5e57, 0xf7 => 0x5e54, 0xf8 => 0x5ed3, 0xf9 => 0x5ed6, 0xfa => 0x5f0a, 0xfb => 0x5f46, 0xfc => 0x5f70, 0xfd => 0x5fb9, 0xfe => 0x6147, }, 0xba => { 0x40 => 0x613f, 0x41 => 0x614b, 0x42 => 0x6177, 0x43 => 0x6162, 0x44 => 0x6163, 0x45 => 0x615f, 0x46 => 0x615a, 0x47 => 0x6158, 0x48 => 0x6175, 0x49 => 0x622a, 0x4a => 0x6487, 0x4b => 0x6458, 0x4c => 0x6454, 0x4d => 0x64a4, 0x4e => 0x6478, 0x4f => 0x645f, 0x50 => 0x647a, 0x51 => 0x6451, 0x52 => 0x6467, 0x53 => 0x6434, 0x54 => 0x646d, 0x55 => 0x647b, 0x56 => 0x6572, 0x57 => 0x65a1, 0x58 => 0x65d7, 0x59 => 0x65d6, 0x5a => 0x66a2, 0x5b => 0x66a8, 0x5c => 0x669d, 0x5d => 0x699c, 0x5e => 0x69a8, 0x5f => 0x6995, 0x60 => 0x69c1, 0x61 => 0x69ae, 0x62 => 0x69d3, 0x63 => 0x69cb, 0x64 => 0x699b, 0x65 => 0x69b7, 0x66 => 0x69bb, 0x67 => 0x69ab, 0x68 => 0x69b4, 0x69 => 0x69d0, 0x6a => 0x69cd, 0x6b => 0x69ad, 0x6c => 0x69cc, 0x6d => 0x69a6, 0x6e => 0x69c3, 0x6f => 0x69a3, 0x70 => 0x6b49, 0x71 => 0x6b4c, 0x72 => 0x6c33, 0x73 => 0x6f33, 0x74 => 0x6f14, 0x75 => 0x6efe, 0x76 => 0x6f13, 0x77 => 0x6ef4, 0x78 => 0x6f29, 0x79 => 0x6f3e, 0x7a => 0x6f20, 0x7b => 0x6f2c, 0x7c => 0x6f0f, 0x7d => 0x6f02, 0x7e => 0x6f22, 0xa1 => 0x6eff, 0xa2 => 0x6eef, 0xa3 => 0x6f06, 0xa4 => 0x6f31, 0xa5 => 0x6f38, 0xa6 => 0x6f32, 0xa7 => 0x6f23, 0xa8 => 0x6f15, 0xa9 => 0x6f2b, 0xaa => 0x6f2f, 0xab => 0x6f88, 0xac => 0x6f2a, 0xad => 0x6eec, 0xae => 0x6f01, 0xaf => 0x6ef2, 0xb0 => 0x6ecc, 0xb1 => 0x6ef7, 0xb2 => 0x7194, 0xb3 => 0x7199, 0xb4 => 0x717d, 0xb5 => 0x718a, 0xb6 => 0x7184, 0xb7 => 0x7192, 0xb8 => 0x723e, 0xb9 => 0x7292, 0xba => 0x7296, 0xbb => 0x7344, 0xbc => 0x7350, 0xbd => 0x7464, 0xbe => 0x7463, 0xbf => 0x746a, 0xc0 => 0x7470, 0xc1 => 0x746d, 0xc2 => 0x7504, 0xc3 => 0x7591, 0xc4 => 0x7627, 0xc5 => 0x760d, 0xc6 => 0x760b, 0xc7 => 0x7609, 0xc8 => 0x7613, 0xc9 => 0x76e1, 0xca => 0x76e3, 0xcb => 0x7784, 0xcc => 0x777d, 0xcd => 0x777f, 0xce => 0x7761, 0xcf => 0x78c1, 0xd0 => 0x789f, 0xd1 => 0x78a7, 0xd2 => 0x78b3, 0xd3 => 0x78a9, 0xd4 => 0x78a3, 0xd5 => 0x798e, 0xd6 => 0x798f, 0xd7 => 0x798d, 0xd8 => 0x7a2e, 0xd9 => 0x7a31, 0xda => 0x7aaa, 0xdb => 0x7aa9, 0xdc => 0x7aed, 0xdd => 0x7aef, 0xde => 0x7ba1, 0xdf => 0x7b95, 0xe0 => 0x7b8b, 0xe1 => 0x7b75, 0xe2 => 0x7b97, 0xe3 => 0x7b9d, 0xe4 => 0x7b94, 0xe5 => 0x7b8f, 0xe6 => 0x7bb8, 0xe7 => 0x7b87, 0xe8 => 0x7b84, 0xe9 => 0x7cb9, 0xea => 0x7cbd, 0xeb => 0x7cbe, 0xec => 0x7dbb, 0xed => 0x7db0, 0xee => 0x7d9c, 0xef => 0x7dbd, 0xf0 => 0x7dbe, 0xf1 => 0x7da0, 0xf2 => 0x7dca, 0xf3 => 0x7db4, 0xf4 => 0x7db2, 0xf5 => 0x7db1, 0xf6 => 0x7dba, 0xf7 => 0x7da2, 0xf8 => 0x7dbf, 0xf9 => 0x7db5, 0xfa => 0x7db8, 0xfb => 0x7dad, 0xfc => 0x7dd2, 0xfd => 0x7dc7, 0xfe => 0x7dac, }, 0xbb => { 0x40 => 0x7f70, 0x41 => 0x7fe0, 0x42 => 0x7fe1, 0x43 => 0x7fdf, 0x44 => 0x805e, 0x45 => 0x805a, 0x46 => 0x8087, 0x47 => 0x8150, 0x48 => 0x8180, 0x49 => 0x818f, 0x4a => 0x8188, 0x4b => 0x818a, 0x4c => 0x817f, 0x4d => 0x8182, 0x4e => 0x81e7, 0x4f => 0x81fa, 0x50 => 0x8207, 0x51 => 0x8214, 0x52 => 0x821e, 0x53 => 0x824b, 0x54 => 0x84c9, 0x55 => 0x84bf, 0x56 => 0x84c6, 0x57 => 0x84c4, 0x58 => 0x8499, 0x59 => 0x849e, 0x5a => 0x84b2, 0x5b => 0x849c, 0x5c => 0x84cb, 0x5d => 0x84b8, 0x5e => 0x84c0, 0x5f => 0x84d3, 0x60 => 0x8490, 0x61 => 0x84bc, 0x62 => 0x84d1, 0x63 => 0x84ca, 0x64 => 0x873f, 0x65 => 0x871c, 0x66 => 0x873b, 0x67 => 0x8722, 0x68 => 0x8725, 0x69 => 0x8734, 0x6a => 0x8718, 0x6b => 0x8755, 0x6c => 0x8737, 0x6d => 0x8729, 0x6e => 0x88f3, 0x6f => 0x8902, 0x70 => 0x88f4, 0x71 => 0x88f9, 0x72 => 0x88f8, 0x73 => 0x88fd, 0x74 => 0x88e8, 0x75 => 0x891a, 0x76 => 0x88ef, 0x77 => 0x8aa6, 0x78 => 0x8a8c, 0x79 => 0x8a9e, 0x7a => 0x8aa3, 0x7b => 0x8a8d, 0x7c => 0x8aa1, 0x7d => 0x8a93, 0x7e => 0x8aa4, 0xa1 => 0x8aaa, 0xa2 => 0x8aa5, 0xa3 => 0x8aa8, 0xa4 => 0x8a98, 0xa5 => 0x8a91, 0xa6 => 0x8a9a, 0xa7 => 0x8aa7, 0xa8 => 0x8c6a, 0xa9 => 0x8c8d, 0xaa => 0x8c8c, 0xab => 0x8cd3, 0xac => 0x8cd1, 0xad => 0x8cd2, 0xae => 0x8d6b, 0xaf => 0x8d99, 0xb0 => 0x8d95, 0xb1 => 0x8dfc, 0xb2 => 0x8f14, 0xb3 => 0x8f12, 0xb4 => 0x8f15, 0xb5 => 0x8f13, 0xb6 => 0x8fa3, 0xb7 => 0x9060, 0xb8 => 0x9058, 0xb9 => 0x905c, 0xba => 0x9063, 0xbb => 0x9059, 0xbc => 0x905e, 0xbd => 0x9062, 0xbe => 0x905d, 0xbf => 0x905b, 0xc0 => 0x9119, 0xc1 => 0x9118, 0xc2 => 0x911e, 0xc3 => 0x9175, 0xc4 => 0x9178, 0xc5 => 0x9177, 0xc6 => 0x9174, 0xc7 => 0x9278, 0xc8 => 0x9280, 0xc9 => 0x9285, 0xca => 0x9298, 0xcb => 0x9296, 0xcc => 0x927b, 0xcd => 0x9293, 0xce => 0x929c, 0xcf => 0x92a8, 0xd0 => 0x927c, 0xd1 => 0x9291, 0xd2 => 0x95a1, 0xd3 => 0x95a8, 0xd4 => 0x95a9, 0xd5 => 0x95a3, 0xd6 => 0x95a5, 0xd7 => 0x95a4, 0xd8 => 0x9699, 0xd9 => 0x969c, 0xda => 0x969b, 0xdb => 0x96cc, 0xdc => 0x96d2, 0xdd => 0x9700, 0xde => 0x977c, 0xdf => 0x9785, 0xe0 => 0x97f6, 0xe1 => 0x9817, 0xe2 => 0x9818, 0xe3 => 0x98af, 0xe4 => 0x98b1, 0xe5 => 0x9903, 0xe6 => 0x9905, 0xe7 => 0x990c, 0xe8 => 0x9909, 0xe9 => 0x99c1, 0xea => 0x9aaf, 0xeb => 0x9ab0, 0xec => 0x9ae6, 0xed => 0x9b41, 0xee => 0x9b42, 0xef => 0x9cf4, 0xf0 => 0x9cf6, 0xf1 => 0x9cf3, 0xf2 => 0x9ebc, 0xf3 => 0x9f3b, 0xf4 => 0x9f4a, 0xf5 => 0x5104, 0xf6 => 0x5100, 0xf7 => 0x50fb, 0xf8 => 0x50f5, 0xf9 => 0x50f9, 0xfa => 0x5102, 0xfb => 0x5108, 0xfc => 0x5109, 0xfd => 0x5105, 0xfe => 0x51dc, }, 0xbc => { 0x40 => 0x5287, 0x41 => 0x5288, 0x42 => 0x5289, 0x43 => 0x528d, 0x44 => 0x528a, 0x45 => 0x52f0, 0x46 => 0x53b2, 0x47 => 0x562e, 0x48 => 0x563b, 0x49 => 0x5639, 0x4a => 0x5632, 0x4b => 0x563f, 0x4c => 0x5634, 0x4d => 0x5629, 0x4e => 0x5653, 0x4f => 0x564e, 0x50 => 0x5657, 0x51 => 0x5674, 0x52 => 0x5636, 0x53 => 0x562f, 0x54 => 0x5630, 0x55 => 0x5880, 0x56 => 0x589f, 0x57 => 0x589e, 0x58 => 0x58b3, 0x59 => 0x589c, 0x5a => 0x58ae, 0x5b => 0x58a9, 0x5c => 0x58a6, 0x5d => 0x596d, 0x5e => 0x5b09, 0x5f => 0x5afb, 0x60 => 0x5b0b, 0x61 => 0x5af5, 0x62 => 0x5b0c, 0x63 => 0x5b08, 0x64 => 0x5bee, 0x65 => 0x5bec, 0x66 => 0x5be9, 0x67 => 0x5beb, 0x68 => 0x5c64, 0x69 => 0x5c65, 0x6a => 0x5d9d, 0x6b => 0x5d94, 0x6c => 0x5e62, 0x6d => 0x5e5f, 0x6e => 0x5e61, 0x6f => 0x5ee2, 0x70 => 0x5eda, 0x71 => 0x5edf, 0x72 => 0x5edd, 0x73 => 0x5ee3, 0x74 => 0x5ee0, 0x75 => 0x5f48, 0x76 => 0x5f71, 0x77 => 0x5fb7, 0x78 => 0x5fb5, 0x79 => 0x6176, 0x7a => 0x6167, 0x7b => 0x616e, 0x7c => 0x615d, 0x7d => 0x6155, 0x7e => 0x6182, 0xa1 => 0x617c, 0xa2 => 0x6170, 0xa3 => 0x616b, 0xa4 => 0x617e, 0xa5 => 0x61a7, 0xa6 => 0x6190, 0xa7 => 0x61ab, 0xa8 => 0x618e, 0xa9 => 0x61ac, 0xaa => 0x619a, 0xab => 0x61a4, 0xac => 0x6194, 0xad => 0x61ae, 0xae => 0x622e, 0xaf => 0x6469, 0xb0 => 0x646f, 0xb1 => 0x6479, 0xb2 => 0x649e, 0xb3 => 0x64b2, 0xb4 => 0x6488, 0xb5 => 0x6490, 0xb6 => 0x64b0, 0xb7 => 0x64a5, 0xb8 => 0x6493, 0xb9 => 0x6495, 0xba => 0x64a9, 0xbb => 0x6492, 0xbc => 0x64ae, 0xbd => 0x64ad, 0xbe => 0x64ab, 0xbf => 0x649a, 0xc0 => 0x64ac, 0xc1 => 0x6499, 0xc2 => 0x64a2, 0xc3 => 0x64b3, 0xc4 => 0x6575, 0xc5 => 0x6577, 0xc6 => 0x6578, 0xc7 => 0x66ae, 0xc8 => 0x66ab, 0xc9 => 0x66b4, 0xca => 0x66b1, 0xcb => 0x6a23, 0xcc => 0x6a1f, 0xcd => 0x69e8, 0xce => 0x6a01, 0xcf => 0x6a1e, 0xd0 => 0x6a19, 0xd1 => 0x69fd, 0xd2 => 0x6a21, 0xd3 => 0x6a13, 0xd4 => 0x6a0a, 0xd5 => 0x69f3, 0xd6 => 0x6a02, 0xd7 => 0x6a05, 0xd8 => 0x69ed, 0xd9 => 0x6a11, 0xda => 0x6b50, 0xdb => 0x6b4e, 0xdc => 0x6ba4, 0xdd => 0x6bc5, 0xde => 0x6bc6, 0xdf => 0x6f3f, 0xe0 => 0x6f7c, 0xe1 => 0x6f84, 0xe2 => 0x6f51, 0xe3 => 0x6f66, 0xe4 => 0x6f54, 0xe5 => 0x6f86, 0xe6 => 0x6f6d, 0xe7 => 0x6f5b, 0xe8 => 0x6f78, 0xe9 => 0x6f6e, 0xea => 0x6f8e, 0xeb => 0x6f7a, 0xec => 0x6f70, 0xed => 0x6f64, 0xee => 0x6f97, 0xef => 0x6f58, 0xf0 => 0x6ed5, 0xf1 => 0x6f6f, 0xf2 => 0x6f60, 0xf3 => 0x6f5f, 0xf4 => 0x719f, 0xf5 => 0x71ac, 0xf6 => 0x71b1, 0xf7 => 0x71a8, 0xf8 => 0x7256, 0xf9 => 0x729b, 0xfa => 0x734e, 0xfb => 0x7357, 0xfc => 0x7469, 0xfd => 0x748b, 0xfe => 0x7483, }, 0xbd => { 0x40 => 0x747e, 0x41 => 0x7480, 0x42 => 0x757f, 0x43 => 0x7620, 0x44 => 0x7629, 0x45 => 0x761f, 0x46 => 0x7624, 0x47 => 0x7626, 0x48 => 0x7621, 0x49 => 0x7622, 0x4a => 0x769a, 0x4b => 0x76ba, 0x4c => 0x76e4, 0x4d => 0x778e, 0x4e => 0x7787, 0x4f => 0x778c, 0x50 => 0x7791, 0x51 => 0x778b, 0x52 => 0x78cb, 0x53 => 0x78c5, 0x54 => 0x78ba, 0x55 => 0x78ca, 0x56 => 0x78be, 0x57 => 0x78d5, 0x58 => 0x78bc, 0x59 => 0x78d0, 0x5a => 0x7a3f, 0x5b => 0x7a3c, 0x5c => 0x7a40, 0x5d => 0x7a3d, 0x5e => 0x7a37, 0x5f => 0x7a3b, 0x60 => 0x7aaf, 0x61 => 0x7aae, 0x62 => 0x7bad, 0x63 => 0x7bb1, 0x64 => 0x7bc4, 0x65 => 0x7bb4, 0x66 => 0x7bc6, 0x67 => 0x7bc7, 0x68 => 0x7bc1, 0x69 => 0x7ba0, 0x6a => 0x7bcc, 0x6b => 0x7cca, 0x6c => 0x7de0, 0x6d => 0x7df4, 0x6e => 0x7def, 0x6f => 0x7dfb, 0x70 => 0x7dd8, 0x71 => 0x7dec, 0x72 => 0x7ddd, 0x73 => 0x7de8, 0x74 => 0x7de3, 0x75 => 0x7dda, 0x76 => 0x7dde, 0x77 => 0x7de9, 0x78 => 0x7d9e, 0x79 => 0x7dd9, 0x7a => 0x7df2, 0x7b => 0x7df9, 0x7c => 0x7f75, 0x7d => 0x7f77, 0x7e => 0x7faf, 0xa1 => 0x7fe9, 0xa2 => 0x8026, 0xa3 => 0x819b, 0xa4 => 0x819c, 0xa5 => 0x819d, 0xa6 => 0x81a0, 0xa7 => 0x819a, 0xa8 => 0x8198, 0xa9 => 0x8517, 0xaa => 0x853d, 0xab => 0x851a, 0xac => 0x84ee, 0xad => 0x852c, 0xae => 0x852d, 0xaf => 0x8513, 0xb0 => 0x8511, 0xb1 => 0x8523, 0xb2 => 0x8521, 0xb3 => 0x8514, 0xb4 => 0x84ec, 0xb5 => 0x8525, 0xb6 => 0x84ff, 0xb7 => 0x8506, 0xb8 => 0x8782, 0xb9 => 0x8774, 0xba => 0x8776, 0xbb => 0x8760, 0xbc => 0x8766, 0xbd => 0x8778, 0xbe => 0x8768, 0xbf => 0x8759, 0xc0 => 0x8757, 0xc1 => 0x874c, 0xc2 => 0x8753, 0xc3 => 0x885b, 0xc4 => 0x885d, 0xc5 => 0x8910, 0xc6 => 0x8907, 0xc7 => 0x8912, 0xc8 => 0x8913, 0xc9 => 0x8915, 0xca => 0x890a, 0xcb => 0x8abc, 0xcc => 0x8ad2, 0xcd => 0x8ac7, 0xce => 0x8ac4, 0xcf => 0x8a95, 0xd0 => 0x8acb, 0xd1 => 0x8af8, 0xd2 => 0x8ab2, 0xd3 => 0x8ac9, 0xd4 => 0x8ac2, 0xd5 => 0x8abf, 0xd6 => 0x8ab0, 0xd7 => 0x8ad6, 0xd8 => 0x8acd, 0xd9 => 0x8ab6, 0xda => 0x8ab9, 0xdb => 0x8adb, 0xdc => 0x8c4c, 0xdd => 0x8c4e, 0xde => 0x8c6c, 0xdf => 0x8ce0, 0xe0 => 0x8cde, 0xe1 => 0x8ce6, 0xe2 => 0x8ce4, 0xe3 => 0x8cec, 0xe4 => 0x8ced, 0xe5 => 0x8ce2, 0xe6 => 0x8ce3, 0xe7 => 0x8cdc, 0xe8 => 0x8cea, 0xe9 => 0x8ce1, 0xea => 0x8d6d, 0xeb => 0x8d9f, 0xec => 0x8da3, 0xed => 0x8e2b, 0xee => 0x8e10, 0xef => 0x8e1d, 0xf0 => 0x8e22, 0xf1 => 0x8e0f, 0xf2 => 0x8e29, 0xf3 => 0x8e1f, 0xf4 => 0x8e21, 0xf5 => 0x8e1e, 0xf6 => 0x8eba, 0xf7 => 0x8f1d, 0xf8 => 0x8f1b, 0xf9 => 0x8f1f, 0xfa => 0x8f29, 0xfb => 0x8f26, 0xfc => 0x8f2a, 0xfd => 0x8f1c, 0xfe => 0x8f1e, }, 0xbe => { 0x40 => 0x8f25, 0x41 => 0x9069, 0x42 => 0x906e, 0x43 => 0x9068, 0x44 => 0x906d, 0x45 => 0x9077, 0x46 => 0x9130, 0x47 => 0x912d, 0x48 => 0x9127, 0x49 => 0x9131, 0x4a => 0x9187, 0x4b => 0x9189, 0x4c => 0x918b, 0x4d => 0x9183, 0x4e => 0x92c5, 0x4f => 0x92bb, 0x50 => 0x92b7, 0x51 => 0x92ea, 0x52 => 0x92ac, 0x53 => 0x92e4, 0x54 => 0x92c1, 0x55 => 0x92b3, 0x56 => 0x92bc, 0x57 => 0x92d2, 0x58 => 0x92c7, 0x59 => 0x92f0, 0x5a => 0x92b2, 0x5b => 0x95ad, 0x5c => 0x95b1, 0x5d => 0x9704, 0x5e => 0x9706, 0x5f => 0x9707, 0x60 => 0x9709, 0x61 => 0x9760, 0x62 => 0x978d, 0x63 => 0x978b, 0x64 => 0x978f, 0x65 => 0x9821, 0x66 => 0x982b, 0x67 => 0x981c, 0x68 => 0x98b3, 0x69 => 0x990a, 0x6a => 0x9913, 0x6b => 0x9912, 0x6c => 0x9918, 0x6d => 0x99dd, 0x6e => 0x99d0, 0x6f => 0x99df, 0x70 => 0x99db, 0x71 => 0x99d1, 0x72 => 0x99d5, 0x73 => 0x99d2, 0x74 => 0x99d9, 0x75 => 0x9ab7, 0x76 => 0x9aee, 0x77 => 0x9aef, 0x78 => 0x9b27, 0x79 => 0x9b45, 0x7a => 0x9b44, 0x7b => 0x9b77, 0x7c => 0x9b6f, 0x7d => 0x9d06, 0x7e => 0x9d09, 0xa1 => 0x9d03, 0xa2 => 0x9ea9, 0xa3 => 0x9ebe, 0xa4 => 0x9ece, 0xa5 => 0x58a8, 0xa6 => 0x9f52, 0xa7 => 0x5112, 0xa8 => 0x5118, 0xa9 => 0x5114, 0xaa => 0x5110, 0xab => 0x5115, 0xac => 0x5180, 0xad => 0x51aa, 0xae => 0x51dd, 0xaf => 0x5291, 0xb0 => 0x5293, 0xb1 => 0x52f3, 0xb2 => 0x5659, 0xb3 => 0x566b, 0xb4 => 0x5679, 0xb5 => 0x5669, 0xb6 => 0x5664, 0xb7 => 0x5678, 0xb8 => 0x566a, 0xb9 => 0x5668, 0xba => 0x5665, 0xbb => 0x5671, 0xbc => 0x566f, 0xbd => 0x566c, 0xbe => 0x5662, 0xbf => 0x5676, 0xc0 => 0x58c1, 0xc1 => 0x58be, 0xc2 => 0x58c7, 0xc3 => 0x58c5, 0xc4 => 0x596e, 0xc5 => 0x5b1d, 0xc6 => 0x5b34, 0xc7 => 0x5b78, 0xc8 => 0x5bf0, 0xc9 => 0x5c0e, 0xca => 0x5f4a, 0xcb => 0x61b2, 0xcc => 0x6191, 0xcd => 0x61a9, 0xce => 0x618a, 0xcf => 0x61cd, 0xd0 => 0x61b6, 0xd1 => 0x61be, 0xd2 => 0x61ca, 0xd3 => 0x61c8, 0xd4 => 0x6230, 0xd5 => 0x64c5, 0xd6 => 0x64c1, 0xd7 => 0x64cb, 0xd8 => 0x64bb, 0xd9 => 0x64bc, 0xda => 0x64da, 0xdb => 0x64c4, 0xdc => 0x64c7, 0xdd => 0x64c2, 0xde => 0x64cd, 0xdf => 0x64bf, 0xe0 => 0x64d2, 0xe1 => 0x64d4, 0xe2 => 0x64be, 0xe3 => 0x6574, 0xe4 => 0x66c6, 0xe5 => 0x66c9, 0xe6 => 0x66b9, 0xe7 => 0x66c4, 0xe8 => 0x66c7, 0xe9 => 0x66b8, 0xea => 0x6a3d, 0xeb => 0x6a38, 0xec => 0x6a3a, 0xed => 0x6a59, 0xee => 0x6a6b, 0xef => 0x6a58, 0xf0 => 0x6a39, 0xf1 => 0x6a44, 0xf2 => 0x6a62, 0xf3 => 0x6a61, 0xf4 => 0x6a4b, 0xf5 => 0x6a47, 0xf6 => 0x6a35, 0xf7 => 0x6a5f, 0xf8 => 0x6a48, 0xf9 => 0x6b59, 0xfa => 0x6b77, 0xfb => 0x6c05, 0xfc => 0x6fc2, 0xfd => 0x6fb1, 0xfe => 0x6fa1, }, 0xbf => { 0x40 => 0x6fc3, 0x41 => 0x6fa4, 0x42 => 0x6fc1, 0x43 => 0x6fa7, 0x44 => 0x6fb3, 0x45 => 0x6fc0, 0x46 => 0x6fb9, 0x47 => 0x6fb6, 0x48 => 0x6fa6, 0x49 => 0x6fa0, 0x4a => 0x6fb4, 0x4b => 0x71be, 0x4c => 0x71c9, 0x4d => 0x71d0, 0x4e => 0x71d2, 0x4f => 0x71c8, 0x50 => 0x71d5, 0x51 => 0x71b9, 0x52 => 0x71ce, 0x53 => 0x71d9, 0x54 => 0x71dc, 0x55 => 0x71c3, 0x56 => 0x71c4, 0x57 => 0x7368, 0x58 => 0x749c, 0x59 => 0x74a3, 0x5a => 0x7498, 0x5b => 0x749f, 0x5c => 0x749e, 0x5d => 0x74e2, 0x5e => 0x750c, 0x5f => 0x750d, 0x60 => 0x7634, 0x61 => 0x7638, 0x62 => 0x763a, 0x63 => 0x76e7, 0x64 => 0x76e5, 0x65 => 0x77a0, 0x66 => 0x779e, 0x67 => 0x779f, 0x68 => 0x77a5, 0x69 => 0x78e8, 0x6a => 0x78da, 0x6b => 0x78ec, 0x6c => 0x78e7, 0x6d => 0x79a6, 0x6e => 0x7a4d, 0x6f => 0x7a4e, 0x70 => 0x7a46, 0x71 => 0x7a4c, 0x72 => 0x7a4b, 0x73 => 0x7aba, 0x74 => 0x7bd9, 0x75 => 0x7c11, 0x76 => 0x7bc9, 0x77 => 0x7be4, 0x78 => 0x7bdb, 0x79 => 0x7be1, 0x7a => 0x7be9, 0x7b => 0x7be6, 0x7c => 0x7cd5, 0x7d => 0x7cd6, 0x7e => 0x7e0a, 0xa1 => 0x7e11, 0xa2 => 0x7e08, 0xa3 => 0x7e1b, 0xa4 => 0x7e23, 0xa5 => 0x7e1e, 0xa6 => 0x7e1d, 0xa7 => 0x7e09, 0xa8 => 0x7e10, 0xa9 => 0x7f79, 0xaa => 0x7fb2, 0xab => 0x7ff0, 0xac => 0x7ff1, 0xad => 0x7fee, 0xae => 0x8028, 0xaf => 0x81b3, 0xb0 => 0x81a9, 0xb1 => 0x81a8, 0xb2 => 0x81fb, 0xb3 => 0x8208, 0xb4 => 0x8258, 0xb5 => 0x8259, 0xb6 => 0x854a, 0xb7 => 0x8559, 0xb8 => 0x8548, 0xb9 => 0x8568, 0xba => 0x8569, 0xbb => 0x8543, 0xbc => 0x8549, 0xbd => 0x856d, 0xbe => 0x856a, 0xbf => 0x855e, 0xc0 => 0x8783, 0xc1 => 0x879f, 0xc2 => 0x879e, 0xc3 => 0x87a2, 0xc4 => 0x878d, 0xc5 => 0x8861, 0xc6 => 0x892a, 0xc7 => 0x8932, 0xc8 => 0x8925, 0xc9 => 0x892b, 0xca => 0x8921, 0xcb => 0x89aa, 0xcc => 0x89a6, 0xcd => 0x8ae6, 0xce => 0x8afa, 0xcf => 0x8aeb, 0xd0 => 0x8af1, 0xd1 => 0x8b00, 0xd2 => 0x8adc, 0xd3 => 0x8ae7, 0xd4 => 0x8aee, 0xd5 => 0x8afe, 0xd6 => 0x8b01, 0xd7 => 0x8b02, 0xd8 => 0x8af7, 0xd9 => 0x8aed, 0xda => 0x8af3, 0xdb => 0x8af6, 0xdc => 0x8afc, 0xdd => 0x8c6b, 0xde => 0x8c6d, 0xdf => 0x8c93, 0xe0 => 0x8cf4, 0xe1 => 0x8e44, 0xe2 => 0x8e31, 0xe3 => 0x8e34, 0xe4 => 0x8e42, 0xe5 => 0x8e39, 0xe6 => 0x8e35, 0xe7 => 0x8f3b, 0xe8 => 0x8f2f, 0xe9 => 0x8f38, 0xea => 0x8f33, 0xeb => 0x8fa8, 0xec => 0x8fa6, 0xed => 0x9075, 0xee => 0x9074, 0xef => 0x9078, 0xf0 => 0x9072, 0xf1 => 0x907c, 0xf2 => 0x907a, 0xf3 => 0x9134, 0xf4 => 0x9192, 0xf5 => 0x9320, 0xf6 => 0x9336, 0xf7 => 0x92f8, 0xf8 => 0x9333, 0xf9 => 0x932f, 0xfa => 0x9322, 0xfb => 0x92fc, 0xfc => 0x932b, 0xfd => 0x9304, 0xfe => 0x931a, }, 0xc0 => { 0x40 => 0x9310, 0x41 => 0x9326, 0x42 => 0x9321, 0x43 => 0x9315, 0x44 => 0x932e, 0x45 => 0x9319, 0x46 => 0x95bb, 0x47 => 0x96a7, 0x48 => 0x96a8, 0x49 => 0x96aa, 0x4a => 0x96d5, 0x4b => 0x970e, 0x4c => 0x9711, 0x4d => 0x9716, 0x4e => 0x970d, 0x4f => 0x9713, 0x50 => 0x970f, 0x51 => 0x975b, 0x52 => 0x975c, 0x53 => 0x9766, 0x54 => 0x9798, 0x55 => 0x9830, 0x56 => 0x9838, 0x57 => 0x983b, 0x58 => 0x9837, 0x59 => 0x982d, 0x5a => 0x9839, 0x5b => 0x9824, 0x5c => 0x9910, 0x5d => 0x9928, 0x5e => 0x991e, 0x5f => 0x991b, 0x60 => 0x9921, 0x61 => 0x991a, 0x62 => 0x99ed, 0x63 => 0x99e2, 0x64 => 0x99f1, 0x65 => 0x9ab8, 0x66 => 0x9abc, 0x67 => 0x9afb, 0x68 => 0x9aed, 0x69 => 0x9b28, 0x6a => 0x9b91, 0x6b => 0x9d15, 0x6c => 0x9d23, 0x6d => 0x9d26, 0x6e => 0x9d28, 0x6f => 0x9d12, 0x70 => 0x9d1b, 0x71 => 0x9ed8, 0x72 => 0x9ed4, 0x73 => 0x9f8d, 0x74 => 0x9f9c, 0x75 => 0x512a, 0x76 => 0x511f, 0x77 => 0x5121, 0x78 => 0x5132, 0x79 => 0x52f5, 0x7a => 0x568e, 0x7b => 0x5680, 0x7c => 0x5690, 0x7d => 0x5685, 0x7e => 0x5687, 0xa1 => 0x568f, 0xa2 => 0x58d5, 0xa3 => 0x58d3, 0xa4 => 0x58d1, 0xa5 => 0x58ce, 0xa6 => 0x5b30, 0xa7 => 0x5b2a, 0xa8 => 0x5b24, 0xa9 => 0x5b7a, 0xaa => 0x5c37, 0xab => 0x5c68, 0xac => 0x5dbc, 0xad => 0x5dba, 0xae => 0x5dbd, 0xaf => 0x5db8, 0xb0 => 0x5e6b, 0xb1 => 0x5f4c, 0xb2 => 0x5fbd, 0xb3 => 0x61c9, 0xb4 => 0x61c2, 0xb5 => 0x61c7, 0xb6 => 0x61e6, 0xb7 => 0x61cb, 0xb8 => 0x6232, 0xb9 => 0x6234, 0xba => 0x64ce, 0xbb => 0x64ca, 0xbc => 0x64d8, 0xbd => 0x64e0, 0xbe => 0x64f0, 0xbf => 0x64e6, 0xc0 => 0x64ec, 0xc1 => 0x64f1, 0xc2 => 0x64e2, 0xc3 => 0x64ed, 0xc4 => 0x6582, 0xc5 => 0x6583, 0xc6 => 0x66d9, 0xc7 => 0x66d6, 0xc8 => 0x6a80, 0xc9 => 0x6a94, 0xca => 0x6a84, 0xcb => 0x6aa2, 0xcc => 0x6a9c, 0xcd => 0x6adb, 0xce => 0x6aa3, 0xcf => 0x6a7e, 0xd0 => 0x6a97, 0xd1 => 0x6a90, 0xd2 => 0x6aa0, 0xd3 => 0x6b5c, 0xd4 => 0x6bae, 0xd5 => 0x6bda, 0xd6 => 0x6c08, 0xd7 => 0x6fd8, 0xd8 => 0x6ff1, 0xd9 => 0x6fdf, 0xda => 0x6fe0, 0xdb => 0x6fdb, 0xdc => 0x6fe4, 0xdd => 0x6feb, 0xde => 0x6fef, 0xdf => 0x6f80, 0xe0 => 0x6fec, 0xe1 => 0x6fe1, 0xe2 => 0x6fe9, 0xe3 => 0x6fd5, 0xe4 => 0x6fee, 0xe5 => 0x6ff0, 0xe6 => 0x71e7, 0xe7 => 0x71df, 0xe8 => 0x71ee, 0xe9 => 0x71e6, 0xea => 0x71e5, 0xeb => 0x71ed, 0xec => 0x71ec, 0xed => 0x71f4, 0xee => 0x71e0, 0xef => 0x7235, 0xf0 => 0x7246, 0xf1 => 0x7370, 0xf2 => 0x7372, 0xf3 => 0x74a9, 0xf4 => 0x74b0, 0xf5 => 0x74a6, 0xf6 => 0x74a8, 0xf7 => 0x7646, 0xf8 => 0x7642, 0xf9 => 0x764c, 0xfa => 0x76ea, 0xfb => 0x77b3, 0xfc => 0x77aa, 0xfd => 0x77b0, 0xfe => 0x77ac, }, 0xc1 => { 0x40 => 0x77a7, 0x41 => 0x77ad, 0x42 => 0x77ef, 0x43 => 0x78f7, 0x44 => 0x78fa, 0x45 => 0x78f4, 0x46 => 0x78ef, 0x47 => 0x7901, 0x48 => 0x79a7, 0x49 => 0x79aa, 0x4a => 0x7a57, 0x4b => 0x7abf, 0x4c => 0x7c07, 0x4d => 0x7c0d, 0x4e => 0x7bfe, 0x4f => 0x7bf7, 0x50 => 0x7c0c, 0x51 => 0x7be0, 0x52 => 0x7ce0, 0x53 => 0x7cdc, 0x54 => 0x7cde, 0x55 => 0x7ce2, 0x56 => 0x7cdf, 0x57 => 0x7cd9, 0x58 => 0x7cdd, 0x59 => 0x7e2e, 0x5a => 0x7e3e, 0x5b => 0x7e46, 0x5c => 0x7e37, 0x5d => 0x7e32, 0x5e => 0x7e43, 0x5f => 0x7e2b, 0x60 => 0x7e3d, 0x61 => 0x7e31, 0x62 => 0x7e45, 0x63 => 0x7e41, 0x64 => 0x7e34, 0x65 => 0x7e39, 0x66 => 0x7e48, 0x67 => 0x7e35, 0x68 => 0x7e3f, 0x69 => 0x7e2f, 0x6a => 0x7f44, 0x6b => 0x7ff3, 0x6c => 0x7ffc, 0x6d => 0x8071, 0x6e => 0x8072, 0x6f => 0x8070, 0x70 => 0x806f, 0x71 => 0x8073, 0x72 => 0x81c6, 0x73 => 0x81c3, 0x74 => 0x81ba, 0x75 => 0x81c2, 0x76 => 0x81c0, 0x77 => 0x81bf, 0x78 => 0x81bd, 0x79 => 0x81c9, 0x7a => 0x81be, 0x7b => 0x81e8, 0x7c => 0x8209, 0x7d => 0x8271, 0x7e => 0x85aa, 0xa1 => 0x8584, 0xa2 => 0x857e, 0xa3 => 0x859c, 0xa4 => 0x8591, 0xa5 => 0x8594, 0xa6 => 0x85af, 0xa7 => 0x859b, 0xa8 => 0x8587, 0xa9 => 0x85a8, 0xaa => 0x858a, 0xab => 0x8667, 0xac => 0x87c0, 0xad => 0x87d1, 0xae => 0x87b3, 0xaf => 0x87d2, 0xb0 => 0x87c6, 0xb1 => 0x87ab, 0xb2 => 0x87bb, 0xb3 => 0x87ba, 0xb4 => 0x87c8, 0xb5 => 0x87cb, 0xb6 => 0x893b, 0xb7 => 0x8936, 0xb8 => 0x8944, 0xb9 => 0x8938, 0xba => 0x893d, 0xbb => 0x89ac, 0xbc => 0x8b0e, 0xbd => 0x8b17, 0xbe => 0x8b19, 0xbf => 0x8b1b, 0xc0 => 0x8b0a, 0xc1 => 0x8b20, 0xc2 => 0x8b1d, 0xc3 => 0x8b04, 0xc4 => 0x8b10, 0xc5 => 0x8c41, 0xc6 => 0x8c3f, 0xc7 => 0x8c73, 0xc8 => 0x8cfa, 0xc9 => 0x8cfd, 0xca => 0x8cfc, 0xcb => 0x8cf8, 0xcc => 0x8cfb, 0xcd => 0x8da8, 0xce => 0x8e49, 0xcf => 0x8e4b, 0xd0 => 0x8e48, 0xd1 => 0x8e4a, 0xd2 => 0x8f44, 0xd3 => 0x8f3e, 0xd4 => 0x8f42, 0xd5 => 0x8f45, 0xd6 => 0x8f3f, 0xd7 => 0x907f, 0xd8 => 0x907d, 0xd9 => 0x9084, 0xda => 0x9081, 0xdb => 0x9082, 0xdc => 0x9080, 0xdd => 0x9139, 0xde => 0x91a3, 0xdf => 0x919e, 0xe0 => 0x919c, 0xe1 => 0x934d, 0xe2 => 0x9382, 0xe3 => 0x9328, 0xe4 => 0x9375, 0xe5 => 0x934a, 0xe6 => 0x9365, 0xe7 => 0x934b, 0xe8 => 0x9318, 0xe9 => 0x937e, 0xea => 0x936c, 0xeb => 0x935b, 0xec => 0x9370, 0xed => 0x935a, 0xee => 0x9354, 0xef => 0x95ca, 0xf0 => 0x95cb, 0xf1 => 0x95cc, 0xf2 => 0x95c8, 0xf3 => 0x95c6, 0xf4 => 0x96b1, 0xf5 => 0x96b8, 0xf6 => 0x96d6, 0xf7 => 0x971c, 0xf8 => 0x971e, 0xf9 => 0x97a0, 0xfa => 0x97d3, 0xfb => 0x9846, 0xfc => 0x98b6, 0xfd => 0x9935, 0xfe => 0x9a01, }, 0xc2 => { 0x40 => 0x99ff, 0x41 => 0x9bae, 0x42 => 0x9bab, 0x43 => 0x9baa, 0x44 => 0x9bad, 0x45 => 0x9d3b, 0x46 => 0x9d3f, 0x47 => 0x9e8b, 0x48 => 0x9ecf, 0x49 => 0x9ede, 0x4a => 0x9edc, 0x4b => 0x9edd, 0x4c => 0x9edb, 0x4d => 0x9f3e, 0x4e => 0x9f4b, 0x4f => 0x53e2, 0x50 => 0x5695, 0x51 => 0x56ae, 0x52 => 0x58d9, 0x53 => 0x58d8, 0x54 => 0x5b38, 0x55 => 0x5f5d, 0x56 => 0x61e3, 0x57 => 0x6233, 0x58 => 0x64f4, 0x59 => 0x64f2, 0x5a => 0x64fe, 0x5b => 0x6506, 0x5c => 0x64fa, 0x5d => 0x64fb, 0x5e => 0x64f7, 0x5f => 0x65b7, 0x60 => 0x66dc, 0x61 => 0x6726, 0x62 => 0x6ab3, 0x63 => 0x6aac, 0x64 => 0x6ac3, 0x65 => 0x6abb, 0x66 => 0x6ab8, 0x67 => 0x6ac2, 0x68 => 0x6aae, 0x69 => 0x6aaf, 0x6a => 0x6b5f, 0x6b => 0x6b78, 0x6c => 0x6baf, 0x6d => 0x7009, 0x6e => 0x700b, 0x6f => 0x6ffe, 0x70 => 0x7006, 0x71 => 0x6ffa, 0x72 => 0x7011, 0x73 => 0x700f, 0x74 => 0x71fb, 0x75 => 0x71fc, 0x76 => 0x71fe, 0x77 => 0x71f8, 0x78 => 0x7377, 0x79 => 0x7375, 0x7a => 0x74a7, 0x7b => 0x74bf, 0x7c => 0x7515, 0x7d => 0x7656, 0x7e => 0x7658, 0xa1 => 0x7652, 0xa2 => 0x77bd, 0xa3 => 0x77bf, 0xa4 => 0x77bb, 0xa5 => 0x77bc, 0xa6 => 0x790e, 0xa7 => 0x79ae, 0xa8 => 0x7a61, 0xa9 => 0x7a62, 0xaa => 0x7a60, 0xab => 0x7ac4, 0xac => 0x7ac5, 0xad => 0x7c2b, 0xae => 0x7c27, 0xaf => 0x7c2a, 0xb0 => 0x7c1e, 0xb1 => 0x7c23, 0xb2 => 0x7c21, 0xb3 => 0x7ce7, 0xb4 => 0x7e54, 0xb5 => 0x7e55, 0xb6 => 0x7e5e, 0xb7 => 0x7e5a, 0xb8 => 0x7e61, 0xb9 => 0x7e52, 0xba => 0x7e59, 0xbb => 0x7f48, 0xbc => 0x7ff9, 0xbd => 0x7ffb, 0xbe => 0x8077, 0xbf => 0x8076, 0xc0 => 0x81cd, 0xc1 => 0x81cf, 0xc2 => 0x820a, 0xc3 => 0x85cf, 0xc4 => 0x85a9, 0xc5 => 0x85cd, 0xc6 => 0x85d0, 0xc7 => 0x85c9, 0xc8 => 0x85b0, 0xc9 => 0x85ba, 0xca => 0x85b9, 0xcb => 0x85a6, 0xcc => 0x87ef, 0xcd => 0x87ec, 0xce => 0x87f2, 0xcf => 0x87e0, 0xd0 => 0x8986, 0xd1 => 0x89b2, 0xd2 => 0x89f4, 0xd3 => 0x8b28, 0xd4 => 0x8b39, 0xd5 => 0x8b2c, 0xd6 => 0x8b2b, 0xd7 => 0x8c50, 0xd8 => 0x8d05, 0xd9 => 0x8e59, 0xda => 0x8e63, 0xdb => 0x8e66, 0xdc => 0x8e64, 0xdd => 0x8e5f, 0xde => 0x8e55, 0xdf => 0x8ec0, 0xe0 => 0x8f49, 0xe1 => 0x8f4d, 0xe2 => 0x9087, 0xe3 => 0x9083, 0xe4 => 0x9088, 0xe5 => 0x91ab, 0xe6 => 0x91ac, 0xe7 => 0x91d0, 0xe8 => 0x9394, 0xe9 => 0x938a, 0xea => 0x9396, 0xeb => 0x93a2, 0xec => 0x93b3, 0xed => 0x93ae, 0xee => 0x93ac, 0xef => 0x93b0, 0xf0 => 0x9398, 0xf1 => 0x939a, 0xf2 => 0x9397, 0xf3 => 0x95d4, 0xf4 => 0x95d6, 0xf5 => 0x95d0, 0xf6 => 0x95d5, 0xf7 => 0x96e2, 0xf8 => 0x96dc, 0xf9 => 0x96d9, 0xfa => 0x96db, 0xfb => 0x96de, 0xfc => 0x9724, 0xfd => 0x97a3, 0xfe => 0x97a6, }, 0xc3 => { 0x40 => 0x97ad, 0x41 => 0x97f9, 0x42 => 0x984d, 0x43 => 0x984f, 0x44 => 0x984c, 0x45 => 0x984e, 0x46 => 0x9853, 0x47 => 0x98ba, 0x48 => 0x993e, 0x49 => 0x993f, 0x4a => 0x993d, 0x4b => 0x992e, 0x4c => 0x99a5, 0x4d => 0x9a0e, 0x4e => 0x9ac1, 0x4f => 0x9b03, 0x50 => 0x9b06, 0x51 => 0x9b4f, 0x52 => 0x9b4e, 0x53 => 0x9b4d, 0x54 => 0x9bca, 0x55 => 0x9bc9, 0x56 => 0x9bfd, 0x57 => 0x9bc8, 0x58 => 0x9bc0, 0x59 => 0x9d51, 0x5a => 0x9d5d, 0x5b => 0x9d60, 0x5c => 0x9ee0, 0x5d => 0x9f15, 0x5e => 0x9f2c, 0x5f => 0x5133, 0x60 => 0x56a5, 0x61 => 0x58de, 0x62 => 0x58df, 0x63 => 0x58e2, 0x64 => 0x5bf5, 0x65 => 0x9f90, 0x66 => 0x5eec, 0x67 => 0x61f2, 0x68 => 0x61f7, 0x69 => 0x61f6, 0x6a => 0x61f5, 0x6b => 0x6500, 0x6c => 0x650f, 0x6d => 0x66e0, 0x6e => 0x66dd, 0x6f => 0x6ae5, 0x70 => 0x6add, 0x71 => 0x6ada, 0x72 => 0x6ad3, 0x73 => 0x701b, 0x74 => 0x701f, 0x75 => 0x7028, 0x76 => 0x701a, 0x77 => 0x701d, 0x78 => 0x7015, 0x79 => 0x7018, 0x7a => 0x7206, 0x7b => 0x720d, 0x7c => 0x7258, 0x7d => 0x72a2, 0x7e => 0x7378, 0xa1 => 0x737a, 0xa2 => 0x74bd, 0xa3 => 0x74ca, 0xa4 => 0x74e3, 0xa5 => 0x7587, 0xa6 => 0x7586, 0xa7 => 0x765f, 0xa8 => 0x7661, 0xa9 => 0x77c7, 0xaa => 0x7919, 0xab => 0x79b1, 0xac => 0x7a6b, 0xad => 0x7a69, 0xae => 0x7c3e, 0xaf => 0x7c3f, 0xb0 => 0x7c38, 0xb1 => 0x7c3d, 0xb2 => 0x7c37, 0xb3 => 0x7c40, 0xb4 => 0x7e6b, 0xb5 => 0x7e6d, 0xb6 => 0x7e79, 0xb7 => 0x7e69, 0xb8 => 0x7e6a, 0xb9 => 0x7f85, 0xba => 0x7e73, 0xbb => 0x7fb6, 0xbc => 0x7fb9, 0xbd => 0x7fb8, 0xbe => 0x81d8, 0xbf => 0x85e9, 0xc0 => 0x85dd, 0xc1 => 0x85ea, 0xc2 => 0x85d5, 0xc3 => 0x85e4, 0xc4 => 0x85e5, 0xc5 => 0x85f7, 0xc6 => 0x87fb, 0xc7 => 0x8805, 0xc8 => 0x880d, 0xc9 => 0x87f9, 0xca => 0x87fe, 0xcb => 0x8960, 0xcc => 0x895f, 0xcd => 0x8956, 0xce => 0x895e, 0xcf => 0x8b41, 0xd0 => 0x8b5c, 0xd1 => 0x8b58, 0xd2 => 0x8b49, 0xd3 => 0x8b5a, 0xd4 => 0x8b4e, 0xd5 => 0x8b4f, 0xd6 => 0x8b46, 0xd7 => 0x8b59, 0xd8 => 0x8d08, 0xd9 => 0x8d0a, 0xda => 0x8e7c, 0xdb => 0x8e72, 0xdc => 0x8e87, 0xdd => 0x8e76, 0xde => 0x8e6c, 0xdf => 0x8e7a, 0xe0 => 0x8e74, 0xe1 => 0x8f54, 0xe2 => 0x8f4e, 0xe3 => 0x8fad, 0xe4 => 0x908a, 0xe5 => 0x908b, 0xe6 => 0x91b1, 0xe7 => 0x91ae, 0xe8 => 0x93e1, 0xe9 => 0x93d1, 0xea => 0x93df, 0xeb => 0x93c3, 0xec => 0x93c8, 0xed => 0x93dc, 0xee => 0x93dd, 0xef => 0x93d6, 0xf0 => 0x93e2, 0xf1 => 0x93cd, 0xf2 => 0x93d8, 0xf3 => 0x93e4, 0xf4 => 0x93d7, 0xf5 => 0x93e8, 0xf6 => 0x95dc, 0xf7 => 0x96b4, 0xf8 => 0x96e3, 0xf9 => 0x972a, 0xfa => 0x9727, 0xfb => 0x9761, 0xfc => 0x97dc, 0xfd => 0x97fb, 0xfe => 0x985e, }, 0xc4 => { 0x40 => 0x9858, 0x41 => 0x985b, 0x42 => 0x98bc, 0x43 => 0x9945, 0x44 => 0x9949, 0x45 => 0x9a16, 0x46 => 0x9a19, 0x47 => 0x9b0d, 0x48 => 0x9be8, 0x49 => 0x9be7, 0x4a => 0x9bd6, 0x4b => 0x9bdb, 0x4c => 0x9d89, 0x4d => 0x9d61, 0x4e => 0x9d72, 0x4f => 0x9d6a, 0x50 => 0x9d6c, 0x51 => 0x9e92, 0x52 => 0x9e97, 0x53 => 0x9e93, 0x54 => 0x9eb4, 0x55 => 0x52f8, 0x56 => 0x56a8, 0x57 => 0x56b7, 0x58 => 0x56b6, 0x59 => 0x56b4, 0x5a => 0x56bc, 0x5b => 0x58e4, 0x5c => 0x5b40, 0x5d => 0x5b43, 0x5e => 0x5b7d, 0x5f => 0x5bf6, 0x60 => 0x5dc9, 0x61 => 0x61f8, 0x62 => 0x61fa, 0x63 => 0x6518, 0x64 => 0x6514, 0x65 => 0x6519, 0x66 => 0x66e6, 0x67 => 0x6727, 0x68 => 0x6aec, 0x69 => 0x703e, 0x6a => 0x7030, 0x6b => 0x7032, 0x6c => 0x7210, 0x6d => 0x737b, 0x6e => 0x74cf, 0x6f => 0x7662, 0x70 => 0x7665, 0x71 => 0x7926, 0x72 => 0x792a, 0x73 => 0x792c, 0x74 => 0x792b, 0x75 => 0x7ac7, 0x76 => 0x7af6, 0x77 => 0x7c4c, 0x78 => 0x7c43, 0x79 => 0x7c4d, 0x7a => 0x7cef, 0x7b => 0x7cf0, 0x7c => 0x8fae, 0x7d => 0x7e7d, 0x7e => 0x7e7c, 0xa1 => 0x7e82, 0xa2 => 0x7f4c, 0xa3 => 0x8000, 0xa4 => 0x81da, 0xa5 => 0x8266, 0xa6 => 0x85fb, 0xa7 => 0x85f9, 0xa8 => 0x8611, 0xa9 => 0x85fa, 0xaa => 0x8606, 0xab => 0x860b, 0xac => 0x8607, 0xad => 0x860a, 0xae => 0x8814, 0xaf => 0x8815, 0xb0 => 0x8964, 0xb1 => 0x89ba, 0xb2 => 0x89f8, 0xb3 => 0x8b70, 0xb4 => 0x8b6c, 0xb5 => 0x8b66, 0xb6 => 0x8b6f, 0xb7 => 0x8b5f, 0xb8 => 0x8b6b, 0xb9 => 0x8d0f, 0xba => 0x8d0d, 0xbb => 0x8e89, 0xbc => 0x8e81, 0xbd => 0x8e85, 0xbe => 0x8e82, 0xbf => 0x91b4, 0xc0 => 0x91cb, 0xc1 => 0x9418, 0xc2 => 0x9403, 0xc3 => 0x93fd, 0xc4 => 0x95e1, 0xc5 => 0x9730, 0xc6 => 0x98c4, 0xc7 => 0x9952, 0xc8 => 0x9951, 0xc9 => 0x99a8, 0xca => 0x9a2b, 0xcb => 0x9a30, 0xcc => 0x9a37, 0xcd => 0x9a35, 0xce => 0x9c13, 0xcf => 0x9c0d, 0xd0 => 0x9e79, 0xd1 => 0x9eb5, 0xd2 => 0x9ee8, 0xd3 => 0x9f2f, 0xd4 => 0x9f5f, 0xd5 => 0x9f63, 0xd6 => 0x9f61, 0xd7 => 0x5137, 0xd8 => 0x5138, 0xd9 => 0x56c1, 0xda => 0x56c0, 0xdb => 0x56c2, 0xdc => 0x5914, 0xdd => 0x5c6c, 0xde => 0x5dcd, 0xdf => 0x61fc, 0xe0 => 0x61fe, 0xe1 => 0x651d, 0xe2 => 0x651c, 0xe3 => 0x6595, 0xe4 => 0x66e9, 0xe5 => 0x6afb, 0xe6 => 0x6b04, 0xe7 => 0x6afa, 0xe8 => 0x6bb2, 0xe9 => 0x704c, 0xea => 0x721b, 0xeb => 0x72a7, 0xec => 0x74d6, 0xed => 0x74d4, 0xee => 0x7669, 0xef => 0x77d3, 0xf0 => 0x7c50, 0xf1 => 0x7e8f, 0xf2 => 0x7e8c, 0xf3 => 0x7fbc, 0xf4 => 0x8617, 0xf5 => 0x862d, 0xf6 => 0x861a, 0xf7 => 0x8823, 0xf8 => 0x8822, 0xf9 => 0x8821, 0xfa => 0x881f, 0xfb => 0x896a, 0xfc => 0x896c, 0xfd => 0x89bd, 0xfe => 0x8b74, }, 0xc5 => { 0x40 => 0x8b77, 0x41 => 0x8b7d, 0x42 => 0x8d13, 0x43 => 0x8e8a, 0x44 => 0x8e8d, 0x45 => 0x8e8b, 0x46 => 0x8f5f, 0x47 => 0x8faf, 0x48 => 0x91ba, 0x49 => 0x942e, 0x4a => 0x9433, 0x4b => 0x9435, 0x4c => 0x943a, 0x4d => 0x9438, 0x4e => 0x9432, 0x4f => 0x942b, 0x50 => 0x95e2, 0x51 => 0x9738, 0x52 => 0x9739, 0x53 => 0x9732, 0x54 => 0x97ff, 0x55 => 0x9867, 0x56 => 0x9865, 0x57 => 0x9957, 0x58 => 0x9a45, 0x59 => 0x9a43, 0x5a => 0x9a40, 0x5b => 0x9a3e, 0x5c => 0x9acf, 0x5d => 0x9b54, 0x5e => 0x9b51, 0x5f => 0x9c2d, 0x60 => 0x9c25, 0x61 => 0x9daf, 0x62 => 0x9db4, 0x63 => 0x9dc2, 0x64 => 0x9db8, 0x65 => 0x9e9d, 0x66 => 0x9eef, 0x67 => 0x9f19, 0x68 => 0x9f5c, 0x69 => 0x9f66, 0x6a => 0x9f67, 0x6b => 0x513c, 0x6c => 0x513b, 0x6d => 0x56c8, 0x6e => 0x56ca, 0x6f => 0x56c9, 0x70 => 0x5b7f, 0x71 => 0x5dd4, 0x72 => 0x5dd2, 0x73 => 0x5f4e, 0x74 => 0x61ff, 0x75 => 0x6524, 0x76 => 0x6b0a, 0x77 => 0x6b61, 0x78 => 0x7051, 0x79 => 0x7058, 0x7a => 0x7380, 0x7b => 0x74e4, 0x7c => 0x758a, 0x7d => 0x766e, 0x7e => 0x766c, 0xa1 => 0x79b3, 0xa2 => 0x7c60, 0xa3 => 0x7c5f, 0xa4 => 0x807e, 0xa5 => 0x807d, 0xa6 => 0x81df, 0xa7 => 0x8972, 0xa8 => 0x896f, 0xa9 => 0x89fc, 0xaa => 0x8b80, 0xab => 0x8d16, 0xac => 0x8d17, 0xad => 0x8e91, 0xae => 0x8e93, 0xaf => 0x8f61, 0xb0 => 0x9148, 0xb1 => 0x9444, 0xb2 => 0x9451, 0xb3 => 0x9452, 0xb4 => 0x973d, 0xb5 => 0x973e, 0xb6 => 0x97c3, 0xb7 => 0x97c1, 0xb8 => 0x986b, 0xb9 => 0x9955, 0xba => 0x9a55, 0xbb => 0x9a4d, 0xbc => 0x9ad2, 0xbd => 0x9b1a, 0xbe => 0x9c49, 0xbf => 0x9c31, 0xc0 => 0x9c3e, 0xc1 => 0x9c3b, 0xc2 => 0x9dd3, 0xc3 => 0x9dd7, 0xc4 => 0x9f34, 0xc5 => 0x9f6c, 0xc6 => 0x9f6a, 0xc7 => 0x9f94, 0xc8 => 0x56cc, 0xc9 => 0x5dd6, 0xca => 0x6200, 0xcb => 0x6523, 0xcc => 0x652b, 0xcd => 0x652a, 0xce => 0x66ec, 0xcf => 0x6b10, 0xd0 => 0x74da, 0xd1 => 0x7aca, 0xd2 => 0x7c64, 0xd3 => 0x7c63, 0xd4 => 0x7c65, 0xd5 => 0x7e93, 0xd6 => 0x7e96, 0xd7 => 0x7e94, 0xd8 => 0x81e2, 0xd9 => 0x8638, 0xda => 0x863f, 0xdb => 0x8831, 0xdc => 0x8b8a, 0xdd => 0x9090, 0xde => 0x908f, 0xdf => 0x9463, 0xe0 => 0x9460, 0xe1 => 0x9464, 0xe2 => 0x9768, 0xe3 => 0x986f, 0xe4 => 0x995c, 0xe5 => 0x9a5a, 0xe6 => 0x9a5b, 0xe7 => 0x9a57, 0xe8 => 0x9ad3, 0xe9 => 0x9ad4, 0xea => 0x9ad1, 0xeb => 0x9c54, 0xec => 0x9c57, 0xed => 0x9c56, 0xee => 0x9de5, 0xef => 0x9e9f, 0xf0 => 0x9ef4, 0xf1 => 0x56d1, 0xf2 => 0x58e9, 0xf3 => 0x652c, 0xf4 => 0x705e, 0xf5 => 0x7671, 0xf6 => 0x7672, 0xf7 => 0x77d7, 0xf8 => 0x7f50, 0xf9 => 0x7f88, 0xfa => 0x8836, 0xfb => 0x8839, 0xfc => 0x8862, 0xfd => 0x8b93, 0xfe => 0x8b92, }, 0xc6 => { 0x40 => 0x8b96, 0x41 => 0x8277, 0x42 => 0x8d1b, 0x43 => 0x91c0, 0x44 => 0x946a, 0x45 => 0x9742, 0x46 => 0x9748, 0x47 => 0x9744, 0x48 => 0x97c6, 0x49 => 0x9870, 0x4a => 0x9a5f, 0x4b => 0x9b22, 0x4c => 0x9b58, 0x4d => 0x9c5f, 0x4e => 0x9df9, 0x4f => 0x9dfa, 0x50 => 0x9e7c, 0x51 => 0x9e7d, 0x52 => 0x9f07, 0x53 => 0x9f77, 0x54 => 0x9f72, 0x55 => 0x5ef3, 0x56 => 0x6b16, 0x57 => 0x7063, 0x58 => 0x7c6c, 0x59 => 0x7c6e, 0x5a => 0x883b, 0x5b => 0x89c0, 0x5c => 0x8ea1, 0x5d => 0x91c1, 0x5e => 0x9472, 0x5f => 0x9470, 0x60 => 0x9871, 0x61 => 0x995e, 0x62 => 0x9ad6, 0x63 => 0x9b23, 0x64 => 0x9ecc, 0x65 => 0x7064, 0x66 => 0x77da, 0x67 => 0x8b9a, 0x68 => 0x9477, 0x69 => 0x97c9, 0x6a => 0x9a62, 0x6b => 0x9a65, 0x6c => 0x7e9c, 0x6d => 0x8b9c, 0x6e => 0x8eaa, 0x6f => 0x91c5, 0x70 => 0x947d, 0x71 => 0x947e, 0x72 => 0x947c, 0x73 => 0x9c77, 0x74 => 0x9c78, 0x75 => 0x9ef7, 0x76 => 0x8c54, 0x77 => 0x947f, 0x78 => 0x9e1a, 0x79 => 0x7228, 0x7a => 0x9a6a, 0x7b => 0x9b31, 0x7c => 0x9e1b, 0x7d => 0x9e1e, 0x7e => 0x7c72, }, 0xc9 => { 0x40 => 0x4e42, 0x41 => 0x4e5c, 0x42 => 0x51f5, 0x43 => 0x531a, 0x44 => 0x5382, 0x45 => 0x4e07, 0x46 => 0x4e0c, 0x47 => 0x4e47, 0x48 => 0x4e8d, 0x49 => 0x56d7, 0x4a => 0xfa0c, 0x4b => 0x5c6e, 0x4c => 0x5f73, 0x4d => 0x4e0f, 0x4e => 0x5187, 0x4f => 0x4e0e, 0x50 => 0x4e2e, 0x51 => 0x4e93, 0x52 => 0x4ec2, 0x53 => 0x4ec9, 0x54 => 0x4ec8, 0x55 => 0x5198, 0x56 => 0x52fc, 0x57 => 0x536c, 0x58 => 0x53b9, 0x59 => 0x5720, 0x5a => 0x5903, 0x5b => 0x592c, 0x5c => 0x5c10, 0x5d => 0x5dff, 0x5e => 0x65e1, 0x5f => 0x6bb3, 0x60 => 0x6bcc, 0x61 => 0x6c14, 0x62 => 0x723f, 0x63 => 0x4e31, 0x64 => 0x4e3c, 0x65 => 0x4ee8, 0x66 => 0x4edc, 0x67 => 0x4ee9, 0x68 => 0x4ee1, 0x69 => 0x4edd, 0x6a => 0x4eda, 0x6b => 0x520c, 0x6c => 0x531c, 0x6d => 0x534c, 0x6e => 0x5722, 0x6f => 0x5723, 0x70 => 0x5917, 0x71 => 0x592f, 0x72 => 0x5b81, 0x73 => 0x5b84, 0x74 => 0x5c12, 0x75 => 0x5c3b, 0x76 => 0x5c74, 0x77 => 0x5c73, 0x78 => 0x5e04, 0x79 => 0x5e80, 0x7a => 0x5e82, 0x7b => 0x5fc9, 0x7c => 0x6209, 0x7d => 0x6250, 0x7e => 0x6c15, 0xa1 => 0x6c36, 0xa2 => 0x6c43, 0xa3 => 0x6c3f, 0xa4 => 0x6c3b, 0xa5 => 0x72ae, 0xa6 => 0x72b0, 0xa7 => 0x738a, 0xa8 => 0x79b8, 0xa9 => 0x808a, 0xaa => 0x961e, 0xab => 0x4f0e, 0xac => 0x4f18, 0xad => 0x4f2c, 0xae => 0x4ef5, 0xaf => 0x4f14, 0xb0 => 0x4ef1, 0xb1 => 0x4f00, 0xb2 => 0x4ef7, 0xb3 => 0x4f08, 0xb4 => 0x4f1d, 0xb5 => 0x4f02, 0xb6 => 0x4f05, 0xb7 => 0x4f22, 0xb8 => 0x4f13, 0xb9 => 0x4f04, 0xba => 0x4ef4, 0xbb => 0x4f12, 0xbc => 0x51b1, 0xbd => 0x5213, 0xbe => 0x5209, 0xbf => 0x5210, 0xc0 => 0x52a6, 0xc1 => 0x5322, 0xc2 => 0x531f, 0xc3 => 0x534d, 0xc4 => 0x538a, 0xc5 => 0x5407, 0xc6 => 0x56e1, 0xc7 => 0x56df, 0xc8 => 0x572e, 0xc9 => 0x572a, 0xca => 0x5734, 0xcb => 0x593c, 0xcc => 0x5980, 0xcd => 0x597c, 0xce => 0x5985, 0xcf => 0x597b, 0xd0 => 0x597e, 0xd1 => 0x5977, 0xd2 => 0x597f, 0xd3 => 0x5b56, 0xd4 => 0x5c15, 0xd5 => 0x5c25, 0xd6 => 0x5c7c, 0xd7 => 0x5c7a, 0xd8 => 0x5c7b, 0xd9 => 0x5c7e, 0xda => 0x5ddf, 0xdb => 0x5e75, 0xdc => 0x5e84, 0xdd => 0x5f02, 0xde => 0x5f1a, 0xdf => 0x5f74, 0xe0 => 0x5fd5, 0xe1 => 0x5fd4, 0xe2 => 0x5fcf, 0xe3 => 0x625c, 0xe4 => 0x625e, 0xe5 => 0x6264, 0xe6 => 0x6261, 0xe7 => 0x6266, 0xe8 => 0x6262, 0xe9 => 0x6259, 0xea => 0x6260, 0xeb => 0x625a, 0xec => 0x6265, 0xed => 0x65ef, 0xee => 0x65ee, 0xef => 0x673e, 0xf0 => 0x6739, 0xf1 => 0x6738, 0xf2 => 0x673b, 0xf3 => 0x673a, 0xf4 => 0x673f, 0xf5 => 0x673c, 0xf6 => 0x6733, 0xf7 => 0x6c18, 0xf8 => 0x6c46, 0xf9 => 0x6c52, 0xfa => 0x6c5c, 0xfb => 0x6c4f, 0xfc => 0x6c4a, 0xfd => 0x6c54, 0xfe => 0x6c4b, }, 0xca => { 0x40 => 0x6c4c, 0x41 => 0x7071, 0x42 => 0x725e, 0x43 => 0x72b4, 0x44 => 0x72b5, 0x45 => 0x738e, 0x46 => 0x752a, 0x47 => 0x767f, 0x48 => 0x7a75, 0x49 => 0x7f51, 0x4a => 0x8278, 0x4b => 0x827c, 0x4c => 0x8280, 0x4d => 0x827d, 0x4e => 0x827f, 0x4f => 0x864d, 0x50 => 0x897e, 0x51 => 0x9099, 0x52 => 0x9097, 0x53 => 0x9098, 0x54 => 0x909b, 0x55 => 0x9094, 0x56 => 0x9622, 0x57 => 0x9624, 0x58 => 0x9620, 0x59 => 0x9623, 0x5a => 0x4f56, 0x5b => 0x4f3b, 0x5c => 0x4f62, 0x5d => 0x4f49, 0x5e => 0x4f53, 0x5f => 0x4f64, 0x60 => 0x4f3e, 0x61 => 0x4f67, 0x62 => 0x4f52, 0x63 => 0x4f5f, 0x64 => 0x4f41, 0x65 => 0x4f58, 0x66 => 0x4f2d, 0x67 => 0x4f33, 0x68 => 0x4f3f, 0x69 => 0x4f61, 0x6a => 0x518f, 0x6b => 0x51b9, 0x6c => 0x521c, 0x6d => 0x521e, 0x6e => 0x5221, 0x6f => 0x52ad, 0x70 => 0x52ae, 0x71 => 0x5309, 0x72 => 0x5363, 0x73 => 0x5372, 0x74 => 0x538e, 0x75 => 0x538f, 0x76 => 0x5430, 0x77 => 0x5437, 0x78 => 0x542a, 0x79 => 0x5454, 0x7a => 0x5445, 0x7b => 0x5419, 0x7c => 0x541c, 0x7d => 0x5425, 0x7e => 0x5418, 0xa1 => 0x543d, 0xa2 => 0x544f, 0xa3 => 0x5441, 0xa4 => 0x5428, 0xa5 => 0x5424, 0xa6 => 0x5447, 0xa7 => 0x56ee, 0xa8 => 0x56e7, 0xa9 => 0x56e5, 0xaa => 0x5741, 0xab => 0x5745, 0xac => 0x574c, 0xad => 0x5749, 0xae => 0x574b, 0xaf => 0x5752, 0xb0 => 0x5906, 0xb1 => 0x5940, 0xb2 => 0x59a6, 0xb3 => 0x5998, 0xb4 => 0x59a0, 0xb5 => 0x5997, 0xb6 => 0x598e, 0xb7 => 0x59a2, 0xb8 => 0x5990, 0xb9 => 0x598f, 0xba => 0x59a7, 0xbb => 0x59a1, 0xbc => 0x5b8e, 0xbd => 0x5b92, 0xbe => 0x5c28, 0xbf => 0x5c2a, 0xc0 => 0x5c8d, 0xc1 => 0x5c8f, 0xc2 => 0x5c88, 0xc3 => 0x5c8b, 0xc4 => 0x5c89, 0xc5 => 0x5c92, 0xc6 => 0x5c8a, 0xc7 => 0x5c86, 0xc8 => 0x5c93, 0xc9 => 0x5c95, 0xca => 0x5de0, 0xcb => 0x5e0a, 0xcc => 0x5e0e, 0xcd => 0x5e8b, 0xce => 0x5e89, 0xcf => 0x5e8c, 0xd0 => 0x5e88, 0xd1 => 0x5e8d, 0xd2 => 0x5f05, 0xd3 => 0x5f1d, 0xd4 => 0x5f78, 0xd5 => 0x5f76, 0xd6 => 0x5fd2, 0xd7 => 0x5fd1, 0xd8 => 0x5fd0, 0xd9 => 0x5fed, 0xda => 0x5fe8, 0xdb => 0x5fee, 0xdc => 0x5ff3, 0xdd => 0x5fe1, 0xde => 0x5fe4, 0xdf => 0x5fe3, 0xe0 => 0x5ffa, 0xe1 => 0x5fef, 0xe2 => 0x5ff7, 0xe3 => 0x5ffb, 0xe4 => 0x6000, 0xe5 => 0x5ff4, 0xe6 => 0x623a, 0xe7 => 0x6283, 0xe8 => 0x628c, 0xe9 => 0x628e, 0xea => 0x628f, 0xeb => 0x6294, 0xec => 0x6287, 0xed => 0x6271, 0xee => 0x627b, 0xef => 0x627a, 0xf0 => 0x6270, 0xf1 => 0x6281, 0xf2 => 0x6288, 0xf3 => 0x6277, 0xf4 => 0x627d, 0xf5 => 0x6272, 0xf6 => 0x6274, 0xf7 => 0x6537, 0xf8 => 0x65f0, 0xf9 => 0x65f4, 0xfa => 0x65f3, 0xfb => 0x65f2, 0xfc => 0x65f5, 0xfd => 0x6745, 0xfe => 0x6747, }, 0xcb => { 0x40 => 0x6759, 0x41 => 0x6755, 0x42 => 0x674c, 0x43 => 0x6748, 0x44 => 0x675d, 0x45 => 0x674d, 0x46 => 0x675a, 0x47 => 0x674b, 0x48 => 0x6bd0, 0x49 => 0x6c19, 0x4a => 0x6c1a, 0x4b => 0x6c78, 0x4c => 0x6c67, 0x4d => 0x6c6b, 0x4e => 0x6c84, 0x4f => 0x6c8b, 0x50 => 0x6c8f, 0x51 => 0x6c71, 0x52 => 0x6c6f, 0x53 => 0x6c69, 0x54 => 0x6c9a, 0x55 => 0x6c6d, 0x56 => 0x6c87, 0x57 => 0x6c95, 0x58 => 0x6c9c, 0x59 => 0x6c66, 0x5a => 0x6c73, 0x5b => 0x6c65, 0x5c => 0x6c7b, 0x5d => 0x6c8e, 0x5e => 0x7074, 0x5f => 0x707a, 0x60 => 0x7263, 0x61 => 0x72bf, 0x62 => 0x72bd, 0x63 => 0x72c3, 0x64 => 0x72c6, 0x65 => 0x72c1, 0x66 => 0x72ba, 0x67 => 0x72c5, 0x68 => 0x7395, 0x69 => 0x7397, 0x6a => 0x7393, 0x6b => 0x7394, 0x6c => 0x7392, 0x6d => 0x753a, 0x6e => 0x7539, 0x6f => 0x7594, 0x70 => 0x7595, 0x71 => 0x7681, 0x72 => 0x793d, 0x73 => 0x8034, 0x74 => 0x8095, 0x75 => 0x8099, 0x76 => 0x8090, 0x77 => 0x8092, 0x78 => 0x809c, 0x79 => 0x8290, 0x7a => 0x828f, 0x7b => 0x8285, 0x7c => 0x828e, 0x7d => 0x8291, 0x7e => 0x8293, 0xa1 => 0x828a, 0xa2 => 0x8283, 0xa3 => 0x8284, 0xa4 => 0x8c78, 0xa5 => 0x8fc9, 0xa6 => 0x8fbf, 0xa7 => 0x909f, 0xa8 => 0x90a1, 0xa9 => 0x90a5, 0xaa => 0x909e, 0xab => 0x90a7, 0xac => 0x90a0, 0xad => 0x9630, 0xae => 0x9628, 0xaf => 0x962f, 0xb0 => 0x962d, 0xb1 => 0x4e33, 0xb2 => 0x4f98, 0xb3 => 0x4f7c, 0xb4 => 0x4f85, 0xb5 => 0x4f7d, 0xb6 => 0x4f80, 0xb7 => 0x4f87, 0xb8 => 0x4f76, 0xb9 => 0x4f74, 0xba => 0x4f89, 0xbb => 0x4f84, 0xbc => 0x4f77, 0xbd => 0x4f4c, 0xbe => 0x4f97, 0xbf => 0x4f6a, 0xc0 => 0x4f9a, 0xc1 => 0x4f79, 0xc2 => 0x4f81, 0xc3 => 0x4f78, 0xc4 => 0x4f90, 0xc5 => 0x4f9c, 0xc6 => 0x4f94, 0xc7 => 0x4f9e, 0xc8 => 0x4f92, 0xc9 => 0x4f82, 0xca => 0x4f95, 0xcb => 0x4f6b, 0xcc => 0x4f6e, 0xcd => 0x519e, 0xce => 0x51bc, 0xcf => 0x51be, 0xd0 => 0x5235, 0xd1 => 0x5232, 0xd2 => 0x5233, 0xd3 => 0x5246, 0xd4 => 0x5231, 0xd5 => 0x52bc, 0xd6 => 0x530a, 0xd7 => 0x530b, 0xd8 => 0x533c, 0xd9 => 0x5392, 0xda => 0x5394, 0xdb => 0x5487, 0xdc => 0x547f, 0xdd => 0x5481, 0xde => 0x5491, 0xdf => 0x5482, 0xe0 => 0x5488, 0xe1 => 0x546b, 0xe2 => 0x547a, 0xe3 => 0x547e, 0xe4 => 0x5465, 0xe5 => 0x546c, 0xe6 => 0x5474, 0xe7 => 0x5466, 0xe8 => 0x548d, 0xe9 => 0x546f, 0xea => 0x5461, 0xeb => 0x5460, 0xec => 0x5498, 0xed => 0x5463, 0xee => 0x5467, 0xef => 0x5464, 0xf0 => 0x56f7, 0xf1 => 0x56f9, 0xf2 => 0x576f, 0xf3 => 0x5772, 0xf4 => 0x576d, 0xf5 => 0x576b, 0xf6 => 0x5771, 0xf7 => 0x5770, 0xf8 => 0x5776, 0xf9 => 0x5780, 0xfa => 0x5775, 0xfb => 0x577b, 0xfc => 0x5773, 0xfd => 0x5774, 0xfe => 0x5762, }, 0xcc => { 0x40 => 0x5768, 0x41 => 0x577d, 0x42 => 0x590c, 0x43 => 0x5945, 0x44 => 0x59b5, 0x45 => 0x59ba, 0x46 => 0x59cf, 0x47 => 0x59ce, 0x48 => 0x59b2, 0x49 => 0x59cc, 0x4a => 0x59c1, 0x4b => 0x59b6, 0x4c => 0x59bc, 0x4d => 0x59c3, 0x4e => 0x59d6, 0x4f => 0x59b1, 0x50 => 0x59bd, 0x51 => 0x59c0, 0x52 => 0x59c8, 0x53 => 0x59b4, 0x54 => 0x59c7, 0x55 => 0x5b62, 0x56 => 0x5b65, 0x57 => 0x5b93, 0x58 => 0x5b95, 0x59 => 0x5c44, 0x5a => 0x5c47, 0x5b => 0x5cae, 0x5c => 0x5ca4, 0x5d => 0x5ca0, 0x5e => 0x5cb5, 0x5f => 0x5caf, 0x60 => 0x5ca8, 0x61 => 0x5cac, 0x62 => 0x5c9f, 0x63 => 0x5ca3, 0x64 => 0x5cad, 0x65 => 0x5ca2, 0x66 => 0x5caa, 0x67 => 0x5ca7, 0x68 => 0x5c9d, 0x69 => 0x5ca5, 0x6a => 0x5cb6, 0x6b => 0x5cb0, 0x6c => 0x5ca6, 0x6d => 0x5e17, 0x6e => 0x5e14, 0x6f => 0x5e19, 0x70 => 0x5f28, 0x71 => 0x5f22, 0x72 => 0x5f23, 0x73 => 0x5f24, 0x74 => 0x5f54, 0x75 => 0x5f82, 0x76 => 0x5f7e, 0x77 => 0x5f7d, 0x78 => 0x5fde, 0x79 => 0x5fe5, 0x7a => 0x602d, 0x7b => 0x6026, 0x7c => 0x6019, 0x7d => 0x6032, 0x7e => 0x600b, 0xa1 => 0x6034, 0xa2 => 0x600a, 0xa3 => 0x6017, 0xa4 => 0x6033, 0xa5 => 0x601a, 0xa6 => 0x601e, 0xa7 => 0x602c, 0xa8 => 0x6022, 0xa9 => 0x600d, 0xaa => 0x6010, 0xab => 0x602e, 0xac => 0x6013, 0xad => 0x6011, 0xae => 0x600c, 0xaf => 0x6009, 0xb0 => 0x601c, 0xb1 => 0x6214, 0xb2 => 0x623d, 0xb3 => 0x62ad, 0xb4 => 0x62b4, 0xb5 => 0x62d1, 0xb6 => 0x62be, 0xb7 => 0x62aa, 0xb8 => 0x62b6, 0xb9 => 0x62ca, 0xba => 0x62ae, 0xbb => 0x62b3, 0xbc => 0x62af, 0xbd => 0x62bb, 0xbe => 0x62a9, 0xbf => 0x62b0, 0xc0 => 0x62b8, 0xc1 => 0x653d, 0xc2 => 0x65a8, 0xc3 => 0x65bb, 0xc4 => 0x6609, 0xc5 => 0x65fc, 0xc6 => 0x6604, 0xc7 => 0x6612, 0xc8 => 0x6608, 0xc9 => 0x65fb, 0xca => 0x6603, 0xcb => 0x660b, 0xcc => 0x660d, 0xcd => 0x6605, 0xce => 0x65fd, 0xcf => 0x6611, 0xd0 => 0x6610, 0xd1 => 0x66f6, 0xd2 => 0x670a, 0xd3 => 0x6785, 0xd4 => 0x676c, 0xd5 => 0x678e, 0xd6 => 0x6792, 0xd7 => 0x6776, 0xd8 => 0x677b, 0xd9 => 0x6798, 0xda => 0x6786, 0xdb => 0x6784, 0xdc => 0x6774, 0xdd => 0x678d, 0xde => 0x678c, 0xdf => 0x677a, 0xe0 => 0x679f, 0xe1 => 0x6791, 0xe2 => 0x6799, 0xe3 => 0x6783, 0xe4 => 0x677d, 0xe5 => 0x6781, 0xe6 => 0x6778, 0xe7 => 0x6779, 0xe8 => 0x6794, 0xe9 => 0x6b25, 0xea => 0x6b80, 0xeb => 0x6b7e, 0xec => 0x6bde, 0xed => 0x6c1d, 0xee => 0x6c93, 0xef => 0x6cec, 0xf0 => 0x6ceb, 0xf1 => 0x6cee, 0xf2 => 0x6cd9, 0xf3 => 0x6cb6, 0xf4 => 0x6cd4, 0xf5 => 0x6cad, 0xf6 => 0x6ce7, 0xf7 => 0x6cb7, 0xf8 => 0x6cd0, 0xf9 => 0x6cc2, 0xfa => 0x6cba, 0xfb => 0x6cc3, 0xfc => 0x6cc6, 0xfd => 0x6ced, 0xfe => 0x6cf2, }, 0xcd => { 0x40 => 0x6cd2, 0x41 => 0x6cdd, 0x42 => 0x6cb4, 0x43 => 0x6c8a, 0x44 => 0x6c9d, 0x45 => 0x6c80, 0x46 => 0x6cde, 0x47 => 0x6cc0, 0x48 => 0x6d30, 0x49 => 0x6ccd, 0x4a => 0x6cc7, 0x4b => 0x6cb0, 0x4c => 0x6cf9, 0x4d => 0x6ccf, 0x4e => 0x6ce9, 0x4f => 0x6cd1, 0x50 => 0x7094, 0x51 => 0x7098, 0x52 => 0x7085, 0x53 => 0x7093, 0x54 => 0x7086, 0x55 => 0x7084, 0x56 => 0x7091, 0x57 => 0x7096, 0x58 => 0x7082, 0x59 => 0x709a, 0x5a => 0x7083, 0x5b => 0x726a, 0x5c => 0x72d6, 0x5d => 0x72cb, 0x5e => 0x72d8, 0x5f => 0x72c9, 0x60 => 0x72dc, 0x61 => 0x72d2, 0x62 => 0x72d4, 0x63 => 0x72da, 0x64 => 0x72cc, 0x65 => 0x72d1, 0x66 => 0x73a4, 0x67 => 0x73a1, 0x68 => 0x73ad, 0x69 => 0x73a6, 0x6a => 0x73a2, 0x6b => 0x73a0, 0x6c => 0x73ac, 0x6d => 0x739d, 0x6e => 0x74dd, 0x6f => 0x74e8, 0x70 => 0x753f, 0x71 => 0x7540, 0x72 => 0x753e, 0x73 => 0x758c, 0x74 => 0x7598, 0x75 => 0x76af, 0x76 => 0x76f3, 0x77 => 0x76f1, 0x78 => 0x76f0, 0x79 => 0x76f5, 0x7a => 0x77f8, 0x7b => 0x77fc, 0x7c => 0x77f9, 0x7d => 0x77fb, 0x7e => 0x77fa, 0xa1 => 0x77f7, 0xa2 => 0x7942, 0xa3 => 0x793f, 0xa4 => 0x79c5, 0xa5 => 0x7a78, 0xa6 => 0x7a7b, 0xa7 => 0x7afb, 0xa8 => 0x7c75, 0xa9 => 0x7cfd, 0xaa => 0x8035, 0xab => 0x808f, 0xac => 0x80ae, 0xad => 0x80a3, 0xae => 0x80b8, 0xaf => 0x80b5, 0xb0 => 0x80ad, 0xb1 => 0x8220, 0xb2 => 0x82a0, 0xb3 => 0x82c0, 0xb4 => 0x82ab, 0xb5 => 0x829a, 0xb6 => 0x8298, 0xb7 => 0x829b, 0xb8 => 0x82b5, 0xb9 => 0x82a7, 0xba => 0x82ae, 0xbb => 0x82bc, 0xbc => 0x829e, 0xbd => 0x82ba, 0xbe => 0x82b4, 0xbf => 0x82a8, 0xc0 => 0x82a1, 0xc1 => 0x82a9, 0xc2 => 0x82c2, 0xc3 => 0x82a4, 0xc4 => 0x82c3, 0xc5 => 0x82b6, 0xc6 => 0x82a2, 0xc7 => 0x8670, 0xc8 => 0x866f, 0xc9 => 0x866d, 0xca => 0x866e, 0xcb => 0x8c56, 0xcc => 0x8fd2, 0xcd => 0x8fcb, 0xce => 0x8fd3, 0xcf => 0x8fcd, 0xd0 => 0x8fd6, 0xd1 => 0x8fd5, 0xd2 => 0x8fd7, 0xd3 => 0x90b2, 0xd4 => 0x90b4, 0xd5 => 0x90af, 0xd6 => 0x90b3, 0xd7 => 0x90b0, 0xd8 => 0x9639, 0xd9 => 0x963d, 0xda => 0x963c, 0xdb => 0x963a, 0xdc => 0x9643, 0xdd => 0x4fcd, 0xde => 0x4fc5, 0xdf => 0x4fd3, 0xe0 => 0x4fb2, 0xe1 => 0x4fc9, 0xe2 => 0x4fcb, 0xe3 => 0x4fc1, 0xe4 => 0x4fd4, 0xe5 => 0x4fdc, 0xe6 => 0x4fd9, 0xe7 => 0x4fbb, 0xe8 => 0x4fb3, 0xe9 => 0x4fdb, 0xea => 0x4fc7, 0xeb => 0x4fd6, 0xec => 0x4fba, 0xed => 0x4fc0, 0xee => 0x4fb9, 0xef => 0x4fec, 0xf0 => 0x5244, 0xf1 => 0x5249, 0xf2 => 0x52c0, 0xf3 => 0x52c2, 0xf4 => 0x533d, 0xf5 => 0x537c, 0xf6 => 0x5397, 0xf7 => 0x5396, 0xf8 => 0x5399, 0xf9 => 0x5398, 0xfa => 0x54ba, 0xfb => 0x54a1, 0xfc => 0x54ad, 0xfd => 0x54a5, 0xfe => 0x54cf, }, 0xce => { 0x40 => 0x54c3, 0x41 => 0x830d, 0x42 => 0x54b7, 0x43 => 0x54ae, 0x44 => 0x54d6, 0x45 => 0x54b6, 0x46 => 0x54c5, 0x47 => 0x54c6, 0x48 => 0x54a0, 0x49 => 0x5470, 0x4a => 0x54bc, 0x4b => 0x54a2, 0x4c => 0x54be, 0x4d => 0x5472, 0x4e => 0x54de, 0x4f => 0x54b0, 0x50 => 0x57b5, 0x51 => 0x579e, 0x52 => 0x579f, 0x53 => 0x57a4, 0x54 => 0x578c, 0x55 => 0x5797, 0x56 => 0x579d, 0x57 => 0x579b, 0x58 => 0x5794, 0x59 => 0x5798, 0x5a => 0x578f, 0x5b => 0x5799, 0x5c => 0x57a5, 0x5d => 0x579a, 0x5e => 0x5795, 0x5f => 0x58f4, 0x60 => 0x590d, 0x61 => 0x5953, 0x62 => 0x59e1, 0x63 => 0x59de, 0x64 => 0x59ee, 0x65 => 0x5a00, 0x66 => 0x59f1, 0x67 => 0x59dd, 0x68 => 0x59fa, 0x69 => 0x59fd, 0x6a => 0x59fc, 0x6b => 0x59f6, 0x6c => 0x59e4, 0x6d => 0x59f2, 0x6e => 0x59f7, 0x6f => 0x59db, 0x70 => 0x59e9, 0x71 => 0x59f3, 0x72 => 0x59f5, 0x73 => 0x59e0, 0x74 => 0x59fe, 0x75 => 0x59f4, 0x76 => 0x59ed, 0x77 => 0x5ba8, 0x78 => 0x5c4c, 0x79 => 0x5cd0, 0x7a => 0x5cd8, 0x7b => 0x5ccc, 0x7c => 0x5cd7, 0x7d => 0x5ccb, 0x7e => 0x5cdb, 0xa1 => 0x5cde, 0xa2 => 0x5cda, 0xa3 => 0x5cc9, 0xa4 => 0x5cc7, 0xa5 => 0x5cca, 0xa6 => 0x5cd6, 0xa7 => 0x5cd3, 0xa8 => 0x5cd4, 0xa9 => 0x5ccf, 0xaa => 0x5cc8, 0xab => 0x5cc6, 0xac => 0x5cce, 0xad => 0x5cdf, 0xae => 0x5cf8, 0xaf => 0x5df9, 0xb0 => 0x5e21, 0xb1 => 0x5e22, 0xb2 => 0x5e23, 0xb3 => 0x5e20, 0xb4 => 0x5e24, 0xb5 => 0x5eb0, 0xb6 => 0x5ea4, 0xb7 => 0x5ea2, 0xb8 => 0x5e9b, 0xb9 => 0x5ea3, 0xba => 0x5ea5, 0xbb => 0x5f07, 0xbc => 0x5f2e, 0xbd => 0x5f56, 0xbe => 0x5f86, 0xbf => 0x6037, 0xc0 => 0x6039, 0xc1 => 0x6054, 0xc2 => 0x6072, 0xc3 => 0x605e, 0xc4 => 0x6045, 0xc5 => 0x6053, 0xc6 => 0x6047, 0xc7 => 0x6049, 0xc8 => 0x605b, 0xc9 => 0x604c, 0xca => 0x6040, 0xcb => 0x6042, 0xcc => 0x605f, 0xcd => 0x6024, 0xce => 0x6044, 0xcf => 0x6058, 0xd0 => 0x6066, 0xd1 => 0x606e, 0xd2 => 0x6242, 0xd3 => 0x6243, 0xd4 => 0x62cf, 0xd5 => 0x630d, 0xd6 => 0x630b, 0xd7 => 0x62f5, 0xd8 => 0x630e, 0xd9 => 0x6303, 0xda => 0x62eb, 0xdb => 0x62f9, 0xdc => 0x630f, 0xdd => 0x630c, 0xde => 0x62f8, 0xdf => 0x62f6, 0xe0 => 0x6300, 0xe1 => 0x6313, 0xe2 => 0x6314, 0xe3 => 0x62fa, 0xe4 => 0x6315, 0xe5 => 0x62fb, 0xe6 => 0x62f0, 0xe7 => 0x6541, 0xe8 => 0x6543, 0xe9 => 0x65aa, 0xea => 0x65bf, 0xeb => 0x6636, 0xec => 0x6621, 0xed => 0x6632, 0xee => 0x6635, 0xef => 0x661c, 0xf0 => 0x6626, 0xf1 => 0x6622, 0xf2 => 0x6633, 0xf3 => 0x662b, 0xf4 => 0x663a, 0xf5 => 0x661d, 0xf6 => 0x6634, 0xf7 => 0x6639, 0xf8 => 0x662e, 0xf9 => 0x670f, 0xfa => 0x6710, 0xfb => 0x67c1, 0xfc => 0x67f2, 0xfd => 0x67c8, 0xfe => 0x67ba, }, 0xcf => { 0x40 => 0x67dc, 0x41 => 0x67bb, 0x42 => 0x67f8, 0x43 => 0x67d8, 0x44 => 0x67c0, 0x45 => 0x67b7, 0x46 => 0x67c5, 0x47 => 0x67eb, 0x48 => 0x67e4, 0x49 => 0x67df, 0x4a => 0x67b5, 0x4b => 0x67cd, 0x4c => 0x67b3, 0x4d => 0x67f7, 0x4e => 0x67f6, 0x4f => 0x67ee, 0x50 => 0x67e3, 0x51 => 0x67c2, 0x52 => 0x67b9, 0x53 => 0x67ce, 0x54 => 0x67e7, 0x55 => 0x67f0, 0x56 => 0x67b2, 0x57 => 0x67fc, 0x58 => 0x67c6, 0x59 => 0x67ed, 0x5a => 0x67cc, 0x5b => 0x67ae, 0x5c => 0x67e6, 0x5d => 0x67db, 0x5e => 0x67fa, 0x5f => 0x67c9, 0x60 => 0x67ca, 0x61 => 0x67c3, 0x62 => 0x67ea, 0x63 => 0x67cb, 0x64 => 0x6b28, 0x65 => 0x6b82, 0x66 => 0x6b84, 0x67 => 0x6bb6, 0x68 => 0x6bd6, 0x69 => 0x6bd8, 0x6a => 0x6be0, 0x6b => 0x6c20, 0x6c => 0x6c21, 0x6d => 0x6d28, 0x6e => 0x6d34, 0x6f => 0x6d2d, 0x70 => 0x6d1f, 0x71 => 0x6d3c, 0x72 => 0x6d3f, 0x73 => 0x6d12, 0x74 => 0x6d0a, 0x75 => 0x6cda, 0x76 => 0x6d33, 0x77 => 0x6d04, 0x78 => 0x6d19, 0x79 => 0x6d3a, 0x7a => 0x6d1a, 0x7b => 0x6d11, 0x7c => 0x6d00, 0x7d => 0x6d1d, 0x7e => 0x6d42, 0xa1 => 0x6d01, 0xa2 => 0x6d18, 0xa3 => 0x6d37, 0xa4 => 0x6d03, 0xa5 => 0x6d0f, 0xa6 => 0x6d40, 0xa7 => 0x6d07, 0xa8 => 0x6d20, 0xa9 => 0x6d2c, 0xaa => 0x6d08, 0xab => 0x6d22, 0xac => 0x6d09, 0xad => 0x6d10, 0xae => 0x70b7, 0xaf => 0x709f, 0xb0 => 0x70be, 0xb1 => 0x70b1, 0xb2 => 0x70b0, 0xb3 => 0x70a1, 0xb4 => 0x70b4, 0xb5 => 0x70b5, 0xb6 => 0x70a9, 0xb7 => 0x7241, 0xb8 => 0x7249, 0xb9 => 0x724a, 0xba => 0x726c, 0xbb => 0x7270, 0xbc => 0x7273, 0xbd => 0x726e, 0xbe => 0x72ca, 0xbf => 0x72e4, 0xc0 => 0x72e8, 0xc1 => 0x72eb, 0xc2 => 0x72df, 0xc3 => 0x72ea, 0xc4 => 0x72e6, 0xc5 => 0x72e3, 0xc6 => 0x7385, 0xc7 => 0x73cc, 0xc8 => 0x73c2, 0xc9 => 0x73c8, 0xca => 0x73c5, 0xcb => 0x73b9, 0xcc => 0x73b6, 0xcd => 0x73b5, 0xce => 0x73b4, 0xcf => 0x73eb, 0xd0 => 0x73bf, 0xd1 => 0x73c7, 0xd2 => 0x73be, 0xd3 => 0x73c3, 0xd4 => 0x73c6, 0xd5 => 0x73b8, 0xd6 => 0x73cb, 0xd7 => 0x74ec, 0xd8 => 0x74ee, 0xd9 => 0x752e, 0xda => 0x7547, 0xdb => 0x7548, 0xdc => 0x75a7, 0xdd => 0x75aa, 0xde => 0x7679, 0xdf => 0x76c4, 0xe0 => 0x7708, 0xe1 => 0x7703, 0xe2 => 0x7704, 0xe3 => 0x7705, 0xe4 => 0x770a, 0xe5 => 0x76f7, 0xe6 => 0x76fb, 0xe7 => 0x76fa, 0xe8 => 0x77e7, 0xe9 => 0x77e8, 0xea => 0x7806, 0xeb => 0x7811, 0xec => 0x7812, 0xed => 0x7805, 0xee => 0x7810, 0xef => 0x780f, 0xf0 => 0x780e, 0xf1 => 0x7809, 0xf2 => 0x7803, 0xf3 => 0x7813, 0xf4 => 0x794a, 0xf5 => 0x794c, 0xf6 => 0x794b, 0xf7 => 0x7945, 0xf8 => 0x7944, 0xf9 => 0x79d5, 0xfa => 0x79cd, 0xfb => 0x79cf, 0xfc => 0x79d6, 0xfd => 0x79ce, 0xfe => 0x7a80, }, 0xd0 => { 0x40 => 0x7a7e, 0x41 => 0x7ad1, 0x42 => 0x7b00, 0x43 => 0x7b01, 0x44 => 0x7c7a, 0x45 => 0x7c78, 0x46 => 0x7c79, 0x47 => 0x7c7f, 0x48 => 0x7c80, 0x49 => 0x7c81, 0x4a => 0x7d03, 0x4b => 0x7d08, 0x4c => 0x7d01, 0x4d => 0x7f58, 0x4e => 0x7f91, 0x4f => 0x7f8d, 0x50 => 0x7fbe, 0x51 => 0x8007, 0x52 => 0x800e, 0x53 => 0x800f, 0x54 => 0x8014, 0x55 => 0x8037, 0x56 => 0x80d8, 0x57 => 0x80c7, 0x58 => 0x80e0, 0x59 => 0x80d1, 0x5a => 0x80c8, 0x5b => 0x80c2, 0x5c => 0x80d0, 0x5d => 0x80c5, 0x5e => 0x80e3, 0x5f => 0x80d9, 0x60 => 0x80dc, 0x61 => 0x80ca, 0x62 => 0x80d5, 0x63 => 0x80c9, 0x64 => 0x80cf, 0x65 => 0x80d7, 0x66 => 0x80e6, 0x67 => 0x80cd, 0x68 => 0x81ff, 0x69 => 0x8221, 0x6a => 0x8294, 0x6b => 0x82d9, 0x6c => 0x82fe, 0x6d => 0x82f9, 0x6e => 0x8307, 0x6f => 0x82e8, 0x70 => 0x8300, 0x71 => 0x82d5, 0x72 => 0x833a, 0x73 => 0x82eb, 0x74 => 0x82d6, 0x75 => 0x82f4, 0x76 => 0x82ec, 0x77 => 0x82e1, 0x78 => 0x82f2, 0x79 => 0x82f5, 0x7a => 0x830c, 0x7b => 0x82fb, 0x7c => 0x82f6, 0x7d => 0x82f0, 0x7e => 0x82ea, 0xa1 => 0x82e4, 0xa2 => 0x82e0, 0xa3 => 0x82fa, 0xa4 => 0x82f3, 0xa5 => 0x82ed, 0xa6 => 0x8677, 0xa7 => 0x8674, 0xa8 => 0x867c, 0xa9 => 0x8673, 0xaa => 0x8841, 0xab => 0x884e, 0xac => 0x8867, 0xad => 0x886a, 0xae => 0x8869, 0xaf => 0x89d3, 0xb0 => 0x8a04, 0xb1 => 0x8a07, 0xb2 => 0x8d72, 0xb3 => 0x8fe3, 0xb4 => 0x8fe1, 0xb5 => 0x8fee, 0xb6 => 0x8fe0, 0xb7 => 0x90f1, 0xb8 => 0x90bd, 0xb9 => 0x90bf, 0xba => 0x90d5, 0xbb => 0x90c5, 0xbc => 0x90be, 0xbd => 0x90c7, 0xbe => 0x90cb, 0xbf => 0x90c8, 0xc0 => 0x91d4, 0xc1 => 0x91d3, 0xc2 => 0x9654, 0xc3 => 0x964f, 0xc4 => 0x9651, 0xc5 => 0x9653, 0xc6 => 0x964a, 0xc7 => 0x964e, 0xc8 => 0x501e, 0xc9 => 0x5005, 0xca => 0x5007, 0xcb => 0x5013, 0xcc => 0x5022, 0xcd => 0x5030, 0xce => 0x501b, 0xcf => 0x4ff5, 0xd0 => 0x4ff4, 0xd1 => 0x5033, 0xd2 => 0x5037, 0xd3 => 0x502c, 0xd4 => 0x4ff6, 0xd5 => 0x4ff7, 0xd6 => 0x5017, 0xd7 => 0x501c, 0xd8 => 0x5020, 0xd9 => 0x5027, 0xda => 0x5035, 0xdb => 0x502f, 0xdc => 0x5031, 0xdd => 0x500e, 0xde => 0x515a, 0xdf => 0x5194, 0xe0 => 0x5193, 0xe1 => 0x51ca, 0xe2 => 0x51c4, 0xe3 => 0x51c5, 0xe4 => 0x51c8, 0xe5 => 0x51ce, 0xe6 => 0x5261, 0xe7 => 0x525a, 0xe8 => 0x5252, 0xe9 => 0x525e, 0xea => 0x525f, 0xeb => 0x5255, 0xec => 0x5262, 0xed => 0x52cd, 0xee => 0x530e, 0xef => 0x539e, 0xf0 => 0x5526, 0xf1 => 0x54e2, 0xf2 => 0x5517, 0xf3 => 0x5512, 0xf4 => 0x54e7, 0xf5 => 0x54f3, 0xf6 => 0x54e4, 0xf7 => 0x551a, 0xf8 => 0x54ff, 0xf9 => 0x5504, 0xfa => 0x5508, 0xfb => 0x54eb, 0xfc => 0x5511, 0xfd => 0x5505, 0xfe => 0x54f1, }, 0xd1 => { 0x40 => 0x550a, 0x41 => 0x54fb, 0x42 => 0x54f7, 0x43 => 0x54f8, 0x44 => 0x54e0, 0x45 => 0x550e, 0x46 => 0x5503, 0x47 => 0x550b, 0x48 => 0x5701, 0x49 => 0x5702, 0x4a => 0x57cc, 0x4b => 0x5832, 0x4c => 0x57d5, 0x4d => 0x57d2, 0x4e => 0x57ba, 0x4f => 0x57c6, 0x50 => 0x57bd, 0x51 => 0x57bc, 0x52 => 0x57b8, 0x53 => 0x57b6, 0x54 => 0x57bf, 0x55 => 0x57c7, 0x56 => 0x57d0, 0x57 => 0x57b9, 0x58 => 0x57c1, 0x59 => 0x590e, 0x5a => 0x594a, 0x5b => 0x5a19, 0x5c => 0x5a16, 0x5d => 0x5a2d, 0x5e => 0x5a2e, 0x5f => 0x5a15, 0x60 => 0x5a0f, 0x61 => 0x5a17, 0x62 => 0x5a0a, 0x63 => 0x5a1e, 0x64 => 0x5a33, 0x65 => 0x5b6c, 0x66 => 0x5ba7, 0x67 => 0x5bad, 0x68 => 0x5bac, 0x69 => 0x5c03, 0x6a => 0x5c56, 0x6b => 0x5c54, 0x6c => 0x5cec, 0x6d => 0x5cff, 0x6e => 0x5cee, 0x6f => 0x5cf1, 0x70 => 0x5cf7, 0x71 => 0x5d00, 0x72 => 0x5cf9, 0x73 => 0x5e29, 0x74 => 0x5e28, 0x75 => 0x5ea8, 0x76 => 0x5eae, 0x77 => 0x5eaa, 0x78 => 0x5eac, 0x79 => 0x5f33, 0x7a => 0x5f30, 0x7b => 0x5f67, 0x7c => 0x605d, 0x7d => 0x605a, 0x7e => 0x6067, 0xa1 => 0x6041, 0xa2 => 0x60a2, 0xa3 => 0x6088, 0xa4 => 0x6080, 0xa5 => 0x6092, 0xa6 => 0x6081, 0xa7 => 0x609d, 0xa8 => 0x6083, 0xa9 => 0x6095, 0xaa => 0x609b, 0xab => 0x6097, 0xac => 0x6087, 0xad => 0x609c, 0xae => 0x608e, 0xaf => 0x6219, 0xb0 => 0x6246, 0xb1 => 0x62f2, 0xb2 => 0x6310, 0xb3 => 0x6356, 0xb4 => 0x632c, 0xb5 => 0x6344, 0xb6 => 0x6345, 0xb7 => 0x6336, 0xb8 => 0x6343, 0xb9 => 0x63e4, 0xba => 0x6339, 0xbb => 0x634b, 0xbc => 0x634a, 0xbd => 0x633c, 0xbe => 0x6329, 0xbf => 0x6341, 0xc0 => 0x6334, 0xc1 => 0x6358, 0xc2 => 0x6354, 0xc3 => 0x6359, 0xc4 => 0x632d, 0xc5 => 0x6347, 0xc6 => 0x6333, 0xc7 => 0x635a, 0xc8 => 0x6351, 0xc9 => 0x6338, 0xca => 0x6357, 0xcb => 0x6340, 0xcc => 0x6348, 0xcd => 0x654a, 0xce => 0x6546, 0xcf => 0x65c6, 0xd0 => 0x65c3, 0xd1 => 0x65c4, 0xd2 => 0x65c2, 0xd3 => 0x664a, 0xd4 => 0x665f, 0xd5 => 0x6647, 0xd6 => 0x6651, 0xd7 => 0x6712, 0xd8 => 0x6713, 0xd9 => 0x681f, 0xda => 0x681a, 0xdb => 0x6849, 0xdc => 0x6832, 0xdd => 0x6833, 0xde => 0x683b, 0xdf => 0x684b, 0xe0 => 0x684f, 0xe1 => 0x6816, 0xe2 => 0x6831, 0xe3 => 0x681c, 0xe4 => 0x6835, 0xe5 => 0x682b, 0xe6 => 0x682d, 0xe7 => 0x682f, 0xe8 => 0x684e, 0xe9 => 0x6844, 0xea => 0x6834, 0xeb => 0x681d, 0xec => 0x6812, 0xed => 0x6814, 0xee => 0x6826, 0xef => 0x6828, 0xf0 => 0x682e, 0xf1 => 0x684d, 0xf2 => 0x683a, 0xf3 => 0x6825, 0xf4 => 0x6820, 0xf5 => 0x6b2c, 0xf6 => 0x6b2f, 0xf7 => 0x6b2d, 0xf8 => 0x6b31, 0xf9 => 0x6b34, 0xfa => 0x6b6d, 0xfb => 0x8082, 0xfc => 0x6b88, 0xfd => 0x6be6, 0xfe => 0x6be4, }, 0xd2 => { 0x40 => 0x6be8, 0x41 => 0x6be3, 0x42 => 0x6be2, 0x43 => 0x6be7, 0x44 => 0x6c25, 0x45 => 0x6d7a, 0x46 => 0x6d63, 0x47 => 0x6d64, 0x48 => 0x6d76, 0x49 => 0x6d0d, 0x4a => 0x6d61, 0x4b => 0x6d92, 0x4c => 0x6d58, 0x4d => 0x6d62, 0x4e => 0x6d6d, 0x4f => 0x6d6f, 0x50 => 0x6d91, 0x51 => 0x6d8d, 0x52 => 0x6def, 0x53 => 0x6d7f, 0x54 => 0x6d86, 0x55 => 0x6d5e, 0x56 => 0x6d67, 0x57 => 0x6d60, 0x58 => 0x6d97, 0x59 => 0x6d70, 0x5a => 0x6d7c, 0x5b => 0x6d5f, 0x5c => 0x6d82, 0x5d => 0x6d98, 0x5e => 0x6d2f, 0x5f => 0x6d68, 0x60 => 0x6d8b, 0x61 => 0x6d7e, 0x62 => 0x6d80, 0x63 => 0x6d84, 0x64 => 0x6d16, 0x65 => 0x6d83, 0x66 => 0x6d7b, 0x67 => 0x6d7d, 0x68 => 0x6d75, 0x69 => 0x6d90, 0x6a => 0x70dc, 0x6b => 0x70d3, 0x6c => 0x70d1, 0x6d => 0x70dd, 0x6e => 0x70cb, 0x6f => 0x7f39, 0x70 => 0x70e2, 0x71 => 0x70d7, 0x72 => 0x70d2, 0x73 => 0x70de, 0x74 => 0x70e0, 0x75 => 0x70d4, 0x76 => 0x70cd, 0x77 => 0x70c5, 0x78 => 0x70c6, 0x79 => 0x70c7, 0x7a => 0x70da, 0x7b => 0x70ce, 0x7c => 0x70e1, 0x7d => 0x7242, 0x7e => 0x7278, 0xa1 => 0x7277, 0xa2 => 0x7276, 0xa3 => 0x7300, 0xa4 => 0x72fa, 0xa5 => 0x72f4, 0xa6 => 0x72fe, 0xa7 => 0x72f6, 0xa8 => 0x72f3, 0xa9 => 0x72fb, 0xaa => 0x7301, 0xab => 0x73d3, 0xac => 0x73d9, 0xad => 0x73e5, 0xae => 0x73d6, 0xaf => 0x73bc, 0xb0 => 0x73e7, 0xb1 => 0x73e3, 0xb2 => 0x73e9, 0xb3 => 0x73dc, 0xb4 => 0x73d2, 0xb5 => 0x73db, 0xb6 => 0x73d4, 0xb7 => 0x73dd, 0xb8 => 0x73da, 0xb9 => 0x73d7, 0xba => 0x73d8, 0xbb => 0x73e8, 0xbc => 0x74de, 0xbd => 0x74df, 0xbe => 0x74f4, 0xbf => 0x74f5, 0xc0 => 0x7521, 0xc1 => 0x755b, 0xc2 => 0x755f, 0xc3 => 0x75b0, 0xc4 => 0x75c1, 0xc5 => 0x75bb, 0xc6 => 0x75c4, 0xc7 => 0x75c0, 0xc8 => 0x75bf, 0xc9 => 0x75b6, 0xca => 0x75ba, 0xcb => 0x768a, 0xcc => 0x76c9, 0xcd => 0x771d, 0xce => 0x771b, 0xcf => 0x7710, 0xd0 => 0x7713, 0xd1 => 0x7712, 0xd2 => 0x7723, 0xd3 => 0x7711, 0xd4 => 0x7715, 0xd5 => 0x7719, 0xd6 => 0x771a, 0xd7 => 0x7722, 0xd8 => 0x7727, 0xd9 => 0x7823, 0xda => 0x782c, 0xdb => 0x7822, 0xdc => 0x7835, 0xdd => 0x782f, 0xde => 0x7828, 0xdf => 0x782e, 0xe0 => 0x782b, 0xe1 => 0x7821, 0xe2 => 0x7829, 0xe3 => 0x7833, 0xe4 => 0x782a, 0xe5 => 0x7831, 0xe6 => 0x7954, 0xe7 => 0x795b, 0xe8 => 0x794f, 0xe9 => 0x795c, 0xea => 0x7953, 0xeb => 0x7952, 0xec => 0x7951, 0xed => 0x79eb, 0xee => 0x79ec, 0xef => 0x79e0, 0xf0 => 0x79ee, 0xf1 => 0x79ed, 0xf2 => 0x79ea, 0xf3 => 0x79dc, 0xf4 => 0x79de, 0xf5 => 0x79dd, 0xf6 => 0x7a86, 0xf7 => 0x7a89, 0xf8 => 0x7a85, 0xf9 => 0x7a8b, 0xfa => 0x7a8c, 0xfb => 0x7a8a, 0xfc => 0x7a87, 0xfd => 0x7ad8, 0xfe => 0x7b10, }, 0xd3 => { 0x40 => 0x7b04, 0x41 => 0x7b13, 0x42 => 0x7b05, 0x43 => 0x7b0f, 0x44 => 0x7b08, 0x45 => 0x7b0a, 0x46 => 0x7b0e, 0x47 => 0x7b09, 0x48 => 0x7b12, 0x49 => 0x7c84, 0x4a => 0x7c91, 0x4b => 0x7c8a, 0x4c => 0x7c8c, 0x4d => 0x7c88, 0x4e => 0x7c8d, 0x4f => 0x7c85, 0x50 => 0x7d1e, 0x51 => 0x7d1d, 0x52 => 0x7d11, 0x53 => 0x7d0e, 0x54 => 0x7d18, 0x55 => 0x7d16, 0x56 => 0x7d13, 0x57 => 0x7d1f, 0x58 => 0x7d12, 0x59 => 0x7d0f, 0x5a => 0x7d0c, 0x5b => 0x7f5c, 0x5c => 0x7f61, 0x5d => 0x7f5e, 0x5e => 0x7f60, 0x5f => 0x7f5d, 0x60 => 0x7f5b, 0x61 => 0x7f96, 0x62 => 0x7f92, 0x63 => 0x7fc3, 0x64 => 0x7fc2, 0x65 => 0x7fc0, 0x66 => 0x8016, 0x67 => 0x803e, 0x68 => 0x8039, 0x69 => 0x80fa, 0x6a => 0x80f2, 0x6b => 0x80f9, 0x6c => 0x80f5, 0x6d => 0x8101, 0x6e => 0x80fb, 0x6f => 0x8100, 0x70 => 0x8201, 0x71 => 0x822f, 0x72 => 0x8225, 0x73 => 0x8333, 0x74 => 0x832d, 0x75 => 0x8344, 0x76 => 0x8319, 0x77 => 0x8351, 0x78 => 0x8325, 0x79 => 0x8356, 0x7a => 0x833f, 0x7b => 0x8341, 0x7c => 0x8326, 0x7d => 0x831c, 0x7e => 0x8322, 0xa1 => 0x8342, 0xa2 => 0x834e, 0xa3 => 0x831b, 0xa4 => 0x832a, 0xa5 => 0x8308, 0xa6 => 0x833c, 0xa7 => 0x834d, 0xa8 => 0x8316, 0xa9 => 0x8324, 0xaa => 0x8320, 0xab => 0x8337, 0xac => 0x832f, 0xad => 0x8329, 0xae => 0x8347, 0xaf => 0x8345, 0xb0 => 0x834c, 0xb1 => 0x8353, 0xb2 => 0x831e, 0xb3 => 0x832c, 0xb4 => 0x834b, 0xb5 => 0x8327, 0xb6 => 0x8348, 0xb7 => 0x8653, 0xb8 => 0x8652, 0xb9 => 0x86a2, 0xba => 0x86a8, 0xbb => 0x8696, 0xbc => 0x868d, 0xbd => 0x8691, 0xbe => 0x869e, 0xbf => 0x8687, 0xc0 => 0x8697, 0xc1 => 0x8686, 0xc2 => 0x868b, 0xc3 => 0x869a, 0xc4 => 0x8685, 0xc5 => 0x86a5, 0xc6 => 0x8699, 0xc7 => 0x86a1, 0xc8 => 0x86a7, 0xc9 => 0x8695, 0xca => 0x8698, 0xcb => 0x868e, 0xcc => 0x869d, 0xcd => 0x8690, 0xce => 0x8694, 0xcf => 0x8843, 0xd0 => 0x8844, 0xd1 => 0x886d, 0xd2 => 0x8875, 0xd3 => 0x8876, 0xd4 => 0x8872, 0xd5 => 0x8880, 0xd6 => 0x8871, 0xd7 => 0x887f, 0xd8 => 0x886f, 0xd9 => 0x8883, 0xda => 0x887e, 0xdb => 0x8874, 0xdc => 0x887c, 0xdd => 0x8a12, 0xde => 0x8c47, 0xdf => 0x8c57, 0xe0 => 0x8c7b, 0xe1 => 0x8ca4, 0xe2 => 0x8ca3, 0xe3 => 0x8d76, 0xe4 => 0x8d78, 0xe5 => 0x8db5, 0xe6 => 0x8db7, 0xe7 => 0x8db6, 0xe8 => 0x8ed1, 0xe9 => 0x8ed3, 0xea => 0x8ffe, 0xeb => 0x8ff5, 0xec => 0x9002, 0xed => 0x8fff, 0xee => 0x8ffb, 0xef => 0x9004, 0xf0 => 0x8ffc, 0xf1 => 0x8ff6, 0xf2 => 0x90d6, 0xf3 => 0x90e0, 0xf4 => 0x90d9, 0xf5 => 0x90da, 0xf6 => 0x90e3, 0xf7 => 0x90df, 0xf8 => 0x90e5, 0xf9 => 0x90d8, 0xfa => 0x90db, 0xfb => 0x90d7, 0xfc => 0x90dc, 0xfd => 0x90e4, 0xfe => 0x9150, }, 0xd4 => { 0x40 => 0x914e, 0x41 => 0x914f, 0x42 => 0x91d5, 0x43 => 0x91e2, 0x44 => 0x91da, 0x45 => 0x965c, 0x46 => 0x965f, 0x47 => 0x96bc, 0x48 => 0x98e3, 0x49 => 0x9adf, 0x4a => 0x9b2f, 0x4b => 0x4e7f, 0x4c => 0x5070, 0x4d => 0x506a, 0x4e => 0x5061, 0x4f => 0x505e, 0x50 => 0x5060, 0x51 => 0x5053, 0x52 => 0x504b, 0x53 => 0x505d, 0x54 => 0x5072, 0x55 => 0x5048, 0x56 => 0x504d, 0x57 => 0x5041, 0x58 => 0x505b, 0x59 => 0x504a, 0x5a => 0x5062, 0x5b => 0x5015, 0x5c => 0x5045, 0x5d => 0x505f, 0x5e => 0x5069, 0x5f => 0x506b, 0x60 => 0x5063, 0x61 => 0x5064, 0x62 => 0x5046, 0x63 => 0x5040, 0x64 => 0x506e, 0x65 => 0x5073, 0x66 => 0x5057, 0x67 => 0x5051, 0x68 => 0x51d0, 0x69 => 0x526b, 0x6a => 0x526d, 0x6b => 0x526c, 0x6c => 0x526e, 0x6d => 0x52d6, 0x6e => 0x52d3, 0x6f => 0x532d, 0x70 => 0x539c, 0x71 => 0x5575, 0x72 => 0x5576, 0x73 => 0x553c, 0x74 => 0x554d, 0x75 => 0x5550, 0x76 => 0x5534, 0x77 => 0x552a, 0x78 => 0x5551, 0x79 => 0x5562, 0x7a => 0x5536, 0x7b => 0x5535, 0x7c => 0x5530, 0x7d => 0x5552, 0x7e => 0x5545, 0xa1 => 0x550c, 0xa2 => 0x5532, 0xa3 => 0x5565, 0xa4 => 0x554e, 0xa5 => 0x5539, 0xa6 => 0x5548, 0xa7 => 0x552d, 0xa8 => 0x553b, 0xa9 => 0x5540, 0xaa => 0x554b, 0xab => 0x570a, 0xac => 0x5707, 0xad => 0x57fb, 0xae => 0x5814, 0xaf => 0x57e2, 0xb0 => 0x57f6, 0xb1 => 0x57dc, 0xb2 => 0x57f4, 0xb3 => 0x5800, 0xb4 => 0x57ed, 0xb5 => 0x57fd, 0xb6 => 0x5808, 0xb7 => 0x57f8, 0xb8 => 0x580b, 0xb9 => 0x57f3, 0xba => 0x57cf, 0xbb => 0x5807, 0xbc => 0x57ee, 0xbd => 0x57e3, 0xbe => 0x57f2, 0xbf => 0x57e5, 0xc0 => 0x57ec, 0xc1 => 0x57e1, 0xc2 => 0x580e, 0xc3 => 0x57fc, 0xc4 => 0x5810, 0xc5 => 0x57e7, 0xc6 => 0x5801, 0xc7 => 0x580c, 0xc8 => 0x57f1, 0xc9 => 0x57e9, 0xca => 0x57f0, 0xcb => 0x580d, 0xcc => 0x5804, 0xcd => 0x595c, 0xce => 0x5a60, 0xcf => 0x5a58, 0xd0 => 0x5a55, 0xd1 => 0x5a67, 0xd2 => 0x5a5e, 0xd3 => 0x5a38, 0xd4 => 0x5a35, 0xd5 => 0x5a6d, 0xd6 => 0x5a50, 0xd7 => 0x5a5f, 0xd8 => 0x5a65, 0xd9 => 0x5a6c, 0xda => 0x5a53, 0xdb => 0x5a64, 0xdc => 0x5a57, 0xdd => 0x5a43, 0xde => 0x5a5d, 0xdf => 0x5a52, 0xe0 => 0x5a44, 0xe1 => 0x5a5b, 0xe2 => 0x5a48, 0xe3 => 0x5a8e, 0xe4 => 0x5a3e, 0xe5 => 0x5a4d, 0xe6 => 0x5a39, 0xe7 => 0x5a4c, 0xe8 => 0x5a70, 0xe9 => 0x5a69, 0xea => 0x5a47, 0xeb => 0x5a51, 0xec => 0x5a56, 0xed => 0x5a42, 0xee => 0x5a5c, 0xef => 0x5b72, 0xf0 => 0x5b6e, 0xf1 => 0x5bc1, 0xf2 => 0x5bc0, 0xf3 => 0x5c59, 0xf4 => 0x5d1e, 0xf5 => 0x5d0b, 0xf6 => 0x5d1d, 0xf7 => 0x5d1a, 0xf8 => 0x5d20, 0xf9 => 0x5d0c, 0xfa => 0x5d28, 0xfb => 0x5d0d, 0xfc => 0x5d26, 0xfd => 0x5d25, 0xfe => 0x5d0f, }, 0xd5 => { 0x40 => 0x5d30, 0x41 => 0x5d12, 0x42 => 0x5d23, 0x43 => 0x5d1f, 0x44 => 0x5d2e, 0x45 => 0x5e3e, 0x46 => 0x5e34, 0x47 => 0x5eb1, 0x48 => 0x5eb4, 0x49 => 0x5eb9, 0x4a => 0x5eb2, 0x4b => 0x5eb3, 0x4c => 0x5f36, 0x4d => 0x5f38, 0x4e => 0x5f9b, 0x4f => 0x5f96, 0x50 => 0x5f9f, 0x51 => 0x608a, 0x52 => 0x6090, 0x53 => 0x6086, 0x54 => 0x60be, 0x55 => 0x60b0, 0x56 => 0x60ba, 0x57 => 0x60d3, 0x58 => 0x60d4, 0x59 => 0x60cf, 0x5a => 0x60e4, 0x5b => 0x60d9, 0x5c => 0x60dd, 0x5d => 0x60c8, 0x5e => 0x60b1, 0x5f => 0x60db, 0x60 => 0x60b7, 0x61 => 0x60ca, 0x62 => 0x60bf, 0x63 => 0x60c3, 0x64 => 0x60cd, 0x65 => 0x60c0, 0x66 => 0x6332, 0x67 => 0x6365, 0x68 => 0x638a, 0x69 => 0x6382, 0x6a => 0x637d, 0x6b => 0x63bd, 0x6c => 0x639e, 0x6d => 0x63ad, 0x6e => 0x639d, 0x6f => 0x6397, 0x70 => 0x63ab, 0x71 => 0x638e, 0x72 => 0x636f, 0x73 => 0x6387, 0x74 => 0x6390, 0x75 => 0x636e, 0x76 => 0x63af, 0x77 => 0x6375, 0x78 => 0x639c, 0x79 => 0x636d, 0x7a => 0x63ae, 0x7b => 0x637c, 0x7c => 0x63a4, 0x7d => 0x633b, 0x7e => 0x639f, 0xa1 => 0x6378, 0xa2 => 0x6385, 0xa3 => 0x6381, 0xa4 => 0x6391, 0xa5 => 0x638d, 0xa6 => 0x6370, 0xa7 => 0x6553, 0xa8 => 0x65cd, 0xa9 => 0x6665, 0xaa => 0x6661, 0xab => 0x665b, 0xac => 0x6659, 0xad => 0x665c, 0xae => 0x6662, 0xaf => 0x6718, 0xb0 => 0x6879, 0xb1 => 0x6887, 0xb2 => 0x6890, 0xb3 => 0x689c, 0xb4 => 0x686d, 0xb5 => 0x686e, 0xb6 => 0x68ae, 0xb7 => 0x68ab, 0xb8 => 0x6956, 0xb9 => 0x686f, 0xba => 0x68a3, 0xbb => 0x68ac, 0xbc => 0x68a9, 0xbd => 0x6875, 0xbe => 0x6874, 0xbf => 0x68b2, 0xc0 => 0x688f, 0xc1 => 0x6877, 0xc2 => 0x6892, 0xc3 => 0x687c, 0xc4 => 0x686b, 0xc5 => 0x6872, 0xc6 => 0x68aa, 0xc7 => 0x6880, 0xc8 => 0x6871, 0xc9 => 0x687e, 0xca => 0x689b, 0xcb => 0x6896, 0xcc => 0x688b, 0xcd => 0x68a0, 0xce => 0x6889, 0xcf => 0x68a4, 0xd0 => 0x6878, 0xd1 => 0x687b, 0xd2 => 0x6891, 0xd3 => 0x688c, 0xd4 => 0x688a, 0xd5 => 0x687d, 0xd6 => 0x6b36, 0xd7 => 0x6b33, 0xd8 => 0x6b37, 0xd9 => 0x6b38, 0xda => 0x6b91, 0xdb => 0x6b8f, 0xdc => 0x6b8d, 0xdd => 0x6b8e, 0xde => 0x6b8c, 0xdf => 0x6c2a, 0xe0 => 0x6dc0, 0xe1 => 0x6dab, 0xe2 => 0x6db4, 0xe3 => 0x6db3, 0xe4 => 0x6e74, 0xe5 => 0x6dac, 0xe6 => 0x6de9, 0xe7 => 0x6de2, 0xe8 => 0x6db7, 0xe9 => 0x6df6, 0xea => 0x6dd4, 0xeb => 0x6e00, 0xec => 0x6dc8, 0xed => 0x6de0, 0xee => 0x6ddf, 0xef => 0x6dd6, 0xf0 => 0x6dbe, 0xf1 => 0x6de5, 0xf2 => 0x6ddc, 0xf3 => 0x6ddd, 0xf4 => 0x6ddb, 0xf5 => 0x6df4, 0xf6 => 0x6dca, 0xf7 => 0x6dbd, 0xf8 => 0x6ded, 0xf9 => 0x6df0, 0xfa => 0x6dba, 0xfb => 0x6dd5, 0xfc => 0x6dc2, 0xfd => 0x6dcf, 0xfe => 0x6dc9, }, 0xd6 => { 0x40 => 0x6dd0, 0x41 => 0x6df2, 0x42 => 0x6dd3, 0x43 => 0x6dfd, 0x44 => 0x6dd7, 0x45 => 0x6dcd, 0x46 => 0x6de3, 0x47 => 0x6dbb, 0x48 => 0x70fa, 0x49 => 0x710d, 0x4a => 0x70f7, 0x4b => 0x7117, 0x4c => 0x70f4, 0x4d => 0x710c, 0x4e => 0x70f0, 0x4f => 0x7104, 0x50 => 0x70f3, 0x51 => 0x7110, 0x52 => 0x70fc, 0x53 => 0x70ff, 0x54 => 0x7106, 0x55 => 0x7113, 0x56 => 0x7100, 0x57 => 0x70f8, 0x58 => 0x70f6, 0x59 => 0x710b, 0x5a => 0x7102, 0x5b => 0x710e, 0x5c => 0x727e, 0x5d => 0x727b, 0x5e => 0x727c, 0x5f => 0x727f, 0x60 => 0x731d, 0x61 => 0x7317, 0x62 => 0x7307, 0x63 => 0x7311, 0x64 => 0x7318, 0x65 => 0x730a, 0x66 => 0x7308, 0x67 => 0x72ff, 0x68 => 0x730f, 0x69 => 0x731e, 0x6a => 0x7388, 0x6b => 0x73f6, 0x6c => 0x73f8, 0x6d => 0x73f5, 0x6e => 0x7404, 0x6f => 0x7401, 0x70 => 0x73fd, 0x71 => 0x7407, 0x72 => 0x7400, 0x73 => 0x73fa, 0x74 => 0x73fc, 0x75 => 0x73ff, 0x76 => 0x740c, 0x77 => 0x740b, 0x78 => 0x73f4, 0x79 => 0x7408, 0x7a => 0x7564, 0x7b => 0x7563, 0x7c => 0x75ce, 0x7d => 0x75d2, 0x7e => 0x75cf, 0xa1 => 0x75cb, 0xa2 => 0x75cc, 0xa3 => 0x75d1, 0xa4 => 0x75d0, 0xa5 => 0x768f, 0xa6 => 0x7689, 0xa7 => 0x76d3, 0xa8 => 0x7739, 0xa9 => 0x772f, 0xaa => 0x772d, 0xab => 0x7731, 0xac => 0x7732, 0xad => 0x7734, 0xae => 0x7733, 0xaf => 0x773d, 0xb0 => 0x7725, 0xb1 => 0x773b, 0xb2 => 0x7735, 0xb3 => 0x7848, 0xb4 => 0x7852, 0xb5 => 0x7849, 0xb6 => 0x784d, 0xb7 => 0x784a, 0xb8 => 0x784c, 0xb9 => 0x7826, 0xba => 0x7845, 0xbb => 0x7850, 0xbc => 0x7964, 0xbd => 0x7967, 0xbe => 0x7969, 0xbf => 0x796a, 0xc0 => 0x7963, 0xc1 => 0x796b, 0xc2 => 0x7961, 0xc3 => 0x79bb, 0xc4 => 0x79fa, 0xc5 => 0x79f8, 0xc6 => 0x79f6, 0xc7 => 0x79f7, 0xc8 => 0x7a8f, 0xc9 => 0x7a94, 0xca => 0x7a90, 0xcb => 0x7b35, 0xcc => 0x7b47, 0xcd => 0x7b34, 0xce => 0x7b25, 0xcf => 0x7b30, 0xd0 => 0x7b22, 0xd1 => 0x7b24, 0xd2 => 0x7b33, 0xd3 => 0x7b18, 0xd4 => 0x7b2a, 0xd5 => 0x7b1d, 0xd6 => 0x7b31, 0xd7 => 0x7b2b, 0xd8 => 0x7b2d, 0xd9 => 0x7b2f, 0xda => 0x7b32, 0xdb => 0x7b38, 0xdc => 0x7b1a, 0xdd => 0x7b23, 0xde => 0x7c94, 0xdf => 0x7c98, 0xe0 => 0x7c96, 0xe1 => 0x7ca3, 0xe2 => 0x7d35, 0xe3 => 0x7d3d, 0xe4 => 0x7d38, 0xe5 => 0x7d36, 0xe6 => 0x7d3a, 0xe7 => 0x7d45, 0xe8 => 0x7d2c, 0xe9 => 0x7d29, 0xea => 0x7d41, 0xeb => 0x7d47, 0xec => 0x7d3e, 0xed => 0x7d3f, 0xee => 0x7d4a, 0xef => 0x7d3b, 0xf0 => 0x7d28, 0xf1 => 0x7f63, 0xf2 => 0x7f95, 0xf3 => 0x7f9c, 0xf4 => 0x7f9d, 0xf5 => 0x7f9b, 0xf6 => 0x7fca, 0xf7 => 0x7fcb, 0xf8 => 0x7fcd, 0xf9 => 0x7fd0, 0xfa => 0x7fd1, 0xfb => 0x7fc7, 0xfc => 0x7fcf, 0xfd => 0x7fc9, 0xfe => 0x801f, }, 0xd7 => { 0x40 => 0x801e, 0x41 => 0x801b, 0x42 => 0x8047, 0x43 => 0x8043, 0x44 => 0x8048, 0x45 => 0x8118, 0x46 => 0x8125, 0x47 => 0x8119, 0x48 => 0x811b, 0x49 => 0x812d, 0x4a => 0x811f, 0x4b => 0x812c, 0x4c => 0x811e, 0x4d => 0x8121, 0x4e => 0x8115, 0x4f => 0x8127, 0x50 => 0x811d, 0x51 => 0x8122, 0x52 => 0x8211, 0x53 => 0x8238, 0x54 => 0x8233, 0x55 => 0x823a, 0x56 => 0x8234, 0x57 => 0x8232, 0x58 => 0x8274, 0x59 => 0x8390, 0x5a => 0x83a3, 0x5b => 0x83a8, 0x5c => 0x838d, 0x5d => 0x837a, 0x5e => 0x8373, 0x5f => 0x83a4, 0x60 => 0x8374, 0x61 => 0x838f, 0x62 => 0x8381, 0x63 => 0x8395, 0x64 => 0x8399, 0x65 => 0x8375, 0x66 => 0x8394, 0x67 => 0x83a9, 0x68 => 0x837d, 0x69 => 0x8383, 0x6a => 0x838c, 0x6b => 0x839d, 0x6c => 0x839b, 0x6d => 0x83aa, 0x6e => 0x838b, 0x6f => 0x837e, 0x70 => 0x83a5, 0x71 => 0x83af, 0x72 => 0x8388, 0x73 => 0x8397, 0x74 => 0x83b0, 0x75 => 0x837f, 0x76 => 0x83a6, 0x77 => 0x8387, 0x78 => 0x83ae, 0x79 => 0x8376, 0x7a => 0x839a, 0x7b => 0x8659, 0x7c => 0x8656, 0x7d => 0x86bf, 0x7e => 0x86b7, 0xa1 => 0x86c2, 0xa2 => 0x86c1, 0xa3 => 0x86c5, 0xa4 => 0x86ba, 0xa5 => 0x86b0, 0xa6 => 0x86c8, 0xa7 => 0x86b9, 0xa8 => 0x86b3, 0xa9 => 0x86b8, 0xaa => 0x86cc, 0xab => 0x86b4, 0xac => 0x86bb, 0xad => 0x86bc, 0xae => 0x86c3, 0xaf => 0x86bd, 0xb0 => 0x86be, 0xb1 => 0x8852, 0xb2 => 0x8889, 0xb3 => 0x8895, 0xb4 => 0x88a8, 0xb5 => 0x88a2, 0xb6 => 0x88aa, 0xb7 => 0x889a, 0xb8 => 0x8891, 0xb9 => 0x88a1, 0xba => 0x889f, 0xbb => 0x8898, 0xbc => 0x88a7, 0xbd => 0x8899, 0xbe => 0x889b, 0xbf => 0x8897, 0xc0 => 0x88a4, 0xc1 => 0x88ac, 0xc2 => 0x888c, 0xc3 => 0x8893, 0xc4 => 0x888e, 0xc5 => 0x8982, 0xc6 => 0x89d6, 0xc7 => 0x89d9, 0xc8 => 0x89d5, 0xc9 => 0x8a30, 0xca => 0x8a27, 0xcb => 0x8a2c, 0xcc => 0x8a1e, 0xcd => 0x8c39, 0xce => 0x8c3b, 0xcf => 0x8c5c, 0xd0 => 0x8c5d, 0xd1 => 0x8c7d, 0xd2 => 0x8ca5, 0xd3 => 0x8d7d, 0xd4 => 0x8d7b, 0xd5 => 0x8d79, 0xd6 => 0x8dbc, 0xd7 => 0x8dc2, 0xd8 => 0x8db9, 0xd9 => 0x8dbf, 0xda => 0x8dc1, 0xdb => 0x8ed8, 0xdc => 0x8ede, 0xdd => 0x8edd, 0xde => 0x8edc, 0xdf => 0x8ed7, 0xe0 => 0x8ee0, 0xe1 => 0x8ee1, 0xe2 => 0x9024, 0xe3 => 0x900b, 0xe4 => 0x9011, 0xe5 => 0x901c, 0xe6 => 0x900c, 0xe7 => 0x9021, 0xe8 => 0x90ef, 0xe9 => 0x90ea, 0xea => 0x90f0, 0xeb => 0x90f4, 0xec => 0x90f2, 0xed => 0x90f3, 0xee => 0x90d4, 0xef => 0x90eb, 0xf0 => 0x90ec, 0xf1 => 0x90e9, 0xf2 => 0x9156, 0xf3 => 0x9158, 0xf4 => 0x915a, 0xf5 => 0x9153, 0xf6 => 0x9155, 0xf7 => 0x91ec, 0xf8 => 0x91f4, 0xf9 => 0x91f1, 0xfa => 0x91f3, 0xfb => 0x91f8, 0xfc => 0x91e4, 0xfd => 0x91f9, 0xfe => 0x91ea, }, 0xd8 => { 0x40 => 0x91eb, 0x41 => 0x91f7, 0x42 => 0x91e8, 0x43 => 0x91ee, 0x44 => 0x957a, 0x45 => 0x9586, 0x46 => 0x9588, 0x47 => 0x967c, 0x48 => 0x966d, 0x49 => 0x966b, 0x4a => 0x9671, 0x4b => 0x966f, 0x4c => 0x96bf, 0x4d => 0x976a, 0x4e => 0x9804, 0x4f => 0x98e5, 0x50 => 0x9997, 0x51 => 0x509b, 0x52 => 0x5095, 0x53 => 0x5094, 0x54 => 0x509e, 0x55 => 0x508b, 0x56 => 0x50a3, 0x57 => 0x5083, 0x58 => 0x508c, 0x59 => 0x508e, 0x5a => 0x509d, 0x5b => 0x5068, 0x5c => 0x509c, 0x5d => 0x5092, 0x5e => 0x5082, 0x5f => 0x5087, 0x60 => 0x515f, 0x61 => 0x51d4, 0x62 => 0x5312, 0x63 => 0x5311, 0x64 => 0x53a4, 0x65 => 0x53a7, 0x66 => 0x5591, 0x67 => 0x55a8, 0x68 => 0x55a5, 0x69 => 0x55ad, 0x6a => 0x5577, 0x6b => 0x5645, 0x6c => 0x55a2, 0x6d => 0x5593, 0x6e => 0x5588, 0x6f => 0x558f, 0x70 => 0x55b5, 0x71 => 0x5581, 0x72 => 0x55a3, 0x73 => 0x5592, 0x74 => 0x55a4, 0x75 => 0x557d, 0x76 => 0x558c, 0x77 => 0x55a6, 0x78 => 0x557f, 0x79 => 0x5595, 0x7a => 0x55a1, 0x7b => 0x558e, 0x7c => 0x570c, 0x7d => 0x5829, 0x7e => 0x5837, 0xa1 => 0x5819, 0xa2 => 0x581e, 0xa3 => 0x5827, 0xa4 => 0x5823, 0xa5 => 0x5828, 0xa6 => 0x57f5, 0xa7 => 0x5848, 0xa8 => 0x5825, 0xa9 => 0x581c, 0xaa => 0x581b, 0xab => 0x5833, 0xac => 0x583f, 0xad => 0x5836, 0xae => 0x582e, 0xaf => 0x5839, 0xb0 => 0x5838, 0xb1 => 0x582d, 0xb2 => 0x582c, 0xb3 => 0x583b, 0xb4 => 0x5961, 0xb5 => 0x5aaf, 0xb6 => 0x5a94, 0xb7 => 0x5a9f, 0xb8 => 0x5a7a, 0xb9 => 0x5aa2, 0xba => 0x5a9e, 0xbb => 0x5a78, 0xbc => 0x5aa6, 0xbd => 0x5a7c, 0xbe => 0x5aa5, 0xbf => 0x5aac, 0xc0 => 0x5a95, 0xc1 => 0x5aae, 0xc2 => 0x5a37, 0xc3 => 0x5a84, 0xc4 => 0x5a8a, 0xc5 => 0x5a97, 0xc6 => 0x5a83, 0xc7 => 0x5a8b, 0xc8 => 0x5aa9, 0xc9 => 0x5a7b, 0xca => 0x5a7d, 0xcb => 0x5a8c, 0xcc => 0x5a9c, 0xcd => 0x5a8f, 0xce => 0x5a93, 0xcf => 0x5a9d, 0xd0 => 0x5bea, 0xd1 => 0x5bcd, 0xd2 => 0x5bcb, 0xd3 => 0x5bd4, 0xd4 => 0x5bd1, 0xd5 => 0x5bca, 0xd6 => 0x5bce, 0xd7 => 0x5c0c, 0xd8 => 0x5c30, 0xd9 => 0x5d37, 0xda => 0x5d43, 0xdb => 0x5d6b, 0xdc => 0x5d41, 0xdd => 0x5d4b, 0xde => 0x5d3f, 0xdf => 0x5d35, 0xe0 => 0x5d51, 0xe1 => 0x5d4e, 0xe2 => 0x5d55, 0xe3 => 0x5d33, 0xe4 => 0x5d3a, 0xe5 => 0x5d52, 0xe6 => 0x5d3d, 0xe7 => 0x5d31, 0xe8 => 0x5d59, 0xe9 => 0x5d42, 0xea => 0x5d39, 0xeb => 0x5d49, 0xec => 0x5d38, 0xed => 0x5d3c, 0xee => 0x5d32, 0xef => 0x5d36, 0xf0 => 0x5d40, 0xf1 => 0x5d45, 0xf2 => 0x5e44, 0xf3 => 0x5e41, 0xf4 => 0x5f58, 0xf5 => 0x5fa6, 0xf6 => 0x5fa5, 0xf7 => 0x5fab, 0xf8 => 0x60c9, 0xf9 => 0x60b9, 0xfa => 0x60cc, 0xfb => 0x60e2, 0xfc => 0x60ce, 0xfd => 0x60c4, 0xfe => 0x6114, }, 0xd9 => { 0x40 => 0x60f2, 0x41 => 0x610a, 0x42 => 0x6116, 0x43 => 0x6105, 0x44 => 0x60f5, 0x45 => 0x6113, 0x46 => 0x60f8, 0x47 => 0x60fc, 0x48 => 0x60fe, 0x49 => 0x60c1, 0x4a => 0x6103, 0x4b => 0x6118, 0x4c => 0x611d, 0x4d => 0x6110, 0x4e => 0x60ff, 0x4f => 0x6104, 0x50 => 0x610b, 0x51 => 0x624a, 0x52 => 0x6394, 0x53 => 0x63b1, 0x54 => 0x63b0, 0x55 => 0x63ce, 0x56 => 0x63e5, 0x57 => 0x63e8, 0x58 => 0x63ef, 0x59 => 0x63c3, 0x5a => 0x649d, 0x5b => 0x63f3, 0x5c => 0x63ca, 0x5d => 0x63e0, 0x5e => 0x63f6, 0x5f => 0x63d5, 0x60 => 0x63f2, 0x61 => 0x63f5, 0x62 => 0x6461, 0x63 => 0x63df, 0x64 => 0x63be, 0x65 => 0x63dd, 0x66 => 0x63dc, 0x67 => 0x63c4, 0x68 => 0x63d8, 0x69 => 0x63d3, 0x6a => 0x63c2, 0x6b => 0x63c7, 0x6c => 0x63cc, 0x6d => 0x63cb, 0x6e => 0x63c8, 0x6f => 0x63f0, 0x70 => 0x63d7, 0x71 => 0x63d9, 0x72 => 0x6532, 0x73 => 0x6567, 0x74 => 0x656a, 0x75 => 0x6564, 0x76 => 0x655c, 0x77 => 0x6568, 0x78 => 0x6565, 0x79 => 0x658c, 0x7a => 0x659d, 0x7b => 0x659e, 0x7c => 0x65ae, 0x7d => 0x65d0, 0x7e => 0x65d2, 0xa1 => 0x667c, 0xa2 => 0x666c, 0xa3 => 0x667b, 0xa4 => 0x6680, 0xa5 => 0x6671, 0xa6 => 0x6679, 0xa7 => 0x666a, 0xa8 => 0x6672, 0xa9 => 0x6701, 0xaa => 0x690c, 0xab => 0x68d3, 0xac => 0x6904, 0xad => 0x68dc, 0xae => 0x692a, 0xaf => 0x68ec, 0xb0 => 0x68ea, 0xb1 => 0x68f1, 0xb2 => 0x690f, 0xb3 => 0x68d6, 0xb4 => 0x68f7, 0xb5 => 0x68eb, 0xb6 => 0x68e4, 0xb7 => 0x68f6, 0xb8 => 0x6913, 0xb9 => 0x6910, 0xba => 0x68f3, 0xbb => 0x68e1, 0xbc => 0x6907, 0xbd => 0x68cc, 0xbe => 0x6908, 0xbf => 0x6970, 0xc0 => 0x68b4, 0xc1 => 0x6911, 0xc2 => 0x68ef, 0xc3 => 0x68c6, 0xc4 => 0x6914, 0xc5 => 0x68f8, 0xc6 => 0x68d0, 0xc7 => 0x68fd, 0xc8 => 0x68fc, 0xc9 => 0x68e8, 0xca => 0x690b, 0xcb => 0x690a, 0xcc => 0x6917, 0xcd => 0x68ce, 0xce => 0x68c8, 0xcf => 0x68dd, 0xd0 => 0x68de, 0xd1 => 0x68e6, 0xd2 => 0x68f4, 0xd3 => 0x68d1, 0xd4 => 0x6906, 0xd5 => 0x68d4, 0xd6 => 0x68e9, 0xd7 => 0x6915, 0xd8 => 0x6925, 0xd9 => 0x68c7, 0xda => 0x6b39, 0xdb => 0x6b3b, 0xdc => 0x6b3f, 0xdd => 0x6b3c, 0xde => 0x6b94, 0xdf => 0x6b97, 0xe0 => 0x6b99, 0xe1 => 0x6b95, 0xe2 => 0x6bbd, 0xe3 => 0x6bf0, 0xe4 => 0x6bf2, 0xe5 => 0x6bf3, 0xe6 => 0x6c30, 0xe7 => 0x6dfc, 0xe8 => 0x6e46, 0xe9 => 0x6e47, 0xea => 0x6e1f, 0xeb => 0x6e49, 0xec => 0x6e88, 0xed => 0x6e3c, 0xee => 0x6e3d, 0xef => 0x6e45, 0xf0 => 0x6e62, 0xf1 => 0x6e2b, 0xf2 => 0x6e3f, 0xf3 => 0x6e41, 0xf4 => 0x6e5d, 0xf5 => 0x6e73, 0xf6 => 0x6e1c, 0xf7 => 0x6e33, 0xf8 => 0x6e4b, 0xf9 => 0x6e40, 0xfa => 0x6e51, 0xfb => 0x6e3b, 0xfc => 0x6e03, 0xfd => 0x6e2e, 0xfe => 0x6e5e, }, 0xda => { 0x40 => 0x6e68, 0x41 => 0x6e5c, 0x42 => 0x6e61, 0x43 => 0x6e31, 0x44 => 0x6e28, 0x45 => 0x6e60, 0x46 => 0x6e71, 0x47 => 0x6e6b, 0x48 => 0x6e39, 0x49 => 0x6e22, 0x4a => 0x6e30, 0x4b => 0x6e53, 0x4c => 0x6e65, 0x4d => 0x6e27, 0x4e => 0x6e78, 0x4f => 0x6e64, 0x50 => 0x6e77, 0x51 => 0x6e55, 0x52 => 0x6e79, 0x53 => 0x6e52, 0x54 => 0x6e66, 0x55 => 0x6e35, 0x56 => 0x6e36, 0x57 => 0x6e5a, 0x58 => 0x7120, 0x59 => 0x711e, 0x5a => 0x712f, 0x5b => 0x70fb, 0x5c => 0x712e, 0x5d => 0x7131, 0x5e => 0x7123, 0x5f => 0x7125, 0x60 => 0x7122, 0x61 => 0x7132, 0x62 => 0x711f, 0x63 => 0x7128, 0x64 => 0x713a, 0x65 => 0x711b, 0x66 => 0x724b, 0x67 => 0x725a, 0x68 => 0x7288, 0x69 => 0x7289, 0x6a => 0x7286, 0x6b => 0x7285, 0x6c => 0x728b, 0x6d => 0x7312, 0x6e => 0x730b, 0x6f => 0x7330, 0x70 => 0x7322, 0x71 => 0x7331, 0x72 => 0x7333, 0x73 => 0x7327, 0x74 => 0x7332, 0x75 => 0x732d, 0x76 => 0x7326, 0x77 => 0x7323, 0x78 => 0x7335, 0x79 => 0x730c, 0x7a => 0x742e, 0x7b => 0x742c, 0x7c => 0x7430, 0x7d => 0x742b, 0x7e => 0x7416, 0xa1 => 0x741a, 0xa2 => 0x7421, 0xa3 => 0x742d, 0xa4 => 0x7431, 0xa5 => 0x7424, 0xa6 => 0x7423, 0xa7 => 0x741d, 0xa8 => 0x7429, 0xa9 => 0x7420, 0xaa => 0x7432, 0xab => 0x74fb, 0xac => 0x752f, 0xad => 0x756f, 0xae => 0x756c, 0xaf => 0x75e7, 0xb0 => 0x75da, 0xb1 => 0x75e1, 0xb2 => 0x75e6, 0xb3 => 0x75dd, 0xb4 => 0x75df, 0xb5 => 0x75e4, 0xb6 => 0x75d7, 0xb7 => 0x7695, 0xb8 => 0x7692, 0xb9 => 0x76da, 0xba => 0x7746, 0xbb => 0x7747, 0xbc => 0x7744, 0xbd => 0x774d, 0xbe => 0x7745, 0xbf => 0x774a, 0xc0 => 0x774e, 0xc1 => 0x774b, 0xc2 => 0x774c, 0xc3 => 0x77de, 0xc4 => 0x77ec, 0xc5 => 0x7860, 0xc6 => 0x7864, 0xc7 => 0x7865, 0xc8 => 0x785c, 0xc9 => 0x786d, 0xca => 0x7871, 0xcb => 0x786a, 0xcc => 0x786e, 0xcd => 0x7870, 0xce => 0x7869, 0xcf => 0x7868, 0xd0 => 0x785e, 0xd1 => 0x7862, 0xd2 => 0x7974, 0xd3 => 0x7973, 0xd4 => 0x7972, 0xd5 => 0x7970, 0xd6 => 0x7a02, 0xd7 => 0x7a0a, 0xd8 => 0x7a03, 0xd9 => 0x7a0c, 0xda => 0x7a04, 0xdb => 0x7a99, 0xdc => 0x7ae6, 0xdd => 0x7ae4, 0xde => 0x7b4a, 0xdf => 0x7b3b, 0xe0 => 0x7b44, 0xe1 => 0x7b48, 0xe2 => 0x7b4c, 0xe3 => 0x7b4e, 0xe4 => 0x7b40, 0xe5 => 0x7b58, 0xe6 => 0x7b45, 0xe7 => 0x7ca2, 0xe8 => 0x7c9e, 0xe9 => 0x7ca8, 0xea => 0x7ca1, 0xeb => 0x7d58, 0xec => 0x7d6f, 0xed => 0x7d63, 0xee => 0x7d53, 0xef => 0x7d56, 0xf0 => 0x7d67, 0xf1 => 0x7d6a, 0xf2 => 0x7d4f, 0xf3 => 0x7d6d, 0xf4 => 0x7d5c, 0xf5 => 0x7d6b, 0xf6 => 0x7d52, 0xf7 => 0x7d54, 0xf8 => 0x7d69, 0xf9 => 0x7d51, 0xfa => 0x7d5f, 0xfb => 0x7d4e, 0xfc => 0x7f3e, 0xfd => 0x7f3f, 0xfe => 0x7f65, }, 0xdb => { 0x40 => 0x7f66, 0x41 => 0x7fa2, 0x42 => 0x7fa0, 0x43 => 0x7fa1, 0x44 => 0x7fd7, 0x45 => 0x8051, 0x46 => 0x804f, 0x47 => 0x8050, 0x48 => 0x80fe, 0x49 => 0x80d4, 0x4a => 0x8143, 0x4b => 0x814a, 0x4c => 0x8152, 0x4d => 0x814f, 0x4e => 0x8147, 0x4f => 0x813d, 0x50 => 0x814d, 0x51 => 0x813a, 0x52 => 0x81e6, 0x53 => 0x81ee, 0x54 => 0x81f7, 0x55 => 0x81f8, 0x56 => 0x81f9, 0x57 => 0x8204, 0x58 => 0x823c, 0x59 => 0x823d, 0x5a => 0x823f, 0x5b => 0x8275, 0x5c => 0x833b, 0x5d => 0x83cf, 0x5e => 0x83f9, 0x5f => 0x8423, 0x60 => 0x83c0, 0x61 => 0x83e8, 0x62 => 0x8412, 0x63 => 0x83e7, 0x64 => 0x83e4, 0x65 => 0x83fc, 0x66 => 0x83f6, 0x67 => 0x8410, 0x68 => 0x83c6, 0x69 => 0x83c8, 0x6a => 0x83eb, 0x6b => 0x83e3, 0x6c => 0x83bf, 0x6d => 0x8401, 0x6e => 0x83dd, 0x6f => 0x83e5, 0x70 => 0x83d8, 0x71 => 0x83ff, 0x72 => 0x83e1, 0x73 => 0x83cb, 0x74 => 0x83ce, 0x75 => 0x83d6, 0x76 => 0x83f5, 0x77 => 0x83c9, 0x78 => 0x8409, 0x79 => 0x840f, 0x7a => 0x83de, 0x7b => 0x8411, 0x7c => 0x8406, 0x7d => 0x83c2, 0x7e => 0x83f3, 0xa1 => 0x83d5, 0xa2 => 0x83fa, 0xa3 => 0x83c7, 0xa4 => 0x83d1, 0xa5 => 0x83ea, 0xa6 => 0x8413, 0xa7 => 0x83c3, 0xa8 => 0x83ec, 0xa9 => 0x83ee, 0xaa => 0x83c4, 0xab => 0x83fb, 0xac => 0x83d7, 0xad => 0x83e2, 0xae => 0x841b, 0xaf => 0x83db, 0xb0 => 0x83fe, 0xb1 => 0x86d8, 0xb2 => 0x86e2, 0xb3 => 0x86e6, 0xb4 => 0x86d3, 0xb5 => 0x86e3, 0xb6 => 0x86da, 0xb7 => 0x86ea, 0xb8 => 0x86dd, 0xb9 => 0x86eb, 0xba => 0x86dc, 0xbb => 0x86ec, 0xbc => 0x86e9, 0xbd => 0x86d7, 0xbe => 0x86e8, 0xbf => 0x86d1, 0xc0 => 0x8848, 0xc1 => 0x8856, 0xc2 => 0x8855, 0xc3 => 0x88ba, 0xc4 => 0x88d7, 0xc5 => 0x88b9, 0xc6 => 0x88b8, 0xc7 => 0x88c0, 0xc8 => 0x88be, 0xc9 => 0x88b6, 0xca => 0x88bc, 0xcb => 0x88b7, 0xcc => 0x88bd, 0xcd => 0x88b2, 0xce => 0x8901, 0xcf => 0x88c9, 0xd0 => 0x8995, 0xd1 => 0x8998, 0xd2 => 0x8997, 0xd3 => 0x89dd, 0xd4 => 0x89da, 0xd5 => 0x89db, 0xd6 => 0x8a4e, 0xd7 => 0x8a4d, 0xd8 => 0x8a39, 0xd9 => 0x8a59, 0xda => 0x8a40, 0xdb => 0x8a57, 0xdc => 0x8a58, 0xdd => 0x8a44, 0xde => 0x8a45, 0xdf => 0x8a52, 0xe0 => 0x8a48, 0xe1 => 0x8a51, 0xe2 => 0x8a4a, 0xe3 => 0x8a4c, 0xe4 => 0x8a4f, 0xe5 => 0x8c5f, 0xe6 => 0x8c81, 0xe7 => 0x8c80, 0xe8 => 0x8cba, 0xe9 => 0x8cbe, 0xea => 0x8cb0, 0xeb => 0x8cb9, 0xec => 0x8cb5, 0xed => 0x8d84, 0xee => 0x8d80, 0xef => 0x8d89, 0xf0 => 0x8dd8, 0xf1 => 0x8dd3, 0xf2 => 0x8dcd, 0xf3 => 0x8dc7, 0xf4 => 0x8dd6, 0xf5 => 0x8ddc, 0xf6 => 0x8dcf, 0xf7 => 0x8dd5, 0xf8 => 0x8dd9, 0xf9 => 0x8dc8, 0xfa => 0x8dd7, 0xfb => 0x8dc5, 0xfc => 0x8eef, 0xfd => 0x8ef7, 0xfe => 0x8efa, }, 0xdc => { 0x40 => 0x8ef9, 0x41 => 0x8ee6, 0x42 => 0x8eee, 0x43 => 0x8ee5, 0x44 => 0x8ef5, 0x45 => 0x8ee7, 0x46 => 0x8ee8, 0x47 => 0x8ef6, 0x48 => 0x8eeb, 0x49 => 0x8ef1, 0x4a => 0x8eec, 0x4b => 0x8ef4, 0x4c => 0x8ee9, 0x4d => 0x902d, 0x4e => 0x9034, 0x4f => 0x902f, 0x50 => 0x9106, 0x51 => 0x912c, 0x52 => 0x9104, 0x53 => 0x90ff, 0x54 => 0x90fc, 0x55 => 0x9108, 0x56 => 0x90f9, 0x57 => 0x90fb, 0x58 => 0x9101, 0x59 => 0x9100, 0x5a => 0x9107, 0x5b => 0x9105, 0x5c => 0x9103, 0x5d => 0x9161, 0x5e => 0x9164, 0x5f => 0x915f, 0x60 => 0x9162, 0x61 => 0x9160, 0x62 => 0x9201, 0x63 => 0x920a, 0x64 => 0x9225, 0x65 => 0x9203, 0x66 => 0x921a, 0x67 => 0x9226, 0x68 => 0x920f, 0x69 => 0x920c, 0x6a => 0x9200, 0x6b => 0x9212, 0x6c => 0x91ff, 0x6d => 0x91fd, 0x6e => 0x9206, 0x6f => 0x9204, 0x70 => 0x9227, 0x71 => 0x9202, 0x72 => 0x921c, 0x73 => 0x9224, 0x74 => 0x9219, 0x75 => 0x9217, 0x76 => 0x9205, 0x77 => 0x9216, 0x78 => 0x957b, 0x79 => 0x958d, 0x7a => 0x958c, 0x7b => 0x9590, 0x7c => 0x9687, 0x7d => 0x967e, 0x7e => 0x9688, 0xa1 => 0x9689, 0xa2 => 0x9683, 0xa3 => 0x9680, 0xa4 => 0x96c2, 0xa5 => 0x96c8, 0xa6 => 0x96c3, 0xa7 => 0x96f1, 0xa8 => 0x96f0, 0xa9 => 0x976c, 0xaa => 0x9770, 0xab => 0x976e, 0xac => 0x9807, 0xad => 0x98a9, 0xae => 0x98eb, 0xaf => 0x9ce6, 0xb0 => 0x9ef9, 0xb1 => 0x4e83, 0xb2 => 0x4e84, 0xb3 => 0x4eb6, 0xb4 => 0x50bd, 0xb5 => 0x50bf, 0xb6 => 0x50c6, 0xb7 => 0x50ae, 0xb8 => 0x50c4, 0xb9 => 0x50ca, 0xba => 0x50b4, 0xbb => 0x50c8, 0xbc => 0x50c2, 0xbd => 0x50b0, 0xbe => 0x50c1, 0xbf => 0x50ba, 0xc0 => 0x50b1, 0xc1 => 0x50cb, 0xc2 => 0x50c9, 0xc3 => 0x50b6, 0xc4 => 0x50b8, 0xc5 => 0x51d7, 0xc6 => 0x527a, 0xc7 => 0x5278, 0xc8 => 0x527b, 0xc9 => 0x527c, 0xca => 0x55c3, 0xcb => 0x55db, 0xcc => 0x55cc, 0xcd => 0x55d0, 0xce => 0x55cb, 0xcf => 0x55ca, 0xd0 => 0x55dd, 0xd1 => 0x55c0, 0xd2 => 0x55d4, 0xd3 => 0x55c4, 0xd4 => 0x55e9, 0xd5 => 0x55bf, 0xd6 => 0x55d2, 0xd7 => 0x558d, 0xd8 => 0x55cf, 0xd9 => 0x55d5, 0xda => 0x55e2, 0xdb => 0x55d6, 0xdc => 0x55c8, 0xdd => 0x55f2, 0xde => 0x55cd, 0xdf => 0x55d9, 0xe0 => 0x55c2, 0xe1 => 0x5714, 0xe2 => 0x5853, 0xe3 => 0x5868, 0xe4 => 0x5864, 0xe5 => 0x584f, 0xe6 => 0x584d, 0xe7 => 0x5849, 0xe8 => 0x586f, 0xe9 => 0x5855, 0xea => 0x584e, 0xeb => 0x585d, 0xec => 0x5859, 0xed => 0x5865, 0xee => 0x585b, 0xef => 0x583d, 0xf0 => 0x5863, 0xf1 => 0x5871, 0xf2 => 0x58fc, 0xf3 => 0x5ac7, 0xf4 => 0x5ac4, 0xf5 => 0x5acb, 0xf6 => 0x5aba, 0xf7 => 0x5ab8, 0xf8 => 0x5ab1, 0xf9 => 0x5ab5, 0xfa => 0x5ab0, 0xfb => 0x5abf, 0xfc => 0x5ac8, 0xfd => 0x5abb, 0xfe => 0x5ac6, }, 0xdd => { 0x40 => 0x5ab7, 0x41 => 0x5ac0, 0x42 => 0x5aca, 0x43 => 0x5ab4, 0x44 => 0x5ab6, 0x45 => 0x5acd, 0x46 => 0x5ab9, 0x47 => 0x5a90, 0x48 => 0x5bd6, 0x49 => 0x5bd8, 0x4a => 0x5bd9, 0x4b => 0x5c1f, 0x4c => 0x5c33, 0x4d => 0x5d71, 0x4e => 0x5d63, 0x4f => 0x5d4a, 0x50 => 0x5d65, 0x51 => 0x5d72, 0x52 => 0x5d6c, 0x53 => 0x5d5e, 0x54 => 0x5d68, 0x55 => 0x5d67, 0x56 => 0x5d62, 0x57 => 0x5df0, 0x58 => 0x5e4f, 0x59 => 0x5e4e, 0x5a => 0x5e4a, 0x5b => 0x5e4d, 0x5c => 0x5e4b, 0x5d => 0x5ec5, 0x5e => 0x5ecc, 0x5f => 0x5ec6, 0x60 => 0x5ecb, 0x61 => 0x5ec7, 0x62 => 0x5f40, 0x63 => 0x5faf, 0x64 => 0x5fad, 0x65 => 0x60f7, 0x66 => 0x6149, 0x67 => 0x614a, 0x68 => 0x612b, 0x69 => 0x6145, 0x6a => 0x6136, 0x6b => 0x6132, 0x6c => 0x612e, 0x6d => 0x6146, 0x6e => 0x612f, 0x6f => 0x614f, 0x70 => 0x6129, 0x71 => 0x6140, 0x72 => 0x6220, 0x73 => 0x9168, 0x74 => 0x6223, 0x75 => 0x6225, 0x76 => 0x6224, 0x77 => 0x63c5, 0x78 => 0x63f1, 0x79 => 0x63eb, 0x7a => 0x6410, 0x7b => 0x6412, 0x7c => 0x6409, 0x7d => 0x6420, 0x7e => 0x6424, 0xa1 => 0x6433, 0xa2 => 0x6443, 0xa3 => 0x641f, 0xa4 => 0x6415, 0xa5 => 0x6418, 0xa6 => 0x6439, 0xa7 => 0x6437, 0xa8 => 0x6422, 0xa9 => 0x6423, 0xaa => 0x640c, 0xab => 0x6426, 0xac => 0x6430, 0xad => 0x6428, 0xae => 0x6441, 0xaf => 0x6435, 0xb0 => 0x642f, 0xb1 => 0x640a, 0xb2 => 0x641a, 0xb3 => 0x6440, 0xb4 => 0x6425, 0xb5 => 0x6427, 0xb6 => 0x640b, 0xb7 => 0x63e7, 0xb8 => 0x641b, 0xb9 => 0x642e, 0xba => 0x6421, 0xbb => 0x640e, 0xbc => 0x656f, 0xbd => 0x6592, 0xbe => 0x65d3, 0xbf => 0x6686, 0xc0 => 0x668c, 0xc1 => 0x6695, 0xc2 => 0x6690, 0xc3 => 0x668b, 0xc4 => 0x668a, 0xc5 => 0x6699, 0xc6 => 0x6694, 0xc7 => 0x6678, 0xc8 => 0x6720, 0xc9 => 0x6966, 0xca => 0x695f, 0xcb => 0x6938, 0xcc => 0x694e, 0xcd => 0x6962, 0xce => 0x6971, 0xcf => 0x693f, 0xd0 => 0x6945, 0xd1 => 0x696a, 0xd2 => 0x6939, 0xd3 => 0x6942, 0xd4 => 0x6957, 0xd5 => 0x6959, 0xd6 => 0x697a, 0xd7 => 0x6948, 0xd8 => 0x6949, 0xd9 => 0x6935, 0xda => 0x696c, 0xdb => 0x6933, 0xdc => 0x693d, 0xdd => 0x6965, 0xde => 0x68f0, 0xdf => 0x6978, 0xe0 => 0x6934, 0xe1 => 0x6969, 0xe2 => 0x6940, 0xe3 => 0x696f, 0xe4 => 0x6944, 0xe5 => 0x6976, 0xe6 => 0x6958, 0xe7 => 0x6941, 0xe8 => 0x6974, 0xe9 => 0x694c, 0xea => 0x693b, 0xeb => 0x694b, 0xec => 0x6937, 0xed => 0x695c, 0xee => 0x694f, 0xef => 0x6951, 0xf0 => 0x6932, 0xf1 => 0x6952, 0xf2 => 0x692f, 0xf3 => 0x697b, 0xf4 => 0x693c, 0xf5 => 0x6b46, 0xf6 => 0x6b45, 0xf7 => 0x6b43, 0xf8 => 0x6b42, 0xf9 => 0x6b48, 0xfa => 0x6b41, 0xfb => 0x6b9b, 0xfc => 0xfa0d, 0xfd => 0x6bfb, 0xfe => 0x6bfc, }, 0xde => { 0x40 => 0x6bf9, 0x41 => 0x6bf7, 0x42 => 0x6bf8, 0x43 => 0x6e9b, 0x44 => 0x6ed6, 0x45 => 0x6ec8, 0x46 => 0x6e8f, 0x47 => 0x6ec0, 0x48 => 0x6e9f, 0x49 => 0x6e93, 0x4a => 0x6e94, 0x4b => 0x6ea0, 0x4c => 0x6eb1, 0x4d => 0x6eb9, 0x4e => 0x6ec6, 0x4f => 0x6ed2, 0x50 => 0x6ebd, 0x51 => 0x6ec1, 0x52 => 0x6e9e, 0x53 => 0x6ec9, 0x54 => 0x6eb7, 0x55 => 0x6eb0, 0x56 => 0x6ecd, 0x57 => 0x6ea6, 0x58 => 0x6ecf, 0x59 => 0x6eb2, 0x5a => 0x6ebe, 0x5b => 0x6ec3, 0x5c => 0x6edc, 0x5d => 0x6ed8, 0x5e => 0x6e99, 0x5f => 0x6e92, 0x60 => 0x6e8e, 0x61 => 0x6e8d, 0x62 => 0x6ea4, 0x63 => 0x6ea1, 0x64 => 0x6ebf, 0x65 => 0x6eb3, 0x66 => 0x6ed0, 0x67 => 0x6eca, 0x68 => 0x6e97, 0x69 => 0x6eae, 0x6a => 0x6ea3, 0x6b => 0x7147, 0x6c => 0x7154, 0x6d => 0x7152, 0x6e => 0x7163, 0x6f => 0x7160, 0x70 => 0x7141, 0x71 => 0x715d, 0x72 => 0x7162, 0x73 => 0x7172, 0x74 => 0x7178, 0x75 => 0x716a, 0x76 => 0x7161, 0x77 => 0x7142, 0x78 => 0x7158, 0x79 => 0x7143, 0x7a => 0x714b, 0x7b => 0x7170, 0x7c => 0x715f, 0x7d => 0x7150, 0x7e => 0x7153, 0xa1 => 0x7144, 0xa2 => 0x714d, 0xa3 => 0x715a, 0xa4 => 0x724f, 0xa5 => 0x728d, 0xa6 => 0x728c, 0xa7 => 0x7291, 0xa8 => 0x7290, 0xa9 => 0x728e, 0xaa => 0x733c, 0xab => 0x7342, 0xac => 0x733b, 0xad => 0x733a, 0xae => 0x7340, 0xaf => 0x734a, 0xb0 => 0x7349, 0xb1 => 0x7444, 0xb2 => 0x744a, 0xb3 => 0x744b, 0xb4 => 0x7452, 0xb5 => 0x7451, 0xb6 => 0x7457, 0xb7 => 0x7440, 0xb8 => 0x744f, 0xb9 => 0x7450, 0xba => 0x744e, 0xbb => 0x7442, 0xbc => 0x7446, 0xbd => 0x744d, 0xbe => 0x7454, 0xbf => 0x74e1, 0xc0 => 0x74ff, 0xc1 => 0x74fe, 0xc2 => 0x74fd, 0xc3 => 0x751d, 0xc4 => 0x7579, 0xc5 => 0x7577, 0xc6 => 0x6983, 0xc7 => 0x75ef, 0xc8 => 0x760f, 0xc9 => 0x7603, 0xca => 0x75f7, 0xcb => 0x75fe, 0xcc => 0x75fc, 0xcd => 0x75f9, 0xce => 0x75f8, 0xcf => 0x7610, 0xd0 => 0x75fb, 0xd1 => 0x75f6, 0xd2 => 0x75ed, 0xd3 => 0x75f5, 0xd4 => 0x75fd, 0xd5 => 0x7699, 0xd6 => 0x76b5, 0xd7 => 0x76dd, 0xd8 => 0x7755, 0xd9 => 0x775f, 0xda => 0x7760, 0xdb => 0x7752, 0xdc => 0x7756, 0xdd => 0x775a, 0xde => 0x7769, 0xdf => 0x7767, 0xe0 => 0x7754, 0xe1 => 0x7759, 0xe2 => 0x776d, 0xe3 => 0x77e0, 0xe4 => 0x7887, 0xe5 => 0x789a, 0xe6 => 0x7894, 0xe7 => 0x788f, 0xe8 => 0x7884, 0xe9 => 0x7895, 0xea => 0x7885, 0xeb => 0x7886, 0xec => 0x78a1, 0xed => 0x7883, 0xee => 0x7879, 0xef => 0x7899, 0xf0 => 0x7880, 0xf1 => 0x7896, 0xf2 => 0x787b, 0xf3 => 0x797c, 0xf4 => 0x7982, 0xf5 => 0x797d, 0xf6 => 0x7979, 0xf7 => 0x7a11, 0xf8 => 0x7a18, 0xf9 => 0x7a19, 0xfa => 0x7a12, 0xfb => 0x7a17, 0xfc => 0x7a15, 0xfd => 0x7a22, 0xfe => 0x7a13, }, 0xdf => { 0x40 => 0x7a1b, 0x41 => 0x7a10, 0x42 => 0x7aa3, 0x43 => 0x7aa2, 0x44 => 0x7a9e, 0x45 => 0x7aeb, 0x46 => 0x7b66, 0x47 => 0x7b64, 0x48 => 0x7b6d, 0x49 => 0x7b74, 0x4a => 0x7b69, 0x4b => 0x7b72, 0x4c => 0x7b65, 0x4d => 0x7b73, 0x4e => 0x7b71, 0x4f => 0x7b70, 0x50 => 0x7b61, 0x51 => 0x7b78, 0x52 => 0x7b76, 0x53 => 0x7b63, 0x54 => 0x7cb2, 0x55 => 0x7cb4, 0x56 => 0x7caf, 0x57 => 0x7d88, 0x58 => 0x7d86, 0x59 => 0x7d80, 0x5a => 0x7d8d, 0x5b => 0x7d7f, 0x5c => 0x7d85, 0x5d => 0x7d7a, 0x5e => 0x7d8e, 0x5f => 0x7d7b, 0x60 => 0x7d83, 0x61 => 0x7d7c, 0x62 => 0x7d8c, 0x63 => 0x7d94, 0x64 => 0x7d84, 0x65 => 0x7d7d, 0x66 => 0x7d92, 0x67 => 0x7f6d, 0x68 => 0x7f6b, 0x69 => 0x7f67, 0x6a => 0x7f68, 0x6b => 0x7f6c, 0x6c => 0x7fa6, 0x6d => 0x7fa5, 0x6e => 0x7fa7, 0x6f => 0x7fdb, 0x70 => 0x7fdc, 0x71 => 0x8021, 0x72 => 0x8164, 0x73 => 0x8160, 0x74 => 0x8177, 0x75 => 0x815c, 0x76 => 0x8169, 0x77 => 0x815b, 0x78 => 0x8162, 0x79 => 0x8172, 0x7a => 0x6721, 0x7b => 0x815e, 0x7c => 0x8176, 0x7d => 0x8167, 0x7e => 0x816f, 0xa1 => 0x8144, 0xa2 => 0x8161, 0xa3 => 0x821d, 0xa4 => 0x8249, 0xa5 => 0x8244, 0xa6 => 0x8240, 0xa7 => 0x8242, 0xa8 => 0x8245, 0xa9 => 0x84f1, 0xaa => 0x843f, 0xab => 0x8456, 0xac => 0x8476, 0xad => 0x8479, 0xae => 0x848f, 0xaf => 0x848d, 0xb0 => 0x8465, 0xb1 => 0x8451, 0xb2 => 0x8440, 0xb3 => 0x8486, 0xb4 => 0x8467, 0xb5 => 0x8430, 0xb6 => 0x844d, 0xb7 => 0x847d, 0xb8 => 0x845a, 0xb9 => 0x8459, 0xba => 0x8474, 0xbb => 0x8473, 0xbc => 0x845d, 0xbd => 0x8507, 0xbe => 0x845e, 0xbf => 0x8437, 0xc0 => 0x843a, 0xc1 => 0x8434, 0xc2 => 0x847a, 0xc3 => 0x8443, 0xc4 => 0x8478, 0xc5 => 0x8432, 0xc6 => 0x8445, 0xc7 => 0x8429, 0xc8 => 0x83d9, 0xc9 => 0x844b, 0xca => 0x842f, 0xcb => 0x8442, 0xcc => 0x842d, 0xcd => 0x845f, 0xce => 0x8470, 0xcf => 0x8439, 0xd0 => 0x844e, 0xd1 => 0x844c, 0xd2 => 0x8452, 0xd3 => 0x846f, 0xd4 => 0x84c5, 0xd5 => 0x848e, 0xd6 => 0x843b, 0xd7 => 0x8447, 0xd8 => 0x8436, 0xd9 => 0x8433, 0xda => 0x8468, 0xdb => 0x847e, 0xdc => 0x8444, 0xdd => 0x842b, 0xde => 0x8460, 0xdf => 0x8454, 0xe0 => 0x846e, 0xe1 => 0x8450, 0xe2 => 0x870b, 0xe3 => 0x8704, 0xe4 => 0x86f7, 0xe5 => 0x870c, 0xe6 => 0x86fa, 0xe7 => 0x86d6, 0xe8 => 0x86f5, 0xe9 => 0x874d, 0xea => 0x86f8, 0xeb => 0x870e, 0xec => 0x8709, 0xed => 0x8701, 0xee => 0x86f6, 0xef => 0x870d, 0xf0 => 0x8705, 0xf1 => 0x88d6, 0xf2 => 0x88cb, 0xf3 => 0x88cd, 0xf4 => 0x88ce, 0xf5 => 0x88de, 0xf6 => 0x88db, 0xf7 => 0x88da, 0xf8 => 0x88cc, 0xf9 => 0x88d0, 0xfa => 0x8985, 0xfb => 0x899b, 0xfc => 0x89df, 0xfd => 0x89e5, 0xfe => 0x89e4, }, 0xe0 => { 0x40 => 0x89e1, 0x41 => 0x89e0, 0x42 => 0x89e2, 0x43 => 0x89dc, 0x44 => 0x89e6, 0x45 => 0x8a76, 0x46 => 0x8a86, 0x47 => 0x8a7f, 0x48 => 0x8a61, 0x49 => 0x8a3f, 0x4a => 0x8a77, 0x4b => 0x8a82, 0x4c => 0x8a84, 0x4d => 0x8a75, 0x4e => 0x8a83, 0x4f => 0x8a81, 0x50 => 0x8a74, 0x51 => 0x8a7a, 0x52 => 0x8c3c, 0x53 => 0x8c4b, 0x54 => 0x8c4a, 0x55 => 0x8c65, 0x56 => 0x8c64, 0x57 => 0x8c66, 0x58 => 0x8c86, 0x59 => 0x8c84, 0x5a => 0x8c85, 0x5b => 0x8ccc, 0x5c => 0x8d68, 0x5d => 0x8d69, 0x5e => 0x8d91, 0x5f => 0x8d8c, 0x60 => 0x8d8e, 0x61 => 0x8d8f, 0x62 => 0x8d8d, 0x63 => 0x8d93, 0x64 => 0x8d94, 0x65 => 0x8d90, 0x66 => 0x8d92, 0x67 => 0x8df0, 0x68 => 0x8de0, 0x69 => 0x8dec, 0x6a => 0x8df1, 0x6b => 0x8dee, 0x6c => 0x8dd0, 0x6d => 0x8de9, 0x6e => 0x8de3, 0x6f => 0x8de2, 0x70 => 0x8de7, 0x71 => 0x8df2, 0x72 => 0x8deb, 0x73 => 0x8df4, 0x74 => 0x8f06, 0x75 => 0x8eff, 0x76 => 0x8f01, 0x77 => 0x8f00, 0x78 => 0x8f05, 0x79 => 0x8f07, 0x7a => 0x8f08, 0x7b => 0x8f02, 0x7c => 0x8f0b, 0x7d => 0x9052, 0x7e => 0x903f, 0xa1 => 0x9044, 0xa2 => 0x9049, 0xa3 => 0x903d, 0xa4 => 0x9110, 0xa5 => 0x910d, 0xa6 => 0x910f, 0xa7 => 0x9111, 0xa8 => 0x9116, 0xa9 => 0x9114, 0xaa => 0x910b, 0xab => 0x910e, 0xac => 0x916e, 0xad => 0x916f, 0xae => 0x9248, 0xaf => 0x9252, 0xb0 => 0x9230, 0xb1 => 0x923a, 0xb2 => 0x9266, 0xb3 => 0x9233, 0xb4 => 0x9265, 0xb5 => 0x925e, 0xb6 => 0x9283, 0xb7 => 0x922e, 0xb8 => 0x924a, 0xb9 => 0x9246, 0xba => 0x926d, 0xbb => 0x926c, 0xbc => 0x924f, 0xbd => 0x9260, 0xbe => 0x9267, 0xbf => 0x926f, 0xc0 => 0x9236, 0xc1 => 0x9261, 0xc2 => 0x9270, 0xc3 => 0x9231, 0xc4 => 0x9254, 0xc5 => 0x9263, 0xc6 => 0x9250, 0xc7 => 0x9272, 0xc8 => 0x924e, 0xc9 => 0x9253, 0xca => 0x924c, 0xcb => 0x9256, 0xcc => 0x9232, 0xcd => 0x959f, 0xce => 0x959c, 0xcf => 0x959e, 0xd0 => 0x959b, 0xd1 => 0x9692, 0xd2 => 0x9693, 0xd3 => 0x9691, 0xd4 => 0x9697, 0xd5 => 0x96ce, 0xd6 => 0x96fa, 0xd7 => 0x96fd, 0xd8 => 0x96f8, 0xd9 => 0x96f5, 0xda => 0x9773, 0xdb => 0x9777, 0xdc => 0x9778, 0xdd => 0x9772, 0xde => 0x980f, 0xdf => 0x980d, 0xe0 => 0x980e, 0xe1 => 0x98ac, 0xe2 => 0x98f6, 0xe3 => 0x98f9, 0xe4 => 0x99af, 0xe5 => 0x99b2, 0xe6 => 0x99b0, 0xe7 => 0x99b5, 0xe8 => 0x9aad, 0xe9 => 0x9aab, 0xea => 0x9b5b, 0xeb => 0x9cea, 0xec => 0x9ced, 0xed => 0x9ce7, 0xee => 0x9e80, 0xef => 0x9efd, 0xf0 => 0x50e6, 0xf1 => 0x50d4, 0xf2 => 0x50d7, 0xf3 => 0x50e8, 0xf4 => 0x50f3, 0xf5 => 0x50db, 0xf6 => 0x50ea, 0xf7 => 0x50dd, 0xf8 => 0x50e4, 0xf9 => 0x50d3, 0xfa => 0x50ec, 0xfb => 0x50f0, 0xfc => 0x50ef, 0xfd => 0x50e3, 0xfe => 0x50e0, }, 0xe1 => { 0x40 => 0x51d8, 0x41 => 0x5280, 0x42 => 0x5281, 0x43 => 0x52e9, 0x44 => 0x52eb, 0x45 => 0x5330, 0x46 => 0x53ac, 0x47 => 0x5627, 0x48 => 0x5615, 0x49 => 0x560c, 0x4a => 0x5612, 0x4b => 0x55fc, 0x4c => 0x560f, 0x4d => 0x561c, 0x4e => 0x5601, 0x4f => 0x5613, 0x50 => 0x5602, 0x51 => 0x55fa, 0x52 => 0x561d, 0x53 => 0x5604, 0x54 => 0x55ff, 0x55 => 0x55f9, 0x56 => 0x5889, 0x57 => 0x587c, 0x58 => 0x5890, 0x59 => 0x5898, 0x5a => 0x5886, 0x5b => 0x5881, 0x5c => 0x587f, 0x5d => 0x5874, 0x5e => 0x588b, 0x5f => 0x587a, 0x60 => 0x5887, 0x61 => 0x5891, 0x62 => 0x588e, 0x63 => 0x5876, 0x64 => 0x5882, 0x65 => 0x5888, 0x66 => 0x587b, 0x67 => 0x5894, 0x68 => 0x588f, 0x69 => 0x58fe, 0x6a => 0x596b, 0x6b => 0x5adc, 0x6c => 0x5aee, 0x6d => 0x5ae5, 0x6e => 0x5ad5, 0x6f => 0x5aea, 0x70 => 0x5ada, 0x71 => 0x5aed, 0x72 => 0x5aeb, 0x73 => 0x5af3, 0x74 => 0x5ae2, 0x75 => 0x5ae0, 0x76 => 0x5adb, 0x77 => 0x5aec, 0x78 => 0x5ade, 0x79 => 0x5add, 0x7a => 0x5ad9, 0x7b => 0x5ae8, 0x7c => 0x5adf, 0x7d => 0x5b77, 0x7e => 0x5be0, 0xa1 => 0x5be3, 0xa2 => 0x5c63, 0xa3 => 0x5d82, 0xa4 => 0x5d80, 0xa5 => 0x5d7d, 0xa6 => 0x5d86, 0xa7 => 0x5d7a, 0xa8 => 0x5d81, 0xa9 => 0x5d77, 0xaa => 0x5d8a, 0xab => 0x5d89, 0xac => 0x5d88, 0xad => 0x5d7e, 0xae => 0x5d7c, 0xaf => 0x5d8d, 0xb0 => 0x5d79, 0xb1 => 0x5d7f, 0xb2 => 0x5e58, 0xb3 => 0x5e59, 0xb4 => 0x5e53, 0xb5 => 0x5ed8, 0xb6 => 0x5ed1, 0xb7 => 0x5ed7, 0xb8 => 0x5ece, 0xb9 => 0x5edc, 0xba => 0x5ed5, 0xbb => 0x5ed9, 0xbc => 0x5ed2, 0xbd => 0x5ed4, 0xbe => 0x5f44, 0xbf => 0x5f43, 0xc0 => 0x5f6f, 0xc1 => 0x5fb6, 0xc2 => 0x612c, 0xc3 => 0x6128, 0xc4 => 0x6141, 0xc5 => 0x615e, 0xc6 => 0x6171, 0xc7 => 0x6173, 0xc8 => 0x6152, 0xc9 => 0x6153, 0xca => 0x6172, 0xcb => 0x616c, 0xcc => 0x6180, 0xcd => 0x6174, 0xce => 0x6154, 0xcf => 0x617a, 0xd0 => 0x615b, 0xd1 => 0x6165, 0xd2 => 0x613b, 0xd3 => 0x616a, 0xd4 => 0x6161, 0xd5 => 0x6156, 0xd6 => 0x6229, 0xd7 => 0x6227, 0xd8 => 0x622b, 0xd9 => 0x642b, 0xda => 0x644d, 0xdb => 0x645b, 0xdc => 0x645d, 0xdd => 0x6474, 0xde => 0x6476, 0xdf => 0x6472, 0xe0 => 0x6473, 0xe1 => 0x647d, 0xe2 => 0x6475, 0xe3 => 0x6466, 0xe4 => 0x64a6, 0xe5 => 0x644e, 0xe6 => 0x6482, 0xe7 => 0x645e, 0xe8 => 0x645c, 0xe9 => 0x644b, 0xea => 0x6453, 0xeb => 0x6460, 0xec => 0x6450, 0xed => 0x647f, 0xee => 0x643f, 0xef => 0x646c, 0xf0 => 0x646b, 0xf1 => 0x6459, 0xf2 => 0x6465, 0xf3 => 0x6477, 0xf4 => 0x6573, 0xf5 => 0x65a0, 0xf6 => 0x66a1, 0xf7 => 0x66a0, 0xf8 => 0x669f, 0xf9 => 0x6705, 0xfa => 0x6704, 0xfb => 0x6722, 0xfc => 0x69b1, 0xfd => 0x69b6, 0xfe => 0x69c9, }, 0xe2 => { 0x40 => 0x69a0, 0x41 => 0x69ce, 0x42 => 0x6996, 0x43 => 0x69b0, 0x44 => 0x69ac, 0x45 => 0x69bc, 0x46 => 0x6991, 0x47 => 0x6999, 0x48 => 0x698e, 0x49 => 0x69a7, 0x4a => 0x698d, 0x4b => 0x69a9, 0x4c => 0x69be, 0x4d => 0x69af, 0x4e => 0x69bf, 0x4f => 0x69c4, 0x50 => 0x69bd, 0x51 => 0x69a4, 0x52 => 0x69d4, 0x53 => 0x69b9, 0x54 => 0x69ca, 0x55 => 0x699a, 0x56 => 0x69cf, 0x57 => 0x69b3, 0x58 => 0x6993, 0x59 => 0x69aa, 0x5a => 0x69a1, 0x5b => 0x699e, 0x5c => 0x69d9, 0x5d => 0x6997, 0x5e => 0x6990, 0x5f => 0x69c2, 0x60 => 0x69b5, 0x61 => 0x69a5, 0x62 => 0x69c6, 0x63 => 0x6b4a, 0x64 => 0x6b4d, 0x65 => 0x6b4b, 0x66 => 0x6b9e, 0x67 => 0x6b9f, 0x68 => 0x6ba0, 0x69 => 0x6bc3, 0x6a => 0x6bc4, 0x6b => 0x6bfe, 0x6c => 0x6ece, 0x6d => 0x6ef5, 0x6e => 0x6ef1, 0x6f => 0x6f03, 0x70 => 0x6f25, 0x71 => 0x6ef8, 0x72 => 0x6f37, 0x73 => 0x6efb, 0x74 => 0x6f2e, 0x75 => 0x6f09, 0x76 => 0x6f4e, 0x77 => 0x6f19, 0x78 => 0x6f1a, 0x79 => 0x6f27, 0x7a => 0x6f18, 0x7b => 0x6f3b, 0x7c => 0x6f12, 0x7d => 0x6eed, 0x7e => 0x6f0a, 0xa1 => 0x6f36, 0xa2 => 0x6f73, 0xa3 => 0x6ef9, 0xa4 => 0x6eee, 0xa5 => 0x6f2d, 0xa6 => 0x6f40, 0xa7 => 0x6f30, 0xa8 => 0x6f3c, 0xa9 => 0x6f35, 0xaa => 0x6eeb, 0xab => 0x6f07, 0xac => 0x6f0e, 0xad => 0x6f43, 0xae => 0x6f05, 0xaf => 0x6efd, 0xb0 => 0x6ef6, 0xb1 => 0x6f39, 0xb2 => 0x6f1c, 0xb3 => 0x6efc, 0xb4 => 0x6f3a, 0xb5 => 0x6f1f, 0xb6 => 0x6f0d, 0xb7 => 0x6f1e, 0xb8 => 0x6f08, 0xb9 => 0x6f21, 0xba => 0x7187, 0xbb => 0x7190, 0xbc => 0x7189, 0xbd => 0x7180, 0xbe => 0x7185, 0xbf => 0x7182, 0xc0 => 0x718f, 0xc1 => 0x717b, 0xc2 => 0x7186, 0xc3 => 0x7181, 0xc4 => 0x7197, 0xc5 => 0x7244, 0xc6 => 0x7253, 0xc7 => 0x7297, 0xc8 => 0x7295, 0xc9 => 0x7293, 0xca => 0x7343, 0xcb => 0x734d, 0xcc => 0x7351, 0xcd => 0x734c, 0xce => 0x7462, 0xcf => 0x7473, 0xd0 => 0x7471, 0xd1 => 0x7475, 0xd2 => 0x7472, 0xd3 => 0x7467, 0xd4 => 0x746e, 0xd5 => 0x7500, 0xd6 => 0x7502, 0xd7 => 0x7503, 0xd8 => 0x757d, 0xd9 => 0x7590, 0xda => 0x7616, 0xdb => 0x7608, 0xdc => 0x760c, 0xdd => 0x7615, 0xde => 0x7611, 0xdf => 0x760a, 0xe0 => 0x7614, 0xe1 => 0x76b8, 0xe2 => 0x7781, 0xe3 => 0x777c, 0xe4 => 0x7785, 0xe5 => 0x7782, 0xe6 => 0x776e, 0xe7 => 0x7780, 0xe8 => 0x776f, 0xe9 => 0x777e, 0xea => 0x7783, 0xeb => 0x78b2, 0xec => 0x78aa, 0xed => 0x78b4, 0xee => 0x78ad, 0xef => 0x78a8, 0xf0 => 0x787e, 0xf1 => 0x78ab, 0xf2 => 0x789e, 0xf3 => 0x78a5, 0xf4 => 0x78a0, 0xf5 => 0x78ac, 0xf6 => 0x78a2, 0xf7 => 0x78a4, 0xf8 => 0x7998, 0xf9 => 0x798a, 0xfa => 0x798b, 0xfb => 0x7996, 0xfc => 0x7995, 0xfd => 0x7994, 0xfe => 0x7993, }, 0xe3 => { 0x40 => 0x7997, 0x41 => 0x7988, 0x42 => 0x7992, 0x43 => 0x7990, 0x44 => 0x7a2b, 0x45 => 0x7a4a, 0x46 => 0x7a30, 0x47 => 0x7a2f, 0x48 => 0x7a28, 0x49 => 0x7a26, 0x4a => 0x7aa8, 0x4b => 0x7aab, 0x4c => 0x7aac, 0x4d => 0x7aee, 0x4e => 0x7b88, 0x4f => 0x7b9c, 0x50 => 0x7b8a, 0x51 => 0x7b91, 0x52 => 0x7b90, 0x53 => 0x7b96, 0x54 => 0x7b8d, 0x55 => 0x7b8c, 0x56 => 0x7b9b, 0x57 => 0x7b8e, 0x58 => 0x7b85, 0x59 => 0x7b98, 0x5a => 0x5284, 0x5b => 0x7b99, 0x5c => 0x7ba4, 0x5d => 0x7b82, 0x5e => 0x7cbb, 0x5f => 0x7cbf, 0x60 => 0x7cbc, 0x61 => 0x7cba, 0x62 => 0x7da7, 0x63 => 0x7db7, 0x64 => 0x7dc2, 0x65 => 0x7da3, 0x66 => 0x7daa, 0x67 => 0x7dc1, 0x68 => 0x7dc0, 0x69 => 0x7dc5, 0x6a => 0x7d9d, 0x6b => 0x7dce, 0x6c => 0x7dc4, 0x6d => 0x7dc6, 0x6e => 0x7dcb, 0x6f => 0x7dcc, 0x70 => 0x7daf, 0x71 => 0x7db9, 0x72 => 0x7d96, 0x73 => 0x7dbc, 0x74 => 0x7d9f, 0x75 => 0x7da6, 0x76 => 0x7dae, 0x77 => 0x7da9, 0x78 => 0x7da1, 0x79 => 0x7dc9, 0x7a => 0x7f73, 0x7b => 0x7fe2, 0x7c => 0x7fe3, 0x7d => 0x7fe5, 0x7e => 0x7fde, 0xa1 => 0x8024, 0xa2 => 0x805d, 0xa3 => 0x805c, 0xa4 => 0x8189, 0xa5 => 0x8186, 0xa6 => 0x8183, 0xa7 => 0x8187, 0xa8 => 0x818d, 0xa9 => 0x818c, 0xaa => 0x818b, 0xab => 0x8215, 0xac => 0x8497, 0xad => 0x84a4, 0xae => 0x84a1, 0xaf => 0x849f, 0xb0 => 0x84ba, 0xb1 => 0x84ce, 0xb2 => 0x84c2, 0xb3 => 0x84ac, 0xb4 => 0x84ae, 0xb5 => 0x84ab, 0xb6 => 0x84b9, 0xb7 => 0x84b4, 0xb8 => 0x84c1, 0xb9 => 0x84cd, 0xba => 0x84aa, 0xbb => 0x849a, 0xbc => 0x84b1, 0xbd => 0x84d0, 0xbe => 0x849d, 0xbf => 0x84a7, 0xc0 => 0x84bb, 0xc1 => 0x84a2, 0xc2 => 0x8494, 0xc3 => 0x84c7, 0xc4 => 0x84cc, 0xc5 => 0x849b, 0xc6 => 0x84a9, 0xc7 => 0x84af, 0xc8 => 0x84a8, 0xc9 => 0x84d6, 0xca => 0x8498, 0xcb => 0x84b6, 0xcc => 0x84cf, 0xcd => 0x84a0, 0xce => 0x84d7, 0xcf => 0x84d4, 0xd0 => 0x84d2, 0xd1 => 0x84db, 0xd2 => 0x84b0, 0xd3 => 0x8491, 0xd4 => 0x8661, 0xd5 => 0x8733, 0xd6 => 0x8723, 0xd7 => 0x8728, 0xd8 => 0x876b, 0xd9 => 0x8740, 0xda => 0x872e, 0xdb => 0x871e, 0xdc => 0x8721, 0xdd => 0x8719, 0xde => 0x871b, 0xdf => 0x8743, 0xe0 => 0x872c, 0xe1 => 0x8741, 0xe2 => 0x873e, 0xe3 => 0x8746, 0xe4 => 0x8720, 0xe5 => 0x8732, 0xe6 => 0x872a, 0xe7 => 0x872d, 0xe8 => 0x873c, 0xe9 => 0x8712, 0xea => 0x873a, 0xeb => 0x8731, 0xec => 0x8735, 0xed => 0x8742, 0xee => 0x8726, 0xef => 0x8727, 0xf0 => 0x8738, 0xf1 => 0x8724, 0xf2 => 0x871a, 0xf3 => 0x8730, 0xf4 => 0x8711, 0xf5 => 0x88f7, 0xf6 => 0x88e7, 0xf7 => 0x88f1, 0xf8 => 0x88f2, 0xf9 => 0x88fa, 0xfa => 0x88fe, 0xfb => 0x88ee, 0xfc => 0x88fc, 0xfd => 0x88f6, 0xfe => 0x88fb, }, 0xe4 => { 0x40 => 0x88f0, 0x41 => 0x88ec, 0x42 => 0x88eb, 0x43 => 0x899d, 0x44 => 0x89a1, 0x45 => 0x899f, 0x46 => 0x899e, 0x47 => 0x89e9, 0x48 => 0x89eb, 0x49 => 0x89e8, 0x4a => 0x8aab, 0x4b => 0x8a99, 0x4c => 0x8a8b, 0x4d => 0x8a92, 0x4e => 0x8a8f, 0x4f => 0x8a96, 0x50 => 0x8c3d, 0x51 => 0x8c68, 0x52 => 0x8c69, 0x53 => 0x8cd5, 0x54 => 0x8ccf, 0x55 => 0x8cd7, 0x56 => 0x8d96, 0x57 => 0x8e09, 0x58 => 0x8e02, 0x59 => 0x8dff, 0x5a => 0x8e0d, 0x5b => 0x8dfd, 0x5c => 0x8e0a, 0x5d => 0x8e03, 0x5e => 0x8e07, 0x5f => 0x8e06, 0x60 => 0x8e05, 0x61 => 0x8dfe, 0x62 => 0x8e00, 0x63 => 0x8e04, 0x64 => 0x8f10, 0x65 => 0x8f11, 0x66 => 0x8f0e, 0x67 => 0x8f0d, 0x68 => 0x9123, 0x69 => 0x911c, 0x6a => 0x9120, 0x6b => 0x9122, 0x6c => 0x911f, 0x6d => 0x911d, 0x6e => 0x911a, 0x6f => 0x9124, 0x70 => 0x9121, 0x71 => 0x911b, 0x72 => 0x917a, 0x73 => 0x9172, 0x74 => 0x9179, 0x75 => 0x9173, 0x76 => 0x92a5, 0x77 => 0x92a4, 0x78 => 0x9276, 0x79 => 0x929b, 0x7a => 0x927a, 0x7b => 0x92a0, 0x7c => 0x9294, 0x7d => 0x92aa, 0x7e => 0x928d, 0xa1 => 0x92a6, 0xa2 => 0x929a, 0xa3 => 0x92ab, 0xa4 => 0x9279, 0xa5 => 0x9297, 0xa6 => 0x927f, 0xa7 => 0x92a3, 0xa8 => 0x92ee, 0xa9 => 0x928e, 0xaa => 0x9282, 0xab => 0x9295, 0xac => 0x92a2, 0xad => 0x927d, 0xae => 0x9288, 0xaf => 0x92a1, 0xb0 => 0x928a, 0xb1 => 0x9286, 0xb2 => 0x928c, 0xb3 => 0x9299, 0xb4 => 0x92a7, 0xb5 => 0x927e, 0xb6 => 0x9287, 0xb7 => 0x92a9, 0xb8 => 0x929d, 0xb9 => 0x928b, 0xba => 0x922d, 0xbb => 0x969e, 0xbc => 0x96a1, 0xbd => 0x96ff, 0xbe => 0x9758, 0xbf => 0x977d, 0xc0 => 0x977a, 0xc1 => 0x977e, 0xc2 => 0x9783, 0xc3 => 0x9780, 0xc4 => 0x9782, 0xc5 => 0x977b, 0xc6 => 0x9784, 0xc7 => 0x9781, 0xc8 => 0x977f, 0xc9 => 0x97ce, 0xca => 0x97cd, 0xcb => 0x9816, 0xcc => 0x98ad, 0xcd => 0x98ae, 0xce => 0x9902, 0xcf => 0x9900, 0xd0 => 0x9907, 0xd1 => 0x999d, 0xd2 => 0x999c, 0xd3 => 0x99c3, 0xd4 => 0x99b9, 0xd5 => 0x99bb, 0xd6 => 0x99ba, 0xd7 => 0x99c2, 0xd8 => 0x99bd, 0xd9 => 0x99c7, 0xda => 0x9ab1, 0xdb => 0x9ae3, 0xdc => 0x9ae7, 0xdd => 0x9b3e, 0xde => 0x9b3f, 0xdf => 0x9b60, 0xe0 => 0x9b61, 0xe1 => 0x9b5f, 0xe2 => 0x9cf1, 0xe3 => 0x9cf2, 0xe4 => 0x9cf5, 0xe5 => 0x9ea7, 0xe6 => 0x50ff, 0xe7 => 0x5103, 0xe8 => 0x5130, 0xe9 => 0x50f8, 0xea => 0x5106, 0xeb => 0x5107, 0xec => 0x50f6, 0xed => 0x50fe, 0xee => 0x510b, 0xef => 0x510c, 0xf0 => 0x50fd, 0xf1 => 0x510a, 0xf2 => 0x528b, 0xf3 => 0x528c, 0xf4 => 0x52f1, 0xf5 => 0x52ef, 0xf6 => 0x5648, 0xf7 => 0x5642, 0xf8 => 0x564c, 0xf9 => 0x5635, 0xfa => 0x5641, 0xfb => 0x564a, 0xfc => 0x5649, 0xfd => 0x5646, 0xfe => 0x5658, }, 0xe5 => { 0x40 => 0x565a, 0x41 => 0x5640, 0x42 => 0x5633, 0x43 => 0x563d, 0x44 => 0x562c, 0x45 => 0x563e, 0x46 => 0x5638, 0x47 => 0x562a, 0x48 => 0x563a, 0x49 => 0x571a, 0x4a => 0x58ab, 0x4b => 0x589d, 0x4c => 0x58b1, 0x4d => 0x58a0, 0x4e => 0x58a3, 0x4f => 0x58af, 0x50 => 0x58ac, 0x51 => 0x58a5, 0x52 => 0x58a1, 0x53 => 0x58ff, 0x54 => 0x5aff, 0x55 => 0x5af4, 0x56 => 0x5afd, 0x57 => 0x5af7, 0x58 => 0x5af6, 0x59 => 0x5b03, 0x5a => 0x5af8, 0x5b => 0x5b02, 0x5c => 0x5af9, 0x5d => 0x5b01, 0x5e => 0x5b07, 0x5f => 0x5b05, 0x60 => 0x5b0f, 0x61 => 0x5c67, 0x62 => 0x5d99, 0x63 => 0x5d97, 0x64 => 0x5d9f, 0x65 => 0x5d92, 0x66 => 0x5da2, 0x67 => 0x5d93, 0x68 => 0x5d95, 0x69 => 0x5da0, 0x6a => 0x5d9c, 0x6b => 0x5da1, 0x6c => 0x5d9a, 0x6d => 0x5d9e, 0x6e => 0x5e69, 0x6f => 0x5e5d, 0x70 => 0x5e60, 0x71 => 0x5e5c, 0x72 => 0x7df3, 0x73 => 0x5edb, 0x74 => 0x5ede, 0x75 => 0x5ee1, 0x76 => 0x5f49, 0x77 => 0x5fb2, 0x78 => 0x618b, 0x79 => 0x6183, 0x7a => 0x6179, 0x7b => 0x61b1, 0x7c => 0x61b0, 0x7d => 0x61a2, 0x7e => 0x6189, 0xa1 => 0x619b, 0xa2 => 0x6193, 0xa3 => 0x61af, 0xa4 => 0x61ad, 0xa5 => 0x619f, 0xa6 => 0x6192, 0xa7 => 0x61aa, 0xa8 => 0x61a1, 0xa9 => 0x618d, 0xaa => 0x6166, 0xab => 0x61b3, 0xac => 0x622d, 0xad => 0x646e, 0xae => 0x6470, 0xaf => 0x6496, 0xb0 => 0x64a0, 0xb1 => 0x6485, 0xb2 => 0x6497, 0xb3 => 0x649c, 0xb4 => 0x648f, 0xb5 => 0x648b, 0xb6 => 0x648a, 0xb7 => 0x648c, 0xb8 => 0x64a3, 0xb9 => 0x649f, 0xba => 0x6468, 0xbb => 0x64b1, 0xbc => 0x6498, 0xbd => 0x6576, 0xbe => 0x657a, 0xbf => 0x6579, 0xc0 => 0x657b, 0xc1 => 0x65b2, 0xc2 => 0x65b3, 0xc3 => 0x66b5, 0xc4 => 0x66b0, 0xc5 => 0x66a9, 0xc6 => 0x66b2, 0xc7 => 0x66b7, 0xc8 => 0x66aa, 0xc9 => 0x66af, 0xca => 0x6a00, 0xcb => 0x6a06, 0xcc => 0x6a17, 0xcd => 0x69e5, 0xce => 0x69f8, 0xcf => 0x6a15, 0xd0 => 0x69f1, 0xd1 => 0x69e4, 0xd2 => 0x6a20, 0xd3 => 0x69ff, 0xd4 => 0x69ec, 0xd5 => 0x69e2, 0xd6 => 0x6a1b, 0xd7 => 0x6a1d, 0xd8 => 0x69fe, 0xd9 => 0x6a27, 0xda => 0x69f2, 0xdb => 0x69ee, 0xdc => 0x6a14, 0xdd => 0x69f7, 0xde => 0x69e7, 0xdf => 0x6a40, 0xe0 => 0x6a08, 0xe1 => 0x69e6, 0xe2 => 0x69fb, 0xe3 => 0x6a0d, 0xe4 => 0x69fc, 0xe5 => 0x69eb, 0xe6 => 0x6a09, 0xe7 => 0x6a04, 0xe8 => 0x6a18, 0xe9 => 0x6a25, 0xea => 0x6a0f, 0xeb => 0x69f6, 0xec => 0x6a26, 0xed => 0x6a07, 0xee => 0x69f4, 0xef => 0x6a16, 0xf0 => 0x6b51, 0xf1 => 0x6ba5, 0xf2 => 0x6ba3, 0xf3 => 0x6ba2, 0xf4 => 0x6ba6, 0xf5 => 0x6c01, 0xf6 => 0x6c00, 0xf7 => 0x6bff, 0xf8 => 0x6c02, 0xf9 => 0x6f41, 0xfa => 0x6f26, 0xfb => 0x6f7e, 0xfc => 0x6f87, 0xfd => 0x6fc6, 0xfe => 0x6f92, }, 0xe6 => { 0x40 => 0x6f8d, 0x41 => 0x6f89, 0x42 => 0x6f8c, 0x43 => 0x6f62, 0x44 => 0x6f4f, 0x45 => 0x6f85, 0x46 => 0x6f5a, 0x47 => 0x6f96, 0x48 => 0x6f76, 0x49 => 0x6f6c, 0x4a => 0x6f82, 0x4b => 0x6f55, 0x4c => 0x6f72, 0x4d => 0x6f52, 0x4e => 0x6f50, 0x4f => 0x6f57, 0x50 => 0x6f94, 0x51 => 0x6f93, 0x52 => 0x6f5d, 0x53 => 0x6f00, 0x54 => 0x6f61, 0x55 => 0x6f6b, 0x56 => 0x6f7d, 0x57 => 0x6f67, 0x58 => 0x6f90, 0x59 => 0x6f53, 0x5a => 0x6f8b, 0x5b => 0x6f69, 0x5c => 0x6f7f, 0x5d => 0x6f95, 0x5e => 0x6f63, 0x5f => 0x6f77, 0x60 => 0x6f6a, 0x61 => 0x6f7b, 0x62 => 0x71b2, 0x63 => 0x71af, 0x64 => 0x719b, 0x65 => 0x71b0, 0x66 => 0x71a0, 0x67 => 0x719a, 0x68 => 0x71a9, 0x69 => 0x71b5, 0x6a => 0x719d, 0x6b => 0x71a5, 0x6c => 0x719e, 0x6d => 0x71a4, 0x6e => 0x71a1, 0x6f => 0x71aa, 0x70 => 0x719c, 0x71 => 0x71a7, 0x72 => 0x71b3, 0x73 => 0x7298, 0x74 => 0x729a, 0x75 => 0x7358, 0x76 => 0x7352, 0x77 => 0x735e, 0x78 => 0x735f, 0x79 => 0x7360, 0x7a => 0x735d, 0x7b => 0x735b, 0x7c => 0x7361, 0x7d => 0x735a, 0x7e => 0x7359, 0xa1 => 0x7362, 0xa2 => 0x7487, 0xa3 => 0x7489, 0xa4 => 0x748a, 0xa5 => 0x7486, 0xa6 => 0x7481, 0xa7 => 0x747d, 0xa8 => 0x7485, 0xa9 => 0x7488, 0xaa => 0x747c, 0xab => 0x7479, 0xac => 0x7508, 0xad => 0x7507, 0xae => 0x757e, 0xaf => 0x7625, 0xb0 => 0x761e, 0xb1 => 0x7619, 0xb2 => 0x761d, 0xb3 => 0x761c, 0xb4 => 0x7623, 0xb5 => 0x761a, 0xb6 => 0x7628, 0xb7 => 0x761b, 0xb8 => 0x769c, 0xb9 => 0x769d, 0xba => 0x769e, 0xbb => 0x769b, 0xbc => 0x778d, 0xbd => 0x778f, 0xbe => 0x7789, 0xbf => 0x7788, 0xc0 => 0x78cd, 0xc1 => 0x78bb, 0xc2 => 0x78cf, 0xc3 => 0x78cc, 0xc4 => 0x78d1, 0xc5 => 0x78ce, 0xc6 => 0x78d4, 0xc7 => 0x78c8, 0xc8 => 0x78c3, 0xc9 => 0x78c4, 0xca => 0x78c9, 0xcb => 0x799a, 0xcc => 0x79a1, 0xcd => 0x79a0, 0xce => 0x799c, 0xcf => 0x79a2, 0xd0 => 0x799b, 0xd1 => 0x6b76, 0xd2 => 0x7a39, 0xd3 => 0x7ab2, 0xd4 => 0x7ab4, 0xd5 => 0x7ab3, 0xd6 => 0x7bb7, 0xd7 => 0x7bcb, 0xd8 => 0x7bbe, 0xd9 => 0x7bac, 0xda => 0x7bce, 0xdb => 0x7baf, 0xdc => 0x7bb9, 0xdd => 0x7bca, 0xde => 0x7bb5, 0xdf => 0x7cc5, 0xe0 => 0x7cc8, 0xe1 => 0x7ccc, 0xe2 => 0x7ccb, 0xe3 => 0x7df7, 0xe4 => 0x7ddb, 0xe5 => 0x7dea, 0xe6 => 0x7de7, 0xe7 => 0x7dd7, 0xe8 => 0x7de1, 0xe9 => 0x7e03, 0xea => 0x7dfa, 0xeb => 0x7de6, 0xec => 0x7df6, 0xed => 0x7df1, 0xee => 0x7df0, 0xef => 0x7dee, 0xf0 => 0x7ddf, 0xf1 => 0x7f76, 0xf2 => 0x7fac, 0xf3 => 0x7fb0, 0xf4 => 0x7fad, 0xf5 => 0x7fed, 0xf6 => 0x7feb, 0xf7 => 0x7fea, 0xf8 => 0x7fec, 0xf9 => 0x7fe6, 0xfa => 0x7fe8, 0xfb => 0x8064, 0xfc => 0x8067, 0xfd => 0x81a3, 0xfe => 0x819f, }, 0xe7 => { 0x40 => 0x819e, 0x41 => 0x8195, 0x42 => 0x81a2, 0x43 => 0x8199, 0x44 => 0x8197, 0x45 => 0x8216, 0x46 => 0x824f, 0x47 => 0x8253, 0x48 => 0x8252, 0x49 => 0x8250, 0x4a => 0x824e, 0x4b => 0x8251, 0x4c => 0x8524, 0x4d => 0x853b, 0x4e => 0x850f, 0x4f => 0x8500, 0x50 => 0x8529, 0x51 => 0x850e, 0x52 => 0x8509, 0x53 => 0x850d, 0x54 => 0x851f, 0x55 => 0x850a, 0x56 => 0x8527, 0x57 => 0x851c, 0x58 => 0x84fb, 0x59 => 0x852b, 0x5a => 0x84fa, 0x5b => 0x8508, 0x5c => 0x850c, 0x5d => 0x84f4, 0x5e => 0x852a, 0x5f => 0x84f2, 0x60 => 0x8515, 0x61 => 0x84f7, 0x62 => 0x84eb, 0x63 => 0x84f3, 0x64 => 0x84fc, 0x65 => 0x8512, 0x66 => 0x84ea, 0x67 => 0x84e9, 0x68 => 0x8516, 0x69 => 0x84fe, 0x6a => 0x8528, 0x6b => 0x851d, 0x6c => 0x852e, 0x6d => 0x8502, 0x6e => 0x84fd, 0x6f => 0x851e, 0x70 => 0x84f6, 0x71 => 0x8531, 0x72 => 0x8526, 0x73 => 0x84e7, 0x74 => 0x84e8, 0x75 => 0x84f0, 0x76 => 0x84ef, 0x77 => 0x84f9, 0x78 => 0x8518, 0x79 => 0x8520, 0x7a => 0x8530, 0x7b => 0x850b, 0x7c => 0x8519, 0x7d => 0x852f, 0x7e => 0x8662, 0xa1 => 0x8756, 0xa2 => 0x8763, 0xa3 => 0x8764, 0xa4 => 0x8777, 0xa5 => 0x87e1, 0xa6 => 0x8773, 0xa7 => 0x8758, 0xa8 => 0x8754, 0xa9 => 0x875b, 0xaa => 0x8752, 0xab => 0x8761, 0xac => 0x875a, 0xad => 0x8751, 0xae => 0x875e, 0xaf => 0x876d, 0xb0 => 0x876a, 0xb1 => 0x8750, 0xb2 => 0x874e, 0xb3 => 0x875f, 0xb4 => 0x875d, 0xb5 => 0x876f, 0xb6 => 0x876c, 0xb7 => 0x877a, 0xb8 => 0x876e, 0xb9 => 0x875c, 0xba => 0x8765, 0xbb => 0x874f, 0xbc => 0x877b, 0xbd => 0x8775, 0xbe => 0x8762, 0xbf => 0x8767, 0xc0 => 0x8769, 0xc1 => 0x885a, 0xc2 => 0x8905, 0xc3 => 0x890c, 0xc4 => 0x8914, 0xc5 => 0x890b, 0xc6 => 0x8917, 0xc7 => 0x8918, 0xc8 => 0x8919, 0xc9 => 0x8906, 0xca => 0x8916, 0xcb => 0x8911, 0xcc => 0x890e, 0xcd => 0x8909, 0xce => 0x89a2, 0xcf => 0x89a4, 0xd0 => 0x89a3, 0xd1 => 0x89ed, 0xd2 => 0x89f0, 0xd3 => 0x89ec, 0xd4 => 0x8acf, 0xd5 => 0x8ac6, 0xd6 => 0x8ab8, 0xd7 => 0x8ad3, 0xd8 => 0x8ad1, 0xd9 => 0x8ad4, 0xda => 0x8ad5, 0xdb => 0x8abb, 0xdc => 0x8ad7, 0xdd => 0x8abe, 0xde => 0x8ac0, 0xdf => 0x8ac5, 0xe0 => 0x8ad8, 0xe1 => 0x8ac3, 0xe2 => 0x8aba, 0xe3 => 0x8abd, 0xe4 => 0x8ad9, 0xe5 => 0x8c3e, 0xe6 => 0x8c4d, 0xe7 => 0x8c8f, 0xe8 => 0x8ce5, 0xe9 => 0x8cdf, 0xea => 0x8cd9, 0xeb => 0x8ce8, 0xec => 0x8cda, 0xed => 0x8cdd, 0xee => 0x8ce7, 0xef => 0x8da0, 0xf0 => 0x8d9c, 0xf1 => 0x8da1, 0xf2 => 0x8d9b, 0xf3 => 0x8e20, 0xf4 => 0x8e23, 0xf5 => 0x8e25, 0xf6 => 0x8e24, 0xf7 => 0x8e2e, 0xf8 => 0x8e15, 0xf9 => 0x8e1b, 0xfa => 0x8e16, 0xfb => 0x8e11, 0xfc => 0x8e19, 0xfd => 0x8e26, 0xfe => 0x8e27, }, 0xe8 => { 0x40 => 0x8e14, 0x41 => 0x8e12, 0x42 => 0x8e18, 0x43 => 0x8e13, 0x44 => 0x8e1c, 0x45 => 0x8e17, 0x46 => 0x8e1a, 0x47 => 0x8f2c, 0x48 => 0x8f24, 0x49 => 0x8f18, 0x4a => 0x8f1a, 0x4b => 0x8f20, 0x4c => 0x8f23, 0x4d => 0x8f16, 0x4e => 0x8f17, 0x4f => 0x9073, 0x50 => 0x9070, 0x51 => 0x906f, 0x52 => 0x9067, 0x53 => 0x906b, 0x54 => 0x912f, 0x55 => 0x912b, 0x56 => 0x9129, 0x57 => 0x912a, 0x58 => 0x9132, 0x59 => 0x9126, 0x5a => 0x912e, 0x5b => 0x9185, 0x5c => 0x9186, 0x5d => 0x918a, 0x5e => 0x9181, 0x5f => 0x9182, 0x60 => 0x9184, 0x61 => 0x9180, 0x62 => 0x92d0, 0x63 => 0x92c3, 0x64 => 0x92c4, 0x65 => 0x92c0, 0x66 => 0x92d9, 0x67 => 0x92b6, 0x68 => 0x92cf, 0x69 => 0x92f1, 0x6a => 0x92df, 0x6b => 0x92d8, 0x6c => 0x92e9, 0x6d => 0x92d7, 0x6e => 0x92dd, 0x6f => 0x92cc, 0x70 => 0x92ef, 0x71 => 0x92c2, 0x72 => 0x92e8, 0x73 => 0x92ca, 0x74 => 0x92c8, 0x75 => 0x92ce, 0x76 => 0x92e6, 0x77 => 0x92cd, 0x78 => 0x92d5, 0x79 => 0x92c9, 0x7a => 0x92e0, 0x7b => 0x92de, 0x7c => 0x92e7, 0x7d => 0x92d1, 0x7e => 0x92d3, 0xa1 => 0x92b5, 0xa2 => 0x92e1, 0xa3 => 0x92c6, 0xa4 => 0x92b4, 0xa5 => 0x957c, 0xa6 => 0x95ac, 0xa7 => 0x95ab, 0xa8 => 0x95ae, 0xa9 => 0x95b0, 0xaa => 0x96a4, 0xab => 0x96a2, 0xac => 0x96d3, 0xad => 0x9705, 0xae => 0x9708, 0xaf => 0x9702, 0xb0 => 0x975a, 0xb1 => 0x978a, 0xb2 => 0x978e, 0xb3 => 0x9788, 0xb4 => 0x97d0, 0xb5 => 0x97cf, 0xb6 => 0x981e, 0xb7 => 0x981d, 0xb8 => 0x9826, 0xb9 => 0x9829, 0xba => 0x9828, 0xbb => 0x9820, 0xbc => 0x981b, 0xbd => 0x9827, 0xbe => 0x98b2, 0xbf => 0x9908, 0xc0 => 0x98fa, 0xc1 => 0x9911, 0xc2 => 0x9914, 0xc3 => 0x9916, 0xc4 => 0x9917, 0xc5 => 0x9915, 0xc6 => 0x99dc, 0xc7 => 0x99cd, 0xc8 => 0x99cf, 0xc9 => 0x99d3, 0xca => 0x99d4, 0xcb => 0x99ce, 0xcc => 0x99c9, 0xcd => 0x99d6, 0xce => 0x99d8, 0xcf => 0x99cb, 0xd0 => 0x99d7, 0xd1 => 0x99cc, 0xd2 => 0x9ab3, 0xd3 => 0x9aec, 0xd4 => 0x9aeb, 0xd5 => 0x9af3, 0xd6 => 0x9af2, 0xd7 => 0x9af1, 0xd8 => 0x9b46, 0xd9 => 0x9b43, 0xda => 0x9b67, 0xdb => 0x9b74, 0xdc => 0x9b71, 0xdd => 0x9b66, 0xde => 0x9b76, 0xdf => 0x9b75, 0xe0 => 0x9b70, 0xe1 => 0x9b68, 0xe2 => 0x9b64, 0xe3 => 0x9b6c, 0xe4 => 0x9cfc, 0xe5 => 0x9cfa, 0xe6 => 0x9cfd, 0xe7 => 0x9cff, 0xe8 => 0x9cf7, 0xe9 => 0x9d07, 0xea => 0x9d00, 0xeb => 0x9cf9, 0xec => 0x9cfb, 0xed => 0x9d08, 0xee => 0x9d05, 0xef => 0x9d04, 0xf0 => 0x9e83, 0xf1 => 0x9ed3, 0xf2 => 0x9f0f, 0xf3 => 0x9f10, 0xf4 => 0x511c, 0xf5 => 0x5113, 0xf6 => 0x5117, 0xf7 => 0x511a, 0xf8 => 0x5111, 0xf9 => 0x51de, 0xfa => 0x5334, 0xfb => 0x53e1, 0xfc => 0x5670, 0xfd => 0x5660, 0xfe => 0x566e, }, 0xe9 => { 0x40 => 0x5673, 0x41 => 0x5666, 0x42 => 0x5663, 0x43 => 0x566d, 0x44 => 0x5672, 0x45 => 0x565e, 0x46 => 0x5677, 0x47 => 0x571c, 0x48 => 0x571b, 0x49 => 0x58c8, 0x4a => 0x58bd, 0x4b => 0x58c9, 0x4c => 0x58bf, 0x4d => 0x58ba, 0x4e => 0x58c2, 0x4f => 0x58bc, 0x50 => 0x58c6, 0x51 => 0x5b17, 0x52 => 0x5b19, 0x53 => 0x5b1b, 0x54 => 0x5b21, 0x55 => 0x5b14, 0x56 => 0x5b13, 0x57 => 0x5b10, 0x58 => 0x5b16, 0x59 => 0x5b28, 0x5a => 0x5b1a, 0x5b => 0x5b20, 0x5c => 0x5b1e, 0x5d => 0x5bef, 0x5e => 0x5dac, 0x5f => 0x5db1, 0x60 => 0x5da9, 0x61 => 0x5da7, 0x62 => 0x5db5, 0x63 => 0x5db0, 0x64 => 0x5dae, 0x65 => 0x5daa, 0x66 => 0x5da8, 0x67 => 0x5db2, 0x68 => 0x5dad, 0x69 => 0x5daf, 0x6a => 0x5db4, 0x6b => 0x5e67, 0x6c => 0x5e68, 0x6d => 0x5e66, 0x6e => 0x5e6f, 0x6f => 0x5ee9, 0x70 => 0x5ee7, 0x71 => 0x5ee6, 0x72 => 0x5ee8, 0x73 => 0x5ee5, 0x74 => 0x5f4b, 0x75 => 0x5fbc, 0x76 => 0x619d, 0x77 => 0x61a8, 0x78 => 0x6196, 0x79 => 0x61c5, 0x7a => 0x61b4, 0x7b => 0x61c6, 0x7c => 0x61c1, 0x7d => 0x61cc, 0x7e => 0x61ba, 0xa1 => 0x61bf, 0xa2 => 0x61b8, 0xa3 => 0x618c, 0xa4 => 0x64d7, 0xa5 => 0x64d6, 0xa6 => 0x64d0, 0xa7 => 0x64cf, 0xa8 => 0x64c9, 0xa9 => 0x64bd, 0xaa => 0x6489, 0xab => 0x64c3, 0xac => 0x64db, 0xad => 0x64f3, 0xae => 0x64d9, 0xaf => 0x6533, 0xb0 => 0x657f, 0xb1 => 0x657c, 0xb2 => 0x65a2, 0xb3 => 0x66c8, 0xb4 => 0x66be, 0xb5 => 0x66c0, 0xb6 => 0x66ca, 0xb7 => 0x66cb, 0xb8 => 0x66cf, 0xb9 => 0x66bd, 0xba => 0x66bb, 0xbb => 0x66ba, 0xbc => 0x66cc, 0xbd => 0x6723, 0xbe => 0x6a34, 0xbf => 0x6a66, 0xc0 => 0x6a49, 0xc1 => 0x6a67, 0xc2 => 0x6a32, 0xc3 => 0x6a68, 0xc4 => 0x6a3e, 0xc5 => 0x6a5d, 0xc6 => 0x6a6d, 0xc7 => 0x6a76, 0xc8 => 0x6a5b, 0xc9 => 0x6a51, 0xca => 0x6a28, 0xcb => 0x6a5a, 0xcc => 0x6a3b, 0xcd => 0x6a3f, 0xce => 0x6a41, 0xcf => 0x6a6a, 0xd0 => 0x6a64, 0xd1 => 0x6a50, 0xd2 => 0x6a4f, 0xd3 => 0x6a54, 0xd4 => 0x6a6f, 0xd5 => 0x6a69, 0xd6 => 0x6a60, 0xd7 => 0x6a3c, 0xd8 => 0x6a5e, 0xd9 => 0x6a56, 0xda => 0x6a55, 0xdb => 0x6a4d, 0xdc => 0x6a4e, 0xdd => 0x6a46, 0xde => 0x6b55, 0xdf => 0x6b54, 0xe0 => 0x6b56, 0xe1 => 0x6ba7, 0xe2 => 0x6baa, 0xe3 => 0x6bab, 0xe4 => 0x6bc8, 0xe5 => 0x6bc7, 0xe6 => 0x6c04, 0xe7 => 0x6c03, 0xe8 => 0x6c06, 0xe9 => 0x6fad, 0xea => 0x6fcb, 0xeb => 0x6fa3, 0xec => 0x6fc7, 0xed => 0x6fbc, 0xee => 0x6fce, 0xef => 0x6fc8, 0xf0 => 0x6f5e, 0xf1 => 0x6fc4, 0xf2 => 0x6fbd, 0xf3 => 0x6f9e, 0xf4 => 0x6fca, 0xf5 => 0x6fa8, 0xf6 => 0x7004, 0xf7 => 0x6fa5, 0xf8 => 0x6fae, 0xf9 => 0x6fba, 0xfa => 0x6fac, 0xfb => 0x6faa, 0xfc => 0x6fcf, 0xfd => 0x6fbf, 0xfe => 0x6fb8, }, 0xea => { 0x40 => 0x6fa2, 0x41 => 0x6fc9, 0x42 => 0x6fab, 0x43 => 0x6fcd, 0x44 => 0x6faf, 0x45 => 0x6fb2, 0x46 => 0x6fb0, 0x47 => 0x71c5, 0x48 => 0x71c2, 0x49 => 0x71bf, 0x4a => 0x71b8, 0x4b => 0x71d6, 0x4c => 0x71c0, 0x4d => 0x71c1, 0x4e => 0x71cb, 0x4f => 0x71d4, 0x50 => 0x71ca, 0x51 => 0x71c7, 0x52 => 0x71cf, 0x53 => 0x71bd, 0x54 => 0x71d8, 0x55 => 0x71bc, 0x56 => 0x71c6, 0x57 => 0x71da, 0x58 => 0x71db, 0x59 => 0x729d, 0x5a => 0x729e, 0x5b => 0x7369, 0x5c => 0x7366, 0x5d => 0x7367, 0x5e => 0x736c, 0x5f => 0x7365, 0x60 => 0x736b, 0x61 => 0x736a, 0x62 => 0x747f, 0x63 => 0x749a, 0x64 => 0x74a0, 0x65 => 0x7494, 0x66 => 0x7492, 0x67 => 0x7495, 0x68 => 0x74a1, 0x69 => 0x750b, 0x6a => 0x7580, 0x6b => 0x762f, 0x6c => 0x762d, 0x6d => 0x7631, 0x6e => 0x763d, 0x6f => 0x7633, 0x70 => 0x763c, 0x71 => 0x7635, 0x72 => 0x7632, 0x73 => 0x7630, 0x74 => 0x76bb, 0x75 => 0x76e6, 0x76 => 0x779a, 0x77 => 0x779d, 0x78 => 0x77a1, 0x79 => 0x779c, 0x7a => 0x779b, 0x7b => 0x77a2, 0x7c => 0x77a3, 0x7d => 0x7795, 0x7e => 0x7799, 0xa1 => 0x7797, 0xa2 => 0x78dd, 0xa3 => 0x78e9, 0xa4 => 0x78e5, 0xa5 => 0x78ea, 0xa6 => 0x78de, 0xa7 => 0x78e3, 0xa8 => 0x78db, 0xa9 => 0x78e1, 0xaa => 0x78e2, 0xab => 0x78ed, 0xac => 0x78df, 0xad => 0x78e0, 0xae => 0x79a4, 0xaf => 0x7a44, 0xb0 => 0x7a48, 0xb1 => 0x7a47, 0xb2 => 0x7ab6, 0xb3 => 0x7ab8, 0xb4 => 0x7ab5, 0xb5 => 0x7ab1, 0xb6 => 0x7ab7, 0xb7 => 0x7bde, 0xb8 => 0x7be3, 0xb9 => 0x7be7, 0xba => 0x7bdd, 0xbb => 0x7bd5, 0xbc => 0x7be5, 0xbd => 0x7bda, 0xbe => 0x7be8, 0xbf => 0x7bf9, 0xc0 => 0x7bd4, 0xc1 => 0x7bea, 0xc2 => 0x7be2, 0xc3 => 0x7bdc, 0xc4 => 0x7beb, 0xc5 => 0x7bd8, 0xc6 => 0x7bdf, 0xc7 => 0x7cd2, 0xc8 => 0x7cd4, 0xc9 => 0x7cd7, 0xca => 0x7cd0, 0xcb => 0x7cd1, 0xcc => 0x7e12, 0xcd => 0x7e21, 0xce => 0x7e17, 0xcf => 0x7e0c, 0xd0 => 0x7e1f, 0xd1 => 0x7e20, 0xd2 => 0x7e13, 0xd3 => 0x7e0e, 0xd4 => 0x7e1c, 0xd5 => 0x7e15, 0xd6 => 0x7e1a, 0xd7 => 0x7e22, 0xd8 => 0x7e0b, 0xd9 => 0x7e0f, 0xda => 0x7e16, 0xdb => 0x7e0d, 0xdc => 0x7e14, 0xdd => 0x7e25, 0xde => 0x7e24, 0xdf => 0x7f43, 0xe0 => 0x7f7b, 0xe1 => 0x7f7c, 0xe2 => 0x7f7a, 0xe3 => 0x7fb1, 0xe4 => 0x7fef, 0xe5 => 0x802a, 0xe6 => 0x8029, 0xe7 => 0x806c, 0xe8 => 0x81b1, 0xe9 => 0x81a6, 0xea => 0x81ae, 0xeb => 0x81b9, 0xec => 0x81b5, 0xed => 0x81ab, 0xee => 0x81b0, 0xef => 0x81ac, 0xf0 => 0x81b4, 0xf1 => 0x81b2, 0xf2 => 0x81b7, 0xf3 => 0x81a7, 0xf4 => 0x81f2, 0xf5 => 0x8255, 0xf6 => 0x8256, 0xf7 => 0x8257, 0xf8 => 0x8556, 0xf9 => 0x8545, 0xfa => 0x856b, 0xfb => 0x854d, 0xfc => 0x8553, 0xfd => 0x8561, 0xfe => 0x8558, }, 0xeb => { 0x40 => 0x8540, 0x41 => 0x8546, 0x42 => 0x8564, 0x43 => 0x8541, 0x44 => 0x8562, 0x45 => 0x8544, 0x46 => 0x8551, 0x47 => 0x8547, 0x48 => 0x8563, 0x49 => 0x853e, 0x4a => 0x855b, 0x4b => 0x8571, 0x4c => 0x854e, 0x4d => 0x856e, 0x4e => 0x8575, 0x4f => 0x8555, 0x50 => 0x8567, 0x51 => 0x8560, 0x52 => 0x858c, 0x53 => 0x8566, 0x54 => 0x855d, 0x55 => 0x8554, 0x56 => 0x8565, 0x57 => 0x856c, 0x58 => 0x8663, 0x59 => 0x8665, 0x5a => 0x8664, 0x5b => 0x879b, 0x5c => 0x878f, 0x5d => 0x8797, 0x5e => 0x8793, 0x5f => 0x8792, 0x60 => 0x8788, 0x61 => 0x8781, 0x62 => 0x8796, 0x63 => 0x8798, 0x64 => 0x8779, 0x65 => 0x8787, 0x66 => 0x87a3, 0x67 => 0x8785, 0x68 => 0x8790, 0x69 => 0x8791, 0x6a => 0x879d, 0x6b => 0x8784, 0x6c => 0x8794, 0x6d => 0x879c, 0x6e => 0x879a, 0x6f => 0x8789, 0x70 => 0x891e, 0x71 => 0x8926, 0x72 => 0x8930, 0x73 => 0x892d, 0x74 => 0x892e, 0x75 => 0x8927, 0x76 => 0x8931, 0x77 => 0x8922, 0x78 => 0x8929, 0x79 => 0x8923, 0x7a => 0x892f, 0x7b => 0x892c, 0x7c => 0x891f, 0x7d => 0x89f1, 0x7e => 0x8ae0, 0xa1 => 0x8ae2, 0xa2 => 0x8af2, 0xa3 => 0x8af4, 0xa4 => 0x8af5, 0xa5 => 0x8add, 0xa6 => 0x8b14, 0xa7 => 0x8ae4, 0xa8 => 0x8adf, 0xa9 => 0x8af0, 0xaa => 0x8ac8, 0xab => 0x8ade, 0xac => 0x8ae1, 0xad => 0x8ae8, 0xae => 0x8aff, 0xaf => 0x8aef, 0xb0 => 0x8afb, 0xb1 => 0x8c91, 0xb2 => 0x8c92, 0xb3 => 0x8c90, 0xb4 => 0x8cf5, 0xb5 => 0x8cee, 0xb6 => 0x8cf1, 0xb7 => 0x8cf0, 0xb8 => 0x8cf3, 0xb9 => 0x8d6c, 0xba => 0x8d6e, 0xbb => 0x8da5, 0xbc => 0x8da7, 0xbd => 0x8e33, 0xbe => 0x8e3e, 0xbf => 0x8e38, 0xc0 => 0x8e40, 0xc1 => 0x8e45, 0xc2 => 0x8e36, 0xc3 => 0x8e3c, 0xc4 => 0x8e3d, 0xc5 => 0x8e41, 0xc6 => 0x8e30, 0xc7 => 0x8e3f, 0xc8 => 0x8ebd, 0xc9 => 0x8f36, 0xca => 0x8f2e, 0xcb => 0x8f35, 0xcc => 0x8f32, 0xcd => 0x8f39, 0xce => 0x8f37, 0xcf => 0x8f34, 0xd0 => 0x9076, 0xd1 => 0x9079, 0xd2 => 0x907b, 0xd3 => 0x9086, 0xd4 => 0x90fa, 0xd5 => 0x9133, 0xd6 => 0x9135, 0xd7 => 0x9136, 0xd8 => 0x9193, 0xd9 => 0x9190, 0xda => 0x9191, 0xdb => 0x918d, 0xdc => 0x918f, 0xdd => 0x9327, 0xde => 0x931e, 0xdf => 0x9308, 0xe0 => 0x931f, 0xe1 => 0x9306, 0xe2 => 0x930f, 0xe3 => 0x937a, 0xe4 => 0x9338, 0xe5 => 0x933c, 0xe6 => 0x931b, 0xe7 => 0x9323, 0xe8 => 0x9312, 0xe9 => 0x9301, 0xea => 0x9346, 0xeb => 0x932d, 0xec => 0x930e, 0xed => 0x930d, 0xee => 0x92cb, 0xef => 0x931d, 0xf0 => 0x92fa, 0xf1 => 0x9325, 0xf2 => 0x9313, 0xf3 => 0x92f9, 0xf4 => 0x92f7, 0xf5 => 0x9334, 0xf6 => 0x9302, 0xf7 => 0x9324, 0xf8 => 0x92ff, 0xf9 => 0x9329, 0xfa => 0x9339, 0xfb => 0x9335, 0xfc => 0x932a, 0xfd => 0x9314, 0xfe => 0x930c, }, 0xec => { 0x40 => 0x930b, 0x41 => 0x92fe, 0x42 => 0x9309, 0x43 => 0x9300, 0x44 => 0x92fb, 0x45 => 0x9316, 0x46 => 0x95bc, 0x47 => 0x95cd, 0x48 => 0x95be, 0x49 => 0x95b9, 0x4a => 0x95ba, 0x4b => 0x95b6, 0x4c => 0x95bf, 0x4d => 0x95b5, 0x4e => 0x95bd, 0x4f => 0x96a9, 0x50 => 0x96d4, 0x51 => 0x970b, 0x52 => 0x9712, 0x53 => 0x9710, 0x54 => 0x9799, 0x55 => 0x9797, 0x56 => 0x9794, 0x57 => 0x97f0, 0x58 => 0x97f8, 0x59 => 0x9835, 0x5a => 0x982f, 0x5b => 0x9832, 0x5c => 0x9924, 0x5d => 0x991f, 0x5e => 0x9927, 0x5f => 0x9929, 0x60 => 0x999e, 0x61 => 0x99ee, 0x62 => 0x99ec, 0x63 => 0x99e5, 0x64 => 0x99e4, 0x65 => 0x99f0, 0x66 => 0x99e3, 0x67 => 0x99ea, 0x68 => 0x99e9, 0x69 => 0x99e7, 0x6a => 0x9ab9, 0x6b => 0x9abf, 0x6c => 0x9ab4, 0x6d => 0x9abb, 0x6e => 0x9af6, 0x6f => 0x9afa, 0x70 => 0x9af9, 0x71 => 0x9af7, 0x72 => 0x9b33, 0x73 => 0x9b80, 0x74 => 0x9b85, 0x75 => 0x9b87, 0x76 => 0x9b7c, 0x77 => 0x9b7e, 0x78 => 0x9b7b, 0x79 => 0x9b82, 0x7a => 0x9b93, 0x7b => 0x9b92, 0x7c => 0x9b90, 0x7d => 0x9b7a, 0x7e => 0x9b95, 0xa1 => 0x9b7d, 0xa2 => 0x9b88, 0xa3 => 0x9d25, 0xa4 => 0x9d17, 0xa5 => 0x9d20, 0xa6 => 0x9d1e, 0xa7 => 0x9d14, 0xa8 => 0x9d29, 0xa9 => 0x9d1d, 0xaa => 0x9d18, 0xab => 0x9d22, 0xac => 0x9d10, 0xad => 0x9d19, 0xae => 0x9d1f, 0xaf => 0x9e88, 0xb0 => 0x9e86, 0xb1 => 0x9e87, 0xb2 => 0x9eae, 0xb3 => 0x9ead, 0xb4 => 0x9ed5, 0xb5 => 0x9ed6, 0xb6 => 0x9efa, 0xb7 => 0x9f12, 0xb8 => 0x9f3d, 0xb9 => 0x5126, 0xba => 0x5125, 0xbb => 0x5122, 0xbc => 0x5124, 0xbd => 0x5120, 0xbe => 0x5129, 0xbf => 0x52f4, 0xc0 => 0x5693, 0xc1 => 0x568c, 0xc2 => 0x568d, 0xc3 => 0x5686, 0xc4 => 0x5684, 0xc5 => 0x5683, 0xc6 => 0x567e, 0xc7 => 0x5682, 0xc8 => 0x567f, 0xc9 => 0x5681, 0xca => 0x58d6, 0xcb => 0x58d4, 0xcc => 0x58cf, 0xcd => 0x58d2, 0xce => 0x5b2d, 0xcf => 0x5b25, 0xd0 => 0x5b32, 0xd1 => 0x5b23, 0xd2 => 0x5b2c, 0xd3 => 0x5b27, 0xd4 => 0x5b26, 0xd5 => 0x5b2f, 0xd6 => 0x5b2e, 0xd7 => 0x5b7b, 0xd8 => 0x5bf1, 0xd9 => 0x5bf2, 0xda => 0x5db7, 0xdb => 0x5e6c, 0xdc => 0x5e6a, 0xdd => 0x5fbe, 0xde => 0x5fbb, 0xdf => 0x61c3, 0xe0 => 0x61b5, 0xe1 => 0x61bc, 0xe2 => 0x61e7, 0xe3 => 0x61e0, 0xe4 => 0x61e5, 0xe5 => 0x61e4, 0xe6 => 0x61e8, 0xe7 => 0x61de, 0xe8 => 0x64ef, 0xe9 => 0x64e9, 0xea => 0x64e3, 0xeb => 0x64eb, 0xec => 0x64e4, 0xed => 0x64e8, 0xee => 0x6581, 0xef => 0x6580, 0xf0 => 0x65b6, 0xf1 => 0x65da, 0xf2 => 0x66d2, 0xf3 => 0x6a8d, 0xf4 => 0x6a96, 0xf5 => 0x6a81, 0xf6 => 0x6aa5, 0xf7 => 0x6a89, 0xf8 => 0x6a9f, 0xf9 => 0x6a9b, 0xfa => 0x6aa1, 0xfb => 0x6a9e, 0xfc => 0x6a87, 0xfd => 0x6a93, 0xfe => 0x6a8e, }, 0xed => { 0x40 => 0x6a95, 0x41 => 0x6a83, 0x42 => 0x6aa8, 0x43 => 0x6aa4, 0x44 => 0x6a91, 0x45 => 0x6a7f, 0x46 => 0x6aa6, 0x47 => 0x6a9a, 0x48 => 0x6a85, 0x49 => 0x6a8c, 0x4a => 0x6a92, 0x4b => 0x6b5b, 0x4c => 0x6bad, 0x4d => 0x6c09, 0x4e => 0x6fcc, 0x4f => 0x6fa9, 0x50 => 0x6ff4, 0x51 => 0x6fd4, 0x52 => 0x6fe3, 0x53 => 0x6fdc, 0x54 => 0x6fed, 0x55 => 0x6fe7, 0x56 => 0x6fe6, 0x57 => 0x6fde, 0x58 => 0x6ff2, 0x59 => 0x6fdd, 0x5a => 0x6fe2, 0x5b => 0x6fe8, 0x5c => 0x71e1, 0x5d => 0x71f1, 0x5e => 0x71e8, 0x5f => 0x71f2, 0x60 => 0x71e4, 0x61 => 0x71f0, 0x62 => 0x71e2, 0x63 => 0x7373, 0x64 => 0x736e, 0x65 => 0x736f, 0x66 => 0x7497, 0x67 => 0x74b2, 0x68 => 0x74ab, 0x69 => 0x7490, 0x6a => 0x74aa, 0x6b => 0x74ad, 0x6c => 0x74b1, 0x6d => 0x74a5, 0x6e => 0x74af, 0x6f => 0x7510, 0x70 => 0x7511, 0x71 => 0x7512, 0x72 => 0x750f, 0x73 => 0x7584, 0x74 => 0x7643, 0x75 => 0x7648, 0x76 => 0x7649, 0x77 => 0x7647, 0x78 => 0x76a4, 0x79 => 0x76e9, 0x7a => 0x77b5, 0x7b => 0x77ab, 0x7c => 0x77b2, 0x7d => 0x77b7, 0x7e => 0x77b6, 0xa1 => 0x77b4, 0xa2 => 0x77b1, 0xa3 => 0x77a8, 0xa4 => 0x77f0, 0xa5 => 0x78f3, 0xa6 => 0x78fd, 0xa7 => 0x7902, 0xa8 => 0x78fb, 0xa9 => 0x78fc, 0xaa => 0x78f2, 0xab => 0x7905, 0xac => 0x78f9, 0xad => 0x78fe, 0xae => 0x7904, 0xaf => 0x79ab, 0xb0 => 0x79a8, 0xb1 => 0x7a5c, 0xb2 => 0x7a5b, 0xb3 => 0x7a56, 0xb4 => 0x7a58, 0xb5 => 0x7a54, 0xb6 => 0x7a5a, 0xb7 => 0x7abe, 0xb8 => 0x7ac0, 0xb9 => 0x7ac1, 0xba => 0x7c05, 0xbb => 0x7c0f, 0xbc => 0x7bf2, 0xbd => 0x7c00, 0xbe => 0x7bff, 0xbf => 0x7bfb, 0xc0 => 0x7c0e, 0xc1 => 0x7bf4, 0xc2 => 0x7c0b, 0xc3 => 0x7bf3, 0xc4 => 0x7c02, 0xc5 => 0x7c09, 0xc6 => 0x7c03, 0xc7 => 0x7c01, 0xc8 => 0x7bf8, 0xc9 => 0x7bfd, 0xca => 0x7c06, 0xcb => 0x7bf0, 0xcc => 0x7bf1, 0xcd => 0x7c10, 0xce => 0x7c0a, 0xcf => 0x7ce8, 0xd0 => 0x7e2d, 0xd1 => 0x7e3c, 0xd2 => 0x7e42, 0xd3 => 0x7e33, 0xd4 => 0x9848, 0xd5 => 0x7e38, 0xd6 => 0x7e2a, 0xd7 => 0x7e49, 0xd8 => 0x7e40, 0xd9 => 0x7e47, 0xda => 0x7e29, 0xdb => 0x7e4c, 0xdc => 0x7e30, 0xdd => 0x7e3b, 0xde => 0x7e36, 0xdf => 0x7e44, 0xe0 => 0x7e3a, 0xe1 => 0x7f45, 0xe2 => 0x7f7f, 0xe3 => 0x7f7e, 0xe4 => 0x7f7d, 0xe5 => 0x7ff4, 0xe6 => 0x7ff2, 0xe7 => 0x802c, 0xe8 => 0x81bb, 0xe9 => 0x81c4, 0xea => 0x81cc, 0xeb => 0x81ca, 0xec => 0x81c5, 0xed => 0x81c7, 0xee => 0x81bc, 0xef => 0x81e9, 0xf0 => 0x825b, 0xf1 => 0x825a, 0xf2 => 0x825c, 0xf3 => 0x8583, 0xf4 => 0x8580, 0xf5 => 0x858f, 0xf6 => 0x85a7, 0xf7 => 0x8595, 0xf8 => 0x85a0, 0xf9 => 0x858b, 0xfa => 0x85a3, 0xfb => 0x857b, 0xfc => 0x85a4, 0xfd => 0x859a, 0xfe => 0x859e, }, 0xee => { 0x40 => 0x8577, 0x41 => 0x857c, 0x42 => 0x8589, 0x43 => 0x85a1, 0x44 => 0x857a, 0x45 => 0x8578, 0x46 => 0x8557, 0x47 => 0x858e, 0x48 => 0x8596, 0x49 => 0x8586, 0x4a => 0x858d, 0x4b => 0x8599, 0x4c => 0x859d, 0x4d => 0x8581, 0x4e => 0x85a2, 0x4f => 0x8582, 0x50 => 0x8588, 0x51 => 0x8585, 0x52 => 0x8579, 0x53 => 0x8576, 0x54 => 0x8598, 0x55 => 0x8590, 0x56 => 0x859f, 0x57 => 0x8668, 0x58 => 0x87be, 0x59 => 0x87aa, 0x5a => 0x87ad, 0x5b => 0x87c5, 0x5c => 0x87b0, 0x5d => 0x87ac, 0x5e => 0x87b9, 0x5f => 0x87b5, 0x60 => 0x87bc, 0x61 => 0x87ae, 0x62 => 0x87c9, 0x63 => 0x87c3, 0x64 => 0x87c2, 0x65 => 0x87cc, 0x66 => 0x87b7, 0x67 => 0x87af, 0x68 => 0x87c4, 0x69 => 0x87ca, 0x6a => 0x87b4, 0x6b => 0x87b6, 0x6c => 0x87bf, 0x6d => 0x87b8, 0x6e => 0x87bd, 0x6f => 0x87de, 0x70 => 0x87b2, 0x71 => 0x8935, 0x72 => 0x8933, 0x73 => 0x893c, 0x74 => 0x893e, 0x75 => 0x8941, 0x76 => 0x8952, 0x77 => 0x8937, 0x78 => 0x8942, 0x79 => 0x89ad, 0x7a => 0x89af, 0x7b => 0x89ae, 0x7c => 0x89f2, 0x7d => 0x89f3, 0x7e => 0x8b1e, 0xa1 => 0x8b18, 0xa2 => 0x8b16, 0xa3 => 0x8b11, 0xa4 => 0x8b05, 0xa5 => 0x8b0b, 0xa6 => 0x8b22, 0xa7 => 0x8b0f, 0xa8 => 0x8b12, 0xa9 => 0x8b15, 0xaa => 0x8b07, 0xab => 0x8b0d, 0xac => 0x8b08, 0xad => 0x8b06, 0xae => 0x8b1c, 0xaf => 0x8b13, 0xb0 => 0x8b1a, 0xb1 => 0x8c4f, 0xb2 => 0x8c70, 0xb3 => 0x8c72, 0xb4 => 0x8c71, 0xb5 => 0x8c6f, 0xb6 => 0x8c95, 0xb7 => 0x8c94, 0xb8 => 0x8cf9, 0xb9 => 0x8d6f, 0xba => 0x8e4e, 0xbb => 0x8e4d, 0xbc => 0x8e53, 0xbd => 0x8e50, 0xbe => 0x8e4c, 0xbf => 0x8e47, 0xc0 => 0x8f43, 0xc1 => 0x8f40, 0xc2 => 0x9085, 0xc3 => 0x907e, 0xc4 => 0x9138, 0xc5 => 0x919a, 0xc6 => 0x91a2, 0xc7 => 0x919b, 0xc8 => 0x9199, 0xc9 => 0x919f, 0xca => 0x91a1, 0xcb => 0x919d, 0xcc => 0x91a0, 0xcd => 0x93a1, 0xce => 0x9383, 0xcf => 0x93af, 0xd0 => 0x9364, 0xd1 => 0x9356, 0xd2 => 0x9347, 0xd3 => 0x937c, 0xd4 => 0x9358, 0xd5 => 0x935c, 0xd6 => 0x9376, 0xd7 => 0x9349, 0xd8 => 0x9350, 0xd9 => 0x9351, 0xda => 0x9360, 0xdb => 0x936d, 0xdc => 0x938f, 0xdd => 0x934c, 0xde => 0x936a, 0xdf => 0x9379, 0xe0 => 0x9357, 0xe1 => 0x9355, 0xe2 => 0x9352, 0xe3 => 0x934f, 0xe4 => 0x9371, 0xe5 => 0x9377, 0xe6 => 0x937b, 0xe7 => 0x9361, 0xe8 => 0x935e, 0xe9 => 0x9363, 0xea => 0x9367, 0xeb => 0x9380, 0xec => 0x934e, 0xed => 0x9359, 0xee => 0x95c7, 0xef => 0x95c0, 0xf0 => 0x95c9, 0xf1 => 0x95c3, 0xf2 => 0x95c5, 0xf3 => 0x95b7, 0xf4 => 0x96ae, 0xf5 => 0x96b0, 0xf6 => 0x96ac, 0xf7 => 0x9720, 0xf8 => 0x971f, 0xf9 => 0x9718, 0xfa => 0x971d, 0xfb => 0x9719, 0xfc => 0x979a, 0xfd => 0x97a1, 0xfe => 0x979c, }, 0xef => { 0x40 => 0x979e, 0x41 => 0x979d, 0x42 => 0x97d5, 0x43 => 0x97d4, 0x44 => 0x97f1, 0x45 => 0x9841, 0x46 => 0x9844, 0x47 => 0x984a, 0x48 => 0x9849, 0x49 => 0x9845, 0x4a => 0x9843, 0x4b => 0x9925, 0x4c => 0x992b, 0x4d => 0x992c, 0x4e => 0x992a, 0x4f => 0x9933, 0x50 => 0x9932, 0x51 => 0x992f, 0x52 => 0x992d, 0x53 => 0x9931, 0x54 => 0x9930, 0x55 => 0x9998, 0x56 => 0x99a3, 0x57 => 0x99a1, 0x58 => 0x9a02, 0x59 => 0x99fa, 0x5a => 0x99f4, 0x5b => 0x99f7, 0x5c => 0x99f9, 0x5d => 0x99f8, 0x5e => 0x99f6, 0x5f => 0x99fb, 0x60 => 0x99fd, 0x61 => 0x99fe, 0x62 => 0x99fc, 0x63 => 0x9a03, 0x64 => 0x9abe, 0x65 => 0x9afe, 0x66 => 0x9afd, 0x67 => 0x9b01, 0x68 => 0x9afc, 0x69 => 0x9b48, 0x6a => 0x9b9a, 0x6b => 0x9ba8, 0x6c => 0x9b9e, 0x6d => 0x9b9b, 0x6e => 0x9ba6, 0x6f => 0x9ba1, 0x70 => 0x9ba5, 0x71 => 0x9ba4, 0x72 => 0x9b86, 0x73 => 0x9ba2, 0x74 => 0x9ba0, 0x75 => 0x9baf, 0x76 => 0x9d33, 0x77 => 0x9d41, 0x78 => 0x9d67, 0x79 => 0x9d36, 0x7a => 0x9d2e, 0x7b => 0x9d2f, 0x7c => 0x9d31, 0x7d => 0x9d38, 0x7e => 0x9d30, 0xa1 => 0x9d45, 0xa2 => 0x9d42, 0xa3 => 0x9d43, 0xa4 => 0x9d3e, 0xa5 => 0x9d37, 0xa6 => 0x9d40, 0xa7 => 0x9d3d, 0xa8 => 0x7ff5, 0xa9 => 0x9d2d, 0xaa => 0x9e8a, 0xab => 0x9e89, 0xac => 0x9e8d, 0xad => 0x9eb0, 0xae => 0x9ec8, 0xaf => 0x9eda, 0xb0 => 0x9efb, 0xb1 => 0x9eff, 0xb2 => 0x9f24, 0xb3 => 0x9f23, 0xb4 => 0x9f22, 0xb5 => 0x9f54, 0xb6 => 0x9fa0, 0xb7 => 0x5131, 0xb8 => 0x512d, 0xb9 => 0x512e, 0xba => 0x5698, 0xbb => 0x569c, 0xbc => 0x5697, 0xbd => 0x569a, 0xbe => 0x569d, 0xbf => 0x5699, 0xc0 => 0x5970, 0xc1 => 0x5b3c, 0xc2 => 0x5c69, 0xc3 => 0x5c6a, 0xc4 => 0x5dc0, 0xc5 => 0x5e6d, 0xc6 => 0x5e6e, 0xc7 => 0x61d8, 0xc8 => 0x61df, 0xc9 => 0x61ed, 0xca => 0x61ee, 0xcb => 0x61f1, 0xcc => 0x61ea, 0xcd => 0x61f0, 0xce => 0x61eb, 0xcf => 0x61d6, 0xd0 => 0x61e9, 0xd1 => 0x64ff, 0xd2 => 0x6504, 0xd3 => 0x64fd, 0xd4 => 0x64f8, 0xd5 => 0x6501, 0xd6 => 0x6503, 0xd7 => 0x64fc, 0xd8 => 0x6594, 0xd9 => 0x65db, 0xda => 0x66da, 0xdb => 0x66db, 0xdc => 0x66d8, 0xdd => 0x6ac5, 0xde => 0x6ab9, 0xdf => 0x6abd, 0xe0 => 0x6ae1, 0xe1 => 0x6ac6, 0xe2 => 0x6aba, 0xe3 => 0x6ab6, 0xe4 => 0x6ab7, 0xe5 => 0x6ac7, 0xe6 => 0x6ab4, 0xe7 => 0x6aad, 0xe8 => 0x6b5e, 0xe9 => 0x6bc9, 0xea => 0x6c0b, 0xeb => 0x7007, 0xec => 0x700c, 0xed => 0x700d, 0xee => 0x7001, 0xef => 0x7005, 0xf0 => 0x7014, 0xf1 => 0x700e, 0xf2 => 0x6fff, 0xf3 => 0x7000, 0xf4 => 0x6ffb, 0xf5 => 0x7026, 0xf6 => 0x6ffc, 0xf7 => 0x6ff7, 0xf8 => 0x700a, 0xf9 => 0x7201, 0xfa => 0x71ff, 0xfb => 0x71f9, 0xfc => 0x7203, 0xfd => 0x71fd, 0xfe => 0x7376, }, 0xf0 => { 0x40 => 0x74b8, 0x41 => 0x74c0, 0x42 => 0x74b5, 0x43 => 0x74c1, 0x44 => 0x74be, 0x45 => 0x74b6, 0x46 => 0x74bb, 0x47 => 0x74c2, 0x48 => 0x7514, 0x49 => 0x7513, 0x4a => 0x765c, 0x4b => 0x7664, 0x4c => 0x7659, 0x4d => 0x7650, 0x4e => 0x7653, 0x4f => 0x7657, 0x50 => 0x765a, 0x51 => 0x76a6, 0x52 => 0x76bd, 0x53 => 0x76ec, 0x54 => 0x77c2, 0x55 => 0x77ba, 0x56 => 0x78ff, 0x57 => 0x790c, 0x58 => 0x7913, 0x59 => 0x7914, 0x5a => 0x7909, 0x5b => 0x7910, 0x5c => 0x7912, 0x5d => 0x7911, 0x5e => 0x79ad, 0x5f => 0x79ac, 0x60 => 0x7a5f, 0x61 => 0x7c1c, 0x62 => 0x7c29, 0x63 => 0x7c19, 0x64 => 0x7c20, 0x65 => 0x7c1f, 0x66 => 0x7c2d, 0x67 => 0x7c1d, 0x68 => 0x7c26, 0x69 => 0x7c28, 0x6a => 0x7c22, 0x6b => 0x7c25, 0x6c => 0x7c30, 0x6d => 0x7e5c, 0x6e => 0x7e50, 0x6f => 0x7e56, 0x70 => 0x7e63, 0x71 => 0x7e58, 0x72 => 0x7e62, 0x73 => 0x7e5f, 0x74 => 0x7e51, 0x75 => 0x7e60, 0x76 => 0x7e57, 0x77 => 0x7e53, 0x78 => 0x7fb5, 0x79 => 0x7fb3, 0x7a => 0x7ff7, 0x7b => 0x7ff8, 0x7c => 0x8075, 0x7d => 0x81d1, 0x7e => 0x81d2, 0xa1 => 0x81d0, 0xa2 => 0x825f, 0xa3 => 0x825e, 0xa4 => 0x85b4, 0xa5 => 0x85c6, 0xa6 => 0x85c0, 0xa7 => 0x85c3, 0xa8 => 0x85c2, 0xa9 => 0x85b3, 0xaa => 0x85b5, 0xab => 0x85bd, 0xac => 0x85c7, 0xad => 0x85c4, 0xae => 0x85bf, 0xaf => 0x85cb, 0xb0 => 0x85ce, 0xb1 => 0x85c8, 0xb2 => 0x85c5, 0xb3 => 0x85b1, 0xb4 => 0x85b6, 0xb5 => 0x85d2, 0xb6 => 0x8624, 0xb7 => 0x85b8, 0xb8 => 0x85b7, 0xb9 => 0x85be, 0xba => 0x8669, 0xbb => 0x87e7, 0xbc => 0x87e6, 0xbd => 0x87e2, 0xbe => 0x87db, 0xbf => 0x87eb, 0xc0 => 0x87ea, 0xc1 => 0x87e5, 0xc2 => 0x87df, 0xc3 => 0x87f3, 0xc4 => 0x87e4, 0xc5 => 0x87d4, 0xc6 => 0x87dc, 0xc7 => 0x87d3, 0xc8 => 0x87ed, 0xc9 => 0x87d8, 0xca => 0x87e3, 0xcb => 0x87a4, 0xcc => 0x87d7, 0xcd => 0x87d9, 0xce => 0x8801, 0xcf => 0x87f4, 0xd0 => 0x87e8, 0xd1 => 0x87dd, 0xd2 => 0x8953, 0xd3 => 0x894b, 0xd4 => 0x894f, 0xd5 => 0x894c, 0xd6 => 0x8946, 0xd7 => 0x8950, 0xd8 => 0x8951, 0xd9 => 0x8949, 0xda => 0x8b2a, 0xdb => 0x8b27, 0xdc => 0x8b23, 0xdd => 0x8b33, 0xde => 0x8b30, 0xdf => 0x8b35, 0xe0 => 0x8b47, 0xe1 => 0x8b2f, 0xe2 => 0x8b3c, 0xe3 => 0x8b3e, 0xe4 => 0x8b31, 0xe5 => 0x8b25, 0xe6 => 0x8b37, 0xe7 => 0x8b26, 0xe8 => 0x8b36, 0xe9 => 0x8b2e, 0xea => 0x8b24, 0xeb => 0x8b3b, 0xec => 0x8b3d, 0xed => 0x8b3a, 0xee => 0x8c42, 0xef => 0x8c75, 0xf0 => 0x8c99, 0xf1 => 0x8c98, 0xf2 => 0x8c97, 0xf3 => 0x8cfe, 0xf4 => 0x8d04, 0xf5 => 0x8d02, 0xf6 => 0x8d00, 0xf7 => 0x8e5c, 0xf8 => 0x8e62, 0xf9 => 0x8e60, 0xfa => 0x8e57, 0xfb => 0x8e56, 0xfc => 0x8e5e, 0xfd => 0x8e65, 0xfe => 0x8e67, }, 0xf1 => { 0x40 => 0x8e5b, 0x41 => 0x8e5a, 0x42 => 0x8e61, 0x43 => 0x8e5d, 0x44 => 0x8e69, 0x45 => 0x8e54, 0x46 => 0x8f46, 0x47 => 0x8f47, 0x48 => 0x8f48, 0x49 => 0x8f4b, 0x4a => 0x9128, 0x4b => 0x913a, 0x4c => 0x913b, 0x4d => 0x913e, 0x4e => 0x91a8, 0x4f => 0x91a5, 0x50 => 0x91a7, 0x51 => 0x91af, 0x52 => 0x91aa, 0x53 => 0x93b5, 0x54 => 0x938c, 0x55 => 0x9392, 0x56 => 0x93b7, 0x57 => 0x939b, 0x58 => 0x939d, 0x59 => 0x9389, 0x5a => 0x93a7, 0x5b => 0x938e, 0x5c => 0x93aa, 0x5d => 0x939e, 0x5e => 0x93a6, 0x5f => 0x9395, 0x60 => 0x9388, 0x61 => 0x9399, 0x62 => 0x939f, 0x63 => 0x938d, 0x64 => 0x93b1, 0x65 => 0x9391, 0x66 => 0x93b2, 0x67 => 0x93a4, 0x68 => 0x93a8, 0x69 => 0x93b4, 0x6a => 0x93a3, 0x6b => 0x93a5, 0x6c => 0x95d2, 0x6d => 0x95d3, 0x6e => 0x95d1, 0x6f => 0x96b3, 0x70 => 0x96d7, 0x71 => 0x96da, 0x72 => 0x5dc2, 0x73 => 0x96df, 0x74 => 0x96d8, 0x75 => 0x96dd, 0x76 => 0x9723, 0x77 => 0x9722, 0x78 => 0x9725, 0x79 => 0x97ac, 0x7a => 0x97ae, 0x7b => 0x97a8, 0x7c => 0x97ab, 0x7d => 0x97a4, 0x7e => 0x97aa, 0xa1 => 0x97a2, 0xa2 => 0x97a5, 0xa3 => 0x97d7, 0xa4 => 0x97d9, 0xa5 => 0x97d6, 0xa6 => 0x97d8, 0xa7 => 0x97fa, 0xa8 => 0x9850, 0xa9 => 0x9851, 0xaa => 0x9852, 0xab => 0x98b8, 0xac => 0x9941, 0xad => 0x993c, 0xae => 0x993a, 0xaf => 0x9a0f, 0xb0 => 0x9a0b, 0xb1 => 0x9a09, 0xb2 => 0x9a0d, 0xb3 => 0x9a04, 0xb4 => 0x9a11, 0xb5 => 0x9a0a, 0xb6 => 0x9a05, 0xb7 => 0x9a07, 0xb8 => 0x9a06, 0xb9 => 0x9ac0, 0xba => 0x9adc, 0xbb => 0x9b08, 0xbc => 0x9b04, 0xbd => 0x9b05, 0xbe => 0x9b29, 0xbf => 0x9b35, 0xc0 => 0x9b4a, 0xc1 => 0x9b4c, 0xc2 => 0x9b4b, 0xc3 => 0x9bc7, 0xc4 => 0x9bc6, 0xc5 => 0x9bc3, 0xc6 => 0x9bbf, 0xc7 => 0x9bc1, 0xc8 => 0x9bb5, 0xc9 => 0x9bb8, 0xca => 0x9bd3, 0xcb => 0x9bb6, 0xcc => 0x9bc4, 0xcd => 0x9bb9, 0xce => 0x9bbd, 0xcf => 0x9d5c, 0xd0 => 0x9d53, 0xd1 => 0x9d4f, 0xd2 => 0x9d4a, 0xd3 => 0x9d5b, 0xd4 => 0x9d4b, 0xd5 => 0x9d59, 0xd6 => 0x9d56, 0xd7 => 0x9d4c, 0xd8 => 0x9d57, 0xd9 => 0x9d52, 0xda => 0x9d54, 0xdb => 0x9d5f, 0xdc => 0x9d58, 0xdd => 0x9d5a, 0xde => 0x9e8e, 0xdf => 0x9e8c, 0xe0 => 0x9edf, 0xe1 => 0x9f01, 0xe2 => 0x9f00, 0xe3 => 0x9f16, 0xe4 => 0x9f25, 0xe5 => 0x9f2b, 0xe6 => 0x9f2a, 0xe7 => 0x9f29, 0xe8 => 0x9f28, 0xe9 => 0x9f4c, 0xea => 0x9f55, 0xeb => 0x5134, 0xec => 0x5135, 0xed => 0x5296, 0xee => 0x52f7, 0xef => 0x53b4, 0xf0 => 0x56ab, 0xf1 => 0x56ad, 0xf2 => 0x56a6, 0xf3 => 0x56a7, 0xf4 => 0x56aa, 0xf5 => 0x56ac, 0xf6 => 0x58da, 0xf7 => 0x58dd, 0xf8 => 0x58db, 0xf9 => 0x5912, 0xfa => 0x5b3d, 0xfb => 0x5b3e, 0xfc => 0x5b3f, 0xfd => 0x5dc3, 0xfe => 0x5e70, }, 0xf2 => { 0x40 => 0x5fbf, 0x41 => 0x61fb, 0x42 => 0x6507, 0x43 => 0x6510, 0x44 => 0x650d, 0x45 => 0x6509, 0x46 => 0x650c, 0x47 => 0x650e, 0x48 => 0x6584, 0x49 => 0x65de, 0x4a => 0x65dd, 0x4b => 0x66de, 0x4c => 0x6ae7, 0x4d => 0x6ae0, 0x4e => 0x6acc, 0x4f => 0x6ad1, 0x50 => 0x6ad9, 0x51 => 0x6acb, 0x52 => 0x6adf, 0x53 => 0x6adc, 0x54 => 0x6ad0, 0x55 => 0x6aeb, 0x56 => 0x6acf, 0x57 => 0x6acd, 0x58 => 0x6ade, 0x59 => 0x6b60, 0x5a => 0x6bb0, 0x5b => 0x6c0c, 0x5c => 0x7019, 0x5d => 0x7027, 0x5e => 0x7020, 0x5f => 0x7016, 0x60 => 0x702b, 0x61 => 0x7021, 0x62 => 0x7022, 0x63 => 0x7023, 0x64 => 0x7029, 0x65 => 0x7017, 0x66 => 0x7024, 0x67 => 0x701c, 0x68 => 0x702a, 0x69 => 0x720c, 0x6a => 0x720a, 0x6b => 0x7207, 0x6c => 0x7202, 0x6d => 0x7205, 0x6e => 0x72a5, 0x6f => 0x72a6, 0x70 => 0x72a4, 0x71 => 0x72a3, 0x72 => 0x72a1, 0x73 => 0x74cb, 0x74 => 0x74c5, 0x75 => 0x74b7, 0x76 => 0x74c3, 0x77 => 0x7516, 0x78 => 0x7660, 0x79 => 0x77c9, 0x7a => 0x77ca, 0x7b => 0x77c4, 0x7c => 0x77f1, 0x7d => 0x791d, 0x7e => 0x791b, 0xa1 => 0x7921, 0xa2 => 0x791c, 0xa3 => 0x7917, 0xa4 => 0x791e, 0xa5 => 0x79b0, 0xa6 => 0x7a67, 0xa7 => 0x7a68, 0xa8 => 0x7c33, 0xa9 => 0x7c3c, 0xaa => 0x7c39, 0xab => 0x7c2c, 0xac => 0x7c3b, 0xad => 0x7cec, 0xae => 0x7cea, 0xaf => 0x7e76, 0xb0 => 0x7e75, 0xb1 => 0x7e78, 0xb2 => 0x7e70, 0xb3 => 0x7e77, 0xb4 => 0x7e6f, 0xb5 => 0x7e7a, 0xb6 => 0x7e72, 0xb7 => 0x7e74, 0xb8 => 0x7e68, 0xb9 => 0x7f4b, 0xba => 0x7f4a, 0xbb => 0x7f83, 0xbc => 0x7f86, 0xbd => 0x7fb7, 0xbe => 0x7ffd, 0xbf => 0x7ffe, 0xc0 => 0x8078, 0xc1 => 0x81d7, 0xc2 => 0x81d5, 0xc3 => 0x8264, 0xc4 => 0x8261, 0xc5 => 0x8263, 0xc6 => 0x85eb, 0xc7 => 0x85f1, 0xc8 => 0x85ed, 0xc9 => 0x85d9, 0xca => 0x85e1, 0xcb => 0x85e8, 0xcc => 0x85da, 0xcd => 0x85d7, 0xce => 0x85ec, 0xcf => 0x85f2, 0xd0 => 0x85f8, 0xd1 => 0x85d8, 0xd2 => 0x85df, 0xd3 => 0x85e3, 0xd4 => 0x85dc, 0xd5 => 0x85d1, 0xd6 => 0x85f0, 0xd7 => 0x85e6, 0xd8 => 0x85ef, 0xd9 => 0x85de, 0xda => 0x85e2, 0xdb => 0x8800, 0xdc => 0x87fa, 0xdd => 0x8803, 0xde => 0x87f6, 0xdf => 0x87f7, 0xe0 => 0x8809, 0xe1 => 0x880c, 0xe2 => 0x880b, 0xe3 => 0x8806, 0xe4 => 0x87fc, 0xe5 => 0x8808, 0xe6 => 0x87ff, 0xe7 => 0x880a, 0xe8 => 0x8802, 0xe9 => 0x8962, 0xea => 0x895a, 0xeb => 0x895b, 0xec => 0x8957, 0xed => 0x8961, 0xee => 0x895c, 0xef => 0x8958, 0xf0 => 0x895d, 0xf1 => 0x8959, 0xf2 => 0x8988, 0xf3 => 0x89b7, 0xf4 => 0x89b6, 0xf5 => 0x89f6, 0xf6 => 0x8b50, 0xf7 => 0x8b48, 0xf8 => 0x8b4a, 0xf9 => 0x8b40, 0xfa => 0x8b53, 0xfb => 0x8b56, 0xfc => 0x8b54, 0xfd => 0x8b4b, 0xfe => 0x8b55, }, 0xf3 => { 0x40 => 0x8b51, 0x41 => 0x8b42, 0x42 => 0x8b52, 0x43 => 0x8b57, 0x44 => 0x8c43, 0x45 => 0x8c77, 0x46 => 0x8c76, 0x47 => 0x8c9a, 0x48 => 0x8d06, 0x49 => 0x8d07, 0x4a => 0x8d09, 0x4b => 0x8dac, 0x4c => 0x8daa, 0x4d => 0x8dad, 0x4e => 0x8dab, 0x4f => 0x8e6d, 0x50 => 0x8e78, 0x51 => 0x8e73, 0x52 => 0x8e6a, 0x53 => 0x8e6f, 0x54 => 0x8e7b, 0x55 => 0x8ec2, 0x56 => 0x8f52, 0x57 => 0x8f51, 0x58 => 0x8f4f, 0x59 => 0x8f50, 0x5a => 0x8f53, 0x5b => 0x8fb4, 0x5c => 0x9140, 0x5d => 0x913f, 0x5e => 0x91b0, 0x5f => 0x91ad, 0x60 => 0x93de, 0x61 => 0x93c7, 0x62 => 0x93cf, 0x63 => 0x93c2, 0x64 => 0x93da, 0x65 => 0x93d0, 0x66 => 0x93f9, 0x67 => 0x93ec, 0x68 => 0x93cc, 0x69 => 0x93d9, 0x6a => 0x93a9, 0x6b => 0x93e6, 0x6c => 0x93ca, 0x6d => 0x93d4, 0x6e => 0x93ee, 0x6f => 0x93e3, 0x70 => 0x93d5, 0x71 => 0x93c4, 0x72 => 0x93ce, 0x73 => 0x93c0, 0x74 => 0x93d2, 0x75 => 0x93e7, 0x76 => 0x957d, 0x77 => 0x95da, 0x78 => 0x95db, 0x79 => 0x96e1, 0x7a => 0x9729, 0x7b => 0x972b, 0x7c => 0x972c, 0x7d => 0x9728, 0x7e => 0x9726, 0xa1 => 0x97b3, 0xa2 => 0x97b7, 0xa3 => 0x97b6, 0xa4 => 0x97dd, 0xa5 => 0x97de, 0xa6 => 0x97df, 0xa7 => 0x985c, 0xa8 => 0x9859, 0xa9 => 0x985d, 0xaa => 0x9857, 0xab => 0x98bf, 0xac => 0x98bd, 0xad => 0x98bb, 0xae => 0x98be, 0xaf => 0x9948, 0xb0 => 0x9947, 0xb1 => 0x9943, 0xb2 => 0x99a6, 0xb3 => 0x99a7, 0xb4 => 0x9a1a, 0xb5 => 0x9a15, 0xb6 => 0x9a25, 0xb7 => 0x9a1d, 0xb8 => 0x9a24, 0xb9 => 0x9a1b, 0xba => 0x9a22, 0xbb => 0x9a20, 0xbc => 0x9a27, 0xbd => 0x9a23, 0xbe => 0x9a1e, 0xbf => 0x9a1c, 0xc0 => 0x9a14, 0xc1 => 0x9ac2, 0xc2 => 0x9b0b, 0xc3 => 0x9b0a, 0xc4 => 0x9b0e, 0xc5 => 0x9b0c, 0xc6 => 0x9b37, 0xc7 => 0x9bea, 0xc8 => 0x9beb, 0xc9 => 0x9be0, 0xca => 0x9bde, 0xcb => 0x9be4, 0xcc => 0x9be6, 0xcd => 0x9be2, 0xce => 0x9bf0, 0xcf => 0x9bd4, 0xd0 => 0x9bd7, 0xd1 => 0x9bec, 0xd2 => 0x9bdc, 0xd3 => 0x9bd9, 0xd4 => 0x9be5, 0xd5 => 0x9bd5, 0xd6 => 0x9be1, 0xd7 => 0x9bda, 0xd8 => 0x9d77, 0xd9 => 0x9d81, 0xda => 0x9d8a, 0xdb => 0x9d84, 0xdc => 0x9d88, 0xdd => 0x9d71, 0xde => 0x9d80, 0xdf => 0x9d78, 0xe0 => 0x9d86, 0xe1 => 0x9d8b, 0xe2 => 0x9d8c, 0xe3 => 0x9d7d, 0xe4 => 0x9d6b, 0xe5 => 0x9d74, 0xe6 => 0x9d75, 0xe7 => 0x9d70, 0xe8 => 0x9d69, 0xe9 => 0x9d85, 0xea => 0x9d73, 0xeb => 0x9d7b, 0xec => 0x9d82, 0xed => 0x9d6f, 0xee => 0x9d79, 0xef => 0x9d7f, 0xf0 => 0x9d87, 0xf1 => 0x9d68, 0xf2 => 0x9e94, 0xf3 => 0x9e91, 0xf4 => 0x9ec0, 0xf5 => 0x9efc, 0xf6 => 0x9f2d, 0xf7 => 0x9f40, 0xf8 => 0x9f41, 0xf9 => 0x9f4d, 0xfa => 0x9f56, 0xfb => 0x9f57, 0xfc => 0x9f58, 0xfd => 0x5337, 0xfe => 0x56b2, }, 0xf4 => { 0x40 => 0x56b5, 0x41 => 0x56b3, 0x42 => 0x58e3, 0x43 => 0x5b45, 0x44 => 0x5dc6, 0x45 => 0x5dc7, 0x46 => 0x5eee, 0x47 => 0x5eef, 0x48 => 0x5fc0, 0x49 => 0x5fc1, 0x4a => 0x61f9, 0x4b => 0x6517, 0x4c => 0x6516, 0x4d => 0x6515, 0x4e => 0x6513, 0x4f => 0x65df, 0x50 => 0x66e8, 0x51 => 0x66e3, 0x52 => 0x66e4, 0x53 => 0x6af3, 0x54 => 0x6af0, 0x55 => 0x6aea, 0x56 => 0x6ae8, 0x57 => 0x6af9, 0x58 => 0x6af1, 0x59 => 0x6aee, 0x5a => 0x6aef, 0x5b => 0x703c, 0x5c => 0x7035, 0x5d => 0x702f, 0x5e => 0x7037, 0x5f => 0x7034, 0x60 => 0x7031, 0x61 => 0x7042, 0x62 => 0x7038, 0x63 => 0x703f, 0x64 => 0x703a, 0x65 => 0x7039, 0x66 => 0x7040, 0x67 => 0x703b, 0x68 => 0x7033, 0x69 => 0x7041, 0x6a => 0x7213, 0x6b => 0x7214, 0x6c => 0x72a8, 0x6d => 0x737d, 0x6e => 0x737c, 0x6f => 0x74ba, 0x70 => 0x76ab, 0x71 => 0x76aa, 0x72 => 0x76be, 0x73 => 0x76ed, 0x74 => 0x77cc, 0x75 => 0x77ce, 0x76 => 0x77cf, 0x77 => 0x77cd, 0x78 => 0x77f2, 0x79 => 0x7925, 0x7a => 0x7923, 0x7b => 0x7927, 0x7c => 0x7928, 0x7d => 0x7924, 0x7e => 0x7929, 0xa1 => 0x79b2, 0xa2 => 0x7a6e, 0xa3 => 0x7a6c, 0xa4 => 0x7a6d, 0xa5 => 0x7af7, 0xa6 => 0x7c49, 0xa7 => 0x7c48, 0xa8 => 0x7c4a, 0xa9 => 0x7c47, 0xaa => 0x7c45, 0xab => 0x7cee, 0xac => 0x7e7b, 0xad => 0x7e7e, 0xae => 0x7e81, 0xaf => 0x7e80, 0xb0 => 0x7fba, 0xb1 => 0x7fff, 0xb2 => 0x8079, 0xb3 => 0x81db, 0xb4 => 0x81d9, 0xb5 => 0x820b, 0xb6 => 0x8268, 0xb7 => 0x8269, 0xb8 => 0x8622, 0xb9 => 0x85ff, 0xba => 0x8601, 0xbb => 0x85fe, 0xbc => 0x861b, 0xbd => 0x8600, 0xbe => 0x85f6, 0xbf => 0x8604, 0xc0 => 0x8609, 0xc1 => 0x8605, 0xc2 => 0x860c, 0xc3 => 0x85fd, 0xc4 => 0x8819, 0xc5 => 0x8810, 0xc6 => 0x8811, 0xc7 => 0x8817, 0xc8 => 0x8813, 0xc9 => 0x8816, 0xca => 0x8963, 0xcb => 0x8966, 0xcc => 0x89b9, 0xcd => 0x89f7, 0xce => 0x8b60, 0xcf => 0x8b6a, 0xd0 => 0x8b5d, 0xd1 => 0x8b68, 0xd2 => 0x8b63, 0xd3 => 0x8b65, 0xd4 => 0x8b67, 0xd5 => 0x8b6d, 0xd6 => 0x8dae, 0xd7 => 0x8e86, 0xd8 => 0x8e88, 0xd9 => 0x8e84, 0xda => 0x8f59, 0xdb => 0x8f56, 0xdc => 0x8f57, 0xdd => 0x8f55, 0xde => 0x8f58, 0xdf => 0x8f5a, 0xe0 => 0x908d, 0xe1 => 0x9143, 0xe2 => 0x9141, 0xe3 => 0x91b7, 0xe4 => 0x91b5, 0xe5 => 0x91b2, 0xe6 => 0x91b3, 0xe7 => 0x940b, 0xe8 => 0x9413, 0xe9 => 0x93fb, 0xea => 0x9420, 0xeb => 0x940f, 0xec => 0x9414, 0xed => 0x93fe, 0xee => 0x9415, 0xef => 0x9410, 0xf0 => 0x9428, 0xf1 => 0x9419, 0xf2 => 0x940d, 0xf3 => 0x93f5, 0xf4 => 0x9400, 0xf5 => 0x93f7, 0xf6 => 0x9407, 0xf7 => 0x940e, 0xf8 => 0x9416, 0xf9 => 0x9412, 0xfa => 0x93fa, 0xfb => 0x9409, 0xfc => 0x93f8, 0xfd => 0x940a, 0xfe => 0x93ff, }, 0xf5 => { 0x40 => 0x93fc, 0x41 => 0x940c, 0x42 => 0x93f6, 0x43 => 0x9411, 0x44 => 0x9406, 0x45 => 0x95de, 0x46 => 0x95e0, 0x47 => 0x95df, 0x48 => 0x972e, 0x49 => 0x972f, 0x4a => 0x97b9, 0x4b => 0x97bb, 0x4c => 0x97fd, 0x4d => 0x97fe, 0x4e => 0x9860, 0x4f => 0x9862, 0x50 => 0x9863, 0x51 => 0x985f, 0x52 => 0x98c1, 0x53 => 0x98c2, 0x54 => 0x9950, 0x55 => 0x994e, 0x56 => 0x9959, 0x57 => 0x994c, 0x58 => 0x994b, 0x59 => 0x9953, 0x5a => 0x9a32, 0x5b => 0x9a34, 0x5c => 0x9a31, 0x5d => 0x9a2c, 0x5e => 0x9a2a, 0x5f => 0x9a36, 0x60 => 0x9a29, 0x61 => 0x9a2e, 0x62 => 0x9a38, 0x63 => 0x9a2d, 0x64 => 0x9ac7, 0x65 => 0x9aca, 0x66 => 0x9ac6, 0x67 => 0x9b10, 0x68 => 0x9b12, 0x69 => 0x9b11, 0x6a => 0x9c0b, 0x6b => 0x9c08, 0x6c => 0x9bf7, 0x6d => 0x9c05, 0x6e => 0x9c12, 0x6f => 0x9bf8, 0x70 => 0x9c40, 0x71 => 0x9c07, 0x72 => 0x9c0e, 0x73 => 0x9c06, 0x74 => 0x9c17, 0x75 => 0x9c14, 0x76 => 0x9c09, 0x77 => 0x9d9f, 0x78 => 0x9d99, 0x79 => 0x9da4, 0x7a => 0x9d9d, 0x7b => 0x9d92, 0x7c => 0x9d98, 0x7d => 0x9d90, 0x7e => 0x9d9b, 0xa1 => 0x9da0, 0xa2 => 0x9d94, 0xa3 => 0x9d9c, 0xa4 => 0x9daa, 0xa5 => 0x9d97, 0xa6 => 0x9da1, 0xa7 => 0x9d9a, 0xa8 => 0x9da2, 0xa9 => 0x9da8, 0xaa => 0x9d9e, 0xab => 0x9da3, 0xac => 0x9dbf, 0xad => 0x9da9, 0xae => 0x9d96, 0xaf => 0x9da6, 0xb0 => 0x9da7, 0xb1 => 0x9e99, 0xb2 => 0x9e9b, 0xb3 => 0x9e9a, 0xb4 => 0x9ee5, 0xb5 => 0x9ee4, 0xb6 => 0x9ee7, 0xb7 => 0x9ee6, 0xb8 => 0x9f30, 0xb9 => 0x9f2e, 0xba => 0x9f5b, 0xbb => 0x9f60, 0xbc => 0x9f5e, 0xbd => 0x9f5d, 0xbe => 0x9f59, 0xbf => 0x9f91, 0xc0 => 0x513a, 0xc1 => 0x5139, 0xc2 => 0x5298, 0xc3 => 0x5297, 0xc4 => 0x56c3, 0xc5 => 0x56bd, 0xc6 => 0x56be, 0xc7 => 0x5b48, 0xc8 => 0x5b47, 0xc9 => 0x5dcb, 0xca => 0x5dcf, 0xcb => 0x5ef1, 0xcc => 0x61fd, 0xcd => 0x651b, 0xce => 0x6b02, 0xcf => 0x6afc, 0xd0 => 0x6b03, 0xd1 => 0x6af8, 0xd2 => 0x6b00, 0xd3 => 0x7043, 0xd4 => 0x7044, 0xd5 => 0x704a, 0xd6 => 0x7048, 0xd7 => 0x7049, 0xd8 => 0x7045, 0xd9 => 0x7046, 0xda => 0x721d, 0xdb => 0x721a, 0xdc => 0x7219, 0xdd => 0x737e, 0xde => 0x7517, 0xdf => 0x766a, 0xe0 => 0x77d0, 0xe1 => 0x792d, 0xe2 => 0x7931, 0xe3 => 0x792f, 0xe4 => 0x7c54, 0xe5 => 0x7c53, 0xe6 => 0x7cf2, 0xe7 => 0x7e8a, 0xe8 => 0x7e87, 0xe9 => 0x7e88, 0xea => 0x7e8b, 0xeb => 0x7e86, 0xec => 0x7e8d, 0xed => 0x7f4d, 0xee => 0x7fbb, 0xef => 0x8030, 0xf0 => 0x81dd, 0xf1 => 0x8618, 0xf2 => 0x862a, 0xf3 => 0x8626, 0xf4 => 0x861f, 0xf5 => 0x8623, 0xf6 => 0x861c, 0xf7 => 0x8619, 0xf8 => 0x8627, 0xf9 => 0x862e, 0xfa => 0x8621, 0xfb => 0x8620, 0xfc => 0x8629, 0xfd => 0x861e, 0xfe => 0x8625, }, 0xf6 => { 0x40 => 0x8829, 0x41 => 0x881d, 0x42 => 0x881b, 0x43 => 0x8820, 0x44 => 0x8824, 0x45 => 0x881c, 0x46 => 0x882b, 0x47 => 0x884a, 0x48 => 0x896d, 0x49 => 0x8969, 0x4a => 0x896e, 0x4b => 0x896b, 0x4c => 0x89fa, 0x4d => 0x8b79, 0x4e => 0x8b78, 0x4f => 0x8b45, 0x50 => 0x8b7a, 0x51 => 0x8b7b, 0x52 => 0x8d10, 0x53 => 0x8d14, 0x54 => 0x8daf, 0x55 => 0x8e8e, 0x56 => 0x8e8c, 0x57 => 0x8f5e, 0x58 => 0x8f5b, 0x59 => 0x8f5d, 0x5a => 0x9146, 0x5b => 0x9144, 0x5c => 0x9145, 0x5d => 0x91b9, 0x5e => 0x943f, 0x5f => 0x943b, 0x60 => 0x9436, 0x61 => 0x9429, 0x62 => 0x943d, 0x63 => 0x943c, 0x64 => 0x9430, 0x65 => 0x9439, 0x66 => 0x942a, 0x67 => 0x9437, 0x68 => 0x942c, 0x69 => 0x9440, 0x6a => 0x9431, 0x6b => 0x95e5, 0x6c => 0x95e4, 0x6d => 0x95e3, 0x6e => 0x9735, 0x6f => 0x973a, 0x70 => 0x97bf, 0x71 => 0x97e1, 0x72 => 0x9864, 0x73 => 0x98c9, 0x74 => 0x98c6, 0x75 => 0x98c0, 0x76 => 0x9958, 0x77 => 0x9956, 0x78 => 0x9a39, 0x79 => 0x9a3d, 0x7a => 0x9a46, 0x7b => 0x9a44, 0x7c => 0x9a42, 0x7d => 0x9a41, 0x7e => 0x9a3a, 0xa1 => 0x9a3f, 0xa2 => 0x9acd, 0xa3 => 0x9b15, 0xa4 => 0x9b17, 0xa5 => 0x9b18, 0xa6 => 0x9b16, 0xa7 => 0x9b3a, 0xa8 => 0x9b52, 0xa9 => 0x9c2b, 0xaa => 0x9c1d, 0xab => 0x9c1c, 0xac => 0x9c2c, 0xad => 0x9c23, 0xae => 0x9c28, 0xaf => 0x9c29, 0xb0 => 0x9c24, 0xb1 => 0x9c21, 0xb2 => 0x9db7, 0xb3 => 0x9db6, 0xb4 => 0x9dbc, 0xb5 => 0x9dc1, 0xb6 => 0x9dc7, 0xb7 => 0x9dca, 0xb8 => 0x9dcf, 0xb9 => 0x9dbe, 0xba => 0x9dc5, 0xbb => 0x9dc3, 0xbc => 0x9dbb, 0xbd => 0x9db5, 0xbe => 0x9dce, 0xbf => 0x9db9, 0xc0 => 0x9dba, 0xc1 => 0x9dac, 0xc2 => 0x9dc8, 0xc3 => 0x9db1, 0xc4 => 0x9dad, 0xc5 => 0x9dcc, 0xc6 => 0x9db3, 0xc7 => 0x9dcd, 0xc8 => 0x9db2, 0xc9 => 0x9e7a, 0xca => 0x9e9c, 0xcb => 0x9eeb, 0xcc => 0x9eee, 0xcd => 0x9eed, 0xce => 0x9f1b, 0xcf => 0x9f18, 0xd0 => 0x9f1a, 0xd1 => 0x9f31, 0xd2 => 0x9f4e, 0xd3 => 0x9f65, 0xd4 => 0x9f64, 0xd5 => 0x9f92, 0xd6 => 0x4eb9, 0xd7 => 0x56c6, 0xd8 => 0x56c5, 0xd9 => 0x56cb, 0xda => 0x5971, 0xdb => 0x5b4b, 0xdc => 0x5b4c, 0xdd => 0x5dd5, 0xde => 0x5dd1, 0xdf => 0x5ef2, 0xe0 => 0x6521, 0xe1 => 0x6520, 0xe2 => 0x6526, 0xe3 => 0x6522, 0xe4 => 0x6b0b, 0xe5 => 0x6b08, 0xe6 => 0x6b09, 0xe7 => 0x6c0d, 0xe8 => 0x7055, 0xe9 => 0x7056, 0xea => 0x7057, 0xeb => 0x7052, 0xec => 0x721e, 0xed => 0x721f, 0xee => 0x72a9, 0xef => 0x737f, 0xf0 => 0x74d8, 0xf1 => 0x74d5, 0xf2 => 0x74d9, 0xf3 => 0x74d7, 0xf4 => 0x766d, 0xf5 => 0x76ad, 0xf6 => 0x7935, 0xf7 => 0x79b4, 0xf8 => 0x7a70, 0xf9 => 0x7a71, 0xfa => 0x7c57, 0xfb => 0x7c5c, 0xfc => 0x7c59, 0xfd => 0x7c5b, 0xfe => 0x7c5a, }, 0xf7 => { 0x40 => 0x7cf4, 0x41 => 0x7cf1, 0x42 => 0x7e91, 0x43 => 0x7f4f, 0x44 => 0x7f87, 0x45 => 0x81de, 0x46 => 0x826b, 0x47 => 0x8634, 0x48 => 0x8635, 0x49 => 0x8633, 0x4a => 0x862c, 0x4b => 0x8632, 0x4c => 0x8636, 0x4d => 0x882c, 0x4e => 0x8828, 0x4f => 0x8826, 0x50 => 0x882a, 0x51 => 0x8825, 0x52 => 0x8971, 0x53 => 0x89bf, 0x54 => 0x89be, 0x55 => 0x89fb, 0x56 => 0x8b7e, 0x57 => 0x8b84, 0x58 => 0x8b82, 0x59 => 0x8b86, 0x5a => 0x8b85, 0x5b => 0x8b7f, 0x5c => 0x8d15, 0x5d => 0x8e95, 0x5e => 0x8e94, 0x5f => 0x8e9a, 0x60 => 0x8e92, 0x61 => 0x8e90, 0x62 => 0x8e96, 0x63 => 0x8e97, 0x64 => 0x8f60, 0x65 => 0x8f62, 0x66 => 0x9147, 0x67 => 0x944c, 0x68 => 0x9450, 0x69 => 0x944a, 0x6a => 0x944b, 0x6b => 0x944f, 0x6c => 0x9447, 0x6d => 0x9445, 0x6e => 0x9448, 0x6f => 0x9449, 0x70 => 0x9446, 0x71 => 0x973f, 0x72 => 0x97e3, 0x73 => 0x986a, 0x74 => 0x9869, 0x75 => 0x98cb, 0x76 => 0x9954, 0x77 => 0x995b, 0x78 => 0x9a4e, 0x79 => 0x9a53, 0x7a => 0x9a54, 0x7b => 0x9a4c, 0x7c => 0x9a4f, 0x7d => 0x9a48, 0x7e => 0x9a4a, 0xa1 => 0x9a49, 0xa2 => 0x9a52, 0xa3 => 0x9a50, 0xa4 => 0x9ad0, 0xa5 => 0x9b19, 0xa6 => 0x9b2b, 0xa7 => 0x9b3b, 0xa8 => 0x9b56, 0xa9 => 0x9b55, 0xaa => 0x9c46, 0xab => 0x9c48, 0xac => 0x9c3f, 0xad => 0x9c44, 0xae => 0x9c39, 0xaf => 0x9c33, 0xb0 => 0x9c41, 0xb1 => 0x9c3c, 0xb2 => 0x9c37, 0xb3 => 0x9c34, 0xb4 => 0x9c32, 0xb5 => 0x9c3d, 0xb6 => 0x9c36, 0xb7 => 0x9ddb, 0xb8 => 0x9dd2, 0xb9 => 0x9dde, 0xba => 0x9dda, 0xbb => 0x9dcb, 0xbc => 0x9dd0, 0xbd => 0x9ddc, 0xbe => 0x9dd1, 0xbf => 0x9ddf, 0xc0 => 0x9de9, 0xc1 => 0x9dd9, 0xc2 => 0x9dd8, 0xc3 => 0x9dd6, 0xc4 => 0x9df5, 0xc5 => 0x9dd5, 0xc6 => 0x9ddd, 0xc7 => 0x9eb6, 0xc8 => 0x9ef0, 0xc9 => 0x9f35, 0xca => 0x9f33, 0xcb => 0x9f32, 0xcc => 0x9f42, 0xcd => 0x9f6b, 0xce => 0x9f95, 0xcf => 0x9fa2, 0xd0 => 0x513d, 0xd1 => 0x5299, 0xd2 => 0x58e8, 0xd3 => 0x58e7, 0xd4 => 0x5972, 0xd5 => 0x5b4d, 0xd6 => 0x5dd8, 0xd7 => 0x882f, 0xd8 => 0x5f4f, 0xd9 => 0x6201, 0xda => 0x6203, 0xdb => 0x6204, 0xdc => 0x6529, 0xdd => 0x6525, 0xde => 0x6596, 0xdf => 0x66eb, 0xe0 => 0x6b11, 0xe1 => 0x6b12, 0xe2 => 0x6b0f, 0xe3 => 0x6bca, 0xe4 => 0x705b, 0xe5 => 0x705a, 0xe6 => 0x7222, 0xe7 => 0x7382, 0xe8 => 0x7381, 0xe9 => 0x7383, 0xea => 0x7670, 0xeb => 0x77d4, 0xec => 0x7c67, 0xed => 0x7c66, 0xee => 0x7e95, 0xef => 0x826c, 0xf0 => 0x863a, 0xf1 => 0x8640, 0xf2 => 0x8639, 0xf3 => 0x863c, 0xf4 => 0x8631, 0xf5 => 0x863b, 0xf6 => 0x863e, 0xf7 => 0x8830, 0xf8 => 0x8832, 0xf9 => 0x882e, 0xfa => 0x8833, 0xfb => 0x8976, 0xfc => 0x8974, 0xfd => 0x8973, 0xfe => 0x89fe, }, 0xf8 => { 0x40 => 0x8b8c, 0x41 => 0x8b8e, 0x42 => 0x8b8b, 0x43 => 0x8b88, 0x44 => 0x8c45, 0x45 => 0x8d19, 0x46 => 0x8e98, 0x47 => 0x8f64, 0x48 => 0x8f63, 0x49 => 0x91bc, 0x4a => 0x9462, 0x4b => 0x9455, 0x4c => 0x945d, 0x4d => 0x9457, 0x4e => 0x945e, 0x4f => 0x97c4, 0x50 => 0x97c5, 0x51 => 0x9800, 0x52 => 0x9a56, 0x53 => 0x9a59, 0x54 => 0x9b1e, 0x55 => 0x9b1f, 0x56 => 0x9b20, 0x57 => 0x9c52, 0x58 => 0x9c58, 0x59 => 0x9c50, 0x5a => 0x9c4a, 0x5b => 0x9c4d, 0x5c => 0x9c4b, 0x5d => 0x9c55, 0x5e => 0x9c59, 0x5f => 0x9c4c, 0x60 => 0x9c4e, 0x61 => 0x9dfb, 0x62 => 0x9df7, 0x63 => 0x9def, 0x64 => 0x9de3, 0x65 => 0x9deb, 0x66 => 0x9df8, 0x67 => 0x9de4, 0x68 => 0x9df6, 0x69 => 0x9de1, 0x6a => 0x9dee, 0x6b => 0x9de6, 0x6c => 0x9df2, 0x6d => 0x9df0, 0x6e => 0x9de2, 0x6f => 0x9dec, 0x70 => 0x9df4, 0x71 => 0x9df3, 0x72 => 0x9de8, 0x73 => 0x9ded, 0x74 => 0x9ec2, 0x75 => 0x9ed0, 0x76 => 0x9ef2, 0x77 => 0x9ef3, 0x78 => 0x9f06, 0x79 => 0x9f1c, 0x7a => 0x9f38, 0x7b => 0x9f37, 0x7c => 0x9f36, 0x7d => 0x9f43, 0x7e => 0x9f4f, 0xa1 => 0x9f71, 0xa2 => 0x9f70, 0xa3 => 0x9f6e, 0xa4 => 0x9f6f, 0xa5 => 0x56d3, 0xa6 => 0x56cd, 0xa7 => 0x5b4e, 0xa8 => 0x5c6d, 0xa9 => 0x652d, 0xaa => 0x66ed, 0xab => 0x66ee, 0xac => 0x6b13, 0xad => 0x705f, 0xae => 0x7061, 0xaf => 0x705d, 0xb0 => 0x7060, 0xb1 => 0x7223, 0xb2 => 0x74db, 0xb3 => 0x74e5, 0xb4 => 0x77d5, 0xb5 => 0x7938, 0xb6 => 0x79b7, 0xb7 => 0x79b6, 0xb8 => 0x7c6a, 0xb9 => 0x7e97, 0xba => 0x7f89, 0xbb => 0x826d, 0xbc => 0x8643, 0xbd => 0x8838, 0xbe => 0x8837, 0xbf => 0x8835, 0xc0 => 0x884b, 0xc1 => 0x8b94, 0xc2 => 0x8b95, 0xc3 => 0x8e9e, 0xc4 => 0x8e9f, 0xc5 => 0x8ea0, 0xc6 => 0x8e9d, 0xc7 => 0x91be, 0xc8 => 0x91bd, 0xc9 => 0x91c2, 0xca => 0x946b, 0xcb => 0x9468, 0xcc => 0x9469, 0xcd => 0x96e5, 0xce => 0x9746, 0xcf => 0x9743, 0xd0 => 0x9747, 0xd1 => 0x97c7, 0xd2 => 0x97e5, 0xd3 => 0x9a5e, 0xd4 => 0x9ad5, 0xd5 => 0x9b59, 0xd6 => 0x9c63, 0xd7 => 0x9c67, 0xd8 => 0x9c66, 0xd9 => 0x9c62, 0xda => 0x9c5e, 0xdb => 0x9c60, 0xdc => 0x9e02, 0xdd => 0x9dfe, 0xde => 0x9e07, 0xdf => 0x9e03, 0xe0 => 0x9e06, 0xe1 => 0x9e05, 0xe2 => 0x9e00, 0xe3 => 0x9e01, 0xe4 => 0x9e09, 0xe5 => 0x9dff, 0xe6 => 0x9dfd, 0xe7 => 0x9e04, 0xe8 => 0x9ea0, 0xe9 => 0x9f1e, 0xea => 0x9f46, 0xeb => 0x9f74, 0xec => 0x9f75, 0xed => 0x9f76, 0xee => 0x56d4, 0xef => 0x652e, 0xf0 => 0x65b8, 0xf1 => 0x6b18, 0xf2 => 0x6b19, 0xf3 => 0x6b17, 0xf4 => 0x6b1a, 0xf5 => 0x7062, 0xf6 => 0x7226, 0xf7 => 0x72aa, 0xf8 => 0x77d8, 0xf9 => 0x77d9, 0xfa => 0x7939, 0xfb => 0x7c69, 0xfc => 0x7c6b, 0xfd => 0x7cf6, 0xfe => 0x7e9a, }, 0xf9 => { 0x40 => 0x7e98, 0x41 => 0x7e9b, 0x42 => 0x7e99, 0x43 => 0x81e0, 0x44 => 0x81e1, 0x45 => 0x8646, 0x46 => 0x8647, 0x47 => 0x8648, 0x48 => 0x8979, 0x49 => 0x897a, 0x4a => 0x897c, 0x4b => 0x897b, 0x4c => 0x89ff, 0x4d => 0x8b98, 0x4e => 0x8b99, 0x4f => 0x8ea5, 0x50 => 0x8ea4, 0x51 => 0x8ea3, 0x52 => 0x946e, 0x53 => 0x946d, 0x54 => 0x946f, 0x55 => 0x9471, 0x56 => 0x9473, 0x57 => 0x9749, 0x58 => 0x9872, 0x59 => 0x995f, 0x5a => 0x9c68, 0x5b => 0x9c6e, 0x5c => 0x9c6d, 0x5d => 0x9e0b, 0x5e => 0x9e0d, 0x5f => 0x9e10, 0x60 => 0x9e0f, 0x61 => 0x9e12, 0x62 => 0x9e11, 0x63 => 0x9ea1, 0x64 => 0x9ef5, 0x65 => 0x9f09, 0x66 => 0x9f47, 0x67 => 0x9f78, 0x68 => 0x9f7b, 0x69 => 0x9f7a, 0x6a => 0x9f79, 0x6b => 0x571e, 0x6c => 0x7066, 0x6d => 0x7c6f, 0x6e => 0x883c, 0x6f => 0x8db2, 0x70 => 0x8ea6, 0x71 => 0x91c3, 0x72 => 0x9474, 0x73 => 0x9478, 0x74 => 0x9476, 0x75 => 0x9475, 0x76 => 0x9a60, 0x77 => 0x9c74, 0x78 => 0x9c73, 0x79 => 0x9c71, 0x7a => 0x9c75, 0x7b => 0x9e14, 0x7c => 0x9e13, 0x7d => 0x9ef6, 0x7e => 0x9f0a, 0xa1 => 0x9fa4, 0xa2 => 0x7068, 0xa3 => 0x7065, 0xa4 => 0x7cf7, 0xa5 => 0x866a, 0xa6 => 0x883e, 0xa7 => 0x883d, 0xa8 => 0x883f, 0xa9 => 0x8b9e, 0xaa => 0x8c9c, 0xab => 0x8ea9, 0xac => 0x8ec9, 0xad => 0x974b, 0xae => 0x9873, 0xaf => 0x9874, 0xb0 => 0x98cc, 0xb1 => 0x9961, 0xb2 => 0x99ab, 0xb3 => 0x9a64, 0xb4 => 0x9a66, 0xb5 => 0x9a67, 0xb6 => 0x9b24, 0xb7 => 0x9e15, 0xb8 => 0x9e17, 0xb9 => 0x9f48, 0xba => 0x6207, 0xbb => 0x6b1e, 0xbc => 0x7227, 0xbd => 0x864c, 0xbe => 0x8ea8, 0xbf => 0x9482, 0xc0 => 0x9480, 0xc1 => 0x9481, 0xc2 => 0x9a69, 0xc3 => 0x9a68, 0xc4 => 0x9b2e, 0xc5 => 0x9e19, 0xc6 => 0x7229, 0xc7 => 0x864b, 0xc8 => 0x8b9f, 0xc9 => 0x9483, 0xca => 0x9c79, 0xcb => 0x9eb7, 0xcc => 0x7675, 0xcd => 0x9a6b, 0xce => 0x9c7a, 0xcf => 0x9e1d, 0xd0 => 0x7069, 0xd1 => 0x706a, 0xd2 => 0x9ea4, 0xd3 => 0x9f7e, 0xd4 => 0x9f49, 0xd5 => 0x9f98, }, ); 1; # end ������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacCroatian.pm��������������������������������������000644 �000765 �000024 �00000004546 11417362674 024040� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacCroatian.pm # # Description: Mac Croatian to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/CROATIAN.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacCroatian = ( 0x80 => 0xc4, 0x81 => 0xc5, 0x82 => 0xc7, 0x83 => 0xc9, 0x84 => 0xd1, 0x85 => 0xd6, 0x86 => 0xdc, 0x87 => 0xe1, 0x88 => 0xe0, 0x89 => 0xe2, 0x8a => 0xe4, 0x8b => 0xe3, 0x8c => 0xe5, 0x8d => 0xe7, 0x8e => 0xe9, 0x8f => 0xe8, 0x90 => 0xea, 0x91 => 0xeb, 0x92 => 0xed, 0x93 => 0xec, 0x94 => 0xee, 0x95 => 0xef, 0x96 => 0xf1, 0x97 => 0xf3, 0x98 => 0xf2, 0x99 => 0xf4, 0x9a => 0xf6, 0x9b => 0xf5, 0x9c => 0xfa, 0x9d => 0xf9, 0x9e => 0xfb, 0x9f => 0xfc, 0xa0 => 0x2020, 0xa1 => 0xb0, 0xa4 => 0xa7, 0xa5 => 0x2022, 0xa6 => 0xb6, 0xa7 => 0xdf, 0xa8 => 0xae, 0xa9 => 0x0160, 0xaa => 0x2122, 0xab => 0xb4, 0xac => 0xa8, 0xad => 0x2260, 0xae => 0x017d, 0xaf => 0xd8, 0xb0 => 0x221e, 0xb2 => 0x2264, 0xb3 => 0x2265, 0xb4 => 0x2206, 0xb6 => 0x2202, 0xb7 => 0x2211, 0xb8 => 0x220f, 0xb9 => 0x0161, 0xba => 0x222b, 0xbb => 0xaa, 0xbc => 0xba, 0xbd => 0x03a9, 0xbe => 0x017e, 0xbf => 0xf8, 0xc0 => 0xbf, 0xc1 => 0xa1, 0xc2 => 0xac, 0xc3 => 0x221a, 0xc4 => 0x0192, 0xc5 => 0x2248, 0xc6 => 0x0106, 0xc7 => 0xab, 0xc8 => 0x010c, 0xc9 => 0x2026, 0xca => 0xa0, 0xcb => 0xc0, 0xcc => 0xc3, 0xcd => 0xd5, 0xce => 0x0152, 0xcf => 0x0153, 0xd0 => 0x0110, 0xd1 => 0x2014, 0xd2 => 0x201c, 0xd3 => 0x201d, 0xd4 => 0x2018, 0xd5 => 0x2019, 0xd6 => 0xf7, 0xd7 => 0x25ca, 0xd8 => 0xf8ff, 0xd9 => 0xa9, 0xda => 0x2044, 0xdb => 0x20ac, 0xdc => 0x2039, 0xdd => 0x203a, 0xde => 0xc6, 0xdf => 0xbb, 0xe0 => 0x2013, 0xe1 => 0xb7, 0xe2 => 0x201a, 0xe3 => 0x201e, 0xe4 => 0x2030, 0xe5 => 0xc2, 0xe6 => 0x0107, 0xe7 => 0xc1, 0xe8 => 0x010d, 0xe9 => 0xc8, 0xea => 0xcd, 0xeb => 0xce, 0xec => 0xcf, 0xed => 0xcc, 0xee => 0xd3, 0xef => 0xd4, 0xf0 => 0x0111, 0xf1 => 0xd2, 0xf2 => 0xda, 0xf3 => 0xdb, 0xf4 => 0xd9, 0xf5 => 0x0131, 0xf6 => 0x02c6, 0xf7 => 0x02dc, 0xf8 => 0xaf, 0xf9 => 0x03c0, 0xfa => 0xcb, 0xfb => 0x02da, 0xfc => 0xb8, 0xfd => 0xca, 0xfe => 0xe6, 0xff => 0x02c7, ); 1; # end ����������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacCyrillic.pm��������������������������������������000644 �000765 �000024 �00000004760 11417362674 024050� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacCyrillic.pm # # Description: Mac Cyrillic to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/CYRILLIC.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacCyrillic = ( 0x80 => 0x0410, 0x81 => 0x0411, 0x82 => 0x0412, 0x83 => 0x0413, 0x84 => 0x0414, 0x85 => 0x0415, 0x86 => 0x0416, 0x87 => 0x0417, 0x88 => 0x0418, 0x89 => 0x0419, 0x8a => 0x041a, 0x8b => 0x041b, 0x8c => 0x041c, 0x8d => 0x041d, 0x8e => 0x041e, 0x8f => 0x041f, 0x90 => 0x0420, 0x91 => 0x0421, 0x92 => 0x0422, 0x93 => 0x0423, 0x94 => 0x0424, 0x95 => 0x0425, 0x96 => 0x0426, 0x97 => 0x0427, 0x98 => 0x0428, 0x99 => 0x0429, 0x9a => 0x042a, 0x9b => 0x042b, 0x9c => 0x042c, 0x9d => 0x042d, 0x9e => 0x042e, 0x9f => 0x042f, 0xa0 => 0x2020, 0xa1 => 0xb0, 0xa2 => 0x0490, 0xa4 => 0xa7, 0xa5 => 0x2022, 0xa6 => 0xb6, 0xa7 => 0x0406, 0xa8 => 0xae, 0xaa => 0x2122, 0xab => 0x0402, 0xac => 0x0452, 0xad => 0x2260, 0xae => 0x0403, 0xaf => 0x0453, 0xb0 => 0x221e, 0xb2 => 0x2264, 0xb3 => 0x2265, 0xb4 => 0x0456, 0xb6 => 0x0491, 0xb7 => 0x0408, 0xb8 => 0x0404, 0xb9 => 0x0454, 0xba => 0x0407, 0xbb => 0x0457, 0xbc => 0x0409, 0xbd => 0x0459, 0xbe => 0x040a, 0xbf => 0x045a, 0xc0 => 0x0458, 0xc1 => 0x0405, 0xc2 => 0xac, 0xc3 => 0x221a, 0xc4 => 0x0192, 0xc5 => 0x2248, 0xc6 => 0x2206, 0xc7 => 0xab, 0xc8 => 0xbb, 0xc9 => 0x2026, 0xca => 0xa0, 0xcb => 0x040b, 0xcc => 0x045b, 0xcd => 0x040c, 0xce => 0x045c, 0xcf => 0x0455, 0xd0 => 0x2013, 0xd1 => 0x2014, 0xd2 => 0x201c, 0xd3 => 0x201d, 0xd4 => 0x2018, 0xd5 => 0x2019, 0xd6 => 0xf7, 0xd7 => 0x201e, 0xd8 => 0x040e, 0xd9 => 0x045e, 0xda => 0x040f, 0xdb => 0x045f, 0xdc => 0x2116, 0xdd => 0x0401, 0xde => 0x0451, 0xdf => 0x044f, 0xe0 => 0x0430, 0xe1 => 0x0431, 0xe2 => 0x0432, 0xe3 => 0x0433, 0xe4 => 0x0434, 0xe5 => 0x0435, 0xe6 => 0x0436, 0xe7 => 0x0437, 0xe8 => 0x0438, 0xe9 => 0x0439, 0xea => 0x043a, 0xeb => 0x043b, 0xec => 0x043c, 0xed => 0x043d, 0xee => 0x043e, 0xef => 0x043f, 0xf0 => 0x0440, 0xf1 => 0x0441, 0xf2 => 0x0442, 0xf3 => 0x0443, 0xf4 => 0x0444, 0xf5 => 0x0445, 0xf6 => 0x0446, 0xf7 => 0x0447, 0xf8 => 0x0448, 0xf9 => 0x0449, 0xfa => 0x044a, 0xfb => 0x044b, 0xfc => 0x044c, 0xfd => 0x044d, 0xfe => 0x044e, 0xff => 0x20ac, ); 1; # end ����������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacGreek.pm�����������������������������������������000644 �000765 �000024 �00000004706 11417362674 023333� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacGreek.pm # # Description: Mac Greek to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/GREEK.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacGreek = ( 0x80 => 0xc4, 0x81 => 0xb9, 0x82 => 0xb2, 0x83 => 0xc9, 0x84 => 0xb3, 0x85 => 0xd6, 0x86 => 0xdc, 0x87 => 0x0385, 0x88 => 0xe0, 0x89 => 0xe2, 0x8a => 0xe4, 0x8b => 0x0384, 0x8c => 0xa8, 0x8d => 0xe7, 0x8e => 0xe9, 0x8f => 0xe8, 0x90 => 0xea, 0x91 => 0xeb, 0x92 => 0xa3, 0x93 => 0x2122, 0x94 => 0xee, 0x95 => 0xef, 0x96 => 0x2022, 0x97 => 0xbd, 0x98 => 0x2030, 0x99 => 0xf4, 0x9a => 0xf6, 0x9b => 0xa6, 0x9c => 0x20ac, 0x9d => 0xf9, 0x9e => 0xfb, 0x9f => 0xfc, 0xa0 => 0x2020, 0xa1 => 0x0393, 0xa2 => 0x0394, 0xa3 => 0x0398, 0xa4 => 0x039b, 0xa5 => 0x039e, 0xa6 => 0x03a0, 0xa7 => 0xdf, 0xa8 => 0xae, 0xaa => 0x03a3, 0xab => 0x03aa, 0xac => 0xa7, 0xad => 0x2260, 0xae => 0xb0, 0xaf => 0xb7, 0xb0 => 0x0391, 0xb2 => 0x2264, 0xb3 => 0x2265, 0xb4 => 0xa5, 0xb5 => 0x0392, 0xb6 => 0x0395, 0xb7 => 0x0396, 0xb8 => 0x0397, 0xb9 => 0x0399, 0xba => 0x039a, 0xbb => 0x039c, 0xbc => 0x03a6, 0xbd => 0x03ab, 0xbe => 0x03a8, 0xbf => 0x03a9, 0xc0 => 0x03ac, 0xc1 => 0x039d, 0xc2 => 0xac, 0xc3 => 0x039f, 0xc4 => 0x03a1, 0xc5 => 0x2248, 0xc6 => 0x03a4, 0xc7 => 0xab, 0xc8 => 0xbb, 0xc9 => 0x2026, 0xca => 0xa0, 0xcb => 0x03a5, 0xcc => 0x03a7, 0xcd => 0x0386, 0xce => 0x0388, 0xcf => 0x0153, 0xd0 => 0x2013, 0xd1 => 0x2015, 0xd2 => 0x201c, 0xd3 => 0x201d, 0xd4 => 0x2018, 0xd5 => 0x2019, 0xd6 => 0xf7, 0xd7 => 0x0389, 0xd8 => 0x038a, 0xd9 => 0x038c, 0xda => 0x038e, 0xdb => 0x03ad, 0xdc => 0x03ae, 0xdd => 0x03af, 0xde => 0x03cc, 0xdf => 0x038f, 0xe0 => 0x03cd, 0xe1 => 0x03b1, 0xe2 => 0x03b2, 0xe3 => 0x03c8, 0xe4 => 0x03b4, 0xe5 => 0x03b5, 0xe6 => 0x03c6, 0xe7 => 0x03b3, 0xe8 => 0x03b7, 0xe9 => 0x03b9, 0xea => 0x03be, 0xeb => 0x03ba, 0xec => 0x03bb, 0xed => 0x03bc, 0xee => 0x03bd, 0xef => 0x03bf, 0xf0 => 0x03c0, 0xf1 => 0x03ce, 0xf2 => 0x03c1, 0xf3 => 0x03c3, 0xf4 => 0x03c4, 0xf5 => 0x03b8, 0xf6 => 0x03c9, 0xf7 => 0x03c2, 0xf8 => 0x03c7, 0xf9 => 0x03c5, 0xfa => 0x03b6, 0xfb => 0x03ca, 0xfc => 0x03cb, 0xfd => 0x0390, 0xfe => 0x03b0, 0xff => 0xad, ); 1; # end ����������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacHebrew.pm����������������������������������������000644 �000765 �000024 �00000005011 11417362674 023500� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacHebrew.pm # # Description: Mac Hebrew to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/HEBREW.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode # and directional characters are ignored #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacHebrew = ( 0x80 => 0xc4, 0x81 => [0x05f2,0x05b7], 0x82 => 0xc7, 0x83 => 0xc9, 0x84 => 0xd1, 0x85 => 0xd6, 0x86 => 0xdc, 0x87 => 0xe1, 0x88 => 0xe0, 0x89 => 0xe2, 0x8a => 0xe4, 0x8b => 0xe3, 0x8c => 0xe5, 0x8d => 0xe7, 0x8e => 0xe9, 0x8f => 0xe8, 0x90 => 0xea, 0x91 => 0xeb, 0x92 => 0xed, 0x93 => 0xec, 0x94 => 0xee, 0x95 => 0xef, 0x96 => 0xf1, 0x97 => 0xf3, 0x98 => 0xf2, 0x99 => 0xf4, 0x9a => 0xf6, 0x9b => 0xf5, 0x9c => 0xfa, 0x9d => 0xf9, 0x9e => 0xfb, 0x9f => 0xfc, 0xa0 => 0x20, 0xa1 => 0x21, 0xa2 => 0x22, 0xa3 => 0x23, 0xa4 => 0x24, 0xa5 => 0x25, 0xa6 => 0x20aa, 0xa7 => 0x27, 0xa8 => 0x29, 0xa9 => 0x28, 0xaa => 0x2a, 0xab => 0x2b, 0xac => 0x2c, 0xad => 0x2d, 0xae => 0x2e, 0xaf => 0x2f, 0xb0 => 0x30, 0xb1 => 0x31, 0xb2 => 0x32, 0xb3 => 0x33, 0xb4 => 0x34, 0xb5 => 0x35, 0xb6 => 0x36, 0xb7 => 0x37, 0xb8 => 0x38, 0xb9 => 0x39, 0xba => 0x3a, 0xbb => 0x3b, 0xbc => 0x3c, 0xbd => 0x3d, 0xbe => 0x3e, 0xbf => 0x3f, 0xc0 => [0xf86a,0x05dc,0x05b9], 0xc1 => 0x201e, 0xc2 => 0xf89b, 0xc3 => 0xf89c, 0xc4 => 0xf89d, 0xc5 => 0xf89e, 0xc6 => 0x05bc, 0xc7 => 0xfb4b, 0xc8 => 0xfb35, 0xc9 => 0x2026, 0xca => 0xa0, 0xcb => 0x05b8, 0xcc => 0x05b7, 0xcd => 0x05b5, 0xce => 0x05b6, 0xcf => 0x05b4, 0xd0 => 0x2013, 0xd1 => 0x2014, 0xd2 => 0x201c, 0xd3 => 0x201d, 0xd4 => 0x2018, 0xd5 => 0x2019, 0xd6 => 0xfb2a, 0xd7 => 0xfb2b, 0xd8 => 0x05bf, 0xd9 => 0x05b0, 0xda => 0x05b2, 0xdb => 0x05b1, 0xdc => 0x05bb, 0xdd => 0x05b9, 0xde => [0x05b8,0xf87f], 0xdf => 0x05b3, 0xe0 => 0x05d0, 0xe1 => 0x05d1, 0xe2 => 0x05d2, 0xe3 => 0x05d3, 0xe4 => 0x05d4, 0xe5 => 0x05d5, 0xe6 => 0x05d6, 0xe7 => 0x05d7, 0xe8 => 0x05d8, 0xe9 => 0x05d9, 0xea => 0x05da, 0xeb => 0x05db, 0xec => 0x05dc, 0xed => 0x05dd, 0xee => 0x05de, 0xef => 0x05df, 0xf0 => 0x05e0, 0xf1 => 0x05e1, 0xf2 => 0x05e2, 0xf3 => 0x05e3, 0xf4 => 0x05e4, 0xf5 => 0x05e5, 0xf6 => 0x05e6, 0xf7 => 0x05e7, 0xf8 => 0x05e8, 0xf9 => 0x05e9, 0xfa => 0x05ea, 0xfb => 0x7d, 0xfc => 0x5d, 0xfd => 0x7b, 0xfe => 0x5b, 0xff => 0x7c, ); 1; # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacIceland.pm���������������������������������������000644 �000765 �000024 �00000004466 11417362674 023640� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacIceland.pm # # Description: Mac Icelandic to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/ICELAND.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacIceland = ( 0x80 => 0xc4, 0x81 => 0xc5, 0x82 => 0xc7, 0x83 => 0xc9, 0x84 => 0xd1, 0x85 => 0xd6, 0x86 => 0xdc, 0x87 => 0xe1, 0x88 => 0xe0, 0x89 => 0xe2, 0x8a => 0xe4, 0x8b => 0xe3, 0x8c => 0xe5, 0x8d => 0xe7, 0x8e => 0xe9, 0x8f => 0xe8, 0x90 => 0xea, 0x91 => 0xeb, 0x92 => 0xed, 0x93 => 0xec, 0x94 => 0xee, 0x95 => 0xef, 0x96 => 0xf1, 0x97 => 0xf3, 0x98 => 0xf2, 0x99 => 0xf4, 0x9a => 0xf6, 0x9b => 0xf5, 0x9c => 0xfa, 0x9d => 0xf9, 0x9e => 0xfb, 0x9f => 0xfc, 0xa0 => 0xdd, 0xa1 => 0xb0, 0xa4 => 0xa7, 0xa5 => 0x2022, 0xa6 => 0xb6, 0xa7 => 0xdf, 0xa8 => 0xae, 0xaa => 0x2122, 0xab => 0xb4, 0xac => 0xa8, 0xad => 0x2260, 0xae => 0xc6, 0xaf => 0xd8, 0xb0 => 0x221e, 0xb2 => 0x2264, 0xb3 => 0x2265, 0xb4 => 0xa5, 0xb6 => 0x2202, 0xb7 => 0x2211, 0xb8 => 0x220f, 0xb9 => 0x03c0, 0xba => 0x222b, 0xbb => 0xaa, 0xbc => 0xba, 0xbd => 0x03a9, 0xbe => 0xe6, 0xbf => 0xf8, 0xc0 => 0xbf, 0xc1 => 0xa1, 0xc2 => 0xac, 0xc3 => 0x221a, 0xc4 => 0x0192, 0xc5 => 0x2248, 0xc6 => 0x2206, 0xc7 => 0xab, 0xc8 => 0xbb, 0xc9 => 0x2026, 0xca => 0xa0, 0xcb => 0xc0, 0xcc => 0xc3, 0xcd => 0xd5, 0xce => 0x0152, 0xcf => 0x0153, 0xd0 => 0x2013, 0xd1 => 0x2014, 0xd2 => 0x201c, 0xd3 => 0x201d, 0xd4 => 0x2018, 0xd5 => 0x2019, 0xd6 => 0xf7, 0xd7 => 0x25ca, 0xd8 => 0xff, 0xd9 => 0x0178, 0xda => 0x2044, 0xdb => 0x20ac, 0xdc => 0xd0, 0xdd => 0xf0, 0xdf => 0xfe, 0xe0 => 0xfd, 0xe1 => 0xb7, 0xe2 => 0x201a, 0xe3 => 0x201e, 0xe4 => 0x2030, 0xe5 => 0xc2, 0xe6 => 0xca, 0xe7 => 0xc1, 0xe8 => 0xcb, 0xe9 => 0xc8, 0xea => 0xcd, 0xeb => 0xce, 0xec => 0xcf, 0xed => 0xcc, 0xee => 0xd3, 0xef => 0xd4, 0xf0 => 0xf8ff, 0xf1 => 0xd2, 0xf2 => 0xda, 0xf3 => 0xdb, 0xf4 => 0xd9, 0xf5 => 0x0131, 0xf6 => 0x02c6, 0xf7 => 0x02dc, 0xf8 => 0xaf, 0xf9 => 0x02d8, 0xfa => 0x02d9, 0xfb => 0x02da, 0xfc => 0xb8, 0xfd => 0x02dd, 0xfe => 0x02db, 0xff => 0x02c7, ); 1; # end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacJapanese.pm��������������������������������������000644 �000765 �000024 �00000364673 11417362674 024040� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacJapanese.pm # # Description: Mac Japanese to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/JAPANESE.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode # This set re-maps characters with codepoints less than 0x80 #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacJapanese = ( 0x5c => 0xa5, 0x80 => 0x5c, 0xa1 => 0xff61, 0xa2 => 0xff62, 0xa3 => 0xff63, 0xa4 => 0xff64, 0xa5 => 0xff65, 0xa6 => 0xff66, 0xa7 => 0xff67, 0xa8 => 0xff68, 0xa9 => 0xff69, 0xaa => 0xff6a, 0xab => 0xff6b, 0xac => 0xff6c, 0xad => 0xff6d, 0xae => 0xff6e, 0xaf => 0xff6f, 0xb0 => 0xff70, 0xb1 => 0xff71, 0xb2 => 0xff72, 0xb3 => 0xff73, 0xb4 => 0xff74, 0xb5 => 0xff75, 0xb6 => 0xff76, 0xb7 => 0xff77, 0xb8 => 0xff78, 0xb9 => 0xff79, 0xba => 0xff7a, 0xbb => 0xff7b, 0xbc => 0xff7c, 0xbd => 0xff7d, 0xbe => 0xff7e, 0xbf => 0xff7f, 0xc0 => 0xff80, 0xc1 => 0xff81, 0xc2 => 0xff82, 0xc3 => 0xff83, 0xc4 => 0xff84, 0xc5 => 0xff85, 0xc6 => 0xff86, 0xc7 => 0xff87, 0xc8 => 0xff88, 0xc9 => 0xff89, 0xca => 0xff8a, 0xcb => 0xff8b, 0xcc => 0xff8c, 0xcd => 0xff8d, 0xce => 0xff8e, 0xcf => 0xff8f, 0xd0 => 0xff90, 0xd1 => 0xff91, 0xd2 => 0xff92, 0xd3 => 0xff93, 0xd4 => 0xff94, 0xd5 => 0xff95, 0xd6 => 0xff96, 0xd7 => 0xff97, 0xd8 => 0xff98, 0xd9 => 0xff99, 0xda => 0xff9a, 0xdb => 0xff9b, 0xdc => 0xff9c, 0xdd => 0xff9d, 0xde => 0xff9e, 0xdf => 0xff9f, 0xfd => 0xa9, 0xfe => 0x2122, 0xff => [0x2026,0xf87f], 0x81 => { 0x40 => 0x3000, 0x41 => 0x3001, 0x42 => 0x3002, 0x43 => 0xff0c, 0x44 => 0xff0e, 0x45 => 0x30fb, 0x46 => 0xff1a, 0x47 => 0xff1b, 0x48 => 0xff1f, 0x49 => 0xff01, 0x4a => 0x309b, 0x4b => 0x309c, 0x4c => 0xb4, 0x4d => 0xff40, 0x4e => 0xa8, 0x4f => 0xff3e, 0x50 => 0xffe3, 0x51 => 0xff3f, 0x52 => 0x30fd, 0x53 => 0x30fe, 0x54 => 0x309d, 0x55 => 0x309e, 0x56 => 0x3003, 0x57 => 0x4edd, 0x58 => 0x3005, 0x59 => 0x3006, 0x5a => 0x3007, 0x5b => 0x30fc, 0x5c => 0x2014, 0x5d => 0x2010, 0x5e => 0xff0f, 0x5f => 0xff3c, 0x60 => 0x301c, 0x61 => 0x2016, 0x62 => 0xff5c, 0x63 => 0x2026, 0x64 => 0x2025, 0x65 => 0x2018, 0x66 => 0x2019, 0x67 => 0x201c, 0x68 => 0x201d, 0x69 => 0xff08, 0x6a => 0xff09, 0x6b => 0x3014, 0x6c => 0x3015, 0x6d => 0xff3b, 0x6e => 0xff3d, 0x6f => 0xff5b, 0x70 => 0xff5d, 0x71 => 0x3008, 0x72 => 0x3009, 0x73 => 0x300a, 0x74 => 0x300b, 0x75 => 0x300c, 0x76 => 0x300d, 0x77 => 0x300e, 0x78 => 0x300f, 0x79 => 0x3010, 0x7a => 0x3011, 0x7b => 0xff0b, 0x7c => 0x2212, 0x7d => 0xb1, 0x7e => 0xd7, 0x80 => 0xf7, 0x81 => 0xff1d, 0x82 => 0x2260, 0x83 => 0xff1c, 0x84 => 0xff1e, 0x85 => 0x2266, 0x86 => 0x2267, 0x87 => 0x221e, 0x88 => 0x2234, 0x89 => 0x2642, 0x8a => 0x2640, 0x8b => 0xb0, 0x8c => 0x2032, 0x8d => 0x2033, 0x8e => 0x2103, 0x8f => 0xffe5, 0x90 => 0xff04, 0x91 => 0xa2, 0x92 => 0xa3, 0x93 => 0xff05, 0x94 => 0xff03, 0x95 => 0xff06, 0x96 => 0xff0a, 0x97 => 0xff20, 0x98 => 0xa7, 0x99 => 0x2606, 0x9a => 0x2605, 0x9b => 0x25cb, 0x9c => 0x25cf, 0x9d => 0x25ce, 0x9e => 0x25c7, 0x9f => 0x25c6, 0xa0 => 0x25a1, 0xa1 => 0x25a0, 0xa2 => 0x25b3, 0xa3 => 0x25b2, 0xa4 => 0x25bd, 0xa5 => 0x25bc, 0xa6 => 0x203b, 0xa7 => 0x3012, 0xa8 => 0x2192, 0xa9 => 0x2190, 0xaa => 0x2191, 0xab => 0x2193, 0xac => 0x3013, 0xb8 => 0x2208, 0xb9 => 0x220b, 0xba => 0x2286, 0xbb => 0x2287, 0xbc => 0x2282, 0xbd => 0x2283, 0xbe => 0x222a, 0xbf => 0x2229, 0xc8 => 0x2227, 0xc9 => 0x2228, 0xca => 0xac, 0xcb => 0x21d2, 0xcc => 0x21d4, 0xcd => 0x2200, 0xce => 0x2203, 0xda => 0x2220, 0xdb => 0x22a5, 0xdc => 0x2312, 0xdd => 0x2202, 0xde => 0x2207, 0xdf => 0x2261, 0xe0 => 0x2252, 0xe1 => 0x226a, 0xe2 => 0x226b, 0xe3 => 0x221a, 0xe4 => 0x223d, 0xe5 => 0x221d, 0xe6 => 0x2235, 0xe7 => 0x222b, 0xe8 => 0x222c, 0xf0 => 0x212b, 0xf1 => 0x2030, 0xf2 => 0x266f, 0xf3 => 0x266d, 0xf4 => 0x266a, 0xf5 => 0x2020, 0xf6 => 0x2021, 0xf7 => 0xb6, 0xfc => 0x25ef, }, 0x82 => { 0x4f => 0xff10, 0x50 => 0xff11, 0x51 => 0xff12, 0x52 => 0xff13, 0x53 => 0xff14, 0x54 => 0xff15, 0x55 => 0xff16, 0x56 => 0xff17, 0x57 => 0xff18, 0x58 => 0xff19, 0x60 => 0xff21, 0x61 => 0xff22, 0x62 => 0xff23, 0x63 => 0xff24, 0x64 => 0xff25, 0x65 => 0xff26, 0x66 => 0xff27, 0x67 => 0xff28, 0x68 => 0xff29, 0x69 => 0xff2a, 0x6a => 0xff2b, 0x6b => 0xff2c, 0x6c => 0xff2d, 0x6d => 0xff2e, 0x6e => 0xff2f, 0x6f => 0xff30, 0x70 => 0xff31, 0x71 => 0xff32, 0x72 => 0xff33, 0x73 => 0xff34, 0x74 => 0xff35, 0x75 => 0xff36, 0x76 => 0xff37, 0x77 => 0xff38, 0x78 => 0xff39, 0x79 => 0xff3a, 0x81 => 0xff41, 0x82 => 0xff42, 0x83 => 0xff43, 0x84 => 0xff44, 0x85 => 0xff45, 0x86 => 0xff46, 0x87 => 0xff47, 0x88 => 0xff48, 0x89 => 0xff49, 0x8a => 0xff4a, 0x8b => 0xff4b, 0x8c => 0xff4c, 0x8d => 0xff4d, 0x8e => 0xff4e, 0x8f => 0xff4f, 0x90 => 0xff50, 0x91 => 0xff51, 0x92 => 0xff52, 0x93 => 0xff53, 0x94 => 0xff54, 0x95 => 0xff55, 0x96 => 0xff56, 0x97 => 0xff57, 0x98 => 0xff58, 0x99 => 0xff59, 0x9a => 0xff5a, 0x9f => 0x3041, 0xa0 => 0x3042, 0xa1 => 0x3043, 0xa2 => 0x3044, 0xa3 => 0x3045, 0xa4 => 0x3046, 0xa5 => 0x3047, 0xa6 => 0x3048, 0xa7 => 0x3049, 0xa8 => 0x304a, 0xa9 => 0x304b, 0xaa => 0x304c, 0xab => 0x304d, 0xac => 0x304e, 0xad => 0x304f, 0xae => 0x3050, 0xaf => 0x3051, 0xb0 => 0x3052, 0xb1 => 0x3053, 0xb2 => 0x3054, 0xb3 => 0x3055, 0xb4 => 0x3056, 0xb5 => 0x3057, 0xb6 => 0x3058, 0xb7 => 0x3059, 0xb8 => 0x305a, 0xb9 => 0x305b, 0xba => 0x305c, 0xbb => 0x305d, 0xbc => 0x305e, 0xbd => 0x305f, 0xbe => 0x3060, 0xbf => 0x3061, 0xc0 => 0x3062, 0xc1 => 0x3063, 0xc2 => 0x3064, 0xc3 => 0x3065, 0xc4 => 0x3066, 0xc5 => 0x3067, 0xc6 => 0x3068, 0xc7 => 0x3069, 0xc8 => 0x306a, 0xc9 => 0x306b, 0xca => 0x306c, 0xcb => 0x306d, 0xcc => 0x306e, 0xcd => 0x306f, 0xce => 0x3070, 0xcf => 0x3071, 0xd0 => 0x3072, 0xd1 => 0x3073, 0xd2 => 0x3074, 0xd3 => 0x3075, 0xd4 => 0x3076, 0xd5 => 0x3077, 0xd6 => 0x3078, 0xd7 => 0x3079, 0xd8 => 0x307a, 0xd9 => 0x307b, 0xda => 0x307c, 0xdb => 0x307d, 0xdc => 0x307e, 0xdd => 0x307f, 0xde => 0x3080, 0xdf => 0x3081, 0xe0 => 0x3082, 0xe1 => 0x3083, 0xe2 => 0x3084, 0xe3 => 0x3085, 0xe4 => 0x3086, 0xe5 => 0x3087, 0xe6 => 0x3088, 0xe7 => 0x3089, 0xe8 => 0x308a, 0xe9 => 0x308b, 0xea => 0x308c, 0xeb => 0x308d, 0xec => 0x308e, 0xed => 0x308f, 0xee => 0x3090, 0xef => 0x3091, 0xf0 => 0x3092, 0xf1 => 0x3093, }, 0x83 => { 0x40 => 0x30a1, 0x41 => 0x30a2, 0x42 => 0x30a3, 0x43 => 0x30a4, 0x44 => 0x30a5, 0x45 => 0x30a6, 0x46 => 0x30a7, 0x47 => 0x30a8, 0x48 => 0x30a9, 0x49 => 0x30aa, 0x4a => 0x30ab, 0x4b => 0x30ac, 0x4c => 0x30ad, 0x4d => 0x30ae, 0x4e => 0x30af, 0x4f => 0x30b0, 0x50 => 0x30b1, 0x51 => 0x30b2, 0x52 => 0x30b3, 0x53 => 0x30b4, 0x54 => 0x30b5, 0x55 => 0x30b6, 0x56 => 0x30b7, 0x57 => 0x30b8, 0x58 => 0x30b9, 0x59 => 0x30ba, 0x5a => 0x30bb, 0x5b => 0x30bc, 0x5c => 0x30bd, 0x5d => 0x30be, 0x5e => 0x30bf, 0x5f => 0x30c0, 0x60 => 0x30c1, 0x61 => 0x30c2, 0x62 => 0x30c3, 0x63 => 0x30c4, 0x64 => 0x30c5, 0x65 => 0x30c6, 0x66 => 0x30c7, 0x67 => 0x30c8, 0x68 => 0x30c9, 0x69 => 0x30ca, 0x6a => 0x30cb, 0x6b => 0x30cc, 0x6c => 0x30cd, 0x6d => 0x30ce, 0x6e => 0x30cf, 0x6f => 0x30d0, 0x70 => 0x30d1, 0x71 => 0x30d2, 0x72 => 0x30d3, 0x73 => 0x30d4, 0x74 => 0x30d5, 0x75 => 0x30d6, 0x76 => 0x30d7, 0x77 => 0x30d8, 0x78 => 0x30d9, 0x79 => 0x30da, 0x7a => 0x30db, 0x7b => 0x30dc, 0x7c => 0x30dd, 0x7d => 0x30de, 0x7e => 0x30df, 0x80 => 0x30e0, 0x81 => 0x30e1, 0x82 => 0x30e2, 0x83 => 0x30e3, 0x84 => 0x30e4, 0x85 => 0x30e5, 0x86 => 0x30e6, 0x87 => 0x30e7, 0x88 => 0x30e8, 0x89 => 0x30e9, 0x8a => 0x30ea, 0x8b => 0x30eb, 0x8c => 0x30ec, 0x8d => 0x30ed, 0x8e => 0x30ee, 0x8f => 0x30ef, 0x90 => 0x30f0, 0x91 => 0x30f1, 0x92 => 0x30f2, 0x93 => 0x30f3, 0x94 => 0x30f4, 0x95 => 0x30f5, 0x96 => 0x30f6, 0x9f => 0x0391, 0xa0 => 0x0392, 0xa1 => 0x0393, 0xa2 => 0x0394, 0xa3 => 0x0395, 0xa4 => 0x0396, 0xa5 => 0x0397, 0xa6 => 0x0398, 0xa7 => 0x0399, 0xa8 => 0x039a, 0xa9 => 0x039b, 0xaa => 0x039c, 0xab => 0x039d, 0xac => 0x039e, 0xad => 0x039f, 0xae => 0x03a0, 0xaf => 0x03a1, 0xb0 => 0x03a3, 0xb1 => 0x03a4, 0xb2 => 0x03a5, 0xb3 => 0x03a6, 0xb4 => 0x03a7, 0xb5 => 0x03a8, 0xb6 => 0x03a9, 0xbf => 0x03b1, 0xc0 => 0x03b2, 0xc1 => 0x03b3, 0xc2 => 0x03b4, 0xc3 => 0x03b5, 0xc4 => 0x03b6, 0xc5 => 0x03b7, 0xc6 => 0x03b8, 0xc7 => 0x03b9, 0xc8 => 0x03ba, 0xc9 => 0x03bb, 0xca => 0x03bc, 0xcb => 0x03bd, 0xcc => 0x03be, 0xcd => 0x03bf, 0xce => 0x03c0, 0xcf => 0x03c1, 0xd0 => 0x03c3, 0xd1 => 0x03c4, 0xd2 => 0x03c5, 0xd3 => 0x03c6, 0xd4 => 0x03c7, 0xd5 => 0x03c8, 0xd6 => 0x03c9, }, 0x84 => { 0x40 => 0x0410, 0x41 => 0x0411, 0x42 => 0x0412, 0x43 => 0x0413, 0x44 => 0x0414, 0x45 => 0x0415, 0x46 => 0x0401, 0x47 => 0x0416, 0x48 => 0x0417, 0x49 => 0x0418, 0x4a => 0x0419, 0x4b => 0x041a, 0x4c => 0x041b, 0x4d => 0x041c, 0x4e => 0x041d, 0x4f => 0x041e, 0x50 => 0x041f, 0x51 => 0x0420, 0x52 => 0x0421, 0x53 => 0x0422, 0x54 => 0x0423, 0x55 => 0x0424, 0x56 => 0x0425, 0x57 => 0x0426, 0x58 => 0x0427, 0x59 => 0x0428, 0x5a => 0x0429, 0x5b => 0x042a, 0x5c => 0x042b, 0x5d => 0x042c, 0x5e => 0x042d, 0x5f => 0x042e, 0x60 => 0x042f, 0x70 => 0x0430, 0x71 => 0x0431, 0x72 => 0x0432, 0x73 => 0x0433, 0x74 => 0x0434, 0x75 => 0x0435, 0x76 => 0x0451, 0x77 => 0x0436, 0x78 => 0x0437, 0x79 => 0x0438, 0x7a => 0x0439, 0x7b => 0x043a, 0x7c => 0x043b, 0x7d => 0x043c, 0x7e => 0x043d, 0x80 => 0x043e, 0x81 => 0x043f, 0x82 => 0x0440, 0x83 => 0x0441, 0x84 => 0x0442, 0x85 => 0x0443, 0x86 => 0x0444, 0x87 => 0x0445, 0x88 => 0x0446, 0x89 => 0x0447, 0x8a => 0x0448, 0x8b => 0x0449, 0x8c => 0x044a, 0x8d => 0x044b, 0x8e => 0x044c, 0x8f => 0x044d, 0x90 => 0x044e, 0x91 => 0x044f, 0x9f => 0x2500, 0xa0 => 0x2502, 0xa1 => 0x250c, 0xa2 => 0x2510, 0xa3 => 0x2518, 0xa4 => 0x2514, 0xa5 => 0x251c, 0xa6 => 0x252c, 0xa7 => 0x2524, 0xa8 => 0x2534, 0xa9 => 0x253c, 0xaa => 0x2501, 0xab => 0x2503, 0xac => 0x250f, 0xad => 0x2513, 0xae => 0x251b, 0xaf => 0x2517, 0xb0 => 0x2523, 0xb1 => 0x2533, 0xb2 => 0x252b, 0xb3 => 0x253b, 0xb4 => 0x254b, 0xb5 => 0x2520, 0xb6 => 0x252f, 0xb7 => 0x2528, 0xb8 => 0x2537, 0xb9 => 0x253f, 0xba => 0x251d, 0xbb => 0x2530, 0xbc => 0x2525, 0xbd => 0x2538, 0xbe => 0x2542, }, 0x85 => { 0x40 => 0x2460, 0x41 => 0x2461, 0x42 => 0x2462, 0x43 => 0x2463, 0x44 => 0x2464, 0x45 => 0x2465, 0x46 => 0x2466, 0x47 => 0x2467, 0x48 => 0x2468, 0x49 => 0x2469, 0x4a => 0x246a, 0x4b => 0x246b, 0x4c => 0x246c, 0x4d => 0x246d, 0x4e => 0x246e, 0x4f => 0x246f, 0x50 => 0x2470, 0x51 => 0x2471, 0x52 => 0x2472, 0x53 => 0x2473, 0x5e => 0x2474, 0x5f => 0x2475, 0x60 => 0x2476, 0x61 => 0x2477, 0x62 => 0x2478, 0x63 => 0x2479, 0x64 => 0x247a, 0x65 => 0x247b, 0x66 => 0x247c, 0x67 => 0x247d, 0x68 => 0x247e, 0x69 => 0x247f, 0x6a => 0x2480, 0x6b => 0x2481, 0x6c => 0x2482, 0x6d => 0x2483, 0x6e => 0x2484, 0x6f => 0x2485, 0x70 => 0x2486, 0x71 => 0x2487, 0x7c => 0x2776, 0x7d => 0x2777, 0x7e => 0x2778, 0x80 => 0x2779, 0x81 => 0x277a, 0x82 => 0x277b, 0x83 => 0x277c, 0x84 => 0x277d, 0x85 => 0x277e, 0x91 => [0xf860,0x30,0x2e], 0x92 => 0x2488, 0x93 => 0x2489, 0x94 => 0x248a, 0x95 => 0x248b, 0x96 => 0x248c, 0x97 => 0x248d, 0x98 => 0x248e, 0x99 => 0x248f, 0x9a => 0x2490, 0x9f => 0x2160, 0xa0 => 0x2161, 0xa1 => 0x2162, 0xa2 => 0x2163, 0xa3 => 0x2164, 0xa4 => 0x2165, 0xa5 => 0x2166, 0xa6 => 0x2167, 0xa7 => 0x2168, 0xa8 => 0x2169, 0xa9 => 0x216a, 0xaa => 0x216b, 0xab => [0xf862,0x58,0x49,0x49,0x49], 0xac => [0xf861,0x58,0x49,0x56], 0xad => [0xf860,0x58,0x56], 0xb3 => 0x2170, 0xb4 => 0x2171, 0xb5 => 0x2172, 0xb6 => 0x2173, 0xb7 => 0x2174, 0xb8 => 0x2175, 0xb9 => 0x2176, 0xba => 0x2177, 0xbb => 0x2178, 0xbc => 0x2179, 0xbd => 0x217a, 0xbe => 0x217b, 0xbf => [0xf862,0x78,0x69,0x69,0x69], 0xc0 => [0xf861,0x78,0x69,0x76], 0xc1 => [0xf860,0x78,0x76], 0xdb => 0x249c, 0xdc => 0x249d, 0xdd => 0x249e, 0xde => 0x249f, 0xdf => 0x24a0, 0xe0 => 0x24a1, 0xe1 => 0x24a2, 0xe2 => 0x24a3, 0xe3 => 0x24a4, 0xe4 => 0x24a5, 0xe5 => 0x24a6, 0xe6 => 0x24a7, 0xe7 => 0x24a8, 0xe8 => 0x24a9, 0xe9 => 0x24aa, 0xea => 0x24ab, 0xeb => 0x24ac, 0xec => 0x24ad, 0xed => 0x24ae, 0xee => 0x24af, 0xef => 0x24b0, 0xf0 => 0x24b1, 0xf1 => 0x24b2, 0xf2 => 0x24b3, 0xf3 => 0x24b4, 0xf4 => 0x24b5, }, 0x86 => { 0x40 => 0x339c, 0x41 => 0x339f, 0x42 => 0x339d, 0x43 => 0x33a0, 0x44 => 0x33a4, 0x45 => [0xff4d,0xf87f], 0x46 => 0x33a1, 0x47 => 0x33a5, 0x48 => 0x339e, 0x49 => 0x33a2, 0x4a => 0x338e, 0x4b => [0xff47,0xf87f], 0x4c => 0x338f, 0x4d => 0x33c4, 0x4e => 0x3396, 0x4f => 0x3397, 0x50 => 0x2113, 0x51 => 0x3398, 0x52 => 0x33b3, 0x53 => 0x33b2, 0x54 => 0x33b1, 0x55 => 0x33b0, 0x56 => 0x2109, 0x57 => 0x33d4, 0x58 => 0x33cb, 0x59 => 0x3390, 0x5a => 0x3385, 0x5b => 0x3386, 0x5c => 0x3387, 0x5d => [0xf860,0x54,0x42], 0x9b => 0x2116, 0x9c => 0x33cd, 0x9d => 0x2121, 0x9e => [0xf861,0x46,0x41,0x58], 0x9f => 0x2664, 0xa0 => 0x2667, 0xa1 => 0x2661, 0xa2 => 0x2662, 0xa3 => 0x2660, 0xa4 => 0x2663, 0xa5 => 0x2665, 0xa6 => 0x2666, 0xb3 => 0x3020, 0xb4 => 0x260e, 0xb5 => 0x3004, 0xc7 => 0x261e, 0xc8 => 0x261c, 0xc9 => 0x261d, 0xca => 0x261f, 0xcb => 0x21c6, 0xcc => 0x21c4, 0xcd => 0x21c5, 0xce => [0xf860,0x2193,0x2191], 0xcf => 0x21e8, 0xd0 => 0x21e6, 0xd1 => 0x21e7, 0xd2 => 0x21e9, 0xd3 => [0x21e8,0xf87a], 0xd4 => [0x21e6,0xf87a], 0xd5 => [0x21e7,0xf87a], 0xd6 => [0x21e9,0xf87a], }, 0x87 => { 0x40 => 0x3230, 0x41 => 0x322a, 0x42 => 0x322b, 0x43 => 0x322c, 0x44 => 0x322d, 0x45 => 0x322e, 0x46 => 0x322f, 0x47 => 0x3240, 0x48 => 0x3237, 0x49 => 0x3242, 0x4a => 0x3243, 0x4b => 0x3239, 0x4c => 0x323a, 0x4d => 0x3231, 0x4e => 0x323e, 0x4f => 0x3234, 0x50 => 0x3232, 0x51 => 0x323b, 0x52 => 0x3236, 0x53 => 0x3233, 0x54 => 0x3235, 0x55 => 0x323c, 0x56 => 0x323d, 0x57 => 0x323f, 0x58 => 0x3238, 0x91 => [0x5927,0x20dd], 0x92 => [0x5c0f,0x20dd], 0x93 => 0x32a4, 0x94 => 0x32a5, 0x95 => 0x32a6, 0x96 => 0x32a7, 0x97 => 0x32a8, 0x98 => 0x32a9, 0x99 => 0x3296, 0x9a => 0x329d, 0x9b => 0x3298, 0x9c => 0x329e, 0x9d => [0x63a7,0x20dd], 0x9e => 0x3299, 0x9f => 0x3349, 0xa0 => 0x3322, 0xa1 => 0x334d, 0xa2 => 0x3314, 0xa3 => 0x3316, 0xa4 => 0x3305, 0xa5 => 0x3333, 0xa6 => 0x334e, 0xa7 => 0x3303, 0xa8 => 0x3336, 0xa9 => 0x3318, 0xaa => 0x3315, 0xab => 0x3327, 0xac => 0x3351, 0xad => 0x334a, 0xae => 0x3339, 0xaf => 0x3357, 0xb0 => 0x330d, 0xb1 => 0x3342, 0xb2 => 0x3323, 0xb3 => 0x3326, 0xb4 => 0x333b, 0xb5 => 0x332b, 0xbd => 0x3300, 0xbe => 0x331e, 0xbf => 0x332a, 0xc0 => 0x3331, 0xc1 => 0x3347, 0xe5 => 0x337e, 0xe6 => 0x337d, 0xe7 => 0x337c, 0xe8 => 0x337b, 0xfa => 0x337f, 0xfb => [0xf862,0x6709,0x9650,0x4f1a,0x793e], 0xfc => [0xf862,0x8ca1,0x56e3,0x6cd5,0x4eba], }, 0x88 => { 0x40 => 0x222e, 0x41 => 0x221f, 0x42 => 0x22bf, 0x54 => 0x301d, 0x55 => 0x301f, 0x68 => 0x3094, 0x6a => 0x30f7, 0x6b => 0x30f8, 0x6c => 0x30f9, 0x6d => 0x30fa, 0x9f => 0x4e9c, 0xa0 => 0x5516, 0xa1 => 0x5a03, 0xa2 => 0x963f, 0xa3 => 0x54c0, 0xa4 => 0x611b, 0xa5 => 0x6328, 0xa6 => 0x59f6, 0xa7 => 0x9022, 0xa8 => 0x8475, 0xa9 => 0x831c, 0xaa => 0x7a50, 0xab => 0x60aa, 0xac => 0x63e1, 0xad => 0x6e25, 0xae => 0x65ed, 0xaf => 0x8466, 0xb0 => 0x82a6, 0xb1 => 0x9bf5, 0xb2 => 0x6893, 0xb3 => 0x5727, 0xb4 => 0x65a1, 0xb5 => 0x6271, 0xb6 => 0x5b9b, 0xb7 => 0x59d0, 0xb8 => 0x867b, 0xb9 => 0x98f4, 0xba => 0x7d62, 0xbb => 0x7dbe, 0xbc => 0x9b8e, 0xbd => 0x6216, 0xbe => 0x7c9f, 0xbf => 0x88b7, 0xc0 => 0x5b89, 0xc1 => 0x5eb5, 0xc2 => 0x6309, 0xc3 => 0x6697, 0xc4 => 0x6848, 0xc5 => 0x95c7, 0xc6 => 0x978d, 0xc7 => 0x674f, 0xc8 => 0x4ee5, 0xc9 => 0x4f0a, 0xca => 0x4f4d, 0xcb => 0x4f9d, 0xcc => 0x5049, 0xcd => 0x56f2, 0xce => 0x5937, 0xcf => 0x59d4, 0xd0 => 0x5a01, 0xd1 => 0x5c09, 0xd2 => 0x60df, 0xd3 => 0x610f, 0xd4 => 0x6170, 0xd5 => 0x6613, 0xd6 => 0x6905, 0xd7 => 0x70ba, 0xd8 => 0x754f, 0xd9 => 0x7570, 0xda => 0x79fb, 0xdb => 0x7dad, 0xdc => 0x7def, 0xdd => 0x80c3, 0xde => 0x840e, 0xdf => 0x8863, 0xe0 => 0x8b02, 0xe1 => 0x9055, 0xe2 => 0x907a, 0xe3 => 0x533b, 0xe4 => 0x4e95, 0xe5 => 0x4ea5, 0xe6 => 0x57df, 0xe7 => 0x80b2, 0xe8 => 0x90c1, 0xe9 => 0x78ef, 0xea => 0x4e00, 0xeb => 0x58f1, 0xec => 0x6ea2, 0xed => 0x9038, 0xee => 0x7a32, 0xef => 0x8328, 0xf0 => 0x828b, 0xf1 => 0x9c2f, 0xf2 => 0x5141, 0xf3 => 0x5370, 0xf4 => 0x54bd, 0xf5 => 0x54e1, 0xf6 => 0x56e0, 0xf7 => 0x59fb, 0xf8 => 0x5f15, 0xf9 => 0x98f2, 0xfa => 0x6deb, 0xfb => 0x80e4, 0xfc => 0x852d, }, 0x89 => { 0x40 => 0x9662, 0x41 => 0x9670, 0x42 => 0x96a0, 0x43 => 0x97fb, 0x44 => 0x540b, 0x45 => 0x53f3, 0x46 => 0x5b87, 0x47 => 0x70cf, 0x48 => 0x7fbd, 0x49 => 0x8fc2, 0x4a => 0x96e8, 0x4b => 0x536f, 0x4c => 0x9d5c, 0x4d => 0x7aba, 0x4e => 0x4e11, 0x4f => 0x7893, 0x50 => 0x81fc, 0x51 => 0x6e26, 0x52 => 0x5618, 0x53 => 0x5504, 0x54 => 0x6b1d, 0x55 => 0x851a, 0x56 => 0x9c3b, 0x57 => 0x59e5, 0x58 => 0x53a9, 0x59 => 0x6d66, 0x5a => 0x74dc, 0x5b => 0x958f, 0x5c => 0x5642, 0x5d => 0x4e91, 0x5e => 0x904b, 0x5f => 0x96f2, 0x60 => 0x834f, 0x61 => 0x990c, 0x62 => 0x53e1, 0x63 => 0x55b6, 0x64 => 0x5b30, 0x65 => 0x5f71, 0x66 => 0x6620, 0x67 => 0x66f3, 0x68 => 0x6804, 0x69 => 0x6c38, 0x6a => 0x6cf3, 0x6b => 0x6d29, 0x6c => 0x745b, 0x6d => 0x76c8, 0x6e => 0x7a4e, 0x6f => 0x9834, 0x70 => 0x82f1, 0x71 => 0x885b, 0x72 => 0x8a60, 0x73 => 0x92ed, 0x74 => 0x6db2, 0x75 => 0x75ab, 0x76 => 0x76ca, 0x77 => 0x99c5, 0x78 => 0x60a6, 0x79 => 0x8b01, 0x7a => 0x8d8a, 0x7b => 0x95b2, 0x7c => 0x698e, 0x7d => 0x53ad, 0x7e => 0x5186, 0x80 => 0x5712, 0x81 => 0x5830, 0x82 => 0x5944, 0x83 => 0x5bb4, 0x84 => 0x5ef6, 0x85 => 0x6028, 0x86 => 0x63a9, 0x87 => 0x63f4, 0x88 => 0x6cbf, 0x89 => 0x6f14, 0x8a => 0x708e, 0x8b => 0x7114, 0x8c => 0x7159, 0x8d => 0x71d5, 0x8e => 0x733f, 0x8f => 0x7e01, 0x90 => 0x8276, 0x91 => 0x82d1, 0x92 => 0x8597, 0x93 => 0x9060, 0x94 => 0x925b, 0x95 => 0x9d1b, 0x96 => 0x5869, 0x97 => 0x65bc, 0x98 => 0x6c5a, 0x99 => 0x7525, 0x9a => 0x51f9, 0x9b => 0x592e, 0x9c => 0x5965, 0x9d => 0x5f80, 0x9e => 0x5fdc, 0x9f => 0x62bc, 0xa0 => 0x65fa, 0xa1 => 0x6a2a, 0xa2 => 0x6b27, 0xa3 => 0x6bb4, 0xa4 => 0x738b, 0xa5 => 0x7fc1, 0xa6 => 0x8956, 0xa7 => 0x9d2c, 0xa8 => 0x9d0e, 0xa9 => 0x9ec4, 0xaa => 0x5ca1, 0xab => 0x6c96, 0xac => 0x837b, 0xad => 0x5104, 0xae => 0x5c4b, 0xaf => 0x61b6, 0xb0 => 0x81c6, 0xb1 => 0x6876, 0xb2 => 0x7261, 0xb3 => 0x4e59, 0xb4 => 0x4ffa, 0xb5 => 0x5378, 0xb6 => 0x6069, 0xb7 => 0x6e29, 0xb8 => 0x7a4f, 0xb9 => 0x97f3, 0xba => 0x4e0b, 0xbb => 0x5316, 0xbc => 0x4eee, 0xbd => 0x4f55, 0xbe => 0x4f3d, 0xbf => 0x4fa1, 0xc0 => 0x4f73, 0xc1 => 0x52a0, 0xc2 => 0x53ef, 0xc3 => 0x5609, 0xc4 => 0x590f, 0xc5 => 0x5ac1, 0xc6 => 0x5bb6, 0xc7 => 0x5be1, 0xc8 => 0x79d1, 0xc9 => 0x6687, 0xca => 0x679c, 0xcb => 0x67b6, 0xcc => 0x6b4c, 0xcd => 0x6cb3, 0xce => 0x706b, 0xcf => 0x73c2, 0xd0 => 0x798d, 0xd1 => 0x79be, 0xd2 => 0x7a3c, 0xd3 => 0x7b87, 0xd4 => 0x82b1, 0xd5 => 0x82db, 0xd6 => 0x8304, 0xd7 => 0x8377, 0xd8 => 0x83ef, 0xd9 => 0x83d3, 0xda => 0x8766, 0xdb => 0x8ab2, 0xdc => 0x5629, 0xdd => 0x8ca8, 0xde => 0x8fe6, 0xdf => 0x904e, 0xe0 => 0x971e, 0xe1 => 0x868a, 0xe2 => 0x4fc4, 0xe3 => 0x5ce8, 0xe4 => 0x6211, 0xe5 => 0x7259, 0xe6 => 0x753b, 0xe7 => 0x81e5, 0xe8 => 0x82bd, 0xe9 => 0x86fe, 0xea => 0x8cc0, 0xeb => 0x96c5, 0xec => 0x9913, 0xed => 0x99d5, 0xee => 0x4ecb, 0xef => 0x4f1a, 0xf0 => 0x89e3, 0xf1 => 0x56de, 0xf2 => 0x584a, 0xf3 => 0x58ca, 0xf4 => 0x5efb, 0xf5 => 0x5feb, 0xf6 => 0x602a, 0xf7 => 0x6094, 0xf8 => 0x6062, 0xf9 => 0x61d0, 0xfa => 0x6212, 0xfb => 0x62d0, 0xfc => 0x6539, }, 0x8a => { 0x40 => 0x9b41, 0x41 => 0x6666, 0x42 => 0x68b0, 0x43 => 0x6d77, 0x44 => 0x7070, 0x45 => 0x754c, 0x46 => 0x7686, 0x47 => 0x7d75, 0x48 => 0x82a5, 0x49 => 0x87f9, 0x4a => 0x958b, 0x4b => 0x968e, 0x4c => 0x8c9d, 0x4d => 0x51f1, 0x4e => 0x52be, 0x4f => 0x5916, 0x50 => 0x54b3, 0x51 => 0x5bb3, 0x52 => 0x5d16, 0x53 => 0x6168, 0x54 => 0x6982, 0x55 => 0x6daf, 0x56 => 0x788d, 0x57 => 0x84cb, 0x58 => 0x8857, 0x59 => 0x8a72, 0x5a => 0x93a7, 0x5b => 0x9ab8, 0x5c => 0x6d6c, 0x5d => 0x99a8, 0x5e => 0x86d9, 0x5f => 0x57a3, 0x60 => 0x67ff, 0x61 => 0x86ce, 0x62 => 0x920e, 0x63 => 0x5283, 0x64 => 0x5687, 0x65 => 0x5404, 0x66 => 0x5ed3, 0x67 => 0x62e1, 0x68 => 0x64b9, 0x69 => 0x683c, 0x6a => 0x6838, 0x6b => 0x6bbb, 0x6c => 0x7372, 0x6d => 0x78ba, 0x6e => 0x7a6b, 0x6f => 0x899a, 0x70 => 0x89d2, 0x71 => 0x8d6b, 0x72 => 0x8f03, 0x73 => 0x90ed, 0x74 => 0x95a3, 0x75 => 0x9694, 0x76 => 0x9769, 0x77 => 0x5b66, 0x78 => 0x5cb3, 0x79 => 0x697d, 0x7a => 0x984d, 0x7b => 0x984e, 0x7c => 0x639b, 0x7d => 0x7b20, 0x7e => 0x6a2b, 0x80 => 0x6a7f, 0x81 => 0x68b6, 0x82 => 0x9c0d, 0x83 => 0x6f5f, 0x84 => 0x5272, 0x85 => 0x559d, 0x86 => 0x6070, 0x87 => 0x62ec, 0x88 => 0x6d3b, 0x89 => 0x6e07, 0x8a => 0x6ed1, 0x8b => 0x845b, 0x8c => 0x8910, 0x8d => 0x8f44, 0x8e => 0x4e14, 0x8f => 0x9c39, 0x90 => 0x53f6, 0x91 => 0x691b, 0x92 => 0x6a3a, 0x93 => 0x9784, 0x94 => 0x682a, 0x95 => 0x515c, 0x96 => 0x7ac3, 0x97 => 0x84b2, 0x98 => 0x91dc, 0x99 => 0x938c, 0x9a => 0x565b, 0x9b => 0x9d28, 0x9c => 0x6822, 0x9d => 0x8305, 0x9e => 0x8431, 0x9f => 0x7ca5, 0xa0 => 0x5208, 0xa1 => 0x82c5, 0xa2 => 0x74e6, 0xa3 => 0x4e7e, 0xa4 => 0x4f83, 0xa5 => 0x51a0, 0xa6 => 0x5bd2, 0xa7 => 0x520a, 0xa8 => 0x52d8, 0xa9 => 0x52e7, 0xaa => 0x5dfb, 0xab => 0x559a, 0xac => 0x582a, 0xad => 0x59e6, 0xae => 0x5b8c, 0xaf => 0x5b98, 0xb0 => 0x5bdb, 0xb1 => 0x5e72, 0xb2 => 0x5e79, 0xb3 => 0x60a3, 0xb4 => 0x611f, 0xb5 => 0x6163, 0xb6 => 0x61be, 0xb7 => 0x63db, 0xb8 => 0x6562, 0xb9 => 0x67d1, 0xba => 0x6853, 0xbb => 0x68fa, 0xbc => 0x6b3e, 0xbd => 0x6b53, 0xbe => 0x6c57, 0xbf => 0x6f22, 0xc0 => 0x6f97, 0xc1 => 0x6f45, 0xc2 => 0x74b0, 0xc3 => 0x7518, 0xc4 => 0x76e3, 0xc5 => 0x770b, 0xc6 => 0x7aff, 0xc7 => 0x7ba1, 0xc8 => 0x7c21, 0xc9 => 0x7de9, 0xca => 0x7f36, 0xcb => 0x7ff0, 0xcc => 0x809d, 0xcd => 0x8266, 0xce => 0x839e, 0xcf => 0x89b3, 0xd0 => 0x8acc, 0xd1 => 0x8cab, 0xd2 => 0x9084, 0xd3 => 0x9451, 0xd4 => 0x9593, 0xd5 => 0x9591, 0xd6 => 0x95a2, 0xd7 => 0x9665, 0xd8 => 0x97d3, 0xd9 => 0x9928, 0xda => 0x8218, 0xdb => 0x4e38, 0xdc => 0x542b, 0xdd => 0x5cb8, 0xde => 0x5dcc, 0xdf => 0x73a9, 0xe0 => 0x764c, 0xe1 => 0x773c, 0xe2 => 0x5ca9, 0xe3 => 0x7feb, 0xe4 => 0x8d0b, 0xe5 => 0x96c1, 0xe6 => 0x9811, 0xe7 => 0x9854, 0xe8 => 0x9858, 0xe9 => 0x4f01, 0xea => 0x4f0e, 0xeb => 0x5371, 0xec => 0x559c, 0xed => 0x5668, 0xee => 0x57fa, 0xef => 0x5947, 0xf0 => 0x5b09, 0xf1 => 0x5bc4, 0xf2 => 0x5c90, 0xf3 => 0x5e0c, 0xf4 => 0x5e7e, 0xf5 => 0x5fcc, 0xf6 => 0x63ee, 0xf7 => 0x673a, 0xf8 => 0x65d7, 0xf9 => 0x65e2, 0xfa => 0x671f, 0xfb => 0x68cb, 0xfc => 0x68c4, }, 0x8b => { 0x40 => 0x6a5f, 0x41 => 0x5e30, 0x42 => 0x6bc5, 0x43 => 0x6c17, 0x44 => 0x6c7d, 0x45 => 0x757f, 0x46 => 0x7948, 0x47 => 0x5b63, 0x48 => 0x7a00, 0x49 => 0x7d00, 0x4a => 0x5fbd, 0x4b => 0x898f, 0x4c => 0x8a18, 0x4d => 0x8cb4, 0x4e => 0x8d77, 0x4f => 0x8ecc, 0x50 => 0x8f1d, 0x51 => 0x98e2, 0x52 => 0x9a0e, 0x53 => 0x9b3c, 0x54 => 0x4e80, 0x55 => 0x507d, 0x56 => 0x5100, 0x57 => 0x5993, 0x58 => 0x5b9c, 0x59 => 0x622f, 0x5a => 0x6280, 0x5b => 0x64ec, 0x5c => 0x6b3a, 0x5d => 0x72a0, 0x5e => 0x7591, 0x5f => 0x7947, 0x60 => 0x7fa9, 0x61 => 0x87fb, 0x62 => 0x8abc, 0x63 => 0x8b70, 0x64 => 0x63ac, 0x65 => 0x83ca, 0x66 => 0x97a0, 0x67 => 0x5409, 0x68 => 0x5403, 0x69 => 0x55ab, 0x6a => 0x6854, 0x6b => 0x6a58, 0x6c => 0x8a70, 0x6d => 0x7827, 0x6e => 0x6775, 0x6f => 0x9ecd, 0x70 => 0x5374, 0x71 => 0x5ba2, 0x72 => 0x811a, 0x73 => 0x8650, 0x74 => 0x9006, 0x75 => 0x4e18, 0x76 => 0x4e45, 0x77 => 0x4ec7, 0x78 => 0x4f11, 0x79 => 0x53ca, 0x7a => 0x5438, 0x7b => 0x5bae, 0x7c => 0x5f13, 0x7d => 0x6025, 0x7e => 0x6551, 0x80 => 0x673d, 0x81 => 0x6c42, 0x82 => 0x6c72, 0x83 => 0x6ce3, 0x84 => 0x7078, 0x85 => 0x7403, 0x86 => 0x7a76, 0x87 => 0x7aae, 0x88 => 0x7b08, 0x89 => 0x7d1a, 0x8a => 0x7cfe, 0x8b => 0x7d66, 0x8c => 0x65e7, 0x8d => 0x725b, 0x8e => 0x53bb, 0x8f => 0x5c45, 0x90 => 0x5de8, 0x91 => 0x62d2, 0x92 => 0x62e0, 0x93 => 0x6319, 0x94 => 0x6e20, 0x95 => 0x865a, 0x96 => 0x8a31, 0x97 => 0x8ddd, 0x98 => 0x92f8, 0x99 => 0x6f01, 0x9a => 0x79a6, 0x9b => 0x9b5a, 0x9c => 0x4ea8, 0x9d => 0x4eab, 0x9e => 0x4eac, 0x9f => 0x4f9b, 0xa0 => 0x4fa0, 0xa1 => 0x50d1, 0xa2 => 0x5147, 0xa3 => 0x7af6, 0xa4 => 0x5171, 0xa5 => 0x51f6, 0xa6 => 0x5354, 0xa7 => 0x5321, 0xa8 => 0x537f, 0xa9 => 0x53eb, 0xaa => 0x55ac, 0xab => 0x5883, 0xac => 0x5ce1, 0xad => 0x5f37, 0xae => 0x5f4a, 0xaf => 0x602f, 0xb0 => 0x6050, 0xb1 => 0x606d, 0xb2 => 0x631f, 0xb3 => 0x6559, 0xb4 => 0x6a4b, 0xb5 => 0x6cc1, 0xb6 => 0x72c2, 0xb7 => 0x72ed, 0xb8 => 0x77ef, 0xb9 => 0x80f8, 0xba => 0x8105, 0xbb => 0x8208, 0xbc => 0x854e, 0xbd => 0x90f7, 0xbe => 0x93e1, 0xbf => 0x97ff, 0xc0 => 0x9957, 0xc1 => 0x9a5a, 0xc2 => 0x4ef0, 0xc3 => 0x51dd, 0xc4 => 0x5c2d, 0xc5 => 0x6681, 0xc6 => 0x696d, 0xc7 => 0x5c40, 0xc8 => 0x66f2, 0xc9 => 0x6975, 0xca => 0x7389, 0xcb => 0x6850, 0xcc => 0x7c81, 0xcd => 0x50c5, 0xce => 0x52e4, 0xcf => 0x5747, 0xd0 => 0x5dfe, 0xd1 => 0x9326, 0xd2 => 0x65a4, 0xd3 => 0x6b23, 0xd4 => 0x6b3d, 0xd5 => 0x7434, 0xd6 => 0x7981, 0xd7 => 0x79bd, 0xd8 => 0x7b4b, 0xd9 => 0x7dca, 0xda => 0x82b9, 0xdb => 0x83cc, 0xdc => 0x887f, 0xdd => 0x895f, 0xde => 0x8b39, 0xdf => 0x8fd1, 0xe0 => 0x91d1, 0xe1 => 0x541f, 0xe2 => 0x9280, 0xe3 => 0x4e5d, 0xe4 => 0x5036, 0xe5 => 0x53e5, 0xe6 => 0x533a, 0xe7 => 0x72d7, 0xe8 => 0x7396, 0xe9 => 0x77e9, 0xea => 0x82e6, 0xeb => 0x8eaf, 0xec => 0x99c6, 0xed => 0x99c8, 0xee => 0x99d2, 0xef => 0x5177, 0xf0 => 0x611a, 0xf1 => 0x865e, 0xf2 => 0x55b0, 0xf3 => 0x7a7a, 0xf4 => 0x5076, 0xf5 => 0x5bd3, 0xf6 => 0x9047, 0xf7 => 0x9685, 0xf8 => 0x4e32, 0xf9 => 0x6adb, 0xfa => 0x91e7, 0xfb => 0x5c51, 0xfc => 0x5c48, }, 0x8c => { 0x40 => 0x6398, 0x41 => 0x7a9f, 0x42 => 0x6c93, 0x43 => 0x9774, 0x44 => 0x8f61, 0x45 => 0x7aaa, 0x46 => 0x718a, 0x47 => 0x9688, 0x48 => 0x7c82, 0x49 => 0x6817, 0x4a => 0x7e70, 0x4b => 0x6851, 0x4c => 0x936c, 0x4d => 0x52f2, 0x4e => 0x541b, 0x4f => 0x85ab, 0x50 => 0x8a13, 0x51 => 0x7fa4, 0x52 => 0x8ecd, 0x53 => 0x90e1, 0x54 => 0x5366, 0x55 => 0x8888, 0x56 => 0x7941, 0x57 => 0x4fc2, 0x58 => 0x50be, 0x59 => 0x5211, 0x5a => 0x5144, 0x5b => 0x5553, 0x5c => 0x572d, 0x5d => 0x73ea, 0x5e => 0x578b, 0x5f => 0x5951, 0x60 => 0x5f62, 0x61 => 0x5f84, 0x62 => 0x6075, 0x63 => 0x6176, 0x64 => 0x6167, 0x65 => 0x61a9, 0x66 => 0x63b2, 0x67 => 0x643a, 0x68 => 0x656c, 0x69 => 0x666f, 0x6a => 0x6842, 0x6b => 0x6e13, 0x6c => 0x7566, 0x6d => 0x7a3d, 0x6e => 0x7cfb, 0x6f => 0x7d4c, 0x70 => 0x7d99, 0x71 => 0x7e4b, 0x72 => 0x7f6b, 0x73 => 0x830e, 0x74 => 0x834a, 0x75 => 0x86cd, 0x76 => 0x8a08, 0x77 => 0x8a63, 0x78 => 0x8b66, 0x79 => 0x8efd, 0x7a => 0x981a, 0x7b => 0x9d8f, 0x7c => 0x82b8, 0x7d => 0x8fce, 0x7e => 0x9be8, 0x80 => 0x5287, 0x81 => 0x621f, 0x82 => 0x6483, 0x83 => 0x6fc0, 0x84 => 0x9699, 0x85 => 0x6841, 0x86 => 0x5091, 0x87 => 0x6b20, 0x88 => 0x6c7a, 0x89 => 0x6f54, 0x8a => 0x7a74, 0x8b => 0x7d50, 0x8c => 0x8840, 0x8d => 0x8a23, 0x8e => 0x6708, 0x8f => 0x4ef6, 0x90 => 0x5039, 0x91 => 0x5026, 0x92 => 0x5065, 0x93 => 0x517c, 0x94 => 0x5238, 0x95 => 0x5263, 0x96 => 0x55a7, 0x97 => 0x570f, 0x98 => 0x5805, 0x99 => 0x5acc, 0x9a => 0x5efa, 0x9b => 0x61b2, 0x9c => 0x61f8, 0x9d => 0x62f3, 0x9e => 0x6372, 0x9f => 0x691c, 0xa0 => 0x6a29, 0xa1 => 0x727d, 0xa2 => 0x72ac, 0xa3 => 0x732e, 0xa4 => 0x7814, 0xa5 => 0x786f, 0xa6 => 0x7d79, 0xa7 => 0x770c, 0xa8 => 0x80a9, 0xa9 => 0x898b, 0xaa => 0x8b19, 0xab => 0x8ce2, 0xac => 0x8ed2, 0xad => 0x9063, 0xae => 0x9375, 0xaf => 0x967a, 0xb0 => 0x9855, 0xb1 => 0x9a13, 0xb2 => 0x9e78, 0xb3 => 0x5143, 0xb4 => 0x539f, 0xb5 => 0x53b3, 0xb6 => 0x5e7b, 0xb7 => 0x5f26, 0xb8 => 0x6e1b, 0xb9 => 0x6e90, 0xba => 0x7384, 0xbb => 0x73fe, 0xbc => 0x7d43, 0xbd => 0x8237, 0xbe => 0x8a00, 0xbf => 0x8afa, 0xc0 => 0x9650, 0xc1 => 0x4e4e, 0xc2 => 0x500b, 0xc3 => 0x53e4, 0xc4 => 0x547c, 0xc5 => 0x56fa, 0xc6 => 0x59d1, 0xc7 => 0x5b64, 0xc8 => 0x5df1, 0xc9 => 0x5eab, 0xca => 0x5f27, 0xcb => 0x6238, 0xcc => 0x6545, 0xcd => 0x67af, 0xce => 0x6e56, 0xcf => 0x72d0, 0xd0 => 0x7cca, 0xd1 => 0x88b4, 0xd2 => 0x80a1, 0xd3 => 0x80e1, 0xd4 => 0x83f0, 0xd5 => 0x864e, 0xd6 => 0x8a87, 0xd7 => 0x8de8, 0xd8 => 0x9237, 0xd9 => 0x96c7, 0xda => 0x9867, 0xdb => 0x9f13, 0xdc => 0x4e94, 0xdd => 0x4e92, 0xde => 0x4f0d, 0xdf => 0x5348, 0xe0 => 0x5449, 0xe1 => 0x543e, 0xe2 => 0x5a2f, 0xe3 => 0x5f8c, 0xe4 => 0x5fa1, 0xe5 => 0x609f, 0xe6 => 0x68a7, 0xe7 => 0x6a8e, 0xe8 => 0x745a, 0xe9 => 0x7881, 0xea => 0x8a9e, 0xeb => 0x8aa4, 0xec => 0x8b77, 0xed => 0x9190, 0xee => 0x4e5e, 0xef => 0x9bc9, 0xf0 => 0x4ea4, 0xf1 => 0x4f7c, 0xf2 => 0x4faf, 0xf3 => 0x5019, 0xf4 => 0x5016, 0xf5 => 0x5149, 0xf6 => 0x516c, 0xf7 => 0x529f, 0xf8 => 0x52b9, 0xf9 => 0x52fe, 0xfa => 0x539a, 0xfb => 0x53e3, 0xfc => 0x5411, }, 0x8d => { 0x40 => 0x540e, 0x41 => 0x5589, 0x42 => 0x5751, 0x43 => 0x57a2, 0x44 => 0x597d, 0x45 => 0x5b54, 0x46 => 0x5b5d, 0x47 => 0x5b8f, 0x48 => 0x5de5, 0x49 => 0x5de7, 0x4a => 0x5df7, 0x4b => 0x5e78, 0x4c => 0x5e83, 0x4d => 0x5e9a, 0x4e => 0x5eb7, 0x4f => 0x5f18, 0x50 => 0x6052, 0x51 => 0x614c, 0x52 => 0x6297, 0x53 => 0x62d8, 0x54 => 0x63a7, 0x55 => 0x653b, 0x56 => 0x6602, 0x57 => 0x6643, 0x58 => 0x66f4, 0x59 => 0x676d, 0x5a => 0x6821, 0x5b => 0x6897, 0x5c => 0x69cb, 0x5d => 0x6c5f, 0x5e => 0x6d2a, 0x5f => 0x6d69, 0x60 => 0x6e2f, 0x61 => 0x6e9d, 0x62 => 0x7532, 0x63 => 0x7687, 0x64 => 0x786c, 0x65 => 0x7a3f, 0x66 => 0x7ce0, 0x67 => 0x7d05, 0x68 => 0x7d18, 0x69 => 0x7d5e, 0x6a => 0x7db1, 0x6b => 0x8015, 0x6c => 0x8003, 0x6d => 0x80af, 0x6e => 0x80b1, 0x6f => 0x8154, 0x70 => 0x818f, 0x71 => 0x822a, 0x72 => 0x8352, 0x73 => 0x884c, 0x74 => 0x8861, 0x75 => 0x8b1b, 0x76 => 0x8ca2, 0x77 => 0x8cfc, 0x78 => 0x90ca, 0x79 => 0x9175, 0x7a => 0x9271, 0x7b => 0x783f, 0x7c => 0x92fc, 0x7d => 0x95a4, 0x7e => 0x964d, 0x80 => 0x9805, 0x81 => 0x9999, 0x82 => 0x9ad8, 0x83 => 0x9d3b, 0x84 => 0x525b, 0x85 => 0x52ab, 0x86 => 0x53f7, 0x87 => 0x5408, 0x88 => 0x58d5, 0x89 => 0x62f7, 0x8a => 0x6fe0, 0x8b => 0x8c6a, 0x8c => 0x8f5f, 0x8d => 0x9eb9, 0x8e => 0x514b, 0x8f => 0x523b, 0x90 => 0x544a, 0x91 => 0x56fd, 0x92 => 0x7a40, 0x93 => 0x9177, 0x94 => 0x9d60, 0x95 => 0x9ed2, 0x96 => 0x7344, 0x97 => 0x6f09, 0x98 => 0x8170, 0x99 => 0x7511, 0x9a => 0x5ffd, 0x9b => 0x60da, 0x9c => 0x9aa8, 0x9d => 0x72db, 0x9e => 0x8fbc, 0x9f => 0x6b64, 0xa0 => 0x9803, 0xa1 => 0x4eca, 0xa2 => 0x56f0, 0xa3 => 0x5764, 0xa4 => 0x58be, 0xa5 => 0x5a5a, 0xa6 => 0x6068, 0xa7 => 0x61c7, 0xa8 => 0x660f, 0xa9 => 0x6606, 0xaa => 0x6839, 0xab => 0x68b1, 0xac => 0x6df7, 0xad => 0x75d5, 0xae => 0x7d3a, 0xaf => 0x826e, 0xb0 => 0x9b42, 0xb1 => 0x4e9b, 0xb2 => 0x4f50, 0xb3 => 0x53c9, 0xb4 => 0x5506, 0xb5 => 0x5d6f, 0xb6 => 0x5de6, 0xb7 => 0x5dee, 0xb8 => 0x67fb, 0xb9 => 0x6c99, 0xba => 0x7473, 0xbb => 0x7802, 0xbc => 0x8a50, 0xbd => 0x9396, 0xbe => 0x88df, 0xbf => 0x5750, 0xc0 => 0x5ea7, 0xc1 => 0x632b, 0xc2 => 0x50b5, 0xc3 => 0x50ac, 0xc4 => 0x518d, 0xc5 => 0x6700, 0xc6 => 0x54c9, 0xc7 => 0x585e, 0xc8 => 0x59bb, 0xc9 => 0x5bb0, 0xca => 0x5f69, 0xcb => 0x624d, 0xcc => 0x63a1, 0xcd => 0x683d, 0xce => 0x6b73, 0xcf => 0x6e08, 0xd0 => 0x707d, 0xd1 => 0x91c7, 0xd2 => 0x7280, 0xd3 => 0x7815, 0xd4 => 0x7826, 0xd5 => 0x796d, 0xd6 => 0x658e, 0xd7 => 0x7d30, 0xd8 => 0x83dc, 0xd9 => 0x88c1, 0xda => 0x8f09, 0xdb => 0x969b, 0xdc => 0x5264, 0xdd => 0x5728, 0xde => 0x6750, 0xdf => 0x7f6a, 0xe0 => 0x8ca1, 0xe1 => 0x51b4, 0xe2 => 0x5742, 0xe3 => 0x962a, 0xe4 => 0x583a, 0xe5 => 0x698a, 0xe6 => 0x80b4, 0xe7 => 0x54b2, 0xe8 => 0x5d0e, 0xe9 => 0x57fc, 0xea => 0x7895, 0xeb => 0x9dfa, 0xec => 0x4f5c, 0xed => 0x524a, 0xee => 0x548b, 0xef => 0x643e, 0xf0 => 0x6628, 0xf1 => 0x6714, 0xf2 => 0x67f5, 0xf3 => 0x7a84, 0xf4 => 0x7b56, 0xf5 => 0x7d22, 0xf6 => 0x932f, 0xf7 => 0x685c, 0xf8 => 0x9bad, 0xf9 => 0x7b39, 0xfa => 0x5319, 0xfb => 0x518a, 0xfc => 0x5237, }, 0x8e => { 0x40 => 0x5bdf, 0x41 => 0x62f6, 0x42 => 0x64ae, 0x43 => 0x64e6, 0x44 => 0x672d, 0x45 => 0x6bba, 0x46 => 0x85a9, 0x47 => 0x96d1, 0x48 => 0x7690, 0x49 => 0x9bd6, 0x4a => 0x634c, 0x4b => 0x9306, 0x4c => 0x9bab, 0x4d => 0x76bf, 0x4e => 0x6652, 0x4f => 0x4e09, 0x50 => 0x5098, 0x51 => 0x53c2, 0x52 => 0x5c71, 0x53 => 0x60e8, 0x54 => 0x6492, 0x55 => 0x6563, 0x56 => 0x685f, 0x57 => 0x71e6, 0x58 => 0x73ca, 0x59 => 0x7523, 0x5a => 0x7b97, 0x5b => 0x7e82, 0x5c => 0x8695, 0x5d => 0x8b83, 0x5e => 0x8cdb, 0x5f => 0x9178, 0x60 => 0x9910, 0x61 => 0x65ac, 0x62 => 0x66ab, 0x63 => 0x6b8b, 0x64 => 0x4ed5, 0x65 => 0x4ed4, 0x66 => 0x4f3a, 0x67 => 0x4f7f, 0x68 => 0x523a, 0x69 => 0x53f8, 0x6a => 0x53f2, 0x6b => 0x55e3, 0x6c => 0x56db, 0x6d => 0x58eb, 0x6e => 0x59cb, 0x6f => 0x59c9, 0x70 => 0x59ff, 0x71 => 0x5b50, 0x72 => 0x5c4d, 0x73 => 0x5e02, 0x74 => 0x5e2b, 0x75 => 0x5fd7, 0x76 => 0x601d, 0x77 => 0x6307, 0x78 => 0x652f, 0x79 => 0x5b5c, 0x7a => 0x65af, 0x7b => 0x65bd, 0x7c => 0x65e8, 0x7d => 0x679d, 0x7e => 0x6b62, 0x80 => 0x6b7b, 0x81 => 0x6c0f, 0x82 => 0x7345, 0x83 => 0x7949, 0x84 => 0x79c1, 0x85 => 0x7cf8, 0x86 => 0x7d19, 0x87 => 0x7d2b, 0x88 => 0x80a2, 0x89 => 0x8102, 0x8a => 0x81f3, 0x8b => 0x8996, 0x8c => 0x8a5e, 0x8d => 0x8a69, 0x8e => 0x8a66, 0x8f => 0x8a8c, 0x90 => 0x8aee, 0x91 => 0x8cc7, 0x92 => 0x8cdc, 0x93 => 0x96cc, 0x94 => 0x98fc, 0x95 => 0x6b6f, 0x96 => 0x4e8b, 0x97 => 0x4f3c, 0x98 => 0x4f8d, 0x99 => 0x5150, 0x9a => 0x5b57, 0x9b => 0x5bfa, 0x9c => 0x6148, 0x9d => 0x6301, 0x9e => 0x6642, 0x9f => 0x6b21, 0xa0 => 0x6ecb, 0xa1 => 0x6cbb, 0xa2 => 0x723e, 0xa3 => 0x74bd, 0xa4 => 0x75d4, 0xa5 => 0x78c1, 0xa6 => 0x793a, 0xa7 => 0x800c, 0xa8 => 0x8033, 0xa9 => 0x81ea, 0xaa => 0x8494, 0xab => 0x8f9e, 0xac => 0x6c50, 0xad => 0x9e7f, 0xae => 0x5f0f, 0xaf => 0x8b58, 0xb0 => 0x9d2b, 0xb1 => 0x7afa, 0xb2 => 0x8ef8, 0xb3 => 0x5b8d, 0xb4 => 0x96eb, 0xb5 => 0x4e03, 0xb6 => 0x53f1, 0xb7 => 0x57f7, 0xb8 => 0x5931, 0xb9 => 0x5ac9, 0xba => 0x5ba4, 0xbb => 0x6089, 0xbc => 0x6e7f, 0xbd => 0x6f06, 0xbe => 0x75be, 0xbf => 0x8cea, 0xc0 => 0x5b9f, 0xc1 => 0x8500, 0xc2 => 0x7be0, 0xc3 => 0x5072, 0xc4 => 0x67f4, 0xc5 => 0x829d, 0xc6 => 0x5c61, 0xc7 => 0x854a, 0xc8 => 0x7e1e, 0xc9 => 0x820e, 0xca => 0x5199, 0xcb => 0x5c04, 0xcc => 0x6368, 0xcd => 0x8d66, 0xce => 0x659c, 0xcf => 0x716e, 0xd0 => 0x793e, 0xd1 => 0x7d17, 0xd2 => 0x8005, 0xd3 => 0x8b1d, 0xd4 => 0x8eca, 0xd5 => 0x906e, 0xd6 => 0x86c7, 0xd7 => 0x90aa, 0xd8 => 0x501f, 0xd9 => 0x52fa, 0xda => 0x5c3a, 0xdb => 0x6753, 0xdc => 0x707c, 0xdd => 0x7235, 0xde => 0x914c, 0xdf => 0x91c8, 0xe0 => 0x932b, 0xe1 => 0x82e5, 0xe2 => 0x5bc2, 0xe3 => 0x5f31, 0xe4 => 0x60f9, 0xe5 => 0x4e3b, 0xe6 => 0x53d6, 0xe7 => 0x5b88, 0xe8 => 0x624b, 0xe9 => 0x6731, 0xea => 0x6b8a, 0xeb => 0x72e9, 0xec => 0x73e0, 0xed => 0x7a2e, 0xee => 0x816b, 0xef => 0x8da3, 0xf0 => 0x9152, 0xf1 => 0x9996, 0xf2 => 0x5112, 0xf3 => 0x53d7, 0xf4 => 0x546a, 0xf5 => 0x5bff, 0xf6 => 0x6388, 0xf7 => 0x6a39, 0xf8 => 0x7dac, 0xf9 => 0x9700, 0xfa => 0x56da, 0xfb => 0x53ce, 0xfc => 0x5468, }, 0x8f => { 0x40 => 0x5b97, 0x41 => 0x5c31, 0x42 => 0x5dde, 0x43 => 0x4fee, 0x44 => 0x6101, 0x45 => 0x62fe, 0x46 => 0x6d32, 0x47 => 0x79c0, 0x48 => 0x79cb, 0x49 => 0x7d42, 0x4a => 0x7e4d, 0x4b => 0x7fd2, 0x4c => 0x81ed, 0x4d => 0x821f, 0x4e => 0x8490, 0x4f => 0x8846, 0x50 => 0x8972, 0x51 => 0x8b90, 0x52 => 0x8e74, 0x53 => 0x8f2f, 0x54 => 0x9031, 0x55 => 0x914b, 0x56 => 0x916c, 0x57 => 0x96c6, 0x58 => 0x919c, 0x59 => 0x4ec0, 0x5a => 0x4f4f, 0x5b => 0x5145, 0x5c => 0x5341, 0x5d => 0x5f93, 0x5e => 0x620e, 0x5f => 0x67d4, 0x60 => 0x6c41, 0x61 => 0x6e0b, 0x62 => 0x7363, 0x63 => 0x7e26, 0x64 => 0x91cd, 0x65 => 0x9283, 0x66 => 0x53d4, 0x67 => 0x5919, 0x68 => 0x5bbf, 0x69 => 0x6dd1, 0x6a => 0x795d, 0x6b => 0x7e2e, 0x6c => 0x7c9b, 0x6d => 0x587e, 0x6e => 0x719f, 0x6f => 0x51fa, 0x70 => 0x8853, 0x71 => 0x8ff0, 0x72 => 0x4fca, 0x73 => 0x5cfb, 0x74 => 0x6625, 0x75 => 0x77ac, 0x76 => 0x7ae3, 0x77 => 0x821c, 0x78 => 0x99ff, 0x79 => 0x51c6, 0x7a => 0x5faa, 0x7b => 0x65ec, 0x7c => 0x696f, 0x7d => 0x6b89, 0x7e => 0x6df3, 0x80 => 0x6e96, 0x81 => 0x6f64, 0x82 => 0x76fe, 0x83 => 0x7d14, 0x84 => 0x5de1, 0x85 => 0x9075, 0x86 => 0x9187, 0x87 => 0x9806, 0x88 => 0x51e6, 0x89 => 0x521d, 0x8a => 0x6240, 0x8b => 0x6691, 0x8c => 0x66d9, 0x8d => 0x6e1a, 0x8e => 0x5eb6, 0x8f => 0x7dd2, 0x90 => 0x7f72, 0x91 => 0x66f8, 0x92 => 0x85af, 0x93 => 0x85f7, 0x94 => 0x8af8, 0x95 => 0x52a9, 0x96 => 0x53d9, 0x97 => 0x5973, 0x98 => 0x5e8f, 0x99 => 0x5f90, 0x9a => 0x6055, 0x9b => 0x92e4, 0x9c => 0x9664, 0x9d => 0x50b7, 0x9e => 0x511f, 0x9f => 0x52dd, 0xa0 => 0x5320, 0xa1 => 0x5347, 0xa2 => 0x53ec, 0xa3 => 0x54e8, 0xa4 => 0x5546, 0xa5 => 0x5531, 0xa6 => 0x5617, 0xa7 => 0x5968, 0xa8 => 0x59be, 0xa9 => 0x5a3c, 0xaa => 0x5bb5, 0xab => 0x5c06, 0xac => 0x5c0f, 0xad => 0x5c11, 0xae => 0x5c1a, 0xaf => 0x5e84, 0xb0 => 0x5e8a, 0xb1 => 0x5ee0, 0xb2 => 0x5f70, 0xb3 => 0x627f, 0xb4 => 0x6284, 0xb5 => 0x62db, 0xb6 => 0x638c, 0xb7 => 0x6377, 0xb8 => 0x6607, 0xb9 => 0x660c, 0xba => 0x662d, 0xbb => 0x6676, 0xbc => 0x677e, 0xbd => 0x68a2, 0xbe => 0x6a1f, 0xbf => 0x6a35, 0xc0 => 0x6cbc, 0xc1 => 0x6d88, 0xc2 => 0x6e09, 0xc3 => 0x6e58, 0xc4 => 0x713c, 0xc5 => 0x7126, 0xc6 => 0x7167, 0xc7 => 0x75c7, 0xc8 => 0x7701, 0xc9 => 0x785d, 0xca => 0x7901, 0xcb => 0x7965, 0xcc => 0x79f0, 0xcd => 0x7ae0, 0xce => 0x7b11, 0xcf => 0x7ca7, 0xd0 => 0x7d39, 0xd1 => 0x8096, 0xd2 => 0x83d6, 0xd3 => 0x848b, 0xd4 => 0x8549, 0xd5 => 0x885d, 0xd6 => 0x88f3, 0xd7 => 0x8a1f, 0xd8 => 0x8a3c, 0xd9 => 0x8a54, 0xda => 0x8a73, 0xdb => 0x8c61, 0xdc => 0x8cde, 0xdd => 0x91a4, 0xde => 0x9266, 0xdf => 0x937e, 0xe0 => 0x9418, 0xe1 => 0x969c, 0xe2 => 0x9798, 0xe3 => 0x4e0a, 0xe4 => 0x4e08, 0xe5 => 0x4e1e, 0xe6 => 0x4e57, 0xe7 => 0x5197, 0xe8 => 0x5270, 0xe9 => 0x57ce, 0xea => 0x5834, 0xeb => 0x58cc, 0xec => 0x5b22, 0xed => 0x5e38, 0xee => 0x60c5, 0xef => 0x64fe, 0xf0 => 0x6761, 0xf1 => 0x6756, 0xf2 => 0x6d44, 0xf3 => 0x72b6, 0xf4 => 0x7573, 0xf5 => 0x7a63, 0xf6 => 0x84b8, 0xf7 => 0x8b72, 0xf8 => 0x91b8, 0xf9 => 0x9320, 0xfa => 0x5631, 0xfb => 0x57f4, 0xfc => 0x98fe, }, 0x90 => { 0x40 => 0x62ed, 0x41 => 0x690d, 0x42 => 0x6b96, 0x43 => 0x71ed, 0x44 => 0x7e54, 0x45 => 0x8077, 0x46 => 0x8272, 0x47 => 0x89e6, 0x48 => 0x98df, 0x49 => 0x8755, 0x4a => 0x8fb1, 0x4b => 0x5c3b, 0x4c => 0x4f38, 0x4d => 0x4fe1, 0x4e => 0x4fb5, 0x4f => 0x5507, 0x50 => 0x5a20, 0x51 => 0x5bdd, 0x52 => 0x5be9, 0x53 => 0x5fc3, 0x54 => 0x614e, 0x55 => 0x632f, 0x56 => 0x65b0, 0x57 => 0x664b, 0x58 => 0x68ee, 0x59 => 0x699b, 0x5a => 0x6d78, 0x5b => 0x6df1, 0x5c => 0x7533, 0x5d => 0x75b9, 0x5e => 0x771f, 0x5f => 0x795e, 0x60 => 0x79e6, 0x61 => 0x7d33, 0x62 => 0x81e3, 0x63 => 0x82af, 0x64 => 0x85aa, 0x65 => 0x89aa, 0x66 => 0x8a3a, 0x67 => 0x8eab, 0x68 => 0x8f9b, 0x69 => 0x9032, 0x6a => 0x91dd, 0x6b => 0x9707, 0x6c => 0x4eba, 0x6d => 0x4ec1, 0x6e => 0x5203, 0x6f => 0x5875, 0x70 => 0x58ec, 0x71 => 0x5c0b, 0x72 => 0x751a, 0x73 => 0x5c3d, 0x74 => 0x814e, 0x75 => 0x8a0a, 0x76 => 0x8fc5, 0x77 => 0x9663, 0x78 => 0x976d, 0x79 => 0x7b25, 0x7a => 0x8acf, 0x7b => 0x9808, 0x7c => 0x9162, 0x7d => 0x56f3, 0x7e => 0x53a8, 0x80 => 0x9017, 0x81 => 0x5439, 0x82 => 0x5782, 0x83 => 0x5e25, 0x84 => 0x63a8, 0x85 => 0x6c34, 0x86 => 0x708a, 0x87 => 0x7761, 0x88 => 0x7c8b, 0x89 => 0x7fe0, 0x8a => 0x8870, 0x8b => 0x9042, 0x8c => 0x9154, 0x8d => 0x9310, 0x8e => 0x9318, 0x8f => 0x968f, 0x90 => 0x745e, 0x91 => 0x9ac4, 0x92 => 0x5d07, 0x93 => 0x5d69, 0x94 => 0x6570, 0x95 => 0x67a2, 0x96 => 0x8da8, 0x97 => 0x96db, 0x98 => 0x636e, 0x99 => 0x6749, 0x9a => 0x6919, 0x9b => 0x83c5, 0x9c => 0x9817, 0x9d => 0x96c0, 0x9e => 0x88fe, 0x9f => 0x6f84, 0xa0 => 0x647a, 0xa1 => 0x5bf8, 0xa2 => 0x4e16, 0xa3 => 0x702c, 0xa4 => 0x755d, 0xa5 => 0x662f, 0xa6 => 0x51c4, 0xa7 => 0x5236, 0xa8 => 0x52e2, 0xa9 => 0x59d3, 0xaa => 0x5f81, 0xab => 0x6027, 0xac => 0x6210, 0xad => 0x653f, 0xae => 0x6574, 0xaf => 0x661f, 0xb0 => 0x6674, 0xb1 => 0x68f2, 0xb2 => 0x6816, 0xb3 => 0x6b63, 0xb4 => 0x6e05, 0xb5 => 0x7272, 0xb6 => 0x751f, 0xb7 => 0x76db, 0xb8 => 0x7cbe, 0xb9 => 0x8056, 0xba => 0x58f0, 0xbb => 0x88fd, 0xbc => 0x897f, 0xbd => 0x8aa0, 0xbe => 0x8a93, 0xbf => 0x8acb, 0xc0 => 0x901d, 0xc1 => 0x9192, 0xc2 => 0x9752, 0xc3 => 0x9759, 0xc4 => 0x6589, 0xc5 => 0x7a0e, 0xc6 => 0x8106, 0xc7 => 0x96bb, 0xc8 => 0x5e2d, 0xc9 => 0x60dc, 0xca => 0x621a, 0xcb => 0x65a5, 0xcc => 0x6614, 0xcd => 0x6790, 0xce => 0x77f3, 0xcf => 0x7a4d, 0xd0 => 0x7c4d, 0xd1 => 0x7e3e, 0xd2 => 0x810a, 0xd3 => 0x8cac, 0xd4 => 0x8d64, 0xd5 => 0x8de1, 0xd6 => 0x8e5f, 0xd7 => 0x78a9, 0xd8 => 0x5207, 0xd9 => 0x62d9, 0xda => 0x63a5, 0xdb => 0x6442, 0xdc => 0x6298, 0xdd => 0x8a2d, 0xde => 0x7a83, 0xdf => 0x7bc0, 0xe0 => 0x8aac, 0xe1 => 0x96ea, 0xe2 => 0x7d76, 0xe3 => 0x820c, 0xe4 => 0x8749, 0xe5 => 0x4ed9, 0xe6 => 0x5148, 0xe7 => 0x5343, 0xe8 => 0x5360, 0xe9 => 0x5ba3, 0xea => 0x5c02, 0xeb => 0x5c16, 0xec => 0x5ddd, 0xed => 0x6226, 0xee => 0x6247, 0xef => 0x64b0, 0xf0 => 0x6813, 0xf1 => 0x6834, 0xf2 => 0x6cc9, 0xf3 => 0x6d45, 0xf4 => 0x6d17, 0xf5 => 0x67d3, 0xf6 => 0x6f5c, 0xf7 => 0x714e, 0xf8 => 0x717d, 0xf9 => 0x65cb, 0xfa => 0x7a7f, 0xfb => 0x7bad, 0xfc => 0x7dda, }, 0x91 => { 0x40 => 0x7e4a, 0x41 => 0x7fa8, 0x42 => 0x817a, 0x43 => 0x821b, 0x44 => 0x8239, 0x45 => 0x85a6, 0x46 => 0x8a6e, 0x47 => 0x8cce, 0x48 => 0x8df5, 0x49 => 0x9078, 0x4a => 0x9077, 0x4b => 0x92ad, 0x4c => 0x9291, 0x4d => 0x9583, 0x4e => 0x9bae, 0x4f => 0x524d, 0x50 => 0x5584, 0x51 => 0x6f38, 0x52 => 0x7136, 0x53 => 0x5168, 0x54 => 0x7985, 0x55 => 0x7e55, 0x56 => 0x81b3, 0x57 => 0x7cce, 0x58 => 0x564c, 0x59 => 0x5851, 0x5a => 0x5ca8, 0x5b => 0x63aa, 0x5c => 0x66fe, 0x5d => 0x66fd, 0x5e => 0x695a, 0x5f => 0x72d9, 0x60 => 0x758f, 0x61 => 0x758e, 0x62 => 0x790e, 0x63 => 0x7956, 0x64 => 0x79df, 0x65 => 0x7c97, 0x66 => 0x7d20, 0x67 => 0x7d44, 0x68 => 0x8607, 0x69 => 0x8a34, 0x6a => 0x963b, 0x6b => 0x9061, 0x6c => 0x9f20, 0x6d => 0x50e7, 0x6e => 0x5275, 0x6f => 0x53cc, 0x70 => 0x53e2, 0x71 => 0x5009, 0x72 => 0x55aa, 0x73 => 0x58ee, 0x74 => 0x594f, 0x75 => 0x723d, 0x76 => 0x5b8b, 0x77 => 0x5c64, 0x78 => 0x531d, 0x79 => 0x60e3, 0x7a => 0x60f3, 0x7b => 0x635c, 0x7c => 0x6383, 0x7d => 0x633f, 0x7e => 0x63bb, 0x80 => 0x64cd, 0x81 => 0x65e9, 0x82 => 0x66f9, 0x83 => 0x5de3, 0x84 => 0x69cd, 0x85 => 0x69fd, 0x86 => 0x6f15, 0x87 => 0x71e5, 0x88 => 0x4e89, 0x89 => 0x75e9, 0x8a => 0x76f8, 0x8b => 0x7a93, 0x8c => 0x7cdf, 0x8d => 0x7dcf, 0x8e => 0x7d9c, 0x8f => 0x8061, 0x90 => 0x8349, 0x91 => 0x8358, 0x92 => 0x846c, 0x93 => 0x84bc, 0x94 => 0x85fb, 0x95 => 0x88c5, 0x96 => 0x8d70, 0x97 => 0x9001, 0x98 => 0x906d, 0x99 => 0x9397, 0x9a => 0x971c, 0x9b => 0x9a12, 0x9c => 0x50cf, 0x9d => 0x5897, 0x9e => 0x618e, 0x9f => 0x81d3, 0xa0 => 0x8535, 0xa1 => 0x8d08, 0xa2 => 0x9020, 0xa3 => 0x4fc3, 0xa4 => 0x5074, 0xa5 => 0x5247, 0xa6 => 0x5373, 0xa7 => 0x606f, 0xa8 => 0x6349, 0xa9 => 0x675f, 0xaa => 0x6e2c, 0xab => 0x8db3, 0xac => 0x901f, 0xad => 0x4fd7, 0xae => 0x5c5e, 0xaf => 0x8cca, 0xb0 => 0x65cf, 0xb1 => 0x7d9a, 0xb2 => 0x5352, 0xb3 => 0x8896, 0xb4 => 0x5176, 0xb5 => 0x63c3, 0xb6 => 0x5b58, 0xb7 => 0x5b6b, 0xb8 => 0x5c0a, 0xb9 => 0x640d, 0xba => 0x6751, 0xbb => 0x905c, 0xbc => 0x4ed6, 0xbd => 0x591a, 0xbe => 0x592a, 0xbf => 0x6c70, 0xc0 => 0x8a51, 0xc1 => 0x553e, 0xc2 => 0x5815, 0xc3 => 0x59a5, 0xc4 => 0x60f0, 0xc5 => 0x6253, 0xc6 => 0x67c1, 0xc7 => 0x8235, 0xc8 => 0x6955, 0xc9 => 0x9640, 0xca => 0x99c4, 0xcb => 0x9a28, 0xcc => 0x4f53, 0xcd => 0x5806, 0xce => 0x5bfe, 0xcf => 0x8010, 0xd0 => 0x5cb1, 0xd1 => 0x5e2f, 0xd2 => 0x5f85, 0xd3 => 0x6020, 0xd4 => 0x614b, 0xd5 => 0x6234, 0xd6 => 0x66ff, 0xd7 => 0x6cf0, 0xd8 => 0x6ede, 0xd9 => 0x80ce, 0xda => 0x817f, 0xdb => 0x82d4, 0xdc => 0x888b, 0xdd => 0x8cb8, 0xde => 0x9000, 0xdf => 0x902e, 0xe0 => 0x968a, 0xe1 => 0x9edb, 0xe2 => 0x9bdb, 0xe3 => 0x4ee3, 0xe4 => 0x53f0, 0xe5 => 0x5927, 0xe6 => 0x7b2c, 0xe7 => 0x918d, 0xe8 => 0x984c, 0xe9 => 0x9df9, 0xea => 0x6edd, 0xeb => 0x7027, 0xec => 0x5353, 0xed => 0x5544, 0xee => 0x5b85, 0xef => 0x6258, 0xf0 => 0x629e, 0xf1 => 0x62d3, 0xf2 => 0x6ca2, 0xf3 => 0x6fef, 0xf4 => 0x7422, 0xf5 => 0x8a17, 0xf6 => 0x9438, 0xf7 => 0x6fc1, 0xf8 => 0x8afe, 0xf9 => 0x8338, 0xfa => 0x51e7, 0xfb => 0x86f8, 0xfc => 0x53ea, }, 0x92 => { 0x40 => 0x53e9, 0x41 => 0x4f46, 0x42 => 0x9054, 0x43 => 0x8fb0, 0x44 => 0x596a, 0x45 => 0x8131, 0x46 => 0x5dfd, 0x47 => 0x7aea, 0x48 => 0x8fbf, 0x49 => 0x68da, 0x4a => 0x8c37, 0x4b => 0x72f8, 0x4c => 0x9c48, 0x4d => 0x6a3d, 0x4e => 0x8ab0, 0x4f => 0x4e39, 0x50 => 0x5358, 0x51 => 0x5606, 0x52 => 0x5766, 0x53 => 0x62c5, 0x54 => 0x63a2, 0x55 => 0x65e6, 0x56 => 0x6b4e, 0x57 => 0x6de1, 0x58 => 0x6e5b, 0x59 => 0x70ad, 0x5a => 0x77ed, 0x5b => 0x7aef, 0x5c => 0x7baa, 0x5d => 0x7dbb, 0x5e => 0x803d, 0x5f => 0x80c6, 0x60 => 0x86cb, 0x61 => 0x8a95, 0x62 => 0x935b, 0x63 => 0x56e3, 0x64 => 0x58c7, 0x65 => 0x5f3e, 0x66 => 0x65ad, 0x67 => 0x6696, 0x68 => 0x6a80, 0x69 => 0x6bb5, 0x6a => 0x7537, 0x6b => 0x8ac7, 0x6c => 0x5024, 0x6d => 0x77e5, 0x6e => 0x5730, 0x6f => 0x5f1b, 0x70 => 0x6065, 0x71 => 0x667a, 0x72 => 0x6c60, 0x73 => 0x75f4, 0x74 => 0x7a1a, 0x75 => 0x7f6e, 0x76 => 0x81f4, 0x77 => 0x8718, 0x78 => 0x9045, 0x79 => 0x99b3, 0x7a => 0x7bc9, 0x7b => 0x755c, 0x7c => 0x7af9, 0x7d => 0x7b51, 0x7e => 0x84c4, 0x80 => 0x9010, 0x81 => 0x79e9, 0x82 => 0x7a92, 0x83 => 0x8336, 0x84 => 0x5ae1, 0x85 => 0x7740, 0x86 => 0x4e2d, 0x87 => 0x4ef2, 0x88 => 0x5b99, 0x89 => 0x5fe0, 0x8a => 0x62bd, 0x8b => 0x663c, 0x8c => 0x67f1, 0x8d => 0x6ce8, 0x8e => 0x866b, 0x8f => 0x8877, 0x90 => 0x8a3b, 0x91 => 0x914e, 0x92 => 0x92f3, 0x93 => 0x99d0, 0x94 => 0x6a17, 0x95 => 0x7026, 0x96 => 0x732a, 0x97 => 0x82e7, 0x98 => 0x8457, 0x99 => 0x8caf, 0x9a => 0x4e01, 0x9b => 0x5146, 0x9c => 0x51cb, 0x9d => 0x558b, 0x9e => 0x5bf5, 0x9f => 0x5e16, 0xa0 => 0x5e33, 0xa1 => 0x5e81, 0xa2 => 0x5f14, 0xa3 => 0x5f35, 0xa4 => 0x5f6b, 0xa5 => 0x5fb4, 0xa6 => 0x61f2, 0xa7 => 0x6311, 0xa8 => 0x66a2, 0xa9 => 0x671d, 0xaa => 0x6f6e, 0xab => 0x7252, 0xac => 0x753a, 0xad => 0x773a, 0xae => 0x8074, 0xaf => 0x8139, 0xb0 => 0x8178, 0xb1 => 0x8776, 0xb2 => 0x8abf, 0xb3 => 0x8adc, 0xb4 => 0x8d85, 0xb5 => 0x8df3, 0xb6 => 0x929a, 0xb7 => 0x9577, 0xb8 => 0x9802, 0xb9 => 0x9ce5, 0xba => 0x52c5, 0xbb => 0x6357, 0xbc => 0x76f4, 0xbd => 0x6715, 0xbe => 0x6c88, 0xbf => 0x73cd, 0xc0 => 0x8cc3, 0xc1 => 0x93ae, 0xc2 => 0x9673, 0xc3 => 0x6d25, 0xc4 => 0x589c, 0xc5 => 0x690e, 0xc6 => 0x69cc, 0xc7 => 0x8ffd, 0xc8 => 0x939a, 0xc9 => 0x75db, 0xca => 0x901a, 0xcb => 0x585a, 0xcc => 0x6802, 0xcd => 0x63b4, 0xce => 0x69fb, 0xcf => 0x4f43, 0xd0 => 0x6f2c, 0xd1 => 0x67d8, 0xd2 => 0x8fbb, 0xd3 => 0x8526, 0xd4 => 0x7db4, 0xd5 => 0x9354, 0xd6 => 0x693f, 0xd7 => 0x6f70, 0xd8 => 0x576a, 0xd9 => 0x58f7, 0xda => 0x5b2c, 0xdb => 0x7d2c, 0xdc => 0x722a, 0xdd => 0x540a, 0xde => 0x91e3, 0xdf => 0x9db4, 0xe0 => 0x4ead, 0xe1 => 0x4f4e, 0xe2 => 0x505c, 0xe3 => 0x5075, 0xe4 => 0x5243, 0xe5 => 0x8c9e, 0xe6 => 0x5448, 0xe7 => 0x5824, 0xe8 => 0x5b9a, 0xe9 => 0x5e1d, 0xea => 0x5e95, 0xeb => 0x5ead, 0xec => 0x5ef7, 0xed => 0x5f1f, 0xee => 0x608c, 0xef => 0x62b5, 0xf0 => 0x633a, 0xf1 => 0x63d0, 0xf2 => 0x68af, 0xf3 => 0x6c40, 0xf4 => 0x7887, 0xf5 => 0x798e, 0xf6 => 0x7a0b, 0xf7 => 0x7de0, 0xf8 => 0x8247, 0xf9 => 0x8a02, 0xfa => 0x8ae6, 0xfb => 0x8e44, 0xfc => 0x9013, }, 0x93 => { 0x40 => 0x90b8, 0x41 => 0x912d, 0x42 => 0x91d8, 0x43 => 0x9f0e, 0x44 => 0x6ce5, 0x45 => 0x6458, 0x46 => 0x64e2, 0x47 => 0x6575, 0x48 => 0x6ef4, 0x49 => 0x7684, 0x4a => 0x7b1b, 0x4b => 0x9069, 0x4c => 0x93d1, 0x4d => 0x6eba, 0x4e => 0x54f2, 0x4f => 0x5fb9, 0x50 => 0x64a4, 0x51 => 0x8f4d, 0x52 => 0x8fed, 0x53 => 0x9244, 0x54 => 0x5178, 0x55 => 0x586b, 0x56 => 0x5929, 0x57 => 0x5c55, 0x58 => 0x5e97, 0x59 => 0x6dfb, 0x5a => 0x7e8f, 0x5b => 0x751c, 0x5c => 0x8cbc, 0x5d => 0x8ee2, 0x5e => 0x985b, 0x5f => 0x70b9, 0x60 => 0x4f1d, 0x61 => 0x6bbf, 0x62 => 0x6fb1, 0x63 => 0x7530, 0x64 => 0x96fb, 0x65 => 0x514e, 0x66 => 0x5410, 0x67 => 0x5835, 0x68 => 0x5857, 0x69 => 0x59ac, 0x6a => 0x5c60, 0x6b => 0x5f92, 0x6c => 0x6597, 0x6d => 0x675c, 0x6e => 0x6e21, 0x6f => 0x767b, 0x70 => 0x83df, 0x71 => 0x8ced, 0x72 => 0x9014, 0x73 => 0x90fd, 0x74 => 0x934d, 0x75 => 0x7825, 0x76 => 0x783a, 0x77 => 0x52aa, 0x78 => 0x5ea6, 0x79 => 0x571f, 0x7a => 0x5974, 0x7b => 0x6012, 0x7c => 0x5012, 0x7d => 0x515a, 0x7e => 0x51ac, 0x80 => 0x51cd, 0x81 => 0x5200, 0x82 => 0x5510, 0x83 => 0x5854, 0x84 => 0x5858, 0x85 => 0x5957, 0x86 => 0x5b95, 0x87 => 0x5cf6, 0x88 => 0x5d8b, 0x89 => 0x60bc, 0x8a => 0x6295, 0x8b => 0x642d, 0x8c => 0x6771, 0x8d => 0x6843, 0x8e => 0x68bc, 0x8f => 0x68df, 0x90 => 0x76d7, 0x91 => 0x6dd8, 0x92 => 0x6e6f, 0x93 => 0x6d9b, 0x94 => 0x706f, 0x95 => 0x71c8, 0x96 => 0x5f53, 0x97 => 0x75d8, 0x98 => 0x7977, 0x99 => 0x7b49, 0x9a => 0x7b54, 0x9b => 0x7b52, 0x9c => 0x7cd6, 0x9d => 0x7d71, 0x9e => 0x5230, 0x9f => 0x8463, 0xa0 => 0x8569, 0xa1 => 0x85e4, 0xa2 => 0x8a0e, 0xa3 => 0x8b04, 0xa4 => 0x8c46, 0xa5 => 0x8e0f, 0xa6 => 0x9003, 0xa7 => 0x900f, 0xa8 => 0x9419, 0xa9 => 0x9676, 0xaa => 0x982d, 0xab => 0x9a30, 0xac => 0x95d8, 0xad => 0x50cd, 0xae => 0x52d5, 0xaf => 0x540c, 0xb0 => 0x5802, 0xb1 => 0x5c0e, 0xb2 => 0x61a7, 0xb3 => 0x649e, 0xb4 => 0x6d1e, 0xb5 => 0x77b3, 0xb6 => 0x7ae5, 0xb7 => 0x80f4, 0xb8 => 0x8404, 0xb9 => 0x9053, 0xba => 0x9285, 0xbb => 0x5ce0, 0xbc => 0x9d07, 0xbd => 0x533f, 0xbe => 0x5f97, 0xbf => 0x5fb3, 0xc0 => 0x6d9c, 0xc1 => 0x7279, 0xc2 => 0x7763, 0xc3 => 0x79bf, 0xc4 => 0x7be4, 0xc5 => 0x6bd2, 0xc6 => 0x72ec, 0xc7 => 0x8aad, 0xc8 => 0x6803, 0xc9 => 0x6a61, 0xca => 0x51f8, 0xcb => 0x7a81, 0xcc => 0x6934, 0xcd => 0x5c4a, 0xce => 0x9cf6, 0xcf => 0x82eb, 0xd0 => 0x5bc5, 0xd1 => 0x9149, 0xd2 => 0x701e, 0xd3 => 0x5678, 0xd4 => 0x5c6f, 0xd5 => 0x60c7, 0xd6 => 0x6566, 0xd7 => 0x6c8c, 0xd8 => 0x8c5a, 0xd9 => 0x9041, 0xda => 0x9813, 0xdb => 0x5451, 0xdc => 0x66c7, 0xdd => 0x920d, 0xde => 0x5948, 0xdf => 0x90a3, 0xe0 => 0x5185, 0xe1 => 0x4e4d, 0xe2 => 0x51ea, 0xe3 => 0x8599, 0xe4 => 0x8b0e, 0xe5 => 0x7058, 0xe6 => 0x637a, 0xe7 => 0x934b, 0xe8 => 0x6962, 0xe9 => 0x99b4, 0xea => 0x7e04, 0xeb => 0x7577, 0xec => 0x5357, 0xed => 0x6960, 0xee => 0x8edf, 0xef => 0x96e3, 0xf0 => 0x6c5d, 0xf1 => 0x4e8c, 0xf2 => 0x5c3c, 0xf3 => 0x5f10, 0xf4 => 0x8fe9, 0xf5 => 0x5302, 0xf6 => 0x8cd1, 0xf7 => 0x8089, 0xf8 => 0x8679, 0xf9 => 0x5eff, 0xfa => 0x65e5, 0xfb => 0x4e73, 0xfc => 0x5165, }, 0x94 => { 0x40 => 0x5982, 0x41 => 0x5c3f, 0x42 => 0x97ee, 0x43 => 0x4efb, 0x44 => 0x598a, 0x45 => 0x5fcd, 0x46 => 0x8a8d, 0x47 => 0x6fe1, 0x48 => 0x79b0, 0x49 => 0x7962, 0x4a => 0x5be7, 0x4b => 0x8471, 0x4c => 0x732b, 0x4d => 0x71b1, 0x4e => 0x5e74, 0x4f => 0x5ff5, 0x50 => 0x637b, 0x51 => 0x649a, 0x52 => 0x71c3, 0x53 => 0x7c98, 0x54 => 0x4e43, 0x55 => 0x5efc, 0x56 => 0x4e4b, 0x57 => 0x57dc, 0x58 => 0x56a2, 0x59 => 0x60a9, 0x5a => 0x6fc3, 0x5b => 0x7d0d, 0x5c => 0x80fd, 0x5d => 0x8133, 0x5e => 0x81bf, 0x5f => 0x8fb2, 0x60 => 0x8997, 0x61 => 0x86a4, 0x62 => 0x5df4, 0x63 => 0x628a, 0x64 => 0x64ad, 0x65 => 0x8987, 0x66 => 0x6777, 0x67 => 0x6ce2, 0x68 => 0x6d3e, 0x69 => 0x7436, 0x6a => 0x7834, 0x6b => 0x5a46, 0x6c => 0x7f75, 0x6d => 0x82ad, 0x6e => 0x99ac, 0x6f => 0x4ff3, 0x70 => 0x5ec3, 0x71 => 0x62dd, 0x72 => 0x6392, 0x73 => 0x6557, 0x74 => 0x676f, 0x75 => 0x76c3, 0x76 => 0x724c, 0x77 => 0x80cc, 0x78 => 0x80ba, 0x79 => 0x8f29, 0x7a => 0x914d, 0x7b => 0x500d, 0x7c => 0x57f9, 0x7d => 0x5a92, 0x7e => 0x6885, 0x80 => 0x6973, 0x81 => 0x7164, 0x82 => 0x72fd, 0x83 => 0x8cb7, 0x84 => 0x58f2, 0x85 => 0x8ce0, 0x86 => 0x966a, 0x87 => 0x9019, 0x88 => 0x877f, 0x89 => 0x79e4, 0x8a => 0x77e7, 0x8b => 0x8429, 0x8c => 0x4f2f, 0x8d => 0x5265, 0x8e => 0x535a, 0x8f => 0x62cd, 0x90 => 0x67cf, 0x91 => 0x6cca, 0x92 => 0x767d, 0x93 => 0x7b94, 0x94 => 0x7c95, 0x95 => 0x8236, 0x96 => 0x8584, 0x97 => 0x8feb, 0x98 => 0x66dd, 0x99 => 0x6f20, 0x9a => 0x7206, 0x9b => 0x7e1b, 0x9c => 0x83ab, 0x9d => 0x99c1, 0x9e => 0x9ea6, 0x9f => 0x51fd, 0xa0 => 0x7bb1, 0xa1 => 0x7872, 0xa2 => 0x7bb8, 0xa3 => 0x8087, 0xa4 => 0x7b48, 0xa5 => 0x6ae8, 0xa6 => 0x5e61, 0xa7 => 0x808c, 0xa8 => 0x7551, 0xa9 => 0x7560, 0xaa => 0x516b, 0xab => 0x9262, 0xac => 0x6e8c, 0xad => 0x767a, 0xae => 0x9197, 0xaf => 0x9aea, 0xb0 => 0x4f10, 0xb1 => 0x7f70, 0xb2 => 0x629c, 0xb3 => 0x7b4f, 0xb4 => 0x95a5, 0xb5 => 0x9ce9, 0xb6 => 0x567a, 0xb7 => 0x5859, 0xb8 => 0x86e4, 0xb9 => 0x96bc, 0xba => 0x4f34, 0xbb => 0x5224, 0xbc => 0x534a, 0xbd => 0x53cd, 0xbe => 0x53db, 0xbf => 0x5e06, 0xc0 => 0x642c, 0xc1 => 0x6591, 0xc2 => 0x677f, 0xc3 => 0x6c3e, 0xc4 => 0x6c4e, 0xc5 => 0x7248, 0xc6 => 0x72af, 0xc7 => 0x73ed, 0xc8 => 0x7554, 0xc9 => 0x7e41, 0xca => 0x822c, 0xcb => 0x85e9, 0xcc => 0x8ca9, 0xcd => 0x7bc4, 0xce => 0x91c6, 0xcf => 0x7169, 0xd0 => 0x9812, 0xd1 => 0x98ef, 0xd2 => 0x633d, 0xd3 => 0x6669, 0xd4 => 0x756a, 0xd5 => 0x76e4, 0xd6 => 0x78d0, 0xd7 => 0x8543, 0xd8 => 0x86ee, 0xd9 => 0x532a, 0xda => 0x5351, 0xdb => 0x5426, 0xdc => 0x5983, 0xdd => 0x5e87, 0xde => 0x5f7c, 0xdf => 0x60b2, 0xe0 => 0x6249, 0xe1 => 0x6279, 0xe2 => 0x62ab, 0xe3 => 0x6590, 0xe4 => 0x6bd4, 0xe5 => 0x6ccc, 0xe6 => 0x75b2, 0xe7 => 0x76ae, 0xe8 => 0x7891, 0xe9 => 0x79d8, 0xea => 0x7dcb, 0xeb => 0x7f77, 0xec => 0x80a5, 0xed => 0x88ab, 0xee => 0x8ab9, 0xef => 0x8cbb, 0xf0 => 0x907f, 0xf1 => 0x975e, 0xf2 => 0x98db, 0xf3 => 0x6a0b, 0xf4 => 0x7c38, 0xf5 => 0x5099, 0xf6 => 0x5c3e, 0xf7 => 0x5fae, 0xf8 => 0x6787, 0xf9 => 0x6bd8, 0xfa => 0x7435, 0xfb => 0x7709, 0xfc => 0x7f8e, }, 0x95 => { 0x40 => 0x9f3b, 0x41 => 0x67ca, 0x42 => 0x7a17, 0x43 => 0x5339, 0x44 => 0x758b, 0x45 => 0x9aed, 0x46 => 0x5f66, 0x47 => 0x819d, 0x48 => 0x83f1, 0x49 => 0x8098, 0x4a => 0x5f3c, 0x4b => 0x5fc5, 0x4c => 0x7562, 0x4d => 0x7b46, 0x4e => 0x903c, 0x4f => 0x6867, 0x50 => 0x59eb, 0x51 => 0x5a9b, 0x52 => 0x7d10, 0x53 => 0x767e, 0x54 => 0x8b2c, 0x55 => 0x4ff5, 0x56 => 0x5f6a, 0x57 => 0x6a19, 0x58 => 0x6c37, 0x59 => 0x6f02, 0x5a => 0x74e2, 0x5b => 0x7968, 0x5c => 0x8868, 0x5d => 0x8a55, 0x5e => 0x8c79, 0x5f => 0x5edf, 0x60 => 0x63cf, 0x61 => 0x75c5, 0x62 => 0x79d2, 0x63 => 0x82d7, 0x64 => 0x9328, 0x65 => 0x92f2, 0x66 => 0x849c, 0x67 => 0x86ed, 0x68 => 0x9c2d, 0x69 => 0x54c1, 0x6a => 0x5f6c, 0x6b => 0x658c, 0x6c => 0x6d5c, 0x6d => 0x7015, 0x6e => 0x8ca7, 0x6f => 0x8cd3, 0x70 => 0x983b, 0x71 => 0x654f, 0x72 => 0x74f6, 0x73 => 0x4e0d, 0x74 => 0x4ed8, 0x75 => 0x57e0, 0x76 => 0x592b, 0x77 => 0x5a66, 0x78 => 0x5bcc, 0x79 => 0x51a8, 0x7a => 0x5e03, 0x7b => 0x5e9c, 0x7c => 0x6016, 0x7d => 0x6276, 0x7e => 0x6577, 0x80 => 0x65a7, 0x81 => 0x666e, 0x82 => 0x6d6e, 0x83 => 0x7236, 0x84 => 0x7b26, 0x85 => 0x8150, 0x86 => 0x819a, 0x87 => 0x8299, 0x88 => 0x8b5c, 0x89 => 0x8ca0, 0x8a => 0x8ce6, 0x8b => 0x8d74, 0x8c => 0x961c, 0x8d => 0x9644, 0x8e => 0x4fae, 0x8f => 0x64ab, 0x90 => 0x6b66, 0x91 => 0x821e, 0x92 => 0x8461, 0x93 => 0x856a, 0x94 => 0x90e8, 0x95 => 0x5c01, 0x96 => 0x6953, 0x97 => 0x98a8, 0x98 => 0x847a, 0x99 => 0x8557, 0x9a => 0x4f0f, 0x9b => 0x526f, 0x9c => 0x5fa9, 0x9d => 0x5e45, 0x9e => 0x670d, 0x9f => 0x798f, 0xa0 => 0x8179, 0xa1 => 0x8907, 0xa2 => 0x8986, 0xa3 => 0x6df5, 0xa4 => 0x5f17, 0xa5 => 0x6255, 0xa6 => 0x6cb8, 0xa7 => 0x4ecf, 0xa8 => 0x7269, 0xa9 => 0x9b92, 0xaa => 0x5206, 0xab => 0x543b, 0xac => 0x5674, 0xad => 0x58b3, 0xae => 0x61a4, 0xaf => 0x626e, 0xb0 => 0x711a, 0xb1 => 0x596e, 0xb2 => 0x7c89, 0xb3 => 0x7cde, 0xb4 => 0x7d1b, 0xb5 => 0x96f0, 0xb6 => 0x6587, 0xb7 => 0x805e, 0xb8 => 0x4e19, 0xb9 => 0x4f75, 0xba => 0x5175, 0xbb => 0x5840, 0xbc => 0x5e63, 0xbd => 0x5e73, 0xbe => 0x5f0a, 0xbf => 0x67c4, 0xc0 => 0x4e26, 0xc1 => 0x853d, 0xc2 => 0x9589, 0xc3 => 0x965b, 0xc4 => 0x7c73, 0xc5 => 0x9801, 0xc6 => 0x50fb, 0xc7 => 0x58c1, 0xc8 => 0x7656, 0xc9 => 0x78a7, 0xca => 0x5225, 0xcb => 0x77a5, 0xcc => 0x8511, 0xcd => 0x7b86, 0xce => 0x504f, 0xcf => 0x5909, 0xd0 => 0x7247, 0xd1 => 0x7bc7, 0xd2 => 0x7de8, 0xd3 => 0x8fba, 0xd4 => 0x8fd4, 0xd5 => 0x904d, 0xd6 => 0x4fbf, 0xd7 => 0x52c9, 0xd8 => 0x5a29, 0xd9 => 0x5f01, 0xda => 0x97ad, 0xdb => 0x4fdd, 0xdc => 0x8217, 0xdd => 0x92ea, 0xde => 0x5703, 0xdf => 0x6355, 0xe0 => 0x6b69, 0xe1 => 0x752b, 0xe2 => 0x88dc, 0xe3 => 0x8f14, 0xe4 => 0x7a42, 0xe5 => 0x52df, 0xe6 => 0x5893, 0xe7 => 0x6155, 0xe8 => 0x620a, 0xe9 => 0x66ae, 0xea => 0x6bcd, 0xeb => 0x7c3f, 0xec => 0x83e9, 0xed => 0x5023, 0xee => 0x4ff8, 0xef => 0x5305, 0xf0 => 0x5446, 0xf1 => 0x5831, 0xf2 => 0x5949, 0xf3 => 0x5b9d, 0xf4 => 0x5cf0, 0xf5 => 0x5cef, 0xf6 => 0x5d29, 0xf7 => 0x5e96, 0xf8 => 0x62b1, 0xf9 => 0x6367, 0xfa => 0x653e, 0xfb => 0x65b9, 0xfc => 0x670b, }, 0x96 => { 0x40 => 0x6cd5, 0x41 => 0x6ce1, 0x42 => 0x70f9, 0x43 => 0x7832, 0x44 => 0x7e2b, 0x45 => 0x80de, 0x46 => 0x82b3, 0x47 => 0x840c, 0x48 => 0x84ec, 0x49 => 0x8702, 0x4a => 0x8912, 0x4b => 0x8a2a, 0x4c => 0x8c4a, 0x4d => 0x90a6, 0x4e => 0x92d2, 0x4f => 0x98fd, 0x50 => 0x9cf3, 0x51 => 0x9d6c, 0x52 => 0x4e4f, 0x53 => 0x4ea1, 0x54 => 0x508d, 0x55 => 0x5256, 0x56 => 0x574a, 0x57 => 0x59a8, 0x58 => 0x5e3d, 0x59 => 0x5fd8, 0x5a => 0x5fd9, 0x5b => 0x623f, 0x5c => 0x66b4, 0x5d => 0x671b, 0x5e => 0x67d0, 0x5f => 0x68d2, 0x60 => 0x5192, 0x61 => 0x7d21, 0x62 => 0x80aa, 0x63 => 0x81a8, 0x64 => 0x8b00, 0x65 => 0x8c8c, 0x66 => 0x8cbf, 0x67 => 0x927e, 0x68 => 0x9632, 0x69 => 0x5420, 0x6a => 0x982c, 0x6b => 0x5317, 0x6c => 0x50d5, 0x6d => 0x535c, 0x6e => 0x58a8, 0x6f => 0x64b2, 0x70 => 0x6734, 0x71 => 0x7267, 0x72 => 0x7766, 0x73 => 0x7a46, 0x74 => 0x91e6, 0x75 => 0x52c3, 0x76 => 0x6ca1, 0x77 => 0x6b86, 0x78 => 0x5800, 0x79 => 0x5e4c, 0x7a => 0x5954, 0x7b => 0x672c, 0x7c => 0x7ffb, 0x7d => 0x51e1, 0x7e => 0x76c6, 0x80 => 0x6469, 0x81 => 0x78e8, 0x82 => 0x9b54, 0x83 => 0x9ebb, 0x84 => 0x57cb, 0x85 => 0x59b9, 0x86 => 0x6627, 0x87 => 0x679a, 0x88 => 0x6bce, 0x89 => 0x54e9, 0x8a => 0x69d9, 0x8b => 0x5e55, 0x8c => 0x819c, 0x8d => 0x6795, 0x8e => 0x9baa, 0x8f => 0x67fe, 0x90 => 0x9c52, 0x91 => 0x685d, 0x92 => 0x4ea6, 0x93 => 0x4fe3, 0x94 => 0x53c8, 0x95 => 0x62b9, 0x96 => 0x672b, 0x97 => 0x6cab, 0x98 => 0x8fc4, 0x99 => 0x4fad, 0x9a => 0x7e6d, 0x9b => 0x9ebf, 0x9c => 0x4e07, 0x9d => 0x6162, 0x9e => 0x6e80, 0x9f => 0x6f2b, 0xa0 => 0x8513, 0xa1 => 0x5473, 0xa2 => 0x672a, 0xa3 => 0x9b45, 0xa4 => 0x5df3, 0xa5 => 0x7b95, 0xa6 => 0x5cac, 0xa7 => 0x5bc6, 0xa8 => 0x871c, 0xa9 => 0x6e4a, 0xaa => 0x84d1, 0xab => 0x7a14, 0xac => 0x8108, 0xad => 0x5999, 0xae => 0x7c8d, 0xaf => 0x6c11, 0xb0 => 0x7720, 0xb1 => 0x52d9, 0xb2 => 0x5922, 0xb3 => 0x7121, 0xb4 => 0x725f, 0xb5 => 0x77db, 0xb6 => 0x9727, 0xb7 => 0x9d61, 0xb8 => 0x690b, 0xb9 => 0x5a7f, 0xba => 0x5a18, 0xbb => 0x51a5, 0xbc => 0x540d, 0xbd => 0x547d, 0xbe => 0x660e, 0xbf => 0x76df, 0xc0 => 0x8ff7, 0xc1 => 0x9298, 0xc2 => 0x9cf4, 0xc3 => 0x59ea, 0xc4 => 0x725d, 0xc5 => 0x6ec5, 0xc6 => 0x514d, 0xc7 => 0x68c9, 0xc8 => 0x7dbf, 0xc9 => 0x7dec, 0xca => 0x9762, 0xcb => 0x9eba, 0xcc => 0x6478, 0xcd => 0x6a21, 0xce => 0x8302, 0xcf => 0x5984, 0xd0 => 0x5b5f, 0xd1 => 0x6bdb, 0xd2 => 0x731b, 0xd3 => 0x76f2, 0xd4 => 0x7db2, 0xd5 => 0x8017, 0xd6 => 0x8499, 0xd7 => 0x5132, 0xd8 => 0x6728, 0xd9 => 0x9ed9, 0xda => 0x76ee, 0xdb => 0x6762, 0xdc => 0x52ff, 0xdd => 0x9905, 0xde => 0x5c24, 0xdf => 0x623b, 0xe0 => 0x7c7e, 0xe1 => 0x8cb0, 0xe2 => 0x554f, 0xe3 => 0x60b6, 0xe4 => 0x7d0b, 0xe5 => 0x9580, 0xe6 => 0x5301, 0xe7 => 0x4e5f, 0xe8 => 0x51b6, 0xe9 => 0x591c, 0xea => 0x723a, 0xeb => 0x8036, 0xec => 0x91ce, 0xed => 0x5f25, 0xee => 0x77e2, 0xef => 0x5384, 0xf0 => 0x5f79, 0xf1 => 0x7d04, 0xf2 => 0x85ac, 0xf3 => 0x8a33, 0xf4 => 0x8e8d, 0xf5 => 0x9756, 0xf6 => 0x67f3, 0xf7 => 0x85ae, 0xf8 => 0x9453, 0xf9 => 0x6109, 0xfa => 0x6108, 0xfb => 0x6cb9, 0xfc => 0x7652, }, 0x97 => { 0x40 => 0x8aed, 0x41 => 0x8f38, 0x42 => 0x552f, 0x43 => 0x4f51, 0x44 => 0x512a, 0x45 => 0x52c7, 0x46 => 0x53cb, 0x47 => 0x5ba5, 0x48 => 0x5e7d, 0x49 => 0x60a0, 0x4a => 0x6182, 0x4b => 0x63d6, 0x4c => 0x6709, 0x4d => 0x67da, 0x4e => 0x6e67, 0x4f => 0x6d8c, 0x50 => 0x7336, 0x51 => 0x7337, 0x52 => 0x7531, 0x53 => 0x7950, 0x54 => 0x88d5, 0x55 => 0x8a98, 0x56 => 0x904a, 0x57 => 0x9091, 0x58 => 0x90f5, 0x59 => 0x96c4, 0x5a => 0x878d, 0x5b => 0x5915, 0x5c => 0x4e88, 0x5d => 0x4f59, 0x5e => 0x4e0e, 0x5f => 0x8a89, 0x60 => 0x8f3f, 0x61 => 0x9810, 0x62 => 0x50ad, 0x63 => 0x5e7c, 0x64 => 0x5996, 0x65 => 0x5bb9, 0x66 => 0x5eb8, 0x67 => 0x63da, 0x68 => 0x63fa, 0x69 => 0x64c1, 0x6a => 0x66dc, 0x6b => 0x694a, 0x6c => 0x69d8, 0x6d => 0x6d0b, 0x6e => 0x6eb6, 0x6f => 0x7194, 0x70 => 0x7528, 0x71 => 0x7aaf, 0x72 => 0x7f8a, 0x73 => 0x8000, 0x74 => 0x8449, 0x75 => 0x84c9, 0x76 => 0x8981, 0x77 => 0x8b21, 0x78 => 0x8e0a, 0x79 => 0x9065, 0x7a => 0x967d, 0x7b => 0x990a, 0x7c => 0x617e, 0x7d => 0x6291, 0x7e => 0x6b32, 0x80 => 0x6c83, 0x81 => 0x6d74, 0x82 => 0x7fcc, 0x83 => 0x7ffc, 0x84 => 0x6dc0, 0x85 => 0x7f85, 0x86 => 0x87ba, 0x87 => 0x88f8, 0x88 => 0x6765, 0x89 => 0x83b1, 0x8a => 0x983c, 0x8b => 0x96f7, 0x8c => 0x6d1b, 0x8d => 0x7d61, 0x8e => 0x843d, 0x8f => 0x916a, 0x90 => 0x4e71, 0x91 => 0x5375, 0x92 => 0x5d50, 0x93 => 0x6b04, 0x94 => 0x6feb, 0x95 => 0x85cd, 0x96 => 0x862d, 0x97 => 0x89a7, 0x98 => 0x5229, 0x99 => 0x540f, 0x9a => 0x5c65, 0x9b => 0x674e, 0x9c => 0x68a8, 0x9d => 0x7406, 0x9e => 0x7483, 0x9f => 0x75e2, 0xa0 => 0x88cf, 0xa1 => 0x88e1, 0xa2 => 0x91cc, 0xa3 => 0x96e2, 0xa4 => 0x9678, 0xa5 => 0x5f8b, 0xa6 => 0x7387, 0xa7 => 0x7acb, 0xa8 => 0x844e, 0xa9 => 0x63a0, 0xaa => 0x7565, 0xab => 0x5289, 0xac => 0x6d41, 0xad => 0x6e9c, 0xae => 0x7409, 0xaf => 0x7559, 0xb0 => 0x786b, 0xb1 => 0x7c92, 0xb2 => 0x9686, 0xb3 => 0x7adc, 0xb4 => 0x9f8d, 0xb5 => 0x4fb6, 0xb6 => 0x616e, 0xb7 => 0x65c5, 0xb8 => 0x865c, 0xb9 => 0x4e86, 0xba => 0x4eae, 0xbb => 0x50da, 0xbc => 0x4e21, 0xbd => 0x51cc, 0xbe => 0x5bee, 0xbf => 0x6599, 0xc0 => 0x6881, 0xc1 => 0x6dbc, 0xc2 => 0x731f, 0xc3 => 0x7642, 0xc4 => 0x77ad, 0xc5 => 0x7a1c, 0xc6 => 0x7ce7, 0xc7 => 0x826f, 0xc8 => 0x8ad2, 0xc9 => 0x907c, 0xca => 0x91cf, 0xcb => 0x9675, 0xcc => 0x9818, 0xcd => 0x529b, 0xce => 0x7dd1, 0xcf => 0x502b, 0xd0 => 0x5398, 0xd1 => 0x6797, 0xd2 => 0x6dcb, 0xd3 => 0x71d0, 0xd4 => 0x7433, 0xd5 => 0x81e8, 0xd6 => 0x8f2a, 0xd7 => 0x96a3, 0xd8 => 0x9c57, 0xd9 => 0x9e9f, 0xda => 0x7460, 0xdb => 0x5841, 0xdc => 0x6d99, 0xdd => 0x7d2f, 0xde => 0x985e, 0xdf => 0x4ee4, 0xe0 => 0x4f36, 0xe1 => 0x4f8b, 0xe2 => 0x51b7, 0xe3 => 0x52b1, 0xe4 => 0x5dba, 0xe5 => 0x601c, 0xe6 => 0x73b2, 0xe7 => 0x793c, 0xe8 => 0x82d3, 0xe9 => 0x9234, 0xea => 0x96b7, 0xeb => 0x96f6, 0xec => 0x970a, 0xed => 0x9e97, 0xee => 0x9f62, 0xef => 0x66a6, 0xf0 => 0x6b74, 0xf1 => 0x5217, 0xf2 => 0x52a3, 0xf3 => 0x70c8, 0xf4 => 0x88c2, 0xf5 => 0x5ec9, 0xf6 => 0x604b, 0xf7 => 0x6190, 0xf8 => 0x6f23, 0xf9 => 0x7149, 0xfa => 0x7c3e, 0xfb => 0x7df4, 0xfc => 0x806f, }, 0x98 => { 0x40 => 0x84ee, 0x41 => 0x9023, 0x42 => 0x932c, 0x43 => 0x5442, 0x44 => 0x9b6f, 0x45 => 0x6ad3, 0x46 => 0x7089, 0x47 => 0x8cc2, 0x48 => 0x8def, 0x49 => 0x9732, 0x4a => 0x52b4, 0x4b => 0x5a41, 0x4c => 0x5eca, 0x4d => 0x5f04, 0x4e => 0x6717, 0x4f => 0x697c, 0x50 => 0x6994, 0x51 => 0x6d6a, 0x52 => 0x6f0f, 0x53 => 0x7262, 0x54 => 0x72fc, 0x55 => 0x7bed, 0x56 => 0x8001, 0x57 => 0x807e, 0x58 => 0x874b, 0x59 => 0x90ce, 0x5a => 0x516d, 0x5b => 0x9e93, 0x5c => 0x7984, 0x5d => 0x808b, 0x5e => 0x9332, 0x5f => 0x8ad6, 0x60 => 0x502d, 0x61 => 0x548c, 0x62 => 0x8a71, 0x63 => 0x6b6a, 0x64 => 0x8cc4, 0x65 => 0x8107, 0x66 => 0x60d1, 0x67 => 0x67a0, 0x68 => 0x9df2, 0x69 => 0x4e99, 0x6a => 0x4e98, 0x6b => 0x9c10, 0x6c => 0x8a6b, 0x6d => 0x85c1, 0x6e => 0x8568, 0x6f => 0x6900, 0x70 => 0x6e7e, 0x71 => 0x7897, 0x72 => 0x8155, 0x9f => 0x5f0c, 0xa0 => 0x4e10, 0xa1 => 0x4e15, 0xa2 => 0x4e2a, 0xa3 => 0x4e31, 0xa4 => 0x4e36, 0xa5 => 0x4e3c, 0xa6 => 0x4e3f, 0xa7 => 0x4e42, 0xa8 => 0x4e56, 0xa9 => 0x4e58, 0xaa => 0x4e82, 0xab => 0x4e85, 0xac => 0x8c6b, 0xad => 0x4e8a, 0xae => 0x8212, 0xaf => 0x5f0d, 0xb0 => 0x4e8e, 0xb1 => 0x4e9e, 0xb2 => 0x4e9f, 0xb3 => 0x4ea0, 0xb4 => 0x4ea2, 0xb5 => 0x4eb0, 0xb6 => 0x4eb3, 0xb7 => 0x4eb6, 0xb8 => 0x4ece, 0xb9 => 0x4ecd, 0xba => 0x4ec4, 0xbb => 0x4ec6, 0xbc => 0x4ec2, 0xbd => 0x4ed7, 0xbe => 0x4ede, 0xbf => 0x4eed, 0xc0 => 0x4edf, 0xc1 => 0x4ef7, 0xc2 => 0x4f09, 0xc3 => 0x4f5a, 0xc4 => 0x4f30, 0xc5 => 0x4f5b, 0xc6 => 0x4f5d, 0xc7 => 0x4f57, 0xc8 => 0x4f47, 0xc9 => 0x4f76, 0xca => 0x4f88, 0xcb => 0x4f8f, 0xcc => 0x4f98, 0xcd => 0x4f7b, 0xce => 0x4f69, 0xcf => 0x4f70, 0xd0 => 0x4f91, 0xd1 => 0x4f6f, 0xd2 => 0x4f86, 0xd3 => 0x4f96, 0xd4 => 0x5118, 0xd5 => 0x4fd4, 0xd6 => 0x4fdf, 0xd7 => 0x4fce, 0xd8 => 0x4fd8, 0xd9 => 0x4fdb, 0xda => 0x4fd1, 0xdb => 0x4fda, 0xdc => 0x4fd0, 0xdd => 0x4fe4, 0xde => 0x4fe5, 0xdf => 0x501a, 0xe0 => 0x5028, 0xe1 => 0x5014, 0xe2 => 0x502a, 0xe3 => 0x5025, 0xe4 => 0x5005, 0xe5 => 0x4f1c, 0xe6 => 0x4ff6, 0xe7 => 0x5021, 0xe8 => 0x5029, 0xe9 => 0x502c, 0xea => 0x4ffe, 0xeb => 0x4fef, 0xec => 0x5011, 0xed => 0x5006, 0xee => 0x5043, 0xef => 0x5047, 0xf0 => 0x6703, 0xf1 => 0x5055, 0xf2 => 0x5050, 0xf3 => 0x5048, 0xf4 => 0x505a, 0xf5 => 0x5056, 0xf6 => 0x506c, 0xf7 => 0x5078, 0xf8 => 0x5080, 0xf9 => 0x509a, 0xfa => 0x5085, 0xfb => 0x50b4, 0xfc => 0x50b2, }, 0x99 => { 0x40 => 0x50c9, 0x41 => 0x50ca, 0x42 => 0x50b3, 0x43 => 0x50c2, 0x44 => 0x50d6, 0x45 => 0x50de, 0x46 => 0x50e5, 0x47 => 0x50ed, 0x48 => 0x50e3, 0x49 => 0x50ee, 0x4a => 0x50f9, 0x4b => 0x50f5, 0x4c => 0x5109, 0x4d => 0x5101, 0x4e => 0x5102, 0x4f => 0x5116, 0x50 => 0x5115, 0x51 => 0x5114, 0x52 => 0x511a, 0x53 => 0x5121, 0x54 => 0x513a, 0x55 => 0x5137, 0x56 => 0x513c, 0x57 => 0x513b, 0x58 => 0x513f, 0x59 => 0x5140, 0x5a => 0x5152, 0x5b => 0x514c, 0x5c => 0x5154, 0x5d => 0x5162, 0x5e => 0x7af8, 0x5f => 0x5169, 0x60 => 0x516a, 0x61 => 0x516e, 0x62 => 0x5180, 0x63 => 0x5182, 0x64 => 0x56d8, 0x65 => 0x518c, 0x66 => 0x5189, 0x67 => 0x518f, 0x68 => 0x5191, 0x69 => 0x5193, 0x6a => 0x5195, 0x6b => 0x5196, 0x6c => 0x51a4, 0x6d => 0x51a6, 0x6e => 0x51a2, 0x6f => 0x51a9, 0x70 => 0x51aa, 0x71 => 0x51ab, 0x72 => 0x51b3, 0x73 => 0x51b1, 0x74 => 0x51b2, 0x75 => 0x51b0, 0x76 => 0x51b5, 0x77 => 0x51bd, 0x78 => 0x51c5, 0x79 => 0x51c9, 0x7a => 0x51db, 0x7b => 0x51e0, 0x7c => 0x8655, 0x7d => 0x51e9, 0x7e => 0x51ed, 0x80 => 0x51f0, 0x81 => 0x51f5, 0x82 => 0x51fe, 0x83 => 0x5204, 0x84 => 0x520b, 0x85 => 0x5214, 0x86 => 0x520e, 0x87 => 0x5227, 0x88 => 0x522a, 0x89 => 0x522e, 0x8a => 0x5233, 0x8b => 0x5239, 0x8c => 0x524f, 0x8d => 0x5244, 0x8e => 0x524b, 0x8f => 0x524c, 0x90 => 0x525e, 0x91 => 0x5254, 0x92 => 0x526a, 0x93 => 0x5274, 0x94 => 0x5269, 0x95 => 0x5273, 0x96 => 0x527f, 0x97 => 0x527d, 0x98 => 0x528d, 0x99 => 0x5294, 0x9a => 0x5292, 0x9b => 0x5271, 0x9c => 0x5288, 0x9d => 0x5291, 0x9e => 0x8fa8, 0x9f => 0x8fa7, 0xa0 => 0x52ac, 0xa1 => 0x52ad, 0xa2 => 0x52bc, 0xa3 => 0x52b5, 0xa4 => 0x52c1, 0xa5 => 0x52cd, 0xa6 => 0x52d7, 0xa7 => 0x52de, 0xa8 => 0x52e3, 0xa9 => 0x52e6, 0xaa => 0x98ed, 0xab => 0x52e0, 0xac => 0x52f3, 0xad => 0x52f5, 0xae => 0x52f8, 0xaf => 0x52f9, 0xb0 => 0x5306, 0xb1 => 0x5308, 0xb2 => 0x7538, 0xb3 => 0x530d, 0xb4 => 0x5310, 0xb5 => 0x530f, 0xb6 => 0x5315, 0xb7 => 0x531a, 0xb8 => 0x5323, 0xb9 => 0x532f, 0xba => 0x5331, 0xbb => 0x5333, 0xbc => 0x5338, 0xbd => 0x5340, 0xbe => 0x5346, 0xbf => 0x5345, 0xc0 => 0x4e17, 0xc1 => 0x5349, 0xc2 => 0x534d, 0xc3 => 0x51d6, 0xc4 => 0x535e, 0xc5 => 0x5369, 0xc6 => 0x536e, 0xc7 => 0x5918, 0xc8 => 0x537b, 0xc9 => 0x5377, 0xca => 0x5382, 0xcb => 0x5396, 0xcc => 0x53a0, 0xcd => 0x53a6, 0xce => 0x53a5, 0xcf => 0x53ae, 0xd0 => 0x53b0, 0xd1 => 0x53b6, 0xd2 => 0x53c3, 0xd3 => 0x7c12, 0xd4 => 0x96d9, 0xd5 => 0x53df, 0xd6 => 0x66fc, 0xd7 => 0x71ee, 0xd8 => 0x53ee, 0xd9 => 0x53e8, 0xda => 0x53ed, 0xdb => 0x53fa, 0xdc => 0x5401, 0xdd => 0x543d, 0xde => 0x5440, 0xdf => 0x542c, 0xe0 => 0x542d, 0xe1 => 0x543c, 0xe2 => 0x542e, 0xe3 => 0x5436, 0xe4 => 0x5429, 0xe5 => 0x541d, 0xe6 => 0x544e, 0xe7 => 0x548f, 0xe8 => 0x5475, 0xe9 => 0x548e, 0xea => 0x545f, 0xeb => 0x5471, 0xec => 0x5477, 0xed => 0x5470, 0xee => 0x5492, 0xef => 0x547b, 0xf0 => 0x5480, 0xf1 => 0x5476, 0xf2 => 0x5484, 0xf3 => 0x5490, 0xf4 => 0x5486, 0xf5 => 0x54c7, 0xf6 => 0x54a2, 0xf7 => 0x54b8, 0xf8 => 0x54a5, 0xf9 => 0x54ac, 0xfa => 0x54c4, 0xfb => 0x54c8, 0xfc => 0x54a8, }, 0x9a => { 0x40 => 0x54ab, 0x41 => 0x54c2, 0x42 => 0x54a4, 0x43 => 0x54be, 0x44 => 0x54bc, 0x45 => 0x54d8, 0x46 => 0x54e5, 0x47 => 0x54e6, 0x48 => 0x550f, 0x49 => 0x5514, 0x4a => 0x54fd, 0x4b => 0x54ee, 0x4c => 0x54ed, 0x4d => 0x54fa, 0x4e => 0x54e2, 0x4f => 0x5539, 0x50 => 0x5540, 0x51 => 0x5563, 0x52 => 0x554c, 0x53 => 0x552e, 0x54 => 0x555c, 0x55 => 0x5545, 0x56 => 0x5556, 0x57 => 0x5557, 0x58 => 0x5538, 0x59 => 0x5533, 0x5a => 0x555d, 0x5b => 0x5599, 0x5c => 0x5580, 0x5d => 0x54af, 0x5e => 0x558a, 0x5f => 0x559f, 0x60 => 0x557b, 0x61 => 0x557e, 0x62 => 0x5598, 0x63 => 0x559e, 0x64 => 0x55ae, 0x65 => 0x557c, 0x66 => 0x5583, 0x67 => 0x55a9, 0x68 => 0x5587, 0x69 => 0x55a8, 0x6a => 0x55da, 0x6b => 0x55c5, 0x6c => 0x55df, 0x6d => 0x55c4, 0x6e => 0x55dc, 0x6f => 0x55e4, 0x70 => 0x55d4, 0x71 => 0x5614, 0x72 => 0x55f7, 0x73 => 0x5616, 0x74 => 0x55fe, 0x75 => 0x55fd, 0x76 => 0x561b, 0x77 => 0x55f9, 0x78 => 0x564e, 0x79 => 0x5650, 0x7a => 0x71df, 0x7b => 0x5634, 0x7c => 0x5636, 0x7d => 0x5632, 0x7e => 0x5638, 0x80 => 0x566b, 0x81 => 0x5664, 0x82 => 0x562f, 0x83 => 0x566c, 0x84 => 0x566a, 0x85 => 0x5686, 0x86 => 0x5680, 0x87 => 0x568a, 0x88 => 0x56a0, 0x89 => 0x5694, 0x8a => 0x568f, 0x8b => 0x56a5, 0x8c => 0x56ae, 0x8d => 0x56b6, 0x8e => 0x56b4, 0x8f => 0x56c2, 0x90 => 0x56bc, 0x91 => 0x56c1, 0x92 => 0x56c3, 0x93 => 0x56c0, 0x94 => 0x56c8, 0x95 => 0x56ce, 0x96 => 0x56d1, 0x97 => 0x56d3, 0x98 => 0x56d7, 0x99 => 0x56ee, 0x9a => 0x56f9, 0x9b => 0x5700, 0x9c => 0x56ff, 0x9d => 0x5704, 0x9e => 0x5709, 0x9f => 0x5708, 0xa0 => 0x570b, 0xa1 => 0x570d, 0xa2 => 0x5713, 0xa3 => 0x5718, 0xa4 => 0x5716, 0xa5 => 0x55c7, 0xa6 => 0x571c, 0xa7 => 0x5726, 0xa8 => 0x5737, 0xa9 => 0x5738, 0xaa => 0x574e, 0xab => 0x573b, 0xac => 0x5740, 0xad => 0x574f, 0xae => 0x5769, 0xaf => 0x57c0, 0xb0 => 0x5788, 0xb1 => 0x5761, 0xb2 => 0x577f, 0xb3 => 0x5789, 0xb4 => 0x5793, 0xb5 => 0x57a0, 0xb6 => 0x57b3, 0xb7 => 0x57a4, 0xb8 => 0x57aa, 0xb9 => 0x57b0, 0xba => 0x57c3, 0xbb => 0x57c6, 0xbc => 0x57d4, 0xbd => 0x57d2, 0xbe => 0x57d3, 0xbf => 0x580a, 0xc0 => 0x57d6, 0xc1 => 0x57e3, 0xc2 => 0x580b, 0xc3 => 0x5819, 0xc4 => 0x581d, 0xc5 => 0x5872, 0xc6 => 0x5821, 0xc7 => 0x5862, 0xc8 => 0x584b, 0xc9 => 0x5870, 0xca => 0x6bc0, 0xcb => 0x5852, 0xcc => 0x583d, 0xcd => 0x5879, 0xce => 0x5885, 0xcf => 0x58b9, 0xd0 => 0x589f, 0xd1 => 0x58ab, 0xd2 => 0x58ba, 0xd3 => 0x58de, 0xd4 => 0x58bb, 0xd5 => 0x58b8, 0xd6 => 0x58ae, 0xd7 => 0x58c5, 0xd8 => 0x58d3, 0xd9 => 0x58d1, 0xda => 0x58d7, 0xdb => 0x58d9, 0xdc => 0x58d8, 0xdd => 0x58e5, 0xde => 0x58dc, 0xdf => 0x58e4, 0xe0 => 0x58df, 0xe1 => 0x58ef, 0xe2 => 0x58fa, 0xe3 => 0x58f9, 0xe4 => 0x58fb, 0xe5 => 0x58fc, 0xe6 => 0x58fd, 0xe7 => 0x5902, 0xe8 => 0x590a, 0xe9 => 0x5910, 0xea => 0x591b, 0xeb => 0x68a6, 0xec => 0x5925, 0xed => 0x592c, 0xee => 0x592d, 0xef => 0x5932, 0xf0 => 0x5938, 0xf1 => 0x593e, 0xf2 => 0x7ad2, 0xf3 => 0x5955, 0xf4 => 0x5950, 0xf5 => 0x594e, 0xf6 => 0x595a, 0xf7 => 0x5958, 0xf8 => 0x5962, 0xf9 => 0x5960, 0xfa => 0x5967, 0xfb => 0x596c, 0xfc => 0x5969, }, 0x9b => { 0x40 => 0x5978, 0x41 => 0x5981, 0x42 => 0x599d, 0x43 => 0x4f5e, 0x44 => 0x4fab, 0x45 => 0x59a3, 0x46 => 0x59b2, 0x47 => 0x59c6, 0x48 => 0x59e8, 0x49 => 0x59dc, 0x4a => 0x598d, 0x4b => 0x59d9, 0x4c => 0x59da, 0x4d => 0x5a25, 0x4e => 0x5a1f, 0x4f => 0x5a11, 0x50 => 0x5a1c, 0x51 => 0x5a09, 0x52 => 0x5a1a, 0x53 => 0x5a40, 0x54 => 0x5a6c, 0x55 => 0x5a49, 0x56 => 0x5a35, 0x57 => 0x5a36, 0x58 => 0x5a62, 0x59 => 0x5a6a, 0x5a => 0x5a9a, 0x5b => 0x5abc, 0x5c => 0x5abe, 0x5d => 0x5acb, 0x5e => 0x5ac2, 0x5f => 0x5abd, 0x60 => 0x5ae3, 0x61 => 0x5ad7, 0x62 => 0x5ae6, 0x63 => 0x5ae9, 0x64 => 0x5ad6, 0x65 => 0x5afa, 0x66 => 0x5afb, 0x67 => 0x5b0c, 0x68 => 0x5b0b, 0x69 => 0x5b16, 0x6a => 0x5b32, 0x6b => 0x5ad0, 0x6c => 0x5b2a, 0x6d => 0x5b36, 0x6e => 0x5b3e, 0x6f => 0x5b43, 0x70 => 0x5b45, 0x71 => 0x5b40, 0x72 => 0x5b51, 0x73 => 0x5b55, 0x74 => 0x5b5a, 0x75 => 0x5b5b, 0x76 => 0x5b65, 0x77 => 0x5b69, 0x78 => 0x5b70, 0x79 => 0x5b73, 0x7a => 0x5b75, 0x7b => 0x5b78, 0x7c => 0x6588, 0x7d => 0x5b7a, 0x7e => 0x5b80, 0x80 => 0x5b83, 0x81 => 0x5ba6, 0x82 => 0x5bb8, 0x83 => 0x5bc3, 0x84 => 0x5bc7, 0x85 => 0x5bc9, 0x86 => 0x5bd4, 0x87 => 0x5bd0, 0x88 => 0x5be4, 0x89 => 0x5be6, 0x8a => 0x5be2, 0x8b => 0x5bde, 0x8c => 0x5be5, 0x8d => 0x5beb, 0x8e => 0x5bf0, 0x8f => 0x5bf6, 0x90 => 0x5bf3, 0x91 => 0x5c05, 0x92 => 0x5c07, 0x93 => 0x5c08, 0x94 => 0x5c0d, 0x95 => 0x5c13, 0x96 => 0x5c20, 0x97 => 0x5c22, 0x98 => 0x5c28, 0x99 => 0x5c38, 0x9a => 0x5c39, 0x9b => 0x5c41, 0x9c => 0x5c46, 0x9d => 0x5c4e, 0x9e => 0x5c53, 0x9f => 0x5c50, 0xa0 => 0x5c4f, 0xa1 => 0x5b71, 0xa2 => 0x5c6c, 0xa3 => 0x5c6e, 0xa4 => 0x4e62, 0xa5 => 0x5c76, 0xa6 => 0x5c79, 0xa7 => 0x5c8c, 0xa8 => 0x5c91, 0xa9 => 0x5c94, 0xaa => 0x599b, 0xab => 0x5cab, 0xac => 0x5cbb, 0xad => 0x5cb6, 0xae => 0x5cbc, 0xaf => 0x5cb7, 0xb0 => 0x5cc5, 0xb1 => 0x5cbe, 0xb2 => 0x5cc7, 0xb3 => 0x5cd9, 0xb4 => 0x5ce9, 0xb5 => 0x5cfd, 0xb6 => 0x5cfa, 0xb7 => 0x5ced, 0xb8 => 0x5d8c, 0xb9 => 0x5cea, 0xba => 0x5d0b, 0xbb => 0x5d15, 0xbc => 0x5d17, 0xbd => 0x5d5c, 0xbe => 0x5d1f, 0xbf => 0x5d1b, 0xc0 => 0x5d11, 0xc1 => 0x5d14, 0xc2 => 0x5d22, 0xc3 => 0x5d1a, 0xc4 => 0x5d19, 0xc5 => 0x5d18, 0xc6 => 0x5d4c, 0xc7 => 0x5d52, 0xc8 => 0x5d4e, 0xc9 => 0x5d4b, 0xca => 0x5d6c, 0xcb => 0x5d73, 0xcc => 0x5d76, 0xcd => 0x5d87, 0xce => 0x5d84, 0xcf => 0x5d82, 0xd0 => 0x5da2, 0xd1 => 0x5d9d, 0xd2 => 0x5dac, 0xd3 => 0x5dae, 0xd4 => 0x5dbd, 0xd5 => 0x5d90, 0xd6 => 0x5db7, 0xd7 => 0x5dbc, 0xd8 => 0x5dc9, 0xd9 => 0x5dcd, 0xda => 0x5dd3, 0xdb => 0x5dd2, 0xdc => 0x5dd6, 0xdd => 0x5ddb, 0xde => 0x5deb, 0xdf => 0x5df2, 0xe0 => 0x5df5, 0xe1 => 0x5e0b, 0xe2 => 0x5e1a, 0xe3 => 0x5e19, 0xe4 => 0x5e11, 0xe5 => 0x5e1b, 0xe6 => 0x5e36, 0xe7 => 0x5e37, 0xe8 => 0x5e44, 0xe9 => 0x5e43, 0xea => 0x5e40, 0xeb => 0x5e4e, 0xec => 0x5e57, 0xed => 0x5e54, 0xee => 0x5e5f, 0xef => 0x5e62, 0xf0 => 0x5e64, 0xf1 => 0x5e47, 0xf2 => 0x5e75, 0xf3 => 0x5e76, 0xf4 => 0x5e7a, 0xf5 => 0x9ebc, 0xf6 => 0x5e7f, 0xf7 => 0x5ea0, 0xf8 => 0x5ec1, 0xf9 => 0x5ec2, 0xfa => 0x5ec8, 0xfb => 0x5ed0, 0xfc => 0x5ecf, }, 0x9c => { 0x40 => 0x5ed6, 0x41 => 0x5ee3, 0x42 => 0x5edd, 0x43 => 0x5eda, 0x44 => 0x5edb, 0x45 => 0x5ee2, 0x46 => 0x5ee1, 0x47 => 0x5ee8, 0x48 => 0x5ee9, 0x49 => 0x5eec, 0x4a => 0x5ef1, 0x4b => 0x5ef3, 0x4c => 0x5ef0, 0x4d => 0x5ef4, 0x4e => 0x5ef8, 0x4f => 0x5efe, 0x50 => 0x5f03, 0x51 => 0x5f09, 0x52 => 0x5f5d, 0x53 => 0x5f5c, 0x54 => 0x5f0b, 0x55 => 0x5f11, 0x56 => 0x5f16, 0x57 => 0x5f29, 0x58 => 0x5f2d, 0x59 => 0x5f38, 0x5a => 0x5f41, 0x5b => 0x5f48, 0x5c => 0x5f4c, 0x5d => 0x5f4e, 0x5e => 0x5f2f, 0x5f => 0x5f51, 0x60 => 0x5f56, 0x61 => 0x5f57, 0x62 => 0x5f59, 0x63 => 0x5f61, 0x64 => 0x5f6d, 0x65 => 0x5f73, 0x66 => 0x5f77, 0x67 => 0x5f83, 0x68 => 0x5f82, 0x69 => 0x5f7f, 0x6a => 0x5f8a, 0x6b => 0x5f88, 0x6c => 0x5f91, 0x6d => 0x5f87, 0x6e => 0x5f9e, 0x6f => 0x5f99, 0x70 => 0x5f98, 0x71 => 0x5fa0, 0x72 => 0x5fa8, 0x73 => 0x5fad, 0x74 => 0x5fbc, 0x75 => 0x5fd6, 0x76 => 0x5ffb, 0x77 => 0x5fe4, 0x78 => 0x5ff8, 0x79 => 0x5ff1, 0x7a => 0x5fdd, 0x7b => 0x60b3, 0x7c => 0x5fff, 0x7d => 0x6021, 0x7e => 0x6060, 0x80 => 0x6019, 0x81 => 0x6010, 0x82 => 0x6029, 0x83 => 0x600e, 0x84 => 0x6031, 0x85 => 0x601b, 0x86 => 0x6015, 0x87 => 0x602b, 0x88 => 0x6026, 0x89 => 0x600f, 0x8a => 0x603a, 0x8b => 0x605a, 0x8c => 0x6041, 0x8d => 0x606a, 0x8e => 0x6077, 0x8f => 0x605f, 0x90 => 0x604a, 0x91 => 0x6046, 0x92 => 0x604d, 0x93 => 0x6063, 0x94 => 0x6043, 0x95 => 0x6064, 0x96 => 0x6042, 0x97 => 0x606c, 0x98 => 0x606b, 0x99 => 0x6059, 0x9a => 0x6081, 0x9b => 0x608d, 0x9c => 0x60e7, 0x9d => 0x6083, 0x9e => 0x609a, 0x9f => 0x6084, 0xa0 => 0x609b, 0xa1 => 0x6096, 0xa2 => 0x6097, 0xa3 => 0x6092, 0xa4 => 0x60a7, 0xa5 => 0x608b, 0xa6 => 0x60e1, 0xa7 => 0x60b8, 0xa8 => 0x60e0, 0xa9 => 0x60d3, 0xaa => 0x60b4, 0xab => 0x5ff0, 0xac => 0x60bd, 0xad => 0x60c6, 0xae => 0x60b5, 0xaf => 0x60d8, 0xb0 => 0x614d, 0xb1 => 0x6115, 0xb2 => 0x6106, 0xb3 => 0x60f6, 0xb4 => 0x60f7, 0xb5 => 0x6100, 0xb6 => 0x60f4, 0xb7 => 0x60fa, 0xb8 => 0x6103, 0xb9 => 0x6121, 0xba => 0x60fb, 0xbb => 0x60f1, 0xbc => 0x610d, 0xbd => 0x610e, 0xbe => 0x6147, 0xbf => 0x613e, 0xc0 => 0x6128, 0xc1 => 0x6127, 0xc2 => 0x614a, 0xc3 => 0x613f, 0xc4 => 0x613c, 0xc5 => 0x612c, 0xc6 => 0x6134, 0xc7 => 0x613d, 0xc8 => 0x6142, 0xc9 => 0x6144, 0xca => 0x6173, 0xcb => 0x6177, 0xcc => 0x6158, 0xcd => 0x6159, 0xce => 0x615a, 0xcf => 0x616b, 0xd0 => 0x6174, 0xd1 => 0x616f, 0xd2 => 0x6165, 0xd3 => 0x6171, 0xd4 => 0x615f, 0xd5 => 0x615d, 0xd6 => 0x6153, 0xd7 => 0x6175, 0xd8 => 0x6199, 0xd9 => 0x6196, 0xda => 0x6187, 0xdb => 0x61ac, 0xdc => 0x6194, 0xdd => 0x619a, 0xde => 0x618a, 0xdf => 0x6191, 0xe0 => 0x61ab, 0xe1 => 0x61ae, 0xe2 => 0x61cc, 0xe3 => 0x61ca, 0xe4 => 0x61c9, 0xe5 => 0x61f7, 0xe6 => 0x61c8, 0xe7 => 0x61c3, 0xe8 => 0x61c6, 0xe9 => 0x61ba, 0xea => 0x61cb, 0xeb => 0x7f79, 0xec => 0x61cd, 0xed => 0x61e6, 0xee => 0x61e3, 0xef => 0x61f6, 0xf0 => 0x61fa, 0xf1 => 0x61f4, 0xf2 => 0x61ff, 0xf3 => 0x61fd, 0xf4 => 0x61fc, 0xf5 => 0x61fe, 0xf6 => 0x6200, 0xf7 => 0x6208, 0xf8 => 0x6209, 0xf9 => 0x620d, 0xfa => 0x620c, 0xfb => 0x6214, 0xfc => 0x621b, }, 0x9d => { 0x40 => 0x621e, 0x41 => 0x6221, 0x42 => 0x622a, 0x43 => 0x622e, 0x44 => 0x6230, 0x45 => 0x6232, 0x46 => 0x6233, 0x47 => 0x6241, 0x48 => 0x624e, 0x49 => 0x625e, 0x4a => 0x6263, 0x4b => 0x625b, 0x4c => 0x6260, 0x4d => 0x6268, 0x4e => 0x627c, 0x4f => 0x6282, 0x50 => 0x6289, 0x51 => 0x627e, 0x52 => 0x6292, 0x53 => 0x6293, 0x54 => 0x6296, 0x55 => 0x62d4, 0x56 => 0x6283, 0x57 => 0x6294, 0x58 => 0x62d7, 0x59 => 0x62d1, 0x5a => 0x62bb, 0x5b => 0x62cf, 0x5c => 0x62ff, 0x5d => 0x62c6, 0x5e => 0x64d4, 0x5f => 0x62c8, 0x60 => 0x62dc, 0x61 => 0x62cc, 0x62 => 0x62ca, 0x63 => 0x62c2, 0x64 => 0x62c7, 0x65 => 0x629b, 0x66 => 0x62c9, 0x67 => 0x630c, 0x68 => 0x62ee, 0x69 => 0x62f1, 0x6a => 0x6327, 0x6b => 0x6302, 0x6c => 0x6308, 0x6d => 0x62ef, 0x6e => 0x62f5, 0x6f => 0x6350, 0x70 => 0x633e, 0x71 => 0x634d, 0x72 => 0x641c, 0x73 => 0x634f, 0x74 => 0x6396, 0x75 => 0x638e, 0x76 => 0x6380, 0x77 => 0x63ab, 0x78 => 0x6376, 0x79 => 0x63a3, 0x7a => 0x638f, 0x7b => 0x6389, 0x7c => 0x639f, 0x7d => 0x63b5, 0x7e => 0x636b, 0x80 => 0x6369, 0x81 => 0x63be, 0x82 => 0x63e9, 0x83 => 0x63c0, 0x84 => 0x63c6, 0x85 => 0x63e3, 0x86 => 0x63c9, 0x87 => 0x63d2, 0x88 => 0x63f6, 0x89 => 0x63c4, 0x8a => 0x6416, 0x8b => 0x6434, 0x8c => 0x6406, 0x8d => 0x6413, 0x8e => 0x6426, 0x8f => 0x6436, 0x90 => 0x651d, 0x91 => 0x6417, 0x92 => 0x6428, 0x93 => 0x640f, 0x94 => 0x6467, 0x95 => 0x646f, 0x96 => 0x6476, 0x97 => 0x644e, 0x98 => 0x652a, 0x99 => 0x6495, 0x9a => 0x6493, 0x9b => 0x64a5, 0x9c => 0x64a9, 0x9d => 0x6488, 0x9e => 0x64bc, 0x9f => 0x64da, 0xa0 => 0x64d2, 0xa1 => 0x64c5, 0xa2 => 0x64c7, 0xa3 => 0x64bb, 0xa4 => 0x64d8, 0xa5 => 0x64c2, 0xa6 => 0x64f1, 0xa7 => 0x64e7, 0xa8 => 0x8209, 0xa9 => 0x64e0, 0xaa => 0x64e1, 0xab => 0x62ac, 0xac => 0x64e3, 0xad => 0x64ef, 0xae => 0x652c, 0xaf => 0x64f6, 0xb0 => 0x64f4, 0xb1 => 0x64f2, 0xb2 => 0x64fa, 0xb3 => 0x6500, 0xb4 => 0x64fd, 0xb5 => 0x6518, 0xb6 => 0x651c, 0xb7 => 0x6505, 0xb8 => 0x6524, 0xb9 => 0x6523, 0xba => 0x652b, 0xbb => 0x6534, 0xbc => 0x6535, 0xbd => 0x6537, 0xbe => 0x6536, 0xbf => 0x6538, 0xc0 => 0x754b, 0xc1 => 0x6548, 0xc2 => 0x6556, 0xc3 => 0x6555, 0xc4 => 0x654d, 0xc5 => 0x6558, 0xc6 => 0x655e, 0xc7 => 0x655d, 0xc8 => 0x6572, 0xc9 => 0x6578, 0xca => 0x6582, 0xcb => 0x6583, 0xcc => 0x8b8a, 0xcd => 0x659b, 0xce => 0x659f, 0xcf => 0x65ab, 0xd0 => 0x65b7, 0xd1 => 0x65c3, 0xd2 => 0x65c6, 0xd3 => 0x65c1, 0xd4 => 0x65c4, 0xd5 => 0x65cc, 0xd6 => 0x65d2, 0xd7 => 0x65db, 0xd8 => 0x65d9, 0xd9 => 0x65e0, 0xda => 0x65e1, 0xdb => 0x65f1, 0xdc => 0x6772, 0xdd => 0x660a, 0xde => 0x6603, 0xdf => 0x65fb, 0xe0 => 0x6773, 0xe1 => 0x6635, 0xe2 => 0x6636, 0xe3 => 0x6634, 0xe4 => 0x661c, 0xe5 => 0x664f, 0xe6 => 0x6644, 0xe7 => 0x6649, 0xe8 => 0x6641, 0xe9 => 0x665e, 0xea => 0x665d, 0xeb => 0x6664, 0xec => 0x6667, 0xed => 0x6668, 0xee => 0x665f, 0xef => 0x6662, 0xf0 => 0x6670, 0xf1 => 0x6683, 0xf2 => 0x6688, 0xf3 => 0x668e, 0xf4 => 0x6689, 0xf5 => 0x6684, 0xf6 => 0x6698, 0xf7 => 0x669d, 0xf8 => 0x66c1, 0xf9 => 0x66b9, 0xfa => 0x66c9, 0xfb => 0x66be, 0xfc => 0x66bc, }, 0x9e => { 0x40 => 0x66c4, 0x41 => 0x66b8, 0x42 => 0x66d6, 0x43 => 0x66da, 0x44 => 0x66e0, 0x45 => 0x663f, 0x46 => 0x66e6, 0x47 => 0x66e9, 0x48 => 0x66f0, 0x49 => 0x66f5, 0x4a => 0x66f7, 0x4b => 0x670f, 0x4c => 0x6716, 0x4d => 0x671e, 0x4e => 0x6726, 0x4f => 0x6727, 0x50 => 0x9738, 0x51 => 0x672e, 0x52 => 0x673f, 0x53 => 0x6736, 0x54 => 0x6741, 0x55 => 0x6738, 0x56 => 0x6737, 0x57 => 0x6746, 0x58 => 0x675e, 0x59 => 0x6760, 0x5a => 0x6759, 0x5b => 0x6763, 0x5c => 0x6764, 0x5d => 0x6789, 0x5e => 0x6770, 0x5f => 0x67a9, 0x60 => 0x677c, 0x61 => 0x676a, 0x62 => 0x678c, 0x63 => 0x678b, 0x64 => 0x67a6, 0x65 => 0x67a1, 0x66 => 0x6785, 0x67 => 0x67b7, 0x68 => 0x67ef, 0x69 => 0x67b4, 0x6a => 0x67ec, 0x6b => 0x67b3, 0x6c => 0x67e9, 0x6d => 0x67b8, 0x6e => 0x67e4, 0x6f => 0x67de, 0x70 => 0x67dd, 0x71 => 0x67e2, 0x72 => 0x67ee, 0x73 => 0x67b9, 0x74 => 0x67ce, 0x75 => 0x67c6, 0x76 => 0x67e7, 0x77 => 0x6a9c, 0x78 => 0x681e, 0x79 => 0x6846, 0x7a => 0x6829, 0x7b => 0x6840, 0x7c => 0x684d, 0x7d => 0x6832, 0x7e => 0x684e, 0x80 => 0x68b3, 0x81 => 0x682b, 0x82 => 0x6859, 0x83 => 0x6863, 0x84 => 0x6877, 0x85 => 0x687f, 0x86 => 0x689f, 0x87 => 0x688f, 0x88 => 0x68ad, 0x89 => 0x6894, 0x8a => 0x689d, 0x8b => 0x689b, 0x8c => 0x6883, 0x8d => 0x6aae, 0x8e => 0x68b9, 0x8f => 0x6874, 0x90 => 0x68b5, 0x91 => 0x68a0, 0x92 => 0x68ba, 0x93 => 0x690f, 0x94 => 0x688d, 0x95 => 0x687e, 0x96 => 0x6901, 0x97 => 0x68ca, 0x98 => 0x6908, 0x99 => 0x68d8, 0x9a => 0x6922, 0x9b => 0x6926, 0x9c => 0x68e1, 0x9d => 0x690c, 0x9e => 0x68cd, 0x9f => 0x68d4, 0xa0 => 0x68e7, 0xa1 => 0x68d5, 0xa2 => 0x6936, 0xa3 => 0x6912, 0xa4 => 0x6904, 0xa5 => 0x68d7, 0xa6 => 0x68e3, 0xa7 => 0x6925, 0xa8 => 0x68f9, 0xa9 => 0x68e0, 0xaa => 0x68ef, 0xab => 0x6928, 0xac => 0x692a, 0xad => 0x691a, 0xae => 0x6923, 0xaf => 0x6921, 0xb0 => 0x68c6, 0xb1 => 0x6979, 0xb2 => 0x6977, 0xb3 => 0x695c, 0xb4 => 0x6978, 0xb5 => 0x696b, 0xb6 => 0x6954, 0xb7 => 0x697e, 0xb8 => 0x696e, 0xb9 => 0x6939, 0xba => 0x6974, 0xbb => 0x693d, 0xbc => 0x6959, 0xbd => 0x6930, 0xbe => 0x6961, 0xbf => 0x695e, 0xc0 => 0x695d, 0xc1 => 0x6981, 0xc2 => 0x696a, 0xc3 => 0x69b2, 0xc4 => 0x69ae, 0xc5 => 0x69d0, 0xc6 => 0x69bf, 0xc7 => 0x69c1, 0xc8 => 0x69d3, 0xc9 => 0x69be, 0xca => 0x69ce, 0xcb => 0x5be8, 0xcc => 0x69ca, 0xcd => 0x69dd, 0xce => 0x69bb, 0xcf => 0x69c3, 0xd0 => 0x69a7, 0xd1 => 0x6a2e, 0xd2 => 0x6991, 0xd3 => 0x69a0, 0xd4 => 0x699c, 0xd5 => 0x6995, 0xd6 => 0x69b4, 0xd7 => 0x69de, 0xd8 => 0x69e8, 0xd9 => 0x6a02, 0xda => 0x6a1b, 0xdb => 0x69ff, 0xdc => 0x6b0a, 0xdd => 0x69f9, 0xde => 0x69f2, 0xdf => 0x69e7, 0xe0 => 0x6a05, 0xe1 => 0x69b1, 0xe2 => 0x6a1e, 0xe3 => 0x69ed, 0xe4 => 0x6a14, 0xe5 => 0x69eb, 0xe6 => 0x6a0a, 0xe7 => 0x6a12, 0xe8 => 0x6ac1, 0xe9 => 0x6a23, 0xea => 0x6a13, 0xeb => 0x6a44, 0xec => 0x6a0c, 0xed => 0x6a72, 0xee => 0x6a36, 0xef => 0x6a78, 0xf0 => 0x6a47, 0xf1 => 0x6a62, 0xf2 => 0x6a59, 0xf3 => 0x6a66, 0xf4 => 0x6a48, 0xf5 => 0x6a38, 0xf6 => 0x6a22, 0xf7 => 0x6a90, 0xf8 => 0x6a8d, 0xf9 => 0x6aa0, 0xfa => 0x6a84, 0xfb => 0x6aa2, 0xfc => 0x6aa3, }, 0x9f => { 0x40 => 0x6a97, 0x41 => 0x8617, 0x42 => 0x6abb, 0x43 => 0x6ac3, 0x44 => 0x6ac2, 0x45 => 0x6ab8, 0x46 => 0x6ab3, 0x47 => 0x6aac, 0x48 => 0x6ade, 0x49 => 0x6ad1, 0x4a => 0x6adf, 0x4b => 0x6aaa, 0x4c => 0x6ada, 0x4d => 0x6aea, 0x4e => 0x6afb, 0x4f => 0x6b05, 0x50 => 0x8616, 0x51 => 0x6afa, 0x52 => 0x6b12, 0x53 => 0x6b16, 0x54 => 0x9b31, 0x55 => 0x6b1f, 0x56 => 0x6b38, 0x57 => 0x6b37, 0x58 => 0x76dc, 0x59 => 0x6b39, 0x5a => 0x98ee, 0x5b => 0x6b47, 0x5c => 0x6b43, 0x5d => 0x6b49, 0x5e => 0x6b50, 0x5f => 0x6b59, 0x60 => 0x6b54, 0x61 => 0x6b5b, 0x62 => 0x6b5f, 0x63 => 0x6b61, 0x64 => 0x6b78, 0x65 => 0x6b79, 0x66 => 0x6b7f, 0x67 => 0x6b80, 0x68 => 0x6b84, 0x69 => 0x6b83, 0x6a => 0x6b8d, 0x6b => 0x6b98, 0x6c => 0x6b95, 0x6d => 0x6b9e, 0x6e => 0x6ba4, 0x6f => 0x6baa, 0x70 => 0x6bab, 0x71 => 0x6baf, 0x72 => 0x6bb2, 0x73 => 0x6bb1, 0x74 => 0x6bb3, 0x75 => 0x6bb7, 0x76 => 0x6bbc, 0x77 => 0x6bc6, 0x78 => 0x6bcb, 0x79 => 0x6bd3, 0x7a => 0x6bdf, 0x7b => 0x6bec, 0x7c => 0x6beb, 0x7d => 0x6bf3, 0x7e => 0x6bef, 0x80 => 0x9ebe, 0x81 => 0x6c08, 0x82 => 0x6c13, 0x83 => 0x6c14, 0x84 => 0x6c1b, 0x85 => 0x6c24, 0x86 => 0x6c23, 0x87 => 0x6c5e, 0x88 => 0x6c55, 0x89 => 0x6c62, 0x8a => 0x6c6a, 0x8b => 0x6c82, 0x8c => 0x6c8d, 0x8d => 0x6c9a, 0x8e => 0x6c81, 0x8f => 0x6c9b, 0x90 => 0x6c7e, 0x91 => 0x6c68, 0x92 => 0x6c73, 0x93 => 0x6c92, 0x94 => 0x6c90, 0x95 => 0x6cc4, 0x96 => 0x6cf1, 0x97 => 0x6cd3, 0x98 => 0x6cbd, 0x99 => 0x6cd7, 0x9a => 0x6cc5, 0x9b => 0x6cdd, 0x9c => 0x6cae, 0x9d => 0x6cb1, 0x9e => 0x6cbe, 0x9f => 0x6cba, 0xa0 => 0x6cdb, 0xa1 => 0x6cef, 0xa2 => 0x6cd9, 0xa3 => 0x6cea, 0xa4 => 0x6d1f, 0xa5 => 0x884d, 0xa6 => 0x6d36, 0xa7 => 0x6d2b, 0xa8 => 0x6d3d, 0xa9 => 0x6d38, 0xaa => 0x6d19, 0xab => 0x6d35, 0xac => 0x6d33, 0xad => 0x6d12, 0xae => 0x6d0c, 0xaf => 0x6d63, 0xb0 => 0x6d93, 0xb1 => 0x6d64, 0xb2 => 0x6d5a, 0xb3 => 0x6d79, 0xb4 => 0x6d59, 0xb5 => 0x6d8e, 0xb6 => 0x6d95, 0xb7 => 0x6fe4, 0xb8 => 0x6d85, 0xb9 => 0x6df9, 0xba => 0x6e15, 0xbb => 0x6e0a, 0xbc => 0x6db5, 0xbd => 0x6dc7, 0xbe => 0x6de6, 0xbf => 0x6db8, 0xc0 => 0x6dc6, 0xc1 => 0x6dec, 0xc2 => 0x6dde, 0xc3 => 0x6dcc, 0xc4 => 0x6de8, 0xc5 => 0x6dd2, 0xc6 => 0x6dc5, 0xc7 => 0x6dfa, 0xc8 => 0x6dd9, 0xc9 => 0x6de4, 0xca => 0x6dd5, 0xcb => 0x6dea, 0xcc => 0x6dee, 0xcd => 0x6e2d, 0xce => 0x6e6e, 0xcf => 0x6e2e, 0xd0 => 0x6e19, 0xd1 => 0x6e72, 0xd2 => 0x6e5f, 0xd3 => 0x6e3e, 0xd4 => 0x6e23, 0xd5 => 0x6e6b, 0xd6 => 0x6e2b, 0xd7 => 0x6e76, 0xd8 => 0x6e4d, 0xd9 => 0x6e1f, 0xda => 0x6e43, 0xdb => 0x6e3a, 0xdc => 0x6e4e, 0xdd => 0x6e24, 0xde => 0x6eff, 0xdf => 0x6e1d, 0xe0 => 0x6e38, 0xe1 => 0x6e82, 0xe2 => 0x6eaa, 0xe3 => 0x6e98, 0xe4 => 0x6ec9, 0xe5 => 0x6eb7, 0xe6 => 0x6ed3, 0xe7 => 0x6ebd, 0xe8 => 0x6eaf, 0xe9 => 0x6ec4, 0xea => 0x6eb2, 0xeb => 0x6ed4, 0xec => 0x6ed5, 0xed => 0x6e8f, 0xee => 0x6ea5, 0xef => 0x6ec2, 0xf0 => 0x6e9f, 0xf1 => 0x6f41, 0xf2 => 0x6f11, 0xf3 => 0x704c, 0xf4 => 0x6eec, 0xf5 => 0x6ef8, 0xf6 => 0x6efe, 0xf7 => 0x6f3f, 0xf8 => 0x6ef2, 0xf9 => 0x6f31, 0xfa => 0x6eef, 0xfb => 0x6f32, 0xfc => 0x6ecc, }, 0xe0 => { 0x40 => 0x6f3e, 0x41 => 0x6f13, 0x42 => 0x6ef7, 0x43 => 0x6f86, 0x44 => 0x6f7a, 0x45 => 0x6f78, 0x46 => 0x6f81, 0x47 => 0x6f80, 0x48 => 0x6f6f, 0x49 => 0x6f5b, 0x4a => 0x6ff3, 0x4b => 0x6f6d, 0x4c => 0x6f82, 0x4d => 0x6f7c, 0x4e => 0x6f58, 0x4f => 0x6f8e, 0x50 => 0x6f91, 0x51 => 0x6fc2, 0x52 => 0x6f66, 0x53 => 0x6fb3, 0x54 => 0x6fa3, 0x55 => 0x6fa1, 0x56 => 0x6fa4, 0x57 => 0x6fb9, 0x58 => 0x6fc6, 0x59 => 0x6faa, 0x5a => 0x6fdf, 0x5b => 0x6fd5, 0x5c => 0x6fec, 0x5d => 0x6fd4, 0x5e => 0x6fd8, 0x5f => 0x6ff1, 0x60 => 0x6fee, 0x61 => 0x6fdb, 0x62 => 0x7009, 0x63 => 0x700b, 0x64 => 0x6ffa, 0x65 => 0x7011, 0x66 => 0x7001, 0x67 => 0x700f, 0x68 => 0x6ffe, 0x69 => 0x701b, 0x6a => 0x701a, 0x6b => 0x6f74, 0x6c => 0x701d, 0x6d => 0x7018, 0x6e => 0x701f, 0x6f => 0x7030, 0x70 => 0x703e, 0x71 => 0x7032, 0x72 => 0x7051, 0x73 => 0x7063, 0x74 => 0x7099, 0x75 => 0x7092, 0x76 => 0x70af, 0x77 => 0x70f1, 0x78 => 0x70ac, 0x79 => 0x70b8, 0x7a => 0x70b3, 0x7b => 0x70ae, 0x7c => 0x70df, 0x7d => 0x70cb, 0x7e => 0x70dd, 0x80 => 0x70d9, 0x81 => 0x7109, 0x82 => 0x70fd, 0x83 => 0x711c, 0x84 => 0x7119, 0x85 => 0x7165, 0x86 => 0x7155, 0x87 => 0x7188, 0x88 => 0x7166, 0x89 => 0x7162, 0x8a => 0x714c, 0x8b => 0x7156, 0x8c => 0x716c, 0x8d => 0x718f, 0x8e => 0x71fb, 0x8f => 0x7184, 0x90 => 0x7195, 0x91 => 0x71a8, 0x92 => 0x71ac, 0x93 => 0x71d7, 0x94 => 0x71b9, 0x95 => 0x71be, 0x96 => 0x71d2, 0x97 => 0x71c9, 0x98 => 0x71d4, 0x99 => 0x71ce, 0x9a => 0x71e0, 0x9b => 0x71ec, 0x9c => 0x71e7, 0x9d => 0x71f5, 0x9e => 0x71fc, 0x9f => 0x71f9, 0xa0 => 0x71ff, 0xa1 => 0x720d, 0xa2 => 0x7210, 0xa3 => 0x721b, 0xa4 => 0x7228, 0xa5 => 0x722d, 0xa6 => 0x722c, 0xa7 => 0x7230, 0xa8 => 0x7232, 0xa9 => 0x723b, 0xaa => 0x723c, 0xab => 0x723f, 0xac => 0x7240, 0xad => 0x7246, 0xae => 0x724b, 0xaf => 0x7258, 0xb0 => 0x7274, 0xb1 => 0x727e, 0xb2 => 0x7282, 0xb3 => 0x7281, 0xb4 => 0x7287, 0xb5 => 0x7292, 0xb6 => 0x7296, 0xb7 => 0x72a2, 0xb8 => 0x72a7, 0xb9 => 0x72b9, 0xba => 0x72b2, 0xbb => 0x72c3, 0xbc => 0x72c6, 0xbd => 0x72c4, 0xbe => 0x72ce, 0xbf => 0x72d2, 0xc0 => 0x72e2, 0xc1 => 0x72e0, 0xc2 => 0x72e1, 0xc3 => 0x72f9, 0xc4 => 0x72f7, 0xc5 => 0x500f, 0xc6 => 0x7317, 0xc7 => 0x730a, 0xc8 => 0x731c, 0xc9 => 0x7316, 0xca => 0x731d, 0xcb => 0x7334, 0xcc => 0x732f, 0xcd => 0x7329, 0xce => 0x7325, 0xcf => 0x733e, 0xd0 => 0x734e, 0xd1 => 0x734f, 0xd2 => 0x9ed8, 0xd3 => 0x7357, 0xd4 => 0x736a, 0xd5 => 0x7368, 0xd6 => 0x7370, 0xd7 => 0x7378, 0xd8 => 0x7375, 0xd9 => 0x737b, 0xda => 0x737a, 0xdb => 0x73c8, 0xdc => 0x73b3, 0xdd => 0x73ce, 0xde => 0x73bb, 0xdf => 0x73c0, 0xe0 => 0x73e5, 0xe1 => 0x73ee, 0xe2 => 0x73de, 0xe3 => 0x74a2, 0xe4 => 0x7405, 0xe5 => 0x746f, 0xe6 => 0x7425, 0xe7 => 0x73f8, 0xe8 => 0x7432, 0xe9 => 0x743a, 0xea => 0x7455, 0xeb => 0x743f, 0xec => 0x745f, 0xed => 0x7459, 0xee => 0x7441, 0xef => 0x745c, 0xf0 => 0x7469, 0xf1 => 0x7470, 0xf2 => 0x7463, 0xf3 => 0x746a, 0xf4 => 0x7476, 0xf5 => 0x747e, 0xf6 => 0x748b, 0xf7 => 0x749e, 0xf8 => 0x74a7, 0xf9 => 0x74ca, 0xfa => 0x74cf, 0xfb => 0x74d4, 0xfc => 0x73f1, }, 0xe1 => { 0x40 => 0x74e0, 0x41 => 0x74e3, 0x42 => 0x74e7, 0x43 => 0x74e9, 0x44 => 0x74ee, 0x45 => 0x74f2, 0x46 => 0x74f0, 0x47 => 0x74f1, 0x48 => 0x74f8, 0x49 => 0x74f7, 0x4a => 0x7504, 0x4b => 0x7503, 0x4c => 0x7505, 0x4d => 0x750c, 0x4e => 0x750e, 0x4f => 0x750d, 0x50 => 0x7515, 0x51 => 0x7513, 0x52 => 0x751e, 0x53 => 0x7526, 0x54 => 0x752c, 0x55 => 0x753c, 0x56 => 0x7544, 0x57 => 0x754d, 0x58 => 0x754a, 0x59 => 0x7549, 0x5a => 0x755b, 0x5b => 0x7546, 0x5c => 0x755a, 0x5d => 0x7569, 0x5e => 0x7564, 0x5f => 0x7567, 0x60 => 0x756b, 0x61 => 0x756d, 0x62 => 0x7578, 0x63 => 0x7576, 0x64 => 0x7586, 0x65 => 0x7587, 0x66 => 0x7574, 0x67 => 0x758a, 0x68 => 0x7589, 0x69 => 0x7582, 0x6a => 0x7594, 0x6b => 0x759a, 0x6c => 0x759d, 0x6d => 0x75a5, 0x6e => 0x75a3, 0x6f => 0x75c2, 0x70 => 0x75b3, 0x71 => 0x75c3, 0x72 => 0x75b5, 0x73 => 0x75bd, 0x74 => 0x75b8, 0x75 => 0x75bc, 0x76 => 0x75b1, 0x77 => 0x75cd, 0x78 => 0x75ca, 0x79 => 0x75d2, 0x7a => 0x75d9, 0x7b => 0x75e3, 0x7c => 0x75de, 0x7d => 0x75fe, 0x7e => 0x75ff, 0x80 => 0x75fc, 0x81 => 0x7601, 0x82 => 0x75f0, 0x83 => 0x75fa, 0x84 => 0x75f2, 0x85 => 0x75f3, 0x86 => 0x760b, 0x87 => 0x760d, 0x88 => 0x7609, 0x89 => 0x761f, 0x8a => 0x7627, 0x8b => 0x7620, 0x8c => 0x7621, 0x8d => 0x7622, 0x8e => 0x7624, 0x8f => 0x7634, 0x90 => 0x7630, 0x91 => 0x763b, 0x92 => 0x7647, 0x93 => 0x7648, 0x94 => 0x7646, 0x95 => 0x765c, 0x96 => 0x7658, 0x97 => 0x7661, 0x98 => 0x7662, 0x99 => 0x7668, 0x9a => 0x7669, 0x9b => 0x766a, 0x9c => 0x7667, 0x9d => 0x766c, 0x9e => 0x7670, 0x9f => 0x7672, 0xa0 => 0x7676, 0xa1 => 0x7678, 0xa2 => 0x767c, 0xa3 => 0x7680, 0xa4 => 0x7683, 0xa5 => 0x7688, 0xa6 => 0x768b, 0xa7 => 0x768e, 0xa8 => 0x7696, 0xa9 => 0x7693, 0xaa => 0x7699, 0xab => 0x769a, 0xac => 0x76b0, 0xad => 0x76b4, 0xae => 0x76b8, 0xaf => 0x76b9, 0xb0 => 0x76ba, 0xb1 => 0x76c2, 0xb2 => 0x76cd, 0xb3 => 0x76d6, 0xb4 => 0x76d2, 0xb5 => 0x76de, 0xb6 => 0x76e1, 0xb7 => 0x76e5, 0xb8 => 0x76e7, 0xb9 => 0x76ea, 0xba => 0x862f, 0xbb => 0x76fb, 0xbc => 0x7708, 0xbd => 0x7707, 0xbe => 0x7704, 0xbf => 0x7729, 0xc0 => 0x7724, 0xc1 => 0x771e, 0xc2 => 0x7725, 0xc3 => 0x7726, 0xc4 => 0x771b, 0xc5 => 0x7737, 0xc6 => 0x7738, 0xc7 => 0x7747, 0xc8 => 0x775a, 0xc9 => 0x7768, 0xca => 0x776b, 0xcb => 0x775b, 0xcc => 0x7765, 0xcd => 0x777f, 0xce => 0x777e, 0xcf => 0x7779, 0xd0 => 0x778e, 0xd1 => 0x778b, 0xd2 => 0x7791, 0xd3 => 0x77a0, 0xd4 => 0x779e, 0xd5 => 0x77b0, 0xd6 => 0x77b6, 0xd7 => 0x77b9, 0xd8 => 0x77bf, 0xd9 => 0x77bc, 0xda => 0x77bd, 0xdb => 0x77bb, 0xdc => 0x77c7, 0xdd => 0x77cd, 0xde => 0x77d7, 0xdf => 0x77da, 0xe0 => 0x77dc, 0xe1 => 0x77e3, 0xe2 => 0x77ee, 0xe3 => 0x77fc, 0xe4 => 0x780c, 0xe5 => 0x7812, 0xe6 => 0x7926, 0xe7 => 0x7820, 0xe8 => 0x792a, 0xe9 => 0x7845, 0xea => 0x788e, 0xeb => 0x7874, 0xec => 0x7886, 0xed => 0x787c, 0xee => 0x789a, 0xef => 0x788c, 0xf0 => 0x78a3, 0xf1 => 0x78b5, 0xf2 => 0x78aa, 0xf3 => 0x78af, 0xf4 => 0x78d1, 0xf5 => 0x78c6, 0xf6 => 0x78cb, 0xf7 => 0x78d4, 0xf8 => 0x78be, 0xf9 => 0x78bc, 0xfa => 0x78c5, 0xfb => 0x78ca, 0xfc => 0x78ec, }, 0xe2 => { 0x40 => 0x78e7, 0x41 => 0x78da, 0x42 => 0x78fd, 0x43 => 0x78f4, 0x44 => 0x7907, 0x45 => 0x7912, 0x46 => 0x7911, 0x47 => 0x7919, 0x48 => 0x792c, 0x49 => 0x792b, 0x4a => 0x7940, 0x4b => 0x7960, 0x4c => 0x7957, 0x4d => 0x795f, 0x4e => 0x795a, 0x4f => 0x7955, 0x50 => 0x7953, 0x51 => 0x797a, 0x52 => 0x797f, 0x53 => 0x798a, 0x54 => 0x799d, 0x55 => 0x79a7, 0x56 => 0x9f4b, 0x57 => 0x79aa, 0x58 => 0x79ae, 0x59 => 0x79b3, 0x5a => 0x79b9, 0x5b => 0x79ba, 0x5c => 0x79c9, 0x5d => 0x79d5, 0x5e => 0x79e7, 0x5f => 0x79ec, 0x60 => 0x79e1, 0x61 => 0x79e3, 0x62 => 0x7a08, 0x63 => 0x7a0d, 0x64 => 0x7a18, 0x65 => 0x7a19, 0x66 => 0x7a20, 0x67 => 0x7a1f, 0x68 => 0x7980, 0x69 => 0x7a31, 0x6a => 0x7a3b, 0x6b => 0x7a3e, 0x6c => 0x7a37, 0x6d => 0x7a43, 0x6e => 0x7a57, 0x6f => 0x7a49, 0x70 => 0x7a61, 0x71 => 0x7a62, 0x72 => 0x7a69, 0x73 => 0x9f9d, 0x74 => 0x7a70, 0x75 => 0x7a79, 0x76 => 0x7a7d, 0x77 => 0x7a88, 0x78 => 0x7a97, 0x79 => 0x7a95, 0x7a => 0x7a98, 0x7b => 0x7a96, 0x7c => 0x7aa9, 0x7d => 0x7ac8, 0x7e => 0x7ab0, 0x80 => 0x7ab6, 0x81 => 0x7ac5, 0x82 => 0x7ac4, 0x83 => 0x7abf, 0x84 => 0x9083, 0x85 => 0x7ac7, 0x86 => 0x7aca, 0x87 => 0x7acd, 0x88 => 0x7acf, 0x89 => 0x7ad5, 0x8a => 0x7ad3, 0x8b => 0x7ad9, 0x8c => 0x7ada, 0x8d => 0x7add, 0x8e => 0x7ae1, 0x8f => 0x7ae2, 0x90 => 0x7ae6, 0x91 => 0x7aed, 0x92 => 0x7af0, 0x93 => 0x7b02, 0x94 => 0x7b0f, 0x95 => 0x7b0a, 0x96 => 0x7b06, 0x97 => 0x7b33, 0x98 => 0x7b18, 0x99 => 0x7b19, 0x9a => 0x7b1e, 0x9b => 0x7b35, 0x9c => 0x7b28, 0x9d => 0x7b36, 0x9e => 0x7b50, 0x9f => 0x7b7a, 0xa0 => 0x7b04, 0xa1 => 0x7b4d, 0xa2 => 0x7b0b, 0xa3 => 0x7b4c, 0xa4 => 0x7b45, 0xa5 => 0x7b75, 0xa6 => 0x7b65, 0xa7 => 0x7b74, 0xa8 => 0x7b67, 0xa9 => 0x7b70, 0xaa => 0x7b71, 0xab => 0x7b6c, 0xac => 0x7b6e, 0xad => 0x7b9d, 0xae => 0x7b98, 0xaf => 0x7b9f, 0xb0 => 0x7b8d, 0xb1 => 0x7b9c, 0xb2 => 0x7b9a, 0xb3 => 0x7b8b, 0xb4 => 0x7b92, 0xb5 => 0x7b8f, 0xb6 => 0x7b5d, 0xb7 => 0x7b99, 0xb8 => 0x7bcb, 0xb9 => 0x7bc1, 0xba => 0x7bcc, 0xbb => 0x7bcf, 0xbc => 0x7bb4, 0xbd => 0x7bc6, 0xbe => 0x7bdd, 0xbf => 0x7be9, 0xc0 => 0x7c11, 0xc1 => 0x7c14, 0xc2 => 0x7be6, 0xc3 => 0x7be5, 0xc4 => 0x7c60, 0xc5 => 0x7c00, 0xc6 => 0x7c07, 0xc7 => 0x7c13, 0xc8 => 0x7bf3, 0xc9 => 0x7bf7, 0xca => 0x7c17, 0xcb => 0x7c0d, 0xcc => 0x7bf6, 0xcd => 0x7c23, 0xce => 0x7c27, 0xcf => 0x7c2a, 0xd0 => 0x7c1f, 0xd1 => 0x7c37, 0xd2 => 0x7c2b, 0xd3 => 0x7c3d, 0xd4 => 0x7c4c, 0xd5 => 0x7c43, 0xd6 => 0x7c54, 0xd7 => 0x7c4f, 0xd8 => 0x7c40, 0xd9 => 0x7c50, 0xda => 0x7c58, 0xdb => 0x7c5f, 0xdc => 0x7c64, 0xdd => 0x7c56, 0xde => 0x7c65, 0xdf => 0x7c6c, 0xe0 => 0x7c75, 0xe1 => 0x7c83, 0xe2 => 0x7c90, 0xe3 => 0x7ca4, 0xe4 => 0x7cad, 0xe5 => 0x7ca2, 0xe6 => 0x7cab, 0xe7 => 0x7ca1, 0xe8 => 0x7ca8, 0xe9 => 0x7cb3, 0xea => 0x7cb2, 0xeb => 0x7cb1, 0xec => 0x7cae, 0xed => 0x7cb9, 0xee => 0x7cbd, 0xef => 0x7cc0, 0xf0 => 0x7cc5, 0xf1 => 0x7cc2, 0xf2 => 0x7cd8, 0xf3 => 0x7cd2, 0xf4 => 0x7cdc, 0xf5 => 0x7ce2, 0xf6 => 0x9b3b, 0xf7 => 0x7cef, 0xf8 => 0x7cf2, 0xf9 => 0x7cf4, 0xfa => 0x7cf6, 0xfb => 0x7cfa, 0xfc => 0x7d06, }, 0xe3 => { 0x40 => 0x7d02, 0x41 => 0x7d1c, 0x42 => 0x7d15, 0x43 => 0x7d0a, 0x44 => 0x7d45, 0x45 => 0x7d4b, 0x46 => 0x7d2e, 0x47 => 0x7d32, 0x48 => 0x7d3f, 0x49 => 0x7d35, 0x4a => 0x7d46, 0x4b => 0x7d73, 0x4c => 0x7d56, 0x4d => 0x7d4e, 0x4e => 0x7d72, 0x4f => 0x7d68, 0x50 => 0x7d6e, 0x51 => 0x7d4f, 0x52 => 0x7d63, 0x53 => 0x7d93, 0x54 => 0x7d89, 0x55 => 0x7d5b, 0x56 => 0x7d8f, 0x57 => 0x7d7d, 0x58 => 0x7d9b, 0x59 => 0x7dba, 0x5a => 0x7dae, 0x5b => 0x7da3, 0x5c => 0x7db5, 0x5d => 0x7dc7, 0x5e => 0x7dbd, 0x5f => 0x7dab, 0x60 => 0x7e3d, 0x61 => 0x7da2, 0x62 => 0x7daf, 0x63 => 0x7ddc, 0x64 => 0x7db8, 0x65 => 0x7d9f, 0x66 => 0x7db0, 0x67 => 0x7dd8, 0x68 => 0x7ddd, 0x69 => 0x7de4, 0x6a => 0x7dde, 0x6b => 0x7dfb, 0x6c => 0x7df2, 0x6d => 0x7de1, 0x6e => 0x7e05, 0x6f => 0x7e0a, 0x70 => 0x7e23, 0x71 => 0x7e21, 0x72 => 0x7e12, 0x73 => 0x7e31, 0x74 => 0x7e1f, 0x75 => 0x7e09, 0x76 => 0x7e0b, 0x77 => 0x7e22, 0x78 => 0x7e46, 0x79 => 0x7e66, 0x7a => 0x7e3b, 0x7b => 0x7e35, 0x7c => 0x7e39, 0x7d => 0x7e43, 0x7e => 0x7e37, 0x80 => 0x7e32, 0x81 => 0x7e3a, 0x82 => 0x7e67, 0x83 => 0x7e5d, 0x84 => 0x7e56, 0x85 => 0x7e5e, 0x86 => 0x7e59, 0x87 => 0x7e5a, 0x88 => 0x7e79, 0x89 => 0x7e6a, 0x8a => 0x7e69, 0x8b => 0x7e7c, 0x8c => 0x7e7b, 0x8d => 0x7e83, 0x8e => 0x7dd5, 0x8f => 0x7e7d, 0x90 => 0x8fae, 0x91 => 0x7e7f, 0x92 => 0x7e88, 0x93 => 0x7e89, 0x94 => 0x7e8c, 0x95 => 0x7e92, 0x96 => 0x7e90, 0x97 => 0x7e93, 0x98 => 0x7e94, 0x99 => 0x7e96, 0x9a => 0x7e8e, 0x9b => 0x7e9b, 0x9c => 0x7e9c, 0x9d => 0x7f38, 0x9e => 0x7f3a, 0x9f => 0x7f45, 0xa0 => 0x7f4c, 0xa1 => 0x7f4d, 0xa2 => 0x7f4e, 0xa3 => 0x7f50, 0xa4 => 0x7f51, 0xa5 => 0x7f55, 0xa6 => 0x7f54, 0xa7 => 0x7f58, 0xa8 => 0x7f5f, 0xa9 => 0x7f60, 0xaa => 0x7f68, 0xab => 0x7f69, 0xac => 0x7f67, 0xad => 0x7f78, 0xae => 0x7f82, 0xaf => 0x7f86, 0xb0 => 0x7f83, 0xb1 => 0x7f88, 0xb2 => 0x7f87, 0xb3 => 0x7f8c, 0xb4 => 0x7f94, 0xb5 => 0x7f9e, 0xb6 => 0x7f9d, 0xb7 => 0x7f9a, 0xb8 => 0x7fa3, 0xb9 => 0x7faf, 0xba => 0x7fb2, 0xbb => 0x7fb9, 0xbc => 0x7fae, 0xbd => 0x7fb6, 0xbe => 0x7fb8, 0xbf => 0x8b71, 0xc0 => 0x7fc5, 0xc1 => 0x7fc6, 0xc2 => 0x7fca, 0xc3 => 0x7fd5, 0xc4 => 0x7fd4, 0xc5 => 0x7fe1, 0xc6 => 0x7fe6, 0xc7 => 0x7fe9, 0xc8 => 0x7ff3, 0xc9 => 0x7ff9, 0xca => 0x98dc, 0xcb => 0x8006, 0xcc => 0x8004, 0xcd => 0x800b, 0xce => 0x8012, 0xcf => 0x8018, 0xd0 => 0x8019, 0xd1 => 0x801c, 0xd2 => 0x8021, 0xd3 => 0x8028, 0xd4 => 0x803f, 0xd5 => 0x803b, 0xd6 => 0x804a, 0xd7 => 0x8046, 0xd8 => 0x8052, 0xd9 => 0x8058, 0xda => 0x805a, 0xdb => 0x805f, 0xdc => 0x8062, 0xdd => 0x8068, 0xde => 0x8073, 0xdf => 0x8072, 0xe0 => 0x8070, 0xe1 => 0x8076, 0xe2 => 0x8079, 0xe3 => 0x807d, 0xe4 => 0x807f, 0xe5 => 0x8084, 0xe6 => 0x8086, 0xe7 => 0x8085, 0xe8 => 0x809b, 0xe9 => 0x8093, 0xea => 0x809a, 0xeb => 0x80ad, 0xec => 0x5190, 0xed => 0x80ac, 0xee => 0x80db, 0xef => 0x80e5, 0xf0 => 0x80d9, 0xf1 => 0x80dd, 0xf2 => 0x80c4, 0xf3 => 0x80da, 0xf4 => 0x80d6, 0xf5 => 0x8109, 0xf6 => 0x80ef, 0xf7 => 0x80f1, 0xf8 => 0x811b, 0xf9 => 0x8129, 0xfa => 0x8123, 0xfb => 0x812f, 0xfc => 0x814b, }, 0xe4 => { 0x40 => 0x968b, 0x41 => 0x8146, 0x42 => 0x813e, 0x43 => 0x8153, 0x44 => 0x8151, 0x45 => 0x80fc, 0x46 => 0x8171, 0x47 => 0x816e, 0x48 => 0x8165, 0x49 => 0x8166, 0x4a => 0x8174, 0x4b => 0x8183, 0x4c => 0x8188, 0x4d => 0x818a, 0x4e => 0x8180, 0x4f => 0x8182, 0x50 => 0x81a0, 0x51 => 0x8195, 0x52 => 0x81a4, 0x53 => 0x81a3, 0x54 => 0x815f, 0x55 => 0x8193, 0x56 => 0x81a9, 0x57 => 0x81b0, 0x58 => 0x81b5, 0x59 => 0x81be, 0x5a => 0x81b8, 0x5b => 0x81bd, 0x5c => 0x81c0, 0x5d => 0x81c2, 0x5e => 0x81ba, 0x5f => 0x81c9, 0x60 => 0x81cd, 0x61 => 0x81d1, 0x62 => 0x81d9, 0x63 => 0x81d8, 0x64 => 0x81c8, 0x65 => 0x81da, 0x66 => 0x81df, 0x67 => 0x81e0, 0x68 => 0x81e7, 0x69 => 0x81fa, 0x6a => 0x81fb, 0x6b => 0x81fe, 0x6c => 0x8201, 0x6d => 0x8202, 0x6e => 0x8205, 0x6f => 0x8207, 0x70 => 0x820a, 0x71 => 0x820d, 0x72 => 0x8210, 0x73 => 0x8216, 0x74 => 0x8229, 0x75 => 0x822b, 0x76 => 0x8238, 0x77 => 0x8233, 0x78 => 0x8240, 0x79 => 0x8259, 0x7a => 0x8258, 0x7b => 0x825d, 0x7c => 0x825a, 0x7d => 0x825f, 0x7e => 0x8264, 0x80 => 0x8262, 0x81 => 0x8268, 0x82 => 0x826a, 0x83 => 0x826b, 0x84 => 0x822e, 0x85 => 0x8271, 0x86 => 0x8277, 0x87 => 0x8278, 0x88 => 0x827e, 0x89 => 0x828d, 0x8a => 0x8292, 0x8b => 0x82ab, 0x8c => 0x829f, 0x8d => 0x82bb, 0x8e => 0x82ac, 0x8f => 0x82e1, 0x90 => 0x82e3, 0x91 => 0x82df, 0x92 => 0x82d2, 0x93 => 0x82f4, 0x94 => 0x82f3, 0x95 => 0x82fa, 0x96 => 0x8393, 0x97 => 0x8303, 0x98 => 0x82fb, 0x99 => 0x82f9, 0x9a => 0x82de, 0x9b => 0x8306, 0x9c => 0x82dc, 0x9d => 0x8309, 0x9e => 0x82d9, 0x9f => 0x8335, 0xa0 => 0x8334, 0xa1 => 0x8316, 0xa2 => 0x8332, 0xa3 => 0x8331, 0xa4 => 0x8340, 0xa5 => 0x8339, 0xa6 => 0x8350, 0xa7 => 0x8345, 0xa8 => 0x832f, 0xa9 => 0x832b, 0xaa => 0x8317, 0xab => 0x8318, 0xac => 0x8385, 0xad => 0x839a, 0xae => 0x83aa, 0xaf => 0x839f, 0xb0 => 0x83a2, 0xb1 => 0x8396, 0xb2 => 0x8323, 0xb3 => 0x838e, 0xb4 => 0x8387, 0xb5 => 0x838a, 0xb6 => 0x837c, 0xb7 => 0x83b5, 0xb8 => 0x8373, 0xb9 => 0x8375, 0xba => 0x83a0, 0xbb => 0x8389, 0xbc => 0x83a8, 0xbd => 0x83f4, 0xbe => 0x8413, 0xbf => 0x83eb, 0xc0 => 0x83ce, 0xc1 => 0x83fd, 0xc2 => 0x8403, 0xc3 => 0x83d8, 0xc4 => 0x840b, 0xc5 => 0x83c1, 0xc6 => 0x83f7, 0xc7 => 0x8407, 0xc8 => 0x83e0, 0xc9 => 0x83f2, 0xca => 0x840d, 0xcb => 0x8422, 0xcc => 0x8420, 0xcd => 0x83bd, 0xce => 0x8438, 0xcf => 0x8506, 0xd0 => 0x83fb, 0xd1 => 0x846d, 0xd2 => 0x842a, 0xd3 => 0x843c, 0xd4 => 0x855a, 0xd5 => 0x8484, 0xd6 => 0x8477, 0xd7 => 0x846b, 0xd8 => 0x84ad, 0xd9 => 0x846e, 0xda => 0x8482, 0xdb => 0x8469, 0xdc => 0x8446, 0xdd => 0x842c, 0xde => 0x846f, 0xdf => 0x8479, 0xe0 => 0x8435, 0xe1 => 0x84ca, 0xe2 => 0x8462, 0xe3 => 0x84b9, 0xe4 => 0x84bf, 0xe5 => 0x849f, 0xe6 => 0x84d9, 0xe7 => 0x84cd, 0xe8 => 0x84bb, 0xe9 => 0x84da, 0xea => 0x84d0, 0xeb => 0x84c1, 0xec => 0x84c6, 0xed => 0x84d6, 0xee => 0x84a1, 0xef => 0x8521, 0xf0 => 0x84ff, 0xf1 => 0x84f4, 0xf2 => 0x8517, 0xf3 => 0x8518, 0xf4 => 0x852c, 0xf5 => 0x851f, 0xf6 => 0x8515, 0xf7 => 0x8514, 0xf8 => 0x84fc, 0xf9 => 0x8540, 0xfa => 0x8563, 0xfb => 0x8558, 0xfc => 0x8548, }, 0xe5 => { 0x40 => 0x8541, 0x41 => 0x8602, 0x42 => 0x854b, 0x43 => 0x8555, 0x44 => 0x8580, 0x45 => 0x85a4, 0x46 => 0x8588, 0x47 => 0x8591, 0x48 => 0x858a, 0x49 => 0x85a8, 0x4a => 0x856d, 0x4b => 0x8594, 0x4c => 0x859b, 0x4d => 0x85ea, 0x4e => 0x8587, 0x4f => 0x859c, 0x50 => 0x8577, 0x51 => 0x857e, 0x52 => 0x8590, 0x53 => 0x85c9, 0x54 => 0x85ba, 0x55 => 0x85cf, 0x56 => 0x85b9, 0x57 => 0x85d0, 0x58 => 0x85d5, 0x59 => 0x85dd, 0x5a => 0x85e5, 0x5b => 0x85dc, 0x5c => 0x85f9, 0x5d => 0x860a, 0x5e => 0x8613, 0x5f => 0x860b, 0x60 => 0x85fe, 0x61 => 0x85fa, 0x62 => 0x8606, 0x63 => 0x8622, 0x64 => 0x861a, 0x65 => 0x8630, 0x66 => 0x863f, 0x67 => 0x864d, 0x68 => 0x4e55, 0x69 => 0x8654, 0x6a => 0x865f, 0x6b => 0x8667, 0x6c => 0x8671, 0x6d => 0x8693, 0x6e => 0x86a3, 0x6f => 0x86a9, 0x70 => 0x86aa, 0x71 => 0x868b, 0x72 => 0x868c, 0x73 => 0x86b6, 0x74 => 0x86af, 0x75 => 0x86c4, 0x76 => 0x86c6, 0x77 => 0x86b0, 0x78 => 0x86c9, 0x79 => 0x8823, 0x7a => 0x86ab, 0x7b => 0x86d4, 0x7c => 0x86de, 0x7d => 0x86e9, 0x7e => 0x86ec, 0x80 => 0x86df, 0x81 => 0x86db, 0x82 => 0x86ef, 0x83 => 0x8712, 0x84 => 0x8706, 0x85 => 0x8708, 0x86 => 0x8700, 0x87 => 0x8703, 0x88 => 0x86fb, 0x89 => 0x8711, 0x8a => 0x8709, 0x8b => 0x870d, 0x8c => 0x86f9, 0x8d => 0x870a, 0x8e => 0x8734, 0x8f => 0x873f, 0x90 => 0x8737, 0x91 => 0x873b, 0x92 => 0x8725, 0x93 => 0x8729, 0x94 => 0x871a, 0x95 => 0x8760, 0x96 => 0x875f, 0x97 => 0x8778, 0x98 => 0x874c, 0x99 => 0x874e, 0x9a => 0x8774, 0x9b => 0x8757, 0x9c => 0x8768, 0x9d => 0x876e, 0x9e => 0x8759, 0x9f => 0x8753, 0xa0 => 0x8763, 0xa1 => 0x876a, 0xa2 => 0x8805, 0xa3 => 0x87a2, 0xa4 => 0x879f, 0xa5 => 0x8782, 0xa6 => 0x87af, 0xa7 => 0x87cb, 0xa8 => 0x87bd, 0xa9 => 0x87c0, 0xaa => 0x87d0, 0xab => 0x96d6, 0xac => 0x87ab, 0xad => 0x87c4, 0xae => 0x87b3, 0xaf => 0x87c7, 0xb0 => 0x87c6, 0xb1 => 0x87bb, 0xb2 => 0x87ef, 0xb3 => 0x87f2, 0xb4 => 0x87e0, 0xb5 => 0x880f, 0xb6 => 0x880d, 0xb7 => 0x87fe, 0xb8 => 0x87f6, 0xb9 => 0x87f7, 0xba => 0x880e, 0xbb => 0x87d2, 0xbc => 0x8811, 0xbd => 0x8816, 0xbe => 0x8815, 0xbf => 0x8822, 0xc0 => 0x8821, 0xc1 => 0x8831, 0xc2 => 0x8836, 0xc3 => 0x8839, 0xc4 => 0x8827, 0xc5 => 0x883b, 0xc6 => 0x8844, 0xc7 => 0x8842, 0xc8 => 0x8852, 0xc9 => 0x8859, 0xca => 0x885e, 0xcb => 0x8862, 0xcc => 0x886b, 0xcd => 0x8881, 0xce => 0x887e, 0xcf => 0x889e, 0xd0 => 0x8875, 0xd1 => 0x887d, 0xd2 => 0x88b5, 0xd3 => 0x8872, 0xd4 => 0x8882, 0xd5 => 0x8897, 0xd6 => 0x8892, 0xd7 => 0x88ae, 0xd8 => 0x8899, 0xd9 => 0x88a2, 0xda => 0x888d, 0xdb => 0x88a4, 0xdc => 0x88b0, 0xdd => 0x88bf, 0xde => 0x88b1, 0xdf => 0x88c3, 0xe0 => 0x88c4, 0xe1 => 0x88d4, 0xe2 => 0x88d8, 0xe3 => 0x88d9, 0xe4 => 0x88dd, 0xe5 => 0x88f9, 0xe6 => 0x8902, 0xe7 => 0x88fc, 0xe8 => 0x88f4, 0xe9 => 0x88e8, 0xea => 0x88f2, 0xeb => 0x8904, 0xec => 0x890c, 0xed => 0x890a, 0xee => 0x8913, 0xef => 0x8943, 0xf0 => 0x891e, 0xf1 => 0x8925, 0xf2 => 0x892a, 0xf3 => 0x892b, 0xf4 => 0x8941, 0xf5 => 0x8944, 0xf6 => 0x893b, 0xf7 => 0x8936, 0xf8 => 0x8938, 0xf9 => 0x894c, 0xfa => 0x891d, 0xfb => 0x8960, 0xfc => 0x895e, }, 0xe6 => { 0x40 => 0x8966, 0x41 => 0x8964, 0x42 => 0x896d, 0x43 => 0x896a, 0x44 => 0x896f, 0x45 => 0x8974, 0x46 => 0x8977, 0x47 => 0x897e, 0x48 => 0x8983, 0x49 => 0x8988, 0x4a => 0x898a, 0x4b => 0x8993, 0x4c => 0x8998, 0x4d => 0x89a1, 0x4e => 0x89a9, 0x4f => 0x89a6, 0x50 => 0x89ac, 0x51 => 0x89af, 0x52 => 0x89b2, 0x53 => 0x89ba, 0x54 => 0x89bd, 0x55 => 0x89bf, 0x56 => 0x89c0, 0x57 => 0x89da, 0x58 => 0x89dc, 0x59 => 0x89dd, 0x5a => 0x89e7, 0x5b => 0x89f4, 0x5c => 0x89f8, 0x5d => 0x8a03, 0x5e => 0x8a16, 0x5f => 0x8a10, 0x60 => 0x8a0c, 0x61 => 0x8a1b, 0x62 => 0x8a1d, 0x63 => 0x8a25, 0x64 => 0x8a36, 0x65 => 0x8a41, 0x66 => 0x8a5b, 0x67 => 0x8a52, 0x68 => 0x8a46, 0x69 => 0x8a48, 0x6a => 0x8a7c, 0x6b => 0x8a6d, 0x6c => 0x8a6c, 0x6d => 0x8a62, 0x6e => 0x8a85, 0x6f => 0x8a82, 0x70 => 0x8a84, 0x71 => 0x8aa8, 0x72 => 0x8aa1, 0x73 => 0x8a91, 0x74 => 0x8aa5, 0x75 => 0x8aa6, 0x76 => 0x8a9a, 0x77 => 0x8aa3, 0x78 => 0x8ac4, 0x79 => 0x8acd, 0x7a => 0x8ac2, 0x7b => 0x8ada, 0x7c => 0x8aeb, 0x7d => 0x8af3, 0x7e => 0x8ae7, 0x80 => 0x8ae4, 0x81 => 0x8af1, 0x82 => 0x8b14, 0x83 => 0x8ae0, 0x84 => 0x8ae2, 0x85 => 0x8af7, 0x86 => 0x8ade, 0x87 => 0x8adb, 0x88 => 0x8b0c, 0x89 => 0x8b07, 0x8a => 0x8b1a, 0x8b => 0x8ae1, 0x8c => 0x8b16, 0x8d => 0x8b10, 0x8e => 0x8b17, 0x8f => 0x8b20, 0x90 => 0x8b33, 0x91 => 0x97ab, 0x92 => 0x8b26, 0x93 => 0x8b2b, 0x94 => 0x8b3e, 0x95 => 0x8b28, 0x96 => 0x8b41, 0x97 => 0x8b4c, 0x98 => 0x8b4f, 0x99 => 0x8b4e, 0x9a => 0x8b49, 0x9b => 0x8b56, 0x9c => 0x8b5b, 0x9d => 0x8b5a, 0x9e => 0x8b6b, 0x9f => 0x8b5f, 0xa0 => 0x8b6c, 0xa1 => 0x8b6f, 0xa2 => 0x8b74, 0xa3 => 0x8b7d, 0xa4 => 0x8b80, 0xa5 => 0x8b8c, 0xa6 => 0x8b8e, 0xa7 => 0x8b92, 0xa8 => 0x8b93, 0xa9 => 0x8b96, 0xaa => 0x8b99, 0xab => 0x8b9a, 0xac => 0x8c3a, 0xad => 0x8c41, 0xae => 0x8c3f, 0xaf => 0x8c48, 0xb0 => 0x8c4c, 0xb1 => 0x8c4e, 0xb2 => 0x8c50, 0xb3 => 0x8c55, 0xb4 => 0x8c62, 0xb5 => 0x8c6c, 0xb6 => 0x8c78, 0xb7 => 0x8c7a, 0xb8 => 0x8c82, 0xb9 => 0x8c89, 0xba => 0x8c85, 0xbb => 0x8c8a, 0xbc => 0x8c8d, 0xbd => 0x8c8e, 0xbe => 0x8c94, 0xbf => 0x8c7c, 0xc0 => 0x8c98, 0xc1 => 0x621d, 0xc2 => 0x8cad, 0xc3 => 0x8caa, 0xc4 => 0x8cbd, 0xc5 => 0x8cb2, 0xc6 => 0x8cb3, 0xc7 => 0x8cae, 0xc8 => 0x8cb6, 0xc9 => 0x8cc8, 0xca => 0x8cc1, 0xcb => 0x8ce4, 0xcc => 0x8ce3, 0xcd => 0x8cda, 0xce => 0x8cfd, 0xcf => 0x8cfa, 0xd0 => 0x8cfb, 0xd1 => 0x8d04, 0xd2 => 0x8d05, 0xd3 => 0x8d0a, 0xd4 => 0x8d07, 0xd5 => 0x8d0f, 0xd6 => 0x8d0d, 0xd7 => 0x8d10, 0xd8 => 0x9f4e, 0xd9 => 0x8d13, 0xda => 0x8ccd, 0xdb => 0x8d14, 0xdc => 0x8d16, 0xdd => 0x8d67, 0xde => 0x8d6d, 0xdf => 0x8d71, 0xe0 => 0x8d73, 0xe1 => 0x8d81, 0xe2 => 0x8d99, 0xe3 => 0x8dc2, 0xe4 => 0x8dbe, 0xe5 => 0x8dba, 0xe6 => 0x8dcf, 0xe7 => 0x8dda, 0xe8 => 0x8dd6, 0xe9 => 0x8dcc, 0xea => 0x8ddb, 0xeb => 0x8dcb, 0xec => 0x8dea, 0xed => 0x8deb, 0xee => 0x8ddf, 0xef => 0x8de3, 0xf0 => 0x8dfc, 0xf1 => 0x8e08, 0xf2 => 0x8e09, 0xf3 => 0x8dff, 0xf4 => 0x8e1d, 0xf5 => 0x8e1e, 0xf6 => 0x8e10, 0xf7 => 0x8e1f, 0xf8 => 0x8e42, 0xf9 => 0x8e35, 0xfa => 0x8e30, 0xfb => 0x8e34, 0xfc => 0x8e4a, }, 0xe7 => { 0x40 => 0x8e47, 0x41 => 0x8e49, 0x42 => 0x8e4c, 0x43 => 0x8e50, 0x44 => 0x8e48, 0x45 => 0x8e59, 0x46 => 0x8e64, 0x47 => 0x8e60, 0x48 => 0x8e2a, 0x49 => 0x8e63, 0x4a => 0x8e55, 0x4b => 0x8e76, 0x4c => 0x8e72, 0x4d => 0x8e7c, 0x4e => 0x8e81, 0x4f => 0x8e87, 0x50 => 0x8e85, 0x51 => 0x8e84, 0x52 => 0x8e8b, 0x53 => 0x8e8a, 0x54 => 0x8e93, 0x55 => 0x8e91, 0x56 => 0x8e94, 0x57 => 0x8e99, 0x58 => 0x8eaa, 0x59 => 0x8ea1, 0x5a => 0x8eac, 0x5b => 0x8eb0, 0x5c => 0x8ec6, 0x5d => 0x8eb1, 0x5e => 0x8ebe, 0x5f => 0x8ec5, 0x60 => 0x8ec8, 0x61 => 0x8ecb, 0x62 => 0x8edb, 0x63 => 0x8ee3, 0x64 => 0x8efc, 0x65 => 0x8efb, 0x66 => 0x8eeb, 0x67 => 0x8efe, 0x68 => 0x8f0a, 0x69 => 0x8f05, 0x6a => 0x8f15, 0x6b => 0x8f12, 0x6c => 0x8f19, 0x6d => 0x8f13, 0x6e => 0x8f1c, 0x6f => 0x8f1f, 0x70 => 0x8f1b, 0x71 => 0x8f0c, 0x72 => 0x8f26, 0x73 => 0x8f33, 0x74 => 0x8f3b, 0x75 => 0x8f39, 0x76 => 0x8f45, 0x77 => 0x8f42, 0x78 => 0x8f3e, 0x79 => 0x8f4c, 0x7a => 0x8f49, 0x7b => 0x8f46, 0x7c => 0x8f4e, 0x7d => 0x8f57, 0x7e => 0x8f5c, 0x80 => 0x8f62, 0x81 => 0x8f63, 0x82 => 0x8f64, 0x83 => 0x8f9c, 0x84 => 0x8f9f, 0x85 => 0x8fa3, 0x86 => 0x8fad, 0x87 => 0x8faf, 0x88 => 0x8fb7, 0x89 => 0x8fda, 0x8a => 0x8fe5, 0x8b => 0x8fe2, 0x8c => 0x8fea, 0x8d => 0x8fef, 0x8e => 0x9087, 0x8f => 0x8ff4, 0x90 => 0x9005, 0x91 => 0x8ff9, 0x92 => 0x8ffa, 0x93 => 0x9011, 0x94 => 0x9015, 0x95 => 0x9021, 0x96 => 0x900d, 0x97 => 0x901e, 0x98 => 0x9016, 0x99 => 0x900b, 0x9a => 0x9027, 0x9b => 0x9036, 0x9c => 0x9035, 0x9d => 0x9039, 0x9e => 0x8ff8, 0x9f => 0x904f, 0xa0 => 0x9050, 0xa1 => 0x9051, 0xa2 => 0x9052, 0xa3 => 0x900e, 0xa4 => 0x9049, 0xa5 => 0x903e, 0xa6 => 0x9056, 0xa7 => 0x9058, 0xa8 => 0x905e, 0xa9 => 0x9068, 0xaa => 0x906f, 0xab => 0x9076, 0xac => 0x96a8, 0xad => 0x9072, 0xae => 0x9082, 0xaf => 0x907d, 0xb0 => 0x9081, 0xb1 => 0x9080, 0xb2 => 0x908a, 0xb3 => 0x9089, 0xb4 => 0x908f, 0xb5 => 0x90a8, 0xb6 => 0x90af, 0xb7 => 0x90b1, 0xb8 => 0x90b5, 0xb9 => 0x90e2, 0xba => 0x90e4, 0xbb => 0x6248, 0xbc => 0x90db, 0xbd => 0x9102, 0xbe => 0x9112, 0xbf => 0x9119, 0xc0 => 0x9132, 0xc1 => 0x9130, 0xc2 => 0x914a, 0xc3 => 0x9156, 0xc4 => 0x9158, 0xc5 => 0x9163, 0xc6 => 0x9165, 0xc7 => 0x9169, 0xc8 => 0x9173, 0xc9 => 0x9172, 0xca => 0x918b, 0xcb => 0x9189, 0xcc => 0x9182, 0xcd => 0x91a2, 0xce => 0x91ab, 0xcf => 0x91af, 0xd0 => 0x91aa, 0xd1 => 0x91b5, 0xd2 => 0x91b4, 0xd3 => 0x91ba, 0xd4 => 0x91c0, 0xd5 => 0x91c1, 0xd6 => 0x91c9, 0xd7 => 0x91cb, 0xd8 => 0x91d0, 0xd9 => 0x91d6, 0xda => 0x91df, 0xdb => 0x91e1, 0xdc => 0x91db, 0xdd => 0x91fc, 0xde => 0x91f5, 0xdf => 0x91f6, 0xe0 => 0x921e, 0xe1 => 0x91ff, 0xe2 => 0x9214, 0xe3 => 0x922c, 0xe4 => 0x9215, 0xe5 => 0x9211, 0xe6 => 0x925e, 0xe7 => 0x9257, 0xe8 => 0x9245, 0xe9 => 0x9249, 0xea => 0x9264, 0xeb => 0x9248, 0xec => 0x9295, 0xed => 0x923f, 0xee => 0x924b, 0xef => 0x9250, 0xf0 => 0x929c, 0xf1 => 0x9296, 0xf2 => 0x9293, 0xf3 => 0x929b, 0xf4 => 0x925a, 0xf5 => 0x92cf, 0xf6 => 0x92b9, 0xf7 => 0x92b7, 0xf8 => 0x92e9, 0xf9 => 0x930f, 0xfa => 0x92fa, 0xfb => 0x9344, 0xfc => 0x932e, }, 0xe8 => { 0x40 => 0x9319, 0x41 => 0x9322, 0x42 => 0x931a, 0x43 => 0x9323, 0x44 => 0x933a, 0x45 => 0x9335, 0x46 => 0x933b, 0x47 => 0x935c, 0x48 => 0x9360, 0x49 => 0x937c, 0x4a => 0x936e, 0x4b => 0x9356, 0x4c => 0x93b0, 0x4d => 0x93ac, 0x4e => 0x93ad, 0x4f => 0x9394, 0x50 => 0x93b9, 0x51 => 0x93d6, 0x52 => 0x93d7, 0x53 => 0x93e8, 0x54 => 0x93e5, 0x55 => 0x93d8, 0x56 => 0x93c3, 0x57 => 0x93dd, 0x58 => 0x93d0, 0x59 => 0x93c8, 0x5a => 0x93e4, 0x5b => 0x941a, 0x5c => 0x9414, 0x5d => 0x9413, 0x5e => 0x9403, 0x5f => 0x9407, 0x60 => 0x9410, 0x61 => 0x9436, 0x62 => 0x942b, 0x63 => 0x9435, 0x64 => 0x9421, 0x65 => 0x943a, 0x66 => 0x9441, 0x67 => 0x9452, 0x68 => 0x9444, 0x69 => 0x945b, 0x6a => 0x9460, 0x6b => 0x9462, 0x6c => 0x945e, 0x6d => 0x946a, 0x6e => 0x9229, 0x6f => 0x9470, 0x70 => 0x9475, 0x71 => 0x9477, 0x72 => 0x947d, 0x73 => 0x945a, 0x74 => 0x947c, 0x75 => 0x947e, 0x76 => 0x9481, 0x77 => 0x947f, 0x78 => 0x9582, 0x79 => 0x9587, 0x7a => 0x958a, 0x7b => 0x9594, 0x7c => 0x9596, 0x7d => 0x9598, 0x7e => 0x9599, 0x80 => 0x95a0, 0x81 => 0x95a8, 0x82 => 0x95a7, 0x83 => 0x95ad, 0x84 => 0x95bc, 0x85 => 0x95bb, 0x86 => 0x95b9, 0x87 => 0x95be, 0x88 => 0x95ca, 0x89 => 0x6ff6, 0x8a => 0x95c3, 0x8b => 0x95cd, 0x8c => 0x95cc, 0x8d => 0x95d5, 0x8e => 0x95d4, 0x8f => 0x95d6, 0x90 => 0x95dc, 0x91 => 0x95e1, 0x92 => 0x95e5, 0x93 => 0x95e2, 0x94 => 0x9621, 0x95 => 0x9628, 0x96 => 0x962e, 0x97 => 0x962f, 0x98 => 0x9642, 0x99 => 0x964c, 0x9a => 0x964f, 0x9b => 0x964b, 0x9c => 0x9677, 0x9d => 0x965c, 0x9e => 0x965e, 0x9f => 0x965d, 0xa0 => 0x965f, 0xa1 => 0x9666, 0xa2 => 0x9672, 0xa3 => 0x966c, 0xa4 => 0x968d, 0xa5 => 0x9698, 0xa6 => 0x9695, 0xa7 => 0x9697, 0xa8 => 0x96aa, 0xa9 => 0x96a7, 0xaa => 0x96b1, 0xab => 0x96b2, 0xac => 0x96b0, 0xad => 0x96b4, 0xae => 0x96b6, 0xaf => 0x96b8, 0xb0 => 0x96b9, 0xb1 => 0x96ce, 0xb2 => 0x96cb, 0xb3 => 0x96c9, 0xb4 => 0x96cd, 0xb5 => 0x894d, 0xb6 => 0x96dc, 0xb7 => 0x970d, 0xb8 => 0x96d5, 0xb9 => 0x96f9, 0xba => 0x9704, 0xbb => 0x9706, 0xbc => 0x9708, 0xbd => 0x9713, 0xbe => 0x970e, 0xbf => 0x9711, 0xc0 => 0x970f, 0xc1 => 0x9716, 0xc2 => 0x9719, 0xc3 => 0x9724, 0xc4 => 0x972a, 0xc5 => 0x9730, 0xc6 => 0x9739, 0xc7 => 0x973d, 0xc8 => 0x973e, 0xc9 => 0x9744, 0xca => 0x9746, 0xcb => 0x9748, 0xcc => 0x9742, 0xcd => 0x9749, 0xce => 0x975c, 0xcf => 0x9760, 0xd0 => 0x9764, 0xd1 => 0x9766, 0xd2 => 0x9768, 0xd3 => 0x52d2, 0xd4 => 0x976b, 0xd5 => 0x9771, 0xd6 => 0x9779, 0xd7 => 0x9785, 0xd8 => 0x977c, 0xd9 => 0x9781, 0xda => 0x977a, 0xdb => 0x9786, 0xdc => 0x978b, 0xdd => 0x978f, 0xde => 0x9790, 0xdf => 0x979c, 0xe0 => 0x97a8, 0xe1 => 0x97a6, 0xe2 => 0x97a3, 0xe3 => 0x97b3, 0xe4 => 0x97b4, 0xe5 => 0x97c3, 0xe6 => 0x97c6, 0xe7 => 0x97c8, 0xe8 => 0x97cb, 0xe9 => 0x97dc, 0xea => 0x97ed, 0xeb => 0x9f4f, 0xec => 0x97f2, 0xed => 0x7adf, 0xee => 0x97f6, 0xef => 0x97f5, 0xf0 => 0x980f, 0xf1 => 0x980c, 0xf2 => 0x9838, 0xf3 => 0x9824, 0xf4 => 0x9821, 0xf5 => 0x9837, 0xf6 => 0x983d, 0xf7 => 0x9846, 0xf8 => 0x984f, 0xf9 => 0x984b, 0xfa => 0x986b, 0xfb => 0x986f, 0xfc => 0x9870, }, 0xe9 => { 0x40 => 0x9871, 0x41 => 0x9874, 0x42 => 0x9873, 0x43 => 0x98aa, 0x44 => 0x98af, 0x45 => 0x98b1, 0x46 => 0x98b6, 0x47 => 0x98c4, 0x48 => 0x98c3, 0x49 => 0x98c6, 0x4a => 0x98e9, 0x4b => 0x98eb, 0x4c => 0x9903, 0x4d => 0x9909, 0x4e => 0x9912, 0x4f => 0x9914, 0x50 => 0x9918, 0x51 => 0x9921, 0x52 => 0x991d, 0x53 => 0x991e, 0x54 => 0x9924, 0x55 => 0x9920, 0x56 => 0x992c, 0x57 => 0x992e, 0x58 => 0x993d, 0x59 => 0x993e, 0x5a => 0x9942, 0x5b => 0x9949, 0x5c => 0x9945, 0x5d => 0x9950, 0x5e => 0x994b, 0x5f => 0x9951, 0x60 => 0x9952, 0x61 => 0x994c, 0x62 => 0x9955, 0x63 => 0x9997, 0x64 => 0x9998, 0x65 => 0x99a5, 0x66 => 0x99ad, 0x67 => 0x99ae, 0x68 => 0x99bc, 0x69 => 0x99df, 0x6a => 0x99db, 0x6b => 0x99dd, 0x6c => 0x99d8, 0x6d => 0x99d1, 0x6e => 0x99ed, 0x6f => 0x99ee, 0x70 => 0x99f1, 0x71 => 0x99f2, 0x72 => 0x99fb, 0x73 => 0x99f8, 0x74 => 0x9a01, 0x75 => 0x9a0f, 0x76 => 0x9a05, 0x77 => 0x99e2, 0x78 => 0x9a19, 0x79 => 0x9a2b, 0x7a => 0x9a37, 0x7b => 0x9a45, 0x7c => 0x9a42, 0x7d => 0x9a40, 0x7e => 0x9a43, 0x80 => 0x9a3e, 0x81 => 0x9a55, 0x82 => 0x9a4d, 0x83 => 0x9a5b, 0x84 => 0x9a57, 0x85 => 0x9a5f, 0x86 => 0x9a62, 0x87 => 0x9a65, 0x88 => 0x9a64, 0x89 => 0x9a69, 0x8a => 0x9a6b, 0x8b => 0x9a6a, 0x8c => 0x9aad, 0x8d => 0x9ab0, 0x8e => 0x9abc, 0x8f => 0x9ac0, 0x90 => 0x9acf, 0x91 => 0x9ad1, 0x92 => 0x9ad3, 0x93 => 0x9ad4, 0x94 => 0x9ade, 0x95 => 0x9adf, 0x96 => 0x9ae2, 0x97 => 0x9ae3, 0x98 => 0x9ae6, 0x99 => 0x9aef, 0x9a => 0x9aeb, 0x9b => 0x9aee, 0x9c => 0x9af4, 0x9d => 0x9af1, 0x9e => 0x9af7, 0x9f => 0x9afb, 0xa0 => 0x9b06, 0xa1 => 0x9b18, 0xa2 => 0x9b1a, 0xa3 => 0x9b1f, 0xa4 => 0x9b22, 0xa5 => 0x9b23, 0xa6 => 0x9b25, 0xa7 => 0x9b27, 0xa8 => 0x9b28, 0xa9 => 0x9b29, 0xaa => 0x9b2a, 0xab => 0x9b2e, 0xac => 0x9b2f, 0xad => 0x9b32, 0xae => 0x9b44, 0xaf => 0x9b43, 0xb0 => 0x9b4f, 0xb1 => 0x9b4d, 0xb2 => 0x9b4e, 0xb3 => 0x9b51, 0xb4 => 0x9b58, 0xb5 => 0x9b74, 0xb6 => 0x9b93, 0xb7 => 0x9b83, 0xb8 => 0x9b91, 0xb9 => 0x9b96, 0xba => 0x9b97, 0xbb => 0x9b9f, 0xbc => 0x9ba0, 0xbd => 0x9ba8, 0xbe => 0x9bb4, 0xbf => 0x9bc0, 0xc0 => 0x9bca, 0xc1 => 0x9bb9, 0xc2 => 0x9bc6, 0xc3 => 0x9bcf, 0xc4 => 0x9bd1, 0xc5 => 0x9bd2, 0xc6 => 0x9be3, 0xc7 => 0x9be2, 0xc8 => 0x9be4, 0xc9 => 0x9bd4, 0xca => 0x9be1, 0xcb => 0x9c3a, 0xcc => 0x9bf2, 0xcd => 0x9bf1, 0xce => 0x9bf0, 0xcf => 0x9c15, 0xd0 => 0x9c14, 0xd1 => 0x9c09, 0xd2 => 0x9c13, 0xd3 => 0x9c0c, 0xd4 => 0x9c06, 0xd5 => 0x9c08, 0xd6 => 0x9c12, 0xd7 => 0x9c0a, 0xd8 => 0x9c04, 0xd9 => 0x9c2e, 0xda => 0x9c1b, 0xdb => 0x9c25, 0xdc => 0x9c24, 0xdd => 0x9c21, 0xde => 0x9c30, 0xdf => 0x9c47, 0xe0 => 0x9c32, 0xe1 => 0x9c46, 0xe2 => 0x9c3e, 0xe3 => 0x9c5a, 0xe4 => 0x9c60, 0xe5 => 0x9c67, 0xe6 => 0x9c76, 0xe7 => 0x9c78, 0xe8 => 0x9ce7, 0xe9 => 0x9cec, 0xea => 0x9cf0, 0xeb => 0x9d09, 0xec => 0x9d08, 0xed => 0x9ceb, 0xee => 0x9d03, 0xef => 0x9d06, 0xf0 => 0x9d2a, 0xf1 => 0x9d26, 0xf2 => 0x9daf, 0xf3 => 0x9d23, 0xf4 => 0x9d1f, 0xf5 => 0x9d44, 0xf6 => 0x9d15, 0xf7 => 0x9d12, 0xf8 => 0x9d41, 0xf9 => 0x9d3f, 0xfa => 0x9d3e, 0xfb => 0x9d46, 0xfc => 0x9d48, }, 0xea => { 0x40 => 0x9d5d, 0x41 => 0x9d5e, 0x42 => 0x9d64, 0x43 => 0x9d51, 0x44 => 0x9d50, 0x45 => 0x9d59, 0x46 => 0x9d72, 0x47 => 0x9d89, 0x48 => 0x9d87, 0x49 => 0x9dab, 0x4a => 0x9d6f, 0x4b => 0x9d7a, 0x4c => 0x9d9a, 0x4d => 0x9da4, 0x4e => 0x9da9, 0x4f => 0x9db2, 0x50 => 0x9dc4, 0x51 => 0x9dc1, 0x52 => 0x9dbb, 0x53 => 0x9db8, 0x54 => 0x9dba, 0x55 => 0x9dc6, 0x56 => 0x9dcf, 0x57 => 0x9dc2, 0x58 => 0x9dd9, 0x59 => 0x9dd3, 0x5a => 0x9df8, 0x5b => 0x9de6, 0x5c => 0x9ded, 0x5d => 0x9def, 0x5e => 0x9dfd, 0x5f => 0x9e1a, 0x60 => 0x9e1b, 0x61 => 0x9e1e, 0x62 => 0x9e75, 0x63 => 0x9e79, 0x64 => 0x9e7d, 0x65 => 0x9e81, 0x66 => 0x9e88, 0x67 => 0x9e8b, 0x68 => 0x9e8c, 0x69 => 0x9e92, 0x6a => 0x9e95, 0x6b => 0x9e91, 0x6c => 0x9e9d, 0x6d => 0x9ea5, 0x6e => 0x9ea9, 0x6f => 0x9eb8, 0x70 => 0x9eaa, 0x71 => 0x9ead, 0x72 => 0x9761, 0x73 => 0x9ecc, 0x74 => 0x9ece, 0x75 => 0x9ecf, 0x76 => 0x9ed0, 0x77 => 0x9ed4, 0x78 => 0x9edc, 0x79 => 0x9ede, 0x7a => 0x9edd, 0x7b => 0x9ee0, 0x7c => 0x9ee5, 0x7d => 0x9ee8, 0x7e => 0x9eef, 0x80 => 0x9ef4, 0x81 => 0x9ef6, 0x82 => 0x9ef7, 0x83 => 0x9ef9, 0x84 => 0x9efb, 0x85 => 0x9efc, 0x86 => 0x9efd, 0x87 => 0x9f07, 0x88 => 0x9f08, 0x89 => 0x76b7, 0x8a => 0x9f15, 0x8b => 0x9f21, 0x8c => 0x9f2c, 0x8d => 0x9f3e, 0x8e => 0x9f4a, 0x8f => 0x9f52, 0x90 => 0x9f54, 0x91 => 0x9f63, 0x92 => 0x9f5f, 0x93 => 0x9f60, 0x94 => 0x9f61, 0x95 => 0x9f66, 0x96 => 0x9f67, 0x97 => 0x9f6c, 0x98 => 0x9f6a, 0x99 => 0x9f77, 0x9a => 0x9f72, 0x9b => 0x9f76, 0x9c => 0x9f95, 0x9d => 0x9f9c, 0x9e => 0x9fa0, 0x9f => 0x582f, 0xa0 => 0x69c7, 0xa1 => 0x9059, 0xa2 => 0x7464, 0xa3 => 0x51dc, 0xa4 => 0x7199, }, 0xeb => { 0x41 => [0x3001,0xf87e], 0x42 => [0x3002,0xf87e], 0x50 => [0xffe3,0xf87e], 0x51 => 0xfe33, 0x5b => [0x30fc,0xf87e], 0x5c => 0xfe31, 0x5d => [0x2010,0xf87e], 0x60 => [0x301c,0xf87e], 0x61 => [0x2016,0xf87e], 0x62 => [0xff5c,0xf87e], 0x63 => [0x2026,0xf87e], 0x64 => 0xfe30, 0x69 => 0xfe35, 0x6a => 0xfe36, 0x6b => 0xfe39, 0x6c => 0xfe3a, 0x6d => [0xff3b,0xf87e], 0x6e => [0xff3d,0xf87e], 0x6f => 0xfe37, 0x70 => 0xfe38, 0x71 => 0xfe3f, 0x72 => 0xfe40, 0x73 => 0xfe3d, 0x74 => 0xfe3e, 0x75 => 0xfe41, 0x76 => 0xfe42, 0x77 => 0xfe43, 0x78 => 0xfe44, 0x79 => 0xfe3b, 0x7a => 0xfe3c, 0x81 => [0xff1d,0xf87e], }, 0xec => { 0x9f => [0x3041,0xf87e], 0xa1 => [0x3043,0xf87e], 0xa3 => [0x3045,0xf87e], 0xa5 => [0x3047,0xf87e], 0xa7 => [0x3049,0xf87e], 0xc1 => [0x3063,0xf87e], 0xe1 => [0x3083,0xf87e], 0xe3 => [0x3085,0xf87e], 0xe5 => [0x3087,0xf87e], 0xec => [0x308e,0xf87e], }, 0xed => { 0x40 => [0x30a1,0xf87e], 0x42 => [0x30a3,0xf87e], 0x44 => [0x30a5,0xf87e], 0x46 => [0x30a7,0xf87e], 0x48 => [0x30a9,0xf87e], 0x62 => [0x30c3,0xf87e], 0x83 => [0x30e3,0xf87e], 0x85 => [0x30e5,0xf87e], 0x87 => [0x30e7,0xf87e], 0x8e => [0x30ee,0xf87e], 0x95 => [0x30f5,0xf87e], 0x96 => [0x30f6,0xf87e], }, ); 1; # end ���������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacKorean.pm����������������������������������������000644 �000765 �000024 �00000517633 11417362674 023525� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacKorean.pm # # Description: Mac Korean to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/KOREAN.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacKorean = ( 0x80 => 0xa0, 0x81 => 0x20a9, 0x82 => [0x2013,0xf87f], 0x83 => 0xa9, 0x84 => [0xff3f,0xf87f], 0xff => [0x2026,0xf87f], 0xa1 => { 0x41 => [0x300c,0xf87f], 0x42 => [0x300d,0xf87f], 0x43 => [0x300c,0xf87b], 0x44 => [0x300d,0xf87b], 0x45 => [0x300c,0xf87c], 0x46 => [0x300d,0xf87c], 0x47 => [0x300e,0xf87c], 0x48 => [0x300f,0xf87c], 0x49 => [0x300a,0xf878], 0x4a => [0x300b,0xf878], 0x4b => [0x3008,0xf878], 0x4c => [0x3009,0xf878], 0x4d => 0xfe59, 0x4e => 0xfe5a, 0x4f => [0xfe59,0xf87f], 0x50 => [0xfe5a,0xf87f], 0x51 => [0x2985,0xf87f], 0x52 => [0x2986,0xf87f], 0x53 => [0x2985,0xf879], 0x54 => [0x2986,0xf879], 0x55 => [0x2985,0xf87c], 0x56 => [0x2986,0xf87c], 0x57 => [0x28,0xf87c], 0x58 => [0x29,0xf87c], 0x59 => 0x2985, 0x5a => 0x2986, 0x5b => [0x3010,0xf87f], 0x5c => [0x3011,0xf87f], 0x5d => 0x3016, 0x5e => 0x3017, 0x5f => 0x3018, 0x60 => 0x3019, 0x61 => [0x5b,0xf87b], 0x62 => [0x5d,0xf87b], 0x63 => [0x5b,0xf87c], 0x64 => [0x5d,0xf87c], 0x65 => [0x2985,0xf87b], 0x66 => [0x2986,0xf87b], 0x67 => [0x2020,0xf87f], 0x68 => [0x2021,0xf87f], 0x69 => [0x2020,0xf87b], 0x6a => [0x2021,0xf87c], 0x6b => [0x2020,0xf877], 0x6c => [0x2a,0xf877], 0x6d => 0x2051, 0x6e => 0xf840, 0x6f => 0x201f, 0x70 => 0x201b, 0x71 => 0x207a, 0x72 => 0x207b, 0x73 => [0xd7,0xf877], 0x74 => [0x221e,0xf877], 0x75 => [0x223d,0xf877], 0x76 => [0xb1,0xf877], 0x77 => [0x2213,0xf877], 0x78 => [0x3e,0xf877], 0x79 => [0x3c,0xf877], 0x7a => 0x207c, 0x7b => [0x2260,0xf877], 0x7c => 0x207d, 0x7d => 0x207e, 0x81 => [0x7b,0xf877], 0x82 => [0x7d,0xf877], 0x83 => [0x5b,0xf877], 0x84 => [0x5d,0xf877], 0x85 => [0x2229,0xf877], 0x86 => [0x222a,0xf877], 0x87 => [0x2282,0xf877], 0x88 => [0x2208,0xf877], 0x89 => [0x2211,0xf877], 0x8a => [0x21,0xf877], 0x8b => [0x3007,0xf876], 0x8c => [0x4e00,0xf876], 0x8d => [0x4e8c,0xf876], 0x8e => [0x4e09,0xf876], 0x8f => [0x56db,0xf876], 0x90 => [0x4e94,0xf876], 0x91 => [0x516d,0xf876], 0x92 => [0x4e03,0xf876], 0x93 => [0x516b,0xf876], 0x94 => [0x4e5d,0xf876], 0x95 => [0x5341,0xf876], 0x96 => 0x204c, 0x97 => 0x204d, 0x98 => 0x02bc, 0x99 => 0x2997, 0x9a => 0x2998, 0x9c => [0xff0a,0xf874], 0x9d => [0x2051,0xf87c], 0x9e => [0xff0a,0xf875], 0x9f => [0xff0a,0xf871], 0xa0 => [0x2051,0xf879], 0xa1 => 0x3000, 0xa2 => 0x3001, 0xa3 => 0x3002, 0xa4 => 0xb7, 0xa5 => 0x2025, 0xa6 => 0x2026, 0xa7 => 0xa8, 0xa8 => 0x3003, 0xa9 => 0x2013, 0xaa => 0x2014, 0xab => 0x2016, 0xac => 0xff3c, 0xad => 0x301c, 0xae => 0x2018, 0xaf => 0x2019, 0xb0 => 0x201c, 0xb1 => 0x201d, 0xb2 => 0x3014, 0xb3 => 0x3015, 0xb4 => 0x3008, 0xb5 => 0x3009, 0xb6 => 0x300a, 0xb7 => 0x300b, 0xb8 => 0x300c, 0xb9 => 0x300d, 0xba => 0x300e, 0xbb => 0x300f, 0xbc => 0x3010, 0xbd => 0x3011, 0xbe => 0xb1, 0xbf => 0xd7, 0xc0 => 0xf7, 0xc1 => 0x2260, 0xc2 => 0x2264, 0xc3 => 0x2265, 0xc4 => 0x221e, 0xc5 => 0x2234, 0xc6 => 0xb0, 0xc7 => 0x2032, 0xc8 => 0x2033, 0xc9 => 0x2103, 0xca => 0x212b, 0xcb => 0xa2, 0xcc => 0xa3, 0xcd => 0xa5, 0xce => 0x2642, 0xcf => 0x2640, 0xd0 => 0x2220, 0xd1 => 0x22a5, 0xd2 => 0x2312, 0xd3 => 0x2202, 0xd4 => 0x2207, 0xd5 => 0x2261, 0xd6 => 0x2252, 0xd7 => 0xa7, 0xd8 => 0x203b, 0xd9 => 0x2606, 0xda => 0x2605, 0xdb => 0x25cb, 0xdc => 0x25cf, 0xdd => 0x25ce, 0xde => 0x25c7, 0xdf => 0x25c6, 0xe0 => 0x25a1, 0xe1 => 0x25a0, 0xe2 => 0x25b3, 0xe3 => 0x25b2, 0xe4 => 0x25bd, 0xe5 => 0x25bc, 0xe6 => 0x2192, 0xe7 => 0x2190, 0xe8 => 0x2191, 0xe9 => 0x2193, 0xea => 0x2194, 0xeb => 0x3013, 0xec => 0x226a, 0xed => 0x226b, 0xee => 0x221a, 0xef => 0x223d, 0xf0 => 0x221d, 0xf1 => 0x2235, 0xf2 => 0x222b, 0xf3 => 0x222c, 0xf4 => 0x2208, 0xf5 => 0x220b, 0xf6 => 0x2286, 0xf7 => 0x2287, 0xf8 => 0x2282, 0xf9 => 0x2283, 0xfa => 0x222a, 0xfb => 0x2229, 0xfc => 0x2227, 0xfd => 0x2228, 0xfe => 0xac, }, 0xa2 => { 0x41 => [0x2985,0xf878], 0x42 => [0x2986,0xf878], 0x43 => [0x2985,0xf873], 0x44 => [0x2986,0xf873], 0x45 => [0xfe59,0xf87c], 0x46 => [0xfe5a,0xf87c], 0x47 => [0x3016,0xf878], 0x48 => [0x3017,0xf878], 0x49 => [0x3010,0xf878], 0x4a => [0x3011,0xf878], 0x4b => [0x28,0xf87f], 0x4c => [0x29,0xf87f], 0xa1 => 0x21d2, 0xa2 => 0x21d4, 0xa3 => 0x2200, 0xa4 => 0x2203, 0xa5 => 0xb4, 0xa6 => 0x02dc, 0xa7 => 0x02c7, 0xa8 => 0x02d8, 0xa9 => 0x02dd, 0xaa => 0x02da, 0xab => 0x02d9, 0xac => 0xb8, 0xad => 0x02db, 0xae => 0xa1, 0xaf => 0xbf, 0xb0 => 0x02d0, 0xb1 => 0x222e, 0xb2 => 0x2211, 0xb3 => 0x220f, 0xb4 => 0xa4, 0xb5 => 0x2109, 0xb6 => 0x2030, 0xb7 => 0x25c1, 0xb8 => 0x25c0, 0xb9 => 0x25b7, 0xba => 0x25b6, 0xbb => 0x2664, 0xbc => 0x2660, 0xbd => 0x2661, 0xbe => 0x2665, 0xbf => 0x2667, 0xc0 => 0x2663, 0xc1 => 0x25c9, 0xc2 => 0x25c8, 0xc3 => 0x25a3, 0xc4 => 0x25d0, 0xc5 => 0x25d1, 0xc6 => 0x2592, 0xc7 => 0x25a4, 0xc8 => 0x25a5, 0xc9 => 0x25a8, 0xca => 0x25a7, 0xcb => 0x25a6, 0xcc => 0x25a9, 0xcd => 0x2668, 0xce => 0x260f, 0xcf => 0x260e, 0xd0 => 0x261c, 0xd1 => 0x261e, 0xd2 => 0xb6, 0xd3 => 0x2020, 0xd4 => 0x2021, 0xd5 => 0x2195, 0xd6 => 0x2197, 0xd7 => 0x2199, 0xd8 => 0x2196, 0xd9 => 0x2198, 0xda => 0x266d, 0xdb => 0x2669, 0xdc => 0x266a, 0xdd => 0x266c, 0xde => 0x327f, 0xdf => 0x321c, 0xe0 => 0x2116, 0xe1 => 0x33c7, 0xe2 => 0x2122, 0xe3 => 0x33c2, 0xe4 => 0x33d8, 0xe5 => 0x2121, 0xe6 => [0x31,0x20de,0xf87c], 0xe7 => [0x32,0x20de,0xf87c], 0xe8 => [0x33,0x20de,0xf87c], 0xe9 => [0x34,0x20de,0xf87c], 0xea => [0x35,0x20de,0xf87c], 0xeb => [0x36,0x20de,0xf87c], 0xec => [0x37,0x20de,0xf87c], 0xed => [0x38,0x20de,0xf87c], 0xee => [0x39,0x20de,0xf87c], 0xef => [0xf863,0x5b,0x31,0x30,0x5d], 0xf0 => [0xf863,0x5b,0x31,0x31,0x5d], 0xf1 => [0xf863,0x5b,0x31,0x32,0x5d], 0xf2 => [0xf863,0x5b,0x31,0x33,0x5d], 0xf3 => [0xf863,0x5b,0x31,0x34,0x5d], 0xf4 => [0xf863,0x5b,0x31,0x35,0x5d], 0xf5 => [0xf863,0x5b,0x31,0x36,0x5d], 0xf6 => [0xf863,0x5b,0x31,0x37,0x5d], 0xf7 => [0xf863,0x5b,0x31,0x38,0x5d], 0xf8 => [0xf863,0x5b,0x31,0x39,0x5d], 0xf9 => [0xf863,0x5b,0x32,0x30,0x5d], 0xfa => [0xb6,0xf87f], 0xfb => [0x2016,0xf87b], 0xfc => [0x2016,0xf87c], 0xfd => 0x22ee, 0xfe => 0x2237, }, 0xa3 => { 0x41 => [0x31,0x20de,0xf87b], 0x42 => [0x32,0x20de,0xf87b], 0x43 => [0x33,0x20de,0xf87b], 0x44 => [0x34,0x20de,0xf87b], 0x45 => [0x35,0x20de,0xf87b], 0x46 => [0x36,0x20de,0xf87b], 0x47 => [0x37,0x20de,0xf87b], 0x48 => [0x38,0x20de,0xf87b], 0x49 => [0x39,0x20de,0xf87b], 0x4a => [0xf864,0x5b,0x31,0x30,0x5d], 0x4b => [0xf864,0x5b,0x31,0x31,0x5d], 0x4c => [0xf864,0x5b,0x31,0x32,0x5d], 0x4d => [0xf864,0x5b,0x31,0x33,0x5d], 0x4e => [0xf864,0x5b,0x31,0x34,0x5d], 0x4f => [0xf864,0x5b,0x31,0x35,0x5d], 0x50 => [0xf864,0x5b,0x31,0x36,0x5d], 0x51 => [0xf864,0x5b,0x31,0x37,0x5d], 0x52 => [0xf864,0x5b,0x31,0x38,0x5d], 0x53 => [0xf864,0x5b,0x31,0x39,0x5d], 0x54 => [0xf864,0x5b,0x32,0x30,0x5d], 0x55 => 0x278a, 0x56 => 0x278b, 0x57 => 0x278c, 0x58 => 0x278d, 0x59 => 0x278e, 0x5a => 0x278f, 0x5b => 0x2790, 0x5c => 0x2791, 0x5d => 0x2792, 0x5e => 0x2793, 0x5f => [0x24eb,0xf87f], 0x60 => [0x24ec,0xf87f], 0x61 => [0x24ed,0xf87f], 0x62 => [0x24ee,0xf87f], 0x63 => [0x24ef,0xf87f], 0x64 => [0x24f0,0xf87f], 0x65 => [0x24f1,0xf87f], 0x66 => [0x24f2,0xf87f], 0x67 => [0x24f3,0xf87f], 0x68 => [0x24f4,0xf87f], 0x69 => [0xf861,0x28,0x41,0x29], 0x6a => [0xf861,0x28,0x42,0x29], 0x6b => [0xf861,0x28,0x43,0x29], 0x6c => [0xf861,0x28,0x44,0x29], 0x6d => [0xf861,0x28,0x45,0x29], 0x6e => [0xf861,0x28,0x46,0x29], 0x6f => [0xf861,0x28,0x47,0x29], 0x70 => [0xf861,0x28,0x48,0x29], 0x71 => [0xf861,0x28,0x49,0x29], 0x72 => [0xf861,0x28,0x4a,0x29], 0x73 => [0xf861,0x28,0x4b,0x29], 0x74 => [0xf861,0x28,0x4c,0x29], 0x75 => [0xf861,0x28,0x4d,0x29], 0x76 => [0xf861,0x28,0x4e,0x29], 0x77 => [0xf861,0x28,0x4f,0x29], 0x78 => [0xf861,0x28,0x50,0x29], 0x79 => [0xf861,0x28,0x51,0x29], 0x7a => [0xf861,0x28,0x52,0x29], 0x7b => [0xf861,0x28,0x53,0x29], 0x7c => [0xf861,0x28,0x54,0x29], 0x7d => [0xf861,0x28,0x55,0x29], 0x81 => [0xf861,0x28,0x56,0x29], 0x82 => [0xf861,0x28,0x57,0x29], 0x83 => [0xf861,0x28,0x58,0x29], 0x84 => [0xf861,0x28,0x59,0x29], 0x85 => [0xf861,0x28,0x5a,0x29], 0x86 => 0x24b6, 0x87 => 0x24b7, 0x88 => 0x24b8, 0x89 => 0x24b9, 0x8a => 0x24ba, 0x8b => 0x24bb, 0x8c => 0x24bc, 0x8d => 0x24bd, 0x8e => 0x24be, 0x8f => 0x24bf, 0x90 => 0x24c0, 0x91 => 0x24c1, 0x92 => 0x24c2, 0x93 => 0x24c3, 0x94 => 0x24c4, 0x95 => 0x24c5, 0x96 => 0x24c6, 0x97 => 0x24c7, 0x98 => 0x24c8, 0x99 => 0x24c9, 0x9a => 0x24ca, 0x9b => 0x24cb, 0x9c => 0x24cc, 0x9d => 0x24cd, 0x9e => 0x24ce, 0x9f => 0x24cf, 0xa1 => 0xff01, 0xa2 => 0xff02, 0xa3 => 0xff03, 0xa4 => 0xff04, 0xa5 => 0xff05, 0xa6 => 0xff06, 0xa7 => 0xff07, 0xa8 => 0xff08, 0xa9 => 0xff09, 0xaa => 0xff0a, 0xab => 0xff0b, 0xac => 0xff0c, 0xad => 0xff0d, 0xae => 0xff0e, 0xaf => 0xff0f, 0xb0 => 0xff10, 0xb1 => 0xff11, 0xb2 => 0xff12, 0xb3 => 0xff13, 0xb4 => 0xff14, 0xb5 => 0xff15, 0xb6 => 0xff16, 0xb7 => 0xff17, 0xb8 => 0xff18, 0xb9 => 0xff19, 0xba => 0xff1a, 0xbb => 0xff1b, 0xbc => 0xff1c, 0xbd => 0xff1d, 0xbe => 0xff1e, 0xbf => 0xff1f, 0xc0 => 0xff20, 0xc1 => 0xff21, 0xc2 => 0xff22, 0xc3 => 0xff23, 0xc4 => 0xff24, 0xc5 => 0xff25, 0xc6 => 0xff26, 0xc7 => 0xff27, 0xc8 => 0xff28, 0xc9 => 0xff29, 0xca => 0xff2a, 0xcb => 0xff2b, 0xcc => 0xff2c, 0xcd => 0xff2d, 0xce => 0xff2e, 0xcf => 0xff2f, 0xd0 => 0xff30, 0xd1 => 0xff31, 0xd2 => 0xff32, 0xd3 => 0xff33, 0xd4 => 0xff34, 0xd5 => 0xff35, 0xd6 => 0xff36, 0xd7 => 0xff37, 0xd8 => 0xff38, 0xd9 => 0xff39, 0xda => 0xff3a, 0xdb => 0xff3b, 0xdc => 0xffe6, 0xdd => 0xff3d, 0xde => 0xff3e, 0xdf => 0xff3f, 0xe0 => 0xff40, 0xe1 => 0xff41, 0xe2 => 0xff42, 0xe3 => 0xff43, 0xe4 => 0xff44, 0xe5 => 0xff45, 0xe6 => 0xff46, 0xe7 => 0xff47, 0xe8 => 0xff48, 0xe9 => 0xff49, 0xea => 0xff4a, 0xeb => 0xff4b, 0xec => 0xff4c, 0xed => 0xff4d, 0xee => 0xff4e, 0xef => 0xff4f, 0xf0 => 0xff50, 0xf1 => 0xff51, 0xf2 => 0xff52, 0xf3 => 0xff53, 0xf4 => 0xff54, 0xf5 => 0xff55, 0xf6 => 0xff56, 0xf7 => 0xff57, 0xf8 => 0xff58, 0xf9 => 0xff59, 0xfa => 0xff5a, 0xfb => 0xff5b, 0xfc => 0xff5c, 0xfd => 0xff5d, 0xfe => 0x203e, }, 0xa4 => { 0x41 => [0x31,0x20de,0xf87f], 0x42 => [0x32,0x20de,0xf87f], 0x43 => [0x33,0x20de,0xf87f], 0x44 => [0x34,0x20de,0xf87f], 0x45 => [0x35,0x20de,0xf87f], 0x46 => [0x36,0x20de,0xf87f], 0x47 => [0x37,0x20de,0xf87f], 0x48 => [0x38,0x20de,0xf87f], 0x49 => [0x39,0x20de,0xf87f], 0x4a => [0xf862,0x5b,0x31,0x30,0x5d], 0x4b => [0xf862,0x5b,0x31,0x31,0x5d], 0x4c => [0xf862,0x5b,0x31,0x32,0x5d], 0x4d => [0xf862,0x5b,0x31,0x33,0x5d], 0x4e => [0xf862,0x5b,0x31,0x34,0x5d], 0x4f => [0xf862,0x5b,0x31,0x35,0x5d], 0x50 => [0xf862,0x5b,0x31,0x36,0x5d], 0x51 => [0xf862,0x5b,0x31,0x37,0x5d], 0x52 => [0xf862,0x5b,0x31,0x38,0x5d], 0x53 => [0xf862,0x5b,0x31,0x39,0x5d], 0x54 => [0xf862,0x5b,0x32,0x30,0x5d], 0x55 => [0x31,0x20de,0xf87a], 0x56 => [0x32,0x20de,0xf87a], 0x57 => [0x33,0x20de,0xf87a], 0x58 => [0x34,0x20de,0xf87a], 0x59 => [0x35,0x20de,0xf87a], 0x5a => [0x36,0x20de,0xf87a], 0x5b => [0x37,0x20de,0xf87a], 0x5c => [0x38,0x20de,0xf87a], 0x5d => [0x39,0x20de,0xf87a], 0x5e => [0xf865,0x5b,0x31,0x30,0x5d], 0x5f => [0xf865,0x5b,0x31,0x31,0x5d], 0x60 => [0xf865,0x5b,0x31,0x32,0x5d], 0x61 => [0xf865,0x5b,0x31,0x33,0x5d], 0x62 => [0xf865,0x5b,0x31,0x34,0x5d], 0x63 => [0xf865,0x5b,0x31,0x35,0x5d], 0x64 => [0xf865,0x5b,0x31,0x36,0x5d], 0x65 => [0xf865,0x5b,0x31,0x37,0x5d], 0x66 => [0xf865,0x5b,0x31,0x38,0x5d], 0x67 => [0xf865,0x5b,0x31,0x39,0x5d], 0x68 => [0xf865,0x5b,0x32,0x30,0x5d], 0x69 => [0x278a,0xf87f], 0x6a => [0x278b,0xf87f], 0x6b => [0x278c,0xf87f], 0x6c => [0x278d,0xf87f], 0x6d => [0x278e,0xf87f], 0x6e => [0x278f,0xf87f], 0x6f => [0x2790,0xf87f], 0x70 => [0x2791,0xf87f], 0x71 => [0x2792,0xf87f], 0x72 => [0x2793,0xf87f], 0x73 => [0x24eb,0xf878], 0x74 => [0x24ec,0xf878], 0x75 => [0x24ed,0xf878], 0x76 => [0x24ee,0xf878], 0x77 => [0x24ef,0xf878], 0x78 => [0x24f0,0xf878], 0x79 => [0x24f1,0xf878], 0x7a => [0x24f2,0xf878], 0x7b => [0x24f3,0xf878], 0x7c => [0x24f4,0xf878], 0x7d => 0x2a26, 0x81 => 0x227a, 0x82 => 0x227b, 0x83 => 0x22ce, 0x84 => 0x22cf, 0x85 => 0x2280, 0x86 => 0x2281, 0x87 => 0x2270, 0x88 => 0x2271, 0x89 => 0x2272, 0x8a => 0x2273, 0x8b => 0x2ac5, 0x8c => 0x2acb, 0x8d => 0x2ac6, 0x8e => 0x2acc, 0x8f => 0x2276, 0x90 => 0x2277, 0x91 => 0x2279, 0x92 => 0x22da, 0x93 => 0x22db, 0x94 => 0x2a8b, 0x95 => 0x2a8c, 0x96 => 0x2a91, 0x97 => 0x2a92, 0x98 => [0x2222,0xf87f], 0x99 => 0x2245, 0x9a => 0x2243, 0x9b => 0x2248, 0x9c => 0x29a3, 0x9d => 0x22a4, 0x9e => [0x2225,0x0347], 0x9f => [0x2afd,0x0347], 0xa1 => 0x3131, 0xa2 => 0x3132, 0xa3 => 0x3133, 0xa4 => 0x3134, 0xa5 => 0x3135, 0xa6 => 0x3136, 0xa7 => 0x3137, 0xa8 => 0x3138, 0xa9 => 0x3139, 0xaa => 0x313a, 0xab => 0x313b, 0xac => 0x313c, 0xad => 0x313d, 0xae => 0x313e, 0xaf => 0x313f, 0xb0 => 0x3140, 0xb1 => 0x3141, 0xb2 => 0x3142, 0xb3 => 0x3143, 0xb4 => 0x3144, 0xb5 => 0x3145, 0xb6 => 0x3146, 0xb7 => 0x3147, 0xb8 => 0x3148, 0xb9 => 0x3149, 0xba => 0x314a, 0xbb => 0x314b, 0xbc => 0x314c, 0xbd => 0x314d, 0xbe => 0x314e, 0xbf => 0x314f, 0xc0 => 0x3150, 0xc1 => 0x3151, 0xc2 => 0x3152, 0xc3 => 0x3153, 0xc4 => 0x3154, 0xc5 => 0x3155, 0xc6 => 0x3156, 0xc7 => 0x3157, 0xc8 => 0x3158, 0xc9 => 0x3159, 0xca => 0x315a, 0xcb => 0x315b, 0xcc => 0x315c, 0xcd => 0x315d, 0xce => 0x315e, 0xcf => 0x315f, 0xd0 => 0x3160, 0xd1 => 0x3161, 0xd2 => 0x3162, 0xd3 => 0x3163, 0xd4 => 0x3164, 0xd5 => 0x3165, 0xd6 => 0x3166, 0xd7 => 0x3167, 0xd8 => 0x3168, 0xd9 => 0x3169, 0xda => 0x316a, 0xdb => 0x316b, 0xdc => 0x316c, 0xdd => 0x316d, 0xde => 0x316e, 0xdf => 0x316f, 0xe0 => 0x3170, 0xe1 => 0x3171, 0xe2 => 0x3172, 0xe3 => 0x3173, 0xe4 => 0x3174, 0xe5 => 0x3175, 0xe6 => 0x3176, 0xe7 => 0x3177, 0xe8 => 0x3178, 0xe9 => 0x3179, 0xea => 0x317a, 0xeb => 0x317b, 0xec => 0x317c, 0xed => 0x317d, 0xee => 0x317e, 0xef => 0x317f, 0xf0 => 0x3180, 0xf1 => 0x3181, 0xf2 => 0x3182, 0xf3 => 0x3183, 0xf4 => 0x3184, 0xf5 => 0x3185, 0xf6 => 0x3186, 0xf7 => 0x3187, 0xf8 => 0x3188, 0xf9 => 0x3189, 0xfa => 0x318a, 0xfb => 0x318b, 0xfc => 0x318c, 0xfd => 0x318d, 0xfe => 0x318e, }, 0xa5 => { 0x41 => [0x30,0x20de], 0x42 => [0x31,0x20de], 0x43 => [0x32,0x20de], 0x44 => [0x33,0x20de], 0x45 => [0x34,0x20de], 0x46 => [0x35,0x20de], 0x47 => [0x36,0x20de], 0x48 => [0x37,0x20de], 0x49 => [0x38,0x20de], 0x4a => [0x39,0x20de], 0x4b => [0x24ea,0xf87f], 0x4c => [0x2460,0xf87f], 0x4d => [0x2461,0xf87f], 0x4e => [0x2462,0xf87f], 0x4f => [0x2463,0xf87f], 0x50 => [0x2464,0xf87f], 0x51 => [0x2465,0xf87f], 0x52 => [0x2466,0xf87f], 0x53 => [0x2467,0xf87f], 0x54 => [0x2468,0xf87f], 0x55 => [0xf860,0x41,0x29], 0x56 => [0xf860,0x42,0x29], 0x57 => [0xf860,0x43,0x29], 0x58 => [0xf860,0x44,0x29], 0x59 => [0xf860,0x45,0x29], 0x5a => [0xf860,0x46,0x29], 0x5b => [0xf860,0x47,0x29], 0x5c => [0xf860,0x48,0x29], 0x5d => [0xf860,0x49,0x29], 0x5e => [0xf860,0x4a,0x29], 0x5f => [0xf860,0x4b,0x29], 0x60 => [0xf860,0x4c,0x29], 0x61 => [0xf860,0x4d,0x29], 0x62 => [0xf860,0x4e,0x29], 0x63 => [0xf860,0x4f,0x29], 0x64 => [0xf860,0x50,0x29], 0x65 => [0xf860,0x51,0x29], 0x66 => [0xf860,0x52,0x29], 0x67 => [0xf860,0x53,0x29], 0x68 => [0xf860,0x54,0x29], 0x69 => [0xf860,0x55,0x29], 0x6a => [0xf860,0x56,0x29], 0x6b => [0xf860,0x57,0x29], 0x6c => [0xf860,0x58,0x29], 0x6d => [0xf860,0x59,0x29], 0x6e => [0xf860,0x5a,0x29], 0x6f => [0xf860,0x61,0x29], 0x70 => [0xf860,0x62,0x29], 0x71 => [0xf860,0x63,0x29], 0x72 => [0xf860,0x64,0x29], 0x73 => [0xf860,0x65,0x29], 0x74 => [0xf860,0x66,0x29], 0x75 => [0xf860,0x67,0x29], 0x76 => [0xf860,0x68,0x29], 0x77 => [0xf860,0x69,0x29], 0x78 => [0xf860,0x6a,0x29], 0x79 => [0xf860,0x6b,0x29], 0x7a => [0xf860,0x6c,0x29], 0x7b => [0xf860,0x6d,0x29], 0x7c => [0xf860,0x6e,0x29], 0x7d => [0xf860,0x6f,0x29], 0x81 => [0xf860,0x70,0x29], 0x82 => [0xf860,0x71,0x29], 0x83 => [0xf860,0x72,0x29], 0x84 => [0xf860,0x73,0x29], 0x85 => [0xf860,0x74,0x29], 0x86 => [0xf860,0x75,0x29], 0x87 => [0xf860,0x76,0x29], 0x88 => [0xf860,0x77,0x29], 0x89 => [0xf860,0x78,0x29], 0x8a => [0xf860,0x79,0x29], 0x8b => [0xf860,0x7a,0x29], 0xa1 => 0x2170, 0xa2 => 0x2171, 0xa3 => 0x2172, 0xa4 => 0x2173, 0xa5 => 0x2174, 0xa6 => 0x2175, 0xa7 => 0x2176, 0xa8 => 0x2177, 0xa9 => 0x2178, 0xaa => 0x2179, 0xb0 => 0x2160, 0xb1 => 0x2161, 0xb2 => 0x2162, 0xb3 => 0x2163, 0xb4 => 0x2164, 0xb5 => 0x2165, 0xb6 => 0x2166, 0xb7 => 0x2167, 0xb8 => 0x2168, 0xb9 => 0x2169, 0xc1 => 0x0391, 0xc2 => 0x0392, 0xc3 => 0x0393, 0xc4 => 0x0394, 0xc5 => 0x0395, 0xc6 => 0x0396, 0xc7 => 0x0397, 0xc8 => 0x0398, 0xc9 => 0x0399, 0xca => 0x039a, 0xcb => 0x039b, 0xcc => 0x039c, 0xcd => 0x039d, 0xce => 0x039e, 0xcf => 0x039f, 0xd0 => 0x03a0, 0xd1 => 0x03a1, 0xd2 => 0x03a3, 0xd3 => 0x03a4, 0xd4 => 0x03a5, 0xd5 => 0x03a6, 0xd6 => 0x03a7, 0xd7 => 0x03a8, 0xd8 => 0x03a9, 0xda => [0xff01,0xf874], 0xdb => [0x3002,0xf87d], 0xdc => [0x2032,0xf87f], 0xdd => [0x2033,0xf87f], 0xde => 0x2034, 0xe1 => 0x03b1, 0xe2 => 0x03b2, 0xe3 => 0x03b3, 0xe4 => 0x03b4, 0xe5 => 0x03b5, 0xe6 => 0x03b6, 0xe7 => 0x03b7, 0xe8 => 0x03b8, 0xe9 => 0x03b9, 0xea => 0x03ba, 0xeb => 0x03bb, 0xec => 0x03bc, 0xed => 0x03bd, 0xee => 0x03be, 0xef => 0x03bf, 0xf0 => 0x03c0, 0xf1 => 0x03c1, 0xf2 => 0x03c3, 0xf3 => 0x03c4, 0xf4 => 0x03c5, 0xf5 => 0x03c6, 0xf6 => 0x03c7, 0xf7 => 0x03c8, 0xf8 => 0x03c9, 0xf9 => [0x3257,0xf87a], 0xfa => [0x3258,0xf87a], 0xfb => [0x3259,0xf87a], 0xfc => [0x325a,0xf87a], }, 0xa6 => { 0x41 => [0xf83d,0xf87f], 0x42 => 0xf83d, 0x43 => [0x2020,0xf87c], 0x44 => [0xf860,0x2020,0x2020], 0x45 => [0xf860,0x2021,0x2021], 0x46 => [0xf861,0x2020,0x2020,0x2020], 0x47 => [0xa7,0xf87c], 0x48 => 0x266f, 0x49 => [0xff0a,0xf87f], 0x4a => [0xff0a,0xf873], 0x4b => [0x2051,0xf874], 0x4c => [0xf860,0x2a,0x2a], 0x4d => 0x2042, 0x4e => 0x204e, 0x4f => [0x2051,0xf871], 0x50 => [0xf867,0x2a,0x2a], 0x51 => [0x2042,0xf879], 0x52 => 0x273d, 0x53 => 0x2731, 0x54 => 0x2747, 0x55 => 0x2022, 0x56 => [0x25a0,0x20df], 0x57 => [0x25c7,0x20df], 0x58 => 0xf805, 0x59 => [0x25a1,0x20df], 0x5a => 0x2039, 0x5b => 0x203a, 0x5c => 0xab, 0x5d => 0xbb, 0x5e => [0x261c,0xf87f], 0x5f => [0x261e,0xf87f], 0x60 => [0xf806,0x20df], 0x61 => [0x25c7,0x20df,0x20df], 0x62 => [0x25c7,0x20de], 0x63 => 0xf806, 0x64 => 0x29c8, 0x65 => [0x25c6,0x20de], 0x66 => [0xf805,0x20de], 0x67 => [0x29c8,0x20de], 0x68 => 0x29be, 0x69 => [0x25ce,0x20dd], 0x6a => [0x25b3,0x20dd], 0x6b => [0x25b2,0x20dd], 0x6c => 0x271a, 0x6d => 0x2716, 0x6e => 0x29bf, 0x6f => 0x25ef, 0x70 => [0x25ef,0xf87c], 0x71 => [0x2610,0xf87c], 0x72 => 0x2723, 0x73 => 0x2756, 0x74 => 0xf80a, 0x75 => 0x25cc, 0x76 => [0x2610,0xf87f], 0x77 => 0x2610, 0x78 => 0x25a2, 0x79 => [0x2723,0xf87a], 0x7a => [0x2756,0xf87a], 0x7b => [0x273f,0xf87a], 0x7c => 0x273f, 0x7d => [0x3013,0xf87c], 0x81 => 0xf809, 0x82 => [0x25c9,0x20dd], 0x83 => 0x274d, 0x84 => 0x25cd, 0x85 => [0x27e1,0x20dd], 0x86 => [0xf80b,0xf87f], 0x87 => [0x2720,0xf87a], 0x88 => 0x2720, 0x89 => [0x25c8,0xf87f], 0x8a => [0x25a8,0xf87f], 0x8d => 0x2741, 0x8e => [0x2756,0xf87f], 0x8f => 0xf808, 0x90 => [0x20a9,0xf87f], 0x91 => [0xf809,0xf87a], 0x92 => [0x534d,0xf87f], 0x93 => 0x262f, 0x96 => 0xf80b, 0x97 => [0x262f,0xf87a], 0x98 => [0x262f,0xf876], 0x99 => 0x2740, 0x9a => 0xf80c, 0x9b => [0x2748,0x20d8], 0x9e => 0x3020, 0x9f => 0xf807, 0xa1 => 0x2500, 0xa2 => 0x2502, 0xa3 => 0x250c, 0xa4 => 0x2510, 0xa5 => 0x2518, 0xa6 => 0x2514, 0xa7 => 0x251c, 0xa8 => 0x252c, 0xa9 => 0x2524, 0xaa => 0x2534, 0xab => 0x253c, 0xac => 0x2501, 0xad => 0x2503, 0xae => 0x250f, 0xaf => 0x2513, 0xb0 => 0x251b, 0xb1 => 0x2517, 0xb2 => 0x2523, 0xb3 => 0x2533, 0xb4 => 0x252b, 0xb5 => 0x253b, 0xb6 => 0x254b, 0xb7 => 0x2520, 0xb8 => 0x252f, 0xb9 => 0x2528, 0xba => 0x2537, 0xbb => 0x253f, 0xbc => 0x251d, 0xbd => 0x2530, 0xbe => 0x2525, 0xbf => 0x2538, 0xc0 => 0x2542, 0xc1 => 0x2512, 0xc2 => 0x2511, 0xc3 => 0x251a, 0xc4 => 0x2519, 0xc5 => 0x2516, 0xc6 => 0x2515, 0xc7 => 0x250e, 0xc8 => 0x250d, 0xc9 => 0x251e, 0xca => 0x251f, 0xcb => 0x2521, 0xcc => 0x2522, 0xcd => 0x2526, 0xce => 0x2527, 0xcf => 0x2529, 0xd0 => 0x252a, 0xd1 => 0x252d, 0xd2 => 0x252e, 0xd3 => 0x2531, 0xd4 => 0x2532, 0xd5 => 0x2535, 0xd6 => 0x2536, 0xd7 => 0x2539, 0xd8 => 0x253a, 0xd9 => 0x253d, 0xda => 0x253e, 0xdb => 0x2540, 0xdc => 0x2541, 0xdd => 0x2543, 0xde => 0x2544, 0xdf => 0x2545, 0xe0 => 0x2546, 0xe1 => 0x2547, 0xe2 => 0x2548, 0xe3 => 0x2549, 0xe4 => 0x254a, 0xe5 => 0x2776, 0xe6 => 0x2777, 0xe7 => 0x2778, 0xe8 => 0x2779, 0xe9 => 0x277a, 0xea => 0x277b, 0xeb => 0x277c, 0xec => 0x277d, 0xed => 0x277e, 0xee => 0x277f, 0xef => 0x24eb, 0xf0 => 0x24ec, 0xf1 => 0x24ed, 0xf2 => 0x24ee, 0xf3 => 0x24ef, 0xf4 => 0x24f0, 0xf5 => 0x24f1, 0xf6 => 0x24f2, 0xf7 => 0x24f3, 0xf8 => 0x24f4, 0xf9 => [0x3251,0xf87a], 0xfa => [0x3252,0xf87a], 0xfb => [0x3253,0xf87a], 0xfc => [0x3254,0xf87a], 0xfd => [0x3255,0xf87a], 0xfe => [0x3256,0xf87a], }, 0xa7 => { 0x41 => [0x2642,0xf87f], 0x42 => 0x3012, 0x43 => 0x3036, 0x44 => [0x25cb,0xf87f], 0x45 => [0x25b3,0xf87f], 0x46 => 0x25fb, 0x47 => 0xf84c, 0x48 => [0x2394,0xf876], 0x49 => [0x25ad,0xf878], 0x4a => 0x25ad, 0x4b => 0xf84d, 0x4c => 0xf84e, 0x4d => 0xf84f, 0x4e => [0x25c7,0xf87f], 0x4f => [0x51f9,0xf87f], 0x50 => [0x51f8,0xf87f], 0x51 => 0x2206, 0x52 => [0x2206,0xf87f], 0x53 => 0x221f, 0x54 => [0x222a,0xf87f], 0x55 => 0x2225, 0x56 => 0x2226, 0x57 => [0x2229,0xf87f], 0x58 => 0x2253, 0x59 => 0x2251, 0x5a => 0x2266, 0x5b => 0x2267, 0x5c => 0x2213, 0x5d => 0x2295, 0x5e => 0x2296, 0x5f => 0x2297, 0x60 => 0x2a38, 0x61 => 0x2314, 0x62 => [0x3d,0x20e5], 0x63 => [0x2261,0x20e5], 0x64 => 0x2262, 0x65 => [0x3d,0x20d2], 0x66 => 0x25b1, 0x67 => [0x2d,0x0308], 0x68 => 0x2222, 0x69 => 0x2250, 0x6a => 0x03d5, 0x6b => 0x2ae8, 0x6c => 0x22a3, 0x6d => [0x22a5,0x0338], 0x6e => [0x2261,0x20d2], 0x6f => 0x226e, 0x70 => 0x226f, 0x71 => 0x2285, 0x72 => 0x2284, 0x73 => 0x2209, 0x74 => 0x220c, 0x75 => 0x22bb, 0x76 => 0x22bc, 0x77 => 0x225a, 0x78 => 0x2306, 0x79 => [0x223d,0x0336], 0x7a => [0x2314,0xf87f], 0x7b => 0x2a72, 0x7c => [0x88dc,0x20e4], 0x7d => [0xf862,0xc8fc,0xc2dd,0xd68c,0xc0ac], 0x81 => [0xf863,0xc8fc,0xc2dd,0xd68c,0xc0ac], 0x82 => 0x329e, 0x83 => [0x329e,0xf87f], 0x84 => 0x203c, 0x85 => 0x2049, 0x86 => [0x203c,0xf87f], 0x87 => 0x2047, 0x88 => [0x25c7,0xf87c], 0x89 => [0x25c7,0xf879], 0x8a => [0x25c7,0xf87b], 0x8b => [0x25c6,0xf879], 0x8c => [0x25a1,0xf87c], 0x8d => [0x25a1,0xf879], 0x8e => [0x25a1,0xf87b], 0x8f => 0x2588, 0x90 => 0x25e6, 0x91 => [0x25cb,0xf879], 0x92 => [0x25cb,0xf87b], 0x93 => [0x25cf,0xf879], 0x94 => 0x25bf, 0x95 => 0x25b5, 0x96 => 0x25b9, 0x97 => 0x25c3, 0x98 => 0x2666, 0x99 => 0x2981, 0x9a => 0x25fc, 0x9b => [0x25b4,0x20e4], 0x9c => 0x25ca, 0x9d => 0x3231, 0x9e => 0x3239, 0x9f => 0x33cb, 0xa1 => 0x3395, 0xa2 => 0x3396, 0xa3 => 0x3397, 0xa4 => 0x2113, 0xa5 => 0x3398, 0xa6 => 0x33c4, 0xa7 => 0x33a3, 0xa8 => 0x33a4, 0xa9 => 0x33a5, 0xaa => 0x33a6, 0xab => 0x3399, 0xac => 0x339a, 0xad => 0x339b, 0xae => 0x339c, 0xaf => 0x339d, 0xb0 => 0x339e, 0xb1 => 0x339f, 0xb2 => 0x33a0, 0xb3 => 0x33a1, 0xb4 => 0x33a2, 0xb5 => 0x33ca, 0xb6 => 0x338d, 0xb7 => 0x338e, 0xb8 => 0x338f, 0xb9 => 0x33cf, 0xba => 0x3388, 0xbb => 0x3389, 0xbc => 0x33c8, 0xbd => 0x33a7, 0xbe => 0x33a8, 0xbf => 0x33b0, 0xc0 => 0x33b1, 0xc1 => 0x33b2, 0xc2 => 0x33b3, 0xc3 => 0x33b4, 0xc4 => 0x33b5, 0xc5 => 0x33b6, 0xc6 => 0x33b7, 0xc7 => 0x33b8, 0xc8 => 0x33b9, 0xc9 => 0x3380, 0xca => 0x3381, 0xcb => 0x3382, 0xcc => 0x3383, 0xcd => 0x3384, 0xce => 0x33ba, 0xcf => 0x33bb, 0xd0 => 0x33bc, 0xd1 => 0x33bd, 0xd2 => 0x33be, 0xd3 => 0x33bf, 0xd4 => 0x3390, 0xd5 => 0x3391, 0xd6 => 0x3392, 0xd7 => 0x3393, 0xd8 => 0x3394, 0xd9 => 0x2126, 0xda => 0x33c0, 0xdb => 0x33c1, 0xdc => 0x338a, 0xdd => 0x338b, 0xde => 0x338c, 0xdf => 0x33d6, 0xe0 => 0x33c5, 0xe1 => 0x33ad, 0xe2 => 0x33ae, 0xe3 => 0x33af, 0xe4 => 0x33db, 0xe5 => 0x33a9, 0xe6 => 0x33aa, 0xe7 => 0x33ab, 0xe8 => 0x33ac, 0xe9 => 0x33dd, 0xea => 0x33d0, 0xeb => 0x33d3, 0xec => 0x33c3, 0xed => 0x33c9, 0xee => 0x33dc, 0xef => 0x33c6, 0xf0 => 0x246f, 0xf1 => 0x2470, 0xf2 => 0x2471, 0xf3 => 0x2472, 0xf4 => 0x2473, 0xf5 => 0x3251, 0xf6 => 0x3252, 0xf7 => 0x3253, 0xf8 => 0x3254, 0xf9 => 0x3255, 0xfa => 0x3256, 0xfb => 0x3257, 0xfc => 0x3258, 0xfd => 0x3259, 0xfe => 0x325a, }, 0xa8 => { 0x41 => [0x2192,0xf87b], 0x42 => [0x2190,0xf87b], 0x43 => [0x2191,0xf87b], 0x44 => [0x2193,0xf87b], 0x45 => [0x2196,0xf87b], 0x46 => [0x2197,0xf87b], 0x47 => [0x2198,0xf87b], 0x48 => [0x2199,0xf87b], 0x49 => 0x21d0, 0x4a => 0x21cf, 0x4b => 0x21cd, 0x4c => [0x21d4,0xf87f], 0x4d => [0x2192,0xf87c], 0x4e => [0x2190,0xf87c], 0x4f => [0x2191,0xf87c], 0x50 => [0x2193,0xf87c], 0x51 => [0x2194,0xf87c], 0x52 => [0x2195,0xf87c], 0x53 => [0x2190,0xf879], 0x54 => [0x2192,0xf879], 0x55 => [0x2191,0xf879], 0x56 => [0x2193,0xf879], 0x57 => [0x21e6,0x20de], 0x58 => [0x21e8,0x20de], 0x59 => [0x21e7,0x20de], 0x5a => [0x21e9,0x20de], 0x5b => [0x21e6,0x20dd], 0x5c => 0x27b2, 0x5d => [0x21e7,0x20dd], 0x5e => [0x21e9,0x20dd], 0x5f => [0x2190,0xf87f], 0x60 => 0x279c, 0x61 => [0x2191,0xf87f], 0x62 => [0x2193,0xf87f], 0x63 => [0x2190,0xf875], 0x64 => [0x2192,0xf875], 0x65 => [0x2191,0xf875], 0x66 => [0x2193,0xf875], 0x67 => 0xf846, 0x68 => 0xf847, 0x69 => [0x2190,0xf871], 0x6a => 0x279b, 0x6b => [0x2190,0xf872], 0x6c => [0x2192,0xf872], 0x6d => [0x2191,0xf872], 0x6e => [0x2193,0xf872], 0x6f => 0x2962, 0x70 => 0x2964, 0x71 => 0x2963, 0x72 => 0x2965, 0x73 => [0x21e6,0xf87a], 0x74 => 0x27a1, 0x75 => [0x21e7,0xf87a], 0x76 => [0x21e9,0xf87a], 0x77 => [0x21e6,0xf87b], 0x78 => 0x279e, 0x79 => [0x21e7,0xf87b], 0x7a => [0x21e9,0xf87b], 0x7b => 0x21b2, 0x7c => 0x21b1, 0x7d => [0x21bb,0xf87b], 0x81 => 0x21b4, 0x82 => 0x21b0, 0x83 => 0x21b3, 0x84 => [0x2939,0xf87f], 0x85 => [0x2934,0xf87f], 0x86 => 0x2936, 0x87 => [0x21b1,0xf87f], 0x88 => [0x21bb,0xf87f], 0x89 => 0x2935, 0x8a => [0x21b0,0xf87f], 0x8b => 0x2937, 0x8c => 0x2939, 0x8d => 0x2934, 0x8e => [0x21e6,0xf879], 0x8f => [0x21e8,0xf879], 0x90 => [0x21e7,0xf879], 0x91 => [0x21e9,0xf879], 0x92 => 0x21bc, 0x93 => 0x21c0, 0x94 => 0xf841, 0x95 => [0x21d4,0xf879], 0x96 => [0x21e8,0xf874], 0x97 => [0x21e6,0xf874], 0x98 => [0x21c0,0xf879], 0x99 => [0x21bc,0xf879], 0x9a => [0x21d2,0xf87c], 0x9b => [0x21d0,0xf87c], 0x9c => 0xf849, 0x9d => 0xf848, 0x9e => 0x21c4, 0x9f => 0x21c5, 0xa1 => 0xc6, 0xa2 => 0xd0, 0xa3 => 0xaa, 0xa4 => 0x0126, 0xa6 => 0x0132, 0xa8 => 0x013f, 0xa9 => 0x0141, 0xaa => 0xd8, 0xab => 0x0152, 0xac => 0xba, 0xad => 0xde, 0xae => 0x0166, 0xaf => 0x014a, 0xb1 => 0x3260, 0xb2 => 0x3261, 0xb3 => 0x3262, 0xb4 => 0x3263, 0xb5 => 0x3264, 0xb6 => 0x3265, 0xb7 => 0x3266, 0xb8 => 0x3267, 0xb9 => 0x3268, 0xba => 0x3269, 0xbb => 0x326a, 0xbc => 0x326b, 0xbd => 0x326c, 0xbe => 0x326d, 0xbf => 0x326e, 0xc0 => 0x326f, 0xc1 => 0x3270, 0xc2 => 0x3271, 0xc3 => 0x3272, 0xc4 => 0x3273, 0xc5 => 0x3274, 0xc6 => 0x3275, 0xc7 => 0x3276, 0xc8 => 0x3277, 0xc9 => 0x3278, 0xca => 0x3279, 0xcb => 0x327a, 0xcc => 0x327b, 0xcd => 0x24d0, 0xce => 0x24d1, 0xcf => 0x24d2, 0xd0 => 0x24d3, 0xd1 => 0x24d4, 0xd2 => 0x24d5, 0xd3 => 0x24d6, 0xd4 => 0x24d7, 0xd5 => 0x24d8, 0xd6 => 0x24d9, 0xd7 => 0x24da, 0xd8 => 0x24db, 0xd9 => 0x24dc, 0xda => 0x24dd, 0xdb => 0x24de, 0xdc => 0x24df, 0xdd => 0x24e0, 0xde => 0x24e1, 0xdf => 0x24e2, 0xe0 => 0x24e3, 0xe1 => 0x24e4, 0xe2 => 0x24e5, 0xe3 => 0x24e6, 0xe4 => 0x24e7, 0xe5 => 0x24e8, 0xe6 => 0x24e9, 0xe7 => 0x2460, 0xe8 => 0x2461, 0xe9 => 0x2462, 0xea => 0x2463, 0xeb => 0x2464, 0xec => 0x2465, 0xed => 0x2466, 0xee => 0x2467, 0xef => 0x2468, 0xf0 => 0x2469, 0xf1 => 0x246a, 0xf2 => 0x246b, 0xf3 => 0x246c, 0xf4 => 0x246d, 0xf5 => 0x246e, 0xf6 => 0xbd, 0xf7 => 0x2153, 0xf8 => 0x2154, 0xf9 => 0xbc, 0xfa => 0xbe, 0xfb => 0x215b, 0xfc => 0x215c, 0xfd => 0x215d, 0xfe => 0x215e, }, 0xa9 => { 0x41 => [0xf860,0x41,0x2e], 0x42 => [0xf860,0x42,0x2e], 0x43 => [0xf860,0x43,0x2e], 0x44 => [0xf860,0x44,0x2e], 0x45 => [0xf860,0x45,0x2e], 0x46 => [0xf860,0x46,0x2e], 0x47 => [0xf860,0x47,0x2e], 0x48 => [0xf860,0x48,0x2e], 0x49 => [0xf860,0x49,0x2e], 0x4a => [0xf860,0x4a,0x2e], 0x4b => [0xf860,0x4b,0x2e], 0x4c => [0xf860,0x4c,0x2e], 0x4d => [0xf860,0x4d,0x2e], 0x4e => [0xf860,0x4e,0x2e], 0x4f => [0xf860,0x4f,0x2e], 0x50 => [0xf860,0x50,0x2e], 0x51 => [0xf860,0x51,0x2e], 0x52 => [0xf860,0x52,0x2e], 0x53 => [0xf860,0x53,0x2e], 0x54 => [0xf860,0x54,0x2e], 0x55 => [0xf860,0x55,0x2e], 0x56 => [0xf860,0x56,0x2e], 0x57 => [0xf860,0x57,0x2e], 0x58 => [0xf860,0x58,0x2e], 0x59 => [0xf860,0x59,0x2e], 0x5a => [0xf860,0x5a,0x2e], 0x5b => [0xf860,0x61,0x2e], 0x5c => [0xf860,0x62,0x2e], 0x5d => [0xf860,0x63,0x2e], 0x5e => [0xf860,0x64,0x2e], 0x5f => [0xf860,0x65,0x2e], 0x60 => [0xf860,0x66,0x2e], 0x61 => [0xf860,0x67,0x2e], 0x62 => [0xf860,0x68,0x2e], 0x63 => [0xf860,0x69,0x2e], 0x64 => [0xf860,0x6a,0x2e], 0x65 => [0xf860,0x6b,0x2e], 0x66 => [0xf860,0x6c,0x2e], 0x67 => [0xf860,0x6d,0x2e], 0x68 => [0xf860,0x6e,0x2e], 0x69 => [0xf860,0x6f,0x2e], 0x6a => [0xf860,0x70,0x2e], 0x6b => [0xf860,0x71,0x2e], 0x6c => [0xf860,0x72,0x2e], 0x6d => [0xf860,0x73,0x2e], 0x6e => [0xf860,0x74,0x2e], 0x6f => [0xf860,0x75,0x2e], 0x70 => [0xf860,0x76,0x2e], 0x71 => [0xf860,0x77,0x2e], 0x72 => [0xf860,0x78,0x2e], 0x73 => [0xf860,0x79,0x2e], 0x74 => [0xf860,0x7a,0x2e], 0xa1 => 0xe6, 0xa2 => 0x0111, 0xa3 => 0xf0, 0xa4 => 0x0127, 0xa5 => 0x0131, 0xa6 => 0x0133, 0xa7 => 0x0138, 0xa8 => 0x0140, 0xa9 => 0x0142, 0xaa => 0xf8, 0xab => 0x0153, 0xac => 0xdf, 0xad => 0xfe, 0xae => 0x0167, 0xaf => 0x014b, 0xb0 => 0x0149, 0xb1 => 0x3200, 0xb2 => 0x3201, 0xb3 => 0x3202, 0xb4 => 0x3203, 0xb5 => 0x3204, 0xb6 => 0x3205, 0xb7 => 0x3206, 0xb8 => 0x3207, 0xb9 => 0x3208, 0xba => 0x3209, 0xbb => 0x320a, 0xbc => 0x320b, 0xbd => 0x320c, 0xbe => 0x320d, 0xbf => 0x320e, 0xc0 => 0x320f, 0xc1 => 0x3210, 0xc2 => 0x3211, 0xc3 => 0x3212, 0xc4 => 0x3213, 0xc5 => 0x3214, 0xc6 => 0x3215, 0xc7 => 0x3216, 0xc8 => 0x3217, 0xc9 => 0x3218, 0xca => 0x3219, 0xcb => 0x321a, 0xcc => 0x321b, 0xcd => 0x249c, 0xce => 0x249d, 0xcf => 0x249e, 0xd0 => 0x249f, 0xd1 => 0x24a0, 0xd2 => 0x24a1, 0xd3 => 0x24a2, 0xd4 => 0x24a3, 0xd5 => 0x24a4, 0xd6 => 0x24a5, 0xd7 => 0x24a6, 0xd8 => 0x24a7, 0xd9 => 0x24a8, 0xda => 0x24a9, 0xdb => 0x24aa, 0xdc => 0x24ab, 0xdd => 0x24ac, 0xde => 0x24ad, 0xdf => 0x24ae, 0xe0 => 0x24af, 0xe1 => 0x24b0, 0xe2 => 0x24b1, 0xe3 => 0x24b2, 0xe4 => 0x24b3, 0xe5 => 0x24b4, 0xe6 => 0x24b5, 0xe7 => 0x2474, 0xe8 => 0x2475, 0xe9 => 0x2476, 0xea => 0x2477, 0xeb => 0x2478, 0xec => 0x2479, 0xed => 0x247a, 0xee => 0x247b, 0xef => 0x247c, 0xf0 => 0x247d, 0xf1 => 0x247e, 0xf2 => 0x247f, 0xf3 => 0x2480, 0xf4 => 0x2481, 0xf5 => 0x2482, 0xf6 => 0xb9, 0xf7 => 0xb2, 0xf8 => 0xb3, 0xf9 => 0x2074, 0xfa => 0x207f, 0xfb => 0x2081, 0xfc => 0x2082, 0xfd => 0x2083, 0xfe => 0x2084, }, 0xaa => { 0x41 => [0xc6b4,0x20de], 0x42 => [0xb2f5,0x20de], 0x43 => [0xc8fc,0x20de], 0x44 => [0xba85,0x20de], 0x45 => [0xb300,0x20de], 0x46 => [0xd615,0x20de], 0x47 => [0xbd80,0x20de], 0x48 => [0xc804,0x20de], 0x49 => [0xc811,0x20de], 0x4a => [0xc218,0x20de], 0x4b => [0xb3d9,0x20de], 0x4c => [0xbe44,0x20de], 0x4d => [0xbc18,0x20de], 0x4e => [0xc790,0x20de], 0x4f => [0xd0c0,0x20de], 0x50 => [0xac10,0x20de], 0x51 => [0xc57d,0x20de], 0x52 => [0xc778,0x20de], 0x53 => [0xb73b,0x20de], 0x54 => [0x5370,0x20de], 0x55 => [0x8a3b,0x20de], 0x56 => [0xc608,0x20de], 0x57 => [0x611f,0x20de], 0x58 => [0x51a0,0x20de], 0x59 => [0x7b54,0x20de], 0x5a => [0x4ee3,0x20de], 0x5b => [0x982d,0x20de], 0x5c => [0x52d5,0x20de], 0x5d => [0x540d,0x20de], 0x5e => [0x76ee,0x20de], 0x5f => [0x53cd,0x20de], 0x60 => [0x88dc,0x20de], 0x61 => [0x672c,0x20de], 0x62 => [0x526f,0x20de], 0x63 => [0x5e8f,0x20de], 0x64 => [0x9023,0x20de], 0x65 => [0x5f71,0x20de], 0x66 => [0x4f8b,0x20de], 0x67 => [0x6e90,0x20de], 0x68 => [0x5b50,0x20de], 0x69 => [0x524d,0x20de], 0x6a => [0x7bc0,0x20de], 0x6b => [0x63a5,0x20de], 0x6c => [0x52a9,0x20de], 0x6d => [0x6307,0x20de], 0x6e => [0x4ed6,0x20de], 0x6f => [0x6d3e,0x20de], 0x70 => [0x5f62,0x20de], 0x71 => [0xc870,0x20de], 0x72 => [0xbb38,0x20de,0xf87a], 0x73 => [0xb2f5,0x20de,0xf87a], 0x74 => [0xc8fc,0x20de,0xf87a], 0x75 => [0xb73b,0x20de,0xf87a], 0x76 => [0x8a3b,0x20de,0xf87a], 0x77 => [0xad50,0x20de,0xf87a], 0x78 => [0xc5ed,0x20de,0xf87a], 0x79 => [0xc74c,0x20de,0xf87a], 0x7a => [0xc815,0x20de,0xf87a], 0x7b => [0xd574,0x20de,0xf87a], 0x7c => [0xc608,0x20de,0xf87a], 0x7d => [0xc874,0x20dd], 0x81 => [0xb77c,0x20dd], 0x82 => [0xb9c8,0x20dd], 0x83 => [0xbc14,0x20dd], 0x84 => [0xc0ac,0x20dd], 0x85 => [0xc544,0x20dd], 0x86 => [0xc790,0x20dd], 0x87 => [0xcc28,0x20dd], 0x88 => [0xce74,0x20dd], 0x89 => [0xd0c0,0x20dd], 0x8a => [0xd30c,0x20dd], 0x8b => [0xb192,0x20dd], 0x8c => [0xb0ae,0x20dd], 0x8d => [0xba85,0x20dd], 0x8e => [0xb300,0x20dd], 0x8f => [0xd615,0x20dd], 0x90 => [0xbd80,0x20dd], 0x91 => [0xc804,0x20dd], 0x92 => [0xc811,0x20dd], 0x93 => [0xc218,0x20dd], 0x94 => [0xb3d9,0x20dd], 0x95 => [0xbe44,0x20dd], 0x96 => [0xac8c,0x20dd], 0x97 => [0xbc18,0x20dd], 0x98 => [0xc18d,0x20dd], 0x99 => [0xc778,0x20dd], 0x9a => [0xbcf8,0x20dd], 0x9b => [0xc57d,0x20dd], 0x9c => [0xc219,0x20dd], 0x9d => [0xc720,0x20dd], 0x9e => [0xad00,0x20dd], 0x9f => [0x51a0,0x20dd], 0xa1 => 0x3041, 0xa2 => 0x3042, 0xa3 => 0x3043, 0xa4 => 0x3044, 0xa5 => 0x3045, 0xa6 => 0x3046, 0xa7 => 0x3047, 0xa8 => 0x3048, 0xa9 => 0x3049, 0xaa => 0x304a, 0xab => 0x304b, 0xac => 0x304c, 0xad => 0x304d, 0xae => 0x304e, 0xaf => 0x304f, 0xb0 => 0x3050, 0xb1 => 0x3051, 0xb2 => 0x3052, 0xb3 => 0x3053, 0xb4 => 0x3054, 0xb5 => 0x3055, 0xb6 => 0x3056, 0xb7 => 0x3057, 0xb8 => 0x3058, 0xb9 => 0x3059, 0xba => 0x305a, 0xbb => 0x305b, 0xbc => 0x305c, 0xbd => 0x305d, 0xbe => 0x305e, 0xbf => 0x305f, 0xc0 => 0x3060, 0xc1 => 0x3061, 0xc2 => 0x3062, 0xc3 => 0x3063, 0xc4 => 0x3064, 0xc5 => 0x3065, 0xc6 => 0x3066, 0xc7 => 0x3067, 0xc8 => 0x3068, 0xc9 => 0x3069, 0xca => 0x306a, 0xcb => 0x306b, 0xcc => 0x306c, 0xcd => 0x306d, 0xce => 0x306e, 0xcf => 0x306f, 0xd0 => 0x3070, 0xd1 => 0x3071, 0xd2 => 0x3072, 0xd3 => 0x3073, 0xd4 => 0x3074, 0xd5 => 0x3075, 0xd6 => 0x3076, 0xd7 => 0x3077, 0xd8 => 0x3078, 0xd9 => 0x3079, 0xda => 0x307a, 0xdb => 0x307b, 0xdc => 0x307c, 0xdd => 0x307d, 0xde => 0x307e, 0xdf => 0x307f, 0xe0 => 0x3080, 0xe1 => 0x3081, 0xe2 => 0x3082, 0xe3 => 0x3083, 0xe4 => 0x3084, 0xe5 => 0x3085, 0xe6 => 0x3086, 0xe7 => 0x3087, 0xe8 => 0x3088, 0xe9 => 0x3089, 0xea => 0x308a, 0xeb => 0x308b, 0xec => 0x308c, 0xed => 0x308d, 0xee => 0x308e, 0xef => 0x308f, 0xf0 => 0x3090, 0xf1 => 0x3091, 0xf2 => 0x3092, 0xf3 => 0x3093, 0xf4 => 0x2483, 0xf5 => 0x2484, 0xf6 => 0x2485, 0xf7 => 0x2486, 0xf8 => 0x2487, 0xf9 => [0xf862,0x28,0x32,0x31,0x29], 0xfa => [0xf862,0x28,0x32,0x32,0x29], 0xfb => [0xf862,0x28,0x32,0x33,0x29], 0xfc => [0xf862,0x28,0x32,0x34,0x29], 0xfd => [0xf862,0x28,0x32,0x35,0x29], 0xfe => [0xf862,0x28,0x32,0x36,0x29], }, 0xab => { 0x41 => [0xc870,0x20dd], 0x42 => [0xad6d,0x20dd], 0x43 => [0xac10,0x20dd], 0x44 => [0x5370,0x20dd], 0x45 => [0x8863,0x20dd], 0x46 => [0x672b,0x20dd], 0x47 => [0xac70,0x20dd], 0x48 => [0xb2f5,0x20dd], 0x49 => [0xbcc0,0x20dd], 0x4a => [0xc0c1,0x20dd], 0x4b => [0xc13c,0x20dd], 0x4c => [0xc2e0,0x20dd], 0x4d => [0xc5ec,0x20dd], 0x4e => [0xc608,0x20dd], 0x4f => [0xc6d0,0x20dd], 0x50 => [0xc791,0x20dd], 0x51 => [0xc900,0x20dd], 0x52 => [0xd0b9,0x20dd], 0x53 => [0xc678,0x20dd], 0x54 => [0xd65c,0x20dd], 0x55 => [0xac04,0x20dd], 0x56 => [0xac19,0x20dd], 0x57 => [0xc2e4,0x20dd], 0x58 => [0x611f,0x20dd], 0x59 => [0x6163,0x20dd], 0x5a => [0x4ee3,0x20dd], 0x5b => [0x52d5,0x20dd], 0x5c => 0x3294, 0x5d => [0x53cd,0x20dd], 0x5e => [0x526f,0x20dd], 0x5f => [0x81ea,0x20dd], 0x60 => [0x524d,0x20dd], 0x61 => [0x96fb,0x20dd], 0x62 => [0x63a5,0x20dd], 0x63 => [0x52a9,0x20dd], 0x64 => [0x6ce8,0x20dd], 0x65 => [0x53c3,0x20dd], 0x66 => [0x672c,0x20dd], 0x67 => [0x65b0,0x20dd], 0x68 => [0x73fe,0x20dd], 0x69 => [0x5f62,0x20dd], 0x6a => [0x9593,0x20dd], 0x6b => [0x570b,0x20dd], 0x6c => 0x32a5, 0x6d => [0x4ed6,0x20dd], 0x6e => [0xbe60,0x20dd], 0x6f => [0xc2dc,0x20dd], 0x70 => [0xc785,0x20dd], 0x71 => [0xc73c,0x20dd], 0x72 => [0xc74c,0x20dd], 0x73 => [0xc9c1,0x20dd], 0x74 => [0xd45c,0x20dd], 0x75 => [0xac00,0x20dd], 0x76 => [0xb098,0x20dd], 0x77 => [0xb2e4,0x20dd], 0x78 => [0xd558,0x20dd], 0x79 => [0xb9c8,0x20dd,0xf87a], 0x7a => [0xbc14,0x20dd,0xf87a], 0x7b => [0xc0ac,0x20dd,0xf87a], 0x7c => [0xc544,0x20dd,0xf87a], 0x7d => [0xc790,0x20dd,0xf87a], 0x81 => [0xcc28,0x20dd,0xf87a], 0x82 => [0xce74,0x20dd,0xf87a], 0x83 => [0xd0c0,0x20dd,0xf87a], 0x84 => [0xd30c,0x20dd,0xf87a], 0x85 => [0xd558,0x20dd,0xf87a], 0x86 => [0xbe44,0x20dd,0xf87a], 0x87 => [0xb2f5,0x20dd,0xf87a], 0x88 => [0xbe60,0x20dd,0xf87a], 0x89 => [0xbcf8,0x20dd,0xf87a], 0x8a => [0xb2e8,0x20dd,0xf87a], 0x8b => [0xc13c,0x20dd,0xf87a], 0x8c => [0xc2dc,0x20dd,0xf87a], 0x8d => [0xc5ec,0x20dd,0xf87a], 0x8e => [0xc608,0x20dd,0xf87a], 0x8f => [0xc73c,0x20dd,0xf87a], 0x90 => [0xc74c,0x20dd,0xf87a], 0x91 => [0xc785,0x20dd,0xf87a], 0x92 => [0xc81c,0x20dd,0xf87a], 0x93 => [0xc874,0x20dd,0xf87a], 0x94 => [0xc900,0x20dd,0xf87a], 0x95 => [0xd45c,0x20dd,0xf87a], 0x96 => [0xd574,0x20dd,0xf87a], 0x97 => [0xb290,0x20dd,0xf87a], 0x98 => [0xb192,0x20dd,0xf87a], 0x99 => [0xb0ae,0x20dd,0xf87a], 0x9a => [0xbc18,0x20dd,0xf87a], 0x9b => [0xac00,0x20dd,0xf87a], 0x9c => [0xb098,0x20dd,0xf87a], 0x9d => [0xb2e4,0x20dd,0xf87a], 0x9e => [0xb77c,0x20dd,0xf87a], 0x9f => [0xc678,0x20dd,0xf87a], 0xa1 => 0x30a1, 0xa2 => 0x30a2, 0xa3 => 0x30a3, 0xa4 => 0x30a4, 0xa5 => 0x30a5, 0xa6 => 0x30a6, 0xa7 => 0x30a7, 0xa8 => 0x30a8, 0xa9 => 0x30a9, 0xaa => 0x30aa, 0xab => 0x30ab, 0xac => 0x30ac, 0xad => 0x30ad, 0xae => 0x30ae, 0xaf => 0x30af, 0xb0 => 0x30b0, 0xb1 => 0x30b1, 0xb2 => 0x30b2, 0xb3 => 0x30b3, 0xb4 => 0x30b4, 0xb5 => 0x30b5, 0xb6 => 0x30b6, 0xb7 => 0x30b7, 0xb8 => 0x30b8, 0xb9 => 0x30b9, 0xba => 0x30ba, 0xbb => 0x30bb, 0xbc => 0x30bc, 0xbd => 0x30bd, 0xbe => 0x30be, 0xbf => 0x30bf, 0xc0 => 0x30c0, 0xc1 => 0x30c1, 0xc2 => 0x30c2, 0xc3 => 0x30c3, 0xc4 => 0x30c4, 0xc5 => 0x30c5, 0xc6 => 0x30c6, 0xc7 => 0x30c7, 0xc8 => 0x30c8, 0xc9 => 0x30c9, 0xca => 0x30ca, 0xcb => 0x30cb, 0xcc => 0x30cc, 0xcd => 0x30cd, 0xce => 0x30ce, 0xcf => 0x30cf, 0xd0 => 0x30d0, 0xd1 => 0x30d1, 0xd2 => 0x30d2, 0xd3 => 0x30d3, 0xd4 => 0x30d4, 0xd5 => 0x30d5, 0xd6 => 0x30d6, 0xd7 => 0x30d7, 0xd8 => 0x30d8, 0xd9 => 0x30d9, 0xda => 0x30da, 0xdb => 0x30db, 0xdc => 0x30dc, 0xdd => 0x30dd, 0xde => 0x30de, 0xdf => 0x30df, 0xe0 => 0x30e0, 0xe1 => 0x30e1, 0xe2 => 0x30e2, 0xe3 => 0x30e3, 0xe4 => 0x30e4, 0xe5 => 0x30e5, 0xe6 => 0x30e6, 0xe7 => 0x30e7, 0xe8 => 0x30e8, 0xe9 => 0x30e9, 0xea => 0x30ea, 0xeb => 0x30eb, 0xec => 0x30ec, 0xed => 0x30ed, 0xee => 0x30ee, 0xef => 0x30ef, 0xf0 => 0x30f0, 0xf1 => 0x30f1, 0xf2 => 0x30f2, 0xf3 => 0x30f3, 0xf4 => 0x30f4, 0xf5 => 0x30f5, 0xf6 => 0x30f6, 0xf7 => [0xf862,0x28,0x32,0x37,0x29], 0xf8 => [0xf862,0x28,0x32,0x38,0x29], 0xf9 => [0xf862,0x28,0x32,0x39,0x29], 0xfa => [0xf862,0x28,0x33,0x30,0x29], }, 0xac => { 0x41 => 0x21f0, 0x42 => 0xf843, 0x43 => 0x27b5, 0x44 => [0x2964,0xf87f], 0x45 => [0x2962,0xf87f], 0x46 => [0x21e8,0xf870], 0x47 => [0x21e6,0xf870], 0x48 => 0x27a4, 0x49 => 0xf844, 0x4a => 0xf84b, 0x4b => 0xf84a, 0x4c => [0x21c0,0xf87f], 0x4d => [0x21bc,0xf87f], 0x4e => [0x21e8,0xf87f], 0x4f => [0x21e6,0xf87f], 0x50 => 0x21b6, 0x51 => 0x21b7, 0x52 => 0x219d, 0x53 => 0x219c, 0x54 => 0xf842, 0x55 => [0x2190,0xf87a], 0x56 => [0x2192,0xf87a], 0x57 => [0x2191,0xf87a], 0x58 => [0x2193,0xf87a], 0x59 => [0x21e6,0xf87c], 0x5a => [0x21e8,0xf87c], 0x5b => [0x21e7,0xf87c], 0x5c => [0x21e9,0xf87c], 0x5d => [0x2190,0xf873], 0x5e => 0x2794, 0x5f => 0xf845, 0x60 => [0x2191,0xf873], 0x61 => [0x2193,0xf873], 0x62 => [0x2190,0xf878], 0x63 => [0x2192,0xf878], 0x64 => [0x2191,0xf878], 0x65 => [0x2193,0xf878], 0x66 => [0x2190,0xf874], 0x67 => [0x2192,0xf874], 0x68 => [0x2191,0xf874], 0x69 => [0x2193,0xf874], 0x6a => 0x21e0, 0x6b => 0x21e2, 0x6c => 0x21e1, 0x6d => 0x21e3, 0x6e => [0x21e6,0xf875], 0x6f => [0x21e8,0xf875], 0x70 => [0x21e7,0xf875], 0x71 => [0x21e9,0xf875], 0x72 => 0x21e6, 0x73 => 0x21e8, 0x74 => 0x21e7, 0x75 => 0x21e9, 0x76 => [0x2936,0xf87a], 0x77 => [0x21b1,0xf87a], 0x78 => [0x21bb,0xf87a], 0x79 => [0x2935,0xf87a], 0x7a => [0x21b0,0xf87a], 0x7b => [0x2937,0xf87a], 0x7c => [0x2939,0xf87a], 0x7d => [0x2934,0xf87a], 0x81 => [0x2936,0xf87c], 0x82 => [0x21b1,0xf87c], 0x83 => [0x21bb,0xf87c], 0x84 => [0x2935,0xf87c], 0x85 => [0x21b0,0xf87c], 0x86 => [0x2937,0xf87c], 0x87 => [0x2939,0xf87c], 0x88 => [0x2934,0xf87c], 0x89 => [0x2190,0xf870], 0x8a => [0x2192,0xf870], 0x8b => [0x2191,0xf870], 0x8c => [0x2193,0xf870], 0x8d => 0x261d, 0x8e => 0x261f, 0x8f => [0x261d,0xf87f], 0x90 => [0x261f,0xf87f], 0x91 => [0xb2e8,0x20dd], 0x92 => [0xcc38,0x20dd], 0x93 => [0xc18c,0x20dd], 0x94 => [0xc911,0x20dd], 0x95 => [0xc77c,0x20dd], 0x96 => [0xc774,0x20dd], 0x97 => [0xd734,0x20dd], 0xa1 => 0x0410, 0xa2 => 0x0411, 0xa3 => 0x0412, 0xa4 => 0x0413, 0xa5 => 0x0414, 0xa6 => 0x0415, 0xa7 => 0x0401, 0xa8 => 0x0416, 0xa9 => 0x0417, 0xaa => 0x0418, 0xab => 0x0419, 0xac => 0x041a, 0xad => 0x041b, 0xae => 0x041c, 0xaf => 0x041d, 0xb0 => 0x041e, 0xb1 => 0x041f, 0xb2 => 0x0420, 0xb3 => 0x0421, 0xb4 => 0x0422, 0xb5 => 0x0423, 0xb6 => 0x0424, 0xb7 => 0x0425, 0xb8 => 0x0426, 0xb9 => 0x0427, 0xba => 0x0428, 0xbb => 0x0429, 0xbc => 0x042a, 0xbd => 0x042b, 0xbe => 0x042c, 0xbf => 0x042d, 0xc0 => 0x042e, 0xc1 => 0x042f, 0xc2 => [0x31,0x20de,0xf875], 0xc3 => [0x32,0x20de,0xf875], 0xc4 => [0x33,0x20de,0xf875], 0xc5 => [0x34,0x20de,0xf875], 0xc6 => [0x35,0x20de,0xf875], 0xc7 => [0x36,0x20de,0xf875], 0xc8 => [0x37,0x20de,0xf875], 0xc9 => [0x38,0x20de,0xf875], 0xca => [0x39,0x20de,0xf875], 0xcb => [0xf866,0x5b,0x31,0x30,0x5d], 0xcc => [0xf866,0x5b,0x31,0x31,0x5d], 0xcd => [0xf866,0x5b,0x31,0x32,0x5d], 0xce => [0xf866,0x5b,0x31,0x33,0x5d], 0xcf => [0xf866,0x5b,0x31,0x34,0x5d], 0xd0 => [0xf866,0x5b,0x31,0x35,0x5d], 0xd1 => 0x0430, 0xd2 => 0x0431, 0xd3 => 0x0432, 0xd4 => 0x0433, 0xd5 => 0x0434, 0xd6 => 0x0435, 0xd7 => 0x0451, 0xd8 => 0x0436, 0xd9 => 0x0437, 0xda => 0x0438, 0xdb => 0x0439, 0xdc => 0x043a, 0xdd => 0x043b, 0xde => 0x043c, 0xdf => 0x043d, 0xe0 => 0x043e, 0xe1 => 0x043f, 0xe2 => 0x0440, 0xe3 => 0x0441, 0xe4 => 0x0442, 0xe5 => 0x0443, 0xe6 => 0x0444, 0xe7 => 0x0445, 0xe8 => 0x0446, 0xe9 => 0x0447, 0xea => 0x0448, 0xeb => 0x0449, 0xec => 0x044a, 0xed => 0x044b, 0xee => 0x044c, 0xef => 0x044d, 0xf0 => 0x044e, 0xf1 => 0x044f, 0xf2 => [0xf866,0x5b,0x31,0x36,0x5d], 0xf3 => [0xf866,0x5b,0x31,0x37,0x5d], 0xf4 => [0xf866,0x5b,0x31,0x38,0x5d], 0xf5 => [0xf866,0x5b,0x31,0x39,0x5d], 0xf6 => [0xf866,0x5b,0x32,0x30,0x5d], }, 0xad => { 0x41 => [0x4e00,0x20de,0xf87a], 0x42 => [0x4e8c,0x20de,0xf87a], 0x43 => [0x4e09,0x20de,0xf87a], 0x44 => [0x56db,0x20de,0xf87a], 0x45 => [0x4e94,0x20de,0xf87a], 0x46 => [0x516d,0x20de,0xf87a], 0x47 => [0x4e03,0x20de,0xf87a], 0x48 => [0x516b,0x20de,0xf87a], 0x49 => [0x4e5d,0x20de,0xf87a], 0x4a => [0x5341,0x20de,0xf87a], 0x4b => [0xf863,0x5b,0x5341,0x4e00,0x5d], 0x4c => [0xf863,0x5b,0x5341,0x4e8c,0x5d], 0x4d => [0xf863,0x5b,0x5341,0x4e09,0x5d], 0x4e => [0xf863,0x5b,0x5341,0x56db,0x5d], 0x4f => [0xf863,0x5b,0x5341,0x4e94,0x5d], 0x50 => [0xf863,0x5b,0x5341,0x516d,0x5d], 0x51 => [0xf863,0x5b,0x5341,0x4e03,0x5d], 0x52 => [0xf863,0x5b,0x5341,0x516b,0x5d], 0x53 => [0xf863,0x5b,0x5341,0x4e5d,0x5d], 0x54 => [0xf863,0x5b,0x4e8c,0x5341,0x5d], 0x55 => [0x4e00,0x20de], 0x56 => [0x4e8c,0x20de], 0x57 => [0x4e09,0x20de], 0x58 => [0x56db,0x20de], 0x59 => [0x4e94,0x20de], 0x5a => [0x516d,0x20de], 0x5b => [0x4e03,0x20de], 0x5c => [0x516b,0x20de], 0x5d => [0x4e5d,0x20de], 0x5e => [0x5341,0x20de], 0x5f => [0xf862,0x5b,0x5341,0x4e00,0x5d], 0x60 => [0xf862,0x5b,0x5341,0x4e8c,0x5d], 0x61 => [0xf862,0x5b,0x5341,0x4e09,0x5d], 0x62 => [0xf862,0x5b,0x5341,0x56db,0x5d], 0x63 => [0xf862,0x5b,0x5341,0x4e94,0x5d], 0x64 => [0xf862,0x5b,0x5341,0x516d,0x5d], 0x65 => [0xf862,0x5b,0x5341,0x4e03,0x5d], 0x66 => [0xf862,0x5b,0x5341,0x516b,0x5d], 0x67 => [0xf862,0x5b,0x5341,0x4e5d,0x5d], 0x68 => [0xf862,0x5b,0x4e8c,0x5341,0x5d], 0x69 => [0x65e5,0x20de], 0x6a => [0x6708,0x20de], 0x6b => [0x706b,0x20de], 0x6c => [0x6c34,0x20de], 0x6d => [0x6728,0x20de], 0x6e => [0x91d1,0x20de], 0x6f => [0x571f,0x20de], 0x70 => 0x3290, 0x71 => 0x328a, 0x72 => 0x328b, 0x73 => 0x328c, 0x74 => 0x328d, 0x75 => 0x328e, 0x76 => 0x328f, 0x77 => [0x65e5,0x20de,0xf87c], 0x78 => [0x6708,0x20de,0xf87c], 0x79 => [0x706b,0x20de,0xf87c], 0x7a => [0x6c34,0x20de,0xf87c], 0x7b => [0x6728,0x20de,0xf87c], 0x7c => [0x91d1,0x20de,0xf87c], 0x7d => [0x571f,0x20de,0xf87c], 0xa1 => [0x300c,0xf879], 0xa2 => [0x300d,0xf879], 0xa3 => [0x300e,0xf879], 0xa4 => [0x300f,0xf879], 0xa5 => [0x21e8,0xf878], 0xa6 => [0x21e6,0xf878], 0xa7 => [0x21e7,0xf878], 0xa8 => [0x21e9,0xf878], 0xa9 => 0x301e, 0xaa => 0x301f, 0xab => 0x2036, 0xac => [0x2033,0xf873], 0xad => 0x2035, 0xae => [0x2032,0xf873], 0xaf => [0x21e7,0xf87f], 0xb0 => [0x21,0xf87f], }, 0xb0 => { 0xa1 => 0xac00, 0xa2 => 0xac01, 0xa3 => 0xac04, 0xa4 => 0xac07, 0xa5 => 0xac08, 0xa6 => 0xac09, 0xa7 => 0xac0a, 0xa8 => 0xac10, 0xa9 => 0xac11, 0xaa => 0xac12, 0xab => 0xac13, 0xac => 0xac14, 0xad => 0xac15, 0xae => 0xac16, 0xaf => 0xac17, 0xb0 => 0xac19, 0xb1 => 0xac1a, 0xb2 => 0xac1b, 0xb3 => 0xac1c, 0xb4 => 0xac1d, 0xb5 => 0xac20, 0xb6 => 0xac24, 0xb7 => 0xac2c, 0xb8 => 0xac2d, 0xb9 => 0xac2f, 0xba => 0xac30, 0xbb => 0xac31, 0xbc => 0xac38, 0xbd => 0xac39, 0xbe => 0xac3c, 0xbf => 0xac40, 0xc0 => 0xac4b, 0xc1 => 0xac4d, 0xc2 => 0xac54, 0xc3 => 0xac58, 0xc4 => 0xac5c, 0xc5 => 0xac70, 0xc6 => 0xac71, 0xc7 => 0xac74, 0xc8 => 0xac77, 0xc9 => 0xac78, 0xca => 0xac7a, 0xcb => 0xac80, 0xcc => 0xac81, 0xcd => 0xac83, 0xce => 0xac84, 0xcf => 0xac85, 0xd0 => 0xac86, 0xd1 => 0xac89, 0xd2 => 0xac8a, 0xd3 => 0xac8b, 0xd4 => 0xac8c, 0xd5 => 0xac90, 0xd6 => 0xac94, 0xd7 => 0xac9c, 0xd8 => 0xac9d, 0xd9 => 0xac9f, 0xda => 0xaca0, 0xdb => 0xaca1, 0xdc => 0xaca8, 0xdd => 0xaca9, 0xde => 0xacaa, 0xdf => 0xacac, 0xe0 => 0xacaf, 0xe1 => 0xacb0, 0xe2 => 0xacb8, 0xe3 => 0xacb9, 0xe4 => 0xacbb, 0xe5 => 0xacbc, 0xe6 => 0xacbd, 0xe7 => 0xacc1, 0xe8 => 0xacc4, 0xe9 => 0xacc8, 0xea => 0xaccc, 0xeb => 0xacd5, 0xec => 0xacd7, 0xed => 0xace0, 0xee => 0xace1, 0xef => 0xace4, 0xf0 => 0xace7, 0xf1 => 0xace8, 0xf2 => 0xacea, 0xf3 => 0xacec, 0xf4 => 0xacef, 0xf5 => 0xacf0, 0xf6 => 0xacf1, 0xf7 => 0xacf3, 0xf8 => 0xacf5, 0xf9 => 0xacf6, 0xfa => 0xacfc, 0xfb => 0xacfd, 0xfc => 0xad00, 0xfd => 0xad04, 0xfe => 0xad06, }, 0xb1 => { 0xa1 => 0xad0c, 0xa2 => 0xad0d, 0xa3 => 0xad0f, 0xa4 => 0xad11, 0xa5 => 0xad18, 0xa6 => 0xad1c, 0xa7 => 0xad20, 0xa8 => 0xad29, 0xa9 => 0xad2c, 0xaa => 0xad2d, 0xab => 0xad34, 0xac => 0xad35, 0xad => 0xad38, 0xae => 0xad3c, 0xaf => 0xad44, 0xb0 => 0xad45, 0xb1 => 0xad47, 0xb2 => 0xad49, 0xb3 => 0xad50, 0xb4 => 0xad54, 0xb5 => 0xad58, 0xb6 => 0xad61, 0xb7 => 0xad63, 0xb8 => 0xad6c, 0xb9 => 0xad6d, 0xba => 0xad70, 0xbb => 0xad73, 0xbc => 0xad74, 0xbd => 0xad75, 0xbe => 0xad76, 0xbf => 0xad7b, 0xc0 => 0xad7c, 0xc1 => 0xad7d, 0xc2 => 0xad7f, 0xc3 => 0xad81, 0xc4 => 0xad82, 0xc5 => 0xad88, 0xc6 => 0xad89, 0xc7 => 0xad8c, 0xc8 => 0xad90, 0xc9 => 0xad9c, 0xca => 0xad9d, 0xcb => 0xada4, 0xcc => 0xadb7, 0xcd => 0xadc0, 0xce => 0xadc1, 0xcf => 0xadc4, 0xd0 => 0xadc8, 0xd1 => 0xadd0, 0xd2 => 0xadd1, 0xd3 => 0xadd3, 0xd4 => 0xaddc, 0xd5 => 0xade0, 0xd6 => 0xade4, 0xd7 => 0xadf8, 0xd8 => 0xadf9, 0xd9 => 0xadfc, 0xda => 0xadff, 0xdb => 0xae00, 0xdc => 0xae01, 0xdd => 0xae08, 0xde => 0xae09, 0xdf => 0xae0b, 0xe0 => 0xae0d, 0xe1 => 0xae14, 0xe2 => 0xae30, 0xe3 => 0xae31, 0xe4 => 0xae34, 0xe5 => 0xae37, 0xe6 => 0xae38, 0xe7 => 0xae3a, 0xe8 => 0xae40, 0xe9 => 0xae41, 0xea => 0xae43, 0xeb => 0xae45, 0xec => 0xae46, 0xed => 0xae4a, 0xee => 0xae4c, 0xef => 0xae4d, 0xf0 => 0xae4e, 0xf1 => 0xae50, 0xf2 => 0xae54, 0xf3 => 0xae56, 0xf4 => 0xae5c, 0xf5 => 0xae5d, 0xf6 => 0xae5f, 0xf7 => 0xae60, 0xf8 => 0xae61, 0xf9 => 0xae65, 0xfa => 0xae68, 0xfb => 0xae69, 0xfc => 0xae6c, 0xfd => 0xae70, 0xfe => 0xae78, }, 0xb2 => { 0xa1 => 0xae79, 0xa2 => 0xae7b, 0xa3 => 0xae7c, 0xa4 => 0xae7d, 0xa5 => 0xae84, 0xa6 => 0xae85, 0xa7 => 0xae8c, 0xa8 => 0xaebc, 0xa9 => 0xaebd, 0xaa => 0xaebe, 0xab => 0xaec0, 0xac => 0xaec4, 0xad => 0xaecc, 0xae => 0xaecd, 0xaf => 0xaecf, 0xb0 => 0xaed0, 0xb1 => 0xaed1, 0xb2 => 0xaed8, 0xb3 => 0xaed9, 0xb4 => 0xaedc, 0xb5 => 0xaee8, 0xb6 => 0xaeeb, 0xb7 => 0xaeed, 0xb8 => 0xaef4, 0xb9 => 0xaef8, 0xba => 0xaefc, 0xbb => 0xaf07, 0xbc => 0xaf08, 0xbd => 0xaf0d, 0xbe => 0xaf10, 0xbf => 0xaf2c, 0xc0 => 0xaf2d, 0xc1 => 0xaf30, 0xc2 => 0xaf32, 0xc3 => 0xaf34, 0xc4 => 0xaf3c, 0xc5 => 0xaf3d, 0xc6 => 0xaf3f, 0xc7 => 0xaf41, 0xc8 => 0xaf42, 0xc9 => 0xaf43, 0xca => 0xaf48, 0xcb => 0xaf49, 0xcc => 0xaf50, 0xcd => 0xaf5c, 0xce => 0xaf5d, 0xcf => 0xaf64, 0xd0 => 0xaf65, 0xd1 => 0xaf79, 0xd2 => 0xaf80, 0xd3 => 0xaf84, 0xd4 => 0xaf88, 0xd5 => 0xaf90, 0xd6 => 0xaf91, 0xd7 => 0xaf95, 0xd8 => 0xaf9c, 0xd9 => 0xafb8, 0xda => 0xafb9, 0xdb => 0xafbc, 0xdc => 0xafc0, 0xdd => 0xafc7, 0xde => 0xafc8, 0xdf => 0xafc9, 0xe0 => 0xafcb, 0xe1 => 0xafcd, 0xe2 => 0xafce, 0xe3 => 0xafd4, 0xe4 => 0xafdc, 0xe5 => 0xafe8, 0xe6 => 0xafe9, 0xe7 => 0xaff0, 0xe8 => 0xaff1, 0xe9 => 0xaff4, 0xea => 0xaff8, 0xeb => 0xb000, 0xec => 0xb001, 0xed => 0xb004, 0xee => 0xb00c, 0xef => 0xb010, 0xf0 => 0xb014, 0xf1 => 0xb01c, 0xf2 => 0xb01d, 0xf3 => 0xb028, 0xf4 => 0xb044, 0xf5 => 0xb045, 0xf6 => 0xb048, 0xf7 => 0xb04a, 0xf8 => 0xb04c, 0xf9 => 0xb04e, 0xfa => 0xb053, 0xfb => 0xb054, 0xfc => 0xb055, 0xfd => 0xb057, 0xfe => 0xb059, }, 0xb3 => { 0xa1 => 0xb05d, 0xa2 => 0xb07c, 0xa3 => 0xb07d, 0xa4 => 0xb080, 0xa5 => 0xb084, 0xa6 => 0xb08c, 0xa7 => 0xb08d, 0xa8 => 0xb08f, 0xa9 => 0xb091, 0xaa => 0xb098, 0xab => 0xb099, 0xac => 0xb09a, 0xad => 0xb09c, 0xae => 0xb09f, 0xaf => 0xb0a0, 0xb0 => 0xb0a1, 0xb1 => 0xb0a2, 0xb2 => 0xb0a8, 0xb3 => 0xb0a9, 0xb4 => 0xb0ab, 0xb5 => 0xb0ac, 0xb6 => 0xb0ad, 0xb7 => 0xb0ae, 0xb8 => 0xb0af, 0xb9 => 0xb0b1, 0xba => 0xb0b3, 0xbb => 0xb0b4, 0xbc => 0xb0b5, 0xbd => 0xb0b8, 0xbe => 0xb0bc, 0xbf => 0xb0c4, 0xc0 => 0xb0c5, 0xc1 => 0xb0c7, 0xc2 => 0xb0c8, 0xc3 => 0xb0c9, 0xc4 => 0xb0d0, 0xc5 => 0xb0d1, 0xc6 => 0xb0d4, 0xc7 => 0xb0d8, 0xc8 => 0xb0e0, 0xc9 => 0xb0e5, 0xca => 0xb108, 0xcb => 0xb109, 0xcc => 0xb10b, 0xcd => 0xb10c, 0xce => 0xb110, 0xcf => 0xb112, 0xd0 => 0xb113, 0xd1 => 0xb118, 0xd2 => 0xb119, 0xd3 => 0xb11b, 0xd4 => 0xb11c, 0xd5 => 0xb11d, 0xd6 => 0xb123, 0xd7 => 0xb124, 0xd8 => 0xb125, 0xd9 => 0xb128, 0xda => 0xb12c, 0xdb => 0xb134, 0xdc => 0xb135, 0xdd => 0xb137, 0xde => 0xb138, 0xdf => 0xb139, 0xe0 => 0xb140, 0xe1 => 0xb141, 0xe2 => 0xb144, 0xe3 => 0xb148, 0xe4 => 0xb150, 0xe5 => 0xb151, 0xe6 => 0xb154, 0xe7 => 0xb155, 0xe8 => 0xb158, 0xe9 => 0xb15c, 0xea => 0xb160, 0xeb => 0xb178, 0xec => 0xb179, 0xed => 0xb17c, 0xee => 0xb180, 0xef => 0xb182, 0xf0 => 0xb188, 0xf1 => 0xb189, 0xf2 => 0xb18b, 0xf3 => 0xb18d, 0xf4 => 0xb192, 0xf5 => 0xb193, 0xf6 => 0xb194, 0xf7 => 0xb198, 0xf8 => 0xb19c, 0xf9 => 0xb1a8, 0xfa => 0xb1cc, 0xfb => 0xb1d0, 0xfc => 0xb1d4, 0xfd => 0xb1dc, 0xfe => 0xb1dd, }, 0xb4 => { 0xa1 => 0xb1df, 0xa2 => 0xb1e8, 0xa3 => 0xb1e9, 0xa4 => 0xb1ec, 0xa5 => 0xb1f0, 0xa6 => 0xb1f9, 0xa7 => 0xb1fb, 0xa8 => 0xb1fd, 0xa9 => 0xb204, 0xaa => 0xb205, 0xab => 0xb208, 0xac => 0xb20b, 0xad => 0xb20c, 0xae => 0xb214, 0xaf => 0xb215, 0xb0 => 0xb217, 0xb1 => 0xb219, 0xb2 => 0xb220, 0xb3 => 0xb234, 0xb4 => 0xb23c, 0xb5 => 0xb258, 0xb6 => 0xb25c, 0xb7 => 0xb260, 0xb8 => 0xb268, 0xb9 => 0xb269, 0xba => 0xb274, 0xbb => 0xb275, 0xbc => 0xb27c, 0xbd => 0xb284, 0xbe => 0xb285, 0xbf => 0xb289, 0xc0 => 0xb290, 0xc1 => 0xb291, 0xc2 => 0xb294, 0xc3 => 0xb298, 0xc4 => 0xb299, 0xc5 => 0xb29a, 0xc6 => 0xb2a0, 0xc7 => 0xb2a1, 0xc8 => 0xb2a3, 0xc9 => 0xb2a5, 0xca => 0xb2a6, 0xcb => 0xb2aa, 0xcc => 0xb2ac, 0xcd => 0xb2b0, 0xce => 0xb2b4, 0xcf => 0xb2c8, 0xd0 => 0xb2c9, 0xd1 => 0xb2cc, 0xd2 => 0xb2d0, 0xd3 => 0xb2d2, 0xd4 => 0xb2d8, 0xd5 => 0xb2d9, 0xd6 => 0xb2db, 0xd7 => 0xb2dd, 0xd8 => 0xb2e2, 0xd9 => 0xb2e4, 0xda => 0xb2e5, 0xdb => 0xb2e6, 0xdc => 0xb2e8, 0xdd => 0xb2eb, 0xde => 0xb2ec, 0xdf => 0xb2ed, 0xe0 => 0xb2ee, 0xe1 => 0xb2ef, 0xe2 => 0xb2f3, 0xe3 => 0xb2f4, 0xe4 => 0xb2f5, 0xe5 => 0xb2f7, 0xe6 => 0xb2f8, 0xe7 => 0xb2f9, 0xe8 => 0xb2fa, 0xe9 => 0xb2fb, 0xea => 0xb2ff, 0xeb => 0xb300, 0xec => 0xb301, 0xed => 0xb304, 0xee => 0xb308, 0xef => 0xb310, 0xf0 => 0xb311, 0xf1 => 0xb313, 0xf2 => 0xb314, 0xf3 => 0xb315, 0xf4 => 0xb31c, 0xf5 => 0xb354, 0xf6 => 0xb355, 0xf7 => 0xb356, 0xf8 => 0xb358, 0xf9 => 0xb35b, 0xfa => 0xb35c, 0xfb => 0xb35e, 0xfc => 0xb35f, 0xfd => 0xb364, 0xfe => 0xb365, }, 0xb5 => { 0xa1 => 0xb367, 0xa2 => 0xb369, 0xa3 => 0xb36b, 0xa4 => 0xb36e, 0xa5 => 0xb370, 0xa6 => 0xb371, 0xa7 => 0xb374, 0xa8 => 0xb378, 0xa9 => 0xb380, 0xaa => 0xb381, 0xab => 0xb383, 0xac => 0xb384, 0xad => 0xb385, 0xae => 0xb38c, 0xaf => 0xb390, 0xb0 => 0xb394, 0xb1 => 0xb3a0, 0xb2 => 0xb3a1, 0xb3 => 0xb3a8, 0xb4 => 0xb3ac, 0xb5 => 0xb3c4, 0xb6 => 0xb3c5, 0xb7 => 0xb3c8, 0xb8 => 0xb3cb, 0xb9 => 0xb3cc, 0xba => 0xb3ce, 0xbb => 0xb3d0, 0xbc => 0xb3d4, 0xbd => 0xb3d5, 0xbe => 0xb3d7, 0xbf => 0xb3d9, 0xc0 => 0xb3db, 0xc1 => 0xb3dd, 0xc2 => 0xb3e0, 0xc3 => 0xb3e4, 0xc4 => 0xb3e8, 0xc5 => 0xb3fc, 0xc6 => 0xb410, 0xc7 => 0xb418, 0xc8 => 0xb41c, 0xc9 => 0xb420, 0xca => 0xb428, 0xcb => 0xb429, 0xcc => 0xb42b, 0xcd => 0xb434, 0xce => 0xb450, 0xcf => 0xb451, 0xd0 => 0xb454, 0xd1 => 0xb458, 0xd2 => 0xb460, 0xd3 => 0xb461, 0xd4 => 0xb463, 0xd5 => 0xb465, 0xd6 => 0xb46c, 0xd7 => 0xb480, 0xd8 => 0xb488, 0xd9 => 0xb49d, 0xda => 0xb4a4, 0xdb => 0xb4a8, 0xdc => 0xb4ac, 0xdd => 0xb4b5, 0xde => 0xb4b7, 0xdf => 0xb4b9, 0xe0 => 0xb4c0, 0xe1 => 0xb4c4, 0xe2 => 0xb4c8, 0xe3 => 0xb4d0, 0xe4 => 0xb4d5, 0xe5 => 0xb4dc, 0xe6 => 0xb4dd, 0xe7 => 0xb4e0, 0xe8 => 0xb4e3, 0xe9 => 0xb4e4, 0xea => 0xb4e6, 0xeb => 0xb4ec, 0xec => 0xb4ed, 0xed => 0xb4ef, 0xee => 0xb4f1, 0xef => 0xb4f8, 0xf0 => 0xb514, 0xf1 => 0xb515, 0xf2 => 0xb518, 0xf3 => 0xb51b, 0xf4 => 0xb51c, 0xf5 => 0xb524, 0xf6 => 0xb525, 0xf7 => 0xb527, 0xf8 => 0xb528, 0xf9 => 0xb529, 0xfa => 0xb52a, 0xfb => 0xb530, 0xfc => 0xb531, 0xfd => 0xb534, 0xfe => 0xb538, }, 0xb6 => { 0xa1 => 0xb540, 0xa2 => 0xb541, 0xa3 => 0xb543, 0xa4 => 0xb544, 0xa5 => 0xb545, 0xa6 => 0xb54b, 0xa7 => 0xb54c, 0xa8 => 0xb54d, 0xa9 => 0xb550, 0xaa => 0xb554, 0xab => 0xb55c, 0xac => 0xb55d, 0xad => 0xb55f, 0xae => 0xb560, 0xaf => 0xb561, 0xb0 => 0xb5a0, 0xb1 => 0xb5a1, 0xb2 => 0xb5a4, 0xb3 => 0xb5a8, 0xb4 => 0xb5aa, 0xb5 => 0xb5ab, 0xb6 => 0xb5b0, 0xb7 => 0xb5b1, 0xb8 => 0xb5b3, 0xb9 => 0xb5b4, 0xba => 0xb5b5, 0xbb => 0xb5bb, 0xbc => 0xb5bc, 0xbd => 0xb5bd, 0xbe => 0xb5c0, 0xbf => 0xb5c4, 0xc0 => 0xb5cc, 0xc1 => 0xb5cd, 0xc2 => 0xb5cf, 0xc3 => 0xb5d0, 0xc4 => 0xb5d1, 0xc5 => 0xb5d8, 0xc6 => 0xb5ec, 0xc7 => 0xb610, 0xc8 => 0xb611, 0xc9 => 0xb614, 0xca => 0xb618, 0xcb => 0xb625, 0xcc => 0xb62c, 0xcd => 0xb634, 0xce => 0xb648, 0xcf => 0xb664, 0xd0 => 0xb668, 0xd1 => 0xb69c, 0xd2 => 0xb69d, 0xd3 => 0xb6a0, 0xd4 => 0xb6a4, 0xd5 => 0xb6ab, 0xd6 => 0xb6ac, 0xd7 => 0xb6b1, 0xd8 => 0xb6d4, 0xd9 => 0xb6f0, 0xda => 0xb6f4, 0xdb => 0xb6f8, 0xdc => 0xb700, 0xdd => 0xb701, 0xde => 0xb705, 0xdf => 0xb728, 0xe0 => 0xb729, 0xe1 => 0xb72c, 0xe2 => 0xb72f, 0xe3 => 0xb730, 0xe4 => 0xb738, 0xe5 => 0xb739, 0xe6 => 0xb73b, 0xe7 => 0xb744, 0xe8 => 0xb748, 0xe9 => 0xb74c, 0xea => 0xb754, 0xeb => 0xb755, 0xec => 0xb760, 0xed => 0xb764, 0xee => 0xb768, 0xef => 0xb770, 0xf0 => 0xb771, 0xf1 => 0xb773, 0xf2 => 0xb775, 0xf3 => 0xb77c, 0xf4 => 0xb77d, 0xf5 => 0xb780, 0xf6 => 0xb784, 0xf7 => 0xb78c, 0xf8 => 0xb78d, 0xf9 => 0xb78f, 0xfa => 0xb790, 0xfb => 0xb791, 0xfc => 0xb792, 0xfd => 0xb796, 0xfe => 0xb797, }, 0xb7 => { 0xa1 => 0xb798, 0xa2 => 0xb799, 0xa3 => 0xb79c, 0xa4 => 0xb7a0, 0xa5 => 0xb7a8, 0xa6 => 0xb7a9, 0xa7 => 0xb7ab, 0xa8 => 0xb7ac, 0xa9 => 0xb7ad, 0xaa => 0xb7b4, 0xab => 0xb7b5, 0xac => 0xb7b8, 0xad => 0xb7c7, 0xae => 0xb7c9, 0xaf => 0xb7ec, 0xb0 => 0xb7ed, 0xb1 => 0xb7f0, 0xb2 => 0xb7f4, 0xb3 => 0xb7fc, 0xb4 => 0xb7fd, 0xb5 => 0xb7ff, 0xb6 => 0xb800, 0xb7 => 0xb801, 0xb8 => 0xb807, 0xb9 => 0xb808, 0xba => 0xb809, 0xbb => 0xb80c, 0xbc => 0xb810, 0xbd => 0xb818, 0xbe => 0xb819, 0xbf => 0xb81b, 0xc0 => 0xb81d, 0xc1 => 0xb824, 0xc2 => 0xb825, 0xc3 => 0xb828, 0xc4 => 0xb82c, 0xc5 => 0xb834, 0xc6 => 0xb835, 0xc7 => 0xb837, 0xc8 => 0xb838, 0xc9 => 0xb839, 0xca => 0xb840, 0xcb => 0xb844, 0xcc => 0xb851, 0xcd => 0xb853, 0xce => 0xb85c, 0xcf => 0xb85d, 0xd0 => 0xb860, 0xd1 => 0xb864, 0xd2 => 0xb86c, 0xd3 => 0xb86d, 0xd4 => 0xb86f, 0xd5 => 0xb871, 0xd6 => 0xb878, 0xd7 => 0xb87c, 0xd8 => 0xb88d, 0xd9 => 0xb8a8, 0xda => 0xb8b0, 0xdb => 0xb8b4, 0xdc => 0xb8b8, 0xdd => 0xb8c0, 0xde => 0xb8c1, 0xdf => 0xb8c3, 0xe0 => 0xb8c5, 0xe1 => 0xb8cc, 0xe2 => 0xb8d0, 0xe3 => 0xb8d4, 0xe4 => 0xb8dd, 0xe5 => 0xb8df, 0xe6 => 0xb8e1, 0xe7 => 0xb8e8, 0xe8 => 0xb8e9, 0xe9 => 0xb8ec, 0xea => 0xb8f0, 0xeb => 0xb8f8, 0xec => 0xb8f9, 0xed => 0xb8fb, 0xee => 0xb8fd, 0xef => 0xb904, 0xf0 => 0xb918, 0xf1 => 0xb920, 0xf2 => 0xb93c, 0xf3 => 0xb93d, 0xf4 => 0xb940, 0xf5 => 0xb944, 0xf6 => 0xb94c, 0xf7 => 0xb94f, 0xf8 => 0xb951, 0xf9 => 0xb958, 0xfa => 0xb959, 0xfb => 0xb95c, 0xfc => 0xb960, 0xfd => 0xb968, 0xfe => 0xb969, }, 0xb8 => { 0xa1 => 0xb96b, 0xa2 => 0xb96d, 0xa3 => 0xb974, 0xa4 => 0xb975, 0xa5 => 0xb978, 0xa6 => 0xb97c, 0xa7 => 0xb984, 0xa8 => 0xb985, 0xa9 => 0xb987, 0xaa => 0xb989, 0xab => 0xb98a, 0xac => 0xb98d, 0xad => 0xb98e, 0xae => 0xb9ac, 0xaf => 0xb9ad, 0xb0 => 0xb9b0, 0xb1 => 0xb9b4, 0xb2 => 0xb9bc, 0xb3 => 0xb9bd, 0xb4 => 0xb9bf, 0xb5 => 0xb9c1, 0xb6 => 0xb9c8, 0xb7 => 0xb9c9, 0xb8 => 0xb9cc, 0xb9 => 0xb9ce, 0xba => 0xb9cf, 0xbb => 0xb9d0, 0xbc => 0xb9d1, 0xbd => 0xb9d2, 0xbe => 0xb9d8, 0xbf => 0xb9d9, 0xc0 => 0xb9db, 0xc1 => 0xb9dd, 0xc2 => 0xb9de, 0xc3 => 0xb9e1, 0xc4 => 0xb9e3, 0xc5 => 0xb9e4, 0xc6 => 0xb9e5, 0xc7 => 0xb9e8, 0xc8 => 0xb9ec, 0xc9 => 0xb9f4, 0xca => 0xb9f5, 0xcb => 0xb9f7, 0xcc => 0xb9f8, 0xcd => 0xb9f9, 0xce => 0xb9fa, 0xcf => 0xba00, 0xd0 => 0xba01, 0xd1 => 0xba08, 0xd2 => 0xba15, 0xd3 => 0xba38, 0xd4 => 0xba39, 0xd5 => 0xba3c, 0xd6 => 0xba40, 0xd7 => 0xba42, 0xd8 => 0xba48, 0xd9 => 0xba49, 0xda => 0xba4b, 0xdb => 0xba4d, 0xdc => 0xba4e, 0xdd => 0xba53, 0xde => 0xba54, 0xdf => 0xba55, 0xe0 => 0xba58, 0xe1 => 0xba5c, 0xe2 => 0xba64, 0xe3 => 0xba65, 0xe4 => 0xba67, 0xe5 => 0xba68, 0xe6 => 0xba69, 0xe7 => 0xba70, 0xe8 => 0xba71, 0xe9 => 0xba74, 0xea => 0xba78, 0xeb => 0xba83, 0xec => 0xba84, 0xed => 0xba85, 0xee => 0xba87, 0xef => 0xba8c, 0xf0 => 0xbaa8, 0xf1 => 0xbaa9, 0xf2 => 0xbaab, 0xf3 => 0xbaac, 0xf4 => 0xbab0, 0xf5 => 0xbab2, 0xf6 => 0xbab8, 0xf7 => 0xbab9, 0xf8 => 0xbabb, 0xf9 => 0xbabd, 0xfa => 0xbac4, 0xfb => 0xbac8, 0xfc => 0xbad8, 0xfd => 0xbad9, 0xfe => 0xbafc, }, 0xb9 => { 0xa1 => 0xbb00, 0xa2 => 0xbb04, 0xa3 => 0xbb0d, 0xa4 => 0xbb0f, 0xa5 => 0xbb11, 0xa6 => 0xbb18, 0xa7 => 0xbb1c, 0xa8 => 0xbb20, 0xa9 => 0xbb29, 0xaa => 0xbb2b, 0xab => 0xbb34, 0xac => 0xbb35, 0xad => 0xbb36, 0xae => 0xbb38, 0xaf => 0xbb3b, 0xb0 => 0xbb3c, 0xb1 => 0xbb3d, 0xb2 => 0xbb3e, 0xb3 => 0xbb44, 0xb4 => 0xbb45, 0xb5 => 0xbb47, 0xb6 => 0xbb49, 0xb7 => 0xbb4d, 0xb8 => 0xbb4f, 0xb9 => 0xbb50, 0xba => 0xbb54, 0xbb => 0xbb58, 0xbc => 0xbb61, 0xbd => 0xbb63, 0xbe => 0xbb6c, 0xbf => 0xbb88, 0xc0 => 0xbb8c, 0xc1 => 0xbb90, 0xc2 => 0xbba4, 0xc3 => 0xbba8, 0xc4 => 0xbbac, 0xc5 => 0xbbb4, 0xc6 => 0xbbb7, 0xc7 => 0xbbc0, 0xc8 => 0xbbc4, 0xc9 => 0xbbc8, 0xca => 0xbbd0, 0xcb => 0xbbd3, 0xcc => 0xbbf8, 0xcd => 0xbbf9, 0xce => 0xbbfc, 0xcf => 0xbbff, 0xd0 => 0xbc00, 0xd1 => 0xbc02, 0xd2 => 0xbc08, 0xd3 => 0xbc09, 0xd4 => 0xbc0b, 0xd5 => 0xbc0c, 0xd6 => 0xbc0d, 0xd7 => 0xbc0f, 0xd8 => 0xbc11, 0xd9 => 0xbc14, 0xda => 0xbc15, 0xdb => 0xbc16, 0xdc => 0xbc17, 0xdd => 0xbc18, 0xde => 0xbc1b, 0xdf => 0xbc1c, 0xe0 => 0xbc1d, 0xe1 => 0xbc1e, 0xe2 => 0xbc1f, 0xe3 => 0xbc24, 0xe4 => 0xbc25, 0xe5 => 0xbc27, 0xe6 => 0xbc29, 0xe7 => 0xbc2d, 0xe8 => 0xbc30, 0xe9 => 0xbc31, 0xea => 0xbc34, 0xeb => 0xbc38, 0xec => 0xbc40, 0xed => 0xbc41, 0xee => 0xbc43, 0xef => 0xbc44, 0xf0 => 0xbc45, 0xf1 => 0xbc49, 0xf2 => 0xbc4c, 0xf3 => 0xbc4d, 0xf4 => 0xbc50, 0xf5 => 0xbc5d, 0xf6 => 0xbc84, 0xf7 => 0xbc85, 0xf8 => 0xbc88, 0xf9 => 0xbc8b, 0xfa => 0xbc8c, 0xfb => 0xbc8e, 0xfc => 0xbc94, 0xfd => 0xbc95, 0xfe => 0xbc97, }, 0xba => { 0xa1 => 0xbc99, 0xa2 => 0xbc9a, 0xa3 => 0xbca0, 0xa4 => 0xbca1, 0xa5 => 0xbca4, 0xa6 => 0xbca7, 0xa7 => 0xbca8, 0xa8 => 0xbcb0, 0xa9 => 0xbcb1, 0xaa => 0xbcb3, 0xab => 0xbcb4, 0xac => 0xbcb5, 0xad => 0xbcbc, 0xae => 0xbcbd, 0xaf => 0xbcc0, 0xb0 => 0xbcc4, 0xb1 => 0xbccd, 0xb2 => 0xbccf, 0xb3 => 0xbcd0, 0xb4 => 0xbcd1, 0xb5 => 0xbcd5, 0xb6 => 0xbcd8, 0xb7 => 0xbcdc, 0xb8 => 0xbcf4, 0xb9 => 0xbcf5, 0xba => 0xbcf6, 0xbb => 0xbcf8, 0xbc => 0xbcfc, 0xbd => 0xbd04, 0xbe => 0xbd05, 0xbf => 0xbd07, 0xc0 => 0xbd09, 0xc1 => 0xbd10, 0xc2 => 0xbd14, 0xc3 => 0xbd24, 0xc4 => 0xbd2c, 0xc5 => 0xbd40, 0xc6 => 0xbd48, 0xc7 => 0xbd49, 0xc8 => 0xbd4c, 0xc9 => 0xbd50, 0xca => 0xbd58, 0xcb => 0xbd59, 0xcc => 0xbd64, 0xcd => 0xbd68, 0xce => 0xbd80, 0xcf => 0xbd81, 0xd0 => 0xbd84, 0xd1 => 0xbd87, 0xd2 => 0xbd88, 0xd3 => 0xbd89, 0xd4 => 0xbd8a, 0xd5 => 0xbd90, 0xd6 => 0xbd91, 0xd7 => 0xbd93, 0xd8 => 0xbd95, 0xd9 => 0xbd99, 0xda => 0xbd9a, 0xdb => 0xbd9c, 0xdc => 0xbda4, 0xdd => 0xbdb0, 0xde => 0xbdb8, 0xdf => 0xbdd4, 0xe0 => 0xbdd5, 0xe1 => 0xbdd8, 0xe2 => 0xbddc, 0xe3 => 0xbde9, 0xe4 => 0xbdf0, 0xe5 => 0xbdf4, 0xe6 => 0xbdf8, 0xe7 => 0xbe00, 0xe8 => 0xbe03, 0xe9 => 0xbe05, 0xea => 0xbe0c, 0xeb => 0xbe0d, 0xec => 0xbe10, 0xed => 0xbe14, 0xee => 0xbe1c, 0xef => 0xbe1d, 0xf0 => 0xbe1f, 0xf1 => 0xbe44, 0xf2 => 0xbe45, 0xf3 => 0xbe48, 0xf4 => 0xbe4c, 0xf5 => 0xbe4e, 0xf6 => 0xbe54, 0xf7 => 0xbe55, 0xf8 => 0xbe57, 0xf9 => 0xbe59, 0xfa => 0xbe5a, 0xfb => 0xbe5b, 0xfc => 0xbe60, 0xfd => 0xbe61, 0xfe => 0xbe64, }, 0xbb => { 0xa1 => 0xbe68, 0xa2 => 0xbe6a, 0xa3 => 0xbe70, 0xa4 => 0xbe71, 0xa5 => 0xbe73, 0xa6 => 0xbe74, 0xa7 => 0xbe75, 0xa8 => 0xbe7b, 0xa9 => 0xbe7c, 0xaa => 0xbe7d, 0xab => 0xbe80, 0xac => 0xbe84, 0xad => 0xbe8c, 0xae => 0xbe8d, 0xaf => 0xbe8f, 0xb0 => 0xbe90, 0xb1 => 0xbe91, 0xb2 => 0xbe98, 0xb3 => 0xbe99, 0xb4 => 0xbea8, 0xb5 => 0xbed0, 0xb6 => 0xbed1, 0xb7 => 0xbed4, 0xb8 => 0xbed7, 0xb9 => 0xbed8, 0xba => 0xbee0, 0xbb => 0xbee3, 0xbc => 0xbee4, 0xbd => 0xbee5, 0xbe => 0xbeec, 0xbf => 0xbf01, 0xc0 => 0xbf08, 0xc1 => 0xbf09, 0xc2 => 0xbf18, 0xc3 => 0xbf19, 0xc4 => 0xbf1b, 0xc5 => 0xbf1c, 0xc6 => 0xbf1d, 0xc7 => 0xbf40, 0xc8 => 0xbf41, 0xc9 => 0xbf44, 0xca => 0xbf48, 0xcb => 0xbf50, 0xcc => 0xbf51, 0xcd => 0xbf55, 0xce => 0xbf94, 0xcf => 0xbfb0, 0xd0 => 0xbfc5, 0xd1 => 0xbfcc, 0xd2 => 0xbfcd, 0xd3 => 0xbfd0, 0xd4 => 0xbfd4, 0xd5 => 0xbfdc, 0xd6 => 0xbfdf, 0xd7 => 0xbfe1, 0xd8 => 0xc03c, 0xd9 => 0xc051, 0xda => 0xc058, 0xdb => 0xc05c, 0xdc => 0xc060, 0xdd => 0xc068, 0xde => 0xc069, 0xdf => 0xc090, 0xe0 => 0xc091, 0xe1 => 0xc094, 0xe2 => 0xc098, 0xe3 => 0xc0a0, 0xe4 => 0xc0a1, 0xe5 => 0xc0a3, 0xe6 => 0xc0a5, 0xe7 => 0xc0ac, 0xe8 => 0xc0ad, 0xe9 => 0xc0af, 0xea => 0xc0b0, 0xeb => 0xc0b3, 0xec => 0xc0b4, 0xed => 0xc0b5, 0xee => 0xc0b6, 0xef => 0xc0bc, 0xf0 => 0xc0bd, 0xf1 => 0xc0bf, 0xf2 => 0xc0c0, 0xf3 => 0xc0c1, 0xf4 => 0xc0c5, 0xf5 => 0xc0c8, 0xf6 => 0xc0c9, 0xf7 => 0xc0cc, 0xf8 => 0xc0d0, 0xf9 => 0xc0d8, 0xfa => 0xc0d9, 0xfb => 0xc0db, 0xfc => 0xc0dc, 0xfd => 0xc0dd, 0xfe => 0xc0e4, }, 0xbc => { 0xa1 => 0xc0e5, 0xa2 => 0xc0e8, 0xa3 => 0xc0ec, 0xa4 => 0xc0f4, 0xa5 => 0xc0f5, 0xa6 => 0xc0f7, 0xa7 => 0xc0f9, 0xa8 => 0xc100, 0xa9 => 0xc104, 0xaa => 0xc108, 0xab => 0xc110, 0xac => 0xc115, 0xad => 0xc11c, 0xae => 0xc11d, 0xaf => 0xc11e, 0xb0 => 0xc11f, 0xb1 => 0xc120, 0xb2 => 0xc123, 0xb3 => 0xc124, 0xb4 => 0xc126, 0xb5 => 0xc127, 0xb6 => 0xc12c, 0xb7 => 0xc12d, 0xb8 => 0xc12f, 0xb9 => 0xc130, 0xba => 0xc131, 0xbb => 0xc136, 0xbc => 0xc138, 0xbd => 0xc139, 0xbe => 0xc13c, 0xbf => 0xc140, 0xc0 => 0xc148, 0xc1 => 0xc149, 0xc2 => 0xc14b, 0xc3 => 0xc14c, 0xc4 => 0xc14d, 0xc5 => 0xc154, 0xc6 => 0xc155, 0xc7 => 0xc158, 0xc8 => 0xc15c, 0xc9 => 0xc164, 0xca => 0xc165, 0xcb => 0xc167, 0xcc => 0xc168, 0xcd => 0xc169, 0xce => 0xc170, 0xcf => 0xc174, 0xd0 => 0xc178, 0xd1 => 0xc185, 0xd2 => 0xc18c, 0xd3 => 0xc18d, 0xd4 => 0xc18e, 0xd5 => 0xc190, 0xd6 => 0xc194, 0xd7 => 0xc196, 0xd8 => 0xc19c, 0xd9 => 0xc19d, 0xda => 0xc19f, 0xdb => 0xc1a1, 0xdc => 0xc1a5, 0xdd => 0xc1a8, 0xde => 0xc1a9, 0xdf => 0xc1ac, 0xe0 => 0xc1b0, 0xe1 => 0xc1bd, 0xe2 => 0xc1c4, 0xe3 => 0xc1c8, 0xe4 => 0xc1cc, 0xe5 => 0xc1d4, 0xe6 => 0xc1d7, 0xe7 => 0xc1d8, 0xe8 => 0xc1e0, 0xe9 => 0xc1e4, 0xea => 0xc1e8, 0xeb => 0xc1f0, 0xec => 0xc1f1, 0xed => 0xc1f3, 0xee => 0xc1fc, 0xef => 0xc1fd, 0xf0 => 0xc200, 0xf1 => 0xc204, 0xf2 => 0xc20c, 0xf3 => 0xc20d, 0xf4 => 0xc20f, 0xf5 => 0xc211, 0xf6 => 0xc218, 0xf7 => 0xc219, 0xf8 => 0xc21c, 0xf9 => 0xc21f, 0xfa => 0xc220, 0xfb => 0xc228, 0xfc => 0xc229, 0xfd => 0xc22b, 0xfe => 0xc22d, }, 0xbd => { 0xa1 => 0xc22f, 0xa2 => 0xc231, 0xa3 => 0xc232, 0xa4 => 0xc234, 0xa5 => 0xc248, 0xa6 => 0xc250, 0xa7 => 0xc251, 0xa8 => 0xc254, 0xa9 => 0xc258, 0xaa => 0xc260, 0xab => 0xc265, 0xac => 0xc26c, 0xad => 0xc26d, 0xae => 0xc270, 0xaf => 0xc274, 0xb0 => 0xc27c, 0xb1 => 0xc27d, 0xb2 => 0xc27f, 0xb3 => 0xc281, 0xb4 => 0xc288, 0xb5 => 0xc289, 0xb6 => 0xc290, 0xb7 => 0xc298, 0xb8 => 0xc29b, 0xb9 => 0xc29d, 0xba => 0xc2a4, 0xbb => 0xc2a5, 0xbc => 0xc2a8, 0xbd => 0xc2ac, 0xbe => 0xc2ad, 0xbf => 0xc2b4, 0xc0 => 0xc2b5, 0xc1 => 0xc2b7, 0xc2 => 0xc2b9, 0xc3 => 0xc2dc, 0xc4 => 0xc2dd, 0xc5 => 0xc2e0, 0xc6 => 0xc2e3, 0xc7 => 0xc2e4, 0xc8 => 0xc2eb, 0xc9 => 0xc2ec, 0xca => 0xc2ed, 0xcb => 0xc2ef, 0xcc => 0xc2f1, 0xcd => 0xc2f6, 0xce => 0xc2f8, 0xcf => 0xc2f9, 0xd0 => 0xc2fb, 0xd1 => 0xc2fc, 0xd2 => 0xc300, 0xd3 => 0xc308, 0xd4 => 0xc309, 0xd5 => 0xc30c, 0xd6 => 0xc30d, 0xd7 => 0xc313, 0xd8 => 0xc314, 0xd9 => 0xc315, 0xda => 0xc318, 0xdb => 0xc31c, 0xdc => 0xc324, 0xdd => 0xc325, 0xde => 0xc328, 0xdf => 0xc329, 0xe0 => 0xc345, 0xe1 => 0xc368, 0xe2 => 0xc369, 0xe3 => 0xc36c, 0xe4 => 0xc370, 0xe5 => 0xc372, 0xe6 => 0xc378, 0xe7 => 0xc379, 0xe8 => 0xc37c, 0xe9 => 0xc37d, 0xea => 0xc384, 0xeb => 0xc388, 0xec => 0xc38c, 0xed => 0xc3c0, 0xee => 0xc3d8, 0xef => 0xc3d9, 0xf0 => 0xc3dc, 0xf1 => 0xc3df, 0xf2 => 0xc3e0, 0xf3 => 0xc3e2, 0xf4 => 0xc3e8, 0xf5 => 0xc3e9, 0xf6 => 0xc3ed, 0xf7 => 0xc3f4, 0xf8 => 0xc3f5, 0xf9 => 0xc3f8, 0xfa => 0xc408, 0xfb => 0xc410, 0xfc => 0xc424, 0xfd => 0xc42c, 0xfe => 0xc430, }, 0xbe => { 0xa1 => 0xc434, 0xa2 => 0xc43c, 0xa3 => 0xc43d, 0xa4 => 0xc448, 0xa5 => 0xc464, 0xa6 => 0xc465, 0xa7 => 0xc468, 0xa8 => 0xc46c, 0xa9 => 0xc474, 0xaa => 0xc475, 0xab => 0xc479, 0xac => 0xc480, 0xad => 0xc494, 0xae => 0xc49c, 0xaf => 0xc4b8, 0xb0 => 0xc4bc, 0xb1 => 0xc4e9, 0xb2 => 0xc4f0, 0xb3 => 0xc4f1, 0xb4 => 0xc4f4, 0xb5 => 0xc4f8, 0xb6 => 0xc4fa, 0xb7 => 0xc4ff, 0xb8 => 0xc500, 0xb9 => 0xc501, 0xba => 0xc50c, 0xbb => 0xc510, 0xbc => 0xc514, 0xbd => 0xc51c, 0xbe => 0xc528, 0xbf => 0xc529, 0xc0 => 0xc52c, 0xc1 => 0xc530, 0xc2 => 0xc538, 0xc3 => 0xc539, 0xc4 => 0xc53b, 0xc5 => 0xc53d, 0xc6 => 0xc544, 0xc7 => 0xc545, 0xc8 => 0xc548, 0xc9 => 0xc549, 0xca => 0xc54a, 0xcb => 0xc54c, 0xcc => 0xc54d, 0xcd => 0xc54e, 0xce => 0xc553, 0xcf => 0xc554, 0xd0 => 0xc555, 0xd1 => 0xc557, 0xd2 => 0xc558, 0xd3 => 0xc559, 0xd4 => 0xc55d, 0xd5 => 0xc55e, 0xd6 => 0xc560, 0xd7 => 0xc561, 0xd8 => 0xc564, 0xd9 => 0xc568, 0xda => 0xc570, 0xdb => 0xc571, 0xdc => 0xc573, 0xdd => 0xc574, 0xde => 0xc575, 0xdf => 0xc57c, 0xe0 => 0xc57d, 0xe1 => 0xc580, 0xe2 => 0xc584, 0xe3 => 0xc587, 0xe4 => 0xc58c, 0xe5 => 0xc58d, 0xe6 => 0xc58f, 0xe7 => 0xc591, 0xe8 => 0xc595, 0xe9 => 0xc597, 0xea => 0xc598, 0xeb => 0xc59c, 0xec => 0xc5a0, 0xed => 0xc5a9, 0xee => 0xc5b4, 0xef => 0xc5b5, 0xf0 => 0xc5b8, 0xf1 => 0xc5b9, 0xf2 => 0xc5bb, 0xf3 => 0xc5bc, 0xf4 => 0xc5bd, 0xf5 => 0xc5be, 0xf6 => 0xc5c4, 0xf7 => 0xc5c5, 0xf8 => 0xc5c6, 0xf9 => 0xc5c7, 0xfa => 0xc5c8, 0xfb => 0xc5c9, 0xfc => 0xc5ca, 0xfd => 0xc5cc, 0xfe => 0xc5ce, }, 0xbf => { 0xa1 => 0xc5d0, 0xa2 => 0xc5d1, 0xa3 => 0xc5d4, 0xa4 => 0xc5d8, 0xa5 => 0xc5e0, 0xa6 => 0xc5e1, 0xa7 => 0xc5e3, 0xa8 => 0xc5e5, 0xa9 => 0xc5ec, 0xaa => 0xc5ed, 0xab => 0xc5ee, 0xac => 0xc5f0, 0xad => 0xc5f4, 0xae => 0xc5f6, 0xaf => 0xc5f7, 0xb0 => 0xc5fc, 0xb1 => 0xc5fd, 0xb2 => 0xc5fe, 0xb3 => 0xc5ff, 0xb4 => 0xc600, 0xb5 => 0xc601, 0xb6 => 0xc605, 0xb7 => 0xc606, 0xb8 => 0xc607, 0xb9 => 0xc608, 0xba => 0xc60c, 0xbb => 0xc610, 0xbc => 0xc618, 0xbd => 0xc619, 0xbe => 0xc61b, 0xbf => 0xc61c, 0xc0 => 0xc624, 0xc1 => 0xc625, 0xc2 => 0xc628, 0xc3 => 0xc62c, 0xc4 => 0xc62d, 0xc5 => 0xc62e, 0xc6 => 0xc630, 0xc7 => 0xc633, 0xc8 => 0xc634, 0xc9 => 0xc635, 0xca => 0xc637, 0xcb => 0xc639, 0xcc => 0xc63b, 0xcd => 0xc640, 0xce => 0xc641, 0xcf => 0xc644, 0xd0 => 0xc648, 0xd1 => 0xc650, 0xd2 => 0xc651, 0xd3 => 0xc653, 0xd4 => 0xc654, 0xd5 => 0xc655, 0xd6 => 0xc65c, 0xd7 => 0xc65d, 0xd8 => 0xc660, 0xd9 => 0xc66c, 0xda => 0xc66f, 0xdb => 0xc671, 0xdc => 0xc678, 0xdd => 0xc679, 0xde => 0xc67c, 0xdf => 0xc680, 0xe0 => 0xc688, 0xe1 => 0xc689, 0xe2 => 0xc68b, 0xe3 => 0xc68d, 0xe4 => 0xc694, 0xe5 => 0xc695, 0xe6 => 0xc698, 0xe7 => 0xc69c, 0xe8 => 0xc6a4, 0xe9 => 0xc6a5, 0xea => 0xc6a7, 0xeb => 0xc6a9, 0xec => 0xc6b0, 0xed => 0xc6b1, 0xee => 0xc6b4, 0xef => 0xc6b8, 0xf0 => 0xc6b9, 0xf1 => 0xc6ba, 0xf2 => 0xc6c0, 0xf3 => 0xc6c1, 0xf4 => 0xc6c3, 0xf5 => 0xc6c5, 0xf6 => 0xc6cc, 0xf7 => 0xc6cd, 0xf8 => 0xc6d0, 0xf9 => 0xc6d4, 0xfa => 0xc6dc, 0xfb => 0xc6dd, 0xfc => 0xc6e0, 0xfd => 0xc6e1, 0xfe => 0xc6e8, }, 0xc0 => { 0xa1 => 0xc6e9, 0xa2 => 0xc6ec, 0xa3 => 0xc6f0, 0xa4 => 0xc6f8, 0xa5 => 0xc6f9, 0xa6 => 0xc6fd, 0xa7 => 0xc704, 0xa8 => 0xc705, 0xa9 => 0xc708, 0xaa => 0xc70c, 0xab => 0xc714, 0xac => 0xc715, 0xad => 0xc717, 0xae => 0xc719, 0xaf => 0xc720, 0xb0 => 0xc721, 0xb1 => 0xc724, 0xb2 => 0xc728, 0xb3 => 0xc730, 0xb4 => 0xc731, 0xb5 => 0xc733, 0xb6 => 0xc735, 0xb7 => 0xc737, 0xb8 => 0xc73c, 0xb9 => 0xc73d, 0xba => 0xc740, 0xbb => 0xc744, 0xbc => 0xc74a, 0xbd => 0xc74c, 0xbe => 0xc74d, 0xbf => 0xc74f, 0xc0 => 0xc751, 0xc1 => 0xc752, 0xc2 => 0xc753, 0xc3 => 0xc754, 0xc4 => 0xc755, 0xc5 => 0xc756, 0xc6 => 0xc757, 0xc7 => 0xc758, 0xc8 => 0xc75c, 0xc9 => 0xc760, 0xca => 0xc768, 0xcb => 0xc76b, 0xcc => 0xc774, 0xcd => 0xc775, 0xce => 0xc778, 0xcf => 0xc77c, 0xd0 => 0xc77d, 0xd1 => 0xc77e, 0xd2 => 0xc783, 0xd3 => 0xc784, 0xd4 => 0xc785, 0xd5 => 0xc787, 0xd6 => 0xc788, 0xd7 => 0xc789, 0xd8 => 0xc78a, 0xd9 => 0xc78e, 0xda => 0xc790, 0xdb => 0xc791, 0xdc => 0xc794, 0xdd => 0xc796, 0xde => 0xc797, 0xdf => 0xc798, 0xe0 => 0xc79a, 0xe1 => 0xc7a0, 0xe2 => 0xc7a1, 0xe3 => 0xc7a3, 0xe4 => 0xc7a4, 0xe5 => 0xc7a5, 0xe6 => 0xc7a6, 0xe7 => 0xc7ac, 0xe8 => 0xc7ad, 0xe9 => 0xc7b0, 0xea => 0xc7b4, 0xeb => 0xc7bc, 0xec => 0xc7bd, 0xed => 0xc7bf, 0xee => 0xc7c0, 0xef => 0xc7c1, 0xf0 => 0xc7c8, 0xf1 => 0xc7c9, 0xf2 => 0xc7cc, 0xf3 => 0xc7ce, 0xf4 => 0xc7d0, 0xf5 => 0xc7d8, 0xf6 => 0xc7dd, 0xf7 => 0xc7e4, 0xf8 => 0xc7e8, 0xf9 => 0xc7ec, 0xfa => 0xc800, 0xfb => 0xc801, 0xfc => 0xc804, 0xfd => 0xc808, 0xfe => 0xc80a, }, 0xc1 => { 0xa1 => 0xc810, 0xa2 => 0xc811, 0xa3 => 0xc813, 0xa4 => 0xc815, 0xa5 => 0xc816, 0xa6 => 0xc81c, 0xa7 => 0xc81d, 0xa8 => 0xc820, 0xa9 => 0xc824, 0xaa => 0xc82c, 0xab => 0xc82d, 0xac => 0xc82f, 0xad => 0xc831, 0xae => 0xc838, 0xaf => 0xc83c, 0xb0 => 0xc840, 0xb1 => 0xc848, 0xb2 => 0xc849, 0xb3 => 0xc84c, 0xb4 => 0xc84d, 0xb5 => 0xc854, 0xb6 => 0xc870, 0xb7 => 0xc871, 0xb8 => 0xc874, 0xb9 => 0xc878, 0xba => 0xc87a, 0xbb => 0xc880, 0xbc => 0xc881, 0xbd => 0xc883, 0xbe => 0xc885, 0xbf => 0xc886, 0xc0 => 0xc887, 0xc1 => 0xc88b, 0xc2 => 0xc88c, 0xc3 => 0xc88d, 0xc4 => 0xc894, 0xc5 => 0xc89d, 0xc6 => 0xc89f, 0xc7 => 0xc8a1, 0xc8 => 0xc8a8, 0xc9 => 0xc8bc, 0xca => 0xc8bd, 0xcb => 0xc8c4, 0xcc => 0xc8c8, 0xcd => 0xc8cc, 0xce => 0xc8d4, 0xcf => 0xc8d5, 0xd0 => 0xc8d7, 0xd1 => 0xc8d9, 0xd2 => 0xc8e0, 0xd3 => 0xc8e1, 0xd4 => 0xc8e4, 0xd5 => 0xc8f5, 0xd6 => 0xc8fc, 0xd7 => 0xc8fd, 0xd8 => 0xc900, 0xd9 => 0xc904, 0xda => 0xc905, 0xdb => 0xc906, 0xdc => 0xc90c, 0xdd => 0xc90d, 0xde => 0xc90f, 0xdf => 0xc911, 0xe0 => 0xc918, 0xe1 => 0xc92c, 0xe2 => 0xc934, 0xe3 => 0xc950, 0xe4 => 0xc951, 0xe5 => 0xc954, 0xe6 => 0xc958, 0xe7 => 0xc960, 0xe8 => 0xc961, 0xe9 => 0xc963, 0xea => 0xc96c, 0xeb => 0xc970, 0xec => 0xc974, 0xed => 0xc97c, 0xee => 0xc988, 0xef => 0xc989, 0xf0 => 0xc98c, 0xf1 => 0xc990, 0xf2 => 0xc998, 0xf3 => 0xc999, 0xf4 => 0xc99b, 0xf5 => 0xc99d, 0xf6 => 0xc9c0, 0xf7 => 0xc9c1, 0xf8 => 0xc9c4, 0xf9 => 0xc9c7, 0xfa => 0xc9c8, 0xfb => 0xc9ca, 0xfc => 0xc9d0, 0xfd => 0xc9d1, 0xfe => 0xc9d3, }, 0xc2 => { 0xa1 => 0xc9d5, 0xa2 => 0xc9d6, 0xa3 => 0xc9d9, 0xa4 => 0xc9da, 0xa5 => 0xc9dc, 0xa6 => 0xc9dd, 0xa7 => 0xc9e0, 0xa8 => 0xc9e2, 0xa9 => 0xc9e4, 0xaa => 0xc9e7, 0xab => 0xc9ec, 0xac => 0xc9ed, 0xad => 0xc9ef, 0xae => 0xc9f0, 0xaf => 0xc9f1, 0xb0 => 0xc9f8, 0xb1 => 0xc9f9, 0xb2 => 0xc9fc, 0xb3 => 0xca00, 0xb4 => 0xca08, 0xb5 => 0xca09, 0xb6 => 0xca0b, 0xb7 => 0xca0c, 0xb8 => 0xca0d, 0xb9 => 0xca14, 0xba => 0xca18, 0xbb => 0xca29, 0xbc => 0xca4c, 0xbd => 0xca4d, 0xbe => 0xca50, 0xbf => 0xca54, 0xc0 => 0xca5c, 0xc1 => 0xca5d, 0xc2 => 0xca5f, 0xc3 => 0xca60, 0xc4 => 0xca61, 0xc5 => 0xca68, 0xc6 => 0xca7d, 0xc7 => 0xca84, 0xc8 => 0xca98, 0xc9 => 0xcabc, 0xca => 0xcabd, 0xcb => 0xcac0, 0xcc => 0xcac4, 0xcd => 0xcacc, 0xce => 0xcacd, 0xcf => 0xcacf, 0xd0 => 0xcad1, 0xd1 => 0xcad3, 0xd2 => 0xcad8, 0xd3 => 0xcad9, 0xd4 => 0xcae0, 0xd5 => 0xcaec, 0xd6 => 0xcaf4, 0xd7 => 0xcb08, 0xd8 => 0xcb10, 0xd9 => 0xcb14, 0xda => 0xcb18, 0xdb => 0xcb20, 0xdc => 0xcb21, 0xdd => 0xcb41, 0xde => 0xcb48, 0xdf => 0xcb49, 0xe0 => 0xcb4c, 0xe1 => 0xcb50, 0xe2 => 0xcb58, 0xe3 => 0xcb59, 0xe4 => 0xcb5d, 0xe5 => 0xcb64, 0xe6 => 0xcb78, 0xe7 => 0xcb79, 0xe8 => 0xcb9c, 0xe9 => 0xcbb8, 0xea => 0xcbd4, 0xeb => 0xcbe4, 0xec => 0xcbe7, 0xed => 0xcbe9, 0xee => 0xcc0c, 0xef => 0xcc0d, 0xf0 => 0xcc10, 0xf1 => 0xcc14, 0xf2 => 0xcc1c, 0xf3 => 0xcc1d, 0xf4 => 0xcc21, 0xf5 => 0xcc22, 0xf6 => 0xcc27, 0xf7 => 0xcc28, 0xf8 => 0xcc29, 0xf9 => 0xcc2c, 0xfa => 0xcc2e, 0xfb => 0xcc30, 0xfc => 0xcc38, 0xfd => 0xcc39, 0xfe => 0xcc3b, }, 0xc3 => { 0xa1 => 0xcc3c, 0xa2 => 0xcc3d, 0xa3 => 0xcc3e, 0xa4 => 0xcc44, 0xa5 => 0xcc45, 0xa6 => 0xcc48, 0xa7 => 0xcc4c, 0xa8 => 0xcc54, 0xa9 => 0xcc55, 0xaa => 0xcc57, 0xab => 0xcc58, 0xac => 0xcc59, 0xad => 0xcc60, 0xae => 0xcc64, 0xaf => 0xcc66, 0xb0 => 0xcc68, 0xb1 => 0xcc70, 0xb2 => 0xcc75, 0xb3 => 0xcc98, 0xb4 => 0xcc99, 0xb5 => 0xcc9c, 0xb6 => 0xcca0, 0xb7 => 0xcca8, 0xb8 => 0xcca9, 0xb9 => 0xccab, 0xba => 0xccac, 0xbb => 0xccad, 0xbc => 0xccb4, 0xbd => 0xccb5, 0xbe => 0xccb8, 0xbf => 0xccbc, 0xc0 => 0xccc4, 0xc1 => 0xccc5, 0xc2 => 0xccc7, 0xc3 => 0xccc9, 0xc4 => 0xccd0, 0xc5 => 0xccd4, 0xc6 => 0xcce4, 0xc7 => 0xccec, 0xc8 => 0xccf0, 0xc9 => 0xcd01, 0xca => 0xcd08, 0xcb => 0xcd09, 0xcc => 0xcd0c, 0xcd => 0xcd10, 0xce => 0xcd18, 0xcf => 0xcd19, 0xd0 => 0xcd1b, 0xd1 => 0xcd1d, 0xd2 => 0xcd24, 0xd3 => 0xcd28, 0xd4 => 0xcd2c, 0xd5 => 0xcd39, 0xd6 => 0xcd5c, 0xd7 => 0xcd60, 0xd8 => 0xcd64, 0xd9 => 0xcd6c, 0xda => 0xcd6d, 0xdb => 0xcd6f, 0xdc => 0xcd71, 0xdd => 0xcd78, 0xde => 0xcd88, 0xdf => 0xcd94, 0xe0 => 0xcd95, 0xe1 => 0xcd98, 0xe2 => 0xcd9c, 0xe3 => 0xcda4, 0xe4 => 0xcda5, 0xe5 => 0xcda7, 0xe6 => 0xcda9, 0xe7 => 0xcdb0, 0xe8 => 0xcdc4, 0xe9 => 0xcdcc, 0xea => 0xcdd0, 0xeb => 0xcde8, 0xec => 0xcdec, 0xed => 0xcdf0, 0xee => 0xcdf8, 0xef => 0xcdf9, 0xf0 => 0xcdfb, 0xf1 => 0xcdfd, 0xf2 => 0xce04, 0xf3 => 0xce08, 0xf4 => 0xce0c, 0xf5 => 0xce14, 0xf6 => 0xce19, 0xf7 => 0xce20, 0xf8 => 0xce21, 0xf9 => 0xce24, 0xfa => 0xce28, 0xfb => 0xce30, 0xfc => 0xce31, 0xfd => 0xce33, 0xfe => 0xce35, }, 0xc4 => { 0xa1 => 0xce58, 0xa2 => 0xce59, 0xa3 => 0xce5c, 0xa4 => 0xce5f, 0xa5 => 0xce60, 0xa6 => 0xce61, 0xa7 => 0xce68, 0xa8 => 0xce69, 0xa9 => 0xce6b, 0xaa => 0xce6d, 0xab => 0xce74, 0xac => 0xce75, 0xad => 0xce78, 0xae => 0xce7c, 0xaf => 0xce84, 0xb0 => 0xce85, 0xb1 => 0xce87, 0xb2 => 0xce89, 0xb3 => 0xce90, 0xb4 => 0xce91, 0xb5 => 0xce94, 0xb6 => 0xce98, 0xb7 => 0xcea0, 0xb8 => 0xcea1, 0xb9 => 0xcea3, 0xba => 0xcea4, 0xbb => 0xcea5, 0xbc => 0xceac, 0xbd => 0xcead, 0xbe => 0xcec1, 0xbf => 0xcee4, 0xc0 => 0xcee5, 0xc1 => 0xcee8, 0xc2 => 0xceeb, 0xc3 => 0xceec, 0xc4 => 0xcef4, 0xc5 => 0xcef5, 0xc6 => 0xcef7, 0xc7 => 0xcef8, 0xc8 => 0xcef9, 0xc9 => 0xcf00, 0xca => 0xcf01, 0xcb => 0xcf04, 0xcc => 0xcf08, 0xcd => 0xcf10, 0xce => 0xcf11, 0xcf => 0xcf13, 0xd0 => 0xcf15, 0xd1 => 0xcf1c, 0xd2 => 0xcf20, 0xd3 => 0xcf24, 0xd4 => 0xcf2c, 0xd5 => 0xcf2d, 0xd6 => 0xcf2f, 0xd7 => 0xcf30, 0xd8 => 0xcf31, 0xd9 => 0xcf38, 0xda => 0xcf54, 0xdb => 0xcf55, 0xdc => 0xcf58, 0xdd => 0xcf5c, 0xde => 0xcf64, 0xdf => 0xcf65, 0xe0 => 0xcf67, 0xe1 => 0xcf69, 0xe2 => 0xcf70, 0xe3 => 0xcf71, 0xe4 => 0xcf74, 0xe5 => 0xcf78, 0xe6 => 0xcf80, 0xe7 => 0xcf85, 0xe8 => 0xcf8c, 0xe9 => 0xcfa1, 0xea => 0xcfa8, 0xeb => 0xcfb0, 0xec => 0xcfc4, 0xed => 0xcfe0, 0xee => 0xcfe1, 0xef => 0xcfe4, 0xf0 => 0xcfe8, 0xf1 => 0xcff0, 0xf2 => 0xcff1, 0xf3 => 0xcff3, 0xf4 => 0xcff5, 0xf5 => 0xcffc, 0xf6 => 0xd000, 0xf7 => 0xd004, 0xf8 => 0xd011, 0xf9 => 0xd018, 0xfa => 0xd02d, 0xfb => 0xd034, 0xfc => 0xd035, 0xfd => 0xd038, 0xfe => 0xd03c, }, 0xc5 => { 0xa1 => 0xd044, 0xa2 => 0xd045, 0xa3 => 0xd047, 0xa4 => 0xd049, 0xa5 => 0xd050, 0xa6 => 0xd054, 0xa7 => 0xd058, 0xa8 => 0xd060, 0xa9 => 0xd06c, 0xaa => 0xd06d, 0xab => 0xd070, 0xac => 0xd074, 0xad => 0xd07c, 0xae => 0xd07d, 0xaf => 0xd081, 0xb0 => 0xd0a4, 0xb1 => 0xd0a5, 0xb2 => 0xd0a8, 0xb3 => 0xd0ac, 0xb4 => 0xd0b4, 0xb5 => 0xd0b5, 0xb6 => 0xd0b7, 0xb7 => 0xd0b9, 0xb8 => 0xd0c0, 0xb9 => 0xd0c1, 0xba => 0xd0c4, 0xbb => 0xd0c8, 0xbc => 0xd0c9, 0xbd => 0xd0d0, 0xbe => 0xd0d1, 0xbf => 0xd0d3, 0xc0 => 0xd0d4, 0xc1 => 0xd0d5, 0xc2 => 0xd0dc, 0xc3 => 0xd0dd, 0xc4 => 0xd0e0, 0xc5 => 0xd0e4, 0xc6 => 0xd0ec, 0xc7 => 0xd0ed, 0xc8 => 0xd0ef, 0xc9 => 0xd0f0, 0xca => 0xd0f1, 0xcb => 0xd0f8, 0xcc => 0xd10d, 0xcd => 0xd130, 0xce => 0xd131, 0xcf => 0xd134, 0xd0 => 0xd138, 0xd1 => 0xd13a, 0xd2 => 0xd140, 0xd3 => 0xd141, 0xd4 => 0xd143, 0xd5 => 0xd144, 0xd6 => 0xd145, 0xd7 => 0xd14c, 0xd8 => 0xd14d, 0xd9 => 0xd150, 0xda => 0xd154, 0xdb => 0xd15c, 0xdc => 0xd15d, 0xdd => 0xd15f, 0xde => 0xd161, 0xdf => 0xd168, 0xe0 => 0xd16c, 0xe1 => 0xd17c, 0xe2 => 0xd184, 0xe3 => 0xd188, 0xe4 => 0xd1a0, 0xe5 => 0xd1a1, 0xe6 => 0xd1a4, 0xe7 => 0xd1a8, 0xe8 => 0xd1b0, 0xe9 => 0xd1b1, 0xea => 0xd1b3, 0xeb => 0xd1b5, 0xec => 0xd1ba, 0xed => 0xd1bc, 0xee => 0xd1c0, 0xef => 0xd1d8, 0xf0 => 0xd1f4, 0xf1 => 0xd1f8, 0xf2 => 0xd207, 0xf3 => 0xd209, 0xf4 => 0xd210, 0xf5 => 0xd22c, 0xf6 => 0xd22d, 0xf7 => 0xd230, 0xf8 => 0xd234, 0xf9 => 0xd23c, 0xfa => 0xd23d, 0xfb => 0xd23f, 0xfc => 0xd241, 0xfd => 0xd248, 0xfe => 0xd25c, }, 0xc6 => { 0xa1 => 0xd264, 0xa2 => 0xd280, 0xa3 => 0xd281, 0xa4 => 0xd284, 0xa5 => 0xd288, 0xa6 => 0xd290, 0xa7 => 0xd291, 0xa8 => 0xd295, 0xa9 => 0xd29c, 0xaa => 0xd2a0, 0xab => 0xd2a4, 0xac => 0xd2ac, 0xad => 0xd2b1, 0xae => 0xd2b8, 0xaf => 0xd2b9, 0xb0 => 0xd2bc, 0xb1 => 0xd2bf, 0xb2 => 0xd2c0, 0xb3 => 0xd2c2, 0xb4 => 0xd2c8, 0xb5 => 0xd2c9, 0xb6 => 0xd2cb, 0xb7 => 0xd2d4, 0xb8 => 0xd2d8, 0xb9 => 0xd2dc, 0xba => 0xd2e4, 0xbb => 0xd2e5, 0xbc => 0xd2f0, 0xbd => 0xd2f1, 0xbe => 0xd2f4, 0xbf => 0xd2f8, 0xc0 => 0xd300, 0xc1 => 0xd301, 0xc2 => 0xd303, 0xc3 => 0xd305, 0xc4 => 0xd30c, 0xc5 => 0xd30d, 0xc6 => 0xd30e, 0xc7 => 0xd310, 0xc8 => 0xd314, 0xc9 => 0xd316, 0xca => 0xd31c, 0xcb => 0xd31d, 0xcc => 0xd31f, 0xcd => 0xd320, 0xce => 0xd321, 0xcf => 0xd325, 0xd0 => 0xd328, 0xd1 => 0xd329, 0xd2 => 0xd32c, 0xd3 => 0xd330, 0xd4 => 0xd338, 0xd5 => 0xd339, 0xd6 => 0xd33b, 0xd7 => 0xd33c, 0xd8 => 0xd33d, 0xd9 => 0xd344, 0xda => 0xd345, 0xdb => 0xd37c, 0xdc => 0xd37d, 0xdd => 0xd380, 0xde => 0xd384, 0xdf => 0xd38c, 0xe0 => 0xd38d, 0xe1 => 0xd38f, 0xe2 => 0xd390, 0xe3 => 0xd391, 0xe4 => 0xd398, 0xe5 => 0xd399, 0xe6 => 0xd39c, 0xe7 => 0xd3a0, 0xe8 => 0xd3a8, 0xe9 => 0xd3a9, 0xea => 0xd3ab, 0xeb => 0xd3ad, 0xec => 0xd3b4, 0xed => 0xd3b8, 0xee => 0xd3bc, 0xef => 0xd3c4, 0xf0 => 0xd3c5, 0xf1 => 0xd3c8, 0xf2 => 0xd3c9, 0xf3 => 0xd3d0, 0xf4 => 0xd3d8, 0xf5 => 0xd3e1, 0xf6 => 0xd3e3, 0xf7 => 0xd3ec, 0xf8 => 0xd3ed, 0xf9 => 0xd3f0, 0xfa => 0xd3f4, 0xfb => 0xd3fc, 0xfc => 0xd3fd, 0xfd => 0xd3ff, 0xfe => 0xd401, }, 0xc7 => { 0xa1 => 0xd408, 0xa2 => 0xd41d, 0xa3 => 0xd440, 0xa4 => 0xd444, 0xa5 => 0xd45c, 0xa6 => 0xd460, 0xa7 => 0xd464, 0xa8 => 0xd46d, 0xa9 => 0xd46f, 0xaa => 0xd478, 0xab => 0xd479, 0xac => 0xd47c, 0xad => 0xd47f, 0xae => 0xd480, 0xaf => 0xd482, 0xb0 => 0xd488, 0xb1 => 0xd489, 0xb2 => 0xd48b, 0xb3 => 0xd48d, 0xb4 => 0xd494, 0xb5 => 0xd4a9, 0xb6 => 0xd4cc, 0xb7 => 0xd4d0, 0xb8 => 0xd4d4, 0xb9 => 0xd4dc, 0xba => 0xd4df, 0xbb => 0xd4e8, 0xbc => 0xd4ec, 0xbd => 0xd4f0, 0xbe => 0xd4f8, 0xbf => 0xd4fb, 0xc0 => 0xd4fd, 0xc1 => 0xd504, 0xc2 => 0xd508, 0xc3 => 0xd50c, 0xc4 => 0xd514, 0xc5 => 0xd515, 0xc6 => 0xd517, 0xc7 => 0xd53c, 0xc8 => 0xd53d, 0xc9 => 0xd540, 0xca => 0xd544, 0xcb => 0xd54c, 0xcc => 0xd54d, 0xcd => 0xd54f, 0xce => 0xd551, 0xcf => 0xd558, 0xd0 => 0xd559, 0xd1 => 0xd55c, 0xd2 => 0xd560, 0xd3 => 0xd565, 0xd4 => 0xd568, 0xd5 => 0xd569, 0xd6 => 0xd56b, 0xd7 => 0xd56d, 0xd8 => 0xd574, 0xd9 => 0xd575, 0xda => 0xd578, 0xdb => 0xd57c, 0xdc => 0xd584, 0xdd => 0xd585, 0xde => 0xd587, 0xdf => 0xd588, 0xe0 => 0xd589, 0xe1 => 0xd590, 0xe2 => 0xd5a5, 0xe3 => 0xd5c8, 0xe4 => 0xd5c9, 0xe5 => 0xd5cc, 0xe6 => 0xd5d0, 0xe7 => 0xd5d2, 0xe8 => 0xd5d8, 0xe9 => 0xd5d9, 0xea => 0xd5db, 0xeb => 0xd5dd, 0xec => 0xd5e4, 0xed => 0xd5e5, 0xee => 0xd5e8, 0xef => 0xd5ec, 0xf0 => 0xd5f4, 0xf1 => 0xd5f5, 0xf2 => 0xd5f7, 0xf3 => 0xd5f9, 0xf4 => 0xd600, 0xf5 => 0xd601, 0xf6 => 0xd604, 0xf7 => 0xd608, 0xf8 => 0xd610, 0xf9 => 0xd611, 0xfa => 0xd613, 0xfb => 0xd614, 0xfc => 0xd615, 0xfd => 0xd61c, 0xfe => 0xd620, }, 0xc8 => { 0xa1 => 0xd624, 0xa2 => 0xd62d, 0xa3 => 0xd638, 0xa4 => 0xd639, 0xa5 => 0xd63c, 0xa6 => 0xd640, 0xa7 => 0xd645, 0xa8 => 0xd648, 0xa9 => 0xd649, 0xaa => 0xd64b, 0xab => 0xd64d, 0xac => 0xd651, 0xad => 0xd654, 0xae => 0xd655, 0xaf => 0xd658, 0xb0 => 0xd65c, 0xb1 => 0xd667, 0xb2 => 0xd669, 0xb3 => 0xd670, 0xb4 => 0xd671, 0xb5 => 0xd674, 0xb6 => 0xd683, 0xb7 => 0xd685, 0xb8 => 0xd68c, 0xb9 => 0xd68d, 0xba => 0xd690, 0xbb => 0xd694, 0xbc => 0xd69d, 0xbd => 0xd69f, 0xbe => 0xd6a1, 0xbf => 0xd6a8, 0xc0 => 0xd6ac, 0xc1 => 0xd6b0, 0xc2 => 0xd6b9, 0xc3 => 0xd6bb, 0xc4 => 0xd6c4, 0xc5 => 0xd6c5, 0xc6 => 0xd6c8, 0xc7 => 0xd6cc, 0xc8 => 0xd6d1, 0xc9 => 0xd6d4, 0xca => 0xd6d7, 0xcb => 0xd6d9, 0xcc => 0xd6e0, 0xcd => 0xd6e4, 0xce => 0xd6e8, 0xcf => 0xd6f0, 0xd0 => 0xd6f5, 0xd1 => 0xd6fc, 0xd2 => 0xd6fd, 0xd3 => 0xd700, 0xd4 => 0xd704, 0xd5 => 0xd711, 0xd6 => 0xd718, 0xd7 => 0xd719, 0xd8 => 0xd71c, 0xd9 => 0xd720, 0xda => 0xd728, 0xdb => 0xd729, 0xdc => 0xd72b, 0xdd => 0xd72d, 0xde => 0xd734, 0xdf => 0xd735, 0xe0 => 0xd738, 0xe1 => 0xd73c, 0xe2 => 0xd744, 0xe3 => 0xd747, 0xe4 => 0xd749, 0xe5 => 0xd750, 0xe6 => 0xd751, 0xe7 => 0xd754, 0xe8 => 0xd756, 0xe9 => 0xd757, 0xea => 0xd758, 0xeb => 0xd759, 0xec => 0xd760, 0xed => 0xd761, 0xee => 0xd763, 0xef => 0xd765, 0xf0 => 0xd769, 0xf1 => 0xd76c, 0xf2 => 0xd770, 0xf3 => 0xd774, 0xf4 => 0xd77c, 0xf5 => 0xd77d, 0xf6 => 0xd781, 0xf7 => 0xd788, 0xf8 => 0xd789, 0xf9 => 0xd78c, 0xfa => 0xd790, 0xfb => 0xd798, 0xfc => 0xd799, 0xfd => 0xd79b, 0xfe => 0xd79d, }, 0xca => { 0xa1 => 0x4f3d, 0xa2 => 0x4f73, 0xa3 => 0x5047, 0xa4 => 0x50f9, 0xa5 => 0x52a0, 0xa6 => 0x53ef, 0xa7 => 0x5475, 0xa8 => 0x54e5, 0xa9 => 0x5609, 0xaa => 0x5ac1, 0xab => 0x5bb6, 0xac => 0x6687, 0xad => 0x67b6, 0xae => 0x67b7, 0xaf => 0x67ef, 0xb0 => 0x6b4c, 0xb1 => 0x73c2, 0xb2 => 0x75c2, 0xb3 => 0x7a3c, 0xb4 => 0x82db, 0xb5 => 0x8304, 0xb6 => 0x8857, 0xb7 => 0x8888, 0xb8 => 0x8a36, 0xb9 => 0x8cc8, 0xba => 0x8dcf, 0xbb => 0x8efb, 0xbc => 0x8fe6, 0xbd => 0x99d5, 0xbe => 0x523b, 0xbf => 0x5374, 0xc0 => 0x5404, 0xc1 => 0x606a, 0xc2 => 0x6164, 0xc3 => 0x6bbc, 0xc4 => 0x73cf, 0xc5 => 0x811a, 0xc6 => 0x89ba, 0xc7 => 0x89d2, 0xc8 => 0x95a3, 0xc9 => 0x4f83, 0xca => 0x520a, 0xcb => 0x58be, 0xcc => 0x5978, 0xcd => 0x59e6, 0xce => 0x5e72, 0xcf => 0x5e79, 0xd0 => 0x61c7, 0xd1 => 0x63c0, 0xd2 => 0x6746, 0xd3 => 0x67ec, 0xd4 => 0x687f, 0xd5 => 0x6f97, 0xd6 => 0x764e, 0xd7 => 0x770b, 0xd8 => 0x78f5, 0xd9 => 0x7a08, 0xda => 0x7aff, 0xdb => 0x7c21, 0xdc => 0x809d, 0xdd => 0x826e, 0xde => 0x8271, 0xdf => 0x8aeb, 0xe0 => 0x9593, 0xe1 => 0x4e6b, 0xe2 => 0x559d, 0xe3 => 0x66f7, 0xe4 => 0x6e34, 0xe5 => 0x78a3, 0xe6 => 0x7aed, 0xe7 => 0x845b, 0xe8 => 0x8910, 0xe9 => 0x874e, 0xea => 0x97a8, 0xeb => 0x52d8, 0xec => 0x574e, 0xed => 0x582a, 0xee => 0x5d4c, 0xef => 0x611f, 0xf0 => 0x61be, 0xf1 => 0x6221, 0xf2 => 0x6562, 0xf3 => 0x67d1, 0xf4 => 0x6a44, 0xf5 => 0x6e1b, 0xf6 => 0x7518, 0xf7 => 0x75b3, 0xf8 => 0x76e3, 0xf9 => 0x77b0, 0xfa => 0x7d3a, 0xfb => 0x90af, 0xfc => 0x9451, 0xfd => 0x9452, 0xfe => 0x9f95, }, 0xcb => { 0xa1 => 0x5323, 0xa2 => 0x5cac, 0xa3 => 0x7532, 0xa4 => 0x80db, 0xa5 => 0x9240, 0xa6 => 0x9598, 0xa7 => 0x525b, 0xa8 => 0x5808, 0xa9 => 0x59dc, 0xaa => 0x5ca1, 0xab => 0x5d17, 0xac => 0x5eb7, 0xad => 0x5f3a, 0xae => 0x5f4a, 0xaf => 0x6177, 0xb0 => 0x6c5f, 0xb1 => 0x757a, 0xb2 => 0x7586, 0xb3 => 0x7ce0, 0xb4 => 0x7d73, 0xb5 => 0x7db1, 0xb6 => 0x7f8c, 0xb7 => 0x8154, 0xb8 => 0x8221, 0xb9 => 0x8591, 0xba => 0x8941, 0xbb => 0x8b1b, 0xbc => 0x92fc, 0xbd => 0x964d, 0xbe => 0x9c47, 0xbf => 0x4ecb, 0xc0 => 0x4ef7, 0xc1 => 0x500b, 0xc2 => 0x51f1, 0xc3 => 0x584f, 0xc4 => 0x6137, 0xc5 => 0x613e, 0xc6 => 0x6168, 0xc7 => 0x6539, 0xc8 => 0x69ea, 0xc9 => 0x6f11, 0xca => 0x75a5, 0xcb => 0x7686, 0xcc => 0x76d6, 0xcd => 0x7b87, 0xce => 0x82a5, 0xcf => 0x84cb, 0xd0 => 0xf900, 0xd1 => 0x93a7, 0xd2 => 0x958b, 0xd3 => 0x5580, 0xd4 => 0x5ba2, 0xd5 => 0x5751, 0xd6 => 0xf901, 0xd7 => 0x7cb3, 0xd8 => 0x7fb9, 0xd9 => 0x91b5, 0xda => 0x5028, 0xdb => 0x53bb, 0xdc => 0x5c45, 0xdd => 0x5de8, 0xde => 0x62d2, 0xdf => 0x636e, 0xe0 => 0x64da, 0xe1 => 0x64e7, 0xe2 => 0x6e20, 0xe3 => 0x70ac, 0xe4 => 0x795b, 0xe5 => 0x8ddd, 0xe6 => 0x8e1e, 0xe7 => 0xf902, 0xe8 => 0x907d, 0xe9 => 0x9245, 0xea => 0x92f8, 0xeb => 0x4e7e, 0xec => 0x4ef6, 0xed => 0x5065, 0xee => 0x5dfe, 0xef => 0x5efa, 0xf0 => 0x6106, 0xf1 => 0x6957, 0xf2 => 0x8171, 0xf3 => 0x8654, 0xf4 => 0x8e47, 0xf5 => 0x9375, 0xf6 => 0x9a2b, 0xf7 => 0x4e5e, 0xf8 => 0x5091, 0xf9 => 0x6770, 0xfa => 0x6840, 0xfb => 0x5109, 0xfc => 0x528d, 0xfd => 0x5292, 0xfe => 0x6aa2, }, 0xcc => { 0xa1 => 0x77bc, 0xa2 => 0x9210, 0xa3 => 0x9ed4, 0xa4 => 0x52ab, 0xa5 => 0x602f, 0xa6 => 0x8ff2, 0xa7 => 0x5048, 0xa8 => 0x61a9, 0xa9 => 0x63ed, 0xaa => 0x64ca, 0xab => 0x683c, 0xac => 0x6a84, 0xad => 0x6fc0, 0xae => 0x8188, 0xaf => 0x89a1, 0xb0 => 0x9694, 0xb1 => 0x5805, 0xb2 => 0x727d, 0xb3 => 0x72ac, 0xb4 => 0x7504, 0xb5 => 0x7d79, 0xb6 => 0x7e6d, 0xb7 => 0x80a9, 0xb8 => 0x898b, 0xb9 => 0x8b74, 0xba => 0x9063, 0xbb => 0x9d51, 0xbc => 0x6289, 0xbd => 0x6c7a, 0xbe => 0x6f54, 0xbf => 0x7d50, 0xc0 => 0x7f3a, 0xc1 => 0x8a23, 0xc2 => 0x517c, 0xc3 => 0x614a, 0xc4 => 0x7b9d, 0xc5 => 0x8b19, 0xc6 => 0x9257, 0xc7 => 0x938c, 0xc8 => 0x4eac, 0xc9 => 0x4fd3, 0xca => 0x501e, 0xcb => 0x50be, 0xcc => 0x5106, 0xcd => 0x52c1, 0xce => 0x52cd, 0xcf => 0x537f, 0xd0 => 0x5770, 0xd1 => 0x5883, 0xd2 => 0x5e9a, 0xd3 => 0x5f91, 0xd4 => 0x6176, 0xd5 => 0x61ac, 0xd6 => 0x64ce, 0xd7 => 0x656c, 0xd8 => 0x666f, 0xd9 => 0x66bb, 0xda => 0x66f4, 0xdb => 0x6897, 0xdc => 0x6d87, 0xdd => 0x7085, 0xde => 0x70f1, 0xdf => 0x749f, 0xe0 => 0x74a5, 0xe1 => 0x74ca, 0xe2 => 0x75d9, 0xe3 => 0x786c, 0xe4 => 0x78ec, 0xe5 => 0x7adf, 0xe6 => 0x7af6, 0xe7 => 0x7d45, 0xe8 => 0x7d93, 0xe9 => 0x8015, 0xea => 0x803f, 0xeb => 0x811b, 0xec => 0x8396, 0xed => 0x8b66, 0xee => 0x8f15, 0xef => 0x9015, 0xf0 => 0x93e1, 0xf1 => 0x9803, 0xf2 => 0x9838, 0xf3 => 0x9a5a, 0xf4 => 0x9be8, 0xf5 => 0x4fc2, 0xf6 => 0x5553, 0xf7 => 0x583a, 0xf8 => 0x5951, 0xf9 => 0x5b63, 0xfa => 0x5c46, 0xfb => 0x60b8, 0xfc => 0x6212, 0xfd => 0x6842, 0xfe => 0x68b0, }, 0xcd => { 0xa1 => 0x68e8, 0xa2 => 0x6eaa, 0xa3 => 0x754c, 0xa4 => 0x7678, 0xa5 => 0x78ce, 0xa6 => 0x7a3d, 0xa7 => 0x7cfb, 0xa8 => 0x7e6b, 0xa9 => 0x7e7c, 0xaa => 0x8a08, 0xab => 0x8aa1, 0xac => 0x8c3f, 0xad => 0x968e, 0xae => 0x9dc4, 0xaf => 0x53e4, 0xb0 => 0x53e9, 0xb1 => 0x544a, 0xb2 => 0x5471, 0xb3 => 0x56fa, 0xb4 => 0x59d1, 0xb5 => 0x5b64, 0xb6 => 0x5c3b, 0xb7 => 0x5eab, 0xb8 => 0x62f7, 0xb9 => 0x6537, 0xba => 0x6545, 0xbb => 0x6572, 0xbc => 0x66a0, 0xbd => 0x67af, 0xbe => 0x69c1, 0xbf => 0x6cbd, 0xc0 => 0x75fc, 0xc1 => 0x7690, 0xc2 => 0x777e, 0xc3 => 0x7a3f, 0xc4 => 0x7f94, 0xc5 => 0x8003, 0xc6 => 0x80a1, 0xc7 => 0x818f, 0xc8 => 0x82e6, 0xc9 => 0x82fd, 0xca => 0x83f0, 0xcb => 0x85c1, 0xcc => 0x8831, 0xcd => 0x88b4, 0xce => 0x8aa5, 0xcf => 0xf903, 0xd0 => 0x8f9c, 0xd1 => 0x932e, 0xd2 => 0x96c7, 0xd3 => 0x9867, 0xd4 => 0x9ad8, 0xd5 => 0x9f13, 0xd6 => 0x54ed, 0xd7 => 0x659b, 0xd8 => 0x66f2, 0xd9 => 0x688f, 0xda => 0x7a40, 0xdb => 0x8c37, 0xdc => 0x9d60, 0xdd => 0x56f0, 0xde => 0x5764, 0xdf => 0x5d11, 0xe0 => 0x6606, 0xe1 => 0x68b1, 0xe2 => 0x68cd, 0xe3 => 0x6efe, 0xe4 => 0x7428, 0xe5 => 0x889e, 0xe6 => 0x9be4, 0xe7 => 0x6c68, 0xe8 => 0xf904, 0xe9 => 0x9aa8, 0xea => 0x4f9b, 0xeb => 0x516c, 0xec => 0x5171, 0xed => 0x529f, 0xee => 0x5b54, 0xef => 0x5de5, 0xf0 => 0x6050, 0xf1 => 0x606d, 0xf2 => 0x62f1, 0xf3 => 0x63a7, 0xf4 => 0x653b, 0xf5 => 0x73d9, 0xf6 => 0x7a7a, 0xf7 => 0x86a3, 0xf8 => 0x8ca2, 0xf9 => 0x978f, 0xfa => 0x4e32, 0xfb => 0x5be1, 0xfc => 0x6208, 0xfd => 0x679c, 0xfe => 0x74dc, }, 0xce => { 0xa1 => 0x79d1, 0xa2 => 0x83d3, 0xa3 => 0x8a87, 0xa4 => 0x8ab2, 0xa5 => 0x8de8, 0xa6 => 0x904e, 0xa7 => 0x934b, 0xa8 => 0x9846, 0xa9 => 0x5ed3, 0xaa => 0x69e8, 0xab => 0x85ff, 0xac => 0x90ed, 0xad => 0xf905, 0xae => 0x51a0, 0xaf => 0x5b98, 0xb0 => 0x5bec, 0xb1 => 0x6163, 0xb2 => 0x68fa, 0xb3 => 0x6b3e, 0xb4 => 0x704c, 0xb5 => 0x742f, 0xb6 => 0x74d8, 0xb7 => 0x7ba1, 0xb8 => 0x7f50, 0xb9 => 0x83c5, 0xba => 0x89c0, 0xbb => 0x8cab, 0xbc => 0x95dc, 0xbd => 0x9928, 0xbe => 0x522e, 0xbf => 0x605d, 0xc0 => 0x62ec, 0xc1 => 0x9002, 0xc2 => 0x4f8a, 0xc3 => 0x5149, 0xc4 => 0x5321, 0xc5 => 0x58d9, 0xc6 => 0x5ee3, 0xc7 => 0x66e0, 0xc8 => 0x6d38, 0xc9 => 0x709a, 0xca => 0x72c2, 0xcb => 0x73d6, 0xcc => 0x7b50, 0xcd => 0x80f1, 0xce => 0x945b, 0xcf => 0x5366, 0xd0 => 0x639b, 0xd1 => 0x7f6b, 0xd2 => 0x4e56, 0xd3 => 0x5080, 0xd4 => 0x584a, 0xd5 => 0x58de, 0xd6 => 0x602a, 0xd7 => 0x6127, 0xd8 => 0x62d0, 0xd9 => 0x69d0, 0xda => 0x9b41, 0xdb => 0x5b8f, 0xdc => 0x7d18, 0xdd => 0x80b1, 0xde => 0x8f5f, 0xdf => 0x4ea4, 0xe0 => 0x50d1, 0xe1 => 0x54ac, 0xe2 => 0x55ac, 0xe3 => 0x5b0c, 0xe4 => 0x5da0, 0xe5 => 0x5de7, 0xe6 => 0x652a, 0xe7 => 0x654e, 0xe8 => 0x6821, 0xe9 => 0x6a4b, 0xea => 0x72e1, 0xeb => 0x768e, 0xec => 0x77ef, 0xed => 0x7d5e, 0xee => 0x7ff9, 0xef => 0x81a0, 0xf0 => 0x854e, 0xf1 => 0x86df, 0xf2 => 0x8f03, 0xf3 => 0x8f4e, 0xf4 => 0x90ca, 0xf5 => 0x9903, 0xf6 => 0x9a55, 0xf7 => 0x9bab, 0xf8 => 0x4e18, 0xf9 => 0x4e45, 0xfa => 0x4e5d, 0xfb => 0x4ec7, 0xfc => 0x4ff1, 0xfd => 0x5177, 0xfe => 0x52fe, }, 0xcf => { 0xa1 => 0x5340, 0xa2 => 0x53e3, 0xa3 => 0x53e5, 0xa4 => 0x548e, 0xa5 => 0x5614, 0xa6 => 0x5775, 0xa7 => 0x57a2, 0xa8 => 0x5bc7, 0xa9 => 0x5d87, 0xaa => 0x5ed0, 0xab => 0x61fc, 0xac => 0x62d8, 0xad => 0x6551, 0xae => 0x67b8, 0xaf => 0x67e9, 0xb0 => 0x69cb, 0xb1 => 0x6b50, 0xb2 => 0x6bc6, 0xb3 => 0x6bec, 0xb4 => 0x6c42, 0xb5 => 0x6e9d, 0xb6 => 0x7078, 0xb7 => 0x72d7, 0xb8 => 0x7396, 0xb9 => 0x7403, 0xba => 0x77bf, 0xbb => 0x77e9, 0xbc => 0x7a76, 0xbd => 0x7d7f, 0xbe => 0x8009, 0xbf => 0x81fc, 0xc0 => 0x8205, 0xc1 => 0x820a, 0xc2 => 0x82df, 0xc3 => 0x8862, 0xc4 => 0x8b33, 0xc5 => 0x8cfc, 0xc6 => 0x8ec0, 0xc7 => 0x9011, 0xc8 => 0x90b1, 0xc9 => 0x9264, 0xca => 0x92b6, 0xcb => 0x99d2, 0xcc => 0x9a45, 0xcd => 0x9ce9, 0xce => 0x9dd7, 0xcf => 0x9f9c, 0xd0 => 0x570b, 0xd1 => 0x5c40, 0xd2 => 0x83ca, 0xd3 => 0x97a0, 0xd4 => 0x97ab, 0xd5 => 0x9eb4, 0xd6 => 0x541b, 0xd7 => 0x7a98, 0xd8 => 0x7fa4, 0xd9 => 0x88d9, 0xda => 0x8ecd, 0xdb => 0x90e1, 0xdc => 0x5800, 0xdd => 0x5c48, 0xde => 0x6398, 0xdf => 0x7a9f, 0xe0 => 0x5bae, 0xe1 => 0x5f13, 0xe2 => 0x7a79, 0xe3 => 0x7aae, 0xe4 => 0x828e, 0xe5 => 0x8eac, 0xe6 => 0x5026, 0xe7 => 0x5238, 0xe8 => 0x52f8, 0xe9 => 0x5377, 0xea => 0x5708, 0xeb => 0x62f3, 0xec => 0x6372, 0xed => 0x6b0a, 0xee => 0x6dc3, 0xef => 0x7737, 0xf0 => 0x53a5, 0xf1 => 0x7357, 0xf2 => 0x8568, 0xf3 => 0x8e76, 0xf4 => 0x95d5, 0xf5 => 0x673a, 0xf6 => 0x6ac3, 0xf7 => 0x6f70, 0xf8 => 0x8a6d, 0xf9 => 0x8ecc, 0xfa => 0x994b, 0xfb => 0xf906, 0xfc => 0x6677, 0xfd => 0x6b78, 0xfe => 0x8cb4, }, 0xd0 => { 0xa1 => 0x9b3c, 0xa2 => 0xf907, 0xa3 => 0x53eb, 0xa4 => 0x572d, 0xa5 => 0x594e, 0xa6 => 0x63c6, 0xa7 => 0x69fb, 0xa8 => 0x73ea, 0xa9 => 0x7845, 0xaa => 0x7aba, 0xab => 0x7ac5, 0xac => 0x7cfe, 0xad => 0x8475, 0xae => 0x898f, 0xaf => 0x8d73, 0xb0 => 0x9035, 0xb1 => 0x95a8, 0xb2 => 0x52fb, 0xb3 => 0x5747, 0xb4 => 0x7547, 0xb5 => 0x7b60, 0xb6 => 0x83cc, 0xb7 => 0x921e, 0xb8 => 0xf908, 0xb9 => 0x6a58, 0xba => 0x514b, 0xbb => 0x524b, 0xbc => 0x5287, 0xbd => 0x621f, 0xbe => 0x68d8, 0xbf => 0x6975, 0xc0 => 0x9699, 0xc1 => 0x50c5, 0xc2 => 0x52a4, 0xc3 => 0x52e4, 0xc4 => 0x61c3, 0xc5 => 0x65a4, 0xc6 => 0x6839, 0xc7 => 0x69ff, 0xc8 => 0x747e, 0xc9 => 0x7b4b, 0xca => 0x82b9, 0xcb => 0x83eb, 0xcc => 0x89b2, 0xcd => 0x8b39, 0xce => 0x8fd1, 0xcf => 0x9949, 0xd0 => 0xf909, 0xd1 => 0x4eca, 0xd2 => 0x5997, 0xd3 => 0x64d2, 0xd4 => 0x6611, 0xd5 => 0x6a8e, 0xd6 => 0x7434, 0xd7 => 0x7981, 0xd8 => 0x79bd, 0xd9 => 0x82a9, 0xda => 0x887e, 0xdb => 0x887f, 0xdc => 0x895f, 0xdd => 0xf90a, 0xde => 0x9326, 0xdf => 0x4f0b, 0xe0 => 0x53ca, 0xe1 => 0x6025, 0xe2 => 0x6271, 0xe3 => 0x6c72, 0xe4 => 0x7d1a, 0xe5 => 0x7d66, 0xe6 => 0x4e98, 0xe7 => 0x5162, 0xe8 => 0x77dc, 0xe9 => 0x80af, 0xea => 0x4f01, 0xeb => 0x4f0e, 0xec => 0x5176, 0xed => 0x5180, 0xee => 0x55dc, 0xef => 0x5668, 0xf0 => 0x573b, 0xf1 => 0x57fa, 0xf2 => 0x57fc, 0xf3 => 0x5914, 0xf4 => 0x5947, 0xf5 => 0x5993, 0xf6 => 0x5bc4, 0xf7 => 0x5c90, 0xf8 => 0x5d0e, 0xf9 => 0x5df1, 0xfa => 0x5e7e, 0xfb => 0x5fcc, 0xfc => 0x6280, 0xfd => 0x65d7, 0xfe => 0x65e3, }, 0xd1 => { 0xa1 => 0x671e, 0xa2 => 0x671f, 0xa3 => 0x675e, 0xa4 => 0x68cb, 0xa5 => 0x68c4, 0xa6 => 0x6a5f, 0xa7 => 0x6b3a, 0xa8 => 0x6c23, 0xa9 => 0x6c7d, 0xaa => 0x6c82, 0xab => 0x6dc7, 0xac => 0x7398, 0xad => 0x7426, 0xae => 0x742a, 0xaf => 0x7482, 0xb0 => 0x74a3, 0xb1 => 0x7578, 0xb2 => 0x757f, 0xb3 => 0x7881, 0xb4 => 0x78ef, 0xb5 => 0x7941, 0xb6 => 0x7947, 0xb7 => 0x7948, 0xb8 => 0x797a, 0xb9 => 0x7b95, 0xba => 0x7d00, 0xbb => 0x7dba, 0xbc => 0x7f88, 0xbd => 0x8006, 0xbe => 0x802d, 0xbf => 0x808c, 0xc0 => 0x8a18, 0xc1 => 0x8b4f, 0xc2 => 0x8c48, 0xc3 => 0x8d77, 0xc4 => 0x9321, 0xc5 => 0x9324, 0xc6 => 0x98e2, 0xc7 => 0x9951, 0xc8 => 0x9a0e, 0xc9 => 0x9a0f, 0xca => 0x9a65, 0xcb => 0x9e92, 0xcc => 0x7dca, 0xcd => 0x4f76, 0xce => 0x5409, 0xcf => 0x62ee, 0xd0 => 0x6854, 0xd1 => 0x91d1, 0xd2 => 0x55ab, 0xd3 => 0x513a, 0xd4 => 0xf90b, 0xd5 => 0xf90c, 0xd6 => 0x5a1c, 0xd7 => 0x61e6, 0xd8 => 0xf90d, 0xd9 => 0x62cf, 0xda => 0x62ff, 0xdb => 0xf90e, 0xdc => 0xf90f, 0xdd => 0xf910, 0xde => 0xf911, 0xdf => 0xf912, 0xe0 => 0xf913, 0xe1 => 0x90a3, 0xe2 => 0xf914, 0xe3 => 0xf915, 0xe4 => 0xf916, 0xe5 => 0xf917, 0xe6 => 0xf918, 0xe7 => 0x8afe, 0xe8 => 0xf919, 0xe9 => 0xf91a, 0xea => 0xf91b, 0xeb => 0xf91c, 0xec => 0x6696, 0xed => 0xf91d, 0xee => 0x7156, 0xef => 0xf91e, 0xf0 => 0xf91f, 0xf1 => 0x96e3, 0xf2 => 0xf920, 0xf3 => 0x634f, 0xf4 => 0x637a, 0xf5 => 0x5357, 0xf6 => 0xf921, 0xf7 => 0x678f, 0xf8 => 0x6960, 0xf9 => 0x6e73, 0xfa => 0xf922, 0xfb => 0x7537, 0xfc => 0xf923, 0xfd => 0xf924, 0xfe => 0xf925, }, 0xd2 => { 0xa1 => 0x7d0d, 0xa2 => 0xf926, 0xa3 => 0xf927, 0xa4 => 0x8872, 0xa5 => 0x56ca, 0xa6 => 0x5a18, 0xa7 => 0xf928, 0xa8 => 0xf929, 0xa9 => 0xf92a, 0xaa => 0xf92b, 0xab => 0xf92c, 0xac => 0x4e43, 0xad => 0xf92d, 0xae => 0x5167, 0xaf => 0x5948, 0xb0 => 0x67f0, 0xb1 => 0x8010, 0xb2 => 0xf92e, 0xb3 => 0x5973, 0xb4 => 0x5e74, 0xb5 => 0x649a, 0xb6 => 0x79ca, 0xb7 => 0x5ff5, 0xb8 => 0x606c, 0xb9 => 0x62c8, 0xba => 0x637b, 0xbb => 0x5be7, 0xbc => 0x5bd7, 0xbd => 0x52aa, 0xbe => 0xf92f, 0xbf => 0x5974, 0xc0 => 0x5f29, 0xc1 => 0x6012, 0xc2 => 0xf930, 0xc3 => 0xf931, 0xc4 => 0xf932, 0xc5 => 0x7459, 0xc6 => 0xf933, 0xc7 => 0xf934, 0xc8 => 0xf935, 0xc9 => 0xf936, 0xca => 0xf937, 0xcb => 0xf938, 0xcc => 0x99d1, 0xcd => 0xf939, 0xce => 0xf93a, 0xcf => 0xf93b, 0xd0 => 0xf93c, 0xd1 => 0xf93d, 0xd2 => 0xf93e, 0xd3 => 0xf93f, 0xd4 => 0xf940, 0xd5 => 0xf941, 0xd6 => 0xf942, 0xd7 => 0xf943, 0xd8 => 0x6fc3, 0xd9 => 0xf944, 0xda => 0xf945, 0xdb => 0x81bf, 0xdc => 0x8fb2, 0xdd => 0x60f1, 0xde => 0xf946, 0xdf => 0xf947, 0xe0 => 0x8166, 0xe1 => 0xf948, 0xe2 => 0xf949, 0xe3 => 0x5c3f, 0xe4 => 0xf94a, 0xe5 => 0xf94b, 0xe6 => 0xf94c, 0xe7 => 0xf94d, 0xe8 => 0xf94e, 0xe9 => 0xf94f, 0xea => 0xf950, 0xeb => 0xf951, 0xec => 0x5ae9, 0xed => 0x8a25, 0xee => 0x677b, 0xef => 0x7d10, 0xf0 => 0xf952, 0xf1 => 0xf953, 0xf2 => 0xf954, 0xf3 => 0xf955, 0xf4 => 0xf956, 0xf5 => 0xf957, 0xf6 => 0x80fd, 0xf7 => 0xf958, 0xf8 => 0xf959, 0xf9 => 0x5c3c, 0xfa => 0x6ce5, 0xfb => 0x533f, 0xfc => 0x6eba, 0xfd => 0x591a, 0xfe => 0x8336, }, 0xd3 => { 0xa1 => 0x4e39, 0xa2 => 0x4eb6, 0xa3 => 0x4f46, 0xa4 => 0x55ae, 0xa5 => 0x5718, 0xa6 => 0x58c7, 0xa7 => 0x5f56, 0xa8 => 0x65b7, 0xa9 => 0x65e6, 0xaa => 0x6a80, 0xab => 0x6bb5, 0xac => 0x6e4d, 0xad => 0x77ed, 0xae => 0x7aef, 0xaf => 0x7c1e, 0xb0 => 0x7dde, 0xb1 => 0x86cb, 0xb2 => 0x8892, 0xb3 => 0x9132, 0xb4 => 0x935b, 0xb5 => 0x64bb, 0xb6 => 0x6fbe, 0xb7 => 0x737a, 0xb8 => 0x75b8, 0xb9 => 0x9054, 0xba => 0x5556, 0xbb => 0x574d, 0xbc => 0x61ba, 0xbd => 0x64d4, 0xbe => 0x66c7, 0xbf => 0x6de1, 0xc0 => 0x6e5b, 0xc1 => 0x6f6d, 0xc2 => 0x6fb9, 0xc3 => 0x75f0, 0xc4 => 0x8043, 0xc5 => 0x81bd, 0xc6 => 0x8541, 0xc7 => 0x8983, 0xc8 => 0x8ac7, 0xc9 => 0x8b5a, 0xca => 0x931f, 0xcb => 0x6c93, 0xcc => 0x7553, 0xcd => 0x7b54, 0xce => 0x8e0f, 0xcf => 0x905d, 0xd0 => 0x5510, 0xd1 => 0x5802, 0xd2 => 0x5858, 0xd3 => 0x5e62, 0xd4 => 0x6207, 0xd5 => 0x649e, 0xd6 => 0x68e0, 0xd7 => 0x7576, 0xd8 => 0x7cd6, 0xd9 => 0x87b3, 0xda => 0x9ee8, 0xdb => 0x4ee3, 0xdc => 0x5788, 0xdd => 0x576e, 0xde => 0x5927, 0xdf => 0x5c0d, 0xe0 => 0x5cb1, 0xe1 => 0x5e36, 0xe2 => 0x5f85, 0xe3 => 0x6234, 0xe4 => 0x64e1, 0xe5 => 0x73b3, 0xe6 => 0x81fa, 0xe7 => 0x888b, 0xe8 => 0x8cb8, 0xe9 => 0x968a, 0xea => 0x9edb, 0xeb => 0x5b85, 0xec => 0x5fb7, 0xed => 0x60b3, 0xee => 0x5012, 0xef => 0x5200, 0xf0 => 0x5230, 0xf1 => 0x5716, 0xf2 => 0x5835, 0xf3 => 0x5857, 0xf4 => 0x5c0e, 0xf5 => 0x5c60, 0xf6 => 0x5cf6, 0xf7 => 0x5d8b, 0xf8 => 0x5ea6, 0xf9 => 0x5f92, 0xfa => 0x60bc, 0xfb => 0x6311, 0xfc => 0x6389, 0xfd => 0x6417, 0xfe => 0x6843, }, 0xd4 => { 0xa1 => 0x68f9, 0xa2 => 0x6ac2, 0xa3 => 0x6dd8, 0xa4 => 0x6e21, 0xa5 => 0x6ed4, 0xa6 => 0x6fe4, 0xa7 => 0x71fe, 0xa8 => 0x76dc, 0xa9 => 0x7779, 0xaa => 0x79b1, 0xab => 0x7a3b, 0xac => 0x8404, 0xad => 0x89a9, 0xae => 0x8ced, 0xaf => 0x8df3, 0xb0 => 0x8e48, 0xb1 => 0x9003, 0xb2 => 0x9014, 0xb3 => 0x9053, 0xb4 => 0x90fd, 0xb5 => 0x934d, 0xb6 => 0x9676, 0xb7 => 0x97dc, 0xb8 => 0x6bd2, 0xb9 => 0x7006, 0xba => 0x7258, 0xbb => 0x72a2, 0xbc => 0x7368, 0xbd => 0x7763, 0xbe => 0x79bf, 0xbf => 0x7be4, 0xc0 => 0x7e9b, 0xc1 => 0x8b80, 0xc2 => 0x58a9, 0xc3 => 0x60c7, 0xc4 => 0x6566, 0xc5 => 0x65fd, 0xc6 => 0x66be, 0xc7 => 0x6c8c, 0xc8 => 0x711e, 0xc9 => 0x71c9, 0xca => 0x8c5a, 0xcb => 0x9813, 0xcc => 0x4e6d, 0xcd => 0x7a81, 0xce => 0x4edd, 0xcf => 0x51ac, 0xd0 => 0x51cd, 0xd1 => 0x52d5, 0xd2 => 0x540c, 0xd3 => 0x61a7, 0xd4 => 0x6771, 0xd5 => 0x6850, 0xd6 => 0x68df, 0xd7 => 0x6d1e, 0xd8 => 0x6f7c, 0xd9 => 0x75bc, 0xda => 0x77b3, 0xdb => 0x7ae5, 0xdc => 0x80f4, 0xdd => 0x8463, 0xde => 0x9285, 0xdf => 0x515c, 0xe0 => 0x6597, 0xe1 => 0x675c, 0xe2 => 0x6793, 0xe3 => 0x75d8, 0xe4 => 0x7ac7, 0xe5 => 0x8373, 0xe6 => 0xf95a, 0xe7 => 0x8c46, 0xe8 => 0x9017, 0xe9 => 0x982d, 0xea => 0x5c6f, 0xeb => 0x81c0, 0xec => 0x829a, 0xed => 0x9041, 0xee => 0x906f, 0xef => 0x920d, 0xf0 => 0x5f97, 0xf1 => 0x5d9d, 0xf2 => 0x6a59, 0xf3 => 0x71c8, 0xf4 => 0x767b, 0xf5 => 0x7b49, 0xf6 => 0x85e4, 0xf7 => 0x8b04, 0xf8 => 0x9127, 0xf9 => 0x9a30, 0xfa => 0x5587, 0xfb => 0x61f6, 0xfc => 0xf95b, 0xfd => 0x7669, 0xfe => 0x7f85, }, 0xd5 => { 0xa1 => 0x863f, 0xa2 => 0x87ba, 0xa3 => 0x88f8, 0xa4 => 0x908f, 0xa5 => 0xf95c, 0xa6 => 0x6d1b, 0xa7 => 0x70d9, 0xa8 => 0x73de, 0xa9 => 0x7d61, 0xaa => 0x843d, 0xab => 0xf95d, 0xac => 0x916a, 0xad => 0x99f1, 0xae => 0xf95e, 0xaf => 0x4e82, 0xb0 => 0x5375, 0xb1 => 0x6b04, 0xb2 => 0x6b12, 0xb3 => 0x703e, 0xb4 => 0x721b, 0xb5 => 0x862d, 0xb6 => 0x9e1e, 0xb7 => 0x524c, 0xb8 => 0x8fa3, 0xb9 => 0x5d50, 0xba => 0x64e5, 0xbb => 0x652c, 0xbc => 0x6b16, 0xbd => 0x6feb, 0xbe => 0x7c43, 0xbf => 0x7e9c, 0xc0 => 0x85cd, 0xc1 => 0x8964, 0xc2 => 0x89bd, 0xc3 => 0x62c9, 0xc4 => 0x81d8, 0xc5 => 0x881f, 0xc6 => 0x5eca, 0xc7 => 0x6717, 0xc8 => 0x6d6a, 0xc9 => 0x72fc, 0xca => 0x7405, 0xcb => 0x746f, 0xcc => 0x8782, 0xcd => 0x90de, 0xce => 0x4f86, 0xcf => 0x5d0d, 0xd0 => 0x5fa0, 0xd1 => 0x840a, 0xd2 => 0x51b7, 0xd3 => 0x63a0, 0xd4 => 0x7565, 0xd5 => 0x4eae, 0xd6 => 0x5006, 0xd7 => 0x5169, 0xd8 => 0x51c9, 0xd9 => 0x6881, 0xda => 0x6a11, 0xdb => 0x7cae, 0xdc => 0x7cb1, 0xdd => 0x7ce7, 0xde => 0x826f, 0xdf => 0x8ad2, 0xe0 => 0x8f1b, 0xe1 => 0x91cf, 0xe2 => 0x4fb6, 0xe3 => 0x5137, 0xe4 => 0x52f5, 0xe5 => 0x5442, 0xe6 => 0x5eec, 0xe7 => 0x616e, 0xe8 => 0x623e, 0xe9 => 0x65c5, 0xea => 0x6ada, 0xeb => 0x6ffe, 0xec => 0x792a, 0xed => 0x85dc, 0xee => 0x8823, 0xef => 0x95ad, 0xf0 => 0x9a62, 0xf1 => 0x9a6a, 0xf2 => 0x9e97, 0xf3 => 0x9ece, 0xf4 => 0x529b, 0xf5 => 0x66c6, 0xf6 => 0x6b77, 0xf7 => 0x701d, 0xf8 => 0x792b, 0xf9 => 0x8f62, 0xfa => 0x9742, 0xfb => 0x6190, 0xfc => 0x6200, 0xfd => 0x6523, 0xfe => 0x6f23, }, 0xd6 => { 0xa1 => 0x7149, 0xa2 => 0x7489, 0xa3 => 0x7df4, 0xa4 => 0x806f, 0xa5 => 0x84ee, 0xa6 => 0x8f26, 0xa7 => 0x9023, 0xa8 => 0x934a, 0xa9 => 0x51bd, 0xaa => 0x5217, 0xab => 0x52a3, 0xac => 0x6d0c, 0xad => 0x70c8, 0xae => 0x88c2, 0xaf => 0x5ec9, 0xb0 => 0x6582, 0xb1 => 0x6bae, 0xb2 => 0x6fc2, 0xb3 => 0x7c3e, 0xb4 => 0x7375, 0xb5 => 0x4ee4, 0xb6 => 0x4f36, 0xb7 => 0x56f9, 0xb8 => 0xf95f, 0xb9 => 0x5cba, 0xba => 0x5dba, 0xbb => 0x601c, 0xbc => 0x73b2, 0xbd => 0x7b2d, 0xbe => 0x7f9a, 0xbf => 0x7fce, 0xc0 => 0x8046, 0xc1 => 0x901e, 0xc2 => 0x9234, 0xc3 => 0x96f6, 0xc4 => 0x9748, 0xc5 => 0x9818, 0xc6 => 0x9f61, 0xc7 => 0x4f8b, 0xc8 => 0x6fa7, 0xc9 => 0x79ae, 0xca => 0x91b4, 0xcb => 0x96b7, 0xcc => 0x52de, 0xcd => 0xf960, 0xce => 0x6488, 0xcf => 0x64c4, 0xd0 => 0x6ad3, 0xd1 => 0x6f5e, 0xd2 => 0x7018, 0xd3 => 0x7210, 0xd4 => 0x76e7, 0xd5 => 0x8001, 0xd6 => 0x8606, 0xd7 => 0x865c, 0xd8 => 0x8def, 0xd9 => 0x8f05, 0xda => 0x9732, 0xdb => 0x9b6f, 0xdc => 0x9dfa, 0xdd => 0x9e75, 0xde => 0x788c, 0xdf => 0x797f, 0xe0 => 0x7da0, 0xe1 => 0x83c9, 0xe2 => 0x9304, 0xe3 => 0x9e7f, 0xe4 => 0x9e93, 0xe5 => 0x8ad6, 0xe6 => 0x58df, 0xe7 => 0x5f04, 0xe8 => 0x6727, 0xe9 => 0x7027, 0xea => 0x74cf, 0xeb => 0x7c60, 0xec => 0x807e, 0xed => 0x5121, 0xee => 0x7028, 0xef => 0x7262, 0xf0 => 0x78ca, 0xf1 => 0x8cc2, 0xf2 => 0x8cda, 0xf3 => 0x8cf4, 0xf4 => 0x96f7, 0xf5 => 0x4e86, 0xf6 => 0x50da, 0xf7 => 0x5bee, 0xf8 => 0x5ed6, 0xf9 => 0x6599, 0xfa => 0x71ce, 0xfb => 0x7642, 0xfc => 0x77ad, 0xfd => 0x804a, 0xfe => 0x84fc, }, 0xd7 => { 0xa1 => 0x907c, 0xa2 => 0x9b27, 0xa3 => 0x9f8d, 0xa4 => 0x58d8, 0xa5 => 0x5a41, 0xa6 => 0x5c62, 0xa7 => 0x6a13, 0xa8 => 0x6dda, 0xa9 => 0x6f0f, 0xaa => 0x763b, 0xab => 0x7d2f, 0xac => 0x7e37, 0xad => 0x851e, 0xae => 0x8938, 0xaf => 0x93e4, 0xb0 => 0x964b, 0xb1 => 0x5289, 0xb2 => 0x65d2, 0xb3 => 0x67f3, 0xb4 => 0x69b4, 0xb5 => 0x6d41, 0xb6 => 0x6e9c, 0xb7 => 0x700f, 0xb8 => 0x7409, 0xb9 => 0x7460, 0xba => 0x7559, 0xbb => 0x7624, 0xbc => 0x786b, 0xbd => 0x8b2c, 0xbe => 0x985e, 0xbf => 0x516d, 0xc0 => 0x622e, 0xc1 => 0x9678, 0xc2 => 0x4f96, 0xc3 => 0x502b, 0xc4 => 0x5d19, 0xc5 => 0x6dea, 0xc6 => 0x7db8, 0xc7 => 0x8f2a, 0xc8 => 0x5f8b, 0xc9 => 0x6144, 0xca => 0x6817, 0xcb => 0xf961, 0xcc => 0x9686, 0xcd => 0x52d2, 0xce => 0x808b, 0xcf => 0x51dc, 0xd0 => 0x51cc, 0xd1 => 0x695e, 0xd2 => 0x7a1c, 0xd3 => 0x7dbe, 0xd4 => 0x83f1, 0xd5 => 0x9675, 0xd6 => 0x4fda, 0xd7 => 0x5229, 0xd8 => 0x5398, 0xd9 => 0x540f, 0xda => 0x550e, 0xdb => 0x5c65, 0xdc => 0x60a7, 0xdd => 0x674e, 0xde => 0x68a8, 0xdf => 0x6d6c, 0xe0 => 0x7281, 0xe1 => 0x72f8, 0xe2 => 0x7406, 0xe3 => 0x7483, 0xe4 => 0xf962, 0xe5 => 0x75e2, 0xe6 => 0x7c6c, 0xe7 => 0x7f79, 0xe8 => 0x7fb8, 0xe9 => 0x8389, 0xea => 0x88cf, 0xeb => 0x88e1, 0xec => 0x91cc, 0xed => 0x91d0, 0xee => 0x96e2, 0xef => 0x9bc9, 0xf0 => 0x541d, 0xf1 => 0x6f7e, 0xf2 => 0x71d0, 0xf3 => 0x7498, 0xf4 => 0x85fa, 0xf5 => 0x8eaa, 0xf6 => 0x96a3, 0xf7 => 0x9c57, 0xf8 => 0x9e9f, 0xf9 => 0x6797, 0xfa => 0x6dcb, 0xfb => 0x7433, 0xfc => 0x81e8, 0xfd => 0x9716, 0xfe => 0x782c, }, 0xd8 => { 0xa1 => 0x7acb, 0xa2 => 0x7b20, 0xa3 => 0x7c92, 0xa4 => 0x6469, 0xa5 => 0x746a, 0xa6 => 0x75f2, 0xa7 => 0x78bc, 0xa8 => 0x78e8, 0xa9 => 0x99ac, 0xaa => 0x9b54, 0xab => 0x9ebb, 0xac => 0x5bde, 0xad => 0x5e55, 0xae => 0x6f20, 0xaf => 0x819c, 0xb0 => 0x83ab, 0xb1 => 0x9088, 0xb2 => 0x4e07, 0xb3 => 0x534d, 0xb4 => 0x5a29, 0xb5 => 0x5dd2, 0xb6 => 0x5f4e, 0xb7 => 0x6162, 0xb8 => 0x633d, 0xb9 => 0x6669, 0xba => 0x66fc, 0xbb => 0x6eff, 0xbc => 0x6f2b, 0xbd => 0x7063, 0xbe => 0x779e, 0xbf => 0x842c, 0xc0 => 0x8513, 0xc1 => 0x883b, 0xc2 => 0x8f13, 0xc3 => 0x9945, 0xc4 => 0x9c3b, 0xc5 => 0x551c, 0xc6 => 0x62b9, 0xc7 => 0x672b, 0xc8 => 0x6cab, 0xc9 => 0x8309, 0xca => 0x896a, 0xcb => 0x977a, 0xcc => 0x4ea1, 0xcd => 0x5984, 0xce => 0x5fd8, 0xcf => 0x5fd9, 0xd0 => 0x671b, 0xd1 => 0x7db2, 0xd2 => 0x7f54, 0xd3 => 0x8292, 0xd4 => 0x832b, 0xd5 => 0x83bd, 0xd6 => 0x8f1e, 0xd7 => 0x9099, 0xd8 => 0x57cb, 0xd9 => 0x59b9, 0xda => 0x5a92, 0xdb => 0x5bd0, 0xdc => 0x6627, 0xdd => 0x679a, 0xde => 0x6885, 0xdf => 0x6bcf, 0xe0 => 0x7164, 0xe1 => 0x7f75, 0xe2 => 0x8cb7, 0xe3 => 0x8ce3, 0xe4 => 0x9081, 0xe5 => 0x9b45, 0xe6 => 0x8108, 0xe7 => 0x8c8a, 0xe8 => 0x964c, 0xe9 => 0x9a40, 0xea => 0x9ea5, 0xeb => 0x5b5f, 0xec => 0x6c13, 0xed => 0x731b, 0xee => 0x76f2, 0xef => 0x76df, 0xf0 => 0x840c, 0xf1 => 0x51aa, 0xf2 => 0x8993, 0xf3 => 0x514d, 0xf4 => 0x5195, 0xf5 => 0x52c9, 0xf6 => 0x68c9, 0xf7 => 0x6c94, 0xf8 => 0x7704, 0xf9 => 0x7720, 0xfa => 0x7dbf, 0xfb => 0x7dec, 0xfc => 0x9762, 0xfd => 0x9eb5, 0xfe => 0x6ec5, }, 0xd9 => { 0xa1 => 0x8511, 0xa2 => 0x51a5, 0xa3 => 0x540d, 0xa4 => 0x547d, 0xa5 => 0x660e, 0xa6 => 0x669d, 0xa7 => 0x6927, 0xa8 => 0x6e9f, 0xa9 => 0x76bf, 0xaa => 0x7791, 0xab => 0x8317, 0xac => 0x84c2, 0xad => 0x879f, 0xae => 0x9169, 0xaf => 0x9298, 0xb0 => 0x9cf4, 0xb1 => 0x8882, 0xb2 => 0x4fae, 0xb3 => 0x5192, 0xb4 => 0x52df, 0xb5 => 0x59c6, 0xb6 => 0x5e3d, 0xb7 => 0x6155, 0xb8 => 0x6478, 0xb9 => 0x6479, 0xba => 0x66ae, 0xbb => 0x67d0, 0xbc => 0x6a21, 0xbd => 0x6bcd, 0xbe => 0x6bdb, 0xbf => 0x725f, 0xc0 => 0x7261, 0xc1 => 0x7441, 0xc2 => 0x7738, 0xc3 => 0x77db, 0xc4 => 0x8017, 0xc5 => 0x82bc, 0xc6 => 0x8305, 0xc7 => 0x8b00, 0xc8 => 0x8b28, 0xc9 => 0x8c8c, 0xca => 0x6728, 0xcb => 0x6c90, 0xcc => 0x7267, 0xcd => 0x76ee, 0xce => 0x7766, 0xcf => 0x7a46, 0xd0 => 0x9da9, 0xd1 => 0x6b7f, 0xd2 => 0x6c92, 0xd3 => 0x5922, 0xd4 => 0x6726, 0xd5 => 0x8499, 0xd6 => 0x536f, 0xd7 => 0x5893, 0xd8 => 0x5999, 0xd9 => 0x5edf, 0xda => 0x63cf, 0xdb => 0x6634, 0xdc => 0x6773, 0xdd => 0x6e3a, 0xde => 0x732b, 0xdf => 0x7ad7, 0xe0 => 0x82d7, 0xe1 => 0x9328, 0xe2 => 0x52d9, 0xe3 => 0x5deb, 0xe4 => 0x61ae, 0xe5 => 0x61cb, 0xe6 => 0x620a, 0xe7 => 0x62c7, 0xe8 => 0x64ab, 0xe9 => 0x65e0, 0xea => 0x6959, 0xeb => 0x6b66, 0xec => 0x6bcb, 0xed => 0x7121, 0xee => 0x73f7, 0xef => 0x755d, 0xf0 => 0x7e46, 0xf1 => 0x821e, 0xf2 => 0x8302, 0xf3 => 0x856a, 0xf4 => 0x8aa3, 0xf5 => 0x8cbf, 0xf6 => 0x9727, 0xf7 => 0x9d61, 0xf8 => 0x58a8, 0xf9 => 0x9ed8, 0xfa => 0x5011, 0xfb => 0x520e, 0xfc => 0x543b, 0xfd => 0x554f, 0xfe => 0x6587, }, 0xda => { 0xa1 => 0x6c76, 0xa2 => 0x7d0a, 0xa3 => 0x7d0b, 0xa4 => 0x805e, 0xa5 => 0x868a, 0xa6 => 0x9580, 0xa7 => 0x96ef, 0xa8 => 0x52ff, 0xa9 => 0x6c95, 0xaa => 0x7269, 0xab => 0x5473, 0xac => 0x5a9a, 0xad => 0x5c3e, 0xae => 0x5d4b, 0xaf => 0x5f4c, 0xb0 => 0x5fae, 0xb1 => 0x672a, 0xb2 => 0x68b6, 0xb3 => 0x6963, 0xb4 => 0x6e3c, 0xb5 => 0x6e44, 0xb6 => 0x7709, 0xb7 => 0x7c73, 0xb8 => 0x7f8e, 0xb9 => 0x8587, 0xba => 0x8b0e, 0xbb => 0x8ff7, 0xbc => 0x9761, 0xbd => 0x9ef4, 0xbe => 0x5cb7, 0xbf => 0x60b6, 0xc0 => 0x610d, 0xc1 => 0x61ab, 0xc2 => 0x654f, 0xc3 => 0x65fb, 0xc4 => 0x65fc, 0xc5 => 0x6c11, 0xc6 => 0x6cef, 0xc7 => 0x739f, 0xc8 => 0x73c9, 0xc9 => 0x7de1, 0xca => 0x9594, 0xcb => 0x5bc6, 0xcc => 0x871c, 0xcd => 0x8b10, 0xce => 0x525d, 0xcf => 0x535a, 0xd0 => 0x62cd, 0xd1 => 0x640f, 0xd2 => 0x64b2, 0xd3 => 0x6734, 0xd4 => 0x6a38, 0xd5 => 0x6cca, 0xd6 => 0x73c0, 0xd7 => 0x749e, 0xd8 => 0x7b94, 0xd9 => 0x7c95, 0xda => 0x7e1b, 0xdb => 0x818a, 0xdc => 0x8236, 0xdd => 0x8584, 0xde => 0x8feb, 0xdf => 0x96f9, 0xe0 => 0x99c1, 0xe1 => 0x4f34, 0xe2 => 0x534a, 0xe3 => 0x53cd, 0xe4 => 0x53db, 0xe5 => 0x62cc, 0xe6 => 0x642c, 0xe7 => 0x6500, 0xe8 => 0x6591, 0xe9 => 0x69c3, 0xea => 0x6cee, 0xeb => 0x6f58, 0xec => 0x73ed, 0xed => 0x7554, 0xee => 0x7622, 0xef => 0x76e4, 0xf0 => 0x76fc, 0xf1 => 0x78d0, 0xf2 => 0x78fb, 0xf3 => 0x792c, 0xf4 => 0x7d46, 0xf5 => 0x822c, 0xf6 => 0x87e0, 0xf7 => 0x8fd4, 0xf8 => 0x9812, 0xf9 => 0x98ef, 0xfa => 0x52c3, 0xfb => 0x62d4, 0xfc => 0x64a5, 0xfd => 0x6e24, 0xfe => 0x6f51, }, 0xdb => { 0xa1 => 0x767c, 0xa2 => 0x8dcb, 0xa3 => 0x91b1, 0xa4 => 0x9262, 0xa5 => 0x9aee, 0xa6 => 0x9b43, 0xa7 => 0x5023, 0xa8 => 0x508d, 0xa9 => 0x574a, 0xaa => 0x59a8, 0xab => 0x5c28, 0xac => 0x5e47, 0xad => 0x5f77, 0xae => 0x623f, 0xaf => 0x653e, 0xb0 => 0x65b9, 0xb1 => 0x65c1, 0xb2 => 0x6609, 0xb3 => 0x678b, 0xb4 => 0x699c, 0xb5 => 0x6ec2, 0xb6 => 0x78c5, 0xb7 => 0x7d21, 0xb8 => 0x80aa, 0xb9 => 0x8180, 0xba => 0x822b, 0xbb => 0x82b3, 0xbc => 0x84a1, 0xbd => 0x868c, 0xbe => 0x8a2a, 0xbf => 0x8b17, 0xc0 => 0x90a6, 0xc1 => 0x9632, 0xc2 => 0x9f90, 0xc3 => 0x500d, 0xc4 => 0x4ff3, 0xc5 => 0xf963, 0xc6 => 0x57f9, 0xc7 => 0x5f98, 0xc8 => 0x62dc, 0xc9 => 0x6392, 0xca => 0x676f, 0xcb => 0x6e43, 0xcc => 0x7119, 0xcd => 0x76c3, 0xce => 0x80cc, 0xcf => 0x80da, 0xd0 => 0x88f4, 0xd1 => 0x88f5, 0xd2 => 0x8919, 0xd3 => 0x8ce0, 0xd4 => 0x8f29, 0xd5 => 0x914d, 0xd6 => 0x966a, 0xd7 => 0x4f2f, 0xd8 => 0x4f70, 0xd9 => 0x5e1b, 0xda => 0x67cf, 0xdb => 0x6822, 0xdc => 0x767d, 0xdd => 0x767e, 0xde => 0x9b44, 0xdf => 0x5e61, 0xe0 => 0x6a0a, 0xe1 => 0x7169, 0xe2 => 0x71d4, 0xe3 => 0x756a, 0xe4 => 0xf964, 0xe5 => 0x7e41, 0xe6 => 0x8543, 0xe7 => 0x85e9, 0xe8 => 0x98dc, 0xe9 => 0x4f10, 0xea => 0x7b4f, 0xeb => 0x7f70, 0xec => 0x95a5, 0xed => 0x51e1, 0xee => 0x5e06, 0xef => 0x68b5, 0xf0 => 0x6c3e, 0xf1 => 0x6c4e, 0xf2 => 0x6cdb, 0xf3 => 0x72af, 0xf4 => 0x7bc4, 0xf5 => 0x8303, 0xf6 => 0x6cd5, 0xf7 => 0x743a, 0xf8 => 0x50fb, 0xf9 => 0x5288, 0xfa => 0x58c1, 0xfb => 0x64d8, 0xfc => 0x6a97, 0xfd => 0x74a7, 0xfe => 0x7656, }, 0xdc => { 0xa1 => 0x78a7, 0xa2 => 0x8617, 0xa3 => 0x95e2, 0xa4 => 0x9739, 0xa5 => 0xf965, 0xa6 => 0x535e, 0xa7 => 0x5f01, 0xa8 => 0x8b8a, 0xa9 => 0x8fa8, 0xaa => 0x8faf, 0xab => 0x908a, 0xac => 0x5225, 0xad => 0x77a5, 0xae => 0x9c49, 0xaf => 0x9f08, 0xb0 => 0x4e19, 0xb1 => 0x5002, 0xb2 => 0x5175, 0xb3 => 0x5c5b, 0xb4 => 0x5e77, 0xb5 => 0x661e, 0xb6 => 0x663a, 0xb7 => 0x67c4, 0xb8 => 0x68c5, 0xb9 => 0x70b3, 0xba => 0x7501, 0xbb => 0x75c5, 0xbc => 0x79c9, 0xbd => 0x7add, 0xbe => 0x8f27, 0xbf => 0x9920, 0xc0 => 0x9a08, 0xc1 => 0x4fdd, 0xc2 => 0x5821, 0xc3 => 0x5831, 0xc4 => 0x5bf6, 0xc5 => 0x666e, 0xc6 => 0x6b65, 0xc7 => 0x6d11, 0xc8 => 0x6e7a, 0xc9 => 0x6f7d, 0xca => 0x73e4, 0xcb => 0x752b, 0xcc => 0x83e9, 0xcd => 0x88dc, 0xce => 0x8913, 0xcf => 0x8b5c, 0xd0 => 0x8f14, 0xd1 => 0x4f0f, 0xd2 => 0x50d5, 0xd3 => 0x5310, 0xd4 => 0x535c, 0xd5 => 0x5b93, 0xd6 => 0x5fa9, 0xd7 => 0x670d, 0xd8 => 0x798f, 0xd9 => 0x8179, 0xda => 0x832f, 0xdb => 0x8514, 0xdc => 0x8907, 0xdd => 0x8986, 0xde => 0x8f39, 0xdf => 0x8f3b, 0xe0 => 0x99a5, 0xe1 => 0x9c12, 0xe2 => 0x672c, 0xe3 => 0x4e76, 0xe4 => 0x4ff8, 0xe5 => 0x5949, 0xe6 => 0x5c01, 0xe7 => 0x5cef, 0xe8 => 0x5cf0, 0xe9 => 0x6367, 0xea => 0x68d2, 0xeb => 0x70fd, 0xec => 0x71a2, 0xed => 0x742b, 0xee => 0x7e2b, 0xef => 0x84ec, 0xf0 => 0x8702, 0xf1 => 0x9022, 0xf2 => 0x92d2, 0xf3 => 0x9cf3, 0xf4 => 0x4e0d, 0xf5 => 0x4ed8, 0xf6 => 0x4fef, 0xf7 => 0x5085, 0xf8 => 0x5256, 0xf9 => 0x526f, 0xfa => 0x5426, 0xfb => 0x5490, 0xfc => 0x57e0, 0xfd => 0x592b, 0xfe => 0x5a66, }, 0xdd => { 0xa1 => 0x5b5a, 0xa2 => 0x5b75, 0xa3 => 0x5bcc, 0xa4 => 0x5e9c, 0xa5 => 0xf966, 0xa6 => 0x6276, 0xa7 => 0x6577, 0xa8 => 0x65a7, 0xa9 => 0x6d6e, 0xaa => 0x6ea5, 0xab => 0x7236, 0xac => 0x7b26, 0xad => 0x7c3f, 0xae => 0x7f36, 0xaf => 0x8150, 0xb0 => 0x8151, 0xb1 => 0x819a, 0xb2 => 0x8240, 0xb3 => 0x8299, 0xb4 => 0x83a9, 0xb5 => 0x8a03, 0xb6 => 0x8ca0, 0xb7 => 0x8ce6, 0xb8 => 0x8cfb, 0xb9 => 0x8d74, 0xba => 0x8dba, 0xbb => 0x90e8, 0xbc => 0x91dc, 0xbd => 0x961c, 0xbe => 0x9644, 0xbf => 0x99d9, 0xc0 => 0x9ce7, 0xc1 => 0x5317, 0xc2 => 0x5206, 0xc3 => 0x5429, 0xc4 => 0x5674, 0xc5 => 0x58b3, 0xc6 => 0x5954, 0xc7 => 0x596e, 0xc8 => 0x5fff, 0xc9 => 0x61a4, 0xca => 0x626e, 0xcb => 0x6610, 0xcc => 0x6c7e, 0xcd => 0x711a, 0xce => 0x76c6, 0xcf => 0x7c89, 0xd0 => 0x7cde, 0xd1 => 0x7d1b, 0xd2 => 0x82ac, 0xd3 => 0x8cc1, 0xd4 => 0x96f0, 0xd5 => 0xf967, 0xd6 => 0x4f5b, 0xd7 => 0x5f17, 0xd8 => 0x5f7f, 0xd9 => 0x62c2, 0xda => 0x5d29, 0xdb => 0x670b, 0xdc => 0x68da, 0xdd => 0x787c, 0xde => 0x7e43, 0xdf => 0x9d6c, 0xe0 => 0x4e15, 0xe1 => 0x5099, 0xe2 => 0x5315, 0xe3 => 0x532a, 0xe4 => 0x5351, 0xe5 => 0x5983, 0xe6 => 0x5a62, 0xe7 => 0x5e87, 0xe8 => 0x60b2, 0xe9 => 0x618a, 0xea => 0x6249, 0xeb => 0x6279, 0xec => 0x6590, 0xed => 0x6787, 0xee => 0x69a7, 0xef => 0x6bd4, 0xf0 => 0x6bd6, 0xf1 => 0x6bd7, 0xf2 => 0x6bd8, 0xf3 => 0x6cb8, 0xf4 => 0xf968, 0xf5 => 0x7435, 0xf6 => 0x75fa, 0xf7 => 0x7812, 0xf8 => 0x7891, 0xf9 => 0x79d5, 0xfa => 0x79d8, 0xfb => 0x7c83, 0xfc => 0x7dcb, 0xfd => 0x7fe1, 0xfe => 0x80a5, }, 0xde => { 0xa1 => 0x813e, 0xa2 => 0x81c2, 0xa3 => 0x83f2, 0xa4 => 0x871a, 0xa5 => 0x88e8, 0xa6 => 0x8ab9, 0xa7 => 0x8b6c, 0xa8 => 0x8cbb, 0xa9 => 0x9119, 0xaa => 0x975e, 0xab => 0x98db, 0xac => 0x9f3b, 0xad => 0x56ac, 0xae => 0x5b2a, 0xaf => 0x5f6c, 0xb0 => 0x658c, 0xb1 => 0x6ab3, 0xb2 => 0x6baf, 0xb3 => 0x6d5c, 0xb4 => 0x6ff1, 0xb5 => 0x7015, 0xb6 => 0x725d, 0xb7 => 0x73ad, 0xb8 => 0x8ca7, 0xb9 => 0x8cd3, 0xba => 0x983b, 0xbb => 0x6191, 0xbc => 0x6c37, 0xbd => 0x8058, 0xbe => 0x9a01, 0xbf => 0x4e4d, 0xc0 => 0x4e8b, 0xc1 => 0x4e9b, 0xc2 => 0x4ed5, 0xc3 => 0x4f3a, 0xc4 => 0x4f3c, 0xc5 => 0x4f7f, 0xc6 => 0x4fdf, 0xc7 => 0x50ff, 0xc8 => 0x53f2, 0xc9 => 0x53f8, 0xca => 0x5506, 0xcb => 0x55e3, 0xcc => 0x56db, 0xcd => 0x58eb, 0xce => 0x5962, 0xcf => 0x5a11, 0xd0 => 0x5beb, 0xd1 => 0x5bfa, 0xd2 => 0x5c04, 0xd3 => 0x5df3, 0xd4 => 0x5e2b, 0xd5 => 0x5f99, 0xd6 => 0x601d, 0xd7 => 0x6368, 0xd8 => 0x659c, 0xd9 => 0x65af, 0xda => 0x67f6, 0xdb => 0x67fb, 0xdc => 0x68ad, 0xdd => 0x6b7b, 0xde => 0x6c99, 0xdf => 0x6cd7, 0xe0 => 0x6e23, 0xe1 => 0x7009, 0xe2 => 0x7345, 0xe3 => 0x7802, 0xe4 => 0x793e, 0xe5 => 0x7940, 0xe6 => 0x7960, 0xe7 => 0x79c1, 0xe8 => 0x7be9, 0xe9 => 0x7d17, 0xea => 0x7d72, 0xeb => 0x8086, 0xec => 0x820d, 0xed => 0x838e, 0xee => 0x84d1, 0xef => 0x86c7, 0xf0 => 0x88df, 0xf1 => 0x8a50, 0xf2 => 0x8a5e, 0xf3 => 0x8b1d, 0xf4 => 0x8cdc, 0xf5 => 0x8d66, 0xf6 => 0x8fad, 0xf7 => 0x90aa, 0xf8 => 0x98fc, 0xf9 => 0x99df, 0xfa => 0x9e9d, 0xfb => 0x524a, 0xfc => 0xf969, 0xfd => 0x6714, 0xfe => 0xf96a, }, 0xdf => { 0xa1 => 0x5098, 0xa2 => 0x522a, 0xa3 => 0x5c71, 0xa4 => 0x6563, 0xa5 => 0x6c55, 0xa6 => 0x73ca, 0xa7 => 0x7523, 0xa8 => 0x759d, 0xa9 => 0x7b97, 0xaa => 0x849c, 0xab => 0x9178, 0xac => 0x9730, 0xad => 0x4e77, 0xae => 0x6492, 0xaf => 0x6bba, 0xb0 => 0x715e, 0xb1 => 0x85a9, 0xb2 => 0x4e09, 0xb3 => 0xf96b, 0xb4 => 0x6749, 0xb5 => 0x68ee, 0xb6 => 0x6e17, 0xb7 => 0x829f, 0xb8 => 0x8518, 0xb9 => 0x886b, 0xba => 0x63f7, 0xbb => 0x6f81, 0xbc => 0x9212, 0xbd => 0x98af, 0xbe => 0x4e0a, 0xbf => 0x50b7, 0xc0 => 0x50cf, 0xc1 => 0x511f, 0xc2 => 0x5546, 0xc3 => 0x55aa, 0xc4 => 0x5617, 0xc5 => 0x5b40, 0xc6 => 0x5c19, 0xc7 => 0x5ce0, 0xc8 => 0x5e38, 0xc9 => 0x5e8a, 0xca => 0x5ea0, 0xcb => 0x5ec2, 0xcc => 0x60f3, 0xcd => 0x6851, 0xce => 0x6a61, 0xcf => 0x6e58, 0xd0 => 0x723d, 0xd1 => 0x7240, 0xd2 => 0x72c0, 0xd3 => 0x76f8, 0xd4 => 0x7965, 0xd5 => 0x7bb1, 0xd6 => 0x7fd4, 0xd7 => 0x88f3, 0xd8 => 0x89f4, 0xd9 => 0x8a73, 0xda => 0x8c61, 0xdb => 0x8cde, 0xdc => 0x971c, 0xdd => 0x585e, 0xde => 0x74bd, 0xdf => 0x8cfd, 0xe0 => 0x55c7, 0xe1 => 0xf96c, 0xe2 => 0x7a61, 0xe3 => 0x7d22, 0xe4 => 0x8272, 0xe5 => 0x7272, 0xe6 => 0x751f, 0xe7 => 0x7525, 0xe8 => 0xf96d, 0xe9 => 0x7b19, 0xea => 0x5885, 0xeb => 0x58fb, 0xec => 0x5dbc, 0xed => 0x5e8f, 0xee => 0x5eb6, 0xef => 0x5f90, 0xf0 => 0x6055, 0xf1 => 0x6292, 0xf2 => 0x637f, 0xf3 => 0x654d, 0xf4 => 0x6691, 0xf5 => 0x66d9, 0xf6 => 0x66f8, 0xf7 => 0x6816, 0xf8 => 0x68f2, 0xf9 => 0x7280, 0xfa => 0x745e, 0xfb => 0x7b6e, 0xfc => 0x7d6e, 0xfd => 0x7dd6, 0xfe => 0x7f72, }, 0xe0 => { 0xa1 => 0x80e5, 0xa2 => 0x8212, 0xa3 => 0x85af, 0xa4 => 0x897f, 0xa5 => 0x8a93, 0xa6 => 0x901d, 0xa7 => 0x92e4, 0xa8 => 0x9ecd, 0xa9 => 0x9f20, 0xaa => 0x5915, 0xab => 0x596d, 0xac => 0x5e2d, 0xad => 0x60dc, 0xae => 0x6614, 0xaf => 0x6673, 0xb0 => 0x6790, 0xb1 => 0x6c50, 0xb2 => 0x6dc5, 0xb3 => 0x6f5f, 0xb4 => 0x77f3, 0xb5 => 0x78a9, 0xb6 => 0x84c6, 0xb7 => 0x91cb, 0xb8 => 0x932b, 0xb9 => 0x4ed9, 0xba => 0x50ca, 0xbb => 0x5148, 0xbc => 0x5584, 0xbd => 0x5b0b, 0xbe => 0x5ba3, 0xbf => 0x6247, 0xc0 => 0x657e, 0xc1 => 0x65cb, 0xc2 => 0x6e32, 0xc3 => 0x717d, 0xc4 => 0x7401, 0xc5 => 0x7444, 0xc6 => 0x7487, 0xc7 => 0x74bf, 0xc8 => 0x766c, 0xc9 => 0x79aa, 0xca => 0x7dda, 0xcb => 0x7e55, 0xcc => 0x7fa8, 0xcd => 0x817a, 0xce => 0x81b3, 0xcf => 0x8239, 0xd0 => 0x861a, 0xd1 => 0x87ec, 0xd2 => 0x8a75, 0xd3 => 0x8de3, 0xd4 => 0x9078, 0xd5 => 0x9291, 0xd6 => 0x9425, 0xd7 => 0x994d, 0xd8 => 0x9bae, 0xd9 => 0x5368, 0xda => 0x5c51, 0xdb => 0x6954, 0xdc => 0x6cc4, 0xdd => 0x6d29, 0xde => 0x6e2b, 0xdf => 0x820c, 0xe0 => 0x859b, 0xe1 => 0x893b, 0xe2 => 0x8a2d, 0xe3 => 0x8aaa, 0xe4 => 0x96ea, 0xe5 => 0x9f67, 0xe6 => 0x5261, 0xe7 => 0x66b9, 0xe8 => 0x6bb2, 0xe9 => 0x7e96, 0xea => 0x87fe, 0xeb => 0x8d0d, 0xec => 0x9583, 0xed => 0x965d, 0xee => 0x651d, 0xef => 0x6d89, 0xf0 => 0x71ee, 0xf1 => 0xf96e, 0xf2 => 0x57ce, 0xf3 => 0x59d3, 0xf4 => 0x5bac, 0xf5 => 0x6027, 0xf6 => 0x60fa, 0xf7 => 0x6210, 0xf8 => 0x661f, 0xf9 => 0x665f, 0xfa => 0x7329, 0xfb => 0x73f9, 0xfc => 0x76db, 0xfd => 0x7701, 0xfe => 0x7b6c, }, 0xe1 => { 0xa1 => 0x8056, 0xa2 => 0x8072, 0xa3 => 0x8165, 0xa4 => 0x8aa0, 0xa5 => 0x9192, 0xa6 => 0x4e16, 0xa7 => 0x52e2, 0xa8 => 0x6b72, 0xa9 => 0x6d17, 0xaa => 0x7a05, 0xab => 0x7b39, 0xac => 0x7d30, 0xad => 0xf96f, 0xae => 0x8cb0, 0xaf => 0x53ec, 0xb0 => 0x562f, 0xb1 => 0x5851, 0xb2 => 0x5bb5, 0xb3 => 0x5c0f, 0xb4 => 0x5c11, 0xb5 => 0x5de2, 0xb6 => 0x6240, 0xb7 => 0x6383, 0xb8 => 0x6414, 0xb9 => 0x662d, 0xba => 0x68b3, 0xbb => 0x6cbc, 0xbc => 0x6d88, 0xbd => 0x6eaf, 0xbe => 0x701f, 0xbf => 0x70a4, 0xc0 => 0x71d2, 0xc1 => 0x7526, 0xc2 => 0x758f, 0xc3 => 0x758e, 0xc4 => 0x7619, 0xc5 => 0x7b11, 0xc6 => 0x7be0, 0xc7 => 0x7c2b, 0xc8 => 0x7d20, 0xc9 => 0x7d39, 0xca => 0x852c, 0xcb => 0x856d, 0xcc => 0x8607, 0xcd => 0x8a34, 0xce => 0x900d, 0xcf => 0x9061, 0xd0 => 0x90b5, 0xd1 => 0x92b7, 0xd2 => 0x97f6, 0xd3 => 0x9a37, 0xd4 => 0x4fd7, 0xd5 => 0x5c6c, 0xd6 => 0x675f, 0xd7 => 0x6d91, 0xd8 => 0x7c9f, 0xd9 => 0x7e8c, 0xda => 0x8b16, 0xdb => 0x8d16, 0xdc => 0x901f, 0xdd => 0x5b6b, 0xde => 0x5dfd, 0xdf => 0x640d, 0xe0 => 0x84c0, 0xe1 => 0x905c, 0xe2 => 0x98e1, 0xe3 => 0x7387, 0xe4 => 0x5b8b, 0xe5 => 0x609a, 0xe6 => 0x677e, 0xe7 => 0x6dde, 0xe8 => 0x8a1f, 0xe9 => 0x8aa6, 0xea => 0x9001, 0xeb => 0x980c, 0xec => 0x5237, 0xed => 0xf970, 0xee => 0x7051, 0xef => 0x788e, 0xf0 => 0x9396, 0xf1 => 0x8870, 0xf2 => 0x91d7, 0xf3 => 0x4fee, 0xf4 => 0x53d7, 0xf5 => 0x55fd, 0xf6 => 0x56da, 0xf7 => 0x5782, 0xf8 => 0x58fd, 0xf9 => 0x5ac2, 0xfa => 0x5b88, 0xfb => 0x5cab, 0xfc => 0x5cc0, 0xfd => 0x5e25, 0xfe => 0x6101, }, 0xe2 => { 0xa1 => 0x620d, 0xa2 => 0x624b, 0xa3 => 0x6388, 0xa4 => 0x641c, 0xa5 => 0x6536, 0xa6 => 0x6578, 0xa7 => 0x6a39, 0xa8 => 0x6b8a, 0xa9 => 0x6c34, 0xaa => 0x6d19, 0xab => 0x6f31, 0xac => 0x71e7, 0xad => 0x72e9, 0xae => 0x7378, 0xaf => 0x7407, 0xb0 => 0x74b2, 0xb1 => 0x7626, 0xb2 => 0x7761, 0xb3 => 0x79c0, 0xb4 => 0x7a57, 0xb5 => 0x7aea, 0xb6 => 0x7cb9, 0xb7 => 0x7d8f, 0xb8 => 0x7dac, 0xb9 => 0x7e61, 0xba => 0x7f9e, 0xbb => 0x8129, 0xbc => 0x8331, 0xbd => 0x8490, 0xbe => 0x84da, 0xbf => 0x85ea, 0xc0 => 0x8896, 0xc1 => 0x8ab0, 0xc2 => 0x8b90, 0xc3 => 0x8f38, 0xc4 => 0x9042, 0xc5 => 0x9083, 0xc6 => 0x916c, 0xc7 => 0x9296, 0xc8 => 0x92b9, 0xc9 => 0x968b, 0xca => 0x96a7, 0xcb => 0x96a8, 0xcc => 0x96d6, 0xcd => 0x9700, 0xce => 0x9808, 0xcf => 0x9996, 0xd0 => 0x9ad3, 0xd1 => 0x9b1a, 0xd2 => 0x53d4, 0xd3 => 0x587e, 0xd4 => 0x5919, 0xd5 => 0x5b70, 0xd6 => 0x5bbf, 0xd7 => 0x6dd1, 0xd8 => 0x6f5a, 0xd9 => 0x719f, 0xda => 0x7421, 0xdb => 0x74b9, 0xdc => 0x8085, 0xdd => 0x83fd, 0xde => 0x5de1, 0xdf => 0x5f87, 0xe0 => 0x5faa, 0xe1 => 0x6042, 0xe2 => 0x65ec, 0xe3 => 0x6812, 0xe4 => 0x696f, 0xe5 => 0x6a53, 0xe6 => 0x6b89, 0xe7 => 0x6d35, 0xe8 => 0x6df3, 0xe9 => 0x73e3, 0xea => 0x76fe, 0xeb => 0x77ac, 0xec => 0x7b4d, 0xed => 0x7d14, 0xee => 0x8123, 0xef => 0x821c, 0xf0 => 0x8340, 0xf1 => 0x84f4, 0xf2 => 0x8563, 0xf3 => 0x8a62, 0xf4 => 0x8ac4, 0xf5 => 0x9187, 0xf6 => 0x931e, 0xf7 => 0x9806, 0xf8 => 0x99b4, 0xf9 => 0x620c, 0xfa => 0x8853, 0xfb => 0x8ff0, 0xfc => 0x9265, 0xfd => 0x5d07, 0xfe => 0x5d27, }, 0xe3 => { 0xa1 => 0x5d69, 0xa2 => 0x745f, 0xa3 => 0x819d, 0xa4 => 0x8768, 0xa5 => 0x6fd5, 0xa6 => 0x62fe, 0xa7 => 0x7fd2, 0xa8 => 0x8936, 0xa9 => 0x8972, 0xaa => 0x4e1e, 0xab => 0x4e58, 0xac => 0x50e7, 0xad => 0x52dd, 0xae => 0x5347, 0xaf => 0x627f, 0xb0 => 0x6607, 0xb1 => 0x7e69, 0xb2 => 0x8805, 0xb3 => 0x965e, 0xb4 => 0x4f8d, 0xb5 => 0x5319, 0xb6 => 0x5636, 0xb7 => 0x59cb, 0xb8 => 0x5aa4, 0xb9 => 0x5c38, 0xba => 0x5c4e, 0xbb => 0x5c4d, 0xbc => 0x5e02, 0xbd => 0x5f11, 0xbe => 0x6043, 0xbf => 0x65bd, 0xc0 => 0x662f, 0xc1 => 0x6642, 0xc2 => 0x67be, 0xc3 => 0x67f4, 0xc4 => 0x731c, 0xc5 => 0x77e2, 0xc6 => 0x793a, 0xc7 => 0x7fc5, 0xc8 => 0x8494, 0xc9 => 0x84cd, 0xca => 0x8996, 0xcb => 0x8a66, 0xcc => 0x8a69, 0xcd => 0x8ae1, 0xce => 0x8c55, 0xcf => 0x8c7a, 0xd0 => 0x57f4, 0xd1 => 0x5bd4, 0xd2 => 0x5f0f, 0xd3 => 0x606f, 0xd4 => 0x62ed, 0xd5 => 0x690d, 0xd6 => 0x6b96, 0xd7 => 0x6e5c, 0xd8 => 0x7184, 0xd9 => 0x7bd2, 0xda => 0x8755, 0xdb => 0x8b58, 0xdc => 0x8efe, 0xdd => 0x98df, 0xde => 0x98fe, 0xdf => 0x4f38, 0xe0 => 0x4f81, 0xe1 => 0x4fe1, 0xe2 => 0x547b, 0xe3 => 0x5a20, 0xe4 => 0x5bb8, 0xe5 => 0x613c, 0xe6 => 0x65b0, 0xe7 => 0x6668, 0xe8 => 0x71fc, 0xe9 => 0x7533, 0xea => 0x795e, 0xeb => 0x7d33, 0xec => 0x814e, 0xed => 0x81e3, 0xee => 0x8398, 0xef => 0x85aa, 0xf0 => 0x85ce, 0xf1 => 0x8703, 0xf2 => 0x8a0a, 0xf3 => 0x8eab, 0xf4 => 0x8f9b, 0xf5 => 0xf971, 0xf6 => 0x8fc5, 0xf7 => 0x5931, 0xf8 => 0x5ba4, 0xf9 => 0x5be6, 0xfa => 0x6089, 0xfb => 0x5be9, 0xfc => 0x5c0b, 0xfd => 0x5fc3, 0xfe => 0x6c81, }, 0xe4 => { 0xa1 => 0xf972, 0xa2 => 0x6df1, 0xa3 => 0x700b, 0xa4 => 0x751a, 0xa5 => 0x82af, 0xa6 => 0x8af6, 0xa7 => 0x4ec0, 0xa8 => 0x5341, 0xa9 => 0xf973, 0xaa => 0x96d9, 0xab => 0x6c0f, 0xac => 0x4e9e, 0xad => 0x4fc4, 0xae => 0x5152, 0xaf => 0x555e, 0xb0 => 0x5a25, 0xb1 => 0x5ce8, 0xb2 => 0x6211, 0xb3 => 0x7259, 0xb4 => 0x82bd, 0xb5 => 0x83aa, 0xb6 => 0x86fe, 0xb7 => 0x8859, 0xb8 => 0x8a1d, 0xb9 => 0x963f, 0xba => 0x96c5, 0xbb => 0x9913, 0xbc => 0x9d09, 0xbd => 0x9d5d, 0xbe => 0x580a, 0xbf => 0x5cb3, 0xc0 => 0x5dbd, 0xc1 => 0x5e44, 0xc2 => 0x60e1, 0xc3 => 0x6115, 0xc4 => 0x63e1, 0xc5 => 0x6a02, 0xc6 => 0x6e25, 0xc7 => 0x9102, 0xc8 => 0x9354, 0xc9 => 0x984e, 0xca => 0x9c10, 0xcb => 0x9f77, 0xcc => 0x5b89, 0xcd => 0x5cb8, 0xce => 0x6309, 0xcf => 0x664f, 0xd0 => 0x6848, 0xd1 => 0x773c, 0xd2 => 0x96c1, 0xd3 => 0x978d, 0xd4 => 0x9854, 0xd5 => 0x9b9f, 0xd6 => 0x65a1, 0xd7 => 0x8b01, 0xd8 => 0x8ecb, 0xd9 => 0x95bc, 0xda => 0x5535, 0xdb => 0x5ca9, 0xdc => 0x5dd6, 0xdd => 0x5eb5, 0xde => 0x6697, 0xdf => 0x764c, 0xe0 => 0x83f4, 0xe1 => 0x95c7, 0xe2 => 0x58d3, 0xe3 => 0x62bc, 0xe4 => 0x72ce, 0xe5 => 0x9d28, 0xe6 => 0x4ef0, 0xe7 => 0x592e, 0xe8 => 0x600f, 0xe9 => 0x663b, 0xea => 0x6b83, 0xeb => 0x79e7, 0xec => 0x9d26, 0xed => 0x5393, 0xee => 0x54c0, 0xef => 0x57c3, 0xf0 => 0x5d16, 0xf1 => 0x611b, 0xf2 => 0x66d6, 0xf3 => 0x6daf, 0xf4 => 0x788d, 0xf5 => 0x827e, 0xf6 => 0x9698, 0xf7 => 0x9744, 0xf8 => 0x5384, 0xf9 => 0x627c, 0xfa => 0x6396, 0xfb => 0x6db2, 0xfc => 0x7e0a, 0xfd => 0x814b, 0xfe => 0x984d, }, 0xe5 => { 0xa1 => 0x6afb, 0xa2 => 0x7f4c, 0xa3 => 0x9daf, 0xa4 => 0x9e1a, 0xa5 => 0x4e5f, 0xa6 => 0x503b, 0xa7 => 0x51b6, 0xa8 => 0x591c, 0xa9 => 0x60f9, 0xaa => 0x63f6, 0xab => 0x6930, 0xac => 0x723a, 0xad => 0x8036, 0xae => 0xf974, 0xaf => 0x91ce, 0xb0 => 0x5f31, 0xb1 => 0xf975, 0xb2 => 0xf976, 0xb3 => 0x7d04, 0xb4 => 0x82e5, 0xb5 => 0x846f, 0xb6 => 0x84bb, 0xb7 => 0x85e5, 0xb8 => 0x8e8d, 0xb9 => 0xf977, 0xba => 0x4f6f, 0xbb => 0xf978, 0xbc => 0xf979, 0xbd => 0x58e4, 0xbe => 0x5b43, 0xbf => 0x6059, 0xc0 => 0x63da, 0xc1 => 0x6518, 0xc2 => 0x656d, 0xc3 => 0x6698, 0xc4 => 0xf97a, 0xc5 => 0x694a, 0xc6 => 0x6a23, 0xc7 => 0x6d0b, 0xc8 => 0x7001, 0xc9 => 0x716c, 0xca => 0x75d2, 0xcb => 0x760d, 0xcc => 0x79b3, 0xcd => 0x7a70, 0xce => 0xf97b, 0xcf => 0x7f8a, 0xd0 => 0xf97c, 0xd1 => 0x8944, 0xd2 => 0xf97d, 0xd3 => 0x8b93, 0xd4 => 0x91c0, 0xd5 => 0x967d, 0xd6 => 0xf97e, 0xd7 => 0x990a, 0xd8 => 0x5704, 0xd9 => 0x5fa1, 0xda => 0x65bc, 0xdb => 0x6f01, 0xdc => 0x7600, 0xdd => 0x79a6, 0xde => 0x8a9e, 0xdf => 0x99ad, 0xe0 => 0x9b5a, 0xe1 => 0x9f6c, 0xe2 => 0x5104, 0xe3 => 0x61b6, 0xe4 => 0x6291, 0xe5 => 0x6a8d, 0xe6 => 0x81c6, 0xe7 => 0x5043, 0xe8 => 0x5830, 0xe9 => 0x5f66, 0xea => 0x7109, 0xeb => 0x8a00, 0xec => 0x8afa, 0xed => 0x5b7c, 0xee => 0x8616, 0xef => 0x4ffa, 0xf0 => 0x513c, 0xf1 => 0x56b4, 0xf2 => 0x5944, 0xf3 => 0x63a9, 0xf4 => 0x6df9, 0xf5 => 0x5daa, 0xf6 => 0x696d, 0xf7 => 0x5186, 0xf8 => 0x4e88, 0xf9 => 0x4f59, 0xfa => 0xf97f, 0xfb => 0xf980, 0xfc => 0xf981, 0xfd => 0x5982, 0xfe => 0xf982, }, 0xe6 => { 0xa1 => 0xf983, 0xa2 => 0x6b5f, 0xa3 => 0x6c5d, 0xa4 => 0xf984, 0xa5 => 0x74b5, 0xa6 => 0x7916, 0xa7 => 0xf985, 0xa8 => 0x8207, 0xa9 => 0x8245, 0xaa => 0x8339, 0xab => 0x8f3f, 0xac => 0x8f5d, 0xad => 0xf986, 0xae => 0x9918, 0xaf => 0xf987, 0xb0 => 0xf988, 0xb1 => 0xf989, 0xb2 => 0x4ea6, 0xb3 => 0xf98a, 0xb4 => 0x57df, 0xb5 => 0x5f79, 0xb6 => 0x6613, 0xb7 => 0xf98b, 0xb8 => 0xf98c, 0xb9 => 0x75ab, 0xba => 0x7e79, 0xbb => 0x8b6f, 0xbc => 0xf98d, 0xbd => 0x9006, 0xbe => 0x9a5b, 0xbf => 0x56a5, 0xc0 => 0x5827, 0xc1 => 0x59f8, 0xc2 => 0x5a1f, 0xc3 => 0x5bb4, 0xc4 => 0xf98e, 0xc5 => 0x5ef6, 0xc6 => 0xf98f, 0xc7 => 0xf990, 0xc8 => 0x6350, 0xc9 => 0x633b, 0xca => 0xf991, 0xcb => 0x693d, 0xcc => 0x6c87, 0xcd => 0x6cbf, 0xce => 0x6d8e, 0xcf => 0x6d93, 0xd0 => 0x6df5, 0xd1 => 0x6f14, 0xd2 => 0xf992, 0xd3 => 0x70df, 0xd4 => 0x7136, 0xd5 => 0x7159, 0xd6 => 0xf993, 0xd7 => 0x71c3, 0xd8 => 0x71d5, 0xd9 => 0xf994, 0xda => 0x784f, 0xdb => 0x786f, 0xdc => 0xf995, 0xdd => 0x7b75, 0xde => 0x7de3, 0xdf => 0xf996, 0xe0 => 0x7e2f, 0xe1 => 0xf997, 0xe2 => 0x884d, 0xe3 => 0x8edf, 0xe4 => 0xf998, 0xe5 => 0xf999, 0xe6 => 0xf99a, 0xe7 => 0x925b, 0xe8 => 0xf99b, 0xe9 => 0x9cf6, 0xea => 0xf99c, 0xeb => 0xf99d, 0xec => 0xf99e, 0xed => 0x6085, 0xee => 0x6d85, 0xef => 0xf99f, 0xf0 => 0x71b1, 0xf1 => 0xf9a0, 0xf2 => 0xf9a1, 0xf3 => 0x95b1, 0xf4 => 0x53ad, 0xf5 => 0xf9a2, 0xf6 => 0xf9a3, 0xf7 => 0xf9a4, 0xf8 => 0x67d3, 0xf9 => 0xf9a5, 0xfa => 0x708e, 0xfb => 0x7130, 0xfc => 0x7430, 0xfd => 0x8276, 0xfe => 0x82d2, }, 0xe7 => { 0xa1 => 0xf9a6, 0xa2 => 0x95bb, 0xa3 => 0x9ae5, 0xa4 => 0x9e7d, 0xa5 => 0x66c4, 0xa6 => 0xf9a7, 0xa7 => 0x71c1, 0xa8 => 0x8449, 0xa9 => 0xf9a8, 0xaa => 0xf9a9, 0xab => 0x584b, 0xac => 0xf9aa, 0xad => 0xf9ab, 0xae => 0x5db8, 0xaf => 0x5f71, 0xb0 => 0xf9ac, 0xb1 => 0x6620, 0xb2 => 0x668e, 0xb3 => 0x6979, 0xb4 => 0x69ae, 0xb5 => 0x6c38, 0xb6 => 0x6cf3, 0xb7 => 0x6e36, 0xb8 => 0x6f41, 0xb9 => 0x6fda, 0xba => 0x701b, 0xbb => 0x702f, 0xbc => 0x7150, 0xbd => 0x71df, 0xbe => 0x7370, 0xbf => 0xf9ad, 0xc0 => 0x745b, 0xc1 => 0xf9ae, 0xc2 => 0x74d4, 0xc3 => 0x76c8, 0xc4 => 0x7a4e, 0xc5 => 0x7e93, 0xc6 => 0xf9af, 0xc7 => 0xf9b0, 0xc8 => 0x82f1, 0xc9 => 0x8a60, 0xca => 0x8fce, 0xcb => 0xf9b1, 0xcc => 0x9348, 0xcd => 0xf9b2, 0xce => 0x9719, 0xcf => 0xf9b3, 0xd0 => 0xf9b4, 0xd1 => 0x4e42, 0xd2 => 0x502a, 0xd3 => 0xf9b5, 0xd4 => 0x5208, 0xd5 => 0x53e1, 0xd6 => 0x66f3, 0xd7 => 0x6c6d, 0xd8 => 0x6fca, 0xd9 => 0x730a, 0xda => 0x777f, 0xdb => 0x7a62, 0xdc => 0x82ae, 0xdd => 0x85dd, 0xde => 0x8602, 0xdf => 0xf9b6, 0xe0 => 0x88d4, 0xe1 => 0x8a63, 0xe2 => 0x8b7d, 0xe3 => 0x8c6b, 0xe4 => 0xf9b7, 0xe5 => 0x92b3, 0xe6 => 0xf9b8, 0xe7 => 0x9713, 0xe8 => 0x9810, 0xe9 => 0x4e94, 0xea => 0x4f0d, 0xeb => 0x4fc9, 0xec => 0x50b2, 0xed => 0x5348, 0xee => 0x543e, 0xef => 0x5433, 0xf0 => 0x55da, 0xf1 => 0x5862, 0xf2 => 0x58ba, 0xf3 => 0x5967, 0xf4 => 0x5a1b, 0xf5 => 0x5be4, 0xf6 => 0x609f, 0xf7 => 0xf9b9, 0xf8 => 0x61ca, 0xf9 => 0x6556, 0xfa => 0x65ff, 0xfb => 0x6664, 0xfc => 0x68a7, 0xfd => 0x6c5a, 0xfe => 0x6fb3, }, 0xe8 => { 0xa1 => 0x70cf, 0xa2 => 0x71ac, 0xa3 => 0x7352, 0xa4 => 0x7b7d, 0xa5 => 0x8708, 0xa6 => 0x8aa4, 0xa7 => 0x9c32, 0xa8 => 0x9f07, 0xa9 => 0x5c4b, 0xaa => 0x6c83, 0xab => 0x7344, 0xac => 0x7389, 0xad => 0x923a, 0xae => 0x6eab, 0xaf => 0x7465, 0xb0 => 0x761f, 0xb1 => 0x7a69, 0xb2 => 0x7e15, 0xb3 => 0x860a, 0xb4 => 0x5140, 0xb5 => 0x58c5, 0xb6 => 0x64c1, 0xb7 => 0x74ee, 0xb8 => 0x7515, 0xb9 => 0x7670, 0xba => 0x7fc1, 0xbb => 0x9095, 0xbc => 0x96cd, 0xbd => 0x9954, 0xbe => 0x6e26, 0xbf => 0x74e6, 0xc0 => 0x7aa9, 0xc1 => 0x7aaa, 0xc2 => 0x81e5, 0xc3 => 0x86d9, 0xc4 => 0x8778, 0xc5 => 0x8a1b, 0xc6 => 0x5a49, 0xc7 => 0x5b8c, 0xc8 => 0x5b9b, 0xc9 => 0x68a1, 0xca => 0x6900, 0xcb => 0x6d63, 0xcc => 0x73a9, 0xcd => 0x7413, 0xce => 0x742c, 0xcf => 0x7897, 0xd0 => 0x7de9, 0xd1 => 0x7feb, 0xd2 => 0x8118, 0xd3 => 0x8155, 0xd4 => 0x839e, 0xd5 => 0x8c4c, 0xd6 => 0x962e, 0xd7 => 0x9811, 0xd8 => 0x66f0, 0xd9 => 0x5f80, 0xda => 0x65fa, 0xdb => 0x6789, 0xdc => 0x6c6a, 0xdd => 0x738b, 0xde => 0x502d, 0xdf => 0x5a03, 0xe0 => 0x6b6a, 0xe1 => 0x77ee, 0xe2 => 0x5916, 0xe3 => 0x5d6c, 0xe4 => 0x5dcd, 0xe5 => 0x7325, 0xe6 => 0x754f, 0xe7 => 0xf9ba, 0xe8 => 0xf9bb, 0xe9 => 0x50e5, 0xea => 0x51f9, 0xeb => 0x582f, 0xec => 0x592d, 0xed => 0x5996, 0xee => 0x59da, 0xef => 0x5be5, 0xf0 => 0xf9bc, 0xf1 => 0xf9bd, 0xf2 => 0x5da2, 0xf3 => 0x62d7, 0xf4 => 0x6416, 0xf5 => 0x6493, 0xf6 => 0x64fe, 0xf7 => 0xf9be, 0xf8 => 0x66dc, 0xf9 => 0xf9bf, 0xfa => 0x6a48, 0xfb => 0xf9c0, 0xfc => 0x71ff, 0xfd => 0x7464, 0xfe => 0xf9c1, }, 0xe9 => { 0xa1 => 0x7a88, 0xa2 => 0x7aaf, 0xa3 => 0x7e47, 0xa4 => 0x7e5e, 0xa5 => 0x8000, 0xa6 => 0x8170, 0xa7 => 0xf9c2, 0xa8 => 0x87ef, 0xa9 => 0x8981, 0xaa => 0x8b20, 0xab => 0x9059, 0xac => 0xf9c3, 0xad => 0x9080, 0xae => 0x9952, 0xaf => 0x617e, 0xb0 => 0x6b32, 0xb1 => 0x6d74, 0xb2 => 0x7e1f, 0xb3 => 0x8925, 0xb4 => 0x8fb1, 0xb5 => 0x4fd1, 0xb6 => 0x50ad, 0xb7 => 0x5197, 0xb8 => 0x52c7, 0xb9 => 0x57c7, 0xba => 0x5889, 0xbb => 0x5bb9, 0xbc => 0x5eb8, 0xbd => 0x6142, 0xbe => 0x6995, 0xbf => 0x6d8c, 0xc0 => 0x6e67, 0xc1 => 0x6eb6, 0xc2 => 0x7194, 0xc3 => 0x7462, 0xc4 => 0x7528, 0xc5 => 0x752c, 0xc6 => 0x8073, 0xc7 => 0x8338, 0xc8 => 0x84c9, 0xc9 => 0x8e0a, 0xca => 0x9394, 0xcb => 0x93de, 0xcc => 0xf9c4, 0xcd => 0x4e8e, 0xce => 0x4f51, 0xcf => 0x5076, 0xd0 => 0x512a, 0xd1 => 0x53c8, 0xd2 => 0x53cb, 0xd3 => 0x53f3, 0xd4 => 0x5b87, 0xd5 => 0x5bd3, 0xd6 => 0x5c24, 0xd7 => 0x611a, 0xd8 => 0x6182, 0xd9 => 0x65f4, 0xda => 0x725b, 0xdb => 0x7397, 0xdc => 0x7440, 0xdd => 0x76c2, 0xde => 0x7950, 0xdf => 0x7991, 0xe0 => 0x79b9, 0xe1 => 0x7d06, 0xe2 => 0x7fbd, 0xe3 => 0x828b, 0xe4 => 0x85d5, 0xe5 => 0x865e, 0xe6 => 0x8fc2, 0xe7 => 0x9047, 0xe8 => 0x90f5, 0xe9 => 0x91ea, 0xea => 0x9685, 0xeb => 0x96e8, 0xec => 0x96e9, 0xed => 0x52d6, 0xee => 0x5f67, 0xef => 0x65ed, 0xf0 => 0x6631, 0xf1 => 0x682f, 0xf2 => 0x715c, 0xf3 => 0x7a36, 0xf4 => 0x90c1, 0xf5 => 0x980a, 0xf6 => 0x4e91, 0xf7 => 0xf9c5, 0xf8 => 0x6a52, 0xf9 => 0x6b9e, 0xfa => 0x6f90, 0xfb => 0x7189, 0xfc => 0x8018, 0xfd => 0x82b8, 0xfe => 0x8553, }, 0xea => { 0xa1 => 0x904b, 0xa2 => 0x9695, 0xa3 => 0x96f2, 0xa4 => 0x97fb, 0xa5 => 0x851a, 0xa6 => 0x9b31, 0xa7 => 0x4e90, 0xa8 => 0x718a, 0xa9 => 0x96c4, 0xaa => 0x5143, 0xab => 0x539f, 0xac => 0x54e1, 0xad => 0x5713, 0xae => 0x5712, 0xaf => 0x57a3, 0xb0 => 0x5a9b, 0xb1 => 0x5ac4, 0xb2 => 0x5bc3, 0xb3 => 0x6028, 0xb4 => 0x613f, 0xb5 => 0x63f4, 0xb6 => 0x6c85, 0xb7 => 0x6d39, 0xb8 => 0x6e72, 0xb9 => 0x6e90, 0xba => 0x7230, 0xbb => 0x733f, 0xbc => 0x7457, 0xbd => 0x82d1, 0xbe => 0x8881, 0xbf => 0x8f45, 0xc0 => 0x9060, 0xc1 => 0xf9c6, 0xc2 => 0x9662, 0xc3 => 0x9858, 0xc4 => 0x9d1b, 0xc5 => 0x6708, 0xc6 => 0x8d8a, 0xc7 => 0x925e, 0xc8 => 0x4f4d, 0xc9 => 0x5049, 0xca => 0x50de, 0xcb => 0x5371, 0xcc => 0x570d, 0xcd => 0x59d4, 0xce => 0x5a01, 0xcf => 0x5c09, 0xd0 => 0x6170, 0xd1 => 0x6690, 0xd2 => 0x6e2d, 0xd3 => 0x7232, 0xd4 => 0x744b, 0xd5 => 0x7def, 0xd6 => 0x80c3, 0xd7 => 0x840e, 0xd8 => 0x8466, 0xd9 => 0x853f, 0xda => 0x875f, 0xdb => 0x885b, 0xdc => 0x8918, 0xdd => 0x8b02, 0xde => 0x9055, 0xdf => 0x97cb, 0xe0 => 0x9b4f, 0xe1 => 0x4e73, 0xe2 => 0x4f91, 0xe3 => 0x5112, 0xe4 => 0x516a, 0xe5 => 0xf9c7, 0xe6 => 0x552f, 0xe7 => 0x55a9, 0xe8 => 0x5b7a, 0xe9 => 0x5ba5, 0xea => 0x5e7c, 0xeb => 0x5e7d, 0xec => 0x5ebe, 0xed => 0x60a0, 0xee => 0x60df, 0xef => 0x6108, 0xf0 => 0x6109, 0xf1 => 0x63c4, 0xf2 => 0x6538, 0xf3 => 0x6709, 0xf4 => 0xf9c8, 0xf5 => 0x67d4, 0xf6 => 0x67da, 0xf7 => 0xf9c9, 0xf8 => 0x6961, 0xf9 => 0x6962, 0xfa => 0x6cb9, 0xfb => 0x6d27, 0xfc => 0xf9ca, 0xfd => 0x6e38, 0xfe => 0xf9cb, }, 0xeb => { 0xa1 => 0x6fe1, 0xa2 => 0x7336, 0xa3 => 0x7337, 0xa4 => 0xf9cc, 0xa5 => 0x745c, 0xa6 => 0x7531, 0xa7 => 0xf9cd, 0xa8 => 0x7652, 0xa9 => 0xf9ce, 0xaa => 0xf9cf, 0xab => 0x7dad, 0xac => 0x81fe, 0xad => 0x8438, 0xae => 0x88d5, 0xaf => 0x8a98, 0xb0 => 0x8adb, 0xb1 => 0x8aed, 0xb2 => 0x8e30, 0xb3 => 0x8e42, 0xb4 => 0x904a, 0xb5 => 0x903e, 0xb6 => 0x907a, 0xb7 => 0x9149, 0xb8 => 0x91c9, 0xb9 => 0x936e, 0xba => 0xf9d0, 0xbb => 0xf9d1, 0xbc => 0x5809, 0xbd => 0xf9d2, 0xbe => 0x6bd3, 0xbf => 0x8089, 0xc0 => 0x80b2, 0xc1 => 0xf9d3, 0xc2 => 0xf9d4, 0xc3 => 0x5141, 0xc4 => 0x596b, 0xc5 => 0x5c39, 0xc6 => 0xf9d5, 0xc7 => 0xf9d6, 0xc8 => 0x6f64, 0xc9 => 0x73a7, 0xca => 0x80e4, 0xcb => 0x8d07, 0xcc => 0xf9d7, 0xcd => 0x9217, 0xce => 0x958f, 0xcf => 0xf9d8, 0xd0 => 0xf9d9, 0xd1 => 0xf9da, 0xd2 => 0xf9db, 0xd3 => 0x807f, 0xd4 => 0x620e, 0xd5 => 0x701c, 0xd6 => 0x7d68, 0xd7 => 0x878d, 0xd8 => 0xf9dc, 0xd9 => 0x57a0, 0xda => 0x6069, 0xdb => 0x6147, 0xdc => 0x6bb7, 0xdd => 0x8abe, 0xde => 0x9280, 0xdf => 0x96b1, 0xe0 => 0x4e59, 0xe1 => 0x541f, 0xe2 => 0x6deb, 0xe3 => 0x852d, 0xe4 => 0x9670, 0xe5 => 0x97f3, 0xe6 => 0x98ee, 0xe7 => 0x63d6, 0xe8 => 0x6ce3, 0xe9 => 0x9091, 0xea => 0x51dd, 0xeb => 0x61c9, 0xec => 0x81ba, 0xed => 0x9df9, 0xee => 0x4f9d, 0xef => 0x501a, 0xf0 => 0x5100, 0xf1 => 0x5b9c, 0xf2 => 0x610f, 0xf3 => 0x61ff, 0xf4 => 0x64ec, 0xf5 => 0x6905, 0xf6 => 0x6bc5, 0xf7 => 0x7591, 0xf8 => 0x77e3, 0xf9 => 0x7fa9, 0xfa => 0x8264, 0xfb => 0x858f, 0xfc => 0x87fb, 0xfd => 0x8863, 0xfe => 0x8abc, }, 0xec => { 0xa1 => 0x8b70, 0xa2 => 0x91ab, 0xa3 => 0x4e8c, 0xa4 => 0x4ee5, 0xa5 => 0x4f0a, 0xa6 => 0xf9dd, 0xa7 => 0xf9de, 0xa8 => 0x5937, 0xa9 => 0x59e8, 0xaa => 0xf9df, 0xab => 0x5df2, 0xac => 0x5f1b, 0xad => 0x5f5b, 0xae => 0x6021, 0xaf => 0xf9e0, 0xb0 => 0xf9e1, 0xb1 => 0xf9e2, 0xb2 => 0xf9e3, 0xb3 => 0x723e, 0xb4 => 0x73e5, 0xb5 => 0xf9e4, 0xb6 => 0x7570, 0xb7 => 0x75cd, 0xb8 => 0xf9e5, 0xb9 => 0x79fb, 0xba => 0xf9e6, 0xbb => 0x800c, 0xbc => 0x8033, 0xbd => 0x8084, 0xbe => 0x82e1, 0xbf => 0x8351, 0xc0 => 0xf9e7, 0xc1 => 0xf9e8, 0xc2 => 0x8cbd, 0xc3 => 0x8cb3, 0xc4 => 0x9087, 0xc5 => 0xf9e9, 0xc6 => 0xf9ea, 0xc7 => 0x98f4, 0xc8 => 0x990c, 0xc9 => 0xf9eb, 0xca => 0xf9ec, 0xcb => 0x7037, 0xcc => 0x76ca, 0xcd => 0x7fca, 0xce => 0x7fcc, 0xcf => 0x7ffc, 0xd0 => 0x8b1a, 0xd1 => 0x4eba, 0xd2 => 0x4ec1, 0xd3 => 0x5203, 0xd4 => 0x5370, 0xd5 => 0xf9ed, 0xd6 => 0x54bd, 0xd7 => 0x56e0, 0xd8 => 0x59fb, 0xd9 => 0x5bc5, 0xda => 0x5f15, 0xdb => 0x5fcd, 0xdc => 0x6e6e, 0xdd => 0xf9ee, 0xde => 0xf9ef, 0xdf => 0x7d6a, 0xe0 => 0x8335, 0xe1 => 0xf9f0, 0xe2 => 0x8693, 0xe3 => 0x8a8d, 0xe4 => 0xf9f1, 0xe5 => 0x976d, 0xe6 => 0x9777, 0xe7 => 0xf9f2, 0xe8 => 0xf9f3, 0xe9 => 0x4e00, 0xea => 0x4f5a, 0xeb => 0x4f7e, 0xec => 0x58f9, 0xed => 0x65e5, 0xee => 0x6ea2, 0xef => 0x9038, 0xf0 => 0x93b0, 0xf1 => 0x99b9, 0xf2 => 0x4efb, 0xf3 => 0x58ec, 0xf4 => 0x598a, 0xf5 => 0x59d9, 0xf6 => 0x6041, 0xf7 => 0xf9f4, 0xf8 => 0xf9f5, 0xf9 => 0x7a14, 0xfa => 0xf9f6, 0xfb => 0x834f, 0xfc => 0x8cc3, 0xfd => 0x5165, 0xfe => 0x5344, }, 0xed => { 0xa1 => 0xf9f7, 0xa2 => 0xf9f8, 0xa3 => 0xf9f9, 0xa4 => 0x4ecd, 0xa5 => 0x5269, 0xa6 => 0x5b55, 0xa7 => 0x82bf, 0xa8 => 0x4ed4, 0xa9 => 0x523a, 0xaa => 0x54a8, 0xab => 0x59c9, 0xac => 0x59ff, 0xad => 0x5b50, 0xae => 0x5b57, 0xaf => 0x5b5c, 0xb0 => 0x6063, 0xb1 => 0x6148, 0xb2 => 0x6ecb, 0xb3 => 0x7099, 0xb4 => 0x716e, 0xb5 => 0x7386, 0xb6 => 0x74f7, 0xb7 => 0x75b5, 0xb8 => 0x78c1, 0xb9 => 0x7d2b, 0xba => 0x8005, 0xbb => 0x81ea, 0xbc => 0x8328, 0xbd => 0x8517, 0xbe => 0x85c9, 0xbf => 0x8aee, 0xc0 => 0x8cc7, 0xc1 => 0x96cc, 0xc2 => 0x4f5c, 0xc3 => 0x52fa, 0xc4 => 0x56bc, 0xc5 => 0x65ab, 0xc6 => 0x6628, 0xc7 => 0x707c, 0xc8 => 0x70b8, 0xc9 => 0x7235, 0xca => 0x7dbd, 0xcb => 0x828d, 0xcc => 0x914c, 0xcd => 0x96c0, 0xce => 0x9d72, 0xcf => 0x5b71, 0xd0 => 0x68e7, 0xd1 => 0x6b98, 0xd2 => 0x6f7a, 0xd3 => 0x76de, 0xd4 => 0x5c91, 0xd5 => 0x66ab, 0xd6 => 0x6f5b, 0xd7 => 0x7bb4, 0xd8 => 0x7c2a, 0xd9 => 0x8836, 0xda => 0x96dc, 0xdb => 0x4e08, 0xdc => 0x4ed7, 0xdd => 0x5320, 0xde => 0x5834, 0xdf => 0x58bb, 0xe0 => 0x58ef, 0xe1 => 0x596c, 0xe2 => 0x5c07, 0xe3 => 0x5e33, 0xe4 => 0x5e84, 0xe5 => 0x5f35, 0xe6 => 0x638c, 0xe7 => 0x66b2, 0xe8 => 0x6756, 0xe9 => 0x6a1f, 0xea => 0x6aa3, 0xeb => 0x6b0c, 0xec => 0x6f3f, 0xed => 0x7246, 0xee => 0xf9fa, 0xef => 0x7350, 0xf0 => 0x748b, 0xf1 => 0x7ae0, 0xf2 => 0x7ca7, 0xf3 => 0x8178, 0xf4 => 0x81df, 0xf5 => 0x81e7, 0xf6 => 0x838a, 0xf7 => 0x846c, 0xf8 => 0x8523, 0xf9 => 0x8594, 0xfa => 0x85cf, 0xfb => 0x88dd, 0xfc => 0x8d13, 0xfd => 0x91ac, 0xfe => 0x9577, }, 0xee => { 0xa1 => 0x969c, 0xa2 => 0x518d, 0xa3 => 0x54c9, 0xa4 => 0x5728, 0xa5 => 0x5bb0, 0xa6 => 0x624d, 0xa7 => 0x6750, 0xa8 => 0x683d, 0xa9 => 0x6893, 0xaa => 0x6e3d, 0xab => 0x6ed3, 0xac => 0x707d, 0xad => 0x7e21, 0xae => 0x88c1, 0xaf => 0x8ca1, 0xb0 => 0x8f09, 0xb1 => 0x9f4b, 0xb2 => 0x9f4e, 0xb3 => 0x722d, 0xb4 => 0x7b8f, 0xb5 => 0x8acd, 0xb6 => 0x931a, 0xb7 => 0x4f47, 0xb8 => 0x4f4e, 0xb9 => 0x5132, 0xba => 0x5480, 0xbb => 0x59d0, 0xbc => 0x5e95, 0xbd => 0x62b5, 0xbe => 0x6775, 0xbf => 0x696e, 0xc0 => 0x6a17, 0xc1 => 0x6cae, 0xc2 => 0x6e1a, 0xc3 => 0x72d9, 0xc4 => 0x732a, 0xc5 => 0x75bd, 0xc6 => 0x7bb8, 0xc7 => 0x7d35, 0xc8 => 0x82e7, 0xc9 => 0x83f9, 0xca => 0x8457, 0xcb => 0x85f7, 0xcc => 0x8a5b, 0xcd => 0x8caf, 0xce => 0x8e87, 0xcf => 0x9019, 0xd0 => 0x90b8, 0xd1 => 0x96ce, 0xd2 => 0x9f5f, 0xd3 => 0x52e3, 0xd4 => 0x540a, 0xd5 => 0x5ae1, 0xd6 => 0x5bc2, 0xd7 => 0x6458, 0xd8 => 0x6575, 0xd9 => 0x6ef4, 0xda => 0x72c4, 0xdb => 0xf9fb, 0xdc => 0x7684, 0xdd => 0x7a4d, 0xde => 0x7b1b, 0xdf => 0x7c4d, 0xe0 => 0x7e3e, 0xe1 => 0x7fdf, 0xe2 => 0x837b, 0xe3 => 0x8b2b, 0xe4 => 0x8cca, 0xe5 => 0x8d64, 0xe6 => 0x8de1, 0xe7 => 0x8e5f, 0xe8 => 0x8fea, 0xe9 => 0x8ff9, 0xea => 0x9069, 0xeb => 0x93d1, 0xec => 0x4f43, 0xed => 0x4f7a, 0xee => 0x50b3, 0xef => 0x5168, 0xf0 => 0x5178, 0xf1 => 0x524d, 0xf2 => 0x526a, 0xf3 => 0x5861, 0xf4 => 0x587c, 0xf5 => 0x5960, 0xf6 => 0x5c08, 0xf7 => 0x5c55, 0xf8 => 0x5edb, 0xf9 => 0x609b, 0xfa => 0x6230, 0xfb => 0x6813, 0xfc => 0x6bbf, 0xfd => 0x6c08, 0xfe => 0x6fb1, }, 0xef => { 0xa1 => 0x714e, 0xa2 => 0x7420, 0xa3 => 0x7530, 0xa4 => 0x7538, 0xa5 => 0x7551, 0xa6 => 0x7672, 0xa7 => 0x7b4c, 0xa8 => 0x7b8b, 0xa9 => 0x7bad, 0xaa => 0x7bc6, 0xab => 0x7e8f, 0xac => 0x8a6e, 0xad => 0x8f3e, 0xae => 0x8f49, 0xaf => 0x923f, 0xb0 => 0x9293, 0xb1 => 0x9322, 0xb2 => 0x942b, 0xb3 => 0x96fb, 0xb4 => 0x985a, 0xb5 => 0x986b, 0xb6 => 0x991e, 0xb7 => 0x5207, 0xb8 => 0x622a, 0xb9 => 0x6298, 0xba => 0x6d59, 0xbb => 0x7664, 0xbc => 0x7aca, 0xbd => 0x7bc0, 0xbe => 0x7d76, 0xbf => 0x5360, 0xc0 => 0x5cbe, 0xc1 => 0x5e97, 0xc2 => 0x6f38, 0xc3 => 0x70b9, 0xc4 => 0x7c98, 0xc5 => 0x9711, 0xc6 => 0x9b8e, 0xc7 => 0x9ede, 0xc8 => 0x63a5, 0xc9 => 0x647a, 0xca => 0x8776, 0xcb => 0x4e01, 0xcc => 0x4e95, 0xcd => 0x4ead, 0xce => 0x505c, 0xcf => 0x5075, 0xd0 => 0x5448, 0xd1 => 0x59c3, 0xd2 => 0x5b9a, 0xd3 => 0x5e40, 0xd4 => 0x5ead, 0xd5 => 0x5ef7, 0xd6 => 0x5f81, 0xd7 => 0x60c5, 0xd8 => 0x633a, 0xd9 => 0x653f, 0xda => 0x6574, 0xdb => 0x65cc, 0xdc => 0x6676, 0xdd => 0x6678, 0xde => 0x67fe, 0xdf => 0x6968, 0xe0 => 0x6a89, 0xe1 => 0x6b63, 0xe2 => 0x6c40, 0xe3 => 0x6dc0, 0xe4 => 0x6de8, 0xe5 => 0x6e1f, 0xe6 => 0x6e5e, 0xe7 => 0x701e, 0xe8 => 0x70a1, 0xe9 => 0x738e, 0xea => 0x73fd, 0xeb => 0x753a, 0xec => 0x775b, 0xed => 0x7887, 0xee => 0x798e, 0xef => 0x7a0b, 0xf0 => 0x7a7d, 0xf1 => 0x7cbe, 0xf2 => 0x7d8e, 0xf3 => 0x8247, 0xf4 => 0x8a02, 0xf5 => 0x8aea, 0xf6 => 0x8c9e, 0xf7 => 0x912d, 0xf8 => 0x914a, 0xf9 => 0x91d8, 0xfa => 0x9266, 0xfb => 0x92cc, 0xfc => 0x9320, 0xfd => 0x9706, 0xfe => 0x9756, }, 0xf0 => { 0xa1 => 0x975c, 0xa2 => 0x9802, 0xa3 => 0x9f0e, 0xa4 => 0x5236, 0xa5 => 0x5291, 0xa6 => 0x557c, 0xa7 => 0x5824, 0xa8 => 0x5e1d, 0xa9 => 0x5f1f, 0xaa => 0x608c, 0xab => 0x63d0, 0xac => 0x68af, 0xad => 0x6fdf, 0xae => 0x796d, 0xaf => 0x7b2c, 0xb0 => 0x81cd, 0xb1 => 0x85ba, 0xb2 => 0x88fd, 0xb3 => 0x8af8, 0xb4 => 0x8e44, 0xb5 => 0x918d, 0xb6 => 0x9664, 0xb7 => 0x969b, 0xb8 => 0x973d, 0xb9 => 0x984c, 0xba => 0x9f4a, 0xbb => 0x4fce, 0xbc => 0x5146, 0xbd => 0x51cb, 0xbe => 0x52a9, 0xbf => 0x5632, 0xc0 => 0x5f14, 0xc1 => 0x5f6b, 0xc2 => 0x63aa, 0xc3 => 0x64cd, 0xc4 => 0x65e9, 0xc5 => 0x6641, 0xc6 => 0x66fa, 0xc7 => 0x66f9, 0xc8 => 0x671d, 0xc9 => 0x689d, 0xca => 0x68d7, 0xcb => 0x69fd, 0xcc => 0x6f15, 0xcd => 0x6f6e, 0xce => 0x7167, 0xcf => 0x71e5, 0xd0 => 0x722a, 0xd1 => 0x74aa, 0xd2 => 0x773a, 0xd3 => 0x7956, 0xd4 => 0x795a, 0xd5 => 0x79df, 0xd6 => 0x7a20, 0xd7 => 0x7a95, 0xd8 => 0x7c97, 0xd9 => 0x7cdf, 0xda => 0x7d44, 0xdb => 0x7e70, 0xdc => 0x8087, 0xdd => 0x85fb, 0xde => 0x86a4, 0xdf => 0x8a54, 0xe0 => 0x8abf, 0xe1 => 0x8d99, 0xe2 => 0x8e81, 0xe3 => 0x9020, 0xe4 => 0x906d, 0xe5 => 0x91e3, 0xe6 => 0x963b, 0xe7 => 0x96d5, 0xe8 => 0x9ce5, 0xe9 => 0x65cf, 0xea => 0x7c07, 0xeb => 0x8db3, 0xec => 0x93c3, 0xed => 0x5b58, 0xee => 0x5c0a, 0xef => 0x5352, 0xf0 => 0x62d9, 0xf1 => 0x731d, 0xf2 => 0x5027, 0xf3 => 0x5b97, 0xf4 => 0x5f9e, 0xf5 => 0x60b0, 0xf6 => 0x616b, 0xf7 => 0x68d5, 0xf8 => 0x6dd9, 0xf9 => 0x742e, 0xfa => 0x7a2e, 0xfb => 0x7d42, 0xfc => 0x7d9c, 0xfd => 0x7e31, 0xfe => 0x816b, }, 0xf1 => { 0xa1 => 0x8e2a, 0xa2 => 0x8e35, 0xa3 => 0x937e, 0xa4 => 0x9418, 0xa5 => 0x4f50, 0xa6 => 0x5750, 0xa7 => 0x5de6, 0xa8 => 0x5ea7, 0xa9 => 0x632b, 0xaa => 0x7f6a, 0xab => 0x4e3b, 0xac => 0x4f4f, 0xad => 0x4f8f, 0xae => 0x505a, 0xaf => 0x59dd, 0xb0 => 0x80c4, 0xb1 => 0x546a, 0xb2 => 0x5468, 0xb3 => 0x55fe, 0xb4 => 0x594f, 0xb5 => 0x5b99, 0xb6 => 0x5dde, 0xb7 => 0x5eda, 0xb8 => 0x665d, 0xb9 => 0x6731, 0xba => 0x67f1, 0xbb => 0x682a, 0xbc => 0x6ce8, 0xbd => 0x6d32, 0xbe => 0x6e4a, 0xbf => 0x6f8d, 0xc0 => 0x70b7, 0xc1 => 0x73e0, 0xc2 => 0x7587, 0xc3 => 0x7c4c, 0xc4 => 0x7d02, 0xc5 => 0x7d2c, 0xc6 => 0x7da2, 0xc7 => 0x821f, 0xc8 => 0x86db, 0xc9 => 0x8a3b, 0xca => 0x8a85, 0xcb => 0x8d70, 0xcc => 0x8e8a, 0xcd => 0x8f33, 0xce => 0x9031, 0xcf => 0x914e, 0xd0 => 0x9152, 0xd1 => 0x9444, 0xd2 => 0x99d0, 0xd3 => 0x7af9, 0xd4 => 0x7ca5, 0xd5 => 0x4fca, 0xd6 => 0x5101, 0xd7 => 0x51c6, 0xd8 => 0x57c8, 0xd9 => 0x5bef, 0xda => 0x5cfb, 0xdb => 0x6659, 0xdc => 0x6a3d, 0xdd => 0x6d5a, 0xde => 0x6e96, 0xdf => 0x6fec, 0xe0 => 0x710c, 0xe1 => 0x756f, 0xe2 => 0x7ae3, 0xe3 => 0x8822, 0xe4 => 0x9021, 0xe5 => 0x9075, 0xe6 => 0x96cb, 0xe7 => 0x99ff, 0xe8 => 0x8301, 0xe9 => 0x4e2d, 0xea => 0x4ef2, 0xeb => 0x8846, 0xec => 0x91cd, 0xed => 0x537d, 0xee => 0x6adb, 0xef => 0x696b, 0xf0 => 0x6c41, 0xf1 => 0x847a, 0xf2 => 0x589e, 0xf3 => 0x618e, 0xf4 => 0x66fe, 0xf5 => 0x62ef, 0xf6 => 0x70dd, 0xf7 => 0x7511, 0xf8 => 0x75c7, 0xf9 => 0x7e52, 0xfa => 0x84b8, 0xfb => 0x8b49, 0xfc => 0x8d08, 0xfd => 0x4e4b, 0xfe => 0x53ea, }, 0xf2 => { 0xa1 => 0x54ab, 0xa2 => 0x5730, 0xa3 => 0x5740, 0xa4 => 0x5fd7, 0xa5 => 0x6301, 0xa6 => 0x6307, 0xa7 => 0x646f, 0xa8 => 0x652f, 0xa9 => 0x65e8, 0xaa => 0x667a, 0xab => 0x679d, 0xac => 0x67b3, 0xad => 0x6b62, 0xae => 0x6c60, 0xaf => 0x6c9a, 0xb0 => 0x6f2c, 0xb1 => 0x77e5, 0xb2 => 0x7825, 0xb3 => 0x7949, 0xb4 => 0x7957, 0xb5 => 0x7d19, 0xb6 => 0x80a2, 0xb7 => 0x8102, 0xb8 => 0x81f3, 0xb9 => 0x829d, 0xba => 0x82b7, 0xbb => 0x8718, 0xbc => 0x8a8c, 0xbd => 0xf9fc, 0xbe => 0x8d04, 0xbf => 0x8dbe, 0xc0 => 0x9072, 0xc1 => 0x76f4, 0xc2 => 0x7a19, 0xc3 => 0x7a37, 0xc4 => 0x7e54, 0xc5 => 0x8077, 0xc6 => 0x5507, 0xc7 => 0x55d4, 0xc8 => 0x5875, 0xc9 => 0x632f, 0xca => 0x6422, 0xcb => 0x6649, 0xcc => 0x664b, 0xcd => 0x686d, 0xce => 0x699b, 0xcf => 0x6b84, 0xd0 => 0x6d25, 0xd1 => 0x6eb1, 0xd2 => 0x73cd, 0xd3 => 0x7468, 0xd4 => 0x74a1, 0xd5 => 0x755b, 0xd6 => 0x75b9, 0xd7 => 0x76e1, 0xd8 => 0x771e, 0xd9 => 0x778b, 0xda => 0x79e6, 0xdb => 0x7e09, 0xdc => 0x7e1d, 0xdd => 0x81fb, 0xde => 0x852f, 0xdf => 0x8897, 0xe0 => 0x8a3a, 0xe1 => 0x8cd1, 0xe2 => 0x8eeb, 0xe3 => 0x8fb0, 0xe4 => 0x9032, 0xe5 => 0x93ad, 0xe6 => 0x9663, 0xe7 => 0x9673, 0xe8 => 0x9707, 0xe9 => 0x4f84, 0xea => 0x53f1, 0xeb => 0x59ea, 0xec => 0x5ac9, 0xed => 0x5e19, 0xee => 0x684e, 0xef => 0x74c6, 0xf0 => 0x75be, 0xf1 => 0x79e9, 0xf2 => 0x7a92, 0xf3 => 0x81a3, 0xf4 => 0x86ed, 0xf5 => 0x8cea, 0xf6 => 0x8dcc, 0xf7 => 0x8fed, 0xf8 => 0x659f, 0xf9 => 0x6715, 0xfa => 0xf9fd, 0xfb => 0x57f7, 0xfc => 0x6f57, 0xfd => 0x7ddd, 0xfe => 0x8f2f, }, 0xf3 => { 0xa1 => 0x93f6, 0xa2 => 0x96c6, 0xa3 => 0x5fb5, 0xa4 => 0x61f2, 0xa5 => 0x6f84, 0xa6 => 0x4e14, 0xa7 => 0x4f98, 0xa8 => 0x501f, 0xa9 => 0x53c9, 0xaa => 0x55df, 0xab => 0x5d6f, 0xac => 0x5dee, 0xad => 0x6b21, 0xae => 0x6b64, 0xaf => 0x78cb, 0xb0 => 0x7b9a, 0xb1 => 0xf9fe, 0xb2 => 0x8e49, 0xb3 => 0x8eca, 0xb4 => 0x906e, 0xb5 => 0x6349, 0xb6 => 0x643e, 0xb7 => 0x7740, 0xb8 => 0x7a84, 0xb9 => 0x932f, 0xba => 0x947f, 0xbb => 0x9f6a, 0xbc => 0x64b0, 0xbd => 0x6faf, 0xbe => 0x71e6, 0xbf => 0x74a8, 0xc0 => 0x74da, 0xc1 => 0x7ac4, 0xc2 => 0x7c12, 0xc3 => 0x7e82, 0xc4 => 0x7cb2, 0xc5 => 0x7e98, 0xc6 => 0x8b9a, 0xc7 => 0x8d0a, 0xc8 => 0x947d, 0xc9 => 0x9910, 0xca => 0x994c, 0xcb => 0x5239, 0xcc => 0x5bdf, 0xcd => 0x64e6, 0xce => 0x672d, 0xcf => 0x7d2e, 0xd0 => 0x50ed, 0xd1 => 0x53c3, 0xd2 => 0x5879, 0xd3 => 0x6158, 0xd4 => 0x6159, 0xd5 => 0x61fa, 0xd6 => 0x65ac, 0xd7 => 0x7ad9, 0xd8 => 0x8b92, 0xd9 => 0x8b96, 0xda => 0x5009, 0xdb => 0x5021, 0xdc => 0x5275, 0xdd => 0x5531, 0xde => 0x5a3c, 0xdf => 0x5ee0, 0xe0 => 0x5f70, 0xe1 => 0x6134, 0xe2 => 0x655e, 0xe3 => 0x660c, 0xe4 => 0x6636, 0xe5 => 0x66a2, 0xe6 => 0x69cd, 0xe7 => 0x6ec4, 0xe8 => 0x6f32, 0xe9 => 0x7316, 0xea => 0x7621, 0xeb => 0x7a93, 0xec => 0x8139, 0xed => 0x8259, 0xee => 0x83d6, 0xef => 0x84bc, 0xf0 => 0x50b5, 0xf1 => 0x57f0, 0xf2 => 0x5bc0, 0xf3 => 0x5be8, 0xf4 => 0x5f69, 0xf5 => 0x63a1, 0xf6 => 0x7826, 0xf7 => 0x7db5, 0xf8 => 0x83dc, 0xf9 => 0x8521, 0xfa => 0x91c7, 0xfb => 0x91f5, 0xfc => 0x518a, 0xfd => 0x67f5, 0xfe => 0x7b56, }, 0xf4 => { 0xa1 => 0x8cac, 0xa2 => 0x51c4, 0xa3 => 0x59bb, 0xa4 => 0x60bd, 0xa5 => 0x8655, 0xa6 => 0x501c, 0xa7 => 0xf9ff, 0xa8 => 0x5254, 0xa9 => 0x5c3a, 0xaa => 0x617d, 0xab => 0x621a, 0xac => 0x62d3, 0xad => 0x64f2, 0xae => 0x65a5, 0xaf => 0x6ecc, 0xb0 => 0x7620, 0xb1 => 0x810a, 0xb2 => 0x8e60, 0xb3 => 0x965f, 0xb4 => 0x96bb, 0xb5 => 0x4edf, 0xb6 => 0x5343, 0xb7 => 0x5598, 0xb8 => 0x5929, 0xb9 => 0x5ddd, 0xba => 0x64c5, 0xbb => 0x6cc9, 0xbc => 0x6dfa, 0xbd => 0x7394, 0xbe => 0x7a7f, 0xbf => 0x821b, 0xc0 => 0x85a6, 0xc1 => 0x8ce4, 0xc2 => 0x8e10, 0xc3 => 0x9077, 0xc4 => 0x91e7, 0xc5 => 0x95e1, 0xc6 => 0x9621, 0xc7 => 0x97c6, 0xc8 => 0x51f8, 0xc9 => 0x54f2, 0xca => 0x5586, 0xcb => 0x5fb9, 0xcc => 0x64a4, 0xcd => 0x6f88, 0xce => 0x7db4, 0xcf => 0x8f1f, 0xd0 => 0x8f4d, 0xd1 => 0x9435, 0xd2 => 0x50c9, 0xd3 => 0x5c16, 0xd4 => 0x6cbe, 0xd5 => 0x6dfb, 0xd6 => 0x751b, 0xd7 => 0x77bb, 0xd8 => 0x7c3d, 0xd9 => 0x7c64, 0xda => 0x8a79, 0xdb => 0x8ac2, 0xdc => 0x581e, 0xdd => 0x59be, 0xde => 0x5e16, 0xdf => 0x6377, 0xe0 => 0x7252, 0xe1 => 0x758a, 0xe2 => 0x776b, 0xe3 => 0x8adc, 0xe4 => 0x8cbc, 0xe5 => 0x8f12, 0xe6 => 0x5ef3, 0xe7 => 0x6674, 0xe8 => 0x6df8, 0xe9 => 0x807d, 0xea => 0x83c1, 0xeb => 0x8acb, 0xec => 0x9751, 0xed => 0x9bd6, 0xee => 0xfa00, 0xef => 0x5243, 0xf0 => 0x66ff, 0xf1 => 0x6d95, 0xf2 => 0x6eef, 0xf3 => 0x7de0, 0xf4 => 0x8ae6, 0xf5 => 0x902e, 0xf6 => 0x905e, 0xf7 => 0x9ad4, 0xf8 => 0x521d, 0xf9 => 0x527f, 0xfa => 0x54e8, 0xfb => 0x6194, 0xfc => 0x6284, 0xfd => 0x62db, 0xfe => 0x68a2, }, 0xf5 => { 0xa1 => 0x6912, 0xa2 => 0x695a, 0xa3 => 0x6a35, 0xa4 => 0x7092, 0xa5 => 0x7126, 0xa6 => 0x785d, 0xa7 => 0x7901, 0xa8 => 0x790e, 0xa9 => 0x79d2, 0xaa => 0x7a0d, 0xab => 0x8096, 0xac => 0x8278, 0xad => 0x82d5, 0xae => 0x8349, 0xaf => 0x8549, 0xb0 => 0x8c82, 0xb1 => 0x8d85, 0xb2 => 0x9162, 0xb3 => 0x918b, 0xb4 => 0x91ae, 0xb5 => 0x4fc3, 0xb6 => 0x56d1, 0xb7 => 0x71ed, 0xb8 => 0x77d7, 0xb9 => 0x8700, 0xba => 0x89f8, 0xbb => 0x5bf8, 0xbc => 0x5fd6, 0xbd => 0x6751, 0xbe => 0x90a8, 0xbf => 0x53e2, 0xc0 => 0x585a, 0xc1 => 0x5bf5, 0xc2 => 0x60a4, 0xc3 => 0x6181, 0xc4 => 0x6460, 0xc5 => 0x7e3d, 0xc6 => 0x8070, 0xc7 => 0x8525, 0xc8 => 0x9283, 0xc9 => 0x64ae, 0xca => 0x50ac, 0xcb => 0x5d14, 0xcc => 0x6700, 0xcd => 0x589c, 0xce => 0x62bd, 0xcf => 0x63a8, 0xd0 => 0x690e, 0xd1 => 0x6978, 0xd2 => 0x6a1e, 0xd3 => 0x6e6b, 0xd4 => 0x76ba, 0xd5 => 0x79cb, 0xd6 => 0x82bb, 0xd7 => 0x8429, 0xd8 => 0x8acf, 0xd9 => 0x8da8, 0xda => 0x8ffd, 0xdb => 0x9112, 0xdc => 0x914b, 0xdd => 0x919c, 0xde => 0x9310, 0xdf => 0x9318, 0xe0 => 0x939a, 0xe1 => 0x96db, 0xe2 => 0x9a36, 0xe3 => 0x9c0d, 0xe4 => 0x4e11, 0xe5 => 0x755c, 0xe6 => 0x795d, 0xe7 => 0x7afa, 0xe8 => 0x7b51, 0xe9 => 0x7bc9, 0xea => 0x7e2e, 0xeb => 0x84c4, 0xec => 0x8e59, 0xed => 0x8e74, 0xee => 0x8ef8, 0xef => 0x9010, 0xf0 => 0x6625, 0xf1 => 0x693f, 0xf2 => 0x7443, 0xf3 => 0x51fa, 0xf4 => 0x672e, 0xf5 => 0x9edc, 0xf6 => 0x5145, 0xf7 => 0x5fe0, 0xf8 => 0x6c96, 0xf9 => 0x87f2, 0xfa => 0x885d, 0xfb => 0x8877, 0xfc => 0x60b4, 0xfd => 0x81b5, 0xfe => 0x8403, }, 0xf6 => { 0xa1 => 0x8d05, 0xa2 => 0x53d6, 0xa3 => 0x5439, 0xa4 => 0x5634, 0xa5 => 0x5a36, 0xa6 => 0x5c31, 0xa7 => 0x708a, 0xa8 => 0x7fe0, 0xa9 => 0x805a, 0xaa => 0x8106, 0xab => 0x81ed, 0xac => 0x8da3, 0xad => 0x9189, 0xae => 0x9a5f, 0xaf => 0x9df2, 0xb0 => 0x5074, 0xb1 => 0x4ec4, 0xb2 => 0x53a0, 0xb3 => 0x60fb, 0xb4 => 0x6e2c, 0xb5 => 0x5c64, 0xb6 => 0x4f88, 0xb7 => 0x5024, 0xb8 => 0x55e4, 0xb9 => 0x5cd9, 0xba => 0x5e5f, 0xbb => 0x6065, 0xbc => 0x6894, 0xbd => 0x6cbb, 0xbe => 0x6dc4, 0xbf => 0x71be, 0xc0 => 0x75d4, 0xc1 => 0x75f4, 0xc2 => 0x7661, 0xc3 => 0x7a1a, 0xc4 => 0x7a49, 0xc5 => 0x7dc7, 0xc6 => 0x7dfb, 0xc7 => 0x7f6e, 0xc8 => 0x81f4, 0xc9 => 0x86a9, 0xca => 0x8f1c, 0xcb => 0x96c9, 0xcc => 0x99b3, 0xcd => 0x9f52, 0xce => 0x5247, 0xcf => 0x52c5, 0xd0 => 0x98ed, 0xd1 => 0x89aa, 0xd2 => 0x4e03, 0xd3 => 0x67d2, 0xd4 => 0x6f06, 0xd5 => 0x4fb5, 0xd6 => 0x5be2, 0xd7 => 0x6795, 0xd8 => 0x6c88, 0xd9 => 0x6d78, 0xda => 0x741b, 0xdb => 0x7827, 0xdc => 0x91dd, 0xdd => 0x937c, 0xde => 0x87c4, 0xdf => 0x79e4, 0xe0 => 0x7a31, 0xe1 => 0x5feb, 0xe2 => 0x4ed6, 0xe3 => 0x54a4, 0xe4 => 0x553e, 0xe5 => 0x58ae, 0xe6 => 0x59a5, 0xe7 => 0x60f0, 0xe8 => 0x6253, 0xe9 => 0x62d6, 0xea => 0x6736, 0xeb => 0x6955, 0xec => 0x8235, 0xed => 0x9640, 0xee => 0x99b1, 0xef => 0x99dd, 0xf0 => 0x502c, 0xf1 => 0x5353, 0xf2 => 0x5544, 0xf3 => 0x577c, 0xf4 => 0xfa01, 0xf5 => 0x6258, 0xf6 => 0xfa02, 0xf7 => 0x64e2, 0xf8 => 0x666b, 0xf9 => 0x67dd, 0xfa => 0x6fc1, 0xfb => 0x6fef, 0xfc => 0x7422, 0xfd => 0x7438, 0xfe => 0x8a17, }, 0xf7 => { 0xa1 => 0x9438, 0xa2 => 0x5451, 0xa3 => 0x5606, 0xa4 => 0x5766, 0xa5 => 0x5f48, 0xa6 => 0x619a, 0xa7 => 0x6b4e, 0xa8 => 0x7058, 0xa9 => 0x70ad, 0xaa => 0x7dbb, 0xab => 0x8a95, 0xac => 0x596a, 0xad => 0x812b, 0xae => 0x63a2, 0xaf => 0x7708, 0xb0 => 0x803d, 0xb1 => 0x8caa, 0xb2 => 0x5854, 0xb3 => 0x642d, 0xb4 => 0x69bb, 0xb5 => 0x5b95, 0xb6 => 0x5e11, 0xb7 => 0x6e6f, 0xb8 => 0xfa03, 0xb9 => 0x8569, 0xba => 0x514c, 0xbb => 0x53f0, 0xbc => 0x592a, 0xbd => 0x6020, 0xbe => 0x614b, 0xbf => 0x6b86, 0xc0 => 0x6c70, 0xc1 => 0x6cf0, 0xc2 => 0x7b1e, 0xc3 => 0x80ce, 0xc4 => 0x82d4, 0xc5 => 0x8dc6, 0xc6 => 0x90b0, 0xc7 => 0x98b1, 0xc8 => 0xfa04, 0xc9 => 0x64c7, 0xca => 0x6fa4, 0xcb => 0x6491, 0xcc => 0x6504, 0xcd => 0x514e, 0xce => 0x5410, 0xcf => 0x571f, 0xd0 => 0x8a0e, 0xd1 => 0x615f, 0xd2 => 0x6876, 0xd3 => 0xfa05, 0xd4 => 0x75db, 0xd5 => 0x7b52, 0xd6 => 0x7d71, 0xd7 => 0x901a, 0xd8 => 0x5806, 0xd9 => 0x69cc, 0xda => 0x817f, 0xdb => 0x892a, 0xdc => 0x9000, 0xdd => 0x9839, 0xde => 0x5078, 0xdf => 0x5957, 0xe0 => 0x59ac, 0xe1 => 0x6295, 0xe2 => 0x900f, 0xe3 => 0x9b2a, 0xe4 => 0x615d, 0xe5 => 0x7279, 0xe6 => 0x95d6, 0xe7 => 0x5761, 0xe8 => 0x5a46, 0xe9 => 0x5df4, 0xea => 0x628a, 0xeb => 0x64ad, 0xec => 0x64fa, 0xed => 0x6777, 0xee => 0x6ce2, 0xef => 0x6d3e, 0xf0 => 0x722c, 0xf1 => 0x7436, 0xf2 => 0x7834, 0xf3 => 0x7f77, 0xf4 => 0x82ad, 0xf5 => 0x8ddb, 0xf6 => 0x9817, 0xf7 => 0x5224, 0xf8 => 0x5742, 0xf9 => 0x677f, 0xfa => 0x7248, 0xfb => 0x74e3, 0xfc => 0x8ca9, 0xfd => 0x8fa6, 0xfe => 0x9211, }, 0xf8 => { 0xa1 => 0x962a, 0xa2 => 0x516b, 0xa3 => 0x53ed, 0xa4 => 0x634c, 0xa5 => 0x4f69, 0xa6 => 0x5504, 0xa7 => 0x6096, 0xa8 => 0x6557, 0xa9 => 0x6c9b, 0xaa => 0x6d7f, 0xab => 0x724c, 0xac => 0x72fd, 0xad => 0x7a17, 0xae => 0x8987, 0xaf => 0x8c9d, 0xb0 => 0x5f6d, 0xb1 => 0x6f8e, 0xb2 => 0x70f9, 0xb3 => 0x81a8, 0xb4 => 0x610e, 0xb5 => 0x4fbf, 0xb6 => 0x504f, 0xb7 => 0x6241, 0xb8 => 0x7247, 0xb9 => 0x7bc7, 0xba => 0x7de8, 0xbb => 0x7fe9, 0xbc => 0x904d, 0xbd => 0x97ad, 0xbe => 0x9a19, 0xbf => 0x8cb6, 0xc0 => 0x576a, 0xc1 => 0x5e73, 0xc2 => 0x67b0, 0xc3 => 0x840d, 0xc4 => 0x8a55, 0xc5 => 0x5420, 0xc6 => 0x5b16, 0xc7 => 0x5e63, 0xc8 => 0x5ee2, 0xc9 => 0x5f0a, 0xca => 0x6583, 0xcb => 0x80ba, 0xcc => 0x853d, 0xcd => 0x9589, 0xce => 0x965b, 0xcf => 0x4f48, 0xd0 => 0x5305, 0xd1 => 0x530d, 0xd2 => 0x530f, 0xd3 => 0x5486, 0xd4 => 0x54fa, 0xd5 => 0x5703, 0xd6 => 0x5e03, 0xd7 => 0x6016, 0xd8 => 0x629b, 0xd9 => 0x62b1, 0xda => 0x6355, 0xdb => 0xfa06, 0xdc => 0x6ce1, 0xdd => 0x6d66, 0xde => 0x75b1, 0xdf => 0x7832, 0xe0 => 0x80de, 0xe1 => 0x812f, 0xe2 => 0x82de, 0xe3 => 0x8461, 0xe4 => 0x84b2, 0xe5 => 0x888d, 0xe6 => 0x8912, 0xe7 => 0x900b, 0xe8 => 0x92ea, 0xe9 => 0x98fd, 0xea => 0x9b91, 0xeb => 0x5e45, 0xec => 0x66b4, 0xed => 0x66dd, 0xee => 0x7011, 0xef => 0x7206, 0xf0 => 0xfa07, 0xf1 => 0x4ff5, 0xf2 => 0x527d, 0xf3 => 0x5f6a, 0xf4 => 0x6153, 0xf5 => 0x6753, 0xf6 => 0x6a19, 0xf7 => 0x6f02, 0xf8 => 0x74e2, 0xf9 => 0x7968, 0xfa => 0x8868, 0xfb => 0x8c79, 0xfc => 0x98c7, 0xfd => 0x98c4, 0xfe => 0x9a43, }, 0xf9 => { 0xa1 => 0x54c1, 0xa2 => 0x7a1f, 0xa3 => 0x6953, 0xa4 => 0x8af7, 0xa5 => 0x8c4a, 0xa6 => 0x98a8, 0xa7 => 0x99ae, 0xa8 => 0x5f7c, 0xa9 => 0x62ab, 0xaa => 0x75b2, 0xab => 0x76ae, 0xac => 0x88ab, 0xad => 0x907f, 0xae => 0x9642, 0xaf => 0x5339, 0xb0 => 0x5f3c, 0xb1 => 0x5fc5, 0xb2 => 0x6ccc, 0xb3 => 0x73cc, 0xb4 => 0x7562, 0xb5 => 0x758b, 0xb6 => 0x7b46, 0xb7 => 0x82fe, 0xb8 => 0x999d, 0xb9 => 0x4e4f, 0xba => 0x903c, 0xbb => 0x4e0b, 0xbc => 0x4f55, 0xbd => 0x53a6, 0xbe => 0x590f, 0xbf => 0x5ec8, 0xc0 => 0x6630, 0xc1 => 0x6cb3, 0xc2 => 0x7455, 0xc3 => 0x8377, 0xc4 => 0x8766, 0xc5 => 0x8cc0, 0xc6 => 0x9050, 0xc7 => 0x971e, 0xc8 => 0x9c15, 0xc9 => 0x58d1, 0xca => 0x5b78, 0xcb => 0x8650, 0xcc => 0x8b14, 0xcd => 0x9db4, 0xce => 0x5bd2, 0xcf => 0x6068, 0xd0 => 0x608d, 0xd1 => 0x65f1, 0xd2 => 0x6c57, 0xd3 => 0x6f22, 0xd4 => 0x6fa3, 0xd5 => 0x701a, 0xd6 => 0x7f55, 0xd7 => 0x7ff0, 0xd8 => 0x9591, 0xd9 => 0x9592, 0xda => 0x9650, 0xdb => 0x97d3, 0xdc => 0x5272, 0xdd => 0x8f44, 0xde => 0x51fd, 0xdf => 0x542b, 0xe0 => 0x54b8, 0xe1 => 0x5563, 0xe2 => 0x558a, 0xe3 => 0x6abb, 0xe4 => 0x6db5, 0xe5 => 0x7dd8, 0xe6 => 0x8266, 0xe7 => 0x929c, 0xe8 => 0x9677, 0xe9 => 0x9e79, 0xea => 0x5408, 0xeb => 0x54c8, 0xec => 0x76d2, 0xed => 0x86e4, 0xee => 0x95a4, 0xef => 0x95d4, 0xf0 => 0x965c, 0xf1 => 0x4ea2, 0xf2 => 0x4f09, 0xf3 => 0x59ee, 0xf4 => 0x5ae6, 0xf5 => 0x5df7, 0xf6 => 0x6052, 0xf7 => 0x6297, 0xf8 => 0x676d, 0xf9 => 0x6841, 0xfa => 0x6c86, 0xfb => 0x6e2f, 0xfc => 0x7f38, 0xfd => 0x809b, 0xfe => 0x822a, }, 0xfa => { 0xa1 => 0xfa08, 0xa2 => 0xfa09, 0xa3 => 0x9805, 0xa4 => 0x4ea5, 0xa5 => 0x5055, 0xa6 => 0x54b3, 0xa7 => 0x5793, 0xa8 => 0x595a, 0xa9 => 0x5b69, 0xaa => 0x5bb3, 0xab => 0x61c8, 0xac => 0x6977, 0xad => 0x6d77, 0xae => 0x7023, 0xaf => 0x87f9, 0xb0 => 0x89e3, 0xb1 => 0x8a72, 0xb2 => 0x8ae7, 0xb3 => 0x9082, 0xb4 => 0x99ed, 0xb5 => 0x9ab8, 0xb6 => 0x52be, 0xb7 => 0x6838, 0xb8 => 0x5016, 0xb9 => 0x5e78, 0xba => 0x674f, 0xbb => 0x8347, 0xbc => 0x884c, 0xbd => 0x4eab, 0xbe => 0x5411, 0xbf => 0x56ae, 0xc0 => 0x73e6, 0xc1 => 0x9115, 0xc2 => 0x97ff, 0xc3 => 0x9909, 0xc4 => 0x9957, 0xc5 => 0x9999, 0xc6 => 0x5653, 0xc7 => 0x589f, 0xc8 => 0x865b, 0xc9 => 0x8a31, 0xca => 0x61b2, 0xcb => 0x6af6, 0xcc => 0x737b, 0xcd => 0x8ed2, 0xce => 0x6b47, 0xcf => 0x96aa, 0xd0 => 0x9a57, 0xd1 => 0x5955, 0xd2 => 0x7200, 0xd3 => 0x8d6b, 0xd4 => 0x9769, 0xd5 => 0x4fd4, 0xd6 => 0x5cf4, 0xd7 => 0x5f26, 0xd8 => 0x61f8, 0xd9 => 0x665b, 0xda => 0x6ceb, 0xdb => 0x70ab, 0xdc => 0x7384, 0xdd => 0x73b9, 0xde => 0x73fe, 0xdf => 0x7729, 0xe0 => 0x774d, 0xe1 => 0x7d43, 0xe2 => 0x7d62, 0xe3 => 0x7e23, 0xe4 => 0x8237, 0xe5 => 0x8852, 0xe6 => 0xfa0a, 0xe7 => 0x8ce2, 0xe8 => 0x9249, 0xe9 => 0x986f, 0xea => 0x5b51, 0xeb => 0x7a74, 0xec => 0x8840, 0xed => 0x9801, 0xee => 0x5acc, 0xef => 0x4fe0, 0xf0 => 0x5354, 0xf1 => 0x593e, 0xf2 => 0x5cfd, 0xf3 => 0x633e, 0xf4 => 0x6d79, 0xf5 => 0x72f9, 0xf6 => 0x8105, 0xf7 => 0x8107, 0xf8 => 0x83a2, 0xf9 => 0x92cf, 0xfa => 0x9830, 0xfb => 0x4ea8, 0xfc => 0x5144, 0xfd => 0x5211, 0xfe => 0x578b, }, 0xfb => { 0xa1 => 0x5f62, 0xa2 => 0x6cc2, 0xa3 => 0x6ece, 0xa4 => 0x7005, 0xa5 => 0x7050, 0xa6 => 0x70af, 0xa7 => 0x7192, 0xa8 => 0x73e9, 0xa9 => 0x7469, 0xaa => 0x834a, 0xab => 0x87a2, 0xac => 0x8861, 0xad => 0x9008, 0xae => 0x90a2, 0xaf => 0x93a3, 0xb0 => 0x99a8, 0xb1 => 0x516e, 0xb2 => 0x5f57, 0xb3 => 0x60e0, 0xb4 => 0x6167, 0xb5 => 0x66b3, 0xb6 => 0x8559, 0xb7 => 0x8e4a, 0xb8 => 0x91af, 0xb9 => 0x978b, 0xba => 0x4e4e, 0xbb => 0x4e92, 0xbc => 0x547c, 0xbd => 0x58d5, 0xbe => 0x58fa, 0xbf => 0x597d, 0xc0 => 0x5cb5, 0xc1 => 0x5f27, 0xc2 => 0x6236, 0xc3 => 0x6248, 0xc4 => 0x660a, 0xc5 => 0x6667, 0xc6 => 0x6beb, 0xc7 => 0x6d69, 0xc8 => 0x6dcf, 0xc9 => 0x6e56, 0xca => 0x6ef8, 0xcb => 0x6f94, 0xcc => 0x6fe0, 0xcd => 0x6fe9, 0xce => 0x705d, 0xcf => 0x72d0, 0xd0 => 0x7425, 0xd1 => 0x745a, 0xd2 => 0x74e0, 0xd3 => 0x7693, 0xd4 => 0x795c, 0xd5 => 0x7cca, 0xd6 => 0x7e1e, 0xd7 => 0x80e1, 0xd8 => 0x82a6, 0xd9 => 0x846b, 0xda => 0x84bf, 0xdb => 0x864e, 0xdc => 0x865f, 0xdd => 0x8774, 0xde => 0x8b77, 0xdf => 0x8c6a, 0xe0 => 0x93ac, 0xe1 => 0x9800, 0xe2 => 0x9865, 0xe3 => 0x60d1, 0xe4 => 0x6216, 0xe5 => 0x9177, 0xe6 => 0x5a5a, 0xe7 => 0x660f, 0xe8 => 0x6df7, 0xe9 => 0x6e3e, 0xea => 0x743f, 0xeb => 0x9b42, 0xec => 0x5ffd, 0xed => 0x60da, 0xee => 0x7b0f, 0xef => 0x54c4, 0xf0 => 0x5f18, 0xf1 => 0x6c5e, 0xf2 => 0x6cd3, 0xf3 => 0x6d2a, 0xf4 => 0x70d8, 0xf5 => 0x7d05, 0xf6 => 0x8679, 0xf7 => 0x8a0c, 0xf8 => 0x9d3b, 0xf9 => 0x5316, 0xfa => 0x548c, 0xfb => 0x5b05, 0xfc => 0x6a3a, 0xfd => 0x706b, 0xfe => 0x7575, }, 0xfc => { 0xa1 => 0x798d, 0xa2 => 0x79be, 0xa3 => 0x82b1, 0xa4 => 0x83ef, 0xa5 => 0x8a71, 0xa6 => 0x8b41, 0xa7 => 0x8ca8, 0xa8 => 0x9774, 0xa9 => 0xfa0b, 0xaa => 0x64f4, 0xab => 0x652b, 0xac => 0x78ba, 0xad => 0x78bb, 0xae => 0x7a6b, 0xaf => 0x4e38, 0xb0 => 0x559a, 0xb1 => 0x5950, 0xb2 => 0x5ba6, 0xb3 => 0x5e7b, 0xb4 => 0x60a3, 0xb5 => 0x63db, 0xb6 => 0x6b61, 0xb7 => 0x6665, 0xb8 => 0x6853, 0xb9 => 0x6e19, 0xba => 0x7165, 0xbb => 0x74b0, 0xbc => 0x7d08, 0xbd => 0x9084, 0xbe => 0x9a69, 0xbf => 0x9c25, 0xc0 => 0x6d3b, 0xc1 => 0x6ed1, 0xc2 => 0x733e, 0xc3 => 0x8c41, 0xc4 => 0x95ca, 0xc5 => 0x51f0, 0xc6 => 0x5e4c, 0xc7 => 0x5fa8, 0xc8 => 0x604d, 0xc9 => 0x60f6, 0xca => 0x6130, 0xcb => 0x614c, 0xcc => 0x6643, 0xcd => 0x6644, 0xce => 0x69a5, 0xcf => 0x6cc1, 0xd0 => 0x6e5f, 0xd1 => 0x6ec9, 0xd2 => 0x6f62, 0xd3 => 0x714c, 0xd4 => 0x749c, 0xd5 => 0x7687, 0xd6 => 0x7bc1, 0xd7 => 0x7c27, 0xd8 => 0x8352, 0xd9 => 0x8757, 0xda => 0x9051, 0xdb => 0x968d, 0xdc => 0x9ec3, 0xdd => 0x532f, 0xde => 0x56de, 0xdf => 0x5efb, 0xe0 => 0x5f8a, 0xe1 => 0x6062, 0xe2 => 0x6094, 0xe3 => 0x61f7, 0xe4 => 0x6666, 0xe5 => 0x6703, 0xe6 => 0x6a9c, 0xe7 => 0x6dee, 0xe8 => 0x6fae, 0xe9 => 0x7070, 0xea => 0x736a, 0xeb => 0x7e6a, 0xec => 0x81be, 0xed => 0x8334, 0xee => 0x86d4, 0xef => 0x8aa8, 0xf0 => 0x8cc4, 0xf1 => 0x5283, 0xf2 => 0x7372, 0xf3 => 0x5b96, 0xf4 => 0x6a6b, 0xf5 => 0x9404, 0xf6 => 0x54ee, 0xf7 => 0x5686, 0xf8 => 0x5b5d, 0xf9 => 0x6548, 0xfa => 0x6585, 0xfb => 0x66c9, 0xfc => 0x689f, 0xfd => 0x6d8d, 0xfe => 0x6dc6, }, 0xfd => { 0xa1 => 0x723b, 0xa2 => 0x80b4, 0xa3 => 0x9175, 0xa4 => 0x9a4d, 0xa5 => 0x4faf, 0xa6 => 0x5019, 0xa7 => 0x539a, 0xa8 => 0x540e, 0xa9 => 0x543c, 0xaa => 0x5589, 0xab => 0x55c5, 0xac => 0x5e3f, 0xad => 0x5f8c, 0xae => 0x673d, 0xaf => 0x7166, 0xb0 => 0x73dd, 0xb1 => 0x9005, 0xb2 => 0x52db, 0xb3 => 0x52f3, 0xb4 => 0x5864, 0xb5 => 0x58ce, 0xb6 => 0x7104, 0xb7 => 0x718f, 0xb8 => 0x71fb, 0xb9 => 0x85b0, 0xba => 0x8a13, 0xbb => 0x6688, 0xbc => 0x85a8, 0xbd => 0x55a7, 0xbe => 0x6684, 0xbf => 0x714a, 0xc0 => 0x8431, 0xc1 => 0x5349, 0xc2 => 0x5599, 0xc3 => 0x6bc1, 0xc4 => 0x5f59, 0xc5 => 0x5fbd, 0xc6 => 0x63ee, 0xc7 => 0x6689, 0xc8 => 0x7147, 0xc9 => 0x8af1, 0xca => 0x8f1d, 0xcb => 0x9ebe, 0xcc => 0x4f11, 0xcd => 0x643a, 0xce => 0x70cb, 0xcf => 0x7566, 0xd0 => 0x8667, 0xd1 => 0x6064, 0xd2 => 0x8b4e, 0xd3 => 0x9df8, 0xd4 => 0x5147, 0xd5 => 0x51f6, 0xd6 => 0x5308, 0xd7 => 0x6d36, 0xd8 => 0x80f8, 0xd9 => 0x9ed1, 0xda => 0x6615, 0xdb => 0x6b23, 0xdc => 0x7098, 0xdd => 0x75d5, 0xde => 0x5403, 0xdf => 0x5c79, 0xe0 => 0x7d07, 0xe1 => 0x8a16, 0xe2 => 0x6b20, 0xe3 => 0x6b3d, 0xe4 => 0x6b46, 0xe5 => 0x5438, 0xe6 => 0x6070, 0xe7 => 0x6d3d, 0xe8 => 0x7fd5, 0xe9 => 0x8208, 0xea => 0x50d6, 0xeb => 0x51de, 0xec => 0x559c, 0xed => 0x566b, 0xee => 0x56cd, 0xef => 0x59ec, 0xf0 => 0x5b09, 0xf1 => 0x5e0c, 0xf2 => 0x6199, 0xf3 => 0x6198, 0xf4 => 0x6231, 0xf5 => 0x665e, 0xf6 => 0x66e6, 0xf7 => 0x7199, 0xf8 => 0x71b9, 0xf9 => 0x71ba, 0xfa => 0x72a7, 0xfb => 0x79a7, 0xfc => 0x7a00, 0xfd => 0x7fb2, 0xfe => 0x8a70, }, ); 1; # end �����������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacLatin2.pm����������������������������������������000644 �000765 �000024 �00000004736 11417362674 023432� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacLatin2.pm # # Description: Mac Central European to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/CENTEURO.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacLatin2 = ( 0x80 => 0xc4, 0x81 => 0x0100, 0x82 => 0x0101, 0x83 => 0xc9, 0x84 => 0x0104, 0x85 => 0xd6, 0x86 => 0xdc, 0x87 => 0xe1, 0x88 => 0x0105, 0x89 => 0x010c, 0x8a => 0xe4, 0x8b => 0x010d, 0x8c => 0x0106, 0x8d => 0x0107, 0x8e => 0xe9, 0x8f => 0x0179, 0x90 => 0x017a, 0x91 => 0x010e, 0x92 => 0xed, 0x93 => 0x010f, 0x94 => 0x0112, 0x95 => 0x0113, 0x96 => 0x0116, 0x97 => 0xf3, 0x98 => 0x0117, 0x99 => 0xf4, 0x9a => 0xf6, 0x9b => 0xf5, 0x9c => 0xfa, 0x9d => 0x011a, 0x9e => 0x011b, 0x9f => 0xfc, 0xa0 => 0x2020, 0xa1 => 0xb0, 0xa2 => 0x0118, 0xa4 => 0xa7, 0xa5 => 0x2022, 0xa6 => 0xb6, 0xa7 => 0xdf, 0xa8 => 0xae, 0xaa => 0x2122, 0xab => 0x0119, 0xac => 0xa8, 0xad => 0x2260, 0xae => 0x0123, 0xaf => 0x012e, 0xb0 => 0x012f, 0xb1 => 0x012a, 0xb2 => 0x2264, 0xb3 => 0x2265, 0xb4 => 0x012b, 0xb5 => 0x0136, 0xb6 => 0x2202, 0xb7 => 0x2211, 0xb8 => 0x0142, 0xb9 => 0x013b, 0xba => 0x013c, 0xbb => 0x013d, 0xbc => 0x013e, 0xbd => 0x0139, 0xbe => 0x013a, 0xbf => 0x0145, 0xc0 => 0x0146, 0xc1 => 0x0143, 0xc2 => 0xac, 0xc3 => 0x221a, 0xc4 => 0x0144, 0xc5 => 0x0147, 0xc6 => 0x2206, 0xc7 => 0xab, 0xc8 => 0xbb, 0xc9 => 0x2026, 0xca => 0xa0, 0xcb => 0x0148, 0xcc => 0x0150, 0xcd => 0xd5, 0xce => 0x0151, 0xcf => 0x014c, 0xd0 => 0x2013, 0xd1 => 0x2014, 0xd2 => 0x201c, 0xd3 => 0x201d, 0xd4 => 0x2018, 0xd5 => 0x2019, 0xd6 => 0xf7, 0xd7 => 0x25ca, 0xd8 => 0x014d, 0xd9 => 0x0154, 0xda => 0x0155, 0xdb => 0x0158, 0xdc => 0x2039, 0xdd => 0x203a, 0xde => 0x0159, 0xdf => 0x0156, 0xe0 => 0x0157, 0xe1 => 0x0160, 0xe2 => 0x201a, 0xe3 => 0x201e, 0xe4 => 0x0161, 0xe5 => 0x015a, 0xe6 => 0x015b, 0xe7 => 0xc1, 0xe8 => 0x0164, 0xe9 => 0x0165, 0xea => 0xcd, 0xeb => 0x017d, 0xec => 0x017e, 0xed => 0x016a, 0xee => 0xd3, 0xef => 0xd4, 0xf0 => 0x016b, 0xf1 => 0x016e, 0xf2 => 0xda, 0xf3 => 0x016f, 0xf4 => 0x0170, 0xf5 => 0x0171, 0xf6 => 0x0172, 0xf7 => 0x0173, 0xf8 => 0xdd, 0xf9 => 0xfd, 0xfa => 0x0137, 0xfb => 0x017b, 0xfc => 0x0141, 0xfd => 0x017c, 0xfe => 0x0122, 0xff => 0x02c7, ); 1; # end ����������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacRoman.pm�����������������������������������������000644 �000765 �000024 �00000004506 11417362674 023350� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacRoman.pm # # Description: Mac Roman to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/ROMAN.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacRoman = ( 0x80 => 0xc4, 0x81 => 0xc5, 0x82 => 0xc7, 0x83 => 0xc9, 0x84 => 0xd1, 0x85 => 0xd6, 0x86 => 0xdc, 0x87 => 0xe1, 0x88 => 0xe0, 0x89 => 0xe2, 0x8a => 0xe4, 0x8b => 0xe3, 0x8c => 0xe5, 0x8d => 0xe7, 0x8e => 0xe9, 0x8f => 0xe8, 0x90 => 0xea, 0x91 => 0xeb, 0x92 => 0xed, 0x93 => 0xec, 0x94 => 0xee, 0x95 => 0xef, 0x96 => 0xf1, 0x97 => 0xf3, 0x98 => 0xf2, 0x99 => 0xf4, 0x9a => 0xf6, 0x9b => 0xf5, 0x9c => 0xfa, 0x9d => 0xf9, 0x9e => 0xfb, 0x9f => 0xfc, 0xa0 => 0x2020, 0xa1 => 0xb0, 0xa4 => 0xa7, 0xa5 => 0x2022, 0xa6 => 0xb6, 0xa7 => 0xdf, 0xa8 => 0xae, 0xaa => 0x2122, 0xab => 0xb4, 0xac => 0xa8, 0xad => 0x2260, 0xae => 0xc6, 0xaf => 0xd8, 0xb0 => 0x221e, 0xb2 => 0x2264, 0xb3 => 0x2265, 0xb4 => 0xa5, 0xb6 => 0x2202, 0xb7 => 0x2211, 0xb8 => 0x220f, 0xb9 => 0x03c0, 0xba => 0x222b, 0xbb => 0xaa, 0xbc => 0xba, 0xbd => 0x03a9, 0xbe => 0xe6, 0xbf => 0xf8, 0xc0 => 0xbf, 0xc1 => 0xa1, 0xc2 => 0xac, 0xc3 => 0x221a, 0xc4 => 0x0192, 0xc5 => 0x2248, 0xc6 => 0x2206, 0xc7 => 0xab, 0xc8 => 0xbb, 0xc9 => 0x2026, 0xca => 0xa0, 0xcb => 0xc0, 0xcc => 0xc3, 0xcd => 0xd5, 0xce => 0x0152, 0xcf => 0x0153, 0xd0 => 0x2013, 0xd1 => 0x2014, 0xd2 => 0x201c, 0xd3 => 0x201d, 0xd4 => 0x2018, 0xd5 => 0x2019, 0xd6 => 0xf7, 0xd7 => 0x25ca, 0xd8 => 0xff, 0xd9 => 0x0178, 0xda => 0x2044, 0xdb => 0x20ac, 0xdc => 0x2039, 0xdd => 0x203a, 0xde => 0xfb01, 0xdf => 0xfb02, 0xe0 => 0x2021, 0xe1 => 0xb7, 0xe2 => 0x201a, 0xe3 => 0x201e, 0xe4 => 0x2030, 0xe5 => 0xc2, 0xe6 => 0xca, 0xe7 => 0xc1, 0xe8 => 0xcb, 0xe9 => 0xc8, 0xea => 0xcd, 0xeb => 0xce, 0xec => 0xcf, 0xed => 0xcc, 0xee => 0xd3, 0xef => 0xd4, 0xf0 => 0xf8ff, 0xf1 => 0xd2, 0xf2 => 0xda, 0xf3 => 0xdb, 0xf4 => 0xd9, 0xf5 => 0x0131, 0xf6 => 0x02c6, 0xf7 => 0x02dc, 0xf8 => 0xaf, 0xf9 => 0x02d8, 0xfa => 0x02d9, 0xfb => 0x02da, 0xfc => 0xb8, 0xfd => 0x02dd, 0xfe => 0x02db, 0xff => 0x02c7, ); 1; # end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacRomanian.pm��������������������������������������000644 �000765 �000024 �00000004532 11417362674 024037� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacRomanian.pm # # Description: Mac Romanian to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/ROMANIAN.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacRomanian = ( 0x80 => 0xc4, 0x81 => 0xc5, 0x82 => 0xc7, 0x83 => 0xc9, 0x84 => 0xd1, 0x85 => 0xd6, 0x86 => 0xdc, 0x87 => 0xe1, 0x88 => 0xe0, 0x89 => 0xe2, 0x8a => 0xe4, 0x8b => 0xe3, 0x8c => 0xe5, 0x8d => 0xe7, 0x8e => 0xe9, 0x8f => 0xe8, 0x90 => 0xea, 0x91 => 0xeb, 0x92 => 0xed, 0x93 => 0xec, 0x94 => 0xee, 0x95 => 0xef, 0x96 => 0xf1, 0x97 => 0xf3, 0x98 => 0xf2, 0x99 => 0xf4, 0x9a => 0xf6, 0x9b => 0xf5, 0x9c => 0xfa, 0x9d => 0xf9, 0x9e => 0xfb, 0x9f => 0xfc, 0xa0 => 0x2020, 0xa1 => 0xb0, 0xa4 => 0xa7, 0xa5 => 0x2022, 0xa6 => 0xb6, 0xa7 => 0xdf, 0xa8 => 0xae, 0xaa => 0x2122, 0xab => 0xb4, 0xac => 0xa8, 0xad => 0x2260, 0xae => 0x0102, 0xaf => 0x0218, 0xb0 => 0x221e, 0xb2 => 0x2264, 0xb3 => 0x2265, 0xb4 => 0xa5, 0xb6 => 0x2202, 0xb7 => 0x2211, 0xb8 => 0x220f, 0xb9 => 0x03c0, 0xba => 0x222b, 0xbb => 0xaa, 0xbc => 0xba, 0xbd => 0x03a9, 0xbe => 0x0103, 0xbf => 0x0219, 0xc0 => 0xbf, 0xc1 => 0xa1, 0xc2 => 0xac, 0xc3 => 0x221a, 0xc4 => 0x0192, 0xc5 => 0x2248, 0xc6 => 0x2206, 0xc7 => 0xab, 0xc8 => 0xbb, 0xc9 => 0x2026, 0xca => 0xa0, 0xcb => 0xc0, 0xcc => 0xc3, 0xcd => 0xd5, 0xce => 0x0152, 0xcf => 0x0153, 0xd0 => 0x2013, 0xd1 => 0x2014, 0xd2 => 0x201c, 0xd3 => 0x201d, 0xd4 => 0x2018, 0xd5 => 0x2019, 0xd6 => 0xf7, 0xd7 => 0x25ca, 0xd8 => 0xff, 0xd9 => 0x0178, 0xda => 0x2044, 0xdb => 0x20ac, 0xdc => 0x2039, 0xdd => 0x203a, 0xde => 0x021a, 0xdf => 0x021b, 0xe0 => 0x2021, 0xe1 => 0xb7, 0xe2 => 0x201a, 0xe3 => 0x201e, 0xe4 => 0x2030, 0xe5 => 0xc2, 0xe6 => 0xca, 0xe7 => 0xc1, 0xe8 => 0xcb, 0xe9 => 0xc8, 0xea => 0xcd, 0xeb => 0xce, 0xec => 0xcf, 0xed => 0xcc, 0xee => 0xd3, 0xef => 0xd4, 0xf0 => 0xf8ff, 0xf1 => 0xd2, 0xf2 => 0xda, 0xf3 => 0xdb, 0xf4 => 0xd9, 0xf5 => 0x0131, 0xf6 => 0x02c6, 0xf7 => 0x02dc, 0xf8 => 0xaf, 0xf9 => 0x02d8, 0xfa => 0x02d9, 0xfb => 0x02da, 0xfc => 0xb8, 0xfd => 0x02dd, 0xfe => 0x02db, 0xff => 0x02c7, ); 1; # end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacRSymbol.pm���������������������������������������000644 �000765 �000024 �00000374313 11417362674 023671� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacRSymbol.pm # # Description: Mac RSymbol (cp10008) to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://www.haible.de/bruno/charsets/conversion-tables/GB2312.tar.bz2 # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacRSymbol = ( 0x81 => 0xf8d8, 0x82 => 0xf8d9, 0x83 => 0xf8da, 0x84 => 0xf8db, 0x85 => 0xf8dc, 0x86 => 0xf8dd, 0x87 => 0xf8de, 0x88 => 0xf8df, 0x89 => 0xf8e0, 0x8a => 0xf8e1, 0x8b => 0xf8e2, 0x8c => 0xf8e3, 0x8d => 0xf8e4, 0x8e => 0xf8e5, 0x8f => 0xf8e6, 0x90 => 0xf8e7, 0x91 => 0xf8e8, 0x92 => 0xf8e9, 0x93 => 0xf8ea, 0x94 => 0xf8eb, 0x95 => 0xf8ec, 0x96 => 0xf8ed, 0x97 => 0xf8ee, 0x98 => 0xf8ef, 0x99 => 0xf8f0, 0x9a => 0xf8f1, 0x9b => 0xf8f2, 0x9c => 0xf8f3, 0x9d => 0xf8f4, 0x9e => 0xf8f5, 0x9f => 0xf8f6, 0xa0 => 0xf8f7, 0xa1 => { 0xa1 => 0x3000, 0xa2 => 0x3001, 0xa3 => 0x3002, 0xa4 => 0x30fb, 0xa5 => 0x02c9, 0xa6 => 0x02c7, 0xa7 => 0xa8, 0xa8 => 0x3003, 0xa9 => 0x3005, 0xaa => 0x2015, 0xab => 0xff5e, 0xad => 0x2026, 0xae => 0x2018, 0xaf => 0x2019, 0xb0 => 0x201c, 0xb1 => 0x201d, 0xb2 => 0x3014, 0xb3 => 0x3015, 0xb4 => 0x3008, 0xb5 => 0x3009, 0xb6 => 0x300a, 0xb7 => 0x300b, 0xb8 => 0x300c, 0xb9 => 0x300d, 0xba => 0x300e, 0xbb => 0x300f, 0xbc => 0x3016, 0xbd => 0x3017, 0xbe => 0x3010, 0xbf => 0x3011, 0xc0 => 0xb1, 0xc1 => 0xd7, 0xc2 => 0xf7, 0xc3 => 0x2236, 0xc4 => 0x2227, 0xc5 => 0x2228, 0xc6 => 0x2211, 0xc7 => 0x220f, 0xc8 => 0x222a, 0xc9 => 0x2229, 0xca => 0x2208, 0xcb => 0x2237, 0xcc => 0x221a, 0xcd => 0x22a5, 0xce => 0x2225, 0xcf => 0x2220, 0xd0 => 0x2312, 0xd1 => 0x2299, 0xd2 => 0x222b, 0xd3 => 0x222e, 0xd4 => 0x2261, 0xd5 => 0x224c, 0xd6 => 0x2248, 0xd7 => 0x223d, 0xd8 => 0x221d, 0xd9 => 0x2260, 0xda => 0x226e, 0xdb => 0x226f, 0xdc => 0x2264, 0xdd => 0x2265, 0xde => 0x221e, 0xdf => 0x2235, 0xe0 => 0x2234, 0xe1 => 0x2642, 0xe2 => 0x2640, 0xe3 => 0xb0, 0xe4 => 0x2032, 0xe5 => 0x2033, 0xe6 => 0x2103, 0xe7 => 0xff04, 0xe8 => 0xa4, 0xe9 => 0xffe0, 0xea => 0xffe1, 0xeb => 0x2030, 0xec => 0xa7, 0xed => 0x2116, 0xee => 0x2606, 0xef => 0x2605, 0xf0 => 0x25cb, 0xf1 => 0x25cf, 0xf2 => 0x25ce, 0xf3 => 0x25c7, 0xf4 => 0x25c6, 0xf5 => 0x25a1, 0xf6 => 0x25a0, 0xf7 => 0x25b3, 0xf8 => 0x25b2, 0xf9 => 0x203b, 0xfa => 0x2192, 0xfb => 0x2190, 0xfc => 0x2191, 0xfd => 0x2193, 0xfe => 0x3013, }, 0xa2 => { 0xb1 => 0x2488, 0xb2 => 0x2489, 0xb3 => 0x248a, 0xb4 => 0x248b, 0xb5 => 0x248c, 0xb6 => 0x248d, 0xb7 => 0x248e, 0xb8 => 0x248f, 0xb9 => 0x2490, 0xba => 0x2491, 0xbb => 0x2492, 0xbc => 0x2493, 0xbd => 0x2494, 0xbe => 0x2495, 0xbf => 0x2496, 0xc0 => 0x2497, 0xc1 => 0x2498, 0xc2 => 0x2499, 0xc3 => 0x249a, 0xc4 => 0x249b, 0xc5 => 0x2474, 0xc6 => 0x2475, 0xc7 => 0x2476, 0xc8 => 0x2477, 0xc9 => 0x2478, 0xca => 0x2479, 0xcb => 0x247a, 0xcc => 0x247b, 0xcd => 0x247c, 0xce => 0x247d, 0xcf => 0x247e, 0xd0 => 0x247f, 0xd1 => 0x2480, 0xd2 => 0x2481, 0xd3 => 0x2482, 0xd4 => 0x2483, 0xd5 => 0x2484, 0xd6 => 0x2485, 0xd7 => 0x2486, 0xd8 => 0x2487, 0xd9 => 0x2460, 0xda => 0x2461, 0xdb => 0x2462, 0xdc => 0x2463, 0xdd => 0x2464, 0xde => 0x2465, 0xdf => 0x2466, 0xe0 => 0x2467, 0xe1 => 0x2468, 0xe2 => 0x2469, 0xe5 => 0x3220, 0xe6 => 0x3221, 0xe7 => 0x3222, 0xe8 => 0x3223, 0xe9 => 0x3224, 0xea => 0x3225, 0xeb => 0x3226, 0xec => 0x3227, 0xed => 0x3228, 0xee => 0x3229, 0xf1 => 0x2160, 0xf2 => 0x2161, 0xf3 => 0x2162, 0xf4 => 0x2163, 0xf5 => 0x2164, 0xf6 => 0x2165, 0xf7 => 0x2166, 0xf8 => 0x2167, 0xf9 => 0x2168, 0xfa => 0x2169, 0xfb => 0x216a, 0xfc => 0x216b, }, 0xa3 => { 0xa1 => 0xff01, 0xa2 => 0xff02, 0xa3 => 0xff03, 0xa4 => 0xffe5, 0xa5 => 0xff05, 0xa6 => 0xff06, 0xa7 => 0xff07, 0xa8 => 0xff08, 0xa9 => 0xff09, 0xaa => 0xff0a, 0xab => 0xff0b, 0xac => 0xff0c, 0xad => 0xff0d, 0xae => 0xff0e, 0xaf => 0xff0f, 0xb0 => 0xff10, 0xb1 => 0xff11, 0xb2 => 0xff12, 0xb3 => 0xff13, 0xb4 => 0xff14, 0xb5 => 0xff15, 0xb6 => 0xff16, 0xb7 => 0xff17, 0xb8 => 0xff18, 0xb9 => 0xff19, 0xba => 0xff1a, 0xbb => 0xff1b, 0xbc => 0xff1c, 0xbd => 0xff1d, 0xbe => 0xff1e, 0xbf => 0xff1f, 0xc0 => 0xff20, 0xc1 => 0xff21, 0xc2 => 0xff22, 0xc3 => 0xff23, 0xc4 => 0xff24, 0xc5 => 0xff25, 0xc6 => 0xff26, 0xc7 => 0xff27, 0xc8 => 0xff28, 0xc9 => 0xff29, 0xca => 0xff2a, 0xcb => 0xff2b, 0xcc => 0xff2c, 0xcd => 0xff2d, 0xce => 0xff2e, 0xcf => 0xff2f, 0xd0 => 0xff30, 0xd1 => 0xff31, 0xd2 => 0xff32, 0xd3 => 0xff33, 0xd4 => 0xff34, 0xd5 => 0xff35, 0xd6 => 0xff36, 0xd7 => 0xff37, 0xd8 => 0xff38, 0xd9 => 0xff39, 0xda => 0xff3a, 0xdb => 0xff3b, 0xdc => 0xff3c, 0xdd => 0xff3d, 0xde => 0xff3e, 0xdf => 0xff3f, 0xe0 => 0xff40, 0xe1 => 0xff41, 0xe2 => 0xff42, 0xe3 => 0xff43, 0xe4 => 0xff44, 0xe5 => 0xff45, 0xe6 => 0xff46, 0xe7 => 0xff47, 0xe8 => 0xff48, 0xe9 => 0xff49, 0xea => 0xff4a, 0xeb => 0xff4b, 0xec => 0xff4c, 0xed => 0xff4d, 0xee => 0xff4e, 0xef => 0xff4f, 0xf0 => 0xff50, 0xf1 => 0xff51, 0xf2 => 0xff52, 0xf3 => 0xff53, 0xf4 => 0xff54, 0xf5 => 0xff55, 0xf6 => 0xff56, 0xf7 => 0xff57, 0xf8 => 0xff58, 0xf9 => 0xff59, 0xfa => 0xff5a, 0xfb => 0xff5b, 0xfc => 0xff5c, 0xfd => 0xff5d, 0xfe => 0xffe3, }, 0xa4 => { 0xa1 => 0x3041, 0xa2 => 0x3042, 0xa3 => 0x3043, 0xa4 => 0x3044, 0xa5 => 0x3045, 0xa6 => 0x3046, 0xa7 => 0x3047, 0xa8 => 0x3048, 0xa9 => 0x3049, 0xaa => 0x304a, 0xab => 0x304b, 0xac => 0x304c, 0xad => 0x304d, 0xae => 0x304e, 0xaf => 0x304f, 0xb0 => 0x3050, 0xb1 => 0x3051, 0xb2 => 0x3052, 0xb3 => 0x3053, 0xb4 => 0x3054, 0xb5 => 0x3055, 0xb6 => 0x3056, 0xb7 => 0x3057, 0xb8 => 0x3058, 0xb9 => 0x3059, 0xba => 0x305a, 0xbb => 0x305b, 0xbc => 0x305c, 0xbd => 0x305d, 0xbe => 0x305e, 0xbf => 0x305f, 0xc0 => 0x3060, 0xc1 => 0x3061, 0xc2 => 0x3062, 0xc3 => 0x3063, 0xc4 => 0x3064, 0xc5 => 0x3065, 0xc6 => 0x3066, 0xc7 => 0x3067, 0xc8 => 0x3068, 0xc9 => 0x3069, 0xca => 0x306a, 0xcb => 0x306b, 0xcc => 0x306c, 0xcd => 0x306d, 0xce => 0x306e, 0xcf => 0x306f, 0xd0 => 0x3070, 0xd1 => 0x3071, 0xd2 => 0x3072, 0xd3 => 0x3073, 0xd4 => 0x3074, 0xd5 => 0x3075, 0xd6 => 0x3076, 0xd7 => 0x3077, 0xd8 => 0x3078, 0xd9 => 0x3079, 0xda => 0x307a, 0xdb => 0x307b, 0xdc => 0x307c, 0xdd => 0x307d, 0xde => 0x307e, 0xdf => 0x307f, 0xe0 => 0x3080, 0xe1 => 0x3081, 0xe2 => 0x3082, 0xe3 => 0x3083, 0xe4 => 0x3084, 0xe5 => 0x3085, 0xe6 => 0x3086, 0xe7 => 0x3087, 0xe8 => 0x3088, 0xe9 => 0x3089, 0xea => 0x308a, 0xeb => 0x308b, 0xec => 0x308c, 0xed => 0x308d, 0xee => 0x308e, 0xef => 0x308f, 0xf0 => 0x3090, 0xf1 => 0x3091, 0xf2 => 0x3092, 0xf3 => 0x3093, }, 0xa5 => { 0xa1 => 0x30a1, 0xa2 => 0x30a2, 0xa3 => 0x30a3, 0xa4 => 0x30a4, 0xa5 => 0x30a5, 0xa6 => 0x30a6, 0xa7 => 0x30a7, 0xa8 => 0x30a8, 0xa9 => 0x30a9, 0xaa => 0x30aa, 0xab => 0x30ab, 0xac => 0x30ac, 0xad => 0x30ad, 0xae => 0x30ae, 0xaf => 0x30af, 0xb0 => 0x30b0, 0xb1 => 0x30b1, 0xb2 => 0x30b2, 0xb3 => 0x30b3, 0xb4 => 0x30b4, 0xb5 => 0x30b5, 0xb6 => 0x30b6, 0xb7 => 0x30b7, 0xb8 => 0x30b8, 0xb9 => 0x30b9, 0xba => 0x30ba, 0xbb => 0x30bb, 0xbc => 0x30bc, 0xbd => 0x30bd, 0xbe => 0x30be, 0xbf => 0x30bf, 0xc0 => 0x30c0, 0xc1 => 0x30c1, 0xc2 => 0x30c2, 0xc3 => 0x30c3, 0xc4 => 0x30c4, 0xc5 => 0x30c5, 0xc6 => 0x30c6, 0xc7 => 0x30c7, 0xc8 => 0x30c8, 0xc9 => 0x30c9, 0xca => 0x30ca, 0xcb => 0x30cb, 0xcc => 0x30cc, 0xcd => 0x30cd, 0xce => 0x30ce, 0xcf => 0x30cf, 0xd0 => 0x30d0, 0xd1 => 0x30d1, 0xd2 => 0x30d2, 0xd3 => 0x30d3, 0xd4 => 0x30d4, 0xd5 => 0x30d5, 0xd6 => 0x30d6, 0xd7 => 0x30d7, 0xd8 => 0x30d8, 0xd9 => 0x30d9, 0xda => 0x30da, 0xdb => 0x30db, 0xdc => 0x30dc, 0xdd => 0x30dd, 0xde => 0x30de, 0xdf => 0x30df, 0xe0 => 0x30e0, 0xe1 => 0x30e1, 0xe2 => 0x30e2, 0xe3 => 0x30e3, 0xe4 => 0x30e4, 0xe5 => 0x30e5, 0xe6 => 0x30e6, 0xe7 => 0x30e7, 0xe8 => 0x30e8, 0xe9 => 0x30e9, 0xea => 0x30ea, 0xeb => 0x30eb, 0xec => 0x30ec, 0xed => 0x30ed, 0xee => 0x30ee, 0xef => 0x30ef, 0xf0 => 0x30f0, 0xf1 => 0x30f1, 0xf2 => 0x30f2, 0xf3 => 0x30f3, 0xf4 => 0x30f4, 0xf5 => 0x30f5, 0xf6 => 0x30f6, }, 0xa6 => { 0xa1 => 0x0391, 0xa2 => 0x0392, 0xa3 => 0x0393, 0xa4 => 0x0394, 0xa5 => 0x0395, 0xa6 => 0x0396, 0xa7 => 0x0397, 0xa8 => 0x0398, 0xa9 => 0x0399, 0xaa => 0x039a, 0xab => 0x039b, 0xac => 0x039c, 0xad => 0x039d, 0xae => 0x039e, 0xaf => 0x039f, 0xb0 => 0x03a0, 0xb1 => 0x03a1, 0xb2 => 0x03a3, 0xb3 => 0x03a4, 0xb4 => 0x03a5, 0xb5 => 0x03a6, 0xb6 => 0x03a7, 0xb7 => 0x03a8, 0xb8 => 0x03a9, 0xc1 => 0x03b1, 0xc2 => 0x03b2, 0xc3 => 0x03b3, 0xc4 => 0x03b4, 0xc5 => 0x03b5, 0xc6 => 0x03b6, 0xc7 => 0x03b7, 0xc8 => 0x03b8, 0xc9 => 0x03b9, 0xca => 0x03ba, 0xcb => 0x03bb, 0xcc => 0x03bc, 0xcd => 0x03bd, 0xce => 0x03be, 0xcf => 0x03bf, 0xd0 => 0x03c0, 0xd1 => 0x03c1, 0xd2 => 0x03c3, 0xd3 => 0x03c4, 0xd4 => 0x03c5, 0xd5 => 0x03c6, 0xd6 => 0x03c7, 0xd7 => 0x03c8, 0xd8 => 0x03c9, }, 0xa7 => { 0xa1 => 0x0410, 0xa2 => 0x0411, 0xa3 => 0x0412, 0xa4 => 0x0413, 0xa5 => 0x0414, 0xa6 => 0x0415, 0xa7 => 0x0401, 0xa8 => 0x0416, 0xa9 => 0x0417, 0xaa => 0x0418, 0xab => 0x0419, 0xac => 0x041a, 0xad => 0x041b, 0xae => 0x041c, 0xaf => 0x041d, 0xb0 => 0x041e, 0xb1 => 0x041f, 0xb2 => 0x0420, 0xb3 => 0x0421, 0xb4 => 0x0422, 0xb5 => 0x0423, 0xb6 => 0x0424, 0xb7 => 0x0425, 0xb8 => 0x0426, 0xb9 => 0x0427, 0xba => 0x0428, 0xbb => 0x0429, 0xbc => 0x042a, 0xbd => 0x042b, 0xbe => 0x042c, 0xbf => 0x042d, 0xc0 => 0x042e, 0xc1 => 0x042f, 0xd1 => 0x0430, 0xd2 => 0x0431, 0xd3 => 0x0432, 0xd4 => 0x0433, 0xd5 => 0x0434, 0xd6 => 0x0435, 0xd7 => 0x0451, 0xd8 => 0x0436, 0xd9 => 0x0437, 0xda => 0x0438, 0xdb => 0x0439, 0xdc => 0x043a, 0xdd => 0x043b, 0xde => 0x043c, 0xdf => 0x043d, 0xe0 => 0x043e, 0xe1 => 0x043f, 0xe2 => 0x0440, 0xe3 => 0x0441, 0xe4 => 0x0442, 0xe5 => 0x0443, 0xe6 => 0x0444, 0xe7 => 0x0445, 0xe8 => 0x0446, 0xe9 => 0x0447, 0xea => 0x0448, 0xeb => 0x0449, 0xec => 0x044a, 0xed => 0x044b, 0xee => 0x044c, 0xef => 0x044d, 0xf0 => 0x044e, 0xf1 => 0x044f, }, 0xa8 => { 0xa1 => 0x0101, 0xa2 => 0xe1, 0xa3 => 0x01ce, 0xa4 => 0xe0, 0xa5 => 0x0113, 0xa6 => 0xe9, 0xa7 => 0x011b, 0xa8 => 0xe8, 0xa9 => 0x012b, 0xaa => 0xed, 0xab => 0x01d0, 0xac => 0xec, 0xad => 0x014d, 0xae => 0xf3, 0xaf => 0x01d2, 0xb0 => 0xf2, 0xb1 => 0x016b, 0xb2 => 0xfa, 0xb3 => 0x01d4, 0xb4 => 0xf9, 0xb5 => 0x01d6, 0xb6 => 0x01d8, 0xb7 => 0x01da, 0xb8 => 0x01dc, 0xb9 => 0xfc, 0xba => 0xea, 0xc5 => 0x3105, 0xc6 => 0x3106, 0xc7 => 0x3107, 0xc8 => 0x3108, 0xc9 => 0x3109, 0xca => 0x310a, 0xcb => 0x310b, 0xcc => 0x310c, 0xcd => 0x310d, 0xce => 0x310e, 0xcf => 0x310f, 0xd0 => 0x3110, 0xd1 => 0x3111, 0xd2 => 0x3112, 0xd3 => 0x3113, 0xd4 => 0x3114, 0xd5 => 0x3115, 0xd6 => 0x3116, 0xd7 => 0x3117, 0xd8 => 0x3118, 0xd9 => 0x3119, 0xda => 0x311a, 0xdb => 0x311b, 0xdc => 0x311c, 0xdd => 0x311d, 0xde => 0x311e, 0xdf => 0x311f, 0xe0 => 0x3120, 0xe1 => 0x3121, 0xe2 => 0x3122, 0xe3 => 0x3123, 0xe4 => 0x3124, 0xe5 => 0x3125, 0xe6 => 0x3126, 0xe7 => 0x3127, 0xe8 => 0x3128, 0xe9 => 0x3129, }, 0xa9 => { 0xa4 => 0x2500, 0xa5 => 0x2501, 0xa6 => 0x2502, 0xa7 => 0x2503, 0xa8 => 0x2504, 0xa9 => 0x2505, 0xaa => 0x2506, 0xab => 0x2507, 0xac => 0x2508, 0xad => 0x2509, 0xae => 0x250a, 0xaf => 0x250b, 0xb0 => 0x250c, 0xb1 => 0x250d, 0xb2 => 0x250e, 0xb3 => 0x250f, 0xb4 => 0x2510, 0xb5 => 0x2511, 0xb6 => 0x2512, 0xb7 => 0x2513, 0xb8 => 0x2514, 0xb9 => 0x2515, 0xba => 0x2516, 0xbb => 0x2517, 0xbc => 0x2518, 0xbd => 0x2519, 0xbe => 0x251a, 0xbf => 0x251b, 0xc0 => 0x251c, 0xc1 => 0x251d, 0xc2 => 0x251e, 0xc3 => 0x251f, 0xc4 => 0x2520, 0xc5 => 0x2521, 0xc6 => 0x2522, 0xc7 => 0x2523, 0xc8 => 0x2524, 0xc9 => 0x2525, 0xca => 0x2526, 0xcb => 0x2527, 0xcc => 0x2528, 0xcd => 0x2529, 0xce => 0x252a, 0xcf => 0x252b, 0xd0 => 0x252c, 0xd1 => 0x252d, 0xd2 => 0x252e, 0xd3 => 0x252f, 0xd4 => 0x2530, 0xd5 => 0x2531, 0xd6 => 0x2532, 0xd7 => 0x2533, 0xd8 => 0x2534, 0xd9 => 0x2535, 0xda => 0x2536, 0xdb => 0x2537, 0xdc => 0x2538, 0xdd => 0x2539, 0xde => 0x253a, 0xdf => 0x253b, 0xe0 => 0x253c, 0xe1 => 0x253d, 0xe2 => 0x253e, 0xe3 => 0x253f, 0xe4 => 0x2540, 0xe5 => 0x2541, 0xe6 => 0x2542, 0xe7 => 0x2543, 0xe8 => 0x2544, 0xe9 => 0x2545, 0xea => 0x2546, 0xeb => 0x2547, 0xec => 0x2548, 0xed => 0x2549, 0xee => 0x254a, 0xef => 0x254b, }, 0xb0 => { 0xa1 => 0x554a, 0xa2 => 0x963f, 0xa3 => 0x57c3, 0xa4 => 0x6328, 0xa5 => 0x54ce, 0xa6 => 0x5509, 0xa7 => 0x54c0, 0xa8 => 0x7691, 0xa9 => 0x764c, 0xaa => 0x853c, 0xab => 0x77ee, 0xac => 0x827e, 0xad => 0x788d, 0xae => 0x7231, 0xaf => 0x9698, 0xb0 => 0x978d, 0xb1 => 0x6c28, 0xb2 => 0x5b89, 0xb3 => 0x4ffa, 0xb4 => 0x6309, 0xb5 => 0x6697, 0xb6 => 0x5cb8, 0xb7 => 0x80fa, 0xb8 => 0x6848, 0xb9 => 0x80ae, 0xba => 0x6602, 0xbb => 0x76ce, 0xbc => 0x51f9, 0xbd => 0x6556, 0xbe => 0x71ac, 0xbf => 0x7ff1, 0xc0 => 0x8884, 0xc1 => 0x50b2, 0xc2 => 0x5965, 0xc3 => 0x61ca, 0xc4 => 0x6fb3, 0xc5 => 0x82ad, 0xc6 => 0x634c, 0xc7 => 0x6252, 0xc8 => 0x53ed, 0xc9 => 0x5427, 0xca => 0x7b06, 0xcb => 0x516b, 0xcc => 0x75a4, 0xcd => 0x5df4, 0xce => 0x62d4, 0xcf => 0x8dcb, 0xd0 => 0x9776, 0xd1 => 0x628a, 0xd2 => 0x8019, 0xd3 => 0x575d, 0xd4 => 0x9738, 0xd5 => 0x7f62, 0xd6 => 0x7238, 0xd7 => 0x767d, 0xd8 => 0x67cf, 0xd9 => 0x767e, 0xda => 0x6446, 0xdb => 0x4f70, 0xdc => 0x8d25, 0xdd => 0x62dc, 0xde => 0x7a17, 0xdf => 0x6591, 0xe0 => 0x73ed, 0xe1 => 0x642c, 0xe2 => 0x6273, 0xe3 => 0x822c, 0xe4 => 0x9881, 0xe5 => 0x677f, 0xe6 => 0x7248, 0xe7 => 0x626e, 0xe8 => 0x62cc, 0xe9 => 0x4f34, 0xea => 0x74e3, 0xeb => 0x534a, 0xec => 0x529e, 0xed => 0x7eca, 0xee => 0x90a6, 0xef => 0x5e2e, 0xf0 => 0x6886, 0xf1 => 0x699c, 0xf2 => 0x8180, 0xf3 => 0x7ed1, 0xf4 => 0x68d2, 0xf5 => 0x78c5, 0xf6 => 0x868c, 0xf7 => 0x9551, 0xf8 => 0x508d, 0xf9 => 0x8c24, 0xfa => 0x82de, 0xfb => 0x80de, 0xfc => 0x5305, 0xfd => 0x8912, 0xfe => 0x5265, }, 0xb1 => { 0xa1 => 0x8584, 0xa2 => 0x96f9, 0xa3 => 0x4fdd, 0xa4 => 0x5821, 0xa5 => 0x9971, 0xa6 => 0x5b9d, 0xa7 => 0x62b1, 0xa8 => 0x62a5, 0xa9 => 0x66b4, 0xaa => 0x8c79, 0xab => 0x9c8d, 0xac => 0x7206, 0xad => 0x676f, 0xae => 0x7891, 0xaf => 0x60b2, 0xb0 => 0x5351, 0xb1 => 0x5317, 0xb2 => 0x8f88, 0xb3 => 0x80cc, 0xb4 => 0x8d1d, 0xb5 => 0x94a1, 0xb6 => 0x500d, 0xb7 => 0x72c8, 0xb8 => 0x5907, 0xb9 => 0x60eb, 0xba => 0x7119, 0xbb => 0x88ab, 0xbc => 0x5954, 0xbd => 0x82ef, 0xbe => 0x672c, 0xbf => 0x7b28, 0xc0 => 0x5d29, 0xc1 => 0x7ef7, 0xc2 => 0x752d, 0xc3 => 0x6cf5, 0xc4 => 0x8e66, 0xc5 => 0x8ff8, 0xc6 => 0x903c, 0xc7 => 0x9f3b, 0xc8 => 0x6bd4, 0xc9 => 0x9119, 0xca => 0x7b14, 0xcb => 0x5f7c, 0xcc => 0x78a7, 0xcd => 0x84d6, 0xce => 0x853d, 0xcf => 0x6bd5, 0xd0 => 0x6bd9, 0xd1 => 0x6bd6, 0xd2 => 0x5e01, 0xd3 => 0x5e87, 0xd4 => 0x75f9, 0xd5 => 0x95ed, 0xd6 => 0x655d, 0xd7 => 0x5f0a, 0xd8 => 0x5fc5, 0xd9 => 0x8f9f, 0xda => 0x58c1, 0xdb => 0x81c2, 0xdc => 0x907f, 0xdd => 0x965b, 0xde => 0x97ad, 0xdf => 0x8fb9, 0xe0 => 0x7f16, 0xe1 => 0x8d2c, 0xe2 => 0x6241, 0xe3 => 0x4fbf, 0xe4 => 0x53d8, 0xe5 => 0x535e, 0xe6 => 0x8fa8, 0xe7 => 0x8fa9, 0xe8 => 0x8fab, 0xe9 => 0x904d, 0xea => 0x6807, 0xeb => 0x5f6a, 0xec => 0x8198, 0xed => 0x8868, 0xee => 0x9cd6, 0xef => 0x618b, 0xf0 => 0x522b, 0xf1 => 0x762a, 0xf2 => 0x5f6c, 0xf3 => 0x658c, 0xf4 => 0x6fd2, 0xf5 => 0x6ee8, 0xf6 => 0x5bbe, 0xf7 => 0x6448, 0xf8 => 0x5175, 0xf9 => 0x51b0, 0xfa => 0x67c4, 0xfb => 0x4e19, 0xfc => 0x79c9, 0xfd => 0x997c, 0xfe => 0x70b3, }, 0xb2 => { 0xa1 => 0x75c5, 0xa2 => 0x5e76, 0xa3 => 0x73bb, 0xa4 => 0x83e0, 0xa5 => 0x64ad, 0xa6 => 0x62e8, 0xa7 => 0x94b5, 0xa8 => 0x6ce2, 0xa9 => 0x535a, 0xaa => 0x52c3, 0xab => 0x640f, 0xac => 0x94c2, 0xad => 0x7b94, 0xae => 0x4f2f, 0xaf => 0x5e1b, 0xb0 => 0x8236, 0xb1 => 0x8116, 0xb2 => 0x818a, 0xb3 => 0x6e24, 0xb4 => 0x6cca, 0xb5 => 0x9a73, 0xb6 => 0x6355, 0xb7 => 0x535c, 0xb8 => 0x54fa, 0xb9 => 0x8865, 0xba => 0x57e0, 0xbb => 0x4e0d, 0xbc => 0x5e03, 0xbd => 0x6b65, 0xbe => 0x7c3f, 0xbf => 0x90e8, 0xc0 => 0x6016, 0xc1 => 0x64e6, 0xc2 => 0x731c, 0xc3 => 0x88c1, 0xc4 => 0x6750, 0xc5 => 0x624d, 0xc6 => 0x8d22, 0xc7 => 0x776c, 0xc8 => 0x8e29, 0xc9 => 0x91c7, 0xca => 0x5f69, 0xcb => 0x83dc, 0xcc => 0x8521, 0xcd => 0x9910, 0xce => 0x53c2, 0xcf => 0x8695, 0xd0 => 0x6b8b, 0xd1 => 0x60ed, 0xd2 => 0x60e8, 0xd3 => 0x707f, 0xd4 => 0x82cd, 0xd5 => 0x8231, 0xd6 => 0x4ed3, 0xd7 => 0x6ca7, 0xd8 => 0x85cf, 0xd9 => 0x64cd, 0xda => 0x7cd9, 0xdb => 0x69fd, 0xdc => 0x66f9, 0xdd => 0x8349, 0xde => 0x5395, 0xdf => 0x7b56, 0xe0 => 0x4fa7, 0xe1 => 0x518c, 0xe2 => 0x6d4b, 0xe3 => 0x5c42, 0xe4 => 0x8e6d, 0xe5 => 0x63d2, 0xe6 => 0x53c9, 0xe7 => 0x832c, 0xe8 => 0x8336, 0xe9 => 0x67e5, 0xea => 0x78b4, 0xeb => 0x643d, 0xec => 0x5bdf, 0xed => 0x5c94, 0xee => 0x5dee, 0xef => 0x8be7, 0xf0 => 0x62c6, 0xf1 => 0x67f4, 0xf2 => 0x8c7a, 0xf3 => 0x6400, 0xf4 => 0x63ba, 0xf5 => 0x8749, 0xf6 => 0x998b, 0xf7 => 0x8c17, 0xf8 => 0x7f20, 0xf9 => 0x94f2, 0xfa => 0x4ea7, 0xfb => 0x9610, 0xfc => 0x98a4, 0xfd => 0x660c, 0xfe => 0x7316, }, 0xb3 => { 0xa1 => 0x573a, 0xa2 => 0x5c1d, 0xa3 => 0x5e38, 0xa4 => 0x957f, 0xa5 => 0x507f, 0xa6 => 0x80a0, 0xa7 => 0x5382, 0xa8 => 0x655e, 0xa9 => 0x7545, 0xaa => 0x5531, 0xab => 0x5021, 0xac => 0x8d85, 0xad => 0x6284, 0xae => 0x949e, 0xaf => 0x671d, 0xb0 => 0x5632, 0xb1 => 0x6f6e, 0xb2 => 0x5de2, 0xb3 => 0x5435, 0xb4 => 0x7092, 0xb5 => 0x8f66, 0xb6 => 0x626f, 0xb7 => 0x64a4, 0xb8 => 0x63a3, 0xb9 => 0x5f7b, 0xba => 0x6f88, 0xbb => 0x90f4, 0xbc => 0x81e3, 0xbd => 0x8fb0, 0xbe => 0x5c18, 0xbf => 0x6668, 0xc0 => 0x5ff1, 0xc1 => 0x6c89, 0xc2 => 0x9648, 0xc3 => 0x8d81, 0xc4 => 0x886c, 0xc5 => 0x6491, 0xc6 => 0x79f0, 0xc7 => 0x57ce, 0xc8 => 0x6a59, 0xc9 => 0x6210, 0xca => 0x5448, 0xcb => 0x4e58, 0xcc => 0x7a0b, 0xcd => 0x60e9, 0xce => 0x6f84, 0xcf => 0x8bda, 0xd0 => 0x627f, 0xd1 => 0x901e, 0xd2 => 0x9a8b, 0xd3 => 0x79e4, 0xd4 => 0x5403, 0xd5 => 0x75f4, 0xd6 => 0x6301, 0xd7 => 0x5319, 0xd8 => 0x6c60, 0xd9 => 0x8fdf, 0xda => 0x5f1b, 0xdb => 0x9a70, 0xdc => 0x803b, 0xdd => 0x9f7f, 0xde => 0x4f88, 0xdf => 0x5c3a, 0xe0 => 0x8d64, 0xe1 => 0x7fc5, 0xe2 => 0x65a5, 0xe3 => 0x70bd, 0xe4 => 0x5145, 0xe5 => 0x51b2, 0xe6 => 0x866b, 0xe7 => 0x5d07, 0xe8 => 0x5ba0, 0xe9 => 0x62bd, 0xea => 0x916c, 0xeb => 0x7574, 0xec => 0x8e0c, 0xed => 0x7a20, 0xee => 0x6101, 0xef => 0x7b79, 0xf0 => 0x4ec7, 0xf1 => 0x7ef8, 0xf2 => 0x7785, 0xf3 => 0x4e11, 0xf4 => 0x81ed, 0xf5 => 0x521d, 0xf6 => 0x51fa, 0xf7 => 0x6a71, 0xf8 => 0x53a8, 0xf9 => 0x8e87, 0xfa => 0x9504, 0xfb => 0x96cf, 0xfc => 0x6ec1, 0xfd => 0x9664, 0xfe => 0x695a, }, 0xb4 => { 0xa1 => 0x7840, 0xa2 => 0x50a8, 0xa3 => 0x77d7, 0xa4 => 0x6410, 0xa5 => 0x89e6, 0xa6 => 0x5904, 0xa7 => 0x63e3, 0xa8 => 0x5ddd, 0xa9 => 0x7a7f, 0xaa => 0x693d, 0xab => 0x4f20, 0xac => 0x8239, 0xad => 0x5598, 0xae => 0x4e32, 0xaf => 0x75ae, 0xb0 => 0x7a97, 0xb1 => 0x5e62, 0xb2 => 0x5e8a, 0xb3 => 0x95ef, 0xb4 => 0x521b, 0xb5 => 0x5439, 0xb6 => 0x708a, 0xb7 => 0x6376, 0xb8 => 0x9524, 0xb9 => 0x5782, 0xba => 0x6625, 0xbb => 0x693f, 0xbc => 0x9187, 0xbd => 0x5507, 0xbe => 0x6df3, 0xbf => 0x7eaf, 0xc0 => 0x8822, 0xc1 => 0x6233, 0xc2 => 0x7ef0, 0xc3 => 0x75b5, 0xc4 => 0x8328, 0xc5 => 0x78c1, 0xc6 => 0x96cc, 0xc7 => 0x8f9e, 0xc8 => 0x6148, 0xc9 => 0x74f7, 0xca => 0x8bcd, 0xcb => 0x6b64, 0xcc => 0x523a, 0xcd => 0x8d50, 0xce => 0x6b21, 0xcf => 0x806a, 0xd0 => 0x8471, 0xd1 => 0x56f1, 0xd2 => 0x5306, 0xd3 => 0x4ece, 0xd4 => 0x4e1b, 0xd5 => 0x51d1, 0xd6 => 0x7c97, 0xd7 => 0x918b, 0xd8 => 0x7c07, 0xd9 => 0x4fc3, 0xda => 0x8e7f, 0xdb => 0x7be1, 0xdc => 0x7a9c, 0xdd => 0x6467, 0xde => 0x5d14, 0xdf => 0x50ac, 0xe0 => 0x8106, 0xe1 => 0x7601, 0xe2 => 0x7cb9, 0xe3 => 0x6dec, 0xe4 => 0x7fe0, 0xe5 => 0x6751, 0xe6 => 0x5b58, 0xe7 => 0x5bf8, 0xe8 => 0x78cb, 0xe9 => 0x64ae, 0xea => 0x6413, 0xeb => 0x63aa, 0xec => 0x632b, 0xed => 0x9519, 0xee => 0x642d, 0xef => 0x8fbe, 0xf0 => 0x7b54, 0xf1 => 0x7629, 0xf2 => 0x6253, 0xf3 => 0x5927, 0xf4 => 0x5446, 0xf5 => 0x6b79, 0xf6 => 0x50a3, 0xf7 => 0x6234, 0xf8 => 0x5e26, 0xf9 => 0x6b86, 0xfa => 0x4ee3, 0xfb => 0x8d37, 0xfc => 0x888b, 0xfd => 0x5f85, 0xfe => 0x902e, }, 0xb5 => { 0xa1 => 0x6020, 0xa2 => 0x803d, 0xa3 => 0x62c5, 0xa4 => 0x4e39, 0xa5 => 0x5355, 0xa6 => 0x90f8, 0xa7 => 0x63b8, 0xa8 => 0x80c6, 0xa9 => 0x65e6, 0xaa => 0x6c2e, 0xab => 0x4f46, 0xac => 0x60ee, 0xad => 0x6de1, 0xae => 0x8bde, 0xaf => 0x5f39, 0xb0 => 0x86cb, 0xb1 => 0x5f53, 0xb2 => 0x6321, 0xb3 => 0x515a, 0xb4 => 0x8361, 0xb5 => 0x6863, 0xb6 => 0x5200, 0xb7 => 0x6363, 0xb8 => 0x8e48, 0xb9 => 0x5012, 0xba => 0x5c9b, 0xbb => 0x7977, 0xbc => 0x5bfc, 0xbd => 0x5230, 0xbe => 0x7a3b, 0xbf => 0x60bc, 0xc0 => 0x9053, 0xc1 => 0x76d7, 0xc2 => 0x5fb7, 0xc3 => 0x5f97, 0xc4 => 0x7684, 0xc5 => 0x8e6c, 0xc6 => 0x706f, 0xc7 => 0x767b, 0xc8 => 0x7b49, 0xc9 => 0x77aa, 0xca => 0x51f3, 0xcb => 0x9093, 0xcc => 0x5824, 0xcd => 0x4f4e, 0xce => 0x6ef4, 0xcf => 0x8fea, 0xd0 => 0x654c, 0xd1 => 0x7b1b, 0xd2 => 0x72c4, 0xd3 => 0x6da4, 0xd4 => 0x7fdf, 0xd5 => 0x5ae1, 0xd6 => 0x62b5, 0xd7 => 0x5e95, 0xd8 => 0x5730, 0xd9 => 0x8482, 0xda => 0x7b2c, 0xdb => 0x5e1d, 0xdc => 0x5f1f, 0xdd => 0x9012, 0xde => 0x7f14, 0xdf => 0x98a0, 0xe0 => 0x6382, 0xe1 => 0x6ec7, 0xe2 => 0x7898, 0xe3 => 0x70b9, 0xe4 => 0x5178, 0xe5 => 0x975b, 0xe6 => 0x57ab, 0xe7 => 0x7535, 0xe8 => 0x4f43, 0xe9 => 0x7538, 0xea => 0x5e97, 0xeb => 0x60e6, 0xec => 0x5960, 0xed => 0x6dc0, 0xee => 0x6bbf, 0xef => 0x7889, 0xf0 => 0x53fc, 0xf1 => 0x96d5, 0xf2 => 0x51cb, 0xf3 => 0x5201, 0xf4 => 0x6389, 0xf5 => 0x540a, 0xf6 => 0x9493, 0xf7 => 0x8c03, 0xf8 => 0x8dcc, 0xf9 => 0x7239, 0xfa => 0x789f, 0xfb => 0x8776, 0xfc => 0x8fed, 0xfd => 0x8c0d, 0xfe => 0x53e0, }, 0xb6 => { 0xa1 => 0x4e01, 0xa2 => 0x76ef, 0xa3 => 0x53ee, 0xa4 => 0x9489, 0xa5 => 0x9876, 0xa6 => 0x9f0e, 0xa7 => 0x952d, 0xa8 => 0x5b9a, 0xa9 => 0x8ba2, 0xaa => 0x4e22, 0xab => 0x4e1c, 0xac => 0x51ac, 0xad => 0x8463, 0xae => 0x61c2, 0xaf => 0x52a8, 0xb0 => 0x680b, 0xb1 => 0x4f97, 0xb2 => 0x606b, 0xb3 => 0x51bb, 0xb4 => 0x6d1e, 0xb5 => 0x515c, 0xb6 => 0x6296, 0xb7 => 0x6597, 0xb8 => 0x9661, 0xb9 => 0x8c46, 0xba => 0x9017, 0xbb => 0x75d8, 0xbc => 0x90fd, 0xbd => 0x7763, 0xbe => 0x6bd2, 0xbf => 0x728a, 0xc0 => 0x72ec, 0xc1 => 0x8bfb, 0xc2 => 0x5835, 0xc3 => 0x7779, 0xc4 => 0x8d4c, 0xc5 => 0x675c, 0xc6 => 0x9540, 0xc7 => 0x809a, 0xc8 => 0x5ea6, 0xc9 => 0x6e21, 0xca => 0x5992, 0xcb => 0x7aef, 0xcc => 0x77ed, 0xcd => 0x953b, 0xce => 0x6bb5, 0xcf => 0x65ad, 0xd0 => 0x7f0e, 0xd1 => 0x5806, 0xd2 => 0x5151, 0xd3 => 0x961f, 0xd4 => 0x5bf9, 0xd5 => 0x58a9, 0xd6 => 0x5428, 0xd7 => 0x8e72, 0xd8 => 0x6566, 0xd9 => 0x987f, 0xda => 0x56e4, 0xdb => 0x949d, 0xdc => 0x76fe, 0xdd => 0x9041, 0xde => 0x6387, 0xdf => 0x54c6, 0xe0 => 0x591a, 0xe1 => 0x593a, 0xe2 => 0x579b, 0xe3 => 0x8eb2, 0xe4 => 0x6735, 0xe5 => 0x8dfa, 0xe6 => 0x8235, 0xe7 => 0x5241, 0xe8 => 0x60f0, 0xe9 => 0x5815, 0xea => 0x86fe, 0xeb => 0x5ce8, 0xec => 0x9e45, 0xed => 0x4fc4, 0xee => 0x989d, 0xef => 0x8bb9, 0xf0 => 0x5a25, 0xf1 => 0x6076, 0xf2 => 0x5384, 0xf3 => 0x627c, 0xf4 => 0x904f, 0xf5 => 0x9102, 0xf6 => 0x997f, 0xf7 => 0x6069, 0xf8 => 0x800c, 0xf9 => 0x513f, 0xfa => 0x8033, 0xfb => 0x5c14, 0xfc => 0x9975, 0xfd => 0x6d31, 0xfe => 0x4e8c, }, 0xb7 => { 0xa1 => 0x8d30, 0xa2 => 0x53d1, 0xa3 => 0x7f5a, 0xa4 => 0x7b4f, 0xa5 => 0x4f10, 0xa6 => 0x4e4f, 0xa7 => 0x9600, 0xa8 => 0x6cd5, 0xa9 => 0x73d0, 0xaa => 0x85e9, 0xab => 0x5e06, 0xac => 0x756a, 0xad => 0x7ffb, 0xae => 0x6a0a, 0xaf => 0x77fe, 0xb0 => 0x9492, 0xb1 => 0x7e41, 0xb2 => 0x51e1, 0xb3 => 0x70e6, 0xb4 => 0x53cd, 0xb5 => 0x8fd4, 0xb6 => 0x8303, 0xb7 => 0x8d29, 0xb8 => 0x72af, 0xb9 => 0x996d, 0xba => 0x6cdb, 0xbb => 0x574a, 0xbc => 0x82b3, 0xbd => 0x65b9, 0xbe => 0x80aa, 0xbf => 0x623f, 0xc0 => 0x9632, 0xc1 => 0x59a8, 0xc2 => 0x4eff, 0xc3 => 0x8bbf, 0xc4 => 0x7eba, 0xc5 => 0x653e, 0xc6 => 0x83f2, 0xc7 => 0x975e, 0xc8 => 0x5561, 0xc9 => 0x98de, 0xca => 0x80a5, 0xcb => 0x532a, 0xcc => 0x8bfd, 0xcd => 0x5420, 0xce => 0x80ba, 0xcf => 0x5e9f, 0xd0 => 0x6cb8, 0xd1 => 0x8d39, 0xd2 => 0x82ac, 0xd3 => 0x915a, 0xd4 => 0x5429, 0xd5 => 0x6c1b, 0xd6 => 0x5206, 0xd7 => 0x7eb7, 0xd8 => 0x575f, 0xd9 => 0x711a, 0xda => 0x6c7e, 0xdb => 0x7c89, 0xdc => 0x594b, 0xdd => 0x4efd, 0xde => 0x5fff, 0xdf => 0x6124, 0xe0 => 0x7caa, 0xe1 => 0x4e30, 0xe2 => 0x5c01, 0xe3 => 0x67ab, 0xe4 => 0x8702, 0xe5 => 0x5cf0, 0xe6 => 0x950b, 0xe7 => 0x98ce, 0xe8 => 0x75af, 0xe9 => 0x70fd, 0xea => 0x9022, 0xeb => 0x51af, 0xec => 0x7f1d, 0xed => 0x8bbd, 0xee => 0x5949, 0xef => 0x51e4, 0xf0 => 0x4f5b, 0xf1 => 0x5426, 0xf2 => 0x592b, 0xf3 => 0x6577, 0xf4 => 0x80a4, 0xf5 => 0x5b75, 0xf6 => 0x6276, 0xf7 => 0x62c2, 0xf8 => 0x8f90, 0xf9 => 0x5e45, 0xfa => 0x6c1f, 0xfb => 0x7b26, 0xfc => 0x4f0f, 0xfd => 0x4fd8, 0xfe => 0x670d, }, 0xb8 => { 0xa1 => 0x6d6e, 0xa2 => 0x6daa, 0xa3 => 0x798f, 0xa4 => 0x88b1, 0xa5 => 0x5f17, 0xa6 => 0x752b, 0xa7 => 0x629a, 0xa8 => 0x8f85, 0xa9 => 0x4fef, 0xaa => 0x91dc, 0xab => 0x65a7, 0xac => 0x812f, 0xad => 0x8151, 0xae => 0x5e9c, 0xaf => 0x8150, 0xb0 => 0x8d74, 0xb1 => 0x526f, 0xb2 => 0x8986, 0xb3 => 0x8d4b, 0xb4 => 0x590d, 0xb5 => 0x5085, 0xb6 => 0x4ed8, 0xb7 => 0x961c, 0xb8 => 0x7236, 0xb9 => 0x8179, 0xba => 0x8d1f, 0xbb => 0x5bcc, 0xbc => 0x8ba3, 0xbd => 0x9644, 0xbe => 0x5987, 0xbf => 0x7f1a, 0xc0 => 0x5490, 0xc1 => 0x5676, 0xc2 => 0x560e, 0xc3 => 0x8be5, 0xc4 => 0x6539, 0xc5 => 0x6982, 0xc6 => 0x9499, 0xc7 => 0x76d6, 0xc8 => 0x6e89, 0xc9 => 0x5e72, 0xca => 0x7518, 0xcb => 0x6746, 0xcc => 0x67d1, 0xcd => 0x7aff, 0xce => 0x809d, 0xcf => 0x8d76, 0xd0 => 0x611f, 0xd1 => 0x79c6, 0xd2 => 0x6562, 0xd3 => 0x8d63, 0xd4 => 0x5188, 0xd5 => 0x521a, 0xd6 => 0x94a2, 0xd7 => 0x7f38, 0xd8 => 0x809b, 0xd9 => 0x7eb2, 0xda => 0x5c97, 0xdb => 0x6e2f, 0xdc => 0x6760, 0xdd => 0x7bd9, 0xde => 0x768b, 0xdf => 0x9ad8, 0xe0 => 0x818f, 0xe1 => 0x7f94, 0xe2 => 0x7cd5, 0xe3 => 0x641e, 0xe4 => 0x9550, 0xe5 => 0x7a3f, 0xe6 => 0x544a, 0xe7 => 0x54e5, 0xe8 => 0x6b4c, 0xe9 => 0x6401, 0xea => 0x6208, 0xeb => 0x9e3d, 0xec => 0x80f3, 0xed => 0x7599, 0xee => 0x5272, 0xef => 0x9769, 0xf0 => 0x845b, 0xf1 => 0x683c, 0xf2 => 0x86e4, 0xf3 => 0x9601, 0xf4 => 0x9694, 0xf5 => 0x94ec, 0xf6 => 0x4e2a, 0xf7 => 0x5404, 0xf8 => 0x7ed9, 0xf9 => 0x6839, 0xfa => 0x8ddf, 0xfb => 0x8015, 0xfc => 0x66f4, 0xfd => 0x5e9a, 0xfe => 0x7fb9, }, 0xb9 => { 0xa1 => 0x57c2, 0xa2 => 0x803f, 0xa3 => 0x6897, 0xa4 => 0x5de5, 0xa5 => 0x653b, 0xa6 => 0x529f, 0xa7 => 0x606d, 0xa8 => 0x9f9a, 0xa9 => 0x4f9b, 0xaa => 0x8eac, 0xab => 0x516c, 0xac => 0x5bab, 0xad => 0x5f13, 0xae => 0x5de9, 0xaf => 0x6c5e, 0xb0 => 0x62f1, 0xb1 => 0x8d21, 0xb2 => 0x5171, 0xb3 => 0x94a9, 0xb4 => 0x52fe, 0xb5 => 0x6c9f, 0xb6 => 0x82df, 0xb7 => 0x72d7, 0xb8 => 0x57a2, 0xb9 => 0x6784, 0xba => 0x8d2d, 0xbb => 0x591f, 0xbc => 0x8f9c, 0xbd => 0x83c7, 0xbe => 0x5495, 0xbf => 0x7b8d, 0xc0 => 0x4f30, 0xc1 => 0x6cbd, 0xc2 => 0x5b64, 0xc3 => 0x59d1, 0xc4 => 0x9f13, 0xc5 => 0x53e4, 0xc6 => 0x86ca, 0xc7 => 0x9aa8, 0xc8 => 0x8c37, 0xc9 => 0x80a1, 0xca => 0x6545, 0xcb => 0x987e, 0xcc => 0x56fa, 0xcd => 0x96c7, 0xce => 0x522e, 0xcf => 0x74dc, 0xd0 => 0x5250, 0xd1 => 0x5be1, 0xd2 => 0x6302, 0xd3 => 0x8902, 0xd4 => 0x4e56, 0xd5 => 0x62d0, 0xd6 => 0x602a, 0xd7 => 0x68fa, 0xd8 => 0x5173, 0xd9 => 0x5b98, 0xda => 0x51a0, 0xdb => 0x89c2, 0xdc => 0x7ba1, 0xdd => 0x9986, 0xde => 0x7f50, 0xdf => 0x60ef, 0xe0 => 0x704c, 0xe1 => 0x8d2f, 0xe2 => 0x5149, 0xe3 => 0x5e7f, 0xe4 => 0x901b, 0xe5 => 0x7470, 0xe6 => 0x89c4, 0xe7 => 0x572d, 0xe8 => 0x7845, 0xe9 => 0x5f52, 0xea => 0x9f9f, 0xeb => 0x95fa, 0xec => 0x8f68, 0xed => 0x9b3c, 0xee => 0x8be1, 0xef => 0x7678, 0xf0 => 0x6842, 0xf1 => 0x67dc, 0xf2 => 0x8dea, 0xf3 => 0x8d35, 0xf4 => 0x523d, 0xf5 => 0x8f8a, 0xf6 => 0x6eda, 0xf7 => 0x68cd, 0xf8 => 0x9505, 0xf9 => 0x90ed, 0xfa => 0x56fd, 0xfb => 0x679c, 0xfc => 0x88f9, 0xfd => 0x8fc7, 0xfe => 0x54c8, }, 0xba => { 0xa1 => 0x9ab8, 0xa2 => 0x5b69, 0xa3 => 0x6d77, 0xa4 => 0x6c26, 0xa5 => 0x4ea5, 0xa6 => 0x5bb3, 0xa7 => 0x9a87, 0xa8 => 0x9163, 0xa9 => 0x61a8, 0xaa => 0x90af, 0xab => 0x97e9, 0xac => 0x542b, 0xad => 0x6db5, 0xae => 0x5bd2, 0xaf => 0x51fd, 0xb0 => 0x558a, 0xb1 => 0x7f55, 0xb2 => 0x7ff0, 0xb3 => 0x64bc, 0xb4 => 0x634d, 0xb5 => 0x65f1, 0xb6 => 0x61be, 0xb7 => 0x608d, 0xb8 => 0x710a, 0xb9 => 0x6c57, 0xba => 0x6c49, 0xbb => 0x592f, 0xbc => 0x676d, 0xbd => 0x822a, 0xbe => 0x58d5, 0xbf => 0x568e, 0xc0 => 0x8c6a, 0xc1 => 0x6beb, 0xc2 => 0x90dd, 0xc3 => 0x597d, 0xc4 => 0x8017, 0xc5 => 0x53f7, 0xc6 => 0x6d69, 0xc7 => 0x5475, 0xc8 => 0x559d, 0xc9 => 0x8377, 0xca => 0x83cf, 0xcb => 0x6838, 0xcc => 0x79be, 0xcd => 0x548c, 0xce => 0x4f55, 0xcf => 0x5408, 0xd0 => 0x76d2, 0xd1 => 0x8c89, 0xd2 => 0x9602, 0xd3 => 0x6cb3, 0xd4 => 0x6db8, 0xd5 => 0x8d6b, 0xd6 => 0x8910, 0xd7 => 0x9e64, 0xd8 => 0x8d3a, 0xd9 => 0x563f, 0xda => 0x9ed1, 0xdb => 0x75d5, 0xdc => 0x5f88, 0xdd => 0x72e0, 0xde => 0x6068, 0xdf => 0x54fc, 0xe0 => 0x4ea8, 0xe1 => 0x6a2a, 0xe2 => 0x8861, 0xe3 => 0x6052, 0xe4 => 0x8f70, 0xe5 => 0x54c4, 0xe6 => 0x70d8, 0xe7 => 0x8679, 0xe8 => 0x9e3f, 0xe9 => 0x6d2a, 0xea => 0x5b8f, 0xeb => 0x5f18, 0xec => 0x7ea2, 0xed => 0x5589, 0xee => 0x4faf, 0xef => 0x7334, 0xf0 => 0x543c, 0xf1 => 0x539a, 0xf2 => 0x5019, 0xf3 => 0x540e, 0xf4 => 0x547c, 0xf5 => 0x4e4e, 0xf6 => 0x5ffd, 0xf7 => 0x745a, 0xf8 => 0x58f6, 0xf9 => 0x846b, 0xfa => 0x80e1, 0xfb => 0x8774, 0xfc => 0x72d0, 0xfd => 0x7cca, 0xfe => 0x6e56, }, 0xbb => { 0xa1 => 0x5f27, 0xa2 => 0x864e, 0xa3 => 0x552c, 0xa4 => 0x62a4, 0xa5 => 0x4e92, 0xa6 => 0x6caa, 0xa7 => 0x6237, 0xa8 => 0x82b1, 0xa9 => 0x54d7, 0xaa => 0x534e, 0xab => 0x733e, 0xac => 0x6ed1, 0xad => 0x753b, 0xae => 0x5212, 0xaf => 0x5316, 0xb0 => 0x8bdd, 0xb1 => 0x69d0, 0xb2 => 0x5f8a, 0xb3 => 0x6000, 0xb4 => 0x6dee, 0xb5 => 0x574f, 0xb6 => 0x6b22, 0xb7 => 0x73af, 0xb8 => 0x6853, 0xb9 => 0x8fd8, 0xba => 0x7f13, 0xbb => 0x6362, 0xbc => 0x60a3, 0xbd => 0x5524, 0xbe => 0x75ea, 0xbf => 0x8c62, 0xc0 => 0x7115, 0xc1 => 0x6da3, 0xc2 => 0x5ba6, 0xc3 => 0x5e7b, 0xc4 => 0x8352, 0xc5 => 0x614c, 0xc6 => 0x9ec4, 0xc7 => 0x78fa, 0xc8 => 0x8757, 0xc9 => 0x7c27, 0xca => 0x7687, 0xcb => 0x51f0, 0xcc => 0x60f6, 0xcd => 0x714c, 0xce => 0x6643, 0xcf => 0x5e4c, 0xd0 => 0x604d, 0xd1 => 0x8c0e, 0xd2 => 0x7070, 0xd3 => 0x6325, 0xd4 => 0x8f89, 0xd5 => 0x5fbd, 0xd6 => 0x6062, 0xd7 => 0x86d4, 0xd8 => 0x56de, 0xd9 => 0x6bc1, 0xda => 0x6094, 0xdb => 0x6167, 0xdc => 0x5349, 0xdd => 0x60e0, 0xde => 0x6666, 0xdf => 0x8d3f, 0xe0 => 0x79fd, 0xe1 => 0x4f1a, 0xe2 => 0x70e9, 0xe3 => 0x6c47, 0xe4 => 0x8bb3, 0xe5 => 0x8bf2, 0xe6 => 0x7ed8, 0xe7 => 0x8364, 0xe8 => 0x660f, 0xe9 => 0x5a5a, 0xea => 0x9b42, 0xeb => 0x6d51, 0xec => 0x6df7, 0xed => 0x8c41, 0xee => 0x6d3b, 0xef => 0x4f19, 0xf0 => 0x706b, 0xf1 => 0x83b7, 0xf2 => 0x6216, 0xf3 => 0x60d1, 0xf4 => 0x970d, 0xf5 => 0x8d27, 0xf6 => 0x7978, 0xf7 => 0x51fb, 0xf8 => 0x573e, 0xf9 => 0x57fa, 0xfa => 0x673a, 0xfb => 0x7578, 0xfc => 0x7a3d, 0xfd => 0x79ef, 0xfe => 0x7b95, }, 0xbc => { 0xa1 => 0x808c, 0xa2 => 0x9965, 0xa3 => 0x8ff9, 0xa4 => 0x6fc0, 0xa5 => 0x8ba5, 0xa6 => 0x9e21, 0xa7 => 0x59ec, 0xa8 => 0x7ee9, 0xa9 => 0x7f09, 0xaa => 0x5409, 0xab => 0x6781, 0xac => 0x68d8, 0xad => 0x8f91, 0xae => 0x7c4d, 0xaf => 0x96c6, 0xb0 => 0x53ca, 0xb1 => 0x6025, 0xb2 => 0x75be, 0xb3 => 0x6c72, 0xb4 => 0x5373, 0xb5 => 0x5ac9, 0xb6 => 0x7ea7, 0xb7 => 0x6324, 0xb8 => 0x51e0, 0xb9 => 0x810a, 0xba => 0x5df1, 0xbb => 0x84df, 0xbc => 0x6280, 0xbd => 0x5180, 0xbe => 0x5b63, 0xbf => 0x4f0e, 0xc0 => 0x796d, 0xc1 => 0x5242, 0xc2 => 0x60b8, 0xc3 => 0x6d4e, 0xc4 => 0x5bc4, 0xc5 => 0x5bc2, 0xc6 => 0x8ba1, 0xc7 => 0x8bb0, 0xc8 => 0x65e2, 0xc9 => 0x5fcc, 0xca => 0x9645, 0xcb => 0x5993, 0xcc => 0x7ee7, 0xcd => 0x7eaa, 0xce => 0x5609, 0xcf => 0x67b7, 0xd0 => 0x5939, 0xd1 => 0x4f73, 0xd2 => 0x5bb6, 0xd3 => 0x52a0, 0xd4 => 0x835a, 0xd5 => 0x988a, 0xd6 => 0x8d3e, 0xd7 => 0x7532, 0xd8 => 0x94be, 0xd9 => 0x5047, 0xda => 0x7a3c, 0xdb => 0x4ef7, 0xdc => 0x67b6, 0xdd => 0x9a7e, 0xde => 0x5ac1, 0xdf => 0x6b7c, 0xe0 => 0x76d1, 0xe1 => 0x575a, 0xe2 => 0x5c16, 0xe3 => 0x7b3a, 0xe4 => 0x95f4, 0xe5 => 0x714e, 0xe6 => 0x517c, 0xe7 => 0x80a9, 0xe8 => 0x8270, 0xe9 => 0x5978, 0xea => 0x7f04, 0xeb => 0x8327, 0xec => 0x68c0, 0xed => 0x67ec, 0xee => 0x78b1, 0xef => 0x7877, 0xf0 => 0x62e3, 0xf1 => 0x6361, 0xf2 => 0x7b80, 0xf3 => 0x4fed, 0xf4 => 0x526a, 0xf5 => 0x51cf, 0xf6 => 0x8350, 0xf7 => 0x69db, 0xf8 => 0x9274, 0xf9 => 0x8df5, 0xfa => 0x8d31, 0xfb => 0x89c1, 0xfc => 0x952e, 0xfd => 0x7bad, 0xfe => 0x4ef6, }, 0xbd => { 0xa1 => 0x5065, 0xa2 => 0x8230, 0xa3 => 0x5251, 0xa4 => 0x996f, 0xa5 => 0x6e10, 0xa6 => 0x6e85, 0xa7 => 0x6da7, 0xa8 => 0x5efa, 0xa9 => 0x50f5, 0xaa => 0x59dc, 0xab => 0x5c06, 0xac => 0x6d46, 0xad => 0x6c5f, 0xae => 0x7586, 0xaf => 0x848b, 0xb0 => 0x6868, 0xb1 => 0x5956, 0xb2 => 0x8bb2, 0xb3 => 0x5320, 0xb4 => 0x9171, 0xb5 => 0x964d, 0xb6 => 0x8549, 0xb7 => 0x6912, 0xb8 => 0x7901, 0xb9 => 0x7126, 0xba => 0x80f6, 0xbb => 0x4ea4, 0xbc => 0x90ca, 0xbd => 0x6d47, 0xbe => 0x9a84, 0xbf => 0x5a07, 0xc0 => 0x56bc, 0xc1 => 0x6405, 0xc2 => 0x94f0, 0xc3 => 0x77eb, 0xc4 => 0x4fa5, 0xc5 => 0x811a, 0xc6 => 0x72e1, 0xc7 => 0x89d2, 0xc8 => 0x997a, 0xc9 => 0x7f34, 0xca => 0x7ede, 0xcb => 0x527f, 0xcc => 0x6559, 0xcd => 0x9175, 0xce => 0x8f7f, 0xcf => 0x8f83, 0xd0 => 0x53eb, 0xd1 => 0x7a96, 0xd2 => 0x63ed, 0xd3 => 0x63a5, 0xd4 => 0x7686, 0xd5 => 0x79f8, 0xd6 => 0x8857, 0xd7 => 0x9636, 0xd8 => 0x622a, 0xd9 => 0x52ab, 0xda => 0x8282, 0xdb => 0x6854, 0xdc => 0x6770, 0xdd => 0x6377, 0xde => 0x776b, 0xdf => 0x7aed, 0xe0 => 0x6d01, 0xe1 => 0x7ed3, 0xe2 => 0x89e3, 0xe3 => 0x59d0, 0xe4 => 0x6212, 0xe5 => 0x85c9, 0xe6 => 0x82a5, 0xe7 => 0x754c, 0xe8 => 0x501f, 0xe9 => 0x4ecb, 0xea => 0x75a5, 0xeb => 0x8beb, 0xec => 0x5c4a, 0xed => 0x5dfe, 0xee => 0x7b4b, 0xef => 0x65a4, 0xf0 => 0x91d1, 0xf1 => 0x4eca, 0xf2 => 0x6d25, 0xf3 => 0x895f, 0xf4 => 0x7d27, 0xf5 => 0x9526, 0xf6 => 0x4ec5, 0xf7 => 0x8c28, 0xf8 => 0x8fdb, 0xf9 => 0x9773, 0xfa => 0x664b, 0xfb => 0x7981, 0xfc => 0x8fd1, 0xfd => 0x70ec, 0xfe => 0x6d78, }, 0xbe => { 0xa1 => 0x5c3d, 0xa2 => 0x52b2, 0xa3 => 0x8346, 0xa4 => 0x5162, 0xa5 => 0x830e, 0xa6 => 0x775b, 0xa7 => 0x6676, 0xa8 => 0x9cb8, 0xa9 => 0x4eac, 0xaa => 0x60ca, 0xab => 0x7cbe, 0xac => 0x7cb3, 0xad => 0x7ecf, 0xae => 0x4e95, 0xaf => 0x8b66, 0xb0 => 0x666f, 0xb1 => 0x9888, 0xb2 => 0x9759, 0xb3 => 0x5883, 0xb4 => 0x656c, 0xb5 => 0x955c, 0xb6 => 0x5f84, 0xb7 => 0x75c9, 0xb8 => 0x9756, 0xb9 => 0x7adf, 0xba => 0x7ade, 0xbb => 0x51c0, 0xbc => 0x70af, 0xbd => 0x7a98, 0xbe => 0x63ea, 0xbf => 0x7a76, 0xc0 => 0x7ea0, 0xc1 => 0x7396, 0xc2 => 0x97ed, 0xc3 => 0x4e45, 0xc4 => 0x7078, 0xc5 => 0x4e5d, 0xc6 => 0x9152, 0xc7 => 0x53a9, 0xc8 => 0x6551, 0xc9 => 0x65e7, 0xca => 0x81fc, 0xcb => 0x8205, 0xcc => 0x548e, 0xcd => 0x5c31, 0xce => 0x759a, 0xcf => 0x97a0, 0xd0 => 0x62d8, 0xd1 => 0x72d9, 0xd2 => 0x75bd, 0xd3 => 0x5c45, 0xd4 => 0x9a79, 0xd5 => 0x83ca, 0xd6 => 0x5c40, 0xd7 => 0x5480, 0xd8 => 0x77e9, 0xd9 => 0x4e3e, 0xda => 0x6cae, 0xdb => 0x805a, 0xdc => 0x62d2, 0xdd => 0x636e, 0xde => 0x5de8, 0xdf => 0x5177, 0xe0 => 0x8ddd, 0xe1 => 0x8e1e, 0xe2 => 0x952f, 0xe3 => 0x4ff1, 0xe4 => 0x53e5, 0xe5 => 0x60e7, 0xe6 => 0x70ac, 0xe7 => 0x5267, 0xe8 => 0x6350, 0xe9 => 0x9e43, 0xea => 0x5a1f, 0xeb => 0x5026, 0xec => 0x7737, 0xed => 0x5377, 0xee => 0x7ee2, 0xef => 0x6485, 0xf0 => 0x652b, 0xf1 => 0x6289, 0xf2 => 0x6398, 0xf3 => 0x5014, 0xf4 => 0x7235, 0xf5 => 0x89c9, 0xf6 => 0x51b3, 0xf7 => 0x8bc0, 0xf8 => 0x7edd, 0xf9 => 0x5747, 0xfa => 0x83cc, 0xfb => 0x94a7, 0xfc => 0x519b, 0xfd => 0x541b, 0xfe => 0x5cfb, }, 0xbf => { 0xa1 => 0x4fca, 0xa2 => 0x7ae3, 0xa3 => 0x6d5a, 0xa4 => 0x90e1, 0xa5 => 0x9a8f, 0xa6 => 0x5580, 0xa7 => 0x5496, 0xa8 => 0x5361, 0xa9 => 0x54af, 0xaa => 0x5f00, 0xab => 0x63e9, 0xac => 0x6977, 0xad => 0x51ef, 0xae => 0x6168, 0xaf => 0x520a, 0xb0 => 0x582a, 0xb1 => 0x52d8, 0xb2 => 0x574e, 0xb3 => 0x780d, 0xb4 => 0x770b, 0xb5 => 0x5eb7, 0xb6 => 0x6177, 0xb7 => 0x7ce0, 0xb8 => 0x625b, 0xb9 => 0x6297, 0xba => 0x4ea2, 0xbb => 0x7095, 0xbc => 0x8003, 0xbd => 0x62f7, 0xbe => 0x70e4, 0xbf => 0x9760, 0xc0 => 0x5777, 0xc1 => 0x82db, 0xc2 => 0x67ef, 0xc3 => 0x68f5, 0xc4 => 0x78d5, 0xc5 => 0x9897, 0xc6 => 0x79d1, 0xc7 => 0x58f3, 0xc8 => 0x54b3, 0xc9 => 0x53ef, 0xca => 0x6e34, 0xcb => 0x514b, 0xcc => 0x523b, 0xcd => 0x5ba2, 0xce => 0x8bfe, 0xcf => 0x80af, 0xd0 => 0x5543, 0xd1 => 0x57a6, 0xd2 => 0x6073, 0xd3 => 0x5751, 0xd4 => 0x542d, 0xd5 => 0x7a7a, 0xd6 => 0x6050, 0xd7 => 0x5b54, 0xd8 => 0x63a7, 0xd9 => 0x62a0, 0xda => 0x53e3, 0xdb => 0x6263, 0xdc => 0x5bc7, 0xdd => 0x67af, 0xde => 0x54ed, 0xdf => 0x7a9f, 0xe0 => 0x82e6, 0xe1 => 0x9177, 0xe2 => 0x5e93, 0xe3 => 0x88e4, 0xe4 => 0x5938, 0xe5 => 0x57ae, 0xe6 => 0x630e, 0xe7 => 0x8de8, 0xe8 => 0x80ef, 0xe9 => 0x5757, 0xea => 0x7b77, 0xeb => 0x4fa9, 0xec => 0x5feb, 0xed => 0x5bbd, 0xee => 0x6b3e, 0xef => 0x5321, 0xf0 => 0x7b50, 0xf1 => 0x72c2, 0xf2 => 0x6846, 0xf3 => 0x77ff, 0xf4 => 0x7736, 0xf5 => 0x65f7, 0xf6 => 0x51b5, 0xf7 => 0x4e8f, 0xf8 => 0x76d4, 0xf9 => 0x5cbf, 0xfa => 0x7aa5, 0xfb => 0x8475, 0xfc => 0x594e, 0xfd => 0x9b41, 0xfe => 0x5080, }, 0xc0 => { 0xa1 => 0x9988, 0xa2 => 0x6127, 0xa3 => 0x6e83, 0xa4 => 0x5764, 0xa5 => 0x6606, 0xa6 => 0x6346, 0xa7 => 0x56f0, 0xa8 => 0x62ec, 0xa9 => 0x6269, 0xaa => 0x5ed3, 0xab => 0x9614, 0xac => 0x5783, 0xad => 0x62c9, 0xae => 0x5587, 0xaf => 0x8721, 0xb0 => 0x814a, 0xb1 => 0x8fa3, 0xb2 => 0x5566, 0xb3 => 0x83b1, 0xb4 => 0x6765, 0xb5 => 0x8d56, 0xb6 => 0x84dd, 0xb7 => 0x5a6a, 0xb8 => 0x680f, 0xb9 => 0x62e6, 0xba => 0x7bee, 0xbb => 0x9611, 0xbc => 0x5170, 0xbd => 0x6f9c, 0xbe => 0x8c30, 0xbf => 0x63fd, 0xc0 => 0x89c8, 0xc1 => 0x61d2, 0xc2 => 0x7f06, 0xc3 => 0x70c2, 0xc4 => 0x6ee5, 0xc5 => 0x7405, 0xc6 => 0x6994, 0xc7 => 0x72fc, 0xc8 => 0x5eca, 0xc9 => 0x90ce, 0xca => 0x6717, 0xcb => 0x6d6a, 0xcc => 0x635e, 0xcd => 0x52b3, 0xce => 0x7262, 0xcf => 0x8001, 0xd0 => 0x4f6c, 0xd1 => 0x59e5, 0xd2 => 0x916a, 0xd3 => 0x70d9, 0xd4 => 0x6d9d, 0xd5 => 0x52d2, 0xd6 => 0x4e50, 0xd7 => 0x96f7, 0xd8 => 0x956d, 0xd9 => 0x857e, 0xda => 0x78ca, 0xdb => 0x7d2f, 0xdc => 0x5121, 0xdd => 0x5792, 0xde => 0x64c2, 0xdf => 0x808b, 0xe0 => 0x7c7b, 0xe1 => 0x6cea, 0xe2 => 0x68f1, 0xe3 => 0x695e, 0xe4 => 0x51b7, 0xe5 => 0x5398, 0xe6 => 0x68a8, 0xe7 => 0x7281, 0xe8 => 0x9ece, 0xe9 => 0x7bf1, 0xea => 0x72f8, 0xeb => 0x79bb, 0xec => 0x6f13, 0xed => 0x7406, 0xee => 0x674e, 0xef => 0x91cc, 0xf0 => 0x9ca4, 0xf1 => 0x793c, 0xf2 => 0x8389, 0xf3 => 0x8354, 0xf4 => 0x540f, 0xf5 => 0x6817, 0xf6 => 0x4e3d, 0xf7 => 0x5389, 0xf8 => 0x52b1, 0xf9 => 0x783e, 0xfa => 0x5386, 0xfb => 0x5229, 0xfc => 0x5088, 0xfd => 0x4f8b, 0xfe => 0x4fd0, }, 0xc1 => { 0xa1 => 0x75e2, 0xa2 => 0x7acb, 0xa3 => 0x7c92, 0xa4 => 0x6ca5, 0xa5 => 0x96b6, 0xa6 => 0x529b, 0xa7 => 0x7483, 0xa8 => 0x54e9, 0xa9 => 0x4fe9, 0xaa => 0x8054, 0xab => 0x83b2, 0xac => 0x8fde, 0xad => 0x9570, 0xae => 0x5ec9, 0xaf => 0x601c, 0xb0 => 0x6d9f, 0xb1 => 0x5e18, 0xb2 => 0x655b, 0xb3 => 0x8138, 0xb4 => 0x94fe, 0xb5 => 0x604b, 0xb6 => 0x70bc, 0xb7 => 0x7ec3, 0xb8 => 0x7cae, 0xb9 => 0x51c9, 0xba => 0x6881, 0xbb => 0x7cb1, 0xbc => 0x826f, 0xbd => 0x4e24, 0xbe => 0x8f86, 0xbf => 0x91cf, 0xc0 => 0x667e, 0xc1 => 0x4eae, 0xc2 => 0x8c05, 0xc3 => 0x64a9, 0xc4 => 0x804a, 0xc5 => 0x50da, 0xc6 => 0x7597, 0xc7 => 0x71ce, 0xc8 => 0x5be5, 0xc9 => 0x8fbd, 0xca => 0x6f66, 0xcb => 0x4e86, 0xcc => 0x6482, 0xcd => 0x9563, 0xce => 0x5ed6, 0xcf => 0x6599, 0xd0 => 0x5217, 0xd1 => 0x88c2, 0xd2 => 0x70c8, 0xd3 => 0x52a3, 0xd4 => 0x730e, 0xd5 => 0x7433, 0xd6 => 0x6797, 0xd7 => 0x78f7, 0xd8 => 0x9716, 0xd9 => 0x4e34, 0xda => 0x90bb, 0xdb => 0x9cde, 0xdc => 0x6dcb, 0xdd => 0x51db, 0xde => 0x8d41, 0xdf => 0x541d, 0xe0 => 0x62ce, 0xe1 => 0x73b2, 0xe2 => 0x83f1, 0xe3 => 0x96f6, 0xe4 => 0x9f84, 0xe5 => 0x94c3, 0xe6 => 0x4f36, 0xe7 => 0x7f9a, 0xe8 => 0x51cc, 0xe9 => 0x7075, 0xea => 0x9675, 0xeb => 0x5cad, 0xec => 0x9886, 0xed => 0x53e6, 0xee => 0x4ee4, 0xef => 0x6e9c, 0xf0 => 0x7409, 0xf1 => 0x69b4, 0xf2 => 0x786b, 0xf3 => 0x998f, 0xf4 => 0x7559, 0xf5 => 0x5218, 0xf6 => 0x7624, 0xf7 => 0x6d41, 0xf8 => 0x67f3, 0xf9 => 0x516d, 0xfa => 0x9f99, 0xfb => 0x804b, 0xfc => 0x5499, 0xfd => 0x7b3c, 0xfe => 0x7abf, }, 0xc2 => { 0xa1 => 0x9686, 0xa2 => 0x5784, 0xa3 => 0x62e2, 0xa4 => 0x9647, 0xa5 => 0x697c, 0xa6 => 0x5a04, 0xa7 => 0x6402, 0xa8 => 0x7bd3, 0xa9 => 0x6f0f, 0xaa => 0x964b, 0xab => 0x82a6, 0xac => 0x5362, 0xad => 0x9885, 0xae => 0x5e90, 0xaf => 0x7089, 0xb0 => 0x63b3, 0xb1 => 0x5364, 0xb2 => 0x864f, 0xb3 => 0x9c81, 0xb4 => 0x9e93, 0xb5 => 0x788c, 0xb6 => 0x9732, 0xb7 => 0x8def, 0xb8 => 0x8d42, 0xb9 => 0x9e7f, 0xba => 0x6f5e, 0xbb => 0x7984, 0xbc => 0x5f55, 0xbd => 0x9646, 0xbe => 0x622e, 0xbf => 0x9a74, 0xc0 => 0x5415, 0xc1 => 0x94dd, 0xc2 => 0x4fa3, 0xc3 => 0x65c5, 0xc4 => 0x5c65, 0xc5 => 0x5c61, 0xc6 => 0x7f15, 0xc7 => 0x8651, 0xc8 => 0x6c2f, 0xc9 => 0x5f8b, 0xca => 0x7387, 0xcb => 0x6ee4, 0xcc => 0x7eff, 0xcd => 0x5ce6, 0xce => 0x631b, 0xcf => 0x5b6a, 0xd0 => 0x6ee6, 0xd1 => 0x5375, 0xd2 => 0x4e71, 0xd3 => 0x63a0, 0xd4 => 0x7565, 0xd5 => 0x62a1, 0xd6 => 0x8f6e, 0xd7 => 0x4f26, 0xd8 => 0x4ed1, 0xd9 => 0x6ca6, 0xda => 0x7eb6, 0xdb => 0x8bba, 0xdc => 0x841d, 0xdd => 0x87ba, 0xde => 0x7f57, 0xdf => 0x903b, 0xe0 => 0x9523, 0xe1 => 0x7ba9, 0xe2 => 0x9aa1, 0xe3 => 0x88f8, 0xe4 => 0x843d, 0xe5 => 0x6d1b, 0xe6 => 0x9a86, 0xe7 => 0x7edc, 0xe8 => 0x5988, 0xe9 => 0x9ebb, 0xea => 0x739b, 0xeb => 0x7801, 0xec => 0x8682, 0xed => 0x9a6c, 0xee => 0x9a82, 0xef => 0x561b, 0xf0 => 0x5417, 0xf1 => 0x57cb, 0xf2 => 0x4e70, 0xf3 => 0x9ea6, 0xf4 => 0x5356, 0xf5 => 0x8fc8, 0xf6 => 0x8109, 0xf7 => 0x7792, 0xf8 => 0x9992, 0xf9 => 0x86ee, 0xfa => 0x6ee1, 0xfb => 0x8513, 0xfc => 0x66fc, 0xfd => 0x6162, 0xfe => 0x6f2b, }, 0xc3 => { 0xa1 => 0x8c29, 0xa2 => 0x8292, 0xa3 => 0x832b, 0xa4 => 0x76f2, 0xa5 => 0x6c13, 0xa6 => 0x5fd9, 0xa7 => 0x83bd, 0xa8 => 0x732b, 0xa9 => 0x8305, 0xaa => 0x951a, 0xab => 0x6bdb, 0xac => 0x77db, 0xad => 0x94c6, 0xae => 0x536f, 0xaf => 0x8302, 0xb0 => 0x5192, 0xb1 => 0x5e3d, 0xb2 => 0x8c8c, 0xb3 => 0x8d38, 0xb4 => 0x4e48, 0xb5 => 0x73ab, 0xb6 => 0x679a, 0xb7 => 0x6885, 0xb8 => 0x9176, 0xb9 => 0x9709, 0xba => 0x7164, 0xbb => 0x6ca1, 0xbc => 0x7709, 0xbd => 0x5a92, 0xbe => 0x9541, 0xbf => 0x6bcf, 0xc0 => 0x7f8e, 0xc1 => 0x6627, 0xc2 => 0x5bd0, 0xc3 => 0x59b9, 0xc4 => 0x5a9a, 0xc5 => 0x95e8, 0xc6 => 0x95f7, 0xc7 => 0x4eec, 0xc8 => 0x840c, 0xc9 => 0x8499, 0xca => 0x6aac, 0xcb => 0x76df, 0xcc => 0x9530, 0xcd => 0x731b, 0xce => 0x68a6, 0xcf => 0x5b5f, 0xd0 => 0x772f, 0xd1 => 0x919a, 0xd2 => 0x9761, 0xd3 => 0x7cdc, 0xd4 => 0x8ff7, 0xd5 => 0x8c1c, 0xd6 => 0x5f25, 0xd7 => 0x7c73, 0xd8 => 0x79d8, 0xd9 => 0x89c5, 0xda => 0x6ccc, 0xdb => 0x871c, 0xdc => 0x5bc6, 0xdd => 0x5e42, 0xde => 0x68c9, 0xdf => 0x7720, 0xe0 => 0x7ef5, 0xe1 => 0x5195, 0xe2 => 0x514d, 0xe3 => 0x52c9, 0xe4 => 0x5a29, 0xe5 => 0x7f05, 0xe6 => 0x9762, 0xe7 => 0x82d7, 0xe8 => 0x63cf, 0xe9 => 0x7784, 0xea => 0x85d0, 0xeb => 0x79d2, 0xec => 0x6e3a, 0xed => 0x5e99, 0xee => 0x5999, 0xef => 0x8511, 0xf0 => 0x706d, 0xf1 => 0x6c11, 0xf2 => 0x62bf, 0xf3 => 0x76bf, 0xf4 => 0x654f, 0xf5 => 0x60af, 0xf6 => 0x95fd, 0xf7 => 0x660e, 0xf8 => 0x879f, 0xf9 => 0x9e23, 0xfa => 0x94ed, 0xfb => 0x540d, 0xfc => 0x547d, 0xfd => 0x8c2c, 0xfe => 0x6478, }, 0xc4 => { 0xa1 => 0x6479, 0xa2 => 0x8611, 0xa3 => 0x6a21, 0xa4 => 0x819c, 0xa5 => 0x78e8, 0xa6 => 0x6469, 0xa7 => 0x9b54, 0xa8 => 0x62b9, 0xa9 => 0x672b, 0xaa => 0x83ab, 0xab => 0x58a8, 0xac => 0x9ed8, 0xad => 0x6cab, 0xae => 0x6f20, 0xaf => 0x5bde, 0xb0 => 0x964c, 0xb1 => 0x8c0b, 0xb2 => 0x725f, 0xb3 => 0x67d0, 0xb4 => 0x62c7, 0xb5 => 0x7261, 0xb6 => 0x4ea9, 0xb7 => 0x59c6, 0xb8 => 0x6bcd, 0xb9 => 0x5893, 0xba => 0x66ae, 0xbb => 0x5e55, 0xbc => 0x52df, 0xbd => 0x6155, 0xbe => 0x6728, 0xbf => 0x76ee, 0xc0 => 0x7766, 0xc1 => 0x7267, 0xc2 => 0x7a46, 0xc3 => 0x62ff, 0xc4 => 0x54ea, 0xc5 => 0x5450, 0xc6 => 0x94a0, 0xc7 => 0x90a3, 0xc8 => 0x5a1c, 0xc9 => 0x7eb3, 0xca => 0x6c16, 0xcb => 0x4e43, 0xcc => 0x5976, 0xcd => 0x8010, 0xce => 0x5948, 0xcf => 0x5357, 0xd0 => 0x7537, 0xd1 => 0x96be, 0xd2 => 0x56ca, 0xd3 => 0x6320, 0xd4 => 0x8111, 0xd5 => 0x607c, 0xd6 => 0x95f9, 0xd7 => 0x6dd6, 0xd8 => 0x5462, 0xd9 => 0x9981, 0xda => 0x5185, 0xdb => 0x5ae9, 0xdc => 0x80fd, 0xdd => 0x59ae, 0xde => 0x9713, 0xdf => 0x502a, 0xe0 => 0x6ce5, 0xe1 => 0x5c3c, 0xe2 => 0x62df, 0xe3 => 0x4f60, 0xe4 => 0x533f, 0xe5 => 0x817b, 0xe6 => 0x9006, 0xe7 => 0x6eba, 0xe8 => 0x852b, 0xe9 => 0x62c8, 0xea => 0x5e74, 0xeb => 0x78be, 0xec => 0x64b5, 0xed => 0x637b, 0xee => 0x5ff5, 0xef => 0x5a18, 0xf0 => 0x917f, 0xf1 => 0x9e1f, 0xf2 => 0x5c3f, 0xf3 => 0x634f, 0xf4 => 0x8042, 0xf5 => 0x5b7d, 0xf6 => 0x556e, 0xf7 => 0x954a, 0xf8 => 0x954d, 0xf9 => 0x6d85, 0xfa => 0x60a8, 0xfb => 0x67e0, 0xfc => 0x72de, 0xfd => 0x51dd, 0xfe => 0x5b81, }, 0xc5 => { 0xa1 => 0x62e7, 0xa2 => 0x6cde, 0xa3 => 0x725b, 0xa4 => 0x626d, 0xa5 => 0x94ae, 0xa6 => 0x7ebd, 0xa7 => 0x8113, 0xa8 => 0x6d53, 0xa9 => 0x519c, 0xaa => 0x5f04, 0xab => 0x5974, 0xac => 0x52aa, 0xad => 0x6012, 0xae => 0x5973, 0xaf => 0x6696, 0xb0 => 0x8650, 0xb1 => 0x759f, 0xb2 => 0x632a, 0xb3 => 0x61e6, 0xb4 => 0x7cef, 0xb5 => 0x8bfa, 0xb6 => 0x54e6, 0xb7 => 0x6b27, 0xb8 => 0x9e25, 0xb9 => 0x6bb4, 0xba => 0x85d5, 0xbb => 0x5455, 0xbc => 0x5076, 0xbd => 0x6ca4, 0xbe => 0x556a, 0xbf => 0x8db4, 0xc0 => 0x722c, 0xc1 => 0x5e15, 0xc2 => 0x6015, 0xc3 => 0x7436, 0xc4 => 0x62cd, 0xc5 => 0x6392, 0xc6 => 0x724c, 0xc7 => 0x5f98, 0xc8 => 0x6e43, 0xc9 => 0x6d3e, 0xca => 0x6500, 0xcb => 0x6f58, 0xcc => 0x76d8, 0xcd => 0x78d0, 0xce => 0x76fc, 0xcf => 0x7554, 0xd0 => 0x5224, 0xd1 => 0x53db, 0xd2 => 0x4e53, 0xd3 => 0x5e9e, 0xd4 => 0x65c1, 0xd5 => 0x802a, 0xd6 => 0x80d6, 0xd7 => 0x629b, 0xd8 => 0x5486, 0xd9 => 0x5228, 0xda => 0x70ae, 0xdb => 0x888d, 0xdc => 0x8dd1, 0xdd => 0x6ce1, 0xde => 0x5478, 0xdf => 0x80da, 0xe0 => 0x57f9, 0xe1 => 0x88f4, 0xe2 => 0x8d54, 0xe3 => 0x966a, 0xe4 => 0x914d, 0xe5 => 0x4f69, 0xe6 => 0x6c9b, 0xe7 => 0x55b7, 0xe8 => 0x76c6, 0xe9 => 0x7830, 0xea => 0x62a8, 0xeb => 0x70f9, 0xec => 0x6f8e, 0xed => 0x5f6d, 0xee => 0x84ec, 0xef => 0x68da, 0xf0 => 0x787c, 0xf1 => 0x7bf7, 0xf2 => 0x81a8, 0xf3 => 0x670b, 0xf4 => 0x9e4f, 0xf5 => 0x6367, 0xf6 => 0x78b0, 0xf7 => 0x576f, 0xf8 => 0x7812, 0xf9 => 0x9739, 0xfa => 0x6279, 0xfb => 0x62ab, 0xfc => 0x5288, 0xfd => 0x7435, 0xfe => 0x6bd7, }, 0xc6 => { 0xa1 => 0x5564, 0xa2 => 0x813e, 0xa3 => 0x75b2, 0xa4 => 0x76ae, 0xa5 => 0x5339, 0xa6 => 0x75de, 0xa7 => 0x50fb, 0xa8 => 0x5c41, 0xa9 => 0x8b6c, 0xaa => 0x7bc7, 0xab => 0x504f, 0xac => 0x7247, 0xad => 0x9a97, 0xae => 0x98d8, 0xaf => 0x6f02, 0xb0 => 0x74e2, 0xb1 => 0x7968, 0xb2 => 0x6487, 0xb3 => 0x77a5, 0xb4 => 0x62fc, 0xb5 => 0x9891, 0xb6 => 0x8d2b, 0xb7 => 0x54c1, 0xb8 => 0x8058, 0xb9 => 0x4e52, 0xba => 0x576a, 0xbb => 0x82f9, 0xbc => 0x840d, 0xbd => 0x5e73, 0xbe => 0x51ed, 0xbf => 0x74f6, 0xc0 => 0x8bc4, 0xc1 => 0x5c4f, 0xc2 => 0x5761, 0xc3 => 0x6cfc, 0xc4 => 0x9887, 0xc5 => 0x5a46, 0xc6 => 0x7834, 0xc7 => 0x9b44, 0xc8 => 0x8feb, 0xc9 => 0x7c95, 0xca => 0x5256, 0xcb => 0x6251, 0xcc => 0x94fa, 0xcd => 0x4ec6, 0xce => 0x8386, 0xcf => 0x8461, 0xd0 => 0x83e9, 0xd1 => 0x84b2, 0xd2 => 0x57d4, 0xd3 => 0x6734, 0xd4 => 0x5703, 0xd5 => 0x666e, 0xd6 => 0x6d66, 0xd7 => 0x8c31, 0xd8 => 0x66dd, 0xd9 => 0x7011, 0xda => 0x671f, 0xdb => 0x6b3a, 0xdc => 0x6816, 0xdd => 0x621a, 0xde => 0x59bb, 0xdf => 0x4e03, 0xe0 => 0x51c4, 0xe1 => 0x6f06, 0xe2 => 0x67d2, 0xe3 => 0x6c8f, 0xe4 => 0x5176, 0xe5 => 0x68cb, 0xe6 => 0x5947, 0xe7 => 0x6b67, 0xe8 => 0x7566, 0xe9 => 0x5d0e, 0xea => 0x8110, 0xeb => 0x9f50, 0xec => 0x65d7, 0xed => 0x7948, 0xee => 0x7941, 0xef => 0x9a91, 0xf0 => 0x8d77, 0xf1 => 0x5c82, 0xf2 => 0x4e5e, 0xf3 => 0x4f01, 0xf4 => 0x542f, 0xf5 => 0x5951, 0xf6 => 0x780c, 0xf7 => 0x5668, 0xf8 => 0x6c14, 0xf9 => 0x8fc4, 0xfa => 0x5f03, 0xfb => 0x6c7d, 0xfc => 0x6ce3, 0xfd => 0x8bab, 0xfe => 0x6390, }, 0xc7 => { 0xa1 => 0x6070, 0xa2 => 0x6d3d, 0xa3 => 0x7275, 0xa4 => 0x6266, 0xa5 => 0x948e, 0xa6 => 0x94c5, 0xa7 => 0x5343, 0xa8 => 0x8fc1, 0xa9 => 0x7b7e, 0xaa => 0x4edf, 0xab => 0x8c26, 0xac => 0x4e7e, 0xad => 0x9ed4, 0xae => 0x94b1, 0xaf => 0x94b3, 0xb0 => 0x524d, 0xb1 => 0x6f5c, 0xb2 => 0x9063, 0xb3 => 0x6d45, 0xb4 => 0x8c34, 0xb5 => 0x5811, 0xb6 => 0x5d4c, 0xb7 => 0x6b20, 0xb8 => 0x6b49, 0xb9 => 0x67aa, 0xba => 0x545b, 0xbb => 0x8154, 0xbc => 0x7f8c, 0xbd => 0x5899, 0xbe => 0x8537, 0xbf => 0x5f3a, 0xc0 => 0x62a2, 0xc1 => 0x6a47, 0xc2 => 0x9539, 0xc3 => 0x6572, 0xc4 => 0x6084, 0xc5 => 0x6865, 0xc6 => 0x77a7, 0xc7 => 0x4e54, 0xc8 => 0x4fa8, 0xc9 => 0x5de7, 0xca => 0x9798, 0xcb => 0x64ac, 0xcc => 0x7fd8, 0xcd => 0x5ced, 0xce => 0x4fcf, 0xcf => 0x7a8d, 0xd0 => 0x5207, 0xd1 => 0x8304, 0xd2 => 0x4e14, 0xd3 => 0x602f, 0xd4 => 0x7a83, 0xd5 => 0x94a6, 0xd6 => 0x4fb5, 0xd7 => 0x4eb2, 0xd8 => 0x79e6, 0xd9 => 0x7434, 0xda => 0x52e4, 0xdb => 0x82b9, 0xdc => 0x64d2, 0xdd => 0x79bd, 0xde => 0x5bdd, 0xdf => 0x6c81, 0xe0 => 0x9752, 0xe1 => 0x8f7b, 0xe2 => 0x6c22, 0xe3 => 0x503e, 0xe4 => 0x537f, 0xe5 => 0x6e05, 0xe6 => 0x64ce, 0xe7 => 0x6674, 0xe8 => 0x6c30, 0xe9 => 0x60c5, 0xea => 0x9877, 0xeb => 0x8bf7, 0xec => 0x5e86, 0xed => 0x743c, 0xee => 0x7a77, 0xef => 0x79cb, 0xf0 => 0x4e18, 0xf1 => 0x90b1, 0xf2 => 0x7403, 0xf3 => 0x6c42, 0xf4 => 0x56da, 0xf5 => 0x914b, 0xf6 => 0x6cc5, 0xf7 => 0x8d8b, 0xf8 => 0x533a, 0xf9 => 0x86c6, 0xfa => 0x66f2, 0xfb => 0x8eaf, 0xfc => 0x5c48, 0xfd => 0x9a71, 0xfe => 0x6e20, }, 0xc8 => { 0xa1 => 0x53d6, 0xa2 => 0x5a36, 0xa3 => 0x9f8b, 0xa4 => 0x8da3, 0xa5 => 0x53bb, 0xa6 => 0x5708, 0xa7 => 0x98a7, 0xa8 => 0x6743, 0xa9 => 0x919b, 0xaa => 0x6cc9, 0xab => 0x5168, 0xac => 0x75ca, 0xad => 0x62f3, 0xae => 0x72ac, 0xaf => 0x5238, 0xb0 => 0x529d, 0xb1 => 0x7f3a, 0xb2 => 0x7094, 0xb3 => 0x7638, 0xb4 => 0x5374, 0xb5 => 0x9e4a, 0xb6 => 0x69b7, 0xb7 => 0x786e, 0xb8 => 0x96c0, 0xb9 => 0x88d9, 0xba => 0x7fa4, 0xbb => 0x7136, 0xbc => 0x71c3, 0xbd => 0x5189, 0xbe => 0x67d3, 0xbf => 0x74e4, 0xc0 => 0x58e4, 0xc1 => 0x6518, 0xc2 => 0x56b7, 0xc3 => 0x8ba9, 0xc4 => 0x9976, 0xc5 => 0x6270, 0xc6 => 0x7ed5, 0xc7 => 0x60f9, 0xc8 => 0x70ed, 0xc9 => 0x58ec, 0xca => 0x4ec1, 0xcb => 0x4eba, 0xcc => 0x5fcd, 0xcd => 0x97e7, 0xce => 0x4efb, 0xcf => 0x8ba4, 0xd0 => 0x5203, 0xd1 => 0x598a, 0xd2 => 0x7eab, 0xd3 => 0x6254, 0xd4 => 0x4ecd, 0xd5 => 0x65e5, 0xd6 => 0x620e, 0xd7 => 0x8338, 0xd8 => 0x84c9, 0xd9 => 0x8363, 0xda => 0x878d, 0xdb => 0x7194, 0xdc => 0x6eb6, 0xdd => 0x5bb9, 0xde => 0x7ed2, 0xdf => 0x5197, 0xe0 => 0x63c9, 0xe1 => 0x67d4, 0xe2 => 0x8089, 0xe3 => 0x8339, 0xe4 => 0x8815, 0xe5 => 0x5112, 0xe6 => 0x5b7a, 0xe7 => 0x5982, 0xe8 => 0x8fb1, 0xe9 => 0x4e73, 0xea => 0x6c5d, 0xeb => 0x5165, 0xec => 0x8925, 0xed => 0x8f6f, 0xee => 0x962e, 0xef => 0x854a, 0xf0 => 0x745e, 0xf1 => 0x9510, 0xf2 => 0x95f0, 0xf3 => 0x6da6, 0xf4 => 0x82e5, 0xf5 => 0x5f31, 0xf6 => 0x6492, 0xf7 => 0x6d12, 0xf8 => 0x8428, 0xf9 => 0x816e, 0xfa => 0x9cc3, 0xfb => 0x585e, 0xfc => 0x8d5b, 0xfd => 0x4e09, 0xfe => 0x53c1, }, 0xc9 => { 0xa1 => 0x4f1e, 0xa2 => 0x6563, 0xa3 => 0x6851, 0xa4 => 0x55d3, 0xa5 => 0x4e27, 0xa6 => 0x6414, 0xa7 => 0x9a9a, 0xa8 => 0x626b, 0xa9 => 0x5ac2, 0xaa => 0x745f, 0xab => 0x8272, 0xac => 0x6da9, 0xad => 0x68ee, 0xae => 0x50e7, 0xaf => 0x838e, 0xb0 => 0x7802, 0xb1 => 0x6740, 0xb2 => 0x5239, 0xb3 => 0x6c99, 0xb4 => 0x7eb1, 0xb5 => 0x50bb, 0xb6 => 0x5565, 0xb7 => 0x715e, 0xb8 => 0x7b5b, 0xb9 => 0x6652, 0xba => 0x73ca, 0xbb => 0x82eb, 0xbc => 0x6749, 0xbd => 0x5c71, 0xbe => 0x5220, 0xbf => 0x717d, 0xc0 => 0x886b, 0xc1 => 0x95ea, 0xc2 => 0x9655, 0xc3 => 0x64c5, 0xc4 => 0x8d61, 0xc5 => 0x81b3, 0xc6 => 0x5584, 0xc7 => 0x6c55, 0xc8 => 0x6247, 0xc9 => 0x7f2e, 0xca => 0x5892, 0xcb => 0x4f24, 0xcc => 0x5546, 0xcd => 0x8d4f, 0xce => 0x664c, 0xcf => 0x4e0a, 0xd0 => 0x5c1a, 0xd1 => 0x88f3, 0xd2 => 0x68a2, 0xd3 => 0x634e, 0xd4 => 0x7a0d, 0xd5 => 0x70e7, 0xd6 => 0x828d, 0xd7 => 0x52fa, 0xd8 => 0x97f6, 0xd9 => 0x5c11, 0xda => 0x54e8, 0xdb => 0x90b5, 0xdc => 0x7ecd, 0xdd => 0x5962, 0xde => 0x8d4a, 0xdf => 0x86c7, 0xe0 => 0x820c, 0xe1 => 0x820d, 0xe2 => 0x8d66, 0xe3 => 0x6444, 0xe4 => 0x5c04, 0xe5 => 0x6151, 0xe6 => 0x6d89, 0xe7 => 0x793e, 0xe8 => 0x8bbe, 0xe9 => 0x7837, 0xea => 0x7533, 0xeb => 0x547b, 0xec => 0x4f38, 0xed => 0x8eab, 0xee => 0x6df1, 0xef => 0x5a20, 0xf0 => 0x7ec5, 0xf1 => 0x795e, 0xf2 => 0x6c88, 0xf3 => 0x5ba1, 0xf4 => 0x5a76, 0xf5 => 0x751a, 0xf6 => 0x80be, 0xf7 => 0x614e, 0xf8 => 0x6e17, 0xf9 => 0x58f0, 0xfa => 0x751f, 0xfb => 0x7525, 0xfc => 0x7272, 0xfd => 0x5347, 0xfe => 0x7ef3, }, 0xca => { 0xa1 => 0x7701, 0xa2 => 0x76db, 0xa3 => 0x5269, 0xa4 => 0x80dc, 0xa5 => 0x5723, 0xa6 => 0x5e08, 0xa7 => 0x5931, 0xa8 => 0x72ee, 0xa9 => 0x65bd, 0xaa => 0x6e7f, 0xab => 0x8bd7, 0xac => 0x5c38, 0xad => 0x8671, 0xae => 0x5341, 0xaf => 0x77f3, 0xb0 => 0x62fe, 0xb1 => 0x65f6, 0xb2 => 0x4ec0, 0xb3 => 0x98df, 0xb4 => 0x8680, 0xb5 => 0x5b9e, 0xb6 => 0x8bc6, 0xb7 => 0x53f2, 0xb8 => 0x77e2, 0xb9 => 0x4f7f, 0xba => 0x5c4e, 0xbb => 0x9a76, 0xbc => 0x59cb, 0xbd => 0x5f0f, 0xbe => 0x793a, 0xbf => 0x58eb, 0xc0 => 0x4e16, 0xc1 => 0x67ff, 0xc2 => 0x4e8b, 0xc3 => 0x62ed, 0xc4 => 0x8a93, 0xc5 => 0x901d, 0xc6 => 0x52bf, 0xc7 => 0x662f, 0xc8 => 0x55dc, 0xc9 => 0x566c, 0xca => 0x9002, 0xcb => 0x4ed5, 0xcc => 0x4f8d, 0xcd => 0x91ca, 0xce => 0x9970, 0xcf => 0x6c0f, 0xd0 => 0x5e02, 0xd1 => 0x6043, 0xd2 => 0x5ba4, 0xd3 => 0x89c6, 0xd4 => 0x8bd5, 0xd5 => 0x6536, 0xd6 => 0x624b, 0xd7 => 0x9996, 0xd8 => 0x5b88, 0xd9 => 0x5bff, 0xda => 0x6388, 0xdb => 0x552e, 0xdc => 0x53d7, 0xdd => 0x7626, 0xde => 0x517d, 0xdf => 0x852c, 0xe0 => 0x67a2, 0xe1 => 0x68b3, 0xe2 => 0x6b8a, 0xe3 => 0x6292, 0xe4 => 0x8f93, 0xe5 => 0x53d4, 0xe6 => 0x8212, 0xe7 => 0x6dd1, 0xe8 => 0x758f, 0xe9 => 0x4e66, 0xea => 0x8d4e, 0xeb => 0x5b70, 0xec => 0x719f, 0xed => 0x85af, 0xee => 0x6691, 0xef => 0x66d9, 0xf0 => 0x7f72, 0xf1 => 0x8700, 0xf2 => 0x9ecd, 0xf3 => 0x9f20, 0xf4 => 0x5c5e, 0xf5 => 0x672f, 0xf6 => 0x8ff0, 0xf7 => 0x6811, 0xf8 => 0x675f, 0xf9 => 0x620d, 0xfa => 0x7ad6, 0xfb => 0x5885, 0xfc => 0x5eb6, 0xfd => 0x6570, 0xfe => 0x6f31, }, 0xcb => { 0xa1 => 0x6055, 0xa2 => 0x5237, 0xa3 => 0x800d, 0xa4 => 0x6454, 0xa5 => 0x8870, 0xa6 => 0x7529, 0xa7 => 0x5e05, 0xa8 => 0x6813, 0xa9 => 0x62f4, 0xaa => 0x971c, 0xab => 0x53cc, 0xac => 0x723d, 0xad => 0x8c01, 0xae => 0x6c34, 0xaf => 0x7761, 0xb0 => 0x7a0e, 0xb1 => 0x542e, 0xb2 => 0x77ac, 0xb3 => 0x987a, 0xb4 => 0x821c, 0xb5 => 0x8bf4, 0xb6 => 0x7855, 0xb7 => 0x6714, 0xb8 => 0x70c1, 0xb9 => 0x65af, 0xba => 0x6495, 0xbb => 0x5636, 0xbc => 0x601d, 0xbd => 0x79c1, 0xbe => 0x53f8, 0xbf => 0x4e1d, 0xc0 => 0x6b7b, 0xc1 => 0x8086, 0xc2 => 0x5bfa, 0xc3 => 0x55e3, 0xc4 => 0x56db, 0xc5 => 0x4f3a, 0xc6 => 0x4f3c, 0xc7 => 0x9972, 0xc8 => 0x5df3, 0xc9 => 0x677e, 0xca => 0x8038, 0xcb => 0x6002, 0xcc => 0x9882, 0xcd => 0x9001, 0xce => 0x5b8b, 0xcf => 0x8bbc, 0xd0 => 0x8bf5, 0xd1 => 0x641c, 0xd2 => 0x8258, 0xd3 => 0x64de, 0xd4 => 0x55fd, 0xd5 => 0x82cf, 0xd6 => 0x9165, 0xd7 => 0x4fd7, 0xd8 => 0x7d20, 0xd9 => 0x901f, 0xda => 0x7c9f, 0xdb => 0x50f3, 0xdc => 0x5851, 0xdd => 0x6eaf, 0xde => 0x5bbf, 0xdf => 0x8bc9, 0xe0 => 0x8083, 0xe1 => 0x9178, 0xe2 => 0x849c, 0xe3 => 0x7b97, 0xe4 => 0x867d, 0xe5 => 0x968b, 0xe6 => 0x968f, 0xe7 => 0x7ee5, 0xe8 => 0x9ad3, 0xe9 => 0x788e, 0xea => 0x5c81, 0xeb => 0x7a57, 0xec => 0x9042, 0xed => 0x96a7, 0xee => 0x795f, 0xef => 0x5b59, 0xf0 => 0x635f, 0xf1 => 0x7b0b, 0xf2 => 0x84d1, 0xf3 => 0x68ad, 0xf4 => 0x5506, 0xf5 => 0x7f29, 0xf6 => 0x7410, 0xf7 => 0x7d22, 0xf8 => 0x9501, 0xf9 => 0x6240, 0xfa => 0x584c, 0xfb => 0x4ed6, 0xfc => 0x5b83, 0xfd => 0x5979, 0xfe => 0x5854, }, 0xcc => { 0xa1 => 0x736d, 0xa2 => 0x631e, 0xa3 => 0x8e4b, 0xa4 => 0x8e0f, 0xa5 => 0x80ce, 0xa6 => 0x82d4, 0xa7 => 0x62ac, 0xa8 => 0x53f0, 0xa9 => 0x6cf0, 0xaa => 0x915e, 0xab => 0x592a, 0xac => 0x6001, 0xad => 0x6c70, 0xae => 0x574d, 0xaf => 0x644a, 0xb0 => 0x8d2a, 0xb1 => 0x762b, 0xb2 => 0x6ee9, 0xb3 => 0x575b, 0xb4 => 0x6a80, 0xb5 => 0x75f0, 0xb6 => 0x6f6d, 0xb7 => 0x8c2d, 0xb8 => 0x8c08, 0xb9 => 0x5766, 0xba => 0x6bef, 0xbb => 0x8892, 0xbc => 0x78b3, 0xbd => 0x63a2, 0xbe => 0x53f9, 0xbf => 0x70ad, 0xc0 => 0x6c64, 0xc1 => 0x5858, 0xc2 => 0x642a, 0xc3 => 0x5802, 0xc4 => 0x68e0, 0xc5 => 0x819b, 0xc6 => 0x5510, 0xc7 => 0x7cd6, 0xc8 => 0x5018, 0xc9 => 0x8eba, 0xca => 0x6dcc, 0xcb => 0x8d9f, 0xcc => 0x70eb, 0xcd => 0x638f, 0xce => 0x6d9b, 0xcf => 0x6ed4, 0xd0 => 0x7ee6, 0xd1 => 0x8404, 0xd2 => 0x6843, 0xd3 => 0x9003, 0xd4 => 0x6dd8, 0xd5 => 0x9676, 0xd6 => 0x8ba8, 0xd7 => 0x5957, 0xd8 => 0x7279, 0xd9 => 0x85e4, 0xda => 0x817e, 0xdb => 0x75bc, 0xdc => 0x8a8a, 0xdd => 0x68af, 0xde => 0x5254, 0xdf => 0x8e22, 0xe0 => 0x9511, 0xe1 => 0x63d0, 0xe2 => 0x9898, 0xe3 => 0x8e44, 0xe4 => 0x557c, 0xe5 => 0x4f53, 0xe6 => 0x66ff, 0xe7 => 0x568f, 0xe8 => 0x60d5, 0xe9 => 0x6d95, 0xea => 0x5243, 0xeb => 0x5c49, 0xec => 0x5929, 0xed => 0x6dfb, 0xee => 0x586b, 0xef => 0x7530, 0xf0 => 0x751c, 0xf1 => 0x606c, 0xf2 => 0x8214, 0xf3 => 0x8146, 0xf4 => 0x6311, 0xf5 => 0x6761, 0xf6 => 0x8fe2, 0xf7 => 0x773a, 0xf8 => 0x8df3, 0xf9 => 0x8d34, 0xfa => 0x94c1, 0xfb => 0x5e16, 0xfc => 0x5385, 0xfd => 0x542c, 0xfe => 0x70c3, }, 0xcd => { 0xa1 => 0x6c40, 0xa2 => 0x5ef7, 0xa3 => 0x505c, 0xa4 => 0x4ead, 0xa5 => 0x5ead, 0xa6 => 0x633a, 0xa7 => 0x8247, 0xa8 => 0x901a, 0xa9 => 0x6850, 0xaa => 0x916e, 0xab => 0x77b3, 0xac => 0x540c, 0xad => 0x94dc, 0xae => 0x5f64, 0xaf => 0x7ae5, 0xb0 => 0x6876, 0xb1 => 0x6345, 0xb2 => 0x7b52, 0xb3 => 0x7edf, 0xb4 => 0x75db, 0xb5 => 0x5077, 0xb6 => 0x6295, 0xb7 => 0x5934, 0xb8 => 0x900f, 0xb9 => 0x51f8, 0xba => 0x79c3, 0xbb => 0x7a81, 0xbc => 0x56fe, 0xbd => 0x5f92, 0xbe => 0x9014, 0xbf => 0x6d82, 0xc0 => 0x5c60, 0xc1 => 0x571f, 0xc2 => 0x5410, 0xc3 => 0x5154, 0xc4 => 0x6e4d, 0xc5 => 0x56e2, 0xc6 => 0x63a8, 0xc7 => 0x9893, 0xc8 => 0x817f, 0xc9 => 0x8715, 0xca => 0x892a, 0xcb => 0x9000, 0xcc => 0x541e, 0xcd => 0x5c6f, 0xce => 0x81c0, 0xcf => 0x62d6, 0xd0 => 0x6258, 0xd1 => 0x8131, 0xd2 => 0x9e35, 0xd3 => 0x9640, 0xd4 => 0x9a6e, 0xd5 => 0x9a7c, 0xd6 => 0x692d, 0xd7 => 0x59a5, 0xd8 => 0x62d3, 0xd9 => 0x553e, 0xda => 0x6316, 0xdb => 0x54c7, 0xdc => 0x86d9, 0xdd => 0x6d3c, 0xde => 0x5a03, 0xdf => 0x74e6, 0xe0 => 0x889c, 0xe1 => 0x6b6a, 0xe2 => 0x5916, 0xe3 => 0x8c4c, 0xe4 => 0x5f2f, 0xe5 => 0x6e7e, 0xe6 => 0x73a9, 0xe7 => 0x987d, 0xe8 => 0x4e38, 0xe9 => 0x70f7, 0xea => 0x5b8c, 0xeb => 0x7897, 0xec => 0x633d, 0xed => 0x665a, 0xee => 0x7696, 0xef => 0x60cb, 0xf0 => 0x5b9b, 0xf1 => 0x5a49, 0xf2 => 0x4e07, 0xf3 => 0x8155, 0xf4 => 0x6c6a, 0xf5 => 0x738b, 0xf6 => 0x4ea1, 0xf7 => 0x6789, 0xf8 => 0x7f51, 0xf9 => 0x5f80, 0xfa => 0x65fa, 0xfb => 0x671b, 0xfc => 0x5fd8, 0xfd => 0x5984, 0xfe => 0x5a01, }, 0xce => { 0xa1 => 0x5dcd, 0xa2 => 0x5fae, 0xa3 => 0x5371, 0xa4 => 0x97e6, 0xa5 => 0x8fdd, 0xa6 => 0x6845, 0xa7 => 0x56f4, 0xa8 => 0x552f, 0xa9 => 0x60df, 0xaa => 0x4e3a, 0xab => 0x6f4d, 0xac => 0x7ef4, 0xad => 0x82c7, 0xae => 0x840e, 0xaf => 0x59d4, 0xb0 => 0x4f1f, 0xb1 => 0x4f2a, 0xb2 => 0x5c3e, 0xb3 => 0x7eac, 0xb4 => 0x672a, 0xb5 => 0x851a, 0xb6 => 0x5473, 0xb7 => 0x754f, 0xb8 => 0x80c3, 0xb9 => 0x5582, 0xba => 0x9b4f, 0xbb => 0x4f4d, 0xbc => 0x6e2d, 0xbd => 0x8c13, 0xbe => 0x5c09, 0xbf => 0x6170, 0xc0 => 0x536b, 0xc1 => 0x761f, 0xc2 => 0x6e29, 0xc3 => 0x868a, 0xc4 => 0x6587, 0xc5 => 0x95fb, 0xc6 => 0x7eb9, 0xc7 => 0x543b, 0xc8 => 0x7a33, 0xc9 => 0x7d0a, 0xca => 0x95ee, 0xcb => 0x55e1, 0xcc => 0x7fc1, 0xcd => 0x74ee, 0xce => 0x631d, 0xcf => 0x8717, 0xd0 => 0x6da1, 0xd1 => 0x7a9d, 0xd2 => 0x6211, 0xd3 => 0x65a1, 0xd4 => 0x5367, 0xd5 => 0x63e1, 0xd6 => 0x6c83, 0xd7 => 0x5deb, 0xd8 => 0x545c, 0xd9 => 0x94a8, 0xda => 0x4e4c, 0xdb => 0x6c61, 0xdc => 0x8bec, 0xdd => 0x5c4b, 0xde => 0x65e0, 0xdf => 0x829c, 0xe0 => 0x68a7, 0xe1 => 0x543e, 0xe2 => 0x5434, 0xe3 => 0x6bcb, 0xe4 => 0x6b66, 0xe5 => 0x4e94, 0xe6 => 0x6342, 0xe7 => 0x5348, 0xe8 => 0x821e, 0xe9 => 0x4f0d, 0xea => 0x4fae, 0xeb => 0x575e, 0xec => 0x620a, 0xed => 0x96fe, 0xee => 0x6664, 0xef => 0x7269, 0xf0 => 0x52ff, 0xf1 => 0x52a1, 0xf2 => 0x609f, 0xf3 => 0x8bef, 0xf4 => 0x6614, 0xf5 => 0x7199, 0xf6 => 0x6790, 0xf7 => 0x897f, 0xf8 => 0x7852, 0xf9 => 0x77fd, 0xfa => 0x6670, 0xfb => 0x563b, 0xfc => 0x5438, 0xfd => 0x9521, 0xfe => 0x727a, }, 0xcf => { 0xa1 => 0x7a00, 0xa2 => 0x606f, 0xa3 => 0x5e0c, 0xa4 => 0x6089, 0xa5 => 0x819d, 0xa6 => 0x5915, 0xa7 => 0x60dc, 0xa8 => 0x7184, 0xa9 => 0x70ef, 0xaa => 0x6eaa, 0xab => 0x6c50, 0xac => 0x7280, 0xad => 0x6a84, 0xae => 0x88ad, 0xaf => 0x5e2d, 0xb0 => 0x4e60, 0xb1 => 0x5ab3, 0xb2 => 0x559c, 0xb3 => 0x94e3, 0xb4 => 0x6d17, 0xb5 => 0x7cfb, 0xb6 => 0x9699, 0xb7 => 0x620f, 0xb8 => 0x7ec6, 0xb9 => 0x778e, 0xba => 0x867e, 0xbb => 0x5323, 0xbc => 0x971e, 0xbd => 0x8f96, 0xbe => 0x6687, 0xbf => 0x5ce1, 0xc0 => 0x4fa0, 0xc1 => 0x72ed, 0xc2 => 0x4e0b, 0xc3 => 0x53a6, 0xc4 => 0x590f, 0xc5 => 0x5413, 0xc6 => 0x6380, 0xc7 => 0x9528, 0xc8 => 0x5148, 0xc9 => 0x4ed9, 0xca => 0x9c9c, 0xcb => 0x7ea4, 0xcc => 0x54b8, 0xcd => 0x8d24, 0xce => 0x8854, 0xcf => 0x8237, 0xd0 => 0x95f2, 0xd1 => 0x6d8e, 0xd2 => 0x5f26, 0xd3 => 0x5acc, 0xd4 => 0x663e, 0xd5 => 0x9669, 0xd6 => 0x73b0, 0xd7 => 0x732e, 0xd8 => 0x53bf, 0xd9 => 0x817a, 0xda => 0x9985, 0xdb => 0x7fa1, 0xdc => 0x5baa, 0xdd => 0x9677, 0xde => 0x9650, 0xdf => 0x7ebf, 0xe0 => 0x76f8, 0xe1 => 0x53a2, 0xe2 => 0x9576, 0xe3 => 0x9999, 0xe4 => 0x7bb1, 0xe5 => 0x8944, 0xe6 => 0x6e58, 0xe7 => 0x4e61, 0xe8 => 0x7fd4, 0xe9 => 0x7965, 0xea => 0x8be6, 0xeb => 0x60f3, 0xec => 0x54cd, 0xed => 0x4eab, 0xee => 0x9879, 0xef => 0x5df7, 0xf0 => 0x6a61, 0xf1 => 0x50cf, 0xf2 => 0x5411, 0xf3 => 0x8c61, 0xf4 => 0x8427, 0xf5 => 0x785d, 0xf6 => 0x9704, 0xf7 => 0x524a, 0xf8 => 0x54ee, 0xf9 => 0x56a3, 0xfa => 0x9500, 0xfb => 0x6d88, 0xfc => 0x5bb5, 0xfd => 0x6dc6, 0xfe => 0x6653, }, 0xd0 => { 0xa1 => 0x5c0f, 0xa2 => 0x5b5d, 0xa3 => 0x6821, 0xa4 => 0x8096, 0xa5 => 0x5578, 0xa6 => 0x7b11, 0xa7 => 0x6548, 0xa8 => 0x6954, 0xa9 => 0x4e9b, 0xaa => 0x6b47, 0xab => 0x874e, 0xac => 0x978b, 0xad => 0x534f, 0xae => 0x631f, 0xaf => 0x643a, 0xb0 => 0x90aa, 0xb1 => 0x659c, 0xb2 => 0x80c1, 0xb3 => 0x8c10, 0xb4 => 0x5199, 0xb5 => 0x68b0, 0xb6 => 0x5378, 0xb7 => 0x87f9, 0xb8 => 0x61c8, 0xb9 => 0x6cc4, 0xba => 0x6cfb, 0xbb => 0x8c22, 0xbc => 0x5c51, 0xbd => 0x85aa, 0xbe => 0x82af, 0xbf => 0x950c, 0xc0 => 0x6b23, 0xc1 => 0x8f9b, 0xc2 => 0x65b0, 0xc3 => 0x5ffb, 0xc4 => 0x5fc3, 0xc5 => 0x4fe1, 0xc6 => 0x8845, 0xc7 => 0x661f, 0xc8 => 0x8165, 0xc9 => 0x7329, 0xca => 0x60fa, 0xcb => 0x5174, 0xcc => 0x5211, 0xcd => 0x578b, 0xce => 0x5f62, 0xcf => 0x90a2, 0xd0 => 0x884c, 0xd1 => 0x9192, 0xd2 => 0x5e78, 0xd3 => 0x674f, 0xd4 => 0x6027, 0xd5 => 0x59d3, 0xd6 => 0x5144, 0xd7 => 0x51f6, 0xd8 => 0x80f8, 0xd9 => 0x5308, 0xda => 0x6c79, 0xdb => 0x96c4, 0xdc => 0x718a, 0xdd => 0x4f11, 0xde => 0x4fee, 0xdf => 0x7f9e, 0xe0 => 0x673d, 0xe1 => 0x55c5, 0xe2 => 0x9508, 0xe3 => 0x79c0, 0xe4 => 0x8896, 0xe5 => 0x7ee3, 0xe6 => 0x589f, 0xe7 => 0x620c, 0xe8 => 0x9700, 0xe9 => 0x865a, 0xea => 0x5618, 0xeb => 0x987b, 0xec => 0x5f90, 0xed => 0x8bb8, 0xee => 0x84c4, 0xef => 0x9157, 0xf0 => 0x53d9, 0xf1 => 0x65ed, 0xf2 => 0x5e8f, 0xf3 => 0x755c, 0xf4 => 0x6064, 0xf5 => 0x7d6e, 0xf6 => 0x5a7f, 0xf7 => 0x7eea, 0xf8 => 0x7eed, 0xf9 => 0x8f69, 0xfa => 0x55a7, 0xfb => 0x5ba3, 0xfc => 0x60ac, 0xfd => 0x65cb, 0xfe => 0x7384, }, 0xd1 => { 0xa1 => 0x9009, 0xa2 => 0x7663, 0xa3 => 0x7729, 0xa4 => 0x7eda, 0xa5 => 0x9774, 0xa6 => 0x859b, 0xa7 => 0x5b66, 0xa8 => 0x7a74, 0xa9 => 0x96ea, 0xaa => 0x8840, 0xab => 0x52cb, 0xac => 0x718f, 0xad => 0x5faa, 0xae => 0x65ec, 0xaf => 0x8be2, 0xb0 => 0x5bfb, 0xb1 => 0x9a6f, 0xb2 => 0x5de1, 0xb3 => 0x6b89, 0xb4 => 0x6c5b, 0xb5 => 0x8bad, 0xb6 => 0x8baf, 0xb7 => 0x900a, 0xb8 => 0x8fc5, 0xb9 => 0x538b, 0xba => 0x62bc, 0xbb => 0x9e26, 0xbc => 0x9e2d, 0xbd => 0x5440, 0xbe => 0x4e2b, 0xbf => 0x82bd, 0xc0 => 0x7259, 0xc1 => 0x869c, 0xc2 => 0x5d16, 0xc3 => 0x8859, 0xc4 => 0x6daf, 0xc5 => 0x96c5, 0xc6 => 0x54d1, 0xc7 => 0x4e9a, 0xc8 => 0x8bb6, 0xc9 => 0x7109, 0xca => 0x54bd, 0xcb => 0x9609, 0xcc => 0x70df, 0xcd => 0x6df9, 0xce => 0x76d0, 0xcf => 0x4e25, 0xd0 => 0x7814, 0xd1 => 0x8712, 0xd2 => 0x5ca9, 0xd3 => 0x5ef6, 0xd4 => 0x8a00, 0xd5 => 0x989c, 0xd6 => 0x960e, 0xd7 => 0x708e, 0xd8 => 0x6cbf, 0xd9 => 0x5944, 0xda => 0x63a9, 0xdb => 0x773c, 0xdc => 0x884d, 0xdd => 0x6f14, 0xde => 0x8273, 0xdf => 0x5830, 0xe0 => 0x71d5, 0xe1 => 0x538c, 0xe2 => 0x781a, 0xe3 => 0x96c1, 0xe4 => 0x5501, 0xe5 => 0x5f66, 0xe6 => 0x7130, 0xe7 => 0x5bb4, 0xe8 => 0x8c1a, 0xe9 => 0x9a8c, 0xea => 0x6b83, 0xeb => 0x592e, 0xec => 0x9e2f, 0xed => 0x79e7, 0xee => 0x6768, 0xef => 0x626c, 0xf0 => 0x4f6f, 0xf1 => 0x75a1, 0xf2 => 0x7f8a, 0xf3 => 0x6d0b, 0xf4 => 0x9633, 0xf5 => 0x6c27, 0xf6 => 0x4ef0, 0xf7 => 0x75d2, 0xf8 => 0x517b, 0xf9 => 0x6837, 0xfa => 0x6f3e, 0xfb => 0x9080, 0xfc => 0x8170, 0xfd => 0x5996, 0xfe => 0x7476, }, 0xd2 => { 0xa1 => 0x6447, 0xa2 => 0x5c27, 0xa3 => 0x9065, 0xa4 => 0x7a91, 0xa5 => 0x8c23, 0xa6 => 0x59da, 0xa7 => 0x54ac, 0xa8 => 0x8200, 0xa9 => 0x836f, 0xaa => 0x8981, 0xab => 0x8000, 0xac => 0x6930, 0xad => 0x564e, 0xae => 0x8036, 0xaf => 0x7237, 0xb0 => 0x91ce, 0xb1 => 0x51b6, 0xb2 => 0x4e5f, 0xb3 => 0x9875, 0xb4 => 0x6396, 0xb5 => 0x4e1a, 0xb6 => 0x53f6, 0xb7 => 0x66f3, 0xb8 => 0x814b, 0xb9 => 0x591c, 0xba => 0x6db2, 0xbb => 0x4e00, 0xbc => 0x58f9, 0xbd => 0x533b, 0xbe => 0x63d6, 0xbf => 0x94f1, 0xc0 => 0x4f9d, 0xc1 => 0x4f0a, 0xc2 => 0x8863, 0xc3 => 0x9890, 0xc4 => 0x5937, 0xc5 => 0x9057, 0xc6 => 0x79fb, 0xc7 => 0x4eea, 0xc8 => 0x80f0, 0xc9 => 0x7591, 0xca => 0x6c82, 0xcb => 0x5b9c, 0xcc => 0x59e8, 0xcd => 0x5f5d, 0xce => 0x6905, 0xcf => 0x8681, 0xd0 => 0x501a, 0xd1 => 0x5df2, 0xd2 => 0x4e59, 0xd3 => 0x77e3, 0xd4 => 0x4ee5, 0xd5 => 0x827a, 0xd6 => 0x6291, 0xd7 => 0x6613, 0xd8 => 0x9091, 0xd9 => 0x5c79, 0xda => 0x4ebf, 0xdb => 0x5f79, 0xdc => 0x81c6, 0xdd => 0x9038, 0xde => 0x8084, 0xdf => 0x75ab, 0xe0 => 0x4ea6, 0xe1 => 0x88d4, 0xe2 => 0x610f, 0xe3 => 0x6bc5, 0xe4 => 0x5fc6, 0xe5 => 0x4e49, 0xe6 => 0x76ca, 0xe7 => 0x6ea2, 0xe8 => 0x8be3, 0xe9 => 0x8bae, 0xea => 0x8c0a, 0xeb => 0x8bd1, 0xec => 0x5f02, 0xed => 0x7ffc, 0xee => 0x7fcc, 0xef => 0x7ece, 0xf0 => 0x8335, 0xf1 => 0x836b, 0xf2 => 0x56e0, 0xf3 => 0x6bb7, 0xf4 => 0x97f3, 0xf5 => 0x9634, 0xf6 => 0x59fb, 0xf7 => 0x541f, 0xf8 => 0x94f6, 0xf9 => 0x6deb, 0xfa => 0x5bc5, 0xfb => 0x996e, 0xfc => 0x5c39, 0xfd => 0x5f15, 0xfe => 0x9690, }, 0xd3 => { 0xa1 => 0x5370, 0xa2 => 0x82f1, 0xa3 => 0x6a31, 0xa4 => 0x5a74, 0xa5 => 0x9e70, 0xa6 => 0x5e94, 0xa7 => 0x7f28, 0xa8 => 0x83b9, 0xa9 => 0x8424, 0xaa => 0x8425, 0xab => 0x8367, 0xac => 0x8747, 0xad => 0x8fce, 0xae => 0x8d62, 0xaf => 0x76c8, 0xb0 => 0x5f71, 0xb1 => 0x9896, 0xb2 => 0x786c, 0xb3 => 0x6620, 0xb4 => 0x54df, 0xb5 => 0x62e5, 0xb6 => 0x4f63, 0xb7 => 0x81c3, 0xb8 => 0x75c8, 0xb9 => 0x5eb8, 0xba => 0x96cd, 0xbb => 0x8e0a, 0xbc => 0x86f9, 0xbd => 0x548f, 0xbe => 0x6cf3, 0xbf => 0x6d8c, 0xc0 => 0x6c38, 0xc1 => 0x607f, 0xc2 => 0x52c7, 0xc3 => 0x7528, 0xc4 => 0x5e7d, 0xc5 => 0x4f18, 0xc6 => 0x60a0, 0xc7 => 0x5fe7, 0xc8 => 0x5c24, 0xc9 => 0x7531, 0xca => 0x90ae, 0xcb => 0x94c0, 0xcc => 0x72b9, 0xcd => 0x6cb9, 0xce => 0x6e38, 0xcf => 0x9149, 0xd0 => 0x6709, 0xd1 => 0x53cb, 0xd2 => 0x53f3, 0xd3 => 0x4f51, 0xd4 => 0x91c9, 0xd5 => 0x8bf1, 0xd6 => 0x53c8, 0xd7 => 0x5e7c, 0xd8 => 0x8fc2, 0xd9 => 0x6de4, 0xda => 0x4e8e, 0xdb => 0x76c2, 0xdc => 0x6986, 0xdd => 0x865e, 0xde => 0x611a, 0xdf => 0x8206, 0xe0 => 0x4f59, 0xe1 => 0x4fde, 0xe2 => 0x903e, 0xe3 => 0x9c7c, 0xe4 => 0x6109, 0xe5 => 0x6e1d, 0xe6 => 0x6e14, 0xe7 => 0x9685, 0xe8 => 0x4e88, 0xe9 => 0x5a31, 0xea => 0x96e8, 0xeb => 0x4e0e, 0xec => 0x5c7f, 0xed => 0x79b9, 0xee => 0x5b87, 0xef => 0x8bed, 0xf0 => 0x7fbd, 0xf1 => 0x7389, 0xf2 => 0x57df, 0xf3 => 0x828b, 0xf4 => 0x90c1, 0xf5 => 0x5401, 0xf6 => 0x9047, 0xf7 => 0x55bb, 0xf8 => 0x5cea, 0xf9 => 0x5fa1, 0xfa => 0x6108, 0xfb => 0x6b32, 0xfc => 0x72f1, 0xfd => 0x80b2, 0xfe => 0x8a89, }, 0xd4 => { 0xa1 => 0x6d74, 0xa2 => 0x5bd3, 0xa3 => 0x88d5, 0xa4 => 0x9884, 0xa5 => 0x8c6b, 0xa6 => 0x9a6d, 0xa7 => 0x9e33, 0xa8 => 0x6e0a, 0xa9 => 0x51a4, 0xaa => 0x5143, 0xab => 0x57a3, 0xac => 0x8881, 0xad => 0x539f, 0xae => 0x63f4, 0xaf => 0x8f95, 0xb0 => 0x56ed, 0xb1 => 0x5458, 0xb2 => 0x5706, 0xb3 => 0x733f, 0xb4 => 0x6e90, 0xb5 => 0x7f18, 0xb6 => 0x8fdc, 0xb7 => 0x82d1, 0xb8 => 0x613f, 0xb9 => 0x6028, 0xba => 0x9662, 0xbb => 0x66f0, 0xbc => 0x7ea6, 0xbd => 0x8d8a, 0xbe => 0x8dc3, 0xbf => 0x94a5, 0xc0 => 0x5cb3, 0xc1 => 0x7ca4, 0xc2 => 0x6708, 0xc3 => 0x60a6, 0xc4 => 0x9605, 0xc5 => 0x8018, 0xc6 => 0x4e91, 0xc7 => 0x90e7, 0xc8 => 0x5300, 0xc9 => 0x9668, 0xca => 0x5141, 0xcb => 0x8fd0, 0xcc => 0x8574, 0xcd => 0x915d, 0xce => 0x6655, 0xcf => 0x97f5, 0xd0 => 0x5b55, 0xd1 => 0x531d, 0xd2 => 0x7838, 0xd3 => 0x6742, 0xd4 => 0x683d, 0xd5 => 0x54c9, 0xd6 => 0x707e, 0xd7 => 0x5bb0, 0xd8 => 0x8f7d, 0xd9 => 0x518d, 0xda => 0x5728, 0xdb => 0x54b1, 0xdc => 0x6512, 0xdd => 0x6682, 0xde => 0x8d5e, 0xdf => 0x8d43, 0xe0 => 0x810f, 0xe1 => 0x846c, 0xe2 => 0x906d, 0xe3 => 0x7cdf, 0xe4 => 0x51ff, 0xe5 => 0x85fb, 0xe6 => 0x67a3, 0xe7 => 0x65e9, 0xe8 => 0x6fa1, 0xe9 => 0x86a4, 0xea => 0x8e81, 0xeb => 0x566a, 0xec => 0x9020, 0xed => 0x7682, 0xee => 0x7076, 0xef => 0x71e5, 0xf0 => 0x8d23, 0xf1 => 0x62e9, 0xf2 => 0x5219, 0xf3 => 0x6cfd, 0xf4 => 0x8d3c, 0xf5 => 0x600e, 0xf6 => 0x589e, 0xf7 => 0x618e, 0xf8 => 0x66fe, 0xf9 => 0x8d60, 0xfa => 0x624e, 0xfb => 0x55b3, 0xfc => 0x6e23, 0xfd => 0x672d, 0xfe => 0x8f67, }, 0xd5 => { 0xa1 => 0x94e1, 0xa2 => 0x95f8, 0xa3 => 0x7728, 0xa4 => 0x6805, 0xa5 => 0x69a8, 0xa6 => 0x548b, 0xa7 => 0x4e4d, 0xa8 => 0x70b8, 0xa9 => 0x8bc8, 0xaa => 0x6458, 0xab => 0x658b, 0xac => 0x5b85, 0xad => 0x7a84, 0xae => 0x503a, 0xaf => 0x5be8, 0xb0 => 0x77bb, 0xb1 => 0x6be1, 0xb2 => 0x8a79, 0xb3 => 0x7c98, 0xb4 => 0x6cbe, 0xb5 => 0x76cf, 0xb6 => 0x65a9, 0xb7 => 0x8f97, 0xb8 => 0x5d2d, 0xb9 => 0x5c55, 0xba => 0x8638, 0xbb => 0x6808, 0xbc => 0x5360, 0xbd => 0x6218, 0xbe => 0x7ad9, 0xbf => 0x6e5b, 0xc0 => 0x7efd, 0xc1 => 0x6a1f, 0xc2 => 0x7ae0, 0xc3 => 0x5f70, 0xc4 => 0x6f33, 0xc5 => 0x5f20, 0xc6 => 0x638c, 0xc7 => 0x6da8, 0xc8 => 0x6756, 0xc9 => 0x4e08, 0xca => 0x5e10, 0xcb => 0x8d26, 0xcc => 0x4ed7, 0xcd => 0x80c0, 0xce => 0x7634, 0xcf => 0x969c, 0xd0 => 0x62db, 0xd1 => 0x662d, 0xd2 => 0x627e, 0xd3 => 0x6cbc, 0xd4 => 0x8d75, 0xd5 => 0x7167, 0xd6 => 0x7f69, 0xd7 => 0x5146, 0xd8 => 0x8087, 0xd9 => 0x53ec, 0xda => 0x906e, 0xdb => 0x6298, 0xdc => 0x54f2, 0xdd => 0x86f0, 0xde => 0x8f99, 0xdf => 0x8005, 0xe0 => 0x9517, 0xe1 => 0x8517, 0xe2 => 0x8fd9, 0xe3 => 0x6d59, 0xe4 => 0x73cd, 0xe5 => 0x659f, 0xe6 => 0x771f, 0xe7 => 0x7504, 0xe8 => 0x7827, 0xe9 => 0x81fb, 0xea => 0x8d1e, 0xeb => 0x9488, 0xec => 0x4fa6, 0xed => 0x6795, 0xee => 0x75b9, 0xef => 0x8bca, 0xf0 => 0x9707, 0xf1 => 0x632f, 0xf2 => 0x9547, 0xf3 => 0x9635, 0xf4 => 0x84b8, 0xf5 => 0x6323, 0xf6 => 0x7741, 0xf7 => 0x5f81, 0xf8 => 0x72f0, 0xf9 => 0x4e89, 0xfa => 0x6014, 0xfb => 0x6574, 0xfc => 0x62ef, 0xfd => 0x6b63, 0xfe => 0x653f, }, 0xd6 => { 0xa1 => 0x5e27, 0xa2 => 0x75c7, 0xa3 => 0x90d1, 0xa4 => 0x8bc1, 0xa5 => 0x829d, 0xa6 => 0x679d, 0xa7 => 0x652f, 0xa8 => 0x5431, 0xa9 => 0x8718, 0xaa => 0x77e5, 0xab => 0x80a2, 0xac => 0x8102, 0xad => 0x6c41, 0xae => 0x4e4b, 0xaf => 0x7ec7, 0xb0 => 0x804c, 0xb1 => 0x76f4, 0xb2 => 0x690d, 0xb3 => 0x6b96, 0xb4 => 0x6267, 0xb5 => 0x503c, 0xb6 => 0x4f84, 0xb7 => 0x5740, 0xb8 => 0x6307, 0xb9 => 0x6b62, 0xba => 0x8dbe, 0xbb => 0x53ea, 0xbc => 0x65e8, 0xbd => 0x7eb8, 0xbe => 0x5fd7, 0xbf => 0x631a, 0xc0 => 0x63b7, 0xc1 => 0x81f3, 0xc2 => 0x81f4, 0xc3 => 0x7f6e, 0xc4 => 0x5e1c, 0xc5 => 0x5cd9, 0xc6 => 0x5236, 0xc7 => 0x667a, 0xc8 => 0x79e9, 0xc9 => 0x7a1a, 0xca => 0x8d28, 0xcb => 0x7099, 0xcc => 0x75d4, 0xcd => 0x6ede, 0xce => 0x6cbb, 0xcf => 0x7a92, 0xd0 => 0x4e2d, 0xd1 => 0x76c5, 0xd2 => 0x5fe0, 0xd3 => 0x949f, 0xd4 => 0x8877, 0xd5 => 0x7ec8, 0xd6 => 0x79cd, 0xd7 => 0x80bf, 0xd8 => 0x91cd, 0xd9 => 0x4ef2, 0xda => 0x4f17, 0xdb => 0x821f, 0xdc => 0x5468, 0xdd => 0x5dde, 0xde => 0x6d32, 0xdf => 0x8bcc, 0xe0 => 0x7ca5, 0xe1 => 0x8f74, 0xe2 => 0x8098, 0xe3 => 0x5e1a, 0xe4 => 0x5492, 0xe5 => 0x76b1, 0xe6 => 0x5b99, 0xe7 => 0x663c, 0xe8 => 0x9aa4, 0xe9 => 0x73e0, 0xea => 0x682a, 0xeb => 0x86db, 0xec => 0x6731, 0xed => 0x732a, 0xee => 0x8bf8, 0xef => 0x8bdb, 0xf0 => 0x9010, 0xf1 => 0x7af9, 0xf2 => 0x70db, 0xf3 => 0x716e, 0xf4 => 0x62c4, 0xf5 => 0x77a9, 0xf6 => 0x5631, 0xf7 => 0x4e3b, 0xf8 => 0x8457, 0xf9 => 0x67f1, 0xfa => 0x52a9, 0xfb => 0x86c0, 0xfc => 0x8d2e, 0xfd => 0x94f8, 0xfe => 0x7b51, }, 0xd7 => { 0xa1 => 0x4f4f, 0xa2 => 0x6ce8, 0xa3 => 0x795d, 0xa4 => 0x9a7b, 0xa5 => 0x6293, 0xa6 => 0x722a, 0xa7 => 0x62fd, 0xa8 => 0x4e13, 0xa9 => 0x7816, 0xaa => 0x8f6c, 0xab => 0x64b0, 0xac => 0x8d5a, 0xad => 0x7bc6, 0xae => 0x6869, 0xaf => 0x5e84, 0xb0 => 0x88c5, 0xb1 => 0x5986, 0xb2 => 0x649e, 0xb3 => 0x58ee, 0xb4 => 0x72b6, 0xb5 => 0x690e, 0xb6 => 0x9525, 0xb7 => 0x8ffd, 0xb8 => 0x8d58, 0xb9 => 0x5760, 0xba => 0x7f00, 0xbb => 0x8c06, 0xbc => 0x51c6, 0xbd => 0x6349, 0xbe => 0x62d9, 0xbf => 0x5353, 0xc0 => 0x684c, 0xc1 => 0x7422, 0xc2 => 0x8301, 0xc3 => 0x914c, 0xc4 => 0x5544, 0xc5 => 0x7740, 0xc6 => 0x707c, 0xc7 => 0x6d4a, 0xc8 => 0x5179, 0xc9 => 0x54a8, 0xca => 0x8d44, 0xcb => 0x59ff, 0xcc => 0x6ecb, 0xcd => 0x6dc4, 0xce => 0x5b5c, 0xcf => 0x7d2b, 0xd0 => 0x4ed4, 0xd1 => 0x7c7d, 0xd2 => 0x6ed3, 0xd3 => 0x5b50, 0xd4 => 0x81ea, 0xd5 => 0x6e0d, 0xd6 => 0x5b57, 0xd7 => 0x9b03, 0xd8 => 0x68d5, 0xd9 => 0x8e2a, 0xda => 0x5b97, 0xdb => 0x7efc, 0xdc => 0x603b, 0xdd => 0x7eb5, 0xde => 0x90b9, 0xdf => 0x8d70, 0xe0 => 0x594f, 0xe1 => 0x63cd, 0xe2 => 0x79df, 0xe3 => 0x8db3, 0xe4 => 0x5352, 0xe5 => 0x65cf, 0xe6 => 0x7956, 0xe7 => 0x8bc5, 0xe8 => 0x963b, 0xe9 => 0x7ec4, 0xea => 0x94bb, 0xeb => 0x7e82, 0xec => 0x5634, 0xed => 0x9189, 0xee => 0x6700, 0xef => 0x7f6a, 0xf0 => 0x5c0a, 0xf1 => 0x9075, 0xf2 => 0x6628, 0xf3 => 0x5de6, 0xf4 => 0x4f50, 0xf5 => 0x67de, 0xf6 => 0x505a, 0xf7 => 0x4f5c, 0xf8 => 0x5750, 0xf9 => 0x5ea7, }, 0xd8 => { 0xa1 => 0x4e8d, 0xa2 => 0x4e0c, 0xa3 => 0x5140, 0xa4 => 0x4e10, 0xa5 => 0x5eff, 0xa6 => 0x5345, 0xa7 => 0x4e15, 0xa8 => 0x4e98, 0xa9 => 0x4e1e, 0xaa => 0x9b32, 0xab => 0x5b6c, 0xac => 0x5669, 0xad => 0x4e28, 0xae => 0x79ba, 0xaf => 0x4e3f, 0xb0 => 0x5315, 0xb1 => 0x4e47, 0xb2 => 0x592d, 0xb3 => 0x723b, 0xb4 => 0x536e, 0xb5 => 0x6c10, 0xb6 => 0x56df, 0xb7 => 0x80e4, 0xb8 => 0x9997, 0xb9 => 0x6bd3, 0xba => 0x777e, 0xbb => 0x9f17, 0xbc => 0x4e36, 0xbd => 0x4e9f, 0xbe => 0x9f10, 0xbf => 0x4e5c, 0xc0 => 0x4e69, 0xc1 => 0x4e93, 0xc2 => 0x8288, 0xc3 => 0x5b5b, 0xc4 => 0x556c, 0xc5 => 0x560f, 0xc6 => 0x4ec4, 0xc7 => 0x538d, 0xc8 => 0x539d, 0xc9 => 0x53a3, 0xca => 0x53a5, 0xcb => 0x53ae, 0xcc => 0x9765, 0xcd => 0x8d5d, 0xce => 0x531a, 0xcf => 0x53f5, 0xd0 => 0x5326, 0xd1 => 0x532e, 0xd2 => 0x533e, 0xd3 => 0x8d5c, 0xd4 => 0x5366, 0xd5 => 0x5363, 0xd6 => 0x5202, 0xd7 => 0x5208, 0xd8 => 0x520e, 0xd9 => 0x522d, 0xda => 0x5233, 0xdb => 0x523f, 0xdc => 0x5240, 0xdd => 0x524c, 0xde => 0x525e, 0xdf => 0x5261, 0xe0 => 0x525c, 0xe1 => 0x84af, 0xe2 => 0x527d, 0xe3 => 0x5282, 0xe4 => 0x5281, 0xe5 => 0x5290, 0xe6 => 0x5293, 0xe7 => 0x5182, 0xe8 => 0x7f54, 0xe9 => 0x4ebb, 0xea => 0x4ec3, 0xeb => 0x4ec9, 0xec => 0x4ec2, 0xed => 0x4ee8, 0xee => 0x4ee1, 0xef => 0x4eeb, 0xf0 => 0x4ede, 0xf1 => 0x4f1b, 0xf2 => 0x4ef3, 0xf3 => 0x4f22, 0xf4 => 0x4f64, 0xf5 => 0x4ef5, 0xf6 => 0x4f25, 0xf7 => 0x4f27, 0xf8 => 0x4f09, 0xf9 => 0x4f2b, 0xfa => 0x4f5e, 0xfb => 0x4f67, 0xfc => 0x6538, 0xfd => 0x4f5a, 0xfe => 0x4f5d, }, 0xd9 => { 0xa1 => 0x4f5f, 0xa2 => 0x4f57, 0xa3 => 0x4f32, 0xa4 => 0x4f3d, 0xa5 => 0x4f76, 0xa6 => 0x4f74, 0xa7 => 0x4f91, 0xa8 => 0x4f89, 0xa9 => 0x4f83, 0xaa => 0x4f8f, 0xab => 0x4f7e, 0xac => 0x4f7b, 0xad => 0x4faa, 0xae => 0x4f7c, 0xaf => 0x4fac, 0xb0 => 0x4f94, 0xb1 => 0x4fe6, 0xb2 => 0x4fe8, 0xb3 => 0x4fea, 0xb4 => 0x4fc5, 0xb5 => 0x4fda, 0xb6 => 0x4fe3, 0xb7 => 0x4fdc, 0xb8 => 0x4fd1, 0xb9 => 0x4fdf, 0xba => 0x4ff8, 0xbb => 0x5029, 0xbc => 0x504c, 0xbd => 0x4ff3, 0xbe => 0x502c, 0xbf => 0x500f, 0xc0 => 0x502e, 0xc1 => 0x502d, 0xc2 => 0x4ffe, 0xc3 => 0x501c, 0xc4 => 0x500c, 0xc5 => 0x5025, 0xc6 => 0x5028, 0xc7 => 0x507e, 0xc8 => 0x5043, 0xc9 => 0x5055, 0xca => 0x5048, 0xcb => 0x504e, 0xcc => 0x506c, 0xcd => 0x507b, 0xce => 0x50a5, 0xcf => 0x50a7, 0xd0 => 0x50a9, 0xd1 => 0x50ba, 0xd2 => 0x50d6, 0xd3 => 0x5106, 0xd4 => 0x50ed, 0xd5 => 0x50ec, 0xd6 => 0x50e6, 0xd7 => 0x50ee, 0xd8 => 0x5107, 0xd9 => 0x510b, 0xda => 0x4edd, 0xdb => 0x6c3d, 0xdc => 0x4f58, 0xdd => 0x4f65, 0xde => 0x4fce, 0xdf => 0x9fa0, 0xe0 => 0x6c46, 0xe1 => 0x7c74, 0xe2 => 0x516e, 0xe3 => 0x5dfd, 0xe4 => 0x9ec9, 0xe5 => 0x9998, 0xe6 => 0x5181, 0xe7 => 0x5914, 0xe8 => 0x52f9, 0xe9 => 0x530d, 0xea => 0x8a07, 0xeb => 0x5310, 0xec => 0x51eb, 0xed => 0x5919, 0xee => 0x5155, 0xef => 0x4ea0, 0xf0 => 0x5156, 0xf1 => 0x4eb3, 0xf2 => 0x886e, 0xf3 => 0x88a4, 0xf4 => 0x4eb5, 0xf5 => 0x8114, 0xf6 => 0x88d2, 0xf7 => 0x7980, 0xf8 => 0x5b34, 0xf9 => 0x8803, 0xfa => 0x7fb8, 0xfb => 0x51ab, 0xfc => 0x51b1, 0xfd => 0x51bd, 0xfe => 0x51bc, }, 0xda => { 0xa1 => 0x51c7, 0xa2 => 0x5196, 0xa3 => 0x51a2, 0xa4 => 0x51a5, 0xa5 => 0x8ba0, 0xa6 => 0x8ba6, 0xa7 => 0x8ba7, 0xa8 => 0x8baa, 0xa9 => 0x8bb4, 0xaa => 0x8bb5, 0xab => 0x8bb7, 0xac => 0x8bc2, 0xad => 0x8bc3, 0xae => 0x8bcb, 0xaf => 0x8bcf, 0xb0 => 0x8bce, 0xb1 => 0x8bd2, 0xb2 => 0x8bd3, 0xb3 => 0x8bd4, 0xb4 => 0x8bd6, 0xb5 => 0x8bd8, 0xb6 => 0x8bd9, 0xb7 => 0x8bdc, 0xb8 => 0x8bdf, 0xb9 => 0x8be0, 0xba => 0x8be4, 0xbb => 0x8be8, 0xbc => 0x8be9, 0xbd => 0x8bee, 0xbe => 0x8bf0, 0xbf => 0x8bf3, 0xc0 => 0x8bf6, 0xc1 => 0x8bf9, 0xc2 => 0x8bfc, 0xc3 => 0x8bff, 0xc4 => 0x8c00, 0xc5 => 0x8c02, 0xc6 => 0x8c04, 0xc7 => 0x8c07, 0xc8 => 0x8c0c, 0xc9 => 0x8c0f, 0xca => 0x8c11, 0xcb => 0x8c12, 0xcc => 0x8c14, 0xcd => 0x8c15, 0xce => 0x8c16, 0xcf => 0x8c19, 0xd0 => 0x8c1b, 0xd1 => 0x8c18, 0xd2 => 0x8c1d, 0xd3 => 0x8c1f, 0xd4 => 0x8c20, 0xd5 => 0x8c21, 0xd6 => 0x8c25, 0xd7 => 0x8c27, 0xd8 => 0x8c2a, 0xd9 => 0x8c2b, 0xda => 0x8c2e, 0xdb => 0x8c2f, 0xdc => 0x8c32, 0xdd => 0x8c33, 0xde => 0x8c35, 0xdf => 0x8c36, 0xe0 => 0x5369, 0xe1 => 0x537a, 0xe2 => 0x961d, 0xe3 => 0x9622, 0xe4 => 0x9621, 0xe5 => 0x9631, 0xe6 => 0x962a, 0xe7 => 0x963d, 0xe8 => 0x963c, 0xe9 => 0x9642, 0xea => 0x9649, 0xeb => 0x9654, 0xec => 0x965f, 0xed => 0x9667, 0xee => 0x966c, 0xef => 0x9672, 0xf0 => 0x9674, 0xf1 => 0x9688, 0xf2 => 0x968d, 0xf3 => 0x9697, 0xf4 => 0x96b0, 0xf5 => 0x9097, 0xf6 => 0x909b, 0xf7 => 0x909d, 0xf8 => 0x9099, 0xf9 => 0x90ac, 0xfa => 0x90a1, 0xfb => 0x90b4, 0xfc => 0x90b3, 0xfd => 0x90b6, 0xfe => 0x90ba, }, 0xdb => { 0xa1 => 0x90b8, 0xa2 => 0x90b0, 0xa3 => 0x90cf, 0xa4 => 0x90c5, 0xa5 => 0x90be, 0xa6 => 0x90d0, 0xa7 => 0x90c4, 0xa8 => 0x90c7, 0xa9 => 0x90d3, 0xaa => 0x90e6, 0xab => 0x90e2, 0xac => 0x90dc, 0xad => 0x90d7, 0xae => 0x90db, 0xaf => 0x90eb, 0xb0 => 0x90ef, 0xb1 => 0x90fe, 0xb2 => 0x9104, 0xb3 => 0x9122, 0xb4 => 0x911e, 0xb5 => 0x9123, 0xb6 => 0x9131, 0xb7 => 0x912f, 0xb8 => 0x9139, 0xb9 => 0x9143, 0xba => 0x9146, 0xbb => 0x520d, 0xbc => 0x5942, 0xbd => 0x52a2, 0xbe => 0x52ac, 0xbf => 0x52ad, 0xc0 => 0x52be, 0xc1 => 0x54ff, 0xc2 => 0x52d0, 0xc3 => 0x52d6, 0xc4 => 0x52f0, 0xc5 => 0x53df, 0xc6 => 0x71ee, 0xc7 => 0x77cd, 0xc8 => 0x5ef4, 0xc9 => 0x51f5, 0xca => 0x51fc, 0xcb => 0x9b2f, 0xcc => 0x53b6, 0xcd => 0x5f01, 0xce => 0x755a, 0xcf => 0x5def, 0xd0 => 0x574c, 0xd1 => 0x57a9, 0xd2 => 0x57a1, 0xd3 => 0x587e, 0xd4 => 0x58bc, 0xd5 => 0x58c5, 0xd6 => 0x58d1, 0xd7 => 0x5729, 0xd8 => 0x572c, 0xd9 => 0x572a, 0xda => 0x5733, 0xdb => 0x5739, 0xdc => 0x572e, 0xdd => 0x572f, 0xde => 0x575c, 0xdf => 0x573b, 0xe0 => 0x5742, 0xe1 => 0x5769, 0xe2 => 0x5785, 0xe3 => 0x576b, 0xe4 => 0x5786, 0xe5 => 0x577c, 0xe6 => 0x577b, 0xe7 => 0x5768, 0xe8 => 0x576d, 0xe9 => 0x5776, 0xea => 0x5773, 0xeb => 0x57ad, 0xec => 0x57a4, 0xed => 0x578c, 0xee => 0x57b2, 0xef => 0x57cf, 0xf0 => 0x57a7, 0xf1 => 0x57b4, 0xf2 => 0x5793, 0xf3 => 0x57a0, 0xf4 => 0x57d5, 0xf5 => 0x57d8, 0xf6 => 0x57da, 0xf7 => 0x57d9, 0xf8 => 0x57d2, 0xf9 => 0x57b8, 0xfa => 0x57f4, 0xfb => 0x57ef, 0xfc => 0x57f8, 0xfd => 0x57e4, 0xfe => 0x57dd, }, 0xdc => { 0xa1 => 0x580b, 0xa2 => 0x580d, 0xa3 => 0x57fd, 0xa4 => 0x57ed, 0xa5 => 0x5800, 0xa6 => 0x581e, 0xa7 => 0x5819, 0xa8 => 0x5844, 0xa9 => 0x5820, 0xaa => 0x5865, 0xab => 0x586c, 0xac => 0x5881, 0xad => 0x5889, 0xae => 0x589a, 0xaf => 0x5880, 0xb0 => 0x99a8, 0xb1 => 0x9f19, 0xb2 => 0x61ff, 0xb3 => 0x8279, 0xb4 => 0x827d, 0xb5 => 0x827f, 0xb6 => 0x828f, 0xb7 => 0x828a, 0xb8 => 0x82a8, 0xb9 => 0x8284, 0xba => 0x828e, 0xbb => 0x8291, 0xbc => 0x8297, 0xbd => 0x8299, 0xbe => 0x82ab, 0xbf => 0x82b8, 0xc0 => 0x82be, 0xc1 => 0x82b0, 0xc2 => 0x82c8, 0xc3 => 0x82ca, 0xc4 => 0x82e3, 0xc5 => 0x8298, 0xc6 => 0x82b7, 0xc7 => 0x82ae, 0xc8 => 0x82cb, 0xc9 => 0x82cc, 0xca => 0x82c1, 0xcb => 0x82a9, 0xcc => 0x82b4, 0xcd => 0x82a1, 0xce => 0x82aa, 0xcf => 0x829f, 0xd0 => 0x82c4, 0xd1 => 0x82ce, 0xd2 => 0x82a4, 0xd3 => 0x82e1, 0xd4 => 0x8309, 0xd5 => 0x82f7, 0xd6 => 0x82e4, 0xd7 => 0x830f, 0xd8 => 0x8307, 0xd9 => 0x82dc, 0xda => 0x82f4, 0xdb => 0x82d2, 0xdc => 0x82d8, 0xdd => 0x830c, 0xde => 0x82fb, 0xdf => 0x82d3, 0xe0 => 0x8311, 0xe1 => 0x831a, 0xe2 => 0x8306, 0xe3 => 0x8314, 0xe4 => 0x8315, 0xe5 => 0x82e0, 0xe6 => 0x82d5, 0xe7 => 0x831c, 0xe8 => 0x8351, 0xe9 => 0x835b, 0xea => 0x835c, 0xeb => 0x8308, 0xec => 0x8392, 0xed => 0x833c, 0xee => 0x8334, 0xef => 0x8331, 0xf0 => 0x839b, 0xf1 => 0x835e, 0xf2 => 0x832f, 0xf3 => 0x834f, 0xf4 => 0x8347, 0xf5 => 0x8343, 0xf6 => 0x835f, 0xf7 => 0x8340, 0xf8 => 0x8317, 0xf9 => 0x8360, 0xfa => 0x832d, 0xfb => 0x833a, 0xfc => 0x8333, 0xfd => 0x8366, 0xfe => 0x8365, }, 0xdd => { 0xa1 => 0x8368, 0xa2 => 0x831b, 0xa3 => 0x8369, 0xa4 => 0x836c, 0xa5 => 0x836a, 0xa6 => 0x836d, 0xa7 => 0x836e, 0xa8 => 0x83b0, 0xa9 => 0x8378, 0xaa => 0x83b3, 0xab => 0x83b4, 0xac => 0x83a0, 0xad => 0x83aa, 0xae => 0x8393, 0xaf => 0x839c, 0xb0 => 0x8385, 0xb1 => 0x837c, 0xb2 => 0x83b6, 0xb3 => 0x83a9, 0xb4 => 0x837d, 0xb5 => 0x83b8, 0xb6 => 0x837b, 0xb7 => 0x8398, 0xb8 => 0x839e, 0xb9 => 0x83a8, 0xba => 0x83ba, 0xbb => 0x83bc, 0xbc => 0x83c1, 0xbd => 0x8401, 0xbe => 0x83e5, 0xbf => 0x83d8, 0xc0 => 0x5807, 0xc1 => 0x8418, 0xc2 => 0x840b, 0xc3 => 0x83dd, 0xc4 => 0x83fd, 0xc5 => 0x83d6, 0xc6 => 0x841c, 0xc7 => 0x8438, 0xc8 => 0x8411, 0xc9 => 0x8406, 0xca => 0x83d4, 0xcb => 0x83df, 0xcc => 0x840f, 0xcd => 0x8403, 0xce => 0x83f8, 0xcf => 0x83f9, 0xd0 => 0x83ea, 0xd1 => 0x83c5, 0xd2 => 0x83c0, 0xd3 => 0x8426, 0xd4 => 0x83f0, 0xd5 => 0x83e1, 0xd6 => 0x845c, 0xd7 => 0x8451, 0xd8 => 0x845a, 0xd9 => 0x8459, 0xda => 0x8473, 0xdb => 0x8487, 0xdc => 0x8488, 0xdd => 0x847a, 0xde => 0x8489, 0xdf => 0x8478, 0xe0 => 0x843c, 0xe1 => 0x8446, 0xe2 => 0x8469, 0xe3 => 0x8476, 0xe4 => 0x848c, 0xe5 => 0x848e, 0xe6 => 0x8431, 0xe7 => 0x846d, 0xe8 => 0x84c1, 0xe9 => 0x84cd, 0xea => 0x84d0, 0xeb => 0x84e6, 0xec => 0x84bd, 0xed => 0x84d3, 0xee => 0x84ca, 0xef => 0x84bf, 0xf0 => 0x84ba, 0xf1 => 0x84e0, 0xf2 => 0x84a1, 0xf3 => 0x84b9, 0xf4 => 0x84b4, 0xf5 => 0x8497, 0xf6 => 0x84e5, 0xf7 => 0x84e3, 0xf8 => 0x850c, 0xf9 => 0x750d, 0xfa => 0x8538, 0xfb => 0x84f0, 0xfc => 0x8539, 0xfd => 0x851f, 0xfe => 0x853a, }, 0xde => { 0xa1 => 0x8556, 0xa2 => 0x853b, 0xa3 => 0x84ff, 0xa4 => 0x84fc, 0xa5 => 0x8559, 0xa6 => 0x8548, 0xa7 => 0x8568, 0xa8 => 0x8564, 0xa9 => 0x855e, 0xaa => 0x857a, 0xab => 0x77a2, 0xac => 0x8543, 0xad => 0x8572, 0xae => 0x857b, 0xaf => 0x85a4, 0xb0 => 0x85a8, 0xb1 => 0x8587, 0xb2 => 0x858f, 0xb3 => 0x8579, 0xb4 => 0x85ae, 0xb5 => 0x859c, 0xb6 => 0x8585, 0xb7 => 0x85b9, 0xb8 => 0x85b7, 0xb9 => 0x85b0, 0xba => 0x85d3, 0xbb => 0x85c1, 0xbc => 0x85dc, 0xbd => 0x85ff, 0xbe => 0x8627, 0xbf => 0x8605, 0xc0 => 0x8629, 0xc1 => 0x8616, 0xc2 => 0x863c, 0xc3 => 0x5efe, 0xc4 => 0x5f08, 0xc5 => 0x593c, 0xc6 => 0x5941, 0xc7 => 0x8037, 0xc8 => 0x5955, 0xc9 => 0x595a, 0xca => 0x5958, 0xcb => 0x530f, 0xcc => 0x5c22, 0xcd => 0x5c25, 0xce => 0x5c2c, 0xcf => 0x5c34, 0xd0 => 0x624c, 0xd1 => 0x626a, 0xd2 => 0x629f, 0xd3 => 0x62bb, 0xd4 => 0x62ca, 0xd5 => 0x62da, 0xd6 => 0x62d7, 0xd7 => 0x62ee, 0xd8 => 0x6322, 0xd9 => 0x62f6, 0xda => 0x6339, 0xdb => 0x634b, 0xdc => 0x6343, 0xdd => 0x63ad, 0xde => 0x63f6, 0xdf => 0x6371, 0xe0 => 0x637a, 0xe1 => 0x638e, 0xe2 => 0x63b4, 0xe3 => 0x636d, 0xe4 => 0x63ac, 0xe5 => 0x638a, 0xe6 => 0x6369, 0xe7 => 0x63ae, 0xe8 => 0x63bc, 0xe9 => 0x63f2, 0xea => 0x63f8, 0xeb => 0x63e0, 0xec => 0x63ff, 0xed => 0x63c4, 0xee => 0x63de, 0xef => 0x63ce, 0xf0 => 0x6452, 0xf1 => 0x63c6, 0xf2 => 0x63be, 0xf3 => 0x6445, 0xf4 => 0x6441, 0xf5 => 0x640b, 0xf6 => 0x641b, 0xf7 => 0x6420, 0xf8 => 0x640c, 0xf9 => 0x6426, 0xfa => 0x6421, 0xfb => 0x645e, 0xfc => 0x6484, 0xfd => 0x646d, 0xfe => 0x6496, }, 0xdf => { 0xa1 => 0x647a, 0xa2 => 0x64b7, 0xa3 => 0x64b8, 0xa4 => 0x6499, 0xa5 => 0x64ba, 0xa6 => 0x64c0, 0xa7 => 0x64d0, 0xa8 => 0x64d7, 0xa9 => 0x64e4, 0xaa => 0x64e2, 0xab => 0x6509, 0xac => 0x6525, 0xad => 0x652e, 0xae => 0x5f0b, 0xaf => 0x5fd2, 0xb0 => 0x7519, 0xb1 => 0x5f11, 0xb2 => 0x535f, 0xb3 => 0x53f1, 0xb4 => 0x53fd, 0xb5 => 0x53e9, 0xb6 => 0x53e8, 0xb7 => 0x53fb, 0xb8 => 0x5412, 0xb9 => 0x5416, 0xba => 0x5406, 0xbb => 0x544b, 0xbc => 0x5452, 0xbd => 0x5453, 0xbe => 0x5454, 0xbf => 0x5456, 0xc0 => 0x5443, 0xc1 => 0x5421, 0xc2 => 0x5457, 0xc3 => 0x5459, 0xc4 => 0x5423, 0xc5 => 0x5432, 0xc6 => 0x5482, 0xc7 => 0x5494, 0xc8 => 0x5477, 0xc9 => 0x5471, 0xca => 0x5464, 0xcb => 0x549a, 0xcc => 0x549b, 0xcd => 0x5484, 0xce => 0x5476, 0xcf => 0x5466, 0xd0 => 0x549d, 0xd1 => 0x54d0, 0xd2 => 0x54ad, 0xd3 => 0x54c2, 0xd4 => 0x54b4, 0xd5 => 0x54d2, 0xd6 => 0x54a7, 0xd7 => 0x54a6, 0xd8 => 0x54d3, 0xd9 => 0x54d4, 0xda => 0x5472, 0xdb => 0x54a3, 0xdc => 0x54d5, 0xdd => 0x54bb, 0xde => 0x54bf, 0xdf => 0x54cc, 0xe0 => 0x54d9, 0xe1 => 0x54da, 0xe2 => 0x54dc, 0xe3 => 0x54a9, 0xe4 => 0x54aa, 0xe5 => 0x54a4, 0xe6 => 0x54dd, 0xe7 => 0x54cf, 0xe8 => 0x54de, 0xe9 => 0x551b, 0xea => 0x54e7, 0xeb => 0x5520, 0xec => 0x54fd, 0xed => 0x5514, 0xee => 0x54f3, 0xef => 0x5522, 0xf0 => 0x5523, 0xf1 => 0x550f, 0xf2 => 0x5511, 0xf3 => 0x5527, 0xf4 => 0x552a, 0xf5 => 0x5567, 0xf6 => 0x558f, 0xf7 => 0x55b5, 0xf8 => 0x5549, 0xf9 => 0x556d, 0xfa => 0x5541, 0xfb => 0x5555, 0xfc => 0x553f, 0xfd => 0x5550, 0xfe => 0x553c, }, 0xe0 => { 0xa1 => 0x5537, 0xa2 => 0x5556, 0xa3 => 0x5575, 0xa4 => 0x5576, 0xa5 => 0x5577, 0xa6 => 0x5533, 0xa7 => 0x5530, 0xa8 => 0x555c, 0xa9 => 0x558b, 0xaa => 0x55d2, 0xab => 0x5583, 0xac => 0x55b1, 0xad => 0x55b9, 0xae => 0x5588, 0xaf => 0x5581, 0xb0 => 0x559f, 0xb1 => 0x557e, 0xb2 => 0x55d6, 0xb3 => 0x5591, 0xb4 => 0x557b, 0xb5 => 0x55df, 0xb6 => 0x55bd, 0xb7 => 0x55be, 0xb8 => 0x5594, 0xb9 => 0x5599, 0xba => 0x55ea, 0xbb => 0x55f7, 0xbc => 0x55c9, 0xbd => 0x561f, 0xbe => 0x55d1, 0xbf => 0x55eb, 0xc0 => 0x55ec, 0xc1 => 0x55d4, 0xc2 => 0x55e6, 0xc3 => 0x55dd, 0xc4 => 0x55c4, 0xc5 => 0x55ef, 0xc6 => 0x55e5, 0xc7 => 0x55f2, 0xc8 => 0x55f3, 0xc9 => 0x55cc, 0xca => 0x55cd, 0xcb => 0x55e8, 0xcc => 0x55f5, 0xcd => 0x55e4, 0xce => 0x8f94, 0xcf => 0x561e, 0xd0 => 0x5608, 0xd1 => 0x560c, 0xd2 => 0x5601, 0xd3 => 0x5624, 0xd4 => 0x5623, 0xd5 => 0x55fe, 0xd6 => 0x5600, 0xd7 => 0x5627, 0xd8 => 0x562d, 0xd9 => 0x5658, 0xda => 0x5639, 0xdb => 0x5657, 0xdc => 0x562c, 0xdd => 0x564d, 0xde => 0x5662, 0xdf => 0x5659, 0xe0 => 0x565c, 0xe1 => 0x564c, 0xe2 => 0x5654, 0xe3 => 0x5686, 0xe4 => 0x5664, 0xe5 => 0x5671, 0xe6 => 0x566b, 0xe7 => 0x567b, 0xe8 => 0x567c, 0xe9 => 0x5685, 0xea => 0x5693, 0xeb => 0x56af, 0xec => 0x56d4, 0xed => 0x56d7, 0xee => 0x56dd, 0xef => 0x56e1, 0xf0 => 0x56f5, 0xf1 => 0x56eb, 0xf2 => 0x56f9, 0xf3 => 0x56ff, 0xf4 => 0x5704, 0xf5 => 0x570a, 0xf6 => 0x5709, 0xf7 => 0x571c, 0xf8 => 0x5e0f, 0xf9 => 0x5e19, 0xfa => 0x5e14, 0xfb => 0x5e11, 0xfc => 0x5e31, 0xfd => 0x5e3b, 0xfe => 0x5e3c, }, 0xe1 => { 0xa1 => 0x5e37, 0xa2 => 0x5e44, 0xa3 => 0x5e54, 0xa4 => 0x5e5b, 0xa5 => 0x5e5e, 0xa6 => 0x5e61, 0xa7 => 0x5c8c, 0xa8 => 0x5c7a, 0xa9 => 0x5c8d, 0xaa => 0x5c90, 0xab => 0x5c96, 0xac => 0x5c88, 0xad => 0x5c98, 0xae => 0x5c99, 0xaf => 0x5c91, 0xb0 => 0x5c9a, 0xb1 => 0x5c9c, 0xb2 => 0x5cb5, 0xb3 => 0x5ca2, 0xb4 => 0x5cbd, 0xb5 => 0x5cac, 0xb6 => 0x5cab, 0xb7 => 0x5cb1, 0xb8 => 0x5ca3, 0xb9 => 0x5cc1, 0xba => 0x5cb7, 0xbb => 0x5cc4, 0xbc => 0x5cd2, 0xbd => 0x5ce4, 0xbe => 0x5ccb, 0xbf => 0x5ce5, 0xc0 => 0x5d02, 0xc1 => 0x5d03, 0xc2 => 0x5d27, 0xc3 => 0x5d26, 0xc4 => 0x5d2e, 0xc5 => 0x5d24, 0xc6 => 0x5d1e, 0xc7 => 0x5d06, 0xc8 => 0x5d1b, 0xc9 => 0x5d58, 0xca => 0x5d3e, 0xcb => 0x5d34, 0xcc => 0x5d3d, 0xcd => 0x5d6c, 0xce => 0x5d5b, 0xcf => 0x5d6f, 0xd0 => 0x5d5d, 0xd1 => 0x5d6b, 0xd2 => 0x5d4b, 0xd3 => 0x5d4a, 0xd4 => 0x5d69, 0xd5 => 0x5d74, 0xd6 => 0x5d82, 0xd7 => 0x5d99, 0xd8 => 0x5d9d, 0xd9 => 0x8c73, 0xda => 0x5db7, 0xdb => 0x5dc5, 0xdc => 0x5f73, 0xdd => 0x5f77, 0xde => 0x5f82, 0xdf => 0x5f87, 0xe0 => 0x5f89, 0xe1 => 0x5f8c, 0xe2 => 0x5f95, 0xe3 => 0x5f99, 0xe4 => 0x5f9c, 0xe5 => 0x5fa8, 0xe6 => 0x5fad, 0xe7 => 0x5fb5, 0xe8 => 0x5fbc, 0xe9 => 0x8862, 0xea => 0x5f61, 0xeb => 0x72ad, 0xec => 0x72b0, 0xed => 0x72b4, 0xee => 0x72b7, 0xef => 0x72b8, 0xf0 => 0x72c3, 0xf1 => 0x72c1, 0xf2 => 0x72ce, 0xf3 => 0x72cd, 0xf4 => 0x72d2, 0xf5 => 0x72e8, 0xf6 => 0x72ef, 0xf7 => 0x72e9, 0xf8 => 0x72f2, 0xf9 => 0x72f4, 0xfa => 0x72f7, 0xfb => 0x7301, 0xfc => 0x72f3, 0xfd => 0x7303, 0xfe => 0x72fa, }, 0xe2 => { 0xa1 => 0x72fb, 0xa2 => 0x7317, 0xa3 => 0x7313, 0xa4 => 0x7321, 0xa5 => 0x730a, 0xa6 => 0x731e, 0xa7 => 0x731d, 0xa8 => 0x7315, 0xa9 => 0x7322, 0xaa => 0x7339, 0xab => 0x7325, 0xac => 0x732c, 0xad => 0x7338, 0xae => 0x7331, 0xaf => 0x7350, 0xb0 => 0x734d, 0xb1 => 0x7357, 0xb2 => 0x7360, 0xb3 => 0x736c, 0xb4 => 0x736f, 0xb5 => 0x737e, 0xb6 => 0x821b, 0xb7 => 0x5925, 0xb8 => 0x98e7, 0xb9 => 0x5924, 0xba => 0x5902, 0xbb => 0x9963, 0xbc => 0x9967, 0xbd => 0x9968, 0xbe => 0x9969, 0xbf => 0x996a, 0xc0 => 0x996b, 0xc1 => 0x996c, 0xc2 => 0x9974, 0xc3 => 0x9977, 0xc4 => 0x997d, 0xc5 => 0x9980, 0xc6 => 0x9984, 0xc7 => 0x9987, 0xc8 => 0x998a, 0xc9 => 0x998d, 0xca => 0x9990, 0xcb => 0x9991, 0xcc => 0x9993, 0xcd => 0x9994, 0xce => 0x9995, 0xcf => 0x5e80, 0xd0 => 0x5e91, 0xd1 => 0x5e8b, 0xd2 => 0x5e96, 0xd3 => 0x5ea5, 0xd4 => 0x5ea0, 0xd5 => 0x5eb9, 0xd6 => 0x5eb5, 0xd7 => 0x5ebe, 0xd8 => 0x5eb3, 0xd9 => 0x8d53, 0xda => 0x5ed2, 0xdb => 0x5ed1, 0xdc => 0x5edb, 0xdd => 0x5ee8, 0xde => 0x5eea, 0xdf => 0x81ba, 0xe0 => 0x5fc4, 0xe1 => 0x5fc9, 0xe2 => 0x5fd6, 0xe3 => 0x5fcf, 0xe4 => 0x6003, 0xe5 => 0x5fee, 0xe6 => 0x6004, 0xe7 => 0x5fe1, 0xe8 => 0x5fe4, 0xe9 => 0x5ffe, 0xea => 0x6005, 0xeb => 0x6006, 0xec => 0x5fea, 0xed => 0x5fed, 0xee => 0x5ff8, 0xef => 0x6019, 0xf0 => 0x6035, 0xf1 => 0x6026, 0xf2 => 0x601b, 0xf3 => 0x600f, 0xf4 => 0x600d, 0xf5 => 0x6029, 0xf6 => 0x602b, 0xf7 => 0x600a, 0xf8 => 0x603f, 0xf9 => 0x6021, 0xfa => 0x6078, 0xfb => 0x6079, 0xfc => 0x607b, 0xfd => 0x607a, 0xfe => 0x6042, }, 0xe3 => { 0xa1 => 0x606a, 0xa2 => 0x607d, 0xa3 => 0x6096, 0xa4 => 0x609a, 0xa5 => 0x60ad, 0xa6 => 0x609d, 0xa7 => 0x6083, 0xa8 => 0x6092, 0xa9 => 0x608c, 0xaa => 0x609b, 0xab => 0x60ec, 0xac => 0x60bb, 0xad => 0x60b1, 0xae => 0x60dd, 0xaf => 0x60d8, 0xb0 => 0x60c6, 0xb1 => 0x60da, 0xb2 => 0x60b4, 0xb3 => 0x6120, 0xb4 => 0x6126, 0xb5 => 0x6115, 0xb6 => 0x6123, 0xb7 => 0x60f4, 0xb8 => 0x6100, 0xb9 => 0x610e, 0xba => 0x612b, 0xbb => 0x614a, 0xbc => 0x6175, 0xbd => 0x61ac, 0xbe => 0x6194, 0xbf => 0x61a7, 0xc0 => 0x61b7, 0xc1 => 0x61d4, 0xc2 => 0x61f5, 0xc3 => 0x5fdd, 0xc4 => 0x96b3, 0xc5 => 0x95e9, 0xc6 => 0x95eb, 0xc7 => 0x95f1, 0xc8 => 0x95f3, 0xc9 => 0x95f5, 0xca => 0x95f6, 0xcb => 0x95fc, 0xcc => 0x95fe, 0xcd => 0x9603, 0xce => 0x9604, 0xcf => 0x9606, 0xd0 => 0x9608, 0xd1 => 0x960a, 0xd2 => 0x960b, 0xd3 => 0x960c, 0xd4 => 0x960d, 0xd5 => 0x960f, 0xd6 => 0x9612, 0xd7 => 0x9615, 0xd8 => 0x9616, 0xd9 => 0x9617, 0xda => 0x9619, 0xdb => 0x961a, 0xdc => 0x4e2c, 0xdd => 0x723f, 0xde => 0x6215, 0xdf => 0x6c35, 0xe0 => 0x6c54, 0xe1 => 0x6c5c, 0xe2 => 0x6c4a, 0xe3 => 0x6ca3, 0xe4 => 0x6c85, 0xe5 => 0x6c90, 0xe6 => 0x6c94, 0xe7 => 0x6c8c, 0xe8 => 0x6c68, 0xe9 => 0x6c69, 0xea => 0x6c74, 0xeb => 0x6c76, 0xec => 0x6c86, 0xed => 0x6ca9, 0xee => 0x6cd0, 0xef => 0x6cd4, 0xf0 => 0x6cad, 0xf1 => 0x6cf7, 0xf2 => 0x6cf8, 0xf3 => 0x6cf1, 0xf4 => 0x6cd7, 0xf5 => 0x6cb2, 0xf6 => 0x6ce0, 0xf7 => 0x6cd6, 0xf8 => 0x6cfa, 0xf9 => 0x6ceb, 0xfa => 0x6cee, 0xfb => 0x6cb1, 0xfc => 0x6cd3, 0xfd => 0x6cef, 0xfe => 0x6cfe, }, 0xe4 => { 0xa1 => 0x6d39, 0xa2 => 0x6d27, 0xa3 => 0x6d0c, 0xa4 => 0x6d43, 0xa5 => 0x6d48, 0xa6 => 0x6d07, 0xa7 => 0x6d04, 0xa8 => 0x6d19, 0xa9 => 0x6d0e, 0xaa => 0x6d2b, 0xab => 0x6d4d, 0xac => 0x6d2e, 0xad => 0x6d35, 0xae => 0x6d1a, 0xaf => 0x6d4f, 0xb0 => 0x6d52, 0xb1 => 0x6d54, 0xb2 => 0x6d33, 0xb3 => 0x6d91, 0xb4 => 0x6d6f, 0xb5 => 0x6d9e, 0xb6 => 0x6da0, 0xb7 => 0x6d5e, 0xb8 => 0x6d93, 0xb9 => 0x6d94, 0xba => 0x6d5c, 0xbb => 0x6d60, 0xbc => 0x6d7c, 0xbd => 0x6d63, 0xbe => 0x6e1a, 0xbf => 0x6dc7, 0xc0 => 0x6dc5, 0xc1 => 0x6dde, 0xc2 => 0x6e0e, 0xc3 => 0x6dbf, 0xc4 => 0x6de0, 0xc5 => 0x6e11, 0xc6 => 0x6de6, 0xc7 => 0x6ddd, 0xc8 => 0x6dd9, 0xc9 => 0x6e16, 0xca => 0x6dab, 0xcb => 0x6e0c, 0xcc => 0x6dae, 0xcd => 0x6e2b, 0xce => 0x6e6e, 0xcf => 0x6e4e, 0xd0 => 0x6e6b, 0xd1 => 0x6eb2, 0xd2 => 0x6e5f, 0xd3 => 0x6e86, 0xd4 => 0x6e53, 0xd5 => 0x6e54, 0xd6 => 0x6e32, 0xd7 => 0x6e25, 0xd8 => 0x6e44, 0xd9 => 0x6edf, 0xda => 0x6eb1, 0xdb => 0x6e98, 0xdc => 0x6ee0, 0xdd => 0x6f2d, 0xde => 0x6ee2, 0xdf => 0x6ea5, 0xe0 => 0x6ea7, 0xe1 => 0x6ebd, 0xe2 => 0x6ebb, 0xe3 => 0x6eb7, 0xe4 => 0x6ed7, 0xe5 => 0x6eb4, 0xe6 => 0x6ecf, 0xe7 => 0x6e8f, 0xe8 => 0x6ec2, 0xe9 => 0x6e9f, 0xea => 0x6f62, 0xeb => 0x6f46, 0xec => 0x6f47, 0xed => 0x6f24, 0xee => 0x6f15, 0xef => 0x6ef9, 0xf0 => 0x6f2f, 0xf1 => 0x6f36, 0xf2 => 0x6f4b, 0xf3 => 0x6f74, 0xf4 => 0x6f2a, 0xf5 => 0x6f09, 0xf6 => 0x6f29, 0xf7 => 0x6f89, 0xf8 => 0x6f8d, 0xf9 => 0x6f8c, 0xfa => 0x6f78, 0xfb => 0x6f72, 0xfc => 0x6f7c, 0xfd => 0x6f7a, 0xfe => 0x6fd1, }, 0xe5 => { 0xa1 => 0x6fc9, 0xa2 => 0x6fa7, 0xa3 => 0x6fb9, 0xa4 => 0x6fb6, 0xa5 => 0x6fc2, 0xa6 => 0x6fe1, 0xa7 => 0x6fee, 0xa8 => 0x6fde, 0xa9 => 0x6fe0, 0xaa => 0x6fef, 0xab => 0x701a, 0xac => 0x7023, 0xad => 0x701b, 0xae => 0x7039, 0xaf => 0x7035, 0xb0 => 0x704f, 0xb1 => 0x705e, 0xb2 => 0x5b80, 0xb3 => 0x5b84, 0xb4 => 0x5b95, 0xb5 => 0x5b93, 0xb6 => 0x5ba5, 0xb7 => 0x5bb8, 0xb8 => 0x752f, 0xb9 => 0x9a9e, 0xba => 0x6434, 0xbb => 0x5be4, 0xbc => 0x5bee, 0xbd => 0x8930, 0xbe => 0x5bf0, 0xbf => 0x8e47, 0xc0 => 0x8b07, 0xc1 => 0x8fb6, 0xc2 => 0x8fd3, 0xc3 => 0x8fd5, 0xc4 => 0x8fe5, 0xc5 => 0x8fee, 0xc6 => 0x8fe4, 0xc7 => 0x8fe9, 0xc8 => 0x8fe6, 0xc9 => 0x8ff3, 0xca => 0x8fe8, 0xcb => 0x9005, 0xcc => 0x9004, 0xcd => 0x900b, 0xce => 0x9026, 0xcf => 0x9011, 0xd0 => 0x900d, 0xd1 => 0x9016, 0xd2 => 0x9021, 0xd3 => 0x9035, 0xd4 => 0x9036, 0xd5 => 0x902d, 0xd6 => 0x902f, 0xd7 => 0x9044, 0xd8 => 0x9051, 0xd9 => 0x9052, 0xda => 0x9050, 0xdb => 0x9068, 0xdc => 0x9058, 0xdd => 0x9062, 0xde => 0x905b, 0xdf => 0x66b9, 0xe0 => 0x9074, 0xe1 => 0x907d, 0xe2 => 0x9082, 0xe3 => 0x9088, 0xe4 => 0x9083, 0xe5 => 0x908b, 0xe6 => 0x5f50, 0xe7 => 0x5f57, 0xe8 => 0x5f56, 0xe9 => 0x5f58, 0xea => 0x5c3b, 0xeb => 0x54ab, 0xec => 0x5c50, 0xed => 0x5c59, 0xee => 0x5b71, 0xef => 0x5c63, 0xf0 => 0x5c66, 0xf1 => 0x7fbc, 0xf2 => 0x5f2a, 0xf3 => 0x5f29, 0xf4 => 0x5f2d, 0xf5 => 0x8274, 0xf6 => 0x5f3c, 0xf7 => 0x9b3b, 0xf8 => 0x5c6e, 0xf9 => 0x5981, 0xfa => 0x5983, 0xfb => 0x598d, 0xfc => 0x59a9, 0xfd => 0x59aa, 0xfe => 0x59a3, }, 0xe6 => { 0xa1 => 0x5997, 0xa2 => 0x59ca, 0xa3 => 0x59ab, 0xa4 => 0x599e, 0xa5 => 0x59a4, 0xa6 => 0x59d2, 0xa7 => 0x59b2, 0xa8 => 0x59af, 0xa9 => 0x59d7, 0xaa => 0x59be, 0xab => 0x5a05, 0xac => 0x5a06, 0xad => 0x59dd, 0xae => 0x5a08, 0xaf => 0x59e3, 0xb0 => 0x59d8, 0xb1 => 0x59f9, 0xb2 => 0x5a0c, 0xb3 => 0x5a09, 0xb4 => 0x5a32, 0xb5 => 0x5a34, 0xb6 => 0x5a11, 0xb7 => 0x5a23, 0xb8 => 0x5a13, 0xb9 => 0x5a40, 0xba => 0x5a67, 0xbb => 0x5a4a, 0xbc => 0x5a55, 0xbd => 0x5a3c, 0xbe => 0x5a62, 0xbf => 0x5a75, 0xc0 => 0x80ec, 0xc1 => 0x5aaa, 0xc2 => 0x5a9b, 0xc3 => 0x5a77, 0xc4 => 0x5a7a, 0xc5 => 0x5abe, 0xc6 => 0x5aeb, 0xc7 => 0x5ab2, 0xc8 => 0x5ad2, 0xc9 => 0x5ad4, 0xca => 0x5ab8, 0xcb => 0x5ae0, 0xcc => 0x5ae3, 0xcd => 0x5af1, 0xce => 0x5ad6, 0xcf => 0x5ae6, 0xd0 => 0x5ad8, 0xd1 => 0x5adc, 0xd2 => 0x5b09, 0xd3 => 0x5b17, 0xd4 => 0x5b16, 0xd5 => 0x5b32, 0xd6 => 0x5b37, 0xd7 => 0x5b40, 0xd8 => 0x5c15, 0xd9 => 0x5c1c, 0xda => 0x5b5a, 0xdb => 0x5b65, 0xdc => 0x5b73, 0xdd => 0x5b51, 0xde => 0x5b53, 0xdf => 0x5b62, 0xe0 => 0x9a75, 0xe1 => 0x9a77, 0xe2 => 0x9a78, 0xe3 => 0x9a7a, 0xe4 => 0x9a7f, 0xe5 => 0x9a7d, 0xe6 => 0x9a80, 0xe7 => 0x9a81, 0xe8 => 0x9a85, 0xe9 => 0x9a88, 0xea => 0x9a8a, 0xeb => 0x9a90, 0xec => 0x9a92, 0xed => 0x9a93, 0xee => 0x9a96, 0xef => 0x9a98, 0xf0 => 0x9a9b, 0xf1 => 0x9a9c, 0xf2 => 0x9a9d, 0xf3 => 0x9a9f, 0xf4 => 0x9aa0, 0xf5 => 0x9aa2, 0xf6 => 0x9aa3, 0xf7 => 0x9aa5, 0xf8 => 0x9aa7, 0xf9 => 0x7e9f, 0xfa => 0x7ea1, 0xfb => 0x7ea3, 0xfc => 0x7ea5, 0xfd => 0x7ea8, 0xfe => 0x7ea9, }, 0xe7 => { 0xa1 => 0x7ead, 0xa2 => 0x7eb0, 0xa3 => 0x7ebe, 0xa4 => 0x7ec0, 0xa5 => 0x7ec1, 0xa6 => 0x7ec2, 0xa7 => 0x7ec9, 0xa8 => 0x7ecb, 0xa9 => 0x7ecc, 0xaa => 0x7ed0, 0xab => 0x7ed4, 0xac => 0x7ed7, 0xad => 0x7edb, 0xae => 0x7ee0, 0xaf => 0x7ee1, 0xb0 => 0x7ee8, 0xb1 => 0x7eeb, 0xb2 => 0x7eee, 0xb3 => 0x7eef, 0xb4 => 0x7ef1, 0xb5 => 0x7ef2, 0xb6 => 0x7f0d, 0xb7 => 0x7ef6, 0xb8 => 0x7efa, 0xb9 => 0x7efb, 0xba => 0x7efe, 0xbb => 0x7f01, 0xbc => 0x7f02, 0xbd => 0x7f03, 0xbe => 0x7f07, 0xbf => 0x7f08, 0xc0 => 0x7f0b, 0xc1 => 0x7f0c, 0xc2 => 0x7f0f, 0xc3 => 0x7f11, 0xc4 => 0x7f12, 0xc5 => 0x7f17, 0xc6 => 0x7f19, 0xc7 => 0x7f1c, 0xc8 => 0x7f1b, 0xc9 => 0x7f1f, 0xca => 0x7f21, 0xcb => 0x7f22, 0xcc => 0x7f23, 0xcd => 0x7f24, 0xce => 0x7f25, 0xcf => 0x7f26, 0xd0 => 0x7f27, 0xd1 => 0x7f2a, 0xd2 => 0x7f2b, 0xd3 => 0x7f2c, 0xd4 => 0x7f2d, 0xd5 => 0x7f2f, 0xd6 => 0x7f30, 0xd7 => 0x7f31, 0xd8 => 0x7f32, 0xd9 => 0x7f33, 0xda => 0x7f35, 0xdb => 0x5e7a, 0xdc => 0x757f, 0xdd => 0x5ddb, 0xde => 0x753e, 0xdf => 0x9095, 0xe0 => 0x738e, 0xe1 => 0x7391, 0xe2 => 0x73ae, 0xe3 => 0x73a2, 0xe4 => 0x739f, 0xe5 => 0x73cf, 0xe6 => 0x73c2, 0xe7 => 0x73d1, 0xe8 => 0x73b7, 0xe9 => 0x73b3, 0xea => 0x73c0, 0xeb => 0x73c9, 0xec => 0x73c8, 0xed => 0x73e5, 0xee => 0x73d9, 0xef => 0x987c, 0xf0 => 0x740a, 0xf1 => 0x73e9, 0xf2 => 0x73e7, 0xf3 => 0x73de, 0xf4 => 0x73ba, 0xf5 => 0x73f2, 0xf6 => 0x740f, 0xf7 => 0x742a, 0xf8 => 0x745b, 0xf9 => 0x7426, 0xfa => 0x7425, 0xfb => 0x7428, 0xfc => 0x7430, 0xfd => 0x742e, 0xfe => 0x742c, }, 0xe8 => { 0xa1 => 0x741b, 0xa2 => 0x741a, 0xa3 => 0x7441, 0xa4 => 0x745c, 0xa5 => 0x7457, 0xa6 => 0x7455, 0xa7 => 0x7459, 0xa8 => 0x7477, 0xa9 => 0x746d, 0xaa => 0x747e, 0xab => 0x749c, 0xac => 0x748e, 0xad => 0x7480, 0xae => 0x7481, 0xaf => 0x7487, 0xb0 => 0x748b, 0xb1 => 0x749e, 0xb2 => 0x74a8, 0xb3 => 0x74a9, 0xb4 => 0x7490, 0xb5 => 0x74a7, 0xb6 => 0x74d2, 0xb7 => 0x74ba, 0xb8 => 0x97ea, 0xb9 => 0x97eb, 0xba => 0x97ec, 0xbb => 0x674c, 0xbc => 0x6753, 0xbd => 0x675e, 0xbe => 0x6748, 0xbf => 0x6769, 0xc0 => 0x67a5, 0xc1 => 0x6787, 0xc2 => 0x676a, 0xc3 => 0x6773, 0xc4 => 0x6798, 0xc5 => 0x67a7, 0xc6 => 0x6775, 0xc7 => 0x67a8, 0xc8 => 0x679e, 0xc9 => 0x67ad, 0xca => 0x678b, 0xcb => 0x6777, 0xcc => 0x677c, 0xcd => 0x67f0, 0xce => 0x6809, 0xcf => 0x67d8, 0xd0 => 0x680a, 0xd1 => 0x67e9, 0xd2 => 0x67b0, 0xd3 => 0x680c, 0xd4 => 0x67d9, 0xd5 => 0x67b5, 0xd6 => 0x67da, 0xd7 => 0x67b3, 0xd8 => 0x67dd, 0xd9 => 0x6800, 0xda => 0x67c3, 0xdb => 0x67b8, 0xdc => 0x67e2, 0xdd => 0x680e, 0xde => 0x67c1, 0xdf => 0x67fd, 0xe0 => 0x6832, 0xe1 => 0x6833, 0xe2 => 0x6860, 0xe3 => 0x6861, 0xe4 => 0x684e, 0xe5 => 0x6862, 0xe6 => 0x6844, 0xe7 => 0x6864, 0xe8 => 0x6883, 0xe9 => 0x681d, 0xea => 0x6855, 0xeb => 0x6866, 0xec => 0x6841, 0xed => 0x6867, 0xee => 0x6840, 0xef => 0x683e, 0xf0 => 0x684a, 0xf1 => 0x6849, 0xf2 => 0x6829, 0xf3 => 0x68b5, 0xf4 => 0x688f, 0xf5 => 0x6874, 0xf6 => 0x6877, 0xf7 => 0x6893, 0xf8 => 0x686b, 0xf9 => 0x68c2, 0xfa => 0x696e, 0xfb => 0x68fc, 0xfc => 0x691f, 0xfd => 0x6920, 0xfe => 0x68f9, }, 0xe9 => { 0xa1 => 0x6924, 0xa2 => 0x68f0, 0xa3 => 0x690b, 0xa4 => 0x6901, 0xa5 => 0x6957, 0xa6 => 0x68e3, 0xa7 => 0x6910, 0xa8 => 0x6971, 0xa9 => 0x6939, 0xaa => 0x6960, 0xab => 0x6942, 0xac => 0x695d, 0xad => 0x6984, 0xae => 0x696b, 0xaf => 0x6980, 0xb0 => 0x6998, 0xb1 => 0x6978, 0xb2 => 0x6934, 0xb3 => 0x69cc, 0xb4 => 0x6987, 0xb5 => 0x6988, 0xb6 => 0x69ce, 0xb7 => 0x6989, 0xb8 => 0x6966, 0xb9 => 0x6963, 0xba => 0x6979, 0xbb => 0x699b, 0xbc => 0x69a7, 0xbd => 0x69bb, 0xbe => 0x69ab, 0xbf => 0x69ad, 0xc0 => 0x69d4, 0xc1 => 0x69b1, 0xc2 => 0x69c1, 0xc3 => 0x69ca, 0xc4 => 0x69df, 0xc5 => 0x6995, 0xc6 => 0x69e0, 0xc7 => 0x698d, 0xc8 => 0x69ff, 0xc9 => 0x6a2f, 0xca => 0x69ed, 0xcb => 0x6a17, 0xcc => 0x6a18, 0xcd => 0x6a65, 0xce => 0x69f2, 0xcf => 0x6a44, 0xd0 => 0x6a3e, 0xd1 => 0x6aa0, 0xd2 => 0x6a50, 0xd3 => 0x6a5b, 0xd4 => 0x6a35, 0xd5 => 0x6a8e, 0xd6 => 0x6a79, 0xd7 => 0x6a3d, 0xd8 => 0x6a28, 0xd9 => 0x6a58, 0xda => 0x6a7c, 0xdb => 0x6a91, 0xdc => 0x6a90, 0xdd => 0x6aa9, 0xde => 0x6a97, 0xdf => 0x6aab, 0xe0 => 0x7337, 0xe1 => 0x7352, 0xe2 => 0x6b81, 0xe3 => 0x6b82, 0xe4 => 0x6b87, 0xe5 => 0x6b84, 0xe6 => 0x6b92, 0xe7 => 0x6b93, 0xe8 => 0x6b8d, 0xe9 => 0x6b9a, 0xea => 0x6b9b, 0xeb => 0x6ba1, 0xec => 0x6baa, 0xed => 0x8f6b, 0xee => 0x8f6d, 0xef => 0x8f71, 0xf0 => 0x8f72, 0xf1 => 0x8f73, 0xf2 => 0x8f75, 0xf3 => 0x8f76, 0xf4 => 0x8f78, 0xf5 => 0x8f77, 0xf6 => 0x8f79, 0xf7 => 0x8f7a, 0xf8 => 0x8f7c, 0xf9 => 0x8f7e, 0xfa => 0x8f81, 0xfb => 0x8f82, 0xfc => 0x8f84, 0xfd => 0x8f87, 0xfe => 0x8f8b, }, 0xea => { 0xa1 => 0x8f8d, 0xa2 => 0x8f8e, 0xa3 => 0x8f8f, 0xa4 => 0x8f98, 0xa5 => 0x8f9a, 0xa6 => 0x8ece, 0xa7 => 0x620b, 0xa8 => 0x6217, 0xa9 => 0x621b, 0xaa => 0x621f, 0xab => 0x6222, 0xac => 0x6221, 0xad => 0x6225, 0xae => 0x6224, 0xaf => 0x622c, 0xb0 => 0x81e7, 0xb1 => 0x74ef, 0xb2 => 0x74f4, 0xb3 => 0x74ff, 0xb4 => 0x750f, 0xb5 => 0x7511, 0xb6 => 0x7513, 0xb7 => 0x6534, 0xb8 => 0x65ee, 0xb9 => 0x65ef, 0xba => 0x65f0, 0xbb => 0x660a, 0xbc => 0x6619, 0xbd => 0x6772, 0xbe => 0x6603, 0xbf => 0x6615, 0xc0 => 0x6600, 0xc1 => 0x7085, 0xc2 => 0x66f7, 0xc3 => 0x661d, 0xc4 => 0x6634, 0xc5 => 0x6631, 0xc6 => 0x6636, 0xc7 => 0x6635, 0xc8 => 0x8006, 0xc9 => 0x665f, 0xca => 0x6654, 0xcb => 0x6641, 0xcc => 0x664f, 0xcd => 0x6656, 0xce => 0x6661, 0xcf => 0x6657, 0xd0 => 0x6677, 0xd1 => 0x6684, 0xd2 => 0x668c, 0xd3 => 0x66a7, 0xd4 => 0x669d, 0xd5 => 0x66be, 0xd6 => 0x66db, 0xd7 => 0x66dc, 0xd8 => 0x66e6, 0xd9 => 0x66e9, 0xda => 0x8d32, 0xdb => 0x8d33, 0xdc => 0x8d36, 0xdd => 0x8d3b, 0xde => 0x8d3d, 0xdf => 0x8d40, 0xe0 => 0x8d45, 0xe1 => 0x8d46, 0xe2 => 0x8d48, 0xe3 => 0x8d49, 0xe4 => 0x8d47, 0xe5 => 0x8d4d, 0xe6 => 0x8d55, 0xe7 => 0x8d59, 0xe8 => 0x89c7, 0xe9 => 0x89ca, 0xea => 0x89cb, 0xeb => 0x89cc, 0xec => 0x89ce, 0xed => 0x89cf, 0xee => 0x89d0, 0xef => 0x89d1, 0xf0 => 0x726e, 0xf1 => 0x729f, 0xf2 => 0x725d, 0xf3 => 0x7266, 0xf4 => 0x726f, 0xf5 => 0x727e, 0xf6 => 0x727f, 0xf7 => 0x7284, 0xf8 => 0x728b, 0xf9 => 0x728d, 0xfa => 0x728f, 0xfb => 0x7292, 0xfc => 0x6308, 0xfd => 0x6332, 0xfe => 0x63b0, }, 0xeb => { 0xa1 => 0x643f, 0xa2 => 0x64d8, 0xa3 => 0x8004, 0xa4 => 0x6bea, 0xa5 => 0x6bf3, 0xa6 => 0x6bfd, 0xa7 => 0x6bf5, 0xa8 => 0x6bf9, 0xa9 => 0x6c05, 0xaa => 0x6c07, 0xab => 0x6c06, 0xac => 0x6c0d, 0xad => 0x6c15, 0xae => 0x6c18, 0xaf => 0x6c19, 0xb0 => 0x6c1a, 0xb1 => 0x6c21, 0xb2 => 0x6c29, 0xb3 => 0x6c24, 0xb4 => 0x6c2a, 0xb5 => 0x6c32, 0xb6 => 0x6535, 0xb7 => 0x6555, 0xb8 => 0x656b, 0xb9 => 0x724d, 0xba => 0x7252, 0xbb => 0x7256, 0xbc => 0x7230, 0xbd => 0x8662, 0xbe => 0x5216, 0xbf => 0x809f, 0xc0 => 0x809c, 0xc1 => 0x8093, 0xc2 => 0x80bc, 0xc3 => 0x670a, 0xc4 => 0x80bd, 0xc5 => 0x80b1, 0xc6 => 0x80ab, 0xc7 => 0x80ad, 0xc8 => 0x80b4, 0xc9 => 0x80b7, 0xca => 0x80e7, 0xcb => 0x80e8, 0xcc => 0x80e9, 0xcd => 0x80ea, 0xce => 0x80db, 0xcf => 0x80c2, 0xd0 => 0x80c4, 0xd1 => 0x80d9, 0xd2 => 0x80cd, 0xd3 => 0x80d7, 0xd4 => 0x6710, 0xd5 => 0x80dd, 0xd6 => 0x80eb, 0xd7 => 0x80f1, 0xd8 => 0x80f4, 0xd9 => 0x80ed, 0xda => 0x810d, 0xdb => 0x810e, 0xdc => 0x80f2, 0xdd => 0x80fc, 0xde => 0x6715, 0xdf => 0x8112, 0xe0 => 0x8c5a, 0xe1 => 0x8136, 0xe2 => 0x811e, 0xe3 => 0x812c, 0xe4 => 0x8118, 0xe5 => 0x8132, 0xe6 => 0x8148, 0xe7 => 0x814c, 0xe8 => 0x8153, 0xe9 => 0x8174, 0xea => 0x8159, 0xeb => 0x815a, 0xec => 0x8171, 0xed => 0x8160, 0xee => 0x8169, 0xef => 0x817c, 0xf0 => 0x817d, 0xf1 => 0x816d, 0xf2 => 0x8167, 0xf3 => 0x584d, 0xf4 => 0x5ab5, 0xf5 => 0x8188, 0xf6 => 0x8182, 0xf7 => 0x8191, 0xf8 => 0x6ed5, 0xf9 => 0x81a3, 0xfa => 0x81aa, 0xfb => 0x81cc, 0xfc => 0x6726, 0xfd => 0x81ca, 0xfe => 0x81bb, }, 0xec => { 0xa1 => 0x81c1, 0xa2 => 0x81a6, 0xa3 => 0x6b24, 0xa4 => 0x6b37, 0xa5 => 0x6b39, 0xa6 => 0x6b43, 0xa7 => 0x6b46, 0xa8 => 0x6b59, 0xa9 => 0x98d1, 0xaa => 0x98d2, 0xab => 0x98d3, 0xac => 0x98d5, 0xad => 0x98d9, 0xae => 0x98da, 0xaf => 0x6bb3, 0xb0 => 0x5f40, 0xb1 => 0x6bc2, 0xb2 => 0x89f3, 0xb3 => 0x6590, 0xb4 => 0x9f51, 0xb5 => 0x6593, 0xb6 => 0x65bc, 0xb7 => 0x65c6, 0xb8 => 0x65c4, 0xb9 => 0x65c3, 0xba => 0x65cc, 0xbb => 0x65ce, 0xbc => 0x65d2, 0xbd => 0x65d6, 0xbe => 0x7080, 0xbf => 0x709c, 0xc0 => 0x7096, 0xc1 => 0x709d, 0xc2 => 0x70bb, 0xc3 => 0x70c0, 0xc4 => 0x70b7, 0xc5 => 0x70ab, 0xc6 => 0x70b1, 0xc7 => 0x70e8, 0xc8 => 0x70ca, 0xc9 => 0x7110, 0xca => 0x7113, 0xcb => 0x7116, 0xcc => 0x712f, 0xcd => 0x7131, 0xce => 0x7173, 0xcf => 0x715c, 0xd0 => 0x7168, 0xd1 => 0x7145, 0xd2 => 0x7172, 0xd3 => 0x714a, 0xd4 => 0x7178, 0xd5 => 0x717a, 0xd6 => 0x7198, 0xd7 => 0x71b3, 0xd8 => 0x71b5, 0xd9 => 0x71a8, 0xda => 0x71a0, 0xdb => 0x71e0, 0xdc => 0x71d4, 0xdd => 0x71e7, 0xde => 0x71f9, 0xdf => 0x721d, 0xe0 => 0x7228, 0xe1 => 0x706c, 0xe2 => 0x7118, 0xe3 => 0x7166, 0xe4 => 0x71b9, 0xe5 => 0x623e, 0xe6 => 0x623d, 0xe7 => 0x6243, 0xe8 => 0x6248, 0xe9 => 0x6249, 0xea => 0x793b, 0xeb => 0x7940, 0xec => 0x7946, 0xed => 0x7949, 0xee => 0x795b, 0xef => 0x795c, 0xf0 => 0x7953, 0xf1 => 0x795a, 0xf2 => 0x7962, 0xf3 => 0x7957, 0xf4 => 0x7960, 0xf5 => 0x796f, 0xf6 => 0x7967, 0xf7 => 0x797a, 0xf8 => 0x7985, 0xf9 => 0x798a, 0xfa => 0x799a, 0xfb => 0x79a7, 0xfc => 0x79b3, 0xfd => 0x5fd1, 0xfe => 0x5fd0, }, 0xed => { 0xa1 => 0x603c, 0xa2 => 0x605d, 0xa3 => 0x605a, 0xa4 => 0x6067, 0xa5 => 0x6041, 0xa6 => 0x6059, 0xa7 => 0x6063, 0xa8 => 0x60ab, 0xa9 => 0x6106, 0xaa => 0x610d, 0xab => 0x615d, 0xac => 0x61a9, 0xad => 0x619d, 0xae => 0x61cb, 0xaf => 0x61d1, 0xb0 => 0x6206, 0xb1 => 0x8080, 0xb2 => 0x807f, 0xb3 => 0x6c93, 0xb4 => 0x6cf6, 0xb5 => 0x6dfc, 0xb6 => 0x77f6, 0xb7 => 0x77f8, 0xb8 => 0x7800, 0xb9 => 0x7809, 0xba => 0x7817, 0xbb => 0x7818, 0xbc => 0x7811, 0xbd => 0x65ab, 0xbe => 0x782d, 0xbf => 0x781c, 0xc0 => 0x781d, 0xc1 => 0x7839, 0xc2 => 0x783a, 0xc3 => 0x783b, 0xc4 => 0x781f, 0xc5 => 0x783c, 0xc6 => 0x7825, 0xc7 => 0x782c, 0xc8 => 0x7823, 0xc9 => 0x7829, 0xca => 0x784e, 0xcb => 0x786d, 0xcc => 0x7856, 0xcd => 0x7857, 0xce => 0x7826, 0xcf => 0x7850, 0xd0 => 0x7847, 0xd1 => 0x784c, 0xd2 => 0x786a, 0xd3 => 0x789b, 0xd4 => 0x7893, 0xd5 => 0x789a, 0xd6 => 0x7887, 0xd7 => 0x789c, 0xd8 => 0x78a1, 0xd9 => 0x78a3, 0xda => 0x78b2, 0xdb => 0x78b9, 0xdc => 0x78a5, 0xdd => 0x78d4, 0xde => 0x78d9, 0xdf => 0x78c9, 0xe0 => 0x78ec, 0xe1 => 0x78f2, 0xe2 => 0x7905, 0xe3 => 0x78f4, 0xe4 => 0x7913, 0xe5 => 0x7924, 0xe6 => 0x791e, 0xe7 => 0x7934, 0xe8 => 0x9f9b, 0xe9 => 0x9ef9, 0xea => 0x9efb, 0xeb => 0x9efc, 0xec => 0x76f1, 0xed => 0x7704, 0xee => 0x770d, 0xef => 0x76f9, 0xf0 => 0x7707, 0xf1 => 0x7708, 0xf2 => 0x771a, 0xf3 => 0x7722, 0xf4 => 0x7719, 0xf5 => 0x772d, 0xf6 => 0x7726, 0xf7 => 0x7735, 0xf8 => 0x7738, 0xf9 => 0x7750, 0xfa => 0x7751, 0xfb => 0x7747, 0xfc => 0x7743, 0xfd => 0x775a, 0xfe => 0x7768, }, 0xee => { 0xa1 => 0x7762, 0xa2 => 0x7765, 0xa3 => 0x777f, 0xa4 => 0x778d, 0xa5 => 0x777d, 0xa6 => 0x7780, 0xa7 => 0x778c, 0xa8 => 0x7791, 0xa9 => 0x779f, 0xaa => 0x77a0, 0xab => 0x77b0, 0xac => 0x77b5, 0xad => 0x77bd, 0xae => 0x753a, 0xaf => 0x7540, 0xb0 => 0x754e, 0xb1 => 0x754b, 0xb2 => 0x7548, 0xb3 => 0x755b, 0xb4 => 0x7572, 0xb5 => 0x7579, 0xb6 => 0x7583, 0xb7 => 0x7f58, 0xb8 => 0x7f61, 0xb9 => 0x7f5f, 0xba => 0x8a48, 0xbb => 0x7f68, 0xbc => 0x7f74, 0xbd => 0x7f71, 0xbe => 0x7f79, 0xbf => 0x7f81, 0xc0 => 0x7f7e, 0xc1 => 0x76cd, 0xc2 => 0x76e5, 0xc3 => 0x8832, 0xc4 => 0x9485, 0xc5 => 0x9486, 0xc6 => 0x9487, 0xc7 => 0x948b, 0xc8 => 0x948a, 0xc9 => 0x948c, 0xca => 0x948d, 0xcb => 0x948f, 0xcc => 0x9490, 0xcd => 0x9494, 0xce => 0x9497, 0xcf => 0x9495, 0xd0 => 0x949a, 0xd1 => 0x949b, 0xd2 => 0x949c, 0xd3 => 0x94a3, 0xd4 => 0x94a4, 0xd5 => 0x94ab, 0xd6 => 0x94aa, 0xd7 => 0x94ad, 0xd8 => 0x94ac, 0xd9 => 0x94af, 0xda => 0x94b0, 0xdb => 0x94b2, 0xdc => 0x94b4, 0xdd => 0x94b6, 0xde => 0x94b7, 0xdf => 0x94b8, 0xe0 => 0x94b9, 0xe1 => 0x94ba, 0xe2 => 0x94bc, 0xe3 => 0x94bd, 0xe4 => 0x94bf, 0xe5 => 0x94c4, 0xe6 => 0x94c8, 0xe7 => 0x94c9, 0xe8 => 0x94ca, 0xe9 => 0x94cb, 0xea => 0x94cc, 0xeb => 0x94cd, 0xec => 0x94ce, 0xed => 0x94d0, 0xee => 0x94d1, 0xef => 0x94d2, 0xf0 => 0x94d5, 0xf1 => 0x94d6, 0xf2 => 0x94d7, 0xf3 => 0x94d9, 0xf4 => 0x94d8, 0xf5 => 0x94db, 0xf6 => 0x94de, 0xf7 => 0x94df, 0xf8 => 0x94e0, 0xf9 => 0x94e2, 0xfa => 0x94e4, 0xfb => 0x94e5, 0xfc => 0x94e7, 0xfd => 0x94e8, 0xfe => 0x94ea, }, 0xef => { 0xa1 => 0x94e9, 0xa2 => 0x94eb, 0xa3 => 0x94ee, 0xa4 => 0x94ef, 0xa5 => 0x94f3, 0xa6 => 0x94f4, 0xa7 => 0x94f5, 0xa8 => 0x94f7, 0xa9 => 0x94f9, 0xaa => 0x94fc, 0xab => 0x94fd, 0xac => 0x94ff, 0xad => 0x9503, 0xae => 0x9502, 0xaf => 0x9506, 0xb0 => 0x9507, 0xb1 => 0x9509, 0xb2 => 0x950a, 0xb3 => 0x950d, 0xb4 => 0x950e, 0xb5 => 0x950f, 0xb6 => 0x9512, 0xb7 => 0x9513, 0xb8 => 0x9514, 0xb9 => 0x9515, 0xba => 0x9516, 0xbb => 0x9518, 0xbc => 0x951b, 0xbd => 0x951d, 0xbe => 0x951e, 0xbf => 0x951f, 0xc0 => 0x9522, 0xc1 => 0x952a, 0xc2 => 0x952b, 0xc3 => 0x9529, 0xc4 => 0x952c, 0xc5 => 0x9531, 0xc6 => 0x9532, 0xc7 => 0x9534, 0xc8 => 0x9536, 0xc9 => 0x9537, 0xca => 0x9538, 0xcb => 0x953c, 0xcc => 0x953e, 0xcd => 0x953f, 0xce => 0x9542, 0xcf => 0x9535, 0xd0 => 0x9544, 0xd1 => 0x9545, 0xd2 => 0x9546, 0xd3 => 0x9549, 0xd4 => 0x954c, 0xd5 => 0x954e, 0xd6 => 0x954f, 0xd7 => 0x9552, 0xd8 => 0x9553, 0xd9 => 0x9554, 0xda => 0x9556, 0xdb => 0x9557, 0xdc => 0x9558, 0xdd => 0x9559, 0xde => 0x955b, 0xdf => 0x955e, 0xe0 => 0x955f, 0xe1 => 0x955d, 0xe2 => 0x9561, 0xe3 => 0x9562, 0xe4 => 0x9564, 0xe5 => 0x9565, 0xe6 => 0x9566, 0xe7 => 0x9567, 0xe8 => 0x9568, 0xe9 => 0x9569, 0xea => 0x956a, 0xeb => 0x956b, 0xec => 0x956c, 0xed => 0x956f, 0xee => 0x9571, 0xef => 0x9572, 0xf0 => 0x9573, 0xf1 => 0x953a, 0xf2 => 0x77e7, 0xf3 => 0x77ec, 0xf4 => 0x96c9, 0xf5 => 0x79d5, 0xf6 => 0x79ed, 0xf7 => 0x79e3, 0xf8 => 0x79eb, 0xf9 => 0x7a06, 0xfa => 0x5d47, 0xfb => 0x7a03, 0xfc => 0x7a02, 0xfd => 0x7a1e, 0xfe => 0x7a14, }, 0xf0 => { 0xa1 => 0x7a39, 0xa2 => 0x7a37, 0xa3 => 0x7a51, 0xa4 => 0x9ecf, 0xa5 => 0x99a5, 0xa6 => 0x7a70, 0xa7 => 0x7688, 0xa8 => 0x768e, 0xa9 => 0x7693, 0xaa => 0x7699, 0xab => 0x76a4, 0xac => 0x74de, 0xad => 0x74e0, 0xae => 0x752c, 0xaf => 0x9e20, 0xb0 => 0x9e22, 0xb1 => 0x9e28, 0xb2 => 0x9e29, 0xb3 => 0x9e2a, 0xb4 => 0x9e2b, 0xb5 => 0x9e2c, 0xb6 => 0x9e32, 0xb7 => 0x9e31, 0xb8 => 0x9e36, 0xb9 => 0x9e38, 0xba => 0x9e37, 0xbb => 0x9e39, 0xbc => 0x9e3a, 0xbd => 0x9e3e, 0xbe => 0x9e41, 0xbf => 0x9e42, 0xc0 => 0x9e44, 0xc1 => 0x9e46, 0xc2 => 0x9e47, 0xc3 => 0x9e48, 0xc4 => 0x9e49, 0xc5 => 0x9e4b, 0xc6 => 0x9e4c, 0xc7 => 0x9e4e, 0xc8 => 0x9e51, 0xc9 => 0x9e55, 0xca => 0x9e57, 0xcb => 0x9e5a, 0xcc => 0x9e5b, 0xcd => 0x9e5c, 0xce => 0x9e5e, 0xcf => 0x9e63, 0xd0 => 0x9e66, 0xd1 => 0x9e67, 0xd2 => 0x9e68, 0xd3 => 0x9e69, 0xd4 => 0x9e6a, 0xd5 => 0x9e6b, 0xd6 => 0x9e6c, 0xd7 => 0x9e71, 0xd8 => 0x9e6d, 0xd9 => 0x9e73, 0xda => 0x7592, 0xdb => 0x7594, 0xdc => 0x7596, 0xdd => 0x75a0, 0xde => 0x759d, 0xdf => 0x75ac, 0xe0 => 0x75a3, 0xe1 => 0x75b3, 0xe2 => 0x75b4, 0xe3 => 0x75b8, 0xe4 => 0x75c4, 0xe5 => 0x75b1, 0xe6 => 0x75b0, 0xe7 => 0x75c3, 0xe8 => 0x75c2, 0xe9 => 0x75d6, 0xea => 0x75cd, 0xeb => 0x75e3, 0xec => 0x75e8, 0xed => 0x75e6, 0xee => 0x75e4, 0xef => 0x75eb, 0xf0 => 0x75e7, 0xf1 => 0x7603, 0xf2 => 0x75f1, 0xf3 => 0x75fc, 0xf4 => 0x75ff, 0xf5 => 0x7610, 0xf6 => 0x7600, 0xf7 => 0x7605, 0xf8 => 0x760c, 0xf9 => 0x7617, 0xfa => 0x760a, 0xfb => 0x7625, 0xfc => 0x7618, 0xfd => 0x7615, 0xfe => 0x7619, }, 0xf1 => { 0xa1 => 0x761b, 0xa2 => 0x763c, 0xa3 => 0x7622, 0xa4 => 0x7620, 0xa5 => 0x7640, 0xa6 => 0x762d, 0xa7 => 0x7630, 0xa8 => 0x763f, 0xa9 => 0x7635, 0xaa => 0x7643, 0xab => 0x763e, 0xac => 0x7633, 0xad => 0x764d, 0xae => 0x765e, 0xaf => 0x7654, 0xb0 => 0x765c, 0xb1 => 0x7656, 0xb2 => 0x766b, 0xb3 => 0x766f, 0xb4 => 0x7fca, 0xb5 => 0x7ae6, 0xb6 => 0x7a78, 0xb7 => 0x7a79, 0xb8 => 0x7a80, 0xb9 => 0x7a86, 0xba => 0x7a88, 0xbb => 0x7a95, 0xbc => 0x7aa6, 0xbd => 0x7aa0, 0xbe => 0x7aac, 0xbf => 0x7aa8, 0xc0 => 0x7aad, 0xc1 => 0x7ab3, 0xc2 => 0x8864, 0xc3 => 0x8869, 0xc4 => 0x8872, 0xc5 => 0x887d, 0xc6 => 0x887f, 0xc7 => 0x8882, 0xc8 => 0x88a2, 0xc9 => 0x88c6, 0xca => 0x88b7, 0xcb => 0x88bc, 0xcc => 0x88c9, 0xcd => 0x88e2, 0xce => 0x88ce, 0xcf => 0x88e3, 0xd0 => 0x88e5, 0xd1 => 0x88f1, 0xd2 => 0x891a, 0xd3 => 0x88fc, 0xd4 => 0x88e8, 0xd5 => 0x88fe, 0xd6 => 0x88f0, 0xd7 => 0x8921, 0xd8 => 0x8919, 0xd9 => 0x8913, 0xda => 0x891b, 0xdb => 0x890a, 0xdc => 0x8934, 0xdd => 0x892b, 0xde => 0x8936, 0xdf => 0x8941, 0xe0 => 0x8966, 0xe1 => 0x897b, 0xe2 => 0x758b, 0xe3 => 0x80e5, 0xe4 => 0x76b2, 0xe5 => 0x76b4, 0xe6 => 0x77dc, 0xe7 => 0x8012, 0xe8 => 0x8014, 0xe9 => 0x8016, 0xea => 0x801c, 0xeb => 0x8020, 0xec => 0x8022, 0xed => 0x8025, 0xee => 0x8026, 0xef => 0x8027, 0xf0 => 0x8029, 0xf1 => 0x8028, 0xf2 => 0x8031, 0xf3 => 0x800b, 0xf4 => 0x8035, 0xf5 => 0x8043, 0xf6 => 0x8046, 0xf7 => 0x804d, 0xf8 => 0x8052, 0xf9 => 0x8069, 0xfa => 0x8071, 0xfb => 0x8983, 0xfc => 0x9878, 0xfd => 0x9880, 0xfe => 0x9883, }, 0xf2 => { 0xa1 => 0x9889, 0xa2 => 0x988c, 0xa3 => 0x988d, 0xa4 => 0x988f, 0xa5 => 0x9894, 0xa6 => 0x989a, 0xa7 => 0x989b, 0xa8 => 0x989e, 0xa9 => 0x989f, 0xaa => 0x98a1, 0xab => 0x98a2, 0xac => 0x98a5, 0xad => 0x98a6, 0xae => 0x864d, 0xaf => 0x8654, 0xb0 => 0x866c, 0xb1 => 0x866e, 0xb2 => 0x867f, 0xb3 => 0x867a, 0xb4 => 0x867c, 0xb5 => 0x867b, 0xb6 => 0x86a8, 0xb7 => 0x868d, 0xb8 => 0x868b, 0xb9 => 0x86ac, 0xba => 0x869d, 0xbb => 0x86a7, 0xbc => 0x86a3, 0xbd => 0x86aa, 0xbe => 0x8693, 0xbf => 0x86a9, 0xc0 => 0x86b6, 0xc1 => 0x86c4, 0xc2 => 0x86b5, 0xc3 => 0x86ce, 0xc4 => 0x86b0, 0xc5 => 0x86ba, 0xc6 => 0x86b1, 0xc7 => 0x86af, 0xc8 => 0x86c9, 0xc9 => 0x86cf, 0xca => 0x86b4, 0xcb => 0x86e9, 0xcc => 0x86f1, 0xcd => 0x86f2, 0xce => 0x86ed, 0xcf => 0x86f3, 0xd0 => 0x86d0, 0xd1 => 0x8713, 0xd2 => 0x86de, 0xd3 => 0x86f4, 0xd4 => 0x86df, 0xd5 => 0x86d8, 0xd6 => 0x86d1, 0xd7 => 0x8703, 0xd8 => 0x8707, 0xd9 => 0x86f8, 0xda => 0x8708, 0xdb => 0x870a, 0xdc => 0x870d, 0xdd => 0x8709, 0xde => 0x8723, 0xdf => 0x873b, 0xe0 => 0x871e, 0xe1 => 0x8725, 0xe2 => 0x872e, 0xe3 => 0x871a, 0xe4 => 0x873e, 0xe5 => 0x8748, 0xe6 => 0x8734, 0xe7 => 0x8731, 0xe8 => 0x8729, 0xe9 => 0x8737, 0xea => 0x873f, 0xeb => 0x8782, 0xec => 0x8722, 0xed => 0x877d, 0xee => 0x877e, 0xef => 0x877b, 0xf0 => 0x8760, 0xf1 => 0x8770, 0xf2 => 0x874c, 0xf3 => 0x876e, 0xf4 => 0x878b, 0xf5 => 0x8753, 0xf6 => 0x8763, 0xf7 => 0x877c, 0xf8 => 0x8764, 0xf9 => 0x8759, 0xfa => 0x8765, 0xfb => 0x8793, 0xfc => 0x87af, 0xfd => 0x87a8, 0xfe => 0x87d2, }, 0xf3 => { 0xa1 => 0x87c6, 0xa2 => 0x8788, 0xa3 => 0x8785, 0xa4 => 0x87ad, 0xa5 => 0x8797, 0xa6 => 0x8783, 0xa7 => 0x87ab, 0xa8 => 0x87e5, 0xa9 => 0x87ac, 0xaa => 0x87b5, 0xab => 0x87b3, 0xac => 0x87cb, 0xad => 0x87d3, 0xae => 0x87bd, 0xaf => 0x87d1, 0xb0 => 0x87c0, 0xb1 => 0x87ca, 0xb2 => 0x87db, 0xb3 => 0x87ea, 0xb4 => 0x87e0, 0xb5 => 0x87ee, 0xb6 => 0x8816, 0xb7 => 0x8813, 0xb8 => 0x87fe, 0xb9 => 0x880a, 0xba => 0x881b, 0xbb => 0x8821, 0xbc => 0x8839, 0xbd => 0x883c, 0xbe => 0x7f36, 0xbf => 0x7f42, 0xc0 => 0x7f44, 0xc1 => 0x7f45, 0xc2 => 0x8210, 0xc3 => 0x7afa, 0xc4 => 0x7afd, 0xc5 => 0x7b08, 0xc6 => 0x7b03, 0xc7 => 0x7b04, 0xc8 => 0x7b15, 0xc9 => 0x7b0a, 0xca => 0x7b2b, 0xcb => 0x7b0f, 0xcc => 0x7b47, 0xcd => 0x7b38, 0xce => 0x7b2a, 0xcf => 0x7b19, 0xd0 => 0x7b2e, 0xd1 => 0x7b31, 0xd2 => 0x7b20, 0xd3 => 0x7b25, 0xd4 => 0x7b24, 0xd5 => 0x7b33, 0xd6 => 0x7b3e, 0xd7 => 0x7b1e, 0xd8 => 0x7b58, 0xd9 => 0x7b5a, 0xda => 0x7b45, 0xdb => 0x7b75, 0xdc => 0x7b4c, 0xdd => 0x7b5d, 0xde => 0x7b60, 0xdf => 0x7b6e, 0xe0 => 0x7b7b, 0xe1 => 0x7b62, 0xe2 => 0x7b72, 0xe3 => 0x7b71, 0xe4 => 0x7b90, 0xe5 => 0x7ba6, 0xe6 => 0x7ba7, 0xe7 => 0x7bb8, 0xe8 => 0x7bac, 0xe9 => 0x7b9d, 0xea => 0x7ba8, 0xeb => 0x7b85, 0xec => 0x7baa, 0xed => 0x7b9c, 0xee => 0x7ba2, 0xef => 0x7bab, 0xf0 => 0x7bb4, 0xf1 => 0x7bd1, 0xf2 => 0x7bc1, 0xf3 => 0x7bcc, 0xf4 => 0x7bdd, 0xf5 => 0x7bda, 0xf6 => 0x7be5, 0xf7 => 0x7be6, 0xf8 => 0x7bea, 0xf9 => 0x7c0c, 0xfa => 0x7bfe, 0xfb => 0x7bfc, 0xfc => 0x7c0f, 0xfd => 0x7c16, 0xfe => 0x7c0b, }, 0xf4 => { 0xa1 => 0x7c1f, 0xa2 => 0x7c2a, 0xa3 => 0x7c26, 0xa4 => 0x7c38, 0xa5 => 0x7c41, 0xa6 => 0x7c40, 0xa7 => 0x81fe, 0xa8 => 0x8201, 0xa9 => 0x8202, 0xaa => 0x8204, 0xab => 0x81ec, 0xac => 0x8844, 0xad => 0x8221, 0xae => 0x8222, 0xaf => 0x8223, 0xb0 => 0x822d, 0xb1 => 0x822f, 0xb2 => 0x8228, 0xb3 => 0x822b, 0xb4 => 0x8238, 0xb5 => 0x823b, 0xb6 => 0x8233, 0xb7 => 0x8234, 0xb8 => 0x823e, 0xb9 => 0x8244, 0xba => 0x8249, 0xbb => 0x824b, 0xbc => 0x824f, 0xbd => 0x825a, 0xbe => 0x825f, 0xbf => 0x8268, 0xc0 => 0x887e, 0xc1 => 0x8885, 0xc2 => 0x8888, 0xc3 => 0x88d8, 0xc4 => 0x88df, 0xc5 => 0x895e, 0xc6 => 0x7f9d, 0xc7 => 0x7f9f, 0xc8 => 0x7fa7, 0xc9 => 0x7faf, 0xca => 0x7fb0, 0xcb => 0x7fb2, 0xcc => 0x7c7c, 0xcd => 0x6549, 0xce => 0x7c91, 0xcf => 0x7c9d, 0xd0 => 0x7c9c, 0xd1 => 0x7c9e, 0xd2 => 0x7ca2, 0xd3 => 0x7cb2, 0xd4 => 0x7cbc, 0xd5 => 0x7cbd, 0xd6 => 0x7cc1, 0xd7 => 0x7cc7, 0xd8 => 0x7ccc, 0xd9 => 0x7ccd, 0xda => 0x7cc8, 0xdb => 0x7cc5, 0xdc => 0x7cd7, 0xdd => 0x7ce8, 0xde => 0x826e, 0xdf => 0x66a8, 0xe0 => 0x7fbf, 0xe1 => 0x7fce, 0xe2 => 0x7fd5, 0xe3 => 0x7fe5, 0xe4 => 0x7fe1, 0xe5 => 0x7fe6, 0xe6 => 0x7fe9, 0xe7 => 0x7fee, 0xe8 => 0x7ff3, 0xe9 => 0x7cf8, 0xea => 0x7d77, 0xeb => 0x7da6, 0xec => 0x7dae, 0xed => 0x7e47, 0xee => 0x7e9b, 0xef => 0x9eb8, 0xf0 => 0x9eb4, 0xf1 => 0x8d73, 0xf2 => 0x8d84, 0xf3 => 0x8d94, 0xf4 => 0x8d91, 0xf5 => 0x8db1, 0xf6 => 0x8d67, 0xf7 => 0x8d6d, 0xf8 => 0x8c47, 0xf9 => 0x8c49, 0xfa => 0x914a, 0xfb => 0x9150, 0xfc => 0x914e, 0xfd => 0x914f, 0xfe => 0x9164, }, 0xf5 => { 0xa1 => 0x9162, 0xa2 => 0x9161, 0xa3 => 0x9170, 0xa4 => 0x9169, 0xa5 => 0x916f, 0xa6 => 0x917d, 0xa7 => 0x917e, 0xa8 => 0x9172, 0xa9 => 0x9174, 0xaa => 0x9179, 0xab => 0x918c, 0xac => 0x9185, 0xad => 0x9190, 0xae => 0x918d, 0xaf => 0x9191, 0xb0 => 0x91a2, 0xb1 => 0x91a3, 0xb2 => 0x91aa, 0xb3 => 0x91ad, 0xb4 => 0x91ae, 0xb5 => 0x91af, 0xb6 => 0x91b5, 0xb7 => 0x91b4, 0xb8 => 0x91ba, 0xb9 => 0x8c55, 0xba => 0x9e7e, 0xbb => 0x8db8, 0xbc => 0x8deb, 0xbd => 0x8e05, 0xbe => 0x8e59, 0xbf => 0x8e69, 0xc0 => 0x8db5, 0xc1 => 0x8dbf, 0xc2 => 0x8dbc, 0xc3 => 0x8dba, 0xc4 => 0x8dc4, 0xc5 => 0x8dd6, 0xc6 => 0x8dd7, 0xc7 => 0x8dda, 0xc8 => 0x8dde, 0xc9 => 0x8dce, 0xca => 0x8dcf, 0xcb => 0x8ddb, 0xcc => 0x8dc6, 0xcd => 0x8dec, 0xce => 0x8df7, 0xcf => 0x8df8, 0xd0 => 0x8de3, 0xd1 => 0x8df9, 0xd2 => 0x8dfb, 0xd3 => 0x8de4, 0xd4 => 0x8e09, 0xd5 => 0x8dfd, 0xd6 => 0x8e14, 0xd7 => 0x8e1d, 0xd8 => 0x8e1f, 0xd9 => 0x8e2c, 0xda => 0x8e2e, 0xdb => 0x8e23, 0xdc => 0x8e2f, 0xdd => 0x8e3a, 0xde => 0x8e40, 0xdf => 0x8e39, 0xe0 => 0x8e35, 0xe1 => 0x8e3d, 0xe2 => 0x8e31, 0xe3 => 0x8e49, 0xe4 => 0x8e41, 0xe5 => 0x8e42, 0xe6 => 0x8e51, 0xe7 => 0x8e52, 0xe8 => 0x8e4a, 0xe9 => 0x8e70, 0xea => 0x8e76, 0xeb => 0x8e7c, 0xec => 0x8e6f, 0xed => 0x8e74, 0xee => 0x8e85, 0xef => 0x8e8f, 0xf0 => 0x8e94, 0xf1 => 0x8e90, 0xf2 => 0x8e9c, 0xf3 => 0x8e9e, 0xf4 => 0x8c78, 0xf5 => 0x8c82, 0xf6 => 0x8c8a, 0xf7 => 0x8c85, 0xf8 => 0x8c98, 0xf9 => 0x8c94, 0xfa => 0x659b, 0xfb => 0x89d6, 0xfc => 0x89de, 0xfd => 0x89da, 0xfe => 0x89dc, }, 0xf6 => { 0xa1 => 0x89e5, 0xa2 => 0x89eb, 0xa3 => 0x89ef, 0xa4 => 0x8a3e, 0xa5 => 0x8b26, 0xa6 => 0x9753, 0xa7 => 0x96e9, 0xa8 => 0x96f3, 0xa9 => 0x96ef, 0xaa => 0x9706, 0xab => 0x9701, 0xac => 0x9708, 0xad => 0x970f, 0xae => 0x970e, 0xaf => 0x972a, 0xb0 => 0x972d, 0xb1 => 0x9730, 0xb2 => 0x973e, 0xb3 => 0x9f80, 0xb4 => 0x9f83, 0xb5 => 0x9f85, 0xb6 => 0x9f86, 0xb7 => 0x9f87, 0xb8 => 0x9f88, 0xb9 => 0x9f89, 0xba => 0x9f8a, 0xbb => 0x9f8c, 0xbc => 0x9efe, 0xbd => 0x9f0b, 0xbe => 0x9f0d, 0xbf => 0x96b9, 0xc0 => 0x96bc, 0xc1 => 0x96bd, 0xc2 => 0x96ce, 0xc3 => 0x96d2, 0xc4 => 0x77bf, 0xc5 => 0x96e0, 0xc6 => 0x928e, 0xc7 => 0x92ae, 0xc8 => 0x92c8, 0xc9 => 0x933e, 0xca => 0x936a, 0xcb => 0x93ca, 0xcc => 0x938f, 0xcd => 0x943e, 0xce => 0x946b, 0xcf => 0x9c7f, 0xd0 => 0x9c82, 0xd1 => 0x9c85, 0xd2 => 0x9c86, 0xd3 => 0x9c87, 0xd4 => 0x9c88, 0xd5 => 0x7a23, 0xd6 => 0x9c8b, 0xd7 => 0x9c8e, 0xd8 => 0x9c90, 0xd9 => 0x9c91, 0xda => 0x9c92, 0xdb => 0x9c94, 0xdc => 0x9c95, 0xdd => 0x9c9a, 0xde => 0x9c9b, 0xdf => 0x9c9e, 0xe0 => 0x9c9f, 0xe1 => 0x9ca0, 0xe2 => 0x9ca1, 0xe3 => 0x9ca2, 0xe4 => 0x9ca3, 0xe5 => 0x9ca5, 0xe6 => 0x9ca6, 0xe7 => 0x9ca7, 0xe8 => 0x9ca8, 0xe9 => 0x9ca9, 0xea => 0x9cab, 0xeb => 0x9cad, 0xec => 0x9cae, 0xed => 0x9cb0, 0xee => 0x9cb1, 0xef => 0x9cb2, 0xf0 => 0x9cb3, 0xf1 => 0x9cb4, 0xf2 => 0x9cb5, 0xf3 => 0x9cb6, 0xf4 => 0x9cb7, 0xf5 => 0x9cba, 0xf6 => 0x9cbb, 0xf7 => 0x9cbc, 0xf8 => 0x9cbd, 0xf9 => 0x9cc4, 0xfa => 0x9cc5, 0xfb => 0x9cc6, 0xfc => 0x9cc7, 0xfd => 0x9cca, 0xfe => 0x9ccb, }, 0xf7 => { 0xa1 => 0x9ccc, 0xa2 => 0x9ccd, 0xa3 => 0x9cce, 0xa4 => 0x9ccf, 0xa5 => 0x9cd0, 0xa6 => 0x9cd3, 0xa7 => 0x9cd4, 0xa8 => 0x9cd5, 0xa9 => 0x9cd7, 0xaa => 0x9cd8, 0xab => 0x9cd9, 0xac => 0x9cdc, 0xad => 0x9cdd, 0xae => 0x9cdf, 0xaf => 0x9ce2, 0xb0 => 0x977c, 0xb1 => 0x9785, 0xb2 => 0x9791, 0xb3 => 0x9792, 0xb4 => 0x9794, 0xb5 => 0x97af, 0xb6 => 0x97ab, 0xb7 => 0x97a3, 0xb8 => 0x97b2, 0xb9 => 0x97b4, 0xba => 0x9ab1, 0xbb => 0x9ab0, 0xbc => 0x9ab7, 0xbd => 0x9e58, 0xbe => 0x9ab6, 0xbf => 0x9aba, 0xc0 => 0x9abc, 0xc1 => 0x9ac1, 0xc2 => 0x9ac0, 0xc3 => 0x9ac5, 0xc4 => 0x9ac2, 0xc5 => 0x9acb, 0xc6 => 0x9acc, 0xc7 => 0x9ad1, 0xc8 => 0x9b45, 0xc9 => 0x9b43, 0xca => 0x9b47, 0xcb => 0x9b49, 0xcc => 0x9b48, 0xcd => 0x9b4d, 0xce => 0x9b51, 0xcf => 0x98e8, 0xd0 => 0x990d, 0xd1 => 0x992e, 0xd2 => 0x9955, 0xd3 => 0x9954, 0xd4 => 0x9adf, 0xd5 => 0x9ae1, 0xd6 => 0x9ae6, 0xd7 => 0x9aef, 0xd8 => 0x9aeb, 0xd9 => 0x9afb, 0xda => 0x9aed, 0xdb => 0x9af9, 0xdc => 0x9b08, 0xdd => 0x9b0f, 0xde => 0x9b13, 0xdf => 0x9b1f, 0xe0 => 0x9b23, 0xe1 => 0x9ebd, 0xe2 => 0x9ebe, 0xe3 => 0x7e3b, 0xe4 => 0x9e82, 0xe5 => 0x9e87, 0xe6 => 0x9e88, 0xe7 => 0x9e8b, 0xe8 => 0x9e92, 0xe9 => 0x93d6, 0xea => 0x9e9d, 0xeb => 0x9e9f, 0xec => 0x9edb, 0xed => 0x9edc, 0xee => 0x9edd, 0xef => 0x9ee0, 0xf0 => 0x9edf, 0xf1 => 0x9ee2, 0xf2 => 0x9ee9, 0xf3 => 0x9ee7, 0xf4 => 0x9ee5, 0xf5 => 0x9eea, 0xf6 => 0x9eef, 0xf7 => 0x9f22, 0xf8 => 0x9f2c, 0xf9 => 0x9f2f, 0xfa => 0x9f39, 0xfb => 0x9f37, 0xfc => 0x9f3d, 0xfd => 0x9f3e, 0xfe => 0x9f44, }, 0xf8 => 0xf8f8, 0xf9 => 0xf8f9, 0xfa => 0xf8fa, 0xfb => 0xf8fb, 0xfc => 0xf8fc, 0xfd => 0xf8fd, 0xfe => 0xf8fe, 0xff => 0xf8ff, ); 1; # end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacThai.pm������������������������������������������000644 �000765 �000024 �00000005204 11417362674 023155� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacThai.pm # # Description: Mac Thai to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/THAI.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacThai = ( 0x80 => 0xab, 0x81 => 0xbb, 0x82 => 0x2026, 0x83 => [0x0e48,0xf875], 0x84 => [0x0e49,0xf875], 0x85 => [0x0e4a,0xf875], 0x86 => [0x0e4b,0xf875], 0x87 => [0x0e4c,0xf875], 0x88 => [0x0e48,0xf873], 0x89 => [0x0e49,0xf873], 0x8a => [0x0e4a,0xf873], 0x8b => [0x0e4b,0xf873], 0x8c => [0x0e4c,0xf873], 0x8d => 0x201c, 0x8e => 0x201d, 0x8f => [0x0e4d,0xf874], 0x91 => 0x2022, 0x92 => [0x0e31,0xf874], 0x93 => [0x0e47,0xf874], 0x94 => [0x0e34,0xf874], 0x95 => [0x0e35,0xf874], 0x96 => [0x0e36,0xf874], 0x97 => [0x0e37,0xf874], 0x98 => [0x0e48,0xf874], 0x99 => [0x0e49,0xf874], 0x9a => [0x0e4a,0xf874], 0x9b => [0x0e4b,0xf874], 0x9c => [0x0e4c,0xf874], 0x9d => 0x2018, 0x9e => 0x2019, 0xa1 => 0x0e01, 0xa2 => 0x0e02, 0xa3 => 0x0e03, 0xa4 => 0x0e04, 0xa5 => 0x0e05, 0xa6 => 0x0e06, 0xa7 => 0x0e07, 0xa8 => 0x0e08, 0xa9 => 0x0e09, 0xaa => 0x0e0a, 0xab => 0x0e0b, 0xac => 0x0e0c, 0xad => 0x0e0d, 0xae => 0x0e0e, 0xaf => 0x0e0f, 0xb0 => 0x0e10, 0xb1 => 0x0e11, 0xb2 => 0x0e12, 0xb3 => 0x0e13, 0xb4 => 0x0e14, 0xb5 => 0x0e15, 0xb6 => 0x0e16, 0xb7 => 0x0e17, 0xb8 => 0x0e18, 0xb9 => 0x0e19, 0xba => 0x0e1a, 0xbb => 0x0e1b, 0xbc => 0x0e1c, 0xbd => 0x0e1d, 0xbe => 0x0e1e, 0xbf => 0x0e1f, 0xc0 => 0x0e20, 0xc1 => 0x0e21, 0xc2 => 0x0e22, 0xc3 => 0x0e23, 0xc4 => 0x0e24, 0xc5 => 0x0e25, 0xc6 => 0x0e26, 0xc7 => 0x0e27, 0xc8 => 0x0e28, 0xc9 => 0x0e29, 0xca => 0x0e2a, 0xcb => 0x0e2b, 0xcc => 0x0e2c, 0xcd => 0x0e2d, 0xce => 0x0e2e, 0xcf => 0x0e2f, 0xd0 => 0x0e30, 0xd1 => 0x0e31, 0xd2 => 0x0e32, 0xd3 => 0x0e33, 0xd4 => 0x0e34, 0xd5 => 0x0e35, 0xd6 => 0x0e36, 0xd7 => 0x0e37, 0xd8 => 0x0e38, 0xd9 => 0x0e39, 0xda => 0x0e3a, 0xdb => 0x2060, 0xdc => 0x200b, 0xdd => 0x2013, 0xde => 0x2014, 0xdf => 0x0e3f, 0xe0 => 0x0e40, 0xe1 => 0x0e41, 0xe2 => 0x0e42, 0xe3 => 0x0e43, 0xe4 => 0x0e44, 0xe5 => 0x0e45, 0xe6 => 0x0e46, 0xe7 => 0x0e47, 0xe8 => 0x0e48, 0xe9 => 0x0e49, 0xea => 0x0e4a, 0xeb => 0x0e4b, 0xec => 0x0e4c, 0xed => 0x0e4d, 0xee => 0x2122, 0xef => 0x0e4f, 0xf0 => 0x0e50, 0xf1 => 0x0e51, 0xf2 => 0x0e52, 0xf3 => 0x0e53, 0xf4 => 0x0e54, 0xf5 => 0x0e55, 0xf6 => 0x0e56, 0xf7 => 0x0e57, 0xf8 => 0x0e58, 0xf9 => 0x0e59, 0xfa => 0xae, 0xfb => 0xa9, ); 1; # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/MacTurkish.pm���������������������������������������000644 �000765 �000024 �00000004516 11417362674 023726� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: MacTurkish.pm # # Description: Mac Turkish to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/TURKISH.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::MacTurkish = ( 0x80 => 0xc4, 0x81 => 0xc5, 0x82 => 0xc7, 0x83 => 0xc9, 0x84 => 0xd1, 0x85 => 0xd6, 0x86 => 0xdc, 0x87 => 0xe1, 0x88 => 0xe0, 0x89 => 0xe2, 0x8a => 0xe4, 0x8b => 0xe3, 0x8c => 0xe5, 0x8d => 0xe7, 0x8e => 0xe9, 0x8f => 0xe8, 0x90 => 0xea, 0x91 => 0xeb, 0x92 => 0xed, 0x93 => 0xec, 0x94 => 0xee, 0x95 => 0xef, 0x96 => 0xf1, 0x97 => 0xf3, 0x98 => 0xf2, 0x99 => 0xf4, 0x9a => 0xf6, 0x9b => 0xf5, 0x9c => 0xfa, 0x9d => 0xf9, 0x9e => 0xfb, 0x9f => 0xfc, 0xa0 => 0x2020, 0xa1 => 0xb0, 0xa4 => 0xa7, 0xa5 => 0x2022, 0xa6 => 0xb6, 0xa7 => 0xdf, 0xa8 => 0xae, 0xaa => 0x2122, 0xab => 0xb4, 0xac => 0xa8, 0xad => 0x2260, 0xae => 0xc6, 0xaf => 0xd8, 0xb0 => 0x221e, 0xb2 => 0x2264, 0xb3 => 0x2265, 0xb4 => 0xa5, 0xb6 => 0x2202, 0xb7 => 0x2211, 0xb8 => 0x220f, 0xb9 => 0x03c0, 0xba => 0x222b, 0xbb => 0xaa, 0xbc => 0xba, 0xbd => 0x03a9, 0xbe => 0xe6, 0xbf => 0xf8, 0xc0 => 0xbf, 0xc1 => 0xa1, 0xc2 => 0xac, 0xc3 => 0x221a, 0xc4 => 0x0192, 0xc5 => 0x2248, 0xc6 => 0x2206, 0xc7 => 0xab, 0xc8 => 0xbb, 0xc9 => 0x2026, 0xca => 0xa0, 0xcb => 0xc0, 0xcc => 0xc3, 0xcd => 0xd5, 0xce => 0x0152, 0xcf => 0x0153, 0xd0 => 0x2013, 0xd1 => 0x2014, 0xd2 => 0x201c, 0xd3 => 0x201d, 0xd4 => 0x2018, 0xd5 => 0x2019, 0xd6 => 0xf7, 0xd7 => 0x25ca, 0xd8 => 0xff, 0xd9 => 0x0178, 0xda => 0x011e, 0xdb => 0x011f, 0xdc => 0x0130, 0xdd => 0x0131, 0xde => 0x015e, 0xdf => 0x015f, 0xe0 => 0x2021, 0xe1 => 0xb7, 0xe2 => 0x201a, 0xe3 => 0x201e, 0xe4 => 0x2030, 0xe5 => 0xc2, 0xe6 => 0xca, 0xe7 => 0xc1, 0xe8 => 0xcb, 0xe9 => 0xc8, 0xea => 0xcd, 0xeb => 0xce, 0xec => 0xcf, 0xed => 0xcc, 0xee => 0xd3, 0xef => 0xd4, 0xf0 => 0xf8ff, 0xf1 => 0xd2, 0xf2 => 0xda, 0xf3 => 0xdb, 0xf4 => 0xd9, 0xf5 => 0xf8a0, 0xf6 => 0x02c6, 0xf7 => 0x02dc, 0xf8 => 0xaf, 0xf9 => 0x02d8, 0xfa => 0x02d9, 0xfb => 0x02da, 0xfc => 0xb8, 0xfd => 0x02dd, 0xfe => 0x02db, 0xff => 0x02c7, ); 1; # end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/PDFDoc.pm�������������������������������������������000644 �000765 �000024 �00000002360 11460430103 022663� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: PDFDoc.pm # # Description: PDFDocEncoding to Unicode # # Revisions: 2010/10/16 - P. Harvey created # # References: 1) http://www.adobe.com/devnet/pdf/pdf_reference.html # # Notes: The table omits 1-byte characters with the same values as Unicode # This set re-maps characters with codepoints less than 0x80 #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::PDFDoc = ( 0x18 => 0x02d8, 0x82 => 0x2021, 0x8c => 0x201e, 0x96 => 0x0152, 0x19 => 0x02c7, 0x83 => 0x2026, 0x8d => 0x201c, 0x97 => 0x0160, 0x1a => 0x02c6, 0x84 => 0x2014, 0x8e => 0x201d, 0x98 => 0x0178, 0x1b => 0x02d9, 0x85 => 0x2013, 0x8f => 0x2018, 0x99 => 0x017d, 0x1c => 0x02dd, 0x86 => 0x0192, 0x90 => 0x2019, 0x9a => 0x0131, 0x1d => 0x02db, 0x87 => 0x2044, 0x91 => 0x201a, 0x9b => 0x0142, 0x1e => 0x02da, 0x88 => 0x2039, 0x92 => 0x2122, 0x9c => 0x0153, 0x1f => 0x02dc, 0x89 => 0x203a, 0x93 => 0xfb01, 0x9d => 0x0161, 0x80 => 0x2022, 0x8a => 0x2212, 0x94 => 0xfb02, 0x9e => 0x017e, 0x81 => 0x2020, 0x8b => 0x2030, 0x95 => 0x0141, 0xa0 => 0x20ac, ); 1; # end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/ShiftJIS.pm�����������������������������������������000644 �000765 �000024 �00000350732 11424540570 023272� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: ShiftJIS.pm # # Description: Shift-JIS to Unicode # # Revisions: 2010/01/20 - P. Harvey created # 2010/07/30 - P. Harvey fixed to use variable-width characters # # References: 1) http://unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::ShiftJIS = ( 0x5c => 0xa5, 0x7e => 0x203e, 0x81 => { 0x40 => 0x3000, 0x41 => 0x3001, 0x42 => 0x3002, 0x43 => 0xff0c, 0x44 => 0xff0e, 0x45 => 0x30fb, 0x46 => 0xff1a, 0x47 => 0xff1b, 0x48 => 0xff1f, 0x49 => 0xff01, 0x4a => 0x309b, 0x4b => 0x309c, 0x4c => 0xb4, 0x4d => 0xff40, 0x4e => 0xa8, 0x4f => 0xff3e, 0x50 => 0xffe3, 0x51 => 0xff3f, 0x52 => 0x30fd, 0x53 => 0x30fe, 0x54 => 0x309d, 0x55 => 0x309e, 0x56 => 0x3003, 0x57 => 0x4edd, 0x58 => 0x3005, 0x59 => 0x3006, 0x5a => 0x3007, 0x5b => 0x30fc, 0x5c => 0x2015, 0x5d => 0x2010, 0x5e => 0xff0f, 0x5f => 0x5c, 0x60 => 0x301c, 0x61 => 0x2016, 0x62 => 0xff5c, 0x63 => 0x2026, 0x64 => 0x2025, 0x65 => 0x2018, 0x66 => 0x2019, 0x67 => 0x201c, 0x68 => 0x201d, 0x69 => 0xff08, 0x6a => 0xff09, 0x6b => 0x3014, 0x6c => 0x3015, 0x6d => 0xff3b, 0x6e => 0xff3d, 0x6f => 0xff5b, 0x70 => 0xff5d, 0x71 => 0x3008, 0x72 => 0x3009, 0x73 => 0x300a, 0x74 => 0x300b, 0x75 => 0x300c, 0x76 => 0x300d, 0x77 => 0x300e, 0x78 => 0x300f, 0x79 => 0x3010, 0x7a => 0x3011, 0x7b => 0xff0b, 0x7c => 0x2212, 0x7d => 0xb1, 0x7e => 0xd7, 0x80 => 0xf7, 0x81 => 0xff1d, 0x82 => 0x2260, 0x83 => 0xff1c, 0x84 => 0xff1e, 0x85 => 0x2266, 0x86 => 0x2267, 0x87 => 0x221e, 0x88 => 0x2234, 0x89 => 0x2642, 0x8a => 0x2640, 0x8b => 0xb0, 0x8c => 0x2032, 0x8d => 0x2033, 0x8e => 0x2103, 0x8f => 0xffe5, 0x90 => 0xff04, 0x91 => 0xa2, 0x92 => 0xa3, 0x93 => 0xff05, 0x94 => 0xff03, 0x95 => 0xff06, 0x96 => 0xff0a, 0x97 => 0xff20, 0x98 => 0xa7, 0x99 => 0x2606, 0x9a => 0x2605, 0x9b => 0x25cb, 0x9c => 0x25cf, 0x9d => 0x25ce, 0x9e => 0x25c7, 0x9f => 0x25c6, 0xa0 => 0x25a1, 0xa1 => 0x25a0, 0xa2 => 0x25b3, 0xa3 => 0x25b2, 0xa4 => 0x25bd, 0xa5 => 0x25bc, 0xa6 => 0x203b, 0xa7 => 0x3012, 0xa8 => 0x2192, 0xa9 => 0x2190, 0xaa => 0x2191, 0xab => 0x2193, 0xac => 0x3013, 0xb8 => 0x2208, 0xb9 => 0x220b, 0xba => 0x2286, 0xbb => 0x2287, 0xbc => 0x2282, 0xbd => 0x2283, 0xbe => 0x222a, 0xbf => 0x2229, 0xc8 => 0x2227, 0xc9 => 0x2228, 0xca => 0xac, 0xcb => 0x21d2, 0xcc => 0x21d4, 0xcd => 0x2200, 0xce => 0x2203, 0xda => 0x2220, 0xdb => 0x22a5, 0xdc => 0x2312, 0xdd => 0x2202, 0xde => 0x2207, 0xdf => 0x2261, 0xe0 => 0x2252, 0xe1 => 0x226a, 0xe2 => 0x226b, 0xe3 => 0x221a, 0xe4 => 0x223d, 0xe5 => 0x221d, 0xe6 => 0x2235, 0xe7 => 0x222b, 0xe8 => 0x222c, 0xf0 => 0x212b, 0xf1 => 0x2030, 0xf2 => 0x266f, 0xf3 => 0x266d, 0xf4 => 0x266a, 0xf5 => 0x2020, 0xf6 => 0x2021, 0xf7 => 0xb6, 0xfc => 0x25ef, }, 0x82 => { 0x4f => 0xff10, 0x50 => 0xff11, 0x51 => 0xff12, 0x52 => 0xff13, 0x53 => 0xff14, 0x54 => 0xff15, 0x55 => 0xff16, 0x56 => 0xff17, 0x57 => 0xff18, 0x58 => 0xff19, 0x60 => 0xff21, 0x61 => 0xff22, 0x62 => 0xff23, 0x63 => 0xff24, 0x64 => 0xff25, 0x65 => 0xff26, 0x66 => 0xff27, 0x67 => 0xff28, 0x68 => 0xff29, 0x69 => 0xff2a, 0x6a => 0xff2b, 0x6b => 0xff2c, 0x6c => 0xff2d, 0x6d => 0xff2e, 0x6e => 0xff2f, 0x6f => 0xff30, 0x70 => 0xff31, 0x71 => 0xff32, 0x72 => 0xff33, 0x73 => 0xff34, 0x74 => 0xff35, 0x75 => 0xff36, 0x76 => 0xff37, 0x77 => 0xff38, 0x78 => 0xff39, 0x79 => 0xff3a, 0x81 => 0xff41, 0x82 => 0xff42, 0x83 => 0xff43, 0x84 => 0xff44, 0x85 => 0xff45, 0x86 => 0xff46, 0x87 => 0xff47, 0x88 => 0xff48, 0x89 => 0xff49, 0x8a => 0xff4a, 0x8b => 0xff4b, 0x8c => 0xff4c, 0x8d => 0xff4d, 0x8e => 0xff4e, 0x8f => 0xff4f, 0x90 => 0xff50, 0x91 => 0xff51, 0x92 => 0xff52, 0x93 => 0xff53, 0x94 => 0xff54, 0x95 => 0xff55, 0x96 => 0xff56, 0x97 => 0xff57, 0x98 => 0xff58, 0x99 => 0xff59, 0x9a => 0xff5a, 0x9f => 0x3041, 0xa0 => 0x3042, 0xa1 => 0x3043, 0xa2 => 0x3044, 0xa3 => 0x3045, 0xa4 => 0x3046, 0xa5 => 0x3047, 0xa6 => 0x3048, 0xa7 => 0x3049, 0xa8 => 0x304a, 0xa9 => 0x304b, 0xaa => 0x304c, 0xab => 0x304d, 0xac => 0x304e, 0xad => 0x304f, 0xae => 0x3050, 0xaf => 0x3051, 0xb0 => 0x3052, 0xb1 => 0x3053, 0xb2 => 0x3054, 0xb3 => 0x3055, 0xb4 => 0x3056, 0xb5 => 0x3057, 0xb6 => 0x3058, 0xb7 => 0x3059, 0xb8 => 0x305a, 0xb9 => 0x305b, 0xba => 0x305c, 0xbb => 0x305d, 0xbc => 0x305e, 0xbd => 0x305f, 0xbe => 0x3060, 0xbf => 0x3061, 0xc0 => 0x3062, 0xc1 => 0x3063, 0xc2 => 0x3064, 0xc3 => 0x3065, 0xc4 => 0x3066, 0xc5 => 0x3067, 0xc6 => 0x3068, 0xc7 => 0x3069, 0xc8 => 0x306a, 0xc9 => 0x306b, 0xca => 0x306c, 0xcb => 0x306d, 0xcc => 0x306e, 0xcd => 0x306f, 0xce => 0x3070, 0xcf => 0x3071, 0xd0 => 0x3072, 0xd1 => 0x3073, 0xd2 => 0x3074, 0xd3 => 0x3075, 0xd4 => 0x3076, 0xd5 => 0x3077, 0xd6 => 0x3078, 0xd7 => 0x3079, 0xd8 => 0x307a, 0xd9 => 0x307b, 0xda => 0x307c, 0xdb => 0x307d, 0xdc => 0x307e, 0xdd => 0x307f, 0xde => 0x3080, 0xdf => 0x3081, 0xe0 => 0x3082, 0xe1 => 0x3083, 0xe2 => 0x3084, 0xe3 => 0x3085, 0xe4 => 0x3086, 0xe5 => 0x3087, 0xe6 => 0x3088, 0xe7 => 0x3089, 0xe8 => 0x308a, 0xe9 => 0x308b, 0xea => 0x308c, 0xeb => 0x308d, 0xec => 0x308e, 0xed => 0x308f, 0xee => 0x3090, 0xef => 0x3091, 0xf0 => 0x3092, 0xf1 => 0x3093, }, 0x83 => { 0x40 => 0x30a1, 0x41 => 0x30a2, 0x42 => 0x30a3, 0x43 => 0x30a4, 0x44 => 0x30a5, 0x45 => 0x30a6, 0x46 => 0x30a7, 0x47 => 0x30a8, 0x48 => 0x30a9, 0x49 => 0x30aa, 0x4a => 0x30ab, 0x4b => 0x30ac, 0x4c => 0x30ad, 0x4d => 0x30ae, 0x4e => 0x30af, 0x4f => 0x30b0, 0x50 => 0x30b1, 0x51 => 0x30b2, 0x52 => 0x30b3, 0x53 => 0x30b4, 0x54 => 0x30b5, 0x55 => 0x30b6, 0x56 => 0x30b7, 0x57 => 0x30b8, 0x58 => 0x30b9, 0x59 => 0x30ba, 0x5a => 0x30bb, 0x5b => 0x30bc, 0x5c => 0x30bd, 0x5d => 0x30be, 0x5e => 0x30bf, 0x5f => 0x30c0, 0x60 => 0x30c1, 0x61 => 0x30c2, 0x62 => 0x30c3, 0x63 => 0x30c4, 0x64 => 0x30c5, 0x65 => 0x30c6, 0x66 => 0x30c7, 0x67 => 0x30c8, 0x68 => 0x30c9, 0x69 => 0x30ca, 0x6a => 0x30cb, 0x6b => 0x30cc, 0x6c => 0x30cd, 0x6d => 0x30ce, 0x6e => 0x30cf, 0x6f => 0x30d0, 0x70 => 0x30d1, 0x71 => 0x30d2, 0x72 => 0x30d3, 0x73 => 0x30d4, 0x74 => 0x30d5, 0x75 => 0x30d6, 0x76 => 0x30d7, 0x77 => 0x30d8, 0x78 => 0x30d9, 0x79 => 0x30da, 0x7a => 0x30db, 0x7b => 0x30dc, 0x7c => 0x30dd, 0x7d => 0x30de, 0x7e => 0x30df, 0x80 => 0x30e0, 0x81 => 0x30e1, 0x82 => 0x30e2, 0x83 => 0x30e3, 0x84 => 0x30e4, 0x85 => 0x30e5, 0x86 => 0x30e6, 0x87 => 0x30e7, 0x88 => 0x30e8, 0x89 => 0x30e9, 0x8a => 0x30ea, 0x8b => 0x30eb, 0x8c => 0x30ec, 0x8d => 0x30ed, 0x8e => 0x30ee, 0x8f => 0x30ef, 0x90 => 0x30f0, 0x91 => 0x30f1, 0x92 => 0x30f2, 0x93 => 0x30f3, 0x94 => 0x30f4, 0x95 => 0x30f5, 0x96 => 0x30f6, 0x9f => 0x0391, 0xa0 => 0x0392, 0xa1 => 0x0393, 0xa2 => 0x0394, 0xa3 => 0x0395, 0xa4 => 0x0396, 0xa5 => 0x0397, 0xa6 => 0x0398, 0xa7 => 0x0399, 0xa8 => 0x039a, 0xa9 => 0x039b, 0xaa => 0x039c, 0xab => 0x039d, 0xac => 0x039e, 0xad => 0x039f, 0xae => 0x03a0, 0xaf => 0x03a1, 0xb0 => 0x03a3, 0xb1 => 0x03a4, 0xb2 => 0x03a5, 0xb3 => 0x03a6, 0xb4 => 0x03a7, 0xb5 => 0x03a8, 0xb6 => 0x03a9, 0xbf => 0x03b1, 0xc0 => 0x03b2, 0xc1 => 0x03b3, 0xc2 => 0x03b4, 0xc3 => 0x03b5, 0xc4 => 0x03b6, 0xc5 => 0x03b7, 0xc6 => 0x03b8, 0xc7 => 0x03b9, 0xc8 => 0x03ba, 0xc9 => 0x03bb, 0xca => 0x03bc, 0xcb => 0x03bd, 0xcc => 0x03be, 0xcd => 0x03bf, 0xce => 0x03c0, 0xcf => 0x03c1, 0xd0 => 0x03c3, 0xd1 => 0x03c4, 0xd2 => 0x03c5, 0xd3 => 0x03c6, 0xd4 => 0x03c7, 0xd5 => 0x03c8, 0xd6 => 0x03c9, }, 0x84 => { 0x40 => 0x0410, 0x41 => 0x0411, 0x42 => 0x0412, 0x43 => 0x0413, 0x44 => 0x0414, 0x45 => 0x0415, 0x46 => 0x0401, 0x47 => 0x0416, 0x48 => 0x0417, 0x49 => 0x0418, 0x4a => 0x0419, 0x4b => 0x041a, 0x4c => 0x041b, 0x4d => 0x041c, 0x4e => 0x041d, 0x4f => 0x041e, 0x50 => 0x041f, 0x51 => 0x0420, 0x52 => 0x0421, 0x53 => 0x0422, 0x54 => 0x0423, 0x55 => 0x0424, 0x56 => 0x0425, 0x57 => 0x0426, 0x58 => 0x0427, 0x59 => 0x0428, 0x5a => 0x0429, 0x5b => 0x042a, 0x5c => 0x042b, 0x5d => 0x042c, 0x5e => 0x042d, 0x5f => 0x042e, 0x60 => 0x042f, 0x70 => 0x0430, 0x71 => 0x0431, 0x72 => 0x0432, 0x73 => 0x0433, 0x74 => 0x0434, 0x75 => 0x0435, 0x76 => 0x0451, 0x77 => 0x0436, 0x78 => 0x0437, 0x79 => 0x0438, 0x7a => 0x0439, 0x7b => 0x043a, 0x7c => 0x043b, 0x7d => 0x043c, 0x7e => 0x043d, 0x80 => 0x043e, 0x81 => 0x043f, 0x82 => 0x0440, 0x83 => 0x0441, 0x84 => 0x0442, 0x85 => 0x0443, 0x86 => 0x0444, 0x87 => 0x0445, 0x88 => 0x0446, 0x89 => 0x0447, 0x8a => 0x0448, 0x8b => 0x0449, 0x8c => 0x044a, 0x8d => 0x044b, 0x8e => 0x044c, 0x8f => 0x044d, 0x90 => 0x044e, 0x91 => 0x044f, 0x9f => 0x2500, 0xa0 => 0x2502, 0xa1 => 0x250c, 0xa2 => 0x2510, 0xa3 => 0x2518, 0xa4 => 0x2514, 0xa5 => 0x251c, 0xa6 => 0x252c, 0xa7 => 0x2524, 0xa8 => 0x2534, 0xa9 => 0x253c, 0xaa => 0x2501, 0xab => 0x2503, 0xac => 0x250f, 0xad => 0x2513, 0xae => 0x251b, 0xaf => 0x2517, 0xb0 => 0x2523, 0xb1 => 0x2533, 0xb2 => 0x252b, 0xb3 => 0x253b, 0xb4 => 0x254b, 0xb5 => 0x2520, 0xb6 => 0x252f, 0xb7 => 0x2528, 0xb8 => 0x2537, 0xb9 => 0x253f, 0xba => 0x251d, 0xbb => 0x2530, 0xbc => 0x2525, 0xbd => 0x2538, 0xbe => 0x2542, }, 0x88 => { 0x9f => 0x4e9c, 0xa0 => 0x5516, 0xa1 => 0x5a03, 0xa2 => 0x963f, 0xa3 => 0x54c0, 0xa4 => 0x611b, 0xa5 => 0x6328, 0xa6 => 0x59f6, 0xa7 => 0x9022, 0xa8 => 0x8475, 0xa9 => 0x831c, 0xaa => 0x7a50, 0xab => 0x60aa, 0xac => 0x63e1, 0xad => 0x6e25, 0xae => 0x65ed, 0xaf => 0x8466, 0xb0 => 0x82a6, 0xb1 => 0x9bf5, 0xb2 => 0x6893, 0xb3 => 0x5727, 0xb4 => 0x65a1, 0xb5 => 0x6271, 0xb6 => 0x5b9b, 0xb7 => 0x59d0, 0xb8 => 0x867b, 0xb9 => 0x98f4, 0xba => 0x7d62, 0xbb => 0x7dbe, 0xbc => 0x9b8e, 0xbd => 0x6216, 0xbe => 0x7c9f, 0xbf => 0x88b7, 0xc0 => 0x5b89, 0xc1 => 0x5eb5, 0xc2 => 0x6309, 0xc3 => 0x6697, 0xc4 => 0x6848, 0xc5 => 0x95c7, 0xc6 => 0x978d, 0xc7 => 0x674f, 0xc8 => 0x4ee5, 0xc9 => 0x4f0a, 0xca => 0x4f4d, 0xcb => 0x4f9d, 0xcc => 0x5049, 0xcd => 0x56f2, 0xce => 0x5937, 0xcf => 0x59d4, 0xd0 => 0x5a01, 0xd1 => 0x5c09, 0xd2 => 0x60df, 0xd3 => 0x610f, 0xd4 => 0x6170, 0xd5 => 0x6613, 0xd6 => 0x6905, 0xd7 => 0x70ba, 0xd8 => 0x754f, 0xd9 => 0x7570, 0xda => 0x79fb, 0xdb => 0x7dad, 0xdc => 0x7def, 0xdd => 0x80c3, 0xde => 0x840e, 0xdf => 0x8863, 0xe0 => 0x8b02, 0xe1 => 0x9055, 0xe2 => 0x907a, 0xe3 => 0x533b, 0xe4 => 0x4e95, 0xe5 => 0x4ea5, 0xe6 => 0x57df, 0xe7 => 0x80b2, 0xe8 => 0x90c1, 0xe9 => 0x78ef, 0xea => 0x4e00, 0xeb => 0x58f1, 0xec => 0x6ea2, 0xed => 0x9038, 0xee => 0x7a32, 0xef => 0x8328, 0xf0 => 0x828b, 0xf1 => 0x9c2f, 0xf2 => 0x5141, 0xf3 => 0x5370, 0xf4 => 0x54bd, 0xf5 => 0x54e1, 0xf6 => 0x56e0, 0xf7 => 0x59fb, 0xf8 => 0x5f15, 0xf9 => 0x98f2, 0xfa => 0x6deb, 0xfb => 0x80e4, 0xfc => 0x852d, }, 0x89 => { 0x40 => 0x9662, 0x41 => 0x9670, 0x42 => 0x96a0, 0x43 => 0x97fb, 0x44 => 0x540b, 0x45 => 0x53f3, 0x46 => 0x5b87, 0x47 => 0x70cf, 0x48 => 0x7fbd, 0x49 => 0x8fc2, 0x4a => 0x96e8, 0x4b => 0x536f, 0x4c => 0x9d5c, 0x4d => 0x7aba, 0x4e => 0x4e11, 0x4f => 0x7893, 0x50 => 0x81fc, 0x51 => 0x6e26, 0x52 => 0x5618, 0x53 => 0x5504, 0x54 => 0x6b1d, 0x55 => 0x851a, 0x56 => 0x9c3b, 0x57 => 0x59e5, 0x58 => 0x53a9, 0x59 => 0x6d66, 0x5a => 0x74dc, 0x5b => 0x958f, 0x5c => 0x5642, 0x5d => 0x4e91, 0x5e => 0x904b, 0x5f => 0x96f2, 0x60 => 0x834f, 0x61 => 0x990c, 0x62 => 0x53e1, 0x63 => 0x55b6, 0x64 => 0x5b30, 0x65 => 0x5f71, 0x66 => 0x6620, 0x67 => 0x66f3, 0x68 => 0x6804, 0x69 => 0x6c38, 0x6a => 0x6cf3, 0x6b => 0x6d29, 0x6c => 0x745b, 0x6d => 0x76c8, 0x6e => 0x7a4e, 0x6f => 0x9834, 0x70 => 0x82f1, 0x71 => 0x885b, 0x72 => 0x8a60, 0x73 => 0x92ed, 0x74 => 0x6db2, 0x75 => 0x75ab, 0x76 => 0x76ca, 0x77 => 0x99c5, 0x78 => 0x60a6, 0x79 => 0x8b01, 0x7a => 0x8d8a, 0x7b => 0x95b2, 0x7c => 0x698e, 0x7d => 0x53ad, 0x7e => 0x5186, 0x80 => 0x5712, 0x81 => 0x5830, 0x82 => 0x5944, 0x83 => 0x5bb4, 0x84 => 0x5ef6, 0x85 => 0x6028, 0x86 => 0x63a9, 0x87 => 0x63f4, 0x88 => 0x6cbf, 0x89 => 0x6f14, 0x8a => 0x708e, 0x8b => 0x7114, 0x8c => 0x7159, 0x8d => 0x71d5, 0x8e => 0x733f, 0x8f => 0x7e01, 0x90 => 0x8276, 0x91 => 0x82d1, 0x92 => 0x8597, 0x93 => 0x9060, 0x94 => 0x925b, 0x95 => 0x9d1b, 0x96 => 0x5869, 0x97 => 0x65bc, 0x98 => 0x6c5a, 0x99 => 0x7525, 0x9a => 0x51f9, 0x9b => 0x592e, 0x9c => 0x5965, 0x9d => 0x5f80, 0x9e => 0x5fdc, 0x9f => 0x62bc, 0xa0 => 0x65fa, 0xa1 => 0x6a2a, 0xa2 => 0x6b27, 0xa3 => 0x6bb4, 0xa4 => 0x738b, 0xa5 => 0x7fc1, 0xa6 => 0x8956, 0xa7 => 0x9d2c, 0xa8 => 0x9d0e, 0xa9 => 0x9ec4, 0xaa => 0x5ca1, 0xab => 0x6c96, 0xac => 0x837b, 0xad => 0x5104, 0xae => 0x5c4b, 0xaf => 0x61b6, 0xb0 => 0x81c6, 0xb1 => 0x6876, 0xb2 => 0x7261, 0xb3 => 0x4e59, 0xb4 => 0x4ffa, 0xb5 => 0x5378, 0xb6 => 0x6069, 0xb7 => 0x6e29, 0xb8 => 0x7a4f, 0xb9 => 0x97f3, 0xba => 0x4e0b, 0xbb => 0x5316, 0xbc => 0x4eee, 0xbd => 0x4f55, 0xbe => 0x4f3d, 0xbf => 0x4fa1, 0xc0 => 0x4f73, 0xc1 => 0x52a0, 0xc2 => 0x53ef, 0xc3 => 0x5609, 0xc4 => 0x590f, 0xc5 => 0x5ac1, 0xc6 => 0x5bb6, 0xc7 => 0x5be1, 0xc8 => 0x79d1, 0xc9 => 0x6687, 0xca => 0x679c, 0xcb => 0x67b6, 0xcc => 0x6b4c, 0xcd => 0x6cb3, 0xce => 0x706b, 0xcf => 0x73c2, 0xd0 => 0x798d, 0xd1 => 0x79be, 0xd2 => 0x7a3c, 0xd3 => 0x7b87, 0xd4 => 0x82b1, 0xd5 => 0x82db, 0xd6 => 0x8304, 0xd7 => 0x8377, 0xd8 => 0x83ef, 0xd9 => 0x83d3, 0xda => 0x8766, 0xdb => 0x8ab2, 0xdc => 0x5629, 0xdd => 0x8ca8, 0xde => 0x8fe6, 0xdf => 0x904e, 0xe0 => 0x971e, 0xe1 => 0x868a, 0xe2 => 0x4fc4, 0xe3 => 0x5ce8, 0xe4 => 0x6211, 0xe5 => 0x7259, 0xe6 => 0x753b, 0xe7 => 0x81e5, 0xe8 => 0x82bd, 0xe9 => 0x86fe, 0xea => 0x8cc0, 0xeb => 0x96c5, 0xec => 0x9913, 0xed => 0x99d5, 0xee => 0x4ecb, 0xef => 0x4f1a, 0xf0 => 0x89e3, 0xf1 => 0x56de, 0xf2 => 0x584a, 0xf3 => 0x58ca, 0xf4 => 0x5efb, 0xf5 => 0x5feb, 0xf6 => 0x602a, 0xf7 => 0x6094, 0xf8 => 0x6062, 0xf9 => 0x61d0, 0xfa => 0x6212, 0xfb => 0x62d0, 0xfc => 0x6539, }, 0x8a => { 0x40 => 0x9b41, 0x41 => 0x6666, 0x42 => 0x68b0, 0x43 => 0x6d77, 0x44 => 0x7070, 0x45 => 0x754c, 0x46 => 0x7686, 0x47 => 0x7d75, 0x48 => 0x82a5, 0x49 => 0x87f9, 0x4a => 0x958b, 0x4b => 0x968e, 0x4c => 0x8c9d, 0x4d => 0x51f1, 0x4e => 0x52be, 0x4f => 0x5916, 0x50 => 0x54b3, 0x51 => 0x5bb3, 0x52 => 0x5d16, 0x53 => 0x6168, 0x54 => 0x6982, 0x55 => 0x6daf, 0x56 => 0x788d, 0x57 => 0x84cb, 0x58 => 0x8857, 0x59 => 0x8a72, 0x5a => 0x93a7, 0x5b => 0x9ab8, 0x5c => 0x6d6c, 0x5d => 0x99a8, 0x5e => 0x86d9, 0x5f => 0x57a3, 0x60 => 0x67ff, 0x61 => 0x86ce, 0x62 => 0x920e, 0x63 => 0x5283, 0x64 => 0x5687, 0x65 => 0x5404, 0x66 => 0x5ed3, 0x67 => 0x62e1, 0x68 => 0x64b9, 0x69 => 0x683c, 0x6a => 0x6838, 0x6b => 0x6bbb, 0x6c => 0x7372, 0x6d => 0x78ba, 0x6e => 0x7a6b, 0x6f => 0x899a, 0x70 => 0x89d2, 0x71 => 0x8d6b, 0x72 => 0x8f03, 0x73 => 0x90ed, 0x74 => 0x95a3, 0x75 => 0x9694, 0x76 => 0x9769, 0x77 => 0x5b66, 0x78 => 0x5cb3, 0x79 => 0x697d, 0x7a => 0x984d, 0x7b => 0x984e, 0x7c => 0x639b, 0x7d => 0x7b20, 0x7e => 0x6a2b, 0x80 => 0x6a7f, 0x81 => 0x68b6, 0x82 => 0x9c0d, 0x83 => 0x6f5f, 0x84 => 0x5272, 0x85 => 0x559d, 0x86 => 0x6070, 0x87 => 0x62ec, 0x88 => 0x6d3b, 0x89 => 0x6e07, 0x8a => 0x6ed1, 0x8b => 0x845b, 0x8c => 0x8910, 0x8d => 0x8f44, 0x8e => 0x4e14, 0x8f => 0x9c39, 0x90 => 0x53f6, 0x91 => 0x691b, 0x92 => 0x6a3a, 0x93 => 0x9784, 0x94 => 0x682a, 0x95 => 0x515c, 0x96 => 0x7ac3, 0x97 => 0x84b2, 0x98 => 0x91dc, 0x99 => 0x938c, 0x9a => 0x565b, 0x9b => 0x9d28, 0x9c => 0x6822, 0x9d => 0x8305, 0x9e => 0x8431, 0x9f => 0x7ca5, 0xa0 => 0x5208, 0xa1 => 0x82c5, 0xa2 => 0x74e6, 0xa3 => 0x4e7e, 0xa4 => 0x4f83, 0xa5 => 0x51a0, 0xa6 => 0x5bd2, 0xa7 => 0x520a, 0xa8 => 0x52d8, 0xa9 => 0x52e7, 0xaa => 0x5dfb, 0xab => 0x559a, 0xac => 0x582a, 0xad => 0x59e6, 0xae => 0x5b8c, 0xaf => 0x5b98, 0xb0 => 0x5bdb, 0xb1 => 0x5e72, 0xb2 => 0x5e79, 0xb3 => 0x60a3, 0xb4 => 0x611f, 0xb5 => 0x6163, 0xb6 => 0x61be, 0xb7 => 0x63db, 0xb8 => 0x6562, 0xb9 => 0x67d1, 0xba => 0x6853, 0xbb => 0x68fa, 0xbc => 0x6b3e, 0xbd => 0x6b53, 0xbe => 0x6c57, 0xbf => 0x6f22, 0xc0 => 0x6f97, 0xc1 => 0x6f45, 0xc2 => 0x74b0, 0xc3 => 0x7518, 0xc4 => 0x76e3, 0xc5 => 0x770b, 0xc6 => 0x7aff, 0xc7 => 0x7ba1, 0xc8 => 0x7c21, 0xc9 => 0x7de9, 0xca => 0x7f36, 0xcb => 0x7ff0, 0xcc => 0x809d, 0xcd => 0x8266, 0xce => 0x839e, 0xcf => 0x89b3, 0xd0 => 0x8acc, 0xd1 => 0x8cab, 0xd2 => 0x9084, 0xd3 => 0x9451, 0xd4 => 0x9593, 0xd5 => 0x9591, 0xd6 => 0x95a2, 0xd7 => 0x9665, 0xd8 => 0x97d3, 0xd9 => 0x9928, 0xda => 0x8218, 0xdb => 0x4e38, 0xdc => 0x542b, 0xdd => 0x5cb8, 0xde => 0x5dcc, 0xdf => 0x73a9, 0xe0 => 0x764c, 0xe1 => 0x773c, 0xe2 => 0x5ca9, 0xe3 => 0x7feb, 0xe4 => 0x8d0b, 0xe5 => 0x96c1, 0xe6 => 0x9811, 0xe7 => 0x9854, 0xe8 => 0x9858, 0xe9 => 0x4f01, 0xea => 0x4f0e, 0xeb => 0x5371, 0xec => 0x559c, 0xed => 0x5668, 0xee => 0x57fa, 0xef => 0x5947, 0xf0 => 0x5b09, 0xf1 => 0x5bc4, 0xf2 => 0x5c90, 0xf3 => 0x5e0c, 0xf4 => 0x5e7e, 0xf5 => 0x5fcc, 0xf6 => 0x63ee, 0xf7 => 0x673a, 0xf8 => 0x65d7, 0xf9 => 0x65e2, 0xfa => 0x671f, 0xfb => 0x68cb, 0xfc => 0x68c4, }, 0x8b => { 0x40 => 0x6a5f, 0x41 => 0x5e30, 0x42 => 0x6bc5, 0x43 => 0x6c17, 0x44 => 0x6c7d, 0x45 => 0x757f, 0x46 => 0x7948, 0x47 => 0x5b63, 0x48 => 0x7a00, 0x49 => 0x7d00, 0x4a => 0x5fbd, 0x4b => 0x898f, 0x4c => 0x8a18, 0x4d => 0x8cb4, 0x4e => 0x8d77, 0x4f => 0x8ecc, 0x50 => 0x8f1d, 0x51 => 0x98e2, 0x52 => 0x9a0e, 0x53 => 0x9b3c, 0x54 => 0x4e80, 0x55 => 0x507d, 0x56 => 0x5100, 0x57 => 0x5993, 0x58 => 0x5b9c, 0x59 => 0x622f, 0x5a => 0x6280, 0x5b => 0x64ec, 0x5c => 0x6b3a, 0x5d => 0x72a0, 0x5e => 0x7591, 0x5f => 0x7947, 0x60 => 0x7fa9, 0x61 => 0x87fb, 0x62 => 0x8abc, 0x63 => 0x8b70, 0x64 => 0x63ac, 0x65 => 0x83ca, 0x66 => 0x97a0, 0x67 => 0x5409, 0x68 => 0x5403, 0x69 => 0x55ab, 0x6a => 0x6854, 0x6b => 0x6a58, 0x6c => 0x8a70, 0x6d => 0x7827, 0x6e => 0x6775, 0x6f => 0x9ecd, 0x70 => 0x5374, 0x71 => 0x5ba2, 0x72 => 0x811a, 0x73 => 0x8650, 0x74 => 0x9006, 0x75 => 0x4e18, 0x76 => 0x4e45, 0x77 => 0x4ec7, 0x78 => 0x4f11, 0x79 => 0x53ca, 0x7a => 0x5438, 0x7b => 0x5bae, 0x7c => 0x5f13, 0x7d => 0x6025, 0x7e => 0x6551, 0x80 => 0x673d, 0x81 => 0x6c42, 0x82 => 0x6c72, 0x83 => 0x6ce3, 0x84 => 0x7078, 0x85 => 0x7403, 0x86 => 0x7a76, 0x87 => 0x7aae, 0x88 => 0x7b08, 0x89 => 0x7d1a, 0x8a => 0x7cfe, 0x8b => 0x7d66, 0x8c => 0x65e7, 0x8d => 0x725b, 0x8e => 0x53bb, 0x8f => 0x5c45, 0x90 => 0x5de8, 0x91 => 0x62d2, 0x92 => 0x62e0, 0x93 => 0x6319, 0x94 => 0x6e20, 0x95 => 0x865a, 0x96 => 0x8a31, 0x97 => 0x8ddd, 0x98 => 0x92f8, 0x99 => 0x6f01, 0x9a => 0x79a6, 0x9b => 0x9b5a, 0x9c => 0x4ea8, 0x9d => 0x4eab, 0x9e => 0x4eac, 0x9f => 0x4f9b, 0xa0 => 0x4fa0, 0xa1 => 0x50d1, 0xa2 => 0x5147, 0xa3 => 0x7af6, 0xa4 => 0x5171, 0xa5 => 0x51f6, 0xa6 => 0x5354, 0xa7 => 0x5321, 0xa8 => 0x537f, 0xa9 => 0x53eb, 0xaa => 0x55ac, 0xab => 0x5883, 0xac => 0x5ce1, 0xad => 0x5f37, 0xae => 0x5f4a, 0xaf => 0x602f, 0xb0 => 0x6050, 0xb1 => 0x606d, 0xb2 => 0x631f, 0xb3 => 0x6559, 0xb4 => 0x6a4b, 0xb5 => 0x6cc1, 0xb6 => 0x72c2, 0xb7 => 0x72ed, 0xb8 => 0x77ef, 0xb9 => 0x80f8, 0xba => 0x8105, 0xbb => 0x8208, 0xbc => 0x854e, 0xbd => 0x90f7, 0xbe => 0x93e1, 0xbf => 0x97ff, 0xc0 => 0x9957, 0xc1 => 0x9a5a, 0xc2 => 0x4ef0, 0xc3 => 0x51dd, 0xc4 => 0x5c2d, 0xc5 => 0x6681, 0xc6 => 0x696d, 0xc7 => 0x5c40, 0xc8 => 0x66f2, 0xc9 => 0x6975, 0xca => 0x7389, 0xcb => 0x6850, 0xcc => 0x7c81, 0xcd => 0x50c5, 0xce => 0x52e4, 0xcf => 0x5747, 0xd0 => 0x5dfe, 0xd1 => 0x9326, 0xd2 => 0x65a4, 0xd3 => 0x6b23, 0xd4 => 0x6b3d, 0xd5 => 0x7434, 0xd6 => 0x7981, 0xd7 => 0x79bd, 0xd8 => 0x7b4b, 0xd9 => 0x7dca, 0xda => 0x82b9, 0xdb => 0x83cc, 0xdc => 0x887f, 0xdd => 0x895f, 0xde => 0x8b39, 0xdf => 0x8fd1, 0xe0 => 0x91d1, 0xe1 => 0x541f, 0xe2 => 0x9280, 0xe3 => 0x4e5d, 0xe4 => 0x5036, 0xe5 => 0x53e5, 0xe6 => 0x533a, 0xe7 => 0x72d7, 0xe8 => 0x7396, 0xe9 => 0x77e9, 0xea => 0x82e6, 0xeb => 0x8eaf, 0xec => 0x99c6, 0xed => 0x99c8, 0xee => 0x99d2, 0xef => 0x5177, 0xf0 => 0x611a, 0xf1 => 0x865e, 0xf2 => 0x55b0, 0xf3 => 0x7a7a, 0xf4 => 0x5076, 0xf5 => 0x5bd3, 0xf6 => 0x9047, 0xf7 => 0x9685, 0xf8 => 0x4e32, 0xf9 => 0x6adb, 0xfa => 0x91e7, 0xfb => 0x5c51, 0xfc => 0x5c48, }, 0x8c => { 0x40 => 0x6398, 0x41 => 0x7a9f, 0x42 => 0x6c93, 0x43 => 0x9774, 0x44 => 0x8f61, 0x45 => 0x7aaa, 0x46 => 0x718a, 0x47 => 0x9688, 0x48 => 0x7c82, 0x49 => 0x6817, 0x4a => 0x7e70, 0x4b => 0x6851, 0x4c => 0x936c, 0x4d => 0x52f2, 0x4e => 0x541b, 0x4f => 0x85ab, 0x50 => 0x8a13, 0x51 => 0x7fa4, 0x52 => 0x8ecd, 0x53 => 0x90e1, 0x54 => 0x5366, 0x55 => 0x8888, 0x56 => 0x7941, 0x57 => 0x4fc2, 0x58 => 0x50be, 0x59 => 0x5211, 0x5a => 0x5144, 0x5b => 0x5553, 0x5c => 0x572d, 0x5d => 0x73ea, 0x5e => 0x578b, 0x5f => 0x5951, 0x60 => 0x5f62, 0x61 => 0x5f84, 0x62 => 0x6075, 0x63 => 0x6176, 0x64 => 0x6167, 0x65 => 0x61a9, 0x66 => 0x63b2, 0x67 => 0x643a, 0x68 => 0x656c, 0x69 => 0x666f, 0x6a => 0x6842, 0x6b => 0x6e13, 0x6c => 0x7566, 0x6d => 0x7a3d, 0x6e => 0x7cfb, 0x6f => 0x7d4c, 0x70 => 0x7d99, 0x71 => 0x7e4b, 0x72 => 0x7f6b, 0x73 => 0x830e, 0x74 => 0x834a, 0x75 => 0x86cd, 0x76 => 0x8a08, 0x77 => 0x8a63, 0x78 => 0x8b66, 0x79 => 0x8efd, 0x7a => 0x981a, 0x7b => 0x9d8f, 0x7c => 0x82b8, 0x7d => 0x8fce, 0x7e => 0x9be8, 0x80 => 0x5287, 0x81 => 0x621f, 0x82 => 0x6483, 0x83 => 0x6fc0, 0x84 => 0x9699, 0x85 => 0x6841, 0x86 => 0x5091, 0x87 => 0x6b20, 0x88 => 0x6c7a, 0x89 => 0x6f54, 0x8a => 0x7a74, 0x8b => 0x7d50, 0x8c => 0x8840, 0x8d => 0x8a23, 0x8e => 0x6708, 0x8f => 0x4ef6, 0x90 => 0x5039, 0x91 => 0x5026, 0x92 => 0x5065, 0x93 => 0x517c, 0x94 => 0x5238, 0x95 => 0x5263, 0x96 => 0x55a7, 0x97 => 0x570f, 0x98 => 0x5805, 0x99 => 0x5acc, 0x9a => 0x5efa, 0x9b => 0x61b2, 0x9c => 0x61f8, 0x9d => 0x62f3, 0x9e => 0x6372, 0x9f => 0x691c, 0xa0 => 0x6a29, 0xa1 => 0x727d, 0xa2 => 0x72ac, 0xa3 => 0x732e, 0xa4 => 0x7814, 0xa5 => 0x786f, 0xa6 => 0x7d79, 0xa7 => 0x770c, 0xa8 => 0x80a9, 0xa9 => 0x898b, 0xaa => 0x8b19, 0xab => 0x8ce2, 0xac => 0x8ed2, 0xad => 0x9063, 0xae => 0x9375, 0xaf => 0x967a, 0xb0 => 0x9855, 0xb1 => 0x9a13, 0xb2 => 0x9e78, 0xb3 => 0x5143, 0xb4 => 0x539f, 0xb5 => 0x53b3, 0xb6 => 0x5e7b, 0xb7 => 0x5f26, 0xb8 => 0x6e1b, 0xb9 => 0x6e90, 0xba => 0x7384, 0xbb => 0x73fe, 0xbc => 0x7d43, 0xbd => 0x8237, 0xbe => 0x8a00, 0xbf => 0x8afa, 0xc0 => 0x9650, 0xc1 => 0x4e4e, 0xc2 => 0x500b, 0xc3 => 0x53e4, 0xc4 => 0x547c, 0xc5 => 0x56fa, 0xc6 => 0x59d1, 0xc7 => 0x5b64, 0xc8 => 0x5df1, 0xc9 => 0x5eab, 0xca => 0x5f27, 0xcb => 0x6238, 0xcc => 0x6545, 0xcd => 0x67af, 0xce => 0x6e56, 0xcf => 0x72d0, 0xd0 => 0x7cca, 0xd1 => 0x88b4, 0xd2 => 0x80a1, 0xd3 => 0x80e1, 0xd4 => 0x83f0, 0xd5 => 0x864e, 0xd6 => 0x8a87, 0xd7 => 0x8de8, 0xd8 => 0x9237, 0xd9 => 0x96c7, 0xda => 0x9867, 0xdb => 0x9f13, 0xdc => 0x4e94, 0xdd => 0x4e92, 0xde => 0x4f0d, 0xdf => 0x5348, 0xe0 => 0x5449, 0xe1 => 0x543e, 0xe2 => 0x5a2f, 0xe3 => 0x5f8c, 0xe4 => 0x5fa1, 0xe5 => 0x609f, 0xe6 => 0x68a7, 0xe7 => 0x6a8e, 0xe8 => 0x745a, 0xe9 => 0x7881, 0xea => 0x8a9e, 0xeb => 0x8aa4, 0xec => 0x8b77, 0xed => 0x9190, 0xee => 0x4e5e, 0xef => 0x9bc9, 0xf0 => 0x4ea4, 0xf1 => 0x4f7c, 0xf2 => 0x4faf, 0xf3 => 0x5019, 0xf4 => 0x5016, 0xf5 => 0x5149, 0xf6 => 0x516c, 0xf7 => 0x529f, 0xf8 => 0x52b9, 0xf9 => 0x52fe, 0xfa => 0x539a, 0xfb => 0x53e3, 0xfc => 0x5411, }, 0x8d => { 0x40 => 0x540e, 0x41 => 0x5589, 0x42 => 0x5751, 0x43 => 0x57a2, 0x44 => 0x597d, 0x45 => 0x5b54, 0x46 => 0x5b5d, 0x47 => 0x5b8f, 0x48 => 0x5de5, 0x49 => 0x5de7, 0x4a => 0x5df7, 0x4b => 0x5e78, 0x4c => 0x5e83, 0x4d => 0x5e9a, 0x4e => 0x5eb7, 0x4f => 0x5f18, 0x50 => 0x6052, 0x51 => 0x614c, 0x52 => 0x6297, 0x53 => 0x62d8, 0x54 => 0x63a7, 0x55 => 0x653b, 0x56 => 0x6602, 0x57 => 0x6643, 0x58 => 0x66f4, 0x59 => 0x676d, 0x5a => 0x6821, 0x5b => 0x6897, 0x5c => 0x69cb, 0x5d => 0x6c5f, 0x5e => 0x6d2a, 0x5f => 0x6d69, 0x60 => 0x6e2f, 0x61 => 0x6e9d, 0x62 => 0x7532, 0x63 => 0x7687, 0x64 => 0x786c, 0x65 => 0x7a3f, 0x66 => 0x7ce0, 0x67 => 0x7d05, 0x68 => 0x7d18, 0x69 => 0x7d5e, 0x6a => 0x7db1, 0x6b => 0x8015, 0x6c => 0x8003, 0x6d => 0x80af, 0x6e => 0x80b1, 0x6f => 0x8154, 0x70 => 0x818f, 0x71 => 0x822a, 0x72 => 0x8352, 0x73 => 0x884c, 0x74 => 0x8861, 0x75 => 0x8b1b, 0x76 => 0x8ca2, 0x77 => 0x8cfc, 0x78 => 0x90ca, 0x79 => 0x9175, 0x7a => 0x9271, 0x7b => 0x783f, 0x7c => 0x92fc, 0x7d => 0x95a4, 0x7e => 0x964d, 0x80 => 0x9805, 0x81 => 0x9999, 0x82 => 0x9ad8, 0x83 => 0x9d3b, 0x84 => 0x525b, 0x85 => 0x52ab, 0x86 => 0x53f7, 0x87 => 0x5408, 0x88 => 0x58d5, 0x89 => 0x62f7, 0x8a => 0x6fe0, 0x8b => 0x8c6a, 0x8c => 0x8f5f, 0x8d => 0x9eb9, 0x8e => 0x514b, 0x8f => 0x523b, 0x90 => 0x544a, 0x91 => 0x56fd, 0x92 => 0x7a40, 0x93 => 0x9177, 0x94 => 0x9d60, 0x95 => 0x9ed2, 0x96 => 0x7344, 0x97 => 0x6f09, 0x98 => 0x8170, 0x99 => 0x7511, 0x9a => 0x5ffd, 0x9b => 0x60da, 0x9c => 0x9aa8, 0x9d => 0x72db, 0x9e => 0x8fbc, 0x9f => 0x6b64, 0xa0 => 0x9803, 0xa1 => 0x4eca, 0xa2 => 0x56f0, 0xa3 => 0x5764, 0xa4 => 0x58be, 0xa5 => 0x5a5a, 0xa6 => 0x6068, 0xa7 => 0x61c7, 0xa8 => 0x660f, 0xa9 => 0x6606, 0xaa => 0x6839, 0xab => 0x68b1, 0xac => 0x6df7, 0xad => 0x75d5, 0xae => 0x7d3a, 0xaf => 0x826e, 0xb0 => 0x9b42, 0xb1 => 0x4e9b, 0xb2 => 0x4f50, 0xb3 => 0x53c9, 0xb4 => 0x5506, 0xb5 => 0x5d6f, 0xb6 => 0x5de6, 0xb7 => 0x5dee, 0xb8 => 0x67fb, 0xb9 => 0x6c99, 0xba => 0x7473, 0xbb => 0x7802, 0xbc => 0x8a50, 0xbd => 0x9396, 0xbe => 0x88df, 0xbf => 0x5750, 0xc0 => 0x5ea7, 0xc1 => 0x632b, 0xc2 => 0x50b5, 0xc3 => 0x50ac, 0xc4 => 0x518d, 0xc5 => 0x6700, 0xc6 => 0x54c9, 0xc7 => 0x585e, 0xc8 => 0x59bb, 0xc9 => 0x5bb0, 0xca => 0x5f69, 0xcb => 0x624d, 0xcc => 0x63a1, 0xcd => 0x683d, 0xce => 0x6b73, 0xcf => 0x6e08, 0xd0 => 0x707d, 0xd1 => 0x91c7, 0xd2 => 0x7280, 0xd3 => 0x7815, 0xd4 => 0x7826, 0xd5 => 0x796d, 0xd6 => 0x658e, 0xd7 => 0x7d30, 0xd8 => 0x83dc, 0xd9 => 0x88c1, 0xda => 0x8f09, 0xdb => 0x969b, 0xdc => 0x5264, 0xdd => 0x5728, 0xde => 0x6750, 0xdf => 0x7f6a, 0xe0 => 0x8ca1, 0xe1 => 0x51b4, 0xe2 => 0x5742, 0xe3 => 0x962a, 0xe4 => 0x583a, 0xe5 => 0x698a, 0xe6 => 0x80b4, 0xe7 => 0x54b2, 0xe8 => 0x5d0e, 0xe9 => 0x57fc, 0xea => 0x7895, 0xeb => 0x9dfa, 0xec => 0x4f5c, 0xed => 0x524a, 0xee => 0x548b, 0xef => 0x643e, 0xf0 => 0x6628, 0xf1 => 0x6714, 0xf2 => 0x67f5, 0xf3 => 0x7a84, 0xf4 => 0x7b56, 0xf5 => 0x7d22, 0xf6 => 0x932f, 0xf7 => 0x685c, 0xf8 => 0x9bad, 0xf9 => 0x7b39, 0xfa => 0x5319, 0xfb => 0x518a, 0xfc => 0x5237, }, 0x8e => { 0x40 => 0x5bdf, 0x41 => 0x62f6, 0x42 => 0x64ae, 0x43 => 0x64e6, 0x44 => 0x672d, 0x45 => 0x6bba, 0x46 => 0x85a9, 0x47 => 0x96d1, 0x48 => 0x7690, 0x49 => 0x9bd6, 0x4a => 0x634c, 0x4b => 0x9306, 0x4c => 0x9bab, 0x4d => 0x76bf, 0x4e => 0x6652, 0x4f => 0x4e09, 0x50 => 0x5098, 0x51 => 0x53c2, 0x52 => 0x5c71, 0x53 => 0x60e8, 0x54 => 0x6492, 0x55 => 0x6563, 0x56 => 0x685f, 0x57 => 0x71e6, 0x58 => 0x73ca, 0x59 => 0x7523, 0x5a => 0x7b97, 0x5b => 0x7e82, 0x5c => 0x8695, 0x5d => 0x8b83, 0x5e => 0x8cdb, 0x5f => 0x9178, 0x60 => 0x9910, 0x61 => 0x65ac, 0x62 => 0x66ab, 0x63 => 0x6b8b, 0x64 => 0x4ed5, 0x65 => 0x4ed4, 0x66 => 0x4f3a, 0x67 => 0x4f7f, 0x68 => 0x523a, 0x69 => 0x53f8, 0x6a => 0x53f2, 0x6b => 0x55e3, 0x6c => 0x56db, 0x6d => 0x58eb, 0x6e => 0x59cb, 0x6f => 0x59c9, 0x70 => 0x59ff, 0x71 => 0x5b50, 0x72 => 0x5c4d, 0x73 => 0x5e02, 0x74 => 0x5e2b, 0x75 => 0x5fd7, 0x76 => 0x601d, 0x77 => 0x6307, 0x78 => 0x652f, 0x79 => 0x5b5c, 0x7a => 0x65af, 0x7b => 0x65bd, 0x7c => 0x65e8, 0x7d => 0x679d, 0x7e => 0x6b62, 0x80 => 0x6b7b, 0x81 => 0x6c0f, 0x82 => 0x7345, 0x83 => 0x7949, 0x84 => 0x79c1, 0x85 => 0x7cf8, 0x86 => 0x7d19, 0x87 => 0x7d2b, 0x88 => 0x80a2, 0x89 => 0x8102, 0x8a => 0x81f3, 0x8b => 0x8996, 0x8c => 0x8a5e, 0x8d => 0x8a69, 0x8e => 0x8a66, 0x8f => 0x8a8c, 0x90 => 0x8aee, 0x91 => 0x8cc7, 0x92 => 0x8cdc, 0x93 => 0x96cc, 0x94 => 0x98fc, 0x95 => 0x6b6f, 0x96 => 0x4e8b, 0x97 => 0x4f3c, 0x98 => 0x4f8d, 0x99 => 0x5150, 0x9a => 0x5b57, 0x9b => 0x5bfa, 0x9c => 0x6148, 0x9d => 0x6301, 0x9e => 0x6642, 0x9f => 0x6b21, 0xa0 => 0x6ecb, 0xa1 => 0x6cbb, 0xa2 => 0x723e, 0xa3 => 0x74bd, 0xa4 => 0x75d4, 0xa5 => 0x78c1, 0xa6 => 0x793a, 0xa7 => 0x800c, 0xa8 => 0x8033, 0xa9 => 0x81ea, 0xaa => 0x8494, 0xab => 0x8f9e, 0xac => 0x6c50, 0xad => 0x9e7f, 0xae => 0x5f0f, 0xaf => 0x8b58, 0xb0 => 0x9d2b, 0xb1 => 0x7afa, 0xb2 => 0x8ef8, 0xb3 => 0x5b8d, 0xb4 => 0x96eb, 0xb5 => 0x4e03, 0xb6 => 0x53f1, 0xb7 => 0x57f7, 0xb8 => 0x5931, 0xb9 => 0x5ac9, 0xba => 0x5ba4, 0xbb => 0x6089, 0xbc => 0x6e7f, 0xbd => 0x6f06, 0xbe => 0x75be, 0xbf => 0x8cea, 0xc0 => 0x5b9f, 0xc1 => 0x8500, 0xc2 => 0x7be0, 0xc3 => 0x5072, 0xc4 => 0x67f4, 0xc5 => 0x829d, 0xc6 => 0x5c61, 0xc7 => 0x854a, 0xc8 => 0x7e1e, 0xc9 => 0x820e, 0xca => 0x5199, 0xcb => 0x5c04, 0xcc => 0x6368, 0xcd => 0x8d66, 0xce => 0x659c, 0xcf => 0x716e, 0xd0 => 0x793e, 0xd1 => 0x7d17, 0xd2 => 0x8005, 0xd3 => 0x8b1d, 0xd4 => 0x8eca, 0xd5 => 0x906e, 0xd6 => 0x86c7, 0xd7 => 0x90aa, 0xd8 => 0x501f, 0xd9 => 0x52fa, 0xda => 0x5c3a, 0xdb => 0x6753, 0xdc => 0x707c, 0xdd => 0x7235, 0xde => 0x914c, 0xdf => 0x91c8, 0xe0 => 0x932b, 0xe1 => 0x82e5, 0xe2 => 0x5bc2, 0xe3 => 0x5f31, 0xe4 => 0x60f9, 0xe5 => 0x4e3b, 0xe6 => 0x53d6, 0xe7 => 0x5b88, 0xe8 => 0x624b, 0xe9 => 0x6731, 0xea => 0x6b8a, 0xeb => 0x72e9, 0xec => 0x73e0, 0xed => 0x7a2e, 0xee => 0x816b, 0xef => 0x8da3, 0xf0 => 0x9152, 0xf1 => 0x9996, 0xf2 => 0x5112, 0xf3 => 0x53d7, 0xf4 => 0x546a, 0xf5 => 0x5bff, 0xf6 => 0x6388, 0xf7 => 0x6a39, 0xf8 => 0x7dac, 0xf9 => 0x9700, 0xfa => 0x56da, 0xfb => 0x53ce, 0xfc => 0x5468, }, 0x8f => { 0x40 => 0x5b97, 0x41 => 0x5c31, 0x42 => 0x5dde, 0x43 => 0x4fee, 0x44 => 0x6101, 0x45 => 0x62fe, 0x46 => 0x6d32, 0x47 => 0x79c0, 0x48 => 0x79cb, 0x49 => 0x7d42, 0x4a => 0x7e4d, 0x4b => 0x7fd2, 0x4c => 0x81ed, 0x4d => 0x821f, 0x4e => 0x8490, 0x4f => 0x8846, 0x50 => 0x8972, 0x51 => 0x8b90, 0x52 => 0x8e74, 0x53 => 0x8f2f, 0x54 => 0x9031, 0x55 => 0x914b, 0x56 => 0x916c, 0x57 => 0x96c6, 0x58 => 0x919c, 0x59 => 0x4ec0, 0x5a => 0x4f4f, 0x5b => 0x5145, 0x5c => 0x5341, 0x5d => 0x5f93, 0x5e => 0x620e, 0x5f => 0x67d4, 0x60 => 0x6c41, 0x61 => 0x6e0b, 0x62 => 0x7363, 0x63 => 0x7e26, 0x64 => 0x91cd, 0x65 => 0x9283, 0x66 => 0x53d4, 0x67 => 0x5919, 0x68 => 0x5bbf, 0x69 => 0x6dd1, 0x6a => 0x795d, 0x6b => 0x7e2e, 0x6c => 0x7c9b, 0x6d => 0x587e, 0x6e => 0x719f, 0x6f => 0x51fa, 0x70 => 0x8853, 0x71 => 0x8ff0, 0x72 => 0x4fca, 0x73 => 0x5cfb, 0x74 => 0x6625, 0x75 => 0x77ac, 0x76 => 0x7ae3, 0x77 => 0x821c, 0x78 => 0x99ff, 0x79 => 0x51c6, 0x7a => 0x5faa, 0x7b => 0x65ec, 0x7c => 0x696f, 0x7d => 0x6b89, 0x7e => 0x6df3, 0x80 => 0x6e96, 0x81 => 0x6f64, 0x82 => 0x76fe, 0x83 => 0x7d14, 0x84 => 0x5de1, 0x85 => 0x9075, 0x86 => 0x9187, 0x87 => 0x9806, 0x88 => 0x51e6, 0x89 => 0x521d, 0x8a => 0x6240, 0x8b => 0x6691, 0x8c => 0x66d9, 0x8d => 0x6e1a, 0x8e => 0x5eb6, 0x8f => 0x7dd2, 0x90 => 0x7f72, 0x91 => 0x66f8, 0x92 => 0x85af, 0x93 => 0x85f7, 0x94 => 0x8af8, 0x95 => 0x52a9, 0x96 => 0x53d9, 0x97 => 0x5973, 0x98 => 0x5e8f, 0x99 => 0x5f90, 0x9a => 0x6055, 0x9b => 0x92e4, 0x9c => 0x9664, 0x9d => 0x50b7, 0x9e => 0x511f, 0x9f => 0x52dd, 0xa0 => 0x5320, 0xa1 => 0x5347, 0xa2 => 0x53ec, 0xa3 => 0x54e8, 0xa4 => 0x5546, 0xa5 => 0x5531, 0xa6 => 0x5617, 0xa7 => 0x5968, 0xa8 => 0x59be, 0xa9 => 0x5a3c, 0xaa => 0x5bb5, 0xab => 0x5c06, 0xac => 0x5c0f, 0xad => 0x5c11, 0xae => 0x5c1a, 0xaf => 0x5e84, 0xb0 => 0x5e8a, 0xb1 => 0x5ee0, 0xb2 => 0x5f70, 0xb3 => 0x627f, 0xb4 => 0x6284, 0xb5 => 0x62db, 0xb6 => 0x638c, 0xb7 => 0x6377, 0xb8 => 0x6607, 0xb9 => 0x660c, 0xba => 0x662d, 0xbb => 0x6676, 0xbc => 0x677e, 0xbd => 0x68a2, 0xbe => 0x6a1f, 0xbf => 0x6a35, 0xc0 => 0x6cbc, 0xc1 => 0x6d88, 0xc2 => 0x6e09, 0xc3 => 0x6e58, 0xc4 => 0x713c, 0xc5 => 0x7126, 0xc6 => 0x7167, 0xc7 => 0x75c7, 0xc8 => 0x7701, 0xc9 => 0x785d, 0xca => 0x7901, 0xcb => 0x7965, 0xcc => 0x79f0, 0xcd => 0x7ae0, 0xce => 0x7b11, 0xcf => 0x7ca7, 0xd0 => 0x7d39, 0xd1 => 0x8096, 0xd2 => 0x83d6, 0xd3 => 0x848b, 0xd4 => 0x8549, 0xd5 => 0x885d, 0xd6 => 0x88f3, 0xd7 => 0x8a1f, 0xd8 => 0x8a3c, 0xd9 => 0x8a54, 0xda => 0x8a73, 0xdb => 0x8c61, 0xdc => 0x8cde, 0xdd => 0x91a4, 0xde => 0x9266, 0xdf => 0x937e, 0xe0 => 0x9418, 0xe1 => 0x969c, 0xe2 => 0x9798, 0xe3 => 0x4e0a, 0xe4 => 0x4e08, 0xe5 => 0x4e1e, 0xe6 => 0x4e57, 0xe7 => 0x5197, 0xe8 => 0x5270, 0xe9 => 0x57ce, 0xea => 0x5834, 0xeb => 0x58cc, 0xec => 0x5b22, 0xed => 0x5e38, 0xee => 0x60c5, 0xef => 0x64fe, 0xf0 => 0x6761, 0xf1 => 0x6756, 0xf2 => 0x6d44, 0xf3 => 0x72b6, 0xf4 => 0x7573, 0xf5 => 0x7a63, 0xf6 => 0x84b8, 0xf7 => 0x8b72, 0xf8 => 0x91b8, 0xf9 => 0x9320, 0xfa => 0x5631, 0xfb => 0x57f4, 0xfc => 0x98fe, }, 0x90 => { 0x40 => 0x62ed, 0x41 => 0x690d, 0x42 => 0x6b96, 0x43 => 0x71ed, 0x44 => 0x7e54, 0x45 => 0x8077, 0x46 => 0x8272, 0x47 => 0x89e6, 0x48 => 0x98df, 0x49 => 0x8755, 0x4a => 0x8fb1, 0x4b => 0x5c3b, 0x4c => 0x4f38, 0x4d => 0x4fe1, 0x4e => 0x4fb5, 0x4f => 0x5507, 0x50 => 0x5a20, 0x51 => 0x5bdd, 0x52 => 0x5be9, 0x53 => 0x5fc3, 0x54 => 0x614e, 0x55 => 0x632f, 0x56 => 0x65b0, 0x57 => 0x664b, 0x58 => 0x68ee, 0x59 => 0x699b, 0x5a => 0x6d78, 0x5b => 0x6df1, 0x5c => 0x7533, 0x5d => 0x75b9, 0x5e => 0x771f, 0x5f => 0x795e, 0x60 => 0x79e6, 0x61 => 0x7d33, 0x62 => 0x81e3, 0x63 => 0x82af, 0x64 => 0x85aa, 0x65 => 0x89aa, 0x66 => 0x8a3a, 0x67 => 0x8eab, 0x68 => 0x8f9b, 0x69 => 0x9032, 0x6a => 0x91dd, 0x6b => 0x9707, 0x6c => 0x4eba, 0x6d => 0x4ec1, 0x6e => 0x5203, 0x6f => 0x5875, 0x70 => 0x58ec, 0x71 => 0x5c0b, 0x72 => 0x751a, 0x73 => 0x5c3d, 0x74 => 0x814e, 0x75 => 0x8a0a, 0x76 => 0x8fc5, 0x77 => 0x9663, 0x78 => 0x976d, 0x79 => 0x7b25, 0x7a => 0x8acf, 0x7b => 0x9808, 0x7c => 0x9162, 0x7d => 0x56f3, 0x7e => 0x53a8, 0x80 => 0x9017, 0x81 => 0x5439, 0x82 => 0x5782, 0x83 => 0x5e25, 0x84 => 0x63a8, 0x85 => 0x6c34, 0x86 => 0x708a, 0x87 => 0x7761, 0x88 => 0x7c8b, 0x89 => 0x7fe0, 0x8a => 0x8870, 0x8b => 0x9042, 0x8c => 0x9154, 0x8d => 0x9310, 0x8e => 0x9318, 0x8f => 0x968f, 0x90 => 0x745e, 0x91 => 0x9ac4, 0x92 => 0x5d07, 0x93 => 0x5d69, 0x94 => 0x6570, 0x95 => 0x67a2, 0x96 => 0x8da8, 0x97 => 0x96db, 0x98 => 0x636e, 0x99 => 0x6749, 0x9a => 0x6919, 0x9b => 0x83c5, 0x9c => 0x9817, 0x9d => 0x96c0, 0x9e => 0x88fe, 0x9f => 0x6f84, 0xa0 => 0x647a, 0xa1 => 0x5bf8, 0xa2 => 0x4e16, 0xa3 => 0x702c, 0xa4 => 0x755d, 0xa5 => 0x662f, 0xa6 => 0x51c4, 0xa7 => 0x5236, 0xa8 => 0x52e2, 0xa9 => 0x59d3, 0xaa => 0x5f81, 0xab => 0x6027, 0xac => 0x6210, 0xad => 0x653f, 0xae => 0x6574, 0xaf => 0x661f, 0xb0 => 0x6674, 0xb1 => 0x68f2, 0xb2 => 0x6816, 0xb3 => 0x6b63, 0xb4 => 0x6e05, 0xb5 => 0x7272, 0xb6 => 0x751f, 0xb7 => 0x76db, 0xb8 => 0x7cbe, 0xb9 => 0x8056, 0xba => 0x58f0, 0xbb => 0x88fd, 0xbc => 0x897f, 0xbd => 0x8aa0, 0xbe => 0x8a93, 0xbf => 0x8acb, 0xc0 => 0x901d, 0xc1 => 0x9192, 0xc2 => 0x9752, 0xc3 => 0x9759, 0xc4 => 0x6589, 0xc5 => 0x7a0e, 0xc6 => 0x8106, 0xc7 => 0x96bb, 0xc8 => 0x5e2d, 0xc9 => 0x60dc, 0xca => 0x621a, 0xcb => 0x65a5, 0xcc => 0x6614, 0xcd => 0x6790, 0xce => 0x77f3, 0xcf => 0x7a4d, 0xd0 => 0x7c4d, 0xd1 => 0x7e3e, 0xd2 => 0x810a, 0xd3 => 0x8cac, 0xd4 => 0x8d64, 0xd5 => 0x8de1, 0xd6 => 0x8e5f, 0xd7 => 0x78a9, 0xd8 => 0x5207, 0xd9 => 0x62d9, 0xda => 0x63a5, 0xdb => 0x6442, 0xdc => 0x6298, 0xdd => 0x8a2d, 0xde => 0x7a83, 0xdf => 0x7bc0, 0xe0 => 0x8aac, 0xe1 => 0x96ea, 0xe2 => 0x7d76, 0xe3 => 0x820c, 0xe4 => 0x8749, 0xe5 => 0x4ed9, 0xe6 => 0x5148, 0xe7 => 0x5343, 0xe8 => 0x5360, 0xe9 => 0x5ba3, 0xea => 0x5c02, 0xeb => 0x5c16, 0xec => 0x5ddd, 0xed => 0x6226, 0xee => 0x6247, 0xef => 0x64b0, 0xf0 => 0x6813, 0xf1 => 0x6834, 0xf2 => 0x6cc9, 0xf3 => 0x6d45, 0xf4 => 0x6d17, 0xf5 => 0x67d3, 0xf6 => 0x6f5c, 0xf7 => 0x714e, 0xf8 => 0x717d, 0xf9 => 0x65cb, 0xfa => 0x7a7f, 0xfb => 0x7bad, 0xfc => 0x7dda, }, 0x91 => { 0x40 => 0x7e4a, 0x41 => 0x7fa8, 0x42 => 0x817a, 0x43 => 0x821b, 0x44 => 0x8239, 0x45 => 0x85a6, 0x46 => 0x8a6e, 0x47 => 0x8cce, 0x48 => 0x8df5, 0x49 => 0x9078, 0x4a => 0x9077, 0x4b => 0x92ad, 0x4c => 0x9291, 0x4d => 0x9583, 0x4e => 0x9bae, 0x4f => 0x524d, 0x50 => 0x5584, 0x51 => 0x6f38, 0x52 => 0x7136, 0x53 => 0x5168, 0x54 => 0x7985, 0x55 => 0x7e55, 0x56 => 0x81b3, 0x57 => 0x7cce, 0x58 => 0x564c, 0x59 => 0x5851, 0x5a => 0x5ca8, 0x5b => 0x63aa, 0x5c => 0x66fe, 0x5d => 0x66fd, 0x5e => 0x695a, 0x5f => 0x72d9, 0x60 => 0x758f, 0x61 => 0x758e, 0x62 => 0x790e, 0x63 => 0x7956, 0x64 => 0x79df, 0x65 => 0x7c97, 0x66 => 0x7d20, 0x67 => 0x7d44, 0x68 => 0x8607, 0x69 => 0x8a34, 0x6a => 0x963b, 0x6b => 0x9061, 0x6c => 0x9f20, 0x6d => 0x50e7, 0x6e => 0x5275, 0x6f => 0x53cc, 0x70 => 0x53e2, 0x71 => 0x5009, 0x72 => 0x55aa, 0x73 => 0x58ee, 0x74 => 0x594f, 0x75 => 0x723d, 0x76 => 0x5b8b, 0x77 => 0x5c64, 0x78 => 0x531d, 0x79 => 0x60e3, 0x7a => 0x60f3, 0x7b => 0x635c, 0x7c => 0x6383, 0x7d => 0x633f, 0x7e => 0x63bb, 0x80 => 0x64cd, 0x81 => 0x65e9, 0x82 => 0x66f9, 0x83 => 0x5de3, 0x84 => 0x69cd, 0x85 => 0x69fd, 0x86 => 0x6f15, 0x87 => 0x71e5, 0x88 => 0x4e89, 0x89 => 0x75e9, 0x8a => 0x76f8, 0x8b => 0x7a93, 0x8c => 0x7cdf, 0x8d => 0x7dcf, 0x8e => 0x7d9c, 0x8f => 0x8061, 0x90 => 0x8349, 0x91 => 0x8358, 0x92 => 0x846c, 0x93 => 0x84bc, 0x94 => 0x85fb, 0x95 => 0x88c5, 0x96 => 0x8d70, 0x97 => 0x9001, 0x98 => 0x906d, 0x99 => 0x9397, 0x9a => 0x971c, 0x9b => 0x9a12, 0x9c => 0x50cf, 0x9d => 0x5897, 0x9e => 0x618e, 0x9f => 0x81d3, 0xa0 => 0x8535, 0xa1 => 0x8d08, 0xa2 => 0x9020, 0xa3 => 0x4fc3, 0xa4 => 0x5074, 0xa5 => 0x5247, 0xa6 => 0x5373, 0xa7 => 0x606f, 0xa8 => 0x6349, 0xa9 => 0x675f, 0xaa => 0x6e2c, 0xab => 0x8db3, 0xac => 0x901f, 0xad => 0x4fd7, 0xae => 0x5c5e, 0xaf => 0x8cca, 0xb0 => 0x65cf, 0xb1 => 0x7d9a, 0xb2 => 0x5352, 0xb3 => 0x8896, 0xb4 => 0x5176, 0xb5 => 0x63c3, 0xb6 => 0x5b58, 0xb7 => 0x5b6b, 0xb8 => 0x5c0a, 0xb9 => 0x640d, 0xba => 0x6751, 0xbb => 0x905c, 0xbc => 0x4ed6, 0xbd => 0x591a, 0xbe => 0x592a, 0xbf => 0x6c70, 0xc0 => 0x8a51, 0xc1 => 0x553e, 0xc2 => 0x5815, 0xc3 => 0x59a5, 0xc4 => 0x60f0, 0xc5 => 0x6253, 0xc6 => 0x67c1, 0xc7 => 0x8235, 0xc8 => 0x6955, 0xc9 => 0x9640, 0xca => 0x99c4, 0xcb => 0x9a28, 0xcc => 0x4f53, 0xcd => 0x5806, 0xce => 0x5bfe, 0xcf => 0x8010, 0xd0 => 0x5cb1, 0xd1 => 0x5e2f, 0xd2 => 0x5f85, 0xd3 => 0x6020, 0xd4 => 0x614b, 0xd5 => 0x6234, 0xd6 => 0x66ff, 0xd7 => 0x6cf0, 0xd8 => 0x6ede, 0xd9 => 0x80ce, 0xda => 0x817f, 0xdb => 0x82d4, 0xdc => 0x888b, 0xdd => 0x8cb8, 0xde => 0x9000, 0xdf => 0x902e, 0xe0 => 0x968a, 0xe1 => 0x9edb, 0xe2 => 0x9bdb, 0xe3 => 0x4ee3, 0xe4 => 0x53f0, 0xe5 => 0x5927, 0xe6 => 0x7b2c, 0xe7 => 0x918d, 0xe8 => 0x984c, 0xe9 => 0x9df9, 0xea => 0x6edd, 0xeb => 0x7027, 0xec => 0x5353, 0xed => 0x5544, 0xee => 0x5b85, 0xef => 0x6258, 0xf0 => 0x629e, 0xf1 => 0x62d3, 0xf2 => 0x6ca2, 0xf3 => 0x6fef, 0xf4 => 0x7422, 0xf5 => 0x8a17, 0xf6 => 0x9438, 0xf7 => 0x6fc1, 0xf8 => 0x8afe, 0xf9 => 0x8338, 0xfa => 0x51e7, 0xfb => 0x86f8, 0xfc => 0x53ea, }, 0x92 => { 0x40 => 0x53e9, 0x41 => 0x4f46, 0x42 => 0x9054, 0x43 => 0x8fb0, 0x44 => 0x596a, 0x45 => 0x8131, 0x46 => 0x5dfd, 0x47 => 0x7aea, 0x48 => 0x8fbf, 0x49 => 0x68da, 0x4a => 0x8c37, 0x4b => 0x72f8, 0x4c => 0x9c48, 0x4d => 0x6a3d, 0x4e => 0x8ab0, 0x4f => 0x4e39, 0x50 => 0x5358, 0x51 => 0x5606, 0x52 => 0x5766, 0x53 => 0x62c5, 0x54 => 0x63a2, 0x55 => 0x65e6, 0x56 => 0x6b4e, 0x57 => 0x6de1, 0x58 => 0x6e5b, 0x59 => 0x70ad, 0x5a => 0x77ed, 0x5b => 0x7aef, 0x5c => 0x7baa, 0x5d => 0x7dbb, 0x5e => 0x803d, 0x5f => 0x80c6, 0x60 => 0x86cb, 0x61 => 0x8a95, 0x62 => 0x935b, 0x63 => 0x56e3, 0x64 => 0x58c7, 0x65 => 0x5f3e, 0x66 => 0x65ad, 0x67 => 0x6696, 0x68 => 0x6a80, 0x69 => 0x6bb5, 0x6a => 0x7537, 0x6b => 0x8ac7, 0x6c => 0x5024, 0x6d => 0x77e5, 0x6e => 0x5730, 0x6f => 0x5f1b, 0x70 => 0x6065, 0x71 => 0x667a, 0x72 => 0x6c60, 0x73 => 0x75f4, 0x74 => 0x7a1a, 0x75 => 0x7f6e, 0x76 => 0x81f4, 0x77 => 0x8718, 0x78 => 0x9045, 0x79 => 0x99b3, 0x7a => 0x7bc9, 0x7b => 0x755c, 0x7c => 0x7af9, 0x7d => 0x7b51, 0x7e => 0x84c4, 0x80 => 0x9010, 0x81 => 0x79e9, 0x82 => 0x7a92, 0x83 => 0x8336, 0x84 => 0x5ae1, 0x85 => 0x7740, 0x86 => 0x4e2d, 0x87 => 0x4ef2, 0x88 => 0x5b99, 0x89 => 0x5fe0, 0x8a => 0x62bd, 0x8b => 0x663c, 0x8c => 0x67f1, 0x8d => 0x6ce8, 0x8e => 0x866b, 0x8f => 0x8877, 0x90 => 0x8a3b, 0x91 => 0x914e, 0x92 => 0x92f3, 0x93 => 0x99d0, 0x94 => 0x6a17, 0x95 => 0x7026, 0x96 => 0x732a, 0x97 => 0x82e7, 0x98 => 0x8457, 0x99 => 0x8caf, 0x9a => 0x4e01, 0x9b => 0x5146, 0x9c => 0x51cb, 0x9d => 0x558b, 0x9e => 0x5bf5, 0x9f => 0x5e16, 0xa0 => 0x5e33, 0xa1 => 0x5e81, 0xa2 => 0x5f14, 0xa3 => 0x5f35, 0xa4 => 0x5f6b, 0xa5 => 0x5fb4, 0xa6 => 0x61f2, 0xa7 => 0x6311, 0xa8 => 0x66a2, 0xa9 => 0x671d, 0xaa => 0x6f6e, 0xab => 0x7252, 0xac => 0x753a, 0xad => 0x773a, 0xae => 0x8074, 0xaf => 0x8139, 0xb0 => 0x8178, 0xb1 => 0x8776, 0xb2 => 0x8abf, 0xb3 => 0x8adc, 0xb4 => 0x8d85, 0xb5 => 0x8df3, 0xb6 => 0x929a, 0xb7 => 0x9577, 0xb8 => 0x9802, 0xb9 => 0x9ce5, 0xba => 0x52c5, 0xbb => 0x6357, 0xbc => 0x76f4, 0xbd => 0x6715, 0xbe => 0x6c88, 0xbf => 0x73cd, 0xc0 => 0x8cc3, 0xc1 => 0x93ae, 0xc2 => 0x9673, 0xc3 => 0x6d25, 0xc4 => 0x589c, 0xc5 => 0x690e, 0xc6 => 0x69cc, 0xc7 => 0x8ffd, 0xc8 => 0x939a, 0xc9 => 0x75db, 0xca => 0x901a, 0xcb => 0x585a, 0xcc => 0x6802, 0xcd => 0x63b4, 0xce => 0x69fb, 0xcf => 0x4f43, 0xd0 => 0x6f2c, 0xd1 => 0x67d8, 0xd2 => 0x8fbb, 0xd3 => 0x8526, 0xd4 => 0x7db4, 0xd5 => 0x9354, 0xd6 => 0x693f, 0xd7 => 0x6f70, 0xd8 => 0x576a, 0xd9 => 0x58f7, 0xda => 0x5b2c, 0xdb => 0x7d2c, 0xdc => 0x722a, 0xdd => 0x540a, 0xde => 0x91e3, 0xdf => 0x9db4, 0xe0 => 0x4ead, 0xe1 => 0x4f4e, 0xe2 => 0x505c, 0xe3 => 0x5075, 0xe4 => 0x5243, 0xe5 => 0x8c9e, 0xe6 => 0x5448, 0xe7 => 0x5824, 0xe8 => 0x5b9a, 0xe9 => 0x5e1d, 0xea => 0x5e95, 0xeb => 0x5ead, 0xec => 0x5ef7, 0xed => 0x5f1f, 0xee => 0x608c, 0xef => 0x62b5, 0xf0 => 0x633a, 0xf1 => 0x63d0, 0xf2 => 0x68af, 0xf3 => 0x6c40, 0xf4 => 0x7887, 0xf5 => 0x798e, 0xf6 => 0x7a0b, 0xf7 => 0x7de0, 0xf8 => 0x8247, 0xf9 => 0x8a02, 0xfa => 0x8ae6, 0xfb => 0x8e44, 0xfc => 0x9013, }, 0x93 => { 0x40 => 0x90b8, 0x41 => 0x912d, 0x42 => 0x91d8, 0x43 => 0x9f0e, 0x44 => 0x6ce5, 0x45 => 0x6458, 0x46 => 0x64e2, 0x47 => 0x6575, 0x48 => 0x6ef4, 0x49 => 0x7684, 0x4a => 0x7b1b, 0x4b => 0x9069, 0x4c => 0x93d1, 0x4d => 0x6eba, 0x4e => 0x54f2, 0x4f => 0x5fb9, 0x50 => 0x64a4, 0x51 => 0x8f4d, 0x52 => 0x8fed, 0x53 => 0x9244, 0x54 => 0x5178, 0x55 => 0x586b, 0x56 => 0x5929, 0x57 => 0x5c55, 0x58 => 0x5e97, 0x59 => 0x6dfb, 0x5a => 0x7e8f, 0x5b => 0x751c, 0x5c => 0x8cbc, 0x5d => 0x8ee2, 0x5e => 0x985b, 0x5f => 0x70b9, 0x60 => 0x4f1d, 0x61 => 0x6bbf, 0x62 => 0x6fb1, 0x63 => 0x7530, 0x64 => 0x96fb, 0x65 => 0x514e, 0x66 => 0x5410, 0x67 => 0x5835, 0x68 => 0x5857, 0x69 => 0x59ac, 0x6a => 0x5c60, 0x6b => 0x5f92, 0x6c => 0x6597, 0x6d => 0x675c, 0x6e => 0x6e21, 0x6f => 0x767b, 0x70 => 0x83df, 0x71 => 0x8ced, 0x72 => 0x9014, 0x73 => 0x90fd, 0x74 => 0x934d, 0x75 => 0x7825, 0x76 => 0x783a, 0x77 => 0x52aa, 0x78 => 0x5ea6, 0x79 => 0x571f, 0x7a => 0x5974, 0x7b => 0x6012, 0x7c => 0x5012, 0x7d => 0x515a, 0x7e => 0x51ac, 0x80 => 0x51cd, 0x81 => 0x5200, 0x82 => 0x5510, 0x83 => 0x5854, 0x84 => 0x5858, 0x85 => 0x5957, 0x86 => 0x5b95, 0x87 => 0x5cf6, 0x88 => 0x5d8b, 0x89 => 0x60bc, 0x8a => 0x6295, 0x8b => 0x642d, 0x8c => 0x6771, 0x8d => 0x6843, 0x8e => 0x68bc, 0x8f => 0x68df, 0x90 => 0x76d7, 0x91 => 0x6dd8, 0x92 => 0x6e6f, 0x93 => 0x6d9b, 0x94 => 0x706f, 0x95 => 0x71c8, 0x96 => 0x5f53, 0x97 => 0x75d8, 0x98 => 0x7977, 0x99 => 0x7b49, 0x9a => 0x7b54, 0x9b => 0x7b52, 0x9c => 0x7cd6, 0x9d => 0x7d71, 0x9e => 0x5230, 0x9f => 0x8463, 0xa0 => 0x8569, 0xa1 => 0x85e4, 0xa2 => 0x8a0e, 0xa3 => 0x8b04, 0xa4 => 0x8c46, 0xa5 => 0x8e0f, 0xa6 => 0x9003, 0xa7 => 0x900f, 0xa8 => 0x9419, 0xa9 => 0x9676, 0xaa => 0x982d, 0xab => 0x9a30, 0xac => 0x95d8, 0xad => 0x50cd, 0xae => 0x52d5, 0xaf => 0x540c, 0xb0 => 0x5802, 0xb1 => 0x5c0e, 0xb2 => 0x61a7, 0xb3 => 0x649e, 0xb4 => 0x6d1e, 0xb5 => 0x77b3, 0xb6 => 0x7ae5, 0xb7 => 0x80f4, 0xb8 => 0x8404, 0xb9 => 0x9053, 0xba => 0x9285, 0xbb => 0x5ce0, 0xbc => 0x9d07, 0xbd => 0x533f, 0xbe => 0x5f97, 0xbf => 0x5fb3, 0xc0 => 0x6d9c, 0xc1 => 0x7279, 0xc2 => 0x7763, 0xc3 => 0x79bf, 0xc4 => 0x7be4, 0xc5 => 0x6bd2, 0xc6 => 0x72ec, 0xc7 => 0x8aad, 0xc8 => 0x6803, 0xc9 => 0x6a61, 0xca => 0x51f8, 0xcb => 0x7a81, 0xcc => 0x6934, 0xcd => 0x5c4a, 0xce => 0x9cf6, 0xcf => 0x82eb, 0xd0 => 0x5bc5, 0xd1 => 0x9149, 0xd2 => 0x701e, 0xd3 => 0x5678, 0xd4 => 0x5c6f, 0xd5 => 0x60c7, 0xd6 => 0x6566, 0xd7 => 0x6c8c, 0xd8 => 0x8c5a, 0xd9 => 0x9041, 0xda => 0x9813, 0xdb => 0x5451, 0xdc => 0x66c7, 0xdd => 0x920d, 0xde => 0x5948, 0xdf => 0x90a3, 0xe0 => 0x5185, 0xe1 => 0x4e4d, 0xe2 => 0x51ea, 0xe3 => 0x8599, 0xe4 => 0x8b0e, 0xe5 => 0x7058, 0xe6 => 0x637a, 0xe7 => 0x934b, 0xe8 => 0x6962, 0xe9 => 0x99b4, 0xea => 0x7e04, 0xeb => 0x7577, 0xec => 0x5357, 0xed => 0x6960, 0xee => 0x8edf, 0xef => 0x96e3, 0xf0 => 0x6c5d, 0xf1 => 0x4e8c, 0xf2 => 0x5c3c, 0xf3 => 0x5f10, 0xf4 => 0x8fe9, 0xf5 => 0x5302, 0xf6 => 0x8cd1, 0xf7 => 0x8089, 0xf8 => 0x8679, 0xf9 => 0x5eff, 0xfa => 0x65e5, 0xfb => 0x4e73, 0xfc => 0x5165, }, 0x94 => { 0x40 => 0x5982, 0x41 => 0x5c3f, 0x42 => 0x97ee, 0x43 => 0x4efb, 0x44 => 0x598a, 0x45 => 0x5fcd, 0x46 => 0x8a8d, 0x47 => 0x6fe1, 0x48 => 0x79b0, 0x49 => 0x7962, 0x4a => 0x5be7, 0x4b => 0x8471, 0x4c => 0x732b, 0x4d => 0x71b1, 0x4e => 0x5e74, 0x4f => 0x5ff5, 0x50 => 0x637b, 0x51 => 0x649a, 0x52 => 0x71c3, 0x53 => 0x7c98, 0x54 => 0x4e43, 0x55 => 0x5efc, 0x56 => 0x4e4b, 0x57 => 0x57dc, 0x58 => 0x56a2, 0x59 => 0x60a9, 0x5a => 0x6fc3, 0x5b => 0x7d0d, 0x5c => 0x80fd, 0x5d => 0x8133, 0x5e => 0x81bf, 0x5f => 0x8fb2, 0x60 => 0x8997, 0x61 => 0x86a4, 0x62 => 0x5df4, 0x63 => 0x628a, 0x64 => 0x64ad, 0x65 => 0x8987, 0x66 => 0x6777, 0x67 => 0x6ce2, 0x68 => 0x6d3e, 0x69 => 0x7436, 0x6a => 0x7834, 0x6b => 0x5a46, 0x6c => 0x7f75, 0x6d => 0x82ad, 0x6e => 0x99ac, 0x6f => 0x4ff3, 0x70 => 0x5ec3, 0x71 => 0x62dd, 0x72 => 0x6392, 0x73 => 0x6557, 0x74 => 0x676f, 0x75 => 0x76c3, 0x76 => 0x724c, 0x77 => 0x80cc, 0x78 => 0x80ba, 0x79 => 0x8f29, 0x7a => 0x914d, 0x7b => 0x500d, 0x7c => 0x57f9, 0x7d => 0x5a92, 0x7e => 0x6885, 0x80 => 0x6973, 0x81 => 0x7164, 0x82 => 0x72fd, 0x83 => 0x8cb7, 0x84 => 0x58f2, 0x85 => 0x8ce0, 0x86 => 0x966a, 0x87 => 0x9019, 0x88 => 0x877f, 0x89 => 0x79e4, 0x8a => 0x77e7, 0x8b => 0x8429, 0x8c => 0x4f2f, 0x8d => 0x5265, 0x8e => 0x535a, 0x8f => 0x62cd, 0x90 => 0x67cf, 0x91 => 0x6cca, 0x92 => 0x767d, 0x93 => 0x7b94, 0x94 => 0x7c95, 0x95 => 0x8236, 0x96 => 0x8584, 0x97 => 0x8feb, 0x98 => 0x66dd, 0x99 => 0x6f20, 0x9a => 0x7206, 0x9b => 0x7e1b, 0x9c => 0x83ab, 0x9d => 0x99c1, 0x9e => 0x9ea6, 0x9f => 0x51fd, 0xa0 => 0x7bb1, 0xa1 => 0x7872, 0xa2 => 0x7bb8, 0xa3 => 0x8087, 0xa4 => 0x7b48, 0xa5 => 0x6ae8, 0xa6 => 0x5e61, 0xa7 => 0x808c, 0xa8 => 0x7551, 0xa9 => 0x7560, 0xaa => 0x516b, 0xab => 0x9262, 0xac => 0x6e8c, 0xad => 0x767a, 0xae => 0x9197, 0xaf => 0x9aea, 0xb0 => 0x4f10, 0xb1 => 0x7f70, 0xb2 => 0x629c, 0xb3 => 0x7b4f, 0xb4 => 0x95a5, 0xb5 => 0x9ce9, 0xb6 => 0x567a, 0xb7 => 0x5859, 0xb8 => 0x86e4, 0xb9 => 0x96bc, 0xba => 0x4f34, 0xbb => 0x5224, 0xbc => 0x534a, 0xbd => 0x53cd, 0xbe => 0x53db, 0xbf => 0x5e06, 0xc0 => 0x642c, 0xc1 => 0x6591, 0xc2 => 0x677f, 0xc3 => 0x6c3e, 0xc4 => 0x6c4e, 0xc5 => 0x7248, 0xc6 => 0x72af, 0xc7 => 0x73ed, 0xc8 => 0x7554, 0xc9 => 0x7e41, 0xca => 0x822c, 0xcb => 0x85e9, 0xcc => 0x8ca9, 0xcd => 0x7bc4, 0xce => 0x91c6, 0xcf => 0x7169, 0xd0 => 0x9812, 0xd1 => 0x98ef, 0xd2 => 0x633d, 0xd3 => 0x6669, 0xd4 => 0x756a, 0xd5 => 0x76e4, 0xd6 => 0x78d0, 0xd7 => 0x8543, 0xd8 => 0x86ee, 0xd9 => 0x532a, 0xda => 0x5351, 0xdb => 0x5426, 0xdc => 0x5983, 0xdd => 0x5e87, 0xde => 0x5f7c, 0xdf => 0x60b2, 0xe0 => 0x6249, 0xe1 => 0x6279, 0xe2 => 0x62ab, 0xe3 => 0x6590, 0xe4 => 0x6bd4, 0xe5 => 0x6ccc, 0xe6 => 0x75b2, 0xe7 => 0x76ae, 0xe8 => 0x7891, 0xe9 => 0x79d8, 0xea => 0x7dcb, 0xeb => 0x7f77, 0xec => 0x80a5, 0xed => 0x88ab, 0xee => 0x8ab9, 0xef => 0x8cbb, 0xf0 => 0x907f, 0xf1 => 0x975e, 0xf2 => 0x98db, 0xf3 => 0x6a0b, 0xf4 => 0x7c38, 0xf5 => 0x5099, 0xf6 => 0x5c3e, 0xf7 => 0x5fae, 0xf8 => 0x6787, 0xf9 => 0x6bd8, 0xfa => 0x7435, 0xfb => 0x7709, 0xfc => 0x7f8e, }, 0x95 => { 0x40 => 0x9f3b, 0x41 => 0x67ca, 0x42 => 0x7a17, 0x43 => 0x5339, 0x44 => 0x758b, 0x45 => 0x9aed, 0x46 => 0x5f66, 0x47 => 0x819d, 0x48 => 0x83f1, 0x49 => 0x8098, 0x4a => 0x5f3c, 0x4b => 0x5fc5, 0x4c => 0x7562, 0x4d => 0x7b46, 0x4e => 0x903c, 0x4f => 0x6867, 0x50 => 0x59eb, 0x51 => 0x5a9b, 0x52 => 0x7d10, 0x53 => 0x767e, 0x54 => 0x8b2c, 0x55 => 0x4ff5, 0x56 => 0x5f6a, 0x57 => 0x6a19, 0x58 => 0x6c37, 0x59 => 0x6f02, 0x5a => 0x74e2, 0x5b => 0x7968, 0x5c => 0x8868, 0x5d => 0x8a55, 0x5e => 0x8c79, 0x5f => 0x5edf, 0x60 => 0x63cf, 0x61 => 0x75c5, 0x62 => 0x79d2, 0x63 => 0x82d7, 0x64 => 0x9328, 0x65 => 0x92f2, 0x66 => 0x849c, 0x67 => 0x86ed, 0x68 => 0x9c2d, 0x69 => 0x54c1, 0x6a => 0x5f6c, 0x6b => 0x658c, 0x6c => 0x6d5c, 0x6d => 0x7015, 0x6e => 0x8ca7, 0x6f => 0x8cd3, 0x70 => 0x983b, 0x71 => 0x654f, 0x72 => 0x74f6, 0x73 => 0x4e0d, 0x74 => 0x4ed8, 0x75 => 0x57e0, 0x76 => 0x592b, 0x77 => 0x5a66, 0x78 => 0x5bcc, 0x79 => 0x51a8, 0x7a => 0x5e03, 0x7b => 0x5e9c, 0x7c => 0x6016, 0x7d => 0x6276, 0x7e => 0x6577, 0x80 => 0x65a7, 0x81 => 0x666e, 0x82 => 0x6d6e, 0x83 => 0x7236, 0x84 => 0x7b26, 0x85 => 0x8150, 0x86 => 0x819a, 0x87 => 0x8299, 0x88 => 0x8b5c, 0x89 => 0x8ca0, 0x8a => 0x8ce6, 0x8b => 0x8d74, 0x8c => 0x961c, 0x8d => 0x9644, 0x8e => 0x4fae, 0x8f => 0x64ab, 0x90 => 0x6b66, 0x91 => 0x821e, 0x92 => 0x8461, 0x93 => 0x856a, 0x94 => 0x90e8, 0x95 => 0x5c01, 0x96 => 0x6953, 0x97 => 0x98a8, 0x98 => 0x847a, 0x99 => 0x8557, 0x9a => 0x4f0f, 0x9b => 0x526f, 0x9c => 0x5fa9, 0x9d => 0x5e45, 0x9e => 0x670d, 0x9f => 0x798f, 0xa0 => 0x8179, 0xa1 => 0x8907, 0xa2 => 0x8986, 0xa3 => 0x6df5, 0xa4 => 0x5f17, 0xa5 => 0x6255, 0xa6 => 0x6cb8, 0xa7 => 0x4ecf, 0xa8 => 0x7269, 0xa9 => 0x9b92, 0xaa => 0x5206, 0xab => 0x543b, 0xac => 0x5674, 0xad => 0x58b3, 0xae => 0x61a4, 0xaf => 0x626e, 0xb0 => 0x711a, 0xb1 => 0x596e, 0xb2 => 0x7c89, 0xb3 => 0x7cde, 0xb4 => 0x7d1b, 0xb5 => 0x96f0, 0xb6 => 0x6587, 0xb7 => 0x805e, 0xb8 => 0x4e19, 0xb9 => 0x4f75, 0xba => 0x5175, 0xbb => 0x5840, 0xbc => 0x5e63, 0xbd => 0x5e73, 0xbe => 0x5f0a, 0xbf => 0x67c4, 0xc0 => 0x4e26, 0xc1 => 0x853d, 0xc2 => 0x9589, 0xc3 => 0x965b, 0xc4 => 0x7c73, 0xc5 => 0x9801, 0xc6 => 0x50fb, 0xc7 => 0x58c1, 0xc8 => 0x7656, 0xc9 => 0x78a7, 0xca => 0x5225, 0xcb => 0x77a5, 0xcc => 0x8511, 0xcd => 0x7b86, 0xce => 0x504f, 0xcf => 0x5909, 0xd0 => 0x7247, 0xd1 => 0x7bc7, 0xd2 => 0x7de8, 0xd3 => 0x8fba, 0xd4 => 0x8fd4, 0xd5 => 0x904d, 0xd6 => 0x4fbf, 0xd7 => 0x52c9, 0xd8 => 0x5a29, 0xd9 => 0x5f01, 0xda => 0x97ad, 0xdb => 0x4fdd, 0xdc => 0x8217, 0xdd => 0x92ea, 0xde => 0x5703, 0xdf => 0x6355, 0xe0 => 0x6b69, 0xe1 => 0x752b, 0xe2 => 0x88dc, 0xe3 => 0x8f14, 0xe4 => 0x7a42, 0xe5 => 0x52df, 0xe6 => 0x5893, 0xe7 => 0x6155, 0xe8 => 0x620a, 0xe9 => 0x66ae, 0xea => 0x6bcd, 0xeb => 0x7c3f, 0xec => 0x83e9, 0xed => 0x5023, 0xee => 0x4ff8, 0xef => 0x5305, 0xf0 => 0x5446, 0xf1 => 0x5831, 0xf2 => 0x5949, 0xf3 => 0x5b9d, 0xf4 => 0x5cf0, 0xf5 => 0x5cef, 0xf6 => 0x5d29, 0xf7 => 0x5e96, 0xf8 => 0x62b1, 0xf9 => 0x6367, 0xfa => 0x653e, 0xfb => 0x65b9, 0xfc => 0x670b, }, 0x96 => { 0x40 => 0x6cd5, 0x41 => 0x6ce1, 0x42 => 0x70f9, 0x43 => 0x7832, 0x44 => 0x7e2b, 0x45 => 0x80de, 0x46 => 0x82b3, 0x47 => 0x840c, 0x48 => 0x84ec, 0x49 => 0x8702, 0x4a => 0x8912, 0x4b => 0x8a2a, 0x4c => 0x8c4a, 0x4d => 0x90a6, 0x4e => 0x92d2, 0x4f => 0x98fd, 0x50 => 0x9cf3, 0x51 => 0x9d6c, 0x52 => 0x4e4f, 0x53 => 0x4ea1, 0x54 => 0x508d, 0x55 => 0x5256, 0x56 => 0x574a, 0x57 => 0x59a8, 0x58 => 0x5e3d, 0x59 => 0x5fd8, 0x5a => 0x5fd9, 0x5b => 0x623f, 0x5c => 0x66b4, 0x5d => 0x671b, 0x5e => 0x67d0, 0x5f => 0x68d2, 0x60 => 0x5192, 0x61 => 0x7d21, 0x62 => 0x80aa, 0x63 => 0x81a8, 0x64 => 0x8b00, 0x65 => 0x8c8c, 0x66 => 0x8cbf, 0x67 => 0x927e, 0x68 => 0x9632, 0x69 => 0x5420, 0x6a => 0x982c, 0x6b => 0x5317, 0x6c => 0x50d5, 0x6d => 0x535c, 0x6e => 0x58a8, 0x6f => 0x64b2, 0x70 => 0x6734, 0x71 => 0x7267, 0x72 => 0x7766, 0x73 => 0x7a46, 0x74 => 0x91e6, 0x75 => 0x52c3, 0x76 => 0x6ca1, 0x77 => 0x6b86, 0x78 => 0x5800, 0x79 => 0x5e4c, 0x7a => 0x5954, 0x7b => 0x672c, 0x7c => 0x7ffb, 0x7d => 0x51e1, 0x7e => 0x76c6, 0x80 => 0x6469, 0x81 => 0x78e8, 0x82 => 0x9b54, 0x83 => 0x9ebb, 0x84 => 0x57cb, 0x85 => 0x59b9, 0x86 => 0x6627, 0x87 => 0x679a, 0x88 => 0x6bce, 0x89 => 0x54e9, 0x8a => 0x69d9, 0x8b => 0x5e55, 0x8c => 0x819c, 0x8d => 0x6795, 0x8e => 0x9baa, 0x8f => 0x67fe, 0x90 => 0x9c52, 0x91 => 0x685d, 0x92 => 0x4ea6, 0x93 => 0x4fe3, 0x94 => 0x53c8, 0x95 => 0x62b9, 0x96 => 0x672b, 0x97 => 0x6cab, 0x98 => 0x8fc4, 0x99 => 0x4fad, 0x9a => 0x7e6d, 0x9b => 0x9ebf, 0x9c => 0x4e07, 0x9d => 0x6162, 0x9e => 0x6e80, 0x9f => 0x6f2b, 0xa0 => 0x8513, 0xa1 => 0x5473, 0xa2 => 0x672a, 0xa3 => 0x9b45, 0xa4 => 0x5df3, 0xa5 => 0x7b95, 0xa6 => 0x5cac, 0xa7 => 0x5bc6, 0xa8 => 0x871c, 0xa9 => 0x6e4a, 0xaa => 0x84d1, 0xab => 0x7a14, 0xac => 0x8108, 0xad => 0x5999, 0xae => 0x7c8d, 0xaf => 0x6c11, 0xb0 => 0x7720, 0xb1 => 0x52d9, 0xb2 => 0x5922, 0xb3 => 0x7121, 0xb4 => 0x725f, 0xb5 => 0x77db, 0xb6 => 0x9727, 0xb7 => 0x9d61, 0xb8 => 0x690b, 0xb9 => 0x5a7f, 0xba => 0x5a18, 0xbb => 0x51a5, 0xbc => 0x540d, 0xbd => 0x547d, 0xbe => 0x660e, 0xbf => 0x76df, 0xc0 => 0x8ff7, 0xc1 => 0x9298, 0xc2 => 0x9cf4, 0xc3 => 0x59ea, 0xc4 => 0x725d, 0xc5 => 0x6ec5, 0xc6 => 0x514d, 0xc7 => 0x68c9, 0xc8 => 0x7dbf, 0xc9 => 0x7dec, 0xca => 0x9762, 0xcb => 0x9eba, 0xcc => 0x6478, 0xcd => 0x6a21, 0xce => 0x8302, 0xcf => 0x5984, 0xd0 => 0x5b5f, 0xd1 => 0x6bdb, 0xd2 => 0x731b, 0xd3 => 0x76f2, 0xd4 => 0x7db2, 0xd5 => 0x8017, 0xd6 => 0x8499, 0xd7 => 0x5132, 0xd8 => 0x6728, 0xd9 => 0x9ed9, 0xda => 0x76ee, 0xdb => 0x6762, 0xdc => 0x52ff, 0xdd => 0x9905, 0xde => 0x5c24, 0xdf => 0x623b, 0xe0 => 0x7c7e, 0xe1 => 0x8cb0, 0xe2 => 0x554f, 0xe3 => 0x60b6, 0xe4 => 0x7d0b, 0xe5 => 0x9580, 0xe6 => 0x5301, 0xe7 => 0x4e5f, 0xe8 => 0x51b6, 0xe9 => 0x591c, 0xea => 0x723a, 0xeb => 0x8036, 0xec => 0x91ce, 0xed => 0x5f25, 0xee => 0x77e2, 0xef => 0x5384, 0xf0 => 0x5f79, 0xf1 => 0x7d04, 0xf2 => 0x85ac, 0xf3 => 0x8a33, 0xf4 => 0x8e8d, 0xf5 => 0x9756, 0xf6 => 0x67f3, 0xf7 => 0x85ae, 0xf8 => 0x9453, 0xf9 => 0x6109, 0xfa => 0x6108, 0xfb => 0x6cb9, 0xfc => 0x7652, }, 0x97 => { 0x40 => 0x8aed, 0x41 => 0x8f38, 0x42 => 0x552f, 0x43 => 0x4f51, 0x44 => 0x512a, 0x45 => 0x52c7, 0x46 => 0x53cb, 0x47 => 0x5ba5, 0x48 => 0x5e7d, 0x49 => 0x60a0, 0x4a => 0x6182, 0x4b => 0x63d6, 0x4c => 0x6709, 0x4d => 0x67da, 0x4e => 0x6e67, 0x4f => 0x6d8c, 0x50 => 0x7336, 0x51 => 0x7337, 0x52 => 0x7531, 0x53 => 0x7950, 0x54 => 0x88d5, 0x55 => 0x8a98, 0x56 => 0x904a, 0x57 => 0x9091, 0x58 => 0x90f5, 0x59 => 0x96c4, 0x5a => 0x878d, 0x5b => 0x5915, 0x5c => 0x4e88, 0x5d => 0x4f59, 0x5e => 0x4e0e, 0x5f => 0x8a89, 0x60 => 0x8f3f, 0x61 => 0x9810, 0x62 => 0x50ad, 0x63 => 0x5e7c, 0x64 => 0x5996, 0x65 => 0x5bb9, 0x66 => 0x5eb8, 0x67 => 0x63da, 0x68 => 0x63fa, 0x69 => 0x64c1, 0x6a => 0x66dc, 0x6b => 0x694a, 0x6c => 0x69d8, 0x6d => 0x6d0b, 0x6e => 0x6eb6, 0x6f => 0x7194, 0x70 => 0x7528, 0x71 => 0x7aaf, 0x72 => 0x7f8a, 0x73 => 0x8000, 0x74 => 0x8449, 0x75 => 0x84c9, 0x76 => 0x8981, 0x77 => 0x8b21, 0x78 => 0x8e0a, 0x79 => 0x9065, 0x7a => 0x967d, 0x7b => 0x990a, 0x7c => 0x617e, 0x7d => 0x6291, 0x7e => 0x6b32, 0x80 => 0x6c83, 0x81 => 0x6d74, 0x82 => 0x7fcc, 0x83 => 0x7ffc, 0x84 => 0x6dc0, 0x85 => 0x7f85, 0x86 => 0x87ba, 0x87 => 0x88f8, 0x88 => 0x6765, 0x89 => 0x83b1, 0x8a => 0x983c, 0x8b => 0x96f7, 0x8c => 0x6d1b, 0x8d => 0x7d61, 0x8e => 0x843d, 0x8f => 0x916a, 0x90 => 0x4e71, 0x91 => 0x5375, 0x92 => 0x5d50, 0x93 => 0x6b04, 0x94 => 0x6feb, 0x95 => 0x85cd, 0x96 => 0x862d, 0x97 => 0x89a7, 0x98 => 0x5229, 0x99 => 0x540f, 0x9a => 0x5c65, 0x9b => 0x674e, 0x9c => 0x68a8, 0x9d => 0x7406, 0x9e => 0x7483, 0x9f => 0x75e2, 0xa0 => 0x88cf, 0xa1 => 0x88e1, 0xa2 => 0x91cc, 0xa3 => 0x96e2, 0xa4 => 0x9678, 0xa5 => 0x5f8b, 0xa6 => 0x7387, 0xa7 => 0x7acb, 0xa8 => 0x844e, 0xa9 => 0x63a0, 0xaa => 0x7565, 0xab => 0x5289, 0xac => 0x6d41, 0xad => 0x6e9c, 0xae => 0x7409, 0xaf => 0x7559, 0xb0 => 0x786b, 0xb1 => 0x7c92, 0xb2 => 0x9686, 0xb3 => 0x7adc, 0xb4 => 0x9f8d, 0xb5 => 0x4fb6, 0xb6 => 0x616e, 0xb7 => 0x65c5, 0xb8 => 0x865c, 0xb9 => 0x4e86, 0xba => 0x4eae, 0xbb => 0x50da, 0xbc => 0x4e21, 0xbd => 0x51cc, 0xbe => 0x5bee, 0xbf => 0x6599, 0xc0 => 0x6881, 0xc1 => 0x6dbc, 0xc2 => 0x731f, 0xc3 => 0x7642, 0xc4 => 0x77ad, 0xc5 => 0x7a1c, 0xc6 => 0x7ce7, 0xc7 => 0x826f, 0xc8 => 0x8ad2, 0xc9 => 0x907c, 0xca => 0x91cf, 0xcb => 0x9675, 0xcc => 0x9818, 0xcd => 0x529b, 0xce => 0x7dd1, 0xcf => 0x502b, 0xd0 => 0x5398, 0xd1 => 0x6797, 0xd2 => 0x6dcb, 0xd3 => 0x71d0, 0xd4 => 0x7433, 0xd5 => 0x81e8, 0xd6 => 0x8f2a, 0xd7 => 0x96a3, 0xd8 => 0x9c57, 0xd9 => 0x9e9f, 0xda => 0x7460, 0xdb => 0x5841, 0xdc => 0x6d99, 0xdd => 0x7d2f, 0xde => 0x985e, 0xdf => 0x4ee4, 0xe0 => 0x4f36, 0xe1 => 0x4f8b, 0xe2 => 0x51b7, 0xe3 => 0x52b1, 0xe4 => 0x5dba, 0xe5 => 0x601c, 0xe6 => 0x73b2, 0xe7 => 0x793c, 0xe8 => 0x82d3, 0xe9 => 0x9234, 0xea => 0x96b7, 0xeb => 0x96f6, 0xec => 0x970a, 0xed => 0x9e97, 0xee => 0x9f62, 0xef => 0x66a6, 0xf0 => 0x6b74, 0xf1 => 0x5217, 0xf2 => 0x52a3, 0xf3 => 0x70c8, 0xf4 => 0x88c2, 0xf5 => 0x5ec9, 0xf6 => 0x604b, 0xf7 => 0x6190, 0xf8 => 0x6f23, 0xf9 => 0x7149, 0xfa => 0x7c3e, 0xfb => 0x7df4, 0xfc => 0x806f, }, 0x98 => { 0x40 => 0x84ee, 0x41 => 0x9023, 0x42 => 0x932c, 0x43 => 0x5442, 0x44 => 0x9b6f, 0x45 => 0x6ad3, 0x46 => 0x7089, 0x47 => 0x8cc2, 0x48 => 0x8def, 0x49 => 0x9732, 0x4a => 0x52b4, 0x4b => 0x5a41, 0x4c => 0x5eca, 0x4d => 0x5f04, 0x4e => 0x6717, 0x4f => 0x697c, 0x50 => 0x6994, 0x51 => 0x6d6a, 0x52 => 0x6f0f, 0x53 => 0x7262, 0x54 => 0x72fc, 0x55 => 0x7bed, 0x56 => 0x8001, 0x57 => 0x807e, 0x58 => 0x874b, 0x59 => 0x90ce, 0x5a => 0x516d, 0x5b => 0x9e93, 0x5c => 0x7984, 0x5d => 0x808b, 0x5e => 0x9332, 0x5f => 0x8ad6, 0x60 => 0x502d, 0x61 => 0x548c, 0x62 => 0x8a71, 0x63 => 0x6b6a, 0x64 => 0x8cc4, 0x65 => 0x8107, 0x66 => 0x60d1, 0x67 => 0x67a0, 0x68 => 0x9df2, 0x69 => 0x4e99, 0x6a => 0x4e98, 0x6b => 0x9c10, 0x6c => 0x8a6b, 0x6d => 0x85c1, 0x6e => 0x8568, 0x6f => 0x6900, 0x70 => 0x6e7e, 0x71 => 0x7897, 0x72 => 0x8155, 0x9f => 0x5f0c, 0xa0 => 0x4e10, 0xa1 => 0x4e15, 0xa2 => 0x4e2a, 0xa3 => 0x4e31, 0xa4 => 0x4e36, 0xa5 => 0x4e3c, 0xa6 => 0x4e3f, 0xa7 => 0x4e42, 0xa8 => 0x4e56, 0xa9 => 0x4e58, 0xaa => 0x4e82, 0xab => 0x4e85, 0xac => 0x8c6b, 0xad => 0x4e8a, 0xae => 0x8212, 0xaf => 0x5f0d, 0xb0 => 0x4e8e, 0xb1 => 0x4e9e, 0xb2 => 0x4e9f, 0xb3 => 0x4ea0, 0xb4 => 0x4ea2, 0xb5 => 0x4eb0, 0xb6 => 0x4eb3, 0xb7 => 0x4eb6, 0xb8 => 0x4ece, 0xb9 => 0x4ecd, 0xba => 0x4ec4, 0xbb => 0x4ec6, 0xbc => 0x4ec2, 0xbd => 0x4ed7, 0xbe => 0x4ede, 0xbf => 0x4eed, 0xc0 => 0x4edf, 0xc1 => 0x4ef7, 0xc2 => 0x4f09, 0xc3 => 0x4f5a, 0xc4 => 0x4f30, 0xc5 => 0x4f5b, 0xc6 => 0x4f5d, 0xc7 => 0x4f57, 0xc8 => 0x4f47, 0xc9 => 0x4f76, 0xca => 0x4f88, 0xcb => 0x4f8f, 0xcc => 0x4f98, 0xcd => 0x4f7b, 0xce => 0x4f69, 0xcf => 0x4f70, 0xd0 => 0x4f91, 0xd1 => 0x4f6f, 0xd2 => 0x4f86, 0xd3 => 0x4f96, 0xd4 => 0x5118, 0xd5 => 0x4fd4, 0xd6 => 0x4fdf, 0xd7 => 0x4fce, 0xd8 => 0x4fd8, 0xd9 => 0x4fdb, 0xda => 0x4fd1, 0xdb => 0x4fda, 0xdc => 0x4fd0, 0xdd => 0x4fe4, 0xde => 0x4fe5, 0xdf => 0x501a, 0xe0 => 0x5028, 0xe1 => 0x5014, 0xe2 => 0x502a, 0xe3 => 0x5025, 0xe4 => 0x5005, 0xe5 => 0x4f1c, 0xe6 => 0x4ff6, 0xe7 => 0x5021, 0xe8 => 0x5029, 0xe9 => 0x502c, 0xea => 0x4ffe, 0xeb => 0x4fef, 0xec => 0x5011, 0xed => 0x5006, 0xee => 0x5043, 0xef => 0x5047, 0xf0 => 0x6703, 0xf1 => 0x5055, 0xf2 => 0x5050, 0xf3 => 0x5048, 0xf4 => 0x505a, 0xf5 => 0x5056, 0xf6 => 0x506c, 0xf7 => 0x5078, 0xf8 => 0x5080, 0xf9 => 0x509a, 0xfa => 0x5085, 0xfb => 0x50b4, 0xfc => 0x50b2, }, 0x99 => { 0x40 => 0x50c9, 0x41 => 0x50ca, 0x42 => 0x50b3, 0x43 => 0x50c2, 0x44 => 0x50d6, 0x45 => 0x50de, 0x46 => 0x50e5, 0x47 => 0x50ed, 0x48 => 0x50e3, 0x49 => 0x50ee, 0x4a => 0x50f9, 0x4b => 0x50f5, 0x4c => 0x5109, 0x4d => 0x5101, 0x4e => 0x5102, 0x4f => 0x5116, 0x50 => 0x5115, 0x51 => 0x5114, 0x52 => 0x511a, 0x53 => 0x5121, 0x54 => 0x513a, 0x55 => 0x5137, 0x56 => 0x513c, 0x57 => 0x513b, 0x58 => 0x513f, 0x59 => 0x5140, 0x5a => 0x5152, 0x5b => 0x514c, 0x5c => 0x5154, 0x5d => 0x5162, 0x5e => 0x7af8, 0x5f => 0x5169, 0x60 => 0x516a, 0x61 => 0x516e, 0x62 => 0x5180, 0x63 => 0x5182, 0x64 => 0x56d8, 0x65 => 0x518c, 0x66 => 0x5189, 0x67 => 0x518f, 0x68 => 0x5191, 0x69 => 0x5193, 0x6a => 0x5195, 0x6b => 0x5196, 0x6c => 0x51a4, 0x6d => 0x51a6, 0x6e => 0x51a2, 0x6f => 0x51a9, 0x70 => 0x51aa, 0x71 => 0x51ab, 0x72 => 0x51b3, 0x73 => 0x51b1, 0x74 => 0x51b2, 0x75 => 0x51b0, 0x76 => 0x51b5, 0x77 => 0x51bd, 0x78 => 0x51c5, 0x79 => 0x51c9, 0x7a => 0x51db, 0x7b => 0x51e0, 0x7c => 0x8655, 0x7d => 0x51e9, 0x7e => 0x51ed, 0x80 => 0x51f0, 0x81 => 0x51f5, 0x82 => 0x51fe, 0x83 => 0x5204, 0x84 => 0x520b, 0x85 => 0x5214, 0x86 => 0x520e, 0x87 => 0x5227, 0x88 => 0x522a, 0x89 => 0x522e, 0x8a => 0x5233, 0x8b => 0x5239, 0x8c => 0x524f, 0x8d => 0x5244, 0x8e => 0x524b, 0x8f => 0x524c, 0x90 => 0x525e, 0x91 => 0x5254, 0x92 => 0x526a, 0x93 => 0x5274, 0x94 => 0x5269, 0x95 => 0x5273, 0x96 => 0x527f, 0x97 => 0x527d, 0x98 => 0x528d, 0x99 => 0x5294, 0x9a => 0x5292, 0x9b => 0x5271, 0x9c => 0x5288, 0x9d => 0x5291, 0x9e => 0x8fa8, 0x9f => 0x8fa7, 0xa0 => 0x52ac, 0xa1 => 0x52ad, 0xa2 => 0x52bc, 0xa3 => 0x52b5, 0xa4 => 0x52c1, 0xa5 => 0x52cd, 0xa6 => 0x52d7, 0xa7 => 0x52de, 0xa8 => 0x52e3, 0xa9 => 0x52e6, 0xaa => 0x98ed, 0xab => 0x52e0, 0xac => 0x52f3, 0xad => 0x52f5, 0xae => 0x52f8, 0xaf => 0x52f9, 0xb0 => 0x5306, 0xb1 => 0x5308, 0xb2 => 0x7538, 0xb3 => 0x530d, 0xb4 => 0x5310, 0xb5 => 0x530f, 0xb6 => 0x5315, 0xb7 => 0x531a, 0xb8 => 0x5323, 0xb9 => 0x532f, 0xba => 0x5331, 0xbb => 0x5333, 0xbc => 0x5338, 0xbd => 0x5340, 0xbe => 0x5346, 0xbf => 0x5345, 0xc0 => 0x4e17, 0xc1 => 0x5349, 0xc2 => 0x534d, 0xc3 => 0x51d6, 0xc4 => 0x535e, 0xc5 => 0x5369, 0xc6 => 0x536e, 0xc7 => 0x5918, 0xc8 => 0x537b, 0xc9 => 0x5377, 0xca => 0x5382, 0xcb => 0x5396, 0xcc => 0x53a0, 0xcd => 0x53a6, 0xce => 0x53a5, 0xcf => 0x53ae, 0xd0 => 0x53b0, 0xd1 => 0x53b6, 0xd2 => 0x53c3, 0xd3 => 0x7c12, 0xd4 => 0x96d9, 0xd5 => 0x53df, 0xd6 => 0x66fc, 0xd7 => 0x71ee, 0xd8 => 0x53ee, 0xd9 => 0x53e8, 0xda => 0x53ed, 0xdb => 0x53fa, 0xdc => 0x5401, 0xdd => 0x543d, 0xde => 0x5440, 0xdf => 0x542c, 0xe0 => 0x542d, 0xe1 => 0x543c, 0xe2 => 0x542e, 0xe3 => 0x5436, 0xe4 => 0x5429, 0xe5 => 0x541d, 0xe6 => 0x544e, 0xe7 => 0x548f, 0xe8 => 0x5475, 0xe9 => 0x548e, 0xea => 0x545f, 0xeb => 0x5471, 0xec => 0x5477, 0xed => 0x5470, 0xee => 0x5492, 0xef => 0x547b, 0xf0 => 0x5480, 0xf1 => 0x5476, 0xf2 => 0x5484, 0xf3 => 0x5490, 0xf4 => 0x5486, 0xf5 => 0x54c7, 0xf6 => 0x54a2, 0xf7 => 0x54b8, 0xf8 => 0x54a5, 0xf9 => 0x54ac, 0xfa => 0x54c4, 0xfb => 0x54c8, 0xfc => 0x54a8, }, 0x9a => { 0x40 => 0x54ab, 0x41 => 0x54c2, 0x42 => 0x54a4, 0x43 => 0x54be, 0x44 => 0x54bc, 0x45 => 0x54d8, 0x46 => 0x54e5, 0x47 => 0x54e6, 0x48 => 0x550f, 0x49 => 0x5514, 0x4a => 0x54fd, 0x4b => 0x54ee, 0x4c => 0x54ed, 0x4d => 0x54fa, 0x4e => 0x54e2, 0x4f => 0x5539, 0x50 => 0x5540, 0x51 => 0x5563, 0x52 => 0x554c, 0x53 => 0x552e, 0x54 => 0x555c, 0x55 => 0x5545, 0x56 => 0x5556, 0x57 => 0x5557, 0x58 => 0x5538, 0x59 => 0x5533, 0x5a => 0x555d, 0x5b => 0x5599, 0x5c => 0x5580, 0x5d => 0x54af, 0x5e => 0x558a, 0x5f => 0x559f, 0x60 => 0x557b, 0x61 => 0x557e, 0x62 => 0x5598, 0x63 => 0x559e, 0x64 => 0x55ae, 0x65 => 0x557c, 0x66 => 0x5583, 0x67 => 0x55a9, 0x68 => 0x5587, 0x69 => 0x55a8, 0x6a => 0x55da, 0x6b => 0x55c5, 0x6c => 0x55df, 0x6d => 0x55c4, 0x6e => 0x55dc, 0x6f => 0x55e4, 0x70 => 0x55d4, 0x71 => 0x5614, 0x72 => 0x55f7, 0x73 => 0x5616, 0x74 => 0x55fe, 0x75 => 0x55fd, 0x76 => 0x561b, 0x77 => 0x55f9, 0x78 => 0x564e, 0x79 => 0x5650, 0x7a => 0x71df, 0x7b => 0x5634, 0x7c => 0x5636, 0x7d => 0x5632, 0x7e => 0x5638, 0x80 => 0x566b, 0x81 => 0x5664, 0x82 => 0x562f, 0x83 => 0x566c, 0x84 => 0x566a, 0x85 => 0x5686, 0x86 => 0x5680, 0x87 => 0x568a, 0x88 => 0x56a0, 0x89 => 0x5694, 0x8a => 0x568f, 0x8b => 0x56a5, 0x8c => 0x56ae, 0x8d => 0x56b6, 0x8e => 0x56b4, 0x8f => 0x56c2, 0x90 => 0x56bc, 0x91 => 0x56c1, 0x92 => 0x56c3, 0x93 => 0x56c0, 0x94 => 0x56c8, 0x95 => 0x56ce, 0x96 => 0x56d1, 0x97 => 0x56d3, 0x98 => 0x56d7, 0x99 => 0x56ee, 0x9a => 0x56f9, 0x9b => 0x5700, 0x9c => 0x56ff, 0x9d => 0x5704, 0x9e => 0x5709, 0x9f => 0x5708, 0xa0 => 0x570b, 0xa1 => 0x570d, 0xa2 => 0x5713, 0xa3 => 0x5718, 0xa4 => 0x5716, 0xa5 => 0x55c7, 0xa6 => 0x571c, 0xa7 => 0x5726, 0xa8 => 0x5737, 0xa9 => 0x5738, 0xaa => 0x574e, 0xab => 0x573b, 0xac => 0x5740, 0xad => 0x574f, 0xae => 0x5769, 0xaf => 0x57c0, 0xb0 => 0x5788, 0xb1 => 0x5761, 0xb2 => 0x577f, 0xb3 => 0x5789, 0xb4 => 0x5793, 0xb5 => 0x57a0, 0xb6 => 0x57b3, 0xb7 => 0x57a4, 0xb8 => 0x57aa, 0xb9 => 0x57b0, 0xba => 0x57c3, 0xbb => 0x57c6, 0xbc => 0x57d4, 0xbd => 0x57d2, 0xbe => 0x57d3, 0xbf => 0x580a, 0xc0 => 0x57d6, 0xc1 => 0x57e3, 0xc2 => 0x580b, 0xc3 => 0x5819, 0xc4 => 0x581d, 0xc5 => 0x5872, 0xc6 => 0x5821, 0xc7 => 0x5862, 0xc8 => 0x584b, 0xc9 => 0x5870, 0xca => 0x6bc0, 0xcb => 0x5852, 0xcc => 0x583d, 0xcd => 0x5879, 0xce => 0x5885, 0xcf => 0x58b9, 0xd0 => 0x589f, 0xd1 => 0x58ab, 0xd2 => 0x58ba, 0xd3 => 0x58de, 0xd4 => 0x58bb, 0xd5 => 0x58b8, 0xd6 => 0x58ae, 0xd7 => 0x58c5, 0xd8 => 0x58d3, 0xd9 => 0x58d1, 0xda => 0x58d7, 0xdb => 0x58d9, 0xdc => 0x58d8, 0xdd => 0x58e5, 0xde => 0x58dc, 0xdf => 0x58e4, 0xe0 => 0x58df, 0xe1 => 0x58ef, 0xe2 => 0x58fa, 0xe3 => 0x58f9, 0xe4 => 0x58fb, 0xe5 => 0x58fc, 0xe6 => 0x58fd, 0xe7 => 0x5902, 0xe8 => 0x590a, 0xe9 => 0x5910, 0xea => 0x591b, 0xeb => 0x68a6, 0xec => 0x5925, 0xed => 0x592c, 0xee => 0x592d, 0xef => 0x5932, 0xf0 => 0x5938, 0xf1 => 0x593e, 0xf2 => 0x7ad2, 0xf3 => 0x5955, 0xf4 => 0x5950, 0xf5 => 0x594e, 0xf6 => 0x595a, 0xf7 => 0x5958, 0xf8 => 0x5962, 0xf9 => 0x5960, 0xfa => 0x5967, 0xfb => 0x596c, 0xfc => 0x5969, }, 0x9b => { 0x40 => 0x5978, 0x41 => 0x5981, 0x42 => 0x599d, 0x43 => 0x4f5e, 0x44 => 0x4fab, 0x45 => 0x59a3, 0x46 => 0x59b2, 0x47 => 0x59c6, 0x48 => 0x59e8, 0x49 => 0x59dc, 0x4a => 0x598d, 0x4b => 0x59d9, 0x4c => 0x59da, 0x4d => 0x5a25, 0x4e => 0x5a1f, 0x4f => 0x5a11, 0x50 => 0x5a1c, 0x51 => 0x5a09, 0x52 => 0x5a1a, 0x53 => 0x5a40, 0x54 => 0x5a6c, 0x55 => 0x5a49, 0x56 => 0x5a35, 0x57 => 0x5a36, 0x58 => 0x5a62, 0x59 => 0x5a6a, 0x5a => 0x5a9a, 0x5b => 0x5abc, 0x5c => 0x5abe, 0x5d => 0x5acb, 0x5e => 0x5ac2, 0x5f => 0x5abd, 0x60 => 0x5ae3, 0x61 => 0x5ad7, 0x62 => 0x5ae6, 0x63 => 0x5ae9, 0x64 => 0x5ad6, 0x65 => 0x5afa, 0x66 => 0x5afb, 0x67 => 0x5b0c, 0x68 => 0x5b0b, 0x69 => 0x5b16, 0x6a => 0x5b32, 0x6b => 0x5ad0, 0x6c => 0x5b2a, 0x6d => 0x5b36, 0x6e => 0x5b3e, 0x6f => 0x5b43, 0x70 => 0x5b45, 0x71 => 0x5b40, 0x72 => 0x5b51, 0x73 => 0x5b55, 0x74 => 0x5b5a, 0x75 => 0x5b5b, 0x76 => 0x5b65, 0x77 => 0x5b69, 0x78 => 0x5b70, 0x79 => 0x5b73, 0x7a => 0x5b75, 0x7b => 0x5b78, 0x7c => 0x6588, 0x7d => 0x5b7a, 0x7e => 0x5b80, 0x80 => 0x5b83, 0x81 => 0x5ba6, 0x82 => 0x5bb8, 0x83 => 0x5bc3, 0x84 => 0x5bc7, 0x85 => 0x5bc9, 0x86 => 0x5bd4, 0x87 => 0x5bd0, 0x88 => 0x5be4, 0x89 => 0x5be6, 0x8a => 0x5be2, 0x8b => 0x5bde, 0x8c => 0x5be5, 0x8d => 0x5beb, 0x8e => 0x5bf0, 0x8f => 0x5bf6, 0x90 => 0x5bf3, 0x91 => 0x5c05, 0x92 => 0x5c07, 0x93 => 0x5c08, 0x94 => 0x5c0d, 0x95 => 0x5c13, 0x96 => 0x5c20, 0x97 => 0x5c22, 0x98 => 0x5c28, 0x99 => 0x5c38, 0x9a => 0x5c39, 0x9b => 0x5c41, 0x9c => 0x5c46, 0x9d => 0x5c4e, 0x9e => 0x5c53, 0x9f => 0x5c50, 0xa0 => 0x5c4f, 0xa1 => 0x5b71, 0xa2 => 0x5c6c, 0xa3 => 0x5c6e, 0xa4 => 0x4e62, 0xa5 => 0x5c76, 0xa6 => 0x5c79, 0xa7 => 0x5c8c, 0xa8 => 0x5c91, 0xa9 => 0x5c94, 0xaa => 0x599b, 0xab => 0x5cab, 0xac => 0x5cbb, 0xad => 0x5cb6, 0xae => 0x5cbc, 0xaf => 0x5cb7, 0xb0 => 0x5cc5, 0xb1 => 0x5cbe, 0xb2 => 0x5cc7, 0xb3 => 0x5cd9, 0xb4 => 0x5ce9, 0xb5 => 0x5cfd, 0xb6 => 0x5cfa, 0xb7 => 0x5ced, 0xb8 => 0x5d8c, 0xb9 => 0x5cea, 0xba => 0x5d0b, 0xbb => 0x5d15, 0xbc => 0x5d17, 0xbd => 0x5d5c, 0xbe => 0x5d1f, 0xbf => 0x5d1b, 0xc0 => 0x5d11, 0xc1 => 0x5d14, 0xc2 => 0x5d22, 0xc3 => 0x5d1a, 0xc4 => 0x5d19, 0xc5 => 0x5d18, 0xc6 => 0x5d4c, 0xc7 => 0x5d52, 0xc8 => 0x5d4e, 0xc9 => 0x5d4b, 0xca => 0x5d6c, 0xcb => 0x5d73, 0xcc => 0x5d76, 0xcd => 0x5d87, 0xce => 0x5d84, 0xcf => 0x5d82, 0xd0 => 0x5da2, 0xd1 => 0x5d9d, 0xd2 => 0x5dac, 0xd3 => 0x5dae, 0xd4 => 0x5dbd, 0xd5 => 0x5d90, 0xd6 => 0x5db7, 0xd7 => 0x5dbc, 0xd8 => 0x5dc9, 0xd9 => 0x5dcd, 0xda => 0x5dd3, 0xdb => 0x5dd2, 0xdc => 0x5dd6, 0xdd => 0x5ddb, 0xde => 0x5deb, 0xdf => 0x5df2, 0xe0 => 0x5df5, 0xe1 => 0x5e0b, 0xe2 => 0x5e1a, 0xe3 => 0x5e19, 0xe4 => 0x5e11, 0xe5 => 0x5e1b, 0xe6 => 0x5e36, 0xe7 => 0x5e37, 0xe8 => 0x5e44, 0xe9 => 0x5e43, 0xea => 0x5e40, 0xeb => 0x5e4e, 0xec => 0x5e57, 0xed => 0x5e54, 0xee => 0x5e5f, 0xef => 0x5e62, 0xf0 => 0x5e64, 0xf1 => 0x5e47, 0xf2 => 0x5e75, 0xf3 => 0x5e76, 0xf4 => 0x5e7a, 0xf5 => 0x9ebc, 0xf6 => 0x5e7f, 0xf7 => 0x5ea0, 0xf8 => 0x5ec1, 0xf9 => 0x5ec2, 0xfa => 0x5ec8, 0xfb => 0x5ed0, 0xfc => 0x5ecf, }, 0x9c => { 0x40 => 0x5ed6, 0x41 => 0x5ee3, 0x42 => 0x5edd, 0x43 => 0x5eda, 0x44 => 0x5edb, 0x45 => 0x5ee2, 0x46 => 0x5ee1, 0x47 => 0x5ee8, 0x48 => 0x5ee9, 0x49 => 0x5eec, 0x4a => 0x5ef1, 0x4b => 0x5ef3, 0x4c => 0x5ef0, 0x4d => 0x5ef4, 0x4e => 0x5ef8, 0x4f => 0x5efe, 0x50 => 0x5f03, 0x51 => 0x5f09, 0x52 => 0x5f5d, 0x53 => 0x5f5c, 0x54 => 0x5f0b, 0x55 => 0x5f11, 0x56 => 0x5f16, 0x57 => 0x5f29, 0x58 => 0x5f2d, 0x59 => 0x5f38, 0x5a => 0x5f41, 0x5b => 0x5f48, 0x5c => 0x5f4c, 0x5d => 0x5f4e, 0x5e => 0x5f2f, 0x5f => 0x5f51, 0x60 => 0x5f56, 0x61 => 0x5f57, 0x62 => 0x5f59, 0x63 => 0x5f61, 0x64 => 0x5f6d, 0x65 => 0x5f73, 0x66 => 0x5f77, 0x67 => 0x5f83, 0x68 => 0x5f82, 0x69 => 0x5f7f, 0x6a => 0x5f8a, 0x6b => 0x5f88, 0x6c => 0x5f91, 0x6d => 0x5f87, 0x6e => 0x5f9e, 0x6f => 0x5f99, 0x70 => 0x5f98, 0x71 => 0x5fa0, 0x72 => 0x5fa8, 0x73 => 0x5fad, 0x74 => 0x5fbc, 0x75 => 0x5fd6, 0x76 => 0x5ffb, 0x77 => 0x5fe4, 0x78 => 0x5ff8, 0x79 => 0x5ff1, 0x7a => 0x5fdd, 0x7b => 0x60b3, 0x7c => 0x5fff, 0x7d => 0x6021, 0x7e => 0x6060, 0x80 => 0x6019, 0x81 => 0x6010, 0x82 => 0x6029, 0x83 => 0x600e, 0x84 => 0x6031, 0x85 => 0x601b, 0x86 => 0x6015, 0x87 => 0x602b, 0x88 => 0x6026, 0x89 => 0x600f, 0x8a => 0x603a, 0x8b => 0x605a, 0x8c => 0x6041, 0x8d => 0x606a, 0x8e => 0x6077, 0x8f => 0x605f, 0x90 => 0x604a, 0x91 => 0x6046, 0x92 => 0x604d, 0x93 => 0x6063, 0x94 => 0x6043, 0x95 => 0x6064, 0x96 => 0x6042, 0x97 => 0x606c, 0x98 => 0x606b, 0x99 => 0x6059, 0x9a => 0x6081, 0x9b => 0x608d, 0x9c => 0x60e7, 0x9d => 0x6083, 0x9e => 0x609a, 0x9f => 0x6084, 0xa0 => 0x609b, 0xa1 => 0x6096, 0xa2 => 0x6097, 0xa3 => 0x6092, 0xa4 => 0x60a7, 0xa5 => 0x608b, 0xa6 => 0x60e1, 0xa7 => 0x60b8, 0xa8 => 0x60e0, 0xa9 => 0x60d3, 0xaa => 0x60b4, 0xab => 0x5ff0, 0xac => 0x60bd, 0xad => 0x60c6, 0xae => 0x60b5, 0xaf => 0x60d8, 0xb0 => 0x614d, 0xb1 => 0x6115, 0xb2 => 0x6106, 0xb3 => 0x60f6, 0xb4 => 0x60f7, 0xb5 => 0x6100, 0xb6 => 0x60f4, 0xb7 => 0x60fa, 0xb8 => 0x6103, 0xb9 => 0x6121, 0xba => 0x60fb, 0xbb => 0x60f1, 0xbc => 0x610d, 0xbd => 0x610e, 0xbe => 0x6147, 0xbf => 0x613e, 0xc0 => 0x6128, 0xc1 => 0x6127, 0xc2 => 0x614a, 0xc3 => 0x613f, 0xc4 => 0x613c, 0xc5 => 0x612c, 0xc6 => 0x6134, 0xc7 => 0x613d, 0xc8 => 0x6142, 0xc9 => 0x6144, 0xca => 0x6173, 0xcb => 0x6177, 0xcc => 0x6158, 0xcd => 0x6159, 0xce => 0x615a, 0xcf => 0x616b, 0xd0 => 0x6174, 0xd1 => 0x616f, 0xd2 => 0x6165, 0xd3 => 0x6171, 0xd4 => 0x615f, 0xd5 => 0x615d, 0xd6 => 0x6153, 0xd7 => 0x6175, 0xd8 => 0x6199, 0xd9 => 0x6196, 0xda => 0x6187, 0xdb => 0x61ac, 0xdc => 0x6194, 0xdd => 0x619a, 0xde => 0x618a, 0xdf => 0x6191, 0xe0 => 0x61ab, 0xe1 => 0x61ae, 0xe2 => 0x61cc, 0xe3 => 0x61ca, 0xe4 => 0x61c9, 0xe5 => 0x61f7, 0xe6 => 0x61c8, 0xe7 => 0x61c3, 0xe8 => 0x61c6, 0xe9 => 0x61ba, 0xea => 0x61cb, 0xeb => 0x7f79, 0xec => 0x61cd, 0xed => 0x61e6, 0xee => 0x61e3, 0xef => 0x61f6, 0xf0 => 0x61fa, 0xf1 => 0x61f4, 0xf2 => 0x61ff, 0xf3 => 0x61fd, 0xf4 => 0x61fc, 0xf5 => 0x61fe, 0xf6 => 0x6200, 0xf7 => 0x6208, 0xf8 => 0x6209, 0xf9 => 0x620d, 0xfa => 0x620c, 0xfb => 0x6214, 0xfc => 0x621b, }, 0x9d => { 0x40 => 0x621e, 0x41 => 0x6221, 0x42 => 0x622a, 0x43 => 0x622e, 0x44 => 0x6230, 0x45 => 0x6232, 0x46 => 0x6233, 0x47 => 0x6241, 0x48 => 0x624e, 0x49 => 0x625e, 0x4a => 0x6263, 0x4b => 0x625b, 0x4c => 0x6260, 0x4d => 0x6268, 0x4e => 0x627c, 0x4f => 0x6282, 0x50 => 0x6289, 0x51 => 0x627e, 0x52 => 0x6292, 0x53 => 0x6293, 0x54 => 0x6296, 0x55 => 0x62d4, 0x56 => 0x6283, 0x57 => 0x6294, 0x58 => 0x62d7, 0x59 => 0x62d1, 0x5a => 0x62bb, 0x5b => 0x62cf, 0x5c => 0x62ff, 0x5d => 0x62c6, 0x5e => 0x64d4, 0x5f => 0x62c8, 0x60 => 0x62dc, 0x61 => 0x62cc, 0x62 => 0x62ca, 0x63 => 0x62c2, 0x64 => 0x62c7, 0x65 => 0x629b, 0x66 => 0x62c9, 0x67 => 0x630c, 0x68 => 0x62ee, 0x69 => 0x62f1, 0x6a => 0x6327, 0x6b => 0x6302, 0x6c => 0x6308, 0x6d => 0x62ef, 0x6e => 0x62f5, 0x6f => 0x6350, 0x70 => 0x633e, 0x71 => 0x634d, 0x72 => 0x641c, 0x73 => 0x634f, 0x74 => 0x6396, 0x75 => 0x638e, 0x76 => 0x6380, 0x77 => 0x63ab, 0x78 => 0x6376, 0x79 => 0x63a3, 0x7a => 0x638f, 0x7b => 0x6389, 0x7c => 0x639f, 0x7d => 0x63b5, 0x7e => 0x636b, 0x80 => 0x6369, 0x81 => 0x63be, 0x82 => 0x63e9, 0x83 => 0x63c0, 0x84 => 0x63c6, 0x85 => 0x63e3, 0x86 => 0x63c9, 0x87 => 0x63d2, 0x88 => 0x63f6, 0x89 => 0x63c4, 0x8a => 0x6416, 0x8b => 0x6434, 0x8c => 0x6406, 0x8d => 0x6413, 0x8e => 0x6426, 0x8f => 0x6436, 0x90 => 0x651d, 0x91 => 0x6417, 0x92 => 0x6428, 0x93 => 0x640f, 0x94 => 0x6467, 0x95 => 0x646f, 0x96 => 0x6476, 0x97 => 0x644e, 0x98 => 0x652a, 0x99 => 0x6495, 0x9a => 0x6493, 0x9b => 0x64a5, 0x9c => 0x64a9, 0x9d => 0x6488, 0x9e => 0x64bc, 0x9f => 0x64da, 0xa0 => 0x64d2, 0xa1 => 0x64c5, 0xa2 => 0x64c7, 0xa3 => 0x64bb, 0xa4 => 0x64d8, 0xa5 => 0x64c2, 0xa6 => 0x64f1, 0xa7 => 0x64e7, 0xa8 => 0x8209, 0xa9 => 0x64e0, 0xaa => 0x64e1, 0xab => 0x62ac, 0xac => 0x64e3, 0xad => 0x64ef, 0xae => 0x652c, 0xaf => 0x64f6, 0xb0 => 0x64f4, 0xb1 => 0x64f2, 0xb2 => 0x64fa, 0xb3 => 0x6500, 0xb4 => 0x64fd, 0xb5 => 0x6518, 0xb6 => 0x651c, 0xb7 => 0x6505, 0xb8 => 0x6524, 0xb9 => 0x6523, 0xba => 0x652b, 0xbb => 0x6534, 0xbc => 0x6535, 0xbd => 0x6537, 0xbe => 0x6536, 0xbf => 0x6538, 0xc0 => 0x754b, 0xc1 => 0x6548, 0xc2 => 0x6556, 0xc3 => 0x6555, 0xc4 => 0x654d, 0xc5 => 0x6558, 0xc6 => 0x655e, 0xc7 => 0x655d, 0xc8 => 0x6572, 0xc9 => 0x6578, 0xca => 0x6582, 0xcb => 0x6583, 0xcc => 0x8b8a, 0xcd => 0x659b, 0xce => 0x659f, 0xcf => 0x65ab, 0xd0 => 0x65b7, 0xd1 => 0x65c3, 0xd2 => 0x65c6, 0xd3 => 0x65c1, 0xd4 => 0x65c4, 0xd5 => 0x65cc, 0xd6 => 0x65d2, 0xd7 => 0x65db, 0xd8 => 0x65d9, 0xd9 => 0x65e0, 0xda => 0x65e1, 0xdb => 0x65f1, 0xdc => 0x6772, 0xdd => 0x660a, 0xde => 0x6603, 0xdf => 0x65fb, 0xe0 => 0x6773, 0xe1 => 0x6635, 0xe2 => 0x6636, 0xe3 => 0x6634, 0xe4 => 0x661c, 0xe5 => 0x664f, 0xe6 => 0x6644, 0xe7 => 0x6649, 0xe8 => 0x6641, 0xe9 => 0x665e, 0xea => 0x665d, 0xeb => 0x6664, 0xec => 0x6667, 0xed => 0x6668, 0xee => 0x665f, 0xef => 0x6662, 0xf0 => 0x6670, 0xf1 => 0x6683, 0xf2 => 0x6688, 0xf3 => 0x668e, 0xf4 => 0x6689, 0xf5 => 0x6684, 0xf6 => 0x6698, 0xf7 => 0x669d, 0xf8 => 0x66c1, 0xf9 => 0x66b9, 0xfa => 0x66c9, 0xfb => 0x66be, 0xfc => 0x66bc, }, 0x9e => { 0x40 => 0x66c4, 0x41 => 0x66b8, 0x42 => 0x66d6, 0x43 => 0x66da, 0x44 => 0x66e0, 0x45 => 0x663f, 0x46 => 0x66e6, 0x47 => 0x66e9, 0x48 => 0x66f0, 0x49 => 0x66f5, 0x4a => 0x66f7, 0x4b => 0x670f, 0x4c => 0x6716, 0x4d => 0x671e, 0x4e => 0x6726, 0x4f => 0x6727, 0x50 => 0x9738, 0x51 => 0x672e, 0x52 => 0x673f, 0x53 => 0x6736, 0x54 => 0x6741, 0x55 => 0x6738, 0x56 => 0x6737, 0x57 => 0x6746, 0x58 => 0x675e, 0x59 => 0x6760, 0x5a => 0x6759, 0x5b => 0x6763, 0x5c => 0x6764, 0x5d => 0x6789, 0x5e => 0x6770, 0x5f => 0x67a9, 0x60 => 0x677c, 0x61 => 0x676a, 0x62 => 0x678c, 0x63 => 0x678b, 0x64 => 0x67a6, 0x65 => 0x67a1, 0x66 => 0x6785, 0x67 => 0x67b7, 0x68 => 0x67ef, 0x69 => 0x67b4, 0x6a => 0x67ec, 0x6b => 0x67b3, 0x6c => 0x67e9, 0x6d => 0x67b8, 0x6e => 0x67e4, 0x6f => 0x67de, 0x70 => 0x67dd, 0x71 => 0x67e2, 0x72 => 0x67ee, 0x73 => 0x67b9, 0x74 => 0x67ce, 0x75 => 0x67c6, 0x76 => 0x67e7, 0x77 => 0x6a9c, 0x78 => 0x681e, 0x79 => 0x6846, 0x7a => 0x6829, 0x7b => 0x6840, 0x7c => 0x684d, 0x7d => 0x6832, 0x7e => 0x684e, 0x80 => 0x68b3, 0x81 => 0x682b, 0x82 => 0x6859, 0x83 => 0x6863, 0x84 => 0x6877, 0x85 => 0x687f, 0x86 => 0x689f, 0x87 => 0x688f, 0x88 => 0x68ad, 0x89 => 0x6894, 0x8a => 0x689d, 0x8b => 0x689b, 0x8c => 0x6883, 0x8d => 0x6aae, 0x8e => 0x68b9, 0x8f => 0x6874, 0x90 => 0x68b5, 0x91 => 0x68a0, 0x92 => 0x68ba, 0x93 => 0x690f, 0x94 => 0x688d, 0x95 => 0x687e, 0x96 => 0x6901, 0x97 => 0x68ca, 0x98 => 0x6908, 0x99 => 0x68d8, 0x9a => 0x6922, 0x9b => 0x6926, 0x9c => 0x68e1, 0x9d => 0x690c, 0x9e => 0x68cd, 0x9f => 0x68d4, 0xa0 => 0x68e7, 0xa1 => 0x68d5, 0xa2 => 0x6936, 0xa3 => 0x6912, 0xa4 => 0x6904, 0xa5 => 0x68d7, 0xa6 => 0x68e3, 0xa7 => 0x6925, 0xa8 => 0x68f9, 0xa9 => 0x68e0, 0xaa => 0x68ef, 0xab => 0x6928, 0xac => 0x692a, 0xad => 0x691a, 0xae => 0x6923, 0xaf => 0x6921, 0xb0 => 0x68c6, 0xb1 => 0x6979, 0xb2 => 0x6977, 0xb3 => 0x695c, 0xb4 => 0x6978, 0xb5 => 0x696b, 0xb6 => 0x6954, 0xb7 => 0x697e, 0xb8 => 0x696e, 0xb9 => 0x6939, 0xba => 0x6974, 0xbb => 0x693d, 0xbc => 0x6959, 0xbd => 0x6930, 0xbe => 0x6961, 0xbf => 0x695e, 0xc0 => 0x695d, 0xc1 => 0x6981, 0xc2 => 0x696a, 0xc3 => 0x69b2, 0xc4 => 0x69ae, 0xc5 => 0x69d0, 0xc6 => 0x69bf, 0xc7 => 0x69c1, 0xc8 => 0x69d3, 0xc9 => 0x69be, 0xca => 0x69ce, 0xcb => 0x5be8, 0xcc => 0x69ca, 0xcd => 0x69dd, 0xce => 0x69bb, 0xcf => 0x69c3, 0xd0 => 0x69a7, 0xd1 => 0x6a2e, 0xd2 => 0x6991, 0xd3 => 0x69a0, 0xd4 => 0x699c, 0xd5 => 0x6995, 0xd6 => 0x69b4, 0xd7 => 0x69de, 0xd8 => 0x69e8, 0xd9 => 0x6a02, 0xda => 0x6a1b, 0xdb => 0x69ff, 0xdc => 0x6b0a, 0xdd => 0x69f9, 0xde => 0x69f2, 0xdf => 0x69e7, 0xe0 => 0x6a05, 0xe1 => 0x69b1, 0xe2 => 0x6a1e, 0xe3 => 0x69ed, 0xe4 => 0x6a14, 0xe5 => 0x69eb, 0xe6 => 0x6a0a, 0xe7 => 0x6a12, 0xe8 => 0x6ac1, 0xe9 => 0x6a23, 0xea => 0x6a13, 0xeb => 0x6a44, 0xec => 0x6a0c, 0xed => 0x6a72, 0xee => 0x6a36, 0xef => 0x6a78, 0xf0 => 0x6a47, 0xf1 => 0x6a62, 0xf2 => 0x6a59, 0xf3 => 0x6a66, 0xf4 => 0x6a48, 0xf5 => 0x6a38, 0xf6 => 0x6a22, 0xf7 => 0x6a90, 0xf8 => 0x6a8d, 0xf9 => 0x6aa0, 0xfa => 0x6a84, 0xfb => 0x6aa2, 0xfc => 0x6aa3, }, 0x9f => { 0x40 => 0x6a97, 0x41 => 0x8617, 0x42 => 0x6abb, 0x43 => 0x6ac3, 0x44 => 0x6ac2, 0x45 => 0x6ab8, 0x46 => 0x6ab3, 0x47 => 0x6aac, 0x48 => 0x6ade, 0x49 => 0x6ad1, 0x4a => 0x6adf, 0x4b => 0x6aaa, 0x4c => 0x6ada, 0x4d => 0x6aea, 0x4e => 0x6afb, 0x4f => 0x6b05, 0x50 => 0x8616, 0x51 => 0x6afa, 0x52 => 0x6b12, 0x53 => 0x6b16, 0x54 => 0x9b31, 0x55 => 0x6b1f, 0x56 => 0x6b38, 0x57 => 0x6b37, 0x58 => 0x76dc, 0x59 => 0x6b39, 0x5a => 0x98ee, 0x5b => 0x6b47, 0x5c => 0x6b43, 0x5d => 0x6b49, 0x5e => 0x6b50, 0x5f => 0x6b59, 0x60 => 0x6b54, 0x61 => 0x6b5b, 0x62 => 0x6b5f, 0x63 => 0x6b61, 0x64 => 0x6b78, 0x65 => 0x6b79, 0x66 => 0x6b7f, 0x67 => 0x6b80, 0x68 => 0x6b84, 0x69 => 0x6b83, 0x6a => 0x6b8d, 0x6b => 0x6b98, 0x6c => 0x6b95, 0x6d => 0x6b9e, 0x6e => 0x6ba4, 0x6f => 0x6baa, 0x70 => 0x6bab, 0x71 => 0x6baf, 0x72 => 0x6bb2, 0x73 => 0x6bb1, 0x74 => 0x6bb3, 0x75 => 0x6bb7, 0x76 => 0x6bbc, 0x77 => 0x6bc6, 0x78 => 0x6bcb, 0x79 => 0x6bd3, 0x7a => 0x6bdf, 0x7b => 0x6bec, 0x7c => 0x6beb, 0x7d => 0x6bf3, 0x7e => 0x6bef, 0x80 => 0x9ebe, 0x81 => 0x6c08, 0x82 => 0x6c13, 0x83 => 0x6c14, 0x84 => 0x6c1b, 0x85 => 0x6c24, 0x86 => 0x6c23, 0x87 => 0x6c5e, 0x88 => 0x6c55, 0x89 => 0x6c62, 0x8a => 0x6c6a, 0x8b => 0x6c82, 0x8c => 0x6c8d, 0x8d => 0x6c9a, 0x8e => 0x6c81, 0x8f => 0x6c9b, 0x90 => 0x6c7e, 0x91 => 0x6c68, 0x92 => 0x6c73, 0x93 => 0x6c92, 0x94 => 0x6c90, 0x95 => 0x6cc4, 0x96 => 0x6cf1, 0x97 => 0x6cd3, 0x98 => 0x6cbd, 0x99 => 0x6cd7, 0x9a => 0x6cc5, 0x9b => 0x6cdd, 0x9c => 0x6cae, 0x9d => 0x6cb1, 0x9e => 0x6cbe, 0x9f => 0x6cba, 0xa0 => 0x6cdb, 0xa1 => 0x6cef, 0xa2 => 0x6cd9, 0xa3 => 0x6cea, 0xa4 => 0x6d1f, 0xa5 => 0x884d, 0xa6 => 0x6d36, 0xa7 => 0x6d2b, 0xa8 => 0x6d3d, 0xa9 => 0x6d38, 0xaa => 0x6d19, 0xab => 0x6d35, 0xac => 0x6d33, 0xad => 0x6d12, 0xae => 0x6d0c, 0xaf => 0x6d63, 0xb0 => 0x6d93, 0xb1 => 0x6d64, 0xb2 => 0x6d5a, 0xb3 => 0x6d79, 0xb4 => 0x6d59, 0xb5 => 0x6d8e, 0xb6 => 0x6d95, 0xb7 => 0x6fe4, 0xb8 => 0x6d85, 0xb9 => 0x6df9, 0xba => 0x6e15, 0xbb => 0x6e0a, 0xbc => 0x6db5, 0xbd => 0x6dc7, 0xbe => 0x6de6, 0xbf => 0x6db8, 0xc0 => 0x6dc6, 0xc1 => 0x6dec, 0xc2 => 0x6dde, 0xc3 => 0x6dcc, 0xc4 => 0x6de8, 0xc5 => 0x6dd2, 0xc6 => 0x6dc5, 0xc7 => 0x6dfa, 0xc8 => 0x6dd9, 0xc9 => 0x6de4, 0xca => 0x6dd5, 0xcb => 0x6dea, 0xcc => 0x6dee, 0xcd => 0x6e2d, 0xce => 0x6e6e, 0xcf => 0x6e2e, 0xd0 => 0x6e19, 0xd1 => 0x6e72, 0xd2 => 0x6e5f, 0xd3 => 0x6e3e, 0xd4 => 0x6e23, 0xd5 => 0x6e6b, 0xd6 => 0x6e2b, 0xd7 => 0x6e76, 0xd8 => 0x6e4d, 0xd9 => 0x6e1f, 0xda => 0x6e43, 0xdb => 0x6e3a, 0xdc => 0x6e4e, 0xdd => 0x6e24, 0xde => 0x6eff, 0xdf => 0x6e1d, 0xe0 => 0x6e38, 0xe1 => 0x6e82, 0xe2 => 0x6eaa, 0xe3 => 0x6e98, 0xe4 => 0x6ec9, 0xe5 => 0x6eb7, 0xe6 => 0x6ed3, 0xe7 => 0x6ebd, 0xe8 => 0x6eaf, 0xe9 => 0x6ec4, 0xea => 0x6eb2, 0xeb => 0x6ed4, 0xec => 0x6ed5, 0xed => 0x6e8f, 0xee => 0x6ea5, 0xef => 0x6ec2, 0xf0 => 0x6e9f, 0xf1 => 0x6f41, 0xf2 => 0x6f11, 0xf3 => 0x704c, 0xf4 => 0x6eec, 0xf5 => 0x6ef8, 0xf6 => 0x6efe, 0xf7 => 0x6f3f, 0xf8 => 0x6ef2, 0xf9 => 0x6f31, 0xfa => 0x6eef, 0xfb => 0x6f32, 0xfc => 0x6ecc, }, 0xa1 => 0xff61, 0xa2 => 0xff62, 0xa3 => 0xff63, 0xa4 => 0xff64, 0xa5 => 0xff65, 0xa6 => 0xff66, 0xa7 => 0xff67, 0xa8 => 0xff68, 0xa9 => 0xff69, 0xaa => 0xff6a, 0xab => 0xff6b, 0xac => 0xff6c, 0xad => 0xff6d, 0xae => 0xff6e, 0xaf => 0xff6f, 0xb0 => 0xff70, 0xb1 => 0xff71, 0xb2 => 0xff72, 0xb3 => 0xff73, 0xb4 => 0xff74, 0xb5 => 0xff75, 0xb6 => 0xff76, 0xb7 => 0xff77, 0xb8 => 0xff78, 0xb9 => 0xff79, 0xba => 0xff7a, 0xbb => 0xff7b, 0xbc => 0xff7c, 0xbd => 0xff7d, 0xbe => 0xff7e, 0xbf => 0xff7f, 0xc0 => 0xff80, 0xc1 => 0xff81, 0xc2 => 0xff82, 0xc3 => 0xff83, 0xc4 => 0xff84, 0xc5 => 0xff85, 0xc6 => 0xff86, 0xc7 => 0xff87, 0xc8 => 0xff88, 0xc9 => 0xff89, 0xca => 0xff8a, 0xcb => 0xff8b, 0xcc => 0xff8c, 0xcd => 0xff8d, 0xce => 0xff8e, 0xcf => 0xff8f, 0xd0 => 0xff90, 0xd1 => 0xff91, 0xd2 => 0xff92, 0xd3 => 0xff93, 0xd4 => 0xff94, 0xd5 => 0xff95, 0xd6 => 0xff96, 0xd7 => 0xff97, 0xd8 => 0xff98, 0xd9 => 0xff99, 0xda => 0xff9a, 0xdb => 0xff9b, 0xdc => 0xff9c, 0xdd => 0xff9d, 0xde => 0xff9e, 0xdf => 0xff9f, 0xe0 => { 0x40 => 0x6f3e, 0x41 => 0x6f13, 0x42 => 0x6ef7, 0x43 => 0x6f86, 0x44 => 0x6f7a, 0x45 => 0x6f78, 0x46 => 0x6f81, 0x47 => 0x6f80, 0x48 => 0x6f6f, 0x49 => 0x6f5b, 0x4a => 0x6ff3, 0x4b => 0x6f6d, 0x4c => 0x6f82, 0x4d => 0x6f7c, 0x4e => 0x6f58, 0x4f => 0x6f8e, 0x50 => 0x6f91, 0x51 => 0x6fc2, 0x52 => 0x6f66, 0x53 => 0x6fb3, 0x54 => 0x6fa3, 0x55 => 0x6fa1, 0x56 => 0x6fa4, 0x57 => 0x6fb9, 0x58 => 0x6fc6, 0x59 => 0x6faa, 0x5a => 0x6fdf, 0x5b => 0x6fd5, 0x5c => 0x6fec, 0x5d => 0x6fd4, 0x5e => 0x6fd8, 0x5f => 0x6ff1, 0x60 => 0x6fee, 0x61 => 0x6fdb, 0x62 => 0x7009, 0x63 => 0x700b, 0x64 => 0x6ffa, 0x65 => 0x7011, 0x66 => 0x7001, 0x67 => 0x700f, 0x68 => 0x6ffe, 0x69 => 0x701b, 0x6a => 0x701a, 0x6b => 0x6f74, 0x6c => 0x701d, 0x6d => 0x7018, 0x6e => 0x701f, 0x6f => 0x7030, 0x70 => 0x703e, 0x71 => 0x7032, 0x72 => 0x7051, 0x73 => 0x7063, 0x74 => 0x7099, 0x75 => 0x7092, 0x76 => 0x70af, 0x77 => 0x70f1, 0x78 => 0x70ac, 0x79 => 0x70b8, 0x7a => 0x70b3, 0x7b => 0x70ae, 0x7c => 0x70df, 0x7d => 0x70cb, 0x7e => 0x70dd, 0x80 => 0x70d9, 0x81 => 0x7109, 0x82 => 0x70fd, 0x83 => 0x711c, 0x84 => 0x7119, 0x85 => 0x7165, 0x86 => 0x7155, 0x87 => 0x7188, 0x88 => 0x7166, 0x89 => 0x7162, 0x8a => 0x714c, 0x8b => 0x7156, 0x8c => 0x716c, 0x8d => 0x718f, 0x8e => 0x71fb, 0x8f => 0x7184, 0x90 => 0x7195, 0x91 => 0x71a8, 0x92 => 0x71ac, 0x93 => 0x71d7, 0x94 => 0x71b9, 0x95 => 0x71be, 0x96 => 0x71d2, 0x97 => 0x71c9, 0x98 => 0x71d4, 0x99 => 0x71ce, 0x9a => 0x71e0, 0x9b => 0x71ec, 0x9c => 0x71e7, 0x9d => 0x71f5, 0x9e => 0x71fc, 0x9f => 0x71f9, 0xa0 => 0x71ff, 0xa1 => 0x720d, 0xa2 => 0x7210, 0xa3 => 0x721b, 0xa4 => 0x7228, 0xa5 => 0x722d, 0xa6 => 0x722c, 0xa7 => 0x7230, 0xa8 => 0x7232, 0xa9 => 0x723b, 0xaa => 0x723c, 0xab => 0x723f, 0xac => 0x7240, 0xad => 0x7246, 0xae => 0x724b, 0xaf => 0x7258, 0xb0 => 0x7274, 0xb1 => 0x727e, 0xb2 => 0x7282, 0xb3 => 0x7281, 0xb4 => 0x7287, 0xb5 => 0x7292, 0xb6 => 0x7296, 0xb7 => 0x72a2, 0xb8 => 0x72a7, 0xb9 => 0x72b9, 0xba => 0x72b2, 0xbb => 0x72c3, 0xbc => 0x72c6, 0xbd => 0x72c4, 0xbe => 0x72ce, 0xbf => 0x72d2, 0xc0 => 0x72e2, 0xc1 => 0x72e0, 0xc2 => 0x72e1, 0xc3 => 0x72f9, 0xc4 => 0x72f7, 0xc5 => 0x500f, 0xc6 => 0x7317, 0xc7 => 0x730a, 0xc8 => 0x731c, 0xc9 => 0x7316, 0xca => 0x731d, 0xcb => 0x7334, 0xcc => 0x732f, 0xcd => 0x7329, 0xce => 0x7325, 0xcf => 0x733e, 0xd0 => 0x734e, 0xd1 => 0x734f, 0xd2 => 0x9ed8, 0xd3 => 0x7357, 0xd4 => 0x736a, 0xd5 => 0x7368, 0xd6 => 0x7370, 0xd7 => 0x7378, 0xd8 => 0x7375, 0xd9 => 0x737b, 0xda => 0x737a, 0xdb => 0x73c8, 0xdc => 0x73b3, 0xdd => 0x73ce, 0xde => 0x73bb, 0xdf => 0x73c0, 0xe0 => 0x73e5, 0xe1 => 0x73ee, 0xe2 => 0x73de, 0xe3 => 0x74a2, 0xe4 => 0x7405, 0xe5 => 0x746f, 0xe6 => 0x7425, 0xe7 => 0x73f8, 0xe8 => 0x7432, 0xe9 => 0x743a, 0xea => 0x7455, 0xeb => 0x743f, 0xec => 0x745f, 0xed => 0x7459, 0xee => 0x7441, 0xef => 0x745c, 0xf0 => 0x7469, 0xf1 => 0x7470, 0xf2 => 0x7463, 0xf3 => 0x746a, 0xf4 => 0x7476, 0xf5 => 0x747e, 0xf6 => 0x748b, 0xf7 => 0x749e, 0xf8 => 0x74a7, 0xf9 => 0x74ca, 0xfa => 0x74cf, 0xfb => 0x74d4, 0xfc => 0x73f1, }, 0xe1 => { 0x40 => 0x74e0, 0x41 => 0x74e3, 0x42 => 0x74e7, 0x43 => 0x74e9, 0x44 => 0x74ee, 0x45 => 0x74f2, 0x46 => 0x74f0, 0x47 => 0x74f1, 0x48 => 0x74f8, 0x49 => 0x74f7, 0x4a => 0x7504, 0x4b => 0x7503, 0x4c => 0x7505, 0x4d => 0x750c, 0x4e => 0x750e, 0x4f => 0x750d, 0x50 => 0x7515, 0x51 => 0x7513, 0x52 => 0x751e, 0x53 => 0x7526, 0x54 => 0x752c, 0x55 => 0x753c, 0x56 => 0x7544, 0x57 => 0x754d, 0x58 => 0x754a, 0x59 => 0x7549, 0x5a => 0x755b, 0x5b => 0x7546, 0x5c => 0x755a, 0x5d => 0x7569, 0x5e => 0x7564, 0x5f => 0x7567, 0x60 => 0x756b, 0x61 => 0x756d, 0x62 => 0x7578, 0x63 => 0x7576, 0x64 => 0x7586, 0x65 => 0x7587, 0x66 => 0x7574, 0x67 => 0x758a, 0x68 => 0x7589, 0x69 => 0x7582, 0x6a => 0x7594, 0x6b => 0x759a, 0x6c => 0x759d, 0x6d => 0x75a5, 0x6e => 0x75a3, 0x6f => 0x75c2, 0x70 => 0x75b3, 0x71 => 0x75c3, 0x72 => 0x75b5, 0x73 => 0x75bd, 0x74 => 0x75b8, 0x75 => 0x75bc, 0x76 => 0x75b1, 0x77 => 0x75cd, 0x78 => 0x75ca, 0x79 => 0x75d2, 0x7a => 0x75d9, 0x7b => 0x75e3, 0x7c => 0x75de, 0x7d => 0x75fe, 0x7e => 0x75ff, 0x80 => 0x75fc, 0x81 => 0x7601, 0x82 => 0x75f0, 0x83 => 0x75fa, 0x84 => 0x75f2, 0x85 => 0x75f3, 0x86 => 0x760b, 0x87 => 0x760d, 0x88 => 0x7609, 0x89 => 0x761f, 0x8a => 0x7627, 0x8b => 0x7620, 0x8c => 0x7621, 0x8d => 0x7622, 0x8e => 0x7624, 0x8f => 0x7634, 0x90 => 0x7630, 0x91 => 0x763b, 0x92 => 0x7647, 0x93 => 0x7648, 0x94 => 0x7646, 0x95 => 0x765c, 0x96 => 0x7658, 0x97 => 0x7661, 0x98 => 0x7662, 0x99 => 0x7668, 0x9a => 0x7669, 0x9b => 0x766a, 0x9c => 0x7667, 0x9d => 0x766c, 0x9e => 0x7670, 0x9f => 0x7672, 0xa0 => 0x7676, 0xa1 => 0x7678, 0xa2 => 0x767c, 0xa3 => 0x7680, 0xa4 => 0x7683, 0xa5 => 0x7688, 0xa6 => 0x768b, 0xa7 => 0x768e, 0xa8 => 0x7696, 0xa9 => 0x7693, 0xaa => 0x7699, 0xab => 0x769a, 0xac => 0x76b0, 0xad => 0x76b4, 0xae => 0x76b8, 0xaf => 0x76b9, 0xb0 => 0x76ba, 0xb1 => 0x76c2, 0xb2 => 0x76cd, 0xb3 => 0x76d6, 0xb4 => 0x76d2, 0xb5 => 0x76de, 0xb6 => 0x76e1, 0xb7 => 0x76e5, 0xb8 => 0x76e7, 0xb9 => 0x76ea, 0xba => 0x862f, 0xbb => 0x76fb, 0xbc => 0x7708, 0xbd => 0x7707, 0xbe => 0x7704, 0xbf => 0x7729, 0xc0 => 0x7724, 0xc1 => 0x771e, 0xc2 => 0x7725, 0xc3 => 0x7726, 0xc4 => 0x771b, 0xc5 => 0x7737, 0xc6 => 0x7738, 0xc7 => 0x7747, 0xc8 => 0x775a, 0xc9 => 0x7768, 0xca => 0x776b, 0xcb => 0x775b, 0xcc => 0x7765, 0xcd => 0x777f, 0xce => 0x777e, 0xcf => 0x7779, 0xd0 => 0x778e, 0xd1 => 0x778b, 0xd2 => 0x7791, 0xd3 => 0x77a0, 0xd4 => 0x779e, 0xd5 => 0x77b0, 0xd6 => 0x77b6, 0xd7 => 0x77b9, 0xd8 => 0x77bf, 0xd9 => 0x77bc, 0xda => 0x77bd, 0xdb => 0x77bb, 0xdc => 0x77c7, 0xdd => 0x77cd, 0xde => 0x77d7, 0xdf => 0x77da, 0xe0 => 0x77dc, 0xe1 => 0x77e3, 0xe2 => 0x77ee, 0xe3 => 0x77fc, 0xe4 => 0x780c, 0xe5 => 0x7812, 0xe6 => 0x7926, 0xe7 => 0x7820, 0xe8 => 0x792a, 0xe9 => 0x7845, 0xea => 0x788e, 0xeb => 0x7874, 0xec => 0x7886, 0xed => 0x787c, 0xee => 0x789a, 0xef => 0x788c, 0xf0 => 0x78a3, 0xf1 => 0x78b5, 0xf2 => 0x78aa, 0xf3 => 0x78af, 0xf4 => 0x78d1, 0xf5 => 0x78c6, 0xf6 => 0x78cb, 0xf7 => 0x78d4, 0xf8 => 0x78be, 0xf9 => 0x78bc, 0xfa => 0x78c5, 0xfb => 0x78ca, 0xfc => 0x78ec, }, 0xe2 => { 0x40 => 0x78e7, 0x41 => 0x78da, 0x42 => 0x78fd, 0x43 => 0x78f4, 0x44 => 0x7907, 0x45 => 0x7912, 0x46 => 0x7911, 0x47 => 0x7919, 0x48 => 0x792c, 0x49 => 0x792b, 0x4a => 0x7940, 0x4b => 0x7960, 0x4c => 0x7957, 0x4d => 0x795f, 0x4e => 0x795a, 0x4f => 0x7955, 0x50 => 0x7953, 0x51 => 0x797a, 0x52 => 0x797f, 0x53 => 0x798a, 0x54 => 0x799d, 0x55 => 0x79a7, 0x56 => 0x9f4b, 0x57 => 0x79aa, 0x58 => 0x79ae, 0x59 => 0x79b3, 0x5a => 0x79b9, 0x5b => 0x79ba, 0x5c => 0x79c9, 0x5d => 0x79d5, 0x5e => 0x79e7, 0x5f => 0x79ec, 0x60 => 0x79e1, 0x61 => 0x79e3, 0x62 => 0x7a08, 0x63 => 0x7a0d, 0x64 => 0x7a18, 0x65 => 0x7a19, 0x66 => 0x7a20, 0x67 => 0x7a1f, 0x68 => 0x7980, 0x69 => 0x7a31, 0x6a => 0x7a3b, 0x6b => 0x7a3e, 0x6c => 0x7a37, 0x6d => 0x7a43, 0x6e => 0x7a57, 0x6f => 0x7a49, 0x70 => 0x7a61, 0x71 => 0x7a62, 0x72 => 0x7a69, 0x73 => 0x9f9d, 0x74 => 0x7a70, 0x75 => 0x7a79, 0x76 => 0x7a7d, 0x77 => 0x7a88, 0x78 => 0x7a97, 0x79 => 0x7a95, 0x7a => 0x7a98, 0x7b => 0x7a96, 0x7c => 0x7aa9, 0x7d => 0x7ac8, 0x7e => 0x7ab0, 0x80 => 0x7ab6, 0x81 => 0x7ac5, 0x82 => 0x7ac4, 0x83 => 0x7abf, 0x84 => 0x9083, 0x85 => 0x7ac7, 0x86 => 0x7aca, 0x87 => 0x7acd, 0x88 => 0x7acf, 0x89 => 0x7ad5, 0x8a => 0x7ad3, 0x8b => 0x7ad9, 0x8c => 0x7ada, 0x8d => 0x7add, 0x8e => 0x7ae1, 0x8f => 0x7ae2, 0x90 => 0x7ae6, 0x91 => 0x7aed, 0x92 => 0x7af0, 0x93 => 0x7b02, 0x94 => 0x7b0f, 0x95 => 0x7b0a, 0x96 => 0x7b06, 0x97 => 0x7b33, 0x98 => 0x7b18, 0x99 => 0x7b19, 0x9a => 0x7b1e, 0x9b => 0x7b35, 0x9c => 0x7b28, 0x9d => 0x7b36, 0x9e => 0x7b50, 0x9f => 0x7b7a, 0xa0 => 0x7b04, 0xa1 => 0x7b4d, 0xa2 => 0x7b0b, 0xa3 => 0x7b4c, 0xa4 => 0x7b45, 0xa5 => 0x7b75, 0xa6 => 0x7b65, 0xa7 => 0x7b74, 0xa8 => 0x7b67, 0xa9 => 0x7b70, 0xaa => 0x7b71, 0xab => 0x7b6c, 0xac => 0x7b6e, 0xad => 0x7b9d, 0xae => 0x7b98, 0xaf => 0x7b9f, 0xb0 => 0x7b8d, 0xb1 => 0x7b9c, 0xb2 => 0x7b9a, 0xb3 => 0x7b8b, 0xb4 => 0x7b92, 0xb5 => 0x7b8f, 0xb6 => 0x7b5d, 0xb7 => 0x7b99, 0xb8 => 0x7bcb, 0xb9 => 0x7bc1, 0xba => 0x7bcc, 0xbb => 0x7bcf, 0xbc => 0x7bb4, 0xbd => 0x7bc6, 0xbe => 0x7bdd, 0xbf => 0x7be9, 0xc0 => 0x7c11, 0xc1 => 0x7c14, 0xc2 => 0x7be6, 0xc3 => 0x7be5, 0xc4 => 0x7c60, 0xc5 => 0x7c00, 0xc6 => 0x7c07, 0xc7 => 0x7c13, 0xc8 => 0x7bf3, 0xc9 => 0x7bf7, 0xca => 0x7c17, 0xcb => 0x7c0d, 0xcc => 0x7bf6, 0xcd => 0x7c23, 0xce => 0x7c27, 0xcf => 0x7c2a, 0xd0 => 0x7c1f, 0xd1 => 0x7c37, 0xd2 => 0x7c2b, 0xd3 => 0x7c3d, 0xd4 => 0x7c4c, 0xd5 => 0x7c43, 0xd6 => 0x7c54, 0xd7 => 0x7c4f, 0xd8 => 0x7c40, 0xd9 => 0x7c50, 0xda => 0x7c58, 0xdb => 0x7c5f, 0xdc => 0x7c64, 0xdd => 0x7c56, 0xde => 0x7c65, 0xdf => 0x7c6c, 0xe0 => 0x7c75, 0xe1 => 0x7c83, 0xe2 => 0x7c90, 0xe3 => 0x7ca4, 0xe4 => 0x7cad, 0xe5 => 0x7ca2, 0xe6 => 0x7cab, 0xe7 => 0x7ca1, 0xe8 => 0x7ca8, 0xe9 => 0x7cb3, 0xea => 0x7cb2, 0xeb => 0x7cb1, 0xec => 0x7cae, 0xed => 0x7cb9, 0xee => 0x7cbd, 0xef => 0x7cc0, 0xf0 => 0x7cc5, 0xf1 => 0x7cc2, 0xf2 => 0x7cd8, 0xf3 => 0x7cd2, 0xf4 => 0x7cdc, 0xf5 => 0x7ce2, 0xf6 => 0x9b3b, 0xf7 => 0x7cef, 0xf8 => 0x7cf2, 0xf9 => 0x7cf4, 0xfa => 0x7cf6, 0xfb => 0x7cfa, 0xfc => 0x7d06, }, 0xe3 => { 0x40 => 0x7d02, 0x41 => 0x7d1c, 0x42 => 0x7d15, 0x43 => 0x7d0a, 0x44 => 0x7d45, 0x45 => 0x7d4b, 0x46 => 0x7d2e, 0x47 => 0x7d32, 0x48 => 0x7d3f, 0x49 => 0x7d35, 0x4a => 0x7d46, 0x4b => 0x7d73, 0x4c => 0x7d56, 0x4d => 0x7d4e, 0x4e => 0x7d72, 0x4f => 0x7d68, 0x50 => 0x7d6e, 0x51 => 0x7d4f, 0x52 => 0x7d63, 0x53 => 0x7d93, 0x54 => 0x7d89, 0x55 => 0x7d5b, 0x56 => 0x7d8f, 0x57 => 0x7d7d, 0x58 => 0x7d9b, 0x59 => 0x7dba, 0x5a => 0x7dae, 0x5b => 0x7da3, 0x5c => 0x7db5, 0x5d => 0x7dc7, 0x5e => 0x7dbd, 0x5f => 0x7dab, 0x60 => 0x7e3d, 0x61 => 0x7da2, 0x62 => 0x7daf, 0x63 => 0x7ddc, 0x64 => 0x7db8, 0x65 => 0x7d9f, 0x66 => 0x7db0, 0x67 => 0x7dd8, 0x68 => 0x7ddd, 0x69 => 0x7de4, 0x6a => 0x7dde, 0x6b => 0x7dfb, 0x6c => 0x7df2, 0x6d => 0x7de1, 0x6e => 0x7e05, 0x6f => 0x7e0a, 0x70 => 0x7e23, 0x71 => 0x7e21, 0x72 => 0x7e12, 0x73 => 0x7e31, 0x74 => 0x7e1f, 0x75 => 0x7e09, 0x76 => 0x7e0b, 0x77 => 0x7e22, 0x78 => 0x7e46, 0x79 => 0x7e66, 0x7a => 0x7e3b, 0x7b => 0x7e35, 0x7c => 0x7e39, 0x7d => 0x7e43, 0x7e => 0x7e37, 0x80 => 0x7e32, 0x81 => 0x7e3a, 0x82 => 0x7e67, 0x83 => 0x7e5d, 0x84 => 0x7e56, 0x85 => 0x7e5e, 0x86 => 0x7e59, 0x87 => 0x7e5a, 0x88 => 0x7e79, 0x89 => 0x7e6a, 0x8a => 0x7e69, 0x8b => 0x7e7c, 0x8c => 0x7e7b, 0x8d => 0x7e83, 0x8e => 0x7dd5, 0x8f => 0x7e7d, 0x90 => 0x8fae, 0x91 => 0x7e7f, 0x92 => 0x7e88, 0x93 => 0x7e89, 0x94 => 0x7e8c, 0x95 => 0x7e92, 0x96 => 0x7e90, 0x97 => 0x7e93, 0x98 => 0x7e94, 0x99 => 0x7e96, 0x9a => 0x7e8e, 0x9b => 0x7e9b, 0x9c => 0x7e9c, 0x9d => 0x7f38, 0x9e => 0x7f3a, 0x9f => 0x7f45, 0xa0 => 0x7f4c, 0xa1 => 0x7f4d, 0xa2 => 0x7f4e, 0xa3 => 0x7f50, 0xa4 => 0x7f51, 0xa5 => 0x7f55, 0xa6 => 0x7f54, 0xa7 => 0x7f58, 0xa8 => 0x7f5f, 0xa9 => 0x7f60, 0xaa => 0x7f68, 0xab => 0x7f69, 0xac => 0x7f67, 0xad => 0x7f78, 0xae => 0x7f82, 0xaf => 0x7f86, 0xb0 => 0x7f83, 0xb1 => 0x7f88, 0xb2 => 0x7f87, 0xb3 => 0x7f8c, 0xb4 => 0x7f94, 0xb5 => 0x7f9e, 0xb6 => 0x7f9d, 0xb7 => 0x7f9a, 0xb8 => 0x7fa3, 0xb9 => 0x7faf, 0xba => 0x7fb2, 0xbb => 0x7fb9, 0xbc => 0x7fae, 0xbd => 0x7fb6, 0xbe => 0x7fb8, 0xbf => 0x8b71, 0xc0 => 0x7fc5, 0xc1 => 0x7fc6, 0xc2 => 0x7fca, 0xc3 => 0x7fd5, 0xc4 => 0x7fd4, 0xc5 => 0x7fe1, 0xc6 => 0x7fe6, 0xc7 => 0x7fe9, 0xc8 => 0x7ff3, 0xc9 => 0x7ff9, 0xca => 0x98dc, 0xcb => 0x8006, 0xcc => 0x8004, 0xcd => 0x800b, 0xce => 0x8012, 0xcf => 0x8018, 0xd0 => 0x8019, 0xd1 => 0x801c, 0xd2 => 0x8021, 0xd3 => 0x8028, 0xd4 => 0x803f, 0xd5 => 0x803b, 0xd6 => 0x804a, 0xd7 => 0x8046, 0xd8 => 0x8052, 0xd9 => 0x8058, 0xda => 0x805a, 0xdb => 0x805f, 0xdc => 0x8062, 0xdd => 0x8068, 0xde => 0x8073, 0xdf => 0x8072, 0xe0 => 0x8070, 0xe1 => 0x8076, 0xe2 => 0x8079, 0xe3 => 0x807d, 0xe4 => 0x807f, 0xe5 => 0x8084, 0xe6 => 0x8086, 0xe7 => 0x8085, 0xe8 => 0x809b, 0xe9 => 0x8093, 0xea => 0x809a, 0xeb => 0x80ad, 0xec => 0x5190, 0xed => 0x80ac, 0xee => 0x80db, 0xef => 0x80e5, 0xf0 => 0x80d9, 0xf1 => 0x80dd, 0xf2 => 0x80c4, 0xf3 => 0x80da, 0xf4 => 0x80d6, 0xf5 => 0x8109, 0xf6 => 0x80ef, 0xf7 => 0x80f1, 0xf8 => 0x811b, 0xf9 => 0x8129, 0xfa => 0x8123, 0xfb => 0x812f, 0xfc => 0x814b, }, 0xe4 => { 0x40 => 0x968b, 0x41 => 0x8146, 0x42 => 0x813e, 0x43 => 0x8153, 0x44 => 0x8151, 0x45 => 0x80fc, 0x46 => 0x8171, 0x47 => 0x816e, 0x48 => 0x8165, 0x49 => 0x8166, 0x4a => 0x8174, 0x4b => 0x8183, 0x4c => 0x8188, 0x4d => 0x818a, 0x4e => 0x8180, 0x4f => 0x8182, 0x50 => 0x81a0, 0x51 => 0x8195, 0x52 => 0x81a4, 0x53 => 0x81a3, 0x54 => 0x815f, 0x55 => 0x8193, 0x56 => 0x81a9, 0x57 => 0x81b0, 0x58 => 0x81b5, 0x59 => 0x81be, 0x5a => 0x81b8, 0x5b => 0x81bd, 0x5c => 0x81c0, 0x5d => 0x81c2, 0x5e => 0x81ba, 0x5f => 0x81c9, 0x60 => 0x81cd, 0x61 => 0x81d1, 0x62 => 0x81d9, 0x63 => 0x81d8, 0x64 => 0x81c8, 0x65 => 0x81da, 0x66 => 0x81df, 0x67 => 0x81e0, 0x68 => 0x81e7, 0x69 => 0x81fa, 0x6a => 0x81fb, 0x6b => 0x81fe, 0x6c => 0x8201, 0x6d => 0x8202, 0x6e => 0x8205, 0x6f => 0x8207, 0x70 => 0x820a, 0x71 => 0x820d, 0x72 => 0x8210, 0x73 => 0x8216, 0x74 => 0x8229, 0x75 => 0x822b, 0x76 => 0x8238, 0x77 => 0x8233, 0x78 => 0x8240, 0x79 => 0x8259, 0x7a => 0x8258, 0x7b => 0x825d, 0x7c => 0x825a, 0x7d => 0x825f, 0x7e => 0x8264, 0x80 => 0x8262, 0x81 => 0x8268, 0x82 => 0x826a, 0x83 => 0x826b, 0x84 => 0x822e, 0x85 => 0x8271, 0x86 => 0x8277, 0x87 => 0x8278, 0x88 => 0x827e, 0x89 => 0x828d, 0x8a => 0x8292, 0x8b => 0x82ab, 0x8c => 0x829f, 0x8d => 0x82bb, 0x8e => 0x82ac, 0x8f => 0x82e1, 0x90 => 0x82e3, 0x91 => 0x82df, 0x92 => 0x82d2, 0x93 => 0x82f4, 0x94 => 0x82f3, 0x95 => 0x82fa, 0x96 => 0x8393, 0x97 => 0x8303, 0x98 => 0x82fb, 0x99 => 0x82f9, 0x9a => 0x82de, 0x9b => 0x8306, 0x9c => 0x82dc, 0x9d => 0x8309, 0x9e => 0x82d9, 0x9f => 0x8335, 0xa0 => 0x8334, 0xa1 => 0x8316, 0xa2 => 0x8332, 0xa3 => 0x8331, 0xa4 => 0x8340, 0xa5 => 0x8339, 0xa6 => 0x8350, 0xa7 => 0x8345, 0xa8 => 0x832f, 0xa9 => 0x832b, 0xaa => 0x8317, 0xab => 0x8318, 0xac => 0x8385, 0xad => 0x839a, 0xae => 0x83aa, 0xaf => 0x839f, 0xb0 => 0x83a2, 0xb1 => 0x8396, 0xb2 => 0x8323, 0xb3 => 0x838e, 0xb4 => 0x8387, 0xb5 => 0x838a, 0xb6 => 0x837c, 0xb7 => 0x83b5, 0xb8 => 0x8373, 0xb9 => 0x8375, 0xba => 0x83a0, 0xbb => 0x8389, 0xbc => 0x83a8, 0xbd => 0x83f4, 0xbe => 0x8413, 0xbf => 0x83eb, 0xc0 => 0x83ce, 0xc1 => 0x83fd, 0xc2 => 0x8403, 0xc3 => 0x83d8, 0xc4 => 0x840b, 0xc5 => 0x83c1, 0xc6 => 0x83f7, 0xc7 => 0x8407, 0xc8 => 0x83e0, 0xc9 => 0x83f2, 0xca => 0x840d, 0xcb => 0x8422, 0xcc => 0x8420, 0xcd => 0x83bd, 0xce => 0x8438, 0xcf => 0x8506, 0xd0 => 0x83fb, 0xd1 => 0x846d, 0xd2 => 0x842a, 0xd3 => 0x843c, 0xd4 => 0x855a, 0xd5 => 0x8484, 0xd6 => 0x8477, 0xd7 => 0x846b, 0xd8 => 0x84ad, 0xd9 => 0x846e, 0xda => 0x8482, 0xdb => 0x8469, 0xdc => 0x8446, 0xdd => 0x842c, 0xde => 0x846f, 0xdf => 0x8479, 0xe0 => 0x8435, 0xe1 => 0x84ca, 0xe2 => 0x8462, 0xe3 => 0x84b9, 0xe4 => 0x84bf, 0xe5 => 0x849f, 0xe6 => 0x84d9, 0xe7 => 0x84cd, 0xe8 => 0x84bb, 0xe9 => 0x84da, 0xea => 0x84d0, 0xeb => 0x84c1, 0xec => 0x84c6, 0xed => 0x84d6, 0xee => 0x84a1, 0xef => 0x8521, 0xf0 => 0x84ff, 0xf1 => 0x84f4, 0xf2 => 0x8517, 0xf3 => 0x8518, 0xf4 => 0x852c, 0xf5 => 0x851f, 0xf6 => 0x8515, 0xf7 => 0x8514, 0xf8 => 0x84fc, 0xf9 => 0x8540, 0xfa => 0x8563, 0xfb => 0x8558, 0xfc => 0x8548, }, 0xe5 => { 0x40 => 0x8541, 0x41 => 0x8602, 0x42 => 0x854b, 0x43 => 0x8555, 0x44 => 0x8580, 0x45 => 0x85a4, 0x46 => 0x8588, 0x47 => 0x8591, 0x48 => 0x858a, 0x49 => 0x85a8, 0x4a => 0x856d, 0x4b => 0x8594, 0x4c => 0x859b, 0x4d => 0x85ea, 0x4e => 0x8587, 0x4f => 0x859c, 0x50 => 0x8577, 0x51 => 0x857e, 0x52 => 0x8590, 0x53 => 0x85c9, 0x54 => 0x85ba, 0x55 => 0x85cf, 0x56 => 0x85b9, 0x57 => 0x85d0, 0x58 => 0x85d5, 0x59 => 0x85dd, 0x5a => 0x85e5, 0x5b => 0x85dc, 0x5c => 0x85f9, 0x5d => 0x860a, 0x5e => 0x8613, 0x5f => 0x860b, 0x60 => 0x85fe, 0x61 => 0x85fa, 0x62 => 0x8606, 0x63 => 0x8622, 0x64 => 0x861a, 0x65 => 0x8630, 0x66 => 0x863f, 0x67 => 0x864d, 0x68 => 0x4e55, 0x69 => 0x8654, 0x6a => 0x865f, 0x6b => 0x8667, 0x6c => 0x8671, 0x6d => 0x8693, 0x6e => 0x86a3, 0x6f => 0x86a9, 0x70 => 0x86aa, 0x71 => 0x868b, 0x72 => 0x868c, 0x73 => 0x86b6, 0x74 => 0x86af, 0x75 => 0x86c4, 0x76 => 0x86c6, 0x77 => 0x86b0, 0x78 => 0x86c9, 0x79 => 0x8823, 0x7a => 0x86ab, 0x7b => 0x86d4, 0x7c => 0x86de, 0x7d => 0x86e9, 0x7e => 0x86ec, 0x80 => 0x86df, 0x81 => 0x86db, 0x82 => 0x86ef, 0x83 => 0x8712, 0x84 => 0x8706, 0x85 => 0x8708, 0x86 => 0x8700, 0x87 => 0x8703, 0x88 => 0x86fb, 0x89 => 0x8711, 0x8a => 0x8709, 0x8b => 0x870d, 0x8c => 0x86f9, 0x8d => 0x870a, 0x8e => 0x8734, 0x8f => 0x873f, 0x90 => 0x8737, 0x91 => 0x873b, 0x92 => 0x8725, 0x93 => 0x8729, 0x94 => 0x871a, 0x95 => 0x8760, 0x96 => 0x875f, 0x97 => 0x8778, 0x98 => 0x874c, 0x99 => 0x874e, 0x9a => 0x8774, 0x9b => 0x8757, 0x9c => 0x8768, 0x9d => 0x876e, 0x9e => 0x8759, 0x9f => 0x8753, 0xa0 => 0x8763, 0xa1 => 0x876a, 0xa2 => 0x8805, 0xa3 => 0x87a2, 0xa4 => 0x879f, 0xa5 => 0x8782, 0xa6 => 0x87af, 0xa7 => 0x87cb, 0xa8 => 0x87bd, 0xa9 => 0x87c0, 0xaa => 0x87d0, 0xab => 0x96d6, 0xac => 0x87ab, 0xad => 0x87c4, 0xae => 0x87b3, 0xaf => 0x87c7, 0xb0 => 0x87c6, 0xb1 => 0x87bb, 0xb2 => 0x87ef, 0xb3 => 0x87f2, 0xb4 => 0x87e0, 0xb5 => 0x880f, 0xb6 => 0x880d, 0xb7 => 0x87fe, 0xb8 => 0x87f6, 0xb9 => 0x87f7, 0xba => 0x880e, 0xbb => 0x87d2, 0xbc => 0x8811, 0xbd => 0x8816, 0xbe => 0x8815, 0xbf => 0x8822, 0xc0 => 0x8821, 0xc1 => 0x8831, 0xc2 => 0x8836, 0xc3 => 0x8839, 0xc4 => 0x8827, 0xc5 => 0x883b, 0xc6 => 0x8844, 0xc7 => 0x8842, 0xc8 => 0x8852, 0xc9 => 0x8859, 0xca => 0x885e, 0xcb => 0x8862, 0xcc => 0x886b, 0xcd => 0x8881, 0xce => 0x887e, 0xcf => 0x889e, 0xd0 => 0x8875, 0xd1 => 0x887d, 0xd2 => 0x88b5, 0xd3 => 0x8872, 0xd4 => 0x8882, 0xd5 => 0x8897, 0xd6 => 0x8892, 0xd7 => 0x88ae, 0xd8 => 0x8899, 0xd9 => 0x88a2, 0xda => 0x888d, 0xdb => 0x88a4, 0xdc => 0x88b0, 0xdd => 0x88bf, 0xde => 0x88b1, 0xdf => 0x88c3, 0xe0 => 0x88c4, 0xe1 => 0x88d4, 0xe2 => 0x88d8, 0xe3 => 0x88d9, 0xe4 => 0x88dd, 0xe5 => 0x88f9, 0xe6 => 0x8902, 0xe7 => 0x88fc, 0xe8 => 0x88f4, 0xe9 => 0x88e8, 0xea => 0x88f2, 0xeb => 0x8904, 0xec => 0x890c, 0xed => 0x890a, 0xee => 0x8913, 0xef => 0x8943, 0xf0 => 0x891e, 0xf1 => 0x8925, 0xf2 => 0x892a, 0xf3 => 0x892b, 0xf4 => 0x8941, 0xf5 => 0x8944, 0xf6 => 0x893b, 0xf7 => 0x8936, 0xf8 => 0x8938, 0xf9 => 0x894c, 0xfa => 0x891d, 0xfb => 0x8960, 0xfc => 0x895e, }, 0xe6 => { 0x40 => 0x8966, 0x41 => 0x8964, 0x42 => 0x896d, 0x43 => 0x896a, 0x44 => 0x896f, 0x45 => 0x8974, 0x46 => 0x8977, 0x47 => 0x897e, 0x48 => 0x8983, 0x49 => 0x8988, 0x4a => 0x898a, 0x4b => 0x8993, 0x4c => 0x8998, 0x4d => 0x89a1, 0x4e => 0x89a9, 0x4f => 0x89a6, 0x50 => 0x89ac, 0x51 => 0x89af, 0x52 => 0x89b2, 0x53 => 0x89ba, 0x54 => 0x89bd, 0x55 => 0x89bf, 0x56 => 0x89c0, 0x57 => 0x89da, 0x58 => 0x89dc, 0x59 => 0x89dd, 0x5a => 0x89e7, 0x5b => 0x89f4, 0x5c => 0x89f8, 0x5d => 0x8a03, 0x5e => 0x8a16, 0x5f => 0x8a10, 0x60 => 0x8a0c, 0x61 => 0x8a1b, 0x62 => 0x8a1d, 0x63 => 0x8a25, 0x64 => 0x8a36, 0x65 => 0x8a41, 0x66 => 0x8a5b, 0x67 => 0x8a52, 0x68 => 0x8a46, 0x69 => 0x8a48, 0x6a => 0x8a7c, 0x6b => 0x8a6d, 0x6c => 0x8a6c, 0x6d => 0x8a62, 0x6e => 0x8a85, 0x6f => 0x8a82, 0x70 => 0x8a84, 0x71 => 0x8aa8, 0x72 => 0x8aa1, 0x73 => 0x8a91, 0x74 => 0x8aa5, 0x75 => 0x8aa6, 0x76 => 0x8a9a, 0x77 => 0x8aa3, 0x78 => 0x8ac4, 0x79 => 0x8acd, 0x7a => 0x8ac2, 0x7b => 0x8ada, 0x7c => 0x8aeb, 0x7d => 0x8af3, 0x7e => 0x8ae7, 0x80 => 0x8ae4, 0x81 => 0x8af1, 0x82 => 0x8b14, 0x83 => 0x8ae0, 0x84 => 0x8ae2, 0x85 => 0x8af7, 0x86 => 0x8ade, 0x87 => 0x8adb, 0x88 => 0x8b0c, 0x89 => 0x8b07, 0x8a => 0x8b1a, 0x8b => 0x8ae1, 0x8c => 0x8b16, 0x8d => 0x8b10, 0x8e => 0x8b17, 0x8f => 0x8b20, 0x90 => 0x8b33, 0x91 => 0x97ab, 0x92 => 0x8b26, 0x93 => 0x8b2b, 0x94 => 0x8b3e, 0x95 => 0x8b28, 0x96 => 0x8b41, 0x97 => 0x8b4c, 0x98 => 0x8b4f, 0x99 => 0x8b4e, 0x9a => 0x8b49, 0x9b => 0x8b56, 0x9c => 0x8b5b, 0x9d => 0x8b5a, 0x9e => 0x8b6b, 0x9f => 0x8b5f, 0xa0 => 0x8b6c, 0xa1 => 0x8b6f, 0xa2 => 0x8b74, 0xa3 => 0x8b7d, 0xa4 => 0x8b80, 0xa5 => 0x8b8c, 0xa6 => 0x8b8e, 0xa7 => 0x8b92, 0xa8 => 0x8b93, 0xa9 => 0x8b96, 0xaa => 0x8b99, 0xab => 0x8b9a, 0xac => 0x8c3a, 0xad => 0x8c41, 0xae => 0x8c3f, 0xaf => 0x8c48, 0xb0 => 0x8c4c, 0xb1 => 0x8c4e, 0xb2 => 0x8c50, 0xb3 => 0x8c55, 0xb4 => 0x8c62, 0xb5 => 0x8c6c, 0xb6 => 0x8c78, 0xb7 => 0x8c7a, 0xb8 => 0x8c82, 0xb9 => 0x8c89, 0xba => 0x8c85, 0xbb => 0x8c8a, 0xbc => 0x8c8d, 0xbd => 0x8c8e, 0xbe => 0x8c94, 0xbf => 0x8c7c, 0xc0 => 0x8c98, 0xc1 => 0x621d, 0xc2 => 0x8cad, 0xc3 => 0x8caa, 0xc4 => 0x8cbd, 0xc5 => 0x8cb2, 0xc6 => 0x8cb3, 0xc7 => 0x8cae, 0xc8 => 0x8cb6, 0xc9 => 0x8cc8, 0xca => 0x8cc1, 0xcb => 0x8ce4, 0xcc => 0x8ce3, 0xcd => 0x8cda, 0xce => 0x8cfd, 0xcf => 0x8cfa, 0xd0 => 0x8cfb, 0xd1 => 0x8d04, 0xd2 => 0x8d05, 0xd3 => 0x8d0a, 0xd4 => 0x8d07, 0xd5 => 0x8d0f, 0xd6 => 0x8d0d, 0xd7 => 0x8d10, 0xd8 => 0x9f4e, 0xd9 => 0x8d13, 0xda => 0x8ccd, 0xdb => 0x8d14, 0xdc => 0x8d16, 0xdd => 0x8d67, 0xde => 0x8d6d, 0xdf => 0x8d71, 0xe0 => 0x8d73, 0xe1 => 0x8d81, 0xe2 => 0x8d99, 0xe3 => 0x8dc2, 0xe4 => 0x8dbe, 0xe5 => 0x8dba, 0xe6 => 0x8dcf, 0xe7 => 0x8dda, 0xe8 => 0x8dd6, 0xe9 => 0x8dcc, 0xea => 0x8ddb, 0xeb => 0x8dcb, 0xec => 0x8dea, 0xed => 0x8deb, 0xee => 0x8ddf, 0xef => 0x8de3, 0xf0 => 0x8dfc, 0xf1 => 0x8e08, 0xf2 => 0x8e09, 0xf3 => 0x8dff, 0xf4 => 0x8e1d, 0xf5 => 0x8e1e, 0xf6 => 0x8e10, 0xf7 => 0x8e1f, 0xf8 => 0x8e42, 0xf9 => 0x8e35, 0xfa => 0x8e30, 0xfb => 0x8e34, 0xfc => 0x8e4a, }, 0xe7 => { 0x40 => 0x8e47, 0x41 => 0x8e49, 0x42 => 0x8e4c, 0x43 => 0x8e50, 0x44 => 0x8e48, 0x45 => 0x8e59, 0x46 => 0x8e64, 0x47 => 0x8e60, 0x48 => 0x8e2a, 0x49 => 0x8e63, 0x4a => 0x8e55, 0x4b => 0x8e76, 0x4c => 0x8e72, 0x4d => 0x8e7c, 0x4e => 0x8e81, 0x4f => 0x8e87, 0x50 => 0x8e85, 0x51 => 0x8e84, 0x52 => 0x8e8b, 0x53 => 0x8e8a, 0x54 => 0x8e93, 0x55 => 0x8e91, 0x56 => 0x8e94, 0x57 => 0x8e99, 0x58 => 0x8eaa, 0x59 => 0x8ea1, 0x5a => 0x8eac, 0x5b => 0x8eb0, 0x5c => 0x8ec6, 0x5d => 0x8eb1, 0x5e => 0x8ebe, 0x5f => 0x8ec5, 0x60 => 0x8ec8, 0x61 => 0x8ecb, 0x62 => 0x8edb, 0x63 => 0x8ee3, 0x64 => 0x8efc, 0x65 => 0x8efb, 0x66 => 0x8eeb, 0x67 => 0x8efe, 0x68 => 0x8f0a, 0x69 => 0x8f05, 0x6a => 0x8f15, 0x6b => 0x8f12, 0x6c => 0x8f19, 0x6d => 0x8f13, 0x6e => 0x8f1c, 0x6f => 0x8f1f, 0x70 => 0x8f1b, 0x71 => 0x8f0c, 0x72 => 0x8f26, 0x73 => 0x8f33, 0x74 => 0x8f3b, 0x75 => 0x8f39, 0x76 => 0x8f45, 0x77 => 0x8f42, 0x78 => 0x8f3e, 0x79 => 0x8f4c, 0x7a => 0x8f49, 0x7b => 0x8f46, 0x7c => 0x8f4e, 0x7d => 0x8f57, 0x7e => 0x8f5c, 0x80 => 0x8f62, 0x81 => 0x8f63, 0x82 => 0x8f64, 0x83 => 0x8f9c, 0x84 => 0x8f9f, 0x85 => 0x8fa3, 0x86 => 0x8fad, 0x87 => 0x8faf, 0x88 => 0x8fb7, 0x89 => 0x8fda, 0x8a => 0x8fe5, 0x8b => 0x8fe2, 0x8c => 0x8fea, 0x8d => 0x8fef, 0x8e => 0x9087, 0x8f => 0x8ff4, 0x90 => 0x9005, 0x91 => 0x8ff9, 0x92 => 0x8ffa, 0x93 => 0x9011, 0x94 => 0x9015, 0x95 => 0x9021, 0x96 => 0x900d, 0x97 => 0x901e, 0x98 => 0x9016, 0x99 => 0x900b, 0x9a => 0x9027, 0x9b => 0x9036, 0x9c => 0x9035, 0x9d => 0x9039, 0x9e => 0x8ff8, 0x9f => 0x904f, 0xa0 => 0x9050, 0xa1 => 0x9051, 0xa2 => 0x9052, 0xa3 => 0x900e, 0xa4 => 0x9049, 0xa5 => 0x903e, 0xa6 => 0x9056, 0xa7 => 0x9058, 0xa8 => 0x905e, 0xa9 => 0x9068, 0xaa => 0x906f, 0xab => 0x9076, 0xac => 0x96a8, 0xad => 0x9072, 0xae => 0x9082, 0xaf => 0x907d, 0xb0 => 0x9081, 0xb1 => 0x9080, 0xb2 => 0x908a, 0xb3 => 0x9089, 0xb4 => 0x908f, 0xb5 => 0x90a8, 0xb6 => 0x90af, 0xb7 => 0x90b1, 0xb8 => 0x90b5, 0xb9 => 0x90e2, 0xba => 0x90e4, 0xbb => 0x6248, 0xbc => 0x90db, 0xbd => 0x9102, 0xbe => 0x9112, 0xbf => 0x9119, 0xc0 => 0x9132, 0xc1 => 0x9130, 0xc2 => 0x914a, 0xc3 => 0x9156, 0xc4 => 0x9158, 0xc5 => 0x9163, 0xc6 => 0x9165, 0xc7 => 0x9169, 0xc8 => 0x9173, 0xc9 => 0x9172, 0xca => 0x918b, 0xcb => 0x9189, 0xcc => 0x9182, 0xcd => 0x91a2, 0xce => 0x91ab, 0xcf => 0x91af, 0xd0 => 0x91aa, 0xd1 => 0x91b5, 0xd2 => 0x91b4, 0xd3 => 0x91ba, 0xd4 => 0x91c0, 0xd5 => 0x91c1, 0xd6 => 0x91c9, 0xd7 => 0x91cb, 0xd8 => 0x91d0, 0xd9 => 0x91d6, 0xda => 0x91df, 0xdb => 0x91e1, 0xdc => 0x91db, 0xdd => 0x91fc, 0xde => 0x91f5, 0xdf => 0x91f6, 0xe0 => 0x921e, 0xe1 => 0x91ff, 0xe2 => 0x9214, 0xe3 => 0x922c, 0xe4 => 0x9215, 0xe5 => 0x9211, 0xe6 => 0x925e, 0xe7 => 0x9257, 0xe8 => 0x9245, 0xe9 => 0x9249, 0xea => 0x9264, 0xeb => 0x9248, 0xec => 0x9295, 0xed => 0x923f, 0xee => 0x924b, 0xef => 0x9250, 0xf0 => 0x929c, 0xf1 => 0x9296, 0xf2 => 0x9293, 0xf3 => 0x929b, 0xf4 => 0x925a, 0xf5 => 0x92cf, 0xf6 => 0x92b9, 0xf7 => 0x92b7, 0xf8 => 0x92e9, 0xf9 => 0x930f, 0xfa => 0x92fa, 0xfb => 0x9344, 0xfc => 0x932e, }, 0xe8 => { 0x40 => 0x9319, 0x41 => 0x9322, 0x42 => 0x931a, 0x43 => 0x9323, 0x44 => 0x933a, 0x45 => 0x9335, 0x46 => 0x933b, 0x47 => 0x935c, 0x48 => 0x9360, 0x49 => 0x937c, 0x4a => 0x936e, 0x4b => 0x9356, 0x4c => 0x93b0, 0x4d => 0x93ac, 0x4e => 0x93ad, 0x4f => 0x9394, 0x50 => 0x93b9, 0x51 => 0x93d6, 0x52 => 0x93d7, 0x53 => 0x93e8, 0x54 => 0x93e5, 0x55 => 0x93d8, 0x56 => 0x93c3, 0x57 => 0x93dd, 0x58 => 0x93d0, 0x59 => 0x93c8, 0x5a => 0x93e4, 0x5b => 0x941a, 0x5c => 0x9414, 0x5d => 0x9413, 0x5e => 0x9403, 0x5f => 0x9407, 0x60 => 0x9410, 0x61 => 0x9436, 0x62 => 0x942b, 0x63 => 0x9435, 0x64 => 0x9421, 0x65 => 0x943a, 0x66 => 0x9441, 0x67 => 0x9452, 0x68 => 0x9444, 0x69 => 0x945b, 0x6a => 0x9460, 0x6b => 0x9462, 0x6c => 0x945e, 0x6d => 0x946a, 0x6e => 0x9229, 0x6f => 0x9470, 0x70 => 0x9475, 0x71 => 0x9477, 0x72 => 0x947d, 0x73 => 0x945a, 0x74 => 0x947c, 0x75 => 0x947e, 0x76 => 0x9481, 0x77 => 0x947f, 0x78 => 0x9582, 0x79 => 0x9587, 0x7a => 0x958a, 0x7b => 0x9594, 0x7c => 0x9596, 0x7d => 0x9598, 0x7e => 0x9599, 0x80 => 0x95a0, 0x81 => 0x95a8, 0x82 => 0x95a7, 0x83 => 0x95ad, 0x84 => 0x95bc, 0x85 => 0x95bb, 0x86 => 0x95b9, 0x87 => 0x95be, 0x88 => 0x95ca, 0x89 => 0x6ff6, 0x8a => 0x95c3, 0x8b => 0x95cd, 0x8c => 0x95cc, 0x8d => 0x95d5, 0x8e => 0x95d4, 0x8f => 0x95d6, 0x90 => 0x95dc, 0x91 => 0x95e1, 0x92 => 0x95e5, 0x93 => 0x95e2, 0x94 => 0x9621, 0x95 => 0x9628, 0x96 => 0x962e, 0x97 => 0x962f, 0x98 => 0x9642, 0x99 => 0x964c, 0x9a => 0x964f, 0x9b => 0x964b, 0x9c => 0x9677, 0x9d => 0x965c, 0x9e => 0x965e, 0x9f => 0x965d, 0xa0 => 0x965f, 0xa1 => 0x9666, 0xa2 => 0x9672, 0xa3 => 0x966c, 0xa4 => 0x968d, 0xa5 => 0x9698, 0xa6 => 0x9695, 0xa7 => 0x9697, 0xa8 => 0x96aa, 0xa9 => 0x96a7, 0xaa => 0x96b1, 0xab => 0x96b2, 0xac => 0x96b0, 0xad => 0x96b4, 0xae => 0x96b6, 0xaf => 0x96b8, 0xb0 => 0x96b9, 0xb1 => 0x96ce, 0xb2 => 0x96cb, 0xb3 => 0x96c9, 0xb4 => 0x96cd, 0xb5 => 0x894d, 0xb6 => 0x96dc, 0xb7 => 0x970d, 0xb8 => 0x96d5, 0xb9 => 0x96f9, 0xba => 0x9704, 0xbb => 0x9706, 0xbc => 0x9708, 0xbd => 0x9713, 0xbe => 0x970e, 0xbf => 0x9711, 0xc0 => 0x970f, 0xc1 => 0x9716, 0xc2 => 0x9719, 0xc3 => 0x9724, 0xc4 => 0x972a, 0xc5 => 0x9730, 0xc6 => 0x9739, 0xc7 => 0x973d, 0xc8 => 0x973e, 0xc9 => 0x9744, 0xca => 0x9746, 0xcb => 0x9748, 0xcc => 0x9742, 0xcd => 0x9749, 0xce => 0x975c, 0xcf => 0x9760, 0xd0 => 0x9764, 0xd1 => 0x9766, 0xd2 => 0x9768, 0xd3 => 0x52d2, 0xd4 => 0x976b, 0xd5 => 0x9771, 0xd6 => 0x9779, 0xd7 => 0x9785, 0xd8 => 0x977c, 0xd9 => 0x9781, 0xda => 0x977a, 0xdb => 0x9786, 0xdc => 0x978b, 0xdd => 0x978f, 0xde => 0x9790, 0xdf => 0x979c, 0xe0 => 0x97a8, 0xe1 => 0x97a6, 0xe2 => 0x97a3, 0xe3 => 0x97b3, 0xe4 => 0x97b4, 0xe5 => 0x97c3, 0xe6 => 0x97c6, 0xe7 => 0x97c8, 0xe8 => 0x97cb, 0xe9 => 0x97dc, 0xea => 0x97ed, 0xeb => 0x9f4f, 0xec => 0x97f2, 0xed => 0x7adf, 0xee => 0x97f6, 0xef => 0x97f5, 0xf0 => 0x980f, 0xf1 => 0x980c, 0xf2 => 0x9838, 0xf3 => 0x9824, 0xf4 => 0x9821, 0xf5 => 0x9837, 0xf6 => 0x983d, 0xf7 => 0x9846, 0xf8 => 0x984f, 0xf9 => 0x984b, 0xfa => 0x986b, 0xfb => 0x986f, 0xfc => 0x9870, }, 0xe9 => { 0x40 => 0x9871, 0x41 => 0x9874, 0x42 => 0x9873, 0x43 => 0x98aa, 0x44 => 0x98af, 0x45 => 0x98b1, 0x46 => 0x98b6, 0x47 => 0x98c4, 0x48 => 0x98c3, 0x49 => 0x98c6, 0x4a => 0x98e9, 0x4b => 0x98eb, 0x4c => 0x9903, 0x4d => 0x9909, 0x4e => 0x9912, 0x4f => 0x9914, 0x50 => 0x9918, 0x51 => 0x9921, 0x52 => 0x991d, 0x53 => 0x991e, 0x54 => 0x9924, 0x55 => 0x9920, 0x56 => 0x992c, 0x57 => 0x992e, 0x58 => 0x993d, 0x59 => 0x993e, 0x5a => 0x9942, 0x5b => 0x9949, 0x5c => 0x9945, 0x5d => 0x9950, 0x5e => 0x994b, 0x5f => 0x9951, 0x60 => 0x9952, 0x61 => 0x994c, 0x62 => 0x9955, 0x63 => 0x9997, 0x64 => 0x9998, 0x65 => 0x99a5, 0x66 => 0x99ad, 0x67 => 0x99ae, 0x68 => 0x99bc, 0x69 => 0x99df, 0x6a => 0x99db, 0x6b => 0x99dd, 0x6c => 0x99d8, 0x6d => 0x99d1, 0x6e => 0x99ed, 0x6f => 0x99ee, 0x70 => 0x99f1, 0x71 => 0x99f2, 0x72 => 0x99fb, 0x73 => 0x99f8, 0x74 => 0x9a01, 0x75 => 0x9a0f, 0x76 => 0x9a05, 0x77 => 0x99e2, 0x78 => 0x9a19, 0x79 => 0x9a2b, 0x7a => 0x9a37, 0x7b => 0x9a45, 0x7c => 0x9a42, 0x7d => 0x9a40, 0x7e => 0x9a43, 0x80 => 0x9a3e, 0x81 => 0x9a55, 0x82 => 0x9a4d, 0x83 => 0x9a5b, 0x84 => 0x9a57, 0x85 => 0x9a5f, 0x86 => 0x9a62, 0x87 => 0x9a65, 0x88 => 0x9a64, 0x89 => 0x9a69, 0x8a => 0x9a6b, 0x8b => 0x9a6a, 0x8c => 0x9aad, 0x8d => 0x9ab0, 0x8e => 0x9abc, 0x8f => 0x9ac0, 0x90 => 0x9acf, 0x91 => 0x9ad1, 0x92 => 0x9ad3, 0x93 => 0x9ad4, 0x94 => 0x9ade, 0x95 => 0x9adf, 0x96 => 0x9ae2, 0x97 => 0x9ae3, 0x98 => 0x9ae6, 0x99 => 0x9aef, 0x9a => 0x9aeb, 0x9b => 0x9aee, 0x9c => 0x9af4, 0x9d => 0x9af1, 0x9e => 0x9af7, 0x9f => 0x9afb, 0xa0 => 0x9b06, 0xa1 => 0x9b18, 0xa2 => 0x9b1a, 0xa3 => 0x9b1f, 0xa4 => 0x9b22, 0xa5 => 0x9b23, 0xa6 => 0x9b25, 0xa7 => 0x9b27, 0xa8 => 0x9b28, 0xa9 => 0x9b29, 0xaa => 0x9b2a, 0xab => 0x9b2e, 0xac => 0x9b2f, 0xad => 0x9b32, 0xae => 0x9b44, 0xaf => 0x9b43, 0xb0 => 0x9b4f, 0xb1 => 0x9b4d, 0xb2 => 0x9b4e, 0xb3 => 0x9b51, 0xb4 => 0x9b58, 0xb5 => 0x9b74, 0xb6 => 0x9b93, 0xb7 => 0x9b83, 0xb8 => 0x9b91, 0xb9 => 0x9b96, 0xba => 0x9b97, 0xbb => 0x9b9f, 0xbc => 0x9ba0, 0xbd => 0x9ba8, 0xbe => 0x9bb4, 0xbf => 0x9bc0, 0xc0 => 0x9bca, 0xc1 => 0x9bb9, 0xc2 => 0x9bc6, 0xc3 => 0x9bcf, 0xc4 => 0x9bd1, 0xc5 => 0x9bd2, 0xc6 => 0x9be3, 0xc7 => 0x9be2, 0xc8 => 0x9be4, 0xc9 => 0x9bd4, 0xca => 0x9be1, 0xcb => 0x9c3a, 0xcc => 0x9bf2, 0xcd => 0x9bf1, 0xce => 0x9bf0, 0xcf => 0x9c15, 0xd0 => 0x9c14, 0xd1 => 0x9c09, 0xd2 => 0x9c13, 0xd3 => 0x9c0c, 0xd4 => 0x9c06, 0xd5 => 0x9c08, 0xd6 => 0x9c12, 0xd7 => 0x9c0a, 0xd8 => 0x9c04, 0xd9 => 0x9c2e, 0xda => 0x9c1b, 0xdb => 0x9c25, 0xdc => 0x9c24, 0xdd => 0x9c21, 0xde => 0x9c30, 0xdf => 0x9c47, 0xe0 => 0x9c32, 0xe1 => 0x9c46, 0xe2 => 0x9c3e, 0xe3 => 0x9c5a, 0xe4 => 0x9c60, 0xe5 => 0x9c67, 0xe6 => 0x9c76, 0xe7 => 0x9c78, 0xe8 => 0x9ce7, 0xe9 => 0x9cec, 0xea => 0x9cf0, 0xeb => 0x9d09, 0xec => 0x9d08, 0xed => 0x9ceb, 0xee => 0x9d03, 0xef => 0x9d06, 0xf0 => 0x9d2a, 0xf1 => 0x9d26, 0xf2 => 0x9daf, 0xf3 => 0x9d23, 0xf4 => 0x9d1f, 0xf5 => 0x9d44, 0xf6 => 0x9d15, 0xf7 => 0x9d12, 0xf8 => 0x9d41, 0xf9 => 0x9d3f, 0xfa => 0x9d3e, 0xfb => 0x9d46, 0xfc => 0x9d48, }, 0xea => { 0x40 => 0x9d5d, 0x41 => 0x9d5e, 0x42 => 0x9d64, 0x43 => 0x9d51, 0x44 => 0x9d50, 0x45 => 0x9d59, 0x46 => 0x9d72, 0x47 => 0x9d89, 0x48 => 0x9d87, 0x49 => 0x9dab, 0x4a => 0x9d6f, 0x4b => 0x9d7a, 0x4c => 0x9d9a, 0x4d => 0x9da4, 0x4e => 0x9da9, 0x4f => 0x9db2, 0x50 => 0x9dc4, 0x51 => 0x9dc1, 0x52 => 0x9dbb, 0x53 => 0x9db8, 0x54 => 0x9dba, 0x55 => 0x9dc6, 0x56 => 0x9dcf, 0x57 => 0x9dc2, 0x58 => 0x9dd9, 0x59 => 0x9dd3, 0x5a => 0x9df8, 0x5b => 0x9de6, 0x5c => 0x9ded, 0x5d => 0x9def, 0x5e => 0x9dfd, 0x5f => 0x9e1a, 0x60 => 0x9e1b, 0x61 => 0x9e1e, 0x62 => 0x9e75, 0x63 => 0x9e79, 0x64 => 0x9e7d, 0x65 => 0x9e81, 0x66 => 0x9e88, 0x67 => 0x9e8b, 0x68 => 0x9e8c, 0x69 => 0x9e92, 0x6a => 0x9e95, 0x6b => 0x9e91, 0x6c => 0x9e9d, 0x6d => 0x9ea5, 0x6e => 0x9ea9, 0x6f => 0x9eb8, 0x70 => 0x9eaa, 0x71 => 0x9ead, 0x72 => 0x9761, 0x73 => 0x9ecc, 0x74 => 0x9ece, 0x75 => 0x9ecf, 0x76 => 0x9ed0, 0x77 => 0x9ed4, 0x78 => 0x9edc, 0x79 => 0x9ede, 0x7a => 0x9edd, 0x7b => 0x9ee0, 0x7c => 0x9ee5, 0x7d => 0x9ee8, 0x7e => 0x9eef, 0x80 => 0x9ef4, 0x81 => 0x9ef6, 0x82 => 0x9ef7, 0x83 => 0x9ef9, 0x84 => 0x9efb, 0x85 => 0x9efc, 0x86 => 0x9efd, 0x87 => 0x9f07, 0x88 => 0x9f08, 0x89 => 0x76b7, 0x8a => 0x9f15, 0x8b => 0x9f21, 0x8c => 0x9f2c, 0x8d => 0x9f3e, 0x8e => 0x9f4a, 0x8f => 0x9f52, 0x90 => 0x9f54, 0x91 => 0x9f63, 0x92 => 0x9f5f, 0x93 => 0x9f60, 0x94 => 0x9f61, 0x95 => 0x9f66, 0x96 => 0x9f67, 0x97 => 0x9f6c, 0x98 => 0x9f6a, 0x99 => 0x9f77, 0x9a => 0x9f72, 0x9b => 0x9f76, 0x9c => 0x9f95, 0x9d => 0x9f9c, 0x9e => 0x9fa0, 0x9f => 0x582f, 0xa0 => 0x69c7, 0xa1 => 0x9059, 0xa2 => 0x7464, 0xa3 => 0x51dc, 0xa4 => 0x7199, }, ); 1; # end ��������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/Symbol.pm�������������������������������������������000644 �000765 �000024 �00000005670 11417362674 023123� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Symbol.pm # # Description: Symbol to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://blogs.msdn.com/michkap/archive/2005/11/08/490495.aspx # # Notes: The table omits 1-byte characters with the same values as Unicode. # This set re-maps characters with codepoints less than 0x80 # (Although all bytes >= 0x20 should be mapped according to the # reference, I didn't map chars below 0x80 because I have some # samples where these are regular ASCII characters, even though # I think the encoding is probably incorrect for these samples) #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::Symbol = ( 0x80 => 0xf080, 0x81 => 0xf081, 0x82 => 0xf082, 0x83 => 0xf083, 0x84 => 0xf084, 0x85 => 0xf085, 0x86 => 0xf086, 0x87 => 0xf087, 0x88 => 0xf088, 0x89 => 0xf089, 0x8a => 0xf08a, 0x8b => 0xf08b, 0x8c => 0xf08c, 0x8d => 0xf08d, 0x8e => 0xf08e, 0x8f => 0xf08f, 0x90 => 0xf090, 0x91 => 0xf091, 0x92 => 0xf092, 0x93 => 0xf093, 0x94 => 0xf094, 0x95 => 0xf095, 0x96 => 0xf096, 0x97 => 0xf097, 0x98 => 0xf098, 0x99 => 0xf099, 0x9a => 0xf09a, 0x9b => 0xf09b, 0x9c => 0xf09c, 0x9d => 0xf09d, 0x9e => 0xf09e, 0x9f => 0xf09f, 0xa0 => 0xf0a0, 0xa1 => 0xf0a1, 0xa2 => 0xf0a2, 0xa3 => 0xf0a3, 0xa4 => 0xf0a4, 0xa5 => 0xf0a5, 0xa6 => 0xf0a6, 0xa7 => 0xf0a7, 0xa8 => 0xf0a8, 0xa9 => 0xf0a9, 0xaa => 0xf0aa, 0xab => 0xf0ab, 0xac => 0xf0ac, 0xad => 0xf0ad, 0xae => 0xf0ae, 0xaf => 0xf0af, 0xb0 => 0xf0b0, 0xb1 => 0xf0b1, 0xb2 => 0xf0b2, 0xb3 => 0xf0b3, 0xb4 => 0xf0b4, 0xb5 => 0xf0b5, 0xb6 => 0xf0b6, 0xb7 => 0xf0b7, 0xb8 => 0xf0b8, 0xb9 => 0xf0b9, 0xba => 0xf0ba, 0xbb => 0xf0bb, 0xbc => 0xf0bc, 0xbd => 0xf0bd, 0xbe => 0xf0be, 0xbf => 0xf0bf, 0xc0 => 0xf0c0, 0xc1 => 0xf0c1, 0xc2 => 0xf0c2, 0xc3 => 0xf0c3, 0xc4 => 0xf0c4, 0xc5 => 0xf0c5, 0xc6 => 0xf0c6, 0xc7 => 0xf0c7, 0xc8 => 0xf0c8, 0xc9 => 0xf0c9, 0xca => 0xf0ca, 0xcb => 0xf0cb, 0xcc => 0xf0cc, 0xcd => 0xf0cd, 0xce => 0xf0ce, 0xcf => 0xf0cf, 0xd0 => 0xf0d0, 0xd1 => 0xf0d1, 0xd2 => 0xf0d2, 0xd3 => 0xf0d3, 0xd4 => 0xf0d4, 0xd5 => 0xf0d5, 0xd6 => 0xf0d6, 0xd7 => 0xf0d7, 0xd8 => 0xf0d8, 0xd9 => 0xf0d9, 0xda => 0xf0da, 0xdb => 0xf0db, 0xdc => 0xf0dc, 0xdd => 0xf0dd, 0xde => 0xf0de, 0xdf => 0xf0df, 0xe0 => 0xf0e0, 0xe1 => 0xf0e1, 0xe2 => 0xf0e2, 0xe3 => 0xf0e3, 0xe4 => 0xf0e4, 0xe5 => 0xf0e5, 0xe6 => 0xf0e6, 0xe7 => 0xf0e7, 0xe8 => 0xf0e8, 0xe9 => 0xf0e9, 0xea => 0xf0ea, 0xeb => 0xf0eb, 0xec => 0xf0ec, 0xed => 0xf0ed, 0xee => 0xf0ee, 0xef => 0xf0ef, 0xf0 => 0xf0f0, 0xf1 => 0xf0f1, 0xf2 => 0xf0f2, 0xf3 => 0xf0f3, 0xf4 => 0xf0f4, 0xf5 => 0xf0f5, 0xf6 => 0xf0f6, 0xf7 => 0xf0f7, 0xf8 => 0xf0f8, 0xf9 => 0xf0f9, 0xfa => 0xf0fa, 0xfb => 0xf0fb, 0xfc => 0xf0fc, 0xfd => 0xf0fd, 0xfe => 0xf0fe, 0xff => 0xf0ff, ); 1; # end ������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/Thai.pm���������������������������������������������000644 �000765 �000024 �00000004047 11417362674 022540� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Thai.pm # # Description: cp874 to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP874.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::Thai = ( 0x80 => 0x20ac, 0x85 => 0x2026, 0x91 => 0x2018, 0x92 => 0x2019, 0x93 => 0x201c, 0x94 => 0x201d, 0x95 => 0x2022, 0x96 => 0x2013, 0x97 => 0x2014, 0xa1 => 0x0e01, 0xa2 => 0x0e02, 0xa3 => 0x0e03, 0xa4 => 0x0e04, 0xa5 => 0x0e05, 0xa6 => 0x0e06, 0xa7 => 0x0e07, 0xa8 => 0x0e08, 0xa9 => 0x0e09, 0xaa => 0x0e0a, 0xab => 0x0e0b, 0xac => 0x0e0c, 0xad => 0x0e0d, 0xae => 0x0e0e, 0xaf => 0x0e0f, 0xb0 => 0x0e10, 0xb1 => 0x0e11, 0xb2 => 0x0e12, 0xb3 => 0x0e13, 0xb4 => 0x0e14, 0xb5 => 0x0e15, 0xb6 => 0x0e16, 0xb7 => 0x0e17, 0xb8 => 0x0e18, 0xb9 => 0x0e19, 0xba => 0x0e1a, 0xbb => 0x0e1b, 0xbc => 0x0e1c, 0xbd => 0x0e1d, 0xbe => 0x0e1e, 0xbf => 0x0e1f, 0xc0 => 0x0e20, 0xc1 => 0x0e21, 0xc2 => 0x0e22, 0xc3 => 0x0e23, 0xc4 => 0x0e24, 0xc5 => 0x0e25, 0xc6 => 0x0e26, 0xc7 => 0x0e27, 0xc8 => 0x0e28, 0xc9 => 0x0e29, 0xca => 0x0e2a, 0xcb => 0x0e2b, 0xcc => 0x0e2c, 0xcd => 0x0e2d, 0xce => 0x0e2e, 0xcf => 0x0e2f, 0xd0 => 0x0e30, 0xd1 => 0x0e31, 0xd2 => 0x0e32, 0xd3 => 0x0e33, 0xd4 => 0x0e34, 0xd5 => 0x0e35, 0xd6 => 0x0e36, 0xd7 => 0x0e37, 0xd8 => 0x0e38, 0xd9 => 0x0e39, 0xda => 0x0e3a, 0xdf => 0x0e3f, 0xe0 => 0x0e40, 0xe1 => 0x0e41, 0xe2 => 0x0e42, 0xe3 => 0x0e43, 0xe4 => 0x0e44, 0xe5 => 0x0e45, 0xe6 => 0x0e46, 0xe7 => 0x0e47, 0xe8 => 0x0e48, 0xe9 => 0x0e49, 0xea => 0x0e4a, 0xeb => 0x0e4b, 0xec => 0x0e4c, 0xed => 0x0e4d, 0xee => 0x0e4e, 0xef => 0x0e4f, 0xf0 => 0x0e50, 0xf1 => 0x0e51, 0xf2 => 0x0e52, 0xf3 => 0x0e53, 0xf4 => 0x0e54, 0xf5 => 0x0e55, 0xf6 => 0x0e56, 0xf7 => 0x0e57, 0xf8 => 0x0e58, 0xf9 => 0x0e59, 0xfa => 0x0e5a, 0xfb => 0x0e5b, ); 1; # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/Image/ExifTool/Charset/Turkish.pm������������������������������������������000644 �000765 �000024 �00000001777 11417362674 023313� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Turkish.pm # # Description: cp1254 to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1254.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::Turkish = ( 0x80 => 0x20ac, 0x82 => 0x201a, 0x83 => 0x0192, 0x84 => 0x201e, 0x85 => 0x2026, 0x86 => 0x2020, 0x87 => 0x2021, 0x88 => 0x02c6, 0x89 => 0x2030, 0x8a => 0x0160, 0x8b => 0x2039, 0x8c => 0x0152, 0x91 => 0x2018, 0x92 => 0x2019, 0x93 => 0x201c, 0x94 => 0x201d, 0x95 => 0x2022, 0x96 => 0x2013, 0x97 => 0x2014, 0x98 => 0x02dc, 0x99 => 0x2122, 0x9a => 0x0161, 0x9b => 0x203a, 0x9c => 0x0153, 0x9f => 0x0178, 0xd0 => 0x011e, 0xdd => 0x0130, 0xde => 0x015e, 0xf0 => 0x011f, 0xfd => 0x0131, 0xfe => 0x015f, ); 1; # end �Image-ExifTool-10.10/lib/Image/ExifTool/Charset/Vietnam.pm������������������������������������������000644 �000765 �000024 �00000002143 11417362674 023251� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: Vietnam.pm # # Description: cp1258 to Unicode # # Revisions: 2010/01/20 - P. Harvey created # # References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1258.TXT # # Notes: The table omits 1-byte characters with the same values as Unicode #------------------------------------------------------------------------------ use strict; %Image::ExifTool::Charset::Vietnam = ( 0x80 => 0x20ac, 0x82 => 0x201a, 0x83 => 0x0192, 0x84 => 0x201e, 0x85 => 0x2026, 0x86 => 0x2020, 0x87 => 0x2021, 0x88 => 0x02c6, 0x89 => 0x2030, 0x8b => 0x2039, 0x8c => 0x0152, 0x91 => 0x2018, 0x92 => 0x2019, 0x93 => 0x201c, 0x94 => 0x201d, 0x95 => 0x2022, 0x96 => 0x2013, 0x97 => 0x2014, 0x98 => 0x02dc, 0x99 => 0x2122, 0x9b => 0x203a, 0x9c => 0x0153, 0x9f => 0x0178, 0xc3 => 0x0102, 0xcc => 0x0300, 0xd0 => 0x0110, 0xd2 => 0x0309, 0xd5 => 0x01a0, 0xdd => 0x01af, 0xde => 0x0303, 0xe3 => 0x0103, 0xec => 0x0301, 0xf0 => 0x0111, 0xf2 => 0x0323, 0xf5 => 0x01a1, 0xfd => 0x01b0, 0xfe => 0x20ab, ); 1; # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/File/RandomAccess.pm�������������������������������������������������������000644 �000765 �000024 �00000031041 12642461253 020714� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: RandomAccess.pm # # Description: Buffer to support random access reading of sequential file # # Revisions: 02/11/2004 - P. Harvey Created # 02/20/2004 - P. Harvey Added flag to disable SeekTest in new() # 11/18/2004 - P. Harvey Fixed bug with seek relative to end of file # 01/02/2005 - P. Harvey Added DEBUG code # 01/09/2006 - P. Harvey Fixed bug in ReadLine() when using # multi-character EOL sequences # 02/20/2006 - P. Harvey Fixed bug where seek past end of file could # generate "substr outside string" warning # 06/10/2006 - P. Harvey Decreased $CHUNK_SIZE from 64k to 8k # 11/23/2006 - P. Harvey Limit reads to < 0x80000000 bytes # 11/26/2008 - P. Harvey Fixed bug in ReadLine when reading from a # scalar with a multi-character newline # 01/24/2009 - PH Protect against reading too much at once # # Notes: Calls the normal file i/o routines unless SeekTest() fails, in # which case the file is buffered in memory to allow random access. # SeekTest() is called automatically when the object is created # unless specified. # # May also be used for string i/o (just pass a scalar reference) # # Legal: Copyright (c) 2003-2016 Phil Harvey (phil at owl.phy.queensu.ca) # This library is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. #------------------------------------------------------------------------------ package File::RandomAccess; use strict; require 5.002; require Exporter; use vars qw($VERSION @ISA @EXPORT_OK); $VERSION = '1.10'; @ISA = qw(Exporter); sub Read($$$); # constants my $CHUNK_SIZE = 8192; # size of chunks to read from file (must be power of 2) my $SLURP_CHUNKS = 16; # read this many chunks at a time when slurping #------------------------------------------------------------------------------ # Create new RandomAccess object # Inputs: 0) reference to RandomAccess object or RandomAccess class name # 1) file reference or scalar reference # 2) flag set if file is already random access (disables automatic SeekTest) sub new($$;$) { my ($that, $filePt, $isRandom) = @_; my $class = ref($that) || $that; my $self; if (ref $filePt eq 'SCALAR') { # string i/o $self = { BUFF_PT => $filePt, POS => 0, LEN => length($$filePt), TESTED => -1, }; bless $self, $class; } else { # file i/o my $buff = ''; $self = { FILE_PT => $filePt, # file pointer BUFF_PT => \$buff, # reference to file data POS => 0, # current position in file LEN => 0, # data length TESTED => 0, # 0=untested, 1=passed, -1=failed (requires buffering) }; bless $self, $class; $self->SeekTest() unless $isRandom; } return $self; } #------------------------------------------------------------------------------ # Enable DEBUG code # Inputs: 0) reference to RandomAccess object sub Debug($) { my $self = shift; $self->{DEBUG} = { }; } #------------------------------------------------------------------------------ # Perform seek test and turn on buffering if necessary # Inputs: 0) reference to RandomAccess object # Returns: 1 if seek test passed (ie. no buffering required) # Notes: Must be done before any other i/o sub SeekTest($) { my $self = shift; unless ($self->{TESTED}) { my $fp = $self->{FILE_PT}; if (seek($fp, 1, 1) and seek($fp, -1, 1)) { $self->{TESTED} = 1; # test passed } else { $self->{TESTED} = -1; # test failed (requires buffering) } } return $self->{TESTED} == 1 ? 1 : 0; } #------------------------------------------------------------------------------ # Get current position in file # Inputs: 0) reference to RandomAccess object # Returns: current position in file sub Tell($) { my $self = shift; my $rtnVal; if ($self->{TESTED} < 0) { $rtnVal = $self->{POS}; } else { $rtnVal = tell($self->{FILE_PT}); } return $rtnVal; } #------------------------------------------------------------------------------ # Seek to position in file # Inputs: 0) reference to RandomAccess object # 1) position, 2) whence (0 or undef=from start, 1=from cur pos, 2=from end) # Returns: 1 on success # Notes: When buffered, this doesn't quite behave like seek() since it will return # success even if you seek outside the limits of the file. However if you # do this, you will get an error on your next Read(). sub Seek($$;$) { my ($self, $num, $whence) = @_; $whence = 0 unless defined $whence; my $rtnVal; if ($self->{TESTED} < 0) { my $newPos; if ($whence == 0) { $newPos = $num; # from start of file } elsif ($whence == 1) { $newPos = $num + $self->{POS}; # relative to current position } else { $self->Slurp(); # read whole file into buffer $newPos = $num + $self->{LEN}; # relative to end of file } if ($newPos >= 0) { $self->{POS} = $newPos; $rtnVal = 1; } } else { $rtnVal = seek($self->{FILE_PT}, $num, $whence); } return $rtnVal; } #------------------------------------------------------------------------------ # Read from the file # Inputs: 0) reference to RandomAccess object, 1) buffer, 2) bytes to read # Returns: Number of bytes read sub Read($$$) { my $self = shift; my $len = $_[1]; my $rtnVal; # protect against reading too much at once # (also from dying with a "Negative length" error) if ($len & 0xf8000000) { return 0 if $len < 0; # read in smaller blocks because Windows attempts to pre-allocate # memory for the full size, which can lead to an out-of-memory error my $maxLen = 0x4000000; # (MUST be less than bitmask in "if" above) my $num = Read($self, $_[0], $maxLen); return $num if $num < $maxLen; for (;;) { $len -= $maxLen; last if $len <= 0; my $l = $len < $maxLen ? $len : $maxLen; my $buff; my $n = Read($self, $buff, $l); last unless $n; $_[0] .= $buff; $num += $n; last if $n < $l; } return $num; } # read through our buffer if necessary if ($self->{TESTED} < 0) { my $buff; my $newPos = $self->{POS} + $len; # number of bytes to read from file my $num = $newPos - $self->{LEN}; if ($num > 0 and $self->{FILE_PT}) { # read data from file in multiples of $CHUNK_SIZE $num = (($num - 1) | ($CHUNK_SIZE - 1)) + 1; $num = read($self->{FILE_PT}, $buff, $num); if ($num) { ${$self->{BUFF_PT}} .= $buff; $self->{LEN} += $num; } } # number of bytes left in data buffer $num = $self->{LEN} - $self->{POS}; if ($len <= $num) { $rtnVal = $len; } elsif ($num <= 0) { $_[0] = ''; return 0; } else { $rtnVal = $num; } # return data from our buffer $_[0] = substr(${$self->{BUFF_PT}}, $self->{POS}, $rtnVal); $self->{POS} += $rtnVal; } else { # read directly from file $_[0] = '' unless defined $_[0]; $rtnVal = read($self->{FILE_PT}, $_[0], $len) || 0; } if ($self->{DEBUG}) { my $pos = $self->Tell() - $rtnVal; unless ($self->{DEBUG}->{$pos} and $self->{DEBUG}->{$pos} > $rtnVal) { $self->{DEBUG}->{$pos} = $rtnVal; } } return $rtnVal; } #------------------------------------------------------------------------------ # Read a line from file (end of line is $/) # Inputs: 0) reference to RandomAccess object, 1) buffer # Returns: Number of bytes read sub ReadLine($$) { my $self = shift; my $rtnVal; my $fp = $self->{FILE_PT}; if ($self->{TESTED} < 0) { my ($num, $buff); my $pos = $self->{POS}; if ($fp) { # make sure we have some data after the current position while ($self->{LEN} <= $pos) { $num = read($fp, $buff, $CHUNK_SIZE); return 0 unless $num; ${$self->{BUFF_PT}} .= $buff; $self->{LEN} += $num; } # scan and read until we find the EOL (or hit EOF) for (;;) { $pos = index(${$self->{BUFF_PT}}, $/, $pos); if ($pos >= 0) { $pos += length($/); last; } $pos = $self->{LEN}; # have scanned to end of buffer $num = read($fp, $buff, $CHUNK_SIZE) or last; ${$self->{BUFF_PT}} .= $buff; $self->{LEN} += $num; } } else { # string i/o $pos = index(${$self->{BUFF_PT}}, $/, $pos); if ($pos < 0) { $pos = $self->{LEN}; $self->{POS} = $pos if $self->{POS} > $pos; } else { $pos += length($/); } } # read the line from our buffer $rtnVal = $pos - $self->{POS}; $_[0] = substr(${$self->{BUFF_PT}}, $self->{POS}, $rtnVal); $self->{POS} = $pos; } else { $_[0] = <$fp>; if (defined $_[0]) { $rtnVal = length($_[0]); } else { $rtnVal = 0; } } if ($self->{DEBUG}) { my $pos = $self->Tell() - $rtnVal; unless ($self->{DEBUG}->{$pos} and $self->{DEBUG}->{$pos} > $rtnVal) { $self->{DEBUG}->{$pos} = $rtnVal; } } return $rtnVal; } #------------------------------------------------------------------------------ # Read whole file into buffer (without changing read pointer) # Inputs: 0) reference to RandomAccess object sub Slurp($) { my $self = shift; my $fp = $self->{FILE_PT} || return; # read whole file into buffer (in large chunks) my ($buff, $num); while (($num = read($fp, $buff, $CHUNK_SIZE * $SLURP_CHUNKS)) != 0) { ${$self->{BUFF_PT}} .= $buff; $self->{LEN} += $num; } } #------------------------------------------------------------------------------ # set binary mode # Inputs: 0) reference to RandomAccess object sub BinMode($) { my $self = shift; binmode($self->{FILE_PT}) if $self->{FILE_PT}; } #------------------------------------------------------------------------------ # close the file and free the buffer # Inputs: 0) reference to RandomAccess object sub Close($) { my $self = shift; if ($self->{DEBUG}) { local $_; if ($self->Seek(0,2)) { $self->{DEBUG}->{$self->Tell()} = 0; # set EOF marker my $last; my $tot = 0; my $bad = 0; foreach (sort { $a <=> $b } keys %{$self->{DEBUG}}) { my $pos = $_; my $len = $self->{DEBUG}->{$_}; if (defined $last and $last < $pos) { my $bytes = $pos - $last; $tot += $bytes; $self->Seek($last); my $buff; $self->Read($buff, $bytes); my $warn = ''; if ($buff =~ /[^\0]/) { $bad += ($pos - $last); $warn = ' - NON-ZERO!'; } printf "0x%.8x - 0x%.8x (%d bytes)$warn\n", $last, $pos, $bytes; } my $cur = $pos + $len; $last = $cur unless defined $last and $last > $cur; } print "$tot bytes missed"; $bad and print ", $bad non-zero!"; print "\n"; } else { warn "File::RandomAccess DEBUG not working (file already closed?)\n"; } delete $self->{DEBUG}; } # close the file if ($self->{FILE_PT}) { close($self->{FILE_PT}); delete $self->{FILE_PT}; } # reset the buffer my $emptyBuff = ''; $self->{BUFF_PT} = \$emptyBuff; $self->{LEN} = 0; $self->{POS} = 0; } #------------------------------------------------------------------------------ 1; # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/lib/File/RandomAccess.pod������������������������������������������������������000644 �000765 �000024 �00000007222 12642461254 021067� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: RandomAccess.pod -- Documentation for File::RandomAccess # # Description: Buffer to support random access reading of sequential file # # Legal: Copyright (c) 2003-2016 Phil Harvey (phil at owl.phy.queensu.ca) # This library is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. #------------------------------------------------------------------------------ =head1 NAME File::RandomAccess - Random access reads of sequential file or scalar =head1 SYNOPSIS use File::RandomAccess; $raf = new File::RandomAccess(\*FILE, $disableSeekTest); $raf = new File::RandomAccess(\$data); $err = $raf->Seek($pos); $num = $raf->Read($buff, $bytes); =head1 DESCRIPTION Allows random access to sequential file by buffering the file if necessary. Also allows access to data in memory to be accessed as if it were a file. =head1 METHODS =over 4 =item B<new> Creates a new RandomAccess object given a file reference or reference to data in memory. # Read from open file or pipe $raf = new File::RandomAccess(\*FILE); # Read from data in memory $raf = new File::RandomAccess(\$data); =over 4 =item Inputs: 0) Reference to RandomAccess object or RandomAccess class name. 1) File reference or scalar reference. 2) Flag set if file is already random access (disables automatic SeekTest). =item Returns: Reference to RandomAccess object. =back =item B<SeekTest> Performs test seek() on file to determine if buffering is necessary. If the seek() fails, then the file is buffered to allow random access. B<SeekTest>() is automatically called from B<new> unless specified. $result = $raf->SeekTest(); =over 4 =item Inputs: 0) Reference to RandomAccess object. =item Returns: 1 if seek test passed (ie. no buffering required). =item Notes: Must be called before any other i/o. =back =item B<Tell> Get current position in file $pos = $raf->Tell(); =over 4 =item Inputs: 0) Reference to RandomAccess object. =item Returns: Current position in file =back =item B<Seek> Seek to specified position in file. When buffered, this doesn't quite behave like seek() since it returns success even if you seek outside the limits of the file. $success = $raf->Seek($pos, 0); =over 4 =item Inputs: 0) Reference to RandomAccess object. 1) Position. 2) Whence (0=from start, 1=from cur pos, 2=from end). =item Returns: 1 on success, 0 otherwise =back =item B<Read> Read data from the file. $num = $raf->Read($buff, 1024); =over 4 =item Inputs: 0) Reference to RandomAccess object. 1) Buffer. 2) Number of bytes to read. =item Returns: Number of bytes actually read. =back =item B<ReadLine> Read a line from file (end of line is $/). =over 4 =item Inputs: 0) Reference to RandomAccess object. 1) Buffer. =item Returns: Number of bytes read. =back =item B<Slurp> Read whole file into buffer, without changing read pointer. =over 4 =item Inputs: 0) Reference to RandomAccess object. =item Returns: Nothing. =back =item B<BinMode> Set binary mode for file. =over 4 =item Inputs: 0) Reference to RandomAccess object. =item Returns: Nothing. =back =item B<Close> Close the file and free the buffer. =over 4 =item Inputs: 0) Reference to RandomAccess object. =item Returns: Nothing. =back =back =head1 AUTHOR Copyright 2003-2016 Phil Harvey (phil at owl.phy.queensu.ca) This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Image::ExifTool(3pm)|Image::ExifTool> =cut # end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/ancient_history.html������������������������������������������������������000644 �000765 �000024 �00001251437 12600511062 021425� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>ExifTool Ancient History</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <link rel=alternate type='application/rss+xml' title='RSS Feed for ExifTool updates' href='http://owl.phy.queensu.ca/~phil/exiftool/rss.xml'> </head> <body> <!-- Use line width of 80 --> <h1 class='up'>ExifTool Ancient History</h1> <p><b>Note:</b> This page gives the history of older exiftool versions. See <a href="history.html">history.html</a> for the recent history.</p> <a name='v9.89'><b>Mar. 7, 2015 - Version 9.89</b></a> <ul> <li>Added some new Minolta/Sony LensType values (thanks Jos Roost and LibRaw) <li>Fixed Windows case-sensitivity and sort-order problems when using wildcards in file names on the command line <li>API Changes: <ul> <li>Added UserParam option </ul> </ul> <a name='v9.88'><b>Feb. 28, 2015 - Version 9.88</b></a> <ul> <li>Decode a few more ID3 tags <li>Improved decoding of some Pentax tags <li>Extended -list and -listw options to include flattened tags <li>Patched to recognize ID3v2.3 tags in ID3v2.4 metadata and visa versa <li>Patched byte ordering problems with Nikon FileInfo tags for the D5500 <li>Fixed bug where other groups were ignored when multiple groups were specified when writing and one of those groups was a specific EXIF IFD (eg. -ExifIFD:Time:all= ignored the Time constraint) </ul> <a name='v9.87'><b>Feb. 24, 2015 - Version 9.87</b></a> <ul> <li>Added a number of new Sigma LensType values (thanks LibRaw) <li>Fixed bug introduced in the Windows version of 9.85 where "*.*" on the command line matched "." and "..", causing unexpected files to be processed <li>Fixed problem extracting some Microsoft tags from MP4/MOV videos </ul> <a name='v9.86'><b>Feb. 22, 2015 - Version 9.86</b></a> <ul> <li>Added check for valid filename encoding when using wildcards in Windows <li>Added support for Sigma X3F version 4.1 images <li>Added a number of new Sigma LensType values (thanks LibRaw and Niels Kristian Bech Jensen) <li>Added a new Canon LensType (thanks Michael Tapes) <li>Added a new Leica LensType (thanks LibRaw) <li>Added a new Olympus CameraType <li>Decode a couple more FujiFilm RAF tags (thanks Frank Markesteijn) <li>Always preserve FileCreateDate when writing on Windows if Win32::API and Win32API::File are available <li>Changed names of and properly decode new Olympus Pitch/Roll tags <li>Changed rounding method for rational values in an attempt to fix failed tests on FreeBSD 10.1 and Perl 5.20.1 with uselongdouble enabled <li>Resolved issue with duplicate SamsungModelID values </ul> <a name='v9.85'><b>Feb. 14, 2015 - Version 9.85</b></a> <ul> <li>Added support for Ricoh WG-M1 maker notes <li>Added a few new Pentax LensType's (thanks Louis Granboulan) <li>Decode a couple of new Pentax tags (thanks Louis Granboulan) <li>Enhanced JSON import so an object with a missing SourceFile has the same effect as a SourceFile of "*". <li>Changed MIMEType for executable script files <li>Patched remaining known problems involving Windows Unicode file names (creating directories and using wildcards should now work) <li>Patched long-standing Windows daylight-savings-time bug, and removed the dependency on Win32API::File::Time (reported file times should now be correct, but may disagree with the Windows "dir" command) <li>Fixed decoding of FLIR:PlanckO (thanks Tomas) </ul> <a name='v9.84'><b>Feb. 10, 2015 - Version 9.84</b></a> <ul> <li>Added a new CanonModelID <li>Added a new Pentax LensType and PentaxModelID (thanks Louis Granboulan) <li>Fixed bug introduced in 9.83 that broke the -P option on Windows </ul> <a name='v9.83'><b>Feb. 7, 2015 - Version 9.83</b></a> <ul> <li>Added support for new IPTC Extension version 1.2 XMP tags <li>Added support for Leica X (Typ 113) maker notes <li>Added read support for ChartTIFF tags <li>Added a few new Canon LensType values (thanks Norbert Wasser for two) <li>Added a few new Nikon LensID's (thanks David P&uuml;schel, Robert Rottmerhusen and Niels) <li>Added a number of new Olympus ArtFilterEffect values (thanks Phiber) <li>Added some new Olympus AspectRatio values (thanks Herb) <li>Added a new PentaxModelID <li>Added a new Olympus CameraType (thanks LibRaw) <li>Added new values for various Canon tags <li>Decode a number of new Sony tags (thanks Jos Roost) <li>Decode a couple more Nikon ShootingMode bits (thanks Leegong) <li>Updated to Nov 2014 XMP specification <li>Patched incompatibility between Windows Unicode update and Perl 5.005 </ul> <a name='v9.82'><b>Jan. 15, 2015 - Version 9.82</b></a> <ul> <li>Added support for Windows Unicode names for input CSV and JSON files <li>Decode a number of new Sony tags (thanks Jos Roost) <li>Improved checks and warnings for invalid file name encoding on Windows <li>Improved Polish translations (thanks Kacper Perschke) <li>Changed exif2xmp.args and xmp2exif.args files (available in the full ExifTool distribution) to avoid using non-standard XMP namespaces <li>Fixed problem setting file times for Windows Unicode file names </ul> <a name='v9.81'><b>Jan. 12, 2015 - Version 9.81</b></a> <ul> <li>Added Composite:Megapixels tag <li>Added a few new Nikon LensID's (thanks Robert Rottmerhusen) <li>Fixed problem in Windows using Unicode file names with the -o option </ul> <a name='v9.80'><b>Jan. 7, 2015 - Version 9.80</b></a> <ul> <li>Added a few new Canon and Minolta/Sony LensType values (thanks LibRaw) <li>Added a few new CanonModelID's <li>Decode a few new Canon tags <li>Suppress warning for Canon 7DmkIII VignettingCorrUnknown2 data format <li>Fixed runtime warning when piping an MOI file to exiftool <li>Fixed bug in -fileOrder option introduced in version 9.79 <li>Fixed bug using Windows Unicode file names with -tagsFromFile option </ul> <a name='v9.79'><b>Jan. 4, 2015 - Version 9.79</b> - Windows Unicode file names</a> <ul> <li>Added support for Windows Unicode file names (but note that support still isn't complete -- some things like setting FileModifyDate or creating a directory with a Unicode name still need work) <li>Added read support for MOI files <li>Added a few more Canon LensType's (thanks LibRaw and Martin) <li>Added a new Nikon LensID <li>Added a couple of new Panasonic ImageQuality values <li>Decode a new FujiFilm tag and added a new FilmMode value <li>Allow zero-length group names to be specified (which provides a method to directly access the 0th copy of a duplicate tag using the empty family 4 group name by specifying "4:TAG") <li>Fixed invalid Samsung tag name <li>Fixed writing of XMP:ExposureCompensation with fractional values <li>API Changes: <ul> <li>Added CharsetFileName option </ul> </ul> <a name='v9.78'><b>Dec. 13, 2014 - Version 9.78</b></a> <ul> <li>Added a new Nikon LensID and a new Canon LensType (thanks LibRaw) <li>Decode a new unknown atom in Canon MOV videos <li>Decode a number of new Sony tags (thanks Jos Roost) <li>Decode a number of new Samsung tags <li>Improved MakerNote compatibility when writing by adding the same amount of padding after the MakerNote IFD as that written by the specific camera model <li>Changed the DNG BaselineExposureOffset to a signed rational (contrary to the DNG 1.4 specification, which specifies an unsigned RATIONAL, but obviously Adobe meant for it to store negative values) <li>Changed name of new QuickTime Rating tag to RatingPercent <li>Fixed problem introduced in 9.64 where multiple list values from some tags in ZIP-based files were extracted as separate tags instead of as a list when the -struct option was used, and implemented a different patch to just suppress the structure warnings without changing the 9.63 behaviour <li>Fixed problem where some EXIF information in MOV videos could be corrupted when writing </ul> <a name='v9.77'><b>Nov. 28, 2014 - Version 9.77</b></a> <ul> <li>Added FilePath tag (generated only if specified and Cwd is available) <li>Added a new Panasonic ShootingMode (thanks Horst Wandres) <li>Added a new FujiFilm WhiteBalance value <li>Added a new QuickTime vendor ID <li>Added a new Pentax RawDevelopmentProcess value <li>Decode a few new QuickTime tags <li>Decode some new tags in Kodak SP360 MP4 videos <li>Fixed bug that could cause a runtime error when parsing a Canon EOS 40D image which had been edited by Nikon Capture software <li>Fixed bug which could produce invalid XML in the -X output when -struct was also used </ul> <a name='v9.76'><b>Nov. 15, 2014 - Version 9.76</b></a> <span class=grn>(production release)</span> <ul> <li>Added support for the LFR format (same as LFP) <li>Added support for Samsung models which write 2 values for LensType <li>Added a new Samsung LensType (thanks Nick Livchits) <li>Added a few new Nikon LensID's (thanks David P&uuml;schel) <li>Added a new PentaxModelID <li>Added some new Olympus WhiteBalance2 values (thanks LibRaw) <li>Added a new EXIF:Compression value <li>Decode a new FujiFilm tag <li>Decode a few more private TIFF tags <li>Improved warning message if "DIR" or "FILE" is used literally on the command line <li>Improved "-j -b" output to encode any non-UTF8 values as Base64 <li>Enhanced -fast option (FastScan API option) to allow file processing to be bypassed entirely <li>Changed conversions for a couple of Nikon 1 AF tags for consistency <li>Changed reported FileType for LNK, KEY, KTH, NUMBERS, NMBTEMPLATE and PAGES files to match extension <li>Fixed problems adding new XMP and deleting old XMP from MP4 videos <li>Fixed problem writing FileModifyDate/FileCreateDate when -overwrite_original_in_place is used </ul> <a name='v9.75'><b>Nov. 2, 2014 - Version 9.75</b></a> <ul> <li>Added support for FLIR version 101 metadata <li>Added a new Olympus LensType (thanks Niels Kristian Bech Jensen) <li>Added a new Pentax LensType (thanks Louis Granboulan) <li>Added a new Samsung LensType <li>Decode a few more Nikon D4S tags (thanks Warren Hatch) <li>Decode a few more Sony tags (thanks Jos Roost) <li>Decode a new FujiFilm tag <li>Improved formula for calculating Sony:FocusDistance2 (thanks Jos Roost) <li>Changed XMP parsing to impose standard namespace prefixes, thus avoiding (some) problems reading the ugly XMP generated by Microsoft products <li>Fixed decoding of Nikon FileInfo tags for recent DSLR models </ul> <a name='v9.74'><b>Oct. 15, 2014 - Version 9.74</b></a> <ul> <li>Added a number of new QuickTime GenreID values (thanks Fran&ccedil;ois Bonzon) <li>Added support for some newer Sony cameras (thanks Jos Roost) <li>Decode more Nikon D4S custom settings (thanks Warren Hatch) <li>Improved lens identification logic for XMP metadata (thanks Jos Roost) <li>Fixed typo in Condition for a few D3 NikonCustom tags <li>Fixed bug which could cause a "Use of uninitialized value $val" runtime error when reading XML </ul> <a name='v9.73'><b>Oct. 13, 2014 - Version 9.73</b></a> <ul> <li>Added a new CanonModelID (thanks LibRaw and Niels Kristian Bech Jensen) <li>Added a few new Canon and Sony lenses (thanks Jos Roost) <li>Delete unknown PNG TextualData tags when deleting all PNG tags <li>Decode AF points for Canon PowerShot G1X Mark II <li>Decode a number of Pentax, Olympus, Panasonic and Sony tags (thanks LibRaw) <li>Decode a few more Nikon NCTG tags in MOV videos (thanks Stuart Bennett) <li>Decode Nikon D4S custom settings (thanks Warren Hatch) <li>Decode some makernote tags in Sony Xperia Z3 images <li>Make PhotoshopThumbnail and PhotoshopBGRThumbnail writable (but "unsafe") <li>Changed order of operations so flattened tags always take precedence over structured tags when writing a mix of both types of tags <li>Fixed potential bug decoding some Nikon 1 AF points </ul> <a name='v9.72'><b>Sept. 26, 2014 - Version 9.72</b></a> <ul> <li>Added a few new Pentax ISO values <li>Added a new CanonModelID and SonyModelID (thanks LibRaw) <li>Added a new Canon LensType <li>Decode AF points for some newer Nikon 1 cameras (thanks Chris Reimold for his help, and Graham Woolf for the samples) <li>Improved verbose output for recently decoded Samsung trailer <li>Fixed Samsung trailer writer to properly update offsets in the QDIO block </ul> <a name='v9.71'><b>Sept. 20, 2014 - Version 9.71</b></a> <ul> <li>Added a couple of mew CanonModelID's (thanks LibRaw) <li>Added a couple of new Nikon LensID's (thanks Robert Rottmerhusen and LibRaw) <li>Added minor warning when deleting all PDF metadata (because it isn't really deleted) <li>Added a new Samsung LensType <li>Added a new Sony/Minolta LensType (thanks Marcus Holland-Moritz) <li>Decode "Sound &amp; Shot" trailer written by some Samsung Galaxy models <li>Decode a number of new Sony tags including FocusDistance2 (thanks Jos Roost) <li>Decode a number of new Canon and Kodak tags (thanks LibRaw) <li>Decode a new EXIF tag <li>Decode a few new CanonCustom tags <li>Recognize the JPE file extension <li>Fixed swapped CanonCustom AEMicroadjustment/FEMicroadjustment tag names <li>Fixed bug in -listItem option which sometimes prevented it from working <li>Fixed interference by -sep option when writing structured tags <li>API Changes: <ul> <li>Added ListItem option </ul> </ul> <a name='v9.70'><b>Sept. 3, 2014 - Version 9.70</b></a> <span class=grn>(production release)</span> <ul> <li>Added read support for Pentax 645Z makernotes in MOV videos <li>Added a new Canon LensType (thanks Norbert Wasser) <li>Added a new SonyModelID (thanks LibRaw) <li>Added a new Pentax LensType (thanks Dominique Schrekling) <li>Added a new PentaxModelID <li>Added a new Olympus CameraType (thanks LibRaw) <li>Decode a number of new Sony tags and values (thanks Jos Roost) <li>Decode a new Panasonic tag <li>Decode another QuickTime tag <li>Updated Nikon ISOExpansion values for new models (thanks LibRaw) <li>Improved verbose dump for LFP images <li>Patched to repair incorrect list types in XMP structures when writing <li>Patched to avoid MPEG Layer 3 check for files with a "MUS" extension <li>Fixed incorrect behaviour of -addTagsFromFile when adding list items from multiple variable-named source files </ul> <a name='v9.69'><b>July 27, 2014 - Version 9.69</b></a> <ul> <li>Added ability to write PNG PhysicalPixel (PNG-pHYs) tags <li>Added a few new Panasonic ContrastMode values <li>Added minor warning when creating EXIF or IPTC in PNG images <li>Decode a few more Sony tags and values (thanks Jos Roost) <li>Fixed problem writing Olympus:LensType <li>API Changes: <ul> <li>Shift.pl now autoloads when ShiftTime() is called <li>The 3rd argument to ShiftTime() is now optional </ul> </ul> <a name='v9.68'><b>July 19, 2014 - Version 9.68</b></a> <ul> <li>Added read support for Lytro LFP files <li>Added a new Olympus LensType (thanks Niels Kristian Bech Jensen) <li>Added support for the maker notes of some recent Ricoh/Pentax models <li>Allow Composite tag to have no Require'd or Desire'd tags <li>Improved -geotag verbose output <li>Changed so XMP tags take priority when reading QuickTime-format files <li>Changed PSD file description to "Photoshop Document" <li>Fixed problem where -geotag option could fail if -v4 was used <li>Fixed problem writing SonyDateTime2 </ul> <a name='v9.67'><b>July 6, 2014 - Version 9.67</b></a> <ul> <li>Added support for Sigma X3F version 4.0 files from the DP2 Quattro <li>Added support for Sony XAVC video files <li>Added a new Nikon PhaseDetectAF value <li>Added conversion for Casio EX-ZR300 BestShotMode (thanks Manfred) <li>Decode more proprietary information from some Panasonic/Leica MP4 videos <li>Fixed inaccuracies in decoding some SigmaRaw tags from the X3F header </ul> <a name='v9.66'><b>July 1, 2014 - Version 9.66</b></a> <ul> <li>Added read support for Kodak PixPro S-1 maker notes <li>Added new Canon, Pentax and Sigma LensTypes (thanks LibRaw for the Canon) <li>Added support for Sigma DP2 Quattro maker notes <li>Decode AFMicroAdj for Sony A77M2 <li>Improved decoding of Pentax K-3 AFPointSelected (thanks Dan) <li>Swap "GPS track start/end" labels in -geotag -v2 output if track is stored in reverse chronological order <li>Changed handling of IPTC groups so that standard IPTC always has a family 1 group name of "IPTC", and takes priority over non-standard IPTC when duplicates are not allowed <li>Patched to recognize incorrect XMP URI's written by Nikon NX2 <li>Fixed problem with possible duplication of lens names when attempting to identify lens used by a Nikon camera from a Photoshop-mangled image <li>Fixed problem parsing some NMEA sentences, and added support for GPZDA <li>Fixed typo in a CanonCustom value <li>Fixed bug where standard IPTC may be incorrectly written into a proprietary PhotoMechanic IPTC-format SoftEdit record </ul> <a name='v9.65'><b>June 20, 2014 - Version 9.65</b></a> <ul> <li>Added a new Olympus LensType (thanks Niels Kristian Bech Jensen) <li>Added a print conversion for Unknown ICC_Profile MeasurementGeometry <li>Added LargeTags shortcut <li>Avoid loading data for some tags with large binary data values if they were specifically excluded by the command <li>Improved memory handling when processing CanonVRD information <li>Patched potential "subscript -1" runtime error when reading EPS files </ul> <a name='v9.64'><b>June 14, 2014 - Version 9.64</b></a> <ul> <li>Added write-only <a href="TagNames/Extra.html">TestName tag</a> for dry-run tests of file renaming feature <li>Added a few new Olympus CameraType values <li>Added a new new Nikon LensID's <li>Added a new Canon LensType <li>Patched to avoid structure warnings when copying tags from ZIP-based files <li>Patched to deal with incorrect byte ordering in FlashPix date/time values written by some cameras <li>Fixed problem using advanced formatting feature in a -if condition <li>Fixed problem parsing Canon VignettingCorr for some newer PowerShot models <li>API Changes: <ul> <li>Added 'Test' option to SetFileName() </ul> </ul> <a name='v9.63'><b>May 31, 2014 - Version 9.63</b></a> <ul> <li>Added basic read support for EPUB and MOBI electronic books <li>Added ability to combine -lang option with -listx to extract only one language <li>Remove leading XML comment from XMP if it exists when writing as a block <li>Another attempt to patch problem obtaining a consistent "full path" for source files when importing a CSV database in Windows </ul> <a name='v9.62'><b>May 24, 2014 - Version 9.62</b></a> <ul> <li>Added message about SourceFile names to -v2 output when importing a database with -csv= or -json= <li>Added patch to allow extraction of some incorrectly written FlashPix tags <li>Extract a couple of new FlashPix tags for some FujiFilm models <li>Decode a number of new Sony tags (thanks Jos Roost) <li>Changed -n option for GPSTimeStamp to return nanosecond precision </ul> <a name='v9.61'><b>May 18, 2014 - Version 9.61</b></a> <ul> <li>Added ability to combine -l with -listf, -listr or -listwf to add descriptions of the file type <li>Added a few new Canon LensType values (thanks Norbert Wasser and Mark) <li>Extract AE metering segments again for the Pentax K-3 <li>Decode a number of new FujiFilm RAF tags (thanks LibRaw) <li>Decode a number of new Sony tags (thanks Jos Roost) <li>Changed the case of some AF point values for consistency <li>Fixed an incorrect Olympus FocusMode value <li>Fixed problem introduced in 9.60 where a "LensID argument isn't numeric" warning could occur under some conditions <li>Fixed quirk where ExifTool could incorrectly report that a file was changed when conditionally deleting a non-existent tag as a block </ul> <a name='v9.60'><b>May 11, 2014 - Version 9.60</b></a> <span class=grn>(production release)</span> <ul> <li>Added a few new values for some Pentax tags <li>Added a new QuickTime Rating value (thanks Fran&ccedil;ois Bonzon) <li>Added a new SonyModelID (thanks LibRaw) <li>Added a new Canon and a new Pentax LensType <li>Decode a number of new tags from WebP extended-format files <li>Decode a couple more Nikon tags <li>Decode a new Canon 300D tag (thanks LibRaw) <li>Decode a new Sony tag (thanks Jos Roost) <li>Updated Sony maker note decoding for ILCA-77M2 (thanks Jos Roost) <li>Renamed QuickTime &copy;day atom to ContentCreateDate (was previously named Year or CreateDate depending on its location) <li>Changed a number of "Unknown (-1)" values to "n/a" (thanks Herbert Kauer) <li>Minor change to some German translations (thanks Herbert Kauer) <li>Patched spec file for building RPM under Redhat 6 (thanks Norbert de Rooy) <li>Fixed a problem writing 3-character Nikon CountryCode values <li>Fixed problem when importing CSV files in Windows where an appropriate SourceFile entry may not be found if the file specification does not match exactly but the absolute path is the same </ul> <a name='v9.59'><b>May 3, 2014 - Version 9.59</b></a> <ul> <li>Added support for Leica T maker notes <li>Added a few new Olympus CameraType values <li>Added a number of new AppleStoreCountry values (thanks Fran&ccedil;ois Bonzon) <li>Added a print conversion for QuickTime GenreID (thanks Fran&ccedil;ois Bonzon) <li>Added more values for some NikonCapture tags (thanks LibRaw) <li>Improved decoding for a number of Sony tags (thanks Jos Roost) <li>Improved decoding of some Olympus tags (thanks Herbert Kauer) <li>Improved writing of GPSAltitudeRef to recognize any signed number <li>Patched problem where some QuickTime UTF-8 values were being decoded incorrectly </ul> <a name='v9.58'><b>Apr. 19, 2014 - Version 9.58</b></a> <ul> <li>Added verbose warning and HtmlDump flag for out-of-sequence EXIF tag ID's <li>Improved decoding of NikonCapture WBAdjLighting (thanks LibRaw) <li>Improved German translations (thanks Herbert Kauer) <li>Fixed -v3 to report absolute offsets for RIFF and NikonCapture information <li>Fixed problem in Windows version which caused ExifTool to exit with an error when importing from a CSV file with a non-existent SourceFile entry </ul> <a name='v9.57'><b>Apr. 12, 2014 - Version 9.57</b></a> <ul> <li>Added a Composite tag to calculate Duration for AIFF files <li>Added a couple of new Canon lenses <li>Added a new value for NikonCapture:WBAdjLighting (thanks LibRaw) <li>Added a new Olympus CameraType (thanks LibRaw) <li>Decode a couple more Canon tags <li>Improved French translations (thanks Alphonse Philippe) <li>Patched to correctly sort out-of-sequence GPS IFD entries <li>Fixed possible "uninitialized value" runtime error when reading corrupted CanonCustom2 information <li>Fixed unnecessary warning when writing an image with zero-length maker notes <li>Fixed incorrect family 2 group for XMP-exif:GPSImgDirectionRef </ul> <a name='v9.56'><b>Apr. 5, 2014 - Version 9.56</b></a> <ul> <li>Added new Canon and Pentax LensType values <li>Added a couple more Canon ContinuousDrive modes <li>Added a new Sigma ColorMode <li>Decode some new QuickTime tags written by the HTC One (M8) in MP4 videos <li>Decode telemetry information from AR Drone videos <li>Extract PreviewImage from GoPro JPG files <li>Improved German translations (thanks Herbert Kauer) <li>Improved French translations (thanks Alphonse Philippe) <li>Updated en_ca and en_gb translations <li>Patched to avoid "excessive count" warning for a 16-bit TransferFunction <li>Fixed decoding of Canon AEBShotCount for some models </ul> <a name='v9.55'><b>Mar. 29, 2014 - Version 9.55</b></a> <ul> <li>Added new write-only HardLink tag for creating hard links <li>Added support for Leica S maker notes <li>Added support for Nintendo maker notes <li>Added limited read support for FLIR "AFF" SEQ images <li>Added a new Pentax LensType (thanks Bruce Rusk) <li>Added two new NEFCompression values (thanks LibRaw) <li>Added a few new CanonModelID values <li>Added a new Sony LensType2 (thanks Jos Roost) <li>Added some unknown Sony tags possibly related to metering (thanks Jos Roost) <li>Decode orientation information for Ricoh Theta (thanks Paulo Costa) <li>Decrypt Nikon ColorBalanceUnknown data for -U and -v2+ options <li>Updated recognition of Metabones Canon adapters on Sony cameras to support new adapter firmware versions <li>Improved verbose messages when reading GPS track logs <li>Changed writing of EXIF:Copyright to allow newline conversion to be avoided by disabling print conversion <li>Fixed an incorrect French translation (thanks Alphonse Philippe) <li>API Changes: <ul> <li>Fixed problem where Directory tag wasn't written if any "real" tags were changed when calling WriteInfo() </ul> </ul> <a name='v9.54'><b>Mar. 1, 2014 - Version 9.54</b></a> <ul> <li>Added a new Pentax LensType <li>Decode a few more FLIR tags <li>Generate missing default language tags for alternate-language QuickTime tags without them <li>Improved identification of some file sub-types based on filename extension <li>Fixed bug extracting alternate-language QuickTime tags with numerical ID's when processing multiple files in a single command <li>Fixed potential problem when using some of the recently added options with the -stay_open feature <li>Fixed problem loading a config file with a single quote in the file name <li>Fixed problem writing a shortcut tag when the target tag has a group name <li>Fixed problem recognizing HTML files with a leading UTF-8 BOM </ul> <a name='v9.53'><b>Feb. 22, 2014 - Version 9.53</b></a> <span class=grn>(production release)</span> <ul> <li>Added user-defined file types feature <li>Added support for a few more XMP-expressionmedia tags <li>Decode CameraTemperature from a few new Canon models <li>Decode another Sony tag (thanks Jos Roost) <li>Recognize the JXR extension <li>Changed wording of IPTC "Unrecognized data" warning <li>Patched round-off error problem in seconds of some date/time values <li>Fixed problem creating EXV files with the -o option <li>Fixed problem conditionally replacing Extra block-type tags </ul> <a name='v9.52'><b>Feb. 17, 2014 - Version 9.52</b></a> <ul> <li>Fixed bug introduced in 9.44 which resulted in incorrect maker note offsets when copying maker notes from DNG images of some Pentax models </ul> <a name='v9.51'><b>Feb. 15, 2014 - Version 9.51</b></a> <ul> <li>Added a number of new CanonModelID values <li>Added a new Sony/Minolta LensType (thanks Jos Roost) <li>Added a new Panasonic BurstMode <li>Added a new Pentax LensType <li>Added new ColorSpaceTags shortcut <li>Decode a number of new PanasonicRaw tags (thanks LibRaw) <li>Decode ColorData tags for the new Canon EOS 1200D <li>Improved Sony maker note decoding for some newer models (thanks Jos Roost) <li>Fixed conversion of XMP:LensID for Pentax lenses on Ricoh-branded cameras </ul> <a name='v9.50'><b>Feb. 8, 2014 - Version 9.50</b></a> <ul> <li>Added support for Exiv2 EXV metadata files <li>Added ability to read/write/copy GeoTiff tags as a block <li>Added ability to combine -b with -j to write base64-encoded binary data in JSON output format <li>Added a new Nikon LensID <li>Added a new Sony/Minolta LensType (thanks Jos Roost) <li>Added new Extra ProcessingTime tag <li>Added a new Olympus CameraType <li>Added header signature to .EXIF files <li>Decode a new Olympus tag (thanks LibRaw) <li>Improved conversion of some Canon RecordMode values <li>Improved decoding of tags for Hasselblad Stellar (thanks Jos Roost) <li>Fixed -htmlDump offsets for information extracted from some embedded images <li>Fixed hemisphere problem in Composite GPS tags derived from QuickTime:LocationInformation <li>API Changes: <ul> <li>Option names are now case insensitive </ul> </ul> <a name='v9.49'><b>Feb. 1, 2014 - Version 9.49</b></a> <ul> <li>Added new Olympus and Samsung LensType values, and fixed an Olympus lens name (thanks Niels Kristian Bech Jensen) <li>Added another Polish tag translation (thanks Kacper Perschke) <li>Added a new Panasonic ColorEffect value <li>Decode a new FujiFilm tag (thanks LibRaw) <li>Adjusted scaling factor for H264 ExposureTime values (thanks Francois) </ul> <a name='v9.48'><b>Jan. 25, 2014 - Version 9.48</b></a> <ul> <li>Added a new GeoTiff tag <li>Added a couple of new Canon LensType values <li>Added a few new XMP DarwinCore tags <li>Updated Sony MakerNotes for the ILCE-5000 (thanks Jos Roost) <li>Improved Polish translations (thanks Kacper Perschke) <li>Fixed problem writing RicohSubdirIFD in GR images <li>Fixed runtime error when writing PNG image with a TIFF-format EXIF profile </ul> <a name='v9.47'><b>Jan. 18, 2014 - Version 9.47</b></a> <ul> <li>Added read support for JPEG-HDR APP11 information <li>Added read support for Media Jukebox APP9 information <li>Added a new Olympus LensType (thanks Niels Kristian Bech Jensen) <li>Added a few new Nikon LensID's (thanks Robert Rottmerhusen) <li>Added a new Minolta/Sony LensType and fixed some Tamron lens names (thanks Jos Roost) <li>Decode more FLIR tags (thanks Tomas) <li>Patched for quirk in Kodak PixPro AZ362 maker notes </ul> <a name='v9.46'><b>Jan. 11, 2014 - Version 9.46</b></a> <span class=grn>(production release)</span> <ul> <li>Added a few Nikon lenses (thanks Niels for two) <li>Added a few new XMP-xmpDM tags (thanks Mats Peterson) <li>Added a new Pentax DriveMode (thanks Doug O'Brien) <li>Added a new Olympus lens (thanks Niels Kristian Bech Jensen) <li>Decode a number of new QuickTime tags <li>Decode a few new Canon filter tags <li>Improved -d option to properly handle time zones with %s and %z <li>Improved conversions for Panasonic Composite AdvancedSceneMode <li>Changed a few Tamron lens strings (thanks Niels Kristian Bech Jensen) <li>Patched to avoid round-off errors in seconds of filesystem time tags <li>Fixed extraction of CompressorID for some MOV videos </ul> <a name='v9.45'><b>Dec. 21, 2013 - Version 9.45</b></a> <ul> <li>Added details about movie data offset in MOV verbose dump <li>Added a new Pentax WhiteBalance value <li>Added a new Sony/Minolta LensType (thanks Jos Roost) <li>Decode a new QuickTime tag <li>Prevent illegal tag names to be generated from user-defined XMP tags <li>Patched to allow reading some improperly formatted EXIF UserComment values <li>Fixed problem where reading some large M2TS files could take a loooong time </ul> <a name='v9.44'><b>Dec. 11, 2013 - Version 9.44</b></a> <ul> <li>Added a new Pentax WhiteBalance value <li>Added back the K-3 SRResult tag, but make it Unknown and with no print conversion <li>Fixed problem copying the maker notes of some recent Pentax models </ul> <a name='v9.43'><b>Dec. 8, 2013 - Version 9.43</b></a> <ul> <li>Added a new Olympus CameraType <li>Added new Canon and Pentax LensType values <li>Added a new Panasonic ShootingMode <li>Added a new CanonModelID <li>Decode a number of new Sony Tags (thanks Jos Roost) <li>Decode a new Pentax tag <li>Fixed decoding of a few Pentax tags for newer models <li>Fixed decoding of CameraTemperature for Olympus Stylus 1 <li>Fixed bug when writing QuickTime date/time tags with QuickTimeUTC option set </ul> <a name='v9.42'><b>Dec. 1, 2013 - Version 9.42</b></a> <ul> <li>Added a new Canon LensType (thanks Norbert Wasser) <li>Added a new Pentax LensType (thanks Louis Granboulan) <li>Added a new Sony LensType (thanks Fredrik Agert) <li>Added a new Nikon LensID (thanks LibRaw) <li>Added a new Olympus CameraType <li>Decode a number of new Sony tags (thanks Jos Roost) <li>Decode a number of new Panasonic tags (thanks Thomas Modes) <li>Decode a few new Pentax tags (thanks Klaus Homeister and others) <li>Improved Olympus SensorTemperature calibration (thanks Eric Sibert) <li>Patched decoding of EXIF:UserComment to tolerate invalid character code written by Canon Zoombrowser EX 4.5 <li>Patched to allow GPS information to be extracted from incorrectly formatted EXIF written by Windows Phone OS 7.5 (observed in some HTC and Nokia phones) <li>Fixed runtime warnings which could occur when -j or -php combined with -f </ul> <a name='v9.41'><b>Nov. 16, 2013 - Version 9.41</b></a> <ul> <li>Added the ability to use multiple group qualifiers on tag names when writing and copying (eg. "-QuickTime:Time:All=now") <li>Added ability to geotag from Google Location Services KML files <li>Added a new Pentax LensType (thanks Louis Granboulan) <li>Added a new Canon LensType (thanks David Monro) <li>Added a new Sony LensType2 (thanks Jos Roost) <li>Decode a bunch more Nikon, Canon, Sony and FujiFilm WhiteBalance tags (thanks LibRaw) <li>Extract information from the new Pentax APP7 segment </ul> <a name='v9.40'><b>Nov. 8, 2013 - Version 9.40</b> - "Write QuickTime"</a> <ul> <li>Added ability to write XMP and edit date/time tags in QuickTime-format files (eg. MOV, MP4) <li>Added -api option to allow API options to be set via the command line <li>Added ability to specify family 2 group name when writing <li>Added write support for a number of new XMP tags <li>Added a new Nikon LensID <li>Added new Canon and Minolta/Sony LensType values (thanks Jos Roost) <li>Added a few of the new values defined in the DICOM 2011 specification <li>Add standard XMP to a PNG image when writing, even if XMP already exists in another non-standard chunk <li>Decode a few more Sony tags (thanks Jos Roost) <li>Decode a few more QuickTime tags <li>Decode a few more Panasonic tags (thanks Thomas Modes) <li>Extract EXIF information from WEBP images <li>Extract a few more unknown tags in Samsung MP4 videos <li>Extract ProfileName from the PNG iCCP chunk <li>Improved error message if no matches found when writing to tag(s) specified by wildcards <li>Improved XML output so EXIF tags now report a count (if constant, and > 1) <li>Avoid writing a few XMP-crs tags which have XMP-exifEX equivalents unless specified explicitly <li>Patched POD documentation in MIE.pm to remove non-ASCII characters <li>Fixed bug adding back XMP tags in PDF files after deleting all in the same command (also made XMP the preferred group when writing PDF files) <li>Fixed bug extracting some font information from QuickTime videos <li>Fixed inconsistencies in behaviour when extracting XML as a block from JPEG2000 images <li>Fixed problem where FileName was changed when using -srcfile option and writing only the Directory <li>API Changes: <ul> <li>Added the PNGEarlyXMP option </ul> <li>Internal Changes: <ul> <li>Changed all "$exifTool" variable names to "$et" throughout -- my apologies to the diff engines </ul> </ul> <a name='v9.39'><b>Oct. 19, 2013 - Version 9.39</b></a> <ul> <li>Added a new PentaxCameraID and some new LensTypes (thanks Louis Granboulan) <li>Added a new Nikon LensID <li>Added a new Panasonic ShutterType <li>Additions and improvements to Pentax makernote decoding for K-3 <li>Decode a number of new tags including purchase information from MP4 videos <li>Decode FLIR information acquired by Extech MeterLink meters (thanks Tomas) <li>Decode more Sony tags (thanks Jos Roost) <li>Patched to suppress the run-time "No such file or directory" error that has been seen when using the -csv option on Windows systems </ul> <a name='v9.38'><b>Oct. 7, 2013 - Version 9.38</b></a> <ul> <li>Added read support for DPX images <li>Added a new Pentax LensType <li>Added a few new CanonModelID values <li>Added a new XMP-apple-fi tag <li>Decode a few more Canon tags (thanks Tomasz Kawecki) <li>Decode a few more Sony tags (thanks Jos Roost) <li>Improved the names of a few Apple tags (thanks Neal Krawetz) and added new Composite tag <li>Tolerate NMEA sentences with missing degrees written by some crappy software <li>Changed Duration conversion to print number of days if more than 24 hours </ul> <a name='v9.37'><b>Sept. 14, 2013 - Version 9.37</b></a> <ul> <li>Added support for maker notes from Apple iPhone5 iOS 7 <li>Added two more Torrent tags <li>Added a new Pentax DigitalFilter <li>Added new Olympus CameraType and LensType values <li>Decode a couple more Olympus tags <li>More improvements to Sony decoding (thanks Jos Roost) <li>Improved decoding of Scalado JPEG APP4 information <li>Fixed problem where a PreviewImage could be reported in either the File or Composite group, depending on the details of the command </ul> <a name='v9.36'><b>Sept. 7, 2013 - Version 9.36</b></a> <ul> <li>Added read support for BitTorrent description files (bencode format) <li>Added a couple of new Nikon LensID's (thanks J&uuml;rgen Sahlberg) <li>Added support for PNG 8bim raw profile <li>Added or fixed a few Pentax LensType values (thanks Louis Granboulan) <li>Added ability to delete DNGAdobeData and DNGPrivateData <li>Decode more Sony tags and improved decoding of others (thanks Jos Roost) <li>Decode a number of new FujiFilm tags and fixed 2 incorrect Saturation values <li>Decode a number of Canon CameraInfo tags for the 70D (thanks Tomasz Kawecki) <li>Patched to issue minor warning and extract only the first 1000 values from XMP list-type tags containing more than 1000 items (all values may be extracted by ignoring this warning with the -m option) <li>Patched decoding of PNG IPTC raw profile to allow either IIM or IRB data <li>Flagged ImageSourceData as "unsafe" (avoids excessive memory usage when copying all tags because this data may be larger than the image itself for Photoshop TIFF images) <li>Disabled feature introduced in version 9.14 which allowed multiple tags (specified by wildcards) to be copied into a single list. This feature had the unintended side-effect of generating duplicate list items when copying list-type tags if there were multiple source tags with the same name. If necessary, -addTagsFromFile may still be used to copy the values of multiple tags into a single list. </ul> <a name='v9.35'><b>Aug. 17, 2013 - Version 9.35</b></a> <ul> <li>Added a new Canon LensType (thanks Oliver) <li>Added two new Olympus CameraType values <li>Added some new Pentax LensType values (thanks Louis Granboulan) <li>Added a new RIFF StreamType value <li>Decode a number of new Sony tags (thanks Jos Roost) <li>Decode CameraTemperature from more Canon models <li>Extract thumbnail information from Leica X VARIO MP4 videos <li>Improved decoding of Pentax LensData (thanks Louis Granboulan) <li>Patched to avoid a warning for the messed-up Leica M maker notes <li>Changed a few Pentax Samsung/Schneider lens names for consistency <li>Changed "Can't delete" message to indicate if the tag is Permanent <li>Fixed the case of a few tag names (thanks Romain) </ul> <a name='v9.34'><b>July 27, 2013 - Version 9.34</b></a> <ul> <li>Added support for Ricoh GR maker notes (in MOV videos too) <li>Added a new Olympus LensType (thanks Niels Kristian Bech Jensen) <li>Added a new Canon LensType (thanks Norbert Wasser) <li>Added support for Sony DSC-TF1 maker notes (thanks Jos Roost) <li>Added patch for messed up Leica M (Typ 240) MakerNote trailer <li>Added a few new CanonModelID's and a few new PentaxModelID's <li>Added some new XMP-crs tags written by LR5 <li>Added a few new Nikon LensID's <li>Decode a number of new Ricoh GR tags (thanks Tim Gray) <li>Recognize the Nikon SB-700 external flash <li>Updated MWG location tags to conform with the MWG 2.0 specification (but continue writing legacy IPTC Core location tags) <li>Removed "[Minor]" designation from "excessive count" warning if count is greater than 2M <li>Avoid processing multiple EXIF IFD's if only one should exist </ul> <a name='v9.33'><b>July 13, 2013 - Version 9.33</b></a> <ul> <li>Added support for EXIF UTF-16 Unicode text (previously treated as UCS-2) <li>Added support for Leica X Vario maker notes <li>Added a couple of new SonyModelID values (thanks Jos Roost) <li>Added a new CanonModelID and a new Olympus CameraType <li>Added a new Canon LensType <li>Added a new Olympus LensType (thanks Niels Kristian Bech Jensen) <li>Decode some new Panasonic tags and added values for others (thanks Thomas) <li>Improved decoding of Olympus RawDevArtFilter <li>Improved decoding of some Sony tags for the RX100M2 <li>Changed application to always return an error status when exiting if an error was encountered when extracting information </ul> <a name='v9.32'><b>June 22, 2013 - Version 9.32</b></a> <ul> <li>Added support for "Exif 2.3 for XMP" tags <li>Added a few new Olympus LensTypes (thanks Niels Kristian Bech Jensen) <li>Added a few new PentaxModelID's <li>Added two new Samsung LensType values (thanks Pascal de Bruijn) <li>Decode a new Olympus tag <li>Fixed problem extracting audio comments from Ricoh G700SE images <li>Fixed a non-conforming CanonModelID string </ul> <a name='v9.31'><b>June 8, 2013 - Version 9.31</b></a> <ul> <li>Added a number of new Photoshop tags (but marked as Unknown) <li>Added a few new values for some Olympus tags <li>Added conversion for Olympus SensorTemperature <li>Added two new CanonModelID's <li>Added support for Reconyx firmware 4.0.0 <li>Decode a number of new QuickTime and FLIR tags in MP4 videos <li>Decode more Sony tags (thanks Jos Roost) <li>Decode a new Olympus tag <li>The API List option may now be used in the config file for the same effect as -sep when combined with the -X, -j or -php option on the command line <li>Fixed problem where some QuickTime string values could have terminating NULL characters, which caused problems when renaming files using these tags </ul> <a name='v9.30'><b>May 25, 2013 - Version 9.30</b></a> <ul> <li>Added a new Canon LensType <li>Decode many Canon 700D CameraInfo tags <li>Also delete null characters with the default advanced formatting filter <li>Tolerate leading whitespace in HTML files <li>Fixed decoding of Canon 650D CameraInfo FocalLength <li>Fixed bug in new advanced formatting feature which gave incorrect output when used in the -p option for processing multiple files </ul> <a name='v9.29'><b>May 18, 2013 - Version 9.29</b></a> <ul> <li>Added another H264 Model value (thanks Rob Lewis) <li>Added support for Canon 5DmkIII firmware version 1.2.1 <li>Added recognition of IBM AVC video files <li>Added a new CanonModelID <li>Decode more FLIR tags (thanks Tomas) <li>Decode H264 MDPM TimeCode <li>More improvements to Sony LensType decoding (thanks Jos Roost) <li>Extract information from the ASF Metadata Library in WMV files <li>Extract ColorBalanceVersion for unknown Nikon ColorBalance information <li>Updated some ID3 Genre names (thanks Mats Peterson) <li>Fixed warning when using -p with a string containing a newline <li>Fixed some incorrect Pentax Q LensType values </ul> <a name='v9.28'><b>Apr. 21, 2013 - Version 9.28</b></a> <ul> <li>Added the ability to delete unknown JPEG APP segments by segment name <li>Added a bunch of new ID3 Genre values (thanks Mats Peterson) <li>Decode a few more Sony tags (thanks Jos Roost) <li>Decode a few more tricky FLIR tags (thanks Tomas) <li>Improved Dutch language translation (thanks Peter van der Laan) <li>Patched to avoid warning in images where the AFMicroAdj data has been truncated by Canon DPP <li>Fixed -tagsFromFile and -v so they may now be used when writing via pipes <li>Fixed writing of Panasonic LensType tags that were broken in the 9.15 update <li>Fixed incorrect case for list type of XMP DocumentAncestors and TextLayers <li>API Changes: <ul> <li>Allow a File::RandomAccess reference as an input to WriteInfo() </ul> </li> </ul> <a name='v9.27'><b>Apr. 15, 2013 - Version 9.27</b></a> <span class=grn>(production release)</span> <ul> <li>Fixed "ARRAY ref" runtime error introduced in 9.25 that could occur when using the -X option <li>Fixed runtime warning which could occur when conditionally deleting XMP structure </ul> <a name='v9.26'><b>Apr. 13, 2013 - Version 9.26</b></a> <ul> <li>Added read support for FLIR FFF and FPF images and decode more FLIR tags <li>Added some new Pentax LensType's and Nikon LensID's <li>Added a few new Panasonic ContrastMode values <li>Decode a number of Canon 6D tags <li>Allow CanonRaw tags to be written using "CIFF" as a group name <li>Improved decoding of Canon ColorData information for newer EOS models <li>Improved decoding of a number of Sony tags (thanks Jos Roost) <li>Removed index number from duplicate Composite TagID's in XML output <li>Fixed byte-order problem for a few Nikon D5200 and D7100 tags <li>Fixed incompatibility with old-style (pre-8.46) XMP user-defined structure definitions </ul> <a name='v9.25'><b>Apr. 6, 2013 - Version 9.25</b></a> <span class=grn>(production release)</span> <ul> <li>Added read support for FLIR thermal image metadata in JPEG images <li>Added write support for DNG version 1.4 images <li>Added a new Pentax DriveMode value and a new Pentax LensType <li>Added two new Olympus CameraType values <li>Added print conversion for XMP Flash tags to provide alternate language support <li>Decode a few more Nikon and Pentax tags <li>Decode more Sony tags (thanks Jos Roost) <li>Decode more Panasonic tags and changed decoding of others <li>Enhanced -j and -php options to work with -D, -H and -l <li>Improved German translations (thanks Herbert Kauer) <li>Patched decoding of QuickTime date/time tags to accommodate Samsung and Sony cameras that use an incorrect time zero of 1970 instead of 1904. This patch will only work for videos produced before 2036, so hopefully Samsung and Sony will fix this problem at their end before then (care to place a wager?) <li>Fixed issues when using "-wm cg" and writing metadata as a block <li>Fixed possible "division by zero" error when reading undefined XMP rational </ul> <a name='v9.24'><b>Mar. 23, 2013 - Version 9.24</b></a> <ul> <li>Added ability to overwrite plus append output files (-w+!) <li>Added support for Sigma X3F version 3.0 images <li>Added a few new values for some Pentax tags <li>Added a few new CanonModelID's <li>Decode Nikon D5100 and D5200 custom settings plus a few other Nikon tags <li>Allow the value for missing tags extracted with the -f option to be configured via the API MissingTagValue setting (default is still "-") <li>Improved decoding of Sony LensSpec (again, thanks Jos Roost) <li>Fixed bug reading QuickTime extended-size atoms </ul> <a name='v9.23'><b>Mar. 10, 2013 - Version 9.23</b></a> <ul> <li>Added -W (-tagOut) and -Wext (-tagOutExt) options to allow multiple tags to be extracted to separate output files from a single source file <li>Added append feature to -w (-w+) <li>Added ability to extract SoundFile from Ricoh RMETA <li>Added more SonyModelID and Sony LensType values and improved Sony LensType decoding (thanks Jos Roost) <li>Added a new Olympus LensType (thanks Niels Kristian Bech Jensen) <li>Added another Pentax LensType <li>Decode more Nikon flash information (thanks Alyda Gilmore for the samples) <li>Decode Pentax Kelvin white balance tags (thanks Klaus Homeister) <li>Extract PDF embedded image color space <li>Improved Spanish translations (thanks Emilio Sancha) <li>More patches to avoid "APP1 segment too large" errors when copying all tags from some RAW images </ul> <a name='v9.22'><b>Mar. 2, 2013 - Version 9.22</b></a> <ul> <li>Fixed problem extracting metadata from encrypted embedded JPEG images in PDF files and added the ability to extract JPEG 2000 information too </ul> <a name='v9.21'><b>Mar. 2, 2013 - Version 9.21</b></a> <ul> <li>Added ability to extract embedded images and their metadata from PDF files <li>Added read support for binary-format PLIST files <li>Added support for Sigma DP3 Merrill maker notes <li>Added a few new Sigma LensType values <li>Added a new FujiFilm PictureMode value <li>Decode a number of new Pentax tags (thanks Klaus Homeister) <li>Decode more Sony tags (thanks Jos Roost) <li>Decode some new Nikon D800 tags (thanks Alyda Gilmore for the samples) <li>Decode a number of new tags in 3GP videos <li>Decode Pentax CameraType <li>Made a few more DNG tags writable (but protected) <li>Fixed problem reading XREF table of some PDF files <li>API Changes: <ul> <li>The CombineInfo() routine is now deprecated because it is likely that nobody ever used it. If anyone actually uses this, please let me know </ul> </li> </ul> <a name='v9.20'><b>Feb. 20, 2013 - Version 9.20</b></a> <ul> <li>NOTICE: This release fixes a problem in the 9.19 Windows version that could cause ExifTool to crash when writing metadata to some files (it seems that one of the files in the 9.19 Windows package was corrupted) <li>Added a new PentaxModelID <li>Added write support for a few Getty Images XMP tags <li>Decode Sony AFAreaModeSetting (thanks Jos Roost) </ul> <a name='v9.19'><b>Feb. 20, 2013 - Version 9.19</b></a> <ul> <li>Added read support for Phase One IIQ maker notes <li>Added a couple of new Minolta Teleconverter values <li>Patched problem which could result in runtime warning when extracting information from a file with an incorrectly formatted PreviewImage pointer <li>Improved handling of unknown maker notes when writing to reduce the chance of corruption (fixes problem of corrupted SilverFast maker notes) <li>Fixed bug in HtmlDump where unused bytes at end of MakerNotes were not shown if they came at the end of a TIFF-format file </ul> <a name='v9.18'><b>Feb. 16, 2013 - Version 9.18</b></a> <ul> <li>Decode more AF information for Sony SLT models (thanks Andy Johnson for the samples) <li>Recognize CameraInfo and ColorData information from newer Canon 1DX firmware <li>Organized support files in full Perl distribution into separate directories <li>Improved German and Spanish translations (thanks Herbert Kauer and Emilio Sancha) <li>Fixed inconsistency where a priority tag could be hidden by a same-named tag in the same group when using the -j or -X option combined with -g or -G <li>Fixed problem in standard tests that could cause ExifTool test 25 to fail </ul> <a name='v9.17'><b>Feb. 9, 2013 - Version 9.17</b></a> <ul> <li>Added PLIST and MODD to the list of supported file extensions <li>Added track name to UserData tags within QuickTime tracks <li>Added a new Pentax LensType (thanks Pietu Pohjalainen) <li>Added a new Canon LensType <li>Decode binary data in PLIST and MODD files <li>Decode new Canon 1DX CustomFunctions <li>Issue a minor warning and ignore duplicate PDF Info dictionaries unless the -m option is used <li>Improved date/time parsing when writing to allow single-digit fields <li>Improved decoding/naming of a few Sony tags (thanks Jos Roost) <li>Improved German translations (thanks Herbert Kauer) <li>Changed a few PLIST tag names <li>Fixed decoding of Olympus CameraType for some models <li>Fixed problem calculating AvgBitrate for some video files <li>Fixed problem writing Canon:LensSerialNumber </ul> <a name='v9.16'><b>Feb. 2, 2013 - Version 9.16</b></a> <ul> <li>Added support for DarwinCore XMP tags <li>Added support for CinemaDNG tags <li>Added basic support for parsing XML PLIST information, and use this to extract tags from QuickTime iTunesInfo Data <li>Added a new Pentax lens (thanks Niels Kristian Bech Jensen) <li>Added some new Sony E-mount lenses (thanks Jos Roost) <li>Added a new NEFBitDepth value (thanks Jos Roost) <li>Added a new CanonModelID <li>Decode a few more Sony tags (thanks Jos Roost) <li>Improved decoding of QuickTime iTunesInfo tags <li>Improved Spanish translations (thanks Emilio Sancha) <li>Improved handling of errors in Perl expression of new formatting feature <li>Improved -p option to also handle structures <li>Changed a number of Sigma lens names for Olympus to conform with official Sigma model names (thanks Niels Kristian Bech Jensen) <li>Moved the MWG XMP tags documentation to the MWG page <li>Patched to allow reading GPX track logs with no version number <li>Fixed problem reading an ID3 POPM frame with a missing counter <li>Fixed bug which could cause "uninitialized value" runtime warning when reading Nikon maker notes with an empty RetouchHistory <li>API Changes: <ul> <li>Compatibility Notice: The MWG Composite tags are no longer automatically loaded just by using the MWG module. Image::ExifTool::MWG::Load() must now be called explicitly to load these tags </ul> </ul> <a name='v9.15'><b>Jan. 27, 2013 - Version 9.15</b></a> <ul> <li>Added advanced formatting feature to -p and -tagsFromFile options <li>Added -echo3 and -echo4 options <li>Added a few more Olympus LensType values, removed one, changed some lens names for consistency (all thanks Niels Kristian Bech Jensen), and use hexadecimal instead of decimal for numerical LensType values <li>Added a number of new Sony E-mount lenses <li>Added a new Tamron lens for Sony (thanks Marcin Krol) <li>Trim trailing spaces from Panasonic LensType strings <li>Fixed bug which could cause "Can't call method GetMarkerPointers" runtime warning when writing certain types of corrupted images <li>Fixed problem copying PrevewImage from some corrupted files <li>Fixed problem identifying a Sigma lens for Nikon at some focal lengths <li>API Changes: <ul> <li>Added AddUserDefinedTags() method <li>Added formatting feature for tag values in SetNewValuesFromFile() </ul> </ul> <a name='v9.14'><b>Jan. 18, 2013 - Version 9.14</b></a> <ul> <li>Added -wm (-writeMode) option to provide control over tag write/create mode <li>Added ability to use wildcards in target tag names when writing <li>Added ability to read/write Jpeg2000 XML tag as a block <li>Added ability to delete MPF segment (with -MPF:All=) <li>Added a number of new Olympus lenses (thanks Niels Kristian Bech Jensen) <li>Added a new Nikon LensID (thanks Robert Rottmerhusen) <li>Added a number of new Pentax LensType's (thanks Alan Robinson for one) <li>Added a few new CanonModelID's and Canon LensType's <li>Decode ID3v2 POPM and OWNE frames <li>Decode new Canon 6D CustomFunctions <li>Improved calculation of ScaleFactor35efl for Canon cameras <li>Changed priority of PDF Info tags so tags from most recent Info dictionary take precedence (to partially accomodate the questionable Acrobat Pro incremental update technique) <li>Changed some verbose warnings when attempting to write "unsafe" tags <li>Changed behaviour so that "unsafe" tags are not copied for any tag specified using a wildcard (previously this was the behaviour for a tag name of 'all' or '*', but not names like 'gps*') <li>Fixed bug where a Composite tag could sometimes not be generated when the -struct option was used if the tag was derived from an XMP List-type tag <li>Fixed problem conditionally deleting GIF Comment and MIE tags <li>Fixed decoding of RawImageWidth/Height from FujiFilm X-E1 RAF images <li>API Changes: <ul> <li>Added WriteMode option </ul> </ul> <a name='v9.13'><b>Jan. 10, 2013 - Version 9.13</b></a> <span class=grn>(production release)</span> <ul> <li>Added basic validation of ExifVersion and FlashpixVersion tags when writing <li>Fixed problem where MPF PreviewImage was lost when editing metadata in JPEG images from the Nikon D4, D600 or D800 </ul> <a name='v9.12'><b>Jan. 2, 2013 - Version 9.12</b></a> <span class=grn>(production release)</span> <ul> <li>Fixed problem introduced in 9.10 preserving file modification date/time when some options are used </ul> <a name='v9.11'><b>Jan. 2, 2013 - Version 9.11</b></a> <span class=grn>(production release)</span> <ul> <li>Improved decoding of some Sony tags <li>Changed 3 tag names to avoid a leading digit to fix XML validation problem <li>Fixed bug introduced in 9.04 that could double-encipher some Sony MakerNote information when writing (affected files are fixed by writing any tag with ExifTool 9.11) </ul> <a name='v9.10'><b>Dec. 29, 2012 - Version 9.10</b></a> <ul> <li>Added write support for a few new XMP-crs and XMP-photomech tags <li>Added a new Samsung LensType (thanks Jaroslav Stepanek) <li>Added a new Pentax LensType (thanks Helmut Sch&uuml;tz) <li>Added a new Canon LensType <li>Decode Sony A99 FocusMode (thanks Michael Tapes for the samples) <li>Tolerate (but warn about) up to 4 bytes of garbage at start of EXIF segment <li>Changed -P option to also preserve FileCreateDate on Windows (requires Win32API::File::Time) <li>Changed "[minor]" warning messages to capitalize the "M" (ie. "[Minor]") if processing is affected when the warning is ignored <li>Patched to avoid problem of slow processing with some corrupted EXIF </ul> <a name='v9.09'><b>Dec. 15, 2012 - Version 9.09</b></a> <ul> <li>Added a few new Google XMP GPano tags <li>Added a new Olympus CameraType <li>Added a couple of new Minolta LensTypes <li>Added two new Nikon LensID's (thanks David P&uuml;schel and Robert Rottmerhusen) <li>Decode Nikon D7000 AFPointsUsed and make this tag writable <li>Decode a new Olympus tag (thanks Christoph Anton Mitterer) <li>Renamed one of the FujiFilm RAF RawImageWidth/Height pairs to RawImageFullWidth/Height <li>Changed -stay_open when combined with -q to flush output after each command (as already done without -q) (requires IO::Handle) <li>Fixed problem shifting FileCreateDate when writing other "real" tags in the same command </ul> <a name='v9.08'><b>Nov. 26, 2012 - Version 9.08</b></a> <ul> <li>Fixed bug introduced in 9.07 that broke writing of FileModifyDate </ul> <a name='v9.07'><b>Nov. 24, 2012 - Version 9.07</b></a> <ul> <li>Added ability to read/write FileCreateDate (Windows only) <li>Added ability to read FileInodeChangeDate (non-Windows only) <li>Added support for new tags in DNG 1.4 specification <li>Added support for Google Photosphere GPano XMP tags <li>Added a couple of new Olympus filter effects <li>Changed a Panasonic LensType (thanks Olaf Ulrich) <li>API Changes: <ul> <li>Enhanced SetFileModifyDate() to write FileCreateDate (Windows only) </ul> </ul> <a name='v9.06'><b>Nov. 17, 2012 - Version 9.06</b></a> <ul> <li>Added support for Nikon maker notes in images from any camera make (as written by Capture NX2) <li>Added support for FujiFilm X-E1 RAF images <li>Added a new Olympus CameraType <li>Added a new PentaxModelID and a new Pentax LensType <li>Extract FileCreateDate (Windows) and FileInodeChangeDate (other systems) <li>Fixed bug decoding UTF-16 ID3 synchronized lyrics </ul> <a name='v9.05'><b>Nov. 10, 2012 - Version 9.05</b></a> <ul> <li>Added ability to read APE metadata from MP3 audio files <li>Decode ID3 synchronized lyrics/text information <li>Decode maker notes in Leica V-LUX40 MP4 videos <li>Decode Sony A99 AFPointSelected (thanks Michael Tapes for the samples) <li>Improved decoding of some Sony tags (thanks Jos Roost) <li>API Changes: <ul> <li>Removed GeoNoInterpolate option (just set GeoMaxIntSecs to 0 instead) </ul> </ul> <a name='v9.04'><b>Nov. 3, 2012 - Version 9.04</b></a> <span class=grn>(production release)</span> <ul> <li>Added two new Sony LensType values (thanks Matthias Paul) <li>Added a few new Canon LensType values <li>Added a couple of new PentaxModelID's and decode some new K-5 II values <li>Added support for some new XMP tags written by the Apple iPhone 5 <li>Added a new Olympus CameraType <li>Decode more Sony tags/values (thanks Jos Roost) <li>Decode Nikon HDRInfo (thanks Stefan) <li>Decode some FlashInfo tags for new Nikon models <li>Decode a few WM ID3 tags (some documentation on these would be nice) <li>Fixed bug which could cause truncated/garbage ID3v2 strings to be returned <li>Fixed -globalTimeShift option to also work when copying tags <li>Fixed decoding of Nikon AFFineTuneAdj for FirmwareVersion 1.10B (thanks Michael Tapes for the samples for this and the A77) <li>Fixed problem where a few tags (FileSequence, NewGUID and Now) were not available for use with the -p option <li>API Changes: <ul> <li>Added RequestAll and GeoNoInterpolate options <li>Fixed problem in SetNewValue when setting the Raw value of some tags </ul> </ul> <a name='v9.03'><b>Oct. 13, 2012 - Version 9.03</b></a> <ul> <li>Added new feature to provide control over directory levels in %d strings <li>Added ability to write OtherImage in NEF images <li>Added a new Pentax LensType <li>Added a few new CanonModelID's (thanks Laurent Clevy) <li>Added a new Nikon LensID (thanks Geert De Soete) <li>Added a few new Olympus CameraType values <li>Decode some new CameraInfo tags for the Canon EOS 650D <li>Decode a number of new Sony tags (thanks Jos Roost) <li>Improved decoding of some Sigma tags for the DP1/DP2 Merrill <li>Give priority to EXIF tags over SigmaRaw tags X3F images <li>Changed Samsung lens names to include "NX" (thanks Jaroslav Stepanek) <li>Fixed misleading verbose "TAG is not writable" messages when copying list-type tags <li>API Changes: <ul> <li>Enhanced GetValue() to allow return of 'Rational' value </ul> </ul> <a name='v9.02'><b>Sept. 6, 2012 - Version 9.02</b></a> <ul> <li>Added a new Nikon LensID (thanks Joseph Heled) <li>Added a new EXIF SubFileType value used in DNG images <li>Added write support for Apple Adjustment Settings XMP tags (XMP-aas) <li>Added a couple of new Samsung LensType values (thanks Jaroslav Stepanek) <li>Added a couple of new Canon LensType values and a new CanonModelID <li>Decode a number of new Sony tags (thanks Jos Roost) <li>Enhanced "-o -" feature to allow output file type to be specified <li>Extract last file access time as FileAccessDate <li>Allow tags to be set from files which are zero bytes in size <li>Made ProfileHueSatMap tags Binary if they are too long <li>Changed names of some PanasonicRaw DistortionInfo tags <li>Changed decoding for a Sony ExposureMode value <li>Fixed hang/crash that could occur when writing to an image with corrupted Sony MoreInfo data (eg. SLT-A55V JPEG corrupted by GIMP) </ul> <a name='v9.01'><b>Aug. 25, 2012 - Version 9.01</b></a> <span class=grn>(production release)</span> <ul> <li>Added a couple of new CanonModelID values <li>Added a couple of new Canon LensType values (thanks Pascal de Bruijn) <li>Added a new PentaxModelID and a few new Pentax PictureMode values <li>Decode a new Pentax ISO tag <li>Improved -listx output for XMP structure tags <li>Fixed "unexpected end of file" problems with some compressed MIE files </ul> <a name='v9.00'><b>Aug. 18, 2012 - Version 9.00</b></a> <ul> <li>Added support for PDF encryption V5.6 (new in Adobe Reader X) <li>Added a few new XMP-cc tags and changed a few others to rdf:resource type <li>Added a new Sony LensType and values for other Sony tags (thanks Jos Roost) <li>Added a new Nikon LensID <li>Added a new Panasonic LensType (thanks Olaf Ulrich) <li>Added patch to fix simple XMP tags written incorrectly as lang-alt type <li>Decode some Panasonic RW2 lens distortion correction tags <li>Decode some WEBP image characteristics from the VP8 bitstream <li>Decode more Leica MakerNote information <li>Calculate CurrentIPTCDigest for IPTC in PostScript files <li>Changed the names of a couple of WBShift tags <li>Improved parsing of -if expressions to interpret a dash after a tag name as a minus sign instead of part of the tag name <li>Patched problem with conditional deletion of an incorrectly null-terminated JPEG Comment <li>Fixed hang bug when reading unsupported Microsoft Xtra information in MOV videos </ul> <a name='v8.99'><b>Aug. 3, 2012 - Version 8.99</b></a> <ul> <li>Added patch to avoid "Error renaming temporary file" errors in Windows <li>Decode some new Sony tags and values (thanks Mike Reit and Jos Roost) <li>Improved Italian translation (thanks Michele Locati) <li>Improved decoding of H264 ImageStabilization <li>Changed names of PanasonicRaw ImageWidth/Height tags, and added new Composite tags to calculate actual size of RW2 images <li>Fixed "Corrupted Ricoh RMETA data" warning for images from some Ricoh models <li>Fixed problem writing information to some EPS images </ul> <a name='v8.98'><b>July 28, 2012 - Version 8.98</b></a> <ul> <li>Added a new Pentax LensType and two new PentaxModelID's <li>Added a new CanonModelID and a new Olympus CameraType <li>Added a new Composite Duration tag for Vorbis audio files <li>Added more elements to Microsoft Regions XMP structure and fixed tag name documentation for this <li>Decode a number of new Sony tags (thanks Jos Roost) <li>Changed name of Minolta BatteryLevel tag to BatteryState <li>Patched problem with conditional deletion of IPTC string-type tags which are incorrectly null terminated (eg. written by Picasa 2.0) <li>Fixed problem copying Canon 5DmkIII MakerNotes from CR2 to JPEG images <li>Fixed runtime error when writing some images with corrupted EXIF </ul> <a name='v8.97'><b>July 6, 2012 - Version 8.97</b></a> <ul> <li>Added a new Canon LensType <li>Added support for GPX attitude information as written by Arduino <li>Added write support for XMP-expressionmedia:CatalogSets <li>Made CFARepeatPatternDim and CFAPattern2 writable but protected <li>Minor improvement to decoding of Sony FaceInfo <li>Fixed problem reading some GPX track logs </ul> <a name='v8.96'><b>June 30, 2012 - Version 8.96</b></a> <ul> <li>Added -globalTimeShift option <li>Added new values for a couple of Nikon tags (thanks Michael Relt) <li>Added a few new Sony PictureEffect values <li>Added a new Olympus LensType <li>Decode a new Sony A100 tag and improved/renamed some others (thanks Igal Milchtaich) <li>Changed -restore_original and -delete_original options to scan directories only for writable file types <li>Enhanced -srcfile option to allow multiple source files to be specified <li>Patched possible round-off problem when extracting rational values <li>Fixed bug which could cause runtime error when reading some HTML files and improved reliability when extracting HTML "meta" tags <li>API Changes: <ul> <li>Added GlobalTimeShift option </ul> </ul> <a name='v8.95'><b>June 16, 2012 - Version 8.95</b></a> <ul> <li>Added a few new Sony PictureEffect values <li>Added a new Olympus lens type (thanks Niels Kristian Bech Jensen) <li>Improved decoding of Canon IntelligentContrast <li>Improved user-defined lens logic to attempt to choose the best matching user-defined lens if more than one is possible </ul> <a name='v8.94'><b>June 9, 2012 - Version 8.94</b></a> <ul> <li>Added ability to read/write IPTC as a block <li>Added a few Nikon LensID's (thanks Mike Pollock and Robert Rottmerhusen) <li>Added a new Olympus LensType (thanks Brad Grier) <li>Added new values for a few Olympus tags <li>Decode more Sony tags (thanks Jos Roost and Igal Milchtaich) <li>Decode Canon IntelligentContrast and add a new CanonModelID <li>Changed names of Canon Sort/LongFocal tags to Min/MaxFocalLength </ul> <a name='v8.93'><b>May 26, 2012 - Version 8.93</b></a> <ul> <li>Added some new Nikon RetouchHistory values <li>Added a couple of new Pentax LensType values <li>Added some new Olympus MagicFilter and LensType values <li>Added a new CanonModelID <li>Decode more Sony tags (thanks Jos Roost) <li>Decode some MakerNote information in Olympus E-M5 MOV videos <li>Decode a couple more Canon tags <li>Patched to overcome formatting problems in Samsung NX200 JPEG maker notes </ul> <a name='v8.92'><b>May 12, 2012 - Version 8.92</b></a> <ul> <li>Added read support for PCD (Kodak Photo CD Image Pac) files <li>Added Geotag support for Winplus Beacon text-format GPS log files <li>Added support for Leica X2 MakeNotes <li>Added NewGUID tag <li>Decode Panasonic ManometerPressure tag (thanks Christoph Mitterer) <li>Decode more Sony tags (thanks Jos Roost) <li>Changed a few Canon-mount Tokina lens model names for consistency </ul> <a name='v8.91'><b>May 5, 2012 - Version 8.91</b></a> <ul> <li>Added -progress option <li>Added support for XMP fpv namespace <li>Added a new Canon EasyMode value and fixed an incorrect one <li>Added a couple of new Canon LensTypes <li>Decode a number of new tags for the Canon 1DX and 5DmkIII <li>Improved the names of a few Sony tags (thanks Jos Roost) <li>Fixed -sep option to apply to interpolated tag values in a string when copying </ul> <a name='v8.90'><b>Apr. 28, 2012 - Version 8.90</b></a> <span class=grn>(production release)</span> <ul> <li>Added ability to fix double-UTF-encoded embedded XMP <li>Added a warning for invalid XMP <li>Added a new Minolta/Sony LensType (thanks Matthias) <li>Added a new values for some Canon tags <li>Decode ColorBalance information for a few more Nikon models <li>Ignore trailing whitespace when writing converted values <li>Enhanced the -z option to avoid writing the 2424 bytes of padding in XMP <li>Improved decoding of some Sony MakerNotes tags (thanks Jos Roost) <li>Improved "best guess" for fixing corrupted makernote offsets of some Sony models </ul> <a name='v8.89'><b>Apr. 21, 2012 - Version 8.89</b></a> <ul> <li>Added new Nikon and Ricoh LensID's <li>Added a new Olympus CameraType <li>Added new Canon LensType, EasyMode and CanonModelID values <li>Added new Pentax PictureMode and PentaxModelID values <li>Added support for IDimager XMP tags <li>Added a number of new XMP-crs tags used by LR4 <li>Decode a few more QuickTime tags <li>More improvements decoding Minolta/Sony CameraSettings (thanks Jos Roost) <li>Enhanced -ext option to allow files with any extension to be processed <li>Increased maximum number of SubIFD's to accommodate some DNG 1.4 images <li>Lowered priority of JPEG APP12 PictureInfo tags when reading <li>Created mechanism to allow self-referential XMP structures </ul> <a name='v8.88'><b>Apr. 15, 2012 - Version 8.88</b></a> <ul> <li>Added a new Canon LensType (thanks Gerald Erdmann) <li>Decode a number of new Olympus tags and values <li>Decode a few more QuickTime tags <li>Many more improvements and additions to Sony decoding (thanks Jos Roost) <li>Changed Ricoh InternalSerialNumber to also convert numerical value <li>Removed the ability to create IFD1 in TIFF-format images (you shouldn't really do this anyway) <li>Fixed incorrect IFD number in some error messages when writing </ul> <a name='v8.87'><b>Apr. 9, 2012 - Version 8.87</b></a> <ul> <li>Added a new PentaxModelID <li>Added new values for some Panasonic tags <li>Added a couple of new Canon LensTypes <li>Decode a few more Sony tags and values (thanks Jos Roost) <li>Decode more CanonVRD tags <li>Decode makernotes from Pentax WG-2 GPS MOV videos <li>Changed Panasonic AdvancedSceneMode to a Composite tag <li>Fixed problem introduced in 8.70 where excluding groups from deletion didn't work when copying back tags in the same command <li>Fixed problem repairing incorrect makernotes offsets in JPEG images from Sony SLT and NEX cameras </ul> <a name='v8.86'><b>Apr. 3, 2012 - Version 8.86</b></a> <ul> <li>Added a few new values for some Panasonic tags <li>Added a new CanonModelID and a new Canon LensType <li>Added a new Nikon LensID <li>Decode more Sony CameraSettings3 information (thanks Jos Roost) <li>Decode another Canon 5D tag <li>Decode some new CanonVRD DLO tags <li>Changed decoding of CanonVRD VRDVersion tag <li>Changed formatting of a Pentax LensType for consistency with other lenses <li>Patched decoding of Reconyx:DateTimeOriginal to accomodate values written with an incorrect byte order by some models </ul> <a name='v8.85'><b>Mar. 25, 2012 - Version 8.85</b></a> <span class=grn>(production release)</span> <ul> <li>Added a couple more Olympus CameraType values <li>Added two new Pentax LensType's and a PentaxModelID <li>Decode a number of new Sony CameraSettings3 tags (thanks Jos Roost) <li>Decode a few new Pentax K-01 tags <li>Decode new custom functions of the Canon 5D Mark III <li>Recognize another non-standard APP1 XMP header <li>Increased unrolled depth of XMP-mwg-kw:HierarchicalKeywords from 4 to 6 <li>Extended "-charset exif=CHARSET" to also apply to EXIF UserComment when stored as ASCII <li>Changed name of Olympus MaxApertureAtCurrentFocal to to MaxAperture <li>Patched to avoid possibility of unnecessary "references previous directory" warning when the length of one directory is zero </ul> <a name='v8.84'><b>Mar. 17, 2012 - Version 8.84</b></a> <ul> <li>Added a few more SonyModelID's (thanks Jos Roost) <li>Added a new CanonModelID and a number of new Canon LensType values <li>Added a new Minolta/Sony LensType <li>Decode CameraTemperature for a number of new Canon PowerShot models <li>Decode information from PANA atom of Panasonic DMC-FT20 MP4 videos <li>Decode a bit more of the Casio MakerNotes <li>Improved Polish translations for EXIF information (thanks Kacper Perschke) <li>Changed some warning messages for invalid IFD entries <li>Patched to allow writing of Sony MakerNotes containing invalid IFD entries </ul> <a name='v8.83'><b>Mar. 13, 2012 - Version 8.83</b></a> <ul> <li>Added a new SonyModelID and a new Nikon LensID (thanks Gregg Lee and Jos Roost) <li>Added Finnish translations (thanks Jens Duttke and Jarkko M&auml;kineva) <li>Fixed the Composite:LensID problem properly this time (with any luck) </ul> <a name='v8.82'><b>Mar. 13, 2012 - Version 8.82</b></a> <ul> <li>Added ability to extract information from PostScript-type DFONT files <li>Added a new Minolta/Sony LensType (thanks Jos Roost) <li>Improved geotagging of orientation information when extrapolating past end of track <li>Changed behaviour while copying information to allow flattened tags to be specified without the need to use the --struct option <li>Removed unnecessary warning when writing PreviewImage to Ricoh DNG file <li>Fixed problem introduced in 8.81 which prevented generation of the Composite LensID for Nikon images when duplicate tags were disabled <li>API Changes: <ul> <li>Added NoFlat option to SetNewValues() <li>Changed Struct option to allow copying of both structured and flattened tags at the same time </ul> </ul> <a name='v8.81'><b>Mar. 9, 2012 - Version 8.81</b></a> <ul> <li>Added some new Canon, Pentax and Sony/Minolta LensType's <li>Added a few new FujiFilm PictureMode values (thanks Kai Lappalainen) <li>Added some new FujiFilm FilmMode values <li>Added a couple of new CanonModelID values <li>Added local timezone message to -v2 geotagging output <li>Made all Pentax LensType tags writable <li>Improved Composite LensID logic to use Sony LensSpec value if available <li>Fixed problem opening files with path names that begin with "&amp;" </ul> <a name='v8.80'><b>Feb. 25, 2012 - Version 8.80</b></a> <ul> <li>Added a new Olympus CameraType <li>Improved geotagging to tolerate out-of-sequence and missing NMEA sentences <li>Increased the maximum XMP tag ID length to 250 characters to allow very deep user-defined structure hierarchies </ul> <a name='v8.79'><b>Feb. 20, 2012 - Version 8.79</b></a> <ul> <li>Avoid deleting the JPEG APP14 Adobe segment when deleting all metadata <li>Added ability to read/write/create JPEG APP14 Adobe segment as a block <li>Added some new CanonModelID values <li>Added another Panasonic WhiteBalance value (thanks PeterK) <li>Decode Panasonic ColorTempKelvin tag <li>Decode information from Qualcomm APP7 JPEG segment <li>Extract PreviewImage for a few more uncommon camera models <li>Strengthened MP3 file recognition to avoid mis-identification of some files <li>Fixed problems reading "sfnt" resource in some DFONT files <li>Fixed problems writing some LensType values for 3rd-party lenses </ul> <a name='v8.78'><b>Feb. 11, 2012 - Version 8.78</b></a> <ul> <li>Added basic read support for a few obscure audio formats (LA, OFR, PAC, WV) <li>Added a couple more Canon LensType values <li>Decode some new Kodak tags in MP4 videos <li>Patched timezone problem on MirBSD due to leap-second "feature" of this OS <li>Fixed problem converting Adobe XMP LensID's for Pentax lenses <li>Fixed runtime warning due to conflict with some Vorbis tag ID's <li>Fixed problem which could result in duplicate columns in -csv output when used with -f and the "#" suffix on a tag name <li>API Changes: <ul> <li>Added XMPAutoConv option </ul> </ul> <a name='v8.77'><b>Jan. 27, 2012 - Version 8.77</b></a> <span class=grn>(production release)</span> <ul> <li>Added some new and updated some existing Sony/Minolta LensType values <li>Added two missing Minolta Teleconverter values <li>Added a new Canon LensType <li>Decode Olympus ArtFilterEffect <li>Enhanced -c (CoordFormat) option to allow signed coordinate output <li>Changed -sort option to always sort -json and -X outputs by tag name <li>Minor change to an Olympus LensType name (thanks Niels Kristian Bech Jensen) <li>Fixed problem geotagging orientation information from PTNTHPR sentence <li>Fixed decoding of negative Pentax EffectiveLV values <li>Fixed typo in an Olympus LensType </ul> <a name='v8.76'><b>Jan. 18, 2012 - Version 8.76</b></a> <ul> <li>Added -sort option to sort output by tag name or description <li>Added support for FujiFilm RAF version 1.03 images and downgraded RAF version error to a warning <li>Added a number of new Minolta/Sony LensType's <li>Added a new CanonModelID <li>Decode FocusPosition for Sony A850 and calculate Composite FocusDistance <li>Decode IFD found in some Samsung Type1 maker notes <li>Patched Olympus test to fix failure on some platforms <li>Patched -json output to filter out invalid UTF-8 characters <li>API Changes: <ul> <li>Added Sort2 option and 'Descr' setting for Sort option <li>Added secondary sort option to GetFoundTags() and GetTagList() <li>Changed name of Sort 'Alpha' setting to 'Tag' (but 'Alpha' still works for backward compatibility) </ul> </ul> <a name='v8.75'><b>Jan. 8, 2012 - Version 8.75</b></a> <span class=grn>(production release)</span> <ul> <li>Added -php output option (thanks Marcel) <li>Decode another AIFF tag and handle character encoding in AIFF text values <li>Recognize PHP files <li>Enhanced Geotag feature to write speed/track from NMEA GPRMC sentence, and orientation information from Honeywell NMEA PTNTHPR sentence <li>Changed verbose XMP output to print raw values <li>Lowered default priority of "avoided" tags so they don't override other same-named tags when reading with duplicate tags disabled <li>Patched tests to ignore MirBSD leap-second unconformity <li>Patched ZIP module to avoid failed tests with Perl 5.6.2 on GNU/Linux 2.6 <li>Fixed problem reading xref table of some PDF files created by PScript5.dll <li>Fixed problem reading RicohSubdir from AVI videos of the GR Digital 4 </ul> <a name='v8.74'><b>Dec. 28, 2011 - Version 8.74</b></a> <ul> <li>Added read/write support for Hasselblad FFF images <li>Added iptcCore.args convenience file to the distribution package <li>Catch CONT signal to allow calling applications to trigger an immediate response (avoiding a delay of up to 0.01 sec) after writing arguments to a -stay_open ARGFILE <li>Protect against some infinite loops that could be created when using some of the advanced exiftool options <li>Improved decoding of Samsung PictureWizard (thanks Pascal de Bruijn) <li>Improved handling of bad IFD entries in -htmlDump output <li>Changed print conversion of EXIF:FNumber and XMP:FNumber to use 2 decimal digits for values less than 1.0, and disable conversion for invalid values <li>Tightened up the -stay_open feature to fix a few potential problems <li>Fixed bug using -csv+= or -json+= for non-list-type tags <li>Fixed problem deleting unknown makernotes as a block <li>API Changes: <ul> <li>Enhanced SetNewValue() AddValue option to allow this option to be ignored for non-list tags </ul> </ul> <a name='v8.73'><b>Dec. 16, 2011 - Version 8.73</b></a> <ul> <li>Added read support for OpenEXR and Radiance RGBE images <li>Added a couple of new Nikon LensID's (thanks Robert Rottmerhusen) <li>Added a new PentaxModelID <li>Added a new Olympus CameraType <li>Created new FileSequence tag for use in batch processing <li>Decode maker notes from Pentax Optio RZ18 AVI videos <li>Tolerate unrecognized IPTC records (but still issue warning) <li>Changed ScaleFactor35efl calculation to also use Pentax SensorSize <li>Minor changes to two Samsung lens names (thanks Pascal de Bruijn) </ul> <a name='v8.72'><b>Dec. 8, 2011 - Version 8.72</b></a> <ul> <li>Added support for reading XMP from INX files <li>Added PDF HasXFA tag <li>Added a new XMP Colorants field (not in 2010 XMP specification) <li>Decode Casio BestShotMode for yet more cameras <li>Decode a few more Casio ImageStabilization values <li>Decode a few more Olympus tags and added conversion for CameraType <li>Protect against reading insanely large XMP (> 300 MB) in INDD files <li>Extract large (> 64 kB) unknown XMP tags as binary data <li>Reduced memory requirements for XMP processing (by 1/10) <li>Fixed another place where empty XMP structures could hide (in lists) </ul> <a name='v8.71'><b>Nov. 19, 2011 - Version 8.71</b></a> <ul> <li>Added two new Olympus LensType values (thanks Martin Hilbers) <li>Avoid recreating duplicate groups when deleting whole groups and adding back tags in the same step <li>Fixed problem where the QuickTime -charset option didn't work for some tags <li>Fixed bug introduced in 8.69 which could cause excessive memory usage when reading QuickTime videos with the -u option <li>Fixed problem where existing empty XMP structure couldn't be deleted or overwritten as a structured tag </ul> <a name='v8.70'><b>Nov. 15, 2011 - Version 8.70</b></a> <ul> <li>Compatibility Notice: Changed order of operations when batch processing with -tagsFromFile option to be consistent with non-batch mode <li>Added -listItem option <li>Added read support for IDML files <li>Added a new Canon LensType (thanks Jon Charnas) <li>Added a couple of new Samsung LensType's (thanks Tae-Sun Park) <li>Added support for another DigiKam XMP tag <li>Decode a couple more ID3 tags <li>Decode Casio BestShotMode for more cameras <li>Improved decoding of Casio AFMode <li>Extract unknown FLAC blocks as binary data <li>Changed ITC:ImageType to make "numerical" value more friendly <li>Changed priority of two unreliable Samsung tags <li>Fixed bug where ExifTool could produce improperly formatted XMP when writing structure elements to a previously empty XMP structure (the empty XMP structure was not being properly deleted). Affected XMP may be repaired by re-writing any element of the structure with this version of ExifTool <li>API Changes: <ul> <li>Added ProtectSaved option to SetNewValue() and return save count from SaveNewValues() </ul> </ul> <a name='v8.69'><b>Nov. 9, 2011 - Version 8.69</b></a> <ul> <li>IMPORTANT: Fixed bug which could corrupt GIF images when writing a Comment to a GIF image containing XMP metadata <li>Added ability to read/write ICC_Profile in GIF images <li>Added ability to specify internal encoding of EXIF "ASCII" strings and QuickTime strings <li>Added a new DigiKam XMP tag <li>Documented -echo option (has been an undocumented feature since 6.86) <li>Decode a number of new Sony tags <li>Decode a few new Pentax tags and added a few new values <li>Decode a few new QuickTime and ID3 tags <li>Decode Casio BestShotMode for a number of models <li>Improved validity checking of ICC_Profile segments in JPEG image <li>Tolerate UTF-8 byte order mark (BOM) in input CSV and JSON files <li>No longer trim trailing spaces from arguments in -@ argfiles <li>Upgraded Windows executable version to use PAR 1.002 <li>Changed priority of the Sony DynamicRangeOptimizer tags <li>Changed MWG feature to use UTF8 encoding for EXIF strings by default <li>Changed the -b option to avoid loading large binary values for tags that have been excluded with the -x option or --TAG <li>Changed Canon AFMicroAdjActive to AFMicroAdjMode and improved decoding <li>Fixed problem where the PreviewImage could be lost when writing to images from some newer Sony cameras <li>Fixed problem reporting duplicate information when -if used with -TAG# <li>Fixed incorrectly written XMP-tiff:YCbCrSubSampling tag <li>Fixed problem opening files with names beginning and/or ending with some characters such as SPACE, '&gt;', '&lt;' and '|'; however file names ending with '|' are still not allowed <li>API Changes: <ul> <li>Added CharsetEXIF and CharsetQuickTime options </ul> </ul> <a name='v8.68'><b>Oct. 21, 2011 - Version 8.68</b></a> <ul> <li>Added a new CanonModelID and a new SonyModelID <li>Added new Canon and Pentax LensType's <li>Decode more makernote information from Nikon MOV videos <li>Improved decoding of Sony LensSpec and enabled writing of this tag <li>Overhauled Minolta/Sony LensType list for consistency with official Sony lens names and removed a couple of anomalous entries (thanks Jos Roost) <li>Fixed problem with negative temperatures in Reconyx makernotes <li>Fixed bug which could cause runtime warnings when -f used with -X and -l <li>Fixed some minor problems when using -X with MWG option <li>Fixed issue where some missing tags could be printed when -f option was used in combination with wildcard tag names </ul> <a name='v8.67'><b>Oct. 13, 2011 - Version 8.67</b></a> <ul> <li>Added a new Canon LensType (thanks Norbert Wasser) <li>Decode tags from FujiIFD in HS10 and X100 RAF images <li>Decode LocationInfo tags from Nikon maker notes <li>Decode GPS tags from Nikon MOV videos <li>Decode information from Microsoft "Xtra" atom in QuickTime files <li>Decode Sony LensSpec information (thanks Jos Roost) <li>Use more specific MakerNotes names in warning messages and verbose output <li>Updated Canon CustomFunctions for the EOS 600D and 1100D <li>Improved handling of some corrupted RIFF files <li>Improved decoding of Samsung manual lens types (thanks Pascal de Bruijn) <li>Changed "No writable tags found" warning to "No writable tags set from" <li>Fixed problem handling resource forks in newer versions of OS X <li>Fixed problem writing XMP as a block to Jpeg2000 images <li>Fixed problem which could cause XMP and IPTC to be ignored when using MWG feature with TIFF images and performing multiple operations in a single command </ul> <a name='v8.66'><b>Oct. 3, 2011 - Version 8.66</b></a> <ul> <li>Added the ability to use "$GROUP:all" in -if and -p expressions (evaluates to "1" if any tag exists in the specified group, or "0" otherwise) <li>Added a new Sony/Minolta LensType (thanks Florian Knorn) <li>Added list of recommended modules to Perl installation <li>Decode ColorBalance information for a few new Nikon models <li>Updated Canon CustomFunctions for the EOS 600D and 1100D <li>Fixed problem writing "now" to MWG date/time tags </ul> <a name='v8.65'><b>Sept. 24, 2011 - Version 8.65</b></a> <span class=grn>(production release)</span> <ul> <li>Added a few new CanonModelID's <li>Added a new Sony/Minolta LensType <li>Added a new Canon LensType (thanks Klaus Reinfeld) <li>Added a number of new Olympus ArtFilter/MagicFilter values <li>Included new .args files in distribution: exif2iptc.args and iptc2exif.args <li>Enhanced writing of date/time tags to recognize "now" for the current time <li>Improved decoding of H264 Gain <li>Minor improvement to -htmlDump for some invalid IFD entries <li>Allow PostScript date/time tags to be written without the -n option <li>Allow NikonCapture:ExposureAdj2 to be written without the -n option <li>Fixed problem introduced in version 8.62 where DateTimeOriginal in IFD0 of NEF images was no longer updated when shifting times <li>Fixed problem where keywords could be duplicated when exporting to XMP while using the MWG module <li>Fixed problem reading PDF images with extra whitespace before xref table <li>Fixed format problem in CSV output for filenames containing a comma or quote <li>Fixed problem reading concatenated AVI videos </ul> <a name='v8.64'><b>Sept. 10, 2011 - Version 8.64</b></a> <ul> <li>Added 2 new ACDSee XMP tags (thanks Hannes Leubbers) <li>Added a new Sony FileFormat value <li>Added a new CanonModelID <li>Added a few new Pentax DigitalFilter and ImageTone values <li>Enhanced -execute option to allow a command ID number to be added <li>Enhanced -csv and -json import features to also key on canonical SourceFile path (requires Cwd module) <li>Improved Composite LensID logic for some Sony cameras <li>Fixed misleading error message when using -if option on file that doesn't exist <li>Fixed problems decoding a number of inconsistent tags in the Sigma SD1 maker notes </ul> <a name='v8.63'><b>Aug. 27, 2011 - Version 8.63</b></a> <ul> <li>Added support for a number of new Open Document file extensions <li>Added a few new CanonModelID and SonyModelID values <li>Added a new Ricoh GXR LensID <li>Added a new Sony/Minolta LensType (thanks Mladen Sever) <li>Added patch to read the improperly formatted DateTimeOriginal in AVI videos written by the Kodak Easyshare Sport camera <li>API Changes: <ul> <li>Added QuickTimeUTC option </ul> </ul> <a name='v8.62'><b>Aug. 21, 2011 - Version 8.62</b> - "JPEG2000 Update"</a> <ul> <li>Added read support for JPEG2000 codestream format (J2C) <li>Added a few new Nikon LensID's (thanks Robert Rottmerhusen) <li>Added a few new Pentax LensType's <li>Added a few new Sony/Minolta LensType's (thanks Wolfram for 2 of these) <li>Added two new Sony Teleconverter values (thanks Wolfram) <li>Decode a few more JPEG2000 UUID's written by Adobe JPEG2000 plugin <li>Decode additional JPEG2000 ColorSpecification information <li>Recognize a few more JPEG2000 file extensions <li>Updated some CanonModelID's <li>Tolerate extra comma at end of line in imported -csv files <li>Changed name of Kodak Type9 SerialNumber tag to UnknownNumber <li>Fixed bug which in rare situations could result in an erroneous "IFD pointer references previous IFD" warning <li>Fixed another memory leak when writing and removed circular references from ExifTool object to prevent future bugs like this <li>Fixed problem in Windows where values in the -X (XML) output containing CR+LF were converted to CR+CR+LF <li>Fixed superfluous warning which could occur when using += to decrement a numerical tag <li>Fixed an incorrectly spelt Pentax city name (thanks John Francis) </ul> <a name='v8.61'><b>July 16, 2011 - Version 8.61</b></a> <ul> <li>Added the ability to increment/decrement tags with numerical values using += <li>Added support for Extensis Portfolio XMP tags plus a number of non-standard and/or undocumented XMP-xmp and XMP-xmpMM tags <li>Added read support for Microsoft Compiled HTML (CHM) format <li>Added read support for Ogg Video (OGV) files <li>Added new LensType values for Pentax (thanks Heike Herrmann), Sony/Minolta (thanks Fabio Suprani and Florian Knorn), Nikon (thanks Jens Kriese), Olympus and Sigma cameras <li>Added a new QuickTime VendorID <li>Recognize DEX (Dalvik Executable) files <li>Identify Windows 64-bit EXE/DLL files and relax EXE validation <li>Validate date/time values when reading NMEA GPS log files <li>Changed decoding of CFAPattern to return a string of numbers with -n option <li>Extract all unknown makernote blocks as undef, regardless of actual format <li>Improved print conversion of Pentax ShakeReduction <li>Fixed problem processing some Ogg files with multiple streams <li>Fixed incorrect namespace URI for stArea (used by MWG 2.0 regions) <li>Fixed problem with spaces in -geotag path when using wildcards <li>Fixed problem writing PDF:Keywords list items individually if they contain special characters <li>API Changes: <ul> <li>Enhanced SetNewValue() to allow increment/decrement of numerical tags </ul> </ul> <a name='v8.60'><b>June 25, 2011 - Version 8.60</b></a> <span class=grn>(production release)</span> <ul> <li>Added Composite Flash tag to facilitate copying of flash information between XMP and EXIF <li>Added new Pentax and Canon LensType values and fixed a Pentax lens name <li>Added a few new Leica LensType's (thanks Olaf Ulrich) <li>Added a new PentaxModelID <li>Enhanced GPSDateStamp conversion to tolerate null separators (Casio EX-H20G) <li>Made DNG LinearizationCurve and Nikon ContrastCurve writable but protected <li>Renamed Nikon LinearizationTable to NEFLinearizationTable and made writable but protected <li>Removed Leica M8 FrameSelector tag since it seems to have evolved into an extension of the LensType tag for newer lenses <li>Fixed problem with order of operations when using multiple -if options </ul> <a name='v8.59'><b>June 11, 2011 - Version 8.59</b></a> <ul> <li>Added new Composite:LensID derived from XMP-aux:LensID <li>Added new PentaxModelID and CanonModelID values <li>Added a new Pentax LensType (thanks Artur) <li>Decode maker notes in Pentax Optio S1 AVI videos <li>Extract PreviewWMF from DOCX files <li>Recognize WMF images <li>Fixed decoding of CanonVRD WBAdjRGBLevels and renamed to WBAdjRGGBLevels </ul> <a name='v8.58'><b>June 2, 2011 - Version 8.58</b></a> <ul> <li>Decode a number of CameraInfo tags for the Canon EOS 600D and 1100D <li>Improved speed by a factor of 2 when reading M2TS videos <li>Fixed memory leak with -stay_open feature when writing </ul> <a name='v8.57'><b>May 26, 2011 - Version 8.57</b></a> <ul> <li>Added a couple of new Canon LensType values <li>Added a few new Nikon LensID's (thanks Robert Rottmerhusen) <li>Added format string to -v2 output for IPTC tags <li>Added extra logic to avoid misidentifying unknown IFD-style maker notes <li>Decode custom settings for Nikon D700 and D7000 <li>Fixed problem recognizing NikonCaptureData for ViewNX version 2.1.1 </ul> <a name='v8.56'><b>Apr. 16, 2011 - Version 8.56</b></a> <ul> <li>Added a new Canon LensType (thanks Rodolfo Borges) <li>Decode EXIF information in FujiFilm HS20EXR MOV videos <li>Decode NikonCaptureEditVersions when ExtractEmbedded option is used (previously called NikonCaptureHistory) <li>Decode another Samsung tag (thanks Tae-Sun Park) <li>Recognize CaptureOne ".newer" COS files <li>Reverted JSON output to pre-8.51 behaviour by removing '#' suffix from tag names when print conversion is disabled on a per-tag basis <li>Fixed bug introduced in 8.32 interpreting some expressions when copying tags </ul> <a name='v8.55'><b>Apr. 11, 2011 - Version 8.55</b></a> <ul> <li>Added write support for FujiFilm RAF version 0716 images <li>Added support for a number of new LR3 XMP tags (thanks Wolfgang Guelcker) <li>Decode some more Samsung tags (thanks Tae-Sun Park) <li>Improved handling of incorrectly formatted XMP <li>Recognize a few alternate PS and EPS file extensions (thanks Jeff Harmon) <li>Reverted a few Pentax macro lens names (less consistent, but at least they match the official Pentax names) <li>Fixed problem reading some XMP custom properties <li>Fixed minor problem in HtmlDump output for Canon MakerNotes footer </ul> <a name='v8.54'><b>Apr. 2, 2011 - Version 8.54</b></a> <ul> <li>Added a number of new values for various tags <li>Added a new Nikon LensID <li>Decode a number of encrypted Samsung SRW tags (thanks Tae-Sun Park) <li>Enhanced -s option so allow a number to be specified <li>Fixed problem reading some Casio EX-Z35 MakerNote values </ul> <a name='v8.53'><b>Mar. 27, 2011 - Version 8.53</b></a> <ul> <li>Added a new Olympus LensType <li>Added a new Nikon LensID <li>Added a new PentaxModelID value <li>Decode new Pentax MakerNotes format of Optio WG-1 GPS <li>Decode Casio, Ricoh and Sanyo face detection information (thanks Jeffrey Friedl and Emilio for samples) <li>Decode FujiFilm face recognition information (thanks Jeffrey Friedl) <li>Decode a new FujiFilm tag for GE models <li>Allow writing GPSLatitudeRef/GPSLongitudeRef with a signed number <li>Return proper FileType for M4P audio files <li>Combined Canon FaceDetectFrameWidth/FaceDetectFrameHeight tags into FaceDetectFrameSize for consistency with other makes <li>API Changes: <ul> <li>Fixed problem when specifying family 1 group in call to SetNewValue() when tags were previously extracted with ExtractInfo() </ul> </ul> <a name='v8.52'><b>Mar. 20, 2011 - Version 8.52</b></a> <ul> <li>Added -listr option and mechanism to recognize some unsupported file types <li>Added read support for VSD (Microsoft Visio Drawing) files <li>Added a new Pentax LensType and improved consistency of macro lens names <li>Added another CanonModelID <li>Calculate Duration for M2TS (AVCHD) videos <li>Decode a new FujiFilm tag <li>Recognize .TS extension <li>Recognize FotoStation IPTC record 240 <li>Attempt to better identify FPX-format MSOffice documents with incorrect file extensions <li>Fixed bug applying time shift to Nikon PowerUpTime <li>API Changes: <ul> <li>Enhanced GetNewValues() to allow group name to be specified <li>Allow description flag to be set to '0' when calling GetFileType() to return types of recognized-yet-unsupported files </ul> </ul> <a name='v8.51'><b>Mar. 12, 2011 - Version 8.51</b></a> <ul> <li>Added -csv option for import/export of CSV database files <li>Added ability to import JSON files <li>Added read support for APP1 "Ocad" segment <li>Added a new Nikon LensID (thanks Robert Rottmerhusen) <li>Decode more Reconyx MakerNotes tags (thanks Robert Hass of Reconyx!) <li>Report the number of encryption bits in the PDF:Encryption tag value <li>Allow empty group name when specifying a tag <li>Improved decoding of Olympus ArtFilter and MagicFilter tags <li>Improved exception handling to continue with next -execute command after aborting a command due to a serious error <li>Fixed problem reading indexed PGF images </ul> <a name='v8.50'><b>Mar. 1, 2011 - Version 8.50</b></a> <span class=grn>(production release)</span> <ul> <li>Added Composite tags to convert QuickTime GPS information <li>Added a couple new Sony PMP Orientation values (thanks Mike Battilana) <li>Added a couple of new Nikon LensID's (thanks Rolando Ruzic) <li>Added a new Canon LensType (thanks Gerald Kapounek) <li>Decode new Nikon, Olympus, Pentax and Sony face detection tags (thanks Jeffrey Friedl) <li>Decode Ricoh FirmwareRevision tags <li>Allow GPSLatitudeRef and GPSLongitudeRef to be written with a GPS coordinate containing a N/S/E/W designator <li>Removed Canon20D shortcut and changed Canon shortcut <li>Removed LEGRIA/VIXIA/iVIS from CanonModelID names <li>Renumbered Canon FacePosition tags to start at Face1Position </ul> <a name='v8.49'><b>Feb. 12, 2011 - Version 8.49</b></a> <ul> <li>Added a number of new values for various Canon tags <li>Added a new Pentax LensType <li>Added ability to write Nikon PowerUpTime tag <li>Added a number of MachO CPUSubtype's and improved handling of 64-bit flag <li>Decode ColorData for the Canon EOS 600D and 1100D <li>Decode a few new Sony tags <li>Set document number for FlashPix tags extracted from embedded documents <li>Attempted to patch OS X 10.6 quirk where FileModifyDate may not be preserved for some files when -P is combined with -overwrite_original_in_place </ul> <a name='v8.48'><b>Feb. 3, 2011 - Version 8.48</b></a> <ul> <li>Added a new Canon LensType value <li>Changed order of stored information when rewriting existing IPTC tags (to make the order of items in list-type tags consistent with XMP when deleting and adding back values in the same command) <li>Fixed problems with format of binary data in lists for some output options </ul> <a name='v8.47'><b>Jan. 29, 2011 - Version 8.47</b></a> <ul> <li>Added -args option <li>Added read support for PGF (Progressive Graphics File) images <li>Added write support for Phase One IIQ images <li>Added ability to write XMP-xmpMM:Pantry <li>Added print conversions for a number of closed-choice XMP properties <li>Added some new CanonModelID's <li>Included new argument files in distribution: pdf2xmp.args and xmp2pdf.args <li>Avoid copying TIFF trailers containing nothing but zeros when rewriting <li>Handle binary data in serialized structure output <li>Moved BMP tags to the File group <li>Fixed bug reading/writing some IPTC binary data tags <li>Fixed problem copying XMP:Thumbnails structure <li>Fixed conversion of MXF:ByteOrder value <li>Fixed potential "Undefined subroutine ConvertStruct" crash bug <li>API Changes: <ul> <li>Fixed bug introduced in 8.46 when calling GetValue(xxx,'Raw') </ul> </ul> <a name='v8.46'><b>Jan. 22, 2011 - Version 8.46</b></a> <ul> <li>Simpified definition of user-defined XMP structures: flattened tags are now automatically generated, and UserDefined::xmpStruct is no longer needed (but backward compatibility is maintained with the old-style definitions) <li>Added ability to handle multi-dimensional arrays in structured output <li>Added a new Canon LensType (thanks Jean-Michel Dubois) <li>Added some new XMP-xmpMM tags <li>Enabled writing of a number of XMP-crs tags <li>Decode Reconyx TriggerMode tag <li>Relaxed structure validation to allow a structure to be written even if there were errors with some fields <li>Patched problem with formatting of very large numbers in JSON (-j) output <li>Fixed a few problems reading and writing structured information <li>Fixed bug which could cause hang with some user-defined tag definitions </ul> <a name='v8.45'><b>Jan. 12, 2011 - Version 8.45</b></a> <ul> <li>Fixed a couple of minor bugs with the new -struct option </ul> <a name='v8.44'><b>Jan. 12, 2011 - Version 8.44</b> - "Structured XMP"</a> <ul> <li>Added ability to specify <a href="struct.html">XMP structures</a> when writing (yet another Christmas vacation spent adding a significant new feature to ExifTool) <li>Added support for new XMP tags in the MWG 2.0 specification <li>Added read support for DV video files <li>Added support for Reconyx maker notes <li>Added option to overwrite existing text output files (-w!) <li>Added ability to ignore symbolic directory links with "-i SYMLINKS" <li>Added support for Sony Ericsson XMP cell phone location tags <li>Added a few new CanonModelID's <li>Added a new Minolta/Sony LensType (thanks Jean-Michel Dubois) <li>Added a new Olympus LensType <li>Added print conversion for all Bitrate tags <li>Decode a couple new RIFF tags <li>Decode CameraTemperature for a few new Canon PowerShot models <li>Improved -struct option to work with all text output formats <li>Changed behaviour of XMP lang-alt lists to conform to the July 2010 specification (x-default item is no longer mandatory) <li>Renamed AudioSampleBits tags to AudioBitsPerSample <li>Renamed XMP-crs:Temperature tag to ColorTemperature <li>Minor change to behaviour when replacing values in XMP lists: new list items are now all inserted in place of the first deleted item (previously new items were inserted one-by-one into the holes left by deleted items) <li>Fixed bug writing alternate languages for XMP-iptcExt:ArtworkTitle tag <li>Fixed problem where console echo was disabled when using -k option from a bash script <li>Attempted to patch problem of -b option affecting newline sequence for subsequent -execute commands in Windows <li>API Changes: <ul> <li>SetNewValue() now accepts structured values (as HASH references or serialized strings) <li>Struct option now has 3 settings (undef, 0 and 1) </ul> </ul> <a name='v8.43'><b>Dec. 21, 2010 - Version 8.43</b></a> <ul> <li>Added read support for MXF (Material Exchange Format) files <li>Added support for GE (General Imaging) maker notes <li>Added a couple of new Pentax LensType's <li>Added a couple of new CanonModelID's <li>Added a few more values to Casio UnknownMode <li>Recognize 3GPP and 3GP2 file extensions <li>Improved handling of character encoding errors <li>Changed Duration format to always include hours for times &gt; 1 minute <li>Fixed minor quirk in HtmlDump output <li>Fixed race condition with -stay_open when reading options requiring additional arguments from the argfile </ul> <a name='v8.42'><b>Dec. 11, 2010 - Version 8.42</b></a> <ul> <li>Added a couple more Samsung LensType values <li>Added a few new Canon EasyMode values and a Canon LensType value <li>Added a new PentaxModelID <li>Decode some new H264 tags (thanks Dave Nicholson) <li>Decode JUNK chunk in Pentax RS1000 AVI videos <li>Flush console output before "{ready}" message when using -stay_open <li>Improved decoding of some Canon and Pentax tags (thanks Dave Nicholson) <li>Fixed problem copying makernotes from Nikon NRW image to JPEG <li>Fixed incorrect decoding of some AEInfo tags for newer Pentax DSLR's </ul> <a name='v8.41'><b>Dec. 3, 2010 - Version 8.41</b></a> <ul> <li>Added a new PentaxModelID <li>Added a few new values for some Canon tags <li>Added some non-standard values to a few XMP-exif tags <li>Decode a new Ricoh tag and added a LensID <li>Decode more Pentax K-5 tags and values <li>Improved decoding of Battery tags for various Pentax DSLR models <li>Fixed bug where time could be wrong by up to 2 seconds when shifting multiple date/time values containing fractional seconds </ul> <a name='v8.40'><b>Nov. 21, 2010 - Version 8.40</b></a> <span class=grn>(production release)</span> <ul> <li>Added -restore_original and -delete_original options <li>Added new Canon, Pentax and Sony LensType values <li>Decode more Pentax K-5 tags <li>Decode a number of new tags in Nikon D7000 MOV videos <li>Decode FocusDistance tags for the Canon EOS 60D <li>Decode a few new Panasonic tags <li>Decode a few maker note tags from Flip Video MP4 files <li>Extract PDF PageMode and PageLayout tags <li>Changed family 2 group names for a number of PDF tags <li>Changed Canon LensType strings for a few lenses with updated models <li>Patched problem reading GPX files which contain no newlines </ul> <a name='v8.39'><b>Nov. 12, 2010 - Version 8.39</b></a> <ul> <li>Added read support for RAR archive files <li>Added warning for non-standard XMP APP1 header in JPEG images <li>Added a new Canon LensType (thanks Rolando Ruzic) <li>Decode more Olympus WAV tags <li>Decode a few more PDF document property tags <li>Decode a new Canon tag <li>Extract firmware revision letter with Nikon FirmwareVersion <li>Improved decoding of some Pentax tags <li>Changed names of a couple of Pentax tags <li>Changed name of ASF:FileSize to FileLength to avoid conflict <li>Fixed problem creating output files on network drives in Windows <li>Fixed bug where MWG module wasn't loaded automatically when -execute was used </ul> <a name='v8.38'><b>Nov. 7, 2010 - Version 8.38</b></a> <ul> <li>Added support for Nikon D3 firmware 2.02 <li>Decode many new Pentax K-5 tags and improved decoding of others <li>Decode a few more Nikon D3 and D3S settings (thanks Warren Hatch) <li>Decode some new Olympus WAV tags (thanks Tomasz Kawecki) <li>Decode a few new Canon DPP 3.9.2 tags <li>Decode PDF digital signature permission information <li>Improved recognition of Adobe Illustrator PS-format AI files <li>Disable writing XMP to Adobe Illustrator version 8 and older EPS files </ul> <a name='v8.37'><b>Oct. 31, 2010 - Version 8.37</b></a> <ul> <li>Added ability to switch ARGFILE while -stay_open is active <li>Fixed a couple of bugs with the new -stay_open option <li>Fixed problem with -E option that caused double-escaping of Composite tags </ul> <a name='v8.36'><b>Oct. 30, 2010 - Version 8.36</b></a> <ul> <li>Added ability to read/write metadata in Sigma X3F images containing a JpgFromRaw (eg. all Sigma models except the SD9 and SD10) <li>Added -stay_open option to avoid startup delay when called from other applications <li>Added a new Pentax LensType (thanks Hubert Meier) <li>Decode a couple of new tags written by Sigma Photo Pro <li>Changed family 0 group name for SonyIDC tags to "MakerNotes" <li>Improved Composite:LensID to use LensModel if available when LensType is "Unknown" <li>Fixed problem extracting ThumbnailImage from some FujiFilm RAF images <li>Fixed problem calculating Red/BlueBalance for some newer Nikon models </ul> <a name='v8.35'><b>Oct. 23, 2010 - Version 8.35</b> - "PDF Encryption"</a> <ul> <li>Added support for PDF AES-128 and AES-256 encryption (requires Digest::SHA for AES-256 support) <li>Added -password option for processing password-protected PDF documents <li>Added write support for a couple more FujiFilm RAF versions <li>Added a number of new Olympus SceneMode values <li>Added a few new SonyModelID's <li>Added a new Nikon LensID (thanks marten) <li>Added a Canon LensType and fixed an incorrect one (thanks Andreas Huggel) <li>Decode a number of new Canon tags <li>Decode a few new Nikon D3S settings (thanks Warren Hatch) <li>Extract PDF UserAccess <li>Extract Olympus ZoomedPreviewImage <li>Updated decoding of Olympus AFPoint for recent E-models <li>Avoid writing mandatory IPTC tags unless another IPTC tag actually changes (eg. trying to delete a non-existent IPTC tag will no longer have the side effect of generating mandatory IPTC tags) <li>Improved language translations <li>Improved error message when trying to write a file with the wrong extension <li>Renamed a couple of Olympus tags <li>Fixed problem reading/writing PDF tags from some encrypted stream objects <li>API Changes: <ul> <li>Added Password option </ul> </ul> <a name='v8.34'><b>Oct. 7, 2010 - Version 8.34</b></a> <ul> <li>Added read support for XCF and WebP images and WebM videos <li>Added a couple of new PentaxModelID's <li>Decode a number of new Canon 60D MakerNotes tags (thanks Bogdan for LensSerialNumber) <li>Decode FrameCount from MakerNotes in Nikon MOV videos <li>Decode Ambience and some video tags from Canon <li>Decode more Canon EOS 1D Mark IV CameraInfo tags <li>Updated decoding of Pentax HighISONoiseReduction for newer models <li>Changed description of Canon SerialNumber tags <li>Fixed problem with extra comma in JSON output when -w option was used </ul> <a name='v8.33'><b>Oct. 3, 2010 - Version 8.33</b></a> <ul> <li>Added ability to specify numerator and denominator of rational values <li>Decode more Canon custom picture style settings (thanks Tom Kawecki) <li>Decode Samsung MP4 "TAGS" information from WP10 videos <li>Decode thumbnail image and maker notes from Canon S95 MOV videos <li>Decode Microsoft Photo 1.1 EXIF and XMP information <li>Fixed problem copying tags dynamically from files with read errors <li>Fixed problem setting FileName with a Windows UNC path (leading "\\") </ul> <a name='v8.32'><b>Sept. 25, 2010 - Version 8.32</b></a> <ul> <li>Added the ability to use wildcards ('?' and '*') in tag names when extracting or copying information <li>Added a number of new CanonModelID's <li>Decode a few more QuickTime tags and improved decoding of others <li>Decode UserDefPictureStyle tags for more Canon cameras (thanks Tom Kawecki) <li>Extract unknown text-based maker notes under new MakerNoteUnknownText tag <li>Tested writing of PDF 1.7 files and removed warning for this version <li>Identify Canon MakerNote footer in HtmlDump of DNG images <li>Updated MimeType for PSD, AVI, AIFF plus a number of raw file formats <li>Changed FileType for Adobe Illustrator (AI) files <li>Fixed "Can't handle XMP attribute 'rdf:xmlns'" error when writing some XMP </ul> <a name='v8.31'><b>Sept. 17, 2010 - Version 8.31</b> - "CRW+XMP"</a> <ul> <li>Added ability to read/write XMP inside CanonVRD, which finally provides a technique to write XMP in CRW images! (thanks Mike Kobzar for help testing) <li>Added a couple of new Canon LensType's and CanonModelID's <li>Added a number of new Nikon LensID's (thanks Robert Rottmerhusen) <li>Added a new Sony LensType (thanks Mladen Sever) <li>Treat 'eng' as a default language in ID3v2 information <li>Recognize AIT file extension (AI file) <li>Fixed problem where ExifTool could refuse to write PDF files containing XMP-pdf:PDFVersion information </ul> <a name='v8.30'><b>Sept. 11, 2010 - Version 8.30</b></a> <ul> <li>Added a couple of new Nikon LensID's (thanks Robert Rottmerhusen) <li>Added a couple more Sigma LensType values <li>Added a few more tag values for the new Sony SLT-A33, SLT-A55V and DSLR-A560 <li>Added a few more values for various Casio tags <li>Added a new Canon LensType (thanks Guido) <li>Decode Panasonic ContrastMode for the TZ10/ZS7 <li>Decode some Canon CameraInfo tags for the 60D <li>Updated Canon custom functions for the 60D <li>Updated Flash video to add some new values and decode some new tags <li>Updated QuickTime decoding for new track and movie header formats <li>Named a couple of unknown Canon tags <li>Made Nikon PictureControl and NikonCaptureOutput directories block writable <li>Fixed problem geotagging when any coordinate was exactly zero <li>Fixed typo in Canon AFAssistBeam converted value <li>Fixed problem displaying exiftool documentation on OS/2 (thanks Ilya Zakharevich) </ul> <a name='v8.29'><b>Aug. 22, 2010 - Version 8.29</b></a> <ul> <li>Added a few new CanonModelID's <li>Added verbose messages for "unsafe" and "protected" tags which are not copied <li>Decode CameraTemperature for a few new Canon models <li>Decode a few new Panasonic tags (thanks Zden&#277;k Mihula) <li>Decode a number of new 3rd party RIFF tags <li>Recognize Casio-type maker notes in Concord cameras <li>Handle "CDATA" sections in XML/XMP <li>Fixed problem that could cause value to be added twice when writing MWG list-type tags without specifying a group <li>Fixed bug extracting altitude from GPX files containing "rtept" nodes which could result in an altitude being associated with the next GPS fix <li>Fixed problem deleting PreviewImage from MIE files </ul> <a name='v8.28'><b>Aug. 14, 2010 - Version 8.28</b></a> <ul> <li>Added ability to specify Photoshop encoding (-charset Photoshop=CHARSET) <li>Added support for maker notes of some Sony Ericsson phones <li>Improved conversion for SigmaRaw:FocalLengthIn35mmFormat (thanks Niels Kristian Bech Jensen) <li>Fixed bug in calculation of AvgBitrate for QuickTime videos (thanks Mats Peterson) <li>Improved error handling when reading Matroska files <li>Fixed -GROUP:geotag= to allow multiple geotag groups to be deleted separately </ul> <a name='v8.27'><b>July 31, 2010 - Version 8.27</b></a> <ul> <li>Added support for QuickTime localized languages and character encodings <li>Added support for alternate language ICC_Profile tags <li>Added a new XMP-swf tag <li>Added a new Sony LensType (thanks Mladen Sever) <li>Added ability to specify any group (not only family 0 and 1) for source tag when copying <li>Decode a number of new QuickTime tags <li>Decode MakerNoteKodak9 maker notes in a few non-Kodak cameras <li>Extract NikonCaptureHistory and drop when copying Nikon MakerNotes <li>Calculate AvgBitrate for QuickTime movies <li>Fixed names of a few recently added ICC_Profile tags (thanks Jeff Harmon) <li>Fixed bug calculating duration of AVI videos for which FrameCount is zero <li>Fixed tag ID for XMP-iptcExt:AdditionalModelInformation <li>Fixed decoding of ShiftJIS character set </ul> <a name='v8.26'><b>July 20, 2010 - Version 8.26</b></a> <ul> <li>Decode a number of new ICC_Profile tags added in approved revisions to the specification <li>Drop NikonCaptureData when copying Nikon MakerNotes (it may be too large for a JPEG APP1 segment when copying from an NEF image) <li>Made NikonCaptureData writable as a block and NikonCapture a deletable group <li>Minor addition to tooltip for HtmlDump of offset values <li>Fixed problem writing to an incorrectly-typed XMP list (patch for LR3 bug) <li>Fixed problem setting file ownership on OS/2 systems when writing (thanks Ilya Zakharevich) <li>Fixed incorrect ICC_Profile tag name (thanks Jeff Harmon) </ul> <a name='v8.25'><b>July 13, 2010 - Version 8.25</b></a> <span class=grn>(production release)</span> <ul> <li>Added CommonIFD0 shortcut tag to help when deleting metata from TIFF images <li>Added a new Pentax LensType and fixed an incorrect one <li>Added a new Panasonic ColorMode <li>Decode FLAC picture metadata <li>Changed ASF Preview tags to be consistent with ID3 and FLAC Picture tags <li>Patched problem with funny dash character in cut-n-paste from documentation on some systems (by allowing the funny dash in command-line arguments) <li>Fixed misleading warning message which could appear when writing MWG tags <li>Fixed typo in an ID3 tag name (thanks Mats Peterson) <li>Fixed an incorrect Sony lens name (thanks Stephen Bishop) <li>Fixed problem misidentifying some other RAW files as Epson ERF </ul> <a name='v8.24'><b>June 30, 2010 - Version 8.24</b></a> <ul> <li>Added ability to write some Kodak APP3 Meta tags <li>Added a few new Olympus LensType's and new values for a couple of other tags <li>Added support for yet another Kodak MakerNote variation (M580) <li>Added conversion for OOXML DocSecurity tag (thanks Jeff Harmon) <li>Added another Nikon ExternalFlashFlags value (thanks Warren Hatch) <li>Decode more Canon VRD tags (thanks Gert Kello) and changed some tag names <li>Decode a couple of new Canon 7D tags (thanks Vesa Kivisto) <li>Decode a few more Sigma tags <li>Decode HTML tags written by Microsoft Office <li>Decode some MakerNotes tags from Samsung MP4 videos <li>Allow RFC 8601 date/time values to be written without seconds <li>Fixed conversion for Kodak Meta:SerialNumber <li>Changed conversion of Canon FocusDistanceUpper/Lower tags to add units (m) <li>Changed the names of some Nikon FlashExposureComp tags <li>Changed name of RTF CharactersNoWhiteSpace tag to CharactersWithSpaces to conform with what Microsoft does with their software as opposed to what they say in their RTF specification <li>Changed a few FlashPix tags for better consistency with OOXML and RTF <li>Properly convert OOXML Unicode character entities <li>Fixed problem writing some Sigma MakerNote tags <li>Fixed problem writing incorrect value for "Uncalibrated" XMP:ColorSpace <li>Fixed bug where some unknown Canon values were extracted twice with -U </ul> <a name='v8.23'><b>June 20, 2010 - Version 8.23</b></a> <ul> <li>Added write support for FujiFilm RAF images from the HS10 and S100FS <li>Added read support for RTF files <li>Added read support for FPXR in JPEG APP4 as written by some HP cameras <li>Added ability to copy files of any type (now does a straight copy instead of processing the file if no new values are set for any "real" tag) <li>Added new values for CanonModelID, PentaxModelID and SonyModelID <li>Added a new Ricoh LensID <li>Added conversion for "Off" and "On" values when writing EXIF:Flash <li>Added a new Canon LensType and changed the name of one Sigma lens <li>Decode more Canon VRD tags and update to DPP 3.8 (thanks Gert Kello) <li>Decode FujiFilm AutoDynamicRange <li>Changed some DNG tags to make them writable (but "unsafe") </ul> <a name='v8.22'><b>June 9, 2010 - Version 8.22</b></a> <ul> <li>Implemented PNG alternate language tags and special character translations <li>Added print conversion for XMP-photoshop:ColorMode <li>Decode some new Pentax 645D tags/values and added more PentaxModelID's <li>Changed family 1 group names for Matroska Chapters <li>Changed frame rate conversions to round to 3 decimal points <li>Enable summary messages when -b is combined with -w <li>Assume local system timezone on specified date (instead of current local timezone) when writing an IPTC time tag with a date/time value which doesn't include a timezone <li>Fixed conversion of Matroska:ChapterTimeStart/End values <li>Fixed an incorrect Panasonic Lens name (thanks Michael Byczkowski) </ul> <a name='v8.21'><b>June 2, 2010 - Version 8.21</b></a> <ul> <li>Added read support for Matroska multimedia files (MKA, MKV and MKS) <li>Added a new PentaxModelID (Optio E80) <li>Decode some information from Casio EX-7000SX APP1 "QVCI", HP Photosmart R837 APP6 "TDHD" JPEG segments <li>Extract more Samsung and HP PreviewImages hidden in other JPEG APP segments <li>Extract unknown tags with numerical ID's by default when -v option is used <li>Updated default GPSVersionID to 2.3.0.0 when writing <li>Fixed bug geotagging from KML file (lat/long were swapped) </ul> <a name='v8.20'><b>May 26, 2010 - Version 8.20</b></a> <ul> <li>Added read support for Open Document files (ODP, ODS, ODT) <li>Added Composite:AudioBitrate tag for VBR MPEG audio <li>Added support for IPTC:CatalogSets written by iView MediaPro <li>Decode Olympus MagicFilter tag and add a two new SceneMode values <li>Decode a few new Sony tags written by NEX models <li>Decode a number of new Sony A100 tags (thanks Igal Milchtaich) <li>Decode some information from MPEG audio LAME header <li>Updated to Exif 2.3 specification (!!) <li>Allow date/time tags to be shifted by the values of other tags when using the -tagsFromFile feature <li>Fixed formatting of QuickTime:CreateDate as written by iPhone <li>Fixed problem conditionally replacing some blank EXIF tags and alternate language tags in XMP </ul> <a name='v8.19'><b>May 11, 2010 - Version 8.19</b></a> <ul> <li>Added ability to read/write Samsung PreviewImage trailer <li>Added two new PentaxModelID's (Optio H90 and W90) <li>Added a new Canon LensType <li>Added a new CanonModelID <li>Decode more Sony tags/values (thanks Michael Reitinger) <li>Decode more Leica M9 tags (thanks Michael Byczkowski and Carl Bretteville) <li>Updated to XMP April 2010 specification <li>Avoid extracting Sony DSLR-A100 tags which have "n/a" values <li>Improved German language translations (thanks Herbert Kauer) <li>Improved efficiency of Composite tag calculations <li>Made RSRC a deletable group <li>Tolerate extra white space at the start of an XMP file <li>Changed MWG logic to ignore blank EXIF tags <li>Changed a few print conversion strings to improve interoperability <li>Changed XMP namespace prefix 'prismusagerights' to 'pur' as per most recent PRISM specification <li>Patched memory problem in Windows when processing very large EPS files <li>Fixed a couple of incorrectly named Sony Panorama tags <li>Fixed bug which could prevent file from being updated when deleting mandatory tags and adding back tags in other locations </ul> <a name='v8.18'><b>Apr. 16, 2010 - Version 8.18</b></a> <ul> <li>Added read support for Sony DSC-F1 PMP images <li>Added a new Nikon LensID (thanks Jeffrey Friedl) <li>Decode a number of new Sony tags (thanks Michael Reitinger) <li>Decode a few more Leica M9 tags (thanks Michael Byczkowski) <li>Preserve original file permissions and ownership when writing <li>Made Canon DustRemovalData writable <li>Changed some Pentax WhiteBalance strings for consistency <li>Patched potential security problem when writing values <li>Fixed bug extracting unsynchronized ID3v2.4 information </ul> <a name='v8.17'><b>Apr. 9, 2010 - Version 8.17</b></a> <ul> <li>Added a new Sony ExposureMode (thanks Michael Reitinger) <li>Decode Casio DriveMode (thanks Robert Chi) <li>Decode CameraTemperature for more Canon EOS models (thanks Vesa Kivisto) <li>Updated to the DICOM 2009 specification (Note: Changed some DICOM tag names) <li>Improved conversions for XMP:LensInfo, EXIF:DNGLensInfo and Nikon:Lens <li>Changed case of some Canon DriveMode strings <li>Fixed divide-by-zero error when Geotagging from a track with only one point <li>Fixed incorrect ImageHeight reported for top-to-bottom BMP images <li>API Changes: <ul> <li>Fixed a problem passing options to Image::ExifTool::TagInfoXML::Write() </ul> </ul> <a name='v8.16'><b>Mar. 31, 2010 - Version 8.16</b></a> <ul> <li>Preserve Mac OS resource fork when writing (OS X only) <li>Added a number of new Nikon LensID's (thanks Robert Rottmerhusen) <li>Decode a couple more Mac OS resources <li>Decode Olympus LensModel tag (thanks Martin Hilbers) <li>Extract PrintIMVersion tag from PrintIM information <li>Separate extraction of Leica FrameSelector information from LensType tag <li>Recognize Bitstream PFA/PFB font files <li>Patched ActivePerl 5.10 bug which could cause Perl crash during Geotag tests <li>Fixed another Geotag test that fails due to round-off errors on some systems </ul> <a name='v8.15'><b>Mar. 18, 2010 - Version 8.15</b> <span class=grn>(production release)</span></a> <ul> <li>Added read support for Macintosh resource files: <ul> <li>Generate ResourceForkSize tag if data exists in a file's resource fork <li>Enhanced -ee option to process resource fork as a sub-document </ul> <li>Added a new PentaxModelID (Optio I-10) <li>Decode Panasonic DMC-ZS7 landmark tags <li>Fixed decoding of Pentax Optio 555 PictureMode and added a number of new values (thanks Ralf Medow) </ul> <a name='v8.14'><b>Mar. 16, 2010 - Version 8.14</b></a> <ul> <li>Added some new Canon AFMode values for the EOS 7D (thanks Dieter Steiner) and renamed tag to AFAreaMode <li>Decode ColorData and some new MOV tags for the production Canon EOS 550D <li>Decode Panasonic IntelligentResolution tag <li>Allow times with timezones in GPX track logs <li>Improved handling of maker notes in Olympus MP4 videos <li>Changed H264 GPS tags to the GPS group <li>Fixed date/time format error in reverse geotagging GPX example <li>Fixed problem introduced in version 8.09 where XMP:GPSLatitude/GPSLongitude require the -a option to be extracted <li>API Changes: <ul> <li>Fixed bug where some options (Charset, Escape, Exclude and Lang) weren't activated properly when set via options hash in calls to some functions <li>Fixed some potential problems when used with mod_perl </ul> </ul> <a name='v8.13'><b>Mar. 5, 2010 - Version 8.13</b></a> <ul> <li>Added read/write support for Samsung SRW images and decode some NX10 maker note tags (thanks Tae-Sun Park) <li>Added new values for some Sony tags (thanks Michael Reitinger) <li>Added a new Canon LensType <li>Decode maker notes in Nikon Coolpix S8000 MOV videos <li>Decode a number of obscure TIFF FX tags <li>Implemented list-type behaviour for MWG:Creator tag <li>More improvements to German translations (thanks Herbert Kauer) <li>Changed name of NikonPreview group to PreviewIFD <li>Fixed problem which prevented ThumbnailImage from being written to ARW, SR2 and PEF images </ul> <a name='v8.12'><b>Feb. 26, 2010 - Version 8.12</b></a> <ul> <li>Added a number of missing ProgramMode values for the Sony DSLR-A330 <li>Added XMP-iptcCore:DigitalSourceType (IPTC Extension version 1.1) <li>Added a couple more Nikon LensID's (thanks Jens Kriese and Robert Rottmerhusen) <li>Improved German language tag descriptions (thanks Herbert Kauer) <li>Improved identification of some RAW file types <li>Moved MPF PreviewImage into the Composite group <li>Fixed some problems in HtmlDump output <li>Fixed problem copying makernotes as a block into DNGAdobeData </ul> <a name='v8.11'><b>Feb. 20, 2010 - Version 8.11</b></a> <ul> <li>Added support for Leica S2 maker notes <li>Added a bunch of new CanonModelID's <li>Decode MacroMagnification for more Canon models (MP-E 65mm only) <li>Decode a number of Canon CameraInfo tags for the 1DmkIV and 550D <li>Updated CanonCustom tags for the 550D <li>Improved parsing of Canon OriginalDecisionData <li>Improved decoding of Canon CameraInfo LensType <li>Improved decoding of some Sigma tags <li>Recognize a number of new Paint Shop Pro file extensions <li>Prevent a directory from being recreated in the wrong location when deleting a group and adding back information in the same step <li>Changed -fileOrder option to sort numbers numerically <li>Fixed bug in -fileOrder option when directory names are specified <li>Fixed problem extracting information from some Panasonic AVCHD videos <li>Fixed some minor compatibility problems with Perl 5.11 <li>Fixed problem which could result in runtime error when using MWG feature <li>Fixed an inconsistency in the way duplicate tags were handled in the grouped JSON (-j -g) and short XML (-X -s) output formats </ul> <a name='v8.10'><b>Feb. 8, 2010 - Version 8.10</b> <span class=grn>(production release)</span></a> <ul> <li>Added read/write support for Photoshop PSB file format <li>Added -fileOrder option to provide control over file processing order <li>Added a few new Sony/Minolta LensTypes (thanks Marcin Krol) <li>Added more Nikon LensID's (thanks Robert Rottmerhusen) <li>Decode metadata from all frames in AVCHD H.264 video with -ee option <li>Decode more H.264 tags and improved decoding of others <li>Improved decoding of some Olympus E-P1 tags <li>Improved handling of some types of unknown maker notes <li>Enhanced -p option to support output file headers and footers, and to parse embedded documents as separate input files when combined with -ee <li>Relaxed validation of PFM files to accommodate incorrect device type string written by FontForge software <li>API Changes: <ul> <li>Enhanced GetFileType() to return descriptions for more file types </ul> </ul> <a name='v8.09'><b>Jan. 29, 2010 - Version 8.09</b></a> <ul> <li>Added a number of new Nikon LensID's (thanks Robert Rottmerhusen) <li>Decode GPS position and some camera settings from AVCHD (.M2TS) video <li>Decode a few new PhotoMechanic tags <li>Decode MacroMagnification for the Canon MP-E 65mm f/2.8 1-5x Macro Photo lens in EOS 5DmkII and 40D images <li>Delete multiple Photoshop segments in JPEG images when deleting all Photoshop information and adding some back in one step <li>Print warning message in Windows when there are no matching files to process <li>Changed print conversion for PSP CreatorAppVersion <li>Fixed problem rewriting NikonCapture information written by NX2 </ul> <a name='v8.08'><b>Jan. 25, 2010 - Version 8.08</b></a> <ul> <li>Added read support for Paint Shop Pro images (PSP and PSPIMAGE) <li>Added ability to decode a number of new character sets including JIS, and completely overhauled character encoding routines <li>Fixed problem reading old OS/2-format BMP images </ul> <a name='v8.07'><b>Jan. 19, 2010 - Version 8.07</b></a> <ul> <li>Added read support for a number of font file formats (OTF, TTF, TTC, PFA, PFB, PFM, DFONT, AFM, ACFM and AMFM) <li>Added (experimental) read support for FLA files <li>Added a few new Sony LensType's (thanks Sander Stols) <li>Added a new Canon LensType (thanks Mark Berger) <li>Set BigTIFF MIME type to "image/x-tiff-big" (unofficial) <li>Fixed bug in GPS time drift correction when dates are specified for both GPS and image times <li>Fixed problem reading some IGC GPS logs </ul> <a name='v8.06'><b>Jan. 12, 2010 - Version 8.06</b></a> <ul> <li>Added a few new CanonModelID's <li>Fixed a bug introduced in 8.05 which broke rewriting of XMP in MWG mode </ul> <a name='v8.05'><b>Jan. 10, 2010 - Version 8.05</b></a> - "Strict MWG" <ul> <li>Improved MWG conformance by ignoring non-standard EXIF, IPTC and XMP when the MWG module is loaded <li>CurrentIPTCDigest tag is now only generated for IPTC in the standard location (as specified by the MWG recommendation) <li>Added support for 3rd party trailers on ARW images <li>Changed names of Sony IDC date/time tags and decode the last unknown IDC tag <li>Fixed "-TAG-= -TAG=VALUE" syntax to work with shiftable (date/time) tags and tags with conversions <li>Fixed incorrect tag format when writing some PhotoMechanic tags <li>Fixed problem where some tags couldn't be written in Olympus ORF images </ul> <a name='v8.04'><b>Jan. 7, 2010 - Version 8.04</b> - "Write ARW"</a> <ul> <li>Added write support for Sony ARW and SR2 images (at long last!) <ul> <li>WARNING: Some Adobe utilities (Photoshop Camera Raw 5.6, DNG Converter 5.6, LightRoom 2.6) have a bug which causes the tone curve to be incorrect for edited ARW images from some Sony cameras (A500, A550, A700, A850, A900 and maybe others) </ul> <li>Compatibility Notice: Embedded JPEG in ARW and SR2 images is now extracted as PreviewImage instead of JpgFromRaw <li>Added read/write support for Sony IDC tags <li>Added support for Leica X1 maker notes and decode a few tags <li>Added support for DigiKam XMP schema <li>Added a new Minolta/Sony LensType (thanks Jean-Michel Dubois) <li>Decode Nikon D90 AFAreaModeSetting <li>Decode Nikon NEFBitDepth (thanks Warren Hatch) <li>Decode a few new Sony SRF, Casio AVI and MSOffice TIFF tags <li>Enhanced Geosync tag to allow GPS time-drift correction <li>Fixed Nikon D3 FlashSyncSpeed values (thanks Warren Hatch) </ul> <a name='v8.03'><b>Dec. 19, 2009 - Version 8.03</b></a> <ul> <li>Added a new Nikon ExternalFlashFlags value (thanks Warren Hatch) <li>Implemented -charset id3=CHARSET option in Windows version too (oops!) <li>Improved heuristic for guessing EXIF "Unicode" string byte order <li>Improved decoding of some obscure QuickTime tags <li>Renamed Casio SelfTimer tag to ReleaseMode and added new values <li>Fixed problem converting numerical M4P Genre values </ul> <a name='v8.02'><b>Dec. 15, 2009 - Version 8.02</b></a> <ul> <li>Added MIME types for Apple iWork file formats <li>Added bitmask to -v2 output for applicable tags <li>Added a new Canon LensType and fixed an incorrect one (thanks Hugh Griffiths) <li>Added a few new Ricoh Saturation values (written by GXR) <li>Added ability to specify character set for ID3v1 information <li>Added French translations for some Nikon tags (thanks Harry Nizard) <li>Extract FilePermissions information <li>Decode Nikon D90 custom settings <li>Decode a few more Nikon tags and removed AutoBracketRelease (thanks Warren Hatch) <li>Decode a few more GIF tags (and changed groups of some others) <li>Decode some information from JPEG APP4 "SCALADO" segment <li>Updated DICOM decoding to latest (2008) specification <li>Enhanced -fast option to allow MakerNote information to be skipped <li>Changed -v0 to enable output autoflushing for STDERR as well as STDOUT <li>Improved decoding of some QuickTime tags (fixes M4P Genre problem) <li>API Changes: <ul> <li>Added CharsetID3 option <li>Changed name of IPTCCharset option to CharsetIPTC (but IPTCCharset may still be used for backward compatibility) </ul> </ul> <a name='v8.01'><b>Dec. 1, 2009 - Version 8.01</b></a> <ul> <li>Compatibility Notice: Extract full-sized preview from X3F images as JpgFromRaw instead of PreviewImage <li>Added support for the new X3F version 2.3 files written by the Sigma DP2 <li>Added support for a few more XMP-acdsee tags <li>Decode Nikon D3 custom settings (thanks Warren Hatch) and extrapolate to D3S, D3X and D300S <li>Decode the few remaining Nikon D300 custom settings (thanks Stuart Solomon for providing sample images) <li>Decode Nikon D5000 custom settings <li>Decode Nikon FlashColorFilter tag (thanks Warren Hatch) <li>Decode a few more PNG tags <li>Created a new family 1 group for Nikon custom settings <li>Improved write conversions for EXIF Contrast, Saturation and Sharpness <li>Fixed problem with %f and %e when the source file has no extension <li>Fixed problem decoding Nikon D3 flash group B and C intensities <li>Fixed missing MIME type for XLT files </ul> <a name='v8.00'><b>Nov. 20, 2009 - Version 8.00</b> <span class=grn>(production release)</span></a> <ul> <li>Added read support for Apple iWork '09 files (Keynote, Pages and Numbers) <li>Added ability to write Nikon SerialNumber and ShutterCount tags <li>Added a few new Nikon LensID's and changed Tamron lens names to include model number (thanks Robert Rottmerhusen) <li>Decode a number of new Nikon tags (thanks Warren Hatch for much of this) <li>Decode a few new Sony tags and improved others (thanks Igal Milchtaich) <li>Decode a few new Ricoh tags, renamed RicohDateTime1/2, Revision and MakerNoteVersion tags, and added some print conversions <li>Decode Parallax in FujiFilm MPO MPImage2 images (thanks John Goodman) <li>Decode Canon EOS 1D Mark IV custom functions <li>Decode a number of new tags in MPEG-4 videos <li>Decode a large number of private GE DICOM tags <li>Decode a few more tags in AVI videos and attempt to fix problem calculating duration when multiple video streams exist <li>Enhanced -ee option to extract information from embedded MPF images <li>Improved Nikon LensID conversion to recognize user-defined lenses <li>Improved decoding of a few Olympus tags (ArtFilter, FaceDetect and FocusProcess) <li>Improved handling of warnings when processing corrupted ZIP files <li>Improved recognition of Canon teleconverters in Composite LensID tag <li>Added patch for Leica M8 bug which writes incorrect format for EXIF ExposureCompensation and ShutterSpeedValue <li>Changed prefix of unknown Leica M9 tags from LeicaSubdir to Leica_Subdir <li>Fixed problem writing encrypted Nikon WB Levels <li>Fixed problems reading PDF tags written by OS X 10.6 utilities <li>Fixed problem where the -charset option didn't work properly for some XML character entities when reading XMP </ul> <a name='v7.99'><b>Nov. 6, 2009 - Version 7.99</b></a> <ul> <li>Added read support for Office Open XML files and improved recognition of many MS Office file types <li>Added read support for Phase One IIQ and Capture One COS and EIP files <li>Added read support for GZIP information (first archived file only) <li>Added a new Canon LensType (thanks Karsten S&ouml;te) <li>Added a new Nikon LensID (thanks Geert De Soete) <li>Decode a few new Sony tags <li>Decode MakerNotes in Pentax AVI videos <li>Decode SerialNumber for newer Pentax cameras <li>Decode Canon FlashMeteringMode for most EOS models <li>Disabled some Sony A230 CameraInfo tags which weren't valid for this model <li>Give names to a number of unknown QuickTime atoms <li>Recognize VOB file extension (but audio information in MPEG private stream is not yet decoded) <li>Tolerate extra white space in GPX attributes when geotagging (fixes problem reading GlobalSat GPX files) <li>Minor improvements to FlashPix decoding <li>Changed names of all ZIP tags to avoid name conflicts with other tags <li>Changed Composite ImageSize to use ExifImageWidth/Height for CR2 images <li>Changed names of QuickTime image and video track description ImageWidth/Height tags to SourceImageWidth/Height <li>Fixed problems when -if option was combined with -v or -htmlDump <li>Fixed problem parsing NMEA track logs where coordinates have the wrong number of digits due to missing leading zeros (Holux M-241) <li>Fixed an incorrect Pentax LensType </ul> <a name='v7.98'><b>Oct. 28, 2009 - Version 7.98</b></a> <ul> <li>Implemented <a href="TagNames/MWG.html">MWG support</a> via a plug-in module ("-use MWG") <li>Added -config and -use options <li>Added ability to read Sony Vegas tags in AVI videos <li>Added a couple of new Canon LensType's <li>Added a new Panasonic ShootingMode (thanks Joerg) <li>Added a new PentaxModelID (Optio P80) <li>Added a new CanonModelID <li>Added a few new Canon 1D Mark IV custom functions values <li>Added warning for superfluous tag names on the command line when writing <li>Decode a few more tags for the Canon EOS 5D and 7D <li>Decode a number of new tags in Quicktime-based files (including MP4 and JP2) <li>Impose length limit on IPTC values when writing as per spec. (for backward compatibility, the length check may be disabled with the -m option) <li>Improved checks for invalid EXIF offsets and changed some warning messages <li>Improved decoding for a few Canon tags (and renamed NoiseReduction tag) <li>Improved date/time formatting to accept date-only values <li>Implemented print conversion for ID3 date/time tags <li>Enhanced writing of Photoshop:IPTCDigest to allow a special value of 'old' to represent the digest of the IPTC from the original file <li>Updated iptc2xmp.args and xmp2iptc.args to handle IPTC DigitalCreationDate/Time <li>Recognize a number of Sigma LensType's in X3F images <li>Recognize a large number of additional audio/video file extensions <li>Minor improvements to -htmldump output <li>Minor changes to some application warning messages <li>Fixed problem writing Canon CameraTemperature tags <li>Fixed "Error reading Info object" warning when reading a PDF file after deleting all PDF tags <li>API Changes: <ul> <li>Added ability to specify config file via $Image::ExifTool::configFile <li>Added EditGroup option for SetNewValue() </ul> </ul> <a name='v7.97'><b>Oct. 13, 2009 - Version 7.97</b></a> <ul> <li>Added ability to disable print conversion on a per-tag basis by suffixing the tag name with a '#' character <li>Added a new PentaxModelID (Optio WS80) <li>Decode a few more Sony tags <li>Decode a number of new Casio tags and values <li>Decode CameraTemperature for Canon PowerShot models (thanks Vesa Kivisto) <li>Improved warning messages for the -ext option <li>Improved DOF calculation to use ObjectDistance if SubjectDistance and FocusDistance are not available <li>Improved -X output to support more of the new -charset encodings <li>Made Composite:FileNumber writable <li>Use more detailed makernote directory names in EXIF warning messages <li>Decreased priority of tags in IFD1 of JPEG images to avoid taking precedence over tags from IFD0 or ExifIFD <li>Changed print conversion strings for TIFF SampleFormat tag <li>Renamed Casio ObjectDistance tag to FocusDistance <li>Fixed invalid character in a Minolta/Sony LensType string <li>Fixed bug decoding NITFVersion tag <li>Fixed bug where binary data was returned without the -b option when using an expression involving tag names for some tags such as ThumbnailImage <li>Fixed two problems which could result in runtime warnings when: <ul> <li>reading truncated ICC_Profile information <li>using -htmldump on an image containing invalid EXIF offsets </ul> <li>API Changes: <ul> <li>Added ability to disable print conversion by suffixing tag name with '#' <li>Changed name of BigTIFF 'ifd8' format to 'ifd64' for consistency </ul> </ul> <a name='v7.96'><b>Oct. 2, 2009 - Version 7.96</b></a> <ul> <li>Added new Geosync tag to allow geotagging of images with timestamps which are not pre-synchronized to GPS time <li>Added patch to avoid crash bug in Canon DPP software when OwnerName is set to a value that is exactly 3 characters long (doh!) <li>Added a few new Olympus LensType's (thanks Godfrey DiGiorgi) <li>Added a couple more Nikon LensID's (thanks Robert Rottmerhusen) <li>Added minor warning when fixing invalid counts in Kodak MakerNotes <li>Decode a few new tags and values for the Panasonic GF1 <li>Improved parsing of command-line arguments to remove order dependencies of certain options <li>Minor improvement to decoding of Olympus FaceDetect tag <li>Changed "Error reading PreviewImage from file" to a minor warning <li>Changed conversion of Canon MeasuredEV to correspond more closely to LightValue (by adding 5 to the MeasuredEV value, which seems to be good for all EOS models, but it may be high by up to 1 EV for some PowerShot models) <li>Fixed problems decoding some CameraInfo tags for the Canon 7D with the new production firmware (1.0.7) <li>Fixed problems writing some CameraInfo tags for the Canon 50D and 5DmkII </ul> <a name='v7.95'><b>Sept. 24, 2009 - Version 7.95</b></a> <ul> <li>Added read support for LNK (Windows shortcut) file metadata <li>Added patch to fix incorrect count written by a number of recent Kodak cameras to some tags in SubIFD3 of the MakerNotes <li>Added a few more Sony/Minolta LensType's <li>Added a couple more Canon LensType's (thanks Norbert Wasser) <li>Added a PentaxModelID for the new K-x <li>Decode a couple more Canon VignettingCorr tags <li>Improved Canon FocusDistance conversions to indicate "inf" for maximum value <li>Improved DOF calculation to use SubjectDistance if FocusDistance is not available <li>Changed -fast, -scanForXMP and -unknown options to also apply when copying tags with -tagsFromFile </ul> <a name='v7.94'><b>Sept. 11, 2009 - Version 7.94</b></a> <ul> <li>Added support for Leica M9 makernote format and decode a few new tags <li>Added a few new Leica LensType's <li>Added support for IGC GPS track logs (thanks Lionel Genet) <li>Added a number of alternate Macintosh character sets and changed a couple of character set names for -charset option <li>Decode even more Sony A100 tags (thanks Igal Milchtaich!) <li>Improved handling of FlashPix character translations <li>Changed a couple of Sony and Minolta AF tag names to be more consistent </ul> <a name='v7.93'><b>Sept. 5, 2009 - Version 7.93</b></a> <ul> <li>Added a new CanonModelID <li>Added a couple of new Nikon LensType's (thanks Robert Rottmerhusen) <li>Added a few new Pentax LensType's <li>Decode a number of new tags for the Canon EOS 7D <li>Calculate Duration for WAV audio files <li>Allow exponents when writing GPS coordinates (eg. "-gpslatitude=7.657e+01") <li>Print available character sets if no CHARSET is given for -charset option <li>Improved -v3 and -htmldump output to show MPF image data <li>Fixed -E option to work with tag descriptions when -lang option used <li>Fixed problem reading large FlashPix-format documents <li>API Changes: <ul> <li>Added LargeFileSupport option </ul> </ul> <a name='v7.92'><b>Aug. 29, 2009 - Version 7.92</b></a> <ul> <li>Fixed new "-charset iptc=CHARSET" feature to work with -tagsFromFile </ul> <a name='v7.91'><b>Aug. 29, 2009 - Version 7.91</b></a> <ul> <li>Added -charset option and support for additional Windows and Mac character sets. Character sets now supported are: UTF-8, Latin1, Latin2, Cyrillic, Greek, Turkish, Hebrew, Arabic, Baltic, Vietnam, Thai and MacRoman <li>Fixed problem with some duplicate Nikon LensID's <li>Fixed incorrect Duration calculation for multi-channel FLAC audio files <li>Compatibility Notice: Removed "CreatorContactInfo" shortcuts which were added to ease the transition when some Iptc4xmpCore tag names were changed in version 7.45 <li>API Changes: <ul> <li>Added IPTCCharset option and support for additional character sets </ul> </ul> <a name='v7.90'><b>Aug. 24, 2009 - Version 7.90</b></a> <ul> <li>Added -ex (-escapeXML) option <li>Added a few more Minolta M42-type lenses (thanks Lukasz Stelmach) <li>Added a number of new CanonModelID's <li>Decode more Sony A100 tags (thanks Igal Milchtaich) <li>Decode a few more Kodak WhiteBalance tags <li>Decode a couple more JPEG APP segments <li>Internal changes to Composite tag calculation algorithm <li>Patched problem with renaming files on OS/2 that caused failed tests </ul> <a name='v7.89'><b>Aug. 18, 2009 - Version 7.89</b> <span class=grn>(production release)</span></a> <ul> <li>IMPORTANT: Not quite done with NRW fixes -- fixed similar bug which could corrupt NRW images when writing new values larger than 10 MB </ul> <a name='v7.88'><b>Aug. 17, 2009 - Version 7.88</b> <span class=grn>(production release)</span></a> <ul> <li>IMPORTANT: Fixed bug introduced in version 7.77 which causes Nikon NRW images to be corrupted when writing <li>Decode a number of Sony A100 Camera Settings tags (thanks Igal Milchtaich) <li>Improved accuracy of some CameraInfo values for Canon PowerShot models <li>Tolerate blank lines in PDF xref tables <li>Fixed problem where -E didn't escape values when copying with -tagsFromFile <li>Fixed bug identifying AF Micro-Nikkor 105mm f/2.8D lens </ul> <a name='v7.87'><b>Aug. 14, 2009 - Version 7.87</b></a> <ul> <li>Added a new Sony lens (thanks Lukasz Stelmach) <li>Added a few new Pentax City and PictureMode values (thanks Niels Kristian Bech Jensen) <li>Added lookup for XMP-photoshop:Urgency <li>Added a few new Nikon RetouchHistory values <li>Decode a number of new Sony tags for the A700 (thanks R&uuml;diger Lange) <li>Decode Canon PeripheralLighting tags <li>Decode Olympus AFFineTuneAdj (thanks Yrjo Rauste) <li>Extract System tags from unknown file types <li>Enhanced -E option to work when writing, and when used in combination with other options such as -p <li>Tolerate white space around "=" in XMP attributes (allowed by XML spec) <li>Improved error handling when parsing bad EXIF IFD entries <li>API Changes: <ul> <li>Added Escape option </ul> </ul> <a name='v7.86'><b>July 25, 2009 - Version 7.86</b></a> <ul> <li>Added support for reading Garmin TCX track logs with the -geotag option <li>Added a number of new Canon, Olympus and Pentax LensType's <li>Enabled writing of .AI (Adobe Illustrator) files <li>Minor changes to DICOM decoding </ul> <a name='v7.85'><b>July 21, 2009 - Version 7.85</b></a> <ul> <li>Added a new Sony LensType <li>Added a new Pentax LensType (thanks Albert Bogner) <li>Added a new PentaxModelID value (Optio W80) <li>Added a few new JPEGDigest values (thanks Franz Buchinger) <li>Added check for proper support of IFD-format value types <li>Decode Nikon D300 firmware 1.10 camera settings (thanks Stuart Solomon) <li>Improved handling of Olympus makernotes for recent models and fixed error messages resulting from makernote format changes in Stylus 550WP images <li>Improved geotagging by allowing different NMEA sentences with slightly different timestamps (within 10 seconds) in the same fix <li>Fixed decoding of some CameraSettings tags for the new Sony A330 and A380 <li>API Changes: <ul> <li>Added GeoMinSats option </ul> </ul> <a name='v7.84'><b>July 16, 2009 - Version 7.84</b> (Windows only)</a> <ul> <li>Fixed bug in -geotag option of Windows version when using wildcards in the GPS track filename </ul> <a name='v7.83'><b>July 13, 2009 - Version 7.83</b></a> <ul> <li>Added preliminary read support for M2TS/AVCHD video files (much pain for little gain) <li>Added family 4 group names (instance number) to provide a technique for differentiating same-named tags extracted from the same location via the command-line application <li>Added a new family 1 group ("System") to differentiate tags obtained from the file system <li>Added a couple of new Canon LensType values <li>Decode ID3 Picture attributes <li>Decode ICC_Profile ColorantTableOut <li>Changed application to return a value of 1 if all files fail condition <li>Made the IPTC CodedCharacterSet tag "unsafe" to copy by default (since this could result in incorrect encoding for existing IPTC in the destination image) <li>Fixed bug handing some non-standard offset formats when writing EXIF <li>Fixed problem with MakerNote warnings for Samsung WB500 <li>Fixed problem reading Leica M8 makernotes when copied between JPEG and DNG images <li>Fixed problem extracting ThumbnailImage from Sanyo VPC-FH1 MP4 videos <li>Fixed problem extracting ThumbnailImage from some Sony DSLR-A100 ARW images (due to a bug in some A100 firmware versions which results in incorrect ThumbnailOffset values) </ul> <a name='v7.82'><b>July 2, 2009 - Version 7.82</b> <span class=grn>(production release)</span></a> <ul> <li>Added a new Canon LensType (thanks Norbert Wasser) <li>Decode another Nikon AVI tag <li>A number of improvements, bug fixes and additions to ID3 decoding </ul> <a name='v7.81'><b>June 28, 2009 - Version 7.81</b></a> <ul> <li>Added a few missing print conversions to Nikon, Kyocera and FlashPix date/time tags </ul> <a name='v7.80'><b>June 26, 2009 - Version 7.80</b></a> <ul> <li>IMPORTANT: Fixed bug introduced in 7.77 which had the potential to corrupt TIFF-format images when writing to an image containing a SubIFD tag larger than 10 MB (not that I've ever seen one of these in the wild) <li>Added support for DNG version 1.3 <li>Decode makernotes in Nikon AVI videos <li>Decode QuickTime MatrixStructure tag and added Composite Rotation tag to calculate the rotation of the QuickTime video track <li>Updated CanonCustom tags for the EOS 500D <li>The -fast option now stops parsing of WAV and AVI files at audio/video data <li>API Changes: <ul> <li>Improved handling of $/ by localizing internally </ul> </ul> <a name='v7.79'><b>June 20, 2009 - Version 7.79</b></a> <ul> <li>Added read/write support for Adobe InDesign files (.IND, .INDD, .INDT) <li>Added ability to geotag with KML files (Note: each Placemark must contain a TimeStamp for this to work) <li>Added undocumented XMP-xmp PagInfo tags written by Adobe InDesign <li>Added conversion for MPF:PanOrientation <li>Many improvements and additions to Olympus and Panasonic makernote decoding <li>Improved logic of -scanForXMP option <li>Recognize MPO file extension (Extended Multi-Picture format) <li>Distinguish between infinite (inf) and undefined (undef) rational values <li>Changed namespace prefixes for xapG and xapGImg to match current XMP spec <li>Changed print conversion for Casio AFPointPosition <li>Made "Error reading value" warning minor when reading makernotes values <li>Allow all tags to be deleted from an XMP file <li>Fixed group names for a few Panasonic and Sony makernote tags </ul> <a name='v7.78'><b>June 13, 2009 - Version 7.78</b></a> <ul> <li>Added read support for the new CIPA standards: Multi Picture Format (MPF) and Stereo Still Image format (Stim) <li>Added support for Kodak type 10 makernotes (Z980) <li>Added a new Pentax LensType and a new Nikon LensID (thanks Jens Duttke) <li>Added %C format code for output file names <li>Decode a number of camera settings from Sony DSLR images </ul> <a name='v7.77'><b>June 7, 2009 - Version 7.77</b></a> <ul> <li>Added -struct option for JSON (-j) and XML (-X) outputs <li>Added 2 new Pentax LensType's and a PentaxModelID (thanks Jens Duttke) <li>Decode large preview in APP2 of images from newer Samsung models <li>Extract FujiFilm PreviewImage from improperly written FPXR segment <li>Improved decoding of Nikon WB levels for some models <li>Reduced memory useage when writing DNG and some other RAW image files <li>Changed format of Canon D30 SerialNumber to remove the hyphen and add leading 0's if less than 9 characters (now same format as printed on camera) <li>Changed writing of GPSTimeStamp and GPSDateStamp to adjust date/time to UTC if it contains a timezone, and added timezone ("Z") to Composite:GPSDateTime <li>Suppress "Unlisted FPXR segment (index 255)" warning from some Kodak images <li>Suppress "Unrecognized MakerNotes" warning for Samsung STMN-type maker notes <li>Made "Unrecognized MakerNotes" a minor warning <li>Fixed problems reading/writing large PreviewImage in some Sony JPEG images <li>Fixed problem decoding some base64 values in XML files <li>API Changes: <ul> <li>Added Struct option (considered experimental) </ul> </ul> <a name='v7.76'><b>May 20, 2009 - Version 7.76</b></a> <ul> <li>Added support for Leica RWL raw images (just RW2 with a different name -- Panasonic is pulling the same dumb stunt as Nikon with NRW) <li>Added ability to specify geotagging parameters via config file <li>Added two new Canon LensType's (thanks Jose Oliver-Didier) <li>Added a couple more Panasonic FilmMode values <li>Added bitmapped value lookups to -listx output <li>Decode Panasonic face recognition information (DMC-TZ7) <li>Decode some new FujiFilm face detection tags <li>Implemented language translations for bitmapped values <li>Enhanced -geotag option to allow wildcards in track file name <li>Minor changes to Nikon AF point decoding <li>Allow empty string when writing unknown values (ie. "Unknown ()") <li>Pad numerical IPTC values with zeros if necessary when writing <li>Fixed problem with -geotag feature interpolating in some NMEA logs <li>API Changes: <ul> <li>Added GeoMaxHDOP, GeoMaxPDOP, GeoMaxIntSecs and GeoMaxExtSecs options </ul> </ul> <a name='v7.75'><b>May 9, 2009 - Version 7.75</b></a> <ul> <li>Added a few new translations (thanks Jens Duttke et al) <li>Added warning when stream mode data is encountered in a ZIP file (this is currently not supported) <li>Added a couple of new Nikon ActiveD-Lighting values (thanks Werner Kober) <li>Added and changed some Nikon LensID's (thanks Robert Rottmerhusen) <li>Added ability to specify user-defined option defaults in config file <li>Added write support for FujiFilm S5Pro firmware 1.11 RAF images <li>Decode AF point information for more Nikon models (thanks Werner Kober) <li>Improvements to new geotagging feature <li>Changed language code for simplified Chinese from "zh_s" to "zh_cn" <li>Changed user-defined shortcuts to Image::ExifTool::UserDefined::Shortcuts <li>Limit PrintConv precision of Composite GPSAltitude to 1 decimal place <li>API Changes: <ul> <li>Changed WriteInfo() to use a temporary file instead of a memory buffer when a source file name is given with no destination file <li>Attempt (yet again) to fix problems when UTF-8 encoded strings are passed to exiftool functions </ul> </ul> <a name='v7.74'><b>Apr. 10, 2009 - Version 7.74</b></a> <ul> <li>Added geotagging feature and new -geotag option (guess who finally bought a hand-held GPS!) <li>Added a few new Casio RecordMode values <li>Decode FujiFilm EXRAuto and EXRMode tags (FinePix F200EXR) <li>Decode Olympus ArtFilter tag <li>Allow EXIF ISO to have multiple values as per EXIF spec <li>Improved XMP-exif and XMP-tiff list-type tags to allow copying from EXIF <li>Changed handling of ComponentsConfiguration to facilitate copying between EXIF and XMP <li>Changed name of EXIF tag 0x9214 from SubjectLocation to SubjectArea to match EXIF specification <li>Changed behaviour when writing pre-existing EXIF tags to use the standard EXIF field type instead of preserving the existing type (fixes problem rewriting some incorrectly typed EXIF tags) <li>Fixed error if a shift value is not given when shifting a date/time tag <li>Fixed makernote offsets error message when writing Pentax Optio WP images <li>API Changes: <ul> <li>Added EditOnly option to SetNewValue() </ul> </ul> <a name='v7.73'><b>Mar. 31, 2009 - Version 7.73</b></a> <ul> <li>Added write support for Panasonic RW2 images (including IPTC and XMP) <li>Added ability to write IPTC and XMP to Panasonic/Leica RAW images and fixed bug introduced in version 7.64 which disabled write support for these images <li>Added a new Canon EasyMode value (thanks Irwin Poche) <li>Added a number of new Nikon LensID's (thanks Robert Rottmerhusen) <li>Added CanonModelID for the new 500D <li>Decode many CameraInfo and ColorData tags for the Canon EOS 500D <li>Decode track-level 'meta' atom in MOV videos <li>Enhanced Canon Composite:ShootingMode logic to distinguish Bulb mode <li>Improved decoding of Canon TargetExposureTime <li>Changed name of Panasonic RW2 PreviewImage to JpgFromRaw <li>Fixed bug where JPEGDigest wasn't generated for some images <li>Fixed problem where -F didn't permanently fix makernote offsets for some images when writing <li>Fixed bug decoding Canon RawMeasuredRGGB and MeasuredRGGBData which resulted in a failed test on 64-bit systems </ul> <a name='v7.72'><b>Mar. 20, 2009 - Version 7.72</b></a> <ul> <li>Added a new Minolta/Sony LensType (thanks Jens Duttke) <li>Added support for localized language descriptions of "lang-alt" tags <li>Added support for Nikon NRW files (please just kill me now) <li>Added two new PentaxModelID's and a new PentaxImageSize <li>Decode Pentax PEF HuffmanTable as Unknown Binary tag <li>Decode Leaf and Kodak records in DNGAdobeData information <li>Made "Empty PrintIM data" a minor warning <li>Minor improvement to Canon lens recognition logic <li>Changed Composite:LensID to also return a value for Olympus lenses <li>Changed copying behaviour to preserve the specific location (family 1 group) when source group is specified and destination group is "all" or "*" (eg. "-exif:all>all:all" now preserves the IFD of each tag) <li>Fixed a number of incorrect Minolta/Sony lens names (thanks Olaf Ulrich) <li>Fixed bug rewriting MIE trailers on TIFF images </ul> <a name='v7.71'><b>Mar. 12, 2009 - Version 7.71</b></a> <ul> <li>Added a new Pentax LensType (thanks Akos Szalkai) <li>Added a new Canon LensType (thanks Kurt Garloff) <li>Added new PentaxModelID for the Optio P70 <li>Added XMP list-type flag (Alt, Bag or Seq) to "-f -listx" output <li>Decode a number of new Canon tags (thanks Vesa Kivisto) <li>Removed unreliable Canon Composite FlashOn tag (use Flash instead) <li>Removed Nikon FlashModel tag and replaced it with ExternalFlashFirmware <li>Changed tags in Canon "ColorBalance" tables to signed integer and renamed the tables to "ColorData" <li>Changed formatting for Canon FocalUnits <li>Changes to -X output: <ul> <li>Now uses 'rdf:datatype' instead of 'et:encoding' (thanks Alexander Vonk) <li>Improved long (-l) output to produce valid RDF/XML, and added 'et:val' </ul> <li>Improved handling of unknown XMP lang-alt tags <li>Fixed family 2 group names for a few tags </ul> <a name='v7.70'><b>Feb. 26, 2009 - Version 7.70</b></a> <ul> <li>Added a few new Nikon LensID's (thanks Robert Rottmerhusen) <li>Added a number of new CanonModelID's <li>Added ability to use -f before -listx to output 'flags' attribute <li>Added xml:lang attribute to -X output (when used with -t, -H or -D) to identify alternate language entries for XMP lang-alt tags <li>Decode Canon ImageUniqueID and added a new EasyMode value <li>Created "Unsafe" shortcut used when rebuilding JPEG EXIF metadata from scratch <li>Changed Olympus lens "pre-release" designation to "release 1" <li>Changed exiftool to continue after encountering "Error opening directory" <li>Enhanced makernote-offset-fix logic to account for problems like those caused by bugs in Picasa and ACDSee <li>API Changes: <ul> <li>Enhanced GetTagID() to also return language code in list context </ul> </ul> <a name='v7.69'><b>Feb. 17, 2009 - Version 7.69</b></a> <ul> <li>Added a new Nikon LensID (thanks Jens Kriese) <li>Added a new Pentax LensType (thanks Jens Duttke) <li>Added Extra JPEGDigest tag <li>Recognize new Panasonic APP2 MPF information written by FX40 <li>Improved -@ option to allow a UTF-8 BOM at the start of the input file <li>Augmented -listx output to include indexed value conversions <li>Changed Japanese and Chinese language codes to 'ja' and 'zh' (ISO 639-1) <li>Fixed a few problems with some CanonCustom tags </ul> <a name='v7.68'><b>Feb. 13, 2009 - Version 7.68</b></a> <ul> <li>Added French translations for XMP and Composite tags (thanks Jean Piquemal) <li>Decode Panasonic AdvancedSceneMode, added a few more SceneMode values, and fixed incorrect format for TextStamp <li>Decode a missing Canon 1DmkII custom function <li>Changed Czech language code to 'cs' (as per ISO 639-1) <li>Relaxed XMP date/time validation to allow writing year-only and year-month values (YYYY and YYYY:MM) without requiring the -n option <li>More work on language translations (this will be ongoing) <li>Fixed problem shifting XMP date/time values with missing seconds <li>Fixed some family 1 group names in -listx output </ul> <a name='v7.67'><b>Feb. 9, 2009 - Version 7.67</b> <span class=grn>(production release)</span></a> <ul> <li>IMPORTANT: Fixed bug introduced in version 7.01 which could cause corruption of TIFF-format images in very rare situations when adding tags to an image containing very large (&gt; 10 MB) binary data blocks </ul> <a name='v7.66'><b>Feb. 7, 2009 - Version 7.66</b></a> <ul> <li>Improved language support <li>Changed conversion for a couple of the EXIF Flash values <li>Removed trailing white space from Make and Model values <li>Removed null terminators that may be left on some string values <li>Fixed problem with family 1 group names for QuickTime Date tags <li>Fixed problem with invalid names being generated for some unknown tags <li>Fixed decoding of ASF PreviewMimeType and PreviewDescription <li>Fixed formatting problems with -j output when combined with some options </ul> <a name='v7.65'><b>Feb. 5, 2009 - Version 7.65</b></a> <ul> <li>Added -j option for JSON (JavaScript Object Notation) output format <li>Improved French language translation for File group (thanks Jean Piquemal) <li>Enhanced -listx option to give short output when used after -s <li>Renamed "tagid" attribute to "id" in -X output to match -listx output <li>Fixed bug introduced in 7.64 which resulted in runtime warning when extracting non-existent tags with the -f option <li>Fixed problem which could cause runtime error with -listx option on some systems </ul> <a name='v7.64'><b>Feb. 3, 2009 - Version 7.64</b> - "Babel fish"</a> <ul> <li>Added -listx and -lang options <li>Added preliminary support for the following languages (thanks Jens!): <ul> <li>en [default] <li>ch_s (thanks Haibing Zhong) [renamed 'zh_cn' in 7.75] <li>cz (thanks Petr Mich&aacute;lek) [renamed 'cs' in 7.68] <li>de (thanks Jens Duttke) <li>en_ca (for those of us who like to see "colour" spelled properly) <li>en_gb (correct "colour" plus a few other quirks) <li>es (thanks Santiago del Br&iacute;o Gonz&aacute;lez) <li>fr (thanks Bernard Guillotin) <li>it (thanks Emilio Dati) <li>jp (thanks Kazunari Nishina) [renamed 'ja' in 7.69] <li>nl (thanks Peter Moonen and Herman Beld) <li>pl (thanks Przemyslaw Sulek) </ul> <li>Added support for new XMP Windows Live Photo Gallery tags <li>Decode two new Panasonic tags and improved decoding of some others <li>Decode a few new 3rd party EXIF and IPTC tags <li>Enhanced -X output by adding -t feature for tag table information <li>Improved decoding of Photoshop ClippingPathName and remove Unknown flag <li>Renamed Panasonic EXIF "Title" tag to "PanasonicTitle" and improved decoding <li>Fixed problem which could cause crash if reading corrupted images on Windows <li>Fixed inconsistencies rewriting XMP which uses extra rdf:Description elements instead of rdf:parseType='Resource' attribute <li>Fixed decoding of Nikon D40 RemoteOnDuration <li>API Changes: <ul> <li>Added Lang option </ul> </ul> <a name='v7.63'><b>Jan. 23, 2009 - Version 7.63</b></a> <ul> <li>Added new Composite tags: SubSecCreateDate and SubSecModifyDate <li>Decode Sony DSLR WB_RGBLevels tags (thanks Andrey Tverdokhleb) <li>Decode a few more NikonScan tags (thanks Brendt Wohlberg) <li>Included new argument files in distribution: xmp2exif.args and exif2xmp.args <li>Improved decoding of PentaxModelID for K-m and K2000 <li>Minor change to decoding of Canon 1DmkIII ISOSpeedRange <li>Downgrade "MRW format error" to a warning when reading ARW images containing MRW information that has been corrupted by the Sony IDC utility <li>Renamed Kodak SubSecTime tag to Time <li>Changed Composite DateTimeCreated tag to use only IPTC tags <li>Changed name of Sony/Minolta MRW WBLevels tag to reflect ordering of color components <li>Fixed problems recognizing some MP3 files </ul> <a name='v7.62'><b>Jan. 16, 2009 - Version 7.62</b></a> <ul> <li>Decode a number of new tags for recent Canon EOS models <li>Decode ID3v2.3 Compilation tag (written by iTunes) <li>Added a number of new ID3 genre's and improved ID3v2 genre conversion <li>Avoid converting MIE ISO 8859-1 string values <li>Enhanced XML output (-X) to work with binary data (-b) option and encode values in base64 if necessary <li>Fixed problem with invalid UTF-8 when writing XMP or using -X (XML) option </ul> <a name='v7.61'><b>Jan. 10, 2009 - Version 7.61</b></a> <ul> <li>Added a new Pentax LensType and a new PentaxModelID (thanks Denis Bourez) <li>Added ability to copy makernotes from Pentax or Samsung native DNG image <li>Decode makernotes in Samsung GX model DNG images <li>Decode CameraTemperature for Canon EOS cameras with Live View (thanks Karl-Heinz Klotz) <li>Decode a number of Canon 5DmkII CameraInfo tags <li>Included 2 new argument files in distribution: xmp2gps.args and gps2xmp.args <li>Prevent writing of TIFF images containing the obsolete (and unsupported) TIFF 6.0 JPEG extensions <li>Fixed bug which could result in runtime warning when writing makernotes as a block </ul> <a name='v7.60'><b>Jan. 6, 2009 - Version 7.60</b> <span class=grn>(production release)</span></a> <ul> <li>Decode a few more Nikon D700 FlashInfo tags (thanks Jens Duttke) <li>Defined (empty) XMP-pdfx tag table, mainly for documentation purposes <li>Fixed problem where the behaviour of -tagsFromFile changed to that of -addTagsFromFile if the first specified tag was an exclusion <li>Fixed XMP writer to allow a namespace to be deleted after a mass copy <li>Fixed bug introduced in 7.58 which could cause hang when using -tagsFromFile </ul> <a name='v7.59'><b>Dec. 23, 2008 - Version 7.59</b></a> <ul> <li>Removed file size limit when setting tag value from contents of a file </ul> <a name='v7.58'><b>Dec. 22, 2008 - Version 7.58</b></a> <ul> <li>Added new Canon, Nikon and Olympus lenses (thanks Jan Boelsma and Geert De Soete) <li>Added write support for FujiFilm S5000 Ver3.00 and S9500 Ver1.01 RAF images <li>Extract RAFVersion tag from FujiFilm RAF images <li>Decode ColorBalance information for PowerShot G10 <li>Decode Sharpness for Canon EOS 50D <li>More improvements to Canon 50D and 5DmkII makernote decoding <li>Attempt to identify unknown Nikon lenses which exist in LensID list with a different LensIDNumber (to patch Sigma lens renumbering debacle) <li>Removed limit of 1000 items in an XMP list-type tag when writing <li>Increased maximum size of file from 16MB to 100MB when setting tag value from the contents of a file <li>Improved performance when extracting a large number of same-named tags <li>Fixed bug which resulted in "segment too large" error message when rewriting multi-segment XMP if XMP was edited but nothing was actually changed </ul> <a name='v7.57'><b>Dec. 11, 2008 - Version 7.57</b></a> <ul> <li>Added read support for Panasonic RW2 raw images (and extract meta information from embedded PreviewImage as Doc1) <li>Added new Pentax K-m PictureModes and new PentaxModelID for the Optio S12 <li>Decode ColorBalance information for Canon 50D and 5DmkII <li>Decode Panasonic RAW/RW2 information from DNG images <li>Decode Canon SRAWQuality tag <li>Recognize DCP (DNG Camera Profile) files <li>Updated Canon CustomFunctions for the EOS 5D Mark II <li>Changed name of "OtherImage" tags to "JpgFromRaw" in IFD0 of SR2 and ARW images, and to "ThumbnailImage" in IFD0 of MRW images <li>Changed EXIF DeviceSettingDescription and ProfileLookTableData to binary data tags <li>Fixed problem reading/writing ThumbnailImage in Minolta A200 MRW images <li>Fixed ColorBalance2 tags for AsShot and Auto modes of Canon 1DmkII/1DSmkII </ul> <a name='v7.56'><b>Dec. 2, 2008 - Version 7.56</b></a> <ul> <li>Decode CompressorVersion from Canon 5D Mark II videos <li>Fixed family 1 group classifications for tags in QuickTime video tracks <li>Fixed problem with new -sep feature when separator contained spaces </ul> <a name='v7.55'><b>Dec. 2, 2008 - Version 7.55</b></a> <ul> <li>Added a number of new CanonVRD tags for DPP 3.4/3.5 (thanks Bogdan) <li>Added a new FocusMode for the Pentax K-m <li>Added a new Nikon LensID (thanks Niels Kristian) <li>Decode some tags from Kodak C1013 maker notes (type 9) <li>Enhanced -sep option to allow list-type tag values to be split when writing <li>API Changes: <ul> <li>Added ListSplit option </ul> </ul> <a name='v7.54'><b>Nov. 26, 2008 - Version 7.54</b></a> <ul> <li>Added a few old XMP-crs tags that were missed <li>Show numerator and denominator for rational EXIF values in verbose mode <li>Changed htmldump tooltip font <li>Fixed bugs in HTML reader that could cause runtime error or hang </ul> <a name='v7.53'><b>Nov. 19, 2008 - Version 7.53</b></a> <ul> <li>Added read/write support for EXIF files <li>Added ability to write EXIF as a block (finally!) <li>Added ability to write CanonVRD information to MIE files <li>Added timezone to "Now" tag value <li>Added a new CanonModelID (FS100) <li>Added write support for ACDSee XMP tags (XMP-acdsee:RPP) <li>Added a few new XMP-cc tags <li>Decode CameraOrientation for a number of Canon EOS models (thanks Bogdan) <li>Allow XMP to be copied as a block with -tagsFromFile option <li>Highlight odd value offsets in -htmldump output <li>Improved htmldump tooltip display <li>Minor improvements to MIE reader <li>API Changes: <ul> <li>The full XMP block is now extracted with the Binary option, so the XMP block is marked as "unsafe" and the Protected flag must be set (as with other writable blocks) when calling SetNewValue() </ul> </ul> <a name='v7.52'><b>Nov. 4, 2008 - Version 7.52</b></a> <ul> <li>Added ability to extract AI private data from PDF files <li>Added extract embedded option (-ee, -extractEmbedded) <li>Added new group family 3 and ability to specify multiple group names for a single tag when extracting information <li>Added a new Sony lens and decode two new Sony tags (thanks Jens Duttke) <li>Added a few new Nikon LensID's (thanks Robert Rottmerhusen) <li>Added a new Olympus LensType (thanks Michael Meissner) <li>Decode a few new Nikon tags (thanks Jens Duttke) <li>Enhanced command line parsing to allow long names for most options <li>Improved verbose output when writing makernotes <li>Allow writing of empty string values in EXIF information <li>Fixed problem rewriting XMP lists that contained no entries <li>Fixed bug writing JpgFromRaw and ThumbnailImage to CRW files that could make the image unreadable by Canon utilities (affected images may be repaired by rewriting the same tag with this version of exiftool) <li>Fixed bug where some Canon MakerNote values could not be written <li>Fixed bug introduced in version 7.49 that broke the use of wildcards in filenames for the Windows version <li>API Changes: <ul> <li>Enhanced a number of functions to accept multiple group names separated by colons </ul> </ul> <a name='v7.51'><b>Oct. 27, 2008 - Version 7.51</b> <span class=grn>(production release)</span></a> <ul> <li>Fixed problems which caused failed test or warning with Perl 5.6 or older (does do not affect Mac or Windows versions) <li>Fixed Windows application so help is displayed when run with no options </ul> <a name='v7.50'><b>Oct. 26, 2008 - Version 7.50</b> <span class=grn>(production release)</span> "XMP 2008"</a> <ul> <li>Added a number of new XMP tags from new XMP specification released Oct. 17 <li>Added support for extended XMP segment in JPEG images (as per new XMP spec) <li>Added a number of new Minolta/Sony lenses (thanks Jens Duttke) <li>Added a new Canon LensType (thanks Andreas Huggel and Pascal de Bruijn) <li>Added new PRISM 2.1 XMP tags <li>Added ability to read/write x:xmptk attribute (via XMP-x:XMPToolkit tag) <li>Added ability to specify user-defined Lenses <li>Decode XMP in ASF (WMA/WMV), FLV, SWF and MP4 audio and video files <li>Preserve byte order of EXIF information when copying to MIE file <li>Allow byte order for newly created MIE files to be set by ExifByteOrder tag (and API ByteOrder option) <li>Allow backslashes in filenames on non-Windows-like systems <li>Removed 's' from XMP-xmp:Thumbnails tag names and set Avoid flag for XMP-xmp:ThumbnailImage <li>Fixed definitions of some XMP-xmpDM tags <li>Fixed some PDF reader bugs (thanks Leonhard Zachl for one patch) <li>API Changes: <ul> <li>Added ExtractEmbedded option </ul> </ul> <a name='v7.49'><b>Oct. 16, 2008 - Version 7.49</b></a> <ul> <li>Added new PentaxModelID for K-m/K2000 plus a new LensID used by K-m <li>Added --a option and made -a the default behaviour for the -X option <li>Added ability to read/write XMP-rdf:about attribute <li>Added new "Resource" flag which may be set in user-defined XMP tags to write a value as an rdf:resource instead of a normal string <li>Allow decimal (real) values to be written to XMP-xmp:Rating (contrary to current XMP specification, but as per MWG recommendation) <li>Fixed file renaming bug in Windows that caused the file to be moved into the current directory instead of leaving it in the original directory when the source file was specified using backslashes as directory separators </ul> <a name='v7.48'><b>Oct. 14, 2008 - Version 7.48</b></a> <ul> <li>Added support for XMP PRISM 2.0 schema tags <li>Added two more ZIP compression types <li>Added conversions for XMP-plus date tags <li>Changed conversion of all Digest tags to make the -n value readable <li>Changed some error handling to avoid generating console warnings </ul> <a name='v7.47'><b>Oct. 11, 2008 - Version 7.47</b> - "Jumbo"</a> <ul> <li>Added -X option to output extracted information in XML format <li>Added -listwf option to list extensions of writable files <li>Added a number of new Nikon and Pentax LensTypes (thanks Robert Rottmerhusen, Jens Duttke and Bozi) <li>Decode Canon 1000D custom functions <li>Decode a number of new tags written by Nikon Capture NX 2 <li>Decode many FlashInfo tags for the Nikon D90 and D700 <li>Implemented character set translation for MIE information (-L option) <li>Improved speed when scanning unknown file to determine FileType <li>Fixed bug where some writable EXIF tags gave a "not writable" message when reading tag value from a dynamic file (eg. "-TAG&lt;=%f.txt") <li>Fixed problem double-escaping characters when -h and -S were used together <li>Fixed decoding of Nikon FlashModel for SU-800 Remote Commander <li>Fixed swapped Nikon FlashGroupBControlMode/FlashGroupCControlMode tags <li>Fixed bug reading PDF files that could cause "Argument isn't numeric in subtraction" warning (note that writing PDF files with this problem could cause format errors which may be fixed by reverting with "-pdf-update:all=") <li>API Changes: <ul> <li>Fixed CanWrite() to be consistent with documentation </ul> </ul> <a name='v7.46'><b>Oct. 2, 2008 - Version 7.46</b></a> <ul> <li>Fixed bug which could cause a runtime warning when writing images in a directory containing an unrecognized file type <li>Fixed an IPTC-XMP test that failed in other time zones (this was a test problem, not an exiftool bug) </ul> <a name='v7.45'><b>Oct. 1, 2008 - Version 7.45</b></a> <ul> <li>Added support for new XMP IPTC Extension 1.0 tags (rev 2) <li>Added a few more TIFF Compression values (for MDI files) <li>Decode a few new Nikon Flash tags <li>Decode Canon 50D custom functions <li>Calculate CurrentIPTCDigest tag (if Digest::MD5 is available) <li>Renamed Photoshop CaptionDigest tag back to IPTCDigest again <li>Avoid touching IPTC data block when only Photoshop information is changed <li>Allow IPTCDigest to be set to the special value of 'new', representing the new IPTC digest of the output file <li>Updated iptc2xmp.args and xmp2iptc.args to write IPTCDigest as per MWG recommendation <li>Allow zone-less date/time values in XMP (as per MWG and upcoming XMP spec) <li>Allow brackets in $$ and $/ expressions (eg. ${$} and ${/} now work) <li>Changed decoding of EXIF:Copyright to allow two separate strings as per spec <li>Changed a number of XMP Iptc4xmpCore tag names and added a corresponding set of aliases (shortcuts) for backward compatibility <li>Changed some XMP xmpTPg tag names <li>Fixed problem extracting lists from other information types in MIE files </ul> <a name='v7.44'><b>Sept. 26, 2008 - Version 7.44</b></a> <ul> <li>Added read support for DjVu images <li>Added two new Sony LensType's (thanks Mladen Sever) <li>Added a new Pentax LensType (thanks Jens Duttke) <li>Decode a few new Canon 450D and 1000D tags (thanks Bogdan) </ul> <a name='v7.43'><b>Sept. 17, 2008 - Version 7.43</b></a> <ul> <li>Added two new Pentax LensTypes (thanks Jens Duttke and Anton Bondar) <li>Added PentaxModelID's for the Optio E60 and M60 <li>Added a number of new CanonModelID's <li>Extract XMP from MOV and AVI videos (as written by Adobe CS3 Bridge) <li>Decode information from QuickTime HintInfo atoms (hinf and hnti) <li>Decode Canon 50D/5DmkII AutoLightingOptimizer <li>Enable writing of ThumbnailImage in CR2 images <li>Avoid extracting invalid Canon FocusDistance tags <li>Improved handling of timezones in date/time values (fixes failed EXE test) </ul> <a name='v7.42'><b>Sept. 11, 2008 - Version 7.42</b></a> <ul> <li>Added read support for Windows, MacOS and Unix executable and library files <li>Added read support for ZIP and RWZ (Rawzor) compressed files <li>Added a number of new XMP tags written by PS Elements 4.0 (thanks Drew Holland) and LightRoom 2.0 <li>Added new Sony, Canon and Nikon LensTypes (thanks Jens Duttke and Werner Kober) <li>Decode a few new Canon CameraInfo tags for the 40D, 50D, 450D and 1000D (thanks D.J. Cristi) <li>Decode Nikon D90 LensData <li>Define version number etc. in properties of exiftool Windows executable <li>Improved handling of corrupted makernote offsets when writing <li>Fixed problem where FileType could be incorrect for a TIFF-based file with the wrong extension </ul> <a name='v7.41'><b>Aug. 28, 2008 - Version 7.41</b></a> <ul> <li>Added new Composite LensID tag and changed a number of LensType values in an attempt to disambiguate Canon, Pentax, Minolta and Sony 3rd party lenses <li>Added -sep option to specify separator for values in list-type tags <li>Added a new Nikon LensID (thanks Jens Duttke) <li>Added CanonModelID values for new models (SX110, A1000, A2000, E1, 50D) <li>Decode some CameraInfo tags of the Canon EOS 450D and 1000D (thanks Bogdan) <li>Decode a few new tags in Kodak MOV videos <li>Updated CanonVRD decoding for version 3.40 (DPP 3.4.1, thanks Bogdan) <li>Allow writable EXIF properties to be overridden by user-defined tags <li>Relaxed PDF parsing to allow xref tables with zero entries <li>Renamed Sigma LensID tag to LensType <li>Changed PDF update structure to better conform with PDF specification <li>Changed conversion of Olympus ManometerReading values <li>Reverted back to Perl 5.8 for Windows EXE version (fixes problem running exiftool.exe using a non-standard TEMP directory) <li>Patched DST problem in Windows when "Automatically adjust clock for daylight savings time" is used in Windows Date and Time settings <li>Fixed problems in the QuickTime parser that could cause exiftool to hang <li>Fixed bug which could cause an error to be reported when writing a DNG image containing ProfileIFD information <li>API Changes: <ul> <li>Added ListSep option </ul> </ul> <a name='v7.40'><b>Aug. 17, 2008 - Version 7.40</b></a> <ul> <li>Fixed -p option in Windows executable version (caused by packaging problem with Perl 5.10 release) </ul> <a name='v7.39'><b>July 30, 2008 - Version 7.39</b></a> <ul> <li>Added a number of new Canon LensType values (thanks Rich Taylor) <li>Added a new Pentax LensType (thanks Jens Duttke) <li>Added a new Sony LensType (thanks Mladen Sever) <li>Added support for writing invalid IFD entries used by some Kodak Z cameras <li>Updated Canon CustomFunctions for EOS 450D <li>Made a few more DNG tags writable <li>Renamed CIFF TvValue and AvValue tags to ShutterSpeedValue and ApertureValue and added conversions (to seconds and F-number) as with EXIF tags </ul> <a name='v7.38'><b>July 18, 2008 - Version 7.38</b></a> <ul> <li>Same as version 7.37 except that Windows executable is packaged with Perl 5.10.0 instead of 5.8.7 -- this fixes a problem with FileModifyDate and DST </ul> <a name='v7.37'><b>July 16, 2008 - Version 7.37</b></a> <ul> <li>Added -addTagsFromFile option (variant of -tagsFromFile which allows copying multiple tags into the values of a single list-type tag) <li>Added a new Sony LensID (thanks Jens Duttke) <li>Added PentaxModelID for the Optio W60 <li>Added a couple of new YCbCrSubSampling values (thanks Jens Duttke) and made values consistent across different types of meta information <li>Decoded Canon Categories tag (thanks Darryl Zurn) <li>Reduced priority of XMP-xmp date/time tags so the EXIF tags are preferred <li>Fixed problem where time may be duplicated in Composite:DateTimeCreated <li>API Changes: <ul> <li>Added ability to pass options to SetNewValuesFromFile </ul> </ul> <a name='v7.36'><b>July 8, 2008 - Version 7.36</b></a> <ul> <li>Added a new Nikon LensID (thanks Jens Duttke) <li>Fixed bug introduced in 7.33 where a SubIFD error was erroneously reported when writing an already edited NEF image </ul> <a name='v7.35'><b>July 6, 2008 - Version 7.35</b></a> <ul> <li>Added two new Nikon LensIDs (thanks Geert De Soete and Jens Duttke) <li>Added XMP-pdf:Trapped tag <li>Added Composite:GPSAltitude tag (like Composite:GPSLatitude/GPSLongitude) <li>Added a couple of new PentaxModelID values <li>Decode Canon 450D Sharpness tag (thanks Bogdan) <li>Decode Nikon D300 AFAreaMode and AutoFocus tags (thanks Jens Duttke) <li>Extract Pentax SaturationInfo as an Unknown tag (thanks Dave Nicholson) <li>Renamed Canon LensType string tag (ID 0x0095) to LensModel <li>Changed JFIFVersion print conversion to match the formatting used in the JFIF specification <li>Fixed a Minolta LensID entry for Tamron lenses <li>Fixed problem excluding XMP family 1 groups from deletion in some file types </ul> <a name='v7.34'><b>June 28, 2008 - Version 7.34</b></a> <ul> <li>Added names for a few more of the Unknown Photoshop tags <li>Added support for XMP files with leading XML comments <li>Added support for older XMP "x:xapmeta", and XMP without "x:xmpmeta" element <li>Changed priority of XMP:Source tags when writing so XMP-photoshop:Source is now preferred over XMP-dc:Source <li>Renamed Photoshop IPTCDigest to CaptionDigest and removed Unknown status <li>Improved parsing of IPTC time values when writing, and assume the local timezone (if available) instead of UTC when a timezone is not specified <li>Improved handling of lists that exist in multiple groups in the same file <li>Disabled shifting of list-type date/time tags (allows += to add list items) <li>Reduced priority of XMP-exif and XMP-tiff tags so these values don't override more reliable EXIF and TIFF tags when extracting information without specifying a group <li>Fixed quirk where exiftool could add an extra padding byte to the makernotes <li>Fixed incorrect tag ID that prevented ImageStabilization from being decoded in Sony DSLR-A100 images (thanks Ger Vermeulen) <li>Fixed problem where error/warning messages could be duplicated for subsequent files when copying tags from multiple files </ul> <a name='v7.33'><b>June 21, 2008 - Version 7.33</b></a> <ul> <li>WARNING: Older ExifTool versions will not properly rewrite DNG 1.2 images which contain multiple color profiles <li>Added DNGVersion check to avoid future problems with major DNG revisions <li>Added support for new DNG version 1.2.0.0 tags <li>Added support for XMP PLUS License Data Format 1.2.0 tags <li>Added a new Pentax LensType (thanks Peter) <li>Added a new Canon LensType <li>Added support for user-defined XMP structures <li>Decode a few new Sony tags (thanks Marcus Holland-Moritz) <li>Decode Nikon Capture NX 2 NikonICCProfile information (thanks Jens Duttke) <li>Extract MP3 VBR and ID3Size tags <li>Improved accuracy of MP3 Duration calculation (account for VBR and ID3Size) </ul> <a name='v7.32'><b>June 12, 2008 - Version 7.32</b></a> <ul> <li>Added a new Pentax LensType (thanks yeryry) <li>Decode ColorBalance information for Canon 450D and 1000D <li>Fixed names of a few NikonCapture D-LightingHQ tags (thanks Jens Duttke) <li>Fixed bug where a list-type tag was not created when simultaneously adding and deleting values from the list </ul> <a name='v7.31'><b>June 10, 2008 - Version 7.31</b></a> <ul> <li>Added proper support for special characters in PDF text strings <li>Added support for a number of new XMP tags written by Adobe Lightroom 1.4 <li>Added ability to write XMP-xmp:ThumbnailsImage <li>Added Photoshop IPTCDigest tag <li>Added two new Nikon LensID's (thanks Jens Duttke) <li>Added a new Pentax LensType (thanks Bogdan) <li>Added a new CanonModelID for the EOS 1000D <li>Decode a few new Pentax tags (thanks Dave Nicholson) <li>Increased precision of GPS coordinates when copying with -tagsFromFile <li>Fixed problem which could result in "Argument isn't numeric" runtime warning when attempting to write an Unknown value to a bitmapped tag </ul> <a name='v7.30'><b>May 31, 2008 - Version 7.30</b> <span class=grn>(production release)</span></a> <ul> <li>Adjusted MakerNote error checks to be a compromise between 7.28 and 7.29 <li>Fixed various htmlDump problems <li>Fixed bug which could cause runtime warnings when attempting to write certain types of unsupported images </ul> <a name='v7.29'><b>May 28, 2008 - Version 7.29</b></a> <ul> <li>Renamed Pentax ModelRevision tag to ProductionCode and improved print conversion to indicate if camera has been serviced <li>Added check to prevent EXIF tags from being written to JPEG images if they would obviously exceed the maximimum JPEG segment size limit <li>Relaxed error checks when writing JPEG images to allow MakerNotes to be rebuilt if the MakerNote IFD is not contained within the MakerNotes data <li>Fixed decoding of Pentax ExternalFlashGuideNumber when AF360 is used with the wide angle panel <li>Fixed unnecessary "Multiple new values for IFD0 tag 0x927c" warning which could occur when copying MakerNotes from some images </ul> <a name='v7.28'><b>May 26, 2008 - Version 7.28</b></a> <ul> <li>Added new Canon CustomFunctions values from the EOS 1DmkIII firmware update, and a new CanonExposureMode value (thanks David Pitcher) <li>Added a new Olympus LensType (thanks &#1042;&#1080;&#1082;&#1090;&#1086;&#1088; &#1051;&#1091;&#1096;&#1085;&#1080;&#1082;&#1086;&#1074;) <li>Decode Pentax ExternalFlashBounce tag (thanks Cvetan Ivanov) <li>Renamed Pentax ExternalFlashZoom tag to ExternalFlashGuideNumber and improved decoding (thanks Cvetan Ivanov) <li>Fixed bug which could prevent maker notes from being copied when copying all tags from a file containing a PreviewImage <li>Fixed problems decoding some Sony ARW images <li>Fixed problem writing some makernote values in sub-IFD's <li>Fixed "APP1 segment too large" problem where PreviewImage was not dropped as it should have been when copying all tags from some RAW images </ul> <a name='v7.27'><b>May 24, 2008 - Version 7.27</b> - "GIF+XMP"</a> <ul> <li>Added ability to read/write XMP in GIF images <li>Added ability to write to GIF87a images (by upgrading them to GIF89a) <li>Added GIFVersion tag <li>Improved decoding of Canon 1DmkIII/1DSmkIII TimeStamp tags <li>Changed print conversion of EXIF/XMP GPSStatus tags to make more sense <li>Fixed bug introduced in version 7.22 that could cause exiftool to abort with an "'x' outside string" error when processing some DNG images <li>API Changes: <ul> <li>Extract FileSize information from images passed as a scalar reference </ul> </ul> <a name='v7.26'><b>May 21, 2008 - Version 7.26</b></a> <ul> <li>Added write support for FujiFilm FinePix S5 Pro V1.04 RAF images <li>Added support for new Kodak TIFF-format maker notes used by the Z1085 <li>Added new Pentax and Nikon LensType's (thanks Jens Duttke, Dave Nicholson and Robert Rottmerhusen) <li>Added some new Minolta LensID's (thanks Thomas K&auml;&szlig;ner) <li>Added new CanonModelID's and a 1DmkIII TimeStamp (thanks Ger Vermeulen) <li>Decode a number of new Pentax K10D tags (thanks Dave Nicholson) <li>Decode Panasonic Title tag (thanks Jens Duttke) <li>Recognize a few more uncommon top-level QuickTime atoms <li>Changed decoding of some Olympus tags for new E-520 <li>Changed warning when empty PrintIM data is encountered (eg. as written in Sony A700 ARW files when Adobe RGB color mode is used) <li>Dropped Canon PreviewFocalPlaneX/YResolution tags since they never really existed (thanks Ger Vermeulen for pointing out the Canon bug which lead to this false assumption) <li>Fixed duplicate tag problem with Pentax LensData when -U option used <li>Fixed bug which could cause a runtime warning when copying Nikon maker notes <li>Fixed bug in exiftool application which could cause all tags to be copied instead of just the specified tags when creating an output XMP or MIE file and using the -tagsFromFile option </ul> <a name='v7.25'><b>Apr. 18, 2008 - Version 7.25</b> <span class=grn>(production release)</span></a> <ul> <li>Added read support for DIVX video files <li>Added a new Nikon LensID (thanks Tanel Kuusk) <li>Decode a number of new Pentax K10D tags and values (thanks Dave Nicholson) <li>Decode a few new Nikon tags (thanks Jens Duttke) <li>Decode Nikon VignetteControl tag found in D3 images with new 1.10 firmware (thanks Alexandre Naaman) <li>Improved formatting of video duration times <li>Improved print conversion for video Compression values <li>Apply print conversion for XMP:FocalLengthIn35mmFormat to add "mm" <li>Fixed MIME type of JPEG 2000 images <li>Fixed problem decoding new Nikon D300 AFPrioritySelection tags <li>API Changes: <ul> <li>Fixed CanWrite so it returns false for non-writable TIFF-based files </ul> </ul> <a name='v7.24'><b>Apr. 10, 2008 - Version 7.24</b></a> <ul> <li>Added read support for SVG (Scalable Vector Graphics) images <li>Added support for non-standard Apple iPhone PNG images <li>Added support for ISL maker note format <li>Added a couple of new Olympus LensType's <li>Added a few new Nikon LensID's (thanks Robert Rottmerhusen) <li>Added values for various Sony tags (thanks Jens Duttke) <li>Decode Nikon D300 custom settings (thanks Jens Duttke) <li>Decode Nikon D300 AFFineTuneAdj (thanks Neil Nappe) <li>Decode a number of new Pentax tags and values (thanks Jens Duttke) <li>Decode a number of new QuickTime tags, including 'mdta' information <li>Decode a missing Custom Function for Canon 450D <li>Avoid extracting any unknown tag in binary data tables when -u option used <li>Avoid writing Canon 1D/1DS RAW images masquerading as TIF (writing 1D RAW images is not yet supported) <li>Improved parsing of AFCP ThumbnailImage and PreviewImage <li>Downgraded errors in the NikonScan and NikonPreview IFD's to allow writing of images with these problems without requiring the -m option </ul> <a name='v7.23'><b>Mar. 27, 2008 - Version 7.23</b></a> <ul> <li>Decode a number of new Pentax K20D/K200D tags and values <li>Fixed bug introduced in 7.18 which caused "Error parsing XMP" warning when deleting all XMP and writing new XMP tags in the same step </ul> <a name='v7.22'><b>Mar. 25, 2008 - Version 7.22</b></a> <ul> <li>Added support for Olympus-style Sony makernotes (DSC-S45/500/650/700/750) <li>Added %c 'n' modifier to number output files from 1 instead of 0 <li>Added Extra "Now" tag used for setting a tag value to the current date/time <li>Added a new Nikon LensID (thanks Jens Duttke) <li>Added ability to specify byte order for EXIF Unicode text and fixed problem where text wasn't always written in EXIF byte order by default <li>Added a new Canon LensType (thanks Hal Williamson) <li>Added a few new CanonModelID values <li>Decode a new Pentax K20D tag and add a few new values to other tags (thanks Jens Duttke) <li>Recognize non-standard Nikon ICC Profile files <li>Improved error checking when writing a JPEG image with a bad IFD <li>Fixed bug where IFD0 could be deleted when writing JPEG with a bad IFD1 <li>Fixed some Olympus LensType names for Leica lenses <li>Fixed problem extracting some writable directories as a block <li>Fixed bug which could cause "Not an ARRAY" error when reading PDF files </ul> <a name='v7.21'><b>Mar. 12, 2008 - Version 7.21</b> <span class=grn>(production release)</span></a> <ul> <li>Added support for Leica M8 maker notes (in both DNG and JPEG images) <li>Added ability to write encrypted Nikon makernote information (!!) <li>Added a new Olympus Leica lens (thanks Chris Shaw) <li>Decode a couple of new Canon 40D and 1DmkIII tags (thanks Chris Huebsch) <li>Decode Adobe RAF data in DNG images <li>Decode a few new Nikon D3 and D300 tags (thanks Jens Duttke) <li>Calculate VideoFrameRate for QuickTime MOV videos <li>Marked DNG OriginalRawFileName and OriginalRawFileData as "unsafe" to copy <li>Changed decoding of Casio BestShotMode <li>Renamed Nikon NEFCurve tags (thanks Jens Duttke) <li>Patched problem parsing OriginalDecisionData for the Canon EOS 5D </ul> <a name='v7.20'><b>Mar. 7, 2008 - Version 7.20</b></a> <ul> <li>Added a few new Minolta LensID's <li>Added two more TIFF-IT tags to the EXIF table <li>Added a number of new RIFF and ASF Audio Encoding values <li>Added a new new values for some Canon tags (thanks Dave Nicholson) <li>Decode a number of new Pentax K10D tags (thanks Dave Nicholson) <li>Decode a number of new MP4/QuickTime tags <li>Decode makernotes in Casio, Kodak, Minolta, Olympus and Ricoh AVI and MOV videos <li>Improved decoding of Casio maker notes and decode a few new tags (thanks Jens Duttke) <li>Removed incorrect CanonD30 ColorTemperature and ColorMatrix tags <li>Fixed Location translation in iptc2xmp.args and xmp2iptc.args <li>Fixed problem decoding some Nikon tags in images edited by Capture NX <li>Fixed decoding of InternalSerialNumber for Canon 5D <li>Fixed decoding of Nikon D3 color balance information <li>Fixed decoding of Minolta 7D FocusMode (thanks Jens Duttke) </ul> <a name='v7.19'><b>Feb. 25, 2008 - Version 7.19</b></a> <ul> <li>Added a new Pentax LensType and some new Panasonic NoiseReduction values (thanks Jens Duttke) <li>Decode Nikon D40 and D40X custom settings plus a couple of other tags <li>Decode a couple of new Pentax K10D tags (thanks Dave Nicholson) <li>Improved reliability of Canon FocalPlaneXSize and FocalPlaneYSize tags <li>Recognize HP Type2 maker notes in images from other makes <li>Write TIFF ApplicationNotes in 'int8u' format as per XMP specification <li>Made TIFF ApplicationNotes writable as a block <li>Changed HtmlDump to show actual IFD format if different than read format <li>Changed some MeteringMode strings to be more consistent <li>Fixed problem adding back JFIF information after deleting JFIF group </ul> <a name='v7.18'><b>Feb. 21, 2008 - Version 7.18</b></a> <ul> <li>Added ability to exclude XMP family 1 groups from deletion <li>Added patch to recognize new Ricoh R50 maker notes <li>Added a new Minolta LensID (thanks Jens Duttke) <li>Decode AFPointsUsed for Nikon D3 and D300 (thanks Jens Duttke) <li>Decode a couple of new Pentax K10D tags (thanks Dave Nicholson) <li>Improved decoding of Nikon FlashInfo tags (thanks Jens Duttke) <li>Renamed Olympus FlashExposureCompensation tag to FlashExposureComp <li>Patched problem with Perl 5.10.x which broke conversion of UTF8 strings <li>Fixed problem where an ExposureTime of 1 second was ignored in CRW images <li>Fixed problem where special characters were not handled properly when using the -L option while copying IPTC tags <li>Fixed bug which could cause a runtime error when attempting to write JFIF information after deleting JFIF:all in the same step </ul> <a name='v7.17'><b>Feb. 16, 2008 - Version 7.17</b></a> <ul> <li>Extract duplicate tags when -p option is used <li>Fixed bug introduced in 7.00 which broke the use of group family numbers and groups ending with a digit in tag format strings (eg. "$IFD0:Model") </ul> <a name='v7.16'><b>Feb. 14, 2008 - Version 7.16</b></a> <ul> <li>Added a couple of new Pentax LensTypes (thanks Jens Duttke) <li>Added a few more EXIF:Compression values <li>Decode color balance levels in Leaf MOS images <li>Decode a number of new tags from JPEG, TIFF, KDC and DCR images of older Kodak models <li>Improved decoding of TIFF SampleFormat tag <li>Made a number of DNG tags "unsafe" so they aren't copied by default <li>Allow JPEG EXIF segment to be deleted and a new EXIF segment to be created with a different byte order in a single command <li>Attempted to improve reliability of ScaleFactor35efl calculation for newer Canon models <li>Fixed a couple more places where we still needed a space before "mm" <li>Fixed problem with LightValue calculation which caused failed tests for Perl 5.6.2 on Darwin </ul> <a name='v7.15'><b>Feb. 5, 2008 - Version 7.15</b> <span class=grn>(production release)</span></a> <ul> <li>Added a few new CanonModelID's and PentaxModelID's <li>Added support for new Pentax K20D/K200D values for some tags <li>Added a few new Nikon LensID's (thanks Robert Rottmerhusen) <li>Decode a few new Sigma tags, including PreviewImage <li>Decode a few more tags in Canon CRW images (thanks Dave Nicholson) <li>Improved Sony ARW parsing (fix some problems and extract more tags) <li>Improved handling of timezone when writing EXIF and XMP information (the timezone is now added to XMP date/time values and removed from EXIF date/time values if necessary unless the -n option is used) <li>Recognize a few more FLV AudioEncoding and VideoEncoding values <li>Allow "pseudo" tags to be copied from unrecognized file types <li>Made FileModifyDate an "unsafe" tag so it isn't copied unless specified <li>Changed all "sec" units to "s" with a leading space for consistency <li>Fixed bug introduced in version 6.91 that could prevent some XMP date/time tags from being written when copying with "-all:all" </ul> <a name='v7.14'><b>Jan. 25, 2008 - Version 7.14</b></a> <ul> <li>Added read support for Kodak KDC raw images <li>Added ability to read/write Canon OriginalDecisionData in JPEG, CR2 and DNG images <li>Added ValueConv translations for some of the new Nikon PictureControl tags <li>Decode a number of new Nikon tags (thanks Jens Duttke and Gregor Dorlars) <li>Decode Canon CR2Segmentation tag <li>Decode a new Canon CustomFunction of the EOS 450D <li>Improved handling of mandatory tags in EXIF information <li>Changed all FocalLength print conversions to add a space before "mm" <li>Renamed Canon Self-timer tags to SelfTimer for consistency <li>Fixed some problem with -htmlDump for some types of trailer information <li>Fixed problem which could give a runtime warning when attempting to delete a permanent tag </ul> <a name='v7.13'><b>Jan. 17, 2008 - Version 7.13</b></a> <ul> <li>Decode a couple more Nikon and Sony tags <li>Decode Windows HD Photo "Padding" tag <li>Recognize HDP (Windows HD Photo) file extension <li>Designated EXIF CompressedBitsPerPixel and ComponentsConfiguration as "unsafe" tags so they aren't copied by -tagsFromFile by default <li>Changed priority of new Nikon D3/D300 ISO tag <li>Changed Canon LensType for a Tamron lens (thanks Monica Wallek) <li>Fixed incorrect TagID for new Panasonic Sharpness tag </ul> <a name='v7.12'><b>Jan. 15, 2008 - Version 7.12</b></a> <ul> <li>Added read support for ITC (iTunes Cover Flow) files <li>Added ability to deal with corrupted IPTC written by Nikon Capture NX <li>Added a few new Canon LensType's (thanks Steve Balcombe) <li>Decode a number of new Nikon D3/D300 tags (thanks Gregor Dorlars) <li>Decode a number of new FujiFilm and Panasonic tags and values <li>Decode ColorBalance information for the Canon 40D, 1DmkIII and 1DSmkIII <li>Improved decoding of Nikon D80 VibrationReduction tag (thanks Jens Duttke) <li>Renamed Pentax WBShiftBA and WBShiftGM tags to WBShiftAB and WBShiftMG (now more consistent with Pentax software, but inconsistent with Canon naming) <li>Fixed a CanonImageHeight tag which was incorrectly named CanonImageWidth </ul> <a name='v7.11'><b>Jan. 10, 2008 - Version 7.11</b></a> <ul> <li>Decode a number of new Canon tags and improved decoding of many old tags <li>Renamed EXIF:RelatedImageLength to RelatedImageHeight (hopefully all ImageWidth/Height tag names are now consistent) </ul> <a name='v7.10'><b>Jan. 7, 2008 - Version 7.10</b></a> <ul> <li>Added support for escape sequences and continuation comments in EPS files <li>Added ability to read/write Sony A700 PreviewImage (tag 0x2001) <li>Added a new Sony ColorMode value (thanks Philippe Devaux) <li>Decode a number of new Minolta tags <li>Improved handling of newlines when writing PDF information <li>Improved decoding of Canon 40D and 1DmkIII FocusDistance tags (thanks Wolfgang Hoffmann) <li>Fixed problem creating multiple output meta files with some commands <li>Fixed problem deleting XMP by value for strings with escaped characters <li>Fixed bug when trying to write output image to console with "-o -" <li>Fixed problem where %c (copy number) was changed when the new file name should have been the same as the source file </ul> <a name='v7.09'><b>Jan. 3, 2008 - Version 7.09</b></a> <ul> <li>Decode Canon ThumbnailImageValidArea <li>Improved decoding of some Olympus tags (thanks Frank Ledwon) <li>Improved decoding of some Pentax tags (thanks Dave Nicholson) <li>Improved error messages when writing PDF files <li>Changed XMP-cc namespace URI (spec apparently changed for some reason) <li>Changed Photoshop XMLData to a binary data tag <li>Changed conversion strings for Canon ModifiedSharpnessFrequency values <li>Changed Olympus NoiseReduction "ISO Boost" value back to "Noise Filter (ISO Boost)" <li>Fixed minor problem writing PDF cross-reference stream after multiple edits <li>Fixed problem redirecting some verbose output to an output text file </ul> <a name='v7.08'><b>Dec. 21, 2007 - Version 7.08</b></a> <ul> <li>Added write support for PDF files which use only cross-reference streams <li>Added a number of new Olympus tags, and changed names of some existing tags <li>Fixed problem decoding some PDF cross-reference streams <li>Fixed bug introduced in 7.07 which broke copying between two list-type tags </ul> <a name='v7.07'><b>Dec. 18, 2007 - Version 7.07</b></a> <ul> <li>Added ability to write XMP and PDF information to PDF files, with revert capability! (use "-PDF-update:all=" to undo all exiftool edits) <li>Added PDF:AppleKeywords tag (written by Apple Preview) <li>Added Composite FOV (Field Of View) tag <li>Added a few more Minolta/Sony LensID's <li>Added new Canon and Pentax LensType's (thanks Magne Nilsen and Jens Duttke) <li>Added "Nothing changed" message in verbose mode for files that weren't changed when writing <li>Added minor warning when invalid IFD entries are removed during writing (you will get this, for instance, when ExifTool fixes the entry count problem in Canon EOS 40D firmware 1.0.4 maker notes) <li>Patched Canon 40D firmware 1.0.4 problem for JPEG images too <li>Decode specified "unknown" zero values for four EXIF tags (ExposureProgram, LightSource, MeteringMode and SubjectDistanceRange) instead of handling as a truly unknown value (if this makes sense) <li>Extract PreviewImage from newer Panasonic RAW images (thanks Jens Duttke) <li>Recognize Pentax-type Kodak maker notes (eg. Easyshare 883) <li>Made "Entries out of sequence" a minor warning since this problem is fixed <li>Allow decimal seconds to be written in time values without needing to use -n <li>Improved parsing of PDF files <li>Improved behaviour when copying list-type tags to to non-List tags <li>Improved exiftool summary message for files that were copied without changes <li>Adjusted Pentax K10D battery percentage calibration <li>Changed names of Pentax FirmwareID tags <li>Fixed runtime warning that could occur with some invalid tag names <li>Fixed problem decoding Pentax:LensCodes for some images (thanks Jens Duttke) <li>API Changes: <ul> <li>Also allow File::RandomAccess reference as argument to ImageInfo() </ul> </ul> <a name='v7.06'><b>Dec. 7, 2007 - Version 7.06</b></a> <ul> <li>Permanently fix MakerNote offsets with -F option when writing <li>A few more Pentax tag improvements (thanks Dave and Jens) </ul> <a name='v7.05'><b>Dec. 6, 2007 - Version 7.05</b></a> <ul> <li>Patched problem rewriting Canon 40D CR2 images caused by bug in the 40D firmware 1.0.4 which writes an improperly formatted MakerNote IFD <li>More improvements in decoding Pentax K10D tags (thanks Dave Nicholson) <li>Translate non-standard XMP namespace prefixes <li>Changed a couple of Kodak Meta tags to Binary data type <li>Renamed Pentax MeasuredLV to EffectiveLV (thanks Jens Duttke) </ul> <a name='v7.04'><b>Dec. 3, 2007 - Version 7.04</b></a> <ul> <li>COMPATIBILITY WARNING: Renamed EXIF:ExifImageLength to ExifImageHeight and XMP:GPSTimeStamp to GPSDateTime <li>Added write support Minolta A200 MRW images <li>Added read support for Hasselblad 3FR raw images <li>Added a few new Nikon LensID's (thanks Robert Rottmerhusen) <li>Added a new Canon LensType (thanks Bogdan) <li>Added ability to insert a newline using "$/" in a print format string <li>Decode some new FujiFilm and Pentax tags (thanks Jens Duttke) <li>Decode some new Pentax and Canon tags (thanks Dave Nicholson) <li>Recognize a few new Olympus lenses (thanks Michael Meissner) <li>Improved decoding of Sony ARW images and added support for A700 <li>Improved warnings for HtmlDump option <li>Improved string parsing when writing date/time tags <li>Fixed problem extracting Canon CRW RGGB values from DNG images </ul> <a name='v7.03'><b>Nov. 17, 2007 - Version 7.03</b></a> <ul> <li>Fixed problem deleting XMP family 1 groups from JPEG images </ul> <a name='v7.02'><b>Nov. 16, 2007 - Version 7.02</b></a> <ul> <li>Added ability to delete XMP family 1 groups (eg. "-XMP-crss:all=") <li>Fixed problem writing XMP as a block to XMP file </ul> <a name='v7.01'><b>Nov. 15, 2007 - Version 7.01</b></a> <ul> <li>Added ability to write FujiFilm RAF images (thanks Jens Duttke) <li>Added -T option (equivalent to -t -S -q -f) <li>Decode a number of new Pentax tags and values (thanks Dave Nicholson) <li>Decode a new Canon LensType value (thanks Bogdan) <li>Decode the not-so-accurate FocusDistanceUpper and FocusDistanceLower in Canon EOS 1DmkIII and 40D images (thanks Heiko Hinrichs) <li>Allow FileSource tag to be assigned values outside the EXIF standard <li>Made ImageSourceData a protected tag <li>Avoid loading huge binary data blocks into memory unless necessary (avoids out-of-memory problem when processing huge, layered Photoshop TIFF images) <li>Improved HtmlDump speed and memory usage by not loading "snipped" data <li>Improved decoding of Nikon ShootingMode <li>Various improvements and bug fixes when reading FujiFilm RAF information <li>Fixed problem decoding CRW images where ImageWidth wasn't extracted with -U </ul> <a name='v7.00'><b>Oct. 23, 2007 - Version 7.00</b> <span class=grn>(production release)</span></a> <ul> <li>IMPORTANT: Fixed problem writing ORF images from newer Olympus cameras which could lead to errors when the image is opened by another utility (affected images may be repaired by rewriting with this version of ExifTool) <li>Added -ScanForXMP option <li>Added ability to extract ID3v2 PRIV tags (including XMP) and the ID3:MCDI tag (plus unknown ID3v2 tags with the -u option) <li>Added new PentaxModelID's for Optio V10 and A40 <li>Added support for Casio-like and HP-like Pentax maker notes <li>Added ICC_Profile WCSProfiles tag (thanks Jens Duttke) <li>Added ability to write and create CanonVRD as a block <li>Added ability to shift GPSTimeStamp tag <li>Added ability to write DNG AsShotICCProfile and CurrentICCProfile tags <li>Decode VRDOffset tag in Canon MakerNotes <li>Shortcuts may now be used in redirections and expressions, and with group names <li>Improved decoding of CanonVRD information (also decode new DPP 3.0 tags and fixed a problem which could give a "Possibly corrupt CanonVRD" warning) <li>Improved decoding of FujiFilm RAF images, and extract JPEG Preview <li>Improved handling of Pentax Casio-style maker notes <li>Improved conversion for Pentax K10D AFPointsInFocus <li>Enhanced Composite tag syntax to simplify user-defined tag definitions <li>Changed decoding of Nikon VibrationReduction 0x0075 tag <li>Changed a number of Pentax and Casio tags to improve consistency <li>Dump unsupported files with -htmlDump only if -u option is used <li>Fixed problem which could cause a virtual hang when writing large EPS files <li>Fixed problem of misleading error messages when attempting to write unsupported file formats <li>Fixed problem outputting list-type tags with -b option <li>Fixed bug where the "image files created" count could miss some files <li>Fixed problem where "Error rebuilding maker notes" warning could be issued in cases where the maker notes do not need rebuilding </ul> <a name='v6.99'><b>Oct. 6, 2007 - Version 6.99</b></a> <ul> <li>Added support for IView MediaPro XMP tags <li>Added ability to read multiple comments from GIF89a images <li>Added some new PentaxModelID's (Optio L20, T20, Z10) <li>Added minor warning for unknown JPEG APP segments when -u option is used <li>Extract information from JPEG APP13 "Adobe_CM" segment <li>Improved -htmlDump output to show TIFF image data and trailer (the TIFF dump is now complete) <li>Improved decoding of Minolta WhiteBalance for some DiMAGE models <li>Improved decoding of Panasonic FirmwareVersion when -n option is used <li>Increased precision of 64-bit rational conversion from 7 to 10 digits <li>Fixed problem which caused failed tests with Perl 5.005_05 <li>Fixed problem where some groups could not easily be excluded when deleting all other information (eg. "-all= --exif:all" now behaves as expected) <li>Fixed problem decoding ICC Profile "dtim" format values <li>Fixed typo in a Minolta FlashMetering value (thanks Jens Duttke) <li>Fixed problem in API which could result in a UTF-8 encoded file not being properly identified if it was passed as a scalar reference to WriteInfo() </ul> <a name='v6.98'><b>Sept. 23, 2007 - Version 6.98</b></a> <ul> <li>Added ExifByteOrder tag (writable to set byte order for new Exif segments) <li>Added CanonModelID for new EOS-1Ds Mark III <li>Added value conversions for Pentax AEFlashTv, AEXv and AEBXv tags <li>Decode Pentax ShutterCount (with help from Jens Duttke) <li>Decode Pentax AFPointsInFocus for newer DSLR models (thanks Jens Duttke) <li>Improved decoding of a Pentax LensType (thanks Jens Duttke) <li>Renamed Pentax AutoAFPoint to AFPointsInFocus and improved conversion <li>Renamed Pentax AEDump to AEMeteringSegments and converted values to approximate LV equivalent units <li>Fixed problem where some warnings were not being properly handled when attempting to write an invalid value to some tags </ul> <a name='v6.97'><b>Sept. 14, 2007 - Version 6.97</b></a> <ul> <li>Added support for Canon EOS 40D Custom Functions <li>Added ability to decode new Nikon D3 and D300 LensData <li>Added a few new Nikon LensID's (thanks Robert Rottmerhusen) <li>Decode Olympus NoiseFilter tag (thanks Ioannis Panagiotopoulos) <li>Decode a few new Nikon ShotInfo tags (thanks Jens Duttke) <li>Improved decoding of Canon AF point information <li>Improved decoding of Nikon HighISONoiseReduction <li>Renamed Nikon VRState to VibrationReduction <li>Fixed typo which prevented some Olympus MakerNote tags from being written </ul> <a name='v6.96'><b>Sept. 5, 2007 - Version 6.96</b></a> <ul> <li>Added ability to read/write XMP alternate languages <li>Added ability to create new GPS information in Panasonic RAW images <li>Added a few new PentaxModelID's (Optio E40, M40 and S10) <li>Added a couple of new Pentax LensType's (thanks Jens Duttke) <li>Added a new Olympus Sigma LensType (thanks Jens Duttke) <li>Added EOS 40D CanonModelID and prepared for new 40D custom functions <li>Decode a large number of new Canon tags <li>Decode SerialNumber from previously unknown maker notes of some Kodak models <li>Decode Olympus ImageStabilization tag (thanks Jens Birch) <li>Improved decoding of Canon Self-timer and AFPoint values <li>Improved decoding of some tags for high end Canon EOS models <li>Renamed Pentax LensCoefficients to LensCodes and print 16 values <li>Renamed Panasonic ImageStabilizer to ImageStabilization <li>Renamed all AFPointsUsed tags to AFPointsInFocus <li>Fixed decoding of ICC_Profile DeviceAttributes </ul> <a name='v6.95'><b>Aug. 21, 2007 - Version 6.95</b></a> <ul> <li>Added support for new Kodak IFD-format makernotes used by the P712, P850, P880, Z612 and Z712 <li>Added a few new Nikon LensID's (thanks Robert Rottmerhusen) <li>Added LensType's for 2 new Pentax DA* lenses (thanks Jens Duttke) <li>Added 2 new FujiFilm S5 WhiteBalance values (thanks Paul Samuelson) <li>Added a number of new CanonModelID's <li>Extract TIFFPreview from DOS EPS images <li>Decode a number of new Panasonic tags, and added a number of new SceneMode's <li>Decode FujiFilm S5 ColorTemperature tag (thanks Paul Samuelson) <li>Improved handling of unknown XMP list-type tags <li>Suppress EPS 'unterminated Document data' warning <li>Fixed decoding of ASCII-type Panasonic FirmwareVersion <li>Fixed bug calculating leap years for years outside the range 1601-2399 <li>API Changes: <ul> <li>Changed WriteInfo() behaviour to be more consistent when editing file in place and a new FileName is specified (original file is now deleted) <li>Improved warning message when trying to write an 'unsafe' tag </ul> </ul> <a name='v6.94'><b>July 26, 2007 - Version 6.94</b></a> <ul> <li>Added a few new XMP-crs tags <li>Added ability to create a new Photoshop IRB record in TIFF-format images <li>Added a few new EXIF:Compression values (thanks Jens Duttke) <li>Added a number of new Panasonic/Leica tags, and changed the names of some Panasonic tags, including reverting FirmwareVersion (thanks Jens Duttke) <li>Added test for Unknown (Bulb) Pentax ExposureTime value (thanks Jens Duttke) <li>Added a new Nikon LensID (thanks Vladimir Sauta) <li>Avoid extracting information from documents embedded in EPS images (this is temporary; eventually I want to figure out a way to allow this information to be extracted separately) <li>Decode Red/BlueBalance from Leica Digilux 2 RAW images (thanks Jens Duttke) <li>Changed conversion for Sony A100 Rotation tag to conform to EXIF:Rotation <li>Changed decoding of one of the Pentax ExternalFlashBounce tags (thanks Michael Meissner) <li>Extract EncodingProcess, BitsPerSample, ColorComponents and YCbCrSubSampling from JPEG SOF segment <li>Show raw horizontal/vertical widths in the converted YCbCrSubSampling value <li>Improved conversion of some Pentax tags (thanks Jens Duttke) <li>Avoid loading data blocks larger than 16MB from QuickTime images <li>Allow PDF:Keywords to be comma-delimited <li>Fixed problem where a tag would be removed from both IFD0 and ExifIFD even if only IFD0 or ExifIFD was specified <li>Fixed problem with byte order mark showing up in output when decoding hex-encoded Unicode values from PDF images <li>Fixed problem where ExifTool could hang when reading corrupted ASF files <li>Fixed possible problem with infinite recursion in FlashPix-format files </ul> <a name='v6.93'><b>July 6, 2007 - Version 6.93</b></a> <ul> <li>Added read support for BigTIFF images (with extensions BTF, TIF and TIFF) <li>Added a number of new Olympus tags and fixed decoding of a few others (thanks Jens Duttke) <li>Added a number of new SigmaRaw tags (found in SD14 X3F images) <li>Changed conversion for Canon LensType 152 (used by various Sigma models) <li>Fixed problem editing XMP containing new "Camera Raw Saved Settings" properties (written by Adobe Lightroom) </ul> <a name='v6.92'><b>June 29, 2007 - Version 6.92</b></a> <ul> <li>Added read support for FLV (Flash Video) files <li>Added read support for EXIF and IPTC and write support for EXIF, IPTC and XMP in JPEG 2000 images <li>Added read/write support for Sinar CS1 raw images <li>Added read support for Kodak DCR and K25 raw images <li>Added ability to read/write improperly byte-swapped IPTC information <li>Added check for infinity value of Casio ObjectDistance <li>Added a new Nikon LensID (thanks Bruce Stevens) <li>Improved decoding of APP12 "Ducky" segment (thanks Heinrich Giesen) and added write/create support <li>Improved handling of warning messages when setting new values <li>Changed print conversion for Olympus PictureModeSaturation, PictureModeContrast and PictureModeSharpness to label min and max values <li>Fixed problem introduced in 6.91 when writing some EPS images <li>Fixed group names for Pentax CameraInfo tags <li>Fixed bug which could result in negative Canon SerialNumber values <li>Fixed decoding of some Canon EOS 1DmkIII custom function values <li>Fixed problem copying subdirectories in new-style Olympus maker notes <li>Fixed problem of missing last character when decoding ID3 Unicode strings <li>Fixed problems decoding some ID3 URL values <li>Fixed inconsistency where the -if option may have used a different tag than the one normally extracted when a group name was specified and multiple matching tags existed in the group </ul> <a name='v6.91'><b>June 5, 2007 - Version 6.91</b></a> <ul> <li>Added support for new XMP-lr, XMP-photoshop and XMP-DICOM tags of PS CS3 <li>Added new Sigma lens to Pentax LensID list <li>Added a few new Nikon and Canon LensID's (thanks Jens Duttke) <li>Added Canon IXY Digital 810 IS to CanonModelID <li>Recognize Photoshop "AgHg" resource type <li>Removed "warnings" dependency in exiftool application <li>Updated XMP:FileSource values to match EXIF:FileSource <li>Greatly improved processing speed for some large EPS images <li>Improved handling of XMP date/time formatting <li>Officially support writing of MEF images <li>Applied patch to convert Pentax LensType for changes in K10D firmware 1.2 <li>Fixed decoding of Pentax BatteryBodyGripStates (thanks Jens Duttke) </ul> <a name='v6.90'><b>May 10, 2007 - Version 6.90</b> <span class=grn>(production release)</span></a> <ul> <li>Added CanonModelID values for new PowerShot S5 IS and SD850 IS <li>Encode IPTC values in default CodedCharacterSet when writing new values at the same time as deleting the existing CodedCharacterSet <li>Renamed Nikon FirmwareVersion to MakerNoteVersion and Panasonic FirmwareVersion to ProductionVersion (thanks Jens Duttke) <li>Allow EXIF GPS coordinates to be negative when writing (take absolute value) <li>Revert "$evalWarning" fix (false alarm) </ul> <a name='v6.89'><b>May 7, 2007 - Version 6.89</b></a> <ul> <li>Added support for maker notes of some Hewlett-Packard models <li>Decode Pentax ImageProcessing tag <li>Fixed problem which gave "$evalWarning" errors on some systems </ul> <a name='v6.88'><b>May 2, 2007 - Version 6.88</b></a> <ul> <li>Added read support for Mamiya MEF images <li>Implement long overdue change to standardize FocalPlaneResolutionUnit values <li>Decode Panasonic BabyAge + some new ShootingMode values (thanks Jens Duttke) <li>Improved recognition of maker notes for some camera models <li>Fixed bug that could cause an incorrect "tag is not writable" warning <li>Fixed problems converting WDP PixelFormat values <li>Fixed decoding of Canon 350D AFPointsUsed (thanks Bogdan) <li>API Changes: <ul> <li>Added option to allow makernote block to be extracted without rebuilding </ul> </ul> <a name='v6.87'><b>Apr. 26, 2007 - Version 6.87</b></a> <ul> <li>Added read/write/delete support for recognized trailers in PSD images <li>Added PhotoMechanic IPTC:Prefs tag <li>Added ability to decode double-UTF-encoded XMP files <li>Added a few more Canon, Pentax and Nikon lens types (thanks Hayo Baan and Robert Rottmerhusen for Nikon entries) <li>Added ability to create new user-defined MIE groups <li>Decode a new Nikon lens tag: ExitPupilPosition (thanks Robert Rottmerhusen) <li>Increased precision (from 20m to 2mm) when writing XMP GPS coordinates <li>Renamed Panasonic SpotMode tag to AFMode and improved decoding <li>The -e (Composite) option now also applies when copying tags <li>Minor changes to IPTC verbose output and error handling <li>Minor changes to a few warning messages <li>Avoid converting XMP values as rational or date if tag is known and not specified with these formats <li>Identify CR2 header and Canon MakerNote footer in -htmlDump output <li>Reverted change from version 6.85 to once again allow JPEG thumbnails to be written to TIFF-type images (perfectly valid for many TIFF-based RAW formats even though it isn't technically correct in a proper TIFF) <li>Added test to check for invalid encoding when Image::ExifTool is loaded <li>Fixed problem shifting Canon:TimeStamp tag <li>Fixed failed FlashPix test on Cygwin Perl 5.8.2 (roundoff errors again) <li>Fixed problem where some types of write errors could result in exiftool reporting that a file was updated when it wasn't </ul> <a name='v6.86'><b>Apr. 10, 2007 - Version 6.86</b></a> <ul> <li>Added -execute, -srcfile and -common_args options to allow complex processing with multiple commands in a single invocation <li>Added ability to write Panasonic RAW files <li>Added Panasonic ConversionLens tag <li>Improved decoding of Panasonic/Leica Contrast and SpotMode tags <li>Changed -@ to insert arguments at the current position in the command line (rather than at the end) <li>Once again automatically fix Canon maker note offsets (this feature was removed in 6.84 due to a bug bug report that turned out to be a false alarm) <li>Fixed bug in -if option which could incorrectly cause a failed condition when using expressions containing multiple tags with proper-case names <li>Fixed problem extracting binary data when -if option was used <li>Fixed bug which caused error when setting CodedCharacterSet to "UTF8" <li>Fixed decoding of InternalSerialNumber for FujiFilm FinePix F40fd <li>Fixed problem using "-TAG+&lt;=FMT" or "-TAG-&lt;=FMT" on command line </ul> <a name='v6.85'><b>Apr. 3, 2007 - Version 6.85</b></a> <ul> <li>Prevent JPEG thumbnail image from being written to TIFF-type images <li>Fixed a couple of problems decoding Canon EOS 1D Mark III tags <li>Fixed bug which generated an error message when rewriting maker notes in Adobe-edited Pentax K10D native DNG images </ul> <a name='v6.84'><b>Mar. 30, 2007 - Version 6.84</b></a> <ul> <li>Added a number of new XMP-crs tags, plus new XMP-lr (Adobe Lightroom) group <li>No longer automatically fix Canon makernote offsets (but still use makernote footer if present to calculate recommended fix) <li>Fixed problem where some errors were not properly counted in the summary statistics with the -overwrite_original_in_place option <li>Fixed problem parsing XMP shorthand format for values containing '=' symbol </ul> <a name='v6.83'><b>Mar. 24, 2007 - Version 6.83</b></a> <ul> <li>Automatically fix corrupted makernote offsets when reading images from Canon models which include a makernote offset footer <li>Added CanonModelID and CameraType values for 2 new Canon DV cameras <li>Renamed SPIFF ResolutionUnits tag to ResolutionUnit <li>Fixed formatting of GPSTimeStamp value </ul> <a name='v6.82'><b>Mar. 20, 2007 - Version 6.82</b></a> <ul> <li>Added read/write support for new Canon EOS-1D Mark III custom functions <li>Made a few makernotes warnings minor when writing <li>Append "mm" to FocalLengthIn25mmFormat value <li>Fixed problem which could cause "uninitialized value" warning when writing <li>Fixed problem writing Canon EOS D60 custom functions </ul> <a name='v6.81'><b>Mar. 17, 2007 - Version 6.81</b></a> <ul> <li>Added l/u modifiers for lower/uppercase in filename format codes (eg. "%le") <li>Added equivalent IXY names to CanonModelID for PowerShot SD750 and SD1000 <li>Added a few new Pentax ModelID's (Optio E30, T30, W30, A30) <li>Allow non-encrypted Nikon ColorBalance values to be written <li>Fixed problem where some encrypted Nikon information was not properly protected against writing </ul> <a name='v6.80'><b>Mar. 14, 2007 - Version 6.80</b></a> <ul> <li>Added Olympus ManometerReading tag <li>Added ability to edit private IPTC and XMP information found inside PhotoshopSettings record of TIFF images <li>Renamed NikonShotInfoVers tag to ShotInfoVersion and added MultiExposureVersion tag <li>Search further in MPEG file to look for first audio/video frame headers <li>Use default resolution information from JPEG JFIF segment for mandatory EXIF resolution tags when creating new EXIF segment <li>Enhanced %c format code so %+c adds an underline before the copy number </ul> <a name='v6.79'><b>Mar. 7, 2007 - Version 6.79</b></a> <ul> <li>Translate special characters in ID3 information when reading <li>Improved conversions for GPSTimeStamp and GPSDateStamp when writing so they can be set from a normal date/time tag (eg. "-gpstimestamp&lt;createdate") <li>Added support for Nikon D40X plus a new LensID (thanks Robert Rottmerhusen) <li>Added a new Canon LensType (thanks Warren Stockton) <li>Removed D70Boring shortcut tag <li>Fixed minor problem in HtmlDump of MakerNotes header introduced in 6.78 <li>Fixed problem decoding second Pentax K10D LensType value for some lenses </ul> <a name='v6.78'><b>Feb. 28, 2007 - Version 6.78</b></a> <ul> <li>Decode Nikon D200 multi-exposure tags <li>Decode Canon BlackLevel tag and added a few new CanonModelID's <li>Added support for new Olympus u760 maker note format (finally Olympus fixes the major blunders of their older maker note design!) <li>Added support for the rare Canon EOS K236 (variation of EOS 400D) <li>Improved decoding of Canon EOS 1D Mark III tags <li>Included PDF version of MIE format specification in distribution <li>Reformat invalid EXIF date/time values when writing (unless -n option used) <li>Minor updates to some Pentax tags for Optio M30 </ul> <a name='v6.77'><b>Feb. 20, 2007 - Version 6.77</b> - "XML/HTML special characters"</a> <ul> <li>Translate numeric character references when reading XMP <li>Translate all HTML 4 character references to UTF-8 when reading HTML <li>Translate all non-ASCII characters to HTML character entities with -h or -E <li>Added full UTF-8 translation support when run with Perl pre-5.6.1 <li>Decode a few new Sigma SD14 tags <li>Decode a couple more Nikon tags </ul> <a name='v6.76'><b>Feb. 16, 2007 - Version 6.76</b> <span class=grn>(production release)</span></a> <ul> <li>Added patch for Perl 5.6.x bug which caused an HTML test to fail <li>Added a few new Pentax tags and fixed a LensType value (thanks Axel Kellner) </ul> <a name='v6.75'><b>Feb. 14, 2007 - Version 6.75</b> <span class=grn>(production release)</span></a> <ul> <li>Added read support for DOC, XLS and PPT documents <li>Added Composite GPS tags to facilitate copying GPS between EXIF and XMP <li>Added patch for problems in Sanyo J1, J2, J4, S1, S3 and S4 maker notes <li>Added new Microsoft OffsetSchema tag (new, ill-conceived PhotoInfo tag) <li>Decode more Pentax tags and improved decoding for some K10D tags <li>Shortened tag name of HTML:MSSmartTagsPreventParsing to NoMSSmartTags <li>Fixed oversight to allow new IPTC and XMP records to be added to ORF images <li>Fixed problem extracting RIFF MakerNotes by tag name <li>Fixed problem with drag-n-drop of Windows files on a network drive <li>Fixed problem copying GPSAltitude from EXIF to XMP </ul> <a name='v6.74'><b>Feb. 2, 2007 - Version 6.74</b></a> <ul> <li>Added support for chained SubIFD's in TIFF images <li>Updated GeoTiff support for new definitions in libgeotiff-1.2.3 <li>Fixed problem when rewriting unknown records in Adobe DNGPrivateData <li>Fixed bug introduced in 6.47 that could prevent Photoshop EXIF CameraRAW tags from being extracted properly </ul> <a name='v6.73'><b>Jan. 31, 2007 - Version 6.73</b></a> <ul> <li>Added read support for meta information in HTML and XHTML documents <li>Added ability to write certain EXIF tags (eg. UserComment) as Unicode <li>Added character set translation for XMP information; the -L option now works for all common meta information formats! (see updated <a href="faq.html#Q10">FAQ #10</a> for details) <li>Added a few more XMP-microsoft tags (thanks Kees Moerman) <li>Decode FirmwareRevision found in some Canon PowerShot models <li>Preserve date/time tags that exist in the wrong EXIF IFD when shifting times <li>Fixed bug which could result in an incorrect value for the Directory tag <li>Fixed problem parsing XMP with BOM introduced in 6.71 </ul> <a name='v6.72'><b>Jan. 25, 2007 - Version 6.72</b></a> <ul> <li>Added XMP-microsoft:LastKeywordIPTC tag <li>Renamed new MicrosoftPhoto Rating2 tag to RatingPercent <li>Fixed problem where rdf:about attribute could be lost when writing XMP </ul> <a name='v6.71'><b>Jan. 24, 2007 - Version 6.71</b></a> <ul> <li>Decode a lot of new Pentax DSLR information (thanks Cvetan Ivanov) <li>Patched Microsoft Photo bugs in XMP formatting <li>Patched Microsoft Photo bug in EXIF Unicode text byte ordering <li>Added support for XMP-microsoft tags and 2 new Microsoft EXIF tags <li>Added a few new XMP tags (NativeDigest, ColorMode and ICCProfileName) <li>Added ability to add or delete copied tags from list (eg. "-SRCTAG+&gt;DSTTAG") <li>Added a few more Canon EasyMode values (thanks Samson Tai) <li>Added CanonModelID values for new A450, A460 and A550 <li>Changed the -if option so the condition automatically fails if the expression generates a warning (use -v to show the warning) <li>Specified LF character (0x0a) for MIE text newline sequence <li>Catch warnings if perldoc doesn't exist when running with no arguments <li>Minor tweaks/fixes to htmldump output </ul> <a name='v6.70'><b>Jan. 19, 2007 - Version 6.70</b> - "IPTC Character Coding"</a> <ul> <li>Translate coded characters in IPTC string values (UTF8 and Latin only), and assume Latin encoding if no CodedCharacterSet (see <a href="faq.html#Q10">FAQ #10</a> for details) <li>Enhanced IPTC:CodedCharacterSet print conversion so "ESC % G" is now printed as "UTF8" (either may be used when writing) <li>Specified ISO 8859-1 character set for MIE ASCII string values <li>Added warnings for UTF-8 conversion errors <li>Decode a few new Pentax tags <li>Decode maker notes in Pentax DNG images </ul> <a name='v6.69'><b>Jan. 8, 2007 - Version 6.69</b></a> <ul> <li>Decode information in NikonScanIFD <li>Enhanced -p option to allow expressions to be used <li>The -p option no longer suppresses error and warning messages <li>Made ImageSourceData writable <li>Reduced font size of htmldump output <li>Fixed "Argument isn't numeric" error when reading an image with a missing IFD offset </ul> <a name='v6.68'><b>Jan. 3, 2007 - Version 6.68</b></a> <ul> <li>Added mechanism to allow Composite tags to be writable <li>Recognize XMP sidecar files that begin with a UTF BOM (byte order mark) <li>Changed TIFF ImageSourceData tag to a Binary data type <li>Fixed problem which could cause warning when writing XMP in PNG images <li>Fixed bug when shifting times in an XMP sidecar file that caused an invalid date/time to be written if the tag didn't previously exist <li>Fixed problem where writing to a JPEG image containing a PreviewImage could report that the file was updated even if nothing was changed </ul> <a name='v6.67'><b>Dec. 30, 2006 - Version 6.67</b> - "Adobe DNGPrivateData"</a> <ul> <li>Added ability to write MakerNote information written by Adobe DNG Converter <li>Added ability to copy Adobe MakerNote and CRW information from DNG images <li>Added ability to read/write Adobe CRW and MRW information in DNG images <li>Added ability to read Adobe SR2 information in DNG images <li>Added a few more Nikon LensID's (thanks Robert Rottmerhusen) <li>Added ability to delete a specific MIE document in multi-document files <li>Improved handling of tags in multi-document MIE files <li>Improved verbose and htmlDump output for unknown JPEG trailers <li>Improved handling of ignored minor errors when writing MakerNotes <li>Decode Panasonic LensType tag <li>Changed description for Canon:OwnerName tag <li>Minor changes to HtmlDump output <li>Fixed parsing of XMP date/time values with no seconds </ul> <a name='v6.66'><b>Dec. 20, 2006 - Version 6.66</b> <span class=grn>(production release)</span></a> <ul> <li>Added a few more Pentax K10D PictureMode's (thanks Axel Kellner) <li>Added a few new Nikon LensID's and Olympus LensType's <li>Added Canon 1D PictureStyle's <li>Updated CanonModelID strings for a few new models <li>Changed tagID for MIE:GPSDifferential <li>Minor change to MIE specification for unknown data formats (MIE 1.1) </ul> <a name='v6.65'><b>Dec. 15, 2006 - Version 6.65</b> - "MIE 1.0"</a> <ul> <li>Added ability to read/write MIE trailers in JPEG and TIFF images <li>Added a number of new MIE tags and changed some existing tags <li>Added support for units in MIE values <li>Added new Pentax K10D PictureMode's (thanks Axel Kellner) <li>Avoid creating non-native groups in MIE, PNG and EPS images unless necessary <li>Fixed problem with -P option so it now works when -o option is used <li>Fixed bug where 'all' was replaced with '*' in redirection expressions <li>Fixed "APP1 segment too large" error when copying all tags from some Canon CR2 images to a JPEG (fixed initially in 6.08, but broken again in 6.47) </ul> <a name='v6.64'><b>Dec. 8, 2006 - Version 6.64</b></a> <ul> <li>Added Nikon ImageAuthentication tag (thanks Jeffrey Friedl) <li>Added Canon RecordMode and OpticalZoomCode and Composite DigitalZoom tag <li>Applied FocalUnits scaling to Canon ShortFocal, LongFocal and ScaledFocalLength tags, and renamed ScaledFocalLength to FocalLength <li>Allow (but ignore) leading family number on tag group when writing <li>Fixed calculation of 35mm scaling factor when Canon digital zoom is applied <li>Fixed bug which could cause "'x' outside of string" error when reading Nikon images with the -U option </ul> <a name='v6.63'><b>Dec. 6, 2006 - Version 6.63</b></a> <ul> <li>Changed the sense of the '-' modifier for the new '%c' format code </ul> <a name='v6.62'><b>Dec. 6, 2006 - Version 6.62</b></a> <ul> <li>Added '%c' format code to add copy number if output file exists <li>Added a couple of new Nikon LensID's (Werner Kober, Robert Rottmerhusen) <li>Made -htmlDump tag names purple if actual offset differs from stored offset </ul> <a name='v6.61'><b>Dec. 4, 2006 - Version 6.61</b></a> <ul> <li>MakerNotes offsets are now permanently fixed when the makernotes are copied using -tagsFromFile with the -F option <li>Fixed typo in MakerNoteSanyoC4 tag name of MakerNotes shortcut <li>Minor improvements to htmldump style </ul> <a name='v6.60'><b>Dec. 2, 2006 - Version 6.60</b></a> <ul> <li>Added -k option of stand-alone version to regular distribution <li>Fixed bug adding/deleting XMP tags in a list (introduced in 6.50) <li>Fixed decoding of Canon 5D LongExposureNoiseReduction <li>Fixed problem writing AFCP where incorrect offset could be written <li>Fixed bug in -p option which caused it to abort if all tag names were contained in braces (thanks Joel Becker) <li>Stand-alone Windows executable: <ul> <li>Print application documentation after "No file specified" warning </ul> </ul> <a name='v6.59'><b>Nov. 30, 2006 - Version 6.59</b></a> <ul> <li>Do not delete IFD1 when deleting all meta information from a TIFF image <li>Added a couple of new CanonImageSize values: "Postcard" and "Widescreen" <li>Added a few new Olympus LensType's (thanks Lilo Huang for one) <li>Improved handling of invalid date values <li>Fixed "divide by zero" warning if FocalPlaneXYResolution is "inf" <li>Fixed incorrect "unknown trailer" verbose message when writing JPEG images <li>Stand-alone Windows executable: <ul> <li>Allow quoting of options embedded in executable name </ul> </ul> <a name='v6.58'><b>Nov. 25, 2006 - Version 6.58</b></a> <ul> <li>Added a few more Nikon LensID's (thanks Robert Rottmerhusen) <li>Added missing print conversion for RIFF DateTimeOriginal <li>Improved HTML 4.01 compliance of -htmlDump output <li>Lowered priority of ID3v1 tags so ID3v2 takes precedence if both exist <li>Minor change to names of some Vorbis and APE tags <li>Made Ogg file type all capitals <li>Patched problem which could cause ExifTool to die if input file is corrupt <li>Fixed GPSDOP description (GPS Dilution of Precision, thanks Greg Troxel) <li>Fixed problem which could generate a run-time error when attempting to write to a corrupted JPEG image <li>API Changes: <ul> <li>GetFileType() may now also be used to return a file description </ul> </ul> <a name='v6.57'><b>Nov. 19, 2006 - Version 6.57</b> <span class=grn>(production release)</span></a> <ul> <li>Missing tags in -p and redirection expressions are now set to an empty string ('') by default, or a dash ('-') if the -f option is used <li>Added ability to use %f,%d,%e tokens in "-TAG&lt;=FILE" argument <li>Added new Nikon LensID (thanks Werner Kober) <li>Set missing tags to '' instead of '-' in redirected expressions if -m used <li>Renamed LV tag to LightValue <li>Improved decoding of Sony DSLR-A100 maker notes <li>Attempted to clarify date/time shift documentation in Shift.pl <li>Fixed bug which could result in CanonVRD information not being recognized <li>Fixed bug in new SetResourceName feature of user-defined Photoshop tags <li>First release of stand-alone Windows executable <li>API Changes: <ul> <li>Added MissingTagValue option </ul> </ul> <a name='v6.56'><b>Nov. 15, 2006 - Version 6.56</b> - "Audio Update"</a> <ul> <li>Added read support for a number of audio file formats: Ogg Vorbis, Ogg FLAC, FLAC, APE (Monkey's Audio) and MPC (Musepack) <li>Improved parsing of ID3 v2.3 and v2.4 information <li>Added a number of new Pentax *istD tags (thanks Douglas O'Brien) <li>Added ability to print processed file names when writing (-v0 option) <li>Patched problem with makernotes offsets in Sanyo C4 images <li>Fixed problem that prevented some Olympus RAW files from being written <li>Fixed bug where XMP values could be improperly converted as a rational </ul> <a name='v6.55'><b>Nov. 8, 2006 - Version 6.55</b></a> <ul> <li>Added read/write support for Canon VRD (Recipe Data) files and trailers <li>Changed name of CanonDPP module and group to CanonVRD </ul> <a name='v6.54'><b>Nov. 3, 2006 - Version 6.54</b></a> <ul> <li>Added write support for ORF (Olympus RAW) images <li>Added Panasonic TravelDay tag (thanks Marcel Coenen) <li>Show Photoshop resource block names in verbose output, and preserve these names when copying tags from file <li>Changed write format of Nikon WhiteBalanceFineTune from int16u to int16s (thanks Giridhar Appaji Nag) <li>Allow Flags to be used in UserDefined tags <li>Added trailer signature to MIE format specification <li>Fixed problem with the -list and -listw options (dynamically loaded tags weren't appearing in the list) </ul> <a name='v6.53'><b>Nov. 1, 2006 - Version 6.53</b></a> <ul> <li>IMPORTANT: Fixed bug introduced in 6.51 which could result in a corrupted image (!!) when rewriting TIFF-format files containing an unknown trailer (this includes all TIFF-based RAW formats except CR2). The good news is that unknown trailers should be very uncommon, and nobody has reported any problems yet, so with any luck I caught this before it affected anyone. But please update immediately to 6.53 if you downloaded 6.51 or 6.52. </ul> <a name='v6.52'><b>Nov. 1, 2006 - Version 6.52</b></a> <ul> <li>Added read/write support for trailers in CRW images <li>Dropped historic support for obsolete -group# option </ul> <a name='v6.51'><b>Oct. 31, 2006 - Version 6.51</b> - "Trailer Update"</a> <ul> <li>Improved handling of trailers in JPEG and TIFF-format images: <ul> <li>Added read/write support for PhotoMechanic and FotoStation trailers <li>Recognize and handle Canon DPP trailers <li>Added AFCP trailer read/write support for TIFF (previously JPEG only) <li>Added ability to read/write multiple trailers in the same image <li>Trailers are now dumped with verbose and htmlDump options <li>Trailers are now deleted when deleting all tags <li>Added ability to delete trailers individually by group or altogether with "-Trailer:all=" </ul> <li>Changed reading/writing XMP in PNG images to conform with XMP specification (but continue to support the XMP profile format used previously) <li>Avoid writing duplicate XMP tags in less common namespaces <li>More consistent handling of unknown IPTC tags <li>Added -listd option to list deletable groups <li>IPTC time-only tags may now be set from date/time values (this already worked for date-only tags) <li>Fixed problem rewriting international text (iTXt) chunks in PNG images <li>API Changes: <ul> <li>Added GetDeleteGroups() routine </ul> </ul> <a name='v6.50'><b>Oct. 26, 2006 - Version 6.50</b></a> <ul> <li>Changed name of new "-eval" option to "-if" <li>Added read support for PhotoStudio Unicode comment (thanks Dec Anisimov) <li>Recognize the "PHUT" Photoshop IRB resource type (thanks Dec Anisimov) <li>Extract PhotoshopBGRThumbnail image from Photoshop information <li>Write PNG compressed text for new tags when -z option is used <li>Added ability to write PNG:ModifyDate <li>Don't print Olympus LensType "release" if used to differentiate lenses <li>Changed TagName documentation to show actual format written instead of format used to interpret the data (which differs only for a few odd tags) <li>Fixed bug in PNG writer which could cause duplicate tags to be written <li>Fixed minor problem in HtmlDump output <li>Fixed logic bug when writing XMP using += or -= </ul> <a name='v6.49'><b>Oct. 21, 2006 - Version 6.49</b></a> <ul> <li>Added -eval option for conditional batch processing [changed to -if in 6.50] <li>Allow .ExifTool_config file to be placed in application directory <li>Decode copyright information from JPEG APP12 "Ducky" segment <li>Decode Casio FirmwareDate <li>Added IFD0 ProcessingSoftware tag (0x000b, written by ACD Systems) <li>Added print conversion for InteropIndex <li>Write InteropVersion automatically when creating a new InteropIFD <li>Made RelatedImageFileFormat writable <li>Protect all InteropIFD tags from being copied by default with -TagsFromFile <li>Renamed XMP ExifImageHeight to ExifImageLength (to correspond with EXIF tag) </ul> <a name='v6.48'><b>Oct. 19, 2006 - Version 6.48</b></a> <ul> <li>Decode Minolta 7D FlashExposureComp (thanks Jeffery Small) <li>Decode InternalSerialNumber from newer FujiFilm models <li>Improved decoding of new Pentax PictureMode tag (thanks Doug O'Brien) <li>Updated CustomFunctions in Canon CRW images and recognize CIFF extension <li>Added a couple new Pentax LensType's (thanks Barney Garrett) <li>Changed "AdobeRGB" to "Adobe RGB" in all ColorSpace values for consistency <li>Fixed bug in recent update to extract large preview from Epson JPEG images <li>Fixed problem in -htmldump output introduced in 6.46 <li>Various documentation improvements and updates </ul> <a name='v6.47'><b>Oct. 15, 2006 - Version 6.47</b></a> <ul> <li>Decode JPEG APP6 "EPPIM" segment used in Toshiba images <li>Process PICT images to extract JPEG preview when -u option is used <li>Added OtherImage composite tag <li>Added PentaxModelID for K110D and a new K110D PictureMode tag <li>Fixed problem extracting CoverArt from some MP4 audio files <li>Fixed problem decoding Canon BulbDuration (affects Composite ShutterSpeed) <li>Fixed problem reading/writing large Epson preview image in R-D1 JPEG images and allow large (&gt;64kB) preview images for all make/models </ul> <a name='v6.46'><b>Oct. 11, 2006 - Version 6.46</b></a> <ul> <li>The "-ext" option now overrides internal file selection rules <li>Expand filename wildcards on Windows command line (thanks Marjolein Katsma) <li>Enhanced warnings when copying information to a specific tag <li>Changed family 0 group name: GPS-&gt;EXIF <li>Changed family 1 group names: APP12-&gt;PictureInfo,GraphicConverter-&gt;GraphConv <li>Added a couple of new Pentax LensType's <li>Added JPEG.pm module (mainly for documentation purposes) <li>Fixed bug when re-writing NEF files which caused new preview image written by Nikon Capture 4.4.0 to be lost <li>Fixed bug which could cause problems if a user-defined composite tag is created with the same name as an existing tag </ul> <a name='v6.45'><b>Oct. 6, 2006 - Version 6.45</b></a> <ul> <li>Added ability to create JFIF segment <li>Decode information in JPEG APP8 "SPIFF", APP12 "Ducky", and APP15 GraphicConverter segments <li>Improved html dump feature to dump all JPEG APP segments <li>Decode maker notes in FujiFilm AVI videos <li>Renamed Nikon AFMode tag to AFAreaMode (thanks Tobias Briseno) <li>Changed "Image Quality" description to "Quality" <li>Added option to allow the htmlDump base offset to be specified <li>Changed EV tag name to LV since this is technically more correct <li>Print warnings if syntax problems are found in .ExifTool_config file <li>Use HOMEDRIVE and HOMEPATH (Windows cmd shell environment variables) for .ExifTool_config path if neither EXIFTOOL_HOME nor HOME are available <li>Fixed some problems which were causing failed tests when using ActivePerl <li>User-defined Composite tags now override composite tags of the same name <li>Added a few more PentaxModelID's (K10D, A20, M20, W20) </ul> <a name='v6.44'><b>Oct. 2, 2006 - Version 6.44</b></a> <ul> <li>Now deletes all JPEG APP segments when deleting all information <li>Decode Ricoh APP5 RMETA information (custom fields in Caplio Pro G3 images) <li>Decode AVI Audio/Video stream headers <li>Recognize and preserve PhotoMechanic trailer when editing TIFF-based images <li>Added ability to delete JFIF, CIFF, Meta and FlashPix groups <li>Added ability to exclude groups when deleting all information <li>Added a number of new Canon, Nikon, Pentax, Sony and Minolta tags <li>Added description for GPSDOP tag (GPS Degree Of Precision) </ul> <a name='v6.43'><b>Sept. 26, 2006 - Version 6.43</b></a> <ul> <li>Added read support for M4A audio files <li>Simplified and documented technique for adding user-defined Composite tags <li>Issue minor warning when a tag used in an expression doesn't exist, instead of silently inserting a '-' (use -m option for previous behaviour) </ul> <a name='v6.42'><b>Sept. 21, 2006 - Version 6.42</b> <span class=grn>(production release)</span></a> <ul> <li>Re-worked Sony and Minolta LensID lists and added a number of new lenses <li>Extract maker note information from Sanyo MOV and MP4 videos <li>Recognize ARW extension of Sony Alpha-100 RAW images <li>Improved extraction of PreviewImage from damaged Minolta images </ul> <a name='v6.41'><b>Sept. 18, 2006 - Version 6.41</b></a> <ul> <li>Fixed calculation of Canon ISO in some images and renamed ShotISO to BaseISO <li>Minor improvment to order of operations when deleting multiple groups and adding back information in batch mode </ul> <a name='v6.40'><b>Sept. 14, 2006 - Version 6.40</b></a> <ul> <li>Added ability to delete a group and write back information in one step <ul> <li>Compatibility Warning: This changes previous behaviour when adding and deleting information in the same operation if new tag values are set after a group has been flagged for deletion </ul> <li>Fixed problem writing to specific MIE groups <li>Minor improvements to verbose output while writing <li>Added a few new CanonModelID's (PowerShot G7, SD900, SD800IS, SD40) </ul> <a name='v6.37'><b>Sept. 12, 2006 - Version 6.37</b></a> <ul> <li>Decode Sony LensID's (thanks Thomas Bodenmann) <li>Added another Canon LensType <li>Added shortcut MakerNotes tag to represent the maker notes tags from all manufacturers (useful when copying tags between files) <li>Improved MPEG decoding and calculate approx. Duration based on avg. bitrate <li>Issue a minor error when rewriting an empty IFD (previously this was fatal) <li>Print 2 decimal points of MeasuredEV (avoids round-off errors resulting in failed tests on some systems) </ul> <a name='v6.36'><b>Sept. 6, 2006 - Version 6.36</b> <span class=grn>(production release)</span></a> <ul> <li>Added a few more Canon LensType's <li>Improved decoding of Canon 400D ExposureTime and FileNumber <li>Decode AFPointsUsed for PowerShot models with 9 AF points <li>Fixed decoding of Canon 5D PictureStyle </ul> <a name='v6.35'><b>Sept. 5, 2006 - Version 6.35</b></a> <ul> <li>Added Canon NumAFPoints tag <li>Added support for Canon 400D custom functions <li>Renamed Canon AFPointsUsed20D to AFPointsUsed and decode for 30D and 400D <li>Changed phrasing in a text string to bypass bug in rpm build causing it to obtain incorrect dependencies </ul> <a name='v6.34'><b>Sept. 3, 2006 - Version 6.34</b></a> <ul> <li>Removed empirical offset from Canon:MeasuredEV </ul> <a name='v6.33'><b>Sept. 1, 2006 - Version 6.33</b></a> <ul> <li>Added Composite:EV and Canon:MeasuredEV tags [comments welcome] </ul> <a name='v6.32'><b>Sept. 1, 2006 - Version 6.32</b></a> <ul> <li>Decode a new value of "Auto High" for Canon CameraISO <li>Added new Canon AutoISO tag, renamed Canon:ISO tag to ShotISO, and added a new composite ISO tag to give the ISO that was actually used <li>Decode CanonModelID's for recently announced Canon cameras (400D, etc) <li>Decode PentaxModelID for Optio S7 <li>XMP Changes: <ul> <li>Added support for rdf:nodeID attribute in XMP information <li>Changed XMP file MIME type from application/xmp to application/rdf+xml to correspond with XMP specification <li>Write 'rdf:about' instead of 'about' (unqualified use now deprecated) <li>Don't write blank-line padding (as per XMP spec) for .XMP files <li>Fixed problem extracting XMP information from some EPS files <li>Fixed typos in some (not commonly used) XMP namespace URI's </ul> <li>Fixed FocalLength conversion for some Pentax-built BenQ and Samsung models </ul> <a name='v6.31'><b>Aug. 23, 2006 - Version 6.31</b></a> <ul> <li>Decode a number of new values for FujiFilm PictureMode (thanks Michael Meissner) <li>Properly parse AVI DateTimeOriginal tag when month name is all capitals <li>Improved compatibility when running "exiftool" with no arguments (thanks Jesse Zhang) <li>Added support for Nikon D80 lens information and recognize a new lens (thanks Robert Rottmerhusen) <li>Improvements to Pentax maker note decoding (thanks Ger Vermeulen) <li>Fixed problem when extracting information from image in memory when the UTF-8 flag is set for the image data (fixes install on RHEL 3) </ul> <a name='v6.30'><b>July 28, 2006 - Version 6.30</b></a> <ul> <li>Added ability to read/write APP0 CIFF segment (found in Canon PowerShot A5 and PowerShot Pro 70 images) <li>Improved decoding of Canon 30D FileNumber (was ShutterCount) <li>Made EXIF tags ImageNumber and ImageHistory writable <li>Fixed decoding of TargetExposureTime for Canon 20D/250D and ExposureTime for Kiss Digital N <li>Fixed problem processing GIF images which don't contain a color table <li>Fixed bug in EXIF tag name documentation introduced in 6.12 where ExifIFD group was not properly shown <li>Fixed typo in exiftool pod documentation ("GROUP:TAG" was reversed) </ul> <a name='v6.29'><b>July 24, 2006 - Version 6.29</b> <span class=grn>(production release)</span></a> <ul> <li>Added XMP-xmpMM:PreservedFileName tag (used by Photoshop CS) <li>Fixed problem reading TIFF images which don't start at the beginning of the file </ul> <a name='v6.28'><b>July 12, 2006 - Version 6.28</b></a> <ul> <li>Fixed bug introduced in 6.04 which prevented PNG tags from being deleted <li>Improved decoding of Canon PictureStyle information </ul> <a name='v6.27'><b>July 7, 2006 - Version 6.27</b></a> <ul> <li>Decode a number of new tags in Canon, Casio, FujiFilm, Minolta, Nikon, Panasonic, Pentax, Ricoh and Sony and maker notes <li>Improved recognition of various Minolta maker note formats <li>Added a number of new Nikon Capture tags <li>Added support for XML-formatted XMP files <li>Properly handle mixed linefeed characters in PostScript images <li>Improved formatting of DICOM date/time values <li>Added "Actual Offset" entry to HtmlDump tooltip information </ul> <a name='v6.26'><b>June 27, 2006 - Version 6.26</b></a> <ul> <li>Avoid creating new SubIFD when copying all tags with "-all:all" from a RAW or TIFF image (this gave problems if image was subsequently edited by PSCS2) <li>Fixed decoding of a few Nikon LensID strings <li>Minor fixes and changes to htmlDump and verbose output <li>Added a new Pentax LensType (thanks Kazumichi Kawabata) </ul> <a name='v6.25'><b>June 19, 2006 - Version 6.25</b></a> <ul> <li>Added read/write support for WDP (Windows Media Photo) images <li>Improved algorithm to recognize maker notes offsets which need fixing <li>Properly handle maker notes which have value offsets relative to the individial IFD entries (Kyocera, Rollei and some Konica and Toshiba models) <li>Decode a couple of new Sigma lens values in Canon LensType <li>Decreased block size for buffered files to improve performance over slow pipes </ul> <a name='v6.24'><b>June 9, 2006 - Version 6.24</b></a> <ul> <li>Added -fast option to avoid scanning to the end of JPEG images to check for an AFCP or PreviewImage trailer <li>Recognize PS files which start with %!Adobe-PS instead of %!PS <li>Improved FlashPix verbose output <li>API Changes: <ul> <li>Added FastScan option </ul> </ul> <a name='v6.23'><b>June 7, 2006 - Version 6.23</b></a> <ul> <li>Added new feature allowing tag-name expressions to be used with the -TagsFromFile option </ul> <a name='v6.22'><b>June 5, 2006 - Version 6.22</b></a> <ul> <li>Added read support for FPX (FlashPix) images and FPXR (FlashPix Ready) JPEG APP2 meta information <li>Added AllDates shortcut tag to allow DateTimeOriginal, CreateDate and ModifyDate to all be written via a single tag <li>Added shortcuts to tag name documentation <li>Return "0000:00:00 00:00:00" instead of "1970:01:01 00:00:00" as the string representation of numerical times with a value of zero </ul> <a name='v6.21'><b>May 26, 2006 - Version 6.21</b></a> <ul> <li>Changed CR2 identification logic to properly identify CR2 images which have been edited by PhotoMechanic </ul> <a name='v6.20'><b>May 24, 2006 - Version 6.20</b></a> <ul> <li>Added read support for Real audio/video (RA, RM, RV, RMVB, RAM, RPM) files <li>Downgraded "Error reading value..." message from an error to a warning <li>Fixed bug where IgnoreMinorErrors option could get set when writing images with NikonCapture information <li>Fixed two ID3 tag names which contained spaces <li>Fixed problem parsing DateTimeOriginal in Casio EX-Z30 AVI files <li>Fixed problem with apostrophes in HTML documentation for some browsers <li>API Changes: <ul> <li>Can now call Options() with undefined value to set option value to undef </ul> </ul> <a name='v6.19'><b>May 16, 2006 - Version 6.19</b></a> <ul> <li>Added read support for SWF (Shockwave Flash) files </ul> <a name='v6.18'><b>May 15, 2006 - Version 6.18</b></a> <ul> <li>Added read support for MPEG audio/video files <li>Decode audio information in MP3 files <li>Print Nikon:LensPosition in hex </ul> <a name='v6.17'><b>May 12, 2006 - Version 6.17</b> <span class=grn>(production release)</span></a> <ul> <li>Fixed problem with rpmbuild on Mandriva 2006.0 (thanks Niels Kristian) <li>Fixed typo in iptc2xmp.args and xmp2iptc.args which prevented the XMP Instructions from being copied properly (thanks Mark Tate) <li>Handle byte order mark in unicode EXIF strings </ul> <a name='v6.16'><b>May 8, 2006 - Version 6.16</b></a> <ul> <li>Write %ADO_ContainsXMP comment when adding XMP to EPS images <li>Don't issue DSC warning when writing Adobe version 3.1 EPS images <li>Added separate table for decoding tags in IFD0 of Panasonic RAW images <li>Improvements to Nikon AF point decoding (thanks Roger Larsson) <li>Allow .ExifTool_config directory to be specified by setting the EXIFTOOL_HOME environment variable <li>Made all maker note write errors minor so they can be ignored if necessary, allowing information to be written to images with corrupted maker notes <li>Minor change to perl-Image-ExifTool.spec to fix problem with rpmbuild (thanks Volker Kuhlmann) <li>Fixed bug which could cause incorrect date to be calculated when shifting date/time values </ul> <a name='v6.15'><b>Apr. 20, 2006 - Version 6.15</b></a> <ul> <li>Changes to MIE specification involving string lists and alternate languages </ul> <a name='v6.14'><b>Apr. 18, 2006 - Version 6.14</b></a> <ul> <li>Fixed some problems with EPS writer and removed beta testing status (thanks to Tim Kordick for help with testing) <li>Created new MIE meta information format [Note: The MIE module is fully functional but the MIE format specification is still in development] <li>Added print conversion for SpatialFrequencyResponse <li>Extended meaning of -z option when writing to allow compressed information to be written to MIE files <li>Added Minolta FlashMetering tag <li>API Changes: <ul> <li>Added 'Compress' option </ul> </ul> <a name='v6.13'><b>Apr. 9, 2006 - Version 6.13</b></a> <ul> <li>Fixed problem with writing FileName that caused format codes not to be properly expanded if the specified filename already existed <li>Standardized reported FileType for ACR, AIFC, CRW, JP2, PS and PSD files <li>Allow 2 values to be written for EXIF TimeZoneOffset and make EXIF SecurityClassification writable </ul> <a name='v6.12'><b>Apr. 5, 2006 - Version 6.12</b></a> <ul> <li>Avoid printing garbage for DNG maker note information that was not copied properly by the Adobe DNG converter (affects converted ORF images) <li>Disabled "Possibly incorrect maker notes offsets" warning for a number of Olympus models <li>Fixed bug introduced in 6.04 which could cause endless loop (eeek!) when writing tags with PostScript equivalents <li>Fixed error reading some DICOM images </ul> <a name='v6.11'><b>Apr. 3, 2006 - Version 6.11</b></a> <ul> <li>Added a few new Pentax LensType's <li>Fixed bug rewriting MOS images (this bug introduced in version 5.95 caused an error message and prevented the file from being rewritten) </ul> <a name='v6.10'><b>Mar. 31, 2006 - Version 6.10</b></a> <ul> <li>Added ability to use filename format codes %d, %f and %e in values written to FileName and Directory tags <li>Fixed problem of odd filenames being generated when setting FileName from an invalid date/time tag <li>Removed debugging print statement forgotten in Olympus code of 6.07 (oops) <li>API Changes: <ul> <li>Added StrictDate option </ul> </ul> <a name='v6.09'><b>Mar. 30, 2006 - Version 6.09</b></a> <ul> <li>Made FileName and Directory writable (enabling a whole new functionality!) <li>Added ability to write DOS-style EPS images [Note: still in beta testing] <li>Increased precision of Composite Red/BlueBalance print conversion <li>When combining the -o and -overwrite_original options, the original file is now erased if the new file is written successfully <li>Added a new Nikon lens (thanks Werner Kober) <li>API Changes: <ul> <li>Added SetFileName() routine <li>In list context, CountNewValues() now also returns a "pseudo" tag count </ul> </ul> <a name='v6.08'><b>Mar. 25, 2006 - Version 6.08</b></a> <ul> <li>Made YCbCrCoefficients and YCbCrPositioning protected when writing <li>Decode some new Nikon-specific tags in QuickTime videos from Nikon cameras <li>Calculate Red/BlueBalance for Olympus images <li>Fixed "APP1 segment too large" problem when copying all tags from Canon EOS-5D or EOS-30D CR2 image to JPEG image <li>Fixed problem running "exiftool" with no arguments in Windows cmd shell </ul> <a name='v6.07'><b>Mar. 22, 2006 - Version 6.07</b></a> <ul> <li>Added a number of new Olympus tags (thanks Frank Ledwon) <li>Decode Adobe JPEG APP14 segment (thanks Didier Giet) <li>Made Rotation writable in CRW images <li>Changed some FujiFilm WhiteBalance strings <li>No longer return multiple tags when a group is specified unless the duplicates option is enabled or the group name is 'all' or '*' </ul> <a name='v6.06'><b>Mar. 20, 2006 - Version 6.06</b></a> <ul> <li>Added validity check for Canon FocalPlaneX/YSize which resulted in incorrect values of FocalLength35efl being calculated for some PowerShot models <li>Made Opto-ElectricConvFactor value binary </ul> <a name='v6.05'><b>Mar. 18, 2006 - Version 6.05</b></a> <ul> <li>Improved JPEG writer to tolerate any segment ordering <li>Fixed Olympus ExtenderStatus to work with E-330 (thanks Mark Dapoz) </ul> <a name='v6.04'><b>Mar. 15, 2006 - Version 6.04</b></a> <ul> <li>Added write support for EPS and PS images [Note: still in beta testing -- must currently use the -m option to enable writing to EPS images] <li>Added ability to write ICC_Profile data as a block <li>Added read/write support for ICC and ICM color profile files <li>Added read/write support for ERF (Epson Raw Format) images <li>Added a couple of new Olympus tags and LensType's (thanks Mark Dapoz) <li>Added ability to scan past unknown header to find JPEG or TIFF image <li>Added Canon EOS 30D custom functions <li>Renamed Panasonic SerialNumber tag to InternalSerialNumber <li>Renamed Canon 5D PictureNumber tag to ImageNumber <li>Improved MRW reading and writing <li>Decode a number of new Minolta tags and changed names of some existing tags <li>Decode some type-specific data in ASF StreamProperties, including video ImageWidth and ImageHeight <li>Extract a few more PostScript tags and derive ImageWidth and ImageHeight for PostScript documents <li>Some improvements to Panasonic decoding (thanks Tels) <li>API Changes: <ul> <li>'Unsafe' tags are now copied by SetNewValuesFromFile() if specified explicitly </ul> <li>Internal Changes: <ul> <li>SubDirectory tags are no longer Writable by default in WRITABLE tables </ul> </ul> <a name='v6.03'><b>Mar. 2, 2006 - Version 6.03</b></a> <ul> <li>Added print conversion for CFAPlaneColor <li>Decode CFAPattern as written incorrectly in ASCII by some Panasonic cameras <li>Added recently announced Canon cameras to CanonModelID list <li>API Changes: <ul> <li>Added ability to prefix tag name with group in arguments to ImageInfo() (read/write symmetry is now improved since this feature already existed in the write routines, and now group names can be used in shortcuts) <li>Changed order of filtering for Group# option and tag exclusions to be applied after extracting tags specified in calls to ImageInfo() </ul> </ul> <a name='v6.02'><b>Feb. 26, 2006 - Version 6.02</b></a> <ul> <li>Fixed problem rewriting Photoshop IRB resources as written by some applications (eg. PixVue) <li>Improved decoding of AVI files to increase speed and extract more tags <li>Added -overwrite_original_in_place option <li>Added a number of new XMP tags and bring XMP support up to new specification, plus a few undocumented XMP-aux tags (thanks Lou Salkind) <li>Added support for large DNG preview image (with JpgFromRaw tag) <li>Added ability to decode DNG Adobe MakerNotes <li>Added SEMInfo tag (thanks Robert Mucke) <li>Decode (but don't rewrite) old PS APP13 "Adobe_Photoshop2.5:" segment </ul> <a name='v6.01'><b>Feb. 20, 2006 - Version 6.01</b></a> <ul> <li>Added back RedBalance and BlueBalance as composite tags <li>Fixed potential problem in File::RandomAccess which could cause a "substr outside of string" warning </ul> <a name='v6.00'><b>Feb. 19, 2006 - Version 6.00</b> <span class=grn>(production release)</span></a> <ul> <li>Added read support for Sony SR2 raw images (but most tags still unknown) <li>Added read support for Kyocera Contax N Digital RAW images <li>Added ability to write or delete shortcuts which reference multiple tags (previously only shortcuts referencing a single tag were writable) <li>Changed descriptions of FNumber, ExposureTime, ISO, DateTimeOriginal, CreateDate and ModifyDate to more closely match their tag names <li>Separated Canon and Nikon Red/BlueBalance information into individual components with tag names like WB_RGGBLevels <li>Decoded a number of new Canon tags for EOS models, including ColorBalance tables, 20D AF points and SensorInfo (thanks Rainer Honle) <li>Fixed incorrect decoding of EOS 10D/300D color balance modes <li>More additions and minor fixes to Canon decoding <li>Made EOS-1D personal functions writable <li>Added ability to write bitmasks at the PrintConv level <li>Set MIME type for all RAW image formats to "image/x-raw" <li>The -f option is no longer implied when -S and -s are combined <li>Fixed bug introduced in 5.99 which broke the "-tagsFromFile @" feature <li>Fixed problem with offsets in verbose dump of CRW images <li>Fixed problem with some tags in Canon images not printing without -a option <li>Fixed problem with validation of Canon PictureInfo for images rotated by Canon ZoomBrowser EX (thanks Joshua Bixby) </ul> <a name='v5.99'><b>Feb. 1, 2006 - Version 5.99</b></a> <ul> <li>Major additions to Canon maker note decoding, including EOS-1D personal functions (thanks Rainer Honle for decoding many 5D tags) <li>Added Canon maker note footer when rewriting Canon maker notes <li>Attempt to fix problem where ScaleFactor35efl was calculated incorrectly for some Canon images <li>Reduce memory useage and speed up writing of large TIFF images <li>Fixed problem with binary data offsets in verbose dump <li>Fixed problem writing Comment if 'File' group specified <li>Fixed bug which could cause formatting error in htmlDump output </ul> <a name='v5.98'><b>Jan. 22, 2006 - Version 5.98</b></a> <ul> <li>Enhanced FMT syntax for -o, -w and -tagsFromFile options <li>Decode maker notes of Samsung DX-1S <li>Added ability to list tags in a specific group <li>Recognize maker notes of a few more Kodak models <li>Added a few more Canon LensType's <li>Added missing semicolons in HtmlDump JavaScript output </ul> <a name='v5.97'><b>Jan. 16, 2006 - Version 5.97</b></a> <ul> <li>Added support for Canon 5D custom functions (thanks Rainer Honle) <li>Added support for Canon 1DmkII and 350D custom functions <li>General fixes and improvements to Canon custom functions <li>Renamed ICC_Profile Copyright to ProfileCopyright <li>Report all extraction errors when copying only specified tags from file <li>Avoid issuing "Error rebuilding maker notes" warning when copying maker notes that don't require rebuilding </ul> <a name='v5.96'><b>Jan. 14, 2006 - Version 5.96</b></a> <ul> <li>Fixed problem where XMP information could be lost when writing PSD images </ul> <a name='v5.95'><b>Jan. 12, 2006 - Version 5.95</b></a> <ul> <li>Decode AIFF SampleRate <li>Fixed problem where FileType was being set twice for AIFF files <li>Patched problem reading some file types through Windows cmd shell pipeline <li>Properly identify CR2 images read via pipes (previously identified as TIFF) <li>Improved formatting of printed values for some DNG tags <li>Fixed problem with EXIF format of some tags when writing <li>Changed 'rational' format names to match full bit size of value </ul> <a name='v5.94'><b>Jan. 10, 2006 - Version 5.94</b></a> <ul> <li>Fixed problem extracting OriginalRawImage from little-endian DNG images <li>Fixed problem where "unreferenced bytes" error could be incorrectly issued when deleting all EXIF from a TIFF image </ul> <a name='v5.93'><b>Jan. 9, 2006 - Version 5.93</b></a> <ul> <li>Added ability to write JFIF information </ul> <a name='v5.92'><b>Jan. 9, 2006 - Version 5.92</b></a> <ul> <li>Added ability to extract and decompress original raw image from DNG <li>Fixed problem extracting information from some image types in pipelines <li>Decode more information in PSD images </ul> <a name='v5.91'><b>Jan. 7, 2006 - Version 5.91</b></a> <ul> <li>Added write support for PSD images <li>Made a couple more Photoshop tags writable </ul> <a name='v5.90'><b>Jan. 6, 2006 - Version 5.90</b></a> <ul> <li>Added read support for AIFF audio files <li>Made Photoshop:XResolution and Photoshop:YResolution writable <li>Fixed problem with processing some RIFF files <li>Added a new Canon LensType <li>API changes: <ul> <li>SetNewValue() now accepts an ARRAY reference for setting list-type tags such as Keywords, or a SCALAR reference for binary data, so it may now be called directly with any value returned by GetValue(). </ul> </ul> <a name='v5.89'><b>Jan. 3, 2006 - Version 5.89</b></a> <ul> <li>Recognize Panasonic Type 2 maker notes <li>Changed Nikon LensID to a composite tag to allow better decoding of non-Nikon lenses, and added a bunch of new lenses to the list </ul> <a name='v5.88'><b>Jan. 1, 2006 - Version 5.88</b></a> <ul> <li>Added ability to read and write AFCP information in JPEG images <li>Added read support for WMV video and WMA audio files (ASF format files) <li>Added EXIF tags 0x82a5-0x82ac <li>Fixed TagID of IntergraphPacketData tag <li>Fixed problem in rewriting some types of JVC maker notes <li>Renamed WAV module to RIFF </ul> <a name='v5.87'><b>Dec. 22, 2005 - Version 5.87</b> <span class=grn>(production release)</span></a> <ul> <li>Added support for JVC maker notes <li>Extract a number of new DNG tags plus DNG JPEG preview image <li>Renamed DNGCameraSerialNumber tag to CameraSerialNumber </ul> <a name='v5.86'><b>Dec. 20, 2005 - Version 5.86</b></a> <ul> <li>Added support for AVI and MP4 videos <li>Improved decoding of Olympus maker notes <li>Improved APP12 decoding <li>Improved CanonPictureInfo validation to work with more PowerShot models <li>Display Canon 1D serial numbers with 6 digits <li>Decode maker notes of Nikon D1 <li>Combining -t with -S now gives a single-line tab-delimited list of values <li>Extract preview image for Samsung Digimax i5 </ul> <a name='v5.85'><b>Dec. 13, 2005 - Version 5.85</b></a> <ul> <li>Added ability to read and write XMP files which don't have an xpacket header <li>Fixed problem deleting entire XMP data block using '-xmp=' syntax <li>More minor HtmlDump improvements </ul> <a name='v5.84'><b>Dec. 12, 2005 - Version 5.84</b></a> <ul> <li>Minor improvements to HtmlDump output </ul> <a name='v5.83'><b>Dec. 12, 2005 - Version 5.83</b></a> <ul> <li>Added -F option to allow maker notes offsets to be fixed <li>Added -htmlDump option to generate a verbose HTML-based hex dump of EXIF and/or TIFF information (cool new diagnostic tool) <li>Attempt to validate maker notes offsets and issue warning if they look wrong <li>Fixed problem rewriting PreviewImage in some Olympus and Pentax images <li>Increased speed for extracting large preview images <li>Improved synthetic maker notes when coping tags from CRW file <li>Display absolute offsets for EXIF values in very very verbose mode <li>Verbose option output is now written to file if -w option used <li>Speed up rewriting of some TIFF images when using ActivePerl 5.8.x for Windows (image strips are now copied in a single block if they are contiguous in the file to avoid ActivePerl bug which causes extremely poor performance when concatenating a large number of memory blocks) <li>Added a couple of new Nikon and Pentax lens ID's (thanks Robert Rottmerhusen and David Buret) <li>Decode PrintIM information in Casio QV-4000 <li>Fixed Decoding of Canon EOS D60 serial numbers to agree with Canon utilities <li>API changes: <ul> <li>Added HtmlDump and TextOut options </ul> </ul> <a name='v5.82'><b>Nov. 26, 2005 - Version 5.82</b></a> <ul> <li>Fixed bug which caused error rewriting Minolta MRW images <li>Added MRW write test <li>Improved MRW verbose output </ul> <a name='v5.81'><b>Nov. 24, 2005 - Version 5.81</b></a> <ul> <li>Changed writing of TIFF so that existing IPTC will be rewritten as int32u whenever IPTC is edited, regardless of original format type. This allows files to be 'fixed' even if IPTC was previously another format (now we get to see if there is any software out there that barfs on int32u's...) <li>Changed the -s option so tag names are displayed instead of descriptions (now similar to the -S option, but values are aligned in a column) <li>Remove padding at the end of IPTC record when writing <li>Fixed problem which was generating a warning with ActivePerl 5.6.1 </ul> <a name='v5.80'><b>Nov. 22, 2005 - Version 5.80</b></a> <ul> <li>Changed writing of new TIFF IPTC information to make it visible in Nikon Capture (for some reason requires int32u format) <li>Installed patch for building of ExifTool RPMS on Mandriva Linux (thanks Niels Kristian) </ul> <a name='v5.79'><b>Nov. 22, 2005 - Version 5.79</b></a> <ul> <li>Fixed problem which could render XMP information unreadable by Photoshop when editing some XMP written by Photoshop CS2 </ul> <a name='v5.78'><b>Nov. 21, 2005 - Version 5.78</b></a> <ul> <li>Fixed problem which could generate an error when adding IFD1 to an image </ul> <a name='v5.77'><b>Nov. 18, 2005 - Version 5.77</b> <span class=grn>(production release)</span></a> <ul> <li>Allow integer tag values to be specified in hex (with leading '0x') <li>Fixed problem which generated warnings about symbol "@indent" in Nikon.pm when using older versions of Perl (observed with 5.6.1) </ul> <a name='v5.76'><b>Nov. 16, 2005 - Version 5.76</b></a> <ul> <li>Tolerate extra null padding at end of TIFF images (as written by Photoshop CS) when rewriting TIFF images <li>Minor improvements to DICOM image processing <li>Updated FAQ </ul> <a name='v5.75'><b>Nov. 14, 2005 - Version 5.75</b></a> <ul> <li>Fixed problem decompressing deflated DICOM images </ul> <a name='v5.74'><b>Nov. 14, 2005 - Version 5.74</b></a> <ul> <li>Added read support for DICOM (DCM, DC3, DIC, DICM) and ACR-NEMA (ACR) medical image files <li>Decode a lot more Nikon Capture information and add write ability <li>Updated Nikon makernote decoding for D200 and new AF-S Nikkor 18-200 lens (thanks Werner Kober) <li>Added a number of new Canon LensType's (thanks Volker Gering) <li>Recognize file types even if they have the wrong extension </ul> <a name='v5.73'><b>Nov. 7, 2005 - Version 5.73</b></a> <ul> <li>Added ability to shift date/time tag values <li>Extract Red/BlueBalance tags for Nikon D2Hs, D50 and D2X <li>Decode Nikon Capture Data to extract IPTC information and Rotation <li>Added a new Olympus LensType (thanks Michael Meissner) </ul> <a name='v5.72'><b>Oct. 28, 2005 - Version 5.72</b></a> <ul> <li>Added ability to create XMP data files. This is more significant than it sounds: The -o option may now be used to generate XMP files from information in any other format, or even to create an XMP file from nothing more than tags defined on the command line. <li>Added printout of number of directories created with -w and -o options <li>Improved error handling <li>Effectively set preferred group to 'XMP' when writing XMP data files <li>Fixed problem rewriting maker notes of some Pentax cameras <li>API Changes: <ul> <li>Added CanWrite() and CanCreate() functions <li>Allow WriteInfo() source file to be undefined to create new file <li>Allow WriteInfo() output file to be undefined to edit file in place <li>Added extra argument to WriteInfo() to specify output file type </ul> </ul> <a name='v5.71'><b>Oct. 24, 2005 - Version 5.71</b></a> <ul> <li>Added ability to read/write .XMP data files <li>Added -listf option to print list of recognized file types <li>Changed "-group#" option to "-listg#" (but still support old -group#) <li>Moved Kodak APP3 "Meta" tags from EXIF to a new Kodak "Meta" group </ul> <a name='v5.70'><b>Oct. 23, 2005 - Version 5.70</b></a> <ul> <li>Significant internal changes to improve speed and reduce memory useage <li>Fixed a bug introduced in version 5.63 which caused incorrect XMP GPS coordinates to be returned <li>Changed handling of Kodak date records <li>API Changes: <ul> <li>Added ability to access original 'Raw' values via GetValue() <li>GetValue() now returns empty array in list context if value is undefined <li>Values are now converted as they are requested, so the PrintConv option now applies to GetInfo() and GetValue() instead of ExtractInfo() </ul> </ul> <a name='v5.69'><b>Oct. 19, 2005 - Version 5.69</b></a> <ul> <li>Changed UTF-8 bug fix introduced in 5.67 to improve portability and allow it to work with Perl versions back to 5.6 <li>Changed some offsets in verbose output from relative to absolute addressing <li>Improved APP12 decoding <li>Changed technique for rounding off extracted rational values <li>API Changes: <ul> <li>Changed handling of floating point numbers to tolerate locales where a comma is used instead of a decimal point </ul> </ul> <a name='v5.68'><b>Oct. 17, 2005 - Version 5.68</b></a> <ul> <li>Added support for reading Sigma RAW (X3F) images </ul> <a name='v5.67'><b>Oct. 13, 2005 - Version 5.67</b> <span class=grn>(production release)</span></a> <ul> <li>Added support for reading PICT images <li>Fixed a problem when writing information via the ExifTool API if using Perl 5.8 or later and passing a UTF-8 encoded string to SetNewValue(). The problem generated an error which prevented the file from being written <li>Fixed timezone problem in timestamps of QuickTime images which was causing a failed test </ul> <a name='v5.66'><b>Oct. 10, 2005 - Version 5.66</b></a> <ul> <li>Enhanced -tagsFromFile option to allow %d, %f and %e in filenames <li>Extract a few more tags from Canon EOS 5D images <li>Allow multiple ICC_Profiles to be extracted from same image and add a number to the group1 name for subsequent profiles to make the tag locations unique <li>Changed Photoshop PixelsPerInchX/Y and QuickTime DotsPerInchX/Y tag names to X/YResolution. Neither has a corresponding ResolutionUnit tag, so inches should be assumed if no resolution unit is present <li>Added tests of Nikon, Sony and PDF decryption algorithms </ul> <a name='v5.65'><b>Oct. 7, 2005 - Version 5.65</b></a> <ul> <li>Added read support for QuickTime MOV videos (and QTIF images if anyone cares) <li>Extract maker note information from Sony SRF raw images <li>Improved Jpeg2000 decoding <li>Decode a few more Photoshop tags <li>Issue an error if there is extra data after the normal end of file when rewriting TIFF images (avoids possible data loss if attempting to write an unsuported RAW image with a TIFF-like data structure) <li>Added ability to replace existing tags with user defined tags <li>Denote minor errors/warnings by adding '[minor]' to the message (these are the errors which can be ignored with the -m option) <li>Fixed problem of missing LeafSubIFD when rewriting MOS images <li>Removed hack to write Leaf maker note information at start of image </ul> <a name='v5.64'><b>Sept. 30, 2005 - Version 5.64</b></a> <ul> <li>Improved writing of Canon CR2 images to preserve CR2 header and editing information written by Canon Digital Photo Professional software <li>Extract information from JPEG APP0 JFIF segments <li>Added support for extracting Creo Leaf meta information from MOS images <li>Added ability to define new tags in .ExifTool_config file and added a sample ExifTool_config file to the distribution <li>Extended the -w option to allow an expression to be specified <li>Allow tag aliases to be used when writing <li>Changed print conversion of FileSize tag <li>Internal changes to tag lookup to improve speed when writing information <li>Decode Photoshop resolution information </ul> <a name='v5.63'><b>Sept. 21, 2005 - Version 5.63</b></a> <ul> <li>Added read support for MP3 and WAV audio files (Oops... ExifTool has expanded beyond its "Image" roots!) <li>Added write support for PNG and MRW (Minolta RAW) images <li>Improved decoding of PNG profile information and added a few new PNG tags <li>Changes to handling of GPS coordinates: <ul> <li>Added -c (CoordFormat) option to format output of GPS coordinates <li>Added GPSPosition composite tag <li>GPS coordinates now show as decimal degrees with the -n option <li>Much more flexible about the input coordinate format when writing <li>Enforce proper formatting of XMP GPS coordinates </ul> <li>Added XMP-xmp Rating and Label tags, and a few missing XMP-exif GPS tags <li>Added new XMP-dex group <li>Added two new lenses to the Minolta LensID list (thanks Pedro Corte-Real) <li>Added a new lens to the Olympus list (thanks Shingo Noguchi) </ul> <a name='v5.62'><b>Sept. 7, 2005 - Version 5.62</b></a> <ul> <li>Fixed problem reading FujiFilm maker notes from RAF images <li>Extract comments from PPM/PGM/PBM images and add write support <li>Extract maker notes from Nikon Coolscan scanner images </ul> <a name='v5.61'><b>Sept. 3, 2005 - Version 5.61</b></a> <ul> <li>Added read support for PBM, PGM and PPM file formats <li>Added read support for RAF (FujiFilm RAW) file format </ul> <a name='v5.60'><b>Sept. 2, 2005 - Version 5.60</b></a> <ul> <li>Fixed bug where tag was deleted if TAG+=VALUE used for a non-list type tag <li>Fixed problem where reading some CRW files could generate a "Use of uninitialized value in concatenation" warning <li>Restructured XMP to separate tags by namespace <li>Added XMP-xmpTPg, XMP-cc, XMP-xmpPLUS and XMP-PixelLive groups <li>Improved logic for editing XMP list-type tags <li>Removed SubDirectory tags from -list option output <li>More updates to Pentax LensType list <li>Changed Nikon FileSystemVersion tag name to FirmwareVersion <li>Added NikonCaptureData and NikonCaptureVersion tags </ul> <a name='v5.55'><b>Aug. 24, 2005 - Version 5.55</b> <span class=grn>(production release)</span></a> <ul> <li>Added patch to fix word ordering when unpacking doubles on ARM systems with little-endian byte order but big-endian word order (thanks Riku Voipio) <li>Added another lens to the Pentax LensType list </ul> <a name='v5.54'><b>Aug. 22, 2005 - Version 5.54</b></a> <ul> <li>Fixed problem introduced in version 5.50 which broke ability to delete groups of information <li>Added a couple of new Pentax LensType's <li>Renamed Olympus Lens tag to LensType </ul> <a name='v5.53'><b>July 29, 2005 - Version 5.53</b></a> <ul> <li>Added -ext option to allow files to be processed or excluded from processing based on their extension <li>Added MimeType tag <li>Convert PDF UTF-16 character strings to UTF-8 (or Windows Latin1 if '-L' option used) </ul> <a name='v5.52'><b>July 28, 2005 - Version 5.52</b></a> <ul> <li>Removed warning message when writing CR2 files that was intended only for Canon 1D TIFF files </ul> <a name='v5.51'><b>July 27, 2005 - Version 5.51</b></a> <ul> <li>Assume '-TagsFromFile @' for any redirected tags (eg. '-SRCTAG&gt;DSTTAG' or '-DSTTAG&lt;SRCTAG') which are specified without a prior '-TagsFromFile' </ul> <a name='v5.50'><b>July 27, 2005 - Version 5.50</b></a> <ul> <li>Don't rewrite entire file if only FileModifyDate is being changed <li>API Changes: <ul> <li>Added CountNewValues() and SetFileModifyDate() </ul> </ul> <a name='v5.49'><b>July 26, 2005 - Version 5.49</b></a> <ul> <li>Decode encrypted PDF documents <li>Extract metadata from individual PDF pages <li>Speed up parsing of PDF files which use cross-reference streams <li>Improvements to verbose PDF output <li>Updated Nikon LensID's (thanks Robert Rottmerhusen) <li>Minor changes to Canon LensType strings (thanks Michael Tiemann) </ul> <a name='v5.48'><b>July 21, 2005 - Version 5.48</b></a> <ul> <li>Fixed parsing of XMP-pdf CreationDate and ModDate tags </ul> <a name='v5.47'><b>July 21, 2005 - Version 5.47</b></a> <ul> <li>Fixed problem where existing item in list was getting overwritten when adding to XMP lists with '-TAG+=VALUE' syntax <li>Improved verbose output for PDF files and recurse into all Kids dictionaries <li>Don't print warnings when setting the values of non-priority tags unless verbose <li>Added support for PDF-like Adobe Illustrator (.AI) files </ul> <a name='v5.46'><b>July 19, 2005 - Version 5.46</b> <span class=grn>(production release)</span></a> <ul> <li>Fixed bug which could cause CRW file to be corrupted under some conditions when writing and rewriting the same file <li>Added new Canon MaxAperture tag and a few more Canon LensType's (thanks Michael Tiemann) <li>Changed PDF decoding to follow 'Next' links at the same level to avoid deep recursion in long linked lists </ul> <a name='v5.45'><b>July 19, 2005 - Version 5.45</b></a> <ul> <li>Set FileType tags properly for newly added formats <li>Added Canon TargetAperture and TargetExposureTime and decode Canon 1D Mark II lens information structure (thanks Michael Tiemann) <li>Decode more Canon lenses and Canon TargetImageType <li>Changed Priority of Error and Warning tags so that first message takes precedence <li>Fixed problem where Nikon D70 files grew by 20 bytes each time they were written <li>Minor changes to BMP tags <li>Added support for AI (Adobe Illustrator) file format <li>Added BMP, PDF, Photoshop and PostScript tests </ul> <a name='v5.44'><b>July 16, 2005 - Version 5.44</b></a> <ul> <li>Added read support for BMP (and DIB) images </ul> <a name='v5.43'><b>July 16, 2005 - Version 5.43</b></a> <ul> <li>Allow shortcut tags to be used with -tagsFromFile </ul> <a name='v5.42'><b>July 15, 2005 - Version 5.42</b></a> <ul> <li>Added ability to read PostScript (EPS and PS) and PDF images <li>Decode PhotoshopSettings in TIFF images </ul> <a name='v5.41'><b>July 8, 2005 - Version 5.41</b></a> <ul> <li>Added ability to read Photoshop PSD images </ul> <a name='v5.40'><b>July 8, 2005 - Version 5.40</b></a> <ul> <li>Improved decoding of Minolta MRW files to support new cameras <li>Changed Minolta ImageQuality values to conform with Minolta terminology (thanks to Niels Kristian Bech Jensen) <li>Write Windows XP tags to IFD0 instead of ExifIFD (they worked fine in the ExifIFD, but Windows writes them to IFD0 so they really should go there) <li>Really quiet option (-q -q) still suppresses warnings, but no longer suppresses errors </ul> <a name='v5.39'><b>July 6, 2005 - Version 5.39</b></a> <ul> <li>Using -b option now disables -h, -H and -g options <li>Decode Canon Panorama information <li>Improved maker note decoding for some Minolta camera models <li>Changed base offset for Casio EX-Z3 to fix problems decoding some maker note information (it looks like the samples from dpreview.com I had used to code this originally had been corrupted by 3rd party software because new samples downloaded from another web site didn't have the same problem) <li>Improved validation of PreviewImage </ul> <a name='v5.38'><b>July 4, 2005 - Version 5.38</b></a> <ul> <li>Translate older 'xap' XMP namespace prefixes (xap, xapRights, xapMM and xapBJ) to their newer 'xmp' counterparts (xmp, xmpRights, xmpMM and xmpBJ) when generating XMP family 1 group names <li>Added Minolta LensID (thanks to Shingo Noguchi) <li>Other changes to Minolta tags (and fix incorrect spellings of Konica, thanks Niels Kristian Bech Jensen) <li>Updated Nikon LensID's (thanks Robert Rottmerhusen) </ul> <a name='v5.37'><b>June 29, 2005 - Version 5.37</b></a> <ul> <li>Removed unknown status from Photoshop CopyrightFlag and made it writable <li>Decode a new Canon EasyMode value </ul> <a name='v5.36'><b>June 28, 2005 - Version 5.36</b></a> <ul> <li>Added new composite tags: DOF, CircleOfConfusion and HyperfocalDistance <li>Minor changes to simplify and improve generated XMP when writing <li>Convert FocusDistance tag values to meters <li>Reject ScaleFactor35efl if outside reasonable limits <li>Added a few more Nikon LensID's (thanks Robert Rottmerhusen) <li>Ignore white space around '=' sign of arguments in '-@' file </ul> <a name='v5.35'><b>June 24, 2005 - Version 5.35</b></a> <ul> <li>Added support for MNG and JNG images <li>Added a few new PNG tags </ul> <a name='v5.34'><b>June 21, 2005 - Version 5.34</b></a> <ul> <li>Decode ASCII-based APP12 information (tested with Agfa and Polaroid images) <li>Decode remaining PNG chunks in original spec except for IDAT (image data) <li>Only generate FileSize and FileModifyDate tags for plain files </ul> <a name='v5.33'><b>June 16, 2005 - Version 5.33</b></a> <ul> <li>Changed print conversions for Contrast, Saturation and Sharpness throughout to be more consistent and to better conform with the EXIF specification <li>Decode Minolta Dimage Z2 MinoltaImageSize </ul> <a name='v5.32'><b>June 15, 2005 - Version 5.32</b> <span class=grn>(production release)</span></a> <ul> <li>Changes to a few PNG and MIFF tag names <li>Improved PNG/MIFF documentation </ul> <a name='v5.31'><b>June 14, 2005 - Version 5.31</b></a> <ul> <li>Decode compressed information in PNG images if Compress::Zlib is available <li>Decode profile information (including EXIF, XMP, IPTC and ICC_Profile information) from PNG and MIFF images <li>Updated Nikon LensID strings and decode D50 lens info (thanks Robert Rottmerhusen) </ul> <a name='v5.30'><b>June 10, 2005 - Version 5.30</b></a> <ul> <li>Added PNG and MIFF read support <li>Decode Nikon SensorPixelSize </ul> <a name='v5.27'><b>June 9, 2005 - Version 5.27</b></a> <ul> <li>Added -q option </ul> <a name='v5.26'><b>June 8, 2005 - Version 5.26</b></a> <ul> <li>Automatically fix out-of-sequence entries in IFD when writing to comply with the TIFF specification (but not in maker notes) <li>Create new EXIF information using the same byte order as the maker notes when using -tagsFromFile to copy maker notes to a file which previously contained no EXIF information <li>Fixed problem which could copy corrupted maker notes if using multiple -tagsFromFile options in a single command <li>Changed Orientation "Rotate 90 CCW" to "Rotate 270 CW", and changed Canon AutoRotate strings to match <li>Made StripOffsets and StripByteCounts binary data if output is too long <li>Allow "-TagsFromFile '-TAG&lt;SRCTAG'" as well as the current '-SRCTAG&gt;TAG' <li>Recognize some more Nikon lenses <li>API Changes: <ul> <li>Added ByteOrder option to specify byte ordering when creating new EXIF segment in a JPEG file </ul> </ul> <a name='v5.25'><b>June 3, 2005 - Version 5.25</b> <span class=grn>(production release)</span></a> <ul> <li>Fixed problem with writing IPTC Time tags <li>Changed Composite ShutterSpeed to ignore bulb duration if it is negative <li>API Changes: <ul> <li>Allow tag name to be prefixed by group in calls to SetNewValue() </ul> </ul> <a name='v5.24'><b>June 1, 2005 - Version 5.24</b></a> <ul> <li>Added new "XMP" tag to allow read/write of XMP data as a block <li>Added numbers to subsequent SubIFD group names to allow tags in various SubIFD's to be accessed individually <li>Give priority to tags in full resolution image (whichever TIFF directory this is in) <li>Renamed ExifData tag to EXIF (but didn't make it writable as a block like XMP) <li>Recognize maker notes from more Konica Minolta cameras <li>Extract PreviewImage for Samsung Digimax V700, Kenox V10 and Digimax V10 <li>Changed validation of CanonPictureInfo to work with more PowerShot cameras (Note: for these cameras, CanonImageHeightAsShot may not be meaningful) <li>Added a number of new IPTC ApplicationRecord tags <li>Added Nikon ExposureDifference tag <li>Removed trailing white space in values printed by exiftool </ul> <a name='v5.23'><b>May 27, 2005 - Version 5.23</b></a> <ul> <li>Changed behaviour of -tagsfromfile slightly so that '-GROUP:TAG&gt;DSTTAG' now commutes information between different groups unless a destination group is specified <li>Improved reliability of calculating offsets in Pentax maker notes </ul> <a name='v5.22'><b>May 26, 2005 - Version 5.22</b></a> <ul> <li>Fixed problem with new '-tagsFromFile @' feature which occurred when simultaneously copying tags and writing new values to multiple target files (the new values were only getting written to the first file) </ul> <a name='v5.21'><b>May 25, 2005 - Version 5.21</b></a> <ul> <li>Allow target file to be specified by '@' with -TagsFromFile option <li>Fixed bug which caused internal error when using -TagsFromFile option to copy PrintIM information to a file that already contained PrintIM data <li>Fixed problem which broke the (now deprecated) -allTagsFromFile=FILE syntax <li>Fixed problem decoding Pentax Date for some Optio cameras <li>Fixed problem in GeoTiff decoding which could cause some tags to be missed <li>Decode a number of new Pentax tags (using my new Optio WP!) <li>Made Photoshop URL writable <li>Limit length of JPEG segment dump at Verbose=4, and add Verbose=5 level <li>API Changes: <ul> <li>Added SaveNewValues() and RestoreNewValues() </ul> </ul> <a name='v5.20'><b>May 20, 2005 - Version 5.20</b></a> <ul> <li>Give names to many Photoshop tags, but leave them marked as 'Unknown' so they aren't extracted under normal circumstances (must use the -u option) <li>Read/write Kyocera maker notes properly (although Kyocera information remains unknown) <li>Changed installation tests to tolerate rounding-off errors or format differences in floating point numbers </ul> <a name='v5.19'><b>May 17, 2005 - Version 5.19</b></a> <ul> <li>Added -overwrite_original option </ul> <a name='v5.18'><b>May 16, 2005 - Version 5.18</b> <span class=grn>(production release)</span></a> <ul> <li>Added -@ option and two utility files (iptc2xmp.args and xmp2iptc.args) to use with this option for translating between IPTC and XMP tag names <li>Disable normal console output if -v option used and no tags specified <li>Repair incorrect first byte of MRW preview images when extracting <li>More tweaking of -TagsFromFile order of operations </ul> <a name='v5.17'><b>May 14, 2005 - Version 5.17</b></a> <ul> <li>Allow 'All' to be used as a group name with '-TagsFromFile' option to preserve original tag groups (eg. '-all:all') <li>PrintIM information is now copied with -TagsFromFile <li>Decode EXIF:Gamma tag <li>Decode Canon 350D FileNumber <li>Made a few more tags writable <li>Don't rewrite TIFF files which could be Canon 1D RAW files since this format currently isn't supported (can use the -m option to write anyway, which will remove the RAW image data if this is a 1D file) <li>Don't add null terminator to UserComment, GPSProcessingMethod or GPSAreaInformation <li>Improved logic for handling command line tag names and exclusions, especially when associated with the -TagsFromFile option </ul> <a name='v5.16'><b>May 10, 2005 - Version 5.16</b></a> <ul> <li>Decode a number of new Nikon lens-related tags (thanks again Robert Rottmerhusen) <li>Various other improvements </ul> <a name='v5.15'><b>May 7, 2005 - Version 5.15</b></a> <ul> <li>Added powerful new information redirection feature to -TagsFromFile option <li>Added writable File:FileModifyDate tag which represents the filesystem date/time of last modification <li>Allow '*' to also be used as well as 'all' to represent all tags, although this feature is not documented for the command-line options because 'all' is more convenient since '*' must be quoted to prevent shell globbing </ul> <a name='v5.11'><b>May 5, 2005 - Version 5.11</b></a> <ul> <li>Fixed problem where the proper tags weren't excluded from being extracted if -GROUP:All and --TAG options are used together on the command line </ul> <a name='v5.10'><b>May 5, 2005 - Version 5.10</b></a> <ul> <li>Changed -AllTagsFromFile option to -TagsFromFile and allow copied tags to be specified on the command line. (-AllTagsFromFile is preserved as an alias to -TagsFromFile for backward compatibility.) <li>Allow -GROUP:All and --GROUP:All on command line to extract or exclude all tags in specified group <li>Allow family 1 group names to be used when deleting groups with -GROUP:All= <li>Added composite CFAPattern derived from CFARepeatPatternDim and CFAPattern2 <li>Fixed problem where tags which can exist in both IFD0 and ExifIFD weren't being properly removed from one IFD when written to the other <li>Added FAQ </ul> <a name='v5.06'><b>May 2, 2005 - Version 5.06</b></a> <ul> <li>Made a few more EXIF tags writable <li>No longer add null-terminator to JPEG comment (was confusing xv) </ul> <a name='v5.05'><b>Apr. 20, 2005 - Version 5.05</b> <span class=grn>(production release)</span></a> <ul> <li>Added Nikon LensFStops tag (thanks to Robert Rottmerhusen) <li>Reliability improvements for writing maker notes information <li>exiftool now returns error status if there were errors reading/writing files </ul> <a name='v5.04'><b>Apr. 18, 2005 - Version 5.04</b></a> <ul> <li>Fixed problem where maker notes of Olympus C2500L could get corrupted when writing </ul> <a name='v5.03'><b>Apr. 18, 2005 - Version 5.03</b></a> <ul> <li>ExifTool now requires Perl version 5.004 or higher (previously 5.002 was OK) <li>Restrict the size of preview images where data is referenced directly as the value data of an IFD entry (only affects Casio images) <li>Fixed problems rewriting some Casio maker notes <li>Change priority of orientation (and a number of other tags which may appear in IFD1) so value in IFD0 takes precedence of value in IFD1 if it exists <li>API Changes: <ul> <li>Allow any file reference, not only GLOB references, to be used in function calls </ul> </ul> <a name='v5.02'><b>Apr. 16, 2005 - Version 5.02</b></a> <ul> <li>Fixed problem rewriting Pentax *istD preview image </ul> <a name='v5.01'><b>Apr. 15, 2005 - Version 5.01</b></a> <ul> <li>Major speed improvements for writing large JPEG files with preview images <li>Fixed problem rewriting preview in Olympus E-1 and E-300 images <li>Old large preview is now properly removed when writing new small preview <li>Allow PreviewImage to be deleted (ie. set length to zero) <li>Don't extract images that have zero length <li>Deleting MakerNotes group now works in conjunction with -allTagsFromFile <li>Change image validation again to only validate images for tags that were specifically requested <li>Separate lookups by manufacturer for Olympus lens information </ul> <a name='v5.00'><b>Apr. 14, 2005 - Version 5.00</b></a> <ul> <li>ALL MAJOR PLANNED WRITING FEATURES NOW IMPLEMENTED! <li>Finally solved problem of writing large preview images in JPEG files <li>-AllTagsFromFile now sets PreviewImage to 'dummy' if it exists in the maker notes to avoid writing a large preview to the destination file (now you have to do this manually afterwards if this is what you want) <li>Fixed problem rewriting Olympus E1 maker note subdirectories <li>Only validate extracted images when Binary (-b) option is used <li>Rename Olympus PreviewImageAvailable to PreviewImageValid, and check/set this tag when reading/writing the preview image <li>Change priority of X/YResolution tags so IFD0 value takes precedence <li>Changes to Olympus Lens decoding </ul> <a name='v4.95'><b>Apr. 11, 2005 - Version 4.95</b></a> <ul> <li>Added ability to delete all meta information, or all information in a group <li>Create some mandatory IPTC tags automatically when writing IPTC information <li>Decoded a bunch more Olympus tags (thanks to Frank Ledwon) <li>Decoded a couple more Canon 1D MkII tags (thanks to Denny Priebe) <li>Fixed problem where Sony maker notes could be corrupted when rewriting file <li>Fixed problem that could cause wrong tag description to be printed for missing tags when the -f option is used <li>Account for different encoding of Canon ExposureTime in 20D and 350D, and lower priority of Canon ExposureTime and FNumber so regular EXIF values take precedence because it appears these values may be model dependent (I hate it when that happens) </ul> <a name='v4.94'><b>Apr. 6, 2005 - Version 4.94</b></a> <ul> <li>Added support for Kodak DX3215 and DX3700 <li>Improved Kodak decoding and changed some Kodak tag names <li>Improved logic to guard against cyclical recursion in EXIF directories <li>Allow tags to be edited in IFD2, IFD3, etc... <li>Patched problem when writing Canon 350D images due to probable bug in 350D firmware (version 1.0.1) that writes an incorrect ThumbnailLength in IFD1 </ul> <a name='v4.93'><b>Apr. 2, 2005 - Version 4.93</b> <span class=grn>(production release)</span></a> <ul> <li>Added IPTC XMP Core support <li>Added support for Kodak CX4200 plus other minor Kodak changes <li>Made Kodak maker notes writable <li>Minor changes to Olympus tag names and decoding <li>Split HTML TagNames documentation into separate files </ul> <a name='v4.92'><b>Mar. 31, 2005 - Version 4.92</b></a> <ul> <li>Added support for Kodak and Ricoh cameras <li>Decode still more Olympus E-1/E-300 tags <li>Added 'Directory' tag <li>Decode a few more Pentax tags (thanks to John Francis) <li>Allow newlines in tag values on command line when writing <li>Fixed problem rewriting makernotes with sub directories (eg. Olympus) </ul> <a name='v4.91'><b>Mar. 28, 2005 - Version 4.91</b></a> <ul> <li>Decode yet more Olympus E-1/E-300 tags <li>Changed decoding of Olympus E-300 Quality tag <li>Patched bug in Olympus maker notes that was causing ExifTool to report an error when reading ORF files <li>Fixed problem where strings weren't being properly truncated at the null terminator if there was a newline after the terminator <li>Improved decoding for some Nikon tags (credit Tom Christiansen) <li>Added Nikon shortcut <li>Added composite SubSecDateTimeOriginal tag <li>Fixed problem where CRW file without file extension wasn't being identified properly <li>Fixed problem extracting thumbnail from some (specifically Olympus) images <li>Changed verbose output to always show original EXIF format <li>Skip over EXIF entries with unknown format instead of aborting (while reading only) <li>Recognize TIFF field type 13 </ul> <a name='v4.90'><b>Mar. 24, 2005 - Version 4.90</b></a> <ul> <li>Extract Olympus PreviewImage, and decode a bunch more Olympus tags <li>Improvements to documentation </ul> <a name='v4.89'><b>Mar. 23, 2005 - Version 4.89</b></a> <ul> <li>Decode subdirectories in Olympus maker notes (now much more information is extracted for E-1 and E-300 cameras, although most is still unknown) </ul> <a name='v4.88'><b>Mar. 22, 2005 - Version 4.88</b></a> <ul> <li>Convert exiftool help to POD format </ul> <a name='v4.87'><b>Mar. 15, 2005 - Version 4.87</b> <span class=grn>(production release)</span></a> <ul> <li>Added notes to TagNames documentation </ul> <a name='v4.86'><b>Mar. 11, 2005 - Version 4.86</b></a> <ul> <li>Extract PreviewImage from CR2 files <li>Create mandatory GPS tags when adding new GPS directory <li>Bring IPTC newsphoto support up to spec (as if anyone uses this crap) <li>Fixed problem when setting 8-bit integer IPTC values </ul> <a name='v4.85'><b>Mar. 10, 2005 - Version 4.85</b></a> <ul> <li>Create most mandatory EXIF entries automatically when a new EXIF directory is created <li>Fixed problem which caused an error when adding XMP information to a TIFF file which didn't previously contain XMP <li>Made '=' optional with -AllTagsFromFile option <li>Fixed problem with verbose dump of zero-length directory (eg. Sony F717 maker notes) </ul> <a name='v4.84'><b>Mar. 9, 2005 - Version 4.84</b></a> <ul> <li>Interpret Olympus ImageQuality of 6 as RAW <li>Remove validation of TIFF identifier to allow forward compatibility with untested RAW file formats (ORF files in particular seem to fiddle with this identifier) </ul> <a name='v4.83'><b>Mar. 8, 2005 - Version 4.83</b></a> <ul> <li>Extract ThumbnailImage from Canon CRW files written by some cameras <li>Recognize ORF files from Olympus C5060WZ (and hopefully some others too!) </ul> <a name='v4.82'><b>Mar. 7, 2005 - Version 4.82</b></a> <ul> <li>Made a number of new EXIF tags writable, but classify them as 'unsafe' so they aren't copied over with the -AllTagsFromFile option <li>Recognize a number of new and very uncommon EXIF tags <li>Remove copy number from tag name when using the -S option <li>Interpret Photoshop XMP:ColorSpace value of 4294967295 as 'Uncalibrated' </ul> <a name='v4.81'><b>Mar. 4, 2005 - Version 4.81</b></a> <ul> <li>Added user-definable shortcuts <li>Fixed problem with XMP:Identifier (should have existed in both XMP-dc and XMP-xmp) </ul> <a name='v4.80'><b>Mar. 2, 2005 - Version 4.80</b></a> <ul> <li>The -n option now prints binary data values as "Binary data #### bytes" <li>API Changes: (NOTE: Change in API behaviour for binary data values) <ul> <li>Changed returned ValueConv values so that binary data is now returned as a SCALAR reference, the same as with PrintConv values </ul> </ul> <a name='v4.73'><b>Mar. 1, 2005 - Version 4.73</b> <span class=grn>(production release)</span></a> <ul> <li>Minor changes to XMP parsing to increase speed and improve validation </ul> <a name='v4.72'><b>Feb. 28, 2005 - Version 4.72</b></a> <ul> <li>Extract info from UTF-16 and UTF-32 encoded XMP <li>Convert EXIF text fields if encoded in Unicode <li>Fixed a few incorrect XP character translation codes <li>Fixed name of Nikon ColorBalanceD2H tag </ul> <a name='v4.71'><b>Feb. 25, 2005 - Version 4.71</b></a> <ul> <li>Fixed bug introduced in 4.70 which caused error when transferring information using -AllTagsFromFile from a RAW file to a JPEG file </ul> <a name='v4.70'><b>Feb. 24, 2005 - Version 4.70</b></a> <ul> <li>Allow family 1 group name to be specified for any tag while writing <li>Fixed problem with writing Nikon PreviewImage to NEF files </ul> <a name='v4.67'><b>Feb. 23, 2005 - Version 4.67</b></a> <ul> <li>Added -L option to allow XP characters to be converted to Latin character set instead of UTF-8. (Now XP characters can be displayed properly in terminal windows which use either the UTF-8 or WinLatin1 character set.) <li>Make JpgFromRaw image writable in Nikon NEF files </ul> <a name='v4.66'><b>Feb. 21, 2005 - Version 4.66</b></a> <ul> <li>Recognize JPEG 2000 XMP UUID information <li>Extract Meta information from JPEG APP3 <li>Yet more playing with XP characters (this has been a learning process for me). Now special characters show up properly in my OSX terminal window, and the reverse translation works so now they get written properly as well (for Perl 5.6.1 or greater anyway... Earlier versions don't have the required UTF-8 support to handle these special characters) <li>Improvements to TagNames documentation (including changing format names to make them more consistent across different types of meta information) </ul> <a name='v4.65'><b>Feb. 18, 2005 - Version 4.65</b></a> <ul> <li>Fixed problem in translating XP characters </ul> <a name='v4.64'><b>Feb. 17, 2005 - Version 4.64</b> <span class=grn>(production release)</span></a> <ul> <li>Added new tag name documentation (replaces old tag lists) <li>Made a few more DNG tags writable </ul> <a name='v4.63'><b>Feb. 15, 2005 - Version 4.63</b></a> <ul> <li>Remove null terminators in ICC_Profile 'desc' strings <li>Treat Olympus CameraID as a string (why wasn't it written this way?) <li>Added print conversion for EXIF:CFAPattern </ul> <a name='v4.62'><b>Feb. 14, 2005 - Version 4.62</b></a> <ul> <li>Convert XPTitle, XPComment, XPKeywords etc from XP character codes and add write support for these tags <li>Decode JPEG 2000 Resolution, Label and URL information <li>Another try at patching 3 digit exponent situation which causes failed tests on MSWin32-x86 <li>Removed .J2K from recognized extensions (since apparently this is a raw JP2 codestream, and doesn't contain any metadata that ExifTool can extract) </ul> <a name='v4.61'><b>Feb. 14, 2005 - Version 4.61</b></a> <ul> <li>Don't print filename line when -p option used <li>JPEG 2000 improvements <li>Also recognize .JPX and .J2K extensions </ul> <a name='v4.60'><b>Feb. 11, 2005 - Version 4.60</b></a> <ul> <li>Added support for reading the JPEG 2000 (.JP2) files <li>Improved warnings on errors while setting tag values </ul> <a name='v4.54'><b>Feb. 10, 2005 - Version 4.54</b></a> <ul> <li>Added ColorTemperature tag for many Canon models <li>Added AutoRotate for Canon 10D and 300D <li>Lowered priority of Nikon ISO so that EXIF ISO is used instead if both exist <li>Changed names of PentaxISO and Casio ISOSetting to ISO, and lowered priority as with Nikon ISO <li>Made Photoshop EXIF Camera RAW tags writable </ul> <a name='v4.53'><b>Feb. 7, 2005 - Version 4.53</b> <span class=grn>(production release)</span></a> <ul> <li>Added FileNumber for Canon 20D (decoded by Juha Eskelinen) <li>Removed CanonA0Tag </ul> <a name='v4.52'><b>Feb. 4, 2005 - Version 4.52</b></a> <ul> <li>Added another CanonRaw test <li>Changes to Canon CRW documentation </ul> <a name='v4.51'><b>Feb. 4, 2005 - Version 4.51</b></a> <ul> <li>Finally found documentation for Canon CRW files (CIFF format)!! <li>Changed CanonRaw to bring code up to CIFF specification <li>Added a bunch more CanonRaw tags <li>Updated Canon CRW documentation </ul> <a name='v4.50'><b>Feb. 2, 2005 - Version 4.50</b></a> <ul> <li>Allow writing to specific IFD <li>Allow permanent tags (eg. MakerNotes tags) 'deleted' by setting them to an empty string if '' is a valid value for the tag <li>Added test for rewriting Nikon D70 information <li>Added missing inverse conversion routines for GPS tags (now they are all writable) <li>Decoded a few more Canon and CanonRaw tags <li>Added -z option to extract information from images in compressed files <li>Improved CanonRaw verbose output <li>Remove garbage after null terminator in CanonRaw string-type tags </ul> <a name='v4.45'><b>Jan. 30, 2005 - Version 4.45</b></a> <ul> <li>Added a few more Canon tags <li>Fixed bug with divide by zero error (in Perl, '0.0' is a true value -- doh!) </ul> <a name='v4.44'><b>Jan. 30, 2005 - Version 4.44</b></a> <ul> <li>Sort entries in synthesized Canon MakerNotes directory <li>Interpret Canon custom functions for models other than 10D in CRW files </ul> <a name='v4.43'><b>Jan. 29, 2005 - Version 4.43</b></a> <ul> <li>Synthesize Canon MakerNotes information when using -allTagsFromFile for a CRW file <li>Decode WhiteBalance table in Canon maker notes <li>Rename CanonRaw CanonFileType tag to CanonImageType </ul> <a name='v4.42'><b>Jan. 28, 2005 - Version 4.42</b></a> <ul> <li>Fixed problem where multiple IPTC tags could be created if replacing specific IPTC tag values with 'TAG-=VALUE' <li>Made EXIF SceneType writable <li>Renamed Nikon ISOUsed tag to ISO <li>Added documention of Canon RAW (CRW) file format </ul> <a name='v4.41'><b>Jan. 27, 2005 - Version 4.41</b></a> <ul> <li>Added write support for Canon exposure parameters <li>Change validation of CanonPictureInfo to get it working for Canon 20D </ul> <a name='v4.40'><b>Jan. 26, 2005 - Version 4.40</b></a> <ul> <li>Added ability to write Canon RAW (CRW) files. With this format you aren't allowed to add or delete any new tags (just as with the MakerNotes), except for JpgFromRaw, which I like to be able to delete to save disk space <li>Added validation of JpgFromRaw images <li>Relax filtering on non-ASCII characters by exiftool script to allow high-ASCII characters to be printed <li>Changed the tense of Orientation values to try to make the meaning more clear. This tag can be a bit confusing. It gives the rotation that must be applied to the image to view it properly (hence the rotation of the camera when the picture was taken). <li>Patched problem which was causing failed tests on some platforms (floating point format has 3 digits in exponent on Perl 5.8.5 MSWin32-x86, grrrr...) <li>API Changes: <ul> <li>Added 'Compact' option to not write blank padding as per XMP and IPTC specs </ul> </ul> <a name='v4.36'><b>Jan. 24, 2005 - Version 4.36</b> <span class=grn>(production release)</span></a> <ul> <li>Added support for reading Olympus Raw Format (ORF) </ul> <a name='v4.35'><b>Jan. 23, 2005 - Version 4.35</b></a> <ul> <li>Moved a couple of the informational warnings to verbose mode <li>Suppress warnings an non-critical errors with -m option <li>Made a few more of the EXIF tags writable <li>Made model-dependent tags Pentax FocalLength and Olympus Quality writable <li>Added ability to write CanonCustom tags <li>Added range check for integer values </ul> <a name='v4.34'><b>Jan. 21, 2005 - Version 4.34</b></a> <ul> <li>Fixed problem when writing Canon maker notes with -allTagsFromFile <li>Added -o option to write to different file or directory <li>Added handler to clean up temporary file on Ctrl-C <li>Re-wrote routine to rationalize floating point values (it is slower now, but produces much prettier fractions) <li>Other minor improvements to writer code </ul> <a name='v4.33'><b>Jan. 19, 2005 - Version 4.33</b></a> <ul> <li>Added check at higher level and return warning if trying to delete information from maker notes <li>Make GPS latitude and longitude a bit more flexible about the format they accept when writing <li>Updates to documentation </ul> <a name='v4.32'><b>Jan. 19, 2005 - Version 4.32</b></a> <ul> <li>Now rewrites Casio EX-Z3 maker notes properly (well, not actually 'properly', but the way they were written in the first place, which is wrong) <li>Added warning when writing information if original IFD entries were not in the proper sequence, which is a violation of EXIF specs. (And surprise, you'll never guess who does this too... Yup, the EX-Z3.) <li>Fixed parsing problem with GPSProcessingMethod and GPSAreaInformation <li>No longer truncates 'undef' values at first null character <li>Changed all DataDump tags to binary data types <li>Changed some warning messages <li>Documented the -m option (it's now official, even though it's been there since version 4.10) <li>Added some more writer tests </ul> <a name='v4.31'><b>Jan. 18, 2005 - Version 4.31</b></a> <ul> <li>Now also copies over preview image in Nikon NEF files </ul> <a name='v4.30'><b>Jan. 18, 2005 - Version 4.30</b></a> <ul> <li>Now copies over preview images in EXIF data (large, external previews still not copied) <li>Account for funny offsets in Casio EX-Z3 maker notes while extracting data (but haven't figured out how to handle them when writing) <li>Fixed bug introduced in 4.20 that broke extraction of Canon PreviewImage </ul> <a name='v4.23'><b>Jan. 17, 2005 - Version 4.23</b></a> <ul> <li>Improve handling of unrecognized maker notes when writing </ul> <a name='v4.22'><b>Jan. 17, 2005 - Version 4.22</b></a> <ul> <li>Added check in -AllTagsFromFile to test for pointers in the maker notes directory running outside the maker notes data. If they do, a warning is issued and the maker notes are rebuilt properly before copying. <li>Fixed problem which could corrupt some values when editing maker notes </ul> <a name='v4.21'><b>Jan. 17, 2005 - Version 4.21</b></a> <ul> <li>Added Olympus Red/BlueBalance </ul> <a name='v4.20'><b>Jan. 17, 2005 - Version 4.20</b></a> <ul> <li>Added ability to edit MakerNotes! <li>Added more validation when writing IPTC information <li>Fixed display of Nikon FlashExposureComp for negative values <li>Fixed problem where the large JPEG image in Nikon and Pentax raw files was misidentified as the ThumbnailImage. It is now extracted as JpgFromRaw. This allows all 3 JPEG images contained in Pentax PEF files to be extracted: ThumbnailImage, PreviewImage and JpgFromRaw. <li>Fixed problem on systems that use backslashes in directory names that prevented exiftool from finding its libraries if not installed <li>Changed many Pentax tag names to remove "Pentax" prefix and conform more to the other tag names (moving information between files of different formats is much easier if tags have standardized names): <ul> <li>PentaxPictureMode =&gt; PictureMode <li>PentaxFocusMode =&gt; FocusMode <li>PentaxWhiteBalance =&gt; WhiteBalance <li>PentaxAEMetering =&gt; MeteringMode <li>PentaxFocalLength =&gt; FocalLength <li>PentaxZoom =&gt; DigitalZoom <li>PentaxSaturation =&gt; Saturation <li>PentaxContrast =&gt; Contrast <li>PentaxSharpness =&gt; Sharpness </ul> <li>Fixed FocalLength conversion for Pentax Optio S <li>Fixed printout of Nikon FileSystemVersion for older Nikon models <li>More improvements to reliabilty of preview image extraction <li>Fixed Quality for Olympus E-1 </ul> <a name='v4.15'><b>Jan. 12, 2005 - Version 4.15</b></a> <ul> <li>Added Pentax LensType and RawImageSize tags <li>Change printing of some unknown values to hexadecimal <li>Now recognizes Nikon PEF files <li>More reliable extraction of preview and thumbnail images, particularly for the various models of Pentax cameras <li>Added decoding of the Canon 20D custom functions and a new Canon20D shortcut (thanks to Christian Koller) <li>Improved write logic for EXIF information <li>Improved logic in determining byte ordering of maker notes </ul> <a name='v4.14'><b>Jan. 10, 2005 - Version 4.14</b></a> <ul> <li>Fixed problem introduced in 4.13 that messed up new 4.12 features. doh. (and added test to keep this from happening again!). <li>No longer store bad directory data as a tag (dump in verbose output instead) </ul> <a name='v4.13'><b>Jan. 9, 2005 - Version 4.13</b></a> <ul> <li>Added check on size of new ThumbnailImage so ExifTool doesn't try to write an image that is too large (&gt;60k) into the JPEG EXIF APP1 segment </ul> <a name='v4.12'><b>Jan. 9, 2005 - Version 4.12</b></a> <ul> <li>-AllTagsFromFile option now copies over the maker notes <li>Changed some misleading warning messages </ul> <a name='v4.11'><b>Jan. 8, 2005 - Version 4.11</b></a> <ul> <li>Improved validation of tag values with -AllTagsFromFile option </ul> <a name='v4.10'><b>Jan. 7, 2005 - Version 4.10</b></a> <ul> <li>Added ability to write EXIF, IPTC and XMP tags in JPEG and TIFF files! <li>Allow Photoshop APP13 data to span multiple segments (read and write) <li>Added -TAG+=VALUE, -TAG-=VALUE and -TAG&lt;=VALUE syntaxes <li>Added -GROUP:TAG syntax to allow tag group to be specified <li>Added powerful -AllTagsFromFile=SRCFILE option to copy all tags from file <li>Added -listw option to list all writable tags <li>Added -E option to escape output values for HTML <li>Fixed -w option to only replace extension after last '.' in filename if more than one '.' <li>Unescape XMP character codes when extracting values (and escape again when writing) <li>Now processes all IFD's of TIFF imags (not just IFD0) <li>Added data length check in hex dump of verbose option <li>Allow group name to be specified as prefix to tag name on command line <li>Renamed a few Nikon tags: FlashExposureComp to FlashExposureBracketValue, FEC to FlashExposureComp, and ShutterReleaseMode to ShootingMode <li>Extract Nikon preview image <li>Changed descriptions for Aperture and Shutter Speed to drop the Av/Tv Canonism <li>Improved logic to recognize more types of unknown maker notes <li>Recognize a couple more values of the Canon WhiteBalance tag <li>Renamed IPTC 'SupplementalCategory' to 'SupplementalCategories' <li>Handle timezone in times <li>API Changes: <ul> <li>Fixed problem where first tag name passed to GetInfo() was ignored <li>The values returned by ImageInfo() and GetInfo() may contain array references to indicate lists of values if PrintConv is disabled <li>Added a bunch of new stuff... </ul> </ul> <a name='v4.05'><b>Dec. 15, 2004 - Version 4.05</b></a> <ul> <li>Added a couple of Nikon tags <li>Now preserves original file by renaming to "NAME_original" when writing information <li>Don't preserve file time by default when writing. Added -P option to do this. <li>Changes to spec file </ul> <a name='v4.04'><b>Dec. 11, 2004 - Version 4.04</b></a> <ul> <li>Fixed problem which could corrupt JPEG images when adding comments (Note: if done, the damage can reversed by removing the comments with the same version of ExifTool that added them.) </ul> <a name='v4.03'><b>Dec. 6, 2004 - Version 4.03</b></a> <ul> <li>Major overhaul of verbose message output <li>Change -v option to allow verbose level to be specified (eg. -v3 = very very verbose) <li>Added a new Nikon tag (SceneMode) <li>Count images which were unchanged when writing tags <li>Changed FileType 'JPG' to 'JPEG' </ul> <a name='v4.02'><b>Dec. 2, 2004 - Version 4.02</b></a> <ul> <li>Fixed problem with rewriting some JPEG images <li>Preserve original file modification time when updating tags in a file <li>Report of number of files updated <li>API Changes: <ul> <li>Changed arguments of WriteInfo() and allow scalar and file references to be used </ul> </ul> <a name='v4.01'><b>Dec. 1, 2004 - Version 4.01</b></a> <ul> <li>Changed -o option to -w to avoid confusion since we now write image files too <li>Added warning if specified image file doesn't exist </ul> <a name='v4.00'><b>Dec. 1, 2004 - Version 4.00</b></a> <ul> <li>Started down the road of adding write support: <ul> <li>Allow writing of Comment tag to JPEG and GIF files </ul> <li>API for write functions still under development and is likely to change <li>Clean up formatting of Nikon string tags (fix case and remove trailing spaces) </ul> <a name='v3.96'><b>Nov. 30, 2004 - Version 3.96</b></a> <ul> <li>Changed JPEG read routine to speed things up a bit <li>Added a few more ICC_Profile tags </ul> <a name='v3.95'><b>Nov. 25, 2004 - Version 3.95</b></a> <ul> <li>Improved compatibility with old Perl versions (now runs, albeit with warnings, on 5.003) </ul> <a name='v3.94'><b>Nov. 25, 2004 - Version 3.94</b> <span class=grn>(production release)</span></a> <ul> <li>Patched problem with reading XMP data using Perl 5.6.x (Perl bug) <li>Put lib directory first in exiftool include list to take precedence over installed versions <li>Continue trying to parse JPEG image after an unrecognized APP1 segment </ul> <a name='v3.93'><b>Nov. 24, 2004 - Version 3.93</b> <span class=grn>(production release)</span></a> <ul> <li>Final round of ICC_Profile updates <li>Increase precision of extracted rational values <li>Internal Changes: <ul> <li>Build in better support for all data formats <li>Standardize data format names <li>Clean up and streamline data read routine </ul> </ul> <a name='v3.92'><b>Nov. 22, 2004 - Version 3.92</b></a> <ul> <li>Fixed problem with -p option when multiple files are specified <li>Enhancements to ICC_Profile information, including extracting information from profile header <li>Subdivide ICC_Profile group in family 1 <li>Added Minolta ImageStabilization tag </ul> <a name='v3.91'><b>Nov. 20, 2004 - Version 3.91</b></a> <ul> <li>Fixed problem where some tags were not extracted properly from Canon CR2 files <li>Internal Changes: <ul> <li>Cleaned up and simplified pointer calculations and dirInfo members </ul> </ul> <a name='v3.90'><b>Nov. 20, 2004 - Version 3.90</b></a> <ul> <li>Extract information from ICC Profiles <li>Extract undocumented IFD0 Photoshop tags <li>Added support for Minolta RAW (MRW) file format <li>Added support for Konica-Minolta cameras <li>Improved decoding for Minolta maker notes <li>Extract (the sometimes misleading) EXIF WhiteBalance tag even if WhiteBalance was extracted from the maker notes if the Duplicates option is set. (Previously it was only extracted as an Unknown tag in this case.) <li>API Changes: <ul> <li>Return list of all tags in image if GetFoundTags() or GetTagList() are called before ImageInfo() or GetInfo() </ul> </ul> <a name='v3.85'><b>Nov. 15, 2004 - Version 3.85</b></a> <ul> <li>Extract a couple more Photoshop tags (including PhotoshopQuality) <li>All XMP lists now comma separated (previously, 'alt' lists were separated by '|') <li>API Changes: <ul> <li>GetValue() now returns reference to array if values form a list and ValueConv is specified </ul> </ul> <a name='v3.84'><b>Nov. 12, 2004 - Version 3.84</b></a> <ul> <li>Added test of GetTagID() <li>Fixed bug in GetTagID() which was causing special tags to get overwritten </ul> <a name='v3.83'><b>Nov. 12, 2004 - Version 3.83</b></a> <ul> <li>Added -D and -H command line options <li>API Changes: <ul> <li>Added GetTagID() </ul> </ul> <a name='v3.82'><b>Nov. 11, 2004 - Version 3.82</b> <span class=grn>(production release)</span></a> <ul> <li>Improved diagnostic output for failed tests in installation </ul> <a name='v3.81'><b>Nov. 11, 2004 - Version 3.81</b></a> <ul> <li>Updated Olympus module to also support Epson cameras <li>Moved MakerNotes code into separate module <li>Added tests for Sony and Unknown maker notes </ul> <a name='v3.80'><b>Nov. 10, 2004 - Version 3.80</b></a> <ul> <li>Added support for Panasonic/Leica cameras <li>Updated Pentax module to also support Asahi cameras <li>Decode a couple more Minolta camera model types </ul> <a name='v3.74'><b>Nov. 4, 2004 - Version 3.74</b> <span class=grn>(production release)</span></a> <ul> <li>Properly localize $_ in public Image::ExifTool subroutines </ul> <a name='v3.73'><b>Nov. 3, 2004 - Version 3.73</b></a> <ul> <li>Changes to tests to avoid false failures on MSWin32-x86-multi-thread 4.0 </ul> <a name='v3.72'><b>Nov. 1, 2004 - Version 3.72</b> <span class=grn>(production release)</span></a> <ul> <li>Fixed minor bug in generation of family 1 XMP group names <li>Changes to Photoshop family 2 groups </ul> <a name='v3.71'><b>Oct. 30, 2004 - Version 3.71</b></a> <ul> <li>Switched group families 0 and 1 so the general location is now the default <li>Fixed bug when sorting by order of group for any family other than 0 <li>Added test 17 to ExifTool.t </ul> <a name='v3.70'><b>Oct. 29, 2004 - Version 3.70</b></a> <ul> <li>Major improvements to XMP parsing <li>Divided XMP group in family 0 based on the XMP namespace prefix <li>Changed a few long tables to binary type <li>Recognize some new YCbCrSubSampling values <li>Display DNG LocalizedCameraModel in plain text <li>Patched problem in FileSource reported by Sigma cameras <li>Added information about tag format to verbose hex dump </ul> <a name='v3.61'><b>Oct. 22, 2004 - Version 3.61</b></a> <ul> <li>Added support for DNG file format <li>Added and updated a number of EXIF tags for FAX and other uncommon images <li>Added Photoshop URL tag <li>Attempt to extract image from files with unrecognized extensions assuming TIFF format <li>Added "Image format error" if the image type is recognized but the format is bad <li>Changed "Unknown file type" error to "Unknown image type" <li>Moved POD documentation into separate .pod files <li>Started referencing sources for tag definitions in the source code </ul> <a name='v3.60'><b>Oct. 1, 2004 - Version 3.60</b> <span class=grn>(production release)</span> - <i>initial CPAN release!</i></a> <ul> <li>Changed group family 0 to divide EXIF group into individual IFD groups <li>Fixed typos in some Casio tag names <li>API Changes: <ul> <li>Changed name of File::RandomAccessFile to File::RandomAccess <li>Changed default setting of Duplicates to 1 </ul> </ul> <a name='v3.51'><b>Sept. 21, 2004 - Version 3.51</b></a> <ul> <li>Improvements to interpretation of Nikon D70 ISO settings </ul> <a name='v3.50'><b>Sept. 16, 2004 - Version 3.50</b></a> <ul> <li>Fixed problem with duplicate tags showing up without the -a option <li>Changed Nikon DataDump to a binary type <li>Added D70Boring shortcut </ul> <a name='v3.49'><b>Sept. 14, 2004 - Version 3.49</b></a> <ul> <li>Changed installation to also install the 'exiftool' script </ul> <a name='v3.48'><b>Sept. 13, 2004 - Version 3.48</b></a> <ul> <li>Changed UserComment to skip first 8 bytes since the comments come after an 8 byte character code </ul> <a name='v3.47'><b>Sept. 10, 2004 - Version 3.47</b></a> <ul> <li>Added support for second type of Casio maker notes (MakerNoteCasio2) </ul> <a name='v3.46'><b>Sept. 1, 2004 - Version 3.46</b></a> <ul> <li>Fixed minor bug in PrintConv of FileNumber for CanonRaw files </ul> <a name='v3.45'><b>June 3, 2004 - Version 3.45</b></a> <ul> <li>Recognize Canon 1D Mk II raw files (.CR2) <br>(Note: Not properly decoding maker notes from these files yet) </ul> <a name='v3.44'><b>May 28, 2004 - Version 3.44</b></a> <ul> <li>Improved validity check of Sony maker notes </ul> <a name='v3.43'><b>May 18, 2004 - Version 3.43</b></a> <ul> <li>A couple more changes to the Nikon maker notes </ul> <a name='v3.42'><b>May 17, 2004 - Version 3.42</b></a> <ul> <li>Additions to Nikon maker notes for values derived from D70 </ul> <a name='v3.41'><b>Apr. 28, 2004 - Version 3.41</b></a> <ul> <li>Fixed some errors when running on older Perl versions </ul> <a name='v3.40'><b>Apr. 7, 2004 - Version 3.40</b></a> <ul> <li>Try to extract data from unrecognized maker notes (assuming standard EXIF format) <li>Added tests for different maker notes </ul> <a name='v3.37'><b>Apr. 6, 2004 - Version 3.37</b></a> <ul> <li>Added support for Sigma maker notes <li>Remember to add new files to MANIFEST so they get included in release. Doh </ul> <a name='v3.36'><b>Apr. 6, 2004 - Version 3.36</b></a> <ul> <li>Added support for Sanyo and Minolta maker notes <li>Added skeleton for interpeting Sony maker notes <li>Interpret Pentax PrintIM </ul> <a name='v3.35'><b>Apr. 6, 2004 - Version 3.35</b></a> <ul> <li>Added support for Nikon PrintIM <li>Changed names of duplicate EXIF tags </ul> <a name='v3.34'><b>Apr. 5, 2004 - Version 3.34</b></a> <ul> <li>Added all missing tag definitions from TIFF 6 standard <li>Added a few more EXIF tag definitions <li>Interpret PrintIM IFD <li>Fixed interpretation of Interoperability IFD <li>Fixed potential endless loop bug introduced in version 3.33 </ul> <a name='v3.33'><b>Apr. 5, 2004 - Version 3.33</b></a> <ul> <li>Parse SubIFD of Nikon NEF file (now extracts raw image size and thumbnail image) </ul> <a name='v3.32'><b>Apr. 2, 2004 - Version 3.32</b></a> <ul> <li>Changes to some Nikon tag names <li>Added Nikon Saturation <li>Documentation improvements </ul> <a name='v3.31'><b>Mar. 31, 2004 - Version 3.31</b></a> <ul> <li>Now recognizes NEF (Nikon Electronic image Format) files </ul> <a name='v3.30'><b>Mar. 29, 2004 - Version 3.30</b></a> <ul> <li>Removed -w option <li>Fixed problem with some XMP tags being put in the EXIF group <li>More minor speed improvements <li>API Changes: <ul> <li>GetDescription() now requires an ExifTool object reference <li>Removed WarnDuplicateDescriptions() </ul> </ul> <a name='v3.27'><b>Mar. 26, 2004 - Version 3.27</b></a> <ul> <li>Optimized a few routines to speed things up a bit <li>API Changes: <ul> <li>Changed GetDescription() documention to indicate it is called with an ExifTool object (this is still optional, but will be mandatory with the next version) </ul> </ul> <a name='v3.26'><b>Mar. 25, 2004 - Version 3.26</b></a> <ul> <li>Don't generate warning if end of IPTC block is padded with nulls </ul> <a name='v3.25'><b>Mar. 19, 2004 - Version 3.25</b></a> <ul> <li>Fixed problem with 'Input' sort order </ul> <a name='v3.24'><b>Mar. 19, 2004 - Version 3.24</b></a> <ul> <li>Only return PreviewImage if it is a valid JPG (otherwise set 'Warning') </ul> <a name='v3.23'><b>Mar. 16, 2004 - Version 3.23</b></a> <ul> <li>API Changes: <ul> <li>Added GetGroups() <li>GetGroup() now returns group names for all families if used in list context and family not specified </ul> </ul> <a name='v3.22'><b>Mar. 12, 2004 - Version 3.22</b></a> <ul> <li>API Changes: <ul> <li>Changed GetInfo() to return list of tags like ImageInfo() if list reference provided <li>Fixed bug that caused GetInfo() to ignore specified tags </ul> </ul> <a name='v3.21'><b>Mar. 11, 2004 - Version 3.21</b></a> <ul> <li>Fixed problem with Composite group in family 1 <li>Changed case of Exif to EXIF in family 1 <li>-group option now lists Composite group as it should <li>Internal Changes: <ul> <li>Cleaned up handling of function arguments </ul> </ul> <a name='v3.20'><b>Mar. 10, 2004 - Version 3.20</b></a> <ul> <li>Added -group option <li>Added group families 1 and 2 <li>Can now specify excluded tags with leading '-' (replaces -x option) <li>API Changes: <ul> <li>Added ClearOptions(), ExtractInfo(), GetInfo(), CombineInfo(), GetTagList() and GetAllGroups() <li>Removed IsVerbose() function (use Options('Verbose') instead) <li>Allow groups to be excluded by specifying leading '-' on group name <li>ImageInfo() and GetInfo() now use specified group order to set tag precedence if Duplicates option is not set <li>Change default value of Duplicates option back to 0 </ul> </ul> <a name='v3.15'><b>Mar. 1, 2004 - Version 3.15</b></a> <ul> <li>Changed format of all date and time tags to EXIF standard <li>Added some composite date/time tags <li>Fixed date formatting so -d option should now work with all combined date/time tags <li>Other minor changes to GPS information <li>Improvements to TIFF processing <li>Set value to "Undefined" if PrintConv evaluates to undefined value <li>Added -G option <li>API changes: <ul> <li>Changed all option names: shortened and changed to mixed case (sorry!) </ul> <li>Internal changes: <ul> <li>Standardized arguments to all processing procedures <li>Made call to processing procedure more automatic <li>Removed TABLE_TYPE tag and added PROCESS_PROC <li>Added ProcessTagTable() member function </ul> </ul> <a name='v3.14'><b>Feb. 27, 2004 - Version 3.14</b></a> <ul> <li>Added GPS tag conversions and GPS test <li>Values that can't be converted now show up simply as "Unknown (X)" </ul> <a name='v3.13'><b>Feb. 26, 2004 - Version 3.13</b></a> <ul> <li>Print out errors from exiftool script (since Image::ExifTool no longer prints them) <li>Added more tests <li>Failed tests now leave ".failed" file in "t" directory for post mortem </ul> <a name='v3.12'><b>Feb. 25, 2004 - Version 3.12</b></a> <ul> <li>Moved all image-related warnings to new Warning tag </ul> <a name='v3.11'><b>Feb. 25, 2004 - Version 3.11</b></a> <ul> <li>Added GeoTiff support <li>Added -x option <li>Improvements to documentation <li>Improve XMP parsing for 'Bag' elements <li>Capitalize first letter of XMP tag descriptions <li>Patch problem with APP13 resource written by older Photoshop versions <li>API changes: <ul> <li>Added EXCLUDE and GROUP# options <li>Change default value of SAVE_DUPLICATES option to 1 </ul> </ul> <a name='v3.10'><b>Feb. 20, 2004 - Version 3.10</b></a> <ul> <li>Restructuring only -- the behaviour of the exiftool script was not changed <li>Moved html documentation to new html directory <li>API changes: <ul> <li>Conform to standard Perl module mechanics: <ul> <li>Changed ExifTool package name to Image::ExifTool <li>Added Makefile.PL and other standard files <li>Added Perl pod documentation <li>Added standard test files <li>Moved modules into lib directory <li>Changed "TagTables" directory name to "ExifTool" </ul> <li>Added extra parameter in new RandomAccessFile </ul> </ul> <a name='v3.05'><b>Feb. 20, 2004 - Version 3.05</b></a> <ul> <li>Fixed problem where output files (-o) weren't written if -p option used </ul> <a name='v3.04'><b>Feb. 19, 2004 - Version 3.04</b></a> <ul> <li>Added -U option to allow display of unknown values in Canon binary data blocks <li>Made unknown tag names more specific when -u or -U option used <li>Added RawData and DecoderTable tags (for Canon RAW file) </ul> <a name='v3.03'><b>Feb. 17, 2004 - Version 3.03</b></a> <ul> <li>Fixed RandomAccessFile package name (should have been File::RandomAccessFile) <li>Added IxusAFPoint tag to Canon maker notes <li>Avoid scanning past end of Canon binary data blocks <li>API changes: <ul> <li>GetFoundTags() and GetRequestedTags() now return list instead of list reference </ul> </ul> <a name='v3.02'><b>Feb. 16, 2004 - Version 3.02</b></a> <ul> <li>Improved handling of Pentax maker notes </ul> <a name='v3.01'><b>Feb. 15, 2004 - Version 3.01</b></a> <ul> <li>API changes: <ul> <li>Added GetValue() function <li>Completed API documentation </ul> </ul> <a name='v3.00'><b>Feb. 13, 2004 - Version 3.00</b></a> <ul> <li>Removed -all option (it is now the default -- specify -common for previous default behaviour) <li>Added -a option to allow printout of duplicate tag values <li>API changes: <ul> <li>I am finally happy with the API, so future major changes are less likely (hence the major version number) <li>No longer return ARRAY reference for list of tags (Instead, tag values are joined in a comma separated list if tag 'List' flag is set) <li>Added SAVE_DUPLICATES option <li>Added BuildCompositeTags() to EXPORT_OK list <li>GetFoundTags() now sorts tags in specified order <li>GetDescriptions() longer returns undef if the description doesn't exist </ul> </ul> <a name='v2.71'><b>Feb. 12, 2004 - Version 2.71</b></a> <ul> <li>Still more playing with Pentax maker notes <li>More API changes: <ul> <li>Added RandomAccessFile.pm <li>All image file i/o now done through a RandomAccessFile object <br>--&gt; allows proper piping and use of string i/o <li>Allow scalar reference to be passed to ImageInfo() (for string i/o) </ul> </ul> <a name='v2.70'><b>Feb. 11, 2004 - Version 2.70</b></a> <ul> <li>More tweaking of Pentax maker notes <li>Changed API to be more object oriented: <ul> <li>Removed SetVerbose(), ExtractUnknown(), SetDateFormat(), EnablePrintConversion(), EnableCompositeTags() <li>Added Options() to replace above functions <li>Changed WarnDuplicateTags() to WarnDuplicateDescriptions() <li>Added GetFoundTags() and GetRequestedTags() <li>Many functions now take ExifTool object reference as first argument <li>ImageInfo() no longer returns reference to ExifTool object when used in list context (you have to use "new ExifTool" and the OO form of ImageInfo() if you want the object) </ul> </ul> <a name='v2.62'><b>Feb. 10, 2004 - Version 2.62</b></a> <ul> <li>Added -u option to allow display of unknown tags <li>Major changes to Pentax maker notes (still needs work) </ul> <a name='v2.61'><b>Feb. 09, 2004 - Version 2.61</b></a> <ul> <li>Allow file reference to be passed to ImageInfo() <li>Allow file to be read from standard input by specifying "-" as file name <li>Added FileType tag </ul> <a name='v2.60'><b>Feb. 07, 2004 - Version 2.60</b></a> <ul> <li>Improve IPTC parsing and add support for more IPTC data types <li>Read Photoshop APP13 records properly <li>Added -g option <li>Move shortcuts into separate module <li>Changes to API: <ul> <li>Removed LoadAllTables() and added GetAllTags() <li>Removed GetDescriptions() and added GetDescription() <li>Changed GetShortcuts() to return a list <li>Added tag groups and GetGroup() function <li>Return object data from ImageInfo() for use in GetGroup() </ul> </ul> <a name='v2.51'><b>Jan. 30, 2004 - Version 2.51</b></a> <ul> <li>Speed up JPG reading code <li>API no longer returns references to image-specific static data <li>Added ExifToolVersion tag </ul> <a name='v2.50'><b>Jan. 29, 2004 - Version 2.50</b></a> <ul> <li>Changed API to return binary data as SCALAR reference and list of values as ARRAY reference <li>Attempt to make case of tag descriptions more consistent </ul> <a name='v2.41'><b>Jan. 28, 2004 - Version 2.41</b></a> <ul> <li>Scan photoshop JPG 0xe1 garbage for possible XMP information </ul> <a name='v2.40'><b>Jan. 27, 2004 - Version 2.40</b></a> <ul> <li>Improved handling of XMP data <li>Changed output format and added -l option </ul> <a name='v2.36'><b>Jan. 21, 2004 - Version 2.36</b></a> <ul> <li>Don't output trailing linefeed when -b option used </ul> <a name='v2.35'><b>Jan. 19, 2004 - Version 2.35</b></a> <ul> <li>Changes to verbose output <li>Added TagTables::CanonRaw::CleanRaw() as an API utility function </ul> <a name='v2.34'><b>Jan. 16, 2004 - Version 2.34</b></a> <ul> <li>Added 'Validate' check for Canon data fields <li>Changed ScaleFactor35efl to use FocalLengthIn35mmFormat if available </ul> <a name='v2.33'><b>Jan. 15, 2004 - Version 2.33</b></a> <ul> <li>Added ScaleFactor35efl, FocalLength35efl, Lens35efl <li>Allow Composite tags to Require/Desire each other <li>Changed FlashType to use FlashBits instead of CanonFlashMode </ul> <a name='v2.32'><b>Jan. 13, 2004 - Version 2.32</b></a> <ul> <li>Added -d (date format) option <li>Added -p (print format file) option </ul> <a name='v2.31'><b>Jan. 9, 2004 - Version 2.31</b></a> <ul> <li>Exif WhiteBalance no longer overrides maker-specific WhiteBalance </ul> <a name='v2.30'><b>Jan. 8, 2004 - Version 2.30</b></a> <ul> <li>Added support for IPTC format information </ul> <a name='v2.25'><b>Jan. 6, 2004 - Version 2.25</b></a> <ul> <li>Fixed problem with ImageInfo() function prototype <li>Fixed printout of JpgFromRaw message (doesn't affect JPG extraction) <li>Set output files to binmode (including STDOUT) if -b option used </ul> <a name='v2.24'><b>Jan. 1, 2004 - Version 2.24</b></a> <ul> <li>Fixed -list option to show all available tag names </ul> <a name='v2.23'><b>Dec. 18, 2003 - Version 2.23</b></a> <ul> <li>Changed "Disable" routines to "Enable" </ul> <a name='v2.22'><b>Dec. 17, 2003 - Version 2.22</b></a> <ul> <li>Fixed make/model tags which I broke with a recent change <li>Removed null terminator from returned strings </ul> <a name='v2.21'><b>Dec. 16, 2003 - Version 2.21</b></a> <ul> <li>Fixed problem with decoding some Nikon maker notes <li>General improvements and tweaks to the code </ul> <a name='v2.20'><b>Dec. 14, 2003 - Version 2.20</b></a> <ul> <li>Now extracts preview image from 300D JPG files (PreviewImage) <li>Changed ThumbnailData tag name to ThumbnailImage </ul> <a name='v2.10'><b>Dec. 12, 2003 - Version 2.10</b></a> <ul> <li>ExifTool::ImageInfo now returns reference to hash instead of hash </ul> <a name='v2.01'><b>Dec. 10, 2003 - Version 2.01</b></a> <ul> <li>Minor fixes for reading of RAW files </ul> <a name='v2.00'><b>Dec. 09, 2003 - Version 2.00</b></a> <ul> <li>Added support for Olympus, Casio and Nikon cameras <li>Now recognizes GPS information <li>Moved config information to TagTables modules <li>Restructured API </ul> <a name='v1.72'><b>Dec. 05, 2003 - Version 1.72</b></a> <ul> <li>Changes to composite Aperture and ShutterSpeed decisions </ul> <a name='v1.71'><b>Dec. 05, 2003 - Version 1.71</b></a> <ul> <li>Read 10D Custom functions from CRW file too (thanks dpophyte) </ul> <a name='v1.70'><b>Dec. 05, 2003 - Version 1.70</b></a> <ul> <li>Added custom functions for 10D and 1D </ul> <a name='v1.62'><b>Dec. 04, 2003 - Version 1.62</b></a> <ul> <li>Decode known flash bits </ul> <a name='v1.61'><b>Dec. 04, 2003 - Version 1.61</b></a> <ul> <li>Override ShutterSpeed with BulbDuration if available <li>Change -s option to add tab-separated list </ul> <a name='v1.60'><b>Dec. 03, 2003 - Version 1.60</b></a> <ul> <li>Big improvements in reading Canon RAW files </ul> <a name='v1.50'><b>Nov. 29, 2003 - Version 1.50</b></a> <ul> <li>Added ability to extract JPG from RAW <li>Added ExifData tag to allow entire EXIF block to be dumped </ul> <a name='v1.40'><b>Nov. 26, 2003 - Version 1.40</b></a> <ul> <li>Split up config files to speed things up <li>Added ability to extract binary data <li>Added ThumbnailData tag (to allow extracting JPG thumbnails) </ul> <a name='v1.30'><b>Nov. 25, 2003 - Version 1.30</b></a> <ul> <li>Added experimental Canon RAW (CRW) file support </ul> <a name='v1.20'><b>Nov. 22, 2003 - Version 1.20</b></a> <ul> <li>Now reads TIFF files too </ul> <a name='v1.12'><b>Nov. 20, 2003 - Version 1.12</b></a> <ul> <li>Don't translate Photoshop Brightness, etc </ul> <a name='v1.11'><b>Nov. 20, 2003 - Version 1.11</b></a> <ul> <li>Attempt to fix problem on hp <li>Clean up code a bit <li>Added '-ver' command-line option </ul> <a name='v1.10'><b>Nov. 20, 2003 - Version 1.10</b></a> <ul> <li>Added support for XMP format </ul> <a name='v1.00'><b>Nov. 19, 2003 - Version 1.00</b></a> <ul> <li>Initial release (extracts information from JPEG and GIF images, with Canon, FujiFilm and Pentax makernote support) </ul> <hr> <p class='lf'><a href="history.html">&lt;-- Back to recent history</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/canon_raw.html������������������������������������������������������������000644 �000765 �000024 �00000061332 12343641056 020175� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>The Canon RAW (CRW) File Format</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <style type="text/css"> <!-- table.norm th.lt { background: #eee } --> </style> </head> <body> <h1 class='up'>The Canon RAW (CRW) File Format</h1> <p>This is a description of the Canon CRW file format. CRW files are written in Camera Image File Format (CIFF). The original Canon CIFF specification can be downloaded from <a href="http://xyrion.org/ciff/">http://xyrion.org/ciff/</a> (which I finally discovered after writing this document!). Note that Canon uses two different RAW formats, and newer models produce CR2 instead of CRW files. The CR2 files use a TIFF-based format, which is different than the CRW CIFF format documented here. (See <a href="http://lclevy.free.fr/cr2/">this page</a> for details about the CR2 format.)</p> <h3>Comments about the CRW Format</h3> <p>The Canon CRW file format is a joy to work with. It has a structure that is fundamentally similar to TIFF, with directories that point to data within the file. But a major improvement over TIFF is that the offsets are not absolute, they are relative to the start of the data block for each directory. This allows subdirectories within a file to be moved or copied to another file without having to adjust the offsets, which is fantastic because it means that rewriter software doesn't have to understand the complete format in order to be able to successfully rewrite the file.</p> <p>Also, the data comes before the directories in the file, which is the natural way to write information and minimizes the amount memory needed to buffer the data (unlike EXIF, which is typically the reverse).</p> <blockquote class='aside'> <b>A short rant about TIFF inadequacies:</b> <br>TIFF format on the other hand, really sucks in comparison (this includes JPEG too, since JPEG uses TIFF format to store the EXIF information). The main problems are the use of absolute offsets and the ambiguity between integers and pointers (such as those used for custom IFD's). Because absolute offsets require adjusting whenever anything is moved in the file, the format of ALL contained data structures must be understood to properly edit the file. This results in an impossible situation when presented with undocumented custom structures like those used in the maker notes written by modern digital cameras. This is why it is so common for image editors to either scramble the maker notes or discard them completely. The official TIFF recommendation is to discard unknown information when rewriting the image (as Photoshop does), but for many, including myself, this option is simply unacceptable. </blockquote> <p>The bottom line is that rewriting a Canon CRW file is about 20 times easier, and much less prone to errors than rewriting a TIFF or JPEG.</p> <h2>CRW (CIFF) Format Specification</h2> <h3>File Header</h3> <p>A Canon CRW file starts with the following byte sequence:</p> <blockquote> <table class='norm'><tr><th>Offset</th> <th>Number<br>of&nbsp;bytes</th><th>Value</th><th>Name</th><th>Description</th></tr> <tr align='center'><td>0</td><td>2</td><td>"II"</td><td>ByteOrder</td> <td align='left'>"II" means Intel (little-endian) order, which is the only order I've seen since Canon is using x86 processors in its current cameras, but presumably this could be "MM" for future models. </td></tr> <tr align='center'><td>2</td><td>4</td><td>0x0000001a</td><td>HeaderLength</td> <td align='left'>32-bit integer giving the length of the CRW file header. For current camera models the header is 26 bytes long.</td></tr> <tr align='center'><td>6</td><td>8</td><td>"HEAPCCDR"</td><td>Signature</td> <td align='left'>This series of characters identifies the file as a Canon CRW file. The signature is "HEAPJPGM" for CIFF information in APP0 of JPEG images.</td></tr> <tr align='center'><td>14</td><td>4</td><td>0x00010002</td><td>CRWVersion</td> <td align='left'>32-bit integer giving the major (high 16 bits) and minor (low 16 bits) CRW file version numbers. The version is 1.2 for current cameras.</td></tr> <tr align='center'><td>18</td><td>8</td><td>0</td><td>Reserved</td> <td align='left'>Two 32-bit integers, currently set to zero.</td></tr> </table></blockquote> <h3>Directory Block Structure</h3> <p>The root directory block begins immediately after the file header (at the position specified by <b>HeaderLength</b>), and ends at the end of the file. The structure of this block is as follows:</p> <blockquote><table class='norm'> <tr><th>Offset<br>within block</th><th>Number<br>of bytes</th><th>Value</th> <th>Name</th><th>Description</th></tr> <tr align='center'><td>0</td><td>S</td><td>-<br>-<br>-<br>-<br>-</td><td>ValueData</td> <td align='left'>The value data referenced by offsets in the directory</td></tr> <tr align='center'><td>S</td><td>2</td><td>N</td><td>DirCount</td> <td align='left'>16-bit integer giving the number of directory entries</td></tr> <tr align='center'><td>S + 2</td><td>N * 10</td><td>-<br>-<br>-</td><td>DirEntries</td> <td align='left'>The CRW directory entries</td></tr> <tr align='center'><td>S + 2 + N*10</td><td><i>any</i></td><td>-</td><td>OtherData</td> <td align='left'><i>(be aware there may be other data hiding here)</i></td></tr> <tr align='center'><td>BlockSize - 4</td><td>4</td><td>S</td><td>DirStart</td> <td align='left'>32-bit integer giving the size of the <b>ValueData</b></td></tr> </table></blockquote> <p>To parse a CRW directory block, first read the 4 bytes at the end of the block to get the location (S) of <b>DirCount</b>. Next read <b>DirCount</b> to determine the number of entries (N) in the directory, then read the directory entries.</p> <p>The <b>ValueData</b> may contain complete subdirectory blocks, each of which has the same format as specified above (and these subdirectories may themselves contain sub-subdirectories...). For these subdirectories, <b>BlockSize</b> is given by the <b>Size</b> specified in the corresponding directory entry. For the root directory, <b>BlockSize</b> is the length of the file.</p> <p>The <b>OtherData</b> normally does not exist (eg. the <b>DirEntries</b> usually end at the <b>DirStart</b> pointer), but this is not always the case: Canon Digital Photo Professional uses this area in the root directory block to store VRD data in edited CRW images. (Note that VRD supports embedded XMP, which provides a technique to store modern metadata in CRW images!)</p> <h3>CRW Directory Entry Format</h3> <p>The CRW directory consists of N 10-byte entries. The format of each entry is as follows:</p> <blockquote><table class='norm'> <tr><th>Offset<br>within entry</th><th>Number<br>of bytes</th> <th>Name</th><th>Description</th></tr> <tr align='center'><td>0</td><td>2</td><td>Tag</td> <td align='left'>16-bit integer identifying the type of data</td></tr> <tr align='center'><td>2</td><td>4</td><td>Size</td> <td align='left'>32-bit integer giving the number of bytes in the value data</td></tr> <tr align='center'><td>6</td><td>4</td><td>Offset</td> <td align='left'>32-bit integer offset that gives the number of bytes from the start of the <b>ValueData</b> block to the start of the value data for this directory entry</td></tr> </table></blockquote> <p>Data values with lengths shorter than 8 bytes may be stored in the directory <b>Size</b> and <b>Offset</b> fields. For these values the <b>DataLocation</b> bits in the <b>Tag</b> are set to 0x4000 (see <b>DataLocation</b> table below).</p> <p>Data stored in the <b>ValueData</b> block must be aligned on even 2-byte boundaries, yielding <b>Offset</b>s which are divisible by 2. To achieve this, records with an odd number of bytes must be padded with a zero byte.</p> <h3>Tag Bits</h3> <p>The 16-bit <b>Tag</b> value is composed of 3 bit fields, as follows:</p> <blockquote><table class='norm'> <tr><th>Bits</th><th>Mask</th><th>Name</th><th>Description</th></tr> <tr align='center'><td>14-15</td><td>0xc000</td><td>DataLocation</td> <td align='left'>Specifies the location of the data</td></tr> <tr align='center'><td>11-13</td><td>0x3800</td><td>DataFormat</td> <td align='left'>Identifies the information format</td></tr> <tr align='center'><td>0-10</td><td>0x07ff</td><td>TagIndex</td> <td align='left'>Index to identify the specific type of information</td></tr> </table></blockquote> <h4>DataLocation</h4> <p>Value data may either be stored in the <b>ValueData</b> block, or within the <b>Size</b> and <b>Offset</b> fields of the directory entry if it is less than 8 bytes long. The <b>DataLocation</b> bits specify where the value is stored:</p> <blockquote><table class='norm'> <tr><th>DataLocation</th><th>Where</th><th>Description</th></tr> <tr align='center'><td>0x0000</td><td>ValueData</td> <td align='left'>Values are stored in the <b>ValueData</b> block, at the specified <b>Offset</b> and <b>Size</b></td></tr> <tr align='center'><td>0x4000</td><td>Directory</td> <td align='left'>Values are stored in the <b>Size</b> and <b>Offset</b> fields of the directory entry. Values stored here are limited to a maximum size of 8 bytes.</td></tr> <tr align='center'><td>0x8000<br>0xc000</td><td>?</td><td align='left'>-</td></tr> </table></blockquote> <h4>DataFormat</h4> <p>Three <b>Tag</b> bits are used to specify the data format:</p> <blockquote><table class='norm'> <tr><th>DataFormat</th><th>Alignment</th><th>Description</th></tr> <tr align='center'><td>0x0000</td><td>1-Byte</td> <td align='left'>A series of bytes</td></tr> <tr align='center'><td>0x0800</td><td>1-Byte</td> <td align='left'>A null-terminated ASCII string</td></tr> <tr align='center'><td>0x1000</td><td>2-Byte</td> <td align='left'>A series of 16-bit integers</td></tr> <tr align='center'><td>0x1800</td><td>4-Byte</td> <td align='left'>A series of 32-bit integers or floats</td></tr> <tr align='center'><td>0x2000</td><td>1-Byte</td> <td align='left'>A structure which is a mixture of formats</td></tr> <tr align='center'><td>0x2800<br>0x3000</td><td>1-Byte</td> <td align='left'>A subdirectory block</td></tr> <tr align='center'><td>0x3800</td><td>?</td> <td align='left'>-</td></tr> </table></blockquote> <h4>TagID = DataFormat + TagIndex</h4> <p>Together, the <b>DataFormat</b> and <b>TagIndex</b> fields form a <b>TagID</b> which can be used to identify tags within the CRW file. The following is a list of known <b>TagID</b> values and their corresponding tag numbers in the <b>EXIF</b> maker notes when found in a JPEG or TIFF image. Also listed is the TagID of the <b>SubDir</b>ectory where the information is found. The <b>Size</b> listed below is an observed size of the value data, and is not necessarily expected to remain constant for all camera models.</p> <blockquote><table class='norm'> <tr><th>TagID</th><th>EXIF</th><th>SubDir</th><th>Name</th><th>Size</th><th>Description</th></tr> <tr><th class='lt' colspan=6>1-Byte Alignment</th></tr> <tr align='center'><td>0x0000</td><td>-</td><td><i>any</i></td><td>NullRecord</td><td>0</td> <td align='left'>This is a null directory entry</td></tr> <tr align='center'><td>0x0001</td><td>-</td><td><i>any</i></td><td>FreeBytes</td><td><i>varies</i></td> <td align='left'>Unused bytes in the <b>ValueData</b></td></tr> <tr align='center'><td>0x0006</td><td>-</td><td>0x300b</td><td>-</td><td>8</td><td align='left'>-</td></tr> <tr align='center'><td>0x0032</td><td>-</td><td>0x300b</td><td>CanonColorInfo1</td><td>768 or 2048</td> <td align='left'>Block of color information (format unknown)</td></tr> <tr align='center'><td>0x0036</td><td>-</td><td>0x300b</td><td>?</td><td><i>varies</i></td><td align='left'>-</td></tr> <tr align='center'><td>0x003f</td><td>-</td><td>0x300b</td><td>?</td><td>5120</td><td align='left'>-</td></tr> <tr align='center'><td>0x0040</td><td>-</td><td>0x300b</td><td>?</td><td>256</td><td align='left'>-</td></tr> <tr align='center'><td>0x0041</td><td>-</td><td>0x300b</td><td>?</td><td>256</td><td align='left'>-</td></tr> <tr><th class='lt' colspan=6>ASCII Strings</th></tr> <tr align='center'><td>0x0805</td><td>-</td><td>0x2804</td><td>CanonFileDescription</td><td>32</td> <td align='left'>Description of the file format. eg) "EOS DIGITAL REBEL CMOS RAW"</td></tr> <tr align='center'><td>0x0805</td><td>-</td><td>0x300a</td><td>UserComment</td><td>256</td> <td align='left'>User comment (usually blank)</td></tr> <tr align='center'><td>0x080a</td><td>-</td><td>0x2807</td><td>CanonRawMakeModel</td><td>32</td> <td align='left'>Two end-to-end null-terminated ASCII strings giving the camera make and model. eg) "Canon","Canon EOS DIGITAL REBEL"</td></tr> <tr align='center'><td>0x080b</td><td>0x07</td><td>0x3004</td><td>CanonFirmwareVersion</td><td>32</td> <td align='left'>Firmware version. eg) "Firmware Version 1.1.1"</td></tr> <tr align='center'><td>0x080c</td><td>-</td><td>?</td><td>ComponentVersion</td><td>?</td><td align='left'>-</td></tr> <tr align='center'><td>0x080d</td><td>-</td><td>0x3004</td><td>ROMOperationMode</td><td>4</td> <td align='left'>eg) The string "USA" for 300D's sold in North America</td></tr> <tr align='center'><td>0x0810</td><td>0x09</td><td>0x2807</td><td>OwnerName</td><td>32</td> <td align='left'>Owner's name. eg) "Phil Harvey"</td></tr> <tr align='center'><td>0x0815</td><td>0x06</td><td>0x2804</td><td>CanonImageType</td><td>32</td> <td align='left'>Type of file. eg) "CRW:EOS DIGITAL REBEL CMOS RAW"</td></tr> <tr align='center'><td>0x0816</td><td>-</td><td>0x300a</td><td>OriginalFileName</td><td>32</td> <td align='left'>Original file name. eg) "CRW_1834.CRW"</td></tr> <tr align='center'><td>0x0817</td><td>-</td><td>0x300a</td><td>ThumbnailFileName</td><td>32</td> <td align='left'>Thumbnail file name. eg) "CRW_1834.THM"</td></tr> <tr><th class='lt' colspan=6>2-Byte Alignment</th></tr> <tr align='center'><td>0x100a</td><td>-</td><td>0x300a</td><td>TargetImageType</td><td>2</td> <td align='left'>0=real-world subject, 1=written document</td></tr> <tr align='center'><td>0x1010</td><td>-</td><td>0x3002</td><td>ShutterReleaseMethod</td><td>2</td> <td align='left'>0=single shot, 1=continuous shooting</td></tr> <tr align='center'><td>0x1011</td><td>-</td><td>0x3002</td><td>ShutterReleaseTiming</td><td>2</td> <td align='left'>0=priority on shutter, 1=priority on focus</td></tr> <tr align='center'><td>0x1014</td><td>-</td><td>0x3002</td><td>-</td><td>8</td><td align='left'>-</td></tr> <tr align='center'><td>0x1016</td><td>-</td><td>0x3002</td><td>ReleaseSetting</td><td>2</td><td align='left'>-</td></tr> <tr align='center'><td>0x101c</td><td>-</td><td>0x3004</td><td>BaseISO</td><td>2</td> <td align='left'>The camera body's base ISO sensitivity</td></tr> <tr align='center'><td>0x1026</td><td>-</td><td>0x300a</td><td>-</td><td>6</td><td align='left'>-</td></tr> <tr align='center'><td>0x1028</td><td>0x03</td><td>0x300b</td><td>CanonFlashInfo?</td><td>8</td><td align='left'>Unknown information, flash related</td></tr> <tr align='center'><td>0x1029</td><td>0x02</td><td>0x300b</td><td>FocalLength</td><td>8</td> <td align='left'>Four 16 bit integers: 0) unknown, 1) focal length in mm, 2-3) sensor width and height in units of 1/1000 inch</td></tr> <tr align='center'><td>0x102a</td><td>0x04</td><td>0x300b</td><td>CanonShotInfo</td><td><i>varies</i></td> <td align='left'>Data block giving <a href="TagNames/Canon.html#ShotInfo">shot information</a></td></tr> <tr align='center'><td>0x102c</td><td>-</td><td>0x300b</td><td>CanonColorInfo2</td><td>256</td> <td align='left'>Data block of color information (format unknown)</td></tr> <tr align='center'><td>0x102d</td><td>0x01</td><td>0x300b</td><td>CanonCameraSettings</td><td><i>varies</i></td> <td align='left'>Data block giving <a href="TagNames/Canon.html#CameraSettings">camera settings</a></td></tr> <tr align='center'><td>0x1030</td><td>-</td><td>0x300b</td><td>WhiteSample</td><td>102 or 118</td> <td align='left'><a href="TagNames/CanonRaw.html#WhiteSample">White sample information</a> with encrypted 8x8 sample data</td></tr> <tr align='center'><td>0x1031</td><td>-</td><td>0x300b</td><td>SensorInfo</td><td>34</td> <td align='left'><a href="TagNames/Canon.html#SensorInfo">Sensor size and resolution information</a></td></tr> <tr align='center'><td>0x1033</td><td>0x0f</td><td>0x300b</td><td>CanonCustomFunctions</td><td><i>varies</i></td> <td align='left'>Data block giving <a href="TagNames/CanonCustom.html#Functions10D">Canon custom settings</a></td></tr> <tr align='center'><td>0x1038</td><td>0x12</td><td>0x300b</td><td>CanonAFInfo</td><td><i>varies</i></td> <td align='left'>Data block giving <a href="TagNames/Canon.html#AFInfo">AF-specific information</a></td></tr> <tr align='center'><td>0x1039</td><td>0x13</td><td>0x300b</td><td>?</td><td>8</td><td align='left'>-</td></tr> <tr align='center'><td>0x103c</td><td>-</td><td>0x300b</td><td>?</td><td>156</td><td align='left'>-</td></tr> <tr align='center'><td>0x107f</td><td>-</td><td>0x300b</td><td>-</td><td><i>varies</i></td><td align='left'>-</td></tr> <tr align='center'><td>0x1093</td><td>0x93</td><td>0x300b</td><td>CanonFileInfo</td><td>18</td> <td align='left'>Data block giving <a href="TagNames/Canon.html#FileInfo">file-specific information</a></td></tr> <tr align='center'><td>0x10a8</td><td>0xa8</td><td>0x300b</td><td>?</td><td>20</td><td align='left'>-</td></tr> <tr align='center'><td>0x10a9</td><td>0xa9</td><td>0x300b</td><td>ColorBalance</td><td>82</td> <td align='left'>Table of 16-bit integers. The first integer (like many other data blocks) is the number of bytes in the record. This is followed by red, green1, green2 and blue levels for WhiteBalance settings: auto, daylight, shade, cloudy, tungsten, fluorescent, flash, custom and kelvin. The final 4 entries appear to be some sort of baseline red, green1, green2 and blue levels.</td></tr> <tr align='center'><td>0x10aa</td><td>0xaa</td><td>0x300b</td><td>?</td><td>10</td><td align='left'>-</td></tr> <tr align='center'><td>0x10ad</td><td>-</td><td>0x300b</td><td>?</td><td>62</td><td align='left'>-</td></tr> <tr align='center'><td>0x10ae</td><td>0xae</td><td>0x300b</td><td>ColorTemperature</td><td>2</td> <td align='left'>16-bit integer giving the color temperature</td></tr> <tr align='center'><td>0x10af</td><td>-</td><td>0x300b</td><td>?</td><td>2</td><td align='left'>-</td></tr> <tr align='center'><td>0x10b4</td><td>0xb4</td><td>0x300b</td><td>ColorSpace</td><td>2</td> <td align='left'>16-bit integer specifying the color space (1=sRGB, 2=Adobe RGB, 0xffff=uncalibrated)</td></tr> <tr align='center'><td>0x10b5</td><td>0xb5</td><td>0x300b</td><td>RawJpgInfo</td><td>10</td> <td align='left'>Data block giving <a href="TagNames/CanonRaw.html#RawJpgInfo">embedded JPG information</a></td></tr> <tr align='center'><td>0x10c0</td><td>0xc0</td><td>0x300b</td><td>?</td><td>26</td><td align='left'>-</td></tr> <tr align='center'><td>0x10c1</td><td>0xc1</td><td>0x300b</td><td>?</td><td>26</td><td align='left'>-</td></tr> <tr align='center'><td>0x10c2</td><td>-</td><td>0x300b</td><td>?</td><td>884</td><td align='left'>-</td></tr> <tr><th class='lt' colspan=6>4-Byte Alignment</th></tr> <tr align='center'><td>0x1803</td><td>-</td><td>0x300a</td><td>ImageFormat</td><td>8</td> <td align='left'>32-bit integer specifying image format (0x20001 for CRW), followed by 32-bit float giving target compression ratio</td></tr> <tr align='center'><td>0x1804</td><td>-</td><td>0x300a</td><td>RecordID</td><td>4</td> <td align='left'>The number of pictures taken since the camera was manufactured</td></tr> <tr align='center'><td>0x1805</td><td>-</td><td>0x3002</td><td>-</td><td>8</td><td align='left'>-</td></tr> <tr align='center'><td>0x1806</td><td>-</td><td>0x3002</td><td>SelfTimerTime</td><td>4</td> <td align='left'>32-bit integer giving self-timer time in milliseconds</td></tr> <tr align='center'><td>0x1807</td><td>-</td><td>0x3002</td><td>TargetDistanceSetting</td><td>4</td> <td align='left'>32-bit float giving target distance in mm</td></tr> <tr align='center'><td>0x180b</td><td>0x0c</td><td>0x3004</td><td>SerialNumber</td><td>4</td> <td align='left'>The camera body number for EOS models. eg) 00560012345</td></tr> <tr align='center'><td>0x180e</td><td>-</td><td>0x300a</td><td>TimeStamp</td><td>12</td> <td align='left'>32-bit integer giving the time in seconds when the picture was taken, followed by a 32-bit timezone in seconds</td></tr> <tr align='center'><td>0x1810</td><td>-</td><td>0x300a</td><td>ImageInfo</td><td>28</td> <td align='left'>Data block containing <a href="TagNames/CanonRaw.html#ImageInfo">image information, including rotation</a></td></tr> <tr align='center'><td>0x1812</td><td>-</td><td>0x3004</td><td>-</td><td>40</td><td align='left'>-</td></tr> <tr align='center'><td>0x1813</td><td>-</td><td>0x3002</td><td>FlashInfo</td><td>8</td> <td align='left'>Two 32-bit floats: The flash guide number and the flash threshold</td></tr> <tr align='center'><td>0x1814</td><td>-</td><td>0x3003</td><td>MeasuredEV</td><td>4</td> <td align='left'>32-bit float giving the measured EV</td></tr> <tr align='center'><td>0x1817</td><td>0x08</td><td>0x300a</td><td>FileNumber</td><td>4</td> <td align='left'>32-bit integer giving the number of this file. eg) 1181834</td></tr> <tr align='center'><td>0x1818</td><td>-</td><td>0x3002</td><td>ExposureInfo</td><td>12</td> <td align='left'>Three 32-bit floats: Exposure compensation, Tv, Av</td></tr> <tr align='center'><td>0x1819</td><td>-</td><td>0x300b</td><td>-</td><td>64</td><td align='left'>-</td></tr> <tr align='center'><td>0x1834</td><td>0x10</td><td>0x300b</td><td>CanonModelID</td><td>4</td> <td align='left'>Unsigned 32-bit integer giving unique model ID</td></tr> <tr align='center'><td>0x1835</td><td>-</td><td>0x300b</td><td>DecoderTable</td><td>16</td> <td align='left'><a href="TagNames/CanonRaw.html#DecoderTable">RAW decoder table information</a></td></tr> <tr align='center'><td>0x183b</td><td>0x15</td><td>0x300b</td><td>SerialNumberFormat</td><td>4</td> <td align='left'>32-bit integer (0x90000000=format 1, 0xa0000000=format 2)</td></tr> <tr><th class='lt' colspan=6>Mixed Data Records</th></tr> <tr align='center'><td>0x2005</td><td>-</td><td><i>root</i></td><td>RawData</td><td><i>varies</i></td> <td align='left'>The raw data itself (the bulk of the CRW file)</td></tr> <tr align='center'><td>0x2007</td><td>-</td><td><i>root</i></td><td>JpgFromRaw</td><td><i>varies</i></td> <td align='left'>The embedded JPEG image (2048x1360 pixels for the 300D with Canon firmware)</td></tr> <tr align='center'><td>0x2008</td><td>-</td><td><i>root</i></td><td>ThumbnailImage</td><td><i>varies</i></td> <td align='left'>Thumbnail image (JPEG, 160x120 pixels)</td></tr> <tr><th class='lt' colspan=6>SubDirectory Blocks</th></tr> <tr align='center'><td>0x2804</td><td>-</td><td>0x300a</td><td>ImageDescription</td><td><i>varies</i></td> <td align='left'>The image description subdirectory</td></tr> <tr align='center'><td>0x2807</td><td>-</td><td>0x300a</td><td>CameraObject</td><td><i>varies</i></td> <td align='left'>The camera object subdirectory</td></tr> <tr align='center'><td>0x3002</td><td>-</td><td>0x300a</td><td>ShootingRecord</td><td><i>varies</i></td> <td align='left'>The shooting record subdirectory</td></tr> <tr align='center'><td>0x3003</td><td>-</td><td>0x300a</td><td>MeasuredInfo</td><td><i>varies</i></td> <td align='left'>The measured information subdirectory</td></tr> <tr align='center'><td>0x3004</td><td>-</td><td>0x2807</td><td>CameraSpecification</td><td><i>varies</i></td> <td align='left'>The camera specification subdirectory</td></tr> <tr align='center'><td>0x300a</td><td>-</td><td><i>root</i></td><td>ImageProps</td><td><i>varies</i></td> <td align='left'>The main subdirectory containing all meta information</td></tr> <tr align='center'><td>0x300b</td><td>-</td><td>0x300a</td><td>ExifInformation</td><td><i>varies</i></td> <td align='left'>The subdirectory containing most of the JPEG/TIFF EXIF information</td></tr> </table></blockquote> <h3>Revisions</h3> <p>Sept. 20, 2010 - Added note about XMP support in the VRD data</p> <p>Feb. 12, 2009 - Moved a couple of entries in the TagID table that were in the wrong section</p> <p>Feb. 4, 2008 - Added a number of unknown TagID's, decode some tags in the WhiteSample and DecoderTable data blocks, and fix incorrect SubDir for SerialNumber tag</p> <p>Nov. 16, 2007 - Added a number of unknown blocks</p> <p>Sept. 12, 2007 - Change name of CanonPictureInfo record to CanonAFInfo</p> <p>Nov. 28, 2006 - Highlight the possibility of <b>OtherData</b> existing in the directory block</p> <hr> Please e-mail me if you find any errors or omissions in this document. My address is phil at owl.phy.queensu.ca - Thanks! <p class='lf'><i>Created Jan. 28, 2005</i> <br><i>Last revised Sept. 20, 2010</i></p> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/commentary.html�����������������������������������������������������������000644 �000765 �000024 �00000037026 12343640776 020417� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> <html> <head> <title>Commentary on Meta Information Formats</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <style type="text/css"> <!-- a.ref { text-decoration: none; font-size: x-small; font-weight: normal; vertical-align: super; } .norm { font-weight: normal } --> </style> </head> <body> <div class='index'> <b>What sucks:</b> <br><a href="#EXIF">EXIF / TIFF</a> <br><a href="#Maker">EXIF Maker notes</a> <br><a href="#JPEG">JPEG</a> <br><a href="#IPTC">IPTC IIM</a> <br><a href="#XMP">XMP</a> <br><a href="#PDF">PDF</a> <br><a href="#PNG">PNG</a> <br><a href="#PICT">PICT</a> <br><a href="#FlashPix">FlashPix</a> <br><a href="#DICOM">DICOM</a> <br><a href="#AVCHD">AVCHD</a> <br><a href="#ISO">ISO</a> <br><b>What doesn't:</b> <br><a href="#CRW">CRW (CIFF)</a> <br><a href="#QuickTime">QuickTime</a> <br><a href="#MIE">MIE</a> </div> <h2 class='up'>Commentary on Meta Information Formats<br> <span class='sm'>(or <i>"Why this or that Format Sucks"</i>)</span></h2> <a name='EXIF'></a> <h3>EXIF / TIFF</h3> <p>EXIF uses the TIFF format to store information. The biggest problem with this format is that all pointers are absolute (ie. relative to the start of the file). This means that the pointers need fixing up if the position of any information changes. This is significant because pointers are often hidden inside proprietary structures which should remain opaque (such as maker notes). The result is that some EXIF information is easily corrupted when editing a file. This problem is ignored by many software packages. Much effort was required in the development of ExifTool to avoid the loss of information such as this.</p> <p>A significant problem is that an IFD (image file directory) pointer has the same format code as a long integer, so information in any non-recognized IFD is lost when the image is rewritten. There is a seldom-used format code of 13 that has been proposed to indicate an IFD, but this is not part of the EXIF/TIFF specification and is not in common usage. <i class=lt>[Hey! Olympus has just started using this code for the IFD's in the maker notes of their new Camera models! - 2007/03/08]</i></p> <p>Also, it was wrong to specify a count instead of a size for each directory entry because this makes it impossible to add new format types without requiring that older readers simply discard data of unknown type (since the data size isn't known, the old readers don't know how to copy the data).</p> <p>All these shortcomings make TIFF a very non-extensible format which by design will result in the loss of non-standard information.</p> <p>And we don't learn from our mistakes (OK, maybe some of us can, but apparently not big corporations like Adobe or Microsoft), because the new DNG and WDP formats are TIFF-based too.</p> <p>The EXIF specification also has some significant shortcomings to add to the TIFF problems, like minimal special character abilities, no language support, and no way to specify time zone.</p> <a name='Maker'></a> <h3>EXIF Maker Notes</h3> <p>Maker notes are a can of worms. The EXIF specification unfortunately made no mention about the information format of the maker notes. If properly designed, the specification would have provided a maker note IFD tag to allow IFD-style maker notes to be used. Many manufacturers implemented it this way, but each with a different technique and many with <a href="idiosyncracies.html">odd quirks</a>. This deficiency combined with problems in the TIFF (EXIF) format mean that most software will quite unknowingly scramble your maker notes when an image is rewritten. To prevent this, specific knowledge about files written by individual manufacturers is necessary, and of course the manufacturers are not prone to divulging this information to the public so it must all be reverse engineered.</p> <p>The official TIFF recommendation is to delete unknown information when rewriting an image<a class=ref href="#ref1">[1]</a>, and this irresponsible strategy has been adopted by some applications such as Adobe Photoshop, resulting in a total loss of maker note information. This is very unfortunate because even corrupted maker notes contain useful information, and smart utilities (like ExifTool) are often able to recover the information from damaged maker notes.</p> <a name='JPEG'></a> <h3>JPEG</h3> <p>The JPEG format acts only as a container for meta information, and defines no meta information format itself. But it sucks just a as a container format because it limits the maximum contiguous block size to 64kB. This causes problems because many cameras store more than 64kB of additional information in their JPEG images. Usually, this is due to the medium-sized JPEG image that many cameras embed for preview purposes. It would have been nice if there was a standard way to embed this preview in JPEG images (without the 64kB limitation). <i class=lt>[Update: In February 2009 CIPA released the MPF format specification which allows storage of preview images larger than 64kB, but unfortunately this specification <a href="standards.html#MPF">has problems of its own</a>.]</i></p> <p>Aside: The EXIF specification could have easily allowed the information to span multiple JPEG segments, which would have been smart, but still wouldn't have solved the problem entirely since it could result in a non-contiguous preview image (this would be a problem for cameras since they typically want to use this image for quick review of pictures, and re-mapping the image into a contiguous memory space would be costly).</p> <a name='IPTC'></a> <h3>IPTC IIM</h3> <p>IPTC IIM earns a few points because it is the easiest to process of the common meta information formats. However, the format is overly restrictive and not very extensible. Format information and human-readable tag names are not part of the specification, so it is not possible to meaningfully interpret unknown values. Also, there are many interdependencies between tags that make it very annoying for writing, and the special character support is ill-conceived.</p> <a name='XMP'></a> <h3>XMP</h3> <p>The XMP format is a good example of a designed-by-committee specification. It is based on XML, which is much more complicated than necessary and tries to make everyone happy by providing a multitude of format styles and features (shorthand format, etc, etc). This makes it very difficult to properly implement the complete specification. Not even the Adobe software supports all of the format options of their own XMP specification. And the format is exceedingly verbose, wasting disk space, bandwidth and time.</p> <p>Also, XMP only supports textual information. Binary information must be text-encoded if stored in XMP. This makes it very bulky, slow and completely unsuitable for storage of binary information.</p> <p>Mainly because of the complexity of the specification, and despite Adobe's best efforts, XMP still isn't very well supported by meta information editing tools. The best hope for small application developers is to link against an off-the-shelf XMP or XML library. Apparently Adobe realizes this and is now providing an XMP development kit, but this solution is only useful for those platforms and computer languages that they choose to support.</p> <a name='PDF'></a> <h3>PDF</h3> <p>...and I thought XMP was too complicated. PDF is just insane. Because of this, it is unlikely that ExifTool will ever support this format for writing. <i class=lt>[Dec. 18, 2007 Update: I have just added PDF write support using the incremental update feature of PDF. It was still a bit of work, but somewhat simpler (and MUCH faster!) than rewriting the entire PDF. But there are disadvantages: The resulting PDF is not "linearized", and there are privacy and security issues with leaving old metadata in the file.]</i></p> <a name='PNG'></a> <h3>PNG</h3> <p>PNG sucks because meta information can be stored only in text format. This was a huge mistake, and as a work-around software (eg. ImageMagick) must encode binary information in ASCII-hex, then compress it to offset the increase in size, and store it as a compressed text block. This adds unnecessary complexity, greatly slows down processing, and makes it much harder to develop software which supports PNG meta information.</p> <a name='PICT'></a> <h3>PICT</h3> <p>The PICT format just plain sucks. It is one of the worst-designed image formats in existence, second only to FlashPix. I don't believe that it was originally designed as a file format. Instead it appears to have emerged from the internal Apple QuickDraw structures. The files are not designed to be processed by any software other than the Mac OS. Intimate knowledge of the QuickDraw structures is required just to parse the PICT image, even if the reader doesn't care about the contained information. Because of this, PICT images are very fragile and a simple data error or programming bug will invalidate an entire image. Possibly for these reasons the PICT format never gained popularity outside the Apple world. Also, the concept of meta information is all but ignored in the PICT design.</p> <a name='FlashPix'></a> <h3>FlashPix</h3> <p>Oh. My. God. Don't get me started on this one. Let's just say that basing an image file format on the File Allocation Table (FAT) structure of a floppy disk with fixed 512-byte sectors is monumentally idiotic. Microsoft Word, Excel and PowerPoint documents also use this insane format.</p> <a name='DICOM'></a> <h3>DICOM Medical Images</h3> <p>The DICOM format is reasonably well designed. The UID's are cumbersome, but achieve their purpose. The biggest bungle in the design is the implicit VR syntax, which presumably exists for historical reasons to provide backward compatibility with pre-existing ACR-NEMA images. The DICOM specification document is horrible and obviously written by committee, and was possibly the single largest impediment to implementing support for this format.</p> <p>Technical: The files would be easier to parse if the transfer syntax became effective immediately after the transfer syntax data element instead of at the end of the meta information group. Also, the deflated data should have contained the zlib header, as in PNG and PDF images. This would make it easier to read and allow CRC validation of the datastream. -- Can you tell I wrote this just after adding DICOM support to ExifTool?</p> <a name='AVCHD'></a> <h3>AVCHD (.M2TS) <span class='sm norm'><i class=lt>(added 2009-10-29)</i></span></h3> <p>This format is used in .M2TS video files (and Blu-Ray HD DVD's). It is painfully obvious that this was never designed as a storage format. It uses MPEG-2 transport stream (M2TS) container, which is a communications protocol and never should have been used for storage. The M2TS format is based on a 188-byte packet size which makes no sense for modern filesystems. And to make things worse, metadata in AVCHD files is stored in the H.264 video stream (!!) which uses insane and convoluted data structures such as the variable-bit-length exponential-Golomb which are painful and inefficient to parse in software, and as far as I can tell the format for the metadata stored in these streams is proprietary and undocumented.</p> <a name='ISO'></a> <h3>ISO Considered Harmless</h3> <p>This is not a meta information format, but since many format specifications are imprisoned by the ISO it deserves mentioning...</p> <p>In my experience, the International Standards Organization is extremely counter-productive. Their goal is to promote standardization, but by charging too much money for copies of the standards documents they defeat their own purpose. The effect is that small companies and individuals developing software (including open source software such as ExifTool) do not have access to the official standard. Instead, software is often based on old, obsolete documents or drafts which are sometimes publicly available, or on 3rd party descriptions which are often incomplete. To sum things up: ISO sucks.</p> <hr> <h2>OK. So all those formats suck. What doesn't?</h2> <a name='CRW'></a> <h3>Canon CRW Images (CIFF format)</h3> <p>This format uses a directory structure similar to TIFF, but all offsets are relative and unknown information can handled properly when rewriting. Because of this, it is much more extensible than TIFF, but the format is still limited by 16-bit integer tag ID's among other TIFF weaknesses. It isn't great, but at least it doesn't suck.</p> <a name='QuickTime'></a> <h3>QuickTime Videos</h3> <p>The Apple QuickTime MOV format is very nice format. (Which is a breath of fresh air after the Apple PICT travesty.) It was a smart move to use this format for the MP4 specification. I would only change 2 things about this format: 1) Use longer tag names instead of the current 4 characters (I know that 4 characters is convenient because it can be used as an integer in lookup tables, but it would be nice if the tag names were a bit more meaningful). 2) Add a format code to the Atom definition so simple unknown information could be decoded properly. These changes would allow some unknown information to be interpreted, which would make it possible for information added by 3rd parties to be useful.</p> <p>I only have 2 problems with the QuickTime specification:</p> <p>1) The metadata organization is a mess because tags may be stored in more than one location (eg. UserData vs. InfoList), and conflicting metadata directories may exist, even in the same location (as written by iTunes).</p> <p>2) The length of 'udta' text strings with language codes is written incorrectly by many (most?) utilties, including Apple iTunes. The language strings are supposed to use a "small integer atom format" where the first two bytes give the size of the string including the length word and language codes. But often the size doesn't include these 4 bytes, which sort of defeats the purpose of the multiple languages because it is difficult to parse past the first entry if you don't know the size.</p> <a name='MIE'></a> <h3>My Format (Meta Information Encapsulation, or "MIE")</h3> <p>Now it is time to put my money where my mouth is: I have designed a format which doesn't suck. It is called "MIE", which stands for Meta Information Encapsulation.</p> <p>The MIE format is hierarchical like QuickTime, but it uses meaningful tag names and specifies a data format for all values. As well, this format offers a number of other features:</p> <ul> <li>Can be used as a wrapper around any type of file, as a trailer appended to other formats, or as a stand-alone meta information format <li>Extensible <li>Compact <li>Meaningful tag ID's <li>Streamable (and single-pass writing possible) <li>Relocatable data elements (ie. no fixed offsets) <li>Relatively simple to implement reader/writer <li>Supports large data lengths (up to 4GB*4GB) <li>Localized text feature <li>Built-in support for numerical units of measure <li>Multiple documents in a single file </ul> <p>The specification for this format can be found <a href="MIE1.1-20070121.pdf">here</a>, and is implemented in <a href="http://search.cpan.org/dist/Image-ExifTool/lib/Image/ExifTool/MIE.pm">Image::ExifTool::MIE.pm</a></p> <p>OK. Flame away. I can take it.</p> <a name="refs"></a> <h3>References</h3> <ol> <li><a name="ref1" href="http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf">http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf</a>, page 26</li> </ol> <hr> <i>Created Nov. 15, 2005</i><br> <i>Last revised July 29, 2010</i> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/config.html���������������������������������������������������������������000644 �000765 �000024 �00000042004 12520416670 017465� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> <html> <head><title>example.config</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <pre> <span class=com>#------------------------------------------------------------------------------ # File: example.config # # Description: Example user configuration file for Image::ExifTool # # Notes: This example file shows how to define your own shortcuts and # add new EXIF, IPTC, XMP, PNG, MIE and Composite tags, as well # as how to specify preferred lenses for the LensID tag, and # define new file types and default ExifTool option values. # # Note that unknown tags may be extracted even if they aren't # defined, but tags must be defined to be written. Also note # that it is possible to override an existing tag definition # with a user-defined tag. # # To activate this file, rename it to ".ExifTool_config" and # place it in your home directory or the exiftool application # directory. (On Windows and Mac systems this must be done via # the command line since the GUI's don't allow filenames to begin # with a dot. Use the "rename" command in Windows or "mv" on the # Mac.) This causes ExifTool to automatically load the file when # run. Your home directory is determined by the first defined of # the following environment variables: # # 1. EXIFTOOL_HOME # 2. HOME # 3. HOMEDRIVE + HOMEPATH # 4. (the current directory) # # Alternatively, the -config option of the exiftool application # may be used to load a specific configuration file (note that # this must be the first option on the command line): # # exiftool -config example.config ... # # This example file defines the following 16 new tags as well as # a number of Shortcut and Composite tags: # # 1. EXIF:NewEXIFTag # 2. GPS:GPSPitch # 3. GPS:GPSRoll # 4. IPTC:NewIPTCTag # 5. XMP-xmp:NewXMPxmpTag # 6. XMP-exif:GPSPitch # 7. XMP-exif:GPSRoll # 8. XMP-xxx:NewXMPxxxTag1 # 9. XMP-xxx:NewXMPxxxTag2 # 10. XMP-xxx:NewXMPxxxTag3 # 11. XMP-xxx:NewXMPxxxStruct # 12. PNG:NewPngTag1 # 13. PNG:NewPngTag2 # 14. PNG:NewPngTag3 # 15. MIE-Meta:NewMieTag1 # 16. MIE-Test:NewMieTag2 # # For detailed information on the definition of tag tables and # tag information hashes, see lib/Image/ExifTool/README. #------------------------------------------------------------------------------ # Shortcut tags are used when extracting information to simplify # commonly used commands. They can be used to represent groups # of tags, or to provide an alias for a tag name.</span> %Image::ExifTool::UserDefined::Shortcuts = ( MyShortcut =&gt; ['exif:createdate','exposuretime','aperture'], MyAlias =&gt; 'FocalLengthIn35mmFormat', ); <span class=com># NOTE: All tag names used in the following tables are case sensitive. # The %Image::ExifTool::UserDefined hash defines new tags to be added # to existing tables.</span> %Image::ExifTool::UserDefined = ( <span class=com># All EXIF tags are added to the Main table, and WriteGroup is used to # specify where the tag is written (default is ExifIFD if not specified):</span> 'Image::ExifTool::Exif::Main' =&gt; { <span class=com># Example 1. EXIF:NewEXIFTag</span> 0xd000 =&gt; { Name =&gt; 'NewEXIFTag', Writable =&gt; 'int16u', WriteGroup =&gt; 'IFD0', }, <span class=com># add more user-defined EXIF tags here...</span> }, <span class=com># the <a href="geotag.html">Geotag feature</a> writes these additional GPS tags if available:</span> 'Image::ExifTool::GPS::Main' =&gt; { <span class=com># Example 2. GPS:GPSPitch</span> 0xd000 =&gt; { Name =&gt; 'GPSPitch', Writable =&gt; 'rational64s', }, <span class=com># Example 3. GPS:GPSRoll</span> 0xd001 =&gt; { Name =&gt; 'GPSRoll', Writable =&gt; 'rational64s', }, }, <span class=com># IPTC tags are added to a specific record type (eg. application record): # (Note: IPTC tag ID's are limited to the range 0-255)</span> 'Image::ExifTool::IPTC::ApplicationRecord' =&gt; { <span class=com># Example 4. IPTC:NewIPTCTag</span> 160 =&gt; { Name =&gt; 'NewIPTCTag', Format =&gt; 'string[0,16]', }, <span class=com># add more user-defined IPTC ApplicationRecord tags here...</span> }, <span class=com># XMP tags may be added to existing namespaces:</span> 'Image::ExifTool::XMP::xmp' =&gt; { <span class=com># Example 5. XMP-xmp:NewXMPxmpTag</span> NewXMPxmpTag =&gt; { Groups =&gt; { 2 =&gt; 'Author' } }, <span class=com># add more user-defined XMP-xmp tags here...</span> }, <span class=com># special Geotag tags for XMP-exif:</span> 'Image::ExifTool::XMP::exif' =&gt; { <span class=com># Example 6. XMP-exif:GPSPitch</span> GPSPitch =&gt; { Writable =&gt; 'rational', Groups =&gt; { 2 =&gt; 'Location' } }, <span class=com># Example 7. XMP-exif:GPSRoll</span> GPSRoll =&gt; { Writable =&gt; 'rational', Groups =&gt; { 2 =&gt; 'Location' } }, }, <span class=com># new XMP namespaces (eg. xxx) must be added to the Main XMP table:</span> 'Image::ExifTool::XMP::Main' =&gt; { <span class=com># namespace definition for examples 8 to 11</span> xxx =&gt; { <span class=com># &lt;-- must be the same as the NAMESPACE prefix</span> SubDirectory =&gt; { TagTable =&gt; 'Image::ExifTool::UserDefined::xxx', <span class=com># (see the definition of this table below)</span> }, }, <span class=com># add more user-defined XMP namespaces here...</span> }, <span class=com># new PNG tags are added to the PNG::TextualData table:</span> 'Image::ExifTool::PNG::TextualData' =&gt; { <span class=com># Example 12. PNG:NewPngTag1</span> NewPngTag1 =&gt; { }, <span class=com># Example 13. PNG:NewPngTag2</span> NewPngTag2 =&gt; { }, <span class=com># Example 14. PNG:NewPngTag3</span> NewPngTag3 =&gt; { }, }, <span class=com># add a new MIE tag (NewMieTag1) and group (MIE-Test) to MIE-Meta # (Note: MIE group names must NOT end with a number)</span> 'Image::ExifTool::MIE::Meta' =&gt; { <span class=com># Example 15. MIE-Meta:NewMieTag1</span> NewMieTag1 =&gt; { Writable =&gt; 'rational64u', Units =&gt; [ 'cm', 'in' ], }, <span class=com># new MIE "Test" group for example 16</span> Test =&gt; { SubDirectory =&gt; { TagTable =&gt; 'Image::ExifTool::UserDefined::MIETest', DirName =&gt; 'MIE-Test', }, }, }, <span class=com># Composite tags are added to the Composite table:</span> 'Image::ExifTool::Composite' =&gt; { <span class=com># Composite tags are unique: The Require/Desire elements specify # tags that must/may exist, and the keys of these hashes are used as # indices in the @val array of the ValueConv expression to access # the numerical (-n) values of these tags. All Require'd tags must # exist for the Composite tag to be evaluated. If no Require'd tags # are specified, then at least one of the Desire'd tags must exist. # See the Composite table in Image::ExifTool::Exif for more # examples, and lib/Image/ExifTool/README for all of the details.</span> BaseName =&gt; { Require =&gt; { 0 =&gt; 'FileName', }, <span class=com># remove the extension from FileName</span> ValueConv =&gt; '$val[0] =~ /(.*)\./ ? $1 : $val[0]', }, <span class=com># the next few examples demonstrate simplifications which may be # used if only one tag is Require'd or Desire'd: # 1) the Require lookup may be replaced with a simple tag name # 2) "$val" may be used to represent "$val[0]" in the expression</span> FileExtension =&gt; { Require =&gt; 'FileName', ValueConv =&gt; '$val=~/\.([^.]*)$/; $1', }, <span class=com># override CircleOfConfusion tag to use D/1750 instead of D/1440</span> CircleOfConfusion =&gt; { Require =&gt; 'ScaleFactor35efl', Groups =&gt; { 2 =&gt; 'Camera' }, ValueConv =&gt; 'sqrt(24*24+36*36) / ($val * 1750)', <span class=com># an optional PrintConv may be used to format the value</span> PrintConv =&gt; 'sprintf("%.3f mm",$val)', }, <span class=com># generate a description for this file type</span> FileTypeDescription =&gt; { Require =&gt; 'FileType', ValueConv =&gt; 'GetFileType($val,1) || $val', }, <span class=com># calculate physical image size based on resolution</span> PhysicalImageSize =&gt; { Require =&gt; { 0 =&gt; 'ImageWidth', 1 =&gt; 'ImageHeight', 2 =&gt; 'XResolution', 3 =&gt; 'YResolution', 4 =&gt; 'ResolutionUnit', }, ValueConv =&gt; '$val[0]/$val[2] . " " . $val[1]/$val[3]', <span class=com># (the @prt array contains print-formatted values)</span> PrintConv =&gt; 'sprintf("%.1fx%.1f $prt[4]", split(" ",$val))', }, <span class=com># [advanced] select largest JPEG preview image</span> BigImage =&gt; { Groups =&gt; { 2 =&gt; 'Preview' }, Desire =&gt; { 0 =&gt; 'JpgFromRaw', 1 =&gt; 'PreviewImage', 2 =&gt; 'OtherImage', <span class=com># (DNG and A100 ARW may be have 2 PreviewImage's)</span> 3 =&gt; 'PreviewImage (1)', }, <span class=com># ValueConv may also be a code reference # Inputs: 0) reference to list of values, 1) ExifTool object</span> ValueConv =&gt; sub { my $val = shift; my ($image, $bigImage, $len, $bigLen); foreach $image (@$val) { next unless ref $image eq 'SCALAR'; <span class=com># check for JPEG image (or "Binary data" if -b not used)</span> next unless $$image =~ /^(\xff\xd8\xff|Binary data (\d+))/; $len = $2 || length $$image; <span class=com># get image length</span> <span class=com># save largest image</span> next if defined $bigLen and $bigLen &gt;= $len; $bigLen = $len; $bigImage = $image; } return $bigImage; }, }, <span class=com># **** ADD ADDITIONAL COMPOSITE TAG DEFINITIONS HERE ****</span> }, ); <a name='xmp-xxx'><span class=com># This is a basic example of the definition for a new XMP namespace. # This table is referenced through a SubDirectory tag definition # in the %Image::ExifTool::UserDefined definition above. # The namespace prefix for these tags is 'xxx', which corresponds to # an ExifTool family 1 group name of 'XMP-xxx'.</span></a> %Image::ExifTool::UserDefined::xxx = ( GROUPS =&gt; { 0 =&gt; 'XMP', 1 =&gt; 'XMP-xxx', 2 =&gt; 'Image' }, NAMESPACE =&gt; { 'xxx' =&gt; 'http://ns.myname.com/xxx/1.0/' }, WRITABLE =&gt; 'string', <span class=com># Example 8. XMP-xxx:NewXMPxxxTag1</span> <span class=com># - replace "NewXMPxxxTag1" with your own tag name (eg. "MyTag")</span> NewXMPxxxTag1 =&gt; { Writable =&gt; 'lang-alt' }, <span class=com># Example 9. XMP-xxx:NewXMPxxxTag2</span> NewXMPxxxTag2 =&gt; { Groups =&gt; { 2 =&gt; 'Author' } }, <span class=com># Example 10. XMP-xxx:NewXMPxxxTag3</span> NewXMPxxxTag3 =&gt; { List =&gt; 'Bag' }, <span class=com># Example 11. XMP-xxx:NewXMPxxxStruct</span> <span class=com># - example structured XMP tag</span> NewXMPxxxStruct =&gt; { <span class=com># the "Struct" entry defines the structure fields</span> Struct =&gt; { <span class=com># optional namespace prefix and URI for structure fields # (required only if different than NAMESPACE above)</span> NAMESPACE =&gt; { 'test' =&gt; 'http://x.y.z/test/' }, <span class=com># optional structure name (used for warning messages only)</span> STRUCT_NAME =&gt; 'MyStruct', <span class=com># optional rdf:type property for the structure</span> TYPE =&gt; 'http://x.y.z/test/xystruct', <span class=com># structure fields (very similar to tag definitions)</span> X =&gt; { Writable =&gt; 'integer' }, Y =&gt; { Writable =&gt; 'integer' }, <span class=com># a nested structure...</span> Things =&gt; { List =&gt; 'Bag', Struct =&gt; { NAMESPACE =&gt; { thing =&gt; 'http://x.y.z/thing/' }, What =&gt; { }, Where =&gt; { }, }, }, }, List =&gt; 'Seq', <span class=com># structures may also be elements of a list</span> }, <span class=com> # Each field in the structure has an automatically-generated # corresponding flattened tag with an ID that is the concatenation # of the original structure tag ID and the field name (after # capitalizing the first letter of the field name if necessary). # The Name and/or Description of these flattened tags may be changed # if desired, but all other tag properties are taken from the # structure field definition. When this is done, the "Flat" flag # must also be set in the tag definition. For example:</span> NewXMPxxxStructX =&gt; { Name =&gt; 'SomeOtherName', Flat =&gt; 1 }, ); <span class=com># Adding a new MIE group requires a few extra definitions</span> use Image::ExifTool::MIE; %Image::ExifTool::UserDefined::MIETest = ( %Image::ExifTool::MIE::tableDefaults, <span class=com># default MIE table entries</span> GROUPS =&gt; { 0 =&gt; 'MIE', 1 =&gt; 'MIE-Test', 2 =&gt; 'Document' }, WRITE_GROUP =&gt; 'MIE-Test', <span class=com># Example 16. MIE-Test:NewMieTag2</span> NewMieTag2 =&gt; { }, <span class=com># new user-defined tag in MIE-Test group</span> ); <span class=com># A special 'Lenses' list can be defined to give priority to specific lenses # in the logic to determine a lens model for the Composite:LensID tag</span> @Image::ExifTool::UserDefined::Lenses = ( 'Sigma AF 10-20mm F4-5.6 EX DC', 'Tokina AF193-2 19-35mm f/3.5-4.5', ); <span class=com># User-defined file types to recognize</span> %Image::ExifTool::UserDefined::FileTypes = ( XXX =&gt; { <span class=com># &lt;-- the extension of the new file type (case insensitive)</span> <span class=com># BaseType specifies the format upon which this file is based. # If BaseType is defined, then the file will be fully supported, # and in this case the Magic pattern should not be defined</span> BaseType =&gt; 'TIFF', MIMEType =&gt; 'image/x-xxx', Description =&gt; 'My XXX file type', }, YYY =&gt; { <span class=com># without BaseType, the file will be recognized but not supported</span> Magic =&gt; '0123abcd', <span class=com># regular expression to match at start of file</span> MIMEType =&gt; 'application/test', Description =&gt; 'Test imaginary file type', }, ZZZ =&gt; { <span class=com># if neither BaseType nor Magic are defined, the file will be # recognized by extension only</span> Description =&gt; 'My ZZZ file type', }, ); <span class=com># Specify default ExifTool option values # (see the <a href="ExifTool.html#Options">Options function documentation</a> for available options)</span> %Image::ExifTool::UserDefined::Options = ( CoordFormat =&gt; '%.6f', <span class=com># change default GPS coordinate format</span> Duplicates =&gt; 1, <span class=com># make -a default for the exiftool app</span> GeoMaxHDOP =&gt; 4, <span class=com># ignore GPS fixes with HDOP &gt; 4</span> ); <span class=com>#------------------------------------------------------------------------------</span> 1; <span class=com>#end</span> </pre> <hr> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/data_members.html���������������������������������������������������������000644 �000765 �000024 �00000033265 12506524074 020656� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> <html> <head> <title>ExifTool Object Data Members</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class='up'>ExifTool Object Data Members</h2> <p>The following table lists the data members of the ExifTool object. (If this was C++, these would be documented next to the definitions in the header file, but this is Perl, so I couldn't do that...)</p> <p>Aside from the variables defined below, there may be other temporary variables added by individual modules. Temporary variables are identified by at least one lower case letter in their name, and are deleted automatically before reading or writing each new image. Make, Model and CameraType are temporary variables like this, but these three are special because they are initialized to an empty string instead of being deleted at the start of processing for each image, which allows them to be tested without having to check for an undefined value.</p> <blockquote><table class='norm'><tr><th>Name</th><th>Description</th></tr> <tr><td>ADD_DIRS</td><td>Hash of parent directories for each directory added during writing (Note: entry may exist but be undefined for top-level directory!)</td></tr> <tr><td>BASE</td><td>Absolute position of current image in containing file (for example, when processing JPEG image in FujiFilm RAF file)</td></tr> <tr><td>BOTH</td><td>Reference to HASH of ValueConv/PrintConv arrays, saved for tags when GetValue is called for 'Both' values, and used to avoid having to recalculate both values again (which speeds up building the Composite tags because often the same tag is Require'd by multiple Composite tags).</td></tr> <tr><td>CameraType</td><td>Camera type used for decoding some Olympus tags</td></tr> <tr><td>CHANGED</td><td>Number of tags changed during writing</td></tr> <tr><td>CHARSET</td><td>Lookup table for current Charset setting</td></tr> <tr><td>CHECK_WARN</td><td>Used to return CHECK_PROC warnings</td></tr> <tr><td>CUR_LANG</td><td>Hash reference for localized language lookup corresponding to current 'Lang' options setting.</td></tr> <tr><td>CUR_WRITE_GROUP</td><td>Current family 1 group while writing. Currently used only when writing QuickTime tracks.</td></tr> <tr><td>DEL_GROUP</td><td>Hash of groups to delete. Value is 1 to delete group completely, or 2 if tags were added back after deleting the group. May have a leading "-" if excluded from a delete.</td></tr> <tr><td>DEL_PREVIEW</td><td>Flag to delete preview from after JPEG EOI</td></tr> <tr><td>DemoteErrors</td><td>Errors are demoted to warnings and this count is incremented if non-zero to begin with</td></tr> <tr><td>DIR_COUNT</td><td>Hash reference for counters of various types of directorys (ICC, IPTC,...)</td></tr> <tr><td>DIR_NAME</td><td>Name of directory currently being processed</td></tr> <tr><td>DOC_COUNT</td><td>Number of top-level embedded sub-documents processed while extracting, or 0 if none were processed</td></tr> <tr><td>DOC_NUM</td><td>Current document number while extracting (0, '' or undef for the main document)</td></tr> <tr><td>DoneID3</td><td>Set to 1 if audio file was scanned for ID3, or 2 if there was an ID3v1 trailer found</td></tr> <tr><td>DROP_TAGS</td><td>Flag to exclude "Drop" tags when writing</td></tr> <tr><td>DUPL_TAG</td><td>Hash of last used tag key index numbers for each duplicate tag.</td></tr> <tr><td>EDIT_DIRS</td><td>Hash of parent directories for each directory edited during writing (Note: entry may exist but be undefined for top-level directory!)</td></tr> <tr><td>ESCAPE_PROC</td><td>Routine for XML or HTML escaping if Escape option is set</td></tr> <tr><td>EXCL_TAG_LOOKUP</td><td>Hash for looking up excluded tags (keys are lower case tag names)</td></tr> <tr><td>EXIF_DATA</td><td>EXIF data block (valid while reading from file)</td></tr> <tr><td>EXIF_POS</td><td>Position of EXIF data in file</td></tr> <tr><td>FILENAME</td><td>Name of input file while extracting (only if we opened it, '' otherwise)</td></tr> <tr><td>FILE_ORDER</td><td>Hash of numbers to give the sequence the tags were extracted from file, keyed by tag key</td></tr> <tr><td>FILE_EXT</td><td>File extension (JPG, PEF, AVI, etc...) May be undefined if file has no extension.</td></tr> <tr><td>FILE_SEQUENCE</td><td>File sequence number when extracting information</td></tr> <tr><td>FILE_TYPE</td><td>Root file format type (JPEG, TIFF, RIFF, etc...)</td></tr> <tr><td>FIRST_EXIF_POS</td><td>Position of first EXIF in file</td></tr> <tr><td>FOUND_TAGS</td><td>Found tags with proper case and order</td></tr> <tr><td>GLOBAL_TIME_OFFSET</td><td>Time offset hash for first shifted date/time value of GlobalTimeShift option</td></tr> <tr><td>HTML_DUMP</td><td>Reference to HtmlDump object when using HtmlDump feature</td></tr> <tr><td>INDENT</td><td>Indent string for verbose output</td></tr> <tr><td>IN_RESOURCE</td><td>Flag indicates we are processing the resource fork of a Mac OS file</td></tr> <tr><td>IO_TAG_LIST</td><td>List for output of requested tags in proper case and order</td></tr> <tr><td>LIST_TAGS</td><td>Hash of tag keys by tagInfo reference for active list-type tags. This hash is cleared at the start of processing for each directory. Not used during when writing.</td></tr> <tr><td>LOW_PRIORITY_DIR</td><td>Lookup based on directory name for directories where undefined Priority tags get set to Priority 0 (eg. PreviewIFD in all images, and IFD1 in JPEG images). This is equivalent to setting PRIORITY to 0 for the tag table only for a specific directory name.</td></tr> <tr><td>Make</td><td>Camera make set during reading and writing</td></tr> <tr><td>MAKER_NOTE_BYTE_ORDER</td><td>Byte order of extracted maker notes if extracted as a block.</td></tr> <tr><td>MAKER_NOTE_INFO</td><td>Used by Image::ExifTool::CanonRaw as temporary storage for maker note information when synthesizing maker notes from CRW file with the MakerNotes option.</td></tr> <tr><td>MAKER_NOTE_FIXUP</td><td>Fixup information for maker notes extracted with the MakerNotes option (unless MakerNotes option is 2). Used by SetNewValuesFromFile() to adjust offsets in maker note IFD</td></tr> <tr><td>Model</td><td>Camera model name set during reading and writing</td></tr> <tr><td>MOVED_KEY</td><td>Tag key of last tag replaced by a higher priority tag in a call to FoundTag().</td></tr> <tr><td>NEW_VALUE</td><td>Hash of new value information keyed by tag info reference. Elements of new value information hash are: <table class='clear'><tr><td>TagInfo</td><td>-</td><td>tag information reference</td></tr> <tr><td>DelValue</td><td>-</td><td>list of specific values to delete</td></tr> <tr><td>Value</td><td>-</td><td>list of values to add</td></tr> <tr valign='top'><td>IsCreating</td><td>-</td><td>must be set for the tag to be added, otherwise just changed if it already exists. A value of 2 will create a new tag if its group already exists, but won't add a new group</td></tr> <tr valign='top'><td>Next</td><td>-</td><td>reference to next new value hash in linked list if there is more than one new value hash (for writing to different groups) for this tagInfo</td></tr> <tr valign='top'><td>Save</td><td>-</td><td>flag set by call to SaveNewValues() if this value should be saved</td></tr> </table></td></tr> <tr><td>NewIPTCDigest</td><td>MD5 digest for most recently written IPTC data (undefined if IPTC doesn't exist or if it was deleted). Calculated only if a value of 'new' is being written/deleted to/from the Photoshop:IPTCDigest tag</td></tr> <tr><td>NO_LIST</td><td>Set if List tags shouldn't be accumulated into a list. Undefined to accumulate lists as usual, or 0 to accumulate lists in TAG_EXTRA "NoList" element (and set a TAG_EXTRA "NoListDel" flag for tags that wouldn't have been created).</td></tr> <tr><td>NO_STRUCT</td><td>Set if structures shouldn't be restored for this metadata. Used to avoid restoring structures for non-XMP (eg. XML) information.</td></tr> <tr><td>NO_STRUCT_WARN</td><td>Set if structures warnings should be ignored when rebuilding structures (for questionable XML).</td></tr> <tr><td>NO_UNKNOWN</td><td>Don't generate unknown tags automatically even if Unknown option is set</td></tr> <tr><td>NUM_FOUND</td><td>Number of tags found</td></tr> <tr><td>OldIPTCDigest</td><td>MD5 digest for original IPTC data (undefined if IPTC didn't exist). Calculated only if a value of 'old' is being written/deleted to/from the Photoshop:IPTCDigest tag</td></tr> <tr><td>OPTIONS</td><td>ExifTool options</td></tr> <tr><td>PATH</td><td>List reference to SubDirectory path. eg) [qw(JPEG APP13 Photoshop IPTC)]</td></tr> <tr><td>PDF_CAPTURE</td><td>Used by PDF module to store information when writing</td></tr> <tr><td>PreferredGroup</td><td>Preferred family 1 group for writing tags to the current file. Not defined to use the default group priorities. Set in call to InitWriteDirs().</td></tr> <tr><td>PREVIEW_INFO</td><td>Information about preview image used while writing JPEG images only. This is a reference to a hash with the following entries: <table class='clear'> <tr valign='top'><td>Absolute</td><td>-</td><td>flag set if PreviewImage pointer is relative to the start of file</td></tr> <tr><td>BaseShift</td><td>-</td><td>shift for base of pointer offsets</td></tr> <tr valign='top'><td>Data</td><td>-</td><td>data for PreviewImage to be written (may either be data for the old or new image, or 'LOAD_PREVIEW' to indicate that the data must be loaded from outside the EXIF segment)</td></tr> <tr><td>Fixup</td><td>-</td><td>[mandatory] fixup for PreviewImage pointers when writing JPEG images</td></tr> <tr valign='top'><td>IsShort</td><td>-</td><td>flag indicates PreviewImage pointers are 2-byte (instead of 4-byte) integers</td></tr> <tr valign='top'><td>IsTrailer</td><td>-</td><td>flag indicates image should always be written as a JPEG trailer, even if it fits inside the APP1 EXIF segment (as with Samsung STMN maker notes)</td></tr> <tr><td>Relative</td><td>-</td><td>flag to indicate that pointer offsets are relative</td></tr> </table></td></tr> <tr><td>PRIORITY</td><td>Hash of tag Priority values for current tag, keyed by tag name (not tag key!)</td></tr> <tr><td>PRIORITY_DIR</td><td>Name of priority directory (ie. the IFD for the full resolution image)</td></tr> <tr><td>PROCESSED</td><td>Reference to hash of address/directory names which were processed during reading and/or writing</td></tr> <tr><td>RAF</td><td>Random access file object for reading from input file</td></tr> <tr><td>RATIONAL</td><td>Hash of rational values as a string fraction keyed by tag key</td></tr> <tr><td>Recreated</td><td>Directories recreated when writing (used to prevent recreating multiple directories of the same type)</td></tr> <tr><td>REQUESTED_TAGS</td><td>List of requested tags in original case</td></tr> <tr><td>REQ_TAG_LOOKUP</td><td>Hash for looking up requested tags (keys are lower case tag names)</td></tr> <tr><td>SAVE_COUNT</td><td>Counts number of times SaveNewValues() has been called</td></tr> <tr><td>SAVE_DEL_GROUP</td><td>Hash of saved DEL_GROUP entries</td></tr> <tr><td>SAVE_NEW_VALUE</td><td>Hash of new value information which was overwritten after a call to SaveNewValues()</td></tr> <tr><td>SET_GROUP0</td><td>Value to use for family 0 group name when new tags are found</td></tr> <tr><td>SET_GROUP1</td><td>Value to use for family 1 group name when new tags are found. May start with a '+' sign to add to existing group name</td></tr> <tr><td>TAG_EXTRA</td><td>Hash of extra tag information keyed by tag key. Current extra information may include: <table class='clear'> <tr valign='top'><td>G0</td><td>-</td><td>override for family 0 group name</td></tr> <tr valign='top'><td>G1</td><td>-</td><td>dynamic family 1 group name (eg. IFD name or XMP namespace), with a leading '+' to add value to the existing group 1 name</td></tr> <tr valign='top'><td>G3</td><td>-</td><td>number for embedded documents (eg. 1, 2, etc)</td></tr> </table></td></tr> <tr><td>TAG_INFO</td><td>Hash of tagInfo hash references, keyed by tag key</td></tr> <tr><td>TAGS_FROM_FILE</td><td>Flag used during extraction when called from SetNewValuesFromFile(). Test this flag when extracting tags that are not normally extracted.</td></tr> <tr><td>TIFF_END</td><td>Location of end of regular TIFF file set by WriteExif()</td></tr> <tr><td>TIFF_TYPE</td><td>Type of TIFF data, only set if FILE_TYPE is TIFF. Valid values are APP1, APP3, TIFF, CR2, MRW, JP2, JPX, NEF, PEF, ORF, DNG, etc.</td></tr> <tr><td>VALUE</td><td>Hash of raw tag values keyed by tag key</td></tr> <tr><td>WARNED_ONCE</td><td>Hash of warning messages that have been issued once already</td></tr> <tr><td>WRITE_GROUPS</td><td>List of write groups in order of priority</td></tr> <tr><td>WRITE_PRIORITY</td><td>Hash of write priority values keyed by group name</td></tr> <tr><td>WRITTEN</td><td>Hash of tags written (currently used only for filesystem date/time tags)</td></tr> <tr><td>XMP_CAPTURE</td><td>Hash of tag information (value, attribute hash) keyed by XMP property path, used by XMP module during writing</td></tr> <tr><td>XMP_ERROR</td><td>Error string used by XMP module during writing</td></tr> <tr><td>XMP_NS</td><td>Hash of URI's keyed by namespace prefix, used by XMP module during writing to remember all used namespaces</td></tr> </table></blockquote> <hr> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/ExifTool.html�������������������������������������������������������������000644 �000765 �000024 �00000342171 12643772411 017765� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> <html> <head> <title>Image::ExifTool</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <style type="text/css"> <!-- pre { padding: 0; margin: 0px 2px } ul { margin-top: 0 } --> </style> </head> <body> <h1 class='up'>The Image::ExifTool Perl Library Module</h1> <h2>Description</h2> <p>The Image::ExifTool library provides a set of Perl modules to read and write meta information in a wide variety of image, audio, video and document files.</p> <hr><h2><a name="Methods">Methods</a></h2> <p>All ExifTool features are accessed through the methods of the public interface listed below. Other Image::ExifTool methods and modules should not be accessed directly because their interface may change with future versions.</p> <p>The ExifTool methods should never die or issue a warning to STDERR if called with the proper arguments (with the exception of <a href="#SetNewValue">SetNewValue</a> which may send an error message to STDERR, but only when called in scalar context). Error and warning messages that occur during processing are stored in the values of the Error and Warning tags, and are accessible via the <a href="#GetValue">GetValue</a> method to retrieve a single Error or Warning message, or <a href="#GetInfo">GetInfo</a> to retrieve any number of them.</p> <p>The ExifTool methods are not thread safe.</p> <table><tr><td valign=top> <ul> <li><a href="#ImageInfo">ImageInfo</a></li> <li><a href="#new">new</a></li> <li><a href="#Options">Options</a></li> <li><a href="#ClearOptions">ClearOptions</a></li> <li><a href="#ExtractInfo">ExtractInfo</a></li> <li><a href="#GetInfo">GetInfo</a></li> <li><a href="#WriteInfo">WriteInfo</a></li> <li><a href="#GetTagList">GetTagList</a></li> <li><a href="#GetFoundTags">GetFoundTags</a></li> <li><a href="#GetRequestedTags">GetRequestedTags</a></li> <li><a href="#GetValue">GetValue</a></li> <li><a href="#SetNewValue">SetNewValue</a></li> </ul> </td><td valign=top> <ul> <li><a href="#GetNewValue">GetNewValue</a></li> <li><a href="#SetNewValuesFromFile">SetNewValuesFromFile</a></li> <li><a href="#CountNewValues">CountNewValues</a></li> <li><a href="#SaveNewValues">SaveNewValues</a></li> <li><a href="#RestoreNewValues">RestoreNewValues</a></li> <li><a href="#SetFileModifyDate">SetFileModifyDate</a></li> <li><a href="#SetFileName">SetFileName</a></li> <li><a href="#SetNewGroups">SetNewGroups</a></li> <li><a href="#GetNewGroups">GetNewGroups</a></li> <li><a href="#GetTagID">GetTagID</a></li> <li><a href="#GetDescription">GetDescription</a></li> <li><a href="#GetGroup">GetGroup</a></li> </ul> </td><td valign=top> <ul> <li><a href="#GetGroups">GetGroups</a></li> <li><a href="#BuildCompositeTags">BuildCompositeTags</a></li> <li><a href="#GetTagName">GetTagName</a></li> <li><a href="#GetShortcuts">GetShortcuts</a></li> <li><a href="#GetAllTags">GetAllTags</a></li> <li><a href="#GetWritableTags">GetWritableTags</a></li> <li><a href="#GetAllGroups">GetAllGroups</a></li> <li><a href="#GetDeleteGroups">GetDeleteGroups</a></li> <li><a href="#GetFileType">GetFileType</a></li> <li><a href="#CanWrite">CanWrite</a></li> <li><a href="#CanCreate">CanCreate</a></li> <li><a href="#AddUserDefinedTags">AddUserDefinedTags</a></li> </ul> </td></tr></table> <hr><h2><a name="UsingExifTool">Using ExifTool</a></h2> <p>The ExifTool module may be used by simply calling the <a href="#ImageInfo">ImageInfo</a> function:</p> <blockquote><table class='box'><tr><td><pre> use Image::ExifTool qw(:Public); my $info = <a href="#ImageInfo">ImageInfo</a>('image.jpg'); </pre></td></tr></table></blockquote> <p>or in a more object-oriented fashion, by creating an ExifTool object:</p> <blockquote><table class='box'><tr><td><pre> use Image::ExifTool; my $exifTool = <a href="#new">new</a> Image::ExifTool; my $info = $exifTool-&gt;<a href="#ImageInfo">ImageInfo</a>('image.jpg'); </pre></td></tr></table></blockquote> <p>The object-oriented method allows more flexibility, but is slightly more complicated. You choose the method that you prefer.</p> <p>The $info value returned by <a href="#ImageInfo">ImageInfo</a> in the above examples is a reference to a hash containing the tag/value pairs. Here is a simplified example which prints out this information:</p> <blockquote><table class='box'><tr><td><pre> foreach (keys %$info) { print "$_ =&gt; $$info{$_}\n"; } </pre></td></tr></table></blockquote> <p>See <a href="#ImageInfo">ImageInfo</a> for a more detailed description of the info hash entries.</p> <p>And the technique for writing meta information is equally simple:</p> <blockquote><table class='box'><tr><td><pre> use Image::ExifTool; my $exifTool = <a href="#new">new</a> Image::ExifTool; $exifTool-&gt;<a href="#SetNewValue">SetNewValue</a>(Author =&gt; 'Phil Harvey'); $exifTool-&gt;<a href="#WriteInfo">WriteInfo</a>('image.jpg','modified_image.jpg'); </pre></td></tr></table></blockquote> <hr><h2><a name="Config">Configuration</a></h2> <p>User-defined tags can be added via the ExifTool configuration file, or by defining the %Image::ExifTool::UserDefined hash before calling any ExifTool functions. See "<a href="config.html">ExifTool_config</a>" in the ExifTool distribution for more details.</p> <p>By default ExifTool looks for a configuration file named ".ExifTool_config" first in your home directory, then in the directory of the application script, but a different directory may be specified by setting the EXIFTOOL_HOME environment variable, or a different file may be specified by setting the ExifTool "<code>configFile</code>" variable before using Image::ExifTool. For example:</p> <blockquote><table class='box'><tr><td><pre> BEGIN { $Image::ExifTool::configFile = '/Users/phil/myconfig.cfg' } use Image::ExifTool; </pre></td></tr></table></blockquote> <p>The configuration feature may also be disabled by setting "<code>configFile</code>" to an empty string:</p> <blockquote><table class='box'><tr><td><pre> BEGIN { $Image::ExifTool::configFile = '' } use Image::ExifTool; </pre></td></tr></table></blockquote> <hr><h2><a name="ImageInfo">ImageInfo</a></h2> <p>Read image file and return meta information. This is the one-step function for retrieving meta information from an image. Internally, <a href="#ImageInfo">ImageInfo</a> calls <a href="#ExtractInfo">ExtractInfo</a> to extract data from the image, <a href="#GetInfo">GetInfo</a> to generate the information hash, and <a href="#GetTagList">GetTagList</a> for the returned tag list.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>ImageInfo($;@)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> [<i>optional</i>] ExifTool object reference <br><b>1)</b> File name, file reference or scalar reference <br><b>2-N)</b> [<i>optional</i>] list of tag names to find (or tag list reference or options reference, see below) </td></tr> <tr><td valign=top><b>Returns</b></td><td>Reference to hash of tag key/value pairs</td></tr> </table></blockquote> <p><b>Examples:</b></p> <blockquote>Non object-oriented example showing use of options and returning tag list: <table class='box'><tr><td><pre> use Image::ExifTool qw(ImageInfo); my @ioTagList; my $info; $info = <b>ImageInfo</b>('image.jpg', \@ioTagList, {Sort =&gt; 'Group0'}); </pre></td></tr></table></blockquote> <blockquote>Object-oriented example to read from a file that is already open: <table class='box'><tr><td><pre> my $exifTool = <a href="#new">new</a> Image::ExifTool; $info = $exifTool-&gt;<b>ImageInfo</b>(\*FILE_PT, 'Aperture', 'ShutterSpeed', 'ISO'); </pre></td></tr></table></blockquote> <blockquote>Extract information from an image in memory: <table class='box'><tr><td><pre> $info = $exifTool-&gt;<b>ImageInfo</b>(\$imageData); </pre></td></tr></table></blockquote> <blockquote>Extract information from an embedded thumbnail image: <table class='box'><tr><td><pre> $info = <b>ImageInfo</b>('image.jpg', 'thumbnailimage'); my $thumbInfo = <b>ImageInfo</b>($$info{ThumbnailImage}); </pre></td></tr></table></blockquote> <blockquote>Using an ExifTool object to set the options before calling <a href="#ImageInfo">ImageInfo</a>: <table class='box'><tr><td><pre> my $filename = shift || die "Please specify filename\n"; my @ioTagList = qw(filename imagesize xmp:creator exif:* -ifd1:*); $exifTool-&gt;<a href="#Options">Options</a>(Unknown =&gt; 1, DateFormat =&gt; '%H:%M:%S %a. %b. %e, %Y'); $info = $exifTool-&gt;<b>ImageInfo</b>($filename, \@ioTagList); </pre></td></tr></table></blockquote> <p><b>Function Arguments:</b></p> <p><a href="#ImageInfo">ImageInfo</a> is very flexible about the arguments passed to it, and interprets them based on their type. It may be called with one or more arguments. The one required argument is either a SCALAR (the image file name), a file reference (a reference to the image file) or a SCALAR reference (a reference to the image in memory). Other arguments are optional. The order of the arguments is not significant, except that the first SCALAR is taken to be the file name unless a file reference or scalar reference comes earlier in the argument list.</p> <p>Below is a more detailed explanation of how the <a href="#ImageInfo">ImageInfo</a> function arguments are interpreted.</p> <blockquote><table class='norm'> <tr><td valign=top><b>ExifTool&nbsp;ref</b></td><td> <a href="#ImageInfo">ImageInfo</a> may be called with an ExifTool object if desired. Advantages of using the object-oriented form are that options may be set before calling <a href="#ImageInfo">ImageInfo</a>, and the object may be used afterward to access member functions. Must be the first argument if used. </td></tr><tr><td valign=top><b>SCALAR</b></td><td> The first scalar argument is taken to be the file name unless an earlier argument specified the image data via a file reference (file ref) or data reference (SCALAR ref). The remaining scalar arguments are names of tags for requested information. All tags are returned if no tags are specified. <br>&nbsp;<br> Tag names are case-insensitive and may be prefixed by optional group names separated by colons. A group name may begin with a family number (eg. '<code>1IPTC:Keywords</code>'), to restrict matches to a specific family. In the tag name, a '<code>?</code>' matches any single character and a '<code>*</code>' matches zero or more characters. Thus '<code>GROUP:*</code>' represents all tags in a specific group. Wildcards may not be used in group names, with the exception that a group name of '<code>*</code>' may be used to extract all available instances of a tag regardless of the <a href="#Duplicates">Duplicates</a> setting (eg. '<code>*:WhiteBalance</code>'). Multiple groups may be specified (eg. '<code>EXIF:Time:*</code>' extracts all EXIF Time tags). And finally, a leading '<code>-</code>' indicates a tag to be excluded (eg. '<code>-IFD1:*</code>'), or a trailing '<code>#</code>' causes the ValueConv value to be returned for this tag. <br>&nbsp;<br> Note that keys in the returned information hash and elements of the returned tag list are not necessarily the same as these tag names because group names are removed, the case may be changed, and an instance number may be added. For this reason it is best to use either the keys of the returned hash or the elements of the returned tag list when accessing the tag values. <br>&nbsp;<br> See the <a href="TagNames/index.html">TagNames</a> documentation for a complete list of ExifTool tag names. </td></tr><tr><td valign=top><b>File&nbsp;ref</b></td><td> A reference to an open image file. If you use this method (or a SCALAR reference) to access information in an image, the FileName and Directory tags will not be returned. (Also, the FileSize, FileModifyDate, FilePermissions and FileAttributes tags will not be returned unless it is a plain file.) Image processing begins at the current file position, and on return the file position is unspecified. May be either a standard filehandle or a reference to a File::RandomAccess object. <br>&nbsp;<br> [Advanced: To allow a non-rewindable stream (eg. a network socket) to be re-read after processing with ExifTool, first wrap the file reference in a File::RandomAccess object, then pass this object to <a href="#ImageInfo">ImageInfo</a>. The File::RandomAccess object will buffer the file if necessary, and may be used to re-read the file after <a href="#ImageInfo">ImageInfo</a> returns.] </td></tr><tr><td valign=top><b>SCALAR&nbsp;ref</b></td><td> A reference to image data in memory. </td></tr><tr><td valign=top><b>ARRAY&nbsp;ref</b></td><td> Reference to a list of tag names. On entry, any elements in the list are added to the list of requested tags. On return, this list is updated to contain an ordered list of tag keys for the returned information. <br>&nbsp;<br> There will be 1:1 correspondence between the requested tags and the returned tag keys only if the <a href="#Duplicates">Duplicates</a> option is 0 and <a href="#Sort">Sort</a> is 'Input'. (With <a href="#Duplicates">Duplicates</a> enabled, there may be more entries in the returned list of tag keys, and with other <a href="#Sort">Sort</a> settings the entries may not be in the same order as requested.) If a requested tag doesn't exist, a tag key is still generated, but the tag value is undefined. </td></tr><tr><td valign=top><b>HASH&nbsp;ref</b></td><td> Reference to a hash containing the options settings. See <a href="#Options">Options</a> documentation below for a list of available options. Options specified as arguments to <a href="#ImageInfo">ImageInfo</a> take precedence over <a href="#Options">Options</a> settings. </td></tr></table></blockquote> <p><b>Return Value:</b></p> <p><a href="#ImageInfo">ImageInfo</a> returns a reference to a hash of tag key/value pairs. The tag keys are identifiers, which are similar to the tag names but may have an appended instance number if multiple tags with the same name were extracted from the image. Many of the ExifTool functions require a tag key as an argument. Use <a href="#GetTagName">GetTagName</a> to get the tag name for a given tag key. Note that the case of the tag names may not be the same as requested.</p> <p>Values of the returned hash are usually simple scalars, but a scalar reference is used to indicate binary data and an array reference may be used to indicate a list. Also, a hash reference may be returned if the <a href="#Struct">Struct</a> option is used. Lists of values are joined by commas into a single string only if the PrintConv option is enabled and the List option is disabled (which are the defaults). Note that binary values are not necessarily extracted unless specifically requested, or the Binary option is enabled and the tag is not specifically excluded. If not extracted the value is a reference to a string of the form "<code>Binary data ##### bytes</code>".</p> <p>Here is a simple example to print out the information returned by <a href="#ImageInfo">ImageInfo</a>:</p> <blockquote><table class='box'><tr><td><pre> foreach (keys %$info) { my $val = $$info{$_}; if (ref $val eq 'ARRAY') { $val = join(', ', @$val); } elsif (ref $val eq 'SCALAR') { $val = '(Binary data)'; } printf("%-24s : %s\n", $_, $val); } </pre></td></tr></table></blockquote> <p>which gives output like this (PrintConv enabled):</p> <blockquote><table class='box'><tr><td><pre> WhiteBalance : Auto FNumber : 3.5 InteroperabilityOffset : 936 XResolution : 72 ISO : 100 ThumbnailImage : (Binary data) FlashOn : On Make : FUJIFILM ShutterSpeedValue : 1/64 ExposureCompensation : 0 Sharpness : Soft ResolutionUnit : inches </pre></td></tr></table></blockquote> <p><b>Notes:</b></p> <p>ExifTool returns all values as byte strings of encoded characters. Perl wide characters are not used. See <a href="faq.html#Q10">FAQ number 10</a> for details about the encodings. By default, most returned strings are encoded in UTF-8. For these, Encode::decode_utf8() may be used to convert to a sequence of logical Perl characters.</p> <p>As well as tags representing information extracted from the image, the following <a href="TagNames/Extra.html">Extra tags</a> generated by ExifTool may be returned:</p> <blockquote><table class='norm'> <tr><td><b>ExifToolVersion</b></td><td>The ExifTool version number</td></tr> <tr><td><b>Error</b></td><td>An error message if the image could not be processed</td></tr> <tr><td><b>Warning</b></td><td>A warning message if problems were encountered while processing the image</td></tr> </table></blockquote> <hr><h2><a name="new">new</a></h2> <p>Create a new ExifTool object.</p> <p><b>Example:</b></p> <blockquote><table class='box'><tr><td><pre> my $exifTool = <b>new</b> Image::ExifTool; </pre></td></tr></table></blockquote> <p>Note that ExifTool uses AUTOLOAD to load non-member methods, so any class using Image::ExifTool as a base class must define an AUTOLOAD which calls Image::ExifTool::DoAutoLoad(). ie)</p> <blockquote><table class='box'><tr><td><pre> sub AUTOLOAD { Image::ExifTool::DoAutoLoad($AUTOLOAD, @_); } </pre></td></tr></table></blockquote> <hr><table bgcolor='#aaffaa' width='100%' cellpadding=8><tr><td><center><b> The following functions require an ExifTool object as the first argument </b></center></td></tr></table> <hr><h2><a name='options'></a><a name="Options">Options</a></h2> <p>Get/set ExifTool options. This function can be called to set the default options for an ExifTool object. Options set this way are in effect for all function calls but may be overridden by options passed as arguments to some functions. Option names are not case sensitive.</p> <p>The default option values may be changed by defining a %Image::ExifTool::UserDefined::Options hash. See the <a href="config.html">ExifTool_config file</a> in the full ExifTool distribution for examples.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>Options($$;@)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1)</b> Parameter name (case-insensitive, see table below) <br><b>2)</b> [<i>optional</i>] Option value if specified (may be undef to clear option) <br><b>3-N)</b> [<i>optional</i>] Additional parameter/value pairs </td></tr> <tr><td valign=top><b>Returns</b></td><td>Previous value of last specified parameter</td></tr> </table></blockquote> <p><b>Available options:</b></p> <blockquote> <table class='norm'> <tr><th colspan=4 bgcolor='#dddddd'><font size='+1'>ExifTool Options</font></th></tr> <tr><th>Option</th><th>Description</th><th>Values</th><th>Default</th></tr> <tr><td>Binary</td><td><a name="Binary"></a>Flag to extract the value data for all binary tags. Tag values representing large binary data blocks (eg. ThumbnailImage) are not necessarily extracted unless this option is set or the tag is specifically requested by name.</td> <td align=center>0 or 1</td><td align=center>undef</td></tr> <tr><td>ByteOrder</td><td><a name="ByteOrder"></a>The byte order for newly created EXIF segments when writing. Note that if EXIF information already exists, the existing order is maintained. If ByteOrder is not defined, then the order of the maker notes is used (if they are being copied), otherwise big-endian ('MM') order is assumed. This can also be set via the <a href="TagNames/Extra.html">ExifByteOrder tag</a>, but the ByteOrder option takes precedence if both are set.</td> <td align=center>'MM','II' or undef</td><td align=center>undef</td></tr> <tr><td>Charset</td><td>Character set for encoding character strings passed to/from ExifTool containing code points above U+007F. Note that this option affects some types of information when reading/writing the file and other types when getting/setting tag values, so it must be defined for both types of access. Charset values listed to the right have aliases which are given in brackets. Case is not significant. See <a href="faq.html#Q10">FAQ #10</a> for more information about character sets.</td> <td align=center><a name="Charset"></a><table class=clear> <tr><td valign=top align=right>UTF8</td><td>(cp65001, UTF-8)</td></tr> <tr><td valign=top align=right>Latin</td><td>(cp1252, Latin1)</td></tr> <tr><td valign=top align=right>Latin2</td><td>(cp1250)</td></tr> <tr><td valign=top align=right>Cyrillic</td><td>(cp1251, Russian)</td></tr> <tr><td valign=top align=right>Greek</td><td>(cp1253)</td></tr> <tr><td valign=top align=right>Turkish</td><td>(cp1254)</td></tr> <tr><td valign=top align=right>Hebrew</td><td>(cp1255)</td></tr> <tr><td valign=top align=right>Arabic</td><td>(cp1256)</td></tr> <tr><td valign=top align=right>Baltic</td><td>(cp1257)</td></tr> <tr><td valign=top align=right>Vietnam</td><td>(cp1258)</td></tr> <tr><td valign=top align=right>Thai</td><td>(cp874)</td></tr> <tr><td valign=top align=right>MacRoman</td><td>(cp10000, Mac, Roman)</td></tr> <tr><td valign=top align=right>MacLatin2</td><td>(cp10029)</td></tr> <tr><td valign=top align=right>MacCyrillic</td><td>(cp10007)</td></tr> <tr><td valign=top align=right>MacGreek</td><td>(cp10006)</td></tr> <tr><td valign=top align=right>MacTurkish</td><td>(cp10081)</td></tr> <tr><td valign=top align=right>MacRomanian</td><td>(cp10010)</td></tr> <tr><td valign=top align=right>MacIceland</td><td>(cp10079)</td></tr> <tr><td valign=top align=right>MacCroatian</td><td>(cp10082)</td></tr> </table></td><td align=center>'UTF8'</td></tr> <tr><td>CharsetEXIF</td><td><a name="CharsetEXIF"></a>Internal encoding to use for stored EXIF "ASCII" string values. May also be set to undef to pass through EXIF "ASCII" values without recoding. Set to "UTF8" to conform with the MWG recommendation.</td> <td align=center><i>(see <a href="#Charset">Charset</a> option)</i><br>or undef</td><td align=center>undef</td></tr> <tr><td>CharsetFileName</td><td><a name="CharsetFileName"></a>External character set used when specifying file names. When set in Windows, this triggers use of Windows Unicode file library routines (requires Win32API::File).</td> <td align=center><i>(see <a href="#Charset">Charset</a> option)</i><br>or undef</td><td align=center>undef</td></tr> <tr><td>CharsetID3</td><td><a name="CharsetID3"></a>Internal encoding to assume for ID3v1 strings. By the specification ID3v1 strings should be encoded in ISO 8859-1 (essentially 'Latin'), but some applications may use local encoding instead. This option allows different encodings to be specified.</td> <td align=center><i>(see <a href="#Charset">Charset</a> option)</i></td><td align=center>'Latin'</td></tr> <tr><td>CharsetIPTC</td><td><a name="CharsetIPTC"></a>Fallback internal IPTC character set to assume if IPTC information contains no CodedCharacterSet tag.</td> <td align=center><i>(see <a href="#Charset">Charset</a> option)</i></td><td align=center>'Latin'</td></tr> <tr><td>CharsetPhotoshop</td><td><a name="CharsetPhotoshop"></a>Internal encoding to assume for Photoshop IRB resource names.</td> <td align=center><i>(see <a href="#Charset">Charset</a> option)</i></td><td align=center>'Latin'</td></tr> <tr><td>CharsetQuickTime</td><td><a name="CharsetQuickTime"></a>Internal encoding to assume for QuickTime strings stored with an unspecified encoding.</td> <td align=center><i>(see <a href="#Charset">Charset</a> option)</i></td><td align=center>'MacRoman'</td></tr> <tr><td>Compact</td><td><a name="Compact"></a>Flag to write compact output. The XMP specification suggests that the data be padded with blanks to allow in-place editing. With this flag set the 2kB of padding is not written. Note that this only effects embedded XMP since padding is never written for stand-alone XMP files.</td> <td align=center>0 or 1</td><td align=center>undef</td></tr> <tr><td>Composite</td><td><a name="Composite"></a>Flag to generate Composite tags when extracting information.</td> <td align=center>0 or 1</td><td align=center>1</td></tr> <tr><td>Compress</td><td><a name="Compress"></a>Flag to write new values in compressed format if possible. Has no effect unless Compress::Zlib is installed.</td> <td align=center>0 or 1</td><td align=center>undef</td></tr> <tr><td>CoordFormat</td><td><a name="CoordFormat"></a>Specify output format for GPS coordinates.</td> <td>A printf-style format string with specifiers for degrees, minutes and seconds in that order, however minutes and seconds may be omitted. If the hemisphere is known, a reference direction (N, S, E or W) is appended to each printed coordinate, but adding a '<code>+</code>' to the first format specifier (eg. <code>'%+.6f'</code>) prints a signed coordinate instead. The default for reading is equivalent to a format string of <code>q{%d&nbsp;deg&nbsp;%d'&nbsp;%.2f"}</code>, but to avoid a loss of precision the default for copying tags with <a href="#SetNewValuesFromFile">SetNewValuesFromFile</a> is <code>q{%d&nbsp;%d&nbsp;%.8f}</code>. </td><td align=center>undef</td></tr> <tr><td>DateFormat</td><td><a name="DateFormat"></a>Output format for date/time values. If date can not be converted, value is left unchanged unless the StrictDate option is set. Timezones are ignored.</td> <td>See strftime manpage for details. The default is similar to a format string of <code>"%Y:%m:%d %H:%M:%S"</code>.</td> <td align=center>undef</td></tr> <tr><td>Duplicates</td><td><a name="Duplicates"></a>Flag to return values from tags with duplicate names when extracting information.</td> <td align=center>0 or 1</td><td align=center>1</td></tr> <tr><td>Escape</td> <td><a name="Escape"></a>Escape special characters in extracted values for HTML or XML. Also unescapes HTML or XML character entities in input values passed to <a href="#SetNewValue">SetNewValue</a>.</td> <td align=center>HTML, XML or undef</td> <td align=center>undef</td></tr> <tr><td>Exclude</td> <td>Exclude specified tags when extracting information.</td> <td><a name="Exclude"></a>Tag name or reference to a list of tag names to exclude. Case is not significant. Tags may also be excluded by preceding their name with a '-' in the arguments to ImageInfo.</td> <td align=center>undef</td></tr> <tr><td>ExtendedXMP</td><td><a name="ExtendedXMP"></a>This setting affects the reading and editing of extended XMP in JPEG images. According to the XMP specification, extended XMP is only valid if it has the GUID specified by the <a href="TagNames/XMP.html#xmpNote">HasExtendedXMP tag</a>. ExifTool 9.95 and earlier would read extended XMP regardless of GUID, but with the addition of this option in version 9.96 the default behaviour was changed to conform with the XMP specification (to read only extended XMP with the proper GUID). This option should be set to 2 to emulate pre-9.96 behaviour and read all extended XMP. It may also be set to a GUID to read a specific extended XMP, or 0 to ignore extended XMP entirely.</td> <td><table class=clear> <tr><td valign=top align=right><b>0</b>&nbsp;=</td><td>ignore extended XMP</td></tr> <tr><td valign=top align=right><b>1</b>&nbsp;=</td><td>valid GUID only</td></tr> <tr><td valign=top align=right><b>2</b>&nbsp;=</td><td>any GUID</td></tr> <tr><td valign=top align=right><i>guid</i>&nbsp;=</td><td>specific GUID</td></tr> </table></td><td align=center>1</td></tr> <tr><td>ExtractEmbedded</td> <td><a name="Embedded"></a>Flag to extract information from embedded documents in EPS files, embedded EPS information and JPEG and Jpeg2000 images in PDF files, embedded MPF images in JPEG and MPO files, streaming metadata in AVCHD videos, and the resource fork of Mac OS files.</td> <td align=center>0 or 1</td><td align=center>undef</td></tr> <tr><td>FastScan</td> <td><a name="FastScan"></a>Flag to increase speed of extracting information from JPEG images. With this option set to 1, ExifTool will not scan to the end of a JPEG image to check for an AFCP, CanonVRD, FotoStation, PhotoMechanic, MIE or PreviewImage trailer. This also stops the parsing after the first comment in GIF images, and at the audio/video data with RIFF-format files (AVI, WAV, etc), so any trailing metadata (ie.eg. XMP written by some utilities) may be missed. When combined with the ScanForXMP option, prevents scanning for XMP in recognized file types. With a value of 2, ExifTool will also avoid extracting any EXIF MakerNote information. When set to 3, the file is not actually parsed, and only an initial guess at FileType and some pseudo tags are returned. </td> <td align=center>0, 1, 2 or 3</td><td align=center>undef</td></tr> <tr><td>Filter</td> <td>Perl expression used to filter all returned tag values. Applies to PrintConv values only.</td><td><a name="Filter"></a>Expression to act on the value of the Perl default variable ($_), changing the value of this variable as required</td> <td align=center>undef</td></tr> <tr><td>FixBase</td> <td>Fix maker notes base offset. Allows values to be extracted from maker notes which have been corrupted by editing with 3rd party software.</td> <td><a name="FixBase"></a>An integer specifying a value to be added to the maker notes base offset, or the empty string ('') for ExifTool to take its best guess at the correct base.</td> <td align=center>undef</td></tr> <tr><td>GeoMaxIntSecs</td> <td><a name="GeoMaxIntSecs"></a>Maximum interpolation time in seconds for geotagging. Geotagging is treated as an extrapolation if the Geotime value lies between two fixes in the same track which are separated by a number of seconds greater than this. Otherwise, the coordinates are calculated as a linear interpolation between the nearest fixes on either side of the Geotime value. Set to 0 to disable interpolation and use the coordinates of the nearest fix instead (provided it is within GeoMaxExtSecs, otherwise geotagging fails).</td> <td align=center>A floating point number</td> <td align=center>1800</td></tr> <tr><td>GeoMaxExtSecs</td> <td><a name="GeoMaxExtSecs"></a>Maximum extrapolation time in seconds for geotagging. Geotagging fails if the Geotime value lies outside a GPS track by a number of seconds greater than this. Otherwise, the coordinates of the nearest fix are taken.</td> <td align=center>A floating point number</td> <td align=center>1800</td></tr> <tr><td>GeoMaxHDOP</td> <td><a name="GeoMaxHDOP"></a>Maximum Horizontal (2D) Dilution Of Precision for geotagging. GPS fixes are ignored if the HDOP is greater than this.</td> <td align=center>A floating point number, or undef</td> <td align=center>undef</td></tr> <tr><td>GeoMaxPDOP</td> <td><a name="GeoMaxPDOP"></a>Maximum Position (3D) Dilution Of Precision for geotagging. GPS fixes are ignored if the PDOP is greater than this.</td> <td align=center>A floating point number, or undef</td> <td align=center>undef</td></tr> <tr><td>GeoMinSats</td> <td><a name="GeoMinSats"></a>Minimum number of satellites for geotagging. GPS fixes are ignored if the number of acquired satellites is less than this.</td> <td align=center>A positive integer, or undef</td> <td align=center>undef</td></tr> <tr><td>GlobalTimeShift</td> <td><a name="GlobalTimeShift"></a>Time shift to apply to all extracted date/time PrintConv values. Does not affect ValueConv values.</td> <td align=center>Date/time shift string with leading '-' for negative shifts<br>(see <a href="Shift.html">Image::ExifTool::Shift.pl</a>)</td> <td align=center>undef</td></tr> <tr><td>Group#</td><td>Extract tags only for specified groups in family # (Group0 assumed if # not given).</td> <td><a name="Group"></a>Group name or reference to list of group names. Group name may begin with '-' to exclude a group. Case IS significant. See <a href="#GetGroup">GetGroup</a> for a description of group families, and <a href="#GetAllGroups">GetAllGroups</a> for a list of available groups.</td> <td align=center>undef</td></tr> <tr><td>HtmlDump</td><td>Dump information in hex to a dynamic HTML web page. Option value sets a limit on the maximum block size. Output file is specified by the TextOut option.</td> <td><a name="HtmlDump"></a><table class=clear> <tr><td valign=top align=center><b>0</b>&nbsp;=</td><td>No HTML dump</td></tr> <tr><td valign=top align=center><b>1</b>&nbsp;=</td><td>1 KB size limit</td></tr> <tr><td valign=top align=center><b>2</b>&nbsp;=</td><td>16 KB size limit</td></tr> <tr><td valign=top align=center><b>3</b>&nbsp;=</td><td>Full dump</td></tr> </table></td><td align=center>0</td></tr> <tr><td>HtmlDumpBase</td><td><a name="HtmlDumpBase"></a>Base for HTML dump offsets. If not defined, the EXIF/TIFF base offset is used.</td> <td><table class=clear> <tr><td valign=top align=right><b>0</b>&nbsp;=</td><td>Absolute offsets</td></tr> <tr><td valign=top align=right><i>non&#8209;zero</i>&nbsp;=</td><td>Relative offsets</td></tr> <tr><td valign=top align=right><b>undef</b>&nbsp;=</td><td>EXIF/TIFF offsets</td></tr> </table></td><td align=center>undef</td></tr> <tr><td>IgnoreMinorErrors</td><td><a name="IgnoreMinorErrors"></a>Flag to ignore minor errors. Causes minor errors to be downgraded to warnings, and minor warnings to be ignored. This option is provided mainly to allow writing of files when minor errors occur, but by ignoring some minor warnings the behaviour of ExifTool may be changed to allow some questionable operations to proceed (such as extracting thumbnail and preview images even if they don't have a recognizable header). Minor errors/warnings are denoted by "[minor]" at the start of the message, or "[Minor]" (with a capital "M") for warnings that affect processing when ignored.</td> <td align=center>0 or 1</td><td align=center>undef</td></tr> <tr><td>Lang</td><td><a name="Lang"></a>Localized language for exiftool tag descriptions, etc. If the specified language isn't available, the option is not changed. May be set to undef to select the built-in default language.</td> <td align=left>Image::ExifTool::Lang module name (eg. 'fr', 'zh_cn'), or 'en' or undef for the default language.</td> <td align=center>'en'</td></tr> <tr><td>LargeFileSupport</td><td><a name="LargeFileSupport"></a>Flag to indicate that 64-bit file offsets are supported on this system.</td> <td align=center>0 or 1</td><td align=center>undef</td></tr> <tr><td>List</td><td><a name="List"></a>Flag to extract lists of PrintConv values into arrays instead of combining them into a string of values.</td><td align=center>0 or 1</td><td align=center>undef</td></tr> <tr><td>ListItem</td><td><a name="ListItem"></a>Return only a specific item from List-type values. A value of 0 returns the first item in each list, 1 returns the second item, etc. Negative indices may also be used, with -1 representing the last item in the list. Applies only to the top-level list of nested lists.</td> <td align=center>An integer, or undef</td><td align=center>undef</td></tr> <tr><td>ListSep</td><td><a name="ListSep"></a>Separator string used to join lists of PrintConv values when List option is not set.</td><td align=center>Any string</td><td align=center>', '</td></tr> <tr><td>ListSplit</td><td><a name="ListSplit"></a>Regular expression used to split values of list-type tags into individual items when writing. (eg. use ',\\s*' to split a comma-separated list)</td> <td align=center>A regular expression pattern</td><td align=center>undef</td></tr> <tr><td>MakerNotes</td><td><a name="MakerNotes"></a>Option to extract MakerNotes and other writable subdirectories (such as PrintIM) as a data block. Normally when the MakerNotes are extracted they are rebuilt to include data outside the boundaries of the original maker note data block, but a value of 2 disables this feature.</td> <td><table class=clear> <tr><td valign=top align=center><b>0</b>&nbsp;=</td><td>Don't extract writable subdirectories</td></tr> <tr><td valign=top align=center><b>1</b>&nbsp;=</td><td>Extract and rebuild makernotes into self-contained block</td></tr> <tr><td valign=top align=center><b>2</b>&nbsp;=</td><td>Extract without rebuilding makernotes</td></tr> </table></td><td align=center>undef</td></tr> <tr><td>MDItemTags</td><td><a name="MDItemTags"></a>Flag to extract the OS X metadata item tags (see the "mdls" man page for details).</td> <td align=center>0 or 1</td><td align=center>undef</td></tr> <tr><td>MissingTagValue</td><td><a name="MissingTagValue"></a>Value for missing tags in expressions evaluated by <a href="#SetNewValuesFromFile">SetNewValuesFromFile</a>. If not set, a minor error is issued for missing values, or the value is set to '' if IgnoreMinorErrors is set.</td> <td align=center>Any string, or undef</td><td align=center>undef</td></tr> <tr><td>NoPDFList</td><td><a name="NoPDFList"></a>Flag to avoid splitting PDF List-type tag values into separate items.</td> <td align=center>0 or 1</td><td align=center>undef</td></tr> <tr><td>Password</td><td><a name="Password"></a><a name="Passwd"></a>Password for reading/writing password-protected PDF documents. Ignored if a password is not required. Character encoding of the password is determined by the value of the Charset option at processing time.</td> <td align=center>Any string</td><td align=center>undef</td></tr> <tr><td>PNGEarlyXMP</td><td><a name="PNGEarlyXMP"></a>Flag to write XMP in PNG images before the IDAT (image data) chunk. By default, ExifTool adds new XMP to the end of a PNG file (just before IEND). This is allowed by the PNG and XMP specifications, but some utilities seem to ignore XMP if it comes after the image data. The PNGEarlyXMP option causes ExifTool to instead add new XMP before the PNG IDAT chunk. However, since ExifTool uses a single-pass writing algorithm, it has no way to tell if XMP already exists later in the file before writing the new XMP in this location. If this happens, a minor error is issued when the extra XMP is encountered, and the file is not written. Adding the <a href="#IgnoreMinorErrors">IgnoreMinorErrors</a> option causes the XMP after IDAT to be deleted, thus resolving the conflict (at the expense of possible metadata loss), and allowing the file to be written. The PNGEarlyXMP option is applied automatically when deleting all XMP and writing new XMP back in one step. When reading, this option causes a warning to be issued if standard XMP is found after the IDAT chunk.</td> <td align=center>0 or 1</td><td align=center>undef</td></tr> <tr><td>PrintConv</td><td><a name="PrintConv"></a>Flag to enable print conversion. Also enables inverse print conversion for writing.</td><td align=center>0 or 1</td><td align=center>1</td></tr> <tr><td>QuickTimeUTC</td><td><a name="QuickTimeUTC"></a>Flag set to assume that QuickTime date/time values are stored as UTC, causing conversion to local time when they are extracted. According to the QuickTime specification date/time values should be UTC, but many digital cameras store local time instead (presumably because they don't know the time zone). This option also disables the autodetection of incorrect time-zero offsets in QuickTime date/time values, and enforces a time zero of 1904 as per the QuickTime specification.</td><td align=center>0 or 1</td><td align=center>undef</td></tr> <tr><td>RequestAll</td><td><a name="RequestAll"></a>Flag to request all tags to be extracted. This causes some tags to be generated which normally would not be unless specifically requested (by passing the tag name to <a href="#ImageInfo">ImageInfo</a> or <a href="#ExtractInfo">ExtractInfo</a>). Note that this flag is set automatically during a call to <a href="#SetNewValuesFromFile">SetNewValuesFromFile</a> to make all tags available for copying.</td><td align=center>0 or 1</td><td align=center>undef</td></tr> <tr><td>RequestTags</td><td><a name="RequestTags"></a>List of additional tags to request in next call to <a href="#ExtractInfo">ExtractInfo</a>. This option is useful only for tags which aren't extracted unless specifically requested.</td><td>List reference, delimited string of tag names (any delimiter is allowed), or undef to clear the previous RequestTags list. Case is not significant.</td><td align=center>undef</td></tr> <tr><td>ScanForXMP</td><td><a name="ScanForXMP"></a>Flag to scan all files (even unrecognized formats) for XMP information unless XMP was already found in the file. When combined with the FastScan option, only unrecognized file types are scanned for XMP. </td><td align=center>0 or 1</td><td align=center>undef</td></tr> <tr><td>Sort</td><td>Specifies order to sort tags in the returned tag list.</td> <td><a name="Sort"></a><table class=clear> <tr><td valign=top align=right><b>Input</b>&nbsp;=</td><td>Sort in same order as input tag arguments</td></tr> <tr><td valign=top align=right><b>File</b>&nbsp;=</td><td>Sort in order that tags were found in the file</td></tr> <tr><td valign=top align=right><b>Tag</b>&nbsp;=</td><td>Sort alphabetically by tag name</td></tr> <tr><td valign=top align=right><b>Descr</b>&nbsp;=</td><td>Sort by tag description (with current Lang setting)</td></tr> <tr valign=top><td valign=top align=right><b>Group#</b>&nbsp;=</td><td>Sort by tag group, where # is zero or more family numbers separated by colons. If # is not specified, Group0 is assumed. See <a href="#GetGroup">GetGroup</a> for a description of group families.</td></tr> </table></td><td align=center>'Input'</td></tr> <tr><td>Sort2</td><td>Secondary sort order used for tags within each group when Sort is 'Group'.</td> <td><a name="Sort2"></a><table class=clear> <tr><td valign=top align=right><b>File</b>&nbsp;=</td><td>Sort in order that tags were found in the file</td></tr> <tr><td valign=top align=right><b>Tag</b>&nbsp;=</td><td>Sort alphabetically by tag name</td></tr> <tr><td valign=top align=right><b>Descr</b>&nbsp;=</td><td>Sort by tag description (with current Lang setting)</td></tr> </table></td><td align=center>'File'</td></tr> <tr><td>StrictDate</td><td><a name="StrictDate"></a>Flag to return undefined value for any date which can't be converted when the DateFormat option is used.</td> <td align=center>0 or 1</td><td align=center>undef</td></tr> <tr><td>Struct</td><td>Flag to return XMP structures as HASH references instead of flattening into individual tags. This setting has no effect when writing since both flattened or structured tags may always be written. See the <a href="struct.html">Structured Information documentation</a> for more details about structured information.</td> <td><a name="Struct"></a><table class=clear> <tr><td valign=top align=right><b>undef</b>&nbsp;=</td><td>Same as 0 for reading and 2 for copying</td></tr> <tr><td valign=top align=right><b>0</b>&nbsp;=</td><td>Read/copy flattened tags</td></tr> <tr><td valign=top align=right><b>1</b>&nbsp;=</td><td>Read/copy structures</td></tr> <tr><td valign=top align=right><b>2</b>&nbsp;=</td><td>Read/copy both flattened and structured tags, but flag flattened tags as "unsafe" for copying</td></tr> </table></td><td align=center>undef</td></tr> <tr><td>SystemTags</td><td><a name="SystemTags"></a>Flag to extract the following additional File System tags: FileAttributes, FileDeviceNumber, FileInodeNumber, FileHardLinks, FileUserID, FileGroupID, FileDeviceID, FileBlockSize and FileBlockCount.</td> <td align=center>0 or 1</td><td align=center>undef</td></tr> <tr><td>TextOut</td><td><a name="TextOut"></a>Output file for Verbose and HtmlDump options.</td> <td align=center>File reference</td><td align=center>\*STDOUT</td></tr> <tr><td>Unknown</td><td><a name="Unknown"></a>Control extraction of unknown tags.</td> <td><table class=clear> <tr><td valign=top align=center><b>0</b>&nbsp;=</td><td>Unknown tags not extracted</td></tr> <tr><td valign=top align=center><b>1</b>&nbsp;=</td><td>Unknown tags are extracted from EXIF (and other tagged-format) directories</td></tr> <tr><td valign=top align=center><b>2</b>&nbsp;=</td><td>Unknown tags also extracted from binary data blocks</td></tr> </table></td><td align=center>0</td></tr> <tr><td>UserParam</td><td><a name="UserParam"></a>Special option to set/get user-defined parameters. Useful to allow external input into tag name expressions and ValueConv logic. <i>PARAM</i> is the user-defined parameter name (case insensitive). These parameters may be accessed in tag name expressions by prefixing the parameter name with a dollar sign, just like normal tags. If called without a parameter name, <code>Options('UserParam')</code> returns a reference to the hash of all user parameters (with lower-case names). </td> <td><table class=clear> <tr><td valign=top><i>PARAM</i></td><td>- Get parameter</td></tr> <tr><td valign=top><i>PARAM=</i></td><td>- Clear parameter</td></tr></table> <table class=clear> <tr><td valign=top><i>PARAM=VALUE</i></td><td>- Set parameter</td></tr> </table></td><td align=center>{ }</td></tr> <tr><td>Verbose</td><td>Print verbose messages to file specified by TextOut option. <a href="verbose.html">Click here</a> for example outputs.</td> <td><a name="Verbose"></a><table class=clear> <tr><td valign=top align=center><b>0</b>&nbsp;=</td><td>No verbose messages</td></tr> <tr><td valign=top align=center><b>1</b>&nbsp;=</td><td>Print tag names and raw values</td></tr> <tr><td valign=top align=center><b>2</b>&nbsp;=</td><td>Add additional tag details</td></tr> <tr><td valign=top align=center><b>3</b>&nbsp;=</td><td>Add hex dump of tag data (with length limits)</td></tr> <tr><td valign=top align=center><b>4</b>&nbsp;=</td><td>Remove length limit on dump of tag values</td></tr> <tr><td valign=top align=center><b>5</b>&nbsp;=</td><td>Remove length limit on dump of JPEG segments</td></tr> </table></td><td align=center>0</td></tr> <tr><td>WriteMode</td><td>Set tag write/create mode.</td> <td><a name="WriteMode"></a>A string with one or more of these characters:<table class=clear> <tr><td valign=top align=center><b>w</b>&nbsp;=</td><td><b>W</b>rite existing tags</td></tr> <tr><td valign=top align=center><b>c</b>&nbsp;=</td><td><b>C</b>reate new tags</td></tr> <tr><td valign=top align=center><b>g</b>&nbsp;=</td><td>Create new <b>g</b>roups <sup>&dagger;</sup></td></tr> </table></td><td align=center>'wcg'</td></tr> <tr><td>XMPAutoConv</td><td><a name="XMPAutoConv"></a>Flag to enable automatic conversion for unknown XMP tags with values that look like rational numbers or dates.</td> <td align=center>0 or 1</td> <td align=center>1</td></tr> </table></blockquote> <blockquote><table><tr><td valign=top><sup>&dagger;</sup></td><td>The level of the group differs for different types of metadata. For XMP or IPTC this is the full XMP/IPTC block (the family 0 group), but for EXIF this is the individual IFD (the family 1 group).</td></tr></table></blockquote> <p><b>Examples:</b></p> <blockquote><table class='box'><tr><td><pre> <span class=com># exclude the 'OwnerName' tag from returned information</span> $exifTool-&gt;<b>Options</b>(Exclude =&gt; 'OwnerName'); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># only get information in EXIF or MakerNotes groups</span> $exifTool-&gt;<b>Options</b>(Group0 =&gt; ['EXIF', 'MakerNotes']); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># ignore information from IFD1</span> $exifTool-&gt;<b>Options</b>(Group1 =&gt; '-IFD1'); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># sort by groups in family 2, and extract unknown tags</span> $exifTool-&gt;<b>Options</b>(Sort =&gt; 'Group2', Unknown =&gt; 1); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># reset DateFormat option</span> $exifTool-&gt;<b>Options</b>(DateFormat =&gt; undef); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># do not extract duplicate tag names</span> $oldSetting = $exifTool-&gt;<b>Options</b>(Duplicates =&gt; 0); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># get current Verbose setting</span> $isVerbose = $exifTool-&gt;<b>Options</b>('Verbose'); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># set a user parameter</span> $exifTool-&gt;<b>Options</b>(UserParam => 'MyParam=some value'); </pre></td></tr></table></blockquote> <hr><h2><a name="ClearOptions">ClearOptions</a></h2> <p>Reset all options to their default values. Loads user-defined default option values from the %Image::ExifTool::UserDefined::Options hash in the .ExifTool_config file if it exists.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>ClearOptions()</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference </td></tr> </table></blockquote> <hr><h2><a name="ExtractInfo">ExtractInfo</a></h2> <p>Extract all meta information from an image.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>ExtractInfo($;@)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1-N)</b> Same as <a href="#ImageInfo">ImageInfo</a> except that a list of tag keys is not returned if an ARRAY reference is given. </td></tr> <tr><td valign=top><b>Returns</b></td><td>1 if this was a recognized file format, 0 otherwise</td></tr> </table></blockquote> <p><b>Example:</b></p> <blockquote><table class='box'><tr><td><pre> $success = $exifTool-&gt;<b>ExtractInfo</b>('image.jpg', \%options); </pre></td></tr></table></blockquote> <p>The following options are effective in the call to <a href="#ExtractInfo">ExtractInfo</a>:</p> <blockquote> Binary, Charset, CharsetEXIF, CharsetFileName, CharsetID3, CharsetIPTC, CharsetQuickTime, Composite, ExtendedXMP, ExtractEmbedded, FastScan, FixBase, HtmlDump, HtmlDumpBase, IgnoreMinorErrors, Lang, LargeFileSupport, MakerNotes, NoPDFList, PNGEarlyXMP, ScanForXMP, Struct, SystemTags, TextOut, Unknown and Verbose. </blockquote> <hr><h2><a name="GetInfo">GetInfo</a></h2> <p><a href="#GetInfo">GetInfo</a> is called to return meta information after it has been extracted from the image by a previous call to <a href="#ExtractInfo">ExtractInfo</a> or <a href="#ImageInfo">ImageInfo</a>. This function may be called repeatedly after a single call to <a href="#ExtractInfo">ExtractInfo</a> or <a href="#ImageInfo">ImageInfo</a>.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetInfo($;@)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1-N)</b> Same as <a href="#ImageInfo">ImageInfo</a> except that an image can not be specified </td></tr> <tr><td valign=top><b>Returns</b></td><td>Reference to information hash, the same as with <a href="#ImageInfo">ImageInfo</a></td></tr> </table></blockquote> <p><b>Examples:</b></p> <blockquote><table class='box'><tr><td><pre> <span class=com># get image width and height only</span> $info = $exifTool-&gt;<b>GetInfo</b>('ImageWidth', 'ImageHeight'); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># get all Error and Warning messages</span> $info = $exifTool-&gt;<b>GetInfo</b>('Error', 'Warning'); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># get information for all tags in list (list updated with tags found)</span> $info = $exifTool-&gt;<b>GetInfo</b>(\@ioTagList); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># get all information in Author or Location groups</span> $info = $exifTool-&gt;<b>GetInfo</b>({Group2 =&gt; ['Author', 'Location']}); </pre></td></tr></table></blockquote> <p>The following options are effective in the call to <a href="#GetInfo">GetInfo</a>:</p> <blockquote> Charset, CoordFormat, DateFormat, Duplicates, Escape, Exclude, Filter, Group#, GlobalTimeShift, Lang, List, ListItem, ListSep, PrintConv, Sort (if a tag list reference is given) and StrictDate. </blockquote> <hr><h2><a name="WriteInfo">WriteInfo</a></h2> <p>Write meta information to a file. The specified source file is rewritten to the same-type destination file with new information as specified by previous calls to <a href="#SetNewValue">SetNewValue</a>. The necessary segments and/or directories are created in the destination file as required to store the specified information. May be called repeatedly to write the same information to additional files without the need to call <a href="#SetNewValue">SetNewValue</a> again.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>WriteInfo($$;$$)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1)</b> Source file name, file reference, scalar reference, or undef to create a file from scratch. A reference to a File::RandomAccess object is also allowed as a source, but in this case the destination is not optional. <br><b>2)</b> [<i>optional</i>] Destination file name, file reference, scalar reference, or undef to overwrite the original file. May be '-' to write to stdout. <br><b>3)</b> [<i>optional</i>] Destination file type. Ignored if a source is defined. </td></tr> <tr><td valign=top><b>Returns</b></td><td>1 if file was written OK, 2 if file was written but no changes made, 0 on file write error. </td></tr> </table></blockquote> <p>The source file name may be undefined to create a file from scratch (currently only XMP, MIE, ICC, VRD, DR4, EXV and EXIF files can be created in this way -- see <a href="#CanCreate">CanCreate</a> for details). If undefined, the destination file type is required unless the type can be determined from the extension of the destination file name.</p> <p>If a destination file name is given, the specified file must not exist because an existing destination file will not be overwritten. Any new values for FileName, Directory or HardLink are ignored when a destination file name is specified.</p> <p>The destination file name may be undefined to overwrite the original file (make sure you have backups!). In this case, if a source file name is provided, a temporary file is created and renamed to replace the source file if no errors occurred while writing. Otherwise, if a source file reference or scalar reference is used, the image is first written to memory then copied back to replace the original if there were no errors.</p> <p>On Mac OS systems, the file resource fork is preserved if this routine is called with a source file name.</p> <p><b>Examples:</b></p> <blockquote><table class='box'><tr><td><pre> <span class=com># add information to a source file, writing output to new file</span> my $result = $exifTool-&gt;<b>WriteInfo</b>($srcfile, $dstfile); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># create XMP data file from scratch</span> $exifTool-&gt;<b>WriteInfo</b>(undef, $dstfile, 'XMP'); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># overwrite file (you do have backups, right?)</span> $exifTool-&gt;<b>WriteInfo</b>($srcfile); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># retrieve error and warning messages</span> $errorMessage = $exifTool-&gt;<a href="#GetValue">GetValue</a>('Error'); $warningMessage = $exifTool-&gt;<a href="#GetValue">GetValue</a>('Warning'); </pre></td></tr></table></blockquote> <p>If an error code is returned, an Error tag is set and GetValue('Error') can be called to obtain the error description. A Warning tag may be set even if this routine is successful. Calling WriteInfo clears any pre-existing Error and Warning tags.</p> <p>The following ExifTool options are effective in the call to <a href="#WriteInfo">WriteInfo</a>:</p> <blockquote> ByteOrder, Charset, CharsetEXIF, CharsetFileName, CharsetIPTC, Compact, Compress, FixBase, IgnoreMinorErrors, PNGEarlyXMP and Verbose. </blockquote> <hr><h2><a name="GetTagList">GetTagList</a></h2> <p>Get a sorted list of tags from the specified information hash or tag list.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetTagList($;$$$)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1)</b> [<i>optional</i>] Reference to info hash or tag list <br><b>2)</b> [<i>optional</i>] Sort order ('Input', 'File', 'Tag', 'Descr' or 'Group#') <br><b>3)</b> [<i>optional</i>] Secondary sort order ('File', 'Tag' or 'Descr') </td></tr> <tr><td valign=top><b>Returns</b></td><td>List of tag keys in specified order</td></tr> </table></blockquote> <p><b>Example:</b></p> <blockquote><table class='box'><tr><td><pre> @tags = $exifTool-&gt;<b>GetTagList</b>($info, 'Group0'); </pre></td></tr></table></blockquote> <p>If the information hash or tag list reference is not provided, then the list of found tags from the last call to <a href="#ImageInfo">ImageInfo</a>, <a href="#ExtractInfo">ExtractInfo</a> or <a href="#GetInfo">GetInfo</a> is used instead, and the result is the same as if <a href="#GetFoundTags">GetFoundTags</a> was called. If sort order is not specified, the sort order is taken from the current options settings.</p> <hr><h2><a name="GetFoundTags">GetFoundTags</a></h2> <p>Get list of found tags in specified sort order. The found tags are the tags for the information obtained from the most recent call to <a href="#ImageInfo">ImageInfo</a>, <a href="#ExtractInfo">ExtractInfo</a> or <a href="#GetInfo">GetInfo</a> for this object.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetFoundTags($;$$)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1)</b> [<i>optional</i>] Sort order ('Input', 'File', 'Tag', 'Descr' or 'Group#') <br><b>2)</b> [<i>optional</i>] Secondary sort order ('File', 'Tag' or 'Descr') </td></tr> <tr><td valign=top><b>Returns</b></td><td>List of tag keys in the specified order</td></tr> </table></blockquote> <p><b>Example:</b></p> <blockquote><table class='box'><tr><td><pre> my @tags = $exifTool-&gt;<b>GetFoundTags</b>('File'); </pre></td></tr></table></blockquote> <hr><h2><a name="GetRequestedTags">GetRequestedTags</a></h2> <p>Get list of requested tags. These are the tags that were specified in the arguments of the most recent call to <a href="#ImageInfo">ImageInfo</a>, <a href="#ExtractInfo">ExtractInfo</a> or <a href="#GetInfo">GetInfo</a>, including tags specified via a tag list reference. They are returned in the same order that they were specified. Shortcut tags are expanded in the list.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetRequestedTags($)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference </td></tr> <tr><td valign=top><b>Returns</b></td><td>List of tag keys for requested tags (empty if no tags specifically requested)</td></tr> </table></blockquote> <p><b>Example:</b></p> <blockquote><table class='box'><tr><td><pre> my @requestedTags = $exifTool-&gt;<b>GetRequestedTags</b>(); </pre></td></tr></table></blockquote> <hr><h2><a name="GetValue">GetValue</a></h2> <p>Get the value of a specified tag. The returned value is either the human-readable (PrintConv) value, the converted machine-readable (ValueConv) value, or the original raw (Raw) value. If the value type is not specified, the PrintConv value is returned if the PrintConv option is set, otherwise the ValueConv value is returned. The PrintConv values are the same as the values returned by <a href="#ImageInfo">ImageInfo</a> and <a href="#GetInfo">GetInfo</a> in the tag/value hash unless the PrintConv option is disabled.</p> <p>Tags which represent lists of multiple values (as may happen with '<code>Keywords</code>' for example) are handled specially. In scalar context, the returned PrintConv value for these tags is either a string of values or a list reference (depending on the List option setting), and the ValueConv value is always a list reference. But in list context, <a href="#GetValue">GetValue</a> always returns the list itself.</p> <p>Note that <a href="#GetInfo">GetValue</a> requires a case-sensitive tag key as an argument. To retrieve tag information based on a case-insensitive tag name (with an optional group specifier), use <a href="#GetInfo">GetInfo</a> instead.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetValue($$;$)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1)</b> Tag key <br><b>2)</b> [<i>optional</i>] Value type, 'PrintConv', 'ValueConv', 'Both', 'Raw' or 'Rational' <br>&nbsp;<br>The default value type is 'PrintConv' if the PrintConv option is set, otherwise the default is 'ValueConv'. A value type of 'Both' returns both ValueConv and PrintConv values as a list. 'Rational' returns the raw rational value as a string fraction for rational types, or undef for other types. </td></tr> <tr><td valign=top><b>Returns</b></td><td> The value of the specified tag. If the tag represents a list of multiple values and the List option is disabled then PrintConv returns a string of values, otherwise a reference to the list is returned in scalar context. The list itself is returned in list context. (Unless 'Both' values are requested, in which case two list references are returned, regardless of context.) Values may also be scalar references to binary data, or hash references if the <a href="#Struct">Struct</a> option is set.<br>&nbsp;<br> Note: It is possible for <a href="#GetValue">GetValue</a> to return an undefined ValueConv or PrintConv value (or an empty list in list context) even if the tag exists, since it is possible for these conversions to yield undefined values. And the Rational value will be undefined for any non-rational tag. The Raw value should always exist if the tag exists. </td></tr> </table></blockquote> <p><b>Examples:</b></p> <blockquote><table class='box'><tr><td><pre> <span class=com># PrintConv example</span> my $val = $exifTool-&gt;<b>GetValue</b>($tag); if (ref $val eq 'SCALAR') { print "$tag = (unprintable value)\n"; } else { print "$tag = $val\n"; } </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># ValueConv example</span> my $val = $exifTool-&gt;<b>GetValue</b>($tag, 'ValueConv'); if (ref $val eq 'ARRAY') { print "$tag is a list of values\n"; } elsif (ref $val eq 'SCALAR') { print "$tag represents binary data\n"; } else { print "$tag is a simple scalar\n"; } </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># list example</span> my @keywords = $exifTool-&gt;<b>GetValue</b>('Keywords', 'ValueConv'); </pre></td></tr></table></blockquote> <p>The following options are in effect when <a href="#GetValue">GetValue</a> is called:</p> <blockquote> Charset, CoordFormat, DateFormat, Escape, Filter, GlobalTimeShift, Lang, List, ListItem, ListSep, PrintConv and StrictDate. </blockquote> <hr><h2><a name="SetNewValue">SetNewValue</a></h2> <p>Set the new value for a tag. The routine may be called multiple times to set the values of many tags before using <a href="#WriteInfo">WriteInfo</a> to write the new values to an image.</p> <p>For list-type tags (like <code>Keywords</code>), either call repeatedly with the same tag name for each value, or call with a reference to the list of values.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>SetNewValue($;$$%)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1)</b> [<i>optional</i>] Tag key or tag name, or undef to clear all new values. The tag name may be prefixed one or more family 0, 1 or 2 group names with optional leading family numbers, separated by colons (eg. '<code>EXIF:Artist</code>', '<code>XMP:Time:*</code>'), which is equivalent to using a Group option argument. Also, a '<code>#</code>' may be appended to the tag name (eg. '<code>EXIF:Orientation#</code>'), with the same effect as setting Type to 'ValueConv'. Wildcards ('<code>*</code>' and '<code>?</code>') may be used in the tag name to assign multiple tags simultaneously A tag name of '<code>*</code>' is special when deleting information, and will delete an entire group even if some individual tags in the group are not writable, but only if a single family 0 or 1 group name is specified (otherwise, the tags are deleted individually). Use <a href="#GetDeleteGroups">GetDeleteGroups</a> to get a list of deletable group names, and see the <a href="TagNames/index.html">TagNames documentation</a> for a complete list of ExifTool tag names. <br><b>2)</b> [<i>optional</i>] New value for tag. Undefined to delete tag from file. May be a scalar, scalar reference, list reference to set a list of values, or hash reference for a structure. Integer values may be specified as a hexadecimal string (with a leading '0x'), and simple rational values may be specified in fractional form (eg. '4/10'). Structure tags may be specified either as a hash reference or a serialized string (see the last two examples below). <br><b>3-N)</b> [<i>optional</i>] SetNewValue option/value pairs (see below). </td></tr> <tr><td valign=top><b>Returns</b></td><td>Scalar context: The number of tags set, and errors are printed to STDERR. <br>List context: The number of tags set, and the error string (undefined if no error). </td></tr> </table></blockquote> <blockquote><table class='norm'> <tr><th colspan=4 bgcolor='#dddddd'>SetNewValue Options</th></tr> <tr><th>Option</th><th>Description</th><th width='30%'>Values</th><th>Default</th></tr> <tr><td>AddValue</td><td>Add value to existing list in a file rather than overwriting</td> <td><table class=clear> <tr><td valign=top align=center><b>0</b>&nbsp;=</td><td>Overwrite existing value(s)</td></tr> <tr><td valign=top align=center><b>1</b>&nbsp;=</td><td>Add to existing list, or warn for non-list tags</td></tr> <tr><td valign=top align=center><b>2</b>&nbsp;=</td><td>Add to existing list, or overwrite non-list tags</td></tr> </table></td><td align=center>0</td></tr> <tr><td>DelValue</td><td>Delete existing tag from a file if it has the specified value</td> <td align=center>0 or 1</td><td align=center>0</td></tr> <tr><td>EditGroup</td><td>Create tags in existing groups only. Don't create new group. Effectively removes the 'g' from the ExifTool WriteMode option for this tag only.</td> <td align=center>0 or 1</td><td align=center>0</td></tr> <tr><td>EditOnly</td><td>Edit tag only if it already exists. Don't create new tag. Effectively removes the 'c' from the ExifTool WriteMode option for this tag only.</td> <td align=center>0 or 1</td><td align=center>0</td></tr> <tr><td>Group</td><td>Specifies group name where tag should be written. If not specified, tag is written to highest priority group as specified by <a href="#SetNewGroups">SetNewGroups</a>. Case is not significant</td> <td align=center>One or more family 0, 1 or 2 groups with optional leading family number, separated by colons</td><td align=center>undef</td></tr> <tr><td>NoFlat</td><td>Treat flattened tags as 'unsafe'</td><td align=center>0 or 1</td><td align=center>0</td></tr> <tr><td>NoShortcut</td><td>Disables default behaviour of looking up tag in shortcuts if not found otherwise.</td><td align=center>0 or 1</td><td align=center>0</td></tr> <tr><td>Protected</td><td>Allow protected tags to be written</td> <td>Bitmask of tag protection levels to write: <table class=clear> <tr><td valign=top align=center><b>0x01</b>&nbsp;=</td> <td>Write '<a href="TagNames/index.html">unsafe</a>' tags (ie. tags not copied automatically via <a href="#SetNewValuesFromFile">SetNewValuesFromFile</a>)</td></tr> <tr><td valign=top align=center><b>0x02</b>&nbsp;=</td> <td>Write '<a href="TagNames/index.html">protected</a>' tags (internal use only)</td></tr> </table></td><td align=center>0</td></tr> <tr><td>ProtectSaved</td><td>Avoid setting new values which were saved after the Nth call to <a href="#SaveNewValues">SaveNewValues</a>. Has no effect on unsaved values, or values saved before the Nth call.</td><td align=center>N</td><td align=center>undef</td></tr> <tr><td>Replace</td><td>Replace previous new values for this tag (ie. replace the values set in previous calls to <a href="#SetNewValue">SetNewValue</a>). This option is most commonly used to replace previously-set new values for list-type tags.</td> <td><table class=clear> <tr><td valign=top align=center><b>0</b>&nbsp;=</td><td>Set new value normally</td></tr> <tr><td valign=top align=center><b>1</b>&nbsp;=</td><td>Reset previous new values and replace with the specifed new value</td></tr> <tr><td valign=top align=center><b>2</b>&nbsp;=</td><td>Reset previous new values only</td></tr> </table></td><td align=center>0</td></tr> <tr><td>Shift</td><td>Shift the tag by the specified value. Currently only date/time tags and tags with numerical values may be shifted. Value is added if Shift is 1, or subtracted if Shift is -1. See <a href="Shift.html">Image::ExifTool::Shift.pl</a> for details time shift formats.</td> <td><table class=clear> <tr><td valign=top align=left colspan=2><b>undef</b>&nbsp;= No shift</td></tr> <tr><td valign=top align=right><b>0</b>&nbsp;=</td><td>Shift if shiftable:<br> Positive if AddValue set, or<br> Negative if DelValue set and<br> tag is date/time</td></tr> <tr><td valign=top align=right><b>1</b>&nbsp;=</td><td>Positive shift</td></tr> <tr><td valign=top align=right><b>-1</b>&nbsp;=</td><td>Negative shift</td></tr> </table></td><td align=center>undef</td></tr> <tr><td>Type</td><td>The type of value being set</td> <td>PrintConv, ValueConv or Raw (default depends on <a href="#PrintConv">PrintConv</a> Option)</td> <td align=center>PrintConv or ValueConv</td></tr> </table></blockquote> <p><b>Examples:</b></p> <blockquote><table class='box'><tr><td><pre> <span class=com># set a new value for a tag (errors go to STDERR)</span> $success = $exifTool-&gt;<b>SetNewValue</b>($tag, $value); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># set a new value and capture any error message</span> ($success, $errStr) = $exifTool-&gt;<b>SetNewValue</b>($tag, $value); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># delete information for specified tag if it exists in image # (also resets AddValue and DelValue options for this tag)</span> $exifTool-&gt;<b>SetNewValue</b>($tag); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># reset all values from previous calls to SetNewValue()</span> $exifTool-&gt;<b>SetNewValue</b>(); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># delete a specific keyword</span> $exifTool-&gt;<b>SetNewValue</b>('Keywords', $word, DelValue =&gt; 1); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># set keywords (a list-type tag) with two new values</span> $exifTool-&gt;<b>SetNewValue</b>(Keywords =&gt; 'word1'); $exifTool-&gt;<b>SetNewValue</b>(Keywords =&gt; 'word2'); <span class=com># equivalent, but set both in one call using an array reference</span> $exifTool-&gt;<b>SetNewValue</b>(Keywords =&gt; ['word1','word2']); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># add a keyword without replacing existing keywords in the file</span> $exifTool-&gt;<b>SetNewValue</b>(Keywords =&gt; $word, AddValue =&gt; 1); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># set a tag in a specific group</span> $exifTool-&gt;<b>SetNewValue</b>(Headline =&gt; $val, Group =&gt; 'XMP'); $exifTool-&gt;<b>SetNewValue</b>('XMP:Headline' =&gt; $val); <span class=com># (equivalent)</span> </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># shift original date/time back by 2.5 hours</span> $exifTool-&gt;<b>SetNewValue</b>(DateTimeOriginal =&gt; '2:30', Shift =&gt; -1); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># write a tag only if it had a specific value # (the order of the following calls is not significant)</span> $exifTool-&gt;<b>SetNewValue</b>(Title =&gt; $oldVal, DelValue =&gt; 1); $exifTool-&gt;<b>SetNewValue</b>(Title =&gt; $newVal); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># write tag by numerical value</span> $exifTool-&gt;<b>SetNewValue</b>(Orientation =&gt; 6, Type =&gt; 'ValueConv'); $exifTool-&gt;<b>SetNewValue</b>('Orientation#' =&gt; 6); <span class=com># (equivalent)</span> </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># delete all but EXIF tags</span> $exifTool-&gt;<b>SetNewValue</b>('*'); <span class=com># delete all...</span> $exifTool-&gt;<b>SetNewValue</b>('EXIF:*', undef, Replace =&gt; 2); <span class=com># ...but EXIF</span> </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td> <pre><span class=com># write structured information as a HASH reference</span> $exifTool-&gt;<b>SetNewValue</b>('XMP:Flash' =&gt; { mode=>'on', fired=>'true', return=>'not' });</pre> </td></tr></table></blockquote> <blockquote><table class='box'><tr><td> <pre><span class=com># write structured information as a serialized string</span> $exifTool-&gt;<b>SetNewValue</b>('XMP:Flash' =&gt; '{mode=on,fired=true,return=not}');</pre> </td></tr></table>(see <a href="struct.html#Serialize">struct.html</a> for a description of the structure serialization technique)</blockquote> <p><b>Notes:</b></p> <p>When deleting groups of tags, the Replace option may be used to exclude specific groups from a mass delete. However, this technique may not be used to exclude individual tags from a group delete (unless a family 2 group was specified in the delete). Instead, use <a href="#SetNewValuesFromFile">SetNewValuesFromFile</a> to recover the values of individual tags after deleting a group.</p> <p>When deleting all tags from a JPEG image, the APP14 "Adobe" information is not deleted by default because doing so may affect the appearance of the image. However, this information may be deleted by specifying it explicitly, either by group (with '<code>Adobe:*</code>') or as a block (with '<code>Adobe</code>').</p> <p>The following ExifTool options are effective in the call to <a href="#SetNewValue">SetNewValue</a>:</p> <blockquote> Charset, Escape, IgnoreMinorErrors, Lang, ListSep, ListSplit, PrintConv, Verbose and WriteMode. </blockquote> <hr><h2><a name="GetNewValue">GetNewValue</a><a name="GetNewValues"></a></h2> <p>Get the new Raw value for a tag. This is the value set by <a href="#SetNewValue">SetNewValue</a> that is queued to be written to file. List-type tags may return multiple values in list context.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetNewValue($$)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1)</b> Tag name (case sensitive, may be prefixed by family 0 or 1 group name) </td></tr> <tr><td valign=top><b>Returns</b></td><td>List of new Raw tag values, or first value in list when called in scalar context. The list may be empty either if the tag isn't being written, or if it is being deleted (ie. if <a href="#SetNewValue">SetNewValue</a> was called without a value). </td></tr> </table></blockquote> <p><b>Examples:</b></p> <blockquote><table class='box'><tr><td><pre> my $rawVal = $exifTool-&gt;<b>GetNewValue</b>($tag); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> my @rawVals = $exifTool-&gt;<b>GetNewValue</b>($tag); </pre></td></tr></table></blockquote> <hr><h2><a name="SetNewValuesFromFile">SetNewValuesFromFile</a></h2> <p>A very powerful routine that sets new values for tags from information found in a specified file.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>SetNewValuesFromFile($$;@)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1)</b> File name, file reference, or scalar reference <br><b>2-N)</b> [<i>optional</i>] List of tag names to set or options hash references. All writable tags are set if none are specified. The tag names are not case sensitive, and may be prefixed by one or more family 0, 1 or 2 group names with optional leading family numbers, separated by colons (eg. '<code>exif:iso</code>'). A leading '<code>-</code>' indicates tags to be excluded (eg. '<code>-comment</code>'), or a trailing '<code>#</code>' causes the ValueConv value to be copied (same as setting the Type option to 'ValueConv' for this tag only). Wildcards ('<code>*</code>' and '<code>?</code>') may be used in the tag name. A tag name of '<code>*</code>' is commonly used when a group is specified to copy all tags in the group (eg. '<code>XMP:*</code>').<br>&nbsp;<br> A special feature allows tag names of the form '<code>DSTTAG&lt;SRCTAG</code>' (or '<code>SRCTAG&gt;DSTTAG</code>') to be specified to copy information to a tag with a different name or a specified group. Both '<code>SRCTAG</code>' and '<code>DSTTAG</code>' may contain wildcards and/or be prefixed by a group name (eg. '<code>fileModifyDate&lt;modifyDate</code>' or '<code>xmp:*&lt;*</code>'), and/or suffixed by a '<code>#</code>' to disable print conversion. Copied tags may also be added or deleted from a list with arguments of the form '<code>DSTTAG+&lt;SRCTAG</code>' or '<code>DSTTAG-&lt;SRCTAG</code>'. Tags are evaluated in order, so exclusions apply only to tags included earlier in the list. An extension of this feature allows the tag value to be set from an expression containing tag names with leading '<code>$</code>' symbols (eg. '<code>Comment&lt;the file is $filename</code>'). Braces '<code>{}</code>' may be used around the tag name to separate it from subsequent text, and a '<code>$$</code>' is used to to represent a '<code>$</code>' symbol. The behaviour for missing tags in expressions is defined by the <a href="#MissingTagValue">MissingTagValue</a> option. The tag value may be modified via changes to the default input variable (<code>$_</code>) in Perl expressions placed inside the braces and after a semicolon following the tag name. Braces within the expression must be balanced. <br>&nbsp;<br> Multiple options hash references may be passed to set different options for different tags. Options apply to subsequent tags in the argument list. </td></tr> <tr><td valign=top><b>Returns</b></td><td>A hash of information that was set successfully. May include Warning or Error entries if there were problems reading the input file. </td></tr> </table></blockquote> <p>By default, this routine will commute information between same-named tags in different groups, allowing information to be translated between images with different formats. This behaviour may be modified by specifying a group name for extracted tags (even if '<code>*</code>' is used as a group name), in which case the information is written to the original group, unless redirected to a different group. When '<code>*</code>' is used for a group name, by default the family 1 group of the original tag is preserved, but a different family may be specified with a leading family number. (For example, specifying '<code>*:*</code>' copies all information while preserving the original family 1 groups, while '<code>0*:*</code>' preserves the family 0 group.)</p> <p><b>SetNewValuesFromFile Options:</b></p> <p>The options are the same was for <a href="#SetNewValue">SetNewValue</a>, and are passed directly to <a href="#SetNewValue">SetNewValue</a> internally, with a few exceptions:</p> <ul> <li>The Replace option defaults to 1 instead of 0 as with <a href="#SetNewValue">SetNewValue</a>.</li> <li>The AddValue or DelValue option is set for individual tags if '+&gt;' or '-&gt;' (or '+&lt;' or '-&lt;') are used.</li> <li>The Group option is set for tags where a group name is given.</li> <li>The Protected flag is set to 1 for individually specified tags.</li> <li>The Type option also applies to extracted tags.</li> </ul> <p><b>Examples:</b></p> <blockquote><table class='box'><tr><td><pre> <span class=com># set new values from all information in a file...</span> my $info = $exifTool-&gt;<b>SetNewValuesFromFile</b>($srcFile); <span class=com># ...then write these values to another image</span> my $result = $exifTool-&gt;<a href="#WriteInfo">WriteInfo</a>($file2, $outFile); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># set all new values, preserving original groups</span> $exifTool-&gt;<b>SetNewValuesFromFile</b>($srcFile, '*:*'); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># set specific information</span> $exifTool-&gt;<b>SetNewValuesFromFile</b>($srcFile, $tag1, $tag2...); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># set new value from a different tag in specific group</span> $exifTool-&gt;<b>SetNewValuesFromFile</b>($src, 'IPTC:Keywords&gt;XMP-dc:Subject'); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># add all IPTC keywords to XMP subject list</span> $exifTool-&gt;<b>SetNewValuesFromFile</b>($src, 'IPTC:Keywords+&gt;XMP-dc:Subject'); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># set new value from an expression involving other tags</span> $exifTool-><b>SetNewValuesFromFile</b>($file, 'Comment&lt;ISO=$ISO Aperture=$aperture Exposure=$shutterSpeed'); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># set keywords list from the values of multiple tags</span> $exifTool-&gt;<b>SetNewValuesFromFile</b>($file, { Replace =&gt; 0 }, 'keywords&lt;xmp:subject', 'keywords&lt;filename'); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># copy all EXIF information, preserving the original IFD # (without '&gt;*.*' tags would be copied to the preferred EXIF IFD)</span> $exifTool-&gt;<b>SetNewValuesFromFile</b>($file, 'EXIF:*&gt;*:*'); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># copy all tags with names starting with "gps" (note: this is # different than "gps:*" because it will also copy XMP GPS tags)</span> $exifTool-&gt;<b>SetNewValuesFromFile</b>($file, 'gps*'); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># set FileName from Model, translating questionable characters to underlines</span> $exifTool-&gt;<b>SetNewValuesFromFile</b>($file, 'filename&lt;${model;tr(/\\\\?*:|"&lt;&gt;)(_)}.jpg'); </pre></td></tr></table></blockquote> <p><b>Notes:</b></p> <p>The PrintConv option applies to this routine, but it normally should be left on to provide more reliable transfer of information between groups.</p> <p>If a preview image exists, it is not copied. The preview image must be transferred separately if desired, in a separate call to <a href="#WriteInfo">WriteInfo</a></p> <p>When simply copying all information between files of the same type, it is usually desirable to preserve the original groups by specifying '<code>*:*</code>' for the tags to set.</p> <p>The <a href="#Duplicates">Duplicates</a> option is always in effect for tags extracted from the source file using this routine.</p> <p>The <a href="#Struct">Struct</a> option is enabled by default for tags extracted by this routine. This allows the hierarchy of complex structures to be preserved when copying, but the Struct option may be set to 0 to override this behaviour and copy as flattened tags instead.</p> <hr><h2><a name="CountNewValues">CountNewValues</a></h2> <p>Return the total number of new values set.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>CountNewValues($)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference </td></tr> <tr><td valign=top><b>Returns</b></td><td>In scalar context, returns the total number of tags with new values set. In list context, also returns the number of "pseudo" tag values which have been set. "Pseudo" tags are tags like FileName and FileModifyDate which are not contained within the file and can be changed without rewriting the file.</td></tr> </table></blockquote> <p><b>Examples:</b></p> <blockquote><table class='box'><tr><td><pre> my $numSet = $exifTool-&gt;<b>CountNewValues</b>(); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> my ($numSet, $numPseudo) = $exifTool-&gt;<b>CountNewValues</b>(); </pre></td></tr></table></blockquote> <hr><h2><a name="SaveNewValues">SaveNewValues</a></h2> <p>Save state of new values to be later restored by <a href="#RestoreNewValues">RestoreNewValues</a>.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>SaveNewValues($)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference </td></tr> <tr><td valign=top><b>Returns</b></td><td>Count of the number of times this routine has been called (N) since the last time the new values were reset.</td></tr> </table></blockquote> <p><b>Example:</b></p> <blockquote><table class='box'><tr><td><pre> $exifTool-&gt;<b>SaveNewValues</b>(); <span class=com># save state of new values</span> $exifTool-&gt;<a href="#SetNewValue">SetNewValue</a>(ISO =&gt; 100); <span class=com># set new value for ISO</span> $exifTool-&gt;<a href="#WriteInfo">WriteInfo</a>($src, $dst1); <span class=com># write ISO plus any previous new values</span> $exifTool-&gt;<b>RestoreNewValues</b>(); <span class=com># restore previous new values</span> $exifTool-&gt;<a href="#WriteInfo">WriteInfo</a>($src, $dst2); <span class=com># write previous new values only</span> </pre></td></tr></table></blockquote> <hr><h2><a name="RestoreNewValues">RestoreNewValues</a></h2> <p>Restore new values to the settings that existed when <a href="#SaveNewValues">SaveNewValues</a> was last called. May be called repeatedly after a single call to <a href="#SaveNewValues">SaveNewValues</a>. See <a href="#SaveNewValues">SaveNewValues</a> above for an example.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>RestoreNewValues($)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference </td></tr> </table></blockquote> <hr><h2><a name="SetFileModifyDate">SetFileModifyDate</a></h2> <p>Write the filesystem modification or creation time from the new value of the FileModifyDate or FileCreateDate tag.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>SetFileModifyDate($$;$$)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1)</b> File name <br><b>2)</b> [<i>optional</i>] Base time if applying shift (in days before $^T) <br><b>3)</b> [<i>optional</i>] Tag to write: 'FileModifyDate' (default), or 'FileCreateDate' </td></tr> <tr><td valign=top><b>Returns</b></td><td>1 if the time was changed, 0 if nothing was done, or -1 if there was an error setting the time. </td></tr> </table></blockquote> <p><b>Example:</b></p> <blockquote><table class='box'><tr><td><pre> $exifTool-&gt;<a href="#SetNewValue">SetNewValue</a>(FileModifyDate =&gt; '2000:01:02 03:04:05', Protected => 1); my $result = $exifTool-&gt;<b>SetFileModifyDate</b>($file); </pre></td></tr></table></blockquote> <p><b>Notes:</b></p> <p>Equivalent to, but more efficient than calling <a href="#WriteInfo">WriteInfo</a> when only the FileModifyDate or FileCreateDate tag has been set. If a timezone is not specified, local time is assumed. When shifting, the time of the original file is used unless the optional base time is specified.</p> <p>The ability to write FileCreateDate is currently restricted to Windows systems only.</p> <hr><h2><a name="SetFileName">SetFileName</a></h2> <p>Set the file name and directory, or create a hard link to the file. If not specified, the new file name is derived from the new values of the FileName and Directory tags, or from the HardLink tag if creating a link. If the FileName tag contains a '<code>/</code>', then the file is renamed into a new directory. If FileName ends with '<code>/</code>', then it is taken as a directory name and the file is moved into the new directory. The new value for the Directory tag takes precedence over any directory specified in FileName.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>SetFileName($$;$$)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1)</b> Current file name <br><b>2)</b> [<i>optional</i>] New file name <br><b>3)</b> [<i>optional</i>] 'Link' to create a hard link instead of renaming the file, or 'Test' to test renaming feature by printing the old and new names instead of changing anything. </td></tr> <tr><td valign=top><b>Returns</b></td><td>1 if the file name or directory was changed, 0 if nothing was done, or -1 if there was an error renaming the file. </td></tr> </table></blockquote> <p><b>Examples:</b></p> <blockquote><table class='box'><tr><td><pre> my $result = $exifTool-&gt;<b>SetFileName</b>($file); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> my $result = $exifTool-&gt;<b>SetFileName</b>($file, $newName); </pre></td></tr></table></blockquote> <p><b>Notes:</b></p> <p>Will not overwrite existing files. New directories are created as necessary.</p> <hr><h2><a name="SetNewGroups">SetNewGroups</a></h2> <p>Set the order of the preferred groups when adding new information. In subsequent calls to <a href="#SetNewValue">SetNewValue</a>, new information will be created in the first valid group of this list. This has an impact only if the group is not specified when calling <a href="#SetNewValue">SetNewValue</a>, and if the tag name exists in more than one group. The default order is EXIF, IPTC then XMP. Any family 0 group name may be used. Case is not significant.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>SetNewGroups($;@)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1-N)</b> Groups in order of priority. If no groups are specified, the priorities are reset to the defaults. </td></tr> </table></blockquote> <p><b>Example:</b></p> <blockquote><table class='box'><tr><td><pre> $exifTool-&gt;<b>SetNewGroups</b>('XMP','EXIF','IPTC'); </pre></td></tr></table></blockquote> <hr><h2><a name="GetNewGroups">GetNewGroups</a></h2> <p>Get current group priority list.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetNewGroups($)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference </td></tr> <tr><td valign=top><b>Returns</b></td><td>List of group names in order of write priority. Highest priority first. </td></tr> </table></blockquote> <p><b>Example:</b></p> <blockquote><table class='box'><tr><td><pre> @groups = $exifTool-&gt;<b>GetNewGroups</b>(); </pre></td></tr></table></blockquote> <hr><h2><a name="GetTagID">GetTagID</a></h2> <p>Get the ID for the specified tag. The ID is the IFD tag number in EXIF information, the property name in XMP information, or the data offset in a binary data block. For some tags, such as Composite tags where there is no ID, an empty string is returned. In list context, also returns a language code for the tag if available and different from the default language (eg. with alternate language entries for XMP "lang-alt" tags).</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetTagID($$)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1)</b> Tag key </td></tr> <tr><td valign=top><b>Returns</b></td><td>In scalar context, returns the tag ID or '' if there is no ID for this tag.<br>In list context, returns the tag ID (or '') and the language code (or undef).</td></tr> </table></blockquote> <p><b>Examples:</b></p> <blockquote><table class='box'><tr><td><pre> my $id = $exifTool-&gt;<b>GetTagID</b>($tag); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> my ($id, $lang) = $exifTool-&gt;<b>GetTagID</b>($tag); </pre></td></tr></table></blockquote> <hr><h2><a name="GetDescription">GetDescription</a></h2> <p>Get description for specified tag. This function will always return a defined value. In the case where the description doesn't exist, one is generated from the tag name.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetDescription($$)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1)</b> Tag key </td></tr> <tr><td valign=top><b>Returns</b></td><td>Tag description</td></tr> </table></blockquote> <hr><h2><a name="GetGroup">GetGroup</a></h2> <p>Get group name(s) for a specified tag.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetGroup($$;$)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1)</b> Tag key <br><b>2)</b> [<i>optional</i>] Group family number, or string of numbers separated by colons </td></tr> <tr><td valign=top><b>Returns</b></td><td>Group name (or '' if tag has no group). If no group family is specified, returns the name of group in family 0 when called in scalar context, or the names of groups for all families in list context. Returns a string of group names separated by colons if the input group family contains a colon. The string is simplified to remove a leading 'Main:' and adjacent identical group names unless the family string begins with a colon. </td></tr> </table></blockquote> <p>The following families of groups are available:</p> <blockquote><table class='norm'> <tr><th>Family</th><th>Description</th><th>Examples</th></tr> <tr><td align=center>0</td><td>Information Type</td> <td>EXIF, XMP, IPTC</td></tr> <tr><td align=center>1</td><td>Specific Location</td><td>IFD0, XMP-dc</td></tr> <tr><td align=center>2</td><td>Category</td> <td>Author, Time</td></tr> <tr><td align=center>3</td><td>Document Number</td> <td>Main, Doc1, Doc3-2</td></tr> <tr><td align=center>4</td><td>Instance Number</td> <td>Copy1, Copy2, Copy3...</td></tr> </table></blockquote> <p>Families 0 and 1 are based on the file structure, and are similar except that family 1 is more specific and sub-divides some groups to give more detail about the specific location where the information was found. For example, the EXIF group is split up based on the specific IFD (Image File Directory), the MakerNotes group is divided into groups for each manufacturer, and the XMP group is separated based on the XMP namespace prefix. Note that only common XMP namespaces are listed in the <a href="#GetAllGroups">GetAllGroups</a> documentation, but additional namespaces may be present in some XMP data. Also note that the '<code>XMP-xmp</code>...' group names may appear in the older form '<code>XMP-xap</code>...' since these names evolved as the XMP standard was developed. The ICC_Profile group is broken down to give information about the specific ICC_Profile tag from which multiple values were extracted. As well, information extracted from the ICC_Profile header is separated into the ICC-header group.</p> <p>Family 2 classifies information based on the logical category to which the information refers.</p> <p>Family 3 gives the document number for tags extracted from embedded documents, or 'Main' for tags from the main document. (See the <a href="#Embedded">ExtractEmbedded</a> option for extracting tags from embedded documents.) Nested sub-documents (if they exist) are indicated by numbers separated with dashes in the group name, to an arbitrary depth. (eg. '<code>Doc2-3-1</code>' is the 1<sup>st</sup> sub-sub-document of the 3<sup>rd</sup> sub-document of the 2<sup>nd</sup> embedded document of the main file.)</p> <p>Family 4 provides a method for differentiating tags when multiple tags exist with the same name in the same location. The primary instance of a tag (the tag extracted when the Duplicates option is disabled and no group is specified) has no family 4 group name, but additional instances have have family 4 group names of '<code>Copy1</code>', '<code>Copy2</code>', '<code>Copy3</code>', etc.</p> <p>See <a href="#GetAllGroups">GetAllGroups</a> for lists of group names.</p> <p><b>Examples:</b></p> <blockquote><table class='box'><tr><td><pre> <span class=com># return family 0 group name (eg. 'EXIF')</span> $group = $exifTool-&gt;<b>GetGroup</b>($tag, 0); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># return all groups (eg. qw{EXIF IFD0 Author Main})</span> @groups = $exifTool-&gt;<b>GetGroup</b>($tag); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># return groups as a string (eg. 'Main:IFD0:Author')</span> $group = $exifTool-&gt;<b>GetGroup</b>($tag, ':3:1:2'); </pre></td></tr></table></blockquote> <blockquote><table class='box'><tr><td><pre> <span class=com># return groups as a simplified string (eg. 'IFD0:Author')</span> $group = $exifTool-&gt;<b>GetGroup</b>($tag, '3:1:2'); </pre></td></tr></table></blockquote> <hr><h2><a name="GetGroups">GetGroups</a></h2> <p>Get list of group names for all tags in specified information hash.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetGroups($;$$)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference <br><b>1)</b> [<i>optional</i>] Information hash reference (default is all extracted info) <br><b>2)</b> [<i>optional</i>] Group family number (default 0) </td></tr> <tr><td valign=top><b>Returns</b></td><td> List of group names in alphabetical order. If information hash is not specified, the group names are returned for all extracted information. See <a href="#GetAllGroups">GetAllGroups</a> for a list of groups in each family. </td></tr> </table></blockquote> <p><b>Examples:</b></p> <blockquote><table class='box'><tr><td><pre> my @groups = $exifTool-&gt;<b>GetGroups</b>($info, $family); </pre></td></tr></table></blockquote> <blockquote>Example of one way to print information organized by group <table class='box'><tr><td><pre> my $exifTool = <a href="#new">new</a> Image::ExifTool; $exifTool-&gt;<a href="#ExtractInfo">ExtractInfo</a>('t/images/ExifTool.jpg'); my $family = 1; my @groups = $exifTool-&gt;<b>GetGroups</b>($family); my $group; foreach $group (@groups) { print "---- $group ----\n"; my $info = $exifTool-&gt;<a href="#GetInfo">GetInfo</a>({"Group$family" =&gt; $group}); foreach ($exifTool-&gt;<a href="#GetTagList">GetTagList</a>($info)) { print "$_ : $$info{$_}\n"; } } </pre></td></tr></table></blockquote> <hr><h2><a name="BuildCompositeTags">BuildCompositeTags</a></h2> <p>Builds composite tags from required tags. The composite tags are convenience tags which are derived from the values of other tags. This routine is called automatically by <a href="#ImageInfo">ImageInfo</a> if the Composite option is set.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>BuildCompositeTags($)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference </td></tr> <tr><td valign=top><b>Returns</b></td><td>(none)</td></tr> </table></blockquote> <p><b>Notes:</b></p> <ol> <li>Tag values are calculated in alphabetical order unless a tag Require's or Desire's another composite tag, in which case the calculation is deferred until after the other tag is calculated.</li> <li>Composite tags may need to read data from the image for their value to be determined, and for these <a href="#BuildCompositeTags">BuildCompositeTags</a> must be called while the image is available. This is only a problem if <a href="#ImageInfo">ImageInfo</a> is called with a filename (as opposed to a file reference or scalar reference) since in this case the file is closed before <a href="#ImageInfo">ImageInfo</a> returns. Here the Composite option may be used so that <a href="#BuildCompositeTags">BuildCompositeTags</a> is called from within <a href="#ImageInfo">ImageInfo</a>, before the file is closed.</li> </ol> <hr><table bgcolor='#ffaaaa' width='100%' cellpadding=8><tr><td><center><b> The following functions access only static data and are not called with an ExifTool object </b></center></td></tr></table> <p>The names of all the following functions, plus <a href="#ImageInfo">ImageInfo</a>, may be imported into the current namespace with the "Public" tag. When this is done, the functions can be accessed without the need to prefix the function name with "<code>Image::ExifTool::</code>". For example:</p> <blockquote><table class='box'><tr><td><pre> use Image::ExifTool ':Public'; $tagName = <a href="#GetTagName">GetTagName</a>($tag); </pre></td></tr></table></blockquote> <hr><h2><a name="GetTagName">GetTagName</a></h2> <p>Get name of tag from tag identifier. This is a convenience function that strips the embedded instance number, if it exists, from the tag key.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetTagName($)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> Tag key </td></tr> <tr><td valign=top><b>Returns</b></td><td>Tag name</td></tr> </table></blockquote> <p><b>Example:</b></p> <blockquote><table class='box'><tr><td><pre> $tagName = Image::ExifTool::<b>GetTagName</b>($tag); </pre></td></tr></table></blockquote> <hr><h2><a name="GetShortcuts">GetShortcuts</a></h2> <p>Get list of tag shortcut names.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetShortcuts()</td></tr> <tr><td valign=top><b>Inputs</b></td><td>(none) </td></tr> <tr><td valign=top><b>Returns</b></td><td>List of shortcuts</td></tr> </table></blockquote> <hr><h2><a name="GetAllTags">GetAllTags</a></h2> <p>Get list of all available tag names.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetAllTags(;$)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> [<i>optional</i>] Group name, or string of group names separated by colons </td></tr> <tr><td valign=top><b>Returns</b></td><td>A list of all available tags in alphabetical order, or all tags in a specified group or intersection of groups. The group name is case insensitive, and any group in families 0-2 may be used except for EXIF family 1 groups (ie. the specific IFD). </td></tr> </table></blockquote> <hr><h2><a name="GetWritableTags">GetWritableTags</a></h2> <p>Get list of all writable tag names.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetWritableTags(;$)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> [<i>optional</i>] Group name, or string of group names separated by colons </td></tr> <tr><td valign=top><b>Returns</b></td><td>A list of all writable tags in alphabetical order. These are the tags for which values may be set through <a href="#SetNewValue">SetNewValue</a>. If a group name is given, returns only writable tags in specified group(s). The group name is case insensitive, and any group in families 0-2 may be used except for EXIF family 1 groups (ie. the specific IFD). </td></tr> </table></blockquote> <hr><h2><a name="GetAllGroups">GetAllGroups</a></h2> <p>Get list of all group names in specified family.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetAllGroups($)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> Group family number (0-4) </td></tr> <tr><td valign=top><b>Returns</b></td> <td>A list of all groups in the specified family in alphabetical order</td></tr> </table></blockquote> <p>Here is a complete list of groups for each family:</p> <blockquote><table class='norm'> <tr><th>Family</th><th>Group Names</th></tr> <tr><td><b>0 (Information&nbsp;Type)</b></td> <td>AFCP, AIFF, APE, APP0, APP1, APP11, APP12, APP13, APP14, APP15, APP4, APP5, APP6, APP8, ASF, Audible, CanonVRD, Composite, DICOM, DNG, DV, DjVu, Ducky, EXE, EXIF, ExifTool, FLAC, FLIR, File, Flash, FlashPix, Font, FotoStation, GIF, GIMP, GeoTiff, H264, HTML, ICC_Profile, ID3, IPTC, ITC, JFIF, JPEG, Jpeg2000, LNK, Leaf, Lytro, M2TS, MIE, MIFF, MNG, MOI, MPC, MPEG, MPF, MXF, MakerNotes, Matroska, Meta, Ogg, OpenEXR, PDF, PICT, PLIST, PNG, PSP, Palm, PanasonicRaw, PhotoCD, PhotoMechanic, Photoshop, PostScript, PrintIM, QuickTime, RAF, RIFF, RSRC, RTF, Radiance, Rawzor, Real, SVG, SigmaRaw, Stim, Theora, Torrent, VCard, Vorbis, XML, XMP, ZIP </td></tr> <tr><td><b>1&nbsp;(Specific&nbsp;Location)</b></td> <td>AC3, AFCP, AIFF, APE, ASF, AVI1, Adobe, AdobeCM, AdobeDNG, Apple, Audible, CIFF, Canon, CanonCustom, CanonRaw, CanonVRD, Casio, Chapter#, Composite, DICOM, DNG, DV, DjVu, DjVu-Meta, Ducky, EPPIM, EXE, EXIF, ExifIFD, ExifTool, FLAC, FLIR, File, Flash, FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GPS, GeoTiff, GlobParamIFD, GraphConv, H264, HP, HTC, HTML, HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv, ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view, ICC_Profile, ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4, IFD0, IFD1, IPTC, IPTC#, ITC, InteropIFD, JFIF, JPEG, JPEG-HDR, JVC, Jpeg2000, KDC_IFD, Kodak, KodakBordersIFD, KodakEffectsIFD, KodakIFD, KyoceraRaw, LNK, Leaf, LeafSubIFD, Leica, Lytro, M2TS, MAC, MIE-Audio, MIE-Camera, MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo, MIE-Image, MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient, MIE-Preview, MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MNG, MOBI, MOI, MPC, MPEG, MPF0, MPImage, MXF, MakerNotes, MakerUnknown, Matroska, MediaJukebox, MetaIFD, Microsoft, Minolta, MinoltaRaw, Motorola, NITF, Nikon, NikonCapture, NikonCustom, NikonScan, Nintendo, Ocad, Ogg, Olympus, OpenEXR, PDF, PICT, PNG, PNG-pHYs, PSP, Palm, Panasonic, PanasonicRaw, Pentax, PhaseOne, PhotoCD, PhotoMechanic, Photoshop, PictureInfo, PostScript, PreviewIFD, PrintIM, ProfileIFD, Qualcomm, QuickTime, RAF, RAF2, RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real, Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4, Real-RA5, Real-RJMD, Reconyx, Ricoh, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD, System, Theora, Torrent, Track#, VCalendar, VCard, Version0, Vorbis, XML, XMP, XMP-DICOM, XMP-GPano, XMP-MP, XMP-MP1, XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album, XMP-apple-fi, XMP-aux, XMP-cc, XMP-cell, XMP-crs, XMP-dc, XMP-dex, XMP-digiKam, XMP-dwc, XMP-exif, XMP-exifEX, XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro, XMP-microsoft, XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-pdf, XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-prism, XMP-prl, XMP-pur, XMP-rdf, XMP-swf, XMP-tiff, XMP-x, XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpMM, XMP-xmpNote, XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg, ZIP </td></tr> <tr><td><b>2&nbsp;(Category)</b></td> <td>Audio, Author, Camera, Document, ExifTool, Image, Location, Other, Preview, Printing, Time, Unknown, Video </td></tr> <tr><td><b>3&nbsp;(Document&nbsp;Number)</b></td> <td>Doc#, Main </td></tr> <tr><td><b>4&nbsp;(Instance&nbsp;Number)</b></td> <td>Copy# </td></tr> </table></blockquote> <p><b>Example:</b></p> <blockquote><table class='box'><tr><td><pre> @groupList = Image::ExifTool::<b>GetAllGroups</b>($family); </pre></td></tr></table></blockquote> <hr><h2><a name="GetDeleteGroups">GetDeleteGroups</a></h2> <p>Get list of all deletable group names.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetDelGroups()</td></tr> <tr><td valign=top><b>Inputs</b></td> <td>None </td></tr> <tr><td valign=top><b>Returns</b></td><td>A list of deletable group names in alphabetical order. </td></tr> </table></blockquote> <p>Below is a current list of deletable group names. All names in this list are either family 0 or family 1 group names, with the exception of '<code>Trailer</code>' which allows all trailers in JPEG and TIFF-format images to be deleted at once, including unknown trailers. To schedule a group for deletion, call <a href="#SetNewValue">SetNewValue</a> with an undefined value and a tag name like '<code>Trailer:*</code>'.</p> <blockquote>AFCP, APP0, APP1, APP10, APP11, APP12, APP13, APP14, APP15, APP2, APP3, APP4, APP5, APP6, APP7, APP8, APP9, Adobe, Audio, Author, CIFF, Camera, CanonVRD, Copyright, Document, Ducky, EXIF, ExifIFD, ExifTool, File, FlashPix, FotoStation, GPS, GlobParamIFD, ICC_Profile, IFD0, IFD1, IPTC, Image, InteropIFD, JFIF, Jpeg2000, Location, MIE, MPF, MakerNotes, Meta, MetaIFD, NikonCapture, Other, PDF, PDF-update, PNG, PNG-pHYs, PhotoMechanic, Photoshop, PrintIM, Printing, RMETA, RSRC, SubIFD, Time, Trailer, Video, XML, XML-*, XMP, XMP-*</blockquote> <p>Note that the JPEG "APP" groups are special, and are used only to delete application segments which are not associated with another deletable group. For example, deleting '<code>APP14:*</code>' will delete other APP14 segments, but not the APP14 "Adobe" segment. Also note that deleting a family 0 or 1 group will delete the entire corresponding block of metadata, but deleting a family 2 group (eg. Audio, Author, Camera, etc.) deletes the individual tags belonging to that category.</p> <p><b>Example:</b></p> <blockquote><table class='box'><tr><td><pre> my @delGroups = Image::ExifTool::<b>GetDelGroups</b>(); </pre></td></tr></table></blockquote> <hr><h2><a name="GetFileType">GetFileType</a></h2> <p>Get type of file given file name.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>GetFileType(;$$)</td></tr> <tr><td valign=top><b>Inputs</b></td> <td><b>0)</b> [<i>optional</i>] File name or extension <br><b>1)</b> [<i>optional</i>] Flag to return a description instead of a type. Set to 0 to return type for recognized but unsupported files (otherwise the return value for unsupported files is undef). </td></tr> <tr><td valign=top><b>Returns</b></td><td>A string, based on the file extension, which indicates the basic format of the file. Note that some files may be based on other formats (like many RAW image formats are based on TIFF). In array context, may return more than one file type if the file may be based on different formats. Returns undef if files with this extension are not yet supported by ExifTool. Returns a list of extensions for all supported file types if no input extension is specified (or all recognized file types if the description flag is set to 0). Returns a more detailed description of the specific file format when the description flag is set.</td></tr> </table></blockquote> <p><b>Examples:</b></p> <blockquote><table class='box'><tr><td><pre> my $type = Image::ExifTool::<b>GetFileType</b>($filename); my $desc = Image::ExifTool::<b>GetFileType</b>($filename, 1); </pre></td></tr></table></blockquote> <hr><h2><a name="CanWrite">CanWrite</a></h2> <p>Can the specified file be written?</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>CanWrite($)</td></tr> <tr><td valign=top><b>Inputs</b></td> <td><b>0)</b> File name or extension</td></tr> <tr><td valign=top><b>Returns</b></td><td>True if ExifTool supports writing files of this type (based on the file extension).</td></tr> </table></blockquote> <p><b>Example:</b></p> <blockquote><table class='box'><tr><td><pre> my $writable = Image::ExifTool::<b>CanWrite</b>($filename); </pre></td></tr></table></blockquote> <hr><h2><a name="CanCreate">CanCreate</a></h2> <p>Can the specified file be created?</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>CanCreate($)</td></tr> <tr><td valign=top><b>Inputs</b></td> <td><b>0)</b> File name or extension</td></tr> <tr><td valign=top><b>Returns</b></td><td>True if ExifTool can create files with this extension from scratch.<br>Currently, this can only be done with XMP, MIE, ICC, VRD, DR4, EXV and EXIF files.</td></tr> </table></blockquote> <p><b>Example:</b></p> <blockquote><table class='box'><tr><td><pre> my $creatable = Image::ExifTool::<b>CanCreate</b>($filename); </pre></td></tr></table></blockquote> <hr><h2><a name="AddUserDefinedTags">AddUserDefinedTags</a></h2> <p>Add user-defined tags to an existing tag table at run time. This differs from the usual technique of creating user-defined tags via the %Image::ExifTool::UserDefined hash (see the <a href="config.html">sample config file</a>), because it allows tags to be added after the tag table has been initialized.</p> <blockquote><table class='norm'> <tr><td><b>Prototype</b></td><td>AddUserDefinedTags($%)</td></tr> <tr><td valign=top><b>Inputs</b></td><td><b>0)</b> Destination tag table name <br><b>1-N)</b> Pairs of tag ID / tag information hash references for the new tags </td></tr> <tr><td valign=top><b>Returns</b></td><td>The number of tags added</td></tr> </table></blockquote> <p><b>Example:</b></p> <blockquote><table class='box'><tr><td><pre> use Image::ExifTool ':Public'; my %tags = ( TestTagID1 => { Name => 'TestTagName1' }, TestTagID2 => { Name => 'TestTagName2' }, ); my $num = <b>AddUserDefinedTags</b>('Image::ExifTool::PDF::Info', %tags); </pre></td></tr></table></blockquote> <p><b>Notes:</b></p> <p>Pre-existing tags with the same ID will be replaced in the destination table. See lib/Image/ExifTool/README in the full distribution for full details on the elements of the tag information hash.</p> <hr> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/exiftool_pod.html���������������������������������������������������������000644 �000765 �000024 �00000433413 12650447076 020733� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>exiftool Application Documentation</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <link rev="made" href="mailto:_securityagent@gamma.local" /> </head> <body style="background-color: white"> <table border="0" width="100%" cellspacing="0" cellpadding="3"> <tr><td class="block" style="background-color: #cccccc" valign="middle"> <big><strong><span class="block">&nbsp;exiftool Application Documentation</span></strong></big> </td></tr> </table> <!-- INDEX BEGIN --> <div name="index"> <p><a name="__index__"></a></p> <ul> <li><a href="#name">NAME</a></li> <li><a href="#synopsis">SYNOPSIS</a></li> <li><a href="#description">DESCRIPTION</a></li> <li><a href="#options">OPTIONS</a></li> <ul> <li><a href="#option_summary">Option Summary</a></li> <li><a href="#option_details">Option Details</a></li> <ul> <li><a href="#tag_operations">Tag operations</a></li> <li><a href="#input_output_text_formatting">Input-output text formatting</a></li> <li><a href="#processing_control">Processing control</a></li> <li><a href="#other_options">Other options</a></li> <li><a href="#special_features">Special features</a></li> <li><a href="#utilities">Utilities</a></li> <li><a href="#advanced_options">Advanced options</a></li> </ul> </ul> <li><a href="#windows_unicode_file_names">WINDOWS UNICODE FILE NAMES</a></li> <li><a href="#writing_read_only_files">WRITING READ-ONLY FILES</a></li> <li><a href="#reading_examples">READING EXAMPLES</a></li> <li><a href="#writing_examples">WRITING EXAMPLES</a></li> <li><a href="#copying_examples">COPYING EXAMPLES</a></li> <li><a href="#renaming_examples">RENAMING EXAMPLES</a></li> <li><a href="#geotagging_examples">GEOTAGGING EXAMPLES</a></li> <li><a href="#piping_examples">PIPING EXAMPLES</a></li> <li><a href="#diagnostics">DIAGNOSTICS</a></li> <li><a href="#author">AUTHOR</a></li> <li><a href="#see_also">SEE ALSO</a></li> </ul> <hr name="index" /> </div> <!-- INDEX END --> <p> </p> <h1><a name="name">NAME</a></h1> <p>exiftool - Read and write meta information in files</p> <p> </p> <hr /> <h1><a name="synopsis">SYNOPSIS</a></h1> <dl> <dt><strong><a name="exiftool_options_tag_tag_file" class="item"><strong>exiftool</strong> [<em>OPTIONS</em>] [-<em>TAG</em>...] [--<em>TAG</em>...] <em>FILE</em>...</a></strong></dt> <dt><strong><a name="exiftool_options_tag_value_file" class="item"><strong>exiftool</strong> [<em>OPTIONS</em>] -<em>TAG</em>[+-&lt;]=[<em>VALUE</em>]... <em>FILE</em>...</a></strong></dt> <dt><strong><a name="exiftool_options_tagsfromfile_srcfile_srctag_dsttag_file" class="item"><strong>exiftool</strong> [<em>OPTIONS</em>] <strong>-tagsFromFile</strong> <em>SRCFILE</em> [-<em>SRCTAG</em>[&gt;<em>DSTTAG</em>]...] <em>FILE</em>...</a></strong></dt> <dt><strong><a name="exiftool_ver_list_w_f_r_wf_g_num_d_x" class="item"><strong>exiftool</strong> [ <strong>-ver</strong> | <strong>-list</strong>[<strong>w</strong>|<strong>f</strong>|<strong>r</strong>|<strong>wf</strong>|<strong>g</strong>[<em>NUM</em>]|<strong>d</strong>|<strong>x</strong>] ]</a></strong></dt> </dl> <p>For specific examples, see the <a href="#reading_examples">EXAMPLES</a> sections below.</p> <p>This documentation is displayed if exiftool is run without an input <em>FILE</em> when one is expected.</p> <p> </p> <hr /> <h1><a name="description">DESCRIPTION</a></h1> <p>A command-line interface to <a href="ExifTool.html">Image::ExifTool</a>, used for reading and writing meta information in a variety of file types. <em>FILE</em> is one or more source file names, directory names, or <code>-</code> for the standard input. Metadata is read from source files and printed in readable form to the console (or written to output text files with <strong>-w</strong>).</p> <p>To write or delete metadata, tag values are assigned using the -<em>TAG</em>=[<em>VALUE</em>] syntax, or the <strong>-geotag</strong> option. To copy or move metadata, the <strong>-tagsFromFile</strong> feature is used. By default the original files are preserved with <code>_original</code> appended to their names -- be sure to verify that the new files are OK before erasing the originals. Once in write mode, exiftool will ignore any read-specific options.</p> <p>Note: If <em>FILE</em> is a directory name then only supported file types in the directory are processed (in write mode only writable types are processed). However, files may be specified by name, or the <strong>-ext</strong> option may be used to force processing of files with any extension. Hidden files in the directory are also processed. Adding the <strong>-r</strong> option causes subdirectories to be processed recursively, but those with names beginning with &quot;.&quot; are skipped unless <strong>-r.</strong> is used.</p> <p>Below is a list of file types and meta information formats currently supported by ExifTool (r = read, w = write, c = create):</p> <pre> File Types ------------+-------------+-------------+-------------+------------ 3FR r | DVB r/w | KEY r | ORF r/w | RWL r/w 3G2 r/w | DYLIB r | LA r | OTF r | RWZ r 3GP r/w | EIP r | LFP r | PAC r | RM r AA r | EPS r/w | LNK r | PAGES r | SEQ r AAX r/w | EPUB r | M2TS r | PBM r/w | SO r ACR r | ERF r/w | M4A/V r/w | PCD r | SR2 r/w AFM r | EXE r | MEF r/w | PDB r | SRF r AI r/w | EXIF r/w/c | MIE r/w/c | PDF r/w | SRW r/w AIFF r | EXR r | MIFF r | PEF r/w | SVG r APE r | EXV r/w/c | MKA r | PFA r | SWF r ARW r/w | F4A/V r/w | MKS r | PFB r | THM r/w ASF r | FFF r/w | MKV r | PFM r | TIFF r/w AVI r | FLA r | MNG r/w | PGF r | TORRENT r AZW r | FLAC r | MOBI r | PGM r/w | TTC r BMP r | FLV r | MODD r | PLIST r | TTF r BTF r | FPF r | MOI r | PICT r | VCF r CHM r | FPX r | MOS r/w | PMP r | VRD r/w/c COS r | GIF r/w | MOV r/w | PNG r/w | VSD r CR2 r/w | GZ r | MP3 r | PPM r/w | WAV r CRW r/w | HDP r/w | MP4 r/w | PPT r | WDP r/w CS1 r/w | HDR r | MPC r | PPTX r | WEBP r DCM r | HTML r | MPG r | PS r/w | WEBM r DCP r/w | ICC r/w/c | MPO r/w | PSB r/w | WMA r DCR r | ICS r | MQV r/w | PSD r/w | WMV r DFONT r | IDML r | MRW r/w | PSP r | WV r DIVX r | IIQ r/w | MXF r | QTIF r/w | X3F r/w DJVU r | IND r/w | NEF r/w | RA r | XCF r DLL r | INX r | NRW r/w | RAF r/w | XLS r DNG r/w | ITC r | NUMBERS r | RAM r | XLSX r DOC r | J2C r | ODP r | RAR r | XMP r/w/c DOCX r | JNG r/w | ODS r | RAW r/w | ZIP r DPX r | JP2 r/w | ODT r | RIFF r | DR4 r/w/c | JPEG r/w | OFR r | RSRC r | DSS r | K25 r | OGG r | RTF r | DV r | KDC r | OGV r | RW2 r/w |</pre> <pre> Meta Information ----------------------+----------------------+--------------------- EXIF r/w/c | CIFF r/w | Ricoh RMETA r GPS r/w/c | AFCP r/w | Picture Info r IPTC r/w/c | Kodak Meta r/w | Adobe APP14 r XMP r/w/c | FotoStation r/w | MPF r MakerNotes r/w/c | PhotoMechanic r/w | Stim r Photoshop IRB r/w/c | JPEG 2000 r | DPX r ICC Profile r/w/c | DICOM r | APE r MIE r/w/c | Flash r | Vorbis r JFIF r/w/c | FlashPix r | SPIFF r Ducky APP12 r/w/c | QuickTime r | DjVu r PDF r/w/c | Matroska r | M2TS r PNG r/w/c | MXF r | PE/COFF r Canon VRD r/w/c | PrintIM r | AVCHD r Nikon Capture r/w/c | FLAC r | ZIP r GeoTIFF r/w/c | ID3 r | (and more)</pre> <p> </p> <hr /> <h1><a name="options">OPTIONS</a></h1> <p>Case is not significant for any command-line option (including tag and group names), except for single-character options when the corresponding upper-case option exists. Many single-character options have equivalent long-name versions (shown in brackets), and some options have inverses which are invoked with a leading double-dash. Unrecognized options are interpreted as tag names (for this reason, multiple single-character options may NOT be combined into one argument). Contrary to standard practice, options may appear after source file names on the exiftool command line.</p> <p> </p> <h2><a name="option_summary">Option Summary</a></h2> <p><a href="#tag_operations">Tag operations</a></p> <pre> -TAG or --TAG Extract or exclude specified tag -TAG[+-]=[VALUE] Write new value for tag -TAG[+-]&lt;=DATFILE Write tag value from contents of file -TAG[+-]&lt;SRCTAG Copy tag value (see -tagsFromFile)</pre> <pre> -tagsFromFile SRCFILE Copy tag values from file -x TAG (-exclude) Exclude specified tag</pre> <p><a href="#input_output_text_formatting">Input-output text formatting</a></p> <pre> -args (-argFormat) Format metadata as exiftool arguments -b (-binary) Output metadata in binary format -c FMT (-coordFormat) Set format for GPS coordinates -charset [[TYPE=]CHARSET] Specify encoding for special characters -csv[=CSVFILE] Export/import tags in CSV format -d FMT (-dateFormat) Set format for date/time values -D (-decimal) Show tag ID numbers in decimal -E, -ex (-escape(HTML|XML)) Escape values for HTML (-E) or XML (-ex) -f (-forcePrint) Force printing of all specified tags -g[NUM...] (-groupHeadings) Organize output by tag group -G[NUM...] (-groupNames) Print group name for each tag -h (-htmlFormat) Use HMTL formatting for output -H (-hex) Show tag ID number in hexadecimal -htmlDump[OFFSET] Generate HTML-format binary dump -j[=JSONFILE] (-json) Export/import tags in JSON format -l (-long) Use long 2-line output format -L (-latin) Use Windows Latin1 encoding -lang [LANG] Set current language -listItem INDEX Extract specific item from a list -n (--printConv) Read/write numerical tag values -p FMTFILE (-printFormat) Print output in specified format -php Export tags as a PHP Array -s[NUM] (-short) Short output format -S (-veryShort) Very short output format -sep STR (-separator) Set separator string for list items -sort Sort output alphabetically -struct Enable output of structured information -t (-tab) Output in tab-delimited list format -T (-table) Output in tabular format -v[NUM] (-verbose) Print verbose messages -w[+|!] EXT (-textOut) Write (or overwrite!) output text files -W[+|!] FMT (-tagOut) Write output text file for each tag -Wext EXT (-tagOutExt) Write only specified file types with -W -X (-xmlFormat) Use RDF/XML output format</pre> <p><a href="#processing_control">Processing control</a></p> <pre> -a (-duplicates) Allow duplicate tags to be extracted -e (--composite) Do not calculate composite tags -ee (-extractEmbedded) Extract information from embedded files -ext EXT (-extension) Process files with specified extension -F[OFFSET] (-fixBase) Fix the base for maker notes offsets -fast[NUM] Increase speed for slow devices -fileOrder [-]TAG Set file processing order -i DIR (-ignore) Ignore specified directory name -if EXPR Conditionally process files -m (-ignoreMinorErrors) Ignore minor errors and warnings -o OUTFILE (-out) Set output file or directory name -overwrite_original Overwrite original by renaming tmp file -overwrite_original_in_place Overwrite original by copying tmp file -P (-preserve) Preserve date/time of original file -password PASSWD Password for processing protected files -progress Show file progress count -q (-quiet) Quiet processing -r[.] (-recurse) Recursively process subdirectories -scanForXMP Brute force XMP scan -u (-unknown) Extract unknown tags -U (-unknown2) Extract unknown binary tags too -wm MODE (-writeMode) Set mode for writing/creating tags -z (-zip) Read/write compressed information</pre> <p><a href="#other_options">Other options</a></p> <pre> -@ ARGFILE Read command-line arguments from file -k (-pause) Pause before terminating -list[w|f|wf|g[NUM]|d|x] List various exiftool capabilities -ver Print exiftool version number</pre> <p><a href="#special_features">Special features</a></p> <pre> -geotag TRKFILE Geotag images from specified GPS log -globalTimeShift SHIFT Shift all formatted date/time values -use MODULE Add features from plug-in module</pre> <p><a href="#utilities">Utilities</a></p> <pre> -delete_original[!] Delete &quot;_original&quot; backups -restore_original Restore from &quot;_original&quot; backups</pre> <p><a href="#advanced_options">Advanced options</a></p> <pre> -api OPT[=VAL] Set ExifTool API option -common_args Define common arguments -config CFGFILE Specify configuration file name -echo[NUM] TEXT Echo text to stdout or stderr -execute[NUM] Execute multiple commands on one line -srcfile FMT Set different source file name -stay_open FLAG Keep reading -@ argfile even after EOF -userParam PARAM[=VAL] Set user parameter (API UserParam opt)</pre> <p> </p> <h2><a name="option_details">Option Details</a></h2> <p> </p> <h3><a name="tag_operations">Tag operations</a></h3> <dl> <dt><strong><a name="tag" class="item"><strong>-</strong><em>TAG</em></a></strong></dt> <dd> <p>Extract information for the specified tag (eg. <code>-CreateDate</code>). Multiple tags may be specified in a single command. A tag name is the handle by which a piece of information is referenced. See <a href="TagNames/index.html">Image::ExifTool::TagNames</a> for documentation on available tag names. A tag name may include leading group names separated by colons (eg. <code>-EXIF:CreateDate</code>, or <code>-Doc1:XMP:Creator</code>), and each group name may be prefixed by a digit to specify family number (eg. <code>-1IPTC:City</code>). Use the <strong>-listg</strong> option to list available group names by family.</p> <p>A special tag name of <code>All</code> may be used to indicate all meta information. This is particularly useful when a group name is specified to extract all information in a group (but beware that unless the <strong>-a</strong> option is also used, some tags in the group may be suppressed by same-named tags in other groups). The wildcard characters <code>?</code> and <code>*</code> may be used in a tag name to match any single character and zero or more characters respectively. These may not be used in a group name, with the exception that a group name of <code>*</code> (or <code>All</code>) may be used to extract all instances of a tag (as if <strong>-a</strong> was used). Note that arguments containing wildcards must be quoted on the command line of most systems to prevent shell globbing.</p> <p>A <code>#</code> may be appended to the tag name to disable the print conversion on a per-tag basis (see the <strong>-n</strong> option). This may also be used when writing or copying tags.</p> <p>If no tags are specified, all available information is extracted (as if <code>-All</code> had been specified).</p> <p>Note: Descriptions, not tag names, are shown by default when extracting information. Use the <strong>-s</strong> option to see the tag names instead.</p> </dd> <dt><strong><a name="tag2" class="item"><strong>--</strong><em>TAG</em></a></strong></dt> <dd> <p>Exclude specified tag from extracted information. Same as the <strong>-x</strong> option. Group names and wildcards are permitted as described above for <strong>-TAG</strong>. Once excluded from the output, a tag may not be re-included by a subsequent option. May also be used following a <strong>-tagsFromFile</strong> option to exclude tags from being copied (when redirecting to another tag, it is the source tag that should be excluded), or to exclude groups from being deleted when deleting all information (eg. <code>-all= --exif:all</code> deletes all but EXIF information). But note that this will not exclude individual tags from a group delete (unless a family 2 group is specified, see note 4 below). Instead, individual tags may be recovered using the <strong>-tagsFromFile</strong> option (eg. <code>-all= -tagsfromfile @ -artist</code>).</p> </dd> <dt><strong><a name="tag_value" class="item"><strong>-</strong><em>TAG</em>[+-]<strong>=</strong>[<em>VALUE</em>]</a></strong></dt> <dd> <p>Write a new value for the specified tag (eg. <code>-comment=wow</code>), or delete the tag if no <em>VALUE</em> is given (eg. <code>-comment=</code>). <code>+=</code> and <code>-=</code> are used to add or remove existing entries from a list, or to shift date/time values (see <a href="Shift.html">Image::ExifTool::Shift.pl</a> for details). <code>+=</code> may also be used to increment numerical values, and <code>-=</code> may be used to conditionally delete or replace a tag (see <a href="#writing_examples">WRITING EXAMPLES</a> for examples).</p> <p><em>TAG</em> may contain one or more leading family 0, 1 or 2 group names, prefixed by optional family numbers, and separated colons. If no group name is specified, the tag is created in the preferred group, and updated in any other location where a same-named tag already exists. The preferred group is the first group in the following list where <em>TAG</em> is valid: 1) EXIF, 2) IPTC, 3) XMP.</p> <p>The wildcards <code>*</code> and <code>?</code> may be used in tag names to assign the same value to multiple tags. When specified with wildcards, &quot;unsafe&quot; tags are not written. A tag name of <code>All</code> is eqivalent to <code>*</code> (except that it doesn't require quoting, while arguments with wildcards do on systems with shell globbing), and is often used when deleting all metadata (ie. <code>-All=</code>) or an entire group (eg. <code>-GROUP:All=</code>, see note 4 below). Note that not all groups are deletable, and that the JPEG APP14 &quot;Adobe&quot; group is not removed by default with <code>-All=</code> because it may affect the appearance of the image. However, this will remove color space information, so the colors may be affected (but this may be avoided by copying back the tags defined by the ColorSpaceTags shortcut). Use the <strong>-listd</strong> option for a complete list of deletable groups, and see note 5 below regarding the &quot;APP&quot; groups. Also, within an image some groups may be contained within others, and these groups are removed if the containing group is deleted:</p> <pre> JPEG Image: - Deleting EXIF or IFD0 also deletes ExifIFD, GlobParamIFD, GPS, IFD1, InteropIFD, MakerNotes, PrintIM and SubIFD. - Deleting ExifIFD also deletes InteropIFD and MakerNotes. - Deleting Photoshop also deletes IPTC.</pre> <pre> TIFF Image: - Deleting EXIF only removes ExifIFD which also deletes InteropIFD and MakerNotes.</pre> <p>Notes:</p> <p>1) <strong>Many tag values may be assigned in a single command</strong>. If two assignments affect the same tag, the latter takes precedence (except for list-type tags, for which both values are written).</p> <p>2) In general, MakerNotes tags are considered &quot;Permanent&quot;, and may be edited but not created or deleted individually. This avoids many potential problems, including the inevitable compatibility problems with OEM software which may be very inflexible about the information it expects to find in the maker notes.</p> <p>3) Changes to PDF files are reversible because the original information is never actually deleted from the file. So ExifTool alone may not be used to securely edit metadata in PDF files.</p> <p>4) Specifying <code>-GROUP:all=</code> deletes the entire group as a block only if a single family 0 or 1 group is specified. Otherwise all deletable tags in the specified group(s) are removed individually, and in this case is it possible to exclude individual tags from a mass delete. For example, <code>-time:all --Exif:Time:All</code> removes all deletable Time tags except those in the EXIF. This difference also applies if family 2 is specified when deleting all groups. For example, <code>-2all:all=</code> deletes tags individually, while <code>-all:all=</code> deletes entire blocks.</p> <p>5) The &quot;APP&quot; group names (&quot;APP0&quot; through &quot;APP15&quot;) are used to delete JPEG application segments which are not associated with another deletable group. For example, specifying <code>-APP14:All=</code> will NOT delete the APP14 &quot;Adobe&quot; segment because this is accomplished with <code>-Adobe:All</code>.</p> <p>Special feature: Integer values may be specified in hexadecimal with a leading <code>0x</code>, and simple rational values may be specified as fractions.</p> </dd> <dt><strong><a name="tag_datfile_or_tag_fmt" class="item"><strong>-</strong><em>TAG</em>&lt;=<em>DATFILE</em> or <strong>-</strong><em>TAG</em>&lt;=<em>FMT</em></a></strong></dt> <dd> <p>Set the value of a tag from the contents of file <em>DATFILE</em>. The file name may also be given by a <em>FMT</em> string where %d, %f and %e represent the directory, file name and extension of the original <em>FILE</em> (see the <strong>-w</strong> option for more details). Note that quotes are required around this argument to prevent shell redirection since it contains a <code>&lt;</code> symbol. If <em>DATFILE</em>/<em>FMT</em> is not provided, the effect is the same as <a href="#tag"><code>-TAG=</code></a>, and the tag is simply deleted. <code>+&lt;=</code> or <code>-&lt;=</code> may also be used to add or delete specific list entries, or to shift date/time values.</p> </dd> <dt><strong><a name="tagsfromfile_srcfile_or_fmt" class="item"><strong>-tagsFromFile</strong> <em>SRCFILE</em> or <em>FMT</em></a></strong></dt> <dd> <p>Copy tag values from <em>SRCFILE</em> to <em>FILE</em>. Tag names on the command line after this option specify the tags to be copied, or excluded from the copy. Wildcards are permitted in these tag names. If no tags are specified, then all possible tags (see note 1 below) from the source file are copied to same-named tags in the preferred location of the output file (the same as specifying <code>-all</code>). More than one <strong>-tagsFromFile</strong> option may be used to copy tags from multiple files.</p> <p>By default, this option will update any existing and writable same-named tags in the output <em>FILE</em>, but will create new tags only in their preferred groups. This allows some information to be automatically transferred to the appropriate group when copying between images of different formats. However, if a group name is specified for a tag then the information is written only to this group (unless redirected to another group, see below). If <code>All</code> is used as a group name, then the specified tag(s) are written to the same family 1 group they had in the source file (ie. the same specific location, like ExifIFD or XMP-dc). For example, the common operation of copying all writable tags to the same specific locations in the output <em>FILE</em> is achieved by adding <code>-all:all</code>. A different family may be specified by adding a leading family number to the group name (eg. <code>-0all:all</code> preserves the same general location, like EXIF or XMP).</p> <p><em>SRCFILE</em> may be the same as <em>FILE</em> to move information around within a single file. In this case, <code>@</code> may be used to represent the source file (ie. <code>-tagsFromFile @</code>), permitting this feature to be used for batch processing multiple files. Specified tags are then copied from each file in turn as it is rewritten. For advanced batch use, the source file name may also be specified using a <em>FMT</em> string in which %d, %f and %e represent the directory, file name and extension of <em>FILE</em>. See <strong>-w</strong> option for <em>FMT</em> string examples.</p> <p>A powerful redirection feature allows a destination tag to be specified for each copied tag. With this feature, information may be written to a tag with a different name or group. This is done using &quot;'-<em>DSTTAG</em>&lt;<em>SRCTAG</em>'&quot; or &quot;'-<em>SRCTAG</em>&gt;<em>DSTTAG</em>'&quot; on the command line after <strong>-tagsFromFile</strong>, and causes the value of <em>SRCTAG</em> to be copied from <em>SRCFILE</em> and written to <em>DSTTAG</em> in <em>FILE</em>. Note that this argument must be quoted to prevent shell redirection, and there is no <code>=</code> sign as when assigning new values. Source and/or destination tags may be prefixed by a group name and/or suffixed by <code>#</code>. Wildcards are allowed in both the source and destination tag names. A destination group and/or tag name of <code>All</code> or <code>*</code> writes to the same family 1 group and/or tag name as the source. If no destination group is specified, the information is written to the preferred group. Whitespace around the <code>&gt;</code> or <code>&lt;</code> is ignored. As a convenience, <code>-tagsFromFile @</code> is assumed for any redirected tags which are specified without a prior <strong>-tagsFromFile</strong> option. Copied tags may also be added or deleted from a list with arguments of the form &quot;'-<em>SRCTAG</em>+&lt;<em>DSTTAG</em>'&quot; or &quot;'-<em>SRCTAG</em>-&lt;<em>DSTTAG</em>'&quot;.</p> <p>An extension of the redirection feature allows strings involving tag names to be used on the right hand side of the <code>&lt;</code> symbol with the syntax &quot;'-<em>DSTTAG</em>&lt;<em>STR</em>'&quot;, where tag names in <em>STR</em> are prefixed with a <code>$</code> symbol. See the <strong>-p</strong> option for more details about this syntax. Strings starting with a <code>=</code> sign must insert a single space after the <code>&lt;</code> to avoid confusion with the <code>&lt;=</code> operator which sets the tag value from the contents of a file. A single space at the start of the string is removed if it exists, but all other whitespace in the string is preserved. See note 8 below about using shortcuts or wildcards with the redirection feature.</p> <p>See <a href="#copying_examples">COPYING EXAMPLES</a> for examples using <strong>-tagsFromFile</strong>.</p> <p>Notes:</p> <p>1) Some tags (generally tags which may affect the appearance of the image) are considered &quot;unsafe&quot; to write, and are only copied if specified explicitly (ie. no wildcards). See the <a href="TagNames/index.html">tag name documentation</a> for more details about &quot;unsafe&quot; tags.</p> <p>2) Be aware of the difference between excluding a tag from being copied (--<em>TAG</em>), and deleting a tag (-<em>TAG</em>=). Excluding a tag prevents it from being copied to the destination image, but deleting will remove a pre-existing tag from the image.</p> <p>3) The maker note information is copied as a block, so it isn't affected like other information by subsequent tag assignments on the command line. Also, since the PreviewImage referenced from the maker notes may be rather large, it is not copied, and must be transferred separately if desired.</p> <p>4) The order of operations is to copy all specified tags at the point of the <strong>-tagsFromFile</strong> option in the command line. Any tag assignment to the right of the <strong>-tagsFromFile</strong> option is made after all tags are copied. For example, new tag values are set in the order One, Two, Three then Four with this command:</p> <pre> exiftool -One=1 -tagsFromFile s.jpg -Two -Four=4 -Three d.jpg</pre> <p>This is significant in the case where an overlap exists between the copied and assigned tags because later operations may override earlier ones.</p> <p>5) The normal behaviour of copied tags differs subtly from that of assigned tags for list-type tags. When copying to a list, each copied tag overrides any previous operations on the list. While this avoids duplicate list items when copying groups of tags from a file containing redundant information, it also prevents values of different tags from being copied into the same list when this is the intent. So a <strong>-addTagsFromFile</strong> option is provided which allows copying of multiple tags into the same list. eg)</p> <pre> exiftool -addtagsfromfile @ '-subject&lt;make' '-subject&lt;model' ...</pre> <p>Other than this difference, the <strong>-tagsFromFile</strong> and <strong>-addTagsFromFile</strong> options are equivalent.</p> <p>6) The <strong>-a</strong> option (allow duplicate tags) is always in effect when copying tags from <em>SRCFILE</em>.</p> <p>7) Structured tags are copied by default when copying tags. See the <strong>-struct</strong> option for details.</p> <p>8) With the redirection feature, copying a tag directly (ie. &quot;'-<em>DSTTAG</em>&lt;<em>SRCTAG</em>'&quot;) is not the same as interpolating its value inside a string (ie. &quot;'-<em>DSTTAG</em>&lt;$<em>SRCTAG</em>'&quot;) for <a href="http://search.cpan.org/dist/Image-ExifTool/lib/Image/ExifTool/Shortcuts.pm">shortcut tags</a> or tag names containing wildcards. When copying directly, the values of each matching source tag are copied individually to the destination tag (as if multiple redirection arguments were used). However, when interpolated inside a string, the values of shortcut tags are concatenated, and wildcards are not allowed.</p> </dd> <dt><strong><strong>-x</strong> <em>TAG</em> (<strong>-exclude</strong>)</strong></dt> <dd> <p>Exclude the specified tag. There may be multiple <strong>-x</strong> options. This has the same effect as --<em>TAG</em> on the command line. See the --<em>TAG</em> documentation above for a complete description.</p> </dd> </dl> <p> </p> <h3><a name="input_output_text_formatting">Input-output text formatting</a></h3> <p>Note that trailing spaces are removed from extracted values for most output text formats. The exceptions are <a href="#b"><code>-b</code></a>, <code>-csv</code>, <code>-j</code> and <a href="#x"><code>-X</code></a>.</p> <dl> <dt><strong><a name="args" class="item"><strong>-args</strong> (<strong>-argFormat</strong>)</a></strong></dt> <dd> <p>Output information in the form of exiftool arguments, suitable for use with the <strong>-@</strong> option when writing. May be combined with the <strong>-G</strong> option to include group names. This feature may be used to effectively copy tags between images, but allows the metadata to be altered by editing the intermediate file (<code>out.args</code> in this example):</p> <pre> exiftool -args -G1 --filename --directory src.jpg &gt; out.args exiftool -@ out.args dst.jpg</pre> <p>Note: Be careful when copying information with this technique since it is easy to write tags which are normally considered &quot;unsafe&quot;. For instance, the FileName and Directory tags are excluded in the example above to avoid renaming and moving the destination file. Also note that the second command above will produce warning messages for any tags which are not writable.</p> <p>As well, the <strong>-sep</strong> option should be used when reading back to maintain separate list items, and the <strong>-struct</strong> option may be used when extracting to preserve structured XMP information.</p> </dd> <dt><strong><a name="b" class="item"><strong>-b</strong> (<strong>-binary</strong>)</a></strong></dt> <dd> <p>Output requested metadata in binary format without tag names or descriptions. This option is mainly used for extracting embedded images or other binary data, but it may also be useful for some text strings since control characters (such as newlines) are not replaced by '.' as they are in the default output. List items are separated by a newline when extracted with the <strong>-b</strong> option. May be combined with <code>-j</code>, <a href="#php"><code>-php</code></a> or <a href="#x"><code>-X</code></a> to extract binary data in JSON, PHP or XML format.</p> </dd> <dt><strong><a name="fmt" class="item"><strong>-c</strong> <em>FMT</em> (<strong>-coordFormat</strong>)</a></strong></dt> <dd> <p>Set the print format for GPS coordinates. <em>FMT</em> uses the same syntax as the <code>printf</code> format string. The specifiers correspond to degrees, minutes and seconds in that order, but minutes and seconds are optional. For example, the following table gives the output for the same coordinate using various formats:</p> <pre> FMT Output ------------------- ------------------ &quot;%d deg %d' %.2f&quot;\&quot; 54 deg 59' 22.80&quot; (default for reading) &quot;%d %d %.8f&quot; 54 59 22.80000000 (default for copying) &quot;%d deg %.4f min&quot; 54 deg 59.3800 min &quot;%.6f degrees&quot; 54.989667 degrees</pre> <p>Notes:</p> <p>1) To avoid loss of precision, the default coordinate format is different when copying tags using the <strong>-tagsFromFile</strong> option.</p> <p>2) If the hemisphere is known, a reference direction (N, S, E or W) is appended to each printed coordinate, but adding a <code>+</code> to the format specifier (eg. <code>%+.6f</code>) prints a signed coordinate instead.</p> <p>3) This print formatting may be disabled with the <strong>-n</strong> option to extract coordinates as signed decimal degrees.</p> </dd> <dt><strong><a name="charset_type_charset" class="item"><strong>-charset</strong> [[<em>TYPE</em>=]<em>CHARSET</em>]</a></strong></dt> <dd> <p>If <em>TYPE</em> is <code>ExifTool</code> or not specified, this option sets the ExifTool character encoding for output tag values when reading and input values when writing. The default ExifTool encoding is <code>UTF8</code>. If no <em>CHARSET</em> is given, a list of available character sets is returned. Valid <em>CHARSET</em> values are:</p> <pre> CHARSET Alias(es) Description ---------- --------------- ---------------------------------- UTF8 cp65001, UTF-8 UTF-8 characters (default) Latin cp1252, Latin1 Windows Latin1 (West European) Latin2 cp1250 Windows Latin2 (Central European) Cyrillic cp1251, Russian Windows Cyrillic Greek cp1253 Windows Greek Turkish cp1254 Windows Turkish Hebrew cp1255 Windows Hebrew Arabic cp1256 Windows Arabic Baltic cp1257 Windows Baltic Vietnam cp1258 Windows Vietnamese Thai cp874 Windows Thai MacRoman cp10000, Roman Macintosh Roman MacLatin2 cp10029 Macintosh Latin2 (Central Europe) MacCyrillic cp10007 Macintosh Cyrillic MacGreek cp10006 Macintosh Greek MacTurkish cp10081 Macintosh Turkish MacRomanian cp10010 Macintosh Romanian MacIceland cp10079 Macintosh Icelandic MacCroatian cp10082 Macintosh Croatian</pre> <p><em>TYPE</em> may be <code>FileName</code> to specify the encoding of file names on the command line (ie. <em>FILE</em> arguments). In Windows, this triggers use of wide-character i/o routines, thus providing support for Unicode file names. See the <a href="#windows_unicode_file_names">WINDOWS UNICODE FILE NAMES</a> section below for details.</p> <p>Other values of <em>TYPE</em> listed below are used to specify the internal encoding of various meta information formats.</p> <pre> TYPE Description Default --------- ------------------------------------------- ------- EXIF Internal encoding of EXIF &quot;ASCII&quot; strings (none) ID3 Internal encoding of ID3v1 information Latin IPTC Internal IPTC encoding to assume when Latin IPTC:CodedCharacterSet is not defined Photoshop Internal encoding of Photoshop IRB strings Latin QuickTime Internal encoding of QuickTime strings MacRoman</pre> <p>See <a href="http://owl.phy.queensu.ca/~phil/exiftool/faq.html#Q10">http://owl.phy.queensu.ca/~phil/exiftool/faq.html#Q10</a> for more information about coded character sets.</p> </dd> <dt><strong><a name="csv_csvfile" class="item"><strong>-csv</strong>[=<em>CSVFILE</em>]</a></strong></dt> <dd> <p>Export information in CSV format, or import information if <em>CSVFILE</em> is specified. When importing, the CSV file must be in exactly the same format as the exported file. The first row of the <em>CSVFILE</em> must be the ExifTool tag names (with optional group names) for each column of the file, and values must be separated by commas. A special &quot;SourceFile&quot; column specifies the files associated with each row of information (and a SourceFile of &quot;*&quot; may be used to define default tags to be imported for all files). The following examples demonstrate basic use of this option:</p> <pre> # generate CSV file with common tags from all images in a directory exiftool -common -csv dir &gt; out.csv</pre> <pre> # update metadata for all images in a directory from CSV file exiftool -csv=a.csv dir</pre> <p>Empty values are ignored when importing. Also, FileName and Directory columns are ignored if they exist (ie. ExifTool will not attempt to write these tags with a CSV import). To force a tag to be deleted, use the <strong>-f</strong> option and set the value to &quot;-&quot; in the CSV file (or to the MissingTagValue if this API option was used). Multiple databases may be imported in a single command.</p> <p>When exporting a CSV file, the <strong>-g</strong> or <strong>-G</strong> option to add group names to the tag headings. If the <strong>-a</strong> option is used to allow duplicate tag names, the duplicate tags are only included in the CSV output if the column headings are unique. Adding the <strong>-G4</strong> option ensures a unique column heading for each tag. When exporting specific tags, the CSV columns are arranged in the same order as the specified tags provided the column headings exactly match the specified tag names, otherwise the columns are sorted in alphabetical order.</p> <p>When importing from a CSV file, only files specified on the command line are processed. Any extra entries in the CSV file are ignored.</p> <p>List-type tags are stored as simple strings in a CSV file, but the <strong>-sep</strong> option may be used to split them back into separate items when importing.</p> <p>Special feature: <strong>-csv</strong>+=<em>CSVFILE</em> may be used to add items to existing lists. This affects only list-type tags. Also applies to the <strong>-j</strong> option.</p> <p>Note that this option is fundamentally different than all other output format options because it requires information from all input files to be buffered in memory before the output is written. This may result in excessive memory usage when processing a very large number of files with a single command. Also, it makes this option incompatible with the <strong>-w</strong> option.</p> </dd> <dt><strong><strong>-d</strong> <em>FMT</em> (<strong>-dateFormat</strong>)</strong></dt> <dd> <p>Set the format for date/time tag values. The specifics of the <em>FMT</em> syntax are system dependent -- consult the <code>strftime</code> man page on your system for details. The default format is equivalent to &quot;%Y:%m:%d %H:%M:%S&quot;. This option has no effect on date-only or time-only tags and ignores timezone information if present. Only one <strong>-d</strong> option may be used per command. The inverse operation (ie. un-formatting a date/time value) is currently not applied when writing a date/time tag.</p> </dd> <dt><strong><a name="d" class="item"><strong>-D</strong> (<strong>-decimal</strong>)</a></strong></dt> <dd> <p>Show tag ID number in decimal when extracting information.</p> </dd> <dt><strong><a name="ex" class="item"><strong>-E</strong>, <strong>-ex</strong> (<strong>-escapeHTML</strong>, <strong>-escapeXML</strong>)</a></strong></dt> <dd> <p>Escape characters in output values for HTML (<strong>-E</strong>) or XML (<strong>-ex</strong>). For HTML, all characters with Unicode code points above U+007F are escaped as well as the following 5 characters: &amp; (&amp;amp;) &#39; (&amp;#39;) &quot; (&amp;quot;) &gt; (&amp;gt;) and &lt; (&amp;lt;). For XML, only these 5 characters are escaped. The <strong>-E</strong> option is implied with <strong>-h</strong>, and <strong>-ex</strong> is implied with <strong>-X</strong>. The inverse conversion is applied when writing tags.</p> </dd> <dt><strong><a name="f" class="item"><strong>-f</strong> (<strong>-forcePrint</strong>)</a></strong></dt> <dd> <p>Force printing of tags even if their values are not found. This option only applies when specific tags are requested on the command line (ie. not with wildcards or by <code>-all</code>). With this option, a dash (<code>-</code>) is printed for the value of any missing tag, but the dash may be changed via the API MissingTagValue option. May also be used to add a 'flags' attribute to the <strong>-listx</strong> output, or to allow tags to be deleted when writing with the <strong>-csv</strong>=<em>CSVFILE</em> feature.</p> </dd> <dt><strong><a name="g_num_num_groupheadings" class="item"><strong>-g</strong>[<em>NUM</em>][:<em>NUM</em>...] (<strong>-groupHeadings</strong>)</a></strong></dt> <dd> <p>Organize output by tag group. <em>NUM</em> specifies a group family number, and may be 0 (general location), 1 (specific location), 2 (category), 3 (document number) or 4 (instance number). Multiple families may be specified by separating them with colons. By default the resulting group name is simplified by removing any leading <code>Main:</code> and collapsing adjacent identical group names, but this can be avoided by placing a colon before the first family number (eg. <strong>-g:3:1</strong>). If <em>NUM</em> is not specified, <strong>-g0</strong> is assumed. Use the <strong>-listg</strong> option to list group names for a specified family.</p> </dd> <dt><strong><a name="g_num_num_groupnames" class="item"><strong>-G</strong>[<em>NUM</em>][:<em>NUM</em>...] (<strong>-groupNames</strong>)</a></strong></dt> <dd> <p>Same as <strong>-g</strong> but print group name for each tag.</p> </dd> <dt><strong><a name="h" class="item"><strong>-h</strong> (<strong>-htmlFormat</strong>)</a></strong></dt> <dd> <p>Use HTML table formatting for output. Implies the <strong>-E</strong> option. The formatting options <strong>-D</strong>, <strong>-H</strong>, <strong>-g</strong>, <strong>-G</strong>, <strong>-l</strong> and <strong>-s</strong> may be used in combination with <strong>-h</strong> to influence the HTML format.</p> </dd> <dt><strong><a name="h" class="item"><strong>-H</strong> (<strong>-hex</strong>)</a></strong></dt> <dd> <p>Show tag ID number in hexadecimal when extracting information.</p> </dd> <dt><strong><a name="htmldump_offset" class="item"><strong>-htmlDump</strong>[<em>OFFSET</em>]</a></strong></dt> <dd> <p>Generate a dynamic web page containing a hex dump of the EXIF information. This can be a very powerful tool for low-level analysis of EXIF information. The <strong>-htmlDump</strong> option is also invoked if the <strong>-v</strong> and <strong>-h</strong> options are used together. The verbose level controls the maximum length of the blocks dumped. An <em>OFFSET</em> may be given to specify the base for displayed offsets. If not provided, the EXIF/TIFF base offset is used. Use <strong>-htmlDump0</strong> for absolute offsets. Currently only EXIF/TIFF and JPEG information is dumped, but the -u option can be used to give a raw hex dump of other file formats.</p> </dd> <dt><strong><a name="j_jsonfile_json" class="item"><strong>-j</strong>[=<em>JSONFILE</em>] (<strong>-json</strong>)</a></strong></dt> <dd> <p>Use JSON (JavaScript Object Notation) formatting for console output, or import JSON file if <em>JSONFILE</em> is specified. This option may be combined with <strong>-g</strong> to organize the output into objects by group, or <strong>-G</strong> to add group names to each tag. List-type tags with multiple items are output as JSON arrays unless <strong>-sep</strong> is used. By default XMP structures are flattened into individual tags in the JSON output, but the original structure may be preserved with the <strong>-struct</strong> option (this also causes all list-type XMP tags to be output as JSON arrays, otherwise single-item lists are output as simple strings). The <strong>-a</strong> option is implied if the <strong>-g</strong> or <strong>-G</strong> options are used, otherwise it is ignored and duplicate tags are suppressed. Adding the <strong>-D</strong> or <strong>-H</strong> option changes tag values to JSON objects with &quot;val&quot; and &quot;id&quot; fields, and adding <strong>-l</strong> adds a &quot;desc&quot; field, and a &quot;num&quot; field if the numerical value is different from the converted &quot;val&quot;. The <strong>-b</strong> option may be added to output binary data, encoded in base64 if necessary (indicated by &quot;base64:&quot; as the first 7 bytes of the value). The JSON output is UTF-8 regardless of any <strong>-L</strong> or <strong>-charset</strong> option setting, but the UTF-8 validation is disabled if a character set other than UTF-8 is specified.</p> <p>If <em>JSONFILE</em> is specified, the file is imported and the tag definitions from the file are used to set tag values on a per-file basis. The special &quot;SourceFile&quot; entry in each JSON object associates the information with a specific target file. An object with a missing SourceFile or a SourceFile of &quot;*&quot; defines default tags for all target files. The imported JSON file must have the same format as the exported JSON files with the exception that the <strong>-g</strong> option is not compatible with the import file format (use <strong>-G</strong> instead). Additionally, tag names in the input JSON file may be suffixed with a <code>#</code> to disable print conversion.</p> <p>Unlike CSV import, empty values are not ignored, and will cause an empty value to be written if supported by the specific metadata type. Tags are deleted by using the <strong>-f</strong> option and setting the tag value to &quot;-&quot; (or to the MissingTagValue setting if this API option was used). Importing with <strong>-j</strong>+=<em>JSONFILE</em> causes new values to be added to existing lists.</p> </dd> <dt><strong><a name="l" class="item"><strong>-l</strong> (<strong>-long</strong>)</a></strong></dt> <dd> <p>Use long 2-line Canon-style output format. Adds a description and unconverted value (if it is different from the converted value) to the XML, JSON or PHP output when <strong>-X</strong>, <strong>-j</strong> or <strong>-php</strong> is used. May also be combined with <strong>-listf</strong>, <strong>-listr</strong> or <strong>-listwf</strong> to add descriptions of the file types.</p> </dd> <dt><strong><a name="l" class="item"><strong>-L</strong> (<strong>-latin</strong>)</a></strong></dt> <dd> <p>Use Windows Latin1 encoding (cp1252) for output tag values instead of the default UTF-8. When writing, <strong>-L</strong> specifies that input text values are Latin1 instead of UTF-8. Equivalent to <code>-charset latin</code>.</p> </dd> <dt><strong><a name="lang_lang" class="item"><strong>-lang</strong> [<em>LANG</em>]</a></strong></dt> <dd> <p>Set current language for tag descriptions and converted values. <em>LANG</em> is <code>de</code>, <code>fr</code>, <code>ja</code>, etc. Use <strong>-lang</strong> with no other arguments to get a list of available languages. The default language is <code>en</code> if <strong>-lang</strong> is not specified. Note that tag/group names are always English, independent of the <strong>-lang</strong> setting, and translation of warning/error messages has not yet been implemented. May also be combined with <strong>-listx</strong> to output descriptions in one language only.</p> <p>By default, ExifTool uses UTF-8 encoding for special characters, but the the <strong>-L</strong> or <strong>-charset</strong> option may be used to invoke other encodings.</p> <p>Currently, the language support is not complete, but users are welcome to help improve this by submitting their own translations. To submit a set of translations, first use the <strong>-listx</strong> option and redirect the output to a file to generate an XML tag database, then add entries for other languages, zip this file, and email it to phil at owl.phy.queensu.ca for inclusion in ExifTool.</p> </dd> <dt><strong><a name="listitem_index" class="item"><strong>-listItem</strong> <em>INDEX</em></a></strong></dt> <dd> <p>For list-type tags, this causes only the item with the specified index to be extracted. <em>INDEX</em> is 0 for the first item in the list. Negative indices may also be used to reference items from the end of the list. Has no effect on single-valued tags. Also applies to tag values when copying, and in <strong>-if</strong> conditions.</p> </dd> <dt><strong><a name="n" class="item"><strong>-n</strong> (<strong>--printConv</strong>)</a></strong></dt> <dd> <p>Read and write values as numbers instead of words. By default, extracted values are converted to a more human-readable format for printing, but the <strong>-n</strong> option disables this print conversion for all tags. For example:</p> <pre> &gt; exiftool -Orientation -S a.jpg Orientation: Rotate 90 CW &gt; exiftool -Orientation -S -n a.jpg Orientation: 6</pre> <p>The print conversion may also be disabled on a per-tag basis by suffixing the tag name with a <code>#</code> character:</p> <pre> &gt; exiftool -Orientation# -Orientation -S a.jpg Orientation: 6 Orientation: Rotate 90 CW</pre> <p>These techniques may also be used to disable the inverse print conversion when writing. For example, the following commands all have the same effect:</p> <pre> &gt; exiftool -Orientation='Rotate 90 CW' a.jpg &gt; exiftool -Orientation=6 -n a.jpg &gt; exiftool -Orientation#=6 a.jpg</pre> </dd> <dt><strong><a name="str" class="item"><strong>-p</strong> <em>FMTFILE</em> or <em>STR</em> (<strong>-printFormat</strong>)</a></strong></dt> <dd> <p>Print output in the format specified by the given file or string (and ignore other format options). Tag names in the format file or string begin with a <code>$</code> symbol and may contain a leading group names and/or a trailing <code>#</code>. Case is not significant. Braces <code>{}</code> may be used around the tag name to separate it from subsequent text. Use <code>$$</code> to represent a <code>$</code> symbol, and <code>$/</code> for a newline. Multiple <strong>-p</strong> options may be used, each contributing a line of text to the output. Lines beginning with <code>#[HEAD]</code> and <code>#[TAIL]</code> are output only for the first and last processed files respectively. Lines beginning with <code>#[BODY]</code> and lines not beginning with <code>#</code> are output for each processed file. Other lines beginning with <code>#</code> are ignored. For example, this format file:</p> <pre> # this is a comment line #[HEAD]-- Generated by ExifTool $exifToolVersion -- File: $FileName - $DateTimeOriginal (f/$Aperture, ${ShutterSpeed}s, ISO $EXIF:ISO) #[TAIL]-- end --</pre> <p>with this command:</p> <pre> exiftool -p test.fmt a.jpg b.jpg</pre> <p>produces output like this:</p> <pre> -- Generated by ExifTool 10.10 -- File: a.jpg - 2003:10:31 15:44:19 (f/5.6, 1/60s, ISO 100) File: b.jpg - 2006:05:23 11:57:38 (f/8.0, 1/13s, ISO 100) -- end --</pre> <p>When <strong>-ee</strong> (<strong>-extractEmbedded</strong>) is combined with <strong>-p</strong>, embedded documents are effectively processed as separate input files.</p> <p>If a specified tag does not exist, a minor warning is issued and the line with the missing tag is not printed. However, the <strong>-f</strong> option may be used to set the value of missing tags to '-' (but this may be configured via the MissingTagValue API option), or the <strong>-m</strong> option may be used to ignore minor warnings and leave the missing values empty.</p> <p>An advanced formatting feature allows an arbitrary Perl expression to be applied to the value of any tag by placing it inside the braces after a semicolon following the tag name. The expression has access to the value of this tag through the default input variable (<code>$_</code>), and the full API through the current ExifTool object (<code>$self</code>). It may contain any valid Perl code, including translation (<code>tr///</code>) and substitution (<code>s///</code>) operations, but note that braces within the expression must be balanced. The example below prints the camera Make with spaces translated to underlines, and multiple consecutive underlines replaced by a single underline:</p> <pre> exiftool -p '${make;tr/ /_/;s/__+/_/g}' image.jpg</pre> <p>A default expression of <code>tr(/\\?*:|&quot;&lt;&gt;\0)()d</code> is assumed if the expression is empty. This removes the characters / \ ? * : | &lt; &gt; and null from the printed value. (These characters are illegal in Windows file names, so this feature is useful if tag values are used in file names.)</p> </dd> <dt><strong><a name="php" class="item"><strong>-php</strong></a></strong></dt> <dd> <p>Format output as a PHP Array. The <strong>-g</strong>, <strong>-G</strong>, <strong>-D</strong>, <strong>-H</strong>, <strong>-l</strong>, <strong>-sep</strong> and <strong>-struct</strong> options combine with <strong>-php</strong>, and duplicate tags are handled in the same way as with the <strong>-json</strong> option. As well, the <strong>-b</strong> option may be added to output binary data. Here is a simple example showing how this could be used in a PHP script:</p> <pre> &lt;?php eval('$array=' . `exiftool -php -q image.jpg`); print_r($array); ?&gt;</pre> </dd> <dt><strong><a name="s_num_short" class="item"><strong>-s</strong>[<em>NUM</em>] (<strong>-short</strong>)</a></strong></dt> <dd> <p>Short output format. Prints tag names instead of descriptions. Add <em>NUM</em> or up to 3 <strong>-s</strong> options for even shorter formats:</p> <pre> -s1 or -s - print tag names instead of descriptions -s2 or -s -s - no extra spaces to column-align values -s3 or -s -s -s - print values only (no tag names)</pre> <p>Also effective when combined with <strong>-t</strong>, <strong>-h</strong>, <strong>-X</strong> or <strong>-listx</strong> options.</p> </dd> <dt><strong><a name="s" class="item"><strong>-S</strong> (<strong>-veryShort</strong>)</a></strong></dt> <dd> <p>Very short format. The same as <strong>-s2</strong> or two <strong>-s</strong> options. Tag names are printed instead of descriptions, and no extra spaces are added to column-align values.</p> </dd> <dt><strong><strong>-sep</strong> <em>STR</em> (<strong>-separator</strong>)</strong></dt> <dd> <p>Specify separator string for items in list-type tags. When reading, the default is to join list items with &quot;, &quot;. When writing, this option causes values assigned to list-type tags to be split into individual items at each substring matching <em>STR</em> (otherwise they are not split by default). Space characters in <em>STR</em> match zero or more whitespace characters in the value.</p> <p>Note that an empty separator (&quot;&quot;) is allowed, and will join items with no separator when reading, or split the value into individual characters when writing.</p> </dd> <dt><strong><a name="sort_sort" class="item"><strong>-sort</strong>, <strong>--sort</strong></a></strong></dt> <dd> <p>Sort output by tag description, or by tag name if the <strong>-s</strong> option is used. When sorting by description, the sort order will depend on the <strong>-lang</strong> option setting. Without the <strong>-sort</strong> option, tags appear in the order they were specified on the command line, or if not specified, the order they were extracted from the file. By default, tags are organized by groups when combined with the <strong>-g</strong> or <strong>-G</strong> option, but this grouping may be disabled with <strong>--sort</strong>.</p> </dd> <dt><strong><a name="struct_struct" class="item"><strong>-struct</strong>, <strong>--struct</strong></a></strong></dt> <dd> <p>Output structured XMP information instead of flattening to individual tags. This option works well when combined with the XML (<strong>-X</strong>) and JSON (<strong>-j</strong>) output formats. For other output formats, the structures are serialized into the same format as when writing structured information (see <a href="http://owl.phy.queensu.ca/~phil/exiftool/struct.html">http://owl.phy.queensu.ca/~phil/exiftool/struct.html</a> for details). When copying, structured tags are copied by default unless <strong>--struct</strong> is used to disable this feature (although flattened tags may still be copied by specifying them individually unless <strong>-struct</strong> is used). These options have no effect when assigning new values since both flattened and structured tags may always be used when writing.</p> </dd> <dt><strong><a name="t" class="item"><strong>-t</strong> (<strong>-tab</strong>)</a></strong></dt> <dd> <p>Output a tab-delimited list of description/values (useful for database import). May be combined with <strong>-s</strong> to print tag names instead of descriptions, or <strong>-S</strong> to print tag values only, tab-delimited on a single line. The <strong>-t</strong> option may also be used to add tag table information to the <strong>-X</strong> option output.</p> </dd> <dt><strong><a name="t" class="item"><strong>-T</strong> (<strong>-table</strong>)</a></strong></dt> <dd> <p>Output tag values in table form. Equivalent to <strong>-t -S -q -f</strong>.</p> </dd> <dt><strong><a name="v_num_verbose" class="item"><strong>-v</strong>[<em>NUM</em>] (<strong>-verbose</strong>)</a></strong></dt> <dd> <p>Print verbose messages. <em>NUM</em> specifies the level of verbosity in the range 0-5, with higher numbers being more verbose. If <em>NUM</em> is not given, then each <strong>-v</strong> option increases the level of verbosity by 1. With any level greater than 0, most other options are ignored and normal console output is suppressed unless specific tags are extracted. Using <strong>-v0</strong> causes the console output buffer to be flushed after each line (which may be useful to avoid delays when piping exiftool output), and prints the name of each processed file when writing. Also see the <strong>-progress</strong> option.</p> </dd> <dt><strong><strong>-w</strong>[+|!] <em>EXT</em> or <em>FMT</em> (<strong>-textOut</strong>)</strong></dt> <dd> <p>Write console output to files with names ending in <em>EXT</em>, one for each source file. The output file name is obtained by replacing the source file extension (including the '.') with the specified extension (and a '.' is added to the start of <em>EXT</em> if it doesn't already contain one). Alternatively, a <em>FMT</em> string may be used to give more control over the output file name and directory. In the format string, %d, %f and %e represent the directory, filename and extension of the source file, and %c represents a copy number which is automatically incremented if the file already exists. %d includes the trailing '/' if necessary, but %e does not include the leading '.'. For example:</p> <pre> -w %d%f.txt # same effect as &quot;-w txt&quot; -w dir/%f_%e.out # write files to &quot;dir&quot; as &quot;FILE_EXT.out&quot; -w dir2/%d%f.txt # write to &quot;dir2&quot;, keeping dir structure -w a%c.txt # write to &quot;a.txt&quot; or &quot;a1.txt&quot; or &quot;a2.txt&quot;...</pre> <p>Existing files will not be overwritten unless an exclamation point is added to the option name (ie. <strong>-w!</strong> or <strong>-textOut!</strong>), or a plus sign to append to the existing file (ie. <strong>-w+</strong> or <strong>-textOut+</strong>). Both may be used (ie. <strong>-w+!</strong> or <strong>-textOut+!</strong>) to overwrite output files that didn't exist before the command was run, and append the output from multiple source files. For example, to write one output file for all source files in each directory:</p> <pre> exiftool -filename -createdate -T -w+! %d/out.txt -r DIR</pre> <p>Notes:</p> <p>1) In a Windows BAT file the <code>%</code> character is represented by <code>%%</code>, so an argument like <code>%d%f.txt</code> is written as <code>%%d%%f.txt</code>.</p> <p>2) If the argument for <strong>-w</strong> does not contain a format code (%d, %f or %e), then it is interpreted as a file extension. Therefore it is not possible to specify a simple filename as an argument, so creating a single output file from multiple source files is typically done by shell redirection, ie)</p> <pre> exiftool FILE1 FILE2 ... &gt; out.txt</pre> <p>But if necessary, an empty format code may be used to force the argument to be interpreted as a format string, and the same result may be obtained without the use of shell redirection:</p> <pre> exiftool -w+! %0fout.txt FILE1 FILE2 ...</pre> <p>Advanced features:</p> <p>A substring of the original file name, directory or extension may be taken by specifying a field width immediately following the '%' character. If the width is negative, the substring is taken from the end. The substring position (characters to ignore at the start or end of the string) may be given by a second optional value after a decimal point. For example:</p> <pre> Input File Name Format Specifier Output File Name ---------------- ---------------- ---------------- Picture-123.jpg %7f.txt Picture.txt Picture-123.jpg %-.4f.out Picture.out Picture-123.jpg %7f.%-3f Picture.123 Picture-123a.jpg Meta%-3.1f.txt Meta123.txt</pre> <p>For %d, the field width/position specifiers may be applied to the directory levels instead of substring position by using a colon instead of a decimal point in the format specifier. For example:</p> <pre> Source Dir Format Result Notes ------------ ------ ---------- ------------------ pics/2012/02 %2:d pics/2012/ take top 2 levels pics/2012/02 %-:1d pics/2012/ up one directory level pics/2012/02 %:1d 2012/02/ ignore top level pics/2012/02 %1:1d 2012/ take 1 level after top /Users/phil %:2d phil/ ignore top 2 levels</pre> <p>(Note that the root directory counts as one level when an absolute path is used as in the last example above.)</p> <p>For %c, these modifiers have a different effects. If a field width is given, the copy number is padded with zeros to the specified width. A leading '-' adds a dash before the copy number, and a '+' adds an underline. By default, the copy number is omitted from the first file of a given name, but this can be changed by adding a decimal point to the modifier. For example:</p> <pre> -w A%-cZ.txt # AZ.txt, A-1Z.txt, A-2Z.txt ... -w B%5c.txt # B.txt, B00001.txt, B00002.txt ... -w C%.c.txt # C0.txt, C1.txt, C2.txt ... -w D%-.c.txt # D-0.txt, D-1.txt, D-2.txt ... -w E%-.4c.txt # E-0000.txt, E-0001.txt, E-0002.txt ... -w F%-.4nc.txt # F-0001.txt, F-0002.txt, F-0003.txt ... -w G%+c.txt # G.txt, G_1.txt G_2.txt ... -w H%-lc.txt # H.txt, H-b.txt, H-c.txt ... -w I.%.3uc.txt # I.AAA.txt, I.AAB.txt, I.AAC.txt ...</pre> <p>A special feature allows the copy number to be incremented for each processed file by using %C (upper case) instead of %c. This allows a sequential number to be added to output file names, even if the names are different. For %C, a copy number of zero is not omitted as it is with %c. The number before the decimal place gives the starting index, the number after the decimal place gives the field width. The following examples show the output filenames when used with the command <code>exiftool rose.jpg star.jpg jet.jpg ...</code>:</p> <pre> -w %C%f.txt # 0rose.txt, 1star.txt, 2jet.txt -w %f-%10C.txt # rose-10.txt, star-11.txt, jet-12.txt -w %.3C-%f.txt # 000-rose.txt, 001-star.txt, 002-jet.txt -w %57.4C%f.txt # 0057rose.txt, 0058star.txt, 0059jet.txt</pre> <p>All format codes may be modified by 'l' or 'u' to specify lower or upper case respectively (ie. <code>%le</code> for a lower case file extension). When used to modify %c or %C, the numbers are changed to an alphabetical base (see example H above). Also, %c may be modified by 'n' to count using natural numbers starting from 1, instead of 0 (see example F above).</p> <p>This same <em>FMT</em> syntax is used with the <strong>-o</strong> and <strong>-tagsFromFile</strong> options, although %c is only valid for output file names.</p> </dd> <dt><strong><strong>-W</strong>[!|+] <em>FMT</em> (<strong>-tagOut</strong>)</strong></dt> <dd> <p>This enhanced version of the <strong>-w</strong> option allows a separate output file to be created for each extracted tag. The differences between <strong>-W</strong> and <strong>-w</strong> are as follows:</p> <p>1) With <strong>-W</strong>, a new output file is created for each extracted tag.</p> <p>2) <strong>-W</strong> supports three additional format codes: %t, %g and %s represent the tag name, group name, and suggested extension for the output file (based on the format of the data). The %g code may be followed by a single digit to specify the group family number (eg. %g1), otherwise family 0 is assumed. The substring width/position/case specifiers may be used with these format codes in exactly the same way as with %f and %e.</p> <p>3) The argument for <strong>-W</strong> is interpreted as a file name if it contains no format codes. (For <strong>-w</strong>, this would be a file extension.) This change allows a simple file name to be specified, which, when combined with the append feature, provides a method to write metadata from multiple source files to a single output file without the need for shell redirection.</p> <p>4) Adding the <strong>-v</strong> option to <strong>-W</strong> generates a list of the tags and output file names instead of giving a verbose dump of the entire file. (Unless appending all output to one file for each source file by using <strong>-W+</strong> with an output file <em>FMT</em> that does not contain %t, $g or %s.)</p> <p>5) Individual list items are stored in separate files when <strong>-W</strong> is combined with <strong>-b</strong>, but note that for separate files to be created %c must be used in <em>FMT</em> to give the files unique names.</p> </dd> <dt><strong><a name="ext" class="item"><strong>-Wext</strong> <em>EXT</em>, <strong>--Wext</strong> <em>EXT</em> (<strong>-tagOutExt</strong>)</a></strong></dt> <dd> <p>This option is used to specify the type of output file(s) written by the <strong>-W</strong> option. An output file is written only if the suggested extension matches <em>EXT</em>. Multiple <strong>-Wext</strong> options may be used to write more than one type of file. Use <strong>--Wext</strong> to write all but the specified type(s).</p> </dd> <dt><strong><a name="x" class="item"><strong>-X</strong> (<strong>-xmlFormat</strong>)</a></strong></dt> <dd> <p>Use ExifTool-specific RDF/XML formatting for console output. Implies the <strong>-a</strong> option, so duplicate tags are extracted. The formatting options <strong>-b</strong>, <strong>-D</strong>, <strong>-H</strong>, <strong>-l</strong>, <strong>-s</strong>, <strong>-sep</strong>, <strong>-struct</strong> and <strong>-t</strong> may be used in combination with <strong>-X</strong> to affect the output, but note that the tag ID (<strong>-D</strong>, <strong>-H</strong> and <strong>-t</strong>), binary data (<strong>-b</strong>) and structured output (<strong>-struct</strong>) options are not effective for the short output (<strong>-s</strong>). Another restriction of <strong>-s</strong> is that only one tag with a given group and name may appear in the output. Note that the tag ID options (<strong>-D</strong>, <strong>-H</strong> and <strong>-t</strong>) will produce non-standard RDF/XML unless the <strong>-l</strong> option is also used.</p> <p>By default, <strong>-X</strong> outputs flattened tags, so <strong>-struct</strong> should be added if required to preserve XMP structures. List-type tags with multiple values are formatted as an RDF Bag, but they are combined into a single string when <strong>-s</strong> or <strong>-sep</strong> is used. Using <strong>-L</strong> changes the XML encoding from &quot;UTF-8&quot; to &quot;windows-1252&quot;. Other <strong>-charset</strong> settings change the encoding only if there is a corresponding standard XML character set. The <strong>-b</strong> option causes binary data values to be written, encoded in base64 if necessary. The <strong>-t</strong> option adds tag table information to the output (table <code>name</code>, decimal tag <code>id</code>, and <code>index</code> for cases where multiple conditional tags exist with the same ID).</p> <p>Note: This output is NOT the same as XMP because it uses dynamically-generated property names corresponding to the ExifTool tag names, and not the standard XMP properties. To write XMP instead, use the <strong>-o</strong> option with an XMP extension for the output file.</p> </dd> </dl> <p> </p> <h3><a name="processing_control">Processing control</a></h3> <dl> <dt><strong><a name="a" class="item"><strong>-a</strong>, <strong>--a</strong> (<strong>-duplicates</strong>, <strong>--duplicates</strong>)</a></strong></dt> <dd> <p>Allow (<strong>-a</strong>) or suppress (<strong>--a</strong>) duplicate tag names to be extracted. By default, duplicate tags are suppressed unless the <strong>-ee</strong> or <strong>-X</strong> options are used or the Duplicates option is enabled in the configuration file.</p> </dd> <dt><strong><a name="e" class="item"><strong>-e</strong> (<strong>--composite</strong>)</a></strong></dt> <dd> <p>Extract existing tags only -- don't calculate composite tags.</p> </dd> <dt><strong><a name="ee" class="item"><strong>-ee</strong> (<strong>-extractEmbedded</strong>)</a></strong></dt> <dd> <p>Extract information from embedded documents in EPS files, embedded EPS information and JPEG and Jpeg2000 images in PDF files, embedded MPF images in JPEG and MPO files, streaming metadata in AVCHD videos, and the resource fork of Mac OS files. Implies the <strong>-a</strong> option. Use <strong>-g3</strong> or <strong>-G3</strong> to identify the originating document for extracted information. Embedded documents containing sub-documents are indicated with dashes in the family 3 group name. (eg. <code>Doc2-3</code> is the 3rd sub-document of the 2nd embedded document.) Note that this option may increase processing time substantially, especially for PDF files with many embedded images.</p> </dd> <dt><strong><strong>-ext</strong> <em>EXT</em>, <strong>--ext</strong> <em>EXT</em> (<strong>-extension</strong>)</strong></dt> <dd> <p>Process only files with (<strong>-ext</strong>) or without (<strong>--ext</strong>) a specified extension. There may be multiple <strong>-ext</strong> and <strong>--ext</strong> options. Extensions may begin with a leading '.', and case is not significant. For example:</p> <pre> exiftool -ext .JPG DIR # process only JPG files exiftool --ext cr2 --ext dng DIR # supported files but CR2/DNG exiftool --ext . DIR # ignore if no extension exiftool -ext &quot;*&quot; DIR # process all files exiftool -ext &quot;*&quot; --ext xml DIR # process all but XML files</pre> <p>The extension may be <code>&quot;*&quot;</code> as in the last two examples above to force processing files with any extension (not just supported files).</p> <p>Using this option has two main advantages over specifying <code>*.EXT</code> on the command line: 1) It applies to files in subdirectories when combined with the <strong>-r</strong> option. 2) The <strong>-ext</strong> option is case-insensitive, which is useful when processing files on case-sensitive filesystems.</p> </dd> <dt><strong><a name="f_offset_fixbase" class="item"><strong>-F</strong>[<em>OFFSET</em>] (<strong>-fixBase</strong>)</a></strong></dt> <dd> <p>Fix the base for maker notes offsets. A common problem with some image editors is that offsets in the maker notes are not adjusted properly when the file is modified. This may cause the wrong values to be extracted for some maker note entries when reading the edited file. This option allows an integer <em>OFFSET</em> to be specified for adjusting the maker notes base offset. If no <em>OFFSET</em> is given, ExifTool takes its best guess at the correct base. Note that exiftool will automatically fix the offsets for images which store original offset information (eg. newer Canon models). Offsets are fixed permanently if <strong>-F</strong> is used when writing EXIF to an image. eg)</p> <pre> exiftool -F -exif:resolutionunit=inches image.jpg</pre> </dd> <dt><strong><a name="fast_num" class="item"><strong>-fast</strong>[<em>NUM</em>]</a></strong></dt> <dd> <p>Increase speed of extracting information from JPEG images. With this option, ExifTool will not scan to the end of a JPEG image to check for an AFCP or PreviewImage trailer, or past the first comment in GIF images or the audio/video data in WAV/AVI files to search for additional metadata. These speed benefits are small when reading images directly from disk, but can be substantial if piping images through a network connection. For more substantial speed benefits, <strong>-fast2</strong> also causes exiftool to avoid extracting any EXIF MakerNote information. <strong>-fast3</strong> avoids processing the file entirely, and returns only an initial guess at FileType and the pseudo System tags.</p> </dd> <dt><strong><a name="fileorder_tag" class="item"><strong>-fileOrder</strong> [-]<em>TAG</em></a></strong></dt> <dd> <p>Set file processing order according to the sorted value of the specified <em>TAG</em>. For example, to process files in order of date:</p> <pre> exiftool -fileOrder DateTimeOriginal DIR</pre> <p>Additional <strong>-fileOrder</strong> options may be added for secondary sort keys. Numbers are sorted numerically, and all other values are sorted alphabetically. The sort order may be reversed by prefixing the tag name with a <code>-</code> (eg. <code>-fileOrder -createdate</code>). Print conversion of the sorted values is disabled with the <strong>-n</strong> option, or a <code>#</code> appended to the tag name. Other formatting options (eg. <strong>-d</strong>) have no effect on the sorted values. Note that the <strong>-fileOrder</strong> option has a large performance impact since it involves an additional processing pass of each file.</p> </dd> <dt><strong><a name="dir" class="item"><strong>-i</strong> <em>DIR</em> (<strong>-ignore</strong>)</a></strong></dt> <dd> <p>Ignore specified directory name. <em>DIR</em> may be either an individual folder name, or a full path. If a full path is specified, it must match the Directory tag exactly to be ignored. Use multiple <strong>-i</strong> options to ignore more than one directory name. A special <em>DIR</em> value of <code>SYMLINKS</code> (case sensitive) may be specified to ignore symbolic links when the <strong>-r</strong> option is used.</p> </dd> <dt><strong><a name="if_expr" class="item"><strong>-if</strong> <em>EXPR</em></a></strong></dt> <dd> <p>Specify a condition to be evaluated before processing each <em>FILE</em>. <em>EXPR</em> is a Perl-like logic expression containing tag names prefixed by <code>$</code> symbols. It is evaluated with the tags from each <em>FILE</em> in turn, and the file is processed only if the expression returns true. Unlike Perl variable names, tag names are not case sensitive and may contain a hyphen. As well, tag names may have a leading group names separated by colons, and/or a trailing <code>#</code> character to disable print conversion. The expression <code>$GROUP:all</code> evaluates to 1 if any tag exists in the specified <code>GROUP</code>, or 0 otherwise (see note 2 below). When multiple <strong>-if</strong> options are used, all conditions must be satisfied to process the file. Returns an exit status of 1 if all files fail the condition. Below are a few examples:</p> <pre> # extract shutterspeed from all Canon images in a directory exiftool -shutterspeed -if '$make eq &quot;Canon&quot;' dir</pre> <pre> # add one hour to all images created on or after Apr. 2, 2006 exiftool -alldates+=1 -if '$CreateDate ge &quot;2006:04:02&quot;' dir</pre> <pre> # set EXIF ISO value if possible, unless it is set already exiftool '-exif:iso&lt;iso' -if 'not $exif:iso' dir</pre> <pre> # find images containing a specific keyword (case insensitive) exiftool -if '$keywords =~ /harvey/i' -filename dir</pre> <p>Notes:</p> <p>1) The <strong>-n</strong> and <strong>-b</strong> options also apply to tags used in <em>EXPR</em>.</p> <p>2) Some binary data blocks are not extracted unless specified explicitly. These tags are not available for use in the <strong>-if</strong> condition unless they are also specified on the command line. The alternative is to use the <code>$GROUP:all</code> syntax. (eg. Use <code>$exif:all</code> instead of <code>$exif</code> in <em>EXPR</em> to test for the existence of EXIF tags.)</p> <p>3) Tags in the string are interpolated the same way as with <strong>-p</strong> before the expression is evaluated. In this interpolation, <code>$/</code> is converted to a newline and <code>$$</code> represents a single <code>$</code> symbol (so Perl variables, if used, require a double <code>$</code>).</p> <p>4) The condition may only test tags from the file being processed. To process one file based on tags from another, two steps are required. For example, to process XMP sidecar files in directory <a href="#dir"><code>DIR</code></a> based on tags from the associated NEF:</p> <pre> exiftool -if EXPR -p '$directory/$filename' -ext nef DIR &gt; nef.txt exiftool -@ nef.txt -srcfile %d%f.xmp ...</pre> <p>5) The <strong>-a</strong> option has no effect on the evaluation of the expression, and the values of duplicate tags are accessible only by specifying a group name (such as a family 4 instance number, eg. <code>$Copy1:TAG</code>, <code>$Copy2:TAG</code>, etc).</p> </dd> <dt><strong><a name="m" class="item"><strong>-m</strong> (<strong>-ignoreMinorErrors</strong>)</a></strong></dt> <dd> <p>Ignore minor errors and warnings. This enables writing to files with minor errors and disables some validation checks which could result in minor warnings. Generally, minor errors/warnings indicate a problem which usually won't result in loss of metadata if ignored. However, there are exceptions, so ExifTool leaves it up to you to make the final decision. Minor errors and warnings are indicated by &quot;[minor]&quot; at the start of the message. Warnings which affect processing when ignored are indicated by &quot;[Minor]&quot; (with a capital &quot;M&quot;).</p> </dd> <dt><strong><strong>-o</strong> <em>OUTFILE</em> or <em>FMT</em> (<strong>-out</strong>)</strong></dt> <dd> <p>Set the output file or directory name when writing information. Without this option, when any &quot;real&quot; tags are written the original file is renamed to <code>FILE_original</code> and output is written to <em>FILE</em>. When writing only FileName and/or Directory &quot;pseudo&quot; tags, <strong>-o</strong> causes the file to be copied instead of moved, but directories specified for either of these tags take precedence over that specified by the <strong>-o</strong> option.</p> <p><em>OUTFILE</em> may be <code>-</code> to write to stdout. The output file name may also be specified using a <em>FMT</em> string in which %d, %f and %e represent the directory, file name and extension of <em>FILE</em>. Also, %c may be used to add a copy number. See the <strong>-w</strong> option for <em>FMT</em> string examples.</p> <p>The output file is taken to be a directory name if it already exists as a directory or if the name ends with '/'. Output directories are created if necessary. Existing files will not be overwritten. Combining the <strong>-overwrite_original</strong> option with <strong>-o</strong> causes the original source file to be erased after the output file is successfully written.</p> <p>A special feature of this option allows the creation of certain types of files from scratch, or with the metadata from another type of file. The following file types may be created using this technique:</p> <pre> XMP, ICC/ICM, MIE, VRD, DR4, EXIF, EXV</pre> <p>The output file type is determined by the extension of <em>OUTFILE</em> (specified as <a href="#ext"><code>-.EXT</code></a> when writing to stdout). The output file is then created from a combination of information in <em>FILE</em> (as if the <strong>-tagsFromFile</strong> option was used), and tag values assigned on the command line. If no <em>FILE</em> is specified, the output file may be created from scratch using only tags assigned on the command line.</p> </dd> <dt><strong><a name="overwrite_original" class="item"><strong>-overwrite_original</strong></a></strong></dt> <dd> <p>Overwrite the original <em>FILE</em> (instead of preserving it by adding <code>_original</code> to the file name) when writing information to an image. Caution: This option should only be used if you already have separate backup copies of your image files. The overwrite is implemented by renaming a temporary file to replace the original. This deletes the original file and replaces it with the edited version in a single operation. When combined with <strong>-o</strong>, this option causes the original file to be deleted if the output file was successfully written (ie. the file is moved instead of copied).</p> </dd> <dt><strong><a name="overwrite_original_in_place" class="item"><strong>-overwrite_original_in_place</strong></a></strong></dt> <dd> <p>Similar to <strong>-overwrite_original</strong> except that an extra step is added to allow the original file attributes to be preserved. For example, on a Mac this causes the original file creation date, type, creator, label color, icon, Finder tags and hard links to the file to be preserved (but note that the Mac OS resource fork is always preserved unless specifically deleted with <code>-rsrc:all=</code>). This is implemented by opening the original file in update mode and replacing its data with a copy of a temporary file before deleting the temporary. The extra step results in slower performance, so the <strong>-overwrite_original</strong> option should be used instead unless necessary.</p> </dd> <dt><strong><a name="p" class="item"><strong>-P</strong> (<strong>-preserve</strong>)</a></strong></dt> <dd> <p>Preserve the filesystem modification date/time of the original file (<code>FileModifyDate</code>) when writing. Note that some filesystems store a creation date (<code>FileCreateDate</code>) which is not affected by this option. This creation date is preserved only on Windows systems where Win32API::File and Win32::API are available. For other systems, the <strong>-overwrite_original_in_place</strong> option may be used if necessary to preserve the creation date. This option is superseded by writing FileModifyDate (and FileCreateDate) manually.</p> </dd> <dt><strong><a name="password_passwd" class="item"><strong>-password</strong> <em>PASSWD</em></a></strong></dt> <dd> <p>Specify password to allow processing of password-protected PDF documents. If a password is required but not given, a warning is issued and the document is not processed. Ignored if a password is not required.</p> </dd> <dt><strong><a name="progress" class="item"><strong>-progress</strong></a></strong></dt> <dd> <p>Show file progress count in messages. The progress count appears in brackets after the name of each processed file, and gives the current file number and the total number of files to be processed. Implies the <strong>-v0</strong> option, which prints the name of each processed file when writing. When combined with the <strong>-if</strong> option, the total count includes all files before the condition is applied, but files that fail the condition will not have their names printed.</p> </dd> <dt><strong><a name="q" class="item"><strong>-q</strong> (<strong>-quiet</strong>)</a></strong></dt> <dd> <p>Quiet processing. One <strong>-q</strong> suppresses normal informational messages, and a second <strong>-q</strong> suppresses warnings as well. Error messages can not be suppressed, although minor errors may be downgraded to warnings with the <strong>-m</strong> option, which may then be suppressed with <code>-q -q</code>.</p> </dd> <dt><strong><a name="r_recurse" class="item"><strong>-r</strong>[.] (<strong>-recurse</strong>)</a></strong></dt> <dd> <p>Recursively process files in subdirectories. Only meaningful if <em>FILE</em> is a directory name. Subdirectories with names beginning with &quot;.&quot; are not processed unless &quot;.&quot; is added to the option name (ie. <strong>-r.</strong> or <strong>-recurse.</strong>). By default, exiftool will also follow symbolic links to directories if supported by the system, but this may be disabled with <code>-i SYMLINKS</code> (see the <strong>-i</strong> option for details).</p> </dd> <dt><strong><a name="scanforxmp" class="item"><strong>-scanForXMP</strong></a></strong></dt> <dd> <p>Scan all files (even unsupported formats) for XMP information unless found already. When combined with the <strong>-fast</strong> option, only unsupported file types are scanned. Warning: It can be time consuming to scan large files.</p> </dd> <dt><strong><a name="u" class="item"><strong>-u</strong> (<strong>-unknown</strong>)</a></strong></dt> <dd> <p>Extract values of unknown tags. Add another <strong>-u</strong> to also extract unknown information from binary data blocks. This option applies to tags with numerical tag ID's, and causes tag names like &quot;Exif_0xc5d9&quot; to be generated for unknown information. It has no effect on information types which have human-readable tag ID's (such as XMP), since unknown tags are extracted automatically from these formats.</p> </dd> <dt><strong><a name="u" class="item"><strong>-U</strong> (<strong>-unknown2</strong>)</a></strong></dt> <dd> <p>Extract values of unknown tags as well as unknown information from some binary data blocks. This is the same as two <strong>-u</strong> options.</p> </dd> <dt><strong><a name="mode" class="item"><strong>-wm</strong> <em>MODE</em> (<strong>-writeMode</strong>)</a></strong></dt> <dd> <p>Set mode for writing/creating tags. <em>MODE</em> is a string of one or more characters from the list below. Write mode is <code>wcg</code> unless otherwise specified.</p> <pre> w - Write existing tags c - Create new tags g - create new Groups as necessary</pre> <p>For example, use <code>-wm cg</code> to only create new tags (and avoid editing existing ones).</p> <p>The level of the group is the SubDirectory level in the metadata structure. For XMP or IPTC this is the full XMP/IPTC block (the family 0 group), but for EXIF this is the individual IFD (the family 1 group).</p> </dd> <dt><strong><a name="z" class="item"><strong>-z</strong> (<strong>-zip</strong>)</a></strong></dt> <dd> <p>When reading, causes information to be extracted from .gz and .bz2 compressed images. (Only one image per archive. Requires gzip and bzip2 to be installed on the system.) When writing, causes compressed information to be written if supported by the metadata format. (eg. PNG supports compressed textual metadata.) This option also disables the recommended padding in embedded XMP, saving 2424 bytes when writing XMP in a file.</p> </dd> </dl> <p> </p> <h3><a name="other_options">Other options</a></h3> <dl> <dt><strong><a name="argfile" class="item"><strong>-@</strong> <em>ARGFILE</em></a></strong></dt> <dd> <p>Read command-line arguments from the specified file. The file contains one argument per line (NOT one option per line -- some options require additional arguments, and all arguments must be placed on separate lines). Blank lines and lines beginning with <code>#</code> and are ignored. Normal shell processing of arguments is not performed, which among other things means that arguments should not be quoted and spaces are treated as any other character. <em>ARGFILE</em> may exist relative to either the current directory or the exiftool directory unless an absolute pathname is given.</p> <p>For example, the following <em>ARGFILE</em> will set the value of Copyright to &quot;Copyright YYYY, Phil Harvey&quot;, where &quot;YYYY&quot; is the year of CreateDate:</p> <pre> -d %Y -copyright&lt;Copyright $createdate, Phil Harvey</pre> </dd> <dt><strong><a name="k" class="item"><strong>-k</strong> (<strong>-pause</strong>)</a></strong></dt> <dd> <p>Pause with the message <code>-- press any key --</code> or <code>-- press RETURN --</code> (depending on your system) before terminating. This option is used to prevent the command window from closing when run as a Windows drag and drop application.</p> </dd> <dt><strong><a name="list_listw_listf_listr_listwf_listg_num_listd_listx" class="item"><strong>-list</strong>, <strong>-listw</strong>, <strong>-listf</strong>, <strong>-listr</strong>, <strong>-listwf</strong>, <strong>-listg</strong>[<em>NUM</em>], <strong>-listd</strong>, <strong>-listx</strong></a></strong></dt> <dd> <p>Print a list of all valid tag names (<strong>-list</strong>), all writable tag names (<strong>-listw</strong>), all supported file extensions (<strong>-listf</strong>), all recognized file extensions (<strong>-listr</strong>), all writable file extensions (<strong>-listwf</strong>), all tag groups [in a specified family] (<strong>-listg</strong>[<em>NUM</em>]), all deletable tag groups (<strong>-listd</strong>), or an XML database of tag details including language translations (<strong>-listx</strong>). The <strong>-list</strong>, <strong>-listw</strong> and <strong>-listx</strong> options may be followed by an additional argument of the form <code>-GROUP:All</code> to list only tags in a specific group, where <code>GROUP</code> is one or more family 0-2 group names (excepting EXIF IFD groups) separated by colons. With <strong>-listg</strong>, <em>NUM</em> may be given to specify the group family, otherwise family 0 is assumed. The <strong>-l</strong> option may be combined with <strong>-listf</strong>, <strong>-listr</strong> or <strong>-listwf</strong> to add file descriptions to the list. The <strong>-lang</strong> option may be combined with <strong>-listx</strong> to output descriptions in a single language. Here are some examples:</p> <pre> -list # list all tag names -list -EXIF:All # list all EXIF tags -list -xmp:time:all # list all XMP tags relating to time -listw -XMP-dc:All # list all writable XMP-dc tags -listf # list all supported file extensions -listr # list all recognized file extensions -listwf # list all writable file extensions -listg1 # list all groups in family 1 -listd # list all deletable groups -listx -EXIF:All # list database of EXIF tags in XML format -listx -XMP:All -s # list short XML database of XMP tags</pre> <p>When combined with <strong>-listx</strong>, the <strong>-s</strong> option shortens the output by omitting the descriptions and values (as in the last example above), and <strong>-f</strong> adds a 'flags' attribute if applicable. The flags are formatted as a comma-separated list of the following possible values: Avoid, Binary, List, Mandatory, Permanent, Protected, Unknown and Unsafe (see the <a href="TagNames/index.html">Tag Name documentation</a>). For XMP List tags, the list type (Alt, Bag or Seq) is added to the flags, and flattened structure tags are indicated by a Flattened flag.</p> <p>Note that none of the <strong>-list</strong> options require an input <em>FILE</em>.</p> </dd> <dt><strong><a name="ver" class="item"><strong>-ver</strong></a></strong></dt> <dd> <p>Print exiftool version number.</p> </dd> </dl> <p> </p> <h3><a name="special_features">Special features</a></h3> <dl> <dt><strong><a name="geotag_trkfile" class="item"><strong>-geotag</strong> <em>TRKFILE</em></a></strong></dt> <dd> <p>Geotag images from the specified GPS track log file. Using the <strong>-geotag</strong> option is equivalent to writing a value to the <code>Geotag</code> tag. After the <strong>-geotag</strong> option has been specified, the value of the <code>Geotime</code> tag is written to define a date/time for the position interpolation. If <code>Geotime</code> is not specified, the value is copied from <code>DateTimeOriginal</code>. For example, the following two commands are equivalent:</p> <pre> exiftool -geotag track.log image.jpg exiftool -geotag &quot;-Geotime&lt;DateTimeOriginal&quot; image.jpg</pre> <p>When the <code>Geotime</code> value is converted to UTC, the local system timezone is assumed unless the date/time value contains a timezone. Writing <code>Geotime</code> causes the following tags to be written (provided they can be calculated from the track log, and they are supported by the destination metadata format): GPSLatitude, GPSLatitudeRef, GPSLongitude, GPSLongitudeRef, GPSAltitude, GPSAltitudeRef, GPSDateStamp, GPSTimeStamp, GPSDateTime, GPSTrack, GPSTrackRef, GPSSpeed, GPSSpeedRef, GPSImgDirection, GPSImgDirectionRef, GPSPitch and GPSRoll. By default, tags are created in EXIF, and updated in XMP only if they already exist. However, <code>EXIF:Geotime</code> or <code>XMP:Geotime</code> may be specified to write only EXIF or XMP tags respectively. Note that GPSPitch and GPSRoll are non-standard, and require user-defined tags in order to be written.</p> <p>The <code>Geosync</code> tag may be used to specify a time correction which is applied to each <code>Geotime</code> value for synchronization with GPS time. For example, the following command compensates for image times which are 1 minute and 20 seconds behind GPS:</p> <pre> exiftool -geosync=+1:20 -geotag a.log DIR</pre> <p><code>Geosync</code> must be set before <code>Geotime</code> (if specified) to be effective. Advanced <code>Geosync</code> features allow a linear time drift correction and synchronization from previously geotagged images. See &quot;geotag.html&quot; in the full ExifTool distribution for more information.</p> <p>Multiple <strong>-geotag</strong> options may be used to concatinate GPS track log data. Also, a single <strong>-geotag</strong> option may be used to load multiple track log files by using wildcards in the <em>TRKFILE</em> name, but note that in this case <em>TRKFILE</em> must be quoted on most systems (with the notable exception of Windows) to prevent filename expansion. For example:</p> <pre> exiftool -geotag &quot;TRACKDIR/*.log&quot; IMAGEDIR</pre> <p>Currently supported track file formats are GPX, NMEA RMC/GGA/GLL, KML, IGC, Garmin XML and TCX, Magellan PMGNTRK, Honeywell PTNTHPR, Winplus Beacon text, and Bramor gEO log files. See <a href="#geotagging_examples">GEOTAGGING EXAMPLES</a> for examples. Also see &quot;geotag.html&quot; in the full ExifTool distribution and the <a href="ExifTool.html#options">Image::ExifTool Options</a> for more details and for information about geotag configuration options.</p> </dd> <dt><strong><a name="globaltimeshift_shift" class="item"><strong>-globalTimeShift</strong> <em>SHIFT</em></a></strong></dt> <dd> <p>Shift all formatted date/time values by the specified amount when reading. Does not apply to unformatted (<strong>-n</strong>) output. <em>SHIFT</em> takes the same form as the date/time shift when writing (see <a href="Shift.html">Image::ExifTool::Shift.pl</a> for details), with a negative shift being indicated with a minus sign (<code>-</code>) at the start of the <em>SHIFT</em> string. For example:</p> <pre> # return all date/times, shifted back by 1 hour exiftool -globalTimeShift -1 -time:all a.jpg</pre> <pre> # set the file name from the shifted CreateDate (-1 day) for # all images in a directory exiftool &quot;-filename&lt;createdate&quot; -globaltimeshift &quot;-0:0:1 0:0:0&quot; \ -d %Y%m%d-%H%M%S.%%e dir</pre> </dd> <dt><strong><a name="use_module" class="item"><strong>-use</strong> <em>MODULE</em></a></strong></dt> <dd> <p>Add features from specified plug-in <em>MODULE</em>. Currently, the MWG module is the only plug-in module distributed with exiftool. This module adds read/write support for tags as recommended by the Metadata Working Group. To save typing, <code>-use MWG</code> is assumed if the <code>MWG</code> group is specified for any tag on the command line. See the <a href="TagNames/MWG.html">MWG Tags documentation</a> for more details. Note that this option is not reversible, and remains in effect until the application terminates, even across the <code>-execute</code> option.</p> </dd> </dl> <p> </p> <h3><a name="utilities">Utilities</a></h3> <dl> <dt><strong><a name="restore_original" class="item"><strong>-restore_original</strong></a></strong></dt> <dt><strong><a name="delete_original" class="item"><strong>-delete_original</strong>[!]</a></strong></dt> <dd> <p>These utility options automate the maintenance of the <code>_original</code> files created by exiftool. They have no effect on files without an <code>_original</code> copy. The <strong>-restore_original</strong> option restores the specified files from their original copies by renaming the <code>_original</code> files to replace the edited versions. For example, the following command restores the originals of all JPG images in directory <a href="#dir"><code>DIR</code></a>:</p> <pre> exiftool -restore_original -ext jpg DIR</pre> <p>The <strong>-delete_original</strong> option deletes the <code>_original</code> copies of all files specified on the command line. Without a trailing <code>!</code> this option prompts for confirmation before continuing. For example, the following command deletes <code>a.jpg_original</code> if it exists, after asking &quot;Are you sure?&quot;:</p> <pre> exiftool -delete_original a.jpg</pre> <p>These options may not be used with other options to read or write tag values in the same command, but may be combined with options such <strong>-ext</strong>, <strong>-if</strong>, <strong>-r</strong>, <strong>-q</strong> and <strong>-v</strong>.</p> </dd> </dl> <p> </p> <h3><a name="advanced_options">Advanced options</a></h3> <p>Among other things, the advanced options allow complex processing to be performed from a single command without the need for additional scripting. This may be particularly useful for implementations such as Windows drag-and-drop applications. These options may also be used to improve performance in multi-pass processing by reducing the overhead required to load exiftool for each invocation.</p> <dl> <dt><strong><a name="api_opt_val" class="item"><strong>-api</strong> <em>OPT[=VAL]</em></a></strong></dt> <dd> <p>Set ExifTool API option. <em>OPT</em> is an API option name. The option value is set to 1 if <em>=VAL</em> is omitted, or undef if just <em>VAL</em> is omitted. An option may not be set to an empty string (&quot;&quot;) via the command line, but the config file may be used to accomplish this if necessary. See <a href="ExifTool.html#options">Image::ExifTool Options</a> for a list of available API options. This overrides API options set via the config file.</p> </dd> <dt><strong><a name="common_args" class="item"><strong>-common_args</strong></a></strong></dt> <dd> <p>Specifies that all arguments following this option are common to all executed commands when <strong>-execute</strong> is used. This and the <strong>-config</strong> option are the only options that may not be used inside a <strong>-@</strong> <em>ARGFILE</em>. Note that by definition this option and its arguments MUST come after all other options on the command line.</p> </dd> <dt><strong><a name="config_cfgfile" class="item"><strong>-config</strong> <em>CFGFILE</em></a></strong></dt> <dd> <p>Load specified configuration file instead of the default &quot;.ExifTool_config&quot;. If used, this option must come before all other arguments on the command line. The <em>CFGFILE</em> name may contain a directory specification (otherwise the file must exist in the current directory), or may be set to an empty string (&quot;&quot;) to disable loading of the config file. See the sample configuration file and &quot;config.html&quot; in the full ExifTool distribution for more information about the ExifTool configuration file.</p> </dd> <dt><strong><a name="echo_num_text" class="item"><strong>-echo</strong>[<em>NUM</em>] <em>TEXT</em></a></strong></dt> <dd> <p>Echo text to stdout (<strong>-echo</strong> or <strong>-echo1</strong>) or stderr (<strong>-echo2</strong>). Text is output as the command line is parsed, before the processing of any input files. <em>NUM</em> may also be 3 or 4 to output text (to stdout or stderr respectively) after processing is complete.</p> </dd> <dt><strong><a name="execute_num" class="item"><strong>-execute</strong>[<em>NUM</em>]</a></strong></dt> <dd> <p>Execute command for all arguments up to this point on the command line (plus any arguments specified by <strong>-common_args</strong>). Allows multiple commands to be executed from a single command line. <em>NUM</em> is an optional number that is echoed in the &quot;{ready}&quot; message when using the <strong>-stay_open</strong> feature.</p> </dd> <dt><strong><a name="srcfile_fmt" class="item"><strong>-srcfile</strong> <em>FMT</em></a></strong></dt> <dd> <p>Specify a different source file to be processed based on the name of the original <em>FILE</em>. This may be useful in some special situations for processing related preview images or sidecar files. See the <strong>-w</strong> option for a description of the <em>FMT</em> syntax. Note that file name <em>FMT</em> strings for all options are based on the original <em>FILE</em> specified from the command line, not the name of the source file specified by <strong>-srcfile</strong>.</p> <p>For example, to copy metadata from NEF files to the corresponding JPG previews in a directory where other JPG images may exist:</p> <pre> exiftool -ext nef -tagsfromfile @ -srcfile %d%f.jpg dir</pre> <p>If than one <strong>-srcfile</strong> option is specified, the files are tested in order and the first existing source file is processed. If none of the source files already exist, then exiftool uses the first <strong>-srcfile</strong> specified.</p> <p>A <em>FMT</em> of <code>@</code> may be used to represent the original <em>FILE</em>, which may be useful when specifying multiple <strong>-srcfile</strong> options (eg. to fall back to processing the original <em>FILE</em> if no sidecar exists).</p> </dd> <dt><strong><a name="stay_open_flag" class="item"><strong>-stay_open</strong> <em>FLAG</em></a></strong></dt> <dd> <p>If <em>FLAG</em> is <code>1</code> or <code>True</code>, causes exiftool keep reading from the <strong>-@</strong> <em>ARGFILE</em> even after reaching the end of file. This feature allows calling applications to pre-load exiftool, thus avoiding the overhead of loading exiftool for each command. The procedure is as follows:</p> <p>1) Execute <code>exiftool -stay_open True -@ ARGFILE</code>, where <em>ARGFILE</em> is the name of an existing (possibly empty) argument file or <code>-</code> to pipe arguments from the standard input.</p> <p>2) Write exiftool command-line arguments to <em>ARGFILE</em>, one argument per line (see the <strong>-@</strong> option for details).</p> <p>3) Write <code>-execute\n</code> to <em>ARGFILE</em>, where <a href="#n"><code>\n</code></a> represents a newline sequence. (Note: You may need to flush your write buffers here if using buffered output.) Exiftool will then execute the command with the arguments received up to this point, send a &quot;{ready}&quot; message to stdout when done (unless the <strong>-q</strong> or <strong>-T</strong> option is used), and continue trying to read arguments for the next command from <em>ARGFILE</em>. To aid in command/response synchronization, any number appended to the <code>-execute</code> option is echoed in the &quot;{ready}&quot; message. For example, <code>-execute613</code> results in &quot;{ready613}&quot;.</p> <p>4) Repeat steps 2 and 3 for each command.</p> <p>5) Write <code>-stay_open\nFalse\n</code> to <em>ARGFILE</em> when done. This will cause exiftool to process any remaining command-line arguments then exit normally.</p> <p>The input <em>ARGFILE</em> may be changed at any time before step 5 above by writing the following lines to the currently open <em>ARGFILE</em>:</p> <pre> -stay_open True -@ NEWARGFILE</pre> <p>This causes <em>ARGFILE</em> to be closed, and <em>NEWARGFILE</em> to be kept open. (Without the <strong>-stay_open</strong> here, exiftool would have returned to reading arguments from <em>ARGFILE</em> after reaching the end of <em>NEWARGFILE</em>.)</p> <p>Note: When writing arguments to a disk file there is a delay of up to 0.01 seconds after writing <code>-execute\n</code> before exiftool starts processing the command. This delay may be avoided by sending a CONT signal to the exiftool process immediately after writing <code>-execute\n</code>. (There is no associated delay when writing arguments via a pipe with <code>-@ -</code>, so the signal is not necessary when using this technique.)</p> </dd> <dt><strong><a name="userparam_param_val" class="item"><strong>-userParam</strong> <em>PARAM[=VAL]</em></a></strong></dt> <dd> <p>Set user parameter. <em>PARAM</em> is an arbitrary user parameter name. This is an interface to the API UserParam option (see the <a href="ExifTool.html#options">Image::ExifTool Options</a> documentation), and provides a method to access user-defined parameters from inside tag name expressions (as if it were any other tag, see example below), and from PrintConv/ValueConv logic (via the ExifTool Options function). Similar to the <strong>-api</strong> option, the parameter value is set to 1 if <em>=VAL</em> is omitted, or undef if just <em>VAL</em> is omitted.</p> <pre> exiftool -p '$test from $filename' -userparam test=Hello FILE</pre> </dd> </dl> <p> </p> <hr /> <h1><a name="windows_unicode_file_names">WINDOWS UNICODE FILE NAMES</a></h1> <p>In Windows, by default, file and directory names are specified on the command line (or in arg files) using the system code page, which varies with the system settings. Unfortunately, these code pages are not complete character sets, so not all file names may be represented.</p> <p>ExifTool 9.79 and later allow the file name encoding to be specified with <code>-charset filename=CHARSET</code>, where <code>CHARSET</code> is the name of a valid ExifTool character set, preferably <code>UTF8</code> (see the <strong>-charset</strong> option for a complete list). Setting this triggers the use of Windows wide-character i/o routines, thus providing support for all Unicode file names. But note that it is not trivial to pass properly encoded file names on the Windows command line (see <a href="http://owl.phy.queensu.ca/~phil/exiftool/faq.html#Q18">http://owl.phy.queensu.ca/~phil/exiftool/faq.html#Q18</a> for details), so placing them in a UTF-8 encoded <strong>-@</strong> argfile is recommended if possible.</p> <p>When a directory name is provided, the file name encoding need not be specified (unless the directory name contains special characters), and ExifTool will automatically use wide-character routines to scan the directory.</p> <p>The filename character set applies to the <em>FILE</em> arguments as well as filename arguments of <strong>-@</strong>, <strong>-geotag</strong>, <strong>-o</strong>, <strong>-p</strong>, <strong>-srcfile</strong>, <strong>-tagsFromFile</strong>, <strong>-csv</strong>=, <strong>-j</strong>= and <strong>-</strong><em>TAG</em>&lt;=. However, it does not apply to the <strong>-config</strong> filename, which always uses the system character set. The <code>-charset filename=</code> option must come before the <strong>-@</strong> option to be effective, but the order doesn't matter with respect to other options.</p> <p>Notes:</p> <p>1) FileName and Directory tag values still use the same encoding as other tag values, and are converted to/from the filename character set when writing/reading if specified.</p> <p>2) Unicode support is not yet implemented for other Windows-based systems like Cygwin.</p> <p>3) See <a href="#writing_read_only_files">WRITING READ-ONLY FILES</a> below for a note about editing read-only files with Unicode names.</p> <p> </p> <hr /> <h1><a name="writing_read_only_files">WRITING READ-ONLY FILES</a></h1> <p>In general, ExifTool may be used to write metadata to read-only files provided that the user has write permission in the directory. However, there are two cases where file write permission is also required:</p> <p>1) When using the <strong>-overwrite_original_in_place</strong> option.</p> <p>2) On Windows if the file has Unicode characters in its name, and a) the <strong>-overwrite_original</strong> option is used, or b) the <code>_original</code> backup already exists.</p> <p> </p> <hr /> <h1><a name="reading_examples">READING EXAMPLES</a></h1> <p><strong>Note</strong>: Beware when cutting and pasting these examples into your terminal! Some characters such as single and double quotes and hyphens may have been changed into similar-looking yet functionally-different characters by the text formatter used to display this documentation. Also note that Windows users must use double quotes instead of single quotes as below around arguments containing special characters.</p> <dl> <dt><strong><a name="exiftool_a_u_g1_a_jpg" class="item">exiftool -a -u -g1 a.jpg</a></strong></dt> <dd> <p>Print all meta information in an image, including duplicate and unknown tags, sorted by group (for family 1).</p> </dd> <dt><strong><a name="exiftool_common_dir" class="item">exiftool -common dir</a></strong></dt> <dd> <p>Print common meta information for all images in <code>dir</code>. <code>-common</code> is a <a href="http://search.cpan.org/dist/Image-ExifTool/lib/Image/ExifTool/Shortcuts.pm">shortcut tag</a> representing common EXIF meta information.</p> </dd> <dt><strong><a name="exiftool_t_createdate_aperture_shutterspeed_iso_dir_out_txt" class="item">exiftool -T -createdate -aperture -shutterspeed -iso dir &gt; out.txt</a></strong></dt> <dd> <p>List specified meta information in tab-delimited column form for all images in <code>dir</code> to an output text file named &quot;out.txt&quot;.</p> </dd> <dt><strong><a name="exiftool_s_imagesize_exposuretime_b_jpg" class="item">exiftool -s -ImageSize -ExposureTime b.jpg</a></strong></dt> <dd> <p>Print ImageSize and ExposureTime tag names and values.</p> </dd> <dt><strong><a name="exiftool_l_canon_c_jpg_d_jpg" class="item">exiftool -l -canon c.jpg d.jpg</a></strong></dt> <dd> <p>Print standard Canon information from two image files.</p> </dd> <dt><strong><a name="exiftool_r_w_txt_common_pictures" class="item">exiftool -r -w .txt -common pictures</a></strong></dt> <dd> <p>Recursively extract common meta information from files in <code>pictures</code> directory, writing text output to <code>.txt</code> files with the same names.</p> </dd> <dt><strong><a name="exiftool_b_thumbnailimage_image_jpg_thumbnail_jpg" class="item">exiftool -b -ThumbnailImage image.jpg &gt; thumbnail.jpg</a></strong></dt> <dd> <p>Save thumbnail image from <code>image.jpg</code> to a file called <code>thumbnail.jpg</code>.</p> </dd> <dt><strong><a name="exiftool_b_jpgfromraw_w_jfr_jpg_ext_nef_r" class="item">exiftool -b -JpgFromRaw -w _JFR.JPG -ext NEF -r .</a></strong></dt> <dd> <p>Recursively extract JPG image from all Nikon NEF files in the current directory, adding <code>_JFR.JPG</code> for the name of the output JPG files.</p> </dd> <dt><strong><a name="exiftool_a_b_w_d_f_t_c_s_preview_all_dir" class="item">exiftool -a -b -W %d%f_%t%-c.%s -preview:all dir</a></strong></dt> <dd> <p>Extract all types of preview images (ThumbnailImage, PreviewImage, JpgFromRaw, etc.) from files in directory &quot;dir&quot;, adding the tag name to the output preview image file names.</p> </dd> <dt><strong><a name="exiftool_d_r_a_b_e_y_datetimeoriginal_s_s_ext_jpg" class="item">exiftool -d '%r %a, %B %e, %Y' -DateTimeOriginal -S -s -ext jpg .</a></strong></dt> <dd> <p>Print formatted date/time for all JPG files in the current directory.</p> </dd> <dt><strong><a name="exiftool_ifd1_xresolution_ifd1_yresolution_image_jpg" class="item">exiftool -IFD1:XResolution -IFD1:YResolution image.jpg</a></strong></dt> <dd> <p>Extract image resolution from EXIF IFD1 information (thumbnail image IFD).</p> </dd> <dt><strong><a name="exiftool_resolution_image_jpg" class="item">exiftool '-*resolution*' image.jpg</a></strong></dt> <dd> <p>Extract all tags with names containing the word &quot;Resolution&quot; from an image.</p> </dd> <dt><strong><a name="exiftool_xmp_author_all_a_image_jpg" class="item">exiftool -xmp:author:all -a image.jpg</a></strong></dt> <dd> <p>Extract all author-related XMP information from an image.</p> </dd> <dt><strong><a name="exiftool_xmp_b_a_jpg_out_xmp" class="item">exiftool -xmp -b a.jpg &gt; out.xmp</a></strong></dt> <dd> <p>Extract complete XMP data record intact from <code>a.jpg</code> and write it to <code>out.xmp</code> using the special <code>XMP</code> tag (see the Extra tags in <a href="TagNames/index.html">Image::ExifTool::TagNames</a>).</p> </dd> <dt><strong><a name="exiftool_p_filename_has_date_datetimeoriginal_q_f_dir" class="item">exiftool -p '$filename has date $dateTimeOriginal' -q -f dir</a></strong></dt> <dd> <p>Print one line of output containing the file name and DateTimeOriginal for each image in directory <code>dir</code>.</p> </dd> <dt><strong><a name="exiftool_ee_p_gpslatitude_gpslongitude_gpstimestamp_a_m2ts" class="item">exiftool -ee -p '$gpslatitude, $gpslongitude, $gpstimestamp' a.m2ts</a></strong></dt> <dd> <p>Extract all GPS positions from an AVCHD video.</p> </dd> <dt><strong><a name="exiftool_icc_profile_b_w_icc_image_jpg" class="item">exiftool -icc_profile -b -w icc image.jpg</a></strong></dt> <dd> <p>Save complete ICC_Profile from an image to an output file with the same name and an extension of <code>.icc</code>.</p> </dd> <dt><strong><a name="exiftool_htmldump_w_tmp_f_e_html_t_images" class="item">exiftool -htmldump -w tmp/%f_%e.html t/images</a></strong></dt> <dd> <p>Generate HTML pages from a hex dump of EXIF information in all images from the <code>t/images</code> directory. The output HTML files are written to the <code>tmp</code> directory (which is created if it didn't exist), with names of the form 'FILENAME_EXT.html'.</p> </dd> <dt><strong><a name="exiftool_a_b_ee_embeddedimage_w_image_3g3_s_file_pdf" class="item">exiftool -a -b -ee -embeddedimage -W Image_%.3g3.%s file.pdf</a></strong></dt> <dd> <p>Extract embedded JPG and JP2 images from a PDF file. The output images will have file names like &quot;Image_#.jpg&quot; or &quot;Image_#.jp2&quot;, where &quot;#&quot; is the ExifTool family 3 embedded document number for the image.</p> </dd> </dl> <p> </p> <hr /> <h1><a name="writing_examples">WRITING EXAMPLES</a></h1> <p>Note that quotes are necessary around arguments which contain certain special characters such as <code>&gt;</code>, <code>&lt;</code> or any white space. These quoting techniques are shell dependent, but the examples below will work for most Unix shells. With the Windows cmd shell however, double quotes should be used (eg. -Comment=&#34;This is a new comment&#34;).</p> <dl> <dt><strong><a name="exiftool_comment_this_is_a_new_comment_dst_jpg" class="item">exiftool -Comment='This is a new comment' dst.jpg</a></strong></dt> <dd> <p>Write new comment to a JPG image (replaces any existing comment).</p> </dd> <dt><strong><a name="exiftool_comment_o_newdir_ext_jpg" class="item">exiftool -comment= -o newdir -ext jpg .</a></strong></dt> <dd> <p>Remove comment from all JPG images in the current directory, writing the modified images to a new directory.</p> </dd> <dt><strong><a name="exiftool_keywords_exif_keywords_editor_dst_jpg" class="item">exiftool -keywords=EXIF -keywords=editor dst.jpg</a></strong></dt> <dd> <p>Replace existing keyword list with two new keywords (<code>EXIF</code> and <code>editor</code>).</p> </dd> <dt><strong><a name="exiftool_keywords_word_o_newfile_jpg_src_jpg" class="item">exiftool -Keywords+=word -o newfile.jpg src.jpg</a></strong></dt> <dd> <p>Copy a source image to a new file, and add a keyword (<code>word</code>) to the current list of keywords.</p> </dd> <dt><strong><a name="exiftool_exposurecompensation_0_5_a_jpg" class="item">exiftool -exposurecompensation+=-0.5 a.jpg</a></strong></dt> <dd> <p>Decrement the value of ExposureCompensation by 0.5 EV. Note that += with a negative value is used for decrementing because the -= operator is used for conditional deletion (see next example).</p> </dd> <dt><strong><a name="exiftool_credit_xxx_dir" class="item">exiftool -credit-=xxx dir</a></strong></dt> <dd> <p>Delete Credit information from all files in a directory where the Credit value was <code>xxx</code>.</p> </dd> <dt><strong><a name="exiftool_xmp_description_de_k_uuml_hl_e_dst_jpg" class="item">exiftool -xmp:description-de='k&amp;uuml;hl' -E dst.jpg</a></strong></dt> <dd> <p>Write alternate language for XMP:Description, using HTML character escaping to input special characters.</p> </dd> <dt><strong><a name="exiftool_all_dst_jpg" class="item">exiftool -all= dst.jpg</a></strong></dt> <dd> <p>Delete all meta information from an image. Note: You should NOT do this to RAW images (except DNG) since proprietary RAW image formats often contain information in the makernotes that is necessary for converting the image.</p> </dd> <dt><strong><a name="exiftool_all_comment_lonely_dst_jpg" class="item">exiftool -all= -comment='lonely' dst.jpg</a></strong></dt> <dd> <p>Delete all meta information from an image and add a comment back in. (Note that the order is important: <code>-comment='lonely' -all=</code> would also delete the new comment.)</p> </dd> <dt><strong><a name="exiftool_all_jfif_all_dst_jpg" class="item">exiftool -all= --jfif:all dst.jpg</a></strong></dt> <dd> <p>Delete all meta information except JFIF group from an image.</p> </dd> <dt><strong><a name="exiftool_photoshop_all_dst_jpg" class="item">exiftool -Photoshop:All= dst.jpg</a></strong></dt> <dd> <p>Delete Photoshop meta information from an image (note that the Photoshop information also includes IPTC).</p> </dd> <dt><strong><a name="exiftool_r_xmp_crss_all_dir" class="item">exiftool -r -XMP-crss:all= DIR</a></strong></dt> <dd> <p>Recursively delete all XMP-crss information from images in a directory.</p> </dd> <dt><strong><a name="exiftool_thumbnailimage_thumb_jpg_dst_jpg" class="item">exiftool '-ThumbnailImage&lt;=thumb.jpg' dst.jpg</a></strong></dt> <dd> <p>Set the thumbnail image from specified file (Note: The quotes are necessary to prevent shell redirection).</p> </dd> <dt><strong><a name="exiftool_jpgfromraw_d_f_jfr_jpg_ext_nef_r" class="item">exiftool '-JpgFromRaw&lt;=%d%f_JFR.JPG' -ext NEF -r .</a></strong></dt> <dd> <p>Recursively write JPEG images with filenames ending in <code>_JFR.JPG</code> to the JpgFromRaw tag of like-named files with extension <code>.NEF</code> in the current directory. (This is the inverse of the <code>-JpgFromRaw</code> command of the <a href="#reading_examples">READING EXAMPLES</a> section above.)</p> </dd> <dt><strong><a name="exiftool_datetimeoriginal_0_0_0_1_30_0_dir" class="item">exiftool -DateTimeOriginal-='0:0:0 1:30:0' dir</a></strong></dt> <dd> <p>Adjust original date/time of all images in directory <code>dir</code> by subtracting one hour and 30 minutes. (This is equivalent to <code>-DateTimeOriginal-=1.5</code>. See <a href="Shift.html">Image::ExifTool::Shift.pl</a> for details.)</p> </dd> <dt><strong><a name="exiftool_createdate_3_modifydate_3_a_jpg_b_jpg" class="item">exiftool -createdate+=3 -modifydate+=3 a.jpg b.jpg</a></strong></dt> <dd> <p>Add 3 hours to the CreateDate and ModifyDate timestamps of two images.</p> </dd> <dt><strong><a name="exiftool_alldates_1_30_if_make_eq_canon_dir" class="item">exiftool -AllDates+=1:30 -if '$make eq &#34;Canon&#34;' dir</a></strong></dt> <dd> <p>Shift the values of DateTimeOriginal, CreateDate and ModifyDate forward by 1 hour and 30 minutes for all Canon images in a directory. (The AllDates tag is provided as a shortcut for these three tags, allowing them to be accessed via a single tag.)</p> </dd> <dt><strong><a name="exiftool_xmp_city_kingston_image1_jpg_image2_nef" class="item">exiftool -xmp:city=Kingston image1.jpg image2.nef</a></strong></dt> <dd> <p>Write a tag to the XMP group of two images. (Without the <code>xmp:</code> this tag would get written to the IPTC group since <code>City</code> exists in both, and IPTC is preferred by default.)</p> </dd> <dt><strong><a name="unknown" class="item">exiftool -LightSource-='Unknown (0)' dst.tiff</a></strong></dt> <dd> <p>Delete <code>LightSource</code> tag only if it is unknown with a value of 0.</p> </dd> <dt><strong><a name="exiftool_whitebalance_auto_whitebalance_tung_dst_jpg" class="item">exiftool -whitebalance-=auto -WhiteBalance=tung dst.jpg</a></strong></dt> <dd> <p>Set <code>WhiteBalance</code> to <code>Tungsten</code> only if it was previously <code>Auto</code>.</p> </dd> <dt><strong><a name="exiftool_comment_comment_new_comment_a_jpg" class="item">exiftool -comment-= -comment='new comment' a.jpg</a></strong></dt> <dd> <p>Write a new comment only if the image doesn't have one already.</p> </dd> <dt><strong><a name="exiftool_o_d_f_xmp_dir" class="item">exiftool -o %d%f.xmp dir</a></strong></dt> <dd> <p>Create XMP meta information data files for all images in <code>dir</code>.</p> </dd> <dt><strong><a name="exiftool_o_test_xmp_owner_phil_title_xmp_file" class="item">exiftool -o test.xmp -owner=Phil -title='XMP File'</a></strong></dt> <dd> <p>Create an XMP data file only from tags defined on the command line.</p> </dd> <dt><strong><a name="exiftool_icc_profile_d_f_icc_image_jpg" class="item">exiftool '-ICC_Profile&lt;=%d%f.icc' image.jpg</a></strong></dt> <dd> <p>Write ICC_Profile to an image from a <code>.icc</code> file of the same name.</p> </dd> <dt><strong><a name="exiftool_hierarchicalkeywords_keyword_one_children_keyword_b" class="item">exiftool -hierarchicalkeywords='{keyword=one,children={keyword=B}}'</a></strong></dt> <dd> <p>Write structured XMP information. See <a href="http://owl.phy.queensu.ca/~phil/exiftool/struct.html">http://owl.phy.queensu.ca/~phil/exiftool/struct.html</a> for more details.</p> </dd> <dt><strong><a name="exiftool_trailer_all_image_jpg" class="item">exiftool -trailer:all= image.jpg</a></strong></dt> <dd> <p>Delete any trailer found after the end of image (EOI) in a JPEG file. A number of digital cameras store a large PreviewImage after the JPEG EOI, and the file size may be reduced significantly by deleting this trailer. See the <a href="TagNames/JPEG.html">JPEG Tags documentation</a> for a list of recognized JPEG trailers.</p> </dd> </dl> <p> </p> <hr /> <h1><a name="copying_examples">COPYING EXAMPLES</a></h1> <p>These examples demonstrate the ability to copy tag values between files.</p> <dl> <dt><strong><a name="exiftool_tagsfromfile_src_cr2_dst_jpg" class="item">exiftool -tagsFromFile src.cr2 dst.jpg</a></strong></dt> <dd> <p>Copy the values of all writable tags from <code>src.cr2</code> to <code>dst.jpg</code>, writing the information to same-named tags in the preferred groups.</p> </dd> <dt><strong><a name="exiftool_tagsfromfile_src_jpg_all_all_dst_jpg" class="item">exiftool -TagsFromFile src.jpg -all:all dst.jpg</a></strong></dt> <dd> <p>Copy the values of all writable tags from <code>src.jpg</code> to <code>dst.jpg</code>, preserving the original tag groups.</p> </dd> <dt><strong><a name="exiftool_all_tagsfromfile_src_jpg_exif_all_dst_jpg" class="item">exiftool -all= -tagsfromfile src.jpg -exif:all dst.jpg</a></strong></dt> <dd> <p>Erase all meta information from <code>dst.jpg</code> image, then copy EXIF tags from <code>src.jpg</code>.</p> </dd> <dt><strong><a name="exiftool_exif_all_tagsfromfile_all_all_unsafe_bad_jpg" class="item">exiftool -exif:all= -tagsfromfile @ -all:all -unsafe bad.jpg</a></strong></dt> <dd> <p>Rebuild all EXIF meta information from scratch in an image. This technique can be used in JPEG images to repair corrupted EXIF information which otherwise could not be written due to errors. The <code>Unsafe</code> tag is a shortcut for unsafe EXIF tags in JPEG images which are not normally copied. See the <a href="TagNames/index.html">tag name documentation</a> for more details about unsafe tags.</p> </dd> <dt><strong><a name="exiftool_tagsfromfile_a_jpg_out_xmp" class="item">exiftool -Tagsfromfile a.jpg out.xmp</a></strong></dt> <dd> <p>Copy meta information from <code>a.jpg</code> to an XMP data file. If the XMP data file <code>out.xmp</code> already exists, it will be updated with the new information. Otherwise the XMP data file will be created. Only XMP, ICC and MIE files may be created like this (other file types may be edited but not created). See <a href="#writing_examples">WRITING EXAMPLES</a> above for another technique to generate XMP files.</p> </dd> <dt><strong><a name="exiftool_tagsfromfile_a_jpg_xmp_all_thumbnailimage_m_b_jpg" class="item">exiftool -tagsFromFile a.jpg -XMP:All= -ThumbnailImage= -m b.jpg</a></strong></dt> <dd> <p>Copy all meta information from <code>a.jpg</code> to <code>b.jpg</code>, deleting all XMP information and the thumbnail image from the destination.</p> </dd> <dt><strong><a name="exiftool_tagsfromfile_src_jpg_title_author_phil_dst_jpg" class="item">exiftool -TagsFromFile src.jpg -title -author=Phil dst.jpg</a></strong></dt> <dd> <p>Copy title from one image to another and set a new author name.</p> </dd> <dt><strong><a name="exiftool_tagsfromfile_a_jpg_iso_tagsfromfile_b_jpg_comment_dst_jpg" class="item">exiftool -TagsFromFile a.jpg -ISO -TagsFromFile b.jpg -comment dst.jpg</a></strong></dt> <dd> <p>Copy ISO from one image and Comment from another image to a destination image.</p> </dd> <dt><strong><a name="exiftool_tagsfromfile_src_jpg_exif_all_subifd_all_dst_jpg" class="item">exiftool -tagsfromfile src.jpg -exif:all --subifd:all dst.jpg</a></strong></dt> <dd> <p>Copy only the EXIF information from one image to another, excluding SubIFD tags.</p> </dd> <dt><strong><a name="exiftool_filemodifydate_datetimeoriginal_dir" class="item">exiftool '-FileModifyDate&lt;DateTimeOriginal' dir</a></strong></dt> <dd> <p>Use the original date from the meta information to set the same file's filesystem modification date for all images in a directory. (Note that <code>-TagsFromFile @</code> is assumed if no other <strong>-TagsFromFile</strong> is specified when redirecting information as in this example.)</p> </dd> <dt><strong><a name="exiftool_tagsfromfile_src_jpg_xmp_all_all_dst_jpg" class="item">exiftool -TagsFromFile src.jpg '-xmp:all&lt;all' dst.jpg</a></strong></dt> <dd> <p>Copy all possible information from <code>src.jpg</code> and write in XMP format to <code>dst.jpg</code>.</p> </dd> <dt><strong><a name="exiftool_iptc2xmp_args_iptc_all_a_jpg" class="item">exiftool -@ iptc2xmp.args -iptc:all= a.jpg</a></strong></dt> <dd> <p>Translate IPTC information to XMP with appropriate tag name conversions, and delete the original IPTC information from an image. This example uses iptc2xmp.args, which is a file included with the ExifTool distribution that contains the required arguments to convert IPTC information to XMP format. Also included with the distribution are xmp2iptc.args (which performs the inverse conversion) and a few more .args files for other conversions between EXIF, IPTC and XMP.</p> </dd> <dt><strong><a name="exiftool_tagsfromfile_d_f_cr2_r_ext_jpg_dir" class="item">exiftool -tagsfromfile %d%f.CR2 -r -ext JPG dir</a></strong></dt> <dd> <p>Recursively rewrite all <code>JPG</code> images in <code>dir</code> with information copied from the corresponding <code>CR2</code> images in the same directories.</p> </dd> <dt><strong><a name="exiftool_keywords_make_image_jpg" class="item">exiftool '-keywords+&lt;make' image.jpg</a></strong></dt> <dd> <p>Add camera make to list of keywords.</p> </dd> <dt><strong><a name="exiftool_comment_iso_exif_iso_exposure_shutterspeed_dir" class="item">exiftool '-comment&lt;ISO=$exif:iso Exposure=${shutterspeed}' dir</a></strong></dt> <dd> <p>Set the Comment tag of all images in <code>dir</code> from the values of the EXIF:ISO and ShutterSpeed tags. The resulting comment will be in the form &quot;ISO=100 Exposure=1/60&quot;.</p> </dd> <dt><strong><a name="exiftool_tagsfromfile_src_jpg_icc_profile_dst_jpg" class="item">exiftool -TagsFromFile src.jpg -icc_profile dst.jpg</a></strong></dt> <dd> <p>Copy ICC_Profile from one image to another.</p> </dd> <dt><strong><a name="exiftool_tagsfromfile_src_jpg_all_all_dst_mie" class="item">exiftool -TagsFromFile src.jpg -all:all dst.mie</a></strong></dt> <dd> <p>Copy all meta information in its original form from a JPEG image to a MIE file. The MIE file will be created if it doesn't exist. This technique can be used to store the metadata of an image so it can be inserted back into the image (with the inverse command) later in a workflow.</p> </dd> <dt><strong><a name="exiftool_o_dst_mie_all_all_src_jpg" class="item">exiftool -o dst.mie -all:all src.jpg</a></strong></dt> <dd> <p>This command performs exactly the same task as the command above, except that the <strong>-o</strong> option will not write to an output file that already exists.</p> </dd> <dt><strong><a name="exiftool_if_jpgfromraw_b_jpgfromraw_w_d_f_ue_jpg_execute_if_previewimage_b_previewimage_w_d_f_ue_jpg_execute_tagsfromfile_srcfile_d_f_ue_jpg_overwrite_original_common_args_ext_jpg_dir" class="item">exiftool -if '$jpgfromraw' -b -jpgfromraw -w %d%f_%ue.jpg -execute -if '$previewimage' -b -previewimage -w %d%f_%ue.jpg -execute -tagsfromfile @ -srcfile %d%f_%ue.jpg -overwrite_original -common_args --ext jpg DIR</a></strong></dt> <dd> <p>[Advanced] Extract JpgFromRaw or PreviewImage from all but JPG files in DIR, saving them with file names like <code>image_EXT.jpg</code>, then add all meta information from the original files to the extracted images. Here, the command line is broken into three sections (separated by <strong>-execute</strong> options), and each is executed as if it were a separate command. The <strong>-common_args</strong> option causes the <code>--ext jpg DIR</code> arguments to be applied to all three commands, and the <strong>-srcfile</strong> option allows the extracted JPG image to be the source file for the third command (whereas the RAW files are the source files for the other two commands).</p> </dd> </dl> <p> </p> <hr /> <h1><a name="renaming_examples">RENAMING EXAMPLES</a></h1> <p>By writing the <code>FileName</code> and <code>Directory</code> tags, files are renamed and/or moved to new directories. This can be particularly useful and powerful for organizing files by date when combined with the <strong>-d</strong> option. New directories are created as necessary, but existing files will not be overwritten. The format codes %d, %f and %e may be used in the new file name to represent the directory, name and extension of the original file, and %c may be used to add a copy number if the file already exists (see the <strong>-w</strong> option for details). Note that if used within a date format string, an extra '%' must be added to pass these codes through the date/time parser. (And further note that in a Windows batch file, all '%' characters must also be escaped, so in this extreme case '%%%%f' is necessary to pass a simple '%f' through the two levels of parsing.) See <a href="http://owl.phy.queensu.ca/~phil/exiftool/filename.html">http://owl.phy.queensu.ca/~phil/exiftool/filename.html</a> for additional documentation and examples.</p> <dl> <dt><strong><a name="exiftool_filename_new_jpg_dir_old_jpg" class="item">exiftool -filename=new.jpg dir/old.jpg</a></strong></dt> <dd> <p>Rename <code>old.jpg</code> to <code>new.jpg</code> in directory <code>dir</code>.</p> </dd> <dt><strong><a name="exiftool_directory_e_dir" class="item">exiftool -directory=%e dir</a></strong></dt> <dd> <p>Move all files from directory <code>dir</code> into directories named by the original file extensions.</p> </dd> <dt><strong><a name="exiftool_directory_datetimeoriginal_d_y_m_d_dir" class="item">exiftool '-Directory&lt;DateTimeOriginal' -d %Y/%m/%d dir</a></strong></dt> <dd> <p>Move all files in <code>dir</code> into a directory hierarchy based on year, month and day of <code>DateTimeOriginal</code>. eg) This command would move the file <code>dir/image.jpg</code> with a <code>DateTimeOriginal</code> of <code>2005:10:12 16:05:56</code> to <code>2005/10/12/image.jpg</code>.</p> </dd> <dt><strong><a name="exiftool_o_directory_datetimeoriginal_d_y_m_d_dir" class="item">exiftool -o . '-Directory&lt;DateTimeOriginal' -d %Y/%m/%d dir</a></strong></dt> <dd> <p>Same effect as above except files are copied instead of moved.</p> </dd> <dt><strong><a name="exiftool_filename_f_model_e_dir" class="item">exiftool '-filename&lt;%f_${model;}.%e' dir</a></strong></dt> <dd> <p>Rename all files in <code>dir</code> by adding the camera model name to the file name. The semicolon after the tag name inside the braces causes characters which are invalid in Windows file names to be deleted from the tag value (see the <strong>-p</strong> option documentation for an explanation).</p> </dd> <dt><strong><a name="exiftool_filename_createdate_d_y_m_d_h_m_s_c_e_dir" class="item">exiftool '-FileName&lt;CreateDate' -d %Y%m%d_%H%M%S%%-c.%%e dir</a></strong></dt> <dd> <p>Rename all images in <code>dir</code> according to the <code>CreateDate</code> date and time, adding a copy number with leading '-' if the file already exists (<code>%-c</code>), and preserving the original file extension (<code>%e</code>). Note the extra '%' necessary to escape the filename codes (<code>%c</code> and <code>%e</code>) in the date format string.</p> </dd> <dt><strong><a name="exiftool_r_filename_createdate_d_y_m_d_h_m_f_e_dir" class="item">exiftool -r '-FileName&lt;CreateDate' -d %Y-%m-%d/%H%M_%%f.%%e dir</a></strong></dt> <dd> <p>Both the directory and the filename may be changed together via the <code>FileName</code> tag if the new <code>FileName</code> contains a '/'. The example above recursively renames all images in a directory by adding a <code>CreateDate</code> timestamp to the start of the filename, then moves them into new directories named by date.</p> </dd> <dt><strong><a name="exiftool_filename_createdate_filenumber_jpg_d_y_m_d_ext_jpg" class="item">exiftool '-FileName&lt;${CreateDate}_$filenumber.jpg' -d %Y%m%d -ext jpg .</a></strong></dt> <dd> <p>Set the filename of all JPG images in the current directory from the CreateDate and FileNumber tags, in the form &quot;20060507_118-1861.jpg&quot;.</p> </dd> </dl> <p> </p> <hr /> <h1><a name="geotagging_examples">GEOTAGGING EXAMPLES</a></h1> <p>ExifTool implements geotagging via 3 special tags: Geotag (which for convenience is also implemented as an exiftool option), Geosync and Geotime. The examples below highlight some geotagging features. See <a href="http://owl.phy.queensu.ca/~phil/exiftool/geotag.html">http://owl.phy.queensu.ca/~phil/exiftool/geotag.html</a> for additional documentation.</p> <dl> <dt><strong><a name="exiftool_geotag_track_log_a_jpg" class="item">exiftool -geotag track.log a.jpg</a></strong></dt> <dd> <p>Geotag an image (<code>a.jpg</code>) from position information in a GPS track log (<code>track.log</code>). Since the <code>Geotime</code> tag is not specified, the value of DateTimeOriginal is used for geotagging. Local system time is assumed unless DateTimeOriginal contains a timezone.</p> </dd> <dt><strong><a name="exiftool_geotag_t_log_geotime_2009_04_02_13_41_12_05_00_a_jpg" class="item">exiftool -geotag t.log -geotime='2009:04:02 13:41:12-05:00' a.jpg</a></strong></dt> <dd> <p>Geotag an image with the GPS position for a specific time. (Note that the <code>Geotag</code> tag must be assigned before <code>Geotime</code> for the GPS data to be available when <code>Geotime</code> is set.)</p> </dd> <dt><strong><a name="exiftool_geotag_log_gpx_xmp_geotime_createdate_dir" class="item">exiftool -geotag log.gpx '-xmp:geotime&lt;createdate' dir</a></strong></dt> <dd> <p>Geotag all images in directory <code>dir</code> with XMP tags instead of EXIF tags, based on the image CreateDate. (In this case, the order of the arguments doesn't matter because tags with values copied from other tags are always set after constant values.)</p> </dd> <dt><strong><a name="exiftool_geotag_a_log_geosync_20_dir" class="item">exiftool -geotag a.log -geosync=-20 dir</a></strong></dt> <dd> <p>Geotag images in directory <code>dir</code>, accounting for image timestamps which were 20 seconds ahead of GPS.</p> </dd> <dt><strong><a name="exiftool_geotag_a_log_geosync_1_jpg_geosync_2_jpg_dir" class="item">exiftool -geotag a.log -geosync=1.jpg -geosync=2.jpg dir</a></strong></dt> <dd> <p>Geotag images using time synchronization from two previously geotagged images (1.jpg and 2.jpg), synchronizing the image and GPS times using a linear time drift correction.</p> </dd> <dt><strong><a name="exiftool_geotag_a_log_geotime_createdate_01_00_dir" class="item">exiftool -geotag a.log '-geotime&lt;${createdate}+01:00' dir</a></strong></dt> <dd> <p>Geotag images in <code>dir</code> using CreateDate with the specified timezone. If CreateDate already contained a timezone, then the timezone specified on the command line is ignored.</p> </dd> <dt><strong><a name="exiftool_geotag_a_jpg" class="item">exiftool -geotag= a.jpg</a></strong></dt> <dd> <p>Delete GPS tags which may have been added by the geotag feature. Note that this does not remove all GPS tags -- to do this instead use <code>-gps:all=</code>.</p> </dd> <dt><strong><a name="exiftool_xmp_geotag_a_jpg" class="item">exiftool -xmp:geotag= a.jpg</a></strong></dt> <dd> <p>Delete XMP GPS tags which were added by the geotag feature.</p> </dd> <dt><strong><a name="exiftool_xmp_geotag_track_log_a_jpg" class="item">exiftool -xmp:geotag=track.log a.jpg</a></strong></dt> <dd> <p>Geotag an image with XMP tags, using the time from DateTimeOriginal.</p> </dd> <dt><strong><a name="exiftool_geotag_a_log_geotag_b_log_r_dir" class="item">exiftool -geotag a.log -geotag b.log -r dir</a></strong></dt> <dd> <p>Combine multiple track logs and geotag an entire directory tree of images.</p> </dd> <dt><strong><a name="exiftool_geotag_tracks_log_r_dir" class="item">exiftool -geotag 'tracks/*.log' -r dir</a></strong></dt> <dd> <p>Read all track logs from the <code>tracks</code> directory.</p> </dd> <dt><strong><a name="exiftool_p_gpx_fmt_d_y_m_dt_h_m_sz_dir_out_gpx" class="item">exiftool -p gpx.fmt -d %Y-%m-%dT%H:%M:%SZ dir &gt; out.gpx</a></strong></dt> <dd> <p>Generate a GPX track log from all images in directory <code>dir</code>. This example uses the <code>gpx.fmt</code> file included in the full ExifTool distribution package and assumes that the images in <code>dir</code> have all been previously geotagged.</p> </dd> </dl> <p> </p> <hr /> <h1><a name="piping_examples">PIPING EXAMPLES</a></h1> <dl> <dt><strong><a name="cat_a_jpg_exiftool" class="item">cat a.jpg | exiftool -</a></strong></dt> <dd> <p>Extract information from stdin.</p> </dd> <dt><strong><a name="exiftool_image_jpg_thumbnailimage_b_exiftool" class="item">exiftool image.jpg -thumbnailimage -b | exiftool -</a></strong></dt> <dd> <p>Extract information from an embedded thumbnail image.</p> </dd> <dt><strong><a name="cat_a_jpg_exiftool_iptc_keywords_fantastic_b_jpg" class="item">cat a.jpg | exiftool -iptc:keywords+=fantastic - &gt; b.jpg</a></strong></dt> <dd> <p>Add an IPTC keyword in a pipeline, saving output to a new file.</p> </dd> <dt><strong><a name="curl_s_http_a_domain_com_bigfile_jpg_exiftool_fast" class="item">curl -s <a href="http://a.domain.com/bigfile.jpg">http://a.domain.com/bigfile.jpg</a> | exiftool -fast -</a></strong></dt> <dd> <p>Extract information from an image over the internet using the cURL utility. The <strong>-fast</strong> option prevents exiftool from scanning for trailer information, so only the meta information header is transferred.</p> </dd> <dt><strong><a name="exiftool_a_jpg_thumbnailimage_b_exiftool_comment_wow_exiftool_a_jpg_thumbnailimage" class="item">exiftool a.jpg -thumbnailimage -b | exiftool -comment=wow - | exiftool a.jpg -thumbnailimage'&lt;=-'</a></strong></dt> <dd> <p>Add a comment to an embedded thumbnail image. (Why anyone would want to do this I don't know, but I've included this as an example to illustrate the flexibility of ExifTool.)</p> </dd> </dl> <p> </p> <hr /> <h1><a name="diagnostics">DIAGNOSTICS</a></h1> <p>The exiftool application exits with a status of 0 on success, or 1 if an error occurred or if all files failed the <strong>-if</strong> condition (for any of the commands if <strong>-execute</strong> was used).</p> <p> </p> <hr /> <h1><a name="author">AUTHOR</a></h1> <p>Copyright 2003-2016, Phil Harvey</p> <p>This is free software; you can redistribute it and/or modify it under the same terms as Perl itself.</p> <p> </p> <hr /> <h1><a name="see_also">SEE ALSO</a></h1> <p><a href="ExifTool.html">Image::ExifTool(3pm)</a>, <a href="TagNames/index.html">Image::ExifTool::TagNames(3pm)</a>, <a href="http://search.cpan.org/dist/Image-ExifTool/lib/Image/ExifTool/Shortcuts.pm">Image::ExifTool::Shortcuts(3pm)</a>, <a href="Shift.html">Image::ExifTool::Shift.pl</a></p> <table border="0" width="100%" cellspacing="0" cellpadding="3"> <tr><td class="block" style="background-color: #cccccc" valign="middle"> <big><strong><span class="block">&nbsp;exiftool Application Documentation</span></strong></big> </td></tr> </table> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/faq.html������������������������������������������������������������������000644 �000765 �000024 �00000227742 12645452057 017014� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> <html> <head> <title>ExifTool FAQ</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <style type="text/css"> <!-- pre { color: #800; margin-left: 2em } ol.index { margin: 0; padding: 0 0 0 2em } .U { color: #c84 } /* unused data block */ .prog { padding: 0.5em; border: 1px solid gray; background: #fee } --> </style> </head> <body> <div class='index'> <ol class='index'> <li><a href="#Q1">Discussion forum</a></li> <li><a href="#Q2">Determining tag names</a></li> <li><a href="#Q3">ExifTool doesn't read/write properly</a></li> <li><a href="#Q4">Aperture and shutter speed</a></li> <li><a href="#Q5">Date and time formats</a></li> <li><a href="#Q6">"Can't convert TAG" errors</a></li> <li><a href="#Q7">Deleting all EXIF from a TIFF</a></li> <li><a href="#Q8">Writing Make, Model &amp; MakerNotes</a></li> <li><a href="#Q9">Tag locations when copying</a></li> <li><a href="#Q10">Coded character sets</a></li> <li><a href="#Q11">User-defined tags</a></li> <li><a href="#Q12">Export to database</a></li> <li><a href="#Q13">Output file size</a></li> <li><a href="#Q14">GPS coordinate format</a></li> <li><a href="#Q15">MakerNote errors</a></li> <li><a href="#Q16">Some files not renamed</a></li> <li><a href="#Q17">List-type tags</a></li> <li><a href="#Q18">Windows character encoding</a></li> <li><a href="#Q19">Formatting tag values</a></li> <li><a href="#Q20">Write errors (repair corrupted EXIF)</a></li> <li><a href="#Q21">Newlines in values</a></li> <li><a href="#Q22">Order of operations</a></li> <li><a href="#Q23">"0 image files updated"</a></li> <li><a href="#Q24">Date/time gets reset to today</a></li> <li><a href="#Q25">Image validation</a></li> <li><a href="#Q26">Import from database</a></li> </ol> </div> <h1 class='up'>ExifTool FAQ</h1> <a name="Q1"></a> <p>1. <b>"Is there a forum for discussing ExifTool issues?"</b></p> <blockquote> ExifTool issues can be discussed on the ExifTool forum at <a href="http://u88.n24.queensu.ca/exiftool/forum/">http://u88.n24.queensu.ca/exiftool/forum/</a> </blockquote> <a name="Q2"></a> <p>2. <b>"How do I determine the tag name for some information?"</b></p> <blockquote>When you run exiftool, by default it prints descriptions, not tag names, for the information it extracts. These descriptions are in English unless the <code>-lang</code> option is used to select another language. Note that descriptions often contain spaces between words, but tag names never do. Also, tag names are always English, regardless of the <code>-lang</code> setting. To print the tag names instead instead of descriptions, use the <code>-s</code> option when extracting information. eg) <pre>exiftool -s image.jpg</pre> Valid characters in tag names are <code>A-Z</code>, <code>a-z</code>, <code>0-9</code>, <code>_</code> and <code>-</code>. See the <a href="TagNames/index.html">tag name documentation</a> for a complete list of available tag names.</blockquote> <blockquote>Tag names may be optionally prefixed by a family 0 or 1 group name to specify a particular information type or location. Use the <code>-g0</code> and <code>-g1</code> (or <code>-G0</code> and <code>-G1</code>) options when extracting information to see the corresponding group names. </blockquote> <a name="Q3"></a> <p>3a. <b>"ExifTool reports the wrong value or doesn't extract a tag"</b>, <br>3b. <b>"ExifTool doesn't write a tag properly"</b>, or <br>3c. <b>"Other software can't read information written by ExifTool"</b></p> <blockquote><i>[Also see <a href="#Q23">FAQ number 23</a> for reasons why ExifTool may not write some tags to certain file types.]</i></blockquote> <blockquote>First, make sure you are looking at the right information. Use ExifTool with a command like this to extract all information from the file, along with the location it was written: <pre>exiftool -a -G1 -s c:\images\test.jpg</pre> In this command, <code>-a</code> allows duplicate tags to be extracted, <code>-G1</code> shows the family 1 group name (ie. the location) of each tag, and <code>-s</code> shows the tag names instead of their descriptions. (Substitute the path name of your file in place of "<code>c:\images\test.jpg</code>".)</blockquote> <blockquote>When duplicate tags exist, only one is extracted unless the <code>-a</code> option is used. Beware that options like <code>-EXIF:all</code> select all EXIF tags from the extracted tags, so EXIF tags hidden by duplicate tags in other locations will not appear in the output for <code>-EXIF:all</code>. For example, the command <pre>exiftool -gps:all image.jpg</pre> will NOT necessarily extract all GPS tags because some GPS tags may have been suppressed by same-named tags in other groups. To be sure all GPS tags are extracted, the <code>-a</code> option must be used: <pre>exiftool -a -gps:all image.jpg</pre> If you are having problems with other software reading information written by ExifTool, if possible try first writing the information from the other software, then use ExifTool (with the <code>-a</code> and <code>-G1</code> options) to determine where the information was written. Once you know where it should go, you can use ExifTool to write to this location. You can read or write information in a specific location by prefixing the tag name on the command line with the desired group name. eg.) "<code>-ExifIFD:DateTimeOriginal</code>" </blockquote> <blockquote>This problem may also occur if contradictory information exists in different meta information formats within the same file. For example, often XMP will be ignored if IPTC exists and the Photoshop:IPTCDigest does not agree with the IPTC content. The <a href="http://www.metadataworkinggroup.org/">Metadata Working Group</a> recommends techniques to keep the EXIF, IPTC and XMP metadata synchronized. These recommendations are implemented by the ExifTool <a href="TagNames/MWG.html">MWG tags</a>. For maximum compatibility with the widest range of applications, it is suggested that these MWG tags be used whenever possible.</blockquote> <blockquote>One final note: When writing, the <code>-v2</code> option may be useful because it provides details about what ExifTool is writing, and where. </blockquote> <a name="Q4"></a> <p>4. <b>"ExifTool reports more than one shutter speed or aperture value, and they are slightly different"</b></p> <blockquote> There are a number of different ways that aperture and shutter speed information are stored in many images. The standard EXIF values (EXIF:FNumber and EXIF:ExposureTime) should correspond to the values displayed by your camera, but these values may have been rounded off. The corresponding EXIF APEX values (EXIF:ApertureValue and EXIF:ShutterSpeedValue) may be different due to their own round-off errors. If available, the MakerNotes values may be the most accurate because they haven't been rounded off to nice even values for display, so with these you may see odd values like 1/102 instead of 1/100, etc. </blockquote> <a name="Q5"></a> <p>5. <b>"How do I format date and time information for writing?"</b></p> <blockquote>All information (including date/time information) is written in the same format as it is read out. When reading, ExifTool converts all date and time information to standard EXIF format, so this is also the way it is specified when writing. The standard EXIF date/time format is "<code>YYYY:mm:dd HH:MM:SS</code>", and some meta information formats such as XMP also allow sub-seconds and a timezone to be specified. The timezone format is "<code>+HH:MM</code>", "<code>-HH:MM</code>" or "<code>Z</code>". For example: <pre>exiftool -xmp:dateTimeOriginal="2005:10:23 20:06:34.33-05:00" a.jpg </pre> When writing XMP or other information types which allow incomplete date/time values, the following input formats are also accepted: <pre>YYYY YYYY:mm YYYY:mm:dd YYYY:mm:dd HH:MM </pre> Having said this, ExifTool is very flexible about the actual format of input date/time values when writing, and will attempt to reformat any values into the standard format unless the <code>-n</code> option is used. Any separators may be used (or in fact, none at all). The first 4 consecutive digits found in the value are interpreted as the year, then next 2 digits are the month, and so on. <i class=lt>[The year must be 4 digits. Other fields are expected to be 2 digits, but a single digit is allowed if the subsequent character is a non-digit.]</i> For EXIF date/time values, all 6 date/time fields must exist ("<code>YYYYmmddHHMMSS</code>"), but XMP date/time values require only the year ("<code>YYYY</code>"). This feature facilitates useful operations such as setting date/time tags from a date embedded in the file name. For example, the command <pre>exiftool "-alldates&lt;filename" c:\images</pre> will set the common date/time tags from the file name for all images in the directory "<code>c:\images</code>". This will work for any file name which matches the above criteria (eg. "IMG_20110927_103000.jpg"). <i class=lt>[AllDates is a shortcut for 3 tag names: DateTimeOriginal, CreateDate and ModifyDate. See the <a href="TagNames/Shortcuts.html">Shortcuts Tags documentation</a> for more information.]</i></blockquote> <blockquote>The <code>-d</code> option allows full control over the format of date/time values when reading. However, the effect of the <code>-d</code> option is not reversible, so date/time values must be written using the format described above, even when the <code>-d</code> option is used. Note that when reading, the effect of the <code>-n</code> option on date/time values is only to disable the <code>-d</code> formatting.</blockquote> <blockquote><b>Special feature</b>: A value of "<code>now</code>" may be used to represent the current time when writing any date/time tag. For example: <pre>exiftool -xmp:dateTimeOriginal=now a.jpg</pre> <i class=lt>[There is also a <a href="TagNames/Extra.html">Now tag</a> which may be used for a similar purpose by copying its value to another tag, but copying tags adds an extra read stage to the processing which is best avoided if performance is an issue.]</i> </blockquote> <a name="Q6"></a> <p>6. <b>"I get '<code>Can't convert TAG (not in PrintConv)</code>' errors when writing a tag"</b></p> <blockquote> By default, ExifTool applies a print conversion (PrintConv) to extracted information to make the output more human-readable. Some conversions involve lookup tables which are documented in the <b>Values</b> column of the <a href="TagNames/index.html">tag name documentation</a>. For example, the GPSAltitudeRef tag defines the following conversions: <pre>0 = Above Sea Level 1 = Below Sea Level </pre> For this tag, a value of '0' is printed as 'Above Sea Level', and '1' is printed as 'Below Sea Level'. Reading and writing with ExifTool is symmetrical <i>[with the possible exception of list-type tags -- see <a href="#Q17">FAQ number 17</a> below]</i>, so a value that is printed as 'Above Sea Level' must also be written in that form. (In other words, the inverse print conversion is applied when writing values.) For example, to write GPSAltitudeRef you can type: <pre>exiftool -gpsaltituderef="Above Sea Level" image.jpg </pre> or any unambiguous short form may be used and ExifTool will know what you mean, eg) <pre>exiftool -gpsaltituderef=above image.jpg </pre> Alternatively, the print conversion can be disabled for all tags with the <code>-n</code> option, or for individual tags by suffixing the tag name with a '<code>#</code>' character. In either case the printed value of GPSAltitudeRef will be '0' or '1' when extracting information, and the value is written in the same way. So following two commands have exactly the same effect as above: <pre>exiftool -gpsaltituderef=0 -n image.jpg exiftool -gpsaltituderef#=0 image.jpg </pre> Integer values may also be specified in hexadecimal (with a leading '0x'). For example, the following commands are all equivalent: <pre>exiftool -flash=1 -n image.jpg exiftool -flash=0x1 -n image.jpg exiftool -flash#=1 image.jpg exiftool -flash#=0x1 image.jpg exiftool -flash=fired image.jpg </pre></blockquote><blockquote class=prog> <b>Programmers</b>: These techniques look like this when calling Image::ExifTool functions from a Perl script: <pre>$exifTool->SetNewValue(flash => 1, Type => 'ValueConv'); $exifTool->SetNewValue(flash => 0x1, Type => 'ValueConv'); $exifTool->SetNewValue('flash#' => 1); $exifTool->SetNewValue('flash#' => 0x1); $exifTool->SetNewValue(flash => 'fired'); </pre></blockquote> <a name="Q7"></a> <p>7. <b>"I can't delete all EXIF information from a TIFF file using '<code>exiftool -exif:all= img.tif</code>'"</b></p> <blockquote>This is because of the way a TIFF file is structured. With a JPEG image, this command removes IFD0 (the main Image File Directory) as well as any subdirectories, thus removing all EXIF information. But with the TIFF format, the main image itself is stored in IFD0, so deleting this directory would destroy the image. The same is true for any TIFF-based RAW file such as DNG, CR2, NEF, etc. For these types of files, ExifTool just deletes the ExifIFD subdirectory, so any information stored in other directories is preserved. </blockquote> <blockquote>Use "<code>exiftool -a -G1 -s img.tif</code>" to see where the information is stored. Any tags remaining in other IFD's must be deleted individually from a TIFF-format file if desired. For convenience, a <a href="TagNames/Shortcuts.html">shortcut tag</a> is provided to simplify the deletion of common metadata tags from IFD0 by adding "<code>-CommonIFD0=</code>" to the command line. </blockquote> <a name="Q8"></a> <p>8a. <b>"All maker note information is lost if I change the Make or Model tag"</b>, or <br>8b. <b>"I can't copy maker note information to an image"</b>, or <br>8c. <b>"I can't view a RAW image after changing the model tag"</b></p> <blockquote> The Make and Model tags are used by some image utilities (including ExifTool) to determine the format of the maker note information. Deleting or changing either of these tags may prevent these utilities from recognizing or properly interpreting the maker notes (which, for a RAW image, may mean that the image can no longer be properly rendered). Also beware that the maker notes information may be damaged if an image is edited when the maker notes are not properly recognized. So it is a good idea not to edit the Make and Model tags in the first place.</blockquote> <blockquote>If you really want to delete the Make and Model information, you might as well delete the maker notes too. You can do this with either of the following commands: <pre>exiftool -make= -model= -makernotes:all= image.jpg exiftool -make= -model= -makernotes= image.jpg </pre> For the same reason, maker notes can not be copied to an image with an incompatible Make or Model. To do this, the Make and Model tags must also be copied. eg) <pre>exiftool -tagsfromfile src.jpg -makernotes -make -model dst.jpg </pre> (Note that in this case the "<code>-makernotes:all</code>" syntax does not work because it attempts to copy the maker note tags individually. Since maker note tags may not be created individually, they must instead be copied as a block with "<code>-makernotes</code>".) </blockquote> <a name="Q9"></a> <p>9a. <b>"The information is different when I copy all tags to a new file"</b>, or <br>9b. <b>"The tag locations change when I use <code>-tagsfromfile</code> to copy information"</b></p> <blockquote> This feature is explained under the <code>-tagsFromFile</code> option in the <a href="exiftool_pod.html">exiftool application documentation</a>, but the question is common enough that it is discussed here in more detail.</blockquote> <blockquote>By default, ExifTool will store information in preferred locations when either writing new information or copying information between files. This freedom allows ExifTool to write or copy information to files of different formats without requiring the user to know details about where the information is stored.</blockquote> <blockquote>The preferred general locations for information written to JPEG images are 1) EXIF, 2) IPTC and 3) XMP. As an example, information extracted from the maker notes will be preferentially written (on a tag-by-tag basis) in EXIF format when copying information between two JPEG images. But if a specific tag doesn't exist in EXIF, then the tag is written to the first valid group in the order specified above. The advantage of "translating" the information to EXIF is that it then becomes readable by applications which only support standard EXIF. The disadvantage is that you don't get an exact copy of the original information structure.</blockquote> <blockquote>But ExifTool gives you the ability to customize this behaviour to write the information to wherever you want. This is done by specifying a group name for the tag(s) to be copied. This applies even if the group name is "<code>all</code>", in which case the original family 1 group is preserved. So to copy all information and preserve the original structure, use this syntax: <pre>exiftool -tagsfromfile src.jpg -all:all dst.jpg </pre> In this command, since no destination tag was specified, the destination is the same as the source (ie. "<code>-all:all>all:all</code>"), so the information is copied to the same family 1 group.</blockquote> <blockquote>Here are some examples to show you the type of control you have over where the information is written. All commands in each example are equivalent: <pre><span class='blk'># copy all tags to preferred groups (no destination group)</span> exiftool -tagsfromfile src.jpg dst.jpg exiftool -tagsfromfile src.jpg -all dst.jpg exiftool -tagsfromfile src.jpg "-all&gt;all" dst.jpg exiftool -tagsfromfile src.jpg "-all:all&gt;all" dst.jpg <span class='blk'># copy all tags, preserving family 1 group (destination group 'all')</span> exiftool -tagsfromfile src.jpg -all:all dst.jpg exiftool -tagsfromfile src.jpg "-all&gt;all:all" dst.jpg exiftool -tagsfromfile src.jpg "-all:all&gt;all:all" dst.jpg <span class='blk'># copy all tags to EXIF group (destination group 'exif') # [the destination family 1 group is the preferred EXIF IFD]</span> exiftool -tagsfromfile src.jpg "-all&gt;exif:all" dst.jpg exiftool -tagsfromfile src.jpg "-all:all&gt;exif:all" dst.jpg <span class='blk'># copy XMP tags to XMP group (destination group 'xmp') # [the destination family 1 group is the preferred XMP namespace]</span> exiftool -tagsfromfile src.jpg "-xmp:all" dst.jpg exiftool -tagsfromfile src.jpg "-xmp:all&gt;xmp:all" dst.jpg <span class='blk'># copy XMP tags, preserving family 1 group (destination group 'all')</span> exiftool -tagsfromfile src.jpg "-xmp:all&gt;all:all" dst.jpg <span class='blk'># copy XMP tags to preferred groups (no destination group)</span> exiftool -tagsfromfile src.jpg "-xmp:all&gt;all" dst.jpg <span class='blk'># copy XMP tags to EXIF only (destination group 'exif') # [the destination family 1 group is the preferred EXIF IFD]</span> exiftool -tagsfromfile src.jpg "-xmp:all&gt;exif:all" dst.jpg </pre> The same rules illustrated above also apply when copying individual tags.</blockquote> <blockquote>Note: If no destination group is specified, a new tag is created if necessary only in the preferred group, but if the same tag already exists in another group, then this information is also updated. (Otherwise inconsistent values for the same information would exist in different locations. Of course, you can always generate inconsistencies like this if you really want to by specifically writing contradictory information to different groups.) </blockquote> <blockquote>Certain types of meta information (such as EXIF, IPTC, XMP and ICC_Profile) may also be <b>copied as a block</b>. This technique copies all meta information, even if ExifTool doesn't have the ability to write some individual tags contained in the block. For all block types except EXIF, the metadata is copied byte-for-byte from the original image. With EXIF however, the metadata may be restructured to ensure that it is self-contained. Also note that EXIF may not be written as a block to TIFF-based file formats. Beware that <b>any existing metadata</b> of this type in the distination file <b>will be overwritten</b> by the new block. <pre><span class='blk'># copy EXIF as a block between same-named JPG files in different directories</span> exiftool -tagsfromfile SRCDIR/%f.%e -exif -ext jpg DSTDIR <span class='blk'># copy XMP as a block from one file to another</span> exiftool -tagsfromfile src.jpg -xmp dst.cr2 </pre></blockquote> <a name="Q10"></a> <p>10. <b>"How does ExifTool handle coded character sets?"</b></p> <!-- vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv --> <!-- NOTE: CHANGES TO FAQ 10 MUST ALSO BE REFLECTED IN ExifTool.pod! --> <blockquote><i>[Also see <a href="#Q18">FAQ number 18</a> for help on displaying special characters in a Windows console.]</i></blockquote> <blockquote>Certain meta information formats allow coded character sets other than plain ASCII. When reading, most known encodings are converted to the external character set according to the exiftool "<code>-charset CHARSET</code>" or <code>-L</code> option, or to UTF&#8209;8 by default. When writing, the inverse conversion is performed. Alternatively, special characters may be converted to/from HTML character entities with the <code>-E</code> option. </blockquote> <blockquote>A distinction is made between the <b>external</b> character set visible to the ExifTool user, and the <b>internal</b> character used to store text in the metadata of a file. These character sets may be specified separately as follows: <ol><li>The <b>external</b> character set for <b>tag values</b> passed to/from ExifTool is UTF&#8209;8 by default, but it may be changed through any of these command-line options: <blockquote><code>-charset CHARSET</code> &nbsp; or &nbsp; <code>-charset exiftool=CHARSET</code> &nbsp; or &nbsp; <code>-L</code> </blockquote> The encoding of <b>file and directory names</b> (eg. the <i>FILE</i> argument on the command line) is different. By default, these names are passed straight through to the standard C I/O routines without recoding. On Mac/Linux these routines expect UTF&#8209;8, but on Windows they use the system code page (which is dependent on your system settings). However, as of ExifTool 9.79, the external filename encoding may be specified: <blockquote><code>-charset filename=CHARSET</code></blockquote> When this is done, file and directory names are converted from the specified encoding to one appropriate for system I/O routines. In Windows, this also has the effect of enabling Unicode filename support via the special Windows wide-character I/O routines if the required Perl modules are available (these are included in the Windows executable version of ExifTool). See <a href="exiftool_pod.html#windows_unicode_file_names">WINDOWS UNICODE FILE NAMES</a> in the application documentation for more details.<br><br></li> <li>The <b>internal</b> character set for strings stored in file metadata may be specified for some metadata types: <blockquote><code>-charset TYPE=CHARSET</code></blockquote> (where <code>TYPE</code> is "<code>exif</code>", "<code>iptc</code>", "<code>id3</code>", "<code>photoshop</code>" or "<code>quicktime</code>")</li></ol> Valid <code>CHARSET</code> values are (with aliases given in brackets): <blockquote><table class=clear> <tr><td>UTF8</td><td>(cp65001, UTF&#8209;8)</td><td>Thai</td><td>(cp874)</td></tr> <tr><td>Latin</td><td>(cp1252, Latin1)</td><td>MacRoman</td><td>(cp10000, Mac, Roman)</td></tr> <tr><td>Latin2</td><td>(cp1250)</td><td>MacLatin2</td><td>(cp10029)</td></tr> <tr><td>Cyrillic</td><td>(cp1251,&nbsp;Russian)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>MacCyrillic</td><td>(cp10007)</td></tr> <tr><td>Greek</td><td>(cp1253)</td><td>MacGreek</td><td>(cp10006)</td></tr> <tr><td>Turkish</td><td>(cp1254)</td><td>MacTurkish</td><td>(cp10081)</td></tr> <tr><td>Hebrew</td><td>(cp1255)</td><td>MacRomanian</td><td>(cp10010)</td></tr> <tr><td>Arabic</td><td>(cp1256)</td><td>MacIceland</td><td>(cp10079)</td></tr> <tr><td>Baltic</td><td>(cp1257)</td><td>MacCroatian</td><td>(cp10082)</td></tr> <tr><td>Vietnam</td><td>(cp1258)</td></tr> </table></blockquote> The <code>-L</code> option is equivalent to "<code>-charset Latin</code>", "<code>-charset Latin1</code>" and "<code>-charset cp1252</code>".</blockquote> <blockquote>Type-specific details are given below about the special character handling for EXIF, IPTC, XMP, PNG, ID3, PDF, Photoshop, QuickTime, AIFF, MIE and Vorbis information:</blockquote> <!-- NOTE: CHANGES TO FAQ 10 MUST ALSO BE REFLECTED IN ExifTool.pod! --> <blockquote><b>EXIF</b>: Most textual information in EXIF is stored in ASCII format (called "string" in the <a href="TagNames/index.html">ExifTool tag name documentation</a>). By default ExifTool does not convert these strings. However, it is not uncommon for applications to write UTF&#8209;8 or other encodings where ASCII is expected. To deal with these, ExifTool allows the internal EXIF string encoding to be specified with "<code>-charset exif=CHARSET</code>", which causes EXIF string values to be converted from the specified character set when reading, and stored with this character set when writing. (The <a href="http://www.metadataworkinggroup.org/">MWG</a> recommends using UTF&#8209;8 encoding for EXIF strings, and in keeping with this the "<code>-use mwg</code>" feature sets the default internal EXIF string encoding to UTF&#8209;8, but note that this will have no effect unless the external encoding is also set to something other than the default of UTF&#8209;8.)</blockquote> <blockquote>A few EXIF tags (UserComment, GPSProcessingMethod and GPSAreaInformation) support a designated internal text encoding, with values stored as ASCII, Unicode (UCS&#8209;2) or JIS. When reading these tags, ExifTool converts Unicode and JIS to the external character set specified by the <code>-charset</code> or <code>-L</code> option, or to UTF&#8209;8 by default. ASCII text is not converted. When writing, text is stored as ASCII unless the string contains special characters, in which case it is converted from the external character set (UTF&#8209;8 by default), and stored as Unicode. ExifTool writes Unicode in native EXIF byte ordering by default, but the byte order may be specified by setting the ExifUnicodeByteOrder tag (see the <a href="TagNames/Extra.html">Extra Tags</a> documentation).</blockquote> <blockquote>The EXIF "XP" tags (XPTitle, XPComment, etc) are always stored internally as little-endian Unicode (UCS&#8209;2), and are read and written using the specified external character set.</blockquote> <!-- NOTE: CHANGES TO FAQ 10 MUST ALSO BE REFLECTED IN ExifTool.pod! --> <blockquote><b>IPTC</b><span class='sm'><sup>&dagger;</sup></span>: The value of the IPTC:CodedCharacterSet tag determines how the internal IPTC string values are interpreted. If CodedCharacterSet exists and has a value of "<code>UTF8</code>" (or "<code>ESC&nbsp;%&nbsp;G</code>") then string values are assumed to be stored as UTF&#8209;8. Otherwise the internal IPTC encoding is assumed to be Windows Latin1 (cp1252), but this can be changed with "<code>-charset iptc=CHARSET</code>". When reading, these strings are converted to UTF&#8209;8 by default, or to the character set specified by the <code>-charset</code> or <code>-L</code> option. When writing, the inverse conversions are performed. No conversion is done if the internal (IPTC) and external (ExifTool) character sets are the same. Note that ISO 2022 character set shifting is not supported. Instead, a warning is issued and the string is not converted if an ISO 2022 shift code is encountered. See the <a href="http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf">IPTC IIM specification</a> for more information about IPTC character coding.</blockquote> <blockquote>ExifTool may be used to convert IPTC values to a different internal encoding. To do this, all IPTC tags must be rewritten along with the desired value of CodedCharacterSet. For example, the following command changes the internal IPTC encoding to UTF&#8209;8 (from Windows Latin1 unless CodedCharacterSet was already "UTF8"): <pre>exiftool -tagsfromfile @ -iptc:all -codedcharacterset=utf8 a.jpg </pre>or from Windows Latin2 (cp1250) to UTF&#8209;8: <pre>exiftool -tagsfromfile @ -iptc:all -codedcharacterset=utf8 -charset iptc=latin2 a.jpg </pre>and this command changes it back from UTF&#8209;8 to Windows Latin1 (cp1252): <pre>exiftool -tagsfromfile @ -iptc:all -codedcharacterset= a.jpg </pre>or to Windows Latin2: <pre>exiftool -tagsfromfile @ -iptc:all -codedcharacterset= -charset iptc=latin2 a.jpg </pre>Note that unless CodedCharacterSet is UTF&#8209;8, applications have no reliable way to determine the IPTC character encoding. For this reason, it is recommended that CodedCharacterSet be set to "<code>UTF8</code>" when creating new IPTC.</blockquote> <blockquote class='sm'><sup>&dagger;</sup> <span class=lt>Refers to the older <a href="http://www.iptc.org/site/News_Exchange_Formats/IIM/">IPTC IIM</a> format. The more recent <a href="http://iptc.cms.apa.at/site/Photo_Metadata/IPTC_Core_&amp;_Extension/">IPTC Core and Extension specifications</a> actually use the XMP format (see below).</span> </blockquote> <!-- NOTE: CHANGES TO FAQ 10 MUST ALSO BE REFLECTED IN ExifTool.pod! --> <blockquote><b>XMP</b>: Exiftool reads XMP encoded as UTF&#8209;8, UTF&#8209;16 or UTF&#8209;32, and converts them all to UTF&#8209;8 internally. Also, all XML character entity references and numeric character references are converted. When writing, ExifTool always encodes XMP as UTF&#8209;8, converting the following 5 characters to XML character references: <code>&amp; &lt; &gt; &#39; &quot;</code>. By default no further conversion is performed, however the <code>-charset</code> or <code>-L</code> option may be used used to convert text to/from a specified character set when reading/writing.</blockquote> <blockquote><b>PNG</b>: <a href="TagNames/PNG.html#TextualData">PNG TextualData tags</a> are stored as tEXt, zTXt and iTXt chunks in PNG images. The tEXt and zTXt chunks use ISO 8859-1 encoding, while iTXt uses UTF&#8209;8. When reading, ExifTool converts all PNG textual data to the character set specified by the <code>-charset</code> or <code>-L</code> option, or to UTF&#8209;8 by default. When writing, ExifTool generates a tEXt chunk (or zTXt with the <code>-z</code> option) if the text doesn't contain special characters or if Latin encoding is specified (<code>-L</code> or <code>-charset latin</code>); otherwise an iTXt chunk is used and the text is converted from the specified character set and stored as UTF&#8209;8.</blockquote> <blockquote><b>JPEG Comment</b>: The encoding for the JPEG Comment (COM segment) is not specified, so ExifTool reads/writes this text without conversion.</blockquote> <blockquote><b>ID3</b>: The ID3v1 specification officially supports only ISO 8859&#8209;1 encoding (a subset of Windows Latin1), although some applications may incorrectly use other character sets. By default ExifTool converts ID3v1 text from Latin to the character set specified by the <code>-charset</code> or <code>-L</code> option, or to UTF&#8209;8 by default. However, the internal ID3v1 charset may be specified with "<code>-charset id3=CHARSET</code>". The encoding for ID3v2 information is stored in the file, so ExifTool converts ID3v2 text from this encoding to the character set specified by <code>-charset</code> or <code>-L</code>, or to UTF&#8209;8 by default. ExifTool does not currently write ID3 information.</blockquote> <blockquote><b>PDF</b>: PDF text strings are stored in either PDFDocEncoding (similar to Windows Latin1) or Unicode (UCS&#8209;2). When reading, ExifTool converts to the character set specified by the <code>-charset</code> or <code>-L</code> option, or to UTF&#8209;8 by default. When writing, ExifTool encodes input text from the specified character set as Unicode only if the string contains special characters, otherwise PDFDocEncoding is used.</blockquote> <blockquote><b>Photoshop</b>: Some Photoshop resource names are stored as Pascal strings with unknown encoding. By default, ExifTool assumes MacRoman encoding and converts this to UTF&#8209;8, but the internal and external character sets may be specified with <code>-charset Photoshop=CHARSET</code> and <code>-charset CHARSET</code> respectively.</blockquote> <blockquote><b>QuickTime</b>: QuickTime text strings may be stored in a variety of poorly documented formats, and ExifTool does its best to decode these according to the <code>-charset</code> option setting. For some QuickTime strings where the internal encoding is not known, ExifTool assumes a default encoding of MacRoman, but this may be changed with "<code>-charset QuickTime=CHARSET</code>".</blockquote> <blockquote><b>AIFF</b>: AIFF strings are assumed to be stored in MacRoman, and are converted according to the <code>-charset</code> option when reading. </blockquote> <blockquote><b>MIE</b>: MIE strings are stored as either UTF&#8209;8 or ISO 8859&#8209;1. When reading, UTF&#8209;8 strings are converted according to the <code>-charset</code> or <code>-L</code> option, and ISO 8859&#8209;1 strings are never converted. When writing, input strings are converted from the specified character set to UTF&#8209;8. The resulting strings are stored as UTF&#8209;8 if they contain multi-byte UTF&#8209;8 character sequences, otherwise they are stored as ISO 8859&#8209;1.</blockquote> <blockquote><b>Vorbis</b>: Vorbis comments are stored as UTF&#8209;8, and are converted to the character set specified by <code>-charset</code> or <code>-L</code> when reading.</blockquote> <blockquote class=prog> <b>Programmers</b>: ExifTool returns all values as byte strings of encoded characters. Perl wide characters are not used. The encoding is UTF&#8209;8 by default, but valid UTF&#8209;8 can not be guaranteed for all values, so the caller must validate the encoding if necessary. The encodings described above are set by the various <a href="ExifTool.html#Charset">Charset options</a> of the API. <br><br><b>Note</b>: Some settings of the system PERL_UNICODE environment variable may be incompatible with ExifTool's character handling. </blockquote> <!-- NOTE: CHANGES TO FAQ 10 MUST ALSO BE REFLECTED IN ExifTool.pod! --> <!-- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ --> <a name="Q11"></a> <p>11. <b>"My user-defined tags don't work"</b></p> <blockquote> For examples of how to add user-defined tags, see the <a href="config.html">ExifTool_config</a> file in the ExifTool distribution. It may be useful to activate this file as a test before trying to implement your own config file. To activate this file, copy it to your <b>HOME</b> directory then rename it to "<code>.ExifTool_config</code>". <blockquote class=lt><b>Note</b>: The config file must be renamed at the command line because neither the Windows nor Mac GUI allow a file name to begin with a "<code>.</code>". To do this in Windows, run "cmd.exe" and type the following (pressing <i>RETURN</i> at the end of each line): <pre>cd %HOMEPATH% rename ExifTool_config .ExifTool_config </pre> or on a Mac, open the "Terminal" application (from the /Applications/Utilities folder) and type this command then press <i>RETURN</i>: <pre>mv ExifTool_config .ExifTool_config </pre></blockquote> With the sample config file installed, you should be able to write the example tags. A command like this: <pre>exiftool -v2 -NewXMPxmpTag=test <i>FILE</i></pre> should print this as the first line of its output: <pre>Writing XMP-xmp:NewXMPxmpTag </pre> If this doesn't work, the most common problem is that the "<code>.ExifTool_config</code>" configuration file isn't getting loaded. In this case, there are a few things you can try: <ol> <li>Make sure the config file name is correct. It must be "<code>.ExifTool_config</code>" (note the leading "<code>.</code>", and the capital "<code>T</code>").</li> <li>Set either the <b>HOME</b> or the <b>EXIFTOOL_HOME</b> environment variable to the name of the directory where you put your "<code>.ExifTool_config</code>" file.</li> <li>Put the config file in the same directory as the exiftool script. (Also, be sure the config filename starts with a dot! See the note above for help renaming the config file.)</li> <li>If you can't get the config file to load automatically, you can try loading it manually with the exiftool <code>-config <i>CFGFILE</i></code> option. (Note: This must be the first option on the command line.) This allows loading of a config file with any name.</li> </ol> </blockquote> <blockquote>If necessary, you can verify that ExifTool is loading your config file by adding the following line to your file: <pre>print "LOADED!\n"; </pre> If you see a "<code>LOADED!</code>" message when you run exiftool, but your new tags still don't work, make sure you are using the proper tag name and that the file you are writing can support this type of information.</blockquote> <blockquote>Note that all tag names in the config file are <b>case sensitive</b>. Specifically, the case must be correct for tag names in Composite tag Require/Desire entries. Also note that XMP tag names are generated automatically by capitalizing the tag ID unless the tag definition contains a "Name" entry.</blockquote> <blockquote class=prog><b>Programmers</b>: To specify the config file directory from within a Perl script when using the ExifTool API, set the <b>EXIFTOOL_HOME</b> environment variable before loading the ExifTool module: <pre>BEGIN { $ENV{EXIFTOOL_HOME} = '/config_file_directory' } use Image::ExifTool; </pre> Also see the <a href="ExifTool.html#Config">Configuration section of the ExifTool API documentation</a> for techniques to use a config file with another name, or to disable the config file feature. </blockquote> <a name="Q12"></a> <p>12. <b>"How do I export information from exiftool to a database?"</b></p> <blockquote><i>[See <a href="#Q26">FAQ number 26</a> for help with the reverse -- importing metadata from a database.]</i></blockquote> <blockquote> It is often easiest to export information formatted as a tab-delimited or comma-separated list of values using the exiftool <code>-T</code> or <code>-csv</code> option. As well, the <code>-r</code> option is useful for recursing through all images in a hierarchy of directories. For example: <pre>exiftool -T -r -filename -exposuremode -ISO t/images &gt; out.txt </pre> This command recursively processes all images in the "<code>t/images</code>" directory, extracting FileName, ExposureMode and ISO tags, and writing the output to a tab-delimited text file called "<code>out.txt</code>". After the command has executed, "<code>out.txt</code>" will look something like this: <pre>Canon.jpg Manual 100 Casio.jpg - 64 Nikon.jpg - 100 OlympusE1.jpg Auto 400 </pre> One limitation of the <code>-T</code> option is that a list of tags to extract must be specified. Otherwise, all information is extracted from each input file, and the columns would contain values from random tags.</blockquote> <blockquote> The <code>-csv</code> (comma separated values) option solves this dilemma by pre-extracting information from all input files, then producing a sorted list of available tag names as the first row of the output, and organizing the information into columns for each tag. As well, a first column labelled "SourceFile" is generated. These features make it practical to use the <code>-csv</code> option for extracting all information from multiple images. For example, this command: <pre>exiftool -csv -r t/images > out.csv</pre> gives an output like this: <pre>SourceFile,AEBBracketValue,AELock,AFAreaHeight,AFAreaMode,AFAreas,[...] t/images/Canon.jpg,0,,151,,,[...] t/images/Casio.jpg,,,,,,[...] t/images/Nikon.jpg,,,,Single Area,,[...] t/images/OlympusE1.jpg,,Off,,,"Center (121,121)-(133,133)",[...] </pre> Note that the number of columns in the <code>-csv</code> output may be very large if all information is extracted. Missing tags are indicated by empty strings as in the example above, or by dashes if the <code>-f</code> option is used.</blockquote> <blockquote> It should be possible to import these files directly into most database applications. On the command line, any list of tag names may be used, and any number of file or directory names may be specified. (Hint: If your command line starts to get too long, you may want to look into using the <code>-@</code> option and/or the <a href="index.html#shortcut">ShortCut</a> feature).</blockquote> <blockquote>In Windows, a .BAT file containing the exiftool command may be used to give drag and drop functionality. Dropping a folder on the following .BAT file will create "out.txt" in the folder: <pre>echo "FileName&lt;tab&gt;Aperture&lt;tab&gt;ISO" &gt; %1\out.txt exiftool -T -r -filename -aperture -ISO %1 &gt;&gt; %1\out.txt </pre> The "<code>echo</code>" command was included to add column headings to the output. (The tab character in the echo command, indicated by "<code>&lt;tab&gt;</code>", may be generated in Mac/Linux shells with CTRL-v then TAB, or in a Windows cmd shell with TAB when cmd.exe is run with the <code>/f:off</code> option to disable tab completion.) </blockquote> <blockquote>Other possible export formats include RDF/XML (with the the <code>-X</code> option), or JSON (with the <code>-j</code> option). These methods allow transfer of more complex data sets (including structured information with the <code>-struct</code> option), but require that the importing software supports these formats.</blockquote> <blockquote>Finally, the <code>-p</code> option may be used to generate any arbitrary output format. For example, the following format file (let's call it "<code>my.fmt</code>") may be used to emulate a CSV-formatted output: <pre>#[HEAD]FileName, Aperture, ISO $filename, $aperture, $iso </pre> with a command like this: <pre>exiftool -f -r -p my.fmt t/images &gt; out.csv </pre> Alternatively, the <code>-p</code> option may be used with a format string instead of a file name. The following command has the same effect as above except that the row of headings is not printed (Note: Use single quotes as below on Mac/Linux, or double quotes instead on Windows): <pre>exiftool -f -r -p '$filename, $aperture, $iso' t/images &gt; out.csv </pre> With the <code>-f</code> option, the value of any missing tag is printed as a dash. Without this option, missing tags generate a minor warning and the line in the <code>-p</code> output is not printed. The <code>-m</code> option may be used to ignore minor warnings, which causes these lines to be printed with an empty value for missing tags.</blockquote> <blockquote> See the <code>-p</code> option in the <a href="exiftool_pod.html">application documentation</a> for more information about this feature. </blockquote> <a name="Q13"></a> <p>13a. <b>"Why is my file smaller after I use ExifTool to write information?"</b>, or <br>13b. <b>"Why do some Offset tags change value when I write other tags?"</b></p> <blockquote> There are various specific reasons why this can happen, but the general answer is: When ExifTool writes an image, the meta information may be restructured in such a way that it takes less space than in the original file, or so that some tags are stored at different offsets in the file.</blockquote> <blockquote>The EXIF/TIFF standard allows for blocks of unreferenced data to exist in an image. Some digital cameras write JPEG or TIFF-based RAW files which contain large blocks of unused data, usually filled with binary zeros. The reason for this could be to simplify camera algorithms by allowing variable-sized information to be written at fixed offsets in the output image. When ExifTool rewrites an image it does not copy these unused blocks. This can result in a significant reduction in file size for some images. <i>[The <code>-htmlDump</code> option may be used to view the file structure if you are interested in seeing these unused data blocks -- use a command like "<code>exiftool -htmlDump a.jpg &gt; out.html</code>", then open <code>out.html</code> in your web browser. Unused data blocks are <span class=U>brown</span> in this output.]</i> </blockquote> <blockquote>Also, the size of an XMP record may easily shrink or grow when it is rewritten, even if no meta information is changed. This is partly due to the fact that the XMP specification recommends a few KB of padding at the end of the record (ExifTool adds 2424 bytes by default, but this padding is omitted if the <code>-z</code> option is used), and partly due to the flexibility of the XMP format which allows the information to be written in various styles, some of which are more compact than others. </blockquote> <blockquote>You may also notice that the values of some "offset" tags (like ThumbnailOffset and PreviewImageStart) may change when the file is rewritten. This is normal, and simply indicates that the associated data is now stored at a different position within the file.</blockquote> <blockquote>ExifTool does not modify the image data itself, so editing a file is "lossless" as far as the image is concerned.</blockquote> <a name="Q14"></a> <p>14. <b>"What format do I use for writing GPS coordinates?"</b></p> <blockquote>ExifTool is very flexible in the formats allowed for entering GPS coordinates. Any string containing between 1 and 3 floating point numbers is valid. The numbers represent degrees, (and optionally) minutes and seconds.</blockquote> <blockquote>For EXIF GPS coordinates, the reference direction is specified separately with the EXIF:GPSLatitudeRef or EXIF:GPSLongitudeRef tag.</blockquote> <blockquote>For XMP GPS coordinates, the reference direction is specified within the XMP:GPSLatitude or XMP:GPSLongitude value, with west longitudes and south latitudes being specified either by negative coordinate values or by ending the string with "<code>W</code>" or "<code>S</code>". </blockquote> <blockquote>Here are some examples of equivalent ways to specify a GPS latitude in both EXIF and XMP: <pre>exiftool -exif:gpslatitude="42 30 0.00" -exif:gpslatituderef=S a.jpg exiftool -exif:gpslatitude="42 deg 30.00 min" -exif:gpslatituderef=S a.jpg exiftool -exif:gpslatitude=42.5 -exif:gpslatituderef=S a.jpg exiftool -xmp:gpslatitude="42 30 0.00 S" a.jpg exiftool -xmp:gpslatitude=42.50S a.jpg exiftool -xmp:gpslatitude=-42.5 a.jpg </pre> Similar styles may be used for longitude. ExifTool will convert any of these coordinate styles to the proper format for the specific tag used. </blockquote> <blockquote>When reading, ExifTool reports coordinates in the format <pre>DDD deg MM' SS.SS"</pre> where <code>DDD</code> is degress, <code>MM</code> is minutes, and <code>SS.SS</code> is seconds. The <code>-n</code> option may be used to change this to decimal degrees, or any arbitrary format may be specified with the <code>-c</code> option. See the <a href="exiftool_pod.html">application documentation</a> for details. </blockquote> <a name="Q15"></a> <p>15. <b>"I get MakerNote warnings or errors when reading or writing information"</b></p> <blockquote>Problems like this may be caused by image editing software which doesn't properly update offsets in the MakerNotes when rewriting an image. These offsets are used as pointers to reference tag values and structures within the metadata, and errors like this may lead to missing or incorrect values for some MakerNotes tags. In many cases, ExifTool will detect this type of problem and issue a warning like this when reading (or an error when writing): <pre>Warning: [minor] Possibly incorrect maker notes offsets (fix by -340?) </pre> <i class=lt>[Be aware that if multiple warnings occur, the <code>-a</code> option must be used to see them all, since by default only one warning is displayed per file.]</i> </blockquote> <blockquote>This is a particularly insidious problem that is sometimes difficult for ExifTool to correct automagically, so it requires some operator intervention. If this warning occurs, you have a few alternatives:</blockquote> <blockquote>1) Use the <code>-F</code> option to allow ExifTool to attempt to fix the incorrect offsets. If ExifTool was correct in its diagnosis, then this option will fix the incorrect offsets. This is usually the appropriate choice if this problem was caused by editing the image with other software.</blockquote> <blockquote>2) Use the <code>-m</code> option to ignore the warning (or downgrade the error to a warning when writing). This causes ExifTool to honour the existing maker note offsets, and may be the correct choice if images straight out of the camera have this problem.</blockquote> <blockquote>Often, the first choice (<code>-F</code>) is the right thing to do, but this depends on many factors, so it is best to try both methods then compare the resulting maker note information to see which works best for your situation.</blockquote> <blockquote>When writing, <code>-F</code> applies a permanent correction to the maker notes. Note that <u>some MakerNote information may be lost permanently if the proper correction is not applied when writing images with this problem</u>.</blockquote> <blockquote>3) The third alternative is to adjust the maker note offsets by a specific amount. This is done by appending an integer to the <code>-F</code> option. For example, with the warning above (where ExifTool suggests "fix by -340?"), <code>-F</code> would be equivalent to <code>-F-340</code>. See the <a href="exiftool_pod.html#f_offset_fixbase">-F option documentation</a> for more details. This advanced feature may require some technical knowledge about the structure of EXIF information (and here, ExifTool's <code>-htmlDump</code> feature may be very useful for visualizing this structure).</blockquote> <blockquote>Other types of MakerNote errors may also prevent the file from being written. However, most MakerNote errors are designated as <b>minor</b>, which allows them to be ignored by using the <code>-m</code> option. For example: <pre>Error: [minor] Bad format (65535) for MakerNotes entry 17 </pre> Using <code>-m</code> will downgrade the minor error to a warning, allowing the file to be written, but <u>some MakerNote information may be lost when ignoring certain types of errors like this</u>. </blockquote> <a name="Q16"></a> <p>16. <b>"Why doesn't ExifTool rename my AVI files?"</b></p> <blockquote>By default, ExifTool only processes <u>writable file types</u><span class='sm'><sup>&dagger;</sup></span> when <u>any tag</u><span class='sm'><sup>&Dagger;</sup></span> is being written and a directory name is specified on the command line. To force exiftool to process other files, they must either be listed on the command line by name, or be specified using the <code>-ext</code> option, something like this: <pre>exiftool -ext AVI -ext JPG -d pics/%Y/%m "-directory&lt;dateTimeOriginal" DIR </pre> When a single <code>-ext</code> option is used, only files of the specified type are processed. However, multiple <code>-ext</code> options may be used in the same command (as in the example above) to process any number of different file types. </blockquote> <blockquote class='sm'><sup>&dagger;</sup> <span class=lt>The <code>-listwf</code> option may be used to list the extensions of all writable file types.</span> <br><sup>&Dagger;</sup> <span class=lt>This includes "pseudo" tags like FileName, Directory, FileModifyDate and FileCreateDate.</span></blockquote> <a name="Q17"></a> <p>17. <b>"List-type tags do not behave as expected"</b></p> <blockquote>Tags indicated by a plus sign (<code>+</code>) in the <a href="TagNames/index.html">tag name documentation</a> are list-type tags. Two examples of common list-type tags are <a href="TagNames/IPTC.html#ApplicationRecord">IPTC:Keywords</a> and <a href="TagNames/XMP.html#dc">XMP:Subject</a>. These tags may contain multiple items which are combined into a single string when reading. (By default, extracted list items are separated by a comma and a space, but the <code>-sep</code> option may be used to change this.) When writing, separate items are assigned individually. For example, the following command writes three keywords to all writable files in directory <code>DIR</code>, replacing any previously existing keywords: <pre>exiftool -keywords=one -keywords=two -keywords=three DIR </pre> List items are assigned separately, NOT all together, because this would represent a single keyword: <pre>exiftool -keywords="one, two, three" test.jpg <span class=blk>(WRONG!)</span> </pre> With exiftool version 7.56 or later, the <code>-sep</code> option may be used to split values of list-type tags into separate items when writing. For example, <pre>exiftool -sep ", " -keywords="one, two, three" DIR </pre> will store three separate keywords, the same as the first example above. This feature may also be used to split a tag value into separate items if it was originally stored incorrectly as a single string: <pre>exiftool -sep ", " -tagsfromfile @ -keywords test.jpg </pre> However, sometimes it is desirable to have list items which contain a comma, and this is allowed: <pre>exiftool -contributor="Harvey, Phil" -contributor="Marley, Bob" a.jpg </pre> But to distinguish these entries when extracting information, a different list separator or a different output format must be used. For instance, the following command uses "<code>//</code>" to separate list items, <pre>exiftool -contributor -sep "//" a.jpg </pre> and produces an output like this: <pre class=blk>Contributor : Harvey, Phil//Marley, Bob </pre> Alternatively, the <code>-j</code>, <code>-php</code> and <code>-X</code> options use an output format which preserves the structure of a list (if <code>-sep</code> is NOT used).</blockquote> <blockquote>Note that the writing examples above overwrite any values which already existed in the original file for these tags. Instead, to add or delete items from an existing list, use "<code>+=</code>" or "<code>-=</code>" in place of "<code>=</code>". For example: <pre>exiftool -keywords+="add this" -keywords-="remove this" DIR </pre> With commands like this, new items are added to the list in place of the first deleted item, or at the end of the list if no items were removed.</blockquote> <blockquote>Note: Using "<code>=</code>" is equivalent to "<code>+=</code>" in any command where the same tag is set with "<code>+=</code>" or "<code>-=</code>" in another assignment. (ie. existing items will be preserved unless specifically deleted with "<code>-=</code>".)</blockquote> <blockquote>To prevent duplication when adding new items, specific items can be deleted then added back again in the same command. For example, the following command adds the keywords "one" and "two", ensuring that they are not duplicated if they already existed in the keywords of an image: <pre>exiftool -keywords-=one -keywords+=one -keywords-=two -keywords+=two DIR </pre> When copying list tags using the <code>-tagsFromFile</code> option, items are copied individually to form proper lists. However, there is a complication when copying multiple tags to a single list tag: Here, any assignment to a tag overrides earlier assignments to the same tag in the command. For instance, this command <pre>exiftool "-keywords&lt;filename" "-keywords&lt;comment" DIR </pre> writes only the value from the Comment tag. (Note that <code>-tagsFromFile @</code> is implied by the "<code>&lt;</code>" operation in this command, causing tags to be copied from the original file.) This may seem strange, but it prevents duplicate items from being added to a list when copying a group of tags from a file containing duplicate information. Alternatively, the <code>-addTagsFromFile</code> option may be used to accumulate items when copying from multiple tags: <pre>exiftool -addTagsFromFile @ "-keywords&lt;filename" "-keywords&lt;comment" DIR </pre> Note that as with "<code>=</code>" in the first three examples above, the "<code>&lt;</code>" operation of this command overwrites any Keywords that existed previously in the original file. To add to or remove from the existing keywords, use "<code>+&lt;</code>" or "<code>-&lt;</code>". </blockquote> <a name="Q18"></a> <p>18. <b>"Special characters don't display properly in my Windows console"</b></p> <blockquote>The Windows cmd.exe console uses an MS-DOS encoding by default (cp437 or something similar, depending on your region). The exiftool <code>-charset</code> option may be used to encode the exiftool output for a specific Windows code page, which may help display some special characters, but instead it may be better to switch the console to UTF&#8209;8 (the native ExifTool character encoding). This is especially useful if you are using the <code>-lang</code> option to translate exiftool output to another language. To change the the Windows console to UTF&#8209;8, follow these steps: <ol><li>Run "cmd.exe" to open a Windows console (select "Run..." from the Start menu and enter "cmd").</li> <li>Change the font in the console Properties to any True Type font (eg. "TT Lucida Console").</li> <li>Type "<code>chcp 65001</code>" then press RETURN at the command prompt.</li> </ol> The console should now be able to display UTF&#8209;8 characters (cp65001). But note that the TT Lucida Console font shipped with Windows, at least my version, may not be very complete, and doesn't seem to contain Japanese or Chinese characters.</blockquote> <blockquote>To permanently set the font, select "Save properties for future windows" when changing the font Properties. Also, you can automatically run "<code>chcp 65001</code>" every time "cmd.exe" is launched by changing the Windows Registry for the Command Processor: Run "regedit" and put "<code>chcp 65001</code>" into Data field for "HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun". (Unfortunately, I haven't been able to figure out how to change the code page for exiftool when launched via the Windows GUI. If anyone can figure out how to do this, please let me know.) </blockquote> <blockquote>On some Windows systems, using UTF&#8209;8 doesn't seem to work. In this case, a Windows character set may be the best alternative: For instance, for Windows Latin1 (cp1252) type "<code>chcp 1252</code>" in the console to switch to cp1252, then run exiftool with "<code>-charset cp1252</code>" (or <code>-L</code>). This same technique can be used for other supported Windows code pages.</blockquote> <blockquote>A final alternative is to bypass the command-line encoding problems totally by extracting/writing to/from a separate text file, and using a UTF&#8209;8 aware text editor to view/edit the text. For example: <pre><span class=blk># extracting...</span> exiftool image.jpg &gt; out.txt <span class=blk># writing...</span> exiftool "-subject&lt;=subject.txt" image.jpg</pre></blockquote> <a name="Q19"></a> <p>19. <b>"How do I change the format of an extracted tag value?"</b></p> <blockquote>The exiftool application has built-in options which allow you to display numeric values (<code>-n</code>), escape special HTML characters (<code>-E</code>), and change the date/time (<code>-d</code>) and GPS coordinate (<code>-c</code>) formats, but sometimes more control is needed over the formatting of a value...</blockquote> <blockquote>The <code>-p</code> and <code>-tagsFromFile</code> options provide an advanced translation feature that allows arbitrary Perl expressions to be used to modify tag values. The basic syntax is this: <pre>${TAG;EXPR}</pre> where <code>TAG</code> is the tag name, and <code>EXPR</code> is a Perl expression acting on the default input variable (<code>$_</code>), which is initially the original value of the tag. For example, the following command sets the FileName from Artist, translating spaces to underlines: <pre>exiftool '-filename&lt;${artist;tr/ /_/}.%e' image.jpg</pre> (Note: Use single quotes as above in Mac/Linux, or double quotes instead in Windows.)</blockquote> <blockquote>Another technique is to create a user-defined Composite tag to do the reformatting. Here is a basic config file that reformats the Artist tag to provide a new MyArtist tag with the same character translation as the example above: <pre>%Image::ExifTool::UserDefined = ( 'Image::ExifTool::Composite' => { MyArtist => { Require => 'Artist', ValueConv => '$val =~ tr/ /_/; $val', }, }, ); 1; # end </pre> With this config file, an Artist value of "Phil Harvey" yields a corresponding MyArtist value of "Phil_Harvey". The ValueConv string may be any valid Perl expression, and is evaluated to obtain the value for the new tag. In this expression, <code>$val</code> represents the ValueConv value of the Require'd tag. </blockquote> <blockquote>To activate the config file, it must be named "<code>.ExifTool_config</code>" and placed either in your home directory or in the same directory as the exiftool application. Note that the file name begins with a "<code>.</code>", so if you are in Windows or on a Mac you may need to rename the file from the command line since the GUI might not like file names beginning with a "<code>.</code>".</blockquote> <blockquote>User-defined Composite tags have many other features, including the ability to combine the values of multiple tags. See the <a href="config.html">config file documentation</a> for more details about user-defined tags, and lib/Image/ExifTool/README in the full distribution for a complete description of ValueConv features. Also, a <a href="http://u88.n24.queensu.ca/exiftool/forum/index.php?action=search2&amp;search=code+userdefined">quick search of the ExifTool forum</a> should reveal a number of user-defined tag examples, and there are other good (and often more complex) examples which can be found in the %Image::ExifTool::Exif::Composite hash of the lib/Image/ExifTool/Exif.pm source code. </blockquote> <a name="Q20"></a> <p>20. <b>"ExifTool won't write an image due to errors"</b></p> <blockquote>Minor errors may be ignored using the <code>-m</code> option (<a href="#Q15">FAQ 15</a> discusses this with respect to MakerNote errors), but sometimes there are more serious errors which can't be ignored. ExifTool may be used to fix metadata problems in JPEG images by deleting all metadata and rebuilding it from scratch. The command looks like this: <pre>exiftool -all= -tagsfromfile @ -all:all -unsafe -icc_profile bad.jpg </pre> where "<code>bad.jpg</code>" is the name of the image that requires fixing. This command deletes all metadata then copies all writable tags that can be extracted from the original image to the same locations in the updated image. The "<code>Unsafe</code>" tag is a <a href="TagNames/Shortcuts.html">shortcut</a> for unsafe EXIF tags in JPEG images which are not normally copied. JPEG images may also contain an ICC color profile which should be preserved. The "<code>ICC_Profile</code>" tag is also marked as unsafe, but is not part of the EXIF so it isn't covered by the "<code>Unsafe</code>" shortcut and must be specified separately.</blockquote> <blockquote>After repairing an image like this you should be able to write to it without errors, but note that <u>some metadata from the original image may have been lost in the process</u>.</blockquote> <blockquote><b>Note</b>: ExifTool will not modify the JPEG image data, so if the image itself is corrupted (eg. if you get a message saying "Not a valid JPEG"), then ExifTool can not be used to repair the image. Also, ExifTool may not be used like this to repair TIFF-based files -- the risk of image corruption is too great because the image is stored in the same IFD as the metadata in these files.</blockquote> <blockquote>If there are also MakerNote problems in the file, you may want to add the <code>-F</code> option to the command. See <a href='#Q15'>FAQ 15</a> for details. For example, to rebuild the EXIF only and fix the MakerNote offsets you could do this: <pre>exiftool -exif:all= -tagsfromfile @ -exif:all -unsafe -thumbnailimage -F bad.jpg </pre> <b>Advanced</b>: The byte order of the newly created EXIF is set by the value of the ExifByteOrder tag. Since this tag does not belong to the EXIF group, it is not copied with <code>-exif:all</code> above (but would be copied with <code>-all:all</code> as in the first example). If ExifByteOrder is not set then the byte order is determined by the ordering of the MakerNotes if they are copied, otherwise big-endian ("MM") byte order is used by default. ExifByteOrder may be set to a specific value to force a particular byte order when creating new EXIF (eg. "<code>-ExifByteOrder=II</code>" for little-endian). </blockquote> <a name="Q21"></a> <p>21. <b>"How do I read/write values containing newline characters?"</b></p> <blockquote>When reading, by default exiftool converts all control characters to "." to avoid messing up the output formatting, so newlines will appear as a "." in the output. The <code>-b</code> option may be used to bypass all output formatting (except that a line-feed character is inserted between items in a list), but this may not be appropriate when the values of many tags must be extracted. In this case, the formatted output (<code>-p</code>), JSON (<code>-j</code>), XML (<code>-X</code>) and PHP (<code>-php</code>) options provide alternative output formats which preserve newlines in values.</blockquote> <blockquote>When writing, there are a number of options: <ol type='a'> <li>In many shells, a newline may be inserted directly in the command line: <p>Bourne shells (press <i>RETURN</i> inside a quoted string)</p> <pre>exiftool -comment="line 1 line 2" image.jpg </pre> <p>(Also, in Bourne shells the character sequence <code>$'\n'</code> may be used for a newline.)</p> <p>C shells (press "<code>\</code>" then <i>RETURN</i> inside a quoted string)</p> <pre>exiftool -comment="line 1\ line 2" image.jpg </pre> <i class=lt>[Unfortunately the Windows cmd shell provides no method to get a newline (CR/LF in Windows) into the command line. A linefeed (LF) may be inserted with CTRL-T, but I have found no way to insert a carriage return (CR).]</i><br><br> </li> <li>Use the <code>-E</code> option to allow HTML character entities (Note: In Windows a newline is "<code>&amp;#xd;&amp;#xa;</code>" instead of just "<code>&amp;#xa;</code>"): <pre>exiftool -E "-comment=line 1&amp;#xa;line 2" image.jpg </pre></li> <li>Write the tag from the contents of a separate text file: <pre>exiftool "-comment&lt;=file.txt" image.jpg </pre></li> <li>Use <code>$/</code> in a redirection expression: (Note: Single quotes must be used in Mac/Linux shells around arguments containing a dollar sign, but double quotes are used instead in Windows. Also note that this technique is slower since the implied <code>-tagsFromFile</code> adds an extra unnecessary processing pass to read tags from the file.) <pre>exiftool '-comment&lt;line 1$/line 2' image.jpg </pre></li> </ol> </blockquote> <a name="Q22"></a> <p>22. <b>"In what order are command-line assignments applied when writing?"</b></p> <blockquote>When writing, tag assignments on the command line are queued and applied together as each target file is processed. In general, assignments later on the command line override earlier assignments, but there are exceptions: <ol><li>When writing list-type tags (eg. <code>-keywords=one</code>), new values are accumulated rather than overriding earlier assignments.<br>&nbsp;</li> <li>When copying values to list-type tags (eg. <code>"-keywords&lt;filename"</code>), new values are accumulated only if <code>-addTagsFromFile</code> is used, otherwise they override earlier assigments if <code>-tagsFromFile</code> is used or implied.<br>&nbsp;</li> <li>Tags copied with the <code>-tagsFromFile</code> option are assigned in order, and all together at the point in the command line where the <code>-tagsFromFile</code> option is located, regardless of whether these tags are specified immediately after the <code>-tagsFromFile</code> option or later on the command line. Remember that "<code>-tagsFromFile @</code>" is implied unless another file is specified when redirecting information with arguments like <code>"-DSTTAG&lt;SRCTAG"</code>.</li></ol> Note: When copying tag values, adding to lists, or shifting date/time values, the source value is always the original value found in the file, regardless of any previous assignments. For example, the following command sets Subject to the original value of Title in the file (NOT to "test"): <pre>exiftool -title=test "-subject&lt;title" a.jpg</pre></blockquote> <a name="Q23"></a> <p>23a. <b>"Why do I get '<code>0 image files updated</code>' when writing?"</b>, or<br> 23b. <b>"ExifTool doesn't write some tags to a file"</b></p> <blockquote>There are a few reasons why this may happen: <ol><li>The value of the tag is not being set correctly.</li></ol> This may be due to a tag value which can't be converted, in which case you should warning like this (note: you may need to use the <code>-v3</code> option to see the warning if other same-named tags are being set properly by the same assignment): <pre>Warning: Can't convert IFD0:Orientation (not in PrintConv) </pre> You get this warning if you write an invalid value to a tag which accepts only specific values. See the "Values" column in the appropriate table of the <a href="TagNames/index.html">tag name documentation</a> for a list of valid values for these types of tags. The value conversion may also be bypassed with the <code>-n</code> option, allowing numerical values to be written directly. See <a href="#Q6">FAQ number 6</a> for more details. <ol start="2"><li>The information type isn't supported by the format of the target file.</li></ol> Warnings are NOT generated when a tag isn't written because it is normal that many tags can't be written when copying between files of different formats.</blockquote> <blockquote>Tags are not written if the format of the target file doesn't support the specific type of meta information. For example, CRW images do not support EXIF or IPTC metdata. See the <a href="index.html#supported">Supported File Types</a> table for an indication of the tags supported by your file. If the tags aren't supported for your file type, then a <a href='metafiles.html'>metadata sidecar file</a> is an alternative.</blockquote> <blockquote>Also note that MakerNotes tags can not be created or deleted individually, so they can only be written if they already exist in a file. The entire MakerNotes must be created or deleted as a block (see <a href="#Q8">FAQ number 8</a> for details). <ol start="3"><li>A time value is being shifted but the specified tag doesn't exist.</li></ol> For example, <code>-datetimeoriginal+=1</code> will have no effect unless the DateTimeOriginal tag exists in the image.</blockquote> <a name="Q24"></a> <p>24. <b>"When I write a file the date/time gets reset to today's date"</b></p> <blockquote>There is sometimes confusion between date/time values stored in the metadata of the file itself and date/time values stored in the filesystem (ie. in the disk directory information). A command like this may be used to extract all date/time information with an indication of where it is stored: <pre>exiftool -time:all -a -G0:1 -s c:\images\test.jpg</pre> and should give an output something like this: <pre>[File:System] FileModifyDate : 2009:10:05 20:40:36-04:00 [File:System] FileAccessDate : 2009:10:07 09:22:12-04:00 [File:System] FileCreateDate : 2009:10:05 20:40:36-04:00 [EXIF:IFD0] ModifyDate : 2003:10:31 15:44:19 [EXIF:ExifIFD] DateTimeOriginal : 2003:10:31 15:44:19 [EXIF:ExifIFD] CreateDate : 2003:10:31 15:44:19</pre> The <code>-G0:1</code> option causes the family 0 and 1 group names to be reported in square brackets for each tag. Tags labelled "File:System" are "pseudo" tags stored in the filesystem, while the others are "real" tags stored in the metadata of the file.</blockquote> <blockquote>ExifTool's <b>default behaviour is to set all filesystem times to the current date/time when any "real" tag is written</b>, but the <code>-P</code> option may be used to preserve the original FileModifyDate. FileAccessDate represents the time the file was last accessed, and is set to the current date/time whenever any software (including ExifTool) accesses the file.</blockquote> <blockquote>On systems where a filesystem creation date is maintained, ExifTool also sets this to the current date/time when the file is edited. On Windows the creation date is accessed through the FileCreateDate tag, and is also preserved with the <code>-P</code> option. On Mac/Linux FileInodeChangeDate is available instead of FileCreateDate, and the only way to preserve the file creation date is with the <code>-overwrite_original_in_place</code> option.</blockquote> <blockquote>For example, commands like this act on common metadata tags, setting the filesystem modification date/time to the current date/time: <pre><span class='blk'># common metadata date/time tags are incremented by 1 hour, while # FileModifyDate is set to the current date/time</span> exiftool -alldates+=1 c:\images</pre> <i class=lt>[The AllDates tag is a shortcut which represents the 3 common metadata date/time tags: DateTimeOriginal, CreateDate and ModifyDate.]</i></blockquote> <blockquote>However, FileModifyDate may be preserved with the <code>-P</code> option: <pre><span class='blk'># FileModifyDate is not changed</span> exiftool -alldates+=1 -P c:\images</pre> ExifTool also allows FileModifyDate to be written, which provides full control over the filesystem modification date/time when writing: <pre><span class='blk'># FileModifyDate is incremented by 1 hour</span> exiftool -alldates+=1 -filemodifydate+=1 c:\images <span class='blk'># FileModifyDate is set from the value of DateTimeOriginal # (before DateTimeOriginal is incremented by 1 hour)</span> exiftool -alldates+=1 "-filemodifydate&lt;datetimeoriginal" c:\images </pre></blockquote> <a name="Q25"></a> <p>25. <b>"Can ExifTool be used as an image validator?"</b></p> <blockquote>ExifTool is <u>not</u> designed as an image validator. It does issue warnings about some of the more important problems in the metadata when reading, and will often catch more problems when writing, but it does not attempt to do a full validation. If you are looking for a validator, try <a href="http://jhove.sourceforge.net">JHOVE</a>.</blockquote> <a name="Q26"></a> <p>26. <b>"How do I import information from a database?"</b></p> <blockquote><i>[See <a href="#Q12">FAQ number 12</a> for help with the reverse -- exporting metadata to a database.]</i></blockquote> <blockquote>ExifTool has the ability to import metadata from CSV and JSON format database files for writing to output image files. For example, the following commands use imported metadata to write to all image files in a directory. <pre><span class='blk'># import from CSV file</span> exiftool -csv="c:\Users\Phil\test.csv" "c:\Users\Phil\Images" <span class='blk'># import from JSON file</span> exiftool -json="c:\Users\Phil\test.json" "c:\Users\Phil\Images"</pre> For the above commands, the input CSV or JSON file must have the same format as the output from these commands: <pre><span class='blk'># export to CSV file</span> exiftool -csv "c:\Users\Phil\Images" > "c:\Users\Phil\test.csv" <span class='blk'># export to JSON file</span> exiftool -json "c:\Users\Phil\Images" > "c:\Users\Phil\test.json"</pre> Specifically, the first row of the CSV file must contain the tag names. The first column must be a special "SourceFile" column, containing the names of the associated image files, with paths specified in the same way as on the command line. The JSON file contains similar entries, but is not structured in row/column format.</blockquote> <blockquote>For each image file specified on the command line, all tags for the database entry with the corresponding SourceFile name are written (with the exception of the FileName and Directory tags, which are ignored). A special SourceFile name of "*" may be used to match any image file. A warning is issued and nothing is written if a specified file does not match any SourceFile entry in the database.</blockquote> <blockquote>Tag names may be prefixed by a group name to write to a specific group (using the same format as when <code>-G</code> or <code>-G1</code> is added to the export command). Tags with empty values are ignored. To delete a tag, set the tag value to "-" and use the <code>-f</code> option when importing.</blockquote> <blockquote>See the <code>-csv</code> or <code>-j</code> option in the <a href="exiftool_pod.html#input_output_text_formatting">application documentation</a> for more details.</blockquote> <hr> <i>Last revised Jan. 12, 2015</i> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> ������������������������������Image-ExifTool-10.10/html/filename.html�������������������������������������������������������������000644 �000765 �000024 �00000044612 12541777275 020025� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> <html> <head> <title>FileName and Directory tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <style type="text/css"> <!-- .prog { padding: 0.5em; border: 1px solid gray; background: #fee } --> </style> </head> <body> <h2 class='up'>Writing "FileName" and "Directory" tags</h2> <p>By writing the <b>FileName</b> and/or <b>Directory</b> tags, ExifTool can be used to rename and/or move images into directories according to any information contained in the image. This is a powerful feature when combined with the <code>-tagsFromFile</code> ability to copy the values from other tags. The most common use of this feature is to organize images by date/time, but any other tag value may also be used.</p> <p>Writing the <b>Directory</b> tag moves a file to a specified directory. The directory is created if it doesn't already exist.</p> <p>Writing the <b>FileName</b> tag renames a file. If the new <b>FileName</b> has a directory specification (ie. contains a '<code>/</code>' character), then the file is also moved to the specified directory (see <a href="#ex6">example 6</a> below). Existing files will not be overwritten (but see "Warning" below).</p> <p>The write-only <b>TestName</b> tag provides a mechanism for dry-run testing of the rename feature. Writing <b>TestName</b> displays the old and new names without making any changes to the files. (Note that there is no corresponding test tag for <b>Directory</b>, but <b>TestName</b> supports a full path name just like <b>FileName</b>, so the directory may be tested as well.)</p> <p>The <code>%d</code>, <code>%f</code>, <code>%e</code> file name format codes may be used to represent the directory, name and extension of the original file when specifying <b>FileName</b> and <b>Directory</b> tags via the command-line interface. (In a similar way to the <code>-o</code>, <code>-w</code> and <code>-tagsFromFile</code> options.) Also, <code>%c</code> may be used to add a copy number to the output file name to avoid collisions with existing file names. Note that these codes must be escaped with an extra <code>%</code> if used within a date format string. Modifiers may also be used to change the default behaviour of these format codes. See the <code>-w</code> option in the <a href="exiftool_pod.html">application documentation</a> for details.</p> <p>When organizing files by date/time, use of the <code>-d</code> (date format) option is essential to specify a format for the filename (and/or directory name). The examples below demonstrate the use of this feature. Also, a list of of <a href="#codes">common date format codes</a> is provided for reference.</p> <blockquote class=prog><b class=red>Advanced feature:</b> The write-only <b>HardLink</b> tag may be written using a technique similar to <b>FileName</b>. Instead of renaming or moving the file, writing <b>HardLink</b> creates a hard link with the specified name. This feature allows files to be organized without affecting the originals. See the <a href="TagNames/extra.html">Extra Tags documentation</a> for more information.</blockquote> <h3>Notes:</h3> <p>Writing the <b>FileName</b> and/or <b>Directory</b> tags alone causes the file to be renamed or moved, not copied. However, if any "real" tags are written at the same time, then the file is rewritten to the new destination and the original file is left unchanged. (Only the four writable "pseudo" tags, <b>FileName</b>, <b>Directory</b>, <b>FileModifyDate</b> and <b>FileCreateDate</b>, may be set without causing the file to be rewritten.) If desired, the <code>-overwrite_original</code> option may be used to remove the original copy when the file is rewritten.</p> <p>Conversely, the <code>-o</code> option may be used to force exiftool to always create a copy of the file, even if no meta-information tags are written. This is true even if the <code>-o</code> option is superseded by writing the <b>Directory</b> tag, or through a <b>FileName</b> which includes a directory specification. (See <a href="#ex5">example 5</a> below. Also see <a href="#ex11">example 11</a> for the directory precedence rules.)</p> <p>If the <code>-d</code> option is used, the unformatted date/time value must be valid (ie. in the form "<code>YYYY:mm:dd HH:MM:SS</code>"), otherwise the date formatting will fail and the file will not be renamed or moved.</p> <p>In a Windows batch file, all <code>%</code> characters must be escaped as <code>%%</code>. This can result in extreme format codes like <code>%%%%f</code> when using the <code>-d</code> option.</p> <blockquote class=prog><b class=red>Warning:</b> Writing <b>illegal file names</b> in Windows can have unpredictable results and may result in <b>data loss</b>. Illegal characters in Windows file names are: <pre class=code> / \ ? * : | " &lt; &gt;</pre> Any tag used in generating a file name which may contain these characters must first be filtered to remove or translate these characters. A special feature allows these characters to be removed from a tag value by adding a semicolon inside the braces after a tag name. For example: <pre class=code> exiftool "-filename&lt;${model;}.%e" c:\images</pre> This advanced formatting feature may also be used to do arbitrary reformatting of any tag value used in a format string. See the <code>-p</code> option in the <a href="exiftool_pod.html">application documentation</a> for more details. </blockquote> <h2>Examples</h2> <a name="ex0"></a><table cellpadding=6> <tr><td valign='top'>&nbsp;0.</td><td bgcolor='#dddddd'><code class='blk'> exiftool -d %Y%m%d_%H%M%%-c.%%e "-testname&lt;CreateDate" DIR </code></td></tr></table> <blockquote> The <b>TestName</b> tag is used for dry-run testing of the file renaming feature. The above command is identical to that of the next example except that <b>TestName</b> is written instead of <b>FileName</b>. So instead of renaming the files, this command prints the old and new file names without actually changing anything. For example: <blockquote><pre>&gt; <span class=code>exiftool -d %Y%m%d_%H%M%%-c.%%e "-testname&lt;CreateDate" tmp</span> 'tmp/a.jpg' --&gt; 'tmp/20031031_1544.jpg' 'tmp/b.jpg' --&gt; 'tmp/20010519_1836.jpg' 1 directories scanned 0 image files updated 2 image files unchanged</pre></blockquote> </blockquote> <a name="ex1"></a><table cellpadding=6> <tr><td valign='top'>&nbsp;1.</td><td bgcolor='#dddddd'><code class='blk'> exiftool -d %Y%m%d_%H%M%%-c.%%e "-filename&lt;CreateDate" DIR </code></td></tr></table> <blockquote> Rename all images in directory '<code>DIR</code>' to names like '<code>20060327_1058-2.jpg</code>', with individual file names derived from the value of the CreateDate (plus a copy number with a leading '<code>-</code>' if a file with the same name already exists), and with the same extension as the original image. <i class=lt>[Note that copying tag values with '<code>&lt;</code>' implies '<code>-tagsfromfile @</code>' unless otherwise specified. See the <code>-tagsFromFile</code> description in the <a href="exiftool_pod.html">application documentation</a> for details.]</i> <p><b>FAQ:</b> <i>"Why doesn't this command rename my files?"</i></p> <p>There are 2 common reasons for this:</p> <p>a) When a directory name is specified, this command will only rename "writable" files in the directory. Use '<code>exiftool -listwf</code>' to list the extensions of currently writable file types. The <code>-ext</code> option may be used to rename other file types (eg. '<code>-ext avi</code>').</p> <p>b) For this command to work, the CreateDate tag must exist in the source file. Use '<code>exiftool -createdate FILE</code>' to see if a file contains this information. If it doesn't, you may need to use another date/time tag such as DateTimeOriginal or FileModifyDate. To see all available date/time tags in a file (and their locations), use '<code>exiftool -a -G1 -s -time:all FILE</code>'.</p> </blockquote> <a name="ex2"></a><table cellpadding=6> <tr><td valign='top'>&nbsp;2.</td><td bgcolor='#dddddd'><code class='blk'> exiftool -d %Y-%m-%d "-directory&lt;datetimeoriginal" image.jpg </code></td></tr></table> <blockquote> Move '<code>image.jpg</code>' into a directory with a name given by DateTimeOriginal, in the form '<code>2006-03-27</code>'. </blockquote> <a name="ex3"></a><table cellpadding=6> <tr><td valign='top'>&nbsp;3.</td><td bgcolor='#dddddd'><code class='blk'> exiftool '-filename&lt;%f_$imagesize.%e' dir </code></td></tr></table> <blockquote> This example uses an expression to add the image size to the name of all images in directory '<code>dir</code>'. For example, this would remame a 640x480 image called '<code>image.jpg</code>' to '<code>image_640x480.jpg</code>'. (Note that the single quotes are necessary in Unix shells due to the '<code>$</code>' symbol, but double quotes must be used instead when running in a Windows cmd shell.) </blockquote> <a name="ex4"></a><table cellpadding=6> <tr><td valign='top'>&nbsp;4.</td><td bgcolor='#dddddd'><code class='blk'> exiftool -r -directory=%e_images/%d pics </code></td></tr></table> <blockquote> Recursively move all images based in directory '<code>pics</code>' to separate directory trees organized by file extension. For instance, in this example the file '<code>pics/toys/new_car.jpg</code>' is moved to '<code>jpg_images/pics/toys/new_car.jpg</code>'. </blockquote> <a name="ex5"></a><table cellpadding=6> <tr><td valign='top'>&nbsp;5.</td><td bgcolor='#dddddd'><code class='blk'> exiftool -r -o %e_images/%d pics<br> exiftool -r -o dummy/ -directory=%e_images/%d pics </code></td></tr></table> <blockquote> Both of these commands have the same effect as example 3 above except that images are copied instead of moved since the <code>-o</code> option was used. In the second command the trailing '<code>/</code>' on '<code>dummy/</code>' is necessary because otherwise '<code>dummy</code>' would be interpreted as a file name. This technique of using <code>-o</code> with a dummy directory name is necessary when the directory name is derived from the value of other tags (eg. '<code>-directory&lt;createDate</code>') and you want the files to be copied instead of moved. (Because the values of other tags may not be used with the <code>-o</code> option.) </blockquote> <a name="ex6"></a><table cellpadding=6> <tr><td valign='top'>&nbsp;6.</td><td bgcolor='#dddddd'><code class='blk'> exiftool -r -d %Y/%m/%d/image_%H%M%S.%%e "-filename&lt;filemodifydate" DIR </code></td></tr></table> <blockquote> Recusively rename all images in '<code>DIR</code>' and any contained subdirectories to the form '<code>image_HHMMSS.EXT</code>' (where '<code>ext</code>' is the original file extension), and move them into a new directory hierarchy based on date of file modification, with path names like '<code>2006/03/27/image_105859.jpg</code>'. </blockquote> <p>The following examples demonstrate the interaction of this feature with other ExifTool options:</p> <a name="ex7"></a><table cellpadding=6> <tr><td valign='top'>&nbsp;7.</td><td bgcolor='#dddddd'><code class='blk'> exiftool -filename=new.jpg dir/image.jpg </code></td></tr></table> <blockquote> Rename '<code>dir/image.jpg</code>' to '<code>dir/new.jpg</code>'. </blockquote> <a name="ex8"></a><table cellpadding=6> <tr><td valign='top'>&nbsp;8.</td><td bgcolor='#dddddd'><code class='blk'> exiftool -filename=new.jpg -comment=xxx dir/image.jpg </code></td></tr></table> <blockquote> Copy '<code>dir/image.jpg</code>', add a new comment, and write output to '<code>dir/new.jpg</code>'. The original file '<code>dir/image.jpg</code>' is not changed. </blockquote> <a name="ex9"></a><table cellpadding=6> <tr><td valign='top'>&nbsp;9.</td><td bgcolor='#dddddd'><code class='blk'> exiftool -filename=new.jpg -comment=xxx -overwrite_original dir/image.jpg </code></td></tr></table> <blockquote> Rewrite '<code>dir/image.jpg</code>', adding a new comment and writing output to '<code>dir/new.jpg</code>'. The original file '<code>dir/image.jpg</code>' is removed. </blockquote> <a name="ex10"></a><table cellpadding=6> <tr><td valign='top'>10.</td><td bgcolor='#dddddd'><code class='blk'> exiftool -o tmp/ -filename=new.jpg image.jpg<br> exiftool -o tmp/xxx.jpg -filename=new.jpg image.jpg<br> exiftool -o tmp/new.jpg image.jpg </code></td></tr></table> <blockquote> A file name or directory specified via the <b>FileName</b> or <b>Directory</b> tag takes precedence over that specified by the <code>-o</code> option, so these three commands all have the same effect: '<code>tmp/new.jpg</code>' is created without changing '<code>image.jpg</code>'. Note that in the first command, the trailing '<code>/</code>' on '<code>tmp/</code>' is necessary if the '<code>tmp</code>' directory doesn't already exist, otherwise '<code>tmp</code>' would be taken as a file name and '<code>new.jpg</code>' would be created in the current directory. As illustrated in example 4 above, the file is rewritten instead of simply being renamed when the '<code>-o</code>' option is used. </blockquote> <a name="ex11"></a><table cellpadding=6> <tr><td valign='top'>11.</td><td bgcolor='#dddddd'><code class='blk'> exiftool -directory=dir1 -filename=dir2/out.jpg -o dir3/ dir4/image.jpg </code></td></tr></table> <blockquote> This example demonstrates the priorities of directory names specified using different techniques. The output directory is taken from the first directory specified from the following list: 1) the <b>Directory</b> tag, 2) the directory part of the <b>FileName</b> tag, 3) the directory part of the <code>-o</code> option, or 4) the source directory, in that order. The order of the arguments on the command line is not significant. In this example, the target file is copied (not moved, because the <code>-o</code> option was used) to '<code>dir1/image.jpg</code>'. </blockquote> <blockquote>Note that both the <b>FileName</b> tag and the <code>-o</code> option may be used without a directory specification, in which case the directory with the next highest priority is used. Also note that if <code>-o</code> specifies a directory, then the directory name must end with a '<code>/</code>' or the directory must already exist, otherwise ExifTool will interpret the last part as a file name. (eg. '<code>-o images/test</code>' specifies the '<code>images</code>' directory unless the '<code>images/test</code>' directory already exists, while '<code>-o images/test/</code>' unabiguously specifies the '<code>images/test</code>' directory.) </blockquote> <a name="ex12"></a><table cellpadding=6> <tr><td valign='top'>12.</td><td bgcolor='#dddddd'><code class='blk'> exiftool -d %Y/%m "-directory&lt;filemodifydate" "-directory&lt;createdate" "-directory&lt;datetimeoriginal" . </code></td></tr></table> <blockquote>Move image files from the current directory (<code>.</code>) into a directory hierarcy based on year/month. In this command the Directory tag is set from multiple other date/time tags. ExifTool evaluates the command-line arguments left to right, and latter assignments to the same tag override earlier ones, so the Directory for each image is ultimately set by the rightmost copy argument that is valid for that image. Specifically, Directory is set from DateTimeOriginal if it exists, otherwise CreateDate if it exists, and finally FileModifyDate (which always exists) is used as a fallback.</blockquote> <a name="codes"></a><h2>Common Date Format Codes</h2> <p>Date format codes are used in the argument to the <code>-d</code> option to represent components of the date/time string. The codes listed below are common to most systems, but additional codes may be available on your specific system -- see your <i>strftime</i> man page for details.</p> <blockquote><table> <tr><th>%a</th><td>- abbreviated locale weekday name</td></tr> <tr><th>%A</th><td>- full locale weekday name</td></tr> <tr><th>%b</th><td>- abbreviated locale month name</td></tr> <tr><th>%B</th><td>- full locale month name</td></tr> <tr><th>%c</th><td>- preferred locale date/time representation</td></tr> <tr><th>%d</th><td>- day of month (01-31)</td></tr> <tr><th>%H</th><td>- hour on a 24-hour clock (00-23)</td></tr> <tr><th>%I</th><td>- hour on a 12-hour clock (01-12)</td></tr> <tr><th>%j</th><td>- day of year (001-366)</td></tr> <tr><th>%m</th><td>- month number (01-12)</td></tr> <tr><th>%M</th><td>- minute (00-59)</td></tr> <tr><th>%p</th><td>- 'AM' or 'PM'</td></tr> <tr><th>%s</th><td>- number of seconds since the Epoch, UTC (see note 1 below)</td></tr> <tr><th>%S</th><td>- seconds (00-59)</td></tr> <tr><th>%w</th><td>- weekday number (0-6)</td></tr> <tr><th>%W</th><td>- week number of the year (00-53)</td></tr> <tr><th>%x</th><td>- preferred locale date representation</td></tr> <tr><th>%X</th><td>- preferred locale time representation</td></tr> <tr><th>%y</th><td>- 2-digit year (00-99)</td></tr> <tr><th>%Y</th><td>- 4-digit year (eg. 2006)</td></tr> <tr><th>%z</th><td>- time zone in the form +/-hhmm (see note 1 below)</td></tr> <tr><th>%Z</th><td>- system time zone name (see note 2 below)</td></tr> <tr><th>%%</th><td>- a literal '%' character</td></tr> </table></blockquote> <p>ExifTool file name format codes may be used inside a date format string when a date/time tag is used to set the value of the <b>FileName</b> or <b>Directory</b> tags via the command-line interface. In this case, an extra '<code>%</code>' must be added to pass the format code through the date/time parser:</p> <blockquote><table> <tr><th>%%d</th><td>- original file directory (including trailing "/" if necessary)</td></tr> <tr><th>%%f</th><td>- original file name (without the extension)</td></tr> <tr><th>%%e</th><td>- original file extension (not including the ".")</td></tr> <tr><th>%%c</th><td>- copy number (output files only)</td></tr> </table></blockquote> <p>See the <code>-w</code> option in the <a href="exiftool_pod.html">exiftool application documentation</a> for details about special features available with these name format codes.</p> <p><b>Notes:</b></p> <ol> <li>The %s and %z format codes use the time zone specified by the date/time value. If the date/time value does not include a time zone specification, then it is interpreted as a local time in the system time zone. These format codes are parsed by ExifTool, so they should work on all systems.<br><br></li> <li>The %Z format code ignores any time zone specified in the date/time value, and returns the system time-zone name for the given date/time interpreted as a local system time.</li> </ol> <hr> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/geotag.html���������������������������������������������������������������000644 �000765 �000024 �00000071344 12650434566 017507� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> <html> <head> <title>Geotagging with ExifTool</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <style type="text/css"> <!-- pre { color: #800; margin-left: 4em } .nr { white-space: nowrap } --> </style> </head> <body> <div class='index'> <a href="#Implementation">Implementation</a> <br>&nbsp; - <a href="#geotag">Geotag</a> <br>&nbsp; - <a href="#geosync">Geosync</a> <br>&nbsp; - <a href="#geotime">Geotime</a> <br><a href="#Examples">Examples</a> <br><a href="#Options">Options</a> <br><a href="#Orient">Orientation</a> <br><a href="#Troubleshooting">Troubleshooting</a> <br><a href="#Tips">Tips</a> <hr> <a href="#Inverse">Inverse Geotagging</a> <br>&nbsp; - <a href="#GPX">Creating GPX log</a> <br>&nbsp; - <a href="#KML">Creating KML file</a> </div> <h1 class='up'>Geotagging with ExifTool</h1> <p>The ExifTool geotagging feature adds GPS tags to images based on data from a GPS track log file. The GPS track log file is loaded, and linear interpolation is used to determine the GPS position at the time of the image, then the following tags are written to the image (if the corresponding information is available):</p> <pre>GPSLatitude GPSLongitude GPSAltitude GPSDateStamp GPSLatitudeRef GPSLongitudeRef GPSAltitudeRef GPSTimeStamp GPSTrack GPSSpeed GPSImgDirection GPSPitch GPSTrackRef GPSSpeedRef GPSImgDirectionRef GPSRoll </pre> <blockquote class=lt><i>Note: GPSPitch and GPSRoll are not standard tags, and must be <a href="#Orient">user-defined</a>.</i></blockquote> <p>Currently supported GPS track log file formats:</p> <ul> <li>GPX</li> <li>NMEA (RMC, GGA, GLL and GSA sentences)</li> <li>KML</li> <li>IGC (glider format)</li> <li>Garmin XML and TCX</li> <li>Magellan eXplorist PMGNTRK</li> <li>Honeywell PTNTHPR (see <a href="#Orient">Orientation</a>)</li> <li>Bramor gEO log</li> <li>Winplus Beacon .TXT</li> </ul> <a name="Implementation"></a> <h3>Implementation</h3> <p>Geotagging is accomplished in ExifTool through the use of three special <a href="TagNames/Extra.html">Extra tags</a>: <code>Geotag</code>, <code>Geosync</code> and <code>Geotime</code>.</p> <blockquote class=lt><i>Note: When writing these tags, order is important. If <code>Geotime</code> is written, it must be done after both <code>Geotag</code> and <code>Geosync</code>.</i></blockquote> <a name="geotag"></a> <h4>Geotag</h4> <p>The <code>Geotag</code> tag is used to define the GPS track log data. The geotagging feature is activated by assigning the name of a track log file to this tag. As an example, the following command line adds GPS tags to all images in the "/Users/Phil/Pictures" directory based on GPS positions stored in the track log file "track.log" in the current directory:</p> <pre>exiftool -geotag=track.log /Users/Phil/Pictures </pre> <p>As a convienience the exiftool application also provides a <code>-geotag</code> option, so the following command is equivalent to the one above:</p> <pre>exiftool -geotag track.log /Users/Phil/Pictures </pre> <p>Multiple GPS log files may be loaded simultaneously by using more than one <code>-geotag</code> option or <code>-geotag=</code> assignment in the same command. This allows batch processing of images spanning different tracks with a single command. Wildcards may be used in the argument of the <code>-geotag</code> option, but note that the argument may then need to be quoted on some systems to prevent shell globbing, and that wildcards are not supported with the <code>-geotag=</code> syntax. See the <a href="#Examples">examples</a> below.</p> <p>Deleting the <code>Geotag</code> tag (with <code>-geotag=</code>) causes the GPS tags written by the <code>-geotag</code> feature to be deleted.</p> <blockquote class=lt><i>Programmers: You may write either a GPS log file name or the GPS log data as the value for <code>Geotag</code>. If the value contains a newline or a null byte it is assumed to be data, otherwise it is taken as a file name.</i></blockquote> <a name="geosync"></a> <h4>Geosync</h4> <p>The <code>Geosync</code> tag is needed only when the image timestamps are not properly synchronized with GPS time, and must be set before <code>Geotime</code> to be effective (or before <code>Geotag</code> if <code>Geotime</code> is not specified). The value written to the <code>Geosync</code> tag may take a number of different forms, but the basic format is that of a simple time difference which is added to <code>Geotime</code> before interpolating the GPS position in the track log. This time difference may be of the form "SS", "MM:SS", "HH:MM:SS" or "DD HH:MM:SS" (where SS=seconds, MM=minutes, HH=hours and DD=days), and a leading "+" or "-" may be added for positive or negative differences (negative if the camera clock was ahead of GPS time). Fractional seconds are allowed (eg. "SS.ss").</p> <p>For example, "<code>-geosync=-1:20</code>" specifies that synchronization with GPS time is achieved by subtracting 1 minute and 20 seconds from the <code>Geotime</code> value. See the <a href="#TP1">Time Synchronization Tip</a> below for more details.</p> <blockquote class=lt><i>Note that a single decimal value is interpreted as seconds when written to <code>Geosync</code>. This is different from of other date/time shift values where a single value is normally taken as hours.</i> </blockquote> <p>The <code>Geosync</code> value may also be specified using 3 different formats which provide a GPS time and a corresponding camera clock time. While these formats may be used for a simple (constant) time synchronization offset, they are necessary when performing a clock drift correction (with multiple synchronization points), and are described below.</p> <p><b>Camera clock drift correction:</b></p> <p>A more advanced <code>Geosync</code> feature allows the GPS time and the image time to be specified together, facilitating a time drift correction if more than one synchronization point is provided. For this, the value written to <code>Geosync</code> takes one of the following forms:</p> <blockquote> <table class='norm'> <tr><th>Format</th><th>Notes</th></tr> <tr><td><i>FILE</i></td> <td>Both GPS and image timestamps are extracted from the specified file. eg) <code>-geosync=image.jpg</code></td></tr> <tr><td><i>GPSTIME</i>@<i>FILE</i></td><td>GPS time is taken from the <code>Geosync</code> value and the image timestamp is extracted from the specified file. eg) <code>-geosync="12:58:05@image.jpg"</code></td></tr> <tr><td><i>GPSTIME</i>@<i>IMGTIME</i></td><td>Both GPS and image timestamps are taken from the <code>Geosync</code> value. eg) <code>-geosync="12:58:05@2010:01:02 12:25:26"</code></td></tr> </table></blockquote> <p>The values of <i>GPSTIME</i> and <i>IMGTIME</i> specified on the command line may contain a date, but it is not necessary.</p> <p>Notes:</p> <ol> <li>If either the GPS or the image timestamp does not contain a date, the two timestamps are assumed to be on days which place them within 12 hours of each other.</li> <li>If neither the GPS nor the image timestamps contain a date, this synchronization point may only be used for constant time offset (ie. no time drift correction will be applied).</li> <li>Both the GPS and the image times are assumed to be local unless another timezone is specified.</li> <li>Both the GPS and the image time values may contain decimal seconds.</li> <li>The applied value of the time drift correction is calculated from a piecewise linear interpolation/extrapolation between the synchronization points if more than one <code>Geosync</code> value is defined.</li> <li>When extracting from file, timestamps are taken from the first available of the following tags: <ul> <li>Image timestamp: SubSecDateTimeOriginal, SubSecCreateDate, SubSecModifyDate, DateTimeOriginal, CreateDate, ModifyDate, FileModifyDate</li> <li>GPS timestamp: GPSDateTime, GPSTimeStamp</li> </ul></li> </ol> <a name="geotime"></a> <h4>Geotime</h4> <p>The <code>Geotime</code> tag specifies the point in time for which the GPS position is calculated (by interpolating between fixes in the GPS track log). Unless a group is specified, exiftool writes the generated tags to the default groups. If a value for <code>Geotime</code> is not given, it is taken from <code>DateTimeOriginal</code> for each image (as if <code>"-Geotime&lt;DateTimeOriginal"</code> had been specified), but the value may be copied from any other date/time tag or set directly from a date/time string.</p> <p>If the date/time tag does not include a timezone then one may be added (eg. <code>"-Geotime&lt;${CreateDate}-05:00"</code>), otherwise the local system time is assumed. Decimal seconds are supported in the time value.</p> <p>By default, GPS tags are created in EXIF and the corresponding XMP tags are updated only if they already exist. However, an EXIF or XMP group name may be specified to force writing only to the specified location. For example, writing <code>XMP:Geotime</code> or <code>EXIF:Geotime</code> will write the generated GPS tags only to XMP or EXIF respectively. Note that when written to XMP, the <code>GPSLatitudeRef</code> and <code>GPSLongitudeRef</code> tags are not used, and the XMP <code>GPSDateTime</code> tag is written instead of the separate EXIF <code>GPSDateStamp</code> and <code>GPSTimeStamp</code> tags.</p> <p>See the <a href="#Examples">Examples</a> section below for sample command lines illustrating various aspects of the geotagging feature.</p> <blockquote class=lt><i>Programmers: Note that <code>Geotime</code> must always be specified when geotagging via the API -- the default value of <code>DateTimeOriginal</code> is implemented by the application.</i> </blockquote> <a name="Examples"></a> <h3>Examples</h3> <p>Geotag all images in the "c:\images" directory from position information in a GPS track log ("c:\gps logs\track.log"). Since the <code>Geotime</code> time is not specified, the value of <code>DateTimeOriginal</code> is used. Local system time is assumed unless <code>DateTimeOriginal</code> contains a timezone:</p> <pre>exiftool -geotag "c:\gps logs\track.log" c:\images</pre> <p>Geotag all images in directory "dir" from the GPS positions in "track.log" (in the current directory), for a camera clock that was running 25 seconds slower than the GPS clock:</p> <pre>exiftool -geotag track.log -geosync=+25 dir</pre> <p>Geotag an image with the GPS position for a specific time. (Note that the <code>Geotag</code> tag must be assigned before <code>Geotime</code> for the GPS data to be available when <code>Geotime</code> is set):</p> <pre>exiftool -geotag t.log -geotime="2009:04:02 13:41:12-05:00" a.jpg</pre> <p>Geotag all images in directory "dir" with XMP tags instead of EXIF tags, based on the image <code>CreateDate</code>. (In this case, the order of the arguments doesn't matter because tags with values copied from other tags are always set after constant values):</p> <pre>exiftool -geotag log.gpx "-xmp:geotime&lt;createdate" dir</pre> <p>Geotag images in "dir" using <code>CreateDate</code> with the specified timezone. If <code>CreateDate</code> already contained a timezone, then the timezone specified on the command line is ignored. (Note that in Windows, double quotes (<code>"</code>) must be used instead of single quotes (<code>'</code>) around the <code>-geotime</code> argument in the next 2 commands):</p> <pre>exiftool -geotag a.log '-geotime&lt;${createdate}+01:00' dir</pre> <p>Geotag images for which the camera clock was set to UTC (+00:00), using the time from <code>DateTimeOriginal</code>:</p> <pre>exiftool -geotag trk.gpx '-geotime&lt;${DateTimeOriginal}+00:00' dir</pre> <p>Delete GPS tags which were added by the geotag feature. (Note that this does not remove all GPS tags -- to do this instead use <code>-gps:all=</code>):</p> <pre>exiftool -geotag= a.jpg</pre> <p>Delete XMP GPS tags which were added by the geotag feature:</p> <pre>exiftool -xmp:geotag= a.jpg</pre> <p>Geotag an image with XMP tags, using the time from <code>DateTimeOriginal</code>:</p> <pre>exiftool -xmp:geotag=track.log a.jpg</pre> <p>Combine multiple track logs and geotag an entire directory tree of images:</p> <pre>exiftool -geotag a.log -geotag b.log -r dir</pre> <p>Use wildcards to load multiple track files (the quotes are necessary for most operating systems to prevent filename expansion):</p> <pre>exiftool -geotag "logs/*.log" dir</pre> <p>Geotag from a sub-second date/time value with a sub-second time synchronization (only possible if the EXIF sub-second time stamps are available):</p> <pre>exiftool -Geotag a.log -Geosync=+13.42 "-Geotime&lt;SubSecDateTimeOriginal" dir </pre> <p>Geotag images with a piecewise linear time drift correction using the GPS time synchronization from three already-geotagged images:</p> <pre>exiftool -geotag a.log -geosync=1.jpg -geosync=2.jpg -geosync=3.jpg dir </pre> <a name="Options"></a> <h3>Options</h3> <p>Geotagging may be configured via the following ExifTool options. These options may be set using either the <code>-api</code> option of the command-line application, the Options() function of the API, or the %Image::ExifTool::UserDefined::Options hash of the config file. (See the <a href="config.html">sample config file</a> for details about how to use the config file.)</p> <blockquote> <table class='norm'> <tr><th>Option</th><th>Description</th><th>Values</th><th>Default</th></tr> <tr><td>GeoMaxIntSecs</td> <td>Maximum interpolation time in seconds for geotagging. Geotagging is treated as an extrapolation if the Geotime value lies between two fixes in the same track which are separated by a number of seconds greater than this. Otherwise, the coordinates are calculated as a linear interpolation between the nearest fixes on either side of the Geotime value. Set to 0 to disable interpolation and use the coordinates of the nearest fix instead (provided it is within GeoMaxExtSecs, otherwise geotagging fails).</td> <td align='center'>A&nbsp;floating&nbsp;point&nbsp;number</td> <td align='center'>1800</td></tr> <tr><td>GeoMaxExtSecs</td> <td>Maximum extrapolation time in seconds for geotagging. Geotagging fails if the Geotime value lies outside a GPS track by a number of seconds greater than this. Otherwise, the coordinates of the nearest fix are taken.</td> <td align='center'>A&nbsp;floating&nbsp;point&nbsp;number</td> <td align='center'>1800</td></tr> <tr><td>GeoMaxHDOP</td> <td>Maximum Horizontal (2D) Dilution Of Precision for geotagging. GPS fixes are ignored if the HDOP is greater than this.</td> <td align='center'>A&nbsp;floating&nbsp;point&nbsp;number, or undef to disable</td> <td align='center'>undef</td></tr> <tr><td>GeoMaxPDOP</td> <td>Maximum Position (3D) Dilution Of Precision for geotagging. GPS fixes are ignored if the PDOP is greater than this.</td> <td align='center'>A&nbsp;floating&nbsp;point&nbsp;number, or undef to disable</td> <td align='center'>undef</td></tr> <tr><td>GeoMinSats</td> <td>Minimum number of satellites for geotagging. GPS fixes are ignored if the number of acquired satellites is less than this.</td> <td align='center'>A positive integer, or undef to disable</td> <td align='center'>undef</td></tr> </table></blockquote> <a name="Orient"></a> <h3>Orientation</h3> <p>ExifTool reads orientation information from the PTNTHPR sentence generated by some Honeywell digital compasses. This is a proprietary NMEA sentence which contains information about heading, pitch and roll angles. When this information is available, the heading is written to GPSImgDirection (and GPSImgDirectionRef is set to "T"), but no standard GPS tags exist for pitch and roll. Regardless, ExifTool attempts to write GPSPitch and GPSRoll tags. For this information to be stored, appropriate user-defined tags must be created. Below is a simple config file which defines the necessary EXIF GPS tags. Corresponding XMP-exif tags may also be created. See the <a href="config.html">config file documentation</a> for more information.</p> <pre>%Image::ExifTool::UserDefined = ( 'Image::ExifTool::GPS::Main' => { 0xd000 => { Name => 'GPSPitch', Writable => 'rational64s', }, 0xd001 => { Name => 'GPSRoll', Writable => 'rational64s', }, }, ); 1; #end </pre> <a name="Troubleshooting"></a> <h3>Troubleshooting</h3> <a name="TR1"></a> <p>1. <b>"No track points found in GPS file"</b></p> <blockquote>If you see the above message, either exiftool does not yet support your track log file format, or your track log does not contain the necessary position/timestamp information. For instance, in KML files each Placemark must contain a TimeStamp. If you believe your track log contains the necessary information, please send me a sample file and I will add support for this format.</blockquote> <a name="TR2"></a> <p>2. <b>"0 image files updated"</b></p> <blockquote>If you see this message without any other warning messages, it is likely that <code>Geotime</code> didn't get set properly.</blockquote> <blockquote>Be sure that the necessary date/time tag exists in your image for copying to <code>Geotime</code>. Unless otherwise specified, the required tag is <code>DateTimeOriginal</code>. The following command may be used to list the names and values of all available date/time tags in an image: <pre>exiftool -s -time:all image.jpg </pre> Even if there is no metadata in the image you may be able to set <code>Geotime</code> from the filesystem modification date for the image (which will appear as <code>FileModifyDate</code> in the output of the above command). In this case you may also want to include the <code>-P</code> option to preserve the original value of <code>FileModifyDate</code>: <pre>exiftool -geotag track.gpx "-geotime&lt;filemodifydate" -P image.jpg </pre> Without the <code>-P</code> option, <code>FileModifyDate</code> is set to the current date/time when the file is rewritten.</blockquote> <a name="TR3"></a> <p>3. <b>"Warning: Time is too far before track in File:Geotime (ValueConvInv)"</b></p> <blockquote>If you see a warning like this, you may have a time zone problem, or a time synchronization issue. Keep in mind that GPS times are in UTC, but the camera times are typically in your local time zone.</blockquote> <blockquote>To see more details about what ExifTool is doing, try adding the <code>-v2</code> option to your command. You should then see messages like this if the GPS track log was loaded successfully: <pre>Loaded 372 points from GPS track log file 'my_track.log' GPS track start: 2009:03:30 19:45:25 UTC GPS track end: 2009:04:03 11:16:04 UTC </pre> If the number of points loaded and start/end times seem reasonable, then the problem is likely in the time synchronization. Also printed will be the UTC time for the image: <pre> Geotime value: 2009:04:03 10:57:01 UTC (local timezone is -05:00) </pre> The "Geotime value" must lie within 1/2 hour of a valid GPS fix in the track log for a position to be calculated. (1/2 hour is the default, but this can be configured via the geotagging <a href="#Options">Options</a>.) The time calibration relies on proper synchronization between the GPS time and your camera's clock. If a timezone is not specified, the local system time zone (as set by the shell's TZ environment variable) is printed in the above message and used to convert the <code>Geotime</code> value to UTC. You should specify the timezone for <code>Geotime</code> if your images were taken in a different timezone (see <a href="#Examples">Examples</a> above). If the camera clock was wrong, the <code>Geosync</code> tag may be used to apply a time correction, or the ExifTool time shift feature may be used to adjust the image times before geotagging -- see the <a href="#TP1">Time Synchronization</a> tip below for examples.</blockquote> <a name="Tips"></a> <h3>Tips</h3> <a name="TP1"></a> <p>1. <b>Time Synchronization</b></p> <blockquote>One way to accurately synchronize your images with GPS time is to take a picture of the time displayed on your GPS unit while you are out shooting. Then after you download your images you can use this image to synchronize the image timestamps for geotagging. This is done by using an image viewer to read the time from the GPS display in the image, and exiftool to extract <code>DateTimeOriginal</code> from the file. For example, if the time in the GPS display reads 19:32:21 UTC and <code>DateTimeOriginal</code> is 14:31:49, then for this image the camera clock was 32 seconds slow (assuming that the timezone of the camera clock was <span class=nr>-05:00</span>). There are two different ways to use this time synchronization to improve your geotagging accuracy: </blockquote> <blockquote>A) Use the <code>Geosync</code> tag to specify the time difference while geotagging. Using this technique the existing image timestamps will not be corrected, but the <code>GPSTimeStamp</code> tag created by the geotagging process will contain the correct GPS time: <pre>exiftool -geosync=+00:00:32 -geotag my_gps.log C:\Images </pre> or equivalently, <pre>exiftool -geosync=19:32:21Z@14:31:49-05:00 -geotag my_gps.log C:\Images </pre> <i class=lt>(Note that this technique may also be used for a more advanced time drift correction. See the <a href='#geosync'>Geosync section above</a> for details)</i></blockquote> <blockquote>B) First fix the image timestamps by shifting them to synchronize with GPS time, then geotag using the corrected timestamps: <pre>exiftool -alldates+=00:00:32 C:\Images exiftool -geotag my_gps.log C:\Images </pre> Both examples above assume that your track log file (<code>my_gps.log</code>) is in the current directory, that the images were downloaded to the <code>C:\Images</code> directory, and that the computer and camera clocks are in the same timezone.</blockquote> <hr> <a name="Inverse"></a> <h2>Inverse Geotagging</h2> <p>The <code>-p</code> option may be used to output files in any number of formats. This section gives examples for creating GPX and KML output files from a set of geotagged images, or from a geotagged video file. (But note that the <code>-ee</code> option must be added to the commands below to extract the full track from a video file, and currently only M2TS videos are supported for this feature.)</p> <a name="GPX"></a> <h4>Creating a GPX track log</h4> <p>The following print format file may be used to generate a GPX track log from one or more geotagged images:</p> <pre>#------------------------------------------------------------------------------ # File: gpx.fmt # # Description: Example ExifTool print format file for generating GPX track log # # Usage: exiftool -p gpx.fmt -d %Y-%m-%dT%H:%M:%SZ FILE [...] > out.gpx # # Requires: ExifTool version 8.10 or later # # Revisions: 2010/02/05 - P. Harvey created # # Notes: 1) All input files must contain GPSLatitude and GPSLongitude. # 2) The -fileOrder option may be used to control the order of the # generated track points. #------------------------------------------------------------------------------ #[HEAD]&lt;?xml version="1.0" encoding="utf-8"?&gt; #[HEAD]&lt;gpx version="1.0" #[HEAD] creator="ExifTool $ExifToolVersion" #[HEAD] xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" #[HEAD] xmlns="http://www.topografix.com/GPX/1/0" #[HEAD] xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd"&gt; #[HEAD]&lt;trk&gt; #[HEAD]&lt;number&gt;1&lt;/number&gt; #[HEAD]&lt;trkseg&gt; #[BODY]&lt;trkpt lat="$gpslatitude#" lon="$gpslongitude#"&gt; #[BODY] &lt;ele&gt;$gpsaltitude#&lt;/ele&gt; #[BODY] &lt;time&gt;$gpsdatetime&lt;/time&gt; #[BODY]&lt;/trkpt&gt; #[TAIL]&lt;/trkseg&gt; #[TAIL]&lt;/trk&gt; #[TAIL]&lt;/gpx&gt; </pre> <p>This example assumes that the <code>GPSLatitude</code>, <code>GPSLongitude</code>, <code>GPSAltitude</code> and <code>GPSDateTime</code> tags are all available in each processed <i>FILE</i>. Warnings will be generated for missing tags. The output GPX format will invalid if any <code>GPSLatitude</code> or <code>GPSLongitude</code> tags are missing, but will be OK for missing <code>GPSAltitude</code> or <code>GPSDateTime</code> tags.</p> <p>Note that the order of track points in the output GPX file will be the same as the order of processing the input files, which may not be chronological depending on how the files are named. The <code>-fileOrder</code> option may be used to force processing of files in a particular order. For example, the following command processes files in order of increasing <code>GPSDateTime</code>: </p> <pre>exiftool -fileOrder gpsdatetime -p gpx.fmt -d %Y-%m-%dT%H:%M:%SZ /Users/Phil/Pictures > out.gpx </pre> <p>Since no directory was specified for <code>gpx.fmt</code>, this file must exist in the current directory when the above command is executed. (If the <code>gpx.fmt</code> file can't be found then the <code>-p</code> argument is interpreted as a string instead of a file name, and the text "<code>gpx.fmt</code>" is sent to the output, which isn't what we want.)</p> <p>The <code>-if</code> option may be added to ensure that only files containing GPS information are processed. For example, the following command creates "<code>out.gpx</code>" in the current directory from all pictures containing <code>GPSDateTime</code> information in directory "<code>pics</code>" and its sub-directories:</p> <pre>exiftool -r -if '$gpsdatetime' -fileOrder gpsdatetime -p gpx.fmt -d %Y-%m-%dT%H:%M:%SZ pics > out.gpx </pre> <p>Note: In Windows, double quotes (<code>"</code>) must be used instead of single quotes (<code>'</code>) around the <code>-if</code> argument above.</p> <p>The "fmt_files" directory of the full exiftool distribution contains this sample format file ("gpx.fmt") as well as a sample which creates GPX waypoints with pictures ("gpx_wpt.fmt").</p> <a name="KML"></a> <h4>Creating a Google Earth KML file</h4> <p>Below is an example of a print format file which generates a Google Earth KML file from a collection of geotagged images:</p> <pre>#------------------------------------------------------------------------------ # File: kml.fmt # # Description: Example ExifTool print format file for generating a # Google Earth KML file from a collection of geotagged images # # Usage: exiftool -p kml.fmt FILE [...] > out.kml # # Requires: ExifTool version 8.10 or later # # Revisions: 2010/02/05 - P. Harvey created # 2013/02/05 - PH Fixed camera icon to work with new Google Earth # # Notes: 1) All input files must contain GPSLatitude and GPSLongitude. # 2) For Google Earth to be able to find the images, the input # images must be specified using relative paths, and "out.kml" # must stay in the same directory as where the command was run. # 3) Google Earth is picky about the case of the image file extension, # and may not be able to display the image if an upper-case # extension is used. # 4) The -fileOrder option may be used to control the order of the # generated placemarks. #------------------------------------------------------------------------------ #[HEAD]&lt;?xml version="1.0" encoding="UTF-8"?&gt; #[HEAD]&lt;kml xmlns="http://earth.google.com/kml/2.0"&gt; #[HEAD] &lt;Document&gt; #[HEAD] &lt;name&gt;My Photos&lt;/name&gt; #[HEAD] &lt;open&gt;1&lt;/open&gt; #[HEAD] &lt;Style id="Photo"&gt; #[HEAD] &lt;IconStyle&gt; #[HEAD] &lt;Icon&gt; #[HEAD] &lt;href&gt;http://maps.google.com/mapfiles/kml/pal4/icon38.png&lt;/href&gt; #[HEAD] &lt;scale&gt;1.0&lt;/scale&gt; #[HEAD] &lt;/Icon&gt; #[HEAD] &lt;/IconStyle&gt; #[HEAD] &lt;/Style&gt; #[HEAD] &lt;Folder&gt; #[HEAD] &lt;name&gt;Waypoints&lt;/name&gt; #[HEAD] &lt;open&gt;0&lt;/open&gt; #[BODY] &lt;Placemark&gt; #[BODY] &lt;description&gt;&lt;![CDATA[&lt;br/&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt; #[BODY] &lt;img src='$directory/$filename' #[BODY] width='$imagewidth' height='$imageheight'&gt; #[BODY] &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;]]&gt;&lt;/description&gt; #[BODY] &lt;Snippet/&gt; #[BODY] &lt;name&gt;$filename&lt;/name&gt; #[BODY] &lt;styleUrl&gt;#Photo&lt;/styleUrl&gt; #[BODY] &lt;Point&gt; #[BODY] &lt;altitudeMode&gt;clampedToGround&lt;/altitudeMode&gt; #[BODY] &lt;coordinates&gt;$gpslongitude#,$gpslatitude#,0&lt;/coordinates&gt; #[BODY] &lt;/Point&gt; #[BODY] &lt;/Placemark&gt; #[TAIL] &lt;/Folder&gt; #[TAIL] &lt;/Document&gt; #[TAIL]&lt;/kml&gt; </pre> <p>This example print format file is included in the "fmt_files" directory of the full ExifTool distribution.</p> <hr> <i>Created Apr. 2, 2009</i><br> <i>Last revised Mar. 5, 2015</i> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/history.html��������������������������������������������������������������000644 �000765 �000024 �00000046361 12650447061 017735� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>ExifTool Version History</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <link rel=alternate type='application/rss+xml' title='RSS Feed for ExifTool updates' href='http://owl.phy.queensu.ca/~phil/exiftool/rss.xml'> </head> <body> <h1 class='up'>ExifTool Version History</h1> <p>RSS feed: <a href="http://owl.phy.queensu.ca/~phil/exiftool/rss.xml">http://owl.phy.queensu.ca/~phil/exiftool/rss.xml</a></p> <p><b>Note:</b> The most recent production release is <a href="Image-ExifTool-10.10.tar.gz">Version 10.10</a>. (Other versions are considered development releases, and are not uploaded to <a href="http://search.cpan.org/dist/Image-ExifTool/">CPAN</a>.)</p> <!-- Use line width of 80 --> <!-- *********************************************************************** --> <a name='v10.10'><b>Jan. 22, 2016 - Version 10.10</b></a> <span class=grn>(production release)</span> <ul> <li>Added a new Olympus LensType (thanks Niels Kristian Bech Jensen) <li>Added a couple of new Olympus FlashModel values <li>Added a new Nikon LensID <li>Added a new Pentax LensType <li>Decode a number of new Sony tags (thanks Jos Roost) <li>Decode H264:DateTimeOriginal DST flag, and add " DST" to time string if set <li>Decode a few more CanonCustom settings <li>Fixed problem creating user-defined XMP structure elements with names containing characters which are illegal in tag names <li>Improved mechanism for generating tags which must be specifically requested when copying or used in -if or -p expressions <li>Improved warning in Windows if help documentation file can't be created <li>Patched Composite:FileNumber to handle case where Canon:FileNumber is 10000 <li>Patched reading FujiFilm RawImageWidth/Height for new X-Pro2 RAF images <li>Fixed problem reading PDF objects which begin with a comment line <li>Fixed problem which could result in ExifTool corrupting a PDF file when writing <li>API Changes: <ul> <li>Added RequestTags option <li>No longer generate MDItem tags when RequestAll option is set </ul> </ul> <a name='v10.09'><b>Jan. 4, 2016 - Version 10.09</b></a> <ul> <li>Added ability to extract OS X system metadata ("MDItem" tags) <li>Added a value conversion for GoogleTrackDuration <li>Enchanced the -i option to allow full path names to be specified <li>Fixed a potential runtime error when writing corrupted JPEG images <li>API Changes: <ul> <li>Added MDItemTags option </ul> </ul> <a name='v10.08'><b>Dec. 22, 2015 - Version 10.08</b></a> <ul> <li>Added ability to write empty XMP structures <li>Added write support for PhaseOne MakerNotes tags in IIQ files <li>Added a new Nikon LensID (thanks David P&uuml;schel) <li>Decode a new Olympus tag and improved decoding of DriveMode <li>Minor improvements to HtmlDump of PhaseOne IIQ and PDF files <li>Patched to allow overwriting of empty XMP written by some PhaseOne cameras <li>Fixed bug in HtmlDump feature that could cause a "substr outside of string" error <li>API Changes: <ul> <li>Changed QuickTimeUTC API option to also enforce proper time zero </ul> </ul> <a name='v10.07'><b>Nov. 26, 2015 - Version 10.07</b></a> <ul> <li>Fixed problem with warnings on some systems about unimplemented functions for FileGroupID and FileUserID when -p or -if were used </ul> <a name='v10.06'><b>Nov. 26, 2015 - Version 10.06</b></a> <ul> <li>Added a new <a href="TagNames/Canon.html#LensType">Canon LensType</a> (thanks LibRaw) <li>Added a new <a href="TagNames/Pentax.html#LensType">Pentax LensType</a> (thanks Louis Granboulan) <li>Added a couple of new <a href="TagNames/XMP.html#digiKam">XMP-digiKam tags</a> <li>Added a new <a href="TagNames/Canon.html#CanonModelID">CanonModelID</a> <li>Added a new <a href="TagNames/XMP.html#acdsee">ACDSee XMP tag</a> (thanks Malus) <li>Decode a new <a href="TagNames/Canon.html">Canon tag</a> <li>Improved a few lens names (thanks Jos Roost) <li>Patched to remove trailing null when reading improperly written QuickTime strings <li>Fixed bug where SystemTags weren't available for use with the -p and -if options </ul> <a name='v10.05'><b>Nov. 6, 2015 - Version 10.05</b></a> <ul> <li>Added new <a href="TagNames/Canon.html#LensType">Canon</a> and <a href="TagNames/Sony.html#LensType">Sony LensType</a> values <li>Added some new <a href="TagNames/Nikon.html#LensID">Nikon LensID</a>'s (thanks Robert Rottmerhusen) <li>Added a new <a href="TagNames/Pentax.html#PentaxModelID">PentaxModelID</a> <li>Added preliminary support for <a href="TagNames/Motorola.html">Motorola maker notes</a> <li>Changed format of <a href="TagNames/XMP.html#photoshop">XMP-photoshop</a>:DocumentAncestors to write a simple Bag of strings rather than structures (since this is what the Adobe software writes, contrary to their own XMP specification) <li>Fixed problem where HASH references may be exposed when copying a list of structures to a non-list-type tag <li>API Changes: <ul> <li>Added <a href="ExifTool.html#Filter">Filter option</a> <li>Changed GetNewValues method name to <a href="ExifTool.html#GetNewValue">GetNewValue</a> (GetNewValues still works for backward compatibility) </ul> </ul> <a name='v10.04'><b>Oct. 28, 2015 - Version 10.04</b></a> <ul> <li>Added a few new <a href="TagNames/Microsoft.html#XMP">Microsoft XMP</a> tags <li>Enhanced -r option to allow processing of directory names beginning with "." <li>Avoid writing <a href="TagNames/Microsoft.html#XMP">XMP-microsoft:LensModel</a> unless specified explicitly <li>Limit precision of area size in picasa_faces config file (thanks StarGeek) <li>Moved <a href="TagNames/Nikon.html#NCDT">Nikon NCDT GPS tags</a> into the GPS group so they work with the <a href="TagNames/Composite.html">Composite GPS tags</a> <li>Fixed problem reading <a href="TagNames/Ricoh.html#RMETA">Ricoh RMETA</a> information from some cameras </ul> <a name='v10.03'><b>Oct. 21, 2015 - Version 10.03</b></a> <ul> <li>Added support for JPEG 2000 extended-length boxes <li>Added a few new <a href="TagNames/Canon.html#LensType">Canon LensType</a> and <a href="TagNames/Canon.html#CanonModelID">CanonModelID</a> values <li>Added a new <a href="TagNames/Nikon.html#LensID">Nikon LensID</a> (thanks LibRaw) <li>Added ExifTool version number as a comment in -listx output <li>Added support for Leica SL (Typ 601) maker notes <li>Added a new <a href="TagNames/Sony.html#LensType">Sony LensType</a> (thanks Jos Roost) <li>Decode more <a href="TagNames/Sony.html">Sony tags</a> for some new models (thanks Jos Roost) <li>Decode a new <a href="TagNames/Pentax.html">Pentax tag</a> <li>Patched for invalid makernote entry written by Sony ILCE-7M2 v1.21 <li>Patched problem reading <a href="TagNames/EXE.html#PEString">EXE resources</a> with a missing null terminator <li>Updated Windows distribution package to use latest version of PAR </ul> <a name='v10.02'><b>Sept. 17, 2015 - Version 10.02</b></a> <ul> <li>Added ability to read PNG chunks after the normal PNG end of file (IEND) <li>Added ability to delete a PNG trailer (with -trailer:all=) <li>Added some new <a href="TagNames/Nikon.html#LensID">Nikon LensID</a>'s (thanks Robert Rottmerhusen and LibRaw) <li>Added a few new <a href="TagNames/Canon.html#LensType">Canon LensType</a>'s (thanks Jos Roost and LibRaw) <li>Added a new <a href="TagNames/Pentax.html#LensType">Pentax LensType</a> (thanks Niels Kristian Bech Jensen) <li>Decode some new <a href="TagNames/PanasonicRaw.html">PanasonicRaw tags</a> (thanks Andrew) <li>Decode a new <a href="TagNames/Pentax.html#LensType">Pentax tag</a> <li>Enhanced -m option to allow IPTC values which are too short to be written </ul> <a name='v10.01'><b>Sept. 3, 2015 - Version 10.01</b></a> <ul> <li>Added a new <a href="TagNames/Olympus.html#CameraType">Olympus CameraType</a> <li>Added a new <a href="TagNames/Canon.html#LensType">Canon LensType</a> (thanks Norbert Wasser) <li>Added a few new <a href="TagNames/QuickTime.html#GenreID">QuickTime GenreID</a> values (thanks Fran&ccedil;ois Bonzon) <li>Decode a new <a href="TagNames/Pentax.html#LensType">Pentax tag</a> <li>Leica programmers should all be ashamed of the <a href="http://owl.phy.queensu.ca/~phil/exiftool/idiosyncracies.html#Leica">complete shambles of metadata</a> they have created <li>Minor change to the name of a Sigma lens for Canon <li>Improved recognition of Pentax lens adapter <li>Implemented <a href="ExifTool.html#NoPDFList">NoPDFList</a> for -b option of Windows version too <li>Renamed a few <a href="TagNames/Sony.html">Sony tags</a> and improved decoding of others (thanks Jos Roost) <li>Renamed a few <a href="TagNames/Pentax.html">Pentax tags</a> <li>Fixed problem importing structured information from -X option output <li>Fixed round-off errors in value and typo in name of CanonVRD:GammaWhitePoint <li>Fixed test failures if Encode, POSIX or Time::Local modules are missing </ul> <a name='v10.00'><b>Aug. 18, 2015 - Version 10.00</b></a> <span class=grn>(production release)</span> <ul> <li>Added a few new <a href="TagNames/Canon.html#CanonModelID">CanonModelID</a>'s <li>Added a few new <a href="TagNames/Nikon.html#LensID">Nikon LensID</a>'s (thanks Jaap Voets and Robert Rottmerhusen) <li>Added a new <a href="TagNames/Canon.html#LensType">Canon LensType</a> (thanks Jos Roost) <li>Decode a number of new <a href="TagNames/Sony.html">Sony tags</a> (thanks Jos Roost) <li>Decode a couple more <a href="TagNames/RIFF.html">RIFF tags</a> and extract Unknown <a href="TagNames/RIFF.html">RIFF tags</a> <li>Changed -b option to avoid splitting PDF List-type tag values <li>API Changes: <ul> <li>Added <a href="ExifTool.html#NoPDFList">NoPDFList option</a> </ul> </ul> <a name='v9.99'><b>July 23, 2015 - Version 9.99</b></a> <ul> <li>Added support for the Leica Q (Typ 116) maker notes <li>Added two new <a href="TagNames/Sony.html#SonyModelID">SonyModelID</a>'s (thanks Jos Roost for one) <li>Added two new <a href="TagNames/Sony.html#LensType2">Sony LensType2</a> values (thanks Jos Roost) <li>Added a new <a href="TagNames/Pentax.html#LensType">Pentax LensType</a> <li>Extract a number of new <a href="TagNames/Extra.html">File System tags</a> when SystemTags API option is set <li>Decode a new FujiFilm tag (thanks TonyB) <li>Decode a number of new <a href="TagNames/Sony.html">Sony tags</a> (thanks Jos Roost) <li>Disabled writing of XMP to PostScript-format Adobe Illustrator files <li>SourceFile values in -csv and -json input/output are now converted to/from filename character set (set by -charset filename option) when reading/writing <li>Renamed <a href="TagNames/Flash.html">Flash</a>:FileAttributes to FlashAttributes <li>Renamed <a href="TagNames/Flash.html">FujiFilm</a>:AFPointSet to AFMode and improved decoding <li>Fixed problem where a partial command could be executed if the -stay_open option was used and the command is aborted due to an error in arguments <li>Fixed problem with OS X installer on El Capitan (now installs in /usr/local/bin instead of /usr/bin) <li>API Changes: <ul> <li>Added <a href="ExifTool.html#SystemTags">SystemTags option</a> </ul> </ul> <a name='v9.98'><b>June 26, 2015 - Version 9.98</b></a> <ul> <li>Added read support for DSS and DS2 file formats <li>Added write support for <a href="TagNames/MWG.html#RegionStruct">XMP-mwg-rs</a>:Rotation (seen in XMP from LR6) <li>Added a new <a href="TagNames/Sigma.html#LensType">Sigma LensType</a> (thanks Niels Kristian Bech Jensen) <li>Decode Pentax DiffractionCorrection <li>Decode Olympus ID3 XOLY frame <li>Decode a few more <a href="TagNames/Sony.html">Sony tags</a> <li>Improved reliability of decoding <a href="TagNames/Nikon.html#ShotInfoD810">Nikon D810 ShotInfo</a> and <a href="TagNames/NikonCustom.html#SettingsD810">custom settings</a> <li>Changed name of Pentax VignettingCorrection to PeripheralIlluminationCorr <li>Fixed problem with user parameters in tag name expressions when copying </ul> <a name='v9.97'><b>June 2, 2015 - Version 9.97</b></a> <ul> <li>Added a new Pentax Quality value <li>Added a new Panasonic AdvancedSceneMode (thanks Horst Wandres) <li>Minor improvement to lens identification logic based on XMP information <li>Changed a few DR4 tag names <li>Fixed improper scoping of XMP namespace prefixes (so conflicting prefixes are now properly resolved) </ul> <a name='v9.96'><b>May 20, 2015 - Version 9.96</b></a> <ul> <li>Added support for <a href="TagNames/CanonVRD.html#Edit4">CanonVRD version 4</a> information and DR4 files <li>Added two new <a href="TagNames/Canon.html#LensType">Canon LensType</a> values (thanks Norbert Wasser) <li>Added two new <a href="TagNames/Olympus.html#LensType">Olympus LensType</a> values (thanks Niels Kristian Bech Jensen) <li>Added a new Minolta/<a href="TagNames/Sony.html#LensType">Sony LensType</a> and fixed another one (thanks Jos Roost) <li>Added a new <a href="TagNames/Nikon.html#LensID">Nikon LensID</a> (thanks John Helour) <li>Added a few new <a href="TagNames/QuickTime.html">QuickTime tags</a> <li>Added a new <a href="TagNames/Pentax.html#PentaxModelID">PentaxModelID</a> and a new Pentax PictureMode <li>Added a few new <a href="TagNames/XMP.html#aux">XMP-aux tags</a> <li>Decode a couple more <a href="TagNames/DPX.html">DPX tags</a> <li>Decode <a href="TagNames/NikonCustom.html">NikonCustom tags</a> for D810 firmware version 1.02 <li>Improved -htmlDump output for extended XMP and some other JPEG segments <li>Improved a <a href="TagNames/Canon.html#LensType">Canon lens</a> name <li>Documented the -userParam command-line option (which has existed since 9.90) <li>Changed default behaviour to ignore extended XMP with an incorrect GUID (as per the XMP specification) <li>Changed the case of a few tag names for consistency <li>Patched problem with Sony cameras giving incorrect LensInfo for some third party lenses, leading to an incorrect LensID by ExifTool (thanks Jos Roost) <li>Patched problem where GPS minutes or seconds could round up to 60 <li>Fixed picasa_faces.config to rotate regions if necessary for RAW file types (thanks Stargeek) <li>API Changes: <ul> <li>Added <a href="ExifTool.html#ExtendedXMP">ExtendedXMP option</a> </ul> </ul> <a name='v9.95'><b>May 9, 2015 - Version 9.95</b></a> <ul> <li>Added a few new <a href="TagNames/Minolta.html#LensType">Minolta</a>/<a href="TagNames/Sony.html#LensType">Sony lenses</a> (thanks Jos Roost) <li>Added config_files/photoshop_paths.config to the full distribution <li>Avoid rebuilding maker notes when using -tagsFromFile with -fast2 option <li>Validate tag names when redirecting (ie. "-DSTTAG&lt;SRCTAG") </ul> <a name='v9.94'><b>May 3, 2015 - Version 9.94</b></a> <ul> <li>Added Geotag support for Bramor gEO log files <li>Added support for iCalendar ICS files <li>Added support for Leica M Monochrom (Type 246) maker notes <li>Added new "Preview" group for all embedded preview images <li>Added a new <a href="TagNames/Pentax.html#PentaxModelID">PentaxModelID</a> (thanks Louis Granboulan) <li>Added a new <a href="TagNames/Canon.html#LensType">Canon LensType</a> (thanks Niels Kristian Bech Jensen) <li>Added tag name to "Invalid EXIF text encoding" warning <li>Decode ColorData for Canon EOS 5DS and EOS 5DS R (thanks LibRaw) <li>Changed ListItem option so that it also applies when copying tags <li>Enhanced FileTypeExtension to return an uppercase extension when the print conversion is disabled (eg. the -n option) <li>Fixed incorrect FileTypeExtension for virtual device drivers <li>Fixed an improperly formatted warning for duplicate PDF entries <li>Fixed bug creating extended XMP in JPEG images when deleting all XMP and adding back in the same step </ul> <a name='v9.93'><b>Apr. 25, 2015 - Version 9.93</b></a> <ul> <li>Added FileTypeExtension tag <li>Added a few new <a href="TagNames/Canon.html#CanonModelID">CanonModelID</a> values <li>Added a new Olympus CameraType <li>Added a few new <a href="TagNames/Minolta.html#LensType">Minolta</a>/<a href="TagNames/Sony.html#LensType">Sony lenses</a> (thanks Jos Roost) <li>Updated arg_files/iptcCore.args for IPTC Extension version 1.2 tags <li>Improved VCard parsing/decoding <li>Improved -fast3 file identification logic <li>Remove "px" string from SVG ImageWidth/Height tags <li>Changed DOF calculation to use ApproximateFocusDistance <li>Fixed missing FileType for MOI files <li>Fixed potential "Internal Error" bug when writing XMP structures </ul> <a name='v9.92'><b>Apr. 11, 2015 - Version 9.92</b></a> <ul> <li>Added support for <a href="TagNames/XMP.html#pmi">PRISM pmi</a> and <a href="TagNames/XMP.html#prm">prm tags</a>, and updated to PRISM 3.0 <li>Added read support for Audible .AA files <li>Added support for Adobe <a href="TagNames/XMP.html#creatorAtom">XMP-creatorAtom tags</a> <li>Added a couple of new <a href="TagNames/XMP.html#xmpDM">XMP-xmpDM tags</a> <li>Added a new <a href="TagNames/Canon.html#CanonModelID">CanonModelID</a> and a new Ricoh WhiteBalance (thanks LibRaw) <li>Added a new <a href="TagNames/Olympus.html#CameraType">Olympus CameraType</a> <li>Added a new <a href="TagNames/Nikon.html#LensID">Nikon LensID</a> (thanks J&uuml;rgen Sahlberg) <li>Updated to XMP PLUS 1.2.1 specification <li>Enhanced DOF calculation to use AverageFocusDistance or FocusDistanceUpper/Lower if available <li>Patched to tolerate different version numbers in XMP namespace URI's </ul> <a name='v9.91'><b>Apr. 7, 2015 - Version 9.91</b></a> <ul> <li>Added read support for VCard files <li>Added support for AAX files <li>Added --sort option <li>Added a number of new QuickTime GenreID values (thanks Fran&ccedil;ois Bonzon) <li>Added new Canon, Nikon, Olympus and Samsung lenses (thanks LibRaw and Niels Kristian Bech Jensen) <li>Added a new <a href="TagNames/Olympus.html#CameraType">Olympus CameraType</a> <li>Added a new Sony FlashMode value <li>Decode a new Apple makernote tag <li>Decode a number of new <a href="TagNames/QuickTime.html">QuickTime tags</a> found in Audible audio books <li>Improved the naming of a FujiFilm tag (thanks LibRaw) <li>Removed "not yet tested" warning when writing FujiFilm RAF version 0200 <li>Renamed distribution file config_files/ExifTool_config to example.config <li>Increased maximum metadata atom size for QuickTime files and added warning if an atom is larger than the limit <li>Changed writing of filesystem date/time tags to override the -P option <li>Fixed problem writing FileCreateDate in Windows when the -o option was used </ul> <a name='v9.90'><b>Mar. 14, 2015 - Version 9.90</b></a> <span class=grn>(production release)</span> <ul> <li>Added config_files/picasa_faces.config to the distribution (thanks StarGeek) <li>Added a few new <a href="TagNames/Minolta.html#LensType">Minolta</a>/<a href="TagNames/Sony.html#LensType">Sony</a> and Nikon lenses (thanks LibRaw) <li>Added new Canon and Sigma lenses (thanks Niels Kristian Bech Jensen) <li>Decode Nikon D810 custom settings (thanks Warren Hatch) <li>Decode a few new <a href="TagNames/Nikon.html">Nikon tags</a> <li>Fixed superfluous "Open '' failed" warning which could occur in Windows <li>Fixed problem reading multi-valued <a href="TagNames/Microsoft.html#Xtra">Microsoft Xtra tags</a> <li>Fixed problem on Windows using -overwrite_original_in_place with Unicode file names </ul> <a name='ancient' href="ancient_history.html"><b>History of older versions</b> (back to 1.00) --></a><br><br> <hr> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/htmldump.html�������������������������������������������������������������000644 �000765 �000024 �00000110404 12524123173 020047� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/1998/REC-html40-19980424/loose.dtd"> <html> <head> <title> HTML Dump (t/images/FujiFilm.jpg)</title> <style type="text/css"> <!-- /* character style ID's */ .D { color: #000000 } /* default color */ .V { color: #ff0000 } /* duplicate block 1 */ .W { color: #004400 } /* normal block 1 */ .X { color: #ff4488 } /* duplicate block 2 */ .Y { color: #448844 } /* normal block 2 */ .U { color: #cc8844 } /* unused data block */ .H { color: #0000ff } /* highlighted tag name */ .F { color: #aa00dd } /* actual offset differs */ .M { text-decoration: underline } /* maker notes data */ .tt { /* tooltip text */ visibility: hidden; position: absolute; white-space: nowrap; top: 0; left: 0; font-family: Verdana, sans-serif; font-size: .7em; padding: 2px 4px; border: 1px solid gray; z-index: 3; } .tb { /* tooltip background */ visibility: hidden; position: absolute; background: #ffffdd; zoom: 1; -moz-opacity: 0.8; -khtml-opacity: 0.8; -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)'; filter: alpha(opacity=80); opacity: 0.8; z-index: 2; } /* table styles */ table.dump { border-top: 1px solid gray; border-bottom: 1px solid gray; } table.dump td { padding: .2em .3em } td.c2 { border-left: 1px solid gray; border-right: 1px solid gray; } pre { margin: 0 } table { font-size: .9em } body { color: black; background: white } --> </style> <script language="JavaScript" type="text/JavaScript"> <!-- Begin // tooltip positioning constants var TMAR = 4; // top/left margins var BMAR = 16; // bottom/right margins (scrollbars may overhang inner dimensions) var XOFF = 10; // x offset from cursor var YOFF = 40; // y offset var YMIN = 10; // minimum y offset var YTOP = 20; // y offset when above cursor // common variables var safari1 = navigator.userAgent.indexOf("Safari/312.6") >= 0; var ie6 = navigator.userAgent.toLowerCase().indexOf('msie 6') >= 0; var mspan = new Array; var hlist, tt, tb; function GetElementsByClass(classname, tagname) { var found = new Array(); var list = document.getElementsByTagName(tagname); var len = list.length; for (var i=0, j=0; i<len; ++i) { var classes = list[i].className.split(' '); for (var k=0; k<classes.length; ++k) { if (classes[k] == classname) { found[j++] = list[i]; break; } } } delete list; return found; } // move tooltip function move(e) { if (!tt) return; if (ie6 && (tt.style.top == '' || tt.style.top == 0) && (tt.style.left == '' || tt.style.left == 0)) { tt.style.width = tt.offsetWidth + 'px'; tt.style.height = tt.offsetHeight + 'px'; } var w, h; // browser inconsistencies make getting window size more complex than it should be, // and even then we don't know if it is smaller due to scrollbar width if (typeof(window.innerWidth) == 'number') { w = window.innerWidth; h = window.innerHeight; } else if (document.documentElement && document.documentElement.clientWidth) { w = document.documentElement.clientWidth; h = document.documentElement.clientHeight; } else { w = document.body.clientWidth; h = document.body.clientHeight; } var x = e.clientX + XOFF; var y = e.clientY + YOFF; if (safari1) { // patch for people still using OS X 10.3.9 x -= document.body.scrollLeft + document.documentElement.scrollLeft; y -= document.body.scrollTop + document.documentElement.scrollTop; } var mx = w - BMAR - tt.offsetWidth; var my = h - BMAR - tt.offsetHeight; if (y > my + YOFF - YMIN) y = e.clientY - YTOP - tt.offsetHeight; if (x > mx) x = mx; if (y > my) y = my; if (x < TMAR) x = TMAR; if (y < TMAR) y = TMAR; x += document.body.scrollLeft + document.documentElement.scrollLeft; y += document.body.scrollTop + document.documentElement.scrollTop; tb.style.width = tt.offsetWidth + 'px'; tb.style.height = tt.offsetHeight + 'px'; tt.style.top = tb.style.top = y + 'px'; tt.style.left = tb.style.left = x + 'px'; tt.style.visibility = tb.style.visibility = 'visible'; } // highlight/unhighlight text function high(e,on) { var targ; if (e.target) targ = e.target; else if (e.srcElement) targ = e.srcElement; if (targ.nodeType == 3) targ = targ.parentNode; // defeat Safari bug if (!targ.name) targ = targ.parentNode; // go up another level if necessary if (targ.name && document.getElementsByName) { // un-highlight current objects if (hlist) { for (var i=0; i<hlist.length; ++i) { hlist[i].style.background = 'transparent'; } hlist = null; } if (tt) { // hide old tooltip tt.style.visibility = tb.style.visibility = 'hidden'; tt = null; } if (on) { if (targ.name.substring(0,1) == 't') { // show our tooltip (ID is different than name to avoid confusing IE) tt = document.getElementById('p' + targ.name.substring(1)); if (tt) { tb = document.getElementById('tb'); move(e); } } // highlight anchor elements with the same name hlist = document.getElementsByName(targ.name); // use class name to highlight span elements if necessary for (var i=0; i<mspan.length; ++i) { if (mspan[i] != targ.name) continue; var slist = GetElementsByClass(targ.name, 'span'); // add elements from hlist collection to our array for (var j=0; j<hlist.length; ++j) { slist[slist.length] = hlist[j]; } hlist = slist; break; } for (var j=0; j<hlist.length; ++j) { hlist[j].style.background = '#ffcc99'; } } } } mspan[0] = "t37"; // End ---> </script></head> <body><h2>ExifTool HtmlDump Option</h2> <p>Below is an example of the ExifTool HtmlDump output (the exiftool "<b>-htmlDump</b>" option). Move your cursor over the data to highlight individual blocks and reveal tool tips for extra information. (You must have JavaScript enabled.)</p> <p>The command used to generate the output below was:</p> <blockquote><code>exiftool -htmldump t/images/FujiFilm.jpg > out.html</code></blockquote> <p>In this output, <span onmouseover="high(event,1)" onmouseout="high(event,0)">normal data blocks are <a name=XA class=Y>light</a> or <a name=XA class=W>dark green</a>, unused blocks are <a name=XB class=U>brown</a>, and double-referenced blocks are <a name=XC class=V>red</a> or <a name=XC class=X>pink</a>. A <a name=XD class=H>blue</a> tag name indicates the value is referenced by an offset in the IFD (ie. the value is longer than 4 bytes), <a name=XD class=F>purple</a> indicates that the actual offset differs from the recorded offset, and a <a name=XD class=V>red</a> name indicates an invalid offset. Odd offsets are flagged with "<span class=V>(odd)</span>" and out-of-sequence tag ID's are indicated by "<span class=V>(seq)</span>" because the TIFF specification states that values must begin on a (2-byte) word boundary and that IFD entries must be in order of increasing tag ID. All data in the maker notes value block is <a name=XE class='W M'>underlined</a>.</span></p> <p>Currently, only TIFF/EXIF and JPEG meta information is dumped. The leftmost column of the output gives the offset in hex relative to the start of the TIFF header (by default). For a TIFF image this is at the start of the file, but for a JPEG image it is 10 bytes after the start of the APP1 EXIF segment. However, this base offset can be specified on the command line with "-htmlDump#" (eg. "-htmlDump0" for absolute offsets), or via the API with the "HtmlDumpBase" option.</p> <noscript><b class=V>--&gt; Enable JavaScript for active highlighting and information tool tips! </b></noscript> <table class=dump cellspacing=0 cellpadding=2> <tr><td valign='top'><pre>-000c 0000 000a 0016 0022 002e 003a 0046 0052 005e 006a 0076 0082 008e 0090 00a0 00b0 00c0 00d0 00e0 00f0 0100 0106 0112 011e 012a 0136 0142 014e 015a 0166 0172 017e 018a 0196 01a2 01ae 01ba 01c6 01d2 01de 01ea 01f6 0202 020e 021a 0226 0232 023e 024a 0256 0260 0270 0280 0290 02a0 02b0 02c0 02d0 02dc 02e8 02f4 0300 030c 0318 0324 0330 033c 0348 0354 0360 036c 0378 0384 0390 03a0 03aa 03b6 03c2 03c8 03d4 03e0 03ec 03f8 0404 0410 041c 0428 0430 0440 0450 0460 0470 0480 0490 04a0 04b0 04c0 04d0 04e0 04f0 0500 0510 0520 0530 0540 0550 </pre></td><td valign="top"><pre onmouseover="high(event,1)" onmouseout="high(event,0)" onmousemove="move(event)"> <a name=t0 class=W>ff d8</a> <a name=t1 class=Y>ff e1 04 60</a> <a name=t2 class=W>45 78 69 66 00 00</a> <a name=t3 class=Y>49 49 2a 00 08 00 00 00</a> <a name=t4 class=W>0b 00</a> <a name=t5 class=Y>0f 01 02 00 09 00 00 00 92 00 00 00</a> <a name=t6 class=W>10 01 02 00 10 00 00 00 9c 00 00 00</a> <a name=t7 class=Y>12 01 03 00 01 00 00 00 01 00 00 00</a> <a name=t8 class=W>1a 01 05 00 01 00 00 00 ac 00 00 00</a> <a name=t9 class=Y>1b 01 05 00 01 00 00 00 b4 00 00 00</a> <a name=t10 class=W>28 01 03 00 01 00 00 00 02 00 00 00</a> <a name=t11 class=Y>31 01 02 00 27 00 00 00 bc 00 00 00</a> <a name=t12 class=W>32 01 02 00 14 00 00 00 e4 00 00 00</a> <a name=t13 class=Y>13 02 03 00 01 00 00 00 02 00 00 00</a> <a name=t14 class=W>98 82 02 00 0b 00 00 00 f8 00 00 00</a> <a name=t15 class=Y>69 87 04 00 01 00 00 00 04 01 00 00</a> <a name=t16 class=W>c6 03 00 00</a> <a name=t5 class=Y>46 55 4a 49 46 49 4c 4d 00</a> <a name=t17 class=U>00</a> <a name=t6 class=W>46 69 6e 65 50 69 78 32 34 30 30 5a 6f 6f 6d 00</a> <a name=t8 class=Y>48 00 00 00 01 00 00 00</a> <a name=t9 class=W>48 00 00 00 01 00 00 00</a> <a name=t11 class=Y>44 69 67 69 74 61 6c 20 43 61 6d 65 72 61 20 46 69 6e 65 50 69 78 32 34 30 30 5a 6f 6f 6d 20 56 65 72 31 2e 37 30 00</a> <a name=t18 class=U>00</a> <a name=t12 class=W>32 30 30 31 3a 30 35 3a 31 39 20 31 38 3a 33 36 3a 34 31 00</a> <a name=t14 class=Y>20 20 20 20 20 20 20 20 20 20 00</a> <a name=t19 class=U>00</a> <a name=t20 class=W>1c 00</a> <a name=t21 class=Y>9d 82 05 00 01 00 00 00 5a 02 00 00</a> <a name=t22 class=W>22 88 03 00 01 00 00 00 02 00 00 00</a> <a name=t23 class=Y>27 88 03 00 01 00 00 00 64 00 00 00</a> <a name=t24 class=W>00 90 07 00 04 00 00 00 30 32 31 30</a> <a name=t25 class=Y>03 90 02 00 14 00 00 00 62 02 00 00</a> <a name=t26 class=W>04 90 02 00 14 00 00 00 76 02 00 00</a> <a name=t27 class=Y>01 91 07 00 04 00 00 00 01 02 03 00</a> <a name=t28 class=W>02 91 05 00 01 00 00 00 8a 02 00 00</a> <a name=t29 class=Y>01 92 0a 00 01 00 00 00 92 02 00 00</a> <a name=t30 class=W>02 92 05 00 01 00 00 00 9a 02 00 00</a> <a name=t31 class=Y>03 92 0a 00 01 00 00 00 a2 02 00 00</a> <a name=t32 class=W>04 92 0a 00 01 00 00 00 aa 02 00 00</a> <a name=t33 class=Y>05 92 05 00 01 00 00 00 b2 02 00 00</a> <a name=t34 class=W>07 92 03 00 01 00 00 00 05 00 00 00</a> <a name=t35 class=Y>09 92 03 00 01 00 00 00 01 00 00 00</a> <a name=t36 class=W>0a 92 05 00 01 00 00 00 ba 02 00 00</a> <a name=t37 class=Y>7c 92 07 00 d6 00 00 00 c2 02 00 00</a> <a name=t38 class=W>00 a0 07 00 04 00 00 00 30 31 30 30</a> <a name=t39 class=Y>01 a0 03 00 01 00 00 00 01 00 00 00</a> <a name=t40 class=W>02 a0 04 00 01 00 00 00 40 06 00 00</a> <a name=t41 class=Y>03 a0 04 00 01 00 00 00 b0 04 00 00</a> <a name=t42 class=W>05 a0 04 00 01 00 00 00 a8 03 00 00</a> <a name=t43 class=Y>0e a2 05 00 01 00 00 00 98 03 00 00</a> <a name=t44 class=W>0f a2 05 00 01 00 00 00 a0 03 00 00</a> <a name=t45 class=Y>10 a2 03 00 01 00 00 00 03 00 00 00</a> <a name=t46 class=W>17 a2 03 00 01 00 00 00 02 00 00 00</a> <a name=t47 class=Y>00 a3 07 00 01 00 00 00 03 00 00 00</a> <a name=t48 class=W>01 a3 07 00 01 00 00 00 01 00 00 00</a> <a name=t49 class=Y>00 00 00 00</a> <a name=t21 class=W>5e 01 00 00 64 00 00 00</a> <a name=t25 class=Y>32 30 30 31 3a 30 35 3a 31 39 20 31 38 3a 33 36 3a 34 31 00</a> <a name=t26 class=W>32 30 30 31 3a 30 35 3a 31 39 20 31 38 3a 33 36 3a 34 31 00</a> <a name=t28 class=Y>10 00 00 00 0a 00 00 00</a> <a name=t29 class=W>58 02 00 00 64 00 00 00</a> <a name=t30 class=Y>68 01 00 00 64 00 00 00</a> <a name=t31 class=W>c8 00 00 00 64 00 00 00</a> <a name=t32 class=Y>00 00 00 00 64 00 00 00</a> <a name=t33 class=W>68 01 00 00 64 00 00 00</a> <a name=t36 class=Y>58 02 00 00 64 00 00 00</a> <span class='t37 M'><a name=t50 class=W>46 55 4a 49 46 49 4c 4d 0c 00 00 00</a> <a name=t51 class=Y>0f 00</a> <a name=t52 class=W>00 00 07 00 04 00 00 00 30 31 33 30</a> <a name=t53 class=Y>00 10 02 00 08 00 00 00 c6 00 00 00</a> <a name=t54 class=W>01 10 03 00 01 00 00 00 03 00 00 00</a> <a name=t55 class=Y>02 10 03 00 01 00 00 00 00 00 00 00</a> <a name=t56 class=W>10 10 03 00 01 00 00 00 03 00 00 00</a> <a name=t57 class=Y>11 10 0a 00 01 00 00 00 ce 00 00 00</a> <a name=t58 class=W>20 10 03 00 01 00 00 00 00 00 00 00</a> <a name=t59 class=Y>21 10 03 00 01 00 00 00 00 00 00 00</a> <a name=t60 class=W>30 10 03 00 01 00 00 00 00 00 00 00</a> <a name=t61 class=Y>31 10 03 00 01 00 00 00 00 00 00 00</a> <a name=t62 class=W>00 11 03 00 01 00 00 00 00 00 00 00</a> <a name=t63 class=Y>00 12 03 00 01 00 00 00 00 00 00 00</a> <a name=t64 class=W>00 13 03 00 01 00 00 00 00 00 00 00</a> <a name=t65 class=Y>01 13 03 00 01 00 00 00 00 00 00 00</a> <a name=t66 class=W>02 13 03 00 01 00 00 00 00 00 00 00</a> </span> <span class='t37 M'><a name=t67 class=Y>00 00 00 00</a> <a name=t53 class=W>4e 4f 52 4d 41 4c 20 00</a> <a name=t57 class=Y>00 00 00 00 0a 00 00 00</a></span> <a name=t43 class=W>ed 0b 00 00 01 00 00 00</a> <a name=t44 class=Y>ed 0b 00 00 01 00 00 00</a> <a name=t68 class=W>02 00</a> <a name=t69 class=Y>01 00 02 00 04 00 00 00 52 39 38 00</a> <a name=t70 class=W>02 00 07 00 04 00 00 00 30 31 30 30</a> <a name=t71 class=Y>00 00 00 00</a> <a name=t72 class=W>08 00</a> <a name=t73 class=Y>03 01 03 00 01 00 00 00 06 00 00 00</a> <a name=t74 class=W>12 01 03 00 01 00 00 00 01 00 00 00</a> <a name=t75 class=Y>1a 01 05 00 01 00 00 00 2c 04 00 00</a> <a name=t76 class=W>1b 01 05 00 01 00 00 00 34 04 00 00</a> <a name=t77 class=Y>28 01 03 00 01 00 00 00 02 00 00 00</a> <a name=t78 class=W>01 02 04 00 01 00 00 00 3c 04 00 00</a> <a name=t79 class=Y>02 02 04 00 01 00 00 00 1c 00 00 00</a> <a name=t80 class=W>13 02 03 00 01 00 00 00 02 00 00 00</a> <a name=t81 class=Y>00 00 00 00</a> <a name=t75 class=W>48 00 00 00 01 00 00 00</a> <a name=t76 class=Y>48 00 00 00 01 00 00 00</a> <a name=t82 class=W>3c 44 75 6d 6d 79 20 74 68 75 6d 62 6e 61 69 6c 20 69 6d 61 67 65 20 64 61 74 61 3e</a> <a name=t83 class=U>ff db 00 84 00 14 10 10 19 12 19 27 17 17 27 32 26 1f 26 32 2e 26 26 26 26 2e 3e 35 35 35 35 35 3e 44 41 41 41 41 41 41 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 01 15 19 19 20 1c 20 26 18 18 26 36 26 20 26 36 44 36 2b 2b 36 44 44 44 42 35 42 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44</a> <a name=t84 class=U>ff c0 00 11 08 00 08 00 08 03 01 22 00 02 11 01 03 11 01</a> <a name=t85 class=U>ff c4 00 4b 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</a> <a name=t86 class=U>ff da 00 0c 03 01 00 02 11 03 11 00 3f 00 b3 00 1f</a> <a name=t87 class=Y>ff d9</a> </pre></td><td class=c2 valign="top"><pre onmouseover="high(event,1)" onmouseout="high(event,0)" onmousemove="move(event)"> <a name=t0 class=W>..</a><a name=t1 class=Y>...`</a><a name=t2 class=W>Exif..</a> <a name=t3 class=Y>II*.....</a><a name=t4 class=W>..</a> <a name=t5 class=Y>............</a> <a name=t6 class=W>............</a> <a name=t7 class=Y>............</a> <a name=t8 class=W>............</a> <a name=t9 class=Y>............</a> <a name=t10 class=W>(...........</a> <a name=t11 class=Y>1...'.......</a> <a name=t12 class=W>2...........</a> <a name=t13 class=Y>............</a> <a name=t14 class=W>............</a> <a name=t15 class=Y>i...........</a> <a name=t16 class=W>.. ..</a><a name=t5 class=Y>FUJIFILM.</a><a name=t17 class=U>.</a><a name=t6 class=W>Fine Pix2400Zoom.</a><a name=t8 class=Y>H... ....</a><a name=t9 class=W>H.......</a><a name=t11 class=Y>Digi tal Camera FineP ix2400Zoom Ver1. 70.</a><a name=t18 class=U>.</a><a name=t12 class=W>2001:05:19 1 8:36:41.</a><a name=t14 class=Y> .</a><a name=t19 class=U>.</a><a name=t20 class=W>..</a> <a name=t21 class=Y>........Z...</a> <a name=t22 class=W>"...........</a> <a name=t23 class=Y>'.......d...</a> <a name=t24 class=W>........0210</a> <a name=t25 class=Y>........b...</a> <a name=t26 class=W>........v...</a> <a name=t27 class=Y>............</a> <a name=t28 class=W>............</a> <a name=t29 class=Y>............</a> <a name=t30 class=W>............</a> <a name=t31 class=Y>............</a> <a name=t32 class=W>............</a> <a name=t33 class=Y>............</a> <a name=t34 class=W>............</a> <a name=t35 class=Y>............</a> <a name=t36 class=W>............</a> <a name=t37 class=Y>|...........</a> <a name=t38 class=W>........0100</a> <a name=t39 class=Y>............</a> <a name=t40 class=W>........@...</a> <a name=t41 class=Y>............</a> <a name=t42 class=W>............</a> <a name=t43 class=Y>............</a> <a name=t44 class=W>............</a> <a name=t45 class=Y>............</a> <a name=t46 class=W>............</a> <a name=t47 class=Y>............</a> <a name=t48 class=W>............</a> <a name=t49 class=Y>....</a><a name=t21 class=W>^...d. ..</a><a name=t25 class=Y>2001:05:19 18: 36:41.</a><a name=t26 class=W>2001:05:19 18:36:41.</a><a name=t28 class=Y>...... ..</a><a name=t29 class=W>X...d...</a><a name=t30 class=Y>h...d. ..</a><a name=t31 class=W>....d...</a><a name=t32 class=Y>....d. ..</a><a name=t33 class=W>h...d...</a><a name=t36 class=Y>X...d. ..</a><span class='t37 M'><a name=t50 class=W>FUJIFILM....</a><a name=t51 class=Y>..</a> <a name=t52 class=W>........0130</a> <a name=t53 class=Y>............</a> <a name=t54 class=W>............</a> <a name=t55 class=Y>............</a> <a name=t56 class=W>............</a> <a name=t57 class=Y>............</a> <a name=t58 class=W> ...........</a> <a name=t59 class=Y>!...........</a> <a name=t60 class=W>0...........</a> <a name=t61 class=Y>1...........</a> <a name=t62 class=W>............</a> <a name=t63 class=Y>............</a> <a name=t64 class=W>............</a> <a name=t65 class=Y>............</a> <a name=t66 class=W>............</a> </span> <span class='t37 M'><a name=t67 class=Y>....</a><a name=t53 class=W>NORMAL .</a> <a name=t57 class=Y>........</a></span><a name=t43 class=W>........</a> <a name=t44 class=Y>........</a><a name=t68 class=W>..</a> <a name=t69 class=Y>........R98.</a> <a name=t70 class=W>........0100</a> <a name=t71 class=Y>....</a><a name=t72 class=W>..</a> <a name=t73 class=Y>............</a> <a name=t74 class=W>............</a> <a name=t75 class=Y>........,...</a> <a name=t76 class=W>........4...</a> <a name=t77 class=Y>(...........</a> <a name=t78 class=W>........&lt;...</a> <a name=t79 class=Y>............</a> <a name=t80 class=W>............</a> <a name=t81 class=Y>....</a><a name=t75 class=W>H... ....</a><a name=t76 class=Y>H.......</a><a name=t82 class=W>&lt;Dum my thumbnail ima ge data&gt;</a><a name=t83 class=U>........ ...'..'2&amp;.&amp;2.&amp;&amp;&amp; &amp;.&gt;55555&gt;DAAAAAA DDDDDDDDDDDDDDDD DDDDDDDDDDDDD... . . &amp;..&amp;6&amp; &amp;6D6+ +6DDDB5BDDDDDDDD DDDDDDDDDDDDDDDD DDDDDDDDDDDDDD</a><a name=t84 class=U>.. ........."...... .</a><a name=t85 class=U>...K........... ................ ................ ................ ..............</a><a name=t86 class=U>.. ..........?....</a><a name=t87 class=Y>. .</a> </pre></td><td valign="top"><pre onmouseover="high(event,1)" onmouseout="high(event,0)" onmousemove="move(event)"><a name=t0 class=W>JPEG header</a> <a name=t1 class=Y>APP1 header</a> <a name=t2 class=W>Exif header</a> <a name=t3 class=Y>TIFF header</a> <a name=t4 class=W>IFD0 entries</a> <a name=t5 class=Y>IFD0-00 <span class=H>Make</span></a> <a name=t6 class=W>IFD0-01 <span class=H>Model</span></a> <a name=t7 class=Y>IFD0-02 Orientation</a> <a name=t8 class=W>IFD0-03 <span class=H>XResolution</span></a> <a name=t9 class=Y>IFD0-04 <span class=H>YResolution</span></a> <a name=t10 class=W>IFD0-05 ResolutionUnit</a> <a name=t11 class=Y>IFD0-06 <span class=H>Software</span></a> <a name=t12 class=W>IFD0-07 <span class=H>ModifyDate</span></a> <a name=t13 class=Y>IFD0-08 YCbCrPositioning</a> <a name=t14 class=W>IFD0-09 <span class=H>Copyright</span></a> <a name=t15 class=Y>IFD0-10 ExifOffset</a> <a name=t16 class=W>Next IFD</a> <a name=t5 class=Y>Make value</a> <a name=t17 class=U>[pad byte]</a> <a name=t6 class=W>Model value</a> <a name=t8 class=Y>XResolution value</a> <a name=t9 class=W>YResolution value</a> <a name=t11 class=Y>Software value</a> <a name=t18 class=U>[pad byte]</a> <a name=t12 class=W>ModifyDate value</a> <a name=t14 class=Y>Copyright value</a> <a name=t19 class=U>[pad byte]</a> <a name=t20 class=W>ExifIFD entries</a> <a name=t21 class=Y>ExifIFD-00 <span class=H>FNumber</span></a> <a name=t22 class=W>ExifIFD-01 ExposureProgram</a> <a name=t23 class=Y>ExifIFD-02 ISO</a> <a name=t24 class=W>ExifIFD-03 ExifVersion</a> <a name=t25 class=Y>ExifIFD-04 <span class=H>DateTimeOriginal</span></a> <a name=t26 class=W>ExifIFD-05 <span class=H>CreateDate</span></a> <a name=t27 class=Y>ExifIFD-06 ComponentsConfiguration</a> <a name=t28 class=W>ExifIFD-07 <span class=H>CompressedBitsPerPixel</span></a> <a name=t29 class=Y>ExifIFD-08 <span class=H>ShutterSpeedValue</span></a> <a name=t30 class=W>ExifIFD-09 <span class=H>ApertureValue</span></a> <a name=t31 class=Y>ExifIFD-10 <span class=H>BrightnessValue</span></a> <a name=t32 class=W>ExifIFD-11 <span class=H>ExposureCompensation</span></a> <a name=t33 class=Y>ExifIFD-12 <span class=H>MaxApertureValue</span></a> <a name=t34 class=W>ExifIFD-13 MeteringMode</a> <a name=t35 class=Y>ExifIFD-14 Flash</a> <a name=t36 class=W>ExifIFD-15 <span class=H>FocalLength</span></a> <a name=t37 class=Y>ExifIFD-16 <span class=H>MakerNotes</span></a> <a name=t38 class=W>ExifIFD-17 FlashpixVersion</a> <a name=t39 class=Y>ExifIFD-18 ColorSpace</a> <a name=t40 class=W>ExifIFD-19 ExifImageWidth</a> <a name=t41 class=Y>ExifIFD-20 ExifImageHeight</a> <a name=t42 class=W>ExifIFD-21 InteropOffset</a> <a name=t43 class=Y>ExifIFD-22 <span class=H>FocalPlaneXResolution</span></a> <a name=t44 class=W>ExifIFD-23 <span class=H>FocalPlaneYResolution</span></a> <a name=t45 class=Y>ExifIFD-24 FocalPlaneResolutionUnit</a> <a name=t46 class=W>ExifIFD-25 SensingMethod</a> <a name=t47 class=Y>ExifIFD-26 FileSource</a> <a name=t48 class=W>ExifIFD-27 SceneType</a> <a name=t49 class=Y>Next IFD</a> <a name=t21 class=W>FNumber value</a> <a name=t25 class=Y>DateTimeOriginal value</a> <a name=t26 class=W>CreateDate value</a> <a name=t28 class=Y>CompressedBitsPerPixel value</a> <a name=t29 class=W>ShutterSpeedValue value</a> <a name=t30 class=Y>ApertureValue value</a> <a name=t31 class=W>BrightnessValue value</a> <a name=t32 class=Y>ExposureCompensation value</a> <a name=t33 class=W>MaxApertureValue value</a> <a name=t36 class=Y>FocalLength value</a> <a name=t50 class=W>MakerNotes header</a> <a name=t51 class=Y>MakerNoteFujiFilm entries</a> <a name=t52 class=W>MakerNotes-00 Version</a> <a name=t53 class=Y>MakerNotes-01 <span class=F>Quality</span></a> <a name=t54 class=W>MakerNotes-02 Sharpness</a> <a name=t55 class=Y>MakerNotes-03 WhiteBalance</a> <a name=t56 class=W>MakerNotes-04 FujiFlashMode</a> <a name=t57 class=Y>MakerNotes-05 <span class=F>FlashExposureComp</span></a> <a name=t58 class=W>MakerNotes-06 Macro</a> <a name=t59 class=Y>MakerNotes-07 FocusMode</a> <a name=t60 class=W>MakerNotes-08 SlowSync</a> <a name=t61 class=Y>MakerNotes-09 PictureMode</a> <a name=t62 class=W>MakerNotes-10 AutoBracketing</a> <a name=t63 class=Y>MakerNotes-11 Tag 0x1200</a> <a name=t64 class=W>MakerNotes-12 BlurWarning</a> <a name=t65 class=Y>MakerNotes-13 FocusWarning</a> <a name=t66 class=W>MakerNotes-14 ExposureWarning</a> <a name=t67 class=Y>Next IFD</a> <a name=t53 class=W>Quality value</a> <a name=t57 class=Y>FlashExposureComp value</a> <a name=t43 class=W>FocalPlaneXResolution value</a> <a name=t44 class=Y>FocalPlaneYResolution value</a> <a name=t68 class=W>InteropIFD entries</a> <a name=t69 class=Y>InteropIFD-00 InteropIndex</a> <a name=t70 class=W>InteropIFD-01 InteropVersion</a> <a name=t71 class=Y>Next IFD</a> <a name=t72 class=W>IFD1 entries</a> <a name=t73 class=Y>IFD1-00 Compression</a> <a name=t74 class=W>IFD1-01 Orientation</a> <a name=t75 class=Y>IFD1-02 <span class=H>XResolution</span></a> <a name=t76 class=W>IFD1-03 <span class=H>YResolution</span></a> <a name=t77 class=Y>IFD1-04 ResolutionUnit</a> <a name=t78 class=W>IFD1-05 ThumbnailOffset</a> <a name=t79 class=Y>IFD1-06 ThumbnailLength</a> <a name=t80 class=W>IFD1-07 YCbCrPositioning</a> <a name=t81 class=Y>Next IFD</a> <a name=t75 class=W>XResolution value</a> <a name=t76 class=Y>YResolution value</a> <a name=t82 class=W>(IFD1:Thumbnail data)</a> <a name=t83 class=U>[JPEG DQT]</a> <a name=t84 class=U>[JPEG SOF0]</a> <a name=t85 class=U>[JPEG DHT]</a> <a name=t86 class=U>[JPEG Image Data]</a> <a name=t87 class=Y>JPEG EOI</a> </pre></td></tr></table> <div id=tb class=tb> </div> <div id=p0 class=tt><b>JPEG header</b><br>SOI Marker<br>(2 bytes)</div> <div id=p1 class=tt><b>APP1 header</b><br>Data size: 1118 bytes<br>(4 bytes)</div> <div id=p2 class=tt><b>Exif header</b><br>APP1 data type: Exif<br>(6 bytes)</div> <div id=p3 class=tt><b>TIFF header</b><br>Byte order: Little endian<br>Identifier: 0x002a<br>IFD0 offset: 0x0008<br>(8 bytes)</div> <div id=p4 class=tt><b>IFD0 entries</b><br>Entry count: 11<br>(2 bytes)</div> <div id=p5 class=tt><b>IFD0-00 <span class=H>Make</span></b><br>Tag ID: 0x010f<br>Format: string[9]<br>Size: 9 bytes<br>Value offset: 0x0092<br>Value: FUJIFILM</div> <div id=p6 class=tt><b>IFD0-01 <span class=H>Model</span></b><br>Tag ID: 0x0110<br>Format: string[16]<br>Size: 16 bytes<br>Value offset: 0x009c<br>Value: FinePix2400Zoom</div> <div id=p7 class=tt><b>IFD0-02 Orientation</b><br>Tag ID: 0x0112<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 1</div> <div id=p8 class=tt><b>IFD0-03 <span class=H>XResolution</span></b><br>Tag ID: 0x011a<br>Format: rational64u[1]<br>Size: 8 bytes<br>Value offset: 0x00ac<br>Value: 72 (72/1)</div> <div id=p9 class=tt><b>IFD0-04 <span class=H>YResolution</span></b><br>Tag ID: 0x011b<br>Format: rational64u[1]<br>Size: 8 bytes<br>Value offset: 0x00b4<br>Value: 72 (72/1)</div> <div id=p10 class=tt><b>IFD0-05 ResolutionUnit</b><br>Tag ID: 0x0128<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 2</div> <div id=p11 class=tt><b>IFD0-06 <span class=H>Software</span></b><br>Tag ID: 0x0131<br>Format: string[39]<br>Size: 39 bytes<br>Value offset: 0x00bc<br>Value: Digital Camera FinePix2400Zo[...]</div> <div id=p12 class=tt><b>IFD0-07 <span class=H>ModifyDate</span></b><br>Tag ID: 0x0132<br>Format: string[20]<br>Size: 20 bytes<br>Value offset: 0x00e4<br>Value: 2001:05:19 18:36:41</div> <div id=p13 class=tt><b>IFD0-08 YCbCrPositioning</b><br>Tag ID: 0x0213<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 2</div> <div id=p14 class=tt><b>IFD0-09 <span class=H>Copyright</span></b><br>Tag ID: 0x8298<br>Format: string[11] read as undef[11]<br>Size: 11 bytes<br>Value offset: 0x00f8<br>Value: .</div> <div id=p15 class=tt><b>IFD0-10 ExifOffset</b><br>Tag ID: 0x8769<br>Format: int32u[1]<br>Size: 4 bytes<br>Value: 0x0104</div> <div id=p16 class=tt><b>Next IFD</b><br>IFD1 offset: 0x03c6<br>(4 bytes)</div> <div id=p20 class=tt><b>ExifIFD entries</b><br>Entry count: 28<br>(2 bytes)</div> <div id=p21 class=tt><b>ExifIFD-00 <span class=H>FNumber</span></b><br>Tag ID: 0x829d<br>Format: rational64u[1]<br>Size: 8 bytes<br>Value offset: 0x025a<br>Value: 3.5 (350/100)</div> <div id=p22 class=tt><b>ExifIFD-01 ExposureProgram</b><br>Tag ID: 0x8822<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 2</div> <div id=p23 class=tt><b>ExifIFD-02 ISO</b><br>Tag ID: 0x8827<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 100</div> <div id=p24 class=tt><b>ExifIFD-03 ExifVersion</b><br>Tag ID: 0x9000<br>Format: undef[4]<br>Size: 4 bytes<br>Value: 0210</div> <div id=p25 class=tt><b>ExifIFD-04 <span class=H>DateTimeOriginal</span></b><br>Tag ID: 0x9003<br>Format: string[20]<br>Size: 20 bytes<br>Value offset: 0x0262<br>Value: 2001:05:19 18:36:41</div> <div id=p26 class=tt><b>ExifIFD-05 <span class=H>CreateDate</span></b><br>Tag ID: 0x9004<br>Format: string[20]<br>Size: 20 bytes<br>Value offset: 0x0276<br>Value: 2001:05:19 18:36:41</div> <div id=p27 class=tt><b>ExifIFD-06 ComponentsConfiguration</b><br>Tag ID: 0x9101<br>Format: undef[4] read as int8u[4]<br>Size: 4 bytes<br>Value: 1 2 3 0</div> <div id=p28 class=tt><b>ExifIFD-07 <span class=H>CompressedBitsPerPixel</span></b><br>Tag ID: 0x9102<br>Format: rational64u[1]<br>Size: 8 bytes<br>Value offset: 0x028a<br>Value: 1.6 (16/10)</div> <div id=p29 class=tt><b>ExifIFD-08 <span class=H>ShutterSpeedValue</span></b><br>Tag ID: 0x9201<br>Format: rational64s[1]<br>Size: 8 bytes<br>Value offset: 0x0292<br>Value: 6 (600/100)</div> <div id=p30 class=tt><b>ExifIFD-09 <span class=H>ApertureValue</span></b><br>Tag ID: 0x9202<br>Format: rational64u[1]<br>Size: 8 bytes<br>Value offset: 0x029a<br>Value: 3.6 (360/100)</div> <div id=p31 class=tt><b>ExifIFD-10 <span class=H>BrightnessValue</span></b><br>Tag ID: 0x9203<br>Format: rational64s[1]<br>Size: 8 bytes<br>Value offset: 0x02a2<br>Value: 2 (200/100)</div> <div id=p32 class=tt><b>ExifIFD-11 <span class=H>ExposureCompensation</span></b><br>Tag ID: 0x9204<br>Format: rational64s[1]<br>Size: 8 bytes<br>Value offset: 0x02aa<br>Value: 0 (0/100)</div> <div id=p33 class=tt><b>ExifIFD-12 <span class=H>MaxApertureValue</span></b><br>Tag ID: 0x9205<br>Format: rational64u[1]<br>Size: 8 bytes<br>Value offset: 0x02b2<br>Value: 3.6 (360/100)</div> <div id=p34 class=tt><b>ExifIFD-13 MeteringMode</b><br>Tag ID: 0x9207<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 5</div> <div id=p35 class=tt><b>ExifIFD-14 Flash</b><br>Tag ID: 0x9209<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 0x1</div> <div id=p36 class=tt><b>ExifIFD-15 <span class=H>FocalLength</span></b><br>Tag ID: 0x920a<br>Format: rational64u[1]<br>Size: 8 bytes<br>Value offset: 0x02ba<br>Value: 6 (600/100)</div> <div id=p37 class=tt><b>ExifIFD-16 <span class=H>MakerNotes</span></b><br>Tag ID: 0x927c<br>Format: undef[214]<br>Size: 214 bytes<br>Value offset: 0x02c2<br>Value: FUJIFILM..............0130..[...]</div> <div id=p38 class=tt><b>ExifIFD-17 FlashpixVersion</b><br>Tag ID: 0xa000<br>Format: undef[4]<br>Size: 4 bytes<br>Value: 0100</div> <div id=p39 class=tt><b>ExifIFD-18 ColorSpace</b><br>Tag ID: 0xa001<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 0x1</div> <div id=p40 class=tt><b>ExifIFD-19 ExifImageWidth</b><br>Tag ID: 0xa002<br>Format: int32u[1]<br>Size: 4 bytes<br>Value: 1600</div> <div id=p41 class=tt><b>ExifIFD-20 ExifImageHeight</b><br>Tag ID: 0xa003<br>Format: int32u[1]<br>Size: 4 bytes<br>Value: 1200</div> <div id=p42 class=tt><b>ExifIFD-21 InteropOffset</b><br>Tag ID: 0xa005<br>Format: int32u[1]<br>Size: 4 bytes<br>Value: 0x03a8</div> <div id=p43 class=tt><b>ExifIFD-22 <span class=H>FocalPlaneXResolution</span></b><br>Tag ID: 0xa20e<br>Format: rational64u[1]<br>Size: 8 bytes<br>Value offset: 0x0398<br>Value: 3053 (3053/1)</div> <div id=p44 class=tt><b>ExifIFD-23 <span class=H>FocalPlaneYResolution</span></b><br>Tag ID: 0xa20f<br>Format: rational64u[1]<br>Size: 8 bytes<br>Value offset: 0x03a0<br>Value: 3053 (3053/1)</div> <div id=p45 class=tt><b>ExifIFD-24 FocalPlaneResolutionUnit</b><br>Tag ID: 0xa210<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 3</div> <div id=p46 class=tt><b>ExifIFD-25 SensingMethod</b><br>Tag ID: 0xa217<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 2</div> <div id=p47 class=tt><b>ExifIFD-26 FileSource</b><br>Tag ID: 0xa300<br>Format: undef[1]<br>Size: 1 bytes<br>Value: 3</div> <div id=p48 class=tt><b>ExifIFD-27 SceneType</b><br>Tag ID: 0xa301<br>Format: undef[1]<br>Size: 1 bytes<br>Value: 1</div> <div id=p49 class=tt><b>Next IFD</b><br>Next IFD offset: 0x0000<br>(4 bytes)</div> <div id=p50 class=tt><b>MakerNotes header</b><br>MakerNoteFujiFilm<br>(12 bytes)</div> <div id=p51 class=tt><b>MakerNoteFujiFilm entries</b><br>Entry count: 15<br>(2 bytes)</div> <div id=p52 class=tt><b>MakerNotes-00 Version</b><br>Tag ID: 0x0000<br>Format: undef[4]<br>Size: 4 bytes<br>Value: 0130</div> <div id=p53 class=tt><b>MakerNotes-01 <span class=F>Quality</span></b><br>Tag ID: 0x1000<br>Format: string[8]<br>Size: 8 bytes<br>Value offset: 0x00c6<br>Actual offset: 0x0388<br>Offset base: 0x02c2<br>Value: NORMAL </div> <div id=p54 class=tt><b>MakerNotes-02 Sharpness</b><br>Tag ID: 0x1001<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 0x3</div> <div id=p55 class=tt><b>MakerNotes-03 WhiteBalance</b><br>Tag ID: 0x1002<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 0x0</div> <div id=p56 class=tt><b>MakerNotes-04 FujiFlashMode</b><br>Tag ID: 0x1010<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 3</div> <div id=p57 class=tt><b>MakerNotes-05 <span class=F>FlashExposureComp</span></b><br>Tag ID: 0x1011<br>Format: rational64s[1]<br>Size: 8 bytes<br>Value offset: 0x00ce<br>Actual offset: 0x0390<br>Offset base: 0x02c2<br>Value: 0 (0/10)</div> <div id=p58 class=tt><b>MakerNotes-06 Macro</b><br>Tag ID: 0x1020<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 0</div> <div id=p59 class=tt><b>MakerNotes-07 FocusMode</b><br>Tag ID: 0x1021<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 0</div> <div id=p60 class=tt><b>MakerNotes-08 SlowSync</b><br>Tag ID: 0x1030<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 0</div> <div id=p61 class=tt><b>MakerNotes-09 PictureMode</b><br>Tag ID: 0x1031<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 0x0</div> <div id=p62 class=tt><b>MakerNotes-10 AutoBracketing</b><br>Tag ID: 0x1100<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 0</div> <div id=p63 class=tt><b>MakerNotes-11 Tag 0x1200</b><br>Tag ID: 0x1200<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 0</div> <div id=p64 class=tt><b>MakerNotes-12 BlurWarning</b><br>Tag ID: 0x1300<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 0</div> <div id=p65 class=tt><b>MakerNotes-13 FocusWarning</b><br>Tag ID: 0x1301<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 0</div> <div id=p66 class=tt><b>MakerNotes-14 ExposureWarning</b><br>Tag ID: 0x1302<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 0</div> <div id=p67 class=tt><b>Next IFD</b><br>Next IFD offset: 0x0000<br>(4 bytes)</div> <div id=p68 class=tt><b>InteropIFD entries</b><br>Entry count: 2<br>(2 bytes)</div> <div id=p69 class=tt><b>InteropIFD-00 InteropIndex</b><br>Tag ID: 0x0001<br>Format: string[4]<br>Size: 4 bytes<br>Value: R98</div> <div id=p70 class=tt><b>InteropIFD-01 InteropVersion</b><br>Tag ID: 0x0002<br>Format: undef[4]<br>Size: 4 bytes<br>Value: 0100</div> <div id=p71 class=tt><b>Next IFD</b><br>Next IFD offset: 0x0000<br>(4 bytes)</div> <div id=p72 class=tt><b>IFD1 entries</b><br>Entry count: 8<br>(2 bytes)</div> <div id=p73 class=tt><b>IFD1-00 Compression</b><br>Tag ID: 0x0103<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 6</div> <div id=p74 class=tt><b>IFD1-01 Orientation</b><br>Tag ID: 0x0112<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 1</div> <div id=p75 class=tt><b>IFD1-02 <span class=H>XResolution</span></b><br>Tag ID: 0x011a<br>Format: rational64u[1]<br>Size: 8 bytes<br>Value offset: 0x042c<br>Value: 72 (72/1)</div> <div id=p76 class=tt><b>IFD1-03 <span class=H>YResolution</span></b><br>Tag ID: 0x011b<br>Format: rational64u[1]<br>Size: 8 bytes<br>Value offset: 0x0434<br>Value: 72 (72/1)</div> <div id=p77 class=tt><b>IFD1-04 ResolutionUnit</b><br>Tag ID: 0x0128<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 2</div> <div id=p78 class=tt><b>IFD1-05 ThumbnailOffset</b><br>Tag ID: 0x0201<br>Format: int32u[1]<br>Size: 4 bytes<br>Value: 0x043c</div> <div id=p79 class=tt><b>IFD1-06 ThumbnailLength</b><br>Tag ID: 0x0202<br>Format: int32u[1]<br>Size: 4 bytes<br>Value: 28</div> <div id=p80 class=tt><b>IFD1-07 YCbCrPositioning</b><br>Tag ID: 0x0213<br>Format: int16u[1]<br>Size: 2 bytes<br>Value: 2</div> <div id=p81 class=tt><b>Next IFD</b><br>IFD2 offset: 0x0000<br>(4 bytes)</div> <div id=p82 class=tt>(IFD1:Thumbnail data)<br>Size: 28 bytes</div> <div id=p83 class=tt>[JPEG DQT]<br>(134 bytes)</div> <div id=p84 class=tt>[JPEG SOF0]<br>(19 bytes)</div> <div id=p85 class=tt>[JPEG DHT]<br>(77 bytes)</div> <div id=p86 class=tt>[JPEG Image Data]<br>(17 bytes)</div> <div id=p87 class=tt><b>JPEG EOI</b><br>(2 bytes)</div> </body></html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/idiosyncracies.html�������������������������������������������������������000644 �000765 �000024 �00000036434 12573615143 021246� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Maker Note Idio(t)syncracies</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h1 class='up'>Maker Note Idio(t)syncracies</h1> <p>It really is surprising how stupid some (...many, ...most?) manufacturers seem to be when it comes to writing what should be a fairly simple file format.</p> <p>One positive thing is that most manufacturers seem to have standardized on an EXIF-like IFD (Image File Directory) structure for their maker notes. But many problems arise because of a fundamental design flaw in the EXIF/TIFF format. Values longer than 4 bytes are stored at a location referenced by an offset from an absolute position in the file (where offset 0 is the start of the EXIF/TIFF information).</p> <p>The difficulty is that these offsets must be recalculated when a file is rewritten, but in general this is not possible (particularly for the maker notes) because the format of all information is not known. Some manufacturers have attempted to avoid this problem using offsets which are relative to the start of the maker note IFD instead of the usual start of EXIF. This is a good idea if implemented properly, but this is not done consistently. (And some manufacturers are not even consistent about how the offsets are calculated from one camera model to the next!)</p> <blockquote><font size='-1'><b>Technical aside:</b> <br>If EXIF were designed properly, all offsets would be relative to 4 bytes after the end of the IFD, which is the normal position for values to be stored, and all value data for the IFD would be stored in a block at this location. If this was done, an entire IFD could be relocated easily without causing problems.</font></blockquote> <p>Below is a list of idiosyncracies in files written by the digital cameras or software from various manufacturers. Many of these quirks relate to the offset problem mentioned above.</p> <hr> <p><a name="Canon"><b>Canon:</b></a> The 350D (firmware 1.0.1) gets the size of the thumbnail image wrong and reports it to be 10 bytes too long. This can cause the reported thumbnail image data to run off the end of the APP1 segment. A bug in version 1.0.4 of the 40D firmware causes it to write a maker note entry count that is one greater than it should be.</p> <p><a name="Casio"><b>Casio:</b></a> The preview image is referenced by two different offsets (the PreviewImage tag plus a PreviewImageStart/PreviewImageLength pair). Also, the offset for the PrintIM information is relative to the start of the IFD entry even though other offsets aren't.</p> <p><a name="Concord"><b>Concord:</b></a> Some models write PrintIM information with an entry-based offset like Casio.</p> <p><a name="GE"><b>General Electric:</b></a> A number of GE cameras store zero offsets for some maker note tags (possibly to indicate that the tags do not exist), and other offsets are 12 bytes too high for some models (like the A1230, E1035 and G2). </p> <p><a name="HP"><b>Hewlett-Packard:</b></a> The PhotoSmart 720 (one of the few HP models to use EXIF-format maker notes) uses a format code of 5 (rational64u) for tag 0x0204, but stores a rational32u value. Other models show about as much standardization as the Kodak point-and-shoot lineup. Also, some models (C945, M22, M23, R507, R607, R707, R717, R725, R727, R817, R818, R827, R927 and R960) write the EXIF ComponentsConfiguration incorrectly as ASCII characters (like the Leica M8 and M9).</p> <p><a name="Kodak"><b>Kodak:</b></a> Professional DCS Photo Desk software writes a cyclical EXIF directory such that the InteropIFD pointer points back to IFD0. Point-and-shoot models show little standardization in maker note format. Some models with IFD-format maker notes store incorrect count values for a number of tags (this is particularly nasty), and may contain blank IFD entries which are filled with 0xff's (not zeros like other makes).</p> <p><a name="Konica"><b>Konica:</b></a> The KD-300Z writes all maker notes offsets relative to the start of the individual IFD entry.</p> <p><a name="Kyocera"><b>Kyocera:</b></a> A number of models write all maker notes offsets relative to the start of the individual IFD entry.</p> <p><a name="Leica"><b>Leica:</b></a> The M8 and M9 write the EXIF ComponentsConfiguration value in ASCII instead of binary. The M8 writes EXIF ExposureCompensation and ShutterSpeedValue incorrectly as a unsigned rationals when they should be signed. This leads to crazy values like "+65536" for small negative exposure compensations, and "0 s" for long exposure times. (NOTE: These are all EXIF idiosyncracies since the values are in the standard EXIF, not the maker notes.) In DNG images, the M8 uses maker note offsets relative to the start of the maker notes in JPEG images (very reasonable), but relative to the end of the maker note header in DNG images. I think this was a mistake because this is changed in M9 DNG images to be the same as JPEG images.</p> <p>The Leica S2 maker note format is the MOST idiotic I have seen, and has the following peculiarities:</p> <ul> <li>It is stored as a trailer after the JPEG EOI (but referenced from a pointer inside the APP1 EXIF segment).</li> <li>Most of the offsets in this MakerNote IFD are relative to the start of the file instead of the EXIF TIFF header (which is particularly cruel because they are broken if other software simply adds a leading JFIF segment, but there is no simple way to detect that this has happened. Normally this could be detected by analyzing the pointers, but this doesn't work here because all of the unused data in the Leica maker notes make normal pointer assumptions impossible).</li> <li>The PreviewImage offset is relative to the start of the MakerNote data (which is MUCH more reasonable, but using two different offset bases in the same directory is yet another level of idiocy).</li> <li>In DNG images the maker notes use an absolute base offset. Yet again different from the M8 and M9. Consistency isn't Leica's strong suit.</li> </ul> <p>Strike that. The most idiotic award now goes to the Leica M (Typ 240), which adds these quirks (firmware 1.1.0.2):</p> <ul> <li>Tag 0x0301 has the same offset as the PreviewImage in the maker note IFD, although it looks like the data for this tag probably comes after the PreviewImage.</li> <li>Tag 0x0302 has an invalid offset (0xffffffff).</li> </ul> <p>OK, I give up on Leica. The new Leica S (Typ 007) attains a new level of stupidity by storing the preview image in the JPG file using a completely nonsensical technique (in IFD2 of the EXIF segment, with the data being stored outside the EXIF segment after the JPEG EOI), as well as various other brainless blunders. [@Leica: Try reading the MPF specification.]</p> <p><a name="Minolta"><b>Minolta:</b></a> An obvious bug in the firmware of the Z2 writes an incorrect offset for the 'MinoltaCameraSettings2' information -- it writes the offset of the offset itself instead of the offset of the value (hahaha!). Other offsets are correct.</p> <p><a name="Nikon"><b>Nikon:</b></a> D2H NEF files have huge blocks with all zero data (3.7 MB in my test file!).</p> <p><a name="Olympus"><b>Olympus:</b></a> The E-1 and E-300 have subdirectories in the maker notes, but not only does the data size of these subdirectories exclude the subdirectory value data, but also it is 2 bytes too small for the directory information itself (doh! -- they forgot to include the entry count). Similarly, the stored size of the maker note data block is too small for many models, which results in a loss of data if the maker notes are copied as a block when an image is rewritten.</p> <p><a name="Pentax"><b>Pentax:</b></a> The Optio 330 uses an offset for the PrintIM information which is relative to the start of the IFD entry (hmmm, like some Casio models...). Also, preview image offsets in the maker notes are given relative to the EXIF base rather than the maker note base (like all other maker notes offsets).</p> <p>The Optio 550, 555, 33WR and 43WR all specify a PrintIM directory at a the same offset of 0x29a with length 40 bytes, but the only PrintIM information in the file is nowhere near that offset and is 128 bytes long. Also for these models, tag 0x002e has a constant value of 0x6a6 even though its position changes. Finally, all of these models plus the Optio WP waste many kilobytes of space in each image with large unused data blocks in the EXIF information.</p> <p>The Optio 330RS and 430RS double reference the preview image information.</p> <p>Note that the worst problems are with the Optio 230, 330, and 430, which carry the Asahi brand name.</p> <p><a name="Photoshop"><b>Photoshop and Nikon Capture:</b></a> Both of these packages write TIFF IPTC information as 'int32u' (or 'LONG'). This is wrong (<a href="http://www.awaresystems.be/imaging/tiff/tifftags/iptc.html">see reference</a>). Nikon Capture goes one step further and simply ignores IPTC that is written correctly as 'undef' or 'int8u'. (So for compatibility, ExifTool also writes this incorrectly as 'int32u'.) Photoshop completely deletes the maker notes when an image is edited.</p> <p><a name="Ricoh"><b>Ricoh:</b></a> There is an IFD subdirectory in the Ricoh maker notes of both the Caplio RR30 and RR1. The RR30 uses standard EXIF offsets (relative to the start of the EXIF data), but for the RR1 the offsets are relative to the start of the subdirectory. The G700 uses MPF offsets relative to the start of the file, instead of the start of the MPF segment as per the MPF spec. The HX15 uses a standard EXIF maker note structure, but there are 2 extra padding bytes between the IFD entry count and the 1st IFD entry. The HZ15 and Pentax XG-1 (by Ricoh) both have an extra 2 bytes after the IFD entry counts. All value offsets are erroneously 0 for the HZ15, and there are other problems with the offsets stored by the XG-1.</p> <p><a name="Rollei"><b>Rollei:</b></a> The DK4010 writes all maker notes offsets relative to the start of the individual IFD entry.</p> <p><a name="Sanyo"><b>Sanyo:</b></a> The offsets written in the maker notes of the J1, J2, J3, S1, S3 and S4 have very little to do with reality. Apparently the Sanyo programmers have no understanding of the concept of an IFD offset.</p> <p><a name="Skanhex"><b>Skanhex:</b></a> With some Skanhex models (SX-210Z3, SX-330Z3, SX3300, SX410Z3), the 264-byte makernotes block contains no useful information, and overlaps values from the ExifIFD. For these models there is also a large block (typically 1195 bytes) of unreferenced information in the EXIF data immediately following the IteropIFD. This block begins with the character sequence "SKANH\0", and contains exactly the same information in all 20 of my sample images that contain this block (except for a variable amount of padding at the end with 0xff bytes). These quirks also affect some Gateway, Jenoptik, Medion, Samsung and Yakumo models built by Skanhex.</p> <p><a name="Toshiba"><b>Toshiba:</b></a> The PDR-3310 writes all maker notes offsets relative to the start of the individual IFD entry. (very similar to Konica KD-300Z)</p> <hr><a name="raw"></a> <h2>RAW file Idiosyncracies</h2> <p><a name="MinoltaMRW"><b>Minolta MRW:</b></a> The A200 stores the thumbnail image offset in IFD0 relative to the start of file, while all other offsets are relative to the start of the TIFF header, which is 48 bytes into the file. Also, the A200 stores the StripOffsets and the StripByteCounts values in the wrong byte order.</p> <p><a name="SonyARW"><b>Sony ARW:</b></a> The maker notes of ARW images are not self-contained, so some information is lost when the images are rewritten by other software (including the Adobe DNG converter). The A100 with firmware 1.00 sets the high word of the thumbnail image offset to zero, but it should sometimes be 0x0001. (This problem is fixed for firmware 1.01.) Also with the A100, the JpgFromRawLength stored in IFD0 may be wrong (although this value is also stored in the MakerNotes and is correct here). As well, much information in these images is encrypted, which complicates things somewhat. Even the Sony IDC utility can't properly rewrite ARW files -- it corrupts the embedded MRW record when used to edit ARW images. Even funnier: IDC v3.0 will crash when loading some original A100 firmware 1.00 images, but no longer crashes if the images are first edited with ExifTool (probably because ExifTool fixes the above mentioned problems when it rewrites the image).</p> <p><a name="LeicaDNG"><b>Leica DNG:</b></a> The makernote offsets for the M8 are relative to the start of the makernote IFD in JPEG images, but relative to the start of the makernote header (8 bytes earlier) in DNG images. <i>[2009-09-09: This is fixed for the M9 which has offsets relative to the start of the makernote header for both JPEG and DNG.]</i></p> <p><a name="NikonNEF"><b>Nikon NEF:</b></a> Aside from the encryption that Nikon uses to try to hide some information in their maker notes, the NEF files in general seem fairly well behaved. Even so, the Nikon Transfer utility (version 1.3) still manages to corrupt some information in the 0th SubIFD when it is used to process NEF images. (Beware that other Nikon utilities may have this same problem if they use the same NEF writing routines.) But luckly the lost information isn't very important. (Only a few tags from the embedded full-sized preview image are lost: XResolution, YResolution and YCbCrPositioning.) Also, Nikon Transfer and Nikon Capture both write an incorrect size for the maker notes, which could cause loss of MakerNote information if the file is edited by other software (but this isn't a problem with ExifTool, which will fix this type of problem automatically when writing).</p> <p><a name="NikonNRW"><b>Nikon NRW:</b></a> Nikon should have just called this NEF with a different version number -- there should be no need to pollute the universe with zillions of unnecessary file extensions. Oh right, they weren't smart enough to include a file identifier containing a version number in their NEF images -- Doh! In these images, CFAPattern2 is written incorrectly with UNDEFINED instead of BYTE format.</p> <p><a name="PhaseOneIIQ"><b>Phase One IIQ:</b></a> Many values are referenced from more than one location in the TIFF structure of these images. For instance, the IFD0 strip data actually exists within the MakerNotes data block. This is a poor design, and leads to duplicated information when the image is rewritten.</p> <p><a name="RicohDNG"><b>Ricoh DNG:</b></a> The GR Digital IV (firmware 1.14) stores an incorrect length for the JPEG preview in SubIFD1.</p> <p><a name="SamsungSRW"><b>Samsung SRW:</b></a> Yet another TIFF-based RAW image with no proper file identifier. In these images the thumbnail is stored inside a SubIFD of IFD1 instead of directly in IFD1 (dumb, dumb...). Also, the NX200 (firmware NX200_011181) uses a base offset for the X/YResolution values that is different from the PreviewImageStart pointer, both in the MakerNotes PreviewIFD. (Note that the NX100 uses the same base for both, so this is certainly a firmware bug for the NX200. <i>[2012-06-21: This problem now also affects the EX1, NX20 and WB2000] [2013-07-25: Add the NX2000 to this list]</i>)</p> <hr> <i>Created Mar. 25, 2005</i> <br><i>Last revised Sept. 4, 2015</i> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/index.html����������������������������������������������������������������000644 �000765 �000024 �00000331063 12650447262 017342� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>ExifTool by Phil Harvey</title> <meta name="description" content="A command-line application and Perl library for reading and writing EXIF, GPS, IPTC, XMP, makernotes and other meta information in image, audio and video files. For Windows, Mac OS X, and Unix systems."> <meta name="KeyWords" content="meta, information, metadata, ExifTool, EXIF, XMP, IPTC, GPS, read, write, edit, editor, update, extract, images, thumbnail, preview, geotag, geocode, Perl, library, module, RAW, NEF, CR2, MRW, JPEG, TIFF, ID3, Windows, OSX, Unix"> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <style type="text/css"> <!-- body { margin: 0 .5em; color: black; background: white; font-family: helvetica; font-size: .9em } h1 { margin: .2em 0 } h2.tight { margin: 0 0 .35em 0; font-weight: normal } a.wt { color: white; text-decoration: none; } a:hover.wt { text-decoration: underline; } a:active.wt { color: red; } pre { color: #800; padding: 0; margin: 0 } blockquote { margin-top: 1em; margin-bottom: 1em } blockquote.s { margin-left: 1em; margin-right: 1em } div.wide { margin: 0 -.5em } table.tight td { padding: 1px 1px 0px 3px } table.links { border-collapse: collapse; width: 100%; margin: 0 } table.links th { border-right: 1px solid white; font-weight: normal; width: 17%; background: #008 } table.links th.rt { border-right: 0 } table.dl { border: 1px solid gray; border-collapse: collapse } table.dl td { padding: .4em .8em } table.bm { margin: 0 0 .35em 0 } span.sup { font-size: 0.8em; font-weight: normal; position: relative; top: -.4em; } --> </style> </head> <body> <h1><a name="top">ExifTool by Phil Harvey</a></h1> <h2 class='tight red'><b>Read</b>, <b>Write</b> and <b>Edit</b> Meta Information!</h2> <p><b>Also available</b> --> <a href="http://owl.phy.queensu.ca/~phil/exiftool/fix_corrupted_nef.html">Utility to fix Nikon NEF images corrupted by Nikon software</a></p> <div class=wide><table class=links><tr> <th><a href="install.html" class=wt>&nbsp;Installing&nbsp;</a></th> <th><a href="TagNames/index.html" class=wt>&nbsp;Tag&nbsp;Names&nbsp;</a></th> <th><a href="#links" class=wt>&nbsp;Resources&nbsp;</a></th> <th><a href="history.html" class=wt>&nbsp;History&nbsp;</a></th> <th><a href="http://u88.n24.queensu.ca/exiftool/forum/" class=wt>&nbsp;Forum&nbsp;</a></th> <th class=rt><a href="faq.html" class=wt>&nbsp;FAQ&nbsp;</a></th> </tr></table></div> <div class=index> <a href="#features">Features</a> <br><a href="#comments">User Comments</a> <br><a href="#supported">Supported File Types</a> <br><a href="#system">System Requirements</a> <br><a href="#running">Running ExifTool</a> <br><a href="#output">Example Output</a> <br><a href="#tagnames">Tag Names Explained</a> <br><a href="#groups">Tag Groups</a> <br><a href="#writing">Writing Information</a> <br><a href="#limitations">Writer Limitations</a> <br><a href="#problems">Known Problems</a> <br><a href="#security">Security Issues</a> <br><a href="#shift">Date/Time Shift</a> <br><a href="#filename">Renaming Files</a> <br><a href="#performance">Performance</a> <br><a href="#library">ExifTool Library</a> <br><a href="#links">Additional Resources</a> <br><a href="#boldly">New Discoveries</a> <br><a href="#ack">Acknowledgements</a> <br><a href="#license">License</a> <br><a href="#donate">Donate</a> <br><a href="#contact">Contact Me</a> </div> <blockquote><table class='dl lg'><tr><td><b> <a href="Image-ExifTool-10.10.tar.gz"> Download Version 10.10</a> (3.9 MB) - <a href="history.html">Jan. 22, 2016</a></b></td></tr></table></blockquote> <p><b>ExifTool is a platform-independent <a href="ExifTool.html">Perl library</a> plus a <a href="exiftool_pod.html">command-line application</a> for reading, writing and editing meta information in a <a href="#supported">wide variety of files</a>.</b> ExifTool supports many different metadata formats including <a href="TagNames/EXIF.html">EXIF</a>, <a href="TagNames/GPS.html">GPS</a>, <a href="TagNames/IPTC.html">IPTC</a>, <a href="TagNames/XMP.html">XMP</a>, <a href="TagNames/JFIF.html">JFIF</a>, <a href="TagNames/GeoTiff.html">GeoTIFF</a>, <a href="TagNames/ICC_Profile.html">ICC Profile</a>, <a href="TagNames/Photoshop.html">Photoshop IRB</a>, <a href="TagNames/FlashPix.html">FlashPix</a>, <a href="TagNames/AFCP.html">AFCP</a> and <a href="TagNames/ID3.html">ID3</a>, as well as the maker notes of many digital cameras by <a href="TagNames/Canon.html">Canon</a>, <a href="TagNames/Casio.html">Casio</a>, <a href="TagNames/FLIR.html">FLIR</a>, <a href="TagNames/FujiFilm.html">FujiFilm</a>, <a href="TagNames/GE.html">GE</a>, <a href="TagNames/HP.html">HP</a>, <a href="TagNames/JVC.html">JVC/Victor</a>, <a href="TagNames/Kodak.html">Kodak</a>, <a href="TagNames/Leaf.html">Leaf</a>, <a href="TagNames/Minolta.html">Minolta/Konica-Minolta</a>, <a href="TagNames/Motorola.html">Motorola</a>, <a href="TagNames/Nikon.html">Nikon</a>, <a href="TagNames/Nintendo.html">Nintendo</a>, <a href="TagNames/Olympus.html">Olympus/Epson</a>, <a href="TagNames/Panasonic.html">Panasonic/Leica</a>, <a href="TagNames/Pentax.html">Pentax/Asahi</a>, <a href="TagNames/PhaseOne.html">Phase One</a>, <a href="TagNames/Reconyx.html">Reconyx</a>, <a href="TagNames/Ricoh.html">Ricoh</a>, <a href="TagNames/Samsung.html">Samsung</a>, <a href="TagNames/Sanyo.html">Sanyo</a>, <a href="TagNames/Sigma.html">Sigma/Foveon</a> and <a href="TagNames/Sony.html">Sony</a>.</p> <p>ExifTool is also available as a <b>stand-alone Windows executable</b> and a <b>Macintosh OS X package</b>: <i>(Note that these versions contain the executable only, and do not include the HTML documentation or other files of the full distribution above.)</i></p> <blockquote><table class='dl lg'><tr><td><b> <a name="alone">Windows Executable:</a> <a href="exiftool-10.10.zip"> exiftool-10.10.zip</a> (5.0 MB)</b></td></tr></table></blockquote> <p><b>The stand-alone Windows executable</b> does not require Perl. Just download and un-zip the archive then double-click on "<code>exiftool(-k).exe</code>" to read the application documentation, drag-and-drop files and folders to view meta information, or rename to "<code>exiftool.exe</code>" for command-line use. Runs on all versions of Windows (including Windows 7).</p> <blockquote><table class='dl lg'><tr><td><b> Mac OS X Package: <a href="ExifTool-10.10.dmg"> ExifTool-10.10.dmg</a> (2.5 MB)</b></td></tr></table></blockquote> <p><b>The OS X package</b> installs the ExifTool command-line application and libraries in /usr/bin. After installing, type "<code>exiftool</code>" in a Terminal window to run exiftool and read the application documentation.</p> <p>Read the <b><a href="install.html">installation instructions</a></b> for help installing ExifTool on Windows, Mac OS X and Unix systems.</p> <p><i>(<a href="http://owl.phy.queensu.ca/~phil/exiftool/checksums.txt">click here for the SHA1 and MD5 checksums to verify these distribution packages</a>.)</i></p> <h2><a name="features">Features</a></h2> <ul> <li>Powerful, fast, flexible and customizable</li> <li><a href="#supported">Supports a large number of different file formats</a></li> <li>Reads <a href="TagNames/EXIF.html">EXIF</a>, <a href="TagNames/GPS.html">GPS</a>, <a href="TagNames/IPTC.html">IPTC</a>, <a href="TagNames/XMP.html">XMP</a>, <a href="TagNames/JFIF.html">JFIF</a>, MakerNotes, <a href="TagNames/GeoTiff.html">GeoTIFF</a>, <a href="TagNames/ICC_Profile.html">ICC Profile</a>, <a href="TagNames/Photoshop.html">Photoshop IRB</a>, <a href="TagNames/FlashPix.html">FlashPix</a>, <a href="TagNames/AFCP.html">AFCP</a>, <a href="TagNames/ID3.html">ID3</a> and more...</li> <li>Writes <a href="TagNames/EXIF.html">EXIF</a>, <a href="TagNames/GPS.html">GPS</a>, <a href="TagNames/IPTC.html">IPTC</a>, <a href="TagNames/XMP.html">XMP</a>, <a href="TagNames/JFIF.html">JFIF</a>, MakerNotes, <a href="TagNames/GeoTiff.html">GeoTIFF</a>, <a href="TagNames/ICC_Profile.html">ICC Profile</a>, <a href="TagNames/Photoshop.html">Photoshop IRB</a>, <a href="TagNames/AFCP.html">AFCP</a> and more...</li> <li>Reads and writes maker notes of many digital cameras</li> <li>Decodes a riddle wrapped in a mystery inside an enigma</li> <li>Numerous output formatting options (including tab-delimited, HTML, XML and JSON)</li> <li>Multi-lingual output (cs, de, en, en-ca, en-gb, es, fi, fr, it, ja, ko, nl, pl, ru, sv, tr, zh-cn or zh-tw)</li> <li><a href="geotag.html">Geotags images</a> from GPS track log files (with time drift correction!)</li> <li><a href="geotag.html#Reverse">Generates track logs</a> from geotagged images</li> <li><a href="#shift">Shifts date/time values</a> to fix timestamps in images</li> <li><a href="#filename">Renames files and organizes in directories</a> (by date or by any other meta information)</li> <li>Extracts thumbnail images, preview images, and large JPEG images from RAW files</li> <li>Copies meta information between files (even different-format files)</li> <li>Reads/writes <a href="struct.html">structured XMP information</a></li> <li>Deletes meta information individually, in groups, or altogether</li> <li>Sets the file modification date (and creation date in Windows) from EXIF information</li> <li>Supports alternate language tags in <a href="TagNames/XMP.html">XMP</a>, <a href="TagNames/PNG.html#TextualData">PNG</a>, <a href="TagNames/ID3.html">ID3</a>, <a href="TagNames/Font.html#Name">Font</a>, <a href="TagNames/QuickTime.html">QuickTime</a>, <a href="TagNames/ICC_Profile.html">ICC Profile</a>, <a href="TagNames/MIE.html">MIE</a> and <a href="TagNames/MXF.html">MXF</a> information</li> <li>Processes entire directory trees</li> <li>Creates text output file for each image file</li> <li>Creates binary-format metadata-only (MIE) files for metadata backup</li> <li>Automatically backs up original image when writing</li> <li>Organizes output into groups</li> <li>Conditionally processes files based on value of any meta information</li> <li>Ability to <a href="config.html">add custom user-defined tags</a></li> <li><a href="TagNames/MWG.html">Support for MWG</a> (Metadata Working Group) recommendations</li> <li>Recognizes <a href="TagNames/index.html">thousands of different tags</a></li> <li>Tested with images from <a href="http://owl.phy.queensu.ca/~phil/exiftool/models.html">thousands of different camera models</a></li> <li>Advanced <a href="verbose.html">verbose</a> and <a href="htmldump.html">HTML-based hex dump</a> outputs</li> </ul> <h2><a name="awk">A Note to Unix Power-Users</a></h2> <blockquote>If you find the need to use "find" or "awk" in conjunction with ExifTool, then you probably haven't discovered the full power of ExifTool. Read about the <code>-ext</code>, <code>-if</code>, <code>-p</code> and <code>-tagsFromFile</code> options in the <a href="exiftool_pod.html">application documentation</a>. (This is <a href="mistakes.html#M3">common mistake number 3</a>.)</blockquote> <h2><a name="comments">What People are Saying about ExifTool</a></h2> <blockquote> <i>"In my experience, nothing but nothing is as complete, powerful, and flexible as Phil Harvey's exiftool ... I've never seen anything that's in the same ballpark for power."</i> - <a href="http://forums.dpreview.com/forums/read.asp?forum=1034&amp;message=16582684">dpreview forum</a></blockquote> <blockquote><i>"While there are a lot of image tools available, nothing comes close for accessing/updating the metadata like ExifTool"</i> - <a href="http://web.archive.org/web/20080307105031/http://blog.merg.be/?p=242">merg's blog</a></blockquote> <blockquote><i>"Fast, reliable and amazingly comprehensive ..."</i> - <a href="http://cpanratings.perl.org/dist/Image-ExifTool">CPAN ratings</a></blockquote> <blockquote><i>"... the one piece of free software that gets the most detailed exif data of /any/ tool I've found."</i> - <a href="http://mail.gnome.org/archives/eog-list/2005-August/msg00002.html">gnome mail archives</a> </blockquote> <blockquote><i>"... no program or API gets close to ExifTool in terms of robustness, feature count and support."</i> - <a href="http://www.christian-etter.de/?p=33">CE's Blog</a> </blockquote> <blockquote><i>"ExifTool makes every other EXIF reader (and writer) than I've seen, including the camera manufacturers' readers, look lame."</i> - <a href="http://photo.net/bboard/q-and-a-fetch-msg?msg_id=00IfoF">photo.net Nikon forum</a> </blockquote> <blockquote><i>"Insanely great tool with a long learning curve ..."</i> - <a href="http://forums.adobe.com/message/1800175#1800175">Adobe Forums</a> </blockquote> <blockquote><i>"... it's super awesome, it's super reliable and after many years of development it's still being updated!"</i> - <a href="http://pw999.wordpress.com/2012/05/12/j-exiftool-read-and-write-exif-tags-in-java/">P_W999 blog</a> </blockquote> <blockquote><i>"... it is the mother of all EXIF utilities; the BFG of meta-data extraction; the Pan Galactic Gargle Blaster of EXIF tools ... This thing will suck the last bit of metadata out of whatever image file you throw at it!"</i> - <a href="http://www.openphotographyforums.com/forums/showpost.php?p=4774&amp;postcount=40">Open Photography Forums</a> </blockquote> <blockquote><i>"... it is total fucking gibberish to me."</i> - <a href="https://www.reddit.com/r/linuxquestions/comments/2yiked/i_want_to_batch_extract_the_exif_datetime_from_10/">Reddit Linux Questions</a> </blockquote> <h2><a name="supported">Supported File Types</a></h2> <p>ExifTool can <b>R</b>ead, <b>W</b>rite and/or <b>C</b>reate files in the following formats. Also listed are the support levels for EXIF, IPTC, XMP, ICC_Profile and other metadata types for each file format.</p> <blockquote class=s><table class='norm tight sm bm'> <tr><th>File Type</th><th>Support</th><th>Description</th><th><a href="TagNames/EXIF.html">EXIF</a></th><th><a href="TagNames/IPTC.html">IPTC</a></th><th><a href="TagNames/XMP.html">XMP</a></th><th><a href="TagNames/ICC_Profile.html">ICC</a><span class=sup>1</span></th><th>Other</th></tr> <tr><td>3FR</td><td>R</td><td>Hasselblad RAW (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R</td><td>R</td><td>R</td><td>R</td><td>-</td></tr> <tr><td>3G2, 3GP2</td><td>R/W</td><td>3rd Gen. Partnership Project 2 a/v (<a href="TagNames/QuickTime.html">QuickTime</a>-based)</td><td>R/W<span class=sup>3</span></td><td>R/W<span class=sup>3</span></td><td>R/W/C</td><td>-</td><td>R/W <a href="TagNames/QuickTime.html">QuickTime</a><span class=sup>4</span></td></tr> <tr><td>3GP, 3GPP</td><td>R/W</td><td>3rd Gen. Partnership Project a/v (<a href="TagNames/QuickTime.html">QuickTime</a>-based)</td><td>R/W<span class=sup>3</span></td><td>R/W<span class=sup>3</span></td><td>R/W/C</td><td>-</td><td>R/W <a href="TagNames/QuickTime.html">QuickTime</a><span class=sup>4</span></td></tr> <tr><td><a href="TagNames/Audible.html">AA</a></td><td>R</td><td>Audible Audiobook</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Audible.html">Audible</a></td></tr> <tr><td>AAX</td><td>R/W</td><td>Audible Enhanced Audiobook (<a href="TagNames/QuickTime.html">QuickTime</a>-based)</td><td>R/W<span class=sup>3</span></td><td>R/W<span class=sup>3</span></td><td>R/W/C</td><td>-</td><td>R/W <a href="TagNames/QuickTime.html">QuickTime</a><span class=sup>4</span></td></tr> <tr><td><a href="TagNames/DICOM.html">ACR</a></td><td>R</td><td>American College of Radiology ACR-NEMA (DICOM-like)</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/DICOM.html">DICOM</a></td></tr> <tr><td><a href="TagNames/Font.html">AFM, ACFM, AMFM</a></td><td>R</td><td>Adobe [Composite/Multiple Master] Font Metrics</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Font.html">Font</a></td></tr> <tr><td>AI, AIT</td><td>R/W</td><td>Adobe Illustrator [Template] (<a href="TagNames/PostScript.html">PS</a> or <a href="TagNames/PDF.html">PDF</a>)</td><td>R/W/C<span class=sup>5</span></td><td>R/W/C<span class=sup>5</span></td><td>R/W/C<span class=sup>6</span></td><td>R/W/C<span class=sup>5</span></td><td>R/W/C <a href="TagNames/PDF.html">PDF</a> <a href="TagNames/PostScript.html">PostScript</a>, R <a href="TagNames/Photoshop.html">Photoshop</a></td></tr> <tr><td><a href="TagNames/AIFF.html">AIFF, AIF, AIFC</a></td><td>R</td><td>Audio Interchange File Format [Compressed]</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/AIFF.html">AIFF</a> <a href="TagNames/ID3.html">ID3</a></td></tr> <tr><td><a href="TagNames/APE.html">APE</a></td><td>R</td><td>Monkey's Audio</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/APE.html">APE</a> <a href="TagNames/ID3.html">ID3</a></td></tr> <tr><td>ARW</td><td>R/W</td><td>Sony Alpha RAW (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/Sony.html">Sony</a> <a href="TagNames/SonyIDC.html">SonyIDC</a></td></tr> <tr><td><a href="TagNames/ASF.html">ASF</a></td><td>R</td><td>Microsoft Advanced Systems Format</td><td>-</td><td>-</td><td>R</td><td>-</td><td>R <a href="TagNames/ASF.html">ASF</a></td></tr> <tr><td>AVI</td><td>R</td><td>Audio Video Interleaved (<a href="TagNames/RIFF.html">RIFF</a>-based)</td><td>R<span class=sup>3</span></td><td>-</td><td>R</td><td>-</td><td>R <a href="TagNames/RIFF.html">RIFF</a></td></tr> <tr><td><a href="TagNames/BMP.html">BMP, DIB</a></td><td>R</td><td>Windows BitMaP / Device Independent Bitmap</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/BMP.html">BMP</a></td></tr> <tr><td><a href="TagNames/EXIF.html">BTF</a></td><td>R</td><td>BigTIFF (64-bit Tagged Image File Format)</td><td>R</td><td>R</td><td>R</td><td>R</td><td>-</td></tr> <tr><td><a href="TagNames/EXE.html#CHM">CHM</a></td><td>R</td><td>Microsoft Compiled HTML format</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/EXE.html#CHM">EXE</a></td></tr> <tr><td>COS</td><td>R</td><td>Capture One Settings (XML-based)</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R XML</td></tr> <tr><td>CR2</td><td>R/W</td><td>Canon RAW 2 (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C <a href="TagNames/CanonVRD.html">CanonVRD</a><span class=sup>2</span>, R/W <a href="TagNames/Canon.html">Canon</a></td></tr> <tr><td><a href="TagNames/CanonRaw.html">CRW, CIFF</a></td><td>R/W</td><td>Canon RAW Camera Image File Format (<a href="canon_raw.html">CRW spec.</a>)</td><td>-</td><td>-</td><td>R/W/C</td><td>-</td><td>R/W/C <a href="TagNames/CanonVRD.html">CanonVRD</a><span class=sup>2</span>, R/W <a href="TagNames/CanonRaw.html">CanonRaw</a></td></tr> <tr><td>CS1</td><td>R/W</td><td>Sinar CaptureShop 1-shot RAW (<a href="TagNames/Photoshop.html">PSD</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R <a href="TagNames/Photoshop.html">Photoshop</a></td></tr> <tr><td><a href="TagNames/DICOM.html">DCM, DC3, DIC, DICM</a></td><td>R</td><td>DICOM - Digital Imaging and Communications in Medicine</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/DICOM.html">DICOM</a></td></tr> <tr><td>DCP</td><td>R/W</td><td>DNG Camera Profile (<a href="TagNames/DNG.html">DNG</a>-like)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>-</td></tr> <tr><td>DCR</td><td>R</td><td>Kodak Digital Camera RAW (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R</td><td>R</td><td>R</td><td>R</td><td>-</td></tr> <tr><td><a href="TagNames/Font.html">DFONT</a></td><td>R</td><td>Macintosh Data Fork Font</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Font.html">Font</a></td></tr> <tr><td>DIVX</td><td>R</td><td>DivX media format (<a href="TagNames/ASF.html">ASF</a>-based)</td><td>-</td><td>-</td><td>R</td><td>-</td><td>R <a href="TagNames/ASF.html">ASF</a></td></tr> <tr><td><a href="TagNames/DjVu.html">DJVU, DJV</a></td><td>R</td><td>DjVu image (AIFF-like)</td><td>-</td><td>-</td><td>R</td><td>-</td><td>R <a href="TagNames/DjVu.html">DJVU</a></td></tr> <tr><td><a href="TagNames/DNG.html">DNG</a></td><td>R/W</td><td>Digital Negative (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>-</td></tr> <tr><td>DOC, DOT</td><td>R</td><td>Microsoft Word Document/Template (<a href="TagNames/FlashPix.html">FPX</a>-like)</td><td>-</td><td>-</td><td>R</td><td>R</td><td>R <a href="TagNames/FlashPix.html">FlashPix</a></td></tr> <tr><td><a href="TagNames/OOXML.html">DOCX, DOCM</a></td><td>R</td><td>Office Open XML Document [Macro-enabled]</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/OOXML.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td><a href="TagNames/OOXML.html">DOTX, DOTM</a></td><td>R</td><td>Office Open XML Document Template [Macro-enabled]</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/OOXML.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td><a href="TagNames/DPX.html">DPX</a></td><td>R</td><td>Digital Picture Exchange</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/DPX.html">DPX</a></td></tr> <tr><td><a href="TagNames/CanonVRD.html#DR4">DR4</a></td><td>R/W/C<span class=sup>2</span></td><td>Canon DPP version 4 Recipe</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R/W/C <a href="TagNames/CanonVRD.html">CanonVRD</a><span class=sup>2</span></td></tr> <tr><td><a href="TagNames/Olympus.html#DSS">DSS, DS2</a></td><td>R</td><td>Digital Speech Standard [2]</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Olympus.html#DSS">Olympus</a></td></tr> <tr><td><a href="TagNames/EXE.html#MachO">DYLIB</a></td><td>R</td><td>Mac OS X Mach-O executable and library files</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/EXE.html#MachO">EXE</a></td></tr> <tr><td><a href="TagNames/DV.html">DV</a></td><td>R</td><td>Digital Video</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/DV.html">DV</a></td></tr> <tr><td>DVB</td><td>R/W</td><td>Digital Video Broadcasting (<a href="TagNames/QuickTime.html">QuickTime</a>-based)</td><td>R/W<span class=sup>3</span></td><td>R/W<span class=sup>3</span></td><td>R/W/C</td><td>-</td><td>R/W <a href="TagNames/QuickTime.html">QuickTime</a><span class=sup>4</span></td></tr> <tr><td>EIP</td><td>R</td><td>Capture One Enhanced Image Package (<a href="TagNames/ZIP.html">ZIP</a>-based)</td><td>R</td><td>-</td><td>-</td><td>-</td><td>R XML <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td><a href="TagNames/PostScript.html">EPS, EPSF, PS</a></td><td>R/W</td><td>[Encapsulated] PostScript Format</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C <a href="TagNames/PostScript.html">PostScript</a>, R <a href="TagNames/Photoshop.html">Photoshop</a></td></tr> <tr><td>EPUB</td><td>R</td><td>Electronic Publication (ZIP/XML-based)</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R XML <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td>ERF</td><td>R/W</td><td>Epson RAW Format (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/Olympus.html">Olympus</a></td></tr> <tr><td><a href="TagNames/EXE.html">EXE, DLL</a></td><td>R</td><td>DOS/Windows executable and library files</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/EXE.html">EXE</a></td></tr> <tr><td><a href="TagNames/EXIF.html">EXIF</a></td><td>R/W/C</td><td>Exchangable Image File Format metadata (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>-</td><td>-</td><td>-</td><td>-</td></tr> <tr><td><a href="TagNames/OpenEXR.html">EXR</a></td><td>R</td><td>Open EXR (Extended Range)</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/OpenEXR.html">OpenEXR</a></td></tr> <tr><td>EXV</td><td>R/W/C</td><td>Exiv2 metadata file (<a href="TagNames/JPEG.html">JPEG</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td><a href="#JPEG">Supported JPEG Meta Information</a></td></tr> <tr><td>F4A, F4B, F4P, F4V</td><td>R/W</td><td>Adobe Flash Player 9+ Audio/Video (<a href="TagNames/QuickTime.html">QuickTime</a>-based)</td><td>R/W<span class=sup>3</span></td><td>R/W<span class=sup>3</span></td><td>R/W/C</td><td>-</td><td>R/W <a href="TagNames/QuickTime.html">QuickTime</a><span class=sup>4</span></td></tr> <tr><td>FFF</td><td>R/W</td><td>Hasselblad Flexible File Format (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>-</td></tr> <tr><td><a href="TagNames/FLIR.html#FFF">FFF</a></td><td>R</td><td>FLIR Systems thermal image File Format</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/FLIR.html#FFF">FLIR</a></td></tr> <tr><td>FLA</td><td>R</td><td>Macromedia/Adobe Flash project (<a href="TagNames/FlashPix.html">FPX</a>-like)</td><td>-</td><td>-</td><td>R</td><td>R</td><td>R <a href="TagNames/FlashPix.html">FlashPix</a></td></tr> <tr><td><a href="TagNames/FLAC.html">FLAC</a></td><td>R</td><td>Free Lossless Audio Codec</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/FLAC.html">FLAC</a> <a href="TagNames/ID3.html">ID3</a></td></tr> <tr><td><a href="TagNames/Flash.html#FLV">FLV</a></td><td>R</td><td>Flash Video</td><td>-</td><td>-</td><td>R</td><td>-</td><td>R <a href="TagNames/Flash.html#FLV">Flash</a></td></tr> <tr><td><a href="TagNames/FLIR.html#FPF">FPF</a></td><td>R</td><td>FLIR Public image Format</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/FLIR.html#FPF">FLIR</a></td></tr> <tr><td><a href="TagNames/FlashPix.html">FPX</a></td><td>R</td><td>FlashPix image</td><td>-</td><td>-</td><td>R</td><td>R</td><td>R <a href="TagNames/FlashPix.html">FlashPix</a></td></tr> <tr><td><a href="TagNames/GIF.html">GIF</a></td><td>R/W</td><td>Compuserve Graphics Interchange Format</td><td>-</td><td>-</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C <a href="TagNames/GIF.html">GIF</a></td></tr> <tr><td><a href="TagNames/ZIP.html#GZIP">GZ, GZIP</a></td><td>R</td><td>GNU ZIP compressed archive</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/ZIP.html#GZIP">ZIP</a></td></tr> <tr><td>HDP, WDP, JXR</td><td>R/W</td><td>Windows HD Photo / Media Photo / JPEG XR (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>-</td></tr> <tr><td><a href="TagNames/Radiance.html">HDR</a></td><td>R</td><td>Radiance RGBE High Dynamic-Range</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Radiance.html">Radiance</a></td></tr> <tr><td><a href="TagNames/HTML.html">HTML, HTM, XHTML</a></td><td>R</td><td>[Extensible] HyperText Markup Language</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/HTML.html">HTML</a></td></tr> <tr><td><a href="TagNames/ICC_Profile.html">ICC, ICM</a></td><td>R/W/C<span class=sup>1</span></td><td>International Color Consortium color profile</td><td>-</td><td>-</td><td>-</td><td>R/W/C</td><td>-</td></tr> <tr><td><a href="TagNames/VCard.html#VCalendar">ICS, ICAL</a></td><td>R</td><td>iCalendar Schedule</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/VCard.html#VCalendar">VCalendar</a></td></tr> <tr><td>IDML</td><td>R</td><td>Adobe InDesign Markup Language (ZIP/XML-based)</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R XML <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td><a href="TagNames/PhaseOne.html">IIQ</a></td><td>R/W</td><td>Phase One Intelligent Image Quality RAW (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/PhaseOne.html">PhaseOne</a></td></tr> <tr><td>IND, INDD, INDT</td><td>R/W</td><td>Adobe InDesign Document/Template</td><td>-</td><td>-</td><td>R/W/C</td><td>-</td><td>-</td></tr> <tr><td>INX</td><td>R</td><td>Adobe InDesign Interchange (XML-based)</td><td>-</td><td>-</td><td>R</td><td>-</td><td>-</td></tr> <tr><td><a href="TagNames/ITC.html">ITC</a></td><td>R</td><td>iTunes Cover Flow artwork</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/ITC.html">ITC</a></td></tr> <tr><td>J2C, JPC</td><td>R</td><td>JPEG 2000 codestream</td><td>R<span class=sup>3</span></td><td>R<span class=sup>3</span></td><td>R</td><td>R</td><td>R <a href="TagNames/Jpeg2000.html">Jpeg2000</a> <a href="TagNames/Photoshop.html">Photoshop</a><span class=sup>3</span></td></tr> <tr><td><a href="TagNames/Jpeg2000.html">JP2, JPF, J2K, JPM, JPX</a></td><td>R/W</td><td>JPEG 2000 image [Compound/Extended]</td><td>R/W/C<span class=sup>3</span></td><td>R/W/C<span class=sup>3</span></td><td>R/W/C</td><td>R</td><td>R/W/C <a href="TagNames/Jpeg2000.html">Jpeg2000</a>, R <a href="TagNames/Photoshop.html">Photoshop</a><span class=sup>3</span></td></tr> <tr><td><a href="TagNames/JPEG.html">JPEG, JPG, JPE</a></td><td>R/W</td><td>Joint Photographic Experts Group image</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td><a href="#JPEG">Supported JPEG Meta Information</a></td></tr> <tr><td>K25</td><td>R</td><td>Kodak DC25 RAW (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R</td><td>R</td><td>R</td><td>R</td><td>-</td></tr> <tr><td>KDC</td><td>R</td><td>Kodak Digital Camera RAW (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R</td><td>R</td><td>R</td><td>R</td><td>R <a href="TagNames/Kodak.html">Kodak</a></td></tr> <tr><td><a href="TagNames/iWork.html">KEY, KTH</a></td><td>R</td><td>Apple iWork '09 Keynote presentation/Theme</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/iWork.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td>LA</td><td>R</td><td>Lossless Audio (<a href="TagNames/RIFF.html">RIFF</a>-based)</td><td>R<span class=sup>3</span></td><td>-</td><td>R</td><td>-</td><td>R <a href="TagNames/RIFF.html">RIFF</a></td></tr> <tr><td><a href="TagNames/Lytro.html">LFP, LFR</a></td><td>R</td><td>Lytro Light Field Picture</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Lytro.html">Lytro</a></td></tr> <tr><td><a href="TagNames/LNK.html">LNK</a></td><td>R</td><td>Microsoft Shell Link (Windows shortcut)</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/LNK.html">LNK</a></td></tr> <tr><td><a href="TagNames/M2TS.html">M2TS, MTS, M2T, TS</a></td><td>R</td><td>MPEG-2 Transport Stream (used for AVCHD video)</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/M2TS.html">M2TS</a> <a href="TagNames/H264.html">H264</a></td></tr> <tr><td>M4A, M4B, M4P, M4V</td><td>R/W</td><td>MPEG-4 Audio/Video (<a href="TagNames/QuickTime.html">QuickTime</a>-based)</td><td>R/W<span class=sup>3</span></td><td>R/W<span class=sup>3</span></td><td>R/W/C</td><td>-</td><td>R/W <a href="TagNames/QuickTime.html">QuickTime</a><span class=sup>4</span></td></tr> <tr><td>MEF</td><td>R/W</td><td>Mamiya (RAW) Electronic Format (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>-</td></tr> <tr><td><a href="TagNames/MIE.html">MIE</a></td><td>R/W/C</td><td>Meta Information Encapsulation (<a href="MIE1.1-20070121.pdf">MIE specification</a>)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C <a href="TagNames/MIE.html">MIE</a></td></tr> <tr><td><a href="TagNames/MIFF.html">MIFF, MIF</a></td><td>R</td><td>Magick Image File Format</td><td>R</td><td>R</td><td>R</td><td>R</td><td>R <a href="TagNames/MIFF.html">MIFF</a> <a href="TagNames/Photoshop.html">Photoshop</a></td></tr> <tr><td><a href="TagNames/Matroska.html">MKA, MKV, MKS</a></td><td>R</td><td>Matroska Audio/Video/Subtitle</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Matroska.html">Matroska</a></td></tr> <tr><td><a href="TagNames/Palm.html">MOBI, AZW, AZW3</a></td><td>R</td><td>Mobipocket electronic book (<a href="TagNames/Palm.html">Palm</a>-based)</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Palm.html">Palm</a> <a href="TagNames/Palm.html#MOBI">MOBI</a></td></tr> <tr><td>MODD</td><td>R</td><td>Sony Picture Motion metadata (XML <a href="TagNames/PLIST.html">PLIST</a>-based)</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/PLIST.html">PLIST</a></td></tr> <tr><td><a href="TagNames/MOI.html">MOI</a></td><td>R</td><td>MOD Information file</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/MOI.html">MOI</a></td></tr> <tr><td><a href="TagNames/Leaf.html">MOS</a></td><td>R/W</td><td>Creo Leaf Mosaic (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R <a href="TagNames/Leaf.html">Leaf</a></td></tr> <tr><td><a href="TagNames/QuickTime.html">MOV, QT</a></td><td>R/W</td><td>Apple QuickTime Movie</td><td>R/W<span class=sup>3</span></td><td>R/W<span class=sup>3</span></td><td>R/W/C</td><td>-</td><td>R/W <a href="TagNames/QuickTime.html">QuickTime</a><span class=sup>4</span></td></tr> <tr><td><a href="TagNames/MPEG.html#Audio">MP3</a></td><td>R</td><td>MPEG-1 layer 3 audio</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/MPEG.html">MPEG</a> <a href="TagNames/ID3.html">ID3</a> <a href="TagNames/APE.html">APE</a></td></tr> <tr><td>MP4</td><td>R/W</td><td>Motion Picture Experts Group version 4 (<a href="TagNames/QuickTime.html">QuickTime</a>-based)</td><td>R/W<span class=sup>3</span></td><td>R/W<span class=sup>3</span></td><td>R/W/C</td><td>-</td><td>R/W <a href="TagNames/QuickTime.html">QuickTime</a><span class=sup>4</span></td></tr> <tr><td><a href="TagNames/MPC.html">MPC</a></td><td>R</td><td>Musepack Audio</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/MPC.html">MPC</a> <a href="TagNames/ID3.html">ID3</a> <a href="TagNames/APE.html">APE</a></td></tr> <tr><td><a href="TagNames/MPEG.html">MPEG, MPG, M2V</a></td><td>R</td><td>Motion Picture Experts Group version 1 or 2</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/MPEG.html">MPEG</a> <a href="TagNames/ID3.html">ID3</a></td></tr> <tr><td>MPO</td><td>R/W</td><td>Extended Multi-Picture format (<a href="TagNames/JPEG.html">JPEG</a> with <a href="TagNames/MPF.html">MPF</a> extensions)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td><a href="#JPEG">Supported JPEG Meta Information</a></td></tr> <tr><td><a href="TagNames/QuickTime.html">MQV</a></td><td>R/W</td><td>Sony Mobile QuickTime Video</td><td>R/W<span class=sup>3</span></td><td>R/W<span class=sup>3</span></td><td>R/W/C</td><td>-</td><td>R/W <a href="TagNames/QuickTime.html">QuickTime</a><span class=sup>4</span></td></tr> <tr><td><a href="TagNames/MinoltaRaw.html">MRW</a></td><td>R/W</td><td>Minolta RAW</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/MinoltaRaw.html">MinoltaRaw</a> <a href="TagNames/Minolta.html">Minolta</a></td></tr> <tr><td><a href="TagNames/MXF.html">MXF</a></td><td>R</td><td>Material Exchange Format</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/MXF.html">MXF</a></td></tr> <tr><td>NEF</td><td>R/W</td><td>Nikon (RAW) Electronic Format (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/Nikon.html">Nikon</a> <a href="TagNames/NikonCapture.html">NikonCapture</a></td></tr> <tr><td><a href="TagNames/iWork.html">NMBTEMPLATE</a></td><td>R</td><td>Apple iWork '09 Numbers Template</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/iWork.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td>NRW</td><td>R/W</td><td>Nikon RAW (2) (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/Nikon.html">Nikon</a> <a href="TagNames/NikonCapture.html">NikonCapture</a></td></tr> <tr><td><a href="TagNames/iWork.html">NUMBERS</a></td><td>R</td><td>Apple iWork '09 Numbers spreadsheet</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/iWork.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td>ODB, ODC, ODF, ODG,<br>ODI, ODP, ODS, ODT</td><td>R</td><td>Open Document Database/Chart/Formula/Graphics/<br>Image/Presentation/Spreadsheet/Text (ZIP/XML-based)</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R XML <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td>OFR</td><td>R</td><td>OptimFROG audio (<a href="TagNames/RIFF.html">RIFF</a>-based)</td><td>R<span class=sup>3</span></td><td>-</td><td>R</td><td>-</td><td>R <a href="TagNames/RIFF.html">RIFF</a></td></tr> <tr><td><a href="TagNames/Ogg.html">OGG, OGV</a></td><td>R</td><td>Ogg bitstream container</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/FLAC.html">FLAC</a> <a href="TagNames/ID3.html">ID3</a> <a href="TagNames/Theora.html">Theora</a> <a href="TagNames/Vorbis.html">Vorbis</a></td></tr> <tr><td>ORF</td><td>R/W</td><td>Olympus RAW Format (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/Olympus.html">Olympus</a></td></tr> <tr><td><a href="TagNames/Font.html">OTF</a></td><td>R</td><td>Open Type Font</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Font.html">Font</a></td></tr> <tr><td>PAC</td><td>R</td><td>Lossless Predictive Audio Compression (<a href="TagNames/RIFF.html">RIFF</a>-based)</td><td>R<span class=sup>3</span></td><td>-</td><td>R</td><td>-</td><td>R <a href="TagNames/RIFF.html">RIFF</a></td></tr> <tr><td><a href="TagNames/iWork.html">PAGES</a></td><td>R</td><td>Apple iWork '09 Pages document</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/iWork.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td><a href="TagNames/PhotoCD.html">PCD</a></td><td>R</td><td>Kodak Photo CD Image Pac</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/PhotoCD.html">PhotoCD</a></td></tr> <tr><td><a href="TagNames/Palm.html">PDB, PRC</a></td><td>R</td><td>Palm Database</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Palm.html">Palm</a></td></tr> <tr><td><a href="TagNames/PDF.html">PDF</a></td><td>R/W</td><td>Adobe Portable Document Format</td><td>R<span class=sup>3</span></td><td>R<span class=sup>3</span></td><td>R/W/C</td><td>R<span class=sup>3</span></td><td>R/W/C <a href="TagNames/PDF.html">PDF</a>, R <a href="TagNames/Photoshop.html">Photoshop</a></td></tr> <tr><td>PEF</td><td>R/W</td><td>Pentax (RAW) Electronic Format (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/Pentax.html">Pentax</a></td></tr> <tr><td><a href="TagNames/Font.html">PFA, PFB</a></td><td>R</td><td>PostScript Font ASCII/Binary</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Font.html">Font</a></td></tr> <tr><td><a href="TagNames/Font.html">PFM</a></td><td>R</td><td>Printer Font Metrics</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Font.html">Font</a></td></tr> <tr><td><a href="TagNames/PGF.html">PGF</a></td><td>R</td><td>Progressive Graphics File</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/PGF.html">PGF</a> <a href="TagNames/PNG.html">PNG</a></td></tr> <tr><td><a href="TagNames/PICT.html">PICT, PCT</a></td><td>R</td><td>Apple Picture file</td><td>-</td><td>-</td><td>-</td><td>R</td><td>R <a href="TagNames/PICT.html">PICT</a> <a href="TagNames/Photoshop.html">Photoshop</a></td></tr> <tr><td><a href="TagNames/PLIST.html">PLIST</a></td><td>R</td><td>Apple Property List (binary and XML formats)</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/PLIST.html">PLIST</a></td></tr> <tr><td><a href="TagNames/Sony.html#PMP">PMP</a></td><td>R</td><td>Sony DSC-F1 Cyber-Shot image</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Sony.html#PMP">Sony</a></td></tr> <tr><td><a href="TagNames/PNG.html">PNG</a>, <a href="TagNames/MNG.html">JNG, MNG</a></td><td>R/W</td><td>Portable/JPEG/Multiple-image Network Graphics</td><td>R/W/C<span class=sup>3</span></td><td>R/W/C<span class=sup>3</span></td><td>R/W/C</td><td>R/W/C</td><td>R/W/C <a href="TagNames/PNG.html">PNG</a></td></tr> <tr><td>PPM, PBM, PGM</td><td>R/W</td><td>Portable Pixel/Bit/Gray Map</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R PPM</td></tr> <tr><td>PPT, PPS, POT</td><td>R</td><td>PowerPoint Presentation/Slideshow/Template (<a href="TagNames/FlashPix.html">FPX</a>-like)</td><td>-</td><td>-</td><td>R</td><td>R</td><td>R <a href="TagNames/FlashPix.html">FlashPix</a></td></tr> <tr><td><a href="TagNames/OOXML.html">POTX, POTM</a></td><td>R</td><td>Office Open XML Presentation Template [Macro-enabled]</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/OOXML.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td><a href="TagNames/OOXML.html">PPSX, PPSM</a></td><td>R</td><td>Office Open XML Presentation Slideshow [Macro-enabled]</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/OOXML.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td><a href="TagNames/OOXML.html">PPTX, PPTM</a></td><td>R</td><td>Office Open XML Presentation [Macro-enabled]</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/OOXML.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td><a href="TagNames/Photoshop.html">PSD, PSB</a></td><td>R/W</td><td>PhotoShop Document / Large Document</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R <a href="TagNames/Photoshop.html">Photoshop</a></td></tr> <tr><td><a href="TagNames/PSP.html">PSP, PSPIMAGE</a></td><td>R</td><td>Paint Shop Pro</td><td>R</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/PSP.html">PSP</a></td></tr> <tr><td><a href="TagNames/QuickTime.html">QTIF, QTI, QIF</a></td><td>R/W</td><td>QuickTime Image File</td><td>R/W<span class=sup>3</span></td><td>R/W<span class=sup>3</span></td><td>R/W/C</td><td>-</td><td>R/W <a href="TagNames/QuickTime.html">QuickTime</a><span class=sup>4</span></td></tr> <tr><td><a href="TagNames/Real.html#Audio">RA</a></td><td>R</td><td>Real Audio</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Real.html#Audio">Real</a> <a href="TagNames/ID3.html">ID3</a></td></tr> <tr><td><a href="TagNames/FujiFilm.html#RAF">RAF</a></td><td>R/W</td><td>FujiFilm RAW Format</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/FujiFilm.html">FujiFilm</a></td></tr> <tr><td><a href="TagNames/Real.html#Metafile">RAM, RPM</a></td><td>R</td><td>Real Audio/Plug-in Metafile</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Real.html#Metafile">Real</a></td></tr> <tr><td><a href="TagNames/ZIP.html#RAR">RAR</a></td><td>R</td><td>RAR Archive</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/ZIP.html#RAR">ZIP</a></td></tr> <tr><td><a href="TagNames/KyoceraRaw.html">RAW</a></td><td>R</td><td>Kyocera Contax N Digital RAW</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/KyoceraRaw.html">KyoceraRaw</a></td></tr> <tr><td><a href="TagNames/PanasonicRaw.html">RAW</a></td><td>R/W</td><td>Panasonic RAW (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/PanasonicRaw.html">PanasonicRaw</a> <a href="TagNames/Panasonic.html">Panasonic</a></td></tr> <tr><td><a href="TagNames/RIFF.html">RIFF, RIF</a></td><td>R</td><td>Resource Interchange File Format</td><td>R<span class=sup>3</span></td><td>-</td><td>R</td><td>-</td><td>R <a href="TagNames/RIFF.html">RIFF</a></td></tr> <tr><td><a href="TagNames/Real.html">RM, RV, RMVB</a></td><td>R</td><td>Real Media/Video [Variable Bitrate]</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Real.html">Real</a></td></tr> <tr><td><a href="TagNames/RSRC.html">RSRC</a></td><td>R</td><td>Mac OS Resource</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/RSRC.html">RSRC</a> <a href="TagNames/Photoshop.html">Photoshop</a> <a href="TagNames/PostScript.html">PostScript</a> <a href="TagNames/Font.html">Font</a></td></tr> <tr><td><a href="TagNames/RTF.html">RTF</a></td><td>R</td><td>Rich Text Format</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/RTF.html">RTF</a></td></tr> <tr><td><a href="TagNames/PanasonicRaw.html">RW2</a></td><td>R/W</td><td>Panasonic RAW 2 (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/PanasonicRaw.html">PanasonicRaw</a> <a href="TagNames/Panasonic.html">Panasonic</a></td></tr> <tr><td><a href="TagNames/PanasonicRaw.html">RWL</a></td><td>R/W</td><td>Leica RAW (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/PanasonicRaw.html">PanasonicRaw</a> <a href="TagNames/Panasonic.html">Panasonic</a></td></tr> <tr><td><a href="TagNames/Rawzor.html">RWZ</a></td><td>R</td><td>Rawzor compressed image</td><td>R</td><td>R</td><td>R</td><td>R</td><td>R <a href="TagNames/Rawzor.html">Rawzor</a></td></tr> <tr><td><a href="TagNames/FLIR.html#AFF">SEQ</a></td><td>R</td><td>FLIR Systems image Sequence</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/FLIR.html#AFF">FLIR</a></td></tr> <tr><td><a href="TagNames/EXE.html#ELF">SO</a></td><td>R</td><td>Unix ELF executable and Shared Object files</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/EXE.html#ELF">EXE</a></td></tr> <tr><td>SR2</td><td>R/W</td><td>Sony RAW 2 (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/Sony.html">Sony</a></td></tr> <tr><td>SRF</td><td>R</td><td>Sony RAW Format (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R</td><td>R</td><td>R</td><td>R</td><td>R <a href="TagNames/Sony.html">Sony</a></td></tr> <tr><td>SRW</td><td>R/W</td><td>Samsung RAW format (<a href="TagNames/EXIF.html">TIFF</a>-based)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/Samsung.html">Samsung</a></td></tr> <tr><td><a href="TagNames/XMP.html#SVG">SVG</a></td><td>R</td><td>Scalable Vector Graphics (XML-based)</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/XMP.html#SVG">SVG</a></td></tr> <tr><td><a href="TagNames/Flash.html">SWF</a></td><td>R</td><td>Shockwave Flash</td><td>-</td><td>-</td><td>R</td><td>-</td><td>R <a href="TagNames/Flash.html">Flash</a></td></tr> <tr><td>THM</td><td>R/W</td><td>Canon Thumbnail (<a href="TagNames/JPEG.html">JPEG</a>)</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td><a href="#JPEG">Supported JPEG Meta Information</a></td></tr> <tr><td><a href="TagNames/OOXML.html">THMX</a></td><td>R</td><td>Office Open XML Theme</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/OOXML.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td><a href="TagNames/EXIF.html">TIFF, TIF</a></td><td>R/W</td><td>Tagged Image File Format</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C <a href="TagNames/GeoTiff.html">GeoTIFF</a><span class=sup>1</span>, R/W <a href="#Trailers">Trailers</a></td></tr> <tr><td><a href="TagNames/Font.html">TTF, TTC</a></td><td>R</td><td>True Type Font/Collection</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Font.html">Font</a></td></tr> <tr><td><a href="TagNames/Torrent.html">TORRENT</a></td><td>R</td><td>BitTorrent description file</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Torrent.html">Torrent</a></td></tr> <tr><td><a href="TagNames/VCard.html">VCF, VCARD</a></td><td>R</td><td>Virtual Card</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/VCard.html">VCard</a></td></tr> <tr><td>VOB</td><td>R</td><td>Video Object (<a href="TagNames/MPEG.html">MPEG</a>-based)</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/MPEG.html">MPEG</a></td></tr> <tr><td><a href="TagNames/CanonVRD.html">VRD</a></td><td>R/W/C<span class=sup>2</span></td><td>Canon DPP Recipe Data</td><td>-</td><td>-</td><td>R/W/C</td><td>-</td><td>R/W/C <a href="TagNames/CanonVRD.html">CanonVRD</a><span class=sup>2</span></td></tr> <tr><td>VSD</td><td>R</td><td>Microsoft Visio Drawing (<a href="TagNames/FlashPix.html">FPX</a>-like)</td><td>-</td><td>-</td><td>R</td><td>R</td><td>R <a href="TagNames/FlashPix.html">FlashPix</a></td></tr> <tr><td>WAV</td><td>R</td><td>Windows digital audio WAVeform (<a href="TagNames/RIFF.html">RIFF</a>-based)</td><td>R<span class=sup>3</span></td><td>-</td><td>R</td><td>-</td><td>R <a href="TagNames/RIFF.html">RIFF</a></td></tr> <tr><td>WEBM</td><td>R</td><td>Google Web Movie (<a href="TagNames/Matroska.html">Matroska</a>-based)</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Matroska.html">Matroska</a></td></tr> <tr><td>WEBP</td><td>R</td><td>Google Web Picture (<a href="TagNames/RIFF.html">RIFF</a>-based)</td><td>R<span class=sup>3</span></td><td>-</td><td>R</td><td>-</td><td>R <a href="TagNames/RIFF.html">RIFF</a></td></tr> <tr><td>WMA, WMV</td><td>R</td><td>Windows Media Audio/Video (<a href="TagNames/ASF.html">ASF</a>-based)</td><td>-</td><td>-</td><td>R</td><td>-</td><td>R <a href="TagNames/ASF.html">ASF</a></td></tr> <tr><td>WV</td><td>R</td><td>WavePack lossless audio (<a href="TagNames/RIFF.html">RIFF</a>-based)</td><td>R<span class=sup>3</span></td><td>-</td><td>R</td><td>-</td><td>R <a href="TagNames/RIFF.html">RIFF</a></td></tr> <tr><td><a href="TagNames/SigmaRaw.html">X3F</a></td><td>R/W</td><td>Sigma/Foveon RAW</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W <a href="TagNames/Sigma.html">Sigma</a>, R <a href="TagNames/SigmaRaw.html">SigmaRaw</a></td></tr> <tr><td><a href="TagNames/GIMP.html">XCF</a></td><td>R</td><td>GIMP native image format</td><td>R</td><td>R</td><td>R</td><td>R</td><td>R <a href="TagNames/GIMP.html">GIMP</a></td></tr> <tr><td>XLS, XLT</td><td>R</td><td>Microsoft Excel Spreadsheet/Template (<a href="TagNames/FlashPix.html">FPX</a>-like)</td><td>-</td><td>-</td><td>R</td><td>R</td><td>R <a href="TagNames/FlashPix.html">FlashPix</a></td></tr> <tr><td><a href="TagNames/OOXML.html">XLSX, XLSM, XLSB</a></td><td>R</td><td>Office Open XML Spreadsheet [Macro-enabled/Binary]</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/OOXML.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td><a href="TagNames/OOXML.html">XLTX, XLTM</a></td><td>R</td><td>Office Open XML Spreadsheet Template [Macro-enabled]</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/OOXML.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr> <tr><td><a href="TagNames/XMP.html">XMP</a></td><td>R/W/C</td><td>Extensible Metadata Platform sidecar file</td><td>-</td><td>-</td><td>R/W/C</td><td>-</td><td>-</td></tr> <tr><td><a href="TagNames/ZIP.html">ZIP</a></td><td>R</td><td>ZIP archive</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/ZIP.html">ZIP</a></td></tr> </table><span class=sm><span class=sup>1</span> Block write only, <span class=sup>2</span> Block create only, <span class=sup>3</span> Non-standard format, <span class=sup>4</span> Writes only some date/time tags, <span class=sup>5</span> Only writable for PostScript-format file type, <span class=sup>6</span> Only writable for PDF-format file type</span></blockquote> <h3><a name="JPEG">Supported JPEG Meta Information</a></h3> <p>ExifTool can <b>R</b>ead, <b>W</b>rite and/or <b>C</b>reate the following types of meta information in JPEG images:</p> <blockquote><table class='norm tight sm bm'> <tr><th>JPEG Meta Information</th><th>Support</th><th>Description</th></tr> <tr><td>APP0 - <a href="TagNames/JFIF.html">JFIF</a></td><td>R/W/C</td><td>JPEG File Interchange Format</td></tr> <tr><td>APP0 - <a href="TagNames/JFIF.html#Extension">JFXX</a></td><td>R</td><td>Extended JFIF</td></tr> <tr><td>APP0 - <a href="TagNames/CanonRaw.html">CIFF</a></td><td>R/W</td><td><a href="canon_raw.html">Camera Image File Format</a> (used by some Canon models)</td></tr> <tr><td>APP0 - <a href="TagNames/JPEG.html#AVI1">AVI1</a></td><td>R</td><td>JPEG AVI information</td></tr> <tr><td>APP0 - <a href="TagNames/JPEG.html#Ocad">Ocad</a></td><td>R</td><td>Photobucket Ocad segment</td></tr> <tr><td>APP1 - <a href="TagNames/EXIF.html">EXIF</a></td><td>R/W/C</td><td>Exchangeable Image File Format (including maker notes)</td></tr> <tr><td>APP1 - <a href="TagNames/XMP.html">XMP</a></td><td>R/W/C</td><td>Extensible Metadata Platform (multi-segment)</td></tr> <tr><td>APP1 - <a href="TagNames/Casio.html#QVCI">QVCI</a></td><td>R</td><td>Casio QV-7000SX QVCI information</td></tr> <tr><td>APP1 - <a href="TagNames/FLIR.html#FFF">FLIR</a></td><td>R</td><td>FLIR thermal imaging data (multi-segment)</td></tr> <tr><td>APP2 - <a href="TagNames/ICC_Profile.html">ICC</a></td><td>R/W/C</td><td>International Color Consortium (multi-segment)</td></tr> <tr><td>APP2 - <a href="TagNames/FlashPix.html">FPXR</a></td><td>R</td><td>FlashPix Ready (multi-segment)</td></tr> <tr><td>APP2 - <a href="TagNames/MPF.html">MPF</a></td><td>R</td><td>Multi-Picture Format</td></tr> <tr><td>APP2 - PreviewImage</td><td>R</td><td>Samsung/GE APP2 preview image (multi-segment)</td></tr> <tr><td>APP3 - <a href="TagNames/Kodak.html#Meta">Kodak Meta</a></td><td>R/W</td><td>Kodak Meta information (EXIF-like)</td></tr> <tr><td>APP3 - <a href="TagNames/Stim.html">Stim</a></td><td>R</td><td>Stereo Still Image format</td></tr> <tr><td>APP3 - PreviewImage</td><td>R</td><td>Samsung/HP preview image (multi-segment)</td></tr> <tr><td>APP4 - <a href="TagNames/Scalado.html">Scalado</a></td><td>R</td><td>(presumably written by <a href="http://www.scalado.com/">Scalado</a> mobile software)</td></tr> <tr><td>APP4 - <a href="TagNames/FlashPix.html">FPXR</a></td><td>R</td><td>FlashPix Ready in non-standard location (multi-segment)</td></tr> <tr><td>APP4 - PreviewImage</td><td>R</td><td>(continued from APP3)</td></tr> <tr><td>APP5 - <a href="TagNames/Ricoh.html#RMETA">Ricoh RMETA</a></td><td>R</td><td>Ricoh custom fields</td></tr> <tr><td>APP5 - PreviewImage</td><td>R</td><td>(continued from APP4)</td></tr> <tr><td>APP6 - <a href="TagNames/JPEG.html#EPPIM">EPPIM</a></td><td>R</td><td>Toshiba PrintIM</td></tr> <tr><td>APP6 - <a href="TagNames/JPEG.html#NITF">NITF</a></td><td>R</td><td>National Imagery Transmission Format</td></tr> <tr><td>APP6 - <a href="TagNames/HP.html#TDHD">HP TDHD</a></td><td>R</td><td>Hewlett-Packard Photosmart R837 TDHD information</td></tr> <tr><td>APP7 - <a href="TagNames/Pentax.html">Pentax</a></td><td>R</td><td>Pentax APP7 maker notes</td></tr> <tr><td>APP7 - <a href="TagNames/Qualcomm.html">Qualcomm</a></td><td>R</td><td>Qualcomm Camera Attributes</td></tr> <tr><td>APP8 - <a href="TagNames/JPEG.html#SPIFF">SPIFF</a></td><td>R</td><td>Still Picture Interchange File Format</td></tr> <tr><td>APP9 - <a href="TagNames/JPEG.html#MediaJukebox">Media Jukebox</a></td><td>R</td><td>Media Jukebox XML information</td></tr> <tr><td>APP10 - Comment</td><td>R</td><td>PhotoStudio Unicode Comment</td></tr> <tr><td>APP11 - <a href="TagNames/JPEG.html#HDR">JPEG-HDR</a></td><td>R</td><td>JPEG-HDR compressed ratio image</td></tr> <tr><td>APP12 - <a href="TagNames/APP12.html#PictureInfo">Picture Info</a></td><td>R</td><td>ASCII-based Picture Information</td></tr> <tr><td>APP12 - <a href="TagNames/APP12.html#Ducky">Ducky</a></td><td>R/W/C</td><td>Photoshop "Save for Web"</td></tr> <tr><td>APP13 - <a href="TagNames/Photoshop.html">Photoshop IRB</a></td><td>R/W/C</td><td>Image Resource Block (multi-segment, includes <a href="TagNames/IPTC.html">IPTC</a>)</td></tr> <tr><td>APP13 - <a href="TagNames/JPEG.html#AdobeCM">Adobe CM</a></td><td>R</td><td>Adobe Color Management</td></tr> <tr><td>APP14 - <a href="TagNames/JPEG.html#Adobe">Adobe</a></td><td>R/W/C</td><td>Adobe DCT filter</td></tr> <tr><td>APP15 - <a href="TagNames/JPEG.html#GraphConv">GraphicConverter</a></td><td>R</td><td>GraphicConverter quality</td></tr> <tr><td>COM</td><td>R/W/C</td><td>JPEG Comment (multi-segment)</td></tr> <tr><td>DQT</td><td>R</td><td>(used to calculate the <a href="TagNames/Extra.html">Extra:JPEGDigest</a> tag value)</td></tr> <tr><td><a href="TagNames/JPEG.html#SOF">SOF</a></td><td>R</td><td>JPEG Start Of Frame</td></tr> <tr><th colspan=3><a name="Trailers">Trailers <span class=sup>1</span></a></th></tr> <tr><td><a href="TagNames/AFCP.html">AFCP trailer</a></td><td>R/W</td><td>AXS File Concatenation Protocol (includes <a href="TagNames/IPTC.html">IPTC</a>)</td></tr> <tr><td><a href="TagNames/CanonVRD.html">CanonVRD trailer</a></td><td>R/W/C</td><td>Canon DPP Recipe Data (includes <a href="TagNames/CanonVRD.html#DR4">DR4</a>)</td></tr> <tr><td><a href="TagNames/FotoStation.html">FotoStation trailer</a></td><td>R/W</td><td>FotoWare FotoStation (includes <a href="TagNames/IPTC.html">IPTC</a>)</td></tr> <tr><td><a href="TagNames/PhotoMechanic.html">PhotoMechanic trailer</a></td><td>R/W</td><td>Camera Bits Photo Mechanic</td></tr> <tr><td><a href="TagNames/MIE.html">MIE trailer</a></td><td>R/W</td><td><a href="MIE1.1-20070121.pdf">Meta Information Encapsulation</a></td></tr> <tr><td><a href="TagNames/Samsung.html#Trailer">Samsung trailer</a></td><td>R</td><td>Samsung Galaxy trailer</td></tr> <tr><td>PreviewImage trailer</td><td>R/W/C</td><td>(preview image written after JPEG EOI)</td></tr> </table><span class=sm><span class=sup>1</span> All trailers except Samsung and PreviewImage also have R/W support in TIFF images.</span></blockquote> <h2><a name="system">System Requirements</a></h2> <p>Requires Perl 5.004 or later. No other libraries or software required.</p> <p><b>Windows users:</b> A <a href="#alone">stand-alone Windows executable</a> version of ExifTool is available which doesn't require Perl. You can also use the pure Perl version if you already have Perl installed. (You can get a good, free Perl interpreter from <a href="http://www.activestate.com/activeperl/">activeperl.com</a>.)</p> <p><b>Everyone else (Mac, Unix, etc):</b> Don't worry, you already have Perl installed.</p> <h2><a name="running">Running ExifTool</a></h2> <p>The <a href="exiftool_pod.html">exiftool application</a> provides a convenient command-line interface for the <a href="ExifTool.html">Image::ExifTool</a> Perl package (both included in the full distribution). Once you have downloaded and extracted the distribution, you can immediately run exiftool (without building or installing) by typing "<code><i>DIR</i>/exiftool <i>FILE</i></code>" (or "<code>perl <i>DIR</i>/exiftool <i>FILE</i></code>" in Windows), where <code><i>DIR</i></code> is the exiftool directory and <code><i>FILE</i></code> is the name of an image file, including directory name. Read the <a href="install.html">installation instructions</a> or the README file included in the full distribution for help installing ExifTool.</p> <p>Many command-line options are available to allow you to access a wide range of features. Run exiftool with no arguments for a <a href="exiftool_pod.html">complete list of available options with examples</a>.</p> <h3>Running in Windows</h3> <p><b>i) From the command line:</b></p> <p>The Perl application ("<code>exiftool</code>") is run by typing "<code>perl exiftool</code>". Alternately, you may be able to rename it to "<code>exiftool.pl</code>" and type "<code>exiftool.pl</code>", but this requires that the proper Windows associations have been made for the the "<code>.pl</code>" extension.</p> <p>The stand-alone version ("<code>exiftool(-k).exe</code>") should be renamed to "<code>exiftool.exe</code>" to allow it to be run by typing "<code>exiftool</code>" at the command line.</p> <p>If the exiftool executable ("<code>exiftool.pl</code>" or "<code>exiftool.exe</code>") is not in the current directory or your system PATH, then its directory must be specified on the command line (eg. by typing "<code>c:\path_to_exiftool\exiftool.pl</code>" or "<code>c:\path_to_exiftool\exiftool</code>").</p> <p>Note that when typing commands in the "cmd.exe" shell, you should use double quotes instead of single quotes as shown in some examples.</p> <p><b>ii) Stand-alone version in the Windows GUI:</b></p> <p>Double-click on "<code>exiftool(-k).exe</code>" to read the application documentation, or drag-and-drop files and folders to run exiftool on the selected files.</p> <p>Simple options may be added inside brackets in the name of the stand-alone executable. (But note that the characters <code>/\?*:|"&lt;&gt;</code> may not be used because they are invalid in Windows file names.) In this way, the behaviour of the drag-and-drop application can be customized. For example:</p> <blockquote><table class=norm> <tr><th>Executable Name</th><th>Operation</th></tr> <tr><td><pre>exiftool(-k).exe</pre></td> <td>Print meta information in window and pause before terminating.</td></tr> <tr><td><pre>exiftool(-k -a -u -g1 -w txt).exe</pre></td> <td>Generate output "<code>.txt</code>" files with detailed meta information.</td></tr> <tr><td><pre>exiftool(-k -o %d%f.xmp).exe</pre></td> <td>Generate sidecar "<code>.xmp</code>" files.</td></tr> <tr><td><pre>exiftool(-copyright='Phil Harvey').exe</pre></td> <td>Add copyright information (and don't pause before terminating).</td></tr> </table></blockquote> <p><b>Hint:</b> Options may also be added to the "Target" property of a Windows shortcut for the executable. Using a shortcut has 3 advantages over adding options in the file name: 1) different shortcuts may be created without requiring multiple copies of the executable, 2) characters which are invalid in file names may be used, and 3) the shortcuts can be given more meaningful (and convenient) file names.</p> <p>As well, it may be useful to increase the window and buffer sizes to display more information: Right-click on the window's title bar then select "Properties" from the menu and change the window layout settings.</p> <h2><a name="output">Example Output</a></h2> <blockquote> <table width='100%'><tr valign='top'><td> &gt; <code>exiftool -h -canon pics/IMG_0315.JPG</code><br>&nbsp; <!-- t/images/Canon.jpg --> <table class='box sm tight'> <tr><td>File Name</td><td>Canon.jpg</td></tr> <tr><td>Camera Model Name</td><td>Canon EOS DIGITAL REBEL</td></tr> <tr><td>Date/Time Original</td><td>2003:12:04 06:46:52</td></tr> <tr><td>Shooting Mode</td><td>Bulb</td></tr> <tr><td>Shutter Speed</td><td>4</td></tr> <tr><td>Aperture</td><td>14.0</td></tr> <tr><td>Metering Mode</td><td>Center-weighted average</td></tr> <tr><td>Exposure Compensation</td><td>0</td></tr> <tr><td>ISO</td><td>100</td></tr> <tr><td>Lens</td><td>18.0 - 55.0 mm</td></tr> <tr><td>Focal Length</td><td>34.0 mm</td></tr> <tr><td>Image Size</td><td>8x8</td></tr> <tr><td>Quality</td><td>RAW</td></tr> <tr><td>Flash</td><td>No Flash</td></tr> <tr><td>White Balance</td><td>Auto</td></tr> <tr><td>Focus Mode</td><td>Manual Focus (3)</td></tr> <tr><td>Contrast</td><td>+1</td></tr> <tr><td>Sharpness</td><td>+1</td></tr> <tr><td>Saturation</td><td>+1</td></tr> <tr><td>Color Tone</td><td>Normal</td></tr> <tr><td>Color Space</td><td>sRGB</td></tr> <tr><td>File Size</td><td>2.6 kB</td></tr> <tr><td>File Number</td><td>118-1861</td></tr> <tr><td>Drive Mode</td><td>Continuous Shooting</td></tr> <tr><td>Owner Name</td><td>Phil Harvey</td></tr> <tr><td>Serial Number</td><td>0560018150</td></tr> </table> </td><td> &gt; <code>exiftool -lang de -h -canon t/images/Canon.jpg</code><br>&nbsp; <!-- t/images/Canon.jpg --> <table class='box sm tight'> <tr><td>Dateiname</td><td>Canon.jpg</td></tr> <tr><td>Kameramodell</td><td>Canon EOS DIGITAL REBEL</td></tr> <tr><td>Erstellungsdatum/-uhrzeit</td><td>2003:12:04 06:46:52</td></tr> <tr><td>Aufnahmemodus</td><td>Bulb</td></tr> <tr><td>Belichtungsdauer</td><td>4</td></tr> <tr><td>Blende</td><td>14.0</td></tr> <tr><td>Belichtungsmessmethode</td><td>Mittenbetont</td></tr> <tr><td>Belichtungskorrektur</td><td>0</td></tr> <tr><td>ISO-Empfindlichkeit</td><td>100</td></tr> <tr><td>Objektiv</td><td>18.0 - 55.0 mm</td></tr> <tr><td>Brennweite</td><td>34.0 mm</td></tr> <tr><td>Bildgr&ouml;&szlig;e</td><td>8x8</td></tr> <tr><td>Bildqualit&auml;t</td><td>RAW</td></tr> <tr><td>Blitz</td><td>Blitz wurde nicht ausgel&ouml;st</td></tr> <tr><td>Wei&szlig;abgleich</td><td>Automatisch</td></tr> <tr><td>Fokus-Modus</td><td>Manueller Fokus (3)</td></tr> <tr><td>Kontrast</td><td>+1</td></tr> <tr><td>Sch&auml;rfe</td><td>+1</td></tr> <tr><td>Farbs&auml;ttigung</td><td>+1</td></tr> <tr><td>Farbton</td><td>Normal</td></tr> <tr><td>Farbraum</td><td>sRGB</td></tr> <tr><td>Dateigr&ouml;&szlig;e</td><td>2.6 kB</td></tr> <tr><td>Dateinummer</td><td>118-1861</td></tr> <tr><td>Aufnahmeart</td><td>Serienaufnahme</td></tr> <tr><td>Name des Besitzers</td><td>Phil Harvey</td></tr> <tr><td>Seriennummer</td><td>0560018150</td></tr> </table> </td></tr></table> </blockquote> <h3>Verbose and HtmlDump Output</h3> <p>The <a href="verbose.html">Verbose</a> (<code>-v</code>) and <a href="htmldump.html">HtmlDump</a> (<code>-htmlDump</code>) options print additional information that can be very useful for debugging or when decoding new tags.</p> <h2><a name="tagnames">Tag Names Explained</a></h2> <p>A tag name is a "handle" that is used to refer to a specific piece of meta information. Tag names are entered on the command line with a leading '<code>-</code>', in the order you want them displayed. Case is not significant. The tag name may be prefixed by a <a href="#groups">group name</a> (separated by a colon) to identify a specific information type or location. A special tag name of "<code>All</code>" may be used to represent all tags, or all tags in a specified group. For example:</p> <blockquote><pre> exiftool -filename -imagesize -exif:fnumber -xmp:all image.jpg </pre></blockquote> <p>A complete list of <a href="TagNames/index.html">ExifTool Tag Names</a> accompanies this documentation. As well, current lists of available tag names and writable tag names may be obtained using the exiftool <code>-list</code> and <code>-listw</code> options. But perhaps the easiest way to determine a tag name is to use the <code>-s</code> option to print the tag names instead of descriptions for all information in a file. It may also be helpful to use the <code>-G</code> option to display the group names, and the <code>-H</code> or <code>-D</code> option to print the numerical tag ID's for reference.</p> <p><b>Notes:</b></p> <ol><li>Tag names sometimes differ from their descriptions. Use the <code>-s</code> command-line option to see the actual tag names instead of the descriptions shown when extracting information.</li> <li>When extracting information, tags will not appear in the output unless they exist in the file, even if they are specified on the command line. The <code>-f</code> option may be used to force all specified tags to be displayed (not including tags specified with wildcards or by <code>-GROUP:all</code>).</li> <li>Information for a given tag name may occur in multiple locations within a single file. By default these duplicate tags are suppressed, but the <code>-a</code> option may be used to extract all tags.</li> <li>Tag names may be suffixed by a '<code>#</code>' character to disable the print conversion on a per-tag basis. See the <a href="exiftool_pod.html#item_n">-n option</a> in the application documentation for more information.</li> </ol> <h3><a name="shortcut">Shortcut Tags</a></h3> <p>Shortcut tags represent one or more other tags, and are used like any other tag when reading, writing or copying information.</p> <p>ExifTool defines <a href="TagNames/Shortcuts.html">a few shortcut tags</a> in the Image::ExifTool::Shortcuts module, and allows users to define their own shortcuts in a <a href="config.html">configuration file</a> called "<code>.ExifTool_config</code>" in their home directory or exiftool application directory. Here is a simple example that defines two shortcuts:</p> <blockquote><table class=box><tr><td><pre class=blk> %Image::ExifTool::UserDefined::Shortcuts = ( MyShortcut =&gt; ['createdate','exposuretime','aperture'], MyAlias =&gt; 'FocalLengthIn35mmFormat', ); </pre></td></tr></table></blockquote> <p>In this example, MyShortcut is a shortcut for the CreateDate, ExposureTime and Aperture tags, and MyAlias is a shortcut for FocalLengthIn35mmFormat.</p> <p>The current shortcuts may be listed with the <code>-list</code> option.</p> <p>The <code>~/.ExifTool_config</code> file may also be used to define new tags. For more information about the configuration file, see the <a href="config.html">sample configuration file</a> included with the ExifTool distribution.</p> <p><b>Windows tip:</b> You may have difficulty generating a filename beginning with a '<code>.</code>' in the Windows GUI, but it can be done with the "<code>rename</code>" command at the cmd.exe prompt.</p> <h2><a name="groups">Tag Groups</a></h2> <p>ExifTool classifies tags into groups in five different families. These groups are:</p> <blockquote><table class=norm> <tr><th>Family</th><th>Group Names</th></tr> <tr><td><b>0 (Information&nbsp;Type)</b></td> <td class=sm>AFCP, AIFF, APE, APP0, APP1, APP11, APP12, APP13, APP14, APP15, APP4, APP5, APP6, APP8, ASF, Audible, CanonVRD, Composite, DICOM, DNG, DV, DjVu, Ducky, EXE, EXIF, ExifTool, FLAC, FLIR, File, Flash, FlashPix, Font, FotoStation, GIF, GIMP, GeoTiff, H264, HTML, ICC_Profile, ID3, IPTC, ITC, JFIF, JPEG, Jpeg2000, LNK, Leaf, Lytro, M2TS, MIE, MIFF, MNG, MOI, MPC, MPEG, MPF, MXF, MakerNotes, Matroska, Meta, Ogg, OpenEXR, PDF, PICT, PLIST, PNG, PSP, Palm, PanasonicRaw, PhotoCD, PhotoMechanic, Photoshop, PostScript, PrintIM, QuickTime, RAF, RIFF, RSRC, RTF, Radiance, Rawzor, Real, SVG, SigmaRaw, Stim, Theora, Torrent, VCard, Vorbis, XML, XMP, ZIP </td></tr> <tr><td><b>1&nbsp;(Specific&nbsp;Location)</b></td> <td class=sm>AC3, AFCP, AIFF, APE, ASF, AVI1, Adobe, AdobeCM, AdobeDNG, Apple, Audible, CIFF, Canon, CanonCustom, CanonRaw, CanonVRD, Casio, Chapter#, Composite, DICOM, DNG, DV, DjVu, DjVu-Meta, Ducky, EPPIM, EXE, EXIF, ExifIFD, ExifTool, FLAC, FLIR, File, Flash, FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GPS, GeoTiff, GlobParamIFD, GraphConv, H264, HP, HTC, HTML, HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv, ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view, ICC_Profile, ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4, IFD0, IFD1, IPTC, IPTC#, ITC, InteropIFD, JFIF, JPEG, JPEG-HDR, JVC, Jpeg2000, KDC_IFD, Kodak, KodakBordersIFD, KodakEffectsIFD, KodakIFD, KyoceraRaw, LNK, Leaf, LeafSubIFD, Leica, Lytro, M2TS, MAC, MIE-Audio, MIE-Camera, MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo, MIE-Image, MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient, MIE-Preview, MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MNG, MOBI, MOI, MPC, MPEG, MPF0, MPImage, MXF, MakerNotes, MakerUnknown, Matroska, MediaJukebox, MetaIFD, Microsoft, Minolta, MinoltaRaw, Motorola, NITF, Nikon, NikonCapture, NikonCustom, NikonScan, Nintendo, Ocad, Ogg, Olympus, OpenEXR, PDF, PICT, PNG, PNG-pHYs, PSP, Palm, Panasonic, PanasonicRaw, Pentax, PhaseOne, PhotoCD, PhotoMechanic, Photoshop, PictureInfo, PostScript, PreviewIFD, PrintIM, ProfileIFD, Qualcomm, QuickTime, RAF, RAF2, RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real, Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4, Real-RA5, Real-RJMD, Reconyx, Ricoh, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD, System, Theora, Torrent, Track#, VCard, VCalendar, Version0, Vorbis, XML, XMP, XMP-DICOM, XMP-GPano, XMP-MP, XMP-MP1, XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album, XMP-apple-fi, XMP-aux, XMP-cc, XMP-cell, XMP-crs, XMP-dc, XMP-dex, XMP-digiKam, XMP-dwc, XMP-exif, XMP-exifEX, XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro, XMP-microsoft, XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-pdf, XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-prism, XMP-prl, XMP-pur, XMP-rdf, XMP-swf, XMP-tiff, XMP-x, XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpMM, XMP-xmpNote, XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg, ZIP </td></tr> <tr><td><b>2&nbsp;(Category)</b></td> <td>Audio, Author, Camera, Document, ExifTool, Image, Location, Other, Preview, Printing, Time, Unknown, Video </td></tr> <tr><td><b>3&nbsp;(Document&nbsp;Number)</b></td> <td>Doc#, Main </td></tr> <tr><td><b>4&nbsp;(Instance&nbsp;Number)</b></td> <td>Copy# </td></tr> </table></blockquote> <p>The exiftool output can be organized based on these groups using the <code>-g</code> or <code>-G</code> option. See the <a href="ExifTool.html#GetGroup">GetGroup</a> function in the ExifTool library for a description of the group families.</p> <h2><a name="writing">Writing Meta Information</a></h2> <p>When writing information, ExifTool preserves the original file by adding "<code>_original</code>" to the file name. Be sure to keep a copy of the original, or thoroughly validate the new file before erasing the original. (<a href="writing.html">Read here</a> for some ramblings on the subject of writing meta information.)</p> <h3>Syntax</h3> <p>Tag values are written rather than being extracted if any tag name ends with a '<code>=</code>' symbol (or if the <code>-tagsFromFile</code> or <code>-geotag</code> options are used). The '<code>=</code>' may be prefixed by '<code>+</code>', '<code>-</code>' or '<code>&lt;</code>' to add a value, remove a value or set a value from file. The following table outlines the different write syntaxes:</p> <blockquote><table class=norm> <tr><th>Syntax</th><th>Result</th></tr> <tr><td>-TAG=</td><td>Deletes all occurrences of TAG</td></tr> <tr><td>-all=</td><td>Deletes all meta information! <sup>&dagger;</sup></td></tr> <tr><td>-GROUP:TAG=</td><td>Deletes TAG only in specified group</td></tr> <tr><td>-GROUP:all=</td><td>Deletes all information in specified group</td></tr> <tr><td>-[GROUP:]TAG=VALUE</td><td>Sets value of TAG (only in GROUP if specified)</td></tr> <tr><td>-[GROUP:]TAG+=VALUE</td><td>Adds item to a list, shifts a date/time, or increments a number</td></tr> <tr><td>-[GROUP:]TAG-=VALUE</td><td>Removes item from a list, shifts a date/time, or deletes TAG if it has the specified value</td></tr> <tr><td>-[GROUP:]TAG&lt;=FILE</td><td>Sets tag value from contents of specified file</td></tr> </table><sup>&dagger;</sup> See the <a href="#limitations">Writer Limitations</a> for some limitations of this feature.</blockquote> <p>Quotes are required around VALUE if it contains spaces or other special characters, and around the whole argument if the '<code>&lt;=</code>' syntax is used (to prevent shell redirection).</p> <p>A special feature allows the print conversion to be disabled on a per-tag basis by suffixing any tag name (including '<code>all</code>') with the '<code>#</code>' character. This has the same effect as the <code>-n</code> option, but for a single tag. See the <a href="exiftool_pod.html#item_n">-n option</a> in the application documentation for more details.</p> <p><b>Note:</b> Changes to PDF files are reversible because the original metadata is never actually deleted from these files. See the <a href="TagNames/PDF.html">PDF Tags documentation</a> for details.</p> <h3>Group Priorities</h3> <p>ExifTool prioritizes the following types of meta information when writing:</p> <blockquote> <b>1)</b> EXIF, &nbsp; <b>2)</b> IPTC, &nbsp; <b>3)</b> XMP </blockquote> <p>Many tag names are valid for more than one of these groups. If a group name is not specified when writing information, then the information is added only to the highest priority group for which the tag name is valid (however, the information is updated in all groups where the tag already existed). The priority of the groups is given by the list above. Specifically, this means that new information is added preferentially to the EXIF group, or to the IPTC group if no corresponding EXIF tag exists, or finally to the XMP group.</p> <p>Alternatively, information may be written to a specific group only, bypassing these priorities, by providing a group name for the tag. The "<a href="#writing">Writing Meta Information</a>" section above gave the syntax rules for exiftool command-line arguments to do this. Any family 0, 1 or 2 group name may be used when writing information, although not all groups are writable.</p> <h3>The "-tagsFromFile" Option</h3> <p>A special ExifTool option allows copying tags from one file to another. The command-line syntax for doing this is "<code>-tagsFromFile <i>SRCFILE</i></code>". Any tags specified after this option on the command line are extracted from source file and written to the destination file. If no tags are specified, then all writable tags are copied. This option is very simple, yet very powerful. Depending on the formats of the source and destination files, some of tags read may not be valid in the destination file, in which case they aren't written.</p> <p>This option may also be used to transfer information between different tags within a single image or between different images. See the <a href="exiftool_pod.html#item__2dtagsfromfile_srcfile_or_fmt">-tagsFromFile option</a> in the application documentation for more details.</p> <h2><font color='#cc0000'><a name="limitations">Writer Limitations</a></font></h2> <ul> <li>ExifTool will <b>not rewrite a file if it detects a significant problem</b> with the file format.</li> <li>ExifTool has been tested with a wide range of different images, but since it is not possible to test it with every known image type, <b>there is the possibility that it will corrupt some files</b>. Be sure to keep backups of your files.</li> <li>Even though ExifTool does some validation of the information written, it is still <b>possible to write illegal values</b> which may cause problems when reading the images with other software. So take care to validate the information you are writing.</li> <li>ExifTool is <b>not guaranteed to remove metadata completely</b> from a file when attempting to delete all metadata. For JPEG images, all APP segments (except <a href="TagNames/JPEG.html#Adobe">Adobe APP14</a>, which is not removed by default) and trailers are removed which effectively removes all metadata, but for other formats the results are less complete: <ul> <li>JPEG - APP segments (except <a href="TagNames/JPEG.html#Adobe">Adobe APP14</a>) and trailers are removed.</li> <li>TIFF - XMP, IPTC and the ExifIFD are removed, but some EXIF may remain in IFD0.</li> <li>PNG - Only iTXt, tEXt and zTXt chunks (including XMP) are removed.</li> <li>PDF - The original metadata is never actually removed.</li> <li>PS - Only some PostScript and XMP may be deleted.</li> <li>MOV/MP4 - Only XMP is deleted.</li> <li>RAW formats - It is not recommended to remove all metadata from RAW images because this will likely remove some proprietary information that is necessary for proper rendering of the image.</li> </ul></li> </ul> <h2><font color='#cc6600'><a name="problems">Known Problems</a></font></h2> <ul> <li>In <b>Windows</b>, ExifTool will not process files with <b>Unicode characters in the file name</b>. This is due to an underlying lack of support for Unicode filenames in the Windows standard C I/O libraries. <i class=grn>[This deficiency was addressed in ExifTool 9.79, and ExifTool now supports Windows Unicode file names with some exceptions. See the <a href="exiftool_pod.html#windows_unicode_file_names">WINDOWS UNICODE FILE NAMES</a> section of the application documentation for details.]</i></li> <li>Memory available to ExifTool in the <b>Windows EXE version</b> is limited to a few hundred MB. This limitation has been known to cause <b>unreasonably long processing times</b> (almost 7 minutes) for some large EPS files (> 200 MB) which are processed much faster by the Perl version (&lt; 6 seconds).</li> <li><b>Apple</b> Spotlight and Preview (OS X 10.8.5) and <b>Adobe</b> Photoshop CC (version 14.0) <b>ignore XMP in PNG images</b> if it comes after the image data, which is where ExifTool adds new XMP. This should be considered as a bug in the Apple and Adobe software since XMP is allowed to exist after the image data according to the XMP and PNG specifications. <i class=grn>[ExifTool 9.40 provides the <a href="ExifTool.html#PNGEarlyXMP">PNGEarlyXMP API option</a> to allow writing XMP before the IDAT chunk, but there are caveats associated with its use]</i></li> <li>There is a bug in the <b>Apple</b> RAW file support (OS X 10.4.11) which prevents some edited <b>Pentax PEF</b> images from being displayed properly. Other software such as the Pentax Silkypix software and dcraw have no problems with these images. <i class=grn>[This bug is fixed in OS X 10.5.4]</i></li> <li>There is a bug in a number of <b>Adobe</b> utilities which causes some edited <b>Sony ARW</b> images to be displayed with the wrong tone curve. This problem has been observed in Photoshop CS4 Camera Raw 5.6, DNG Converter 5.6 and Lightroom 2.6 with ARW images from the A500, A550, A700, A850 and A900. Other software such as the Sony IDC utility, Apple RAW utilities, dcraw and Capture One have no problems with edited images. <i class=grn>[This bug is fixed in Camera Raw 6.3 and LR 3.3]</i></li> </ul> <h2><font color='#cc6600'><a name="security">Security Issues</a></font></h2> <p>Some ExifTool options (<code>-if</code>, <code>-p</code>, and copying arguments like <code>"-DSTTAG&lt;STR"</code>) have the ability to execute Perl code from within command-line arguments. This may be a security problem if ExifTool is executed from another application that blindly passes untrusted file names on the command line (since they may be interpreted as ExifTool options if they begin with a dash). To be secure, the calling application must ensure that input file names do not start with a dash (U+002D) or a Unicode minus sign (U+2212). The easiest way to accomplish this is to prefix input file names with a known directory name, eg.) <code>"./FILENAME"</code>.</p> <h2><a name="shift">Date/Time Shift Feature</a></h2> <p>Have you ever forgotten to set the date/time on your digital camera before taking a bunch of pictures? ExifTool has a time shift feature that makes it easy to apply a batch fix to the timestamps of the images (eg. change the "Date Picture Taken" reported by Windows Explorer). Say for example that your camera clock was reset to 2000:01:01&nbsp;00:00:00 when you put in a new battery at 2005:11:03&nbsp;10:48:00. Then all of the pictures you took subsequently have timestamps that are wrong by 5 years, 10 months, 2 days, 10 hours and 48 minutes. To fix this, put all of the images in the same directory (<i>"<code>DIR</code>"</i>) and run exiftool:</p> <blockquote><pre> exiftool "-DateTimeOriginal+=5:10:2 10:48:0" <i>DIR</i> </pre></blockquote> <p>The example above changes only the DateTimeOriginal tag, but any writable date or time tag can be shifted, and multiple tags may be written with a single command line. Commonly, in JPEG images, the DateTimeOriginal, CreateDate and ModifyDate values must all be changed. For convenience, a <a href="#shortcut">shortcut</a> tag called <b>AllDates</b> has been defined to represent these three tags. So, for example, if you forgot to set your camera clock back 1 hour at the end of daylight savings time in the fall, you can fix the images with:</p> <blockquote><pre> exiftool -AllDates-=1 <i>DIR</i> </pre></blockquote> <p>See <a href="Shift.html">Image::ExifTool::Shift.pl</a> (<a href="http://owl.phy.queensu.ca/~phil/exiftool/Shift.pdf">download in PDF format</a>) for details about the syntax of the time shift string.</p> <p><b>Note:</b> Not all date/time information is covered by the AllDates shortcut. Specifically, the filesystem date/time tags are not included, and this command will reset FileModifyDate to the current date/time as it should when the file is modified, unless either the <code>-P</code> option is used, or FileModifyDate is set to something else. To shift FileModifyDate along with the other tags, add <code>-FileModifyDate-=1</code> to the command above.</p> <h2><a name="filename">Renaming and/or Moving Files</a></h2> <p>By writing a new value to the <b>FileName</b> and/or <b>Directory</b> tags, files can be renamed and/or moved to different directories. This can be a very powerful tool in combination with the <code>-d</code> (date format) option for organizing images by date/time. For example, the following command renames all images in directory <i>"<code>DIR</code>"</i> according to the individual file's creation date in the form "<code>YYYYmmdd_HHMMSS.ext</code>".</p> <blockquote><pre> exiftool "-FileName&lt;CreateDate" -d "%Y%m%d_%H%M%S.%%e" <i>DIR</i> </pre></blockquote> <p>Or a new directory can be specified by setting the value of the <b>Directory</b> tag. For example, the following command moves all images originally in directory <i>"<code>DIR</code>"</i> into a directory hierarchy organized by year/month/day:</p> <blockquote><pre> exiftool "-Directory&lt;DateTimeOriginal" -d "%Y/%m/%d" <i>DIR</i> </pre></blockquote> <p><a href="filename.html">Read here</a> for more details about this powerful feature.</p> <h2><a name="performance">Improving Performance</a></h2> <p>There is a significant overhead in loading ExifTool, so performance may be greatly improved by taking advantage of ExifTool's batch processing capabilities (the ability to process multiple files or entire directories with a single command) to reduce the number of executed commands when performing complex operations or processing multiple files.<span class=sm><sup>&dagger;</sup></span> <i>[One exiftool user <a href="http://www.christian-etter.de/?p=458">documented a 60x speed increase</a> by processing a large number of files with a single command instead of running exiftool separately on each file.]</i> Also, the <code>-execute</code> option may be used to perform multiple independent operations with a single invocation of exiftool, and together with the <code>-stay_open</code> option provides a method for calling applications to avoid this startup overhead.</p> <p>The processing speed of ExifTool can be improved when extracting information by reducing the amount of work that it must do. Decrease the number of extracted tags by specifying them individually (<code>-TAG</code>) or by group (<code>-GROUP:all</code>), and disable the composite tags (<code>-e</code>) and the print conversions (<code>-n</code>) if these features aren't required. Note that the exclude options (<code>-x</code> or <code>--TAG</code>) are not very efficient, and may have a negative impact on performance if a large number of tags are excluded individually.</p> <p>The <code>-fast</code> option can significantly increase speed when extracting information from JPEG images which are piped across a slow network connection. However, with this option any information in a JPEG trailer is not extracted. For more substantial speed benefits, <code>-fast2</code> may be used to also avoid extracting MakerNote information if this is not required.</p> <p>When writing, avoid copying tags (with <code>-tagsFromFile</code>) or using the <code>-if</code> or <code>-fileOrder</code> option because these will add the extra step of extracting tags from the file. Without these the write operation is accomplished with a single pass of each file.</p> <blockquote><span class=sm><sup>&dagger;</sup></span> <span class=lt>However, note that when the <code>-csv</code> option is used, information from all files is buffered in memory before the CSV output is written. This may be very memory intensive and result in poor performance when reading a large number of files in a single command.</span></blockquote> <h2><a name="library">The Image::ExifTool Perl Library Module</a></h2> <p>The "<code>exiftool</code>" script provides a command-line interface to the Image::ExifTool Perl library module which is part of the ExifTool distribution. The Image::ExifTool module can be used in any Perl script to provide easy access to meta information. Here is an example of a very simple script that uses Image::ExifTool to print out all recognized meta information in a file:</p> <blockquote><table class=box><tr><td><pre class=blk> <span class=com>#!/usr/bin/perl -w</span> use Image::ExifTool ':Public'; my $file = shift or die "Please specify filename"; my $info = <a href="ExifTool.html#ImageInfo">ImageInfo</a>($file); foreach (keys %$info) { print "$_ : $info-&gt;{$_}\n"; } </pre></td></tr></table></blockquote> <p>Note that some tag values may be returned as SCALAR references indicating binary data. The simple script above does not handle this case.</p> <p>See the <a href="ExifTool.html">Image::ExifTool Documentation</a> for more details.</p> <h2><a name="links">Additional Documentation and Resources</a></h2> <ul> <li><a href="http://owl.phy.queensu.ca/~phil/exiftool/">ExifTool Home Page</a></li> <li><a href="faq.html">ExifTool FAQ</a></li> <li><a href="http://u88.n24.queensu.ca/exiftool/forum/">ExifTool Forum</a></li> <li><a href="TagNames/index.html">ExifTool Tag Names</a></li> <li><a href="history.html">ExifTool Revision History</a> (<a href="http://owl.phy.queensu.ca/~phil/exiftool/rss.xml">RSS feed</a>)</li> <li><a href="exiftool_pod.html">exiftool Application Documentation</a> (<a href="http://owl.phy.queensu.ca/~phil/exiftool/exiftool_pod.pdf">download in PDF format</a>)</li> <li><a href="ExifTool.html">Image::ExifTool API Documentation</a> (<a href="http://owl.phy.queensu.ca/~phil/exiftool/ExifTool.pdf">download in PDF format</a>)</li> <li><a href="Shift.html">Date/Time Shift Module</a> (<a href="http://owl.phy.queensu.ca/~phil/exiftool/Shift.pdf">download in PDF format</a>)</li> <li><a href="config.html">Sample ExifTool Configuration File</a> (custom user-defined tags)</li> <li><a href="metafiles.html">Working with Metadata Sidecar Files</a></li> <li><a href="struct.html">Reading/Writing Structured Information</a></li> <li><a href="mistakes.html">Common Mistakes when using ExifTool</a></li> <li><a href="writing.html">Comments on the Subject of Writing Meta Information</a></li> <li><a href="standards.html">Problems with current Metadata Standards</a></li> <li><a href="under.html">"Under the Hood" of ExifTool</a></li> <li><a href="canon_raw.html">Canon RAW (CRW) File Format Specification</a></li> <li><a href="MIE1.1-20070121.pdf">MIE 1.1 File Format Specification (pdf)</a></li> <li><a href="https://sourceforge.net/projects/exiftool/">ExifTool SourceForge project page</a> (<a href="https://sourceforge.net/p/exiftool/discussion/">alternate discussion forum</a>)</li> <li><a href="http://owl.phy.queensu.ca/~phil/exiftool/sample_images.html">JPEG Image Samples</a> (and <a href="http://owl.phy.queensu.ca/~phil/exiftool/makernote_types.html">Table of Makernote Types</a>)</li> <li><a href="http://search.cpan.org/dist/Image-ExifTool/">Image::ExifTool at CPAN</a> (CPAN Search)</li> <li><a href="https://rt.cpan.org/Public/Dist/Display.html?Name=Image-ExifTool">ExifTool Bug Reports</a> (CPAN Request Tracker)</li> <li><a href="http://www.cpantesters.org/distro/I/Image-ExifTool.html">ExifTool Test Reports</a> (CPAN Testers)</li> </ul> <p><b><a name="user_docs">User-contributed Documentation</a></b></p> <ul> <li><a href="http://www.youtube.com/results?search_query=avpreserve+exiftool">ExifTool Tutorial</a> (video in 4 parts by <a href="http://www.avpreserve.com">AVPreserve</a>)</li> <li><a href="http://www.youtube.com/watch?v=K9PAD7GqUag">Using the ExifTool on Linux to read/write Exif Tags to your photo collection</a> (video by <a href="http://www.linuxbyexample.org">Linux By Example</a>)</li> <li><a href="http://www.youtube.com/watch?v=WchknYwbFJY">Working with jpg Metadata Comments - Exiftool - BASH - Linux Command Line</a> (video by <a href="http://www.linuxbyexample.org">Linux By Example</a>)</li> <li><a href="http://sourceforge.net/projects/exiftool1line/files/">Useful one-line ExifTool commands</a> (.txt file)</li> </ul> <h3><a name="related">Related Utilities</a></h3> <p>Below are some free utilities which take advantage of the ExifTool engine:</p> <p><b><a name="related_win">Windows</a></b></p> <ul> <li><a href="http://u88.n24.queensu.ca/~bogdan/">ExifTool GUI for Windows</a>: GUI for viewing meta information with some editing features</li> <!-- dead <li><a href="http://www.thezeal.com/software/?Exif_Stats_Utility">Exif Stats Utility</a>: Analyzes images to tabulate apertures, exposure times, etc</li> --> <li><a href="http://aeropic.free.fr/H&amp;B/AUTO_ISO_patcher/">Auto ISO Tool</a>: GUI front-end for ExifTool to patch Canon ISO information</li> <!-- dead <li><a href="http://home.roadrunner.com/~dick/ExifAuto.htm">ExifAuto</a>: GUI front-end for ExifTool to perform simple operations</li> --> <li><a href="http://www.geosetter.de/en/">GeoSetter</a>: Utility for showing and changing geo data of image files</li> <li><a href="http://www.moonsoftware.com/exifmixer.asp">ExifMixer</a>: GUI extension for the exiftool command-line interface</li> <!-- dead <li><a href="http://fliggs.wordpress.com/2009/02/01/exifdropper-v090902-released/">ExifDropper</a>: Graphical front-end for ExifTool with drag-and-drop</li> --> <!-- dead <li><a href="http://gpstamper.wordpress.com/geotagger/">GPStamper Geotagger</a>: A simple Windows GUI front end for geotagging images</li> --> <li><a href="http://www.anvo-it.de/wiki/doku.php?id=avpicfacexmptagger:main">AvPicFaceXmpTagger</a>: Write Picasa 3.5 face recognition information as XMP to your images</li> <li><a href="http://www.ulfwood.net/Mp3TagFileData/Id3TagExifViewer.aspx">FileTagSleuth</a>: MP3, ID3 and EXIF viewer</li> <!-- dead <li><a href="http://exifcopier.110mb.com/">Exif Copier</a>: Copy Exif data between sets of multiple images</li> --> <!-- dead <li><a href="http://www.xtrasimplicity.info/archives/185">ExifyMe</a>: Restore Exif metadata from an original image</li> --> <li><a href="http://mjbpix.com/automatically-move-photos-to-directories-or-folders-based-on-exif-date/">PhotoMove</a>: Automatically move photos to directories or folders based on Exif date taken</li> <!-- dead <li><a href="http://code.google.com/p/tinyexif/">TinyExif</a>: Simple Windows GUI for ExifTool written in Python using the Qt4 toolkit</li> --> <li><a href="http://gui2-for-exiftool.weebly.com/">GUI2 for ExifTool</a>: An ExifTool GUI with built-in editor and browser</li> <!-- dead <li><a href="http://www.kula-shaker.ru/autojpegtrunk-english">AutoJpegTrunk</a>: Tool to remove all metadata from JPEG images</li> --> <li><a href="http://www.advancedrenamer.com/">AdvancedRenamer</a>: Rename files and folders from metadata</li> <li><a href="http://www.proxel.se/exif.html">Proxel EXIF Tool</a>: Photoshop plugin based on ExifTool</li> <li><a href="http://fhotolab.de/wp/?page_id=795">EXIFCopy</a>: Copy all EXIF information between files</li> <li><a href="http://www.abscreensavers.com/random-photo-screensaver/">Random Photo Screensaver</a>: Photo screensaver with metadata display</li> </ul> <p><b><a name="related_mac">Mac OS X</a></b></p> <ul> <li><a href="http://owl.phy.queensu.ca/~phil/exiftool/Extract%20Preview.sit">Download</a> a stand-alone droplet to extract preview images from RAW files (thanks to Brett Gross)</li> <li><a href="http://owl.phy.queensu.ca/~phil/exiftool/List_Exif_Metadata.zip">Download</a> three droplets to extract information [exiftool must be installed] (thanks to Rob Lewis)</li> <!-- dead <li><a href="http://macfidelity.de/tierprogramm/">Tierprogramm</a>: Droplet to perform some basic operations</li> --> <li><a href="http://frozentime.se/photos/macmetamod.html">MacMetaMod</a>: Droplet for adding Keywords to images</li> <li><a href="http://www.earlyinnovations.com/gpsphotolinker/">GPSPhotoLinker</a>: Geotagging on the Mac</li> <!-- seems to be dead: <li><a href="http://www.scriptamac.at/geotaggingactions.html">Geotagging Automator Action</a>: Application to geotag images from GPX tracks</li> --> <li><a href="http://www.mmisoftware.co.uk/pages/photogpseditor.php">PhotoGPSEditor</a> and <a href="http://www.mmisoftware.co.uk/pages/photoinfoeditor.php">PhotoInfoEditor</a>: Geocoding utilities</li> <li><a href="http://automatorworld.com/archives/metadata-mover/">MetaDataMover</a> (<a href="https://github.com/Mortimerp9/MetaDataMover">source</a>): GUI-based automator utility for moving/renaming images</li> <li><a href="http://www.lintburger.com/softwares#CS1ToCR2">CS1ToCR2</a>: Utility that uses Sony GPS-CS1 log files to add GPS information to CR2 images</li> <!-- dead <li><a href="http://82.94.219.20/~marcvos/software/realbasic/sed.html">SetEXIFData</a>: Utility to set EXIF data</li> --> <li><a href="http://craig.stanton.net.nz/code/geotagger/">Geotagger</a>: Droplet for inserting GPS coordinates in your photos</li> <li><a href="http://www.raw-photo-processor.com/RPP/Overview.html">Raw Photo Processor</a>: Raw converter for Mac OS X</li> <li><a href="http://www.lemkesoft.com/content/188/graphicconverter.html">GraphicConverter</a>: Full-featured image editor <i>[noteworthy, but not free]</i></li> <li><a href="http://www.saltpepper.net/geotag/">GeoTag</a>: Geotagging application for iPhone and OS X</li> <li><a href="http://imagefuser.sourceforge.net/">ImageFuser</a>: Fuses multiple exposures of a scene into one image with improved detail/exposure</li> <li><a href="http://www.theoneandonlysepp.com/gnt/">GeoNamesTagger</a>: Docklet to easily update image metadata with location specific information</li> </ul> <p><b><a name="related_linux">Linux</a></b></p> <ul> <li><a href="http://kde-apps.org/content/show.php?content=30971">rawimage:</a> A kfile plugin and thumbnail image handler for RAW formats</li> <!-- apparently abandonded: <li><a href="http://sagittarius.berlios.de/">Sagittarius</a>: Linux XMP metadata editor</li> --> <!-- dead <li><a href="http://beam.at/aenima">Photo related scripts</a>: Includes EXIFInfo script to provide statistics from EXIF data</li> --> <li><a href="http://hugin.sourceforge.net/">Hugin</a>: Panorama photo stitcher</li> <li><a href="https://savannah.nongnu.org/projects/fotopreprocessor/">FotoPreProcessor</a>: PyQt4-based frontend for exiftool to graphically edit metadata</li> <li><a href="http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4715.0.html">ExZenToo</a>: Script for basic ExifTool GUI using Zenity</li> <li><a href="https://github.com/Glutanimate/PDFMtEd">PDFMted</a>: A set of bash scripts for easy viewing and editing of PDF metadata</li> </ul> <p><b><a name="related_multi">Multi-Platform</a></b></p> <ul> <li><a href="http://basepath.com/new/detail-ImageIngester.php">ImageIngester</a>: Windows and Mac OS X image workflow automator</li> <li><a href="http://www.carto.net/projects/photoTools/gpsPhoto/">gpsPhoto</a>: Geotag your images from a GPS (GPX) track log</li> <li><a href="https://puszcza.gnu.org.ua/projects/renrot/">renrot</a>: Perl utility to perform various processing tasks on images</li> <li><a href="http://code.google.com/p/gpicsync/">GPicSync</a>: Windows/Linux utility to geocode photos from a GPX track log and create KML files</li> <li><a href="http://flickfleck.googlecode.com/">FlickFleck</a>: Tool to transfer images from memory card, rotate, rename, and organize by date</li> <!-- broken: <li><a href="http://muellerware.org/hg/gpx2exif/">gpx2exif</a>: Python script to geocode photos and produce KML files from a GPS track log</li> --> <li><a href="http://geotag.sourceforge.net/?q=node/1">Geotag</a>: Open source Java-based geotagging application</li> <li><a href="http://www.haplessgenius.com/photogrok/">PhotoGrok</a>: Java-based GUI front-end for ExifTool to display images organized by any EXIF tag</li> <li><a href="http://www.xnview.com/en/xnview.html">XnView</a>: View and convert graphic files</li> <li><a href="http://sourceforge.net/projects/mapivi/">Mapivi</a>: Open-source and cross-platform picture manager</li> <li><a href="http://www.resourcespace.org/">ResourceSpace</a>: Open source digital asset management system</li> <li><a href="http://owl.phy.queensu.ca/~phil/exiftool/fix_corrupted_nef.html">fix_corrupted_nef</a>: Utility to fix Nikon D4/D600/D800/D800E NEF images corrupted by Nikon Transfer 1</li> <li><a href="https://hvdwolf.github.io/pyExifToolGUI/">pyExifToolGUI</a>: Python-based graphical frontend for ExifTool</li> <li><a href="https://github.com/avpreserve/mdqc">MDQC</a>: <a href="http://www.avpreserve.com/avpsresources/tools/">AVPreserve tool</a> for metadata quality control across large numbers of digital assets</li> <li><a href="http://fastphototagger.sourceforge.net/about.html">FastPhotoTagger</a>: Add metadata to images (requires Java runtime engine)</li> <li><a href="http://digi-libris.com/index.html">Digi-libris</a>: Metadata centric software for the automatic organization of your own catalogue</li> </ul> <p><b><a name="related_online">Online</a></b></p> <ul> <li><a href="http://regex.info/exif.cgi">Jeffrey's Exif Viewer</a>: Web utility to view meta information in online images</li> <li><a href="http://www.thexifer.net/">The eXif.er</a>: Web-based EXIF editor</li> <!-- dead <li><a href="http://www.exif-search.com/">exif Photo Search</a>: Search the internet for photos base on EXIF metadata</li> --> </ul> <p><b><a name="related_lightroom">Lightroom Plugins</a></b></p> <ul> <li><a href="http://regex.info/blog/lightroom-goodies/gps">Jeffrey's Geoencoding Plugin for Lightroom</a>: Geoencode your photos from within Lightroom</li> <li><a href="http://regex.info/blog/lightroom-goodies/metadata-wrangler/">Metadata Wrangler</a>: Strip selected metadata components from images as they are exported</li> <li><a href="http://www.robcole.com/Rob/ProductsAndServices/ExifMetaLrPlugin/">ExifMeta</a>: Make all exif metadata available in Lightroom for lib filtering and smart collections</li> <li><a href="http://chaoliu12.wordpress.com/fullmetaexport-lightroom-plugin/">FullMetaExport</a>: Export JPEG images from Lightroom with full metadata</li> <li><a href="http://www.essl.de/wp/software/lenstagger-lightroom-plugin/">LensTagger</a>: Add EXIF information like aperture and focal length for manual lenses</li> <li><a href="http://tim.jagenberg.info/projects/deaspect/">DeAspect:</a> Remove aspect ratio information from DNG, CR2 and ORF images to restore full image</li> <li><a href="https://github.com/flingo64/PhotoStation-Upload-Lr-Plugin">PhotoStation-Upload-Lr-Plugin</a>: Export photos from LR directly to a Synology PhotoStation</li> </ul> <p><b><a name="related_prog">Programming</a></b></p> <ul> <li><a href="http://owl.phy.queensu.ca/~phil/cpp_exiftool/">C++ ExifTool</a>: Performance-oriented C++ interface for the exiftool application (by Phil Harvey)</li> <li><a href="http://owl.phy.queensu.ca/~phil/exiftool/get_tags.sit">Download</a> sample AppleScript to extract tags into AppleScript record (thanks to Rob Lewis)</li> <li><a href="http://owl.phy.queensu.ca/~phil/exiftool/ExifToolWrapper.zip">Download</a> example of a simple Visual C++ wrapper for exiftool (thanks Mark Borg and &#40643;&#29790;&#26124;)</li> <li><a href="http://owl.phy.queensu.ca/~phil/exiftool/ExifToolWrapper_cs.zip">Download</a> C# version of simple exiftool wrapper (thanks Willem Semmelink)</li> <li><a href="http://owl.phy.queensu.ca/~phil/exiftool/modExiftool_101.zip">Download</a> Visual Basic 6.0 example script v1.01 for reading tags with exiftool (thanks Michael Wandel)</li> <li><a href="http://owl.phy.queensu.ca/~phil/exiftool/vb_sample.html">Sample VB.NET subroutine</a> to extract a preview image (thanks Claus Beckmann)</li> <li><a href="http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5857.0.html">ExifToolIO</a>: .NET wrapper for ExifTool, optimized for speed (using VB.NET)</li> <li><a href="http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5262.0.html">ExifToolWrapper</a>: .NET wrapper for ExifTool (using C#)</li> <li><a href="http://gitorious.org/mini_exiftool">MiniExiftool</a>: Ruby library wrapper for ExifTool</li> <li><a href="https://github.com/mceachen/exiftoolr">exiftoolr</a>: Ruby wrapper for ExifTool</li> <li><a href="http://smarnach.github.com/pyexiftool/">pyexiftool</a>: Python wrapper for ExifTool</li> <li><a href="https://github.com/guinslym/pyexifinfo">PyExifInfo</a>: Another Python wrapper for ExifTool</li> <li><a href="https://github.com/romainneutron/PHPExiftool">PHPExiftool</a>: PHP wrapper for ExifTool (in development)</li> <li><a href="http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5381.0.html">ExifTool_PHP_StayOpen</a>: ExifTool PHP fast processing script using -stayOpen and Gearman</li> <li><a href="http://sourceforge.net/projects/moss/">Moss</a>: Collection of Java utilities which includes an exiftool interface</li> <li><a href="http://im4java.sourceforge.net">im4java</a>: Java interface to ImageMagick, ExifTool, and other image utilities</li> <li><a href="http://www.thebuzzmedia.com/software/exiftool-enhanced-java-integration-for-exiftool/">Java ExifTool</a>: Enhanced Java Integration for ExifTool</li> <li><a href="https://bitbucket.org/P_W999/j-exiftool/wiki/Home">J-ExifTool</a>: Open-source, cross platform Java7 library to read/write Exif tags in images</li> <li><a href="http://u88.n24.queensu.ca/~bogdan/articles/delphi01.html">How to call ExifTool from Delphi</a>, by Bogdan Hrastnik</li> </ul> <h3><a name="other_links">Other Links</a></h3> <ul> <li><a href="https://web.archive.org/web/20150419003745/http://www.ebv4linux.de/modules.php?name=News&file=article&sid=26">An interview with Phil Harvey</a> (in German), (<a href="http://owl.phy.queensu.ca/~phil/exiftool/PhilHarveyInterview.pdf">English translation in PDF format</a>)</li> </ul> <h2><a name="boldly">Boldly Go where No Man has Gone Before...</a></h2> <p>There is still much unknown information in the maker notes for many camera models. (To see this information, run exiftool with the <code>-U</code> option.) In this area, ExifTool is very much a collaborative effort, and development relies heavily on the input from camera owners to help decode new meta information. If you manage to figure out what any of it means, send me an e-mail (phil at owl.phy.queensu.ca) and I'll <b>add your new discoveries to ExifTool</b>. Many thanks to all who have helped so far...</p> <h2><a name="ack">Acknowledgements</a></h2> <p>Thanks to everyone who has sent in bug reports, comments, or suggestions, and special thanks to the following people for their valuable input and/or additions to the code:</p> <ul> <li>Malcolm Wotton for his help with the D30 Custom Functions</li> <li>David Anson for his help sorting out binary file problems on Windows</li> <li>Leon Booyens for his suggestions</li> <li>Dan Heller for his bug reports, detailed suggestions and guidance</li> <li>Wayne Smith for his help figuring out the Pentax maker notes</li> <li>Michael Rommel for his bug fixes and additions to the Canon maker notes</li> <li>Joseph Heled for help figuring out some of the Nikon D70 maker notes</li> <li>Joachim Loehr for adding the Casio type 2 maker notes</li> <li>Greg Troxel for his suggestions and for adding ExifTool to pkgsrc</li> <li>Thomas Walter for figuring out some Nikon tags</li> <li>Brian Ristuccia for more information about some Nikon tags</li> <li>Christian Koller for decoding the 20D custom functions</li> <li>Matt Madrid for his testing and feedback</li> <li>Tom Christiansen for his help decoding some Nikon tags</li> <li>Markku H&auml;nninen for help decoding tags for the Olympus E-1</li> <li>Frank Ledwon for decoding many new Olympus tags</li> <li>Robert Rottmerhusen for decoding many tricky Nikon lens data tags</li> <li>Michael Tiemann for decoding a number of new Canon tags</li> <li>Albert Bogner for his image samples, testing and useful suggestions</li> <li>Rainer H&ouml;nle for decoding a number of new Canon 5D tags</li> <li>Nilesh Patel for his help with the web page layout</li> <li>Jens Duttke for his suggestions, bug reports and help decoding new tags</li> <li>Dave Nicholson for decoding new tags in Pentax and Canon maker notes</li> <li>Bogdan Hrastnik for his feedback, decoding efforts, user support and ExifTool GUI</li> <li>Igal Milchtaich for decoding many Sony A100 tags</li> <li>Laurent Clevy for his work analyzing Canon RAW images</li> <li>Warren Hatch for extensive testing and decoding of Nikon D3 tags</li> <li>Jos Roost for decoding many Sony tags for various models</li> <li>Iliah Borg and <a href="http://www.libraw.org/">LibRaw</a> for decoding many raw development tags</li> </ul> <h2><a name="license">License</a></h2> <p>This is free software; you can redistribute it and/or modify it under the same terms as <a href="http://dev.perl.org/licenses/">Perl itself</a>.</p> <h2><a name="donate">Donate</a></h2> <p>ExifTool is free, but due to popular request I am providing a way for those who feel the need to send me some money. It is really not necessary, but thank you very much if you decide to make a contribution:</p> <blockquote> <table> <tr> <td><center> <form action="https://www.paypal.com/cgi-bin/webscr" method="POST"> <input type="hidden" name="cmd" value="_donations"> <input type="hidden" name="business" value="phil@physics.queensu.ca"> <input type="hidden" name="return" value="http://owl.phy.queensu.ca/~phil/exiftool/"> <input type="hidden" name="item_name" value="ExifTool Donation"> <input type="hidden" name="no_shipping" value="1"> $<input name="amount" value="0.00" size="6"> <input type="submit" value="Donate via PayPal"> </form> </center></td> </tr> </table> </blockquote> <h2><a name="contact">Contact Me</a></h2> <p>If you have any comments, suggestions or questions, please post to the <a href="http://u88.n24.queensu.ca/exiftool/forum/">ExifTool Forum</a> so other people may benefit from your experiences. (I check the forum at least as often as my email.) Otherwise, if you must contact me directly, my e-mail address is on the first line of the README file in the full distribution. Thanks. &nbsp; - <i>Phil Harvey</i></p> <div class=wide><table class=links><tr> <th><a href="install.html" class=wt>&nbsp;Installing&nbsp;</a></th> <th><a href="TagNames/index.html" class=wt>&nbsp;Tag&nbsp;Names&nbsp;</a></th> <th><a href="#links" class=wt>&nbsp;Resources&nbsp;</a></th> <th><a href="history.html" class=wt>&nbsp;History&nbsp;</a></th> <th><a href="http://u88.n24.queensu.ca/exiftool/forum/" class=wt>&nbsp;Forum&nbsp;</a></th> <th class=rt><a href="faq.html" class=wt>&nbsp;FAQ&nbsp;</a></th> </tr></table></div> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/install.html��������������������������������������������������������������000644 �000765 �000024 �00000031617 12611674366 017707� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> <html> <head> <title>Installing ExifTool</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <style type="text/css"> <!-- li { margin-top: .5em } .attn { padding: 0.5em; border: 1px solid gray; background: #fee } --> </style></head> <body> <h1 class='up'>Installing ExifTool</h1> <blockquote class=attn><b class=red>Note:</b> ExifTool <b>does <u>not</u> need to be installed</b> to run. Just download and extract either the full Perl distribution on Mac/Linux, or the Windows EXE version on Windows, and run it directly. <i class=lt>[But note that if you move the Perl "exiftool" application, you must also move its "lib" directory to the same location. This doesn't apply to the Windows version which unpacks the libraries into a temporary directory.]</i><br><br>However, the benefits of installation are: <ul><li>Makes ExifTool available to all users.</li> <li>Saves typing on the command line (by placing "exiftool" in your PATH).</li> <li>Installs the ExifTool documentation and API libraries (full Perl version only).</li> </ul></blockquote> <p>See the appropriate section below with instructions for installing or uninstalling ExifTool on your specific platform:</p> <ul> <li><a href="#Windows">Windows</a></li> <li><a href="#OSX">Macintosh OS X</a></li> <li><a href="#Unix">Unix Platforms</a></li> </ul> <p>Also see <a href="index.html#running">these instructions</a> for help running ExifTool.</p> <hr> <h2><a name="Windows">Windows</a></h2> <p>In Windows, there is a choice of two different versions of ExifTool to install. The Perl distribution requires Perl to be installed on your system. (A good, free Perl interpreter can be downloaded from <a href="http://www.activestate.com/activeperl/">activeperl.com</a>.)</p> <p>If you don't already have Perl, it is easier to install the stand-alone ExifTool executable, but note that the stand-alone version doesn't include the HTML documentation or some other files of the full distribution.</p> <h3>Stand-Alone Executable</h3> <ol> <li><b>Download</b> the <b>Windows Executable</b> from the <a href="index.html">ExifTool home page</a>. <br><span class=lt>(The file you download will have a name like "<code>exiftool-##.##.zip</code>".)</span></li> <li><b>Extract "<code>exiftool(-k).exe</code>"</b> from the "<code>.zip</code>" file, and place it <b>on your Desktop</b>. <br><span class=lt>(Double-click on "<code>exiftool-##.##.zip</code>" to open the archive, then drag "<code>exiftool(-k).exe</code>" to your Desktop.)</span></li> </ol> <p>You can now double-click on "<code>exiftool(-k).exe</code>" to read the application documentation, or drag-and-drop files and folders to run exiftool on selected files. To install exiftool for <b>use from the command line</b>, continue with the following steps:</p> <ol start=3> <li><b>Rename</b> "<code>exiftool(-k).exe</code>" to <b>"<code>exiftool.exe</code>"</b>. <br><span class=lt>(or "<code>exiftool(-k)</code>" to "<code>exiftool</code>" if file name extensions are hidden on your system)</span></li> <li><b>Move "<code>exiftool.exe</code>"</b> to the "<code>C:\WINDOWS</code>" directory (or any other directory in your PATH).</li> </ol> <p>You can now run exiftool by typing "<code>exiftool</code>" at the command prompt. (To get to the command prompt, select "Run..." from the Windows "Start" menu, then type "<code>cmd</code>" and press Return.)</p> <p><b>Notes:</b></p> <ol type='a'> <li>In Windows 7, running exiftool requires administrator privileges. If necessary, this may be enabled by right clicking on exiftool, then selecting <b>"Run this program as administrator"</b> from the Compatibility settings.</li> <li>Occasionally users have reported that exiftool gives errors when running this version for this first time. It is possible this may happen if a file gets corrupted during the download/installation process. In this case, follow the Uninstalling instructions below then re-install exiftool. Be sure that you have sufficient disk space in your TEMP directory for exiftool to unpack about 12 MB of temporary files -- these are the Perl libraries used by the exiftool application which are unpacked the first time exiftool is run.</li> </ol> <p><b>Uninstalling:</b></p> <ol type='i'> <li>Drag "<code>exiftool(-k).exe</code>" (or "<code>C:\WINDOWS\exiftool.exe</code>") into the Recycle bin.</li> <li>Drag the directory "<code>par-USER</code>" from your temporary directory to the Recycle bin. Here "<code>USER</code>" is your Windows user name and the location of the temporary directory depends on the value of the TEMP environment variable (typically "<code>C:\Documents and Settings\USER\Local Settings\Temp</code>" for Windows XP, or "<code>C:\Users\USER\AppData\Local\Temp</code>" for Windows 7).</li> </ol> <h3>Full Perl Distribution</h3> <p>You must have Perl installed to use this version. (A free version of Perl can be downloaded from <a href="http://www.activestate.com/activeperl/">activeperl.com</a>.)</p> <ol> <li><b>Download</b> the <b>Image-ExifTool distribution</b> from the <a href="index.html">ExifTool home page</a> <br><span class=lt>(The file you download will have a name like "<code>Image-ExifTool-##.##.tar.gz</code>".)</span></li> <li><b>Extract the ExifTool files</b> from the archive. <br><span class=lt>(The archive is a gzipped tar file, and can be opened with various Windows utilities, including WinZip.)</span></li> <li><b>Rename</b> "<code>exiftool</code>" to <b>"<code>exiftool.pl</code>"</b> in the exiftool distribution.</li> <li><b>Move "<code>exiftool.pl</code>"</b> and the <b>"<code>lib</code>"</b> directory from the exiftool distribution to "<code>C:\WINDOWS</code>" (or any other directory in your PATH).</li> </ol> <p>Now, if you have made the proper Windows associations for the "<code>.pl</code>" extension (an option in the ActivePerl installation), you can run exiftool by typing "<code>exiftool.pl</code>" at the "<code>cmd.exe</code>" prompt. Otherwise you should type "<code>perl c:\windows\exiftool.pl</code>".</p> <p><b>Uninstalling:</b></p> <ol type='i'> <li>Drag "<code>C:\WINDOWS\exiftool.pl</code>" and "<code>C:\WINDOWS\lib</code>" into the Recycle bin. You should first confirm that "<code>C:\WINDOWS\lib</code>" contains only the "<code>File</code>" and "<code>Image</code>" sub-directories. Do not delete it if it contains anything else.</li> </ol> <hr> <h2><a name="OSX">Macintosh OS X</a></h2> <p>If you have installed the BSDSDK package from the Xcode Developer Tools (<i>ie. if you have the</i> "<code>make</code>" <i>utility</i>), you should follow the install procedure for <a href="#Unix">Unix platforms</a> in the next section instead of the steps below. The Unix install has the advantage of making the ExifTool library available for your Perl scripts, as well as installing the man pages and POD documentation.</p> <p>Otherwise, you have a choice of two packages to install: The OS X package, or the full Perl distribution. Both of the procedures below install the ExifTool files in the same location. Installing from the OS X package is easier, but the full distribution includes HTML documentation and some other files not included in the OS X package. Both versions run natively on PPC and Intel Macs.</p> <h3>OS X Package</h3> <ol> <li><b>Download</b> the <b>ExifTool OS X Package</b> from the <a href="index.html">ExifTool home page</a>. <br><span class=lt>(The file you download will have a name like "<code>ExifTool-##.##.dmg</code>".)</span></li> <li><b>Install</b> as a normal <b>OS X package</b>. <br><span class=lt>(Open the disk image, double-click on the install package, and follow the instructions.) </span></li> </ol> <p>You can now run exiftool by typing "<code>exiftool</code>" in a Terminal window.</p> <p>If this doesn't work, then it is likely you have an older version of OS X for which /usr/local/bin isn't in the default PATH. To fix this, add the following line to your ~/.profile settings using a text editor:</p> <blockquote><code>export PATH=$PATH:/usr/local/bin</code></blockquote> <h3>Full Perl Distribution</h3> <ol> <li><b>Download</b> the <b>Image-ExifTool distribution</b> from the <a href="index.html">ExifTool home page</a> to your Desktop. <br><span class=lt>(The file you download will have a name like "<code>Image-ExifTool-##.##.tar.gz</code>".)</span></li> <li><b>Launch</b> the <b>Terminal</b> application from the Utilities folder in your Applications folder.</li> <li>In the Terminal window, <b>type the following</b>: <pre class='code'> cd ~/Desktop tar -xzf Image-ExifTool-##.##.tar.gz cd Image-ExifTool-##.## sudo cp -r exiftool lib /usr/local/bin </pre> where "<code>##.##</code>" is the version number of the ExifTool you downloaded. <br><span class=lt>(Note: The last step above will require you to enter your password.)</span></li> </ol> <p>You can now run exiftool by typing "<code>exiftool</code>" in a Terminal window.</p> <p class=lt><b>Notes:</b></p><ul class=lt><li>Both OS X installation techniques outlined above place exiftool and its lib directory in /usr/local/bin, while the standard Unix "<code>make install</code>" described below puts "<code>exiftool</code>" in /usr/local/bin and the individual libraries in /Library/Perl/#.#.#, where "#.#.#" is your Perl version. If both sets of libraries exist, /usr/local/bin/lib takes precedence for exiftool, but /Library/Perl/#.#.# is the default for any other Perl scripts.</li> <li>In OS X 10.8 or later, you may see this message when you try to open the install package: <blockquote class=red>"ExifTool-##.##.pkg" can't be opened because it is from an unidentified developer.</blockquote> The solution is to set "Allow applications downloaded from" to "Anywhere" in the General "Security &amp; Privacy" System Preferences. (<a href="http://news.softpedia.com/news/Fix-OS-X-Error-Application-Can-t-Be-Opened-Because-it-Is-from-an-Unidentified-Developer-407375.shtml">Read here</a> for a full description.)</li></ul> <h3>Uninstalling</h3> <ol type='i'> <li>Launch the "Terminal" application from the Applications Utilities folder.</li> <li>Type "<code>open /usr/local/bin</code>" (without the quotes) in the Terminal window, then press RETURN. (This opens a folder that you normally can't access from OS X.)</li> <li>Drag "<code>exiftool</code>" and "<code>lib</code>" into the trash from the "<code>bin</code>" folder you opened. You should first confirm that "<code>lib</code>" contains only two sub-folders: "<code>File</code>" and "<code>Image</code>". If it contains anything else, don't trash it because you have the wrong "<code>lib</code>" folder.</li> </ol> <hr> <h2><a name="Unix">Unix Platforms</a></h2> <ol> <li><b>Download</b> the <b>Image-ExifTool distribution</b> from the <a href="index.html">ExifTool home page</a> <br><span class=lt>(The file you download will have a name like "<code>Image-ExifTool-##.##.tar.gz</code>".)</span></li> <li><b>Unpack the distribution</b> and <b>make it your current directory</b> by typing: <pre class='code'> cd <i>&lt;your download directory&gt;</i> gzip -dc Image-ExifTool-##.##.tar.gz | tar -xf - cd Image-ExifTool-##.## </pre> where "<code>##.##</code>" is the version number of the ExifTool you downloaded. <br><span class=lt>(At this point you may run exiftool by typing "<code>exiftool <i>&lt;image file name&gt;</i></code>".)</span></li> <li><b>Test and install ExifTool</b> by typing: <pre class='code'> perl Makefile.PL make test sudo make install </pre> <span class=lt>(Note: The "<code>make test</code>" step is not required, but useful because it runs a full suite of tests to verify that ExifTool is working properly on your system. The "<code>sudo make install</code>" command requires that you have su access, and will prompt for your password. This will make ExifTool and its documentation accessible to all users on your system. If you don't have su access, you can run ExifTool in your own account by moving "<code>exiftool</code>" and its "<code>lib</code>" directory to any convienient location, preferably somewhere in your PATH.)</span></li> </ol> <p>You can now run exiftool by typing "<code>exiftool</code>". Also, you can consult the ExifTool documentation with commands like:</p> <blockquote><pre class='code'>perldoc exiftool perldoc Image::ExifTool perldoc Image::ExifTool::TagNames </pre></blockquote> <p>or</p> <blockquote><pre class='code'>man exiftool man Image::ExifTool man Image::ExifTool::TagNames </pre></blockquote> <h3>Uninstalling</h3> <ol type='i'> <li>Type "<code>sudo make uninstall</code>" from the distribution directory. <br><span class=lt>(Note: Unfortunately, newer systems may give an <i>"Uninstall is unsafe and deprecated"</i> message even though uninstalling ExifTool is safe because it has no dependencies. If this happens, the necessary commands to remove the installed files will be listed, and these commands must be run manually.)</span></li> </ol> <hr> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> �����������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/metafiles.html������������������������������������������������������������000644 �000765 �000024 �00000037707 12572104166 020210� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> <html> <head> <title>Metadata Sidecar Files</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <style type="text/css"> <!-- blockquote { margin-top: 1em; margin-bottom: 1em } pre { color: #800; margin-left: 4em } pre.code { color: #000; padding: 0; margin: 0 } .lt { color: #666 } .ind { margin-left: 2.5em } p.a { margin: 1em 2em 0 1em } p.b { margin: 0 2em 1em 2.2em; color: #666 } p.c { margin: 1em 2em 1em 2.2em; color: #666 } --> </style> </head> <body> <div class='index'> <a href="#xmp">XMP Sidecar Files</a> <br><a href="#xml">ExifTool XML Files</a> <br><a href="#exif">EXIF Files</a> <br><a href="#mie">MIE Files</a> <br><a href="#exv">EXV Files</a> </div> <h1 class=up>Metadata Sidecar Files</h1> <p>Metadata for images and other file types may be stored in a separate metadata file. These are the only files that exiftool can create from scratch. A common example of this is the XMP "sidecar" file (which is discussed in the next section in some detail). Other supported metadata file types are EXIF, MIE, EXV, ICC and VRD. As well, ExifTool supports XML-format output, which can also be used to generate metadata sidecar files.</p> <hr> <a name="xmp"></a> <h3>XMP Sidecar Files</h3> <p>There are a number of different ways to generate an XMP sidecar file with exiftool, and the method you choose depends on your circumstances and preferences. Below are a number of example commands which write an output XMP file from information in a source file of any type.</p> <p class=a><a name="EX1">1.</a> Copy same-named tags from all information types to preferred locations in XMP:</p> <p class=b>(<code><i>SRC</i>.<i>EXT</i></code> is the source file name and extension, and <code><i>DST</i></code> is the destination file name)</p> <pre>exiftool -tagsfromfile <i>SRC</i>.<i>EXT</i> <i>DST</i>.xmp</pre> <p class=a><a name="EX2">2.</a> Rewrite source file to destination XMP file:</p> <p class=b>(same effect as above, but the command will exit with an error if the output XMP file already exists)</p> <pre>exiftool <i>SRC</i>.<i>EXT</i> -o <i>DST</i>.xmp</pre> <p class=a><a name="EX3">3.</a> Copy XMP, preserving original locations:</p> <p class=b>(ie. copies XMP tags only to the same namespaces in the destination file)</p> <pre>exiftool -tagsfromfile <i>SRC</i>.<i>EXT</i> -all:all <i>DST</i>.xmp</pre> <p class=c>Advanced: Notice that <code>-all:all</code> is used above instead of <code>-xmp:all</code> even though only XMP tags will be copied (since the destination is an XMP file). This is because <code>-all:all</code> preserves the family 1 group (ie. XMP namespace) while <code>-xmp:all</code> would copy tags to the preferred XMP namespace, which may be different for XMP tags that exist in multiple namespaces. To get the best of both worlds, <code>"-all:all&lt;xmp:all"</code> may be used to avoid the inefficiencies of assigning tags which aren't copied, while still preserving the family 1 group.</p> <p class=a><a name="EX4">4.</a> Rewrite source to XMP file, preserving locations:</p> <p class=b>(same effect as above, but the command will fail if the XMP file already exists)</p> <pre>exiftool <i>SRC</i>.<i>EXT</i> -o <i>DST</i>.xmp -all:all</pre> <p class=a><a name="EX5">5.</a> Generate XMP from EXIF and IPTC using standard tag name mappings:</p> <p class=b> (the <code>.args</code> files are available in the full ExifTool distribution)</p> <pre>exiftool -tagsfromfile <i>SRC</i>.<i>EXT</i> -@ exif2xmp.args -@ iptc2xmp.args <i>DST</i>.xmp</pre> <p class=a><a name="EX6">6.</a> Copy XMP as a block to an XMP file:</p> <p class=b>(writing as a block is the only way to transfer unknown or non-writable XMP tags)</p> <pre>exiftool -tagsfromfile <i>SRC</i>.<i>EXT</i> -xmp <i>DST</i>.xmp</pre> <p class=c>Note that this will not deal with extended XMP segments in JPEG images if they exist.</p> <p><a name="EX7">7.</a> Extract XMP as a block and write to output XMP file: <span class=lt>(same effect as above)</span></p> <pre>exiftool -xmp -b <i>SRC</i>.<i>EXT</i> > <i>DST</i>.xmp</pre> <p class=c>As with the previous command, this command will not copy extended XMP segments in JPEG images, but in this case the <code>-a</code> option may be added to also extract extended XMP blocks. However, the result would be a non-standard XMP file that ExifTool could read but other utilities may not.</p> <p class=a><a name="EX8">8.</a> Extract XMP as a block to an output text file with .xmp extension:</p> <p class=b>(same effect as above, but the destination file name will be the same as the source file, and this command will fail if the XMP file exists while the previous command will overwrite an existing file)</p> <pre>exiftool -xmp -b -w xmp <i>SRC</i>.<i>EXT</i></pre> <p class=c>The advantage of this command is that it may be applied to multiple source files or entire directories.</p> <p><a name="EX9">9.</a> Restore all XMP tags from an XMP sidecar file to XMP in a JPG image:</p> <pre>exiftool -tagsfromfile <i>SRC</i>.xmp -all:all <i>DST</i>.jpg</pre> <p class=a><a name="EX10">10.</a> Restore XMP as a block from an XMP sidecar file to a JPG image:</p> <p class=b>(same effect as above except that any non-writable XMP tags would be copied by this command, and the 2 kB of padding recommended by the XMP specification is not added when copying as a block)</p> <pre>exiftool -tagsfromfile <i>SRC</i>.xmp -xmp <i>DST</i>.jpg</pre> <h4>Batch Processing</h4> <p>Multiple files may be processed in a single command by specifying multiple file and/or directory names on the command line. The examples below demonstrate how to process all files with a specific extension in an entire directory tree.</p> <p class=a><a name="EX11">11.</a> Create XMP sidecar files for all files with extension EXT in a directory tree:</p> <p class=b>(when batch-generating sidecar files from many images, the <code>-o</code> form of the command is easier to use, but can not be used to modify existing XMP files)</p> <pre>exiftool -ext <i>EXT</i> -o %d%f.xmp -r <i>DIR</i></pre> <p class=c>where <code><i>DIR</i></code> is the name of the directory containing the images. The <code>-r</code> option causes sub-directories to be recursively processed. Multiple <code>-ext</code> options may be used to process different file types in a single command. With this command, same-named tags from any type of metadata will be written to the preferred XMP namespace in the output XMP file. To copy only XMP tags, <code>-xmp:all</code> may be added to the command. (See example 14 for more about this.)</p> <p class=a><a name="EX12">12.</a> Copy tags to sidecar files that already exist:</p> <p class=b>(same as above, but copies only to existing XMP files)</p> <pre>exiftool -ext xmp -tagsfromfile %d%f.<i>EXT</i> -r <i>DIR</i></pre> <p class=c>This command will add tags from the source files to information that already exists in the XMP files, but note that this command searches for the XMP files instead of the image files, so it will not generate new XMP sidecar files if some images don't have them. For this, the advanced (ie. tricky and confusing to use) <code>-srcfile</code> option comes in handy:</p> <p class=a><a name="EX13">13.</a> Copy tags to sidecar files, generating new files if necessary:</p> <p class=b>(same as above, but also creates new XMP files if they don't exist)</p> <pre>exiftool -ext <i>EXT</i> -tagsfromfile @ -srcfile %d%f.xmp -r <i>DIR</i></pre> <p class=c>Note that as with the previous two commands, this command will commute metadata from other groups to the preferred location in XMP.</p> <p class=a><a name="EX14">14.</a> Copy only XMP tags to the same namespace in sidecar files:</p> <p class=b>(same as above, but copies only XMP and preserves specific tag locations)</p> <pre>exiftool -ext <i>EXT</i> -tagsfromfile @ "-all:all&lt;xmp:all" -srcfile %d%f.xmp -r <i>DIR</i></pre> <p class=c>In this command, if "<code>-xmp:all</code>" was used instead of <code>"-all:all&lt;xmp:all"</code>, then all XMP tags would have been copied to their preferred namespaces in the sidecar file. But by writing to the destination group of "<code>all</code>", the specific location (ie. XMP namespace) of each tag is preserved.</p> <p class=a><a name="EX15">15.</a> Copy XMP from sidecar files back to the same locations in the source files:</p> <p class=b>(the inverse of the previous command)</p> <pre>exiftool -ext <i>EXT</i> -tagsfromfile %d%f.xmp -all:all -r <i>DIR</i></pre> <p class=c>Here, <code>-all:all</code> copies all metadata (in this case only XMP, since the sidecar XMP file contains no other types) to the same specific locations in the target files (extension <code><i>EXT</i></code>).</p> <p class=a><a name="EX16">16.</a> Write a tag to XMP sidecar if it exists, or the original file otherwise:</p> <pre>exiftool -ext <i>EXT</i> -artist="Phil" -srcfile %d%f.xmp -srcfile @ <i>DIR</i></pre> <p class=c>When multiple <code>-srcfile</code> options are used, the first existing file is processed. If none of the specified source files exists, then the first one in the list is created (however, this won't happen with this example since one of the specified source files is "<code>@</code>", which represents the original file name).</p> <p class=a><a name="EX17">17.</a> Create XMP sidecar file in another directory:</p> <pre>exiftool -ext <i>EXT</i> -o <i>DSTDIR</i>/%f.xmp -r <i>SRCDIR</i></pre> <p class=c>By specifying a directory name instead of <code>%d</code>, this command writes XMP files to <code><i>DSTDIR</i></code> instead of the original source directory. The same technique may be used in any of the above commands to write XMP to a sidecar file in a different directory.</p> <h4>Via the API</h4> <p>By specifying different tags in the <a href="ExifTool.html#SetNewValuesFromFile">SetNewValuesFromFile</a> call, the above examples numbered 1-6 are programmed like this:</p> <blockquote><table class='box'><tr><td><pre class='code'> $exifTool-><a href="ExifTool.html#SetNewValuesFromFile">SetNewValuesFromFile</a>('SRC.EXT', @tags_to_copy); $exifTool-><a href="ExifTool.html#WriteInfo">WriteInfo</a>(undef, 'DST.xmp'); </pre></td></tr></table></blockquote> <p>and examples 7 and 8 use this general technique:</p> <blockquote><table class='box'><tr><td><pre class='code'> my $info = <a href="ExifTool.html#ImageInfo">ImageInfo</a>('SRC.EXT', 'xmp'); die "No XMP" unless $$info{XMP}; open FILE, '&gt;DST.xmp'; print FILE ${$$info{XMP}}; close FILE; </pre></td></tr></table></blockquote> <hr> <a name="xml"></a> <h3>ExifTool XML Files</h3> <p>Closely related to the XMP sidecar file is the XML file written using the exiftool <code>-X</code> option. This file is RDF/XML format like XMP, but uses exiftool-specific namespaces to give an exact mapping for all exiftool tag names. This type of file is better suited to general information storage/recovery since it facilitates copying of more original metadata than an XMP file, but it doesn't have the portability of an XMP file or the ability to store native-format data like a MIE or EXV file, and ExifTool can not be used to edit XML files as it can with other metadata files. Below are example commands demonstrating the use of exiftool XML files.</p> <p>Create an exiftool XML sidecar file:</p> <pre>exiftool -X a.jpg > a.xml</pre> <p>Restore original meta information from exiftool XML file:</p> <pre>exiftool -tagsfromfile a.xml -all:all a.jpg</pre> <p>The <code>-X</code> option also supports extracting binary data when <code>-b</code> is added. For example, the above command may be modified to also store the binary MakerNotes block like this:</p> <pre>exiftool -X -b -makernotes -all a.jpg > a.xml</pre> <p>Note that we needed to add <code>-makernotes</code> because it isn't extracted as a block unless requested, and since we specified a tag to extract we also needed to add <code>-all</code> to continue extracting other tags as well. Restoring the original metadata from this file is the same as in the previous example.</p> <h4>Via the API</h4> <p>There is no way to automatically produce a sidecar exiftool XML file via the API since this function is accomplished with an output formatting option of the exiftool application. However, the the API may be used to read and copy tags from an exiftool XML file just like any other file format. When reading ExifTool XML files, all tags except those in the <code>ExifTool</code>, <code>File</code> and <code>Composite</code> groups are extracted with their original family 1 groups to facilitate copying of these tags back into their original locations in an image.</p> <hr> <a name="exif"></a> <h3>EXIF Files</h3> <p>EXIF files store EXIF information in the same format as in the APP1 segment of a JPEG image (<i>with the exception that there is no size limit for an EXIF file, while EXIF data in a JPEG image is limited to a maximum of 65527 bytes</i>). The three commands below illustrate techniques for copying the entire EXIF block from a source image (<code><i>SRCFILE</i></code>) to an output EXIF file (<code>out.exif</code>):</p> <pre>exiftool -exif -b <i>SRCFILE</i> > out.exif exiftool -tagsfromfile <i>SRCFILE</i> -exif out.exif exiftool -o out.exif -exif <i>SRCFILE</i></pre> <p>It is the specification of the <a href="TagNames/Extra.html">Extra</a> EXIF tag in each of the above commands (the "<code>-exif</code>" argument) that causes the EXIF information to be extracted as a block. JPEG, PNG, JP2, MIE and MIFF files all support storage of EXIF data blocks in this format, although exiftool does not currently write MIFF images.</p> <p>Tags may also be copied individually to and from an EXIF file, but remember that this will not copy "unsafe" tags unless they are specified explicitly. The following command creates an EXIF file from the metadata in a source file:</p> <pre>exiftool -o out.exif -all -unsafe <i>SRCFILE</i> </pre> <p>This technique works for any type of source file, provided the file contains at least one tag with the same name as an EXIF tag. Below is an example of how to apply this to all files in a directory:</p> <pre>exiftool -o %d%f.exif -all -unsafe <i>DIR</i> </pre> <hr> <a name="mie"></a> <h3>MIE Files</h3> <p>The <a href="MIE1.1-20070121.pdf">MIE file format</a> allows storage of native binary meta information, and is the best option for saving metadata from a file in its original format. Here are two examples that copy all individual tags plus the ICC Profile to a MIE sidecar file:</p> <pre>exiftool -tagsfromfile a.jpg -all:all -icc_profile a.mie</pre> <pre>exiftool -o a.mie -all:all -icc_profile a.jpg</pre> <p>And the following command performs the inverse operation, restoring metadata in a JPG image from a MIE file:</p> <pre>exiftool -tagsfromfile a.mie -all:all -icc_profile a.jpg</pre> <p>Information can also be copied in block form to a MIE file. This allows preservation of the original data structure as well as unknown and non-writable tags. The command below copies the full EXIF segment as a block from a JPEG image,</p> <pre>exiftool -tagsfromfile a.jpg -exif a.mie</pre> <p>which is functionally different from copying all writable EXIF tags individually with a command more like this</p> <pre>exiftool -tagsfromfile a.jpg -exif:all a.mie</pre> <p>Block-writable tags are listed in the <a href="TagNames/Extra.html">Extra Tags documentation</a>.</p> <p>MIE files also have the ability to store information in compressed format with the <code>-z</code> option (provided Compress::Zlib is installed on your system), which may be useful if disk space is at a premium.</p> <hr> <a name="exv"></a> <h3>EXV Files</h3> <p>EXV files are used by <a href="http://exiv2.org/">Exiv2</a>, and are basically a JPEG file without the image data, so they may be used as a metadata file to contain any information supported by the JPEG format (EXIF, XMP, IPTC, etc.). ExifTool has full read, write and create support for this format.</p> <hr> <i>Created Nov 12, 2008</i><br> <i>Last revised Sept 3, 2015</i> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> ���������������������������������������������������������Image-ExifTool-10.10/html/MIE1.1-20070121.pdf�������������������������������������������������������000644 �000765 �000024 �00000373357 12051425272 017570� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.3 %Äåòåë§ó ÐÄÆ 2 0 obj << /Length 1 0 R /Filter /FlateDecode >> stream xÚ•’ËnÂ0E÷þŠÛH™1vœl‹@eQ©”Hݰ‰¢PRñL(_“DT–â×äž™ëÙ`„ 8€&I1Œõa»]*ä)Þ±D§W0’TŽ"qñ$•.wÞa%ÜïÖj$ <E`ª½Ã‚IhÖˆè XºDS´^†}°ä6¢Oô#ŒDSkêÐÂÁ…dº1\NWù"Þf«%úË$^_ór×5 ÿ ùÆ]ùüKiÍS JÆë4ɦYRAp"ÄšêÆÍ¥A!«f5ŠÈzÄžâKQq5sãW¢nf&÷!ÍMÕIë-ÝIø“ö½~œ¨œPÖM;z«õ>Ï>f[S-{¦7®{fÜsÝÕßp…æ'Hq£R$mx‚U’ëZjš¹à3Ñ[îo$髵Àùn<E¬qÏkžK Gu²¯³lŽ{Ûã4Wí««‚Ïq¾K÷GÅÑéøÓÛ endstream endobj 1 0 obj 351 endobj 4 0 obj << /Type /Page /Parent 5 0 R /Resources 6 0 R /Contents 2 0 R /MediaBox [ 0 0 612 792 ] >> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F2.1 7 0 R /F1.0 8 0 R >> >> endobj 10 0 obj << /Length 9 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xÚ}’OHQÇ¿³%B¬e&RðN¶Wí`ŒÝõoʶ¬k¦²Î¾ÙÞÌn%Bˆ.AÖ1ºXÑI:†‚b]"è(‚—í73»îˆÚƒ7ï3¿ÿ¿ß{@](mšz€yÃÉþ(»;>Áê7P‡A+­Xf$‘v™lqdí}…䜛áãõÿ] ‚U€Æ¬ÇמöxÀáû¶iO:¬äÒb“¸M¤’1âWÄg³>žöq†[ ñ2ñMÅ'"()Y'æ±ld4ƒä—‰»2–’'&ßÀSg^™öÐ}8õ¹&›°€åwÀ¥Öš,Ô \V:k²Ý¤;©iÝR;;\‘Œu?ÊåÝV þ°ÿ¼\þûº\ÞC9¾u¥(J•IÒÀëÃ]ýÜàBS˜s_ QP5ûFz¼Úë׋Gõ%«t{3qW°D÷0vz ¼ü \}\ø�$€Ôu¡ºmþÀÍ+˜…–ÍÙ¬C–;XØ9:Y„^g±BÞ,Ú\°ACioci]g®©Å·¸(ñL;òz±Úï9ÚAnŒŽÐIó ¨Üê­°4“I÷ÐÝ x#Ã{zwA¼¨j}ƒÎ…Ðþ¤Š¾Q¥óš=˜ò8Ðmèñá Ã(Äo{1±cÚÑd5¾Ué­ÊgÒ·t¶üÆlaȱi"ßÐ\.5æ±”šËÅâ^Å8tph0èk€!‰~D† TÒhd¡‘”»6‚ØÂì±–:>f¤ß&Ÿm×çŠäíxÝA4Ž…¶ƒLþ&ÿ–·ä%ù­ük±¥ªiÄ”¦¬?ûCqÌÕ¸m¥&/¾By#¤Õ‘%iþ 'ËW©¯:ÕXl©Errð'ñ=_—Ü—)Œi7Ò¬›©äê,úF|ÙNšٮͯ6×rm^™Ü ®ÍšUáHWü «Ãÿ5;¿?ÿͰh endstream endobj 9 0 obj 706 endobj 3 0 obj [ /ICCBased 10 0 R ] endobj 12 0 obj << /Length 11 0 R /Filter /FlateDecode >> stream xÚ­K$ÇuF÷ñ+j).8ÌÈWÜ»2$jh R–86Ú´©Öp¬yP3=2üï]]y¿`wWVu> Ø2 ÜîšõõW'2þuøÓá_‡¡ë}ó¢±&ÆCÛ½(ãáÓíᯇ‡o¾ýœ?}>4§ÿùüÓñ¿Ý¼hûÓÿ÷õýJÙ¥ô‡ŸÞ~÷ú0Lÿ½¯ÿ·ÍÇÿÕ5MwxýþðÍwÝ‹æ¯ÿqøMûÕáõÿ^¾>þèûž-égÇŸ[ºî…·‹üaúñ)~ü?~<¸•C{œyúá¹þð×7ÿýîöðñ‡o?~¸»ýp÷¹þ2éÂè™WÖ‡.ûÓÑýùæîðöóáûW/ÿ㫤—¸xêp|áO§ið‹_ÿÁ–Oëǘ–žüš¦¥aðó/zé´ôðw+í¦iiþ•Ú°|ZzößÍí™ii…1çÙiiÓ±í–v2=Œ]9NK;˜Æ´tš64{VHzò»Ýúi“h,ãÒiiÁ¿›9¸BJÓ‚+¤ä\!¥5p…”>ƒ+¤ =¸BÊXÀR¬!Wˆwà ±fWˆeWˆu-¸B¬Àbƒ+ÄJWˆYO®/à ñÜ€+ÄÛ\!Þà ñÞÁâc ®/¸BÜ \!¹i2¸Dr“{pä¦-à"ÉM߀«$7ÃÕ7DZ‹bÁÏ ¹)~É·à§|üÇ?†äœ ü’sGþ‰È¹'ÿFä<$r.ä_‰# òÏDÎNþÈmCþ¡ÈmÛ’Ðvmod´c&# -=­2º†üq òƒDîZò“Dî:ò£Dîò³DîFòÃDî ùi"wžÉ蛞Œ€>2ú®!# ï;2úa$# É/›roä·M¹wòë¦<4ä÷MyhÉ/œòБß8å¡'¿rÊÃØ0r3"FîFäÁÉíˆ<fr?"-¹!‘ÇŽÜ‘Èã@nIäq$÷$òXÈM‰<:¹+qü”BnKä’É}‰\Z'# ô-eÈ(£‘P,“P¼'#ÀšBF€µ öpãzØiç‹�Û·uý4lËÞõå°å›×K"À®ï^¯�?ß¾Þ^÷¯‘ð®àw°/D€¯ÙÂ~>üÙ=ìUà6±·E@Û<ÜÅÞmsÚÆ¦" mZ# m¶ld_Ö¤šå;ÙiÉ¿Ýõ­ì´Åù^vÚC¶nfÐæf# ÍÙÁhóšýìg# =~zŸ›Õo4Øúnx:ê»Û›»/Ÿn?o°×ú©Ë>ºcôS•=N#–I?5Ù™¼e•ôS‘]=m~‘ôS]6íÙ5ÒO5öÊ´5%ú©ÅžMÛöGb˜Jì4m÷߈áÔaÓ¦ÿD„{¹uZšu/×M»ø"ÜË%Óü}÷Z!á^R+Ä \!“{I­p/¡2¹—Ô ÷Z!á^B+$ÜKh…„{ ­É½¤VH¸—Ð ™ÜKj…„{ ­p/¡î%´B½¤VÈ©®R+$ÜKh…Lî%µB½„VH¸—Ð ÷Z!á^B+dr/±â\!“{I­p/¡î%´B½„VH¸—Ð ™ÜKj…„{ ­p/©%"÷Z#r//[m7ö øUî%ô!Uî%ô)Uî%ô1Uî%ô9Uî%ôö—{ ½ÿå^Bî%•�r/©˜ÜK,½¤" ÜK*½¤" ÜK*½¤" ÜK*½¤" ÜK*½¤" ÜK*&÷‹€p/©˜ÜK,½¤" ÜK*½¤" ÜK*½¤" ÜK*½¤" ÜK*½¤" ÜK*&÷‹€p/©˜ÜK,½¤" ÜK*½¤" ÜK*½¤" ÜK*½¤" ÜK*½¤" ÜK*&÷‹€p/©˜ÜK,½¤" ÜK* º_-÷’Š€‚îX˽¤"  {Ör/©(讵ÜK* Ý·–{IE€¡;×r/©°ë{×k#ÀÎ7¯÷D€ÕÝkÆnÌ™Œ�߸}Én\³½Àn|v{Ýxa {cøÃ=ìý0¹—TȽ„" ÜK*ä^B ÷Š�¹—PȽ„"@î%r/¡{ E€ÜK(ä^Bpr/gVI¿eÖñ׆~Š’¾¾Êï_½<äùðÝÿüýo_~ü¯—ß¾úîÕ·¿}ýê?þö›ãÛ¼|Ýä¯Ûü·¯üдüxuó¢Ñ><üÁ/6Øž¹ëû§ãv}‰6XŒKg¿Ý†¿Ý±(\z±þvvÇOÐ[Æ]ú­i–[ð%ZîK´ÖfÇmý­€"í$;}Å× iÙÇ_¢•fÏBIg_ñõëÇ¥+Ç«mé¸E_¢å«ïŠÕ_¢µ#CßpœCFÀ0ƒµd >’0憌€{uŒ€ûïäÀ‡–Œ€qÉ­!#`ôžŒ€Ò¥mÉ(ÝHF@2ÊØ“PŠ‘P¼%#àÞ|#àþK40¬ëɰÞȰ±%#ÀÊHF€yCF€7=žŒ�ïZ2¼Éð±!#ÀKOFÀ½¸ÊEÀé[/.Ú&`´M×€Ð6}F@Û F@ÛœÚÞõ%Zý´MD@››Œ€6猀6·F@{ü|<7kÜxDx,ÍÙá·ïn?Þ}úòÓýIáí×\<½ÿš‹ã4ðš‹™—½ãš‹ÕÓ®^s±lÚÒk.®LÛpÍÅÙ´]×\LÓ¨k.v0¹æbë´ùk.ÖM{îš‹%Ó–_s­¸æZ!qÔZ!qÍ´Bâ¨%´Bâ¨%´Bâ¨%´Bâ¨%µB¼WHµ„VH\s­8j ­8j ­8j ­8j ­¸æ‚Z!^À×\@+$ŽZB+$ŽZB+$ŽZB+$ŽZB+$®¹€VHµ„Vˆ®¹€–ˆŽZBkDG-¡E¢£–Ð*ÑQËKã6^s}ÑQKèCˆŽZBŸBtÔú¢£–Ð組@×\@  £–TÄ5TÄQK*â¨%qÔ’Š€8jIE@µ¤" ŽZRG-©ˆ£–TÄQK*â¨%qÍqÔ’Š€¸æ‚Š€8jIE@µ¤" ŽZRG-©ˆ£–TÄQK*â¨%qÔ’Š€8jIE@µ¤" ®¹ " ŽZR×\PG-©ˆ£–TÄQK*â¨%qÔ’Š€8jIE@µ¤" ŽZRG-©ˆ£–TÄ5TÄQK*âš *â¨%qÔ’Š€8jIE@µ¤" ŽZRG-©ˆ£–TÄQK*â¨%qÔ’Š€¸æ‚Š�{¸q]sAE€íÛº¾pͶ|ózÅ5Tøùö5pÍqÔ’Š�߸ƒ}ýš *üÙ=ì-×\@ £–Pèš (tÔŠ�µ„"@G-¡ÐQK(tÔŠ�µ„"@G-¡ÐQK(tÔŠ€ÓQË™Y[¶bã¼Ãöö͇›}ÛÃÑû¶ã4Ða›yÙ;¶ÕÓ®:l˦-uØ®LÛà°MÛå°MÓ(‡mÓ‡më´y‡mÝ´ç¶%Ó–;lÐ ‡ Z!á°A+$6h…„ípØ ´BÂa£Vˆwà ‡ Z!á°A+$6h…„ípØ ´BÂa£Vˆp…„ípØ ´BÂaƒVH8lÐ ‡ Z!á°A+D´Dä°AkD´Hä°A«DÛ¥q6è3ˆ6èCˆ6èSˆ6ècˆ6èsˆ6(�ä°A ‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب‡Š€pب°‡טÃFE€íÛº¾à°Q`Ë7¯W8lTøùö5à°Q¾qûºÃFE€?»‡½Åaƒ"@rØ ÃE€6(ä°A ‡ Š�9lPÈaƒ"@rØ ÃEÀÉa›™µÕaó¦}:êå»Û÷·îv=Š-$¥‡ÓÓ^Ié~±^BRšyå[–KHJ«§¥k’Ò²ii¡¤teÚIélÚ.IišFIJ;˜ÎHJ[§ÍKJë¦=')-™¶\R¢Vˆwà I Z!!)A+$$%h…„¤­” ’´BBR¢Vˆp…„¤­” ’´BBR‚VHHJÐ I Z!!)A+D’´D$)AkD’´H$)A«D’Ò¥q%%¨aJR‚*¦$%¨cJR‚J¦$%¨eJR‚@’”�’”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨I‰Š€”¨ðºMJJTøÆìë’þìöI Š�IJPHR‚"@’’” ¤E€$%($)A I Š�IJPHR‚"@’'IifÖ&I©Œ÷ûn6Íê~}ÒÖÇOïoî¾ýø÷OÙz4wÿc¶îÇ¥'¿æŽçlͽêÚZ?îê“¶Ž[ú¨­kã6<kë|Ü®‡mŸ´“¬ž¶µ‡ìÌã¶6›ÞÖÊqÏ=pkѸåOܺ8n埋°Ù¨Š€ÉgÃ" „6*Âh£" ”6*Âi£" ¤6*&« ‹€IkÃ" ¼6*Bl£" Ì6*Bm£" Ü6*Bn£"`²Û°½Š€ðÛ¨ÁŠ€0ܨ˜7,Âq£" $7,d¹Q! ÍJynT Ht£r@¦RÝ8¾Þ¢|CvÃø†í†ñ Ý ã¾Æ7„7Œïd¼|­cùúˆò é ãÖÆ7´7Œoxoßß0¾a¾q|­ |Ã}Ãø†ü†ñ û ã;éoßðß0¾!Àq|‹±|íWáÀa|C‚Ãø†‡ñ ãÆ7D8ޝ±ý*T8ŒïäÂq|C†Ãø† ‡ñ ã>Æ7„8ޝ±ý*”8Œo8qßâ0¾aÅa|C‹Ãø†‡ñÄ8¯³ý*Ô8Œo¸qßã0¾aÇa|CÃø†Çñ5¶_…!‡ñ EãŽÆ×:¶_YÏö+Ø~e…íWfl¿2gû•g¶_yËö«å0¾>°ýÊG¶_yaû•Ú¯dÌQ|C™ÃøÊ™£øJš£øÊš£øJ›ãøZÃòu´_ÉœÃøæŒö+¹sß{ynnÙ÷ޞ˹{úB_ß¼ùÃí‡7w??;3[Ñ_fÆná;D}Y2.-Wû.KÛÔ¾‡ãö˜‚Ñ]ŽãS0ªË:—MÁh.«Ç¥«jß²qi©Úwe\Ú öK{žQãö›‚§Ò’ö}d ŽÝ®…’æÕ>(¤öA µŠ�©}PHíƒ"@jRû ÚE€Ô>(¤öA¬£" žXGE€Ô>(¤öA µŠ�©}PHíƒ"@jRû ÚE€Ô>(¤öA µŠ€xz“Ú‡E@Uû6ÍK—Õ¾¥óÒBµ‚[Õ¾ÇóÒnµzãVµzçVµ åªöA©\Õ>(–«ÚårUû(¾Rû(¾Rû(¾Rû0¾Ö±|ýô]Õ>НÔ>НÔ>НÔ>НÔ>НÔ>Œ¯¡Åªª}_©}_©}_©}_©}_©}ßb,_Ï(_©}_©}_©}_©}_©}_©}_cû•Ô>НÔ>НÔ>НÔ>НÔ>НÔ>НÔ>Œ¯±ýJjÅWjÅWjÅWjÅWjÅWjÅWjÆ×Ù~%µâ+µâ+µâ+µâ+µâ+µãkl¿’ÚGñµ†íWÖ²ýÊ:¶_YÏö+Ø~e…íWfl¿2gû•g¶_yËö+ïØ~%µâë#Û¯¼°ýÊ íWUíƒøVµâ[Õ>ˆoUû ¾UíƒøVµãk Ë×Ñ~UÕ>НÔ>ŠoîÐ~5©}3p}«Ú׿òô…þþæîf»Û…cfî&·/úÆ’qi¹Œwi\Ú&ã=·Ç틲q‡¸}Ñ5Ö¡¸ìöEÕX=.]•ñ–KKe¼+ãÒïl\Ú!ãiÜ~·ïÔ2Ҳܾ2îZ(i^ƃ"@2’ñ ŒE€d<($ãA Š�ÉxPHƃ"@2zΓŒ‡E€d<($ãA Š�ÉxPHƃ"@2’ñ ŒE€d<($ãA Š�=gŠ�]&Ke@•ñ6ÍK—e¼¥óÒB¢[e¼ÇóvÈ}ãH¾s«Œ½u«Œ¥r•ñ X®2”ËUƃ‚¹Êx_Éx_Éx_ëX¾Ž~ú®2ÅW2ÅW2ÅW2ÅW2ÅW2Æ×ÐbUe<Нd<Нd<Нd<Нd<Нd<Œo1–¯g”¯d<Нd<Нd<Нd<Нd<Нd<Œ¯±ýJ2ÅW2ÅW2ÅW2ÅW2ÅW2ÅW2Æ×Ø~%â+â+â+â+â+â+ãël¿’ŒGñ•ŒGñ•ŒGñ•ŒGñ•ŒGñ•Œ‡ñ5¶_IÆ£øJÆ£øZËö+ëØ~e=Û¯l`û•¶_™±ýÊœíWžÙ~å-Û¯¼cû•l¿’ŒGñõÂö+7´_Uâ[e<ˆo•ñ ¾UƃøVâ[e<Œ¯5,_GûU•ñ(¾9£ýªÊxß“Œ7³yä[àÞËx]Û>Ý|}󿇛÷·ðöÑ®¦¡»éöQ®V»ðh·èVËÆ= lT«+ãÒ†ë}ÏÆ¥]×ûÎðÝþ À´‡ìÃ}_i‡[Ç¥ùë}×KÏ]ï»dÜ’K`óõwEÚv½ïÃqiïõ¾§qDÂK;„"@Ï�„"@Ú!Ò¡vE€´C(&í‹�i‡PH;„"@Ú!Ò¡vE€´C(¤B g�B íŠ�i‡PH;„"@Ú!“vˆE€´C(¤B íŠ�i‡PH;„"@Ú!Ò¡¨Ï�„ÐVíb[µCnÕ!ºU;„ðVíã[œåë-ÊWÚ!ÅWÚ!ÅWÚ!ÅWÚ!ÅWÚ!ÅWÚ!Æ×:–¯(_i‡_i‡_i‡_i‡_i‡_i‡_C?„Wíâ+íâ+íâ+íâ+íâ+íã[Ø~%íâ+íâ+íâ+íâ+íâ+íâ+íãkl¿’vHñ•vHñ•vHñ•vHñ•vHñ•vHñ•vˆñ5¶_I;¤øJ;¤øJ;¤øJ;¤øJ;¤øJ;¤øJ;Äø:Û¯¤R|¥R|¥R|¥R|¥R|¥b|íWÅÙ~e Û¯¬eû•ul¿²žíWÒ)¾VØ~eÆö+s¶_yfû•·l¿òŽíW>°ýÊG¶_yaû•Ú¯ªvñ­Ú!Ä·j‡ߪB|«vñ­Ú!Æ×–¯£ýªj‡ßÜv³Ãr³aùäõõíxù!{í7ý7öUZï E¬>¨GÇq¤z4óÒ÷¨G«Ç]W–[¬]·E=:·O=šÆaêѲsêÑÖqÔ£uãžU–Œ[¡]·Q=‚"@êR zE€Ô#(¤A õŠ�©GPH=‚"@êR zE€Ô#(¤A õŠ�©GPTõB[Õ#ˆmU ¸U=‚èVõÂ[Õ#Œoq–¯·(_©G_©G_©G_©G_©G_©G_ëX¾>¢|¥Q|¥Q|¥Q|¥Q|¥Q|¥a| ý^Õ#НÔ#НÔ#НÔ#НÔ#НÔ#Œoaû•Ô#НÔ#НÔ#НÔ#НÔ#НÔ#НÔ#Œ¯±ýJêÅWêÅWêÅWêÅWêÅWêÅWêÆ×Ø~%õˆâ+õˆâ+õˆâ+õˆâ+õˆâ+õˆâ+õãël¿’zDñ•zDñ•zDñ•zDñ•zDñ•z„ñ5¶_I=¢øJ=¢øJ=¢øJ=¢øJ=¢øJ=¢øJ=ÂøÛ¯¤Q|¥Q|½eû•wl¿òíW>²ýÊ Û¯ÜÐ~UÕ#ˆoU ¾U=‚øVõâ[Õ#ˆoU0¾Ö°|íWU=¢øžÔ£™a9oU†.Ï©G¿{÷ñ§nŽô°‡c÷Üx}ã8¹ñ2êÆÌ‹Þtãe´ÕãÒÕ§€-—–^>ze\ÚpùèÙ¸<‹¦1ÛÿÈ3Ÿ¤£dÝx=cë¸4¯â­—žSñ–Œ[òȳáú»"m¹|‹�©xPHŃ"@*Rñ Ðå£PHŃ"@*“ЇE€T<(¤âA Š�©xPHŃ"@*Rñ ŠE€T<(tù(Rñ ŠEÀ¤âa Š�©xPHŃ"@*UŃ2 ªxPTJªâAt«Šá­*Æ·8Ë×[”¯T<НT<НT<НT<НT<НT<Œ¯u,_Q¾Rñ(¾Rñ(¾Rñ(¾Rñ(¾Rñ(¾Rñ0¾†~¯*ÅW*ÅW*ÅW*ÅW*ÅW*Æ·°ýJ*ÅW*ÅW*ÅW*ÅW*ÅW*ÅW*Æ×Ø~%â+â+â+â+â+â+ãkl¿’ŠGñ•ŠGñ•ŠGñ•ŠGñ•ŠGñ•ŠGñ•Їñu¶_IÅ£øJÅ£øJÅ£øJÅ£øJÅ£øJÅÃøÛ¯Š³ýʶ_YËö+ëØ~e=Û¯l`û•¶_™±ýJ*Å×3Û¯¼eû•wl¿òíW>²ýÊ Û¯ÜÐ~UU<ˆoUñ ¾UŃøVâ[U<ˆoUñ0¾Ö°|íWUÅ£øžT¼™[U¼Utï³±¦a¹ûþÕËÛO¿üòyb¹x3s·–‹wiÜJÀrñŽÛc FÝ8ŽKϽØ%¦`´%ÿvKLÁ(«Ç¥«.Þ²qi©‹we\ZíâÍŒÛæÈśƥdÃÅK{È>2»²k¡¤yoݸôœ‹E€\<(äâA Š�¹xPÈŃ"@.rñ Ðcñ ‹EÀäâa Š�¹xPÈŃ"@.rñ ‹E€\<(äâA Š�¹xPè±xPÈŃ"`rñ°‹E€\<(ª‹e@uñ ¨.”ÕŃb ºxPTã[œåë-ÊW.ÅW.ÅW.ÅW.ÅW.ÅW.Æ×:–¯(_¹x_¹x_¹x_¹x_¹x_¹x_+(_¹x_¹x_¹x_¹x_¹x_¹xßÂö+¹x_¹x_¹x_¹x_¹x_¹x_¹x_cû•\<Н\<Н\<Н\<Н\<Н\<Н\<Œ¯±ýJ.ÅW.ÅW.ÅW.ÅW.ÅW.ÅW.Æ×Ù~%â+â+â+â+â+ãkl¿*Îö+kØ~e-Û¯¬cû•õl¿²íWVØ~eÆö+s¶_yfû•\<Нwl¿òíW>²ýÊ Û¯ÜÐ~U]<ˆouñ ¾ÕŃøVâ[]<ˆouñ0¾Ö°|íWÕÅ£øž\¼ÇÃÒ*ïì±xe8{ ÉÞ{x‡×·ŸÞ¿ýps÷ñÓ–[*#·¦éûo©ŒØZ6.-µ{®ŒKìž³qi—Ý3Cfû¥—i=Š O‹ŠÄÚ:.ÍÛ=ëÆ¥çìž%ãÒr»çÒ¸´Íîy8.íµ{Nã§E5ã.²OìdÈî"@v²{ ÝEÀd÷` »Š�Ù=PÈî"@v²{ Г¶ ÝE€ì(ªÝ¡­vĶÚ=Üj÷@t«Ýá­vôέvÆ×[”¯ìНìНìНìНìН쌯u,_Q¾²{(¾²{(¾²{(¾²{(¾²{(¾²{0¾VP¾²{(¾²{(¾²{(¾²{(¾²{(¾²{0¾ÅX¾Îö+Ù=_Ù=_Ù=_Ù=_Ù=_Ù=_cû•ìНìНìНìНìНìН쌯±ýJvÅWvÅWvÅWvÅWvÅWvÅWvÆ×Ù~%»‡â+»‡â+»‡â+»‡â+»‡â+»ãkl¿’ÝCñ•ÝCñ•ÝCñ•ÝCñ•ÝCñ•ÝCñ•݃ñ5¶_Éî¡øÊî¡øÊî¡øÊî¡øúÀö+Ù~å…íWnh¿ªvÄ·Ú=ßj÷@|«Ýñ­vÄ·Ú=_kX¾Žö«j÷P|OvÏãa;íƧÈß½}wûõ»Ûß¾;,yèVÌO¯\›~Ä~s#Öö’qKÌXÚ—Æ¥-W®=·Ç܈…}G¼ñ$‚¬CqÙ܈e½z\ºzåÚ²qié•kWÆ¥ W®Ûhn ßûÍ“’ö}dnX¿k¡¤ù+× E€D($‚@ Š�‰ PH"@"U2 Š ç¥íâF[H¸UèVzãVzçVzëVzïV„â+„â+„â+„â+„â+ãkË×G”¯DНDНDНDНDНDŒ¯¡ÅªŠ _‰ _‰ _‰ _‰ _‰ ßb,_Ï(_‰ _‰ _‰ _‰ _‰ _‰ _cû•DНDНDНDНDНDНDŒ¯±ýJ"ÅW"ÅW"ÅW"ÅW"ÅW"ÅW"Æ×Ù~%„â+„â+„â+„â+„â+ãkl¿’Bñ•Bñ•Bñ•Bñ•Bñ•Bñ•‚ñ5¶_I¡øJ¡øJ¡øJ¡øJ¡øJ¡øJÁøÚ¯ªñ­"Ä·Š ß*‚@|«ñ­"Æ×–¯£ýªŠ ß“27·[èÞÿf^š§ ùñ§›Þ~xsøÝÍOÿüß›Oÿ|¸ûùÓÇ/o~>ÜœÔ{SdËnšvGÿÌ´û˜ìqúü™“]Çd×Í{þ˜ì’ykŽÉ^š·õ˜ìÃyÄ1YНvG(¾Ú¡øjw„â«ÝНvG(¾ÚÁøZAùjw„â«ÝНvG(¾Ú¡øjw„â«ÝŒo1–¯g”¯vG(¾Ú¡øjw„â«ÝНvG(¾ÚÁøZËòõå«ÝНvG(¾Ú¡øjw„â«ÝНvG0¾Æö+íŽP|µ;BñÕîÅW»#_íŽP|µ;BñÕîÆ×Ù~¥ÝНvG(¾Ú¡øjw„â«ÝНvG0¾Æö+íŽP|µ;BñÕîÅW»#_íŽP|µ;BñÕîÆ×Ø~¥ÝНvG(¾Ú¡øjw„â«ÝНvG(¾ÚÁøÚ¯êîÄ·îŽ@|ëîÄ·îŽ@|ëîÄ·îŽ`|­aù:Ú¯êîÅ÷´;2³¹°ewäp¿;rüŸÞµýúÓÍÛw·Ÿ?¾}óáæî˧Û-OÁŸ‚:Æï¾}œrzá¸çŸ‚?Åôµq«ž‚?¥ôù¸m)ã‘ÿsh6;etZbþ e<òó¸4ûÈÿ•ãÒõGþ/·ä,õ”ÏÇ­=KÝŸ¿+öœ¥껂Hç8é½g¡¤ó“ÞTÄIo*â¤7qÒ›Š€8éMEÀtÒ‹€8éME@<òŸŠ€8éME@œô¦" NzS'½©ˆ“ÞTÄIo*â¤7qÒ›Š€8éME€NzS'½±ÐIïmóÒÅGþ/ž—ž{½CGâÕIï'óvœ”/N¾uuÒ›zïÊe¢bY.•Ër™¨`–ËD%³\&Œo¸L_ëX¾>¢|ÃeÂø†Ë„ñ — ã.Æ7\&Œo¸L_C‹•\&Œo¸Lßp™0¾á2a|ÃeÂø†ËÄñ-ÆòõŒò — ã.Æ7\&Œo¸Lßp™0¾á2q|íWá2a|ÃeÂø†Ë„ñ — ã.Æ7\&Œo¸L_cûU¸Lßp™0¾á2a|ÃeÂø†Ë„ñ — ã.Ç×Ù~.Æ7\&Œo¸Lßp™0¾á2a|ÃeâøÛ¯ÂeÂø†Ë„ñ — ã.Æ7\&Œo¸Lßp™8¾Æö«p™0¾žÙ~å-Û¯¼cû•l¿ò‘íWá2q| íWr™(¾r™(¾r™(¾r™(¾r™(¾r™8¾Ö°|íWr™0¾÷.ÓܰÜmØ<¹LÇ%øtØýaîßßÜÝþróîËíç û>CÄþÙðrO¤þ4n¿ÜÓN›z3/}“Ü™¿u\š£ÖKωQKÆ¥¥bÔåq+ßÀ£ŽÛ#÷DÜÇ!rO¤ýŽ…’fĨÕãÒU1jÙ¸´TŒº2.­¿ƒŠ�‰QPLb£ E€Ä((â *$FA 1 Š�‰QPHŒ‚"@b£ E€Ä((&1 ‹�‰QPHŒ‚" ŠQPè *ª¥@£ ¨b”UŒÂøgùz‹ò•Eñ•Eñ•Eñ•Eñ•Eñ•…ñµŽåë#ÊWbÅWbÅWbÅWbÅWbÅWbÆ× ÊWbÅWbÅWbÅWbÅWbÅWbÆ·°ýJbÅWbÅWbÅWbÅWbÅWbÅWbÆ×Ø~%1Šâ+1Šâ+1Šâ+1Šâ+1Šâ+1Šâ+1 ãkl¿’Eñ•Eñ•Eñ•Eñ•Eñ•Eñ•…ñu¶_IŒ¢øJŒ¢øJŒ¢øJŒ¢øJŒ¢øJŒÂøÛ¯$FQ|%FQ|%FQ|%FQ|%FQ|%FQ|%Fa|íWæl¿òÌö+‰Q_ïØ~åÛ¯|dû•¶_¹¡ýªŠQß*FA|«ñ­bÄ·ŠQß*Fa|­aù:Ú¯ªEñ=‰Q‡¥bÔ…ie<´]ãÓ6ã¯÷iüðåýí§·?ݼ;üùö—O·Ÿo?ÜÝܽýøaÃÉ}ÓOÙ}剌%ãÒòG©\—¶<Jåñ¸=[üa Ç×ÙÈX‡âò«Ç¥«RY6.-}”Ê•qiãTÎÆmÜâï¾+ÒN²a ¤=dmñí®…’æ¥E€Œ(ª1�e@5 ¨Æ�”Õ€b Þj `|‹³|½EùÊ øÊ øÊ øÊ øÊ øÊÀøZÇòõå+c€â+c€â+c€â+c€â+c€â+c�ãkå+c€â+c€â+c€â+c€â+c€â+c�ã[Ø~%c€â+c€â+c€â+c€â+c€â+c€â+c�ãkl¿’1@ñ•1@ñ•1@ñ•1@ñ•1@ñ•1@ñ•1€ñ5¶_É øÊ øÊ øÊ øÊ øÊ øÊÀø:Û¯d P|e P|e P|e P|e P|e `|íW2(¾2(¾2(¾2(¾2(¾2(¾20¾Æö+_______CûU5 ¾Õ€øVc�â[ˆo5 ¾ÕÀøZÃòu´_Uc€â{2fàæ~ Ý{c ÏÝÓWúû›»Ûo^¿}{øîã§÷7w[à¹53}Ó<"¶.K[.Jz<n=ä8ŽxÓéy Kþí–<À#"kõ¸tõ¢¤eãÒÒ‹’®ŒK.J:·ñWÓ¸Ý[ûÓó@Ò²·öuQÒÖqiÞîY7îY»Š�Ù=PÈî"@v²{ ÝE€ì(d÷@ »Š�Ù=PÈî"@v²{ ÝE@µ{  ¨vÕîR Ú=P T»Â[íŒoq–¯·(_Ù=_Ù=_Ù=_Ù=_Ù=_Ù=_ëX¾>¢|e÷P|e÷P|e÷P|e÷P|e÷P|e÷`|­ |e÷P|e÷P|e÷P|e÷P|e÷P|e÷`| Û¯d÷P|e÷P|e÷P|e÷P|e÷P|e÷P|e÷`|íW²{(¾²{(¾²{(¾²{(¾²{(¾²{(¾²{0¾Æö+Ù=_Ù=_Ù=_Ù=_Ù=_Ù=_Ù=_gû•ìНìНìНìНìН쌯±ýJvÅWvÅWvÅWvÅWvÅWvÅWvÆ×Ø~%»‡â+»‡â+»‡â+»‡âëÛ¯|dû•¶_¹¡ýªÚ=ßj÷@|«Ýñ­vÄ·Ú=ßj÷`|­aù:Ú¯ªÝCñ=Ù=3p·Ù=÷¿ÙÐÚùEIß¿<¼þ¿_n7<�¤Â13v à!úÆ’q øQ7.[‰wˆ¶ñpܺC”ã8âá;Ctu(.¾w‡¨«ÇÍ+C4eãÒÒ«¹®ŒK®æ:—v\Í¥qûoú:µŒ´‡ì£›¾†f×BIó*Rñ ŠE€T<(¤âA Š�©xPHŃ"@*ºš Š�©xPL*Rñ ŠE€T<(¤âA Š�©xPHŃ"@*Rñ ŠE€®æ‚"@*“ЇE€T<(ªŠe@Uñ ¨*”UŃb ªxPT ‚ªâa|½EùJÅ£øJÅ£øJÅ£øJÅ£øJÅ£øJÅÃøZÇòõå+â+â+â+â+â+ãkå+â+â+â+â+â+ã[Œåël¿’ŠGñ•ŠGñ•ŠGñ•ŠGñ•ŠGñ•Їñ5¶_IÅ£øJÅ£øJÅ£øJÅ£øJÅ£øJÅ£øJÅÃøÛ¯¤âQ|¥âQ|¥âQ|¥âQ|¥âQ|¥âQ|¥âa|íWRñ(¾Rñ(¾Rñ(¾Rñ(¾Rñ(¾Rñ0¾Æö«âl¿²†íWÖ²ýÊ:¶_YÏö+Ø~e…íWfl¿2gû•g¶_yËö+©x_Ø~å#Û¯¼°ýÊ íWUŃøVâ[U<ˆoUñ ¾UŃøVãk Ë×Ñ~UU<ŠïIÅ›VU¼5;'oìû§ÃþpûïÛwŸÿqøñË/¿|üt÷UZo EP?¿çYV‘ÓÇqĺ#¦g^ü–e#—iõ¸tõ±bËÆ¥¥»2.mx¬ØÙ¸ŠJ$ô4n÷þôä2¥=d=Ë*òyë¸4ÿX±uãÒs[2.-¬Ø¥qiËcŰËE€+E€\&(ä2A — Š�¹LPÈe‚"`r™°ËE€\&(ä2A — Š�¹LPÈe‚"@ƒ"@.Õe‚ÐV— b[]&nu™ ºÕe‚ðV— zçV— ãë-ÊW.ÅW.ÅW.ÅW.ÅW.ÅW.Æ×:–¯(_¹L_¹L_¹L_¹L_¹L_¹L_C?„W—‰â+—‰â+—‰â+—‰â+—‰â+— ã[Œåël¿’ËDñ•ËDñ•ËDñ•ËDñ•ËDñ•Ë„ñ5¶_Ée¢øÊe¢øÊe¢øÊe¢øÊe¢øÊe¢øÊeÂøÛ¯ä2Q|å2Q|å2Q|å2Q|å2Q|å2Q|å2a|íWr™(¾r™(¾r™(¾r™(¾r™(¾r™0¾Æö+¹L_¹L_¹L_¹L_¹L_¹L_¹L_cû•\&Нg¶_yËö+ïØ~åÛ¯|dû•¶_¹¡ýªºLßê2A|«Ëñ­.Ä·ºLßê2a|­aù:Ú¯ªËDñ=¹L‡¥­›\¦2ÆeH}ýÍþüò/¯~|õÇ~ܰó;4Ç9C¯¹‡‡s_lxLÙmݼôÜ“ÀÚg祕›™—6?ZìøZóÒê¿™g‹•=<f.f¶eÞå‡F5íòyKž•ÇëóÖÞ/Ù5çóöHy}òCùŽ¥eùÚˆò-Mƒò-¹GùÞËo$ßûÀ$ß2Œ(ßR–¯õ,_7”¯ååkíˆòµ¾AùÚУ|m4”¯YËòõå{¯®‘|ï?°’|½3”¯-Ê×ÇåëÆö+w¶_妹‚ñÍMÛ.ž·È˜êÆ«óVqCs6o—7öšGðÍMÙÂã _oQ¾÷Ÿ0I¾¹mP¾¹ëQ¾¹7”o[”o.#Ë×”oÛô(ß6Ê·íZ”oÛ(ßvlP¾méY¾f(ß®iQ¾]Q¾]× |»¾Gùvƒ¡|»Ò²|mDùöMƒòísòí[¶_õ=Û¯úíW}aûUol¿êíWCfûÕвýjèÙ~5 l¿F¶_ Æö«ÁÙ~5f¶_-ۯƎíWãÀö«qdûÕhl¿íW¥aûUiÙ~U:¶_•íWedûU)l¿*Îö+kØ~e-Û¯¬cû•õl¿²‘íWVØ~eÎö+oØ~å™íWÞ±ýÊ{¶_ùÈö+/l¿rCûÕÉpù¶MFûUÛth¿j›íWm3 ýªmJËò5´_µ¹AûU›s™–‡-tï$³ütØ^}ûò‡_nx¦RßÇþÖé;øöc[ç|û2žÿ~;øöÞl™wå^Ç~ù¼%;f»>oõÍŽ-Ê·ú\ßêsA|«ÏEñ5CùVŸ â[}.ˆoõ¹ ¾Õç‚øVŸ â[}.Н(ßêsA|«Ïñ­>Ä·ú\ßêsA|«ÏEñµžåë†ò­>Ä·ú\ßêsA|«Ïñ­>Ä·ú\_gûUõ¹ ¾Õç‚øVŸ â[}.ˆoõ¹ ¾Õç¢ø:Û¯ªÏñ­>Ä·ú\ßêsA|«Ïñ­>Æ×[”¯|.Н|.Н|.Н|.Н|.Н|.Œ¯7(_ù\_ù\_ù\_ù\_ù\_ù\_3”¯|.Н|.Н|.Н|.Н|.Н|.Œ¯(_ù\_ù\_ù\_ù\_ù\_ù\_cû•|.Н|.Н|.Н|.Н|.Н|.Н|.Œ¯³ýJ>ÅW>ÅW>ÅW>ÅW>ÅW>Æ×Ù~U¶_•–íW¥cûUØ~UF¶_•Âö«âl¿²†íWÖ²ýÊ:¶_YÏö+Ù~e…íWæl¿ò†íWžÙ~åÛ¯¼gû•l¿òÂö+7´_UŸ â[}.ˆoõ¹ ¾Õç‚øVŸ â[}.Œ¯¡ýªú\ß“Ï53¬ú\éO‡?ý?–&Ë, endstream endobj 11 0 obj 13325 endobj 13 0 obj << /Type /Page /Parent 5 0 R /Resources 14 0 R /Contents 12 0 R /MediaBox [ 0 0 612 792 ] >> endobj 14 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F4.0 15 0 R /F3.0 16 0 R /F1.0 8 0 R >> >> endobj 18 0 obj << /Length 17 0 R /Filter /FlateDecode >> stream xÚ­KoÇF÷ý+z/L×­w-•˜¼ˆ#G’E6‚L "ŵPþ}†S_I4çÕÝs`À@¸=ÃúútWÝãËßçŸçßçâÝ«Îæ<ûpSòüñ~þÇüaþî/6¿}˜Ýþ¯‡·»?ín|Üÿ×·ÿ6YK‰óÛ÷óŸïæÔÿÜ·»zÛý-8æ»÷ów?„7Û|÷ëü§ðÍ|÷ïùönwéÇ‹[ƵÓîº%„›æ_~î—Ÿ/ïÓl­õ‹Ç/ñòåíOßÿøÏùÅü¯àÝüú§ï^Íûaþëí‹W¯ÿ~ûÍ4>Û‰+~QsÍ߸?^mêW»ùúU——3—Unzöá7”›Ì¼{þéV–›þðéBÜTn:ñec]^nºü³ËþB¹iÕR”|´Ü´qeÛ“¥˜®\Ùy·°K1]±²*7õrV¯ ÊôüÓ¿¾ÜtúËÆ¼´Ü´äg—ÏÞÓÚ¥(‘D€¯•D@pžD@°L" G" ÄH" ¤J" O" ÔL" :G" Z$}%£'S&‹#k$[%Ì“H>“HÑ‘H)’H¹’HÕ“H-“ÈæHdIäPIääIäœIäêHäIWIïI”I”äH”I”RI”æIT—IÔÃÝö5¨_vÛj¬$jö$jÉ$js$š‹$ÚÓÝöõhûÝ6†€3‰€–‰€V"‰€V+ˆ�ïyè‘ÇÞò8лHz—Èã@ï yè]%½9ò8Л•c÷¿å �ð%ÏÁÅçG÷ßß?¼ýøî·OïþûaÃê¦Ý³Ñ§cu·,n áBµ5k›vÀ;VmÛÒ¦Ô¾V›.|ÓËÕv)öiZös»¸´©¦å«pí©ÕõÕN’=›-­¶�ì»;.!90!990!90!¹d0!¹60!Åy0!Řâ+˜ LHILHÉLH©ŽLH `B·‡\Bª50!5x0!5&0!5U0!µ˜Z#™VÀ„4s`Bš`BZÈ`BZl`BZö`BZI`B÷—\Bv»#bÎ"˜s¾€!1˜s)€11—3˜såì-1mð’ž•»ÎK7ÅtÝÊÊK²«ž‡^’m*wÒKŠà^Õ,‘‰ÝNŸ|JìV‚|L˜5ò9aÞ‘ óž|R˜ä£Â|¬$|6šˆ�_ ‰€à‰€`D@ðäNÂB ·¹—°ÉÍ„…Bî&,4r;aÑ‘û ‹VHÄàHÄH<ZS bn$bõ$b#›,9ò¼É’'œ,òÄÉR$œ,eòÌi÷zG:Yª™D@jD@6O" ûD"àQ“‘È™ìIX.dSÂr#»»] Ù–°bd_Š'V"Ù™°’‰€’+‰€RD@i‘D@u…D@EûÖ»Í6Ù¸¶Šv®­¢­k«hïÚ*Ú¼¶Šv¯­¡íkkçû×ÓjE¬h_:ØZ$ÚÆötJk öЇ�ïN´±7zIîiûjx·odSð.EÞmieOg1"À»óÍìiµq–AxóáØý¿Ö8ëbbÉstíù×|õ¿ŸÞ|Þ@€Ø_”Ü€Øß—U»xÿÇþªx¦ÚšÛ?ö7ŃjÛîþØ_{µ«oþ¸OœV¯Âñ{?ö×Ä­Õž«ký-q]µ“w¾äÆ%ÕÜø’¡„Hn„"¹JˆäF(!’©„´ &Dr#”ÉPB$7B ‘Ü%Dr#”ÉPB$7B ‘Ü%Dr#”ÉPB$7B ‘Ü%Dr#”ÉTBZ�"¹JˆäF(!’¡„Hn„"¹JˆäF(!’©„´&Dr#”ÉPB$7B ‘Ü%Dr#”ÉPB$7B r#‘!7Br#’!7B)r#“!7B9rã©r寧å�¹qWŽ”¯Ê1¹:Ìr#tš1äF ’)Hn¤ ¹‘B€äF ’)Hn¤ ¹‘B€äF ’)Hn¤ ¹‘B€äF ’)Hn¤ ¹‘B€äF ’)Hn¤ ¹‘B€äF ’)Hn¤ ¹‘B€äF ’)Hn¤ ¹‘B€äF ’)Hn¤ ¹‘B€äF ’)Hn¤ ¹‘B€äF ’)Hn¤ ¹‘B€äF ’)Hn¤PŒìK ¹‘B@‰dgbÈJ®$$7R(×u­OȪw$*Ú¸r#…€Š¶®‡ÜH! ¢Íë!7RhhûzÈÚa)Hn¤Ð é6 ¹BÀ! ¹BÀ! ¹BÀ! ¹BÀ! ¹BÀ!ìåÆ#÷ÿf¹1ÙÁoÂyõé͇_Þ|üe~ýáݧ‡-õúãHéMõúãLµUJQ^TÛ¨õÇE¯v½R´ZLË~n—•¢þ°ØZm:¦;­¬vZ:ëŠ%Õ–HgýI%Dº”éNPBºîD%Dº”®;Q ‘î%Dº•À„Hw‚Òu'*!Ò „t݉Jˆt'(!Ò „Hw¢Ò ˜®;Q ‘î%¤ëNTB¤;A ‘î%Dº”éNPB¤;Qº”éNTH†î¥dèN§Ê­ŠòÁqÍ ‚t§]9äAºÓA™ŽèN«ËЬ‚û¡;A�ºD€¡;Q躆�éNºî„!@º…�éN¤;QîD!@º…�éN¤;QîD!@º…�éNºî„!@º…€®;aîD!@º…�éN¤;QîD!@º…�éN¤;QîD!@º…€®;aîD! ëN¤;QîD!@º…�éN¤;QîD!@º…�éN¤;QîD! ëN¤;Q躆�éN¤;QîD!@º…�éN¤;QîD!@º…�éN¤;Q躆�éNºî„! .o^/úE®ç»×«…¢ÃöõUBÑ—þ5#…B" mì`ŸŠÖ´°/# ]ìa¯ûE®'šØ[…¢§]l@(Ú·±) Ý B€t' Cw‚0t'Cw‚0t'Cw‚°×ŽÔº ;ø5®%Ïyw¥gµ^~¼ÿõÝçû‡ K«‰iGŠ^11í ÚUÓz5jbÚ™oºabÚÖjÇ'¦­«vibÚ’jË'¦A ÑÄ4(!š˜%DÓ „H!¤Ò*˜)„PB¤B ÑÄ4(!R¡„hb”)„PB¤B ‘B%D !”MLƒ"…Jˆ&¦A ‘B%D !•À„H!„¢‰iPB¤B ÑÄ4(!R¡„H!„"…JH+`B41 JˆB(!š˜%D !”)„PB¤B ‘B%dLLƒ"2B(#cb’¡B) !“¡B9 á©r'¦=-LLÛ•#'¦]”cÓV—;?1mY¹ÅÓ(hb…�)„41B€B R)H!¤ …B€B R)H!¤ …B€B R)hb…�)„41B€B R)H!¤ …B€B R)H!¤ …B€B R)hb…�)„41B€B R)H!¤ …B€B R)H!¤ …B€B R)hb…�)„41B€B R)”Hv&†BH! äJ"@ !…€r]×úÄÄ4 Õ;m\‰i*ÚºÓ(T´y=B  m_…B@;l`Ó(H!¤Ð6ö°ÏOLƒ0Bcb„€¡BÓ  …BÀP! …BÀP! …BÀ^!<rÿ{Û81­xÿükÞ~~óþ·ÿÜ?lXÚ.Ö+ºee%Ö-©¶D^ëo(gª­’×ú ÊAµòZ?éÕ®—×úÿá°nNËkýídkµé˜XG%Db•þj%Db”‰uPB4›JˆÄ:(!šÍ%Db”‰uPB$ÖA ‘X%D³ù „H¬ƒ¢Ù|PB$ÖA ‘XG%¤0!ë „h6”‰uPB4›JˆÄ:(!ë „H¬£Ò ˜Íæƒ"±JˆfóA ‘X%Db”‰uPB$ÖA ³ù ˆ ±ÊȘÍ…dˆuPJ†XwªÜÆÙ|O˳ùvåÈÙ|WåØl¾ÕåÎÏæ[Vnñl>�C¬ƒ0Ä: šÍG!@b…�Íæ£ ±ŽB€Ä: ë(H¬£ ±ŽB€Ä: ë(H¬£ ±ŽB€Ä: šÍG!@b…�Íæ£ ±ŽB€Ä: ë(H¬£ ±ŽB€Ä: ë(H¬£ ±ŽB€Ä: šÍG!@b…�Íæ£ ±ŽB€Ä: ë(H¬£ ±ŽB€Ä: ë(H¬£ ±ŽB€Ä: šÍG!@b…�Íæ£ ±ŽB€Ä: ë(H¬£ ±ŽB@©F" ´H" ¢më!ÖQ¨hãzÌæ£PÑÖõ˜ÍG! ¢Íë!ÖQh‡ík`6…�‰uÚÆöùÙ|ÚÅö–Ù|†X!`Ìæƒ0Ä:c6„€!ÖAb„€!ÖAb„€!ÖAØ‹uGjyÿµØÏÿSŸbt endstream endobj 17 0 obj 3646 endobj 19 0 obj << /Type /Page /Parent 5 0 R /Resources 20 0 R /Contents 18 0 R /MediaBox [ 0 0 612 792 ] >> endobj 20 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F4.0 15 0 R /F3.0 16 0 R >> >> endobj 22 0 obj << /Length 21 0 R /Filter /FlateDecode >> stream xÚ½˜]sÚF†ïùgr“xjc­>!éÄNÝ©'a&¹ðÍ"-°±´ÂÚ• ýõ=G$¹¥›L•:ÏyÏ×Jð ð|ð¡3r„àzÃ(„BÀPp~©ÄœêŸŽñlgèúÕÞ}°D‘qSêóÎðÝeøâ9ŽÓ ί¼¡ ¦sxåŸÀôL¦hšŒ³Ñ`k;@»‘ç ÇîÑæ¡6?¨ÍGA}ß]ÿXTg;ã_–Ü€Ôps=ùõ‰£¾ê }Õ§ðªžï´]«6\%æy/n„áp­ðsÆÌLTÌWºL«½C€éRÔ§W ¾¡´œ¥â‘Ș‘œ )áHÊñhr@”QÉ=ªÆøz)ã%èrµÊ £Ñ‘¼à ùfRñb\ÃZ¤)½d,y ík -1ý hc’,1ª1Pj‘€ÉAìäÐõ¢È3ȸڀÎË"$e³R%©�ið÷ a–¢€µ4KKÌ€ùmL2h6«J§¹LŰNÏ]ºNÒÁ6IÀµ“ôJpSBÿë½°dª• "Í×”eã©ËÙ7ù(°¤r,µ˜ Äy¶â…T @µ`Þ0{T™ÍPAüŒge$:z\éLá°uä¹mQ»Ù©O+3på¦ISGó<EïèØš£SUOU‚ǶY›q[5˜M¨L- ãs^4¿éU~Ìqš¶ì¢ÀîN`²ë p÷Š C*´‰µJÕ€Rœ%b.úº§ÞÝÉÑÙ ž@[AnW¨ò¼LÁð\¿{©‘h)Õ&Bu”¤(Õ½Ê×ê'ñ0‡uy<äù,J¡ŒÄvTžœ¯ ‰Šð™L¥Ù ™6øuÆQ8²¾ Ëà?ZÜnX|´þ›/bìh?oÑlSZ{ì:n×ã€Rë i-³U*2ô½r\µëÅ9Î lÞÃc[Çnàu} Ñî‡"©«ßÏj$4©gíªçx]W#4ù/p%›}*ÔÂ,õvB‰ä5¼ ýû ñ/¤ õ‡7þûí¾=KàwYFÄ’cŒå_4‹püQ€1ÑõжÒ}'èÊ<¦+S#1²äqIáÕ(8õ4‡ßÖSÆÒ¹Ý ÝsŽ9hô’:kl¶‹$Z½D'JÔ£žH}OÁ.WÀ ¿\ËÄ,­A'ì‚°{7üΌ߅Þ:·ƒ ìˆÎ¨«}Âш -juº‰º´¨·I1•£ðß*ŸÏµ0ú,t¢®ëÔÉ.êuVÇmLhª…jÔ<âø« gC¡ ØàqïGx‚Q—‡zÛ F™c'ÙP£×(5š‡R(î|°Ã++-MÔ4šSZ«þX›œ*ï·«•Pí^&Û•W¥O^ ö‡¥RåÈÀaäŒsd€…ùÜÖ,Ò¶K£î6Í OmÕ…=C˜¬ÖUŠtàâÄQ„“›46MìUØF°¨±œ0µ1³0˜(!þê3-RlQÆŒõ¢œU[óväÖüÊ%ìG¡[ÜÈõ£ÿÓùcIâ:Ìí%¹}wõDÛWØÛ݈íH`Y“„Ïüùþ@²8ª^ƒ˜æ"ñlIózI¾Þܶ£CÉÛR£‡Äµ& ý^’·×WUx¶"<Y: ÑId—õ“|úÿI —ä÷ÛÉû::ÐIÚ" ­I<ÖO2¹ýÜÉØ^ªà0OÂÀš$ {I.Ÿ¢³W)½Ña?‡ÄgQ/É´KÒÔop¶¯‘Xw6?ì'™|½~†¤p@â[k°Q/ÉõíôrGrÐÙú2Ö†¤õÀ ½§§˜ ÉÅï}´\¨Ójú\ÝkXÊÅRhƒK´jÕ¾PrŽ #¼MËðnFª!À‡êITóh£^Øá-œÎUµ´«&TO/¬IÇN›GÒi5 è> {ñ)Ìh­Äã%,¹>À\ ~«ïè5²VÏJ3¾¡'qº,V…¤zŠdè¥æ©-gäÛœU‚c_ti¾Þ[óü¥ïZ, endstream endobj 21 0 obj 1512 endobj 23 0 obj << /Type /Page /Parent 5 0 R /Resources 24 0 R /Contents 22 0 R /MediaBox [ 0 0 612 792 ] >> endobj 24 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F1.0 8 0 R /F5.0 25 0 R >> >> endobj 27 0 obj << /Length 26 0 R /Filter /FlateDecode >> stream xÚ”OoÛ0 Åïù︉ë¿Izì†Øa‡vfl:Ö&K®$'Ë·å¤C‘vÀˆ#…Òûñ‘Ì žñ‚ª(Q¦IºM3¬‘Éf Çøƒû/>Cã‘Îo$:Mòr^­â·E¶ÅfS¢ð¹FuŽ[É;Ïä£HÓõ€û¯E’"CÝáSu‡ú'žj‘ŽâÙvñª]‰î¦(’‡ü¿åq–_¼—Ï+dÕµø£Ç‘µy¹Í:eöèÕ¾‡2 Ù={FÇ&Ç~×øþí uôr,nMF½L Ú)­Â Á‚MC£Ÿ4¾[¼¦÷X|›WoZDX2'XÑs§‘a;tJódZŒÎTËcÍJ™yu` zÛÆXjÛ˜žl¤wÎ@Yii¾(¹‘´ÈÒkÒºç÷BÊCÛ½jÄØ<äijÃì¢Ø¿W†ô ƒ–-qìUÓÇ“ü;8XŸn…\?\Cªa´. ØqC“ÿÙÙ)(#Âïƒ�±™ÅiiJn•äp«så¶¼†zÔÞ¾ë3?Õc˜tP£¸s&؉’…¬+ ØÌØKi?ÚéXíØÄ¿”i½tÀU™_C­iÙu“þ;‚(u’qU&7WoG>ÎL´H†Ê©¯ZwiÐহCçjO£œ`Ÿ�µ„ÞHº–ÿŒë‘¹ŒdCq ½•RCóí¥õbëkmÑëÕÅëàH€œ?J°LÍ9ÐÛ/Ó7Çôo ÿüq { endstream endobj 26 0 obj 556 endobj 28 0 obj << /Type /Page /Parent 5 0 R /Resources 29 0 R /Contents 27 0 R /MediaBox [ 0 0 612 792 ] >> endobj 29 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R >> >> endobj 31 0 obj << /Length 30 0 R /Filter /FlateDecode >> stream xÚµ˜moÛ6€¿ëWÜ·&hìŠÔ«»C›¦X5C+0o�#Ñ67½¤¢”ÄýÐß¾;R¶Ùi]uUJ¶$Þs/<Þù#¼‡x>øîÔ]!po…PIø xv®$\ó§|Úrß|šÐ•Ãbˆ"’^Í!°ÏMðÌžëz0ÏáÙoêƒùNÂS˜ÿsMÂYìle(7ò¼éŒ-¬xÇŠgn+Ÿ.8€û®Ïvâß½½�6eð¦¬rQÃÕLÔR%¢Ve‹îºÑÄeΧ§Îô±­ÖQ`ïà™„z3ÖêÐ7*“pUWMR7•ì ðåy;k:4oÀü¡-_©³¤Ù“²ÐJ×Ê%вRÒ\Ó2“¹,j=…—ýÏ‹ ½W U€TõZVŠZ@Y8Vù¾Ë 2b=H£üª*››!ÊÜTå­JU±Bܵ’•¨’5ú!ƒ¥õ ž@×eEOÕ.D²~À¯ôHÊφ”*Å1d ×BjrQL*)Rqæ­Å ‘Ë3Ej GlÒÚkY•9|’U u üïП0œ¤F¨b,a 3Y¬êõôØèDeÌg°lTªU!¾!*è̇Q9_KŒÉJ×£ Àèê‚5oðæµD[BS$e~SI­Ñòô€ —í›w–è­ùGZóA¸£t,%äÂãÜE™xö¦0_+‰GוJL6YVÞiCnÕ‰[¯š%¶S}Žª4Ä—mmì£yCoÈ»](’X‘©$>Zµ ÑÌ,¢­ïJ¸)µVôµ*T­pY:æ…,Ô–—Aœô&‹Ë8â.N:»‘¬kµšÈ"U¢°Kˆîj‰Ù'5·3U×™lŸ°¬e•JZý‹ÓçÇrùmÌû6æ÷Úl츀ŽW4ÿe“_Ëê¹ù_ƒÑÀiðhðihiˆÆRx?HqçkQ‰¤–•¶Ÿa±¸g.®‘þËŽí oi¸Í{9è@ôËÿ ?örü*ïEŠÛq.2kŽH’SHlGáÑG?¥aFC0–"ð‚ã¬a)âCzáAŠ×};|N1ÈÂ]\…OPQDl8MGGÙÂRpÿÿ¡f‘ØÝË"—%.ÔzéɤfvÞµ¸ÅìPHÊÃ{éîVd ¦·Å‰K áñ/NmÒ1“x»IFƒ†îT+ÚHÆò·÷~¹\œ~}ÃvnØl6‹†ÅëE»+î—’Î79œ3Ö-Ávnø}¹Ô²6¹Qcüé¤R7´Ž *ÎÂý61ôÆo=ÆÒ Î~ˆ»Û¸Æÿ«M‘˜}á:."?¶¹ˆ¢þ ’mª†'ŸŸßìa„0XÃö%çeJZJ¬-p—GF‘óE‹ö<m÷¸Và\¬~3•%Ê›WÌ ¤¯'ç5VÊ;A+uKAjÙÿþgàgUuF ø,~¨ªsÒ¦)RÓªz‰E$) D@…F§ÿa;Çgû6öŸÎa[Ot:røSÞÛ>­È6ý_¼@&ƒPæøk¬/6Û÷Å–ÇÀã•Ç·<ò{x"÷qžøOüUÏò¤ßÁòÃ<O?KËó*+“QÖë.T:”ŸàvŸàž?C‹â6¿tÛ ¼½æ„êû+÷¼Éw­íÿH¬ßö!‹[ÅÛ– s¾"°-ÅMÇt¹¸73têhõIŽÆœíõ$ÈÒow§½dBÛmÏu{å¦ÐØlb›¤ŠZ®°èí:?5c!〠!ó&«ÕÄHèa§Ÿ¥š¬©íO@¶ñ'˜ö'"ÙkH­aw{Åè_ øŒíÕQdÆFg K(°®©ù9ñʶ˜æ µ€K«ØuÙ©¨6Óçý.ÅÙˆ endstream endobj 30 0 obj 1411 endobj 32 0 obj << /Type /Page /Parent 5 0 R /Resources 33 0 R /Contents 31 0 R /MediaBox [ 0 0 612 792 ] >> endobj 33 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F1.0 8 0 R /F5.0 25 0 R >> >> endobj 35 0 obj << /Length 34 0 R /Filter /FlateDecode >> stream xÚWMsâ8½ëWô1LÆŒäO95—ÝÔd+‡9L-[[µÅÅ`A´12c‰„쯟– ØœuLªU¿÷ZÝO­Ÿð~B„Ò)å”A ~0Mb¨ü ¾ÜkK Ôýé%®¦S?tOžýD‡$ a¹ßgÕë<|÷þ ( `¶/Á”ƒÙ n’ Ìþ…o3„¶àŒ“#v„¸ILS0<Ôðä�àQ…18;?”Õ&3÷e.uLÒyEÆ XÚ4{°rqa‰AjÈ`!Í&ÓÏ`žðë\¬¤N+Ë•{Ê3“ÝMÈ9è¡Fõ/øn©„>¯©D– ±TÀ¾’8 !ðíJüÿ¸ÄÅMÒV\8ŽÅxø¨Ó8{ÛŠK 2„{Ы.ü­Ã°Ñ¿—¹\IQÌPÄéÕ 9ï֢ܗ›m%´ùl‘KŒ8`ýJ<SvÈÖŸò?—-2@G§èÄ:+drÓì�ÌoŽÅF÷+:ŸÜ ÜwÒR$ð0¹ª„î).‚ëµB°²‚zV嫚O\ýŽØ—^/_ºgîûã7XWån;¼ŠI;|¦=j|Þˆ½m*©ÖC Ã?Mû� PHíº\íŠÂÓb›U™yWL£QSÖä 9´ÈR±Æž—7Æ(íÑÙè(C–*+Ff±ˆõ„mø•Üc–¶%Š›Ÿú=éIBQ¢µ>€|¼ëkÈï‘ÁH%èm¶<$ù`˳ Nº‡WÛϺžrÛõÓÕrJBîŸN´Cº õµ™²éÂZ^ŠÊdRµì_#ëžÝ¾ƒõ{ñð<ää=üä=Öl@ ¥¥‘/LÙ˜,ÞŒ€²Ê[uO>F!¢že¼íGð*Ͷ·1…ð„Êe¦ZèÖOFÖmÌ㞺õ-¿f ”0ò÷Ü«o4ë¢%AÜg_ï 9[+0áIŸoYH-× Ñ>`_ד}§XÔ9º–o.T¹‘*3x°ÙÑ­xÍÞ4qõÊùd¬ZÎyÚ¸EÄù7ÌŠÈU§ðéÑï§h¦šsŸÇû„ÏïúÄ£b1gˆ`S§…ù|šjaQ”Ëgûõ²!³Ó¶†þ)äÂÎÄžˆSøMa¡‰s䥘Ä]Š›ì ¢ÅásÝ¿–¦Ø/ÅÖÖõ¶•Äv.Ä‹(jz:‚…Û?m®¤}í°àù~C¦5r]lH“îMä´ÅÚ´!i‹‡ÒD¶|ª÷DbƒÉ¾YÓ~DÓžšv#"·• 52Ç�›g ¸  ¨o¸Â;‡^Y#Ío|¤G·©³¾a ÛÊÃ{Ô)<!½§‰¼ƒ÷M>xIö Hü£šº¥‘\ö½¤ªÝfÇ(V„‹N‹UÛ‘…€—¬Ø¹ËiÝч[*~ZcMÙüOŸÎÊ—2øúu,G]ŽMøùd çŒ?m ¦jœËiO)¤è¨wTNáÑŒæ˜^ŒFö„@ê*{Z¬.ÈXüÒ¸%6m›]aä¶Çëþ!­®1¥:lØýø0<$ endstream endobj 34 0 obj 1155 endobj 36 0 obj << /Type /Page /Parent 37 0 R /Resources 38 0 R /Contents 35 0 R /MediaBox [ 0 0 612 792 ] >> endobj 38 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F1.0 8 0 R /F5.0 25 0 R >> >> endobj 40 0 obj << /Length 39 0 R /Filter /FlateDecode >> stream xÚµ˜Ms£8†ïüŠ>&U±I|Èsتl¦*‡Ù­©xk/¾È Ûla`@žLö×o7`cä$$!U±ŠÞ§?hIý¾Ãð…ž;u¥Ë �.¦a�¥† ƒO·ƒ¨·þ©"íN¹Wÿ5¡o“†D[ø2¿7ÁOÎð—p]ó-|ú*¦.0˜¯àJ^Ãü_¸›£4‰3éìµ}Ô …˜Îø‹å¡‘wúòÜ6óÏÅç «<MóÇ$[CR‚4© ä+Pi Ñ®,ufÒ'ˆõ*Ét ßîïàk^n•¹Íc ?UºÓNQÂ.‹òmQêªÂa±2êÚÙÛe¡„AJî{G”Q.®TƒûËõÀä U´i„kÝ3ÕÅõçΡ°cöX#ŒŸ$,·öîºPAn6º¬%`q•d•ΪÄ$?5!‘WÖe¾+`ùd4äe¬ËÅ5Žc‹ë—ºáŒÆsƒ#瘆hX0Y&fµUO°Ô Bõ¨ŠBÇ(¿w†ó:yŸÛœÁò‚?/?Òú™´Y/ò÷QÖûžg³^ž§ÂG'‚?s-®`”–âcb6°LÖʼnÊöïf£=î•D`ñ“}í41&ÕƒòãL$·˜ÎÉôßnïïQàþá/ÒŸMP *SR)[\ñ1ÚîK‹Ýœìþ{þu"O”n¼ÑFÒ‹‘³V‹}1¸ æXÅ$·Õ8®Z1ÁßË2ØJ˜x.|õ"´¸7þ‰©Î+ÔgÌVÁD/†9¯gîÌ·Õ,Ñ䙢5šÎ%E溶:%úá|#™ëwäœHzÔÃ5md]›“Ìèµ.GÛ7³Õ‹µëà^m¤iÌã6Óø±Z»ì½Ñ6&m5ÆÇjí*תa�ƒñÁã³YHïÄëBw±Ð0.m•Æ›uRï8Á›YªÓziØ.Û%B[Yñ–Ö{ÍcÒb?”–¥2Iž©”VÞÆ»Ùn«ñ.î•qß’áV>Ë·IF7ê­Iø´À–OþP¡µ°‡æ3[òû9qv„@硽 oÆñm)ê÷Óæãq×VꂡºJ~éxRä˜Ï¨»IÖ¸Õ41퓼P¥©¹ä¸<[®C¹>À…K쇀Íl™ôËÙEwµC[¸·r…ž-̓~š_v×;ƒI[‡É–èþîîVi®(Ë1õ5žç·x„@:ÝyiÔ2Á£Å>SUžU㙤°e}Håª}ûj¦8ß-Sý¨·yÚ_Ò¶jUj<Õ*"¤¦÷Q?ãX„å™QI»J¯v)qU7i°Œ¼œ©×.šñC'¦eú37ºú|qížP¸®Ã™ž7 Øô5“9íd"„n² [ˆ_2—sú0F±î OûçªÐQ²J0–O´\çO…þ–Çô´Ui‚a1ùé¨ahàÿ< :Õ˜ŽT:Mé“Úuííª>Žc2|-=…?([(wi\×À«@ÿŠtaêÎÆX@ÎÅ9àâªë‘ÜÀI‹ä¤1Ò6mL©²j¥Ë’œ«Í£Æ½ÀÁo9£áöûÐã„Z俎…bÚµŽ(Üä¼^OTáøúyÞCVŒBö�Û`a¦pÚ¢­qIšîðP§ eY›§“x¡ŒÑevKEØy6šlž“5™óü§oÙÔ€‚ÁwàNG;˜æ_è ¡ÍŽ»¸žŽ¨‘5¿ožŸÕÈ N®ÛÊÖk!|¡È>è;EzDO°‘ǃKç?9¹áÉó×hì{ø'>¨[Ô¸\×k9¾VÍE”xàC�!býÖ»G Dµ£F-^5T€_¡X}9¡‚¢éÞõñnÁh cðúÀñ,!Дˆ@(c1B!†1m¼g1Zù=N‡ñý¶Ø~x endstream endobj 39 0 obj 1415 endobj 41 0 obj << /Type /Page /Parent 37 0 R /Resources 42 0 R /Contents 40 0 R /MediaBox [ 0 0 612 792 ] >> endobj 42 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F6.0 43 0 R /F5.0 25 0 R >> >> endobj 45 0 obj << /Length 44 0 R /Filter /FlateDecode >> stream xÚ­XMsÛ6½óWì1žJ2¿IzHÓ¸“i“NuzñLA ªeYýõÝ@Š&ÖA*m‰¤€‡Ý·oðüAÅû+?÷H!ŒVY -‡ßAÂíÀN¯ÔŸöWa¬?-éäe1ìjøn‰yn‰ÿÃ�ÿD¾Á¦†Û»håC�›^­o`ó'¼ÝàÔ4y{ýÜ Î›EÑj¾xz0Ó{³é£,`N'ÿ•u¢‘¬‚V¸‚]#•P4%tç„ìøž·jªîÀ/À‰:³ã‘À]É;¨š3oo¼~%ŸÁÏâ “qP<Âu×´5ë>Š¿ù ð=ðGV+¾�Q¸ÜŠÚùýèaðý’˜‹oš‚.&!4®è¢ ˜¢ÃÙý õ$¯ ÕØl0ï_ „·D xõÀzT=Ôàþfå‚Ê÷!³)ªpueÒËÇŠ2;–w{—¼�—¡²Ä{ KµAŠlØþ«9ÑŠêZ!÷À+^sÙAÍ.šŽYƒt¹;°–í:Þ‚:•¥x„ŽXXˆë8}÷Èw¢;Ç\Æy<ZÕìX…i2ɺÂp#ºŠ/¹üã·ø1Z uôõùåÜ´…ZüïßÒ-÷ô%q8¹¦ÏŒõ¿¤ï),“>ªn“2¥«_6þ"«êòTU€Ùª…Ä 8 <`ö´XPj·ެ(°F΢;@#¹{)¦¹IÔê† Š9Š8CÂÄQHÈðmÁ:[Ìõ'º‰Ð›ó°(¼€ y!: RHW|I>ŇæÅ²âr‹¿¢P+øÀÏ•(BjˆšÜÓ½€í…( +?Ý!EQ3PxÑeA2E7Ä̉{¾ïeÙ¬ŸÅ_8–×óxëËyìM—:‡õÛænÈx}Ræñ–ï1úš˜˜˜KGÜ,½5k?a¸¿ûù=Ê<&`ÇuŠFOP‹¡Ž¹È£YSQÔt{5gòOÓ¾÷JÝ8VðŽqQó)›“Ä’Ã֢ͩ*ˆÆ]Ë5u°ë0ø›·ÍÒa>ãòY(ÙÈågùD"®ŽlÇW.YÂR^Ç3?’ü÷XÞ³"8Œõ"òxÿ¶òg`½†ªwEc9Tüˆõc+u"B+ÀƧ¸þâÆ™­&:Kaàû×Væ”31\9÷!K×[Þ“¤@Ý3FJ³Å*•]¡6_ÎÓpŠðõÇ7ïÞéÚÁr\æý4 ã#Ÿ>ˆA3òçcARÝ[H£éWD1ÖSŒ4fþ42”`„G¡E§Âíį.®¶ ²lŠ'uõ4˜ç(¨£±<¨lfìÒX›Ý~ ÓZ4§mÅQP§íŸ¾e­—Q’T6Ø6È9cì]3FÉ4rÚ­ J­lo'0X—ú¦a‘ªcX)&×±?X‘×@‰‡Õ™]Ìf§­rÇ¸Ž¦Í%lÅ-g!˜4Ûí_ Æ¥¤1¦ôÉ "«9“Œ¡(5µÝšQT…r%þ¤]¿ä;®k/:g&Œv«ÓHPÕñ£|àí¬]¢,‰#eÛÔú…ßaìçS„fãáu ^ÿú¾Gt³Àâܳ¶@fªÞš0.åè’êÐLvIÎ%§é]æ\Â8ØÿVÂc`ŸÙþSÙŽmiû7Ô¹nl¨ˆ5ÇËÈKŽF]}]y$ᬥÍóöD<ÐIÝ%ö·OVƒû6Y]¬|÷`iË®^9ƒÌƒ)HŠGÁe£û.NB»\ìí$¸8÷IZ¨öh Gn¥tøFSºÂK£YCósß¼n¯o*F²ˆú¼ Ú|£O$&üò^Hüt=ky?˜÷¥Äß5&ëYSµ‡Hzwǹ=.]#qKE€±)«Ó‚’j#ONBW[µ6Q²¯ÒnW˜Y2ŽB<ˆ‚f¢ 2ýxl›c+¨5ÜŽûÁúÜ81wð¿ž0OmËL®1¦—=Å2ÁÑóÀ·ýÅ~æò-„ &è¥+žXW�ÞÀ“ìô�ìÅ)€4I"‚€1ð^ôÔ=…0L ô#ôÀÆÀ{µaûŸ´ vm=fDÞ¤~@[h „5ØVÍúƒ1ã6WðZ^ìʶ¼;s.q\²a’~à-¾~{êèÛDÓøÂ`ḟ50˜ÊH¨íözºo›ÓqØd4æàÀ%ðQMÿ=ëØ×E>N‚i䯃j''¯¬;‰¶Nû!;Ø)¶\+¸±Œölæzpƒ)2 r ~27/ÓT‡#@zæþøH´è§«‹qˆªµTt„ŽZE4!ýop¥ÓÖÈ�ûÜû¢mÂaGAÝ5š% ƒvÝ£ÂÿÄv-ÑõôV‡Z[/{ò‹2Û14ßø¨+È4œ¹þÑŽ6\à É››\™ï5¤åGŠ”ìÅ|핃¨iHY?+jþ’2«_Ë‘ \©å ãfÂ<~VƉ ´g.KÜ3/á„nýš·Ðuyyô¼fSÊõlü™Ùb×µåyú™µEf¶â™ÙòëÚ~ù÷;7™ endstream endobj 44 0 obj 1889 endobj 46 0 obj << /Type /Page /Parent 37 0 R /Resources 47 0 R /Contents 45 0 R /MediaBox [ 0 0 612 792 ] >> endobj 47 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F1.0 8 0 R /F5.0 25 0 R /F6.0 43 0 R >> >> endobj 49 0 obj << /Length 48 0 R /Filter /FlateDecode >> stream xÚ¥X]oÛÆ}ׯ˜·Ø€EóC”ßœ4iÝÞ$h­ Å…�cE®$ÞK…KZV~ý=³KŠ4å ²Dr9ggΜ™Ù/ô'}¡©ÒÄuÜÐõÈóÉœùŒ I“¢ë7Ú£H“kþt„Ç]ÇŸ˜_cþ6òBšÏ'eôzISûÜÿ}ÏŸRàº-3º~8.y´ÜÐ…ç^Òòôv ãlÞ Gõ) σÀYø?lŸ¬ýѹ}˜÷³¾õ[úE”â?RmËåú*‹œM"MbÚä u$™ÊLª’äS$÷% Šòl_H­eLïïÞÒ¶È«½C·fùå¨ÙÎ7ÀÑ‹àüi×5#×f‘P¥^²L‰Š“H”RS¹%>d}#µ«±¡J}VùA9ô./" <·0‡©¢q¾‚gŒ³X •“Ð:\Ž)ÆÙm¥,²D‰2?½‹²J—CqÎ}œ;ñ(îy¬Ý+šLzø"TL™8_I•–ìkùTJe»ÊùaD³ÑÌ š,jÏy'DK±ý 2Ùrÿ§¶8sÃQÉK½~)é²HÔ–ýíR™ƒZSZ9i®¶v³¸ÇTÊ™HðSæöþÍÝE;QˆÑt;þ/½"w<0³Ù´‹…±_ÁµEš(I«‹W¯V—àAªs¦P,ôޝŽqÕP—1bZî­”l*Ô¶[yå•*‹#vƒaŠoÄ:÷Ï2°q(<$༪ð•Á€µ“­7ö“”ºqüêŽÕÉ:eXª‰â«6YŒ—‡" ½>Â6\p3x òî÷RìŒ5î}–�V«ÝD»ÙÚêBKÄK­OtË‘Xöa,¾åÖ”>.IUizÊ{³ °ž5éH£‚J±mÖ5â|’´¡ó>Bè©,¥ÕûV<[Ur¾›¦£oÚò\Ð^žvv‰°@u^°Št¿kYB1Sðf}<Eˆ}XJíšJó¾JËdŸÊöMüÐ@xî¼¥ÕÈ¢d/h6Þ€`¤�–d|EòQªÖéI =5€Á {µyÔYµË«4ffgRp*mªÔ¡7B›’¢“­J6p›*ú;/âî\Dü¤e”ê#2éû¨BÎØwo’B—­rÖš¹:f]4p ™UÄËLž=ÂUàûø¬ðí‹ü1AŠ9pý³¸æ6Š˜&¹2‚pÈ[¼œø­ªl Y¹¢uURRÖÛP¯JÞ‰ÑäJ¥èDHÉÿDqt¹} ò.ĤcæËƒQ£k̵|x1gÙ“w÷ïeY‚/Ö¥ƒáMæÓ>¼[D²ÏO]Š¢Q.E-;R€NÕ $ï@úh*ª´N,Íj‡¡ ¤7 ‚>̵Ü&ªÓ8Ù"Œ« w¼`~™2p4·~…þɺL,MzC¡ÀŠ˜™Í}h'«ìÞ#^œ Ïê Ç‹ðÄÆxý+pÁ×*’WÇÚ]÷’Ã|ª fëúùÞuÎDæ· ­Þl²8w2ûÍ&}ƒ‡;ÛïÀé;‘™Ö½gw ½+ÅP¤swÞGš( ÍlJuœ¡C±nDu2°[1ïšý éÐ?+{HR&[¸È¾ØJi²mº¢Ùø¤¥¤«Í}‰qcÝäœ,ÜؽÜü‹nÅ Ã3áéi9KÏó–ôª†�ð(Ò‚üXW#îõ¡Y°{§VÕ´¨†²ƒ«Ð"ûxÍTØë¥-¹¡ƒ›jÊua¶5ÈÀ ¼Ù 8MB>u;jÇêé`¼‰»IpÐl,Õç{&Ú5¿}Ýùˇ_,AseS<¼û‹¯8ô!73�²…ï4ëxÇ<½ñµO˜µ‰<íd°<öúîôLW-$Ì¿.îía;-Q¶»®ñ¶ê2ÊÑ¢|­L»‚ë$MÊ#n +í@ò¸¨Ù>¸»õ=Ï;Ïú(­x=€yFÌ™ì£ÏÏ++E’b¹è2mª2³ 0¿cÑX™†Þ`]]†:;“R‘ÄQ×h2Ñ¡»MEËÊö,ƒ¹ÁǸ“ü:e ~Æ^nm8$ÿüÓ ÉP¸¾ž+¿i„œaSüÈ&Á :YW ô_²à ðaTðtg›7;lbsè‡uUØ ƒŽxô^Fè†y¢²Ýeg,Ϊ‰{¦“s8õý!³¬UÿÅ33Î!†wýÇÁH§á9ÿ –2,É}ò=v•û4çAæ‰S£I‡z#Ý#<ìø²øwbèO½Åð/©ó´âš¼º¸Ž²ÕeW÷îm8£ß 7«‹ß¯?o?ì¬÷˜Ü[4lÌûΡè9,ÏŸNÜdhýó$vÈ]†²usóö)Ù,ó<½¹A{ðÉ0*j{-ñÍKG?cÜwCßÁg~©'r#×t¶±À[8>z0ó¹¹Ï6&óÅ"äâÍé\xô“‘™Oúy£óJRíï÷Ô ðÌ’sê_žŸ6ƒ¢¯ùð€[-“ÎÏ[ž¡šþy"l:´9öÌ:®£"Ù7“?|jä㽕ÁŒžOÎZÌ{i_mJËa—D;Œe\ ù¥Jø]“̾\ê:Óq[߉ö¨ïtÆ=bèÎÎõ@—R ‚É&ùk8v@> —¶‡|ÙžëKg-éÓùÈ+}Ó"üóÿvk÷H endstream endobj 48 0 obj 1989 endobj 50 0 obj << /Type /Page /Parent 37 0 R /Resources 51 0 R /Contents 49 0 R /MediaBox [ 0 0 612 792 ] >> endobj 51 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F1.0 8 0 R >> >> endobj 53 0 obj << /Length 52 0 R /Filter /FlateDecode >> stream xÚWÛrÛ8 }×Wà1™qÝ%ï[Ûmv:³—é¬wúâZ¢-ndÒ%¥¸î× .V$gã•3Ë&M�à7øß òSÝ¥›ºx>øÁ2‰Asø >2®ý3nw—~h?½£'ÇK!IBÈða Q³ï¾ûžAຬðð,]ð`½ƒ;Ï»‡õ¿ðiÆÉ¼—:õ 'A°\ù7Û‡Æ¾ÓØ£fß}4參ÆzÔ[z}ú^q-YùX2S¬ÏGNˆ‹è•óáêù~è¾<ß¹rþß\ VþY¶\_<ÝŽsÅÎÊ}ÛG¡yÞpÞrd˜(4ºñ8MJr8©ºÌAHSq–CÎØKVq``ø‘izܾÿ~ÀŸ?Á^«ú•‚LÉŠ UÁa§ÊR„Üß;oGâÐ8�u(/ùËÊürKp§It¢$¸ÜŽ7éŒòûáÕ#ÿ‹ Îm”‹“ëG7Ù¿5¨qÔØž™¬¢æL¯꯬b¿s¹¯ ÿ!|Ho í%[¼B9Ñj]pÃ#cdÎs¸ØàenpI˜ ”,Ï vÃuaÀ¢þ Ai| ÀdLó™dZ%î˜Lš›#Ï*ñÌѾ¿�k*…í©^Kâ?§‚¨øžk{ñŒT¶ÄÎ(lK•=Aiñ.á/¬ µ£Uôø™•573z.Jt‡Ôiy¨1L[DeÑn £U2(qIŒ–o0 ØÖm>ÇPy#‡°Dõl˜i2†i¬,…EePlîXYªÞˆq–c"aÇOeÉ3n Óç1I9GšÒÖúæ~9“êžï¦=×[ˆÄ±ïÿ³Ü ˆøÑš7Ù°y§˜Ž}XÂÚê¡>°ª¥Ió ayÅ%zo¿|´[>ªœ/éynn‚4çæ¢Ò†.0dVÖÈ ÀüuŽìèvÚңͭÌs}Ø”¾93I+lIÛ«#ßg¦hf ‡á85ïÑ:ØzÙ»Ó•ÓÅÓ“@vJd¥E°„÷­«[¾ÇŽh—q±‡87/‰ëóÒ‚jä u²76‰5üf£Ó•²äØ©IŸpo!¸f:+ÎT?LoE…ϳQÆîeΨrsk&M&5ó&„¤b9>ì9UëJ& ºq¿{.JÊVì)T‚ÉF¬•αÙÊýæž7¥s]_ÁØõÍ])ªªä­E”#[Ìãôú»¨…):~p­`Íöm_ÛÜ ë'“m{­ï³ñ®ü1^FCšG&ì™O0lî® ëz 8M|]w9‹ï¹“†°nep’ç#Å­ª¦03@7 Ų–™:±qc›4ަ@ñpšpdke\`º3f{RÁªü•ýˆRË'©N³ªpYŸö~Ú‡”‡úpés‘âkŒôå.°64 2 á¶ãÉBÙˆ8à"+R?$/æžU³Q¦½(9C‰ ›¦N%óy<ÞQ¶¶ßô²Ü^ÈFãÕƒf–e¡¼,Ï…“Ùêe ïT-s W*ù®9ÞE´D Ø Ýw•ÙXWñkçÿ¢EÒ¥|Ú,þ1¶¢YïÇ(þ+©ÖlOBÅ3†ƒá\œa4ÑL9+C¯ö,§éù[-²'¬gó$Ž žqH$¡×y0vâK}·_q)æÂŒ¼Iï¥.Úg™4QŒKŸÆˆ1ÚÜêéåÖÙ(“I-sKñ­8v†±¯¼ÁåÏžn‡ X÷§Ovnžºéµ¹xÒ&'m‡â~isJGÓc?»`ndÓ8~íZå. ¦É‡‹öÞd‡±+÷VDš LªþF¶„¯ÍÈFÈ/ð¾üÞû@] endstream endobj 52 0 obj 1391 endobj 54 0 obj << /Type /Page /Parent 37 0 R /Resources 55 0 R /Contents 53 0 R /MediaBox [ 0 0 612 792 ] >> endobj 55 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F1.0 8 0 R /F5.0 25 0 R >> >> endobj 57 0 obj << /Length 56 0 R /Filter /FlateDecode >> stream xÚµXÛrÛ6}×Wì[í›!Å‹¨¼5mÒéLOÍäE/I¨)@&@;Î×w�/"íÔa]Û3M{°g/gqŸàÒyI„yA4‡y,2¨8| o~ÑBû« |< 扽º¦o³(‡Å"âïVºç®ñsÍSˆÃ0†ÕÞ|ˆƒ"Xíà"š_Âêox¿Bãd>Êgõ /â8XÎ_lœýÙØ>š–éÐú¯Ì°?¸Ü›Ã˜‡Í£á ù]ÍeÁa§*``xu’¼Öñ|¾à†î/cX_ø×õe�_„9àݪ v]Κ >ž„;OûΚ\„…¤vx{ضh6¥*n¡PÒ0!5‰[82#”¶Qµ±/•“[·_Umy%äÁN„#ªT2tªxÁ·´ò¾Rõ)€Õ=ȶ[AˆXy†ïàãêxärË·Ö÷;Qòë’ßóÒ-€›&ÐBO…™åC˜µF[B±.¸Þª¢Fûþüý½µ®­Aº2ÃëJƒQÀÊR=XWÒ3ôŸ FMÁ¤ÄÅ6¬¸}`Õv*Èdž Aî*u´æÐ5F›uã‘="Ý ÑêÈ¡Á¯=&rè=¯h‹;8±ÊP<¶¸'û1ÉÓ!ÄBUU}2|¬1ŸÑ‚6U]˜ךDÀêäY:h)24ÒN»Ño_Š,IÝü$dé2qÈÒÐO‚A¹Ë€ß(˜|‚®/j©Å^Ú00|Ï«õeW‘îf?`<KúÆ¡5¹4ó?ïðû eš¿bâ 2ü̯@3¤}@áfã‘LsCÖTºΑôÜðY|ãO˜8<aþr7 ¢#¢a™¥€èöM)5´}Ïʩً{Þâ¶0ÑšóáÛ{{bçãRàéløöCÄb£ø´W á²­î.-À@oy£<%ØÔ(ö'‚\ŽKA—;W¯EY[CB¸¤ï=%·ÅŒ¼7hÂh^î‚ãÊ<®Ì5Ò0Y8`QÎźZÝ"нúÞú³a£Ž²lBO®o‹àÇ›Õ:lØo4Öó`¢»£yÞE®ßÖÏeÙø‘Ú)6÷¦5�«xÓi±x×ö¾>ñB0ß±\0X±ýGÊn !.BÊÁÆÚT´q¼¢=ÕÕIé6MÈÔ7åñÛN•º[ÜÔR Øª€ÌVkæ4‚6ƒnáZ¯Q“Ñ.³!ZÔXì¤ë’aªŸ)jÊ®»VÆ™å#±¼!»,íûÒoðXkƒÏO…™¤Éf“6Hr)nÑCòº¥r¯`ƒºJ˜¡€1ïÊ^Ú¡?ÙHÕL…š¢:@uûzàÛm¯Ç®/¶|gÃÕà=ÇVÝ †§Å¢ójù_jm”.Fyu.>ƒ ¿ò¬]9ËG…âwËÖlAá †å¨*r “ ä“Q㩲ym©¹ê¢ÐJÃSÙWWBNuÅ"‰G®Àì“û’·•%€uEF°Î§[¢â’m(3¢µŸ.{.yE1;hŽ¢kóˆH'›…˜ºaÛ}‰ëäV8(=cxá¥Ë"õCZSÖ¢–ÒÏ$­ÉÒ»F[£S·ýÁ×cjS§¬01âô+Çþ²á¤­­*aT˜öªÂ‚~$'ßÕ¢¸E_`bQ³ƒÃÚÓÒqÖ-ÞN€‡ã2ÎÍ‹|/úÁtq‹Å »ØÌ.–u õÇךÅÄU˜_ë/ζ#šIµßEhzù¨¬»0å˜OÓ¶¥R;ßX ¬ û~Á"gW™â?Rñ¨ï”Jî]Õf~€£ñÄKºvvVÉ%Ò%ðãÉ<v²#x¹.²9_ŽÚË|2›¸Ø«±ÙÖÒ]Ç¥+Õg³#|㕲ÕIúî'•”ZlÜPLq;·Û Š©ŒÆé¨›àÜ"ó ÇÛáyÃ÷–‘�n¨º>Õ»_Á¹môä_Íý`*ÅI8’eñdŠq±W£¸ì9Š‘E7*Ž—þåLi4¯Me7É£|=¶üQRBmÔ ðŠ(.X­}B -טɼ¦ót,™Ì+.öj¼öõæmŠäk£®;r›ÌàªW{ø pR-\߈ý5 ®”´çǂŽä¦²šæ#5Q cP{‹±+'­‰Øÿ…Å, ‡@ÒÉ,âb¯ÆbXEwöàC¿;O=;Ï"y¢û'»þqšˆKnxâ@Nå0[Ž”ˆÏë‹Þi ƒ¯zýÔ$(¥”9xlûÝƒŠ©�iöÜì†ÞjŒø£è¼K'†Ç€ÍènsÁo†<-§©‹0FZ“z Änºf½Äs}ËÞMp hšXQWU£õ©ÙÚ“tdÀ0˜M û4öu8?ý½÷ñ: endstream endobj 56 0 obj 1761 endobj 58 0 obj << /Type /Page /Parent 37 0 R /Resources 59 0 R /Contents 57 0 R /MediaBox [ 0 0 612 792 ] >> endobj 59 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F1.0 8 0 R /F5.0 25 0 R /F6.0 43 0 R >> >> endobj 61 0 obj << /Length 60 0 R /Filter /FlateDecode >> stream xÚ­XMsÛF ½óWàhÏH ¿Iõ’IÓ¤õL“™ŒÕæ¢ËŠ„¤­É]…\I¶}%)Ê”“8L&šÈ\’‹‡, /ð ¾@䧺37u=ð|ðƒYC…ð¼z[{ÕàÚuF»3?´WSþËñRH’²~_@Ô<7¥oßó#\7€E ¯Þ3<X¬áÊ ®añ¼[q6ï¥Ng="ÃIÌæþ‹íCcß¹°$xóhh½B‘ƒTPÜ7ñV"»;Š*‡Õ˜­¬AíËV ×´b°£a-UN7‘Þ•á[|ñáæl*½ß];O_AÏ"ô£ð ¡Ã±À•µ®0¹Îö¼2ëyûº gB<²°à}E±Ñ•4ÛJñ�+$Îw( æ 6‚(ZáF*%Õ„iì´$`t‹]_Ë™˜Bgô’]Rxo¦FO Q›„0Ø’q@HçÿÐd/"áé¾ï…Á% „Z¬È‹ú…¬ ³R@QÈv¬TÝÆ/l³‚r@X¦°è“aGâ•·ÉBìºC𔬙ý-ÞÏ€Ñgºdbx1—§(¨6l]å'è*ÇŠÃHxÿdx7,¯îï—× ×cAFó!Hq²`J{i˜Â¨¹Cß´§“Ämø£S˜�àõëo}¢«ùÀ”ÜRúÜÏåõKý{ŠRo~†ÅyKo9†ûûþãÑJÈXÚL™ÀJn�)HB“ÁÒÊúŸÂ3÷ÝgðôÄ CrRÆ“þ2ræ‰7L:3Šœ¤Å“4x<ÏmÓØ›¹N[m*:¤)·r£„ÙWø#…ÌéOçîs•Œ‹•©’ju[Î÷5•r[¹ZÓR5H­@ìvä"=@\SÕ §vMMãŠVÏàó•-û#˃ç§})oI°j¦pBu³îx€rOE•ñˆªQË~§°%KÑ©²2ܽ’_öX<€Ì©øÉõC§Äca<Ú2Ù2GÕVƒÈ¶’ʼ¥„X¾ÿXJ¤ïàDqï¹z$u5D¢¨{ñèÔ½Qön,ìÐ ‡°“KLXL–0 ‚Ò™Ýï­wouŽÌ²ËÞ,Ħ•Z yåaD¿ÄQPÄh°±7K&?ŠÒB8ç’2ÅÓ6':'–-¾FÒj¤ PÚÛsòÿ‰€8ª•qÄ{Eyó!Ú&AIjIr©4NÀRž`Û )Qt9ŠUI—FW i§àû~ß9ðb›5£Q&Ée¦« ëVÍÁVØ™Zë‚zî¾­Y^éäã9–®{ ò7ò@ÉK-1“L­ñIþŒ.qpqÊÄJpy=¶Yð’0úN·ð•Üø¶rT!/™÷pœ_'ý 8iWÖžÀù>„ïH÷h8ó_'ý8ƒtô]uéøQÛºÕ G¬ôô¬ö§Ú ¬Òæ$²ö­0tõÜab…3q‡8ÉìÒGeÅX>ÖÝ KÃJ¥Ë¡Š²¦ÛÑÉÁK㧇sõa_¹+NžÖ]ÓqÞWØi™+¼÷5ôeÝ`¶µ">Ù`ù¬oƒ‹{ü+Š=Ö?6':'gÃ0¶W¼sÎ;ìΖvÑ–G#h<®Ø»={MZP6•ÌLõ:;ÌäZfgº;ƒ7ê¡ÙolbD—òßÏñäíO‚,QX*½«X·Ú.qB·²bŸsPºÙrð"{Aw—WonßÞÜÐ9j ¡þ³xO³'C;Ñûq’#ucX¸È‰5’æÍaÎ ]³ZWXØ_7Ú(›.£KѦáãPvm[;b€ÓœÂ,UmPäcIH.õgs*ÊÓq›ºmÙdI!;Pþ¥MßN¯ò;'¸½È1«PÔtʼnÚvz£QÎ/BE ª-9>ãüµ,j½& ©Æ¨8·nJ±ÁÏ2o°—¡Ülumrbt,¾4º(ÛÖÈ­|l£D#R7†ùYb}úÊF{6 endstream endobj 60 0 obj 1491 endobj 62 0 obj << /Type /Page /Parent 63 0 R /Resources 64 0 R /Contents 61 0 R /MediaBox [ 0 0 612 792 ] >> endobj 64 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F1.0 8 0 R /F5.0 25 0 R >> >> endobj 66 0 obj << /Length 65 0 R /Filter /FlateDecode >> stream xÚXÛnÛ8}÷WÌ[4Vtñ5o½¤h€MÝX,š>Ðe³•H•”œ¸Øß’²9½¬’Û’Mž9sæÌPßà#|ƒi¼€I„‹0‚(†8 æ3Ðþ —oL©Ðþ›¿ñÄ~Ó»Q´€ù|i ¯W0ußãkÅSHÂ0U —ï’ „V9œE“sX}ënNÛG‹Q»û7ž'I°Œ{pûN÷Çí£å´¿ûŠm <lEº…’í¡f_9( 2aRÍk†× rر¢áÌV5E[¶ãPr&…ÜäMÑÞ9Tʱ.x�«­0ç£6´�…gÆÓcšFT”•V;Ü£Þrà5—¸(D½'tt1Wºd50™+ õ`0ŠR!qš3£$CP dÍu…q±Z`˜*0‰¢>ÀFjžªßyæùºÌþbõÙÈ­>³«O~tÈÓ‡¦äZ¤¬€¿8â7\ºŽvýüS|í)á©ÙpmùË …«Ë fÙ”k®UÈšøô0P!a-$Ó˜ ¦Öô#JD�7òøóÅ@¢gáâD (¦sËPŸZ ,P™ØˆÕ,ê-Fª"‚±‚³Œp±‘p&P›÷Izùïøó[û‡“ûó {Ùµ¨ >ðlÚ싃à^1͈¸õž°#,T¥©XÊ!Ýâ­õy„1NЂ0Nb1€wϧxŸÔš¥(˜†uSÛœ³Â(HJNXkà©(‘W‡�9»ÄÜ3K/Æ+%Q>ö_ð]ˆC±.NÊî$ŸŸ—ÓÏŸøý^º?¿¾¾þÜÒ·B£ð²¤ß™ÓƒàkÕ©µ ‰ÀŸr(»‹dÙG̲C*7œ4+uíP‚RoÑÇÐÒö¢Ž­×â+ÓkQk¦E±‡­Ølq¦Â­yÊ?ýf(Îå¼³ur¯1BK)9ÂEv|µ!ÜÐuƒ–»‡F(”w0FbÇmqŒ¼õ©š;J:²|I‘8=ƨTØÂj$ÁB°ØžL£yiµh;œ­À IË…³®'|Žè'=õGˆçH×ISýÀJÞyó¯Ú5.=zºô$Žƒ(ZÚåûN}ð™á^U—™x„W¨ïg¢™Ç0f0™d$a0™/— š'òßžbfpÜVÜoOo‘úË•(9¼³]˜B H.ŸF;:{Up{s náM´­yèû¶˜ÿÁ¿«²¼Ê2xÿþêööêî.0æ¥}OUîª?'²a¨F“Ù¼¯Qƒ­_fSB@pWç7nÛ‡\{ÁIÈ´h2T É÷`«rÿóB»?£êú:´À£I<í£Æš…jÀ‚(2sT& /="Ä’‡áZ¤©i¨XFaX£omþ;׊ÁÁ0I¦ä)7gŒÖÀkÚwl2žî.Ã4„Еñá æ�Š&³€ÐRS“ªÆkߡѪà&§ CO'QðF츼°â,”õö½©yÙáFHèXèfÙɈ8úÁ¶ó©Û_í¶³ù¢_„·7·×°ÚWƒ%BgŽ^(D÷š‘‚]½ÆÕ©àPT“¹(l0Ä9«ªKZ¿|—‚ý°U|‡ "2¼÷­5étÙGšqòAC§ÚË"¥JjÖ„ÒÞ^S¹ù,ËÚAÀ"[ á @ tñºóÅP¨ËèÔ-¦€Ìç%VVÐÏKþ¦Ý•v·cJ‰ãÂå—Šo©Ÿç¿ê3á¾ý8Œx~âDN»}�¯] ñàâ)lG)*¯¬qràÖòlö}`^VàÑ,Û£¡3í÷¡Æ09™:LÜ©#f-ÑŠcÊ4{hƒðÆìý;Ê}nƒ]†ÏmAÙÈ…å²ó€Óž²ˆÛ”‹ª=¼@¦Ò†&Û%;äCa1úròÓ"¡±•}åû«*]_ÛD $�<¹n˜Î ôòöÈÞf„V¸ S;»ƒüP¤qxRo´ÇÓG̲!qHkŸ%ا–é�1Xr½5~… gÍq2™ô­ùôÀ†}×T•Òƒ£›œÎ¯½=_ÓƒŽŒëË-èydÈnRN·J¡LHQèqô8Ed” ȺºQHˆ=Ÿ¤<üìætÐÈ9«q?äÝÊÑf=°½×=…"„ë2ïÕ(£òúÁN'š_ …7›„‡ìxxoTIg>óôyÊo®:J(ï³å¢?¦ßµh) µ›´ÛÍMR8ëÑcªö:¡ šÖF«¦24¸ ˆÙ¢›ãèÞïA®fû`Ì ‚æ,› <6¡÷Z<ÛD!ÚnV}ümÈÆ| endstream endobj 65 0 obj 1738 endobj 67 0 obj << /Type /Page /Parent 63 0 R /Resources 68 0 R /Contents 66 0 R /MediaBox [ 0 0 612 792 ] >> endobj 68 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F1.0 8 0 R >> >> endobj 70 0 obj << /Length 69 0 R /Filter /FlateDecode >> stream xÚ—YSÛHÇßý)úmC:,[Þ}ª ØÙ£Š—±Ü¶g#Í(3#ŒòéÓ-Éæ0!¬Ì:FêßüûÔ7øß ‰R~!„D±?AøÚ2 Aóg3ZøÑ°9óøh¦0!+àdI»Î£ÿQ%A ³ŽÎc?€fKx&0ûÎfdœÍ‡é`k=!Ãã8ö'Ñ›íCk°oŸÌ‡“¤µî¬_ ³BX' Gµrk»£üäÝû{‹Ç DÉÞΦº@°zé6‚ð QC. éÀ­ùì^UV~GÐKpuq+£«´̱@å|ø ­ÓFf"ÏëCƒ­Tÿ .ƒGp†kQÈrôþ¤a›#È¢Ô0¯ ›Ùkë°°D¡7x‡æRo^»§z]ë*§‡°/Ü(}g«²ÔƵ(´ue™“Nje¡4úN.è& y'òŠ€4Zõ›¼Ï°»Ñ·’ûpûN¢çÚô„F£=ÈVØH·&ÿ±Ž±_¨›“ˆ”ÎÑ@8†¹t(Vú2¦Ã猬Ýw4Ú¿=€ ޲GL æú÷´iU¦+åÐàâèR 3´V˜–½…L†ásH&xä`p(èKö3Û“jÅJF&(íÀ"~åUü Â{·Mª¹¶”9úoå ƒ¸JŒ·5ŠªÄ ÍäÏx'-ÇÞC©zý¥´Éæý§WÒ(j_™ìŠ�DAyAêE!ÜÆQ�Ç j:Œ®—K‹ŽŽbÈt^&gÝ&§ÎT™«¨¤81Ïß,O‘ Ýf]²óC‹xÁÐ ðà\Þw<”7… ËT¬¨šÂ{ÌP+Ù…P¦Á̪Š9E3Žæžp“pøÜ“_çj¼E™#˜&tDÞÖƒ}7 Þdv¼è¦`ì!»Éƒi‰™\JÒåò²µ0"£4¡òÜ‚’Œ‡¤ÂM.¥~«(úº‰‚r´cì1…“'LÓkHÓdâ…Ø(’,¢BÅv<=½¸ ‡-Ðö¦J¢W¨Vê¢à:Mæ6Ú,8‡)$¦KHKɬøò\d_©A.,»”› goo®Iú2×È£\‹ie—egÿ_Ý\žMI¬):B-¸¶ WÅÊÁ—Ù9œ\_õå‡ÃW8"æà­†~ø;ÀéZ¨1(T'Ô¬.ñJ/Ø«†© °´ °ÞP“à¨'¿J}Uz£Ú6qû®Í{†2Ü6:-tVq)jú3If7T¾‰¼/X^Q‹jÁV­€Ôjý÷'þŹn¤ÔŒIðKƒ–èÚi¡7SýJ¬.tl+Šh¸Ä\æÒÕMkÒ²&M¹­s½+P¢èŸuqôó覬›ì¢û’¦µÜ6×[Öç…qðVËãáË•±µï,ÏŒ ô5Ô*VJp“ê»×a¼¼×„-Ò£\¹’\ó[¥·ãCfPPh¾u«{ý?LÆ“½Ï™¡²}³æãàaÄí6sªËšø×®Ýχp³–9|ækʾ’ϨíêMî—ëÚ§FB•ŸQ£éK’FÃç$3j£œ^OU¤)piÿ€ZWÍàUYú@ á–fBú&1r^¹öÿô‚ËUÍcZE]Æ´s%E{oÒm>R7£y[X¸A““%‹ù’tBÀ;ƒï?~÷¨ÐPTÜTs)¡sÝ!Vñ’æÙcãhwoü¾œ“Éžoÿ%Éø“l†¤†ˆ{ ÏõHuoÙŽVÜôºO ¥Ic^ÓV—G`Ÿ~�.–" endstream endobj 69 0 obj 1330 endobj 71 0 obj << /Type /Page /Parent 63 0 R /Resources 72 0 R /Contents 70 0 R /MediaBox [ 0 0 612 792 ] >> endobj 72 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F1.0 8 0 R /F5.0 25 0 R >> >> endobj 74 0 obj << /Length 73 0 R /Filter /FlateDecode >> stream xÚ­XÉrÛF½ã+:‡”¨* @¬GÙQR:ØeGrr0×c¡�EZåO÷€ @�¶(ÚV•%nó^÷{½ à=<€cù`ºá&˜XSÝsArø2¸z]˜`¨Ÿ"Ä·ºe«G—ô—fúày6„)¼º§~ß%þ¶LË©aLá>…«ß§º&Ü/`bºçpÿÜÜ#8Á›¾Ö ;ìM§z`5¾Vã›ÆŽ�ýa!Ë6j|s½Zñ,hiÔ‡jýCaäP×µFݦ½ÿñÃ<+¦M`6µ ø‰²€|o8+*Ùgû]�m`:¦;F—sšF‚º;A]•Ωçôú¡«RäÙðPm”b×%x¨r÷<rsxs{‹\¦¬–$ùcU“‘Te„§<+¡ÌaΡXñP,@d0—,üÌñ­øÑOB¹éSLY²å¹v\*{<ÇìðÔˆgÆR³‰à:ifý•'UÊg“t:;ÇÇø¿÷±@"ç"•­9/±¢dYÄd¤ˆÕѱù\òµ`”ÏB?šé¡L®gudRLï¶YÉ6Çš¨¹çÚˆB5㢔"[Bʶæ‚°l ×w¯oo!ŒŠQrY0³dÙ’ƒ±±LLÜÙ/g³s’ÐØx=þŠ/€oBŽŽÊNUÊ·½¾R½óE—Ôl‚L|$¥€»Î€§«rÛFò‘ÿxt¡Þ'PÈ•(!;‘^`8}z‘@3¨y‹Ö,©ÐR­Zôióùö×Áq[7 «‡¥¤»k\§ôÛƒhÏõØa0m�h5�q^%ÕeU`I>ÆÛù*/ 1O0®ÛìÐýŠ%—¸h‡›ž­.Öž£û6¸¾îûDÊö ÃVSb1œ GuÀt*‹¸LDF%}ö‰œ‰Ú«СìØFŠj^÷¼Úi•”b•pxÌeT¨B ŽÄWè²’ÂeŒŸŠ·«˜g'Z¥4ûiF’—HR?­¨5Óœºý ÜlVy†]µèHˆº‰R¬y¬ä•À´gya.;0µ¨ïQ߆â¡bøÆ”S¡Qaµ¡?gç!a3°LÝõH÷[Ñ;ÉbÃ['ƒí:Vµc Q`è(yÆ gí¥VW"˜Ý/ÜÚ,Šj› ÝÉN˜ÖSa×à¨0vM‘d"ì6j¢`]$"ÄÏ’wNµŒåLû–aYŽpòá±Òú�S¤§Å›º¨R°™Qý4uƒ^Ú™~VÛ(kAíN=yu¦ÃŸ8¿W2Yr5JNÚ9sÍO͆m¹ýlˆlÖä¨5ŸÓì"c™W˸åˆ&§¤•1«Õ–@ûDÆ—ŠªÙTM+õ•ÈHë ,”òdÊþ@@:Zd—f³]`+Ýï™BÞ1+`%yÈ#ž…H£ÝuEŸÙ–1ùng])–q©–¥SI;¶Õ'×NPH&OEFS5¹ãn6,ÅZ`%á U݃Á‚?bfëôÙù©|\Çïóy¥Ph®ã6ˆ zš2)¾¨DÄ»mØYÔlïÖƒãw4Û©_Áߊ˜çî–§œ CûïPÍg‹T‡ñM ÌUfoóÙDIÙZûx\çe‡�Ív˜œg`Ã8?u`öS»Ý2^Hà‡xSƒ§¯-˰Øk¡u!,Ã2†A|ü§…h¶¶ÎEÔ‚zRˆ $“ÛÕ² Ϫe\{#Ä‹\Ù» X(Wÿ"¹_K?¬¥ð ½„ÿ´ù¡›A8°{gÓ>5KSÇféã­Poùc™gÊCÓV5Õ¥dkQ;„ª- †;1][O./¼ÜQY¶Tö³ž…!O¸¬á‘ÍBbë]àݹt_û.Ž3Â%n¹¼KX~nsBÀ;È#iG@:†3R1Ÿ[ÈWyR~I±4»¨?'õŽãÃ} UÓÂ<Éñ*LßbÐhi›¬Jç\cÖŽÄu o󓜇 ®¤m+ÉóPUcy¥¢Þ㞯ëŒL¬§rž4¸jš~7Ä(íÛPž12µžÊ¼l pZ”"¤Ÿd?/FÏ™V¿vúÇŠË+¨…üžyǾíƒùÆÈÌ2ß6`´ŒÔA‰Wµɹ(%vx¼˜=Ö_aüh̾k c¾îÄ|®è?›`qí !¬¤Ä,œ^·92éXsË],Kl×ÝÈÞÿ1Ô²q endstream endobj 73 0 obj 1662 endobj 75 0 obj << /Type /Page /Parent 63 0 R /Resources 76 0 R /Contents 74 0 R /MediaBox [ 0 0 612 792 ] >> endobj 76 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F1.0 8 0 R /F5.0 25 0 R >> >> endobj 78 0 obj << /Length 77 0 R /Filter /FlateDecode >> stream xÚµ˜ËnÛ:†÷z .àÄ%u×2 ÚƒtÑ¢¹l ”DËl(Ò¡¨~û3’,[ŽiÇe\{aZ6ðÍ?3œò}C/(òSâN1AÄG~0Kb¤zD}¼i*„ûwSÀßñÌûo—ÝÊ#)J’5º¾CÑð¿Køô‰¡�ã�ÝÕèãç`†Awsô$èî'útðORo¤G�N‚`–ù'óÑÀ÷~ ¿À§x’f=ÚТO_5£ý«Y¥4‡ÕŠQ~|0¼f?..¼ÑÊLdeú!ž0½‘ùs—ù_+öèÐ; ̰M¤Ù�VK^PqyAH,ò ½¡Ášýƒîgßg€¢šÑcºàFeÄ"¬ÐO¹ž¢®57¼YlinÂÂÐßv¥6ºÐ•¬pe ÁdeÎÂÂ,ØvõõËåýˆúúµ’@å\ UñÄþ‹›RsD¥€ê~ãK.Ñmuå¬; K@·ñ„5;-’k†gad¡%’:߆57šêÕ({óÀYW†6]E þö!—­a½;uÈ¥ ’k+q`/z'@³È&´hX1@a¡dyê¦4 c‹RSo"Ø*KH—î¡j– ÖGt©YÓ´Ú"Ö;‘›Å±fRxX±}å9vœ†‰e«ÞOR¶Û¨RÕ°mÖùôöŽ=ZcÓ,Ù—šo(§Zvi ›TIô®B”…龺ë)‹‰^Ñ/&œwd–Y:ãõåóãòÌ…úÝb¦~3F¦›0‚Ã-ÔÛBë‡)´æBð_JtT&Xa4Dq© ƒš™4‘í9˜@ð«féõ&|‡‚»5¡Q-ìÑ1M'‹8Ý;•a›×ÛW(´zÛŽ1ð1±Åàa'»NrO÷þù6<îÐÏ™rö÷åæ“ö–÷#ÑáZxê¤D–žžçb ÒýÆ‹–—‹ÛwŒa$Ä%Žå´"µ%Ð^IˆôRÙÔ¼iºò¤©q¯ú$Œ,Í</›ç±›_«`Ï«£#ÌrÑ5jhó'D8²D—™ÅÆX³¦¤GM™Ã¥ÑÃíí­³!‘Åé‹Ë‡‰FiçŠMbli·ù|qÕõø¹RÒ÷æWÅ–üâ[Ú5W;5¢h!¿¥qn±$Á¶Ë·ãD>L†5TgÓÅ˹Ò5í:®»Î$J-:_&:YñÒ²aëj #÷˜:ÎC"Iqj©‚¦Ý2×GH^(Æìe’éÊ}"&id뿦} ²#\jà$†JV}žšàØ3œYú/˜½aBd5Á¥e1¶zÿ ž5~m‚ã&Ĉۻ±\¦eŸÚ]ñ¦¹`))|°¥žÞW¼ßîïOà„øöX˜ÅúÑñT±`uŽøK> ±mJh'¥µmLl®5J8¨n ¬[ð}bÚÍ密¹½ßxgM÷ý8´„z5‘¹2ìH‰uü€X†›Is¼Q­Pu¾ÓMTWïÄ–†\L˜0Uªb=�^-úž¹~æ.5$–ó—¸ã ÖJsv†œ cKƒ¾™ dkºÌyOÐn¬¾ÐͶmD«Ì'¿#ª&<‚ªysÅQœXb TïQ}¼GÝÛ§ÞIÔ˜¤v­ÇjõùÂÇ©]ôNy¶ð/“’Ùå¨ÈçSš$ئT?]µcxáàÒí×J‰Q!ÔªKæš6 šëáêÅy,ðSۄ뉣‡ÊÔ[1`ÝŦ‰¥ë“ã[AeÉí.zÚšKÕ6}¢ÉæU}úö?Ä5B endstream endobj 77 0 obj 1310 endobj 79 0 obj << /Type /Page /Parent 63 0 R /Resources 80 0 R /Contents 78 0 R /MediaBox [ 0 0 612 792 ] >> endobj 80 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F5.0 25 0 R >> >> endobj 82 0 obj << /Length 81 0 R /Filter /FlateDecode >> stream xÚ­˜Moã6†ïús)š�GÔ—¥k¶Mz]4Û^´LIìê+•Ô]ìß‘eY´=NÙÎÁ´bøáKçá |ð<{f‡6æ€ãÎæ(C ·Ÿqöú¯‰ñëöÌñÖŸnº‘ÅB˜Ï=ˆ ¸{¿ÿÞ ¾;ÌñÁµm ¸½wg60xLàŠ…×ðøüþˆðÏBk ûž»î,rNæCÏ·z¾ç÷ÿÁwñ,Œzº¿¥|9 ¯¥H•Ý£F¶ <]iQÔBqÝ*ñt}m ó<B’êx¶Aµ6Ôl Å1WJ ”øt•ò6P%s -Tƒ\ØåZ'r#ûPmlpÚ¿6øËò|ý9Ã)ä¢Lu6Y®ë±C¹qö¼PG°wJjÙd&yš`7bÄöJc¡[\fä(¾”µ|•z5Y¨ç9„P Uõ¸Íø¸®ÃÖ‹\b#¥Š]Ý8ï„Õ9/ð2ͧ‡«ï¹„¬b<$­Í¹‚BæŸ@v›Yr-«’ç8®Ÿ¼ƒ~äJÕ¸ƒq¥–‡Ì×*o‹éŠÏ#«å3¦�ƒº9IÞÊ%l‘G·Ôzù„ж‘m}¾°¹ [Ž« K¾ê’œ|_ÉȰF*Á<ºŸS/œ¡7'‰ô{ÁÓ-QUø¬ZÆPVJg3èõZA4'õÞïé½ç™e&¤¾D^HH—ËJàõøìlE„Ib¾¬·qŒç¯Ë£"Q]­Êα8 ¹™¬ÙÞ¶¶àZ‘¤VPãÙßÅîÁñƒhDe6á’Ë—]êKËÕìD±Ì· ±F¦[*^ «àM3y+™cޏTϼ6(Ÿ€×1W«‘8Q—ã;”®ÚÐUíd¶‰Ê\Û!”­ÄÍ× ç·•€¶\Ÿ¾…¬ò*Å<0Xþ:Z‹UΛ3vÐõ]B骕®Ê.í%•ŠÏêÙ„ù #‡‹\¢ÔÝæaA¥ÒމÏb­PqÿdºHÏ÷EŠºy¶7tLk…Ôã²¾ò¸m s æ7¦OÄ·}b"/Æ2¼´ò•cÒ]Ý΋ «ÌnBM»h4/÷¶ÀúÛ'ÌZ¨Ñâº1*.ñý ‰ÿÚÙi\Ҫij£MÞ´„>áÜ÷FdÝs,”w¢‰×<–ÃjN”9·ç‡2#õõVŸ™Nª¹¬SÉ~x(ÉÛÖÄ$]ɹ©>´CBpõßž` ØX\Xqè^Žè=Åôå$G6aåÉè©8‡JÖñgö, /OôØzöX¢áœØÙÛŒQ:·Uü¸ßXO;°Ž0JÞØÑ'\gUñκN”ɘCÉ{úüÿ­|÷ÃÖ)ÈÀ!µn—v@^æÒÂqáæIkd¥VåU™^l3€huŒìûÀÛ¦Y×c›.Ïê¿Ø]”Í9F긌pôÔà¦(<7 ,3·ßÿ¸¹û1PŠî‚«+ X`/ï|­Æ qº‚W4s´õ]CƒÆ÷ML¾cDõ`¾Þ*õí´¸ÿyk÷çÂIÓ_öÖuƨh³¶0´NÓ·Òg„“>ðÜ¡õL£ƒ+¾MŒW? úÞÔ€áÈ1›(1`„w"i›y*á]3O„¤Ðç·ÍMb&]a\¢ö7YÆ™hº(î'r™îЙ3Â?FrùB(m¦Ýez‡­Ó sÂ=Ód7ŠoÖíŒÑÖLT:Dÿ›J#œdžàÎí” ç„"g ¦5ó½2èËO´ûøû endstream endobj 81 0 obj 1293 endobj 83 0 obj << /Type /Page /Parent 63 0 R /Resources 84 0 R /Contents 82 0 R /MediaBox [ 0 0 612 792 ] >> endobj 84 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F5.0 25 0 R >> >> endobj 86 0 obj << /Length 85 0 R /Filter /FlateDecode >> stream xÚµ˜]oÛ6†ïõ+ÎÝ vEê˺\‹5Y“a-–b»`04-q¦H—¢â¸Ãþû(9±˜ŠI<9q.HǾ‡çSßà |ƒÏ §á,D€0àhš¥ ü Þ}¨ÐÂöñpŠãîÛ¤ÝhY­àý%$»ç&vÅ'…a—¼ûMC@p¹„7(?Ë¿á—K oñhÜÓ ΢hšãƒù°ã;~œì~±+¶x4ËwôdO(”„ûO»¿z³D2 ²ìêä$¸?Ü#(ð¢p:¨`‡:ý|1ùz‡²{h$7–wÍ•P§@¨á7ÜlA--ÞpJôÂþÆ×\¯ÅéøÃäžÃzÝšðVyEêÚRàyJ0¤D1Z÷tÛSN5ÙZ“L[X¨z¼y£ õ(8cR·0. 5DRöŒ®àQVã¡®Òa•ªÑex5^PœGCAå¹x \¦%1\I",³d¼(Më/¥Ò5s//ø_ü$Ž<"e½¼wØ3ÕØoœ‰Å½ÛÞNÚû$Æ0Ùt'->ÉcÏm~v-lÅ­Õ†µvîÖÑ·™Æ±Gèzþ¡gUL­‰)m@®•G»x¤Ì𾿕5{Í4gukýþÑ‘ÊÓ<*w?w'8,(- øÅ©Wî_ÏÈ]0úÒZ³<}]­³8j=ûü±w#,°s£'_½¹álD3bC *Nµª©ZãYžy\ù»›˜ôwË]jö­9P­¿˜åñl¨–÷µÌîi9̂ɔ£õåy>ÔÇåüZ? ¾×Üðºtyª žâ¡0Î}2çMý�øuúÇôxu…}¥ zÚä ÿÞÓÚøØkV J4U×2hV×ö™àPrútNÎ xH®˜¦­m>öHÕ8DÕ_]Wrè.ÿ}Í&z;^4N<¥õ““>©F°}Ï0^aâ¡ÂstÎÄM×V­™&Æ{™‡:m”xªéŠì›?8粘ü¬«Úh%‹'Áu©êuI 9¢]Bq õ¯ˆÙë·û.=ÐvÝç >+‡AO©]ÿl˜™Øìð/¬¸•«IÕ3`ÿY7¬ïCGŠMÂÄ#ÖÉŒ+©Ì03Þ0¡¨Wð¡îœ$‰G°“wà>9:È‘ZÓ0õi]í]í¼‘+6ŒYøÚNv0æ É=FÐ—ÓøŸ“mݵn‚Kf‘²©®háPz ½p¢YpÓñnÚyDØdÉlhÝ‹§@ãj9š…žb.®ÝÞ¨‘‹£#c–äC=âzNÖ.æ-ÛŠ•Œ’n„z|( @æaîS67ú!Ò&ÂíÑúò4ôé[þ`Æ¥Ò´M3Ý::ËÛªéxÝ쳪hs{i‰L/6»IíH…8L=¥ZðB²½G¶ûCú®'=#ä)Íb庾\µ–„Ó¦M¤?Õ@KÂåKµb¥ž’-V}2}ô�þæsDfÃEÃÌ&*Ç6êÛ®Á®\*Û“.Es;:±aœz*æEÕç ÒfήWЭ?IvŒ3E(ö˜xïJ‰_—¢ÔS/œÁL¨Í+Ïe8Fž¦@˜þå_¬Føì‰KŒSÏÈ-n]§¹mßL‰Îiî^MT• Ì£jëF©õ’É–}ü,†“ÔSwh°³É®û)òÔÝjÞ;&Œ¶­3´WuÀ=­+M=Õ·š¯û²¡•ÀFj˧Wý„ygÄW˜1q–yf̪1{ôË™x†=µ¹¢¢¸oU#Ôæ·‚ÈÚձÇÈ<´buÙÛ ö½6y¤s ¾üAc endstream endobj 85 0 obj 1320 endobj 87 0 obj << /Type /Page /Parent 88 0 R /Resources 89 0 R /Contents 86 0 R /MediaBox [ 0 0 612 792 ] >> endobj 89 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F5.0 25 0 R >> >> endobj 91 0 obj << /Length 90 0 R /Filter /FlateDecode >> stream xÚ­˜MsÛ6†ïü¸ÕžI~\Ói›vêÄiéÅ3ˆ‚E$$� ¥ÓÿÞ%e‰¹vJòA4Å™wŸÅbßïÉGrO’0'±?ós? AHÂh–¥D3òäÍÏ& ¥!~ÿgJxÜŸ…qÿßëîÊ r’e1)òö†$Ûç^Ãw„ ‰|?"7 yók4óI@nîÈEè_’›Ïä—ïäƒÜÛ©' œEѬÖ'[}o«'Û_à;ù /¶êÉ^+PÞ}féBÖ¼$ì¾åkZ3aÉíÅp»”ÆyGTµ1¼¤õ¥· ý™@HûN Þ6÷CKË×Ünn/‡ä¼¨à=U(ü1j³ú·ÔŒÚÿ:T^×|¥iÓáôw¹à‚u´ÔÐFÅÁ˜¬©äb¸¾½`5+­î*–mi©(Îê¡Y+² ¬ìáÂ2-€S ZC ÆRÛZÖÿz{ 7`µW¶šŒÇ!‚Îç }Æ[Í-7•«÷ì{/ê†=oÍÞ§Ùß³Óá’8Âàj7Çã¿DxÄÂ&EŒÖ{Ä^ô<€ic€Â]µÜ^XÞ°#ö%Þ‚Ò"ÁľJàš7n•¬eÝö‚Ó¸²8E¹œö‚Y¼«[¾${Íië–)) )…­†TN#Ëã !“óÕÐÍ© ¿i¶’šÃÕÑihy‘ahóÏ¢´5¢8 ³ˆss·Ë‰Ù¹„íö}¾#šJQŸ³ÏeÝmÚÈVôVhÚ…Ùõïi„¢ÞÞ—¯ÿ|ýéQ®I+xçÅ .k¹çØYdÜX/á7®`Ïþ¾ºšMàûãhšvîïR ˜†U^ðúQ}M˶mzç\ ‘<qB ÈÕ×a]ѯ¬®·ÛökÊ>ÞÛ*ôa§¼“}ÄVß;CÊ{ö`¥èÔ¥>eùÃ$s ÇÀm»õ­Ÿ1ò'.ãý¨~ä‡cPá8÷}ÄÁ'’GI4&¯† ¥Ô ­Y=Ùt‚ØGF…lÐùÀ´±léÖðgõ²Ïµ0'•qœÄcÈU3ˆW;jf¸9m"„ƒØ¬4ƒ&\w ¶Ì’#ë5À+ª¼fæÜý-I’qä·!ý U:£÷ÄUN}Ävå·9U®Ì+B•´ƒ~¹9uÚÒ$ÅÈæVJZ-7Gð½hMAæ#Þ{í4¤kÉM—ÆåFÐ*iÍ ØN*Þ,ÉÇ€×ÔѤ¦ì»‚º5­þÞhè=¯•ûù˜O•ƒ¨aåúNž †«Êᨢh_ß?¡¼\‘…_`DCú´Õ3ð©ñйzºÖ½iüdFŠÓj¼1GõÎY«w])ùò”ò ý4@À*G¦’ÝT‡ùùç›æ1LA€ø rÎÑÐ5ˆh›Xܾ½Ø^O§ RÄø‡V¼/Þ“N,Ã0 ûS_œ,²òËþ´„¾xâ¡+ SÄóÔgƒõŠÈ)oâÚErTVà`{DÉûwY'nµ0J/!l«=•œfæa f®d[²=[{Ø®¦¾•K7Sjá6`kºéž,º×gÛáWÓ§ƒö£¬w¤l ¾¦TƒÈ6˜ìDÚ$Í0Z[em%[CÅò,¸i€ÙœÚ ®®>#ošbVþ×'§ h®*¦ÁÎ×àêmMµ3Œî Û7$CêÄ€²�saÃ=ÛBλD˜û–jÓxY½8j»Y†¼VÖ鈰uŸ{)471“¶NOì5Ï×ó ó軟NbóÀøª²È$üñdùƒ endstream endobj 90 0 obj 1315 endobj 92 0 obj << /Type /Page /Parent 88 0 R /Resources 93 0 R /Contents 91 0 R /MediaBox [ 0 0 612 792 ] >> endobj 93 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F5.0 25 0 R >> >> endobj 95 0 obj << /Length 94 0 R /Filter /FlateDecode >> stream xÚ­˜MsÛ6@ïü{«=+¿Ù[Ó¦3=tšDr|ñÔ‘„šh�”¢üú€¢DÂ!ì¨Pìƒh[㇇]ì.ôá ⠃ȟù™�„³4Aà¼ý]"($ø‡oYè·û³ :ütÓ=y(ƒ4 ¨áÝâþ}7ú5@A ¡ï‡°¨áíŸáÌ‹\èÿÁû…†wx”y'z¬ÁiÎòàl>ô|¯çGqÿýh<Êòžt€'Ã×S‹…z·³ù î¯VUKKØòª­ÉýõµwZå L°2ƒÈ7˜Þ‰ù°Ï™ïUTn4v�ÂK@ïU`îO%?Žð‰¦Ö„iå J.ÝíÂMí.˜~¦¸C5f0[WîjaŽ,j¿ýñœ¦:+¼”\,IyÐÓxˆXï/“¢À"[lÆÅuIØ/Š ¦lÈ£Š°µÚج½³°y8µãƒàå”å¦G¡E±³õÀsõeµ³ç‘% ïÿ¶”<µt‹5OA}H¨C`Çß:+'QdQ®ZÙ¯¡¢ìV\|ÞWì½3Éy<µ—ÆI•¤à¬Ô E/¨@i”LçfNIM˜ìNIE %h·-fqÖKóÄ¢·4ô­–Ý6¶õ (Sz Té3Ú¿:ûfQ:õ•ÅnNÜB´MEÞ�n¸Ú‹½^E¥´'²w3O-®…2CyHãû+,vvË£Ìæ¶@rÃ…‚MËJAÊ¡ëºÔ-Ï-]SÖëýÍí1xÍ×{ -£lIyÅ×:‰°VÞvå+Àõ¾ÂÔ^äGã*¼aÍX|eCDWé%¯t×¾¬Ñ ä[š¨fîê0[Ûs¢£Š}‹Ÿ2‰½ßǃ×g À·4ѹš+þHºjðH©uõ-`KeÁ/:”zú l~úH<Ë\u8#/çë€ò^F…~` žþÏdØÊîyÀ8…q85šoŸÕÕ-ÊÚ«ÜŽ"Š|Ë,0ßžNb÷LÊ¥uN‡Q’R÷¦ú&Zp²ZÑ‚^Ò/QGSï…ÑODVø°½kFºôуô£¬»µ}@,íÒÈÛ.w~BXã8žê©å¸ÅªÕ\´z,xµâos_Kâ'¶µŒ3‚ÂˊȆóqÚ|­>œ“bIliÛŠ—åiúùesÌôh¨‹c£xµ—zþq×OýÔ¢/›QŸàóåÏ©ûiœYäw‘ï˜ÜÐæÒFŽ2?›ºµF6ë^Q}ÁŠ×zƒ»¤>íº½<ž{޲ØÒÏo òmO)°ÂÕ^Áu·Í}K÷¾NÕ!~6XÔ¸à ¡øäŠÅ’*¡G´gÂÞÿ‚'–fþÙþÌ+eN¿z,Ô’âÊýÖï#4¾3˜wXŭïˆpnæŸXšù1cß]…¾¯ÅîZYºøîqäíy/,ŽV(±4ð½qãÝc¡¯¡Ý•A°CgÃÕåwß @–†¾7.¿=ö§Ý~ƒ ‰lžÃÍót¼Úë:Þø–ô´0;ÒР÷AýBäeù</ˆ½ ž~œ7×—ÆR/æAsü÷¿ºnP‚l‰`œ¢=/×{ƒüo‚È=ôIb ýWôµkh'rOíY8l€tYàp¡ÌÝ(M,SÚÊ�­H=¡ØÝ(C–$n PC‹Ñ(p7ÊË`Æ Ãl�å¦ÐÇoWêTs endstream endobj 94 0 obj 1244 endobj 96 0 obj << /Type /Page /Parent 88 0 R /Resources 97 0 R /Contents 95 0 R /MediaBox [ 0 0 612 792 ] >> endobj 97 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F1.0 8 0 R /F5.0 25 0 R >> >> endobj 99 0 obj << /Length 98 0 R /Filter /FlateDecode >> stream xÚ¥–MOÛ0€ïþï´ökçk·11ÓÐ&Eš¶1¤âºÅ£IJ’ دŸS'­©ƒV¼äV‰òäy¿ìø a ‚NhJ0ä“$†ZÁ7(aú¡a  Û³‘æq:A±ýwÖý",…$ 8Ï!²Ï™+2Œ€SÊ!/`ú‘O(0Èp‚x ùo¸È ¼Ã³” ôÈ€Î'ÍË'–/"{Ç\ÑàYšYz´£l`ZÖ\Ÿ0zs_Ÿž’áÃ^ÁÀ(u0ÄbŠ˜ÕJ÷n0ð̸ fÔ·‘Fª²0lÃómæf®¤†ÂmxÆ|›ùÌÅÜÏ,&XEôUî•;%Û>ÿx„‰¡JÆ}“{‡r¯WU0ì î»\:”¥^öñºÉ‚]¢Lø.ŸÝRV;JxÃÄBø.¹CiU=P—XœE¾Ì³VíÛ$"öm.ŒzêÊÚbÒ`›$‹}›æjŽ-fl“ŠÄ·ùî`ž«=Foã. “Åx¸0œërV?úzT5¬kµÐOªy×½Ÿ¼]ƒÑ_†‹OÚíÊÛíÛ턣¢E1 q¤a´Û0{Lˆ K¸os©Ýî0ü?lGÚ?×ncñ›(îs[ úŸíl.žfÅz¥š#¿ü°œ˜ˆ99¨§÷°P]óm_ ÕdUÜêRÍaS궦­u¹´%Ö3É[’%#¹ŸÊ‚ïçK rs«¥]š eæZ`[²÷@˜.q—šæa33»&]Ê»#ÂøÊ†)NÆÖ²å¤˜6–t¥ÛªlL \–8e¶s)øÔ€,ÆæÇdìçå¯À•Œuw<•nSÚ·LU-«Õ*bv£×-\M endstream endobj 98 0 obj 653 endobj 100 0 obj << /Type /Page /Parent 88 0 R /Resources 101 0 R /Contents 99 0 R /MediaBox [ 0 0 612 792 ] >> endobj 101 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 3 0 R >> /Font << /F3.0 16 0 R /F1.0 8 0 R /F5.0 25 0 R >> >> endobj 102 0 obj << /Length 103 0 R /Length1 27576 /Filter /FlateDecode >> stream xÚ´¼y|Åý?<3»«ÝÕ¹º¥Õ¹Zi%YÖa˶,G¶×·s'›’@B‚“�  r–»%¤ÊÙ$§\)$„#¥Ð¥á(m¥Û~hK¢õ3»’sô×ßëy=<^kwvµÒμ?÷g>#��F° @^°|þÊWoÌý�_9 �´-\~ ½Ý‚ÛŸ@ò­¼xù5ÿ¸�ÔI�Ћ/YQWê�f?�³ÞY¼hþBðÓC4�óoÃßÑ´_0.¦>ŸG/_³nÚQÛ“øüþÎi—¬X0ÿüß­é`Œßjùüu+™-è'ø¿—Î_¾èœ;ïý€…Fõó+W\¶†¹½ŸçÔ>®\½håÆ7¤kð9îîy| u<êˆ�Ôÿ×?ˆõ@R:šaõ£Élá¬6»Ãér{¼ê;¼Ï†ÂBDŒÆ¤x" jRµéL6WWŸ M Ð\lSjmk—;:»º{zûúÇŽ?aâ¤ÉSÀÔsÀÿçNûÿv?µ j<à—‡¸Øù~ ã×WJ'~¿§¼8òÄ7ïV_Hi/ øÁp/æŠ àSÐÜ þÛðùnðø=˜�æ€`xö­`(‚å°Dá¯Aè‚—ð'ÖƒøÞ^p;ð§~>ò ¾ÖžCà[À‚�h³ð·Ü î9�_‚oF¶|òàz|Çû#YÌ•7xÃß¹¬„i´fd3hÃÏ»ü| ]#mÀ @ tƒ‹Áb°\ ®Ãï½Þ¿…~<š4Èáçô‚™à&p'¸ì¯Á¼þˆdG,3p–âÏÝGóø3ø;´Â—á¡ÿÈî‘ül4ƒNíý‚íàÇêHÀ!¼Ãð\8“‰†ÓHýÈ |¿£&ƒñ`.þÄrpɽà x o¿ÇOMÀ&8®„›àVxuv’¦&\‹{É`¼[ñ6÷ÿ2ÜÓÛÀ]ÃÇÀÓx{ü#ÏBu Mè8a%dr*58rõÈŽ‘—F~…)B3Æ<Þ&€5`ØnÄý½ì¯€1­þʆtã>솟À¯@V”Äßö&±‚ØJì ùCòªÚ¬<ª¹x䮑·Fþ…G�±O€Þšñ3ÚÁTp.˜ b¬—iüqØv}»÷Áð (ñ8 °ÎWÀŸÀð0ü'BˆC!üÌ$ÚŒ¶ám?:ŒÞ'x"@$ˆ:â|ânbñy'µZEý€Ú¥ûšÞ¢,P*ƒÊUÊ #ãGîyjd?î€{£Ò´ŒÅ£ ¦a ^®Ð°Þªòîϳ`Þöâ^=^ÀšìðpóÜIŒ«áàÁHä`–`îgì†cáx8NÃô™ gÁùp)Ü�7Âëàñö#¸c7ÞöÁçá[ðø[¼…ÇðöOD!yˆ$$£ñx›‰·ùhZŒ– åèûx{í@»Ñˆ6¢—˜·Ä~â}â·Ä<¹†¼’üy˜<B%ÿ—ü–â¨5š¡ó芺AÝúgéeôÓôð Æøgàù³Ä{XîFߨËÖ²èMÔ)±> ÆH=‚ù¶oãMÆ[Þôx»c下Š! ü>Þëq»œ»ÍÊYÌ&£AÏ2´Ž" AmØ;/¼Sš·“”Äþþ´z.ÎÇæŸqaÞÎ0¾Ô{ö=;Ãó´ÛÂgß)ã;/ú;åÊò©;!.Rº6Ü#†wþ²[ Á9Sgáö÷»ÅÙáÃZ{¢Ö¾Mk›p[ðÂ=žÅÝáp^¸ggïàâ­=óºñ×íSŒ>]‹#aP¿x'èš¿a±Ô;zvòbwÏN¯Ø­½GÄzæ/Ü9e꬞nŸ ÌN×î„] Ä w±s§%Uý¸ú¹0¾õœYøÙéÚ%jÿÁMƅ⛆dpá<µ5î¬ÄüÙ;Ñ<õÖÔN·Ø½Ó}ÅçžÓ§£­ž›Ïxs'ŠõÎ_´µCsSåtžz6ÿf|6þÜ0þZtýìY;áõ³+Ðú^Å"±G½2oix'+vŠ‹·.‡1çÌz†—ùq~÷ì`ʬg¼²W;I×îól#`Pö¥;ÒêqŒàÙX9þù{•ë¿ÞoÐî;ð>Ž?ç.P}’8wsgxö÷µYÝ-j[4ãÛðßlˆG¹d'Û5o+ׂ?µ“Šqbxë7�J>vö•ùÕ+º÷ P›*9Oq~¿ÚÆ:JÀVìlǬºv#8–Ò Á²ôXè)r,A žÕÑc!ð2ì×Bï9žTjÒñÒÄri÷mi"W.öR¹ÄÇ»º\Þ*Xãø%PƒC'¾£Æ·gˆøèd 3‚ìÈWðKj10`ûÕ%¼Àº™ª1B—9üŠ Ô —7zU‚›w­8õ¤bk–?|ØÃOêYÔÍ}1´—¿h¯Ë‘RcCS¾ËN´éhãQ¹†…Žï”³9¹3·é,og¢á\G—×ä*eÓ]µµíä¢G¹^Yöñùýs®mq_¬ j^ x´÷ÓŒûy‘\°‡]†XiY)¸\–�a÷úCÞ~.d7ËÄJr¥`0afPÈÜO…Üýû…K*}Ÿx´|Ôjs«Ý?vÌÃsŸž}ž² 6 £±1ÌÀê€ì§›üœK¡\º$Ó‘Œx°ž&RRN@º,ùÏ<§\ïñ×;¤lcVqÁ[ZÝLS¦aÊÕ£»˜àAYK‹ì§›97’u+é•‚ÙŒ Tõ3!ƒ×rûbOj‡»{wïTo1иÃu9[¥£ü,�ɺhAù²Ôâ|-mŽ(ýðoÎjÒ¼Èó•;Ñ üL+è‘ýFI˜£$&Âj²ÛÝnžüÓoõÚìCÐð¬ð½ CM,W©ûho·‹wÀÜøñö¦‚[Gë¬œÛæ¦¥8²žÿΦŸÙ·÷¬ÏLýŒ¿òÖaâ|Ho¿PØ´þ7Êvåäãʇw cž‚¸LsSAîOÃ,‚ŽÖáÂ`¡-:Ϊ³»pŸý†ŸY¼N—Ö§‰3*}:^>»Oî"à´.€hÜ%:ÞTh²rq/¸Ü6+ê›4~òu3ÇØïïÛØ2õ=þÁ-ïÂÊ·ƒ—÷„˯ø.€¡½Þ)ÌzFùå)Ü·Í(H¨XõµCpD“ï x“'NŽ–l÷§-ްþShï[+Ç;‰Î|oG/ßkêZ·µV<è.tX[Ò}ýënñ¤²Ÿ–&ž<P>P.iD<€©¨þ©|Ç�í'KÜÇ'+o•øñ æ»ëq¤Rh*Hñª(¹N •» Ú ÖÆ#u»Üš¤E¤,t:ªM|oš¡ÚÚ¼è¡I“|a?yíÊÆTPŒ5£s¢Þ~1Lι{žuò}³¼5·M0ÓQAê6Ó‰ŠÄ,—˜ÏÖx[#Ò=ü¹FâÉŒè~rm)àŸâ« µÛÃíúlÈÖŸ–hóàlB>aÿÒhÎ>VãQiÛŠ>Ò€uJAöÃû}ÉÞGëM˜¢Ä}PWèûX¯qâ9þVuÔ(›i'Gër«,§`­B£�Ë7×”Λî' Š|³Ò_¾Y}Îo•á·Ø²c’^'!:"înÚàÄÏÛ¦ƒº”ý€ÉëpÖU9¨|ÕðjÏ臋ùü(á˜Ú°HI"…~{Ç4û¼±6}WMoKgûÂ)?“MkÌ ]hHLX0 ÷e ¼õ!3ÖÙaYZ ÈSÀKRCp–&í¹G¹/@v"–\;ÚøO…EæMš,|<ò%|ûÔ ÉvUûªH15Èk4½*¨L¤uúT‡ÏV²0ØÙ•Ívvä<ê¡3›íÒ¾“ùaM€ûÓ&{�AL¶!„ƒCG“2T{÷sXøØ®áGxÕz°Ùh/A,X›'fR¸ƒ*) ßZ¨Œ¹ˆZüÝ ¦‹m#ÃÄ.jÖ_Ap‡y ~müÜA€ÏQ©¢‰˜Àè Ræ‡\&´Å6„˜gÃú-ü¢w…CÙÃLJ¹o‡Aûp;K×z¹Œ’'昘_âb¤drëp¢FHp‹²à–ÁknÐŽw¬O× +ޥ🶫þ]W €¨ÍÚGb„Ð9nWÞ¦Š„H\²r…¦<Úp©ÐöÄíBDÞù§«µ]®|vðê-ç]9îsÝ?n‡få«ü(Ô˜¿¿Z>´SÙóì˰¢Ÿ—U\q¬IÄ¨ó ¬½ƒŽHr49±|!óY„ø÷…ôg¢ã3Ó¼ôû…Ž!¸Q¶šŒ"'ÅÐF¦+"†`nÑhòº=/ÀuÿGà�¨ZUl¸«d.µc–œøÍðIøM*…u˜Ëiu¸ÜN¡³§ógDG7ÆòèBxÎÊòáõã< þÜ(\a¤fSì‰ kHP×4‡x0WàüÏWå’x‹Z|`Hž³ÁKÀ¥p‰Xˆî¶|kùÖARÃi‰9ÈãÀ>ôxõhÐà ×êõôÒ9tËÌ”Óñ0/Ág$¶X_ð>l–±öÝðgå¾=Ž©Ë·bç�‹sû°*]ã¡¶TeMSP£½Ÿä˜mÂTfõFe!!kĤ%9¼*y¹W%íª£‰f„Ö¤T…zl‹¡^ u­¸qz6•ªÿë¿ûGåøÖ¼IuüŠ“pëàÂÇðÀÂÂjö‹gß¿ÿaååÊÌl£ò—Š=š=òwbZŠcô»äÒXïy4¢£®h’.Òãé¥ôRf=}%ó¸÷µ¨Á-x<n@ÔÂgò¸‘݈¾IÊ“°Ÿ…,›µcûy™lñQÙ-I·,H-{H‚Ò‹à0Å›@-bwÕå°`>¯"šì@+ÿÉ WE«¨bÅ{4¥š\ùú¦Æ†¸Föª‚:ÜÔl*Zëƒ=í7o) |bòpè¡¡Û.–i %ŽÜzßO{âçÌkY®¼¯»rûÙêW,›z#D|ËÝW._=µv.}ïÞÇ.?5SL–lIùtl Ÿ«ø`nÌ?‡0ï#`×Ë¡u¤L:’E„ @x™Íd"   R ÖÂÏÃ5Ø5Â{öè JoÔÁ Ì‚‡Ùù‰È!Øô\X'ëÒºç‘X€Cc1kì3p| T>Š-<v`¿)Y+®‡ ÉæLŠÄZ à¶EÅ……‚=oÍ;EÍT éŠ~ÝyÁ»ïn+ï'o+#®;yÕõÊ“púõ;F¾"®¦®µàm9~ƒ62'(馇Ó`d-nž³X.³ù|¼·H*Y;ëå`Œ}ØçC¼—XÆV‰#Ñ·1µ,²÷!çN'rªÜŸIÌý™tµû]Kü^3ûØa;Æ kFf³9“¢´hã±æ±®µj”Ætö`yüQ‚ !!(l‹$ÆOamÅ;À6B¿VŽX,4ÕWsÍ5°Ê\ ³„„¢`×$‚Æ>€ r…;ˆ F*ů÷Õ_ö”rì¾ë\è|:,ú¹IdÔ©l˜þð„ ÓúÇ)ÿ~aia*ýÜ5oý�«Û –1PðSWм¥vø½5çôíZð‰ò¡=4%˜®ðF/Æö%j摸Mϳ`tY½;Æù“Wø ¯×‡d½ÀR‘‡)¶¸¡…Ýq.´…R­B\Â2QÞpÀƒÑÓÀã[É{lÅÁ¬g`ØZ‘M_Hᨓ¤Wâ±F(¡F BÜò¸|0LFADT|ª–ášk®QýB1¬\¬Ip›!†…Æ¢*5R\"§Ã¦âG¼ôõ ;•ßCÏw°™Ú°§oì&O[zÊÔm>WÓûØùàMw¯½rÊ8Úàüò{‚{r_ÿ§Ë%[øãÃÍ?5·iãO”×ßÚRÑ' l#ÕÎVËþ+õ›™ŸÐÄz ³•¾Ž%–1–a)£ Á´ìV3‰}š$©‡ŸÊYfÀbÁ0›TÎÒì‚{iêԭʃÊLUç¼Xñ‚á�tb›-TE¸G™t¼K™0z‡ØòRã…ï^%ÉqïÄ}%ÀrL»-Ôìx@¦ä'¶Ò÷î Þ%Ü“º;}_æ®ü#ÁÇS¦Éÿ#m¢Ò®4J‘­d‹®¥®¥¾K×çî÷ÔõÕÏ!ÈKÈ%Ô•äeÆAÓå®ËÜ—{ÖÄn&o¢®wßÛCì!÷RÏ ¿K|K†dÔÓHzR÷š¼ÑÙ"•âs¨ó¼çñçå—’K©¥Þ¥üÒ<×Íä%EZœÚÁ`{(Dª5Y–EžCË@ò¡$Jb&’ Îeþ½Ì²—³0«òRcæ¥aÕÉP÷뮄 Õ×dç`±žÒ§•Y°a:5lÁö'cÀžF Þ9¶FÈ 6Íf(Uä°AÆ)ŠU²7«¾wûìšRÆìär“ñS.Ö̪üU<sì×£ÁÁ ¯Ì˜ôýåË¢m—¯»îû—)ÌûhÇö—æ7oxâÎßíýÉ_¦6~/²iÞòÍ76=5åÆmé‰Ë/¸~͹çoïÓ·Ï[sÝÐÏ.»| ±gãóWßv`Ï®žß>«"ƒ­#ï;0Í öÉS¾ð|áýÆó—ìõϬõ­õoömößÏÝí»Ëÿ÷óä›É#Ü‘¤9Ãx=o"L@‚2xcµÁÄ&_`†æ±fóPŠò˜¨-À ­ª—6lI¨§k+^œ*¬íêœx†1¾˜ 5œÕ8QåFŒvDªÑq& Ãɪ˜Ò¬ÊŒqìÇé“ Vj£ùqPƒVe^ÐTPͪ ™ç1v§Ã:üVA=ÑÀ´åQ×ízRwóæ ׯúÁþ¿­^~õ«ËÕ/î¹jüÒ«9q܆Ô‡†÷¡Ö ¼þšÄ;|f×ÿ"$eû‡÷*¯]yKOÜ™ðøêúý{ßì4þý§ïC‡†ã##…7OcypƒFÙjÚZã6xÕˆ´Æl¨¡(³×ã}U89š ᆹÓî¹êÔ‚j¦2�:ÓY¿®§6×&gj{ì³ÙÞÎajï®Ít´gOîì̦»:2µ½ZžÀ±Í¸vsäÜk§¢W%º ÕxiÚà¯q…L™qNX8 \²ø?㜉ÜqPÜÙÑø¯ÑÎY~ã¶gF>u¨FgnÒŽøYÚ£.õ¥ú™#ÅñŸèÀ"¹‰ÒéêlAê�P[XÑé(B‡(< BGÖQ[u[A4�žA^šùJèY—¼ Ý3±|üxY5’°ÂVLÕÀGÖ¨ËÅœ°«<²ïÄ·¤¾Œ6ß Oà‰{•ïaÝ€zËaìj—ä' Áy /i³Ø8_ÈN)2©+E²¨+…Jáéúé›É-Ì ì÷Lß3Ïò=îæÐÍáû‰ûÉ;Mwšï´ÜÉݺ?í6u›Í0:àv¹ òxðËë…¤ø©ŽóYL>sB/àXÂ./ò�›žuaÃŒNWkÃ7²z}Ò†?©ó.=Ë”z]zé C Z·gN—¬,° ¶˜ Fì`±£d†±·Õ‡C D²Çyo¹ìQ-C Û†¯ÆØë(VÝH ³Q¯=Z#¥ù—Å¢G=fÁ0̪II¨¶ÔÆfŽÚp ´™+Ñ\ Ì%ìka}g€Ça5i²PPõö2œ¸cø+eÁäÉóà“ ¨ä[ûËÿœÓà°M/9%TÃ÷Ã82£†òáòÿÆØ‹þH ŸX»¦ ÅwÚ2¡æà³ù‡QÃÄÂt _Ôìg Ôƒwä)7ø®¢f¢Ÿ8Ï75¸¾?€¦>‡_¦ô†L¾X:j|δˆ'YÎÈê(k<]?¾néï)ø+ RTÌ™Î`î6f¢Ñ“‚yÙæ…¦ÉáMá—ÃD¸!Ç&­Ü"v5ä±rSÓ§ïUìG‰ÃÎ\ÅK_U>ŠÝÑ zšÉUƒ3¬äÂ5µ‚èö�˜’"R­;9M‡5žôtãtp†õP•œf8ÄÇ!]žªtñF¡ž<e/°Ž@aÔåwZ Hyï_û³^¾´¼üÊUcÇ^…Ú¾…¢âêï¿þéåO–¢—»¯½ûÜÇåà«ã®xú©PA¡Ý~qëªôà/nŸòG¶Ýú·9Yô×PéçdÑU§Ôª®É|JqvûNOÉüïü_¸ÿä!f{–xP‚q¹)Ÿn£Ìøš‚rŸ í’‹¶¸Ü6£š.²e|l4¢ços¿ìþ•›ÀžîYÉ2-4„¨]RL3ÊÀQ ŸæWýyÀ·~É{ŽcŽã[‡=<ºj0üþˆÉˆ ’Õo)�S︠­�ÌacžÂQ3ªß[ÈÛEÍ‘ÃÈ×*yI1\ ÷…±è+s AŸ²g“ßÿ­òWúxÛ çJÝ‹žzCÙûʳ/‚í4µ 3Qnœö ò”òò?ʾ ©™ÒŒŽKó*ŒÂÔ[ïWóò0Oš1N÷Éõ‡|ð1fˆâ÷øþÍPMŒM°ø¢‰¨]ð¹¢ÍŽô)"”Å(£›ö²ú10{$“9i·©l¦A£²™20Êdœ N•¥ÞÁ¡@8 HãcŒDDtÈzñŽ   }úS¨¡€ÆZ.+—•oN3WØMZ+¦Tà#uÿöÀÿxLùº§N¹jewçj”€î_À¹6N™ñ£Ïˇ. _pœÇlÛÌŸøëzcq qëJ™‘æ>¢Ì¼O9vA)ÔR ÉC“H‚7åe‹âƒñëã„ùuƒÏ¢‡ú«Ì{yŸÅ ½é�!�_"%“÷º}À=iGÀa&¼¡(ë‰ÅõDTŠv3c‘vD2 K†qØkÁ`"É`FL& ¯g ;^¿HS$$ !ýž”-”$ ÌTML}?^Ò˜­]=¨×°Ý®æTÞÓ¸b¿€ÃÇR©Ê±zª–…S¨ÙÅ £T$Õ *oÕNU©UϺWuu®&eº_¼[ù*í„c¾×ïÊåÜý×*'îçµÉÅO£¹1 Àå]Œ¤Ù2%P “Ö*ÒÚ‰ Õê:o‡ò(†P‹T<çã“(x\žó_aT.ûOC‚OLˆ0‰P0Ša<…ŸÈ ¨ˆÝ¼ïØñ9ýý;zB¯‚'ï'~;0ƒ§eŸªÈ­UÐ0\©ÿ \ÿï`aká^?ãÔEkžT¾LºaâNö¬)¿3µ_O¬­�ôýñþä)€äUí¬6WêFþDmÇz* ràeÙ÷‚ F¼ÂüiÄ+ø ñLEEËuE•‰^†Qˆ3¹,VVq–ž/z=Éh.—Šn%¢¬8Y|Y$Ä!D>[o™–RõV}]ÕÁP™ÛTîhE{©À¨ñz+LUZ7†U5V•Z"c²&ciÉšP•WFU^5ªòª=[yý7ÕÕtH'–R§ÕAžRc"±ü kmÌ”æ²í]ë_9¨¼k>Š-Lv­Bú ÞeÛO”÷ÞþÓžCp¬€•Y$¬L½kì&å}åqåså³Å#F`ß` -I”#¼PY]·ã°ÿAã»Ñ9ÇÖl³{}½qd|lBEÖ™ˆˆã|¡DDe½Ô(ëq‚Ï‘yÁLˆ’à«Á{‘'ÈXÊË™H’±˜k£±XÐé`”ª NLzyŒðž´Iª²D¨\¦z,£Œ&³8ĵº5Míª)Ð3àÁ.‡U8£}:1Ze7a] S\Õ–cÕV\ÕÕµª|hý˜òÝøXáµK;Ib:/UVÁ[GÛ'W­lÇ.‰Q¾Þ¢ÌY)cÎÓô>ºcc0KN¨À¤#ª:³§50Ò¢YðÙðÞD¤]±ÝÆ8\x°2kƉ5>IìCpfÕábyâ¾Èj¡¼ÊI+ÃûÁiƒ€Â†qã6 óÕ}ùÇ0c‹k+ö\Òu¬:¹jm‘iŠçÈ—è[ÜæÁ•2ö"¶z ’ÏœŽ°‚Ï” ’áY›iZ‰~þŠHÔë6›•q³,ƒíÑóˆ~À#v—ß§å°4ЍiðÀ€§j±G-çpaöt1¨nŠ“º�¤ WÒ¸ZKFª¹”3GR‰Öœ­bOg,·MXÛ·`Áó–=}²w&±mµŒÇC÷--so/X8«©¢±ÄSOàñÔA§üí£ß"~…¸Lº)vcü)ÿSÒG¶ßÙ.ß4ËÌÀŒà Á­Òý¾ûƒ÷ßð¿x=xÄ$xÌ÷ÿ_‚Ÿ'?¯ùF:žt5JþbMC†ÄØ“±@C`¼¯+@ë’º'¾à¬¡væaM2™´R¾€Ÿ3›km©?Jùñ9¾’ªIü>=@ïô´ÏÅ 1 ˆ°/'0¾@ ~4»Ý¤r÷……œ0O UÓæSæÚ¤Æòùz5ÏU*aÕ9x@s¾+SÏYuæ¥ì.i»ê¥¬‡f8w‰äRÜÜJq%8°J Ú°+>ðìÒTI>hg4{¦‡t…™bJ]ƒ¨]ï‹ë~;¶ y.\µP¹~rý¼ò-ÓKñ媬‡_Œé{®%Ö®èÀò ë¾T™»}Õ/[’¼$è[.T¾W.ßÚgc„3díÍÀ'Æ(·¬nÕÇFíÖÿ­’[y/÷Þà½ËûˆwWwZ\øQÝáu»3ár&ƳÑá±Äð ð„=S<„G̯‰Œ ˜ÊŽUÓ¤ô‰ª%Çö[eHM9œm¬GE'óaÍ<kÖu­šèŽ»ó½ÐºNÃÂÏœ6Æ’®í¢“‰Hœ"М}ÊNÙ`Ý—x,1le–|!`@YƒÎï5¸ýICÑÐëŸá¿Øÿ&kгzƒ¡Öæóùõ,›´ƒ OO�ÚDûŒ<$ º ‡ÏåDc”“‘ýBÀ™0&¬®M„˜D,Aà/ø)>ä㓜UÕñ`¨¶2n-!ª[ÓØà;ÆÞ̱c­Yþuó‹»Â0¥ê Í¥H²Q˜S˜ReÖà42,üOE EhÕÂ6Á}uïUð.x„÷®îì\ŒÖòq¹\^¡„b¦Ù?&ä]:éÄ?IVbº–Wµ¤Ê)÷žXMžòWåcLóG¾¤ÃØáhÜ+wþÎgy{?1|eþÊù¹_gPƒ^¯×ã5x/É�;‡íµM‚Àb<¬ .[Ϭ £¡Öí¶%4-j½¡_K²‰pBCGŒ`tŽ+•a€ŽiófÇF<Õñ;©â‚ÅL˱«“뚣RYªäG5XâˆqV`rÎ)D †ÄŸno‡ÎzaüÃå“Ä“ƒèm ÍB£I'%ôôãyA/IÆ9ÛO¼I.8ùG U) û+Wjµ5>¬\‘^³½éx“'>°qቷ̹ƒ®·<äGæ÷¹÷]yÈ.†Éø-ÂZÙï÷QÓæÙ¡Ç ÏÝcø©¦ùTÇ$P“o†OT•¤&à½1§d’¬1è1�á¢p¤`Æ-<ôĺ½�HÞéLêlLáìéÓkà�f˜`Ë׫ވAV„ýްÛeåh ú!Æ”}{ TN>34òåÛ/Bt¾øË÷^Rþ¡|öÒ/Ð6x¡òLk…‡5Ê[Ê °ÿµ={*Cʳw¾z6£W+yJlOÉéZåþ×ø7ýh¯÷�²Éú`б³øâ£qTDðIiÑ Æí-d‚ýxº–Ü„\Å%Æ<óå|S|„OUI]¤]%§ǰfk95ÌbWm¸:›”ªÚ³ 7`0dŒAÉ0O‡È‹w&¿~:�<1ž1“0vÚz™eCô€¡ÃÔ¦&U9Õ ë{5ÂÓ1èIlþÄŠàƒ?žy}{ á¾?õΓO^ÞÒq)òC:”·¿.öö]Y~•¼³Wò¦Ê_Q(1öõ““ }Wk—u³Ò›¼û¡Ü¼¦Äƪq5ch�5àoòº~þŠû÷‰#ïEŽFþå?¡Éˆ3âkü±ågžü<€,ãŒØQ‹V\7K,ZÃÑ1Áö.€µTÄï !#N‰Î‹nŠîŒ’ѨÑn÷Ñ ¾d„ñ"¢RBŒ˜æ].cÿDżVKróÚÔé l¸bÅ4»†»áJþä€:ÇS‘H¼ßŒuÕ®ªôð¤R`@£ˆÍå!uî%é\˜�¤‡ÆT¨dˆµià3ó"§±®×jaèŠñµzhÍ?¹cÒ53ãʦÁ–ލ°kð³COÂGã“Z•½Šg56y‡ÐA©kß3¢7£ÐåņÞMÄÚKºX)=ýè}óåçju14H)Ë+¶é#ŸÃX®›@feÉ*®×_iØjØjüsôó=ž™­ŸC=»Q£isì#ý{1ºI ILåÙuKêPÝöÚŒO½â7Ê3\¹k»dOÄLz’ e v‚ÌdX¹Á×8—Èàk2qúX$ᣠ^¯íñû‚¾Y´šÃ²|\.õ×ÔHŠH›fE†àUÏ.Ç!®Øœ=üÞÀ†á£î½ŒïÄ Ãžã~øøp¶RÉe-rø„¯feÔÙæÖcj,sª±jµFކpš²EÍ‘é€MbRPi¼ Ûð)f¢é 3›˜ýt˜L°z]-9ÖÐtuÊD“ŠŒÆ=v—{t&; O•8Uc!-F´¢<UؤÎw‹¼®¡÷Š=ÞÚŸ½gÇäìÌ·Ÿè=h–LMº®þ“K¦mÈåí~¼§û/^ð+KÔK¦[áçð‡[Ϲõª ÇeÏ_^ŸŸùo÷DeÂÁ.˜5¹¹Ø¶bñÌYë¶Ø_ë…»‰Ã»ïÇziË”Ü%·é^'|hܰ^Û†Ðð„B0„uö§#Œà3¦Eûë.rÛ­@ÆjÒÙ3 “‘ñb¹x‡C‘Í4“´…¬X·YwXI+¾ô ïÞ‡XàÉ?®Ît—Ž?5³wz²|\Ò‚m¬—85ζkñu žaÄ5täõ†ºèŠgVã(áÉkåÕO\ª§Æ+?¼àÄ—jˆÓw^O‚ Qy×mÒO4ßF·Ës§óÓ|ÙÁ{ ÷ñ=ø.ÄÆè˜¡‰n2ôÐ=†üß’À’àãǃFì»DÄ}{"æ‹Ô€G|±„(¸Í$)Åì6€ØŒŸ•¤°Çlªõ¸U‡&ARɰ ê†Dü,‡¦j»ð_%ƸÔ|·–Âú B5AÕKhþ`oí9ŸŸ˜‘›²Y;¶c²SÙ½®£g Â>¨Ä´¯*¯Ú>çáÇÎ?€œ?n$Óìíå¯ß[ûчk^B›V¶³R%æÅ¾Ê‹(Ë]êœ#r{×bÇõPðPèƒà¡ïìß9XÖÎ:¼v¯#aO8t ËÒØécÁXÀÒö´ÇÖgc + úBWùä¡‘ä:–÷†=^o­ ;>žOâ#íã½42xì¬Ïc`iìñ©`ñ^ÖRQ¡Ï> z¸ïÙXÈÁI²)<%´)„ä˜çT^ gc6à½åò€ç‹JôX:£TD-Ø2oàR꼈ÚHñî€uo V 侩¶Ô”þ©´>Æ]Ë6`¦bUeZõ‡Ô7ì"ªNêœè¯sP†¢Ý‘öÀŸt„²eLH¡å‰ã0àåê¼s–– ™ïuq‘$²||ðÄ&ò¢[{)cÍŽ|I¯ÁX7Ã}ò=9r€ƒo„aB_Àz´Yß\?»ñbïßZï:ß]à.¸Í²{<5í°<Í={TÚ vÃç-ÏsÏÅž“^‹½&E4*Z¤½4èÌåêÒúTm:]£×³Y|–Éò õЛÏú¢WòÅ~Zcñq ƒè‹ú ¾æD£\ãkAýÐÈÚgÙúº0>ÊÓøL:œ« Ö©„Ôפӵ6ž÷2™$>zëëUÂ2õu ٜˤ½½ŽõÕÄøÆ\ ¦¶ºÖ@_ß‹bO Õ×eÒl‹ÛÍdž`ïî0à!ÿ<ì›� _‘õaм©5{‹-CðÏ +çjsw˜Ò˼§¬R|´T±š9‹êÖÿBø³j�¶«•‰Ù¢Æ•Ižÿ¶£1S”h>˜KLI;Ù\ %V œÉ'ÐŽyäTšJcœ¦ŠIå‚&Ä8EDøiå3L™ïk w èÄ@†á`C5KðîB ?2ýÊйǕƒ¡;w.Ÿ>³b­i‡<© Îv»ÍP’ ÞÚhóÕ”znL†çŠ.’$Æè+oûZ¹y žü|þ&6SRE§;±Ÿ´ó]+4Ê£ÍõèË öëc7I7eoÊÝTGë(ÙézáÔ9íî€;蕼u®|<š”’uE©¹ÞJGÀéD>ÆK’ä©z¾®N Ôòù¨!&;GøÀ×Zsd¶g[í’”´á;£ù|­ !g¾NŠ:í:ÄÔœjµ†‚zµ–R5L ßÞêmk‚®Q6¨T|”N‹ºZ@T)ÌÔ¦ò*¥PnmjÔ8ª/–RX¾S˜Š•£¶ßp@½ ³ ¡E@â°Ç÷ŸD<+`€£÷9ç¹3®†òŸî\»�-íK:ô¶÷ÿ’·j}}ð‹sÒ}K”ßÀÛ§M-oŸÙ3÷Ýÿmt ¡qJ4Æöþn…cß_BJÁšjýq¯†|kÌeK[XL_ä‰_£ÜR>|^1–@|,ü˜WÞî ÕyjmJÍÅ¥1=¬Î7<!­aŠLß#·¸n‰!†Æ ºÖæö¸šNÚ¢Q1Н¸©¸èé=ÑPrv"îKZ ù}ÆÍÚÉÔÏ‘Øà¿e¶/Hx’Á„øü7è ¬{k²Ç{†ËÃÅÁ²ç‹‰Y-ªÔJÚËZ éÖÍÖì êÛº‹ZNžŽÄÁÀ*è”þ»†=3 ×È–ö÷;G6CÖß ÷·ÕM¸@ywâ å[nêRŽß´r ReƒO™âa¥ßHl­Yˆ4Þ¦Ô+«ÖŽ¡c1¦ë¸ÞøÖe¤¤Å\æê<šÃ¼]n[ n0ßm&<ja«@˜´é±]KÚT‘v¥C–†µY µvÆ�Þá�Pæ|‚Þ6ËŠM–¬wÉ:ŸÀÌ¢g!Äîr9³¾9~”oÆ*¦|ô€ÖPͼUÃiø0v1kŽ¿¶ÛŒÃqÌ“›GóPP‹E»à„‚:…§Î¬˜‰k•Ä3ãÓ|c’,žÜŒÌÏž“OæêO¬G‹Ü䳯…ç»OðÓ›nUîUãmv+/¢¸i=r”~) 7D˜£æ "͘!àÌ6+VÂ4óˆÅ¼œõwÂ%û ûÿ¬¼UgÔ¤¬V¨­•‡©ÉèvÃ{KN£ÉÕ±C™J¯“âwÛ2®x~v·ò"<®Å´]räÔ³M곡‰ƒ6?Úl0´×ÂýN‚÷ž±”fwzEƒöd(4Žz@)Ø(ÀãÊ”çÆ¸ ñÒN¸Syk‘º°®¨>·ÑÄ‹èÀ*YZGm¡AˆlµQ”ŽÀmÔjƒ: ¨¾Õšô7d«�w ÞDÜDyiµß;‰;î™X.{5Ô¸mâð¨¡Ñ*/™Q“ÂT ÃX(âOÀkoT†•¯n„×R‹OnC›Ëë‰ù*#�bdd €_6ÃVìñP€¤nv«õæxÐÕzx+–|X¤Þ9~äïÄÄn×Ê ë싾’NHˆŽ÷êQ¼_ñqýã†ÇL/°o²oeßÊ}Ì~œ;RwŒÎYf2µu5nÈy‹ZÆÖgšŠuµ=Ð9G>FgÚš L[«¡ƒî(Æ9C¶£F®[ŸÌÖì¨A5CÈú.OÜ×é$»å!wuuª‰–ãeµ ³ô†¡\:ªæ–†+%»Z­“Vöt¸:AV).ÓÖ.&ŒnH£˜IÒI6 š±Òmd8£î p¹í„ña&ÙBµ3A`;‚§B&¨…M£‰™JÉÀªQ¬†OÑBS¬kØYM²W—YU<覂³R)¯LA4þ²ñ·•â¹Îõ ¸}.´;"Ëò™Œ>æ ¤sOÿô•žcJºƒ±p¬¹¥»•˜ÐtÞ936 ¨FÊÌ^u^Ê?®¸l~éâé%ºx_ÖXdš]¦1ÑÞû6ö\§¬hqÅ;†¸WšÕÚnZ?€†+¹zd˜x‘Z<8âø¾\óêŒð~xÄ9øám¢.F‹‚Oç4@h3оVC°Û<„¬Ç⺬c¿:‡àH%'ªV®h¯¤÷*åZ­¼F?läÂÆ ýÞ…L‚Ÿ*UU8íXéæ]Zê\+v*Dj]=¨¨•ô½z/ø†¹ëî|GùßW|nìÖ†›7oü~ßò_^ÖéÊÛr©ñÿzí=å׳jI¡¥îÄüô¯ïº«<³KA ²ƒñÄ"x\{“ûaæ€õëž?Z¿Òg–²KõKœK\W°ëõW8¯pŒÛCë9·¹=vZo¢LyLì;q Ðá7ˆ¨S y0DÏÆ¸îÊ­±he¾ÒVT™tx ½T><š(ׂýjq…/€58€¶�'³€wzkÐ.KØ$iåöœÆpZNëÔÊ")^-k<]]¡òÈ‹èŠ=™œØh4šÂBÓê=}çâ©™±}ý¶þ ê^¯%v\3Q(æ2¹F—óÐ#÷ü­;>ݺ®÷†oó+XªsºÃÄ05ˆíz øH^~oâñÄ[‰7jÿT{¼V–g®ÊÜ”y ódê©ÌÏSÏg~™:œy­ùãÔG™÷›ÍDjB‰Œá9Eï7Üf †ÝSþàB}].KºÉH¼>+º ª¡…´¥­°!Ÿ¦[ÚâqÁ!³¶¸¬U ƒ½¥B÷ƒ5°F…°4F«U“WÚt$wŠÃÜEÛèJ3˪‡ ³5µµ x×”j`s²å fÓ*EvœFm¨ÎW¥>ÛI8ª‚jÁ¶_©u¶¦ê t”iMÄ|y£-tNzN„‹éD(Ücpt7ýˆnNŽ÷ÄoÊÏ]6ï¦Î7ßõbW؃m­DN#o¤ÌhIqý˜“¿êh€H@¹1ì•­|ÒOÿN>67 Ÿ¾vÙï²ý$Ö½‰‘/‰ó‰'°àð;y` ³Ô¸Âv‰óJz=s…qƒõjÛÇçIó·Ótæ"fžõ�yÈöùûG Óª–{{VX=¡s9}„Îï_°Ówè~¬Cº“!àÁÎ|€û•êUî q*ô¡`u¶ÝV<>\åßáª~-J¸:oZaâ³PNìŒ;lšFõOz=”™€ËêÇmˆw¤E'U ÁGõéhÙSP3µ˜ê29 qÕTF/  ß+_¯éÚ%·µŠÉ?üä…_þÏËO•Âfø¨ÁWwYšxâÕg¿|ïÒEÆ«?„þ}oÀèØEMç,¬›5V­ù€à0/K`­\(è!ÃzõI †D´¿ôiTh÷Ç> ’ì.õ.OÞ�CT1 u:)¦'‚áLT&B–Îb�÷ÁÏj9¢Ãß ¹jØ_Öò©Åjz¸ž3æ{ÄÆ|Ca´€S•_5­FëP]'¡¹›‰¥]O>™:ç£Y7å"š€Õ,E&ø,'þÝzMùk?Õ³]Ûõàòw{Ç b-ï ŒOt w•7®jgÕ_  A“ÒI¼‚õ™ôƒ`&xGž?¶³¿ë¦Î»žðQT‚*°]|W±k)qIó£ŽG=l‡ËôצxÒ%E|HšÀuÔ³øœHÎ`§âHÍÈ÷‡’““/'‰dßäüL>ì¥Q[Ñ<s¦äš0õ6é!­ÚÈÆÙT¾)<;ÓÚwÙ‡à¯esi߹ݜ+çºÍõ‹t©6bö¬ìá²Vüÿ¿WVÓÿ£Ù¦Ã¹ÁUŽÊ–«&¼"ØÚ«¨špFÛhŠR#Âÿª‘µNUb_PÍOÆ+ Ë|X='+6¸U›…ê¬lÅFç‰7^¼âÑw¦5Ü;'âºÐcÌæâ‹~þÄØSÓíÆ§mzë‹y;ôfš!œ{²m÷Ãûóã;w¢gÕ7±ÒüUÆìƒç3Ê?ä˦uáÈboÎLµËM(~ÿ¼ËÝCL­ µ4¬~™½0¶èÙ|áú±Ñžî1F›5”ˆÍ^èæÖ^ð?uýW¼‚Æc~ÅÞ>ñ9¶Í9°Wvõ¸à¿ÝuónÄ3\6”Cb»?4OÈc"*ÿæÂQ¾Ý ‹©v6,ŽªÝ¤˜J%EÞJèâ9’sZ@¼ÍIç²8ªŠYµàì­çâ©,I¨ÔѪj4~ªâ㔊=mĵy©P©5ˆI.äŠâHÔsǃp´Ö@Õª…3VµÁvè®s÷ÿ¹R®zÁvN>Ðlpšj¯ñÎCíu³.úñ˜pÝeòÌúŽ9“îh˜®ôù c.%ö77(jŠ1Aº|¤´¥ÿreñRYï÷[.…wÍ_·ÒªØW6ý†å™1Žìã È’h´´ý±pT ‡=anŠÛï¹ÃqÒcîBÀOÇ¢ú¸æq† wQñPø΢Jº¤•‡`¾Õ²Áí5/³bj¸o°«ËÙN‹u#¡ .^5)êÀG‡ýX©6ÕÚšª-mZÖÌZrg}jGŸA…ù O5µµjïž°ê/‡Ÿtx“¤9d.Œ4S®_ÝÂTÆ4²U‘á.mLpƒ,Õ2þ°sŠÏï¿C0š Y§(d”„:6/H˜Su 9<¦Ýb4ëpªÅ.Ym4_¨b¨ ŸZ|>ZGr¦ý Æj,VLe‰‹Y’¶ °ÄmAh­1c—8†w£…³˜ägU|‘¦Æ3lj;tª6Á¢ú‡QÞ] µ»LòYsÚ3=´ ]"k§üqÜe™(£-¥Þôïn[{qìvtGw‡žùõ¢Õ©cN.|zþ3¥z!¯®§Å²2B­Íà×ò`otVxÐyƒóQçWÑï¢4–Â’Ð.³³s‡—æîsê…H¤hsDD§CŒÈ‘smBÃY—sæuu91"`] VDÈ‚XhJ’¿¹×;ëðûD@Ì¡x}`^|S|œˆ·TY48ê²ÍaÑýØ8¨ÕRT}–£Gql½7p@sUNÕ“hõØV>9ZR¢Õ”ð)ž+U*JÎ*8ÍIgk¬R>¢%à-Ð]Iª5%Õyrr^k.m÷[ç\Ü_Këè :Ó-pûÊ-¿³ï–Û¦*]¢Õ¯g•7óÁ±Šà§ëÏ%¾ê“ò{| Åž|î¸/lt ¿Ÿ¿«éoCëiÞ Ñl°á½Ê-=Ø<+µ@X¾®nõ·œ€è~w8ê ÛŒGȃßx›ÍJ$¾ÙíÒ{U´Ú²©J”§Âƒg-§­ŠRáLñi*Ô OÍ@§ÁÑj¼›_¢‰ÒùŠßÏÏ%ÞíôÖètB´dtœ˜:3Oû«5sºâ10 |'û›¼ ad ÿÔŒ&''—7†›šD´Ò]þäKðvþe¨N1•0'DÈàŸŽF[ü‰°Xh÷ ‹c[üâ1LMÁCºÃÒ5ÖWÇöwÉ…¦tÔç HcÏ$»¥¾§Í]ß ¹-ô¤‰¥1É„~ŠªH Xê2·¦ßI£þôì“M½rS!Ûq«üŽŒúe|å¹^Ò›¥4T&g5<x|p@ý¥‹SJ²QK7ªKZ†«U²•�¢*³•˜ÔšÕZŠÿBÌ;¨0ƒü7m\‰Yéÿ¼4zE˜Ä'âi§Ó܆¢Ð‚Û&\ÜvŽ+\°`{S¨ý¥ufÁ»¤CŽ5ç*48„e­ƒéÆÙJ‘§í™ˆ—!)ÑcêÖ›7Ïéé•:ÆGÛ¾7î!e~_žáýLÓ¹pÇüÌ9)oAS§<oì¾zîo¹°«©üÉ„ÈWëˆ??yÐ�ž“g{ù‰<ºÛü¨ÆÀÕ‡òY¡] bí~!Q™1Žú[üá°ˆcŸz•„®´dÒ1¿$è¼Í’lsÇ-t¾^ëè)–m }~L¹çšlñL– HU˜›UëÈiæQM7h%Ì%U~­j¢ÿ4¨²bã ŸðHØáåãÞäiã8°êlön‡*Uþ/Æñ5`¬¯h´aíæä}çÓÄ܆IÓº›/iéV¦m‘gŒi4É=Êxø±Ÿmœ‹¹˜Ç’,ëCzöÎáºø„W•t¿ ý~}ëEðÉ«îÆò;ýuÈ‘$@ÃÈ°Ïø„¶ÆÐ îk_c?gÑÝÜ}®‡¸']ßè)pn÷tý4Žja<y/¢myÆàuv{ öú,Ý4¨Ñ‚¯j¶âð™%0µÀmŠ¡EnÂ)A+‹[v·ÌÀ#A‰wœÞ&‡ïN¿h¾Ä�Y8êJÑFpjMh åC¯Aòäëû•oáì–…Ûo]¹þþ;bèhWN~xH9ù÷რçýþåðÛ?}Ö—Tb5y0b.: Ïnb›„»½÷Åžˆ=?ÿ&ÎècT|\Œx4 {¢0Âp]&þH4Óå¯ÿTô„­šÓà3ô•á2É|:d5ê)ô1m"í£Ñ‚¤!_o¦º%-MÒÄLdÝÏANe£ÊúÇÑ4II³½YOÿ`Ê©P#Øh‚ ‰%A:ŠwdI@c$X `Õèu•¶¬àTVžm0N1—KûÍU†šqï%÷m[2î å•óó±¼Án»€:@Qõs.Øzè¯{š“rSç ź¦ë·û‡öžW«°å'uÝc‰ýR8z ÁnV·¹3ÜüõáוŸ›ÍʾEF¬æ 0¾_â„ÃÞë»òt}ŠORÄ]µgöeg~‡¾Ì|[KO¬…ÍL¬Ë/|ñiJ01“Çí |:wΫ$Cœ×£Ïçh͵Õ„°YeyÙ}šójêÞ–†i•í4çUËh‹ÓÿXkŽF£ 8RYÚnÃ@ZR& ²xÇZuAhw˜k9 3zŒ¸]Ô–?VÓ}UÇ6Út†üj‹K±6Å@+³ã£Ò{:ƒÀT1çð¤7ܲùÆç5ˆ}+X¬=ísÿ왽ùiK6¼á/—qv>Q€N®òõ=»ŽÝvc¢“„$i8!7òqÆ/À–…pCO°îÏŸ½ ³ªc1Ø»0ÎI°Ežp  JBUë%±ùêRÍ—!L¶c?æ. ©h4‚qÒ°‡7`8  À].±ÚÄC>eG+áÀî˜Áj²‡4st@›Ôžxôððªê¢ø³™œQ½wÊ믲_õgª#ªŠ+8vn)V§lÅuîúFš×Êy¹.&Mt‰MPìS7¾º`:E ŽÖîÑsÏ^ØšI6÷®*)­3ºPáµÅ#Ãè ,Ëu ²`vèBISѴظĴް޸ŨO29Ý»XýáÏ ÁÛŸÅml‰Ù©ñø½ïÊ>¿À‡ðèÕ÷ð©S}/%ØL@Ïà›ô$Ê×Ûh*_c¨·ðð¯üø^¦£äâ0Þ‚ÿ9_iyȲßBXzAT—© ¾ç8:Œ}?¬  ¬òdO•óŒÚíÊJ…Ï´¥ •…Vøï9þ¹¶ôJ­ó©.]H†Neª$„ak$è ÂÑl–VÓ-âÑ’ g•ðŒæ CðÌú¸TpÇ{7ŸYß¾òÊ5­o¼š±q:rDÚ.ï²õº÷wÝZº×l´Q<ŒÁ1«[WžÛY3)&wÞpÞÊÛzƒò—ùM g´Ìíï[sÿàÝ «‘؇yÓ‹é2†ÜŽ]«™r k…¾r b0¢“ ‚¾n³d½`ˆÊADPÖáóÈÖZKÌ¿ÎÜzÀÕÆMî¼íåÁ÷xÏë|ûa­>{ÆêŒ·HTséÚÏ)¨?¡ .jQƒ{Ìz*ã!ö02yz£ÞÕ°¦i°Æ½œ¢XOOë*EÜß_Þ?!Þ‰¹‚½-KŠ‹Ðù„ŽÒž{IÓ·£¿¥ó>¶‹)P “'§Ç‡æÐsBËéå¡õôô!6d ™Q€Ñ·øÍaQjñ§Â¢G•v¿ã6¯ß+8=K¥Ì@‡íd›`¨¥ýq}ÖR[ã,V`{2�fc’jÔ_§¨VàXµ5-GµÙŒvµÇZ<Ë$Ø"QDÁþ·E"æ‚ŠŠª¤†áh‰N¡R£I›bG""µBM+iµ:ê<g ¶Úc º;bRi쪛\hhågQ¨»yú3'NЏúá_‰Ë›º“ÒÞZ˜£„²Ü'ü‹ƒ°ºíS㥶ÖÛ=Åg¥ýFmm�Æìb;Á#òùqCÜY0œ³˜™ÜLëL÷ìÀìàbæbîbëÅîŵìZ׺àfv³kKð>ptkSÄEf`Æí¢ésµ²mšu1”7áìô[U(c Ͳ.d‚'÷ö¹ƒ´ˆ¸¹§ï6bWûµÁ“·µøÉ`Ù£©ü×TO­Z¹_ö=£[«jr¨ì§'1Z•ßèŠC­”5¤XÃ;»Mî˜K‚þºTRù=£gõfFy;VãÍÛC:G„ øË'à›B¿=ne‰Pˆ,^\ÎÙÍn+úxvئ UjjFŽQ·`|Z #ß ÑR®è,úŠBKDÇÒŒ™±06ç‰$#k›láà’, Q uõ|.W´¥s>¿ÏßÈ;œ˜¤ ƒãXµ¥;×VïkÄw¤ÓçÚ"!’Î5Öûð Áï4y¬±D30SVKœÓ…<†’ƒAN.ÇA ù%eÙÔçÔáE>§)BõJ¸‹’?’F‚$à+{ú”Æd_[…VÁü„Sóu«*íÁ“•Ö•<虀—hîÀu¡„Šºº\¸jk´ÄéL `¸ó£âDåP™}wV×2û`¡AªTˆC¥“aï3F¦Vñ†Ê~R§3¢?*ÿF4eDÊûuá,\©Kzb«w£”ÑÏÀíĵ4w¦ƒJ >ã?Ïãu�%õüšet$Ê–CÑøø‡õ)Ñ› ¬êPŽÂkŽå©´HVéˆ]¬îc 'ïû3 I@ª-.˜DY” 4ÍfEf‰ƒ®Íäfj¯oà î‹¸­—î·ôs}n²©± 6ê¾QçfôúF—Ó™Ôá¡éÜIg"Yñ¿š ú‚è,ÚôÉ¢­ßv·îÝ^Ý:Òµ‰:ü*ˆ…BcRt;õ:¦¾ZlD‹Ÿ³Ž!€.­'x¿?WGøôÞIޱZÇŽQïcÕùêTªµ®”}íã×T:e³õÔ• 'Ý¥Ê^½ÉÐTŠK à#>¨´ûZ;¶à¦Žëî^IW_K–lK–%_ÉB¶^Öµ-?0¶ìkLCpl60Pbœ´…ðÈ ”Úò˜„)i¦ÒAV€&nJ›LCÚ|´ PšiçÑ6fš4-zveÉø£•æìÙ=çì9û¾{ïݻ˪ÏpQ̓—§•:Q£†[KÖ&**óˆuò)¾í)Eæé-Ÿ©x6aª5±/øjIuµÍ_o¯ð•à™¡ÎÂXšL¯´›Åã´œYæ۳Ūôåš*ÿ_GfbÜ“6l*2ugÝŒå[œÍ¦J¿LßWØl„XŒ¦fGmawñ×eEZSo³éŠqv-tð6ºæ2-soÀO¿[|NÞ°¨�óZ³ÅãóbšHa,° pu`@;x*p6ðN ûŽ�.õk~ö}IÑÓS¦Ãø¥�xjÉMŒyœd3!U±;bË.çË'yåš\´=çVŠÛ¡ Ñ9ëÛK.&j�†©ñ‹Mßî8tœ‚Òžì+¦›Ëº&º‹„o°&/÷Fö  ÔmÃÇ*-A­ð· œ0Í&b“׫Oÿªý‰¾é+êˬ÷æOߢR¤GŠC•ø÷¤ˆÕBI¶Ý>þÑ©§k­BDQô޽|ùÕéaOn@«–œŠI¼”™UA?Xå—ƒŒèyù3ù5!º#&˜tÐu+ó-"Œ2sx‚ :-ƺ]]ŽJ«%R§ÑyD#–U6§ºTæOò„Ÿ“›Õ$ëmΜRÃ’Ù'µ íˆ–Óæšhiõneu~bèfWlÖtqb!KÓxfõú$μ—ê—–ÐWU´@¡83cþä¶dÕl'W­› ÿ¼«ÄeûŠ¸ÒŸß7Sp)ðBîIËØHë>ýw37+¶î_&Ú÷wÓýê•ýpçì—ó9D´J³Ù ´0G Ê+“Û~cõØÍqå`ã>eÿö*ûÙ²-}[¨\¦¡Ùò¸[s±WURT§ª)RX]Ë(“~í42Q`ød¬ÚrljÙØŠ£ùjÁ-]«ƒ™Ã5ë%«Ô€šX‰ŒÓüÆÃÖq‹•îZ¹éæ"f~Õ´gš`žT ×·0f—=G~ž‰vZná÷gôO/=\·Š¼záŠÜóଌϓ5 ›ñU³³¾/}é¹}e®Æ-Ø:0dPúý‘®FK³ÊŽîKÿã±&·ÀÚE-×Ë•){P.Ü´Ë>ÙÂ9IIŽÏ¡Û`&Èbvr$[å·º¶ÁHä÷fo¢»¤äø¤4Ýeì]æ~2ñ‘Tn›…­WhŽŒìý ½ûºíÁ󴩈µƒ¦–•ú¬f¥s®\íÆo?¶�YzYåžS7ëŽ{ûçÁpV_>£"²®}åÏJ=žÍaž¯®òÎݘÙóe6÷�Wu•³ÁÙ/@~,dƒ3Ëgô Ž=o) n[Ùhïþ¼­ú#6lóû·º­)=Fóò.s/M¾Ðúv†PfzÛþ4·¶€QMnT®~p¡i­/O/Ôk<³!SËÒþƒqãìå:}ƒÖY$54A®Z¥žp»Ï¥øšªÊYëÚW(ñ”­o‚i´‡}s6Ìfmýµƒ§—é®c¬fáKo4¹'1}ÛÀ? ÜAͤ<Å*”f›É§§_äÏßäLþæ+_CNºÆ‚Ç.‚.à^t/9Ž–Ô(Ú­x…¿Âm€w“:¤�ºà}€0@€  À°žò@ö(Àqªì) @ˆÚT¼qúü, Ç‘“³£<ð»)·3…0È9!•Ÿ<Ð(8ùýH˜Æ)z6è8á~f*è¶\ûQ+`°¸°ø4}4oFH›‡ÔÝØ ~øÝª:HbP ¡q@^éZ ü‚‰|»Áž° À:«ðÓh7÷ÚþZ�Zc5ðß‹>Å>¼ nrˆ\%ÿ抹6î·Š€âœòN勪Eª÷øéj›zDC4ÝšcÚºéºKY ²Ò²gd¿®·êwFr–æŒï7Moå^È æÊ_k>fùa¯àpÁUk¾õ;Ö‡ W~lë·7دµ‰UâeÇLÇoœÎ߸ֺޛvÀÝâ~½äPÉ¥C‡WáýØ7à'þÿ!ÿX`5kóÑ2h(!zþ¥Phã³@ì'ÚŠ¾ï\koi™ë¯YßÓWÖ¾qýò ˆdÓÔ3åóÙi ¤DZ¤CYH@ÙHvèÕˆ®¦„ 2³§šVöŸ!Æ[ú…E)[§êcwwe(Èf�¨…P5ýzˆA0Õ£FtÅš‰"(ŠZ è‰�1vÂ\tš‡ÚÐݨu 8¤ˆ¾uïD]hZŒîAK ºÑ)tZÖk~Çú8nzˋıÜ,à¯!ûåÌu0×À\Dß%QÒaTü´yQ�ùŸ„w„ÐSGøJ€ï¢†üŸßIðt„P ¾mPtÛÅj4þAðo'JÀj¨@Ù”@ÙZ¡6°°Œiœ!ju •C¨ Bå,$5 B ‰D„[™sø<·ŸÖ‹¯öf‹p+ž‹V W$wÍ_ÆÇ x¹;ål‡ð®C¸êÂ6‡ð2Þ(àû˜‹åì6ár›0«Mhjf´ çq=Ô”€99×#üÜ#¤<Âóa‹Gè÷eˆ= U!àç™{HvÄ„/cÂë1ᩘðhLø^LXœ1a… æ?B¡MHá‡Ïèè‡ôHÞSCÂ! ]©B›Sø³Ó!ѨSxO2�ôH2~BlÎÃ;WA¿øØŽ¼„â-(Âðwq9ÃárÆ0)y!Z_²ñG€z“£PëP1×&C£@žŒ/›584¡³EÔ—%Û— ¼)6çàRÄn OC!Æv¡/žÀªd¼Ä•§ ¡7¼)Œ“bz Eðñk©]ü"˜R�åz0¥ôoŠœHŠ’�ÉfñÒRñJcL¼~_‘îÏX„ŸF.Píè\ŽŸ–uâQé øiø\#c?búžˆ3ô¸ˆgÄ= ¦/˜Â ’⦵ ׯµVq%Ÿ–õb0P+vHçÅ»¥M⼌¥9†îαì|& Ív±Y²‹áÆ7Åúä$)ÖÑèI±*c¼2ȲWÑx§è‡ì)Έ¾x…X &±\&ο—_ÆÏçkùj¾œ/áÝ|oçsÕFµÔZµZ­R+ÔÐnÕ¹©–ýtÊU(R)ØÎÌÌo Ô%™ëÁjM+…o<šÀûóû›,MÆÆœº–ÈN÷„ëŸêgO<ÑÚÑ™8nïJTRÏ {Wk¢š¬p„?ˆFÎâ)ê‚°mgtg¤«ËÒš¸³­3…?Œ®IcÍò„L™!!/ÖĦy9‹âRƒ¼T4Ù&¶'#&‹PDÅF‘ÄÄ$2ÊÄÞ¤bÃÞhdØëe"Ê `"Ê Ϥ¼¢F†%‰Ii¸œ¥»\›`ŠìLQ("!*2\áP%cK·Ø »=ÃngìÅ·ØÁ ûÙ ûY`ûÿO¿ž™ÿ›ÜK‹ŸÙq˜žtÑíŠö�t'öõ¯¶$¶¯p8†w<3qFI÷Š•«)^Þ“xÆÕIìpEËOÁ>LÙ‹]‘at8ï>,÷D’‹åÅ쀌—víï~ÃÖž›¶z÷O¡l?UÖKmíŠNÁŽRö.j+JmE©­]ò.f‹æ-º¦cfß¿6o^Ú×·ý©úâ endstream endobj 103 0 obj 20504 endobj 104 0 obj << /Type /FontDescriptor /Ascent 750 /CapHeight 0 /Descent -250 /Flags 32 /FontBBox [ -167 -414 967 969 ] /FontName /ZJRFFM+Times-Roman /ItalicAngle 0 /StemV 0 /MaxWidth 1000 /FontFile2 102 0 R >> endobj 105 0 obj [ 250 333 408 722 722 722 722 180 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 722 722 722 722 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 722 333 469 500 722 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 722 200 480 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 444 444 ] endobj 16 0 obj << /Type /Font /Subtype /TrueType /BaseFont /ZJRFFM+Times-Roman /FontDescriptor 104 0 R /Widths 105 0 R /FirstChar 32 /LastChar 211 /Encoding /MacRomanEncoding >> endobj 106 0 obj << /Length 107 0 R /Length1 21992 /Filter /FlateDecode >> stream xÚͼy|UÖ7~o-]½wõÞ]Ýéîêê-Ýét–N'tHÈÆ&;I !,Á�"‹EÑppAqãQ‡ƒ:Ê8¢ 8â2>nïˆÎècfñAF…tÞSÕ àû8Ÿ÷óþñû|~]©:÷Þº]uï9ç~Ï9÷Þ4Â!-ZH$Î_:wyÿ©ÀŸ äBØ4¿{•ï·«ø-¤?Cˆv/\~åÒ›ÿûÁC). D¹òª5 ïùö䛩#T·««sî|å±8B-ðŒThwR„üȺ–®ºNÿõWò®Z6îóÖ×#éƒüú¥s¯[®\AìEhlä}WÏ]ÚÙúÐ}Ë!ß yaù²kV)Hf.äo€ü®å+;—ç¾uüBãÜІãP†‘Ô©G+Ðÿõƒ‡(A"DÑ F©Rk´:½EF©Ø„Ì«Íîpr.„ÜäE>Þ/‚ G £±¢x1J””–•'QEª²*]]“©Eÿ_|Fü?ƒîBn8½p:ȽˆChð}8?—Î\ûà�½ñ¹7?$Kñü Ÿ$ZŒnE¥èèÅ D£'P/‰ ü2cîÌFsp5àV¤ƒ§ÎGÿÀ3ÐBô ú;ÚB¨ÑR$Bí8*‡ç¹Ñ4t ñhÑ`µ n´mEO½Ihëà©AÐ,xÚb´ ݆îÄH?ƒ¡ñUƒÇ€Ý#ÑÕhz|ê9àM£¨´¢FcÐxxr;šƒÀE¡·ñšÁÛAx_ ª€víF¡çq9^CŽ$„;#áø#zëñÈÁ)ƒûÃ{"( ÏjCwÀqÚGÏ¡~”à < ?3¸dpåàs(ïêB7£ÛÑvôkôôŽá8QF,“4z™€CzöthÍCО#èC¬ÆZ<_×àø_DyppùàNDÀ³Êà{ÐïÐ+è8z}5ÕØGâ¥øñ i&·‘;énú·ƒÂà_¡}£Ðdt phÚ õ?@£ÏÑ¿Ð÷Ðæ°—à$®Àcq;»ñ^‚$6»‰gˆ~RIþš|•Òæ>üdðp%„bÀã xâhÔ€ÆAŸ%®„c;ðêwè÷ «ãÀ±wÑGp|þ†)lÆ6x“ ÞÃã�.ÄMpŒ…~µâ•øQ8>Å_Ð)‚ -äÝ¢6ÐIzÍ 09X Ç›Ð8o.U ZPcIr³€›]h ¼ùhÚ|ÝŠ)@¯B þŽþ‰¾EgÑyt“˜Æ ´€ 8R)Á)8*±ˆ[ %cñ8Ó4<ZÔŽçàx=¾߃Ÿƒã%ü >†ÿŒ¿Âßâór+iBRk!&SˆuÄv8z‰wÈ0ù-å¡b”H}H¡9º’n§ï£÷(T̳ßäžÉ¤Ç nÜ9øÎà×H ØPŽ&À(˜}X}Xz'ÚÇv8^þhòAУà ãcp¼Ç ôŸÀÕOAzgàø/б~èã÷Ð?5ð8Håd‰¦ñ<z7ŽV¼tc9¾¯ƒc+~? œ? šu�úxùñþ Ž/ñ_¡×gñyè·…HÀ1NîóLâ&b=ˆûACž!^…ã_¤•,#§‘3É5äòIò)ò òkãBj3µ“z‰z›F´—n¦çÓkèô¯è½ô úú+E@ñ s'³ù ¤2d“þ?àÇ ¶ ½ˆºˆnâ� ‚Q0Ö÷âUèGB ½º›AÖk€{ õY|#b‰â^\2zŒKn¸°¢FìÇ0¶ZÐÝ0rÞGø1ý�’™û‘cðkz½ „;Àé€oš‡p®ίs# á^îwƒï‘hÙ-¨D ‡‚ÁÏû¼ž·‹s:ì6«Ål2²½N«Q«”Œ‚¦H£¢¡±Ã×êè¡BBss\Ê s¡`îe=>(jüi_‡\Í÷Óš"Ô\øÔó5Å‹51ëË L¼È× øzNŽ|}¸}R+¤9ZhóõôËéñrú.9­ƒ4ÏÃ| Ž®Ñ¾ÜákèiìîÚÜÐ1wH„n«ãEÀh$"ôà4jîº.©FC'Œnèq £å{d°a‰“ZF»x¾-^ÔƒGÍæõ ad!6ôué{>¨:¹Þ/Z$µmÑ.léѼ)5wVk9·­‡èÞaŒõØ…Ñ=öµ_8.e‡S w\v³‡6ÎíÜܬÙÒœÏvH¹¹w@nì<–ØÐÖÚƒ7´å!·=ß‹N¡A*éXìëQ #…®Í‹;€çhrk/'r ÂÜÑm=hbk¯StÊ™xÑ!Ç5<0åP¼>^/ÑÞqcžþåùò?ÖÈõŽ|tìä‹|ÁÒ›„hfo¾üÚZ%]:«ÐæùUP >mz¹¨G5ªc3[ ßꡃ¬àÛüA ýßü´dîP‰"È~‡¤¤$΋÷‡Ò²-A =Øw aëE7­ð‚ÊRŒ—Djšò’$Á©Œ#§RÕGï篜èˆÅ&œÍŒÈL`ÏeƳT—ÈHgiI¹‘7†á Ò_;ÿÝõãŽcä‡Bà*ÍÎ=A¬ ·‚k”}œ‚SZ™ÒêH£Îl¶Û9ò·Ê™F§É|žŸ’•ß0~à섆ÎÑ_¢º:S:á,-ÁYSe*hU0 #k·Ù­¡pˆœÝ};¶>‘œ49ùøÛ÷°$÷Éàöôê½¹lnÖþ•פ—¼øw<.ï®%  #¡ f4R (±ÒHHCT­Œ4e¶B;Ì3Õ¿Õ;-Öó|ë‚|;Î µ##7Äh²Ë-A£Çxl)#…+(»ÍHTmþ…Ø«~¢ZóÖß¾—ä^ÜÚ°*½ju/~?ºÅêô¶sÎÉ·ç±ÜVÂkÁ3™ Æ^DÏ9Žƒ-ƒ(Jå|c‰V£¡Ò4Ìò½ÓÉý¿z˜=r«Æ÷KÜ0–—Ë Cìq©mfhUE2ü ÁªH¦ÊË�œ³/›˜¢ÖXÔEm[vì¬Õ·6o̽ –LcÕiéé-ã;n¾ê‰Í míx61– òŠ*DbŽFNŠîÃåûù«eÆœa¿D‰ñ'KK̼•oÇÿ̈±ýCýü@¿4($š‰¥Fí§K4N­îû¡o·Õï/-åÊ}¬³¹¹S:?ȩ̀äg‚BL£7A{¢¡apºÁ]§)‚'©Äi®ö„ƒýè4\Q"“Èà,xl~e[ŽßFoúqèybð ù½éÁ‹©ƒk k¬«í«=O²OZþñۭTßk¢‰{9³Õ&è·žâ1/ø'NgØ€ÅýuÐJ” ØÊË€³Æ¤ÄY«UcAì,#µ<,øšÆ¦6¯±itCsî¥Çoyò• ¸yÿ½u)›Ž9¹÷ѶßâwØ»ï_¹1ñø®W_Ͻ™Û~ü©{WÏ_?ö—2ïnEˆÜí´ Õ¢v·ö ö¨ö]í¿´4YoCX,ø8 ôQ Þôq$ -\)|i°úÙ;µk m~]4(’´èi³öep ô†>¼ä ÙCaÊf•:ãõDV\öôwÙþ ø»XLêbeÙPÿ@[*‚åF‹­ÜÊoz¨UH8“|š Í÷ Òi×’Öq¢QmK~z~Åò‰¥y¹ Ðö?BÛ=h©hÛÄbƈí6$Ì w#òÙ±½ûE­G«eÞ1Є |„> ¦&ÑUÀ»}¢†×"Ÿšwš;ɱqGNpݧýFx¨nàHÝ@6 yÈ24Ë}€3R‹q¶Iêžo³0¬K ¶òe©Êr’pÓü«¯¿jLÄ[5ú÷oýëÒ›s¯aaG6Q:ëÂ3 <oËíø±… ïž|õå¼>÷ž±linR¾OÞÁÿEþŽ^‡ŠÑoÄÉVØ[Å4¨™;V«V›×x»ý·3­·ïSÝg½ß¿[uÔj²¹|*ŸÚçóñ)_ŠOù'©&©ï÷ÝÏk­6›‘1¬Wó>›U­R‹‰>|…¨Š9ºxkDÇ÷á·DuàE=ÖÿóŠ\ð<þ-R:Qý"éJb% ` (d¶ÿl¶?Ëž‘ó$Û/|þi ‰“26ehª áŠÔ%æ„S’ÆÚìÀ«KˆÀçᓯŠWÏÙ6õà 3¯ŸÓÚ‰ÇJÚ¶¾ô‹WÔc§^¿òé}¹ÞÚS׌MÇwÙˆz>iè^¸D 49N\ïµÓ6Ä ¥¯.ýèW-˜\t…KvEohòMb`y-y±‘¼ŸÜM ’JL¤EM‰$oQ[H‹ŽÒ›ûpDÔµjŠ2š L˜eõUHV¯³‘³¤»ïeÊÙuŸ82Ù30àì™ÃÐwÐä³™3G³ Í}Äá C±Äf$v`£€­¡T¥W–Ë­(¾‚êsËÛMÅïbó”ÇÖ¯Ï}#Ñ4pÂlsÕC°dÉ…Mgrÿ‰ƒ_Ézì'_;éAwˆ¥Ú¥viH³há Ö )µz¯[š,´Ùý˜ÿ¬‘¥ˆ­�—ÓD»Kg¶˜ V‹4=Êåaå)%©ìíû÷˜Œ}Äüý>¤ôï±¹Ú#Žñgû³’@Ý t/¯úýý’}…tw"ëè—•Ÿ“»&k»,ê<þ˜y’glvÊhA˜ÆGWù±aR÷mSÛWŽyì±­uàXüo÷b[îÀù›žz¿yÿʹó7‡ ÍZ ñ‡ÜùÝ̈U¹>È}µ`²,êÁÏeš Âmïùq£Ðæ]è^XpT8#œàEÚfwõáñ¢ÅdâÍ÷Fhͽ¼.òºa«'Jo ôóöE 'Îõ³7À0–õµß”NôËvT²èÒðE °¤V‹ÍîÁ2¼‚²bbìyeµZ(ÁŒl0ÄOû¤ÌI͈;5‹?ùSîïê�WžÚþYîÛ½ÈõcËy|=I¢Îljñ¯«›çÏH=ñà DK(wöŒV¡}ýí¯ÏA¬ËâÕýï{‡1ëÈUƒ¦÷‚|úðágM)Í x‚Vàù¢"’Ф†¢žÇ~°=óŸÓ‰HÍktÚĉ£\íÉ#œƒÍ ¡”ì Io,¦cëØ#’yK ó~À¦u䔜÷|¦rk:Ú„2ÉA¢D-5bð›DIà÷aà·"Ý Z#Ö¨kn‹m(ÞTs5­²©:fÓØböD“Ÿ)+å}¨¸7JïMët¥%dJe¤%L¾o±üQŠ˜Ѳ Ÿ>¾ÇýNF’ƈÚÄ‘sýgû¡¹y`µ§e¿AŒÑ>,!ÄPX-àe!ûE,Ç˪LUVãp1®H†ý «ÍžT ‚ؤwLîl™uͨ)¹7]¥ëš]QzwµÉ}nyí*ÇV¡ £·Ÿ\T½ðžÔ¬Ü?Þùuî,¹Ó_yŲ;;šW.Ì„¶4ܼxÝš©Ùm‰¦Ž3ËCfÅê’ôÜŠûN=Ó½fR< _4rù}¯~´w<õ–÷5Èc ?;ªÝÊpËJ,'xÆïíàthìN‡ó{~õC~+ÛÏ^r=$³nJ]r>ØËÒ-ljîvF¤“œ×™/xiØ5!ÐRÙmô-ðþ2´@´©t ƒSG&~—?£Ç.Éû]/MàvpD“h·„Ô¨2£w>2b#—, Ž*K–Ãèï?ÉžËJJ”H×&8G?7À9Àê­{ÓQ'ßpH#>pY‰‹Žžd„pÒ4,6›Kø.WÂÉÎæ¦…R˽ôûßÿÉYVä›[¨¨%¶OŸ3¢B©ÑÛÍã*ª&»[Tußï¶5¤æq[3ã®ÑŠMÜp{…GÇêŒîb!=zÒxYWßéíôFɃô‰Wn°`…Z¡)T¥U•ê1¸EÕ¢^¤¾Ò²Ú² oQmVoÒn¶l¶¾†Lɹ•*'Â6µÆVkÒhÔw²ƒ,᎛”J•J©tÔ*LP‚Æf`m¥›â(LüIȸsÃ\¾OÛIR~#©wÖ  ’Á ! }N4ÜÄ~Êlþ¤W88DÌC¡ÄYî£sÙ¸/%Ö¢:¡™  ¦’ÄJ°š7Ÿ’ý4¦Ó0jŒ¾8Fg7ê‹1†¥9°pÉ›VL $lªÓƒ+­|Å,Žæ¥ñ! +Éàã¡ÜÖ1ñ‚>–ÆÇÇkX´ ŽU“¹d\çªs³‰×ñçøÃ\(7‰Þ@Í=âÙED2IqŽÒ‚ÂÖ¯Y48 |–x®õ߀U.àx)Ú)NRè­ú…¶º[ôGu …þ*çâèZç—¶s¶ï£ A.W @G\ê€@•šÌ%4\œ(ÝU‚Ù±dyÉ©ª¤Ä¥æ5Q˜à8—ÒÓ‡—=g0ÙÍE³ì}ĕϖJkiªX°¯¼,qâ¬Ä¯sG$FJq VIVØlöL¿Qâd$7RbSeJö”%„/³ËÙJb4Œ/ÀúapaŒü”@mÚßF¬ynÍ™CW­œúxîhîüÀRâÐ-ÓÖˆeØàlº{õÍþ#Iš}íä§í^3Œ^ñöM÷W\xðéwˆó7ì\½+V•KÜá,ÚyχÍEdNˆ±ƒïÓÀCISßg/5]¯»ÞtkÁ¯tÛ vxwð }êžgýÇ­oÙ^·ÿ§ýkû»Éf³ñv¡ÑZokä¦Ú§;®tt[רoÓm´n´m´ï¶î¶í¶׿j|ÕsÜßo²Û´KÑ©t1L.ëUt‚cg=;cpØfm"@šWºU’¦2>f4r”80XT…[ ]Â0Ë×G,ÜJtÌ?àÀ™¼²Ê°œN'$õDì7gû1+÷ñ!œ¦Ê%×(„¤P0Zì& h¥ôPð…CF¶2ŇÉXa'éä˜ñw|ó™ò9˜Øyû„ŵ×Í|ôhî퓟ÿéŽÐô-s2|ލ}wî×¹w?Úš;×Z¾¼ì¶Ì’Çð$<á­Wè<ÞºaÜo�ÿÝ.¶uŸ5¾¦;j|ÍñžþOî¯_9tüèÔ(À4YuVÓ4í4g§¶Óy»{›ö>ý}콦»}º>·QÒOK›¬ŸmEÛ= €ž0›-Jn–AÒ¾ _Ò¾``Xû†õŽ•øòsºæËd…X ÖLF9 †ait÷gÒü$b%¾þسOæXƒ(uð뺅ßNt°IÚèL~{…×Ä$_ï˽žûú÷º± c¼ôO÷Ûê.°ùþäyÐ¥0øD¯Š‘.Ãu†[÷vèÊpSxFøÊpw˜Ö èjó+".M›€œØÙGÌ|Ö7H�FÌ+<¿QgLh"„”2 Ñ¢ÞÅëtΠèr¸x§3èƒ.>üpÏ - Ý"CÀ’Q‹·–ŽôF› Ý'$žd³'\m¿ƒ“”†«ÈpŽ¡T¾ôèÄ7ußœÒëú³ýÒÎûÆ([^q÷ŒB1–¦MV,ÈH Ga¾5˜®ñ·Q•…_ø×ìò½7ðɤmãÞQ]G¾ïHOø[’´úZ‡fnþÑ{ÂÕ¹ñ‹ßŒÛ{gŽ­Oìx;7]2,ãØÓ CÚ&ª×èq›#vH<²Ä yn‰Æ‚žU¹´lBMðÈåWúû°] xDÎîâóÈáщ:ÈhEía-© š=µ”Z\Ò˜³¼³ëÞË{8Ù†fk9‰?ì°¬àÉÀeLŠ&ÿoì�È—XQåŸEm* ø¶½t÷jO2i½é‰e+¼C\hóšÀ…—(¬Ê…È{v ŒÛ½#'Ì)'’y=;ø'… ؇ÈòY1ÙiÚ„6ã£1Zq¼Ò¤Š9Áah¡Zôí¦.ãã†èăÆE†`•‹oó»"._v‹*AåRwj]„;êN…„;YLǃ¡PÐEÚ|<oc$iKªÀU=«ýVƒ6uàK̳âðH%àÊѳ�ä’/8`”ÜŒdM€ë’Ù¼ˆ>ÃÎàRfû)±&Ƀ¯ÅyîYÁ­7*(ŠðØWOàÚ›.xùˆ.DG>õí/â\:¸‚xiqÃèÜ©s{N¼D¼M~øöûsŠy,z2÷Ú Ê-«ôÖ}-0I¶qüâÜùèÔ÷ãñ)èÒðüe9Ú*Nfa¼üžˆËðG#®`À/¡Lù0ʘ#.G@ðFÀ, ñˆ« ®Q/E•{Ì,M©ñ¢¢€Ó(T^ (ÍÑ]/péÙ 6¾+CÉĉ  IÙ‘NP ñƼ#ú”–\®FÒŒ¥¢ÎËsy?!?öø¡\p²?]îI<Û.Tã¿Vú³Ä¡v¾²V˜<Ð —sŒL›¤Ì¾6òÓ^“*™¤!kÅOÊê–dÌÞÖ |»ÏL&e5Ää"3}&2y»ˆ~Ð9øÊ“ÅÂ<·$Ù†ýcÄe…+pƒ²lV¥´;%&°v#0á±�9€ÄéÌ—¬@ÿ¡Óãÿ]åÉ#ÌϨ Ì"Nt2I¼ I˜}3ÉOgzÍHÔäuŸ^-y9²<iäéDËŸuª U.¤æEþ|ûhƒÚnN ¸÷Ð<§Òù'Ú\¼ÐÙ—Ùo²ßi§dÇÅe`wQPîsqæ#{" (É9 šžN°ýßHnß´_RÝaäãƒSµÕà™œX7¥éÊCçgf¦œŸ}¹’¤F¬½]ôØ7¹èØHf6ô!ŒÅ¢5&UZ-ãQ{Í*NãÖrÞ&ÕF•ú.%6V¹ti(Û~rr…%„3¨ˆKLU Á¿Ó’ ü.I…ª€ï¼]Œ«½ŸV£‰›<žê^/öú>ìÛeR©ÔÒš”¼åò«5>~tAn­:V¥$4?zÃ!¯ÇnSº]»Œ&I¶…¼?N‘’l#‰<«¤é}Y¿3²±…ëÀÀyŽ™ÚXËÒà%g•Á?–R1$Í>¥a 8òê³C†\ccRb(8ËÃLµç]f£�±Ï»W7N\HPx›ßMP]ãÆu ´ÎœeÈ©+s´jÜ-9>‰'M"OL­P&/Œ#$•µ×^¸vE#hY™%¿:?ŽzèÂÜ…³éd^Ï?¤mòÆ¿&6% ¸ nÖgOÚC,²]õ¤]¥Q«Uª]&pÏ”>µÆawRÒЧcç2¶ÉòðŒKy†ÖîtADa? p;]^IF0D€•>¯ÒfWñ$Ï“ZMÜ&Úy²b«ÄRÁÉK%ý“¦‘‡ô/#MSs`’ò69S'Öñw€]œÉK³rÄXjx kˆ•wK¬Ì³Tf§ÌÂ|ÈÁ¯9»(„{‰Ãêq+ñ¡Žúô…ëõ\áM¹ât’œtùú¢ ¼ð1·«  ƒMÍ>?†jºðÑìp1òA½º«ëü€˜mÁ­x·ÚÚmëæn×÷6î ­^HÜoÛÁ}MœqœÃgmŒ¾JãÚ0VÍm‚§Êåz[0(ÔîR×b¯«›Ô~³"a±˜ Á¯$g-³¿lÿ€EöñTž]ýO}¼l¿<"MlÊ^’7,ÔX~Žúò #¾¨b>J 2ôÃ:E¼Y;wö†ÚŠœº³¡q± +°qÉõÙçŸåšN<qòŽßD>XÏ4-%7­ªÕ$Ÿ~«s_*Äæn‘Të’¿÷ðÇbè1ÛfÞhÚ®#ºÛtY%«UåRW•ËHç£Â1“Óa_lÆfs­Éáp:]&‡Ël×›mœÓëâ8[8œPú8l.»R˜¥·Ç£®]²ºìoŽ7c×-sâ=yíA23yV8úÓɵ˫ Èt"Vœ-g2hˆCŽæQ~ì]Š¿ñª¤(C BÃkD`šºÆÅ=‹ˆm'o:wýìEø!cÈËæf¤š¯G†OoŸ\ž¤G¯$7]p¨’±þŽfËÀ!‡(%Öç–]5–J¯.yåÚ†Õ…‰ßš?§8z+J£jôO1d^§]«[£Ծ¯ùZÿÓ9“FeZk"Ä*Wº»¢õDoZ¬èÃ:‘‹N×évE]@D›T86ª‹ÄØ ÚÏT0¸Úƒ Žùq$¨SS”7a&©D±ªš¬®f]®9÷1˜ù†%bËbdŒË¤Qéƒ~ìÿ&Á.c ÖY“éÃÄ~~ÓqyV(;¾?{VZÏ”—‡^0³ð‘8+ÏîÕrßp޳'0[Ë'äà+—é*áùÁj.—æ2Sùið*’¦ò‹¾RÞ¥„AëÅr@Lð~¨%—2nª)ûô®;ºGÞ°áè¤Iï²âƒŸSÖ¦ ߺ·kMºê÷^Y»ò»Ü·#nÑs*ŸCUƒÿ‰?ùâÔW̪ÕŽœ×ÑñËû15:ìËüÕg+&Í-)3®|ĪݿÊõÛŠúéÇÁFzÓ*Ðk;zL,k¥ÑÝ–íj“µzúÐJv;Ò+zÆÔ…½Æ¥Ó*{œØçœèìpî¨ì#æ‹F‘tñ/àˆÍ‘¶1ÑG\%ZíÛÊ]º·/›pÂ4Ç´Ì´×D™¹ê€d©íÒ”Œ#q¸åà.d³™þþ P‡l™!’‘ÿC\óüdBbü̼Yr1Ãy¢BZ£RH‹=)êm¢¦`Óø®X7ºîŠû'n3×Ð]¹ùOˆQç__1&™»œJQ±‰ÿ™· ïËv!ˆBè1°ÈõZÁ"·¨§»W¿PðEƒâ6û<€2¿~§Ë$¡½ ðU®`›ÀÛõ4›¡‚X²×ë⎷¤u-ÀüEïòñ”E—0_ž¶Ïë 伇84‘”·‡ö‹‹ŠÃ˜á+>s¾(H¼{íÄਗ¾™R<©¿2¯îÆsßæ¾¥¡v ñ#Ý•¤FvLyhÚνÏ+¯žÀn®œ?°"w~ëÖw–ï#žY•Ñ&½ùµ¬¼]”Ö0n+TÈÐB!L+¦ÖÄqN•Z—¦2”*ÂYàpª°ÑB¸ÌBm'bæ™fÂÜGdEs£ƒcˆ¿;ñËNsÎtîq’ ÙýùEŒnfÖaOÜ}V"Òò´4Ù&Y6Z2iù"/ËXóÓþàäרòýgÀ-ìqêêzšÁ)-ÖªmÃb|`ìX!O üÓ7ª :®p–±.v@K°;ÂŽê&Y¦ljWà1õŠ2©¿ÁÁO˜¡¿蘸ú{V89Äa[ÌYâ¢B4PÍVÕr§uE‰â„Ë펛¢±(çtÖB‰NfKiI©RŹ(uqœ,etNwTQ‚C‚™ÅIWÀXA”$Šb*±´¢B¨ ]‘±ˆÅŒA£1X¬¬H%Žžþ#ˆ¿6!Çã'eØNH c(|½,‰=ÒÁ24pç§WeŒv†Yf.7§BaÙ¸T’Ÿ†r¾%. Ü\?¦R¡è7þQ«µW6ë[ktì»úOÊׂ¯Mpqgna*÷¤>·)»Â]C(ɸËt‚y I´Ò¿±<àã2ލ:]6°”xÄTèL›µà|1Fï¸óqòð‘zgR‘²lh ã¯äq¤A"ªïkUKÝ¢º­OxªŽ¶ Ö°{D¡.,„¡páˆÂº±xSÙ¯Jöà§KžñtÝ!üläù’çG<_w$òFÉ#Žzæ!§k)¯IOñ=ÖÑkL¦`Ñ´”VÔjêëýQ¶—–ŽŠ¦ ~2ÊFñúè]Q"ÚGÌõ£”¢èö/ß?IQZü52qâ\öôÇì�{6»bàÌ)I*+ùñ)­%ö× »²¬à/[—7¦Œòô®­¼nž=)oŽä98~ÍDž…Çÿsð“G,ª 宑vkŽŸWÙ¤TjõÆñå5S>yô·«WÙõZ³Å›i).Ÿuh¦-©¯›z>´Úc á˜%Ö²bTÃéG'ß7sF¡W˪ôÆB{u]ãÈîÍ£F̱6¯Êkt›*<5ÓÛ’¤ðN�ý×/w«Ø<M9ͲÉzÐ~ÔrÔúšý Ëwo 8b • - ­×‚P²ö ¡Fpè¼·Šôš¤šjfÈ Ç©QˆwÚ°MÂ~UP¯‹zDˆ:úˆŽ¼ë–½ä»ëòþˆ<¯~1 ÍöÊÌsòŸÉ*/U†A†;¼ß˜ºhÆøå#¯();ã™wrÿýÚä+)(®»3ÐøÉüu®uàKê‘þ„#–ûöÕ\®_L®¢>ãª2 㣃ÿ‹\ ú'aüvqZÈóÈéÆv_;?]˜Xì[Ì¿h}Þ÷ªå¸ïGAkqOçg ùÝZËãùlJ»—Æ4mcYÐ4[‹W ~šVõ"ÇÿÝ…]À€ƒ³¸ ü I­$´‡~Cß¹ãÜÙa´©T^Yii!–4iEVö^óë7’[pѳÈ3'CjCT$Q¹@Üý»±Õá‚JÂÉñs&î¸yRÚ_Zp[ÓÄWĪ‹Éã7ί˜`òMU –”ÅòöÆÃ¹ k•°%éÂÜïÉ{± i<R£Aôà¿öŠcâl¢°ÒV³Õ2ÍDÓ™6Ýt¶­°-ºP¹H»]T¸(º¶p'z ð ÿsþcìQÿûþ/ý_þ˾ÐÅv n½à öìÃz1$xÝÒGJ°ÜV Ó ½ÍÈ!ÅT#£Ÿ‰áz[Ôå†á¸?®c³âEòrð¹ÌÀù™Ü¼¦Øó±%{ ±ßõ_À²ÆÈãîânÉa*G&iŒÙó¶RöbÁ^T 1¢qQû˜¥a«%¸(Wò—G'Õ…k2³ñ¡’Æß,¸±ºd\ëýŸÌèvàoó¶OºwçÄ»‰ØqŒÀ׎ReçХЄÑ(lÌç>DòzK1`Ù|Ð%¢�?ºV¬³Y‚8ꘆ¦áéd›®ÍÑêìr¾`Ò˜Ì&³ÞÅ7)Ñ{<A‚Ñ·Ø5~ÆïçT®~•ß`Æ{Í—­çüg¼_-r'pbà ¨ÍŠ³ý—ùœ’×#…ˆiœŸçç¤%~»ä)ò¶¼¯0¤%c0ï4š‹Ïïëì- è™s ŸÙÞ,†«sÖMZ´=÷=QB$'L¬¡~I¼‚éų›VT¸¯o*î ª ÿ ÓW={×î‡ñFÙ?pC§Ýô­(}­<ªÆJµJãP;5ÕGØBd%òDj¤@Gì.“ÏÔbž^îó2 E$¬üèíUVƒÇà¢JòÑ Òl™4ù|!‹ò!ï�4ìº7Æ|TÇf~2_ T”W$+/[æL^ ö¤Íù ƒºÊîîø´/Ö>ÕTSÚXËR½½µ‹Ž•ÒÅ-ăíãîœõ›e3ÓbÜ?VéÔWwäþÕ>°eq SŠ(”ÈÍ ß¹j‘ MEÓÐânƒKïÖhbŠJ4Þëò¸Ý®˜­’¿!©kŒLÌÓéŽÜ»­èŽÊMU÷FvÇK>]ùtÕä¡Êï™oÁ»÷•8 -Í^ÕhU7‚l…Éê‡í¸ÎŽvl�±¿Ñß@«KTÕãª`œ1'¦1Ó¦¥Â^"ªð™ï×8.5Cq¸#…S3êŸiüQ×ÍS뵇wE{ÀªÍ˜ž8ò^¶ÿ,X¯îÇÖq:ë?~,ï1)Ñ@ÞÑè_÷‰ãLÿp�3´Ô/M‚×r'‡âèË™° o¿2C©Ê 9t‘×ûó›í¼UÈo¹y{(mÛÕÓ’·x`êÚ-žiã«kÇLJ]»qýÊ1[®èÊõøôÎ-íWÉöæ®õŸ½Ü|õ»#±ç:îôšÍÞï÷æ¹6¬¿í£U=wuýŸ"˜tûÆ[6߸ñæ Í&ÿÌŠ ÎÄ=Y½Þîˆ5O_ëÐGZvÇA·ai¸«öpSˆ ]î°×O$Ax3¿zmlØXAZo00‚‹k­«ÐØ4vBeSÙ!EØisÚm![¸ÐVho·µÛÙÙ»B]álØŸ²=e?d;d·±J¯Õ&maN0Û/Jð(kc¥ÇšxΨ&Þ¥S"Ç Û¬je�ƒ£*¿•"ýyc  g$,šLîÏ^C)P@l&sZ6¡òøXqù„š1¿Ñí²ù´á`^.á«*Šêñu[ft?˜¨Ìy+#zGSÅŠHeÎ\Ê$)sm©²làð¸)›žÈYbÚÒRMhþG£P7Ï4ðѨ¦ôÒœ±´N¡t¸R¬b­^¡Ó²•Z;0 RÇí‚ǵB°YÒê®Sâ„+E[n—š}¬ñ³èû›=jd%D(gÏ€&Oô@·³Csçìi .ß‘A¦.ÆFùŽ]ŸYŸÍÖ̶§,žè¼ ºä £ÙìÈ‘pžoQ™\Dûˆ¸¦ìÂ9¹yùù£'Åënw¼¯&lJ.d+²Å ½…¾p°0. ÇSÁT(U”Š7CEñ…Á…¡Î¢ÎøfaSàÞ¢{ãÇœqºïÝ&"ŽH8ÄIÓ…J b<Jd´xLŠ"_‰<žbµCã$Í3T!#wz°§D)ŒÊ"—–Yràð³ï­0ÚÓ§ó;oäøq@Ê*ÿÇÄ©<Á•vë 8?‡S‘/$k^Ú©x4×cÊn©‰Ÿ« Žñ0¾Ck3åüE…Fþ•¸¿1ç(ÕÅFSæúˆ®ìÂVLÛ µ^‹"‘Pê¹ |jÔ¥¥„ɬØ\ö׆bU)Z«#¤yš*FŒ# zBÒCJÖÿ” ®ôèáJ‘¤A‰ zµ¤éTê(%ã?+K;¿:¿V@gQ-{ú{º´ä²~^Ö‘[‹ª.oîù†ÑQýÐShâò…ç‰/âùŸ/{¾œÚÃïñï)ÛSN­å×ú×–­-ßÂoño)ÛRþ ÿ ÿÁ²˵…ÆB¾Ð_XVXÞXß8r1¿Ø¿¸lq¹FÅ«üª2U9•Ò¥lMºFÛ¨šÆWµ¯ZßÕ¾k}·FÓηûÛËÚË)Våõ|I0^625×——ø)DFÕhÁ£‡YðøRBf„ÙOȤâA·†¦T–Q¾j\Ýb°,ôâ‡ÃÀ¨£FJÛ·Ô R˜ât¹£¡fô‰ž NK‚bðÎà® ìÑk.ŠG+›QÊ—"zR8‘*I‰©;S»Rt nlVûGD¥U™4Zâò™îsÙìŠn`÷ÅÄ™¡iüº:i¯~öK6¿»0¿ß%1öLmd. ˜†’Ù¨¼4ø¬©üfg{ùж¼Ëç2Üù|•Õ_\o-/i[zýè__]1uþUOW縪¢ÄÈŠÕ0~ùTqQCÝU¡ªœ­”1ºZˆv±XY¶mTpT5?¶)P³ù¾¦°¢´TnÀÿ˜Ø:ל‡¨R&܈ÿ1¡ýJÝdåç¯Gƒm Bô¢¸ÖìÃ:›ÎN†È°Sã¶¹íÈÏзÙÚì õWÙ®²ß¯—`þ7¶ßØ_´½h?n;nwhmZ;!á=¶ Üÿ�{ó? =E2‘!”W*dœ/d äE´]BûXT^:<Ãæ.ÍÉbyä¡ïÈ‘‹H¿â'`ý7HÏäK0@}l$¾µtû¬[ï¾õm ë »„ö€‡%ÀÏ1soß“36D˜K`?>œç)ýëAb§ãrì[l*ÄA2Ȫ¨§í_S_(¾Pÿ@SœS3.ÚÖè×°Ý–n›b†z±~K¶¢Vj†‚´‚ûk*5Ãq´fº ›DZŠ—ÜmNì5’ãëv ír‘TqØí•üøà¬ •—!9&DÒÿT »'àj˜ã˜9ö&Ñ›¯å~Äq›Ð5Dýœ.Áþ±{r:™ûö¾ûþô '¾üâ䆶Ӹl~/r®’z¨ ð{ñF 'Äø™ÚiÓ<GG]¯ñïú¾(øÂó¹ïkþlAQ€™‚0—æš¹V®“^X°Ðsýæþ‚û=Zˆ³ãl1iôžâš€IðØj„ÂJO|½P(-·ÑdØXè/9L%­SLu36…nª_S×Ï 1)Þ)ÇËóEu‰ÝŽšD#6›)|–b~ÙG'ŸÃÿpriIm…4Qqq€•_Zþ°ï—%äy«ä˜IË GÃVqÞH`ÕÀ›#Kâ"Þ4/äÝ/Ÿ:6Øi˜4pjÚ¶I;zÞ^Ååôž9¹“¨§h) ÞØÈWûOsÿYÊ•<³Ù8)CGQ~â¢cȇî§lµv7{=ʾÇ~Éžc•´{½¬ð©Hy|ÃøèêöxŸœ6+it‘.ŸSC“v‹È‚gÜ¢LôyÕFίö»¢ÒR{‡¨êð¯÷Ÿò“~>q"+»I_ù 2c.ã ›É^\ð¨Ã?2² q Š‚5Å^цúõSë:›ÒõsÌ…SjZ>)e¢™ —@ç‘i &MÈLXÛ9;·na¹²t(†&¤9-i-ãs1j5qñéšûµŠŽ}Yô]‘Rg$Š MÁøBÍkú£á£‘£…ïªïFõá?ïOï—4TÏòÅKSxÑ~n¿´š¡§ðæ š ¼A3C‹5ÕLu5ÇjÒO¨ƒ~Ftz¸ýnßìÑô ƒ™[Pl}ì®ˈUž4öði?òîÇþ[v±=ìaöK±™šÄ ˆ²gÏpµýl?ç`¥\÷ÙnÈžÍïJ¯øÉòË}ÃÁXDCôß­^¤þýê…ÄâK«É´çñéWŒ‰ØJw\—¬Ø}_ý=&§•‰' nm=ÊS0iyWÉÄ'ž(œR+˜UŒÑÉ–â6œÚ¶¦©º2luŒ©ih˜}í31«9÷A×ãŠ`8U–˜¸zå«F«–!\>òËü<öÄNZ…<hèÕ¸±µÉjÔˆ˜× åJ•Bt󯧯'Zxk“¦PG+2¼R-@pË#Koâ÷w˜«=éàÎtÙ#¨®H݉ü:­XÉÿM%mÒ¨L ýï€<_i~¯ÂÈ»"‰ì¸äþ ³GR®Ò@YëMÍ©.rZÚé/M.\ÛÝ>°#VO—9¦Vd]ÉMÄŽ!ßzðsj,y\Þ—xHlô;ñ8Ý8=‘Ñeô„ŠQ:ŒÓYS0¦ YÄ<È<Å<Ï´µ½gûÒf`õl€ð jÁ£^ð ž@J°Ô°‚Ùc‘çeì¢Ê1Òîs°jÐ#E‚Æt‹Ûm×™`õ:üjUÔÀJnZG}òž¼÷03 G#ÃK`Ònél´jÁr½ÎÉS3ß©ª=íž È^¨üùi™ü*~ÌÀ/M¸ ËÇã%/Í_ÚR2uæü=Ñ A“{ZF”{¢A,'˼ÒdŒÉèßXÇßøAKN 7¼†ñ9ù>¹°ç1‘1d9•ZÝdßDÉ0Q“Óép2jh‚³fÒë1ù»¦Y.£}¦&ÂÔ‡¿Õv§ÏQâ8à Ýßâ“ æ½îlúã¬=ÝßÊoχ.Xfhá‚ý0ƒ:í~ié‚”·Æ‡+>Ui d7«uÕ•8U˜tæ&Ïq¥.·/Jî-#,¼2¦Î]‹g;“†˜—•‘‰Ú ïsÄå)7U6ÜWúAèk9èð Ø„Í4§öë“Éd¶:9?'Ø Å¡h8‘V¦TU\£²‘›ªÌªÚãW:×ßîܽ½ø~×Sʧ¸ƒ¦ƒfŸ› 9óœŠÇ‹bEEquÔåv7™"…ÎÙü8˜ç¨©!¦VG•Ló�È%Š ég-bENÎåŽh‹¡þ ]æ1 D¹"QM±FŒ'š‹›ŠËÕÆ( Šhdaórãzã;FÒØd,T”'GO1¦»kYGwš{K˜ÒµÜÇFð?݉îtíÇÒ>w‚ì»ÕšíŽe»¥¥¢Ìp¢6æ`3J‘ajYÈÐÙQºLÉŸ]¹L4pÈë!ø¯B‘BµC³Á§a âøÓ¢ FÝ¥ÝFR奨ŒÙr¯$ÞRýP–{;dEÚ­Íž[†'1K¬n=]VF˜8C˜ÏÝ7ªMÊG••1Áê 'ˆ¥ۈܜ eY^Wí`'?ùÕ€üžSš5>_¥ (Åãê¾É?];]×n,Ð.Ðmð?å|Š;á<Á±f£ßbi2ùxŸÑO*Ì<ïóû RQ–,qð~c²ÌW–`’É&I*x³Ùâ¿/ñx‚HDM~£¿ j2÷Ÿ0ƨ‰I0> c4ód2áW”iÕHçt“j‹Ój8 BĪ©«ó÷Áš|u…Kã Õjjj30$N³ï¾ô"ùÝó€�C)©t£¾8–e•™ SLDzvc&Eú«<MŸf”G¸—¿f%Ø*î¹èJørÉ]ð2äeoX–ðд“•w—·Œõ.äs?øBA59E–•VáÖ³˜—h\öœ9VfÕº UözߨòòÜlfèö(ÞVê�9ªUfûÃÉõÍK€ Õ–Â\.7U‰Ár€-Qû$aJ|¶Ëg!C˜kü9ŽÊQâ‹k˜„½¨K·F/m?h;hÿÂö…ý;Ûwv-MëÊmá°ÍWàñê¼òa_“ †§  jÒëuñ"^_à+‚ûq¥…°‡ I‹'lUª©%ú$#ÝN&/VˆXQGRåÖŠÄÑÌGGä .¨MÀÇ!YóuÃÂÈ—Á’ÖZá* †]°¯KÐ.±Þ&;‹Œ%ÝðõïË‹Xü¤ªÒ:Úb(‹¹Ê‡ÀŒ@%µŒööj]º §"å®Ü›S×Ü<{þì•‘Õ‘¸Î6©ìž‹¸V†-<ãðæàž¸1|Á¦ §þüèüêmiýÆÌ,à¯ô#:¿§^‰¯ÅÛ1& Õm˜ÔÔ¡@,j˜ Ô,ƒÕHÅ@Y£04©›ÚÈ ËÖ+U~QÏ83ãçi^Q‘Ód¾w÷ÐÿÍ›þ ì¹ñâg/Z=é?£êúOç�e®m,Žm\wdhÍð®i‡ÇÌ[åÿ)'qzôHROœË¾6º+™æs'É4Ñðæ“^¡ýå=¹CÐ3<ØWP*" —é zˆÄ4¢G>:‚ÒÿB“¼•7Sîógˆè¡áŸú$ú‘gŽ!óÆJ9âºà0ü<7ƒùÞ uU’¨å ¡D¹'r÷0ç.ÞþÔ)Ò ¨ôÓh6œ HO�Ú.Ó4x&%à¼NN/œA8ãpV •%¡þc@—ÒÇPžŽx cátKiêsÄÃ;ÆJï! àÞtd~ ÷ŽåïÉôÔåI)-Êü;’P.¿DQ I Åð·ÜžkO¤åïÉTñt>-·ëxÏ/åwIí.Ï¿!»”–Ÿ)ÿ¦ŒÞ$êF/a-Èm*^…_#BÄ]dy/¥§ÖSGéz—­xY©t(w¨ªU/ª;Ôç4Íš§µ‹uJÝ]ú"ýC·á{µ1bü›©ËôóV‹Â²ÖºÒÆÚVÚY{«£Ë©p®ä8îW»ë%w«ûÍ‚ßzvx›½Ï{OÉÒ¨Cs@H×ÀI€¶³(ŒóWü:ä±,AÓÌÒÏI5¶¶Nœ:=6uÑÒÎkâ#—]µ@Â"ù3xÚò³?ÞT'¯aiäÑdBfdAVy÷¯CŽð]¨�ùeï3$ÿ?C!Œ¾*B T‚Já*P U¢*9î‘~ï§5¡fÔ‚Æ ±hš€®@Ñ$4MAÓÐt4µÊ¿4ÍBYÔûì]Š»ÂÚGlémòZúˆÍ@Ì}Ä& ¦>âv ûnnèm@ }Ä ú>âV º>â@´}Ä-@4}ÄÍ@Ô}Äz ª>â& Ê>âF L±ˆ¢¸ÝG\Bȵ@È>b ¢¸ÎçäDk“÷ÓüV öE±¯ßÕ†ï à;ë`ÄJ³–Ä<àðÃÄ|È àúwùzJ®ñÑ ×—‰¹pÝ+_ó5ˈ…p½ÒWWÂS¼rm/qe/VŠõ"‰O H‡È×=ò•-+t'Vèž_¡Û½B·~…®f….µBW¯Æoƒ txŸ|픯!QS©{²R×]©*¥*Æëðùê–¯vÑÒ¦;Ó¦û}›îá6]G›nz›.Ц«·áÍ hþ…|½E¾®•¯]òu²|ÊW£hŒè>ˆèvFt¿ŠèæEtUÝ Ø€À=µ¨? ûü€.|@ç9 ;àÒ=škÀú^R¯c¸ëq]ííÃ?ôÎr�9›'ßöÎ*�ò÷ÞYA ëòÖ;ñ—h–øƒ¿@³ðt F»()ÿ1^BHô#¼DΈ¢8ôƒÞè ðõ÷óä½<9Ýmrª7r²7êòFž¼Öõ�yµ·büûÞ–ý-Å@^îmI�y¡·e¾Þ–3@žË“ý½ñ«€ôöÆoö¾ˆ{PœØ¯_ß;Ë ¥7õÎrY×;+ä†ÞYUÞú8¾í’Û¸j¨×@þA +€J}[޶Ê÷—¡­òý«ñ9¿¨t1^"óbåï] }–èüÞèxÍìÞh¶Þ–R ­½-“½õ:< µÈ›ŠZäNA-ò—&öÆ÷@µ+zãg ýã‡Ú?®7~Ò[¯ÂcQKßjAA¹vsop'Ô.’JbHñ¡Ä å-D¢,•0`©DƒÐB©ž—ƒ¿7º ßmâë)È À‘ç¼­·Eê‹YâEqùûÑïÿq–×ûì€÷û]g¼ÿ‚óì!I z½ÿŒJ¿a÷þ#zÆû·h™·?Zêý&ªö~¼ïo}Aj zjø¬Þw¢Fï[LÞ“Á3Þ# o˜µÓ{8:Ïû2(È^±Â¢ÁûL4éýM‹Ö»§å*ïS-R™Ùû|çÁ–mÞ{á{¿Œ^åÝÌ—ß"rÞ›AI®…笌»½Ëã}øÁƒÞeñ ïÒ${½K‚иƒÞÅÁmÞ®`Ÿš;kEw&´¥½¥È;­EÊ«½Œ"ê%‰¨„S×ämeÃVämyµ–å1lv®fçñmNÊfïoò6%àq½£ZüÞZxÓž^oFjl¯7Ý"¿¾<Þ'1­d—Ä´ oQ<âõ¶¨½Óö13˜j¦‚I2ÅLˆá™ÆÍX”&%«Ô+µJµR©T()%¡DJKßàgb@²C+%])BºyƒÀJ©w›‘’¸ÎÛà¼Î[à\çpÞ�çZ8¯ƒ³Î̓Ÿí—¾}ˆØLÜp€Í'o Ö®%nJÝF\7”ºŽè–S}@¥wÝ7õáÁ =ø—[w£Î4˜ný3—Ž¡kìÒÇñï¾ðsu/K₞ûÇNiíyº ­§LJ ´í)”~Jê‘"’ £ik=„W©†ÉR9^9º ª“«¡]DTC³$ÕH?Ú%UC»H¿\m“TmßÖ] £÷íÚ%W¡w ­r•­ô¹Êžü“¢ðx’(¨¦P£¨\-ªPKÕ@)äzx áa¢(×rð©^â4ȳÉï ¡JKPª²/„ û‚1ùvøÒí8/ß^’¿½$ÿ|é~"ÿu>Ÿ‡û±ÿ?}:Gþ¿~cÿ–Ï6=.ýX‡ÐÐ gGÏ–î.GÏúy>ß¾MŸ ýFX¨cÞü.‰ÎíìùLèݳIíÛ·åñŸ¹ý¸t{‹0zz¼ajë¾ÇÅÎѽ[Ä-ò/ˆíŸð踻ò®Mß5îÑŸyØ£ÒÃÆIïšp÷Ïܾ[º=Az×ÝÒ»î–Þ5Aœ ¿«aÑ”‘×\öY½jU>ñól¸Æúÿ%Ž“' endstream endobj 107 0 obj 16411 endobj 108 0 obj << /Type /FontDescriptor /Ascent 750 /CapHeight 0 /Descent -250 /Flags 32 /FontBBox [ -170 -410 996 1007 ] /FontName /FXXPTV+Times-Bold /ItalicAngle 0 /StemV 0 /MaxWidth 1000 /FontFile2 106 0 R >> endobj 109 0 obj [ 250 778 778 778 778 778 778 778 333 333 778 778 250 333 250 278 500 500 500 500 500 500 500 500 500 778 333 778 778 778 778 500 778 722 667 722 722 667 611 778 778 389 778 778 667 944 722 778 611 778 722 556 667 722 722 1000 778 778 778 778 778 778 778 778 778 500 556 444 556 444 333 500 556 278 778 556 278 833 556 500 556 778 444 389 333 556 500 722 500 500 444 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 500 ] endobj 8 0 obj << /Type /Font /Subtype /TrueType /BaseFont /FXXPTV+Times-Bold /FontDescriptor 108 0 R /Widths 109 0 R /FirstChar 32 /LastChar 208 /Encoding /MacRomanEncoding >> endobj 110 0 obj << /Length 111 0 R /Length1 27204 /Filter /FlateDecode >> stream xÚÕ½y˜TŹ0^uÎé}ß»§×ÓÛéuz™}z`Xqdd—Ed‰AD¢€ˆT·( £È– "jl0F‰ú‰&Ž[2Îõ*Q¢3g¾·ª»‡ÅäÞç÷<¿>ÆÚëTW½õ®Uï9"ŒR£Û‹r3N_ÜÀ-yj^Gg®XæûîŽÅ ÿB̽s_¿pºmñH„¸ÅÐgóõ7¬šóeåCy„$Pïš;{ú,ñÖWäMqAEõ\¨P dsPn…rpîÂe7ÿrDÅn(ß cκaÑÌé£7nC¨í}h?²púÍ‹ås™Gšz/”}7N_8ûÍbÈO=HÊ‹-]&_¤\å7¡|vñM³ß|Ëé2„®ƒ1•CFd=dEKÑÿúvfËIT&W(UjV§7Mf‹Õfw”!§Ëíñúx  ‘h ÅÉòT:“­¨¬ª®©Euõ ýúÈ5 Ô<xÈÐaÃG´Œ5úª1W½µ^‹þÿþ7Ÿðÿù¡íè8š„~‡Î@n/R2NfZnEG üz b”øô€ƒ¶â ø%< o ½ÏÀÓf6…ôH_âäL'Ô= uÐè þ˜;‡þŒF ÍèÏìN´Š�-«ÐÓx;¹ÑÎLË»¡Ï;€1ulz�+ñ |ÿoB{ñ+~€¾†ñ6°±Ç`–8úš­`ø¥à7öÑ1 @ýv–Áãp:†lx~«Ñ>f;´¯ÄߣåÐN¢ûÐ}x�š†fpAÝZ4þ}¿²mƯÁº7Cx‰ ýŸ†ÕžÁN˜Çt/A³X9^‹º‘ˆ¿gµ¬Œ…µÞ‰¶¢íÌ:<ßǸч› h¹o¹Ç Pðܺà77#žë"-ZÎ8a&¤}3Ú,5KÇáW˜$þ ~ =‹±1›ñBô2<ëÀ³ÈS¬úÝÇŒf× Íì[Œ€òZ´¯ægv3s ¤†•lÁÛ™IðÔL‹VKÍœàGÿ]’•2Ã$g$ý$nXóìCx ´œŠp@º=Â> ]0[‰�ôn%ðGK�j³¸Ç`¦‹ào „Õ0Ö4`7-båh*ìÌfmH) ¤`Œ%�)­–,A'ÑRæ-´”Æ[Z«Ð€…Óš^˜Óvt;JçdR ‰>ýA&4|ÖÁÜÕ|¿›È'W}z™ï sP³Ê÷›ÞÞ18§dâA‰ë ’äB¿þ§Æ¿&-c&ø~ƒ n.;xZ3T^3²¤ÕP?¸9Y þ9âÜÉnà€2dË)8$År áÔë￞Aú³¯Ÿ}=m2ð†oàçp¨{)ëìþD|@¦½ðõMÒ(C‚ÎôЬÈ}…TȆ⨠B‹r9ŽWÅ>ÞäO…ìNÝ Î—š^´¼Ð x!ôRêEö…ªã '›ãþˆš·{¤H0ªûKÕ ¥Gží¯T«#òÚfýÙŽÎŽ³ú.}—ÁXWG̨ó|çyRùí§]FRg¨«kKc³µ"[]Uø¥ì%yI\‘µZÌRÖâ€?\UY]cª¬.ÔA™½$ÏT´µŒœ2edKÛSF’ÌÈ)Ì8™NêðÚŒ=Óä©2GöÜöÓ=»×¬Ùûdvïþém{°ºùÚk›_ÓÊÜ7¨õ’9ϲ‡Á+ÿɲ>»Á#?Y¾}ûòå;v°#–ïÜI2”ý2rv!sJ2 P0gѪ%,‡~-?l4hrIÕ gÔŸí´‘EwwØêÒØXXAÎZݘ…1“VÎk·]g³{9«ƒ]èã%j»ÃaW‹[Âø ü¸ˆÍp§€'ñ9«Ð½â<ìQ#Ó½R,5X<0~[G–þ@ü�ÀIÊXÌV›`"„™ªJc …"›dh®KgãMzïÈì‚ùã'ÖÏëMÜv˦è£â…{Öýó–‡-VGÓ°xLû~\qïuÓèvöÍ¡"çW°ÎWt‡=…ƒu˜¶¨"ÊFMQ›üQ:#“Á¤Ïw¶eÚJ³‚=«6Â~ 帊î—Íj´˜ÝQ¼³Ù8¨>“-gÖó-0«‰û·…õfñó†ècX±ù¶ï~2ð°Õìhº]|º}¿øú½3¦”Äß 4‡›Ï݉¼(—ãu µÌëp½fC¯«_ÓË^õÙ f sV9²™­v¦ÕÑÝØÑ‡ˆç/)¦1_@#Þ@áVeà)²Uð††1ñ2ïø=IñÁ@2íÃób¼?¼”ðù"â†`jVF|žr¼"˜Hn Å“lDv”̕٧U"‡–=ã %Ç"¹Ìaqô!Éë„J¢ôÇG.¢} èq þJ^æý³ÎÈqâ—2»–•ɇèõ ¶ùMj…D/ëÉëŒ [&3ªU Àg'^ÈU0)¤Ü:Žådo¡7õ:¹ q*V¯?›§¿{ž §Éî‡É‚ n N™m63ÛÏVæ1á…ë|“Õjšot¸ãÇ{¿fãxð sNÁžU¼­–:‘–AëL‡.!JüøÂñoX8a »GÏš1fÌŒ0¯Ïz·pœd;2!ONÏjÌsÐcR*§—š ³ä9›OKúˆ_dë­‚Ó“J˜ÅްÓ“HœÙ`Ô-·¨%M•¡ˆKnV¾x¦÷C #<í†Üdi»µOªß±7¨d•¸RÒ¢j‘5ãfÉdÃdM«iaf–i—j—lÞ&Ù¯Ú/Û‹÷JÚUí²cø˜ä4>-yÏðžæ¦?Ú>3|¦ùÜô¹-¨YX™Îe‡%ÃÊaÂÝÀÖ€ÊYÀx†õ3=Éô 3gém·-]vÛmËN|ðÁ‰ù ·Füê¿Äÿ†]Àú¦á™¸ Wâ™âCâøÛEqs±ßKäˆGM¹ ¯ IXÍI¯!oWúìF‹9^Î'µèÝ>©Î…]~ýÙ¶üÙî¼Áh£˜m„Nuf»ó¯úÀ*€ÓPܧ²7`^©ÑH¼‚߇£*‹Êd}lb:é9‰¤'îå2 pÛƒŠ1,ðüpÚ ¿ˆ›}‹Ð"èìÇ�ï ´>73(Ù­i_cÆfw4”wŸDÇjõ-’ÕòŸù7pÊwIvr;xvìÖí6à~åØj— ='{NúœówBâJ%*Òaà¦A‰Ü’ùX¥,á ÙØJ@Ïæ;É2a¡aRÝyýé6*kêÒtIpu *Hü_D%,Õa¾„V°²ªâE·»Oºeú€¥©&TôhM¹çgîýP|j|ùjü*'ð|¿ÇO6v¹*ñû¬¯LÈMƒýƒ¼©ÿðwÊ‹Ï]]¾"žL„Y;Ê ¼êXï‡ì€O=˜[†Ü–@{:ŒÃ w»E×®–¾“8iÉrIsrlp¬v²~fp¦vž~qp±vµyµgµ~¨…Û2Û‚?/ß&¹O»§|wf7~L»GóXð ö0:’9„” ¾ ç-Èá“¥Œ²Å,f§EG™¨Þás0…'«?ŸoË·md‘Kð5ßy>O¤sfi\&]ÁüUUÖ àØ×}YfùÚ §¶÷Þ™²òþë'9­c}–ÑÓVLn}Öê }t×CoÌdúößò̇ˇx„9wÝ0qµAÂJš”,§ž;⺛çýV=¿qÞ]„fuIÔ«E;r37âã˜Á>·«Ìb–…ì >ΩB<ʧTEÞ~’Xj-ã˜9Ì ægÌ6f/s”QÄ#µÙ”ŸKø³šÕIÝ.Ÿ‚µ°`LUáªDDêU"·.‚#Þ´oëê€X@*´Пζd¢ŠŠ­(VuueÏ6Ч‹•é6lPà"½Tñ”kÖù“Íê%@ª*HÇ–"•1ÇÅõX—ö„ebÒárKX¼WkÔIu7Gk¨�ev1¬\æt·r@wø ³·g’Xáù}>ÏàH4»×Zc=ã´öÈ«B'ËöyÃÁ`A&>|áºP ­Ì]åú‘‡à¼Êy“uÚÛu€ïÛÇÀÒѼÿ]Å;ñ¶L ä«m?1msÜkØíxÌ ð{¢d‘…u Ñ‘{‘zšQOó`Oœ°ÀŸ¶<Á c]‰çþ|Û&æÛ :^ºÄª¹+P©ˆ<†‚¡l¯¸¸â™/DñÕ}Ç\ªw&ÿìÉGnžô+£Ç­Àß§ÓÙr±ÕÚmßyáÂ䦲è¨_¬ùÉžI‰zü5ï„P´ÀçÙnÊçƒhzn°ÏéW[çt°Â÷Øv‹¿ÝyÒòNˆ ˜­ÖVf|7‹™e]-_Í-c–Yï(»Ã|‡~o@/•yüFäSËŒ¼Ý‰ØÝ¡ïèêcêß¶tÕËôT¡Ä;„Ë#º&Âe¼åö9ÓV¯™5}µúŽÑ|ðî“§¾ÄS±wzÿ£SœÂëWïúùŠ[¶ÿ|û!]Oû;®ÃÜŠv 9+<b/ÝÇ7z»ØNØG?¬*ç±y­\™_­B¬^/{—=˜§Z6©wªwªž@ûÕ‡Ñsêv•Òf-cM¿S­’€=à‘k<òi&l ËçKx]\V6ÑPGP:XÊå,_’È>µ³\®5†šm,‹7ˆ øyŒ• ˜ûÝN¥Êl×êµr’‹§’þ RÉMry°$ kù‹²8…îË- ÚuÏ(°âOl{ÌÒî9{'­tK¼en‹÷ù-ÜråræëÚÛ•·3›Ì›ô›ä›¸]î]ñmÞmÑ]ömÁ]©]Žmm¡ÝÝ¡_¦~éØïÚë;æ;8jwµ;ÚËÃA»Ú(ãR™ –9’%]iÒùó°•绊Ünìù¶?Ô]¾«¦Kó%…•è—pG¼tý‹Ößu»”ëæ\¿nÝõ×ßÎOŸñ—_øÛ´Ù³oøøèѿ݀'Ì¿ã¶ùs×®Á]3ºfÖ´[oW¥·ÎØõÊïî]°-}tÁž7ÿÏ“s-Øp¯eƒpxaîj¤`Í:«ÿ"ÔêjWXÛuï(N†Tr§²9m­üdçdå,÷,~sr™{¿Ú¹ZI€´Q»K¾K»ßv@iuøLÍ{eF¿”âsçùî²êÎót6ñ¹´ÛTGAThÖuÝD`¡À`GTßhüÎÞüWâ/Ä?µõ[yUù#§$ëæL¿ù§3§ßÆLÜü寎ýC<%v‹ûÅë]áË(Üá÷B}ÇVXcAgd×Pðåôг¬î¬åmö»QêT#;(çÙLq~ÄdèÓ ÿV›,¥Ì™¢Z) %ý’½û%V€ß"ðlÊ…JšwHûë?ëú†=U–‚.uX‚2¯ÓÒŸí>ÛI™>5R9>-jã¡«_aˆâ/v÷hæ¢Ü¤•+ØÀƒØ8ÌóÆ'N¸á<oT+XPÑ?Ók1¶K*N©bž5óª«f¸mæÆqSÁÆÊår³Ý̸Í&•ƒY/ödï{âh b†ëæ›úZÊ¸Ž˜€Y[5·Àê"JÑ'É\ß—èÏóA"ðjýÞîO8é”IrŽu:ÃZo œ`V‰O[¢ež R‡—b6–ÍF8�§Fåw;£æÂy^ÏÍaç" r¢hή}Ýò¡ìuô—Õ¢ÓÊeÉ\È¡rÑý,X5�Ë´‰¿TѼ¼´—]ëáyO÷/Ï{/É3! ƒ` ã«Â …‚¡‚Œ°j탕ҮdÜ–"¬lXöí}O]‡˜!ºÙª¾]¨Œ#–iç•°ê3J1Ø¥”ƒã>M‘]Ò*<º‹uròI”À¬Òî „Ë™Ux4ÀÊíWiÄ­ Éf¢#nflAOYÔBaõ=àü'Ü'€óÔ’‹f⺘ZRîæƒ>·µœ=¦°~äVÍBµ)"ÄbF a_Vÿ~Çû ¦Ñc“ áT ¦‰g `,¨ —X&b]×T_¦äöë£Y‘gáE³¯isý5cçÜJ:«NÝ>È ËÊðÂw=ùÖßÅ@+Ù0°õšAƒZ¯ÅÏW÷·i“o™²4d•Ú&¥#3jFþvçêý#ÆðѰŸò¬^!î=îqXemËe[˜É aÛ•¨Ýû±²#Å»Y]>bM³*­a†C«eI=H£òPR–Hdôg;:ηuy„R°-Ùé·\3¡É4Ü ã²`ÿ4#/üii HÐŒ|øb¿´L¢ïììÔwÊH"Ú06jш'»{…©#ð²+jðv¼ã½-?ï—‰OÃîAï4TG•âW#㩦¶é"7núÀt|¸ø¯\,Öhbcä…¨×-t§<z£aoW—7Lr‚‡ÀˆE­�£¥�#92 ,Z‘»*ªøLö©Sßîïp ¼‘‹r!sÔ h=1:O2/:]Å®’¬Šþ,¾‘Õºüç-Ë&ŒÑ°^‰e£i4a¯5ÌiVÒ•¥*€¶²ù³y}PÅVW8N+øTWV$ÿ²ÄYW•2¦>s/П> Gí ûþrbçÖöÏߺgÃO–]xỦkx~T"èÇoŸýKó æM›¹ùÆÍ×ݸhêêIS'^÷Cµ×{£Ðž‡¯Zî¾aòi—ƒÒëèÞ¹±ÜK°S7ç&Èò$3Ù°À°Ú°Éð€s—á‰ô^çáôs–ãÁ É Í2׃L 5ë8娿0åÙÏËGŽfy†maË2û2ó¦èî䑤Bo•¢Œ_aÕÄÓb†ç; J; ÑàNwQšiK·-)ñ?k!œEІzŸAH×îG ÉiÙãÊ ?äá|Ñfgºwú³ïž;Ts½sªÙOåZLýN<‰‡|7p·Öi ÖÎØ¯JñS]º–ëÄž?ýIìáyí ¨ÇS©©ÄmX5x–ð„½ÝÜrÀ 5J ‰¹z…MÝîaó1 Ê{:4N¹“‹Ëã\ƒ¼û¥¿ðœü9N©óØ-œÕÈ#©&Xá4Vú4HgÍ&Éæg;²ç;/îygg¸†Øx*òà>-FfˆãË7¼Í"Cq¹a¼Ò7Àóí'Ÿö¤2–G’¡P¼Ñ¨oL†„ø#ü G®½ºå½ýæë6³ìû_vcX²Ñ‚‡]ï‹„â â­ï7z(Gy2âê`]ýÐݹ1‘òTœz-zEE]u½ »¼ŸÅ»P •©N·¢Ýñ}GF–¯þ;êgtYôJæä\¹/#d] ðWÒ]¥JÃÉSýõÝyXjwc¾m‰¾+ ÿ•N72Ô>Ih[Ò!vΓɮ çz+–ŽK\„Mò¾ÀüÿCÍñT0•˵$Cá$[ïJïéÄRw0àtƒNñ{ÆL(?È—ð?ˆ •‘Ĩ-â3UÕ±äˆã-±ôà€8øñQ‰h]w0 °š°š°ªEës-U©êl$wÙ ñ®ðgÙ.T¿ªÆÕAC»ïö-ÊËdH9.»Q+çô*Ì¡*!Sȸ8TŽ¿*Çå5!Ë¢Ò×éßÏgóJyrèž-²ƒ‚®Gau9¨J@ ]Î ™Kù‚á�3Uˆ…ƒ~Ñä )~À€‘ñ Ÿ]îü1OÏ_±Ü‚ÎéºÄ ›ù`  „|Dx QÙðl8&fÃÙánq0уzÿÊmå^FõèÜÜéÉéÉÖÖé[Ó«­[Ò¦M=á{Îz¼òHõaŸŽÏF„xÐh7 C­·cùÕæíñ/²ùàçžÃö£ ÖJku¸2\½¬bYÍn·L§Ð«åL’OI$BFE:µ¾JãL7PÞÑÝÑYª>Ò%¶ëJ ¹-Tu׌cC‘søŠœÃFÙIL—3v÷»,„–9ø˜Fm¬ûÓbñ¼x ú¾yÃeÀ•òúc•6¹$´qâáw;óu«žêòñaχ\â?ìN‹ÒŸÆã0ˆP<Çë-³Õξ+#äLʫƉ=ï,ž÷ÎÄ7pkZ•æoüiEÐÇÚãöŽAU:åeÉÆj®2=¨_<ÄE:…ÝÈéÕ¾2 Aå"µÍ]]º²ÒÍÕòHWiQWê³CõÝÙ×»;²úެIß IÉ¢ Þeƒ&u•ð©hS^¤=¦1þG5Å'úWjHdžþùRŽôÖ˜xuKØ\—INx% ŪíúÆDläW'*‡gD~³/õ^dPÞhÄ'îÆSüaZËw¯.ÉgüÕI€•`åG59¯Oßn#Ô&ÕÊmN§ò•IçfëxYU§ €N–(ô­·3 ü7*ιLiAöQñø¨ž_¤‚áĨ¿ý­¥<N2×cI¶üm³;BfVâÁ`ÔÛ½º ã.™¹æ–BWç*T¦ÖXkù¬Ø¬òe±eå²T8ä2:¥ oâ3‹µË:,GÓz¥A[ˆtÊ8Ó`œÏwçûn;ÀÜÆyÚ@O°øͲ`.”ã¢êhó`@`’1ˆâ×-‰€d’©` 1bíoÿ8õ@kÀêÚýrŽ“J­·OÙøÎXZCÏÚO^‹'M¡Ì?†LF¥+¨äkœWMÞõ ¬kÀœ¬kúunˆjh|h´"TÏ6óÍþV¾Õ¯ˆTðC‡qÈõ{mcöŽjØ“~2¶¢ºÓPY9rqµÃ€x(¯ç‡é€ë¥†é�’ïl¾Mÿm#Ù‚Ù6’bA¥lU± …x(üxI‰ ›¡¨Jf¡e­…:™žë–uJ:õ2mg·TÛ©—tNLgPÛÿÄ-),ñ%z'­{ÌtÁj@ 2¼“`xƒx�Tï”/— øñ¸†Añ_¨­™ÈfÁL5jÅ[Ç?þKchŸæsës„?z#àzÄw‘¥ú"€ëóðƒ0> ¼¸ÑxB|Á#BZ‡öùáË—+çR¼ªø/øGИ\L®’"²´»:XÁ”W…¼a¿ËjÒpf=´øÃ(#­wèÃ:sTÿ~gt }þ¢L)”Ó"•3 v‹V»›"ÓÿD<û¡'f¿{C*Œ¼õÖ„ºñË@"É‘û3ÞÚ’€ ñ×áß&þ1ÜK°†&´3·HÒ¤C^diJ¡PS•»*T‰+›*sÍîfÜÜÔœ›žq?z½à~!tYQ(èq7a߯Vµ÷ã:*ÃNV“Ošƒ@‰;dϹÜZy£ºÁ¥3 ÐÄrá¶¾±ºAÓ¯X—PåHÎR²ç;:ôŸê?í"iÇå0{ÚX 2Sß¹A¼´ý}¶†ªp’ ¨®4KL%p 2sßÓfÊwûøhÞekí[ü¬>–·œÖ%±„öUcƒ>YÚduëkb~ßîòŒw27}>ìî¾É!¸qJÏK1Šн›`ì=î0ð LùÞ¯¸ �ÓÐÑkÃ|?‡Ÿ×ÀEê+ùŸÄ%Ïúí1W‡åkäõ¾Þ:H# ä…Te…d`ƒP¡©tMúîÆÆŽ<9;)\ê€ó]*”‰u÷¥´zÔ@L8øãÁdÓwN$„U×r£"]€îSd™ËÙÆã*FT—LJøm09Z*ê"æ©å!¾ ­ÎÄýW:ˆ×©™ŒÍÙÓY”µ@NðŒ%Þ½“µ •¾nƒÛª*gï§6üÐGÖ>Bέúåê<kÌ+³GíASÐ7Ä5 šJS¥­Á@àîPÞÁ¨uÔlÑHÓäbðü¥ƒzT².¦×ƒô„ÍÈ­ßüò⸼ëKœîùxßK/íÛÿÂKÌX±KüžüÄŒÛÄÇzÔÿío÷vüÃÜ&õH9PóÔ\?ÜŽÂ8l ¼ÃªÈëÂþpp²l2»@¶€]-[Íʽ«ž³™t 9öIÕH¢ ¨¤ v™lQ¢;v€îHl—[‘ï¶Áä E{ÂtÅá˜ßÉç~èᇀ}bÚü ö­2ôBüÆ7ÝßÿóÎ(¦—-_º¬{5$ì+à/°¯¿þõqñ XS¬é]S=™O0¥‘,aNùŠrY²GË(â°ÖúÌ€2ÔÎw¤lŠ|µ¾:]qÚ <ç0—7ÆåÌ€º”<‚õJÿ�Nƒ*$šˆ¦ÌæˆÇìH5‘‘'·>]ôTœPl‰«…]vA=¦H[èšB—Ã_J¦ÕwJ h æ] 8ì — °±mEh‡l9H |çwoÞ¸áæút¬^<èFÊùúz¸¼wǃ•ƒFmþiYÔô*_ `I&%e_l5`=ço˜=köœî›ú$Á=.Áïw’Û®]ºÇ§‹¸Ä×½á@h˜”É•½bKïÛ\w B/çîÖmØàøYÃÖ†Žmú‡2€~½ÇÿËA{ëÚm8î8â7Ä"þdI•lƒÝQÏ5y“_Tª¾0‚MÞT™}î=Üt´Ù:`dvJv¶~–gVÕ¬º¦¶ežeUËêVÛV›–ë×ë7™îh¼ÃsG•yAfufS†Õ!W½ÝÑàÏHk"Q‹Ô%‹Z†ô¯"s5vží,ȘºÂal[Qï,ñ”Â..yÛBÅYjšØJúJe鈶O÷D‹ê89×öö’â’ ‹²P4ËÔªÀƒóÖþbæuÛÞ8Ùó|Í-£—?áç´‘`•[«årÕª—,{ìéƒß¿5ìž@2©ùÜ˜ŽŒ‹[‡Œ¼åº«¦iÍîÇîÛñ¦Ûë¶–eÞR„1K¶úæé#'èͶ'ïÙ÷šŸî±ÿ–�ŽgТÜ�—e@wsZŒ )’ºìlÚÕ®éHzòa!™ŠùÂî€Öh`RÁJ‘3cêÁ<Ì­‹ Me‰›ÈåŽó]òºKí½ìé,=ªKË´2Sá¼?]]e*ÜîØLÅ#@EÞPdÀñ—ÿŠñ&FÉÃììp«˜p8âa”â_wRÛ¯ç jûíÿÊj[¢¡ WG„À`}8ˆ¶`ŽzÉø+à`¿Þ¹Í°þ,º57ªÙÒìhµ´:fYf9–™—Ynr(Ê ‰,‡lùTÌ &K»_Ö‘:Z‹…@ îwyˈGt]om™ TÆÕµz]œ«”£¦ @%ùSCÁn£T &Gô¸,ÝfºÒ éÓxdŸŽQêûbnÄ-öÀ­#·¬«]øA:JÔkÏýéÔ?8cÉôèyÑìX¿æ§^dj¼Ñ‚hé9üÍ7ßüÀ@Û{ž;Iõ°[s©V=Žúô´°`»¬#x4êS¥, ðgƒ×Gä.Î2\ïÂ.Õp. {~¶’B[ß’€T ¬ªIôÀ¥Œl(‰XZ££µPOÏJAêÒcRÓ \¯¨ WØþ^©ÉÆ€§¢‰ô¸·¬O%cõ¸ÞˆUªÅíÞ «n`”ጼ@ŽP {;;7@^c[Bó¥tïÀýS°îz´)—}Á‡–/cü~©‹ÛYe{ÖÐÁ…ݾꔖq”ÅâX^ü %@B;ÂR="Õ@–^Zyªñ4ÕñéªÍHëS€Ü(CJÈ9ௌž“_¡zÈÅá/FV¯—Ãú%$!Åm¨OY³9¯\>K—O4µb†½>³žRØ<I·CñòŒ‡ËãÑZ<Èê‡Õ÷°ÓP›]qîE™ÕÑb6qÛÕ‚à³áæšh<¹�1Îg0:{ö²N_ ìÜ~¾Ûî5ÌÁžÑ½ÉÏ~êç=aO8à£+p[IuÞ¯sã¥üð¦!üĦqüú†u {uí†_ë~Ó¤4ex=ç÷4€JiG.›býùºHZ™®`�Q8åOg²¹&u¿5á)«Cl¿ú³ùüÙ¼>ÿ.Šm—õ†‚îÖ”@™¢©d�ùl F•žžÁ£>lË¢,är´ôn*žÝûés1‘<“†œŸ´Idų{Y7)zÒÂÄ n+\Äö©‡NÜwPPàW¥¯¾£üËq ~) ø»CB6aR~Ü©´¤«cÁn š_ÂS ãÄó•ÁD.Ú‹º“ƒÓáJñ[$VŽÇrF¬)`^þ°ønx^Â~qŒgý>^ š5ž.>ê">4ÆoÀ^‘w VÃ^U¢µ¹¸„¿‰g"<Ê€A«oÚ:4(/åõÙrsxtù(vh…k´yT…N9TWEy90¯óŸRñFù7…~øF À �—žZ¬�h(ñ¼ä2DOZ(zSð•ê+=¼®àlÎ++°8*oCM±ÔˆûÄÆF0Æ’Ÿ4D3Mü×?DrÃË7êŧèð:7ÉÔª§fèh|ȉy(l[ðBˆí¤ç7æÒÃRCm“Rãl·¤$Õå8‚Úeº[»[°g‚A‡eÔj%çÈøR&.£4ÙâiýÙóg;õ/¾Kôõ4ú?Ý%žî*¨g6ª˜¥ ¶ÂŸ­�JÜX¦- ú~¸(ôè5(_SYEoÉÒR ñÅ-¡ ¾U‰qHñˆ™Æ†F“±ç~C-ò3ZzîŽWÛLÎø¦Æ¦òBRÀæ ?·f\Ý{ÿŽÙ¥Ñ¤C-¾òf#öúÛ„ ~¼›Ù ¬ß†ês>µU§Bÿ-ûÚúߺ»N®²ê‰83q¦{RW©ì·Þ‚ئW¨ç;éu½ä´6\ƒ˜aûÜA¿[üÆ‹y±Æíº÷]ð9ݰKrŸ+Ì»~²¯öna?¦~—¾œÑ 3+•óÐ<Ì’ûQNË]îyyɽhIQb‡õl’H^GÈÎ,á8Áå ;%#TF¹+ªüþ¥YåŽ._kÿœŸ¬U†`¥_Ê/®–{”.ÕdâìaCéäžpÅAt ‹™õû<ÞƒÕ¾XÌ'žwûž}œÀ»Ü|Øõý"W8àvya »}M29Q"ç´ZÔ…‹`™×‡]¥2gt•a»ÛòY`t—ÜŸ+ð¨Ìâã3)4ñ ñïRµÂä“J±MÁÛ¬AÉñ1¹IiñpRl…FÎcQ•xšZ­!8ÐÛ%º¹Å­ˆE†œ`Ž~:CŽ-|÷á:qëŠĶ»³÷3îNöR£*´.7þÉ&É.ÉNËý²_JvËv‡~9`9ª|Î{Ü )s;ª4RÇQö£¬ØÚ­ø^ï»àþ(üþíØ™¸¡ÞxÜÈfâåUY å^¢c¤‘€©š(Üç;³Ç7z‡ÔÑ]<÷®+^¥ÐhÃ%Å™¨G¶‹n#VÛ•~—œå lsÍõ;-·æœ|ìKsîÿõ7ïׯèã²Ñ/zÝáž:x$34‰<ì Jñq£aî„æ 뇽1bôÞõ<­ÓË–ÞØš 5Œ=üŒØà‚A¿àÒÜÛÅ­“¸ÁO£sMׂ£A×@x Èþ HO@zR)´'Pৃ¼Ùy«ë#dA!Œ E yúÊoC©ÐУI `4ÒÉî¶èå(¤G!•£0ŠB_7<¬s¡$ ‚ÖAÆWCM¡¤F¤×BÏk ÏXèq5Êè»;::º‰}]„êEñ‹¾$Qºg�»¦ty�g â!‹„¼ìüâY‘…yhóÁÃ7=ûì¯j÷Í«Å/OÏ{(k²þZ—7[LÍÙˆ°ÝãÜtèžMGß}÷fíâÿî”Ø5¢eŒÓNŽB8䋃f ¬zà^p/V禬wmÑí<ªÛ¥ÝaÜxNw<p$¡”«d±î*ÕuªEªY®e®5ªGUϨv»z”Û÷A•á#.ö]ðíd³±ÙÚjlµîïȵf”áe­æˆ0ŽÜaž'΄/ߙ׋ù¶‚ë%`Üe÷MÂ%øGJ.†¨ª’^×n ƒ$ ‡‚+½aâC/?·uЪj“¯)äÄwö?ľ?ŽÜÁNãxoºåx(äÍ\}Ío~~ÿó¡ÚQ%x¯Úƒ­o¾‰mѹ ¬'àXp车q€c:ØIà˜�xò' ò‡!/<°†èAi� 8ª}„d !h)‡¼pM¸f\s®!DΚSZ!m…ô�àôÀžã§š,¹=Ã,< Á“_0ÂÈdt ô‹Ã¯ P?Z®< %èˆQ€dGÉù»x/LO .Ã0ê¹JȘ)�Ðv)6•üÂ/{-g«ÅÐxdÞó½XÿÚõ»ªÆWD…3g2“ûºÚ°ñг›6?mñŒm¹k~÷6 Š×x£¥~ØÁÁÎ~iãÁ_oÞtäXÁ`<‰=³ ç›F£9�ÏöÒ`Eûa}û¡ß1(Ë`Õ„ZyJ¿nÔŽnúŶPš&㻇¶ï ×Û�±f¨i…°dÐ~ Ûý°;ûባP>åãP>e%ÈY£!§�XG ¶£ PC¨y –°´�:Š«ÝÄ–€𔘌ÁK=(D%ÕOñ›å‡w-Çf·ÔÊYïÌŠÇþ/ÞÆÖÔ\]Ïlf“nÿêõÇðã÷>|kØåNÛ2•XvîlìEÇjÃëVÞwwÁn>zeƒÄ‹2hKSì~æéXñûräMv˜µê0²bêz‘=?�¬¬�Q À,kX7±Æ¢ðGýgl0š�©h^€`¤DZ”%Ç‚Ý`\z.HôR]Y Wêa‘ýÛSÁ†‹î“P`p_|͆ÝG…ž›H|`w4‹<ò‡O/(7d–ÌÀ3¢ñDXÜ»% /‚ÌÌ0äš>‘­òFì×ÝXâ@èy¸pº^\­gº©A_6Mzîš¡)Þ�a)äéSž€ü Hî†<ñň£j€† @ø¸àS ´›¢þð€àY„J ?2bÂé¿u“Cµ€kÄ{Oø†!HÐFÀœ 'À®‡ô8•Õ�Õ O ù8üŠ�%/à¯=ƒˆÇ»že¡äª… ó|9Ž5i ¡â/í9ÿÂ}"¹2ŒK}N×ýðårºÏ‚Â̈u{÷®»ýÉ'qÚå¯ýý†›æUœ‹ÝÛ~ÒoÛ´çþÙ}|ÔÖ§ûÁH$;ØÈÊ_»æ‰'Ö¬ÙÝ“¼{ybĨDÚ›ÒݵgÕÐÿzáÅžºúas ñÁêg»øfzµiàš@Þ½>Fìï `Y%T¨Ð÷Ðúäz~d&^]€§YJ‘~Ø/À ð7Áîd)äê�frèWMe,C_Üö‚| À.Ûš ×xºŸ´]åÉÐw,ôšˆêAþv’¾ŠgC…óÅKΈŠ78]bW€ £¬¹Œ/þ‡×f ¢úòêŠ.S3°ÈíNÏð-£üU*›ˆDÄoS|´.0öõ»1>%~+©æÍÑk5‰ ÍM'öŠ < <5ª[¾zãqñ:!"Qކ¸1’i€ëº¥)q�àÅb)R` rl€•e�ƒ`ýfÈù€ºƒ�I5”5�s)Õ_È©ÂTÈç Ó}ˆg.ô‹�Íç»ómô=‘"tŠ�"—ÞT9¿ÌC÷rwÎ þÒ;F)äúGBM9¡ÌçP Õ}!‰Åpæåh<Á!§—;qCmj¸h¸[ÃÉ:A$­ «‰¬÷ q9»“®7†V4E!SõÂŽÓU÷Q¨ÖN`†õ %º`mô–ÂÊÂÈR\³rºbŠƒ­u6¯?[”}§Í:»ä^³xXü#"»øª Yî¦HS?!˜kŠ`Ç_÷û»–̺Éý󟈫¦g"F ^PW>q‚ üp|Í@O儞îÜ˼áÒEc4öx;ÐQ#ú¶i`r †0tͰªVÈ…t'´ïD ôö§ ‚ a†n„v´“7{#0š x¼`cFˆ}�3Ð\Œ¦©„VòD<‘„Z)H" ƒÀÙ20v5ÕB—jÔ˜ ÙŽ³ Š×ìÙ,q•¦îä%’!GV”Àƒ)WMBÚ�(Nj 4Ò–$0‚Á…SºÂYO'±ÙåäŠ\¨ü5×*˜¥¥—-´X‡ñg=ø _Ö.DR£ÒÑqÙ¨ð‚ÓƒyÞ›ˆa]82ݤŠÎÈÞ‡W‹'¤ÿNDA|¯ÏEÒ%˜h,VSOÅ×Z¿Íãñû• #©J¬g‘+ïÔ˜püã°Gä u'šØäH’¯1È�®%Ê+КZdÐDè£z¡žRî 5 Ôó3ßVxcÏX°)¡]aþ^AdLàÀôLTÀ#`yõÀ~R=À%€°,ÜæÂˆÒU 'j{ÝÏ@ߺ —5ÍGÛ`wï‡9mEý)ß3tÂÞ\» hI ³îÒ´‚Ò PpëzØ=„*�rÿd^ŒpèùØLxf0à'ì/è£!4¢Ù–C¢°f m-hüVda%à†ž"§h,F€yCDJNÏ ×Lˆ§@_š=TˆHõë µJSàùñ0"¡RG¬­1Äᥣ£3«'Wòú®Ž’ÇV逦ä6)ÕHù|V¤.r%#·ðj×eŒœ``?l(yQVü§tÇd»L8PôeÏUô1ÞØ/ꬉ{›’-ÎPcÌŸ¾J5›C*"‘¼…‰Nm2Ù»qèÚ•úþ±``U$Ì$7ϼm±8¼eèÆ{G·Œ¯ªì9GdA q3k}‘@ÀJÄúõиïDÁDNW¢"ÿXö[z£ià¡ø€v8ºK?ý4$1ì§v3{a)Êà ª•@,\+ШêÈ®i``Iª‚”,RB]A,Ý)Ð{<ô';§:�‘ÄfĵÐ^Ie1ñø·Âø‘Ç—Hc††?ø¥qÑ™ âkƱTjÚEqœjü ŒÕƒ4žóHãàcÕÑ(HcÙo55—„±À{bÄe¬$Œc²°êI`Ã,eQ߀Á¹Jô‘Nú‘å;ÝÛöfY³ªEÒ‚[e­ªÉ’Éø€á€imæ¸á¸é¨í¨FÏFÔ³ã8;=íºè#p©Ý‰Å_´%˜9;OÞ±ãTžyR|ÿ‹ÏÅ÷qðóÏqhéË>xêÔƒÛ‹'½+~…õヒuâWT':ñ:Љ#�ó¿4½7A�Ý× ºo‚�º¯¨'v@ˆj]6àNZŠ2¨ûjS€'^¤<±žÈ@ª†° j¾ƒýo»¶xÀdH'Cºì½€7G!=©øFÆ4À˜ràtº"/$</¿ê‡Ñöˆtñ¿0C;±²¯FUÄßh¿%\zSßÙQ´dõE¯#z4õŸ)³€#¨ð2¢ptg}‡RâÐH´b°É4¸"Ùîq6ï¹îU¬íE¯Ì?Ôˆ«7:¼qãÁgzQ0(ø‚ ãrZBtfËô!CįΜ[†0ÏlºëÙƒ6$0 0ßBíJô~Óµ`Ð/aõO�$ˆÅùäC^ œ×{à¦2‚̈́Ȍ$µrõ(ˆ‰üU@Þ pNÌõ�s7qûž«,Ú¶Jjß�Îwá1ÐfÈiìì@%ìJÆuC‰Ètr¦.žÄ�Î!t-å&°p«è©xþˆÌŽK_’â‹§—WèÃÝ7mzöÙMw?Ã,íhÁ)±ë~?u÷§çÁH83ÈDΨ"âT(ƯÜõô³îzöP÷ÓxËñÔ°nÈé³?ñýð5ìAÐ'Ð^1ZHüÙ€×ÅѺ¦Ñ^ã\”Ó¡ÞÒ³‘(Î.á÷6€ÄnG °PKð”`©öGWÄÓnš;UP— z1q¯¦â¤èqêOw–‚Ìÿ/¨xÑ–1I4âž›„H4þtóô´épº®ûÃʉ7Öð¶…ñÑ¿š·ù¢JL´C‹ùÀÊeÃêBuýÝ 3<Ôûgƒµçðä¦ûÑP ¦!°ŠñŽƒt3péÛÓn‡uÜ0Ù{½påàå?ƒ>CûVª8!¸Ð.hßíÛ ýh�°sàʯ ßÐï è÷ôÛOi]ÐKþ•V7�V—ApBp>ÆP;`âÀºÀŽ`£(ÞC|{@ ¨`l#ÌH;…³ ö§­ž«a¯à19èÿ<a‡]ëmo£Åˆ¼eÀAK褕ð à2äìBEuà,´§è¸ØÍÙèQøÕg ¼@÷—ÚIA-‚Ö&êe’o£æMáƒܶtç;;ÛÈÙ¥>䲿Jç’’{'Uÿ¯tõ–^öùj*âCQ»^Û=sþm×ßZóú»o=?ê1NÕßãç}OÂk®ºùê©KW¼üæ‹gÔÝ=?5BÃ%µ~CuÓ¸!Cï¹óŽŸÇ…lvyUª"`ÌÄ¯É ¨æ$wn¾óq‹ÃfËP:˜ÐÛÅÍàŽDkªK\ƒ–A¸Â6ºWÃnÀr9@•hZR€G Œ¨Öõ=´x¡®jÂôT HË¡ömØÅ0Èö�•ˆžÅ�Ê)È‘3#ÔcýÙ60ÈkÆ—ø·5‚ÁP8%ºä*¡ïS+Ö¾7å Fu@~%‡Rve&‹‰ ®½~²èq ™†^þ¨`6ˆ…+¯]~v–lFñÐî¹ó#n>c‚-#Ófyñh�¾çLU<šøYÕ°ÞNÙÁªö5|$Ü‘Ìϵ^À¡Œrb?¬[`H"-ð ?@œ£ Öœ AÎ ðÑn_Ô]Ë)ßQÑs$)µ¨ÇCëÊq / tË·%o4v.ê¨}:Q‹ˆ§ö%jiñößÐ4Ô‚=zi3^8éÂ]„@8öNØ[ž‰ÓsˆiFîÙciÎ ÑN¼ä§Ë6ÎÅópÏõŒõ…ˆÑÐ<¢æ™gño‰”s¥)D{?àx…Ñ/šà :°9C@£z¯RÀ ÕXŠ46$h�Zä¬' ðA¹²–¤Xjg³j zbw,É‹N,ÆÒ]·ÌCb´6>˜ã¥uaØŽÁÔ‘%|å]·éwe!HöÐ@°Ä±½.œÂæGU‡ëpU$’h92©xÊÁRIï"¾žUÌÞ¨à%g\=B ï«¥öT'Àå-€K=:Û4�$µ ö˜è¶Í#ŸVƒ5�g\T†}¹€SOO_½*@N;�rz¥ˆÕ@íÛÐOF=XœÐ›ÜWÕÃsä,,Oh@~×ÃèQt=P9†œ rjD|bȇ¶ pÌœNÛêJ>F�€‘Ù!­€¿Jä„ÑøÊ •“ß”P#¼ úyªy»ÈˆŒ³ ÈlÎ+üÜeÅG˜ik•‘H0¢ÿD a¬ª[ †¤¯þ©µªˆŒêoÝcN+±Úë fÿª„`L‹»ÅPØÎ2çxÁô ö�'ázöá#a§1¼Ñˆ'èû˜©"È6�½ö`^6m5ùj# ÉrHW‚<¸Â°Dïì»êî§¡ä×@M�9âúOÎI²Öƒ}9ÒæC~´®‚t„T°£ƒhO=Õ`ÓÐî%7¹˜œ£Ûa›`LmÑ‚";­#þ/P烞9ó¬Q ±$Ñj ¡ì‚Ø%Ò”Ç@˜¥}›<Ú:Îwè?%!…÷®pÈ)‡ÅFYþ¢‹Í`J/áÇýfèq9j)¸à6òÄ@Š gÁô)}®ÔVAè«Ï)çJ¯â[qÅ«}×§Új~ä^v…µ&àMîlm¦JìôDª̸Yü­¶>Y1ìLu¦¦RþÞKmuºs^![ãÿЧ*ñtËëUÙt¬¶{sÈôG<!?‰«¼Ô0öß~›Á ˆïˆBÐîòáoé» Ÿo|I¡“MY�†¥ÙæÐ]%ghij¯ „2èÇo+ìq¤ÏJSnF$ ¢l‰‡M�_ 5&¨6ã¤9°aÿ:€É}z)+èÑEŸ5}ðd<]q#™Ôzé– N=ìò"ä¯|k�ÿ{ÎWún㌯Œ bE*$çï£ÐVK9 ›…Á•áºï¢B¢¶žIµk<€y£žcˆ«ð@ ¿Â]Ô+@{j€¥€™¦™ˆÌzp|r*3V>›~ùÒ ÁÁTd†PÐ?w@~GQ×ÜùÂýœ n†`‚`„œr Í ©Ò0¤QH¯‡TFí¢™#úŒ8¬zù MAÊ‘<ùr´I€Î5ô$œ§I ¼”œvó°† äå@ ª�%FÈ­ ùlA]ÖòÝDI!L=Œ Á0µIН-¤)\úndé’/y]äx3þàë¯ØóDm½£œiä´nÐ0Æ6dh2¹¹r\E$²7)”'œér¦¡b<ØD¢BEÖ=<^ø˜SÜÄ’è okJ'ñ‚ÎáƒǨ’¡w™NXy¢c[�gÉMžb VðT£ä¨ƒ²;µ;Á8t#@Yš¶hsÙó� cÁ#§ƒ¼›O¿Sr§µÑFÑ—ÄèwŠK-~äÜÐ÷}…€žÓÐ0ÎYcõû„òØþ× ~—WçÚ{÷þhr‚A9 3ŸñnÞ»mî-˪‡øÃû>_¶|ºUÛ[ÎÊ¿]ùÙÁ?XÅbuË [Ÿ¼ûrxdÐ`ÿ•?÷ÑÛ"ÂÙÉɵ‹Þšè½9‘ÒqX{Y!v4‚�|:à© @…œŽ9`…‰ "«…ø)aÒv(7õâcÓW芟Í*¢„­äüEo†â'µˆ˜C³¯NÔjÊÆÅbûï~Ü«÷¹½>•ùàÆýñø8£¼)}5>ãÞ¼wëüá*¹°pೕ/û¥œ"àóG¤ ç?½ìó}‚S3ŒjÈÂm»·À Ö1ˆÁt‚.æÌ©¯+Xéë~e…~4ß Pš~¾„ëÓÀÁ†/¸ñ¬;4{¶tÁî8<køÅ æ-:»ƒQ;Üp¯â> ûÞ·ñj bxà‡uM&ê±€©î£Æ°ÔJ—äþOuz*É7 ТŸ $HTäc%2‘ 釔Ùf7qoYøÂh£Ûam´YAçü3s‚}•;;RV5eè™d‚êâAz¢b‚½&çëJjÕ¸‹£À)È™Ke±oˆzS¸¡·(ˆ/>Cžà¨ä–ŽÜXÂCœF•än¨³tëM-³…¯è¥W©ðÕ¯ŠâþþçvšÌl?¨ÒrÌûr½\"gqZƒ±¨‡ê§Õ:–ý³B¯”Ȧ ó™K§”±j>¥Ó2Œ…3(å V¼ñGµœRJÎ.0;ÙO¸Ç Ý¢ÕMDäÇék€ú%›¸�rþ£˜S{‚ïû¹¡Î«/§·H¥'J0õ÷C«…B'KárÑ 2¿”Ã^ö¥œÿÜ0Cfv<­Ô�¤F#“Õªaiø+™ jáÏI jF*¯Ñh1æVºt*9¬_lÐh0k–èœJ‚·ý¨`Uú<6„'žÿîÿ\§kü's–ü{ýµáRÚû¶è– Én*ðÅÏjKå"t–> ‡I×÷µ”þMäΠ9„3ÜFÎÁAØ å.„òøqH?+ôÁ¤¤| Â!OêÑÅðj¡?}¶¹8þ@ßsgzEH[!Œ.ŒOë§û‘òIä¹aê ¨!ðF@˜�¡–â3ý h!0ÆAY˜™?Y´õvAùÎâoL+ŽCætÂz³ ì…ð„¹ŽçIò“Šs]œ×¡âód~Qè× éØâ\_ßsZmoCúg�Î~ø;‰¾ÂYüSüFËÔ3“˜»™¯Øfö,7G"—Ü&锎•þMÖ*Û(ë×Êo‘ÿAѨøƒr¬òªfÕŸÔs5rÍ#šNí]w‹>¨?¨ svãŸL“Lï›'˜Ï[~omµžþ<Âví][§ýfGÌq lJÙ·ÎÛ]C\Ü‹Ý÷œðš}JßI^ÍŸößæƒ\p{(:þ©ð@¤1r!z[Lë[gâ÷PL™ú¼ ݼn”ƒ<’}ŽWo^0PWŸ¤DÏl¾æÚaã‡Ä-Z~Ó¼Ù7!¦€`âV´âß~ }"ý®ŒhSÔ¬-j¢FªßXˆã3P¯ƒÚ. iOQ?Ë8_¨ŸœõÇ€êÉýk9HÉ4ð�âD^–S ªEuäÅLÔˆú}2�‘³¶ #ÝŽ¼4=@-h$…F£«ÀV¹,°kP+º–|ÚM€ÙMB“ÑÔ†¦‚3;ëhS/sn"Þ8G|kp$BÜÆõäþ×¡ç ®¥554_ c°¸ =�q%­¯ õY4 â4­IÒ8ƒJpŒ–¢�{¤OÄ͇éo†hkÆ:ª{.ì£u$ÏbêûšŠ V%ÁnÚäYì„U³¸Œæô ;¶Ñߵђ½DKfZ2Ñß7ÌXlÀzô=´h ɳXGój«h¬Ä Ø/ Y`TßÀK ÕCI†þŒ$´™z<þsÅ~-±4f(D1Ñ`�Í`¨êµ€$%}zè žHmÕz‹×Mõhû÷è_èVhÿž–HžZ4Büúmƒ–ïhËwèEߢÂ>Kh ñmP÷OtÆ“Ðý³©ðˆƒ::WÚÆÒ<‹¾¢7ŽÿEÇëB_NK %%’gQ'ú0Z)©ûú;íñZú;íñµÏ>G{!þ °—…'>úÐ'Yš'²îúÛôÉiü7‚aè¯4ÿ´³èCšÿ ÿLã?Q¯¤sè"çhÝ)DÞ£-ïÒšw�Ë› ýZ:Kã· {)Ù’gÑ[´åM¿AÏÿ@G9Có¯Óú×Ðïés¯ÑÒïés¯¢ßA? ¤¤îwô™WÐiZwš–NLGyB!èeô[Úò2½ë}¹—ìÒo‹ëÿ-íýç$zÝ u'‹%ÒïythXB[XˆÉnž€QÃPGZXˆÉ^’/®û8p,-—ßÐÑ~Mãct]@ÿÅ~GiíÑÞ7aRÂ^vˆÎá0m9Lçp=KçpˆÎáóè ótÏÒ9,®é ɳ`šE n&1zšîé¯èÈOÑø—4>@1bÍ?Iã½4Þž tJc=Nã_�·cÑcèQ %ð%y=BŸy=D1ã!ºö`Ñ 1‹¶Óø~Ú² x}=´l£ãm¥†?§í÷¡{)NßK±y õƸm.-”P ɳ� Ò{7Òxº zK %¿p}òNÚò3ŠÙë)NÜÖÑ9­£-·Óx-Ì…¸ÇCkÐOñ0Zpaiž{<3w%}bZNç¿‚––Óç—Ðü4^ˆn�I$´J$ϯ“–ùH„ýgÑ<4—Zóè®Ì¥·ž×Ós®9 3È>Î!Ü Í¦¿: d é=‹îÂL4 &”Œ8ƒBo:Èr£1Z¯Ó¨×õT˜7Áü6Šå“‹ãN¦OM¢üf"ÍO(Ž>Bv<ÈHÂÇÓ¶qô÷¯-ö¸–ÖµÒÙ^CócAN’ýKKWÓÆÐühŠí£èó#iÜò”‰IZ‡¹”ä‡Rž0„ò¬Á´fåb‹cس@dìì+YEŽ>? X@GèO×ÔÆtœ×ӏޯµ�c;<QK!YSü…êÑSMq®’ŽUA{giœ¡qš>‘¢ï9”Ó*o¡Lâ8c´O”Þ EŠ8¡k(­„I¯¦€‘ßRÿ4 ¤ýé’HýlEz;'Ò·)Hì¥ÉCobÁ¤Xá(² Ñê\´Ÿ“ú¼I %¥2JóŽâ/P Móij™ä­4¦Ò™Z|DB)' ^û„ÚôÞä ƒ#¡¤£+#y–¾KBV¦¡O«‘ŠR•Û�{Œ-¡1ÑËDêUè/£0Rj‘ç.¡€£3£òtÁ2jeé×íë7ãøÿÃÿÐÿ[Ó%ÿ;ƒÿ d§ÿ endstream endobj 111 0 obj 18177 endobj 112 0 obj << /Type /FontDescriptor /Ascent 754 /CapHeight 0 /Descent -246 /Flags 32 /FontBBox [ -164 -410 744 876 ] /FontName /DSUHWF+Courier /ItalicAngle 0 /StemV 0 /MaxWidth 823 /FontFile2 110 0 R >> endobj 113 0 obj [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] endobj 25 0 obj << /Type /Font /Subtype /TrueType /BaseFont /DSUHWF+Courier /FontDescriptor 112 0 R /Widths 113 0 R /FirstChar 32 /LastChar 211 /Encoding /MacRomanEncoding >> endobj 114 0 obj << /Length 115 0 R /Length1 8368 /Filter /FlateDecode >> stream xÚÅ9 tTU–÷½¿Ö’ÔžZ²TýT%••‚’”„ä $$J4!#‚Ä(›¢€@P§e‘fFiTÄî"8PhÛÃÄØØ,Ý(ÚØi5Ú46±™J¨_sU@ìqΜ9gΙÿëýû¶ÿîúî½ï�ÐÃj`@n]ØÒ±pâ?®Áž�ÄÜÚ¹Ô3ï­¬¿býS�f弎»–mì²�p³±}÷‚eóº 7þ@Ü�`µ·µÌþæèN€ä\£¨;ôﲃØîÀ¶¯}áÒ‡žX®scûl?´`QkK•±BHÑc»laËCâm̰}+¶=÷µ,l ÿE÷¶`Ûß±èþ¥4.ƶúþKÚ:Ú¦×ý¶óöPùQ9ÂÃÿx‘aH|°ð£ÑênLÐCB¢Á`Bþ,V[ØNW2¤ÀÿÏ•ú¿~ƒ;&®ò¹mÊŽWˆöaùƒ •Ñ‹Ü)ÐF#Ѧ¥‘®–þ!b…Ÿƒ�‡àa`á=ØK4à…R�¿'©$>þ�l‚çñYçÉeÐÀ$ çÁcðÏð\´: ïó„”ÀÑÑw¢ßÂxè‚^" I†�¬Ç{ì$z:'ºp+<ˆÖøüú¢ÝÑ¿àúEð91‘�;6ú1Pà°'a/"ñ’rGôsìw ³ao´&Ú‰ï]ÄY¨…ˆí3â&™$—ì Ÿ0ÑÕѧ·› ­x/„Ga;ì„Wc³æ°)œ ׯ„)8öîƒóp *›Œ'ј¿0_±cÙÑ^¤c&âk†çƒRñ‘™d.é ¯’×È[ä2-¦-Lù€í`w!m3aì‚7á(œ†á ÀUˆi*#SÉ òOøÞéhÚDWÑ'h½ÈŒb>av·Ž{#ÊF?ˆ^EšÓ ÆÂ$˜ І÷<¸€G`-`쇷Ú~è'Zb$2ŠL"·‘;Ƚd<M^ ¯“ÈYrŽ|ÔY¨›zi€v"¾ÇèFú*í¦‡é�cb–2«˜#Ì'ÌeÖÆ6±Gðîçò¹¥| ?E˜®<£ôG󣛣;P/Ixû ò¡Œ°(Å…°5¹e¶^€WàgÐ ÝÑ!„^xéú .ÂÔX Þ) %d™Ž. É#d;R¸—D*ß oÀr† á­€“jh>½ƒ¶Ðexï€íôtL>zFb²˜|f 3#ú7æUf?s‰Í`og³+Ø.v;û—Âãfq·sÜî wœûw‘äSùõü üküiA …í‚BÒ‘É€×à—hu[™lû`Y‹Z­‡h½ð6 Á·pöTPU›™Ñ]Žn@m¾ ÿʬ„Rxšþ˜þ(ZμÌhHAô ®5RÎÉÎògfø¼é’Ç–š’ìr:ìI6«Ål2ô:­FxŽe(¼*ïÄfO(³9Äfz««óÕ¶·;Znêhy°kâ÷ç„<ͱižïÏ”q漿›)ÇgÊ7f£§Jóó<U^Oèd¥×&·OoÀú“•ÞFOh V¯‰Õ7Çê X—$|ÁSåh¯ô„H³§*4±³½«ª¹—;,£ËÑæçÁa�têÂ!˜Ð²ªÝ@Qry+«BNoelŒÉ¨j™š6½¡ª2Y’óóBdB«wN¼ãC†Üá×Õ÷<8µ®qççÝ£Ò›ôs½s7…e˜Ó¬ÖZf7„˜–ÆmVq˜rCvoeȾüsÇwÍ뵪'n ÑŒ‰-m]Q4›ªãÍfµÕò¶¦Ìðà²t]cCˆ¬kŒ£=ÎE›·Jíižï i¼ã½í]ó›Qæ0­¡Û%»ª¼Í•!¨kèvÊÎX#?ï°ãá± åp~E~… ÇJއãðÏkâýïÑÅæõ~ŠpJÝ ¹“w2’ò´zÔu½Hk‰úh+®Öœ†W#A.ïAz&„(š“â2&·„VÏ&£¥½r˜¸ù•ݧKå¡y|#Îoî2Þ‚hp¾ÑëéúP³Þ¿~¿§e¸‡Ï0~ jUÕÿ ÂñëõΘ`Tto»ª¾Îªá¶×QuS¶±³2?‚1 �îÙÌD(“%ŽOÅ}Á © h96•a¨Kà ©œ¢f¯´ Ô‘›[;XZ)­5^.­1FJ¡¼4Rª–Q#G›$“ËvwøÚI®çjY˜­úY<ä7)­´ë L”³ýL¦ñAú q=]oäY“ÁbuZ ,g¹Os5À=ÇQÎe³Ú>Æ&û�Qk/×,¾1ƒAãY(/5’4™-EåÄÎ ¼ÉjOro¦?sLÓcÕ3&½°©`†gÔÃãþå§3ç2£IÞK÷Ï¡Ê/+§z_ŒœïøäÌÕˆJ 驉ÑS(;Ì&Åf·»Ì ¢EÃÜ—pUã¼ýà ŠÚ¬­j«<WÃvt' o Þ¢b³©ÐŸ £ÉÆ©lª­štzma£JÀŽ+—”/•ÓʯÖÐòåvBHAïK‘?w þ�y.¤ªÜ%Ù é qqýØíd¹¤UU1Ÿm2"²ÀÀ¨‘É$hY¤‡ö(—pÒjdàç˜0)[H£åvÒ¡¾Ü!=×QM$F-”× /°š”wIŽò»¸ÞåèGl÷èÀÈvâΘ’„bC±¥Ä6%¡ÒPi™jÛn;dyÝö+Ë1[‚fðÐɳ<ÿÿŽe;GeS·&Q·&qÑ:ÒJ;¬«­›­Ï[CÖSÖ¯¬‚Õ9ÉQkììu¼ß´ølÍ€q�ÊÊ‘X²¸‰,óèóc¦77J“Jj2š%ÒZ÷È#S§>òH9×߯\P.ô÷9©\!š«„¿vM¹J”åʳx¯Äˆq7ÞÇlì)ÌGn/$@œ–Í9š@NhX½^w�4%ýH}³>¤gõ†I‰qªÎž@’ÊO"IM–1Eű{ŒjÇO­/ª/ʰ蔘ó=¼ÞôWø-Wë™óˆý-+qûA‚ r‹`%l²²Ḛ̀©N’ä˜GšÙ9üÝ®md Ýîz‰èÀit:Ǥ°)N–²i­láÒvIú´–I$Ýï&4±Õ°Ò½Ç(‘iµ´Yz^ I§¤¯$AòNJÿN‚ƒhÿƒ&{Ê#åc…4Ù´_§½Å)ð‚„u©€µY4ÑD"H6©²|ÜŸÞ¾¥qÞ]’9å‚Pº„xÏcsùæ%÷NM¦Ë®¹w>úôOŸw×âÙË[J–^òûè{»V͘7ýÖÊü¡ø.Šö!ßÛÀwÊI‰Ã.³ÙlIHì±hd»=Õ¼ËÀb(›);95ÁTb1'�¿Æex %–¸öxÒ'IÆZ••³5g#h ênÆÍ<€&a"ÁÁ^²~Dî*ãÛ¸»ÓÈè‚ÌdX|9­rRºÏOêLͳç/j¿¯0sBzæ1îÈÏ Çg”5¾FôŠ¢D«\6µMm[/z6ÁQ‰Ë%å­ÜDû¥?ÿZéýäDÌþûØ.Œg<´ÿÉ·&Üš7;av[œ9ËBóLZje‡#Ío’³9•Ó´ú„Ey+¹Eɶ³úEÉ{Œé#ÓiGúêôÍéϧ‡ÒO¥•.¤˜”ÓV ª«ölMäsã�ª µ5Är94'U÷Mô6‚.$Ælrn¶Y©×ãÏ4¢NÕŽ$;¹óá–»®¼}rÉmäéäM›Æzôcž¸ý߯\Š*_>Ö–è¬.ûõǾ2úgþaÉ#ëó*ž¦K¼9•;ë_.¿E¹zâ¸rìó$ù¥öÃ+îYýÛ}¨K<y°%¨ËDôú¾$jc®p èw%°‚^‡j~•p?¼lÄ-COé‰Þ8Ép“Æy*UFOžÚ$³Å\,Y$¶D>[3nŽòaÂüÓüH>Ë.WÞÜ·^Y¾Š<N^$ÜÝxþcTüÜËw(hÑ}$ßÛN‰ŸËÒ–ðÅšj¾]ûv»ßÁla·ó{™Ù—ù0 kß!ïh?d>ÔÚˆÀóDZ"pÔªÕf˜±iå¸ 3Ž bâ¡Z&z¼FËp¢.½¤NËò\˜X»5 EpPëÔ·=°Ä‘ÛYktÔD‚Aü™‚Θït Ü^ZS^Zj⸘}N™Þb$‡ØÞÆõ#à v0½&³'‚륥–¸¢‰¤Ãä[ÂäY"4@:ïÙT«tßùlžòKú:æÚ•dúÕ2ÕAÇ$2;z†[Á]ij‡–ÊÙ³´ÏψÌ´1¹!uû ÙÈý‹µ›=¤ý{T×Gÿ`ýØÑŸüÃhìu‰¢K_áfs…KãN*¶‹Åî4Á%ŠÓœéYéÕúx|À^c ¼?PÝr©º qŠÍè=<ö$»”©Z%µYÑTÑ%$Õ,Éìß¾F’ÈÒ}w ʉ´Àm/¾ÜsòŸ:3à&£²”CJTé9xnfg½{ppc×ü¢fåoß|se~pÉß”÷Nœ$mŒ y܉ú_Üj0þÌ 4Aô ~}ƒy¾yûÓÅv™·3ÛÙíæW™šcÓä ‘Š|±Ñå$6§Ã&žR]ýõ`‡Ì¨¾|à: Ä$Äýa2’d¶šä(Ié«<ùÞ›wü¤¹¦¤óy¥;²Ž®`{®•éÜýÙß”´Ñî‹ÂR¥ï„2€ô©±òE¤•b]‡Þâ69ÏÇøØÑÌhv3)‡R ©Ðk)_¡õìN½F7Up%>CãLH “Ô›¨T³¦šAsðl@uà¥ÕïÅöÆçá;›°Ÿ\¤'"…ÌÈ¡Ýl0r}S9er%Fî]”»Ÿ;‚²+–íBËj˜ ‘ï$.#"b­.LRñ+7#V3§a”–w²¶H*]Y¦ü†;¢D”W£ÙŠ<¯ED1%a€Å3•‰¥”ˆ,;ˆ… âäø×ÉȘýˆ1Ä“#ä«­^´ŸT~C žåzR¯Ó¼à [6�¥œÈ¸šN^ø>­µF5k‰”_§r')¤}C—¸ž¡IÊ•ÿÛ�ø,\Ë GäÍDQÙ’D§&üb®ÆgÊ1 cÄRM‰y>´™–Á¦ð¸il5½ /™ŽÂñM 'j5I¢Cà f—àÒÚÍéà5Ìã„rm¹y¹ù°æ ù¨9Ñ ´TkÀ Q.Q ŒY+0‰& ‰"#ZQ”eüÔlHHôœ–:z¸ÓøÑGŽH©q8 +ÅÙŒázNÀhq\ó…EcÐAX“l*»„]HÞP>£ÊÊʪ|F޽šL3Ÿçþ$g(—ý ç'¹×’QËTÛDYp•ÜÛh Z˜%D:‹RÊ DÈ1BÑ jBE^Ôj /R?çÒã>Ó8uú#Rݲ›­#–]£þJãþŽE_g\¿ª7–I$Fþ¶‘ t q+'"/!sŠ!–»ZÆÚ‡¾@"ÐZÚÐwý}—Ôv²?IŸdvZ®m.Ž«H±3º ƒ&…§X’]ib±Å™šÖ/]ø;Ÿ4ì‘TÜ>ó˜BóAæÑ>ùcÜ=™ÓæÌ¡C}}‡hOÿ¥WéÝóé§{H))ÝÓ)ûˆ$~û 1(—¾ýV¹´üô¾}§É“dËñ}ûŽ+÷2zUv»Qv:´#OerÊ6²§zÜN‰LŽõ‹Ô¹lLBF"~`ÇÜÓc'Ó‹Âx¬7fµ˜ª0}Ë¢úÜ —‘QÊ7_+G•ßÐÇ>ÁmÔ<G©¿ù0ò%×sö"\§e1Ò¢…hs<Þd‡ó[2sI…œlêOS=éÞžÎÛ“g]yàÏÈrææ…IÚßSv¶7Ò‹†† UÕÏ®0WD:‡"zõ¢${±Yy!¤<AÙmª³$N?9EšÚ g7ÌýÞ[F–Ì_>o¦¨ÏS^MäõhV­”å4=Íö(K9+áŠL¬,Ù0ëžã9ÙÛ~ÒÚæ &gŒJ+«Øøä‘_ÆbÚÌh—ˆv1°[ž/IÈtꜻdÏœ§oK¸'ýó|]¶1Û–åÊôßb+q¶³}d{/ï‚åBÒ·–«IßæÁ¤Kw¸3ìbFz¢ŽuŒx?×ñ~JEÀʰ¹š€ckÀdŸ*nÍrr™fAÑçÈQ1ùÜzƒ1üÎÈÔL4¾1Õàe8~`Ð=,¬�Q—…€J‰¼-vèLR?,aL„1„¬HÌžrpa売¼q繆-ÄCì_É¢ò¡¸ úÞŸš˜ÿceÏ̵Êqåœò©rN'GÛ îpŒX59ËŸæ-7ï÷¿"ü• ëJ2šë§ú]ÞqYÚß>¦|M„slú< ýçq”¤�%²žð9eE º“†nš9Mƒ¬áñ”~DRó•ÙÁH䯉U=Ÿ“aŸÏW&)Ç”*®GšÀ¾I85£~Ôï�6H‚Ñrrj™¯0i’’lÚâ—ƒÛœvÇw>#.Fs0.ÄÒ˜¯¶K QXã;u ÙI‚¾’_¼Qâ#ÁÉ”G•G7N¦Ó¹žkÛ'®\9q;Óu­óš¯¾ZséŠÇ¶�HÊ(o6ÃÌñ\!fìâŽ%@*Šªç&¦nÙÄtu ÿ%“ÎãâN ½·¾æzG1a£?Á¡˜¤ØÍ YÑ(+‰d2‘UŒÎnWŒFiø›‰Ž0òŽÚÎlƒ-ìN~»–Ö±›ø ÚÇuœ—ËÑâÆéºt›¹çt/p{u¸×uoqÇtg¸sÜÎø8·QGOqý:Ê9XŽGN«<ÇòfAt­0©Å$Wç�2Ì„Љ, i­VC0ùy¥ ãtŒ aˆšãjž%N½* g\q)Ô½ÆÞØw 5Åù†Ò¸\ÐüësEU Ë{Fî¿kpë7ÃÇøÅMÙDC¤øõÊÒ§Œ#DÀsç\¬õ+]Êyz‘žV$Ò F8re"§ØNº#F*æMê÷õûÅ¿IwOŠ}üÀ$  ~º`ðìDZ+†Öѽ}ñ¿Ž°Ü?íÒ„» ¥_"Æþo9q¼<ó:Œ)­˜\Äyš5!䳕l@W¯ìVö‰ôÆÈõ+; ;h]ñ^˜ˆÅ†%€íÕìý cyj ÃBœ¯–ÙXvrõð"û'؉ó×ªß Û°„6ÛõÝgâ˜4<?€EbïªGëB¼WÂ/ ®‘ydM¢+é5¦”9Æ–²ÿÈöqz®»û”Ïâæ{…Bá}‘«ÅšRMÃðßii0 =øE(ñÎÎÓ'°—˜y˜_÷7ü¨¶²¾þÖÜê¶mKïimÉ¿hÁ\5Å®¨ú/Ç]i Æw56‚ #¦×r€\àƒLðCdãY:�#aÀhEP %„±Ð °_”_'›ÁÚ4(kˆ›ûCç—¿$# ÎÅž!2BÖ'€¦uM©»uÍšêì æ˜Å¸áݤ |1XÙí{Å&eÝ>/‚qq@»‹S€¬)ö¹#ÅsÜ׊Ã"‘“Ýßø~쾂岯Üýµo”û]œwªx’ûdŽw»ç„)‚c¾0Kdƒûߣî-Îv¿V<ÖÝíǾn÷þ Ý/?êÞ½6ÖóÓœØå “ÝîçUpÐý®¿uMl`KüÅÇâ cm Ñ¢1pß0}å {¡/Ó=_$²ÎÝä[àží ºo«“Œnw?†ïVÿI÷”ŠØ rQQ|õ1¾Åq´y¾7ÜYq éêlÙâöønu§âúyÏoÅá;Ý9aòò¡ê¬_µkQ˜ Æp¨`KÜ­þ7ɘÙävLïŸ=P4“ÍÝî5v¨Î*Î3çe³û€¿Ú¿K– ,3ÃODÂ6a®0S-ä ÙB&Fö4!Y°ŠfÑ(&ŠzôQ"f ¬HE­áè§r®j“VÞ¨žUŸl¬n¤ê“Æ~aÖ%u–;ÊÍe¦àÄÊx4?s¿»7×Ijhë” ¡½©¡µMmÌý¿¹ÚÆãcJݲuË.ÔǾë{«Ú°4‡6u¶;B«çx<û/,þÓ"³yNk» [ÚB˼m•¡ ÞJÏþºú®W‡ë¼•û¡¾ê¶†ýõr[ew\§~·o<0­ªºö{¸6ÞÀU]õ‹U©‹U«¸¦ÕþÀp­:<MÅU«âªUqM“§ÅpåæVÝ3c<ü'M³„œ endstream endobj 115 0 obj 6202 endobj 116 0 obj << /Type /FontDescriptor /Ascent 770 /CapHeight 0 /Descent -230 /Flags 32 /FontBBox [ -171 -448 1001 1035 ] /FontName /JNDVVL+Helvetica-Bold /ItalicAngle 0 /StemV 0 /MaxWidth 1000 /FontFile2 114 0 R >> endobj 117 0 obj [ 278 722 722 722 722 722 722 722 333 333 722 722 722 333 278 722 556 556 556 722 722 556 556 556 722 722 722 722 722 722 722 722 722 722 722 722 722 667 611 722 722 278 722 722 611 833 722 778 667 722 722 667 611 722 667 722 667 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 556 ] endobj 15 0 obj << /Type /Font /Subtype /TrueType /BaseFont /JNDVVL+Helvetica-Bold /FontDescriptor 116 0 R /Widths 117 0 R /FirstChar 32 /LastChar 208 /Encoding /MacRomanEncoding >> endobj 118 0 obj << /Length 119 0 R /Length1 3540 /Filter /FlateDecode >> stream xÚÕ–{TTׯ¿sÏÜ4‚¢$"" "Q JñAÑÐjÑX4–�êH¬ŠïGE‰¯*ÑDC©¥Vkµfj,ZkmXÚ¨ÍC–6­Ñ5ÆÆP›Ë28Ó}>&ù£«ý·kõκ¿³÷·Ïûœ{Î@è€JhdN+-*G‹Ò(ï£ÓΙ3¡Ê!ö À ÷”Ï,-Š(w‹Ý"ZõÌÙK<³¼²½P³KfM÷·žZ8îI|`‰ÞVïv_ñ{–”Î_üH4N‹Ÿ+~Ðì²iE¨GñóÅw–-.j§ÖŠ_(~Ìœ¢Òãžï#~¥øÑåeó}^l§ø åóf”¼–ºW|©3¨ƒh f<fDN?–J3ÎɨÖY0 “ЀuÕVlTÉØ ÑÁ8€ƒ8%o:’Q¨÷HžV\À\°¦â¬x¤XI:%WeYQX€Uƒ+Ħöc‡U§Vb'¦ Ú‘(9ï!_B)Ò¬½(pָ̲€ ë,PnT Ànmg¡Öqéö(LÅ1x±G—Z·\ÈV-R{ >Ä5 °ÒQŒj«Xzz\]Põê’ºnåáuBµªsvkšíÔ[‘˜+³ Db˜vâ9fþÐ[úo^ÚjŸU;dü¹2úf¤`;^}»äó"E×"YKÏqß’_o]+Jš]%ö ™ý<û¦¨:,p®¹’˜®W‘¦kí*uŠ~­´¦n:£áˆµX‡Û¶×j]Â"TY÷%ç!\µ«­=2avU¥ŠÛæcí<l´«.3+éTY‘hûòÔQ+n½Gíûjnì3Ö-«ƒs¦ÛwT³jqösÆ«ƒv‹T©ç� U­Î4uÜ™á ‘U2Ç—­YéÇjôÏt9m‡¶úƸ½Vü7§{3ÇçÇœž›Ü÷ßÜ·+Æ‹\oð’˜#~n¾#Òžìµ»yu|×wí¿¯%÷›sD¹FfªY˜-â„|1'²è#³“ÍŽµàñÕ8<önù]ˆÈlç€SÙ–ý/7¦ÀÝÔØÔØ¿Shlh|lh¬ÇÖ ÙzÓWã iù|ž³·©C£ØÕ¾k—¡;ú`8Ægö nß=*¢+ˆèq%©}ph¯+I¦_Ý=8JCEO w¥Ä:ÂÝtçdÓIwóÅó¡Òà½wšN6º››Þ:*JFhXF÷¸ŠëáìÞ%-u`zDˆ8 ž˜–J?Möv\„º•Ú%¢KXçp§Ëé\‰ –dLØÓQ’½yÖ¢ek+'n?tÙæÏ~9æ%Wd¤+Q%û^öû}ÛÔ,ežçÖ,ú´`Ù¦§Çy|íZ~½p庼±ÕC‡¬ÝxìðÑùù]g=×r¨þÁðÈ8ßTe©¹¾-¾‡òÛ¦Êô™‰cŠ}ì\z»pùúñãJT·W—\°bxJðÝa/©y¶ã/” â¡ÑxvXÂ×i±¯Ffr·9—g ËØuë䬙äÛ÷åå U_G¾z,Ç9xœy²Ó çZ} - Ke"%µàF¦¬/\ŸÈ™£= ÔãD07%'gÌĤ KJ‹Ëf›²||û͹÷ž@<ËoU*>hå 5V-ÚŠ„!ü¤|H¶’_’ÈòŸä}ò òùòsòïä]òod3ùy‡ü”;ó¯´oãL‡-©ñŒ­q‹öÇäMòyüˆ¼F^%¯—É?“"? ÿH^"/âyDIk'ÞûÔÞÛ÷h¿ QÞ¡}žl$ÏÊM¥ñ6í3äiòùûþÚ'Édù{ò8ù;òù[ò(~ƒqÒ¯£mžÿ]iß(ZnœÃ‘Èt¡W)‘òœ¢™ˆfŠf_#UxHÎ3åÇrû¤I¾7äÌÔB“ï [øûêÅëÒ¢-©Ñ^—ý·P<£Ï´t Pƒ‰h¡©á-ö>–yÜKþœuîÁ áÏhï¦þ*[…Ê®@}»äÞ5ž©Ï(?e¹ÈþDÖD£Ž¥ÌÖ¶ÓþYkö1~ˆok¨¼Lnc [}‰|‘mnat³ìd˜§šÑMäF®é˜g¹½ ýw¥o먬%×öÎ<)ž±µÜ «9ž*æ¨âº­æxVÉü]–È*FVáM‰Tb¥´j3¢…f†Wâû"š‰h¡™£˜¯Õ”\N.“óÂäZÖæ±¥Ìµ„Êbr¹£^Õö]W`FJÉŠ6%¢å?A9W.#å(ãê—sõËÙ·2ÌA‚he\ý2öÍ(ßc™r&9ƒœF>Kß%§’ÏÈ!ó­?Co û9™v>ùrù49‘œÀ•Ê£KŽ#Ç’ß&Ç£Éÿ_¤§O±þQT²ùE =œÌ"39ša´Ÿ$‡’CÈÁä 2CJkÙsÆN'Ÿ ÓÈT2E4þ´û‘“Éd_ä“h÷!{“½(mØ’/‘;4v<Ù…qr[h¹Aj„±ÔcdŽ´ü‡3ù»S‰¢ÝŒÌjÛ]ÉÇØö£ÌAv!;è–Ù G¨´hKj´Nr¯[ ÄÂø5[KiÊvä×B%˜ì@>B¶'Û‘A¤ „N9]5xGwï!-7XijV졌¾PÔJ©}‹¼;åõÊû¦¼.(5fMµªHúŸ<Hú¿{¢þE  4 endstream endobj 119 0 obj 2017 endobj 120 0 obj << /Type /FontDescriptor /Ascent 701 /CapHeight 0 /Descent -299 /Flags 4 /FontBBox [ -167 -299 1063 828 ] /FontName /RZHHLT+Symbol /ItalicAngle 0 /StemV 0 /MaxWidth 1042 /FontFile2 118 0 R >> endobj 121 0 obj [ 790 ] endobj 122 0 obj << /Length 123 0 R /Filter /FlateDecode >> stream xÚ]ÁjÃ0 †ï~ »Cq’Ó !0: 9l+Íö�Ž-Ã"Ç9äíg«Y;X ýÿ'~Kžûמ\y^˜À:2¿F0âäHÔ §ÓÞqÕ³ BfxØ–„sOÖCÛ �yËò’â‡ãG|*³h0:šàðux2¬!|㌔ ]m^÷¦Â»š$£ÇÞdݥ혩?Ççîë{$í .AiŒŠ&mUuÐ^.@2ÿ´ínmêlåbŸñÄįVàòËG*½Æ˜ñ)8IÉà× >Šß¦6pì endstream endobj 123 0 obj 224 endobj 7 0 obj << /Type /Font /Subtype /TrueType /BaseFont /RZHHLT+Symbol /FontDescriptor 120 0 R /Widths 121 0 R /FirstChar 33 /LastChar 33 /ToUnicode 122 0 R >> endobj 124 0 obj << /Length 125 0 R /Length1 5484 /Filter /FlateDecode >> stream xÚW \T×™ÿ¾sî<x¨<GæŽ&•QÔ€@`€ÐNTT´3uˆ`4¢¨ÑÔèØÄ¨ã+ͦ6š‡›¤mLÜ$D: Ùm»­‰â¶Ùô±»Ñ¤îjöWÓ_M£ÜýÎ¥ëî¯÷Ìw¾×ÿœós¿{æ@�ˆ‡ pp5¯lê�3”’å¢ôæõkåïä½XDòE�ÃŽ‡:–­|ô¾×¯W®.[±ñ¡ê¼µ¨+aV´µ6µOMÿ&é;H¿¿ ïH¯’>@zNÛʵÌÓô©?0¯XÕÜ÷SøÏI7®lÚÐÁG™Ï‘þ'ÒåGšV¶Æ.| a´Ð;Vu®Õ&À~Ò§îèXÓÚ±îäGÔwB#u—D6ѽ˜‘‘ˆÚ‹¡2ˆ2 ¯A†ä€t�íÑeÁ‡ÚµËÂ/8û/jŽÀaxÛáMxNâ5jõ6ôAüÒÀ /À&x¶Ó( ɲæR1ýYÌÐz ^¦õ|Îö[°ú!ÓµÏ` l㿦VÛ ÆAÔÃ*؃jë ÎKO@1<@5Ÿ¶W{Fû!üúø/´[™ÐLåŒö߆ßjÿÔâûp�Îã31ÇÀE£ ù"¬ƒ|‘„Ú2í/¥$˜ gp€9©÷V¸„鸉×P/¯jªöSBYa´ÁAèÇ©XÇì†Fm¦vRiŒ Ôëè†^*ax~ñ†kÚµkù0ƒæÓgq€ÝÚ:TI+f UÓȳ þþ Ρ‚ï±U†xC‘ÁexLûFÃ$˜OѾF-ÿo°ÍT¶ðŸKµZ5$Òº|O¬6ü >ÁL,ÄÙ¸€g«ØK| åe>µ-ÐNëýõþ1:±—ųAþªtDúÚ8vè‚–HoÄÏËð&ÐLeìÄïâGøVÖ°çÙ§üYéuéW¦&šõbX {àÜÀ,Á9ømlÃM¸¿‡ð žÃˬŠ5°‡ÙUÞÆWów¤j*ó¤Né ÃS†]ÆËC¾¡ŸýóÐ ­H{ æP>l¥è¿/ÑÌú`~Gå<|ŠŒÃD*2Úq>~‡Êf܃¯àa|{h”sø)~†Äëø5*F–Åìl…­a²gÙ lÊ9ö9ûЧñqÜɧòrîç«(ªíüi*Çø'R¦4(i´ÎE†ý†C†Ã†#†“†kÆxÓwÍ`þàæ«·òn}<C;†öuõhŸÀz‡™´ 6(§è›¨,§÷½Ÿ2îmø5ÆÓÚebVàƒ´2Kp9®Æ ´’OâAü‘û[x‚Vé7x•bN`V=æ l*«f³©,f­l5{š=ÃzØGì/ÜÄãxÃóx_Ä[ùZ¾‘ïç*ÿ€ÿ;ÿ”ÉoRѤXÉ&“’Sª“–H뤗¤KÒ%C£á}Ãc+OÃÆ/L÷›*Lõ¦9¦E¦}¦^Ó‡æ�eç)8?»¼À·r?{Ùd)ƒeg)Ÿ—@ ŸÉ(SÙaÜÁÇ–cØ`,ce8 ®IZ럳CìKVÆg¢çÁr6)Ò›q´ô±ré\‘NÐÜÎRÏŒñ¸™]5ÆC7›FcþŒO”œü}ø=?&éeøW)Óð {×S¼#U|`ç/À[|5>ǘ ökónÊãYøí X„æp6‹²¨˜ÿž€‡Ùoá }Ç;àØ"-ƒ½07Á%ø1}ã óŒcð—¬] ±QØLzf7 sFÓ¸ˆ4^e¿ƒu0(ÅÂÇü(úAöŸ)]3ÌÅ6ú‡§`µ¶6|Ò¯pp\�¹ÒÚÝ6ñ"ÉN| í*´§õÒ×ÝOû@ŸI–tÊœ)/æÓqÊs´OH”Aíô‹v±³Ðcl`aXfHDÚu�¤÷]UU®ÊŠÊËJ§•O2¹hÒÄ ùμñ߸ϑ›£Œ³Ë¶ì±Ö¬ÌŒô´Ô1£G¥$[’âãbcÌ&£Aâ !ߣÔdÕP%‡2}zЕ&24Ýe¨2™jGbT9 Ãä‘H!ú+¤+‚t #Ñ"—CyA¾ìQdõŒ[‘øpŽä=nÅ/«Wty¦.?­Ë $ÛíÔ@ö¤·¹e²G­]ßòÜÔ]W\lRÓ[]±q$Æ‘¤¦)]˜VºÀÒ<¥] Ì ”š©¸=j†â¨<×ÓÔ¢ÖÏñyÜYv»¿ _Åšfe© JµšäÔ!P££kT“>ŒÜ.f»ä®üÐî°–œñ-JKS£OåM~1F²“Æu«i]L¿£Rç)5¾íw{³xÈ“Þ. 5Ú.«?Çw·×.j¿Ÿú ¶,·6ª¥¡wÓ"zçÉ4Ûæ÷©¸†”ÅLĬ"ókU<ÂX.«1JµÒZ W“RaîF{wf¦«O»�™9ÔàSìje–âor[»FChîÆ£.9c¤§ ¿Ë’YخĤ¨Ÿp·Ð:ìÓ%.$ïÜá•E‘2ƒB•›eŠÄ§ÐœJDÕZ¡æ‚ÑãGj¥¶ÐiWcj!K©°‹öª!עȡë@ \ù|¤¥)j1æZ®ƒEž §ùo˪өæå‰1ÕÐ;¥+t}jAþú0S”‹LŒ–êim›ü¥…´üv»xÁ»Â.XJŠœã‹è2,ÍêW¡Ó¯²€ð ÜöŒ™/<ÁÛžáæ…2¹G?XQÍŽá_’%u”§­TÅÔÿÇÝñ{ç)Þ9 }²'ˆ®­·a„ñ— û¢’:ªÆÇ³XTbY\÷RR6ƒ…â‹W¥\úõ¤n ›Ì”•ºåZÕ˜©ý±vûߨ(¬]­tv§Y4LµÔ9R/¡/>Ä)`úsñ6, …bGø(Õ"Έ2ÊxhðÙåæÓ—™K¿°6P"ÈŸ¥ºhÉj€ò/bŠª#€YQÙOÈ΂üZÚèB¡ZE® BMa-¸T‘-J¨d'CžÀíÄ ký»²ÔÚÝ~Z«6,-�†ú¡Î�tJ4AuËFS˜pƒt‘C¬Iºˆa6.2~‚þ,cèè4Ò–/Ëo•ϲü©|æ­r¨$Ùr“ªIíÉöä\ªþ*nÊ|à¦Ë�_ƒ, €ž?,;w—$•_7g˜õÞÞ¯tÜæÃÑ�ÄDÏùz;SÅÐ,¨1Û†¦ M6ðçöÃŒùwqÛˆŒ>šS=ÂÀB§Ýj2uÑ‚é^„”h?F:—‚¯®Ú]½ÐYµ¦½iÅÌÂèvŸ¸‹Üã~N×öÞÑœ›V•ÌÞ¥ÞlTUÍ&ZB´ÈÈÞeãº[l)Uqì8œ¦ØX7|¦óÃ+fp-·¹53Š\²¨¥DÕ!ùƒ¹û**ÇÞgH•ãÉÝ$‰ÊñØV’DåX±ž$Q9Z–“$*ÇÂ%$‰Ê1»$ªÂ쥟äÜg+žý0ÊUIìQ˜Hä"ª'’è<J¾’DlÏwçåÙÂì Ë9>ÏìÇà ÎÅà+lÅàf nÅ`9cЉA+³1èÂàq,¡¥¢«g„:Í•ŽÁÓ|ƒt`0ƒ9”±Øföî“uæÑÙѪê"?PQ”D1ÚiEí°…ˆÃ»Tiºæ"<.ÎÈ|ÜѼʈ>¡´hUÕtvŠž¢×p ÎIô‚NA€hˆCÕ•DKˆˆ®iDFB£À÷éuÕ…D•DKˆ¶]%2êá\%b°*âÛz`…Ñ g ¢"üvfwµX-NËt¾ÏŠIÙ8;[ËfÅšJ •’lNcBï„?ßH€˜ª¶—탱ô"žŽò}Ý_µ…ñ¹nÇq[ÕüdK”u8 ˜K¼:u}*XÍ‚O+;B¼¨Ûº€š%u;òmý˜(ZõÚ¾²^´}f 3/[Û~#‡%ì¶ý YŽôÚ>´î´ý²0l&Ë G‰õË:´ÏZb{ó´ÝJŽƒÝ¶Í‚õÚ·ÖÙ¶êŽÖˆcq'i®$Û\ÇBÛtêÏm]jsuRŸ½¶Jëb[y5U´éµM¤œ1‚oÕU²õ燱͕oÚoò™fÓí È”o²›l¦±¦,ÓhsŠÙbN4Ç›cÍf³Ñ,™݇F‡µ .§øÊG-‚%QKºla¢f‘m‚¡™Á7AŽÌ;¯½ê@3x—Êê—ó”0ÆÒ^oPªQMñ‚·¡Z-qzÃ&m®Zìôª¦úoûº÷úɪ²a¤:Œš0m˧ª>@LÞ¶'KðolÛã÷CzêúÊôÊ”Šäiµî{Thí¼ó¤Çªû½ó|êcýj‘´±~¯úwâØÕGÌkw~!˜ß×Ç+ðž¹ÂÎ+Ü~¿7Œ tÈøá(c¾Ðqældsvw0‚Ë¥ö„ËŒp11«ãrcbtœ„×Õ™ãqwåäè˜4:uLgš|7æt.arsuLjNë˜Ó©AQ+tˆÕJl«Aºµê+fêw …QÈÎaÈN}$Žw0Ö&áÂmLÂÂ8ÿÖ§µÚéÄ£eþæFqd (žV¢€ºk}[º\*Ë]ÍþèYÖXÚÜ&xS«êWZÝj³â–»Êïánî2ÅÝž_W£«ÕÝ]æ*ó(MnÿѺú)Å#ÆÚ9<Ö”ú{tV/:›"ƪ+¾‡»X¸ëÄXÅb¬b1V«N ô¯÷u™¡ÚO'$eq±”¯,»¿:ÕÒQ¡'o™=}sV¿xâèÀO—"á*¨*¨.ú¦„+QÜK¢®ôÍeö¬~<uYÈœ¬TƒsíºÎuîiwG~ôií:±à‘ÚÙù=äóÐÃݹÀ«æÍóª•t$ë2™ÈSRKoÛââ<t2Š'±T9 [¹°ÅÄDÿûý¯‹òñÙñ£èÊÆµÐéçj¶·ÑVÐ=�öÃ!ýï¡ÓOìD'üj ¨— endstream endobj 125 0 obj 3704 endobj 126 0 obj << /Type /FontDescriptor /Ascent 905 /CapHeight 0 /Descent -212 /Flags 32 /FontBBox [ -223 -211 1000 913 ] /FontName /XGBDBZ+ArialMT /ItalicAngle 0 /StemV 0 /Leading 33 /MaxWidth 1015 /FontFile2 124 0 R >> endobj 127 0 obj [ 278 ] endobj 43 0 obj << /Type /Font /Subtype /TrueType /BaseFont /XGBDBZ+ArialMT /FontDescriptor 126 0 R /Widths 127 0 R /FirstChar 32 /LastChar 32 /Encoding /MacRomanEncoding >> endobj 5 0 obj << /Type /Pages /Parent 128 0 R /Count 6 /Kids [ 4 0 R 13 0 R 19 0 R 23 0 R 28 0 R 32 0 R ] >> endobj 37 0 obj << /Type /Pages /Parent 128 0 R /Count 6 /Kids [ 36 0 R 41 0 R 46 0 R 50 0 R 54 0 R 58 0 R ] >> endobj 63 0 obj << /Type /Pages /Parent 128 0 R /Count 6 /Kids [ 62 0 R 67 0 R 71 0 R 75 0 R 79 0 R 83 0 R ] >> endobj 88 0 obj << /Type /Pages /Parent 128 0 R /Count 4 /Kids [ 87 0 R 92 0 R 96 0 R 100 0 R ] >> endobj 128 0 obj << /Type /Pages /Count 22 /Kids [ 5 0 R 37 0 R 63 0 R 88 0 R ] >> endobj 129 0 obj << /Type /Catalog /Pages 128 0 R >> endobj 130 0 obj << /CreationDate (D:20121115195358-05'00') /Creator (Word) /ModDate (D:20121115195358-05'00') /Producer (Mac OS X 10.3.9 Quartz PDFContext) >> endobj 131 0 obj [ <40c0a5ce71df559780ac7d5ebb16fce8> <40c0a5ce71df559780ac7d5ebb16fce8> ] endobj xref 0 132 0000000000 65535 f 0000000447 00000 n 0000000022 00000 n 0000001509 00000 n 0000000466 00000 n 0000125193 00000 n 0000000572 00000 n 0000120790 00000 n 0000091061 00000 n 0000001490 00000 n 0000000682 00000 n 0000014946 00000 n 0000001545 00000 n 0000014968 00000 n 0000015077 00000 n 0000117920 00000 n 0000073411 00000 n 0000018924 00000 n 0000015202 00000 n 0000018945 00000 n 0000019054 00000 n 0000020755 00000 n 0000019167 00000 n 0000020776 00000 n 0000020885 00000 n 0000110481 00000 n 0000021642 00000 n 0000021010 00000 n 0000021662 00000 n 0000021771 00000 n 0000023358 00000 n 0000021871 00000 n 0000023379 00000 n 0000023488 00000 n 0000024844 00000 n 0000023613 00000 n 0000024865 00000 n 0000125303 00000 n 0000024975 00000 n 0000026591 00000 n 0000025100 00000 n 0000026612 00000 n 0000026722 00000 n 0000125019 00000 n 0000028813 00000 n 0000026848 00000 n 0000028834 00000 n 0000028944 00000 n 0000031147 00000 n 0000029082 00000 n 0000031168 00000 n 0000031278 00000 n 0000032857 00000 n 0000031390 00000 n 0000032878 00000 n 0000032988 00000 n 0000034950 00000 n 0000033113 00000 n 0000034971 00000 n 0000035081 00000 n 0000036786 00000 n 0000035219 00000 n 0000036807 00000 n 0000125415 00000 n 0000036917 00000 n 0000038856 00000 n 0000037042 00000 n 0000038877 00000 n 0000038987 00000 n 0000040505 00000 n 0000039099 00000 n 0000040526 00000 n 0000040636 00000 n 0000042499 00000 n 0000040761 00000 n 0000042520 00000 n 0000042630 00000 n 0000044141 00000 n 0000042755 00000 n 0000044162 00000 n 0000044272 00000 n 0000045754 00000 n 0000044385 00000 n 0000045775 00000 n 0000045885 00000 n 0000047394 00000 n 0000045998 00000 n 0000047415 00000 n 0000125527 00000 n 0000047525 00000 n 0000049029 00000 n 0000047638 00000 n 0000049050 00000 n 0000049160 00000 n 0000050593 00000 n 0000049273 00000 n 0000050614 00000 n 0000050724 00000 n 0000051578 00000 n 0000050849 00000 n 0000051598 00000 n 0000051710 00000 n 0000051836 00000 n 0000072433 00000 n 0000072456 00000 n 0000072670 00000 n 0000073590 00000 n 0000090094 00000 n 0000090117 00000 n 0000090331 00000 n 0000091238 00000 n 0000109508 00000 n 0000109531 00000 n 0000109740 00000 n 0000110656 00000 n 0000116950 00000 n 0000116972 00000 n 0000117191 00000 n 0000118102 00000 n 0000120211 00000 n 0000120233 00000 n 0000120442 00000 n 0000120467 00000 n 0000120769 00000 n 0000120953 00000 n 0000124749 00000 n 0000124771 00000 n 0000124994 00000 n 0000125626 00000 n 0000125709 00000 n 0000125762 00000 n 0000125922 00000 n trailer << /Size 132 /Root 129 0 R /Info 130 0 R /ID 131 0 R >> startxref 126013 %%EOF ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/overview.png��������������������������������������������������������������000644 �000765 �000024 �00000065107 11662240070 017712� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��¨��Ì���.몿��� pHYs�� �� �šœ���PLTEÿÿÿøøøøèèøÐÐøÈÈø¸¸ø  øø€€øxxø``øXXøHHø00ø((øø��ðhpèøøèèèèØØè¸À谸訰蠠蘠èˆè€ˆèpxèàèøàØààÈÐàÀÈàPPà��ØàøØÐØØÀÀØ`hØXXØ00ØÐèèÐÐøÐ°°ÐHHÐ ÈØàÈÈÈÈ((ÈÈ��ÀØøÀÐØÀÀøÀpp¸àà¸Øà¸Ðø¸ÐÐ¸Èø¸ÈиXX¸88°ÀȰ¸¸°HH¨ÐШÈШÀø¨¸ø¨¸À¨¨ø¨¨¨¨``¨@@¨00¨((¨¨ ÈȘ¸À˜°¸˜¨ø˜¨°˜¨¨˜˜˜˜XX˜88˜((øˆ ¨ˆ˜ ˆ˜˜ˆppˆ``ˆ€ø€ˆ€ˆˆ€€ø€€°x˜˜x€€xxxxPPx@@x( x((xpˆp€øppøphppHPp88ph€€hhøhhh`xx`pø`pˆ`h`h€`hp`PP`��XhpXX XX`XPhhP`øPX˜PPøPPXHXøHXˆHX`HXXHHH@Hø@H°@H¨@HP@@à@(Ø8@H88ø88°88@8888 0(88((¸ (ø (0 È h ( �Ø ø øØ¸x èø�ø��à������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������úEÞ���tRNS�@æØf��fàIDATxœìÏ«ãÆ–ÇMçÇËï¬Ù¾^µW΢=‹ÛH( ÷‹vº¢%†àëÍ8XbM6ŽE Ì%#ˆ ¥ýPˆ‘†÷¢)âÿ°¦J?lY*Ù²Tþu£éX.Ù–,ï©sN*u:----------------------------------§…“'fN}ú- ä�º¶UŸ·àÔß å/�ç±À7"ÐOý%Z<´Ê”çUxêoÑòÐáЬ©L1n릶Ø tÊ+;õ7iyÐ8LtÊó¶sêoÒ˜&i ÂDï±;ˆl„*»³j9@Ø D°]'¬Î¾d£Sž7|VçÔrL|¢P](±9ÁÙÄ€Í)µœT˜Èb„˜UxËäl"îÚ¬ÿ¹g$ ZÍÏFgaÞW´Yÿ‡Ã�2Š]pô6·©`Äêl¬?×H’,ëúd…®Ë²$ z+=¦ìt¡4öS{°ñÔ4ëß“ä‰éx�"Ax®cÏÆQ­iâÿý<·× ‚x¯ç˜Yb˜•9〥.Ô¦Iv“–C}iû®=µvûuXl|`Yÿž¤›nð˸“†ý§Ý­<í¥;Ãr|€à[×Ô/W°ËØ…ožd‹¹)цw¢ .ÀÎcÜйГM«Í· mØß®N:ý¡fØ>Ö¸cÊ(W›Ñ(ÐJUÍ’ì*:Ì÷H%Êb×±g4¡>€¬ÿ@·ß"àZÚ°Ž@ó 5Ëè­­_ÔuaI%4K²ËŘ_AIéú•‘J|XåF‘œšx?Œ41ªø2—l»è¬OŸØc&ÝëØ˜³Q<(ÃH*¦™3‹Ž¨~J7Û~醊h#ÛPá¯}ÅzÃóc4ƒ£X¨ªo„Áuöý›õ—&î§Ùk4«VìMx“ ¸>:%ühŠÕÄ)ô‹É)ÓÍvS……Ï_#‹Ñ+~†Uj`“«W)D¨B(â=›îÌ%fýf€K­åŒîG_µð¡Ìóö8¨t¡à_ýºÐšCÔÊ÷]£gD$³ÐÊê‡.þŸ‹D‘4A‹W‘¯ðdXìª ïïïÝ\5ë…eý{Ø’–tx®‘°X½Éùºó_ò*õCÛöÃ]vV´°%Åo  Tü¸éÚ@BRð )©PùÄ[6 ÀDld±PÇ”¸¨¬¿4‡ÐÖŽ`Ióô5|äùyz=˜3*²I¨b팯­mBzµÏh@IA‰ï“€OàrØYÆ¢ò¢‹® „ý…ÜD,*"é-57hp!YNǦÔxq|‘¦¼0äÊç—xŒœ$@" ÚpûÆoOM¥4èû%ÚèÃùä´[¸#‰*ׯGˆ…j)¼ðçµ±É/Dòç#,ª8Î}¯‹Èú•º§0¥›ô5yúy].ä Ï%1÷5©Ú³±ŽÅYx‡O\àËÀÁÌö]1ª`¹>XÔî@d—öy·!Ägc“ã‚©áŠÂ=öM *V06°?ª.¬;OÅ š‰*DèuaöܳþœîCG;µHS4úç¤ÕB$eá€deƒnp7jØš)#ܵŽl^Àÿ…S^ ƒX¨6nEÔì–]»4E/~UUL6²ÞŠ (‘&…ÛL ¦P2Ãçõ—‰-=µ:7!vU>õuI0 ÖËFwé¦KzìÆÞàŒ7p8~‹M®Hòš#"Ôk8NÑš¬ê;©Æãd+Î7ë?˜COÛ1b žjœŸÃŸw¯˜ š­g)/^óQn2 [®!I»ß×TůÂBAC-¸­eL¨Âÿ‹}Ø€›�`œÜ/-£o�09¹ àýTø5Ghedß“¨fšI]ûx§pÇ+¤‰ Òz<¡v4u8¡þï¿}Àòê1Ar}Àq' mäœ6eUˆ¤!Š­¬ÈûD†R¡ŽÈ3eJAJÜõ«‘J_wÔM°ëÿÛWL¯_cˆ1Ÿ­1]ÓŸÖ¬BZ!½ Ãò` ‘¤oEéI"Ô{… %‚¦Xâd0ÀÑÍŒ^*P;ì/ ¦šB‚©Ï¾`z›Ñ›#çÌéš¡ƒæ§µ2éS=²„^HAÆb:{- v”z«XáxFAÀºóþ%IݾG¨DWoê:„ôôTs¢ôÔŸ²¼‚M<h^€1]Ó7 w€I%ìHE¥�)´DP¬‹ºƒ¨Ô„sâ„ÿ£¯>fy k£ƒðÌ’QUÐBp‚’ o×´ŽfÔN¤Ò†PWÜÙn¾Ü¤"Éê?dw ë2þQëMØ!ù쩈´`].½IýŒ?­¦dÅmó ʿҪ(å£Ç]Ášpx9®i‘¡W=ùóºþMê uëZ*ÚÒˆåë¬Ëü>ù’ͬgÂ_®N-¶f\ýÍ£IõûåçÚõÓ §×¨dÐAPye$FêX$sSð¿/þÕúÛ²…ÓŸÎâ ÖÄö…Ë”peÃãÔ¢=·\þVL1¡v0E›Š²†UZ.ôII¬ë£÷×¢H­ëÃWôù´›SQ¾ü„Á5¬ÃÚÏN-26<³à«>ùq‰ù£,=ňÚé)Úä¾5‘E!;«"o¡¨l†·q^ùè‘Êæ0ÿ£Ç' ýuè<�kšråÀg�¾}Gtºü±$០–u¢U©_çG›.½"ªÈ†×n§Pó…S>>þXªüÞ»àŠÆÐ[²xây¬ÓåÛVËUwfƒY“•uj¡R Ø"T7Ü)ÔB)êÇÇýAx¡ ©mHapÈÚª¨ç_~×)O¥Æcø×‹l&(?Už ÞÛ꥔,éS*Tàî*¥¸ÿÓ£†þ=^`z¿ t7°ú]$Ôo;¥ƒSâ"žÙ7]ORæo“묑ýò°§~™ßöEÒFèžUÀX¨ŠüM䯒yþ×X¸"mò,mºÔçŸÕ?¿}1¡qjAã` €'¸ïÿçrù<º„Ôìù(ÉUŠÈ]¨Dë>È·F¾mCìØNጟbsk!à–9 f÷m[vr …¡Ⱥö-Zȶ‚™è…|cA¦NÓÞIŸ€úÕßœà>ÈÐy ¡>g<Œ«ú+‰øŸüúuô„ºV¾’™qhÁ¿Ä‹Ôù‘žVP}IfI“âÔÀK¨ŸFíT_ÈׂiùJ‰´¿ú”þG?jp†•éy¡rj)%ôÐÿƒ»ýoVϨ%©«å Œš •'÷~!•êojý ŸPqyÁ­3¶SÊI9JèoÂÉ©et Ñÿÿ±\þšyšŸ.M˜&ÓQ…JVyØ-ÔFK¥T¾ÙÄëm‰¬„òe§_F-÷¢*ùêÓwY¯îõ6¨O2Ï P`n“S¹E¡ Ø/Ø-ÔF.j§âí{TËúig¶wË”¾O[FÍÙð¦¤Ê Í²�àë$1µfN‰§ü¸`ÅÂâTqO¿!TµR×ßdIÂqnˆvÐ2jÎO-žã2gTápÿ·Íê"idº Ktˆ{z¸ ݈�‹Óúç½@TI ¸½^ aÏß9Ö-&ús8`UŠ=C+£úí2ÉKe -;yãû3DYT;è*Âû¦�Ø÷þ5Y— Ún0ÂûÞÐýk´ìd(ÎóþìXÈç`eÔ´¶ÿ¨}£œ]C­„PÖZ_Y�·@?Tж|ðž³²Wç8®ú‹Ñ ñ:ÓÁ+Ê/¼ëãzdáštýbÜ*&é ‘Å¢$=TœË½?»–F;Pµ³ØeN‡ TÊmë8z‘½zn§¡á#žu»~ùç"´ßâk/Ò·-*¿EY0Y8éÇåò]±µúÒèUoMÎdM.^V°[›ŒrŸ ôÇqE•U[éÇÕ†CE[‰Èvd´`üªtÁB±•ðèwvÂùX’’OwÍðë5ùì}„ÚíÚ Œêódä4OÕ›M°Z"žÑ*OœèKT'“ëwLML9ÑP„<×e'ÀŸ‘2ê9œX²s€"_k‚t’aêqÔõyõ ³j°Ÿ*®ZúÖn¡ö“w%Q¢'ÿèv]ò¨uòѾ«ä…‘Òvï]¿µ¿Pqøß8§úÛrùOZ;-ž¢aXV¥åþ™­›'“™Û÷õ™\ÿ�ºÈŠzsüÌŒN1’ñ—Ÿ?ox\²“C‘cK„ÛÈDãÄþV xU=ÁTra¦m¼Û¢&ïJ*/}’8AdW B­ãÞB…û µÛ÷‚fUßcƒú5u~^7DËÀÉ“&l|V,NY ˆÍLN‘ã¸ÿ;ýQ¯#M’9Ö·GÞNþᢲ=•á3K¢¤ Ûf諾ÉKTD?Ù0‰PÅxWN¨dÏQ„ŠÿÚ%ªž`~_²ï¼n1y "? 'qØzšD’,Ë€ð?v€ÔqÒù<z="vÁ$æÖ¬|€9ØG 4¡bmìu&f[K…JŽ`Ë1Mä…ú£ µûÌëÿNQ1J ,oÚ»8¿5Èu]J;ôùd‚ȸ¢äïþãÇ]–ÒµH ÆM" W­/ã‚7{%€¨Bµw µÛ—V‰ÔñJ¨Ý¡EÒOAjP Bí‚£ µÛÔíV¿¡¤P×0¼ úùé utèޤΜXTì˜öt‚üÉ—&±¢ÉÎXÑ=¸¨ä.!‘ På²KûÖæ„*EùJi·P3˜k¡Æ«Ð¬ TëxB%u*5;Ö?¢iRepŒ¦¤ŽŽ¾Fe¢üs&±*^äÉÊÏÿ“ôóÉN¨XçDØÄò’Œ@¯ÂŸßdï¡ýœPýxc/¡Î BõÓ­‚Pµc Gÿµ¤ðÃrùîÉ–ý“Š% [QÝsõO±¹#9§¹GÂrÜ+é.ÿ?þ»“îpbz Jh‘å–Mdêæî„ç{c愚lD÷ã}ÚÏ€»ÒÂVr0;/ÔáÊ+(õ©¯j}eØ®;/®wIio Ôn?ðöïþ¿.I¡®oä¶ Ïלém\ÄheÔÜ×y°øyÿŸrS¨RÖY5Ы;L¶`’6%wA’ýƒ ț˂P“Äé'¼¹ÚÙÞD¨ÝîÏ‹½ê¿ŠQ 4Ê.ææ¯4–Q˵fïm ÕÏ µ?N$ˆ\›81Šî ‘,S¶êzl‹w<èB%¾?íÉ®ñ®öfBíjû橾+M¡¶$|üUƒQÿ ¬5gC¨Z.ü—6u¶@‹øO×B½Ò´D¶cM+ÜŸŠ*Tw¥ÃÈ»ìho(Ôîp¿Nö µ¥eƒeÔsPoú^V¨Êç©’8)ö?UÓ¬„Ú¥ø¨khB¯u¼ØÞÞT¨Ýg{eTÜ’BmIù¢î jÏ«yëDIв=˜ñR’+—¨®{ö°¾PûÑa’Ì!ËÚ› µûÔ«>ÙãùÆ|¾–2ê•Q÷@íJ~”#'Ô´ó׈ÿºNÑ6ªƒV=|Z% mkg TÜ3T^4'7Ÿ¯¥jè¿‹¬\V\ QÐŒyHjªBøÌBκµ¾PŸ!±Íq ÜÒÎF¨ÝqÅjºïsóùZÊøhÿÐ_n2/kH5Xj?‰üÁFU}¡&Y‚$ðK2`Wå팄ڕ*ÿÅù|-eì=ƒZ¯î'lôøÃ¢P»/QjS3õ…jÑ)•·³*þ+Tõçóµ”²ç¨&°ÑЧBÅŽbA¨qÖ(ªŠZS_¨±÷™V­ŒãgFy;3¡v¯v§©hóùZJÙkµ šMþܪHjÚù»™¶úB]d:õn÷.~æ”·³j·vUK¼ÛZŒrôÌæ0:•}nD5NRÞj…º|Ê |±ªV"Ôu;C¡vûáö„*}>ß™m«)ˆ•R«Ï vö¯BÉ‘ª—n€µM§«d:ÿKìúÉ7 ¶ÍP*›Ïw^ÛîƒR ‹YlÕÔŽ×ø·Ë UK$5É$M'5;=úƒ©Ï-¿šeóùNÆÿ��ÿÿìoãÈuÇ…»ÛøÖk[.¹Ø^³Å%‹®R NU‹8¥Â½Â„ÝMÔ´(ÍXjÐBpPJ*A±whªˆ·E�`{ –Lk€—eÊÞµDtE“¸átfø›J¤HÉòÅ_,°²(ëÑä‡3ófÞ›Gý·Q ,De‹ïÌ"¥@õu‹/Q¡tþ5¬L]×ôTxævÞÕ¼!Á(›j¡BTºµø¾,T=âNÄ¥Þ²œë´7nÂ?Ò«œ æåómˆÚ8@°ÚU¬Ô…¨L·ŽûFu%ú#Ÿÿ(òüƒ•Ú² ÆVxK¥Þ¨"»„{¿nP™)}á^>߆êU庵ƒº°Uý>Cw¼Áè×ö«AçïoD•6ÄXÇÎÕcÞobÝÈvÞûµƒÊ4RŸÞ€`”[ñ.l×ê¢0êü(¬`o§h§æ±#f ývÛ:õšÅA&Nhà}z ÿ{¼¸Ö£ùïgN°²LŠï‚Q6Ôù…¨jâ4€,ò“ŽüöÑëvu¼ŸQФ€Ÿø?x£~pêˆòõnúë±.Ã>ž<êü÷ƒG©ÎŠƒV†ÔEù|¡ u^!ªI~Ô0ˆí»gëšnºAò æâ`€{øÙzùX ç¨?ƒ€?·Çœ]Gô^"èਧƶ œ„pKö©è1{!™¹ï?Vƒ3ªµþšùßø` Î+ˆ_¨ù…¨&ö’aÒ EIzYáž6hDídfÔQü÷Ž’9S Òß­lEI|&ÿ•ìû [5ü;§HÝô`”>´€UAÐX¨yaÔ#µN¯U¼ª›†žM—Î{¿v%HýÖ¦O¡«o΢˜+•^ˆª_1åV ŽP‰¢þ–Ïçjˆ)+²é R]¡Z\ß­<F•,ŒÂÂÊ"1͉ÙxP)aÔíJqÒ· ud§,ŸÏÇ©†WXsøÙ|P3aԭߦÂQ«•�¼Œ¿—F¹5¦d5ë.ŸÇw«”.Þ0©B>ß5ŠËFË~ûÊA}-áúÛ JòܪŒ4{é`l!UÓõ´¨aíõ5F=.¾ú·*®éO¡.ŒÂV‰dÁ’ J”ºRþªUni”Õƒ £Õ¹:s+$ë§ËåóÕÚéK3n?Pùñ'¢4^6bTS Wc3tÛÒdNÔ··vPÃBT]p;Z³žüßrù|×ê±5^/E¨œŒNg¦pÜ ÓDþß1R¥°×ªWˆ 9ü·Suëƒ%ƒQ®Tîòg뜈ƬúŒ«‘2Öª­(:¬ T<[B߸¢b?[fÿÓ[ÍŽBýß’{R“ø.¬I\TSa- Mm¦sÜ+ µ¬gœaHH'K‚Ú2Ý~DKÙ Ž˜,kÒ¿‡Q›·í›KkÅ·úÃòâCìJ"¡lX¨¼}Î9:®_!˯8îò2Ûlç€ÊRbs½2|Ôó sNöõæ_&#ûê™IjþMýZ|5¨ß`¬R=a sï‘øš@Õ€T^{.#¿ÿâÏ‹€:ÃF_âò¦C{ÔjwG]‚cŸíÛCÐö'ý†`wÍi{ê²þ‘¶ÝÆ ²£)åŒÿìZñK<ªu•ÙSz§ý¤Š[tœu[,®„ÅÇ¿¾ºú�'Á”Ù<}@•!‚r€hì@…€j^üÁsúXä¨"´ÄS½P×ßr »!L¨16¦­†€àM Û‚­VkÒh�×ås»i×?Òp ¨è[²»y¶Àî&nb—Ë×üîshñë«_áÿ@‰Ò�ªlC0-äõkÐF^?êï@¡Ê‘ô ¬ !H6¨4PÛÝn«EJŸ¡–²?EÍg£‹ZR:šm€Fc4$Õ¤`£a¶ñþ¯EµûýlÍ ·ÇÜ»wC°ÑŠòZA}†:þgäUÏM_ï•öE2å¯J½sCF¯ÅôÌ? Ôá°A´Ûfƒ5û8ð± úÞH´A@X "y ʉNñ&%»o¨7ÅâÇWW?ó_–(FNe†O¹ØEU¨žT¡L-,˜ßõ·�…6X2þé"Ͼá{üÄ6z…F!¨þ¯ë7‡ 6UÓ­O’3¿Ô|p#°¹!-ê{¨A 3%Ü¢%‘iÌH¶1ÖÝqîêe¾jU‚–va ¨Çâ þðN”7jOX×ìA�¶Æ¨C4°!æ¯ëôN†ÝQC€B ŒXäPyGÚý`²LoØòC¥5ïßPo†Å¯!Nß m¦f™‘°GÃÏŒØ{g”V-冓·ê•ãj^Ö8¨?Úm6w··îÄÓœÑpµ=ÊN)—©È‡¨ž~o½ØÜŒçóÅŒ¦f˜ágù_‰-‰üody+òT7¨s”êú_»³µÀÕØvŪ—“(dêîÎ �õFXüë[›,F•a&ˆ¹ã¡Å@äupÎÛ¨–-]G9§€1§ æVƒ®‘NÌ¿>P=ÅpýÊpXºgRB<eg{ó±¹ -êc¼¹tÂÚAÁbÏfT¨z/àŒ;ƒ"‚OA£‘Î\@ß9ÛòþOéºAõ”i]—›È=a÷¶–½‰iÁJb#¢ÑÐ1ú¯ÂöK‚º¬³ø/WWŸ¦rο Ç2ÌhdˆŠ�4�•sñš&”¸Ï Ö A=Áq× /ɵþª¸¦–øï{®â&èä 8SrNTrJlDËÑuËqø—03z_q‹º¼YÄÁ(ßIÛK.ú÷ÛGV¦Œz†zi!èdAåѸ`5 *3h†á¾â — ¸hÛÔ‚A)KãÚwR—óvýï'oâ�z¸ƒxŽB Ù—vt}²þ'W  êmæÝ’E×(ïÀ2 Vð±#‹xsé¬A'1G…Xô/ã_d˜9Åë™^·4² vи`E-ªÏð7X/bã5º,®l6ukÝÙNÞDÙ‚ägM‡QÒ—êz×Âû©C¼}ÿ³“j”ŠcûÀûZ ݦ’` €[Ôàu':Š–�µŠZÄù|_Ë< :¼¶Ø˜ôY·ßÎ \³ÌXÞÅÐЕPOŸ�UZ]×?ö@õ®tTZo³D<j\MJòɽýý½¨/9[Æ v4] üÆ£ÍpÐIÊšæHžÿ)êªÌ¼)ŽÍ h¸¨è)1;~2¯8²=ëxf¢šn{'"ëÀ:á$C×ÀÙ£?µ‚X|Œ8}fQõ;¼¶ØhÛý¶°É2#ܤžbQOßÁCÄÍ ï"8µWgÚ¼„/×è¤[þÊ vpдãƒê]cNk”QÞÒÓ×E¸f:~÷ýûûûiPìz´3 ªŽ°@OµîraŠ‚­p`s<º“šÿl¸£JÜÊâØhðyðò¢Œ®’g‰CãÜÑ}3ctg:9‘3õÖzzÜ..a1T;°ø³««é&¿;jD ~=¨—BaæÄ²Ð¨™´ð:tÏ!vfèyr]ýÂ:Æ7è†-£c—ǩ߬ª®ŽQK}üx úטG—[϶©¨P}¡]À%æK_{㺟ƒ+ ÞÉ^ÌÄéþR ò`Öá¬c ê1P^>üºhØèùã¹3ï&*2úëűÑa8�<Åß^–DÜ#ûfðcÁIäD,]QØáœËå,F¿RÁÇö-FÁ(ñqÏØjDÑAO¯>}ÿ«yÌÄæ!xoØÓ9ÆgÄ{ï¢î™´YǼ¨Ú¹ò·>¨þ5>FW$’‚:FËÏëçá:¥ÞÈG¨ïÿQ TtÏ%ƒÃ Ê�ç!œ>ü _ 2F•4Óou¸cÍŽ'nb1lÆÑP˜€Šáð,  †Æ¨ÄLÐ`ã >©ÎïYÊbt½+øØ¾Å_]]}˜gSË‹NÁ;¨^}ôý2Sš®¾ð#ÕǨzjp h¦[n.�µ\6CQ\…¼rìÝHƒ*BÛ¨è=N˜?EÁÀoaP5£3öA•ñdYPeúܨ¾¥2¨÷ÌÈ~ƒO$p}*ƒZÅÇö,~puõëüm;ÝŒ÷ôöWŸ~ëûïxåéÇÿ\Ô°~¦:¨\jè^jp–m¼k5ƒëäo3•£â1'D×¥‡@õæȯŸ¢ adÐk žp¨ÈéXTÎñ}}>Õ·DZTÃ3#¦dê _&ÔÌWµŠM,~#Œ’‘�âtþüãO¯’úô§EAU5-w^.P­ ú×XDd7¨¨Ô×?ÚG¸>|ÀÒ®gò&*º?¿H|bÈ'c…Ó�/ú) ¸ùé8.?€Ýèö?¡ÑQ¡÷¦ÊÌ£?³’Þ‘`A¡s¡%O xfl¨JȳÃ'¢AíXFgéħ?s,>£Y UÁÇ&?J£Äõøé³wßûÏÿÊÒéÇ›8­-¨†úK|Ýýk,¡+s™}DG’c§nPxÉöߺ>|ð¥ðrn=HßÄç3Ô<rF‡“¼2uú„„\·¤((X–£ð.¼”¡ÅcÿS‡ŽìÎâÞT©•)º£ó¼cº§ž%í%´%M÷͈Ä>ބйç( -^}ôl¨|llñßÓÁ(„Î(mg؆~üóßÿþw?ÆcÔ¯nN„¿2C7¿8s &¢þTô¯±ÆƒâLA×4ŒŠq'TÙÁ¾})\ïíß]´Öï­¿ã¹`?EëœxŽ§ï”žx/“Sþ¹ îf üë’”˜Ü ,q13ÜIx"Ü1µ}£‚zå¡Z`­¿œtqEòù Òù­§_w§øùÕ§ßÍafyÕ”B®q‡;¦…_(œʩŸªúâÚD#‚ûóA]N¹ "ƒV=õ‹÷)òHyV2ð¦€tñ?WWóèüÙß{÷¿ÿž¶wʇ¾]†™˜HЈH ZgôÔª@¥ï߃pÅÓ¨ûÿ¸ Pt—.lp÷oWa1w,ˆ[Õ-c±ˆÍy-*•ÎgOÙ€#jU�oÀŒ,‚K;X€HK2!0 ¼árÈxIûÐç�Ô‰Nãé>¦æá÷6Ô-j} ñ±#‹¸gOÒ×d^ u*nàY:%½¥n!ãMzpÖ áœë•ÏdEUÇzí?Q+wã¾;[ìš§Kvý%,ÖØõ´øoytÆt0/*`;2T>Õ§2Ü •ç=? jè¬TQÖ {ÁÌ6éd2)¹ÅVAÑ‚QâZ+¨TgjÎ÷TŒG]èLUТ]„<©sZŸ83Þº‡ ¢Î,Q³$!Cz úA#T×ÒXÐÈŠ@åeÍÀÒúB‰5–RîšÔµ€ºf‹ ¦§V`1£Y~ZJT?„{ xCä¢�Ýh«ª½  ª¿ki<hĪcmn¬HPűíQw5 hZî¢&7Ô EŹ/'§å-Οð/$‰6A“o1£99©Pƒx¦4ªu>Ѐ·r„Aõw- N'£ÑpN¬HaP¥ èk‚´‘šŠkgoowo÷¹g¾TÉ ¢â ism’ûbäM¶å\}ýt¡ÅHvî¾iPƒXî9A4ª×õ‡ »–Æ‚F|P¦jUÔf`´Š)ý\ÍÛZú‹Ø¿7§µ™_2cŽk\¢EõÓ (ÛprQ‹Šs_ø¹‰*Å,†9 Enüæfõˆ¶±R†j 2&3d)P¹Ôp×Ò(h¤FPÑPLÖJ)ÞMmÎ%Äó¨{oÏ5S2#¾ü”ŸR ÔDÅ å¾äžJa‹4cá£Äá¦ü…1«EAe̼Ž8jo#2ÓÍÕßµ44R¨â؆ÓbéÞu ð¹×o«¹³½¿Þø ƒ*ê®äüFÅ~¦âB½#96'YÀÏOÉQiPuŽ;çÉD‘tÍ’IY‹D†z¹/Øã Îý–eغZÚbsA¾Üà½|9[„8Üä/<3tN¶tÌĨRH9Pù¼&5Æ Ö‚XyRæg¼!Cà b!qÐçÁ®¥ñ žâYN¸ˆˆ.Ôä¼µ#iˆÒ2[¼Ö¥QÞ\ÿÛ›;¶ùÖ\GƒÔvÑÑÕ3 ºIp,°GBíTèņÖª®ŽñŠ‹Œ.>ÎD]žÓ×qŽÇÉY~î öxƒsáD·e•ƒ r.‚/'ù,¥(iÌHb0¸“ÙLq®ª_)¤$¨Œž3Y*çÅ‚t.!iy2ø¨½vð*²¿ki<h„‡.žå\LYwbC`êÏ¥Dì>/*º\mým)›S=š}³yï~ñ(MT¥Œîö:;ÐË[RêU;\àÈl\Æj¸…ì‚ÌYPr_H·ž úüK·¼Å ç‚|¹Šž ’ÏB) ‚J¢ qPªá„•BÊ‚z˜³¥NÆÛt(A[!Xdп°-©ÕNm�kYȹ4-½6GÂÚ\ü´è *{·yï~ôcP%TÎrêÕOƒð@Õ8ß‹ @N`æ¾ âsQZÚÓ±à˽èkJQ,¨ú'a¥"ÊiRkŽž*ÏG«-t±„öµ!JDmPïo7·c˜²ÿ¤ ¨¨i[ ¨\*ð�Ôá1.u …¹/qP]´ÅòcäË;¨cÍ€êçÁÐAõ+…±˜PN“zí nŠ( *Âôn,Îÿ­ýýR ÎVÐõvD5�õÜ„J' ðGîDû’�•STåd ‹¨Á—gAõó`è ú•BŠXLŠÞ¤Öê±(ÉE_Ü\PÙL4Ê—ï%0e÷ðDêœX&R2cŒš42.„ØÑM–c%’´¼_,5нhÞ‘N|PUhHêÇã–Õ ÷…x¼Á¹È–˜ é-:êÍT’/WÜŽ—ÏB) Bnò"›$÷ãõ¿RH‹IP›Ô* ŠòX74´DãLsŠ#E®ÃY¯GéõÑNóáÛ‰wîg7 ˆË+™<Íc ê¼_j6ž6r¡¥Ì4’’÷›¥V¦f¸šD½%ªð±£Cˆ·d‘\íܧ—ûBÒ$‚s‘qÉŽOJ{ýaÎEðå$Ÿ…V„8Üè/”Ñ'?Î$�å°RHiPéMêr v$uê@`O†ÝöªEÖ£äõÁNs+}ùؽæÜ•©$| Hqó4æÌ›W[ëç}gWÉÊTû“¬ oÏî+mQÌéü<âp§ÿ°RÈb‹)ÒæR˃Ú9Ó,èNû×ìüÔ«¡Çtw/ƒ)Ãìn³»[ÅA-~AW=%’%þyì­uÄk%+…”•1(ËS%AU:ÚõÍ!­J±Uþ·ööÞ¢\¼{¨Qe‹ÞÄ—pþÊc\+Þqšw]]3´%´—V²RH9Pi+þe@•tL×Ë´FuÃUþ­½Ý´kwo§ÌM”4íEáÝ™W 6î-ãLU5¯RTÆÌ:;… ”œÀ]o,Óåú{£l5w¨˜2Û»µÞÄ„~›öð/(!.RTqlB{øùðšhòû½%}ªîî²›ê͵˜Uv+ª.¼P(›åEãóÚá‡2ÞZé—s.ÛÃÛ:SUÔA6{ª;2t ]•ÓQ¯¼„cD€QµNµFÕUÁ:À˜Æ×J“Új†ûŒàEíZT”üóo‘¢œ„Ô¶ gŽe™8}ßrfºÓaw=ý=ЫW„_žÔÉ÷¶›Û_ʽfo5ãQ)+Ðü[–ýü·¿]îûQÙbu•`”H›_'­Õ‚‘µŽHíEµ% t.óASÆïõ¿Ù¿KݺÏÓƒfÎÀõÚôæÝR–·Ïó&ëÉf®Æ×jk85‡ ad vÔŸ¶¦ÙmŒ„!ë‰ôú½ý¿žƒ)ó¨IŸ¸F•õ#ZÉœ×eáºÓëTí "4Û5Únc(àòçCôzÒ˜tý#ÞØi¾ùËü}{ñ ÿï®íÞÕÃR â­óÿbU§²:Qf¨®Wí!Rµ1ª˜�•E—j?m¶=í÷û a Ù!>Ü5ûÞÿ£wvš[ˆå9—ë~“¶JuÍ*êGWÔ*d/wÃ&í¡^U®›u8ì¢6Tè7ºd@Žÿ`·…@e§Qß;Btgwï è¿Éœ]|XÚ¢ÿµ+ jÞfY¾ž‘-¥žÎÿÐ"QlÐóvj”Z°ìôºTbQ<G´jSdó´‹«¦®8iLû`[ /ìí~Á;ü;Íî• ®I PçmFÀx jÕ&µ7˼¥ºŒ�/ª^vÞ©°6ÌZ ¨`#?jQGϚ SÝ~ŒF6ëÙÚÛ½ã}²?'™w{Uw¡’’-ªª€ç„žù›IVjR ¨ñ3 ˜\¼7wþc¢Í‚ÊÜ,wj5 ÙV;|ƒMùasçàg;»)0µ‰ AE šÀتá0ƒžzt0Ñ͉ØûI4Sxl¿ê jÅ&õp¦::£õÐPuWÔ@/Ue´AL몮ºƒ­#F{êÁ˜T#õÌ^=}Å$`ÁÁyñtPÛv‹¨émû+¿ÿ§bŠW¥òäLmžP5æHcГfô‡ FµNßapÕ ¢á$l*31˜3ÓÕÒÌWÌH`›˜î9ŒÀéŒÞcÜŠ-jÞêÔÚÕ‡°*ˆlŠA£Žúô¿òµ?ÿ§¿ûãØÏ£Ü1V0µy õz‡*™WC]?öõ3@Y5w¢9 PW:DO3x‚Ùœö˜Á„yÇŽµ¨î†‡Ø´d2è“.ò³zæ :¨åŠÜ®Nul^²tïkw›Û¯'ÞÉuE€©ÍÓÃßÁ\ªG:™¯ð@‰¨ˆÔa$€Õ*6”ՉƨÌì›èŸ�õàò`R¨ù;¦­WkõµíævªDoî$j0µyzèûx=—gP§/"PJg¶×¢2ï¼:@Ÿð¤P±¨¤]M‚:Ä5ô¸8LTUg¦Æ© ê¦L¥®Ô×·›w3•¤ó&Q·š¹±Tׯ�TF‡ö!´Û<pÍèˆÜ©Úë1´Ð�`FZ¼@À£#ˆÈ›¹úá<QÁ;*<êÁWx2õд³lzâ €>)€Ÿhöá(w>¢¨6d*u­ ¾q¯ù&åmð„z…ÞÚdN#P©"%bsÃ5€º@+›û²}ª(vRß:§<½Ür â%}Úû}‹éÍ ˜Jh>¨i­ÔÕɾžýòRòA-G×,Çåx BÃr^Š\G·Ð;Þ¶J¸ÀÕ8/¡¨wvö¶èGè=ÿL%TÔ_¯êLV­Íèû=P% ãÉP¼Aç�Ž;q¯àU�Åß“[„F¦Å@õ—ô©¢î4¹‰S }±,¨Ÿ®êLV-êV+×ÿ��ÿÿìï‹ÛÊzÇCNOOósäoÚRÚ 9}QAI × wº`á…Cè‹jÕU Å+.7[,ß·í×Ó´)Û2¥¾D~± hŠÀ\¸ gÿÃé<3’,Ûòoýòf¿ŸõÊή3údæ™™g¾ÏâT<ª­)YèlHìõ¥ÇÞš©Õu62ØÔtK?O¹##¦æô]í –ž‘’¨c¿Õá™)•Õã–Éœ%¨Î@-º3¦Û›@méç*oäùü÷«º ûªnP5Ÿ¼"Üu܃§õÕˆ±_‚JTñUÓ‚êÞ�ªÅý¶¸Ê?áEPSÿï™éözP¿Ëléç*gäohÂÔœê¶`W½^™x6—Àr€1öKP©ò6´B.BUŸû_"i>Óc<À  ¦Ý3Óíu þÎÉ“õ˜æ®ö74ajN•ƒÚ‰› #´ÏGZªæ “¸c­ã»S;MW鸶 ,þÎXMXó— ¹ª"&ÃRf-†}î/€šZtÏL·W‚úðÑÉ“oVýâD9ûüMM˜šSõ=ªëASñšÚ°9%A‘ÈA"ȧ. ÝÖ,]…ˆÉ«BÔ„ý~ ªÏé‡à9—€ V¢íiœ�˜‚šZtÏL·W€º¼¥Ÿ«`é°Tc¦æT)¨”oës„>›°ešö¨§T;@¾‘IWA-›i…j4 ×O-OªÕ¨A[riÎJS‹î™év.¨¹{¥9z¹”á×Ü„©Œ??yq²Ã=THJAÈð¨~THAè4Ê‚"$*ZQ$¥J)PMžÉ¡_`ñ¸È: áE­¥@%4µèž™nç€úÍ“í0}ðàÝbÀßà„©Œ~í;åúiC¿õáÔbPOÕ ži Ùî<¨‘¸ÖZ滣ÆõçùÇ;S]ï7Pnn؆©O²õØ™Rªåsîû˜m'þß3Óí%PWléçjìÌ7I“¦²zúâÅÉo/�Tƒ"›·0û¨ù“Ög¿5R&=¶˜]i§ŒjZ’®‚Iä#Ž6:ÜVθ<·Tº×ß6Ïç÷H»zû<׌[YtÏL·@]µ¥Ÿ¯…òN˜Êê';u¨…ô¨kTöÚ¿VÿÕ¾ÙSÓí9P¿}¶jK?W ‹SÍN˜šÓÓ]:Ô²A-]õ/Pí jÆt; ê/WoéçÿúÙæhnÂÔ²áÆÏþj{Žûõ¯ÿoñZݧ]ôqµkXEÚ;ufºõ;þúIvqª¹ S¾ÌÞu.‘a¸-»;›@Ö)cÙ*µbÕpf*«¬ñĆ„)•]­©œäŠÕ[Ý5ÊO</RõQÔ ê›pÖ¿{ò{«Ê˳ê‘MG¯#ÿ5ÒG3Çär[<`õ@^¡ífU½ãô.ê¬*_ ÂºƒÔzA½šÝ¬µ SD®¶ÚÈ8ÈßµÄc<B0áuíŽ"^n2–0nxZHÝAêZPÏÎu¨F»¡Å�u’:¤Ä SÒvı'šÍ;ˆØ¯4êð>›cø¿ r,®0Á,RtzꮳP ýiCzÔ…¶É¼pƒ¤5‹LNiiK¡y)»î 5Ôþ”žçEŸ¡ì«éñM¶©€: QUÂTl;‚: €Bl’¶üx*þÄ)‡w!ÌÁ{$y•1rÔ êöÚÔŶ™©"iÍ¢’S|yëÌf÷SíAj^JdémìëPŒÙ,ÔÙ*êÓ'Û‘I úMÇCï“W½ÔCíUëY\£bJåø¨Ó:ÕCÈ |Zø=Bõ÷¨+ÛF³m@k–89EŒR#gÝÛOu¯¤æªjÄÇõ_çAÍ;à·?¨ïþ3nH˜šÙŽ ÃHcv è”Æ@›òN 4u/‘´`¹¾zˆØöÂ7Y•{Ô¼¶‘Ò\×PÁš%NN) TZóvÿJPÛT7IƒÚ£Ì¡jWŠ5ÙèO¦¤íÈ+ñÂXt£¶ ê"´ tƒ -!_³RÃ= uò±ÂeÌQêîQA‹m3óš„~Ž“S¨´PëÞîÏ•ºCß×»Ÿ˜õ‚êÝ©ˆ"]§Ë}ª•»È5ßmn#e¦ÀväUd˜F¦µ saöÀˆ “($­ÕŠ28ߥрpâ1Ÿ*^u÷¨R mc'3L£‚5‹LNyͨt%«ÓšíüóA%—ýO¾xƒêÓ~?äí.ïë9cPGƒÁ`7N_ªÈr9ajyôÖ°úÒYñzÉÊ€ SÍ5Q{é먳¿»<íø±5K©É)¼ÞœÔÕ1*Êú–P[÷ø¤»üvêËê ô1$Le{T²qvY*¨3ÅCË0v®t¶j>4½T}*O+¾óéòªêÞ ^Á‚ýQ$LeAM[GhÁ¨»½Ð£âôr ÆÒH iŽFõ.ùoêP´ÎMS·Ø‡â@…¹Ts¦²Ê•¸žõžO]65S§ƒ>ŠøÀMBHhÍ LFv  V¥šgSùë¨Nò¤-A³”nêÑõ›þ2¨¡Õs†áî¿[Ì¥š›05§\P{âŸñ´¯ŸM§=À”N•‡È1õd¢áüÔ�Æme"§cµSïl*g*”aØE(Øã¾‰'œ‡Ð/g2Å£‰çí±Ì•s¶1J[øZ¹rA5¡xÁ4z¡ž:ü†ÈkmŠõÓô²ôû4¡ö�•ÛxþBÇ.ìLÔv xúvЖI)]È=mëݼê)ý=Ç„7¡J˜rW—DA-?l!jB1¯%ÛÁ¬–^ùžN.àT›DX›0S¼ù”Á•2f¾ùC»O¦TJ¿èÊéÀ»N@Á™0=1@ð<˜f"ü]AM©œUä©Ôz¨ŠÈžÚÔwÿ¾…ÃTè Û‡Ä)-ž™†0”¦qÄÍâ†\Iü‘\ð/e…&T\êaÔÄé •xmòãË77 Ͷ¨.ñ^CE1šhUƒZïQÔAýÙÊ„)¾—9AÈ}/žÙ‘Pœ5¹-¤Ig*±¹®Z‚Vq“M†N] “ËNÆ`b8,åå€ji Ï*HÚ£ZüLÎFc„k°òÀ—jˆ  ~„Û‚=ƒêÖê—r�¨Ø¼èõ]wH÷Ì�ûÓ?S @\™„)TýÐøkÑþqÖì"؃1$¢PkéT0ê¹�ª8Âj0õ€VN»¼ŽŠCk°ù£‡aâyf©ÓÁ$ÀÖ4Ôî`Ÿáv|Ù±þ9=l蹎s é¥ Uo¦ß> š=âSΦÁÄF£ý¶,žþu µ®®Z�*äAa —ã{"*“× ‹SR][úÆ‹X5AR9Õ*¯:¹R‚æw¦"ß9k÷#„»=Î.,p<Nc=£^Ðÿéq'.ç,Ó¡îªJß Æ»§Õ‚Z¯©ßŽ âñóÉ;ãЂnOž $±ã¼–„Ž&#Ù¹JPã¬)ŽbšôŠkXn·F2‹Ó ÔÿR“`ÄÊjiòö•Ò¥æïõCG™™]¦N«ËXþ7»<¿ý¼¨Ž¯A© ÓW­Ê‡þz§ý»€j} Þ²çûøÙŸ$ɨĕ9A¬æaªÊš²m0¥‰(5’ý"ñÐdUåd¸—A,ÚräjÍûâs†ÑvI)ÊéÀ[´Ï ÌkPµ{-4:€QT9¨QÕ&·ÕºŽ-R¡GϼM²¡¨2'hì:âÑp3P)mÆ¢Uj‹‰ê@rŸF‘æ3™"=ñëˆ\™sÜq9÷nP3N[\ÞsyJ[¾T&¹…m+Òv šdÊ.£}÷üáì`Ð(o€¶8l«‰š}‘y¡ô›2¯­Òü¤ÓÁröÔÌ�á0P#gÁ½sYÂÙ¨uªõ€ß š$d£B{ûäáƒqºÑ¢¥œ)TÈG­]N^þ›@5‡œàõí üÆ&))%ª,VMÈð¯_µÚ¥¼å¤—·/ j[DPZx`ò퉴õ*+?s¸î{TP«Ö´”·£€³ ýknñ›}곈”,û[ŠÓ¼îvßA»ô¨Øž¿"Íî¨5§¥}ÿöj0Î"ß÷<oâGâùd`”röà›UtjÙ½ÁŠAõ™ïqv¨jGù²"66­î¨ pH—úþñd¼)ï=<‰})³¶SWjWס.G¸¦G%P!yçÎùÔÚ ¨ªÓÃÔæ÷m '%KS *lò¨ØJh›ïeð4” ¶á¹»¢3=VP½:R«Õ³GɳwXЦLŒ*+™$ì1ªÎ¢àaxéñI[o‹o)¹–çw¨|Ð-ö£×“æúÐó|K\ެðG÷hAÕ_s¢"={œ>Trt² -êóþ:‹ÒîqßìñžÞ£àÚ!{TÏÓ-Žu*zTiŽ�GR71å¤ëñ£µÞD¿ õôÉìy¶3¥iTANÏ¢`.BQ6Ô]fêçªGí÷t“[T�W¾£Ë?é.óXA­uÅ¿B=yšùfRRF^)Z5DåY*Ñ»ŒH^êpšK@µd ë4” ZÇ jíÞ“Õèñ³ìwåWï.Pù ÆgQPõ®Ï=Õ£Z¡y6*Ä¥þуÚi@©ÉòõhŽÓ£Ú˜Zj|%µ§JÂK"È‚Šåúâ;¨õnMU$H˜ÊŠ×vöyÍ@ŪÞö¨ÃŸE9‹A½6õ6£×„˜m—÷0oæ”aqÑÒ‡âùǨµ»ùV ™0•Õ1í Î@µ<Î C;§]]ER1ëwù“„Îp¨_D|(f÷a/šZl0GÀØó{^_7ÅsP|¤ Ö¿‡ZºTÂTF/ÔyÍŸEi·Ív’=…Õ’?N_=³SŽÔ†ì¡æëûÁÁúÛ8%óCi«ÿ>{*«ó0ÊF1ºC-ÅUê–VŠj«ÿ>5V³7û×ùÖn{S–A ênô]tߣ*_¨†_w£ï¢ûUiR¯™ï•jzõ(tߣ*ÕzuÞ\ £š+@×Ýè»è¾GU*þ\RAâôPEQ>¨G•å‡üºpUôXu›Z)¾êÜßÖZUêݨîFßIË+n¾ÛÝ¿þÇÒ¥ºÿN{¨± ©åzu\ .ëùn52þûKú•êcÝ5¦W©DPKø*IwÙ ÔŸÞÞþ]YŸ¤BÕ^ =Gˆ;——ªð8Ê¥<šKmÕh%ù.»ú?···e}’ Õ@Pßq_ˆùHæ¶•Ö£Ú\ñ¨1¾PùÜh¨!8½ý›Ò>Kej ¨EX¦¯+æ{0¨†ÇåtÄ%|áP‹Y¨ëŽ_¨w Jݱ†hj>¨n(óZü$¨¥pö½"ÄP]ÊÜõ?à@-‚ê®±ÖûËÛۻѥރº» ×B/\¾¸7Pnú5r<°LÕ1DPꩬEPñP¥@=þ.õ~èß]†‹˜`ãF“ ”!æÈUc¶móR-.ò@%¶«µ×O±;ö“•Ò¸C½]ê‘‚Ú^aÿU¨.70E�ê)ÔMAQÐc£¬#Tê2Õó?žÿ^€Ú¡ˆÚPóÊ3иƒXæ÷ÿüöö¿Êü4©© ^Fü‹G)ÉÒŠÂ@=tÁ_€ªqŸžJP;2Nõ€ ÚåŸÈ‚*ºo5ôÛMl4ro£ 3§»# 6pÁ_õ¨.¿„Š^Ù õ3Ï/z�¨o¡ PјORC?,ª†´èÔSŸ–£fªb;®  j7Ú(Õ ìbĵ[¨ Ô>—•‘>)RaÿœYÉÓ ¨må­:_Ðw=¨‡&¥ØIY–€uÔÑÉ‚>ÓDDÐA!34§2PAT—¢±•:h¡ÂîßßÞþs™Ÿ¦"50)eT“Ó¸:=¸O’Jô4t#æ&–`ú9úèeþÙFPMó»Œ`Þ$~ˆÈ©ñÄñ!j…<1¢µ¦œ,ææ¬Ð"¨âŸ‡Á>’ Ã¨zˆ²p’ñ|¿# 60ÍoTEIuz°OH*ÑSN,Û‰%˜w¡[}ý‚êÝ©¿Ô¢§µØy% [‹«¦EPäj¸“™/þãÝ�µ‰Óó NYâ &•èe¥Zî%–`Á ÖÏuŸöû!Ø3¬õ¸Ž¢äh=¨èT»È„wT¿yGQæ@Å<HÁ”!ªD–6z&–`ŸŠx€õ¡.ýFPëp_Žž­ïQ âdWÇî¨ <Ü7ª%bÔØL‚W¢— z~b &¢ñvž©[ ê÷Gu\:G@]�õ_Êú$ªÇ¥³ âuG0�5©D/AHb Ö0‡úð´Î7‚ºEK¨¤/뫵 Ô!ôgt—±#˜É{gý¤½õÏN,Á<]w&:á¤Û£{Ôm¼§lÎðÌJør°¾JPhé“ìLM'7>…°4®Nßžr’T¢ïM=âÃì_Z‚…Þ%µt<á<4 uPÚ)�ûð%Ö¯ÔHÜ å½þجÝÕ“Jô© ˜²kc¹|ªwÍ-bÔml' Ài… ø'ð5‚ÚDÛɲ³§ê5ò½u/5ÑÈ·tP³Æ¿u/5ѽtP·(6Ñ)ÍæÿПüòùó''°ý¸ 6±ØDé nQ¾§¼ÉÔÁzüBèåöï¿ 6±|Oé náÒ`PÿHpúh‡÷ß P›X­tP·ÈókòòÔã:TôOwÔ*ÓQÿ��ÿÿìïkÜÈÇ—»4¹8‰cäkš6/î(øMRZèÓr»µéáBAQ½yQdz.Ò¾J{/¶;M9p‹J}xbÐhA°Ž¡þ§3­WZýZÙ»öÌ®¿„³V–ÏûããÑÌ3Ïó}fýW jÜ‚Þܽ¨34í•9<µ¹±Öäòå�UƦ½ :#`Œ£w¼½imj5¨M½Ñ]©ÚÏFmƒš·Óüü«&æ›oß¿;}®áS@nõލ<E �èÇ-èK‚ºÙp#ó¬R“ë:ôÔ édT7›UØÔÍ¡wTLdÎÊ®‚¶“D¾ÔBPûT±•UÏ_]ê {¨™ Ò¬ j‘­ÅUÓM¥¿6 OÝ8NÇ’pcªTÝq úÔ¤ìÄ飂:¿Pë·¦2ãÞ·•J]È@Ý¢mîõƒŸkv×mk[ž/WPpã8Í%ãÆT ¨žÛ÷}Ñ‚žƒš”À�/?¦ P©ûÑ‚2ÛtIQ±.¶ä‰†˜o&t:êi¡ÖÁšÛÑì«uv©jGÂx ¨èÀ9ñEËZjRv²C`”‚:èõ -‹ê#þÕöø:màÚö>¯ª~Ç ì;YP›ÆnFT.ãýsToê¸ìÓáNþrjé_a½WÊÅÂSìÖ 4îVÂtÜ6Þit{ÔÆ‹©›U“Ò'¥ T0õ¼ìÑQ>ªZê¢øŒì¸Þßö·´î6ÑöíôKͼäªÿfDÕ¤¬AÔ¤ìÄ0€IÞ4õY…ýÝ%Ô¥þ¶æÒîVHñ6›°Ú¤Ó&žeÖù7#êEÉWˆRGµÇz jRvb"�N<¨¡iÙý°ôWÔÆ§.™ãT‘™½¸ðÔ2¨2F§Jv¦Â8vÊ[ИúFRvb’¾ S”-Àqùf©‹OÉ“”Ò`D…Ýeu›\!3kƤ”¸ìD;EÝSœãê_Q›‘ª�¨„ÍØGîD¼˜eUÆlÔùdOÕ€Ú«ó.—'{ª|Dµh\qk„ã; ZZPeLò»P_Õù¤É“=Uqëã^\ˆOÑãƒ`iA=–0ÉïR Bcßr\·ïÕÜ*šæOÍQsÕ¡}Ž+n‡qDÄ `ú Xa‚–Ts§.ªa!Œ(C|< êrmo ]¦9‚ É�ÝãÕ‹¸2ûj±©A>¢(¨R.ú›‚ -äâ£W±¶¨&H$Oq_ժߣ'2q;^GiÁq‡ž. ¨¿”1%¥¨Fß§Ao¯q²âqÍn¿«~þê©xŠ˜p;<Q¨á;Ìe9TÕ®Yr\“fÕ<Šˆ×ÒøwÔøø«*ð©ÃFÓÄí0=¢Ú´(MWUPÅ;ýfíàk´(P 4"½ ϱ;5©sµpWa®ÙSåVœ‰ÛazD5ãù©]B«j …&¾›ùÚ‡Kˆ6'uP ’Á¥V‚5«© …§¾¤î¢]í©çÅõ(âÔùîõÇmŒ·C€(‡Ô„˜Ñk·¿,‹©b'¿ÍY£q3©(Áþ’ ý€_Ö(»n5•ÖƒJ¥.ÄH”£LzM Ü¯™/¨}œ»bBûFÔwF¼üŽŠý€ÂE-PKÖR×êEVѾ(—n"Fér¾êVSi=ªTêÂÑ´M*f.ií6´·¾>Ns1_PEYâv˜œJ²÷P9PKÖR×jkoP2ô^›™Ü}h8žO"4Ÿ¦¯þYùÞ\0<EöÛ6Ýîv´mº½­±Q›ýëiÚ(Õùé&{ª±JZL]?¨\ÏöBIäû㡱ãa¯3·¢Ùš”Ô .¦§èé 4m‹Wd PÛ¶aíO–?“›|Ô¨x5"¨cž^tö¸:/æ]×]íæ{AP¿ žÖ%(ê%ÝÐoFÔßÎ!לVý/çêâTéwÑðaÿWúÅÔ°Í[>o¥ª^WÜ7»Ô5Ÿã·I=.ìÍC>•Ôê¿‹fO ž²)ûjÓ®Ö¦HëíÒ» 75SM•/ì›ëM߉÷DVP¯0*còsS3ÕTùÔ©•u––‹Ð%@5 � jÃÏñË!­›Å[SJZ0E]-P+íRäËž2üͧÂÿ¢rYÔ,<¯¨&)«êaU¯ré’RL;¡Qù;^0G5J®”æÕÍ ¯ó)«ꋪHªl Âˆˆ&Ö÷i²§²QÔ±¨9J€Ú"“TÙŠûlšÔ•ìðœ~/p쇘uý„ð|”Ð�8$þ.tB+é±É!tkúrå@ÝÊTJïÑ)¢Ñ\DÕ�µj»¿ÃN)¥ÛóÿRë$˜•�Ñ×ãáÐ »l"àêõ ‹Z�ü:ñ7„}Š<arù·§/W ÔìFÿ ?'‚Š€úªÞÊ_ P=Ñž ó»@ØÛì�Þ]œ@à‡>÷74¸§Lbr¸ËÀÌ]®¨8³Ñ¿’ 6uH¿õ’^ÛýñÛ;:‰Á5y(¶â‚lPMü wãQS˜òãÜ劚õD_IP[AûðµH€jQ<~{¿ãURNš¼�; N:Œ¯  “C~œ¿\)P;ÙÖ’« ª<Kû %ᩊP»Åór(Dõ y¯)·ßJü cP“C~œ¿\)P§ø)Ö¶sRÔÊ�•,ÇQIÈ? ÓÓ»œD1 ÇäAʯA4àþ†qƒƒÄäÏWó—+êTŠ_¨f€û^Ô¯ Ç©j½©Ÿ:ß™ öBàŽœþ Ô=¶Œwéù@‹ù„¿áî ÌÄäÐ8a—\®¨Ó6~yPEãΧÎíltÀƒü)e@Ôy¥I É^?4M˜Líø‹ÓÈ;ÿ|2&‡¹ËÕòîÏ GbSÙ9· à%1“w!uŸ78RÔº¢i´ÚÙSÓ…Ò9P­d'Rbb@À€úÈò= 8¤6Ü"áé"2u@UáÞ¿Òù¨9ߨ.uÅ}¶àäkF“}51÷#"¦å>=WTîý+=¢Nßùó ¢±!1 cPAä‰ì±ï ¾ò *pï_é5g‘’ÕIvBtæA…l^° ¶Èóëþ,ê´Ê#êóœuÔ—‰Í†AqTÍ –Tùïý«<¢æîüá)_ä?"§ÉîôPÍ¥¹õ+óïÑ£¹K•6èù‚þ<¨O/9‡ìN¯ó©€A­]18Ñ;�†4y+ÂúttU%P[da5'óRÞ ñ'ÍüÿþÜ©ë~M³©oÚS°3µëû}/Š£¨6ô››F‘wäïÄÆ\,ö½Óép²R *±ß?¥õ]þïÿ,èy,ZìÔìõC±ù¡ïð[?gabÆ•ÏP ÔgJäúeÕ ÔŸý~QÏd±"y¯ûÙ³§¢R/C5Am kÔ³05õÛ³³³E=“…j?ÈZ3ƒª“úê2µ@}µ NÓ T#PÎ8=ûÝžË5,0ñ›T¡2cEA½.#ŠK¨ÔÔKú†ƒªâ,µÀxbU§…ä¥N«ÔöäïggŠ©ù jkµA•?”:­úuR þ�UÁ!µÐu•AmE*”N¥•µÙa&0êö\:öeKT‡ÔN¡qSPõbO#5AUn9µþiúÑ}ž1 Þ>f§R‚<;û×=±yê´Ð}ªŽë1•­›Ì¨Ê«K5P[TúÌ”¬& ¶»ÝmNnõü±Ë½3”5—rëö­ÌˆjSQï¸Chj Ù“`‚e®E9PŠíN­6>ê¸n; *|̇éVMPÑôRê{ëkwþ0Õò©0‘ñ&žÀ‚â‘÷Š“Z=UŸ¢¨ªíNM@%@}>^?uv*ŸúÓÙÙ_¯î¹ÍK¹]©6¸~•õMl§U´}7Éÿ°5î 1Â!ÕB(4E-Šá¹ÁuAm 4’@YP»´Ó¦]íx¼xøˆ¤^’ ÚSÔo¯­sLÞ:Lƒêð2ísP“¶ï¼ÃfÒÐI� aè&y~˜'­BuAí¨¡šQMØÌX±kVÔè<µÿÖG÷>¼wçVkmcýÃVTHF:ðw8¨ã¶ïÔ¤+¼Å‰ÄÐ=ÞŒ¨ŽŒ‰¹±z *¡*–m°©ªˆM}p{íÁƃ»ñ*ªÕº}¯ÕÊ‚Ênç&ÔqÛwê¸+<0ž£šh˜Tù„è¾Â î)¡zP8¢–IEP‡¯n}t ¤Ýšú ² 4Àf ê¸í;5é ù)*Âz?Õ ]¥AU :¥Æ þmQÏd!Ú|ü㟲þí >§4¨|ÎIÙä³Ë@·}ç Ž»Âó{<;6é.ƒJú@qP•ðJM´Ä ~vçÞúÆýßþ¦ôsš€êx‰ŸOìA‘´}GIWx^´© }u^‹B±îÒóŽÐ*‚ª‚Ź–ÔÍGwïo¬ß»óiÞvb¢ ¨¯GÜ•ëÀ ùÎTÒöݤQ7é J|?t`DO-êC^‹âÑЊF¦Ê ö¼ëþ f×òúñµu¶lúÁfüÈ+g¦b¯_´}ç}áÇ]áõ]ùO TvÅá$ä¯$¨›U­'$Órúè ?ýhòš¶Hyƒæ•ΞRhH]P?yÌãOk?Éœ­Po@åCª2³Ô¥�õ³'÷>¼ÿäû¹olW ¨7 ¶”R7××7>|2û\-¨[ÈÆu¡¾ÍÇwl¬¯ý°8ÿ»j@½µ¥ÎºÆw½7g¿þjAíu´Jç9ºû¨ôT¨ •:.BG4ßÉRV)2¤~Â8½Ûàú«µÛíjÑsM£Åñ“øS•*ÔÅ€z<@½Cu8mµ\ÄÇ7w­5Pµ¿\¨¶ëj£/4-Ê¿ÙøS…`y •«ÔÝ—¾™Ú¤$ Ö¼H­C5vü77Öš\~u r!WÓÂì©\ü©JÃê‘­ TgDŒqôà8i¥¹¬ Ê¹ãrúü«ü¹r½}ÿþíô¹Å=Ûí ƒöÏÇŸ*Tà‹–Qéˆ*’¢  D £eõ•„Ô=šCï¨ §EZ¨íäx‚ZªR°Wý •‚Ú Šmü,¨¥¨ÔµÉgD¥¢ãtuü©BÝ:hªAÕ=` 0ÕòˆÏ¦ªqCø¥UÂTÕ@­?Ui4íÙ?­ P=·ïû`ç„PEWx — ÓrЬƒ¤×P:…@-þT!wX÷ùT€ŠœÄ©§TßsxWø¤!| ¨”„_h »žI—›¢¨Iüéñ…ÒD[†¨Sª™£zP“®ðICøP¯©i [Ô_PEüéI£ „" ŠlѲªL@=o97„/”Ò J¢’ÔÆñ§ µ+7O…f5é Ÿ4„_BPe QÉ ê…âO f˜,VÄQíñƒŠ(â]ᓆð@ý?���ÿÿìýÛFzÇÉ9Žßâ÷`äÐkжkܼÃí¢ˆ‚Ñ1DhŸÑ»‚«,]4Ç%pñ¢€N~Q41À?L]M¦X”Æ ’‚…m:¸û§3|ÑR%ñe(’»úÂ^˽ûXühæ;3Ï<Ó_N½ªQÔÔÜóO+¤'TB_Њ•)ן;=q TLb+Á©ðáðWÔÃz§r€º²ÖbaP Í?-—ˆ“ê¡Î+KRJ—ÕP›9>zŽz'Zÿ™1l6¨5ÒʡÖbP Ï?­Z?’Ú)š=Õîõ¡é`‚=ÇÇ£5Ë`µ®Sݔٵx­Å¼ ò˜Z!yÍ"¨ü õ‘K<kðäpý­)ªÕúÔ,¨Åk-æ•×üÓ yë֤嵭!Xgi¼E³4®QÁÔ9P ×ZÌ*Ïù§‚ãtw&¨mÍ$ÎàêAÊ´‡?(÷¾dÐ<¨Ek-f�•÷üÓr}b ÕWfPvž\Î~^OÜõoî†4jÑZ‹é@-cþi…¼´ëíÙ@•ú¬]–m´ê“œ2jÑZ‹ëA-iþi…Ö'£Dʪ‚°ÕôqýZíÕf%uÔ‚µW‚ZæüÓr¥Y; •TÍ"£«Ý˜ªMç?jáZ‹KA-yþi…Üô‰v)A• /µ›hº¬šŒügA-^k1Ô Ì?-LÝñ§µGûüt³]WA{5™öŸ•C­ÅyP74ÿ´\Òwü´££ÀÕ”*C®î0?Ar=ÖüW¯õg¯µ5œzPåÿOÄ™¿3‹¸¨¯$¿íÞs¯Ocj4®ðþýþÕ—½Ë””=Î?ÝÜÐüÓrS­ñÇuxfaì C‹o1i+§Ð&ÞèÚQÊTæžT1ö5IŸ‡BùÑó2@ýÛ Ï?-×Ú}§ÉÚ“ÏŸ]âÚTŽGZƒÇתÇé!÷²iÆ”LV”åDEK˜ ýe€ú»wTL…ÖúmR«´÷ðPfºB‰&¹ô„svŠJü¥U&èd Iœ®}ÿ³o¦Ç——Óõïýèn-X½6“H%kÌ95•e»´NÏ&¢äì¬=ÝYX{÷“)¤ŒÓò2üëÀ*J™‹²Õ:ñµ©¢îÒN_f¼6»Oâ™}ÿ£ýC„({ð‡_–»eïíjYÍiP·ZÔCžK©c}LDAeä ¡-*¢ ÙÖ¿üv éןì¿û§ÿþOv¨i~PýŒ+AªeµSÌ n×㢳©ûþºì›´uÆô·.‹”WjW bhÄ^~ÿ³WÓÞþ›OéÿÃoÿy÷þÝ[oG žzÄ9wìTeê™^ P…êXñ•OÙ¤öú·|•ô“Ж ®ÌvÑûCÇPg-Ó1Dã©ÀLéï§¾úüï¦ÿðCÑ?¡þí\o£t}IK¦Å–P+aÕnLÕüf(Ï¢ ¢hf ÓñR`Kݧ̕ -‚ a·`gÖ”~ûŇñóËܺÇ8¶¨À`‰%ÇÑæ¾˜Ú‹IÚ{.))åÆêÍ ²še‰«Úû>û€Êð+È5DHÇO-PÑ!† ÂÀM̘ÒãþåŸÝݽwëÁíÝû„YP5{&‚ø MÓfë÷DV7Ü”Žášƒ64Ì �£‚¼žûGƒµÇ¶é c¨Â†YU'×|î“¿2 ¨:F€�r¨au6V’¨ m©ç(li“Li ¿¸yçþ[·ýd»÷(Ì‚*¹XéaOG Ûg‰†€ Š6¥˜' ×b•BYF Ø5 � ˤ²{«A6Èêv U‚OÒ¨/(æ<6«ùe¨¢?~ m©¨ûmó2Sʬâí·îß¹\gÀÄ@u]Ϥ¾Ó=gE>ú�tÉK¶7 œô¢M)ιŽúÕÏG5k…�éÀêåtpµ2Ã#¬Š“í@ª¥Péa0Ž;tPïãÐÆ(²¥ÂZSzw1%t¶ëgrüÌ>6¨š¸á®½hSŠNX:_¶ë4µGA5èu¥UØ«ÛT9§M¤jÁsÒmY;ì8 jI±¡¶t­)MúŽË@e~Óvµ`×^´)…KN)©6sÅAíºHq”´  ŒÕ;%²:Þ®H•$'íмïaQVË¡}?ñœG”UVu-•)MR2¨’?úÿÎTXâ4ТM)h¡} úFÿ²JhºíÒå± ÓÔCÛ*ö¼”5þÐ~ ;†$œ±1”úÔ7·éMi‚¦ N +ºŒQ„%Jk8ÄèÑ‘T¸)…¾¢[à…ÚôeV€qH3ªÙJ¬XXêå°ª{Ûizˆ{©n‚*Ó¡>öÓ£ü¹‚ì¦tN¨zTXñÁ}VÅÖLú§â¶{*ܔ⚧¨ «‡AFú›ú�$i„ê»õ£þEñgUÞøËÔaºI*qÄZ Ê”sšÒ9-]ë?êMäQx¶’¿Ebý{»½p¼‚ÖWzÚ0Z,ÈX{Š/«Tõ%·Ê-9]5ã™eæ6¥sâ’=¥ø5�¥gù@x²ÚʶGj«ìz⥘NÕ‘*3¥sâªäyš0r©¹ê£òaUܦJ—¯³¿þN6¥sâ“* Õƒ©9gußÙN n@£u¤ò0¥sªY ÿb¬î;™÷œn•G£‹å7—)SÍ@ ±ºåtS[‰7 ¾Ñ©¨)Sý@r³j_Ù©‡¾*Ñ"©¼Méœäwq9=;«VNNëGÁ‚*z4ýì9õb´f¶âϘҸ˜Òyq¾K¾ŠGå+«fÞLéR0/o݉I»<!ZQ‚ÊŒ)ý„›)m–Ò³êåÎè¯#M‘%E—hJ§t¬ÚùÇQµ¤ !¾ó¿ÿS¦)m¢Ö³š»ß¯+‘Ï˜È N¾äˆWˆï^º)m¦V³jåã´®ÄDOM\!¾÷é7õ5¥-ë:¬ôh쥬ŠNÎñ~)˜qMaálÒí¢!þì㯧ýý«Oß¹Óuÿº˜RƒAZõ‰¬Šn^Z7 jâ;¿úâÒ”~þ¾ÿÜ ÈP©È”Ê®ê˜òx&K†ªÇž0 y ÈÐÚt…÷VE/7u¢ î!ÆMé¿zgúüþy…¦”´„‰*Œã ¹U–8 Ð©à`×V[ø¬ù$ɯÌ*ý”¤!ΘÒ{åµ›wvÿú¯*1¥Um D.†E+EU•ýU§—Œ ]?Q,]O¹‡†³¦¬vp®¼¾Q°DO+vmc›ˆ3DjJÿ3¥ñ—ÞðMék«97E6ŒÕŽjjàQ//1Yp*çú®™ä³ú8_%´ºP°BùOd_ÑÜg 1É”†ºÁLé›?ðâjZ+*ê#ÔéðiàƒzuþºÍ*\⎠T¡¯·ÿf÷ÞÍ×JAÝC\fJwv^“™Ò—O<ôFÕ� “ž„¿mKTI¸AFrüºëãÈ’Š.1[$v‰'f¬ÕÈûá¬]ÍÌjåÔ<Ä÷>}µÜ”Þëöóï¸e¥Hú/UêÜþ˜ËF^œ~©Hûá4V· .×zSšô¯F^…=+ÓÜÌ©T‹SÜ|x—Ó§YYm*¨’âŸNWZˆ)Mib¼µ9‡ºfêÌMKeb5T©w”ô4/ ²)!DåÜDîädáyN!f0¥IzŒ«tµ•š0ÜOÏj¨=Ç"o˜T¤˜™•¢M@û¼Ÿ#Àµ!f6¥ :œ|U5õÓW“ä2)YM  ¨¯ÕÄKnŸ$T—N3SK !zíöcáù©V|ÈV„˜Ï”&hÏrêã k!ѱ–——JÃê"R˜RÒJpQãÞÂý—lX¨¸Á'G2‘mJ ‡ O?Ya‘ð™âà)C\kJ_ÏtMÎL¯‰äu«¦kY]¤@#ÁÝ•ˆ-™X‘>•bCÍFcm $ž¹0œÙ¨4 ¿Ùo»} ¹�ŒHÇA‘ðÙâàiB,hJ“$ã…#ø®¯Œ4U{V³ºHAÂ.•LÀ QüšÛ¬ ¦‚qïÄÃS(@†æª’ltú%ët–£` |ãê Ÿ-¾.ĸ)ý:§)MÒžcm»_⹓²ªä V)€Q+„±h*ðkn{S(ª•:iLž˜="ÃiLAíå™âà+Cü÷ÿâcJ5ò¶óTT/Kòé2V)èÓûî7ZÄ]U¢íXõ ù|Ú�‘. ΀:_|UˆÿÂÍ”&é1~Z5%Õëiæ$”DV( Á 1AmS_P=¨=?BìÒ•ÆÕf@+¾:ÄÿãfJ“ôðÚwÿ¢åä)Ò»ÈjÒ$%ö»NVô½G§P{µèúX›©Ð†TÂ4¦¾×–#õØl…_$|¶8øêÿŸ)MÔàzþeœ›«oì$/û°»Ž‡´§o3+@­#Éc'n]€)žÙ^˜]ÝG¸&œ˜´±ìyðÔV˜!ÅÈt´ Hølqð”!¾ÆÁ”&IÆUf€V,T¬FoÈêë»·’G*G¶=Dž?‹ŠˆwŠM¥=¡wÞóÐ »;…‚¾vÞ­Ô.Â2à@ 'T%›+‹O"/Sš¨ñD©˜j¤LŠ—@»AY½¿KI]·Ö/ù¿@»Ëº~éhŠ„|€fOý€§)M”Œy” kœ §’ç7ØQÅ·2Pà%ô£ë(à¡RAýóÝû÷îÜz³\ÝúÍorëšé'¿ý §·õ¶øû?¥¦ í¬4�Ô_læ¶ýôw¿þñf~R=ôã_ÿî§¼¾×]Æé½LMáút¥Æº©ò{£ë4ü—ñˆã gÓM  !¦‘ì™×dNU4=®òÜcˆPЀÓi€Ïªfh:Ë?wºB   wˆGl¡a¯Bu î<´ÜGUcT¶¹V)çE6€¢æÉ0e`ý qLÓô.€éÅô±¯ ¨lõÌyëŸì’QŠoiÉWpTzêÁÁ8_y‰õj�ì³%ɦôO—l¶ÐO¨¨¬ÿ眧jTû³Ù\®x~1½¶“êx̬±”Òëûj�,Äy¾J¸ì´u2 B §fBlWêÎÞ˜ïÞ?¤ºÌ_t'ÑÁb )ˆ*—wJt(ˆB”†ß)6†ÂýñÐ0mÉß‹âØP r=5bºaˆÂ65)ý!{¦jPwv—ãTUwÛëè®# "Tmj„UclÁ–�‘®ß«c‡d¬†—r’ì:eÝ� ¢»ˆ@©O^*6€†˜ôxŽèkP‘.¤¶‰»aˆÈÚ6è¾ÄAˆ't'´ð�@í(Db !|Aò@,¢Çß[Ü4ªBNÓ“DW $è&m0‘È‚! §aEŸ�T•HÁ‘ÂKù¨c}_’9 Õ� ¦þ)‘€Ä¶:샀K_ð Ÿoh8ý> w# <í¿¤ ÃmÔﻤÝ%} \†ˆFƒÁY5œR=ÁcN&‘Úb­ª#h ˆ­}èÒ^X<Y˜tƒŸúAp5|ÄA­q¾R’Ô� ¦!jl ‹Ã6i«Þ‡Àý“`šlßÉQÌ ËqŸ½Ø&±ºÓF¿À™œþ[q™�ˆ@U¨”FC?eÍ©"Ц46Î »~^À@ Ö*P™7õÛU C”œSà²}'XÓ.�8mâ B—!N÷}C29ª ¨l�qhUç@5F‚JéS-V\Òc^8Ö¢î{(º€uýÁ£‚j¡ò†ú15€‚Ä‘ü%øL££¸쥰"ÆBˆ‹þ¥w¬( ‡Ÿ×Ô½`1èú]Ô Š"mQƒlmè)QzÊ¢\¤=*$Úé8.ë/W(fÐP°9ºÍvBÑ-,)4%€†ŠÔf‘ØÊ1 O Š>;´ý!]ÚmjdÎû@÷zÚièð 1¿Îð¸Ø°ŠMø·D-"KžÛÒ‰©£Eö΄8Á\˜A0²m¸ÏZ`v€°>* Îx~øFÕŸ‚`M›Ž÷ qèx¶ôCH € Õ w&ø(õ'ÄõgÍN\:4iì’EXe•ê&µÑÄs,s\æTJ&a›^UGmud6¢_žS¼Œ«lo ÓFP°dBÛŸì…Ç=õÔÔXÊõ¦ºl¿Jt¥ºtú3zâ¹¼Ëÿùæ´Ü}ªë•=Ò«¬JG0öUK(á¶TõugG¶ð€k ê¸È(1«P4°Å5•o­*¥àÿ��ÿÿì1‹Û0€ûüΓ—z=²XtÒB¬)x2Äžºi)‡ Òð nÓo|•›kiÜ]Ç–Ôó·&óùé=éaq{ÕÛ_˜&ÄᤫR ã–ž& ÞðZTÍY7Òb¹Zo¶Ûf·{¤zMRSE0ZUÆÔ“4úÿƒFf¿­¾3©Mßk¥uL Î à§Õ‚ƒ˜vÍ! ® q¹å…ƒh J§Ï�×ѧÕ1kËad—dú‹,¸"Äûë¬U5ŠEпÈ)¨Ò÷+€NpW* þ6õ"°àÒ—ÍÞŠ#tô7X ì}¥5îxÔD`ÁE!®¹±‚D,é‘„tVãj)lçûšF`ÁÙ!.¶Òš6˜#§$¤Ï«Þëլϥ¾-ý…ç…èê‘ .è-I°Ý,üYºh4È0Ѝ,ÀÀ·ïŒ¹¢y'í3õZB¢Ör‰5+¹µÔËVÔ)b°�·êŒâ»ÍêÕs.ï—›Ð`I¸›£ÃIk6é;€ªƒº¨±X⚪ã–m§¤”ûN VSãÔÅä­ÍÖdÖlÍÜOZêGdA’#„{ÊC‹mdˬFT#ž]Õ£q™4˜õþM>±‘j@óÛÛZTÜ­ž”„™Ig¢$'ü�F²ò&º%“|vtf RÜ ¶ãMY\UºfEÙôçàF´8„.dæ&E¤•OζN°¦BÅצî²U süIö“¾ÿÁ̧"E¸n…r-pßkµœRöÂÊÅ^i}üT‰¶Æ³ 3¾IÒ<w-1!õqýqžG3í833s?��ÿÿ�³GaÅ´M6_����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/Shift.html����������������������������������������������������������������000644 �000765 �000024 �00000016143 12650447076 017312� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>ExifTool Date/Time Shift Module</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <link rev="made" href="mailto:_securityagent@gamma.local" /> </head> <body style="background-color: white"> <table border="0" width="100%" cellspacing="0" cellpadding="3"> <tr><td class="block" style="background-color: #cccccc" valign="middle"> <big><strong><span class="block">&nbsp;ExifTool Date/Time Shift Module</span></strong></big> </td></tr> </table> <!-- INDEX BEGIN --> <div name="index"> <p><a name="__index__"></a></p> <ul> <li><a href="#name">NAME</a></li> <li><a href="#description">DESCRIPTION</a></li> <li><a href="#details">DETAILS</a></li> <li><a href="#notes">NOTES</a></li> <li><a href="#tricky">TRICKY</a></li> <li><a href="#bugs">BUGS</a></li> <li><a href="#author">AUTHOR</a></li> <li><a href="#see_also">SEE ALSO</a></li> </ul> <hr name="index" /> </div> <!-- INDEX END --> <p> </p> <h1><a name="name">NAME</a></h1> <p>Image::ExifTool::Shift.pl - ExifTool time shifting routines</p> <p> </p> <hr /> <h1><a name="description">DESCRIPTION</a></h1> <p>This module contains routines used by ExifTool to shift date and time values.</p> <p> </p> <hr /> <h1><a name="details">DETAILS</a></h1> <p>Time shifts are applied to standard EXIF-formatted date/time values (eg. <code>2005:03:14 18:55:00</code>). Date-only and time-only values may also be shifted, and an optional timezone (eg. <code>-05:00</code>) is also supported. Here are some general rules and examples to explain how shift strings are interpreted:</p> <p>Date-only values are shifted using the following formats:</p> <pre> 'Y:M:D' - shift date by 'Y' years, 'M' months and 'D' days 'M:D' - shift months and days only 'D' - shift specified number of days</pre> <p>Time-only values are shifted using the following formats:</p> <pre> 'h:m:s' - shift time by 'h' hours, 'm' minutes and 's' seconds 'h:m' - shift hours and minutes only 'h' - shift specified number of hours</pre> <p>Timezone shifts are specified in the following formats:</p> <pre> '+h:m' - shift timezone by 'h' hours and 'm' minutes '-h:m' - negative shift of timezone hours and minutes '+h' - shift timezone hours only '-h' - negative shift of timezone hours only</pre> <p>A valid shift value consists of one or two arguments, separated by a space. If only one is provided, it is assumed to be a time shift when applied to a time-only or a date/time value, or a date shift when applied to a date-only value. For example:</p> <pre> '1' - shift by 1 hour if applied to a time or date/time value, or by one day if applied to a date value '2:0' - shift 2 hours (time, date/time), or 2 months (date) '5:0:0' - shift 5 hours (time, date/time), or 5 years (date) '0:0:1' - shift 1 s (time, date/time), or 1 day (date)</pre> <p>If two arguments are given, the date shift is first, followed by the time shift:</p> <pre> '3:0:0 0' - shift date by 3 years '0 15:30' - shift time by 15 hours and 30 minutes '1:0:0 0:0:0+5:0' - shift date by 1 year and timezone by 5 hours</pre> <p>A date shift is simply ignored if applied to a time value or visa versa.</p> <p>Numbers specified in shift fields may contain a decimal point:</p> <pre> '1.5' - 1 hour 30 minutes (time, date/time), or 1 day (date) '2.5 0' - 2 days 12 hours (date/time), 12 hours (time) or 2 days (date)</pre> <p>And to save typing, a zero is assumed for any missing numbers:</p> <pre> '1::' - shift by 1 hour (time, date/time) or 1 year (date) '26:: 0' - shift date by 26 years '+:30 - shift timezone by 30 minutes</pre> <p>Below are some specific examples applied to real date and/or time values ('Dir' is the applied shift direction: '+' is positive, '-' is negative):</p> <pre> Original Value Shift Dir Shifted Value --------------------- ------- --- --------------------- '20:30:00' '5' + '01:30:00' '2005:01:27' '5' + '2005:02:01' '2005:01:27 20:30:00' '5' + '2005:01:28 01:30:00' '11:54:00' '2.5 0' - '23:54:00' '2005:11:02' '2.5 0' - '2005:10:31' '2005:11:02 11:54:00' '2.5 0' - '2005:10:30 23:54:00' '2004:02:28 08:00:00' '1 1.3' + '2004:02:29 09:18:00' '07:00:00' '-5' + '07:00:00' '07:00:00+01:00' '-5' + '07:00:00-04:00' '07:00:00Z' '+2:30' - '07:00:00-02:30' '1970:01:01' '35::' + '2005:01:01' '2005:01:01' '400' + '2006:02:05' '10:00:00.00' '::1.33' - '09:59:58.67'</pre> <p> </p> <hr /> <h1><a name="notes">NOTES</a></h1> <p>The format of the original date/time value is not changed when the time shift is applied. This means that the length of the date/time string will not change, and only the numbers in the string will be modified. The only exception to this rule is that a 'Z' timezone is changed to '+00:00' notation if a timezone shift is applied. A timezone will not be added to the date/time string.</p> <p> </p> <hr /> <h1><a name="tricky">TRICKY</a></h1> <p>This module is perhaps more complicated than it needs to be because it is designed to be very flexible in the way time shifts are specified and applied...</p> <p>The ability to shift dates by Y years, M months, etc, conflicts with the design goal of maintaining a constant shift for all time values when applying a batch shift. This is because shifting by 1 month can be equivalent to anything from 28 to 31 days, and 1 year can be 365 or 366 days, depending on the starting date.</p> <p>The inconsistency is handled by shifting the first tag found with the actual specified shift, then calculating the equivalent time difference in seconds for this shift and applying this difference to subsequent tags in a batch conversion. So if it works as designed, the behaviour should be both intuitive and mathematically correct, and the user shouldn't have to worry about details such as this (in keeping with Perl's &quot;do the right thing&quot; philosophy).</p> <p> </p> <hr /> <h1><a name="bugs">BUGS</a></h1> <p>Due to the use of the standard time library functions, dates are typically limited to the range 1970 to 2038 on 32-bit systems.</p> <p> </p> <hr /> <h1><a name="author">AUTHOR</a></h1> <p>Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca)</p> <p>This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.</p> <p> </p> <hr /> <h1><a name="see_also">SEE ALSO</a></h1> <p><a href="ExifTool.html">Image::ExifTool(3pm)</a></p> <table border="0" width="100%" cellspacing="0" cellpadding="3"> <tr><td class="block" style="background-color: #cccccc" valign="middle"> <big><strong><span class="block">&nbsp;ExifTool Date/Time Shift Module</span></strong></big> </td></tr> </table> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/standards.html������������������������������������������������������������000644 �000765 �000024 �00000036304 12516202772 020212� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> <html> <head> <title>Problems with current Metadata Standards</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <style type="text/css"> <!-- a.ref { text-decoration: none; font-size: x-small; font-weight: normal; vertical-align: super; } --> </style> </head> <body> <div class='index'> <a href="#TIFF">TIFF 6.0</a> <br><a href="#DNG">DNG 1.3</a> <br><a href="#EXIF">EXIF 2.3</a> <br><a href="#PhotoInfo">OffsetSchema</a> <br><a href="#JPEG">JPEG</a> <br><a href="#MPF">MPF</a> <br><a href="#refs">References</a> </div> <h1 class=up>Problems with current Metadata Standards</h1> <p>It seems that all metadata standards have their own unique problems. This page documents some significant structural problems found in some current metadata and file format specifications, and gives possible solutions to these problems. <i>[Also see my <a href="commentary.html">Commentary on Meta Information Formats</a>.]</i></p> <a name="TIFF"></a> <h3>TIFF 6.0 <a class=ref href="#ref1">[1]</a></h3> <p>A significant problem of the 1992 TIFF 6.0 specification is that there is no way to distinguish an IFD (image file directory) offset from a simple integer value. As a result, new IFD's may not be created without risking corruption of the files by unaware software. This is not only a problem for proprietary maker notes which commonly use a TIFF IFD structure, but is also a problem for extensibility of TIFF-based RAW image formats (as demonstrated by the DNG 1.3 specification -- see below).</p> <p><b>A simple solution:</b></p> <p>Use a TIFF field type of 13 (IFD) instead of 4 (LONG) for IFD offsets. This was first proposed in 1995 by Adobe in their PageMaker 6.0 TIFF Technical Notes<a class=ref href="#ref2">[2]</a>, but unfortunately it never found its way into the TIFF specification. Even so, Olympus Optical Co. has shown some intelligence and is using this field type in the maker notes of their recent digital cameras. </p> <p><b>Another useful addition:</b> <i>(added 2009-09-27)</i></p> <p>A number of camera and cell phone manufacturers (Concord, Kodak, Motorola, Nokia, Olympus, Pentax, Ricoh, Samsung and Sony) leave blank IFD entries in the maker notes of images from some models. Presumably this simplifies the embedded software by allowing the output file structure to be kept constant even when the number of maker note IFD entries changes. It could be useful if this feature was added explicitly to the offical TIFF specification by defining a field type of 0 as a "free IFD entry" to be ignored. (Note that this ability already exists implicitly at a certain level in the specification, which states: <i>"Readers should skip over fields containing an unexpected field type"</i>.)</p> <a name="DNG"></a> <h3>DNG 1.3 <a class=ref href="#ref3">[3]</a></h3> <p>With the DNG 1.3 specification of June 2009, Adobe added a new Camera Profile IFD referenced by an offset using the standard (and unfortunate) TIFF LONG field type. This means that the new Profile IFD will be lost if the file is rewritten by any software which does not have explicit knowledge of the 1.3 specification. But to make things worse, Adobe didn't even use a standard IFD format for the data. Instead, the IFD begins with a TIFF-style header and uses relative instead of absolute offsets. This would have been a good idea if the IFD was stored as the value of an UNDEFINED tag rather than referenced from a LONG offset. (If done this way, the new information would have been preserved if the file was rewritten by unaware software.) But as implemented it just adds to the pain of parsing the file by requiring even more specialized code to be written in support of the DNG 1.3 format.</p> <p><b>A simple solution:</b></p> <p>Sack the Adobe developers who were responsible for this, and use field type 13 (as recommended above for TIFF 6.0) and a standard TIFF IFD structure when adding new IFD's in the future.</p> <a name="EXIF"></a> <h3>EXIF 2.3 <a class=ref href="#ref4">[4]</a></h3> <p>The EXIF specification has been the standard for digital camera metadata for many years, and while the digital camera technology has advanced significantly in these years, the EXIF specification has not. There are a number of significant problems with the EXIF specification which have never been addressed.</p> <p>Some current problems with the EXIF specification are:</p> <ol> <li>Maker note data structure has no restrictions and is easily invalidated when editing EXIF.</li> <li>No facility for storing the time zone for date/time values.</li> <li>Very limited support for alternate character sets (essentially only the UserComment tag has this feature).</li> <li>No alternate language support.</li> <li>Byte ordering for "Unicode" text strings, and the meaning of "Unicode" itself is not clearly specified.</li> <li>Mandatory tags are unnecessary and painful to implement.</li> <li>ApertureValue and MaxApertureValue are stored as unsigned RATIONAL, which means that lenses with F numbers faster than 1.0 (with equivalent APEX values of less than zero) can not be represented.</li> <li>MaxApertureValue is defined as "The smallest F number of the lens". This definition is unclear in the case of zoom lenses where the maximum aperture varies across the zoom range. Some manufacturers (Canon, Nikon, Sony) store the maximum aperture at the specific focal length, but others (Olympus, Pentax) store the absolute maximum aperture of the lens.</li> <li>EXIF is not extensible, and is missing definitions for storing some information that could be very useful to camera owners (eg. camera pitch/roll angles, sensor temperature, face detection, auto-focus points, image stabilization, flash exposure compensation, etc).</li> </ol> <p><b>Simple solutions:</b></p> <ol> <li>Specify that maker note data must be self-contained (ie. must not exceed the bounds of the maker note value data), and must be relocatable (ie. must not use absolute offsets). <i>[I would have suggested defining a new maker note tag with field type 13 (IFD) which references a standard format IFD, but I am afraid that no camera maker would ever jump on board with this suggestion now that they have already been seduced by the dark side.]</i></li> <li>Change the specification to allow an optional time zone of the format "-05:00" to be appended to the date/time string values.</li> <li>Change the specification to allow UTF-8 in ASCII-type values as recommended by the MWG<a class=ref href="#ref5">[5]</a>.</li> <li>No simple solution for this. XMP<a class=ref href="#ref6">[6]</a> is the only reasonable alternative if alternate language support is required.</li> <li>Specify that the Unicode byte order must be the same as the EXIF byte ordering. (This is the only reasonable choice, but for some reason both Microsoft and Apple seem to write Unicode using the native processor byte ordering. regardless of the EXIF byte order.) Also, it should be made clear that by "Unicode" the EXIF specification actually means UCS-2, although updating this to allow UTF-16 surrogate pairs may be a good idea.</li> <li>Define reasonable fallback values for required tags which are missing.</li> <li>Allow ApertureValue and MaxApertureValue to be stored as signed SRATIONAL.</li> <li>Define whether MaxApertureValue is taken at the current focal length of a zoom lens, or over the entire zoom range.</li> <li>Expand the standard to include additional useful information available from modern digital cameras.</li> </ol> <a name="PhotoInfo"></a> <h3>Microsoft "OffsetSchema" Tag <a class=ref href="#ref7">[7]</a></h3> <p>In February 2007 Microsoft proposed a new PhotoInfo tag called "OffsetSchema" (hex. 0xEA1D, dec. 59933) in an attempt to patch a deficiency in the EXIF maker note specification (see point 1 in EXIF 2.2 section above). This tag represents the offset difference between the original maker note location in the EXIF and the new location after editing, and is designed to allow the maker note tag values to be accessed after the location of the maker notes is changed by editing the EXIF. <i>[Bless their little hearts for trying to improve this situation, but while the idea is good the implementation is flawed and ultimately unworkable.]</i></p> <p>There are two main problems with the implementation, and the second is a show stopper:</p> <blockquote>1. For this new tag to be available to a single-pass metadata reader, it must come <i>before</i> the maker note data (hex. 0x927C, dec. 37500). But since the EXIF/TIFF format specifies that tags must be stored in numerical order, the maker note tag (hex. 0x927C) comes before the OffsetSchema tag (hex. 0xEA1D).</blockquote> <blockquote>2. The OffsetSchema tag will be invalidated by any software that rewrites the EXIF and moves the maker notes without properly updating the tag. In an ideal world all application developers would release an updated version of their software which treats the OffsetSchema properly, and all users would update to this new version. But since this is the real world it just won't happen, which makes the value of OffsetSchema unreliable. Too bad, because this wouldn't have been a problem if Microsoft had specified that the new tag represented the original offset of the maker notes instead of the difference from the original position. With this change, the tag wouldn't need updating when the EXIF is edited, and the information would be much more reliable. The only problem here would be editing software that explicitly changes the maker note offsets. However, software with this ability is rare, and it is more reasonable to ask that the OffsetSchema tag simply be deleted by any software that updates the maker note offsets. (Software must be fairly advanced in the first place if it parses the proprietary maker note data structures and changes these offsets.)</blockquote> <p><b>A simple solution:</b></p> <p>Create a new tag which comes before the maker notes (hex. 0x927B, dec. 37499 would be good) and represents the original offset of the maker notes.</p> <a name="JPEG"></a> <h3>JPEG File Interchange Format <a class=ref href="#ref8">[8]</a></h3> <p>The JPEG File Interchange Format version 1.02 was released in 1992. The biggest structural problem with this standard is that metadata in these files in is stored in segments which have a maximum size of 65533 bytes. This limit has necessitated a number of creative solutions, each creating complications and problems of their own. <i>[See my comments on the <a href="writing.html#Preview">PreviewImage problem</a> for example.]</i></p> <p><b>A simple solution:</b></p> <p>Since the value of the segment size word includes the 2 bytes of the segment size word itself, a value of 0 or 1 is not allowed by the current JPEG standard. The standard could be enhanced so a value of 1 indicates an extended JPEG segment where the 2-byte size word (with value 0x0001) is followed immediately by a 4-byte integer giving the size of the extended JPEG segment. This would allow segment sizes of up to 4294967291 bytes (assuming the size includes these 4 bytes). Further, a value of 0 could be defined for an 8-byte integer if one really wanted to support huge metadata segments. Either change to an existing JPEG would break all current JPEG reader/writers, but the change is trivial and could easily be implemented.</p> <p><b>An alternative solution:</b></p> <p>Define a new application marker segment which uses a 4-byte size word. This technique is already used for the extended JPEG2000 codestream MCT, MCC and MIC marker segments.</p> <a name="MPF"></a> <h3>Multi-Picture Format (MPF) <a class=ref href="#ref9">[9]</a></h3> <p>In February 2009 CIPA<a class=ref href="#ref10">[10]</a> released a "Multi-Picture Format" standard for storing large images in JPEG files. This format is yet another attempt to bypass the JPEG segment-size limit (see above) to store large preview images. But again, there is a significant problem with this standard: Pointers in the new APP2 MPF segment use offsets relative to the start of the MPF header in this segment to reference image data after the JPEG EOI. Unfortunately, these offsets are quickly broken if any data after the MPF segment changes length. This problem could have been avoided if offsets had been specified relative to the end of file, but it is too late for this now that the specification is public. However, another problem is that information after the JPEG EOI is often discarded by software when the file is edited.</p> <p><b>A possible work-around:</b></p> <p>Enforce the rule that the MPF APP2 segment must come after all other APP segments. (It would have been smart if this was specified in the CIPA standard, but sadly this wasn't the case.) If this is done, then metadata in the remaining APP segments (EXIF, IPTC, XMP, etc) can safely be edited without breaking the MPF offsets. I suggest that all metadata editors employ this strategy, regardless of the segment order specified in the standard (which says that the MPF APP2 segment must come immediately after the EXIF APP1 segment).</p> <p>Unfortunately this work-around has the same problems as the Microsoft OffsetSchema tag because the MPF information may easily be invalidated by an unaware editor, and it doesn't address the problem of losing data stored after the JPEG EOI.</p> <p><b>A simple solution:</b></p> <p>Change the JPEG specification to allow larger segments (as mentioned above in the JPEG section), and change the MPF specification to store all information inside a JPEG segment.</p> <p><i>[2014-04-29: CIPA has changed the location of these standards documents, so the URL's referenced here are now broken.]</i></p> <a name="refs"></a> <h3>References</h3> <ol> <li><a name="ref1" href="http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf">http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf</a></li> <li><a name="ref2" href="http://partners.adobe.com/public/developer/en/tiff/TIFFPM6.pdf">http://partners.adobe.com/public/developer/en/tiff/TIFFPM6.pdf</a></li> <li><a name="ref3" href="http://www.adobe.com/products/dng/pdfs/dng_spec_1_3_0_0.pdf">http://www.adobe.com/products/dng/pdfs/dng_spec_1_3_0_0.pdf</a></li> <li><a name="ref4" href="http://www.cipa.jp/english/hyoujunka/kikaku/pdf/DC-008-2010_E.pdf">http://www.cipa.jp/english/hyoujunka/kikaku/pdf/DC-008-2010_E.pdf</a></li> <li><a name="ref5" href="http://www.metadataworkinggroup.org/pdf/mwg_guidance.pdf">http://www.metadataworkinggroup.org/pdf/mwg_guidance.pdf</a></li> <li><a name="ref6" href="http://www.adobe.com/devnet/xmp/">http://www.adobe.com/devnet/xmp/</a></li> <li><a name="ref7" href="http://support.microsoft.com/kb/927527">http://support.microsoft.com/kb/927527</a></li> <li><a name="ref8" href="http://www.jpeg.org/public/jfif.pdf">http://www.jpeg.org/public/jfif.pdf</a></li> <li><a name="ref9" href="http://www.cipa.jp/english/hyoujunka/kikaku/pdf/DC-X007-KEY_E.pdf">http://www.cipa.jp/english/hyoujunka/kikaku/pdf/DC-X007-KEY_E.pdf</a></li> <li><a name="ref10" href="http://www.cipa.jp/english/hyoujunka/kikaku/cipa_e_kikaku_list.html">http://www.cipa.jp/english/hyoujunka/kikaku/cipa_e_kikaku_list.html</a></li> </ol> <hr> <i>Created Sep 17, 2009</i><br> <i>Last revised Apr 23, 2015</i> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/struct.html���������������������������������������������������������������000644 �000765 �000024 �00000045646 12436135562 017567� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> <html> <head> <title>Structured Information</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <style type="text/css"> <!-- pre { padding: 0; margin: 0px 2px } spc { margin-top: 5em } li { margin-top: .5em } li.c { margin-top: 0 } --> </style> </head> <body> <div class='index'> <a href="#Reading">Reading</a> <br><a href="#Writing">Writing</a> <br><a href="#Copying">Copying</a> <br><a href="#Deleting">Deleting</a> <br><a href="#Fields">Field Names</a> <br><a href="#Serialize">Serialization</a> <br><a href="#Examples">Examples</a> <br><a href="#User">User-Defined</a> </div> <h1 class='up'>Structured Information</h1> <p>ExifTool has the ability to read and write XMP structures through the use of either <b>structured or flattened tags</b>. The ability to write via structured input was added in ExifTool version 8.44; older versions wrote using flattened tags only.</p> <p>To illustrate the concept of a flattened tag, the <code>XMP-exif:Flash</code> structure contains <code>Fired</code> and <code>Mode</code> fields (among others). The flattened tags corresponding to these structure fields are <code>XMP-exif:FlashFired</code> and <code>XMP-exif:FlashMode</code>. In the <a href="TagNames/XMP.html">XMP Tags documentation</a>, flattened tags are indicated by an underline (<code>_</code>) after the Writable type.</p> <p>This page describes various techniques used to read and write XMP structures using both structured and flattened tags.</p> <a name='Reading'></a> <h2>Reading</h2> <p>When reading, structures are <b>flattened by default</b>, and ExifTool returns one "flattened" tag for each field in the structure:</p> <blockquote><table class='box'><tr><td> <pre>&gt; <span class=code>exiftool -xmp:all a.xmp</span> XMP Toolkit : Image::ExifTool 8.44 Flash Fired : True Flash Mode : On Flash Return : Return not detected</pre> </td></tr></table></blockquote> <p>But the <code>-struct</code> option may be used to give <b>structured output</b>. In this mode structures are returned instead of separate "flattened" tags:</p> <blockquote><table class='box'><tr><td> <pre>&gt; <span class=code>exiftool -struct -xmp:all a.xmp</span> XMP Toolkit : Image::ExifTool 8.44 Flash : {Fired=True,Mode=On,Return=Return not detected}</pre> </td></tr></table></blockquote> <p class=lt>(Note: As illustrated in the example above, structures are <a href='#Serialize'>serialized</a> for console output by the ExifTool application. However, via the API with the <code>Struct</code> option, they are returned as Perl HASH references.)</p> <p>The <code>-struct</code> option may also be combined with the JSON (<code>-j</code>), PHP (<code>-php</code>) or XML (<code>-X</code>) output formats to provide a structured format which may be more compatible with other applications.</p> <a name='Writing'></a> <h2>Writing</h2> <p>When writing, <b>flattened tags and structures may be used interchangeably</b>. For example, the following commands all have the same effect.</p> <blockquote><table class='box'><tr><td> <pre class=code>exiftool -flashmode=on -flashreturn=not -flashfired=true a.xmp exiftool -xmp:flash="{mode=on,fired=true}" -flashreturn=not a.xmp exiftool -xmp:flash="{mode=on,fired=true,return=not}" a.xmp</pre> </td></tr></table></blockquote> <p class=lt>(Note: Structures must be <a href='#Serialize'>serialized</a> when writing via the command-line application, in the same format as when reading with the <code>-struct</code> option.)</p> <p>An advantage of writing in structured form is that it can be easier to achieve the desired hierarchy with complex structures or when there are multiple structures in a list. For example, this command adds a new hierarchical keyword to the XMP-mwg-kw:HierarchicalKeywords list:</p> <blockquote><table class='box'><tr><td> <pre class=code>exiftool -hierarchicalkeywords+="{keyword=cat,children={keyword=Siamese}}" a.jpg</pre> </td></tr></table></blockquote> <p>But the flattened tags may be more convenient for <b>adding or replacing a single field</b> in an existing structure because writing as a structure would require that the entire structure be replaced. For example, the following command adds a new second-level keyword to an existing HierarchicalKeywords structure:</p> <blockquote><table class='box'><tr><td> <pre class=code>exiftool -hierarchicalkeywords2+="Persian" a.jpg</pre> </td></tr></table></blockquote> <p><b>Tricky:</b> There is one drawback when using this technique to add new fields to existing structures in lists: New fields are added to the first structure which doesn't already contain the corresponding field. So before adding a new field to a arbitrary structure, dummy fields must first be added to all earlier structures in the list which are missing this field. However, the alternative of adding a new field by writing structured information also has its drawbacks. Here, although a specific structure in a list can easily be targeted through any unique combination of field values, the drawback is that the entire structure must be replaced (see <a href="#Deleting">Deleting / Replacing</a> below).</p> <p>The flattened tag names may also be used to <b>write structures at any level in a complex hierarchy</b>. The following example writes a third-level structure inside a HierarchicalKeywords structure:</p> <blockquote><table class='box'><tr><td> <pre class=code>exiftool -hierarchicalkeywords2Children='{Keyword=Tabby,Applied=true}' a.jpg</pre> </td></tr></table></blockquote> <p class=lt>(Note: Containing structures are created as necessary. In this case, the HierarchicalKeywords and top-level KeywordInfo structures would be created if they didn't already exist.)</p> <p>The <b>order of structure fields is not significant</b>, so they may be read in a different order then written, unlike arrays which maintain the same order. To give a predictable output, fields in structured information are <b>sorted in alphabetical order</b> of field name by ExifTool when reading and writing.</p> <p>If there are <b>errors converting some fields</b> of the input structure, other fields are still written and a warning is issued (but only one warning per structure is reported). This also applies when copying structured information except that the <code>-v3</code> option must be used to see the warnings when copying.</p> <p><b>Programmers:</b> Structured information is written and read as Perl HASH references via the ExifTool API, but it may also be written as a serialized string. The following two techniques are equivalent:</p> <blockquote><table class='box'><tr><td> <pre># as a HASH reference <span class=code>$exifTool-&gt;SetNewValue('XMP:Flash' =&gt; { mode=>'on', fired=>'true', return=>'not' }); </span> # as a serialized string <span class=code>$exifTool-&gt;SetNewValue('XMP:Flash' =&gt; '{mode=on,fired=true,return=not}');</span></pre> </td></tr></table></blockquote> <a name='Copying'></a> <h2>Copying</h2> <p>By default, tags are <b>copied as structures</b>, but flattened tag names may still be copied by specifying them explicitly. <span class=lt>(Flattened tags are treated as "unsafe" for copying so they are not copied by default unless the Struct feature is disabled.)</span> Copying as structures allows the hierarchy of complex structures to be preserved.</p> <blockquote><table class='box'><tr><td> <pre># this copies all XMP information as structures # (flattened tags are not copied by default...) <span class=code>exiftool -tagsfromfile src.jpg -xmp:all dst.jpg </span> # ... but flattened tags may be copied individually. Here the # first level hierarchical keywords are copied to the Subject tag # (this may be done in the same command as one that copies structures) <span class=code>exiftool -tagsfromfile src.jpg "-subject&lt;hierarchicalkeywords1" dst.jpg</span></pre> </td></tr></table></blockquote> <p>Note that when copying a specific structure, only the top-level structures may be specified:</p> <blockquote><table class='box'><tr><td> <pre># this copies the complete keyword hierarchy <span class=code>exiftool -tagsfromfile src.jpg -keywordinfo dst.jpg </span> # WRONG because HierarchicalKeywords is NOT a top-level structure! <span class=code>exiftool -tagsfromfile src.jpg -hierarchicalkeywords dst.jpg</span></pre> </td></tr></table></blockquote> <p>The copy-as-structure feature may be disabled with <code>--struct</code> on the command line, or by setting the <a href="ExifTool.html#Struct">Struct option</a> to 0 via the API. When this is done, only flattened tags are copied, and structures may not be specified. Conversely, if the structure option is enabled (by setting the <a href="ExifTool.html#Struct">Struct option</a> to 1 via the API, or with <code>-struct</code> on the command line), only structures are copied, and flattened tags may not be specified.</p> <p class=lt>(Note: ExifTool 8.43 and earlier copied as flattened tags only, but copying as structures has been the default since the ability to write structured information was introduced in version 8.44. An enhancement in version 8.82 allowed flattened tags to be copied explicitly without the need to disable the Struct option.)</p> <a name='Deleting'></a> <h2>Deleting / Replacing</h2> <p>A <b>complete structure is deleted</b> by specifying one or more matching fields. For example, the following command deletes all HierarchicalKeywords structures which have the Keyword "<code>Terrier</code>" at the second level:</p> <blockquote><table class='box'><tr><td> <pre class=code>exiftool -hierarchicalkeywords-="{Children={Keyword=Terrier}}" a.jpg</pre> </td></tr></table></blockquote> <p>Structure <b>fields may also be deleted individually</b> using the flattened tag names. The following command deletes only the matching fields from the second-level of all HierarchicalKeywords structures:</p> <blockquote><table class='box'><tr><td> <pre class=code>exiftool -hierarchicalkeywords2-="Terrier" a.jpg</pre> </td></tr></table></blockquote> <p>Individual structure <b>fields may NOT be deleted by writing a structure</b> with an empty field. Instead, a command like this overwrites the entire structure with a new structure containing an empty field:</p> <blockquote><table class='box'><tr><td> <pre><span class=code>exiftool -CreatorContactInfo="{CiAdrCity=}" a.jpg</span> # WRONG!</pre> </td></tr></table></blockquote> <p>When deleting and adding back items in lists in the same command, new items are inserted at the point in the list where the first item was removed, or at the end of the list if no items were deleted. This applies to lists of structures as well as simple lists of string values, and provides a mechanism to replace a specific structure or field.</p> <a name='Fields'></a> <h2>Field Names</h2> <p>Structure field names use a format <b>very similar to tag names</b> in ExifTool. The following table lists some similarities and differences between tag names and structure field names:</p> <blockquote><table border=1 cellspacing=0 cellpadding=4 width='100%'> <tr><th>Feature</th><th>Example</th><th>Tag Names</th><th>Field Names</th></tr> <tr align=center><td align=left>Case Insensitivity</td><td>Title, title, TITLE</td> <td class=grn>Yes</td><td class=grn>Yes</td></tr> <tr align=center><td align=left>Alternate Language Suffix</td><td>Title-de</td> <td class=grn>Yes</td><td class=grn>Yes</td></tr> <tr align=center><td align=left>Numerical Value Suffix</td><td>Mode#</td> <td class=grn>Yes</td><td class=grn>Yes</td></tr> <tr align=center><td align=left>Group Name Prefix</td><td>XMP-dc:Title</td> <td class=grn>Yes</td><td class=red>No<sup>&dagger;</sup></td></tr> </table> <sup class=red>&dagger;</sup> Except that group name prefixes are allowed in structures which support arbitrary XMP fields (eg. <a href='TagNames/MWG.html#Extensions'>Region Extensions</a>) </blockquote> <a name='Serialize'></a> <h2>Serialization</h2> Structures are <b>serialized when reading or writing from the command line</b>. However, serialization is not done when reading via the API, and is optional when writing via the API. The serialization algorithm is as follows: <ol> <li>Escape the following characters in string values (structure field values and list items) by adding a leading pipe symbol (<code>|</code>): <ul> <li class=c>pipe symbols (<code>|</code>) and commas (<code>,</code>) anywhere in the string</li> <li class=c>closing curly brackets (<code>}</code>) anywhere in structure field values</li> <li class=c>closing square brackets (<code>]</code>) anywhere in list items</li> <li class=c>an opening curly (<code>{</code>) or square (<code>[</code>) bracket, or whitespace character (SPACE, TAB, CR or LF) if it appears at the beginning of the string</li> </ul> <span class=lt>(Note: Any other character may be escaped by adding a leading pipe symbol without effect.)</span></li> <li>Enclose structures in curly brackets. Use an equal sign (<code>=</code>) to separate field names from their corresponding values, and a comma between structure fields.</li> <li>Enclose lists in square brackets, with a comma between list items.</li> <li>Optional whitespace padding may be added anywhere except inside a structure field name, or inside or after a string value, and an optional comma may be added after the last field in a structure.</li> </ol> <p>For example, with a command like this:</p> <blockquote><table class='box'><tr><td> <pre class=code>exiftool "-RegionInfo&lt;=INFILE" a.xmp</pre> </td></tr></table></blockquote> <p>the INFILE below may be used to write structured information to XMP:RegionInfo.</p> <blockquote><table class='box'><tr><td> <pre>{ AppliedToDimensions = { W = 4288, H = 2848, Unit = pixel, }, RegionList = [ { Area = { W = 0.15, H = 0.17, X = 0.3, Y = 0.4, Unit = normalized, }, Description = A Physics Icon {relatively speaking|}, Name = Albert Einstein, Type = Face, Extensions = { XMP-xmpRights:UsageTerms = copyright Phil Harvey, XMP-xmpRights:UsageTerms-fr = droit d'auteur Phil Harvey, }, SeeAlso = dc:subject, }, { Area = { W = 0.06, H = 0.09, X = 0.5, Y = 0.6, Unit = normalized, }, Description = this is a test|, what did you expect?, Type = Focus, FocusUsage = Evaluated|, Used, } ], }</pre> </td></tr></table></blockquote> <p>In this example, white space has been added in all allowed locations for demonstration purposes and to improve readability. Also, optional commas have been added after the last field of each structure. (Note that a comma may NOT be added after the last item in a list because this would be interpreted as an additional list item of a zero-length string.)</p> <a name='Examples'></a> <h2>Examples</h2> <p>Here is an example of an advanced console session showing some commands which manipulate a complex list of structures (see the <a href="TagNames/XMP.html#iptcExt">XMP-iptcExt tag documentation</a> for details about the ArtworkOrObject structure tags used):</p> <blockquote><table class='box'><tr><td> <pre><span class=lt># 1. Create a XMP-iptcExt:ArtworkOrObject structure using flattened tags</span> &gt; <span class=code>exiftool -artworktitle="a title" a.xmp</span> 1 image files created <span class=lt># -- Read back as flattened tags (-S is used just to shorten the output)</span> &gt; <span class=code>exiftool -xmp-iptcext:all -S a.xmp</span> ArtworkTitle: a title <span class=lt># -- Read back as a structure</span> &gt; <span class=code>exiftool -xmp-iptcext:all -S -struct a.xmp</span> ArtworkOrObject: [{AOTitle=a title}] <span class=lt># 2. Write another field to the structure as a flattened tag</span> &gt; <span class=code>exiftool -artworkcreator=phil a.xmp</span> 1 image files updated <span class=lt># -- Note that the structure now has a new field</span> &gt; <span class=code>exiftool -xmp-iptcext:all -S -struct a.xmp</span> ArtworkOrObject: [{AOCreator=[phil],AOTitle=a title}] <span class=lt># 3. Add another creator using the "+=" operator</span> &gt; <span class=code>exiftool -artworkcreator+=joe a.xmp</span> 1 image files updated <span class=lt># -- It was added to the first AOCreator list</span> &gt; <span class=code>exiftool -xmp-iptcext:all -S -struct a.xmp</span> ArtworkOrObject: [{AOCreator=[phil,joe],AOTitle=a title}] <span class=lt># 4. Add another artwork title</span> &gt; <span class=code>exiftool -artworktitle+="another one" a.xmp</span> 1 image files updated <span class=lt># -- This created a new ArtworkOrObject structure in the list of structures # (AOTitle itself is not a list, so a new structure must be created)</span> &gt; <span class=code>exiftool -xmp-iptcext:all -S -struct a.xmp</span> ArtworkOrObject: [{AOCreator=[phil,joe],AOTitle=a title},{AOTitle=another one}] <span class=lt># 5. Simply write a different title (do not add with "+=")</span> &gt; <span class=code>exiftool -artworktitle="different" a.xmp</span> 1 image files updated <span class=lt># -- This deleted all existing AOTitle fields and wrote back only one # (if the second ArtworkOrObject structure had contained more fields, they would have been # preserved, and the second structure would still exist, but without an AOTitle field)</span> &gt; <span class=code>exiftool -xmp-iptcext:all -S -struct a.xmp</span> ArtworkOrObject: [{AOCreator=[phil,joe],AOTitle=different}] <span class=lt># 6. Add a completely new structure to the list # (this is very difficult to do properly using flattened tags)</span> &gt; <span class=code>exiftool -artworkorobject+="{aotitle=help,aocreator=[paul,ringo]}" a.xmp</span> 1 image files updated <span class=lt># -- The new structure was added with the specified fields</span> &gt; <span class=code>exiftool -xmp-iptcext:all -S -struct a.xmp</span> ArtworkOrObject: [{AOCreator=[phil,joe],AOTitle=different},{AOCreator=[paul,ringo],AOTitle=help}] <span class=lt># -- See how the relationships are lost when reading as flattened tags</span> &gt; <span class=code>exiftool -xmp-iptcext:all -S a.xmp</span> ArtworkCreator: phil, joe, paul, ringo ArtworkTitle: different, help <span class=lt># 7. Delete all structures containing a specific field value</span> &gt; <span class=code>exiftool -artworkorobject-="{AOCreator=phil}" a.xmp</span> 1 image files updated <span class=lt># -- The ArtworkOrObject list now contains only one structure</span> &gt; <span class=code>exiftool -xmp-iptcext:all -S -struct a.xmp</span> ArtworkOrObject: [{AOCreator=[paul,ringo],AOTitle=help}]</pre></td></tr></table></blockquote> <a name='User'></a> <h2>User-Defined Structures</h2> <p>User-defined XMP structure tags may be created via the ExifTool config file. See the NewXMPxxxStruct tag definition in the <a href="config.html#xmp-xxx">XMP-xxx examples of the sample config file</a> for more details.</p> <hr> <i>Last revised Nov. 25, 2014</i> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> ������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/style.css�����������������������������������������������������������������000644 �000765 �000024 �00000002234 11342267201 017200� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������body { font-family: helvetica; font-size: .9em; color: black; background: white } a:link { color: blue } a:visited { color: #508 } a:active { color: red } .blk { color: black } .red { color: #c00 } .grn { color: #080 } .blu { color: blue } .com { color: #a00 } .aside { color: #864 } .lt { color: #666 } .lg { font-size: larger } .sm { font-size: smaller } .up { margin: 0 0 .5em 0 } p { margin: 1em 1em } p.lf { margin: 1em 0 } .code { color: #800; } code { color: #800; font-family: monaco, monospace; font-size: 1em; white-space: nowrap } pre { font-family: monaco, monospace; font-size: 1em } div.index { float: right; clear: both; border-left: 1px solid gray; margin: .5em 0 .5em .5em; padding: 0 .5em } table.box { padding: .2em; background: #ddd } table.norm { border-collapse: collapse; border: 1px solid gray; } table.norm th { border: 1px solid gray; background: #ddd } table.norm td { border: 1px solid gray; padding: 2px 4px } table.clear td { border: 0; padding: 0 2px } table.tight td { padding: 1px 4px } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/�����������������������������������������������������������������000755 �000765 �000024 �00000000000 12650447263 017037� 5����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/under.html����������������������������������������������������������������000644 �000765 �000024 �00000014573 12464713756 017363� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> <html> <head> <title>Under the Hood</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <style type="text/css"> <!-- pre { margin: 0 } ol.index { margin: 0; padding: 0 0 0 2em } --> </style> </head> <body> <div class='index'> <a href="#overview">Overview</a> <br><a href="#conversions">Value Conversions</a> <br><a href="#philophies">Underlying Philosophies</a> </div> <h1 class='up'>"Under the Hood" of ExifTool</h1> <p>This page is a work in progress, and will be used to explain some details of ExifTool's inner workings.</p> <a name="overview"></a> <h2>Overview of ExifTool</h2> <p>Below is a diagram showing the flow of information for the exiftool application. Indicated outside the boxes on the diagram are some command-line options associated with the various stages of processing. All of these options are directly associated with options or function calls available via the API (Application Programming Interface), with the exception of the output text formatting which is handled at the application level.</p> <center><img src="overview.png" alt="ExifTool Overview" width="680" height="460"></center> <p>The information flow is separated into two distinct modes: 1) <span class=blu>Reading or extracting information</span>, and 2) <span class=red>Writing or editing</span>. The application runs in <b class=blu>read</b> mode by default, but switches to <b class=red>write</b> mode if a new value is assigned to any tag (via "<code>-TAG=</code>", "<code>-tagsFromFile</code>", "<code>-geotag</code>", "<code>-csv=</code>" or "<code>-json=</code>" on the command line).</p> <a name="conversions"></a> <h2>Value Conversions</h2> <p>When ExifTool reads or writes the value of a tag, there are 3 separate conversions applied to each value, resulting in 4 different levels for the value of each tag. By default, users interact only with the human-readable ("<b>PrintConv</b>") value, but other levels are exposed through various exiftool options:</p> <ol start=3><li>The "<b>PrintConv</b>" value is the final human-readable value which has been converted for display. Often, the "PrintConv" conversion will translate numbers into words for better readability. The <code>-lang</code> (Lang) option is used to specify the language for this conversion, and the <code>-c</code> and <code>-d</code> (CoordFormat and DateFormat) options specify this formatting for GPS coordinates and date/time values.</li></ol> <ol start=2><li>The "<b>ValueConv</b>" value is a numerical value, suitable for use in calculations. Typically, this value is converted to standard units (eg. degrees, meters, or seconds) to make calculations simpler. This value is returned for all tags when the <code>-n</code> option is used, or for individual tags by suffixing the tag name with a <code>#</code> character.</li></ol> <ol start=1><li>The "<b>Raw</b>" value is the value after initial formatting is applied to the binary data from the file. Most tags have no separate "ValueConv" conversion, so for these tags the "Raw" value is the same as the "ValueConv" value. This value may be seen by using the <code>-v</code> option.</li></ol> <ol start=0><li>The "<b>Binary</b>" value is actual binary data stored in the file. This data is displayed in hexadecimal form with the <code>-v3</code> option, or by using the <code>-htmlDump</code> feature. Note that this value is not related to the <code>-b</code> (<code>-binary</code>) option, which actually returns the "ValueConv" value and is used for tags where this value can not be presented in a simple text format. The Writable column in the <a href="TagNames/index.html">Tag Name documentation</a> gives the format of this binary data for writable tags.</li></ol> <p>Below are some examples of these different values for a few tags:</p> <blockquote><table class=norm> <tr><th>Tag</th><th>3.&nbsp;PrintConv</th><th>2.&nbsp;ValueConv</th><th>1.&nbsp;Raw</th><th>0.&nbsp;Binary</th></tr> <tr align='center'><td>Orientation</td><td>Horizontal (normal)</td><td>1</td><td>1</td><td><pre>00 01</pre></td></tr> <tr align='center'><td>GPSLatitude</td><td>45 deg 20' 11.00"</td><td>45.3363888888889</td><td>45 20 11<br>(45/1 20/1 11/1)</td> <td><pre>00 00 00 2d 00 00 00 01<br>00 00 00 14 00 00 00 01<br>00 00 00 0b 00 00 00 01</pre></td></tr> <tr align='center'><td>ExposureTime</td><td>1/30</td><td>0.03333333333</td><td>0.03333333333<br>(1/30)</td> <td><pre>00 00 00 01 00 00 00 1e</pre></td></tr> <tr align='center'><td>ShutterSpeedValue</td><td>1/30</td><td>0.0333333334629176</td><td>4.90689059<br>(19868/4049)</td> <td><pre>00 00 4d 9c 00 00 0f d1</pre></td></tr> </table></blockquote> <a name="philophies"></a> <h2>Underlying Philosophies</h2> <p>You have the right to know about the metadata contained in your images. A main goal of the Exiftool project is to make this information freely available, both to the general public and as a resource for other developers.</p> <p>In the design of exiftool, there have been a number of underlying philosophies which have helped to influence the overall development:</p> <ol> <li>Make <a href="ExifTool.html">Image::ExifTool</a> as independent as possible from other libraries to make it portable and easy to install. (Portable to a wide range of systems and Perl versions.)</li> <li>Keep the interface simple for simple tasks (sometimes at the expense of making it more complicated for complex tasks).</li> <li>The <a href="ExifTool.html#Methods">API functions</a> should be isolated from the details of the metadata formats (otherwise the interface turns into a giant hairball, like the metadata).</li> <li>Maintain flexibility to allow users the freedom to do what they want.</li> <li>Design the code to be efficient for batch processing, even if it increases the initial overhead.</li> <li>When writing files, remember 3 things: 1) data integrity, 2) data integrity, and 3) data integrity. If you can't do it right, don't do it at all.</li> <li>If possible, recognize file types by their structure, not by their extension.</li> <li>Maintain backward compatibility when making changes to the ExifTool API or command line application.</li> </ol> <hr> <i>Created Jun. 24, 2009</i><br> <i>Last revised Dec. 24, 2013</i> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/verbose.html��������������������������������������������������������������000644 �000765 �000024 �00000020067 12565104253 017672� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>ExifTool Verbose Option</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <style type="text/css"> <!-- pre { padding: 0; margin: 0px 2px } --> </style> </head> <body> <h2 class='up'>ExifTool Verbose Option</h2> <p>With the Verbose option enabled, ExifTool prints a verbose log to the console as it extracts the meta information from a file.</p> <p>The -v option of the exiftool application allows control of the Verbose setting. A number between 0 and 5 may be specified with the -v option to set a specific Verbose level. For example, -v2 sets Verbose = 2. Without a number, -v increments the current Verbose level by one. Multiple -v options are allowed, so the following two examples give the same result:</p> <blockquote><table class='box' width='100%'><tr><td><pre> exiftool -v -v -v t/images/Canon.jpg exiftool -v3 t/images/Canon.jpg </pre></td></tr></table></blockquote> <p>Below are example outputs for different Verbose settings.</p> <h3>Verbose = 1</h3> <p>Prints tag names and extracted values. These are the raw values straight from the file, before any conversions are applied. Also printed are details of the file and directory structure:</p> <blockquote><table class='box' width='100%'><tr><td><pre> ExifToolVersion = 10.00 FileName = Canon.jpg Directory = t/images FileSize = 2697 FileModifyDate = 1159902631 FileAccessDate = 1439991906 FileInodeChangeDate = 1439903472 FilePermissions = 33188 FileType = JPEG FileTypeExtension = JPG MIMEType = image/jpeg JPEG APP1 (2442 bytes): ExifByteOrder = II + [IFD0 directory with 9 entries] | 0) Make = Canon | 1) Model = Canon EOS DIGITAL REBEL | 2) Orientation = 1 | 3) XResolution = 180 (180/1) | 4) YResolution = 180 (180/1) | 5) ResolutionUnit = 2 | 6) ModifyDate = 2003:12:04 06:46:52 | 7) YCbCrPositioning = 1 | 8) ExifOffset (SubDirectory) --> | + [ExifIFD directory with 31 entries] | | 0) ExposureTime = 4 (4/1) | | 1) FNumber = 14 (14/1) | | 2) ISO = 100 | | 3) ExifVersion = 0221 | | 4) DateTimeOriginal = 2003:12:04 06:46:52 [etc...] </pre></td></tr></table></blockquote> <h3>Verbose = 2</h3> <p>Prints all of the information from Verbose = 1, plus additional information about the tag ID, data size and format:</p> <blockquote><table class='box' width='100%'><tr><td><pre> ExifToolVersion = 10.00 FileName = Canon.jpg Directory = t/images FileSize = 2697 FileModifyDate = 1159902631 FileAccessDate = 1439991927 FileInodeChangeDate = 1439903472 FilePermissions = 33188 FileType = JPEG FileTypeExtension = JPG MIMEType = image/jpeg JPEG APP1 (2442 bytes): ExifByteOrder = II + [IFD0 directory with 9 entries] | 0) Make = Canon | - Tag 0x010f (6 bytes, string[6]) | 1) Model = Canon EOS DIGITAL REBEL | - Tag 0x0110 (24 bytes, string[24]) | 2) Orientation = 1 | - Tag 0x0112 (2 bytes, int16u[1]) | 3) XResolution = 180 (180/1) | - Tag 0x011a (8 bytes, rational64u[1]) | 4) YResolution = 180 (180/1) | - Tag 0x011b (8 bytes, rational64u[1]) | 5) ResolutionUnit = 2 | - Tag 0x0128 (2 bytes, int16u[1]) | 6) ModifyDate = 2003:12:04 06:46:52 | - Tag 0x0132 (20 bytes, string[20]) | 7) YCbCrPositioning = 1 | - Tag 0x0213 (2 bytes, int16u[1]) | 8) ExifOffset (SubDirectory) --> | - Tag 0x8769 (4 bytes, int32u[1]) | + [ExifIFD directory with 31 entries] | | 0) ExposureTime = 4 (4/1) | | - Tag 0x829a (8 bytes, rational64u[1]) | | 1) FNumber = 14 (14/1) | | - Tag 0x829d (8 bytes, rational64u[1]) | | 2) ISO = 100 | | - Tag 0x8827 (2 bytes, int16u[1]) | | 3) ExifVersion = 0221 | | - Tag 0x9000 (4 bytes, undef[4]) | | 4) DateTimeOriginal = 2003:12:04 06:46:52 | | - Tag 0x9003 (20 bytes, string[20]) [etc...] </pre></td></tr></table></blockquote> <h3>Verbose = 3</h3> <p>Adds a hex dump of the binary data associated with each tag. The hex offsets are relative to the start of the file, unlike the default HtmlDump output where offsets are relative to the start of the TIFF header (the native base for TIFF/EXIF offsets). If the data is very long, only the first few lines of the dump are printed:</p> <blockquote><table class='box' width='100%'><tr><td><pre> ExifToolVersion = 10.00 FileName = Canon.jpg Directory = t/images FileSize = 2697 FileModifyDate = 1159902631 FileAccessDate = 1439991933 FileInodeChangeDate = 1439903472 FilePermissions = 33188 FileType = JPEG FileTypeExtension = JPG MIMEType = image/jpeg JPEG APP1 (2442 bytes): 0006: 45 78 69 66 00 00 49 49 2a 00 08 00 00 00 09 00 [Exif..II*.......] 0016: 0f 01 02 00 06 00 00 00 7a 00 00 00 10 01 02 00 [........z.......] 0026: 18 00 00 00 80 00 00 00 12 01 03 00 01 00 00 00 [................] 0036: 01 00 00 00 1a 01 05 00 01 00 00 00 98 00 00 00 [................] 0046: 1b 01 05 00 01 00 00 00 a0 00 00 00 28 01 03 00 [............(...] 0056: 01 00 00 00 02 00 00 00 32 01 02 00 14 00 00 00 [........2.......] 0066: a8 00 00 00 13 02 03 00 01 00 00 00 01 00 00 00 [................] [snip 2330 bytes] ExifByteOrder = II + [IFD0 directory with 9 entries] | 0) Make = Canon | - Tag 0x010f (6 bytes, string[6]): | 0086: 43 61 6e 6f 6e 00 [Canon.] | 1) Model = Canon EOS DIGITAL REBEL | - Tag 0x0110 (24 bytes, string[24]): | 008c: 43 61 6e 6f 6e 20 45 4f 53 20 44 49 47 49 54 41 [Canon EOS DIGITA] | 009c: 4c 20 52 45 42 45 4c 00 [L REBEL.] | 2) Orientation = 1 | - Tag 0x0112 (2 bytes, int16u[1]): | 0036: 01 00 [..] | 3) XResolution = 180 (180/1) | - Tag 0x011a (8 bytes, rational64u[1]): | 00a4: b4 00 00 00 01 00 00 00 [........] | 4) YResolution = 180 (180/1) | - Tag 0x011b (8 bytes, rational64u[1]): | 00ac: b4 00 00 00 01 00 00 00 [........] | 5) ResolutionUnit = 2 | - Tag 0x0128 (2 bytes, int16u[1]): | 005a: 02 00 [..] | 6) ModifyDate = 2003:12:04 06:46:52 | - Tag 0x0132 (20 bytes, string[20]): | 00b4: 32 30 30 33 3a 31 32 3a 30 34 20 30 36 3a 34 36 [2003:12:04 06:46] | 00c4: 3a 35 32 00 [:52.] | 7) YCbCrPositioning = 1 | - Tag 0x0213 (2 bytes, int16u[1]): | 0072: 01 00 [..] | 8) ExifOffset (SubDirectory) --> | - Tag 0x8769 (4 bytes, int32u[1]): | 007e: bc 00 00 00 [....] | + [ExifIFD directory with 31 entries] | | 0) ExposureTime = 4 (4/1) | | - Tag 0x829a (8 bytes, rational64u[1]): | | 0242: 04 00 00 00 01 00 00 00 [........] | | 1) FNumber = 14 (14/1) | | - Tag 0x829d (8 bytes, rational64u[1]): | | 024a: 0e 00 00 00 01 00 00 00 [........] | | 2) ISO = 100 | | - Tag 0x8827 (2 bytes, int16u[1]): | | 00ea: 64 00 [d.] | | 3) ExifVersion = 0221 | | - Tag 0x9000 (4 bytes, undef[4]): | | 00f6: 30 32 32 31 [0221] | | 4) DateTimeOriginal = 2003:12:04 06:46:52 | | - Tag 0x9003 (20 bytes, string[20]): | | 0252: 32 30 30 33 3a 31 32 3a 30 34 20 30 36 3a 34 36 [2003:12:04 06:46] | | 0262: 3a 35 32 00 [:52.] [etc...] </pre></td></tr></table></blockquote> <h3>Verbose = 4 and Verbose = 5</h3> <p>These Verbose levels give similar output to Verbose = 3, except that with level 4 there is no limit on the length of data dumps of tag values, and with level 5 the limit is also removed for dumps of JPEG segments. Note that the output may be very long at these levels.</p> <hr> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/writing.html��������������������������������������������������������������000644 �000765 �000024 �00000032163 12574604655 017723� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Writing Meta Information</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> <style type="text/css"> <!-- pre { color: #800; margin-left: 4em } --> </style> </head> <body> <div class='index'> <a href="#Abstract">Abstract</a> <br><a href="#Background">Background</a> <br><a href="#Implementation">Current Implementation</a> <br><a href="#Mandatory">Mandatory Tags</a> <br><a href="#JPEG">The JPEG Segment Size Limitation</a> <br><a href="#Preview">The Preview Image Problem</a> (<i>updated 2009-06-12</i>) <br><a href="#IFD0">IFD0/ExifIFD Ambiguity</a> </div> <h1 class='up'>Writing Meta Information</h1> <a name='Abstract'></a> <h3>Abstract</h3> <p>Writing meta information is more complicated than it may appear at first glance, which may be one reason why there are very few utilities around that do it. ExifTool uses tag names to identify the different pieces of meta information that can be extracted from a file. There are thousands of different tags that ExifTool recognizes, and many of these tag names are common between different metadata formats (the WhiteBalance tag is the worst offender, and can be found in 44 different places [ExifTool 8.33]), and sometimes the information can even be stored in different places within a single format. Couple this with the fact that many manufacturers store meta information in undocumented formats which must be reverse engineered (and each of which have their particular quirks), and you have a very complex situation.</p> <p>ExifTool attempts to simplify this situation as much as possible by making reasonable decisions about where to write the information you specify, yet it maintains flexibility by allowing you to configure its priorities if necessary, or even override the decision making process entirely.</p> <a name='Background'></a> <h3>Background</h3> <p>For a long time, I resisted adding write abilities to ExifTool even though it was an oft-requested feature. My concerns in adding this feature were:</p> <ol> <li>It would complicate the ExifTool interface and make it too confusing for typical users.</li> <li>It would complicate the code enough to slow down processing for normal use.</li> <li>It would take a LOT of work to implement.</li> </ol> <p>After thinking about this for a while, I was finally able to come up with some solutions:</p> <p>1. I designed an interface that I think is easy to use for people who don't want to know the details of the file structure, yet powerful enough for people who want to do very specific things to the information.</p> <p>2. I isolated all of the writing code as much as possible into separate files which autoload as required. This keeps the compilation fast for people who don't require the write feature. Also, I have left the reading routines unchanged, so they aren't slowed down by the extra code needed when writing information. Unfortunately, this meant I couldn't borrow a lot of code from the read routines (even more work for me!), but it had the advantage that I could perform additional optimizations in the write routines that I couldn't do otherwise. Although the startup costs of this implementation are fairly high (for writing only), it should be quite fast for batch writing of multiple files.</p> <p>3. I decided to bite the bullet and invest the time required (...guess what I did for my Christmas vacation!). Although I thought that a big project like this would be better suited to C++ (faster execution and a broader potential user base), after programming this so far in Perl I have grown to really appreciate the automatic memory handling and other great features of Perl such as hash lookups and incredible flexibility in text manipulations afforded by regular expressions.</p> <a name='Implementation'></a> <h3>Current Implementation</h3> <p>Currently, ExifTool can write most of the EXIF tags that anyone could reasonably want to change (but some tags are protected because they describe physical characteristics of the image that you can not change with ExifTool, eg. Compression). Also, all of the GPS, IPTC and XMP information and most of the MakerNotes information can be edited. This gives you great power, but with great power, comes great responsibility...</p> <p>It is possible for you to write nonsense into a file, which could cause other image readers to throw up their hands in despair and refuse to read the image. For this reason, it is best to always preserve the original copy of your image file. The "exiftool" script does this for you automatically by renaming the original file and always working on a copy.</p> <p>The writing logic for ExifTool is the reverse of the reading logic. You provide human-readable values and ExifTool will perform the conversions for you. For instance, you can set "WhiteBalance" to "Daylight" and ExifTool will change the value of WhiteBalance in the image wherever the tag is found provided that "Daylight" is a valid value for that location. ExifTool will even do some simple matching so that you could even just set it to "day", and ExifTool will search through the valid values and will choose the one that contains the string "day". If the value is ambiguous, the tag will not be set. If no tags can be set with the specified value, ExifTool returns an error message.</p> <p>The tag values can also be specified at a numerical level by disabling the print conversions that are normally applied. This can be done on a tag-by-tag basis or on a global basis through either the application or the API.</p> <p>As well as changing tag values wherever they are found in the image, exiftool will also create the tag in the preferred group if it didn't exist there before. By default, the preferred group is the first of the following where the tag is found: 1) EXIF, 2) IPTC, 3) XMP. Alternatively, the desired group (in family 0 or 1) can be specified so ExifTool only writes the tag to a single location. For example, with the command line interface, this is done using an argument like "<code>-EXIF:WhiteBalance=Manual</code>".</p> <p>If a tag is added to a group that doesn't exist, the new group is created in the file, and required mandatory tags may be created. Conversely, if the last non-mandatory tag is deleted from a group, the group is removed from the file.</p> <a name='Mandatory'></a> <h3>Mandatory Tags</h3> <p>The EXIF and IPTC standards both specify some mandatory tags. ExifTool will automatically create many of these mandatory tags as required when writing new information (and remove them again when deleting information if only mandatory tags remain). However, some mandatory tags (particularly in the IPTC information) can not be easily added automatically, so it is left up to the user to add these tags if required.</p> <blockquote class='aside'> <b>Rant:</b> Let me say that the whole concept of mandatory tags is flawed. Instead of mandatory tags, the standard should specify default values to be assumed if the tags don't exist. A robust reader has to do this anyway, so it is redundant to require that this information must be written. In the case where there is no simple default value, the reader must be able to deal with the missing tag, otherwise it places the burden on the writer to magically pull a reasonable value out of thin air. Of course, you may say that the writer could get this information from the user, but conditions like this add an unnecessary level complexity to the user interface. </blockquote> <a name='JPEG'></a> <h3>The JPEG Segment Size Limitation</h3> <p>An unfortunate aspect of the JPEG format is that the size of a single segment is limited to less than 64 kB. With the 2-byte size word at the start of each segment, this leaves 65533 bytes for data. The EXIF specification states that the data must fit within a single <b>APP1</b> segment (which results in the preview image problem discussed below), however <b>APP13</b> Photoshop and <b>APP2</b> ICC Profile and FPXR information may span multiple segments. This multi-segment information is handled properly by ExifTool.</p> <p>JPEG comments may also exceed the size of a single <b>COM</b> segment. If necessary, comments are automatically split into separate segments when writing. However, when reading they are not joined together because some utilities store distinctly different comments in separate segments. To extract all JPEG comments into a single file, and combine any comments that may have been split into multiple segments, use "<code>exiftool -a -b -comment src.jpg &gt; comment.out</code>".</p> <a name='Preview'></a> <h3>The Preview Image Problem</h3> <p>Writing the preview image in JPEG files poses many problems of its own. These problems stem from the fact that the JPEG standard is inadequate for storing large preview images due to the 64kB limit on segment size as mentioned above. (Note that TIFF images don't have this problem since they have a 4GB limit.) Some manufacturers get around this by appending the preview after the normal end of the JPEG file (JPEG EOI), but this causes complications because it means that the preview image pointers in the EXIF information now point outside the EXIF segment. This is truly unfortunate because it greatly complicates things for image writing software. Most other software can't deal with a preview image and will simply remove a preview like this when rewriting the file.</p> <p>However, as of ExifTool version 5, the preview images are handled properly when writing EXIF information in JPEG files. But for reasons of efficiency, the EXIF segment is not edited when writing information if no EXIF tags are being changed (eg. if only XMP or IPTC information is being edited). In this case, the preview image pointers could be invalidated because the length of the data between the EXIF segment (which comes near the start of the file) and the preview image (at the end of the file) is likely to change. ExifTool gets around this when reading JPEG images by looking for the preview at the end of the file and updating pointers if necessary, but the preview image may not be readable by other software (it should be noted though that very few image readers even know the preview image exists). However, the preview pointers in such a file can be fixed if necessary by simply using ExifTool to edit any EXIF information.</p> <p><b>2009-05-26</b>: New Samsung cameras recently started embedding preview images larger than 64 kB, and of course they created a new technique to do so. If they were smart, they would have developed a simple technique that could be used by others in the future, but of course they were stupid, and didn't think that far ahead. (Such is the normal path of dumb camera manufacturers when it comes to metadata.)</p> <p>The new Samsung models simply split the preview and write it to separate APP2 segments with no header. If they had written a header (like "PREVIEW\0" for example), then the technique could be portable and useful. But they didn't. Without a header, the data can not easily be distinguised from other random APP2 data, so this technique is not generally useful. Of course, there are disadvantages with splitting up a preview into separate JPEG segments, so this technique in general is not ideal.</p> <p><b>2009-06-12</b>: <a href="http://www.cipa.jp/english/hyoujunka/kikaku/cipa_e_kikaku_list.html">CIPA</a> has recently released a "<b>Multi-Picture Format</b>" standard for storing large images in JPEG files. Again, there is a big problem with this standard: It uses offsets that are relative to the start of the MPF header (in the new MPF APP2 segment) to reference images after the JPEG EOI. These offsets will quickly be broken if any data after the MPF segment changes length. This problem could have been avoided if offsets had been specified relative to the end of file, but it is too late for this now that the specification is public.</p> <p>The only workable alternative I can see is to enforce the rule that the MPF APP2 segment must come after all other APP segments. (It would have been smart if this was specified in the CIPA standard, but sadly this isn't the case.) If this is done, then metadata in the remaining APP segments (EXIF, IPTC, XMP, etc) can safely be edited without breaking the MPF offsets. I suggest that all metadata editors employ this strategy, regardless of the segment order specified in the standard (which says that the MPF APP2 segment must come immediately after the EXIF APP1 segment).</p> <a name='IFD0'></a> <h3>IFD0/ExifIFD Ambiguity</h3> <p>ExifTool has a preferred location (IFD) where it writes all EXIF tags. However, a number of tags are written to different locations by various digital cameras or image editors. Specifically, the following tags have been observed in both IFD0 and ExifIFD: Make, Model, Software, Artist, DateTimeOriginal, SensingMethod, CustomRendered, ExposureMode, WhiteBalance, DigitalZoomRatio and SceneCaptureType. To handle this ambiguity, ExifTool will delete the tag if it exists in IFD0 when it is written to ExifIFD, and vice versa.</p> <hr> <i>Created Dec. 30, 2004</i><br> <i>Last revised Oct. 4, 2010</i> <p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/AFCP.html��������������������������������������������������������000644 �000765 �000024 �00000003172 12165007223 020426� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>AFCP Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>AFCP Tags</h2> <p>AFCP stands for AXS File Concatenation Protocol, and is a poorly designed protocol for appending information to the end of files. This can be used as an auxiliary technique to store IPTC information in images, but is incompatible with some file formats.</p> <p>ExifTool will read and write (but not create) AFCP IPTC information in JPEG and TIFF images.</p> <p>See <a href="http://web.archive.org/web/20080828211305/http://www.tocarte.com/media/axs_afcp_spec.pdf">http://web.archive.org/web/20080828211305/http://www.tocarte.com/media/axs_afcp_spec.pdf</a> for the AFCP specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'IPTC'</td> <td>IPTC</td> <td class=c>-</td> <td>--&gt; <a href='IPTC.html'>IPTC Tags</a></td></tr> <tr class=b> <td>'Nail'</td> <td>ThumbnailImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'PrVw'</td> <td>PreviewImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TEXT'</td> <td>Text</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jul 3, 2013</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/AIFF.html��������������������������������������������������������000644 �000765 �000024 �00000007541 12527350231 020430� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>AIFF Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>AIFF Tags</h2> <p>Tags extracted from Audio Interchange File Format (AIFF) files. See <a href="http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/AIFF.html">http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/AIFF.html</a> for the AIFF specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'(c) '</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ANNO'</td> <td>Annotation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'AUTH'</td> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'COMM'</td> <td>Common</td> <td class=c>-</td> <td>--&gt; <a href='AIFF.html#Common'>AIFF Common Tags</a></td></tr> <tr> <td>'COMT'</td> <td>Comment</td> <td class=c>-</td> <td>--&gt; <a href='AIFF.html#Comment'>AIFF Comment Tags</a></td></tr> <tr class=b> <td>'FVER'</td> <td>FormatVersion</td> <td class=c>-</td> <td>--&gt; <a href='AIFF.html#FormatVers'>AIFF FormatVers Tags</a></td></tr> <tr> <td>'ID3 '</td> <td>ID3</td> <td class=c>-</td> <td>--&gt; <a href='ID3.html'>ID3 Tags</a></td></tr> <tr class=b> <td>'NAME'</td> <td>Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Common'>AIFF Common Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>NumChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>NumSampleFrames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>SampleSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>SampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>CompressionType</td> <td class=c>N</td> <td><table class=cols><tr> <td>&#39;ACE2&#39; = ACE 2-to-1 <br>&#39;ACE8&#39; = ACE 8-to-3 <br>&#39;MAC3&#39; = MAC 3-to-1 <br>&#39;MAC6&#39; = MAC 6-to-1 <br>&#39;NONE&#39; = None <br>&#39;sowt&#39; = Little-endian, no compression</td></tr></table> </td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>CompressorName</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Comment'>AIFF Comment Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>CommentTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>MarkerID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FormatVers'>AIFF FormatVers Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FormatVersionTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 3, 2012</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/APE.html���������������������������������������������������������000644 �000765 �000024 �00000007160 12273720670 020333� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>APE Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>APE Tags</h2> <p>Tags found in Monkey&#39;s Audio (APE) information. Only a few common tags are listed below, but ExifTool will extract any tag found. ExifTool supports APEv1 and APEv2 tags, as well as ID3 information in APE files, and will also read APE metadata from MP3 and MPC files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Album'</td> <td>Album</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Artist'</td> <td>Artist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Genre'</td> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Title'</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Tool Name'</td> <td>ToolName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Tool Version'</td> <td>ToolVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Track'</td> <td>Track</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Year'</td> <td>Year</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='NewHeader'>APE NewHeader Tags</a></h2> <p>APE MAC audio header for version 3.98 or later.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>CompressionLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>BlocksPerFrame</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>FinalFrameBlocks</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>TotalFrames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>BitsPerSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>Channels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>SampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='OldHeader'>APE OldHeader Tags</a></h2> <p>APE MAC audio header for version 3.97 or earlier.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>APEVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>CompressionLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>Channels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>SampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>TotalFrames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>FinalFrameBlocks</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Feb 3, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/APP12.html�������������������������������������������������������000644 �000765 �000024 �00000010155 11524240635 020503� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>APP12 Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top><a name='PictureInfo'>APP12 PictureInfo Tags</a></h2> <p>The JPEG APP12 &quot;Picture Info&quot; segment was used by some older cameras, and contains ASCII-based meta information. Below are some tags which have been observed Agfa and Polaroid images, however ExifTool will extract information from any tags found in this segment.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Aperture'</td> <td>Aperture</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ColorMode'</td> <td>ColorMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ConTake'</td> <td>ConTake</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ExpBias'</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'FNumber'</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'FWare'</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Flash'</td> <td>Flash</td> <td class=c>N</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td>'FocusMode'</td> <td>FocusMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'FocusPos'</td> <td>FocusPos</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ID'</td> <td>ID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ImageSize'</td> <td>ImageSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'LightS'</td> <td>LightS</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Macro'</td> <td>Macro</td> <td class=c>N</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td>'Protect'</td> <td>Protect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Quality'</td> <td>Quality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Resolution'</td> <td>Resolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Serial#'</td> <td>SerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Shutter'</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'StrobeTime'</td> <td>StrobeTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TimeDate'</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Type'</td> <td>CameraType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Version'</td> <td>Version</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Ytarget'</td> <td>YTarget</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Zoom'</td> <td>Zoom</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ZoomPos'</td> <td>ZoomPos</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'shtr'</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ylevel'</td> <td>YLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Ducky'>APP12 Ducky Tags</a></h2> <p>Photoshop uses the JPEG APP12 &quot;Ducky&quot; segment to store some information in &quot;Save for Web&quot; images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>Quality</td> <td class=c title=' / = Avoided'>int32u/</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>Comment</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>Copyright</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 22, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Apple.html�������������������������������������������������������000644 �000765 �000024 �00000004311 12502611136 020751� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Apple Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Apple Tags</h2> <p>Tags extracted from maker notes of images from the iPhone 5 with iOS 7.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>RunTime</td> <td class=c>-</td> <td>--&gt; <a href='Apple.html#RunTime'>Apple RunTime Tags</a></td></tr> <tr class=b> <td title='0x000a = 10'>0x000a</td> <td>HDRImageType</td> <td class=c>int32s</td> <td><span class=s>3 = HDR Image <br>4 = Original Image</span></td></tr> <tr> <td title='0x000b = 11'>0x000b</td> <td>BurstUUID</td> <td class=c>string</td> <td><span class=s><span class=n>(unique ID for all images in a burst)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='RunTime'>Apple RunTime Tags</a></h2> <p>This PLIST-format information contains the elements of a CMTime structure representing the amount of time the phone has been running since the last boot, not including standby time.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'epoch'</td> <td>RunTimeEpoch</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'flags'</td> <td>RunTimeFlags</td> <td class=c>N</td> <td><span class=s>Bit 0 = Valid <br>Bit 1 = Has been rounded <br>Bit 2 = Positive infinity <br>Bit 3 = Negative infinity <br>Bit 4 = Indefinite</span></td></tr> <tr> <td>'timescale'</td> <td>RunTimeScale</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'value'</td> <td>RunTimeValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Mar 19, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/ASF.html���������������������������������������������������������000644 �000765 �000024 �00000054130 12527350231 020330� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>ASF Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>ASF Tags</h2> <p>The ASF format is used by Windows WMA and WMV files, and DIVX videos. Tag ID&#39;s aren&#39;t listed because they are huge 128-bit GUID&#39;s that would ruin the formatting of this table.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>SimpleIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimecodeIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Header</td> <td class=c>-</td> <td>--&gt; <a href='ASF.html#Header'>ASF Header Tags</a></td></tr> <tr class=b> <td>Data</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>XMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> <tr class=b> <td>Index</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MediaIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Header'>ASF Header Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Padding</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ScriptCommand</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContentBranding</td> <td class=c>-</td> <td>--&gt; <a href='ASF.html#ContentBranding'>ASF ContentBranding Tags</a></td></tr> <tr class=b> <td>ContentEncryption</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DigitalSignature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ExtendedContentEncryption</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HeaderExtension</td> <td class=c>-</td> <td>--&gt; <a href='ASF.html#HeaderExtension'>ASF HeaderExtension Tags</a></td></tr> <tr class=b> <td>ContentDescription</td> <td class=c>-</td> <td>--&gt; <a href='ASF.html#ContentDescr'>ASF ContentDescr Tags</a></td></tr> <tr> <td>ErrorCorrection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StreamBitrateProps</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CodecList</td> <td class=c>-</td> <td>--&gt; <a href='ASF.html#CodecList'>ASF CodecList Tags</a></td></tr> <tr class=b> <td>FileProperties</td> <td class=c>-</td> <td>--&gt; <a href='ASF.html#FileProperties'>ASF FileProperties Tags</a></td></tr> <tr> <td>StreamProperties</td> <td class=c>-</td> <td>--&gt; <a href='ASF.html#StreamProperties'>ASF StreamProperties Tags</a></td></tr> <tr class=b> <td>ExtendedContentDescr</td> <td class=c>-</td> <td>--&gt; <a href='ASF.html#ExtendedDescr'>ASF ExtendedDescr Tags</a></td></tr> <tr> <td>BitrateMutualExclusion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Marker</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ContentBranding'>ASF ContentBranding Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>BannerImageType</td> <td class=c>N</td> <td><span class=s>0 = None <br>1 = Bitmap <br>2 = JPEG <br>3 = GIF</span></td></tr> <tr class=b> <td>BannerImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BannerImageURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CopyrightURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='HeaderExtension'>ASF HeaderExtension Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>ExtendedStreamProps</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AdvancedContentEncryption</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MetadataLibrary</td> <td class=c>-</td> <td>--&gt; <a href='ASF.html#ExtendedDescr'>ASF ExtendedDescr Tags</a></td></tr> <tr class=b> <td>TimecodeIndexParms</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Compatibility</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LanguageList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AdvancedMutualExcl</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BandwidthSharing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Reserved1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Metadata</td> <td class=c>-</td> <td>--&gt; <a href='ASF.html#ExtendedDescr'>ASF ExtendedDescr Tags</a></td></tr> <tr> <td>GroupMutualExclusion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StreamPrioritization</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IndexParameters</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ExtendedDescr'>ASF ExtendedDescr Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>ASFLeakyBucketPairs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASFPacketCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASFSecurityObjectsSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AlbumArtist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AlbumCoverURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AlbumTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AspectRatioX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AspectRatioY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AudioFileURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioSourceURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AuthorURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AverageLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BannerImageData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BannerImageType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BannerImageURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BeatsPerMinute</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Bitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Broadcast</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BufferAverage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Can_Skip_Backward</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Can_Skip_Forward</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Category</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Codec</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Composer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Conductor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContainerFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContentDistributor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContentGroupDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CopyrightURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CurrentBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DRM</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DRM_ContentID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DRM_DRMHeader</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DRM_DRMHeader_ContentDistributor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DRM_DRMHeader_ContentID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DRM_DRMHeader_IndividualizedVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DRM_DRMHeader_KeyID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DRM_DRMHeader_LicenseAcqURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DRM_DRMHeader_SubscriptionContentID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DRM_IndividualizedVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DRM_KeyID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DRM_LASignatureCert</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DRM_LASignatureLicSrvCert</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DRM_LASignaturePrivKey</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DRM_LASignatureRootCert</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DRM_LicenseAcqURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DRM_V1LicenseAcqURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DVDID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Director</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EncodedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EncodingSettings</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EncodingTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FileSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>GenreID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HasArbitraryDataStream</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HasAttachedImages</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HasAudio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HasFileTransferStream</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HasImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HasScript</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HasVideo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ISRC</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>InitialKey</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IsVBR</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Is_Protected</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Is_Trusted</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Language</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Lyrics</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Lyrics_Synchronised</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MCDI</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MediaClassPrimaryID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MediaClassSecondaryID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MediaCredits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MediaIsDelay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MediaIsFinale</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MediaIsLive</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MediaIsPremiere</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MediaIsRepeat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MediaIsSAP</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MediaIsStereo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MediaIsSubtitled</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MediaIsTape</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MediaNetworkAffiliation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MediaOriginalBroadcastDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MediaOriginalChannel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MediaStationCallSign</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MediaStationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ModifiedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Mood</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>NSC_Address</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>NSC_Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>NSC_Email</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>NSC_Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>NSC_Phone</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>NumberOfFrames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OptimalBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OriginalAlbumTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OriginalArtist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OriginalFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OriginalLyricist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OriginalReleaseTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OriginalReleaseYear</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ParentalRating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ParentalRatingReason</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PartOfSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PeakBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PeakValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Period</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Picture</td> <td class=c>-</td> <td>--&gt; <a href='ASF.html#Picture'>ASF Picture Tags</a></td></tr> <tr> <td>PlaylistDelay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Producer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PromotionURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProtectionType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Provider</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProviderCopyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProviderRating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProviderStyle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Publisher</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RadioStationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RadioStationOwner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Rating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Seekable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SharedUserRating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Signature_Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StreamTypeInfo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Stridable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Subtitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SubtitleDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SubscriptionContentID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Text</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ToolName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ToolVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Track</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TrackNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UniqueFileIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UserWebURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VBRPeak</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoClosedCaptioning</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoFrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>WMADRCAverageReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>WMADRCAverageTarget</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>WMADRCPeakReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>WMADRCPeakTarget</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>WMCollectionGroupID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>WMCollectionID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>WMContentID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Writer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Year</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Picture'>ASF Picture Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>PictureType</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Other <br>1 = 32x32 PNG Icon <br>2 = Other Icon <br>3 = Front Cover <br>4 = Back Cover <br>5 = Leaflet <br>6 = Media <br>7 = Lead Artist <br>8 = Artist <br>9 = Conductor <br>10 = Band <br>11 = Composer <br>12 = Lyricist <br>13 = Recording Studio or Location <br>14 = Recording Session <br>15 = Performance <br>16 = Capture from Movie or Video <br>17 = Bright(ly) Colored Fish <br>18 = Illustration <br>19 = Band Logo <br>20 = Publisher Logo</td></tr></table> </td></tr> <tr class=b> <td>PictureMIMEType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PictureDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Picture</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ContentDescr'>ASF ContentDescr Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Rating</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CodecList'>ASF CodecList Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AudioCodecDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioCodecName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OtherCodecDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OtherCodecName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoCodecDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoCodecName</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FileProperties'>ASF FileProperties Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FileID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>FileLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>CreationDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>DataPackets</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>PlayDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>SendDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='56 = 0x38'>56</td> <td>Preroll</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='64 = 0x40'>64</td> <td>Flags</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='68 = 0x44'>68</td> <td>MinPacketSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='72 = 0x48'>72</td> <td>MaxPacketSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='76 = 0x4c'>76</td> <td>MaxBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='StreamProperties'>ASF StreamProperties Tags</a></h2> <p>Tags with index 54 and greater are conditional based on the StreamType.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>StreamType</td> <td class=c>N</td> <td><span class=s>&#39;35907DE0-E415-11CF-A917-00805F5C442B&#39; = Degradable JPEG <br>&#39;3AFB65E2-47EF-40F2-AC2C-70A90D71D343&#39; = Binary <br>&#39;59DACFC0-59E6-11D0-A3AC-00A0C90348F6&#39; = Command <br>&#39;91BD222C-F21C-497A-8B6D-5AA86BFC0185&#39; = File Transfer <br>&#39;B61BE100-5B4E-11CF-A8FD-00805F5C442B&#39; = JFIF <br>&#39;BC19EFC0-5B4D-11CF-A8FD-00805F5C442B&#39; = Video <br>&#39;F8699E40-5B4D-11CF-A8FD-00805F5C442B&#39; = Audio</span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>ErrorCorrectionType</td> <td class=c>N</td> <td><span class=s>&#39;20FB5700-5B55-11CF-A8FD-00805F5C442B&#39; = No Error Correction <br>&#39;BFC3CD50-618F-11CF-8BB2-00AA00B4E220&#39; = Audio Spread</span></td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>TimeOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>StreamNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='54 = 0x36'>54</td> <td>AudioCodecID <br>ImageWidth</td> <td class=c>N<br>N</td> <td>--&gt; <a href='RIFF.html#AudioEncoding'>RIFF AudioEncoding Values</a></td></tr> <tr class=b> <td class=r title='56 = 0x38'>56</td> <td>AudioChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='58 = 0x3a'>58</td> <td>AudioSampleRate <br>ImageHeight</td> <td class=c>N<br>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised May 14, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Audible.html�����������������������������������������������������000644 �000765 �000024 �00000010451 12511243036 021257� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Audible Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Audible Tags</h2> <p>ExifTool will extract any information found in the metadata dictionary of Audible .AA files, even if not listed in the table below.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'_chapter_count'</td> <td>ChapterCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'_cover_art'</td> <td>CoverArt</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'author'</td> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'copyright'</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pub_date_start'</td> <td>PublishDateStart</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'pubdate'</td> <td>PublishDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='tags'>Audible tags Tags</a></h2> <p>Information found in &quot;tags&quot; atom of Audible M4B audio books.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'cvrx'</td> <td>Audible_cvrx</td> <td class=c>-</td> <td>--&gt; <a href='Audible.html#cvrx'>Audible cvrx Tags</a></td></tr> <tr class=b> <td>'meta'</td> <td>Audible_meta</td> <td class=c>-</td> <td>--&gt; <a href='Audible.html#meta'>Audible meta Tags</a></td></tr> <tr> <td>'tseg'</td> <td>Audible_tseg</td> <td class=c>-</td> <td>--&gt; <a href='Audible.html#tseg'>Audible tseg Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='cvrx'>Audible cvrx Tags</a></h2> <p>Audible cover art information in M4B audio books.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CoverArt</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CoverArtType</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='meta'>Audible meta Tags</a></h2> <p>Information found in Audible M4B &quot;meta&quot; atom.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'ALBUMARTIST'</td> <td>AlbumArtist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Album'</td> <td>Album</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Artist'</td> <td>Artist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Comment'</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Genre'</td> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'SUBTITLE'</td> <td>Subtitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TOOL'</td> <td>CreatorTool</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Title'</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Year'</td> <td>Year</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'itunesmediatype'</td> <td>iTunesMediaType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'track'</td> <td>ChapterName</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='tseg'>Audible tseg Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'meta'</td> <td>Audible_meta2</td> <td class=c>-</td> <td>--&gt; <a href='Audible.html#meta'>Audible meta Tags</a></td></tr> <tr class=b> <td>'tshd'</td> <td>ChapterNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Apr 8, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/BMP.html���������������������������������������������������������000644 �000765 �000024 �00000005341 12527350232 020336� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>BMP Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>BMP Tags</h2> <p>There really isn&#39;t much meta information in a BMP file as such, just a bit of image related information.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>Planes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>BitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>Compression</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = None <br>1 = 8-Bit RLE <br>2 = 4-Bit RLE</td><td>&nbsp;&nbsp;</td> <td>3 = Bitfields <br>4 = JPEG <br>5 = PNG</td></tr></table> </td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>ImageLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>PixelsPerMeterX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28</td> <td>PixelsPerMeterY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>NumColors</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='36 = 0x24'>36</td> <td>NumImportantColors</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='OS2'>BMP OS2 Tags</a></h2> <p>Information extracted from OS/2-format BMP images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>Planes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>BitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 21, 2010</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Canon.html�������������������������������������������������������000644 �000765 �000024 �00001111005 12623347003 020751� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Canon Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Canon Tags</h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>CanonCameraSettings</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#CameraSettings'>Canon CameraSettings Tags</a></td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>CanonFocalLength</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#FocalLength'>Canon FocalLength Tags</a></td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>CanonFlashInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>CanonShotInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ShotInfo'>Canon ShotInfo Tags</a></td></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>CanonPanorama</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#Panorama'>Canon Panorama Tags</a></td></tr> <tr class=b> <td title='0x0006 = 6'>0x0006</td> <td>CanonImageType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0007 = 7'>0x0007</td> <td>CanonFirmwareVersion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0008 = 8'>0x0008</td> <td>FileNumber</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0009 = 9'>0x0009</td> <td>OwnerName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000a = 10'>0x000a</td> <td>UnknownD30</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#UnknownD30'>Canon UnknownD30 Tags</a></td></tr> <tr> <td title='0x000c = 12'>0x000c</td> <td>SerialNumber</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000d = 13'>0x000d</td> <td>CanonCameraInfo1D <br>CanonCameraInfo1DmkII <br>CanonCameraInfo1DmkIIN <br>CanonCameraInfo1DmkIII <br>CanonCameraInfo1DmkIV <br>CanonCameraInfo1DX <br>CanonCameraInfo5D <br>CanonCameraInfo5DmkII <br>CanonCameraInfo5DmkIII <br>CanonCameraInfo6D <br>CanonCameraInfo7D <br>CanonCameraInfo40D <br>CanonCameraInfo50D <br>CanonCameraInfo60D <br>CanonCameraInfo70D <br>CanonCameraInfo450D <br>CanonCameraInfo500D <br>CanonCameraInfo550D <br>CanonCameraInfo600D <br>CanonCameraInfo650D <br>CanonCameraInfo1000D <br>CanonCameraInfo1100D <br>CanonCameraInfoPowerShot <br>CanonCameraInfoPowerShot2 <br>CanonCameraInfoUnknown32 <br>CanonCameraInfoUnknown16 <br>CanonCameraInfoUnknown</td> <td class=c>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-</td> <td>--&gt; <a href='Canon.html#CameraInfo1D'>Canon CameraInfo1D Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo1DmkII'>Canon CameraInfo1DmkII Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo1DmkIIN'>Canon CameraInfo1DmkIIN Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo1DmkIII'>Canon CameraInfo1DmkIII Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo1DmkIV'>Canon CameraInfo1DmkIV Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo1DX'>Canon CameraInfo1DX Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo5D'>Canon CameraInfo5D Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo5DmkII'>Canon CameraInfo5DmkII Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo5DmkIII'>Canon CameraInfo5DmkIII Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo6D'>Canon CameraInfo6D Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo7D'>Canon CameraInfo7D Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo40D'>Canon CameraInfo40D Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo50D'>Canon CameraInfo50D Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo60D'>Canon CameraInfo60D Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo70D'>Canon CameraInfo70D Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo450D'>Canon CameraInfo450D Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo500D'>Canon CameraInfo500D Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo550D'>Canon CameraInfo550D Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo600D'>Canon CameraInfo600D Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo650D'>Canon CameraInfo650D Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo1000D'>Canon CameraInfo1000D Tags</a> <br>--&gt; <a href='Canon.html#CameraInfo600D'>Canon CameraInfo600D Tags</a> <br>--&gt; <a href='Canon.html#CameraInfoPowerShot'>Canon CameraInfoPowerShot Tags</a> <br>--&gt; <a href='Canon.html#CameraInfoPowerShot2'>Canon CameraInfoPowerShot2 Tags</a> <br>--&gt; <a href='Canon.html#CameraInfoUnknown32'>Canon CameraInfoUnknown32 Tags</a> <br>--&gt; <a href='Canon.html#CameraInfoUnknown16'>Canon CameraInfoUnknown16 Tags</a> <br>--&gt; <a href='Canon.html#CameraInfoUnknown'>Canon CameraInfoUnknown Tags</a></td></tr> <tr> <td title='0x000e = 14'>0x000e</td> <td>CanonFileLength</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000f = 15'>0x000f</td> <td>CustomFunctions1D <br>CustomFunctions5D <br>CustomFunctions10D <br>CustomFunctions20D <br>CustomFunctions30D <br>CustomFunctions350D <br>CustomFunctions400D <br>CustomFunctionsD30 <br>CustomFunctionsD60 <br>CustomFunctionsUnknown</td> <td class=c>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-</td> <td>--&gt; <a href='CanonCustom.html#Functions1D'>CanonCustom Functions1D Tags</a> <br>--&gt; <a href='CanonCustom.html#Functions5D'>CanonCustom Functions5D Tags</a> <br>--&gt; <a href='CanonCustom.html#Functions10D'>CanonCustom Functions10D Tags</a> <br>--&gt; <a href='CanonCustom.html#Functions20D'>CanonCustom Functions20D Tags</a> <br>--&gt; <a href='CanonCustom.html#Functions30D'>CanonCustom Functions30D Tags</a> <br>--&gt; <a href='CanonCustom.html#Functions350D'>CanonCustom Functions350D Tags</a> <br>--&gt; <a href='CanonCustom.html#Functions400D'>CanonCustom Functions400D Tags</a> <br>--&gt; <a href='CanonCustom.html#FunctionsD30'>CanonCustom FunctionsD30 Tags</a> <br>--&gt; <a href='CanonCustom.html#FunctionsD30'>CanonCustom FunctionsD30 Tags</a> <br>--&gt; <a href='CanonCustom.html#FuncsUnknown'>CanonCustom FuncsUnknown Tags</a></td></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>CanonModelID</td> <td class=c>int32u</td> <td>--&gt; <a href='Canon.html#CanonModelID'>Canon CanonModelID Values</a></td></tr> <tr class=b> <td title='0x0011 = 17'>0x0011</td> <td>MovieInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#MovieInfo'>Canon MovieInfo Tags</a></td></tr> <tr> <td title='0x0012 = 18'>0x0012</td> <td>CanonAFInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#AFInfo'>Canon AFInfo Tags</a></td></tr> <tr class=b> <td title='0x0013 = 19'>0x0013</td> <td>ThumbnailImageValidArea</td> <td class=c>int16u[4]</td> <td><span class=s><span class=n>(all zeros for full frame)</span></span></td></tr> <tr> <td title='0x0015 = 21'>0x0015</td> <td>SerialNumberFormat</td> <td class=c>int32u</td> <td><span class=s>0x90000000 = Format 1 <br>0xa0000000 = Format 2</span></td></tr> <tr class=b> <td title='0x001a = 26'>0x001a</td> <td>SuperMacro</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On (1) <br>2 = On (2)</span></td></tr> <tr> <td title='0x001c = 28'>0x001c</td> <td>DateStampMode</td> <td class=c>int16u</td> <td><span class=s><span class=n>(used only in postcard mode)</span> <br>0 = Off <br>1 = Date <br>2 = Date &amp; Time</span></td></tr> <tr class=b> <td title='0x001d = 29'>0x001d</td> <td>MyColors</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#MyColors'>Canon MyColors Tags</a></td></tr> <tr> <td title='0x001e = 30'>0x001e</td> <td>FirmwareRevision</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0023 = 35'>0x0023</td> <td>Categories</td> <td class=c>int32u[2]</td> <td><span class=s><span class=n>(2 values: 1. always 8, 2. Categories)</span></span><table class=cols><tr> <td>0x0 = (none) <br>Bit 0 = People <br>Bit 1 = Scenery <br>Bit 2 = Events</td><td>&nbsp;&nbsp;</td> <td>Bit 3 = User 1 <br>Bit 4 = User 2 <br>Bit 5 = User 3 <br>Bit 6 = To Do</td></tr></table> </td></tr> <tr> <td title='0x0024 = 36'>0x0024</td> <td>FaceDetect1</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#FaceDetect1'>Canon FaceDetect1 Tags</a></td></tr> <tr class=b> <td title='0x0025 = 37'>0x0025</td> <td>FaceDetect2</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#FaceDetect2'>Canon FaceDetect2 Tags</a></td></tr> <tr> <td title='0x0026 = 38'>0x0026</td> <td>CanonAFInfo2</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#AFInfo2'>Canon AFInfo2 Tags</a></td></tr> <tr class=b> <td title='0x0027 = 39'>0x0027</td> <td>ContrastInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ContrastInfo'>Canon ContrastInfo Tags</a></td></tr> <tr> <td title='0x0028 = 40'>0x0028</td> <td>ImageUniqueID</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x002f = 47'>0x002f</td> <td>FaceDetect3</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#FaceDetect3'>Canon FaceDetect3 Tags</a></td></tr> <tr> <td title='0x0035 = 53'>0x0035</td> <td>TimeInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#TimeInfo'>Canon TimeInfo Tags</a></td></tr> <tr class=b> <td title='0x003c = 60'>0x003c</td> <td>AFInfo3</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#AFInfo2'>Canon AFInfo2 Tags</a></td></tr> <tr> <td title='0x0081 = 129'>0x0081</td> <td>RawDataOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0083 = 131'>0x0083</td> <td>OriginalDecisionDataOffset</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr> <td title='0x0090 = 144'>0x0090</td> <td>CustomFunctions1D</td> <td class=c>-</td> <td>--&gt; <a href='CanonCustom.html#Functions1D'>CanonCustom Functions1D Tags</a></td></tr> <tr class=b> <td title='0x0091 = 145'>0x0091</td> <td>PersonalFunctions</td> <td class=c>-</td> <td>--&gt; <a href='CanonCustom.html#PersonalFuncs'>CanonCustom PersonalFuncs Tags</a></td></tr> <tr> <td title='0x0092 = 146'>0x0092</td> <td>PersonalFunctionValues</td> <td class=c>-</td> <td>--&gt; <a href='CanonCustom.html#PersonalFuncValues'>CanonCustom PersonalFuncValues Tags</a></td></tr> <tr class=b> <td title='0x0093 = 147'>0x0093</td> <td>CanonFileInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#FileInfo'>Canon FileInfo Tags</a></td></tr> <tr> <td title='0x0094 = 148'>0x0094</td> <td>AFPointsInFocus1D</td> <td class=c>N</td> <td><span class=s><span class=n>(EOS 1D -- 5 rows: A1-7, B1-10, C1-11, D1-10, E1-7, center point is C6)</span></span></td></tr> <tr class=b> <td title='0x0095 = 149'>0x0095</td> <td>LensModel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0096 = 150'>0x0096</td> <td>SerialInfo <br>InternalSerialNumber</td> <td class=c>-<br>string</td> <td>--&gt; <a href='Canon.html#SerialInfo'>Canon SerialInfo Tags</a></td></tr> <tr class=b> <td title='0x0097 = 151'>0x0097</td> <td>DustRemovalData</td> <td class=c title=' ! = Unsafe'>undef!</td> <td>&nbsp;</td></tr> <tr> <td title='0x0098 = 152'>0x0098</td> <td>CropInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#CropInfo'>Canon CropInfo Tags</a></td></tr> <tr class=b> <td title='0x0099 = 153'>0x0099</td> <td>CustomFunctions2</td> <td class=c>-</td> <td>--&gt; <a href='CanonCustom.html#Functions2'>CanonCustom Functions2 Tags</a></td></tr> <tr> <td title='0x009a = 154'>0x009a</td> <td>AspectInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#AspectInfo'>Canon AspectInfo Tags</a></td></tr> <tr class=b> <td title='0x00a0 = 160'>0x00a0</td> <td>ProcessingInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#Processing'>Canon Processing Tags</a></td></tr> <tr> <td title='0x00a1 = 161'>0x00a1</td> <td>ToneCurveTable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00a2 = 162'>0x00a2</td> <td>SharpnessTable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00a3 = 163'>0x00a3</td> <td>SharpnessFreqTable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00a4 = 164'>0x00a4</td> <td>WhiteBalanceTable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00a9 = 169'>0x00a9</td> <td>ColorBalance</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ColorBalance'>Canon ColorBalance Tags</a></td></tr> <tr class=b> <td title='0x00aa = 170'>0x00aa</td> <td>MeasuredColor</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#MeasuredColor'>Canon MeasuredColor Tags</a></td></tr> <tr> <td title='0x00ae = 174'>0x00ae</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00b0 = 176'>0x00b0</td> <td>CanonFlags</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#Flags'>Canon Flags Tags</a></td></tr> <tr> <td title='0x00b1 = 177'>0x00b1</td> <td>ModifiedInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ModifiedInfo'>Canon ModifiedInfo Tags</a></td></tr> <tr class=b> <td title='0x00b2 = 178'>0x00b2</td> <td>ToneCurveMatching</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00b3 = 179'>0x00b3</td> <td>WhiteBalanceMatching</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00b4 = 180'>0x00b4</td> <td>ColorSpace</td> <td class=c>int16u</td> <td><span class=s>1 = sRGB <br>2 = Adobe RGB</span></td></tr> <tr> <td title='0x00b6 = 182'>0x00b6</td> <td>PreviewImageInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PreviewImageInfo'>Canon PreviewImageInfo Tags</a></td></tr> <tr class=b> <td title='0x00d0 = 208'>0x00d0</td> <td>VRDOffset</td> <td class=c title=' * = Protected'>int32u*</td> <td><span class=s><span class=n>(offset of VRD &quot;recipe data&quot; if it exists)</span></span></td></tr> <tr> <td title='0x00e0 = 224'>0x00e0</td> <td>SensorInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#SensorInfo'>Canon SensorInfo Tags</a></td></tr> <tr class=b> <td title='0x4001 = 16385'>0x4001</td> <td>ColorData1 <br>ColorData2 <br>ColorData3 <br>ColorData4 <br>ColorData5 <br>ColorData6 <br>ColorData7 <br>ColorData8 <br>ColorDataUnknown</td> <td class=c>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-</td> <td>--&gt; <a href='Canon.html#ColorData1'>Canon ColorData1 Tags</a> <br>--&gt; <a href='Canon.html#ColorData2'>Canon ColorData2 Tags</a> <br>--&gt; <a href='Canon.html#ColorData3'>Canon ColorData3 Tags</a> <br>--&gt; <a href='Canon.html#ColorData4'>Canon ColorData4 Tags</a> <br>--&gt; <a href='Canon.html#ColorData5'>Canon ColorData5 Tags</a> <br>--&gt; <a href='Canon.html#ColorData6'>Canon ColorData6 Tags</a> <br>--&gt; <a href='Canon.html#ColorData7'>Canon ColorData7 Tags</a> <br>--&gt; <a href='Canon.html#ColorData8'>Canon ColorData8 Tags</a> <br>--&gt; <a href='Canon.html#ColorDataUnknown'>Canon ColorDataUnknown Tags</a></td></tr> <tr> <td title='0x4002 = 16386'>0x4002</td> <td>CRWParam?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x4003 = 16387'>0x4003</td> <td>ColorInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ColorInfo'>Canon ColorInfo Tags</a></td></tr> <tr> <td title='0x4005 = 16389'>0x4005</td> <td>Flavor?</td> <td class=c>N</td> <td><span class=s><span class=n>(unknown 49kB block, not copied to JPEG images)</span></span></td></tr> <tr class=b> <td title='0x4008 = 16392'>0x4008</td> <td>BlackLevel?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x4010 = 16400'>0x4010</td> <td>CustomPictureStyleFileName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x4013 = 16403'>0x4013</td> <td>AFMicroAdj</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#AFMicroAdj'>Canon AFMicroAdj Tags</a></td></tr> <tr> <td title='0x4015 = 16405'>0x4015</td> <td>VignettingCorr <br>VignettingCorrUnknown1 <br>VignettingCorrUnknown2</td> <td class=c>-<br>-<br>-</td> <td>--&gt; <a href='Canon.html#VignettingCorr'>Canon VignettingCorr Tags</a> <br>--&gt; <a href='Canon.html#VignettingCorrUnknown'>Canon VignettingCorrUnknown Tags</a> <br>--&gt; <a href='Canon.html#VignettingCorrUnknown'>Canon VignettingCorrUnknown Tags</a></td></tr> <tr class=b> <td title='0x4016 = 16406'>0x4016</td> <td>VignettingCorr2</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#VignettingCorr2'>Canon VignettingCorr2 Tags</a></td></tr> <tr> <td title='0x4018 = 16408'>0x4018</td> <td>LightingOpt</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#LightingOpt'>Canon LightingOpt Tags</a></td></tr> <tr class=b> <td title='0x4019 = 16409'>0x4019</td> <td>LensInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#LensInfo'>Canon LensInfo Tags</a></td></tr> <tr> <td title='0x4020 = 16416'>0x4020</td> <td>AmbienceInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#Ambience'>Canon Ambience Tags</a></td></tr> <tr class=b> <td title='0x4021 = 16417'>0x4021</td> <td>MultiExp</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#MultiExp'>Canon MultiExp Tags</a></td></tr> <tr> <td title='0x4024 = 16420'>0x4024</td> <td>FilterInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#FilterInfo'>Canon FilterInfo Tags</a></td></tr> <tr class=b> <td title='0x4025 = 16421'>0x4025</td> <td>HDRInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#HDRInfo'>Canon HDRInfo Tags</a></td></tr> <tr> <td title='0x4028 = 16424'>0x4028</td> <td>AFConfig</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#AFConfig'>Canon AFConfig Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CanonModelID'>Canon CanonModelID Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>CanonModelID</th></tr> <tr><td class=r>0x1010000</td><td>= PowerShot A30</td> </tr><tr><td class=r>0x1040000</td><td>= PowerShot S300 / Digital IXUS 300 / IXY Digital 300</td> </tr><tr><td class=r>0x1060000</td><td>= PowerShot A20</td> </tr><tr><td class=r>0x1080000</td><td>= PowerShot A10</td> </tr><tr><td class=r>0x1090000</td><td>= PowerShot S110 / Digital IXUS v / IXY Digital 200</td> </tr><tr><td class=r>0x1100000</td><td>= PowerShot G2</td> </tr><tr><td class=r>0x1110000</td><td>= PowerShot S40</td> </tr><tr><td class=r>0x1120000</td><td>= PowerShot S30</td> </tr><tr><td class=r>0x1130000</td><td>= PowerShot A40</td> </tr><tr><td class=r>0x1140000</td><td>= EOS D30</td> </tr><tr><td class=r>0x1150000</td><td>= PowerShot A100</td> </tr><tr><td class=r>0x1160000</td><td>= PowerShot S200 / Digital IXUS v2 / IXY Digital 200a</td> </tr><tr><td class=r>0x1170000</td><td>= PowerShot A200</td> </tr><tr><td class=r>0x1180000</td><td>= PowerShot S330 / Digital IXUS 330 / IXY Digital 300a</td> </tr><tr><td class=r>0x1190000</td><td>= PowerShot G3</td> </tr><tr><td class=r>0x1210000</td><td>= PowerShot S45</td> </tr><tr><td class=r>0x1230000</td><td>= PowerShot SD100 / Digital IXUS II / IXY Digital 30</td> </tr><tr><td class=r>0x1240000</td><td>= PowerShot S230 / Digital IXUS v3 / IXY Digital 320</td> </tr><tr><td class=r>0x1250000</td><td>= PowerShot A70</td> </tr><tr><td class=r>0x1260000</td><td>= PowerShot A60</td> </tr><tr><td class=r>0x1270000</td><td>= PowerShot S400 / Digital IXUS 400 / IXY Digital 400</td> </tr><tr><td class=r>0x1290000</td><td>= PowerShot G5</td> </tr><tr><td class=r>0x1300000</td><td>= PowerShot A300</td> </tr><tr><td class=r>0x1310000</td><td>= PowerShot S50</td> </tr><tr><td class=r>0x1340000</td><td>= PowerShot A80</td> </tr><tr><td class=r>0x1350000</td><td>= PowerShot SD10 / Digital IXUS i / IXY Digital L</td> </tr><tr><td class=r>0x1360000</td><td>= PowerShot S1 IS</td> </tr><tr><td class=r>0x1370000</td><td>= PowerShot Pro1</td> </tr><tr><td class=r>0x1380000</td><td>= PowerShot S70</td> </tr><tr><td class=r>0x1390000</td><td>= PowerShot S60</td> </tr><tr><td class=r>0x1400000</td><td>= PowerShot G6</td> </tr><tr><td class=r>0x1410000</td><td>= PowerShot S500 / Digital IXUS 500 / IXY Digital 500</td> </tr><tr><td class=r>0x1420000</td><td>= PowerShot A75</td> </tr><tr><td class=r>0x1440000</td><td>= PowerShot SD110 / Digital IXUS IIs / IXY Digital 30a</td> </tr><tr><td class=r>0x1450000</td><td>= PowerShot A400</td> </tr><tr><td class=r>0x1470000</td><td>= PowerShot A310</td> </tr><tr><td class=r>0x1490000</td><td>= PowerShot A85</td> </tr><tr><td class=r>0x1520000</td><td>= PowerShot S410 / Digital IXUS 430 / IXY Digital 450</td> </tr><tr><td class=r>0x1530000</td><td>= PowerShot A95</td> </tr><tr><td class=r>0x1540000</td><td>= PowerShot SD300 / Digital IXUS 40 / IXY Digital 50</td> </tr><tr><td class=r>0x1550000</td><td>= PowerShot SD200 / Digital IXUS 30 / IXY Digital 40</td> </tr><tr><td class=r>0x1560000</td><td>= PowerShot A520</td> </tr><tr><td class=r>0x1570000</td><td>= PowerShot A510</td> </tr><tr><td class=r>0x1590000</td><td>= PowerShot SD20 / Digital IXUS i5 / IXY Digital L2</td> </tr><tr><td class=r>0x1640000</td><td>= PowerShot S2 IS</td> </tr><tr><td class=r>0x1650000</td><td>= PowerShot SD430 / Digital IXUS Wireless / IXY Digital Wireless</td> </tr><tr><td class=r>0x1660000</td><td>= PowerShot SD500 / Digital IXUS 700 / IXY Digital 600</td> </tr><tr><td class=r>0x1668000</td><td>= EOS D60</td> </tr><tr><td class=r>0x1700000</td><td>= PowerShot SD30 / Digital IXUS i Zoom / IXY Digital L3</td> </tr><tr><td class=r>0x1740000</td><td>= PowerShot A430</td> </tr><tr><td class=r>0x1750000</td><td>= PowerShot A410</td> </tr><tr><td class=r>0x1760000</td><td>= PowerShot S80</td> </tr><tr><td class=r>0x1780000</td><td>= PowerShot A620</td> </tr><tr><td class=r>0x1790000</td><td>= PowerShot A610</td> </tr><tr><td class=r>0x1800000</td><td>= PowerShot SD630 / Digital IXUS 65 / IXY Digital 80</td> </tr><tr><td class=r>0x1810000</td><td>= PowerShot SD450 / Digital IXUS 55 / IXY Digital 60</td> </tr><tr><td class=r>0x1820000</td><td>= PowerShot TX1</td> </tr><tr><td class=r>0x1870000</td><td>= PowerShot SD400 / Digital IXUS 50 / IXY Digital 55</td> </tr><tr><td class=r>0x1880000</td><td>= PowerShot A420</td> </tr><tr><td class=r>0x1890000</td><td>= PowerShot SD900 / Digital IXUS 900 Ti / IXY Digital 1000</td> </tr><tr><td class=r>0x1900000</td><td>= PowerShot SD550 / Digital IXUS 750 / IXY Digital 700</td> </tr><tr><td class=r>0x1920000</td><td>= PowerShot A700</td> </tr><tr><td class=r>0x1940000</td><td>= PowerShot SD700 IS / Digital IXUS 800 IS / IXY Digital 800 IS</td> </tr><tr><td class=r>0x1950000</td><td>= PowerShot S3 IS</td> </tr><tr><td class=r>0x1960000</td><td>= PowerShot A540</td> </tr><tr><td class=r>0x1970000</td><td>= PowerShot SD600 / Digital IXUS 60 / IXY Digital 70</td> </tr><tr><td class=r>0x1980000</td><td>= PowerShot G7</td> </tr><tr><td class=r>0x1990000</td><td>= PowerShot A530</td> </tr><tr><td class=r>0x2000000</td><td>= PowerShot SD800 IS / Digital IXUS 850 IS / IXY Digital 900 IS</td> </tr><tr><td class=r>0x2010000</td><td>= PowerShot SD40 / Digital IXUS i7 / IXY Digital L4</td> </tr><tr><td class=r>0x2020000</td><td>= PowerShot A710 IS</td> </tr><tr><td class=r>0x2030000</td><td>= PowerShot A640</td> </tr><tr><td class=r>0x2040000</td><td>= PowerShot A630</td> </tr><tr><td class=r>0x2090000</td><td>= PowerShot S5 IS</td> </tr><tr><td class=r>0x2100000</td><td>= PowerShot A460</td> </tr><tr><td class=r>0x2120000</td><td>= PowerShot SD850 IS / Digital IXUS 950 IS / IXY Digital 810 IS</td> </tr><tr><td class=r>0x2130000</td><td>= PowerShot A570 IS</td> </tr><tr><td class=r>0x2140000</td><td>= PowerShot A560</td> </tr><tr><td class=r>0x2150000</td><td>= PowerShot SD750 / Digital IXUS 75 / IXY Digital 90</td> </tr><tr><td class=r>0x2160000</td><td>= PowerShot SD1000 / Digital IXUS 70 / IXY Digital 10</td> </tr><tr><td class=r>0x2180000</td><td>= PowerShot A550</td> </tr><tr><td class=r>0x2190000</td><td>= PowerShot A450</td> </tr><tr><td class=r>0x2230000</td><td>= PowerShot G9</td> </tr><tr><td class=r>0x2240000</td><td>= PowerShot A650 IS</td> </tr><tr><td class=r>0x2260000</td><td>= PowerShot A720 IS</td> </tr><tr><td class=r>0x2290000</td><td>= PowerShot SX100 IS</td> </tr><tr><td class=r>0x2300000</td><td>= PowerShot SD950 IS / Digital IXUS 960 IS / IXY Digital 2000 IS</td> </tr><tr><td class=r>0x2310000</td><td>= PowerShot SD870 IS / Digital IXUS 860 IS / IXY Digital 910 IS</td> </tr><tr><td class=r>0x2320000</td><td>= PowerShot SD890 IS / Digital IXUS 970 IS / IXY Digital 820 IS</td> </tr><tr><td class=r>0x2360000</td><td>= PowerShot SD790 IS / Digital IXUS 90 IS / IXY Digital 95 IS</td> </tr><tr><td class=r>0x2370000</td><td>= PowerShot SD770 IS / Digital IXUS 85 IS / IXY Digital 25 IS</td> </tr><tr><td class=r>0x2380000</td><td>= PowerShot A590 IS</td> </tr><tr><td class=r>0x2390000</td><td>= PowerShot A580</td> </tr><tr><td class=r>0x2420000</td><td>= PowerShot A470</td> </tr><tr><td class=r>0x2430000</td><td>= PowerShot SD1100 IS / Digital IXUS 80 IS / IXY Digital 20 IS</td> </tr><tr><td class=r>0x2460000</td><td>= PowerShot SX1 IS</td> </tr><tr><td class=r>0x2470000</td><td>= PowerShot SX10 IS</td> </tr><tr><td class=r>0x2480000</td><td>= PowerShot A1000 IS</td> </tr><tr><td class=r>0x2490000</td><td>= PowerShot G10</td> </tr><tr><td class=r>0x2510000</td><td>= PowerShot A2000 IS</td> </tr><tr><td class=r>0x2520000</td><td>= PowerShot SX110 IS</td> </tr><tr><td class=r>0x2530000</td><td>= PowerShot SD990 IS / Digital IXUS 980 IS / IXY Digital 3000 IS</td> </tr><tr><td class=r>0x2540000</td><td>= PowerShot SD880 IS / Digital IXUS 870 IS / IXY Digital 920 IS</td> </tr><tr><td class=r>0x2550000</td><td>= PowerShot E1</td> </tr><tr><td class=r>0x2560000</td><td>= PowerShot D10</td> </tr><tr><td class=r>0x2570000</td><td>= PowerShot SD960 IS / Digital IXUS 110 IS / IXY Digital 510 IS</td> </tr><tr><td class=r>0x2580000</td><td>= PowerShot A2100 IS</td> </tr><tr><td class=r>0x2590000</td><td>= PowerShot A480</td> </tr><tr><td class=r>0x2600000</td><td>= PowerShot SX200 IS</td> </tr><tr><td class=r>0x2610000</td><td>= PowerShot SD970 IS / Digital IXUS 990 IS / IXY Digital 830 IS</td> </tr><tr><td class=r>0x2620000</td><td>= PowerShot SD780 IS / Digital IXUS 100 IS / IXY Digital 210 IS</td> </tr><tr><td class=r>0x2630000</td><td>= PowerShot A1100 IS</td> </tr><tr><td class=r>0x2640000</td><td>= PowerShot SD1200 IS / Digital IXUS 95 IS / IXY Digital 110 IS</td> </tr><tr><td class=r>0x2700000</td><td>= PowerShot G11</td> </tr><tr><td class=r>0x2710000</td><td>= PowerShot SX120 IS</td> </tr><tr><td class=r>0x2720000</td><td>= PowerShot S90</td> </tr><tr><td class=r>0x2750000</td><td>= PowerShot SX20 IS</td> </tr><tr><td class=r>0x2760000</td><td>= PowerShot SD980 IS / Digital IXUS 200 IS / IXY Digital 930 IS</td> </tr><tr><td class=r>0x2770000</td><td>= PowerShot SD940 IS / Digital IXUS 120 IS / IXY Digital 220 IS</td> </tr><tr><td class=r>0x2800000</td><td>= PowerShot A495</td> </tr><tr><td class=r>0x2810000</td><td>= PowerShot A490</td> </tr><tr><td class=r>0x2820000</td><td>= PowerShot A3100 IS / A3150 IS</td> </tr><tr><td class=r>0x2830000</td><td>= PowerShot A3000 IS</td> </tr><tr><td class=r>0x2840000</td><td>= PowerShot SD1400 IS / IXUS 130 / IXY 400F</td> </tr><tr><td class=r>0x2850000</td><td>= PowerShot SD1300 IS / IXUS 105 / IXY 200F</td> </tr><tr><td class=r>0x2860000</td><td>= PowerShot SD3500 IS / IXUS 210 / IXY 10S</td> </tr><tr><td class=r>0x2870000</td><td>= PowerShot SX210 IS</td> </tr><tr><td class=r>0x2880000</td><td>= PowerShot SD4000 IS / IXUS 300 HS / IXY 30S</td> </tr><tr><td class=r>0x2890000</td><td>= PowerShot SD4500 IS / IXUS 1000 HS / IXY 50S</td> </tr><tr><td class=r>0x2920000</td><td>= PowerShot G12</td> </tr><tr><td class=r>0x2930000</td><td>= PowerShot SX30 IS</td> </tr><tr><td class=r>0x2940000</td><td>= PowerShot SX130 IS</td> </tr><tr><td class=r>0x2950000</td><td>= PowerShot S95</td> </tr><tr><td class=r>0x2980000</td><td>= PowerShot A3300 IS</td> </tr><tr><td class=r>0x2990000</td><td>= PowerShot A3200 IS</td> </tr><tr><td class=r>0x3000000</td><td>= PowerShot ELPH 500 HS / IXUS 310 HS / IXY 31S</td> </tr><tr><td class=r>0x3010000</td><td>= PowerShot Pro90 IS</td> </tr><tr><td class=r>0x3010001</td><td>= PowerShot A800</td> </tr><tr><td class=r>0x3020000</td><td>= PowerShot ELPH 100 HS / IXUS 115 HS / IXY 210F</td> </tr><tr><td class=r>0x3030000</td><td>= PowerShot SX230 HS</td> </tr><tr><td class=r>0x3040000</td><td>= PowerShot ELPH 300 HS / IXUS 220 HS / IXY 410F</td> </tr><tr><td class=r>0x3050000</td><td>= PowerShot A2200</td> </tr><tr><td class=r>0x3060000</td><td>= PowerShot A1200</td> </tr><tr><td class=r>0x3070000</td><td>= PowerShot SX220 HS</td> </tr><tr><td class=r>0x3080000</td><td>= PowerShot G1 X</td> </tr><tr><td class=r>0x3090000</td><td>= PowerShot SX150 IS</td> </tr><tr><td class=r>0x3100000</td><td>= PowerShot ELPH 510 HS / IXUS 1100 HS / IXY 51S</td> </tr><tr><td class=r>0x3110000</td><td>= PowerShot S100 (new)</td> </tr><tr><td class=r>0x3120000</td><td>= PowerShot ELPH 310 HS / IXUS 230 HS / IXY 600F</td> </tr><tr><td class=r>0x3130000</td><td>= PowerShot SX40 HS</td> </tr><tr><td class=r>0x3140000</td><td>= IXY 32S</td> </tr><tr><td class=r>0x3160000</td><td>= PowerShot A1300</td> </tr><tr><td class=r>0x3170000</td><td>= PowerShot A810</td> </tr><tr><td class=r>0x3180000</td><td>= PowerShot ELPH 320 HS / IXUS 240 HS / IXY 420F</td> </tr><tr><td class=r>0x3190000</td><td>= PowerShot ELPH 110 HS / IXUS 125 HS / IXY 220F</td> </tr><tr><td class=r>0x3200000</td><td>= PowerShot D20</td> </tr><tr><td class=r>0x3210000</td><td>= PowerShot A4000 IS</td> </tr><tr><td class=r>0x3220000</td><td>= PowerShot SX260 HS</td> </tr><tr><td class=r>0x3230000</td><td>= PowerShot SX240 HS</td> </tr><tr><td class=r>0x3240000</td><td>= PowerShot ELPH 530 HS / IXUS 510 HS / IXY 1</td> </tr><tr><td class=r>0x3250000</td><td>= PowerShot ELPH 520 HS / IXUS 500 HS / IXY 3</td> </tr><tr><td class=r>0x3260000</td><td>= PowerShot A3400 IS</td> </tr><tr><td class=r>0x3270000</td><td>= PowerShot A2400 IS</td> </tr><tr><td class=r>0x3280000</td><td>= PowerShot A2300</td> </tr><tr><td class=r>0x3330000</td><td>= PowerShot G15</td> </tr><tr><td class=r>0x3340000</td><td>= PowerShot SX50</td> </tr><tr><td class=r>0x3350000</td><td>= PowerShot SX160 IS</td> </tr><tr><td class=r>0x3360000</td><td>= PowerShot S110 (new)</td> </tr><tr><td class=r>0x3370000</td><td>= PowerShot SX500 IS</td> </tr><tr><td class=r>0x3380000</td><td>= PowerShot N</td> </tr><tr><td class=r>0x3390000</td><td>= IXUS 245 HS / IXY 430F</td> </tr><tr><td class=r>0x3400000</td><td>= PowerShot SX280 HS</td> </tr><tr><td class=r>0x3410000</td><td>= PowerShot SX270 HS</td> </tr><tr><td class=r>0x3420000</td><td>= PowerShot A3500 IS</td> </tr><tr><td class=r>0x3430000</td><td>= PowerShot A2600</td> </tr><tr><td class=r>0x3450000</td><td>= PowerShot A1400</td> </tr><tr><td class=r>0x3460000</td><td>= PowerShot ELPH 130 IS / IXUS 140 / IXY 110F</td> </tr><tr><td class=r>0x3470000</td><td>= PowerShot ELPH 115/120 IS / IXUS 132/135 / IXY 90F/100F</td> </tr><tr><td class=r>0x3490000</td><td>= PowerShot ELPH 330 HS / IXUS 255 HS / IXY 610F</td> </tr><tr><td class=r>0x3510000</td><td>= PowerShot A2500</td> </tr><tr><td class=r>0x3540000</td><td>= PowerShot G16</td> </tr><tr><td class=r>0x3550000</td><td>= PowerShot S120</td> </tr><tr><td class=r>0x3560000</td><td>= PowerShot SX170 IS</td> </tr><tr><td class=r>0x3580000</td><td>= PowerShot SX510 HS</td> </tr><tr><td class=r>0x3590000</td><td>= PowerShot S200 (new)</td> </tr><tr><td class=r>0x3600000</td><td>= IXY 620F</td> </tr><tr><td class=r>0x3610000</td><td>= PowerShot N100</td> </tr><tr><td class=r>0x3640000</td><td>= PowerShot G1 X Mark II</td> </tr><tr><td class=r>0x3650000</td><td>= PowerShot D30</td> </tr><tr><td class=r>0x3660000</td><td>= PowerShot SX700 HS</td> </tr><tr><td class=r>0x3670000</td><td>= PowerShot SX600 HS</td> </tr><tr><td class=r>0x3680000</td><td>= PowerShot ELPH 140 IS / IXUS 150 / IXY 130</td> </tr><tr><td class=r>0x3690000</td><td>= PowerShot ELPH 135 / IXUS 145 / IXY 120</td> </tr><tr><td class=r>0x3700000</td><td>= PowerShot ELPH 340 HS / IXUS 265 HS / IXY 630</td> </tr><tr><td class=r>0x3710000</td><td>= PowerShot ELPH 150 IS / IXUS 155 / IXY 140</td> </tr><tr><td class=r>0x3740000</td><td>= EOS M3</td> </tr><tr><td class=r>0x3750000</td><td>= PowerShot SX60 HS</td> </tr><tr><td class=r>0x3760000</td><td>= PowerShot SX520 HS</td> </tr><tr><td class=r>0x3770000</td><td>= PowerShot SX400 IS</td> </tr><tr><td class=r>0x3780000</td><td>= PowerShot G7 X</td> </tr><tr><td class=r>0x3790000</td><td>= PowerShot N2</td> </tr><tr><td class=r>0x3800000</td><td>= PowerShot SX530 HS</td> </tr><tr><td class=r>0x3820000</td><td>= PowerShot SX710 HS</td> </tr><tr><td class=r>0x3830000</td><td>= PowerShot SX610 HS</td> </tr><tr><td class=r>0x3840000</td><td>= EOS M10</td> </tr><tr><td class=r>0x3850000</td><td>= PowerShot G3 X</td> </tr><tr><td class=r>0x3860000</td><td>= PowerShot ELPH 165 HS / IXUS 165 / IXY 160</td> </tr><tr><td class=r>0x3870000</td><td>= PowerShot ELPH 160 / IXUS 160</td> </tr><tr><td class=r>0x3880000</td><td>= PowerShot ELPH 350 HS / IXUS 275 HS / IXY 640</td> </tr><tr><td class=r>0x3890000</td><td>= PowerShot ELPH 170 IS / IXUS 170</td> </tr><tr><td class=r>0x3910000</td><td>= PowerShot SX410 IS</td> </tr><tr><td class=r>0x3930000</td><td>= PowerShot G9 X</td> </tr><tr><td class=r>0x3950000</td><td>= PowerShot G5 X</td> </tr><tr><td class=r>0x4040000</td><td>= PowerShot G1</td> </tr><tr><td class=r>0x6040000</td><td>= PowerShot S100 / Digital IXUS / IXY Digital</td> </tr><tr><td class=r>0x4007d673</td><td>= DC19/DC21/DC22</td> </tr><tr><td class=r>0x4007d674</td><td>= XH A1</td> </tr><tr><td class=r>0x4007d675</td><td>= HV10</td> </tr><tr><td class=r>0x4007d676</td><td>= MD130/MD140/MD150/MD160/ZR850</td> </tr><tr><td class=r>0x4007d777</td><td>= DC50</td> </tr><tr><td class=r>0x4007d778</td><td>= HV20</td> </tr><tr><td class=r>0x4007d779</td><td>= DC211</td> </tr><tr><td class=r>0x4007d77a</td><td>= HG10</td> </tr><tr><td class=r>0x4007d77b</td><td>= HR10</td> </tr><tr><td class=r>0x4007d77d</td><td>= MD255/ZR950</td> </tr><tr><td class=r>0x4007d81c</td><td>= HF11</td> </tr><tr><td class=r>0x4007d878</td><td>= HV30</td> </tr><tr><td class=r>0x4007d87c</td><td>= XH A1S</td> </tr><tr><td class=r>0x4007d87e</td><td>= DC301/DC310/DC311/DC320/DC330</td> </tr><tr><td class=r>0x4007d87f</td><td>= FS100</td> </tr><tr><td class=r>0x4007d880</td><td>= HF10</td> </tr><tr><td class=r>0x4007d882</td><td>= HG20/HG21</td> </tr><tr><td class=r>0x4007d925</td><td>= HF21</td> </tr><tr><td class=r>0x4007d926</td><td>= HF S11</td> </tr><tr><td class=r>0x4007d978</td><td>= HV40</td> </tr><tr><td class=r>0x4007d987</td><td>= DC410/DC411/DC420</td> </tr><tr><td class=r>0x4007d988</td><td>= FS19/FS20/FS21/FS22/FS200</td> </tr><tr><td class=r>0x4007d989</td><td>= HF20/HF200</td> </tr><tr><td class=r>0x4007d98a</td><td>= HF S10/S100</td> </tr><tr><td class=r>0x4007da8e</td><td>= HF R10/R16/R17/R18/R100/R106</td> </tr><tr><td class=r>0x4007da8f</td><td>= HF M30/M31/M36/M300/M306</td> </tr><tr><td class=r>0x4007da90</td><td>= HF S20/S21/S200</td> </tr><tr><td class=r>0x4007da92</td><td>= FS31/FS36/FS37/FS300/FS305/FS306/FS307</td> </tr><tr><td class=r>0x4007dda9</td><td>= HF G25</td> </tr><tr><td class=r>0x4007dfb4</td><td>= XC10</td> </tr><tr><td class=r>0x80000001</td><td>= EOS-1D</td> </tr><tr><td class=r>0x80000167</td><td>= EOS-1DS</td> </tr><tr><td class=r>0x80000168</td><td>= EOS 10D</td> </tr><tr><td class=r>0x80000169</td><td>= EOS-1D Mark III</td> </tr><tr><td class=r>0x80000170</td><td>= EOS Digital Rebel / 300D / Kiss Digital</td> </tr><tr><td class=r>0x80000174</td><td>= EOS-1D Mark II</td> </tr><tr><td class=r>0x80000175</td><td>= EOS 20D</td> </tr><tr><td class=r>0x80000176</td><td>= EOS Digital Rebel XSi / 450D / Kiss X2</td> </tr><tr><td class=r>0x80000188</td><td>= EOS-1Ds Mark II</td> </tr><tr><td class=r>0x80000189</td><td>= EOS Digital Rebel XT / 350D / Kiss Digital N</td> </tr><tr><td class=r>0x80000190</td><td>= EOS 40D</td> </tr><tr><td class=r>0x80000213</td><td>= EOS 5D</td> </tr><tr><td class=r>0x80000215</td><td>= EOS-1Ds Mark III</td> </tr><tr><td class=r>0x80000218</td><td>= EOS 5D Mark II</td> </tr><tr><td class=r>0x80000219</td><td>= WFT-E1</td> </tr><tr><td class=r>0x80000232</td><td>= EOS-1D Mark II N</td> </tr><tr><td class=r>0x80000234</td><td>= EOS 30D</td> </tr><tr><td class=r>0x80000236</td><td>= EOS Digital Rebel XTi / 400D / Kiss Digital X</td> </tr><tr><td class=r>0x80000241</td><td>= WFT-E2</td> </tr><tr><td class=r>0x80000246</td><td>= WFT-E3</td> </tr><tr><td class=r>0x80000250</td><td>= EOS 7D</td> </tr><tr><td class=r>0x80000252</td><td>= EOS Rebel T1i / 500D / Kiss X3</td> </tr><tr><td class=r>0x80000254</td><td>= EOS Rebel XS / 1000D / Kiss F</td> </tr><tr><td class=r>0x80000261</td><td>= EOS 50D</td> </tr><tr><td class=r>0x80000269</td><td>= EOS-1D X</td> </tr><tr><td class=r>0x80000270</td><td>= EOS Rebel T2i / 550D / Kiss X4</td> </tr><tr><td class=r>0x80000271</td><td>= WFT-E4</td> </tr><tr><td class=r>0x80000273</td><td>= WFT-E5</td> </tr><tr><td class=r>0x80000281</td><td>= EOS-1D Mark IV</td> </tr><tr><td class=r>0x80000285</td><td>= EOS 5D Mark III</td> </tr><tr><td class=r>0x80000286</td><td>= EOS Rebel T3i / 600D / Kiss X5</td> </tr><tr><td class=r>0x80000287</td><td>= EOS 60D</td> </tr><tr><td class=r>0x80000288</td><td>= EOS Rebel T3 / 1100D / Kiss X50</td> </tr><tr><td class=r>0x80000289</td><td>= EOS 7D Mark II</td> </tr><tr><td class=r>0x80000297</td><td>= WFT-E2 II</td> </tr><tr><td class=r>0x80000298</td><td>= WFT-E4 II</td> </tr><tr><td class=r>0x80000301</td><td>= EOS Rebel T4i / 650D / Kiss X6i</td> </tr><tr><td class=r>0x80000302</td><td>= EOS 6D</td> </tr><tr><td class=r>0x80000324</td><td>= EOS-1D C</td> </tr><tr><td class=r>0x80000325</td><td>= EOS 70D</td> </tr><tr><td class=r>0x80000326</td><td>= EOS Rebel T5i / 700D / Kiss X7i</td> </tr><tr><td class=r>0x80000327</td><td>= EOS Rebel T5 / 1200D / Kiss X70</td> </tr><tr><td class=r>0x80000331</td><td>= EOS M</td> </tr><tr><td class=r>0x80000346</td><td>= EOS Rebel SL1 / 100D / Kiss X7</td> </tr><tr><td class=r>0x80000347</td><td>= EOS Rebel T6s / 760D / 8000D</td> </tr><tr><td class=r>0x80000355</td><td>= EOS M2</td> </tr><tr><td class=r>0x80000382</td><td>= EOS 5DS</td> </tr><tr><td class=r>0x80000393</td><td>= EOS Rebel T6i / 750D / Kiss X8i</td> </tr><tr><td class=r>0x80000401</td><td>= EOS 5DS R</td> </tr></table></td></tr></table></blockquote> <h2><a name='CameraSettings'>Canon CameraSettings Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>MacroMode</td> <td class=c>int16s</td> <td><span class=s>1 = Macro <br>2 = Normal</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>SelfTimer</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>Quality</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-1 = n/a <br>1 = Economy <br>2 = Normal <br>3 = Fine</td><td>&nbsp;&nbsp;</td> <td>4 = RAW <br>5 = Superfine <br>130 = Normal Movie <br>131 = Movie (2)</td></tr></table> </td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>CanonFlashMode</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-1 = n/a <br>0 = Off <br>1 = Auto <br>2 = On <br>3 = Red-eye reduction <br>4 = Slow-sync <br>5 = Red-eye reduction (Auto) <br>6 = Red-eye reduction (On) <br>16 = External flash</td></tr></table> </td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>ContinuousDrive</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = Single <br>1 = Continuous <br>2 = Movie <br>3 = Continuous, Speed Priority <br>4 = Continuous, Low <br>5 = Continuous, High <br>6 = Silent Single <br>9 = Single, Silent <br>10 = Continuous, Silent</td></tr></table> </td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>FocusMode</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = One-shot AF <br>1 = AI Servo AF <br>2 = AI Focus AF <br>3 = Manual Focus (3) <br>4 = Single <br>5 = Continuous</td><td>&nbsp;&nbsp;</td> <td>6 = Manual Focus (6) <br>16 = Pan Focus <br>256 = AF + MF <br>512 = Movie Snap Focus <br>519 = Movie Servo AF</td></tr></table> </td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>RecordMode</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>1 = JPEG <br>2 = CRW+THM <br>3 = AVI+THM</td><td>&nbsp;&nbsp;</td> <td>4 = TIF <br>5 = TIF+JPEG <br>6 = CR2</td><td>&nbsp;&nbsp;</td> <td>7 = CR2+JPEG <br>9 = MOV <br>10 = MP4</td></tr></table> </td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>CanonImageSize</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-1 = n/a <br>0 = Large <br>1 = Medium <br>2 = Small <br>5 = Medium 1 <br>6 = Medium 2 <br>7 = Medium 3 <br>8 = Postcard <br>9 = Widescreen</td><td>&nbsp;&nbsp;</td> <td>10 = Medium Widescreen <br>14 = Small 1 <br>15 = Small 2 <br>16 = Small 3 <br>128 = 640x480 Movie <br>129 = Medium Movie <br>130 = Small Movie <br>137 = 1280x720 Movie <br>142 = 1920x1080 Movie</td></tr></table> </td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>EasyMode</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = Full auto <br>1 = Manual <br>2 = Landscape <br>3 = Fast shutter <br>4 = Slow shutter <br>5 = Night <br>6 = Gray Scale <br>7 = Sepia <br>8 = Portrait <br>9 = Sports <br>10 = Macro <br>11 = Black &amp; White <br>12 = Pan focus <br>13 = Vivid <br>14 = Neutral <br>15 = Flash Off <br>16 = Long Shutter <br>17 = Super Macro <br>18 = Foliage <br>19 = Indoor <br>20 = Fireworks <br>21 = Beach <br>22 = Underwater <br>23 = Snow</td><td>&nbsp;&nbsp;</td> <td>24 = Kids &amp; Pets <br>25 = Night Snapshot <br>26 = Digital Macro <br>27 = My Colors <br>28 = Movie Snap <br>29 = Super Macro 2 <br>30 = Color Accent <br>31 = Color Swap <br>32 = Aquarium <br>33 = ISO 3200 <br>34 = ISO 6400 <br>35 = Creative Light Effect <br>36 = Easy <br>37 = Quick Shot <br>38 = Creative Auto <br>39 = Zoom Blur <br>40 = Low Light <br>41 = Nostalgic <br>42 = Super Vivid <br>43 = Poster Effect <br>44 = Face Self-timer <br>45 = Smile <br>46 = Wink Self-timer <br>47 = Fisheye Effect</td><td>&nbsp;&nbsp;</td> <td>48 = Miniature Effect <br>49 = High-speed Burst <br>50 = Best Image Selection <br>51 = High Dynamic Range <br>52 = Handheld Night Scene <br>53 = Movie Digest <br>54 = Live View Control <br>55 = Discreet <br>56 = Blur Reduction <br>57 = Monochrome <br>58 = Toy Camera Effect <br>59 = Scene Intelligent Auto <br>60 = High-speed Burst HQ <br>61 = Smooth Skin <br>62 = Soft Focus <br>257 = Spotlight <br>258 = Night 2 <br>259 = Night+ <br>260 = Super Night <br>261 = Sunset <br>263 = Night Scene <br>264 = Surface <br>265 = Low Light 2</td></tr></table> </td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>DigitalZoom</td> <td class=c>int16s</td> <td><span class=s>0 = None <br>1 = 2x <br>2 = 4x <br>3 = Other</span></td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>Contrast</td> <td class=c>int16s</td> <td><span class=s>0 = Normal</span></td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>Saturation</td> <td class=c>int16s</td> <td><span class=s>0 = Normal</span></td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>Sharpness</td> <td class=c>int16s</td> <td><span class=s><span class=n>(some models use a range of -2 to +2 where 0 is normal sharpening, and others use a range of 0 to 7 where 0 is no sharpening)</span></span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>CameraISO</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>MeteringMode</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = Default <br>1 = Spot <br>2 = Average <br>3 = Evaluative <br>4 = Partial <br>5 = Center-weighted average</td></tr></table> </td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>FocusRange</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = Manual <br>1 = Auto <br>2 = Not Known <br>3 = Macro <br>4 = Very Close <br>5 = Close</td><td>&nbsp;&nbsp;</td> <td>6 = Middle Range <br>7 = Far Range <br>8 = Pan Focus <br>9 = Super Macro <br>10 = Infinity</td></tr></table> </td></tr> <tr> <td class=r title='19 = 0x13'>19</td> <td>AFPoint</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0x2005 = Manual AF point selection <br>0x3000 = None (MF) <br>0x3001 = Auto AF point selection <br>0x3002 = Right <br>0x3003 = Center <br>0x3004 = Left <br>0x4001 = Auto AF point selection <br>0x4006 = Face Detect</td></tr></table> </td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>CanonExposureMode</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = Easy <br>1 = Program AE <br>2 = Shutter speed priority AE <br>3 = Aperture-priority AE <br>4 = Manual <br>5 = Depth-of-field AE <br>6 = M-Dep <br>7 = Bulb</td></tr></table> </td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>LensType</td> <td class=c>int16s</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a> <br><span class='n s'>(this value is incorrect for EOS 7D images with lenses of type 256 or greater)</span></td></tr> <tr class=b> <td class=r title='23 = 0x17'>23</td> <td>MaxFocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>MinFocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>FocalUnits</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='26 = 0x1a'>26</td> <td>MaxAperture</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>MinAperture</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>FlashActivity</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>FlashBits</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0x0 = (none) <br>Bit 0 = Manual <br>Bit 1 = TTL <br>Bit 2 = A-TTL <br>Bit 3 = E-TTL</td><td>&nbsp;&nbsp;</td> <td>Bit 4 = FP sync enabled <br>Bit 7 = 2nd-curtain sync used <br>Bit 11 = FP sync used <br>Bit 13 = Built-in <br>Bit 14 = External</td></tr></table> </td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>FocusContinuous</td> <td class=c>int16s</td> <td><span class=s>0 = Single <br>1 = Continuous <br>8 = Manual</span></td></tr> <tr class=b> <td class=r title='33 = 0x21'>33</td> <td>AESetting</td> <td class=c>int16s</td> <td><span class=s>0 = Normal AE <br>1 = Exposure Compensation <br>2 = AE Lock <br>3 = AE Lock + Exposure Comp. <br>4 = No AE</span></td></tr> <tr> <td class=r title='34 = 0x22'>34</td> <td>ImageStabilization</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = Off <br>1 = On <br>2 = Shoot Only <br>3 = Panning <br>4 = Dynamic</td><td>&nbsp;&nbsp;</td> <td>256 = Off (2) <br>257 = On (2) <br>258 = Shoot Only (2) <br>259 = Panning (2) <br>260 = Dynamic (2)</td></tr></table> </td></tr> <tr class=b> <td class=r title='35 = 0x23'>35</td> <td>DisplayAperture</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='36 = 0x24'>36</td> <td>ZoomSourceWidth</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='37 = 0x25'>37</td> <td>ZoomTargetWidth</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='39 = 0x27'>39</td> <td>SpotMeteringMode</td> <td class=c>int16s</td> <td><span class=s>0 = Center <br>1 = AF Point</span></td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>PhotoEffect</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Vivid <br>2 = Neutral <br>3 = Smooth</td><td>&nbsp;&nbsp;</td> <td>4 = Sepia <br>5 = B&amp;W <br>6 = Custom <br>100 = My Color Data</td></tr></table> </td></tr> <tr> <td class=r title='41 = 0x29'>41</td> <td>ManualFlashOutput</td> <td class=c>int16s</td> <td><span class=s>0x0 = n/a <br>0x500 = Full <br>0x502 = Medium <br>0x504 = Low <br>0x7fff = n/a</span></td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>ColorTone</td> <td class=c>int16s</td> <td><span class=s>0 = Normal</span></td></tr> <tr> <td class=r title='46 = 0x2e'>46</td> <td>SRAWQuality</td> <td class=c>int16s</td> <td><span class=s>0 = n/a <br>1 = sRAW1 (mRAW) <br>2 = sRAW2 (sRAW)</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='LensType'>Canon LensType Values</a></h2> <p>Decimal values have been added to differentiate lenses which would otherwise have the same LensType, and are used by the Composite LensID tag when attempting to identify the specific lens model.</p> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>LensType</th></tr> <tr><td>-1</td><td>= n/a</td> </tr><tr><td>1</td><td>= Canon EF 50mm f/1.8</td> </tr><tr><td>2</td><td>= Canon EF 28mm f/2.8</td> </tr><tr><td>3</td><td>= Canon EF 135mm f/2.8 Soft</td> </tr><tr><td>4</td><td>= Canon EF 35-105mm f/3.5-4.5 or Sigma Lens</td> </tr><tr><td>4.1</td><td>= Sigma UC Zoom 35-135mm f/4-5.6</td> </tr><tr><td>5</td><td>= Canon EF 35-70mm f/3.5-4.5</td> </tr><tr><td>6</td><td>= Canon EF 28-70mm f/3.5-4.5 or Sigma or Tokina Lens</td> </tr><tr><td>6.1</td><td>= Sigma 18-50mm f/3.5-5.6 DC</td> </tr><tr><td>6.2</td><td>= Sigma 18-125mm f/3.5-5.6 DC IF ASP</td> </tr><tr><td>6.3</td><td>= Tokina AF 193-2 19-35mm f/3.5-4.5</td> </tr><tr><td>6.4</td><td>= Sigma 28-80mm f/3.5-5.6 II Macro</td> </tr><tr><td>7</td><td>= Canon EF 100-300mm f/5.6L</td> </tr><tr><td>8</td><td>= Canon EF 100-300mm f/5.6 or Sigma or Tokina Lens</td> </tr><tr><td>8.1</td><td>= Sigma 70-300mm f/4-5.6 [APO] DG Macro</td> </tr><tr><td>8.2</td><td>= Tokina AT-X 242 AF 24-200mm f/3.5-5.6</td> </tr><tr><td>9</td><td>= Canon EF 70-210mm f/4</td> </tr><tr><td>9.1</td><td>= Sigma 55-200mm f/4-5.6 DC</td> </tr><tr><td>10</td><td>= Canon EF 50mm f/2.5 Macro or Sigma Lens</td> </tr><tr><td>10.1</td><td>= Sigma 50mm f/2.8 EX</td> </tr><tr><td>10.2</td><td>= Sigma 28mm f/1.8</td> </tr><tr><td>10.3</td><td>= Sigma 105mm f/2.8 Macro EX</td> </tr><tr><td>10.4</td><td>= Sigma 70mm f/2.8 EX DG Macro EF</td> </tr><tr><td>11</td><td>= Canon EF 35mm f/2</td> </tr><tr><td>13</td><td>= Canon EF 15mm f/2.8 Fisheye</td> </tr><tr><td>14</td><td>= Canon EF 50-200mm f/3.5-4.5L</td> </tr><tr><td>15</td><td>= Canon EF 50-200mm f/3.5-4.5</td> </tr><tr><td>16</td><td>= Canon EF 35-135mm f/3.5-4.5</td> </tr><tr><td>17</td><td>= Canon EF 35-70mm f/3.5-4.5A</td> </tr><tr><td>18</td><td>= Canon EF 28-70mm f/3.5-4.5</td> </tr><tr><td>20</td><td>= Canon EF 100-200mm f/4.5A</td> </tr><tr><td>21</td><td>= Canon EF 80-200mm f/2.8L</td> </tr><tr><td>22</td><td>= Canon EF 20-35mm f/2.8L or Tokina Lens</td> </tr><tr><td>22.1</td><td>= Tokina AT-X 280 AF Pro 28-80mm f/2.8 Aspherical</td> </tr><tr><td>23</td><td>= Canon EF 35-105mm f/3.5-4.5</td> </tr><tr><td>24</td><td>= Canon EF 35-80mm f/4-5.6 Power Zoom</td> </tr><tr><td>25</td><td>= Canon EF 35-80mm f/4-5.6 Power Zoom</td> </tr><tr><td>26</td><td>= Canon EF 100mm f/2.8 Macro or Other Lens</td> </tr><tr><td>26.1</td><td>= Cosina 100mm f/3.5 Macro AF</td> </tr><tr><td>26.2</td><td>= Tamron SP AF 90mm f/2.8 Di Macro</td> </tr><tr><td>26.3</td><td>= Tamron SP AF 180mm f/3.5 Di Macro</td> </tr><tr><td>26.4</td><td>= Carl Zeiss Planar T* 50mm f/1.4</td> </tr><tr><td>27</td><td>= Canon EF 35-80mm f/4-5.6</td> </tr><tr><td>28</td><td>= Canon EF 80-200mm f/4.5-5.6 or Tamron Lens</td> </tr><tr><td>28.1</td><td>= Tamron SP AF 28-105mm f/2.8 LD Aspherical IF</td> </tr><tr><td>28.2</td><td>= Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical [IF] Macro</td> </tr><tr><td>28.3</td><td>= Tamron AF 70-300mm f/4-5.6 Di LD 1:2 Macro</td> </tr><tr><td>28.4</td><td>= Tamron AF Aspherical 28-200mm f/3.8-5.6</td> </tr><tr><td>29</td><td>= Canon EF 50mm f/1.8 II</td> </tr><tr><td>30</td><td>= Canon EF 35-105mm f/4.5-5.6</td> </tr><tr><td>31</td><td>= Canon EF 75-300mm f/4-5.6 or Tamron Lens</td> </tr><tr><td>31.1</td><td>= Tamron SP AF 300mm f/2.8 LD IF</td> </tr><tr><td>32</td><td>= Canon EF 24mm f/2.8 or Sigma Lens</td> </tr><tr><td>32.1</td><td>= Sigma 15mm f/2.8 EX Fisheye</td> </tr><tr><td>33</td><td>= Voigtlander or Carl Zeiss Lens</td> </tr><tr><td>33.1</td><td>= Voigtlander Ultron 40mm f/2 SLII Aspherical</td> </tr><tr><td>33.2</td><td>= Voigtlander Color Skopar 20mm f/3.5 SLII Aspherical</td> </tr><tr><td>33.3</td><td>= Voigtlander APO-Lanthar 90mm f/3.5 SLII Close Focus</td> </tr><tr><td>33.4</td><td>= Carl Zeiss Distagon T* 15mm f/2.8 ZE</td> </tr><tr><td>33.5</td><td>= Carl Zeiss Distagon T* 18mm f/3.5 ZE</td> </tr><tr><td>33.6</td><td>= Carl Zeiss Distagon T* 21mm f/2.8 ZE</td> </tr><tr><td>33.7</td><td>= Carl Zeiss Distagon T* 25mm f/2 ZE</td> </tr><tr><td>33.8</td><td>= Carl Zeiss Distagon T* 28mm f/2 ZE</td> </tr><tr><td>33.9</td><td>= Carl Zeiss Distagon T* 35mm f/2 ZE</td> </tr><tr><td>33.10</td><td>= Carl Zeiss Distagon T* 35mm f/1.4 ZE</td> </tr><tr><td>33.11</td><td>= Carl Zeiss Planar T* 50mm f/1.4 ZE</td> </tr><tr><td>33.12</td><td>= Carl Zeiss Makro-Planar T* 50mm f/2 ZE</td> </tr><tr><td>33.13</td><td>= Carl Zeiss Makro-Planar T* 100mm f/2 ZE</td> </tr><tr><td>33.14</td><td>= Carl Zeiss Apo-Sonnar T* 135mm f/2 ZE</td> </tr><tr><td>35</td><td>= Canon EF 35-80mm f/4-5.6</td> </tr><tr><td>36</td><td>= Canon EF 38-76mm f/4.5-5.6</td> </tr><tr><td>37</td><td>= Canon EF 35-80mm f/4-5.6 or Tamron Lens</td> </tr><tr><td>37.1</td><td>= Tamron 70-200mm f/2.8 Di LD IF Macro</td> </tr><tr><td>37.2</td><td>= Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical [IF] Macro Model A20</td> </tr><tr><td>37.3</td><td>= Tamron SP AF 17-50mm f/2.8 XR Di II VC LD Aspherical [IF]</td> </tr><tr><td>37.4</td><td>= Tamron AF 18-270mm f/3.5-6.3 Di II VC LD Aspherical [IF] Macro</td> </tr><tr><td>38</td><td>= Canon EF 80-200mm f/4.5-5.6</td> </tr><tr><td>39</td><td>= Canon EF 75-300mm f/4-5.6</td> </tr><tr><td>40</td><td>= Canon EF 28-80mm f/3.5-5.6</td> </tr><tr><td>41</td><td>= Canon EF 28-90mm f/4-5.6</td> </tr><tr><td>42</td><td>= Canon EF 28-200mm f/3.5-5.6 or Tamron Lens</td> </tr><tr><td>42.1</td><td>= Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical [IF] Macro Model A20</td> </tr><tr><td>43</td><td>= Canon EF 28-105mm f/4-5.6</td> </tr><tr><td>44</td><td>= Canon EF 90-300mm f/4.5-5.6</td> </tr><tr><td>45</td><td>= Canon EF-S 18-55mm f/3.5-5.6 [II]</td> </tr><tr><td>46</td><td>= Canon EF 28-90mm f/4-5.6</td> </tr><tr><td>47</td><td>= Zeiss Milvus 35mm f/2 or 50mm f/2</td> </tr><tr><td>47.1</td><td>= Zeiss Milvus 50mm f/2 Makro</td> </tr><tr><td>48</td><td>= Canon EF-S 18-55mm f/3.5-5.6 IS</td> </tr><tr><td>49</td><td>= Canon EF-S 55-250mm f/4-5.6 IS</td> </tr><tr><td>50</td><td>= Canon EF-S 18-200mm f/3.5-5.6 IS</td> </tr><tr><td>51</td><td>= Canon EF-S 18-135mm f/3.5-5.6 IS</td> </tr><tr><td>52</td><td>= Canon EF-S 18-55mm f/3.5-5.6 IS II</td> </tr><tr><td>53</td><td>= Canon EF-S 18-55mm f/3.5-5.6 III</td> </tr><tr><td>54</td><td>= Canon EF-S 55-250mm f/4-5.6 IS II</td> </tr><tr><td>94</td><td>= Canon TS-E 17mm f/4L</td> </tr><tr><td>95</td><td>= Canon TS-E 24.0mm f/3.5 L II</td> </tr><tr><td>124</td><td>= Canon MP-E 65mm f/2.8 1-5x Macro Photo</td> </tr><tr><td>125</td><td>= Canon TS-E 24mm f/3.5L</td> </tr><tr><td>126</td><td>= Canon TS-E 45mm f/2.8</td> </tr><tr><td>127</td><td>= Canon TS-E 90mm f/2.8</td> </tr><tr><td>129</td><td>= Canon EF 300mm f/2.8L</td> </tr><tr><td>130</td><td>= Canon EF 50mm f/1.0L</td> </tr><tr><td>131</td><td>= Canon EF 28-80mm f/2.8-4L or Sigma Lens</td> </tr><tr><td>131.1</td><td>= Sigma 8mm f/3.5 EX DG Circular Fisheye</td> </tr><tr><td>131.2</td><td>= Sigma 17-35mm f/2.8-4 EX DG Aspherical HSM</td> </tr><tr><td>131.3</td><td>= Sigma 17-70mm f/2.8-4.5 DC Macro</td> </tr><tr><td>131.4</td><td>= Sigma APO 50-150mm f/2.8 [II] EX DC HSM</td> </tr><tr><td>131.5</td><td>= Sigma APO 120-300mm f/2.8 EX DG HSM</td> </tr><tr><td>131.6</td><td>= Sigma 4.5mm f/2.8 EX DC HSM Circular Fisheye</td> </tr><tr><td>131.7</td><td>= Sigma 70-200mm f/2.8 APO EX HSM</td> </tr><tr><td>132</td><td>= Canon EF 1200mm f/5.6L</td> </tr><tr><td>134</td><td>= Canon EF 600mm f/4L IS</td> </tr><tr><td>135</td><td>= Canon EF 200mm f/1.8L</td> </tr><tr><td>136</td><td>= Canon EF 300mm f/2.8L</td> </tr><tr><td>137</td><td>= Canon EF 85mm f/1.2L or Sigma or Tamron Lens</td> </tr><tr><td>137.1</td><td>= Sigma 18-50mm f/2.8-4.5 DC OS HSM</td> </tr><tr><td>137.2</td><td>= Sigma 50-200mm f/4-5.6 DC OS HSM</td> </tr><tr><td>137.3</td><td>= Sigma 18-250mm f/3.5-6.3 DC OS HSM</td> </tr><tr><td>137.4</td><td>= Sigma 24-70mm f/2.8 IF EX DG HSM</td> </tr><tr><td>137.5</td><td>= Sigma 18-125mm f/3.8-5.6 DC OS HSM</td> </tr><tr><td>137.6</td><td>= Sigma 17-70mm f/2.8-4 DC Macro OS HSM</td> </tr><tr><td>137.7</td><td>= Sigma 17-50mm f/2.8 OS HSM</td> </tr><tr><td>137.8</td><td>= Sigma 18-200mm f/3.5-6.3 DC OS HSM [II]</td> </tr><tr><td>137.9</td><td>= Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD</td> </tr><tr><td>137.10</td><td>= Sigma 8-16mm f/4.5-5.6 DC HSM</td> </tr><tr><td>137.11</td><td>= Tamron SP 17-50mm f/2.8 XR Di II VC</td> </tr><tr><td>137.12</td><td>= Tamron SP 60mm f/2 Macro Di II</td> </tr><tr><td>137.13</td><td>= Sigma 10-20mm f/3.5 EX DC HSM</td> </tr><tr><td>137.14</td><td>= Tamron SP 24-70mm f/2.8 Di VC USD</td> </tr><tr><td>137.15</td><td>= Sigma 18-35mm f/1.8 DC HSM</td> </tr><tr><td>137.16</td><td>= Sigma 12-24mm f/4.5-5.6 DG HSM II</td> </tr><tr><td>138</td><td>= Canon EF 28-80mm f/2.8-4L</td> </tr><tr><td>139</td><td>= Canon EF 400mm f/2.8L</td> </tr><tr><td>140</td><td>= Canon EF 500mm f/4.5L</td> </tr><tr><td>141</td><td>= Canon EF 500mm f/4.5L</td> </tr><tr><td>142</td><td>= Canon EF 300mm f/2.8L IS</td> </tr><tr><td>143</td><td>= Canon EF 500mm f/4L IS</td> </tr><tr><td>144</td><td>= Canon EF 35-135mm f/4-5.6 USM</td> </tr><tr><td>145</td><td>= Canon EF 100-300mm f/4.5-5.6 USM</td> </tr><tr><td>146</td><td>= Canon EF 70-210mm f/3.5-4.5 USM</td> </tr><tr><td>147</td><td>= Canon EF 35-135mm f/4-5.6 USM</td> </tr><tr><td>148</td><td>= Canon EF 28-80mm f/3.5-5.6 USM</td> </tr><tr><td>149</td><td>= Canon EF 100mm f/2 USM</td> </tr><tr><td>150</td><td>= Canon EF 14mm f/2.8L or Sigma Lens</td> </tr><tr><td>150.1</td><td>= Sigma 20mm EX f/1.8</td> </tr><tr><td>150.2</td><td>= Sigma 30mm f/1.4 DC HSM</td> </tr><tr><td>150.3</td><td>= Sigma 24mm f/1.8 DG Macro EX</td> </tr><tr><td>150.4</td><td>= Sigma 28mm f/1.8 DG Macro EX</td> </tr><tr><td>151</td><td>= Canon EF 200mm f/2.8L</td> </tr><tr><td>152</td><td>= Canon EF 300mm f/4L IS or Sigma Lens</td> </tr><tr><td>152.1</td><td>= Sigma 12-24mm f/4.5-5.6 EX DG ASPHERICAL HSM</td> </tr><tr><td>152.2</td><td>= Sigma 14mm f/2.8 EX Aspherical HSM</td> </tr><tr><td>152.3</td><td>= Sigma 10-20mm f/4-5.6</td> </tr><tr><td>152.4</td><td>= Sigma 100-300mm f/4</td> </tr><tr><td>153</td><td>= Canon EF 35-350mm f/3.5-5.6L or Sigma or Tamron Lens</td> </tr><tr><td>153.1</td><td>= Sigma 50-500mm f/4-6.3 APO HSM EX</td> </tr><tr><td>153.2</td><td>= Tamron AF 28-300mm f/3.5-6.3 XR LD Aspherical [IF] Macro</td> </tr><tr><td>153.3</td><td>= Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical [IF] Macro Model A14</td> </tr><tr><td>153.4</td><td>= Tamron 18-250mm f/3.5-6.3 Di II LD Aspherical [IF] Macro</td> </tr><tr><td>154</td><td>= Canon EF 20mm f/2.8 USM or Zeiss Lens</td> </tr><tr><td>154.1</td><td>= Zeiss Milvus 21mm f/2.8</td> </tr><tr><td>155</td><td>= Canon EF 85mm f/1.8 USM</td> </tr><tr><td>156</td><td>= Canon EF 28-105mm f/3.5-4.5 USM or Tamron Lens</td> </tr><tr><td>156.1</td><td>= Tamron SP 70-300mm f/4.0-5.6 Di VC USD</td> </tr><tr><td>160</td><td>= Canon EF 20-35mm f/3.5-4.5 USM or Tamron or Tokina Lens</td> </tr><tr><td>160.1</td><td>= Tamron AF 19-35mm f/3.5-4.5</td> </tr><tr><td>160.2</td><td>= Tokina AT-X 124 AF Pro DX 12-24mm f/4</td> </tr><tr><td>160.3</td><td>= Tokina AT-X 107 AF DX 10-17mm f/3.5-4.5 Fisheye</td> </tr><tr><td>160.4</td><td>= Tokina AT-X 116 AF Pro DX 11-16mm f/2.8</td> </tr><tr><td>161</td><td>= Canon EF 28-70mm f/2.8L or Sigma or Tamron Lens</td> </tr><tr><td>161.1</td><td>= Sigma 24-70mm f/2.8 EX</td> </tr><tr><td>161.2</td><td>= Sigma 28-70mm f/2.8 EX</td> </tr><tr><td>161.3</td><td>= Sigma 24-60mm f/2.8 EX DG</td> </tr><tr><td>161.4</td><td>= Tamron AF 17-50mm f/2.8 Di-II LD Aspherical</td> </tr><tr><td>161.5</td><td>= Tamron 90mm f/2.8</td> </tr><tr><td>161.6</td><td>= Tamron SP AF 17-35mm f/2.8-4 Di LD Aspherical IF</td> </tr><tr><td>161.7</td><td>= Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical [IF] Macro</td> </tr><tr><td>162</td><td>= Canon EF 200mm f/2.8L</td> </tr><tr><td>163</td><td>= Canon EF 300mm f/4L</td> </tr><tr><td>164</td><td>= Canon EF 400mm f/5.6L</td> </tr><tr><td>165</td><td>= Canon EF 70-200mm f/2.8 L</td> </tr><tr><td>166</td><td>= Canon EF 70-200mm f/2.8 L + 1.4x</td> </tr><tr><td>167</td><td>= Canon EF 70-200mm f/2.8 L + 2x</td> </tr><tr><td>168</td><td>= Canon EF 28mm f/1.8 USM</td> </tr><tr><td>169</td><td>= Canon EF 17-35mm f/2.8L or Sigma Lens</td> </tr><tr><td>169.1</td><td>= Sigma 18-200mm f/3.5-6.3 DC OS</td> </tr><tr><td>169.2</td><td>= Sigma 15-30mm f/3.5-4.5 EX DG Aspherical</td> </tr><tr><td>169.3</td><td>= Sigma 18-50mm f/2.8 Macro</td> </tr><tr><td>169.4</td><td>= Sigma 50mm f/1.4 EX DG HSM</td> </tr><tr><td>169.5</td><td>= Sigma 85mm f/1.4 EX DG HSM</td> </tr><tr><td>169.6</td><td>= Sigma 30mm f/1.4 EX DC HSM</td> </tr><tr><td>169.7</td><td>= Sigma 35mm f/1.4 DG HSM</td> </tr><tr><td>170</td><td>= Canon EF 200mm f/2.8L II</td> </tr><tr><td>171</td><td>= Canon EF 300mm f/4L</td> </tr><tr><td>172</td><td>= Canon EF 400mm f/5.6L or Sigma Lens</td> </tr><tr><td>172.1</td><td>= Sigma 150-600mm f/5-6.3 DG OS HSM | S</td> </tr><tr><td>173</td><td>= Canon EF 180mm Macro f/3.5L or Sigma Lens</td> </tr><tr><td>173.1</td><td>= Sigma 180mm EX HSM Macro f/3.5</td> </tr><tr><td>173.2</td><td>= Sigma APO Macro 150mm f/2.8 EX DG HSM</td> </tr><tr><td>174</td><td>= Canon EF 135mm f/2L or Other Lens</td> </tr><tr><td>174.1</td><td>= Sigma 70-200mm f/2.8 EX DG APO OS HSM</td> </tr><tr><td>174.2</td><td>= Sigma 50-500mm f/4.5-6.3 APO DG OS HSM</td> </tr><tr><td>174.3</td><td>= Sigma 150-500mm f/5-6.3 APO DG OS HSM</td> </tr><tr><td>174.4</td><td>= Zeiss Milvus 100mm f/2 Makro</td> </tr><tr><td>175</td><td>= Canon EF 400mm f/2.8L</td> </tr><tr><td>176</td><td>= Canon EF 24-85mm f/3.5-4.5 USM</td> </tr><tr><td>177</td><td>= Canon EF 300mm f/4L IS</td> </tr><tr><td>178</td><td>= Canon EF 28-135mm f/3.5-5.6 IS</td> </tr><tr><td>179</td><td>= Canon EF 24mm f/1.4L</td> </tr><tr><td>180</td><td>= Canon EF 35mm f/1.4L or Other Lens</td> </tr><tr><td>180.1</td><td>= Sigma 50mm f/1.4 DG HSM | A</td> </tr><tr><td>180.2</td><td>= Sigma 24mm f/1.4 DG HSM | A</td> </tr><tr><td>180.3</td><td>= Zeiss Milvus 50mm f/1.4</td> </tr><tr><td>180.4</td><td>= Zeiss Milvus 85mm f/1.4</td> </tr><tr><td>180.5</td><td>= Zeiss Otus 28mm f/1.4 ZE</td> </tr><tr><td>181</td><td>= Canon EF 100-400mm f/4.5-5.6L IS + 1.4x or Sigma Lens</td> </tr><tr><td>181.1</td><td>= Sigma 150-600mm f/5-6.3 DG OS HSM | S + 1.4x</td> </tr><tr><td>182</td><td>= Canon EF 100-400mm f/4.5-5.6L IS + 2x or Sigma Lens</td> </tr><tr><td>182.1</td><td>= Sigma 150-600mm f/5-6.3 DG OS HSM | S + 2x</td> </tr><tr><td>183</td><td>= Canon EF 100-400mm f/4.5-5.6L IS or Sigma Lens</td> </tr><tr><td>183.1</td><td>= Sigma 150mm f/2.8 EX DG OS HSM APO Macro</td> </tr><tr><td>183.2</td><td>= Sigma 105mm f/2.8 EX DG OS HSM Macro</td> </tr><tr><td>183.3</td><td>= Sigma 180mm f/2.8 EX DG OS HSM APO Macro</td> </tr><tr><td>183.4</td><td>= Sigma 150-600mm f/5-6.3 DG OS HSM | C</td> </tr><tr><td>184</td><td>= Canon EF 400mm f/2.8L + 2x</td> </tr><tr><td>185</td><td>= Canon EF 600mm f/4L IS</td> </tr><tr><td>186</td><td>= Canon EF 70-200mm f/4L</td> </tr><tr><td>187</td><td>= Canon EF 70-200mm f/4L + 1.4x</td> </tr><tr><td>188</td><td>= Canon EF 70-200mm f/4L + 2x</td> </tr><tr><td>189</td><td>= Canon EF 70-200mm f/4L + 2.8x</td> </tr><tr><td>190</td><td>= Canon EF 100mm f/2.8 Macro USM</td> </tr><tr><td>191</td><td>= Canon EF 400mm f/4 DO IS</td> </tr><tr><td>193</td><td>= Canon EF 35-80mm f/4-5.6 USM</td> </tr><tr><td>194</td><td>= Canon EF 80-200mm f/4.5-5.6 USM</td> </tr><tr><td>195</td><td>= Canon EF 35-105mm f/4.5-5.6 USM</td> </tr><tr><td>196</td><td>= Canon EF 75-300mm f/4-5.6 USM</td> </tr><tr><td>197</td><td>= Canon EF 75-300mm f/4-5.6 IS USM</td> </tr><tr><td>198</td><td>= Canon EF 50mm f/1.4 USM or Zeiss Lens</td> </tr><tr><td>198.1</td><td>= Zeiss Otus 55mm f/1.4 ZE</td> </tr><tr><td>198.2</td><td>= Zeiss Otus 85mm f/1.4 ZE</td> </tr><tr><td>199</td><td>= Canon EF 28-80mm f/3.5-5.6 USM</td> </tr><tr><td>200</td><td>= Canon EF 75-300mm f/4-5.6 USM</td> </tr><tr><td>201</td><td>= Canon EF 28-80mm f/3.5-5.6 USM</td> </tr><tr><td>202</td><td>= Canon EF 28-80mm f/3.5-5.6 USM IV</td> </tr><tr><td>208</td><td>= Canon EF 22-55mm f/4-5.6 USM</td> </tr><tr><td>209</td><td>= Canon EF 55-200mm f/4.5-5.6</td> </tr><tr><td>210</td><td>= Canon EF 28-90mm f/4-5.6 USM</td> </tr><tr><td>211</td><td>= Canon EF 28-200mm f/3.5-5.6 USM</td> </tr><tr><td>212</td><td>= Canon EF 28-105mm f/4-5.6 USM</td> </tr><tr><td>213</td><td>= Canon EF 90-300mm f/4.5-5.6 USM or Tamron Lens</td> </tr><tr><td>213.1</td><td>= Tamron SP 150-600mm f/5-6.3 Di VC USD</td> </tr><tr><td>213.2</td><td>= Tamron 16-300mm f/3.5-6.3 Di II VC PZD Macro</td> </tr><tr><td>213.3</td><td>= Tamron SP 35mm f/1.8 Di VC USD</td> </tr><tr><td>213.4</td><td>= Tamron SP 45mm f/1.8 Di VC USD</td> </tr><tr><td>214</td><td>= Canon EF-S 18-55mm f/3.5-5.6 USM</td> </tr><tr><td>215</td><td>= Canon EF 55-200mm f/4.5-5.6 II USM</td> </tr><tr><td>217</td><td>= Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD</td> </tr><tr><td>224</td><td>= Canon EF 70-200mm f/2.8L IS</td> </tr><tr><td>225</td><td>= Canon EF 70-200mm f/2.8L IS + 1.4x</td> </tr><tr><td>226</td><td>= Canon EF 70-200mm f/2.8L IS + 2x</td> </tr><tr><td>227</td><td>= Canon EF 70-200mm f/2.8L IS + 2.8x</td> </tr><tr><td>228</td><td>= Canon EF 28-105mm f/3.5-4.5 USM</td> </tr><tr><td>229</td><td>= Canon EF 16-35mm f/2.8L</td> </tr><tr><td>230</td><td>= Canon EF 24-70mm f/2.8L</td> </tr><tr><td>231</td><td>= Canon EF 17-40mm f/4L</td> </tr><tr><td>232</td><td>= Canon EF 70-300mm f/4.5-5.6 DO IS USM</td> </tr><tr><td>233</td><td>= Canon EF 28-300mm f/3.5-5.6L IS</td> </tr><tr><td>234</td><td>= Canon EF-S 17-85mm f/4-5.6 IS USM or Tokina Lens</td> </tr><tr><td>234.1</td><td>= Tokina AT-X 12-28mm f/4 PRO DX</td> </tr><tr><td>235</td><td>= Canon EF-S 10-22mm f/3.5-4.5 USM</td> </tr><tr><td>236</td><td>= Canon EF-S 60mm f/2.8 Macro USM</td> </tr><tr><td>237</td><td>= Canon EF 24-105mm f/4L IS</td> </tr><tr><td>238</td><td>= Canon EF 70-300mm f/4-5.6 IS USM</td> </tr><tr><td>239</td><td>= Canon EF 85mm f/1.2L II</td> </tr><tr><td>240</td><td>= Canon EF-S 17-55mm f/2.8 IS USM</td> </tr><tr><td>241</td><td>= Canon EF 50mm f/1.2L</td> </tr><tr><td>242</td><td>= Canon EF 70-200mm f/4L IS</td> </tr><tr><td>243</td><td>= Canon EF 70-200mm f/4L IS + 1.4x</td> </tr><tr><td>244</td><td>= Canon EF 70-200mm f/4L IS + 2x</td> </tr><tr><td>245</td><td>= Canon EF 70-200mm f/4L IS + 2.8x</td> </tr><tr><td>246</td><td>= Canon EF 16-35mm f/2.8L II</td> </tr><tr><td>247</td><td>= Canon EF 14mm f/2.8L II USM</td> </tr><tr><td>248</td><td>= Canon EF 200mm f/2L IS or Sigma Lens</td> </tr><tr><td>248.1</td><td>= Sigma 24-35mm f/2 DG HSM | A</td> </tr><tr><td>249</td><td>= Canon EF 800mm f/5.6L IS</td> </tr><tr><td>250</td><td>= Canon EF 24mm f/1.4L II or Sigma Lens</td> </tr><tr><td>250.1</td><td>= Sigma 20mm f/1.4 DG HSM | A</td> </tr><tr><td>251</td><td>= Canon EF 70-200mm f/2.8L IS II USM</td> </tr><tr><td>252</td><td>= Canon EF 70-200mm f/2.8L IS II USM + 1.4x</td> </tr><tr><td>253</td><td>= Canon EF 70-200mm f/2.8L IS II USM + 2x</td> </tr><tr><td>254</td><td>= Canon EF 100mm f/2.8L Macro IS USM</td> </tr><tr><td>255</td><td>= Sigma 24-105mm f/4 DG OS HSM | A or Other Sigma Lens</td> </tr><tr><td>255.1</td><td>= Sigma 180mm f/2.8 EX DG OS HSM APO Macro</td> </tr><tr><td>488</td><td>= Canon EF-S 15-85mm f/3.5-5.6 IS USM</td> </tr><tr><td>489</td><td>= Canon EF 70-300mm f/4-5.6L IS USM</td> </tr><tr><td>490</td><td>= Canon EF 8-15mm f/4L Fisheye USM</td> </tr><tr><td>491</td><td>= Canon EF 300mm f/2.8L IS II USM</td> </tr><tr><td>492</td><td>= Canon EF 400mm f/2.8L IS II USM</td> </tr><tr><td>493</td><td>= Canon EF 500mm f/4L IS II USM or EF 24-105mm f4L IS USM</td> </tr><tr><td>493.1</td><td>= Canon EF 24-105mm f/4L IS USM</td> </tr><tr><td>494</td><td>= Canon EF 600mm f/4.0L IS II USM</td> </tr><tr><td>495</td><td>= Canon EF 24-70mm f/2.8L II USM</td> </tr><tr><td>496</td><td>= Canon EF 200-400mm f/4L IS USM</td> </tr><tr><td>499</td><td>= Canon EF 200-400mm f/4L IS USM + 1.4x</td> </tr><tr><td>502</td><td>= Canon EF 28mm f/2.8 IS USM</td> </tr><tr><td>503</td><td>= Canon EF 24mm f/2.8 IS USM</td> </tr><tr><td>504</td><td>= Canon EF 24-70mm f/4L IS USM</td> </tr><tr><td>505</td><td>= Canon EF 35mm f/2 IS USM</td> </tr><tr><td>506</td><td>= Canon EF 400mm f/4 DO IS II USM</td> </tr><tr><td>507</td><td>= Canon EF 16-35mm f/4L IS USM</td> </tr><tr><td>508</td><td>= Canon EF 11-24mm f/4L USM</td> </tr><tr><td>747</td><td>= Canon EF 100-400mm f/4.5-5.6L IS II USM</td> </tr><tr><td>750</td><td>= Canon EF 35mm f/1.4L II USM</td> </tr><tr><td>4142</td><td>= Canon EF-S 18-135mm f/3.5-5.6 IS STM</td> </tr><tr><td>4143</td><td>= Canon EF-M 18-55mm f/3.5-5.6 IS STM or Tamron Lens</td> </tr><tr><td>4143.1</td><td>= Tamron 18-200mm F/3.5-6.3 Di III VC</td> </tr><tr><td>4144</td><td>= Canon EF 40mm f/2.8 STM</td> </tr><tr><td>4145</td><td>= Canon EF-M 22mm f/2 STM</td> </tr><tr><td>4146</td><td>= Canon EF-S 18-55mm f/3.5-5.6 IS STM</td> </tr><tr><td>4147</td><td>= Canon EF-M 11-22mm f/4-5.6 IS STM</td> </tr><tr><td>4148</td><td>= Canon EF-S 55-250mm f/4-5.6 IS STM</td> </tr><tr><td>4149</td><td>= Canon EF-M 55-200mm f/4.5-6.3 IS STM</td> </tr><tr><td>4150</td><td>= Canon EF-S 10-18mm f/4.5-5.6 IS STM</td> </tr><tr><td>4152</td><td>= Canon EF 24-105mm f/3.5-5.6 IS STM</td> </tr><tr><td>4153</td><td>= Canon EF-M 15-45mm f/3.5-6.3 IS STM</td> </tr><tr><td>4154</td><td>= Canon EF-S 24mm f/2.8 STM</td> </tr><tr><td>4156</td><td>= Canon EF 50mm f/1.8 STM</td> </tr></table></td></tr></table></blockquote> <h2><a name='FocalLength'>Canon FocalLength Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FocalType</td> <td class=c>int16u</td> <td><span class=s>1 = Fixed <br>2 = Zoom</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>FocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>FocalPlaneXSize <br>FocalPlaneXUnknown?</td> <td class=c>int16u<br>int16u</td> <td><span class=s><span class=n>(these focal plane sizes are only valid for some models, and are affected by digital zoom if applied)</span></span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>FocalPlaneYSize <br>FocalPlaneYUnknown?</td> <td class=c>int16u<br>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfo'>Canon ShotInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>AutoISO</td> <td class=c>int16s</td> <td><span class=s><span class=n>(actual ISO used = BaseISO * AutoISO / 100)</span></span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>BaseISO</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>MeasuredEV</td> <td class=c>int16s</td> <td><span class=s><span class=n>(this is the Canon name for what could better be called MeasuredLV, and should be close to the calculated LightValue for a proper exposure with most models)</span></span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>TargetAperture</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>TargetExposureTime</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>ExposureCompensation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>WhiteBalance</td> <td class=c>int16s</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>SlowShutter</td> <td class=c>int16s</td> <td><span class=s>-1 = n/a <br>0 = Off <br>1 = Night Scene <br>2 = On <br>3 = None</span></td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>SequenceNumber</td> <td class=c>int16s</td> <td><span class=s><span class=n>(valid only for some models)</span></span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>OpticalZoomCode</td> <td class=c>int16s</td> <td><span class=s><span class=n>(for many PowerShot models, a this is 0-6 for wide-tele zoom)</span></span></td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>CameraTemperature</td> <td class=c>int16s</td> <td><span class=s><span class=n>(newer EOS models only)</span></span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>FlashGuideNumber</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>AFPointsInFocus</td> <td class=c>int16s</td> <td><span class=s><span class=n>(used by D30, D60 and some PowerShot/Ixus models)</span></span><table class=cols><tr> <td>0x3000 = None (MF) <br>0x3001 = Right <br>0x3002 = Center <br>0x3003 = Center+Right</td><td>&nbsp;&nbsp;</td> <td>0x3004 = Left <br>0x3005 = Left+Right <br>0x3006 = Left+Center <br>0x3007 = All</td></tr></table> </td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>FlashExposureComp</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>AutoExposureBracketing</td> <td class=c>int16s</td> <td><span class=s>-1 = On <br>0 = Off <br>1 = On (shot 1) <br>2 = On (shot 2) <br>3 = On (shot 3)</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>AEBBracketValue</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>ControlMode</td> <td class=c>int16s</td> <td><span class=s>0 = n/a <br>1 = Camera Local Control <br>3 = Computer Remote Control</span></td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>FocusDistanceUpper</td> <td class=c>int16u</td> <td><span class=s><span class=n>(FocusDistance tags are only extracted if FocusDistanceUpper is non-zero)</span></span></td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>FocusDistanceLower</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>FNumber</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>ExposureTime</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='23 = 0x17'>23</td> <td>MeasuredEV2</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>BulbDuration</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>CameraType</td> <td class=c>int16s</td> <td><span class=s>0 = n/a <br>248 = EOS High-end <br>250 = Compact <br>252 = EOS Mid-range <br>255 = DV Camera</span></td></tr> <tr> <td class=r title='27 = 0x1b'>27</td> <td>AutoRotate</td> <td class=c>int16s</td> <td><span class=s>-1 = n/a <br>0 = None <br>1 = Rotate 90 CW <br>2 = Rotate 180 <br>3 = Rotate 270 CW</span></td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28</td> <td>NDFilter</td> <td class=c>int16s</td> <td><span class=s>-1 = n/a <br>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='29 = 0x1d'>29</td> <td>SelfTimer2</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='33 = 0x21'>33</td> <td>FlashOutput</td> <td class=c>int16s</td> <td><span class=s><span class=n>(used only for PowerShot models, this has a maximum value of 500 for models like the A570IS)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='WhiteBalance'>Canon WhiteBalance Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>WhiteBalance</th><th>Value</th><th>WhiteBalance</th><th>Value</th><th>WhiteBalance</th></tr> <tr><td class=r>0</td><td>= Auto</td> <td class='r b'>8</td><td class=b>= Shade</td> <td class=r>17</td><td>= Underwater</td> </tr><tr><td class=r>1</td><td>= Daylight</td> <td class='r b'>9</td><td class=b>= Manual Temperature (Kelvin)</td> <td class=r>18</td><td>= Custom 3</td> </tr><tr><td class=r>2</td><td>= Cloudy</td> <td class='r b'>10</td><td class=b>= PC Set1</td> <td class=r>19</td><td>= Custom 4</td> </tr><tr><td class=r>3</td><td>= Tungsten</td> <td class='r b'>11</td><td class=b>= PC Set2</td> <td class=r>20</td><td>= PC Set4</td> </tr><tr><td class=r>4</td><td>= Fluorescent</td> <td class='r b'>12</td><td class=b>= PC Set3</td> <td class=r>21</td><td>= PC Set5</td> </tr><tr><td class=r>5</td><td>= Flash</td> <td class='r b'>14</td><td class=b>= Daylight Fluorescent</td> <td class=r>23</td><td>= Auto (ambience priority)</td> </tr><tr><td class=r>6</td><td>= Custom</td> <td class='r b'>15</td><td class=b>= Custom 1</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr><tr><td class=r>7</td><td>= Black &amp; White</td> <td class='r b'>16</td><td class=b>= Custom 2</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='Panorama'>Canon Panorama Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>PanoramaFrameNumber</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>PanoramaDirection</td> <td class=c>int16s</td> <td><span class=s>0 = Left to Right <br>1 = Right to Left <br>2 = Bottom to Top <br>3 = Top to Bottom <br>4 = 2x2 Matrix (Clockwise)</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='UnknownD30'>Canon UnknownD30 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo1D'>Canon CameraInfo1D Tags</a></h2> <p>Information in the &quot;CameraInfo&quot; records is tricky to decode because the encodings are very different than in other Canon records (even sometimes switching endianness between values within a single camera), plus there is considerable variation in format from model to model. The first table below lists CameraInfo tags for the 1D and 1DS.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>FocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>MinFocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>MaxFocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='65 = 0x41'>65</td> <td>SharpnessFrequency</td> <td class=c>int8u</td> <td><span class=s><span class=n>(1D only)</span></span><table class=cols><tr> <td>0 = n/a <br>1 = Lowest <br>2 = Low</td><td>&nbsp;&nbsp;</td> <td>3 = Standard <br>4 = High <br>5 = Highest</td></tr></table> </td></tr> <tr> <td class=r title='66 = 0x42'>66</td> <td>Sharpness</td> <td class=c>int8s</td> <td><span class=s><span class=n>(1D only)</span></span></td></tr> <tr class=b> <td class=r title='68 = 0x44'>68</td> <td>WhiteBalance</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a> <br><span class='n s'>(1D only)</span></td></tr> <tr> <td class=r title='71 = 0x47'>71</td> <td>SharpnessFrequency</td> <td class=c>int8u</td> <td><span class=s><span class=n>(1DS only)</span></span><table class=cols><tr> <td>0 = n/a <br>1 = Lowest <br>2 = Low</td><td>&nbsp;&nbsp;</td> <td>3 = Standard <br>4 = High <br>5 = Highest</td></tr></table> </td></tr> <tr class=b> <td class=r title='72 = 0x48'>72</td> <td>ColorTemperature <br>Sharpness</td> <td class=c>int16u<br>int8s</td> <td><span class=s><span class=n>(1D only)</span> <br><span class=n>(1DS only)</span></span></td></tr> <tr> <td class=r title='74 = 0x4a'>74</td> <td>WhiteBalance</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a> <br><span class='n s'>(1DS only)</span></td></tr> <tr class=b> <td class=r title='75 = 0x4b'>75</td> <td>PictureStyle</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a> <br><span class='n s'>(1D only, called 'Color Matrix' in owner's manual)</span></td></tr> <tr> <td class=r title='78 = 0x4e'>78</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td><span class=s><span class=n>(1DS only)</span></span></td></tr> <tr class=b> <td class=r title='81 = 0x51'>81</td> <td>PictureStyle</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a> <br><span class='n s'>(1DS only)</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='PictureStyle'>Canon PictureStyle Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>PictureStyle</th><th>Value</th><th>PictureStyle</th><th>Value</th><th>PictureStyle</th></tr> <tr><td class=r>0x0</td><td>= None</td> <td class='r b'>0x21</td><td class=b>= User Def. 1</td> <td class=r>0x83</td><td>= Landscape</td> </tr><tr><td class=r>0x1</td><td>= Standard</td> <td class='r b'>0x22</td><td class=b>= User Def. 2</td> <td class=r>0x84</td><td>= Neutral</td> </tr><tr><td class=r>0x2</td><td>= Portrait</td> <td class='r b'>0x23</td><td class=b>= User Def. 3</td> <td class=r>0x85</td><td>= Faithful</td> </tr><tr><td class=r>0x3</td><td>= High Saturation</td> <td class='r b'>0x41</td><td class=b>= PC 1</td> <td class=r>0x86</td><td>= Monochrome</td> </tr><tr><td class=r>0x4</td><td>= Adobe RGB</td> <td class='r b'>0x42</td><td class=b>= PC 2</td> <td class=r>0x87</td><td>= Auto</td> </tr><tr><td class=r>0x5</td><td>= Low Saturation</td> <td class='r b'>0x43</td><td class=b>= PC 3</td> <td class=r>0x88</td><td>= Fine Detail</td> </tr><tr><td class=r>0x6</td><td>= CM Set 1</td> <td class='r b'>0x81</td><td class=b>= Standard</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr><tr><td class=r>0x7</td><td>= CM Set 2</td> <td class='r b'>0x82</td><td class=b>= Portrait</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='CameraInfo1DmkII'>Canon CameraInfo1DmkII Tags</a></h2> <p>CameraInfo tags for the 1DmkII and 1DSmkII.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='19 = 0x13'>19</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='45 = 0x2d'>45</td> <td>FocalType</td> <td class=c>int8u</td> <td><span class=s>0 = Fixed <br>2 = Zoom</span></td></tr> <tr> <td class=r title='54 = 0x36'>54</td> <td>WhiteBalance</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr class=b> <td class=r title='55 = 0x37'>55</td> <td>ColorTemperature</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='57 = 0x39'>57</td> <td>CanonImageSize</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>-1 = n/a <br>0 = Large <br>1 = Medium <br>2 = Small <br>5 = Medium 1 <br>6 = Medium 2 <br>7 = Medium 3 <br>8 = Postcard <br>9 = Widescreen</td><td>&nbsp;&nbsp;</td> <td>10 = Medium Widescreen <br>14 = Small 1 <br>15 = Small 2 <br>16 = Small 3 <br>128 = 640x480 Movie <br>129 = Medium Movie <br>130 = Small Movie <br>137 = 1280x720 Movie <br>142 = 1920x1080 Movie</td></tr></table> </td></tr> <tr class=b> <td class=r title='102 = 0x66'>102</td> <td>JPEGQuality</td> <td class=c>int8u</td> <td><span class=s><span class=n>(a number from 1 to 10)</span></span></td></tr> <tr> <td class=r title='108 = 0x6c'>108</td> <td>PictureStyle</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a></td></tr> <tr class=b> <td class=r title='110 = 0x6e'>110</td> <td>Saturation</td> <td class=c>int8s</td> <td><span class=s>0 = Normal</span></td></tr> <tr> <td class=r title='111 = 0x6f'>111</td> <td>ColorTone</td> <td class=c>int8s</td> <td><span class=s>0 = Normal</span></td></tr> <tr class=b> <td class=r title='114 = 0x72'>114</td> <td>Sharpness</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='115 = 0x73'>115</td> <td>Contrast</td> <td class=c>int8s</td> <td><span class=s>0 = Normal</span></td></tr> <tr class=b> <td class=r title='117 = 0x75'>117</td> <td>ISO</td> <td class=c>string[5]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo1DmkIIN'>Canon CameraInfo1DmkIIN Tags</a></h2> <p>CameraInfo tags for the 1DmkIIN.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='19 = 0x13'>19</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='54 = 0x36'>54</td> <td>WhiteBalance</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr> <td class=r title='55 = 0x37'>55</td> <td>ColorTemperature</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='115 = 0x73'>115</td> <td>PictureStyle</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a></td></tr> <tr> <td class=r title='116 = 0x74'>116</td> <td>Sharpness</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='117 = 0x75'>117</td> <td>Contrast</td> <td class=c>int8s</td> <td><span class=s>0 = Normal</span></td></tr> <tr> <td class=r title='118 = 0x76'>118</td> <td>Saturation</td> <td class=c>int8s</td> <td><span class=s>0 = Normal</span></td></tr> <tr class=b> <td class=r title='119 = 0x77'>119</td> <td>ColorTone</td> <td class=c>int8s</td> <td><span class=s>0 = Normal</span></td></tr> <tr> <td class=r title='121 = 0x79'>121</td> <td>ISO</td> <td class=c>string[5]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo1DmkIII'>Canon CameraInfo1DmkIII Tags</a></h2> <p>CameraInfo tags for the 1DmkIII and 1DSmkIII.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='27 = 0x1b'>27</td> <td>MacroMagnification</td> <td class=c>int8u</td> <td><span class=s><span class=n>(currently decoded only for the MP-E 65mm f/2.8 1-5x Macro Photo)</span></span></td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr class=b> <td class=r title='67 = 0x43'>67</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='69 = 0x45'>69</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='94 = 0x5e'>94</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr> <td class=r title='98 = 0x62'>98</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='134 = 0x86'>134</td> <td>PictureStyle</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a></td></tr> <tr> <td class=r title='273 = 0x111'>273</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr class=b> <td class=r title='275 = 0x113'>275</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='277 = 0x115'>277</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='310 = 0x136'>310</td> <td>FirmwareVersion</td> <td class=c>string[6]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='370 = 0x172'>370</td> <td>FileIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='374 = 0x176'>374</td> <td>ShutterCount</td> <td class=c>int32u</td> <td><span class=s><span class=n>(may be valid only for some 1DmkIII copies, even running the same firmware)</span></span></td></tr> <tr> <td class=r title='382 = 0x17e'>382</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='682 = 0x2aa'>682</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo'>Canon PSInfo Tags</a></td></tr> <tr> <td class=r title='1114 = 0x45a'>1114</td> <td>TimeStamp1</td> <td class=c>int32u</td> <td><span class=s><span class=n>(only valid for some versions of the 1DmkIII firmware)</span></span></td></tr> <tr class=b> <td class=r title='1118 = 0x45e'>1118</td> <td>TimeStamp</td> <td class=c>int32u</td> <td><span class=s><span class=n>(valid for the 1DSmkIII and some versions of the 1DmkIII firmware)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='PSInfo'>Canon PSInfo Tags</a></h2> <p>Custom picture style information for various models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ContrastStandard</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>SharpnessStandard</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>SaturationStandard</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>ColorToneStandard</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>FilterEffectStandard?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>ToningEffectStandard?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>ContrastPortrait</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28</td> <td>SharpnessPortrait</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>SaturationPortrait</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='36 = 0x24'>36</td> <td>ColorTonePortrait</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>FilterEffectPortrait?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>ToningEffectPortrait?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>ContrastLandscape</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>SharpnessLandscape</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='56 = 0x38'>56</td> <td>SaturationLandscape</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='60 = 0x3c'>60</td> <td>ColorToneLandscape</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='64 = 0x40'>64</td> <td>FilterEffectLandscape?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='68 = 0x44'>68</td> <td>ToningEffectLandscape?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='72 = 0x48'>72</td> <td>ContrastNeutral</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='76 = 0x4c'>76</td> <td>SharpnessNeutral</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='80 = 0x50'>80</td> <td>SaturationNeutral</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='84 = 0x54'>84</td> <td>ColorToneNeutral</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='88 = 0x58'>88</td> <td>FilterEffectNeutral?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='92 = 0x5c'>92</td> <td>ToningEffectNeutral?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='96 = 0x60'>96</td> <td>ContrastFaithful</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='100 = 0x64'>100</td> <td>SharpnessFaithful</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='104 = 0x68'>104</td> <td>SaturationFaithful</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='108 = 0x6c'>108</td> <td>ColorToneFaithful</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='112 = 0x70'>112</td> <td>FilterEffectFaithful?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='116 = 0x74'>116</td> <td>ToningEffectFaithful?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='120 = 0x78'>120</td> <td>ContrastMonochrome</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='124 = 0x7c'>124</td> <td>SharpnessMonochrome</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='128 = 0x80'>128</td> <td>SaturationMonochrome?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='132 = 0x84'>132</td> <td>ColorToneMonochrome?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='136 = 0x88'>136</td> <td>FilterEffectMonochrome</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Yellow</td><td>&nbsp;&nbsp;</td> <td>0x2 = Orange <br>0x3 = Red <br>0x4 = Green</td></tr></table> </td></tr> <tr class=b> <td class=r title='140 = 0x8c'>140</td> <td>ToningEffectMonochrome</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Sepia</td><td>&nbsp;&nbsp;</td> <td>0x2 = Blue <br>0x3 = Purple <br>0x4 = Green</td></tr></table> </td></tr> <tr> <td class=r title='144 = 0x90'>144</td> <td>ContrastUserDef1</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='148 = 0x94'>148</td> <td>SharpnessUserDef1</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='152 = 0x98'>152</td> <td>SaturationUserDef1</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='156 = 0x9c'>156</td> <td>ColorToneUserDef1</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='160 = 0xa0'>160</td> <td>FilterEffectUserDef1</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Yellow</td><td>&nbsp;&nbsp;</td> <td>0x2 = Orange <br>0x3 = Red <br>0x4 = Green</td></tr></table> </td></tr> <tr class=b> <td class=r title='164 = 0xa4'>164</td> <td>ToningEffectUserDef1</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Sepia</td><td>&nbsp;&nbsp;</td> <td>0x2 = Blue <br>0x3 = Purple <br>0x4 = Green</td></tr></table> </td></tr> <tr> <td class=r title='168 = 0xa8'>168</td> <td>ContrastUserDef2</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='172 = 0xac'>172</td> <td>SharpnessUserDef2</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='176 = 0xb0'>176</td> <td>SaturationUserDef2</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='180 = 0xb4'>180</td> <td>ColorToneUserDef2</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='184 = 0xb8'>184</td> <td>FilterEffectUserDef2</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Yellow</td><td>&nbsp;&nbsp;</td> <td>0x2 = Orange <br>0x3 = Red <br>0x4 = Green</td></tr></table> </td></tr> <tr class=b> <td class=r title='188 = 0xbc'>188</td> <td>ToningEffectUserDef2</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Sepia</td><td>&nbsp;&nbsp;</td> <td>0x2 = Blue <br>0x3 = Purple <br>0x4 = Green</td></tr></table> </td></tr> <tr> <td class=r title='192 = 0xc0'>192</td> <td>ContrastUserDef3</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='196 = 0xc4'>196</td> <td>SharpnessUserDef3</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='200 = 0xc8'>200</td> <td>SaturationUserDef3</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='204 = 0xcc'>204</td> <td>ColorToneUserDef3</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='208 = 0xd0'>208</td> <td>FilterEffectUserDef3</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Yellow</td><td>&nbsp;&nbsp;</td> <td>0x2 = Orange <br>0x3 = Red <br>0x4 = Green</td></tr></table> </td></tr> <tr class=b> <td class=r title='212 = 0xd4'>212</td> <td>ToningEffectUserDef3</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Sepia</td><td>&nbsp;&nbsp;</td> <td>0x2 = Blue <br>0x3 = Purple <br>0x4 = Green</td></tr></table> </td></tr> <tr> <td class=r title='216 = 0xd8'>216</td> <td>UserDef1PictureStyle</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#UserDefStyle'>Canon UserDefStyle Values</a></td></tr> <tr class=b> <td class=r title='218 = 0xda'>218</td> <td>UserDef2PictureStyle</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#UserDefStyle'>Canon UserDefStyle Values</a></td></tr> <tr> <td class=r title='220 = 0xdc'>220</td> <td>UserDef3PictureStyle</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#UserDefStyle'>Canon UserDefStyle Values</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='UserDefStyle'>Canon UserDefStyle Values</a></h2> <p>Base style for user-defined picture styles. PC values represent external picture styles which may be downloaded from Canon and installed in the camera.</p> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>UserDefStyle</th><th>Value</th><th>UserDefStyle</th><th>Value</th><th>UserDefStyle</th></tr> <tr><td class=r>0x41</td><td>= PC 1</td> <td class='r b'>0x82</td><td class=b>= Portrait</td> <td class=r>0x86</td><td>= Monochrome</td> </tr><tr><td class=r>0x42</td><td>= PC 2</td> <td class='r b'>0x83</td><td class=b>= Landscape</td> <td class=r>0x87</td><td>= Auto</td> </tr><tr><td class=r>0x43</td><td>= PC 3</td> <td class='r b'>0x84</td><td class=b>= Neutral</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr><tr><td class=r>0x81</td><td>= Standard</td> <td class='r b'>0x85</td><td class=b>= Faithful</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='CameraInfo1DmkIV'>Canon CameraInfo1DmkIV Tags</a></h2> <p>CameraInfo tags for the EOS 1D Mark IV. Indices shown are for firmware versions 1.0.x, but they may be different for other firmware versions.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>HighlightTonePriority</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>MeasuredEV2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>MeasuredEV3</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>FlashMeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = E-TTL <br>3 = TTL <br>4 = External Auto <br>5 = External Manual <br>6 = Off</span></td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='53 = 0x35'>53</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='84 = 0x54'>84</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='86 = 0x56'>86</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='120 = 0x78'>120</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr class=b> <td class=r title='124 = 0x7c'>124</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='335 = 0x14f'>335</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr class=b> <td class=r title='337 = 0x151'>337</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='339 = 0x153'>339</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='493 = 0x1ed'>493</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='556 = 0x22c'>556</td> <td>FileIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='568 = 0x238'>568</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='872 = 0x368'>872</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo'>Canon PSInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo1DX'>Canon CameraInfo1DX Tags</a></h2> <p>CameraInfo tags for the EOS 1D X. Indices shown are for firmware version 1.0.2, but they may be different for other firmware versions.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='35 = 0x23'>35</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='125 = 0x7d'>125</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='140 = 0x8c'>140</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='142 = 0x8e'>142</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='188 = 0xbc'>188</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr class=b> <td class=r title='192 = 0xc0'>192</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='244 = 0xf4'>244</td> <td>PictureStyle</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a></td></tr> <tr class=b> <td class=r title='423 = 0x1a7'>423</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr> <td class=r title='425 = 0x1a9'>425</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='427 = 0x1ab'>427</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='640 = 0x280'>640</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='720 = 0x2d0'>720</td> <td>FileIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='732 = 0x2dc'>732</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1012 = 0x3f4'>1012</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo2'>Canon PSInfo2 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='PSInfo2'>Canon PSInfo2 Tags</a></h2> <p>Custom picture style information for the EOS 5DmkIII, 60D, 600D and 1100D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ContrastStandard</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>SharpnessStandard</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>SaturationStandard</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>ColorToneStandard</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>FilterEffectStandard?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>ToningEffectStandard?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>ContrastPortrait</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28</td> <td>SharpnessPortrait</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>SaturationPortrait</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='36 = 0x24'>36</td> <td>ColorTonePortrait</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>FilterEffectPortrait?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>ToningEffectPortrait?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>ContrastLandscape</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>SharpnessLandscape</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='56 = 0x38'>56</td> <td>SaturationLandscape</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='60 = 0x3c'>60</td> <td>ColorToneLandscape</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='64 = 0x40'>64</td> <td>FilterEffectLandscape?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='68 = 0x44'>68</td> <td>ToningEffectLandscape?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='72 = 0x48'>72</td> <td>ContrastNeutral</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='76 = 0x4c'>76</td> <td>SharpnessNeutral</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='80 = 0x50'>80</td> <td>SaturationNeutral</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='84 = 0x54'>84</td> <td>ColorToneNeutral</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='88 = 0x58'>88</td> <td>FilterEffectNeutral?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='92 = 0x5c'>92</td> <td>ToningEffectNeutral?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='96 = 0x60'>96</td> <td>ContrastFaithful</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='100 = 0x64'>100</td> <td>SharpnessFaithful</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='104 = 0x68'>104</td> <td>SaturationFaithful</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='108 = 0x6c'>108</td> <td>ColorToneFaithful</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='112 = 0x70'>112</td> <td>FilterEffectFaithful?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='116 = 0x74'>116</td> <td>ToningEffectFaithful?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='120 = 0x78'>120</td> <td>ContrastMonochrome</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='124 = 0x7c'>124</td> <td>SharpnessMonochrome</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='128 = 0x80'>128</td> <td>SaturationMonochrome?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='132 = 0x84'>132</td> <td>ColorToneMonochrome?</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='136 = 0x88'>136</td> <td>FilterEffectMonochrome</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Yellow</td><td>&nbsp;&nbsp;</td> <td>0x2 = Orange <br>0x3 = Red <br>0x4 = Green</td></tr></table> </td></tr> <tr class=b> <td class=r title='140 = 0x8c'>140</td> <td>ToningEffectMonochrome</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Sepia</td><td>&nbsp;&nbsp;</td> <td>0x2 = Blue <br>0x3 = Purple <br>0x4 = Green</td></tr></table> </td></tr> <tr> <td class=r title='144 = 0x90'>144</td> <td>ContrastAuto</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='148 = 0x94'>148</td> <td>SharpnessAuto</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='152 = 0x98'>152</td> <td>SaturationAuto</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='156 = 0x9c'>156</td> <td>ColorToneAuto</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='160 = 0xa0'>160</td> <td>FilterEffectAuto</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Yellow</td><td>&nbsp;&nbsp;</td> <td>0x2 = Orange <br>0x3 = Red <br>0x4 = Green</td></tr></table> </td></tr> <tr class=b> <td class=r title='164 = 0xa4'>164</td> <td>ToningEffectAuto</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Sepia</td><td>&nbsp;&nbsp;</td> <td>0x2 = Blue <br>0x3 = Purple <br>0x4 = Green</td></tr></table> </td></tr> <tr> <td class=r title='168 = 0xa8'>168</td> <td>ContrastUserDef1</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='172 = 0xac'>172</td> <td>SharpnessUserDef1</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='176 = 0xb0'>176</td> <td>SaturationUserDef1</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='180 = 0xb4'>180</td> <td>ColorToneUserDef1</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='184 = 0xb8'>184</td> <td>FilterEffectUserDef1</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Yellow</td><td>&nbsp;&nbsp;</td> <td>0x2 = Orange <br>0x3 = Red <br>0x4 = Green</td></tr></table> </td></tr> <tr class=b> <td class=r title='188 = 0xbc'>188</td> <td>ToningEffectUserDef1</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Sepia</td><td>&nbsp;&nbsp;</td> <td>0x2 = Blue <br>0x3 = Purple <br>0x4 = Green</td></tr></table> </td></tr> <tr> <td class=r title='192 = 0xc0'>192</td> <td>ContrastUserDef2</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='196 = 0xc4'>196</td> <td>SharpnessUserDef2</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='200 = 0xc8'>200</td> <td>SaturationUserDef2</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='204 = 0xcc'>204</td> <td>ColorToneUserDef2</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='208 = 0xd0'>208</td> <td>FilterEffectUserDef2</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Yellow</td><td>&nbsp;&nbsp;</td> <td>0x2 = Orange <br>0x3 = Red <br>0x4 = Green</td></tr></table> </td></tr> <tr class=b> <td class=r title='212 = 0xd4'>212</td> <td>ToningEffectUserDef2</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Sepia</td><td>&nbsp;&nbsp;</td> <td>0x2 = Blue <br>0x3 = Purple <br>0x4 = Green</td></tr></table> </td></tr> <tr> <td class=r title='216 = 0xd8'>216</td> <td>ContrastUserDef3</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='220 = 0xdc'>220</td> <td>SharpnessUserDef3</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='224 = 0xe0'>224</td> <td>SaturationUserDef3</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr class=b> <td class=r title='228 = 0xe4'>228</td> <td>ColorToneUserDef3</td> <td class=c>int32s</td> <td><span class=s>0xdeadbeef = n/a</span></td></tr> <tr> <td class=r title='232 = 0xe8'>232</td> <td>FilterEffectUserDef3</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Yellow</td><td>&nbsp;&nbsp;</td> <td>0x2 = Orange <br>0x3 = Red <br>0x4 = Green</td></tr></table> </td></tr> <tr class=b> <td class=r title='236 = 0xec'>236</td> <td>ToningEffectUserDef3</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0xdeadbeef = n/a <br>0x0 = None <br>0x1 = Sepia</td><td>&nbsp;&nbsp;</td> <td>0x2 = Blue <br>0x3 = Purple <br>0x4 = Green</td></tr></table> </td></tr> <tr> <td class=r title='240 = 0xf0'>240</td> <td>UserDef1PictureStyle</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#UserDefStyle'>Canon UserDefStyle Values</a></td></tr> <tr class=b> <td class=r title='242 = 0xf2'>242</td> <td>UserDef2PictureStyle</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#UserDefStyle'>Canon UserDefStyle Values</a></td></tr> <tr> <td class=r title='244 = 0xf4'>244</td> <td>UserDef3PictureStyle</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#UserDefStyle'>Canon UserDefStyle Values</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo5D'>Canon CameraInfo5D Tags</a></h2> <p>CameraInfo tags for the EOS 5D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr> <td class=r title='23 = 0x17'>23</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>MacroMagnification</td> <td class=c>int8s</td> <td><span class=s><span class=n>(currently decoded only for the MP-E 65mm f/2.8 1-5x Macro Photo)</span></span></td></tr> <tr> <td class=r title='39 = 0x27'>39</td> <td>CameraOrientation</td> <td class=c>int8s</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='56 = 0x38'>56</td> <td>AFPointsInFocus5D</td> <td class=c>int16uRev</td> <td><table class=cols><tr> <td>0x0 = (none) <br>Bit 0 = Center <br>Bit 1 = Top <br>Bit 2 = Bottom <br>Bit 3 = Upper-left <br>Bit 4 = Upper-right <br>Bit 5 = Lower-left <br>Bit 6 = Lower-right</td><td>&nbsp;&nbsp;</td> <td>Bit 7 = Left <br>Bit 8 = Right <br>Bit 9 = AI Servo1 <br>Bit 10 = AI Servo2 <br>Bit 11 = AI Servo3 <br>Bit 12 = AI Servo4 <br>Bit 13 = AI Servo5 <br>Bit 14 = AI Servo6</td></tr></table> </td></tr> <tr class=b> <td class=r title='84 = 0x54'>84</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr> <td class=r title='88 = 0x58'>88</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='108 = 0x6c'>108</td> <td>PictureStyle</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a></td></tr> <tr> <td class=r title='147 = 0x93'>147</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='149 = 0x95'>149</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='151 = 0x97'>151</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr class=b> <td class=r title='164 = 0xa4'>164</td> <td>FirmwareRevision</td> <td class=c>string[8]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='172 = 0xac'>172</td> <td>ShortOwnerName</td> <td class=c>string[16]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='204 = 0xcc'>204</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='208 = 0xd0'>208</td> <td>FileIndex</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='232 = 0xe8'>232</td> <td>ContrastStandard</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='233 = 0xe9'>233</td> <td>ContrastPortrait</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='234 = 0xea'>234</td> <td>ContrastLandscape</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='235 = 0xeb'>235</td> <td>ContrastNeutral</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='236 = 0xec'>236</td> <td>ContrastFaithful</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='237 = 0xed'>237</td> <td>ContrastMonochrome</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='238 = 0xee'>238</td> <td>ContrastUserDef1</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='239 = 0xef'>239</td> <td>ContrastUserDef2</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='240 = 0xf0'>240</td> <td>ContrastUserDef3</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='241 = 0xf1'>241</td> <td>SharpnessStandard</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='242 = 0xf2'>242</td> <td>SharpnessPortrait</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='243 = 0xf3'>243</td> <td>SharpnessLandscape</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='244 = 0xf4'>244</td> <td>SharpnessNeutral</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='245 = 0xf5'>245</td> <td>SharpnessFaithful</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='246 = 0xf6'>246</td> <td>SharpnessMonochrome</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='247 = 0xf7'>247</td> <td>SharpnessUserDef1</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='248 = 0xf8'>248</td> <td>SharpnessUserDef2</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='249 = 0xf9'>249</td> <td>SharpnessUserDef3</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='250 = 0xfa'>250</td> <td>SaturationStandard</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='251 = 0xfb'>251</td> <td>SaturationPortrait</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='252 = 0xfc'>252</td> <td>SaturationLandscape</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='253 = 0xfd'>253</td> <td>SaturationNeutral</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='254 = 0xfe'>254</td> <td>SaturationFaithful</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='255 = 0xff'>255</td> <td>FilterEffectMonochrome</td> <td class=c>int8s</td> <td><table class=cols><tr> <td>-559038737 = n/a <br>0 = None <br>1 = Yellow</td><td>&nbsp;&nbsp;</td> <td>2 = Orange <br>3 = Red <br>4 = Green</td></tr></table> </td></tr> <tr class=b> <td class=r title='256 = 0x100'>256</td> <td>SaturationUserDef1</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='257 = 0x101'>257</td> <td>SaturationUserDef2</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='258 = 0x102'>258</td> <td>SaturationUserDef3</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='259 = 0x103'>259</td> <td>ColorToneStandard</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='260 = 0x104'>260</td> <td>ColorTonePortrait</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='261 = 0x105'>261</td> <td>ColorToneLandscape</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='262 = 0x106'>262</td> <td>ColorToneNeutral</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='263 = 0x107'>263</td> <td>ColorToneFaithful</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='264 = 0x108'>264</td> <td>ToningEffectMonochrome</td> <td class=c>int8s</td> <td><table class=cols><tr> <td>-559038737 = n/a <br>0 = None <br>1 = Sepia</td><td>&nbsp;&nbsp;</td> <td>2 = Blue <br>3 = Purple <br>4 = Green</td></tr></table> </td></tr> <tr> <td class=r title='265 = 0x109'>265</td> <td>ColorToneUserDef1</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='266 = 0x10a'>266</td> <td>ColorToneUserDef2</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='267 = 0x10b'>267</td> <td>ColorToneUserDef3</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='268 = 0x10c'>268</td> <td>UserDef1PictureStyle</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#UserDefStyle'>Canon UserDefStyle Values</a></td></tr> <tr> <td class=r title='270 = 0x10e'>270</td> <td>UserDef2PictureStyle</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#UserDefStyle'>Canon UserDefStyle Values</a></td></tr> <tr class=b> <td class=r title='272 = 0x110'>272</td> <td>UserDef3PictureStyle</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#UserDefStyle'>Canon UserDefStyle Values</a></td></tr> <tr> <td class=r title='284 = 0x11c'>284</td> <td>TimeStamp</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo5DmkII'>Canon CameraInfo5DmkII Tags</a></h2> <p>CameraInfo tags for the EOS 5D Mark II. Indices shown are for firmware version 1.0.6, but they may be different for other firmware versions.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>HighlightTonePriority</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>FlashMeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = E-TTL <br>3 = TTL <br>4 = External Auto <br>5 = External Manual <br>6 = Off</span></td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='27 = 0x1b'>27</td> <td>MacroMagnification</td> <td class=c>int8u</td> <td><span class=s><span class=n>(currently decoded only for the MP-E 65mm f/2.8 1-5x Macro Photo)</span></span></td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='49 = 0x31'>49</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr class=b> <td class=r title='80 = 0x50'>80</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='82 = 0x52'>82</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='111 = 0x6f'>111</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr> <td class=r title='115 = 0x73'>115</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='167 = 0xa7'>167</td> <td>PictureStyle</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a></td></tr> <tr> <td class=r title='189 = 0xbd'>189</td> <td>HighISONoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Standard <br>1 = Low <br>2 = Strong <br>3 = Off</span></td></tr> <tr class=b> <td class=r title='191 = 0xbf'>191</td> <td>AutoLightingOptimizer</td> <td class=c>int8u</td> <td><span class=s>0 = Standard <br>1 = Low <br>2 = Strong <br>3 = Off</span></td></tr> <tr> <td class=r title='230 = 0xe6'>230</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr class=b> <td class=r title='232 = 0xe8'>232</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='234 = 0xea'>234</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='382 = 0x17e'>382</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='443 = 0x1bb'>443</td> <td>FileIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='455 = 0x1c7'>455</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='759 = 0x2f7'>759</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo'>Canon PSInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo5DmkIII'>Canon CameraInfo5DmkIII Tags</a></h2> <p>CameraInfo tags for the EOS 5D Mark III. Indices shown are for firmware versions 1.0.x, but they may be different for other firmware versions.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='35 = 0x23'>35</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='125 = 0x7d'>125</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='140 = 0x8c'>140</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='142 = 0x8e'>142</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='188 = 0xbc'>188</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr class=b> <td class=r title='192 = 0xc0'>192</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='244 = 0xf4'>244</td> <td>PictureStyle</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a></td></tr> <tr class=b> <td class=r title='339 = 0x153'>339</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr> <td class=r title='341 = 0x155'>341</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='343 = 0x157'>343</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='356 = 0x164'>356</td> <td>LensSerialNumber</td> <td class=c>undef[5]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='572 = 0x23c'>572</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='652 = 0x28c'>652</td> <td>FileIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='656 = 0x290'>656</td> <td>FileIndex2</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='664 = 0x298'>664</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='668 = 0x29c'>668</td> <td>DirectoryIndex2</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='944 = 0x3b0'>944</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo2'>Canon PSInfo2 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo6D'>Canon CameraInfo6D Tags</a></h2> <p>CameraInfo tags for the EOS 6D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='35 = 0x23'>35</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='131 = 0x83'>131</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='146 = 0x92'>146</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='148 = 0x94'>148</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='194 = 0xc2'>194</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr class=b> <td class=r title='198 = 0xc6'>198</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='250 = 0xfa'>250</td> <td>PictureStyle</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a></td></tr> <tr class=b> <td class=r title='353 = 0x161'>353</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr> <td class=r title='355 = 0x163'>355</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='357 = 0x165'>357</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='598 = 0x256'>598</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='682 = 0x2aa'>682</td> <td>FileIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='694 = 0x2b6'>694</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='966 = 0x3c6'>966</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo2'>Canon PSInfo2 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo7D'>Canon CameraInfo7D Tags</a></h2> <p>CameraInfo tags for the EOS 7D. Indices shown are for firmware versions 1.0.x, but they may be different for other firmware versions.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>HighlightTonePriority</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>MeasuredEV2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>MeasuredEV</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>FlashMeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = E-TTL <br>3 = TTL <br>4 = External Auto <br>5 = External Manual <br>6 = Off</span></td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='53 = 0x35'>53</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='84 = 0x54'>84</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='86 = 0x56'>86</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='119 = 0x77'>119</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr class=b> <td class=r title='123 = 0x7b'>123</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='201 = 0xc9'>201</td> <td>HighISONoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Standard <br>1 = Low <br>2 = Strong <br>3 = Off</span></td></tr> <tr class=b> <td class=r title='274 = 0x112'>274</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr> <td class=r title='276 = 0x114'>276</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='278 = 0x116'>278</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='428 = 0x1ac'>428</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='491 = 0x1eb'>491</td> <td>FileIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='503 = 0x1f7'>503</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='807 = 0x327'>807</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo'>Canon PSInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo40D'>Canon CameraInfo40D Tags</a></h2> <p>CameraInfo tags for the EOS 40D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>FlashMeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = E-TTL <br>3 = TTL <br>4 = External Auto <br>5 = External Manual <br>6 = Off</span></td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>MacroMagnification</td> <td class=c>int8u</td> <td><span class=s><span class=n>(currently decoded only for the MP-E 65mm f/2.8 1-5x Macro Photo)</span></span></td></tr> <tr> <td class=r title='29 = 0x1d'>29</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='67 = 0x43'>67</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='69 = 0x45'>69</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='111 = 0x6f'>111</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr class=b> <td class=r title='115 = 0x73'>115</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='214 = 0xd6'>214</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr class=b> <td class=r title='216 = 0xd8'>216</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='218 = 0xda'>218</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='255 = 0xff'>255</td> <td>FirmwareVersion</td> <td class=c>string[6]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='307 = 0x133'>307</td> <td>FileIndex</td> <td class=c>int32u</td> <td><span class=s><span class=n>(combined with DirectoryIndex to give the Composite FileNumber tag)</span></span></td></tr> <tr class=b> <td class=r title='319 = 0x13f'>319</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='603 = 0x25b'>603</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo'>Canon PSInfo Tags</a></td></tr> <tr class=b> <td class=r title='2347 = 0x92b'>2347</td> <td>LensModel</td> <td class=c>string[64]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo50D'>Canon CameraInfo50D Tags</a></h2> <p>CameraInfo tags for the EOS 50D. Indices shown are for firmware versions 1.0.x, but they may be different for other firmware versions.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>HighlightTonePriority</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>FlashMeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = E-TTL <br>3 = TTL <br>4 = External Auto <br>5 = External Manual <br>6 = Off</span></td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='49 = 0x31'>49</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='80 = 0x50'>80</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='82 = 0x52'>82</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='111 = 0x6f'>111</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr class=b> <td class=r title='115 = 0x73'>115</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='167 = 0xa7'>167</td> <td>PictureStyle</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a></td></tr> <tr class=b> <td class=r title='189 = 0xbd'>189</td> <td>HighISONoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Standard <br>1 = Low <br>2 = Strong <br>3 = Off</span></td></tr> <tr> <td class=r title='191 = 0xbf'>191</td> <td>AutoLightingOptimizer</td> <td class=c>int8u</td> <td><span class=s>0 = Standard <br>1 = Low <br>2 = Strong <br>3 = Off</span></td></tr> <tr class=b> <td class=r title='234 = 0xea'>234</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr> <td class=r title='236 = 0xec'>236</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='238 = 0xee'>238</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='350 = 0x15e'>350</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='411 = 0x19b'>411</td> <td>FileIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='423 = 0x1a7'>423</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='727 = 0x2d7'>727</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo'>Canon PSInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo60D'>Canon CameraInfo60D Tags</a></h2> <p>CameraInfo tags for the EOS 60D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='54 = 0x36'>54</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='85 = 0x55'>85</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='87 = 0x57'>87</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='125 = 0x7d'>125</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='232 = 0xe8'>232</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr> <td class=r title='234 = 0xea'>234</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='236 = 0xec'>236</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='409 = 0x199'>409</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='473 = 0x1d9'>473</td> <td>FileIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='485 = 0x1e5'>485</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='801 = 0x321'>801</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo2'>Canon PSInfo2 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo70D'>Canon CameraInfo70D Tags</a></h2> <p>CameraInfo tags for the EOS 70D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='35 = 0x23'>35</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='132 = 0x84'>132</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='147 = 0x93'>147</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='149 = 0x95'>149</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='199 = 0xc7'>199</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='358 = 0x166'>358</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr> <td class=r title='360 = 0x168'>360</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='362 = 0x16a'>362</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='606 = 0x25e'>606</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='691 = 0x2b3'>691</td> <td>FileIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='703 = 0x2bf'>703</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='975 = 0x3cf'>975</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo2'>Canon PSInfo2 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo450D'>Canon CameraInfo450D Tags</a></h2> <p>CameraInfo tags for the EOS 450D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>FlashMeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = E-TTL <br>3 = TTL <br>4 = External Auto <br>5 = External Manual <br>6 = Off</span></td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>MacroMagnification</td> <td class=c>int8u</td> <td><span class=s><span class=n>(currently decoded only for the MP-E 65mm f/2.8 1-5x Macro Photo)</span></span></td></tr> <tr> <td class=r title='29 = 0x1d'>29</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='67 = 0x43'>67</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='69 = 0x45'>69</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='111 = 0x6f'>111</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr class=b> <td class=r title='115 = 0x73'>115</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='222 = 0xde'>222</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr class=b> <td class=r title='263 = 0x107'>263</td> <td>FirmwareVersion</td> <td class=c>string[6]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='271 = 0x10f'>271</td> <td>OwnerName</td> <td class=c>string[32]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='307 = 0x133'>307</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='319 = 0x13f'>319</td> <td>FileIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='611 = 0x263'>611</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo'>Canon PSInfo Tags</a></td></tr> <tr> <td class=r title='2355 = 0x933'>2355</td> <td>LensModel</td> <td class=c>string[64]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo500D'>Canon CameraInfo500D Tags</a></h2> <p>CameraInfo tags for the EOS 500D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>HighlightTonePriority</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>FlashMeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = E-TTL <br>3 = TTL <br>4 = External Auto <br>5 = External Manual <br>6 = Off</span></td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='49 = 0x31'>49</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='80 = 0x50'>80</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='82 = 0x52'>82</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='115 = 0x73'>115</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr class=b> <td class=r title='119 = 0x77'>119</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='171 = 0xab'>171</td> <td>PictureStyle</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a></td></tr> <tr class=b> <td class=r title='188 = 0xbc'>188</td> <td>HighISONoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Standard <br>1 = Low <br>2 = Strong <br>3 = Off</span></td></tr> <tr> <td class=r title='190 = 0xbe'>190</td> <td>AutoLightingOptimizer</td> <td class=c>int8u</td> <td><span class=s>0 = Standard <br>1 = Low <br>2 = Strong <br>3 = Off</span></td></tr> <tr class=b> <td class=r title='246 = 0xf6'>246</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr> <td class=r title='248 = 0xf8'>248</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='250 = 0xfa'>250</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='400 = 0x190'>400</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='467 = 0x1d3'>467</td> <td>FileIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='479 = 0x1df'>479</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='779 = 0x30b'>779</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo'>Canon PSInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo550D'>Canon CameraInfo550D Tags</a></h2> <p>CameraInfo tags for the EOS 550D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>HighlightTonePriority</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>FlashMeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = E-TTL <br>3 = TTL <br>4 = External Auto <br>5 = External Manual <br>6 = Off</span></td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='53 = 0x35'>53</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='84 = 0x54'>84</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='86 = 0x56'>86</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='120 = 0x78'>120</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr class=b> <td class=r title='124 = 0x7c'>124</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='176 = 0xb0'>176</td> <td>PictureStyle</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a></td></tr> <tr class=b> <td class=r title='255 = 0xff'>255</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr> <td class=r title='257 = 0x101'>257</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='259 = 0x103'>259</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='420 = 0x1a4'>420</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='484 = 0x1e4'>484</td> <td>FileIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='496 = 0x1f0'>496</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='796 = 0x31c'>796</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo'>Canon PSInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo600D'>Canon CameraInfo600D Tags</a></h2> <p>CameraInfo tags for the EOS 600D and 1100D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>HighlightTonePriority</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>FlashMeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = E-TTL <br>3 = TTL <br>4 = External Auto <br>5 = External Manual <br>6 = Off</span></td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='56 = 0x38'>56</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='87 = 0x57'>87</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='89 = 0x59'>89</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='123 = 0x7b'>123</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr class=b> <td class=r title='127 = 0x7f'>127</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='179 = 0xb3'>179</td> <td>PictureStyle</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a></td></tr> <tr class=b> <td class=r title='234 = 0xea'>234</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr> <td class=r title='236 = 0xec'>236</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='238 = 0xee'>238</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='411 = 0x19b'>411</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='475 = 0x1db'>475</td> <td>FileIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='487 = 0x1e7'>487</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='763 = 0x2fb'>763</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo2'>Canon PSInfo2 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo650D'>Canon CameraInfo650D Tags</a></h2> <p>CameraInfo tags for the EOS 650D and 700D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='35 = 0x23'>35</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='125 = 0x7d'>125</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='140 = 0x8c'>140</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='142 = 0x8e'>142</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='188 = 0xbc'>188</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr class=b> <td class=r title='192 = 0xc0'>192</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='244 = 0xf4'>244</td> <td>PictureStyle</td> <td class=c>int8u</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a></td></tr> <tr class=b> <td class=r title='295 = 0x127'>295</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr> <td class=r title='297 = 0x129'>297</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='299 = 0x12b'>299</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='539 = 0x21b'>539</td> <td>FirmwareVersion</td> <td class=c>N</td> <td><span class=s><span class=n>(650D)</span></span></td></tr> <tr class=b> <td class=r title='544 = 0x220'>544</td> <td>FirmwareVersion</td> <td class=c>N</td> <td><span class=s><span class=n>(700D)</span></span></td></tr> <tr> <td class=r title='624 = 0x270'>624</td> <td>FileIndex</td> <td class=c>int32u</td> <td><span class=s><span class=n>(650D)</span></span></td></tr> <tr class=b> <td class=r title='628 = 0x274'>628</td> <td>FileIndex</td> <td class=c>int32u</td> <td><span class=s><span class=n>(700D)</span></span></td></tr> <tr> <td class=r title='636 = 0x27c'>636</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td><span class=s><span class=n>(650D)</span></span></td></tr> <tr class=b> <td class=r title='640 = 0x280'>640</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td><span class=s><span class=n>(700D)</span></span></td></tr> <tr> <td class=r title='912 = 0x390'>912</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo2'>Canon PSInfo2 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo1000D'>Canon CameraInfo1000D Tags</a></h2> <p>CameraInfo tags for the EOS 1000D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>FlashMeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = E-TTL <br>3 = TTL <br>4 = External Auto <br>5 = External Manual <br>6 = Off</span></td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>CameraTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>MacroMagnification</td> <td class=c>int8u</td> <td><span class=s><span class=n>(currently decoded only for the MP-E 65mm f/2.8 1-5x Macro Photo)</span></span></td></tr> <tr> <td class=r title='29 = 0x1d'>29</td> <td>FocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='67 = 0x43'>67</td> <td>FocusDistanceUpper</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='69 = 0x45'>69</td> <td>FocusDistanceLower</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='111 = 0x6f'>111</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr class=b> <td class=r title='115 = 0x73'>115</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='226 = 0xe2'>226</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Canon.html#LensType'>Canon LensType Values</a></td></tr> <tr class=b> <td class=r title='228 = 0xe4'>228</td> <td>MinFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr> <td class=r title='230 = 0xe6'>230</td> <td>MaxFocalLength</td> <td class=c>int16uRev</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='267 = 0x10b'>267</td> <td>FirmwareVersion</td> <td class=c>string[6]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='311 = 0x137'>311</td> <td>DirectoryIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='323 = 0x143'>323</td> <td>FileIndex</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='615 = 0x267'>615</td> <td>PictureStyleInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#PSInfo'>Canon PSInfo Tags</a></td></tr> <tr class=b> <td class=r title='2359 = 0x937'>2359</td> <td>LensModel</td> <td class=c>string[64]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfoPowerShot'>Canon CameraInfoPowerShot Tags</a></h2> <p>CameraInfo tags for PowerShot models such as the A450, A460, A550, A560, A570, A630, A640, A650, A710, A720, G7, G9, S5, SD40, SD750, SD800, SD850, SD870, SD900, SD950, SD1000, SX100 and TX1.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ISO</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>FNumber</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ExposureTime</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='23 = 0x17'>23</td> <td>Rotation</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='135 = 0x87'>135</td> <td>CameraTemperature</td> <td class=c>int32s</td> <td><span class=s><span class=n>(A450, A460, A550, A630, A640 and A710)</span></span></td></tr> <tr class=b> <td class=r title='145 = 0x91'>145</td> <td>CameraTemperature</td> <td class=c>int32s</td> <td><span class=s><span class=n>(A560, A570, A650, A720, G7, G9, S5, SD40, SD750, SD800, SD850, SD870, SD900, SD950, SD1000, SX100 and TX1)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfoPowerShot2'>Canon CameraInfoPowerShot2 Tags</a></h2> <p>CameraInfo tags for PowerShot models such as the A470, A480, A490, A495, A580, A590, A1000, A1100, A2000, A2100, A3000, A3100, D10, E1, G10, G11, S90, S95, SD770, SD780, SD790, SD880, SD890, SD940, SD960, SD970, SD980, SD990, SD1100, SD1200, SD1300, SD1400, SD3500, SD4000, SD4500, SX1, SX10, SX20, SX110, SX120, SX130, SX200 and SX210.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>ISO</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>FNumber</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>ExposureTime</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>Rotation</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='153 = 0x99'>153</td> <td>CameraTemperature</td> <td class=c>int32s</td> <td><span class=s><span class=n>(A470, A580, A590, SD770, SD790, SD890 and SD1100)</span></span></td></tr> <tr class=b> <td class=r title='159 = 0x9f'>159</td> <td>CameraTemperature</td> <td class=c>int32s</td> <td><span class=s><span class=n>(A1000, A2000, E1, G10, SD880, SD990, SX1, SX10 and SX110)</span></span></td></tr> <tr> <td class=r title='164 = 0xa4'>164</td> <td>CameraTemperature</td> <td class=c>int32s</td> <td><span class=s><span class=n>(A480, A1100, A2100, D10, SD780, SD960, SD970, SD1200 and SX200)</span></span></td></tr> <tr class=b> <td class=r title='168 = 0xa8'>168</td> <td>CameraTemperature</td> <td class=c>int32s</td> <td><span class=s><span class=n>(A490, A495, A3000, A3100, G11, S90, SD940, SD980, SD1300, SD1400, SD3500, SD4000, SX20, SX120 and SX210)</span></span></td></tr> <tr> <td class=r title='261 = 0x105'>261</td> <td>CameraTemperature</td> <td class=c>int32s</td> <td><span class=s><span class=n>(S95, SD4500 and SX130)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfoUnknown32'>Canon CameraInfoUnknown32 Tags</a></h2> <p>Unknown CameraInfo tags are divided into 3 tables based on format size.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='71 = 0x47'>71</td> <td>CameraTemperature</td> <td class=c>int32s</td> <td><span class=s><span class=n>(S1)</span></span></td></tr> <tr class=b> <td class=r title='83 = 0x53'>83</td> <td>CameraTemperature</td> <td class=c>int32s</td> <td><span class=s><span class=n>(S2)</span></span></td></tr> <tr> <td class=r title='91 = 0x5b'>91</td> <td>CameraTemperature</td> <td class=c>int32s</td> <td><span class=s><span class=n>(A410, A610, A620, S80, SD30, SD400, SD430, SD450, SD500 and SD550)</span></span></td></tr> <tr class=b> <td class=r title='92 = 0x5c'>92</td> <td>CameraTemperature</td> <td class=c>int32s</td> <td><span class=s><span class=n>(S3)</span></span></td></tr> <tr> <td class=r title='100 = 0x64'>100</td> <td>CameraTemperature</td> <td class=c>int32s</td> <td><span class=s><span class=n>(A420, A430, A530, A540, A700, SD600, SD630 and SD700)</span></span></td></tr> <tr class=b> <td class=r>-3</td> <td>CameraTemperature</td> <td class=c>int32s</td> <td><span class=s><span class=n>(3 entries from end of record for most newer camera models)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfoUnknown16'>Canon CameraInfoUnknown16 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfoUnknown'>Canon CameraInfoUnknown Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='363 = 0x16b'>363</td> <td>LensSerialNumber</td> <td class=c>undef[5]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MovieInfo'>Canon MovieInfo Tags</a></h2> <p>Tags written by some Canon cameras when recording video.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>FrameRate</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>FrameCount</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>FrameCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>FrameRate</td> <td class=c>rational32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='106 = 0x6a'>106</td> <td>Duration</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='108 = 0x6c'>108</td> <td>AudioBitrate</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='110 = 0x6e'>110</td> <td>AudioSampleRate</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='112 = 0x70'>112</td> <td>AudioChannels</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='116 = 0x74'>116</td> <td>VideoCodec</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AFInfo'>Canon AFInfo Tags</a></h2> <p>Auto-focus information used by many older Canon models. The values in this record are sequential, and some have variable sizes based on the value of NumAFPoints (which may be 1,5,7,9,15,45 or 53). The AFArea coordinates are given in a system where the image has dimensions given by AFImageWidth and AFImageHeight, and 0,0 is the image center. The direction of the Y axis depends on the camera model, with positive Y upwards for EOS models, but apparently downwards for PowerShot models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Sequence</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>NumAFPoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>ValidAFPoints</td> <td class=c>N</td> <td><span class=s><span class=n>(number of AF points valid in the following information)</span></span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>CanonImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>CanonImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>AFImageWidth</td> <td class=c>N</td> <td><span class=s><span class=n>(size of image in AF coordinates)</span></span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>AFImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>AFAreaWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>AFAreaHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>AFAreaXPositions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>AFAreaYPositions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>AFPointsInFocus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>PrimaryAFPoint <br>Canon_AFInfo_0x000b?</td> <td class=c>N<br>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>PrimaryAFPoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MyColors'>Canon MyColors Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>MyColorMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Positive Film <br>2 = Light Skin Tone <br>3 = Dark Skin Tone <br>4 = Vivid Blue <br>5 = Vivid Green <br>6 = Vivid Red</td><td>&nbsp;&nbsp;</td> <td>7 = Color Accent <br>8 = Color Swap <br>9 = Custom <br>12 = Vivid <br>13 = Neutral <br>14 = Sepia <br>15 = B&amp;W</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceDetect1'>Canon FaceDetect1 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>FacesDetected</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>FaceDetectFrameSize</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>Face1Position</td> <td class=c>int16s[2]</td> <td><span class=s><span class=n>(X-Y coordinates for the center of each face in the Face Detect frame at the time of focus lock. &quot;0 0&quot; is the center, and positive X and Y are to the right and downwards respectively)</span></span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>Face2Position</td> <td class=c>int16s[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>Face3Position</td> <td class=c>int16s[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>Face4Position</td> <td class=c>int16s[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>Face5Position</td> <td class=c>int16s[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>Face6Position</td> <td class=c>int16s[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>Face7Position</td> <td class=c>int16s[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>Face8Position</td> <td class=c>int16s[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>Face9Position</td> <td class=c>int16s[2]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceDetect2'>Canon FaceDetect2 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>FaceWidth</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>FacesDetected</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AFInfo2'>Canon AFInfo2 Tags</a></h2> <p>Newer version of the AFInfo record containing much of the same information (and coordinate confusion) as the older version. In this record, NumAFPoints may be 7, 9, 11, 19, 31, 45 or 61, depending on the camera model.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Sequence</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>AFInfoSize?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>AFAreaMode</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Off (Manual Focus) <br>1 = AF Point Expansion (surround) <br>2 = Single-point AF <br>4 = Auto <br>5 = Face Detect AF <br>6 = Face + Tracking <br>7 = Zone AF <br>8 = AF Point Expansion (4 point) <br>9 = Spot AF <br>10 = AF Point Expansion (8 point) <br>11 = Flexizone Multi <br>13 = Flexizone Single <br>14 = Large Zone AF</td></tr></table> </td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>NumAFPoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>ValidAFPoints</td> <td class=c>N</td> <td><span class=s><span class=n>(number of AF points valid in the following information)</span></span></td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>CanonImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>CanonImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>AFImageWidth</td> <td class=c>N</td> <td><span class=s><span class=n>(size of image in AF coordinates)</span></span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>AFImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>AFAreaWidths</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>AFAreaHeights</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>AFAreaXPositions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>AFAreaYPositions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>AFPointsInFocus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>AFPointsSelected <br>Canon_AFInfo2_0x000d?</td> <td class=c>N<br>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>PrimaryAFPoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ContrastInfo'>Canon ContrastInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>IntelligentContrast</td> <td class=c>int16u</td> <td><span class=s>0x0 = Off <br>0x8 = On <br>0xffff = n/a</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceDetect3'>Canon FaceDetect3 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FacesDetected</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='TimeInfo'>Canon TimeInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>TimeZone</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>TimeZoneCity</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0 = n/a <br>1 = Chatham Islands <br>2 = Wellington <br>3 = Solomon Islands <br>4 = Sydney <br>5 = Adelaide <br>6 = Tokyo <br>7 = Hong Kong <br>8 = Bangkok <br>9 = Yangon <br>10 = Dhaka <br>11 = Kathmandu</td><td>&nbsp;&nbsp;</td> <td>12 = Delhi <br>13 = Karachi <br>14 = Kabul <br>15 = Dubai <br>16 = Tehran <br>17 = Moscow <br>18 = Cairo <br>19 = Paris <br>20 = London <br>21 = Azores <br>22 = Fernando de Noronha <br>23 = Sao Paulo</td><td>&nbsp;&nbsp;</td> <td>24 = Newfoundland <br>25 = Santiago <br>26 = Caracas <br>27 = New York <br>28 = Chicago <br>29 = Denver <br>30 = Los Angeles <br>31 = Anchorage <br>32 = Honolulu <br>33 = Samoa <br>32766 = (not set)</td></tr></table> </td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>DaylightSavings</td> <td class=c>int32s</td> <td><span class=s>0 = Off <br>60 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='FileInfo'>Canon FileInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>FileNumber <br>ShutterCount</td> <td class=c>int32u<br>int32u</td> <td><span class=s><span class=n>(the location of the upper 4 bits of the directory number is a mystery for the EOS 30D, so the reported directory number will be incorrect for original images with a directory number of 164 or greater)</span> <br><span class=n>(there are reports that the ShutterCount changed when loading a settings file on the 1DSmkII)</span></span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>BracketMode</td> <td class=c>int16s</td> <td><span class=s>0 = Off <br>1 = AEB <br>2 = FEB <br>3 = ISO <br>4 = WB</span></td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>BracketValue</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>BracketShotNumber</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>RawJpgQuality</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-1 = n/a <br>1 = Economy <br>2 = Normal <br>3 = Fine</td><td>&nbsp;&nbsp;</td> <td>4 = RAW <br>5 = Superfine <br>130 = Normal Movie <br>131 = Movie (2)</td></tr></table> </td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>RawJpgSize</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-1 = n/a <br>0 = Large <br>1 = Medium <br>2 = Small <br>5 = Medium 1 <br>6 = Medium 2 <br>7 = Medium 3 <br>8 = Postcard <br>9 = Widescreen</td><td>&nbsp;&nbsp;</td> <td>10 = Medium Widescreen <br>14 = Small 1 <br>15 = Small 2 <br>16 = Small 3 <br>128 = 640x480 Movie <br>129 = Medium Movie <br>130 = Small Movie <br>137 = 1280x720 Movie <br>142 = 1920x1080 Movie</td></tr></table> </td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>LongExposureNoiseReduction2</td> <td class=c>int16s</td> <td><span class=s><span class=n>(for some modules this gives the long exposure noise reduction applied to the image, but for other models this just reflects the setting independent of whether or not it was applied)</span> <br>0 = Off <br>1 = On (1D) <br>3 = On <br>4 = Auto</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>WBBracketMode</td> <td class=c>int16s</td> <td><span class=s>0 = Off <br>1 = On (shift AB) <br>2 = On (shift GM)</span></td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>WBBracketValueAB</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>WBBracketValueGM</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>FilterEffect</td> <td class=c>int16s</td> <td><span class=s>0 = None <br>1 = Yellow <br>2 = Orange <br>3 = Red <br>4 = Green</span></td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>ToningEffect</td> <td class=c>int16s</td> <td><span class=s>0 = None <br>1 = Sepia <br>2 = Blue <br>3 = Purple <br>4 = Green</span></td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>MacroMagnification</td> <td class=c>int16s</td> <td><span class=s><span class=n>(currently decoded only for the MP-E 65mm f/2.8 1-5x Macro Photo, and not valid for all camera models)</span></span></td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>LiveViewShooting</td> <td class=c>int16s</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>FocusDistanceUpper</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>FocusDistanceLower</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='25 = 0x19'>25</td> <td>FlashExposureLock</td> <td class=c>int16s</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='SerialInfo'>Canon SerialInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>InternalSerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CropInfo'>Canon CropInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>CropLeftMargin</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>CropRightMargin</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>CropTopMargin</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>CropBottomMargin</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AspectInfo'>Canon AspectInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>AspectRatio</td> <td class=c>int32u</td> <td><span class=s>0 = 3:2 <br>1 = 1:1 <br>2 = 4:3 <br>7 = 16:9 <br>8 = 4:5</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>CroppedImageWidth</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>CroppedImageHeight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>CroppedImageLeft</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>CroppedImageTop</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Processing'>Canon Processing Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>ToneCurve</td> <td class=c>int16s</td> <td><span class=s>0 = Standard <br>1 = Manual <br>2 = Custom</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>Sharpness</td> <td class=c>int16s</td> <td><span class=s><span class=n>(all models except the 20D and 350D)</span></span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>SharpnessFrequency</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = n/a <br>1 = Lowest <br>2 = Low</td><td>&nbsp;&nbsp;</td> <td>3 = Standard <br>4 = High <br>5 = Highest</td></tr></table> </td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>SensorRedLevel</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>SensorBlueLevel</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>WhiteBalanceRed</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>WhiteBalanceBlue</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>WhiteBalance</td> <td class=c>int16s</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>ColorTemperature</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>PictureStyle</td> <td class=c>int16s</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a></td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>DigitalGain</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>WBShiftAB</td> <td class=c>int16s</td> <td><span class=s><span class=n>(positive is a shift toward amber)</span></span></td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>WBShiftGM</td> <td class=c>int16s</td> <td><span class=s><span class=n>(positive is a shift toward green)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorBalance'>Canon ColorBalance Tags</a></h2> <p>These tags are used by the 10D and 300D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>WB_RGGBLevelsAuto</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>WB_RGGBLevelsDaylight</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>WB_RGGBLevelsShade</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>WB_RGGBLevelsCloudy</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>WB_RGGBLevelsTungsten</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>WB_RGGBLevelsFluorescent</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='25 = 0x19'>25</td> <td>WB_RGGBLevelsFlash</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>WB_RGGBLevelsCustom</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='33 = 0x21'>33</td> <td>WB_RGGBLevelsKelvin</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='37 = 0x25'>37</td> <td>WB_RGGBBlackLevels</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MeasuredColor'>Canon MeasuredColor Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>MeasuredRGGB</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Flags'>Canon Flags Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>ModifiedParamFlag</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ModifiedInfo'>Canon ModifiedInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>ModifiedToneCurve</td> <td class=c>int16s</td> <td><span class=s>0 = Standard <br>1 = Manual <br>2 = Custom</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>ModifiedSharpness</td> <td class=c>int16s</td> <td><span class=s><span class=n>(1D and 5D only)</span></span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>ModifiedSharpnessFreq</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = n/a <br>1 = Lowest <br>2 = Low</td><td>&nbsp;&nbsp;</td> <td>3 = Standard <br>4 = High <br>5 = Highest</td></tr></table> </td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ModifiedSensorRedLevel</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>ModifiedSensorBlueLevel</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>ModifiedWhiteBalanceRed</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>ModifiedWhiteBalanceBlue</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ModifiedWhiteBalance</td> <td class=c>int16s</td> <td>--&gt; <a href='Canon.html#WhiteBalance'>Canon WhiteBalance Values</a></td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>ModifiedColorTemp</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>ModifiedPictureStyle</td> <td class=c>int16s</td> <td>--&gt; <a href='Canon.html#PictureStyle'>Canon PictureStyle Values</a></td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>ModifiedDigitalGain</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PreviewImageInfo'>Canon PreviewImageInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>PreviewQuality</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>-1 = n/a <br>1 = Economy <br>2 = Normal <br>3 = Fine</td><td>&nbsp;&nbsp;</td> <td>4 = RAW <br>5 = Superfine <br>130 = Normal Movie <br>131 = Movie (2)</td></tr></table> </td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>PreviewImageLength</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>PreviewImageWidth</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>PreviewImageHeight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>PreviewImageStart</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SensorInfo'>Canon SensorInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>SensorWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>SensorHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>SensorLeftBorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>SensorTopBorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>SensorRightBorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>SensorBottomBorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>BlackMaskLeftBorder</td> <td class=c>N</td> <td><span class=s><span class=n>(coordinates for the area to the left or right of the image used to calculate the average black level)</span></span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>BlackMaskTopBorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>BlackMaskRightBorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>BlackMaskBottomBorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorData1'>Canon ColorData1 Tags</a></h2> <p>These tags are used by the 20D and 350D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='25 = 0x19'>25</td> <td>WB_RGGBLevelsAsShot</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>ColorTempAsShot</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>WB_RGGBLevelsAuto</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='34 = 0x22'>34</td> <td>ColorTempAuto</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='35 = 0x23'>35</td> <td>WB_RGGBLevelsDaylight</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='39 = 0x27'>39</td> <td>ColorTempDaylight</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>WB_RGGBLevelsShade</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>ColorTempShade</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='45 = 0x2d'>45</td> <td>WB_RGGBLevelsCloudy</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='49 = 0x31'>49</td> <td>ColorTempCloudy</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='50 = 0x32'>50</td> <td>WB_RGGBLevelsTungsten</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='54 = 0x36'>54</td> <td>ColorTempTungsten</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='55 = 0x37'>55</td> <td>WB_RGGBLevelsFluorescent</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='59 = 0x3b'>59</td> <td>ColorTempFluorescent</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='60 = 0x3c'>60</td> <td>WB_RGGBLevelsFlash</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='64 = 0x40'>64</td> <td>ColorTempFlash</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='65 = 0x41'>65</td> <td>WB_RGGBLevelsCustom1</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='69 = 0x45'>69</td> <td>ColorTempCustom1</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='70 = 0x46'>70</td> <td>WB_RGGBLevelsCustom2</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='74 = 0x4a'>74</td> <td>ColorTempCustom2</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='75 = 0x4b'>75</td> <td>ColorCalib?</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ColorCalib'>Canon ColorCalib Tags</a> <br><span class='n s'>(A, B, C, Temperature)</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorCalib'>Canon ColorCalib Tags</a></h2> <p>Camera color calibration data. For the 20D, 350D, 1DmkII and 1DSmkII the order of the coefficients is A, B, C, Temperature, but for newer models it is B, C, A, Temperature. These tags are extracted only when the Unknown option is used.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>CameraColorCalibration01?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>CameraColorCalibration02?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>CameraColorCalibration03?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>CameraColorCalibration04?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>CameraColorCalibration05?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>CameraColorCalibration06?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>CameraColorCalibration07?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28</td> <td>CameraColorCalibration08?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>CameraColorCalibration09?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='36 = 0x24'>36</td> <td>CameraColorCalibration10?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>CameraColorCalibration11?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>CameraColorCalibration12?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>CameraColorCalibration13?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>CameraColorCalibration14?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='56 = 0x38'>56</td> <td>CameraColorCalibration15?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorData2'>Canon ColorData2 Tags</a></h2> <p>These tags are used by the 1DmkII and 1DSmkII.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>WB_RGGBLevelsAuto</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28</td> <td>ColorTempAuto</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='29 = 0x1d'>29</td> <td>WB_RGGBLevelsUnknown?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='33 = 0x21'>33</td> <td>ColorTempUnknown?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='34 = 0x22'>34</td> <td>WB_RGGBLevelsAsShot</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>ColorTempAsShot</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='39 = 0x27'>39</td> <td>WB_RGGBLevelsDaylight</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='43 = 0x2b'>43</td> <td>ColorTempDaylight</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>WB_RGGBLevelsShade</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>ColorTempShade</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='49 = 0x31'>49</td> <td>WB_RGGBLevelsCloudy</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='53 = 0x35'>53</td> <td>ColorTempCloudy</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='54 = 0x36'>54</td> <td>WB_RGGBLevelsTungsten</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='58 = 0x3a'>58</td> <td>ColorTempTungsten</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='59 = 0x3b'>59</td> <td>WB_RGGBLevelsFluorescent</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='63 = 0x3f'>63</td> <td>ColorTempFluorescent</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='64 = 0x40'>64</td> <td>WB_RGGBLevelsKelvin</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='68 = 0x44'>68</td> <td>ColorTempKelvin</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='69 = 0x45'>69</td> <td>WB_RGGBLevelsFlash</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='73 = 0x49'>73</td> <td>ColorTempFlash</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='74 = 0x4a'>74</td> <td>WB_RGGBLevelsUnknown2?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='78 = 0x4e'>78</td> <td>ColorTempUnknown2?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='79 = 0x4f'>79</td> <td>WB_RGGBLevelsUnknown3?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='83 = 0x53'>83</td> <td>ColorTempUnknown3?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='84 = 0x54'>84</td> <td>WB_RGGBLevelsUnknown4?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='88 = 0x58'>88</td> <td>ColorTempUnknown4?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='89 = 0x59'>89</td> <td>WB_RGGBLevelsUnknown5?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='93 = 0x5d'>93</td> <td>ColorTempUnknown5?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='94 = 0x5e'>94</td> <td>WB_RGGBLevelsUnknown6?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='98 = 0x62'>98</td> <td>ColorTempUnknown6?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='99 = 0x63'>99</td> <td>WB_RGGBLevelsUnknown7?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='103 = 0x67'>103</td> <td>ColorTempUnknown7?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='104 = 0x68'>104</td> <td>WB_RGGBLevelsUnknown8?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='108 = 0x6c'>108</td> <td>ColorTempUnknown8?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='109 = 0x6d'>109</td> <td>WB_RGGBLevelsUnknown9?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='113 = 0x71'>113</td> <td>ColorTempUnknown9?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='114 = 0x72'>114</td> <td>WB_RGGBLevelsUnknown10?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='118 = 0x76'>118</td> <td>ColorTempUnknown10?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='119 = 0x77'>119</td> <td>WB_RGGBLevelsUnknown11?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='123 = 0x7b'>123</td> <td>ColorTempUnknown11?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='124 = 0x7c'>124</td> <td>WB_RGGBLevelsUnknown12?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='128 = 0x80'>128</td> <td>ColorTempUnknown12?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='129 = 0x81'>129</td> <td>WB_RGGBLevelsUnknown13?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='133 = 0x85'>133</td> <td>ColorTempUnknown13?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='134 = 0x86'>134</td> <td>WB_RGGBLevelsUnknown14?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='138 = 0x8a'>138</td> <td>ColorTempUnknown14?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='139 = 0x8b'>139</td> <td>WB_RGGBLevelsUnknown15?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='143 = 0x8f'>143</td> <td>ColorTempUnknown15?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='144 = 0x90'>144</td> <td>WB_RGGBLevelsPC1</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='148 = 0x94'>148</td> <td>ColorTempPC1</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='149 = 0x95'>149</td> <td>WB_RGGBLevelsPC2</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='153 = 0x99'>153</td> <td>ColorTempPC2</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='154 = 0x9a'>154</td> <td>WB_RGGBLevelsPC3</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='158 = 0x9e'>158</td> <td>ColorTempPC3</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='159 = 0x9f'>159</td> <td>WB_RGGBLevelsUnknown16?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='163 = 0xa3'>163</td> <td>ColorTempUnknown16?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='164 = 0xa4'>164</td> <td>ColorCalib?</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ColorCalib'>Canon ColorCalib Tags</a> <br><span class='n s'>(A, B, C, Temperature)</span></td></tr> <tr class=b> <td class=r title='618 = 0x26a'>618</td> <td>RawMeasuredRGGB</td> <td class=c>int32u[4]</td> <td><span class=s><span class=n>(raw MeasuredRGGB values, before normalization)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorData3'>Canon ColorData3 Tags</a></h2> <p>These tags are used by the 1DmkIIN, 5D, 30D and 400D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ColorDataVersion</td> <td class=c>int16s</td> <td><span class=s>1 = 1 (1DmkIIN/5D/30D/400D)</span></td></tr> <tr class=b> <td class=r title='63 = 0x3f'>63</td> <td>WB_RGGBLevelsAsShot</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='67 = 0x43'>67</td> <td>ColorTempAsShot</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='68 = 0x44'>68</td> <td>WB_RGGBLevelsAuto</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='72 = 0x48'>72</td> <td>ColorTempAuto</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='73 = 0x49'>73</td> <td>WB_RGGBLevelsMeasured</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='77 = 0x4d'>77</td> <td>ColorTempMeasured</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='78 = 0x4e'>78</td> <td>WB_RGGBLevelsDaylight</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='82 = 0x52'>82</td> <td>ColorTempDaylight</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='83 = 0x53'>83</td> <td>WB_RGGBLevelsShade</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='87 = 0x57'>87</td> <td>ColorTempShade</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='88 = 0x58'>88</td> <td>WB_RGGBLevelsCloudy</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='92 = 0x5c'>92</td> <td>ColorTempCloudy</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='93 = 0x5d'>93</td> <td>WB_RGGBLevelsTungsten</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='97 = 0x61'>97</td> <td>ColorTempTungsten</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='98 = 0x62'>98</td> <td>WB_RGGBLevelsFluorescent</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='102 = 0x66'>102</td> <td>ColorTempFluorescent</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='103 = 0x67'>103</td> <td>WB_RGGBLevelsKelvin</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='107 = 0x6b'>107</td> <td>ColorTempKelvin</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='108 = 0x6c'>108</td> <td>WB_RGGBLevelsFlash</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='112 = 0x70'>112</td> <td>ColorTempFlash</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='113 = 0x71'>113</td> <td>WB_RGGBLevelsPC1</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='117 = 0x75'>117</td> <td>ColorTempPC1</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='118 = 0x76'>118</td> <td>WB_RGGBLevelsPC2</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='122 = 0x7a'>122</td> <td>ColorTempPC2</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='123 = 0x7b'>123</td> <td>WB_RGGBLevelsPC3</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='127 = 0x7f'>127</td> <td>ColorTempPC3</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='128 = 0x80'>128</td> <td>WB_RGGBLevelsCustom</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='132 = 0x84'>132</td> <td>ColorTempCustom</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='133 = 0x85'>133</td> <td>ColorCalib?</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ColorCalib'>Canon ColorCalib Tags</a> <br><span class='n s'>(B, C, A, Temperature)</span></td></tr> <tr> <td class=r title='196 = 0xc4'>196</td> <td>PerChannelBlackLevel</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='584 = 0x248'>584</td> <td>FlashOutput</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='585 = 0x249'>585</td> <td>FlashBatteryLevel</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='586 = 0x24a'>586</td> <td>ColorTempFlashData</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='647 = 0x287'>647</td> <td>MeasuredRGGBData</td> <td class=c>int32u[4]</td> <td><span class=s><span class=n>(MeasuredRGGB may be derived from these data values)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorData4'>Canon ColorData4 Tags</a></h2> <p>These tags are used by the 1DmkIII, 1DSmkIII, 1DmkIV, 5DmkII, 7D, 40D, 50D, 60D, 450D, 500D, 550D, 1000D and 1100D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ColorDataVersion</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>2 = 2 (1DmkIII) <br>3 = 3 (40D) <br>4 = 4 (1DSmkIII) <br>5 = 5 (450D/1000D) <br>6 = 6 (50D/5DmkII) <br>7 = 7 (500D/550D/7D/1DmkIV) <br>9 = 9 (60D/1100D)</td></tr></table> </td></tr> <tr class=b> <td class=r title='63 = 0x3f'>63</td> <td>ColorCoefs</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ColorCoefs'>Canon ColorCoefs Tags</a></td></tr> <tr> <td class=r title='168 = 0xa8'>168</td> <td>ColorCalib?</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ColorCalib'>Canon ColorCalib Tags</a> <br><span class='n s'>(B, C, A, Temperature)</span></td></tr> <tr class=b> <td class=r title='231 = 0xe7'>231</td> <td>AverageBlackLevel</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='640 = 0x280'>640</td> <td>RawMeasuredRGGB</td> <td class=c>int32u[4]</td> <td><span class=s><span class=n>(raw MeasuredRGGB values, before normalization)</span></span></td></tr> <tr class=b> <td class=r title='692 = 0x2b4'>692</td> <td>PerChannelBlackLevel</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='696 = 0x2b8'>696</td> <td>NormalWhiteLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='697 = 0x2b9'>697</td> <td>SpecularWhiteLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='698 = 0x2ba'>698</td> <td>LinearityUpperMargin</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='715 = 0x2cb'>715</td> <td>PerChannelBlackLevel</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='719 = 0x2cf'>719</td> <td>NormalWhiteLevel <br>PerChannelBlackLevel</td> <td class=c>int16u<br>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='720 = 0x2d0'>720</td> <td>SpecularWhiteLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='721 = 0x2d1'>721</td> <td>LinearityUpperMargin</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='723 = 0x2d3'>723</td> <td>NormalWhiteLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='724 = 0x2d4'>724</td> <td>SpecularWhiteLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='725 = 0x2d5'>725</td> <td>LinearityUpperMargin</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorCoefs'>Canon ColorCoefs Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>WB_RGGBLevelsAsShot</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ColorTempAsShot</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>WB_RGGBLevelsAuto</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>ColorTempAuto</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>WB_RGGBLevelsMeasured</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>ColorTempMeasured</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>WB_RGGBLevelsUnknown?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>ColorTempUnknown?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>WB_RGGBLevelsDaylight</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>ColorTempDaylight</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='25 = 0x19'>25</td> <td>WB_RGGBLevelsShade</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>ColorTempShade</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>WB_RGGBLevelsCloudy</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='34 = 0x22'>34</td> <td>ColorTempCloudy</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='35 = 0x23'>35</td> <td>WB_RGGBLevelsTungsten</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='39 = 0x27'>39</td> <td>ColorTempTungsten</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>WB_RGGBLevelsFluorescent</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>ColorTempFluorescent</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='45 = 0x2d'>45</td> <td>WB_RGGBLevelsKelvin</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='49 = 0x31'>49</td> <td>ColorTempKelvin</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='50 = 0x32'>50</td> <td>WB_RGGBLevelsFlash</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='54 = 0x36'>54</td> <td>ColorTempFlash</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='55 = 0x37'>55</td> <td>WB_RGGBLevelsUnknown2?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='59 = 0x3b'>59</td> <td>ColorTempUnknown2?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='60 = 0x3c'>60</td> <td>WB_RGGBLevelsUnknown3?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='64 = 0x40'>64</td> <td>ColorTempUnknown3?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='65 = 0x41'>65</td> <td>WB_RGGBLevelsUnknown4?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='69 = 0x45'>69</td> <td>ColorTempUnknown4?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='70 = 0x46'>70</td> <td>WB_RGGBLevelsUnknown5?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='74 = 0x4a'>74</td> <td>ColorTempUnknown5?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='75 = 0x4b'>75</td> <td>WB_RGGBLevelsUnknown6?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='79 = 0x4f'>79</td> <td>ColorTempUnknown6?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='80 = 0x50'>80</td> <td>WB_RGGBLevelsUnknown7?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='84 = 0x54'>84</td> <td>ColorTempUnknown7?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='85 = 0x55'>85</td> <td>WB_RGGBLevelsUnknown8?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='89 = 0x59'>89</td> <td>ColorTempUnknown8?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='90 = 0x5a'>90</td> <td>WB_RGGBLevelsUnknown9?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='94 = 0x5e'>94</td> <td>ColorTempUnknown9?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='95 = 0x5f'>95</td> <td>WB_RGGBLevelsUnknown10?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='99 = 0x63'>99</td> <td>ColorTempUnknown10?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='100 = 0x64'>100</td> <td>WB_RGGBLevelsUnknown11?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='104 = 0x68'>104</td> <td>ColorTempUnknown11?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='105 = 0x69'>105</td> <td>WB_RGGBLevelsUnknown12?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='109 = 0x6d'>109</td> <td>ColorTempUnknown12?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='110 = 0x6e'>110</td> <td>WB_RGGBLevelsUnknown13?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='114 = 0x72'>114</td> <td>ColorTempUnknown13?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorData5'>Canon ColorData5 Tags</a></h2> <p>These tags are used by the PowerShot G10.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='71 = 0x47'>71</td> <td>ColorCoefs</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ColorCoefs'>Canon ColorCoefs Tags</a></td></tr> <tr class=b> <td class=r title='186 = 0xba'>186</td> <td>CameraColorCalibration01?</td> <td class=c>int16s[5]</td> <td><span class=s><span class=n>(B, C, A, D, Temperature)</span></span></td></tr> <tr> <td class=r title='191 = 0xbf'>191</td> <td>CameraColorCalibration02?</td> <td class=c>int16s[5]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='196 = 0xc4'>196</td> <td>CameraColorCalibration03?</td> <td class=c>int16s[5]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='201 = 0xc9'>201</td> <td>CameraColorCalibration04?</td> <td class=c>int16s[5]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='206 = 0xce'>206</td> <td>CameraColorCalibration05?</td> <td class=c>int16s[5]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='211 = 0xd3'>211</td> <td>CameraColorCalibration06?</td> <td class=c>int16s[5]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='216 = 0xd8'>216</td> <td>CameraColorCalibration07?</td> <td class=c>int16s[5]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='221 = 0xdd'>221</td> <td>CameraColorCalibration08?</td> <td class=c>int16s[5]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='226 = 0xe2'>226</td> <td>CameraColorCalibration09?</td> <td class=c>int16s[5]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='231 = 0xe7'>231</td> <td>CameraColorCalibration10?</td> <td class=c>int16s[5]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='236 = 0xec'>236</td> <td>CameraColorCalibration11?</td> <td class=c>int16s[5]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='241 = 0xf1'>241</td> <td>CameraColorCalibration12?</td> <td class=c>int16s[5]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='246 = 0xf6'>246</td> <td>CameraColorCalibration13?</td> <td class=c>int16s[5]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='251 = 0xfb'>251</td> <td>CameraColorCalibration14?</td> <td class=c>int16s[5]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='256 = 0x100'>256</td> <td>CameraColorCalibration15?</td> <td class=c>int16s[5]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='264 = 0x108'>264</td> <td>PerChannelBlackLevel</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorData6'>Canon ColorData6 Tags</a></h2> <p>These tags are used by the EOS 600D and 1200D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ColorDataVersion</td> <td class=c>int16s</td> <td><span class=s>10 = 10 (600D/1200D)</span></td></tr> <tr class=b> <td class=r title='63 = 0x3f'>63</td> <td>WB_RGGBLevelsAsShot</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='67 = 0x43'>67</td> <td>ColorTempAsShot</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='68 = 0x44'>68</td> <td>WB_RGGBLevelsAuto</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='72 = 0x48'>72</td> <td>ColorTempAuto</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='73 = 0x49'>73</td> <td>WB_RGGBLevelsMeasured</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='77 = 0x4d'>77</td> <td>ColorTempMeasured</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='78 = 0x4e'>78</td> <td>WB_RGGBLevelsUnknown?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='82 = 0x52'>82</td> <td>ColorTempUnknown?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='83 = 0x53'>83</td> <td>WB_RGGBLevelsUnknown2?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='87 = 0x57'>87</td> <td>ColorTempUnknown2?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='88 = 0x58'>88</td> <td>WB_RGGBLevelsUnknown3?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='92 = 0x5c'>92</td> <td>ColorTempUnknown3?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='93 = 0x5d'>93</td> <td>WB_RGGBLevelsUnknown4?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='97 = 0x61'>97</td> <td>ColorTempUnknown4?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='98 = 0x62'>98</td> <td>WB_RGGBLevelsUnknown5?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='102 = 0x66'>102</td> <td>ColorTempUnknown5?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='103 = 0x67'>103</td> <td>WB_RGGBLevelsDaylight</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='107 = 0x6b'>107</td> <td>ColorTempDaylight</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='108 = 0x6c'>108</td> <td>WB_RGGBLevelsShade</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='112 = 0x70'>112</td> <td>ColorTempShade</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='113 = 0x71'>113</td> <td>WB_RGGBLevelsCloudy</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='117 = 0x75'>117</td> <td>ColorTempCloudy</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='118 = 0x76'>118</td> <td>WB_RGGBLevelsTungsten</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='122 = 0x7a'>122</td> <td>ColorTempTungsten</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='123 = 0x7b'>123</td> <td>WB_RGGBLevelsFluorescent</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='127 = 0x7f'>127</td> <td>ColorTempFluorescent</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='128 = 0x80'>128</td> <td>WB_RGGBLevelsKelvin</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='132 = 0x84'>132</td> <td>ColorTempKelvin</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='133 = 0x85'>133</td> <td>WB_RGGBLevelsFlash</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='137 = 0x89'>137</td> <td>ColorTempFlash</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='138 = 0x8a'>138</td> <td>WB_RGGBLevelsUnknown6?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='142 = 0x8e'>142</td> <td>ColorTempUnknown6?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='143 = 0x8f'>143</td> <td>WB_RGGBLevelsUnknown7?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='147 = 0x93'>147</td> <td>ColorTempUnknown7?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='148 = 0x94'>148</td> <td>WB_RGGBLevelsUnknown8?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='152 = 0x98'>152</td> <td>ColorTempUnknown8?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='153 = 0x99'>153</td> <td>WB_RGGBLevelsUnknown9?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='157 = 0x9d'>157</td> <td>ColorTempUnknown9?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='158 = 0x9e'>158</td> <td>WB_RGGBLevelsUnknown10?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='162 = 0xa2'>162</td> <td>ColorTempUnknown10?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='163 = 0xa3'>163</td> <td>WB_RGGBLevelsUnknown11?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='167 = 0xa7'>167</td> <td>ColorTempUnknown11?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='168 = 0xa8'>168</td> <td>WB_RGGBLevelsUnknown12?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='172 = 0xac'>172</td> <td>ColorTempUnknown12?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='173 = 0xad'>173</td> <td>WB_RGGBLevelsUnknown13?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='177 = 0xb1'>177</td> <td>ColorTempUnknown13?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='178 = 0xb2'>178</td> <td>WB_RGGBLevelsUnknown14?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='182 = 0xb6'>182</td> <td>ColorTempUnknown14?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='183 = 0xb7'>183</td> <td>WB_RGGBLevelsUnknown15?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='187 = 0xbb'>187</td> <td>ColorTempUnknown15?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='188 = 0xbc'>188</td> <td>ColorCalib?</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ColorCalib'>Canon ColorCalib Tags</a> <br><span class='n s'>(B, C, A, Temperature)</span></td></tr> <tr> <td class=r title='251 = 0xfb'>251</td> <td>AverageBlackLevel</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='404 = 0x194'>404</td> <td>RawMeasuredRGGB</td> <td class=c>int32u[4]</td> <td><span class=s><span class=n>(raw MeasuredRGGB values, before normalization)</span></span></td></tr> <tr> <td class=r title='479 = 0x1df'>479</td> <td>PerChannelBlackLevel</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='483 = 0x1e3'>483</td> <td>NormalWhiteLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='484 = 0x1e4'>484</td> <td>SpecularWhiteLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='485 = 0x1e5'>485</td> <td>LinearityUpperMargin</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorData7'>Canon ColorData7 Tags</a></h2> <p>These tags are used by the EOS 1DX, 5DmkIII, 6D, 100D, 650D, 700D, M and 7DmkII.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ColorDataVersion</td> <td class=c>int16s</td> <td><span class=s>10 = 10 (1DX/5DmkIII/6D/70D/100D/650D/700D/M) <br>11 = 11 (7DmkII/750D/760D)</span></td></tr> <tr class=b> <td class=r title='63 = 0x3f'>63</td> <td>WB_RGGBLevelsAsShot</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='67 = 0x43'>67</td> <td>ColorTempAsShot</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='68 = 0x44'>68</td> <td>WB_RGGBLevelsAuto</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='72 = 0x48'>72</td> <td>ColorTempAuto</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='73 = 0x49'>73</td> <td>WB_RGGBLevelsMeasured</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='77 = 0x4d'>77</td> <td>ColorTempMeasured</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='78 = 0x4e'>78</td> <td>WB_RGGBLevelsUnknown?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='82 = 0x52'>82</td> <td>ColorTempUnknown?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='83 = 0x53'>83</td> <td>WB_RGGBLevelsUnknown2?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='87 = 0x57'>87</td> <td>ColorTempUnknown2?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='88 = 0x58'>88</td> <td>WB_RGGBLevelsUnknown3?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='92 = 0x5c'>92</td> <td>ColorTempUnknown3?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='93 = 0x5d'>93</td> <td>WB_RGGBLevelsUnknown4?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='97 = 0x61'>97</td> <td>ColorTempUnknown4?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='98 = 0x62'>98</td> <td>WB_RGGBLevelsUnknown5?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='102 = 0x66'>102</td> <td>ColorTempUnknown5?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='103 = 0x67'>103</td> <td>WB_RGGBLevelsUnknown6?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='107 = 0x6b'>107</td> <td>ColorTempUnknown6?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='108 = 0x6c'>108</td> <td>WB_RGGBLevelsUnknown7?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='112 = 0x70'>112</td> <td>ColorTempUnknown7?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='113 = 0x71'>113</td> <td>WB_RGGBLevelsUnknown8?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='117 = 0x75'>117</td> <td>ColorTempUnknown8?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='118 = 0x76'>118</td> <td>WB_RGGBLevelsUnknown9?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='122 = 0x7a'>122</td> <td>ColorTempUnknown9?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='123 = 0x7b'>123</td> <td>WB_RGGBLevelsUnknown10?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='127 = 0x7f'>127</td> <td>ColorTempUnknown10?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='128 = 0x80'>128</td> <td>WB_RGGBLevelsDaylight</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='132 = 0x84'>132</td> <td>ColorTempDaylight</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='133 = 0x85'>133</td> <td>WB_RGGBLevelsShade</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='137 = 0x89'>137</td> <td>ColorTempShade</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='138 = 0x8a'>138</td> <td>WB_RGGBLevelsCloudy</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='142 = 0x8e'>142</td> <td>ColorTempCloudy</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='143 = 0x8f'>143</td> <td>WB_RGGBLevelsTungsten</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='147 = 0x93'>147</td> <td>ColorTempTungsten</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='148 = 0x94'>148</td> <td>WB_RGGBLevelsFluorescent</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='152 = 0x98'>152</td> <td>ColorTempFluorescent</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='153 = 0x99'>153</td> <td>WB_RGGBLevelsKelvin</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='157 = 0x9d'>157</td> <td>ColorTempKelvin</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='158 = 0x9e'>158</td> <td>WB_RGGBLevelsFlash</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='162 = 0xa2'>162</td> <td>ColorTempFlash</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='163 = 0xa3'>163</td> <td>WB_RGGBLevelsUnknown11?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='167 = 0xa7'>167</td> <td>ColorTempUnknown11?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='168 = 0xa8'>168</td> <td>WB_RGGBLevelsUnknown12?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='172 = 0xac'>172</td> <td>ColorTempUnknown12?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='173 = 0xad'>173</td> <td>WB_RGGBLevelsUnknown13?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='177 = 0xb1'>177</td> <td>ColorTempUnknown13?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='178 = 0xb2'>178</td> <td>WB_RGGBLevelsUnknown14?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='182 = 0xb6'>182</td> <td>ColorTempUnknown14?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='183 = 0xb7'>183</td> <td>WB_RGGBLevelsUnknown15?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='187 = 0xbb'>187</td> <td>ColorTempUnknown15?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='188 = 0xbc'>188</td> <td>WB_RGGBLevelsUnknown16?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='192 = 0xc0'>192</td> <td>ColorTempUnknown16?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='193 = 0xc1'>193</td> <td>WB_RGGBLevelsUnknown17?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='197 = 0xc5'>197</td> <td>ColorTempUnknown17?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='198 = 0xc6'>198</td> <td>WB_RGGBLevelsUnknown18?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='202 = 0xca'>202</td> <td>ColorTempUnknown18?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='203 = 0xcb'>203</td> <td>WB_RGGBLevelsUnknown19?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='207 = 0xcf'>207</td> <td>ColorTempUnknown19?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='208 = 0xd0'>208</td> <td>WB_RGGBLevelsUnknown20?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='212 = 0xd4'>212</td> <td>ColorTempUnknown20?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='213 = 0xd5'>213</td> <td>ColorCalib?</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ColorCalib'>Canon ColorCalib Tags</a> <br><span class='n s'>(B, C, A, Temperature)</span></td></tr> <tr> <td class=r title='276 = 0x114'>276</td> <td>AverageBlackLevel</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='429 = 0x1ad'>429</td> <td>RawMeasuredRGGB</td> <td class=c>int32u[4]</td> <td><span class=s><span class=n>(raw MeasuredRGGB values, before normalization)</span></span></td></tr> <tr> <td class=r title='504 = 0x1f8'>504</td> <td>PerChannelBlackLevel</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='508 = 0x1fc'>508</td> <td>NormalWhiteLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='509 = 0x1fd'>509</td> <td>SpecularWhiteLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='510 = 0x1fe'>510</td> <td>LinearityUpperMargin</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='619 = 0x26b'>619</td> <td>RawMeasuredRGGB</td> <td class=c>int32u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='728 = 0x2d8'>728</td> <td>PerChannelBlackLevel</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='732 = 0x2dc'>732</td> <td>NormalWhiteLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='733 = 0x2dd'>733</td> <td>SpecularWhiteLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='734 = 0x2de'>734</td> <td>LinearityUpperMargin</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorData8'>Canon ColorData8 Tags</a></h2> <p>These tags are used by the EOS 5DS and EOS 5DS R.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ColorDataVersion</td> <td class=c>int16s</td> <td><span class=s>12 = 12 (5DS/5DSR)</span></td></tr> <tr class=b> <td class=r title='63 = 0x3f'>63</td> <td>WB_RGGBLevelsAsShot</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='67 = 0x43'>67</td> <td>ColorTempAsShot</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='68 = 0x44'>68</td> <td>WB_RGGBLevelsAuto</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='72 = 0x48'>72</td> <td>ColorTempAuto</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='73 = 0x49'>73</td> <td>WB_RGGBLevelsMeasured</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='77 = 0x4d'>77</td> <td>ColorTempMeasured</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='78 = 0x4e'>78</td> <td>WB_RGGBLevelsUnknown?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='82 = 0x52'>82</td> <td>ColorTempUnknown?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='83 = 0x53'>83</td> <td>WB_RGGBLevelsUnknown2?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='87 = 0x57'>87</td> <td>ColorTempUnknown2?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='88 = 0x58'>88</td> <td>WB_RGGBLevelsUnknown3?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='92 = 0x5c'>92</td> <td>ColorTempUnknown3?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='93 = 0x5d'>93</td> <td>WB_RGGBLevelsUnknown4?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='97 = 0x61'>97</td> <td>ColorTempUnknown4?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='98 = 0x62'>98</td> <td>WB_RGGBLevelsUnknown5?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='102 = 0x66'>102</td> <td>ColorTempUnknown5?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='103 = 0x67'>103</td> <td>WB_RGGBLevelsUnknown6?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='107 = 0x6b'>107</td> <td>ColorTempUnknown6?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='108 = 0x6c'>108</td> <td>WB_RGGBLevelsUnknown7?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='112 = 0x70'>112</td> <td>ColorTempUnknown7?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='113 = 0x71'>113</td> <td>WB_RGGBLevelsUnknown8?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='117 = 0x75'>117</td> <td>ColorTempUnknown8?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='118 = 0x76'>118</td> <td>WB_RGGBLevelsUnknown9?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='122 = 0x7a'>122</td> <td>ColorTempUnknown9?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='123 = 0x7b'>123</td> <td>WB_RGGBLevelsUnknown10?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='127 = 0x7f'>127</td> <td>ColorTempUnknown10?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='128 = 0x80'>128</td> <td>WB_RGGBLevelsUnknown11?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='132 = 0x84'>132</td> <td>ColorTempUnknown11?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='133 = 0x85'>133</td> <td>WB_RGGBLevelsDaylight</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='137 = 0x89'>137</td> <td>ColorTempDaylight</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='138 = 0x8a'>138</td> <td>WB_RGGBLevelsShade</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='142 = 0x8e'>142</td> <td>ColorTempShade</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='143 = 0x8f'>143</td> <td>WB_RGGBLevelsCloudy</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='147 = 0x93'>147</td> <td>ColorTempCloudy</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='148 = 0x94'>148</td> <td>WB_RGGBLevelsTungsten</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='152 = 0x98'>152</td> <td>ColorTempTungsten</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='153 = 0x99'>153</td> <td>WB_RGGBLevelsFluorescent</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='157 = 0x9d'>157</td> <td>ColorTempFluorescent</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='158 = 0x9e'>158</td> <td>WB_RGGBLevelsKelvin</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='162 = 0xa2'>162</td> <td>ColorTempKelvin</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='163 = 0xa3'>163</td> <td>WB_RGGBLevelsFlash</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='167 = 0xa7'>167</td> <td>ColorTempFlash</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='168 = 0xa8'>168</td> <td>WB_RGGBLevelsUnknown12?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='172 = 0xac'>172</td> <td>ColorTempUnknown12?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='173 = 0xad'>173</td> <td>WB_RGGBLevelsUnknown13?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='177 = 0xb1'>177</td> <td>ColorTempUnknown13?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='178 = 0xb2'>178</td> <td>WB_RGGBLevelsUnknown14?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='182 = 0xb6'>182</td> <td>ColorTempUnknown14?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='183 = 0xb7'>183</td> <td>WB_RGGBLevelsUnknown15?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='187 = 0xbb'>187</td> <td>ColorTempUnknown15?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='188 = 0xbc'>188</td> <td>WB_RGGBLevelsUnknown16?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='192 = 0xc0'>192</td> <td>ColorTempUnknown16?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='193 = 0xc1'>193</td> <td>WB_RGGBLevelsUnknown17?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='197 = 0xc5'>197</td> <td>ColorTempUnknown17?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='198 = 0xc6'>198</td> <td>WB_RGGBLevelsUnknown18?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='202 = 0xca'>202</td> <td>ColorTempUnknown18?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='203 = 0xcb'>203</td> <td>WB_RGGBLevelsUnknown19?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='207 = 0xcf'>207</td> <td>ColorTempUnknown19?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='208 = 0xd0'>208</td> <td>WB_RGGBLevelsUnknown20?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='212 = 0xd4'>212</td> <td>ColorTempUnknown20?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='213 = 0xd5'>213</td> <td>WB_RGGBLevelsUnknown21?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='217 = 0xd9'>217</td> <td>ColorTempUnknown21?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='218 = 0xda'>218</td> <td>WB_RGGBLevelsUnknown22?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='222 = 0xde'>222</td> <td>ColorTempUnknown22?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='223 = 0xdf'>223</td> <td>WB_RGGBLevelsUnknown23?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='227 = 0xe3'>227</td> <td>ColorTempUnknown23?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='228 = 0xe4'>228</td> <td>WB_RGGBLevelsUnknown24?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='232 = 0xe8'>232</td> <td>ColorTempUnknown24?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='233 = 0xe9'>233</td> <td>WB_RGGBLevelsUnknown25?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='237 = 0xed'>237</td> <td>ColorTempUnknown25?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='238 = 0xee'>238</td> <td>WB_RGGBLevelsUnknown26?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='242 = 0xf2'>242</td> <td>ColorTempUnknown26?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='243 = 0xf3'>243</td> <td>WB_RGGBLevelsUnknown27?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='247 = 0xf7'>247</td> <td>ColorTempUnknown27?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='248 = 0xf8'>248</td> <td>WB_RGGBLevelsUnknown28?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='252 = 0xfc'>252</td> <td>ColorTempUnknown28?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='253 = 0xfd'>253</td> <td>WB_RGGBLevelsUnknown29?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='257 = 0x101'>257</td> <td>ColorTempUnknown29?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='258 = 0x102'>258</td> <td>WB_RGGBLevelsUnknown30?</td> <td class=c>int16s[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='262 = 0x106'>262</td> <td>ColorTempUnknown30?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='263 = 0x107'>263</td> <td>ColorCalib?</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ColorCalib'>Canon ColorCalib Tags</a> <br><span class='n s'>(B, C, A, Temperature)</span></td></tr> <tr> <td class=r title='326 = 0x146'>326</td> <td>AverageBlackLevel</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='778 = 0x30a'>778</td> <td>PerChannelBlackLevel</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='782 = 0x30e'>782</td> <td>NormalWhiteLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='783 = 0x30f'>783</td> <td>SpecularWhiteLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='784 = 0x310'>784</td> <td>LinearityUpperMargin</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorDataUnknown'>Canon ColorDataUnknown Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ColorDataVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorInfo'>Canon ColorInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>Saturation</td> <td class=c>int16s</td> <td><span class=s>0 = Normal</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>ColorTone</td> <td class=c>int16s</td> <td><span class=s>0 = Normal</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>ColorSpace</td> <td class=c>int16s</td> <td><span class=s>1 = sRGB <br>2 = Adobe RGB</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='AFMicroAdj'>Canon AFMicroAdj Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>AFMicroAdjMode</td> <td class=c>int32s</td> <td><span class=s>0 = Disable <br>1 = Adjust all by the same amount <br>2 = Adjust by lens</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>AFMicroAdjValue</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='VignettingCorr'>Canon VignettingCorr Tags</a></h2> <p>This information is found in images from newer EOS models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>VignettingCorrVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>PeripheralLighting</td> <td class=c>int16s</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ChromaticAberrationCorr</td> <td class=c>int16s</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>ChromaticAberrationCorr</td> <td class=c>int16s</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>PeripheralLightingValue</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>OriginalImageWidth</td> <td class=c>int16s</td> <td><span class=s><span class=n>(full size of original image before being rotated or scaled in camera)</span></span></td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>OriginalImageHeight</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='VignettingCorrUnknown'>Canon VignettingCorrUnknown Tags</a></h2> <p>Vignetting correction from PowerShot models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>VignettingCorrVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='VignettingCorr2'>Canon VignettingCorr2 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>PeripheralLightingSetting</td> <td class=c>int32s</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>ChromaticAberrationSetting</td> <td class=c>int32s</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='LightingOpt'>Canon LightingOpt Tags</a></h2> <p>This information is new in images from the EOS 7D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>PeripheralIlluminationCorr</td> <td class=c>int32s</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>AutoLightingOptimizer</td> <td class=c>int32s</td> <td><span class=s>0 = Standard <br>1 = Low <br>2 = Strong <br>3 = Off</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>HighlightTonePriority</td> <td class=c>int32s</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>LongExposureNoiseReduction</td> <td class=c>int32s</td> <td><span class=s>0 = Off <br>1 = Auto <br>2 = On</span></td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>HighISONoiseReduction</td> <td class=c>int32s</td> <td><span class=s>0 = Standard <br>1 = Low <br>2 = Strong <br>3 = Off</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='LensInfo'>Canon LensInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>LensSerialNumber</td> <td class=c>undef[5]</td> <td><span class=s><span class=n>(apparently this is an internal serial number because it doesn&#39;t correspond to the one printed on the lens)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Ambience'>Canon Ambience Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>AmbienceSelection</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0 = Standard <br>1 = Vivid <br>2 = Warm</td><td>&nbsp;&nbsp;</td> <td>3 = Soft <br>4 = Cool <br>5 = Intense</td><td>&nbsp;&nbsp;</td> <td>6 = Brighter <br>7 = Darker <br>8 = Monochrome</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='MultiExp'>Canon MultiExp Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>MultiExposure</td> <td class=c>int32s</td> <td><span class=s>0 = Off <br>1 = On <br>2 = On (RAW)</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>MultiExposureControl</td> <td class=c>int32s</td> <td><span class=s>0 = Additive <br>1 = Average <br>2 = Bright (comparative) <br>3 = Dark (comparative)</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>MultiExposureShots</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FilterInfo'>Canon FilterInfo Tags</a></h2> <p>Information about creative filter settings.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0101 = 257'>0x0101</td> <td>GrainyBWFilter</td> <td class=c>N</td> <td><span class=s>-1 = Off</span></td></tr> <tr class=b> <td title='0x0201 = 513'>0x0201</td> <td>SoftFocusFilter</td> <td class=c>N</td> <td><span class=s>-1 = Off</span></td></tr> <tr> <td title='0x0301 = 769'>0x0301</td> <td>ToyCameraFilter</td> <td class=c>N</td> <td><span class=s>-1 = Off</span></td></tr> <tr class=b> <td title='0x0401 = 1025'>0x0401</td> <td>MiniatureFilter</td> <td class=c>N</td> <td><span class=s>-1 = Off</span></td></tr> <tr> <td title='0x0402 = 1026'>0x0402</td> <td>MiniatureFilterOrientation</td> <td class=c>N</td> <td><span class=s>0 = Horizontal <br>1 = Vertical</span></td></tr> <tr class=b> <td title='0x0403 = 1027'>0x0403</td> <td>MiniatureFilterPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0404 = 1028'>0x0404</td> <td>MiniatureFilterParameter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0501 = 1281'>0x0501</td> <td>FisheyeFilter</td> <td class=c>N</td> <td><span class=s>-1 = Off</span></td></tr> <tr> <td title='0x0601 = 1537'>0x0601</td> <td>PaintingFilter</td> <td class=c>N</td> <td><span class=s>-1 = Off</span></td></tr> <tr class=b> <td title='0x0701 = 1793'>0x0701</td> <td>WatercolorFilter</td> <td class=c>N</td> <td><span class=s>-1 = Off</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='HDRInfo'>Canon HDRInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>HDR</td> <td class=c>int32s</td> <td><span class=s>0 = Off <br>1 = Auto <br>2 = On</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>HDREffect</td> <td class=c>int32s</td> <td><span class=s>0 = Natural <br>1 = Art (standard) <br>2 = Art (vivid) <br>3 = Art (bold) <br>4 = Art (embossed)</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='AFConfig'>Canon AFConfig Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>AFConfigTool</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>AFTrackingSensitivity</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>AFAccelDecelTracking</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>AFPointSwitching</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CNOP'>Canon CNOP Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='CNTH'>Canon CNTH Tags</a></h2> <p>Canon-specific QuickTime tags found in the CNTH atom of MOV videos from some cameras such as the PowerShot S95.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'CNDA'</td> <td>ThumbnailImage</td> <td class=c>N</td> <td><span class=s><span class=n>(the full THM image, embedded metadata is extracted as the first sub-document)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='uuid'>Canon uuid Tags</a></h2> <p>Tags extracted from the uuid atom of MP4 videos from cameras such as the SX280.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'CNCV'</td> <td>CompressorVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'CNTH'</td> <td>CanonCNTH</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#CNTH'>Canon CNTH Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Skip'>Canon Skip Tags</a></h2> <p>Information found in the &quot;skip&quot; atom of Canon MOV videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'CNDB'</td> <td>Unknown_CNDB?</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraModelID'>Canon CameraModelID Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>CameraModelID</th></tr> <tr><td class=r>0x1010000</td><td>= PowerShot A30</td> </tr><tr><td class=r>0x1040000</td><td>= PowerShot S300 / Digital IXUS 300 / IXY Digital 300</td> </tr><tr><td class=r>0x1060000</td><td>= PowerShot A20</td> </tr><tr><td class=r>0x1080000</td><td>= PowerShot A10</td> </tr><tr><td class=r>0x1090000</td><td>= PowerShot S110 / Digital IXUS v / IXY Digital 200</td> </tr><tr><td class=r>0x1100000</td><td>= PowerShot G2</td> </tr><tr><td class=r>0x1110000</td><td>= PowerShot S40</td> </tr><tr><td class=r>0x1120000</td><td>= PowerShot S30</td> </tr><tr><td class=r>0x1130000</td><td>= PowerShot A40</td> </tr><tr><td class=r>0x1140000</td><td>= EOS D30</td> </tr><tr><td class=r>0x1150000</td><td>= PowerShot A100</td> </tr><tr><td class=r>0x1160000</td><td>= PowerShot S200 / Digital IXUS v2 / IXY Digital 200a</td> </tr><tr><td class=r>0x1170000</td><td>= PowerShot A200</td> </tr><tr><td class=r>0x1180000</td><td>= PowerShot S330 / Digital IXUS 330 / IXY Digital 300a</td> </tr><tr><td class=r>0x1190000</td><td>= PowerShot G3</td> </tr><tr><td class=r>0x1210000</td><td>= PowerShot S45</td> </tr><tr><td class=r>0x1230000</td><td>= PowerShot SD100 / Digital IXUS II / IXY Digital 30</td> </tr><tr><td class=r>0x1240000</td><td>= PowerShot S230 / Digital IXUS v3 / IXY Digital 320</td> </tr><tr><td class=r>0x1250000</td><td>= PowerShot A70</td> </tr><tr><td class=r>0x1260000</td><td>= PowerShot A60</td> </tr><tr><td class=r>0x1270000</td><td>= PowerShot S400 / Digital IXUS 400 / IXY Digital 400</td> </tr><tr><td class=r>0x1290000</td><td>= PowerShot G5</td> </tr><tr><td class=r>0x1300000</td><td>= PowerShot A300</td> </tr><tr><td class=r>0x1310000</td><td>= PowerShot S50</td> </tr><tr><td class=r>0x1340000</td><td>= PowerShot A80</td> </tr><tr><td class=r>0x1350000</td><td>= PowerShot SD10 / Digital IXUS i / IXY Digital L</td> </tr><tr><td class=r>0x1360000</td><td>= PowerShot S1 IS</td> </tr><tr><td class=r>0x1370000</td><td>= PowerShot Pro1</td> </tr><tr><td class=r>0x1380000</td><td>= PowerShot S70</td> </tr><tr><td class=r>0x1390000</td><td>= PowerShot S60</td> </tr><tr><td class=r>0x1400000</td><td>= PowerShot G6</td> </tr><tr><td class=r>0x1410000</td><td>= PowerShot S500 / Digital IXUS 500 / IXY Digital 500</td> </tr><tr><td class=r>0x1420000</td><td>= PowerShot A75</td> </tr><tr><td class=r>0x1440000</td><td>= PowerShot SD110 / Digital IXUS IIs / IXY Digital 30a</td> </tr><tr><td class=r>0x1450000</td><td>= PowerShot A400</td> </tr><tr><td class=r>0x1470000</td><td>= PowerShot A310</td> </tr><tr><td class=r>0x1490000</td><td>= PowerShot A85</td> </tr><tr><td class=r>0x1520000</td><td>= PowerShot S410 / Digital IXUS 430 / IXY Digital 450</td> </tr><tr><td class=r>0x1530000</td><td>= PowerShot A95</td> </tr><tr><td class=r>0x1540000</td><td>= PowerShot SD300 / Digital IXUS 40 / IXY Digital 50</td> </tr><tr><td class=r>0x1550000</td><td>= PowerShot SD200 / Digital IXUS 30 / IXY Digital 40</td> </tr><tr><td class=r>0x1560000</td><td>= PowerShot A520</td> </tr><tr><td class=r>0x1570000</td><td>= PowerShot A510</td> </tr><tr><td class=r>0x1590000</td><td>= PowerShot SD20 / Digital IXUS i5 / IXY Digital L2</td> </tr><tr><td class=r>0x1640000</td><td>= PowerShot S2 IS</td> </tr><tr><td class=r>0x1650000</td><td>= PowerShot SD430 / Digital IXUS Wireless / IXY Digital Wireless</td> </tr><tr><td class=r>0x1660000</td><td>= PowerShot SD500 / Digital IXUS 700 / IXY Digital 600</td> </tr><tr><td class=r>0x1668000</td><td>= EOS D60</td> </tr><tr><td class=r>0x1700000</td><td>= PowerShot SD30 / Digital IXUS i Zoom / IXY Digital L3</td> </tr><tr><td class=r>0x1740000</td><td>= PowerShot A430</td> </tr><tr><td class=r>0x1750000</td><td>= PowerShot A410</td> </tr><tr><td class=r>0x1760000</td><td>= PowerShot S80</td> </tr><tr><td class=r>0x1780000</td><td>= PowerShot A620</td> </tr><tr><td class=r>0x1790000</td><td>= PowerShot A610</td> </tr><tr><td class=r>0x1800000</td><td>= PowerShot SD630 / Digital IXUS 65 / IXY Digital 80</td> </tr><tr><td class=r>0x1810000</td><td>= PowerShot SD450 / Digital IXUS 55 / IXY Digital 60</td> </tr><tr><td class=r>0x1820000</td><td>= PowerShot TX1</td> </tr><tr><td class=r>0x1870000</td><td>= PowerShot SD400 / Digital IXUS 50 / IXY Digital 55</td> </tr><tr><td class=r>0x1880000</td><td>= PowerShot A420</td> </tr><tr><td class=r>0x1890000</td><td>= PowerShot SD900 / Digital IXUS 900 Ti / IXY Digital 1000</td> </tr><tr><td class=r>0x1900000</td><td>= PowerShot SD550 / Digital IXUS 750 / IXY Digital 700</td> </tr><tr><td class=r>0x1920000</td><td>= PowerShot A700</td> </tr><tr><td class=r>0x1940000</td><td>= PowerShot SD700 IS / Digital IXUS 800 IS / IXY Digital 800 IS</td> </tr><tr><td class=r>0x1950000</td><td>= PowerShot S3 IS</td> </tr><tr><td class=r>0x1960000</td><td>= PowerShot A540</td> </tr><tr><td class=r>0x1970000</td><td>= PowerShot SD600 / Digital IXUS 60 / IXY Digital 70</td> </tr><tr><td class=r>0x1980000</td><td>= PowerShot G7</td> </tr><tr><td class=r>0x1990000</td><td>= PowerShot A530</td> </tr><tr><td class=r>0x2000000</td><td>= PowerShot SD800 IS / Digital IXUS 850 IS / IXY Digital 900 IS</td> </tr><tr><td class=r>0x2010000</td><td>= PowerShot SD40 / Digital IXUS i7 / IXY Digital L4</td> </tr><tr><td class=r>0x2020000</td><td>= PowerShot A710 IS</td> </tr><tr><td class=r>0x2030000</td><td>= PowerShot A640</td> </tr><tr><td class=r>0x2040000</td><td>= PowerShot A630</td> </tr><tr><td class=r>0x2090000</td><td>= PowerShot S5 IS</td> </tr><tr><td class=r>0x2100000</td><td>= PowerShot A460</td> </tr><tr><td class=r>0x2120000</td><td>= PowerShot SD850 IS / Digital IXUS 950 IS / IXY Digital 810 IS</td> </tr><tr><td class=r>0x2130000</td><td>= PowerShot A570 IS</td> </tr><tr><td class=r>0x2140000</td><td>= PowerShot A560</td> </tr><tr><td class=r>0x2150000</td><td>= PowerShot SD750 / Digital IXUS 75 / IXY Digital 90</td> </tr><tr><td class=r>0x2160000</td><td>= PowerShot SD1000 / Digital IXUS 70 / IXY Digital 10</td> </tr><tr><td class=r>0x2180000</td><td>= PowerShot A550</td> </tr><tr><td class=r>0x2190000</td><td>= PowerShot A450</td> </tr><tr><td class=r>0x2230000</td><td>= PowerShot G9</td> </tr><tr><td class=r>0x2240000</td><td>= PowerShot A650 IS</td> </tr><tr><td class=r>0x2260000</td><td>= PowerShot A720 IS</td> </tr><tr><td class=r>0x2290000</td><td>= PowerShot SX100 IS</td> </tr><tr><td class=r>0x2300000</td><td>= PowerShot SD950 IS / Digital IXUS 960 IS / IXY Digital 2000 IS</td> </tr><tr><td class=r>0x2310000</td><td>= PowerShot SD870 IS / Digital IXUS 860 IS / IXY Digital 910 IS</td> </tr><tr><td class=r>0x2320000</td><td>= PowerShot SD890 IS / Digital IXUS 970 IS / IXY Digital 820 IS</td> </tr><tr><td class=r>0x2360000</td><td>= PowerShot SD790 IS / Digital IXUS 90 IS / IXY Digital 95 IS</td> </tr><tr><td class=r>0x2370000</td><td>= PowerShot SD770 IS / Digital IXUS 85 IS / IXY Digital 25 IS</td> </tr><tr><td class=r>0x2380000</td><td>= PowerShot A590 IS</td> </tr><tr><td class=r>0x2390000</td><td>= PowerShot A580</td> </tr><tr><td class=r>0x2420000</td><td>= PowerShot A470</td> </tr><tr><td class=r>0x2430000</td><td>= PowerShot SD1100 IS / Digital IXUS 80 IS / IXY Digital 20 IS</td> </tr><tr><td class=r>0x2460000</td><td>= PowerShot SX1 IS</td> </tr><tr><td class=r>0x2470000</td><td>= PowerShot SX10 IS</td> </tr><tr><td class=r>0x2480000</td><td>= PowerShot A1000 IS</td> </tr><tr><td class=r>0x2490000</td><td>= PowerShot G10</td> </tr><tr><td class=r>0x2510000</td><td>= PowerShot A2000 IS</td> </tr><tr><td class=r>0x2520000</td><td>= PowerShot SX110 IS</td> </tr><tr><td class=r>0x2530000</td><td>= PowerShot SD990 IS / Digital IXUS 980 IS / IXY Digital 3000 IS</td> </tr><tr><td class=r>0x2540000</td><td>= PowerShot SD880 IS / Digital IXUS 870 IS / IXY Digital 920 IS</td> </tr><tr><td class=r>0x2550000</td><td>= PowerShot E1</td> </tr><tr><td class=r>0x2560000</td><td>= PowerShot D10</td> </tr><tr><td class=r>0x2570000</td><td>= PowerShot SD960 IS / Digital IXUS 110 IS / IXY Digital 510 IS</td> </tr><tr><td class=r>0x2580000</td><td>= PowerShot A2100 IS</td> </tr><tr><td class=r>0x2590000</td><td>= PowerShot A480</td> </tr><tr><td class=r>0x2600000</td><td>= PowerShot SX200 IS</td> </tr><tr><td class=r>0x2610000</td><td>= PowerShot SD970 IS / Digital IXUS 990 IS / IXY Digital 830 IS</td> </tr><tr><td class=r>0x2620000</td><td>= PowerShot SD780 IS / Digital IXUS 100 IS / IXY Digital 210 IS</td> </tr><tr><td class=r>0x2630000</td><td>= PowerShot A1100 IS</td> </tr><tr><td class=r>0x2640000</td><td>= PowerShot SD1200 IS / Digital IXUS 95 IS / IXY Digital 110 IS</td> </tr><tr><td class=r>0x2700000</td><td>= PowerShot G11</td> </tr><tr><td class=r>0x2710000</td><td>= PowerShot SX120 IS</td> </tr><tr><td class=r>0x2720000</td><td>= PowerShot S90</td> </tr><tr><td class=r>0x2750000</td><td>= PowerShot SX20 IS</td> </tr><tr><td class=r>0x2760000</td><td>= PowerShot SD980 IS / Digital IXUS 200 IS / IXY Digital 930 IS</td> </tr><tr><td class=r>0x2770000</td><td>= PowerShot SD940 IS / Digital IXUS 120 IS / IXY Digital 220 IS</td> </tr><tr><td class=r>0x2800000</td><td>= PowerShot A495</td> </tr><tr><td class=r>0x2810000</td><td>= PowerShot A490</td> </tr><tr><td class=r>0x2820000</td><td>= PowerShot A3100 IS / A3150 IS</td> </tr><tr><td class=r>0x2830000</td><td>= PowerShot A3000 IS</td> </tr><tr><td class=r>0x2840000</td><td>= PowerShot SD1400 IS / IXUS 130 / IXY 400F</td> </tr><tr><td class=r>0x2850000</td><td>= PowerShot SD1300 IS / IXUS 105 / IXY 200F</td> </tr><tr><td class=r>0x2860000</td><td>= PowerShot SD3500 IS / IXUS 210 / IXY 10S</td> </tr><tr><td class=r>0x2870000</td><td>= PowerShot SX210 IS</td> </tr><tr><td class=r>0x2880000</td><td>= PowerShot SD4000 IS / IXUS 300 HS / IXY 30S</td> </tr><tr><td class=r>0x2890000</td><td>= PowerShot SD4500 IS / IXUS 1000 HS / IXY 50S</td> </tr><tr><td class=r>0x2920000</td><td>= PowerShot G12</td> </tr><tr><td class=r>0x2930000</td><td>= PowerShot SX30 IS</td> </tr><tr><td class=r>0x2940000</td><td>= PowerShot SX130 IS</td> </tr><tr><td class=r>0x2950000</td><td>= PowerShot S95</td> </tr><tr><td class=r>0x2980000</td><td>= PowerShot A3300 IS</td> </tr><tr><td class=r>0x2990000</td><td>= PowerShot A3200 IS</td> </tr><tr><td class=r>0x3000000</td><td>= PowerShot ELPH 500 HS / IXUS 310 HS / IXY 31S</td> </tr><tr><td class=r>0x3010000</td><td>= PowerShot Pro90 IS</td> </tr><tr><td class=r>0x3010001</td><td>= PowerShot A800</td> </tr><tr><td class=r>0x3020000</td><td>= PowerShot ELPH 100 HS / IXUS 115 HS / IXY 210F</td> </tr><tr><td class=r>0x3030000</td><td>= PowerShot SX230 HS</td> </tr><tr><td class=r>0x3040000</td><td>= PowerShot ELPH 300 HS / IXUS 220 HS / IXY 410F</td> </tr><tr><td class=r>0x3050000</td><td>= PowerShot A2200</td> </tr><tr><td class=r>0x3060000</td><td>= PowerShot A1200</td> </tr><tr><td class=r>0x3070000</td><td>= PowerShot SX220 HS</td> </tr><tr><td class=r>0x3080000</td><td>= PowerShot G1 X</td> </tr><tr><td class=r>0x3090000</td><td>= PowerShot SX150 IS</td> </tr><tr><td class=r>0x3100000</td><td>= PowerShot ELPH 510 HS / IXUS 1100 HS / IXY 51S</td> </tr><tr><td class=r>0x3110000</td><td>= PowerShot S100 (new)</td> </tr><tr><td class=r>0x3120000</td><td>= PowerShot ELPH 310 HS / IXUS 230 HS / IXY 600F</td> </tr><tr><td class=r>0x3130000</td><td>= PowerShot SX40 HS</td> </tr><tr><td class=r>0x3140000</td><td>= IXY 32S</td> </tr><tr><td class=r>0x3160000</td><td>= PowerShot A1300</td> </tr><tr><td class=r>0x3170000</td><td>= PowerShot A810</td> </tr><tr><td class=r>0x3180000</td><td>= PowerShot ELPH 320 HS / IXUS 240 HS / IXY 420F</td> </tr><tr><td class=r>0x3190000</td><td>= PowerShot ELPH 110 HS / IXUS 125 HS / IXY 220F</td> </tr><tr><td class=r>0x3200000</td><td>= PowerShot D20</td> </tr><tr><td class=r>0x3210000</td><td>= PowerShot A4000 IS</td> </tr><tr><td class=r>0x3220000</td><td>= PowerShot SX260 HS</td> </tr><tr><td class=r>0x3230000</td><td>= PowerShot SX240 HS</td> </tr><tr><td class=r>0x3240000</td><td>= PowerShot ELPH 530 HS / IXUS 510 HS / IXY 1</td> </tr><tr><td class=r>0x3250000</td><td>= PowerShot ELPH 520 HS / IXUS 500 HS / IXY 3</td> </tr><tr><td class=r>0x3260000</td><td>= PowerShot A3400 IS</td> </tr><tr><td class=r>0x3270000</td><td>= PowerShot A2400 IS</td> </tr><tr><td class=r>0x3280000</td><td>= PowerShot A2300</td> </tr><tr><td class=r>0x3330000</td><td>= PowerShot G15</td> </tr><tr><td class=r>0x3340000</td><td>= PowerShot SX50</td> </tr><tr><td class=r>0x3350000</td><td>= PowerShot SX160 IS</td> </tr><tr><td class=r>0x3360000</td><td>= PowerShot S110 (new)</td> </tr><tr><td class=r>0x3370000</td><td>= PowerShot SX500 IS</td> </tr><tr><td class=r>0x3380000</td><td>= PowerShot N</td> </tr><tr><td class=r>0x3390000</td><td>= IXUS 245 HS / IXY 430F</td> </tr><tr><td class=r>0x3400000</td><td>= PowerShot SX280 HS</td> </tr><tr><td class=r>0x3410000</td><td>= PowerShot SX270 HS</td> </tr><tr><td class=r>0x3420000</td><td>= PowerShot A3500 IS</td> </tr><tr><td class=r>0x3430000</td><td>= PowerShot A2600</td> </tr><tr><td class=r>0x3450000</td><td>= PowerShot A1400</td> </tr><tr><td class=r>0x3460000</td><td>= PowerShot ELPH 130 IS / IXUS 140 / IXY 110F</td> </tr><tr><td class=r>0x3470000</td><td>= PowerShot ELPH 115/120 IS / IXUS 132/135 / IXY 90F/100F</td> </tr><tr><td class=r>0x3490000</td><td>= PowerShot ELPH 330 HS / IXUS 255 HS / IXY 610F</td> </tr><tr><td class=r>0x3510000</td><td>= PowerShot A2500</td> </tr><tr><td class=r>0x3540000</td><td>= PowerShot G16</td> </tr><tr><td class=r>0x3550000</td><td>= PowerShot S120</td> </tr><tr><td class=r>0x3560000</td><td>= PowerShot SX170 IS</td> </tr><tr><td class=r>0x3580000</td><td>= PowerShot SX510 HS</td> </tr><tr><td class=r>0x3590000</td><td>= PowerShot S200 (new)</td> </tr><tr><td class=r>0x3600000</td><td>= IXY 620F</td> </tr><tr><td class=r>0x3610000</td><td>= PowerShot N100</td> </tr><tr><td class=r>0x3640000</td><td>= PowerShot G1 X Mark II</td> </tr><tr><td class=r>0x3650000</td><td>= PowerShot D30</td> </tr><tr><td class=r>0x3660000</td><td>= PowerShot SX700 HS</td> </tr><tr><td class=r>0x3670000</td><td>= PowerShot SX600 HS</td> </tr><tr><td class=r>0x3680000</td><td>= PowerShot ELPH 140 IS / IXUS 150 / IXY 130</td> </tr><tr><td class=r>0x3690000</td><td>= PowerShot ELPH 135 / IXUS 145 / IXY 120</td> </tr><tr><td class=r>0x3700000</td><td>= PowerShot ELPH 340 HS / IXUS 265 HS / IXY 630</td> </tr><tr><td class=r>0x3710000</td><td>= PowerShot ELPH 150 IS / IXUS 155 / IXY 140</td> </tr><tr><td class=r>0x3740000</td><td>= EOS M3</td> </tr><tr><td class=r>0x3750000</td><td>= PowerShot SX60 HS</td> </tr><tr><td class=r>0x3760000</td><td>= PowerShot SX520 HS</td> </tr><tr><td class=r>0x3770000</td><td>= PowerShot SX400 IS</td> </tr><tr><td class=r>0x3780000</td><td>= PowerShot G7 X</td> </tr><tr><td class=r>0x3790000</td><td>= PowerShot N2</td> </tr><tr><td class=r>0x3800000</td><td>= PowerShot SX530 HS</td> </tr><tr><td class=r>0x3820000</td><td>= PowerShot SX710 HS</td> </tr><tr><td class=r>0x3830000</td><td>= PowerShot SX610 HS</td> </tr><tr><td class=r>0x3840000</td><td>= EOS M10</td> </tr><tr><td class=r>0x3850000</td><td>= PowerShot G3 X</td> </tr><tr><td class=r>0x3860000</td><td>= PowerShot ELPH 165 HS / IXUS 165 / IXY 160</td> </tr><tr><td class=r>0x3870000</td><td>= PowerShot ELPH 160 / IXUS 160</td> </tr><tr><td class=r>0x3880000</td><td>= PowerShot ELPH 350 HS / IXUS 275 HS / IXY 640</td> </tr><tr><td class=r>0x3890000</td><td>= PowerShot ELPH 170 IS / IXUS 170</td> </tr><tr><td class=r>0x3910000</td><td>= PowerShot SX410 IS</td> </tr><tr><td class=r>0x3930000</td><td>= PowerShot G9 X</td> </tr><tr><td class=r>0x3950000</td><td>= PowerShot G5 X</td> </tr><tr><td class=r>0x4040000</td><td>= PowerShot G1</td> </tr><tr><td class=r>0x6040000</td><td>= PowerShot S100 / Digital IXUS / IXY Digital</td> </tr><tr><td class=r>0x4007d673</td><td>= DC19/DC21/DC22</td> </tr><tr><td class=r>0x4007d674</td><td>= XH A1</td> </tr><tr><td class=r>0x4007d675</td><td>= HV10</td> </tr><tr><td class=r>0x4007d676</td><td>= MD130/MD140/MD150/MD160/ZR850</td> </tr><tr><td class=r>0x4007d777</td><td>= DC50</td> </tr><tr><td class=r>0x4007d778</td><td>= HV20</td> </tr><tr><td class=r>0x4007d779</td><td>= DC211</td> </tr><tr><td class=r>0x4007d77a</td><td>= HG10</td> </tr><tr><td class=r>0x4007d77b</td><td>= HR10</td> </tr><tr><td class=r>0x4007d77d</td><td>= MD255/ZR950</td> </tr><tr><td class=r>0x4007d81c</td><td>= HF11</td> </tr><tr><td class=r>0x4007d878</td><td>= HV30</td> </tr><tr><td class=r>0x4007d87c</td><td>= XH A1S</td> </tr><tr><td class=r>0x4007d87e</td><td>= DC301/DC310/DC311/DC320/DC330</td> </tr><tr><td class=r>0x4007d87f</td><td>= FS100</td> </tr><tr><td class=r>0x4007d880</td><td>= HF10</td> </tr><tr><td class=r>0x4007d882</td><td>= HG20/HG21</td> </tr><tr><td class=r>0x4007d925</td><td>= HF21</td> </tr><tr><td class=r>0x4007d926</td><td>= HF S11</td> </tr><tr><td class=r>0x4007d978</td><td>= HV40</td> </tr><tr><td class=r>0x4007d987</td><td>= DC410/DC411/DC420</td> </tr><tr><td class=r>0x4007d988</td><td>= FS19/FS20/FS21/FS22/FS200</td> </tr><tr><td class=r>0x4007d989</td><td>= HF20/HF200</td> </tr><tr><td class=r>0x4007d98a</td><td>= HF S10/S100</td> </tr><tr><td class=r>0x4007da8e</td><td>= HF R10/R16/R17/R18/R100/R106</td> </tr><tr><td class=r>0x4007da8f</td><td>= HF M30/M31/M36/M300/M306</td> </tr><tr><td class=r>0x4007da90</td><td>= HF S20/S21/S200</td> </tr><tr><td class=r>0x4007da92</td><td>= FS31/FS36/FS37/FS300/FS305/FS306/FS307</td> </tr><tr><td class=r>0x4007dda9</td><td>= HF G25</td> </tr><tr><td class=r>0x4007dfb4</td><td>= XC10</td> </tr><tr><td class=r>0x80000001</td><td>= EOS-1D</td> </tr><tr><td class=r>0x80000167</td><td>= EOS-1DS</td> </tr><tr><td class=r>0x80000168</td><td>= EOS 10D</td> </tr><tr><td class=r>0x80000169</td><td>= EOS-1D Mark III</td> </tr><tr><td class=r>0x80000170</td><td>= EOS Digital Rebel / 300D / Kiss Digital</td> </tr><tr><td class=r>0x80000174</td><td>= EOS-1D Mark II</td> </tr><tr><td class=r>0x80000175</td><td>= EOS 20D</td> </tr><tr><td class=r>0x80000176</td><td>= EOS Digital Rebel XSi / 450D / Kiss X2</td> </tr><tr><td class=r>0x80000188</td><td>= EOS-1Ds Mark II</td> </tr><tr><td class=r>0x80000189</td><td>= EOS Digital Rebel XT / 350D / Kiss Digital N</td> </tr><tr><td class=r>0x80000190</td><td>= EOS 40D</td> </tr><tr><td class=r>0x80000213</td><td>= EOS 5D</td> </tr><tr><td class=r>0x80000215</td><td>= EOS-1Ds Mark III</td> </tr><tr><td class=r>0x80000218</td><td>= EOS 5D Mark II</td> </tr><tr><td class=r>0x80000219</td><td>= WFT-E1</td> </tr><tr><td class=r>0x80000232</td><td>= EOS-1D Mark II N</td> </tr><tr><td class=r>0x80000234</td><td>= EOS 30D</td> </tr><tr><td class=r>0x80000236</td><td>= EOS Digital Rebel XTi / 400D / Kiss Digital X</td> </tr><tr><td class=r>0x80000241</td><td>= WFT-E2</td> </tr><tr><td class=r>0x80000246</td><td>= WFT-E3</td> </tr><tr><td class=r>0x80000250</td><td>= EOS 7D</td> </tr><tr><td class=r>0x80000252</td><td>= EOS Rebel T1i / 500D / Kiss X3</td> </tr><tr><td class=r>0x80000254</td><td>= EOS Rebel XS / 1000D / Kiss F</td> </tr><tr><td class=r>0x80000261</td><td>= EOS 50D</td> </tr><tr><td class=r>0x80000269</td><td>= EOS-1D X</td> </tr><tr><td class=r>0x80000270</td><td>= EOS Rebel T2i / 550D / Kiss X4</td> </tr><tr><td class=r>0x80000271</td><td>= WFT-E4</td> </tr><tr><td class=r>0x80000273</td><td>= WFT-E5</td> </tr><tr><td class=r>0x80000281</td><td>= EOS-1D Mark IV</td> </tr><tr><td class=r>0x80000285</td><td>= EOS 5D Mark III</td> </tr><tr><td class=r>0x80000286</td><td>= EOS Rebel T3i / 600D / Kiss X5</td> </tr><tr><td class=r>0x80000287</td><td>= EOS 60D</td> </tr><tr><td class=r>0x80000288</td><td>= EOS Rebel T3 / 1100D / Kiss X50</td> </tr><tr><td class=r>0x80000289</td><td>= EOS 7D Mark II</td> </tr><tr><td class=r>0x80000297</td><td>= WFT-E2 II</td> </tr><tr><td class=r>0x80000298</td><td>= WFT-E4 II</td> </tr><tr><td class=r>0x80000301</td><td>= EOS Rebel T4i / 650D / Kiss X6i</td> </tr><tr><td class=r>0x80000302</td><td>= EOS 6D</td> </tr><tr><td class=r>0x80000324</td><td>= EOS-1D C</td> </tr><tr><td class=r>0x80000325</td><td>= EOS 70D</td> </tr><tr><td class=r>0x80000326</td><td>= EOS Rebel T5i / 700D / Kiss X7i</td> </tr><tr><td class=r>0x80000327</td><td>= EOS Rebel T5 / 1200D / Kiss X70</td> </tr><tr><td class=r>0x80000331</td><td>= EOS M</td> </tr><tr><td class=r>0x80000346</td><td>= EOS Rebel SL1 / 100D / Kiss X7</td> </tr><tr><td class=r>0x80000347</td><td>= EOS Rebel T6s / 760D / 8000D</td> </tr><tr><td class=r>0x80000355</td><td>= EOS M2</td> </tr><tr><td class=r>0x80000382</td><td>= EOS 5DS</td> </tr><tr><td class=r>0x80000393</td><td>= EOS Rebel T6i / 750D / Kiss X8i</td> </tr><tr><td class=r>0x80000401</td><td>= EOS 5DS R</td> </tr></table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Nov 19, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/CanonCustom.html�������������������������������������������������000644 �000765 �000024 �00000167532 12643264032 022165� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>CanonCustom Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top><a name='Functions1D'>CanonCustom Functions1D Tags</a></h2> <p>These custom functions are used by all 1D models up to but not including the Mark III.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FocusingScreen</td> <td class=c>int8u</td> <td><span class=s>0 = Ec-N, R <br>1 = Ec-A,B,C,CII,CIII,D,H,I,L</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>FinderDisplayDuringExposure</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>ShutterReleaseNoCFCard</td> <td class=c>int8u</td> <td><span class=s>0 = Yes <br>1 = No</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>ISOSpeedExpansion</td> <td class=c>int8u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ShutterAELButton</td> <td class=c>int8u</td> <td><span class=s>0 = AF/AE lock stop <br>1 = AE lock/AF <br>2 = AF/AF lock, No AE lock <br>3 = AE/AF, No AE lock</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>ManualTv</td> <td class=c>int8u</td> <td><span class=s>0 = Tv=Main/Av=Control <br>1 = Tv=Control/Av=Main <br>2 = Tv=Main/Av=Main w/o lens <br>3 = Tv=Control/Av=Main w/o lens</span></td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ExposureLevelIncrements</td> <td class=c>int8u</td> <td><span class=s>0 = 1/3-stop set, 1/3-stop comp. <br>1 = 1-stop set, 1/3-stop comp. <br>2 = 1/2-stop set, 1/2-stop comp.</span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>USMLensElectronicMF</td> <td class=c>int8u</td> <td><span class=s>0 = Turns on after one-shot AF <br>1 = Turns off after one-shot AF <br>2 = Always turned off</span></td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>LCDPanels</td> <td class=c>int8u</td> <td><span class=s>0 = Remain. shots/File no. <br>1 = ISO/Remain. shots <br>2 = ISO/File no. <br>3 = Shots in folder/Remain. shots</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>AEBSequenceAutoCancel</td> <td class=c>int8u</td> <td><span class=s>0 = 0,-,+/Enabled <br>1 = 0,-,+/Disabled <br>2 = -,0,+/Enabled <br>3 = -,0,+/Disabled</span></td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>AFPointIllumination</td> <td class=c>int8u</td> <td><span class=s>0 = On <br>1 = Off <br>2 = On without dimming <br>3 = Brighter</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>AFPointSelection</td> <td class=c>int8u</td> <td><span class=s>0 = H=AF+Main/V=AF+Command <br>1 = H=Comp+Main/V=Comp+Command <br>2 = H=Command only/V=Assist+Main <br>3 = H=FEL+Main/V=FEL+Command</span></td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>MirrorLockup</td> <td class=c>int8u</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>AFPointSpotMetering</td> <td class=c>int8u</td> <td><span class=s>0 = 45/Center AF point <br>1 = 11/Active AF point <br>2 = 11/Center AF point <br>3 = 9/Active AF point</span></td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>FillFlashAutoReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Enable <br>1 = Disable</span></td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>ShutterCurtainSync</td> <td class=c>int8u</td> <td><span class=s>0 = 1st-curtain sync <br>1 = 2nd-curtain sync</span></td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>SafetyShiftInAvOrTv</td> <td class=c>int8u</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>AFPointActivationArea</td> <td class=c>int8u</td> <td><span class=s>0 = Single AF point <br>1 = Expanded (TTL. of 7 AF points) <br>2 = Automatic expanded (max. 13)</span></td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>SwitchToRegisteredAFPoint</td> <td class=c>int8u</td> <td><span class=s>0 = Assist + AF <br>1 = Assist <br>2 = Only while pressing assist</span></td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>LensAFStopButton</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = AF stop <br>1 = AF start <br>2 = AE lock while metering <br>3 = AF point: M -&gt; Auto / Auto -&gt; Ctr. <br>4 = AF mode: ONE SHOT &lt;-&gt; AI SERVO <br>5 = IS start</td></tr></table> </td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>AIServoTrackingSensitivity</td> <td class=c>int8u</td> <td><span class=s>0 = Standard <br>1 = Slow <br>2 = Moderately slow <br>3 = Moderately fast <br>4 = Fast</span></td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>AIServoContinuousShooting</td> <td class=c>int8u</td> <td><span class=s>0 = Shooting not possible without focus <br>1 = Shooting possible without focus</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Functions5D'>CanonCustom Functions5D Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FocusingScreen</td> <td class=c>int8u</td> <td><span class=s>0 = Ee-A <br>1 = Ee-D <br>2 = Ee-S</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>SetFunctionWhenShooting</td> <td class=c>int8u</td> <td><span class=s>0 = Default (no function) <br>1 = Change quality <br>2 = Change Parameters <br>3 = Menu display <br>4 = Image replay</span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>LongExposureNoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Auto <br>2 = On</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>FlashSyncSpeedAv</td> <td class=c>int8u</td> <td><span class=s>0 = Auto <br>1 = 1/200 Fixed</span></td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>Shutter-AELock</td> <td class=c>int8u</td> <td><span class=s>0 = AF/AE lock <br>1 = AE lock/AF <br>2 = AF/AF lock, No AE lock <br>3 = AE/AF, No AE lock</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>AFAssistBeam</td> <td class=c>int8u</td> <td><span class=s>0 = Emits <br>1 = Does not emit</span></td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ExposureLevelIncrements</td> <td class=c>int8u</td> <td><span class=s>0 = 1/3 Stop <br>1 = 1/2 Stop</span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>FlashFiring</td> <td class=c>int8u</td> <td><span class=s>0 = Fires <br>1 = Does not fire</span></td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>ISOExpansion</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>AEBSequenceAutoCancel</td> <td class=c>int8u</td> <td><span class=s>0 = 0,-,+/Enabled <br>1 = 0,-,+/Disabled <br>2 = -,0,+/Enabled <br>3 = -,0,+/Disabled</span></td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>SuperimposedDisplay</td> <td class=c>int8u</td> <td><span class=s>0 = On <br>1 = Off</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>MenuButtonDisplayPosition</td> <td class=c>int8u</td> <td><span class=s>0 = Previous (top if power off) <br>1 = Previous <br>2 = Top</span></td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>MirrorLockup</td> <td class=c>int8u</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>AFPointSelectionMethod</td> <td class=c>int8u</td> <td><span class=s>0 = Normal <br>1 = Multi-controller direct <br>2 = Quick Control Dial direct</span></td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>ETTLII</td> <td class=c>int8u</td> <td><span class=s>0 = Evaluative <br>1 = Average</span></td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>ShutterCurtainSync</td> <td class=c>int8u</td> <td><span class=s>0 = 1st-curtain sync <br>1 = 2nd-curtain sync</span></td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>SafetyShiftInAvOrTv</td> <td class=c>int8u</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>AFPointActivationArea</td> <td class=c>int8u</td> <td><span class=s>0 = Standard <br>1 = Expanded</span></td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>LCDDisplayReturnToShoot</td> <td class=c>int8u</td> <td><span class=s>0 = With Shutter Button only <br>1 = Also with * etc.</span></td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>LensAFStopButton</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = AF stop <br>1 = AF start <br>2 = AE lock while metering <br>3 = AF point: M -&gt; Auto / Auto -&gt; Ctr. <br>4 = ONE SHOT &lt;-&gt; AI SERVO <br>5 = IS start</td></tr></table> </td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>AddOriginalDecisionData</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Functions10D'>CanonCustom Functions10D Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>SetButtonWhenShooting</td> <td class=c>int8u</td> <td><span class=s>0 = Normal (disabled) <br>1 = Image quality <br>2 = Change parameters <br>3 = Menu display <br>4 = Image playback</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>ShutterReleaseNoCFCard</td> <td class=c>int8u</td> <td><span class=s>0 = Yes <br>1 = No</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FlashSyncSpeedAv</td> <td class=c>int8u</td> <td><span class=s>0 = Auto <br>1 = 1/200 Fixed</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>Shutter-AELock</td> <td class=c>int8u</td> <td><span class=s>0 = AF/AE lock <br>1 = AE lock/AF <br>2 = AF/AF lock, No AE lock <br>3 = AE/AF, No AE lock</span></td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>AFAssist</td> <td class=c>int8u</td> <td><span class=s>0 = Emits/Fires <br>1 = Does not emit/Fires <br>2 = Only ext. flash emits/Fires <br>3 = Emits/Does not fire</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>ExposureLevelIncrements</td> <td class=c>int8u</td> <td><span class=s>0 = 1/2 Stop <br>1 = 1/3 Stop</span></td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>AFPointRegistration</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Center <br>1 = Bottom <br>2 = Right <br>3 = Extreme Right</td><td>&nbsp;&nbsp;</td> <td>4 = Automatic <br>5 = Extreme Left <br>6 = Left <br>7 = Top</td></tr></table> </td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>RawAndJpgRecording</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = RAW+Small/Normal <br>1 = RAW+Small/Fine <br>2 = RAW+Medium/Normal</td><td>&nbsp;&nbsp;</td> <td>3 = RAW+Medium/Fine <br>4 = RAW+Large/Normal <br>5 = RAW+Large/Fine</td></tr></table> </td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>AEBSequenceAutoCancel</td> <td class=c>int8u</td> <td><span class=s>0 = 0,-,+/Enabled <br>1 = 0,-,+/Disabled <br>2 = -,0,+/Enabled <br>3 = -,0,+/Disabled</span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>SuperimposedDisplay</td> <td class=c>int8u</td> <td><span class=s>0 = On <br>1 = Off</span></td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>MenuButtonDisplayPosition</td> <td class=c>int8u</td> <td><span class=s>0 = Previous (top if power off) <br>1 = Previous <br>2 = Top</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>MirrorLockup</td> <td class=c>int8u</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>AssistButtonFunction</td> <td class=c>int8u</td> <td><span class=s>0 = Normal <br>1 = Select Home Position <br>2 = Select HP (while pressing) <br>3 = Av+/- (AF point by QCD) <br>4 = FE lock</span></td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>FillFlashAutoReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Enable <br>1 = Disable</span></td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>ShutterCurtainSync</td> <td class=c>int8u</td> <td><span class=s>0 = 1st-curtain sync <br>1 = 2nd-curtain sync</span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>SafetyShiftInAvOrTv</td> <td class=c>int8u</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>LensAFStopButton</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = AF stop <br>1 = AF start <br>2 = AE lock while metering <br>3 = AF point: M-&gt;Auto/Auto-&gt;ctr <br>4 = One Shot &lt;-&gt; AI servo <br>5 = IS start</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='Functions20D'>CanonCustom Functions20D Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>SetFunctionWhenShooting</td> <td class=c>int8u</td> <td><span class=s>0 = Default (no function) <br>1 = Change quality <br>2 = Change Parameters <br>3 = Menu display <br>4 = Image replay</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>LongExposureNoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>FlashSyncSpeedAv</td> <td class=c>int8u</td> <td><span class=s>0 = Auto <br>1 = 1/250 Fixed</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>Shutter-AELock</td> <td class=c>int8u</td> <td><span class=s>0 = AF/AE lock <br>1 = AE lock/AF <br>2 = AF/AF lock, No AE lock <br>3 = AE/AF, No AE lock</span></td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>AFAssistBeam</td> <td class=c>int8u</td> <td><span class=s>0 = Emits <br>1 = Does not emit <br>2 = Only ext. flash emits</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>ExposureLevelIncrements</td> <td class=c>int8u</td> <td><span class=s>0 = 1/3 Stop <br>1 = 1/2 Stop</span></td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>FlashFiring</td> <td class=c>int8u</td> <td><span class=s>0 = Fires <br>1 = Does not fire</span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>ISOExpansion</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>AEBSequenceAutoCancel</td> <td class=c>int8u</td> <td><span class=s>0 = 0,-,+/Enabled <br>1 = 0,-,+/Disabled <br>2 = -,0,+/Enabled <br>3 = -,0,+/Disabled</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>SuperimposedDisplay</td> <td class=c>int8u</td> <td><span class=s>0 = On <br>1 = Off</span></td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>MenuButtonDisplayPosition</td> <td class=c>int8u</td> <td><span class=s>0 = Previous (top if power off) <br>1 = Previous <br>2 = Top</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>MirrorLockup</td> <td class=c>int8u</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>AFPointSelectionMethod</td> <td class=c>int8u</td> <td><span class=s>0 = Normal <br>1 = Multi-controller direct <br>2 = Quick Control Dial direct</span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>ETTLII</td> <td class=c>int8u</td> <td><span class=s>0 = Evaluative <br>1 = Average</span></td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>ShutterCurtainSync</td> <td class=c>int8u</td> <td><span class=s>0 = 1st-curtain sync <br>1 = 2nd-curtain sync</span></td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>SafetyShiftInAvOrTv</td> <td class=c>int8u</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>LensAFStopButton</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = AF stop <br>1 = AF start <br>2 = AE lock while metering <br>3 = AF point: M -&gt; Auto / Auto -&gt; Ctr. <br>4 = ONE SHOT &lt;-&gt; AI SERVO <br>5 = IS start</td></tr></table> </td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>AddOriginalDecisionData</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Functions30D'>CanonCustom Functions30D Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>SetFunctionWhenShooting</td> <td class=c>int8u</td> <td><span class=s>0 = Default (no function) <br>1 = Change quality <br>2 = Change Picture Style <br>3 = Menu display <br>4 = Image replay</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>LongExposureNoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Auto <br>2 = On</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FlashSyncSpeedAv</td> <td class=c>int8u</td> <td><span class=s>0 = Auto <br>1 = 1/250 Fixed</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>Shutter-AELock</td> <td class=c>int8u</td> <td><span class=s>0 = AF/AE lock <br>1 = AE lock/AF <br>2 = AF/AF lock, No AE lock <br>3 = AE/AF, No AE lock</span></td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>AFAssistBeam</td> <td class=c>int8u</td> <td><span class=s>0 = Emits <br>1 = Does not emit <br>2 = Only ext. flash emits</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>ExposureLevelIncrements</td> <td class=c>int8u</td> <td><span class=s>0 = 1/3 Stop <br>1 = 1/2 Stop</span></td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>FlashFiring</td> <td class=c>int8u</td> <td><span class=s>0 = Fires <br>1 = Does not fire</span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ISOExpansion</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>AEBSequenceAutoCancel</td> <td class=c>int8u</td> <td><span class=s>0 = 0,-,+/Enabled <br>1 = 0,-,+/Disabled <br>2 = -,0,+/Enabled <br>3 = -,0,+/Disabled</span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>SuperimposedDisplay</td> <td class=c>int8u</td> <td><span class=s>0 = On <br>1 = Off</span></td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>MenuButtonDisplayPosition</td> <td class=c>int8u</td> <td><span class=s>0 = Previous (top if power off) <br>1 = Previous <br>2 = Top</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>MirrorLockup</td> <td class=c>int8u</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>AFPointSelectionMethod</td> <td class=c>int8u</td> <td><span class=s>0 = Normal <br>1 = Multi-controller direct <br>2 = Quick Control Dial direct</span></td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>ETTLII</td> <td class=c>int8u</td> <td><span class=s>0 = Evaluative <br>1 = Average</span></td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>ShutterCurtainSync</td> <td class=c>int8u</td> <td><span class=s>0 = 1st-curtain sync <br>1 = 2nd-curtain sync</span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>SafetyShiftInAvOrTv</td> <td class=c>int8u</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>MagnifiedView</td> <td class=c>int8u</td> <td><span class=s>0 = Image playback only <br>1 = Image review and playback</span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>LensAFStopButton</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = AF stop <br>1 = AF start <br>2 = AE lock while metering <br>3 = AF point: M -&gt; Auto / Auto -&gt; Ctr. <br>4 = ONE SHOT &lt;-&gt; AI SERVO <br>5 = IS start</td></tr></table> </td></tr> <tr> <td class=r title='19 = 0x13'>19</td> <td>AddOriginalDecisionData</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Functions350D'>CanonCustom Functions350D Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>SetButtonCrossKeysFunc</td> <td class=c>int8u</td> <td><span class=s>0 = Normal <br>1 = Set: Quality <br>2 = Set: Parameter <br>3 = Set: Playback <br>4 = Cross keys: AF point select</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>LongExposureNoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>FlashSyncSpeedAv</td> <td class=c>int8u</td> <td><span class=s>0 = Auto <br>1 = 1/200 Fixed</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>Shutter-AELock</td> <td class=c>int8u</td> <td><span class=s>0 = AF/AE lock <br>1 = AE lock/AF <br>2 = AF/AF lock, No AE lock <br>3 = AE/AF, No AE lock</span></td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>AFAssistBeam</td> <td class=c>int8u</td> <td><span class=s>0 = Emits <br>1 = Does not emit <br>2 = Only ext. flash emits</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>ExposureLevelIncrements</td> <td class=c>int8u</td> <td><span class=s>0 = 1/3 Stop <br>1 = 1/2 Stop</span></td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>MirrorLockup</td> <td class=c>int8u</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>ETTLII</td> <td class=c>int8u</td> <td><span class=s>0 = Evaluative <br>1 = Average</span></td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>ShutterCurtainSync</td> <td class=c>int8u</td> <td><span class=s>0 = 1st-curtain sync <br>1 = 2nd-curtain sync</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Functions400D'>CanonCustom Functions400D Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>SetButtonCrossKeysFunc</td> <td class=c>int8u</td> <td><span class=s>0 = Set: Picture Style <br>1 = Set: Quality <br>2 = Set: Flash Exposure Comp <br>3 = Set: Playback <br>4 = Cross keys: AF point select</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>LongExposureNoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Auto <br>2 = On</span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>FlashSyncSpeedAv</td> <td class=c>int8u</td> <td><span class=s>0 = Auto <br>1 = 1/200 Fixed</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>Shutter-AELock</td> <td class=c>int8u</td> <td><span class=s>0 = AF/AE lock <br>1 = AE lock/AF <br>2 = AF/AF lock, No AE lock <br>3 = AE/AF, No AE lock</span></td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>AFAssistBeam</td> <td class=c>int8u</td> <td><span class=s>0 = Emits <br>1 = Does not emit <br>2 = Only ext. flash emits</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>ExposureLevelIncrements</td> <td class=c>int8u</td> <td><span class=s>0 = 1/3 Stop <br>1 = 1/2 Stop</span></td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>MirrorLockup</td> <td class=c>int8u</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>ETTLII</td> <td class=c>int8u</td> <td><span class=s>0 = Evaluative <br>1 = Average</span></td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>ShutterCurtainSync</td> <td class=c>int8u</td> <td><span class=s>0 = 1st-curtain sync <br>1 = 2nd-curtain sync</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>MagnifiedView</td> <td class=c>int8u</td> <td><span class=s>0 = Image playback only <br>1 = Image review and playback</span></td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>LCDDisplayAtPowerOn</td> <td class=c>int8u</td> <td><span class=s>0 = Display <br>1 = Retain power off status</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='FunctionsD30'>CanonCustom FunctionsD30 Tags</a></h2> <p>Custom functions for the EOS D30 and D60.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>LongExposureNoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>Shutter-AELock</td> <td class=c>int8u</td> <td><span class=s>0 = AF/AE lock <br>1 = AE lock/AF <br>2 = AF/AF lock <br>3 = AE+release/AE+AF</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>MirrorLockup</td> <td class=c>int8u</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExposureLevelIncrements</td> <td class=c>int8u</td> <td><span class=s>0 = 1/2 Stop <br>1 = 1/3 Stop</span></td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>AFAssist</td> <td class=c>int8u</td> <td><span class=s>0 = Emits/Fires <br>1 = Does not emit/Fires <br>2 = Only ext. flash emits/Fires <br>3 = Emits/Does not fire</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>FlashSyncSpeedAv</td> <td class=c>int8u</td> <td><span class=s>0 = Auto <br>1 = 1/200 Fixed</span></td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>AEBSequenceAutoCancel</td> <td class=c>int8u</td> <td><span class=s>0 = 0,-,+/Enabled <br>1 = 0,-,+/Disabled <br>2 = -,0,+/Enabled <br>3 = -,0,+/Disabled</span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ShutterCurtainSync</td> <td class=c>int8u</td> <td><span class=s>0 = 1st-curtain sync <br>1 = 2nd-curtain sync</span></td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>LensAFStopButton</td> <td class=c>int8u</td> <td><span class=s>0 = AF Stop <br>1 = Operate AF <br>2 = Lock AE and start timer</span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>FillFlashAutoReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Enable <br>1 = Disable</span></td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>MenuButtonReturn</td> <td class=c>int8u</td> <td><span class=s>0 = Top <br>1 = Previous (volatile) <br>2 = Previous</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>SetButtonWhenShooting</td> <td class=c>int8u</td> <td><span class=s>0 = Default (no function) <br>1 = Image quality <br>2 = Change ISO speed <br>3 = Change parameters</span></td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>SensorCleaning</td> <td class=c>int8u</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>SuperimposedDisplay</td> <td class=c>int8u</td> <td><span class=s>0 = On <br>1 = Off</span></td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>ShutterReleaseNoCFCard</td> <td class=c>int8u</td> <td><span class=s>0 = Yes <br>1 = No</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='FuncsUnknown'>CanonCustom FuncsUnknown Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='PersonalFuncs'>CanonCustom PersonalFuncs Tags</a></h2> <p>Personal function settings for the EOS-1D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>PF0CustomFuncRegistration</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>PF1DisableShootingModes</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>PF2DisableMeteringModes</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>PF3ManualExposureMetering</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>PF4ExposureTimeLimits</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>PF5ApertureLimits</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>PF6PresetShootingModes</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>PF7BracketContinuousShoot</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>PF8SetBracketShots</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>PF9ChangeBracketSequence</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>PF10RetainProgramShift</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>PF13DrivePriority</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>PF14DisableFocusSearch</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>PF15DisableAFAssistBeam</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>PF16AutoFocusPointShoot</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>PF17DisableAFPointSel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='19 = 0x13'>19</td> <td>PF18EnableAutoAFPointSel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>PF19ContinuousShootSpeed</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>PF20LimitContinousShots</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>PF21EnableQuietOperation</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>PF23SetTimerLengths</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>PF24LightLCDDuringBulb</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='26 = 0x1a'>26</td> <td>PF25DefaultClearSettings</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>PF26ShortenReleaseLag</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>PF27ReverseDialRotation</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>PF28NoQuickDialExpComp</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>PF29QuickDialSwitchOff</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='31 = 0x1f'>31</td> <td>PF30EnlargementMode</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>PF31OriginalDecisionData</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PersonalFuncValues'>CanonCustom PersonalFuncValues Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>PF1Value</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>PF2Value</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>PF3Value</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>PF4ExposureTimeMin</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>PF4ExposureTimeMax</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>PF5ApertureMin</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>PF5ApertureMax</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>PF8BracketShots</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>PF19ShootingSpeedLow</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>PF19ShootingSpeedHigh</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>PF20MaxContinousShots</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>PF23ShutterButtonTime</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>PF23FELockTime</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>PF23PostReleaseTime</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>PF25AEMode</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>PF25MeteringMode</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>PF25DriveMode</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>PF25AFMode</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='19 = 0x13'>19</td> <td>PF25AFPointSel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>PF25ImageSize</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>PF25WBMode</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>PF25Parameters</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='23 = 0x17'>23</td> <td>PF25ColorMatrix</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>PF27Value</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Functions2'>CanonCustom Functions2 Tags</a></h2> <p>Beginning with the EOS 1D Mark III, Canon finally created a set of custom function tags which are (reasonably) consistent across models. The EOS 1D Mark III has 57 custom function tags divided into four main groups: 1. Exposure (0x0101-0x010f), 2. Image (0x0201-0x0203), Flash Exposure (0x0304-0x0306) and Display (0x0407-0x0409), 3. Auto Focus (0x0501-0x050e) and Drive (0x060f-0x0611), and 4. Operation (0x0701-0x070a) and Others (0x080b-0x0810). The table below lists tags used by the EOS 1D Mark III, as well as newer tags and values added by later models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0101 = 257'>0x0101</td> <td>ExposureLevelIncrements</td> <td class=c>int32s</td> <td><span class=s><span class=n>(1DmkIII and 1DmkIV)</span> <br>0 = 1/3-stop set, 1/3-stop comp. <br>1 = 1-stop set, 1/3-stop comp. <br>2 = 1/2-stop set, 1/2-stop comp. <br><span class=n>(other models)</span> <br>0 = 1/3 Stop <br>1 = 1/2 Stop</span></td></tr> <tr class=b> <td title='0x0102 = 258'>0x0102</td> <td>ISOSpeedIncrements</td> <td class=c>int32s</td> <td><span class=s>0 = 1/3 Stop <br>1 = 1 Stop</span></td></tr> <tr> <td title='0x0103 = 259'>0x0103</td> <td>ISOSpeedRange <br>ISOExpansion</td> <td class=c>int32s[3]<br>int32s</td> <td><span class=s><span class=n>(1DmkIII and 1DmkIV)</span> <br>[Value 0] <br>0 = Disable <br>1 = Enable <br><span class=n>(other models)</span> <br>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x0104 = 260'>0x0104</td> <td>AEBAutoCancel</td> <td class=c>int32s</td> <td><span class=s>0 = On <br>1 = Off</span></td></tr> <tr> <td title='0x0105 = 261'>0x0105</td> <td>AEBSequence</td> <td class=c>int32s</td> <td><span class=s><span class=n>(value of 2 not used by 40D, 50D, 60D, 5DmkII and 7D)</span> <br>0 = 0,-,+ <br>1 = -,0,+ <br>2 = +,0,-</span></td></tr> <tr class=b> <td title='0x0106 = 262'>0x0106</td> <td>AEBShotCount <br>AEBShotCount</td> <td class=c>int32s<br>int32s[2]</td> <td><span class=s><span class=n>(one value for some models...)</span> <br>0 = 3 shots <br>1 = 2 shots <br>2 = 5 shots <br>3 = 7 shots <br><span class=n>(two values for others)</span> <br>&#39;2 1&#39; = 2 shots <br>&#39;3 0&#39; = 3 shots <br>&#39;5 2&#39; = 5 shots <br>&#39;7 3&#39; = 7 shots</span></td></tr> <tr> <td title='0x0107 = 263'>0x0107</td> <td>SpotMeterLinkToAFPoint</td> <td class=c>int32s</td> <td><span class=s>0 = Disable (use center AF point) <br>1 = Enable (use active AF point)</span></td></tr> <tr class=b> <td title='0x0108 = 264'>0x0108</td> <td>SafetyShift</td> <td class=c>int32s</td> <td><span class=s><span class=n>(value of 2 not used by 40D, 50D, 60D, 5DmkII and 7D)</span> <br>0 = Disable <br>1 = Enable (Tv/Av) <br>2 = Enable (ISO speed)</span></td></tr> <tr> <td title='0x0109 = 265'>0x0109</td> <td>UsableShootingModes</td> <td class=c>int32s[2]</td> <td><span class=s>[Value 0] <br>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td title='0x010a = 266'>0x010a</td> <td>UsableMeteringModes</td> <td class=c>int32s[2]</td> <td><span class=s>[Value 0] <br>0 = Disable <br>1 = Enable</span></td></tr> <tr> <td title='0x010b = 267'>0x010b</td> <td>ExposureModeInManual</td> <td class=c>int32s</td> <td><span class=s>0 = Specified metering mode <br>1 = Evaluative metering <br>2 = Partial metering <br>3 = Spot metering <br>4 = Center-weighted average</span></td></tr> <tr class=b> <td title='0x010c = 268'>0x010c</td> <td>ShutterSpeedRange</td> <td class=c>int32s[3]</td> <td><span class=s>[Value 0] <br>0 = Disable <br>1 = Enable</span></td></tr> <tr> <td title='0x010d = 269'>0x010d</td> <td>ApertureRange</td> <td class=c>int32s[3]</td> <td><span class=s>[Value 0] <br>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td title='0x010e = 270'>0x010e</td> <td>ApplyShootingMeteringMode</td> <td class=c>int32s[8]</td> <td><span class=s>[Value 0] <br>0 = Disable <br>1 = Enable</span></td></tr> <tr> <td title='0x010f = 271'>0x010f</td> <td>FlashSyncSpeedAv</td> <td class=c>int32s</td> <td><span class=s><span class=n>(40D and 1Ds Mark III)</span> <br>0 = Auto <br>1 = 1/250 Fixed <br><span class=n>(50D, 60D and 7D)</span> <br>0 = Auto <br>1 = 1/250-1/60 Auto <br>2 = 1/250 Fixed <br><span class=n>(450D and 1000D)</span> <br>0 = Auto <br>1 = 1/200 Fixed <br><span class=n>(1D Mark III and 1Ds Mark III)</span> <br>0 = Auto <br>1 = 1/300 Fixed <br><span class=n>(1D Mark IV)</span> <br>0 = Auto <br>1 = 1/300-1/60 Auto <br>2 = 1/300 Fixed <br><span class=n>(5D Mark II, 5D Mark III, 500D, 550D, 600D and 1100D)</span> <br>0 = Auto <br>1 = 1/200-1/60 Auto <br>2 = 1/200 Fixed</span></td></tr> <tr class=b> <td title='0x0110 = 272'>0x0110</td> <td>AEMicroadjustment</td> <td class=c>int32s[3]</td> <td><span class=s>[Value 0] <br>0 = Disable <br>1 = Enable</span></td></tr> <tr> <td title='0x0111 = 273'>0x0111</td> <td>FEMicroadjustment</td> <td class=c>int32s[3]</td> <td><span class=s>[Value 0] <br>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td title='0x0112 = 274'>0x0112</td> <td>SameExposureForNewAperture</td> <td class=c>int32s</td> <td><span class=s>0 = Disable <br>1 = ISO Speed <br>2 = Shutter Speed</span></td></tr> <tr> <td title='0x0201 = 513'>0x0201</td> <td>LongExposureNoiseReduction</td> <td class=c>int32s</td> <td><span class=s>0 = Off <br>1 = Auto <br>2 = On</span></td></tr> <tr class=b> <td title='0x0202 = 514'>0x0202</td> <td>HighISONoiseReduction</td> <td class=c>int32s</td> <td><span class=s><span class=n>(50D, 60D, 500D, 550D, 600D, 1100D, 5DmkII and 7D)</span> <br>0 = Standard <br>1 = Low <br>2 = Strong <br>3 = Off <br><span class=n>(other models)</span> <br>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x0203 = 515'>0x0203</td> <td>HighlightTonePriority</td> <td class=c>int32s</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td title='0x0204 = 516'>0x0204</td> <td>AutoLightingOptimizer</td> <td class=c>int32s</td> <td><span class=s><span class=n>(50D, 500D, 5DmkII and 1DmkIV)</span> <br>0 = Standard <br>1 = Low <br>2 = Strong <br>3 = Disable <br><span class=n>(other models)</span> <br>0 = Enable <br>1 = Disable</span></td></tr> <tr> <td title='0x0304 = 772'>0x0304</td> <td>ETTLII</td> <td class=c>int32s</td> <td><span class=s>0 = Evaluative <br>1 = Average</span></td></tr> <tr class=b> <td title='0x0305 = 773'>0x0305</td> <td>ShutterCurtainSync</td> <td class=c>int32s</td> <td><span class=s>0 = 1st-curtain sync <br>1 = 2nd-curtain sync</span></td></tr> <tr> <td title='0x0306 = 774'>0x0306</td> <td>FlashFiring</td> <td class=c>int32s</td> <td><span class=s>0 = Fires <br>1 = Does not fire</span></td></tr> <tr class=b> <td title='0x0407 = 1031'>0x0407</td> <td>ViewInfoDuringExposure</td> <td class=c>int32s</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr> <td title='0x0408 = 1032'>0x0408</td> <td>LCDIlluminationDuringBulb</td> <td class=c>int32s</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x0409 = 1033'>0x0409</td> <td>InfoButtonWhenShooting</td> <td class=c>int32s</td> <td><span class=s><span class=n>(1D Mark III)</span> <br>0 = Displays camera settings <br>1 = Displays shooting functions <br><span class=n>(1D Mark IV)</span> <br>0 = Displays shooting functions <br>1 = Displays camera settings</span></td></tr> <tr> <td title='0x040a = 1034'>0x040a</td> <td>ViewfinderWarnings</td> <td class=c>int32s</td> <td><span class=s>Bit 0 = Monochrome <br>Bit 1 = WB corrected <br>Bit 2 = One-touch image quality <br>Bit 3 = ISO expansion <br>Bit 4 = Spot metering</span></td></tr> <tr class=b> <td title='0x040b = 1035'>0x040b</td> <td>LVShootingAreaDisplay</td> <td class=c>int32s</td> <td><span class=s>0 = Masked <br>1 = Outlined</span></td></tr> <tr> <td title='0x040c = 1036'>0x040c</td> <td>LVShootingAreaDisplay</td> <td class=c>int32s</td> <td><span class=s>0 = Masked <br>1 = Outlined</span></td></tr> <tr class=b> <td title='0x0501 = 1281'>0x0501</td> <td>USMLensElectronicMF</td> <td class=c>int32s</td> <td><span class=s>0 = Enable after one-shot AF <br>1 = Disable after one-shot AF <br>2 = Disable in AF mode</span></td></tr> <tr> <td title='0x0502 = 1282'>0x0502</td> <td>AIServoTrackingSensitivity</td> <td class=c>int32s</td> <td><span class=s>-2 = Slow <br>-1 = Medium Slow <br>0 = Standard <br>1 = Medium Fast <br>2 = Fast</span></td></tr> <tr class=b> <td title='0x0503 = 1283'>0x0503</td> <td>AIServoImagePriority</td> <td class=c>int32s</td> <td><span class=s>0 = 1: AF, 2: Tracking <br>1 = 1: AF, 2: Drive speed <br>2 = 1: Release, 2: Drive speed <br>3 = 1: Release, 2: Tracking</span></td></tr> <tr> <td title='0x0504 = 1284'>0x0504</td> <td>AIServoTrackingMethod</td> <td class=c>int32s</td> <td><span class=s>0 = Main focus point priority <br>1 = Continuous AF track priority</span></td></tr> <tr class=b> <td title='0x0505 = 1285'>0x0505</td> <td>LensDriveNoAF</td> <td class=c>int32s</td> <td><span class=s>0 = Focus search on <br>1 = Focus search off</span></td></tr> <tr> <td title='0x0506 = 1286'>0x0506</td> <td>LensAFStopButton</td> <td class=c>int32s</td> <td><span class=s><span class=n>(value of 6 not used by 40D, 50D and 5DmkII)</span></span><table class=cols><tr> <td>0 = AF stop <br>1 = AF start <br>2 = AE lock <br>3 = AF point: M-&gt;Auto/Auto-&gt;ctr <br>4 = One Shot &lt;-&gt; AI servo <br>5 = IS start <br>6 = Switch to registered AF point <br>7 = Spot AF</td></tr></table> </td></tr> <tr class=b> <td title='0x0507 = 1287'>0x0507</td> <td>AFMicroadjustment</td> <td class=c>int32s[5]</td> <td><span class=s>[Value 0] <br>0 = Disable <br>1 = Adjust all by same amount <br>2 = Adjust by lens</span></td></tr> <tr> <td title='0x0508 = 1288'>0x0508</td> <td>AFPointAreaExpansion</td> <td class=c>int32s</td> <td><span class=s><span class=n>(5D Mark II)</span> <br>0 = Disable <br>1 = Enable <br><span class=n>(1Ds Mark III)</span> <br>0 = Disable <br>1 = Enable (left/right Assist AF points) <br>2 = Enable (surrounding Assist AF points) <br><span class=n>(other models)</span> <br>0 = Disable <br>1 = Left/right AF points <br>2 = Surrounding AF points <br>3 = All 45 points area</span></td></tr> <tr class=b> <td title='0x0509 = 1289'>0x0509</td> <td>SelectableAFPoint</td> <td class=c>int32s</td> <td><span class=s><span class=n>(1D Mark IV)</span> <br>0 = 45 points <br>1 = 19 points <br>2 = 11 points <br>3 = Inner 9 points <br>4 = Outer 9 points <br><span class=n>(other models)</span></span><table class=cols><tr> <td>0 = 19 points <br>1 = Inner 9 points <br>2 = Outer 9 points <br>3 = 19 Points, Multi-controller selectable <br>4 = Inner 9 Points, Multi-controller selectable <br>5 = Outer 9 Points, Multi-controller selectable</td></tr></table> </td></tr> <tr> <td title='0x050a = 1290'>0x050a</td> <td>SwitchToRegisteredAFPoint</td> <td class=c>int32s</td> <td><span class=s><span class=n>(1D Mark IV)</span> <br>0 = Disable <br>1 = Switch with multi-controller <br>2 = Only while AEL is pressed <br><span class=n>(other models)</span> <br>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td title='0x050b = 1291'>0x050b</td> <td>AFPointAutoSelection</td> <td class=c>int32s</td> <td><span class=s>0 = Control-direct:disable/Main:enable <br>1 = Control-direct:disable/Main:disable <br>2 = Control-direct:enable/Main:enable</span></td></tr> <tr> <td title='0x050c = 1292'>0x050c</td> <td>AFPointDisplayDuringFocus</td> <td class=c>int32s</td> <td><span class=s><span class=n>(1D models)</span> <br>0 = On <br>1 = Off <br>2 = On (when focus achieved) <br><span class=n>(other models)</span> <br>0 = Selected (constant) <br>1 = All (constant) <br>2 = Selected (pre-AF, focused) <br>3 = Selected (focused) <br>4 = Disable display</span></td></tr> <tr class=b> <td title='0x050d = 1293'>0x050d</td> <td>AFPointBrightness</td> <td class=c>int32s</td> <td><span class=s>0 = Normal <br>1 = Brighter</span></td></tr> <tr> <td title='0x050e = 1294'>0x050e</td> <td>AFAssistBeam</td> <td class=c>int32s</td> <td><span class=s><span class=n>(1D Mark IV and 6D)</span> <br>0 = Emits <br>1 = Does not emit <br>2 = IR AF assist beam only <br><span class=n>(other models; values 2-3 not used by 1DmkIII or 5DmkII, value 3 new for 7D)</span> <br>0 = Emits <br>1 = Does not emit <br>2 = Only ext. flash emits <br>3 = IR AF assist beam only</span></td></tr> <tr class=b> <td title='0x050f = 1295'>0x050f</td> <td>AFPointSelectionMethod</td> <td class=c>int32s</td> <td><span class=s><span class=n>(40D, 50D and 5DmkII)</span> <br>0 = Normal <br>1 = Multi-controller direct <br>2 = Quick Control Dial direct <br><span class=n>(60D)</span> <br>0 = AF point button: Activate AF Sel; Rear dial: Select AF points <br>1 = AF point button: Auto selection; Rear dial: Manual selection</span></td></tr> <tr> <td title='0x0510 = 1296'>0x0510</td> <td>VFDisplayIllumination <br>SuperimposedDisplay</td> <td class=c>int32s<br>int32s</td> <td><span class=s><span class=n>(7D)</span> <br>0 = Auto <br>1 = Enable <br>2 = Disable <br><span class=n>(other models)</span> <br>0 = On <br>1 = Off</span></td></tr> <tr class=b> <td title='0x0511 = 1297'>0x0511</td> <td>AFDuringLiveView</td> <td class=c>int32s</td> <td><span class=s><span class=n>(40D)</span> <br>0 = Disable <br>1 = Enable <br><span class=n>(450D and 1000D)</span> <br>0 = Disable <br>1 = Quick mode <br>2 = Live mode</span></td></tr> <tr> <td title='0x0512 = 1298'>0x0512</td> <td>SelectAFAreaSelectMode</td> <td class=c>int32s</td> <td><span class=s>[Value 0] <br>0 = Disable <br>1 = Enable <br>2 = Register <br>3 = Select AF-modes</span></td></tr> <tr class=b> <td title='0x0513 = 1299'>0x0513</td> <td>ManualAFPointSelectPattern</td> <td class=c>int32s</td> <td><span class=s>0 = Stops at AF area edges <br>1 = Continuous</span></td></tr> <tr> <td title='0x0514 = 1300'>0x0514</td> <td>DisplayAllAFPoints</td> <td class=c>int32s</td> <td><span class=s>0 = Enable <br>1 = Disable</span></td></tr> <tr class=b> <td title='0x0515 = 1301'>0x0515</td> <td>FocusDisplayAIServoAndMF</td> <td class=c>int32s</td> <td><span class=s>0 = Enable <br>1 = Disable</span></td></tr> <tr> <td title='0x0516 = 1302'>0x0516</td> <td>OrientationLinkedAFPoint</td> <td class=c>int32s</td> <td><span class=s>0 = Same for vertical and horizontal <br>1 = Select different AF points</span></td></tr> <tr class=b> <td title='0x0517 = 1303'>0x0517</td> <td>MultiControllerWhileMetering</td> <td class=c>int32s</td> <td><span class=s>0 = Off <br>1 = AF point selection</span></td></tr> <tr> <td title='0x0518 = 1304'>0x0518</td> <td>AccelerationTracking</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0519 = 1305'>0x0519</td> <td>AIServoFirstImagePriority</td> <td class=c>int32s</td> <td><span class=s>-1 = Release priority <br>0 = Equal priority <br>1 = Focus priority</span></td></tr> <tr> <td title='0x051a = 1306'>0x051a</td> <td>AIServoSecondImagePriority</td> <td class=c>int32s</td> <td><span class=s>-1 = Shooting speed priority <br>0 = Equal priority <br>1 = Focus priority</span></td></tr> <tr class=b> <td title='0x051b = 1307'>0x051b</td> <td>AFAreaSelectMethod</td> <td class=c>int32s</td> <td><span class=s>0 = AF area selection button <br>1 = Main dial</span></td></tr> <tr> <td title='0x051c = 1308'>0x051c</td> <td>AutoAFPointColorTracking</td> <td class=c>int32s</td> <td><span class=s>0 = On-Shot AF only <br>1 = Disable</span></td></tr> <tr class=b> <td title='0x051d = 1309'>0x051d</td> <td>VFDisplayIllumination</td> <td class=c>int32s</td> <td><span class=s>0 = Auto <br>1 = Enable <br>2 = Disable</span></td></tr> <tr> <td title='0x060f = 1551'>0x060f</td> <td>MirrorLockup</td> <td class=c>int32s</td> <td><span class=s><span class=n>(value of 2 not used by some models)</span> <br>0 = Disable <br>1 = Enable <br>2 = Enable: Down with Set</span></td></tr> <tr class=b> <td title='0x0610 = 1552'>0x0610</td> <td>ContinuousShootingSpeed</td> <td class=c>int32s[3]</td> <td><span class=s>[Value 0] <br>0 = Disable <br>1 = Enable</span></td></tr> <tr> <td title='0x0611 = 1553'>0x0611</td> <td>ContinuousShotLimit</td> <td class=c>int32s[2]</td> <td><span class=s>[Value 0] <br>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td title='0x0612 = 1554'>0x0612</td> <td>RestrictDriveModes</td> <td class=c>int32s[2]</td> <td><span class=s>[Value 0] <br>0 = Disable <br>1 = Enable</span></td></tr> <tr> <td title='0x0701 = 1793'>0x0701</td> <td>Shutter-AELock <br>AFAndMeteringButtons <br>ShutterButtonAFOnButton</td> <td class=c>int32s<br>int32s<br>int32s</td> <td><span class=s><span class=n>(500D, 550D, 600D, 1000D and 1100D)</span> <br>0 = AF/AE lock <br>1 = AE lock/AF <br>2 = AF/AF lock, No AE lock <br>3 = AE/AF, No AE lock <br><span class=n>(60D)</span> <br>0 = Metering start <br>1 = Metering + AF start <br>2 = AE lock <br>3 = AF stop <br>4 = No function <br><span class=n>(other models)</span> <br>0 = Metering + AF start <br>1 = Metering + AF start/AF stop <br>2 = Metering start/Meter + AF start <br>3 = AE lock/Metering + AF start <br>4 = Metering + AF start/disable</span></td></tr> <tr class=b> <td title='0x0702 = 1794'>0x0702</td> <td>AFOnAELockButtonSwitch</td> <td class=c>int32s</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr> <td title='0x0703 = 1795'>0x0703</td> <td>QuickControlDialInMeter</td> <td class=c>int32s</td> <td><span class=s>0 = Exposure comp/Aperture <br>1 = AF point selection <br>2 = ISO speed <br>3 = AF point selection swapped with Exposure comp <br>4 = ISO speed swapped with Exposure comp</span></td></tr> <tr class=b> <td title='0x0704 = 1796'>0x0704</td> <td>SetButtonWhenShooting</td> <td class=c>int32s</td> <td><span class=s><span class=n>(40D, 50D and 5DmkII; value of 5 is new for 50D, and 6 is new for 5DmkII)</span></span><table class=cols><tr> <td>0 = Normal (disabled) <br>1 = Image quality <br>2 = Picture style <br>3 = Menu display <br>4 = Image playback <br>5 = Quick control screen <br>6 = Record movie (Live View)</td></tr></table> <span class=s><span class=n>(60D)</span></span><table class=cols><tr> <td>0 = Normal (disabled) <br>1 = Image quality <br>2 = Picture style <br>3 = White balance <br>4 = Flash exposure compensation <br>5 = Viewfinder leveling gauge</td></tr></table> <span class=s><span class=n>(450D, 550D and 600D; value of 5 is new for 550D)</span></span><table class=cols><tr> <td>0 = Normal (disabled) <br>1 = Image quality <br>2 = Flash exposure compensation <br>3 = LCD monitor On/Off <br>4 = Menu display <br>5 = ISO speed</td></tr></table> <span class=s><span class=n>(1100D)</span></span><table class=cols><tr> <td>0 = Normal (disabled) <br>1 = Image quality <br>2 = Flash exposure compensation <br>3 = LCD monitor On/Off <br>4 = Menu display <br>5 = Depth-of-field preview</td></tr></table> <span class=s><span class=n>(1000D)</span> <br>0 = LCD monitor On/Off <br>1 = Image quality <br>2 = Flash exposure compensation <br>3 = Menu display <br>4 = Disabled <br><span class=n>(500D)</span></span><table class=cols><tr> <td>0 = Quick control screen <br>1 = Image quality <br>2 = Flash exposure compensation <br>3 = LCD monitor On/Off <br>4 = Menu display <br>5 = Disabled</td></tr></table> <span class=s><span class=n>(1DmkIII and 1DmkIV)</span></span><table class=cols><tr> <td>0 = Normal (disabled) <br>1 = White balance <br>2 = Image size <br>3 = ISO speed <br>4 = Picture style <br>5 = Record func. + media/folder <br>6 = Menu display <br>7 = Image playback</td></tr></table> </td></tr> <tr> <td title='0x0705 = 1797'>0x0705</td> <td>ManualTv</td> <td class=c>int32s</td> <td><span class=s>0 = Tv=Main/Av=Control <br>1 = Tv=Control/Av=Main</span></td></tr> <tr class=b> <td title='0x0706 = 1798'>0x0706</td> <td>DialDirectionTvAv</td> <td class=c>int32s</td> <td><span class=s>0 = Normal <br>1 = Reversed</span></td></tr> <tr> <td title='0x0707 = 1799'>0x0707</td> <td>AvSettingWithoutLens</td> <td class=c>int32s</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td title='0x0708 = 1800'>0x0708</td> <td>WBMediaImageSizeSetting</td> <td class=c>int32s</td> <td><span class=s>0 = Rear LCD panel <br>1 = LCD monitor <br>2 = Off (disable button)</span></td></tr> <tr> <td title='0x0709 = 1801'>0x0709</td> <td>LockMicrophoneButton</td> <td class=c>int32s</td> <td><span class=s>[Value 0] <br>0 = Protect (hold:record memo) <br>1 = Record memo (protect:disable) <br>2 = Play memo (hold:record memo) <br>3 = Rating (protect/memo:disable)</span></td></tr> <tr class=b> <td title='0x070a = 1802'>0x070a</td> <td>ButtonFunctionControlOff</td> <td class=c>int32s</td> <td><span class=s>0 = Normal (enable) <br>1 = Disable main, Control, Multi-control</span></td></tr> <tr> <td title='0x070b = 1803'>0x070b</td> <td>AssignFuncButton</td> <td class=c>int32s</td> <td><span class=s>0 = LCD brightness <br>1 = Image quality <br>2 = Exposure comp./AEB setting <br>3 = Image jump with main dial <br>4 = Live view function settings</span></td></tr> <tr class=b> <td title='0x070c = 1804'>0x070c</td> <td>CustomControls</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x070d = 1805'>0x070d</td> <td>StartMovieShooting</td> <td class=c>int32s</td> <td><span class=s>0 = Default (from LV) <br>1 = Quick start (FEL button)</span></td></tr> <tr class=b> <td title='0x070e = 1806'>0x070e</td> <td>FlashButtonFunction</td> <td class=c>int32s</td> <td><span class=s>0 = Raise built-in flash <br>1 = ISO speed</span></td></tr> <tr> <td title='0x070f = 1807'>0x070f</td> <td>MultiFunctionLock</td> <td class=c>int32s</td> <td><span class=s>[Value 0] <br>0 = Off <br>1 = On <br>2 = On (quick control dial) <br>3 = On (main dial and quick control dial) <br>[Value 1] <br>Bit 0 = Main dial <br>Bit 1 = Quick control dial <br>Bit 2 = Multi-controller</span></td></tr> <tr class=b> <td title='0x0710 = 1808'>0x0710</td> <td>TrashButtonFunction</td> <td class=c>int32s</td> <td><span class=s>0 = Normal (set center AF point) <br>1 = Depth-of-field preview</span></td></tr> <tr> <td title='0x0711 = 1809'>0x0711</td> <td>ShutterReleaseWithoutLens</td> <td class=c>int32s</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td title='0x080b = 2059'>0x080b</td> <td>FocusingScreen</td> <td class=c>int32s</td> <td><span class=s><span class=n>(40D, 50D and 60D)</span> <br>0 = Ef-A <br>1 = Ef-D <br>2 = Ef-S <br><span class=n>(5D Mark II)</span> <br>0 = Eg-A <br>1 = Eg-D <br>2 = Eg-S <br><span class=n>(6D)</span> <br>0 = Eg-A II <br>1 = Eg-D <br>2 = Eg-S <br><span class=n>(7D Mark II)</span> <br>0 = Eh-A <br>1 = Eh-S <br><span class=n>(1DX)</span> <br>0 = Ec-CV <br>1 = Ec-A,B,D,H,I,L <br><span class=n>(1DmkIII, 1DSmkIII and 1DmkIV)</span> <br>0 = Ec-CIV <br>1 = Ec-A,B,C,CII,CIII,D,H,I,L <br>2 = Ec-S <br>3 = Ec-N,R</span></td></tr> <tr> <td title='0x080c = 2060'>0x080c</td> <td>TimerLength</td> <td class=c>int32s[4]</td> <td><span class=s>[Value 0] <br>0 = Disable <br>1 = Enable</span></td></tr> <tr class=b> <td title='0x080d = 2061'>0x080d</td> <td>ShortReleaseTimeLag</td> <td class=c>int32s</td> <td><span class=s>0 = Disable <br>1 = Enable</span></td></tr> <tr> <td title='0x080e = 2062'>0x080e</td> <td>AddAspectRatioInfo</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0 = Off <br>1 = 6:6 <br>2 = 3:4 <br>3 = 4:5</td><td>&nbsp;&nbsp;</td> <td>4 = 6:7 <br>5 = 10:12 <br>6 = 5:7</td></tr></table> </td></tr> <tr class=b> <td title='0x080f = 2063'>0x080f</td> <td>AddOriginalDecisionData</td> <td class=c>int32s</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x0810 = 2064'>0x0810</td> <td>LiveViewExposureSimulation</td> <td class=c>int32s</td> <td><span class=s>0 = Disable (LCD auto adjust) <br>1 = Enable (simulates exposure)</span></td></tr> <tr class=b> <td title='0x0811 = 2065'>0x0811</td> <td>LCDDisplayAtPowerOn</td> <td class=c>int32s</td> <td><span class=s>0 = Display <br>1 = Retain power off status</span></td></tr> <tr> <td title='0x0812 = 2066'>0x0812</td> <td>MemoAudioQuality</td> <td class=c>int32s</td> <td><span class=s>0 = High (48 kHz) <br>1 = Low (8 kHz)</span></td></tr> <tr class=b> <td title='0x0813 = 2067'>0x0813</td> <td>DefaultEraseOption</td> <td class=c>int32s</td> <td><span class=s>0 = Cancel selected <br>1 = Erase selected</span></td></tr> <tr> <td title='0x0814 = 2068'>0x0814</td> <td>RetractLensOnPowerOff</td> <td class=c>int32s</td> <td><span class=s>0 = Enable <br>1 = Disable</span></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 6, 2016</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/CanonRaw.html����������������������������������������������������000644 �000765 �000024 �00000037775 11663037150 021451� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>CanonRaw Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>CanonRaw Tags</h2> <p> These tags apply to CRW-format Canon RAW files and information in the APP0 &quot;CIFF&quot; segment of JPEG images. When writing CanonRaw/CIFF information, the length of the information is preserved (and the new information is truncated or padded as required) unless <b>Writable</b> is <code>resize</code>. Currently, only JpgFromRaw and ThumbnailImage are allowed to change size.</p> <p>CRW images also support the addition of a CanonVRD trailer, which in turn supports XMP. This trailer is created automatically if necessary when ExifTool is used to write XMP to a CRW image. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>NullRecord</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>FreeBytes</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr> <td title='0x0032 = 50'>0x0032</td> <td>CanonColorInfo1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0805 = 2053'>0x0805</td> <td>CanonFileDescription <br>UserComment</td> <td class=c>string[32]<br>string[256]</td> <td>&nbsp;</td></tr> <tr> <td title='0x080a = 2058'>0x080a</td> <td>CanonRawMakeModel</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html#MakeModel'>CanonRaw MakeModel Tags</a></td></tr> <tr class=b> <td title='0x080b = 2059'>0x080b</td> <td>CanonFirmwareVersion</td> <td class=c>string[32]</td> <td>&nbsp;</td></tr> <tr> <td title='0x080c = 2060'>0x080c</td> <td>ComponentVersion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x080d = 2061'>0x080d</td> <td>ROMOperationMode</td> <td class=c>string[8]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0810 = 2064'>0x0810</td> <td>OwnerName</td> <td class=c>string[32]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0815 = 2069'>0x0815</td> <td>CanonImageType</td> <td class=c>string[32]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0816 = 2070'>0x0816</td> <td>OriginalFileName</td> <td class=c>string[32]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0817 = 2071'>0x0817</td> <td>ThumbnailFileName</td> <td class=c>string[32]</td> <td>&nbsp;</td></tr> <tr> <td title='0x100a = 4106'>0x100a</td> <td>TargetImageType</td> <td class=c>int16u</td> <td><span class=s>0 = Real-world Subject <br>1 = Written Document</span></td></tr> <tr class=b> <td title='0x1010 = 4112'>0x1010</td> <td>ShutterReleaseMethod</td> <td class=c>int16u</td> <td><span class=s>0 = Single Shot <br>2 = Continuous Shooting</span></td></tr> <tr> <td title='0x1011 = 4113'>0x1011</td> <td>ShutterReleaseTiming</td> <td class=c>int16u</td> <td><span class=s>0 = Priority on shutter <br>1 = Priority on focus</span></td></tr> <tr class=b> <td title='0x1016 = 4118'>0x1016</td> <td>ReleaseSetting</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x101c = 4124'>0x101c</td> <td>BaseISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1028 = 4136'>0x1028</td> <td>CanonFlashInfo?</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x1029 = 4137'>0x1029</td> <td>CanonFocalLength</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#FocalLength'>Canon FocalLength Tags</a></td></tr> <tr class=b> <td title='0x102a = 4138'>0x102a</td> <td>CanonShotInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ShotInfo'>Canon ShotInfo Tags</a></td></tr> <tr> <td title='0x102c = 4140'>0x102c</td> <td>CanonColorInfo2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x102d = 4141'>0x102d</td> <td>CanonCameraSettings</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#CameraSettings'>Canon CameraSettings Tags</a></td></tr> <tr> <td title='0x1030 = 4144'>0x1030</td> <td>WhiteSample</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html#WhiteSample'>CanonRaw WhiteSample Tags</a></td></tr> <tr class=b> <td title='0x1031 = 4145'>0x1031</td> <td>SensorInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#SensorInfo'>Canon SensorInfo Tags</a></td></tr> <tr> <td title='0x1033 = 4147'>0x1033</td> <td>CustomFunctions10D <br>CustomFunctionsD30 <br>CustomFunctionsD60 <br>CustomFunctionsUnknown</td> <td class=c>-<br>-<br>-<br>-</td> <td>--&gt; <a href='CanonCustom.html#Functions10D'>CanonCustom Functions10D Tags</a> <br>--&gt; <a href='CanonCustom.html#FunctionsD30'>CanonCustom FunctionsD30 Tags</a> <br>--&gt; <a href='CanonCustom.html#FunctionsD30'>CanonCustom FunctionsD30 Tags</a> <br>--&gt; <a href='CanonCustom.html#FuncsUnknown'>CanonCustom FuncsUnknown Tags</a></td></tr> <tr class=b> <td title='0x1038 = 4152'>0x1038</td> <td>CanonAFInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#AFInfo'>Canon AFInfo Tags</a></td></tr> <tr> <td title='0x1093 = 4243'>0x1093</td> <td>CanonFileInfo</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#FileInfo'>Canon FileInfo Tags</a></td></tr> <tr class=b> <td title='0x10a9 = 4265'>0x10a9</td> <td>ColorBalance</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#ColorBalance'>Canon ColorBalance Tags</a></td></tr> <tr> <td title='0x10ae = 4270'>0x10ae</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10b4 = 4276'>0x10b4</td> <td>ColorSpace</td> <td class=c>int16u</td> <td><span class=s>1 = sRGB <br>2 = Adobe RGB <br>65535 = Uncalibrated</span></td></tr> <tr> <td title='0x10b5 = 4277'>0x10b5</td> <td>RawJpgInfo</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html#RawJpgInfo'>CanonRaw RawJpgInfo Tags</a></td></tr> <tr class=b> <td title='0x1803 = 6147'>0x1803</td> <td>ImageFormat</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html#ImageFormat'>CanonRaw ImageFormat Tags</a></td></tr> <tr> <td title='0x1804 = 6148'>0x1804</td> <td>RecordID</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1806 = 6150'>0x1806</td> <td>SelfTimerTime</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1807 = 6151'>0x1807</td> <td>TargetDistanceSetting</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x180b = 6155'>0x180b</td> <td>SerialNumber <br>UnknownNumber?</td> <td class=c>int32u<br>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x180e = 6158'>0x180e</td> <td>TimeStamp</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html#TimeStamp'>CanonRaw TimeStamp Tags</a></td></tr> <tr class=b> <td title='0x1810 = 6160'>0x1810</td> <td>ImageInfo</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html#ImageInfo'>CanonRaw ImageInfo Tags</a></td></tr> <tr> <td title='0x1813 = 6163'>0x1813</td> <td>FlashInfo</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html#FlashInfo'>CanonRaw FlashInfo Tags</a></td></tr> <tr class=b> <td title='0x1814 = 6164'>0x1814</td> <td>MeasuredEV</td> <td class=c>float</td> <td><span class=s><span class=n>(this is the Canon name for what could better be called MeasuredLV, and should be close to the calculated LightValue for a proper exposure with most models)</span></span></td></tr> <tr> <td title='0x1817 = 6167'>0x1817</td> <td>FileNumber</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1818 = 6168'>0x1818</td> <td>ExposureInfo</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html#ExposureInfo'>CanonRaw ExposureInfo Tags</a></td></tr> <tr> <td title='0x1834 = 6196'>0x1834</td> <td>CanonModelID</td> <td class=c>int32u</td> <td>--&gt; <a href='Canon.html#CanonModelID'>Canon CanonModelID Values</a> <br><span class='n s'>(this is the complete list of model ID numbers, but note that many of these models do not produce CRW images)</span></td></tr> <tr class=b> <td title='0x1835 = 6197'>0x1835</td> <td>DecoderTable</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html#DecoderTable'>CanonRaw DecoderTable Tags</a></td></tr> <tr> <td title='0x183b = 6203'>0x183b</td> <td>SerialNumberFormat</td> <td class=c>int32u</td> <td><span class=s>0x90000000 = Format 1 <br>0xa0000000 = Format 2</span></td></tr> <tr class=b> <td title='0x2005 = 8197'>0x2005</td> <td>RawData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2007 = 8199'>0x2007</td> <td>JpgFromRaw</td> <td class=c>resize</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2008 = 8200'>0x2008</td> <td>ThumbnailImage</td> <td class=c>resize</td> <td>&nbsp;</td></tr> <tr> <td title='0x2804 = 10244'>0x2804</td> <td>ImageDescription</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html'>CanonRaw Tags</a></td></tr> <tr class=b> <td title='0x2807 = 10247'>0x2807</td> <td>CameraObject</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html'>CanonRaw Tags</a></td></tr> <tr> <td title='0x3002 = 12290'>0x3002</td> <td>ShootingRecord</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html'>CanonRaw Tags</a></td></tr> <tr class=b> <td title='0x3003 = 12291'>0x3003</td> <td>MeasuredInfo</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html'>CanonRaw Tags</a></td></tr> <tr> <td title='0x3004 = 12292'>0x3004</td> <td>CameraSpecification</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html'>CanonRaw Tags</a></td></tr> <tr class=b> <td title='0x300a = 12298'>0x300a</td> <td>ImageProps</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html'>CanonRaw Tags</a></td></tr> <tr> <td title='0x300b = 12299'>0x300b</td> <td>ExifInformation</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html'>CanonRaw Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='MakeModel'>CanonRaw MakeModel Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>string[6]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>Model</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='WhiteSample'>CanonRaw WhiteSample Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>WhiteSampleWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>WhiteSampleHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>WhiteSampleLeftBorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>WhiteSampleTopBorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>WhiteSampleBits</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='RawJpgInfo'>CanonRaw RawJpgInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>RawJpgQuality</td> <td class=c>int16u</td> <td><span class=s>1 = Economy <br>2 = Normal <br>3 = Fine <br>5 = Superfine</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>RawJpgSize</td> <td class=c>int16u</td> <td><span class=s>0 = Large <br>1 = Medium <br>2 = Small</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>RawJpgWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>RawJpgHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ImageFormat'>CanonRaw ImageFormat Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FileFormat</td> <td class=c>int32u</td> <td><span class=s>0x10000 = JPEG (lossy) <br>0x10002 = JPEG (non-quantization) <br>0x10003 = JPEG (lossy/non-quantization toggled) <br>0x20001 = CRW</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>TargetCompressionRatio</td> <td class=c>float</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='TimeStamp'>CanonRaw TimeStamp Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>DateTimeOriginal</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>TimeZoneCode</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>TimeZoneInfo</td> <td class=c>int32u</td> <td><span class=s><span class=n>(set to 0x80000000 if TimeZoneCode is valid)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ImageInfo'>CanonRaw ImageInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>PixelAspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>Rotation</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ComponentBitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>ColorBitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ColorBW</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FlashInfo'>CanonRaw FlashInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FlashGuideNumber</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>FlashThreshold</td> <td class=c>float</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ExposureInfo'>CanonRaw ExposureInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ExposureCompensation</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>ShutterSpeedValue</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>ApertureValue</td> <td class=c>float</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='DecoderTable'>CanonRaw DecoderTable Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>DecoderTableNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>CompressedDataOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>CompressedDataLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Sep 16, 2010</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���Image-ExifTool-10.10/html/TagNames/CanonVRD.html����������������������������������������������������000644 �000765 �000024 �00000146757 12645452104 021355� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>CanonVRD Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>CanonVRD Tags</h2> <p>Canon Digital Photo Professional writes VRD (Recipe Data) information as a trailer record to JPEG, TIFF, CRW and CR2 images, or as stand-alone VRD or DR4 files. The tags listed below represent information found in these records. The complete VRD/DR4 data record may be accessed as a block using the Extra &#39;CanonVRD&#39; or &#39;CanonDR4&#39; tag, but this tag is not extracted or copied unless specified explicitly.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0xffff00f4 = 4294902004'>0xffff00f4</td> <td>EditData</td> <td class=c>-</td> <td>--&gt; <a href='CanonVRD.html#Edit'>CanonVRD Edit Tags</a></td></tr> <tr class=b> <td title='0xffff00f5 = 4294902005'>0xffff00f5</td> <td>IHLData</td> <td class=c>-</td> <td>--&gt; <a href='CanonVRD.html#IHL'>CanonVRD IHL Tags</a></td></tr> <tr> <td title='0xffff00f6 = 4294902006'>0xffff00f6</td> <td>XMP</td> <td class=c title=' ! = Unsafe'>undef!</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> <tr class=b> <td title='0xffff00f7 = 4294902007'>0xffff00f7</td> <td>Edit4Data</td> <td class=c>-</td> <td>--&gt; <a href='CanonVRD.html#Edit4'>CanonVRD Edit4 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Edit'>CanonVRD Edit Tags</a></h2> <p>Canon VRD edit information.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>VRD1</td> <td class=c>-</td> <td>--&gt; <a href='CanonVRD.html#Ver1'>CanonVRD Ver1 Tags</a></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>VRDStampTool</td> <td class=c>-</td> <td>--&gt; <a href='CanonVRD.html#StampTool'>CanonVRD StampTool Tags</a></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>VRD2</td> <td class=c>-</td> <td>--&gt; <a href='CanonVRD.html#Ver2'>CanonVRD Ver2 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Ver1'>CanonVRD Ver1 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>VRDVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>WBAdjRGGBLevels</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>WhiteBalanceAdj</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Daylight <br>2 = Cloudy <br>3 = Tungsten <br>4 = Fluorescent</td><td>&nbsp;&nbsp;</td> <td>5 = Flash <br>8 = Shade <br>9 = Kelvin <br>30 = Manual (Click) <br>31 = Shot Settings</td></tr></table> </td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>WBAdjColorTemp</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='36 = 0x24'>36</td> <td>WBFineTuneActive</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>WBFineTuneSaturation</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>WBFineTuneTone</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='46 = 0x2e'>46</td> <td>RawColorAdj</td> <td class=c>int16u</td> <td><span class=s>0 = Shot Settings <br>1 = Faithful <br>2 = Custom</span></td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>RawCustomSaturation</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>RawCustomTone</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='56 = 0x38'>56</td> <td>RawBrightnessAdj</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='60 = 0x3c'>60</td> <td>ToneCurveProperty</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Shot Settings <br>1 = Linear <br>2 = Custom 1 <br>3 = Custom 2</td><td>&nbsp;&nbsp;</td> <td>4 = Custom 3 <br>5 = Custom 4 <br>6 = Custom 5</td></tr></table> </td></tr> <tr> <td class=r title='122 = 0x7a'>122</td> <td>DynamicRangeMin</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='124 = 0x7c'>124</td> <td>DynamicRangeMax</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='272 = 0x110'>272</td> <td>ToneCurveActive</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td class=r title='275 = 0x113'>275</td> <td>ToneCurveMode</td> <td class=c>int8u</td> <td><span class=s>0 = RGB <br>1 = Luminance</span></td></tr> <tr> <td class=r title='276 = 0x114'>276</td> <td>BrightnessAdj</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='277 = 0x115'>277</td> <td>ContrastAdj</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='278 = 0x116'>278</td> <td>SaturationAdj</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='286 = 0x11e'>286</td> <td>ColorToneAdj</td> <td class=c>int32s</td> <td><span class=s><span class=n>(in degrees, so -1 is the same as 359)</span></span></td></tr> <tr> <td class=r title='294 = 0x126'>294</td> <td>LuminanceCurvePoints</td> <td class=c>int16u[21]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='336 = 0x150'>336</td> <td>LuminanceCurveLimits</td> <td class=c>int16u[4]</td> <td><span class=s><span class=n>(4 numbers: input and output highlight and shadow points)</span></span></td></tr> <tr> <td class=r title='345 = 0x159'>345</td> <td>ToneCurveInterpolation</td> <td class=c>int8u</td> <td><span class=s>0 = Curve <br>1 = Straight</span></td></tr> <tr class=b> <td class=r title='352 = 0x160'>352</td> <td>RedCurvePoints</td> <td class=c>int16u[21]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='394 = 0x18a'>394</td> <td>RedCurveLimits</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='410 = 0x19a'>410</td> <td>GreenCurvePoints</td> <td class=c>int16u[21]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='452 = 0x1c4'>452</td> <td>GreenCurveLimits</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='468 = 0x1d4'>468</td> <td>BlueCurvePoints</td> <td class=c>int16u[21]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='510 = 0x1fe'>510</td> <td>BlueCurveLimits</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='526 = 0x20e'>526</td> <td>RGBCurvePoints</td> <td class=c>int16u[21]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='568 = 0x238'>568</td> <td>RGBCurveLimits</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='580 = 0x244'>580</td> <td>CropActive</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr> <td class=r title='582 = 0x246'>582</td> <td>CropLeft</td> <td class=c>int16u</td> <td><span class=s><span class=n>(crop coordinates in original unrotated image)</span></span></td></tr> <tr class=b> <td class=r title='584 = 0x248'>584</td> <td>CropTop</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='586 = 0x24a'>586</td> <td>CropWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='588 = 0x24c'>588</td> <td>CropHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='602 = 0x25a'>602</td> <td>SharpnessAdj</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='608 = 0x260'>608</td> <td>CropAspectRatio</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Free <br>1 = 3:2 <br>2 = 2:3 <br>3 = 4:3 <br>4 = 3:4 <br>5 = A-size Landscape <br>6 = A-size Portrait <br>7 = Letter-size Landscape <br>8 = Letter-size Portrait <br>9 = 4:5 <br>10 = 5:4 <br>11 = 1:1 <br>12 = Circle <br>65535 = Custom</td></tr></table> </td></tr> <tr> <td class=r title='610 = 0x262'>610</td> <td>ConstrainedCropWidth</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='614 = 0x266'>614</td> <td>ConstrainedCropHeight</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr> <td class=r title='618 = 0x26a'>618</td> <td>CheckMark</td> <td class=c>int16u</td> <td><span class=s>0 = Clear <br>1 = 1 <br>2 = 2 <br>3 = 3</span></td></tr> <tr class=b> <td class=r title='622 = 0x26e'>622</td> <td>Rotation</td> <td class=c>int16u</td> <td><span class=s>0 = 0 <br>1 = 90 <br>2 = 180 <br>3 = 270</span></td></tr> <tr> <td class=r title='624 = 0x270'>624</td> <td>WorkColorSpace</td> <td class=c>int16u</td> <td><span class=s>0 = sRGB <br>1 = Adobe RGB <br>2 = Wide Gamut RGB <br>3 = Apple RGB <br>4 = ColorMatch RGB</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='StampTool'>CanonVRD StampTool Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>StampToolCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Ver2'>CanonVRD Ver2 Tags</a></h2> <p>Tags added in DPP version 2.0 and later.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>PictureStyle</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = Standard <br>1 = Portrait <br>2 = Landscape <br>3 = Neutral</td><td>&nbsp;&nbsp;</td> <td>4 = Faithful <br>5 = Monochrome <br>6 = Unknown? <br>7 = Custom</td></tr></table> </td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>IsCustomPictureStyle</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>StandardRawColorTone</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>StandardRawSaturation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>StandardRawContrast</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>StandardRawLinear</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>StandardRawSharpness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>StandardRawHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='19 = 0x13'>19</td> <td>StandardRawShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>StandardOutputHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>StandardOutputShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>PortraitRawColorTone</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='23 = 0x17'>23</td> <td>PortraitRawSaturation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>PortraitRawContrast</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='25 = 0x19'>25</td> <td>PortraitRawLinear</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>PortraitRawSharpness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='27 = 0x1b'>27</td> <td>PortraitRawHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28</td> <td>PortraitRawShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='29 = 0x1d'>29</td> <td>PortraitOutputHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>PortraitOutputShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='31 = 0x1f'>31</td> <td>LandscapeRawColorTone</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>LandscapeRawSaturation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='33 = 0x21'>33</td> <td>LandscapeRawContrast</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='34 = 0x22'>34</td> <td>LandscapeRawLinear</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr> <td class=r title='35 = 0x23'>35</td> <td>LandscapeRawSharpness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='36 = 0x24'>36</td> <td>LandscapeRawHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='37 = 0x25'>37</td> <td>LandscapeRawShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>LandscapeOutputHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='39 = 0x27'>39</td> <td>LandscapeOutputShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>NeutralRawColorTone</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='41 = 0x29'>41</td> <td>NeutralRawSaturation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>NeutralRawContrast</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='43 = 0x2b'>43</td> <td>NeutralRawLinear</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>NeutralRawSharpness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='45 = 0x2d'>45</td> <td>NeutralRawHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='46 = 0x2e'>46</td> <td>NeutralRawShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='47 = 0x2f'>47</td> <td>NeutralOutputHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>NeutralOutputShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='49 = 0x31'>49</td> <td>FaithfulRawColorTone</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>FaithfulRawSaturation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='51 = 0x33'>51</td> <td>FaithfulRawContrast</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>FaithfulRawLinear</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr> <td class=r title='53 = 0x35'>53</td> <td>FaithfulRawSharpness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='54 = 0x36'>54</td> <td>FaithfulRawHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='55 = 0x37'>55</td> <td>FaithfulRawShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='56 = 0x38'>56</td> <td>FaithfulOutputHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='57 = 0x39'>57</td> <td>FaithfulOutputShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='58 = 0x3a'>58</td> <td>MonochromeFilterEffect</td> <td class=c>int16s</td> <td><span class=s>-2 = None <br>-1 = Yellow <br>0 = Orange <br>1 = Red <br>2 = Green</span></td></tr> <tr> <td class=r title='59 = 0x3b'>59</td> <td>MonochromeToningEffect</td> <td class=c>int16s</td> <td><span class=s>-2 = None <br>-1 = Sepia <br>0 = Blue <br>1 = Purple <br>2 = Green</span></td></tr> <tr class=b> <td class=r title='60 = 0x3c'>60</td> <td>MonochromeContrast</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='61 = 0x3d'>61</td> <td>MonochromeLinear</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td class=r title='62 = 0x3e'>62</td> <td>MonochromeSharpness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='63 = 0x3f'>63</td> <td>MonochromeRawHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='64 = 0x40'>64</td> <td>MonochromeRawShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='65 = 0x41'>65</td> <td>MonochromeOutputHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='66 = 0x42'>66</td> <td>MonochromeOutputShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='69 = 0x45'>69</td> <td>UnknownContrast?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='70 = 0x46'>70</td> <td>UnknownLinear?</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr> <td class=r title='71 = 0x47'>71</td> <td>UnknownSharpness?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='72 = 0x48'>72</td> <td>UnknownRawHighlightPoint?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='73 = 0x49'>73</td> <td>UnknownRawShadowPoint?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='74 = 0x4a'>74</td> <td>UnknownOutputHighlightPoint?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='75 = 0x4b'>75</td> <td>UnknownOutputShadowPoint?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='76 = 0x4c'>76</td> <td>CustomColorTone</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='77 = 0x4d'>77</td> <td>CustomSaturation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='78 = 0x4e'>78</td> <td>CustomContrast</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='79 = 0x4f'>79</td> <td>CustomLinear</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td class=r title='80 = 0x50'>80</td> <td>CustomSharpness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='81 = 0x51'>81</td> <td>CustomRawHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='82 = 0x52'>82</td> <td>CustomRawShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='83 = 0x53'>83</td> <td>CustomOutputHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='84 = 0x54'>84</td> <td>CustomOutputShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='88 = 0x58'>88</td> <td>CustomPictureStyleData</td> <td class=c>N</td> <td><span class=s><span class=n>(variable-length data structure)</span></span></td></tr> <tr class=b> <td class=r title='94 = 0x5e'>94</td> <td>ChrominanceNoiseReduction</td> <td class=c>int16s</td> <td><span class=s><span class=n>(VRDVersion prior to 3.3.0)</span> <br>0 = Off <br>58 = Low <br>100 = High <br><span class=n>(VRDVersion 3.3.0 or later)</span></span><table class=cols><tr> <td>0x0 = 0 <br>0x10 = 1 <br>0x21 = 2 <br>0x32 = 3 <br>0x42 = 4 <br>0x53 = 5</td><td>&nbsp;&nbsp;</td> <td>0x64 = 6 <br>0x74 = 7 <br>0x85 = 8 <br>0x96 = 9 <br>0xa6 = 10 <br>0xa7 = 11</td><td>&nbsp;&nbsp;</td> <td>0xa8 = 12 <br>0xa9 = 13 <br>0xaa = 14 <br>0xab = 15 <br>0xac = 16 <br>0xad = 17</td><td>&nbsp;&nbsp;</td> <td>0xae = 18 <br>0xaf = 19 <br>0xb0 = 20</td></tr></table> </td></tr> <tr> <td class=r title='95 = 0x5f'>95</td> <td>LuminanceNoiseReduction</td> <td class=c>int16s</td> <td><span class=s><span class=n>(VRDVersion prior to 3.3.0)</span> <br>0 = Off <br>65 = Low <br>100 = High <br><span class=n>(VRDVersion 3.3.0 or later)</span></span><table class=cols><tr> <td>0x0 = 0 <br>0x41 = 1 <br>0x64 = 2 <br>0x6e = 3 <br>0x78 = 4 <br>0x82 = 5</td><td>&nbsp;&nbsp;</td> <td>0x8c = 6 <br>0x96 = 7 <br>0xa0 = 8 <br>0xaa = 9 <br>0xb4 = 10 <br>0xb5 = 11</td><td>&nbsp;&nbsp;</td> <td>0xb6 = 12 <br>0xb7 = 13 <br>0xb8 = 14 <br>0xb9 = 15 <br>0xba = 16 <br>0xbb = 17</td><td>&nbsp;&nbsp;</td> <td>0xbc = 18 <br>0xbd = 19 <br>0xbe = 20</td></tr></table> </td></tr> <tr class=b> <td class=r title='96 = 0x60'>96</td> <td>ChrominanceNR_TIFF_JPEG</td> <td class=c>int16s</td> <td><span class=s><span class=n>(VRDVersion prior to 3.3.0)</span> <br>0 = Off <br>33 = Low <br>100 = High <br><span class=n>(VRDVersion 3.3.0 or later)</span></span><table class=cols><tr> <td>0x0 = 0 <br>0x10 = 1 <br>0x21 = 2 <br>0x32 = 3 <br>0x42 = 4 <br>0x53 = 5</td><td>&nbsp;&nbsp;</td> <td>0x64 = 6 <br>0x74 = 7 <br>0x85 = 8 <br>0x96 = 9 <br>0xa6 = 10 <br>0xa7 = 11</td><td>&nbsp;&nbsp;</td> <td>0xa8 = 12 <br>0xa9 = 13 <br>0xaa = 14 <br>0xab = 15 <br>0xac = 16 <br>0xad = 17</td><td>&nbsp;&nbsp;</td> <td>0xae = 18 <br>0xaf = 19 <br>0xb0 = 20</td></tr></table> </td></tr> <tr> <td class=r title='98 = 0x62'>98</td> <td>ChromaticAberrationOn</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td class=r title='99 = 0x63'>99</td> <td>DistortionCorrectionOn</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr> <td class=r title='100 = 0x64'>100</td> <td>PeripheralIlluminationOn</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td class=r title='101 = 0x65'>101</td> <td>ColorBlur</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr> <td class=r title='102 = 0x66'>102</td> <td>ChromaticAberration</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='103 = 0x67'>103</td> <td>DistortionCorrection</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='104 = 0x68'>104</td> <td>PeripheralIllumination</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='105 = 0x69'>105</td> <td>AberrationCorrectionDistance</td> <td class=c>int16s</td> <td><span class=s><span class=n>(100% = infinity)</span></span></td></tr> <tr> <td class=r title='106 = 0x6a'>106</td> <td>ChromaticAberrationRed</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='107 = 0x6b'>107</td> <td>ChromaticAberrationBlue</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='109 = 0x6d'>109</td> <td>LuminanceNR_TIFF_JPEG</td> <td class=c>int16s</td> <td><span class=s><span class=n>(val = raw / 10)</span></span></td></tr> <tr class=b> <td class=r title='110 = 0x6e'>110</td> <td>AutoLightingOptimizerOn</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr> <td class=r title='111 = 0x6f'>111</td> <td>AutoLightingOptimizer</td> <td class=c>int16s</td> <td><span class=s>100 = Low <br>200 = Standard <br>300 = Strong <br>32767 = n/a</span></td></tr> <tr class=b> <td class=r title='117 = 0x75'>117</td> <td>StandardRawHighlight</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='118 = 0x76'>118</td> <td>PortraitRawHighlight</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='119 = 0x77'>119</td> <td>LandscapeRawHighlight</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='120 = 0x78'>120</td> <td>NeutralRawHighlight</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='121 = 0x79'>121</td> <td>FaithfulRawHighlight</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='122 = 0x7a'>122</td> <td>MonochromeRawHighlight</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='123 = 0x7b'>123</td> <td>UnknownRawHighlight?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='124 = 0x7c'>124</td> <td>CustomRawHighlight</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='126 = 0x7e'>126</td> <td>StandardRawShadow</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='127 = 0x7f'>127</td> <td>PortraitRawShadow</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='128 = 0x80'>128</td> <td>LandscapeRawShadow</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='129 = 0x81'>129</td> <td>NeutralRawShadow</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='130 = 0x82'>130</td> <td>FaithfulRawShadow</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='131 = 0x83'>131</td> <td>MonochromeRawShadow</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='132 = 0x84'>132</td> <td>UnknownRawShadow?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='133 = 0x85'>133</td> <td>CustomRawShadow</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='139 = 0x8b'>139</td> <td>AngleAdj</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='142 = 0x8e'>142</td> <td>CheckMark2</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Clear <br>1 = 1 <br>2 = 2</td><td>&nbsp;&nbsp;</td> <td>3 = 3 <br>4 = 4 <br>5 = 5</td></tr></table> </td></tr> <tr class=b> <td class=r title='144 = 0x90'>144</td> <td>UnsharpMask</td> <td class=c>int16s</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='146 = 0x92'>146</td> <td>StandardUnsharpMaskStrength</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='148 = 0x94'>148</td> <td>StandardUnsharpMaskFineness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='150 = 0x96'>150</td> <td>StandardUnsharpMaskThreshold</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='152 = 0x98'>152</td> <td>PortraitUnsharpMaskStrength</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='154 = 0x9a'>154</td> <td>PortraitUnsharpMaskFineness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='156 = 0x9c'>156</td> <td>PortraitUnsharpMaskThreshold</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='158 = 0x9e'>158</td> <td>LandscapeUnsharpMaskStrength</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='160 = 0xa0'>160</td> <td>LandscapeUnsharpMaskFineness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='162 = 0xa2'>162</td> <td>LandscapeUnsharpMaskThreshold</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='164 = 0xa4'>164</td> <td>NeutraUnsharpMaskStrength</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='166 = 0xa6'>166</td> <td>NeutralUnsharpMaskFineness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='168 = 0xa8'>168</td> <td>NeutralUnsharpMaskThreshold</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='170 = 0xaa'>170</td> <td>FaithfulUnsharpMaskStrength</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='172 = 0xac'>172</td> <td>FaithfulUnsharpMaskFineness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='174 = 0xae'>174</td> <td>FaithfulUnsharpMaskThreshold</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='176 = 0xb0'>176</td> <td>MonochromeUnsharpMaskStrength</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='178 = 0xb2'>178</td> <td>MonochromeUnsharpMaskFineness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='180 = 0xb4'>180</td> <td>MonochromeUnsharpMaskThreshold</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='182 = 0xb6'>182</td> <td>CustomUnsharpMaskStrength</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='184 = 0xb8'>184</td> <td>CustomUnsharpMaskFineness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='186 = 0xba'>186</td> <td>CustomUnsharpMaskThreshold</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='188 = 0xbc'>188</td> <td>CustomDefaultUnsharpStrength</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='190 = 0xbe'>190</td> <td>CustomDefaultUnsharpFineness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='192 = 0xc0'>192</td> <td>CustomDefaultUnsharpThreshold</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='214 = 0xd6'>214</td> <td>CropCircleActive</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td class=r title='215 = 0xd7'>215</td> <td>CropCircleX</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='216 = 0xd8'>216</td> <td>CropCircleY</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='217 = 0xd9'>217</td> <td>CropCircleRadius</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='220 = 0xdc'>220</td> <td>DLOOn</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td class=r title='221 = 0xdd'>221</td> <td>DLOSetting</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='222 = 0xde'>222</td> <td>DLOShootingDistance</td> <td class=c>int16s</td> <td><span class=s><span class=n>(100% = infinity)</span></span></td></tr> <tr class=b> <td class=r title='223 = 0xdf'>223</td> <td>DLODataLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='224 = 0xe0'>224</td> <td>DLOInfo</td> <td class=c>-</td> <td>--&gt; <a href='CanonVRD.html#DLOInfo'>CanonVRD DLOInfo Tags</a></td></tr> <tr class=b> <td class=r title='225 = 0xe1'>225</td> <td>CameraRawColorTone</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='226 = 0xe2'>226</td> <td>CameraRawSaturation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='227 = 0xe3'>227</td> <td>CameraRawContrast</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='228 = 0xe4'>228</td> <td>CameraRawLinear</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td class=r title='229 = 0xe5'>229</td> <td>CameraRawSharpness</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='230 = 0xe6'>230</td> <td>CameraRawHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='231 = 0xe7'>231</td> <td>CameraRawShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='232 = 0xe8'>232</td> <td>CameraRawOutputHighlightPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='233 = 0xe9'>233</td> <td>CameraRawOutputShadowPoint</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='DLOInfo'>CanonVRD DLOInfo Tags</a></h2> <p>Tags added when DLO (Digital Lens Optimizer) is on.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>DLOSettingApplied</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>DLOVersion</td> <td class=c>string[10]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>DLOData</td> <td class=c>N</td> <td><span class=s><span class=n>(variable-length Digital Lens Optimizer data, stored in JPEG-like format)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='IHL'>CanonVRD IHL Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>IHL_EXIF <br>IHL_EXIF?</td> <td class=c>-<br>N</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a> <br><span class=n>(extracted as a block if the Unknown option is used, or processed as the first sub-document with the ExtractEmbedded option)</span></td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>ThumbnailImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>PreviewImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>RawCodecVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0006 = 6'>0x0006</td> <td>CRCDevelParams?</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Edit4'>CanonVRD Edit4 Tags</a></h2> <p>Canon DPP version 4 edit information.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>DR4</td> <td class=c>-</td> <td>--&gt; <a href='CanonVRD.html#DR4'>CanonVRD DR4 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='DR4'>CanonVRD DR4 Tags</a></h2> <p>Tags written by Canon DPP version 4 in CanonVRD trailers and DR4 files. Each tag has three associated flag words which are stored with the directory entry, some of which are extracted as a separate tag, indicated in the table below by a decimal appended to the tag ID (.0, .1 or .2).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'header'</td> <td>DR4Header</td> <td class=c>-</td> <td>--&gt; <a href='CanonVRD.html#DR4Header'>CanonVRD DR4Header Tags</a></td></tr> <tr class=b> <td title='0x10002 = 65538'>0x10002</td> <td>Rotation</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x10003 = 65539'>0x10003</td> <td>AngleAdj</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10021 = 65569'>0x10021</td> <td>CustomPictureStyle</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x10101 = 65793'>0x10101</td> <td>CheckMark</td> <td class=c>Y</td> <td><table class=cols><tr> <td>0 = Clear <br>1 = 1 <br>2 = 2</td><td>&nbsp;&nbsp;</td> <td>3 = 3 <br>4 = 4 <br>5 = 5</td></tr></table> </td></tr> <tr class=b> <td title='0x10200 = 66048'>0x10200</td> <td>WorkColorSpace</td> <td class=c>Y</td> <td><span class=s>1 = sRGB <br>2 = Adobe RGB <br>3 = Wide Gamut RGB <br>4 = Apple RGB <br>5 = ColorMatch RGB</span></td></tr> <tr> <td title='0x20001 = 131073'>0x20001</td> <td>RawBrightnessAdj</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20101 = 131329'>0x20101</td> <td>WhiteBalanceAdj</td> <td class=c>Y</td> <td><table class=cols><tr> <td>-1 = Manual (Click) <br>0 = Auto <br>1 = Daylight <br>2 = Cloudy <br>3 = Tungsten</td><td>&nbsp;&nbsp;</td> <td>4 = Fluorescent <br>5 = Flash <br>8 = Shade <br>9 = Kelvin <br>255 = Shot Settings</td></tr></table> </td></tr> <tr> <td title='0x20102 = 131330'>0x20102</td> <td>WBAdjColorTemp</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20105 = 131333'>0x20105</td> <td>WBAdjMagentaGreen</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x20106 = 131334'>0x20106</td> <td>WBAdjBlueAmber</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20125 = 131365'>0x20125</td> <td>WBAdjRGGBLevels</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x20200 = 131584'>0x20200</td> <td>GammaLinear</td> <td class=c>Y</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td title='0x20301 = 131841'>0x20301</td> <td>PictureStyle</td> <td class=c>Y</td> <td><table class=cols><tr> <td>0x81 = Standard <br>0x82 = Portrait <br>0x83 = Landscape <br>0x84 = Neutral <br>0x85 = Faithful</td><td>&nbsp;&nbsp;</td> <td>0x86 = Monochrome <br>0x87 = Auto <br>0x88 = Fine Detail <br>0xf0 = Shot Settings <br>0xff = Custom</td></tr></table> </td></tr> <tr> <td title='0x20303 = 131843'>0x20303</td> <td>ContrastAdj</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20304 = 131844'>0x20304</td> <td>ColorToneAdj</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x20305 = 131845'>0x20305</td> <td>ColorSaturationAdj</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20306 = 131846'>0x20306</td> <td>MonochromeToningEffect</td> <td class=c>Y</td> <td><span class=s>0 = None <br>1 = Sepia <br>2 = Blue <br>3 = Purple <br>4 = Green</span></td></tr> <tr> <td title='0x20307 = 131847'>0x20307</td> <td>MonochromeFilterEffect</td> <td class=c>Y</td> <td><span class=s>0 = None <br>1 = Yellow <br>2 = Orange <br>3 = Red <br>4 = Green</span></td></tr> <tr class=b> <td title='0x20308 = 131848'>0x20308</td> <td>UnsharpMaskStrength</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x20309 = 131849'>0x20309</td> <td>UnsharpMaskFineness</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2030a = 131850'>0x2030a</td> <td>UnsharpMaskThreshold</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x2030b = 131851'>0x2030b</td> <td>ShadowAdj</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2030c = 131852'>0x2030c</td> <td>HighlightAdj</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x20310 = 131856'>0x20310</td> <td>SharpnessAdj</td> <td class=c>Y</td> <td><span class=s>0 = Sharpness <br>1 = Unsharp Mask</span></td></tr> <tr class=b> <td title='0x20310.0 = 131856.0'>0x20310.0</td> <td>SharpnessAdjOn</td> <td class=c>Y</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr> <td title='0x20311 = 131857'>0x20311</td> <td>SharpnessStrength</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20400 = 132096'>0x20400</td> <td>ToneCurve</td> <td class=c>-</td> <td>--&gt; <a href='CanonVRD.html#ToneCurve'>CanonVRD ToneCurve Tags</a></td></tr> <tr> <td title='0x20400.1 = 132096.1'>0x20400.1</td> <td>ToneCurveOriginal</td> <td class=c>Y</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td title='0x20410 = 132112'>0x20410</td> <td>ToneCurveBrightness</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x20411 = 132113'>0x20411</td> <td>ToneCurveContrast</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20500 = 132352'>0x20500</td> <td>AutoLightingOptimizer</td> <td class=c>Y</td> <td><span class=s>0 = Low <br>1 = Standard <br>2 = Strong</span></td></tr> <tr> <td title='0x20500.0 = 132352.0'>0x20500.0</td> <td>AutoLightingOptimizerOn</td> <td class=c>Y</td> <td><span class=s><span class=n>(ignored if gamma is linear)</span></span><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td title='0x20600 = 132608'>0x20600</td> <td>LuminanceNoiseReduction</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x20601 = 132609'>0x20601</td> <td>ChrominanceNoiseReduction</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20701 = 132865'>0x20701</td> <td>ShootingDistance</td> <td class=c>Y</td> <td><span class=s><span class=n>(100% = infinity)</span></span></td></tr> <tr> <td title='0x20702 = 132866'>0x20702</td> <td>PeripheralIllumination</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20702.0 = 132866.0'>0x20702.0</td> <td>PeripheralIlluminationOn</td> <td class=c>Y</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr> <td title='0x20703 = 132867'>0x20703</td> <td>ChromaticAberration</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20703.0 = 132867.0'>0x20703.0</td> <td>ChromaticAberrationOn</td> <td class=c>Y</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr> <td title='0x20704 = 132868'>0x20704</td> <td>ColorBlurOn</td> <td class=c>Y</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td title='0x20705 = 132869'>0x20705</td> <td>DistortionCorrection</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x20705.0 = 132869.0'>0x20705.0</td> <td>DistortionCorrectionOn</td> <td class=c>Y</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td title='0x20706 = 132870'>0x20706</td> <td>DLOSetting</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x20706.0 = 132870.0'>0x20706.0</td> <td>DLOOn</td> <td class=c>Y</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td title='0x20707 = 132871'>0x20707</td> <td>ChromaticAberrationRed</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x20708 = 132872'>0x20708</td> <td>ChromaticAberrationBlue</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20709 = 132873'>0x20709</td> <td>DistortionEffect</td> <td class=c>Y</td> <td><span class=s>0 = Shot Settings <br>1 = Emphasize Linearity <br>2 = Emphasize Distance <br>3 = Emphasize Periphery <br>4 = Emphasize Center</span></td></tr> <tr> <td title='0x20900 = 133376'>0x20900</td> <td>ColorHue</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20901 = 133377'>0x20901</td> <td>SaturationAdj</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x20910 = 133392'>0x20910</td> <td>RedHSL</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20911 = 133393'>0x20911</td> <td>OrangeHSL</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x20912 = 133394'>0x20912</td> <td>GreenHSL</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20913 = 133395'>0x20913</td> <td>AquaHSL</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x20914 = 133396'>0x20914</td> <td>BlueHSL</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20915 = 133397'>0x20915</td> <td>BlueHSL</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x20916 = 133398'>0x20916</td> <td>PurpleHSL</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20917 = 133399'>0x20917</td> <td>MagentaHSL</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x20a00 = 133632'>0x20a00</td> <td>GammaInfo</td> <td class=c>-</td> <td>--&gt; <a href='CanonVRD.html#GammaInfo'>CanonVRD GammaInfo Tags</a></td></tr> <tr class=b> <td title='0x30101 = 196865'>0x30101</td> <td>CropAspectRatio</td> <td class=c>Y</td> <td><table class=cols><tr> <td>0 = Free <br>1 = Custom <br>2 = 1:1 <br>3 = 3:2</td><td>&nbsp;&nbsp;</td> <td>4 = 2:3 <br>5 = 4:3 <br>6 = 3:4 <br>7 = 5:4</td><td>&nbsp;&nbsp;</td> <td>8 = 4:5 <br>9 = 16:9 <br>10 = 9:16</td></tr></table> </td></tr> <tr> <td title='0x30102 = 196866'>0x30102</td> <td>CropAspectRatioCustom</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xf0100 = 983296'>0xf0100</td> <td>CropInfo</td> <td class=c>-</td> <td>--&gt; <a href='CanonVRD.html#CropInfo'>CanonVRD CropInfo Tags</a></td></tr> <tr> <td title='0xf0500 = 984320'>0xf0500</td> <td>CustomPictureStyleData</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xf0510 = 984336'>0xf0510</td> <td>StampInfo</td> <td class=c>-</td> <td>--&gt; <a href='CanonVRD.html#StampInfo'>CanonVRD StampInfo Tags</a></td></tr> <tr> <td title='0xf0511 = 984337'>0xf0511</td> <td>DustInfo</td> <td class=c>-</td> <td>--&gt; <a href='CanonVRD.html#DustInfo'>CanonVRD DustInfo Tags</a></td></tr> <tr class=b> <td title='0xf0512 = 984338'>0xf0512</td> <td>LensFocalLength</td> <td class=c>Y</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='DR4Header'>CanonVRD DR4Header Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>DR4CameraModel</td> <td class=c>int32u</td> <td>--&gt; <a href='Canon.html#CameraModelID'>Canon CameraModelID Values</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ToneCurve'>CanonVRD ToneCurve Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ToneCurveColorSpace</td> <td class=c>int32u</td> <td><span class=s>0 = RGB <br>1 = Luminance</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>ToneCurveShape</td> <td class=c>int32u</td> <td><span class=s>0 = Curve <br>1 = Straight</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>ToneCurveInputRange</td> <td class=c>int32u[2]</td> <td><span class=s><span class=n>(255 max)</span></span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>ToneCurveOutputRange</td> <td class=c>int32u[2]</td> <td><span class=s><span class=n>(255 max)</span></span></td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>RGBCurvePoints</td> <td class=c>int32u[21]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>ToneCurveX</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>ToneCurveY</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='45 = 0x2d'>45</td> <td>RedCurvePoints</td> <td class=c>int32u[21]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='83 = 0x53'>83</td> <td>GreenCurvePoints</td> <td class=c>int32u[21]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='121 = 0x79'>121</td> <td>BlueCurvePoints</td> <td class=c>int32u[21]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='GammaInfo'>CanonVRD GammaInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index8</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>GammaContrast</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>GammaColorTone</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>GammaSaturation</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>GammaUnsharpMaskStrength</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>GammaUnsharpMaskFineness</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>GammaUnsharpMaskThreshold</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>GammaSharpnessStrength</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>GammaShadow</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>GammaHighlight</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>GammaBlackPoint</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>GammaWhitePoint</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>GammaMidPoint</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>GammaCurveOutputRange</td> <td class=c>double[2]</td> <td><span class=s><span class=n>(16383 max)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CropInfo'>CanonVRD CropInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>CropActive</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>CropRotatedOriginalWidth</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>CropRotatedOriginalHeight</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>CropX</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>CropY</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>CropWidth</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>CropHeight</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>CropRotation</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>CropOriginalWidth</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>CropOriginalHeight</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='StampInfo'>CanonVRD StampInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>StampToolCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='DustInfo'>CanonVRD DustInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>DustDeleteApplied</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = No</td><td>&nbsp;&nbsp;</td> <td>1 = Yes</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 13, 2016</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������Image-ExifTool-10.10/html/TagNames/Casio.html�������������������������������������������������������000644 �000765 �000024 �00000121677 12527350232 020771� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Casio Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Casio Tags</h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>RecordingMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Single Shutter <br>2 = Panorama <br>3 = Night Scene <br>4 = Portrait <br>5 = Landscape</td><td>&nbsp;&nbsp;</td> <td>7 = Panorama <br>10 = Night Scene <br>15 = Portrait <br>16 = Landscape</td></tr></table> </td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>Quality</td> <td class=c>int16u</td> <td><span class=s>1 = Economy <br>2 = Normal <br>3 = Fine</span></td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>FocusMode</td> <td class=c>int16u</td> <td><span class=s>2 = Macro <br>3 = Auto <br>4 = Manual <br>5 = Infinity <br>7 = Spot AF</span></td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>FlashMode</td> <td class=c>int16u</td> <td><span class=s>1 = Auto <br>2 = On <br>3 = Off <br>4 = Off <br>5 = Red-eye Reduction <br>1 = Auto <br>2 = On <br>3 = Off <br>4 = Red-eye Reduction</span></td></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>FlashIntensity</td> <td class=c>int16u</td> <td><span class=s>11 = Weak <br>12 = Low <br>13 = Normal <br>14 = High <br>15 = Strong</span></td></tr> <tr class=b> <td title='0x0006 = 6'>0x0006</td> <td>ObjectDistance</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0007 = 7'>0x0007</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Auto <br>2 = Tungsten <br>3 = Daylight</td><td>&nbsp;&nbsp;</td> <td>4 = Fluorescent <br>5 = Shade <br>129 = Manual</td></tr></table> </td></tr> <tr class=b> <td title='0x000a = 10'>0x000a</td> <td>DigitalZoom</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0x10000 = Off <br>0x10001 = 2x <br>0x19999 = 1.6x</td><td>&nbsp;&nbsp;</td> <td>0x20000 = 2x <br>0x33333 = 3.2x <br>0x40000 = 4x</td></tr></table> </td></tr> <tr> <td title='0x000b = 11'>0x000b</td> <td>Sharpness</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Normal <br>1 = Soft <br>2 = Hard</td><td>&nbsp;&nbsp;</td> <td>16 = Normal <br>17 = +1 <br>18 = -1</td></tr></table> </td></tr> <tr class=b> <td title='0x000c = 12'>0x000c</td> <td>Contrast</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Normal <br>1 = Low <br>2 = High</td><td>&nbsp;&nbsp;</td> <td>16 = Normal <br>17 = +1 <br>18 = -1</td></tr></table> </td></tr> <tr> <td title='0x000d = 13'>0x000d</td> <td>Saturation</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Normal <br>1 = Low <br>2 = High</td><td>&nbsp;&nbsp;</td> <td>16 = Normal <br>17 = +1 <br>18 = -1</td></tr></table> </td></tr> <tr class=b> <td title='0x0014 = 20'>0x0014</td> <td>ISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0015 = 21'>0x0015</td> <td>FirmwareDate</td> <td class=c>string[18]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0016 = 22'>0x0016</td> <td>Enhancement</td> <td class=c>int16u</td> <td><span class=s>1 = Off <br>2 = Red <br>3 = Green <br>4 = Blue <br>5 = Flesh Tones</span></td></tr> <tr> <td title='0x0017 = 23'>0x0017</td> <td>ColorFilter</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Off <br>2 = Black &amp; White <br>3 = Sepia <br>4 = Red <br>5 = Green</td><td>&nbsp;&nbsp;</td> <td>6 = Blue <br>7 = Yellow <br>8 = Pink <br>9 = Purple</td></tr></table> </td></tr> <tr class=b> <td title='0x0018 = 24'>0x0018</td> <td>AFPoint</td> <td class=c>int16u</td> <td><span class=s><span class=n>(may not be valid for all models)</span></span><table class=cols><tr> <td>1 = Center <br>2 = Upper Left <br>3 = Upper Right <br>4 = Near Left/Right of Center <br>5 = Far Left/Right of Center <br>6 = Far Left/Right of Center/Bottom <br>7 = Top Near-left <br>8 = Near Upper/Left <br>9 = Top Near-right <br>10 = Top Left <br>11 = Top Center <br>12 = Top Right <br>13 = Center Left <br>14 = Center Right <br>15 = Bottom Left <br>16 = Bottom Center <br>17 = Bottom Right</td></tr></table> </td></tr> <tr> <td title='0x0019 = 25'>0x0019</td> <td>FlashIntensity</td> <td class=c>int16u</td> <td><span class=s>1 = Normal <br>2 = Weak <br>3 = Strong</span></td></tr> <tr class=b> <td title='0x0e00 = 3584'>0x0e00</td> <td>PrintIM</td> <td class=c>-</td> <td>--&gt; <a href='PrintIM.html'>PrintIM Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Type2'>Casio Type2 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>PreviewImageSize</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>PreviewImageLength</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>PreviewImageStart</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0008 = 8'>0x0008</td> <td>QualityMode</td> <td class=c>int16u</td> <td><span class=s>0 = Economy <br>1 = Normal <br>2 = Fine</span></td></tr> <tr> <td title='0x0009 = 9'>0x0009</td> <td>CasioImageSize</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = 640x480 <br>4 = 1600x1200 <br>5 = 2048x1536 <br>20 = 2288x1712</td><td>&nbsp;&nbsp;</td> <td>21 = 2592x1944 <br>22 = 2304x1728 <br>36 = 3008x2008</td></tr></table> </td></tr> <tr class=b> <td title='0x000d = 13'>0x000d</td> <td>FocusMode</td> <td class=c>int16u</td> <td><span class=s>0 = Normal <br>1 = Macro</span></td></tr> <tr> <td title='0x0014 = 20'>0x0014</td> <td>ISO</td> <td class=c>int16u</td> <td><span class=s>3 = 50 <br>4 = 64 <br>6 = 100 <br>9 = 200</span></td></tr> <tr class=b> <td title='0x0019 = 25'>0x0019</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Daylight <br>2 = Shade</td><td>&nbsp;&nbsp;</td> <td>3 = Tungsten <br>4 = Fluorescent <br>5 = Manual</td></tr></table> </td></tr> <tr> <td title='0x001d = 29'>0x001d</td> <td>FocalLength</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001f = 31'>0x001f</td> <td>Saturation</td> <td class=c>int16u</td> <td><span class=s>0 = Low <br>1 = Normal <br>2 = High</span></td></tr> <tr> <td title='0x0020 = 32'>0x0020</td> <td>Contrast</td> <td class=c>int16u</td> <td><span class=s>0 = Low <br>1 = Normal <br>2 = High</span></td></tr> <tr class=b> <td title='0x0021 = 33'>0x0021</td> <td>Sharpness</td> <td class=c>int16u</td> <td><span class=s>0 = Soft <br>1 = Normal <br>2 = Hard</span></td></tr> <tr> <td title='0x0e00 = 3584'>0x0e00</td> <td>PrintIM</td> <td class=c>-</td> <td>--&gt; <a href='PrintIM.html'>PrintIM Tags</a></td></tr> <tr class=b> <td title='0x2000 = 8192'>0x2000</td> <td>PreviewImage</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr> <td title='0x2001 = 8193'>0x2001</td> <td>FirmwareDate</td> <td class=c>string[18]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2011 = 8209'>0x2011</td> <td>WhiteBalanceBias</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x2012 = 8210'>0x2012</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Manual <br>1 = Daylight <br>2 = Cloudy <br>3 = Shade <br>4 = Flash?</td><td>&nbsp;&nbsp;</td> <td>6 = Fluorescent <br>9 = Tungsten? <br>10 = Tungsten <br>12 = Flash</td></tr></table> </td></tr> <tr class=b> <td title='0x2021 = 8225'>0x2021</td> <td>AFPointPosition</td> <td class=c title=' ~ = Writable only with -n'>int16u[4]~</td> <td>&nbsp;</td></tr> <tr> <td title='0x2022 = 8226'>0x2022</td> <td>ObjectDistance</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2034 = 8244'>0x2034</td> <td>FlashDistance</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x2076 = 8310'>0x2076</td> <td>SpecialEffectMode</td> <td class=c>int8u[3]</td> <td><span class=s>&#39;0 0 0&#39; = Off <br>&#39;1 0 0&#39; = Makeup <br>&#39;2 0 0&#39; = Mist Removal <br>&#39;3 0 0&#39; = Vivid Landscape</span></td></tr> <tr class=b> <td title='0x2089 = 8329'>0x2089</td> <td>FaceInfo1 <br>FaceInfo2 <br>FaceInfoUnknown?</td> <td class=c>-<br>-<br>Y</td> <td>--&gt; <a href='Casio.html#FaceInfo1'>Casio FaceInfo1 Tags</a> <br>--&gt; <a href='Casio.html#FaceInfo2'>Casio FaceInfo2 Tags</a></td></tr> <tr> <td title='0x211c = 8476'>0x211c</td> <td>FacesDetected</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3000 = 12288'>0x3000</td> <td>RecordMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>2 = Program AE <br>3 = Shutter Priority <br>4 = Aperture Priority <br>5 = Manual <br>6 = Best Shot <br>17 = Movie <br>19 = Movie (19) <br>20 = YouTube Movie <br>&#39;2 0&#39; = Program AE <br>&#39;3 0&#39; = Shutter Priority <br>&#39;4 0&#39; = Aperture Priority <br>&#39;5 0&#39; = Manual <br>&#39;6 0&#39; = Best Shot</td></tr></table> </td></tr> <tr> <td title='0x3001 = 12289'>0x3001</td> <td>ReleaseMode</td> <td class=c>int16u</td> <td><span class=s>1 = Normal <br>3 = AE Bracketing <br>11 = WB Bracketing <br>13 = Contrast Bracketing <br>19 = High Speed Burst</span></td></tr> <tr class=b> <td title='0x3002 = 12290'>0x3002</td> <td>Quality</td> <td class=c>int16u</td> <td><span class=s>1 = Economy <br>2 = Normal <br>3 = Fine</span></td></tr> <tr> <td title='0x3003 = 12291'>0x3003</td> <td>FocusMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Manual <br>1 = Focus Lock <br>2 = Macro <br>3 = Single-Area Auto Focus <br>5 = Infinity <br>6 = Multi-Area Auto Focus <br>8 = Super Macro</td></tr></table> </td></tr> <tr class=b> <td title='0x3006 = 12294'>0x3006</td> <td>HometownCity</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x3007 = 12295'>0x3007</td> <td>BestShotMode</td> <td class=c>int16u</td> <td><span class=s><span class=n>(EX-FC100)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>2 = Portrait <br>3 = Scenery <br>4 = Portrait with Scenery <br>5 = Children <br>6 = Sports <br>7 = Pet <br>8 = Flower <br>9 = Natural Green <br>10 = Autumn Leaves</td><td>&nbsp;&nbsp;</td> <td>11 = Sundown <br>12 = High Speed Night Scene <br>13 = Night Scene Portrait <br>14 = Fireworks <br>15 = High Speed Anti Shake <br>16 = Multi-motion Image <br>17 = High Speed Best Selection <br>18 = Move Out CS <br>19 = Move In CS <br>20 = Pre-record Movie <br>21 = For YouTube</td></tr></table> <span class=s><span class=n>(EX-FC150)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>2 = Expression CS <br>3 = Baby CS <br>4 = Child CS <br>5 = Pet CS <br>6 = Sports CS <br>7 = Child High Speed Movie <br>8 = Pet High Speed Movie <br>9 = Sports High Speed Movie <br>10 = Lag Correction <br>11 = High Speed Lighting <br>12 = High Speed Night Scene <br>13 = High Speed Night Scene and Portrait <br>14 = High Speed Anti Shake</td><td>&nbsp;&nbsp;</td> <td>15 = High Speed Best Selection <br>16 = Portrait <br>17 = Scenery <br>18 = Portrait With Scenery <br>19 = Flower <br>20 = Natural Green <br>21 = Autumn Leaves <br>22 = Sundown <br>23 = Fireworks <br>24 = Multi-motion Image <br>25 = Move Out CS <br>26 = Move In CS <br>27 = Pre-record Movie <br>28 = For YouTube</td></tr></table> <span class=s><span class=n>(EX-FC200S)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Slow Motion Swing (behind) <br>2 = Slow Motion Swing (front) <br>3 = Self Slow Motion (behind) <br>4 = Self Slow Motion (front) <br>5 = Swing Burst <br>6 = HDR <br>7 = HDR Art <br>8 = High Speed Night Scene <br>9 = High Speed Night Scene and Portrait <br>10 = High Speed Anti Shake <br>11 = Multi SR Zoom <br>12 = Blurred Background <br>13 = Wide Shot <br>14 = Slide Panorama <br>15 = High Speed Best Selection <br>16 = Lag Correction <br>17 = High Speed CS <br>18 = Child CS <br>19 = Pet CS <br>20 = Sports CS <br>21 = Child High Speed Movie <br>22 = Pet High Speed Movie</td><td>&nbsp;&nbsp;</td> <td>23 = Sports High Speed Movie <br>24 = Portrait <br>25 = Scenery <br>26 = Portrait with Scenery <br>27 = Children <br>28 = Sports <br>29 = Candlelight Portrait <br>30 = Party <br>31 = Pet <br>32 = Flower <br>33 = Natural Green <br>34 = Autumn Leaves <br>35 = Soft Flowing Water <br>36 = Splashing Water <br>37 = Sundown <br>38 = Fireworks <br>39 = Food <br>40 = Text <br>41 = Collection <br>42 = Auction <br>43 = Pre-record Movie <br>44 = For YouTube</td></tr></table> <span class=s><span class=n>(EX-FH100)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Expression CS <br>2 = Baby CS <br>3 = Child CS <br>4 = Pet CS <br>5 = Sports CS <br>6 = Child High Speed Movie <br>7 = Pet High Speed Movie <br>8 = Sports High Speed Movie <br>9 = Lag Correction <br>10 = High Speed Lighting <br>11 = High Speed Night Scene <br>12 = High Speed Night Scene and Portrait <br>13 = High Speed Anti Shake</td><td>&nbsp;&nbsp;</td> <td>14 = High Speed Best Selection <br>15 = Portrait <br>16 = Scenery <br>17 = Portrait With Scenery <br>18 = Flower <br>19 = Natural Green <br>20 = Autumn Leaves <br>21 = Sundown <br>22 = Fireworks <br>23 = Multi-motion Image <br>24 = Move Out CS <br>25 = Move In CS <br>26 = Pre-record Movie <br>27 = For YouTube</td></tr></table> <span class=s><span class=n>(EX-G1)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>2 = Auto Best Shot <br>3 = Dynamic Photo <br>4 = Interval Snapshot <br>5 = Interval Movie <br>6 = Portrait <br>7 = Scenery <br>8 = Portrait with Scenery</td><td>&nbsp;&nbsp;</td> <td>9 = Underwater <br>10 = Beach <br>11 = Snow <br>12 = Children <br>13 = Sports <br>14 = Pet <br>15 = Flower <br>16 = Sundown <br>17 = Night Scene</td><td>&nbsp;&nbsp;</td> <td>18 = Night Scene Portrait <br>19 = Fireworks <br>20 = Food <br>21 = For eBay <br>22 = Multi-motion Image <br>23 = Pre-record Movie <br>24 = For YouTube <br>25 = Voice Recording</td></tr></table> <span class=s><span class=n>(EX-S10)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>2 = Portrait <br>3 = Scenery <br>4 = Portrait with Scenery <br>5 = Self-portrait (1 person) <br>6 = Self-portrait (2 people) <br>7 = Children <br>8 = Sports <br>9 = Candlelight Portrait <br>10 = Party <br>11 = Pet <br>12 = Flower</td><td>&nbsp;&nbsp;</td> <td>13 = Natural Green <br>14 = Autumn Leaves <br>15 = Soft Flowing Water <br>16 = Splashing Water <br>17 = Sundown <br>18 = Night Scene <br>19 = Night Scene Portrait <br>20 = Fireworks <br>21 = Food <br>22 = Text <br>23 = Collection <br>24 = Auction <br>25 = Backlight</td><td>&nbsp;&nbsp;</td> <td>26 = Anti Shake <br>27 = High Sensitivity <br>28 = Underwater <br>29 = Monochrome <br>30 = Retro <br>31 = Business Cards <br>32 = White Board <br>33 = Silent <br>34 = Pre-record Movie <br>35 = For YouTube <br>36 = Voice Recording</td></tr></table> <span class=s><span class=n>(EX-S880)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>2 = Portrait <br>3 = Scenery <br>4 = Portrait with Scenery <br>5 = Children <br>6 = Sports <br>7 = Candlelight Portrait <br>8 = Party <br>9 = Pet <br>10 = Flower <br>11 = Natural Green <br>12 = Autumn Leaves <br>13 = Soft Flowing Water</td><td>&nbsp;&nbsp;</td> <td>14 = Splashing Water <br>15 = Sundown <br>16 = Night Scene <br>17 = Night Scene Portrait <br>18 = Fireworks <br>19 = Food <br>20 = Text <br>21 = Collection <br>22 = Auction <br>23 = Backlight <br>24 = Anti Shake <br>25 = High Sensitivity <br>26 = Monochrome <br>27 = Retro</td><td>&nbsp;&nbsp;</td> <td>28 = Twilight <br>29 = Layout (2 images) <br>30 = Layout (3 images) <br>31 = Auto Framing <br>32 = Old Photo <br>33 = Business Cards <br>34 = White Board <br>35 = Silent <br>36 = Short Movie <br>37 = Past Movie <br>38 = For YouTube <br>39 = Voice Recording</td></tr></table> <span class=s><span class=n>(EX-Z16)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>2 = Portrait <br>3 = Scenery <br>4 = Portrait with Scenery <br>5 = Children <br>6 = Sports <br>7 = Candlelight Portrait</td><td>&nbsp;&nbsp;</td> <td>8 = Party <br>9 = Pet <br>10 = Flower <br>11 = Soft Flowing Water <br>12 = Sundown <br>13 = Night Scene <br>14 = Night Scene Portrait <br>15 = Fireworks</td><td>&nbsp;&nbsp;</td> <td>16 = Food <br>17 = Text <br>18 = For eBay <br>19 = Backlight <br>20 = Anti Shake <br>21 = High Sensitivity <br>22 = For YouTube <br>23 = Voice Recording</td></tr></table> <span class=s><span class=n>(EX-Z9)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>2 = Movie <br>3 = Portrait <br>4 = Scenery <br>5 = Children <br>6 = Sports <br>7 = Candlelight Portrait</td><td>&nbsp;&nbsp;</td> <td>8 = Party <br>9 = Pet <br>10 = Flower <br>11 = Soft Flowing Water <br>12 = Sundown <br>13 = Night Scene <br>14 = Night Scene Portrait <br>15 = Fireworks</td><td>&nbsp;&nbsp;</td> <td>16 = Food <br>17 = Text <br>18 = Auction <br>19 = Backlight <br>20 = Anti Shake <br>21 = High Sensitivity <br>22 = For YouTube <br>23 = Voice Recording</td></tr></table> <span class=s><span class=n>(EX-Z80)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>2 = Portrait <br>3 = Scenery <br>4 = Portrait with Scenery <br>5 = Pet <br>6 = Self-portrait (1 person) <br>7 = Self-portrait (2 people) <br>8 = Flower <br>9 = Food <br>10 = Fashion Accessories</td><td>&nbsp;&nbsp;</td> <td>11 = Magazine <br>12 = Monochrome <br>13 = Retro <br>14 = Cross Filter <br>15 = Pastel <br>16 = Night Scene <br>17 = Night Scene Portrait <br>18 = Party <br>19 = Sports <br>20 = Children <br>21 = Sundown</td><td>&nbsp;&nbsp;</td> <td>22 = Fireworks <br>23 = Underwater <br>24 = Backlight <br>25 = High Sensitivity <br>26 = Auction <br>27 = White Board <br>28 = Pre-record Movie <br>29 = For YouTube <br>30 = Voice Recording</td></tr></table> <span class=s><span class=n>(EX-Z100 and EX-Z200)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>2 = Auto Best Shot <br>3 = Portrait <br>4 = Scenery <br>5 = Portrait with Scenery <br>6 = Self-portrait (1 person) <br>7 = Self-portrait (2 people) <br>8 = Children <br>9 = Sports <br>10 = Candlelight Portrait <br>11 = Party <br>12 = Pet <br>13 = Flower</td><td>&nbsp;&nbsp;</td> <td>14 = Natural Green <br>15 = Autumn Leaves <br>16 = Soft Flowing Water <br>17 = Splashing Water <br>18 = Sundown <br>19 = Night Scene <br>20 = Night Scene Portrait <br>21 = Fireworks <br>22 = Food <br>23 = Text <br>24 = Collection <br>25 = Auction <br>26 = Backlight <br>27 = Anti Shake</td><td>&nbsp;&nbsp;</td> <td>28 = High Sensitivity <br>29 = Underwater <br>30 = Monochrome <br>31 = Retro <br>32 = Twilight <br>33 = ID Photo <br>34 = Business Cards <br>35 = White Board <br>36 = Silent <br>37 = Pre-record Movie <br>38 = For YouTube <br>39 = Voice Recording</td></tr></table> <span class=s><span class=n>(EX-Z750 JPEG images)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Portrait <br>2 = Scenery <br>3 = Portrait with Scenery <br>4 = Children <br>5 = Sports <br>6 = Candlelight Portrait <br>7 = Party <br>8 = Pet <br>9 = Flower <br>10 = Natural Green</td><td>&nbsp;&nbsp;</td> <td>11 = Soft Flowing Water <br>12 = Splashing Water <br>13 = Sundown <br>14 = Night Scene <br>15 = Night Scene Portrait <br>16 = Fireworks <br>17 = Food <br>18 = Text <br>19 = Collection <br>20 = Backlight <br>21 = Anti Shake</td><td>&nbsp;&nbsp;</td> <td>22 = Pastel <br>23 = Illustration <br>24 = Cross Filter <br>25 = Monochrome <br>26 = Retro <br>27 = Twilight <br>28 = Old Photo <br>29 = ID Photo <br>30 = Business Cards <br>31 = White Board</td></tr></table> <span class=s><span class=n>(EX-Z750 movies)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Portrait <br>2 = Scenery</td><td>&nbsp;&nbsp;</td> <td>3 = Night Scene <br>4 = Fireworks <br>5 = Backlight</td><td>&nbsp;&nbsp;</td> <td>6 = Silent</td></tr></table> <span class=s><span class=n>(EX-Z850 JPEG images)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Portrait <br>2 = Scenery <br>3 = Portrait with Scenery <br>4 = Children <br>5 = Sports <br>6 = Candlelight Portrait <br>7 = Party <br>8 = Pet <br>9 = Flower <br>10 = Natural Green <br>11 = Autumn Leaves</td><td>&nbsp;&nbsp;</td> <td>12 = Soft Flowing Water <br>13 = Splashing Water <br>14 = Sundown <br>15 = Night Scene <br>16 = Night Scene Portrait <br>17 = Fireworks <br>18 = Food <br>19 = Text <br>20 = Collection <br>21 = For eBay <br>22 = Backlight <br>23 = Anti Shake</td><td>&nbsp;&nbsp;</td> <td>24 = High Sensitivity <br>25 = Pastel <br>26 = Illustration <br>27 = Cross Filter <br>28 = Monochrome <br>29 = Retro <br>30 = Twilight <br>31 = ID Photo <br>32 = Old Photo <br>33 = Business Cards <br>34 = White Board</td></tr></table> <span class=s><span class=n>(EX-Z850 movies)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Portrait <br>2 = Scenery <br>3 = Night Scene</td><td>&nbsp;&nbsp;</td> <td>4 = Fireworks <br>5 = Backlight <br>6 = High Sensitivity <br>7 = Silent</td><td>&nbsp;&nbsp;</td> <td>8 = Short Movie <br>9 = Past Movie</td></tr></table> <span class=s><span class=n>(EX-Z1050)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>2 = Movie <br>3 = Portrait <br>4 = Scenery <br>5 = Portrait with Scenery <br>6 = Children <br>7 = Sports <br>8 = Candlelight Portrait <br>9 = Party <br>10 = Pet <br>11 = Flower <br>12 = Natural Green</td><td>&nbsp;&nbsp;</td> <td>13 = Autumn Leaves <br>14 = Soft Flowing Water <br>15 = Splashing Water <br>16 = Sundown <br>17 = Night Scene <br>18 = Night Scene Portrait <br>19 = Fireworks <br>20 = Food <br>21 = Text <br>22 = Collection <br>23 = For eBay <br>24 = Backlight <br>25 = Anti Shake</td><td>&nbsp;&nbsp;</td> <td>26 = High Sensitivity <br>27 = Underwater <br>28 = Monochrome <br>29 = Retro <br>30 = Twilight <br>31 = Layout (2 images) <br>32 = Layout (3 images) <br>33 = Auto Framing <br>34 = ID Photo <br>35 = Old Photo <br>36 = Business Cards <br>37 = White Board <br>38 = Voice Recording</td></tr></table> <span class=s><span class=n>(EX-Z1080)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>2 = Movie <br>3 = Portrait <br>4 = Scenery <br>5 = Portrait with Scenery <br>6 = Children <br>7 = Sports <br>8 = Candlelight Portrait <br>9 = Party <br>10 = Pet <br>11 = Flower <br>12 = Natural Green <br>13 = Autumn Leaves</td><td>&nbsp;&nbsp;</td> <td>14 = Soft Flowing Water <br>15 = Splashing Water <br>16 = Sundown <br>17 = Night Scene <br>18 = Night Scene Portrait <br>19 = Fireworks <br>20 = Food <br>21 = Text <br>22 = Collection <br>23 = For eBay <br>24 = Backlight <br>25 = Anti Shake <br>26 = High Sensitivity <br>27 = Underwater</td><td>&nbsp;&nbsp;</td> <td>28 = Monochrome <br>29 = Retro <br>30 = Twilight <br>31 = Layout (2 images) <br>32 = Layout (3 images) <br>33 = Auto Framing <br>34 = ID Photo <br>35 = Old Photo <br>36 = Business Cards <br>37 = White Board <br>38 = Short Movie <br>39 = Past Movie <br>40 = For YouTube <br>41 = Voice Recording</td></tr></table> <span class=s><span class=n>(EX-Z1200 JPEG images)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Portrait <br>2 = Scenery <br>3 = Portrait with Scenery <br>4 = Children <br>5 = Sports <br>6 = Candlelight Portrait <br>7 = Party <br>8 = Pet <br>9 = Flower <br>10 = Natural Green <br>11 = Autumn Leaves</td><td>&nbsp;&nbsp;</td> <td>12 = Soft Flowing Water <br>13 = Splashing Water <br>14 = Sundown <br>15 = Night Scene <br>16 = Night Scene Portrait <br>17 = Fireworks <br>18 = Food <br>19 = Text <br>20 = Collection <br>21 = Auction <br>22 = Backlight <br>23 = High Sensitivity</td><td>&nbsp;&nbsp;</td> <td>24 = Underwater <br>25 = Monochrome <br>26 = Retro <br>27 = Twilight <br>28 = Layout (2 images) <br>29 = Layout (3 images) <br>30 = Auto Framing <br>31 = ID Photo <br>32 = Old Photo <br>33 = Business Cards <br>34 = White Board</td></tr></table> <span class=s><span class=n>(EX-Z1200 movies)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Portrait <br>2 = Scenery <br>3 = Night Scene</td><td>&nbsp;&nbsp;</td> <td>4 = Fireworks <br>5 = Backlight <br>6 = High Sensitivity <br>7 = Silent</td><td>&nbsp;&nbsp;</td> <td>8 = Short Movie <br>9 = Past Movie</td></tr></table> <span class=s><span class=n>(EX-Z2000)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>2 = Premium Auto <br>3 = Dynamic Photo <br>4 = Portrait <br>5 = Scenery <br>6 = Portrait with Scenery <br>7 = Children <br>8 = Sports <br>9 = Candlelight Portrait <br>10 = Party <br>11 = Pet <br>12 = Flower <br>13 = Natural Green</td><td>&nbsp;&nbsp;</td> <td>14 = Autumn Leaves <br>15 = Soft Flowing Water <br>16 = Splashing Water <br>17 = Sundown <br>18 = Night Scene <br>19 = Night Scene Portrait <br>20 = Fireworks <br>21 = Food <br>22 = Text <br>23 = Collection <br>24 = For eBay <br>25 = Backlight <br>26 = High Sensitivity <br>27 = Oil Painting</td><td>&nbsp;&nbsp;</td> <td>28 = Crayon <br>29 = Water Color <br>30 = Monochrome <br>31 = Retro <br>32 = Twilight <br>33 = Multi-motion Image <br>34 = ID Photo <br>35 = Business Cards <br>36 = White Board <br>37 = Silent <br>38 = Pre-record Movie <br>39 = For YouTube <br>40 = Voice Recording</td></tr></table> <span class=s><span class=n>(EX-Z2300)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>2 = Premium Auto <br>3 = Dynamic Photo <br>4 = Portrait <br>5 = Scenery <br>6 = Portrait with Scenery <br>7 = Children <br>8 = Sports <br>9 = Candlelight Portrait <br>10 = Party <br>11 = Pet <br>12 = Flower <br>13 = Natural Green</td><td>&nbsp;&nbsp;</td> <td>14 = Autumn Leaves <br>15 = Soft Flowing Water <br>16 = Splashing Water <br>17 = Sundown <br>18 = Night Scene <br>19 = Night Scene Portrait <br>20 = Fireworks <br>21 = Food <br>22 = Text <br>23 = Collection <br>24 = Auction <br>25 = Backlight <br>26 = High Sensitivity <br>27 = Oil Painting</td><td>&nbsp;&nbsp;</td> <td>28 = Crayon <br>29 = Water Color <br>30 = Monochrome <br>31 = Retro <br>32 = Twilight <br>33 = Multi-motion Image <br>34 = ID Photo <br>35 = Business Cards <br>36 = White Board <br>37 = Silent <br>38 = Pre-record Movie <br>39 = For YouTube <br>40 = Voice Recording</td></tr></table> <span class=s><span class=n>(EX-Z3000)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Portrait <br>2 = Scenery</td><td>&nbsp;&nbsp;</td> <td>3 = Portrait With Scenery <br>4 = Children <br>5 = Sports</td><td>&nbsp;&nbsp;</td> <td>6 = Night Scene</td></tr></table> <span class=s><span class=n>(EX-ZR100)</span></span><table class=cols><tr> <td>0 = Off <br>1 = Child CS <br>2 = Pet CS <br>3 = Sports CS <br>4 = Child High Speed Movie <br>5 = Pet High Speed Movie <br>6 = Sports High Speed Movie <br>7 = Multi SR Zoom <br>8 = Lag Correction <br>9 = High Speed Night Scene <br>10 = High Speed Night Scene and Portrait <br>11 = High Speed Anti Shake <br>12 = Portrait <br>13 = Scenery <br>14 = Portrait with Scenery <br>15 = Children <br>16 = Sports</td><td>&nbsp;&nbsp;</td> <td>17 = Candlelight Portrait <br>18 = Party <br>19 = Pet <br>20 = Flower <br>21 = Natural Green <br>22 = Autumn Leaves <br>23 = Soft Flowing Water <br>24 = Splashing Water <br>25 = Sundown <br>26 = Fireworks <br>27 = Food <br>28 = Text <br>29 = Collection <br>30 = For eBay <br>31 = Pre-record Movie <br>32 = For YouTube</td></tr></table> <span class=s><span class=n>(EX-ZR200)</span></span><table class=cols><tr> <td>0 = Off <br>1 = High Speed Night Scene <br>2 = High Speed Night Scene and Portrait <br>3 = High Speed Anti Shake <br>4 = Blurred Background <br>5 = Wide Shot <br>6 = High Speed Best Selection <br>7 = Lag Correction <br>8 = Child CS <br>9 = Pet CS <br>10 = Sports CS <br>11 = Child High Speed Movie <br>12 = Pet High Speed Movie <br>13 = Sports High Speed Movie <br>14 = Portrait <br>15 = Scenery <br>16 = Portrait with Scenery <br>17 = Children</td><td>&nbsp;&nbsp;</td> <td>18 = Sports <br>19 = Candlelight Portrait <br>20 = Party <br>21 = Pet <br>22 = Flower <br>23 = Natural Green <br>24 = Autumn Leaves <br>25 = Soft Flowing Water <br>26 = Splashing Water <br>27 = Sundown <br>28 = Fireworks <br>29 = Food <br>30 = Text <br>31 = Collection <br>32 = Auction <br>33 = Pre-record Movie <br>34 = For YouTube</td></tr></table> <span class=s><span class=n>(QV-4000)</span></span><table class=cols><tr> <td>0 = Off <br>1 = People</td><td>&nbsp;&nbsp;</td> <td>2 = Scenery <br>3 = Flower</td><td>&nbsp;&nbsp;</td> <td>4 = Night Scene <br>5 = Soft Focus</td></tr></table> <span class=s><span class=n>(EX-ZR300)</span></span><table class=cols><tr> <td>1 = High Speed Night Shot <br>2 = Blurred Background <br>3 = Toy Camera <br>4 = Soft Focus <br>5 = Light Tone <br>6 = Pop <br>7 = Sepia <br>8 = Monochrome <br>9 = Miniature <br>10 = Wide Shot <br>11 = High Speed Best Selection <br>12 = Lag Correction <br>13 = High Speed Night Scene <br>14 = High Speed Night Scene and Portrait <br>15 = High Speed Anti Shake <br>16 = Portrait <br>17 = Scenery <br>18 = Portrait with Scenery</td><td>&nbsp;&nbsp;</td> <td>19 = Children <br>20 = Sports <br>21 = Candlelight Portrait <br>22 = Party <br>23 = Pet <br>24 = Flower <br>25 = Natural Green <br>26 = Autumn Leaves <br>27 = Soft Flowing Water <br>28 = Splashing Water <br>29 = Sundown <br>30 = Fireworks <br>31 = Food <br>32 = Text <br>33 = Collection <br>34 = Auction <br>35 = Prerecord (Movie) <br>36 = For YouTube</td></tr></table> <span class=s><span class=n>(other models not yet decoded)</span></span></td></tr> <tr class=b> <td title='0x3008 = 12296'>0x3008</td> <td>AutoISO</td> <td class=c>int16u</td> <td><span class=s>1 = On <br>2 = Off <br>7 = On (high sensitivity) <br>8 = On (anti-shake) <br>10 = High Speed</span></td></tr> <tr> <td title='0x3009 = 12297'>0x3009</td> <td>AFMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Spot <br>2 = Multi</td><td>&nbsp;&nbsp;</td> <td>3 = Face Detection <br>4 = Tracking <br>5 = Intelligent</td></tr></table> </td></tr> <tr class=b> <td title='0x3011 = 12305'>0x3011</td> <td>Sharpness</td> <td class=c>undef[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x3012 = 12306'>0x3012</td> <td>Contrast</td> <td class=c>undef[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3013 = 12307'>0x3013</td> <td>Saturation</td> <td class=c>undef[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x3014 = 12308'>0x3014</td> <td>ISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3015 = 12309'>0x3015</td> <td>ColorMode</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>2 = Black &amp; White <br>3 = Sepia</span></td></tr> <tr> <td title='0x3016 = 12310'>0x3016</td> <td>Enhancement</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = Scenery <br>3 = Green <br>5 = Underwater <br>9 = Flesh Tones</span></td></tr> <tr class=b> <td title='0x3017 = 12311'>0x3017</td> <td>ColorFilter</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Blue <br>3 = Green <br>4 = Yellow</td><td>&nbsp;&nbsp;</td> <td>5 = Red <br>6 = Purple <br>7 = Pink</td></tr></table> </td></tr> <tr> <td title='0x301b = 12315'>0x301b</td> <td>ArtMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Normal <br>8 = Silent Movie <br>39 = HDR <br>45 = Premium Auto <br>47 = Painting <br>49 = Crayon Drawing <br>51 = Panorama <br>52 = Art HDR <br>62 = High Speed Night Shot <br>64 = Monochrome <br>67 = Toy Camera <br>68 = Pop Art <br>69 = Light Tone</td></tr></table> </td></tr> <tr class=b> <td title='0x301c = 12316'>0x301c</td> <td>SequenceNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x301d = 12317'>0x301d</td> <td>BracketSequence</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3020 = 12320'>0x3020</td> <td>ImageStabilization</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = On <br>2 = Best Shot <br>3 = Movie Anti-Shake <br>&#39;0 0&#39; = Off <br>&#39;0 1&#39; = Off (1) <br>&#39;0 3&#39; = CCD Shift <br>&#39;2 1&#39; = High Sensitivity <br>&#39;2 3&#39; = CCD Shift + High Sensitivity <br>&#39;16 0&#39; = Slow Shutter <br>&#39;18 0&#39; = Anti-Shake <br>&#39;20 0&#39; = High Sensitivity</td></tr></table> </td></tr> <tr> <td title='0x302a = 12330'>0x302a</td> <td>LightingMode</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = High Dynamic Range <br>5 = Shadow Enhance Low <br>6 = Shadow Enhance High</span></td></tr> <tr class=b> <td title='0x302b = 12331'>0x302b</td> <td>PortraitRefiner</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = +1 <br>2 = +2</span></td></tr> <tr> <td title='0x3030 = 12336'>0x3030</td> <td>SpecialEffectLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3031 = 12337'>0x3031</td> <td>SpecialEffectSetting</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = Makeup <br>2 = Mist Removal <br>3 = Vivid Landscape <br>16 = Art Shot</span></td></tr> <tr> <td title='0x3103 = 12547'>0x3103</td> <td>DriveMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Single Shot <br>1 = Continuous Shooting <br>2 = Continuous (2 fps) <br>3 = Continuous (3 fps) <br>4 = Continuous (4 fps) <br>5 = Continuous (5 fps) <br>6 = Continuous (6 fps) <br>7 = Continuous (7 fps)</td><td>&nbsp;&nbsp;</td> <td>10 = Continuous (10 fps) <br>12 = Continuous (12 fps) <br>15 = Continuous (15 fps) <br>20 = Continuous (20 fps) <br>30 = Continuous (30 fps) <br>40 = Continuous (40 fps) <br>60 = Continuous (60 fps) <br>240 = Auto-N</td></tr></table> </td></tr> <tr class=b> <td title='0x310b = 12555'>0x310b</td> <td>ArtModeParameters</td> <td class=c>int8u[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x4001 = 16385'>0x4001</td> <td>CaptureFrameRate</td> <td class=c>int16u[n]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x4003 = 16387'>0x4003</td> <td>VideoQuality</td> <td class=c>int16u</td> <td><span class=s>1 = Standard <br>3 = HD (720p) <br>4 = Full HD (1080p) <br>5 = Low</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceInfo1'>Casio FaceInfo1 Tags</a></h2> <p>Face-detect tags extracted from models such as the EX-H5.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FacesDetected</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>FaceDetectFrameSize</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>Face1Position</td> <td class=c>int16u[4]</td> <td><span class=s><span class=n>(left, top, right and bottom of detected face in coordinates of FaceDetectFrameSize, with increasing Y downwards)</span></span></td></tr> <tr class=b> <td class=r title='124 = 0x7c'>124</td> <td>Face2Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='235 = 0xeb'>235</td> <td>Face3Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='346 = 0x15a'>346</td> <td>Face4Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='457 = 0x1c9'>457</td> <td>Face5Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='568 = 0x238'>568</td> <td>Face6Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='679 = 0x2a7'>679</td> <td>Face7Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='790 = 0x316'>790</td> <td>Face8Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='901 = 0x385'>901</td> <td>Face9Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1012 = 0x3f4'>1012</td> <td>Face10Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceInfo2'>Casio FaceInfo2 Tags</a></h2> <p>Face-detect tags extracted from models such as the EX-H20G and EX-ZR100.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>FacesDetected</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FaceDetectFrameSize</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>FaceOrientation</td> <td class=c>int8u</td> <td><span class=s><span class=n>(orientation of face relative to unrotated image)</span> <br>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW <br>3 = Rotate 180</span></td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>Face1Position</td> <td class=c>int16u[4]</td> <td><span class=s><span class=n>(left, top, right and bottom of detected face in coordinates of FaceDetectFrameSize, with increasing Y downwards)</span></span></td></tr> <tr> <td class=r title='76 = 0x4c'>76</td> <td>Face2Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='128 = 0x80'>128</td> <td>Face3Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='180 = 0xb4'>180</td> <td>Face4Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='232 = 0xe8'>232</td> <td>Face5Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='284 = 0x11c'>284</td> <td>Face6Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='336 = 0x150'>336</td> <td>Face7Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='388 = 0x184'>388</td> <td>Face8Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='440 = 0x1b8'>440</td> <td>Face9Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='492 = 0x1ec'>492</td> <td>Face10Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='QVCI'>Casio QVCI Tags</a></h2> <p>This information is found in the APP1 QVCI segment of JPEG images from the Casio QV-7000SX.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>CasioQuality</td> <td class=c>N</td> <td><span class=s>1 = Economy <br>2 = Normal <br>3 = Fine <br>4 = Super Fine</span></td></tr> <tr class=b> <td class=r title='55 = 0x37'>55</td> <td>FocalRange?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='77 = 0x4d'>77</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='98 = 0x62'>98</td> <td>ModelType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='114 = 0x72'>114</td> <td>ManufactureIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='124 = 0x7c'>124</td> <td>ManufactureCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AVI'>Casio AVI Tags</a></h2> <p>This information is found in Casio GV-10 AVI videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Software</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jul 4, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Composite.html���������������������������������������������������000644 �000765 �000024 �00000043155 12567635034 021701� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Composite Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Composite Tags</h2> <p> The values of the composite tags are <b>Derived From</b> the values of other tags. These are convenience tags which are calculated after all other information is extracted. Only a few of these tags are writable directly, the others are changed by writing the corresponding <b>Derived From</b> tags. User-defined Composite tags, also useful for custom-formatting of tag values, may created via the <a href="../config.html">ExifTool configuration file</a>. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Derived From</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AdvancedSceneMode</td> <td class=c>N</td> <td class=n>Model <br>SceneMode <br>AdvancedSceneType</td> <td>--&gt; <a href='Panasonic.html#AdvancedSceneMode'>Panasonic AdvancedSceneMode Values</a></td></tr> <tr class=b> <td>Aperture</td> <td class=c>N</td> <td class=n>FNumber <br>ApertureValue</td> <td>&nbsp;</td></tr> <tr> <td>AudioBitrate</td> <td class=c>N</td> <td class=n>MPEG:MPEGAudioVersion <br>MPEG:SampleRate <br>MPEG:VBRBytes <br>MPEG:VBRFrames</td> <td><span class=s><span class=n>(calculated for variable-bitrate MPEG audio)</span></span></td></tr> <tr class=b> <td>AutoFocus</td> <td class=c>N</td> <td class=n>Nikon:PhaseDetectAF <br>Nikon:ContrastDetectAF</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td>AvgBitrate</td> <td class=c>N</td> <td class=n>QuickTime::MovieDataSize <br>QuickTime::Duration</td> <td>&nbsp;</td></tr> <tr class=b> <td>BlueBalance</td> <td class=c>N</td> <td class=n>WB_RGGBLevels <br>WB_RGBGLevels <br>WB_RBGGLevels <br>WB_GRBGLevels <br>WB_GRGBLevels <br>WB_GBRGLevels <br>WB_RGBLevels <br>WB_GRBLevels <br>WB_RBLevels <br>WBBlueLevel <br>WBGreenLevel</td> <td>&nbsp;</td></tr> <tr> <td>CDDBDiscPlayTime</td> <td class=c>N</td> <td class=n>CDDB1Info</td> <td>&nbsp;</td></tr> <tr class=b> <td>CDDBDiscTracks</td> <td class=c>N</td> <td class=n>CDDB1Info</td> <td>&nbsp;</td></tr> <tr> <td>CFAPattern</td> <td class=c>N</td> <td class=n>CFARepeatPatternDim <br>CFAPattern2</td> <td>&nbsp;</td></tr> <tr class=b> <td>CircleOfConfusion</td> <td class=c>N</td> <td class=n>ScaleFactor35efl</td> <td><span class=s><span class=n>(calculated as D/1440, where D is the focal plane diagonal in mm. This value may be incorrect if the image has been resized)</span></span></td></tr> <tr> <td>ConditionalFEC</td> <td class=c>N</td> <td class=n>FlashExposureComp <br>FlashBits</td> <td>&nbsp;</td></tr> <tr class=b> <td>DOF</td> <td class=c>N</td> <td class=n>FocalLength <br>Aperture <br>CircleOfConfusion <br>FocusDistance <br>SubjectDistance <br>ObjectDistance <br>ApproximateFocusDistance <br>FocusDistanceLower <br>FocusDistanceUpper</td> <td><span class=s><span class=n>(this value may be incorrect if the image has been resized)</span></span></td></tr> <tr> <td>DateCreated</td> <td class=c>N</td> <td class=n>Kodak:YearCreated <br>Kodak:MonthDayCreated</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateTimeCreated</td> <td class=c>N</td> <td class=n>IPTC:DateCreated <br>IPTC:TimeCreated</td> <td>&nbsp;</td></tr> <tr> <td>DateTimeOriginal</td> <td class=c>N</td> <td class=n>DateTimeCreated <br>DateCreated <br>TimeCreated</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateTimeOriginal</td> <td class=c>N</td> <td class=n>ID3:RecordingTime <br>ID3:Year <br>ID3:Date <br>ID3:Time</td> <td>&nbsp;</td></tr> <tr> <td>DigitalCreationDateTime</td> <td class=c>N</td> <td class=n>IPTC:DigitalCreationDate <br>IPTC:DigitalCreationTime</td> <td>&nbsp;</td></tr> <tr class=b> <td>DigitalZoom</td> <td class=c>N</td> <td class=n>Canon:ZoomSourceWidth <br>Canon:ZoomTargetWidth <br>Canon:DigitalZoom</td> <td>&nbsp;</td></tr> <tr> <td>DriveMode</td> <td class=c>N</td> <td class=n>ContinuousDrive <br>SelfTimer</td> <td><span class=s>0 = Continuous Shooting <br>1 = Self-timer Operation <br>2 = Single-frame Shooting</span></td></tr> <tr class=b> <td>Duration</td> <td class=c>N</td> <td class=n>Vorbis:NominalBitrate <br>FileSize</td> <td>&nbsp;</td></tr> <tr> <td>Duration</td> <td class=c>N</td> <td class=n>FLAC:SampleRate <br>FLAC:TotalSamples</td> <td>&nbsp;</td></tr> <tr class=b> <td>Duration</td> <td class=c>N</td> <td class=n>FileSize <br>ID3Size <br>MPEG:AudioBitrate <br>MPEG:VideoBitrate <br>MPEG:VBRFrames <br>MPEG:SampleRate <br>MPEG:MPEGAudioVersion</td> <td>&nbsp;</td></tr> <tr> <td>Duration</td> <td class=c>N</td> <td class=n>RIFF:FrameRate <br>RIFF:FrameCount <br>VideoFrameRate <br>VideoFrameCount</td> <td>&nbsp;</td></tr> <tr class=b> <td>Duration</td> <td class=c>N</td> <td class=n>RIFF:AvgBytesPerSec <br>FileSize <br>FrameCount <br>VideoFrameCount</td> <td>&nbsp;</td></tr> <tr> <td>Duration</td> <td class=c>N</td> <td class=n>AIFF:SampleRate <br>AIFF:NumSampleFrames</td> <td>&nbsp;</td></tr> <tr class=b> <td>ExtenderStatus</td> <td class=c>N</td> <td class=n>Olympus:Extender <br>Olympus:LensType <br>MaxApertureValue</td> <td><span class=s><span class=n>(Olympus cameras have the quirk that they may retain the extender settings after the extender is removed until the camera is powered off. This tag is an attempt to represent the actual status of the extender.)</span> <br>0 = Not attached <br>1 = Attached <br>2 = Removed</span></td></tr> <tr> <td>FOV</td> <td class=c>N</td> <td class=n>FocalLength <br>ScaleFactor35efl <br>FocusDistance</td> <td><span class=s><span class=n>(calculated for the long image dimension. This value may be incorrect for fisheye lenses, or if the image has been resized)</span></span></td></tr> <tr class=b> <td>FileNumber</td> <td class=c>Y</td> <td class=n>DirectoryIndex <br>FileIndex</td> <td>&nbsp;</td></tr> <tr> <td>Flash</td> <td class=c>Y</td> <td class=n>XMP:FlashFired <br>XMP:FlashReturn <br>XMP:FlashMode <br>XMP:FlashFunction <br>XMP:FlashRedEyeMode <br>XMP:Flash</td> <td>--&gt; <a href='EXIF.html#Flash'>EXIF Flash Values</a> <br><span class='n s'>(facilitates copying camera flash information between XMP and EXIF)</span></td></tr> <tr class=b> <td>FlashType</td> <td class=c>N</td> <td class=n>FlashBits</td> <td><span class=s><span class=n>(may report &quot;Built-in Flash&quot; for some Canon cameras with external flash in manual mode)</span> <br>0 = Built-In Flash <br>1 = External</span></td></tr> <tr> <td>FocalLength35efl</td> <td class=c>N</td> <td class=n>FocalLength <br>ScaleFactor35efl</td> <td><span class=s><span class=n>(this value may be incorrect if the image has been resized)</span></span></td></tr> <tr class=b> <td>FocusDistance</td> <td class=c>N</td> <td class=n>Sony:FocusPosition <br>FocalLength</td> <td><span class=s><span class=n>(distance in metres = FocusPosition * FocalLength / 1000)</span></span></td></tr> <tr> <td>FocusDistance2</td> <td class=c>N</td> <td class=n>Sony:FocusPosition2 <br>FocalLengthIn35mmFormat</td> <td>&nbsp;</td></tr> <tr class=b> <td>GPSAltitude</td> <td class=c>N</td> <td class=n>QuickTime:GPSCoordinates</td> <td>&nbsp;</td></tr> <tr> <td>GPSAltitude</td> <td class=c>N</td> <td class=n>QuickTime:LocationInformation</td> <td>&nbsp;</td></tr> <tr class=b> <td>GPSAltitude</td> <td class=c>N</td> <td class=n>GPS:GPSAltitude <br>GPS:GPSAltitudeRef <br>XMP:GPSAltitude <br>XMP:GPSAltitudeRef</td> <td>&nbsp;</td></tr> <tr> <td>GPSAltitudeRef</td> <td class=c>N</td> <td class=n>QuickTime:GPSCoordinates</td> <td><span class=s>0 = Above Sea Level <br>1 = Below Sea Level</span></td></tr> <tr class=b> <td>GPSAltitudeRef</td> <td class=c>N</td> <td class=n>QuickTime:LocationInformation</td> <td><span class=s>0 = Above Sea Level <br>1 = Below Sea Level</span></td></tr> <tr> <td>GPSDateTime</td> <td class=c>N</td> <td class=n>GPS:GPSDateStamp <br>GPS:GPSTimeStamp</td> <td>&nbsp;</td></tr> <tr class=b> <td>GPSLatitude</td> <td class=c>N</td> <td class=n>QuickTime:GPSCoordinates</td> <td>&nbsp;</td></tr> <tr> <td>GPSLatitude</td> <td class=c>N</td> <td class=n>QuickTime:LocationInformation</td> <td>&nbsp;</td></tr> <tr class=b> <td>GPSLatitude</td> <td class=c>N</td> <td class=n>GPS:GPSLatitude <br>GPS:GPSLatitudeRef</td> <td>&nbsp;</td></tr> <tr> <td>GPSLatitudeRef</td> <td class=c>N</td> <td class=n>XMP:GPSLatitude</td> <td><span class=s>&#39;N&#39; = North <br>&#39;S&#39; = South</span></td></tr> <tr class=b> <td>GPSLongitude</td> <td class=c>N</td> <td class=n>QuickTime:GPSCoordinates</td> <td>&nbsp;</td></tr> <tr> <td>GPSLongitude</td> <td class=c>N</td> <td class=n>QuickTime:LocationInformation</td> <td>&nbsp;</td></tr> <tr class=b> <td>GPSLongitude</td> <td class=c>N</td> <td class=n>GPS:GPSLongitude <br>GPS:GPSLongitudeRef</td> <td>&nbsp;</td></tr> <tr> <td>GPSLongitudeRef</td> <td class=c>N</td> <td class=n>XMP:GPSLongitude</td> <td><span class=s>&#39;E&#39; = East <br>&#39;W&#39; = West</span></td></tr> <tr class=b> <td>GPSPosition</td> <td class=c>N</td> <td class=n>GPSLatitude <br>GPSLongitude</td> <td>&nbsp;</td></tr> <tr> <td>HyperfocalDistance</td> <td class=c>N</td> <td class=n>FocalLength <br>Aperture <br>CircleOfConfusion</td> <td><span class=s><span class=n>(this value may be incorrect if the image has been resized)</span></span></td></tr> <tr class=b> <td>IDCPreviewImage</td> <td class=c>N</td> <td class=n>IDCPreviewStart <br>IDCPreviewLength</td> <td>&nbsp;</td></tr> <tr> <td>ISO</td> <td class=c>N</td> <td class=n>Canon:CameraISO <br>Canon:BaseISO <br>Canon:AutoISO</td> <td><span class=s><span class=n>(use CameraISO if numerical, otherwise calculate as BaseISO * AutoISO / 100)</span></span></td></tr> <tr class=b> <td>ImageHeight</td> <td class=c>N</td> <td class=n>Main:PostScript:ImageData <br>PostScript:BoundingBox</td> <td>&nbsp;</td></tr> <tr> <td>ImageHeight</td> <td class=c>N</td> <td class=n>IFD0:SensorTopBorder <br>IFD0:SensorBottomBorder</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageSize</td> <td class=c>N</td> <td class=n>ImageWidth <br>ImageHeight <br>ExifImageWidth <br>ExifImageHeight</td> <td>&nbsp;</td></tr> <tr> <td>ImageWidth</td> <td class=c>N</td> <td class=n>Main:PostScript:ImageData <br>PostScript:BoundingBox</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageWidth</td> <td class=c>N</td> <td class=n>IFD0:SensorLeftBorder <br>IFD0:SensorRightBorder</td> <td>&nbsp;</td></tr> <tr> <td>JpgFromRaw</td> <td class=c>Y</td> <td class=n>JpgFromRawStart <br>JpgFromRawLength</td> <td>&nbsp;</td></tr> <tr class=b> <td>Lens</td> <td class=c>N</td> <td class=n>Canon:MinFocalLength <br>Canon:MaxFocalLength</td> <td>&nbsp;</td></tr> <tr> <td>Lens35efl</td> <td class=c>N</td> <td class=n>Canon:MinFocalLength <br>Canon:MaxFocalLength <br>Lens <br>ScaleFactor35efl</td> <td>&nbsp;</td></tr> <tr class=b> <td>LensID</td> <td class=c>N</td> <td class=n>LensType <br>FocalLength <br>MaxAperture <br>MaxApertureValue <br>MinFocalLength <br>MaxFocalLength <br>LensModel <br>LensFocalRange <br>LensSpec <br>LensType2 <br>LensFocalLength</td> <td><span class=s><span class=n>(attempt to identify the actual lens from all lenses with a given LensType. Applies only to LensType values with a lookup table. May be configured by adding user-defined lenses)</span></span></td></tr> <tr> <td>LensID</td> <td class=c>N</td> <td class=n>XMP-aux:LensID <br>Make <br>LensInfo <br>FocalLength <br>LensModel <br>MaxApertureValue</td> <td><span class=s><span class=n>(attempt to convert numerical XMP-aux:LensID stored by Adobe applications)</span></span></td></tr> <tr class=b> <td>LensID</td> <td class=c>N</td> <td class=n>Nikon:LensIDNumber <br>LensFStops <br>MinFocalLength <br>MaxFocalLength <br>MaxApertureAtMinFocal <br>MaxApertureAtMaxFocal <br>MCUVersion <br>Nikon:LensType</td> <td>--&gt; <a href='Nikon.html#LensID'>Nikon LensID Values</a></td></tr> <tr> <td>LensID</td> <td class=c>N</td> <td class=n>Ricoh:LensFirmware</td> <td>--&gt; <a href='Ricoh.html#LensID'>Ricoh LensID Values</a></td></tr> <tr class=b> <td>LensSpec</td> <td class=c>N</td> <td class=n>Nikon:Lens <br>Nikon:LensType</td> <td>&nbsp;</td></tr> <tr> <td>LightValue</td> <td class=c>N</td> <td class=n>Aperture <br>ShutterSpeed <br>ISO</td> <td><span class=s><span class=n>(calculated LV -- similar to exposure value but normalized to ISO 100)</span></span></td></tr> <tr class=b> <td>MPImage</td> <td class=c>N</td> <td class=n>MPImageStart <br>MPImageLength <br>MPImageType</td> <td><span class=s><span class=n>(the first MPF &quot;Large Thumbnail&quot; is extracted as PreviewImage, and the rest of the embedded MPF images are extracted as MPImage#. The ExtractEmbedded option may be used to extract information from these embedded images.)</span></span></td></tr> <tr> <td>Megapixels</td> <td class=c>N</td> <td class=n>ImageSize</td> <td>&nbsp;</td></tr> <tr class=b> <td>OriginalDecisionData</td> <td class=c title=' ! = Unsafe'>Y!</td> <td class=n>OriginalDecisionDataOffset</td> <td>&nbsp;</td></tr> <tr> <td>OtherImage</td> <td class=c>Y</td> <td class=n>OtherImageStart <br>OtherImageLength</td> <td>&nbsp;</td></tr> <tr class=b> <td>PeakSpectralSensitivity</td> <td class=c>N</td> <td class=n>FLIR:PlanckB</td> <td>&nbsp;</td></tr> <tr> <td>PreviewImage</td> <td class=c>Y</td> <td class=n>PreviewImageStart <br>PreviewImageLength <br>PreviewImageValid <br>PreviewImageStart (1) <br>PreviewImageLength (1)</td> <td>&nbsp;</td></tr> <tr class=b> <td>PreviewImage</td> <td class=c>N</td> <td class=n>ScreenNail</td> <td>&nbsp;</td></tr> <tr> <td>PreviewImageSize</td> <td class=c>N</td> <td class=n>PreviewImageWidth <br>PreviewImageHeight</td> <td>&nbsp;</td></tr> <tr class=b> <td>RedBalance</td> <td class=c>N</td> <td class=n>WB_RGGBLevels <br>WB_RGBGLevels <br>WB_RBGGLevels <br>WB_GRBGLevels <br>WB_GRGBLevels <br>WB_GBRGLevels <br>WB_RGBLevels <br>WB_GRBLevels <br>WB_RBLevels <br>WBRedLevel <br>WBGreenLevel</td> <td>&nbsp;</td></tr> <tr> <td>RedEyeReduction</td> <td class=c>N</td> <td class=n>CanonFlashMode <br>FlashBits</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td>RicohPitch</td> <td class=c>N</td> <td class=n>Ricoh:Accelerometer</td> <td>&nbsp;</td></tr> <tr> <td>RicohRoll</td> <td class=c>N</td> <td class=n>Ricoh:Accelerometer</td> <td>&nbsp;</td></tr> <tr class=b> <td>Rotation</td> <td class=c>N</td> <td class=n>QuickTime:MatrixStructure <br>QuickTime:HandlerType</td> <td>&nbsp;</td></tr> <tr> <td>RunTimeSincePowerUp</td> <td class=c>N</td> <td class=n>Apple:RunTimeValue <br>Apple:RunTimeScale</td> <td>&nbsp;</td></tr> <tr class=b> <td>ScaleFactor35efl</td> <td class=c>N</td> <td class=n>FocalLength <br>FocalLengthIn35mmFormat <br>Composite:DigitalZoom <br>FocalPlaneDiagonal <br>SensorSize <br>FocalPlaneXSize <br>FocalPlaneYSize <br>FocalPlaneResolutionUnit <br>FocalPlaneXResolution <br>FocalPlaneYResolution <br>ExifImageWidth <br>ExifImageHeight <br>CanonImageWidth <br>CanonImageHeight <br>ImageWidth <br>ImageHeight</td> <td><span class=s><span class=n>(this value and any derived values may be incorrect if the image has been resized)</span></span></td></tr> <tr> <td>ShootingMode</td> <td class=c>N</td> <td class=n>CanonExposureMode <br>EasyMode <br>BulbDuration</td> <td>&nbsp;</td></tr> <tr class=b> <td>ShutterCurtainHack</td> <td class=c>N</td> <td class=n>FlashBits <br>ShutterCurtainSync</td> <td><span class=s>0 = 1st-curtain sync <br>1 = 2nd-curtain sync</span></td></tr> <tr> <td>ShutterSpeed</td> <td class=c>N</td> <td class=n>ExposureTime <br>ShutterSpeedValue <br>BulbDuration</td> <td>&nbsp;</td></tr> <tr class=b> <td>SubSecCreateDate</td> <td class=c>N</td> <td class=n>EXIF:CreateDate <br>SubSecTimeDigitized</td> <td>&nbsp;</td></tr> <tr> <td>SubSecDateTimeOriginal</td> <td class=c>N</td> <td class=n>EXIF:DateTimeOriginal <br>SubSecTimeOriginal</td> <td>&nbsp;</td></tr> <tr class=b> <td>SubSecModifyDate</td> <td class=c>N</td> <td class=n>EXIF:ModifyDate <br>SubSecTime</td> <td>&nbsp;</td></tr> <tr> <td>ThumbnailImage</td> <td class=c>Y</td> <td class=n>ThumbnailOffset <br>ThumbnailLength</td> <td>&nbsp;</td></tr> <tr class=b> <td>WB_RGBLevels</td> <td class=c>N</td> <td class=n>KDC_IFD:WhiteBalance <br>WB_RGBLevelsAuto <br>WB_RGBLevelsFluorescent <br>WB_RGBLevelsTungsten <br>WB_RGBLevelsDaylight <br>WB_RGBLevels4 <br>WB_RGBLevels5 <br>WB_RGBLevelsShade</td> <td>&nbsp;</td></tr> <tr> <td>WB_RGBLevels</td> <td class=c>N</td> <td class=n>KodakIFD:WhiteBalance <br>WB_RGBMul0 <br>WB_RGBMul1 <br>WB_RGBMul2 <br>WB_RGBMul3 <br>WB_RGBCoeffs0 <br>WB_RGBCoeffs1 <br>WB_RGBCoeffs2 <br>WB_RGBCoeffs3 <br>KodakIFD:ColorTemperature <br>Kodak:WB_RGBLevels</td> <td>&nbsp;</td></tr> <tr class=b> <td>WB_RGGBLevels</td> <td class=c>N</td> <td class=n>Canon:WhiteBalance <br>WB_RGGBLevelsAsShot <br>WB_RGGBLevelsAuto <br>WB_RGGBLevelsDaylight <br>WB_RGGBLevelsCloudy <br>WB_RGGBLevelsTungsten <br>WB_RGGBLevelsFluorescent <br>WB_RGGBLevelsFlash <br>WB_RGGBLevelsCustom <br>WB_RGGBLevelsShade <br>WB_RGGBLevelsKelvin</td> <td>&nbsp;</td></tr> <tr> <td>WB_RGGBLevels</td> <td class=c>N</td> <td class=n>WB_RGGBLevelsUncorrected <br>WB_RGGBLevelsBlack</td> <td>&nbsp;</td></tr> <tr class=b> <td>ZoomedPreviewImage</td> <td class=c>N</td> <td class=n>ZoomedPreviewStart <br>ZoomedPreviewLength</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Aug 27, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/DarwinCore.html��������������������������������������������������000644 �000765 �000024 �00000124072 12270215016 021753� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>DarwinCore Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>DarwinCore Tags</h2> <p>Tags defined in the Darwin Core (dwc) XMP namespace. See <a href="http://rs.tdwg.org/dwc/index.htm">http://rs.tdwg.org/dwc/index.htm</a> for the official specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>DCTermsLocation</td> <td class=c>struct</td> <td>--&gt; <a href='DarwinCore.html#DCTermsLocation'>DarwinCore DCTermsLocation Struct</a></td></tr> <tr class=b> <td>DCContinent</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationContinent)</span></span></td></tr> <tr> <td>DCCoordinatePrecision</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationCoordinatePrecision)</span></span></td></tr> <tr class=b> <td>DCCoordinateUncertaintyInMeters</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationCoordinateUncertaintyInMeters)</span></span></td></tr> <tr> <td>DCCountry</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationCountry)</span></span></td></tr> <tr class=b> <td>DCCountryCode</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationCountryCode)</span></span></td></tr> <tr> <td>DCCounty</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationCounty)</span></span></td></tr> <tr class=b> <td>DCDecimalLatitude</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationDecimalLatitude)</span></span></td></tr> <tr> <td>DCDecimalLongitude</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationDecimalLongitude)</span></span></td></tr> <tr class=b> <td>DCFootprintSpatialFit</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationFootprintSpatialFit)</span></span></td></tr> <tr> <td>DCFootprintSRS</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationFootprintSRS)</span></span></td></tr> <tr class=b> <td>DCFootprintWKT</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationFootprintWKT)</span></span></td></tr> <tr> <td>DCGeodeticDatum</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationGeodeticDatum)</span></span></td></tr> <tr class=b> <td>DCGeoreferencedBy</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationGeoreferencedBy)</span></span></td></tr> <tr> <td>DCGeoreferencedDate</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationGeoreferencedDate)</span></span></td></tr> <tr class=b> <td>DCGeoreferenceProtocol</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationGeoreferenceProtocol)</span></span></td></tr> <tr> <td>DCGeoreferenceRemarks</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationGeoreferenceRemarks)</span></span></td></tr> <tr class=b> <td>DCGeoreferenceSources</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationGeoreferenceSources)</span></span></td></tr> <tr> <td>DCGeoreferenceVerificationStatus</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationGeoreferenceVerificationStatus)</span></span></td></tr> <tr class=b> <td>DCHigherGeography</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationHigherGeography)</span></span></td></tr> <tr> <td>DCHigherGeographyID</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationHigherGeographyID)</span></span></td></tr> <tr class=b> <td>DCIsland</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationIsland)</span></span></td></tr> <tr> <td>DCIslandGroup</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationIslandGroup)</span></span></td></tr> <tr class=b> <td>DCLocality</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationLocality)</span></span></td></tr> <tr> <td>DCLocationAccordingTo</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationLocationAccordingTo)</span></span></td></tr> <tr class=b> <td>DCLocationID</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationLocationID)</span></span></td></tr> <tr> <td>DCLocationRemarks</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationLocationRemarks)</span></span></td></tr> <tr class=b> <td>DCMaximumDepthInMeters</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationMaximumDepthInMeters)</span></span></td></tr> <tr> <td>DCMaximumDistanceAboveSurfaceInMeters</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationMaximumDistanceAboveSurfaceInMeters)</span></span></td></tr> <tr class=b> <td>DCMaximumElevationInMeters</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationMaximumElevationInMeters)</span></span></td></tr> <tr> <td>DCMinimumDepthInMeters</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationMinimumDepthInMeters)</span></span></td></tr> <tr class=b> <td>DCMinimumDistanceAboveSurfaceInMeters</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationMinimumDistanceAboveSurfaceInMeters)</span></span></td></tr> <tr> <td>DCMinimumElevationInMeters</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationMinimumElevationInMeters)</span></span></td></tr> <tr class=b> <td>DCMunicipality</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationMunicipality)</span></span></td></tr> <tr> <td>DCPointRadiusSpatialFit</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationPointRadiusSpatialFit)</span></span></td></tr> <tr class=b> <td>DCStateProvince</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationStateProvince)</span></span></td></tr> <tr> <td>DCVerbatimCoordinates</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationVerbatimCoordinates)</span></span></td></tr> <tr class=b> <td>DCVerbatimCoordinateSystem</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationVerbatimCoordinateSystem)</span></span></td></tr> <tr> <td>DCVerbatimDepth</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationVerbatimDepth)</span></span></td></tr> <tr class=b> <td>DCVerbatimElevation</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationVerbatimElevation)</span></span></td></tr> <tr> <td>DCVerbatimLatitude</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationVerbatimLatitude)</span></span></td></tr> <tr class=b> <td>DCVerbatimLocality</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationVerbatimLocality)</span></span></td></tr> <tr> <td>DCVerbatimLongitude</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationVerbatimLongitude)</span></span></td></tr> <tr class=b> <td>DCVerbatimSRS</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationVerbatimSRS)</span></span></td></tr> <tr> <td>DCWaterBody</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(dctermsLocationWaterBody)</span></span></td></tr> <tr class=b> <td>DCEvent</td> <td class=c>struct</td> <td>--&gt; <a href='DarwinCore.html#Event'>DarwinCore Event Struct</a> <br><span class='n s'>(called Event by the spec)</span></td></tr> <tr> <td>EventDay</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventEarliestDate</td> <td class=c title=' _ = Flattened'>date_</td> <td>&nbsp;</td></tr> <tr> <td>EventEndDayOfYear</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventID</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(EventEventID)</span></span></td></tr> <tr> <td>EventRemarks</td> <td class=c title=' _ = Flattened'>lang-alt_</td> <td><span class=s><span class=n>(EventEventRemarks)</span></span></td></tr> <tr class=b> <td>EventTime</td> <td class=c title=' _ = Flattened'>date_</td> <td><span class=s><span class=n>(EventEventTime)</span></span></td></tr> <tr> <td>EventFieldNotes</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventFieldNumber</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>EventHabitat</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventLatestDate</td> <td class=c title=' _ = Flattened'>date_</td> <td>&nbsp;</td></tr> <tr> <td>EventMonth</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventSamplingEffort</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>EventSamplingProtocol</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventStartDayOfYear</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr> <td>EventVerbatimEventDate</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventYear</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr> <td>GeologicalContext</td> <td class=c>struct</td> <td>--&gt; <a href='DarwinCore.html#GeologicalContext'>DarwinCore GeologicalContext Struct</a></td></tr> <tr class=b> <td>GeologicalContextBed</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>EarliestAgeOrLowestStage</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GeologicalContextEarliestAgeOrLowestStage)</span></span></td></tr> <tr class=b> <td>EarliestEonOrLowestEonothem</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GeologicalContextEarliestEonOrLowestEonothem)</span></span></td></tr> <tr> <td>EarliestEpochOrLowestSeries</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GeologicalContextEarliestEpochOrLowestSeries)</span></span></td></tr> <tr class=b> <td>EarliestEraOrLowestErathem</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GeologicalContextEarliestEraOrLowestErathem)</span></span></td></tr> <tr> <td>EarliestPeriodOrLowestSystem</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GeologicalContextEarliestPeriodOrLowestSystem)</span></span></td></tr> <tr class=b> <td>GeologicalContextFormation</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>GeologicalContextID</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GeologicalContextGeologicalContextID)</span></span></td></tr> <tr class=b> <td>GeologicalContextGroup</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>HighestBiostratigraphicZone</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GeologicalContextHighestBiostratigraphicZone)</span></span></td></tr> <tr class=b> <td>LatestAgeOrHighestStage</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GeologicalContextLatestAgeOrHighestStage)</span></span></td></tr> <tr> <td>LatestEonOrHighestEonothem</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GeologicalContextLatestEonOrHighestEonothem)</span></span></td></tr> <tr class=b> <td>LatestEpochOrHighestSeries</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GeologicalContextLatestEpochOrHighestSeries)</span></span></td></tr> <tr> <td>LatestEraOrHighestErathem</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GeologicalContextLatestEraOrHighestErathem)</span></span></td></tr> <tr class=b> <td>LatestPeriodOrHighestSystem</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GeologicalContextLatestPeriodOrHighestSystem)</span></span></td></tr> <tr> <td>LithostratigraphicTerms</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GeologicalContextLithostratigraphicTerms)</span></span></td></tr> <tr class=b> <td>LowestBiostratigraphicZone</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GeologicalContextLowestBiostratigraphicZone)</span></span></td></tr> <tr> <td>GeologicalContextMember</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>Identification</td> <td class=c>struct</td> <td>--&gt; <a href='DarwinCore.html#Identification'>DarwinCore Identification Struct</a></td></tr> <tr> <td>DateIdentified</td> <td class=c title=' _ = Flattened'>date_</td> <td><span class=s><span class=n>(IdentificationDateIdentified)</span></span></td></tr> <tr class=b> <td>IdentificationID</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(IdentificationIdentificationID)</span></span></td></tr> <tr> <td>IdentificationQualifier</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(IdentificationIdentificationQualifier)</span></span></td></tr> <tr class=b> <td>IdentificationReferences</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(IdentificationIdentificationReferences)</span></span></td></tr> <tr> <td>IdentificationRemarks</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(IdentificationIdentificationRemarks)</span></span></td></tr> <tr class=b> <td>IdentificationVerificationStatus</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(IdentificationIdentificationVerificationStatus)</span></span></td></tr> <tr> <td>IdentifiedBy</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(IdentificationIdentifiedBy)</span></span></td></tr> <tr class=b> <td>TypeStatus</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(IdentificationTypeStatus)</span></span></td></tr> <tr> <td>MeasurementOrFact</td> <td class=c>struct</td> <td>--&gt; <a href='DarwinCore.html#MeasurementOrFact'>DarwinCore MeasurementOrFact Struct</a></td></tr> <tr class=b> <td>MeasurementAccuracy</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(MeasurementOrFactMeasurementAccuracy)</span></span></td></tr> <tr> <td>MeasurementDeterminedBy</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(MeasurementOrFactMeasurementDeterminedBy)</span></span></td></tr> <tr class=b> <td>MeasurementDeterminedDate</td> <td class=c title=' _ = Flattened'>date_</td> <td><span class=s><span class=n>(MeasurementOrFactMeasurementDeterminedDate)</span></span></td></tr> <tr> <td>MeasurementID</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(MeasurementOrFactMeasurementID)</span></span></td></tr> <tr class=b> <td>MeasurementMethod</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(MeasurementOrFactMeasurementMethod)</span></span></td></tr> <tr> <td>MeasurementRemarks</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(MeasurementOrFactMeasurementRemarks)</span></span></td></tr> <tr class=b> <td>MeasurementType</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(MeasurementOrFactMeasurementType)</span></span></td></tr> <tr> <td>MeasurementUnit</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(MeasurementOrFactMeasurementUnit)</span></span></td></tr> <tr class=b> <td>MeasurementValue</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(MeasurementOrFactMeasurementValue)</span></span></td></tr> <tr> <td>Occurrence</td> <td class=c>struct</td> <td>--&gt; <a href='DarwinCore.html#Occurrence'>DarwinCore Occurrence Struct</a></td></tr> <tr class=b> <td>OccurrenceAssociatedMedia</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>OccurrenceAssociatedOccurrences</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>OccurrenceAssociatedReferences</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>OccurrenceAssociatedSequences</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>OccurrenceAssociatedTaxa</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>OccurrenceBehavior</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>OccurrenceCatalogNumber</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>OccurrenceDisposition</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>OccurrenceEstablishmentMeans</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>OccurrenceIndividualCount</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>OccurrenceIndividualID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>OccurrenceLifeStage</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>OccurrenceDetails</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(OccurrenceOccurrenceDetails)</span></span></td></tr> <tr> <td>OccurrenceID</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(OccurrenceOccurrenceID)</span></span></td></tr> <tr class=b> <td>OccurrenceRemarks</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(OccurrenceOccurrenceRemarks)</span></span></td></tr> <tr> <td>OccurrenceStatus</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(OccurrenceOccurrenceStatus)</span></span></td></tr> <tr class=b> <td>OccurrenceOtherCatalogNumbers</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>OccurrencePreparations</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>OccurrencePreviousIdentifications</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>OccurrenceRecordedBy</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>OccurrenceRecordNumber</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>OccurrenceReproductiveCondition</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>OccurrenceSex</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>Record</td> <td class=c>struct</td> <td>--&gt; <a href='DarwinCore.html#Record'>DarwinCore Record Struct</a></td></tr> <tr class=b> <td>RecordBasisOfRecord</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>RecordCollectionCode</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>RecordCollectionID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>RecordDataGeneralizations</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>RecordDatasetID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>RecordDatasetName</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>RecordDynamicProperties</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>RecordInformationWithheld</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>RecordInstitutionCode</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>RecordInstitutionID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>RecordOwnerInstitutionCode</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>ResourceRelationship</td> <td class=c>struct</td> <td>--&gt; <a href='DarwinCore.html#ResourceRelationship'>DarwinCore ResourceRelationship Struct</a></td></tr> <tr class=b> <td>RelatedResourceID</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(ResourceRelationshipRelatedResourceID)</span></span></td></tr> <tr> <td>RelationshipAccordingTo</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(ResourceRelationshipRelationshipAccordingTo)</span></span></td></tr> <tr class=b> <td>RelationshipEstablishedDate</td> <td class=c title=' _ = Flattened'>date_</td> <td><span class=s><span class=n>(ResourceRelationshipRelationshipEstablishedDate)</span></span></td></tr> <tr> <td>RelationshipOfResource</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(ResourceRelationshipRelationshipOfResource)</span></span></td></tr> <tr class=b> <td>RelationshipRemarks</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(ResourceRelationshipRelationshipRemarks)</span></span></td></tr> <tr> <td>ResourceID</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(ResourceRelationshipResourceID)</span></span></td></tr> <tr class=b> <td>ResourceRelationshipID</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(ResourceRelationshipResourceRelationshipID)</span></span></td></tr> <tr> <td>Taxon</td> <td class=c>struct</td> <td>--&gt; <a href='DarwinCore.html#Taxon'>DarwinCore Taxon Struct</a></td></tr> <tr class=b> <td>TaxonAcceptedNameUsage</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>TaxonAcceptedNameUsageID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonClass</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>TaxonFamily</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonGenus</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>TaxonHigherClassification</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonInfraspecificEpithet</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>TaxonKingdom</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonNameAccordingTo</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>TaxonNameAccordingToID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonNamePublishedIn</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>TaxonNamePublishedInID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonNamePublishedInYear</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>TaxonNomenclaturalCode</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonNomenclaturalStatus</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>TaxonOrder</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonOriginalNameUsage</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>TaxonOriginalNameUsageID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonParentNameUsage</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>TaxonParentNameUsageID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonPhylum</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>TaxonScientificName</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonScientificNameAuthorship</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>TaxonScientificNameID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonSpecificEpithet</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>TaxonSubgenus</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonConceptID</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(TaxonTaxonConceptID)</span></span></td></tr> <tr> <td>TaxonID</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(TaxonTaxonID)</span></span></td></tr> <tr class=b> <td>TaxonTaxonomicStatus</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>TaxonRank</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(TaxonTaxonRank)</span></span></td></tr> <tr class=b> <td>TaxonRemarks</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(TaxonTaxonRemarks)</span></span></td></tr> <tr> <td>TaxonVerbatimTaxonRank</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonVernacularName</td> <td class=c title=' _ = Flattened'>lang-alt_</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='DCTermsLocation'>DarwinCore DCTermsLocation Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Continent</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CoordinatePrecision</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>CoordinateUncertaintyInMeters</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Country</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>CountryCode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>County</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>DecimalLatitude</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>DecimalLongitude</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>FootprintSRS</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>FootprintSpatialFit</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>FootprintWKT</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>GeodeticDatum</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>GeoreferenceProtocol</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>GeoreferenceRemarks</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>GeoreferenceSources</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>GeoreferenceVerificationStatus</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>GeoreferencedBy</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>GeoreferencedDate</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>HigherGeography</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>HigherGeographyID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Island</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>IslandGroup</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Locality</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocationAccordingTo</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LocationID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocationRemarks</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>MaximumDepthInMeters</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>MaximumDistanceAboveSurfaceInMeters</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>MaximumElevationInMeters</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>MinimumDepthInMeters</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>MinimumDistanceAboveSurfaceInMeters</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>MinimumElevationInMeters</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Municipality</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>PointRadiusSpatialFit</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>StateProvince</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>VerbatimCoordinateSystem</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>VerbatimCoordinates</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>VerbatimDepth</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>VerbatimElevation</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>VerbatimLatitude</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>VerbatimLocality</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>VerbatimLongitude</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>VerbatimSRS</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>WaterBody</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Event'>DarwinCore Event Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Day</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>EarliestDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr> <td>EndDayOfYear</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>EventRemarks</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventTime</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr> <td>FieldNotes</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>FieldNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Habitat</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LatestDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr> <td>Month</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>SamplingEffort</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>SamplingProtocol</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>StartDayOfYear</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>VerbatimEventDate</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Year</td> <td class=c>integer</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='GeologicalContext'>DarwinCore GeologicalContext Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Bed</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>EarliestAgeOrLowestStage</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>EarliestEonOrLowestEonothem</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>EarliestEpochOrLowestSeries</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>EarliestEraOrLowestErathem</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>EarliestPeriodOrLowestSystem</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Formation</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>GeologicalContextID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Group</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>HighestBiostratigraphicZone</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LatestAgeOrHighestStage</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LatestEonOrHighestEonothem</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LatestEpochOrHighestSeries</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LatestEraOrHighestErathem</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LatestPeriodOrHighestSystem</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LithostratigraphicTerms</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LowestBiostratigraphicZone</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Member</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Identification'>DarwinCore Identification Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>DateIdentified</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>IdentificationID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>IdentificationQualifier</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>IdentificationReferences</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>IdentificationRemarks</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>IdentificationVerificationStatus</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>IdentifiedBy</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>TypeStatus</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MeasurementOrFact'>DarwinCore MeasurementOrFact Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>MeasurementAccuracy</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>MeasurementDeterminedBy</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>MeasurementDeterminedDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>MeasurementID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>MeasurementMethod</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>MeasurementRemarks</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>MeasurementType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>MeasurementUnit</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>MeasurementValue</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Occurrence'>DarwinCore Occurrence Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AssociatedMedia</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>AssociatedOccurrences</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>AssociatedReferences</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>AssociatedSequences</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>AssociatedTaxa</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Behavior</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>CatalogNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Disposition</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>EstablishmentMeans</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>IndividualCount</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>IndividualID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LifeStage</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>OccurrenceDetails</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>OccurrenceID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>OccurrenceRemarks</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>OccurrenceStatus</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>OtherCatalogNumbers</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Preparations</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>PreviousIdentifications</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>RecordNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>RecordedBy</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ReproductiveCondition</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Sex</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Record'>DarwinCore Record Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>BasisOfRecord</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CollectionCode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>CollectionID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>DataGeneralizations</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>DatasetID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>DatasetName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>DynamicProperties</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>InformationWithheld</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>InstitutionCode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>InstitutionID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>OwnerInstitutionCode</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ResourceRelationship'>DarwinCore ResourceRelationship Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>RelatedResourceID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>RelationshipAccordingTo</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>RelationshipEstablishedDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>RelationshipOfResource</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>RelationshipRemarks</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ResourceID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ResourceRelationshipID</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Taxon'>DarwinCore Taxon Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AcceptedNameUsage</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>AcceptedNameUsageID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Class</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Family</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Genus</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>HigherClassification</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>InfraspecificEpithet</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Kingdom</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>NameAccordingTo</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>NameAccordingToID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>NamePublishedIn</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>NamePublishedInID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>NamePublishedInYear</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>NomenclaturalCode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>NomenclaturalStatus</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Order</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>OriginalNameUsage</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>OriginalNameUsageID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ParentNameUsage</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ParentNameUsageID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Phylum</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ScientificName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ScientificNameAuthorship</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ScientificNameID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>SpecificEpithet</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Subgenus</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>TaxonConceptID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>TaxonRank</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaxonRemarks</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>TaxonomicStatus</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>VerbatimTaxonRank</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>VernacularName</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 23, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/DICOM.html�������������������������������������������������������000644 �000765 �000024 �00001137735 12071026560 020567� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>DICOM Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>DICOM Tags</h2> <p>The DICOM format is based on the ACR-NEMA specification, but adds a file header and a number of new tags. ExifTool will extract information from either type of file. The Tag ID&#39;s in the following table are the tag group and element numbers in hexadecimal, as given in the DICOM specification (see <a href="http://medical.nema.org/">http://medical.nema.org/</a>). The table below contains tags from the DICOM 2009 and earlier specifications plus some vendor-specific private tags.</p> <p>Note that DICOM information may be saved in other file formats using the <a href="XMP.html#DICOM">XMP DICOM Tags</a>.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>0002,0000</td> <td>FileMetaInfoGroupLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0002,0001</td> <td>FileMetaInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0002,0002</td> <td>MediaStorageSOPClassUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0002,0003</td> <td>MediaStorageSOPInstanceUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0002,0010</td> <td>TransferSyntaxUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0002,0012</td> <td>ImplementationClassUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0002,0013</td> <td>ImplementationVersionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0002,0016</td> <td>SourceApplicationEntityTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0002,0100</td> <td>PrivateInformationCreatorUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0002,0102</td> <td>PrivateInformation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0004,1130</td> <td>FileSetID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0004,1141</td> <td>FileSetDescriptorFileID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0004,1142</td> <td>SpecificCharacterSetOfFile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0004,1200</td> <td>FirstDirectoryRecordOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0004,1202</td> <td>LastDirectoryRecordOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0004,1212</td> <td>FileSetConsistencyFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0004,1220</td> <td>DirectoryRecordSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0004,1400</td> <td>OffsetOfNextDirectoryRecord</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0004,1410</td> <td>RecordInUseFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0004,1420</td> <td>LowerLevelDirectoryEntityOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0004,1430</td> <td>DirectoryRecordType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0004,1432</td> <td>PrivateRecordUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0004,1500</td> <td>ReferencedFileID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0004,1504</td> <td>MRDRDirectoryRecordOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0004,1510</td> <td>ReferencedSOPClassUIDInFile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0004,1511</td> <td>ReferencedSOPInstanceUIDInFile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0004,1512</td> <td>ReferencedTransferSyntaxUIDInFile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0004,151A</td> <td>ReferencedRelatedSOPClassUIDInFile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0004,1600</td> <td>NumberOfReferences</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0000</td> <td>IdentifyingGroupLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0001</td> <td>LengthToEnd</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0005</td> <td>SpecificCharacterSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0006</td> <td>LanguageCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0008</td> <td>ImageType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0010</td> <td>RecognitionCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0012</td> <td>InstanceCreationDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0013</td> <td>InstanceCreationTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0014</td> <td>InstanceCreatorUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0016</td> <td>SOPClassUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0018</td> <td>SOPInstanceUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,001A</td> <td>RelatedGeneralSOPClassUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,001B</td> <td>OriginalSpecializedSOPClassUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0020</td> <td>StudyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0021</td> <td>SeriesDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0022</td> <td>AcquisitionDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0023</td> <td>ContentDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0024</td> <td>OverlayDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0025</td> <td>CurveDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,002A</td> <td>AcquisitionDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0030</td> <td>StudyTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0031</td> <td>SeriesTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0032</td> <td>AcquisitionTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0033</td> <td>ContentTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0034</td> <td>OverlayTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0035</td> <td>CurveTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0040</td> <td>DataSetType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0041</td> <td>DataSetSubtype</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0042</td> <td>NuclearMedicineSeriesType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0050</td> <td>AccessionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0052</td> <td>QueryRetrieveLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0054</td> <td>RetrieveAETitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0056</td> <td>InstanceAvailability</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0058</td> <td>FailedSOPInstanceUIDList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0060</td> <td>Modality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0061</td> <td>ModalitiesInStudy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0062</td> <td>SOPClassesInStudy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0064</td> <td>ConversionType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0068</td> <td>PresentationIntentType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0070</td> <td>Manufacturer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0080</td> <td>InstitutionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0081</td> <td>InstitutionAddress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0082</td> <td>InstitutionCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0090</td> <td>ReferringPhysicianName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0092</td> <td>ReferringPhysicianAddress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0094</td> <td>ReferringPhysicianTelephoneNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0096</td> <td>ReferringPhysicianIDSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0100</td> <td>CodeValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0102</td> <td>CodingSchemeDesignator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0103</td> <td>CodingSchemeVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0104</td> <td>CodeMeaning</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0105</td> <td>MappingResource</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0106</td> <td>ContextGroupVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0107</td> <td>ContextGroupLocalVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,010B</td> <td>ContextGroupExtensionFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,010C</td> <td>CodingSchemeUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,010D</td> <td>ContextGroupExtensionCreatorUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,010F</td> <td>ContextIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0110</td> <td>CodingSchemeIDSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0112</td> <td>CodingSchemeRegistry</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0114</td> <td>CodingSchemeExternalID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0115</td> <td>CodingSchemeName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0116</td> <td>ResponsibleOrganization</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,0117</td> <td>ContextUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,0201</td> <td>TimezoneOffsetFromUTC</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1000</td> <td>NetworkID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1010</td> <td>StationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1030</td> <td>StudyDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1032</td> <td>ProcedureCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,103E</td> <td>SeriesDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1040</td> <td>InstitutionalDepartmentName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1048</td> <td>PhysiciansOfRecord</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1049</td> <td>PhysiciansOfRecordIDSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1050</td> <td>PerformingPhysicianName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1052</td> <td>PerformingPhysicianIDSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1060</td> <td>NameOfPhysicianReadingStudy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1062</td> <td>PhysicianReadingStudyIDSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1070</td> <td>OperatorsName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1072</td> <td>OperatorIDSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1080</td> <td>AdmittingDiagnosesDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1084</td> <td>AdmittingDiagnosesCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1090</td> <td>ManufacturersModelName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1100</td> <td>ReferencedResultsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1110</td> <td>ReferencedStudySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1111</td> <td>ReferencedProcedureStepSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1115</td> <td>ReferencedSeriesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1120</td> <td>ReferencedPatientSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1125</td> <td>ReferencedVisitSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1130</td> <td>ReferencedOverlaySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,113A</td> <td>ReferencedWaveformSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1140</td> <td>ReferencedImageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1145</td> <td>ReferencedCurveSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,114A</td> <td>ReferencedInstanceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1150</td> <td>ReferencedSOPClassUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1155</td> <td>ReferencedSOPInstanceUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,115A</td> <td>SOPClassesSupported</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1160</td> <td>ReferencedFrameNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1161</td> <td>SimpleFrameList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1162</td> <td>CalculatedFrameList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1163</td> <td>TimeRange</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1164</td> <td>FrameExtractionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1195</td> <td>TransactionUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1197</td> <td>FailureReason</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1198</td> <td>FailedSOPSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1199</td> <td>ReferencedSOPSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,1200</td> <td>OtherReferencedStudiesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,1250</td> <td>RelatedSeriesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2110</td> <td>LossyImageCompression</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2111</td> <td>DerivationDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2112</td> <td>SourceImageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2120</td> <td>StageName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2122</td> <td>StageNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2124</td> <td>NumberOfStages</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2127</td> <td>ViewName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2128</td> <td>ViewNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2129</td> <td>NumberOfEventTimers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,212A</td> <td>NumberOfViewsInStage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2130</td> <td>EventElapsedTimes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2132</td> <td>EventTimerNames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2133</td> <td>EventTimerSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2134</td> <td>EventTimeOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2135</td> <td>EventCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2142</td> <td>StartTrim</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2143</td> <td>StopTrim</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2144</td> <td>RecommendedDisplayFrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2200</td> <td>TransducerPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2204</td> <td>TransducerOrientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2208</td> <td>AnatomicStructure</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2218</td> <td>AnatomicRegionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2220</td> <td>AnatomicRegionModifierSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2228</td> <td>PrimaryAnatomicStructureSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2229</td> <td>AnatomicStructureOrRegionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2230</td> <td>AnatomicStructureModifierSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2240</td> <td>TransducerPositionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2242</td> <td>TransducerPositionModifierSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2244</td> <td>TransducerOrientationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2246</td> <td>TransducerOrientationModifierSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2253</td> <td>AnatomicEntrancePortalCodeSeqTrial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2255</td> <td>AnatomicApproachDirCodeSeqTrial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,2256</td> <td>AnatomicPerspectiveDescrTrial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,2257</td> <td>AnatomicPerspectiveCodeSeqTrial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,3001</td> <td>AlternateRepresentationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,3010</td> <td>IrradiationEventUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,4000</td> <td>IdentifyingComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,9007</td> <td>FrameType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,9092</td> <td>ReferencedImageEvidenceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,9121</td> <td>ReferencedRawDataSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,9123</td> <td>CreatorVersionUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,9124</td> <td>DerivationImageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,9154</td> <td>SourceImageEvidenceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,9205</td> <td>PixelPresentation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,9206</td> <td>VolumetricProperties</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,9207</td> <td>VolumeBasedCalculationTechnique</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,9208</td> <td>ComplexImageComponent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,9209</td> <td>AcquisitionContrast</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,9215</td> <td>DerivationCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,9237</td> <td>GrayscalePresentationStateSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,9410</td> <td>ReferencedOtherPlaneSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,9458</td> <td>FrameDisplaySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0008,9459</td> <td>RecommendedDisplayFrameRateInFloat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0008,9460</td> <td>SkipFrameRangeFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0009,1001</td> <td>FullFidelity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0009,1002</td> <td>SuiteID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0009,1004</td> <td>ProductID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0009,1027</td> <td>ImageActualDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0009,1030</td> <td>ServiceID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0009,1031</td> <td>MobileLocationNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0009,10E3</td> <td>EquipmentUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0009,10E6</td> <td>GenesisVersionNow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0009,10E7</td> <td>ExamRecordChecksum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0009,10E9</td> <td>ActualSeriesDataTimeStamp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,0000</td> <td>PatientGroupLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,0010</td> <td>PatientName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,0020</td> <td>PatientID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,0021</td> <td>IssuerOfPatientID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,0022</td> <td>TypeOfPatientID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,0030</td> <td>PatientBirthDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,0032</td> <td>PatientBirthTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,0040</td> <td>PatientSex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,0050</td> <td>PatientInsurancePlanCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,0101</td> <td>PatientPrimaryLanguageCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,0102</td> <td>PatientPrimaryLanguageCodeModSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,1000</td> <td>OtherPatientIDs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,1001</td> <td>OtherPatientNames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,1002</td> <td>OtherPatientIDsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,1005</td> <td>PatientBirthName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,1010</td> <td>PatientAge</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,1020</td> <td>PatientSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,1030</td> <td>PatientWeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,1040</td> <td>PatientAddress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,1050</td> <td>InsurancePlanIdentification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,1060</td> <td>PatientMotherBirthName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,1080</td> <td>MilitaryRank</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,1081</td> <td>BranchOfService</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,1090</td> <td>MedicalRecordLocator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,2000</td> <td>MedicalAlerts</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,2110</td> <td>Allergies</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,2150</td> <td>CountryOfResidence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,2152</td> <td>RegionOfResidence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,2154</td> <td>PatientTelephoneNumbers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,2160</td> <td>EthnicGroup</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,2180</td> <td>Occupation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,21A0</td> <td>SmokingStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,21B0</td> <td>AdditionalPatientHistory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,21C0</td> <td>PregnancyStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,21D0</td> <td>LastMenstrualDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,21F0</td> <td>PatientReligiousPreference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,2201</td> <td>PatientSpeciesDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,2202</td> <td>PatientSpeciesCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,2203</td> <td>PatientSexNeutered</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,2210</td> <td>AnatomicalOrientationType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,2292</td> <td>PatientBreedDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,2293</td> <td>PatientBreedCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,2294</td> <td>BreedRegistrationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,2295</td> <td>BreedRegistrationNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,2296</td> <td>BreedRegistryCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,2297</td> <td>ResponsiblePerson</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,2298</td> <td>ResponsiblePersonRole</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,2299</td> <td>ResponsibleOrganization</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0010,4000</td> <td>PatientComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0010,9431</td> <td>ExaminedBodyThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0011,1010</td> <td>PatientStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0012,0010</td> <td>ClinicalTrialSponsorName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0012,0020</td> <td>ClinicalTrialProtocolID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0012,0021</td> <td>ClinicalTrialProtocolName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0012,0030</td> <td>ClinicalTrialSiteID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0012,0031</td> <td>ClinicalTrialSiteName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0012,0040</td> <td>ClinicalTrialSubjectID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0012,0042</td> <td>ClinicalTrialSubjectReadingID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0012,0050</td> <td>ClinicalTrialTimePointID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0012,0051</td> <td>ClinicalTrialTimePointDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0012,0060</td> <td>ClinicalTrialCoordinatingCenter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0012,0062</td> <td>PatientIdentityRemoved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0012,0063</td> <td>DeidentificationMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0012,0064</td> <td>DeidentificationMethodCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0012,0071</td> <td>ClinicalTrialSeriesID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0012,0072</td> <td>ClinicalTrialSeriesDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0012,0084</td> <td>DistributionType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0012,0085</td> <td>ConsentForDistributionFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0000</td> <td>AcquisitionGroupLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0010</td> <td>ContrastBolusAgent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0012</td> <td>ContrastBolusAgentSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0014</td> <td>ContrastBolusAdministrationRoute</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0015</td> <td>BodyPartExamined</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0020</td> <td>ScanningSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0021</td> <td>SequenceVariant</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0022</td> <td>ScanOptions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0023</td> <td>MRAcquisitionType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0024</td> <td>SequenceName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0025</td> <td>AngioFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0026</td> <td>InterventionDrugInformationSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0027</td> <td>InterventionDrugStopTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0028</td> <td>InterventionDrugDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0029</td> <td>InterventionDrugSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,002A</td> <td>AdditionalDrugSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0030</td> <td>Radionuclide</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0031</td> <td>Radiopharmaceutical</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0032</td> <td>EnergyWindowCenterline</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0033</td> <td>EnergyWindowTotalWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0034</td> <td>InterventionDrugName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0035</td> <td>InterventionDrugStartTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0036</td> <td>InterventionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0037</td> <td>TherapyType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0038</td> <td>InterventionStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0039</td> <td>TherapyDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,003A</td> <td>InterventionDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0040</td> <td>CineRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0042</td> <td>InitialCineRunState</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0050</td> <td>SliceThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0060</td> <td>KVP</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0070</td> <td>CountsAccumulated</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0071</td> <td>AcquisitionTerminationCondition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0072</td> <td>EffectiveDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0073</td> <td>AcquisitionStartCondition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0074</td> <td>AcquisitionStartConditionData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0075</td> <td>AcquisitionEndConditionData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0080</td> <td>RepetitionTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0081</td> <td>EchoTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0082</td> <td>InversionTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0083</td> <td>NumberOfAverages</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0084</td> <td>ImagingFrequency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0085</td> <td>ImagedNucleus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0086</td> <td>EchoNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0087</td> <td>MagneticFieldStrength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0088</td> <td>SpacingBetweenSlices</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0089</td> <td>NumberOfPhaseEncodingSteps</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0090</td> <td>DataCollectionDiameter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0091</td> <td>EchoTrainLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0093</td> <td>PercentSampling</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,0094</td> <td>PercentPhaseFieldOfView</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,0095</td> <td>PixelBandwidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1000</td> <td>DeviceSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1002</td> <td>DeviceUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1003</td> <td>DeviceID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1004</td> <td>PlateID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1005</td> <td>GeneratorID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1006</td> <td>GridID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1007</td> <td>CassetteID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1008</td> <td>GantryID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1010</td> <td>SecondaryCaptureDeviceID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1011</td> <td>HardcopyCreationDeviceID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1012</td> <td>DateOfSecondaryCapture</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1014</td> <td>TimeOfSecondaryCapture</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1016</td> <td>SecondaryCaptureDeviceManufacturer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1017</td> <td>HardcopyDeviceManufacturer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1018</td> <td>SecondaryCaptureDeviceModelName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1019</td> <td>SecondaryCaptureDeviceSoftwareVers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,101A</td> <td>HardcopyDeviceSoftwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,101B</td> <td>HardcopyDeviceModelName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1020</td> <td>SoftwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1022</td> <td>VideoImageFormatAcquired</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1023</td> <td>DigitalImageFormatAcquired</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1030</td> <td>ProtocolName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1040</td> <td>ContrastBolusRoute</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1041</td> <td>ContrastBolusVolume</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1042</td> <td>ContrastBolusStartTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1043</td> <td>ContrastBolusStopTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1044</td> <td>ContrastBolusTotalDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1045</td> <td>SyringeCounts</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1046</td> <td>ContrastFlowRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1047</td> <td>ContrastFlowDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1048</td> <td>ContrastBolusIngredient</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1049</td> <td>ContrastBolusConcentration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1050</td> <td>SpatialResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1060</td> <td>TriggerTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1061</td> <td>TriggerSourceOrType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1062</td> <td>NominalInterval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1063</td> <td>FrameTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1064</td> <td>CardiacFramingType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1065</td> <td>FrameTimeVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1066</td> <td>FrameDelay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1067</td> <td>ImageTriggerDelay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1068</td> <td>MultiplexGroupTimeOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1069</td> <td>TriggerTimeOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,106A</td> <td>SynchronizationTrigger</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,106C</td> <td>SynchronizationChannel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,106E</td> <td>TriggerSamplePosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1070</td> <td>RadiopharmaceuticalRoute</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1071</td> <td>RadiopharmaceuticalVolume</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1072</td> <td>RadiopharmaceuticalStartTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1073</td> <td>RadiopharmaceuticalStopTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1074</td> <td>RadionuclideTotalDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1075</td> <td>RadionuclideHalfLife</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1076</td> <td>RadionuclidePositronFraction</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1077</td> <td>RadiopharmaceuticalSpecActivity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1078</td> <td>RadiopharmaceuticalStartDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1079</td> <td>RadiopharmaceuticalStopDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1080</td> <td>BeatRejectionFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1081</td> <td>LowRRValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1082</td> <td>HighRRValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1083</td> <td>IntervalsAcquired</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1084</td> <td>IntervalsRejected</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1085</td> <td>PVCRejection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1086</td> <td>SkipBeats</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1088</td> <td>HeartRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1090</td> <td>CardiacNumberOfImages</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1094</td> <td>TriggerWindow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1100</td> <td>ReconstructionDiameter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1110</td> <td>DistanceSourceToDetector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1111</td> <td>DistanceSourceToPatient</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1114</td> <td>EstimatedRadiographicMagnification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1120</td> <td>GantryDetectorTilt</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1121</td> <td>GantryDetectorSlew</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1130</td> <td>TableHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1131</td> <td>TableTraverse</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1134</td> <td>TableMotion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1135</td> <td>TableVerticalIncrement</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1136</td> <td>TableLateralIncrement</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1137</td> <td>TableLongitudinalIncrement</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1138</td> <td>TableAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,113A</td> <td>TableType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1140</td> <td>RotationDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1141</td> <td>AngularPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1142</td> <td>RadialPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1143</td> <td>ScanArc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1144</td> <td>AngularStep</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1145</td> <td>CenterOfRotationOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1146</td> <td>RotationOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1147</td> <td>FieldOfViewShape</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1149</td> <td>FieldOfViewDimensions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1150</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1151</td> <td>XRayTubeCurrent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1152</td> <td>Exposure</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1153</td> <td>ExposureInMicroAmpSec</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1154</td> <td>AveragePulseWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1155</td> <td>RadiationSetting</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1156</td> <td>RectificationType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,115A</td> <td>RadiationMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,115E</td> <td>ImageAreaDoseProduct</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1160</td> <td>FilterType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1161</td> <td>TypeOfFilters</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1162</td> <td>IntensifierSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1164</td> <td>ImagerPixelSpacing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1166</td> <td>Grid</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1170</td> <td>GeneratorPower</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1180</td> <td>CollimatorGridName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1181</td> <td>CollimatorType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1182</td> <td>FocalDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1183</td> <td>XFocusCenter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1184</td> <td>YFocusCenter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1190</td> <td>FocalSpots</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1191</td> <td>AnodeTargetMaterial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,11A0</td> <td>BodyPartThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,11A2</td> <td>CompressionForce</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1200</td> <td>DateOfLastCalibration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1201</td> <td>TimeOfLastCalibration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1210</td> <td>ConvolutionKernel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1240</td> <td>UpperLowerPixelValues</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1242</td> <td>ActualFrameDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1243</td> <td>CountRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1244</td> <td>PreferredPlaybackSequencing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1250</td> <td>ReceiveCoilName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1251</td> <td>TransmitCoilName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1260</td> <td>PlateType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1261</td> <td>PhosphorType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1300</td> <td>ScanVelocity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1301</td> <td>WholeBodyTechnique</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1302</td> <td>ScanLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1310</td> <td>AcquisitionMatrix</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1312</td> <td>InPlanePhaseEncodingDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1314</td> <td>FlipAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1315</td> <td>VariableFlipAngleFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1316</td> <td>SAR</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1318</td> <td>DB-Dt</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1400</td> <td>AcquisitionDeviceProcessingDescr</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1401</td> <td>AcquisitionDeviceProcessingCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1402</td> <td>CassetteOrientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1403</td> <td>CassetteSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1404</td> <td>ExposuresOnPlate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1405</td> <td>RelativeXRayExposure</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1450</td> <td>ColumnAngulation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1460</td> <td>TomoLayerHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1470</td> <td>TomoAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1480</td> <td>TomoTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1490</td> <td>TomoType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1491</td> <td>TomoClass</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1495</td> <td>NumberOfTomosynthesisSourceImages</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1500</td> <td>PositionerMotion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1508</td> <td>PositionerType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1510</td> <td>PositionerPrimaryAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1511</td> <td>PositionerSecondaryAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1520</td> <td>PositionerPrimaryAngleIncrement</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1521</td> <td>PositionerSecondaryAngleIncrement</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1530</td> <td>DetectorPrimaryAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1531</td> <td>DetectorSecondaryAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1600</td> <td>ShutterShape</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1602</td> <td>ShutterLeftVerticalEdge</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1604</td> <td>ShutterRightVerticalEdge</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1606</td> <td>ShutterUpperHorizontalEdge</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1608</td> <td>ShutterLowerHorizontalEdge</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1610</td> <td>CenterOfCircularShutter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1612</td> <td>RadiusOfCircularShutter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1620</td> <td>VerticesOfPolygonalShutter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1622</td> <td>ShutterPresentationValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1623</td> <td>ShutterOverlayGroup</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1624</td> <td>ShutterPresentationColorCIELabVal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1700</td> <td>CollimatorShape</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1702</td> <td>CollimatorLeftVerticalEdge</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1704</td> <td>CollimatorRightVerticalEdge</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1706</td> <td>CollimatorUpperHorizontalEdge</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1708</td> <td>CollimatorLowerHorizontalEdge</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1710</td> <td>CenterOfCircularCollimator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1712</td> <td>RadiusOfCircularCollimator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1720</td> <td>VerticesOfPolygonalCollimator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1800</td> <td>AcquisitionTimeSynchronized</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1801</td> <td>TimeSource</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,1802</td> <td>TimeDistributionProtocol</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,1803</td> <td>NTPSourceAddress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,2001</td> <td>PageNumberVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,2002</td> <td>FrameLabelVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,2003</td> <td>FramePrimaryAngleVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,2004</td> <td>FrameSecondaryAngleVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,2005</td> <td>SliceLocationVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,2006</td> <td>DisplayWindowLabelVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,2010</td> <td>NominalScannedPixelSpacing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,2020</td> <td>DigitizingDeviceTransportDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,2030</td> <td>RotationOfScannedFilm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,3100</td> <td>IVUSAcquisition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,3101</td> <td>IVUSPullbackRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,3102</td> <td>IVUSGatedRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,3103</td> <td>IVUSPullbackStartFrameNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,3104</td> <td>IVUSPullbackStopFrameNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,3105</td> <td>LesionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,4000</td> <td>AcquisitionComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,5000</td> <td>OutputPower</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,5010</td> <td>TransducerData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,5012</td> <td>FocusDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,5020</td> <td>ProcessingFunction</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,5021</td> <td>PostprocessingFunction</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,5022</td> <td>MechanicalIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,5024</td> <td>BoneThermalIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,5026</td> <td>CranialThermalIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,5027</td> <td>SoftTissueThermalIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,5028</td> <td>SoftTissueFocusThermalIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,5029</td> <td>SoftTissueSurfaceThermalIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,5030</td> <td>DynamicRange</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,5040</td> <td>TotalGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,5050</td> <td>DepthOfScanField</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,5100</td> <td>PatientPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,5101</td> <td>ViewPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,5104</td> <td>ProjectionEponymousNameCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,5210</td> <td>ImageTransformationMatrix</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,5212</td> <td>ImageTranslationVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6000</td> <td>Sensitivity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,6011</td> <td>SequenceOfUltrasoundRegions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6012</td> <td>RegionSpatialFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,6014</td> <td>RegionDataType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6016</td> <td>RegionFlags</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,6018</td> <td>RegionLocationMinX0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,601A</td> <td>RegionLocationMinY0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,601C</td> <td>RegionLocationMaxX1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,601E</td> <td>RegionLocationMaxY1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,6020</td> <td>ReferencePixelX0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6022</td> <td>ReferencePixelY0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,6024</td> <td>PhysicalUnitsXDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6026</td> <td>PhysicalUnitsYDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,6028</td> <td>ReferencePixelPhysicalValueX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,602A</td> <td>ReferencePixelPhysicalValueY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,602C</td> <td>PhysicalDeltaX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,602E</td> <td>PhysicalDeltaY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,6030</td> <td>TransducerFrequency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6031</td> <td>TransducerType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,6032</td> <td>PulseRepetitionFrequency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6034</td> <td>DopplerCorrectionAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,6036</td> <td>SteeringAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6038</td> <td>DopplerSampleVolumeXPosRetired</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,6039</td> <td>DopplerSampleVolumeXPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,603A</td> <td>DopplerSampleVolumeYPosRetired</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,603B</td> <td>DopplerSampleVolumeYPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,603C</td> <td>TMLinePositionX0Retired</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,603D</td> <td>TMLinePositionX0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,603E</td> <td>TMLinePositionY0Retired</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,603F</td> <td>TMLinePositionY0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6040</td> <td>TMLinePositionX1Retired</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,6041</td> <td>TMLinePositionX1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6042</td> <td>TMLinePositionY1Retired</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,6043</td> <td>TMLinePositionY1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6044</td> <td>PixelComponentOrganization</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,6046</td> <td>PixelComponentMask</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6048</td> <td>PixelComponentRangeStart</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,604A</td> <td>PixelComponentRangeStop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,604C</td> <td>PixelComponentPhysicalUnits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,604E</td> <td>PixelComponentDataType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6050</td> <td>NumberOfTableBreakPoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,6052</td> <td>TableOfXBreakPoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6054</td> <td>TableOfYBreakPoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,6056</td> <td>NumberOfTableEntries</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6058</td> <td>TableOfPixelValues</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,605A</td> <td>TableOfParameterValues</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,6060</td> <td>RWaveTimeVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7000</td> <td>DetectorConditionsNominalFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7001</td> <td>DetectorTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7004</td> <td>DetectorType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7005</td> <td>DetectorConfiguration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7006</td> <td>DetectorDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7008</td> <td>DetectorMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,700A</td> <td>DetectorID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,700C</td> <td>DateOfLastDetectorCalibration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,700E</td> <td>TimeOfLastDetectorCalibration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7010</td> <td>DetectorExposuresSinceCalibration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7011</td> <td>DetectorExposuresSinceManufactured</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7012</td> <td>DetectorTimeSinceLastExposure</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7014</td> <td>DetectorActiveTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7016</td> <td>DetectorActiveOffsetFromExposure</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,701A</td> <td>DetectorBinning</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7020</td> <td>DetectorElementPhysicalSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7022</td> <td>DetectorElementSpacing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7024</td> <td>DetectorActiveShape</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7026</td> <td>DetectorActiveDimensions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7028</td> <td>DetectorActiveOrigin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,702A</td> <td>DetectorManufacturerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,702B</td> <td>DetectorManufacturersModelName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7030</td> <td>FieldOfViewOrigin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7032</td> <td>FieldOfViewRotation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7034</td> <td>FieldOfViewHorizontalFlip</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7040</td> <td>GridAbsorbingMaterial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7041</td> <td>GridSpacingMaterial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7042</td> <td>GridThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7044</td> <td>GridPitch</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7046</td> <td>GridAspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7048</td> <td>GridPeriod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,704C</td> <td>GridFocalDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7050</td> <td>FilterMaterial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7052</td> <td>FilterThicknessMinimum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7054</td> <td>FilterThicknessMaximum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7060</td> <td>ExposureControlMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7062</td> <td>ExposureControlModeDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,7064</td> <td>ExposureStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,7065</td> <td>PhototimerSetting</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,8150</td> <td>ExposureTimeInMicroSec</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,8151</td> <td>XRayTubeCurrentInMicroAmps</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9004</td> <td>ContentQualification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9005</td> <td>PulseSequenceName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9006</td> <td>MRImagingModifierSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9008</td> <td>EchoPulseSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9009</td> <td>InversionRecovery</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9010</td> <td>FlowCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9011</td> <td>MultipleSpinEcho</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9012</td> <td>MultiPlanarExcitation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9014</td> <td>PhaseContrast</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9015</td> <td>TimeOfFlightContrast</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9016</td> <td>Spoiling</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9017</td> <td>SteadyStatePulseSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9018</td> <td>EchoPlanarPulseSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9019</td> <td>TagAngleFirstAxis</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9020</td> <td>MagnetizationTransfer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9021</td> <td>T2Preparation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9022</td> <td>BloodSignalNulling</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9024</td> <td>SaturationRecovery</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9025</td> <td>SpectrallySelectedSuppression</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9026</td> <td>SpectrallySelectedExcitation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9027</td> <td>SpatialPresaturation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9028</td> <td>Tagging</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9029</td> <td>OversamplingPhase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9030</td> <td>TagSpacingFirstDimension</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9032</td> <td>GeometryOfKSpaceTraversal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9033</td> <td>SegmentedKSpaceTraversal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9034</td> <td>RectilinearPhaseEncodeReordering</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9035</td> <td>TagThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9036</td> <td>PartialFourierDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9037</td> <td>CardiacSynchronizationTechnique</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9041</td> <td>ReceiveCoilManufacturerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9042</td> <td>MRReceiveCoilSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9043</td> <td>ReceiveCoilType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9044</td> <td>QuadratureReceiveCoil</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9045</td> <td>MultiCoilDefinitionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9046</td> <td>MultiCoilConfiguration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9047</td> <td>MultiCoilElementName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9048</td> <td>MultiCoilElementUsed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9049</td> <td>MRTransmitCoilSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9050</td> <td>TransmitCoilManufacturerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9051</td> <td>TransmitCoilType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9052</td> <td>SpectralWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9053</td> <td>ChemicalShiftReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9054</td> <td>VolumeLocalizationTechnique</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9058</td> <td>MRAcquisitionFrequencyEncodeSteps</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9059</td> <td>Decoupling</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9060</td> <td>DecoupledNucleus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9061</td> <td>DecouplingFrequency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9062</td> <td>DecouplingMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9063</td> <td>DecouplingChemicalShiftReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9064</td> <td>KSpaceFiltering</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9065</td> <td>TimeDomainFiltering</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9066</td> <td>NumberOfZeroFills</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9067</td> <td>BaselineCorrection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9069</td> <td>ParallelReductionFactorInPlane</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9070</td> <td>CardiacRRIntervalSpecified</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9073</td> <td>AcquisitionDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9074</td> <td>FrameAcquisitionDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9075</td> <td>DiffusionDirectionality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9076</td> <td>DiffusionGradientDirectionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9077</td> <td>ParallelAcquisition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9078</td> <td>ParallelAcquisitionTechnique</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9079</td> <td>InversionTimes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9080</td> <td>MetaboliteMapDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9081</td> <td>PartialFourier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9082</td> <td>EffectiveEchoTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9083</td> <td>MetaboliteMapCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9084</td> <td>ChemicalShiftSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9085</td> <td>CardiacSignalSource</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9087</td> <td>DiffusionBValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9089</td> <td>DiffusionGradientOrientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9090</td> <td>VelocityEncodingDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9091</td> <td>VelocityEncodingMinimumValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9093</td> <td>NumberOfKSpaceTrajectories</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9094</td> <td>CoverageOfKSpace</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9095</td> <td>SpectroscopyAcquisitionPhaseRows</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9096</td> <td>ParallelReductFactorInPlaneRetired</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9098</td> <td>TransmitterFrequency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9100</td> <td>ResonantNucleus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9101</td> <td>FrequencyCorrection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9103</td> <td>MRSpectroscopyFOV-GeometrySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9104</td> <td>SlabThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9105</td> <td>SlabOrientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9106</td> <td>MidSlabPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9107</td> <td>MRSpatialSaturationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9112</td> <td>MRTimingAndRelatedParametersSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9114</td> <td>MREchoSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9115</td> <td>MRModifierSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9117</td> <td>MRDiffusionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9118</td> <td>CardiacTriggerSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9119</td> <td>MRAveragesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9125</td> <td>MRFOV-GeometrySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9126</td> <td>VolumeLocalizationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9127</td> <td>SpectroscopyAcquisitionDataColumns</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9147</td> <td>DiffusionAnisotropyType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9151</td> <td>FrameReferenceDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9152</td> <td>MRMetaboliteMapSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9155</td> <td>ParallelReductionFactorOutOfPlane</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9159</td> <td>SpectroscopyOutOfPlanePhaseSteps</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9166</td> <td>BulkMotionStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9168</td> <td>ParallelReductionFactSecondInPlane</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9169</td> <td>CardiacBeatRejectionTechnique</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9170</td> <td>RespiratoryMotionCompTechnique</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9171</td> <td>RespiratorySignalSource</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9172</td> <td>BulkMotionCompensationTechnique</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9173</td> <td>BulkMotionSignalSource</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9174</td> <td>ApplicableSafetyStandardAgency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9175</td> <td>ApplicableSafetyStandardDescr</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9176</td> <td>OperatingModeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9177</td> <td>OperatingModeType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9178</td> <td>OperatingMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9179</td> <td>SpecificAbsorptionRateDefinition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9180</td> <td>GradientOutputType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9181</td> <td>SpecificAbsorptionRateValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9182</td> <td>GradientOutput</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9183</td> <td>FlowCompensationDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9184</td> <td>TaggingDelay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9185</td> <td>RespiratoryMotionCompTechDescr</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9186</td> <td>RespiratorySignalSourceID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9195</td> <td>ChemicalShiftsMinIntegrateLimitHz</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9196</td> <td>ChemicalShiftsMaxIntegrateLimitHz</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9197</td> <td>MRVelocityEncodingSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9198</td> <td>FirstOrderPhaseCorrection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9199</td> <td>WaterReferencedPhaseCorrection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9200</td> <td>MRSpectroscopyAcquisitionType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9214</td> <td>RespiratoryCyclePosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9217</td> <td>VelocityEncodingMaximumValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9218</td> <td>TagSpacingSecondDimension</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9219</td> <td>TagAngleSecondAxis</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9220</td> <td>FrameAcquisitionDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9226</td> <td>MRImageFrameTypeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9227</td> <td>MRSpectroscopyFrameTypeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9231</td> <td>MRAcqPhaseEncodingStepsInPlane</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9232</td> <td>MRAcqPhaseEncodingStepsOutOfPlane</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9234</td> <td>SpectroscopyAcqPhaseColumns</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9236</td> <td>CardiacCyclePosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9239</td> <td>SpecificAbsorptionRateSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9240</td> <td>RFEchoTrainLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9241</td> <td>GradientEchoTrainLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9295</td> <td>ChemicalShiftsMinIntegrateLimitPPM</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9296</td> <td>ChemicalShiftsMaxIntegrateLimitPPM</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9301</td> <td>CTAcquisitionTypeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9302</td> <td>AcquisitionType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9303</td> <td>TubeAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9304</td> <td>CTAcquisitionDetailsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9305</td> <td>RevolutionTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9306</td> <td>SingleCollimationWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9307</td> <td>TotalCollimationWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9308</td> <td>CTTableDynamicsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9309</td> <td>TableSpeed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9310</td> <td>TableFeedPerRotation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9311</td> <td>SpiralPitchFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9312</td> <td>CTGeometrySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9313</td> <td>DataCollectionCenterPatient</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9314</td> <td>CTReconstructionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9315</td> <td>ReconstructionAlgorithm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9316</td> <td>ConvolutionKernelGroup</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9317</td> <td>ReconstructionFieldOfView</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9318</td> <td>ReconstructionTargetCenterPatient</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9319</td> <td>ReconstructionAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9320</td> <td>ImageFilter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9321</td> <td>CTExposureSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9322</td> <td>ReconstructionPixelSpacing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9323</td> <td>ExposureModulationType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9324</td> <td>EstimatedDoseSaving</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9325</td> <td>CTXRayDetailsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9326</td> <td>CTPositionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9327</td> <td>TablePosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9328</td> <td>ExposureTimeInMilliSec</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9329</td> <td>CTImageFrameTypeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9330</td> <td>XRayTubeCurrentInMilliAmps</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9332</td> <td>ExposureInMilliAmpSec</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9333</td> <td>ConstantVolumeFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9334</td> <td>FluoroscopyFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9335</td> <td>SourceToDataCollectionCenterDist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9337</td> <td>ContrastBolusAgentNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9338</td> <td>ContrastBolusIngredientCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9340</td> <td>ContrastAdministrationProfileSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9341</td> <td>ContrastBolusUsageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9342</td> <td>ContrastBolusAgentAdministered</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9343</td> <td>ContrastBolusAgentDetected</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9344</td> <td>ContrastBolusAgentPhase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9345</td> <td>CTDIvol</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9346</td> <td>CTDIPhantomTypeCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9351</td> <td>CalciumScoringMassFactorPatient</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9352</td> <td>CalciumScoringMassFactorDevice</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9353</td> <td>EnergyWeightingFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9360</td> <td>CTAdditionalXRaySourceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9401</td> <td>ProjectionPixelCalibrationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9402</td> <td>DistanceSourceToIsocenter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9403</td> <td>DistanceObjectToTableTop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9404</td> <td>ObjectPixelSpacingInCenterOfBeam</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9405</td> <td>PositionerPositionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9406</td> <td>TablePositionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9407</td> <td>CollimatorShapeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9412</td> <td>XA-XRFFrameCharacteristicsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9417</td> <td>FrameAcquisitionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9420</td> <td>XRayReceptorType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9423</td> <td>AcquisitionProtocolName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9424</td> <td>AcquisitionProtocolDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9425</td> <td>ContrastBolusIngredientOpaque</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9426</td> <td>DistanceReceptorPlaneToDetHousing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9427</td> <td>IntensifierActiveShape</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9428</td> <td>IntensifierActiveDimensions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9429</td> <td>PhysicalDetectorSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9430</td> <td>PositionOfIsocenterProjection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9432</td> <td>FieldOfViewSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9433</td> <td>FieldOfViewDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9434</td> <td>ExposureControlSensingRegionsSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9435</td> <td>ExposureControlSensingRegionShape</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9436</td> <td>ExposureControlSensRegionLeftEdge</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9437</td> <td>ExposureControlSensRegionRightEdge</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9440</td> <td>CenterOfCircExposControlSensRegion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9441</td> <td>RadiusOfCircExposControlSensRegion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9447</td> <td>ColumnAngulationPatient</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9449</td> <td>BeamAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9451</td> <td>FrameDetectorParametersSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9452</td> <td>CalculatedAnatomyThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9455</td> <td>CalibrationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9456</td> <td>ObjectThicknessSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9457</td> <td>PlaneIdentification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9461</td> <td>FieldOfViewDimensionsInFloat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9462</td> <td>IsocenterReferenceSystemSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9463</td> <td>PositionerIsocenterPrimaryAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9464</td> <td>PositionerIsocenterSecondaryAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9465</td> <td>PositionerIsocenterDetRotAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9466</td> <td>TableXPositionToIsocenter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9467</td> <td>TableYPositionToIsocenter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9468</td> <td>TableZPositionToIsocenter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9469</td> <td>TableHorizontalRotationAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9470</td> <td>TableHeadTiltAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9471</td> <td>TableCradleTiltAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9472</td> <td>FrameDisplayShutterSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9473</td> <td>AcquiredImageAreaDoseProduct</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9474</td> <td>CArmPositionerTabletopRelationship</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9476</td> <td>XRayGeometrySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9477</td> <td>IrradiationEventIDSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9504</td> <td>XRay3DFrameTypeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9506</td> <td>ContributingSourcesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9507</td> <td>XRay3DAcquisitionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9508</td> <td>PrimaryPositionerScanArc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9509</td> <td>SecondaryPositionerScanArc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9510</td> <td>PrimaryPositionerScanStartAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9511</td> <td>SecondaryPositionerScanStartAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9514</td> <td>PrimaryPositionerIncrement</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9515</td> <td>SecondaryPositionerIncrement</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9516</td> <td>StartAcquisitionDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9517</td> <td>EndAcquisitionDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9524</td> <td>ApplicationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9525</td> <td>ApplicationVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9526</td> <td>ApplicationManufacturer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9527</td> <td>AlgorithmType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9528</td> <td>AlgorithmDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9530</td> <td>XRay3DReconstructionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9531</td> <td>ReconstructionDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9538</td> <td>PerProjectionAcquisitionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9601</td> <td>DiffusionBMatrixSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9602</td> <td>DiffusionBValueXX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9603</td> <td>DiffusionBValueXY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9604</td> <td>DiffusionBValueXZ</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9605</td> <td>DiffusionBValueYY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9606</td> <td>DiffusionBValueYZ</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9607</td> <td>DiffusionBValueZZ</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9701</td> <td>DecayCorrectionDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9715</td> <td>StartDensityThreshold</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9722</td> <td>TerminationTimeThreshold</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9725</td> <td>DetectorGeometry</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9727</td> <td>AxialDetectorDimension</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9735</td> <td>PETPositionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9739</td> <td>NumberOfIterations</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9740</td> <td>NumberOfSubsets</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9751</td> <td>PETFrameTypeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9756</td> <td>ReconstructionType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9758</td> <td>DecayCorrected</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9759</td> <td>AttenuationCorrected</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9760</td> <td>ScatterCorrected</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9761</td> <td>DeadTimeCorrected</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9762</td> <td>GantryMotionCorrected</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9763</td> <td>PatientMotionCorrected</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9765</td> <td>RandomsCorrected</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9767</td> <td>SensitivityCalibrated</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9801</td> <td>DepthsOfFocus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9804</td> <td>ExclusionStartDatetime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9805</td> <td>ExclusionDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,9807</td> <td>ImageDataTypeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,9808</td> <td>DataType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,980B</td> <td>AliasedDataType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,A001</td> <td>ContributingEquipmentSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0018,A002</td> <td>ContributionDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0018,A003</td> <td>ContributionDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1002</td> <td>NumberOfCellsIInDetector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1003</td> <td>CellNumberAtTheta</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1004</td> <td>CellSpacing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,100F</td> <td>HorizFrameOfRef</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1011</td> <td>SeriesContrast</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1012</td> <td>LastPseq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1013</td> <td>StartNumberForBaseline</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1014</td> <td>EndNumberForBaseline</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1015</td> <td>StartNumberForEnhancedScans</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1016</td> <td>EndNumberForEnhancedScans</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1017</td> <td>SeriesPlane</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1018</td> <td>FirstScanRas</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1019</td> <td>FirstScanLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,101A</td> <td>LastScanRas</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,101B</td> <td>LastScanLoc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,101E</td> <td>DisplayFieldOfView</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1023</td> <td>TableSpeed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1024</td> <td>MidScanTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1025</td> <td>MidScanFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1026</td> <td>DegreesOfAzimuth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1027</td> <td>GantryPeriod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,102A</td> <td>XRayOnPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,102B</td> <td>XRayOffPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,102C</td> <td>NumberOfTriggers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,102E</td> <td>AngleOfFirstView</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,102F</td> <td>TriggerFrequency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1039</td> <td>ScanFOVType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1040</td> <td>StatReconFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1041</td> <td>ComputeType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1042</td> <td>SegmentNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1043</td> <td>TotalSegmentsRequested</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1044</td> <td>InterscanDelay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1047</td> <td>ViewCompressionFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,104A</td> <td>TotalNoOfRefChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,104B</td> <td>DataSizeForScanData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1052</td> <td>ReconPostProcflag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1057</td> <td>CTWaterNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1058</td> <td>CTBoneNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,105A</td> <td>AcquisitionDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,105E</td> <td>NumberOfChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,105F</td> <td>IncrementBetweenChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1060</td> <td>StartingView</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1061</td> <td>NumberOfViews</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1062</td> <td>IncrementBetweenViews</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,106A</td> <td>DependantOnNoViewsProcessed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,106B</td> <td>FieldOfViewInDetectorCells</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1070</td> <td>ValueOfBackProjectionButton</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1071</td> <td>SetIfFatqEstimatesWereUsed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1072</td> <td>ZChanAvgOverViews</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1073</td> <td>AvgOfLeftRefChansOverViews</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1074</td> <td>MaxLeftChanOverViews</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1075</td> <td>AvgOfRightRefChansOverViews</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1076</td> <td>MaxRightChanOverViews</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,107D</td> <td>SecondEcho</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,107E</td> <td>NumberOfEchoes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,107F</td> <td>TableDelta</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1081</td> <td>Contiguous</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1084</td> <td>PeakSAR</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1085</td> <td>MonitorSAR</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1087</td> <td>CardiacRepetitionTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1088</td> <td>ImagesPerCardiacCycle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,108A</td> <td>ActualReceiveGainAnalog</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,108B</td> <td>ActualReceiveGainDigital</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,108D</td> <td>DelayAfterTrigger</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,108F</td> <td>Swappf</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1090</td> <td>PauseInterval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1091</td> <td>PulseTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1092</td> <td>SliceOffsetOnFreqAxis</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1093</td> <td>CenterFrequency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1094</td> <td>TransmitGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1095</td> <td>AnalogReceiverGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1096</td> <td>DigitalReceiverGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,1097</td> <td>BitmapDefiningCVs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,1098</td> <td>CenterFreqMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,109B</td> <td>PulseSeqMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,109C</td> <td>PulseSeqName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,109D</td> <td>PulseSeqDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,109E</td> <td>InternalPulseSeqName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,109F</td> <td>TransmittingCoil</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10A0</td> <td>SurfaceCoilType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10A1</td> <td>ExtremityCoilFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10A2</td> <td>RawDataRunNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10A3</td> <td>CalibratedFieldStrength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10A4</td> <td>SATFatWaterBone</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10A5</td> <td>ReceiveBandwidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10A7</td> <td>UserData01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10A8</td> <td>UserData02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10A9</td> <td>UserData03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10AA</td> <td>UserData04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10AB</td> <td>UserData05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10AC</td> <td>UserData06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10AD</td> <td>UserData07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10AE</td> <td>UserData08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10AF</td> <td>UserData09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10B0</td> <td>UserData10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10B1</td> <td>UserData11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10B2</td> <td>UserData12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10B3</td> <td>UserData13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10B4</td> <td>UserData14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10B5</td> <td>UserData15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10B6</td> <td>UserData16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10B7</td> <td>UserData17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10B8</td> <td>UserData18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10B9</td> <td>UserData19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10BA</td> <td>UserData20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10BB</td> <td>UserData21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10BC</td> <td>UserData22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10BD</td> <td>UserData23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10BE</td> <td>ProjectionAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10C0</td> <td>SaturationPlanes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10C1</td> <td>SurfaceCoilIntensity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10C2</td> <td>SATLocationR</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10C3</td> <td>SATLocationL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10C4</td> <td>SATLocationA</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10C5</td> <td>SATLocationP</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10C6</td> <td>SATLocationH</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10C7</td> <td>SATLocationF</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10C8</td> <td>SATThicknessR-L</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10C9</td> <td>SATThicknessA-P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10CA</td> <td>SATThicknessH-F</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10CB</td> <td>PrescribedFlowAxis</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10CC</td> <td>VelocityEncoding</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10CD</td> <td>ThicknessDisclaimer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10CE</td> <td>PrescanType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10CF</td> <td>PrescanStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10D0</td> <td>RawDataType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10D2</td> <td>ProjectionAlgorithm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10D3</td> <td>ProjectionAlgorithm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10D5</td> <td>FractionalEcho</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10D6</td> <td>PrepPulse</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10D7</td> <td>CardiacPhases</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10D8</td> <td>VariableEchoflag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10D9</td> <td>ConcatenatedSAT</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10DA</td> <td>ReferenceChannelUsed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10DB</td> <td>BackProjectorCoefficient</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10DC</td> <td>PrimarySpeedCorrectionUsed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10DD</td> <td>OverrangeCorrectionUsed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10DE</td> <td>DynamicZAlphaValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10DF</td> <td>UserData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10E0</td> <td>UserData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10E2</td> <td>VelocityEncodeScale</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0019,10F2</td> <td>FastPhases</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0019,10F9</td> <td>TransmissionGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,0000</td> <td>RelationshipGroupLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,000D</td> <td>StudyInstanceUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,000E</td> <td>SeriesInstanceUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,0010</td> <td>StudyID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,0011</td> <td>SeriesNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,0012</td> <td>AcquisitionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,0013</td> <td>InstanceNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,0014</td> <td>IsotopeNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,0015</td> <td>PhaseNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,0016</td> <td>IntervalNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,0017</td> <td>TimeSlotNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,0018</td> <td>AngleNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,0019</td> <td>ItemNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,0020</td> <td>PatientOrientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,0022</td> <td>OverlayNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,0024</td> <td>CurveNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,0026</td> <td>LookupTableNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,0030</td> <td>ImagePosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,0032</td> <td>ImagePositionPatient</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,0035</td> <td>ImageOrientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,0037</td> <td>ImageOrientationPatient</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,0050</td> <td>Location</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,0052</td> <td>FrameOfReferenceUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,0060</td> <td>Laterality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,0062</td> <td>ImageLaterality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,0070</td> <td>ImageGeometryType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,0080</td> <td>MaskingImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,0100</td> <td>TemporalPositionIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,0105</td> <td>NumberOfTemporalPositions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,0110</td> <td>TemporalResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,0200</td> <td>SynchronizationFrameOfReferenceUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,1000</td> <td>SeriesInStudy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,1001</td> <td>AcquisitionsInSeries</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,1002</td> <td>ImagesInAcquisition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,1003</td> <td>ImagesInSeries</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,1004</td> <td>AcquisitionsInStudy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,1005</td> <td>ImagesInStudy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,1020</td> <td>Reference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,1040</td> <td>PositionReferenceIndicator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,1041</td> <td>SliceLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,1070</td> <td>OtherStudyNumbers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,1200</td> <td>NumberOfPatientRelatedStudies</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,1202</td> <td>NumberOfPatientRelatedSeries</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,1204</td> <td>NumberOfPatientRelatedInstances</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,1206</td> <td>NumberOfStudyRelatedSeries</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,1208</td> <td>NumberOfStudyRelatedInstances</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,1209</td> <td>NumberOfSeriesRelatedInstances</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,31xx</td> <td>SourceImageIDs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,3401</td> <td>ModifyingDeviceID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,3402</td> <td>ModifiedImageID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,3403</td> <td>ModifiedImageDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,3404</td> <td>ModifyingDeviceManufacturer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,3405</td> <td>ModifiedImageTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,3406</td> <td>ModifiedImageDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,4000</td> <td>ImageComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,5000</td> <td>OriginalImageIdentification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,5002</td> <td>OriginalImageIdentNomenclature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9056</td> <td>StackID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9057</td> <td>InStackPositionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9071</td> <td>FrameAnatomySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9072</td> <td>FrameLaterality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9111</td> <td>FrameContentSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9113</td> <td>PlanePositionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9116</td> <td>PlaneOrientationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9128</td> <td>TemporalPositionIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9153</td> <td>TriggerDelayTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9156</td> <td>FrameAcquisitionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9157</td> <td>DimensionIndexValues</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9158</td> <td>FrameComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9161</td> <td>ConcatenationUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9162</td> <td>InConcatenationNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9163</td> <td>InConcatenationTotalNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9164</td> <td>DimensionOrganizationUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9165</td> <td>DimensionIndexPointer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9167</td> <td>FunctionalGroupPointer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9213</td> <td>DimensionIndexPrivateCreator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9221</td> <td>DimensionOrganizationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9222</td> <td>DimensionIndexSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9228</td> <td>ConcatenationFrameOffsetNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9238</td> <td>FunctionalGroupPrivateCreator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9241</td> <td>NominalPercentageOfCardiacPhase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9245</td> <td>NominalPercentOfRespiratoryPhase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9246</td> <td>StartingRespiratoryAmplitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9247</td> <td>StartingRespiratoryPhase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9248</td> <td>EndingRespiratoryAmplitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9249</td> <td>EndingRespiratoryPhase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9250</td> <td>RespiratoryTriggerType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9251</td> <td>RRIntervalTimeNominal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9252</td> <td>ActualCardiacTriggerDelayTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9253</td> <td>RespiratorySynchronizationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9254</td> <td>RespiratoryIntervalTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9255</td> <td>NominalRespiratoryTriggerDelayTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9256</td> <td>RespiratoryTriggerDelayThreshold</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9257</td> <td>ActualRespiratoryTriggerDelayTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9301</td> <td>ImagePositionVolume</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9302</td> <td>ImageOrientationVolume</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9308</td> <td>ApexPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9421</td> <td>DimensionDescriptionLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9450</td> <td>PatientOrientationInFrameSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9453</td> <td>FrameLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9518</td> <td>AcquisitionIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0020,9529</td> <td>ContributingSOPInstancesRefSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0020,9536</td> <td>ReconstructionIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,1003</td> <td>SeriesFromWhichPrescribed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,1005</td> <td>GenesisVersionNow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,1007</td> <td>SeriesRecordChecksum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,1018</td> <td>GenesisVersionNow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,1019</td> <td>AcqreconRecordChecksum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,1020</td> <td>TableStartLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,1035</td> <td>SeriesFromWhichPrescribed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,1036</td> <td>ImageFromWhichPrescribed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,1037</td> <td>ScreenFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,104A</td> <td>AnatomicalReferenceForScout</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,104F</td> <td>LocationsInAcquisition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,1050</td> <td>GraphicallyPrescribed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,1051</td> <td>RotationFromSourceXRot</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,1052</td> <td>RotationFromSourceYRot</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,1053</td> <td>RotationFromSourceZRot</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,1054</td> <td>ImagePosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,1055</td> <td>ImageOrientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,1056</td> <td>IntegerSlop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,1057</td> <td>IntegerSlop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,1058</td> <td>IntegerSlop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,1059</td> <td>IntegerSlop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,105A</td> <td>IntegerSlop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,105B</td> <td>FloatSlop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,105C</td> <td>FloatSlop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,105D</td> <td>FloatSlop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,105E</td> <td>FloatSlop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,105F</td> <td>FloatSlop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,1081</td> <td>AutoWindowLevelAlpha</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,1082</td> <td>AutoWindowLevelBeta</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,1083</td> <td>AutoWindowLevelWindow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,1084</td> <td>ToWindowLevelLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,1090</td> <td>TubeFocalSpotPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,1091</td> <td>BiopsyPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0021,1092</td> <td>BiopsyTLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0021,1093</td> <td>BiopsyRefLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0001</td> <td>LightPathFilterPassThroughWavelen</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0002</td> <td>LightPathFilterPassBand</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0003</td> <td>ImagePathFilterPassThroughWavelen</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0004</td> <td>ImagePathFilterPassBand</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0005</td> <td>PatientEyeMovementCommanded</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0006</td> <td>PatientEyeMovementCommandCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0007</td> <td>SphericalLensPower</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0008</td> <td>CylinderLensPower</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0009</td> <td>CylinderAxis</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,000A</td> <td>EmmetropicMagnification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,000B</td> <td>IntraOcularPressure</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,000C</td> <td>HorizontalFieldOfView</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,000D</td> <td>PupilDilated</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,000E</td> <td>DegreeOfDilation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0010</td> <td>StereoBaselineAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0011</td> <td>StereoBaselineDisplacement</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0012</td> <td>StereoHorizontalPixelOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0013</td> <td>StereoVerticalPixelOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0014</td> <td>StereoRotation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0015</td> <td>AcquisitionDeviceTypeCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0016</td> <td>IlluminationTypeCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0017</td> <td>LightPathFilterTypeStackCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0018</td> <td>ImagePathFilterTypeStackCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0019</td> <td>LensesCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,001A</td> <td>ChannelDescriptionCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,001B</td> <td>RefractiveStateSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,001C</td> <td>MydriaticAgentCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,001D</td> <td>RelativeImagePositionCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0020</td> <td>StereoPairsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0021</td> <td>LeftImageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0022</td> <td>RightImageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0030</td> <td>AxialLengthOfTheEye</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0031</td> <td>OphthalmicFrameLocationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0032</td> <td>ReferenceCoordinates</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0035</td> <td>DepthSpatialResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0036</td> <td>MaximumDepthDistortion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0037</td> <td>AlongScanSpatialResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0038</td> <td>MaximumAlongScanDistortion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0039</td> <td>OphthalmicImageOrientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0041</td> <td>DepthOfTransverseImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0042</td> <td>MydriaticAgentConcUnitsSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0048</td> <td>AcrossScanSpatialResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0049</td> <td>MaximumAcrossScanDistortion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,004E</td> <td>MydriaticAgentConcentration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0055</td> <td>IlluminationWaveLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0056</td> <td>IlluminationPower</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0022,0057</td> <td>IlluminationBandwidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0022,0058</td> <td>MydriaticAgentSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0023,1001</td> <td>NumberOfSeriesInStudy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0023,1002</td> <td>NumberOfUnarchivedSeries</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0023,1010</td> <td>ReferenceImageField</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0023,1050</td> <td>SummaryImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0023,1070</td> <td>StartTimeSecsInFirstAxial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0023,1074</td> <td>NoofUpdatesToHeader</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0023,107D</td> <td>IndicatesIfTheStudyHasCompleteInfo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0025,1006</td> <td>LastPulseSequenceUsed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0025,1007</td> <td>ImagesInSeries</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0025,1010</td> <td>LandmarkCounter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0025,1011</td> <td>NumberOfAcquisitions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0025,1014</td> <td>IndicatesNoofUpdatesToHeader</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0025,1017</td> <td>SeriesCompleteFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0025,1018</td> <td>NumberOfImagesArchived</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0025,1019</td> <td>LastImageNumberUsed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0025,101A</td> <td>PrimaryReceiverSuiteAndHost</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,1006</td> <td>ImageArchiveFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,1010</td> <td>ScoutType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,101C</td> <td>VmaMamp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,101D</td> <td>VmaPhase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,101E</td> <td>VmaMod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,101F</td> <td>VmaClip</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,1020</td> <td>SmartScanOnOffFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,1030</td> <td>ForeignImageRevision</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,1031</td> <td>ImagingMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,1032</td> <td>PulseSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,1033</td> <td>ImagingOptions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,1035</td> <td>PlaneType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,1036</td> <td>ObliquePlane</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,1040</td> <td>RASLetterOfImageLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,1041</td> <td>ImageLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,1042</td> <td>CenterRCoordOfPlaneImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,1043</td> <td>CenterACoordOfPlaneImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,1044</td> <td>CenterSCoordOfPlaneImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,1045</td> <td>NormalRCoord</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,1046</td> <td>NormalACoord</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,1047</td> <td>NormalSCoord</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,1048</td> <td>RCoordOfTopRightCorner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,1049</td> <td>ACoordOfTopRightCorner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,104A</td> <td>SCoordOfTopRightCorner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,104B</td> <td>RCoordOfBottomRightCorner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,104C</td> <td>ACoordOfBottomRightCorner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,104D</td> <td>SCoordOfBottomRightCorner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,1050</td> <td>TableStartLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,1051</td> <td>TableEndLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,1052</td> <td>RASLetterForSideOfImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,1053</td> <td>RASLetterForAnteriorPosterior</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,1054</td> <td>RASLetterForScoutStartLoc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,1055</td> <td>RASLetterForScoutEndLoc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,1060</td> <td>ImageDimensionX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0027,1061</td> <td>ImageDimensionY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0027,1062</td> <td>NumberOfExcitations</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0000</td> <td>ImagePresentationGroupLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0002</td> <td>SamplesPerPixel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0003</td> <td>SamplesPerPixelUsed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0004</td> <td>PhotometricInterpretation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0005</td> <td>ImageDimensions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0006</td> <td>PlanarConfiguration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0008</td> <td>NumberOfFrames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0009</td> <td>FrameIncrementPointer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,000A</td> <td>FrameDimensionPointer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0010</td> <td>Rows</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0011</td> <td>Columns</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0012</td> <td>Planes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0014</td> <td>UltrasoundColorDataPresent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0030</td> <td>PixelSpacing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0031</td> <td>ZoomFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0032</td> <td>ZoomCenter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0034</td> <td>PixelAspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0040</td> <td>ImageFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0050</td> <td>ManipulatedImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0051</td> <td>CorrectedImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,005F</td> <td>CompressionRecognitionCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0060</td> <td>CompressionCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0061</td> <td>CompressionOriginator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0062</td> <td>CompressionLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0063</td> <td>CompressionDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0065</td> <td>CompressionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0066</td> <td>CompressionStepPointers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0068</td> <td>RepeatInterval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0069</td> <td>BitsGrouped</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0070</td> <td>PerimeterTable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0071</td> <td>PerimeterValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0080</td> <td>PredictorRows</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0081</td> <td>PredictorColumns</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0082</td> <td>PredictorConstants</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0090</td> <td>BlockedPixels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0091</td> <td>BlockRows</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0092</td> <td>BlockColumns</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0093</td> <td>RowOverlap</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0094</td> <td>ColumnOverlap</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0100</td> <td>BitsAllocated</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0101</td> <td>BitsStored</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0102</td> <td>HighBit</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0103</td> <td>PixelRepresentation</td> <td class=c>N</td> <td><span class=s>0 = Unsigned <br>1 = Signed</span></td></tr> <tr> <td>0028,0104</td> <td>SmallestValidPixelValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0105</td> <td>LargestValidPixelValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0106</td> <td>SmallestImagePixelValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0107</td> <td>LargestImagePixelValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0108</td> <td>SmallestPixelValueInSeries</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0109</td> <td>LargestPixelValueInSeries</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0110</td> <td>SmallestImagePixelValueInPlane</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0111</td> <td>LargestImagePixelValueInPlane</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0120</td> <td>PixelPaddingValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0121</td> <td>PixelPaddingRangeLimit</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0200</td> <td>ImageLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0300</td> <td>QualityControlImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0301</td> <td>BurnedInAnnotation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0400</td> <td>TransformLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0401</td> <td>TransformVersionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0402</td> <td>NumberOfTransformSteps</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0403</td> <td>SequenceOfCompressedData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0404</td> <td>DetailsOfCoefficients</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,04x2</td> <td>CoefficientCoding</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,04x3</td> <td>CoefficientCodingPointers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0700</td> <td>DCTLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0701</td> <td>DataBlockDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0702</td> <td>DataBlock</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0710</td> <td>NormalizationFactorFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0720</td> <td>ZonalMapNumberFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0721</td> <td>ZonalMapLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0722</td> <td>ZonalMapFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0730</td> <td>AdaptiveMapFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0740</td> <td>CodeNumberFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,08x0</td> <td>CodeLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,08x2</td> <td>NumberOfTables</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,08x3</td> <td>CodeTableLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,08x4</td> <td>BitsForCodeWord</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,08x8</td> <td>ImageDataLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,0A02</td> <td>PixelSpacingCalibrationType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,0A04</td> <td>PixelSpacingCalibrationDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1040</td> <td>PixelIntensityRelationship</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1041</td> <td>PixelIntensityRelationshipSign</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1050</td> <td>WindowCenter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1051</td> <td>WindowWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1052</td> <td>RescaleIntercept</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1053</td> <td>RescaleSlope</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1054</td> <td>RescaleType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1055</td> <td>WindowCenterAndWidthExplanation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1056</td> <td>VOI_LUTFunction</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1080</td> <td>GrayScale</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1090</td> <td>RecommendedViewingMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1100</td> <td>GrayLookupTableDescriptor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1101</td> <td>RedPaletteColorTableDescriptor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1102</td> <td>GreenPaletteColorTableDescriptor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1103</td> <td>BluePaletteColorTableDescriptor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1111</td> <td>LargeRedPaletteColorTableDescr</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1112</td> <td>LargeGreenPaletteColorTableDescr</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1113</td> <td>LargeBluePaletteColorTableDescr</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1199</td> <td>PaletteColorTableUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1200</td> <td>GrayLookupTableData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1201</td> <td>RedPaletteColorTableData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1202</td> <td>GreenPaletteColorTableData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1203</td> <td>BluePaletteColorTableData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1211</td> <td>LargeRedPaletteColorTableData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1212</td> <td>LargeGreenPaletteColorTableData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1213</td> <td>LargeBluePaletteColorTableData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1214</td> <td>LargePaletteColorLookupTableUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1221</td> <td>SegmentedRedColorTableData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1222</td> <td>SegmentedGreenColorTableData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1223</td> <td>SegmentedBlueColorTableData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1300</td> <td>BreastImplantPresent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1350</td> <td>PartialView</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1351</td> <td>PartialViewDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1352</td> <td>PartialViewCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,135A</td> <td>SpatialLocationsPreserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1402</td> <td>DataPathAssignment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1404</td> <td>BlendingLUT1Sequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,1406</td> <td>BlendingWeightConstant</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1408</td> <td>BlendingLookupTableData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,140C</td> <td>BlendingLUT2Sequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,140E</td> <td>DataPathID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,140F</td> <td>RGBLUTTransferFunction</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,1410</td> <td>AlphaLUTTransferFunction</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,2000</td> <td>ICCProfile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,2110</td> <td>LossyImageCompression</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,2112</td> <td>LossyImageCompressionRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,2114</td> <td>LossyImageCompressionMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,3000</td> <td>ModalityLUTSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,3002</td> <td>LUTDescriptor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,3003</td> <td>LUTExplanation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,3004</td> <td>ModalityLUTType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,3006</td> <td>LUTData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,3010</td> <td>VOILUTSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,3110</td> <td>SoftcopyVOILUTSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,4000</td> <td>ImagePresentationComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,5000</td> <td>BiPlaneAcquisitionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,6010</td> <td>RepresentativeFrameNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,6020</td> <td>FrameNumbersOfInterest</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,6022</td> <td>FrameOfInterestDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,6023</td> <td>FrameOfInterestType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,6030</td> <td>MaskPointers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,6040</td> <td>RWavePointer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,6100</td> <td>MaskSubtractionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,6101</td> <td>MaskOperation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,6102</td> <td>ApplicableFrameRange</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,6110</td> <td>MaskFrameNumbers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,6112</td> <td>ContrastFrameAveraging</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,6114</td> <td>MaskSubPixelShift</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,6120</td> <td>TIDOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,6190</td> <td>MaskOperationExplanation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,7FE0</td> <td>PixelDataProviderURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,9001</td> <td>DataPointRows</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,9002</td> <td>DataPointColumns</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,9003</td> <td>SignalDomainColumns</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,9099</td> <td>LargestMonochromePixelValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,9108</td> <td>DataRepresentation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,9110</td> <td>PixelMeasuresSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,9132</td> <td>FrameVOILUTSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,9145</td> <td>PixelValueTransformationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,9235</td> <td>SignalDomainRows</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,9411</td> <td>DisplayFilterPercentage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,9415</td> <td>FramePixelShiftSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,9416</td> <td>SubtractionItemID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,9422</td> <td>PixelIntensityRelationshipLUTSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,9443</td> <td>FramePixelDataPropertiesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,9444</td> <td>GeometricalProperties</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,9445</td> <td>GeometricMaximumDistortion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,9446</td> <td>ImageProcessingApplied</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,9454</td> <td>MaskSelectionMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,9474</td> <td>LUTFunction</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,9478</td> <td>MaskVisibilityPercentage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,9501</td> <td>PixelShiftSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,9502</td> <td>RegionPixelShiftSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,9503</td> <td>VerticesOfTheRegion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,9506</td> <td>PixelShiftFrameRange</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,9507</td> <td>LUTFrameRange</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0028,9520</td> <td>ImageToEquipmentMappingMatrix</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0028,9537</td> <td>EquipmentCoordinateSystemID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0029,1004</td> <td>LowerRangeOfPixels1a</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0029,1005</td> <td>LowerRangeOfPixels1b</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0029,1006</td> <td>LowerRangeOfPixels1c</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0029,1007</td> <td>LowerRangeOfPixels1d</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0029,1008</td> <td>LowerRangeOfPixels1e</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0029,1009</td> <td>LowerRangeOfPixels1f</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0029,100A</td> <td>LowerRangeOfPixels1g</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0029,1015</td> <td>LowerRangeOfPixels1h</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0029,1016</td> <td>LowerRangeOfPixels1i</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0029,1017</td> <td>LowerRangeOfPixels2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0029,1018</td> <td>UpperRangeOfPixels2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0029,101A</td> <td>LenOfTotHdrInBytes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0029,1026</td> <td>VersionOfTheHdrStruct</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0029,1034</td> <td>AdvantageCompOverflow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0029,1035</td> <td>AdvantageCompUnderflow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0032,0000</td> <td>StudyGroupLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0032,000A</td> <td>StudyStatusID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0032,000C</td> <td>StudyPriorityID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0032,0012</td> <td>StudyIDIssuer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0032,0032</td> <td>StudyVerifiedDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0032,0033</td> <td>StudyVerifiedTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0032,0034</td> <td>StudyReadDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0032,0035</td> <td>StudyReadTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0032,1000</td> <td>ScheduledStudyStartDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0032,1001</td> <td>ScheduledStudyStartTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0032,1010</td> <td>ScheduledStudyStopDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0032,1011</td> <td>ScheduledStudyStopTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0032,1020</td> <td>ScheduledStudyLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0032,1021</td> <td>ScheduledStudyLocationAETitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0032,1030</td> <td>ReasonForStudy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0032,1031</td> <td>RequestingPhysicianIDSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0032,1032</td> <td>RequestingPhysician</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0032,1033</td> <td>RequestingService</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0032,1040</td> <td>StudyArrivalDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0032,1041</td> <td>StudyArrivalTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0032,1050</td> <td>StudyCompletionDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0032,1051</td> <td>StudyCompletionTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0032,1055</td> <td>StudyComponentStatusID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0032,1060</td> <td>RequestedProcedureDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0032,1064</td> <td>RequestedProcedureCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0032,1070</td> <td>RequestedContrastAgent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0032,4000</td> <td>StudyComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0038,0004</td> <td>ReferencedPatientAliasSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0038,0008</td> <td>VisitStatusID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0038,0010</td> <td>AdmissionID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0038,0011</td> <td>IssuerOfAdmissionID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0038,0016</td> <td>RouteOfAdmissions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0038,001A</td> <td>ScheduledAdmissionDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0038,001B</td> <td>ScheduledAdmissionTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0038,001C</td> <td>ScheduledDischargeDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0038,001D</td> <td>ScheduledDischargeTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0038,001E</td> <td>ScheduledPatientInstitResidence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0038,0020</td> <td>AdmittingDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0038,0021</td> <td>AdmittingTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0038,0030</td> <td>DischargeDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0038,0032</td> <td>DischargeTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0038,0040</td> <td>DischargeDiagnosisDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0038,0044</td> <td>DischargeDiagnosisCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0038,0050</td> <td>SpecialNeeds</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0038,0060</td> <td>ServiceEpisodeID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0038,0061</td> <td>IssuerOfServiceEpisodeID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0038,0062</td> <td>ServiceEpisodeDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0038,0100</td> <td>PertinentDocumentsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0038,0300</td> <td>CurrentPatientLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0038,0400</td> <td>PatientInstitutionResidence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0038,0500</td> <td>PatientState</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0038,0502</td> <td>PatientClinicalTrialParticipSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0038,4000</td> <td>VisitComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0004</td> <td>WaveformOriginality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0005</td> <td>NumberOfWaveformChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0010</td> <td>NumberOfWaveformSamples</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,001A</td> <td>SamplingFrequency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0020</td> <td>MultiplexGroupLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0200</td> <td>ChannelDefinitionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0202</td> <td>WaveformChannelNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0203</td> <td>ChannelLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0205</td> <td>ChannelStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0208</td> <td>ChannelSourceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0209</td> <td>ChannelSourceModifiersSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,020A</td> <td>SourceWaveformSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,020C</td> <td>ChannelDerivationDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0210</td> <td>ChannelSensitivity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0211</td> <td>ChannelSensitivityUnitsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0212</td> <td>ChannelSensitivityCorrectionFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0213</td> <td>ChannelBaseline</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0214</td> <td>ChannelTimeSkew</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0215</td> <td>ChannelSampleSkew</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0218</td> <td>ChannelOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,021A</td> <td>WaveformBitsStored</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0220</td> <td>FilterLowFrequency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0221</td> <td>FilterHighFrequency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0222</td> <td>NotchFilterFrequency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0223</td> <td>NotchFilterBandwidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0230</td> <td>WaveformDataDisplayScale</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0231</td> <td>WaveformDisplayBkgCIELabValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0240</td> <td>WaveformPresentationGroupSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0241</td> <td>PresentationGroupNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0242</td> <td>ChannelDisplaySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0244</td> <td>ChannelRecommendDisplayCIELabValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0245</td> <td>ChannelPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0246</td> <td>DisplayShadingFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0247</td> <td>FractionalChannelDisplayScale</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0248</td> <td>AbsoluteChannelDisplayScale</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0300</td> <td>MultiplexAudioChannelsDescrCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>003A,0301</td> <td>ChannelIdentificationCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>003A,0302</td> <td>ChannelMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0001</td> <td>ScheduledStationAETitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0002</td> <td>ScheduledProcedureStepStartDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0003</td> <td>ScheduledProcedureStepStartTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0004</td> <td>ScheduledProcedureStepEndDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0005</td> <td>ScheduledProcedureStepEndTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0006</td> <td>ScheduledPerformingPhysiciansName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0007</td> <td>ScheduledProcedureStepDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0008</td> <td>ScheduledProtocolCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0009</td> <td>ScheduledProcedureStepID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,000A</td> <td>StageCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,000B</td> <td>ScheduledPerformingPhysicianIDSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0010</td> <td>ScheduledStationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0011</td> <td>ScheduledProcedureStepLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0012</td> <td>PreMedication</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0020</td> <td>ScheduledProcedureStepStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0031</td> <td>LocalNamespaceEntityID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0032</td> <td>UniversalEntityID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0033</td> <td>UniversalEntityIDType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0035</td> <td>IdentifierTypeCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0036</td> <td>AssigningFacilitySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0100</td> <td>ScheduledProcedureStepSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0220</td> <td>ReferencedNonImageCompositeSOPSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0241</td> <td>PerformedStationAETitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0242</td> <td>PerformedStationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0243</td> <td>PerformedLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0244</td> <td>PerformedProcedureStepStartDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0245</td> <td>PerformedProcedureStepStartTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0250</td> <td>PerformedProcedureStepEndDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0251</td> <td>PerformedProcedureStepEndTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0252</td> <td>PerformedProcedureStepStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0253</td> <td>PerformedProcedureStepID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0254</td> <td>PerformedProcedureStepDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0255</td> <td>PerformedProcedureTypeDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0260</td> <td>PerformedProtocolCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0261</td> <td>PerformedProtocolType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0270</td> <td>ScheduledStepAttributesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0275</td> <td>RequestAttributesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0280</td> <td>CommentsOnPerformedProcedureStep</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0281</td> <td>ProcStepDiscontinueReasonCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0293</td> <td>QuantitySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0294</td> <td>Quantity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0295</td> <td>MeasuringUnitsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0296</td> <td>BillingItemSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0300</td> <td>TotalTimeOfFluoroscopy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0301</td> <td>TotalNumberOfExposures</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0302</td> <td>EntranceDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0303</td> <td>ExposedArea</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0306</td> <td>DistanceSourceToEntrance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0307</td> <td>DistanceSourceToSupport</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,030E</td> <td>ExposureDoseSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0310</td> <td>CommentsOnRadiationDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0312</td> <td>XRayOutput</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0314</td> <td>HalfValueLayer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0316</td> <td>OrganDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0318</td> <td>OrganExposed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0320</td> <td>BillingProcedureStepSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0321</td> <td>FilmConsumptionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0324</td> <td>BillingSuppliesAndDevicesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0330</td> <td>ReferencedProcedureStepSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0340</td> <td>PerformedSeriesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0400</td> <td>CommentsOnScheduledProcedureStep</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0440</td> <td>ProtocolContextSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0441</td> <td>ContentItemModifierSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,050A</td> <td>SpecimenAccessionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0512</td> <td>ContainerIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,051A</td> <td>ContainerDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0550</td> <td>SpecimenSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0551</td> <td>SpecimenIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0552</td> <td>SpecimenDescriptionSequenceTrial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0553</td> <td>SpecimenDescriptionTrial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0554</td> <td>SpecimenUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,0555</td> <td>AcquisitionContextSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0556</td> <td>AcquisitionContextDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,059A</td> <td>SpecimenTypeCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,0600</td> <td>SpecimenShortDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,06FA</td> <td>SlideIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,071A</td> <td>ImageCenterPointCoordinatesSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,072A</td> <td>XOffsetInSlideCoordinateSystem</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,073A</td> <td>YOffsetInSlideCoordinateSystem</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,074A</td> <td>ZOffsetInSlideCoordinateSystem</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,08D8</td> <td>PixelSpacingSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,08DA</td> <td>CoordinateSystemAxisCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,08EA</td> <td>MeasurementUnitsCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,09F8</td> <td>VitalStainCodeSequenceTrial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,1001</td> <td>RequestedProcedureID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,1002</td> <td>ReasonForRequestedProcedure</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,1003</td> <td>RequestedProcedurePriority</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,1004</td> <td>PatientTransportArrangements</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,1005</td> <td>RequestedProcedureLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,1006</td> <td>PlacerOrderNumber-Procedure</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,1007</td> <td>FillerOrderNumber-Procedure</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,1008</td> <td>ConfidentialityCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,1009</td> <td>ReportingPriority</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,100A</td> <td>ReasonForRequestedProcedureCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,1010</td> <td>NamesOfIntendedRecipientsOfResults</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,1011</td> <td>IntendedRecipientsOfResultsIDSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,1101</td> <td>PersonIdentificationCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,1102</td> <td>PersonAddress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,1103</td> <td>PersonTelephoneNumbers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,1400</td> <td>RequestedProcedureComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,2001</td> <td>ReasonForImagingServiceRequest</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,2004</td> <td>IssueDateOfImagingServiceRequest</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,2005</td> <td>IssueTimeOfImagingServiceRequest</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,2006</td> <td>PlacerOrderNum-ImagingServiceReq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,2007</td> <td>FillerOrderNum-ImagingServiceReq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,2008</td> <td>OrderEnteredBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,2009</td> <td>OrderEntererLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,2010</td> <td>OrderCallbackPhoneNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,2016</td> <td>PlacerOrderNum-ImagingServiceReq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,2017</td> <td>FillerOrderNum-ImagingServiceReq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,2400</td> <td>ImagingServiceRequestComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,3001</td> <td>ConfidentialityOnPatientDataDescr</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4001</td> <td>GenPurposeScheduledProcStepStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4002</td> <td>GenPurposePerformedProcStepStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4003</td> <td>GenPurposeSchedProcStepPriority</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4004</td> <td>SchedProcessingApplicationsCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4005</td> <td>SchedProcedureStepStartDateAndTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4006</td> <td>MultipleCopiesFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4007</td> <td>PerformedProcessingAppsCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4009</td> <td>HumanPerformerCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4010</td> <td>SchedProcStepModificationDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4011</td> <td>ExpectedCompletionDateAndTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4015</td> <td>ResultingGenPurposePerfProcStepSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4016</td> <td>RefGenPurposeSchedProcStepSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4018</td> <td>ScheduledWorkitemCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4019</td> <td>PerformedWorkitemCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4020</td> <td>InputAvailabilityFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4021</td> <td>InputInformationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4022</td> <td>RelevantInformationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4023</td> <td>RefGenPurSchedProcStepTransUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4025</td> <td>ScheduledStationNameCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4026</td> <td>ScheduledStationClassCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4027</td> <td>SchedStationGeographicLocCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4028</td> <td>PerformedStationNameCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4029</td> <td>PerformedStationClassCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4030</td> <td>PerformedStationGeogLocCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4031</td> <td>RequestedSubsequentWorkItemCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4032</td> <td>NonDICOMOutputCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4033</td> <td>OutputInformationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4034</td> <td>ScheduledHumanPerformersSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4035</td> <td>ActualHumanPerformersSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4036</td> <td>HumanPerformersOrganization</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,4037</td> <td>HumanPerformerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,4040</td> <td>RawDataHandling</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,8302</td> <td>EntranceDoseInMilliGy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,9094</td> <td>RefImageRealWorldValueMappingSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,9096</td> <td>RealWorldValueMappingSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,9098</td> <td>PixelValueMappingCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,9210</td> <td>LUTLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,9211</td> <td>RealWorldValueLastValueMapped</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,9212</td> <td>RealWorldValueLUTData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,9216</td> <td>RealWorldValueFirstValueMapped</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,9224</td> <td>RealWorldValueIntercept</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,9225</td> <td>RealWorldValueSlope</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A010</td> <td>RelationshipType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A027</td> <td>VerifyingOrganization</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A030</td> <td>VerificationDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A032</td> <td>ObservationDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A040</td> <td>ValueType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A043</td> <td>ConceptNameCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A050</td> <td>ContinuityOfContent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A073</td> <td>VerifyingObserverSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A075</td> <td>VerifyingObserverName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A078</td> <td>AuthorObserverSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A07A</td> <td>ParticipantSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A07C</td> <td>CustodialOrganizationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A080</td> <td>ParticipationType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A082</td> <td>ParticipationDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A084</td> <td>ObserverType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A088</td> <td>VerifyingObserverIdentCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A090</td> <td>EquivalentCDADocumentSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A0B0</td> <td>ReferencedWaveformChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A120</td> <td>DateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A121</td> <td>Date</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A122</td> <td>Time</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A123</td> <td>PersonName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A124</td> <td>UID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A130</td> <td>TemporalRangeType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A132</td> <td>ReferencedSamplePositions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A136</td> <td>ReferencedFrameNumbers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A138</td> <td>ReferencedTimeOffsets</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A13A</td> <td>ReferencedDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A160</td> <td>TextValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A168</td> <td>ConceptCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A170</td> <td>PurposeOfReferenceCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A180</td> <td>AnnotationGroupNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A195</td> <td>ModifierCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A300</td> <td>MeasuredValueSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A301</td> <td>NumericValueQualifierCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A30A</td> <td>NumericValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A353</td> <td>AddressTrial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A354</td> <td>TelephoneNumberTrial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A360</td> <td>PredecessorDocumentsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A370</td> <td>ReferencedRequestSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A372</td> <td>PerformedProcedureCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A375</td> <td>CurrentRequestedProcEvidenceSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A385</td> <td>PertinentOtherEvidenceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A390</td> <td>HL7StructuredDocumentRefSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A491</td> <td>CompletionFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A492</td> <td>CompletionFlagDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A493</td> <td>VerificationFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A494</td> <td>ArchiveRequested</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A496</td> <td>PreliminaryFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A504</td> <td>ContentTemplateSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,A525</td> <td>IdenticalDocumentsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,A730</td> <td>ContentSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,B020</td> <td>AnnotationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,DB00</td> <td>TemplateIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,DB06</td> <td>TemplateVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,DB07</td> <td>TemplateLocalVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,DB0B</td> <td>TemplateExtensionFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,DB0C</td> <td>TemplateExtensionOrganizationUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,DB0D</td> <td>TemplateExtensionCreatorUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,DB73</td> <td>ReferencedContentItemIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,E001</td> <td>HL7InstanceIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,E004</td> <td>HL7DocumentEffectiveTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,E006</td> <td>HL7DocumentTypeCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0040,E010</td> <td>RetrieveURI</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0040,E011</td> <td>RetrieveLocationUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0042,0010</td> <td>DocumentTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0042,0011</td> <td>EncapsulatedDocument</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0042,0012</td> <td>MIMETypeOfEncapsulatedDocument</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0042,0013</td> <td>SourceInstanceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0042,0014</td> <td>ListOfMIMETypes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1001</td> <td>BitmapOfPrescanOptions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1002</td> <td>GradientOffsetInX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1003</td> <td>GradientOffsetInY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1004</td> <td>GradientOffsetInZ</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1005</td> <td>ImgIsOriginalOrUnoriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1006</td> <td>NumberOfEPIShots</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1007</td> <td>ViewsPerSegment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1008</td> <td>RespiratoryRateBpm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1009</td> <td>RespiratoryTriggerPoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,100A</td> <td>TypeOfReceiverUsed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,100B</td> <td>PeakRateOfChangeOfGradientField</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,100C</td> <td>LimitsInUnitsOfPercent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,100D</td> <td>PSDEstimatedLimit</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,100E</td> <td>PSDEstimatedLimitInTeslaPerSecond</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,100F</td> <td>Saravghead</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1010</td> <td>WindowValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1011</td> <td>TotalInputViews</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1012</td> <td>X-RayChain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1013</td> <td>DeconKernelParameters</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1014</td> <td>CalibrationParameters</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1015</td> <td>TotalOutputViews</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1016</td> <td>NumberOfOverranges</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1017</td> <td>IBHImageScaleFactors</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1018</td> <td>BBHCoefficients</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1019</td> <td>NumberOfBBHChainsToBlend</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,101A</td> <td>StartingChannelNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,101B</td> <td>PpscanParameters</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,101C</td> <td>GEImageIntegrity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,101D</td> <td>LevelValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,101E</td> <td>DeltaStartTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,101F</td> <td>MaxOverrangesInAView</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1020</td> <td>AvgOverrangesAllViews</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1021</td> <td>CorrectedAfterGlowTerms</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1025</td> <td>ReferenceChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1026</td> <td>NoViewsRefChansBlocked</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1027</td> <td>ScanPitchRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1028</td> <td>UniqueImageIden</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1029</td> <td>HistogramTables</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,102A</td> <td>UserDefinedData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,102B</td> <td>PrivateScanOptions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,102C</td> <td>EffectiveEchoSpacing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,102D</td> <td>StringSlopField1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,102E</td> <td>StringSlopField2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,102F</td> <td>RawDataType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1030</td> <td>RawDataType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1031</td> <td>RACordOfTargetReconCenter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1032</td> <td>RawDataType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1033</td> <td>NegScanspacing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1034</td> <td>OffsetFrequency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1035</td> <td>UserUsageTag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1036</td> <td>UserFillMapMSW</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1037</td> <td>UserFillMapLSW</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1038</td> <td>User25-48</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1039</td> <td>SlopInt6-9</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1040</td> <td>TriggerOnPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1041</td> <td>DegreeOfRotation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1042</td> <td>DASTriggerSource</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1043</td> <td>DASFpaGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1044</td> <td>DASOutputSource</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1045</td> <td>DASAdInput</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1046</td> <td>DASCalMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1047</td> <td>DASCalFrequency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1048</td> <td>DASRegXm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1049</td> <td>DASAutoZero</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,104A</td> <td>StartingChannelOfView</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,104B</td> <td>DASXmPattern</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,104C</td> <td>TGGCTriggerMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,104D</td> <td>StartScanToXrayOnDelay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,104E</td> <td>DurationOfXrayOn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1060</td> <td>SlopInt10-17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,1061</td> <td>ScannerStudyEntityUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0043,1062</td> <td>ScannerStudyID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0043,106f</td> <td>ScannerTableEntry</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0044,0001</td> <td>ProductPackageIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0044,0002</td> <td>SubstanceAdministrationApproval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0044,0003</td> <td>ApprovalStatusFurtherDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0044,0004</td> <td>ApprovalStatusDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0044,0007</td> <td>ProductTypeCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0044,0008</td> <td>ProductName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0044,0009</td> <td>ProductDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0044,000A</td> <td>ProductLotIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0044,000B</td> <td>ProductExpirationDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0044,0010</td> <td>SubstanceAdministrationDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0044,0011</td> <td>SubstanceAdministrationNotes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0044,0012</td> <td>SubstanceAdministrationDeviceID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0044,0013</td> <td>ProductParameterSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0044,0019</td> <td>SubstanceAdminParameterSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,1001</td> <td>NumberOfMacroRowsInDetector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,1002</td> <td>MacroWidthAtISOCenter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,1003</td> <td>DASType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,1004</td> <td>DASGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,1005</td> <td>DASTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,1006</td> <td>TableDirectionInOrOut</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,1007</td> <td>ZSmoothingFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,1008</td> <td>ViewWeightingMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,1009</td> <td>SigmaRowNumberWhichRowsWereUsed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,100A</td> <td>MinimumDasValueFoundInTheScanData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,100B</td> <td>MaximumOffsetShiftValueUsed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,100C</td> <td>NumberOfViewsShifted</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,100D</td> <td>ZTrackingFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,100E</td> <td>MeanZError</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,100F</td> <td>ZTrackingMaximumError</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,1010</td> <td>StartingViewForRow2a</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,1011</td> <td>NumberOfViewsInRow2a</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,1012</td> <td>StartingViewForRow1a</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,1013</td> <td>SigmaMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,1014</td> <td>NumberOfViewsInRow1a</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,1015</td> <td>StartingViewForRow2b</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,1016</td> <td>NumberOfViewsInRow2b</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,1017</td> <td>StartingViewForRow1b</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,1018</td> <td>NumberOfViewsInRow1b</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,1019</td> <td>AirFilterCalibrationDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,101A</td> <td>AirFilterCalibrationTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,101B</td> <td>PhantomCalibrationDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,101C</td> <td>PhantomCalibrationTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,101D</td> <td>ZSlopeCalibrationDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,101E</td> <td>ZSlopeCalibrationTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,101F</td> <td>CrosstalkCalibrationDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,1020</td> <td>CrosstalkCalibrationTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0045,1021</td> <td>IterboneOptionFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0045,1022</td> <td>PeristalticFlagOption</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0012</td> <td>LensDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0014</td> <td>RightLensSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0015</td> <td>LeftLensSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0018</td> <td>CylinderSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0028</td> <td>PrismSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0030</td> <td>HorizontalPrismPower</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0032</td> <td>HorizontalPrismBase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0034</td> <td>VerticalPrismPower</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0036</td> <td>VerticalPrismBase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0038</td> <td>LensSegmentType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0040</td> <td>OpticalTransmittance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0042</td> <td>ChannelWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0044</td> <td>PupilSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0046</td> <td>CornealSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0060</td> <td>DistancePupillaryDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0062</td> <td>NearPupillaryDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0064</td> <td>OtherPupillaryDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0075</td> <td>RadiusOfCurvature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0076</td> <td>KeratometricPower</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0077</td> <td>KeratometricAxis</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0092</td> <td>BackgroundColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0094</td> <td>Optotype</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0095</td> <td>OptotypePresentation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0100</td> <td>AddNearSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0101</td> <td>AddIntermediateSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0102</td> <td>AddOtherSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0104</td> <td>AddPower</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0106</td> <td>ViewingDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0125</td> <td>ViewingDistanceType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0135</td> <td>VisualAcuityModifiers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0137</td> <td>DecimalVisualAcuity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0139</td> <td>OptotypeDetailedDefinition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0046,0146</td> <td>SpherePower</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0046,0147</td> <td>CylinderPower</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0050,0004</td> <td>CalibrationImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0050,0010</td> <td>DeviceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0050,0014</td> <td>DeviceLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0050,0015</td> <td>ContainerComponentWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0050,0016</td> <td>DeviceDiameter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0050,0017</td> <td>DeviceDiameterUnits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0050,0018</td> <td>DeviceVolume</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0050,0019</td> <td>InterMarkerDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0050,001B</td> <td>ContainerComponentID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0050,0020</td> <td>DeviceDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0010</td> <td>EnergyWindowVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0011</td> <td>NumberOfEnergyWindows</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0012</td> <td>EnergyWindowInformationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0013</td> <td>EnergyWindowRangeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0014</td> <td>EnergyWindowLowerLimit</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0015</td> <td>EnergyWindowUpperLimit</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0016</td> <td>RadiopharmaceuticalInformationSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0017</td> <td>ResidualSyringeCounts</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0018</td> <td>EnergyWindowName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0020</td> <td>DetectorVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0021</td> <td>NumberOfDetectors</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0022</td> <td>DetectorInformationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0030</td> <td>PhaseVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0031</td> <td>NumberOfPhases</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0032</td> <td>PhaseInformationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0033</td> <td>NumberOfFramesInPhase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0036</td> <td>PhaseDelay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0038</td> <td>PauseBetweenFrames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0039</td> <td>PhaseDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0050</td> <td>RotationVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0051</td> <td>NumberOfRotations</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0052</td> <td>RotationInformationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0053</td> <td>NumberOfFramesInRotation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0060</td> <td>RRIntervalVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0061</td> <td>NumberOfRRIntervals</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0062</td> <td>GatedInformationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0063</td> <td>DataInformationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0070</td> <td>TimeSlotVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0071</td> <td>NumberOfTimeSlots</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0072</td> <td>TimeSlotInformationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0073</td> <td>TimeSlotTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0080</td> <td>SliceVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0081</td> <td>NumberOfSlices</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0090</td> <td>AngularViewVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0100</td> <td>TimeSliceVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0101</td> <td>NumberOfTimeSlices</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0200</td> <td>StartAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0202</td> <td>TypeOfDetectorMotion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0210</td> <td>TriggerVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0211</td> <td>NumberOfTriggersInPhase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0220</td> <td>ViewCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0222</td> <td>ViewModifierCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0300</td> <td>RadionuclideCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0302</td> <td>AdministrationRouteCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0304</td> <td>RadiopharmaceuticalCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0306</td> <td>CalibrationDataSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0308</td> <td>EnergyWindowNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0400</td> <td>ImageID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0410</td> <td>PatientOrientationCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0412</td> <td>PatientOrientationModifierCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,0414</td> <td>PatientGantryRelationshipCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,0500</td> <td>SliceProgressionDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,1000</td> <td>SeriesType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,1001</td> <td>Units</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,1002</td> <td>CountsSource</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,1004</td> <td>ReprojectionMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,1100</td> <td>RandomsCorrectionMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,1101</td> <td>AttenuationCorrectionMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,1102</td> <td>DecayCorrection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,1103</td> <td>ReconstructionMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,1104</td> <td>DetectorLinesOfResponseUsed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,1105</td> <td>ScatterCorrectionMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,1200</td> <td>AxialAcceptance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,1201</td> <td>AxialMash</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,1202</td> <td>TransverseMash</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,1203</td> <td>DetectorElementSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,1210</td> <td>CoincidenceWindowWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,1220</td> <td>SecondaryCountsType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,1300</td> <td>FrameReferenceTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,1310</td> <td>PrimaryCountsAccumulated</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,1311</td> <td>SecondaryCountsAccumulated</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,1320</td> <td>SliceSensitivityFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,1321</td> <td>DecayFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,1322</td> <td>DoseCalibrationFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,1323</td> <td>ScatterFractionFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,1324</td> <td>DeadTimeFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,1330</td> <td>ImageIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0054,1400</td> <td>CountsIncluded</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0054,1401</td> <td>DeadTimeCorrectionFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0060,3000</td> <td>HistogramSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0060,3002</td> <td>HistogramNumberOfBins</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0060,3004</td> <td>HistogramFirstBinValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0060,3006</td> <td>HistogramLastBinValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0060,3008</td> <td>HistogramBinWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0060,3010</td> <td>HistogramExplanation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0060,3020</td> <td>HistogramData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0062,0001</td> <td>SegmentationType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0062,0002</td> <td>SegmentSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0062,0003</td> <td>SegmentedPropertyCategoryCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0062,0004</td> <td>SegmentNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0062,0005</td> <td>SegmentLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0062,0006</td> <td>SegmentDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0062,0008</td> <td>SegmentAlgorithmType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0062,0009</td> <td>SegmentAlgorithmName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0062,000A</td> <td>SegmentIdentificationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0062,000B</td> <td>ReferencedSegmentNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0062,000C</td> <td>RecommendedDisplayGrayscaleValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0062,000D</td> <td>RecommendedDisplayCIELabValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0062,000E</td> <td>MaximumFractionalValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0062,000F</td> <td>SegmentedPropertyTypeCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0062,0010</td> <td>SegmentationFractionalType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0064,0002</td> <td>DeformableRegistrationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0064,0003</td> <td>SourceFrameOfReferenceUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0064,0005</td> <td>DeformableRegistrationGridSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0064,0007</td> <td>GridDimensions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0064,0008</td> <td>GridResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0064,0009</td> <td>VectorGridData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0064,000F</td> <td>PreDeformationMatrixRegistSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0064,0010</td> <td>PostDeformationMatrixRegistSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,0001</td> <td>NumberOfSurfaces</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,0002</td> <td>SurfaceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,0003</td> <td>SurfaceNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,0004</td> <td>SurfaceComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,0009</td> <td>SurfaceProcessing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,000A</td> <td>SurfaceProcessingRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,000E</td> <td>FiniteVolume</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,0010</td> <td>Manifold</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,0011</td> <td>SurfacePointsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,0015</td> <td>NumberOfSurfacePoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,0016</td> <td>PointCoordinatesData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,0017</td> <td>PointPositionAccuracy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,0018</td> <td>MeanPointDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,0019</td> <td>MaximumPointDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,001B</td> <td>AxisOfRotation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,001C</td> <td>CenterOfRotation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,001E</td> <td>NumberOfVectors</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,001F</td> <td>VectorDimensionality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,0020</td> <td>VectorAccuracy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,0021</td> <td>VectorCoordinateData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,0023</td> <td>TrianglePointIndexList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,0024</td> <td>EdgePointIndexList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,0025</td> <td>VertexPointIndexList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,0026</td> <td>TriangleStripSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,0027</td> <td>TriangleFanSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,0028</td> <td>LineSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,0029</td> <td>PrimitivePointIndexList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,002A</td> <td>SurfaceCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,002F</td> <td>AlgorithmFamilyCodeSequ</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,0031</td> <td>AlgorithmVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,0032</td> <td>AlgorithmParameters</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0066,0034</td> <td>FacetSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0066,0036</td> <td>AlgorithmName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0001</td> <td>GraphicAnnotationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0002</td> <td>GraphicLayer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0003</td> <td>BoundingBoxAnnotationUnits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0004</td> <td>AnchorPointAnnotationUnits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0005</td> <td>GraphicAnnotationUnits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0006</td> <td>UnformattedTextValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0008</td> <td>TextObjectSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0009</td> <td>GraphicObjectSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0010</td> <td>BoundingBoxTopLeftHandCorner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0011</td> <td>BoundingBoxBottomRightHandCorner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0012</td> <td>BoundingBoxTextHorizJustification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0014</td> <td>AnchorPoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0015</td> <td>AnchorPointVisibility</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0020</td> <td>GraphicDimensions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0021</td> <td>NumberOfGraphicPoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0022</td> <td>GraphicData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0023</td> <td>GraphicType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0024</td> <td>GraphicFilled</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0040</td> <td>ImageRotationRetired</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0041</td> <td>ImageHorizontalFlip</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0042</td> <td>ImageRotation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0050</td> <td>DisplayedAreaTopLeftTrial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0051</td> <td>DisplayedAreaBottomRightTrial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0052</td> <td>DisplayedAreaTopLeft</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0053</td> <td>DisplayedAreaBottomRight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,005A</td> <td>DisplayedAreaSelectionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0060</td> <td>GraphicLayerSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0062</td> <td>GraphicLayerOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0066</td> <td>GraphicLayerRecDisplayGraysclValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0067</td> <td>GraphicLayerRecDisplayRGBValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0068</td> <td>GraphicLayerDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0080</td> <td>ContentLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0081</td> <td>ContentDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0082</td> <td>PresentationCreationDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0083</td> <td>PresentationCreationTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0084</td> <td>ContentCreatorName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0086</td> <td>ContentCreatorIDCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0100</td> <td>PresentationSizeMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0101</td> <td>PresentationPixelSpacing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0102</td> <td>PresentationPixelAspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0103</td> <td>PresentationPixelMagRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0306</td> <td>ShapeType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0308</td> <td>RegistrationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0309</td> <td>MatrixRegistrationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,030A</td> <td>MatrixSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,030C</td> <td>FrameOfRefTransformationMatrixType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,030D</td> <td>RegistrationTypeCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,030F</td> <td>FiducialDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0310</td> <td>FiducialIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0311</td> <td>FiducialIdentifierCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0312</td> <td>ContourUncertaintyRadius</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0314</td> <td>UsedFiducialsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0318</td> <td>GraphicCoordinatesDataSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,031A</td> <td>FiducialUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,031C</td> <td>FiducialSetSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,031E</td> <td>FiducialSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0401</td> <td>GraphicLayerRecomDisplayCIELabVal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0402</td> <td>BlendingSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0403</td> <td>RelativeOpacity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0070,0404</td> <td>ReferencedSpatialRegistrationSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0070,0405</td> <td>BlendingPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0002</td> <td>HangingProtocolName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0004</td> <td>HangingProtocolDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0006</td> <td>HangingProtocolLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0008</td> <td>HangingProtocolCreator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,000A</td> <td>HangingProtocolCreationDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,000C</td> <td>HangingProtocolDefinitionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,000E</td> <td>HangingProtocolUserIDCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0010</td> <td>HangingProtocolUserGroupName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0012</td> <td>SourceHangingProtocolSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0014</td> <td>NumberOfPriorsReferenced</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0020</td> <td>ImageSetsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0022</td> <td>ImageSetSelectorSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0024</td> <td>ImageSetSelectorUsageFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0026</td> <td>SelectorAttribute</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0028</td> <td>SelectorValueNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0030</td> <td>TimeBasedImageSetsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0032</td> <td>ImageSetNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0034</td> <td>ImageSetSelectorCategory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0038</td> <td>RelativeTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,003A</td> <td>RelativeTimeUnits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,003C</td> <td>AbstractPriorValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,003E</td> <td>AbstractPriorCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0040</td> <td>ImageSetLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0050</td> <td>SelectorAttributeVR</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0052</td> <td>SelectorSequencePointer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0054</td> <td>SelectorSeqPointerPrivateCreator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0056</td> <td>SelectorAttributePrivateCreator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0060</td> <td>SelectorATValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0062</td> <td>SelectorCSValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0064</td> <td>SelectorISValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0066</td> <td>SelectorLOValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0068</td> <td>SelectorLTValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,006A</td> <td>SelectorPNValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,006C</td> <td>SelectorSHValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,006E</td> <td>SelectorSTValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0070</td> <td>SelectorUTValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0072</td> <td>SelectorDSValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0074</td> <td>SelectorFDValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0076</td> <td>SelectorFLValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0078</td> <td>SelectorULValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,007A</td> <td>SelectorUSValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,007C</td> <td>SelectorSLValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,007E</td> <td>SelectorSSValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0080</td> <td>SelectorCodeSequenceValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0100</td> <td>NumberOfScreens</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0102</td> <td>NominalScreenDefinitionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0104</td> <td>NumberOfVerticalPixels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0106</td> <td>NumberOfHorizontalPixels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0108</td> <td>DisplayEnvironmentSpatialPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,010A</td> <td>ScreenMinimumGrayscaleBitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,010C</td> <td>ScreenMinimumColorBitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,010E</td> <td>ApplicationMaximumRepaintTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0200</td> <td>DisplaySetsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0202</td> <td>DisplaySetNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0203</td> <td>DisplaySetLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0204</td> <td>DisplaySetPresentationGroup</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0206</td> <td>DisplaySetPresentationGroupDescr</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0208</td> <td>PartialDataDisplayHandling</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0210</td> <td>SynchronizedScrollingSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0212</td> <td>DisplaySetScrollingGroup</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0214</td> <td>NavigationIndicatorSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0216</td> <td>NavigationDisplaySet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0218</td> <td>ReferenceDisplaySets</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0300</td> <td>ImageBoxesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0302</td> <td>ImageBoxNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0304</td> <td>ImageBoxLayoutType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0306</td> <td>ImageBoxTileHorizontalDimension</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0308</td> <td>ImageBoxTileVerticalDimension</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0310</td> <td>ImageBoxScrollDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0312</td> <td>ImageBoxSmallScrollType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0314</td> <td>ImageBoxSmallScrollAmount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0316</td> <td>ImageBoxLargeScrollType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0318</td> <td>ImageBoxLargeScrollAmount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0320</td> <td>ImageBoxOverlapPriority</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0330</td> <td>CineRelativeToRealTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0400</td> <td>FilterOperationsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0402</td> <td>FilterByCategory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0404</td> <td>FilterByAttributePresence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0406</td> <td>FilterByOperator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0432</td> <td>SynchronizedImageBoxList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0434</td> <td>TypeOfSynchronization</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0500</td> <td>BlendingOperationType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0510</td> <td>ReformattingOperationType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0512</td> <td>ReformattingThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0514</td> <td>ReformattingInterval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0516</td> <td>ReformattingOpInitialViewDir</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0520</td> <td>RenderingType3D</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0600</td> <td>SortingOperationsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0602</td> <td>SortByCategory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0604</td> <td>SortingDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0700</td> <td>DisplaySetPatientOrientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0702</td> <td>VOIType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0704</td> <td>PseudoColorType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0706</td> <td>ShowGrayscaleInverted</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0710</td> <td>ShowImageTrueSizeFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0712</td> <td>ShowGraphicAnnotationFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0714</td> <td>ShowPatientDemographicsFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0716</td> <td>ShowAcquisitionTechniquesFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0072,0717</td> <td>DisplaySetHorizontalJustification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0072,0718</td> <td>DisplaySetVerticalJustification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1000</td> <td>UnifiedProcedureStepState</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1002</td> <td>UPSProgressInformationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1004</td> <td>UnifiedProcedureStepProgress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1006</td> <td>UnifiedProcedureStepProgressDescr</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1008</td> <td>UnifiedProcedureStepComURISeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,100a</td> <td>ContactURI</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,100c</td> <td>ContactDisplayName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1020</td> <td>BeamTaskSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1022</td> <td>BeamTaskType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1024</td> <td>BeamOrderIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1030</td> <td>DeliveryVerificationImageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1032</td> <td>VerificationImageTiming</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1034</td> <td>DoubleExposureFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1036</td> <td>DoubleExposureOrdering</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1038</td> <td>DoubleExposureMeterset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,103A</td> <td>DoubleExposureFieldDelta</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1040</td> <td>RelatedReferenceRTImageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1042</td> <td>GeneralMachineVerificationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1044</td> <td>ConventionalMachineVerificationSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1046</td> <td>IonMachineVerificationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1048</td> <td>FailedAttributesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,104A</td> <td>OverriddenAttributesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,104C</td> <td>ConventionalControlPointVerifySeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,104E</td> <td>IonControlPointVerificationSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1050</td> <td>AttributeOccurrenceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1052</td> <td>AttributeOccurrencePointer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1054</td> <td>AttributeItemSelector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1056</td> <td>AttributeOccurrencePrivateCreator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1200</td> <td>ScheduledProcedureStepPriority</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1202</td> <td>WorklistLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1204</td> <td>ProcedureStepLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1210</td> <td>ScheduledProcessingParametersSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1212</td> <td>PerformedProcessingParametersSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1216</td> <td>UPSPerformedProcedureSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1220</td> <td>RelatedProcedureStepSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1222</td> <td>ProcedureStepRelationshipType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1230</td> <td>DeletionLock</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1234</td> <td>ReceivingAE</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1236</td> <td>RequestingAE</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1238</td> <td>ReasonForCancellation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1242</td> <td>SCPStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0074,1244</td> <td>SubscriptionListStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0074,1246</td> <td>UPSListStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0088,0130</td> <td>StorageMediaFileSetID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0088,0140</td> <td>StorageMediaFileSetUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0088,0200</td> <td>IconImageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0088,0904</td> <td>TopicTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0088,0906</td> <td>TopicSubject</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0088,0910</td> <td>TopicAuthor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0088,0912</td> <td>TopicKeywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0100,0410</td> <td>SOPInstanceStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0100,0420</td> <td>SOPAuthorizationDateAndTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0100,0424</td> <td>SOPAuthorizationComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0100,0426</td> <td>AuthorizationEquipmentCertNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0400,0005</td> <td>MACIDNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0400,0010</td> <td>MACCalculationTransferSyntaxUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0400,0015</td> <td>MACAlgorithm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0400,0020</td> <td>DataElementsSigned</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0400,0100</td> <td>DigitalSignatureUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0400,0105</td> <td>DigitalSignatureDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0400,0110</td> <td>CertificateType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0400,0115</td> <td>CertificateOfSigner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0400,0120</td> <td>Signature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0400,0305</td> <td>CertifiedTimestampType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0400,0310</td> <td>CertifiedTimestamp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0400,0401</td> <td>DigitalSignaturePurposeCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0400,0402</td> <td>ReferencedDigitalSignatureSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0400,0403</td> <td>ReferencedSOPInstanceMACSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0400,0404</td> <td>MAC</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0400,0500</td> <td>EncryptedAttributesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0400,0510</td> <td>EncryptedContentTransferSyntaxUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0400,0520</td> <td>EncryptedContent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0400,0550</td> <td>ModifiedAttributesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0400,0561</td> <td>OriginalAttributesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0400,0562</td> <td>AttributeModificationDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0400,0563</td> <td>ModifyingSystem</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>0400,0564</td> <td>SourceOfPreviousValues</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>0400,0565</td> <td>ReasonForTheAttributeModification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>1000,xxx0</td> <td>EscapeTriplet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>1000,xxx1</td> <td>RunLengthTriplet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>1000,xxx2</td> <td>HuffmanTableSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>1000,xxx3</td> <td>HuffmanTableTriplet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>1000,xxx4</td> <td>ShiftTableSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>1000,xxx5</td> <td>ShiftTableTriplet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>1010,xxxx</td> <td>ZonalMap</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2000,0010</td> <td>NumberOfCopies</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2000,001E</td> <td>PrinterConfigurationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2000,0020</td> <td>PrintPriority</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2000,0030</td> <td>MediumType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2000,0040</td> <td>FilmDestination</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2000,0050</td> <td>FilmSessionLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2000,0060</td> <td>MemoryAllocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2000,0061</td> <td>MaximumMemoryAllocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2000,0062</td> <td>ColorImagePrintingFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2000,0063</td> <td>CollationFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2000,0065</td> <td>AnnotationFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2000,0067</td> <td>ImageOverlayFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2000,0069</td> <td>PresentationLUTFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2000,006A</td> <td>ImageBoxPresentationLUTFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2000,00A0</td> <td>MemoryBitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2000,00A1</td> <td>PrintingBitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2000,00A2</td> <td>MediaInstalledSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2000,00A4</td> <td>OtherMediaAvailableSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2000,00A8</td> <td>SupportedImageDisplayFormatSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2000,0500</td> <td>ReferencedFilmBoxSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2000,0510</td> <td>ReferencedStoredPrintSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2010,0010</td> <td>ImageDisplayFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2010,0030</td> <td>AnnotationDisplayFormatID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2010,0040</td> <td>FilmOrientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2010,0050</td> <td>FilmSizeID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2010,0052</td> <td>PrinterResolutionID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2010,0054</td> <td>DefaultPrinterResolutionID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2010,0060</td> <td>MagnificationType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2010,0080</td> <td>SmoothingType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2010,00A6</td> <td>DefaultMagnificationType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2010,00A7</td> <td>OtherMagnificationTypesAvailable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2010,00A8</td> <td>DefaultSmoothingType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2010,00A9</td> <td>OtherSmoothingTypesAvailable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2010,0100</td> <td>BorderDensity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2010,0110</td> <td>EmptyImageDensity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2010,0120</td> <td>MinDensity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2010,0130</td> <td>MaxDensity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2010,0140</td> <td>Trim</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2010,0150</td> <td>ConfigurationInformation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2010,0152</td> <td>ConfigurationInformationDescr</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2010,0154</td> <td>MaximumCollatedFilms</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2010,015E</td> <td>Illumination</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2010,0160</td> <td>ReflectedAmbientLight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2010,0376</td> <td>PrinterPixelSpacing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2010,0500</td> <td>ReferencedFilmSessionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2010,0510</td> <td>ReferencedImageBoxSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2010,0520</td> <td>ReferencedBasicAnnotationBoxSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2020,0010</td> <td>ImageBoxPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2020,0020</td> <td>Polarity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2020,0030</td> <td>RequestedImageSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2020,0040</td> <td>RequestedDecimate-CropBehavior</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2020,0050</td> <td>RequestedResolutionID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2020,00A0</td> <td>RequestedImageSizeFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2020,00A2</td> <td>DecimateCropResult</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2020,0110</td> <td>BasicGrayscaleImageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2020,0111</td> <td>BasicColorImageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2020,0130</td> <td>ReferencedImageOverlayBoxSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2020,0140</td> <td>ReferencedVOILUTBoxSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2030,0010</td> <td>AnnotationPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2030,0020</td> <td>TextString</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2040,0010</td> <td>ReferencedOverlayPlaneSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2040,0011</td> <td>ReferencedOverlayPlaneGroups</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2040,0020</td> <td>OverlayPixelDataSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2040,0060</td> <td>OverlayMagnificationType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2040,0070</td> <td>OverlaySmoothingType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2040,0072</td> <td>OverlayOrImageMagnification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2040,0074</td> <td>MagnifyToNumberOfColumns</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2040,0080</td> <td>OverlayForegroundDensity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2040,0082</td> <td>OverlayBackgroundDensity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2040,0090</td> <td>OverlayMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2040,0100</td> <td>ThresholdDensity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2040,0500</td> <td>ReferencedImageBoxSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2050,0010</td> <td>PresentationLUTSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2050,0020</td> <td>PresentationLUTShape</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2050,0500</td> <td>ReferencedPresentationLUTSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2100,0010</td> <td>PrintJobID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2100,0020</td> <td>ExecutionStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2100,0030</td> <td>ExecutionStatusInfo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2100,0040</td> <td>CreationDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2100,0050</td> <td>CreationTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2100,0070</td> <td>Originator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2100,0140</td> <td>DestinationAE</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2100,0160</td> <td>OwnerID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2100,0170</td> <td>NumberOfFilms</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2100,0500</td> <td>ReferencedPrintJobSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2110,0010</td> <td>PrinterStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2110,0020</td> <td>PrinterStatusInfo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2110,0030</td> <td>PrinterName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2110,0099</td> <td>PrintQueueID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2120,0010</td> <td>QueueStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2120,0050</td> <td>PrintJobDescriptionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2120,0070</td> <td>ReferencedPrintJobSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2130,0010</td> <td>PrintManagementCapabilitiesSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2130,0015</td> <td>PrinterCharacteristicsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2130,0030</td> <td>FilmBoxContentSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2130,0040</td> <td>ImageBoxContentSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2130,0050</td> <td>AnnotationContentSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2130,0060</td> <td>ImageOverlayBoxContentSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2130,0080</td> <td>PresentationLUTContentSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2130,00A0</td> <td>ProposedStudySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2130,00C0</td> <td>OriginalImageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2200,0001</td> <td>LabelFromInfoExtractedFromInstance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2200,0002</td> <td>LabelText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2200,0003</td> <td>LabelStyleSelection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2200,0004</td> <td>MediaDisposition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2200,0005</td> <td>BarcodeValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2200,0006</td> <td>BarcodeSymbology</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2200,0007</td> <td>AllowMediaSplitting</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2200,0008</td> <td>IncludeNonDICOMObjects</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2200,0009</td> <td>IncludeDisplayApplication</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2200,000A</td> <td>SaveCompInstancesAfterMediaCreate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2200,000B</td> <td>TotalNumberMediaPiecesCreated</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2200,000C</td> <td>RequestedMediaApplicationProfile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2200,000D</td> <td>ReferencedStorageMediaSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2200,000E</td> <td>FailureAttributes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>2200,000F</td> <td>AllowLossyCompression</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>2200,0020</td> <td>RequestPriority</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3002,0002</td> <td>RTImageLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3002,0003</td> <td>RTImageName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3002,0004</td> <td>RTImageDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3002,000A</td> <td>ReportedValuesOrigin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3002,000C</td> <td>RTImagePlane</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3002,000D</td> <td>XRayImageReceptorTranslation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3002,000E</td> <td>XRayImageReceptorAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3002,0010</td> <td>RTImageOrientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3002,0011</td> <td>ImagePlanePixelSpacing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3002,0012</td> <td>RTImagePosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3002,0020</td> <td>RadiationMachineName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3002,0022</td> <td>RadiationMachineSAD</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3002,0024</td> <td>RadiationMachineSSD</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3002,0026</td> <td>RTImageSID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3002,0028</td> <td>SourceToReferenceObjectDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3002,0029</td> <td>FractionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3002,0030</td> <td>ExposureSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3002,0032</td> <td>MetersetExposure</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3002,0034</td> <td>DiaphragmPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3002,0040</td> <td>FluenceMapSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3002,0041</td> <td>FluenceDataSource</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3002,0042</td> <td>FluenceDataScale</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3002,0051</td> <td>FluenceMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3002,0052</td> <td>FluenceModeID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3004,0001</td> <td>DVHType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3004,0002</td> <td>DoseUnits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3004,0004</td> <td>DoseType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3004,0006</td> <td>DoseComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3004,0008</td> <td>NormalizationPoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3004,000A</td> <td>DoseSummationType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3004,000C</td> <td>GridFrameOffsetVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3004,000E</td> <td>DoseGridScaling</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3004,0010</td> <td>RTDoseROISequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3004,0012</td> <td>DoseValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3004,0014</td> <td>TissueHeterogeneityCorrection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3004,0040</td> <td>DVHNormalizationPoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3004,0042</td> <td>DVHNormalizationDoseValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3004,0050</td> <td>DVHSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3004,0052</td> <td>DVHDoseScaling</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3004,0054</td> <td>DVHVolumeUnits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3004,0056</td> <td>DVHNumberOfBins</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3004,0058</td> <td>DVHData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3004,0060</td> <td>DVHReferencedROISequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3004,0062</td> <td>DVHROIContributionType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3004,0070</td> <td>DVHMinimumDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3004,0072</td> <td>DVHMaximumDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3004,0074</td> <td>DVHMeanDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0002</td> <td>StructureSetLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0004</td> <td>StructureSetName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0006</td> <td>StructureSetDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0008</td> <td>StructureSetDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0009</td> <td>StructureSetTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0010</td> <td>ReferencedFrameOfReferenceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0012</td> <td>RTReferencedStudySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0014</td> <td>RTReferencedSeriesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0016</td> <td>ContourImageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0020</td> <td>StructureSetROISequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0022</td> <td>ROINumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0024</td> <td>ReferencedFrameOfReferenceUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0026</td> <td>ROIName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0028</td> <td>ROIDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,002A</td> <td>ROIDisplayColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,002C</td> <td>ROIVolume</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0030</td> <td>RTRelatedROISequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0033</td> <td>RTROIRelationship</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0036</td> <td>ROIGenerationAlgorithm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0038</td> <td>ROIGenerationDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0039</td> <td>ROIContourSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0040</td> <td>ContourSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0042</td> <td>ContourGeometricType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0044</td> <td>ContourSlabThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0045</td> <td>ContourOffsetVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0046</td> <td>NumberOfContourPoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0048</td> <td>ContourNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0049</td> <td>AttachedContours</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0050</td> <td>ContourData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0080</td> <td>RTROIObservationsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0082</td> <td>ObservationNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0084</td> <td>ReferencedROINumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0085</td> <td>ROIObservationLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,0086</td> <td>RTROIIdentificationCodeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,0088</td> <td>ROIObservationDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,00A0</td> <td>RelatedRTROIObservationsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,00A4</td> <td>RTROIInterpretedType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,00A6</td> <td>ROIInterpreter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,00B0</td> <td>ROIPhysicalPropertiesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,00B2</td> <td>ROIPhysicalProperty</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,00B4</td> <td>ROIPhysicalPropertyValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,00B6</td> <td>ROIElementalCompositionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,00B7</td> <td>ROIElementalCompAtomicNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,00B8</td> <td>ROIElementalCompAtomicMassFraction</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,00C0</td> <td>FrameOfReferenceRelationshipSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,00C2</td> <td>RelatedFrameOfReferenceUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,00C4</td> <td>FrameOfReferenceTransformType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3006,00C6</td> <td>FrameOfReferenceTransformMatrix</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3006,00C8</td> <td>FrameOfReferenceTransformComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0010</td> <td>MeasuredDoseReferenceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0012</td> <td>MeasuredDoseDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0014</td> <td>MeasuredDoseType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0016</td> <td>MeasuredDoseValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0020</td> <td>TreatmentSessionBeamSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0021</td> <td>TreatmentSessionIonBeamSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0022</td> <td>CurrentFractionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0024</td> <td>TreatmentControlPointDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0025</td> <td>TreatmentControlPointTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,002A</td> <td>TreatmentTerminationStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,002B</td> <td>TreatmentTerminationCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,002C</td> <td>TreatmentVerificationStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0030</td> <td>ReferencedTreatmentRecordSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0032</td> <td>SpecifiedPrimaryMeterset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0033</td> <td>SpecifiedSecondaryMeterset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0036</td> <td>DeliveredPrimaryMeterset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0037</td> <td>DeliveredSecondaryMeterset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,003A</td> <td>SpecifiedTreatmentTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,003B</td> <td>DeliveredTreatmentTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0040</td> <td>ControlPointDeliverySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0041</td> <td>IonControlPointDeliverySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0042</td> <td>SpecifiedMeterset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0044</td> <td>DeliveredMeterset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0045</td> <td>MetersetRateSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0046</td> <td>MetersetRateDelivered</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0047</td> <td>ScanSpotMetersetsDelivered</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0048</td> <td>DoseRateDelivered</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0050</td> <td>TreatmentSummaryCalcDoseRefSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0052</td> <td>CumulativeDoseToDoseReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0054</td> <td>FirstTreatmentDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0056</td> <td>MostRecentTreatmentDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,005A</td> <td>NumberOfFractionsDelivered</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0060</td> <td>OverrideSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0061</td> <td>ParameterSequencePointer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0062</td> <td>OverrideParameterPointer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0063</td> <td>ParameterItemIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0064</td> <td>MeasuredDoseReferenceNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0065</td> <td>ParameterPointer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0066</td> <td>OverrideReason</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0068</td> <td>CorrectedParameterSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,006A</td> <td>CorrectionValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0070</td> <td>CalculatedDoseReferenceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0072</td> <td>CalculatedDoseReferenceNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0074</td> <td>CalculatedDoseReferenceDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0076</td> <td>CalculatedDoseReferenceDoseValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0078</td> <td>StartMeterset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,007A</td> <td>EndMeterset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0080</td> <td>ReferencedMeasuredDoseReferenceSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0082</td> <td>ReferencedMeasuredDoseReferenceNum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0090</td> <td>ReferencedCalculatedDoseRefSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0092</td> <td>ReferencedCalculatedDoseRefNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,00A0</td> <td>BeamLimitingDeviceLeafPairsSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,00B0</td> <td>RecordedWedgeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,00C0</td> <td>RecordedCompensatorSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,00D0</td> <td>RecordedBlockSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,00E0</td> <td>TreatmentSummaryMeasuredDoseRefSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,00F0</td> <td>RecordedSnoutSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,00F2</td> <td>RecordedRangeShifterSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,00F4</td> <td>RecordedLateralSpreadingDeviceSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,00F6</td> <td>RecordedRangeModulatorSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0100</td> <td>RecordedSourceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0105</td> <td>SourceSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0110</td> <td>TreatmentSessionAppSetupSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0116</td> <td>ApplicationSetupCheck</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0120</td> <td>RecordedBrachyAccessoryDeviceSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0122</td> <td>ReferencedBrachyAccessoryDeviceNum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0130</td> <td>RecordedChannelSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0132</td> <td>SpecifiedChannelTotalTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0134</td> <td>DeliveredChannelTotalTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0136</td> <td>SpecifiedNumberOfPulses</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0138</td> <td>DeliveredNumberOfPulses</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,013A</td> <td>SpecifiedPulseRepetitionInterval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,013C</td> <td>DeliveredPulseRepetitionInterval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0140</td> <td>RecordedSourceApplicatorSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0142</td> <td>ReferencedSourceApplicatorNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0150</td> <td>RecordedChannelShieldSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0152</td> <td>ReferencedChannelShieldNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0160</td> <td>BrachyControlPointDeliveredSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0162</td> <td>SafePositionExitDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0164</td> <td>SafePositionExitTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0166</td> <td>SafePositionReturnDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0168</td> <td>SafePositionReturnTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0200</td> <td>CurrentTreatmentStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0202</td> <td>TreatmentStatusComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0220</td> <td>FractionGroupSummarySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0223</td> <td>ReferencedFractionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0224</td> <td>FractionGroupType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0230</td> <td>BeamStopperPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0240</td> <td>FractionStatusSummarySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>3008,0250</td> <td>TreatmentDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>3008,0251</td> <td>TreatmentTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0002</td> <td>RTPlanLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0003</td> <td>RTPlanName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0004</td> <td>RTPlanDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0006</td> <td>RTPlanDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0007</td> <td>RTPlanTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0009</td> <td>TreatmentProtocols</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,000A</td> <td>PlanIntent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,000B</td> <td>TreatmentSites</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,000C</td> <td>RTPlanGeometry</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,000E</td> <td>PrescriptionDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0010</td> <td>DoseReferenceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0012</td> <td>DoseReferenceNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0013</td> <td>DoseReferenceUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0014</td> <td>DoseReferenceStructureType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0015</td> <td>NominalBeamEnergyUnit</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0016</td> <td>DoseReferenceDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0018</td> <td>DoseReferencePointCoordinates</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,001A</td> <td>NominalPriorDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0020</td> <td>DoseReferenceType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0021</td> <td>ConstraintWeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0022</td> <td>DeliveryWarningDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0023</td> <td>DeliveryMaximumDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0025</td> <td>TargetMinimumDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0026</td> <td>TargetPrescriptionDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0027</td> <td>TargetMaximumDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0028</td> <td>TargetUnderdoseVolumeFraction</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,002A</td> <td>OrganAtRiskFullVolumeDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,002B</td> <td>OrganAtRiskLimitDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,002C</td> <td>OrganAtRiskMaximumDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,002D</td> <td>OrganAtRiskOverdoseVolumeFraction</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0040</td> <td>ToleranceTableSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0042</td> <td>ToleranceTableNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0043</td> <td>ToleranceTableLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0044</td> <td>GantryAngleTolerance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0046</td> <td>BeamLimitingDeviceAngleTolerance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0048</td> <td>BeamLimitingDeviceToleranceSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,004A</td> <td>BeamLimitingDevicePositionTol</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,004B</td> <td>SnoutPositionTolerance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,004C</td> <td>PatientSupportAngleTolerance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,004E</td> <td>TableTopEccentricAngleTolerance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,004F</td> <td>TableTopPitchAngleTolerance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0050</td> <td>TableTopRollAngleTolerance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0051</td> <td>TableTopVerticalPositionTolerance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0052</td> <td>TableTopLongitudinalPositionTol</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0053</td> <td>TableTopLateralPositionTolerance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0055</td> <td>RTPlanRelationship</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0070</td> <td>FractionGroupSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0071</td> <td>FractionGroupNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0072</td> <td>FractionGroupDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0078</td> <td>NumberOfFractionsPlanned</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0079</td> <td>NumberFractionPatternDigitsPerDay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,007A</td> <td>RepeatFractionCycleLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,007B</td> <td>FractionPattern</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0080</td> <td>NumberOfBeams</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0082</td> <td>BeamDoseSpecificationPoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0084</td> <td>BeamDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0086</td> <td>BeamMeterset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0088</td> <td>BeamDosePointDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0089</td> <td>BeamDosePointEquivalentDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,008A</td> <td>BeamDosePointSSD</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00A0</td> <td>NumberOfBrachyApplicationSetups</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00A2</td> <td>BrachyAppSetupDoseSpecPoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00A4</td> <td>BrachyApplicationSetupDose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00B0</td> <td>BeamSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00B2</td> <td>TreatmentMachineName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00B3</td> <td>PrimaryDosimeterUnit</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00B4</td> <td>SourceAxisDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00B6</td> <td>BeamLimitingDeviceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00B8</td> <td>RTBeamLimitingDeviceType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00BA</td> <td>SourceToBeamLimitingDeviceDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00BB</td> <td>IsocenterToBeamLimitingDeviceDist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00BC</td> <td>NumberOfLeafJawPairs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00BE</td> <td>LeafPositionBoundaries</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00C0</td> <td>BeamNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00C2</td> <td>BeamName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00C3</td> <td>BeamDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00C4</td> <td>BeamType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00C6</td> <td>RadiationType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00C7</td> <td>HighDoseTechniqueType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00C8</td> <td>ReferenceImageNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00CA</td> <td>PlannedVerificationImageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00CC</td> <td>ImagingDeviceSpecificAcqParams</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00CE</td> <td>TreatmentDeliveryType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00D0</td> <td>NumberOfWedges</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00D1</td> <td>WedgeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00D2</td> <td>WedgeNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00D3</td> <td>WedgeType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00D4</td> <td>WedgeID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00D5</td> <td>WedgeAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00D6</td> <td>WedgeFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00D7</td> <td>TotalWedgeTrayWaterEquivThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00D8</td> <td>WedgeOrientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00D9</td> <td>IsocenterToWedgeTrayDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00DA</td> <td>SourceToWedgeTrayDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00DB</td> <td>WedgeThinEdgePosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00DC</td> <td>BolusID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00DD</td> <td>BolusDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00E0</td> <td>NumberOfCompensators</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00E1</td> <td>MaterialID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00E2</td> <td>TotalCompensatorTrayFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00E3</td> <td>CompensatorSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00E4</td> <td>CompensatorNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00E5</td> <td>CompensatorID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00E6</td> <td>SourceToCompensatorTrayDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00E7</td> <td>CompensatorRows</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00E8</td> <td>CompensatorColumns</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00E9</td> <td>CompensatorPixelSpacing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00EA</td> <td>CompensatorPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00EB</td> <td>CompensatorTransmissionData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00EC</td> <td>CompensatorThicknessData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00ED</td> <td>NumberOfBoli</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00EE</td> <td>CompensatorType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00F0</td> <td>NumberOfBlocks</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00F2</td> <td>TotalBlockTrayFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00F3</td> <td>TotalBlockTrayWaterEquivThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00F4</td> <td>BlockSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00F5</td> <td>BlockTrayID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00F6</td> <td>SourceToBlockTrayDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00F7</td> <td>IsocenterToBlockTrayDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00F8</td> <td>BlockType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00F9</td> <td>AccessoryCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00FA</td> <td>BlockDivergence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00FB</td> <td>BlockMountingPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,00FC</td> <td>BlockNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,00FE</td> <td>BlockName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0100</td> <td>BlockThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0102</td> <td>BlockTransmission</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0104</td> <td>BlockNumberOfPoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0106</td> <td>BlockData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0107</td> <td>ApplicatorSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0108</td> <td>ApplicatorID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0109</td> <td>ApplicatorType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,010A</td> <td>ApplicatorDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,010C</td> <td>CumulativeDoseReferenceCoefficient</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,010E</td> <td>FinalCumulativeMetersetWeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0110</td> <td>NumberOfControlPoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0111</td> <td>ControlPointSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0112</td> <td>ControlPointIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0114</td> <td>NominalBeamEnergy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0115</td> <td>DoseRateSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0116</td> <td>WedgePositionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0118</td> <td>WedgePosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,011A</td> <td>BeamLimitingDevicePositionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,011C</td> <td>LeafJawPositions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,011E</td> <td>GantryAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,011F</td> <td>GantryRotationDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0120</td> <td>BeamLimitingDeviceAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0121</td> <td>BeamLimitingDeviceRotateDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0122</td> <td>PatientSupportAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0123</td> <td>PatientSupportRotationDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0124</td> <td>TableTopEccentricAxisDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0125</td> <td>TableTopEccentricAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0126</td> <td>TableTopEccentricRotateDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0128</td> <td>TableTopVerticalPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0129</td> <td>TableTopLongitudinalPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,012A</td> <td>TableTopLateralPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,012C</td> <td>IsocenterPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,012E</td> <td>SurfaceEntryPoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0130</td> <td>SourceToSurfaceDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0134</td> <td>CumulativeMetersetWeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0140</td> <td>TableTopPitchAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0142</td> <td>TableTopPitchRotationDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0144</td> <td>TableTopRollAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0146</td> <td>TableTopRollRotationDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0148</td> <td>HeadFixationAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,014A</td> <td>GantryPitchAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,014C</td> <td>GantryPitchRotationDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,014E</td> <td>GantryPitchAngleTolerance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0180</td> <td>PatientSetupSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0182</td> <td>PatientSetupNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0183</td> <td>PatientSetupLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0184</td> <td>PatientAdditionalPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0190</td> <td>FixationDeviceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0192</td> <td>FixationDeviceType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0194</td> <td>FixationDeviceLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0196</td> <td>FixationDeviceDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0198</td> <td>FixationDevicePosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0199</td> <td>FixationDevicePitchAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,019A</td> <td>FixationDeviceRollAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,01A0</td> <td>ShieldingDeviceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,01A2</td> <td>ShieldingDeviceType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,01A4</td> <td>ShieldingDeviceLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,01A6</td> <td>ShieldingDeviceDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,01A8</td> <td>ShieldingDevicePosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,01B0</td> <td>SetupTechnique</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,01B2</td> <td>SetupTechniqueDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,01B4</td> <td>SetupDeviceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,01B6</td> <td>SetupDeviceType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,01B8</td> <td>SetupDeviceLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,01BA</td> <td>SetupDeviceDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,01BC</td> <td>SetupDeviceParameter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,01D0</td> <td>SetupReferenceDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,01D2</td> <td>TableTopVerticalSetupDisplacement</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,01D4</td> <td>TableTopLongitudinalSetupDisplace</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,01D6</td> <td>TableTopLateralSetupDisplacement</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0200</td> <td>BrachyTreatmentTechnique</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0202</td> <td>BrachyTreatmentType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0206</td> <td>TreatmentMachineSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0210</td> <td>SourceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0212</td> <td>SourceNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0214</td> <td>SourceType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0216</td> <td>SourceManufacturer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0218</td> <td>ActiveSourceDiameter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,021A</td> <td>ActiveSourceLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0222</td> <td>SourceEncapsulationNomThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0224</td> <td>SourceEncapsulationNomTransmission</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0226</td> <td>SourceIsotopeName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0228</td> <td>SourceIsotopeHalfLife</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0229</td> <td>SourceStrengthUnits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,022A</td> <td>ReferenceAirKermaRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,022B</td> <td>SourceStrength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,022C</td> <td>SourceStrengthReferenceDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,022E</td> <td>SourceStrengthReferenceTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0230</td> <td>ApplicationSetupSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0232</td> <td>ApplicationSetupType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0234</td> <td>ApplicationSetupNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0236</td> <td>ApplicationSetupName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0238</td> <td>ApplicationSetupManufacturer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0240</td> <td>TemplateNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0242</td> <td>TemplateType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0244</td> <td>TemplateName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0250</td> <td>TotalReferenceAirKerma</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0260</td> <td>BrachyAccessoryDeviceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0262</td> <td>BrachyAccessoryDeviceNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0263</td> <td>BrachyAccessoryDeviceID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0264</td> <td>BrachyAccessoryDeviceType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0266</td> <td>BrachyAccessoryDeviceName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,026A</td> <td>BrachyAccessoryDeviceNomThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,026C</td> <td>BrachyAccessoryDevNomTransmission</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0280</td> <td>ChannelSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0282</td> <td>ChannelNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0284</td> <td>ChannelLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0286</td> <td>ChannelTotalTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0288</td> <td>SourceMovementType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,028A</td> <td>NumberOfPulses</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,028C</td> <td>PulseRepetitionInterval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0290</td> <td>SourceApplicatorNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0291</td> <td>SourceApplicatorID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0292</td> <td>SourceApplicatorType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0294</td> <td>SourceApplicatorName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0296</td> <td>SourceApplicatorLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0298</td> <td>SourceApplicatorManufacturer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,029C</td> <td>SourceApplicatorWallNomThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,029E</td> <td>SourceApplicatorWallNomTrans</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,02A0</td> <td>SourceApplicatorStepSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,02A2</td> <td>TransferTubeNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,02A4</td> <td>TransferTubeLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,02B0</td> <td>ChannelShieldSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,02B2</td> <td>ChannelShieldNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,02B3</td> <td>ChannelShieldID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,02B4</td> <td>ChannelShieldName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,02B8</td> <td>ChannelShieldNominalThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,02BA</td> <td>ChannelShieldNominalTransmission</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,02C8</td> <td>FinalCumulativeTimeWeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,02D0</td> <td>BrachyControlPointSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,02D2</td> <td>ControlPointRelativePosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,02D4</td> <td>ControlPoint3DPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,02D6</td> <td>CumulativeTimeWeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,02E0</td> <td>CompensatorDivergence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,02E1</td> <td>CompensatorMountingPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,02E2</td> <td>SourceToCompensatorDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,02E3</td> <td>TotalCompTrayWaterEquivThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,02E4</td> <td>IsocenterToCompensatorTrayDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,02E5</td> <td>CompensatorColumnOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,02E6</td> <td>IsocenterToCompensatorDistances</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,02E7</td> <td>CompensatorRelStoppingPowerRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,02E8</td> <td>CompensatorMillingToolDiameter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,02EA</td> <td>IonRangeCompensatorSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,02EB</td> <td>CompensatorDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0302</td> <td>RadiationMassNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0304</td> <td>RadiationAtomicNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0306</td> <td>RadiationChargeState</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0308</td> <td>ScanMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,030A</td> <td>VirtualSourceAxisDistances</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,030C</td> <td>SnoutSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,030D</td> <td>SnoutPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,030F</td> <td>SnoutID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0312</td> <td>NumberOfRangeShifters</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0314</td> <td>RangeShifterSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0316</td> <td>RangeShifterNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0318</td> <td>RangeShifterID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0320</td> <td>RangeShifterType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0322</td> <td>RangeShifterDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0330</td> <td>NumberOfLateralSpreadingDevices</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0332</td> <td>LateralSpreadingDeviceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0334</td> <td>LateralSpreadingDeviceNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0336</td> <td>LateralSpreadingDeviceID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0338</td> <td>LateralSpreadingDeviceType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,033A</td> <td>LateralSpreadingDeviceDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,033C</td> <td>LateralSpreadingDevWaterEquivThick</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0340</td> <td>NumberOfRangeModulators</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0342</td> <td>RangeModulatorSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0344</td> <td>RangeModulatorNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0346</td> <td>RangeModulatorID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0348</td> <td>RangeModulatorType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,034A</td> <td>RangeModulatorDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,034C</td> <td>BeamCurrentModulationID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0350</td> <td>PatientSupportType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0352</td> <td>PatientSupportID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0354</td> <td>PatientSupportAccessoryCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0356</td> <td>FixationLightAzimuthalAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0358</td> <td>FixationLightPolarAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,035A</td> <td>MetersetRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0360</td> <td>RangeShifterSettingsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0362</td> <td>RangeShifterSetting</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0364</td> <td>IsocenterToRangeShifterDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0366</td> <td>RangeShifterWaterEquivThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0370</td> <td>LateralSpreadingDeviceSettingsSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0372</td> <td>LateralSpreadingDeviceSetting</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0374</td> <td>IsocenterToLateralSpreadingDevDist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0380</td> <td>RangeModulatorSettingsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0382</td> <td>RangeModulatorGatingStartValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0384</td> <td>RangeModulatorGatingStopValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,038A</td> <td>IsocenterToRangeModulatorDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0390</td> <td>ScanSpotTuneID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0392</td> <td>NumberOfScanSpotPositions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0394</td> <td>ScanSpotPositionMap</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0396</td> <td>ScanSpotMetersetWeights</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0398</td> <td>ScanningSpotSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,039A</td> <td>NumberOfPaintings</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,03A0</td> <td>IonToleranceTableSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,03A2</td> <td>IonBeamSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,03A4</td> <td>IonBeamLimitingDeviceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,03A6</td> <td>IonBlockSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,03A8</td> <td>IonControlPointSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,03AA</td> <td>IonWedgeSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,03AC</td> <td>IonWedgePositionSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0401</td> <td>ReferencedSetupImageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0402</td> <td>SetupImageComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0410</td> <td>MotionSynchronizationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0412</td> <td>ControlPointOrientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0420</td> <td>GeneralAccessorySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0421</td> <td>GeneralAccessoryID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0422</td> <td>GeneralAccessoryDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300A,0423</td> <td>GeneralAccessoryType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300A,0424</td> <td>GeneralAccessoryNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,0002</td> <td>ReferencedRTPlanSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300C,0004</td> <td>ReferencedBeamSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,0006</td> <td>ReferencedBeamNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300C,0007</td> <td>ReferencedReferenceImageNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,0008</td> <td>StartCumulativeMetersetWeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300C,0009</td> <td>EndCumulativeMetersetWeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,000A</td> <td>ReferencedBrachyAppSetupSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300C,000C</td> <td>ReferencedBrachyAppSetupNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,000E</td> <td>ReferencedSourceNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300C,0020</td> <td>ReferencedFractionGroupSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,0022</td> <td>ReferencedFractionGroupNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300C,0040</td> <td>ReferencedVerificationImageSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,0042</td> <td>ReferencedReferenceImageSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300C,0050</td> <td>ReferencedDoseReferenceSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,0051</td> <td>ReferencedDoseReferenceNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300C,0055</td> <td>BrachyReferencedDoseReferenceSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,0060</td> <td>ReferencedStructureSetSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300C,006A</td> <td>ReferencedPatientSetupNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,0080</td> <td>ReferencedDoseSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300C,00A0</td> <td>ReferencedToleranceTableNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,00B0</td> <td>ReferencedBolusSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300C,00C0</td> <td>ReferencedWedgeNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,00D0</td> <td>ReferencedCompensatorNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300C,00E0</td> <td>ReferencedBlockNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,00F0</td> <td>ReferencedControlPointIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300C,00F2</td> <td>ReferencedControlPointSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,00F4</td> <td>ReferencedStartControlPointIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300C,00F6</td> <td>ReferencedStopControlPointIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,0100</td> <td>ReferencedRangeShifterNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300C,0102</td> <td>ReferencedLateralSpreadingDevNum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300C,0104</td> <td>ReferencedRangeModulatorNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300E,0002</td> <td>ApprovalStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300E,0004</td> <td>ReviewDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>300E,0005</td> <td>ReviewTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>300E,0008</td> <td>ReviewerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4000,0000</td> <td>TextGroupLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>4000,0010</td> <td>Arbitrary</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4000,4000</td> <td>TextComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>4008,0040</td> <td>ResultsID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4008,0042</td> <td>ResultsIDIssuer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>4008,0050</td> <td>ReferencedInterpretationSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4008,0100</td> <td>InterpretationRecordedDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>4008,0101</td> <td>InterpretationRecordedTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4008,0102</td> <td>InterpretationRecorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>4008,0103</td> <td>ReferenceToRecordedSound</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4008,0108</td> <td>InterpretationTranscriptionDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>4008,0109</td> <td>InterpretationTranscriptionTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4008,010A</td> <td>InterpretationTranscriber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>4008,010B</td> <td>InterpretationText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4008,010C</td> <td>InterpretationAuthor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>4008,0111</td> <td>InterpretationApproverSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4008,0112</td> <td>InterpretationApprovalDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>4008,0113</td> <td>InterpretationApprovalTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4008,0114</td> <td>PhysicianApprovingInterpretation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>4008,0115</td> <td>InterpretationDiagnosisDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4008,0117</td> <td>InterpretationDiagnosisCodeSeq</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>4008,0118</td> <td>ResultsDistributionListSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4008,0119</td> <td>DistributionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>4008,011A</td> <td>DistributionAddress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4008,0200</td> <td>InterpretationID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>4008,0202</td> <td>InterpretationIDIssuer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4008,0210</td> <td>InterpretationTypeID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>4008,0212</td> <td>InterpretationStatusID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4008,0300</td> <td>Impressions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>4008,4000</td> <td>ResultsComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>4FFE,0001</td> <td>MACParametersSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>50xx,0005</td> <td>CurveDimensions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>50xx,0010</td> <td>NumberOfPoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>50xx,0020</td> <td>TypeOfData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>50xx,0022</td> <td>CurveDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>50xx,0030</td> <td>AxisUnits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>50xx,0040</td> <td>AxisLabels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>50xx,0103</td> <td>DataValueRepresentation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>50xx,0104</td> <td>MinimumCoordinateValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>50xx,0105</td> <td>MaximumCoordinateValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>50xx,0106</td> <td>CurveRange</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>50xx,0110</td> <td>CurveDataDescriptor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>50xx,0112</td> <td>CoordinateStartValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>50xx,0114</td> <td>CoordinateStepValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>50xx,1001</td> <td>CurveActivationLayer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>50xx,2000</td> <td>AudioType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>50xx,2002</td> <td>AudioSampleFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>50xx,2004</td> <td>NumberOfChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>50xx,2006</td> <td>NumberOfSamples</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>50xx,2008</td> <td>SampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>50xx,200A</td> <td>TotalTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>50xx,200C</td> <td>AudioSampleData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>50xx,200E</td> <td>AudioComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>50xx,2500</td> <td>CurveLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>50xx,2600</td> <td>ReferencedOverlaySequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>50xx,2610</td> <td>ReferencedOverlayGroup</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>50xx,3000</td> <td>CurveData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>5200,9229</td> <td>SharedFunctionalGroupsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>5200,9230</td> <td>PerFrameFunctionalGroupsSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>5400,0100</td> <td>WaveformSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>5400,0110</td> <td>ChannelMinimumValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>5400,0112</td> <td>ChannelMaximumValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>5400,1004</td> <td>WaveformBitsAllocated</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>5400,1006</td> <td>WaveformSampleInterpretation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>5400,100A</td> <td>WaveformPaddingValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>5400,1010</td> <td>WaveformData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>5600,0010</td> <td>FirstOrderPhaseCorrectionAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>5600,0020</td> <td>SpectroscopyData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>6000,0000</td> <td>OverlayGroupLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,0010</td> <td>OverlayRows</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,0011</td> <td>OverlayColumns</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,0012</td> <td>OverlayPlanes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,0015</td> <td>NumberOfFramesInOverlay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,0022</td> <td>OverlayDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,0040</td> <td>OverlayType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,0045</td> <td>OverlaySubtype</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,0050</td> <td>OverlayOrigin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,0051</td> <td>ImageFrameOrigin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,0052</td> <td>OverlayPlaneOrigin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,0060</td> <td>OverlayCompressionCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,0061</td> <td>OverlayCompressionOriginator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,0062</td> <td>OverlayCompressionLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,0063</td> <td>OverlayCompressionDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,0066</td> <td>OverlayCompressionStepPointers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,0068</td> <td>OverlayRepeatInterval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,0069</td> <td>OverlayBitsGrouped</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,0100</td> <td>OverlayBitsAllocated</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,0102</td> <td>OverlayBitPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,0110</td> <td>OverlayFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,0200</td> <td>OverlayLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,0800</td> <td>OverlayCodeLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,0802</td> <td>OverlayNumberOfTables</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,0803</td> <td>OverlayCodeTableLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,0804</td> <td>OverlayBitsForCodeWord</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,1001</td> <td>OverlayActivationLayer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,1100</td> <td>OverlayDescriptorGray</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,1101</td> <td>OverlayDescriptorRed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,1102</td> <td>OverlayDescriptorGreen</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,1103</td> <td>OverlayDescriptorBlue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,1200</td> <td>OverlaysGray</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,1201</td> <td>OverlaysRed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,1202</td> <td>OverlaysGreen</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,1203</td> <td>OverlaysBlue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,1301</td> <td>ROIArea</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,1302</td> <td>ROIMean</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,1303</td> <td>ROIStandardDeviation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,1500</td> <td>OverlayLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>60xx,3000</td> <td>OverlayData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>60xx,4000</td> <td>OverlayComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>7Fxx,0000</td> <td>PixelDataGroupLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>7Fxx,0010</td> <td>PixelData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>7Fxx,0011</td> <td>VariableNextDataGroup</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>7Fxx,0020</td> <td>VariableCoefficientsSDVN</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>7Fxx,0030</td> <td>VariableCoefficientsSDHN</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>7Fxx,0040</td> <td>VariableCoefficientsSDDN</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FFFA,FFFA</td> <td>DigitalSignaturesSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FFFC,FFFC</td> <td>DataSetTrailingPadding</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FFFE,E000</td> <td>StartOfItem</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FFFE,E00D</td> <td>EndOfItems</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FFFE,E0DD</td> <td>EndOfSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 2, 2013</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������������������Image-ExifTool-10.10/html/TagNames/DjVu.html��������������������������������������������������������000644 �000765 �000024 �00000016026 12527350232 020572� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>DjVu Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>DjVu Tags</h2> <p>Information is extracted from the following chunks in DjVu images. See <a href="http://www.djvu.org/">http://www.djvu.org/</a> for the DjVu specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'ANTa'</td> <td>ANTa</td> <td class=c>-</td> <td>--&gt; <a href='DjVu.html#Ant'>DjVu Ant Tags</a></td></tr> <tr class=b> <td>'ANTz'</td> <td>CompressedAnnotation</td> <td class=c>-</td> <td>--&gt; <a href='DjVu.html#Ant'>DjVu Ant Tags</a></td></tr> <tr> <td>'FORM'</td> <td>FORM</td> <td class=c>-</td> <td>--&gt; <a href='DjVu.html#Form'>DjVu Form Tags</a></td></tr> <tr class=b> <td>'INCL'</td> <td>IncludedFileID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'INFO'</td> <td>INFO</td> <td class=c>-</td> <td>--&gt; <a href='DjVu.html#Info'>DjVu Info Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Ant'>DjVu Ant Tags</a></h2> <p>Information extracted from annotation chunks.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'metadata'</td> <td>Metadata</td> <td class=c>-</td> <td>--&gt; <a href='DjVu.html#Meta'>DjVu Meta Tags</a></td></tr> <tr class=b> <td>'xmp'</td> <td>XMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Meta'>DjVu Meta Tags</a></h2> <p>This table lists the standard DjVu metadata tags, but ExifTool will extract any tags that exist even if they don&#39;t appear here. The DjVu v3 documentation endorses tags borrowed from two standards: 1) BibTeX bibliography system tags (all lowercase Tag ID&#39;s in the table below), and 2) PDF DocInfo tags (capitalized Tag ID&#39;s).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Author'</td> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'CreationDate'</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Creator'</td> <td>Creator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Keywords'</td> <td>Keywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ModDate'</td> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Producer'</td> <td>Producer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Subject'</td> <td>Subject</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Title'</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Trapped'</td> <td>Trapped</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'address'</td> <td>Address</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'annote'</td> <td>Annotation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'author'</td> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'booktitle'</td> <td>BookTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'chapter'</td> <td>Chapter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'crossref'</td> <td>CrossRef</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'edition'</td> <td>Edition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'eprint'</td> <td>EPrint</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'howpublished'</td> <td>HowPublished</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'institution'</td> <td>Institution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'journal'</td> <td>Journal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'key'</td> <td>Key</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'month'</td> <td>Month</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'note'</td> <td>Note</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'number'</td> <td>Number</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'organization'</td> <td>Organization</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'pages'</td> <td>Pages</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'publisher'</td> <td>Publisher</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'school'</td> <td>School</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'series'</td> <td>Series</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'title'</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'type'</td> <td>Type</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'url'</td> <td>URL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'volume'</td> <td>Volume</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'year'</td> <td>Year</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Form'>DjVu Form Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>SubfileType</td> <td class=c>N</td> <td><table class=cols><tr> <td>&#39;BM44&#39; = Grayscale IW44 <br>&#39;DJVI&#39; = Shared component <br>&#39;DJVM&#39; = Multi-page document <br>&#39;DJVU&#39; = Single-page image <br>&#39;PM44&#39; = Color IW44 <br>&#39;THUM&#39; = Thumbnail image</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='Info'>DjVu Info Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>DjVuVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>SpatialResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>Gamma</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>Orientation</td> <td class=c>N</td> <td><span class=s>[Mask 0x07] <br>0x1 = Horizontal (normal) <br>0x2 = Rotate 180 <br>0x5 = Rotate 90 CW <br>0x6 = Rotate 270 CW</span></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jun 22, 2013</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/DNG.html���������������������������������������������������������000644 �000765 �000024 �00000026055 12614670624 020344� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>DNG Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>DNG Tags</h2> <p> The main DNG tags are found in the EXIF table. The tables below define only information found within structures of these main DNG tag values. See <a href="http://www.adobe.com/products/dng/">http://www.adobe.com/products/dng/</a> for the official DNG specification. </p> <h2><a name='AdobeData'>DNG AdobeData Tags</a></h2> <p>This information is found in the &quot;Adobe&quot; DNGPrivateData.</p> <p>The maker notes (&#39;MakN&#39;) are processed by ExifTool, but some information may have been lost by the Adobe DNG Converter. This is because the Adobe DNG Converter (as of version 6.3) doesn&#39;t properly handle information referenced from inside the maker notes that lies outside the original maker notes block. This information is lost when only the maker note block is copied to the DNG image. While this doesn&#39;t effect all makes of cameras, it is a problem for some major brands such as Olympus and Sony.</p> <p>Other entries in this table represent proprietary information that is extracted from the original RAW image and restructured to a different (but still proprietary) Adobe format.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'CRW '</td> <td>AdobeCRW</td> <td class=c>-</td> <td>--&gt; <a href='CanonRaw.html'>CanonRaw Tags</a></td></tr> <tr class=b> <td>'Koda'</td> <td>AdobeKoda</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#IFD'>Kodak IFD Tags</a></td></tr> <tr> <td>'Leaf'</td> <td>AdobeLeaf</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html#SubIFD'>Leaf SubIFD Tags</a></td></tr> <tr class=b> <td>'MRW '</td> <td>AdobeMRW</td> <td class=c>-</td> <td>--&gt; <a href='MinoltaRaw.html'>MinoltaRaw Tags</a></td></tr> <tr> <td>'MakN'</td> <td>MakerNoteApple <br>MakerNoteNikon <br>MakerNoteCanon <br>MakerNoteCasio <br>MakerNoteCasio2 <br>MakerNoteFLIR <br>MakerNoteFujiFilm <br>MakerNoteGE <br>MakerNoteGE2 <br>MakerNoteHasselblad <br>MakerNoteHP <br>MakerNoteHP2 <br>MakerNoteHP4 <br>MakerNoteHP6 <br>MakerNoteISL <br>MakerNoteJVC <br>MakerNoteJVCText <br>MakerNoteKodak1a <br>MakerNoteKodak1b <br>MakerNoteKodak2 <br>MakerNoteKodak3 <br>MakerNoteKodak4 <br>MakerNoteKodak5 <br>MakerNoteKodak6a <br>MakerNoteKodak6b <br>MakerNoteKodak7 <br>MakerNoteKodak8a <br>MakerNoteKodak8b <br>MakerNoteKodak8c <br>MakerNoteKodak9 <br>MakerNoteKodak10 <br>MakerNoteKodak11 <br>MakerNoteKodakUnknown <br>MakerNoteKyocera <br>MakerNoteMinolta <br>MakerNoteMinolta2 <br>MakerNoteMinolta3 <br>MakerNoteMotorola <br>MakerNoteNikon2 <br>MakerNoteNikon3 <br>MakerNoteNintendo <br>MakerNoteOlympus <br>MakerNoteOlympus2 <br>MakerNoteLeica <br>MakerNoteLeica2 <br>MakerNoteLeica3 <br>MakerNoteLeica4 <br>MakerNoteLeica5 <br>MakerNoteLeica6 <br>MakerNoteLeica7 <br>MakerNoteLeica8 <br>MakerNoteLeica9 <br>MakerNotePanasonic <br>MakerNotePanasonic2 <br>MakerNotePentax <br>MakerNotePentax2 <br>MakerNotePentax3 <br>MakerNotePentax4 <br>MakerNotePentax5 <br>MakerNotePentax6 <br>MakerNotePhaseOne <br>MakerNoteReconyx <br>MakerNoteRicoh <br>MakerNoteRicoh2 <br>MakerNoteRicohText <br>MakerNoteSamsung1a <br>MakerNoteSamsung1b <br>MakerNoteSamsung2 <br>MakerNoteSanyo <br>MakerNoteSanyoC4 <br>MakerNoteSanyoPatch <br>MakerNoteSigma <br>MakerNoteSony <br>MakerNoteSony2 <br>MakerNoteSony3 <br>MakerNoteSony4 <br>MakerNoteSony5 <br>MakerNoteSonyEricsson <br>MakerNoteSonySRF <br>MakerNoteUnknownText <br>MakerNoteUnknownBinary <br>MakerNoteUnknown</td> <td class=c>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef</td> <td>--&gt; <a href='Apple.html'>Apple Tags</a> <br>--&gt; <a href='Nikon.html'>Nikon Tags</a> <br>--&gt; <a href='Canon.html'>Canon Tags</a> <br>--&gt; <a href='Casio.html'>Casio Tags</a> <br>--&gt; <a href='Casio.html#Type2'>Casio Type2 Tags</a> <br>--&gt; <a href='FLIR.html'>FLIR Tags</a> <br>--&gt; <a href='FujiFilm.html'>FujiFilm Tags</a> <br>--&gt; <a href='GE.html'>GE Tags</a> <br>--&gt; <a href='FujiFilm.html'>FujiFilm Tags</a> <br>--&gt; <a href='Unknown.html'>Unknown Tags</a> <br>--&gt; <a href='HP.html'>HP Tags</a> <br>--&gt; <a href='HP.html#Type2'>HP Type2 Tags</a> <br>--&gt; <a href='HP.html#Type4'>HP Type4 Tags</a> <br>--&gt; <a href='HP.html#Type6'>HP Type6 Tags</a> <br>--&gt; <a href='Unknown.html'>Unknown Tags</a> <br>--&gt; <a href='JVC.html'>JVC Tags</a> <br>--&gt; <a href='JVC.html#Text'>JVC Text Tags</a> <br>--&gt; <a href='Kodak.html'>Kodak Tags</a> <br>--&gt; <a href='Kodak.html'>Kodak Tags</a> <br>--&gt; <a href='Kodak.html#Type2'>Kodak Type2 Tags</a> <br>--&gt; <a href='Kodak.html#Type3'>Kodak Type3 Tags</a> <br>--&gt; <a href='Kodak.html#Type4'>Kodak Type4 Tags</a> <br>--&gt; <a href='Kodak.html#Type5'>Kodak Type5 Tags</a> <br>--&gt; <a href='Kodak.html#Type6'>Kodak Type6 Tags</a> <br>--&gt; <a href='Kodak.html#Type6'>Kodak Type6 Tags</a> <br>--&gt; <a href='Kodak.html#Type7'>Kodak Type7 Tags</a> <br>--&gt; <a href='Kodak.html#Type8'>Kodak Type8 Tags</a> <br>--&gt; <a href='Kodak.html#Type8'>Kodak Type8 Tags</a> <br>--&gt; <a href='Kodak.html#Type8'>Kodak Type8 Tags</a> <br>--&gt; <a href='Kodak.html#Type9'>Kodak Type9 Tags</a> <br>--&gt; <a href='Kodak.html#Type10'>Kodak Type10 Tags</a> <br>--&gt; <a href='Kodak.html#Type11'>Kodak Type11 Tags</a> <br>--&gt; <a href='Kodak.html#Unknown'>Kodak Unknown Tags</a> <br>--&gt; <a href='Unknown.html'>Unknown Tags</a> <br>--&gt; <a href='Minolta.html'>Minolta Tags</a> <br>--&gt; <a href='Olympus.html'>Olympus Tags</a> <br><span class=n>(not EXIF-based)</span> <br>--&gt; <a href='Motorola.html'>Motorola Tags</a> <br>--&gt; <a href='Nikon.html#Type2'>Nikon Type2 Tags</a> <br>--&gt; <a href='Nikon.html'>Nikon Tags</a> <br>--&gt; <a href='Nintendo.html'>Nintendo Tags</a> <br>--&gt; <a href='Olympus.html'>Olympus Tags</a> <br>--&gt; <a href='Olympus.html'>Olympus Tags</a> <br>--&gt; <a href='Panasonic.html'>Panasonic Tags</a> <br>--&gt; <a href='Panasonic.html#Leica2'>Panasonic Leica2 Tags</a> <br>--&gt; <a href='Panasonic.html#Leica3'>Panasonic Leica3 Tags</a> <br>--&gt; <a href='Panasonic.html#Leica4'>Panasonic Leica4 Tags</a> <br>--&gt; <a href='Panasonic.html#Leica5'>Panasonic Leica5 Tags</a> <br>--&gt; <a href='Panasonic.html#Leica6'>Panasonic Leica6 Tags</a> <br>--&gt; <a href='Panasonic.html#Leica6'>Panasonic Leica6 Tags</a> <br>--&gt; <a href='Panasonic.html#Leica5'>Panasonic Leica5 Tags</a> <br>--&gt; <a href='Panasonic.html#Leica9'>Panasonic Leica9 Tags</a> <br>--&gt; <a href='Panasonic.html'>Panasonic Tags</a> <br>--&gt; <a href='Panasonic.html#Type2'>Panasonic Type2 Tags</a> <br>--&gt; <a href='Pentax.html'>Pentax Tags</a> <br>--&gt; <a href='Pentax.html#Type2'>Pentax Type2 Tags</a> <br>--&gt; <a href='Casio.html#Type2'>Casio Type2 Tags</a> <br>--&gt; <a href='Pentax.html#Type4'>Pentax Type4 Tags</a> <br>--&gt; <a href='Pentax.html'>Pentax Tags</a> <br>--&gt; <a href='Pentax.html#S1'>Pentax S1 Tags</a> <br>--&gt; <a href='PhaseOne.html'>PhaseOne Tags</a> <br>--&gt; <a href='Reconyx.html'>Reconyx Tags</a> <br>--&gt; <a href='Ricoh.html'>Ricoh Tags</a> <br>--&gt; <a href='Ricoh.html#Type2'>Ricoh Type2 Tags</a> <br>--&gt; <a href='Ricoh.html#Text'>Ricoh Text Tags</a> <br><span class=n>(Samsung "STMN" maker notes without PreviewImage)</span> <br>--&gt; <a href='Samsung.html'>Samsung Tags</a> <br>--&gt; <a href='Samsung.html#Type2'>Samsung Type2 Tags</a> <br>--&gt; <a href='Sanyo.html'>Sanyo Tags</a> <br>--&gt; <a href='Sanyo.html'>Sanyo Tags</a> <br>--&gt; <a href='Sanyo.html'>Sanyo Tags</a> <br>--&gt; <a href='Sigma.html'>Sigma Tags</a> <br>--&gt; <a href='Sony.html'>Sony Tags</a> <br>--&gt; <a href='Olympus.html'>Olympus Tags</a> <br>--&gt; <a href='Olympus.html'>Olympus Tags</a> <br>--&gt; <a href='Sony.html#PIC'>Sony PIC Tags</a> <br>--&gt; <a href='Sony.html'>Sony Tags</a> <br>--&gt; <a href='Sony.html#Ericsson'>Sony Ericsson Tags</a> <br>--&gt; <a href='Sony.html#SRF'>Sony SRF Tags</a> <br><span class=n>(unknown text-based maker notes)</span> <br><span class=n>(unknown binary maker notes)</span> <br>--&gt; <a href='Unknown.html'>Unknown Tags</a></td></tr> <tr class=b> <td>'Pano'</td> <td>AdobePano</td> <td class=c>-</td> <td>--&gt; <a href='PanasonicRaw.html'>PanasonicRaw Tags</a></td></tr> <tr> <td>'RAF '</td> <td>AdobeRAF</td> <td class=c>-</td> <td>--&gt; <a href='FujiFilm.html#RAF'>FujiFilm RAF Tags</a></td></tr> <tr class=b> <td>'SR2 '</td> <td>AdobeSR2</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#SR2Private'>Sony SR2Private Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='OriginalRaw'>DNG OriginalRaw Tags</a></h2> <p>This table defines tags extracted from the DNG OriginalRawFileData information.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>OriginalRawImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>OriginalRawResource</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>OriginalRawFileType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>OriginalRawCreator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>OriginalTHMImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>OriginalTHMResource</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0006 = 6'>0x0006</td> <td>OriginalTHMFileType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0007 = 7'>0x0007</td> <td>OriginalTHMCreator</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Oct 30, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/DPX.html���������������������������������������������������������000644 �000765 �000024 �00000013126 12527350231 020352� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>DPX Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>DPX Tags</h2> <p>Tags extracted from DPX (Digital Picture Exchange) images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ByteOrder</td> <td class=c>N</td> <td><span class=s>&#39;SDPX&#39; = Big-endian <br>&#39;XPDS&#39; = Little-endian</span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>HeaderVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>DPXFileSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>DittoKey</td> <td class=c>N</td> <td><span class=s>0 = Same <br>1 = New</span></td></tr> <tr> <td class=r title='36 = 0x24'>36</td> <td>ImageFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='136 = 0x88'>136</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='160 = 0xa0'>160</td> <td>Creator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='260 = 0x104'>260</td> <td>Project</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='460 = 0x1cc'>460</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='660 = 0x294'>660</td> <td>EncryptionKey</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='768 = 0x300'>768</td> <td>Orientation</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Horizontal (normal) <br>1 = Mirror vertical <br>2 = Mirror horizontal <br>3 = Rotate 180 <br>4 = Mirror horizontal and rotate 270 CW <br>5 = Rotate 90 CW <br>6 = Rotate 270 CW <br>7 = Mirror horizontal and rotate 90 CW</td></tr></table> </td></tr> <tr class=b> <td class=r title='770 = 0x302'>770</td> <td>ImageElements</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='772 = 0x304'>772</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='776 = 0x308'>776</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='780 = 0x30c'>780</td> <td>DataSign</td> <td class=c>N</td> <td><span class=s>0 = Unsigned <br>1 = Signed</span></td></tr> <tr class=b> <td class=r title='800 = 0x320'>800</td> <td>ComponentsConfiguration</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = User-defined single component <br>1 = Red (R) <br>2 = Green (G) <br>3 = Blue (B) <br>4 = Alpha (matte) <br>6 = Luminance (Y) <br>7 = Chrominance (Cb, Cr, subsampled by two) <br>8 = Depth (Z) <br>9 = Composite video <br>50 = R, G, B <br>51 = R, G, B, Alpha <br>52 = Alpha, B, G, R <br>100 = Cb, Y, Cr, Y (4:2:2) <br>101 = Cb, Y, A, Cr, Y, A (4:2:2:4) <br>102 = Cb, Y, Cr (4:4:4) <br>103 = Cb, Y, Cr, A (4:4:4:4) <br>150 = User-defined 2 component element <br>151 = User-defined 3 component element <br>152 = User-defined 4 component element <br>153 = User-defined 5 component element <br>154 = User-defined 6 component element <br>155 = User-defined 7 component element <br>156 = User-defined 8 component element</td></tr></table> </td></tr> <tr> <td class=r title='803 = 0x323'>803</td> <td>BitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='820 = 0x334'>820</td> <td>ImageDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='892 = 0x37c'>892</td> <td>Image2Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='964 = 0x3c4'>964</td> <td>Image3Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1036 = 0x40c'>1036</td> <td>Image4Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1108 = 0x454'>1108</td> <td>Image5Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1180 = 0x49c'>1180</td> <td>Image6Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1252 = 0x4e4'>1252</td> <td>Image7Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1324 = 0x52c'>1324</td> <td>Image8Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1432 = 0x598'>1432</td> <td>SourceFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1532 = 0x5fc'>1532</td> <td>SourceCreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1556 = 0x614'>1556</td> <td>InputDeviceName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1588 = 0x634'>1588</td> <td>InputDeviceSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1724 = 0x6bc'>1724</td> <td>FrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1732 = 0x6c4'>1732</td> <td>FrameID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1764 = 0x6e4'>1764</td> <td>SlateInformation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2048 = 0x800'>2048</td> <td>UserID</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised May 12, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/DV.html����������������������������������������������������������000644 �000765 �000024 �00000003160 11510357461 020230� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>DV Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>DV Tags</h2> <p>The following tags are extracted from DV videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioBitsPerSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AudioChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioSampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Colorimetry</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TotalBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoScanType</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 3, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/EXE.html���������������������������������������������������������000644 �000765 �000024 �00000051753 12527350232 020351� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>EXE Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>EXE Tags</h2> <p>This module extracts information from various types of Windows, MacOS and Unix executable and library files. The first table below lists information extracted from the header of Windows PE (Portable Executable) EXE files and DLL libraries.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>MachineType</td> <td class=c>N</td> <td><table class=cols><tr> <td>0x14c = Intel 386 or later, and compatibles <br>0x14d = Intel i860 <br>0x162 = MIPS R3000 <br>0x166 = MIPS little endian (R4000) <br>0x168 = MIPS R10000 <br>0x169 = MIPS little endian WCI v2 <br>0x183 = Alpha AXP (old) <br>0x184 = Alpha AXP <br>0x1a2 = Hitachi SH3 <br>0x1a3 = Hitachi SH3 DSP <br>0x1a6 = Hitachi SH4 <br>0x1a8 = Hitachi SH5 <br>0x1c0 = ARM little endian <br>0x1c2 = Thumb <br>0x1d3 = Matsushita AM33 <br>0x1f0 = PowerPC little endian <br>0x1f1 = PowerPC with floating point support <br>0x200 = Intel IA64 <br>0x266 = MIPS16 <br>0x268 = Motorola 68000 series <br>0x284 = Alpha AXP 64-bit <br>0x366 = MIPS with FPU <br>0x466 = MIPS16 with FPU <br>0xebc = EFI Byte Code <br>0x8664 = AMD AMD64 <br>0x9041 = Mitsubishi M32R little endian <br>0xc0ee = clr pure MSIL</td></tr></table> </td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>TimeStamp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>PEType</td> <td class=c>N</td> <td><span class=s>0x10b = PE32 <br>0x20b = PE32+</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>LinkerVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>CodeSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>InitializedDataSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>UninitializedDataSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>EntryPoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>OSVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>ImageVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='34 = 0x22'>34</td> <td>SubsystemVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>Subsystem</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Unknown <br>1 = Native <br>2 = Windows GUI <br>3 = Windows command line <br>5 = OS/2 command line <br>7 = POSIX command line <br>9 = Windows CE GUI <br>10 = EFI application <br>11 = EFI boot service <br>12 = EFI runtime driver <br>13 = EFI ROM <br>14 = XBOX</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='PEVersion'>EXE PEVersion Tags</a></h2> <p>Information extracted from the VS_VERSION_INFO structure of Windows PE files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>FileVersionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ProductVersionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>FileFlagsMask</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>FileFlags</td> <td class=c>N</td> <td><table class=cols><tr> <td>Bit 0 = Debug <br>Bit 1 = Pre-release <br>Bit 2 = Patched</td><td>&nbsp;&nbsp;</td> <td>Bit 3 = Private build <br>Bit 4 = Info inferred <br>Bit 5 = Special build</td></tr></table> </td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>FileOS</td> <td class=c>N</td> <td><table class=cols><tr> <td>0x1 = Win16 <br>0x2 = PM-16 <br>0x3 = PM-32 <br>0x4 = Win32 <br>0x10000 = DOS <br>0x10001 = Windows 16-bit <br>0x10004 = Windows 32-bit <br>0x20000 = OS/2 16-bit <br>0x20002 = OS/2 16-bit PM-16 <br>0x30000 = OS/2 32-bit <br>0x30003 = OS/2 32-bit PM-32 <br>0x40000 = Windows NT <br>0x40004 = Windows NT 32-bit</td></tr></table> </td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>ObjectFileType</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Unknown <br>1 = Executable application <br>2 = Dynamic link library <br>3 = Driver <br>4 = Font <br>5 = VxD <br>7 = Static library</td></tr></table> </td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>FileSubtype</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PEString'>EXE PEString Tags</a></h2> <p>Resource strings found in Windows PE files. The <b>TagID</b>&#39;s are not shown because they are the same as the <b>Tag Name</b>. ExifTool will extract any existing StringFileInfo tags even if not listed in this table.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>BuildDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BuildVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CharacterSet</td> <td class=c>N</td> <td><span class=s><span class=n>(extracted from the StringFileInfo value)</span></span><table class=cols><tr> <td>&#39;0000&#39; = ASCII <br>&#39;03A4&#39; = Windows, Japan (Shift - JIS X-0208) <br>&#39;03A8&#39; = Windows, Chinese (Simplified) <br>&#39;03B5&#39; = Windows, Korea (Shift - KSC 5601) <br>&#39;03B6&#39; = Windows, Taiwan (Big5) <br>&#39;04B0&#39; = Unicode <br>&#39;04E2&#39; = Windows, Latin2 (Eastern European) <br>&#39;04E3&#39; = Windows, Cyrillic <br>&#39;04E4&#39; = Windows, Latin1 <br>&#39;04E5&#39; = Windows, Greek <br>&#39;04E6&#39; = Windows, Turkish <br>&#39;04E7&#39; = Windows, Hebrew <br>&#39;04E8&#39; = Windows, Arabic</td></tr></table> </td></tr> <tr class=b> <td>Comments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CompanyName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FileDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FileVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>InternalName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LanguageCode</td> <td class=c>N</td> <td>--&gt; <a href='EXE.html#LanguageCode'>EXE LanguageCode Values</a> <br><span class='n s'>(extracted from the StringFileInfo value)</span></td></tr> <tr> <td>LegalCopyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LegalTrademarks</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OriginalFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PrivateBuild</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProductName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProductVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SpecialBuild</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LanguageCode'>EXE LanguageCode Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>LanguageCode</th><th>Value</th><th>LanguageCode</th><th>Value</th><th>LanguageCode</th></tr> <tr><td>'0000'</td><td>= Neutral</td> <td class=b>'0437'</td><td class=b>= Georgian</td> <td>'040E'</td><td>= Hungarian</td> </tr><tr><td>'0400'</td><td>= Process default</td> <td class=b>'0438'</td><td class=b>= Faeroese</td> <td>'040F'</td><td>= Icelandic</td> </tr><tr><td>'0401'</td><td>= Arabic</td> <td class=b>'0439'</td><td class=b>= Hindi</td> <td>'041A'</td><td>= Croato-Serbian (Latin)</td> </tr><tr><td>'0402'</td><td>= Bulgarian</td> <td class=b>'0440'</td><td class=b>= Kyrgyz</td> <td>'041B'</td><td>= Slovak</td> </tr><tr><td>'0403'</td><td>= Catalan</td> <td class=b>'0441'</td><td class=b>= Swahili</td> <td>'041C'</td><td>= Albanian</td> </tr><tr><td>'0404'</td><td>= Chinese (Traditional)</td> <td class=b>'0443'</td><td class=b>= Uzbek</td> <td>'041D'</td><td>= Swedish</td> </tr><tr><td>'0405'</td><td>= Czech</td> <td class=b>'0444'</td><td class=b>= Tatar</td> <td>'041E'</td><td>= Thai</td> </tr><tr><td>'0406'</td><td>= Danish</td> <td class=b>'0445'</td><td class=b>= Bengali</td> <td>'041F'</td><td>= Turkish</td> </tr><tr><td>'0407'</td><td>= German</td> <td class=b>'0446'</td><td class=b>= Punjabi</td> <td>'042a'</td><td>= Vietnamese</td> </tr><tr><td>'0408'</td><td>= Greek</td> <td class=b>'0447'</td><td class=b>= Gujarati</td> <td>'042b'</td><td>= Armenian</td> </tr><tr><td>'0409'</td><td>= English (U.S.)</td> <td class=b>'0448'</td><td class=b>= Oriya</td> <td>'042c'</td><td>= Azeri</td> </tr><tr><td>'0410'</td><td>= Italian</td> <td class=b>'0449'</td><td class=b>= Tamil</td> <td>'042d'</td><td>= Basque</td> </tr><tr><td>'0411'</td><td>= Japanese</td> <td class=b>'0450'</td><td class=b>= Mongolian</td> <td>'042e'</td><td>= Sorbian</td> </tr><tr><td>'0412'</td><td>= Korean</td> <td class=b>'0456'</td><td class=b>= Galician</td> <td>'042f'</td><td>= Macedonian</td> </tr><tr><td>'0413'</td><td>= Dutch</td> <td class=b>'0457'</td><td class=b>= Konkani</td> <td>'043a'</td><td>= Maltese</td> </tr><tr><td>'0414'</td><td>= Norwegian (Bokml)</td> <td class=b>'0458'</td><td class=b>= Manipuri</td> <td>'043b'</td><td>= Saami</td> </tr><tr><td>'0415'</td><td>= Polish</td> <td class=b>'0459'</td><td class=b>= Sindhi</td> <td>'043c'</td><td>= Gaelic</td> </tr><tr><td>'0416'</td><td>= Portuguese (Brazilian)</td> <td class=b>'0460'</td><td class=b>= Kashmiri</td> <td>'043e'</td><td>= Malay</td> </tr><tr><td>'0417'</td><td>= Rhaeto-Romanic</td> <td class=b>'0461'</td><td class=b>= Nepali</td> <td>'043f'</td><td>= Kazak</td> </tr><tr><td>'0418'</td><td>= Romanian</td> <td class=b>'0465'</td><td class=b>= Divehi</td> <td>'044a'</td><td>= Telugu</td> </tr><tr><td>'0419'</td><td>= Russian</td> <td class=b>'0490'</td><td class=b>= Walon</td> <td>'044b'</td><td>= Kannada</td> </tr><tr><td>'0420'</td><td>= Urdu</td> <td class=b>'0491'</td><td class=b>= Cornish</td> <td>'044c'</td><td>= Malayalam</td> </tr><tr><td>'0421'</td><td>= Indonesian</td> <td class=b>'0492'</td><td class=b>= Welsh</td> <td>'044d'</td><td>= Assamese</td> </tr><tr><td>'0422'</td><td>= Ukrainian</td> <td class=b>'0493'</td><td class=b>= Breton</td> <td>'044e'</td><td>= Marathi</td> </tr><tr><td>'0423'</td><td>= Belarusian</td> <td class=b>'0800'</td><td class=b>= Neutral 2</td> <td>'044f'</td><td>= Sanskrit</td> </tr><tr><td>'0424'</td><td>= Slovenian</td> <td class=b>'0804'</td><td class=b>= Chinese (Simplified)</td> <td>'045a'</td><td>= Syriac</td> </tr><tr><td>'0425'</td><td>= Estonian</td> <td class=b>'0807'</td><td class=b>= German (Swiss)</td> <td>'047f'</td><td>= Invariant</td> </tr><tr><td>'0426'</td><td>= Latvian</td> <td class=b>'0809'</td><td class=b>= English (British)</td> <td>'048f'</td><td>= Esperanto</td> </tr><tr><td>'0427'</td><td>= Lithuanian</td> <td class=b>'0810'</td><td class=b>= Italian (Swiss)</td> <td>'080A'</td><td>= Spanish (Mexican)</td> </tr><tr><td>'0428'</td><td>= Maori</td> <td class=b>'0813'</td><td class=b>= Dutch (Belgian)</td> <td>'080C'</td><td>= French (Belgian)</td> </tr><tr><td>'0429'</td><td>= Farsi</td> <td class=b>'0814'</td><td class=b>= Norwegian (Nynorsk)</td> <td>'081A'</td><td>= Serbo-Croatian (Cyrillic)</td> </tr><tr><td>'0430'</td><td>= Sutu</td> <td class=b>'0816'</td><td class=b>= Portuguese</td> <td>'0C07'</td><td>= German (Austrian)</td> </tr><tr><td>'0431'</td><td>= Tsonga</td> <td class=b>'1009'</td><td class=b>= English (Canadian)</td> <td>'0C09'</td><td>= English (Australian)</td> </tr><tr><td>'0432'</td><td>= Tswana</td> <td class=b>'007F'</td><td class=b>= Invariant</td> <td>'0C0A'</td><td>= Spanish (Modern)</td> </tr><tr><td>'0433'</td><td>= Venda</td> <td class=b>'040A'</td><td class=b>= Spanish (Castilian)</td> <td>'0C0C'</td><td>= French (Canadian)</td> </tr><tr><td>'0434'</td><td>= Xhosa</td> <td class=b>'040B'</td><td class=b>= Finnish</td> <td>'100C'</td><td>= French (Swiss)</td> </tr><tr><td>'0435'</td><td>= Zulu</td> <td class=b>'040C'</td><td class=b>= French</td> <td>&nbsp;</td><td>&nbsp;</td> </tr><tr><td>'0436'</td><td>= Afrikaans</td> <td class=b>'040D'</td><td class=b>= Hebrew</td> <td>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='MachO'>EXE MachO Tags</a></h2> <p>Information extracted from Mach-O (Mac OS X) executable files and DYLIB libraries.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>CPUArchitecture</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>CPUByteOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>CPUCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>CPUType</td> <td class=c title=' + = List'>N+</td> <td><table class=cols><tr> <td>-1 = Any <br>1 = VAX <br>2 = ROMP <br>4 = NS32032 <br>5 = NS32332 <br>6 = MC680x0 <br>7 = x86 <br>8 = MIPS <br>9 = NS32532 <br>10 = MC98000</td><td>&nbsp;&nbsp;</td> <td>11 = HPPA <br>12 = ARM <br>13 = MC88000 <br>14 = SPARC <br>15 = i860 big endian <br>16 = i860 little endian <br>17 = RS6000 <br>18 = PowerPC <br>255 = VEO</td></tr></table> </td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>CPUSubtype</td> <td class=c title=' + = List'>N+</td> <td><table class=cols><tr> <td>&#39;1 0&#39; = VAX (all) <br>&#39;1 1&#39; = VAX780 <br>&#39;1 2&#39; = VAX785 <br>&#39;1 3&#39; = VAX750 <br>&#39;1 4&#39; = VAX730 <br>&#39;1 5&#39; = UVAXI <br>&#39;1 6&#39; = UVAXII <br>&#39;1 7&#39; = VAX8200 <br>&#39;1 8&#39; = VAX8500 <br>&#39;1 9&#39; = VAX8600 <br>&#39;1 10&#39; = VAX8650 <br>&#39;1 11&#39; = VAX8800 <br>&#39;1 12&#39; = UVAXIII <br>&#39;2 0&#39; = RT (all) <br>&#39;2 1&#39; = RT PC <br>&#39;2 2&#39; = RT APC <br>&#39;2 3&#39; = RT 135 <br>&#39;4 0&#39; = NS32032 (all) <br>&#39;4 1&#39; = NS32032 DPC (032 CPU) <br>&#39;4 2&#39; = NS32032 SQT <br>&#39;4 3&#39; = NS32032 APC FPU (32081) <br>&#39;4 4&#39; = NS32032 APC FPA (Weitek) <br>&#39;4 5&#39; = NS32032 XPC (532) <br>&#39;5 0&#39; = NS32332 (all) <br>&#39;5 1&#39; = NS32332 DPC (032 CPU) <br>&#39;5 2&#39; = NS32332 SQT <br>&#39;5 3&#39; = NS32332 APC FPU (32081) <br>&#39;5 4&#39; = NS32332 APC FPA (Weitek) <br>&#39;5 5&#39; = NS32332 XPC (532) <br>&#39;6 1&#39; = MC680x0 (all) <br>&#39;6 2&#39; = MC68040 <br>&#39;6 3&#39; = MC68030 <br>&#39;7 3&#39; = i386 (all) <br>&#39;7 4&#39; = i486 <br>&#39;7 5&#39; = i586 <br>&#39;7 8&#39; = Pentium III <br>&#39;7 9&#39; = Pentium M <br>&#39;7 10&#39; = Pentium 4 <br>&#39;7 11&#39; = Itanium <br>&#39;7 12&#39; = Xeon <br>&#39;7 22&#39; = Pentium Pro <br>&#39;7 24&#39; = Pentium III M <br>&#39;7 26&#39; = Pentium 4 M <br>&#39;7 27&#39; = Itanium 2 <br>&#39;7 28&#39; = Xeon MP <br>&#39;7 40&#39; = Pentium III Xeon <br>&#39;7 54&#39; = Pentium II M3 <br>&#39;7 86&#39; = Pentium II M5 <br>&#39;7 103&#39; = Celeron <br>&#39;7 119&#39; = Celeron Mobile <br>&#39;7 132&#39; = i486SX <br>&#39;8 0&#39; = MIPS (all) <br>&#39;8 1&#39; = MIPS R2300 <br>&#39;8 2&#39; = MIPS R2600 <br>&#39;8 3&#39; = MIPS R2800 <br>&#39;8 4&#39; = MIPS R2000a <br>&#39;8 5&#39; = MIPS R2000 <br>&#39;8 6&#39; = MIPS R3000a <br>&#39;8 7&#39; = MIPS R3000 <br>&#39;10 0&#39; = MC98000 (all) <br>&#39;10 1&#39; = MC98601 <br>&#39;11 0&#39; = HPPA (all) <br>&#39;11 1&#39; = HPPA 7100LC <br>&#39;12 0&#39; = ARM (all) <br>&#39;12 1&#39; = ARM A500 ARCH <br>&#39;12 2&#39; = ARM A500 <br>&#39;12 3&#39; = ARM A440 <br>&#39;12 4&#39; = ARM M4 <br>&#39;12 5&#39; = ARM A680/V4T <br>&#39;12 6&#39; = ARM V6 <br>&#39;12 7&#39; = ARM V5TEJ <br>&#39;12 8&#39; = ARM XSCALE <br>&#39;12 9&#39; = ARM V7 <br>&#39;13 0&#39; = MC88000 (all) <br>&#39;13 1&#39; = MC88100 <br>&#39;13 2&#39; = MC88110 <br>&#39;14 0&#39; = SPARC (all) <br>&#39;14 1&#39; = SUN 4/260 <br>&#39;14 2&#39; = SUN 4/110 <br>&#39;15 0&#39; = i860 (all) <br>&#39;15 1&#39; = i860 860 <br>&#39;16 0&#39; = i860 little (all) <br>&#39;16 1&#39; = i860 little <br>&#39;17 0&#39; = RS6000 (all) <br>&#39;17 1&#39; = RS6000 <br>&#39;18 0&#39; = PowerPC (all) <br>&#39;18 1&#39; = PowerPC 601 <br>&#39;18 2&#39; = PowerPC 602 <br>&#39;18 3&#39; = PowerPC 603 <br>&#39;18 4&#39; = PowerPC 603e <br>&#39;18 5&#39; = PowerPC 603ev <br>&#39;18 6&#39; = PowerPC 604 <br>&#39;18 7&#39; = PowerPC 604e <br>&#39;18 8&#39; = PowerPC 620 <br>&#39;18 9&#39; = PowerPC 750 <br>&#39;18 10&#39; = PowerPC 7400 <br>&#39;18 11&#39; = PowerPC 7450 <br>&#39;18 100&#39; = PowerPC 970 <br>&#39;255 1&#39; = VEO 1 <br>&#39;255 2&#39; = VEO 2</td></tr></table> </td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>ObjectFileType</td> <td class=c>N</td> <td><table class=cols><tr> <td>-1 = Static library <br>0x1 = Relocatable object <br>0x2 = Demand paged executable <br>0x3 = Fixed VM shared library <br>0x4 = Core <br>0x5 = Preloaded executable <br>0x6 = Dynamically bound shared library <br>0x7 = Dynamic link editor <br>0x8 = Dynamically bound bundle <br>0x9 = Shared library stub for static linking</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='PEF'>EXE PEF Tags</a></h2> <p>Information extracted from PEF (Classic MacOS) executable files and libraries.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>CPUArchitecture</td> <td class=c>N</td> <td><span class=s>&#39;m68k&#39; = 68000 <br>&#39;pwpc&#39; = PowerPC</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>PEFVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>TimeStamp</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ELF'>EXE ELF Tags</a></h2> <p>Information extracted from ELF (Unix) executable files and SO libraries.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>CPUArchitecture</td> <td class=c>N</td> <td><span class=s>1 = 32 bit <br>2 = 64 bit</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>CPUByteOrder</td> <td class=c>N</td> <td><span class=s>1 = Little endian <br>2 = Big endian</span></td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>ObjectFileType</td> <td class=c>N</td> <td><span class=s>0 = None <br>1 = Relocatable file <br>2 = Executable file <br>3 = Shared object file <br>4 = Core file</span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>CPUType</td> <td class=c>N</td> <td><span class=s>0 = None <br>1 = AT&amp;T WE 32100 <br>2 = SPARC <br>3 = i386 <br>4 = Motorola 68000 <br>5 = Motorola 88000 <br>6 = i486 <br>7 = i860 <br>8 = MIPS R3000 <br>10 = MIPS R4000 <br>15 = HPPA <br>18 = Sun v8plus <br>20 = PowerPC <br>21 = PowerPC 64-bit <br>22 = IBM S/390 <br>23 = Cell BE SPU <br>42 = SuperH <br>43 = SPARC v9 64-bit <br>46 = Renesas H8/300,300H,H8S <br>50 = HP/Intel IA-64 <br>62 = AMD x86-64 <br>76 = Axis Communications 32-bit embedded processor <br>87 = NEC v850 <br>88 = Renesas M32R <br>21569 = Fujitsu FR-V <br>36902 = Alpha <br>36929 = m32r (old) <br>36992 = v850 (old) <br>41872 = S/390 (old)</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CHM'>EXE CHM Tags</a></h2> <p>Tags extracted from Microsoft Compiled HTML files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>CHMVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>LanguageCode</td> <td class=c>N</td> <td>--&gt; <a href='EXE.html#LanguageCode'>EXE LanguageCode Values</a></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised May 14, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������Image-ExifTool-10.10/html/TagNames/EXIF.html��������������������������������������������������������000644 �000765 �000024 �00000303256 12614670627 020473� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>EXIF Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>EXIF Tags</h2> <p> EXIF stands for &quot;Exchangeable Image File Format&quot;. This type of information is formatted according to the TIFF specification, and may be found in JPG, TIFF, PNG, JP2, PGF, MIFF, HDP, PSP and XCF images, as well as many TIFF-based RAW images, and even some AVI and MOV videos.</p> <p>The EXIF meta information is organized into different Image File Directories (IFD&#39;s) within an image. The names of these IFD&#39;s correspond to the ExifTool family 1 group names. When writing EXIF information, the default <b>Group</b> listed below is used unless another group is specified.</p> <p>The table below lists all EXIF tags. Also listed are TIFF, DNG, HDP and other tags which are not part of the EXIF specification, but may co-exist with EXIF tags in some images. Tags which are part of the EXIF 2.3 specification have an underlined <b>Tag Name</b> in the HTML version of this documentation. See <a href="http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf">http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf</a> for the official EXIF 2.3 specification. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Group</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>InteropIndex</td> <td class=c title=' ! = Unsafe'>string!</td> <td class=c>InteropIFD</td> <td><span class=s>&#39;R03&#39; = R03 - DCF option file (Adobe RGB) <br>&#39;R98&#39; = R98 - DCF basic file (sRGB) <br>&#39;THM&#39; = THM - DCF thumbnail file</span></td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>InteropVersion</td> <td class=c title=' ! = Unsafe : = Mandatory'>undef!:</td> <td class=c>InteropIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0x000b = 11'>0x000b</td> <td>ProcessingSoftware</td> <td class=c>string</td> <td class=c>IFD0</td> <td><span class=s><span class=n>(used by ACD Systems Digital Imaging)</span></span></td></tr> <tr class=b> <td title='0x00fe = 254'>0x00fe</td> <td>SubfileType</td> <td class=c title=' ! = Unsafe'>int32u!</td> <td class=c>IFD0</td> <td><span class=s>0x0 = Full-resolution Image <br>0x1 = Reduced-resolution image <br>0x2 = Single page of multi-page image <br>0x3 = Single page of multi-page reduced-resolution image <br>0x4 = Transparency mask <br>0x5 = Transparency mask of reduced-resolution image <br>0x6 = Transparency mask of multi-page image <br>0x7 = Transparency mask of reduced-resolution multi-page image <br>0x10001 = Alternate reduced-resolution image <br>0xffffffff = invalid <br>Bit 0 = Reduced resolution <br>Bit 1 = Single page <br>Bit 2 = Transparency mask <br>Bit 3 = TIFF/IT final page <br>Bit 4 = TIFF-FX mixed raster content</span></td></tr> <tr> <td title='0x00ff = 255'>0x00ff</td> <td>OldSubfileType</td> <td class=c title=' ! = Unsafe'>int16u!</td> <td class=c>IFD0</td> <td><span class=s>1 = Full-resolution image <br>2 = Reduced-resolution image <br>3 = Single page of multi-page image</span></td></tr> <tr class=b> <td title='0x0100 = 256'>0x0100</td> <td><u>ImageWidth</u></td> <td class=c title=' ! = Unsafe'>int32u!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x0101 = 257'>0x0101</td> <td><u>ImageHeight</u></td> <td class=c title=' ! = Unsafe'>int32u!</td> <td class=c>IFD0</td> <td><span class=s><span class=n>(called ImageLength by the EXIF spec.)</span></span></td></tr> <tr class=b> <td title='0x0102 = 258'>0x0102</td> <td><u>BitsPerSample</u></td> <td class=c title=' ! = Unsafe'>int16u[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x0103 = 259'>0x0103</td> <td><u>Compression</u></td> <td class=c title=' ! = Unsafe : = Mandatory'>int16u!:</td> <td class=c>IFD0</td> <td>--&gt; <a href='EXIF.html#Compression'>EXIF Compression Values</a></td></tr> <tr class=b> <td title='0x0106 = 262'>0x0106</td> <td><u>PhotometricInterpretation</u></td> <td class=c title=' ! = Unsafe'>int16u!</td> <td class=c>IFD0</td> <td><table class=cols><tr> <td>0 = WhiteIsZero <br>1 = BlackIsZero <br>2 = RGB <br>3 = RGB Palette <br>4 = Transparency Mask <br>5 = CMYK <br>6 = YCbCr <br>8 = CIELab <br>9 = ICCLab <br>10 = ITULab <br>32803 = Color Filter Array <br>32844 = Pixar LogL <br>32845 = Pixar LogLuv <br>34892 = Linear Raw</td></tr></table> </td></tr> <tr> <td title='0x0107 = 263'>0x0107</td> <td>Thresholding</td> <td class=c title=' ! = Unsafe'>int16u!</td> <td class=c>IFD0</td> <td><span class=s>1 = No dithering or halftoning <br>2 = Ordered dither or halftone <br>3 = Randomized dither</span></td></tr> <tr class=b> <td title='0x0108 = 264'>0x0108</td> <td>CellWidth</td> <td class=c title=' ! = Unsafe'>int16u!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x0109 = 265'>0x0109</td> <td>CellLength</td> <td class=c title=' ! = Unsafe'>int16u!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x010a = 266'>0x010a</td> <td>FillOrder</td> <td class=c title=' ! = Unsafe'>int16u!</td> <td class=c>IFD0</td> <td><span class=s>1 = Normal <br>2 = Reversed</span></td></tr> <tr> <td title='0x010d = 269'>0x010d</td> <td>DocumentName</td> <td class=c>string</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x010e = 270'>0x010e</td> <td><u>ImageDescription</u></td> <td class=c>string</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x010f = 271'>0x010f</td> <td><u>Make</u></td> <td class=c>string</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0110 = 272'>0x0110</td> <td><u>Model</u></td> <td class=c>string</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x0111 = 273'>0x0111</td> <td><u>StripOffsets</u> <br>PreviewImageStart <br>PreviewImageStart <br>JpgFromRawStart</td> <td class=c title=' * = Protected'>N<br>int32u*<br>int32u*<br>int32u*</td> <td class=c>-<br>IFD0<br>SubIFD1<br>SubIFD2</td> <td><span class=s><span class=n>(PreviewImageStart in IFD0 of CR2 images and SubIFD1 of DNG images, and JpgFromRawStart in SubIFD2 of DNG images)</span></span></td></tr> <tr class=b> <td title='0x0112 = 274'>0x0112</td> <td><u>Orientation</u></td> <td class=c>int16u</td> <td class=c>IFD0</td> <td><table class=cols><tr> <td>1 = Horizontal (normal) <br>2 = Mirror horizontal <br>3 = Rotate 180 <br>4 = Mirror vertical <br>5 = Mirror horizontal and rotate 270 CW <br>6 = Rotate 90 CW <br>7 = Mirror horizontal and rotate 90 CW <br>8 = Rotate 270 CW</td></tr></table> </td></tr> <tr> <td title='0x0115 = 277'>0x0115</td> <td><u>SamplesPerPixel</u></td> <td class=c title=' ! = Unsafe'>int16u!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0116 = 278'>0x0116</td> <td><u>RowsPerStrip</u></td> <td class=c title=' ! = Unsafe'>int32u!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x0117 = 279'>0x0117</td> <td><u>StripByteCounts</u> <br>PreviewImageLength <br>PreviewImageLength <br>JpgFromRawLength</td> <td class=c title=' * = Protected'>N<br>int32u*<br>int32u*<br>int32u*</td> <td class=c>-<br>IFD0<br>SubIFD1<br>SubIFD2</td> <td><span class=s><span class=n>(PreviewImageLength in IFD0 of CR2 images and SubIFD1 of DNG images, and JpgFromRawLength in SubIFD2 of DNG images)</span></span></td></tr> <tr class=b> <td title='0x0118 = 280'>0x0118</td> <td>MinSampleValue</td> <td class=c>int16u</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x0119 = 281'>0x0119</td> <td>MaxSampleValue</td> <td class=c>int16u</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x011a = 282'>0x011a</td> <td><u>XResolution</u></td> <td class=c title=' : = Mandatory'>rational64u:</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x011b = 283'>0x011b</td> <td><u>YResolution</u></td> <td class=c title=' : = Mandatory'>rational64u:</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x011c = 284'>0x011c</td> <td><u>PlanarConfiguration</u></td> <td class=c title=' ! = Unsafe'>int16u!</td> <td class=c>IFD0</td> <td><span class=s>1 = Chunky <br>2 = Planar</span></td></tr> <tr> <td title='0x011d = 285'>0x011d</td> <td>PageName</td> <td class=c>string</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x011e = 286'>0x011e</td> <td>XPosition</td> <td class=c>rational64u</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x011f = 287'>0x011f</td> <td>YPosition</td> <td class=c>rational64u</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0120 = 288'>0x0120</td> <td>FreeOffsets</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x0121 = 289'>0x0121</td> <td>FreeByteCounts</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0122 = 290'>0x0122</td> <td>GrayResponseUnit</td> <td class=c>int16u</td> <td class=c>IFD0</td> <td><span class=s>1 = 0.1 <br>2 = 0.001 <br>3 = 0.0001 <br>4 = 1e-05 <br>5 = 1e-06</span></td></tr> <tr> <td title='0x0123 = 291'>0x0123</td> <td>GrayResponseCurve</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0124 = 292'>0x0124</td> <td>T4Options</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>Bit 0 = 2-Dimensional encoding <br>Bit 1 = Uncompressed <br>Bit 2 = Fill bits added</span></td></tr> <tr> <td title='0x0125 = 293'>0x0125</td> <td>T6Options</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>Bit 1 = Uncompressed</span></td></tr> <tr class=b> <td title='0x0128 = 296'>0x0128</td> <td><u>ResolutionUnit</u></td> <td class=c title=' : = Mandatory'>int16u:</td> <td class=c>IFD0</td> <td><span class=s><span class=n>(the value 1 is not standard EXIF)</span> <br>1 = None <br>2 = inches <br>3 = cm</span></td></tr> <tr> <td title='0x0129 = 297'>0x0129</td> <td>PageNumber</td> <td class=c>int16u[2]</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x012c = 300'>0x012c</td> <td>ColorResponseUnit</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x012d = 301'>0x012d</td> <td><u>TransferFunction</u></td> <td class=c title=' ! = Unsafe'>int16u[768]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0131 = 305'>0x0131</td> <td><u>Software</u></td> <td class=c>string</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x0132 = 306'>0x0132</td> <td><u>ModifyDate</u></td> <td class=c>string</td> <td class=c>IFD0</td> <td><span class=s><span class=n>(called DateTime by the EXIF spec.)</span></span></td></tr> <tr class=b> <td title='0x013b = 315'>0x013b</td> <td><u>Artist</u></td> <td class=c>string</td> <td class=c>IFD0</td> <td><span class=s><span class=n>(becomes a list-type tag when the MWG module is loaded)</span></span></td></tr> <tr> <td title='0x013c = 316'>0x013c</td> <td>HostComputer</td> <td class=c>string</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x013d = 317'>0x013d</td> <td>Predictor</td> <td class=c title=' ! = Unsafe'>int16u!</td> <td class=c>IFD0</td> <td><span class=s>1 = None <br>2 = Horizontal differencing</span></td></tr> <tr> <td title='0x013e = 318'>0x013e</td> <td><u>WhitePoint</u></td> <td class=c>rational64u[2]</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x013f = 319'>0x013f</td> <td><u>PrimaryChromaticities</u></td> <td class=c>rational64u[6]</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x0140 = 320'>0x0140</td> <td>ColorMap</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0141 = 321'>0x0141</td> <td>HalftoneHints</td> <td class=c>int16u[2]</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x0142 = 322'>0x0142</td> <td>TileWidth</td> <td class=c title=' ! = Unsafe'>int32u!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0143 = 323'>0x0143</td> <td>TileLength</td> <td class=c title=' ! = Unsafe'>int32u!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x0144 = 324'>0x0144</td> <td>TileOffsets</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0145 = 325'>0x0145</td> <td>TileByteCounts</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x0146 = 326'>0x0146</td> <td>BadFaxLines</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0147 = 327'>0x0147</td> <td>CleanFaxData</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>0 = Clean <br>1 = Regenerated <br>2 = Unclean</span></td></tr> <tr> <td title='0x0148 = 328'>0x0148</td> <td>ConsecutiveBadFaxLines</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x014a = 330'>0x014a</td> <td>SubIFD <br>A100DataOffset</td> <td class=c>-<br>N</td> <td class=c>-<br>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a> <br><span class=n>(the data offset in original Sony DSLR-A100 ARW images)</span></td></tr> <tr> <td title='0x014c = 332'>0x014c</td> <td>InkSet</td> <td class=c>int16u</td> <td class=c>IFD0</td> <td><span class=s>1 = CMYK <br>2 = Not CMYK</span></td></tr> <tr class=b> <td title='0x014d = 333'>0x014d</td> <td>InkNames</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x014e = 334'>0x014e</td> <td>NumberofInks</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0150 = 336'>0x0150</td> <td>DotRange</td> <td class=c>string</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x0151 = 337'>0x0151</td> <td>TargetPrinter</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0152 = 338'>0x0152</td> <td>ExtraSamples</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>0 = Unspecified <br>1 = Associated Alpha <br>2 = Unassociated Alpha</span></td></tr> <tr> <td title='0x0153 = 339'>0x0153</td> <td>SampleFormat</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s><span class=n>(SamplesPerPixel values)</span> <br>[Values 0-3]</span><table class=cols><tr> <td>1 = Unsigned <br>2 = Signed <br>3 = Float</td><td>&nbsp;&nbsp;</td> <td>4 = Undefined <br>5 = Complex int <br>6 = Complex float</td></tr></table> </td></tr> <tr class=b> <td title='0x0154 = 340'>0x0154</td> <td>SMinSampleValue</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x0155 = 341'>0x0155</td> <td>SMaxSampleValue</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0156 = 342'>0x0156</td> <td>TransferRange</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x0157 = 343'>0x0157</td> <td>ClipPath</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0158 = 344'>0x0158</td> <td>XClipPathUnits</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x0159 = 345'>0x0159</td> <td>YClipPathUnits</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x015a = 346'>0x015a</td> <td>Indexed</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>0 = Not indexed <br>1 = Indexed</span></td></tr> <tr> <td title='0x015b = 347'>0x015b</td> <td>JPEGTables</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x015f = 351'>0x015f</td> <td>OPIProxy</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>0 = Higher resolution image does not exist <br>1 = Higher resolution image exists</span></td></tr> <tr> <td title='0x0190 = 400'>0x0190</td> <td>GlobalParametersIFD</td> <td class=c>-</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> <tr class=b> <td title='0x0191 = 401'>0x0191</td> <td>ProfileType</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>0 = Unspecified <br>1 = Group 3 FAX</span></td></tr> <tr> <td title='0x0192 = 402'>0x0192</td> <td>FaxProfile</td> <td class=c>N</td> <td class=c>-</td> <td><table class=cols><tr> <td>0 = Unknown <br>1 = Minimal B&amp;W lossless, S <br>2 = Extended B&amp;W lossless, F <br>3 = Lossless JBIG B&amp;W, J <br>4 = Lossy color and grayscale, C <br>5 = Lossless color and grayscale, L <br>6 = Mixed raster content, M <br>7 = Profile T <br>255 = Multi Profiles</td></tr></table> </td></tr> <tr class=b> <td title='0x0193 = 403'>0x0193</td> <td>CodingMethods</td> <td class=c>N</td> <td class=c>-</td> <td><table class=cols><tr> <td>Bit 0 = Unspecified compression <br>Bit 1 = Modified Huffman <br>Bit 2 = Modified Read <br>Bit 3 = Modified MR <br>Bit 4 = JBIG <br>Bit 5 = Baseline JPEG <br>Bit 6 = JBIG color</td></tr></table> </td></tr> <tr> <td title='0x0194 = 404'>0x0194</td> <td>VersionYear</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0195 = 405'>0x0195</td> <td>ModeNumber</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x01b1 = 433'>0x01b1</td> <td>Decode</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x01b2 = 434'>0x01b2</td> <td>DefaultImageColor</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x01b3 = 435'>0x01b3</td> <td>T82Options</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x01b5 = 437'>0x01b5</td> <td>JPEGTables</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x0200 = 512'>0x0200</td> <td>JPEGProc</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>1 = Baseline <br>14 = Lossless</span></td></tr> <tr class=b> <td title='0x0201 = 513'>0x0201</td> <td><u>ThumbnailOffset</u> <br>ThumbnailOffset <br>ThumbnailOffset <br>PreviewImageStart <br>PreviewImageStart <br>JpgFromRawStart <br>JpgFromRawStart <br>OtherImageStart <br>OtherImageStart <br>OtherImageStart</td> <td class=c title=' * = Protected'>int32u*<br>int32u*<br>int32u*<br>int32u*<br>int32u*<br>int32u*<br>int32u*<br>int32u*<br>int32u*<br>N</td> <td class=c>IFD1<br>IFD0<br>SubIFD<br>MakerNotes<br>IFD0<br>SubIFD<br>IFD2<br>SubIFD1<br>SubIFD2<br>-</td> <td><span class=s><span class=n>(ThumbnailOffset in IFD1 of JPEG and some TIFF-based images, IFD0 of MRW images and AVI and MOV videos, and the SubIFD in IFD1 of SRW images; PreviewImageStart in MakerNotes and IFD0 of ARW and SR2 images; JpgFromRawStart in SubIFD of NEF images and IFD2 of PEF images; and OtherImageStart in everything else)</span></span></td></tr> <tr> <td title='0x0202 = 514'>0x0202</td> <td><u>ThumbnailLength</u> <br>ThumbnailLength <br>ThumbnailLength <br>PreviewImageLength <br>PreviewImageLength <br>JpgFromRawLength <br>JpgFromRawLength <br>OtherImageLength <br>OtherImageLength <br>OtherImageLength</td> <td class=c title=' * = Protected'>int32u*<br>int32u*<br>int32u*<br>int32u*<br>int32u*<br>int32u*<br>int32u*<br>int32u*<br>int32u*<br>N</td> <td class=c>IFD1<br>IFD0<br>SubIFD<br>MakerNotes<br>IFD0<br>SubIFD<br>IFD2<br>SubIFD1<br>SubIFD2<br>-</td> <td><span class=s><span class=n>(ThumbnailLength in IFD1 of JPEG and some TIFF-based images, IFD0 of MRW images and AVI and MOV videos, and the SubIFD in IFD1 of SRW images; PreviewImageLength in MakerNotes and IFD0 of ARW and SR2 images; JpgFromRawLength in SubIFD of NEF images, and IFD2 of PEF images; and OtherImageLength in everything else)</span></span></td></tr> <tr class=b> <td title='0x0203 = 515'>0x0203</td> <td>JPEGRestartInterval</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x0205 = 517'>0x0205</td> <td>JPEGLosslessPredictors</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0206 = 518'>0x0206</td> <td>JPEGPointTransforms</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x0207 = 519'>0x0207</td> <td>JPEGQTables</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0208 = 520'>0x0208</td> <td>JPEGDCTables</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x0209 = 521'>0x0209</td> <td>JPEGACTables</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0211 = 529'>0x0211</td> <td><u>YCbCrCoefficients</u></td> <td class=c title=' ! = Unsafe'>rational64u[3]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x0212 = 530'>0x0212</td> <td><u>YCbCrSubSampling</u></td> <td class=c title=' ! = Unsafe'>int16u[2]!</td> <td class=c>IFD0</td> <td><table class=cols><tr> <td>&#39;1 1&#39; = YCbCr4:4:4 (1 1) <br>&#39;1 2&#39; = YCbCr4:4:0 (1 2) <br>&#39;1 4&#39; = YCbCr4:4:1 (1 4) <br>&#39;2 1&#39; = YCbCr4:2:2 (2 1)</td><td>&nbsp;&nbsp;</td> <td>&#39;2 2&#39; = YCbCr4:2:0 (2 2) <br>&#39;2 4&#39; = YCbCr4:2:1 (2 4) <br>&#39;4 1&#39; = YCbCr4:1:1 (4 1) <br>&#39;4 2&#39; = YCbCr4:1:0 (4 2)</td></tr></table> </td></tr> <tr class=b> <td title='0x0213 = 531'>0x0213</td> <td><u>YCbCrPositioning</u></td> <td class=c title=' ! = Unsafe : = Mandatory'>int16u!:</td> <td class=c>IFD0</td> <td><span class=s>1 = Centered <br>2 = Co-sited</span></td></tr> <tr> <td title='0x0214 = 532'>0x0214</td> <td><u>ReferenceBlackWhite</u></td> <td class=c>rational64u[6]</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x022f = 559'>0x022f</td> <td>StripRowCounts</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x02bc = 700'>0x02bc</td> <td>ApplicationNotes</td> <td class=c title=' ! = Unsafe'>int8u!</td> <td class=c>ExifIFD</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> <tr class=b> <td title='0x03e7 = 999'>0x03e7</td> <td>USPTOMiscellaneous</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x1000 = 4096'>0x1000</td> <td>RelatedImageFileFormat</td> <td class=c title=' ! = Unsafe'>string!</td> <td class=c>InteropIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1001 = 4097'>0x1001</td> <td>RelatedImageWidth</td> <td class=c title=' ! = Unsafe'>int16u!</td> <td class=c>InteropIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0x1002 = 4098'>0x1002</td> <td>RelatedImageHeight</td> <td class=c title=' ! = Unsafe'>int16u!</td> <td class=c>InteropIFD</td> <td><span class=s><span class=n>(called RelatedImageLength by the DCF spec.)</span></span></td></tr> <tr class=b> <td title='0x4746 = 18246'>0x4746</td> <td>Rating</td> <td class=c title=' / = Avoided'>int16u/</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x4747 = 18247'>0x4747</td> <td>XP_DIP_XML</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x4748 = 18248'>0x4748</td> <td>StitchInfo</td> <td class=c>-</td> <td class=c>-</td> <td>--&gt; <a href='Microsoft.html#Stitch'>Microsoft Stitch Tags</a></td></tr> <tr> <td title='0x4749 = 18249'>0x4749</td> <td>RatingPercent</td> <td class=c title=' / = Avoided'>int16u/</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x7035 = 28725'>0x7035</td> <td>ChromaticAberrationCorrParams</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x7037 = 28727'>0x7037</td> <td>DistortionCorrParams</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x800d = 32781'>0x800d</td> <td>ImageID</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x80a3 = 32931'>0x80a3</td> <td>WangTag1</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x80a4 = 32932'>0x80a4</td> <td>WangAnnotation</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x80a5 = 32933'>0x80a5</td> <td>WangTag3</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x80a6 = 32934'>0x80a6</td> <td>WangTag4</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x80b8 = 32952'>0x80b8</td> <td>ImageReferencePoints</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x80b9 = 32953'>0x80b9</td> <td>RegionXformTackPoint</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x80ba = 32954'>0x80ba</td> <td>WarpQuadrilateral</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x80bb = 32955'>0x80bb</td> <td>AffineTransformMat</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x80e3 = 32995'>0x80e3</td> <td>Matteing</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x80e4 = 32996'>0x80e4</td> <td>DataType</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x80e5 = 32997'>0x80e5</td> <td>ImageDepth</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x80e6 = 32998'>0x80e6</td> <td>TileDepth</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x8214 = 33300'>0x8214</td> <td>ImageFullWidth</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8215 = 33301'>0x8215</td> <td>ImageFullHeight</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x8216 = 33302'>0x8216</td> <td>TextureFormat</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8217 = 33303'>0x8217</td> <td>WrapModes</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x8218 = 33304'>0x8218</td> <td>FovCot</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8219 = 33305'>0x8219</td> <td>MatrixWorldToScreen</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x821a = 33306'>0x821a</td> <td>MatrixWorldToCamera</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x827d = 33405'>0x827d</td> <td>Model2</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x828d = 33421'>0x828d</td> <td>CFARepeatPatternDim</td> <td class=c title=' ! = Unsafe'>int16u[2]!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x828e = 33422'>0x828e</td> <td>CFAPattern2</td> <td class=c title=' ! = Unsafe'>int8u[n]!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0x828f = 33423'>0x828f</td> <td>BatteryLevel</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8290 = 33424'>0x8290</td> <td>KodakIFD</td> <td class=c>-</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#IFD'>Kodak IFD Tags</a> <br><span class='n s'>(used in various types of Kodak images)</span></td></tr> <tr> <td title='0x8298 = 33432'>0x8298</td> <td><u>Copyright</u></td> <td class=c>string</td> <td class=c>IFD0</td> <td><span class=s><span class=n>(may contain copyright notices for photographer and editor, separated by a newline. As per the EXIF specification, the newline is replaced by a null byte when writing to file, but this may be avoided by disabling the print conversion)</span></span></td></tr> <tr class=b> <td title='0x829a = 33434'>0x829a</td> <td><u>ExposureTime</u></td> <td class=c>rational64u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0x829d = 33437'>0x829d</td> <td><u>FNumber</u></td> <td class=c>rational64u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x82a5 = 33445'>0x82a5</td> <td>MDFileTag</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s><span class=n>(tags 0x82a5-0x82ac are used in Molecular Dynamics GEL files)</span></span></td></tr> <tr> <td title='0x82a6 = 33446'>0x82a6</td> <td>MDScalePixel</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x82a7 = 33447'>0x82a7</td> <td>MDColorTable</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x82a8 = 33448'>0x82a8</td> <td>MDLabName</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x82a9 = 33449'>0x82a9</td> <td>MDSampleInfo</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x82aa = 33450'>0x82aa</td> <td>MDPrepDate</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x82ab = 33451'>0x82ab</td> <td>MDPrepTime</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x82ac = 33452'>0x82ac</td> <td>MDFileUnits</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x830e = 33550'>0x830e</td> <td>PixelScale</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x8335 = 33589'>0x8335</td> <td>AdventScale</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8336 = 33590'>0x8336</td> <td>AdventRevision</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x835c = 33628'>0x835c</td> <td>UIC1Tag</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x835d = 33629'>0x835d</td> <td>UIC2Tag</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x835e = 33630'>0x835e</td> <td>UIC3Tag</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x835f = 33631'>0x835f</td> <td>UIC4Tag</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x83bb = 33723'>0x83bb</td> <td>IPTC-NAA</td> <td class=c title=' ! = Unsafe'>int32u!</td> <td class=c>IFD0</td> <td>--&gt; <a href='IPTC.html'>IPTC Tags</a></td></tr> <tr class=b> <td title='0x847e = 33918'>0x847e</td> <td>IntergraphPacketData</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x847f = 33919'>0x847f</td> <td>IntergraphFlagRegisters</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8480 = 33920'>0x8480</td> <td>IntergraphMatrix</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x8481 = 33921'>0x8481</td> <td>INGRReserved</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8482 = 33922'>0x8482</td> <td>ModelTiePoint</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x84e0 = 34016'>0x84e0</td> <td>Site</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x84e1 = 34017'>0x84e1</td> <td>ColorSequence</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x84e2 = 34018'>0x84e2</td> <td>IT8Header</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x84e3 = 34019'>0x84e3</td> <td>RasterPadding</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>0 = Byte <br>1 = Word <br>2 = Long Word <br>9 = Sector <br>10 = Long Sector</span></td></tr> <tr> <td title='0x84e4 = 34020'>0x84e4</td> <td>BitsPerRunLength</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x84e5 = 34021'>0x84e5</td> <td>BitsPerExtendedRunLength</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x84e6 = 34022'>0x84e6</td> <td>ColorTable</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x84e7 = 34023'>0x84e7</td> <td>ImageColorIndicator</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>0 = Unspecified Image Color <br>1 = Specified Image Color</span></td></tr> <tr> <td title='0x84e8 = 34024'>0x84e8</td> <td>BackgroundColorIndicator</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>0 = Unspecified Background Color <br>1 = Specified Background Color</span></td></tr> <tr class=b> <td title='0x84e9 = 34025'>0x84e9</td> <td>ImageColorValue</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x84ea = 34026'>0x84ea</td> <td>BackgroundColorValue</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x84eb = 34027'>0x84eb</td> <td>PixelIntensityRange</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x84ec = 34028'>0x84ec</td> <td>TransparencyIndicator</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x84ed = 34029'>0x84ed</td> <td>ColorCharacterization</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x84ee = 34030'>0x84ee</td> <td>HCUsage</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>0 = CT <br>1 = Line Art <br>2 = Trap</span></td></tr> <tr class=b> <td title='0x84ef = 34031'>0x84ef</td> <td>TrapIndicator</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x84f0 = 34032'>0x84f0</td> <td>CMYKEquivalent</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8546 = 34118'>0x8546</td> <td>SEMInfo</td> <td class=c>string</td> <td class=c>IFD0</td> <td><span class=s><span class=n>(found in some scanning electron microscope images)</span></span></td></tr> <tr> <td title='0x8568 = 34152'>0x8568</td> <td>AFCP_IPTC</td> <td class=c>-</td> <td class=c>-</td> <td>--&gt; <a href='IPTC.html'>IPTC Tags</a></td></tr> <tr class=b> <td title='0x85b8 = 34232'>0x85b8</td> <td>PixelMagicJBIGOptions</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x85d7 = 34263'>0x85d7</td> <td>JPLCartoIFD</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x85d8 = 34264'>0x85d8</td> <td>ModelTransform</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x8602 = 34306'>0x8602</td> <td>WB_GRGBLevels</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s><span class=n>(found in IFD0 of Leaf MOS images)</span></span></td></tr> <tr class=b> <td title='0x8606 = 34310'>0x8606</td> <td>LeafData</td> <td class=c>-</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html'>Leaf Tags</a></td></tr> <tr> <td title='0x8649 = 34377'>0x8649</td> <td>PhotoshopSettings</td> <td class=c>-</td> <td class=c>-</td> <td>--&gt; <a href='Photoshop.html'>Photoshop Tags</a></td></tr> <tr class=b> <td title='0x8769 = 34665'>0x8769</td> <td><u>ExifOffset</u></td> <td class=c>-</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> <tr> <td title='0x8773 = 34675'>0x8773</td> <td>ICC_Profile</td> <td class=c>-</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> <tr class=b> <td title='0x877f = 34687'>0x877f</td> <td>TIFF_FXExtensions</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>Bit 0 = Resolution/Image Width <br>Bit 1 = N Layer Profile M <br>Bit 2 = Shared Data <br>Bit 3 = B&amp;W JBIG2 <br>Bit 4 = JBIG2 Profile M</span></td></tr> <tr> <td title='0x8780 = 34688'>0x8780</td> <td>MultiProfiles</td> <td class=c>N</td> <td class=c>-</td> <td><table class=cols><tr> <td>Bit 0 = Profile S <br>Bit 1 = Profile F <br>Bit 2 = Profile J <br>Bit 3 = Profile C <br>Bit 4 = Profile L <br>Bit 5 = Profile M <br>Bit 6 = Profile T <br>Bit 7 = Resolution/Image Width <br>Bit 8 = N Layer Profile M <br>Bit 9 = Shared Data <br>Bit 10 = JBIG2 Profile M</td></tr></table> </td></tr> <tr class=b> <td title='0x8781 = 34689'>0x8781</td> <td>SharedData</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x8782 = 34690'>0x8782</td> <td>T88Options</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x87ac = 34732'>0x87ac</td> <td>ImageLayer</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x87af = 34735'>0x87af</td> <td>GeoTiffDirectory</td> <td class=c>undef</td> <td class=c>IFD0</td> <td><span class=s><span class=n>(these &quot;GeoTiff&quot; tags may read and written as a block, but they aren&#39;t extracted unless specifically requested. Byte order changes are handled automatically when copying between TIFF images with different byte order)</span></span></td></tr> <tr class=b> <td title='0x87b0 = 34736'>0x87b0</td> <td>GeoTiffDoubleParams</td> <td class=c>undef</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0x87b1 = 34737'>0x87b1</td> <td>GeoTiffAsciiParams</td> <td class=c>string</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x87be = 34750'>0x87be</td> <td>JBIGOptions</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x8822 = 34850'>0x8822</td> <td><u>ExposureProgram</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(the value of 9 is not standard EXIF, but is used by the Canon EOS 7D)</span></span><table class=cols><tr> <td>0 = Not Defined <br>1 = Manual <br>2 = Program AE <br>3 = Aperture-priority AE <br>4 = Shutter speed priority AE <br>5 = Creative (Slow speed) <br>6 = Action (High speed) <br>7 = Portrait <br>8 = Landscape <br>9 = Bulb</td></tr></table> </td></tr> <tr class=b> <td title='0x8824 = 34852'>0x8824</td> <td><u>SpectralSensitivity</u></td> <td class=c>string</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0x8825 = 34853'>0x8825</td> <td><u>GPSInfo</u></td> <td class=c>-</td> <td class=c>-</td> <td>--&gt; <a href='GPS.html'>GPS Tags</a></td></tr> <tr class=b> <td title='0x8827 = 34855'>0x8827</td> <td><u>ISO</u></td> <td class=c>int16u[n]</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(called ISOSpeedRatings by EXIF 2.2, then PhotographicSensitivity by the EXIF 2.3 spec.)</span></span></td></tr> <tr> <td title='0x8828 = 34856'>0x8828</td> <td><u>Opto-ElectricConvFactor</u></td> <td class=c>N</td> <td class=c>-</td> <td><span class=s><span class=n>(called OECF by the EXIF spec.)</span></span></td></tr> <tr class=b> <td title='0x8829 = 34857'>0x8829</td> <td>Interlace</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x882a = 34858'>0x882a</td> <td>TimeZoneOffset</td> <td class=c>int16s[n]</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(1 or 2 values: 1. The time zone offset of DateTimeOriginal from GMT in hours, 2. If present, the time zone offset of ModifyDate)</span></span></td></tr> <tr class=b> <td title='0x882b = 34859'>0x882b</td> <td>SelfTimerMode</td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0x8830 = 34864'>0x8830</td> <td><u>SensitivityType</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(applies to EXIF:ISO tag)</span> <br>0 = Unknown <br>1 = Standard Output Sensitivity <br>2 = Recommended Exposure Index <br>3 = ISO Speed <br>4 = Standard Output Sensitivity and Recommended Exposure Index <br>5 = Standard Output Sensitivity and ISO Speed <br>6 = Recommended Exposure Index and ISO Speed <br>7 = Standard Output Sensitivity, Recommended Exposure Index and ISO Speed</span></td></tr> <tr class=b> <td title='0x8831 = 34865'>0x8831</td> <td><u>StandardOutputSensitivity</u></td> <td class=c>int32u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0x8832 = 34866'>0x8832</td> <td><u>RecommendedExposureIndex</u></td> <td class=c>int32u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8833 = 34867'>0x8833</td> <td><u>ISOSpeed</u></td> <td class=c>int32u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0x8834 = 34868'>0x8834</td> <td><u>ISOSpeedLatitudeyyy</u></td> <td class=c>int32u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8835 = 34869'>0x8835</td> <td><u>ISOSpeedLatitudezzz</u></td> <td class=c>int32u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0x885c = 34908'>0x885c</td> <td>FaxRecvParams</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x885d = 34909'>0x885d</td> <td>FaxSubAddress</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x885e = 34910'>0x885e</td> <td>FaxRecvTime</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8871 = 34929'>0x8871</td> <td>FedexEDR</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x888a = 34954'>0x888a</td> <td>LeafSubIFD</td> <td class=c>-</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html#SubIFD'>Leaf SubIFD Tags</a></td></tr> <tr class=b> <td title='0x9000 = 36864'>0x9000</td> <td><u>ExifVersion</u></td> <td class=c title=' : = Mandatory'>undef:</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0x9003 = 36867'>0x9003</td> <td><u>DateTimeOriginal</u></td> <td class=c>string</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(date/time when original image was taken)</span></span></td></tr> <tr class=b> <td title='0x9004 = 36868'>0x9004</td> <td><u>CreateDate</u></td> <td class=c>string</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(called DateTimeDigitized by the EXIF spec.)</span></span></td></tr> <tr> <td title='0x9009 = 36873'>0x9009</td> <td>GooglePlusUploadCode</td> <td class=c>undef[n]</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x9101 = 37121'>0x9101</td> <td><u>ComponentsConfiguration</u></td> <td class=c title=' ! = Unsafe : = Mandatory'>undef[4]!:</td> <td class=c>ExifIFD</td> <td><table class=cols><tr> <td>0 = - <br>1 = Y <br>2 = Cb <br>3 = Cr</td><td>&nbsp;&nbsp;</td> <td>4 = R <br>5 = G <br>6 = B</td></tr></table> </td></tr> <tr> <td title='0x9102 = 37122'>0x9102</td> <td><u>CompressedBitsPerPixel</u></td> <td class=c title=' ! = Unsafe'>rational64u!</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x9201 = 37377'>0x9201</td> <td><u>ShutterSpeedValue</u></td> <td class=c>rational64s</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(displayed in seconds, but stored as an APEX value)</span></span></td></tr> <tr> <td title='0x9202 = 37378'>0x9202</td> <td><u>ApertureValue</u></td> <td class=c>rational64u</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(displayed as an F number, but stored as an APEX value)</span></span></td></tr> <tr class=b> <td title='0x9203 = 37379'>0x9203</td> <td><u>BrightnessValue</u></td> <td class=c>rational64s</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0x9204 = 37380'>0x9204</td> <td><u>ExposureCompensation</u></td> <td class=c>rational64s</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(called ExposureBiasValue by the EXIF spec.)</span></span></td></tr> <tr class=b> <td title='0x9205 = 37381'>0x9205</td> <td><u>MaxApertureValue</u></td> <td class=c>rational64u</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(displayed as an F number, but stored as an APEX value)</span></span></td></tr> <tr> <td title='0x9206 = 37382'>0x9206</td> <td><u>SubjectDistance</u></td> <td class=c>rational64u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x9207 = 37383'>0x9207</td> <td><u>MeteringMode</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td><table class=cols><tr> <td>0 = Unknown <br>1 = Average <br>2 = Center-weighted average <br>3 = Spot <br>4 = Multi-spot <br>5 = Multi-segment <br>6 = Partial <br>255 = Other</td></tr></table> </td></tr> <tr> <td title='0x9208 = 37384'>0x9208</td> <td><u>LightSource</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr class=b> <td title='0x9209 = 37385'>0x9209</td> <td><u>Flash</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td>--&gt; <a href='EXIF.html#Flash'>EXIF Flash Values</a></td></tr> <tr> <td title='0x920a = 37386'>0x920a</td> <td><u>FocalLength</u></td> <td class=c>rational64u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x920b = 37387'>0x920b</td> <td>FlashEnergy</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x920c = 37388'>0x920c</td> <td>SpatialFrequencyResponse</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x920d = 37389'>0x920d</td> <td>Noise</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x920e = 37390'>0x920e</td> <td>FocalPlaneXResolution</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x920f = 37391'>0x920f</td> <td>FocalPlaneYResolution</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x9210 = 37392'>0x9210</td> <td>FocalPlaneResolutionUnit</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>1 = None <br>2 = inches <br>3 = cm <br>4 = mm <br>5 = um</span></td></tr> <tr class=b> <td title='0x9211 = 37393'>0x9211</td> <td>ImageNumber</td> <td class=c>int32u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0x9212 = 37394'>0x9212</td> <td>SecurityClassification</td> <td class=c>string</td> <td class=c>ExifIFD</td> <td><span class=s>&#39;C&#39; = Confidential <br>&#39;R&#39; = Restricted <br>&#39;S&#39; = Secret <br>&#39;T&#39; = Top Secret <br>&#39;U&#39; = Unclassified</span></td></tr> <tr class=b> <td title='0x9213 = 37395'>0x9213</td> <td>ImageHistory</td> <td class=c>string</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0x9214 = 37396'>0x9214</td> <td><u>SubjectArea</u></td> <td class=c>int16u[n]</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x9215 = 37397'>0x9215</td> <td>ExposureIndex</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x9216 = 37398'>0x9216</td> <td>TIFF-EPStandardID</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x9217 = 37399'>0x9217</td> <td>SensingMethod</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s><span class=n>(values 1 and 6 are not standard EXIF)</span></span><table class=cols><tr> <td>1 = Monochrome area <br>2 = One-chip color area <br>3 = Two-chip color area <br>4 = Three-chip color area <br>5 = Color sequential area <br>6 = Monochrome linear <br>7 = Trilinear <br>8 = Color sequential linear</td></tr></table> </td></tr> <tr> <td title='0x923a = 37434'>0x923a</td> <td>CIP3DataFile</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x923b = 37435'>0x923b</td> <td>CIP3Sheet</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x923c = 37436'>0x923c</td> <td>CIP3Side</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x923f = 37439'>0x923f</td> <td>StoNits</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x927c = 37500'>0x927c</td> <td>MakerNoteApple <br>MakerNoteNikon <br>MakerNoteCanon <br>MakerNoteCasio <br>MakerNoteCasio2 <br>MakerNoteFLIR <br>MakerNoteFujiFilm <br>MakerNoteGE <br>MakerNoteGE2 <br>MakerNoteHasselblad <br>MakerNoteHP <br>MakerNoteHP2 <br>MakerNoteHP4 <br>MakerNoteHP6 <br>MakerNoteISL <br>MakerNoteJVC <br>MakerNoteJVCText <br>MakerNoteKodak1a <br>MakerNoteKodak1b <br>MakerNoteKodak2 <br>MakerNoteKodak3 <br>MakerNoteKodak4 <br>MakerNoteKodak5 <br>MakerNoteKodak6a <br>MakerNoteKodak6b <br>MakerNoteKodak7 <br>MakerNoteKodak8a <br>MakerNoteKodak8b <br>MakerNoteKodak8c <br>MakerNoteKodak9 <br>MakerNoteKodak10 <br>MakerNoteKodak11 <br>MakerNoteKodakUnknown <br>MakerNoteKyocera <br>MakerNoteMinolta <br>MakerNoteMinolta2 <br>MakerNoteMinolta3 <br>MakerNoteMotorola <br>MakerNoteNikon2 <br>MakerNoteNikon3 <br>MakerNoteNintendo <br>MakerNoteOlympus <br>MakerNoteOlympus2 <br>MakerNoteLeica <br>MakerNoteLeica2 <br>MakerNoteLeica3 <br>MakerNoteLeica4 <br>MakerNoteLeica5 <br>MakerNoteLeica6 <br>MakerNoteLeica7 <br>MakerNoteLeica8 <br>MakerNoteLeica9 <br>MakerNotePanasonic <br>MakerNotePanasonic2 <br>MakerNotePentax <br>MakerNotePentax2 <br>MakerNotePentax3 <br>MakerNotePentax4 <br>MakerNotePentax5 <br>MakerNotePentax6 <br>MakerNotePhaseOne <br>MakerNoteReconyx <br>MakerNoteRicoh <br>MakerNoteRicoh2 <br>MakerNoteRicohText <br>MakerNoteSamsung1a <br>MakerNoteSamsung1b <br>MakerNoteSamsung2 <br>MakerNoteSanyo <br>MakerNoteSanyoC4 <br>MakerNoteSanyoPatch <br>MakerNoteSigma <br>MakerNoteSony <br>MakerNoteSony2 <br>MakerNoteSony3 <br>MakerNoteSony4 <br>MakerNoteSony5 <br>MakerNoteSonyEricsson <br>MakerNoteSonySRF <br>MakerNoteUnknownText <br>MakerNoteUnknownBinary <br><u>MakerNoteUnknown</u></td> <td class=c>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef<br>undef</td> <td class=c>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD<br>ExifIFD</td> <td>--&gt; <a href='Apple.html'>Apple Tags</a> <br>--&gt; <a href='Nikon.html'>Nikon Tags</a> <br>--&gt; <a href='Canon.html'>Canon Tags</a> <br>--&gt; <a href='Casio.html'>Casio Tags</a> <br>--&gt; <a href='Casio.html#Type2'>Casio Type2 Tags</a> <br>--&gt; <a href='FLIR.html'>FLIR Tags</a> <br>--&gt; <a href='FujiFilm.html'>FujiFilm Tags</a> <br>--&gt; <a href='GE.html'>GE Tags</a> <br>--&gt; <a href='FujiFilm.html'>FujiFilm Tags</a> <br>--&gt; <a href='Unknown.html'>Unknown Tags</a> <br>--&gt; <a href='HP.html'>HP Tags</a> <br>--&gt; <a href='HP.html#Type2'>HP Type2 Tags</a> <br>--&gt; <a href='HP.html#Type4'>HP Type4 Tags</a> <br>--&gt; <a href='HP.html#Type6'>HP Type6 Tags</a> <br>--&gt; <a href='Unknown.html'>Unknown Tags</a> <br>--&gt; <a href='JVC.html'>JVC Tags</a> <br>--&gt; <a href='JVC.html#Text'>JVC Text Tags</a> <br>--&gt; <a href='Kodak.html'>Kodak Tags</a> <br>--&gt; <a href='Kodak.html'>Kodak Tags</a> <br>--&gt; <a href='Kodak.html#Type2'>Kodak Type2 Tags</a> <br>--&gt; <a href='Kodak.html#Type3'>Kodak Type3 Tags</a> <br>--&gt; <a href='Kodak.html#Type4'>Kodak Type4 Tags</a> <br>--&gt; <a href='Kodak.html#Type5'>Kodak Type5 Tags</a> <br>--&gt; <a href='Kodak.html#Type6'>Kodak Type6 Tags</a> <br>--&gt; <a href='Kodak.html#Type6'>Kodak Type6 Tags</a> <br>--&gt; <a href='Kodak.html#Type7'>Kodak Type7 Tags</a> <br>--&gt; <a href='Kodak.html#Type8'>Kodak Type8 Tags</a> <br>--&gt; <a href='Kodak.html#Type8'>Kodak Type8 Tags</a> <br>--&gt; <a href='Kodak.html#Type8'>Kodak Type8 Tags</a> <br>--&gt; <a href='Kodak.html#Type9'>Kodak Type9 Tags</a> <br>--&gt; <a href='Kodak.html#Type10'>Kodak Type10 Tags</a> <br>--&gt; <a href='Kodak.html#Type11'>Kodak Type11 Tags</a> <br>--&gt; <a href='Kodak.html#Unknown'>Kodak Unknown Tags</a> <br>--&gt; <a href='Unknown.html'>Unknown Tags</a> <br>--&gt; <a href='Minolta.html'>Minolta Tags</a> <br>--&gt; <a href='Olympus.html'>Olympus Tags</a> <br><span class=n>(not EXIF-based)</span> <br>--&gt; <a href='Motorola.html'>Motorola Tags</a> <br>--&gt; <a href='Nikon.html#Type2'>Nikon Type2 Tags</a> <br>--&gt; <a href='Nikon.html'>Nikon Tags</a> <br>--&gt; <a href='Nintendo.html'>Nintendo Tags</a> <br>--&gt; <a href='Olympus.html'>Olympus Tags</a> <br>--&gt; <a href='Olympus.html'>Olympus Tags</a> <br>--&gt; <a href='Panasonic.html'>Panasonic Tags</a> <br>--&gt; <a href='Panasonic.html#Leica2'>Panasonic Leica2 Tags</a> <br>--&gt; <a href='Panasonic.html#Leica3'>Panasonic Leica3 Tags</a> <br>--&gt; <a href='Panasonic.html#Leica4'>Panasonic Leica4 Tags</a> <br>--&gt; <a href='Panasonic.html#Leica5'>Panasonic Leica5 Tags</a> <br>--&gt; <a href='Panasonic.html#Leica6'>Panasonic Leica6 Tags</a> <br>--&gt; <a href='Panasonic.html#Leica6'>Panasonic Leica6 Tags</a> <br>--&gt; <a href='Panasonic.html#Leica5'>Panasonic Leica5 Tags</a> <br>--&gt; <a href='Panasonic.html#Leica9'>Panasonic Leica9 Tags</a> <br>--&gt; <a href='Panasonic.html'>Panasonic Tags</a> <br>--&gt; <a href='Panasonic.html#Type2'>Panasonic Type2 Tags</a> <br>--&gt; <a href='Pentax.html'>Pentax Tags</a> <br>--&gt; <a href='Pentax.html#Type2'>Pentax Type2 Tags</a> <br>--&gt; <a href='Casio.html#Type2'>Casio Type2 Tags</a> <br>--&gt; <a href='Pentax.html#Type4'>Pentax Type4 Tags</a> <br>--&gt; <a href='Pentax.html'>Pentax Tags</a> <br>--&gt; <a href='Pentax.html#S1'>Pentax S1 Tags</a> <br>--&gt; <a href='PhaseOne.html'>PhaseOne Tags</a> <br>--&gt; <a href='Reconyx.html'>Reconyx Tags</a> <br>--&gt; <a href='Ricoh.html'>Ricoh Tags</a> <br>--&gt; <a href='Ricoh.html#Type2'>Ricoh Type2 Tags</a> <br>--&gt; <a href='Ricoh.html#Text'>Ricoh Text Tags</a> <br><span class=n>(Samsung "STMN" maker notes without PreviewImage)</span> <br>--&gt; <a href='Samsung.html'>Samsung Tags</a> <br>--&gt; <a href='Samsung.html#Type2'>Samsung Type2 Tags</a> <br>--&gt; <a href='Sanyo.html'>Sanyo Tags</a> <br>--&gt; <a href='Sanyo.html'>Sanyo Tags</a> <br>--&gt; <a href='Sanyo.html'>Sanyo Tags</a> <br>--&gt; <a href='Sigma.html'>Sigma Tags</a> <br>--&gt; <a href='Sony.html'>Sony Tags</a> <br>--&gt; <a href='Olympus.html'>Olympus Tags</a> <br>--&gt; <a href='Olympus.html'>Olympus Tags</a> <br>--&gt; <a href='Sony.html#PIC'>Sony PIC Tags</a> <br>--&gt; <a href='Sony.html'>Sony Tags</a> <br>--&gt; <a href='Sony.html#Ericsson'>Sony Ericsson Tags</a> <br>--&gt; <a href='Sony.html#SRF'>Sony SRF Tags</a> <br><span class=n>(unknown text-based maker notes)</span> <br><span class=n>(unknown binary maker notes)</span> <br>--&gt; <a href='Unknown.html'>Unknown Tags</a></td></tr> <tr class=b> <td title='0x9286 = 37510'>0x9286</td> <td><u>UserComment</u></td> <td class=c>undef</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0x9290 = 37520'>0x9290</td> <td><u>SubSecTime</u></td> <td class=c>string</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x9291 = 37521'>0x9291</td> <td><u>SubSecTimeOriginal</u></td> <td class=c>string</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0x9292 = 37522'>0x9292</td> <td><u>SubSecTimeDigitized</u></td> <td class=c>string</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x932f = 37679'>0x932f</td> <td>MSDocumentText</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x9330 = 37680'>0x9330</td> <td>MSPropertySetStorage</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x9331 = 37681'>0x9331</td> <td>MSDocumentTextPosition</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0x935c = 37724'>0x935c</td> <td>ImageSourceData</td> <td class=c title=' ! = Unsafe'>undef!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x9c9b = 40091'>0x9c9b</td> <td>XPTitle</td> <td class=c>int8u</td> <td class=c>IFD0</td> <td><span class=s><span class=n>(tags 0x9c9b-0x9c9f are used by Windows Explorer; special characters in these values are converted to UTF-8 by default, or Windows Latin1 with the -L option. XPTitle is ignored by Windows Explorer if ImageDescription exists)</span></span></td></tr> <tr> <td title='0x9c9c = 40092'>0x9c9c</td> <td>XPComment</td> <td class=c>int8u</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x9c9d = 40093'>0x9c9d</td> <td>XPAuthor</td> <td class=c>int8u</td> <td class=c>IFD0</td> <td><span class=s><span class=n>(ignored by Windows Explorer if Artist exists)</span></span></td></tr> <tr> <td title='0x9c9e = 40094'>0x9c9e</td> <td>XPKeywords</td> <td class=c>int8u</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x9c9f = 40095'>0x9c9f</td> <td>XPSubject</td> <td class=c>int8u</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xa000 = 40960'>0xa000</td> <td><u>FlashpixVersion</u></td> <td class=c title=' : = Mandatory'>undef:</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa001 = 40961'>0xa001</td> <td><u>ColorSpace</u></td> <td class=c title=' : = Mandatory'>int16u:</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(the value of 0x2 is not standard EXIF. Instead, an Adobe RGB image is indicated by &quot;Uncalibrated&quot; with an InteropIndex of &quot;R03&quot;. The values 0xfffd and 0xfffe are also non-standard, and are used by some Sony cameras)</span> <br>0x1 = sRGB <br>0x2 = Adobe RGB <br>0xfffd = Wide Gamut RGB <br>0xfffe = ICC Profile <br>0xffff = Uncalibrated</span></td></tr> <tr> <td title='0xa002 = 40962'>0xa002</td> <td><u>ExifImageWidth</u></td> <td class=c title=' : = Mandatory'>int16u:</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(called PixelXDimension by the EXIF spec.)</span></span></td></tr> <tr class=b> <td title='0xa003 = 40963'>0xa003</td> <td><u>ExifImageHeight</u></td> <td class=c title=' : = Mandatory'>int16u:</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(called PixelYDimension by the EXIF spec.)</span></span></td></tr> <tr> <td title='0xa004 = 40964'>0xa004</td> <td><u>RelatedSoundFile</u></td> <td class=c>string</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa005 = 40965'>0xa005</td> <td><u>InteropOffset</u></td> <td class=c>-</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> <tr> <td title='0xa20b = 41483'>0xa20b</td> <td><u>FlashEnergy</u></td> <td class=c>rational64u[n]</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa20c = 41484'>0xa20c</td> <td><u>SpatialFrequencyResponse</u></td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xa20d = 41485'>0xa20d</td> <td>Noise</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa20e = 41486'>0xa20e</td> <td><u>FocalPlaneXResolution</u></td> <td class=c>rational64u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xa20f = 41487'>0xa20f</td> <td><u>FocalPlaneYResolution</u></td> <td class=c>rational64u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa210 = 41488'>0xa210</td> <td><u>FocalPlaneResolutionUnit</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(values 1, 4 and 5 are not standard EXIF)</span> <br>1 = None <br>2 = inches <br>3 = cm <br>4 = mm <br>5 = um</span></td></tr> <tr> <td title='0xa211 = 41489'>0xa211</td> <td>ImageNumber</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa212 = 41490'>0xa212</td> <td>SecurityClassification</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xa213 = 41491'>0xa213</td> <td>ImageHistory</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa214 = 41492'>0xa214</td> <td><u>SubjectLocation</u></td> <td class=c>int16u[2]</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xa215 = 41493'>0xa215</td> <td><u>ExposureIndex</u></td> <td class=c>rational64u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa216 = 41494'>0xa216</td> <td>TIFF-EPStandardID</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xa217 = 41495'>0xa217</td> <td><u>SensingMethod</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td><table class=cols><tr> <td>1 = Not defined <br>2 = One-chip color area <br>3 = Two-chip color area <br>4 = Three-chip color area <br>5 = Color sequential area <br>7 = Trilinear <br>8 = Color sequential linear</td></tr></table> </td></tr> <tr class=b> <td title='0xa300 = 41728'>0xa300</td> <td><u>FileSource</u></td> <td class=c>undef</td> <td class=c>ExifIFD</td> <td><span class=s>1 = Film Scanner <br>2 = Reflection Print Scanner <br>3 = Digital Camera <br>&quot;\x03\x00\x00\x00&quot; = Sigma Digital Camera</span></td></tr> <tr> <td title='0xa301 = 41729'>0xa301</td> <td><u>SceneType</u></td> <td class=c>undef</td> <td class=c>ExifIFD</td> <td><span class=s>1 = Directly photographed</span></td></tr> <tr class=b> <td title='0xa302 = 41730'>0xa302</td> <td><u>CFAPattern</u></td> <td class=c>undef</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xa401 = 41985'>0xa401</td> <td><u>CustomRendered</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td><span class=s>0 = Normal <br>1 = Custom</span></td></tr> <tr class=b> <td title='0xa402 = 41986'>0xa402</td> <td><u>ExposureMode</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td><span class=s>0 = Auto <br>1 = Manual <br>2 = Auto bracket</span></td></tr> <tr> <td title='0xa403 = 41987'>0xa403</td> <td><u>WhiteBalance</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td><span class=s>0 = Auto <br>1 = Manual</span></td></tr> <tr class=b> <td title='0xa404 = 41988'>0xa404</td> <td><u>DigitalZoomRatio</u></td> <td class=c>rational64u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xa405 = 41989'>0xa405</td> <td><u>FocalLengthIn35mmFormat</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(called FocalLengthIn35mmFilm by the EXIF spec.)</span></span></td></tr> <tr class=b> <td title='0xa406 = 41990'>0xa406</td> <td><u>SceneCaptureType</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td><span class=s>0 = Standard <br>1 = Landscape <br>2 = Portrait <br>3 = Night</span></td></tr> <tr> <td title='0xa407 = 41991'>0xa407</td> <td><u>GainControl</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td><span class=s>0 = None <br>1 = Low gain up <br>2 = High gain up <br>3 = Low gain down <br>4 = High gain down</span></td></tr> <tr class=b> <td title='0xa408 = 41992'>0xa408</td> <td><u>Contrast</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td><span class=s>0 = Normal <br>1 = Low <br>2 = High</span></td></tr> <tr> <td title='0xa409 = 41993'>0xa409</td> <td><u>Saturation</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td><span class=s>0 = Normal <br>1 = Low <br>2 = High</span></td></tr> <tr class=b> <td title='0xa40a = 41994'>0xa40a</td> <td><u>Sharpness</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td><span class=s>0 = Normal <br>1 = Soft <br>2 = Hard</span></td></tr> <tr> <td title='0xa40b = 41995'>0xa40b</td> <td><u>DeviceSettingDescription</u></td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa40c = 41996'>0xa40c</td> <td><u>SubjectDistanceRange</u></td> <td class=c>int16u</td> <td class=c>ExifIFD</td> <td><span class=s>0 = Unknown <br>1 = Macro <br>2 = Close <br>3 = Distant</span></td></tr> <tr> <td title='0xa420 = 42016'>0xa420</td> <td><u>ImageUniqueID</u></td> <td class=c>string</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa430 = 42032'>0xa430</td> <td><u>OwnerName</u></td> <td class=c>string</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(called CameraOwnerName by the EXIF spec.)</span></span></td></tr> <tr> <td title='0xa431 = 42033'>0xa431</td> <td><u>SerialNumber</u></td> <td class=c>string</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(called BodySerialNumber by the EXIF spec.)</span></span></td></tr> <tr class=b> <td title='0xa432 = 42034'>0xa432</td> <td><u>LensInfo</u></td> <td class=c>rational64u[4]</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(4 rational values giving focal and aperture ranges, called LensSpecification by the EXIF spec.)</span></span></td></tr> <tr> <td title='0xa433 = 42035'>0xa433</td> <td><u>LensMake</u></td> <td class=c>string</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa434 = 42036'>0xa434</td> <td><u>LensModel</u></td> <td class=c>string</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xa435 = 42037'>0xa435</td> <td><u>LensSerialNumber</u></td> <td class=c>string</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa480 = 42112'>0xa480</td> <td>GDALMetadata</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xa481 = 42113'>0xa481</td> <td>GDALNoData</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa500 = 42240'>0xa500</td> <td>Gamma</td> <td class=c>rational64u</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xafc0 = 44992'>0xafc0</td> <td>ExpandSoftware</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xafc1 = 44993'>0xafc1</td> <td>ExpandLens</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xafc2 = 44994'>0xafc2</td> <td>ExpandFilm</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xafc3 = 44995'>0xafc3</td> <td>ExpandFilterLens</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xafc4 = 44996'>0xafc4</td> <td>ExpandScanner</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xafc5 = 44997'>0xafc5</td> <td>ExpandFlashLamp</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xbc01 = 48129'>0xbc01</td> <td>PixelFormat</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s><span class=n>(tags 0xbc** are used in Windows HD Photo (HDP and WDP) images. The actual PixelFormat values are 16-byte GUID&#39;s but the leading 15 bytes, &#39;6fddc324-4e03-4bfe-b1853-d77768dc9&#39;, have been removed below to avoid unnecessary clutter)</span></span><table class=cols><tr> <td>0x5 = Black &amp; White <br>0x8 = 8-bit Gray <br>0x9 = 16-bit BGR555 <br>0xa = 16-bit BGR565 <br>0xb = 16-bit Gray <br>0xc = 24-bit BGR <br>0xd = 24-bit RGB <br>0xe = 32-bit BGR <br>0xf = 32-bit BGRA <br>0x10 = 32-bit PBGRA <br>0x11 = 32-bit Gray Float <br>0x12 = 48-bit RGB Fixed Point <br>0x13 = 32-bit BGR101010 <br>0x15 = 48-bit RGB <br>0x16 = 64-bit RGBA <br>0x17 = 64-bit PRGBA <br>0x18 = 96-bit RGB Fixed Point <br>0x19 = 128-bit RGBA Float <br>0x1a = 128-bit PRGBA Float <br>0x1b = 128-bit RGB Float <br>0x1c = 32-bit CMYK <br>0x1d = 64-bit RGBA Fixed Point <br>0x1e = 128-bit RGBA Fixed Point <br>0x1f = 64-bit CMYK <br>0x20 = 24-bit 3 Channels <br>0x21 = 32-bit 4 Channels <br>0x22 = 40-bit 5 Channels <br>0x23 = 48-bit 6 Channels <br>0x24 = 56-bit 7 Channels <br>0x25 = 64-bit 8 Channels <br>0x26 = 48-bit 3 Channels <br>0x27 = 64-bit 4 Channels <br>0x28 = 80-bit 5 Channels <br>0x29 = 96-bit 6 Channels <br>0x2a = 112-bit 7 Channels <br>0x2b = 128-bit 8 Channels <br>0x2c = 40-bit CMYK Alpha <br>0x2d = 80-bit CMYK Alpha <br>0x2e = 32-bit 3 Channels Alpha <br>0x2f = 40-bit 4 Channels Alpha <br>0x30 = 48-bit 5 Channels Alpha <br>0x31 = 56-bit 6 Channels Alpha <br>0x32 = 64-bit 7 Channels Alpha <br>0x33 = 72-bit 8 Channels Alpha <br>0x34 = 64-bit 3 Channels Alpha <br>0x35 = 80-bit 4 Channels Alpha <br>0x36 = 96-bit 5 Channels Alpha <br>0x37 = 112-bit 6 Channels Alpha <br>0x38 = 128-bit 7 Channels Alpha <br>0x39 = 144-bit 8 Channels Alpha <br>0x3a = 64-bit RGBA Half <br>0x3b = 48-bit RGB Half <br>0x3d = 32-bit RGBE <br>0x3e = 16-bit Gray Half <br>0x3f = 32-bit Gray Fixed Point</td></tr></table> </td></tr> <tr class=b> <td title='0xbc02 = 48130'>0xbc02</td> <td>Transformation</td> <td class=c>N</td> <td class=c>-</td> <td><table class=cols><tr> <td>0 = Horizontal (normal) <br>1 = Mirror vertical <br>2 = Mirror horizontal <br>3 = Rotate 180 <br>4 = Rotate 90 CW <br>5 = Mirror horizontal and rotate 90 CW <br>6 = Mirror horizontal and rotate 270 CW <br>7 = Rotate 270 CW</td></tr></table> </td></tr> <tr> <td title='0xbc03 = 48131'>0xbc03</td> <td>Uncompressed</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td title='0xbc04 = 48132'>0xbc04</td> <td>ImageType</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>Bit 0 = Preview <br>Bit 1 = Page</span></td></tr> <tr> <td title='0xbc80 = 48256'>0xbc80</td> <td>ImageWidth</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xbc81 = 48257'>0xbc81</td> <td>ImageHeight</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xbc82 = 48258'>0xbc82</td> <td>WidthResolution</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xbc83 = 48259'>0xbc83</td> <td>HeightResolution</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xbcc0 = 48320'>0xbcc0</td> <td>ImageOffset</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xbcc1 = 48321'>0xbcc1</td> <td>ImageByteCount</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xbcc2 = 48322'>0xbcc2</td> <td>AlphaOffset</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xbcc3 = 48323'>0xbcc3</td> <td>AlphaByteCount</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xbcc4 = 48324'>0xbcc4</td> <td>ImageDataDiscard</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>0 = Full Resolution <br>1 = Flexbits Discarded <br>2 = HighPass Frequency Data Discarded <br>3 = Highpass and LowPass Frequency Data Discarded</span></td></tr> <tr class=b> <td title='0xbcc5 = 48325'>0xbcc5</td> <td>AlphaDataDiscard</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>0 = Full Resolution <br>1 = Flexbits Discarded <br>2 = HighPass Frequency Data Discarded <br>3 = Highpass and LowPass Frequency Data Discarded</span></td></tr> <tr> <td title='0xc427 = 50215'>0xc427</td> <td>OceScanjobDesc</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc428 = 50216'>0xc428</td> <td>OceApplicationSelector</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xc429 = 50217'>0xc429</td> <td>OceIDNumber</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc42a = 50218'>0xc42a</td> <td>OceImageLogic</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xc44f = 50255'>0xc44f</td> <td>Annotations</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc4a5 = 50341'>0xc4a5</td> <td>PrintIM</td> <td class=c>undef</td> <td class=c>IFD0</td> <td>--&gt; <a href='PrintIM.html'>PrintIM Tags</a></td></tr> <tr> <td title='0xc573 = 50547'>0xc573</td> <td>OriginalFileName</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s><span class=n>(used by some obscure software)</span></span></td></tr> <tr class=b> <td title='0xc580 = 50560'>0xc580</td> <td>USPTOOriginalContentType</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>0 = Text or Drawing <br>1 = Grayscale <br>2 = Color</span></td></tr> <tr> <td title='0xc612 = 50706'>0xc612</td> <td>DNGVersion</td> <td class=c title=' ! = Unsafe'>int8u[4]!</td> <td class=c>IFD0</td> <td><span class=s><span class=n>(tags 0xc612-0xc7b5 are used in DNG images unless otherwise noted)</span></span></td></tr> <tr class=b> <td title='0xc613 = 50707'>0xc613</td> <td>DNGBackwardVersion</td> <td class=c title=' ! = Unsafe'>int8u[4]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc614 = 50708'>0xc614</td> <td>UniqueCameraModel</td> <td class=c>string</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc615 = 50709'>0xc615</td> <td>LocalizedCameraModel</td> <td class=c>string</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc616 = 50710'>0xc616</td> <td>CFAPlaneColor</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc617 = 50711'>0xc617</td> <td>CFALayout</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s>1 = Rectangular <br>2 = Even columns offset down 1/2 row <br>3 = Even columns offset up 1/2 row <br>4 = Even rows offset right 1/2 column <br>5 = Even rows offset left 1/2 column <br>6 = Even rows offset up by 1/2 row, even columns offset left by 1/2 column <br>7 = Even rows offset up by 1/2 row, even columns offset right by 1/2 column <br>8 = Even rows offset down by 1/2 row, even columns offset left by 1/2 column <br>9 = Even rows offset down by 1/2 row, even columns offset right by 1/2 column</span></td></tr> <tr> <td title='0xc618 = 50712'>0xc618</td> <td>LinearizationTable</td> <td class=c title=' ! = Unsafe'>int16u[n]!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc619 = 50713'>0xc619</td> <td>BlackLevelRepeatDim</td> <td class=c title=' ! = Unsafe'>int16u[2]!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xc61a = 50714'>0xc61a</td> <td>BlackLevel</td> <td class=c title=' ! = Unsafe'>rational64u[n]!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc61b = 50715'>0xc61b</td> <td>BlackLevelDeltaH</td> <td class=c title=' ! = Unsafe'>rational64s[n]!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xc61c = 50716'>0xc61c</td> <td>BlackLevelDeltaV</td> <td class=c title=' ! = Unsafe'>rational64s[n]!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc61d = 50717'>0xc61d</td> <td>WhiteLevel</td> <td class=c title=' ! = Unsafe'>int32u[n]!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xc61e = 50718'>0xc61e</td> <td>DefaultScale</td> <td class=c title=' ! = Unsafe'>rational64u[2]!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc61f = 50719'>0xc61f</td> <td>DefaultCropOrigin</td> <td class=c title=' ! = Unsafe'>int32u[2]!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xc620 = 50720'>0xc620</td> <td>DefaultCropSize</td> <td class=c title=' ! = Unsafe'>int32u[2]!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc621 = 50721'>0xc621</td> <td>ColorMatrix1</td> <td class=c title=' ! = Unsafe'>rational64s[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc622 = 50722'>0xc622</td> <td>ColorMatrix2</td> <td class=c title=' ! = Unsafe'>rational64s[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc623 = 50723'>0xc623</td> <td>CameraCalibration1</td> <td class=c title=' ! = Unsafe'>rational64s[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc624 = 50724'>0xc624</td> <td>CameraCalibration2</td> <td class=c title=' ! = Unsafe'>rational64s[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc625 = 50725'>0xc625</td> <td>ReductionMatrix1</td> <td class=c title=' ! = Unsafe'>rational64s[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc626 = 50726'>0xc626</td> <td>ReductionMatrix2</td> <td class=c title=' ! = Unsafe'>rational64s[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc627 = 50727'>0xc627</td> <td>AnalogBalance</td> <td class=c title=' ! = Unsafe'>rational64u[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc628 = 50728'>0xc628</td> <td>AsShotNeutral</td> <td class=c title=' ! = Unsafe'>rational64u[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc629 = 50729'>0xc629</td> <td>AsShotWhiteXY</td> <td class=c title=' ! = Unsafe'>rational64u[2]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc62a = 50730'>0xc62a</td> <td>BaselineExposure</td> <td class=c title=' ! = Unsafe'>rational64s!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc62b = 50731'>0xc62b</td> <td>BaselineNoise</td> <td class=c title=' ! = Unsafe'>rational64u!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc62c = 50732'>0xc62c</td> <td>BaselineSharpness</td> <td class=c title=' ! = Unsafe'>rational64u!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc62d = 50733'>0xc62d</td> <td>BayerGreenSplit</td> <td class=c title=' ! = Unsafe'>int32u!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xc62e = 50734'>0xc62e</td> <td>LinearResponseLimit</td> <td class=c title=' ! = Unsafe'>rational64u!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc62f = 50735'>0xc62f</td> <td>CameraSerialNumber</td> <td class=c>string</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc630 = 50736'>0xc630</td> <td>DNGLensInfo</td> <td class=c>rational64u[4]</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc631 = 50737'>0xc631</td> <td>ChromaBlurRadius</td> <td class=c title=' ! = Unsafe'>rational64u!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xc632 = 50738'>0xc632</td> <td>AntiAliasStrength</td> <td class=c title=' ! = Unsafe'>rational64u!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc633 = 50739'>0xc633</td> <td>ShadowScale</td> <td class=c title=' ! = Unsafe'>rational64u!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc634 = 50740'>0xc634</td> <td>SR2Private <br>DNGAdobeData <br>MakerNotePentax <br>MakerNotePentax5 <br>DNGPrivateData</td> <td class=c title=' ! = Unsafe'>-<br>undef!<br>-<br>-<br>undef!</td> <td class=c>-<br>IFD0<br>-<br>-<br>IFD0</td> <td>--&gt; <a href='Sony.html#SR2Private'>Sony SR2Private Tags</a> <br>--&gt; <a href='DNG.html#AdobeData'>DNG AdobeData Tags</a> <br>--&gt; <a href='Pentax.html'>Pentax Tags</a> <br>--&gt; <a href='Pentax.html'>Pentax Tags</a></td></tr> <tr class=b> <td title='0xc635 = 50741'>0xc635</td> <td>MakerNoteSafety</td> <td class=c>int16u</td> <td class=c>IFD0</td> <td><span class=s>0 = Unsafe <br>1 = Safe</span></td></tr> <tr> <td title='0xc640 = 50752'>0xc640</td> <td>RawImageSegmentation</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s><span class=n>(used in segmented Canon CR2 images. 3 numbers: 1. Number of segments minus one; 2. Pixel width of segments except last; 3. Pixel width of last segment)</span></span></td></tr> <tr class=b> <td title='0xc65a = 50778'>0xc65a</td> <td>CalibrationIlluminant1</td> <td class=c title=' ! = Unsafe'>int16u!</td> <td class=c>IFD0</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td title='0xc65b = 50779'>0xc65b</td> <td>CalibrationIlluminant2</td> <td class=c title=' ! = Unsafe'>int16u!</td> <td class=c>IFD0</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr class=b> <td title='0xc65c = 50780'>0xc65c</td> <td>BestQualityScale</td> <td class=c title=' ! = Unsafe'>rational64u!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xc65d = 50781'>0xc65d</td> <td>RawDataUniqueID</td> <td class=c title=' ! = Unsafe'>int8u[16]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc660 = 50784'>0xc660</td> <td>AliasLayerMetadata</td> <td class=c>N</td> <td class=c>-</td> <td><span class=s><span class=n>(used by Alias Sketchbook Pro)</span></span></td></tr> <tr> <td title='0xc68b = 50827'>0xc68b</td> <td>OriginalRawFileName</td> <td class=c title=' ! = Unsafe'>string!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc68c = 50828'>0xc68c</td> <td>OriginalRawFileData</td> <td class=c title=' ! = Unsafe'>undef!</td> <td class=c>IFD0</td> <td>--&gt; <a href='DNG.html#OriginalRaw'>DNG OriginalRaw Tags</a></td></tr> <tr> <td title='0xc68d = 50829'>0xc68d</td> <td>ActiveArea</td> <td class=c title=' ! = Unsafe'>int32u[4]!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc68e = 50830'>0xc68e</td> <td>MaskedAreas</td> <td class=c title=' ! = Unsafe'>int32u[4]!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xc68f = 50831'>0xc68f</td> <td>AsShotICCProfile</td> <td class=c title=' ! = Unsafe'>undef!</td> <td class=c>IFD0</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> <tr class=b> <td title='0xc690 = 50832'>0xc690</td> <td>AsShotPreProfileMatrix</td> <td class=c title=' ! = Unsafe'>rational64s[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc691 = 50833'>0xc691</td> <td>CurrentICCProfile</td> <td class=c title=' ! = Unsafe'>undef!</td> <td class=c>IFD0</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> <tr class=b> <td title='0xc692 = 50834'>0xc692</td> <td>CurrentPreProfileMatrix</td> <td class=c title=' ! = Unsafe'>rational64s[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc6bf = 50879'>0xc6bf</td> <td>ColorimetricReference</td> <td class=c title=' ! = Unsafe'>int16u!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc6c5 = 50885'>0xc6c5</td> <td>SRawType</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xc6d2 = 50898'>0xc6d2</td> <td>PanasonicTitle</td> <td class=c>undef</td> <td class=c>IFD0</td> <td><span class=s><span class=n>(proprietary Panasonic tag used for baby/pet name, etc)</span></span></td></tr> <tr class=b> <td title='0xc6d3 = 50899'>0xc6d3</td> <td>PanasonicTitle2</td> <td class=c>undef</td> <td class=c>IFD0</td> <td><span class=s><span class=n>(proprietary Panasonic tag used for baby/pet name with age)</span></span></td></tr> <tr> <td title='0xc6f3 = 50931'>0xc6f3</td> <td>CameraCalibrationSig</td> <td class=c title=' ! = Unsafe'>string!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc6f4 = 50932'>0xc6f4</td> <td>ProfileCalibrationSig</td> <td class=c title=' ! = Unsafe'>string!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc6f5 = 50933'>0xc6f5</td> <td>ProfileIFD</td> <td class=c>-</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> <tr class=b> <td title='0xc6f6 = 50934'>0xc6f6</td> <td>AsShotProfileName</td> <td class=c title=' ! = Unsafe'>string!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc6f7 = 50935'>0xc6f7</td> <td>NoiseReductionApplied</td> <td class=c title=' ! = Unsafe'>rational64u!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc6f8 = 50936'>0xc6f8</td> <td>ProfileName</td> <td class=c title=' ! = Unsafe'>string!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc6f9 = 50937'>0xc6f9</td> <td>ProfileHueSatMapDims</td> <td class=c title=' ! = Unsafe'>int32u[3]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc6fa = 50938'>0xc6fa</td> <td>ProfileHueSatMapData1</td> <td class=c title=' ! = Unsafe'>float[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc6fb = 50939'>0xc6fb</td> <td>ProfileHueSatMapData2</td> <td class=c title=' ! = Unsafe'>float[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc6fc = 50940'>0xc6fc</td> <td>ProfileToneCurve</td> <td class=c title=' ! = Unsafe'>float[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc6fd = 50941'>0xc6fd</td> <td>ProfileEmbedPolicy</td> <td class=c title=' ! = Unsafe'>int32u!</td> <td class=c>IFD0</td> <td><span class=s>0 = Allow Copying <br>1 = Embed if Used <br>2 = Never Embed <br>3 = No Restrictions</span></td></tr> <tr class=b> <td title='0xc6fe = 50942'>0xc6fe</td> <td>ProfileCopyright</td> <td class=c title=' ! = Unsafe'>string!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc714 = 50964'>0xc714</td> <td>ForwardMatrix1</td> <td class=c title=' ! = Unsafe'>rational64s[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc715 = 50965'>0xc715</td> <td>ForwardMatrix2</td> <td class=c title=' ! = Unsafe'>rational64s[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc716 = 50966'>0xc716</td> <td>PreviewApplicationName</td> <td class=c title=' ! = Unsafe'>string!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc717 = 50967'>0xc717</td> <td>PreviewApplicationVersion</td> <td class=c title=' ! = Unsafe'>string!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc718 = 50968'>0xc718</td> <td>PreviewSettingsName</td> <td class=c title=' ! = Unsafe'>string!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc719 = 50969'>0xc719</td> <td>PreviewSettingsDigest</td> <td class=c title=' ! = Unsafe'>int8u!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc71a = 50970'>0xc71a</td> <td>PreviewColorSpace</td> <td class=c title=' ! = Unsafe'>int32u!</td> <td class=c>IFD0</td> <td><span class=s>0 = Unknown <br>1 = Gray Gamma 2.2 <br>2 = sRGB <br>3 = Adobe RGB <br>4 = ProPhoto RGB</span></td></tr> <tr class=b> <td title='0xc71b = 50971'>0xc71b</td> <td>PreviewDateTime</td> <td class=c title=' ! = Unsafe'>string!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc71c = 50972'>0xc71c</td> <td>RawImageDigest</td> <td class=c title=' ! = Unsafe'>int8u[16]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc71d = 50973'>0xc71d</td> <td>OriginalRawFileDigest</td> <td class=c title=' ! = Unsafe'>int8u[16]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc71e = 50974'>0xc71e</td> <td>SubTileBlockSize</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc71f = 50975'>0xc71f</td> <td>RowInterleaveFactor</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xc725 = 50981'>0xc725</td> <td>ProfileLookTableDims</td> <td class=c title=' ! = Unsafe'>int32u[3]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc726 = 50982'>0xc726</td> <td>ProfileLookTableData</td> <td class=c title=' ! = Unsafe'>float[n]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc740 = 51008'>0xc740</td> <td>OpcodeList1</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc741 = 51009'>0xc741</td> <td>OpcodeList2</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr> <td title='0xc74e = 51022'>0xc74e</td> <td>OpcodeList3</td> <td class=c>N</td> <td class=c>-</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc761 = 51041'>0xc761</td> <td>NoiseProfile</td> <td class=c title=' ! = Unsafe'>double[n]!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xc763 = 51043'>0xc763</td> <td>TimeCodes</td> <td class=c>int8u[n]</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc764 = 51044'>0xc764</td> <td>FrameRate</td> <td class=c>rational64s</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc772 = 51058'>0xc772</td> <td>TStop</td> <td class=c>rational64u[n]</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc789 = 51081'>0xc789</td> <td>ReelName</td> <td class=c>string</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc791 = 51089'>0xc791</td> <td>OriginalDefaultFinalSize</td> <td class=c title=' ! = Unsafe'>int32u[2]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc792 = 51090'>0xc792</td> <td>OriginalBestQualitySize</td> <td class=c title=' ! = Unsafe'>int32u[2]!</td> <td class=c>IFD0</td> <td><span class=s><span class=n>(called OriginalBestQualityFinalSize by the DNG spec)</span></span></td></tr> <tr> <td title='0xc793 = 51091'>0xc793</td> <td>OriginalDefaultCropSize</td> <td class=c title=' ! = Unsafe'>rational64u[2]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc7a1 = 51105'>0xc7a1</td> <td>CameraLabel</td> <td class=c>string</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc7a3 = 51107'>0xc7a3</td> <td>ProfileHueSatMapEncoding</td> <td class=c title=' ! = Unsafe'>int32u!</td> <td class=c>IFD0</td> <td><span class=s>0 = Linear <br>1 = sRGB</span></td></tr> <tr class=b> <td title='0xc7a4 = 51108'>0xc7a4</td> <td>ProfileLookTableEncoding</td> <td class=c title=' ! = Unsafe'>int32u!</td> <td class=c>IFD0</td> <td><span class=s>0 = Linear <br>1 = sRGB</span></td></tr> <tr> <td title='0xc7a5 = 51109'>0xc7a5</td> <td>BaselineExposureOffset</td> <td class=c title=' ! = Unsafe'>rational64s!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc7a6 = 51110'>0xc7a6</td> <td>DefaultBlackRender</td> <td class=c title=' ! = Unsafe'>int32u!</td> <td class=c>IFD0</td> <td><span class=s>0 = Auto <br>1 = None</span></td></tr> <tr> <td title='0xc7a7 = 51111'>0xc7a7</td> <td>NewRawImageDigest</td> <td class=c title=' ! = Unsafe'>int8u[16]!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc7a8 = 51112'>0xc7a8</td> <td>RawToPreviewGain</td> <td class=c title=' ! = Unsafe'>double!</td> <td class=c>IFD0</td> <td>&nbsp;</td></tr> <tr> <td title='0xc7b5 = 51125'>0xc7b5</td> <td>DefaultUserCrop</td> <td class=c title=' ! = Unsafe'>rational64u[4]!</td> <td class=c>SubIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xea1c = 59932'>0xea1c</td> <td>Padding</td> <td class=c>undef</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xea1d = 59933'>0xea1d</td> <td>OffsetSchema</td> <td class=c>int32s</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(Microsoft&#39;s ill-conceived maker note offset difference)</span></span></td></tr> <tr class=b> <td title='0xfde8 = 65000'>0xfde8</td> <td>OwnerName</td> <td class=c title=' / = Avoided'>string/</td> <td class=c>ExifIFD</td> <td><span class=s><span class=n>(tags 0xfde8-0xfdea and 0xfe4c-0xfe58 are generated by Photoshop Camera RAW. Some names are the same as other EXIF tags, but ExifTool will avoid writing these unless they already exist in the file)</span></span></td></tr> <tr> <td title='0xfde9 = 65001'>0xfde9</td> <td>SerialNumber</td> <td class=c title=' / = Avoided'>string/</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfdea = 65002'>0xfdea</td> <td>Lens</td> <td class=c title=' / = Avoided'>string/</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xfe00 = 65024'>0xfe00</td> <td>KDC_IFD</td> <td class=c>-</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#KDC_IFD'>Kodak KDC_IFD Tags</a> <br><span class='n s'>(used in some Kodak KDC images)</span></td></tr> <tr class=b> <td title='0xfe4c = 65100'>0xfe4c</td> <td>RawFile</td> <td class=c title=' / = Avoided'>string/</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xfe4d = 65101'>0xfe4d</td> <td>Converter</td> <td class=c title=' / = Avoided'>string/</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfe4e = 65102'>0xfe4e</td> <td>WhiteBalance</td> <td class=c title=' / = Avoided'>string/</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xfe51 = 65105'>0xfe51</td> <td>Exposure</td> <td class=c title=' / = Avoided'>string/</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfe52 = 65106'>0xfe52</td> <td>Shadows</td> <td class=c title=' / = Avoided'>string/</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xfe53 = 65107'>0xfe53</td> <td>Brightness</td> <td class=c title=' / = Avoided'>string/</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfe54 = 65108'>0xfe54</td> <td>Contrast</td> <td class=c title=' / = Avoided'>string/</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xfe55 = 65109'>0xfe55</td> <td>Saturation</td> <td class=c title=' / = Avoided'>string/</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfe56 = 65110'>0xfe56</td> <td>Sharpness</td> <td class=c title=' / = Avoided'>string/</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr> <td title='0xfe57 = 65111'>0xfe57</td> <td>Smoothness</td> <td class=c title=' / = Avoided'>string/</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfe58 = 65112'>0xfe58</td> <td>MoireFilter</td> <td class=c title=' / = Avoided'>string/</td> <td class=c>ExifIFD</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Compression'>EXIF Compression Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>Compression</th></tr> <tr><td class=r>1</td><td>= Uncompressed</td> </tr><tr><td class=r>2</td><td>= CCITT 1D</td> </tr><tr><td class=r>3</td><td>= T4/Group 3 Fax</td> </tr><tr><td class=r>4</td><td>= T6/Group 4 Fax</td> </tr><tr><td class=r>5</td><td>= LZW</td> </tr><tr><td class=r>6</td><td>= JPEG (old-style)</td> </tr><tr><td class=r>7</td><td>= JPEG</td> </tr><tr><td class=r>8</td><td>= Adobe Deflate</td> </tr><tr><td class=r>9</td><td>= JBIG B&amp;W</td> </tr><tr><td class=r>10</td><td>= JBIG Color</td> </tr><tr><td class=r>99</td><td>= JPEG</td> </tr><tr><td class=r>262</td><td>= Kodak 262</td> </tr><tr><td class=r>32766</td><td>= Next</td> </tr><tr><td class=r>32767</td><td>= Sony ARW Compressed</td> </tr><tr><td class=r>32769</td><td>= Packed RAW</td> </tr><tr><td class=r>32770</td><td>= Samsung SRW Compressed</td> </tr><tr><td class=r>32771</td><td>= CCIRLEW</td> </tr><tr><td class=r>32772</td><td>= Samsung SRW Compressed 2</td> </tr><tr><td class=r>32773</td><td>= PackBits</td> </tr><tr><td class=r>32809</td><td>= Thunderscan</td> </tr><tr><td class=r>32867</td><td>= Kodak KDC Compressed</td> </tr><tr><td class=r>32895</td><td>= IT8CTPAD</td> </tr><tr><td class=r>32896</td><td>= IT8LW</td> </tr><tr><td class=r>32897</td><td>= IT8MP</td> </tr><tr><td class=r>32898</td><td>= IT8BL</td> </tr><tr><td class=r>32908</td><td>= PixarFilm</td> </tr><tr><td class=r>32909</td><td>= PixarLog</td> </tr><tr><td class=r>32946</td><td>= Deflate</td> </tr><tr><td class=r>32947</td><td>= DCS</td> </tr><tr><td class=r>34661</td><td>= JBIG</td> </tr><tr><td class=r>34676</td><td>= SGILog</td> </tr><tr><td class=r>34677</td><td>= SGILog24</td> </tr><tr><td class=r>34712</td><td>= JPEG 2000</td> </tr><tr><td class=r>34713</td><td>= Nikon NEF Compressed</td> </tr><tr><td class=r>34715</td><td>= JBIG2 TIFF FX</td> </tr><tr><td class=r>34718</td><td>= Microsoft Document Imaging (MDI) Binary Level Codec</td> </tr><tr><td class=r>34719</td><td>= Microsoft Document Imaging (MDI) Progressive Transform Codec</td> </tr><tr><td class=r>34720</td><td>= Microsoft Document Imaging (MDI) Vector</td> </tr><tr><td class=r>34892</td><td>= Lossy JPEG</td> </tr><tr><td class=r>65000</td><td>= Kodak DCR Compressed</td> </tr><tr><td class=r>65535</td><td>= Pentax PEF Compressed</td> </tr></table></td></tr></table></blockquote> <h2><a name='LightSource'>EXIF LightSource Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>LightSource</th><th>Value</th><th>LightSource</th><th>Value</th><th>LightSource</th></tr> <tr><td class=r>0</td><td>= Unknown</td> <td class='r b'>12</td><td class=b>= Daylight Fluorescent</td> <td class=r>20</td><td>= D55</td> </tr><tr><td class=r>1</td><td>= Daylight</td> <td class='r b'>13</td><td class=b>= Day White Fluorescent</td> <td class=r>21</td><td>= D65</td> </tr><tr><td class=r>2</td><td>= Fluorescent</td> <td class='r b'>14</td><td class=b>= Cool White Fluorescent</td> <td class=r>22</td><td>= D75</td> </tr><tr><td class=r>3</td><td>= Tungsten (Incandescent)</td> <td class='r b'>15</td><td class=b>= White Fluorescent</td> <td class=r>23</td><td>= D50</td> </tr><tr><td class=r>4</td><td>= Flash</td> <td class='r b'>16</td><td class=b>= Warm White Fluorescent</td> <td class=r>24</td><td>= ISO Studio Tungsten</td> </tr><tr><td class=r>9</td><td>= Fine Weather</td> <td class='r b'>17</td><td class=b>= Standard Light A</td> <td class=r>255</td><td>= Other</td> </tr><tr><td class=r>10</td><td>= Cloudy</td> <td class='r b'>18</td><td class=b>= Standard Light B</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr><tr><td class=r>11</td><td>= Shade</td> <td class='r b'>19</td><td class=b>= Standard Light C</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='Flash'>EXIF Flash Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>Flash</th></tr> <tr><td class=r>0x0</td><td>= No Flash</td> </tr><tr><td class=r>0x1</td><td>= Fired</td> </tr><tr><td class=r>0x5</td><td>= Fired, Return not detected</td> </tr><tr><td class=r>0x7</td><td>= Fired, Return detected</td> </tr><tr><td class=r>0x8</td><td>= On, Did not fire</td> </tr><tr><td class=r>0x9</td><td>= On, Fired</td> </tr><tr><td class=r>0xd</td><td>= On, Return not detected</td> </tr><tr><td class=r>0xf</td><td>= On, Return detected</td> </tr><tr><td class=r>0x10</td><td>= Off, Did not fire</td> </tr><tr><td class=r>0x14</td><td>= Off, Did not fire, Return not detected</td> </tr><tr><td class=r>0x18</td><td>= Auto, Did not fire</td> </tr><tr><td class=r>0x19</td><td>= Auto, Fired</td> </tr><tr><td class=r>0x1d</td><td>= Auto, Fired, Return not detected</td> </tr><tr><td class=r>0x1f</td><td>= Auto, Fired, Return detected</td> </tr><tr><td class=r>0x20</td><td>= No flash function</td> </tr><tr><td class=r>0x30</td><td>= Off, No flash function</td> </tr><tr><td class=r>0x41</td><td>= Fired, Red-eye reduction</td> </tr><tr><td class=r>0x45</td><td>= Fired, Red-eye reduction, Return not detected</td> </tr><tr><td class=r>0x47</td><td>= Fired, Red-eye reduction, Return detected</td> </tr><tr><td class=r>0x49</td><td>= On, Red-eye reduction</td> </tr><tr><td class=r>0x4d</td><td>= On, Red-eye reduction, Return not detected</td> </tr><tr><td class=r>0x4f</td><td>= On, Red-eye reduction, Return detected</td> </tr><tr><td class=r>0x50</td><td>= Off, Red-eye reduction</td> </tr><tr><td class=r>0x58</td><td>= Auto, Did not fire, Red-eye reduction</td> </tr><tr><td class=r>0x59</td><td>= Auto, Fired, Red-eye reduction</td> </tr><tr><td class=r>0x5d</td><td>= Auto, Fired, Red-eye reduction, Return not detected</td> </tr><tr><td class=r>0x5f</td><td>= Auto, Fired, Red-eye reduction, Return detected</td> </tr></table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Oct 30, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Extra.html�������������������������������������������������������000644 �000765 �000024 �00000046654 12644743230 021023� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Extra Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Extra Tags</h2> <p> The extra tags represent extra information extracted or generated by ExifTool that is not directly associated with another tag group. The <b>Group</b> column lists the family 1 group name when reading. Tags with a &quot;-&quot; in this column are write-only.</p> <p>Tags in the family 1 &quot;System&quot; group are referred to as &quot;pseudo&quot; tags because they don&#39;t represent real metadata in the file. Instead, this information is stored in the directory structure of the filesystem. The five writable &quot;pseudo&quot; tags (FileName, Directory, FileModifyDate, FileCreateDate and HardLink) may be written without modifying the file itself. The TestName tag is used for dry-run testing before writing FileName. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Group</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Adobe</td> <td class=c title=' ! = Unsafe'>Y!</td> <td class=c>Adobe</td> <td><span class=s><span class=n>(the JPEG APP14 Adobe segment. Extracted only if specified. See the <a href="JPEG.html#Adobe">JPEG Adobe Tags</a> for more information)</span></span></td></tr> <tr class=b> <td>CanonDR4</td> <td class=c title=' ! = Unsafe'>Y!</td> <td class=c>CanonVRD</td> <td><span class=s><span class=n>(the full Canon DPP version 4 DR4 block)</span></span></td></tr> <tr> <td>CanonVRD</td> <td class=c title=' ! = Unsafe'>Y!</td> <td class=c>CanonVRD</td> <td><span class=s><span class=n>(the full Canon DPP VRD trailer block)</span></span></td></tr> <tr class=b> <td>Comment</td> <td class=c>Y</td> <td class=c>File</td> <td><span class=s><span class=n>(comment embedded in JPEG, GIF89a or PPM/PGM/PBM image)</span></span></td></tr> <tr> <td>CurrentIPTCDigest</td> <td class=c>N</td> <td class=c>File</td> <td><span class=s><span class=n>(MD5 digest of existing IPTC data. All zeros if IPTC exists but Digest::MD5 is not installed. Only calculated for IPTC in the standard location as specified by the <a href="http://www.metadataworkinggroup.org/">MWG</a>. ExifTool automates the handling of this tag in the MWG module -- see the <a href="MWG.html">MWG Composite Tags</a> for details)</span></span></td></tr> <tr class=b> <td>Directory</td> <td class=c title=' ! = Unsafe'>Y!</td> <td class=c>System</td> <td><span class=s><span class=n>(the directory of the file as specified in the call to ExifTool, or &quot;.&quot; if no directory was specified. May be written to move the file to another directory that will be created if doesn&#39;t already exist)</span></span></td></tr> <tr> <td>EXIF</td> <td class=c title=' ! = Unsafe'>Y!</td> <td class=c>EXIF</td> <td><span class=s><span class=n>(the full EXIF data block from JPEG, PNG, JP2, MIE and MIFF images)</span></span></td></tr> <tr class=b> <td>Error</td> <td class=c>N</td> <td class=c>ExifTool</td> <td><span class=s><span class=n>(returns errors that may have occurred while reading or writing a file. Any Error will prevent the file from being processed. Minor errors may be downgraded to warnings with the -m or IgnoreMinorErrors option)</span></span></td></tr> <tr> <td>ExifByteOrder</td> <td class=c>Y</td> <td class=c>File</td> <td><span class=s><span class=n>(represents the byte order of EXIF information. May be written to set the byte order only for newly created EXIF segments)</span> <br>&#39;II&#39; = Little-endian (Intel, II) <br>&#39;MM&#39; = Big-endian (Motorola, MM)</span></td></tr> <tr class=b> <td>ExifToolVersion</td> <td class=c>N</td> <td class=c>ExifTool</td> <td><span class=s><span class=n>(the version of ExifTool currently running)</span></span></td></tr> <tr> <td>ExifUnicodeByteOrder</td> <td class=c>Y</td> <td class=c>-</td> <td><span class=s><span class=n>(specifies the byte order to use when writing EXIF Unicode text. The EXIF specification is particularly vague about this byte ordering, and different applications use different conventions. By default ExifTool writes Unicode text in EXIF byte order, but this write-only tag may be used to force a specific order)</span> <br>&#39;II&#39; = Little-endian (Intel, II) <br>&#39;MM&#39; = Big-endian (Motorola, MM)</span></td></tr> <tr class=b> <td>FileAccessDate</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(the date/time of last access of the file. Note that this access time is updated whenever any software, including ExifTool, reads the file)</span></span></td></tr> <tr> <td>FileAttributes</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(extracted only if specifically requested or the SystemTags or RequestAll API option is set. 2 or 3 values: 0. File type, 1. Attribute bits, 2. Windows attribute bits if Win32API::File is available)</span> <br>[Value 0]</span><table class=cols><tr> <td>0x0 = Unknown <br>0x1000 = FIFO <br>0x2000 = Character <br>0x3000 = Mux Character <br>0x4000 = Directory <br>0x5000 = XENIX Named <br>0x6000 = Block <br>0x7000 = Mux Block</td><td>&nbsp;&nbsp;</td> <td>0x8000 = Regular <br>0x9000 = VxFS Compressed <br>0xa000 = Symbolic Link <br>0xb000 = Solaris Shadow Inode <br>0xc000 = Socket <br>0xd000 = Solaris Door <br>0xe000 = BSD Whiteout</td></tr></table> <span class=s>[Value 1]</span><table class=cols><tr> <td>Bit 9 = Sticky <br>Bit 10 = Set Group ID</td><td>&nbsp;&nbsp;</td> <td>Bit 11 = Set User ID</td></tr></table> <span class=s>[Value 2]</span><table class=cols><tr> <td>Bit 0 = Read Only <br>Bit 1 = Hidden <br>Bit 2 = System <br>Bit 3 = Volume Label <br>Bit 4 = Directory <br>Bit 5 = Archive <br>Bit 6 = Device <br>Bit 7 = Normal</td><td>&nbsp;&nbsp;</td> <td>Bit 8 = Temporary <br>Bit 9 = Sparse File <br>Bit 10 = Reparse Point <br>Bit 11 = Compressed <br>Bit 12 = Offline <br>Bit 13 = Not Content Indexed <br>Bit 14 = Encrypted</td></tr></table> </td></tr> <tr class=b> <td>FileBlockCount</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(extracted only if specifically requested or the SystemTags or RequestAll API option is set)</span></span></td></tr> <tr> <td>FileBlockSize</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(extracted only if specifically requested or the SystemTags or RequestAll API option is set)</span></span></td></tr> <tr class=b> <td>FileCreateDate</td> <td class=c title=' ! = Unsafe'>Y!</td> <td class=c>System</td> <td><span class=s><span class=n>(the filesystem creation date/time. Windows only. Requires Win32API::File and Win32::API for writing. Note that although ExifTool does not currently support FileCreateDate on other systems, the OS X file creation date may be accessed via the MDItemFSCreationDate tag when the MDItemTags API option is set, and may be written indirectly via the FileModifyDate tag by following these steps: 1. Rewrite the file to set the filesystem creation and modification times to the current time, 2. Set FileModifyDate to the desired creation time, then 3. Restore FileModifyDate to its original value)</span></span></td></tr> <tr> <td>FileDeviceID</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(extracted only if specifically requested or the SystemTags or RequestAll API option is set)</span></span></td></tr> <tr class=b> <td>FileDeviceNumber</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(extracted only if specifically requested or the SystemTags or RequestAll API option is set)</span></span></td></tr> <tr> <td>FileGroupID</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(extracted only if specifically requested or the SystemTags or RequestAll API option is set)</span></span></td></tr> <tr class=b> <td>FileHardLinks</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(extracted only if specifically requested or the SystemTags or RequestAll API option is set)</span></span></td></tr> <tr> <td>FileInodeChangeDate</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(the date/time when the file&#39;s directory information was last changed. Non-Windows systems only)</span></span></td></tr> <tr class=b> <td>FileInodeNumber</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(extracted only if specifically requested or the SystemTags or RequestAll API option is set)</span></span></td></tr> <tr> <td>FileModifyDate</td> <td class=c title=' ! = Unsafe'>Y!</td> <td class=c>System</td> <td><span class=s><span class=n>(the filesystem modification date/time. Note that ExifTool may not be able to handle filesystem dates before 1970 depending on the limitations of the system&#39;s standard libraries)</span></span></td></tr> <tr class=b> <td>FileName</td> <td class=c title=' ! = Unsafe'>Y!</td> <td class=c>System</td> <td><span class=s><span class=n>(may be written with a full path name to set FileName and Directory in one operation. This is such a powerful feature that a TestName tag is provided to allow dry-run tests before actually writing the file name. See <a href="../filename.html">filename.html</a> for more information on writing the FileName, Directory and TestName tags)</span></span></td></tr> <tr> <td>FilePath</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(absolute path of source file. Not generated unless specifically requested or the RequestAll API option is set)</span></span></td></tr> <tr class=b> <td>FilePermissions</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(r=read, w=write and x=execute permissions for the file owner, group and others. The ValueConv value is an octal number so bit test operations on this value should be done in octal, eg. &#39;oct($filePermissions#) &amp; 0200&#39;)</span></span></td></tr> <tr> <td>FileSequence</td> <td class=c>N</td> <td class=c>ExifTool</td> <td><span class=s><span class=n>(sequence number for each source file when extracting or copying information, including files that fail the -if condition of the command-line application, beginning at 0 for the first file. Not generated unless specifically requested or the RequestAll API option is set)</span></span></td></tr> <tr class=b> <td>FileSize</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(note that the print conversion for this tag uses historic prefixes: 1 kB = 1024 bytes, etc.)</span></span></td></tr> <tr> <td>FileType</td> <td class=c>N</td> <td class=c>File</td> <td><span class=s><span class=n>(a short description of the file type. For many file types this is the just the uppercase file extension)</span></span></td></tr> <tr class=b> <td>FileTypeExtension</td> <td class=c>N</td> <td class=c>File</td> <td><span class=s><span class=n>(a common lowercase extension for this file type, or uppercase with the -n option)</span></span></td></tr> <tr> <td>FileUserID</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(extracted only if specifically requested or the SystemTags or RequestAll API option is set)</span></span></td></tr> <tr class=b> <td>Geosync</td> <td class=c>Y</td> <td class=c>-</td> <td><span class=s><span class=n>(this write-only tag specifies a time difference to add to Geotime for synchronization with the GPS clock. For example, set this to &quot;-12&quot; if the camera clock is 12 seconds faster than GPS time. Input format is &quot;[+-][[[DD ]HH:]MM:]SS[.ss]&quot;. Must be set before Geotime to be effective. Additional features allow calculation of time differences and time drifts, and extraction of synchronization times from image files. See the <a href="../geotag.html">geotagging documentation</a> for details)</span></span></td></tr> <tr> <td>Geotag</td> <td class=c>Y</td> <td class=c>-</td> <td><span class=s><span class=n>(this write-only tag is used to define the GPS track log data or track log file name. Currently supported track log formats are GPX, NMEA RMC/GGA/GLL, KML, IGC, Garmin XML and TCX, Magellan PMGNTRK, Honeywell PTNTHPR, Winplus Beacon text, and Bramor gEO log files. See <a href="../geotag.html">geotag.html</a> for details)</span></span></td></tr> <tr class=b> <td>Geotime</td> <td class=c>Y</td> <td class=c>-</td> <td><span class=s><span class=n>(this write-only tag is used to define a date/time for interpolating a position in the GPS track specified by the Geotag tag. Writing this tag causes GPS information to be written into the EXIF or XMP of the target files. The local system timezone is assumed if the date/time value does not contain a timezone. May be deleted to delete associated GPS tags. A group name of &#39;EXIF&#39; or &#39;XMP&#39; may be specified to write or delete only EXIF or XMP GPS tags. The Geotag tag must be assigned before this tag)</span></span></td></tr> <tr> <td>HardLink</td> <td class=c title=' ! = Unsafe'>Y!</td> <td class=c>-</td> <td><span class=s><span class=n>(this write-only tag is used to create a hard link to the file. If the file is edited, copied, renamed or moved in the same operation as writing HardLink, then the link is made to the updated file. Note that subsequent editing of either the linked file or the original by the exiftool application will break the link unless the -overwrite_original_in_place option is used)</span></span></td></tr> <tr class=b> <td>ICC_Profile</td> <td class=c title=' ! = Unsafe'>Y!</td> <td class=c>ICC_Profile</td> <td><span class=s><span class=n>(the full ICC_Profile data block)</span></span></td></tr> <tr> <td>ID3Size</td> <td class=c>N</td> <td class=c>File</td> <td><span class=s><span class=n>(size of the ID3 data block)</span></span></td></tr> <tr class=b> <td>IPTC</td> <td class=c title=' ! = Unsafe'>Y!</td> <td class=c>IPTC</td> <td><span class=s><span class=n>(the full IPTC data block)</span></span></td></tr> <tr> <td>ImageHeight</td> <td class=c>N</td> <td class=c>File</td> <td><span class=s><span class=n>(the height of the image in number of pixels)</span></span></td></tr> <tr class=b> <td>ImageWidth</td> <td class=c>N</td> <td class=c>File</td> <td><span class=s><span class=n>(the width of the image in number of pixels)</span></span></td></tr> <tr> <td>JPEGDigest</td> <td class=c>N</td> <td class=c>File</td> <td><span class=s><span class=n>(an MD5 digest of the JPEG quantization tables is combined with the component sub-sampling values to generate the value of this tag. The result is compared to known values in an attempt to deduce the originating software based only on the JPEG image data. For performance reasons, this tag is generated only if specifically requested)</span></span></td></tr> <tr class=b> <td>JPEGQualityEstimate</td> <td class=c>N</td> <td class=c>File</td> <td><span class=s><span class=n>(an estimate of the IJG JPEG quality setting for the image, calculated from the quantization tables. For performance reasons, this tag is generated only if specifically requested)</span></span></td></tr> <tr> <td>MDItemTags</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(not a real tag. On OS X, a whole range of system-specific metadata tags with names starting with &quot;MDItem&quot; may be extracted if specifically requested, or if the MDItemTags API option is set. Requires that the &quot;mdls&quot; utility is available)</span></span></td></tr> <tr class=b> <td>MIMEType</td> <td class=c>N</td> <td class=c>File</td> <td><span class=s><span class=n>(the MIME type of the source file)</span></span></td></tr> <tr> <td>MaxVal</td> <td class=c>N</td> <td class=c>File</td> <td><span class=s><span class=n>(maximum pixel value in PPM or PGM image)</span></span></td></tr> <tr class=b> <td>NewGUID</td> <td class=c>N</td> <td class=c>ExifTool</td> <td><span class=s><span class=n>(generates a new, random GUID with format YYYYmmdd-HHMM-SSNN-PPPP-RRRRRRRRRRRR, where Y=year, m=month, d=day, H=hour, M=minute, S=second, N=file sequence number in hex, P=process ID in hex, and R=random hex number; without dashes with the -n option. Not generated unless specifically requested or the RequestAll API option is set)</span></span></td></tr> <tr> <td>Now</td> <td class=c>N</td> <td class=c>ExifTool</td> <td><span class=s><span class=n>(the current date/time. Useful when setting the tag values, eg. <code>&quot;-modifydate&lt;now&quot;</code>. Not generated unless specifically requested or the RequestAll API option is set)</span></span></td></tr> <tr class=b> <td>PreviewImage</td> <td class=c>Y</td> <td class=c>File</td> <td><span class=s><span class=n>(JPEG-format embedded preview image)</span></span></td></tr> <tr> <td>PreviewPNG</td> <td class=c>N</td> <td class=c>File</td> <td><span class=s><span class=n>(PNG-format embedded preview image)</span></span></td></tr> <tr class=b> <td>PreviewWMF</td> <td class=c>N</td> <td class=c>File</td> <td><span class=s><span class=n>(WMF-format embedded preview image)</span></span></td></tr> <tr> <td>ProcessingTime</td> <td class=c>N</td> <td class=c>ExifTool</td> <td><span class=s><span class=n>(the clock time in seconds taken by ExifTool to extract information from this file. Not generated unless specifically requested or the RequestAll API option is set. Requires Time::HiRes)</span></span></td></tr> <tr class=b> <td>RAFVersion</td> <td class=c>N</td> <td class=c>File</td> <td><span class=s><span class=n>(RAF file version number)</span></span></td></tr> <tr> <td>ResourceForkSize</td> <td class=c>N</td> <td class=c>System</td> <td><span class=s><span class=n>(size of the file&#39;s resource fork if it contains data. Mac OS only. If this tag is generated the ExtractEmbedded option may be used to extract resource-fork information as a sub-document. When writing, the resource fork is preserved by default, but it may be deleted with <code>-rsrc:all=</code> on the command line)</span></span></td></tr> <tr class=b> <td>TestName</td> <td class=c>Y</td> <td class=c>-</td> <td><span class=s><span class=n>(this write-only tag may be used instead of FileName for dry-run tests of the file renaming feature. Writing this tag prints the old and new file names to the console, but does not affect the file itself)</span></span></td></tr> <tr> <td>Warning</td> <td class=c>N</td> <td class=c>ExifTool</td> <td><span class=s><span class=n>(returns warnings that may have occurred while reading or writing a file. Use the -a or Duplicates option to see all warnings if more than one occurred. Minor warnings may be ignored with the -m or IgnoreMinorErrors option. Minor warnings with a capital &quot;M&quot; in the &quot;[Minor]&quot; designation indicate that the processing is affected by ignoring the warning)</span></span></td></tr> <tr class=b> <td>XMP</td> <td class=c title=' ! = Unsafe'>Y!</td> <td class=c>XMP</td> <td><span class=s><span class=n>(the XMP data block, but note that extended XMP in JPEG images may be split into multiple blocks)</span></span></td></tr> <tr> <td>XResolution</td> <td class=c>N</td> <td class=c>File</td> <td><span class=s><span class=n>(the horizontal pixel resolution)</span></span></td></tr> <tr class=b> <td>YResolution</td> <td class=c>N</td> <td class=c>File</td> <td><span class=s><span class=n>(the vertical pixel resolution)</span></span></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 11, 2016</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/FLAC.html��������������������������������������������������������000644 �000765 �000024 �00000010732 12527350231 020424� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>FLAC Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>FLAC Tags</h2> <p>Free Lossless Audio Codec (FLAC) meta information. ExifTool also extracts ID3 information from these files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>StreamInfo</td> <td class=c>-</td> <td>--&gt; <a href='FLAC.html#StreamInfo'>FLAC StreamInfo Tags</a></td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>Padding?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>Application?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>SeekTable?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>VorbisComment</td> <td class=c>-</td> <td>--&gt; <a href='Vorbis.html#Comments'>Vorbis Comments Tags</a></td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>CueSheet?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0006 = 6'>0x0006</td> <td>Picture</td> <td class=c>-</td> <td>--&gt; <a href='FLAC.html#Picture'>FLAC Picture Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='StreamInfo'>FLAC StreamInfo Tags</a></h2> <p>FLAC is big-endian, so bit 0 is the high-order bit in this table.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Bit000-015'</td> <td>BlockSizeMin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Bit016-031'</td> <td>BlockSizeMax</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Bit032-055'</td> <td>FrameSizeMin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Bit056-079'</td> <td>FrameSizeMax</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Bit080-099'</td> <td>SampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Bit100-102'</td> <td>Channels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Bit103-107'</td> <td>BitsPerSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Bit108-143'</td> <td>TotalSamples</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Picture'>FLAC Picture Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PictureType</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Other <br>1 = 32x32 PNG Icon <br>2 = Other Icon <br>3 = Front Cover <br>4 = Back Cover <br>5 = Leaflet <br>6 = Media <br>7 = Lead Artist <br>8 = Artist <br>9 = Conductor <br>10 = Band <br>11 = Composer <br>12 = Lyricist <br>13 = Recording Studio or Location <br>14 = Recording Session <br>15 = Performance <br>16 = Capture from Movie or Video <br>17 = Bright(ly) Colored Fish <br>18 = Illustration <br>19 = Band Logo <br>20 = Publisher Logo</td></tr></table> </td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>PictureMIMEType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>PictureDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>PictureWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>PictureHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>PictureBitsPerPixel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>PictureIndexedColors</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>PictureLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>Picture</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Nov 11, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������Image-ExifTool-10.10/html/TagNames/Flash.html�������������������������������������������������������000644 �000765 �000024 �00000023471 12547572571 020777� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Flash Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Flash Tags</h2> <p>The information below is extracted from SWF (Shockwave Flash) files. Tags with string ID&#39;s represent information extracted from the file header.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Compressed'</td> <td>Compressed</td> <td class=c>N</td> <td><span class=s>0 = False <br>1 = True</span></td></tr> <tr class=b> <td>'Duration'</td> <td>Duration</td> <td class=c>N</td> <td><span class=s><span class=n>(calculated from FrameRate and FrameCount)</span></span></td></tr> <tr> <td>'FlashVersion'</td> <td>FlashVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'FrameCount'</td> <td>FrameCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'FrameRate'</td> <td>FrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ImageHeight'</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ImageWidth'</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0045 = 69'>0x0045</td> <td>FlashAttributes</td> <td class=c>N</td> <td><span class=s>Bit 0 = UseNetwork <br>Bit 3 = ActionScript3 <br>Bit 4 = HasMetadata</span></td></tr> <tr> <td title='0x004d = 77'>0x004d</td> <td>XMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='FLV'>Flash FLV Tags</a></h2> <p>Information is extracted from the following packets in FLV (Flash Video) files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>Audio</td> <td class=c>-</td> <td>--&gt; <a href='Flash.html#Audio'>Flash Audio Tags</a></td></tr> <tr class=b> <td title='0x0009 = 9'>0x0009</td> <td>Video</td> <td class=c>-</td> <td>--&gt; <a href='Flash.html#Video'>Flash Video Tags</a></td></tr> <tr> <td title='0x0012 = 18'>0x0012</td> <td>Meta</td> <td class=c>-</td> <td>--&gt; <a href='Flash.html#Meta'>Flash Meta Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Audio'>Flash Audio Tags</a></h2> <p>Information extracted from the Flash Audio header.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Bit0-3'</td> <td>AudioEncoding</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = PCM-BE (uncompressed) <br>1 = ADPCM <br>2 = MP3 <br>3 = PCM-LE (uncompressed) <br>4 = Nellymoser 16kHz Mono <br>5 = Nellymoser 8kHz Mono <br>6 = Nellymoser <br>7 = G.711 A-law logarithmic PCM <br>8 = G.711 mu-law logarithmic PCM <br>10 = AAC <br>11 = Speex <br>13 = MP3 8-Khz <br>15 = Device-specific sound</td></tr></table> </td></tr> <tr class=b> <td>'Bit4-5'</td> <td>AudioSampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Bit6'</td> <td>AudioBitsPerSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Bit7'</td> <td>AudioChannels</td> <td class=c>N</td> <td><span class=s>1 = 1 (mono) <br>2 = 2 (stereo)</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Video'>Flash Video Tags</a></h2> <p>Information extracted from the Flash Video header.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Bit4-7'</td> <td>VideoEncoding</td> <td class=c>N</td> <td><table class=cols><tr> <td>1 = JPEG <br>2 = Sorensen H.263 <br>3 = Screen Video <br>4 = On2 VP6</td><td>&nbsp;&nbsp;</td> <td>5 = On2 VP6 Alpha <br>6 = Screen Video 2 <br>7 = H.264</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='Meta'>Flash Meta Tags</a></h2> <p>Below are a few observed FLV Meta tags, but ExifTool will attempt to extract information from any tag found.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'audiocodecid'</td> <td>AudioCodecID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'audiodatarate'</td> <td>AudioBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'audiodelay'</td> <td>AudioDelay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'audiosamplerate'</td> <td>AudioSampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'audiosamplesize'</td> <td>AudioSampleSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'audiosize'</td> <td>AudioSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'bytelength'</td> <td>ByteLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'canSeekToEnd'</td> <td>CanSeekToEnd</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'canseekontime'</td> <td>CanSeekOnTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'createdby'</td> <td>CreatedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'creationdate'</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'cuePoints'</td> <td>CuePoint</td> <td class=c>-</td> <td>--&gt; <a href='Flash.html#CuePoint'>Flash CuePoint Tags</a></td></tr> <tr> <td>'datasize'</td> <td>DataSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'duration'</td> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'filesize'</td> <td>FileSizeBytes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'framerate'</td> <td>FrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'hasAudio'</td> <td>HasAudio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'hasCuePoints'</td> <td>HasCuePoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'hasKeyframes'</td> <td>HasKeyFrames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'hasMetadata'</td> <td>HasMetadata</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'hasVideo'</td> <td>HasVideo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'height'</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'httphostheader'</td> <td>HTTPHostHeader</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'keyframesFilepositions'</td> <td>KeyFramePositions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'keyframesTimes'</td> <td>KeyFramesTimes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'lastkeyframetimestamp'</td> <td>LastKeyFrameTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'lasttimestamp'</td> <td>LastTimeStamp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'liveXML'</td> <td>XMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> <tr> <td>'metadatacreator'</td> <td>MetadataCreator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'metadatadate'</td> <td>MetadataDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pmsg'</td> <td>Message</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'purl'</td> <td>URL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'sourcedata'</td> <td>SourceData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'starttime'</td> <td>StartTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'stereo'</td> <td>Stereo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'totaldatarate'</td> <td>TotalDataRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'totalduration'</td> <td>TotalDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'videocodecid'</td> <td>VideoCodecID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'videodatarate'</td> <td>VideoBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'videosize'</td> <td>VideoSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'width'</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CuePoint'>Flash CuePoint Tags</a></h2> <p>These tag names are added to the CuePoint name to generate complete tag names like &quot;CuePoint0Name&quot;.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'name'</td> <td>Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'parameters'</td> <td>Parameter</td> <td class=c>-</td> <td>--&gt; <a href='Flash.html#Parameter'>Flash Parameter Tags</a></td></tr> <tr> <td>'time'</td> <td>Time</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'type'</td> <td>Type</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Parameter'>Flash Parameter Tags</a></h2> <p>There are no pre-defined parameter tags, but ExifTool will extract any existing parameters, with tag names like &quot;CuePoint0ParameterXxx&quot;.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jul 9, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/FlashPix.html����������������������������������������������������000644 �000765 �000024 �00000117177 12527350232 021451� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>FlashPix Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>FlashPix Tags</h2> <p>The FlashPix file format, introduced in 1996, was developed by Kodak, Hewlett-Packard and Microsoft. Internally the FPX file structure mimics that of an old DOS disk with fixed-sized &quot;sectors&quot; (usually 512 bytes) and a &quot;file allocation table&quot; (FAT). No wonder this image format never became popular. However, some of the structures used in FlashPix streams are part of the EXIF specification, and are still being used in the APP2 FPXR segment of JPEG images by some digital cameras from manufacturers such as FujiFilm, Hewlett-Packard, Kodak and Sanyo.</p> <p>ExifTool extracts FlashPix information from both FPX images and the APP2 FPXR segment of JPEG images. As well, FlashPix information is extracted from DOC, PPT, XLS (Microsoft Word, PowerPoint and Excel) documents, VSD (Microsoft Visio) drawings, and FLA (Macromedia/Adobe Flash project) files since these are based on the same file format as FlashPix (the Windows Compound Binary File format). See <a href="http://graphcomp.com/info/specs/livepicture/fpx.pdf">http://graphcomp.com/info/specs/livepicture/fpx.pdf</a> for the FlashPix specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>"\x01CompObj"</td> <td>CompObj</td> <td class=c>-</td> <td>--&gt; <a href='FlashPix.html#CompObj'>FlashPix CompObj Tags</a></td></tr> <tr class=b> <td>"\x05Audio Info"</td> <td>AudioInfo</td> <td class=c>-</td> <td>--&gt; <a href='FlashPix.html#AudioInfo'>FlashPix AudioInfo Tags</a></td></tr> <tr> <td>"\x05Data Object"</td> <td>DataObject</td> <td class=c>-</td> <td>--&gt; <a href='FlashPix.html#DataObject'>FlashPix DataObject Tags</a></td></tr> <tr class=b> <td>"\x05DocumentSummaryInformation"</td> <td>DocumentInfo</td> <td class=c>-</td> <td>--&gt; <a href='FlashPix.html#DocumentInfo'>FlashPix DocumentInfo Tags</a></td></tr> <tr> <td>"\x05Extension List"</td> <td>Extensions</td> <td class=c>-</td> <td>--&gt; <a href='FlashPix.html#Extensions'>FlashPix Extensions Tags</a></td></tr> <tr class=b> <td>"\x05Global Info"</td> <td>GlobalInfo</td> <td class=c>-</td> <td>--&gt; <a href='FlashPix.html#GlobalInfo'>FlashPix GlobalInfo Tags</a></td></tr> <tr> <td>"\x05Image Contents"</td> <td>Image</td> <td class=c>-</td> <td>--&gt; <a href='FlashPix.html#Image'>FlashPix Image Tags</a></td></tr> <tr class=b> <td>"\x05Image Info"</td> <td>ImageInfo</td> <td class=c>-</td> <td>--&gt; <a href='FlashPix.html#ImageInfo'>FlashPix ImageInfo Tags</a></td></tr> <tr> <td>"\x05Operation"</td> <td>Operation</td> <td class=c>-</td> <td>--&gt; <a href='FlashPix.html#Operation'>FlashPix Operation Tags</a></td></tr> <tr class=b> <td>"\x05Screen Nail"</td> <td>ScreenNail</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"\x05SummaryInformation"</td> <td>SummaryInfo</td> <td class=c>-</td> <td>--&gt; <a href='FlashPix.html#SummaryInfo'>FlashPix SummaryInfo Tags</a></td></tr> <tr class=b> <td>"\x05Transform"</td> <td>Transform</td> <td class=c>-</td> <td>--&gt; <a href='FlashPix.html#Transform'>FlashPix Transform Tags</a></td></tr> <tr> <td>'Audio Stream'</td> <td>AudioStream</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Contents'</td> <td>Contents</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a> <br><span class='n s'>(found in FLA files; may contain XMP)</span></td></tr> <tr> <td>'Current User'</td> <td>CurrentUser</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ICC Profile 0001'</td> <td>ICC_Profile</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> <tr> <td>'Preview'</td> <td>PreviewImage</td> <td class=c>N</td> <td><span class=s><span class=n>(written by some FujiFilm models)</span></span></td></tr> <tr class=b> <td>'Property'</td> <td>PreviewInfo</td> <td class=c>-</td> <td>--&gt; <a href='FlashPix.html#PreviewInfo'>FlashPix PreviewInfo Tags</a></td></tr> <tr> <td>'Subimage 0000 Header'</td> <td>SubimageHdr</td> <td class=c>-</td> <td>--&gt; <a href='FlashPix.html#SubimageHdr'>FlashPix SubimageHdr Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CompObj'>FlashPix CompObj Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>CompObjUserTypeLen</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>CompObjUserType</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AudioInfo'>FlashPix AudioInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='DataObject'>FlashPix DataObject Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x10000 = 65536'>0x10000</td> <td>DataObjectID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10002 = 65538'>0x10002</td> <td>LockedPropertyList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10003 = 65539'>0x10003</td> <td>DataObjectTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10004 = 65540'>0x10004</td> <td>LastModifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10005 = 65541'>0x10005</td> <td>RevisionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10006 = 65542'>0x10006</td> <td>DataCreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10007 = 65543'>0x10007</td> <td>DataModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10008 = 65544'>0x10008</td> <td>CreatingApplication</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10100 = 65792'>0x10100</td> <td>DataObjectStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10101 = 65793'>0x10101</td> <td>CreatingTransform</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10102 = 65794'>0x10102</td> <td>UsingTransforms</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10000000 = 268435456'>0x10000000</td> <td>CachedImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10000001 = 268435457'>0x10000001</td> <td>CachedImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='DocumentInfo'>FlashPix DocumentInfo Tags</a></h2> <p>The DocumentSummaryInformation property set includes a UserDefined property set for which only the Hyperlinks and HyperlinkBase tags are pre-defined. However, ExifTool will also extract any other information found in the UserDefined properties.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>Category</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>PresentationTarget</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>Bytes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>Lines</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0006 = 6'>0x0006</td> <td>Paragraphs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0007 = 7'>0x0007</td> <td>Slides</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>Notes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0009 = 9'>0x0009</td> <td>HiddenSlides</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000a = 10'>0x000a</td> <td>MMClips</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000b = 11'>0x000b</td> <td>ScaleCrop</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td title='0x000c = 12'>0x000c</td> <td>HeadingPairs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000d = 13'>0x000d</td> <td>TitleOfParts</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000e = 14'>0x000e</td> <td>Manager</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000f = 15'>0x000f</td> <td>Company</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>LinksUpToDate</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td title='0x0011 = 17'>0x0011</td> <td>CharCountWithSpaces</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0013 = 19'>0x0013</td> <td>SharedDoc</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td title='0x0016 = 22'>0x0016</td> <td>HyperlinksChanged</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td title='0x0017 = 23'>0x0017</td> <td>AppVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'_PID_HLINKS'</td> <td>Hyperlinks</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'_PID_LINKBASE'</td> <td>HyperlinkBase</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Extensions'>FlashPix Extensions Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>ExtensionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>ExtensionClassID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>ExtensionPersistence</td> <td class=c>N</td> <td><span class=s>0 = Always Valid <br>1 = Invalidated By Modification <br>2 = Potentially Invalidated By Modification</span></td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>ExtensionCreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>ExtensionModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0006 = 6'>0x0006</td> <td>CreatingApplication</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0007 = 7'>0x0007</td> <td>ExtensionDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1000 = 4096'>0x1000</td> <td>Storage-StreamPathname</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2000 = 8192'>0x2000</td> <td>FlashPixStreamPathname</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2001 = 8193'>0x2001</td> <td>FlashPixStreamFieldOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x3000 = 12288'>0x3000</td> <td>PropertySetPathname</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3001 = 12289'>0x3001</td> <td>PropertySetIDCodes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x3002 = 12290'>0x3002</td> <td>PropertyVectorElements</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x4000 = 16384'>0x4000</td> <td>SubimageResolutions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10000000 = 268435456'>0x10000000</td> <td>UsedExtensionNumbers</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='GlobalInfo'>FlashPix GlobalInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x10002 = 65538'>0x10002</td> <td>LockedPropertyList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10003 = 65539'>0x10003</td> <td>TransformedImageTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10004 = 65540'>0x10004</td> <td>LastModifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10100 = 65792'>0x10100</td> <td>VisibleOutputs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10101 = 65793'>0x10101</td> <td>MaximumImageIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10102 = 65794'>0x10102</td> <td>MaximumTransformIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10103 = 65795'>0x10103</td> <td>MaximumOperationIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Image'>FlashPix Image Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x1000000 = 16777216'>0x1000000</td> <td>NumberOfResolutions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1000002 = 16777218'>0x1000002</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1000003 = 16777219'>0x1000003</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1000004 = 16777220'>0x1000004</td> <td>DefaultDisplayHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1000005 = 16777221'>0x1000005</td> <td>DefaultDisplayWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1000006 = 16777222'>0x1000006</td> <td>DisplayUnits</td> <td class=c>N</td> <td><span class=s>0 = inches <br>1 = meters <br>2 = cm <br>3 = mm</span></td></tr> <tr> <td title='0x2000000 = 33554432'>0x2000000</td> <td>SubimageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2000001 = 33554433'>0x2000001</td> <td>SubimageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2000002 = 33554434'>0x2000002</td> <td>SubimageColor</td> <td class=c>N</td> <td><table class=cols><tr> <td>&#39;01 0000&#39; = Opacity Only <br>&#39;01 0001&#39; = Monochrome <br>&#39;01 8000&#39; = Opacity Only (uncalibrated) <br>&#39;01 8001&#39; = Monochrome (uncalibrated) <br>&#39;03 0002&#39; = YCbCr <br>&#39;03 0003&#39; = RGB <br>&#39;03 8002&#39; = YCbCr (uncalibrated) <br>&#39;03 8003&#39; = RGB (uncalibrated) <br>&#39;04 0002&#39; = YCbCr with Opacity <br>&#39;04 0003&#39; = RGB with Opacity <br>&#39;04 8002&#39; = YCbCr with Opacity (uncalibrated) <br>&#39;04 8003&#39; = RGB with Opacity (uncalibrated)</td></tr></table> </td></tr> <tr class=b> <td title='0x2000003 = 33554435'>0x2000003</td> <td>SubimageNumericalFormat</td> <td class=c>N</td> <td><span class=s>17 = 8-bit, Unsigned <br>18 = 16-bit, Unsigned <br>19 = 32-bit, Unsigned</span></td></tr> <tr> <td title='0x2000004 = 33554436'>0x2000004</td> <td>DecimationMethod</td> <td class=c>N</td> <td><span class=s>0 = None (Full-sized Image) <br>8 = 8-point Prefilter</span></td></tr> <tr class=b> <td title='0x2000005 = 33554437'>0x2000005</td> <td>DecimationPrefilterWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2000007 = 33554439'>0x2000007</td> <td>SubimageICC_Profile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3000001 = 50331649'>0x3000001</td> <td>JPEGTables</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x3000002 = 50331650'>0x3000002</td> <td>MaxJPEGTableIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ImageInfo'>FlashPix ImageInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x21000000 = 553648128'>0x21000000</td> <td>FileSource</td> <td class=c>N</td> <td><span class=s>1 = Film Scanner <br>2 = Reflection Print Scanner <br>3 = Digital Camera <br>4 = Video Capture <br>5 = Computer Graphics</span></td></tr> <tr class=b> <td title='0x21000001 = 553648129'>0x21000001</td> <td>SceneType</td> <td class=c>N</td> <td><span class=s>1 = Original Scene <br>2 = Second Generation Scene <br>3 = Digital Scene Generation</span></td></tr> <tr> <td title='0x21000002 = 553648130'>0x21000002</td> <td>CreationPathVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x21000003 = 553648131'>0x21000003</td> <td>SoftwareRelease</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x21000004 = 553648132'>0x21000004</td> <td>UserDefinedID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x21000005 = 553648133'>0x21000005</td> <td>SharpnessApproximation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x22000000 = 570425344'>0x22000000</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x22000001 = 570425345'>0x22000001</td> <td>OriginalImageBroker</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x22000002 = 570425346'>0x22000002</td> <td>DigitalImageBroker</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x22000003 = 570425347'>0x22000003</td> <td>Authorship</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x22000004 = 570425348'>0x22000004</td> <td>IntellectualPropertyNotes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x23000000 = 587202560'>0x23000000</td> <td>TestTarget</td> <td class=c>N</td> <td><table class=cols><tr> <td>1 = Color Chart <br>2 = Gray Card <br>3 = Grayscale <br>4 = Resolution Chart</td><td>&nbsp;&nbsp;</td> <td>5 = Inch Scale <br>6 = Centimeter Scale <br>7 = Millimeter Scale <br>8 = Micrometer Scale</td></tr></table> </td></tr> <tr> <td title='0x23000002 = 587202562'>0x23000002</td> <td>GroupCaption</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x23000003 = 587202563'>0x23000003</td> <td>CaptionText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x23000004 = 587202564'>0x23000004</td> <td>People</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x23000007 = 587202567'>0x23000007</td> <td>Things</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2300000a = 587202570'>0x2300000a</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2300000b = 587202571'>0x2300000b</td> <td>Events</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2300000c = 587202572'>0x2300000c</td> <td>Places</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2300000f = 587202575'>0x2300000f</td> <td>ContentDescriptionNotes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x24000000 = 603979776'>0x24000000</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x24000001 = 603979777'>0x24000001</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x24000002 = 603979778'>0x24000002</td> <td>SerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x25000000 = 620756992'>0x25000000</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x25000001 = 620756993'>0x25000001</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x25000002 = 620756994'>0x25000002</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x25000003 = 620756995'>0x25000003</td> <td>ExposureProgram</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Not Defined <br>1 = Manual <br>2 = Program AE <br>3 = Aperture-priority AE <br>4 = Shutter speed priority AE <br>5 = Creative (Slow speed) <br>6 = Action (High speed) <br>7 = Portrait <br>8 = Landscape <br>9 = Bulb</td></tr></table> </td></tr> <tr class=b> <td title='0x25000004 = 620756996'>0x25000004</td> <td>BrightnessValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x25000005 = 620756997'>0x25000005</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x25000006 = 620756998'>0x25000006</td> <td>SubjectDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x25000007 = 620756999'>0x25000007</td> <td>MeteringMode</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Unknown <br>1 = Average <br>2 = Center-weighted average <br>3 = Spot <br>4 = Multi-spot <br>5 = Multi-segment <br>6 = Partial <br>255 = Other</td></tr></table> </td></tr> <tr class=b> <td title='0x25000008 = 620757000'>0x25000008</td> <td>LightSource</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Unknown <br>1 = Daylight <br>2 = Fluorescent <br>3 = Tungsten (Incandescent) <br>4 = Flash <br>9 = Fine Weather <br>10 = Cloudy <br>11 = Shade <br>12 = Daylight Fluorescent <br>13 = Day White Fluorescent <br>14 = Cool White Fluorescent <br>15 = White Fluorescent <br>16 = Warm White Fluorescent <br>17 = Standard Light A <br>18 = Standard Light B <br>19 = Standard Light C <br>20 = D55 <br>21 = D65 <br>22 = D75 <br>23 = D50 <br>24 = ISO Studio Tungsten <br>255 = Other</td></tr></table> </td></tr> <tr> <td title='0x25000009 = 620757001'>0x25000009</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2500000a = 620757002'>0x2500000a</td> <td>MaxApertureValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2500000b = 620757003'>0x2500000b</td> <td>Flash</td> <td class=c>N</td> <td><span class=s>1 = No Flash <br>2 = Flash Fired</span></td></tr> <tr class=b> <td title='0x2500000c = 620757004'>0x2500000c</td> <td>FlashEnergy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2500000d = 620757005'>0x2500000d</td> <td>FlashReturn</td> <td class=c>N</td> <td><span class=s>1 = Subject Outside Flash Range <br>2 = Subject Inside Flash Range</span></td></tr> <tr class=b> <td title='0x2500000e = 620757006'>0x2500000e</td> <td>BackLight</td> <td class=c>N</td> <td><span class=s>1 = Front Lit <br>2 = Back Lit 1 <br>3 = Back Lit 2</span></td></tr> <tr> <td title='0x2500000f = 620757007'>0x2500000f</td> <td>SubjectLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x25000010 = 620757008'>0x25000010</td> <td>ExposureIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x25000011 = 620757009'>0x25000011</td> <td>SpecialEffectsOpticalFilter</td> <td class=c>N</td> <td><table class=cols><tr> <td>1 = None <br>2 = Colored <br>3 = Diffusion <br>4 = Multi-image</td><td>&nbsp;&nbsp;</td> <td>5 = Polarizing <br>6 = Split-field <br>7 = Star</td></tr></table> </td></tr> <tr class=b> <td title='0x25000012 = 620757010'>0x25000012</td> <td>PerPictureNotes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x26000000 = 637534208'>0x26000000</td> <td>SensingMethod</td> <td class=c>N</td> <td><table class=cols><tr> <td>1 = Monochrome area <br>2 = One-chip color area <br>3 = Two-chip color area <br>4 = Three-chip color area <br>5 = Color sequential area <br>6 = Monochrome linear <br>7 = Trilinear <br>8 = Color sequential linear</td></tr></table> </td></tr> <tr class=b> <td title='0x26000001 = 637534209'>0x26000001</td> <td>FocalPlaneXResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x26000002 = 637534210'>0x26000002</td> <td>FocalPlaneYResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x26000003 = 637534211'>0x26000003</td> <td>FocalPlaneResolutionUnit</td> <td class=c>N</td> <td><span class=s>1 = None <br>2 = inches <br>3 = cm <br>4 = mm <br>5 = um</span></td></tr> <tr> <td title='0x26000004 = 637534212'>0x26000004</td> <td>SpatialFrequencyResponse</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x26000005 = 637534213'>0x26000005</td> <td>CFAPattern</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x26000007 = 637534215'>0x26000007</td> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x26000008 = 637534216'>0x26000008</td> <td>Opto-ElectricConvFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x27000000 = 654311424'>0x27000000</td> <td>FilmBrand</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x27000001 = 654311425'>0x27000001</td> <td>FilmCategory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x27000002 = 654311426'>0x27000002</td> <td>FilmSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x27000003 = 654311427'>0x27000003</td> <td>FilmRollNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x27000004 = 654311428'>0x27000004</td> <td>FilmFrameNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x28000000 = 671088640'>0x28000000</td> <td>ScannerMake</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x28000001 = 671088641'>0x28000001</td> <td>ScannerModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x28000002 = 671088642'>0x28000002</td> <td>ScannerSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x28000003 = 671088643'>0x28000003</td> <td>ScanSoftware</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x28000004 = 671088644'>0x28000004</td> <td>ScanSoftwareRevisionDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x28000005 = 671088645'>0x28000005</td> <td>ServiceOrganizationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x28000006 = 671088646'>0x28000006</td> <td>ScanOperatorID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x28000008 = 671088648'>0x28000008</td> <td>ScanDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x28000009 = 671088649'>0x28000009</td> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2800000a = 671088650'>0x2800000a</td> <td>ScannerPixelSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x29000000 = 687865856'>0x29000000</td> <td>OriginalScannedImageSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x29000001 = 687865857'>0x29000001</td> <td>OriginalDocumentSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x29000002 = 687865858'>0x29000002</td> <td>OriginalMedium</td> <td class=c>N</td> <td><span class=s>1 = Continuous Tone Image <br>2 = Halftone Image <br>3 = Line Art</span></td></tr> <tr> <td title='0x29000003 = 687865859'>0x29000003</td> <td>TypeOfOriginal</td> <td class=c>N</td> <td><span class=s>1 = B&amp;W Print <br>2 = Color Print <br>3 = B&amp;W Document <br>4 = Color Document</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Operation'>FlashPix Operation Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x10000 = 65536'>0x10000</td> <td>OperationID</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SummaryInfo'>FlashPix SummaryInfo Tags</a></h2> <p>The Dictionary, CodePage and LocalIndicator tags are common to all FlashPix property tables, even though they are only listed in the SummaryInfo table.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>Dictionary</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>CodePage</td> <td class=c>N</td> <td><span class=s>31 = IBM EBCDIC US-Canada <br>437 = DOS United States <br>500 = IBM EBCDIC International <br>708 = Arabic (ASMO 708) <br>709 = Arabic (ASMO-449+, BCON V4) <br>710 = Arabic - Transparent Arabic <br>720 = DOS Arabic (Transparent ASMO) <br>737 = DOS Greek (formerly 437G) <br>775 = DOS Baltic <br>850 = DOS Latin 1 (Western European) <br>852 = DOS Latin 2 (Central European) <br>855 = DOS Cyrillic (primarily Russian) <br>857 = DOS Turkish <br>858 = DOS Multilingual Latin 1 with Euro <br>860 = DOS Portuguese <br>861 = DOS Icelandic <br>862 = DOS Hebrew <br>863 = DOS French Canadian <br>864 = DOS Arabic <br>865 = DOS Nordic <br>866 = DOS Russian (Cyrillic) <br>869 = DOS Modern Greek <br>870 = IBM EBCDIC Multilingual/ROECE (Latin 2) <br>874 = Windows Thai (same as 28605, ISO 8859-15) <br>875 = IBM EBCDIC Greek Modern <br>932 = Windows Japanese (Shift-JIS) <br>936 = Windows Simplified Chinese (PRC, Singapore) <br>949 = Windows Korean (Unified Hangul Code) <br>950 = Windows Traditional Chinese (Taiwan) <br>1026 = IBM EBCDIC Turkish (Latin 5) <br>1047 = IBM EBCDIC Latin 1/Open System <br>1140 = IBM EBCDIC US-Canada with Euro <br>1141 = IBM EBCDIC Germany with Euro <br>1142 = IBM EBCDIC Denmark-Norway with Euro <br>1143 = IBM EBCDIC Finland-Sweden with Euro <br>1144 = IBM EBCDIC Italy with Euro <br>1145 = IBM EBCDIC Latin America-Spain with Euro <br>1146 = IBM EBCDIC United Kingdom with Euro <br>1147 = IBM EBCDIC France with Euro <br>1148 = IBM EBCDIC International with Euro <br>1149 = IBM EBCDIC Icelandic with Euro <br>1200 = Unicode UTF-16, little endian <br>1201 = Unicode UTF-16, big endian <br>1250 = Windows Latin 2 (Central European) <br>1251 = Windows Cyrillic <br>1252 = Windows Latin 1 (Western European) <br>1253 = Windows Greek <br>1254 = Windows Turkish <br>1255 = Windows Hebrew <br>1256 = Windows Arabic <br>1257 = Windows Baltic <br>1258 = Windows Vietnamese <br>1361 = Korean (Johab) <br>10000 = Mac Roman (Western European) <br>10001 = Mac Japanese <br>10002 = Mac Traditional Chinese <br>10003 = Mac Korean <br>10004 = Mac Arabic <br>10005 = Mac Hebrew <br>10006 = Mac Greek <br>10007 = Mac Cyrillic <br>10008 = Mac Simplified Chinese <br>10010 = Mac Romanian <br>10017 = Mac Ukrainian <br>10021 = Mac Thai <br>10029 = Mac Latin 2 (Central European) <br>10079 = Mac Icelandic <br>10081 = Mac Turkish <br>10082 = Mac Croatian <br>12000 = Unicode UTF-32, little endian <br>12001 = Unicode UTF-32, big endian <br>20000 = CNS Taiwan <br>20001 = TCA Taiwan <br>20002 = Eten Taiwan <br>20003 = IBM5550 Taiwan <br>20004 = TeleText Taiwan <br>20005 = Wang Taiwan <br>20105 = IA5 (IRV International Alphabet No. 5, 7-bit) <br>20106 = IA5 German (7-bit) <br>20107 = IA5 Swedish (7-bit) <br>20108 = IA5 Norwegian (7-bit) <br>20127 = US-ASCII (7-bit) <br>20261 = T.61 <br>20269 = ISO 6937 Non-Spacing Accent <br>20273 = IBM EBCDIC Germany <br>20277 = IBM EBCDIC Denmark-Norway <br>20278 = IBM EBCDIC Finland-Sweden <br>20280 = IBM EBCDIC Italy <br>20284 = IBM EBCDIC Latin America-Spain <br>20285 = IBM EBCDIC United Kingdom <br>20290 = IBM EBCDIC Japanese Katakana Extended <br>20297 = IBM EBCDIC France <br>20420 = IBM EBCDIC Arabic <br>20423 = IBM EBCDIC Greek <br>20424 = IBM EBCDIC Hebrew <br>20833 = IBM EBCDIC Korean Extended <br>20838 = IBM EBCDIC Thai <br>20866 = Russian/Cyrillic (KOI8-R) <br>20871 = IBM EBCDIC Icelandic <br>20880 = IBM EBCDIC Cyrillic Russian <br>20905 = IBM EBCDIC Turkish <br>20924 = IBM EBCDIC Latin 1/Open System with Euro <br>20932 = Japanese (JIS 0208-1990 and 0121-1990) <br>20936 = Simplified Chinese (GB2312) <br>20949 = Korean Wansung <br>21025 = IBM EBCDIC Cyrillic Serbian-Bulgarian <br>21027 = Extended Alpha Lowercase (deprecated) <br>21866 = Ukrainian/Cyrillic (KOI8-U) <br>28591 = ISO 8859-1 Latin 1 (Western European) <br>28592 = ISO 8859-2 (Central European) <br>28593 = ISO 8859-3 Latin 3 <br>28594 = ISO 8859-4 Baltic <br>28595 = ISO 8859-5 Cyrillic <br>28596 = ISO 8859-6 Arabic <br>28597 = ISO 8859-7 Greek <br>28598 = ISO 8859-8 Hebrew (Visual) <br>28599 = ISO 8859-9 Turkish <br>28603 = ISO 8859-13 Estonian <br>28605 = ISO 8859-15 Latin 9 <br>29001 = Europa 3 <br>38598 = ISO 8859-8 Hebrew (Logical) <br>50220 = ISO 2022 Japanese with no halfwidth Katakana (JIS) <br>50221 = ISO 2022 Japanese with halfwidth Katakana (JIS-Allow 1 byte Kana) <br>50222 = ISO 2022 Japanese JIS X 0201-1989 (JIS-Allow 1 byte Kana - SO/SI) <br>50225 = ISO 2022 Korean <br>50227 = ISO 2022 Simplified Chinese <br>50229 = ISO 2022 Traditional Chinese <br>50930 = EBCDIC Japanese (Katakana) Extended <br>50931 = EBCDIC US-Canada and Japanese <br>50933 = EBCDIC Korean Extended and Korean <br>50935 = EBCDIC Simplified Chinese Extended and Simplified Chinese <br>50936 = EBCDIC Simplified Chinese <br>50937 = EBCDIC US-Canada and Traditional Chinese <br>50939 = EBCDIC Japanese (Latin) Extended and Japanese <br>51932 = EUC Japanese <br>51936 = EUC Simplified Chinese <br>51949 = EUC Korean <br>51950 = EUC Traditional Chinese <br>52936 = HZ-GB2312 Simplified Chinese <br>54936 = Windows XP and later: GB18030 Simplified Chinese (4 byte) <br>57002 = ISCII Devanagari <br>57003 = ISCII Bengali <br>57004 = ISCII Tamil <br>57005 = ISCII Telugu <br>57006 = ISCII Assamese <br>57007 = ISCII Oriya <br>57008 = ISCII Kannada <br>57009 = ISCII Malayalam <br>57010 = ISCII Gujarati <br>57011 = ISCII Punjabi <br>65000 = Unicode (UTF-7) <br>65001 = Unicode (UTF-8)</span></td></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>Subject</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>Keywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0006 = 6'>0x0006</td> <td>Comments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0007 = 7'>0x0007</td> <td>Template</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>LastModifiedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0009 = 9'>0x0009</td> <td>RevisionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000a = 10'>0x000a</td> <td>TotalEditTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000b = 11'>0x000b</td> <td>LastPrinted</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000c = 12'>0x000c</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000d = 13'>0x000d</td> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000e = 14'>0x000e</td> <td>Pages</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000f = 15'>0x000f</td> <td>Words</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>Characters</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0011 = 17'>0x0011</td> <td>ThumbnailClip</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0012 = 18'>0x0012</td> <td>Software</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0013 = 19'>0x0013</td> <td>Security</td> <td class=c>N</td> <td><span class=s>0 = None <br>1 = Password protected <br>2 = Read-only recommended <br>4 = Read-only enforced <br>8 = Locked for annotations</span></td></tr> <tr> <td title='0x80000000 = 2147483648'>0x80000000</td> <td>LocaleIndicator</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Transform'>FlashPix Transform Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x10000 = 65536'>0x10000</td> <td>TransformNodeID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10001 = 65537'>0x10001</td> <td>OperationClassID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10002 = 65538'>0x10002</td> <td>LockedPropertyList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10003 = 65539'>0x10003</td> <td>TransformTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10004 = 65540'>0x10004</td> <td>LastModifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10005 = 65541'>0x10005</td> <td>RevisionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10006 = 65542'>0x10006</td> <td>TransformCreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10007 = 65543'>0x10007</td> <td>TransformModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10008 = 65544'>0x10008</td> <td>CreatingApplication</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10100 = 65792'>0x10100</td> <td>InputDataObjectList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10101 = 65793'>0x10101</td> <td>OutputDataObjectList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10102 = 65794'>0x10102</td> <td>OperationNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10000000 = 268435456'>0x10000000</td> <td>ResultAspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10000001 = 268435457'>0x10000001</td> <td>RectangleOfInterest</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10000002 = 268435458'>0x10000002</td> <td>Filtering</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10000003 = 268435459'>0x10000003</td> <td>SpatialOrientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x10000004 = 268435460'>0x10000004</td> <td>ColorTwistMatrix</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x10000005 = 268435461'>0x10000005</td> <td>ContrastAdjustment</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PreviewInfo'>FlashPix PreviewInfo Tags</a></h2> <p>Preview information written by some FujiFilm models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>PreviewImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='23 = 0x17'>23</td> <td>PreviewImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SubimageHdr'>FlashPix SubimageHdr Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>SubimageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>SubimageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>SubimageTileCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>SubimageTileWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>SubimageTileHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>NumChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jul 31, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/FLIR.html��������������������������������������������������������000644 �000765 �000024 �00000106174 12527350231 020461� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>FLIR Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>FLIR Tags</h2> <p>Information extracted from the maker notes of JPEG images from thermal imaging cameras by FLIR Systems Inc.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>ImageTemperatureMax</td> <td class=c>rational64u</td> <td><span class=s><span class=n>(these temperatures may be in Celcius, Kelvin or Fahrenheit, but there is no way to tell which)</span></span></td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>ImageTemperatureMin</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>Emissivity</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>UnknownTemperature?</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>CameraTemperatureRangeMax?</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0006 = 6'>0x0006</td> <td>CameraTemperatureRangeMin?</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FFF'>FLIR FFF Tags</a></h2> <p>Information extracted from FLIR FFF images and the FLIR APP1 segment of JPEG images. These tags may also be extracted from the first frame of an FLIR SEQ file.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'_header'</td> <td>FFFHeader</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#Header'>FLIR Header Tags</a></td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>RawData</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#RawData'>FLIR RawData Tags</a></td></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>GainDeadData</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#GainDeadData'>FLIR GainDeadData Tags</a></td></tr> <tr class=b> <td title='0x0006 = 6'>0x0006</td> <td>CoarseData</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#CoarseData'>FLIR CoarseData Tags</a></td></tr> <tr> <td title='0x000e = 14'>0x000e</td> <td>EmbeddedImage</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#EmbeddedImage'>FLIR EmbeddedImage Tags</a></td></tr> <tr class=b> <td title='0x0020 = 32'>0x0020</td> <td>CameraInfo</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#CameraInfo'>FLIR CameraInfo Tags</a></td></tr> <tr> <td title='0x0021 = 33'>0x0021</td> <td>MeasurementInfo</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#MeasInfo'>FLIR MeasInfo Tags</a></td></tr> <tr class=b> <td title='0x0022 = 34'>0x0022</td> <td>PaletteInfo</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#PaletteInfo'>FLIR PaletteInfo Tags</a></td></tr> <tr> <td title='0x0023 = 35'>0x0023</td> <td>TextInfo</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#TextInfo'>FLIR TextInfo Tags</a></td></tr> <tr class=b> <td title='0x0024 = 36'>0x0024</td> <td>EmbeddedAudioFile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0028 = 40'>0x0028</td> <td>PaintData</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#PaintData'>FLIR PaintData Tags</a></td></tr> <tr class=b> <td title='0x002a = 42'>0x002a</td> <td>PiP</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#PiP'>FLIR PiP Tags</a></td></tr> <tr> <td title='0x002b = 43'>0x002b</td> <td>GPSInfo</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#GPSInfo'>FLIR GPSInfo Tags</a></td></tr> <tr class=b> <td title='0x002c = 44'>0x002c</td> <td>MeterLink</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#MeterLink'>FLIR MeterLink Tags</a></td></tr> <tr> <td title='0x002e = 46'>0x002e</td> <td>ParameterInfo</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#ParamInfo'>FLIR ParamInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Header'>FLIR Header Tags</a></h2> <p>Tags extracted from the FLIR FFF/AFF header.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>CreatorSoftware</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='RawData'>FLIR RawData Tags</a></h2> <p>The thermal image data may be stored either as raw data, or in PNG format. If stored as raw data, ExifTool adds a TIFF header to allow the data to be viewed as a TIFF image. If stored in PNG format, the PNG image is extracted as-is. Note that most FLIR cameras using the PNG format seem to write the 16-bit raw image data in the wrong byte order.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>RawThermalImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>RawThermalImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>RawThermalImageType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16.1</td> <td>RawThermalImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='GainDeadData'>FLIR GainDeadData Tags</a></h2> <p>Information found in FFF-format .GAN calibration image files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>GainDeadMapImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>GainDeadMapImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>GainDeadMapImageType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16.1</td> <td>GainDeadMapImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CoarseData'>FLIR CoarseData Tags</a></h2> <p>Information found in FFF-format .CRS correction image files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>CoarseMapImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>CoarseMapImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>CoarseMapImageType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16.1</td> <td>CoarseMapImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='EmbeddedImage'>FLIR EmbeddedImage Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>EmbeddedImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>EmbeddedImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>EmbeddedImageType</td> <td class=c>N</td> <td><span class=s><span class=n>(&quot;PNG&quot; for PNG image in Y Cb Cr colors, &quot;JPG&quot; for a JPEG image, or &quot;DAT&quot; for other image data)</span></span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16.1</td> <td>EmbeddedImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo'>FLIR CameraInfo Tags</a></h2> <p>FLIR camera information. The Planck tags are variables used in the temperature calculation. See <a href="http://u88.n24.queensu.ca/exiftool/forum/index.php?topic=4898.msg23972#msg23972">http://u88.n24.queensu.ca/exiftool/forum/index.php?topic=4898.msg23972#msg23972</a> for details.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>Emissivity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='36 = 0x24'>36</td> <td>ObjectDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>ReflectedApparentTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>AtmosphericTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>IRWindowTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>IRWindowTransmission</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='60 = 0x3c'>60</td> <td>RelativeHumidity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='88 = 0x58'>88</td> <td>PlanckR1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='92 = 0x5c'>92</td> <td>PlanckB</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='96 = 0x60'>96</td> <td>PlanckF</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='112 = 0x70'>112</td> <td>AtmosphericTransAlpha1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='116 = 0x74'>116</td> <td>AtmosphericTransAlpha2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='120 = 0x78'>120</td> <td>AtmosphericTransBeta1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='124 = 0x7c'>124</td> <td>AtmosphericTransBeta2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='128 = 0x80'>128</td> <td>AtmosphericTransX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='144 = 0x90'>144</td> <td>CameraTemperatureRangeMax</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='148 = 0x94'>148</td> <td>CameraTemperatureRangeMin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='152 = 0x98'>152</td> <td>UnknownTemperature1?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='156 = 0x9c'>156</td> <td>UnknownTemperature2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='160 = 0xa0'>160</td> <td>UnknownTemperature3?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='164 = 0xa4'>164</td> <td>UnknownTemperature4?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='168 = 0xa8'>168</td> <td>UnknownTemperature5?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='172 = 0xac'>172</td> <td>UnknownTemperature6?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='212 = 0xd4'>212</td> <td>CameraModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='244 = 0xf4'>244</td> <td>CameraPartNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='260 = 0x104'>260</td> <td>CameraSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='276 = 0x114'>276</td> <td>CameraSoftware</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='368 = 0x170'>368</td> <td>LensModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='400 = 0x190'>400</td> <td>LensPartNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='416 = 0x1a0'>416</td> <td>LensSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='436 = 0x1b4'>436</td> <td>FieldOfView</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='492 = 0x1ec'>492</td> <td>FilterModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='508 = 0x1fc'>508</td> <td>FilterPartNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='540 = 0x21c'>540</td> <td>FilterSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='776 = 0x308'>776</td> <td>PlanckO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='780 = 0x30c'>780</td> <td>PlanckR2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='824 = 0x338'>824</td> <td>RawValueMedian</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='828 = 0x33c'>828</td> <td>RawValueRange</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='900 = 0x384'>900</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='912 = 0x390'>912</td> <td>FocusStepCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1116 = 0x45c'>1116</td> <td>FocusDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MeasInfo'>FLIR MeasInfo Tags</a></h2> <p>Tags listed below are only for the first measurement tool, however multiple measurements may be added, and information is extracted for all of them. Tags for subsequent measurements are generated as required with the prefixes &quot;Meas2&quot;, &quot;Meas3&quot;, etc.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Meas1Label</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Meas1Params</td> <td class=c>N</td> <td><span class=s><span class=n>(Spot=X,Y; Area=X1,Y1,W,H; Ellipse=XC,YC,X1,Y1,X2,Y2; Line=X1,Y1,X2,Y2)</span></span></td></tr> <tr> <td>Meas1Type</td> <td class=c>N</td> <td><table class=cols><tr> <td>1 = Spot <br>2 = Area <br>3 = Ellipse <br>4 = Line</td><td>&nbsp;&nbsp;</td> <td>5 = Endpoint <br>6 = Alarm <br>7 = Unused <br>8 = Difference</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='PaletteInfo'>FLIR PaletteInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PaletteColors</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>AboveColor</td> <td class=c>N</td> <td><span class=s><span class=n>(Y Cr Cb color components)</span></span></td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>BelowColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>OverflowColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>UnderflowColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>Isotherm1Color</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>Isotherm2Color</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>PaletteMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='27 = 0x1b'>27</td> <td>PaletteStretch</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>PaletteFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='80 = 0x50'>80</td> <td>PaletteName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='112 = 0x70'>112</td> <td>Palette</td> <td class=c>N</td> <td><span class=s><span class=n>(Y Cr Cb byte values for each palette color)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='TextInfo'>FLIR TextInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Label0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Label1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Label2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Label3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Value0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Value1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Value2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Value3</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PaintData'>FLIR PaintData Tags</a></h2> <p>Information generated by FLIR Tools &quot;Paint colors&quot; tool.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>PaintImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>PaintImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>PaintImageType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20.1</td> <td>PaintImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PiP'>FLIR PiP Tags</a></h2> <p>FLIR Picture in Picture tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Real2IR</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>OffsetX</td> <td class=c>N</td> <td><span class=s><span class=n>(offset from of insertion point from center)</span></span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>OffsetY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>PiPX1</td> <td class=c>N</td> <td><span class=s><span class=n>(crop size for radiometric image)</span></span></td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>PiPX2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>PiPY1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>PiPY2</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='GPSInfo'>FLIR GPSInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='88 = 0x58'>88</td> <td>GPSMapDatum</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MeterLink'>FLIR MeterLink Tags</a></h2> <p>Tags containing Meterlink humidity meter information.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='26 = 0x1a'>26</td> <td>Reading1Units</td> <td class=c>N</td> <td><span class=s>0xd = C <br>0x1b = % <br>0x1d = Relative <br>0x24 = g/kg</span></td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28</td> <td>Reading1Description</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Humidity <br>3 = Moisture <br>7 = Dew Point <br>8 = Air Temperature <br>9 = IR Temperature <br>11 = Difference Temperature</td></tr></table> </td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>Reading1Device</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='96 = 0x60'>96</td> <td>Reading1Value</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='126 = 0x7e'>126</td> <td>Reading2Units</td> <td class=c>N</td> <td><span class=s>0xd = C <br>0x1b = % <br>0x1d = rel <br>0x24 = g/kg</span></td></tr> <tr class=b> <td class=r title='128 = 0x80'>128</td> <td>Reading2Description</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Humidity <br>3 = Moisture <br>7 = Dew Point <br>8 = Air Temperature <br>9 = IR Temperature <br>11 = Difference Temperature</td></tr></table> </td></tr> <tr> <td class=r title='132 = 0x84'>132</td> <td>Reading2Device</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='196 = 0xc4'>196</td> <td>Reading2Value</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='226 = 0xe2'>226</td> <td>Reading3Units</td> <td class=c>N</td> <td><span class=s>0xd = C <br>0x1b = % <br>0x1d = rel <br>0x24 = g/kg</span></td></tr> <tr class=b> <td class=r title='228 = 0xe4'>228</td> <td>Reading3Description</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Humidity <br>3 = Moisture <br>7 = Dew Point <br>8 = Air Temperature <br>9 = IR Temperature <br>11 = Difference Temperature</td></tr></table> </td></tr> <tr> <td class=r title='232 = 0xe8'>232</td> <td>Reading3Device</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='296 = 0x128'>296</td> <td>Reading3Value</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='326 = 0x146'>326</td> <td>Reading4Units</td> <td class=c>N</td> <td><span class=s>0xd = C <br>0x1b = % <br>0x1d = rel <br>0x24 = g/kg</span></td></tr> <tr class=b> <td class=r title='328 = 0x148'>328</td> <td>Reading4Description</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Humidity <br>3 = Moisture <br>7 = Dew Point <br>8 = Air Temperature <br>9 = IR Temperature <br>11 = Difference Temperature</td></tr></table> </td></tr> <tr> <td class=r title='332 = 0x14c'>332</td> <td>Reading4Device</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='396 = 0x18c'>396</td> <td>Reading4Value</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ParamInfo'>FLIR ParamInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>DateTimeGenerated</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Param0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Param1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Param2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Param3</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='UserData'>FLIR UserData Tags</a></h2> <p>Tags written by some FLIR cameras in a top-level (!) &quot;udta&quot; atom of MP4 videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'uuid'</td> <td>FLIR_Parts <br>FLIR_Serial <br>FLIR_Params <br>FLIR_UnknownUUID <br>FLIR_GPS <br>FLIR_MoreInfo <br>SoftwareComponents? <br>FLIR_Unknown? <br>Units <br>ThumbnailImage</td> <td class=c title=' + = List'>-<br>-<br>-<br>-<br>-<br>-<br>N<br>N<br>N+<br>N</td> <td>--&gt; <a href='FLIR.html#Parts'>FLIR Parts Tags</a> <br>--&gt; <a href='FLIR.html#SerialNums'>FLIR SerialNums Tags</a> <br>--&gt; <a href='FLIR.html#Params'>FLIR Params Tags</a> <br>--&gt; <a href='FLIR.html#UnknownUUID'>FLIR UnknownUUID Tags</a> <br>--&gt; <a href='FLIR.html#GPS_UUID'>FLIR GPS_UUID Tags</a> <br>--&gt; <a href='FLIR.html#MoreInfo'>FLIR MoreInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Parts'>FLIR Parts Tags</a></h2> <p>Tags extracted from the &quot;uuid&quot; box with ID 43c3993b0f94424b82056b66513f485d in FLIR MP4 videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>BAHPVer <br>BALPVer <br>Battery <br>BAVPVer <br>CamCore <br>DetectorBoard <br>Detector <br>GIDCVer <br>GIDPVer <br>GIPC_CPLD <br>GIPCVer <br>GIXIVer <br>MainBoard <br>Optics <br>PartNumber</td> <td class=c>N<br>N<br>N<br>N<br>N<br>N<br>N<br>N<br>N<br>N<br>N<br>N<br>N<br>N<br>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SerialNums'>FLIR SerialNums Tags</a></h2> <p>Tags extracted from the &quot;uuid&quot; box with ID 57f5b93e51e448afa0d9c3ef1b37f712 in FLIR MP4 videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>UnknownSerial1?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='45 = 0x2d'>45</td> <td>UnknownSerial2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='78 = 0x4e'>78</td> <td>UnknownSerial3?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='111 = 0x6f'>111</td> <td>UnknownSerial4?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='123 = 0x7b'>123</td> <td>UnknownNumber?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='126 = 0x7e'>126</td> <td>CameraSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Params'>FLIR Params Tags</a></h2> <p>Tags extracted from the &quot;uuid&quot; box with ID 41e5dcf9e80a41ceadfe7f0c58082c19 in FLIR MP4 videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>ReflectedApparentTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>AtmosphericTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>Emissivity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ObjectDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>RelativeHumidity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>EstimatedAtmosphericTrans</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>IRWindowTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>IRWindowTransmission</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='UnknownUUID'>FLIR UnknownUUID Tags</a></h2> <p>Tags extracted from the &quot;uuid&quot; box with ID 574520502cbb44adae5415e9b839d903 in FLIR MP4 videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='GPS_UUID'>FLIR GPS_UUID Tags</a></h2> <p>Tags extracted from the &quot;uuid&quot; box with ID 7f2e21008b464918afb1de709a74f6f5 in FLIR MP4 videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>GPSLatitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>GPSLongitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>GPSAltitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MoreInfo'>FLIR MoreInfo Tags</a></h2> <p>Tags extracted from the &quot;uuid&quot; box with ID 2b452fdc74354094baee22a6b23a7cf8 in FLIR MP4 videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>LensModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>UnknownTemperature1?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>UnknownTemperature2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AFF'>FLIR AFF Tags</a></h2> <p>Tags extracted from FLIR &quot;AFF&quot; SEQ images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'_header'</td> <td>AFFHeader</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#Header'>FLIR Header Tags</a></td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>AFF1</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#AFF1'>FLIR AFF1 Tags</a></td></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>AFF5</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#AFF5'>FLIR AFF5 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='AFF1'>FLIR AFF1 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>SensorWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>SensorHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AFF5'>FLIR AFF5 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='19 = 0x13'>19</td> <td>SensorWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>SensorHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FPF'>FLIR FPF Tags</a></h2> <p>Tags extracted from FLIR Public image Format (FPF) files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>FPFVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='36 = 0x24'>36</td> <td>ImageDataOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>ImageType</td> <td class=c>N</td> <td><span class=s>0 = Temperature <br>1 = Temperature Difference <br>2 = Object Signal <br>3 = Object Signal Difference</span></td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>ImagePixelFormat</td> <td class=c>N</td> <td><span class=s>0 = 2-byte short integer <br>1 = 4-byte long integer <br>2 = 4-byte float <br>3 = 8-byte double</span></td></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='46 = 0x2e'>46</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>ExternalTriggerCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>SequenceFrameNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='120 = 0x78'>120</td> <td>CameraModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='152 = 0x98'>152</td> <td>CameraPartNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='184 = 0xb8'>184</td> <td>CameraSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='216 = 0xd8'>216</td> <td>CameraTemperatureRangeMin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='220 = 0xdc'>220</td> <td>CameraTemperatureRangeMax</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='224 = 0xe0'>224</td> <td>LensModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='256 = 0x100'>256</td> <td>LensPartNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='288 = 0x120'>288</td> <td>LensSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='320 = 0x140'>320</td> <td>FilterModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='336 = 0x150'>336</td> <td>FilterPartNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='384 = 0x180'>384</td> <td>FilterSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='480 = 0x1e0'>480</td> <td>Emissivity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='484 = 0x1e4'>484</td> <td>ObjectDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='488 = 0x1e8'>488</td> <td>ReflectedApparentTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='492 = 0x1ec'>492</td> <td>AtmosphericTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='496 = 0x1f0'>496</td> <td>RelativeHumidity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='500 = 0x1f4'>500</td> <td>ComputedAtmosphericTrans</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='504 = 0x1f8'>504</td> <td>EstimatedAtmosphericTrans</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='508 = 0x1fc'>508</td> <td>ReferenceTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='512 = 0x200'>512</td> <td>IRWindowTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='516 = 0x204'>516</td> <td>IRWindowTransmission</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='584 = 0x248'>584</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='676 = 0x2a4'>676</td> <td>CameraScaleMin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='680 = 0x2a8'>680</td> <td>CameraScaleMax</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='684 = 0x2ac'>684</td> <td>CalculatedScaleMin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='688 = 0x2b0'>688</td> <td>CalculatedScaleMax</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='692 = 0x2b4'>692</td> <td>ActualScaleMin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='696 = 0x2b8'>696</td> <td>ActualScaleMax</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Mar 25, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Font.html��������������������������������������������������������000644 �000765 �000024 �00000025362 12343637576 020652� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Font Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Font Tags</h2> <p>This table contains a collection of tags found in font files of various formats. ExifTool current recognizes OTF, TTF, TTC, DFONT, PFA, PFB, PFM, AFM, ACFM and AMFM font files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'AFM'</td> <td>AFM</td> <td class=c>-</td> <td>--&gt; <a href='Font.html#AFM'>Font AFM Tags</a></td></tr> <tr class=b> <td>'PFM'</td> <td>PFMHeader</td> <td class=c>-</td> <td>--&gt; <a href='Font.html#PFM'>Font PFM Tags</a></td></tr> <tr> <td>'PSInfo'</td> <td>PSFontInfo</td> <td class=c>-</td> <td>--&gt; <a href='Font.html#PSInfo'>Font PSInfo Tags</a></td></tr> <tr class=b> <td>'fontname'</td> <td>FontName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'name'</td> <td>Name</td> <td class=c>-</td> <td>--&gt; <a href='Font.html#Name'>Font Name Tags</a></td></tr> <tr class=b> <td>'numfonts'</td> <td>NumFonts</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'postfont'</td> <td>PostScriptFontName</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AFM'>Font AFM Tags</a></h2> <p>Tags extracted from Adobe Font Metrics files (AFM, ACFM and AMFM).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Ascender'</td> <td>Ascender</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'CapHeight'</td> <td>CapHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'CharacterSet'</td> <td>CharacterSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Characters'</td> <td>Characters</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Creation Date'</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Descender'</td> <td>Descender</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'EncodingScheme'</td> <td>EncodingScheme</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'EscChar'</td> <td>EscChar</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'FamilyName'</td> <td>FontFamily</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'FontName'</td> <td>FontName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'FullName'</td> <td>FullName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IsBaseFont'</td> <td>IsBaseFont</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IsFixedV'</td> <td>IsFixedV</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'MappingScheme'</td> <td>MappingScheme</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Notice'</td> <td>Notice</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Version'</td> <td>Version</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Weight'</td> <td>Weight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'XHeight'</td> <td>XHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PFM'>Font PFM Tags</a></h2> <p>Tags extracted from the PFM file header.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PFMVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='66 = 0x42'>66</td> <td>FontType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='68 = 0x44'>68</td> <td>PointSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='70 = 0x46'>70</td> <td>YResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='72 = 0x48'>72</td> <td>XResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='74 = 0x4a'>74</td> <td>Ascent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='76 = 0x4c'>76</td> <td>InternalLeading</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='78 = 0x4e'>78</td> <td>ExternalLeading</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='80 = 0x50'>80</td> <td>Italic</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='81 = 0x51'>81</td> <td>Underline</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='82 = 0x52'>82</td> <td>Strikeout</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='83 = 0x53'>83</td> <td>Weight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='85 = 0x55'>85</td> <td>CharacterSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='86 = 0x56'>86</td> <td>PixWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='88 = 0x58'>88</td> <td>PixHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='90 = 0x5a'>90</td> <td>PitchAndFamily</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='91 = 0x5b'>91</td> <td>AvgWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='93 = 0x5d'>93</td> <td>MaxWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='95 = 0x5f'>95</td> <td>FirstChar</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='96 = 0x60'>96</td> <td>LastChar</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='97 = 0x61'>97</td> <td>DefaultChar</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='98 = 0x62'>98</td> <td>BreakChar</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='99 = 0x63'>99</td> <td>WidthBytes</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PSInfo'>Font PSInfo Tags</a></h2> <p>Tags extracted from PostScript font files (PFA and PFB).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Copyright'</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'FSType'</td> <td>FSType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'FamilyName'</td> <td>FontFamily</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'FontName'</td> <td>FontName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'FontType'</td> <td>FontType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'FullName'</td> <td>FullName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ItalicAngle'</td> <td>ItalicAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Notice'</td> <td>Notice</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'UnderlinePosition'</td> <td>UnderlinePosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'UnderlineThickness'</td> <td>UnderlineThickness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Weight'</td> <td>Weight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'isFixedPitch'</td> <td>IsFixedPitch</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'version'</td> <td>Version</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Name'>Font Name Tags</a></h2> <p>The following tags are extracted from the TrueType font &quot;name&quot; table found in OTF, TTF, TTC and DFONT files. These tags support localized languages by adding a hyphen followed by a language code to the end of the tag name (eg. &quot;Copyright-fr&quot; or &quot;License-en-US&quot;). Tags with no language code use the default language of &quot;en&quot;.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>FontFamily</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>FontSubfamily</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>FontSubfamilyID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>FontName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>NameTableVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0006 = 6'>0x0006</td> <td>PostScriptFontName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0007 = 7'>0x0007</td> <td>Trademark</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>Manufacturer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0009 = 9'>0x0009</td> <td>Designer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000a = 10'>0x000a</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000b = 11'>0x000b</td> <td>VendorURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000c = 12'>0x000c</td> <td>DesignerURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000d = 13'>0x000d</td> <td>License</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000e = 14'>0x000e</td> <td>LicenseInfoURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0010 = 16'>0x0010</td> <td>PreferredFamily</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0011 = 17'>0x0011</td> <td>PreferredSubfamily</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0012 = 18'>0x0012</td> <td>CompatibleFontName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0013 = 19'>0x0013</td> <td>SampleText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0014 = 20'>0x0014</td> <td>PostScriptFontName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0015 = 21'>0x0015</td> <td>WWSFamilyName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0016 = 22'>0x0016</td> <td>WWSSubfamilyName</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 31, 2012</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/FotoStation.html�������������������������������������������������000644 �000765 �000024 �00000005412 11663037145 022175� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>FotoStation Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>FotoStation Tags</h2> <p>The following tables define information found in the FotoWare FotoStation trailer.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>IPTC</td> <td class=c>-</td> <td>--&gt; <a href='IPTC.html'>IPTC Tags</a></td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>SoftEdit</td> <td class=c>-</td> <td>--&gt; <a href='FotoStation.html#SoftEdit'>FotoStation SoftEdit Tags</a></td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>ThumbnailImage</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>PreviewImage</td> <td class=c>Y</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SoftEdit'>FotoStation SoftEdit Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>OriginalImageWidth</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>OriginalImageHeight</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>ColorPlanes</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>XYResolution</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>Rotation</td> <td class=c>int32s</td> <td><span class=s><span class=n>(rotations are stored as degrees CCW * 100, but converted to degrees CW by ExifTool)</span></span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>CropLeft</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>CropTop</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>CropRight</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>CropBottom</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>CropRotation</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Oct 20, 2006</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/FujiFilm.html����������������������������������������������������000644 �000765 �000024 �00000051546 12650436603 021441� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>FujiFilm Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>FujiFilm Tags</h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>Version</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0010 = 16'>0x0010</td> <td>InternalSerialNumber</td> <td class=c>string</td> <td><span class=s><span class=n>(this number is unique, and contains the date of manufacture, but doesn&#39;t necessarily correspond to the camera body number -- this needs to be checked)</span></span></td></tr> <tr> <td title='0x1000 = 4096'>0x1000</td> <td>Quality</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1001 = 4097'>0x1001</td> <td>Sharpness</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x1 = Soft <br>0x2 = Soft2 <br>0x3 = Normal <br>0x4 = Hard <br>0x5 = Hard2 <br>0x82 = Medium Soft <br>0x84 = Medium Hard <br>0x8000 = Film Simulation <br>0xffff = n/a</td></tr></table> </td></tr> <tr> <td title='0x1002 = 4098'>0x1002</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Auto <br>0x100 = Daylight <br>0x200 = Cloudy <br>0x300 = Daylight Fluorescent <br>0x301 = Day White Fluorescent <br>0x302 = White Fluorescent <br>0x303 = Warm White Fluorescent <br>0x304 = Living Room Warm White Fluorescent <br>0x400 = Incandescent <br>0x500 = Flash <br>0x600 = Underwater <br>0xf00 = Custom <br>0xf01 = Custom2 <br>0xf02 = Custom3 <br>0xf03 = Custom4 <br>0xf04 = Custom5 <br>0xff0 = Kelvin</td></tr></table> </td></tr> <tr class=b> <td title='0x1003 = 4099'>0x1003</td> <td>Saturation</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Normal <br>0x80 = Medium High <br>0x100 = High <br>0x180 = Medium Low <br>0x200 = Low <br>0x300 = None (B&amp;W) <br>0x301 = B&amp;W Red Filter <br>0x302 = B&amp;W Yellow Filter <br>0x303 = B&amp;W Green Filter <br>0x310 = B&amp;W Sepia <br>0x400 = Low 2 <br>0x8000 = Film Simulation</td></tr></table> </td></tr> <tr> <td title='0x1004 = 4100'>0x1004</td> <td>Contrast</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Normal <br>0x80 = Medium High <br>0x100 = High <br>0x180 = Medium Low <br>0x200 = Low <br>0x8000 = Film Simulation</td></tr></table> </td></tr> <tr class=b> <td title='0x1005 = 4101'>0x1005</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1006 = 4102'>0x1006</td> <td>Contrast</td> <td class=c>int16u</td> <td><span class=s>0x0 = Normal <br>0x100 = High <br>0x300 = Low</span></td></tr> <tr class=b> <td title='0x100a = 4106'>0x100a</td> <td>WhiteBalanceFineTune</td> <td class=c>int32s[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x100b = 4107'>0x100b</td> <td>NoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0x40 = Low <br>0x80 = Normal <br>0x100 = n/a</span></td></tr> <tr class=b> <td title='0x100e = 4110'>0x100e</td> <td>HighISONoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0x0 = Normal <br>0x100 = Strong <br>0x180 = Medium Strong <br>0x200 = Weak <br>0x280 = Medium Weak</span></td></tr> <tr> <td title='0x1010 = 4112'>0x1010</td> <td>FujiFlashMode</td> <td class=c>int16u</td> <td><span class=s>0 = Auto <br>1 = On <br>2 = Off <br>3 = Red-eye reduction <br>4 = External</span></td></tr> <tr class=b> <td title='0x1011 = 4113'>0x1011</td> <td>FlashExposureComp</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x1020 = 4128'>0x1020</td> <td>Macro</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x1021 = 4129'>0x1021</td> <td>FocusMode</td> <td class=c>int16u</td> <td><span class=s>0 = Auto <br>1 = Manual</span></td></tr> <tr> <td title='0x1022 = 4130'>0x1022</td> <td>AFMode</td> <td class=c>int16u</td> <td><span class=s><span class=n>(&quot;No&quot; for manual and some AF-multi focus modes)</span> <br>0 = No <br>1 = Single Point <br>256 = Zone <br>512 = Wide/Tracking</span></td></tr> <tr class=b> <td title='0x1023 = 4131'>0x1023</td> <td>FocusPixel</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x1030 = 4144'>0x1030</td> <td>SlowSync</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x1031 = 4145'>0x1031</td> <td>PictureMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Auto <br>0x1 = Portrait <br>0x2 = Landscape <br>0x3 = Macro <br>0x4 = Sports <br>0x5 = Night Scene <br>0x6 = Program AE <br>0x7 = Natural Light <br>0x8 = Anti-blur <br>0x9 = Beach &amp; Snow <br>0xa = Sunset <br>0xb = Museum <br>0xc = Party <br>0xd = Flower <br>0xe = Text <br>0xf = Natural Light &amp; Flash <br>0x10 = Beach <br>0x11 = Snow <br>0x12 = Fireworks <br>0x13 = Underwater <br>0x14 = Portrait with Skin Correction <br>0x16 = Panorama <br>0x17 = Night (tripod) <br>0x18 = Pro Low-light <br>0x19 = Pro Focus <br>0x1a = Portrait 2 <br>0x1b = Dog Face Detection <br>0x1c = Cat Face Detection <br>0x40 = Advanced Filter <br>0x100 = Aperture-priority AE <br>0x200 = Shutter speed priority AE <br>0x300 = Manual</td></tr></table> </td></tr> <tr> <td title='0x1032 = 4146'>0x1032</td> <td>ExposureCount</td> <td class=c>int16u</td> <td><span class=s><span class=n>(number of exposures used for this image)</span></span></td></tr> <tr class=b> <td title='0x1033 = 4147'>0x1033</td> <td>EXRAuto</td> <td class=c>int16u</td> <td><span class=s>0 = Auto <br>1 = Manual</span></td></tr> <tr> <td title='0x1034 = 4148'>0x1034</td> <td>EXRMode</td> <td class=c>int16u</td> <td><span class=s>0x100 = HR (High Resolution) <br>0x200 = SN (Signal to Noise priority) <br>0x300 = DR (Dynamic Range priority)</span></td></tr> <tr class=b> <td title='0x1040 = 4160'>0x1040</td> <td>ShadowTone</td> <td class=c>int32s</td> <td><span class=s>-32 = Hard <br>-16 = Medium-hard <br>0 = Normal <br>16 = Medium-soft <br>32 = Soft</span></td></tr> <tr> <td title='0x1041 = 4161'>0x1041</td> <td>HighlightTone</td> <td class=c>int32s</td> <td><span class=s>-32 = Hard <br>-16 = Medium-hard <br>0 = Normal <br>16 = Medium-soft <br>32 = Soft</span></td></tr> <tr class=b> <td title='0x1050 = 4176'>0x1050</td> <td>ShutterType</td> <td class=c>int16u</td> <td><span class=s>0 = Mechanical <br>1 = Electronic</span></td></tr> <tr> <td title='0x1100 = 4352'>0x1100</td> <td>AutoBracketing</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On <br>2 = No flash &amp; flash</span></td></tr> <tr class=b> <td title='0x1101 = 4353'>0x1101</td> <td>SequenceNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1201 = 4609'>0x1201</td> <td>AdvancedFilter</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0x10000 = Pop Color <br>0x20000 = Hi Key <br>0x30000 = Toy Camera <br>0x40000 = Miniature <br>0x50000 = Dynamic Tone <br>0x60001 = Partial Color Red <br>0x60002 = Partial Color Yellow <br>0x60003 = Partial Color Green <br>0x60004 = Partial Color Blue <br>0x60005 = Partial Color Orange <br>0x60006 = Partial Color Purple <br>0x70000 = Soft Focus <br>0x90000 = Low Key</td></tr></table> </td></tr> <tr class=b> <td title='0x1210 = 4624'>0x1210</td> <td>ColorMode</td> <td class=c>int16u</td> <td><span class=s>0x0 = Standard <br>0x10 = Chrome <br>0x30 = B &amp; W</span></td></tr> <tr> <td title='0x1300 = 4864'>0x1300</td> <td>BlurWarning</td> <td class=c>int16u</td> <td><span class=s>0 = None <br>1 = Blur Warning</span></td></tr> <tr class=b> <td title='0x1301 = 4865'>0x1301</td> <td>FocusWarning</td> <td class=c>int16u</td> <td><span class=s>0 = Good <br>1 = Out of focus</span></td></tr> <tr> <td title='0x1302 = 4866'>0x1302</td> <td>ExposureWarning</td> <td class=c>int16u</td> <td><span class=s>0 = Good <br>1 = Bad exposure</span></td></tr> <tr class=b> <td title='0x1304 = 4868'>0x1304</td> <td>GEImageSize</td> <td class=c>string</td> <td><span class=s><span class=n>(GE models only)</span></span></td></tr> <tr> <td title='0x1400 = 5120'>0x1400</td> <td>DynamicRange</td> <td class=c>int16u</td> <td><span class=s>1 = Standard <br>3 = Wide</span></td></tr> <tr class=b> <td title='0x1401 = 5121'>0x1401</td> <td>FilmMode</td> <td class=c>int16u</td> <td><span class=s>0x0 = F0/Standard (Provia) <br>0x100 = F1/Studio Portrait <br>0x110 = F1a/Studio Portrait Enhanced Saturation <br>0x120 = F1b/Studio Portrait Smooth Skin Tone (Astia) <br>0x130 = F1c/Studio Portrait Increased Sharpness <br>0x200 = F2/Fujichrome (Velvia) <br>0x300 = F3/Studio Portrait Ex <br>0x400 = F4/Velvia <br>0x500 = Pro Neg. Std <br>0x501 = Pro Neg. Hi <br>0x600 = Classic Chrome</span></td></tr> <tr> <td title='0x1402 = 5122'>0x1402</td> <td>DynamicRangeSetting</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Auto (100-400%) <br>0x1 = Manual <br>0x100 = Standard (100%) <br>0x200 = Wide1 (230%) <br>0x201 = Wide2 (400%) <br>0x8000 = Film Simulation</td></tr></table> </td></tr> <tr class=b> <td title='0x1403 = 5123'>0x1403</td> <td>DevelopmentDynamicRange</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1404 = 5124'>0x1404</td> <td>MinFocalLength</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1405 = 5125'>0x1405</td> <td>MaxFocalLength</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x1406 = 5126'>0x1406</td> <td>MaxApertureAtMinFocal</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1407 = 5127'>0x1407</td> <td>MaxApertureAtMaxFocal</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x140b = 5131'>0x140b</td> <td>AutoDynamicRange</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1422 = 5154'>0x1422</td> <td>ImageStabilization</td> <td class=c>int16u[3]</td> <td><span class=s>[Value 0] <br>0 = None <br>1 = Optical <br>2 = Sensor-shift <br>512 = Digital <br>[Value 1] <br>0 = Off <br>1 = On (mode 1, continuous) <br>2 = On (mode 2, shooting only)</span></td></tr> <tr> <td title='0x1431 = 5169'>0x1431</td> <td>Rating</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1436 = 5174'>0x1436</td> <td>ImageGeneration</td> <td class=c>int16u</td> <td><span class=s>0 = Original Image <br>1 = Re-developed from RAW</span></td></tr> <tr> <td title='0x1438 = 5176'>0x1438</td> <td>ImageCount</td> <td class=c>int16u</td> <td><span class=s><span class=n>(may reset to 0 when new firmware is installed)</span></span></td></tr> <tr class=b> <td title='0x3820 = 14368'>0x3820</td> <td>FrameRate</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x3821 = 14369'>0x3821</td> <td>FrameWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3822 = 14370'>0x3822</td> <td>FrameHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x4100 = 16640'>0x4100</td> <td>FacesDetected</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x4103 = 16643'>0x4103</td> <td>FacePositions</td> <td class=c>int16u[n]</td> <td><span class=s><span class=n>(left, top, right and bottom coordinates in full-sized image for each face detected)</span></span></td></tr> <tr> <td title='0x4282 = 17026'>0x4282</td> <td>FaceRecInfo</td> <td class=c>-</td> <td>--&gt; <a href='FujiFilm.html#FaceRecInfo'>FujiFilm FaceRecInfo Tags</a></td></tr> <tr class=b> <td title='0x8000 = 32768'>0x8000</td> <td>FileSource</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x8002 = 32770'>0x8002</td> <td>OrderNumber</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8003 = 32771'>0x8003</td> <td>FrameNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0xb211 = 45585'>0xb211</td> <td>Parallax</td> <td class=c>rational64s</td> <td><span class=s><span class=n>(only found in MPImage2 of .MPO images)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceRecInfo'>FujiFilm FaceRecInfo Tags</a></h2> <p>Face recognition information.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Face1Birthday</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Face1Category</td> <td class=c>N</td> <td><span class=s>Bit 1 = Partner <br>Bit 2 = Family <br>Bit 3 = Friend</span></td></tr> <tr> <td>Face1Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Face2Birthday</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Face2Category</td> <td class=c>N</td> <td><span class=s>Bit 1 = Partner <br>Bit 2 = Family <br>Bit 3 = Friend</span></td></tr> <tr class=b> <td>Face2Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Face3Birthday</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Face3Category</td> <td class=c>N</td> <td><span class=s>Bit 1 = Partner <br>Bit 2 = Family <br>Bit 3 = Friend</span></td></tr> <tr> <td>Face3Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Face4Birthday</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Face4Category</td> <td class=c>N</td> <td><span class=s>Bit 1 = Partner <br>Bit 2 = Family <br>Bit 3 = Friend</span></td></tr> <tr class=b> <td>Face4Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Face5Birthday</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Face5Category</td> <td class=c>N</td> <td><span class=s>Bit 1 = Partner <br>Bit 2 = Family <br>Bit 3 = Friend</span></td></tr> <tr> <td>Face5Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Face6Birthday</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Face6Category</td> <td class=c>N</td> <td><span class=s>Bit 1 = Partner <br>Bit 2 = Family <br>Bit 3 = Friend</span></td></tr> <tr class=b> <td>Face6Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Face7Birthday</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Face7Category</td> <td class=c>N</td> <td><span class=s>Bit 1 = Partner <br>Bit 2 = Family <br>Bit 3 = Friend</span></td></tr> <tr> <td>Face7Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Face8Birthday</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Face8Category</td> <td class=c>N</td> <td><span class=s>Bit 1 = Partner <br>Bit 2 = Family <br>Bit 3 = Friend</span></td></tr> <tr class=b> <td>Face8Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='RAF'>FujiFilm RAF Tags</a></h2> <p>FujiFilm RAF images contain meta information stored in a proprietary FujiFilm RAF format, as well as EXIF information stored inside an embedded JPEG preview image. The table below lists tags currently decoded from the RAF-format information.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0100 = 256'>0x0100</td> <td>RawImageFullSize</td> <td class=c>N</td> <td><span class=s><span class=n>(including borders)</span></span></td></tr> <tr class=b> <td title='0x0121 = 289'>0x0121</td> <td>RawImageSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0130 = 304'>0x0130</td> <td>FujiLayout</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0131 = 305'>0x0131</td> <td>XTransLayout</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2000 = 8192'>0x2000</td> <td>WB_GRGBLevelsAuto</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2100 = 8448'>0x2100</td> <td>WB_GRGBLevelsDaylight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2200 = 8704'>0x2200</td> <td>WB_GRGBLevelsCloudy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2300 = 8960'>0x2300</td> <td>WB_GRGBLevelsDaylightFluor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2301 = 8961'>0x2301</td> <td>WB_GRGBLevelsDayWhiteFluor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2302 = 8962'>0x2302</td> <td>WB_GRGBLevelsWhiteFluorescent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2310 = 8976'>0x2310</td> <td>WB_GRGBLevelsWarmWhiteFluor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2311 = 8977'>0x2311</td> <td>WB_GRGBLevelsLivingRoomWarmWhiteFluor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2400 = 9216'>0x2400</td> <td>WB_GRGBLevelsTungsten</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2ff0 = 12272'>0x2ff0</td> <td>WB_GRGBLevels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x9650 = 38480'>0x9650</td> <td>RawExposureBias</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc000 = 49152'>0xc000</td> <td>RAFData</td> <td class=c>-</td> <td>--&gt; <a href='FujiFilm.html#RAFData'>FujiFilm RAFData Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='RAFData'>FujiFilm RAFData Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>RawImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>RawImageWidth <br>RawImageHeight</td> <td class=c>N<br>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>RawImageWidth <br>RawImageHeight</td> <td class=c>N<br>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>RawImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='IFD'>FujiFilm IFD Tags</a></h2> <p>Tags found in the FujiIFD information of RAF images from some models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0xf000 = 61440'>0xf000</td> <td>FujiIFD</td> <td class=c>-</td> <td>--&gt; <a href='FujiFilm.html#IFD'>FujiFilm IFD Tags</a></td></tr> <tr class=b> <td title='0xf001 = 61441'>0xf001</td> <td>RawImageFullWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xf002 = 61442'>0xf002</td> <td>RawImageFullHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xf003 = 61443'>0xf003</td> <td>BitsPerSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xf007 = 61447'>0xf007</td> <td>StripOffsets</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xf008 = 61448'>0xf008</td> <td>StripByteCounts</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xf00a = 61450'>0xf00a</td> <td>BlackLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xf00c = 61452'>0xf00c</td> <td>WB_GRBLevelsStandard</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xf00d = 61453'>0xf00d</td> <td>WB_GRBLevelsAuto</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xf00e = 61454'>0xf00e</td> <td>WB_GRBLevels</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FFMV'>FujiFilm FFMV Tags</a></h2> <p>Information found in the FFMV atom of MOV videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>MovieStreamName</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MOV'>FujiFilm MOV Tags</a></h2> <p>This information is found in MOV videos from some FujiFilm cameras.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='46 = 0x2e'>46</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='58 = 0x3a'>58</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 22, 2016</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/GE.html����������������������������������������������������������000644 �000765 �000024 �00000002161 11502143755 020212� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>GE Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>GE Tags</h2> <p>This table lists tags found in the maker notes of some General Imaging camera models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0202 = 514'>0x0202</td> <td>Macro</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x0207 = 519'>0x0207</td> <td>GEModel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0300 = 768'>0x0300</td> <td>GEMake</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Dec 15, 2010</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/GeoTiff.html�����������������������������������������������������000644 �000765 �000024 �00000215150 12527350231 021243� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>GeoTiff Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>GeoTiff Tags</h2> <p> ExifTool extracts the following tags from GeoTIFF images. See <a href="http://www.remotesensing.org/geotiff/spec/geotiffhome.html">http://www.remotesensing.org/geotiff/spec/geotiffhome.html</a> for the complete GeoTIFF specification. Also included in the table below are ChartTIFF tags (see <a href="http://www.charttiff.com/whitepapers.shtml">http://www.charttiff.com/whitepapers.shtml</a>). GeoTIFF tags are not writable individually, but they may be copied en mass via the block tags GeoTiffDirectory, GeoTiffDoubleParams and GeoTiffAsciiParams. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>GeoTiffVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0400 = 1024'>0x0400</td> <td>GTModelType</td> <td class=c>N</td> <td><span class=s>1 = Projected <br>2 = Geographic <br>3 = Geocentric <br>32767 = User Defined</span></td></tr> <tr> <td title='0x0401 = 1025'>0x0401</td> <td>GTRasterType</td> <td class=c>N</td> <td><span class=s>1 = Pixel Is Area <br>2 = Pixel Is Point <br>32767 = User Defined</span></td></tr> <tr class=b> <td title='0x0402 = 1026'>0x0402</td> <td>GTCitation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0800 = 2048'>0x0800</td> <td>GeographicType</td> <td class=c>N</td> <td><table class=cols><tr> <td>4001 = Airy 1830 <br>4002 = Airy Modified 1849 <br>4003 = Australian National Spheroid <br>4004 = Bessel 1841 <br>4005 = Bessel Modified <br>4006 = Bessel Namibia <br>4007 = Clarke 1858 <br>4008 = Clarke 1866 <br>4009 = Clarke 1866 Michigan <br>4010 = Clarke 1880 Benoit <br>4011 = Clarke 1880 IGN <br>4012 = Clarke 1880 RGS <br>4013 = Clarke 1880 Arc <br>4014 = Clarke 1880 SGA 1922 <br>4015 = Everest 1830 1937 Adjustment <br>4016 = Everest 1830 1967 Definition <br>4017 = Everest 1830 1975 Definition <br>4018 = Everest 1830 Modified <br>4019 = GRS 1980 <br>4020 = Helmert 1906 <br>4021 = Indonesian National Spheroid <br>4022 = International 1924 <br>4023 = International 1967 <br>4024 = Krassowsky 1940 <br>4025 = NWL9D <br>4026 = NWL10D <br>4027 = Plessis 1817 <br>4028 = Struve 1860 <br>4029 = War Office <br>4030 = WGS84 <br>4031 = GEM10C <br>4032 = OSU86F <br>4033 = OSU91A <br>4034 = Clarke 1880 <br>4035 = Sphere <br>4120 = Greek <br>4121 = GGRS87 <br>4123 = KKJ <br>4124 = RT90 <br>4133 = EST92 <br>4201 = Adindan <br>4202 = AGD66 <br>4203 = AGD84 <br>4204 = Ain el Abd <br>4205 = Afgooye <br>4206 = Agadez <br>4207 = Lisbon <br>4208 = Aratu <br>4209 = Arc 1950 <br>4210 = Arc 1960 <br>4211 = Batavia <br>4212 = Barbados <br>4213 = Beduaram <br>4214 = Beijing 1954 <br>4215 = Belge 1950 <br>4216 = Bermuda 1957 <br>4217 = Bern 1898 <br>4218 = Bogota <br>4219 = Bukit Rimpah <br>4220 = Camacupa <br>4221 = Campo Inchauspe <br>4222 = Cape <br>4223 = Carthage <br>4224 = Chua <br>4225 = Corrego Alegre <br>4226 = Cote d Ivoire <br>4227 = Deir ez Zor <br>4228 = Douala <br>4229 = Egypt 1907 <br>4230 = ED50 <br>4231 = ED87 <br>4232 = Fahud <br>4233 = Gandajika 1970 <br>4234 = Garoua <br>4235 = Guyane Francaise <br>4236 = Hu Tzu Shan <br>4237 = HD72 <br>4238 = ID74 <br>4239 = Indian 1954 <br>4240 = Indian 1975 <br>4241 = Jamaica 1875 <br>4242 = JAD69 <br>4243 = Kalianpur <br>4244 = Kandawala <br>4245 = Kertau <br>4246 = KOC <br>4247 = La Canoa <br>4248 = PSAD56 <br>4249 = Lake <br>4250 = Leigon <br>4251 = Liberia 1964 <br>4252 = Lome <br>4253 = Luzon 1911 <br>4254 = Hito XVIII 1963 <br>4255 = Herat North <br>4256 = Mahe 1971 <br>4257 = Makassar <br>4258 = EUREF89 <br>4259 = Malongo 1987 <br>4260 = Manoca <br>4261 = Merchich <br>4262 = Massawa <br>4263 = Minna <br>4264 = Mhast <br>4265 = Monte Mario <br>4266 = M poraloko <br>4267 = NAD27 <br>4268 = NAD Michigan <br>4269 = NAD83 <br>4270 = Nahrwan 1967 <br>4271 = Naparima 1972 <br>4272 = GD49 <br>4273 = NGO 1948 <br>4274 = 73 <br>4275 = NTF <br>4276 = NSWC 9Z 2 <br>4277 = OSGB 1936 <br>4278 = OSGB70 <br>4279 = OS SN80 <br>4280 = Padang <br>4281 = Palestine 1923 <br>4282 = Pointe Noire <br>4283 = GDA94 <br>4284 = Pulkovo 1942 <br>4285 = Qatar <br>4286 = Qatar 1948 <br>4287 = Qornoq <br>4288 = Loma Quintana <br>4289 = Amersfoort <br>4290 = RT38 <br>4291 = SAD69 <br>4292 = Sapper Hill 1943 <br>4293 = Schwarzeck <br>4294 = Segora <br>4295 = Serindung <br>4296 = Sudan <br>4297 = Tananarive <br>4298 = Timbalai 1948 <br>4299 = TM65 <br>4300 = TM75 <br>4301 = Tokyo <br>4302 = Trinidad 1903 <br>4303 = TC 1948 <br>4304 = Voirol 1875 <br>4305 = Voirol Unifie <br>4306 = Bern 1938 <br>4307 = Nord Sahara 1959 <br>4308 = Stockholm 1938 <br>4309 = Yacare <br>4310 = Yoff <br>4311 = Zanderij <br>4312 = MGI <br>4313 = Belge 1972 <br>4314 = DHDN <br>4315 = Conakry 1905 <br>4317 = Dealul Piscului 1970 <br>4322 = WGS 72 <br>4324 = WGS 72BE <br>4326 = WGS 84 <br>4801 = Bern 1898 Bern <br>4802 = Bogota Bogota <br>4803 = Lisbon Lisbon <br>4804 = Makassar Jakarta <br>4805 = MGI Ferro <br>4806 = Monte Mario Rome <br>4807 = NTF Paris <br>4808 = Padang Jakarta <br>4809 = Belge 1950 Brussels <br>4810 = Tananarive Paris <br>4811 = Voirol 1875 Paris <br>4812 = Voirol Unifie Paris <br>4813 = Batavia Jakarta <br>4815 = Greek Athens <br>4901 = ATF Paris <br>4902 = NDG Paris <br>32767 = User Defined</td></tr></table> </td></tr> <tr class=b> <td title='0x0801 = 2049'>0x0801</td> <td>GeogCitation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0802 = 2050'>0x0802</td> <td>GeogGeodeticDatum</td> <td class=c>N</td> <td><table class=cols><tr> <td>6001 = Airy 1830 <br>6002 = Airy Modified 1849 <br>6003 = Australian National Spheroid <br>6004 = Bessel 1841 <br>6005 = Bessel Modified <br>6006 = Bessel Namibia <br>6007 = Clarke 1858 <br>6008 = Clarke 1866 <br>6009 = Clarke 1866 Michigan <br>6010 = Clarke 1880 Benoit <br>6011 = Clarke 1880 IGN <br>6012 = Clarke 1880 RGS <br>6013 = Clarke 1880 Arc <br>6014 = Clarke 1880 SGA 1922 <br>6015 = Everest 1830 1937 Adjustment <br>6016 = Everest 1830 1967 Definition <br>6017 = Everest 1830 1975 Definition <br>6018 = Everest 1830 Modified <br>6019 = GRS 1980 <br>6020 = Helmert 1906 <br>6021 = Indonesian National Spheroid <br>6022 = International 1924 <br>6023 = International 1967 <br>6024 = Krassowsky 1960 <br>6025 = NWL9D <br>6026 = NWL10D <br>6027 = Plessis 1817 <br>6028 = Struve 1860 <br>6029 = War Office <br>6030 = WGS84 <br>6031 = GEM10C <br>6032 = OSU86F <br>6033 = OSU91A <br>6034 = Clarke 1880 <br>6035 = Sphere <br>6201 = Adindan <br>6202 = Australian Geodetic Datum 1966 <br>6203 = Australian Geodetic Datum 1984 <br>6204 = Ain el Abd 1970 <br>6205 = Afgooye <br>6206 = Agadez <br>6207 = Lisbon <br>6208 = Aratu <br>6209 = Arc 1950 <br>6210 = Arc 1960 <br>6211 = Batavia <br>6212 = Barbados <br>6213 = Beduaram <br>6214 = Beijing 1954 <br>6215 = Reseau National Belge 1950 <br>6216 = Bermuda 1957 <br>6217 = Bern 1898 <br>6218 = Bogota <br>6219 = Bukit Rimpah <br>6220 = Camacupa <br>6221 = Campo Inchauspe <br>6222 = Cape <br>6223 = Carthage <br>6224 = Chua <br>6225 = Corrego Alegre <br>6226 = Cote d Ivoire <br>6227 = Deir ez Zor <br>6228 = Douala <br>6229 = Egypt 1907 <br>6230 = European Datum 1950 <br>6231 = European Datum 1987 <br>6232 = Fahud <br>6233 = Gandajika 1970 <br>6234 = Garoua <br>6235 = Guyane Francaise <br>6236 = Hu Tzu Shan <br>6237 = Hungarian Datum 1972 <br>6238 = Indonesian Datum 1974 <br>6239 = Indian 1954 <br>6240 = Indian 1975 <br>6241 = Jamaica 1875 <br>6242 = Jamaica 1969 <br>6243 = Kalianpur <br>6244 = Kandawala <br>6245 = Kertau <br>6246 = Kuwait Oil Company <br>6247 = La Canoa <br>6248 = Provisional S American Datum 1956 <br>6249 = Lake <br>6250 = Leigon <br>6251 = Liberia 1964 <br>6252 = Lome <br>6253 = Luzon 1911 <br>6254 = Hito XVIII 1963 <br>6255 = Herat North <br>6256 = Mahe 1971 <br>6257 = Makassar <br>6258 = European Reference System 1989 <br>6259 = Malongo 1987 <br>6260 = Manoca <br>6261 = Merchich <br>6262 = Massawa <br>6263 = Minna <br>6264 = Mhast <br>6265 = Monte Mario <br>6266 = M poraloko <br>6267 = North American Datum 1927 <br>6268 = NAD Michigan <br>6269 = North American Datum 1983 <br>6270 = Nahrwan 1967 <br>6271 = Naparima 1972 <br>6272 = New Zealand Geodetic Datum 1949 <br>6273 = NGO 1948 <br>6274 = Datum 73 <br>6275 = Nouvelle Triangulation Francaise <br>6276 = NSWC 9Z 2 <br>6277 = OSGB 1936 <br>6278 = OSGB 1970 SN <br>6279 = OS SN 1980 <br>6280 = Padang 1884 <br>6281 = Palestine 1923 <br>6282 = Pointe Noire <br>6283 = Geocentric Datum of Australia 1994 <br>6284 = Pulkovo 1942 <br>6285 = Qatar <br>6286 = Qatar 1948 <br>6287 = Qornoq <br>6288 = Loma Quintana <br>6289 = Amersfoort <br>6290 = RT38 <br>6291 = South American Datum 1969 <br>6292 = Sapper Hill 1943 <br>6293 = Schwarzeck <br>6294 = Segora <br>6295 = Serindung <br>6296 = Sudan <br>6297 = Tananarive 1925 <br>6298 = Timbalai 1948 <br>6299 = TM65 <br>6300 = TM75 <br>6301 = Tokyo <br>6302 = Trinidad 1903 <br>6303 = Trucial Coast 1948 <br>6304 = Voirol 1875 <br>6305 = Voirol Unifie 1960 <br>6306 = Bern 1938 <br>6307 = Nord Sahara 1959 <br>6308 = Stockholm 1938 <br>6309 = Yacare <br>6310 = Yoff <br>6311 = Zanderij <br>6312 = Militar Geographische Institut <br>6313 = Reseau National Belge 1972 <br>6314 = Deutsche Hauptdreiecksnetz <br>6315 = Conakry 1905 <br>6317 = Dealul Piscului 1970 <br>6322 = WGS72 <br>6324 = WGS72 Transit Broadcast Ephemeris <br>6326 = WGS84 <br>6901 = Ancienne Triangulation Francaise <br>6902 = Nord de Guerre <br>32767 = User Defined</td></tr></table> </td></tr> <tr class=b> <td title='0x0803 = 2051'>0x0803</td> <td>GeogPrimeMeridian</td> <td class=c>N</td> <td><table class=cols><tr> <td>8901 = Greenwich <br>8902 = Lisbon <br>8903 = Paris <br>8904 = Bogota <br>8905 = Madrid <br>8906 = Rome</td><td>&nbsp;&nbsp;</td> <td>8907 = Bern <br>8908 = Jakarta <br>8909 = Ferro <br>8910 = Brussels <br>8911 = Stockholm <br>32767 = User Defined</td></tr></table> </td></tr> <tr> <td title='0x0804 = 2052'>0x0804</td> <td>GeogLinearUnits</td> <td class=c>N</td> <td>--&gt; <a href='GeoTiff.html#Units'>GeoTiff Units Values</a></td></tr> <tr class=b> <td title='0x0805 = 2053'>0x0805</td> <td>GeogLinearUnitSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0806 = 2054'>0x0806</td> <td>GeogAngularUnits</td> <td class=c>N</td> <td>--&gt; <a href='GeoTiff.html#Units'>GeoTiff Units Values</a></td></tr> <tr class=b> <td title='0x0807 = 2055'>0x0807</td> <td>GeogAngularUnitSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0808 = 2056'>0x0808</td> <td>GeogEllipsoid</td> <td class=c>N</td> <td><table class=cols><tr> <td>7001 = Airy 1830 <br>7002 = Airy Modified 1849 <br>7003 = Australian National Spheroid <br>7004 = Bessel 1841 <br>7005 = Bessel Modified <br>7006 = Bessel Namibia <br>7007 = Clarke 1858 <br>7008 = Clarke 1866 <br>7009 = Clarke 1866 Michigan <br>7010 = Clarke 1880 Benoit <br>7011 = Clarke 1880 IGN <br>7012 = Clarke 1880 RGS <br>7013 = Clarke 1880 Arc <br>7014 = Clarke 1880 SGA 1922 <br>7015 = Everest 1830 1937 Adjustment <br>7016 = Everest 1830 1967 Definition <br>7017 = Everest 1830 1975 Definition <br>7018 = Everest 1830 Modified <br>7019 = GRS 1980 <br>7020 = Helmert 1906 <br>7021 = Indonesian National Spheroid <br>7022 = International 1924 <br>7023 = International 1967 <br>7024 = Krassowsky 1940 <br>7025 = NWL 9D <br>7026 = NWL 10D <br>7027 = Plessis 1817 <br>7028 = Struve 1860 <br>7029 = War Office <br>7030 = WGS 84 <br>7031 = GEM 10C <br>7032 = OSU86F <br>7033 = OSU91A <br>7034 = Clarke 1880 <br>7035 = Sphere <br>32767 = User Defined</td></tr></table> </td></tr> <tr class=b> <td title='0x0809 = 2057'>0x0809</td> <td>GeogSemiMajorAxis</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x080a = 2058'>0x080a</td> <td>GeogSemiMinorAxis</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x080b = 2059'>0x080b</td> <td>GeogInvFlattening</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x080c = 2060'>0x080c</td> <td>GeogAzimuthUnits</td> <td class=c>N</td> <td>--&gt; <a href='GeoTiff.html#Units'>GeoTiff Units Values</a></td></tr> <tr class=b> <td title='0x080d = 2061'>0x080d</td> <td>GeogPrimeMeridianLong</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x080e = 2062'>0x080e</td> <td>GeogToWGS84</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0c00 = 3072'>0x0c00</td> <td>ProjectedCSType</td> <td class=c>N</td> <td><table class=cols><tr> <td>2100 = GGRS87 Greek Grid <br>2176 = ETRS89 Poland CS2000 zone 5 <br>2177 = ETRS89 Poland CS2000 zone 7 <br>2178 = ETRS89 Poland CS2000 zone 8 <br>2180 = ETRS89 Poland CS92 <br>2204 = NAD27 Tennessee <br>2205 = NAD83 Kentucky North <br>2391 = KKJ Finland zone 1 <br>2392 = KKJ Finland zone 2 <br>2393 = KKJ Finland zone 3 <br>2394 = KKJ Finland zone 4 <br>2400 = RT90 2 5 gon W <br>2600 = Lietuvos Koordinoei Sistema 1994 <br>3053 = Hjorsey 1955 Lambert <br>3057 = ISN93 Lambert 1993 <br>3300 = Estonian Coordinate System of 1992 <br>20137 = Adindan UTM zone 37N <br>20138 = Adindan UTM zone 38N <br>20248 = AGD66 AMG zone 48 <br>20249 = AGD66 AMG zone 49 <br>20250 = AGD66 AMG zone 50 <br>20251 = AGD66 AMG zone 51 <br>20252 = AGD66 AMG zone 52 <br>20253 = AGD66 AMG zone 53 <br>20254 = AGD66 AMG zone 54 <br>20255 = AGD66 AMG zone 55 <br>20256 = AGD66 AMG zone 56 <br>20257 = AGD66 AMG zone 57 <br>20258 = AGD66 AMG zone 58 <br>20348 = AGD84 AMG zone 48 <br>20349 = AGD84 AMG zone 49 <br>20350 = AGD84 AMG zone 50 <br>20351 = AGD84 AMG zone 51 <br>20352 = AGD84 AMG zone 52 <br>20353 = AGD84 AMG zone 53 <br>20354 = AGD84 AMG zone 54 <br>20355 = AGD84 AMG zone 55 <br>20356 = AGD84 AMG zone 56 <br>20357 = AGD84 AMG zone 57 <br>20358 = AGD84 AMG zone 58 <br>20437 = Ain el Abd UTM zone 37N <br>20438 = Ain el Abd UTM zone 38N <br>20439 = Ain el Abd UTM zone 39N <br>20499 = Ain el Abd Bahrain Grid <br>20538 = Afgooye UTM zone 38N <br>20539 = Afgooye UTM zone 39N <br>20700 = Lisbon Portugese Grid <br>20822 = Aratu UTM zone 22S <br>20823 = Aratu UTM zone 23S <br>20824 = Aratu UTM zone 24S <br>20973 = Arc 1950 Lo13 <br>20975 = Arc 1950 Lo15 <br>20977 = Arc 1950 Lo17 <br>20979 = Arc 1950 Lo19 <br>20981 = Arc 1950 Lo21 <br>20983 = Arc 1950 Lo23 <br>20985 = Arc 1950 Lo25 <br>20987 = Arc 1950 Lo27 <br>20989 = Arc 1950 Lo29 <br>20991 = Arc 1950 Lo31 <br>20993 = Arc 1950 Lo33 <br>20995 = Arc 1950 Lo35 <br>21100 = Batavia NEIEZ <br>21148 = Batavia UTM zone 48S <br>21149 = Batavia UTM zone 49S <br>21150 = Batavia UTM zone 50S <br>21413 = Beijing Gauss zone 13 <br>21414 = Beijing Gauss zone 14 <br>21415 = Beijing Gauss zone 15 <br>21416 = Beijing Gauss zone 16 <br>21417 = Beijing Gauss zone 17 <br>21418 = Beijing Gauss zone 18 <br>21419 = Beijing Gauss zone 19 <br>21420 = Beijing Gauss zone 20 <br>21421 = Beijing Gauss zone 21 <br>21422 = Beijing Gauss zone 22 <br>21423 = Beijing Gauss zone 23 <br>21473 = Beijing Gauss 13N <br>21474 = Beijing Gauss 14N <br>21475 = Beijing Gauss 15N <br>21476 = Beijing Gauss 16N <br>21477 = Beijing Gauss 17N <br>21478 = Beijing Gauss 18N <br>21479 = Beijing Gauss 19N <br>21480 = Beijing Gauss 20N <br>21481 = Beijing Gauss 21N <br>21482 = Beijing Gauss 22N <br>21483 = Beijing Gauss 23N <br>21500 = Belge Lambert 50 <br>21790 = Bern 1898 Swiss Old <br>21817 = Bogota UTM zone 17N <br>21818 = Bogota UTM zone 18N <br>21891 = Bogota Colombia 3W <br>21892 = Bogota Colombia Bogota <br>21893 = Bogota Colombia 3E <br>21894 = Bogota Colombia 6E <br>22032 = Camacupa UTM 32S <br>22033 = Camacupa UTM 33S <br>22191 = C Inchauspe Argentina 1 <br>22192 = C Inchauspe Argentina 2 <br>22193 = C Inchauspe Argentina 3 <br>22194 = C Inchauspe Argentina 4 <br>22195 = C Inchauspe Argentina 5 <br>22196 = C Inchauspe Argentina 6 <br>22197 = C Inchauspe Argentina 7 <br>22332 = Carthage UTM zone 32N <br>22391 = Carthage Nord Tunisie <br>22392 = Carthage Sud Tunisie <br>22523 = Corrego Alegre UTM 23S <br>22524 = Corrego Alegre UTM 24S <br>22832 = Douala UTM zone 32N <br>22992 = Egypt 1907 Red Belt <br>22993 = Egypt 1907 Purple Belt <br>22994 = Egypt 1907 Ext Purple <br>23028 = ED50 UTM zone 28N <br>23029 = ED50 UTM zone 29N <br>23030 = ED50 UTM zone 30N <br>23031 = ED50 UTM zone 31N <br>23032 = ED50 UTM zone 32N <br>23033 = ED50 UTM zone 33N <br>23034 = ED50 UTM zone 34N <br>23035 = ED50 UTM zone 35N <br>23036 = ED50 UTM zone 36N <br>23037 = ED50 UTM zone 37N <br>23038 = ED50 UTM zone 38N <br>23239 = Fahud UTM zone 39N <br>23240 = Fahud UTM zone 40N <br>23433 = Garoua UTM zone 33N <br>23700 = HD72 EOV <br>23846 = ID74 UTM zone 46N <br>23847 = ID74 UTM zone 47N <br>23848 = ID74 UTM zone 48N <br>23849 = ID74 UTM zone 49N <br>23850 = ID74 UTM zone 50N <br>23851 = ID74 UTM zone 51N <br>23852 = ID74 UTM zone 52N <br>23853 = ID74 UTM zone 53N <br>23886 = ID74 UTM zone 46S <br>23887 = ID74 UTM zone 47S <br>23888 = ID74 UTM zone 48S <br>23889 = ID74 UTM zone 49S <br>23890 = ID74 UTM zone 50S <br>23891 = ID74 UTM zone 51S <br>23892 = ID74 UTM zone 52S <br>23893 = ID74 UTM zone 53S <br>23894 = ID74 UTM zone 54S <br>23947 = Indian 1954 UTM 47N <br>23948 = Indian 1954 UTM 48N <br>24047 = Indian 1975 UTM 47N <br>24048 = Indian 1975 UTM 48N <br>24100 = Jamaica 1875 Old Grid <br>24200 = JAD69 Jamaica Grid <br>24370 = Kalianpur India 0 <br>24371 = Kalianpur India I <br>24372 = Kalianpur India IIa <br>24373 = Kalianpur India IIIa <br>24374 = Kalianpur India IVa <br>24382 = Kalianpur India IIb <br>24383 = Kalianpur India IIIb <br>24384 = Kalianpur India IVb <br>24500 = Kertau Singapore Grid <br>24547 = Kertau UTM zone 47N <br>24548 = Kertau UTM zone 48N <br>24720 = La Canoa UTM zone 20N <br>24721 = La Canoa UTM zone 21N <br>24818 = PSAD56 UTM zone 18N <br>24819 = PSAD56 UTM zone 19N <br>24820 = PSAD56 UTM zone 20N <br>24821 = PSAD56 UTM zone 21N <br>24877 = PSAD56 UTM zone 17S <br>24878 = PSAD56 UTM zone 18S <br>24879 = PSAD56 UTM zone 19S <br>24880 = PSAD56 UTM zone 20S <br>24891 = PSAD56 Peru west zone <br>24892 = PSAD56 Peru central <br>24893 = PSAD56 Peru east zone <br>25000 = Leigon Ghana Grid <br>25231 = Lome UTM zone 31N <br>25391 = Luzon Philippines I <br>25392 = Luzon Philippines II <br>25393 = Luzon Philippines III <br>25394 = Luzon Philippines IV <br>25395 = Luzon Philippines V <br>25700 = Makassar NEIEZ <br>25932 = Malongo 1987 UTM 32S <br>26191 = Merchich Nord Maroc <br>26192 = Merchich Sud Maroc <br>26193 = Merchich Sahara <br>26237 = Massawa UTM zone 37N <br>26331 = Minna UTM zone 31N <br>26332 = Minna UTM zone 32N <br>26391 = Minna Nigeria West <br>26392 = Minna Nigeria Mid Belt <br>26393 = Minna Nigeria East <br>26432 = Mhast UTM zone 32S <br>26591 = Monte Mario Italy 1 <br>26592 = Monte Mario Italy 2 <br>26632 = M poraloko UTM 32N <br>26692 = M poraloko UTM 32S <br>26703 = NAD27 UTM zone 3N <br>26704 = NAD27 UTM zone 4N <br>26705 = NAD27 UTM zone 5N <br>26706 = NAD27 UTM zone 6N <br>26707 = NAD27 UTM zone 7N <br>26708 = NAD27 UTM zone 8N <br>26709 = NAD27 UTM zone 9N <br>26710 = NAD27 UTM zone 10N <br>26711 = NAD27 UTM zone 11N <br>26712 = NAD27 UTM zone 12N <br>26713 = NAD27 UTM zone 13N <br>26714 = NAD27 UTM zone 14N <br>26715 = NAD27 UTM zone 15N <br>26716 = NAD27 UTM zone 16N <br>26717 = NAD27 UTM zone 17N <br>26718 = NAD27 UTM zone 18N <br>26719 = NAD27 UTM zone 19N <br>26720 = NAD27 UTM zone 20N <br>26721 = NAD27 UTM zone 21N <br>26722 = NAD27 UTM zone 22N <br>26729 = NAD27 Alabama East <br>26730 = NAD27 Alabama West <br>26731 = NAD27 Alaska zone 1 <br>26732 = NAD27 Alaska zone 2 <br>26733 = NAD27 Alaska zone 3 <br>26734 = NAD27 Alaska zone 4 <br>26735 = NAD27 Alaska zone 5 <br>26736 = NAD27 Alaska zone 6 <br>26737 = NAD27 Alaska zone 7 <br>26738 = NAD27 Alaska zone 8 <br>26739 = NAD27 Alaska zone 9 <br>26740 = NAD27 Alaska zone 10 <br>26741 = NAD27 California I <br>26742 = NAD27 California II <br>26743 = NAD27 California III <br>26744 = NAD27 California IV <br>26745 = NAD27 California V <br>26746 = NAD27 California VI <br>26747 = NAD27 California VII <br>26748 = NAD27 Arizona East <br>26749 = NAD27 Arizona Central <br>26750 = NAD27 Arizona West <br>26751 = NAD27 Arkansas North <br>26752 = NAD27 Arkansas South <br>26753 = NAD27 Colorado North <br>26754 = NAD27 Colorado Central <br>26755 = NAD27 Colorado South <br>26756 = NAD27 Connecticut <br>26757 = NAD27 Delaware <br>26758 = NAD27 Florida East <br>26759 = NAD27 Florida West <br>26760 = NAD27 Florida North <br>26761 = NAD27 Hawaii zone 1 <br>26762 = NAD27 Hawaii zone 2 <br>26763 = NAD27 Hawaii zone 3 <br>26764 = NAD27 Hawaii zone 4 <br>26765 = NAD27 Hawaii zone 5 <br>26766 = NAD27 Georgia East <br>26767 = NAD27 Georgia West <br>26768 = NAD27 Idaho East <br>26769 = NAD27 Idaho Central <br>26770 = NAD27 Idaho West <br>26771 = NAD27 Illinois East <br>26772 = NAD27 Illinois West <br>26773 = NAD27 Indiana East <br>26774 = NAD27 Indiana West <br>26775 = NAD27 Iowa North <br>26776 = NAD27 Iowa South <br>26777 = NAD27 Kansas North <br>26778 = NAD27 Kansas South <br>26779 = NAD27 Kentucky North <br>26780 = NAD27 Kentucky South <br>26781 = NAD27 Louisiana North <br>26782 = NAD27 Louisiana South <br>26783 = NAD27 Maine East <br>26784 = NAD27 Maine West <br>26785 = NAD27 Maryland <br>26786 = NAD27 Massachusetts <br>26787 = NAD27 Massachusetts Is <br>26788 = NAD27 Michigan North <br>26789 = NAD27 Michigan Central <br>26790 = NAD27 Michigan South <br>26791 = NAD27 Minnesota North <br>26792 = NAD27 Minnesota Cent <br>26793 = NAD27 Minnesota South <br>26794 = NAD27 Mississippi East <br>26795 = NAD27 Mississippi West <br>26796 = NAD27 Missouri East <br>26797 = NAD27 Missouri Central <br>26798 = NAD27 Missouri West <br>26801 = NAD Michigan Michigan East <br>26802 = NAD Michigan Michigan Old Central <br>26803 = NAD Michigan Michigan West <br>26903 = NAD83 UTM zone 3N <br>26904 = NAD83 UTM zone 4N <br>26905 = NAD83 UTM zone 5N <br>26906 = NAD83 UTM zone 6N <br>26907 = NAD83 UTM zone 7N <br>26908 = NAD83 UTM zone 8N <br>26909 = NAD83 UTM zone 9N <br>26910 = NAD83 UTM zone 10N <br>26911 = NAD83 UTM zone 11N <br>26912 = NAD83 UTM zone 12N <br>26913 = NAD83 UTM zone 13N <br>26914 = NAD83 UTM zone 14N <br>26915 = NAD83 UTM zone 15N <br>26916 = NAD83 UTM zone 16N <br>26917 = NAD83 UTM zone 17N <br>26918 = NAD83 UTM zone 18N <br>26919 = NAD83 UTM zone 19N <br>26920 = NAD83 UTM zone 20N <br>26921 = NAD83 UTM zone 21N <br>26922 = NAD83 UTM zone 22N <br>26923 = NAD83 UTM zone 23N <br>26929 = NAD83 Alabama East <br>26930 = NAD83 Alabama West <br>26931 = NAD83 Alaska zone 1 <br>26932 = NAD83 Alaska zone 2 <br>26933 = NAD83 Alaska zone 3 <br>26934 = NAD83 Alaska zone 4 <br>26935 = NAD83 Alaska zone 5 <br>26936 = NAD83 Alaska zone 6 <br>26937 = NAD83 Alaska zone 7 <br>26938 = NAD83 Alaska zone 8 <br>26939 = NAD83 Alaska zone 9 <br>26940 = NAD83 Alaska zone 10 <br>26941 = NAD83 California 1 <br>26942 = NAD83 California 2 <br>26943 = NAD83 California 3 <br>26944 = NAD83 California 4 <br>26945 = NAD83 California 5 <br>26946 = NAD83 California 6 <br>26948 = NAD83 Arizona East <br>26949 = NAD83 Arizona Central <br>26950 = NAD83 Arizona West <br>26951 = NAD83 Arkansas North <br>26952 = NAD83 Arkansas South <br>26953 = NAD83 Colorado North <br>26954 = NAD83 Colorado Central <br>26955 = NAD83 Colorado South <br>26956 = NAD83 Connecticut <br>26957 = NAD83 Delaware <br>26958 = NAD83 Florida East <br>26959 = NAD83 Florida West <br>26960 = NAD83 Florida North <br>26961 = NAD83 Hawaii zone 1 <br>26962 = NAD83 Hawaii zone 2 <br>26963 = NAD83 Hawaii zone 3 <br>26964 = NAD83 Hawaii zone 4 <br>26965 = NAD83 Hawaii zone 5 <br>26966 = NAD83 Georgia East <br>26967 = NAD83 Georgia West <br>26968 = NAD83 Idaho East <br>26969 = NAD83 Idaho Central <br>26970 = NAD83 Idaho West <br>26971 = NAD83 Illinois East <br>26972 = NAD83 Illinois West <br>26973 = NAD83 Indiana East <br>26974 = NAD83 Indiana West <br>26975 = NAD83 Iowa North <br>26976 = NAD83 Iowa South <br>26977 = NAD83 Kansas North <br>26978 = NAD83 Kansas South <br>26979 = NAD83 Kentucky North <br>26980 = NAD83 Kentucky South <br>26981 = NAD83 Louisiana North <br>26982 = NAD83 Louisiana South <br>26983 = NAD83 Maine East <br>26984 = NAD83 Maine West <br>26985 = NAD83 Maryland <br>26986 = NAD83 Massachusetts <br>26987 = NAD83 Massachusetts Is <br>26988 = NAD83 Michigan North <br>26989 = NAD83 Michigan Central <br>26990 = NAD83 Michigan South <br>26991 = NAD83 Minnesota North <br>26992 = NAD83 Minnesota Cent <br>26993 = NAD83 Minnesota South <br>26994 = NAD83 Mississippi East <br>26995 = NAD83 Mississippi West <br>26996 = NAD83 Missouri East <br>26997 = NAD83 Missouri Central <br>26998 = NAD83 Missouri West <br>27038 = Nahrwan 1967 UTM 38N <br>27039 = Nahrwan 1967 UTM 39N <br>27040 = Nahrwan 1967 UTM 40N <br>27120 = Naparima UTM 20N <br>27200 = GD49 NZ Map Grid <br>27291 = GD49 North Island Grid <br>27292 = GD49 South Island Grid <br>27429 = Datum 73 UTM zone 29N <br>27500 = ATF Nord de Guerre <br>27581 = NTF France I <br>27582 = NTF France II <br>27583 = NTF France III <br>27591 = NTF Nord France <br>27592 = NTF Centre France <br>27593 = NTF Sud France <br>27700 = British National Grid <br>28232 = Point Noire UTM 32S <br>28348 = GDA94 MGA zone 48 <br>28349 = GDA94 MGA zone 49 <br>28350 = GDA94 MGA zone 50 <br>28351 = GDA94 MGA zone 51 <br>28352 = GDA94 MGA zone 52 <br>28353 = GDA94 MGA zone 53 <br>28354 = GDA94 MGA zone 54 <br>28355 = GDA94 MGA zone 55 <br>28356 = GDA94 MGA zone 56 <br>28357 = GDA94 MGA zone 57 <br>28358 = GDA94 MGA zone 58 <br>28404 = Pulkovo Gauss zone 4 <br>28405 = Pulkovo Gauss zone 5 <br>28406 = Pulkovo Gauss zone 6 <br>28407 = Pulkovo Gauss zone 7 <br>28408 = Pulkovo Gauss zone 8 <br>28409 = Pulkovo Gauss zone 9 <br>28410 = Pulkovo Gauss zone 10 <br>28411 = Pulkovo Gauss zone 11 <br>28412 = Pulkovo Gauss zone 12 <br>28413 = Pulkovo Gauss zone 13 <br>28414 = Pulkovo Gauss zone 14 <br>28415 = Pulkovo Gauss zone 15 <br>28416 = Pulkovo Gauss zone 16 <br>28417 = Pulkovo Gauss zone 17 <br>28418 = Pulkovo Gauss zone 18 <br>28419 = Pulkovo Gauss zone 19 <br>28420 = Pulkovo Gauss zone 20 <br>28421 = Pulkovo Gauss zone 21 <br>28422 = Pulkovo Gauss zone 22 <br>28423 = Pulkovo Gauss zone 23 <br>28424 = Pulkovo Gauss zone 24 <br>28425 = Pulkovo Gauss zone 25 <br>28426 = Pulkovo Gauss zone 26 <br>28427 = Pulkovo Gauss zone 27 <br>28428 = Pulkovo Gauss zone 28 <br>28429 = Pulkovo Gauss zone 29 <br>28430 = Pulkovo Gauss zone 30 <br>28431 = Pulkovo Gauss zone 31 <br>28432 = Pulkovo Gauss zone 32 <br>28464 = Pulkovo Gauss 4N <br>28465 = Pulkovo Gauss 5N <br>28466 = Pulkovo Gauss 6N <br>28467 = Pulkovo Gauss 7N <br>28468 = Pulkovo Gauss 8N <br>28469 = Pulkovo Gauss 9N <br>28470 = Pulkovo Gauss 10N <br>28471 = Pulkovo Gauss 11N <br>28472 = Pulkovo Gauss 12N <br>28473 = Pulkovo Gauss 13N <br>28474 = Pulkovo Gauss 14N <br>28475 = Pulkovo Gauss 15N <br>28476 = Pulkovo Gauss 16N <br>28477 = Pulkovo Gauss 17N <br>28478 = Pulkovo Gauss 18N <br>28479 = Pulkovo Gauss 19N <br>28480 = Pulkovo Gauss 20N <br>28481 = Pulkovo Gauss 21N <br>28482 = Pulkovo Gauss 22N <br>28483 = Pulkovo Gauss 23N <br>28484 = Pulkovo Gauss 24N <br>28485 = Pulkovo Gauss 25N <br>28486 = Pulkovo Gauss 26N <br>28487 = Pulkovo Gauss 27N <br>28488 = Pulkovo Gauss 28N <br>28489 = Pulkovo Gauss 29N <br>28490 = Pulkovo Gauss 30N <br>28491 = Pulkovo Gauss 31N <br>28492 = Pulkovo Gauss 32N <br>28600 = Qatar National Grid <br>28991 = RD Netherlands Old <br>28992 = RD Netherlands New <br>29118 = SAD69 UTM zone 18N <br>29119 = SAD69 UTM zone 19N <br>29120 = SAD69 UTM zone 20N <br>29121 = SAD69 UTM zone 21N <br>29122 = SAD69 UTM zone 22N <br>29177 = SAD69 UTM zone 17S <br>29178 = SAD69 UTM zone 18S <br>29179 = SAD69 UTM zone 19S <br>29180 = SAD69 UTM zone 20S <br>29181 = SAD69 UTM zone 21S <br>29182 = SAD69 UTM zone 22S <br>29183 = SAD69 UTM zone 23S <br>29184 = SAD69 UTM zone 24S <br>29185 = SAD69 UTM zone 25S <br>29220 = Sapper Hill UTM 20S <br>29221 = Sapper Hill UTM 21S <br>29333 = Schwarzeck UTM 33S <br>29635 = Sudan UTM zone 35N <br>29636 = Sudan UTM zone 36N <br>29700 = Tananarive Laborde <br>29738 = Tananarive UTM 38S <br>29739 = Tananarive UTM 39S <br>29800 = Timbalai 1948 Borneo <br>29849 = Timbalai 1948 UTM 49N <br>29850 = Timbalai 1948 UTM 50N <br>29900 = TM65 Irish Nat Grid <br>30200 = Trinidad 1903 Trinidad <br>30339 = TC 1948 UTM zone 39N <br>30340 = TC 1948 UTM zone 40N <br>30491 = Voirol N Algerie ancien <br>30492 = Voirol S Algerie ancien <br>30591 = Voirol Unifie N Algerie <br>30592 = Voirol Unifie S Algerie <br>30600 = Bern 1938 Swiss New <br>30729 = Nord Sahara UTM 29N <br>30730 = Nord Sahara UTM 30N <br>30731 = Nord Sahara UTM 31N <br>30732 = Nord Sahara UTM 32N <br>31028 = Yoff UTM zone 28N <br>31121 = Zanderij UTM zone 21N <br>31291 = MGI Austria West <br>31292 = MGI Austria Central <br>31293 = MGI Austria East <br>31300 = Belge Lambert 72 <br>31491 = DHDN Germany zone 1 <br>31492 = DHDN Germany zone 2 <br>31493 = DHDN Germany zone 3 <br>31494 = DHDN Germany zone 4 <br>31495 = DHDN Germany zone 5 <br>31700 = Dealul Piscului 1970 Stereo 70 <br>32001 = NAD27 Montana North <br>32002 = NAD27 Montana Central <br>32003 = NAD27 Montana South <br>32005 = NAD27 Nebraska North <br>32006 = NAD27 Nebraska South <br>32007 = NAD27 Nevada East <br>32008 = NAD27 Nevada Central <br>32009 = NAD27 Nevada West <br>32010 = NAD27 New Hampshire <br>32011 = NAD27 New Jersey <br>32012 = NAD27 New Mexico East <br>32013 = NAD27 New Mexico Cent <br>32014 = NAD27 New Mexico West <br>32015 = NAD27 New York East <br>32016 = NAD27 New York Central <br>32017 = NAD27 New York West <br>32018 = NAD27 New York Long Is <br>32019 = NAD27 North Carolina <br>32020 = NAD27 North Dakota N <br>32021 = NAD27 North Dakota S <br>32022 = NAD27 Ohio North <br>32023 = NAD27 Ohio South <br>32024 = NAD27 Oklahoma North <br>32025 = NAD27 Oklahoma South <br>32026 = NAD27 Oregon North <br>32027 = NAD27 Oregon South <br>32028 = NAD27 Pennsylvania N <br>32029 = NAD27 Pennsylvania S <br>32030 = NAD27 Rhode Island <br>32031 = NAD27 South Carolina N <br>32033 = NAD27 South Carolina S <br>32034 = NAD27 South Dakota N <br>32035 = NAD27 South Dakota S <br>32036 = NAD27 Tennessee <br>32037 = NAD27 Texas North <br>32038 = NAD27 Texas North Cen <br>32039 = NAD27 Texas Central <br>32040 = NAD27 Texas South Cen <br>32041 = NAD27 Texas South <br>32042 = NAD27 Utah North <br>32043 = NAD27 Utah Central <br>32044 = NAD27 Utah South <br>32045 = NAD27 Vermont <br>32046 = NAD27 Virginia North <br>32047 = NAD27 Virginia South <br>32048 = NAD27 Washington North <br>32049 = NAD27 Washington South <br>32050 = NAD27 West Virginia N <br>32051 = NAD27 West Virginia S <br>32052 = NAD27 Wisconsin North <br>32053 = NAD27 Wisconsin Cen <br>32054 = NAD27 Wisconsin South <br>32055 = NAD27 Wyoming East <br>32056 = NAD27 Wyoming E Cen <br>32057 = NAD27 Wyoming W Cen <br>32058 = NAD27 Wyoming West <br>32059 = NAD27 Puerto Rico <br>32060 = NAD27 St Croix <br>32100 = NAD83 Montana <br>32104 = NAD83 Nebraska <br>32107 = NAD83 Nevada East <br>32108 = NAD83 Nevada Central <br>32109 = NAD83 Nevada West <br>32110 = NAD83 New Hampshire <br>32111 = NAD83 New Jersey <br>32112 = NAD83 New Mexico East <br>32113 = NAD83 New Mexico Cent <br>32114 = NAD83 New Mexico West <br>32115 = NAD83 New York East <br>32116 = NAD83 New York Central <br>32117 = NAD83 New York West <br>32118 = NAD83 New York Long Is <br>32119 = NAD83 North Carolina <br>32120 = NAD83 North Dakota N <br>32121 = NAD83 North Dakota S <br>32122 = NAD83 Ohio North <br>32123 = NAD83 Ohio South <br>32124 = NAD83 Oklahoma North <br>32125 = NAD83 Oklahoma South <br>32126 = NAD83 Oregon North <br>32127 = NAD83 Oregon South <br>32128 = NAD83 Pennsylvania N <br>32129 = NAD83 Pennsylvania S <br>32130 = NAD83 Rhode Island <br>32133 = NAD83 South Carolina <br>32134 = NAD83 South Dakota N <br>32135 = NAD83 South Dakota S <br>32136 = NAD83 Tennessee <br>32137 = NAD83 Texas North <br>32138 = NAD83 Texas North Cen <br>32139 = NAD83 Texas Central <br>32140 = NAD83 Texas South Cen <br>32141 = NAD83 Texas South <br>32142 = NAD83 Utah North <br>32143 = NAD83 Utah Central <br>32144 = NAD83 Utah South <br>32145 = NAD83 Vermont <br>32146 = NAD83 Virginia North <br>32147 = NAD83 Virginia South <br>32148 = NAD83 Washington North <br>32149 = NAD83 Washington South <br>32150 = NAD83 West Virginia N <br>32151 = NAD83 West Virginia S <br>32152 = NAD83 Wisconsin North <br>32153 = NAD83 Wisconsin Cen <br>32154 = NAD83 Wisconsin South <br>32155 = NAD83 Wyoming East <br>32156 = NAD83 Wyoming E Cen <br>32157 = NAD83 Wyoming W Cen <br>32158 = NAD83 Wyoming West <br>32161 = NAD83 Puerto Rico Virgin Is <br>32201 = WGS72 UTM zone 1N <br>32202 = WGS72 UTM zone 2N <br>32203 = WGS72 UTM zone 3N <br>32204 = WGS72 UTM zone 4N <br>32205 = WGS72 UTM zone 5N <br>32206 = WGS72 UTM zone 6N <br>32207 = WGS72 UTM zone 7N <br>32208 = WGS72 UTM zone 8N <br>32209 = WGS72 UTM zone 9N <br>32210 = WGS72 UTM zone 10N <br>32211 = WGS72 UTM zone 11N <br>32212 = WGS72 UTM zone 12N <br>32213 = WGS72 UTM zone 13N <br>32214 = WGS72 UTM zone 14N <br>32215 = WGS72 UTM zone 15N <br>32216 = WGS72 UTM zone 16N <br>32217 = WGS72 UTM zone 17N <br>32218 = WGS72 UTM zone 18N <br>32219 = WGS72 UTM zone 19N <br>32220 = WGS72 UTM zone 20N <br>32221 = WGS72 UTM zone 21N <br>32222 = WGS72 UTM zone 22N <br>32223 = WGS72 UTM zone 23N <br>32224 = WGS72 UTM zone 24N <br>32225 = WGS72 UTM zone 25N <br>32226 = WGS72 UTM zone 26N <br>32227 = WGS72 UTM zone 27N <br>32228 = WGS72 UTM zone 28N <br>32229 = WGS72 UTM zone 29N <br>32230 = WGS72 UTM zone 30N <br>32231 = WGS72 UTM zone 31N <br>32232 = WGS72 UTM zone 32N <br>32233 = WGS72 UTM zone 33N <br>32234 = WGS72 UTM zone 34N <br>32235 = WGS72 UTM zone 35N <br>32236 = WGS72 UTM zone 36N <br>32237 = WGS72 UTM zone 37N <br>32238 = WGS72 UTM zone 38N <br>32239 = WGS72 UTM zone 39N <br>32240 = WGS72 UTM zone 40N <br>32241 = WGS72 UTM zone 41N <br>32242 = WGS72 UTM zone 42N <br>32243 = WGS72 UTM zone 43N <br>32244 = WGS72 UTM zone 44N <br>32245 = WGS72 UTM zone 45N <br>32246 = WGS72 UTM zone 46N <br>32247 = WGS72 UTM zone 47N <br>32248 = WGS72 UTM zone 48N <br>32249 = WGS72 UTM zone 49N <br>32250 = WGS72 UTM zone 50N <br>32251 = WGS72 UTM zone 51N <br>32252 = WGS72 UTM zone 52N <br>32253 = WGS72 UTM zone 53N <br>32254 = WGS72 UTM zone 54N <br>32255 = WGS72 UTM zone 55N <br>32256 = WGS72 UTM zone 56N <br>32257 = WGS72 UTM zone 57N <br>32258 = WGS72 UTM zone 58N <br>32259 = WGS72 UTM zone 59N <br>32260 = WGS72 UTM zone 60N <br>32301 = WGS72 UTM zone 1S <br>32302 = WGS72 UTM zone 2S <br>32303 = WGS72 UTM zone 3S <br>32304 = WGS72 UTM zone 4S <br>32305 = WGS72 UTM zone 5S <br>32306 = WGS72 UTM zone 6S <br>32307 = WGS72 UTM zone 7S <br>32308 = WGS72 UTM zone 8S <br>32309 = WGS72 UTM zone 9S <br>32310 = WGS72 UTM zone 10S <br>32311 = WGS72 UTM zone 11S <br>32312 = WGS72 UTM zone 12S <br>32313 = WGS72 UTM zone 13S <br>32314 = WGS72 UTM zone 14S <br>32315 = WGS72 UTM zone 15S <br>32316 = WGS72 UTM zone 16S <br>32317 = WGS72 UTM zone 17S <br>32318 = WGS72 UTM zone 18S <br>32319 = WGS72 UTM zone 19S <br>32320 = WGS72 UTM zone 20S <br>32321 = WGS72 UTM zone 21S <br>32322 = WGS72 UTM zone 22S <br>32323 = WGS72 UTM zone 23S <br>32324 = WGS72 UTM zone 24S <br>32325 = WGS72 UTM zone 25S <br>32326 = WGS72 UTM zone 26S <br>32327 = WGS72 UTM zone 27S <br>32328 = WGS72 UTM zone 28S <br>32329 = WGS72 UTM zone 29S <br>32330 = WGS72 UTM zone 30S <br>32331 = WGS72 UTM zone 31S <br>32332 = WGS72 UTM zone 32S <br>32333 = WGS72 UTM zone 33S <br>32334 = WGS72 UTM zone 34S <br>32335 = WGS72 UTM zone 35S <br>32336 = WGS72 UTM zone 36S <br>32337 = WGS72 UTM zone 37S <br>32338 = WGS72 UTM zone 38S <br>32339 = WGS72 UTM zone 39S <br>32340 = WGS72 UTM zone 40S <br>32341 = WGS72 UTM zone 41S <br>32342 = WGS72 UTM zone 42S <br>32343 = WGS72 UTM zone 43S <br>32344 = WGS72 UTM zone 44S <br>32345 = WGS72 UTM zone 45S <br>32346 = WGS72 UTM zone 46S <br>32347 = WGS72 UTM zone 47S <br>32348 = WGS72 UTM zone 48S <br>32349 = WGS72 UTM zone 49S <br>32350 = WGS72 UTM zone 50S <br>32351 = WGS72 UTM zone 51S <br>32352 = WGS72 UTM zone 52S <br>32353 = WGS72 UTM zone 53S <br>32354 = WGS72 UTM zone 54S <br>32355 = WGS72 UTM zone 55S <br>32356 = WGS72 UTM zone 56S <br>32357 = WGS72 UTM zone 57S <br>32358 = WGS72 UTM zone 58S <br>32359 = WGS72 UTM zone 59S <br>32360 = WGS72 UTM zone 60S <br>32401 = WGS72BE UTM zone 1N <br>32402 = WGS72BE UTM zone 2N <br>32403 = WGS72BE UTM zone 3N <br>32404 = WGS72BE UTM zone 4N <br>32405 = WGS72BE UTM zone 5N <br>32406 = WGS72BE UTM zone 6N <br>32407 = WGS72BE UTM zone 7N <br>32408 = WGS72BE UTM zone 8N <br>32409 = WGS72BE UTM zone 9N <br>32410 = WGS72BE UTM zone 10N <br>32411 = WGS72BE UTM zone 11N <br>32412 = WGS72BE UTM zone 12N <br>32413 = WGS72BE UTM zone 13N <br>32414 = WGS72BE UTM zone 14N <br>32415 = WGS72BE UTM zone 15N <br>32416 = WGS72BE UTM zone 16N <br>32417 = WGS72BE UTM zone 17N <br>32418 = WGS72BE UTM zone 18N <br>32419 = WGS72BE UTM zone 19N <br>32420 = WGS72BE UTM zone 20N <br>32421 = WGS72BE UTM zone 21N <br>32422 = WGS72BE UTM zone 22N <br>32423 = WGS72BE UTM zone 23N <br>32424 = WGS72BE UTM zone 24N <br>32425 = WGS72BE UTM zone 25N <br>32426 = WGS72BE UTM zone 26N <br>32427 = WGS72BE UTM zone 27N <br>32428 = WGS72BE UTM zone 28N <br>32429 = WGS72BE UTM zone 29N <br>32430 = WGS72BE UTM zone 30N <br>32431 = WGS72BE UTM zone 31N <br>32432 = WGS72BE UTM zone 32N <br>32433 = WGS72BE UTM zone 33N <br>32434 = WGS72BE UTM zone 34N <br>32435 = WGS72BE UTM zone 35N <br>32436 = WGS72BE UTM zone 36N <br>32437 = WGS72BE UTM zone 37N <br>32438 = WGS72BE UTM zone 38N <br>32439 = WGS72BE UTM zone 39N <br>32440 = WGS72BE UTM zone 40N <br>32441 = WGS72BE UTM zone 41N <br>32442 = WGS72BE UTM zone 42N <br>32443 = WGS72BE UTM zone 43N <br>32444 = WGS72BE UTM zone 44N <br>32445 = WGS72BE UTM zone 45N <br>32446 = WGS72BE UTM zone 46N <br>32447 = WGS72BE UTM zone 47N <br>32448 = WGS72BE UTM zone 48N <br>32449 = WGS72BE UTM zone 49N <br>32450 = WGS72BE UTM zone 50N <br>32451 = WGS72BE UTM zone 51N <br>32452 = WGS72BE UTM zone 52N <br>32453 = WGS72BE UTM zone 53N <br>32454 = WGS72BE UTM zone 54N <br>32455 = WGS72BE UTM zone 55N <br>32456 = WGS72BE UTM zone 56N <br>32457 = WGS72BE UTM zone 57N <br>32458 = WGS72BE UTM zone 58N <br>32459 = WGS72BE UTM zone 59N <br>32460 = WGS72BE UTM zone 60N <br>32501 = WGS72BE UTM zone 1S <br>32502 = WGS72BE UTM zone 2S <br>32503 = WGS72BE UTM zone 3S <br>32504 = WGS72BE UTM zone 4S <br>32505 = WGS72BE UTM zone 5S <br>32506 = WGS72BE UTM zone 6S <br>32507 = WGS72BE UTM zone 7S <br>32508 = WGS72BE UTM zone 8S <br>32509 = WGS72BE UTM zone 9S <br>32510 = WGS72BE UTM zone 10S <br>32511 = WGS72BE UTM zone 11S <br>32512 = WGS72BE UTM zone 12S <br>32513 = WGS72BE UTM zone 13S <br>32514 = WGS72BE UTM zone 14S <br>32515 = WGS72BE UTM zone 15S <br>32516 = WGS72BE UTM zone 16S <br>32517 = WGS72BE UTM zone 17S <br>32518 = WGS72BE UTM zone 18S <br>32519 = WGS72BE UTM zone 19S <br>32520 = WGS72BE UTM zone 20S <br>32521 = WGS72BE UTM zone 21S <br>32522 = WGS72BE UTM zone 22S <br>32523 = WGS72BE UTM zone 23S <br>32524 = WGS72BE UTM zone 24S <br>32525 = WGS72BE UTM zone 25S <br>32526 = WGS72BE UTM zone 26S <br>32527 = WGS72BE UTM zone 27S <br>32528 = WGS72BE UTM zone 28S <br>32529 = WGS72BE UTM zone 29S <br>32530 = WGS72BE UTM zone 30S <br>32531 = WGS72BE UTM zone 31S <br>32532 = WGS72BE UTM zone 32S <br>32533 = WGS72BE UTM zone 33S <br>32534 = WGS72BE UTM zone 34S <br>32535 = WGS72BE UTM zone 35S <br>32536 = WGS72BE UTM zone 36S <br>32537 = WGS72BE UTM zone 37S <br>32538 = WGS72BE UTM zone 38S <br>32539 = WGS72BE UTM zone 39S <br>32540 = WGS72BE UTM zone 40S <br>32541 = WGS72BE UTM zone 41S <br>32542 = WGS72BE UTM zone 42S <br>32543 = WGS72BE UTM zone 43S <br>32544 = WGS72BE UTM zone 44S <br>32545 = WGS72BE UTM zone 45S <br>32546 = WGS72BE UTM zone 46S <br>32547 = WGS72BE UTM zone 47S <br>32548 = WGS72BE UTM zone 48S <br>32549 = WGS72BE UTM zone 49S <br>32550 = WGS72BE UTM zone 50S <br>32551 = WGS72BE UTM zone 51S <br>32552 = WGS72BE UTM zone 52S <br>32553 = WGS72BE UTM zone 53S <br>32554 = WGS72BE UTM zone 54S <br>32555 = WGS72BE UTM zone 55S <br>32556 = WGS72BE UTM zone 56S <br>32557 = WGS72BE UTM zone 57S <br>32558 = WGS72BE UTM zone 58S <br>32559 = WGS72BE UTM zone 59S <br>32560 = WGS72BE UTM zone 60S <br>32601 = WGS84 UTM zone 1N <br>32602 = WGS84 UTM zone 2N <br>32603 = WGS84 UTM zone 3N <br>32604 = WGS84 UTM zone 4N <br>32605 = WGS84 UTM zone 5N <br>32606 = WGS84 UTM zone 6N <br>32607 = WGS84 UTM zone 7N <br>32608 = WGS84 UTM zone 8N <br>32609 = WGS84 UTM zone 9N <br>32610 = WGS84 UTM zone 10N <br>32611 = WGS84 UTM zone 11N <br>32612 = WGS84 UTM zone 12N <br>32613 = WGS84 UTM zone 13N <br>32614 = WGS84 UTM zone 14N <br>32615 = WGS84 UTM zone 15N <br>32616 = WGS84 UTM zone 16N <br>32617 = WGS84 UTM zone 17N <br>32618 = WGS84 UTM zone 18N <br>32619 = WGS84 UTM zone 19N <br>32620 = WGS84 UTM zone 20N <br>32621 = WGS84 UTM zone 21N <br>32622 = WGS84 UTM zone 22N <br>32623 = WGS84 UTM zone 23N <br>32624 = WGS84 UTM zone 24N <br>32625 = WGS84 UTM zone 25N <br>32626 = WGS84 UTM zone 26N <br>32627 = WGS84 UTM zone 27N <br>32628 = WGS84 UTM zone 28N <br>32629 = WGS84 UTM zone 29N <br>32630 = WGS84 UTM zone 30N <br>32631 = WGS84 UTM zone 31N <br>32632 = WGS84 UTM zone 32N <br>32633 = WGS84 UTM zone 33N <br>32634 = WGS84 UTM zone 34N <br>32635 = WGS84 UTM zone 35N <br>32636 = WGS84 UTM zone 36N <br>32637 = WGS84 UTM zone 37N <br>32638 = WGS84 UTM zone 38N <br>32639 = WGS84 UTM zone 39N <br>32640 = WGS84 UTM zone 40N <br>32641 = WGS84 UTM zone 41N <br>32642 = WGS84 UTM zone 42N <br>32643 = WGS84 UTM zone 43N <br>32644 = WGS84 UTM zone 44N <br>32645 = WGS84 UTM zone 45N <br>32646 = WGS84 UTM zone 46N <br>32647 = WGS84 UTM zone 47N <br>32648 = WGS84 UTM zone 48N <br>32649 = WGS84 UTM zone 49N <br>32650 = WGS84 UTM zone 50N <br>32651 = WGS84 UTM zone 51N <br>32652 = WGS84 UTM zone 52N <br>32653 = WGS84 UTM zone 53N <br>32654 = WGS84 UTM zone 54N <br>32655 = WGS84 UTM zone 55N <br>32656 = WGS84 UTM zone 56N <br>32657 = WGS84 UTM zone 57N <br>32658 = WGS84 UTM zone 58N <br>32659 = WGS84 UTM zone 59N <br>32660 = WGS84 UTM zone 60N <br>32701 = WGS84 UTM zone 1S <br>32702 = WGS84 UTM zone 2S <br>32703 = WGS84 UTM zone 3S <br>32704 = WGS84 UTM zone 4S <br>32705 = WGS84 UTM zone 5S <br>32706 = WGS84 UTM zone 6S <br>32707 = WGS84 UTM zone 7S <br>32708 = WGS84 UTM zone 8S <br>32709 = WGS84 UTM zone 9S <br>32710 = WGS84 UTM zone 10S <br>32711 = WGS84 UTM zone 11S <br>32712 = WGS84 UTM zone 12S <br>32713 = WGS84 UTM zone 13S <br>32714 = WGS84 UTM zone 14S <br>32715 = WGS84 UTM zone 15S <br>32716 = WGS84 UTM zone 16S <br>32717 = WGS84 UTM zone 17S <br>32718 = WGS84 UTM zone 18S <br>32719 = WGS84 UTM zone 19S <br>32720 = WGS84 UTM zone 20S <br>32721 = WGS84 UTM zone 21S <br>32722 = WGS84 UTM zone 22S <br>32723 = WGS84 UTM zone 23S <br>32724 = WGS84 UTM zone 24S <br>32725 = WGS84 UTM zone 25S <br>32726 = WGS84 UTM zone 26S <br>32727 = WGS84 UTM zone 27S <br>32728 = WGS84 UTM zone 28S <br>32729 = WGS84 UTM zone 29S <br>32730 = WGS84 UTM zone 30S <br>32731 = WGS84 UTM zone 31S <br>32732 = WGS84 UTM zone 32S <br>32733 = WGS84 UTM zone 33S <br>32734 = WGS84 UTM zone 34S <br>32735 = WGS84 UTM zone 35S <br>32736 = WGS84 UTM zone 36S <br>32737 = WGS84 UTM zone 37S <br>32738 = WGS84 UTM zone 38S <br>32739 = WGS84 UTM zone 39S <br>32740 = WGS84 UTM zone 40S <br>32741 = WGS84 UTM zone 41S <br>32742 = WGS84 UTM zone 42S <br>32743 = WGS84 UTM zone 43S <br>32744 = WGS84 UTM zone 44S <br>32745 = WGS84 UTM zone 45S <br>32746 = WGS84 UTM zone 46S <br>32747 = WGS84 UTM zone 47S <br>32748 = WGS84 UTM zone 48S <br>32749 = WGS84 UTM zone 49S <br>32750 = WGS84 UTM zone 50S <br>32751 = WGS84 UTM zone 51S <br>32752 = WGS84 UTM zone 52S <br>32753 = WGS84 UTM zone 53S <br>32754 = WGS84 UTM zone 54S <br>32755 = WGS84 UTM zone 55S <br>32756 = WGS84 UTM zone 56S <br>32757 = WGS84 UTM zone 57S <br>32758 = WGS84 UTM zone 58S <br>32759 = WGS84 UTM zone 59S <br>32760 = WGS84 UTM zone 60S <br>32767 = User Defined</td></tr></table> </td></tr> <tr> <td title='0x0c01 = 3073'>0x0c01</td> <td>PCSCitation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0c02 = 3074'>0x0c02</td> <td>Projection</td> <td class=c>N</td> <td><table class=cols><tr> <td>10101 = Alabama CS27 East <br>10102 = Alabama CS27 West <br>10131 = Alabama CS83 East <br>10132 = Alabama CS83 West <br>10201 = Arizona Coordinate System east <br>10202 = Arizona Coordinate System Central <br>10203 = Arizona Coordinate System west <br>10231 = Arizona CS83 east <br>10232 = Arizona CS83 Central <br>10233 = Arizona CS83 west <br>10301 = Arkansas CS27 North <br>10302 = Arkansas CS27 South <br>10331 = Arkansas CS83 North <br>10332 = Arkansas CS83 South <br>10401 = California CS27 I <br>10402 = California CS27 II <br>10403 = California CS27 III <br>10404 = California CS27 IV <br>10405 = California CS27 V <br>10406 = California CS27 VI <br>10407 = California CS27 VII <br>10431 = California CS83 1 <br>10432 = California CS83 2 <br>10433 = California CS83 3 <br>10434 = California CS83 4 <br>10435 = California CS83 5 <br>10436 = California CS83 6 <br>10501 = Colorado CS27 North <br>10502 = Colorado CS27 Central <br>10503 = Colorado CS27 South <br>10531 = Colorado CS83 North <br>10532 = Colorado CS83 Central <br>10533 = Colorado CS83 South <br>10600 = Connecticut CS27 <br>10630 = Connecticut CS83 <br>10700 = Delaware CS27 <br>10730 = Delaware CS83 <br>10901 = Florida CS27 East <br>10902 = Florida CS27 West <br>10903 = Florida CS27 North <br>10931 = Florida CS83 East <br>10932 = Florida CS83 West <br>10933 = Florida CS83 North <br>11001 = Georgia CS27 East <br>11002 = Georgia CS27 West <br>11031 = Georgia CS83 East <br>11032 = Georgia CS83 West <br>11101 = Idaho CS27 East <br>11102 = Idaho CS27 Central <br>11103 = Idaho CS27 West <br>11131 = Idaho CS83 East <br>11132 = Idaho CS83 Central <br>11133 = Idaho CS83 West <br>11201 = Illinois CS27 East <br>11202 = Illinois CS27 West <br>11231 = Illinois CS83 East <br>11232 = Illinois CS83 West <br>11301 = Indiana CS27 East <br>11302 = Indiana CS27 West <br>11331 = Indiana CS83 East <br>11332 = Indiana CS83 West <br>11401 = Iowa CS27 North <br>11402 = Iowa CS27 South <br>11431 = Iowa CS83 North <br>11432 = Iowa CS83 South <br>11501 = Kansas CS27 North <br>11502 = Kansas CS27 South <br>11531 = Kansas CS83 North <br>11532 = Kansas CS83 South <br>11601 = Kentucky CS27 North <br>11602 = Kentucky CS27 South <br>11631 = Kentucky CS83 North <br>11632 = Kentucky CS83 South <br>11701 = Louisiana CS27 North <br>11702 = Louisiana CS27 South <br>11731 = Louisiana CS83 North <br>11732 = Louisiana CS83 South <br>11801 = Maine CS27 East <br>11802 = Maine CS27 West <br>11831 = Maine CS83 East <br>11832 = Maine CS83 West <br>11900 = Maryland CS27 <br>11930 = Maryland CS83 <br>12001 = Massachusetts CS27 Mainland <br>12002 = Massachusetts CS27 Island <br>12031 = Massachusetts CS83 Mainland <br>12032 = Massachusetts CS83 Island <br>12101 = Michigan State Plane East <br>12102 = Michigan State Plane Old Central <br>12103 = Michigan State Plane West <br>12111 = Michigan CS27 North <br>12112 = Michigan CS27 Central <br>12113 = Michigan CS27 South <br>12141 = Michigan CS83 North <br>12142 = Michigan CS83 Central <br>12143 = Michigan CS83 South <br>12201 = Minnesota CS27 North <br>12202 = Minnesota CS27 Central <br>12203 = Minnesota CS27 South <br>12231 = Minnesota CS83 North <br>12232 = Minnesota CS83 Central <br>12233 = Minnesota CS83 South <br>12301 = Mississippi CS27 East <br>12302 = Mississippi CS27 West <br>12331 = Mississippi CS83 East <br>12332 = Mississippi CS83 West <br>12401 = Missouri CS27 East <br>12402 = Missouri CS27 Central <br>12403 = Missouri CS27 West <br>12431 = Missouri CS83 East <br>12432 = Missouri CS83 Central <br>12433 = Missouri CS83 West <br>12501 = Montana CS27 North <br>12502 = Montana CS27 Central <br>12503 = Montana CS27 South <br>12530 = Montana CS83 <br>12601 = Nebraska CS27 North <br>12602 = Nebraska CS27 South <br>12630 = Nebraska CS83 <br>12701 = Nevada CS27 East <br>12702 = Nevada CS27 Central <br>12703 = Nevada CS27 West <br>12731 = Nevada CS83 East <br>12732 = Nevada CS83 Central <br>12733 = Nevada CS83 West <br>12800 = New Hampshire CS27 <br>12830 = New Hampshire CS83 <br>12900 = New Jersey CS27 <br>12930 = New Jersey CS83 <br>13001 = New Mexico CS27 East <br>13002 = New Mexico CS27 Central <br>13003 = New Mexico CS27 West <br>13031 = New Mexico CS83 East <br>13032 = New Mexico CS83 Central <br>13033 = New Mexico CS83 West <br>13101 = New York CS27 East <br>13102 = New York CS27 Central <br>13103 = New York CS27 West <br>13104 = New York CS27 Long Island <br>13131 = New York CS83 East <br>13132 = New York CS83 Central <br>13133 = New York CS83 West <br>13134 = New York CS83 Long Island <br>13200 = North Carolina CS27 <br>13230 = North Carolina CS83 <br>13301 = North Dakota CS27 North <br>13302 = North Dakota CS27 South <br>13331 = North Dakota CS83 North <br>13332 = North Dakota CS83 South <br>13401 = Ohio CS27 North <br>13402 = Ohio CS27 South <br>13431 = Ohio CS83 North <br>13432 = Ohio CS83 South <br>13501 = Oklahoma CS27 North <br>13502 = Oklahoma CS27 South <br>13531 = Oklahoma CS83 North <br>13532 = Oklahoma CS83 South <br>13601 = Oregon CS27 North <br>13602 = Oregon CS27 South <br>13631 = Oregon CS83 North <br>13632 = Oregon CS83 South <br>13701 = Pennsylvania CS27 North <br>13702 = Pennsylvania CS27 South <br>13731 = Pennsylvania CS83 North <br>13732 = Pennsylvania CS83 South <br>13800 = Rhode Island CS27 <br>13830 = Rhode Island CS83 <br>13901 = South Carolina CS27 North <br>13902 = South Carolina CS27 South <br>13930 = South Carolina CS83 <br>14001 = South Dakota CS27 North <br>14002 = South Dakota CS27 South <br>14031 = South Dakota CS83 North <br>14032 = South Dakota CS83 South <br>14100 = Tennessee CS27 <br>14130 = Tennessee CS83 <br>14201 = Texas CS27 North <br>14202 = Texas CS27 North Central <br>14203 = Texas CS27 Central <br>14204 = Texas CS27 South Central <br>14205 = Texas CS27 South <br>14231 = Texas CS83 North <br>14232 = Texas CS83 North Central <br>14233 = Texas CS83 Central <br>14234 = Texas CS83 South Central <br>14235 = Texas CS83 South <br>14301 = Utah CS27 North <br>14302 = Utah CS27 Central <br>14303 = Utah CS27 South <br>14331 = Utah CS83 North <br>14332 = Utah CS83 Central <br>14333 = Utah CS83 South <br>14400 = Vermont CS27 <br>14430 = Vermont CS83 <br>14501 = Virginia CS27 North <br>14502 = Virginia CS27 South <br>14531 = Virginia CS83 North <br>14532 = Virginia CS83 South <br>14601 = Washington CS27 North <br>14602 = Washington CS27 South <br>14631 = Washington CS83 North <br>14632 = Washington CS83 South <br>14701 = West Virginia CS27 North <br>14702 = West Virginia CS27 South <br>14731 = West Virginia CS83 North <br>14732 = West Virginia CS83 South <br>14801 = Wisconsin CS27 North <br>14802 = Wisconsin CS27 Central <br>14803 = Wisconsin CS27 South <br>14831 = Wisconsin CS83 North <br>14832 = Wisconsin CS83 Central <br>14833 = Wisconsin CS83 South <br>14901 = Wyoming CS27 East <br>14902 = Wyoming CS27 East Central <br>14903 = Wyoming CS27 West Central <br>14904 = Wyoming CS27 West <br>14931 = Wyoming CS83 East <br>14932 = Wyoming CS83 East Central <br>14933 = Wyoming CS83 West Central <br>14934 = Wyoming CS83 West <br>15001 = Alaska CS27 1 <br>15002 = Alaska CS27 2 <br>15003 = Alaska CS27 3 <br>15004 = Alaska CS27 4 <br>15005 = Alaska CS27 5 <br>15006 = Alaska CS27 6 <br>15007 = Alaska CS27 7 <br>15008 = Alaska CS27 8 <br>15009 = Alaska CS27 9 <br>15010 = Alaska CS27 10 <br>15031 = Alaska CS83 1 <br>15032 = Alaska CS83 2 <br>15033 = Alaska CS83 3 <br>15034 = Alaska CS83 4 <br>15035 = Alaska CS83 5 <br>15036 = Alaska CS83 6 <br>15037 = Alaska CS83 7 <br>15038 = Alaska CS83 8 <br>15039 = Alaska CS83 9 <br>15040 = Alaska CS83 10 <br>15101 = Hawaii CS27 1 <br>15102 = Hawaii CS27 2 <br>15103 = Hawaii CS27 3 <br>15104 = Hawaii CS27 4 <br>15105 = Hawaii CS27 5 <br>15131 = Hawaii CS83 1 <br>15132 = Hawaii CS83 2 <br>15133 = Hawaii CS83 3 <br>15134 = Hawaii CS83 4 <br>15135 = Hawaii CS83 5 <br>15201 = Puerto Rico CS27 <br>15202 = St Croix <br>15230 = Puerto Rico Virgin Is <br>15302 = Kentucky CS27 <br>15303 = Kentucky CS83 North <br>15914 = BLM 14N feet <br>15915 = BLM 15N feet <br>15916 = BLM 16N feet <br>15917 = BLM 17N feet <br>16001 = UTM zone 1N <br>16002 = UTM zone 2N <br>16003 = UTM zone 3N <br>16004 = UTM zone 4N <br>16005 = UTM zone 5N <br>16006 = UTM zone 6N <br>16007 = UTM zone 7N <br>16008 = UTM zone 8N <br>16009 = UTM zone 9N <br>16010 = UTM zone 10N <br>16011 = UTM zone 11N <br>16012 = UTM zone 12N <br>16013 = UTM zone 13N <br>16014 = UTM zone 14N <br>16015 = UTM zone 15N <br>16016 = UTM zone 16N <br>16017 = UTM zone 17N <br>16018 = UTM zone 18N <br>16019 = UTM zone 19N <br>16020 = UTM zone 20N <br>16021 = UTM zone 21N <br>16022 = UTM zone 22N <br>16023 = UTM zone 23N <br>16024 = UTM zone 24N <br>16025 = UTM zone 25N <br>16026 = UTM zone 26N <br>16027 = UTM zone 27N <br>16028 = UTM zone 28N <br>16029 = UTM zone 29N <br>16030 = UTM zone 30N <br>16031 = UTM zone 31N <br>16032 = UTM zone 32N <br>16033 = UTM zone 33N <br>16034 = UTM zone 34N <br>16035 = UTM zone 35N <br>16036 = UTM zone 36N <br>16037 = UTM zone 37N <br>16038 = UTM zone 38N <br>16039 = UTM zone 39N <br>16040 = UTM zone 40N <br>16041 = UTM zone 41N <br>16042 = UTM zone 42N <br>16043 = UTM zone 43N <br>16044 = UTM zone 44N <br>16045 = UTM zone 45N <br>16046 = UTM zone 46N <br>16047 = UTM zone 47N <br>16048 = UTM zone 48N <br>16049 = UTM zone 49N <br>16050 = UTM zone 50N <br>16051 = UTM zone 51N <br>16052 = UTM zone 52N <br>16053 = UTM zone 53N <br>16054 = UTM zone 54N <br>16055 = UTM zone 55N <br>16056 = UTM zone 56N <br>16057 = UTM zone 57N <br>16058 = UTM zone 58N <br>16059 = UTM zone 59N <br>16060 = UTM zone 60N <br>16101 = UTM zone 1S <br>16102 = UTM zone 2S <br>16103 = UTM zone 3S <br>16104 = UTM zone 4S <br>16105 = UTM zone 5S <br>16106 = UTM zone 6S <br>16107 = UTM zone 7S <br>16108 = UTM zone 8S <br>16109 = UTM zone 9S <br>16110 = UTM zone 10S <br>16111 = UTM zone 11S <br>16112 = UTM zone 12S <br>16113 = UTM zone 13S <br>16114 = UTM zone 14S <br>16115 = UTM zone 15S <br>16116 = UTM zone 16S <br>16117 = UTM zone 17S <br>16118 = UTM zone 18S <br>16119 = UTM zone 19S <br>16120 = UTM zone 20S <br>16121 = UTM zone 21S <br>16122 = UTM zone 22S <br>16123 = UTM zone 23S <br>16124 = UTM zone 24S <br>16125 = UTM zone 25S <br>16126 = UTM zone 26S <br>16127 = UTM zone 27S <br>16128 = UTM zone 28S <br>16129 = UTM zone 29S <br>16130 = UTM zone 30S <br>16131 = UTM zone 31S <br>16132 = UTM zone 32S <br>16133 = UTM zone 33S <br>16134 = UTM zone 34S <br>16135 = UTM zone 35S <br>16136 = UTM zone 36S <br>16137 = UTM zone 37S <br>16138 = UTM zone 38S <br>16139 = UTM zone 39S <br>16140 = UTM zone 40S <br>16141 = UTM zone 41S <br>16142 = UTM zone 42S <br>16143 = UTM zone 43S <br>16144 = UTM zone 44S <br>16145 = UTM zone 45S <br>16146 = UTM zone 46S <br>16147 = UTM zone 47S <br>16148 = UTM zone 48S <br>16149 = UTM zone 49S <br>16150 = UTM zone 50S <br>16151 = UTM zone 51S <br>16152 = UTM zone 52S <br>16153 = UTM zone 53S <br>16154 = UTM zone 54S <br>16155 = UTM zone 55S <br>16156 = UTM zone 56S <br>16157 = UTM zone 57S <br>16158 = UTM zone 58S <br>16159 = UTM zone 59S <br>16160 = UTM zone 60S <br>16200 = Gauss Kruger zone 0 <br>16201 = Gauss Kruger zone 1 <br>16202 = Gauss Kruger zone 2 <br>16203 = Gauss Kruger zone 3 <br>16204 = Gauss Kruger zone 4 <br>16205 = Gauss Kruger zone 5 <br>17348 = Map Grid of Australia 48 <br>17349 = Map Grid of Australia 49 <br>17350 = Map Grid of Australia 50 <br>17351 = Map Grid of Australia 51 <br>17352 = Map Grid of Australia 52 <br>17353 = Map Grid of Australia 53 <br>17354 = Map Grid of Australia 54 <br>17355 = Map Grid of Australia 55 <br>17356 = Map Grid of Australia 56 <br>17357 = Map Grid of Australia 57 <br>17358 = Map Grid of Australia 58 <br>17448 = Australian Map Grid 48 <br>17449 = Australian Map Grid 49 <br>17450 = Australian Map Grid 50 <br>17451 = Australian Map Grid 51 <br>17452 = Australian Map Grid 52 <br>17453 = Australian Map Grid 53 <br>17454 = Australian Map Grid 54 <br>17455 = Australian Map Grid 55 <br>17456 = Australian Map Grid 56 <br>17457 = Australian Map Grid 57 <br>17458 = Australian Map Grid 58 <br>18031 = Argentina 1 <br>18032 = Argentina 2 <br>18033 = Argentina 3 <br>18034 = Argentina 4 <br>18035 = Argentina 5 <br>18036 = Argentina 6 <br>18037 = Argentina 7 <br>18051 = Colombia 3W <br>18052 = Colombia Bogota <br>18053 = Colombia 3E <br>18054 = Colombia 6E <br>18072 = Egypt Red Belt <br>18073 = Egypt Purple Belt <br>18074 = Extended Purple Belt <br>18141 = New Zealand North Island Nat Grid <br>18142 = New Zealand South Island Nat Grid <br>19900 = Bahrain Grid <br>19905 = Netherlands E Indies Equatorial <br>19912 = RSO Borneo <br>19926 = Stereo 70 <br>32767 = User Defined</td></tr></table> </td></tr> <tr> <td title='0x0c03 = 3075'>0x0c03</td> <td>ProjCoordTrans</td> <td class=c>N</td> <td><table class=cols><tr> <td>1 = Transverse Mercator <br>2 = Transverse Mercator Modified Alaska <br>3 = Oblique Mercator <br>4 = Oblique Mercator Laborde <br>5 = Oblique Mercator Rosenmund <br>6 = Oblique Mercator Spherical <br>7 = Mercator <br>8 = Lambert Conf Conic 2SP <br>9 = Lambert Conf Conic 1SP <br>10 = Lambert Azim Equal Area <br>11 = Albers Equal Area <br>12 = Azimuthal Equidistant <br>13 = Equidistant Conic <br>14 = Stereographic <br>15 = Polar Stereographic <br>16 = Oblique Stereographic <br>17 = Equirectangular <br>18 = Cassini Soldner <br>19 = Gnomonic <br>20 = Miller Cylindrical <br>21 = Orthographic <br>22 = Polyconic <br>23 = Robinson <br>24 = Sinusoidal <br>25 = VanDerGrinten <br>26 = New Zealand Map Grid <br>27 = Transverse Mercator South Orientated <br>28 = Cylindrical Equal Area <br>32767 = User Defined</td></tr></table> </td></tr> <tr class=b> <td title='0x0c04 = 3076'>0x0c04</td> <td>ProjLinearUnits</td> <td class=c>N</td> <td>--&gt; <a href='GeoTiff.html#Units'>GeoTiff Units Values</a></td></tr> <tr> <td title='0x0c05 = 3077'>0x0c05</td> <td>ProjLinearUnitSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0c06 = 3078'>0x0c06</td> <td>ProjStdParallel1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0c07 = 3079'>0x0c07</td> <td>ProjStdParallel2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0c08 = 3080'>0x0c08</td> <td>ProjNatOriginLong</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0c09 = 3081'>0x0c09</td> <td>ProjNatOriginLat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0c0a = 3082'>0x0c0a</td> <td>ProjFalseEasting</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0c0b = 3083'>0x0c0b</td> <td>ProjFalseNorthing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0c0c = 3084'>0x0c0c</td> <td>ProjFalseOriginLong</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0c0d = 3085'>0x0c0d</td> <td>ProjFalseOriginLat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0c0e = 3086'>0x0c0e</td> <td>ProjFalseOriginEasting</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0c0f = 3087'>0x0c0f</td> <td>ProjFalseOriginNorthing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0c10 = 3088'>0x0c10</td> <td>ProjCenterLong</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0c11 = 3089'>0x0c11</td> <td>ProjCenterLat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0c12 = 3090'>0x0c12</td> <td>ProjCenterEasting</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0c13 = 3091'>0x0c13</td> <td>ProjCenterNorthing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0c14 = 3092'>0x0c14</td> <td>ProjScaleAtNatOrigin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0c15 = 3093'>0x0c15</td> <td>ProjScaleAtCenter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0c16 = 3094'>0x0c16</td> <td>ProjAzimuthAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0c17 = 3095'>0x0c17</td> <td>ProjStraightVertPoleLong</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0c18 = 3096'>0x0c18</td> <td>ProjRectifiedGridAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1000 = 4096'>0x1000</td> <td>VerticalCSType</td> <td class=c>N</td> <td>--&gt; <a href='GeoTiff.html#VerticalCS'>GeoTiff VerticalCS Values</a></td></tr> <tr class=b> <td title='0x1001 = 4097'>0x1001</td> <td>VerticalCitation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1002 = 4098'>0x1002</td> <td>VerticalDatum</td> <td class=c>N</td> <td>--&gt; <a href='GeoTiff.html#VerticalCS'>GeoTiff VerticalCS Values</a></td></tr> <tr class=b> <td title='0x1003 = 4099'>0x1003</td> <td>VerticalUnits</td> <td class=c>N</td> <td>--&gt; <a href='GeoTiff.html#Units'>GeoTiff Units Values</a></td></tr> <tr> <td title='0xb799 = 47001'>0xb799</td> <td>ChartFormat</td> <td class=c>N</td> <td><table class=cols><tr> <td>47500 = General <br>47501 = Coastal <br>47502 = Harbor <br>47503 = SailingInternational <br>47504 = SmallCraft Route <br>47505 = SmallCraftArea <br>47506 = SmallCraftFolio <br>47507 = Topographic <br>47508 = Recreation <br>47509 = Index <br>47510 = Inset</td></tr></table> </td></tr> <tr class=b> <td title='0xb79a = 47002'>0xb79a</td> <td>ChartSource</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xb79b = 47003'>0xb79b</td> <td>ChartSourceEdition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb79c = 47004'>0xb79c</td> <td>ChartSourceDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xb79d = 47005'>0xb79d</td> <td>ChartCorrDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb79e = 47006'>0xb79e</td> <td>ChartCountryOrigin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xb79f = 47007'>0xb79f</td> <td>ChartRasterEdition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb7a0 = 47008'>0xb7a0</td> <td>ChartSoundingDatum</td> <td class=c>N</td> <td><table class=cols><tr> <td>47600 = Equatorial Spring Low Water <br>47601 = Indian Spring Low Water <br>47602 = Lowest Astronomical Tide <br>47603 = Lowest Low Water <br>47604 = Lowest Normal Low Water <br>47605 = Mean Higher High Water <br>47606 = Mean High Water <br>47607 = Mean High Water Springs <br>47608 = Mean Lower Low Water <br>47609 = Mean Lower Low Water Springs <br>47610 = Mean Low Water <br>47611 = Mean Sea Level <br>47612 = Tropic Higher High Water <br>47613 = Tropic Lower Low Water</td></tr></table> </td></tr> <tr> <td title='0xb7a1 = 47009'>0xb7a1</td> <td>ChartDepthUnits</td> <td class=c>N</td> <td>--&gt; <a href='GeoTiff.html#Units'>GeoTiff Units Values</a></td></tr> <tr class=b> <td title='0xb7a2 = 47010'>0xb7a2</td> <td>ChartMagVar</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xb7a3 = 47011'>0xb7a3</td> <td>ChartMagVarYear</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb7a4 = 47012'>0xb7a4</td> <td>ChartMagVarAnnChange</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xb7a5 = 47013'>0xb7a5</td> <td>ChartWGSNSShift</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb7a7 = 47015'>0xb7a7</td> <td>InsetNWPixelX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xb7a8 = 47016'>0xb7a8</td> <td>InsetNWPixelY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb7a9 = 47017'>0xb7a9</td> <td>ChartContourInterval</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Units'>GeoTiff Units Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>Units</th><th>Value</th><th>Units</th></tr> <tr><td class=r>9001</td><td>= Linear Meter</td> <td class='r b'>9013</td><td class=b>= Linear Yard Indian</td> </tr><tr><td class=r>9002</td><td>= Linear Foot</td> <td class='r b'>9014</td><td class=b>= Linear Fathom</td> </tr><tr><td class=r>9003</td><td>= Linear Foot US Survey</td> <td class='r b'>9015</td><td class=b>= Linear Mile International Nautical</td> </tr><tr><td class=r>9004</td><td>= Linear Foot Modified American</td> <td class='r b'>9101</td><td class=b>= Angular Radian</td> </tr><tr><td class=r>9005</td><td>= Linear Foot Clarke</td> <td class='r b'>9102</td><td class=b>= Angular Degree</td> </tr><tr><td class=r>9006</td><td>= Linear Foot Indian</td> <td class='r b'>9103</td><td class=b>= Angular Arc Minute</td> </tr><tr><td class=r>9007</td><td>= Linear Link</td> <td class='r b'>9104</td><td class=b>= Angular Arc Second</td> </tr><tr><td class=r>9008</td><td>= Linear Link Benoit</td> <td class='r b'>9105</td><td class=b>= Angular Grad</td> </tr><tr><td class=r>9009</td><td>= Linear Link Sears</td> <td class='r b'>9106</td><td class=b>= Angular Gon</td> </tr><tr><td class=r>9010</td><td>= Linear Chain Benoit</td> <td class='r b'>9107</td><td class=b>= Angular DMS</td> </tr><tr><td class=r>9011</td><td>= Linear Chain Sears</td> <td class='r b'>9108</td><td class=b>= Angular DMS Hemisphere</td> </tr><tr><td class=r>9012</td><td>= Linear Yard Sears</td> <td class='r b'>32767</td><td class=b>= User Defined</td> </tr></table></td></tr></table></blockquote> <h2><a name='VerticalCS'>GeoTiff VerticalCS Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>VerticalCS</th><th>Value</th><th>VerticalCS</th></tr> <tr><td class=r>0</td><td>= Undefined</td> <td class='r b'>5021</td><td class=b>= INS ellipsoid</td> </tr><tr><td class=r>5001</td><td>= Airy 1830 ellipsoid</td> <td class='r b'>5022</td><td class=b>= International 1924 ellipsoid</td> </tr><tr><td class=r>5002</td><td>= Airy Modified 1849 ellipsoid</td> <td class='r b'>5023</td><td class=b>= International 1967 ellipsoid</td> </tr><tr><td class=r>5003</td><td>= ANS ellipsoid</td> <td class='r b'>5024</td><td class=b>= Krassowsky 1940 ellipsoid</td> </tr><tr><td class=r>5004</td><td>= Bessel 1841 ellipsoid</td> <td class='r b'>5025</td><td class=b>= NWL 9D ellipsoid</td> </tr><tr><td class=r>5005</td><td>= Bessel Modified ellipsoid</td> <td class='r b'>5026</td><td class=b>= NWL 10D ellipsoid</td> </tr><tr><td class=r>5006</td><td>= Bessel Namibia ellipsoid</td> <td class='r b'>5027</td><td class=b>= Plessis 1817 ellipsoid</td> </tr><tr><td class=r>5007</td><td>= Clarke 1858 ellipsoid</td> <td class='r b'>5028</td><td class=b>= Struve 1860 ellipsoid</td> </tr><tr><td class=r>5008</td><td>= Clarke 1866 ellipsoid</td> <td class='r b'>5029</td><td class=b>= War Office ellipsoid</td> </tr><tr><td class=r>5010</td><td>= Clarke 1880 Benoit ellipsoid</td> <td class='r b'>5030</td><td class=b>= WGS 84 ellipsoid</td> </tr><tr><td class=r>5011</td><td>= Clarke 1880 IGN ellipsoid</td> <td class='r b'>5031</td><td class=b>= GEM 10C ellipsoid</td> </tr><tr><td class=r>5012</td><td>= Clarke 1880 RGS ellipsoid</td> <td class='r b'>5032</td><td class=b>= OSU86F ellipsoid</td> </tr><tr><td class=r>5013</td><td>= Clarke 1880 Arc ellipsoid</td> <td class='r b'>5033</td><td class=b>= OSU91A ellipsoid</td> </tr><tr><td class=r>5014</td><td>= Clarke 1880 SGA 1922 ellipsoid</td> <td class='r b'>5101</td><td class=b>= Newlyn</td> </tr><tr><td class=r>5015</td><td>= Everest 1830 1937 Adjustment ellipsoid</td> <td class='r b'>5102</td><td class=b>= North American Vertical Datum 1929</td> </tr><tr><td class=r>5016</td><td>= Everest 1830 1967 Definition ellipsoid</td> <td class='r b'>5103</td><td class=b>= North American Vertical Datum 1988</td> </tr><tr><td class=r>5017</td><td>= Everest 1830 1975 Definition ellipsoid</td> <td class='r b'>5104</td><td class=b>= Yellow Sea 1956</td> </tr><tr><td class=r>5018</td><td>= Everest 1830 Modified ellipsoid</td> <td class='r b'>5105</td><td class=b>= Baltic Sea</td> </tr><tr><td class=r>5019</td><td>= GRS 1980 ellipsoid</td> <td class='r b'>5106</td><td class=b>= Caspian Sea</td> </tr><tr><td class=r>5020</td><td>= Helmert 1906 ellipsoid</td> <td class='r b'>32767</td><td class=b>= User Defined</td> </tr></table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 19, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/GIF.html���������������������������������������������������������000644 �000765 �000024 �00000006602 11663037143 020331� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>GIF Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>GIF Tags</h2> <p>This table lists information extracted from GIF images. See <a href="http://www.w3.org/Graphics/GIF/spec-gif89a.txt">http://www.w3.org/Graphics/GIF/spec-gif89a.txt</a> for the official GIF89a specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Comment</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td>Duration</td> <td class=c>N</td> <td><span class=s><span class=n>(duration of a single animation iteration)</span></span></td></tr> <tr> <td>ExtensionAnimation</td> <td class=c>-</td> <td>--&gt; <a href='GIF.html#Animate'>GIF Animate Tags</a></td></tr> <tr class=b> <td>ExtensionICC</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> <tr> <td>ExtensionXMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> <tr class=b> <td>FrameCount</td> <td class=c>N</td> <td><span class=s><span class=n>(number of animated images)</span></span></td></tr> <tr> <td>GIFVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ScreenDescriptor</td> <td class=c>-</td> <td>--&gt; <a href='GIF.html#Screen'>GIF Screen Tags</a></td></tr> <tr> <td>Text</td> <td class=c>N</td> <td><span class=s><span class=n>(text displayed in image)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Animate'>GIF Animate Tags</a></h2> <p>Information extracted from the &quot;NETSCAPE2.0&quot; animation extension.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>AnimationIterations</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Screen'>GIF Screen Tags</a></h2> <p>Information extracted from the GIF logical screen descriptor.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4.1</td> <td>HasColorMap</td> <td class=c>N</td> <td><span class=s>[Mask 0x80] <br>0x0 = No <br>0x80 = Yes</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.2</td> <td>ColorResolutionDepth</td> <td class=c>N</td> <td><span class=s>[Mask 0x70]</span></td></tr> <tr> <td class=r title='4 = 0x4'>4.3</td> <td>BitsPerPixel</td> <td class=c>N</td> <td><span class=s>[Mask 0x07]</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>BackgroundColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Oct 28, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/GIMP.html��������������������������������������������������������000644 �000765 �000024 �00000007504 11663037142 020461� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>GIMP Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>GIMP Tags</h2> <p>The GNU Image Manipulation Program (GIMP) writes these tags in its native XCF (eXperimental Computing Facilty) images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'header'</td> <td>Header</td> <td class=c>-</td> <td>--&gt; <a href='GIMP.html#Header'>GIMP Header Tags</a></td></tr> <tr class=b> <td title='0x0011 = 17'>0x0011</td> <td>Compression</td> <td class=c>N</td> <td><span class=s>0 = None <br>1 = RLE Encoding <br>2 = Zlib <br>3 = Fractal</span></td></tr> <tr> <td title='0x0013 = 19'>0x0013</td> <td>Resolution</td> <td class=c>-</td> <td>--&gt; <a href='GIMP.html#Resolution'>GIMP Resolution Tags</a></td></tr> <tr class=b> <td title='0x0015 = 21'>0x0015</td> <td>Parasites</td> <td class=c>-</td> <td>--&gt; <a href='GIMP.html#Parasite'>GIMP Parasite Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Header'>GIMP Header Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>XCFVersion</td> <td class=c>N</td> <td><span class=s>&#39;file&#39; = 0 <br>&#39;v001&#39; = 1 <br>&#39;v002&#39; = 2</span></td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>ColorMode</td> <td class=c>N</td> <td><span class=s>0 = RGB Color <br>1 = Grayscale <br>2 = Indexed Color</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Resolution'>GIMP Resolution Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>XResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>YResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Parasite'>GIMP Parasite Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'exif-data'</td> <td>ExifData</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> <tr class=b> <td>'gimp-comment'</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'gimp-metadata'</td> <td>XMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> <tr class=b> <td>'icc-profile'</td> <td>ICC_Profile</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> <tr> <td>'icc-profile-name'</td> <td>ICCProfileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'iptc-data'</td> <td>IPTCData</td> <td class=c>-</td> <td>--&gt; <a href='IPTC.html'>IPTC Tags</a></td></tr> <tr> <td>'jpeg-exif-data'</td> <td>JPEGExifData</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Oct 12, 2010</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/GPS.html���������������������������������������������������������000644 �000765 �000024 �00000016776 12343637576 020406� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>GPS Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>GPS Tags</h2> <p> These GPS tags are part of the EXIF standard, and are stored in a separate IFD within the EXIF information.</p> <p>ExifTool is very flexible about the input format when writing lat/long coordinates, and will accept from 1 to 3 floating point numbers (for decimal degrees, degrees and minutes, or degrees, minutes and seconds) separated by just about anything, and will format them properly according to the EXIF specification.</p> <p>Some GPS tags have values which are fixed-length strings. For these, the indicated string lengths include a null terminator which is added automatically by ExifTool. Remember that the descriptive values are used when writing (eg. &#39;Above Sea Level&#39;, not &#39;0&#39;) unless the print conversion is disabled (with &#39;-n&#39; on the command line or the PrintConv option in the API, or by suffixing the tag name with a <code>#</code> character).</p> <p>When adding GPS information to an image, it is important to set all of the following tags: GPSLatitude, GPSLatitudeRef, GPSLongitude, GPSLongitudeRef, and GPSAltitude and GPSAltitudeRef if the altitude is known. ExifTool will write the required GPSVersionID tag automatically if new a GPS IFD is added to an image. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>GPSVersionID</td> <td class=c title=' : = Mandatory'>int8u[4]:</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>GPSLatitudeRef</td> <td class=c>string[2]</td> <td><span class=s><span class=n>(tags 0x0001-0x0006 used for camera location according to MWG 2.0. ExifTool will also accept a number when writing GPSLatitude -- positive for north latitudes, or negative for south)</span> <br>&#39;N&#39; = North <br>&#39;S&#39; = South</span></td></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>GPSLatitude</td> <td class=c>rational64u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>GPSLongitudeRef</td> <td class=c>string[2]</td> <td><span class=s><span class=n>(ExifTool will also accept a number when writing this tag -- positive for east longitudes or negative for west)</span> <br>&#39;E&#39; = East <br>&#39;W&#39; = West</span></td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>GPSLongitude</td> <td class=c>rational64u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>GPSAltitudeRef</td> <td class=c>int8u</td> <td><span class=s><span class=n>(ExifTool will also accept a signed number when writing this tag, beginning with &quot;+&quot; for above sea level, or &quot;-&quot; for below)</span> <br>0 = Above Sea Level <br>1 = Below Sea Level</span></td></tr> <tr> <td title='0x0006 = 6'>0x0006</td> <td>GPSAltitude</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0007 = 7'>0x0007</td> <td>GPSTimeStamp</td> <td class=c>rational64u[3]</td> <td><span class=s><span class=n>(when writing, date is stripped off if present, and time is adjusted to UTC if it includes a timezone)</span></span></td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>GPSSatellites</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0009 = 9'>0x0009</td> <td>GPSStatus</td> <td class=c>string[2]</td> <td><span class=s>&#39;A&#39; = Measurement Active <br>&#39;V&#39; = Measurement Void</span></td></tr> <tr> <td title='0x000a = 10'>0x000a</td> <td>GPSMeasureMode</td> <td class=c>string[2]</td> <td><span class=s>2 = 2-Dimensional Measurement <br>3 = 3-Dimensional Measurement</span></td></tr> <tr class=b> <td title='0x000b = 11'>0x000b</td> <td>GPSDOP</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x000c = 12'>0x000c</td> <td>GPSSpeedRef</td> <td class=c>string[2]</td> <td><span class=s>&#39;K&#39; = km/h <br>&#39;M&#39; = mph <br>&#39;N&#39; = knots</span></td></tr> <tr class=b> <td title='0x000d = 13'>0x000d</td> <td>GPSSpeed</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x000e = 14'>0x000e</td> <td>GPSTrackRef</td> <td class=c>string[2]</td> <td><span class=s>&#39;M&#39; = Magnetic North <br>&#39;T&#39; = True North</span></td></tr> <tr class=b> <td title='0x000f = 15'>0x000f</td> <td>GPSTrack</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>GPSImgDirectionRef</td> <td class=c>string[2]</td> <td><span class=s>&#39;M&#39; = Magnetic North <br>&#39;T&#39; = True North</span></td></tr> <tr class=b> <td title='0x0011 = 17'>0x0011</td> <td>GPSImgDirection</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0012 = 18'>0x0012</td> <td>GPSMapDatum</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0013 = 19'>0x0013</td> <td>GPSDestLatitudeRef</td> <td class=c>string[2]</td> <td><span class=s><span class=n>(tags 0x0013-0x001a used for subject location according to MWG 2.0)</span> <br>&#39;N&#39; = North <br>&#39;S&#39; = South</span></td></tr> <tr> <td title='0x0014 = 20'>0x0014</td> <td>GPSDestLatitude</td> <td class=c>rational64u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0015 = 21'>0x0015</td> <td>GPSDestLongitudeRef</td> <td class=c>string[2]</td> <td><span class=s>&#39;E&#39; = East <br>&#39;W&#39; = West</span></td></tr> <tr> <td title='0x0016 = 22'>0x0016</td> <td>GPSDestLongitude</td> <td class=c>rational64u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0017 = 23'>0x0017</td> <td>GPSDestBearingRef</td> <td class=c>string[2]</td> <td><span class=s>&#39;M&#39; = Magnetic North <br>&#39;T&#39; = True North</span></td></tr> <tr> <td title='0x0018 = 24'>0x0018</td> <td>GPSDestBearing</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0019 = 25'>0x0019</td> <td>GPSDestDistanceRef</td> <td class=c>string[2]</td> <td><span class=s>&#39;K&#39; = Kilometers <br>&#39;M&#39; = Miles <br>&#39;N&#39; = Nautical Miles</span></td></tr> <tr> <td title='0x001a = 26'>0x001a</td> <td>GPSDestDistance</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001b = 27'>0x001b</td> <td>GPSProcessingMethod</td> <td class=c>undef</td> <td><span class=s><span class=n>(values of &quot;GPS&quot;, &quot;CELLID&quot;, &quot;WLAN&quot; or &quot;MANUAL&quot; by the EXIF spec.)</span></span></td></tr> <tr> <td title='0x001c = 28'>0x001c</td> <td>GPSAreaInformation</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001d = 29'>0x001d</td> <td>GPSDateStamp</td> <td class=c>string[11]</td> <td><span class=s><span class=n>(when writing, time is stripped off if present, after adjusting date/time to UTC if time includes a timezone. Format is YYYY:mm:dd)</span></span></td></tr> <tr> <td title='0x001e = 30'>0x001e</td> <td>GPSDifferential</td> <td class=c>int16u</td> <td><span class=s>0 = No Correction <br>1 = Differential Corrected</span></td></tr> <tr class=b> <td title='0x001f = 31'>0x001f</td> <td>GPSHPositioningError</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised May 6, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��Image-ExifTool-10.10/html/TagNames/H264.html��������������������������������������������������������000644 �000765 �000024 �00000026300 12527350231 020340� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>H264 Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>H264 Tags</h2> <p>Tags extracted from H.264 video streams. The metadata for AVCHD videos is stored in this stream.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MDPM</td> <td class=c>-</td> <td>--&gt; <a href='H264.html#MDPM'>H264 MDPM Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='MDPM'>H264 MDPM Tags</a></h2> <p>The following tags are decoded from the Modified Digital Video Pack Metadata (MDPM) of the unregistered user data with UUID 17ee8c60f84d11d98cd60800200c9a66 in the H.264 Supplemental Enhancement Information (SEI). <i>[Yes, this description is confusing, but nothing compared to the challenge of actually decoding the data!]</i> This information may exist at regular intervals through the entire video, but only the first occurrence is extracted unless the ExtractEmbedded (-ee) option is used (in which case subsequent occurrences are extracted as sub-documents).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0013 = 19'>0x0013</td> <td>TimeCode</td> <td class=c>N</td> <td><span class=s><span class=n>(hours:minutes:seconds:frames)</span></span></td></tr> <tr class=b> <td title='0x0018 = 24'>0x0018</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td><span class=s><span class=n>(combined with tag 0x19)</span></span></td></tr> <tr> <td title='0x0070 = 112'>0x0070</td> <td>Camera1</td> <td class=c>-</td> <td>--&gt; <a href='H264.html#Camera1'>H264 Camera1 Tags</a></td></tr> <tr class=b> <td title='0x0071 = 113'>0x0071</td> <td>Camera2</td> <td class=c>-</td> <td>--&gt; <a href='H264.html#Camera2'>H264 Camera2 Tags</a></td></tr> <tr> <td title='0x007f = 127'>0x007f</td> <td>Shutter</td> <td class=c>-</td> <td>--&gt; <a href='H264.html#Shutter'>H264 Shutter Tags</a></td></tr> <tr class=b> <td title='0x00a0 = 160'>0x00a0</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00a1 = 161'>0x00a1</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00a2 = 162'>0x00a2</td> <td>ExposureProgram</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Not Defined <br>1 = Manual <br>2 = Program AE <br>3 = Aperture-priority AE <br>4 = Shutter speed priority AE <br>5 = Creative (Slow speed) <br>6 = Action (High speed) <br>7 = Portrait <br>8 = Landscape</td></tr></table> </td></tr> <tr> <td title='0x00a3 = 163'>0x00a3</td> <td>BrightnessValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00a4 = 164'>0x00a4</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00a5 = 165'>0x00a5</td> <td>MaxApertureValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00a6 = 166'>0x00a6</td> <td>Flash</td> <td class=c>N</td> <td>--&gt; <a href='EXIF.html#Flash'>EXIF Flash Values</a></td></tr> <tr> <td title='0x00a7 = 167'>0x00a7</td> <td>CustomRendered</td> <td class=c>N</td> <td><span class=s>0 = Normal <br>1 = Custom</span></td></tr> <tr class=b> <td title='0x00a8 = 168'>0x00a8</td> <td>WhiteBalance</td> <td class=c>N</td> <td><span class=s>0 = Auto <br>1 = Manual</span></td></tr> <tr> <td title='0x00a9 = 169'>0x00a9</td> <td>FocalLengthIn35mmFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00aa = 170'>0x00aa</td> <td>SceneCaptureType</td> <td class=c>N</td> <td><span class=s>0 = Standard <br>1 = Landscape <br>2 = Portrait <br>3 = Night</span></td></tr> <tr> <td title='0x00b0 = 176'>0x00b0</td> <td>GPSVersionID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00b1 = 177'>0x00b1</td> <td>GPSLatitudeRef</td> <td class=c>N</td> <td><span class=s>&#39;N&#39; = North <br>&#39;S&#39; = South</span></td></tr> <tr> <td title='0x00b2 = 178'>0x00b2</td> <td>GPSLatitude</td> <td class=c>N</td> <td><span class=s><span class=n>(combined with tags 0xb3 and 0xb4)</span></span></td></tr> <tr class=b> <td title='0x00b5 = 181'>0x00b5</td> <td>GPSLongitudeRef</td> <td class=c>N</td> <td><span class=s>&#39;E&#39; = East <br>&#39;W&#39; = West</span></td></tr> <tr> <td title='0x00b6 = 182'>0x00b6</td> <td>GPSLongitude</td> <td class=c>N</td> <td><span class=s><span class=n>(combined with tags 0xb7 and 0xb8)</span></span></td></tr> <tr class=b> <td title='0x00b9 = 185'>0x00b9</td> <td>GPSAltitudeRef</td> <td class=c>N</td> <td><span class=s>0 = Above Sea Level <br>1 = Below Sea Level</span></td></tr> <tr> <td title='0x00ba = 186'>0x00ba</td> <td>GPSAltitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00bb = 187'>0x00bb</td> <td>GPSTimeStamp</td> <td class=c>N</td> <td><span class=s><span class=n>(combined with tags 0xbc and 0xbd)</span></span></td></tr> <tr> <td title='0x00be = 190'>0x00be</td> <td>GPSStatus</td> <td class=c>N</td> <td><span class=s>&#39;A&#39; = Measurement Active <br>&#39;V&#39; = Measurement Void</span></td></tr> <tr class=b> <td title='0x00bf = 191'>0x00bf</td> <td>GPSMeasureMode</td> <td class=c>N</td> <td><span class=s>2 = 2-Dimensional Measurement <br>3 = 3-Dimensional Measurement</span></td></tr> <tr> <td title='0x00c0 = 192'>0x00c0</td> <td>GPSDOP</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00c1 = 193'>0x00c1</td> <td>GPSSpeedRef</td> <td class=c>N</td> <td><span class=s>&#39;K&#39; = km/h <br>&#39;M&#39; = mph <br>&#39;N&#39; = knots</span></td></tr> <tr> <td title='0x00c2 = 194'>0x00c2</td> <td>GPSSpeed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00c3 = 195'>0x00c3</td> <td>GPSTrackRef</td> <td class=c>N</td> <td><span class=s>&#39;M&#39; = Magnetic North <br>&#39;T&#39; = True North</span></td></tr> <tr> <td title='0x00c4 = 196'>0x00c4</td> <td>GPSTrack</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00c5 = 197'>0x00c5</td> <td>GPSImgDirectionRef</td> <td class=c>N</td> <td><span class=s>&#39;M&#39; = Magnetic North <br>&#39;T&#39; = True North</span></td></tr> <tr> <td title='0x00c6 = 198'>0x00c6</td> <td>GPSImgDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00c7 = 199'>0x00c7</td> <td>GPSMapDatum</td> <td class=c>N</td> <td><span class=s><span class=n>(combined with tag 0xc8)</span></span></td></tr> <tr> <td title='0x00e0 = 224'>0x00e0</td> <td>MakeModel</td> <td class=c>-</td> <td>--&gt; <a href='H264.html#MakeModel'>H264 MakeModel Tags</a></td></tr> <tr class=b> <td title='0x00e1 = 225'>0x00e1</td> <td>RecInfo</td> <td class=c>-</td> <td>--&gt; <a href='H264.html#RecInfo'>H264 RecInfo Tags</a> <br><span class='n s'>(Canon only)</span></td></tr> <tr> <td title='0x00e4 = 228'>0x00e4</td> <td>Model</td> <td class=c>N</td> <td><span class=s><span class=n>(Sony cameras only, combined with tags 0xe5 and 0xe6)</span></span></td></tr> <tr class=b> <td title='0x00ee = 238'>0x00ee</td> <td>FrameInfo</td> <td class=c>-</td> <td>--&gt; <a href='H264.html#FrameInfo'>H264 FrameInfo Tags</a> <br><span class='n s'>(Canon only)</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Camera1'>H264 Camera1 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ApertureSetting</td> <td class=c>N</td> <td><span class=s>0xfe = Closed <br>0xff = Auto</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>Gain</td> <td class=c>N</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.1</td> <td>ExposureProgram</td> <td class=c>N</td> <td><span class=s>[Mask 0xf0] <br>0x0 = Program AE <br>0x10 = Gain <br>0x20 = Shutter speed priority AE <br>0x30 = Aperture-priority AE <br>0x40 = Manual</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.1</td> <td>WhiteBalance</td> <td class=c>N</td> <td><span class=s>[Mask 0xe0] <br>0x0 = Auto <br>0x20 = Hold <br>0x40 = 1-Push <br>0x60 = Daylight</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>Focus</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Camera2'>H264 Camera2 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>ImageStabilization</td> <td class=c>N</td> <td><span class=s>0x0 = Off <br>0x3f = On (0x3f) <br>0xbf = Off (0xbf) <br>0xff = n/a</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Shutter'>H264 Shutter Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1.1</td> <td>ExposureTime</td> <td class=c>N</td> <td><span class=s>[Mask 0x7fff]</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='MakeModel'>H264 MakeModel Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td><span class=s>0x103 = Panasonic <br>0x108 = Sony <br>0x1011 = Canon <br>0x1104 = JVC</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='RecInfo'>H264 RecInfo Tags</a></h2> <p>Recording information stored by some Canon video cameras.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>RecordingMode</td> <td class=c>N</td> <td><span class=s>2 = XP+ <br>4 = SP <br>5 = LP <br>6 = FXP <br>7 = MXP</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='FrameInfo'>H264 FrameInfo Tags</a></h2> <p>Frame rate information stored by some Canon video cameras.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>CaptureFrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>VideoFrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised May 15, 2013</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/HP.html����������������������������������������������������������000644 �000765 �000024 �00000010275 11663037143 020234� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>HP Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>HP Tags</h2> <p>These tables list tags found in the maker notes of some Hewlett-Packard camera models.</p> <p>The first table lists tags found in the EXIF-format maker notes of the PhotoSmart 720 (also used by the Vivitar ViviCam 3705, 3705B and 3715).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0e00 = 3584'>0x0e00</td> <td>PrintIM</td> <td class=c>-</td> <td>--&gt; <a href='PrintIM.html'>PrintIM Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Type2'>HP Type2 Tags</a></h2> <p>These tags are used by the PhotoSmart E427.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Lens Shading'</td> <td>LensShading</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'PreviewImage'</td> <td>PreviewImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Serial Number'</td> <td>SerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Type4'>HP Type4 Tags</a></h2> <p>These tags are used by the PhotoSmart M627.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>MaxAperture</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>CameraDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='92 = 0x5c'>92</td> <td>SerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Type6'>HP Type6 Tags</a></h2> <p>These tags are used by the PhotoSmart M425, M525 and M527.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>CameraDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='88 = 0x58'>88</td> <td>SerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='TDHD'>HP TDHD Tags</a></h2> <p>These tags are extracted from the APP6 &quot;TDHD&quot; segment of Photosmart R837 JPEG images. Many other unknown tags exist in is data, and can be seen with the Unknown (-u) option.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'CMSN'</td> <td>SerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'FWRV'</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'LSLV'</td> <td>LSLV</td> <td class=c>-</td> <td>--&gt; <a href='HP.html#TDHD'>HP TDHD Tags</a></td></tr> <tr class=b> <td>'TDHD'</td> <td>TDHD</td> <td class=c>-</td> <td>--&gt; <a href='HP.html#TDHD'>HP TDHD Tags</a></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised May 31, 2010</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/HTML.html��������������������������������������������������������000644 �000765 �000024 �00000032771 11773560211 020475� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>HTML Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>HTML Tags</h2> <p>Meta information extracted from the header of HTML and XHTML files. This is a mix of information found in the <code>META</code> elements, <code>XML</code> element, and the <code>TITLE</code> element.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'abstract'</td> <td>Abstract</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'author'</td> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'classification'</td> <td>Classification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'content-language'</td> <td>ContentLanguage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'copyright'</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'dc'</td> <td>DC</td> <td class=c>-</td> <td>--&gt; <a href='HTML.html#dc'>HTML dc Tags</a></td></tr> <tr> <td>'description'</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'distribution'</td> <td>Distribution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'doc-class'</td> <td>DocClass</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'doc-rights'</td> <td>DocRights</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'doc-type'</td> <td>DocType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'formatter'</td> <td>Formatter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'generator'</td> <td>Generator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'generatorversion'</td> <td>GeneratorVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'googlebot'</td> <td>GoogleBot</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'http-equiv'</td> <td>HTTP-equiv</td> <td class=c>-</td> <td>--&gt; <a href='HTML.html#equiv'>HTML equiv Tags</a></td></tr> <tr> <td>'keywords'</td> <td>Keywords</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr class=b> <td>'mssmarttagspreventparsing'</td> <td>NoMSSmartTags</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ncc'</td> <td>NCC</td> <td class=c>-</td> <td>--&gt; <a href='HTML.html#ncc'>HTML ncc Tags</a></td></tr> <tr class=b> <td>'o'</td> <td>Office</td> <td class=c>-</td> <td>--&gt; <a href='HTML.html#Office'>HTML Office Tags</a></td></tr> <tr> <td>'originator'</td> <td>Originator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'owner'</td> <td>Owner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'prod'</td> <td>Prod</td> <td class=c>-</td> <td>--&gt; <a href='HTML.html#prod'>HTML prod Tags</a></td></tr> <tr class=b> <td>'progid'</td> <td>ProgID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'rating'</td> <td>Rating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'refresh'</td> <td>Refresh</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'resource-type'</td> <td>ResourceType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'revisit-after'</td> <td>RevisitAfter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'robots'</td> <td>Robots</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr class=b> <td>'title'</td> <td>Title</td> <td class=c>N</td> <td><span class=s><span class=n>(the only extracted tag which isn&#39;t from an HTML META element)</span></span></td></tr> <tr> <td>'vw96'</td> <td>VW96</td> <td class=c>-</td> <td>--&gt; <a href='HTML.html#vw96'>HTML vw96 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='dc'>HTML dc Tags</a></h2> <p>Dublin Core schema tags (also used in XMP).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'contributor'</td> <td>Contributor</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr class=b> <td>'coverage'</td> <td>Coverage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'creator'</td> <td>Creator</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr class=b> <td>'date'</td> <td>Date</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr> <td>'description'</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'format'</td> <td>Format</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'identifier'</td> <td>Identifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'language'</td> <td>Language</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr> <td>'publisher'</td> <td>Publisher</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr class=b> <td>'relation'</td> <td>Relation</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr> <td>'rights'</td> <td>Rights</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'source'</td> <td>Source</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'subject'</td> <td>Subject</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr class=b> <td>'title'</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'type'</td> <td>Type</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='equiv'>HTML equiv Tags</a></h2> <p>These tags have a family 1 group name of &quot;HTTP-equiv&quot;.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'cache-control'</td> <td>CacheControl</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'content-disposition'</td> <td>ContentDisposition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'content-language'</td> <td>ContentLanguage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'content-script-type'</td> <td>ContentScriptType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'content-style-type'</td> <td>ContentStyleType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'content-type'</td> <td>ContentType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'default-style'</td> <td>DefaultStyle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'expires'</td> <td>Expires</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ext-cache'</td> <td>ExtCache</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'imagetoolbar'</td> <td>ImageToolbar</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'lotus'</td> <td>Lotus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'page-enter'</td> <td>PageEnter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'page-exit'</td> <td>PageExit</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'pics-label'</td> <td>PicsLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pragma'</td> <td>Pragma</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'refresh'</td> <td>Refresh</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'reply-to'</td> <td>ReplyTo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'set-cookie'</td> <td>SetCookie</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'site-enter'</td> <td>SiteEnter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'site-exit'</td> <td>SiteExit</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'vary'</td> <td>Vary</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'window-target'</td> <td>WindowTarget</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ncc'>HTML ncc Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'charset'</td> <td>CharacterSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'depth'</td> <td>Depth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'files'</td> <td>Files</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'footnotes'</td> <td>Footnotes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'generator'</td> <td>Generator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'kbytesize'</td> <td>KByteSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'maxpagenormal'</td> <td>MaxPageNormal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'multimediatype'</td> <td>MultimediaType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'narrator'</td> <td>Narrator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'pagefront'</td> <td>PageFront</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pagenormal'</td> <td>PageNormal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'pagespecial'</td> <td>PageSpecial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'prodnotes'</td> <td>ProdNotes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'produceddate'</td> <td>ProducedDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'producer'</td> <td>Producer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'revision'</td> <td>Revision</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'revisiondate'</td> <td>RevisionDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'setinfo'</td> <td>SetInfo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'sidebars'</td> <td>Sidebars</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'sourcedate'</td> <td>SourceDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'sourceedition'</td> <td>SourceEdition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'sourcepublisher'</td> <td>SourcePublisher</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'sourcerights'</td> <td>SourceRights</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'sourcetitle'</td> <td>SourceTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'tocitems'</td> <td>TOCItems</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'totaltime'</td> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Office'>HTML Office Tags</a></h2> <p>Tags written by Microsoft Office applications.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Author'</td> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Category'</td> <td>Category</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Characters'</td> <td>Characters</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'CharactersWithSpaces'</td> <td>CharactersWithSpaces</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Company'</td> <td>Company</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Created'</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Description'</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Keywords'</td> <td>Keywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'LastAuthor'</td> <td>LastAuthor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'LastPrinted'</td> <td>LastPrinted</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'LastSaved'</td> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Lines'</td> <td>Lines</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Manager'</td> <td>Manager</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Pages'</td> <td>Pages</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Paragraphs'</td> <td>Paragraphs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Revision'</td> <td>RevisionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Subject'</td> <td>Subject</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Template'</td> <td>Template</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TotalTime'</td> <td>TotalEditTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Version'</td> <td>RevisionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Words'</td> <td>Words</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='prod'>HTML prod Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'recengineer'</td> <td>RecEngineer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'reclocation'</td> <td>RecLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='vw96'>HTML vw96 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'objecttype'</td> <td>ObjectType</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jun 30, 2012</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������Image-ExifTool-10.10/html/TagNames/ICC_Profile.html�������������������������������������������������000644 �000765 �000024 �00000041163 12527350231 021777� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>ICC_Profile Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>ICC_Profile Tags</h2> <p>ICC profile information is used in many different file types including JPEG, TIFF, PDF, PostScript, Photoshop, PNG, MIFF, PICT, QuickTime, XCF and some RAW formats. While the tags listed below are not individually writable, the entire profile itself can be accessed via the extra &#39;ICC_Profile&#39; tag, but this tag is neither extracted nor written unless specified explicitly. See <a href="http://www.color.org/icc_specs2.xalter">http://www.color.org/icc_specs2.xalter</a> for the official ICC specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'A2B0'</td> <td>AToB0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'A2B1'</td> <td>AToB1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'A2B2'</td> <td>AToB2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'B2A0'</td> <td>BToA0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'B2A1'</td> <td>BToA1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'B2A2'</td> <td>BToA2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'B2D0'</td> <td>BToD0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'B2D1'</td> <td>BToD1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'B2D2'</td> <td>BToD2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'B2D3'</td> <td>BToD3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'D2B0'</td> <td>DToB0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'D2B1'</td> <td>DToB1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'D2B2'</td> <td>DToB2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'D2B3'</td> <td>DToB3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Header'</td> <td>ProfileHeader</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html#Header'>ICC_Profile Header Tags</a></td></tr> <tr class=b> <td>'MS00'</td> <td>WCSProfiles</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'bTRC'</td> <td>BlueTRC</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'bXYZ'</td> <td>BlueMatrixColumn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'bfd '</td> <td>UCRBG</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'bkpt'</td> <td>MediaBlackPoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'calt'</td> <td>CalibrationDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'chad'</td> <td>ChromaticAdaptation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'chrm'</td> <td>Chromaticity</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html#Chromaticity'>ICC_Profile Chromaticity Tags</a></td></tr> <tr class=b> <td>'ciis'</td> <td>ColorimetricIntentImageState</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'clot'</td> <td>ColorantTableOut</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'clro'</td> <td>ColorantOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'clrt'</td> <td>ColorantTable</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html#ColorantTable'>ICC_Profile ColorantTable Tags</a></td></tr> <tr class=b> <td>'cprt'</td> <td>ProfileCopyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'crdi'</td> <td>CRDInfo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'desc'</td> <td>ProfileDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'devs'</td> <td>DeviceSettings</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'dmdd'</td> <td>DeviceModelDesc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'dmnd'</td> <td>DeviceMfgDesc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'dscm'</td> <td>ProfileDescriptionML</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'fpce'</td> <td>FocalPlaneColorimetryEstimates</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'gTRC'</td> <td>GreenTRC</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'gXYZ'</td> <td>GreenMatrixColumn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'gamt'</td> <td>Gamut</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'kTRC'</td> <td>GrayTRC</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'lumi'</td> <td>Luminance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'meas'</td> <td>Measurement</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html#Measurement'>ICC_Profile Measurement Tags</a></td></tr> <tr class=b> <td>'meta'</td> <td>Metadata</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html#Metadata'>ICC_Profile Metadata Tags</a></td></tr> <tr> <td>'mmod'</td> <td>MakeAndModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ncl2'</td> <td>NamedColor2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ncol'</td> <td>NamedColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ndin'</td> <td>NativeDisplayInfo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pre0'</td> <td>Preview0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'pre1'</td> <td>Preview1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pre2'</td> <td>Preview2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ps2i'</td> <td>PS2RenderingIntent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ps2s'</td> <td>PostScript2CSA</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'psd0'</td> <td>PostScript2CRD0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'psd1'</td> <td>PostScript2CRD1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'psd2'</td> <td>PostScript2CRD2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pseq'</td> <td>ProfileSequenceDesc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'psid'</td> <td>ProfileSequenceIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'psvm'</td> <td>PS2CRDVMSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'rTRC'</td> <td>RedTRC</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'rXYZ'</td> <td>RedMatrixColumn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'resp'</td> <td>OutputResponse</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'rhoc'</td> <td>ReflectionHardcopyOrigColorimetry</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'rig0'</td> <td>PerceptualRenderingIntentGamut</td> <td class=c>N</td> <td><span class=s>&#39;prmg&#39; = Perceptual Reference Medium Gamut</span></td></tr> <tr> <td>'rig2'</td> <td>SaturationRenderingIntentGamut</td> <td class=c>N</td> <td><span class=s>&#39;prmg&#39; = Perceptual Reference Medium Gamut</span></td></tr> <tr class=b> <td>'rpoc'</td> <td>ReflectionPrintOutputColorimetry</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'sape'</td> <td>SceneAppearanceEstimates</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'scoe'</td> <td>SceneColorimetryEstimates</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'scrd'</td> <td>ScreeningDesc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'scrn'</td> <td>Screening</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'targ'</td> <td>CharTarget</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'tech'</td> <td>Technology</td> <td class=c>N</td> <td><table class=cols><tr> <td>&#39;AMD &#39; = Active Matrix Display <br>&#39;CRT &#39; = Cathode Ray Tube Display <br>&#39;KPCD&#39; = Photo CD <br>&#39;PMD &#39; = Passive Matrix Display <br>&#39;dcam&#39; = Digital Camera <br>&#39;dcpj&#39; = Digital Cinema Projector <br>&#39;dmpc&#39; = Digital Motion Picture Camera <br>&#39;dsub&#39; = Dye Sublimation Printer <br>&#39;epho&#39; = Electrophotographic Printer <br>&#39;esta&#39; = Electrostatic Printer <br>&#39;flex&#39; = Flexography <br>&#39;fprn&#39; = Film Writer <br>&#39;fscn&#39; = Film Scanner <br>&#39;grav&#39; = Gravure <br>&#39;ijet&#39; = Ink Jet Printer <br>&#39;imgs&#39; = Photo Image Setter <br>&#39;mpfr&#39; = Motion Picture Film Recorder <br>&#39;mpfs&#39; = Motion Picture Film Scanner <br>&#39;offs&#39; = Offset Lithography <br>&#39;pjtv&#39; = Projection Television <br>&#39;rpho&#39; = Photographic Paper Printer <br>&#39;rscn&#39; = Reflective Scanner <br>&#39;silk&#39; = Silkscreen <br>&#39;twax&#39; = Thermal Wax Printer <br>&#39;vidc&#39; = Video Camera <br>&#39;vidm&#39; = Video Monitor</td></tr></table> </td></tr> <tr> <td>'vcgt'</td> <td>VideoCardGamma</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'view'</td> <td>ViewingConditions</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html#ViewingConditions'>ICC_Profile ViewingConditions Tags</a></td></tr> <tr> <td>'vued'</td> <td>ViewingCondDesc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'wtpt'</td> <td>MediaWhitePoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Header'>ICC_Profile Header Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ProfileCMMType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ProfileVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>ProfileClass</td> <td class=c>N</td> <td><span class=s>&#39;abst&#39; = Abstract Profile <br>&#39;link&#39; = DeviceLink Profile <br>&#39;mntr&#39; = Display Device Profile <br>&#39;nkpf&#39; = Nikon Input Device Profile (NON-STANDARD!) <br>&#39;nmcl&#39; = NamedColor Profile <br>&#39;prtr&#39; = Output Device Profile <br>&#39;scnr&#39; = Input Device Profile <br>&#39;spac&#39; = ColorSpace Conversion Profile</span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>ColorSpaceData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>ProfileConnectionSpace</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>ProfileDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='36 = 0x24'>36</td> <td>ProfileFileSignature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>PrimaryPlatform</td> <td class=c>N</td> <td><span class=s>&#39;APPL&#39; = Apple Computer Inc. <br>&#39;MSFT&#39; = Microsoft Corporation <br>&#39;SGI &#39; = Silicon Graphics Inc. <br>&#39;SUNW&#39; = Sun Microsystems Inc. <br>&#39;TGNT&#39; = Taligent Inc.</span></td></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>CMMFlags</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>DeviceManufacturer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='52 = 0x34'>52</td> <td>DeviceModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='56 = 0x38'>56</td> <td>DeviceAttributes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='64 = 0x40'>64</td> <td>RenderingIntent</td> <td class=c>N</td> <td><span class=s>0 = Perceptual <br>1 = Media-Relative Colorimetric <br>2 = Saturation <br>3 = ICC-Absolute Colorimetric</span></td></tr> <tr class=b> <td class=r title='68 = 0x44'>68</td> <td>ConnectionSpaceIlluminant</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='80 = 0x50'>80</td> <td>ProfileCreator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='84 = 0x54'>84</td> <td>ProfileID</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Chromaticity'>ICC_Profile Chromaticity Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>ChromaticityChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>ChromaticityColorant</td> <td class=c>N</td> <td><span class=s>1 = ITU-R BT.709 <br>2 = SMPTE RP145-1994 <br>3 = EBU Tech.3213-E <br>4 = P22</span></td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>ChromaticityChannel1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>ChromaticityChannel2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>ChromaticityChannel3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='36 = 0x24'>36</td> <td>ChromaticityChannel4</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorantTable'>ICC_Profile ColorantTable Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>ColorantCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>Colorant1Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>Colorant1Coordinates</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>Colorant2Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='82 = 0x52'>82</td> <td>Colorant2Coordinates</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='88 = 0x58'>88</td> <td>Colorant3Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='120 = 0x78'>120</td> <td>Colorant3Coordinates</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Measurement'>ICC_Profile Measurement Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>MeasurementObserver</td> <td class=c>N</td> <td><span class=s>1 = CIE 1931 <br>2 = CIE 1964</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>MeasurementBacking</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>MeasurementGeometry</td> <td class=c>N</td> <td><span class=s>0 = Unknown <br>1 = 0/45 or 45/0 <br>2 = 0/d or d/0</span></td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28</td> <td>MeasurementFlare</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>MeasurementIlluminant</td> <td class=c>N</td> <td><table class=cols><tr> <td>1 = D50 <br>2 = D65 <br>3 = D93 <br>4 = F2</td><td>&nbsp;&nbsp;</td> <td>5 = D55 <br>6 = A <br>7 = Equi-Power (E) <br>8 = F8</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='Metadata'>ICC_Profile Metadata Tags</a></h2> <p>Only these few tags have been pre-defined, but ExifTool will extract any Metadata tags that exist.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>ManufacturerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MediaColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MediaWeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ViewingConditions'>ICC_Profile ViewingConditions Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>ViewingCondIlluminant</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>ViewingCondSurround</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>ViewingCondIlluminantType</td> <td class=c>N</td> <td><table class=cols><tr> <td>1 = D50 <br>2 = D65 <br>3 = D93 <br>4 = F2</td><td>&nbsp;&nbsp;</td> <td>5 = D55 <br>6 = A <br>7 = Equi-Power (E) <br>8 = F8</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jun 20, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/ID3.html���������������������������������������������������������000644 �000765 �000024 �00000101005 12542534403 020272� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>ID3 Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>ID3 Tags</h2> <p>ExifTool extracts ID3 information from MP3, MPEG, AIFF, OGG, FLAC, APE, MPC and RealAudio files. ID3v2 tags which support multiple languages (eg. Comment and Lyrics) are extracted by specifying the tag name, followed by a dash (&#39;-&#39;), then a 3-character ISO 639-2 language code (eg. &quot;Comment-spa&quot;). See <a href="http://www.id3.org/">http://www.id3.org/</a> for the official ID3 specification and <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php">http://www.loc.gov/standards/iso639-2/php/code_list.php</a> for a list of ISO 639-2 language codes.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>ID3v1</td> <td class=c>-</td> <td>--&gt; <a href='ID3.html#v1'>ID3 v1 Tags</a></td></tr> <tr class=b> <td>ID3v1_Enh</td> <td class=c>-</td> <td>--&gt; <a href='ID3.html#v1_Enh'>ID3 v1_Enh Tags</a></td></tr> <tr> <td>ID3v2_2</td> <td class=c>-</td> <td>--&gt; <a href='ID3.html#v2_2'>ID3 v2_2 Tags</a></td></tr> <tr class=b> <td>ID3v2_3</td> <td class=c>-</td> <td>--&gt; <a href='ID3.html#v2_3'>ID3 v2_3 Tags</a></td></tr> <tr> <td>ID3v2_4</td> <td class=c>-</td> <td>--&gt; <a href='ID3.html#v2_4'>ID3 v2_4 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='v1'>ID3 v1 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='33 = 0x21'>33</td> <td>Artist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='63 = 0x3f'>63</td> <td>Album</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='93 = 0x5d'>93</td> <td>Year</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='97 = 0x61'>97</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='125 = 0x7d'>125</td> <td>Track</td> <td class=c>N</td> <td><span class=s><span class=n>(v1.1 addition -- last 2 bytes of v1.0 Comment field)</span></span></td></tr> <tr> <td class=r title='127 = 0x7f'>127</td> <td>Genre</td> <td class=c>N</td> <td><span class=s><span class=n>(CR and RX are ID3v2 only)</span></span><table class=cols><tr> <td>0 = Blues <br>1 = Classic Rock <br>2 = Country <br>3 = Dance <br>4 = Disco <br>5 = Funk <br>6 = Grunge <br>7 = Hip-Hop <br>8 = Jazz <br>9 = Metal <br>10 = New Age <br>11 = Oldies <br>12 = Other <br>13 = Pop <br>14 = R&amp;B <br>15 = Rap <br>16 = Reggae <br>17 = Rock <br>18 = Techno <br>19 = Industrial <br>20 = Alternative <br>21 = Ska <br>22 = Death Metal <br>23 = Pranks <br>24 = Soundtrack <br>25 = Euro-Techno <br>26 = Ambient <br>27 = Trip-Hop <br>28 = Vocal <br>29 = Jazz+Funk <br>30 = Fusion <br>31 = Trance <br>32 = Classical <br>33 = Instrumental <br>34 = Acid <br>35 = House <br>36 = Game <br>37 = Sound Clip <br>38 = Gospel <br>39 = Noise <br>40 = Alt. Rock <br>41 = Bass <br>42 = Soul <br>43 = Punk <br>44 = Space <br>45 = Meditative <br>46 = Instrumental Pop <br>47 = Instrumental Rock <br>48 = Ethnic <br>49 = Gothic <br>50 = Darkwave <br>51 = Techno-Industrial <br>52 = Electronic <br>53 = Pop-Folk <br>54 = Eurodance <br>55 = Dream <br>56 = Southern Rock <br>57 = Comedy <br>58 = Cult <br>59 = Gangsta Rap <br>60 = Top 40 <br>61 = Christian Rap <br>62 = Pop/Funk <br>63 = Jungle <br>64 = Native American</td><td>&nbsp;&nbsp;</td> <td>65 = Cabaret <br>66 = New Wave <br>67 = Psychedelic <br>68 = Rave <br>69 = Showtunes <br>70 = Trailer <br>71 = Lo-Fi <br>72 = Tribal <br>73 = Acid Punk <br>74 = Acid Jazz <br>75 = Polka <br>76 = Retro <br>77 = Musical <br>78 = Rock &amp; Roll <br>79 = Hard Rock <br>80 = Folk <br>81 = Folk-Rock <br>82 = National Folk <br>83 = Swing <br>84 = Fast-Fusion <br>85 = Bebop <br>86 = Latin <br>87 = Revival <br>88 = Celtic <br>89 = Bluegrass <br>90 = Avantgarde <br>91 = Gothic Rock <br>92 = Progressive Rock <br>93 = Psychedelic Rock <br>94 = Symphonic Rock <br>95 = Slow Rock <br>96 = Big Band <br>97 = Chorus <br>98 = Easy Listening <br>99 = Acoustic <br>100 = Humour <br>101 = Speech <br>102 = Chanson <br>103 = Opera <br>104 = Chamber Music <br>105 = Sonata <br>106 = Symphony <br>107 = Booty Bass <br>108 = Primus <br>109 = Porn Groove <br>110 = Satire <br>111 = Slow Jam <br>112 = Club <br>113 = Tango <br>114 = Samba <br>115 = Folklore <br>116 = Ballad <br>117 = Power Ballad <br>118 = Rhythmic Soul <br>119 = Freestyle <br>120 = Duet <br>121 = Punk Rock <br>122 = Drum Solo <br>123 = A Cappella <br>124 = Euro-House <br>125 = Dance Hall <br>126 = Goa <br>127 = Drum &amp; Bass <br>128 = Club-House <br>129 = Hardcore</td><td>&nbsp;&nbsp;</td> <td>130 = Terror <br>131 = Indie <br>132 = BritPop <br>133 = Afro-Punk <br>134 = Polsk Punk <br>135 = Beat <br>136 = Christian Gangsta Rap <br>137 = Heavy Metal <br>138 = Black Metal <br>139 = Crossover <br>140 = Contemporary Christian <br>141 = Christian Rock <br>142 = Merengue <br>143 = Salsa <br>144 = Thrash Metal <br>145 = Anime <br>146 = JPop <br>147 = Synthpop <br>148 = Abstract <br>149 = Art Rock <br>150 = Baroque <br>151 = Bhangra <br>152 = Big Beat <br>153 = Breakbeat <br>154 = Chillout <br>155 = Downtempo <br>156 = Dub <br>157 = EBM <br>158 = Eclectic <br>159 = Electro <br>160 = Electroclash <br>161 = Emo <br>162 = Experimental <br>163 = Garage <br>164 = Global <br>165 = IDM <br>166 = Illbient <br>167 = Industro-Goth <br>168 = Jam Band <br>169 = Krautrock <br>170 = Leftfield <br>171 = Lounge <br>172 = Math Rock <br>173 = New Romantic <br>174 = Nu-Breakz <br>175 = Post-Punk <br>176 = Post-Rock <br>177 = Psytrance <br>178 = Shoegaze <br>179 = Space Rock <br>180 = Trop Rock <br>181 = World Music <br>182 = Neoclassical <br>183 = Audiobook <br>184 = Audio Theatre <br>185 = Neue Deutsche Welle <br>186 = Podcast <br>187 = Indie Rock <br>188 = G-Funk <br>189 = Dubstep <br>190 = Garage Rock <br>191 = Psybient <br>255 = None <br>&#39;CR&#39; = Cover <br>&#39;RX&#39; = Remix</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='v1_Enh'>ID3 v1_Enh Tags</a></h2> <p>ID3 version 1 &quot;Enhanced TAG&quot; information (not part of the official spec).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>Title2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='64 = 0x40'>64</td> <td>Artist2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='124 = 0x7c'>124</td> <td>Album2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='184 = 0xb8'>184</td> <td>Speed</td> <td class=c>N</td> <td><span class=s>1 = Slow <br>2 = Medium <br>3 = Fast <br>4 = Hardcore</span></td></tr> <tr> <td class=r title='185 = 0xb9'>185</td> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='215 = 0xd7'>215</td> <td>StartTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='221 = 0xdd'>221</td> <td>EndTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='v2_2'>ID3 v2_2 Tags</a></h2> <p>ExifTool extracts mainly text-based tags from ID3v2 information. The tags in the tables below are those extracted by ExifTool, and don&#39;t represent a complete list of available ID3v2 tags.</p> <p>ID3 version 2.2 tags. (These are the tags written by iTunes 5.0.)</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'CNT'</td> <td>PlayCounter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'COM'</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IPL'</td> <td>InvolvedPeople</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ITU'</td> <td>iTunesU?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'PCS'</td> <td>Podcast?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'PIC'</td> <td>Picture</td> <td class=c>N</td> <td><span class=s><span class=n>(the 3 tags below are also extracted from this PIC frame)</span></span></td></tr> <tr> <td>'PIC-1'</td> <td>PictureFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'PIC-2'</td> <td>PictureType</td> <td class=c>N</td> <td>--&gt; <a href='ID3.html#PictureType'>ID3 PictureType Values</a></td></tr> <tr> <td>'PIC-3'</td> <td>PictureDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'POP'</td> <td>Popularimeter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'RVA'</td> <td>RelativeVolumeAdjustment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'SLT'</td> <td>SynLyrics</td> <td class=c>-</td> <td>--&gt; <a href='ID3.html#SynLyrics'>ID3 SynLyrics Tags</a></td></tr> <tr> <td>'TAL'</td> <td>Album</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TBP'</td> <td>BeatsPerMinute</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TCM'</td> <td>Composer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TCO'</td> <td>Genre</td> <td class=c>N</td> <td><span class=s><span class=n>(uses same lookup table as ID3v1 Genre)</span></span></td></tr> <tr> <td>'TCP'</td> <td>Compilation</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td>'TCR'</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TDA'</td> <td>Date</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TDY'</td> <td>PlaylistDelay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TEN'</td> <td>EncodedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TFT'</td> <td>FileType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TIM'</td> <td>Time</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TKE'</td> <td>InitialKey</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TLA'</td> <td>Language</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TLE'</td> <td>Length</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TMT'</td> <td>Media</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TOA'</td> <td>OriginalArtist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TOF'</td> <td>OriginalFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TOL'</td> <td>OriginalLyricist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TOR'</td> <td>OriginalReleaseYear</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TOT'</td> <td>OriginalAlbum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TP1'</td> <td>Artist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TP2'</td> <td>Band</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TP3'</td> <td>Conductor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TP4'</td> <td>InterpretedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TPA'</td> <td>PartOfSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TPB'</td> <td>Publisher</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TRC'</td> <td>ISRC</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TRD'</td> <td>RecordingDates</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TRK'</td> <td>Track</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TS2'</td> <td>AlbumArtistSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TSA'</td> <td>AlbumSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TSC'</td> <td>ComposerSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TSI'</td> <td>Size</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TSP'</td> <td>PerformerSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TSS'</td> <td>EncoderSettings</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TST'</td> <td>TitleSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TT1'</td> <td>Grouping</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TT2'</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TT3'</td> <td>Subtitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TXT'</td> <td>Lyricist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TXX'</td> <td>UserDefinedText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TYE'</td> <td>Year</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ULT'</td> <td>Lyrics</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'WAF'</td> <td>FileURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'WAR'</td> <td>ArtistURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'WAS'</td> <td>SourceURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'WCM'</td> <td>CommercialURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'WCP'</td> <td>CopyrightURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'WPB'</td> <td>PublisherURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'WXX'</td> <td>UserDefinedURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PictureType'>ID3 PictureType Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>PictureType</th><th>Value</th><th>PictureType</th><th>Value</th><th>PictureType</th></tr> <tr><td class=r>0</td><td>= Other</td> <td class='r b'>7</td><td class=b>= Lead Artist</td> <td class=r>14</td><td>= Recording Session</td> </tr><tr><td class=r>1</td><td>= 32x32 PNG Icon</td> <td class='r b'>8</td><td class=b>= Artist</td> <td class=r>15</td><td>= Performance</td> </tr><tr><td class=r>2</td><td>= Other Icon</td> <td class='r b'>9</td><td class=b>= Conductor</td> <td class=r>16</td><td>= Capture from Movie or Video</td> </tr><tr><td class=r>3</td><td>= Front Cover</td> <td class='r b'>10</td><td class=b>= Band</td> <td class=r>17</td><td>= Bright(ly) Colored Fish</td> </tr><tr><td class=r>4</td><td>= Back Cover</td> <td class='r b'>11</td><td class=b>= Composer</td> <td class=r>18</td><td>= Illustration</td> </tr><tr><td class=r>5</td><td>= Leaflet</td> <td class='r b'>12</td><td class=b>= Lyricist</td> <td class=r>19</td><td>= Band Logo</td> </tr><tr><td class=r>6</td><td>= Media</td> <td class='r b'>13</td><td class=b>= Recording Studio or Location</td> <td class=r>20</td><td>= Publisher Logo</td> </tr></table></td></tr></table></blockquote> <h2><a name='SynLyrics'>ID3 SynLyrics Tags</a></h2> <p>The following tags are extracted from synchronized lyrics/text frames.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>SynchronizedLyricsDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SynchronizedLyricsText</td> <td class=c title=' + = List'>N+</td> <td><span class=s><span class=n>(each list item has a leading time stamp in square brackets. Time stamps may be in seconds with format [MM:SS.ss], or MPEG frames with format [FFFF], depending on how this information was stored)</span></span></td></tr> <tr> <td>SynchronizedLyricsType</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Other <br>1 = Lyrics <br>2 = Text Transcription <br>3 = Movement/part Name <br>4 = Events <br>5 = Chord <br>6 = Trivia/&quot;pop-up&quot; Information <br>7 = Web Page URL <br>8 = Image URL</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='v2_3'>ID3 v2_3 Tags</a></h2> <p>ID3 version 2.3 tags. Includes some non-standard tags written by other software.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'APIC'</td> <td>Picture</td> <td class=c>N</td> <td><span class=s><span class=n>(the 3 tags below are also extracted from this APIC frame)</span></span></td></tr> <tr class=b> <td>'APIC-1'</td> <td>PictureMIMEType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'APIC-2'</td> <td>PictureType</td> <td class=c>N</td> <td>--&gt; <a href='ID3.html#PictureType'>ID3 PictureType Values</a></td></tr> <tr class=b> <td>'APIC-3'</td> <td>PictureDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'COMM'</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IPLS'</td> <td>InvolvedPeople</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ITNU'</td> <td>iTunesU?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'MCDI'</td> <td>MusicCDIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'OWNE'</td> <td>Ownership</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'PCNT'</td> <td>PlayCounter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'PCST'</td> <td>Podcast?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'POPM'</td> <td>Popularimeter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'PRIV'</td> <td>Private</td> <td class=c>-</td> <td>--&gt; <a href='ID3.html#Private'>ID3 Private Tags</a></td></tr> <tr class=b> <td>'SYLT'</td> <td>SynLyrics</td> <td class=c>-</td> <td>--&gt; <a href='ID3.html#SynLyrics'>ID3 SynLyrics Tags</a></td></tr> <tr> <td>'TALB'</td> <td>Album</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TBPM'</td> <td>BeatsPerMinute</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TCAT'</td> <td>PodcastCategory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TCMP'</td> <td>Compilation</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td>'TCOM'</td> <td>Composer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TCON'</td> <td>Genre</td> <td class=c>N</td> <td><span class=s><span class=n>(uses same lookup table as ID3v1 Genre)</span></span></td></tr> <tr> <td>'TCOP'</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TDAT'</td> <td>Date</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TDES'</td> <td>PodcastDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TDLY'</td> <td>PlaylistDelay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TENC'</td> <td>EncodedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TEXT'</td> <td>Lyricist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TFLT'</td> <td>FileType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TGID'</td> <td>PodcastID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TIME'</td> <td>Time</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TIT1'</td> <td>Grouping</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TIT2'</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TIT3'</td> <td>Subtitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TKEY'</td> <td>InitialKey</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TKWD'</td> <td>PodcastKeywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TLAN'</td> <td>Language</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TLEN'</td> <td>Length</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TMED'</td> <td>Media</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TOAL'</td> <td>OriginalAlbum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TOFN'</td> <td>OriginalFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TOLY'</td> <td>OriginalLyricist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TOPE'</td> <td>OriginalArtist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TORY'</td> <td>OriginalReleaseYear</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TOWN'</td> <td>FileOwner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TPE1'</td> <td>Artist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TPE2'</td> <td>Band</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TPE3'</td> <td>Conductor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TPE4'</td> <td>InterpretedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TPOS'</td> <td>PartOfSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TPUB'</td> <td>Publisher</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TRCK'</td> <td>Track</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TRDA'</td> <td>RecordingDates</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TRSN'</td> <td>InternetRadioStationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TRSO'</td> <td>InternetRadioStationOwner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TSIZ'</td> <td>Size</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TSO2'</td> <td>AlbumArtistSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TSOC'</td> <td>ComposerSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TSRC'</td> <td>ISRC</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TSSE'</td> <td>EncoderSettings</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TXXX'</td> <td>UserDefinedText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TYER'</td> <td>Year</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'USER'</td> <td>TermsOfUse</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'USLT'</td> <td>Lyrics</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'WCOM'</td> <td>CommercialURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'WCOP'</td> <td>CopyrightURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'WFED'</td> <td>PodcastURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'WOAF'</td> <td>FileURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'WOAR'</td> <td>ArtistURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'WOAS'</td> <td>SourceURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'WORS'</td> <td>InternetRadioStationURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'WPAY'</td> <td>PaymentURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'WPUB'</td> <td>PublisherURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'WXXX'</td> <td>UserDefinedURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'XDOR'</td> <td>OriginalReleaseTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'XOLY'</td> <td>OlympusDSS</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#DSS'>Olympus DSS Tags</a></td></tr> <tr> <td>'XSOA'</td> <td>AlbumSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'XSOP'</td> <td>PerformerSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'XSOT'</td> <td>TitleSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Private'>ID3 Private Tags</a></h2> <p>ID3 private (PRIV) tags. ExifTool will decode any private tags found, even if they do not appear in this table.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AverageLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PeakValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>WM_CollectionGroupID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>WM_CollectionID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>WM_ContentID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>WM_MediaClassPrimaryID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>WM_MediaClassSecondaryID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>WM_Provider</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>XMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='v2_4'>ID3 v2_4 Tags</a></h2> <p>ID3 version 2.4 tags. Includes some non-standard tags written by other software.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'APIC'</td> <td>Picture</td> <td class=c>N</td> <td><span class=s><span class=n>(the 3 tags below are also extracted from this APIC frame)</span></span></td></tr> <tr class=b> <td>'APIC-1'</td> <td>PictureMIMEType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'APIC-2'</td> <td>PictureType</td> <td class=c>N</td> <td>--&gt; <a href='ID3.html#PictureType'>ID3 PictureType Values</a></td></tr> <tr class=b> <td>'APIC-3'</td> <td>PictureDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'COMM'</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ITNU'</td> <td>iTunesU?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'MCDI'</td> <td>MusicCDIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'OWNE'</td> <td>Ownership</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'PCNT'</td> <td>PlayCounter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'PCST'</td> <td>Podcast?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'POPM'</td> <td>Popularimeter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'PRIV'</td> <td>Private</td> <td class=c>-</td> <td>--&gt; <a href='ID3.html#Private'>ID3 Private Tags</a></td></tr> <tr> <td>'RVA2'</td> <td>RelativeVolumeAdjustment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'SYLT'</td> <td>SynLyrics</td> <td class=c>-</td> <td>--&gt; <a href='ID3.html#SynLyrics'>ID3 SynLyrics Tags</a></td></tr> <tr> <td>'TALB'</td> <td>Album</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TBPM'</td> <td>BeatsPerMinute</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TCAT'</td> <td>PodcastCategory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TCMP'</td> <td>Compilation</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td>'TCOM'</td> <td>Composer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TCON'</td> <td>Genre</td> <td class=c>N</td> <td><span class=s><span class=n>(uses same lookup table as ID3v1 Genre)</span></span></td></tr> <tr> <td>'TCOP'</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TDEN'</td> <td>EncodingTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TDES'</td> <td>PodcastDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TDLY'</td> <td>PlaylistDelay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TDOR'</td> <td>OriginalReleaseTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TDRC'</td> <td>RecordingTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TDRL'</td> <td>ReleaseTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TDTG'</td> <td>TaggingTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TENC'</td> <td>EncodedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TEXT'</td> <td>Lyricist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TFLT'</td> <td>FileType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TGID'</td> <td>PodcastID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TIPL'</td> <td>InvolvedPeople</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TIT1'</td> <td>Grouping</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TIT2'</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TIT3'</td> <td>Subtitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TKEY'</td> <td>InitialKey</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TKWD'</td> <td>PodcastKeywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TLAN'</td> <td>Language</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TLEN'</td> <td>Length</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TMCL'</td> <td>MusicianCredits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TMED'</td> <td>Media</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TMOO'</td> <td>Mood</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TOAL'</td> <td>OriginalAlbum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TOFN'</td> <td>OriginalFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TOLY'</td> <td>OriginalLyricist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TOPE'</td> <td>OriginalArtist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TOWN'</td> <td>FileOwner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TPE1'</td> <td>Artist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TPE2'</td> <td>Band</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TPE3'</td> <td>Conductor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TPE4'</td> <td>InterpretedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TPOS'</td> <td>PartOfSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TPRO'</td> <td>ProducedNotice</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TPUB'</td> <td>Publisher</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TRCK'</td> <td>Track</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TRSN'</td> <td>InternetRadioStationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TRSO'</td> <td>InternetRadioStationOwner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TSO2'</td> <td>AlbumArtistSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TSOA'</td> <td>AlbumSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TSOC'</td> <td>ComposerSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TSOP'</td> <td>PerformerSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TSOT'</td> <td>TitleSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TSRC'</td> <td>ISRC</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TSSE'</td> <td>EncoderSettings</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TSST'</td> <td>SetSubtitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TXXX'</td> <td>UserDefinedText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'USER'</td> <td>TermsOfUse</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'USLT'</td> <td>Lyrics</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'WCOM'</td> <td>CommercialURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'WCOP'</td> <td>CopyrightURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'WFED'</td> <td>PodcastURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'WOAF'</td> <td>FileURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'WOAR'</td> <td>ArtistURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'WOAS'</td> <td>SourceURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'WORS'</td> <td>InternetRadioStationURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'WPAY'</td> <td>PaymentURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'WPUB'</td> <td>PublisherURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'WXXX'</td> <td>UserDefinedURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'XDOR'</td> <td>OriginalReleaseTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'XOLY'</td> <td>OlympusDSS</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#DSS'>Olympus DSS Tags</a></td></tr> <tr class=b> <td>'XSOA'</td> <td>AlbumSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'XSOP'</td> <td>PerformerSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'XSOT'</td> <td>TitleSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jun 24, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/index.html�������������������������������������������������������000644 �000765 �000024 �00000023213 12614671040 021025� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>ExifTool Tag Names</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>ExifTool Tag Names</h2> <p> The tables listed below give the names of all tags recognized by ExifTool. </p> <blockquote> <table width='100%' class=frame><tr><td> <table width='100%' class=inner cellspacing=1><tr class=h> <th colspan=6><span class=l>Tag Table Index</span></th></tr> <tr class=b><td width='16%'> <a href='JPEG.html'>JPEG</a><br> <a href='EXIF.html'>EXIF</a><br> <a href='IPTC.html'>IPTC</a><br> <a href='XMP.html'>XMP</a><br> <a href='GPS.html'>GPS</a><br> <a href='GeoTiff.html'>GeoTiff</a><br> <a href='ICC_Profile.html'>ICC_Profile</a><br> <a href='PrintIM.html'>PrintIM</a><br> <a href='Photoshop.html'>Photoshop</a><br> <a href='Apple.html'>Apple</a><br> <a href='Canon.html'>Canon</a><br> <a href='CanonCustom.html'>CanonCustom</a><br> <a href='CanonVRD.html'>CanonVRD</a><br> <a href='Casio.html'>Casio</a><br> <a href='FLIR.html'>FLIR</a><br> <a href='FujiFilm.html'>FujiFilm</a><br> <a href='GE.html'>GE</a><br> <a href='HP.html'>HP</a><br> <a href='JVC.html'>JVC</a><br> <a href='Kodak.html'>Kodak</a></td><td width='16%'> <a href='Leaf.html'>Leaf</a><br> <a href='Minolta.html'>Minolta</a><br> <a href='Motorola.html'>Motorola</a><br> <a href='Nikon.html'>Nikon</a><br> <a href='NikonCustom.html'>NikonCustom</a><br> <a href='NikonCapture.html'>NikonCapture</a><br> <a href='Nintendo.html'>Nintendo</a><br> <a href='Olympus.html'>Olympus</a><br> <a href='Panasonic.html'>Panasonic</a><br> <a href='Pentax.html'>Pentax</a><br> <a href='PhaseOne.html'>PhaseOne</a><br> <a href='Reconyx.html'>Reconyx</a><br> <a href='Sanyo.html'>Sanyo</a><br> <a href='Samsung.html'>Samsung</a><br> <a href='Ricoh.html'>Ricoh</a><br> <a href='Sigma.html'>Sigma</a><br> <a href='Sony.html'>Sony</a><br> <a href='SonyIDC.html'>SonyIDC</a><br> <a href='Unknown.html'>Unknown</a><br> <a href='DNG.html'>DNG</a></td><td width='16%'> <a href='CanonRaw.html'>CanonRaw</a><br> <a href='KyoceraRaw.html'>KyoceraRaw</a><br> <a href='MinoltaRaw.html'>MinoltaRaw</a><br> <a href='PanasonicRaw.html'>PanasonicRaw</a><br> <a href='SigmaRaw.html'>SigmaRaw</a><br> <a href='Lytro.html'>Lytro</a><br> <a href='JFIF.html'>JFIF</a><br> <a href='FlashPix.html'>FlashPix</a><br> <a href='MPF.html'>MPF</a><br> <a href='Stim.html'>Stim</a><br> <a href='Scalado.html'>Scalado</a><br> <a href='Qualcomm.html'>Qualcomm</a><br> <a href='APP12.html'>APP12</a><br> <a href='AFCP.html'>AFCP</a><br> <a href='DarwinCore.html'>DarwinCore</a><br> <a href='FotoStation.html'>FotoStation</a><br> <a href='PhotoMechanic.html'>PhotoMechanic</a><br> <a href='Microsoft.html'>Microsoft</a><br> <a href='GIMP.html'>GIMP</a><br> <a href='MIE.html'>MIE</a></td><td width='16%'> <a href='Jpeg2000.html'>Jpeg2000</a><br> <a href='GIF.html'>GIF</a><br> <a href='BMP.html'>BMP</a><br> <a href='PICT.html'>PICT</a><br> <a href='PNG.html'>PNG</a><br> <a href='MNG.html'>MNG</a><br> <a href='DjVu.html'>DjVu</a><br> <a href='DPX.html'>DPX</a><br> <a href='OpenEXR.html'>OpenEXR</a><br> <a href='MIFF.html'>MIFF</a><br> <a href='PGF.html'>PGF</a><br> <a href='PSP.html'>PSP</a><br> <a href='PhotoCD.html'>PhotoCD</a><br> <a href='Radiance.html'>Radiance</a><br> <a href='PDF.html'>PDF</a><br> <a href='PostScript.html'>PostScript</a><br> <a href='ID3.html'>ID3</a><br> <a href='ITC.html'>ITC</a><br> <a href='Ogg.html'>Ogg</a><br> <a href='Vorbis.html'>Vorbis</a></td><td width='16%'> <a href='FLAC.html'>FLAC</a><br> <a href='Theora.html'>Theora</a><br> <a href='APE.html'>APE</a><br> <a href='Audible.html'>Audible</a><br> <a href='MPC.html'>MPC</a><br> <a href='MPEG.html'>MPEG</a><br> <a href='M2TS.html'>M2TS</a><br> <a href='H264.html'>H264</a><br> <a href='QuickTime.html'>QuickTime</a><br> <a href='PLIST.html'>PLIST</a><br> <a href='Matroska.html'>Matroska</a><br> <a href='MOI.html'>MOI</a><br> <a href='MXF.html'>MXF</a><br> <a href='DV.html'>DV</a><br> <a href='Flash.html'>Flash</a><br> <a href='Real.html'>Real</a><br> <a href='RIFF.html'>RIFF</a><br> <a href='AIFF.html'>AIFF</a><br> <a href='ASF.html'>ASF</a><br> <a href='DICOM.html'>DICOM</a></td><td width='16%'> <a href='HTML.html'>HTML</a><br> <a href='Palm.html'>Palm</a><br> <a href='Torrent.html'>Torrent</a><br> <a href='EXE.html'>EXE</a><br> <a href='LNK.html'>LNK</a><br> <a href='Font.html'>Font</a><br> <a href='VCard.html'>VCard</a><br> <a href='RSRC.html'>RSRC</a><br> <a href='Rawzor.html'>Rawzor</a><br> <a href='ZIP.html'>ZIP</a><br> <a href='RTF.html'>RTF</a><br> <a href='OOXML.html'>OOXML</a><br> <a href='iWork.html'>iWork</a><br> <a href='Extra.html'>Extra</a><br> <a href='Composite.html'>Composite</a><br> <a href='Shortcuts.html'>Shortcuts</a><br> <a href='MWG.html'>MWG</a> </td></tr></table></td></tr></table></blockquote> <p> <b>Tag ID</b>, <b>Index#</b> or <b>Sequence</b> is given in the first column of each table. A <b>Tag ID</b> is the computer-readable equivalent of a tag name, and is the identifier that is actually stored in the file. <b>Index#</b> refers to the location of a value when found at a fixed position within a data block (<b>#</b> is the multiplier for calculating a byte offset: <b>1</b>, <b>2</b> or <b>4</b>). <b>Sequence</b> gives the order of values for a serial data stream.</p> <p>A <b>Tag Name</b> is the handle by which the information is accessed in ExifTool. In some instances, more than one name may correspond to a single tag ID. In these cases, the actual name used depends on the context in which the information is found. Case is not significant for tag names. A question mark (<code>?</code>) after a tag name indicates that the information is either not understood, not verified, or not very useful -- these tags are not extracted by ExifTool unless the Unknown (-u) option is enabled. Be aware that some tag names are different than the descriptions printed out by default when extracting information with exiftool. To see the tag names instead of the descriptions, use <code>exiftool -s</code>.</p> <p>The <b>Writable</b> column indicates whether the tag is writable by ExifTool. Anything but an <code>N</code> in this column means the tag is writable. A <code>Y</code> indicates writable information that is either unformatted or written using the existing format. Other expressions give details about the information format, and vary depending on the general type of information. The format name may be followed by a number in square brackets to indicate the number of values written, or the number of characters in a fixed-length string (including a null terminator which is added if required).</p> <p>A plus sign (<code>+</code>) after an entry in the <b>Writable</b> column indicates a &quot;list&quot; tag which supports multiple values and allows individual values to be added and deleted. A slash (<code>/</code>) indicates an &quot;avoided&quot; tag that is not created when writing if another same-named tag may be created instead. To write these tags, the group should be specified. A tilde (<code>~</code>) indicates a tag this is writable only when the print conversion is disabled (by setting PrintConv to 0, using the -n option, or suffixing the tag name with a <code>#</code> character). An exclamation point (<code>!</code>) indicates a tag that is considered unsafe to write under normal circumstances. These &quot;unsafe&quot; tags are not written unless specified explicitly (ie. wildcards and &quot;all&quot; may not be used), and care should be taken when editing them manually since they may affect the way an image is rendered. An asterisk (<code>*</code>) indicates a &quot;protected&quot; tag which is not writable directly, but is written automatically by ExifTool (often when a corresponding Composite or Extra tag is written). A colon (<code>:</code>) indicates a mandatory tag which may be added automatically when writing.</p> <p>The HTML version of these tables also lists possible <b>Values</b> for discrete-valued tags, as well as <b>Notes</b> for some tags. The <b>Values</b> are listed as the computer-readable and human-readable values on the left and right hand side of an equals sign (<code>=</code>) respectively. The human-readable values are used by default when reading and writing, but the computer-readable values may be accessed by disabling the value conversion with the -n option on the command line, by setting the ValueConv option to 0 in the API, or or on a per-tag basis by adding a hash (<code>#</code>) after the tag name.</p> <p><b>Note</b>: If you are familiar with common meta-information tag names, you may find that some ExifTool tag names are different than expected. The usual reason for this is to make the tag names more consistent across different types of meta information. To determine a tag name, either consult this documentation or run <code>exiftool -s</code> on a file containing the information in question.</p> <p><i>(This documentation is the result of years of research, testing and reverse engineering, and is the most complete metadata tag list available anywhere on the internet. It is provided not only for ExifTool users, but more importantly as a public service to help augment the collective knowledge, and is often used as a primary source of information in the development of other metadata software. Please help keep this documentation as accurate and complete as possible, and feed any new discoveries back to ExifTool. A big thanks to everyone who has helped with this so far!)</i> </p> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Oct 30, 2015</i> <p class=lf><a href='../index.html'>&lt;-- Back to ExifTool home page</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/IPTC.html��������������������������������������������������������000644 �000765 �000024 �00000067327 12527350231 020472� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>IPTC Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>IPTC Tags</h2> <p> The tags listed below are part of the International Press Telecommunications Council (IPTC) and the Newspaper Association of America (NAA) Information Interchange Model (IIM). This is an older meta information format, slowly being phased out in favor of XMP -- the newer IPTCCore specification uses XMP format. IPTC information may be found in JPG, TIFF, PNG, MIFF, PS, PDF, PSD, XCF and DNG images.</p> <p>IPTC information is separated into different records, each of which has its own set of tags. See <a href="http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf">http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf</a> for the official IPTC IIM specification.</p> <p>This specification dictates a length for ASCII (<code>string</code> or <code>digits</code>) and binary (<code>undef</code>) values. These lengths are given in square brackets after the <b>Writable</b> format name. For tags where a range of lengths is allowed, the minimum and maximum lengths are separated by a comma within the brackets. IPTC strings are not null terminated. When writing, ExifTool issues a minor warning and truncates the value if it is longer than allowed by the IPTC specification. Minor errors may be ignored with the IgnoreMinorErrors (-m) option, allowing longer values to be written, but beware that values like this may cause problems for some other IPTC readers. ExifTool will happily read IPTC values of any length.</p> <p>Separate IPTC date and time tags may be written with a combined date/time value and ExifTool automagically takes the appropriate part of the date/time string depending on whether a date or time tag is being written. This is very useful when copying date/time values to IPTC from other metadata formats.</p> <p>IPTC time values include a timezone offset. If written with a value which doesn&#39;t include a timezone then the current local timezone offset is used (unless written with a combined date/time, in which case the local timezone offset at the specified date/time is used, which may be different due to changes in daylight savings time).</p> <p>Note that it is not uncommon for IPTC to be found in non-standard locations in JPEG and TIFF-based images. When reading, the family 1 group name has a number added for non-standard IPTC (&quot;IPTC2&quot;, &quot;IPTC3&quot;, etc), but when writing only &quot;IPTC&quot; may be specified as the group. To keep the IPTC consistent, ExifTool updates tags in all existing IPTC locations, but will create a new IPTC group only in the standard location. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Record</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>IPTCEnvelope</td> <td class=c>-</td> <td>--&gt; <a href='IPTC.html#EnvelopeRecord'>IPTC EnvelopeRecord Tags</a></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>IPTCApplication</td> <td class=c>-</td> <td>--&gt; <a href='IPTC.html#ApplicationRecord'>IPTC ApplicationRecord Tags</a></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>IPTCNewsPhoto</td> <td class=c>-</td> <td>--&gt; <a href='IPTC.html#NewsPhoto'>IPTC NewsPhoto Tags</a></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>IPTCPreObjectData</td> <td class=c>-</td> <td>--&gt; <a href='IPTC.html#PreObjectData'>IPTC PreObjectData Tags</a></td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>IPTCObjectData</td> <td class=c>-</td> <td>--&gt; <a href='IPTC.html#ObjectData'>IPTC ObjectData Tags</a></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>IPTCPostObjectData</td> <td class=c>-</td> <td>--&gt; <a href='IPTC.html#PostObjectData'>IPTC PostObjectData Tags</a></td></tr> <tr> <td class=r title='240 = 0xf0'>240</td> <td>IPTCFotoStation</td> <td class=c>-</td> <td>--&gt; <a href='IPTC.html#FotoStation'>IPTC FotoStation Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='EnvelopeRecord'>IPTC EnvelopeRecord Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>EnvelopeRecordVersion</td> <td class=c title=' : = Mandatory'>int16u:</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>Destination</td> <td class=c title=' + = List'>string[0,1024]+</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>FileFormat</td> <td class=c>int16u</td> <td><span class=s>0 = No ObjectData <br>1 = IPTC-NAA Digital Newsphoto Parameter Record <br>2 = IPTC7901 Recommended Message Format <br>3 = Tagged Image File Format (Adobe/Aldus Image data) <br>4 = Illustrator (Adobe Graphics data) <br>5 = AppleSingle (Apple Computer Inc) <br>6 = NAA 89-3 (ANPA 1312) <br>7 = MacBinary II <br>8 = IPTC Unstructured Character Oriented File Format (UCOFF) <br>9 = United Press International ANPA 1312 variant <br>10 = United Press International Down-Load Message <br>11 = JPEG File Interchange (JFIF) <br>12 = Photo-CD Image-Pac (Eastman Kodak) <br>13 = Bit Mapped Graphics File [.BMP] (Microsoft) <br>14 = Digital Audio File [.WAV] (Microsoft &amp; Creative Labs) <br>15 = Audio plus Moving Video [.AVI] (Microsoft) <br>16 = PC DOS/Windows Executable Files [.COM][.EXE] <br>17 = Compressed Binary File [.ZIP] (PKWare Inc) <br>18 = Audio Interchange File Format AIFF (Apple Computer Inc) <br>19 = RIFF Wave (Microsoft Corporation) <br>20 = Freehand (Macromedia/Aldus) <br>21 = Hypertext Markup Language [.HTML] (The Internet Society) <br>22 = MPEG 2 Audio Layer 2 (Musicom), ISO/IEC <br>23 = MPEG 2 Audio Layer 3, ISO/IEC <br>24 = Portable Document File [.PDF] Adobe <br>25 = News Industry Text Format (NITF) <br>26 = Tape Archive [.TAR] <br>27 = Tidningarnas Telegrambyra NITF version (TTNITF DTD) <br>28 = Ritzaus Bureau NITF version (RBNITF DTD) <br>29 = Corel Draw [.CDR]</span></td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>FileVersion</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>ServiceIdentifier</td> <td class=c>string[0,10]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>EnvelopeNumber</td> <td class=c>digits[8]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='50 = 0x32'>50</td> <td>ProductID</td> <td class=c title=' + = List'>string[0,32]+</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='60 = 0x3c'>60</td> <td>EnvelopePriority</td> <td class=c>digits[1]</td> <td><table class=cols><tr> <td>0 = 0 (reserved) <br>1 = 1 (most urgent) <br>2 = 2 <br>3 = 3 <br>4 = 4 <br>5 = 5 (normal urgency) <br>6 = 6 <br>7 = 7 <br>8 = 8 (least urgent) <br>9 = 9 (user-defined priority)</td></tr></table> </td></tr> <tr> <td class=r title='70 = 0x46'>70</td> <td>DateSent</td> <td class=c>digits[8]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='80 = 0x50'>80</td> <td>TimeSent</td> <td class=c>string[11]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='90 = 0x5a'>90</td> <td>CodedCharacterSet</td> <td class=c title=' ! = Unsafe'>string[0,32]!</td> <td><span class=s><span class=n>(values are entered in the form &quot;ESC X Y[, ...]&quot;. The escape sequence for UTF-8 character coding is &quot;ESC % G&quot;, but this is displayed as &quot;UTF8&quot; for convenience. Either string may be used when writing. The value of this tag affects the decoding of string values in the Application and NewsPhoto records. This tag is marked as &quot;unsafe&quot; to prevent it from being copied by default in a group operation because existing tags in the destination image may use a different encoding. When creating a new IPTC record from scratch, it is suggested that this be set to &quot;UTF8&quot; if special characters are a possibility)</span></span></td></tr> <tr class=b> <td class=r title='100 = 0x64'>100</td> <td>UniqueObjectName</td> <td class=c>string[14,80]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='120 = 0x78'>120</td> <td>ARMIdentifier</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='122 = 0x7a'>122</td> <td>ARMVersion</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ApplicationRecord'>IPTC ApplicationRecord Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ApplicationRecordVersion</td> <td class=c title=' : = Mandatory'>int16u:</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>ObjectTypeReference</td> <td class=c>string[3,67]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ObjectAttributeReference</td> <td class=c title=' + = List'>string[4,68]+</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>ObjectName</td> <td class=c>string[0,64]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>EditStatus</td> <td class=c>string[0,64]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>EditorialUpdate</td> <td class=c>digits[2]</td> <td><span class=s>01 = Additional language</span></td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>Urgency</td> <td class=c>digits[1]</td> <td><table class=cols><tr> <td>0 = 0 (reserved) <br>1 = 1 (most urgent) <br>2 = 2 <br>3 = 3 <br>4 = 4 <br>5 = 5 (normal urgency) <br>6 = 6 <br>7 = 7 <br>8 = 8 (least urgent) <br>9 = 9 (user-defined priority)</td></tr></table> </td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>SubjectReference</td> <td class=c title=' + = List'>string[13,236]+</td> <td>&nbsp;</td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>Category</td> <td class=c>string[0,3]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>SupplementalCategories</td> <td class=c title=' + = List'>string[0,32]+</td> <td>&nbsp;</td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>FixtureIdentifier</td> <td class=c>string[0,32]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>Keywords</td> <td class=c title=' + = List'>string[0,64]+</td> <td>&nbsp;</td></tr> <tr> <td class=r title='26 = 0x1a'>26</td> <td>ContentLocationCode</td> <td class=c title=' + = List'>string[3]+</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>ContentLocationName</td> <td class=c title=' + = List'>string[0,64]+</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>ReleaseDate</td> <td class=c>digits[8]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='35 = 0x23'>35</td> <td>ReleaseTime</td> <td class=c>string[11]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='37 = 0x25'>37</td> <td>ExpirationDate</td> <td class=c>digits[8]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>ExpirationTime</td> <td class=c>string[11]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>SpecialInstructions</td> <td class=c>string[0,256]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>ActionAdvised</td> <td class=c>digits[2]</td> <td><span class=s>01 = Object Kill <br>02 = Object Replace <br>03 = Object Append <br>04 = Object Reference</span></td></tr> <tr> <td class=r title='45 = 0x2d'>45</td> <td>ReferenceService</td> <td class=c title=' + = List'>string[0,10]+</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='47 = 0x2f'>47</td> <td>ReferenceDate</td> <td class=c title=' + = List'>digits[8]+</td> <td>&nbsp;</td></tr> <tr> <td class=r title='50 = 0x32'>50</td> <td>ReferenceNumber</td> <td class=c title=' + = List'>digits[8]+</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='55 = 0x37'>55</td> <td>DateCreated</td> <td class=c>digits[8]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='60 = 0x3c'>60</td> <td>TimeCreated</td> <td class=c>string[11]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='62 = 0x3e'>62</td> <td>DigitalCreationDate</td> <td class=c>digits[8]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='63 = 0x3f'>63</td> <td>DigitalCreationTime</td> <td class=c>string[11]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='65 = 0x41'>65</td> <td>OriginatingProgram</td> <td class=c>string[0,32]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='70 = 0x46'>70</td> <td>ProgramVersion</td> <td class=c>string[0,10]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='75 = 0x4b'>75</td> <td>ObjectCycle</td> <td class=c>string[1]</td> <td><span class=s>&#39;a&#39; = Morning <br>&#39;b&#39; = Both Morning and Evening <br>&#39;p&#39; = Evening</span></td></tr> <tr> <td class=r title='80 = 0x50'>80</td> <td>By-line</td> <td class=c title=' + = List'>string[0,32]+</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='85 = 0x55'>85</td> <td>By-lineTitle</td> <td class=c title=' + = List'>string[0,32]+</td> <td>&nbsp;</td></tr> <tr> <td class=r title='90 = 0x5a'>90</td> <td>City</td> <td class=c>string[0,32]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='92 = 0x5c'>92</td> <td>Sub-location</td> <td class=c>string[0,32]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='95 = 0x5f'>95</td> <td>Province-State</td> <td class=c>string[0,32]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='100 = 0x64'>100</td> <td>Country-PrimaryLocationCode</td> <td class=c>string[3]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='101 = 0x65'>101</td> <td>Country-PrimaryLocationName</td> <td class=c>string[0,64]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='103 = 0x67'>103</td> <td>OriginalTransmissionReference</td> <td class=c>string[0,32]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='105 = 0x69'>105</td> <td>Headline</td> <td class=c>string[0,256]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='110 = 0x6e'>110</td> <td>Credit</td> <td class=c>string[0,32]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='115 = 0x73'>115</td> <td>Source</td> <td class=c>string[0,32]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='116 = 0x74'>116</td> <td>CopyrightNotice</td> <td class=c>string[0,128]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='118 = 0x76'>118</td> <td>Contact</td> <td class=c title=' + = List'>string[0,128]+</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='120 = 0x78'>120</td> <td>Caption-Abstract</td> <td class=c>string[0,2000]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='121 = 0x79'>121</td> <td>LocalCaption</td> <td class=c>string[0,256]</td> <td><span class=s><span class=n>(I haven&#39;t found a reference for the format of tags 121, 184-188 and 225-232, so I have just make them writable as strings with reasonable length. Beware that if this is wrong, other utilities won&#39;t be able to read these tags as written by ExifTool)</span></span></td></tr> <tr class=b> <td class=r title='122 = 0x7a'>122</td> <td>Writer-Editor</td> <td class=c title=' + = List'>string[0,32]+</td> <td>&nbsp;</td></tr> <tr> <td class=r title='125 = 0x7d'>125</td> <td>RasterizedCaption</td> <td class=c>undef[7360]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='130 = 0x82'>130</td> <td>ImageType</td> <td class=c>string[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='131 = 0x83'>131</td> <td>ImageOrientation</td> <td class=c>string[1]</td> <td><span class=s>&#39;L&#39; = Landscape <br>&#39;P&#39; = Portrait <br>&#39;S&#39; = Square</span></td></tr> <tr class=b> <td class=r title='135 = 0x87'>135</td> <td>LanguageIdentifier</td> <td class=c>string[2,3]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='150 = 0x96'>150</td> <td>AudioType</td> <td class=c>string[2]</td> <td><table class=cols><tr> <td>&#39;0T&#39; = Text Only <br>&#39;1A&#39; = Mono Actuality <br>&#39;1C&#39; = Mono Question and Answer Session <br>&#39;1M&#39; = Mono Music <br>&#39;1Q&#39; = Mono Response to a Question <br>&#39;1R&#39; = Mono Raw Sound <br>&#39;1S&#39; = Mono Scener <br>&#39;1V&#39; = Mono Voicer <br>&#39;1W&#39; = Mono Wrap <br>&#39;2A&#39; = Stereo Actuality <br>&#39;2C&#39; = Stereo Question and Answer Session <br>&#39;2M&#39; = Stereo Music <br>&#39;2Q&#39; = Stereo Response to a Question <br>&#39;2R&#39; = Stereo Raw Sound <br>&#39;2S&#39; = Stereo Scener <br>&#39;2V&#39; = Stereo Voicer <br>&#39;2W&#39; = Stereo Wrap</td></tr></table> </td></tr> <tr class=b> <td class=r title='151 = 0x97'>151</td> <td>AudioSamplingRate</td> <td class=c>digits[6]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='152 = 0x98'>152</td> <td>AudioSamplingResolution</td> <td class=c>digits[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='153 = 0x99'>153</td> <td>AudioDuration</td> <td class=c>digits[6]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='154 = 0x9a'>154</td> <td>AudioOutcue</td> <td class=c>string[0,64]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='184 = 0xb8'>184</td> <td>JobID</td> <td class=c>string[0,64]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='185 = 0xb9'>185</td> <td>MasterDocumentID</td> <td class=c>string[0,256]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='186 = 0xba'>186</td> <td>ShortDocumentID</td> <td class=c>string[0,64]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='187 = 0xbb'>187</td> <td>UniqueDocumentID</td> <td class=c>string[0,128]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='188 = 0xbc'>188</td> <td>OwnerID</td> <td class=c>string[0,128]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='200 = 0xc8'>200</td> <td>ObjectPreviewFileFormat</td> <td class=c>int16u</td> <td><span class=s>0 = No ObjectData <br>1 = IPTC-NAA Digital Newsphoto Parameter Record <br>2 = IPTC7901 Recommended Message Format <br>3 = Tagged Image File Format (Adobe/Aldus Image data) <br>4 = Illustrator (Adobe Graphics data) <br>5 = AppleSingle (Apple Computer Inc) <br>6 = NAA 89-3 (ANPA 1312) <br>7 = MacBinary II <br>8 = IPTC Unstructured Character Oriented File Format (UCOFF) <br>9 = United Press International ANPA 1312 variant <br>10 = United Press International Down-Load Message <br>11 = JPEG File Interchange (JFIF) <br>12 = Photo-CD Image-Pac (Eastman Kodak) <br>13 = Bit Mapped Graphics File [.BMP] (Microsoft) <br>14 = Digital Audio File [.WAV] (Microsoft &amp; Creative Labs) <br>15 = Audio plus Moving Video [.AVI] (Microsoft) <br>16 = PC DOS/Windows Executable Files [.COM][.EXE] <br>17 = Compressed Binary File [.ZIP] (PKWare Inc) <br>18 = Audio Interchange File Format AIFF (Apple Computer Inc) <br>19 = RIFF Wave (Microsoft Corporation) <br>20 = Freehand (Macromedia/Aldus) <br>21 = Hypertext Markup Language [.HTML] (The Internet Society) <br>22 = MPEG 2 Audio Layer 2 (Musicom), ISO/IEC <br>23 = MPEG 2 Audio Layer 3, ISO/IEC <br>24 = Portable Document File [.PDF] Adobe <br>25 = News Industry Text Format (NITF) <br>26 = Tape Archive [.TAR] <br>27 = Tidningarnas Telegrambyra NITF version (TTNITF DTD) <br>28 = Ritzaus Bureau NITF version (RBNITF DTD) <br>29 = Corel Draw [.CDR]</span></td></tr> <tr class=b> <td class=r title='201 = 0xc9'>201</td> <td>ObjectPreviewFileVersion</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='202 = 0xca'>202</td> <td>ObjectPreviewData</td> <td class=c>undef[0,256000]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='221 = 0xdd'>221</td> <td>Prefs</td> <td class=c>string[0,64]</td> <td><span class=s><span class=n>(PhotoMechanic preferences)</span></span></td></tr> <tr> <td class=r title='225 = 0xe1'>225</td> <td>ClassifyState</td> <td class=c>string[0,64]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='228 = 0xe4'>228</td> <td>SimilarityIndex</td> <td class=c>string[0,32]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='230 = 0xe6'>230</td> <td>DocumentNotes</td> <td class=c>string[0,1024]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='231 = 0xe7'>231</td> <td>DocumentHistory</td> <td class=c>string[0,256]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='232 = 0xe8'>232</td> <td>ExifCameraInfo</td> <td class=c>string[0,4096]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='255 = 0xff'>255</td> <td>CatalogSets</td> <td class=c title=' + = List'>string[0,256]+</td> <td><span class=s><span class=n>(written by iView MediaPro)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='NewsPhoto'>IPTC NewsPhoto Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>NewsPhotoVersion</td> <td class=c title=' : = Mandatory'>int16u:</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>IPTCPictureNumber</td> <td class=c>string[16]</td> <td><span class=s><span class=n>(4 numbers: 1-Manufacturer ID, 2-Equipment ID, 3-Date, 4-Sequence)</span></span></td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>IPTCImageWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>IPTCImageHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>IPTCPixelWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>IPTCPixelHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='55 = 0x37'>55</td> <td>SupplementalType</td> <td class=c>int8u</td> <td><span class=s>0 = Main Image <br>1 = Reduced Resolution Image <br>2 = Logo <br>3 = Rasterized Caption</span></td></tr> <tr class=b> <td class=r title='60 = 0x3c'>60</td> <td>ColorRepresentation</td> <td class=c>int16u</td> <td><span class=s>0x0 = No Image, Single Frame <br>0x100 = Monochrome, Single Frame <br>0x300 = 3 Components, Single Frame <br>0x301 = 3 Components, Frame Sequential in Multiple Objects <br>0x302 = 3 Components, Frame Sequential in One Object <br>0x303 = 3 Components, Line Sequential <br>0x304 = 3 Components, Pixel Sequential <br>0x305 = 3 Components, Special Interleaving <br>0x400 = 4 Components, Single Frame <br>0x401 = 4 Components, Frame Sequential in Multiple Objects <br>0x402 = 4 Components, Frame Sequential in One Object <br>0x403 = 4 Components, Line Sequential <br>0x404 = 4 Components, Pixel Sequential <br>0x405 = 4 Components, Special Interleaving</span></td></tr> <tr> <td class=r title='64 = 0x40'>64</td> <td>InterchangeColorSpace</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>1 = X,Y,Z CIE <br>2 = RGB SMPTE <br>3 = Y,U,V (K) (D65) <br>4 = RGB Device Dependent <br>5 = CMY (K) Device Dependent <br>6 = Lab (K) CIE <br>7 = YCbCr <br>8 = sRGB</td></tr></table> </td></tr> <tr class=b> <td class=r title='65 = 0x41'>65</td> <td>ColorSequence</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='66 = 0x42'>66</td> <td>ICC_Profile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='70 = 0x46'>70</td> <td>ColorCalibrationMatrix</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='80 = 0x50'>80</td> <td>LookupTable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='84 = 0x54'>84</td> <td>NumIndexEntries</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='85 = 0x55'>85</td> <td>ColorPalette</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='86 = 0x56'>86</td> <td>IPTCBitsPerSample</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='90 = 0x5a'>90</td> <td>SampleStructure</td> <td class=c>int8u</td> <td><span class=s>0 = OrthogonalConstangSampling <br>1 = Orthogonal4-2-2Sampling <br>2 = CompressionDependent</span></td></tr> <tr class=b> <td class=r title='100 = 0x64'>100</td> <td>ScanningDirection</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = L-R, Top-Bottom <br>1 = R-L, Top-Bottom <br>2 = L-R, Bottom-Top <br>3 = R-L, Bottom-Top</td><td>&nbsp;&nbsp;</td> <td>4 = Top-Bottom, L-R <br>5 = Bottom-Top, L-R <br>6 = Top-Bottom, R-L <br>7 = Bottom-Top, R-L</td></tr></table> </td></tr> <tr> <td class=r title='102 = 0x66'>102</td> <td>IPTCImageRotation</td> <td class=c>int8u</td> <td><span class=s>0 = 0 <br>1 = 90 <br>2 = 180 <br>3 = 270</span></td></tr> <tr class=b> <td class=r title='110 = 0x6e'>110</td> <td>DataCompressionMethod</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='120 = 0x78'>120</td> <td>QuantizationMethod</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Linear Reflectance/Transmittance <br>1 = Linear Density <br>2 = IPTC Ref B <br>3 = Linear Dot Percent <br>4 = AP Domestic Analogue <br>5 = Compression Method Specific <br>6 = Color Space Specific <br>7 = Gamma Compensated</td></tr></table> </td></tr> <tr class=b> <td class=r title='125 = 0x7d'>125</td> <td>EndPoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='130 = 0x82'>130</td> <td>ExcursionTolerance</td> <td class=c>int8u</td> <td><span class=s>0 = Not Allowed <br>1 = Allowed</span></td></tr> <tr class=b> <td class=r title='135 = 0x87'>135</td> <td>BitsPerComponent</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='140 = 0x8c'>140</td> <td>MaximumDensityRange</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='145 = 0x91'>145</td> <td>GammaCompensatedValue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PreObjectData'>IPTC PreObjectData Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>SizeMode</td> <td class=c>N</td> <td><span class=s>0 = Size Not Known <br>1 = Size Known</span></td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>MaxSubfileSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='90 = 0x5a'>90</td> <td>ObjectSizeAnnounced</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='95 = 0x5f'>95</td> <td>MaximumObjectSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ObjectData'>IPTC ObjectData Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>SubFile</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PostObjectData'>IPTC PostObjectData Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>ConfirmedObjectSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FotoStation'>IPTC FotoStation Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Apr 7, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/ITC.html���������������������������������������������������������000644 �000765 �000024 �00000005014 11663037145 020341� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>ITC Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>ITC Tags</h2> <p>This information is found in iTunes Cover Flow data files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'data'</td> <td>ImageData</td> <td class=c>N</td> <td><span class=s><span class=n>(embedded JPEG or PNG image, depending on ImageType)</span></span></td></tr> <tr class=b> <td>'itch'</td> <td>Itch</td> <td class=c>-</td> <td>--&gt; <a href='ITC.html#Header'>ITC Header Tags</a></td></tr> <tr> <td>'item'</td> <td>Item</td> <td class=c>-</td> <td>--&gt; <a href='ITC.html#Item'>ITC Item Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Header'>ITC Header Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>DataType</td> <td class=c>N</td> <td><span class=s>&#39;artw&#39; = Artwork</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Item'>ITC Item Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>LibraryID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>TrackID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>DataLocation</td> <td class=c>N</td> <td><span class=s>&#39;down&#39; = Downloaded Separately <br>&#39;locl&#39; = Local Music File</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>ImageType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Nov 9, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/iWork.html�������������������������������������������������������000644 �000765 �000024 �00000002427 11524240634 021015� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>iWork Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>iWork Tags</h2> <p>The Apple iWork &#39;09 file format is a ZIP archive containing XML files similar to the Office Open XML (OOXML) format. Metadata tags in iWork files are extracted even if they don&#39;t appear below.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Keywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Projects</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Nov 11, 2009</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/JFIF.html��������������������������������������������������������000644 �000765 �000024 �00000003513 12254313130 020426� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>JFIF Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>JFIF Tags</h2> <p> The following information is extracted from the JPEG JFIF header. See <a href="http://www.jpeg.org/public/jfif.pdf">http://www.jpeg.org/public/jfif.pdf</a> for the JFIF 1.02 specification. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>JFIFVersion</td> <td class=c title=' : = Mandatory'>N:</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>ResolutionUnit</td> <td class=c title=' : = Mandatory'>int8u:</td> <td><span class=s>0 = None <br>1 = inches <br>2 = cm</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>XResolution</td> <td class=c title=' : = Mandatory'>int16u:</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>YResolution</td> <td class=c title=' : = Mandatory'>int16u:</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Extension'>JFIF Extension Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>ThumbnailImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Dec 18, 2013</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/JPEG.html��������������������������������������������������������000644 �000765 �000024 �00000042260 12527350231 020445� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>JPEG Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>JPEG Tags</h2> <p>This table lists information extracted by ExifTool from JPEG images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'APP0'</td> <td>JFIF <br>JFXX <br>CIFF <br>AVI1 <br>Ocad</td> <td class=c>-<br>-<br>-<br>-<br>-</td> <td>--&gt; <a href='JFIF.html'>JFIF Tags</a> <br>--&gt; <a href='JFIF.html#Extension'>JFIF Extension Tags</a> <br>--&gt; <a href='CanonRaw.html'>CanonRaw Tags</a> <br>--&gt; <a href='JPEG.html#AVI1'>JPEG AVI1 Tags</a> <br>--&gt; <a href='JPEG.html#Ocad'>JPEG Ocad Tags</a></td></tr> <tr class=b> <td>'APP1'</td> <td>EXIF <br>ExtendedXMP <br>XMP <br>QVCI <br>FLIR</td> <td class=c>-<br>-<br>-<br>-<br>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a> <br>--&gt; <a href='XMP.html'>XMP Tags</a> <br>--&gt; <a href='XMP.html'>XMP Tags</a> <br>--&gt; <a href='Casio.html#QVCI'>Casio QVCI Tags</a> <br>--&gt; <a href='FLIR.html#FFF'>FLIR FFF Tags</a></td></tr> <tr> <td>'APP2'</td> <td>ICC_Profile <br>FPXR <br>MPF <br>PreviewImage</td> <td class=c>-<br>-<br>-<br>N</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a> <br>--&gt; <a href='FlashPix.html'>FlashPix Tags</a> <br>--&gt; <a href='MPF.html'>MPF Tags</a> <br><span class=n>(Samsung APP2 preview image)</span></td></tr> <tr class=b> <td>'APP3'</td> <td>Meta <br>Stim <br>PreviewImage</td> <td class=c>-<br>-<br>N</td> <td>--&gt; <a href='Kodak.html#Meta'>Kodak Meta Tags</a> <br>--&gt; <a href='Stim.html'>Stim Tags</a> <br><span class=n>(Samsung/HP preview image)</span></td></tr> <tr> <td>'APP4'</td> <td>Scalado <br>FPXR <br>PreviewImage</td> <td class=c>-<br>-<br>N</td> <td>--&gt; <a href='Scalado.html'>Scalado Tags</a> <br>--&gt; <a href='FlashPix.html'>FlashPix Tags</a> <br><span class=n>(continued from APP3)</span></td></tr> <tr class=b> <td>'APP5'</td> <td>RMETA <br>PreviewImage</td> <td class=c>-<br>N</td> <td>--&gt; <a href='Ricoh.html#RMETA'>Ricoh RMETA Tags</a> <br><span class=n>(continued from APP4)</span></td></tr> <tr> <td>'APP6'</td> <td>EPPIM <br>NITF <br>HP_TDHD</td> <td class=c>-<br>-<br>-</td> <td>--&gt; <a href='JPEG.html#EPPIM'>JPEG EPPIM Tags</a> <br>--&gt; <a href='JPEG.html#NITF'>JPEG NITF Tags</a> <br>--&gt; <a href='HP.html#TDHD'>HP TDHD Tags</a></td></tr> <tr class=b> <td>'APP7'</td> <td>Pentax <br>Qualcomm</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Pentax.html'>Pentax Tags</a> <br>--&gt; <a href='Qualcomm.html'>Qualcomm Tags</a></td></tr> <tr> <td>'APP8'</td> <td>SPIFF</td> <td class=c>-</td> <td>--&gt; <a href='JPEG.html#SPIFF'>JPEG SPIFF Tags</a></td></tr> <tr class=b> <td>'APP9'</td> <td>MediaJukebox</td> <td class=c>-</td> <td>--&gt; <a href='JPEG.html#MediaJukebox'>JPEG MediaJukebox Tags</a></td></tr> <tr> <td>'APP10'</td> <td>Comment</td> <td class=c>N</td> <td><span class=s><span class=n>(PhotoStudio Unicode comment)</span></span></td></tr> <tr class=b> <td>'APP11'</td> <td>JPEG-HDR</td> <td class=c>-</td> <td>--&gt; <a href='JPEG.html#HDR'>JPEG HDR Tags</a></td></tr> <tr> <td>'APP12'</td> <td>PictureInfo <br>Ducky</td> <td class=c>-<br>-</td> <td>--&gt; <a href='APP12.html#PictureInfo'>APP12 PictureInfo Tags</a> <br>--&gt; <a href='APP12.html#Ducky'>APP12 Ducky Tags</a></td></tr> <tr class=b> <td>'APP13'</td> <td>Photoshop <br>Adobe_CM</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Photoshop.html'>Photoshop Tags</a> <br>--&gt; <a href='JPEG.html#AdobeCM'>JPEG AdobeCM Tags</a></td></tr> <tr> <td>'APP14'</td> <td>Adobe</td> <td class=c>Y</td> <td>--&gt; <a href='JPEG.html#Adobe'>JPEG Adobe Tags</a></td></tr> <tr class=b> <td>'APP15'</td> <td>GraphicConverter</td> <td class=c>-</td> <td>--&gt; <a href='JPEG.html#GraphConv'>JPEG GraphConv Tags</a></td></tr> <tr> <td>'COM'</td> <td>Comment</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td>'DQT'</td> <td>DefineQuantizationTable</td> <td class=c>N</td> <td><span class=s><span class=n>(used to calculate the Extra JPEGDigest tag value)</span></span></td></tr> <tr> <td>'SOF'</td> <td>StartOfFrame</td> <td class=c>-</td> <td>--&gt; <a href='JPEG.html#SOF'>JPEG SOF Tags</a></td></tr> <tr class=b> <td>'Trailer'</td> <td>AFCP <br>CanonVRD <br>FotoStation <br>PhotoMechanic <br>MIE <br>Samsung <br>PreviewImage</td> <td class=c>-<br>-<br>-<br>-<br>-<br>-<br>Y</td> <td>--&gt; <a href='AFCP.html'>AFCP Tags</a> <br>--&gt; <a href='CanonVRD.html'>CanonVRD Tags</a> <br>--&gt; <a href='FotoStation.html'>FotoStation Tags</a> <br>--&gt; <a href='PhotoMechanic.html'>PhotoMechanic Tags</a> <br>--&gt; <a href='MIE.html'>MIE Tags</a> <br>--&gt; <a href='Samsung.html#Trailer'>Samsung Trailer Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='AVI1'>JPEG AVI1 Tags</a></h2> <p>This information may be found in APP0 of JPEG image data from AVI videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>InterleavedField</td> <td class=c>N</td> <td><span class=s>0 = Not Interleaved <br>1 = Odd <br>2 = Even</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Ocad'>JPEG Ocad Tags</a></h2> <p>Tags extracted from the JPEG APP0 &quot;Ocad&quot; segment (found in Photobucket images).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Rev'</td> <td>OcadRevision</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='EPPIM'>JPEG EPPIM Tags</a></h2> <p>APP6 is used in by the Toshiba PDR-M700 to store a TIFF structure containing PrintIM information.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0xc4a5 = 50341'>0xc4a5</td> <td>PrintIM</td> <td class=c>undef</td> <td>--&gt; <a href='PrintIM.html'>PrintIM Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='NITF'>JPEG NITF Tags</a></h2> <p>Information in APP6 used by the National Imagery Transmission Format. See <a href="http://www.gwg.nga.mil/ntb/baseline/docs/n010697/bwcguide25aug98.pdf">http://www.gwg.nga.mil/ntb/baseline/docs/n010697/bwcguide25aug98.pdf</a> for the official specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>NITFVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>ImageFormat</td> <td class=c>N</td> <td><span class=s>&#39;B&#39; = IMode B</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>BlocksPerRow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>BlocksPerColumn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>ImageColor</td> <td class=c>N</td> <td><span class=s>0 = Monochrome</span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>BitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>ImageClass</td> <td class=c>N</td> <td><span class=s>0 = General Purpose <br>4 = Tactical Imagery</span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>JPEGProcess</td> <td class=c>N</td> <td><span class=s>1 = Baseline sequential DCT, Huffman coding, 8-bit samples <br>4 = Extended sequential DCT, Huffman coding, 12-bit samples</span></td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>Quality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>StreamColor</td> <td class=c>N</td> <td><span class=s>0 = Monochrome</span></td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>StreamBitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>Flags</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SPIFF'>JPEG SPIFF Tags</a></h2> <p>This information is found in APP8 of SPIFF-style JPEG images (the &quot;official&quot; yet rarely used JPEG file format standard: Still Picture Interchange File Format). See <a href="http://www.jpeg.org/public/spiff.pdf">http://www.jpeg.org/public/spiff.pdf</a> for the official specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>SPIFFVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>ProfileID</td> <td class=c>N</td> <td><span class=s>0 = Not Specified <br>1 = Continuous-tone Base <br>2 = Continuous-tone Progressive <br>3 = Bi-level Facsimile <br>4 = Continuous-tone Facsimile</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>ColorComponents</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>ImageHeight</td> <td class=c>N</td> <td><span class=s><span class=n>(at index 4 in specification, but there are 2 extra bytes here in my only SPIFF sample, version 1.2)</span></span></td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>ColorSpace</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Bi-level <br>1 = YCbCr, ITU-R BT 709, video <br>2 = No color space specified <br>3 = YCbCr, ITU-R BT 601-1, RGB <br>4 = YCbCr, ITU-R BT 601-1, video <br>8 = Gray-scale <br>9 = PhotoYCC <br>10 = RGB <br>11 = CMY <br>12 = CMYK <br>13 = YCCK <br>14 = CIELab</td></tr></table> </td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>BitsPerSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>Compression</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Uncompressed, interleaved, 8 bits per sample <br>1 = Modified Huffman <br>2 = Modified READ <br>3 = Modified Modified READ <br>4 = JBIG <br>5 = JPEG</td></tr></table> </td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>ResolutionUnit</td> <td class=c>N</td> <td><span class=s>0 = None <br>1 = inches <br>2 = cm</span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>YResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>XResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MediaJukebox'>JPEG MediaJukebox Tags</a></h2> <p>Tags found in the XML metadata of the &quot;Media Jukebox&quot; APP9 segment.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Album</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Caption</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Date</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Keywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>People</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Places</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Tool_Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Tool_Version</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='HDR'>JPEG HDR Tags</a></h2> <p>Information extracted from APP11 of a JPEG-HDR image.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'RatioImage'</td> <td>RatioImage</td> <td class=c>N</td> <td><span class=s><span class=n>(the embedded JPEG-compressed ratio image)</span></span></td></tr> <tr class=b> <td>'alp'</td> <td>Alpha</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'bet'</td> <td>Beta</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'cor'</td> <td>CorrectionMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ln0'</td> <td>Ln0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ln1'</td> <td>Ln1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'s2n'</td> <td>S2n</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ver'</td> <td>JPEG-HDRVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AdobeCM'>JPEG AdobeCM Tags</a></h2> <p>The &quot;Adobe_CM&quot; APP13 segment presumably contains color management information, but the meaning of the data is currently unknown. If anyone has an idea about what this means, please let me know.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>AdobeCMType</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Adobe'>JPEG Adobe Tags</a></h2> <p>The &quot;Adobe&quot; APP14 segment stores image encoding information for DCT filters. This segment may be copied or deleted as a block using the Extra &quot;Adobe&quot; tag, but note that it is not deleted by default when deleting all metadata because it may affect the appearance of the image.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>DCTEncodeVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>APP14Flags0</td> <td class=c>N</td> <td><span class=s>0x0 = (none) <br>Bit 15 = Encoded with Blend=1 downsampling</span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>APP14Flags1</td> <td class=c>N</td> <td><span class=s>0x0 = (none)</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>ColorTransform</td> <td class=c>N</td> <td><span class=s>0 = Unknown (RGB or CMYK) <br>1 = YCbCr <br>2 = YCCK</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='GraphConv'>JPEG GraphConv Tags</a></h2> <p>APP15 is used by GraphicConverter to store JPEG quality.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Q'</td> <td>Quality</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SOF'>JPEG SOF Tags</a></h2> <p>This information is extracted from the JPEG Start Of Frame segment.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>BitsPerSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ColorComponents</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EncodingProcess</td> <td class=c>N</td> <td><span class=s>0x0 = Baseline DCT, Huffman coding <br>0x1 = Extended sequential DCT, Huffman coding <br>0x2 = Progressive DCT, Huffman coding <br>0x3 = Lossless, Huffman coding <br>0x5 = Sequential DCT, differential Huffman coding <br>0x6 = Progressive DCT, differential Huffman coding <br>0x7 = Lossless, Differential Huffman coding <br>0x9 = Extended sequential DCT, arithmetic coding <br>0xa = Progressive DCT, arithmetic coding <br>0xb = Lossless, arithmetic coding <br>0xd = Sequential DCT, differential arithmetic coding <br>0xe = Progressive DCT, differential arithmetic coding <br>0xf = Lossless, differential arithmetic coding</span></td></tr> <tr class=b> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>YCbCrSubSampling</td> <td class=c>N</td> <td><span class=s><span class=n>(calculated from components table)</span></span><table class=cols><tr> <td>&#39;1 1&#39; = YCbCr4:4:4 (1 1) <br>&#39;1 2&#39; = YCbCr4:4:0 (1 2) <br>&#39;1 4&#39; = YCbCr4:4:1 (1 4) <br>&#39;2 1&#39; = YCbCr4:2:2 (2 1) <br>&#39;2 2&#39; = YCbCr4:2:0 (2 2) <br>&#39;2 4&#39; = YCbCr4:2:1 (2 4) <br>&#39;4 1&#39; = YCbCr4:1:1 (4 1) <br>&#39;4 2&#39; = YCbCr4:1:0 (4 2)</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Sep 17, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Jpeg2000.html����������������������������������������������������000644 �000765 �000024 �00000027414 12527350232 021114� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Jpeg2000 Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Jpeg2000 Tags</h2> <p>The tags below are extracted from JPEG 2000 images, however ExifTool currently writes only EXIF, IPTC and XMP tags in these images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'asoc'</td> <td>Association</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'bfil'</td> <td>BinaryFilter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'bpcc'</td> <td>BitsPerComponent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'cdef'</td> <td>ComponentDefinition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'cgrp'</td> <td>ColorGroup</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'chck'</td> <td>DigitalSignature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'cmap'</td> <td>ComponentMapping</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'colr'</td> <td>ColorSpecification</td> <td class=c>-</td> <td>--&gt; <a href='Jpeg2000.html#ColorSpec'>Jpeg2000 ColorSpec Tags</a></td></tr> <tr> <td>'comp'</td> <td>Composition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'copt'</td> <td>CompositionOptions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'cref'</td> <td>Cross-Reference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'creg'</td> <td>CodestreamRegistration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'drep'</td> <td>DesiredReproductions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'dtbl'</td> <td>DataReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'flst'</td> <td>FragmentList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'free'</td> <td>Free</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ftbl'</td> <td>FragmentTable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ftyp'</td> <td>FileType</td> <td class=c>-</td> <td>--&gt; <a href='Jpeg2000.html#FileType'>Jpeg2000 FileType Tags</a></td></tr> <tr> <td>'gtso'</td> <td>GraphicsTechnologyStandardOutput</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ihdr'</td> <td>ImageHeader</td> <td class=c>-</td> <td>--&gt; <a href='Jpeg2000.html#ImageHeader'>Jpeg2000 ImageHeader Tags</a></td></tr> <tr> <td>'inst'</td> <td>InstructionSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'jP '</td> <td>JP2Signature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'jp2c'</td> <td>ContiguousCodestream</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'jp2h'</td> <td>JP2Header</td> <td class=c>-</td> <td>--&gt; <a href='Jpeg2000.html'>Jpeg2000 Tags</a></td></tr> <tr> <td>'jp2i'</td> <td>IntellectualProperty</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> <tr class=b> <td>'jpch'</td> <td>CodestreamHeader</td> <td class=c>-</td> <td>--&gt; <a href='Jpeg2000.html'>Jpeg2000 Tags</a></td></tr> <tr> <td>'jplh'</td> <td>CompositingLayerHeader</td> <td class=c>-</td> <td>--&gt; <a href='Jpeg2000.html'>Jpeg2000 Tags</a></td></tr> <tr class=b> <td>'lbl '</td> <td>Label</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'mdat'</td> <td>MediaData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'mp7b'</td> <td>MPEG7Binary</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'nlst'</td> <td>NumberList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'opct'</td> <td>Opacity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pclr'</td> <td>Palette</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'prfl'</td> <td>Profile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'res '</td> <td>Resolution</td> <td class=c>-</td> <td>--&gt; <a href='Jpeg2000.html'>Jpeg2000 Tags</a></td></tr> <tr class=b> <td>'resc'</td> <td>CaptureResolution</td> <td class=c>-</td> <td>--&gt; <a href='Jpeg2000.html#CaptureResolution'>Jpeg2000 CaptureResolution Tags</a></td></tr> <tr> <td>'resd'</td> <td>DisplayResolution</td> <td class=c>-</td> <td>--&gt; <a href='Jpeg2000.html#DisplayResolution'>Jpeg2000 DisplayResolution Tags</a></td></tr> <tr class=b> <td>'roid'</td> <td>ROIDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'rreq'</td> <td>ReaderRequirements</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'uinf'</td> <td>UUIDInfo</td> <td class=c>-</td> <td>--&gt; <a href='Jpeg2000.html'>Jpeg2000 Tags</a></td></tr> <tr> <td>'ulst'</td> <td>UUIDList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'url '</td> <td>URL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'uuid'</td> <td>UUID-EXIF <br>UUID-EXIF2 <br>UUID-IPTC <br>UUID-IPTC2 <br>UUID-XMP <br>UUID-GeoJP2 <br>UUID-Photoshop <br>UUID-Unknown</td> <td class=c>-<br>-<br>-<br>-<br>-<br>-<br>-<br>N</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a> <br>--&gt; <a href='EXIF.html'>EXIF Tags</a> <br>--&gt; <a href='IPTC.html'>IPTC Tags</a> <br>--&gt; <a href='IPTC.html'>IPTC Tags</a> <br>--&gt; <a href='XMP.html'>XMP Tags</a> <br>--&gt; <a href='EXIF.html'>EXIF Tags</a> <br>--&gt; <a href='Photoshop.html'>Photoshop Tags</a></td></tr> <tr class=b> <td>'xml '</td> <td>XML</td> <td class=c title=' ! = Unsafe + = List'>undef!+</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a> <br><span class='n s'>(by default, the XML data in this tag is parsed using the ExifTool XMP module to to allow individual tags to be accessed when reading, but it may also be extracted as a block via the "XML" tag, which is also how this tag is written and copied. This is a List-type tag because multiple XML blocks may exist)</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorSpec'>Jpeg2000 ColorSpec Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ColorSpecMethod</td> <td class=c>N</td> <td><span class=s>1 = Enumerated <br>2 = Restricted ICC <br>3 = Any ICC <br>4 = Vendor Color</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>ColorSpecPrecedence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>ColorSpecApproximation</td> <td class=c>N</td> <td><span class=s>0 = Not Specified <br>1 = Accurate <br>2 = Exceptional Quality <br>3 = Reasonable Quality <br>4 = Poor Quality</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>ICC_Profile <br>ColorSpace <br>ColorSpecData</td> <td class=c>-<br>N<br>N</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a> <br><table class=cols><tr> <td>0 = Bi-level <br>1 = YCbCr(1) <br>3 = YCbCr(2) <br>4 = YCbCr(3) <br>9 = PhotoYCC <br>11 = CMY <br>12 = CMYK <br>13 = YCCK <br>14 = CIELab <br>15 = Bi-level(2)</td><td>&nbsp;&nbsp;</td> <td>16 = sRGB <br>17 = Grayscale <br>18 = sYCC <br>19 = CIEJab <br>20 = e-sRGB <br>21 = ROMM-RGB <br>22 = YPbPr(1125/60) <br>23 = YPbPr(1250/50) <br>24 = e-sYCC</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='FileType'>Jpeg2000 FileType Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>MajorBrand</td> <td class=c>N</td> <td><span class=s>&#39;jp2 &#39; = JPEG 2000 Image (.JP2) <br>&#39;jpm &#39; = JPEG 2000 Compound Image (.JPM) <br>&#39;jpx &#39; = JPEG 2000 with extensions (.JPX)</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>MinorVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>CompatibleBrands</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ImageHeader'>Jpeg2000 ImageHeader Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>NumberOfComponents</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>BitsPerComponent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>Compression</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Uncompressed <br>1 = Modified Huffman <br>2 = Modified READ <br>3 = Modified Modified READ <br>4 = JBIG <br>5 = JPEG <br>6 = JPEG-LS <br>7 = JPEG 2000 <br>8 = JBIG2</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='CaptureResolution'>Jpeg2000 CaptureResolution Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>CaptureYResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>CaptureXResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>CaptureYResolutionUnit</td> <td class=c>N</td> <td>--&gt; <a href='Jpeg2000.html#ResolutionUnit'>Jpeg2000 ResolutionUnit Values</a></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>CaptureXResolutionUnit</td> <td class=c>N</td> <td>--&gt; <a href='Jpeg2000.html#ResolutionUnit'>Jpeg2000 ResolutionUnit Values</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ResolutionUnit'>Jpeg2000 ResolutionUnit Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>ResolutionUnit</th><th>Value</th><th>ResolutionUnit</th><th>Value</th><th>ResolutionUnit</th></tr> <tr><td>-3</td><td>= km</td> <td class=b>1</td><td class=b>= 10 cm</td> <td>5</td><td>= 0.01 mm</td> </tr><tr><td>-2</td><td>= 100 m</td> <td class=b>2</td><td class=b>= cm</td> <td>6</td><td>= um</td> </tr><tr><td>-1</td><td>= 10 m</td> <td class=b>3</td><td class=b>= mm</td> <td>&nbsp;</td><td>&nbsp;</td> </tr><tr><td>0</td><td>= m</td> <td class=b>4</td><td class=b>= 0.1 mm</td> <td>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='DisplayResolution'>Jpeg2000 DisplayResolution Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>DisplayYResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>DisplayXResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>DisplayYResolutionUnit</td> <td class=c>N</td> <td>--&gt; <a href='Jpeg2000.html#ResolutionUnit'>Jpeg2000 ResolutionUnit Values</a></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>DisplayXResolutionUnit</td> <td class=c>N</td> <td>--&gt; <a href='Jpeg2000.html#ResolutionUnit'>Jpeg2000 ResolutionUnit Values</a></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jul 23, 2013</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/JVC.html���������������������������������������������������������000644 �000765 �000024 �00000003046 11271337423 020344� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>JVC Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>JVC Tags</h2> <p>JVC EXIF maker note tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>CPUVersions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>Quality</td> <td class=c>N</td> <td><span class=s>0 = Low <br>1 = Normal <br>2 = Fine</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Text'>JVC Text Tags</a></h2> <p>JVC/Victor text-based maker note tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'QTY'</td> <td>Quality</td> <td class=c>N</td> <td><span class=s>&#39;FINE&#39; = Fine <br>&#39;STD&#39; = Normal <br>&#39;STND&#39; = Normal</span></td></tr> <tr class=b> <td>'VER'</td> <td>MakerNoteVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Dec 22, 2005</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Kodak.html�������������������������������������������������������000644 �000765 �000024 �00000141241 12527350231 020750� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Kodak Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Kodak Tags</h2> <p> Many Kodak models don&#39;t store the maker notes in standard IFD format, and these formats vary with different models. Some information has been decoded, but much of the Kodak information remains unknown. </p> <p>The table below contains the most common set of Kodak tags. The following Kodak camera models have been tested and found to use these tags: C360, C663, C875, CX6330, CX6445, CX7330, CX7430, CX7525, CX7530, DC4800, DC4900, DX3500, DX3600, DX3900, DX4330, DX4530, DX4900, DX6340, DX6440, DX6490, DX7440, DX7590, DX7630, EasyShare-One, LS420, LS443, LS633, LS743, LS753, V530, V550, V570, V603, V610, V705, Z650, Z700, Z710, Z730, Z740, Z760 and Z7590.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>KodakModel</td> <td class=c>string[8]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>Quality</td> <td class=c>int8u</td> <td><span class=s>1 = Fine <br>2 = Normal</span></td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>BurstMode</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>KodakImageWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>KodakImageHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>YearCreated</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>MonthDayCreated</td> <td class=c>int8u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>TimeCreated</td> <td class=c>int8u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>BurstMode2?</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>ShutterMode</td> <td class=c>int8u</td> <td><span class=s>0 = Auto <br>8 = Aperture Priority <br>32 = Manual?</span></td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>MeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = Multi-segment <br>1 = Center-weighted average <br>2 = Spot</span></td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>SequenceNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>FNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>ExposureTime</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='36 = 0x24'>36</td> <td>ExposureCompensation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>VariousModes?</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>Distance1?</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>Distance2?</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>Distance3?</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>Distance4?</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='56 = 0x38'>56</td> <td>FocusMode</td> <td class=c>int8u</td> <td><span class=s>0 = Normal <br>2 = Macro</span></td></tr> <tr class=b> <td class=r title='58 = 0x3a'>58</td> <td>VariousModes2?</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='60 = 0x3c'>60</td> <td>PanoramaMode?</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='62 = 0x3e'>62</td> <td>SubjectDistance?</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='64 = 0x40'>64</td> <td>WhiteBalance</td> <td class=c>int8u</td> <td><span class=s>0 = Auto <br>1 = Flash? <br>2 = Tungsten <br>3 = Daylight</span></td></tr> <tr class=b> <td class=r title='92 = 0x5c'>92</td> <td>FlashMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0x0 = Auto <br>0x1 = Fill Flash <br>0x2 = Off <br>0x3 = Red-Eye</td><td>&nbsp;&nbsp;</td> <td>0x10 = Fill Flash <br>0x20 = Off <br>0x40 = Red-Eye?</td></tr></table> </td></tr> <tr> <td class=r title='93 = 0x5d'>93</td> <td>FlashFired</td> <td class=c>int8u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td class=r title='94 = 0x5e'>94</td> <td>ISOSetting</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='96 = 0x60'>96</td> <td>ISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='98 = 0x62'>98</td> <td>TotalZoom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='100 = 0x64'>100</td> <td>DateTimeStamp</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='102 = 0x66'>102</td> <td>ColorMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x1 = B&amp;W <br>0x2 = Sepia <br>0x3 = B&amp;W Yellow Filter <br>0x4 = B&amp;W Red Filter <br>0x20 = Saturated Color</td><td>&nbsp;&nbsp;</td> <td>0x40 = Neutral Color <br>0x100 = Saturated Color <br>0x200 = Neutral Color <br>0x2000 = B&amp;W <br>0x4000 = Sepia</td></tr></table> </td></tr> <tr> <td class=r title='104 = 0x68'>104</td> <td>DigitalZoom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='107 = 0x6b'>107</td> <td>Sharpness</td> <td class=c>int8s</td> <td><span class=s>0 = Normal</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Type2'>Kodak Type2 Tags</a></h2> <p>These tags are used by the Kodak DC220, DC260, DC265 and DC290, Hewlett-Packard PhotoSmart 618, C500 and C912, Pentax EI-200 and EI-2000, and Minolta EX1500Z.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>KodakMaker</td> <td class=c>string[32]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>KodakModel</td> <td class=c>string[32]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='108 = 0x6c'>108</td> <td>KodakImageWidth</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='112 = 0x70'>112</td> <td>KodakImageHeight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Type3'>Kodak Type3 Tags</a></h2> <p>These tags are used by the DC240, DC280, DC3400 and DC5000.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>YearCreated</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>MonthDayCreated</td> <td class=c>int8u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>TimeCreated</td> <td class=c>int8u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>OpticalZoom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='55 = 0x37'>55</td> <td>Sharpness</td> <td class=c>int8s</td> <td><span class=s>0 = Normal</span></td></tr> <tr class=b> <td class=r title='56 = 0x38'>56</td> <td>ExposureTime</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='60 = 0x3c'>60</td> <td>FNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='78 = 0x4e'>78</td> <td>ISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Type4'>Kodak Type4 Tags</a></h2> <p>These tags are used by the DC200 and DC215.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>OriginalFileName</td> <td class=c>string[12]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Type5'>Kodak Type5 Tags</a></h2> <p>These tags are used by the CX4200, CX4210, CX4230, CX4300, CX4310, CX6200 and CX6230.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>ExposureTime</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>WhiteBalance</td> <td class=c>int8u</td> <td><span class=s>1 = Daylight <br>2 = Flash <br>3 = Tungsten</span></td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>FNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>ISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>OpticalZoom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='34 = 0x22'>34</td> <td>DigitalZoom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='39 = 0x27'>39</td> <td>FlashMode</td> <td class=c>int8u</td> <td><span class=s>0 = Auto <br>1 = On <br>2 = Off <br>3 = Red-Eye</span></td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>ImageRotated</td> <td class=c>int8u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td class=r title='43 = 0x2b'>43</td> <td>Macro</td> <td class=c>int8u</td> <td><span class=s>0 = On <br>1 = Off</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Type6'>Kodak Type6 Tags</a></h2> <p>These tags are used by the DX3215 and DX3700.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>ExposureTime</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>ISOSetting?</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>FNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>ISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>OpticalZoom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>DigitalZoom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='34 = 0x22'>34</td> <td>Flash</td> <td class=c>int16u</td> <td><span class=s>0 = No Flash <br>1 = Fired</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Type7'>Kodak Type7 Tags</a></h2> <p>The maker notes of models such as the C340, C433, CC533, LS755, V803 and V1003 seem to start with the camera serial number. The C310, C315, C330, C643, C743, CD33, CD43, CX7220 and CX7300 maker notes are also decoded using this table, although the strings for these cameras don&#39;t conform to the usual Kodak serial number format, and instead have the model name followed by 8 digits.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>SerialNumber</td> <td class=c>string[16]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Type8'>Kodak Type8 Tags</a></h2> <p>Kodak models such as the ZD710, P712, P850, P880, V1233, V1253, V1275, V1285, Z612, Z712, Z812, Z885 use standard TIFF IFD format for the maker notes. In keeping with Kodak&#39;s strategy of inconsistent makernotes, models such as the M380, M1033, M1093, V1073, V1273, Z1012, Z1085 and Z8612 also use these tags, but these makernotes begin with a TIFF header instead of an IFD entry count and use relative instead of absolute offsets. There is a large amount of information stored in these maker notes (apparently with much duplication), but relatively few tags have so far been decoded.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0xfc00 = 64512'>0xfc00</td> <td>SubIFD0</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#SubIFD0'>Kodak SubIFD0 Tags</a> <br>--&gt; <a href='Kodak.html#SubIFD0'>Kodak SubIFD0 Tags</a></td></tr> <tr class=b> <td title='0xfc01 = 64513'>0xfc01</td> <td>SubIFD1</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#SubIFD1'>Kodak SubIFD1 Tags</a> <br>--&gt; <a href='Kodak.html#SubIFD1'>Kodak SubIFD1 Tags</a></td></tr> <tr> <td title='0xfc02 = 64514'>0xfc02</td> <td>SubIFD2</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#SubIFD2'>Kodak SubIFD2 Tags</a> <br>--&gt; <a href='Kodak.html#SubIFD2'>Kodak SubIFD2 Tags</a></td></tr> <tr class=b> <td title='0xfc03 = 64515'>0xfc03</td> <td>SubIFD3</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#SubIFD3'>Kodak SubIFD3 Tags</a> <br>--&gt; <a href='Kodak.html#SubIFD3'>Kodak SubIFD3 Tags</a></td></tr> <tr> <td title='0xfc04 = 64516'>0xfc04</td> <td>SubIFD4</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#SubIFD4'>Kodak SubIFD4 Tags</a> <br>--&gt; <a href='Kodak.html#SubIFD4'>Kodak SubIFD4 Tags</a></td></tr> <tr class=b> <td title='0xfc05 = 64517'>0xfc05</td> <td>SubIFD5</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#SubIFD5'>Kodak SubIFD5 Tags</a> <br>--&gt; <a href='Kodak.html#SubIFD5'>Kodak SubIFD5 Tags</a></td></tr> <tr> <td title='0xfc06 = 64518'>0xfc06</td> <td>SubIFD6</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#SubIFD6'>Kodak SubIFD6 Tags</a> <br>--&gt; <a href='Kodak.html#SubIFD6'>Kodak SubIFD6 Tags</a></td></tr> <tr class=b> <td title='0xfcff = 64767'>0xfcff</td> <td>SubIFD255</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#SubIFD0'>Kodak SubIFD0 Tags</a></td></tr> <tr> <td title='0xff00 = 65280'>0xff00</td> <td>CameraInfo</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#CameraInfo'>Kodak CameraInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='SubIFD0'>Kodak SubIFD0 Tags</a></h2> <p>SubIFD0 through SubIFD5 tags are written a number of newer Kodak models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0xfa02 = 64002'>0xfa02</td> <td>SceneMode</td> <td class=c>int16u</td> <td><span class=s><span class=n>(may not be valid for some models)</span></span><table class=cols><tr> <td>1 = Sport <br>3 = Portrait <br>4 = Landscape <br>6 = Beach <br>7 = Night Portrait <br>8 = Night Landscape <br>9 = Snow <br>10 = Text <br>11 = Fireworks <br>12 = Macro <br>13 = Museum <br>16 = Children</td><td>&nbsp;&nbsp;</td> <td>17 = Program <br>18 = Aperture Priority <br>19 = Shutter Priority <br>20 = Manual <br>25 = Back Light <br>28 = Candlelight <br>29 = Sunset <br>31 = Panorama Left-right <br>32 = Panorama Right-left <br>33 = Smart Scene <br>34 = High ISO</td></tr></table> </td></tr> <tr class=b> <td title='0xfa19 = 64025'>0xfa19</td> <td>SerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0xfa1d = 64029'>0xfa1d</td> <td>KodakImageWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfa1e = 64030'>0xfa1e</td> <td>KodakImageHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0xfa20 = 64032'>0xfa20</td> <td>SensorWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfa21 = 64033'>0xfa21</td> <td>SensorHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0xfa23 = 64035'>0xfa23</td> <td>FNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfa24 = 64036'>0xfa24</td> <td>ExposureTime</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0xfa2e = 64046'>0xfa2e</td> <td>ISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfa3d = 64061'>0xfa3d</td> <td>OpticalZoom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0xfa46 = 64070'>0xfa46</td> <td>ISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfa51 = 64081'>0xfa51</td> <td>KodakImageWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0xfa52 = 64082'>0xfa52</td> <td>KodakImageHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfa54 = 64084'>0xfa54</td> <td>ThumbnailWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0xfa55 = 64085'>0xfa55</td> <td>ThumbnailHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfa57 = 64087'>0xfa57</td> <td>PreviewImageWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0xfa58 = 64088'>0xfa58</td> <td>PreviewImageHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SubIFD1'>Kodak SubIFD1 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0027 = 39'>0x0027</td> <td>ISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0028 = 40'>0x0028</td> <td>ISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SubIFD2'>Kodak SubIFD2 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x6002 = 24578'>0x6002</td> <td>SceneModeUsed</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = Program <br>2 = Aperture Priority <br>3 = Shutter Priority <br>4 = Manual <br>5 = Portrait <br>6 = Sport <br>7 = Children <br>8 = Museum <br>10 = High ISO <br>11 = Text <br>12 = Macro</td><td>&nbsp;&nbsp;</td> <td>13 = Back Light <br>16 = Landscape <br>17 = Night Landscape <br>18 = Night Portrait <br>19 = Snow <br>20 = Beach <br>21 = Fireworks <br>22 = Sunset <br>23 = Candlelight <br>28 = Panorama</td></tr></table> </td></tr> <tr class=b> <td title='0x6006 = 24582'>0x6006</td> <td>OpticalZoom</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x6103 = 24835'>0x6103</td> <td>MaxAperture</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xf002 = 61442'>0xf002</td> <td>SceneModeUsed</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = Program <br>2 = Aperture Priority <br>3 = Shutter Priority <br>4 = Manual <br>5 = Portrait <br>6 = Sport <br>7 = Children <br>8 = Museum <br>10 = High ISO <br>11 = Text <br>12 = Macro</td><td>&nbsp;&nbsp;</td> <td>13 = Back Light <br>16 = Landscape <br>17 = Night Landscape <br>18 = Night Portrait <br>19 = Snow <br>20 = Beach <br>21 = Fireworks <br>22 = Sunset <br>23 = Candlelight <br>28 = Panorama</td></tr></table> </td></tr> <tr> <td title='0xf006 = 61446'>0xf006</td> <td>OpticalZoom</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xf103 = 61699'>0xf103</td> <td>FNumber</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0xf104 = 61700'>0xf104</td> <td>ExposureTime</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xf105 = 61701'>0xf105</td> <td>ISO</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SubIFD3'>Kodak SubIFD3 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x1000 = 4096'>0x1000</td> <td>OpticalZoom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SubIFD4'>Kodak SubIFD4 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='SubIFD5'>Kodak SubIFD5 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x000f = 15'>0x000f</td> <td>OpticalZoom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SubIFD6'>Kodak SubIFD6 Tags</a></h2> <p>SubIFD6 is written by the M580.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo'>Kodak CameraInfo Tags</a></h2> <p>These tags are used by the P712, P850 and P880.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0xf900 = 63744'>0xf900</td> <td>SensorWidth</td> <td class=c>int16u</td> <td><span class=s><span class=n>(effective sensor size)</span></span></td></tr> <tr class=b> <td title='0xf901 = 63745'>0xf901</td> <td>SensorHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0xf902 = 63746'>0xf902</td> <td>BayerPattern</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xf903 = 63747'>0xf903</td> <td>SensorFullWidth</td> <td class=c>int16u</td> <td><span class=s><span class=n>(includes black border?)</span></span></td></tr> <tr> <td title='0xf904 = 63748'>0xf904</td> <td>SensorFullHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xf907 = 63751'>0xf907</td> <td>KodakImageWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0xf908 = 63752'>0xf908</td> <td>KodakImageHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfa00 = 64000'>0xfa00</td> <td>KodakInfoType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0xfa04 = 64004'>0xfa04</td> <td>SerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfd04 = 64772'>0xfd04</td> <td>FNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0xfd05 = 64773'>0xfd05</td> <td>ExposureTime</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfd06 = 64774'>0xfd06</td> <td>ISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Type9'>Kodak Type9 Tags</a></h2> <p>These tags are used by the Kodak C140, C180, C913, C1013, M320, M340 and M550, as well as various cameras marketed by other manufacturers.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>FNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>ExposureTime</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>DateTimeOriginal</td> <td class=c>string[20]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>ISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='87 = 0x57'>87</td> <td>FirmwareVersion</td> <td class=c>string[16]</td> <td><span class=s><span class=n>(Kodak only)</span></span></td></tr> <tr class=b> <td class=r title='168 = 0xa8'>168</td> <td>UnknownNumber</td> <td class=c>N</td> <td><span class=s><span class=n>(Kodak only)</span></span></td></tr> <tr> <td class=r title='196 = 0xc4'>196</td> <td>UnknownNumber</td> <td class=c>N</td> <td><span class=s><span class=n>(Kodak only)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Type10'>Kodak Type10 Tags</a></h2> <p>Another variation of the IFD-format type, this time with just a byte order indicator instead of a full TIFF header. These tags are used by the Z980.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>PreviewImageSize</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0012 = 18'>0x0012</td> <td>ExposureTime</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0013 = 19'>0x0013</td> <td>FNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0014 = 20'>0x0014</td> <td>ISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x001d = 29'>0x001d</td> <td>FocalLength</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Type11'>Kodak Type11 Tags</a></h2> <p>These tags are found in models such as the PixPro S-1. They are not writable because the inconsistency of Kodak maker notes is beginning to get on my nerves.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0203 = 515'>0x0203</td> <td>PictureEffect</td> <td class=c>N</td> <td><span class=s>0 = None <br>3 = Monochrome <br>9 = Kodachrome</span></td></tr> <tr class=b> <td title='0x0207 = 519'>0x0207</td> <td>KodakModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0300 = 768'>0x0300</td> <td>KodakMake</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0308 = 776'>0x0308</td> <td>LensSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0309 = 777'>0x0309</td> <td>LensModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Unknown'>Kodak Unknown Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='IFD'>Kodak IFD Tags</a></h2> <p>These tags are found in a separate IFD of JPEG, TIFF, DCR and KDC images from some older Kodak models such as the DC50, DC120, DCS760C, DCS Pro 14N, 14nx, SLR/n, Pro Back and Canon EOS D2000.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>UnknownEV?</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>ExposureValue</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x03e9 = 1001'>0x03e9</td> <td>OriginalFileName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x03eb = 1003'>0x03eb</td> <td>SensorLeftBorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x03ec = 1004'>0x03ec</td> <td>SensorTopBorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x03ed = 1005'>0x03ed</td> <td>SensorImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x03ee = 1006'>0x03ee</td> <td>SensorImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x03f1 = 1009'>0x03f1</td> <td>TextualInfo</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#TextualInfo'>Kodak TextualInfo Tags</a></td></tr> <tr> <td title='0x03fc = 1020'>0x03fc</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x03fd = 1021'>0x03fd</td> <td>Processing</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#Processing'>Kodak Processing Tags</a></td></tr> <tr> <td title='0x0401 = 1025'>0x0401</td> <td>Time</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0406 = 1030'>0x0406</td> <td>CameraTemperature</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0407 = 1031'>0x0407</td> <td>AdapterVoltage</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0408 = 1032'>0x0408</td> <td>BatteryVoltage</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0414 = 1044'>0x0414</td> <td>NCDFileInfo</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0846 = 2118'>0x0846</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0848 = 2120'>0x0848</td> <td>WB_RGBLevelsDaylight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0849 = 2121'>0x0849</td> <td>WB_RGBLevelsTungsten</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x084a = 2122'>0x084a</td> <td>WB_RGBLevelsFluorescent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x084b = 2123'>0x084b</td> <td>WB_RGBLevelsFlash</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x084c = 2124'>0x084c</td> <td>WB_RGBLevelsCustom</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x084d = 2125'>0x084d</td> <td>WB_RGBLevelsAuto</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0852 = 2130'>0x0852</td> <td>WB_RGBMul0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0853 = 2131'>0x0853</td> <td>WB_RGBMul1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0854 = 2132'>0x0854</td> <td>WB_RGBMul2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0855 = 2133'>0x0855</td> <td>WB_RGBMul3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x085c = 2140'>0x085c</td> <td>WB_RGBCoeffs0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x085d = 2141'>0x085d</td> <td>WB_RGBCoeffs1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x085e = 2142'>0x085e</td> <td>WB_RGBCoeffs2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x085f = 2143'>0x085f</td> <td>WB_RGBCoeffs3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0903 = 2307'>0x0903</td> <td>BaseISO</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x09ce = 2510'>0x09ce</td> <td>SensorSerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0ce5 = 3301'>0x0ce5</td> <td>FirmwareVersion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0e4c = 3660'>0x0e4c</td> <td>KodakLook</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x1389 = 5001'>0x1389</td> <td>InputProfile</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x138a = 5002'>0x138a</td> <td>KodakLookProfile</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr> <td title='0x138b = 5003'>0x138b</td> <td>OutputProfile</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1391 = 5009'>0x1391</td> <td>ToneCurveFileName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x1784 = 6020'>0x1784</td> <td>ISO</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='TextualInfo'>Kodak TextualInfo Tags</a></h2> <p>Below is a list of tags which have been observed in the Kodak TextualInfo data, however ExifTool will extract information from any tags found here.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'AF Function'</td> <td>AFMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Actual Compensation'</td> <td>ActualCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Aperture'</td> <td>Aperture</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Auto Bracket'</td> <td>AutoBracket</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Brightness Value'</td> <td>BrightnessValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Camera'</td> <td>CameraModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Camera body'</td> <td>CameraBody</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Compensation'</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Date'</td> <td>Date</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Exposure Bias'</td> <td>ExposureBias</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Exposure Mode'</td> <td>ExposureMode</td> <td class=c>N</td> <td><span class=s>&#39;A&#39; = Aperture Priority <br>&#39;B&#39; = Bulb <br>&#39;M&#39; = Manual <br>&#39;P&#39; = Program <br>&#39;S&#39; = Shutter Priority</span></td></tr> <tr class=b> <td>'Firmware Version'</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Flash Compensation'</td> <td>FlashExposureComp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Flash Fired'</td> <td>FlashFired</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Flash Sync Mode'</td> <td>FlashSyncMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Focal Length'</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Height'</td> <td>KodakImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ISO'</td> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ISO Speed'</td> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Image Number'</td> <td>ImageNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Max Aperture'</td> <td>MaxAperture</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Meter Mode'</td> <td>MeterMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Min Aperture'</td> <td>MinAperture</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Popup Flash'</td> <td>PopupFlash</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Serial Number'</td> <td>SerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Shooting Mode'</td> <td>ShootingMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Shutter'</td> <td>ShutterSpeed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Temperature'</td> <td>Temperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Time'</td> <td>Time</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'White balance'</td> <td>WhiteBalance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Width'</td> <td>KodakImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'_other_info'</td> <td>OtherInfo</td> <td class=c>N</td> <td><span class=s><span class=n>(any other information without a tag name)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Processing'>Kodak Processing Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>WB_RGBLevels</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Meta'>Kodak Meta Tags</a></h2> <p>These tags are found in the APP3 &quot;Meta&quot; segment of JPEG images from Kodak cameras such as the DC280, DC3400, DC5000, MC3, M580, Z950 and Z981. The structure of this segment is similar to the APP1 &quot;Exif&quot; segment, but a different set of tags is used.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0xc350 = 50000'>0xc350</td> <td>FilmProductCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc351 = 50001'>0xc351</td> <td>ImageSourceEK</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xc352 = 50002'>0xc352</td> <td>CaptureConditionsPAR</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc353 = 50003'>0xc353</td> <td>CameraOwner</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr> <td title='0xc354 = 50004'>0xc354</td> <td>SerialNumber</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc355 = 50005'>0xc355</td> <td>UserSelectGroupTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xc356 = 50006'>0xc356</td> <td>DealerIDNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc357 = 50007'>0xc357</td> <td>CaptureDeviceFID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xc358 = 50008'>0xc358</td> <td>EnvelopeNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc359 = 50009'>0xc359</td> <td>FrameNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xc35a = 50010'>0xc35a</td> <td>FilmCategory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc35b = 50011'>0xc35b</td> <td>FilmGencode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xc35c = 50012'>0xc35c</td> <td>ModelAndVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc35d = 50013'>0xc35d</td> <td>FilmSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xc35e = 50014'>0xc35e</td> <td>SBA_RGBShifts</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc35f = 50015'>0xc35f</td> <td>SBAInputImageColorspace</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xc360 = 50016'>0xc360</td> <td>SBAInputImageBitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc361 = 50017'>0xc361</td> <td>SBAExposureRecord</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xc362 = 50018'>0xc362</td> <td>UserAdjSBA_RGBShifts</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc363 = 50019'>0xc363</td> <td>ImageRotationStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xc364 = 50020'>0xc364</td> <td>RollGuidElements</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc365 = 50021'>0xc365</td> <td>MetadataNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xc366 = 50022'>0xc366</td> <td>EditTagArray</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc367 = 50023'>0xc367</td> <td>Magnification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xc36c = 50028'>0xc36c</td> <td>NativeXResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc36d = 50029'>0xc36d</td> <td>NativeYResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xc36e = 50030'>0xc36e</td> <td>KodakEffectsIFD</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#SpecialEffects'>Kodak SpecialEffects Tags</a></td></tr> <tr class=b> <td title='0xc36f = 50031'>0xc36f</td> <td>KodakBordersIFD</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#Borders'>Kodak Borders Tags</a></td></tr> <tr> <td title='0xc37a = 50042'>0xc37a</td> <td>NativeResolutionUnit</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc418 = 50200'>0xc418</td> <td>SourceImageDirectory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xc419 = 50201'>0xc419</td> <td>SourceImageFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc41a = 50202'>0xc41a</td> <td>SourceImageVolumeName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xc46c = 50284'>0xc46c</td> <td>PrintQuality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xc46e = 50286'>0xc46e</td> <td>ImagePrintStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SpecialEffects'>Kodak SpecialEffects Tags</a></h2> <p> The Kodak SpecialEffects and Borders tags are found in sub-IFD&#39;s within the Kodak JPEG APP3 &quot;Meta&quot; segment. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>DigitalEffectsVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>DigitalEffectsName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>DigitalEffectsType</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Borders'>Kodak Borders Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>BordersVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>BorderName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>BorderID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>BorderLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>BorderType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0008 = 8'>0x0008</td> <td>WatermarkType</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='KDC_IFD'>Kodak KDC_IFD Tags</a></h2> <p>These tags are found in a separate IFD of KDC images from some newer Kodak models such as the P880 and Z1015IS.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0xfa00 = 64000'>0xfa00</td> <td>SerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfa0d = 64013'>0xfa0d</td> <td>WhiteBalance</td> <td class=c>int8u</td> <td><span class=s>0 = Auto <br>1 = Fluorescent <br>2 = Tungsten <br>3 = Daylight <br>6 = Shade</span></td></tr> <tr> <td title='0xfa25 = 64037'>0xfa25</td> <td>WB_RGBLevelsAuto</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfa27 = 64039'>0xfa27</td> <td>WB_RGBLevelsTungsten</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xfa28 = 64040'>0xfa28</td> <td>WB_RGBLevelsFluorescent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfa29 = 64041'>0xfa29</td> <td>WB_RGBLevelsDaylight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xfa2a = 64042'>0xfa2a</td> <td>WB_RGBLevelsShade</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='frea'>Kodak frea Tags</a></h2> <p>Information stored in the &quot;frea&quot; atom of Kodak PixPro SP360 MP4 videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'scra'</td> <td>PreviewImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'thma'</td> <td>ThumbnailImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Free'>Kodak Free Tags</a></h2> <p>Information stored in the &quot;free&quot; atom of Kodak MP4 videos. (VERY bad form for Kodak to store useful information in an atom intended for unused space!)</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'AprV'</td> <td>ApertureValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'BrtV'</td> <td>BrightnessValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Expc'</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Expo'</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'FL35'</td> <td>FocalLengthIn35mmFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'FNum'</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'FoLn'</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ISOS'</td> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'SVer'</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Scrn'</td> <td>PreviewInfo</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#Scrn'>Kodak Scrn Tags</a></td></tr> <tr> <td>'Seri'</td> <td>SerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'StSV'</td> <td>ShutterSpeedValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Scrn'>Kodak Scrn Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PreviewImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>PreviewImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>PreviewImageLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>PreviewImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='DcMD'>Kodak DcMD Tags</a></h2> <p>Metadata directory found in MOV and MP4 videos from some Kodak cameras.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'CMbo'</td> <td>CameraByteOrder</td> <td class=c>N</td> <td><span class=s>&#39;II&#39; = Little-endian (Intel, II) <br>&#39;MM&#39; = Big-endian (Motorola, MM)</span></td></tr> <tr class=b> <td>'Cmbo'</td> <td>CameraByteOrder</td> <td class=c>N</td> <td><span class=s>&#39;II&#39; = Little-endian (Intel, II) <br>&#39;MM&#39; = Big-endian (Motorola, MM)</span></td></tr> <tr> <td>'DcEM'</td> <td>DcEM</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#DcEM'>Kodak DcEM Tags</a></td></tr> <tr class=b> <td>'DcME'</td> <td>DcME</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#DcME'>Kodak DcME Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='DcEM'>Kodak DcEM Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='DcME'>Kodak DcME Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='MOV'>Kodak MOV Tags</a></h2> <p>This information is found in the TAGS atom of MOV videos from Kodak models such as the P880.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='64 = 0x40'>64</td> <td>ModelType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='78 = 0x4e'>78</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='82 = 0x52'>82</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='90 = 0x5a'>90</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='112 = 0x70'>112</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Dec 23, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/KyoceraRaw.html��������������������������������������������������000644 �000765 �000024 �00000004255 12527350231 021771� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>KyoceraRaw Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>KyoceraRaw Tags</h2> <p>Tags for Kyocera Contax N Digital RAW images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='25 = 0x19'>25</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='33 = 0x21'>33</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='52 = 0x34'>52</td> <td>ISO</td> <td class=c>N</td> <td><table class=cols><tr> <td>7 = 25 <br>8 = 32 <br>9 = 40 <br>10 = 50</td><td>&nbsp;&nbsp;</td> <td>11 = 64 <br>12 = 80 <br>13 = 100 <br>14 = 125</td><td>&nbsp;&nbsp;</td> <td>15 = 160 <br>16 = 200 <br>17 = 250 <br>18 = 320</td><td>&nbsp;&nbsp;</td> <td>19 = 400</td></tr></table> </td></tr> <tr class=b> <td class=r title='56 = 0x38'>56</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='60 = 0x3c'>60</td> <td>WB_RGGBLevels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='88 = 0x58'>88</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='104 = 0x68'>104</td> <td>MaxAperture</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='112 = 0x70'>112</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='124 = 0x7c'>124</td> <td>Lens</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Feb 17, 2006</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Leaf.html��������������������������������������������������������000644 �000765 �000024 �00000050674 11477727157 020621� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Leaf Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Leaf Tags</h2> <p>These tags are found in .MOS images from Leaf digital camera backs as written by Creo Leaf Capture. They exist within the Leaf-specific directory structure of EXIF tag 0x8606. The tables below list observed Leaf tags, however ExifTool will extract any tags found in the Leaf directories even if they don&#39;t appear in these tables.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'JPEG_preview_data'</td> <td>PreviewImage</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td>'JPEG_preview_info'</td> <td>PreviewInfo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'PDA_histogram_data'</td> <td>PDAHistogram</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'back_serial_number'</td> <td>BackSerial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'camera_profile'</td> <td>CameraProfile</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html#CameraProfile'>Leaf CameraProfile Tags</a></td></tr> <tr class=b> <td>'icc_camera_profile'</td> <td>ICC_Profile</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> <tr> <td>'icc_camera_to_tone_matrix'</td> <td>ToneMatrix</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'icc_camera_to_tone_space_flow'</td> <td>ToneSpaceFlow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'icc_rgb_ws_profile'</td> <td>RGB_Profile</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> <tr class=b> <td>'image_offset'</td> <td>ImageOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pattern_ratation_angle'</td> <td>PatternAngle</td> <td class=c>N</td> <td><span class=s><span class=n>(&quot;ratation&quot; is not a typo)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraProfile'>Leaf CameraProfile Tags</a></h2> <p>All <b>Tag ID</b>&#39;s in the following table have a leading &#39;CamProf_&#39; which has been removed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'back_type'</td> <td>CameraBackType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'capture_profile'</td> <td>CaptureProfile</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html#CaptureProfile'>Leaf CaptureProfile Tags</a></td></tr> <tr> <td>'image_profile'</td> <td>ImageProfile</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html#ImageProfile'>Leaf ImageProfile Tags</a></td></tr> <tr class=b> <td>'name'</td> <td>CameraName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'type'</td> <td>CameraType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'version'</td> <td>CameraProfileVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CaptureProfile'>Leaf CaptureProfile Tags</a></h2> <p>All <b>Tag ID</b>&#39;s in the following table have a leading &#39;CaptProf_&#39; which has been removed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'CCD_rect'</td> <td>CCDRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'CCD_valid_rect'</td> <td>CCDValidRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'CCD_video_rect'</td> <td>CCDVideoRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'back_type'</td> <td>CaptProfBackType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'center_dark_rect'</td> <td>CenterDarkRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'color_averages'</td> <td>ColorAverages</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'color_matrix'</td> <td>ColorMatrix</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'dark_correction_type'</td> <td>DarkCorrectionType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'image_bounds'</td> <td>ImageBounds</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'image_fields'</td> <td>ImageFields</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'image_offset'</td> <td>ImageOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'left_dark_rect'</td> <td>LeftDarkRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'luminance_consts'</td> <td>LuminanceConsts</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'mosaic_pattern'</td> <td>MosaicPattern</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'name'</td> <td>CaptProfName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'number_of_planes'</td> <td>NumberOfPlanes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'raw_data_rotation'</td> <td>RawDataRotation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'reconstruction_type'</td> <td>ReconstructionType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'right_dark_rect'</td> <td>RightDarkRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'serial_number'</td> <td>CaptureSerial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'type'</td> <td>CaptProfType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'version'</td> <td>CaptProfVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'xy_offset_info'</td> <td>XYOffsetInfo</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ImageProfile'>Leaf ImageProfile Tags</a></h2> <p>All <b>Tag ID</b>&#39;s in the following table have a leading &#39;ImgProf_&#39; which has been removed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'back_type'</td> <td>ImgProfBackType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'image_status'</td> <td>ImageStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'name'</td> <td>ImgProfName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'rotation_angle'</td> <td>RotationAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'shoot_setup'</td> <td>ShootSetup</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html#ShootSetup'>Leaf ShootSetup Tags</a></td></tr> <tr class=b> <td>'type'</td> <td>ImgProfType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'version'</td> <td>ImgProfVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ShootSetup'>Leaf ShootSetup Tags</a></h2> <p>All <b>Tag ID</b>&#39;s in the following table have a leading &#39;ShootObj_&#39; which has been removed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'back_type'</td> <td>ShootObjBackType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'camera_setup'</td> <td>CameraSetup</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html#CameraSetup'>Leaf CameraSetup Tags</a></td></tr> <tr> <td>'capture_setup'</td> <td>CaptureSetup</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html#CaptureSetup'>Leaf CaptureSetup Tags</a></td></tr> <tr class=b> <td>'color_setup'</td> <td>ColorSetup</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html#ColorSetup'>Leaf ColorSetup Tags</a></td></tr> <tr> <td>'look_header'</td> <td>LookHeader</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html#LookHeader'>Leaf LookHeader Tags</a></td></tr> <tr class=b> <td>'name'</td> <td>ShootObjName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'save_setup'</td> <td>SaveSetup</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html#SaveSetup'>Leaf SaveSetup Tags</a></td></tr> <tr class=b> <td>'type'</td> <td>ShootObjType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'version'</td> <td>ShootObjVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraSetup'>Leaf CameraSetup Tags</a></h2> <p>All <b>Tag ID</b>&#39;s in the following table have a leading &#39;CameraObj_&#39; which has been removed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'ISO_speed'</td> <td>ISOSpeed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'back_type'</td> <td>CameraObjBackType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'camera_type'</td> <td>CameraType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'lens_ID'</td> <td>LensID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'lens_type'</td> <td>LensType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'name'</td> <td>CameraObjName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'strobe'</td> <td>Strobe</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'type'</td> <td>CameraObjType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'version'</td> <td>CameraObjVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CaptureSetup'>Leaf CaptureSetup Tags</a></h2> <p>All <b>Tag ID</b>&#39;s in the following table have a leading &#39;CaptureObj_&#39; which has been removed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Multi_quality'</td> <td>MultiQuality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'back_type'</td> <td>CaptureObjBackType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'name'</td> <td>CaptureObjName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'neutals'</td> <td>Neutals</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html#Neutrals'>Leaf Neutrals Tags</a></td></tr> <tr> <td>'selection'</td> <td>Selection</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html#Selection'>Leaf Selection Tags</a></td></tr> <tr class=b> <td>'sharpness'</td> <td>Sharpness</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html#Sharpness'>Leaf Sharpness Tags</a></td></tr> <tr> <td>'single_quality'</td> <td>SingleQuality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'tone_curve'</td> <td>ToneCurve</td> <td class=c>-</td> <td>--&gt; <a href='Leaf.html#ToneCurve'>Leaf ToneCurve Tags</a></td></tr> <tr> <td>'type'</td> <td>CaptureObjType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'version'</td> <td>CaptureObjVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Neutrals'>Leaf Neutrals Tags</a></h2> <p>All <b>Tag ID</b>&#39;s in the following table have a leading &#39;NeutObj_&#39; which has been removed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'back_type'</td> <td>NeutObjBackType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'color_casts'</td> <td>ColorCasts</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'highlight_end_points'</td> <td>HighlightEndPoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'name'</td> <td>NeutObjName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'neutrals'</td> <td>Neutrals</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'shadow_end_points'</td> <td>ShadowEndPoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'type'</td> <td>NeutObjType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'version'</td> <td>NeutObjVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Selection'>Leaf Selection Tags</a></h2> <p>All <b>Tag ID</b>&#39;s in the following table have a leading &#39;SelObj_&#39; which has been removed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'back_type'</td> <td>SelObjBackType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'locks'</td> <td>Locks</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'name'</td> <td>SelObjName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'orientation'</td> <td>Orientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'rect'</td> <td>Rect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'resolution'</td> <td>Resolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'scale'</td> <td>Scale</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'type'</td> <td>SelObjType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'version'</td> <td>SelObjVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Sharpness'>Leaf Sharpness Tags</a></h2> <p>All <b>Tag ID</b>&#39;s in the following table have a leading &#39;SharpObj_&#39; which has been removed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'back_type'</td> <td>SharpObjBackType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'data_len'</td> <td>DataLen</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'name'</td> <td>SharpObjName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'sharp_info'</td> <td>SharpInfo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'sharp_method'</td> <td>SharpMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'type'</td> <td>SharpObjType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'version'</td> <td>SharpObjVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ToneCurve'>Leaf ToneCurve Tags</a></h2> <p>All <b>Tag ID</b>&#39;s in the following table have a leading &#39;ToneObj_&#39; which has been removed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'back_type'</td> <td>ToneObjBackType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'gamma'</td> <td>Gamma</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'name'</td> <td>ToneObjName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'npts'</td> <td>Npts</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'tones'</td> <td>Tones</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'type'</td> <td>ToneObjType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'version'</td> <td>ToneObjVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorSetup'>Leaf ColorSetup Tags</a></h2> <p>All <b>Tag ID</b>&#39;s in the following table have a leading &#39;ColorObj_&#39; which has been removed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'back_type'</td> <td>ColorObjBackType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'color_mode'</td> <td>ColorMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'color_type'</td> <td>ColorType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'has_ICC'</td> <td>HasICC</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'input_profile'</td> <td>InputProfile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'name'</td> <td>ColorObjName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'output_profile'</td> <td>OutputProfile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'type'</td> <td>ColorObjType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'version'</td> <td>ColorObjVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LookHeader'>Leaf LookHeader Tags</a></h2> <p>All <b>Tag ID</b>&#39;s in the following table have a leading &#39;LookHead_&#39; which has been removed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'back_type'</td> <td>LookHeadBackType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'name'</td> <td>LookHeadName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'type'</td> <td>LookHeadType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'version'</td> <td>LookHeadVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SaveSetup'>Leaf SaveSetup Tags</a></h2> <p>All <b>Tag ID</b>&#39;s in the following table have a leading &#39;SaveObj_&#39; which has been removed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'back_type'</td> <td>SaveObjBackType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'leaf_auto_active'</td> <td>LeafAutoActive</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'leaf_auto_base_name'</td> <td>LeafAutoBaseName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'leaf_hot_folder'</td> <td>LeafHotFolder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'leaf_open_proc_HDR'</td> <td>LeafOpenProcHDR</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'leaf_output_file_type'</td> <td>LeafOutputFileType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'leaf_save_selection'</td> <td>LeafSaveSelection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'name'</td> <td>SaveObjName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'std_auto_active'</td> <td>StdAutoActive</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'std_base_name'</td> <td>StdBaseName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'std_hot_folder'</td> <td>StdHotFolder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'std_open_in_photoshop'</td> <td>StdOpenInPhotoshop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'std_output_bit_depth'</td> <td>StdOutputBitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'std_output_color_mode'</td> <td>StdOutputColorMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'std_output_file_type'</td> <td>StdOutputFileType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'std_oxygen'</td> <td>StdOxygen</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'std_save_selection'</td> <td>StdSaveSelection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'std_scaled_output'</td> <td>StdScaledOutput</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'std_sharpen_output'</td> <td>StdSharpenOutput</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'type'</td> <td>SaveObjType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'version'</td> <td>SaveObjVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SubIFD'>Leaf SubIFD Tags</a></h2> <p>Leaf writes a TIFF-format sub-IFD inside IFD0 of a MOS image. No tags in this sub-IFD are currently known, except for tag 0x8606 which really shouldn&#39;t be here anyway (so it doesn&#39;t appear in the table below) because it duplicates a reference to the same data of tag 0x8606 in IFD0.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Dec 8, 2010</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/LNK.html���������������������������������������������������������000644 �000765 �000024 �00000030777 12527350231 020356� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>LNK Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>LNK Tags</h2> <p>Information extracted from MS Shell Link (Windows shortcut) files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0014 = 20'>0x0014</td> <td>Flags</td> <td class=c>N</td> <td><table class=cols><tr> <td>Bit 0 = IDList <br>Bit 1 = LinkInfo <br>Bit 2 = Description <br>Bit 3 = RelativePath <br>Bit 4 = WorkingDir <br>Bit 5 = CommandArgs <br>Bit 6 = IconFile <br>Bit 7 = Unicode <br>Bit 8 = NoLinkInfo <br>Bit 9 = ExpString <br>Bit 10 = SeparateProc <br>Bit 12 = DarwinID <br>Bit 13 = RunAsUser <br>Bit 14 = ExpIcon <br>Bit 15 = NoPidAlias <br>Bit 17 = RunWithShim <br>Bit 18 = NoLinkTrack <br>Bit 19 = TargetMetadata <br>Bit 20 = NoLinkPathTracking <br>Bit 21 = NoKnownFolderTracking <br>Bit 22 = NoKnownFolderAlias <br>Bit 23 = LinkToLink <br>Bit 24 = UnaliasOnSave <br>Bit 25 = PreferEnvPath <br>Bit 26 = KeepLocalIDList</td></tr></table> </td></tr> <tr class=b> <td title='0x0018 = 24'>0x0018</td> <td>FileAttributes</td> <td class=c>N</td> <td><table class=cols><tr> <td>Bit 0 = Read-only <br>Bit 1 = Hidden <br>Bit 2 = System <br>Bit 3 = Volume <br>Bit 4 = Directory <br>Bit 5 = Archive <br>Bit 6 = Encrypted? <br>Bit 7 = Normal</td><td>&nbsp;&nbsp;</td> <td>Bit 8 = Temporary <br>Bit 9 = Sparse <br>Bit 10 = Reparse point <br>Bit 11 = Compressed <br>Bit 12 = Offline <br>Bit 13 = Not indexed <br>Bit 14 = Encrypted</td></tr></table> </td></tr> <tr> <td title='0x001c = 28'>0x001c</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0024 = 36'>0x0024</td> <td>AccessDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x002c = 44'>0x002c</td> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0034 = 52'>0x0034</td> <td>TargetFileSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0038 = 56'>0x0038</td> <td>IconIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x003c = 60'>0x003c</td> <td>RunWindow</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Hide <br>1 = Normal <br>2 = Show Minimized <br>3 = Show Maximized <br>4 = Show No Activate <br>5 = Show <br>6 = Minimized <br>7 = Show Minimized No Activate <br>8 = Show NA <br>9 = Restore <br>10 = Show Default</td></tr></table> </td></tr> <tr> <td title='0x0040 = 64'>0x0040</td> <td>HotKey</td> <td class=c>N</td> <td><table class=cols><tr> <td>0x0 = (none) <br>0x90 = Num Lock <br>0x91 = Scroll Lock <br>0x100 = Shift <br>0x200 = Control</td><td>&nbsp;&nbsp;</td> <td>0x400 = Alt <br>&#39;0x30&#39;-&#39;0x39&#39; = 0-9 <br>&#39;0x41&#39;-&#39;0x5a&#39; = A-Z <br>&#39;0x70&#39;-&#39;0x87&#39; = F1-F24</td></tr></table> </td></tr> <tr class=b> <td title='0x10000 = 65536'>0x10000</td> <td>ItemID</td> <td class=c>-</td> <td>--&gt; <a href='LNK.html#ItemID'>LNK ItemID Tags</a></td></tr> <tr> <td title='0x20000 = 131072'>0x20000</td> <td>LinkInfo</td> <td class=c>-</td> <td>--&gt; <a href='LNK.html#LinkInfo'>LNK LinkInfo Tags</a></td></tr> <tr class=b> <td title='0x30004 = 196612'>0x30004</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x30008 = 196616'>0x30008</td> <td>RelativePath</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x30010 = 196624'>0x30010</td> <td>WorkingDirectory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x30020 = 196640'>0x30020</td> <td>CommandLineArguments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x30040 = 196672'>0x30040</td> <td>IconFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xa0000000 = 2684354560'>0xa0000000</td> <td>UnknownData</td> <td class=c>-</td> <td>--&gt; <a href='LNK.html#UnknownData'>LNK UnknownData Tags</a></td></tr> <tr class=b> <td title='0xa0000001 = 2684354561'>0xa0000001</td> <td>EnvVarData</td> <td class=c>-</td> <td>--&gt; <a href='LNK.html#UnknownData'>LNK UnknownData Tags</a></td></tr> <tr> <td title='0xa0000002 = 2684354562'>0xa0000002</td> <td>ConsoleData</td> <td class=c>-</td> <td>--&gt; <a href='LNK.html#ConsoleData'>LNK ConsoleData Tags</a></td></tr> <tr class=b> <td title='0xa0000003 = 2684354563'>0xa0000003</td> <td>TrackerData</td> <td class=c>-</td> <td>--&gt; <a href='LNK.html#TrackerData'>LNK TrackerData Tags</a></td></tr> <tr> <td title='0xa0000004 = 2684354564'>0xa0000004</td> <td>ConsoleFEData</td> <td class=c>-</td> <td>--&gt; <a href='LNK.html#ConsoleFEData'>LNK ConsoleFEData Tags</a></td></tr> <tr class=b> <td title='0xa0000005 = 2684354565'>0xa0000005</td> <td>SpecialFolderData</td> <td class=c>-</td> <td>--&gt; <a href='LNK.html#UnknownData'>LNK UnknownData Tags</a></td></tr> <tr> <td title='0xa0000006 = 2684354566'>0xa0000006</td> <td>DarwinData</td> <td class=c>-</td> <td>--&gt; <a href='LNK.html#UnknownData'>LNK UnknownData Tags</a></td></tr> <tr class=b> <td title='0xa0000007 = 2684354567'>0xa0000007</td> <td>IconEnvData</td> <td class=c>-</td> <td>--&gt; <a href='LNK.html#UnknownData'>LNK UnknownData Tags</a></td></tr> <tr> <td title='0xa0000008 = 2684354568'>0xa0000008</td> <td>ShimData</td> <td class=c>-</td> <td>--&gt; <a href='LNK.html#UnknownData'>LNK UnknownData Tags</a></td></tr> <tr class=b> <td title='0xa0000009 = 2684354569'>0xa0000009</td> <td>PropertyStoreData</td> <td class=c>-</td> <td>--&gt; <a href='LNK.html#UnknownData'>LNK UnknownData Tags</a></td></tr> <tr> <td title='0xa000000b = 2684354571'>0xa000000b</td> <td>KnownFolderData</td> <td class=c>-</td> <td>--&gt; <a href='LNK.html#UnknownData'>LNK UnknownData Tags</a></td></tr> <tr class=b> <td title='0xa000000c = 2684354572'>0xa000000c</td> <td>VistaIDListData</td> <td class=c>-</td> <td>--&gt; <a href='LNK.html#UnknownData'>LNK UnknownData Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ItemID'>LNK ItemID Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0032 = 50'>0x0032</td> <td>Item0032</td> <td class=c>-</td> <td>--&gt; <a href='LNK.html#Item0032'>LNK Item0032 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Item0032'>LNK Item0032 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>TargetFileDOSName</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LinkInfo'>LNK LinkInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CommonNetworkRelLink</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CommonPathSuffix</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DriveSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DriveType</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Unknown <br>1 = Invalid Root Path <br>2 = Removable Media <br>3 = Fixed Disk</td><td>&nbsp;&nbsp;</td> <td>4 = Remote Drive <br>5 = CD-ROM <br>6 = Ram Disk</td></tr></table> </td></tr> <tr class=b> <td>LocalBasePath</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>NetName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>NetProviderType</td> <td class=c>N</td> <td><table class=cols><tr> <td>0x1a0000 = AVID <br>0x1b0000 = DOCUSPACE <br>0x1c0000 = MANGOSOFT <br>0x1d0000 = SERNET <br>0x1e0000 = RIVERFRONT1 <br>0x1f0000 = RIVERFRONT2 <br>0x200000 = DECORB <br>0x210000 = PROTSTOR <br>0x220000 = FJ_REDIR <br>0x230000 = DISTINCT <br>0x240000 = TWINS <br>0x250000 = RDR2SAMPLE <br>0x260000 = CSC <br>0x270000 = 3IN1 <br>0x290000 = EXTENDNET <br>0x2a0000 = STAC <br>0x2b0000 = FOXBAT</td><td>&nbsp;&nbsp;</td> <td>0x2c0000 = YAHOO <br>0x2d0000 = EXIFS <br>0x2e0000 = DAV <br>0x2f0000 = KNOWARE <br>0x300000 = OBJECT_DIRE <br>0x310000 = MASFAX <br>0x320000 = HOB_NFS <br>0x330000 = SHIVA <br>0x340000 = IBMAL <br>0x350000 = LOCK <br>0x360000 = TERMSRV <br>0x370000 = SRT <br>0x380000 = QUINCY <br>0x390000 = OPENAFS <br>0x3a0000 = AVID1 <br>0x3b0000 = DFS</td></tr></table> </td></tr> <tr> <td>VolumeID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VolumeLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='UnknownData'>LNK UnknownData Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='ConsoleData'>LNK ConsoleData Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>FillAttributes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>PopupFillAttributes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>ScreenBufferSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>WindowSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>WindowOrigin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>FontSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='36 = 0x24'>36</td> <td>FontFamily</td> <td class=c>N</td> <td><table class=cols><tr> <td>0x0 = Don&#39;t Care <br>0x10 = Roman <br>0x20 = Swiss</td><td>&nbsp;&nbsp;</td> <td>0x30 = Modern <br>0x40 = Script <br>0x50 = Decorative</td></tr></table> </td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>FontWeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>FontName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='108 = 0x6c'>108</td> <td>CursorSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='112 = 0x70'>112</td> <td>FullScreen</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='116 = 0x74'>116</td> <td>QuickEdit</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='120 = 0x78'>120</td> <td>InsertMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='124 = 0x7c'>124</td> <td>WindowOriginAuto</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='128 = 0x80'>128</td> <td>HistoryBufferSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='132 = 0x84'>132</td> <td>NumHistoryBuffers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='136 = 0x88'>136</td> <td>RemoveHistoryDuplicates</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='TrackerData'>LNK TrackerData Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>MachineID</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ConsoleFEData'>LNK ConsoleFEData Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>CodePage</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Mar 17, 2012</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �Image-ExifTool-10.10/html/TagNames/Lytro.html�������������������������������������������������������000644 �000765 �000024 �00000005666 12535340444 021046� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Lytro Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Lytro Tags</h2> <p>Tag definitions for Lytro Light Field Picture (LFP) files. ExifTool extracts the full JSON metadata blocks, as well as breaking them down into individual tags. All available tags are extracted from the JSON metadata, even if they don&#39;t appear in the table below.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AccelerometerTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AccelerometerX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AccelerometerY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AccelerometerZ</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CameraType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EmbeddedImage</td> <td class=c>N</td> <td><span class=s><span class=n>(JPEG image embedded in LFP files written by Lytro Desktop)</span></span></td></tr> <tr class=b> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FocalPlaneXResolution</td> <td class=c>N</td> <td><span class=s><span class=n>(Y resolution is the same as X resolution)</span></span></td></tr> <tr> <td>FrameExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ImageLimitExposureBias</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageModulationExposureBias</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>JSONMetadata</td> <td class=c title=' + = List'>N+</td> <td><span class=s><span class=n>(the full JSON-format metadata blocks)</span></span></td></tr> <tr class=b> <td>LensTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Orientation</td> <td class=c>N</td> <td><span class=s>1 = Horizontal (normal)</span></td></tr> <tr class=b> <td>SensorSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SocTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jul 18, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/M2TS.html��������������������������������������������������������000644 �000765 �000024 �00000011517 12527350232 020447� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>M2TS Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>M2TS Tags</h2> <p>The MPEG-2 transport stream is used as a container for many different audio/video formats (including AVCHD). This table lists information extracted from M2TS files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AudioStreamType</td> <td class=c>N</td> <td>--&gt; <a href='M2TS.html#StreamType'>M2TS StreamType Values</a></td></tr> <tr class=b> <td>Duration</td> <td class=c>N</td> <td><span class=s><span class=n>(the -fast option may be used to avoid scanning to the end of file to calculate the Duration)</span></span></td></tr> <tr> <td>VideoStreamType</td> <td class=c>N</td> <td>--&gt; <a href='M2TS.html#StreamType'>M2TS StreamType Values</a></td></tr> <tr class=b> <td>_AC3</td> <td class=c>-</td> <td>--&gt; <a href='M2TS.html#AC3'>M2TS AC3 Tags</a></td></tr> <tr> <td>_H264</td> <td class=c>-</td> <td>--&gt; <a href='H264.html'>H264 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='StreamType'>M2TS StreamType Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>StreamType</th><th>Value</th><th>StreamType</th></tr> <tr><td class=r>0x0</td><td>= Reserved</td> <td class='r b'>0x12</td><td class=b>= MPEG-4 generic</td> </tr><tr><td class=r>0x1</td><td>= MPEG-1 Video</td> <td class='r b'>0x13</td><td class=b>= ISO 14496-1 SL-packetized</td> </tr><tr><td class=r>0x2</td><td>= MPEG-2 Video</td> <td class='r b'>0x14</td><td class=b>= ISO 13818-6 Synchronized Download Protocol</td> </tr><tr><td class=r>0x3</td><td>= MPEG-1 Audio</td> <td class='r b'>0x1b</td><td class=b>= H.264 Video</td> </tr><tr><td class=r>0x4</td><td>= MPEG-2 Audio</td> <td class='r b'>0x80</td><td class=b>= DigiCipher II Video</td> </tr><tr><td class=r>0x5</td><td>= ISO 13818-1 private sections</td> <td class='r b'>0x81</td><td class=b>= A52/AC-3 Audio</td> </tr><tr><td class=r>0x6</td><td>= ISO 13818-1 PES private data</td> <td class='r b'>0x82</td><td class=b>= HDMV DTS Audio</td> </tr><tr><td class=r>0x7</td><td>= ISO 13522 MHEG</td> <td class='r b'>0x83</td><td class=b>= LPCM Audio</td> </tr><tr><td class=r>0x8</td><td>= ISO 13818-1 DSM-CC</td> <td class='r b'>0x84</td><td class=b>= SDDS Audio</td> </tr><tr><td class=r>0x9</td><td>= ISO 13818-1 auxiliary</td> <td class='r b'>0x85</td><td class=b>= ATSC Program ID</td> </tr><tr><td class=r>0xa</td><td>= ISO 13818-6 multi-protocol encap</td> <td class='r b'>0x86</td><td class=b>= DTS-HD Audio</td> </tr><tr><td class=r>0xb</td><td>= ISO 13818-6 DSM-CC U-N msgs</td> <td class='r b'>0x87</td><td class=b>= E-AC-3 Audio</td> </tr><tr><td class=r>0xc</td><td>= ISO 13818-6 stream descriptors</td> <td class='r b'>0x8a</td><td class=b>= DTS Audio</td> </tr><tr><td class=r>0xd</td><td>= ISO 13818-6 sections</td> <td class='r b'>0x91</td><td class=b>= A52b/AC-3 Audio</td> </tr><tr><td class=r>0xe</td><td>= ISO 13818-1 auxiliary</td> <td class='r b'>0x92</td><td class=b>= DVD_SPU vls Subtitle</td> </tr><tr><td class=r>0xf</td><td>= MPEG-2 AAC Audio</td> <td class='r b'>0x94</td><td class=b>= SDDS Audio</td> </tr><tr><td class=r>0x10</td><td>= MPEG-4 Video</td> <td class='r b'>0xa0</td><td class=b>= MSCODEC Video</td> </tr><tr><td class=r>0x11</td><td>= MPEG-4 LATM AAC Audio</td> <td class='r b'>0xea</td><td class=b>= Private ES (VC-1)</td> </tr></table></td></tr></table></blockquote> <h2><a name='AC3'>M2TS AC3 Tags</a></h2> <p>Tags extracted from AC-3 audio streams.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AudioBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioChannels</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = 1 + 1 <br>1 = 1 <br>2 = 2 <br>3 = 3 <br>4 = 2/1 <br>5 = 3/1 <br>6 = 2/2</td><td>&nbsp;&nbsp;</td> <td>7 = 3/2 <br>8 = 1 <br>9 = 2 max <br>10 = 3 max <br>11 = 4 max <br>12 = 5 max <br>13 = 6 max</td></tr></table> </td></tr> <tr> <td>AudioSampleRate</td> <td class=c>N</td> <td><span class=s>0 = 48000 <br>1 = 44100 <br>2 = 32000</span></td></tr> <tr class=b> <td>SurroundMode</td> <td class=c>N</td> <td><span class=s>0 = Not indicated <br>1 = Not Dolby surround <br>2 = Dolby surround</span></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Mar 18, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Matroska.html����������������������������������������������������000644 �000765 �000024 �00000063533 12527350231 021507� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Matroska Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Matroska Tags</h2> <p>The following tags are extracted from Matroska multimedia container files. This container format is used by file types such as MKA, MKV, MKS and WEBM. For speed, ExifTool extracts tags only up to the first Cluster unless the Verbose (-v) or Unknown = 2 (-U) option is used. See <a href="http://www.matroska.org/technical/specs/index.html">http://www.matroska.org/technical/specs/index.html</a> for the official Matroska specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>ChapterDisplay</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>TrackType</td> <td class=c>N</td> <td><table class=cols><tr> <td>0x1 = Video <br>0x2 = Audio <br>0x3 = Complex <br>0x10 = Logo</td><td>&nbsp;&nbsp;</td> <td>0x11 = Subtitle <br>0x12 = Buttons <br>0x20 = Control</td></tr></table> </td></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>ChapterString</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0006 = 6'>0x0006</td> <td>VideoCodecID <br>AudioCodecID <br>CodecID</td> <td class=c>N<br>N<br>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>TrackDefault</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td title='0x0009 = 9'>0x0009</td> <td>ChapterTrackNumber?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000e = 14'>0x000e</td> <td>Slices</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x000f = 15'>0x000f</td> <td>ChapterTrack</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x0011 = 17'>0x0011</td> <td>ChapterTimeStart</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0012 = 18'>0x0012</td> <td>ChapterTimeEnd</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0016 = 22'>0x0016</td> <td>CueRefTime?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0017 = 23'>0x0017</td> <td>CueRefCluster?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0018 = 24'>0x0018</td> <td>ChapterFlagHidden?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001a = 26'>0x001a</td> <td>VideoScanType</td> <td class=c>N</td> <td><span class=s>0 = Progressive <br>1 = Interlaced</span></td></tr> <tr> <td title='0x001b = 27'>0x001b</td> <td>BlockDuration?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001c = 28'>0x001c</td> <td>TrackLacing?</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td title='0x001f = 31'>0x001f</td> <td>AudioChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0020 = 32'>0x0020</td> <td>BlockGroup</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x0021 = 33'>0x0021</td> <td>Block?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0022 = 34'>0x0022</td> <td>BlockVirtual?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0023 = 35'>0x0023</td> <td>SimpleBlock?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0024 = 36'>0x0024</td> <td>CodecState?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0025 = 37'>0x0025</td> <td>BlockAdditional?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0026 = 38'>0x0026</td> <td>BlockMore</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x0027 = 39'>0x0027</td> <td>Position</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x002a = 42'>0x002a</td> <td>CodecDecodeAll</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td title='0x002b = 43'>0x002b</td> <td>PrevSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x002e = 46'>0x002e</td> <td>TrackEntry</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x002f = 47'>0x002f</td> <td>EncryptedBlock?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0030 = 48'>0x0030</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0033 = 51'>0x0033</td> <td>CueTime?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0035 = 53'>0x0035</td> <td>AudioSampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0036 = 54'>0x0036</td> <td>ChapterAtom</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x0037 = 55'>0x0037</td> <td>CueTrackPositions</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x0039 = 57'>0x0039</td> <td>TrackUsed</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td title='0x003a = 58'>0x003a</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x003b = 59'>0x003b</td> <td>CuePoint</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x003f = 63'>0x003f</td> <td>CRC-32?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x004b = 75'>0x004b</td> <td>BlockAdditionalID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x004c = 76'>0x004c</td> <td>LaceNumber?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x004d = 77'>0x004d</td> <td>FrameNumber?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x004e = 78'>0x004e</td> <td>Delay?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x004f = 79'>0x004f</td> <td>ClusterDuration?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0057 = 87'>0x0057</td> <td>TrackNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x005b = 91'>0x005b</td> <td>CueReference</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x0060 = 96'>0x0060</td> <td>Video</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x0061 = 97'>0x0061</td> <td>Audio</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x0067 = 103'>0x0067</td> <td>TimeCode?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0068 = 104'>0x0068</td> <td>TimeSlice</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x006a = 106'>0x006a</td> <td>CueCodecState?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x006b = 107'>0x006b</td> <td>CueRefCodecState?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x006c = 108'>0x006c</td> <td>Void?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x006e = 110'>0x006e</td> <td>BlockAddID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0071 = 113'>0x0071</td> <td>CueClusterPosition?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0077 = 119'>0x0077</td> <td>CueTrack?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x007a = 122'>0x007a</td> <td>ReferencePriority?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x007b = 123'>0x007b</td> <td>ReferenceBlock?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x007d = 125'>0x007d</td> <td>ReferenceVirtual?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0254 = 596'>0x0254</td> <td>ContentCompressionAlgorithm</td> <td class=c>N</td> <td><span class=s>0 = zlib <br>1 = bzlib <br>2 = lzo1x <br>3 = Header Stripping</span></td></tr> <tr class=b> <td title='0x0255 = 597'>0x0255</td> <td>ContentCompressionSettings?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0282 = 642'>0x0282</td> <td>DocType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0285 = 645'>0x0285</td> <td>DocTypeReadVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0286 = 646'>0x0286</td> <td>EBMLVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0287 = 647'>0x0287</td> <td>DocTypeVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x02f2 = 754'>0x02f2</td> <td>EBMLMaxIDLength?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x02f3 = 755'>0x02f3</td> <td>EBMLMaxSizeLength?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x02f7 = 759'>0x02f7</td> <td>EBMLReadVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x037c = 892'>0x037c</td> <td>ChapterLanguage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x037e = 894'>0x037e</td> <td>ChapterCountry</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0444 = 1092'>0x0444</td> <td>SegmentFamily?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0461 = 1121'>0x0461</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x047a = 1146'>0x047a</td> <td>TagLanguage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0484 = 1156'>0x0484</td> <td>TagDefault</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td title='0x0485 = 1157'>0x0485</td> <td>TagBinary</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0487 = 1159'>0x0487</td> <td>TagString</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0489 = 1161'>0x0489</td> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x050d = 1293'>0x050d</td> <td>ChapterProcessPrivate?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0598 = 1432'>0x0598</td> <td>ChapterFlagEnabled?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x05a3 = 1443'>0x05a3</td> <td>TagName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x05b9 = 1465'>0x05b9</td> <td>EditionEntry</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x05bc = 1468'>0x05bc</td> <td>EditionUID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x05bd = 1469'>0x05bd</td> <td>EditionFlagHidden?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x05db = 1499'>0x05db</td> <td>EditionFlagDefault?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x05dd = 1501'>0x05dd</td> <td>EditionFlagOrdered?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x065c = 1628'>0x065c</td> <td>AttachedFileData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0660 = 1632'>0x0660</td> <td>AttachedFileMIMEType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x066e = 1646'>0x066e</td> <td>AttachedFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0675 = 1653'>0x0675</td> <td>AttachedFileReferral?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x067e = 1662'>0x067e</td> <td>AttachedFileDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x06ae = 1710'>0x06ae</td> <td>AttachedFileUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x07e1 = 2017'>0x07e1</td> <td>ContentEncryptionAlgorithm</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Not Encrypted <br>1 = DES <br>2 = 3DES</td><td>&nbsp;&nbsp;</td> <td>3 = Twofish <br>4 = Blowfish <br>5 = AES</td></tr></table> </td></tr> <tr class=b> <td title='0x07e2 = 2018'>0x07e2</td> <td>ContentEncryptionKeyID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x07e3 = 2019'>0x07e3</td> <td>ContentSignature?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x07e4 = 2020'>0x07e4</td> <td>ContentSignatureKeyID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x07e5 = 2021'>0x07e5</td> <td>ContentSignatureAlgorithm</td> <td class=c>N</td> <td><span class=s>0 = Not Signed <br>1 = RSA</span></td></tr> <tr class=b> <td title='0x07e6 = 2022'>0x07e6</td> <td>ContentSignatureHashAlgorithm</td> <td class=c>N</td> <td><span class=s>0 = Not Signed <br>1 = SHA1-160 <br>2 = MD5</span></td></tr> <tr> <td title='0x0d80 = 3456'>0x0d80</td> <td>MuxingApp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0dbb = 3515'>0x0dbb</td> <td>Seek</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x1031 = 4145'>0x1031</td> <td>ContentEncodingOrder?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1032 = 4146'>0x1032</td> <td>ContentEncodingScope?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1033 = 4147'>0x1033</td> <td>ContentEncodingType</td> <td class=c>N</td> <td><span class=s>0 = Compression <br>1 = Encryption</span></td></tr> <tr class=b> <td title='0x1034 = 4148'>0x1034</td> <td>ContentCompression</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x1035 = 4149'>0x1035</td> <td>ContentEncryption</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x135f = 4959'>0x135f</td> <td>CueRefNumber?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x136e = 4974'>0x136e</td> <td>TrackName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1378 = 4984'>0x1378</td> <td>CueBlockNumber?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x137f = 4991'>0x137f</td> <td>TrackOffset?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x13ab = 5035'>0x13ab</td> <td>SeekID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x13ac = 5036'>0x13ac</td> <td>SeekPosition?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x13b8 = 5048'>0x13b8</td> <td>Stereo3DMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x14aa = 5290'>0x14aa</td> <td>CropBottom</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x14b0 = 5296'>0x14b0</td> <td>DisplayWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x14b2 = 5298'>0x14b2</td> <td>DisplayUnit</td> <td class=c>N</td> <td><span class=s>0 = Pixels <br>1 = cm <br>2 = inches</span></td></tr> <tr class=b> <td title='0x14b3 = 5299'>0x14b3</td> <td>AspectRatioType</td> <td class=c>N</td> <td><span class=s>0 = Free Resizing <br>1 = Keep Aspect Ratio <br>2 = Fixed</span></td></tr> <tr> <td title='0x14ba = 5306'>0x14ba</td> <td>DisplayHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x14bb = 5307'>0x14bb</td> <td>CropTop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x14cc = 5324'>0x14cc</td> <td>CropLeft</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x14dd = 5341'>0x14dd</td> <td>CropRight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x15aa = 5546'>0x15aa</td> <td>TrackForced</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td title='0x15ee = 5614'>0x15ee</td> <td>MaxBlockAdditionID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1741 = 5953'>0x1741</td> <td>WritingApp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1854 = 6228'>0x1854</td> <td>SilentTracks</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x18d7 = 6359'>0x18d7</td> <td>SilentTrackNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x21a7 = 8615'>0x21a7</td> <td>AttachedFile</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x2240 = 8768'>0x2240</td> <td>ContentEncoding</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x2264 = 8804'>0x2264</td> <td>AudioBitsPerSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x23a2 = 9122'>0x23a2</td> <td>CodecPrivate?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x23c0 = 9152'>0x23c0</td> <td>Targets</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x23c3 = 9155'>0x23c3</td> <td>ChapterPhysicalEquivalent</td> <td class=c>N</td> <td><table class=cols><tr> <td>10 = Index <br>20 = Track <br>30 = Session <br>40 = Layer</td><td>&nbsp;&nbsp;</td> <td>50 = Side <br>60 = CD / DVD <br>70 = Set / Package</td></tr></table> </td></tr> <tr class=b> <td title='0x23c4 = 9156'>0x23c4</td> <td>TagChapterUID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x23c5 = 9157'>0x23c5</td> <td>TagTrackUID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x23c6 = 9158'>0x23c6</td> <td>TagAttachmentUID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x23c9 = 9161'>0x23c9</td> <td>TagEditionUID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x23ca = 9162'>0x23ca</td> <td>TargetType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2532 = 9522'>0x2532</td> <td>SignedElement?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2624 = 9764'>0x2624</td> <td>TrackTranslate</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x26a5 = 9893'>0x26a5</td> <td>TrackTranslateTrackID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x26bf = 9919'>0x26bf</td> <td>TrackTranslateCodec</td> <td class=c>N</td> <td><span class=s>0 = Matroska Script <br>1 = DVD Menu</span></td></tr> <tr> <td title='0x26fc = 9980'>0x26fc</td> <td>TrackTranslateEditionUID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x27c8 = 10184'>0x27c8</td> <td>SimpleTag</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x28ca = 10442'>0x28ca</td> <td>TargetTypeValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2911 = 10513'>0x2911</td> <td>ChapterProcessCommand</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x2922 = 10530'>0x2922</td> <td>ChapterProcessTime?</td> <td class=c>N</td> <td><span class=s>0 = For Duration of Chapter <br>1 = Before Chapter <br>2 = After Chapter</span></td></tr> <tr class=b> <td title='0x2924 = 10532'>0x2924</td> <td>ChapterTranslate</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x2933 = 10547'>0x2933</td> <td>ChapterProcessData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2944 = 10564'>0x2944</td> <td>ChapterProcess</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x2955 = 10581'>0x2955</td> <td>ChapterProcessCodecID?</td> <td class=c>N</td> <td><span class=s>0 = Matroska <br>1 = DVD</span></td></tr> <tr class=b> <td title='0x29a5 = 10661'>0x29a5</td> <td>ChapterTranslateID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x29bf = 10687'>0x29bf</td> <td>ChapterTranslateCodec</td> <td class=c>N</td> <td><span class=s>0 = Matroska Script <br>1 = DVD Menu</span></td></tr> <tr class=b> <td title='0x29fc = 10748'>0x29fc</td> <td>ChapterTranslateEditionUID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2d80 = 11648'>0x2d80</td> <td>ContentEncodings</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x2de7 = 11751'>0x2de7</td> <td>MinCache?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2df8 = 11768'>0x2df8</td> <td>MaxCache?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2e67 = 11879'>0x2e67</td> <td>ChapterSegmentUID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2ebc = 11964'>0x2ebc</td> <td>ChapterSegmentEditionUID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2fab = 12203'>0x2fab</td> <td>TrackOverlay?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x3373 = 13171'>0x3373</td> <td>Tag</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x3384 = 13188'>0x3384</td> <td>SegmentFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x33a4 = 13220'>0x33a4</td> <td>SegmentUID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x33c4 = 13252'>0x33c4</td> <td>ChapterUID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x33c5 = 13253'>0x33c5</td> <td>TrackUID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3446 = 13382'>0x3446</td> <td>TrackAttachmentUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x35a1 = 13729'>0x35a1</td> <td>BlockAdditions</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x38b5 = 14517'>0x38b5</td> <td>OutputAudioSampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x3ba9 = 15273'>0x3ba9</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3d7b = 15739'>0x3d7b</td> <td>ChannelPositions?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x3e5b = 15963'>0x3e5b</td> <td>SignatureElements</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x3e7b = 15995'>0x3e7b</td> <td>SignatureElementList</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x3e8a = 16010'>0x3e8a</td> <td>SignatureAlgo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3e9a = 16026'>0x3e9a</td> <td>SignatureHash</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x3ea5 = 16037'>0x3ea5</td> <td>SignaturePublicKey?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3eb5 = 16053'>0x3eb5</td> <td>Signature?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2b59c = 177564'>0x2b59c</td> <td>TrackLanguage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3314f = 209231'>0x3314f</td> <td>TrackTimecodeScale</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x383e3 = 230371'>0x383e3</td> <td>FrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3e383 = 254851'>0x3e383</td> <td>VideoFrameRate <br>DefaultDuration</td> <td class=c>N<br>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x58688 = 362120'>0x58688</td> <td>VideoCodecName <br>AudioCodecName <br>CodecName</td> <td class=c>N<br>N<br>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x6b240 = 438848'>0x6b240</td> <td>CodecDownloadURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xad7b1 = 710577'>0xad7b1</td> <td>TimecodeScale</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xeb524 = 963876'>0xeb524</td> <td>ColorSpace?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xfb523 = 1029411'>0xfb523</td> <td>Gamma</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1a9697 = 1742487'>0x1a9697</td> <td>CodecSettings</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1b4040 = 1785920'>0x1b4040</td> <td>CodecInfoURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1c83ab = 1868715'>0x1c83ab</td> <td>PrevFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1cb923 = 1882403'>0x1cb923</td> <td>PrevUID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1e83bb = 1999803'>0x1e83bb</td> <td>NextFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1eb923 = 2013475'>0x1eb923</td> <td>NextUID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x43a770 = 4433776'>0x43a770</td> <td>Chapters</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x14d9b74 = 21863284'>0x14d9b74</td> <td>SeekHead</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x254c367 = 39109479'>0x254c367</td> <td>Tags</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x549a966 = 88713574'>0x549a966</td> <td>Info</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x654ae6b = 106212971'>0x654ae6b</td> <td>Tracks</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0x8538067 = 139690087'>0x8538067</td> <td>SegmentHeader</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0x941a469 = 155296873'>0x941a469</td> <td>Attachments</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0xa45dfa3 = 172351395'>0xa45dfa3</td> <td>EBMLHeader</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0xb538667 = 190023271'>0xb538667</td> <td>SignatureSlot</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr> <td title='0xc53bb6b = 206814059'>0xc53bb6b</td> <td>Cues</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> <tr class=b> <td title='0xf43b675 = 256095861'>0xf43b675</td> <td>Cluster</td> <td class=c>-</td> <td>--&gt; <a href='Matroska.html'>Matroska Tags</a></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised May 14, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Microsoft.html���������������������������������������������������000644 �000765 �000024 �00000122030 12612450130 021651� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Microsoft Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top><a name='XMP'>Microsoft XMP Tags</a></h2> <p>Microsoft Photo 1.0 schema XMP tags. This is likely not a complete list, but represents tags which have been observed in sample images. The actual namespace prefix is &quot;MicrosoftPhoto&quot;, but ExifTool shortens this to &quot;XMP-microsoft&quot; in the family 1 group name.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CameraSerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CreatorAppID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>CreatorOpenWithUIOptions</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateAcquired</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr> <td>FlashManufacturer</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>FlashModel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LastKeywordIPTC</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>LastKeywordXMP</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>LensManufacturer</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LensModel</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>RatingPercent</td> <td class=c>string</td> <td><span class=s><span class=n>(called Rating by the spec. XMP-xmp:Rating values of 1,2,3,4 and 5 stars correspond to RatingPercent values of 1,25,50,75 and 99 respectively)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='MP1'>Microsoft MP1 Tags</a></h2> <p>Microsoft Photo 1.1 schema XMP tags which have been observed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Brightness</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>CameraModelID</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Contrast</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>ExposureCompensation</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>PanoramicStitchCameraMotion</td> <td class=c>string</td> <td><span class=s>&#39;3DRotation&#39; = 3D Rotation <br>&#39;Affine&#39; = Affine <br>&#39;Homography&#39; = Homography <br>&#39;RigidScale&#39; = Rigid Scale</span></td></tr> <tr class=b> <td>PanoramicStitchMapType</td> <td class=c>string</td> <td><span class=s>&#39;Horizontal-Cylindrical&#39; = Horizontal Cylindrical <br>&#39;Horizontal-Spherical&#39; = Horizontal Spherical <br>&#39;Perspective&#39; = Perspective <br>&#39;Vertical-Cylindrical&#39; = Vertical Cylindrical <br>&#39;Vertical-Spherical&#39; = Vertical Spherical</span></td></tr> <tr> <td>PanoramicStitchPhi0</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>PanoramicStitchPhi1</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>PanoramicStitchTheta0</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>PanoramicStitchTheta1</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>PipelineVersion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>StreamType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>WhiteBalance0</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>WhiteBalance1</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>WhiteBalance2</td> <td class=c>real</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MP'>Microsoft MP Tags</a></h2> <p>Microsoft Photo 1.2 schema XMP tags which have been observed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>RegionInfoDateRegionsValid</td> <td class=c title=' _ = Flattened'>date_</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegionInfoMP</td> <td class=c>struct</td> <td>--&gt; <a href='Microsoft.html#RegionInfo'>Microsoft RegionInfo Struct</a> <br><span class='n s'>(called RegionInfo by the spec)</span></td></tr> <tr> <td>RegionInfoRegions</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='Microsoft.html#Regions'>Microsoft Regions Struct</a></td></tr> <tr class=b> <td>RegionPersonDisplayName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(RegionInfoRegionsPersonDisplayName)</span></span></td></tr> <tr> <td>RegionPersonEmailDigest</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(RegionInfoRegionsPersonEmailDigest)</span></span></td></tr> <tr class=b> <td>RegionPersonLiveIdCID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(RegionInfoRegionsPersonLiveIdCID)</span></span></td></tr> <tr> <td>RegionPersonSourceID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(RegionInfoRegionsPersonSourceID)</span></span></td></tr> <tr class=b> <td>RegionRectangle</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(RegionInfoRegionsRectangle)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='RegionInfo'>Microsoft RegionInfo Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>DateRegionsValid</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>Regions</td> <td class=c title=' + = List'>Microsoft Regions+</td> <td>--&gt; <a href='Microsoft.html#Regions'>Microsoft Regions Struct</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Regions'>Microsoft Regions Struct</a></h2> <p>Note that PersonLiveIdCID element is called PersonLiveCID according to the Microsoft specification, but in practice their software actually writes PersonLiveIdCID, so ExifTool uses this too.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>PersonDisplayName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>PersonEmailDigest</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>PersonLiveIdCID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>PersonSourceID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Rectangle</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Stitch'>Microsoft Stitch Tags</a></h2> <p>Information found in the Microsoft custom EXIF tag 0x4748, as written by Windows Live Photo Gallery.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PanoramicStitchVersion</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>PanoramicStitchCameraMotion</td> <td class=c>int32u</td> <td><span class=s>2 = Rigid Scale <br>3 = Affine <br>4 = 3D Rotation <br>5 = Homography</span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>PanoramicStitchMapType</td> <td class=c>int32u</td> <td><span class=s>0 = Perspective <br>1 = Horizontal Cylindrical <br>2 = Horizontal Spherical <br>257 = Vertical Cylindrical <br>258 = Vertical Spherical</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>PanoramicStitchTheta0</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>PanoramicStitchTheta1</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>PanoramicStitchPhi0</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>PanoramicStitchPhi1</td> <td class=c>float</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Xtra'>Microsoft Xtra Tags</a></h2> <p>Tags extracted from the Microsoft &quot;Xtra&quot; atom of QuickTime videos. Tag ID&#39;s are not shown because some are unruly GUID&#39;s.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Abstract</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AccountName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AcquisitionTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AcquisitionTimeDay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AcquisitionTimeMonth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AcquisitionTimeYear</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AcquisitionTimeYearMonth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AcquisitionTimeYearMonthDay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AlbumArtist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AlbumArtist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AlbumArtistSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AlbumCoverURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AlbumID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AlbumIDAlbumArtist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AlbumTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AlbumTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AlbumTitleSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AlternateSourceURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Anniversary</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Artist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AssistantsName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AssistantsPhone</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Attachments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Attributes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AudioBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AudioSampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioSampleSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AuthorSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AutoSummary</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AverageLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BccAddresses</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BccNames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Beats-per-minute</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BeatsPerMinute</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BillingInformation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Birthday</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Bitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Bitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BroadcastDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BusinessAddress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BusinessCity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BusinessCountry-Region</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BusinessFax</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BusinessHomePage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BusinessPOBox</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BusinessPhone</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BusinessPostalCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BusinessStateOrProvince</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BusinessStreet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BuyNow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BuyTickets</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CDTrackEnabled</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CallLetters</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CallbackNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CameraMaker</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CameraManufacturer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CameraModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CameraModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CarPhone</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Category</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Category</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CcAddresses</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CcNames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CellPhone</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ChannelNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Channels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Channels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ChapterNum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Children</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>City</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ClientID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ClosedCaptioning</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Color</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Comments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Company</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CompanyMainPhone</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Complete</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Composer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Composers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Computer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Conductor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Conductors</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContactNames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContentDistributor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContentDistributorDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContentDistributorType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContentGroupDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContentType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Contributors</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ConversationID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Count</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Country-Region</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Creator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CurrentBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DLNAServerUDN</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DLNASourceURI</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DRMIndividualizedVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DRMKeyID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DTCPIPHost</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DTCPIPPort</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DVDID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DataRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Date</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DateAccessed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateAcquired</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DateArchived</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateCompleted</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DateCreated</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateImported</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DateLastSaved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateModified</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DatePictureTaken</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateReceived</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DateReleased</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateSent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DateVisited</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Department</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Dimensions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Director</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Directors</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DisplayArtist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Division</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DocumentID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DueDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>E-mail2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>E-mail3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>E-mailAddress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>E-mailDisplayName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>E-mailList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EncodedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EncodingTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EndDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EntryType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EpisodeName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Event</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Event</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ExifVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ExposureBias</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ExposureProgram</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>F-stop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FileAs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FileCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FileSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FileType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FileVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FirstName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FlagColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FlagStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FlashMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FocalLength35mm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Folder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FolderName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FolderPath</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FormatTag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FourCC</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FrameHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FrameWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Free-busyStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Frequency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FromAddresses</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FromNames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FullName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Gender</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>GenreID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>GivenName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HasAttachments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HasFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Hobbies</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HomeAddress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HomeCity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HomeCountry-Region</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HomeFax</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HomePOBox</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HomePhone</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HomePostalCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HomeStateOrProvince</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HomeStreet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HorizontalResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IMAddresses</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ISOSpeed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Importance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Incomplete</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>InitialKey</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>InitialKey</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Initials</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IsAttachment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IsCompleted</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IsDeleted</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IsNetworkFeed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IsOnline</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IsProtected</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IsRecurring</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IsVBR</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>JobTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Keywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Kinds</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Label</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Language</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Language</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LastName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LastPrinted</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LeadPerformer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LegalTrademarks</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LensMaker</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LensModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LibraryID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LibraryName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LightSource</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LinkStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LinkTarget</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Location</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Location</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Lyrics</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MCDI</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MailingAddress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MaxAperture</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MediaClassPrimaryID</td> <td class=c>N</td> <td><span class=s>&#39;01CD0F29-DA4E-4157-897B-6275D50C4F11&#39; = Audio (not music) <br>&#39;D1607DBC-E323-4BE2-86A1-48A42A28441E&#39; = Music <br>&#39;DB9830BD-3AB3-4FAB-8A37-1A995F7FF74B&#39; = Video <br>&#39;FCF24A76-9A57-4036-990D-E35DD8B244E1&#39; = Other (not audio or video)</span></td></tr> <tr> <td>MediaClassSecondaryID</td> <td class=c>N</td> <td><span class=s>&#39;00000000-0000-0000-0000-000000000000&#39; = Unknown Content <br>&#39;00033368-5009-4AC3-A820-5D2D09A4E7C1&#39; = Sound Clip from Game <br>&#39;0B710218-8C0C-475E-AF73-4C41C0C8F8CE&#39; = Home Video from Pictures <br>&#39;1B824A67-3F80-4E3E-9CDE-F7361B0F5F1B&#39; = Talk Show <br>&#39;1FE2E091-4E1E-40CE-B22D-348C732E0B10&#39; = Video News <br>&#39;3A172A13-2BD9-4831-835B-114F6A95943F&#39; = Spoken Word <br>&#39;44051B5B-B103-4B5C-92AB-93060A9463F0&#39; = Corporate Video <br>&#39;6677DB9B-E5A0-4063-A1AD-ACEB52840CF1&#39; = Audio News <br>&#39;A9B87FC9-BD47-4BF0-AC4F-655B89F7D868&#39; = Feature Film <br>&#39;B76628F4-300D-443D-9CB5-01C285109DAF&#39; = Home Movie <br>&#39;BA7F258A-62F7-47A9-B21F-4651C42A000E&#39; = TV Show <br>&#39;D6DE1D88-C77C-4593-BFBC-9C61E8C373E3&#39; = Web-based Video <br>&#39;E0236BEB-C281-4EDE-A36D-7AF76A3D45B5&#39; = Audio Book <br>&#39;E3E689E2-BA8C-4330-96DF-A0EEEFFA6876&#39; = Music Video <br>&#39;F24FF731-96FC-4D0F-A2F5-5A3483682B1A&#39; = Song from Game</span></td></tr> <tr class=b> <td>MediaContentTypes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MediaCreated</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MediaOriginalBroadcastDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MediaOriginalChannel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MediaStationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MediaType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MeteringMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MiddleName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Mileage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ModifiedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Mood</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Mood</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MoreInfo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Nickname</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OfficeLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OfflineAvailability</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OfflineStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OptionalAttendeeAddresses</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OptionalAttendees</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OrganizerAddress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OrganizerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Orientation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OriginalAlbumTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OriginalArtist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OriginalLyricist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OtherAddress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OtherCity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OtherCountry-Region</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OtherPOBox</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OtherPostalCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OtherStateOrProvince</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OtherStreet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Owner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>POBox</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Pager</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Pages</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ParentalRating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ParentalRating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ParentalRatingReason</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PartOfSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PartOfSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PartOfSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Participants</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Path</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PeakValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PerceivedType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Period</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Period</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PersonalTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PixelAspectRatioX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PixelAspectRatioY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PlaylistIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PostalCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PrimaryE-mail</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PrimaryPhone</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Priority</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Producer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Producers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProductName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProductVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Profession</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProgramDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProgramMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProgramName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Project</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Protected</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProtectionType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Provider</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Provider</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProviderLogoURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProviderRating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProviderStyle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProviderURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Publisher</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Publisher</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RadioBand</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RadioFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Rating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RatingOrg</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ReadStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RecordingTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RecordingTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RecordingTimeDay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RecordingTimeMonth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RecordingTimeYear</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RecordingTimeYearMonth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RecordingTimeYearMonthDay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ReleaseDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ReleaseDateDay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ReleaseDateMonth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ReleaseDateYear</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ReleaseDateYearMonth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ReleaseDateYearMonthDay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ReminderTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RequestState</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RequiredAttendeeAddresses</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RequiredAttendees</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Rerun</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Resources</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SAP</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Saturation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SearchRanking</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SenderAddress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SenderName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Sensitivity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ShadowFilePath</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Shared</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SharedUserRating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SharedWith</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Size</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Slides</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Source</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SourceURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SpaceFree</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SpaceUsed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Spouse</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StartDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StateOrProvince</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StationCallSign</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Status</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Status</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Store</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Street</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Subject</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Subject</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SubjectDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SubscriptionContentID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Subtitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Subtitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SubtitleDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Suffix</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Summary</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Sync01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Sync02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Sync03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Sync04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Sync05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Sync06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Sync07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Sync08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Sync09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Sync10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Sync11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Sync12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Sync13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Sync14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Sync15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Sync16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SyncOnly</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SyncState</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TTY-TTDPhone</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TaskOwner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Telex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Temporary</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TitleNum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TitleSortOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ToAddresses</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ToDoTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ToNames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TotalBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TotalDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TotalEditingTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TotalFileSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TotalSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TrackNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TrackNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TrackingID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Type</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Type</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>URL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UniqueFileIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Untitled0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Untitled1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Untitled2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UserCustom1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UserCustom2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UserEffectiveRating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UserLastPlayedTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UserPlayCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UserPlaycountAfternoon</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UserPlaycountEvening</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UserPlaycountMorning</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UserPlaycountNight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UserPlaycountWeekday</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UserPlaycountWeekend</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UserRating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UserServiceRating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UserWebURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VerticalResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoCompression</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoFrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>WMCollectionGroupID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>WMCollectionID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>WMContentID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>WMShadowFileSourceDRMType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>WMShadowFileSourceFileType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Webpage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>WhiteBalance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>WindowsFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>WordCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Writer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Writers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Year</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Year</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Oct 23, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/MIE.html���������������������������������������������������������000644 �000765 �000024 �00000070367 12525112566 020350� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>MIE Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>MIE Tags</h2> <p>MIE is a flexible format which may be used as a stand-alone meta information format, for encapsulation of other files and information, or as a trailer appended to other file formats. The tables below represent currently defined MIE tags, however ExifTool will also extract any other information present in a MIE file.</p> <p>When writing MIE information, some special features are supported:</p> <p>1) String values may be written as ASCII (ISO 8859-1) or UTF-8. ExifTool automatically detects the presence of wide characters and treats the string appropriately. Internally, UTF-8 text may be converted to UTF-16 or UTF-32 and stored in this format in the file if it is more compact.</p> <p>2) All MIE string-value tags support localized text. Localized values are written by adding a language/country code to the tag name in the form <code>TAG-xx_YY</code>, where <code>TAG</code> is the tag name, <code>xx</code> is a 2-character lower case ISO 639-1 language code, and <code>YY</code> is a 2-character upper case ISO 3166-1 alpha 2 country code (eg. <code>Title-en_US</code>). But as usual, the user interface is case-insensitive, and ExifTool will write the correct case to the file.</p> <p>3) Some numerical MIE tags allow units of measurement to be specified. For these tags, units may be added in brackets immediately following the value (eg. <code>55(mi/h)</code>). If no units are specified, the default units are written.</p> <p>See <a href="../MIE1.1-20070121.pdf">MIE1.1-20070121.pdf</a> for the official MIE specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'0Type'</td> <td>SubfileType</td> <td class=c>string</td> <td><span class=s><span class=n>(the capitalized common extension for this type of file. If the extension has a dot-3 abbreviation, then the longer version is used here. For instance, JPEG and TIFF are used, not JPG and TIF)</span></span></td></tr> <tr class=b> <td>'0Vers'</td> <td>MIEVersion</td> <td class=c>string</td> <td><span class=s><span class=n>(version 1.1 is assumed if not specified)</span></span></td></tr> <tr> <td>'1Directory'</td> <td>SubfileDirectory</td> <td class=c>string</td> <td><span class=s><span class=n>(original directory for the file)</span></span></td></tr> <tr class=b> <td>'1Name'</td> <td>SubfileName</td> <td class=c>string</td> <td><span class=s><span class=n>(the file name, including extension if it exists)</span></span></td></tr> <tr> <td>'2MIME'</td> <td>SubfileMIMEType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Meta'</td> <td>Meta</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Meta'>MIE Meta Tags</a></td></tr> <tr> <td>'data'</td> <td>SubfileData</td> <td class=c>undef</td> <td><span class=s><span class=n>(the subfile data)</span></span></td></tr> <tr class=b> <td>'rsrc'</td> <td>SubfileResource</td> <td class=c>undef</td> <td><span class=s><span class=n>(subfile resource fork if it exists)</span></span></td></tr> <tr> <td>'zmd5'</td> <td>MD5Digest</td> <td class=c>string</td> <td><span class=s><span class=n>(16-byte MD5 digest written in binary form or as a 32-character hex-encoded ASCII string. Value is an MD5 digest of the entire 0MIE group as it would be with the digest value itself set to all null bytes)</span></span></td></tr> <tr class=b> <td>'zmie'</td> <td>TrailerSignature</td> <td class=c>undef</td> <td><span class=s><span class=n>(used as the last element in the main &quot;0MIE&quot; group to identify a MIE trailer when appended to another type of file. ExifTool will create this tag if set to any value, but always with an empty data block)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Meta'>MIE Meta Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Audio'</td> <td>Audio</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Audio'>MIE Audio Tags</a></td></tr> <tr class=b> <td>'Camera'</td> <td>Camera</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Camera'>MIE Camera Tags</a></td></tr> <tr> <td>'Document'</td> <td>Document</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Doc'>MIE Doc Tags</a></td></tr> <tr class=b> <td>'EXIF'</td> <td>EXIF</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> <tr> <td>'Geo'</td> <td>Geo</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Geo'>MIE Geo Tags</a></td></tr> <tr class=b> <td>'ICCProfile'</td> <td>ICC_Profile</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> <tr> <td>'ID3'</td> <td>ID3</td> <td class=c>-</td> <td>--&gt; <a href='ID3.html'>ID3 Tags</a></td></tr> <tr class=b> <td>'IPTC'</td> <td>IPTC</td> <td class=c>-</td> <td>--&gt; <a href='IPTC.html'>IPTC Tags</a></td></tr> <tr> <td>'Image'</td> <td>Image</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Image'>MIE Image Tags</a></td></tr> <tr class=b> <td>'MakerNotes'</td> <td>MakerNotes</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#MakerNotes'>MIE MakerNotes Tags</a></td></tr> <tr> <td>'Preview'</td> <td>Preview</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Preview'>MIE Preview Tags</a></td></tr> <tr class=b> <td>'Thumbnail'</td> <td>Thumbnail</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Thumbnail'>MIE Thumbnail Tags</a></td></tr> <tr> <td>'Video'</td> <td>Video</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Video'>MIE Video Tags</a></td></tr> <tr class=b> <td>'XMP'</td> <td>XMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Audio'>MIE Audio Tags</a></h2> <p>For the Audio group (and any other group containing a &#39;data&#39; element), tags refer to the contained data if present, otherwise they refer to the main SubfileData. The <code>0Type</code> and <code>1Name</code> elements should exist only if <code>data</code> is present.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'0Type'</td> <td>RelatedAudioFileType</td> <td class=c>string</td> <td><span class=s><span class=n>(MP3 if not specified)</span></span></td></tr> <tr class=b> <td>'1Name'</td> <td>RelatedAudioFileName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Channels'</td> <td>Channels</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Compression'</td> <td>AudioCompression</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Duration'</td> <td>Duration</td> <td class=c title=' ~ = Writable only with -n'>rational64u~</td> <td>&nbsp;</td></tr> <tr class=b> <td>'SampleBits'</td> <td>SampleBits</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td>'SampleRate'</td> <td>SampleRate</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td>'data'</td> <td>RelatedAudioFile</td> <td class=c>undef</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Camera'>MIE Camera Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Brightness'</td> <td>Brightness</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ColorBalance'</td> <td>ColorBalance</td> <td class=c>rational64u[3]</td> <td><span class=s><span class=n>(RGB scaling factors)</span></span></td></tr> <tr> <td>'ColorTemperature'</td> <td>ColorTemperature</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Contrast'</td> <td>Contrast</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td>'DigitalZoom'</td> <td>DigitalZoom</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ExposureComp'</td> <td>ExposureCompensation</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td>'ExposureMode'</td> <td>ExposureMode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ExposureTime'</td> <td>ExposureTime</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td>'FirmwareVersion'</td> <td>FirmwareVersion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Flash'</td> <td>Flash</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Flash'>MIE Flash Tags</a></td></tr> <tr> <td>'FocusMode'</td> <td>FocusMode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ISO'</td> <td>ISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td>'ISOSetting'</td> <td>ISOSetting</td> <td class=c>int16u</td> <td><span class=s><span class=n>(0 = Auto, otherwise manual ISO speed setting)</span></span></td></tr> <tr class=b> <td>'ImageNumber'</td> <td>ImageNumber</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td>'ImageQuality'</td> <td>ImageQuality</td> <td class=c>string</td> <td><span class=s><span class=n>(Economy, Normal, Fine, Super Fine or Raw)</span></span></td></tr> <tr class=b> <td>'ImageStabilization'</td> <td>ImageStabilization</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td>'Lens'</td> <td>Lens</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Lens'>MIE Lens Tags</a></td></tr> <tr class=b> <td>'Make'</td> <td>Make</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'MeasuredEV'</td> <td>MeasuredEV</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Model'</td> <td>Model</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Orientation'</td> <td>Orientation</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Orient'>MIE Orient Tags</a></td></tr> <tr class=b> <td>'OwnerName'</td> <td>OwnerName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Saturation'</td> <td>Saturation</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td>'SensorSize'</td> <td>SensorSize</td> <td class=c>rational64u[2]</td> <td><span class=s><span class=n>(width and height of active sensor area in mm)</span></span></td></tr> <tr> <td>'SerialNumber'</td> <td>SerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Sharpness'</td> <td>Sharpness</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td>'ShootingMode'</td> <td>ShootingMode</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Flash'>MIE Flash Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'ExposureComp'</td> <td>FlashExposureComp</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Fired'</td> <td>FlashFired</td> <td class=c>int8u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td>'GuideNumber'</td> <td>FlashGuideNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Make'</td> <td>FlashMake</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Mode'</td> <td>FlashMode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Model'</td> <td>FlashModel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'SerialNumber'</td> <td>FlashSerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Type'</td> <td>FlashType</td> <td class=c>string</td> <td><span class=s><span class=n>(&quot;Internal&quot; or &quot;External&quot;)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Lens'>MIE Lens Tags</a></h2> <p>All recorded lens parameters (focal length, aperture, etc) include the effects of the extender if present.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Extender'</td> <td>Extender</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Extender'>MIE Extender Tags</a></td></tr> <tr class=b> <td>'FNumber'</td> <td>FNumber</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td>'FocalLength'</td> <td>FocalLength</td> <td class=c>rational64u</td> <td><span class=s><span class=n>(all focal lengths in mm)</span></span></td></tr> <tr class=b> <td>'FocusDistance'</td> <td>FocusDistance</td> <td class=c>rational64u</td> <td><span class=s><span class=n>(&#39;m&#39; unless &#39;ft&#39; specified)</span></span></td></tr> <tr> <td>'Make'</td> <td>LensMake</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'MaxAperture'</td> <td>MaxAperture</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td>'MaxApertureAtMaxFocal'</td> <td>MaxApertureAtMaxFocal</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td>'MaxFocalLength'</td> <td>MaxFocalLength</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td>'MinAperture'</td> <td>MinAperture</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td>'MinFocalLength'</td> <td>MinFocalLength</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td>'Model'</td> <td>LensModel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'OpticalZoom'</td> <td>OpticalZoom</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td>'SerialNumber'</td> <td>LensSerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Extender'>MIE Extender Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Magnification'</td> <td>ExtenderMagnification</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Make'</td> <td>ExtenderMake</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Model'</td> <td>ExtenderModel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'SerialNumber'</td> <td>ExtenderSerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Orient'>MIE Orient Tags</a></h2> <p>These tags describe the camera orientation.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Azimuth'</td> <td>Azimuth</td> <td class=c>rational64s</td> <td><span class=s><span class=n>(&#39;deg&#39; CW from true north unless &#39;deg{mag}&#39; specified)</span></span></td></tr> <tr class=b> <td>'Declination'</td> <td>Declination</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td>'Elevation'</td> <td>Elevation</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td>'RightAscension'</td> <td>RightAscension</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td>'Rotation'</td> <td>Rotation</td> <td class=c>rational64s</td> <td><span class=s><span class=n>(CW rotation angle of camera about lens axis)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Doc'>MIE Doc Tags</a></h2> <p>Information describing the main document, image or file.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Author'</td> <td>Author</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Comment'</td> <td>Comment</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Contributors'</td> <td>Contributors</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Copyright'</td> <td>Copyright</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'CreateDate'</td> <td>CreateDate</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'EMail'</td> <td>Email</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Keywords'</td> <td>Keywords</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ModifyDate'</td> <td>ModifyDate</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'OriginalDate'</td> <td>DateTimeOriginal</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Phone'</td> <td>PhoneNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'References'</td> <td>References</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Software'</td> <td>Software</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Title'</td> <td>Title</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'URL'</td> <td>URL</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Geo'>MIE Geo Tags</a></h2> <p>Information related to geographic location.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Address'</td> <td>Address</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'City'</td> <td>City</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Country'</td> <td>Country</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'GPS'</td> <td>GPS</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#GPS'>MIE GPS Tags</a></td></tr> <tr> <td>'PostalCode'</td> <td>PostalCode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'State'</td> <td>State</td> <td class=c>string</td> <td><span class=s><span class=n>(state or province)</span></span></td></tr> <tr> <td>'UTM'</td> <td>UTM</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#UTM'>MIE UTM Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='GPS'>MIE GPS Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Altitude'</td> <td>GPSAltitude</td> <td class=c>rational64s</td> <td><span class=s><span class=n>(&#39;m&#39; above sea level unless &#39;ft&#39; specified)</span></span></td></tr> <tr class=b> <td>'Bearing'</td> <td>GPSDestBearing</td> <td class=c>rational64s</td> <td><span class=s><span class=n>(&#39;deg&#39; CW from true north unless &#39;deg{mag}&#39; specified)</span></span></td></tr> <tr> <td>'DateTime'</td> <td>GPSDateTime</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Datum'</td> <td>GPSMapDatum</td> <td class=c>string</td> <td><span class=s><span class=n>(WGS-84 assumed if not specified)</span></span></td></tr> <tr> <td>'Differential'</td> <td>GPSDifferential</td> <td class=c>int8u</td> <td><span class=s>0 = No Correction <br>1 = Differential Corrected</span></td></tr> <tr class=b> <td>'Distance'</td> <td>GPSDestDistance</td> <td class=c>rational64s</td> <td><span class=s><span class=n>(&#39;km&#39; unless &#39;mi&#39; or &#39;nmi&#39; specified)</span></span></td></tr> <tr> <td>'Heading'</td> <td>GPSTrack</td> <td class=c>rational64s</td> <td><span class=s><span class=n>(&#39;deg&#39; CW from true north unless &#39;deg{mag}&#39; specified)</span></span></td></tr> <tr class=b> <td>'Latitude'</td> <td>GPSLatitude</td> <td class=c>rational64s[n]</td> <td><span class=s><span class=n>(1 to 3 numbers: degrees, minutes then seconds. South latitudes are stored as all negative numbers, but may be entered as positive numbers with a trailing &#39;S&#39; for convenience. For example, these are all equivalent: &quot;-40 -30&quot;, &quot;-40.5&quot;, &quot;40 30 0.00 S&quot;)</span></span></td></tr> <tr> <td>'Longitude'</td> <td>GPSLongitude</td> <td class=c>rational64s[n]</td> <td><span class=s><span class=n>(1 to 3 numbers: degrees, minutes then seconds. West longitudes are negative, but may be entered as positive numbers with a trailing &#39;W&#39;)</span></span></td></tr> <tr class=b> <td>'MeasureMode'</td> <td>GPSMeasureMode</td> <td class=c>int8u</td> <td><span class=s>2 = 2-D <br>3 = 3-D</span></td></tr> <tr> <td>'Satellites'</td> <td>GPSSatellites</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Speed'</td> <td>GPSSpeed</td> <td class=c>rational64s</td> <td><span class=s><span class=n>(&#39;km/h&#39; unless &#39;mi/h&#39;, &#39;m/s&#39; or &#39;kn&#39; specified)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='UTM'>MIE UTM Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Datum'</td> <td>UTMMapDatum</td> <td class=c>string</td> <td><span class=s><span class=n>(WGS-84 assumed if not specified)</span></span></td></tr> <tr class=b> <td>'Easting'</td> <td>UTMEasting</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Northing'</td> <td>UTMNorthing</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Zone'</td> <td>UTMZone</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Image'>MIE Image Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'0Type'</td> <td>FullSizeImageType</td> <td class=c>string</td> <td><span class=s><span class=n>(JPEG if not specified)</span></span></td></tr> <tr class=b> <td>'1Name'</td> <td>FullSizeImageName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'BitDepth'</td> <td>BitDepth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ColorSpace'</td> <td>ColorSpace</td> <td class=c>string</td> <td><span class=s><span class=n>(standard ColorSpace values are &quot;sRGB&quot; and &quot;Adobe RGB&quot;)</span></span></td></tr> <tr> <td>'Components'</td> <td>ComponentsConfiguration</td> <td class=c>string</td> <td><span class=s><span class=n>(string composed of R, G, B, Y, Cb and Cr)</span></span></td></tr> <tr class=b> <td>'Compression'</td> <td>CompressionRatio</td> <td class=c>rational32u</td> <td>&nbsp;</td></tr> <tr> <td>'ImageSize'</td> <td>ImageSize</td> <td class=c>int16u[n]</td> <td><span class=s><span class=n>(2 or 3 values, for number of XY or XYZ pixels)</span></span></td></tr> <tr class=b> <td>'Resolution'</td> <td>Resolution</td> <td class=c>rational64u[n]</td> <td><span class=s><span class=n>(1 to 3 values. A single value for equal resolution in all directions, or separate X, Y and Z values if necessary. Units are &#39;/in&#39; unless &#39;/cm&#39;, &#39;/deg&#39;, &#39;/arcmin&#39;, &#39;/arcsec&#39; or &#39;&#39; specified)</span></span></td></tr> <tr> <td>'data'</td> <td>FullSizeImage</td> <td class=c>undef</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MakerNotes'>MIE MakerNotes Tags</a></h2> <p>MIE maker notes are contained within separate groups for each manufacturer to avoid name conflicts.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Canon'</td> <td>Canon</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Canon'>MIE Canon Tags</a></td></tr> <tr class=b> <td>'Casio'</td> <td>Casio</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Unknown'>MIE Unknown Tags</a></td></tr> <tr> <td>'FujiFilm'</td> <td>FujiFilm</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Unknown'>MIE Unknown Tags</a></td></tr> <tr class=b> <td>'Kodak'</td> <td>Kodak</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Unknown'>MIE Unknown Tags</a></td></tr> <tr> <td>'KonicaMinolta'</td> <td>KonicaMinolta</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Unknown'>MIE Unknown Tags</a></td></tr> <tr class=b> <td>'Nikon'</td> <td>Nikon</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Unknown'>MIE Unknown Tags</a></td></tr> <tr> <td>'Olympus'</td> <td>Olympus</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Unknown'>MIE Unknown Tags</a></td></tr> <tr class=b> <td>'Panasonic'</td> <td>Panasonic</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Unknown'>MIE Unknown Tags</a></td></tr> <tr> <td>'Pentax'</td> <td>Pentax</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Unknown'>MIE Unknown Tags</a></td></tr> <tr class=b> <td>'Ricoh'</td> <td>Ricoh</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Unknown'>MIE Unknown Tags</a></td></tr> <tr> <td>'Sigma'</td> <td>Sigma</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Unknown'>MIE Unknown Tags</a></td></tr> <tr class=b> <td>'Sony'</td> <td>Sony</td> <td class=c>-</td> <td>--&gt; <a href='MIE.html#Unknown'>MIE Unknown Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Canon'>MIE Canon Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'VRD'</td> <td>CanonVRD</td> <td class=c>-</td> <td>--&gt; <a href='CanonVRD.html'>CanonVRD Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Unknown'>MIE Unknown Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='Preview'>MIE Preview Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'0Type'</td> <td>PreviewImageType</td> <td class=c>string</td> <td><span class=s><span class=n>(JPEG if not specified)</span></span></td></tr> <tr class=b> <td>'1Name'</td> <td>PreviewImageName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'ImageSize'</td> <td>PreviewImageSize</td> <td class=c>int16u[n]</td> <td><span class=s><span class=n>(2 or 3 values, for number of XY or XYZ pixels)</span></span></td></tr> <tr class=b> <td>'data'</td> <td>PreviewImage</td> <td class=c>undef</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Thumbnail'>MIE Thumbnail Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'0Type'</td> <td>ThumbnailImageType</td> <td class=c>string</td> <td><span class=s><span class=n>(JPEG if not specified)</span></span></td></tr> <tr class=b> <td>'1Name'</td> <td>ThumbnailImageName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'ImageSize'</td> <td>ThumbnailImageSize</td> <td class=c>int16u[n]</td> <td><span class=s><span class=n>(2 or 3 values, for number of XY or XYZ pixels)</span></span></td></tr> <tr class=b> <td>'data'</td> <td>ThumbnailImage</td> <td class=c>undef</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Video'>MIE Video Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'0Type'</td> <td>RelatedVideoFileType</td> <td class=c>string</td> <td><span class=s><span class=n>(MOV if not specified)</span></span></td></tr> <tr class=b> <td>'1Name'</td> <td>RelatedVideoFileName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Codec'</td> <td>Codec</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Duration'</td> <td>Duration</td> <td class=c title=' ~ = Writable only with -n'>rational64u~</td> <td>&nbsp;</td></tr> <tr> <td>'data'</td> <td>RelatedVideoFile</td> <td class=c>undef</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised May 14, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/MIFF.html��������������������������������������������������������000644 �000765 �000024 �00000010040 11624200556 020431� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>MIFF Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>MIFF Tags</h2> <p>The MIFF (Magick Image File Format) format allows aribrary tag names to be used. Only the standard tag names are listed below, however ExifTool will decode any tags found in the image.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'background-color'</td> <td>BackgroundColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'blue-primary'</td> <td>BluePrimary</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'border-color'</td> <td>BorderColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'class'</td> <td>Class</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'colors'</td> <td>Colors</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'colorspace'</td> <td>ColorSpace</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'columns'</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'compression'</td> <td>Compression</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'delay'</td> <td>Delay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'depth'</td> <td>Depth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'dispose'</td> <td>Dispose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'gamma'</td> <td>Gamma</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'green-primary'</td> <td>GreenPrimary</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'id'</td> <td>ID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'iterations'</td> <td>Iterations</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'label'</td> <td>Label</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'matt-color'</td> <td>MattColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'matte'</td> <td>Matte</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'montage'</td> <td>Montage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'packets'</td> <td>Packets</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'page'</td> <td>Page</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'profile-APP1'</td> <td>APP1_Profile</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a> <br>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> <tr> <td>'profile-exif'</td> <td>EXIF_Profile</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> <tr class=b> <td>'profile-icc'</td> <td>ICC_Profile</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> <tr> <td>'profile-iptc'</td> <td>IPTC_Profile</td> <td class=c>-</td> <td>--&gt; <a href='Photoshop.html'>Photoshop Tags</a></td></tr> <tr class=b> <td>'profile-xmp'</td> <td>XMP_Profile</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> <tr> <td>'red-primary'</td> <td>RedPrimary</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'rendering-intent'</td> <td>RenderingIntent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'resolution'</td> <td>Resolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'rows'</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'scene'</td> <td>Scene</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'signature'</td> <td>Signature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'units'</td> <td>Units</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'white-point'</td> <td>WhitePoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Aug 21, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Minolta.html�����������������������������������������������������000644 �000765 �000024 �00000244722 12623347003 021332� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Minolta Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Minolta Tags</h2> <p> These tags are used by Minolta, Konica/Minolta as well as some Sony cameras. Minolta doesn&#39;t make things easy for decoders because the meaning of some tags and the location where some information is stored is different for different camera models. (Take MinoltaQuality for example, which may be located in 5 different places.) </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>MakerNoteVersion</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>MinoltaCameraSettingsOld</td> <td class=c>-</td> <td>--&gt; <a href='Minolta.html#CameraSettings'>Minolta CameraSettings Tags</a></td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>MinoltaCameraSettings</td> <td class=c>-</td> <td>--&gt; <a href='Minolta.html#CameraSettings'>Minolta CameraSettings Tags</a></td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>MinoltaCameraSettings7D</td> <td class=c>-</td> <td>--&gt; <a href='Minolta.html#CameraSettings7D'>Minolta CameraSettings7D Tags</a></td></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>CameraInfoA100</td> <td class=c>-</td> <td>--&gt; <a href='Minolta.html#CameraInfoA100'>Minolta CameraInfoA100 Tags</a></td></tr> <tr class=b> <td title='0x0018 = 24'>0x0018</td> <td>ISInfoA100 <br>ImageStabilization</td> <td class=c>-<br>N</td> <td>--&gt; <a href='Minolta.html#ISInfoA100'>Minolta ISInfoA100 Tags</a> <br><span class=n>(a block of binary data which exists in DiMAGE A2 (and A1/X1?) images only if image stabilization is enabled)</span></td></tr> <tr> <td title='0x0020 = 32'>0x0020</td> <td>WBInfoA100</td> <td class=c>-</td> <td>--&gt; <a href='Minolta.html#WBInfoA100'>Minolta WBInfoA100 Tags</a> <br><span class='n s'>(currently decoded only for the Sony A100)</span></td></tr> <tr class=b> <td title='0x0040 = 64'>0x0040</td> <td>CompressedImageSize</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0081 = 129'>0x0081</td> <td>PreviewImage</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0088 = 136'>0x0088</td> <td>PreviewImageStart</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr> <td title='0x0089 = 137'>0x0089</td> <td>PreviewImageLength</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0100 = 256'>0x0100</td> <td>SceneMode</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = Standard <br>1 = Portrait <br>2 = Text <br>3 = Night Scene <br>4 = Sunset <br>5 = Sports <br>6 = Landscape <br>7 = Night Portrait <br>8 = Macro <br>9 = Super Macro <br>16 = Auto <br>17 = Night View/Portrait <br>18 = Sweep Panorama <br>19 = Handheld Night Shot <br>20 = Anti Motion Blur <br>21 = Cont. Priority AE <br>22 = Auto+ <br>23 = 3D Sweep Panorama <br>24 = Superior Auto <br>25 = High Sensitivity <br>26 = Fireworks <br>27 = Food <br>28 = Pet <br>33 = HDR <br>65535 = n/a</td></tr></table> </td></tr> <tr> <td title='0x0101 = 257'>0x0101</td> <td>ColorMode</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = Natural color <br>1 = Black &amp; White <br>2 = Vivid color <br>3 = Solarization <br>4 = Adobe RGB <br>5 = Sepia <br>9 = Natural <br>12 = Portrait</td><td>&nbsp;&nbsp;</td> <td>13 = Natural sRGB <br>14 = Natural+ sRGB <br>15 = Landscape <br>16 = Evening <br>17 = Night Scene <br>18 = Night Portrait <br>132 = Embed Adobe RGB</td></tr></table> <span class=s><span class=n>(Sony models)</span></span><table class=cols><tr> <td>0 = Standard <br>1 = Vivid <br>2 = Portrait <br>3 = Landscape <br>4 = Sunset <br>5 = Night View/Portrait <br>6 = B&amp;W <br>7 = Adobe RGB <br>12 = Neutral <br>13 = Clear <br>14 = Deep</td><td>&nbsp;&nbsp;</td> <td>15 = Light <br>16 = Autumn Leaves <br>17 = Sepia <br>100 = Neutral <br>101 = Clear <br>102 = Deep <br>103 = Light <br>104 = Night View <br>105 = Autumn Leaves <br>4294967295 = n/a</td></tr></table> </td></tr> <tr class=b> <td title='0x0102 = 258'>0x0102</td> <td>MinoltaQuality</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = Raw <br>1 = Super Fine <br>2 = Fine</td><td>&nbsp;&nbsp;</td> <td>3 = Standard <br>4 = Economy <br>5 = Extra fine</td></tr></table> </td></tr> <tr> <td title='0x0103 = 259'>0x0103</td> <td>MinoltaQuality <br>MinoltaImageSize</td> <td class=c>int32u<br>int32u</td> <td><span class=s><span class=n>(quality for DiMAGE A2/7Hi)</span></span><table class=cols><tr> <td>0 = Raw <br>1 = Super Fine <br>2 = Fine</td><td>&nbsp;&nbsp;</td> <td>3 = Standard <br>4 = Economy <br>5 = Extra fine</td></tr></table> <span class=s><span class=n>(image size for other models except A200)</span></span><table class=cols><tr> <td>1 = 1600x1200 <br>2 = 1280x960 <br>3 = 640x480</td><td>&nbsp;&nbsp;</td> <td>5 = 2560x1920 <br>6 = 2272x1704 <br>7 = 2048x1536</td></tr></table> </td></tr> <tr class=b> <td title='0x0104 = 260'>0x0104</td> <td>FlashExposureComp</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0105 = 261'>0x0105</td> <td>Teleconverter</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0x0 = None <br>0x4 = Minolta/Sony AF 1.4x APO (D) (0x04) <br>0x5 = Minolta/Sony AF 2x APO (D) (0x05) <br>0x48 = Minolta/Sony AF 2x APO (D) <br>0x50 = Minolta AF 2x APO II <br>0x60 = Minolta AF 2x APO <br>0x88 = Minolta/Sony AF 1.4x APO (D) <br>0x90 = Minolta AF 1.4x APO II <br>0xa0 = Minolta AF 1.4x APO</td></tr></table> </td></tr> <tr class=b> <td title='0x0107 = 263'>0x0107</td> <td>ImageStabilization</td> <td class=c>int32u</td> <td><span class=s>1 = Off <br>5 = On</span></td></tr> <tr> <td title='0x0109 = 265'>0x0109</td> <td>RawAndJpgRecording</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x010a = 266'>0x010a</td> <td>ZoneMatching</td> <td class=c>int32u</td> <td><span class=s>0 = ISO Setting Used <br>1 = High Key <br>2 = Low Key</span></td></tr> <tr> <td title='0x010b = 267'>0x010b</td> <td>ColorTemperature</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x010c = 268'>0x010c</td> <td>LensType</td> <td class=c>int32u</td> <td>--&gt; <a href='Minolta.html#LensType'>Minolta LensType Values</a></td></tr> <tr> <td title='0x0111 = 273'>0x0111</td> <td>ColorCompensationFilter</td> <td class=c>int32s</td> <td><span class=s><span class=n>(ranges from -2 for green to +2 for magenta)</span></span></td></tr> <tr class=b> <td title='0x0112 = 274'>0x0112</td> <td>WhiteBalanceFineTune</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0113 = 275'>0x0113</td> <td>ImageStabilization</td> <td class=c>int32u</td> <td><span class=s><span class=n>(valid for Sony A100 only)</span> <br>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x0114 = 276'>0x0114</td> <td>MinoltaCameraSettings5D <br>CameraSettingsA100</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Minolta.html#CameraSettings5D'>Minolta CameraSettings5D Tags</a> <br>--&gt; <a href='Minolta.html#CameraSettingsA100'>Minolta CameraSettingsA100 Tags</a></td></tr> <tr> <td title='0x0115 = 277'>0x0115</td> <td>WhiteBalance</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0x0 = Auto <br>0x1 = Color Temperature/Color Filter <br>0x10 = Daylight <br>0x20 = Cloudy <br>0x30 = Shade <br>0x40 = Tungsten <br>0x50 = Flash <br>0x60 = Fluorescent <br>0x70 = Custom</td></tr></table> </td></tr> <tr class=b> <td title='0x0e00 = 3584'>0x0e00</td> <td>PrintIM</td> <td class=c>-</td> <td>--&gt; <a href='PrintIM.html'>PrintIM Tags</a></td></tr> <tr> <td title='0x0f00 = 3840'>0x0f00</td> <td>MinoltaCameraSettings2</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LensType'>Minolta LensType Values</a></h2> <p>Decimal values have been added to differentiate lenses which would otherwise have the same LensType, and are used by the Composite LensID tag when attempting to identify the specific lens model. &quot;New&quot; or &quot;II&quot; appear in brackets if the original version of the lens has the same LensType. Special logic is employed to identify the attached lens when a Metabones Canon EF adapter is used.</p> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>LensType</th></tr> <tr><td>0</td><td>= Minolta AF 28-85mm F3.5-4.5 New</td> </tr><tr><td>1</td><td>= Minolta AF 80-200mm F2.8 HS-APO G</td> </tr><tr><td>2</td><td>= Minolta AF 28-70mm F2.8 G</td> </tr><tr><td>3</td><td>= Minolta AF 28-80mm F4-5.6</td> </tr><tr><td>4</td><td>= Minolta AF 85mm F1.4G</td> </tr><tr><td>5</td><td>= Minolta AF 35-70mm F3.5-4.5 [II]</td> </tr><tr><td>6</td><td>= Minolta AF 24-85mm F3.5-4.5 [New]</td> </tr><tr><td>7</td><td>= Minolta AF 100-300mm F4.5-5.6 APO [New] or 100-400mm or Sigma Lens</td> </tr><tr><td>7.1</td><td>= Minolta AF 100-400mm F4.5-6.7 APO</td> </tr><tr><td>7.2</td><td>= Sigma AF 100-300mm F4 EX DG IF</td> </tr><tr><td>8</td><td>= Minolta AF 70-210mm F4.5-5.6 [II]</td> </tr><tr><td>9</td><td>= Minolta AF 50mm F3.5 Macro</td> </tr><tr><td>10</td><td>= Minolta AF 28-105mm F3.5-4.5 [New]</td> </tr><tr><td>11</td><td>= Minolta AF 300mm F4 HS-APO G</td> </tr><tr><td>12</td><td>= Minolta AF 100mm F2.8 Soft Focus</td> </tr><tr><td>13</td><td>= Minolta AF 75-300mm F4.5-5.6 (New or II)</td> </tr><tr><td>14</td><td>= Minolta AF 100-400mm F4.5-6.7 APO</td> </tr><tr><td>15</td><td>= Minolta AF 400mm F4.5 HS-APO G</td> </tr><tr><td>16</td><td>= Minolta AF 17-35mm F3.5 G</td> </tr><tr><td>17</td><td>= Minolta AF 20-35mm F3.5-4.5</td> </tr><tr><td>18</td><td>= Minolta AF 28-80mm F3.5-5.6 II</td> </tr><tr><td>19</td><td>= Minolta AF 35mm F1.4 G</td> </tr><tr><td>20</td><td>= Minolta/Sony 135mm F2.8 [T4.5] STF</td> </tr><tr><td>22</td><td>= Minolta AF 35-80mm F4-5.6 II</td> </tr><tr><td>23</td><td>= Minolta AF 200mm F4 Macro APO G</td> </tr><tr><td>24</td><td>= Minolta/Sony AF 24-105mm F3.5-4.5 (D) or Sigma or Tamron Lens</td> </tr><tr><td>24.1</td><td>= Sigma 18-50mm F2.8</td> </tr><tr><td>24.2</td><td>= Sigma 17-70mm F2.8-4.5 (D)</td> </tr><tr><td>24.3</td><td>= Sigma 20-40mm F2.8 EX DG Aspherical IF</td> </tr><tr><td>24.4</td><td>= Sigma 18-200mm F3.5-6.3 DC</td> </tr><tr><td>24.5</td><td>= Sigma DC 18-125mm F4-5,6 D</td> </tr><tr><td>24.6</td><td>= Tamron SP AF 28-75mm F2.8 XR Di LD Aspherical [IF] Macro</td> </tr><tr><td>25</td><td>= Minolta AF 100-300mm F4.5-5.6 APO (D) or Sigma Lens</td> </tr><tr><td>25.1</td><td>= Sigma 100-300mm F4 EX (APO (D) or D IF)</td> </tr><tr><td>25.2</td><td>= Sigma 70mm F2.8 EX DG Macro</td> </tr><tr><td>25.3</td><td>= Sigma 20mm F1.8 EX DG Aspherical RF</td> </tr><tr><td>25.4</td><td>= Sigma 30mm F1.4 EX DC</td> </tr><tr><td>25.5</td><td>= Sigma 24mm F1.8 EX DG ASP Macro</td> </tr><tr><td>27</td><td>= Minolta AF 85mm F1.4 G (D)</td> </tr><tr><td>28</td><td>= Minolta/Sony AF 100mm F2.8 Macro (D) or Tamron Lens</td> </tr><tr><td>28.1</td><td>= Tamron SP AF 90mm F2.8 Di Macro</td> </tr><tr><td>28.2</td><td>= Tamron SP AF 180mm F3.5 Di LD [IF] Macro</td> </tr><tr><td>29</td><td>= Minolta/Sony AF 75-300mm F4.5-5.6 (D)</td> </tr><tr><td>30</td><td>= Minolta AF 28-80mm F3.5-5.6 (D) or Sigma Lens</td> </tr><tr><td>30.1</td><td>= Sigma AF 10-20mm F4-5.6 EX DC</td> </tr><tr><td>30.2</td><td>= Sigma AF 12-24mm F4.5-5.6 EX DG</td> </tr><tr><td>30.3</td><td>= Sigma 28-70mm EX DG F2.8</td> </tr><tr><td>30.4</td><td>= Sigma 55-200mm F4-5.6 DC</td> </tr><tr><td>31</td><td>= Minolta/Sony AF 50mm F2.8 Macro (D) or F3.5</td> </tr><tr><td>31.1</td><td>= Minolta/Sony AF 50mm F3.5 Macro</td> </tr><tr><td>32</td><td>= Minolta/Sony AF 300mm F2.8 G or 1.5x Teleconverter</td> </tr><tr><td>33</td><td>= Minolta/Sony AF 70-200mm F2.8 G</td> </tr><tr><td>35</td><td>= Minolta AF 85mm F1.4 G (D) Limited</td> </tr><tr><td>36</td><td>= Minolta AF 28-100mm F3.5-5.6 (D)</td> </tr><tr><td>38</td><td>= Minolta AF 17-35mm F2.8-4 (D)</td> </tr><tr><td>39</td><td>= Minolta AF 28-75mm F2.8 (D)</td> </tr><tr><td>40</td><td>= Minolta/Sony AF DT 18-70mm F3.5-5.6 (D)</td> </tr><tr><td>41</td><td>= Minolta/Sony AF DT 11-18mm F4.5-5.6 (D) or Tamron Lens</td> </tr><tr><td>41.1</td><td>= Tamron SP AF 11-18mm F4.5-5.6 Di II LD Aspherical IF</td> </tr><tr><td>42</td><td>= Minolta/Sony AF DT 18-200mm F3.5-6.3 (D)</td> </tr><tr><td>43</td><td>= Sony 35mm F1.4 G (SAL35F14G)</td> </tr><tr><td>44</td><td>= Sony 50mm F1.4 (SAL50F14)</td> </tr><tr><td>45</td><td>= Carl Zeiss Planar T* 85mm F1.4 ZA (SAL85F14Z)</td> </tr><tr><td>46</td><td>= Carl Zeiss Vario-Sonnar T* DT 16-80mm F3.5-4.5 ZA (SAL1680Z)</td> </tr><tr><td>47</td><td>= Carl Zeiss Sonnar T* 135mm F1.8 ZA (SAL135F18Z)</td> </tr><tr><td>48</td><td>= Carl Zeiss Vario-Sonnar T* 24-70mm F2.8 ZA SSM (SAL2470Z) or ZA SSM II</td> </tr><tr><td>48.1</td><td>= Carl Zeiss Vario-Sonnar T* 24-70mm F2.8 ZA SSM II (SAL2470Z2)</td> </tr><tr><td>49</td><td>= Sony DT 55-200mm F4-5.6 (SAL55200)</td> </tr><tr><td>50</td><td>= Sony DT 18-250mm F3.5-6.3 (SAL18250)</td> </tr><tr><td>51</td><td>= Sony DT 16-105mm F3.5-5.6 (SAL16105)</td> </tr><tr><td>52</td><td>= Sony 70-300mm F4.5-5.6 G SSM (SAL70300G) or G SSM II or Tamron Lens</td> </tr><tr><td>52.1</td><td>= Sony 70-300mm F4.5-5.6 G SSM II (SAL70300G2)</td> </tr><tr><td>52.2</td><td>= Tamron SP 70-300mm F4-5.6 Di USD</td> </tr><tr><td>53</td><td>= Sony 70-400mm F4-5.6 G SSM (SAL70400G)</td> </tr><tr><td>54</td><td>= Carl Zeiss Vario-Sonnar T* 16-35mm F2.8 ZA SSM (SAL1635Z) or ZA SSM II</td> </tr><tr><td>54.1</td><td>= Carl Zeiss Vario-Sonnar T* 16-35mm F2.8 ZA SSM II (SAL1635Z2)</td> </tr><tr><td>55</td><td>= Sony DT 18-55mm F3.5-5.6 SAM (SAL1855) or SAM II</td> </tr><tr><td>55.1</td><td>= Sony DT 18-55mm F3.5-5.6 SAM II (SAL18552)</td> </tr><tr><td>56</td><td>= Sony DT 55-200mm F4-5.6 SAM (SAL55200-2)</td> </tr><tr><td>57</td><td>= Sony DT 50mm F1.8 SAM (SAL50F18) or Tamron Lens or Commlite CM-EF-NEX adapter</td> </tr><tr><td>57.1</td><td>= Tamron SP AF 60mm F2 Di II LD [IF] Macro 1:1</td> </tr><tr><td>57.2</td><td>= Tamron 18-270mm F3.5-6.3 Di II PZD</td> </tr><tr><td>58</td><td>= Sony DT 30mm F2.8 Macro SAM (SAL30M28)</td> </tr><tr><td>59</td><td>= Sony 28-75mm F2.8 SAM (SAL2875)</td> </tr><tr><td>60</td><td>= Carl Zeiss Distagon T* 24mm F2 ZA SSM (SAL24F20Z)</td> </tr><tr><td>61</td><td>= Sony 85mm F2.8 SAM (SAL85F28)</td> </tr><tr><td>62</td><td>= Sony DT 35mm F1.8 SAM (SAL35F18)</td> </tr><tr><td>63</td><td>= Sony DT 16-50mm F2.8 SSM (SAL1650)</td> </tr><tr><td>64</td><td>= Sony 500mm F4 G SSM (SAL500F40G)</td> </tr><tr><td>65</td><td>= Sony DT 18-135mm F3.5-5.6 SAM (SAL18135)</td> </tr><tr><td>66</td><td>= Sony 300mm F2.8 G SSM II (SAL300F28G2)</td> </tr><tr><td>67</td><td>= Sony 70-200mm F2.8 G SSM II (SAL70200G2)</td> </tr><tr><td>68</td><td>= Sony DT 55-300mm F4.5-5.6 SAM (SAL55300)</td> </tr><tr><td>69</td><td>= Sony 70-400mm F4-5.6 G SSM II (SAL70400G2)</td> </tr><tr><td>70</td><td>= Carl Zeiss Planar T* 50mm F1.4 ZA SSM (SAL50F14Z)</td> </tr><tr><td>128</td><td>= Tamron or Sigma Lens (128)</td> </tr><tr><td>128.1</td><td>= Tamron AF 18-200mm F3.5-6.3 XR Di II LD Aspherical [IF] Macro</td> </tr><tr><td>128.2</td><td>= Tamron AF 28-300mm F3.5-6.3 XR Di LD Aspherical [IF] Macro</td> </tr><tr><td>128.3</td><td>= Tamron 80-300mm F3.5-6.3</td> </tr><tr><td>128.4</td><td>= Tamron AF 28-200mm F3.8-5.6 XR Di Aspherical [IF] Macro</td> </tr><tr><td>128.5</td><td>= Tamron SP AF 17-35mm F2.8-4 Di LD Aspherical IF</td> </tr><tr><td>128.6</td><td>= Sigma AF 50-150mm F2.8 EX DC APO HSM II</td> </tr><tr><td>128.7</td><td>= Sigma 10-20mm F3.5 EX DC HSM</td> </tr><tr><td>128.8</td><td>= Sigma 70-200mm F2.8 II EX DG APO MACRO HSM</td> </tr><tr><td>128.9</td><td>= Sigma 10mm F2.8 EX DC HSM Fisheye</td> </tr><tr><td>128.10</td><td>= Sigma 50mm F1.4 EX DG HSM</td> </tr><tr><td>128.11</td><td>= Sigma 85mm F1.4 EX DG HSM</td> </tr><tr><td>128.12</td><td>= Sigma 24-70mm F2.8 IF EX DG HSM</td> </tr><tr><td>128.13</td><td>= Sigma 18-250mm F3.5-6.3 DC OS HSM</td> </tr><tr><td>128.14</td><td>= Sigma 17-50mm F2.8 EX DC HSM</td> </tr><tr><td>128.15</td><td>= Sigma 17-70mm F2.8-4 DC Macro HSM</td> </tr><tr><td>128.16</td><td>= Sigma 150mm F2.8 EX DG OS HSM APO Macro</td> </tr><tr><td>128.17</td><td>= Sigma 150-500mm F5-6.3 APO DG OS HSM</td> </tr><tr><td>128.18</td><td>= Tamron AF 28-105mm F4-5.6 [IF]</td> </tr><tr><td>128.19</td><td>= Sigma 35mm F1.4 DG HSM</td> </tr><tr><td>128.20</td><td>= Sigma 18-35mm F1.8 DC HSM</td> </tr><tr><td>129</td><td>= Tamron Lens (129)</td> </tr><tr><td>129.1</td><td>= Tamron 200-400mm F5.6 LD</td> </tr><tr><td>129.2</td><td>= Tamron 70-300mm F4-5.6 LD</td> </tr><tr><td>131</td><td>= Tamron 20-40mm F2.7-3.5 SP Aspherical IF</td> </tr><tr><td>135</td><td>= Vivitar 28-210mm F3.5-5.6</td> </tr><tr><td>136</td><td>= Tokina EMZ M100 AF 100mm F3.5</td> </tr><tr><td>137</td><td>= Cosina 70-210mm F2.8-4 AF</td> </tr><tr><td>138</td><td>= Soligor 19-35mm F3.5-4.5</td> </tr><tr><td>139</td><td>= Tokina AF 28-300mm F4-6.3</td> </tr><tr><td>142</td><td>= Voigtlander 70-300mm F4.5-5.6</td> </tr><tr><td>146</td><td>= Voigtlander Macro APO-Lanthar 125mm F2.5 SL</td> </tr><tr><td>194</td><td>= Tamron SP AF 17-50mm F2.8 XR Di II LD Aspherical [IF]</td> </tr><tr><td>203</td><td>= Tamron SP 70-200mm F2.8 Di USD</td> </tr><tr><td>204</td><td>= Tamron SP 24-70mm F2.8 Di USD</td> </tr><tr><td>213</td><td>= Tamron 16-300mm F3.5-6.3 Di II PZD</td> </tr><tr><td>214</td><td>= Tamron SP 150-600mm F5-6.3 Di USD</td> </tr><tr><td>224</td><td>= Tamron SP 90mm F2.8 Di Macro 1:1 USD</td> </tr><tr><td>255</td><td>= Tamron Lens (255)</td> </tr><tr><td>255.1</td><td>= Tamron SP AF 17-50mm F2.8 XR Di II LD Aspherical</td> </tr><tr><td>255.2</td><td>= Tamron AF 18-250mm F3.5-6.3 XR Di II LD</td> </tr><tr><td>255.3</td><td>= Tamron AF 55-200mm F4-5.6 Di II LD Macro</td> </tr><tr><td>255.4</td><td>= Tamron AF 70-300mm F4-5.6 Di LD Macro 1:2</td> </tr><tr><td>255.5</td><td>= Tamron SP AF 200-500mm F5.0-6.3 Di LD IF</td> </tr><tr><td>255.6</td><td>= Tamron SP AF 10-24mm F3.5-4.5 Di II LD Aspherical IF</td> </tr><tr><td>255.7</td><td>= Tamron SP AF 70-200mm F2.8 Di LD IF Macro</td> </tr><tr><td>255.8</td><td>= Tamron SP AF 28-75mm F2.8 XR Di LD Aspherical IF</td> </tr><tr><td>255.9</td><td>= Tamron AF 90-300mm F4.5-5.6 Telemacro</td> </tr><tr><td>25501</td><td>= Minolta AF 50mm F1.7</td> </tr><tr><td>25511</td><td>= Minolta AF 35-70mm F4 or Other Lens</td> </tr><tr><td>25511.1</td><td>= Sigma UC AF 28-70mm F3.5-4.5</td> </tr><tr><td>25511.2</td><td>= Sigma AF 28-70mm F2.8</td> </tr><tr><td>25511.3</td><td>= Sigma M-AF 70-200mm F2.8 EX Aspherical</td> </tr><tr><td>25511.4</td><td>= Quantaray M-AF 35-80mm F4-5.6</td> </tr><tr><td>25511.5</td><td>= Tokina 28-70mm F2.8-4.5 AF</td> </tr><tr><td>25521</td><td>= Minolta AF 28-85mm F3.5-4.5 or Other Lens</td> </tr><tr><td>25521.1</td><td>= Tokina 19-35mm F3.5-4.5</td> </tr><tr><td>25521.2</td><td>= Tokina 28-70mm F2.8 AT-X</td> </tr><tr><td>25521.3</td><td>= Tokina 80-400mm F4.5-5.6 AT-X AF II 840</td> </tr><tr><td>25521.4</td><td>= Tokina AF PRO 28-80mm F2.8 AT-X 280</td> </tr><tr><td>25521.5</td><td>= Tokina AT-X PRO [II] AF 28-70mm F2.6-2.8 270</td> </tr><tr><td>25521.6</td><td>= Tamron AF 19-35mm F3.5-4.5</td> </tr><tr><td>25521.7</td><td>= Angenieux AF 28-70mm F2.6</td> </tr><tr><td>25521.8</td><td>= Tokina AT-X 17 AF 17mm F3.5</td> </tr><tr><td>25521.9</td><td>= Tokina 20-35mm F3.5-4.5 II AF</td> </tr><tr><td>25531</td><td>= Minolta AF 28-135mm F4-4.5 or Sigma Lens</td> </tr><tr><td>25531.1</td><td>= Sigma ZOOM-alpha 35-135mm F3.5-4.5</td> </tr><tr><td>25531.2</td><td>= Sigma 28-105mm F2.8-4 Aspherical</td> </tr><tr><td>25531.3</td><td>= Sigma 28-105mm F4-5.6 UC</td> </tr><tr><td>25541</td><td>= Minolta AF 35-105mm F3.5-4.5</td> </tr><tr><td>25551</td><td>= Minolta AF 70-210mm F4 Macro or Sigma Lens</td> </tr><tr><td>25551.1</td><td>= Sigma 70-210mm F4-5.6 APO</td> </tr><tr><td>25551.2</td><td>= Sigma M-AF 70-200mm F2.8 EX APO</td> </tr><tr><td>25551.3</td><td>= Sigma 75-200mm F2.8-3.5</td> </tr><tr><td>25561</td><td>= Minolta AF 135mm F2.8</td> </tr><tr><td>25571</td><td>= Minolta/Sony AF 28mm F2.8</td> </tr><tr><td>25581</td><td>= Minolta AF 24-50mm F4</td> </tr><tr><td>25601</td><td>= Minolta AF 100-200mm F4.5</td> </tr><tr><td>25611</td><td>= Minolta AF 75-300mm F4.5-5.6 or Sigma Lens</td> </tr><tr><td>25611.1</td><td>= Sigma 70-300mm F4-5.6 DL Macro</td> </tr><tr><td>25611.2</td><td>= Sigma 300mm F4 APO Macro</td> </tr><tr><td>25611.3</td><td>= Sigma AF 500mm F4.5 APO</td> </tr><tr><td>25611.4</td><td>= Sigma AF 170-500mm F5-6.3 APO Aspherical</td> </tr><tr><td>25611.5</td><td>= Tokina AT-X AF 300mm F4</td> </tr><tr><td>25611.6</td><td>= Tokina AT-X AF 400mm F5.6 SD</td> </tr><tr><td>25611.7</td><td>= Tokina AF 730 II 75-300mm F4.5-5.6</td> </tr><tr><td>25611.8</td><td>= Sigma 800mm F5.6 APO</td> </tr><tr><td>25611.9</td><td>= Sigma AF 400mm F5.6 APO Macro</td> </tr><tr><td>25621</td><td>= Minolta AF 50mm F1.4 [New]</td> </tr><tr><td>25631</td><td>= Minolta AF 300mm F2.8 APO or Sigma Lens</td> </tr><tr><td>25631.1</td><td>= Sigma AF 50-500mm F4-6.3 EX DG APO</td> </tr><tr><td>25631.2</td><td>= Sigma AF 170-500mm F5-6.3 APO Aspherical</td> </tr><tr><td>25631.3</td><td>= Sigma AF 500mm F4.5 EX DG APO</td> </tr><tr><td>25631.4</td><td>= Sigma 400mm F5.6 APO</td> </tr><tr><td>25641</td><td>= Minolta AF 50mm F2.8 Macro or Sigma Lens</td> </tr><tr><td>25641.1</td><td>= Sigma 50mm F2.8 EX Macro</td> </tr><tr><td>25651</td><td>= Minolta AF 600mm F4</td> </tr><tr><td>25661</td><td>= Minolta AF 24mm F2.8 or Sigma Lens</td> </tr><tr><td>25661.1</td><td>= Sigma 17-35mm F2.8-4 EX Aspherical</td> </tr><tr><td>25721</td><td>= Minolta/Sony AF 500mm F8 Reflex</td> </tr><tr><td>25781</td><td>= Minolta/Sony AF 16mm F2.8 Fisheye or Sigma Lens</td> </tr><tr><td>25781.1</td><td>= Sigma 8mm F4 EX [DG] Fisheye</td> </tr><tr><td>25781.2</td><td>= Sigma 14mm F3.5</td> </tr><tr><td>25781.3</td><td>= Sigma 15mm F2.8 Fisheye</td> </tr><tr><td>25791</td><td>= Minolta/Sony AF 20mm F2.8 or Tokina Lens</td> </tr><tr><td>25791.1</td><td>= Tokina AT-X Pro DX 11-16mm F2.8</td> </tr><tr><td>25811</td><td>= Minolta AF 100mm F2.8 Macro [New] or Sigma or Tamron Lens</td> </tr><tr><td>25811.1</td><td>= Sigma AF 90mm F2.8 Macro</td> </tr><tr><td>25811.2</td><td>= Sigma AF 105mm F2.8 EX [DG] Macro</td> </tr><tr><td>25811.3</td><td>= Sigma 180mm F5.6 Macro</td> </tr><tr><td>25811.4</td><td>= Sigma 180mm F3.5 EX DG Macro</td> </tr><tr><td>25811.5</td><td>= Tamron 90mm F2.8 Macro</td> </tr><tr><td>25851</td><td>= Beroflex 35-135mm F3.5-4.5</td> </tr><tr><td>25858</td><td>= Minolta AF 35-105mm F3.5-4.5 New or Tamron Lens</td> </tr><tr><td>25858.1</td><td>= Tamron 24-135mm F3.5-5.6</td> </tr><tr><td>25881</td><td>= Minolta AF 70-210mm F3.5-4.5</td> </tr><tr><td>25891</td><td>= Minolta AF 80-200mm F2.8 APO or Tokina Lens</td> </tr><tr><td>25891.1</td><td>= Tokina 80-200mm F2.8</td> </tr><tr><td>25901</td><td>= Minolta AF 200mm F2.8 G APO + Minolta AF 1.4x APO or Other Lens + 1.4x</td> </tr><tr><td>25901.1</td><td>= Minolta AF 600mm F4 HS-APO G + Minolta AF 1.4x APO</td> </tr><tr><td>25911</td><td>= Minolta AF 35mm F1.4</td> </tr><tr><td>25921</td><td>= Minolta AF 85mm F1.4 G (D)</td> </tr><tr><td>25931</td><td>= Minolta AF 200mm F2.8 G APO</td> </tr><tr><td>25941</td><td>= Minolta AF 3x-1x F1.7-2.8 Macro</td> </tr><tr><td>25961</td><td>= Minolta AF 28mm F2</td> </tr><tr><td>25971</td><td>= Minolta AF 35mm F2 [New]</td> </tr><tr><td>25981</td><td>= Minolta AF 100mm F2</td> </tr><tr><td>26011</td><td>= Minolta AF 200mm F2.8 G APO + Minolta AF 2x APO or Other Lens + 2x</td> </tr><tr><td>26011.1</td><td>= Minolta AF 600mm F4 HS-APO G + Minolta AF 2x APO</td> </tr><tr><td>26041</td><td>= Minolta AF 80-200mm F4.5-5.6</td> </tr><tr><td>26051</td><td>= Minolta AF 35-80mm F4-5.6</td> </tr><tr><td>26061</td><td>= Minolta AF 100-300mm F4.5-5.6</td> </tr><tr><td>26071</td><td>= Minolta AF 35-80mm F4-5.6</td> </tr><tr><td>26081</td><td>= Minolta AF 300mm F2.8 HS-APO G</td> </tr><tr><td>26091</td><td>= Minolta AF 600mm F4 HS-APO G</td> </tr><tr><td>26121</td><td>= Minolta AF 200mm F2.8 HS-APO G</td> </tr><tr><td>26131</td><td>= Minolta AF 50mm F1.7 New</td> </tr><tr><td>26151</td><td>= Minolta AF 28-105mm F3.5-4.5 xi</td> </tr><tr><td>26161</td><td>= Minolta AF 35-200mm F4.5-5.6 xi</td> </tr><tr><td>26181</td><td>= Minolta AF 28-80mm F4-5.6 xi</td> </tr><tr><td>26191</td><td>= Minolta AF 80-200mm F4.5-5.6 xi</td> </tr><tr><td>26201</td><td>= Minolta AF 28-70mm F2.8 G</td> </tr><tr><td>26211</td><td>= Minolta AF 100-300mm F4.5-5.6 xi</td> </tr><tr><td>26241</td><td>= Minolta AF 35-80mm F4-5.6 Power Zoom</td> </tr><tr><td>26281</td><td>= Minolta AF 80-200mm F2.8 G</td> </tr><tr><td>26291</td><td>= Minolta AF 85mm F1.4 New</td> </tr><tr><td>26311</td><td>= Minolta/Sony AF 100-300mm F4.5-5.6 APO</td> </tr><tr><td>26321</td><td>= Minolta AF 24-50mm F4 New</td> </tr><tr><td>26381</td><td>= Minolta AF 50mm F2.8 Macro New</td> </tr><tr><td>26391</td><td>= Minolta AF 100mm F2.8 Macro</td> </tr><tr><td>26411</td><td>= Minolta/Sony AF 20mm F2.8 New</td> </tr><tr><td>26421</td><td>= Minolta AF 24mm F2.8 New</td> </tr><tr><td>26441</td><td>= Minolta AF 100-400mm F4.5-6.7 APO</td> </tr><tr><td>26621</td><td>= Minolta AF 50mm F1.4 New</td> </tr><tr><td>26671</td><td>= Minolta AF 35mm F2 New</td> </tr><tr><td>26681</td><td>= Minolta AF 28mm F2 New</td> </tr><tr><td>26721</td><td>= Minolta AF 24-105mm F3.5-4.5 (D)</td> </tr><tr><td>30464</td><td>= Metabones Canon EF Speed Booster</td> </tr><tr><td>45671</td><td>= Tokina 70-210mm F4-5.6</td> </tr><tr><td>45711</td><td>= Vivitar 70-210mm F4.5-5.6</td> </tr><tr><td>45741</td><td>= 2x Teleconverter or Tamron or Tokina Lens</td> </tr><tr><td>45741.1</td><td>= Tamron SP AF 90mm F2.5</td> </tr><tr><td>45741.2</td><td>= Tokina RF 500mm F8.0 x2</td> </tr><tr><td>45741.3</td><td>= Tokina 300mm F2.8 x2</td> </tr><tr><td>45751</td><td>= 1.4x Teleconverter</td> </tr><tr><td>45851</td><td>= Tamron SP AF 300mm F2.8 LD IF</td> </tr><tr><td>45861</td><td>= Tamron SP AF 35-105mm F2.8 LD Aspherical IF</td> </tr><tr><td>45871</td><td>= Tamron AF 70-210mm F2.8 SP LD</td> </tr><tr><td>48128</td><td>= Metabones Canon EF Speed Booster Ultra</td> </tr><tr><td>61184</td><td>= Metabones Canon EF Adapter or Other Adapter</td> </tr><tr><td>65535</td><td>= E-Mount, T-Mount, Other Lens or no lens</td> </tr><tr><td>65535.1</td><td>= Sony E 16mm F2.8</td> </tr><tr><td>65535.2</td><td>= Sony E 18-55mm F3.5-5.6 OSS</td> </tr><tr><td>65535.3</td><td>= Sony E 55-210mm F4.5-6.3 OSS</td> </tr><tr><td>65535.4</td><td>= Sony E 18-200mm F3.5-6.3 OSS</td> </tr><tr><td>65535.5</td><td>= Sony E 30mm F3.5 Macro</td> </tr><tr><td>65535.6</td><td>= Sony E 24mm F1.8 ZA</td> </tr><tr><td>65535.7</td><td>= Sony E 50mm F1.8 OSS</td> </tr><tr><td>65535.8</td><td>= Sony E 16-70mm F4 ZA OSS</td> </tr><tr><td>65535.9</td><td>= Sony E 10-18mm F4 OSS</td> </tr><tr><td>65535.10</td><td>= Sony E PZ 16-50mm F3.5-5.6 OSS</td> </tr><tr><td>65535.11</td><td>= Sony FE 35mm F2.8 ZA</td> </tr><tr><td>65535.12</td><td>= Sony FE 24-70mm F4 ZA OSS</td> </tr><tr><td>65535.13</td><td>= Sony E 18-200mm F3.5-6.3 OSS LE</td> </tr><tr><td>65535.14</td><td>= Sony E 20mm F2.8</td> </tr><tr><td>65535.15</td><td>= Sony E 35mm F1.8 OSS</td> </tr><tr><td>65535.16</td><td>= Sony E PZ 18-105mm F4 G OSS</td> </tr><tr><td>65535.17</td><td>= Sony FE 90mm F2.8 Macro G OSS</td> </tr><tr><td>65535.18</td><td>= Sony E 18-50mm F4-5.6</td> </tr><tr><td>65535.19</td><td>= Sony E PZ 18-200mm F3.5-6.3 OSS</td> </tr><tr><td>65535.20</td><td>= Sony FE 55mm F1.8 ZA</td> </tr><tr><td>65535.21</td><td>= Sony FE 70-200mm F4 G OSS</td> </tr><tr><td>65535.22</td><td>= Sony FE 16-35mm F4 ZA OSS</td> </tr><tr><td>65535.23</td><td>= Sony FE 28-70mm F3.5-5.6 OSS</td> </tr><tr><td>65535.24</td><td>= Sony FE 35mm F1.4 ZA</td> </tr><tr><td>65535.25</td><td>= Sony FE 24-240mm F3.5-6.3 OSS</td> </tr><tr><td>65535.26</td><td>= Sony FE 28mm F2</td> </tr><tr><td>65535.27</td><td>= Sony FE PZ 28-135mm F4 G OSS</td> </tr><tr><td>65535.28</td><td>= Sony FE 21mm F2.8 (SEL28F20 + SEL075UWC)</td> </tr><tr><td>65535.29</td><td>= Sony FE 16mm F3.5 Fisheye (SEL28F20 + SEL057FEC)</td> </tr><tr><td>65535.30</td><td>= Sigma 19mm F2.8 [EX] DN</td> </tr><tr><td>65535.31</td><td>= Sigma 30mm F2.8 [EX] DN</td> </tr><tr><td>65535.32</td><td>= Sigma 60mm F2.8 DN</td> </tr><tr><td>65535.33</td><td>= Tamron 18-200mm F3.5-6.3 Di III VC</td> </tr><tr><td>65535.34</td><td>= Zeiss Batis 25mm F2</td> </tr><tr><td>65535.35</td><td>= Zeiss Batis 85mm F1.8</td> </tr><tr><td>65535.36</td><td>= Zeiss Loxia 21mm F2.8</td> </tr><tr><td>65535.37</td><td>= Zeiss Loxia 35mm F2</td> </tr><tr><td>65535.38</td><td>= Zeiss Loxia 50mm F2</td> </tr><tr><td>65535.39</td><td>= Zeiss Touit 12mm F2.8</td> </tr><tr><td>65535.40</td><td>= Zeiss Touit 32mm F1.8</td> </tr><tr><td>65535.41</td><td>= Zeiss Touit 50mm F2.8 Macro</td> </tr><tr><td>65535.42</td><td>= Arax MC 35mm F2.8 Tilt+Shift</td> </tr><tr><td>65535.43</td><td>= Arax MC 80mm F2.8 Tilt+Shift</td> </tr><tr><td>65535.44</td><td>= Zenitar MF 16mm F2.8 Fisheye M42</td> </tr><tr><td>65535.45</td><td>= Samyang 500mm Mirror F8.0</td> </tr><tr><td>65535.46</td><td>= Pentacon Auto 135mm F2.8</td> </tr><tr><td>65535.47</td><td>= Pentacon Auto 29mm F2.8</td> </tr><tr><td>65535.48</td><td>= Helios 44-2 58mm F2.0</td> </tr></table></td></tr></table></blockquote> <h2><a name='CameraSettings'>Minolta CameraSettings Tags</a></h2> <p>There is some variability in CameraSettings information between different models (and sometimes even between different firmware versions), so this information may not be as reliable as it should be. Because of this, tags in the following tables are set to lower priority to prevent them from superceding the values of same-named tags in other locations when duplicate tags are disabled.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>ExposureMode</td> <td class=c>int32u</td> <td><span class=s>0 = Program <br>1 = Aperture Priority <br>2 = Shutter Priority <br>3 = Manual</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>FlashMode</td> <td class=c>int32u</td> <td><span class=s>0 = Fill flash <br>1 = Red-eye reduction <br>2 = Rear flash sync <br>3 = Wireless <br>4 = Off?</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>WhiteBalance</td> <td class=c title=' ~ = Writable only with -n'>int32u~</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>MinoltaImageSize</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = Full <br>1 = 1600x1200 <br>2 = 1280x960 <br>3 = 640x480</td><td>&nbsp;&nbsp;</td> <td>6 = 2080x1560 <br>7 = 2560x1920 <br>8 = 3264x2176</td></tr></table> </td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>MinoltaQuality</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = Raw <br>1 = Super Fine <br>2 = Fine</td><td>&nbsp;&nbsp;</td> <td>3 = Standard <br>4 = Economy <br>5 = Extra Fine</td></tr></table> </td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>DriveMode</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = Single <br>1 = Continuous <br>2 = Self-timer <br>4 = Bracketing</td><td>&nbsp;&nbsp;</td> <td>5 = Interval <br>6 = UHS continuous <br>7 = HS continuous</td></tr></table> </td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>MeteringMode</td> <td class=c>int32u</td> <td><span class=s>0 = Multi-segment <br>1 = Center-weighted average <br>2 = Spot</span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ISO</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>ExposureTime</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>FNumber</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>MacroMode</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>DigitalZoom</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>1 = Electronic magnification <br>2 = 2x</span></td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>ExposureCompensation</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>BracketStep</td> <td class=c>int32u</td> <td><span class=s>0 = 1/3 EV <br>1 = 2/3 EV <br>2 = 1 EV</span></td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>IntervalLength</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>IntervalNumber</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>FocalLength</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>FocusDistance</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>FlashFired</td> <td class=c>int32u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>MinoltaDate</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>MinoltaTime</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='23 = 0x17'>23</td> <td>MaxAperture</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='26 = 0x1a'>26</td> <td>FileNumberMemory</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>LastFileNumber</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>ColorBalanceRed</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>ColorBalanceGreen</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>ColorBalanceBlue</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='31 = 0x1f'>31</td> <td>Saturation</td> <td class=c>int32u</td> <td><span class=s>0 = Normal</span></td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>Contrast</td> <td class=c>int32u</td> <td><span class=s>0 = Normal</span></td></tr> <tr class=b> <td class=r title='33 = 0x21'>33</td> <td>Sharpness</td> <td class=c>int32u</td> <td><span class=s>0 = Hard <br>1 = Normal <br>2 = Soft</span></td></tr> <tr> <td class=r title='34 = 0x22'>34</td> <td>SubjectProgram</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = None <br>1 = Portrait <br>2 = Text</td><td>&nbsp;&nbsp;</td> <td>3 = Night portrait <br>4 = Sunset <br>5 = Sports action</td></tr></table> </td></tr> <tr class=b> <td class=r title='35 = 0x23'>35</td> <td>FlashExposureComp</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='36 = 0x24'>36</td> <td>ISOSetting</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = 100 <br>1 = 200 <br>2 = 400</td><td>&nbsp;&nbsp;</td> <td>3 = 800 <br>4 = Auto <br>5 = 64</td></tr></table> </td></tr> <tr class=b> <td class=r title='37 = 0x25'>37</td> <td>MinoltaModelID</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = DiMAGE 7, X1, X21 or X31 <br>1 = DiMAGE 5 <br>2 = DiMAGE S304 <br>3 = DiMAGE S404 <br>4 = DiMAGE 7i <br>5 = DiMAGE 7Hi <br>6 = DiMAGE A1 <br>7 = DiMAGE A2 or S414</td></tr></table> </td></tr> <tr> <td class=r title='38 = 0x26'>38</td> <td>IntervalMode</td> <td class=c>int32u</td> <td><span class=s>0 = Still Image <br>1 = Time-lapse Movie</span></td></tr> <tr class=b> <td class=r title='39 = 0x27'>39</td> <td>FolderName</td> <td class=c>int32u</td> <td><span class=s>0 = Standard Form <br>1 = Data Form</span></td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>ColorMode</td> <td class=c>int32u</td> <td><span class=s>0 = Natural color <br>1 = Black &amp; White <br>2 = Vivid color <br>3 = Solarization <br>4 = Adobe RGB</span></td></tr> <tr class=b> <td class=r title='41 = 0x29'>41</td> <td>ColorFilter</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='42 = 0x2a'>42</td> <td>BWFilter</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='43 = 0x2b'>43</td> <td>InternalFlash</td> <td class=c>int32u</td> <td><span class=s>0 = No <br>1 = Fired</span></td></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>Brightness</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='45 = 0x2d'>45</td> <td>SpotFocusPointX</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='46 = 0x2e'>46</td> <td>SpotFocusPointY</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='47 = 0x2f'>47</td> <td>WideFocusZone</td> <td class=c>int32u</td> <td><span class=s>0 = No zone <br>1 = Center zone (horizontal orientation) <br>2 = Center zone (vertical orientation) <br>3 = Left zone <br>4 = Right zone</span></td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>FocusMode</td> <td class=c>int32u</td> <td><span class=s>0 = AF <br>1 = MF</span></td></tr> <tr class=b> <td class=r title='49 = 0x31'>49</td> <td>FocusArea</td> <td class=c>int32u</td> <td><span class=s>0 = Wide Focus (normal) <br>1 = Spot Focus</span></td></tr> <tr> <td class=r title='50 = 0x32'>50</td> <td>DECPosition</td> <td class=c>int32u</td> <td><span class=s>0 = Exposure <br>1 = Contrast <br>2 = Saturation <br>3 = Filter</span></td></tr> <tr class=b> <td class=r title='51 = 0x33'>51</td> <td>ColorProfile</td> <td class=c>int32u</td> <td><span class=s><span class=n>(DiMAGE 7Hi only)</span> <br>0 = Not Embedded <br>1 = Embedded</span></td></tr> <tr> <td class=r title='52 = 0x34'>52</td> <td>DataImprint</td> <td class=c>int32u</td> <td><span class=s><span class=n>(DiMAGE 7Hi only)</span> <br>0 = None <br>1 = YYYY/MM/DD <br>2 = MM/DD/HH:MM <br>3 = Text <br>4 = Text + ID#</span></td></tr> <tr class=b> <td class=r title='63 = 0x3f'>63</td> <td>FlashMetering</td> <td class=c>int32u</td> <td><span class=s>0 = ADI (Advanced Distance Integration) <br>1 = Pre-flash TTL <br>2 = Manual flash control</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraSettings7D'>Minolta CameraSettings7D Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ExposureMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Program <br>1 = Aperture Priority <br>2 = Shutter Priority <br>3 = Manual</td><td>&nbsp;&nbsp;</td> <td>4 = Auto <br>5 = Program-shift A <br>6 = Program-shift S</td></tr></table> </td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>MinoltaImageSize</td> <td class=c>int16u</td> <td><span class=s>0 = Large <br>1 = Medium <br>2 = Small</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>MinoltaQuality</td> <td class=c>int16u</td> <td><span class=s>0 = RAW <br>16 = Fine <br>32 = Normal <br>34 = RAW+JPEG <br>48 = Economy</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Daylight <br>2 = Shade <br>3 = Cloudy</td><td>&nbsp;&nbsp;</td> <td>4 = Tungsten <br>5 = Fluorescent <br>256 = Kelvin <br>512 = Manual</td></tr></table> </td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>FocusMode</td> <td class=c>int16u</td> <td><span class=s>0 = AF-S <br>1 = AF-C <br>3 = Manual <br>4 = AF-A</span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>AFPoints</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = (none) <br>Bit 0 = Center <br>Bit 1 = Top <br>Bit 2 = Top-right <br>Bit 3 = Right</td><td>&nbsp;&nbsp;</td> <td>Bit 4 = Bottom-right <br>Bit 5 = Bottom <br>Bit 6 = Bottom-left <br>Bit 7 = Left <br>Bit 8 = Top-left</td></tr></table> </td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>Flash</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>FlashMode</td> <td class=c>int16u</td> <td><span class=s>0 = Normal <br>1 = Red-eye reduction <br>2 = Rear flash sync</span></td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>ISOSetting</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = 100 <br>3 = 200 <br>4 = 400</td><td>&nbsp;&nbsp;</td> <td>5 = 800 <br>6 = 1600 <br>7 = 3200</td></tr></table> </td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>ExposureCompensation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='37 = 0x25'>37</td> <td>ColorSpace</td> <td class=c>int16u</td> <td><span class=s>0 = Natural sRGB <br>1 = Natural+ sRGB <br>4 = Adobe RGB</span></td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>Sharpness</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='39 = 0x27'>39</td> <td>Contrast</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>Saturation</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='45 = 0x2d'>45</td> <td>FreeMemoryCardImages</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='63 = 0x3f'>63</td> <td>ColorTemperature</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='64 = 0x40'>64</td> <td>HueAdjustment</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='70 = 0x46'>70</td> <td>Rotation</td> <td class=c>int16u</td> <td><span class=s>72 = Horizontal (normal) <br>76 = Rotate 90 CW <br>82 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='71 = 0x47'>71</td> <td>FNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='72 = 0x48'>72</td> <td>ExposureTime</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='74 = 0x4a'>74</td> <td>FreeMemoryCardImages</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='94 = 0x5e'>94</td> <td>ImageNumber</td> <td class=c>int16u</td> <td><span class=s><span class=n>(this information may appear at index 98 (0x62), depending on firmware version)</span></span></td></tr> <tr> <td class=r title='96 = 0x60'>96</td> <td>NoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='98 = 0x62'>98</td> <td>ImageNumber2</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='113 = 0x71'>113</td> <td>ImageStabilization</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='117 = 0x75'>117</td> <td>ZoneMatchingOn</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfoA100'>Minolta CameraInfoA100 Tags</a></h2> <p>Camera information for the Sony DSLR-A100.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>AFSensorActive</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Top-right <br>1 = Bottom-right <br>2 = Bottom <br>3 = Middle Horizontal</td><td>&nbsp;&nbsp;</td> <td>4 = Center Vertical <br>5 = Top <br>6 = Top-left <br>7 = Bottom-left</td></tr></table> </td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>AFStatusActiveSensor</td> <td class=c>int16s</td> <td><span class=s><span class=n>(the focus status at shutter release. May not reflect the status after focusing if the image is focused then recomposed)</span></span><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>AFStatusTop-right</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>AFStatusBottom-right</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>AFStatusBottom</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>AFStatusMiddleHorizontal</td> <td class=c>int16s</td> <td><span class=s><span class=n>(any of the three horizontal sensors at the middle of the focus frame: Left, Center or Right)</span></span><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>AFStatusCenterVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>AFStatusTop</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>AFStatusTop-left</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>AFStatusBottom-left</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>FocusLocked</td> <td class=c>int8u</td> <td><span class=s>0 = Manual Focus <br>4 = No <br>16 = Continuous Focus <br>64 = Yes</span></td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>AFPoint</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Center <br>2 = Top <br>3 = Top-right <br>4 = Right</td><td>&nbsp;&nbsp;</td> <td>5 = Bottom-right <br>6 = Bottom <br>7 = Bottom-left <br>8 = Left <br>9 = Top-left</td></tr></table> </td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>AFMode</td> <td class=c>int8u</td> <td><span class=s>0 = DMF <br>1 = AF-S <br>2 = AF-C <br>3 = AF-A</span></td></tr> <tr class=b> <td class=r title='45 = 0x2d'>45</td> <td>AFStatusLeft</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='47 = 0x2f'>47</td> <td>AFStatusCenterHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='49 = 0x31'>49</td> <td>AFStatusRight</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='51 = 0x33'>51</td> <td>AFAreaMode</td> <td class=c>int8u</td> <td><span class=s>0 = Wide <br>1 = Local <br>2 = Spot</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ISInfoA100'>Minolta ISInfoA100 Tags</a></h2> <p>Image stabilization information for the Sony DSLR-A100.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ImageStabilization</td> <td class=c>int16u</td> <td><span class=s>0x0 = Off <br>0x2784 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='WBInfoA100'>Minolta WBInfoA100 Tags</a></h2> <p>White balance information for the Sony DSLR-A100.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>DriveMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Self-timer 10 sec <br>1 = Continuous <br>2 = Single-frame Exposure Bracketing <br>3 = Continuous Exposure Bracketing <br>4 = Self-Timer 2 sec <br>5 = Single Frame <br>8 = White Balance Bracketing Low <br>9 = White Balance Bracketing High</td></tr></table> </td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>Rotation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 270 CW <br>2 = Rotate 90 CW</span></td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>ImageStabilizationSetting</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>DynamicRangeOptimizerMode</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Standard <br>2 = Advanced</span></td></tr> <tr> <td class=r title='42 = 0x2a'>42</td> <td>ExposureCompensationMode</td> <td class=c>int8u</td> <td><span class=s>0 = Ambient and Flash <br>1 = Ambient Only</span></td></tr> <tr class=b> <td class=r title='43 = 0x2b'>43</td> <td>WBBracketShotNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>WhiteBalanceBracketing</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Low <br>2 = High</span></td></tr> <tr class=b> <td class=r title='45 = 0x2d'>45</td> <td>ExposureBracketShotNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='49 = 0x31'>49</td> <td>FlashFunction</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = No flash <br>0x300 = Built-in flash <br>0x1205 = Manual <br>0x120e = Strobe <br>0x128e = Fill flash, Pre-flash TTL <br>0x12ae = Bounce flash <br>0x140e = Rear sync, ADI <br>0x148e = Fill flash, ADI <br>0x1580 = Wireless <br>0x178e = HSS</td></tr></table> </td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>ExposureMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Program <br>0x1 = Aperture Priority <br>0x2 = Shutter Priority <br>0x3 = Manual <br>0x4 = Auto <br>0x5 = Program Shift A <br>0x6 = Program Shift S</td><td>&nbsp;&nbsp;</td> <td>0x1013 = Portrait <br>0x1023 = Sports <br>0x1033 = Sunset <br>0x1043 = Night View/Portrait <br>0x1053 = Landscape <br>0x1083 = Macro</td></tr></table> </td></tr> <tr> <td class=r title='54 = 0x36'>54</td> <td>ColorMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Standard <br>1 = Vivid <br>2 = Portrait <br>3 = Landscape</td><td>&nbsp;&nbsp;</td> <td>4 = Sunset <br>5 = Night View <br>7 = B&amp;W <br>8 = Adobe RGB</td></tr></table> </td></tr> <tr class=b> <td class=r title='56 = 0x38'>56</td> <td>AverageLV</td> <td class=c>int16u</td> <td><span class=s><span class=n>(arithmetic mean of the readings from the 40 honeycomb segments)</span></span></td></tr> <tr> <td class=r title='60 = 0x3c'>60</td> <td>FrameNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='150 = 0x96'>150</td> <td>WB_RGBLevels</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='174 = 0xae'>174</td> <td>WB_GBRGLevels</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='192 = 0xc0'>192</td> <td>WB_RedLevelsTungsten</td> <td class=c>int16u[7]</td> <td><span class=s><span class=n>(7 values for adjustments of -3 through +3)</span></span></td></tr> <tr> <td class=r title='206 = 0xce'>206</td> <td>WB_BlueLevelsTungsten</td> <td class=c>int16u[7]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='220 = 0xdc'>220</td> <td>WB_RedLevelsDaylight</td> <td class=c>int16u[7]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='234 = 0xea'>234</td> <td>WB_BlueLevelsDaylight</td> <td class=c>int16u[7]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='248 = 0xf8'>248</td> <td>WB_RedLevelsCloudy</td> <td class=c>int16u[7]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='262 = 0x106'>262</td> <td>WB_BlueLevelsCloudy</td> <td class=c>int16u[7]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='276 = 0x114'>276</td> <td>WB_RedLevelsFlash</td> <td class=c>int16u[7]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='290 = 0x122'>290</td> <td>WB_BlueLevelsFlash</td> <td class=c>int16u[7]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='332 = 0x14c'>332</td> <td>WB_RedLevelsFluorescent</td> <td class=c>int16u[7]</td> <td><span class=s><span class=n>(white balance red presets for fluorescent -2 through +4: -2=Fluorescent, -1=WhiteFluorescent, 0=CoolWhiteFluorescent, +1=DayWhiteFluorescent and +3=DaylightFluorescent)</span></span></td></tr> <tr> <td class=r title='346 = 0x15a'>346</td> <td>WB_BlueLevelsFluorescent</td> <td class=c>int16u[7]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='360 = 0x168'>360</td> <td>WB_RedLevelsShade</td> <td class=c>int16u[7]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='374 = 0x176'>374</td> <td>WB_BlueLevelsShade</td> <td class=c>int16u[7]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='392 = 0x188'>392</td> <td>WB_RedLevel6500K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='394 = 0x18a'>394</td> <td>WB_BlueLevel6500K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='396 = 0x18c'>396</td> <td>WB_RedLevelCustom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='398 = 0x18e'>398</td> <td>WB_BlueLevelCustom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='408 = 0x198'>408</td> <td>WB_RedLevel3500K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='410 = 0x19a'>410</td> <td>WB_BlueLevel3500K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='446 = 0x1be'>446</td> <td>WB_RedLevelsKelvin</td> <td class=c>int16u[75]</td> <td><span class=s><span class=n>(values for 2500-9900 K, in increments of 100 K)</span></span></td></tr> <tr> <td class=r title='596 = 0x254'>596</td> <td>WB_BlueLevelsKelvin</td> <td class=c>int16u[75]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='772 = 0x304'>772</td> <td>WB_RBLevelsFlash</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='776 = 0x308'>776</td> <td>WB_RBLevelsCoolWhiteF</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1000 = 0x3e8'>1000</td> <td>WB_RBLevelsTungsten</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1004 = 0x3ec'>1004</td> <td>WB_RBLevelsDaylight</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1008 = 0x3f0'>1008</td> <td>WB_RBLevelsCloudy</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1012 = 0x3f4'>1012</td> <td>WB_RBLevelsFlash</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1020 = 0x3fc'>1020</td> <td>WB_RedLevelsFluorescent</td> <td class=c>int16u[7]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1034 = 0x40a'>1034</td> <td>WB_BlueLevelsFluorescent</td> <td class=c>int16u[7]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1048 = 0x418'>1048</td> <td>WB_RBLevelsShade</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1056 = 0x420'>1056</td> <td>WB_RBLevels6500K</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1060 = 0x424'>1060</td> <td>WB_RBLevelsCustom</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1072 = 0x430'>1072</td> <td>WB_RBLevels3500K</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1320 = 0x528'>1320</td> <td>WB_RBLevelsDaylight</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1350 = 0x546'>1350</td> <td>WB_RGBLevels</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1576 = 0x628'>1576</td> <td>AEMeteringSegments</td> <td class=c>int8u[40]</td> <td><span class=s><span class=n>(metering values from the 40 honeycomb segments, converted to LV. The first value is for the outer cell, then the values are given row by row, from top to bottom, with each row scanned left-to-right. The 21st value is the middle cell, which gives the spot metering)</span></span></td></tr> <tr> <td class=r title='1680 = 0x690'>1680</td> <td>MeasuredLV</td> <td class=c>int8u</td> <td><span class=s><span class=n>(measured light value based on MeteringMode)</span></span></td></tr> <tr class=b> <td class=r title='1681 = 0x691'>1681</td> <td>BrightnessValue</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4172 = 0x104c'>4172</td> <td>TiffMeteringImage</td> <td class=c>N</td> <td><span class=s><span class=n>(13-bit RBGG (?) 40x30 pixels, presumably metering info, converted to a 16-bit TIFF image;)</span></span></td></tr> <tr class=b> <td class=r title='18872 = 0x49b8'>18872</td> <td>ExposureTime</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18874 = 0x49ba'>18874</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18875 = 0x49bb'>18875</td> <td>FocusDistance</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18877 = 0x49bd'>18877</td> <td>LensType</td> <td class=c>int16uRev</td> <td>--&gt; <a href='Minolta.html#LensType'>Minolta LensType Values</a></td></tr> <tr class=b> <td class=r title='18880 = 0x49c0'>18880</td> <td>ExposureCompensation</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18881 = 0x49c1'>18881</td> <td>FlashExposureComp</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18882 = 0x49c2'>18882</td> <td>ImageStabilization</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='18883 = 0x49c3'>18883</td> <td>BrightnessValue</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18885 = 0x49c5'>18885</td> <td>MaxAperture</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18887 = 0x49c7'>18887</td> <td>FNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18908 = 0x49dc'>18908</td> <td>InternalSerialNumber</td> <td class=c>string[12]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraSettings5D'>Minolta CameraSettings5D Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>ExposureMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Program <br>1 = Aperture Priority <br>2 = Shutter Priority <br>3 = Manual <br>4 = Auto? <br>4131 = Connected Copying?</td></tr></table> </td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>MinoltaImageSize</td> <td class=c>int16u</td> <td><span class=s>0 = Large <br>1 = Medium <br>2 = Small</span></td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>MinoltaQuality</td> <td class=c>int16u</td> <td><span class=s>0 = RAW <br>16 = Fine <br>32 = Normal <br>34 = RAW+JPEG <br>48 = Economy</span></td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Daylight <br>2 = Cloudy <br>3 = Shade <br>4 = Tungsten</td><td>&nbsp;&nbsp;</td> <td>5 = Fluorescent <br>6 = Flash <br>256 = Kelvin <br>512 = Manual</td></tr></table> </td></tr> <tr> <td class=r title='31 = 0x1f'>31</td> <td>Flash</td> <td class=c>int16u</td> <td><span class=s>0 = Did not fire <br>1 = Fired</span></td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>FlashMode</td> <td class=c>int16u</td> <td><span class=s>0 = Normal <br>1 = Red-eye reduction <br>2 = Rear flash sync</span></td></tr> <tr> <td class=r title='37 = 0x25'>37</td> <td>MeteringMode</td> <td class=c>int16u</td> <td><span class=s>0 = Multi-segment <br>1 = Center-weighted average <br>2 = Spot</span></td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>ISOSetting</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = 100 <br>3 = 200 <br>4 = 400 <br>5 = 800 <br>6 = 1600 <br>7 = 3200 <br>8 = 200 (Zone Matching High) <br>10 = 80 (Zone Matching Low)</td></tr></table> </td></tr> <tr> <td class=r title='47 = 0x2f'>47</td> <td>ColorSpace</td> <td class=c>int16u</td> <td><span class=s>0 = Natural sRGB <br>1 = Natural+ sRGB <br>2 = Monochrome <br>4 = Adobe RGB (ICC) <br>5 = Adobe RGB</span></td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>Sharpness</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='49 = 0x31'>49</td> <td>Contrast</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>Saturation</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='53 = 0x35'>53</td> <td>ExposureTime</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='54 = 0x36'>54</td> <td>FNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='55 = 0x37'>55</td> <td>FreeMemoryCardImages</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='73 = 0x49'>73</td> <td>ColorTemperature</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='74 = 0x4a'>74</td> <td>HueAdjustment</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='80 = 0x50'>80</td> <td>Rotation</td> <td class=c>int16u</td> <td><span class=s>72 = Horizontal (normal) <br>76 = Rotate 90 CW <br>82 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='83 = 0x53'>83</td> <td>ExposureCompensation</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='84 = 0x54'>84</td> <td>FreeMemoryCardImages</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='101 = 0x65'>101</td> <td>Rotation</td> <td class=c>int16u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr class=b> <td class=r title='110 = 0x6e'>110</td> <td>ColorTemperature</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='113 = 0x71'>113</td> <td>PictureFinish</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Natural <br>1 = Natural+ <br>2 = Portrait <br>3 = Wind Scene <br>4 = Evening Scene</td><td>&nbsp;&nbsp;</td> <td>5 = Night Scene <br>6 = Night Portrait <br>7 = Monochrome <br>8 = Adobe RGB <br>9 = Adobe RGB (ICC)</td></tr></table> </td></tr> <tr class=b> <td class=r title='174 = 0xae'>174</td> <td>ImageNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='176 = 0xb0'>176</td> <td>NoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='189 = 0xbd'>189</td> <td>ImageStabilization</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraSettingsA100'>Minolta CameraSettingsA100 Tags</a></h2> <p>Camera settings information for the Sony DSLR-A100.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ExposureMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Program <br>0x1 = Aperture Priority <br>0x2 = Shutter Priority <br>0x3 = Manual <br>0x4 = Auto <br>0x5 = Program Shift A <br>0x6 = Program Shift S <br>0x1013 = Portrait <br>0x1023 = Sports <br>0x1033 = Sunset <br>0x1043 = Night View/Portrait <br>0x1053 = Landscape <br>0x1083 = Macro</td></tr></table> </td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>ExposureCompensationSetting</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>HighSpeedSync</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>ShutterSpeedSetting</td> <td class=c>int16u</td> <td><span class=s><span class=n>(used only in M and S exposure modes)</span></span></td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>ApertureSetting</td> <td class=c>int16u</td> <td><span class=s><span class=n>(used only in M and A exposure modes)</span></span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ExposureTime</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>FNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>DriveMode2</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Self-timer 10 sec <br>0x1 = Continuous <br>0x4 = Self-timer 2 sec <br>0x5 = Single Frame <br>0x8 = White Balance Bracketing Low <br>0x9 = White Balance Bracketing High <br>0x302 = Single-frame Bracketing Low <br>0x303 = Continous Bracketing Low <br>0x702 = Single-frame Bracketing High <br>0x703 = Continuous Bracketing High</td></tr></table> </td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Auto <br>0x1 = Daylight <br>0x2 = Cloudy <br>0x3 = Shade <br>0x4 = Tungsten</td><td>&nbsp;&nbsp;</td> <td>0x5 = Fluorescent <br>0x6 = Flash <br>0x100 = Kelvin <br>0x200 = Manual</td></tr></table> </td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>FocusMode</td> <td class=c>int16u</td> <td><span class=s>0 = AF-S <br>1 = AF-C <br>4 = AF-A <br>5 = Manual <br>6 = DMF</span></td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>AFPointSelected</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Center <br>2 = Top <br>3 = Top-right <br>4 = Right <br>5 = Bottom-right</td><td>&nbsp;&nbsp;</td> <td>6 = Bottom <br>7 = Bottom-left <br>8 = Left <br>9 = Top-left</td></tr></table> </td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>AFAreaMode</td> <td class=c>int16u</td> <td><span class=s>0 = Wide <br>1 = Local <br>2 = Spot</span></td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>FlashMode</td> <td class=c>int16u</td> <td><span class=s>0 = Auto <br>2 = Rear Sync <br>3 = Wireless <br>4 = Fill Flash</span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>FlashExposureCompSet</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>MeteringMode</td> <td class=c>int16u</td> <td><span class=s>0 = Multi-segment <br>1 = Center-weighted average <br>2 = Spot</span></td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>ISOSetting</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Auto <br>48 = 100 <br>56 = 200 <br>64 = 400 <br>72 = 800 <br>80 = 1600 <br>174 = 80 (Zone Matching Low) <br>184 = 200 (Zone Matching High)</td></tr></table> </td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>ZoneMatchingMode</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = Standard <br>2 = Advanced</span></td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>DynamicRangeOptimizer</td> <td class=c>int16u</td> <td><span class=s><span class=n>(as applied to image)</span> <br>0 = Off <br>1 = Standard <br>2 = Advanced</span></td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>ColorMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Standard <br>1 = Vivid <br>2 = Portrait <br>3 = Landscape</td><td>&nbsp;&nbsp;</td> <td>4 = Sunset <br>5 = Night Scene <br>7 = B&amp;W <br>8 = Adobe RGB</td></tr></table> </td></tr> <tr class=b> <td class=r title='23 = 0x17'>23</td> <td>ColorSpace</td> <td class=c>int16u</td> <td><span class=s>0 = sRGB <br>2 = B&amp;W <br>5 = Adobe RGB</span></td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>Sharpness</td> <td class=c>int16u</td> <td><span class=s>0 = Normal</span></td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>Contrast</td> <td class=c>int16u</td> <td><span class=s>0 = Normal</span></td></tr> <tr> <td class=r title='26 = 0x1a'>26</td> <td>Saturation</td> <td class=c>int16u</td> <td><span class=s>0 = Normal</span></td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28</td> <td>FlashMetering</td> <td class=c>int16u</td> <td><span class=s>0 = ADI (Advanced Distance Integration) <br>1 = Pre-flash TTL</span></td></tr> <tr> <td class=r title='29 = 0x1d'>29</td> <td>PrioritySetupShutterRelease</td> <td class=c>int16u</td> <td><span class=s>0 = AF <br>1 = Release</span></td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>DriveMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Single Frame <br>1 = Continuous <br>2 = Self-timer <br>3 = Continuous Bracketing <br>4 = Single-Frame Bracketing <br>5 = White Balance Bracketing</td></tr></table> </td></tr> <tr> <td class=r title='31 = 0x1f'>31</td> <td>SelfTimerTime</td> <td class=c>int16u</td> <td><span class=s>0 = 10 s <br>4 = 2 s</span></td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>ContinuousBracketing</td> <td class=c>int16u</td> <td><span class=s>0x303 = Low <br>0x703 = High</span></td></tr> <tr> <td class=r title='33 = 0x21'>33</td> <td>SingleFrameBracketing</td> <td class=c>int16u</td> <td><span class=s>0x302 = Low <br>0x702 = High</span></td></tr> <tr class=b> <td class=r title='34 = 0x22'>34</td> <td>WhiteBalanceBracketing</td> <td class=c>int16u</td> <td><span class=s>0x8 = Low <br>0x9 = High</span></td></tr> <tr> <td class=r title='35 = 0x23'>35</td> <td>WhiteBalanceSetting</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Auto <br>0x1 = Preset <br>0x2 = Custom <br>0x3 = Color Temperature/Color Filter <br>0x8001 = Preset <br>0x8002 = Custom <br>0x8003 = Color Temperature/Color Filter</td></tr></table> </td></tr> <tr class=b> <td class=r title='36 = 0x24'>36</td> <td>PresetWhiteBalance</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Daylight <br>2 = Cloudy <br>3 = Shade</td><td>&nbsp;&nbsp;</td> <td>4 = Tungsten <br>5 = Fluorescent <br>6 = Flash</td></tr></table> </td></tr> <tr> <td class=r title='37 = 0x25'>37</td> <td>ColorTemperatureSetting</td> <td class=c>int16u</td> <td><span class=s>0 = Temperature <br>2 = Color Filter</span></td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>CustomWBSetting</td> <td class=c>int16u</td> <td><span class=s>0 = Setup <br>1 = Recall</span></td></tr> <tr> <td class=r title='39 = 0x27'>39</td> <td>DynamicRangeOptimizerSetting</td> <td class=c>int16u</td> <td><span class=s><span class=n>(as set in camera)</span> <br>0 = Off <br>1 = Standard <br>2 = Advanced</span></td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>FreeMemoryCardImages</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='52 = 0x34'>52</td> <td>CustomWBRedLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='53 = 0x35'>53</td> <td>CustomWBGreenLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='54 = 0x36'>54</td> <td>CustomWBBlueLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='55 = 0x37'>55</td> <td>CustomWBError</td> <td class=c>int16u</td> <td><span class=s>0 = OK <br>1 = Error</span></td></tr> <tr> <td class=r title='56 = 0x38'>56</td> <td>WhiteBalanceFineTune</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='57 = 0x39'>57</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='58 = 0x3a'>58</td> <td>ColorCompensationFilter</td> <td class=c>int16s</td> <td><span class=s><span class=n>(ranges from -2 for green to +2 for magenta)</span></span></td></tr> <tr class=b> <td class=r title='59 = 0x3b'>59</td> <td>SonyImageSize</td> <td class=c>int16u</td> <td><span class=s>0 = Standard <br>1 = Medium <br>2 = Small</span></td></tr> <tr> <td class=r title='60 = 0x3c'>60</td> <td>SonyQuality</td> <td class=c>int16u</td> <td><span class=s>0 = RAW <br>32 = Fine <br>34 = RAW + JPEG <br>48 = Standard</span></td></tr> <tr class=b> <td class=r title='61 = 0x3d'>61</td> <td>InstantPlaybackTime</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='62 = 0x3e'>62</td> <td>InstantPlaybackSetup</td> <td class=c>int16u</td> <td><span class=s>0 = Image and Information <br>1 = Image Only <br>3 = Image and Histogram</span></td></tr> <tr class=b> <td class=r title='63 = 0x3f'>63</td> <td>NoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='64 = 0x40'>64</td> <td>EyeStartAF</td> <td class=c>int16u</td> <td><span class=s>0 = On <br>1 = Off</span></td></tr> <tr class=b> <td class=r title='65 = 0x41'>65</td> <td>RedEyeReduction</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='66 = 0x42'>66</td> <td>FlashDefault</td> <td class=c>int16u</td> <td><span class=s>0 = Auto <br>1 = Fill Flash</span></td></tr> <tr class=b> <td class=r title='67 = 0x43'>67</td> <td>AutoBracketOrder</td> <td class=c>int16u</td> <td><span class=s>0 = 0 - + <br>1 = - 0 +</span></td></tr> <tr> <td class=r title='68 = 0x44'>68</td> <td>FocusHoldButton</td> <td class=c>int16u</td> <td><span class=s>0 = Focus Hold <br>1 = DOF Preview</span></td></tr> <tr class=b> <td class=r title='69 = 0x45'>69</td> <td>AELButton</td> <td class=c>int16u</td> <td><span class=s>0 = Hold <br>1 = Toggle <br>2 = Spot Hold <br>3 = Spot Toggle</span></td></tr> <tr> <td class=r title='70 = 0x46'>70</td> <td>ControlDialSet</td> <td class=c>int16u</td> <td><span class=s>0 = Shutter Speed <br>1 = Aperture</span></td></tr> <tr class=b> <td class=r title='71 = 0x47'>71</td> <td>ExposureCompensationMode</td> <td class=c>int16u</td> <td><span class=s>0 = Ambient and Flash <br>1 = Ambient Only</span></td></tr> <tr> <td class=r title='72 = 0x48'>72</td> <td>AFAssist</td> <td class=c>int16u</td> <td><span class=s>0 = On <br>1 = Off</span></td></tr> <tr class=b> <td class=r title='73 = 0x49'>73</td> <td>CardShutterLock</td> <td class=c>int16u</td> <td><span class=s>0 = On <br>1 = Off</span></td></tr> <tr> <td class=r title='74 = 0x4a'>74</td> <td>LensShutterLock</td> <td class=c>int16u</td> <td><span class=s>0 = On <br>1 = Off</span></td></tr> <tr class=b> <td class=r title='75 = 0x4b'>75</td> <td>AFAreaIllumination</td> <td class=c>int16u</td> <td><span class=s>0 = 0.3 s <br>1 = 0.6 s <br>2 = Off</span></td></tr> <tr> <td class=r title='76 = 0x4c'>76</td> <td>MonitorDisplayOff</td> <td class=c>int16u</td> <td><span class=s>0 = Automatic <br>1 = Manual</span></td></tr> <tr class=b> <td class=r title='77 = 0x4d'>77</td> <td>RecordDisplay</td> <td class=c>int16u</td> <td><span class=s>0 = Auto Rotate <br>1 = Horizontal</span></td></tr> <tr> <td class=r title='78 = 0x4e'>78</td> <td>PlayDisplay</td> <td class=c>int16u</td> <td><span class=s>0 = Auto Rotate <br>1 = Manual Rotate</span></td></tr> <tr class=b> <td class=r title='80 = 0x50'>80</td> <td>ExposureIndicator</td> <td class=c>int16u</td> <td>--&gt; <a href='Minolta.html#ExposureIndicator'>Minolta ExposureIndicator Values</a></td></tr> <tr> <td class=r title='81 = 0x51'>81</td> <td>AELExposureIndicator</td> <td class=c>int16u</td> <td>--&gt; <a href='Minolta.html#ExposureIndicator'>Minolta ExposureIndicator Values</a> <br><span class='n s'>(also indicates exposure for next shot when bracketing)</span></td></tr> <tr class=b> <td class=r title='82 = 0x52'>82</td> <td>ExposureBracketingIndicatorLast</td> <td class=c>int16u</td> <td>--&gt; <a href='Minolta.html#ExposureIndicator'>Minolta ExposureIndicator Values</a> <br><span class='n s'>(indicator for last shot when bracketing)</span></td></tr> <tr> <td class=r title='83 = 0x53'>83</td> <td>MeteringOffScaleIndicator</td> <td class=c>int16u</td> <td><span class=s><span class=n>(two flashing triangles when under or over metering scale)</span> <br>0 = Within Range <br>1 = Under/Over Range <br>255 = Out of Range</span></td></tr> <tr class=b> <td class=r title='84 = 0x54'>84</td> <td>FlashExposureIndicator</td> <td class=c>int16u</td> <td>--&gt; <a href='Minolta.html#ExposureIndicator'>Minolta ExposureIndicator Values</a></td></tr> <tr> <td class=r title='85 = 0x55'>85</td> <td>FlashExposureIndicatorNext</td> <td class=c>int16u</td> <td>--&gt; <a href='Minolta.html#ExposureIndicator'>Minolta ExposureIndicator Values</a> <br><span class='n s'>(indicator for next shot when bracketing)</span></td></tr> <tr class=b> <td class=r title='86 = 0x56'>86</td> <td>FlashExposureIndicatorLast</td> <td class=c>int16u</td> <td>--&gt; <a href='Minolta.html#ExposureIndicator'>Minolta ExposureIndicator Values</a> <br><span class='n s'>(indicator for last shot when bracketing)</span></td></tr> <tr> <td class=r title='87 = 0x57'>87</td> <td>ImageStabilization</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='88 = 0x58'>88</td> <td>FocusModeSwitch</td> <td class=c>int16u</td> <td><span class=s>0 = AF <br>1 = MF</span></td></tr> <tr> <td class=r title='89 = 0x59'>89</td> <td>FlashType</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = Built-in <br>2 = External</span></td></tr> <tr class=b> <td class=r title='90 = 0x5a'>90</td> <td>Rotation</td> <td class=c>int16u</td> <td><span class=s>0 = Horizontal (Normal) <br>1 = Rotate 270 CW <br>2 = Rotate 90 CW</span></td></tr> <tr> <td class=r title='91 = 0x5b'>91</td> <td>AELock</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='94 = 0x5e'>94</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='95 = 0x5f'>95</td> <td>ColorCompensationFilter</td> <td class=c>int16s</td> <td><span class=s><span class=n>(ranges from -2 for green to +2 for magenta)</span></span></td></tr> <tr class=b> <td class=r title='96 = 0x60'>96</td> <td>BatteryState</td> <td class=c>int16u</td> <td><span class=s>3 = Very Low <br>4 = Low <br>5 = Half Full <br>6 = Sufficient Power Remaining</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ExposureIndicator'>Minolta ExposureIndicator Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>ExposureIndicator</th><th>Value</th><th>ExposureIndicator</th><th>Value</th><th>ExposureIndicator</th></tr> <tr><td class=r>0</td><td>= Not Indicated</td> <td class='r b'>125</td><td class=b>= -0.7</td> <td class=r>133</td><td>= +1.3</td> </tr><tr><td class=r>1</td><td>= Under Scale</td> <td class='r b'>126</td><td class=b>= -0.5</td> <td class=r>134</td><td>= +1.5</td> </tr><tr><td class=r>119</td><td>= Bottom of Scale</td> <td class='r b'>127</td><td class=b>= -0.3</td> <td class=r>135</td><td>= +1.7</td> </tr><tr><td class=r>120</td><td>= -2.0</td> <td class='r b'>128</td><td class=b>= 0</td> <td class=r>136</td><td>= +2.0</td> </tr><tr><td class=r>121</td><td>= -1.7</td> <td class='r b'>129</td><td class=b>= +0.3</td> <td class=r>253</td><td>= Top of Scale</td> </tr><tr><td class=r>122</td><td>= -1.5</td> <td class='r b'>130</td><td class=b>= +0.5</td> <td class=r>254</td><td>= Over Scale</td> </tr><tr><td class=r>123</td><td>= -1.3</td> <td class='r b'>131</td><td class=b>= +0.7</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr><tr><td class=r>124</td><td>= -1.0</td> <td class='r b'>132</td><td class=b>= +1.0</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='MMA'>Minolta MMA Tags</a></h2> <p>This information is found in MOV videos from Minolta models such as the DiMAGE A2, S414 and 7Hi.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>SoftwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MOV1'>Minolta MOV1 Tags</a></h2> <p>This information is found in MOV videos from some Konica Minolta models such as the DiMage Z10 and X50.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>ModelType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='46 = 0x2e'>46</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='58 = 0x3a'>58</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='80 = 0x50'>80</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MOV2'>Minolta MOV2 Tags</a></h2> <p>This information is found in MOV videos from some Minolta models such as the DiMAGE X and Xt.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>ModelType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='38 = 0x26'>38</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='50 = 0x32'>50</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='72 = 0x48'>72</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Nov 19, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������Image-ExifTool-10.10/html/TagNames/MinoltaRaw.html��������������������������������������������������000644 �000765 �000024 �00000021117 12527350231 021773� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>MinoltaRaw Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>MinoltaRaw Tags</h2> <p>These tags are used in Minolta RAW format (MRW) images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>"\0PRD"</td> <td>MinoltaPRD</td> <td class=c>-</td> <td>--&gt; <a href='MinoltaRaw.html#PRD'>MinoltaRaw PRD Tags</a></td></tr> <tr class=b> <td>"\0RIF"</td> <td>MinoltaRIF</td> <td class=c>-</td> <td>--&gt; <a href='MinoltaRaw.html#RIF'>MinoltaRaw RIF Tags</a></td></tr> <tr> <td>"\0TTW"</td> <td>MinoltaTTW</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> <tr class=b> <td>"\0WBG"</td> <td>MinoltaWBG</td> <td class=c>-</td> <td>--&gt; <a href='MinoltaRaw.html#WBG'>MinoltaRaw WBG Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='PRD'>MinoltaRaw PRD Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FirmwareID</td> <td class=c>string[8]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>SensorHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>SensorWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>ImageHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>ImageWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>RawDepth</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>BitDepth</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>StorageMethod</td> <td class=c>int8u</td> <td><span class=s>82 = Padded <br>89 = Linear</span></td></tr> <tr> <td class=r title='23 = 0x17'>23</td> <td>BayerPattern</td> <td class=c>int8u</td> <td><span class=s>1 = RGGB <br>4 = GBRG</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='RIF'>MinoltaRaw RIF Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>Saturation</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>Contrast</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>Sharpness</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>WBMode</td> <td class=c title=' ~ = Writable only with -n'>int8u~</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>ProgramMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = None <br>1 = Portrait <br>2 = Text</td><td>&nbsp;&nbsp;</td> <td>3 = Night Portrait <br>4 = Sunset <br>5 = Sports</td></tr></table> </td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>ISOSetting</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Auto <br>48 = 100 <br>56 = 200 <br>64 = 400 <br>72 = 800 <br>80 = 1600 <br>174 = 80 (Zone Matching Low) <br>184 = 200 (Zone Matching High)</td></tr></table> </td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>ColorMode</td> <td class=c>int32u[0.25]</td> <td><table class=cols><tr> <td>0 = Natural color <br>1 = Black &amp; White <br>2 = Vivid color <br>3 = Solarization <br>4 = Adobe RGB <br>5 = Sepia <br>9 = Natural <br>12 = Portrait</td><td>&nbsp;&nbsp;</td> <td>13 = Natural sRGB <br>14 = Natural+ sRGB <br>15 = Landscape <br>16 = Evening <br>17 = Night Scene <br>18 = Night Portrait <br>132 = Embed Adobe RGB</td></tr></table> <span class=s><span class=n>(Sony A100)</span></span><table class=cols><tr> <td>0x0 = Standard <br>0x1 = Vivid <br>0x2 = Portrait <br>0x3 = Landscape <br>0x4 = Sunset <br>0x5 = Night View/Portrait <br>0x6 = B&amp;W <br>0x7 = Adobe RGB <br>0xc = Neutral <br>0xd = Clear <br>0xe = Deep <br>0xf = Light <br>0x10 = Autumn Leaves <br>0x11 = Sepia <br>0x64 = Neutral <br>0x65 = Clear <br>0x66 = Deep <br>0x67 = Light <br>0x68 = Night View <br>0x69 = Autumn Leaves <br>0xffffffff = n/a</td></tr></table> </td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>WB_RBLevelsTungsten</td> <td class=c>int16u[2]</td> <td><span class=s><span class=n>(these WB_RBLevels currently decoded only for the Sony A100)</span></span></td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>WB_RBLevelsDaylight</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>WB_RBLevelsCloudy</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>WB_RBLevelsCoolWhiteF</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>WB_RBLevelsFlash</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>WB_RBLevelsUnknown?</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>WB_RBLevelsShade</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='36 = 0x24'>36</td> <td>WB_RBLevelsDaylightF</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>WB_RBLevelsDayWhiteF</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>WB_RBLevelsWhiteF</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='56 = 0x38'>56</td> <td>ColorFilter</td> <td class=c>int8s</td> <td><span class=s><span class=n>(Minolta models)</span></span></td></tr> <tr> <td class=r title='57 = 0x39'>57</td> <td>BWFilter</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='58 = 0x3a'>58</td> <td>ZoneMatching</td> <td class=c>int8u</td> <td><span class=s><span class=n>(Minolta models)</span> <br>0 = ISO Setting Used <br>1 = High Key <br>2 = Low Key</span></td></tr> <tr> <td class=r title='59 = 0x3b'>59</td> <td>Hue</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='60 = 0x3c'>60</td> <td>ColorTemperature</td> <td class=c>int8u</td> <td><span class=s><span class=n>(Minolta models)</span></span></td></tr> <tr> <td class=r title='74 = 0x4a'>74</td> <td>ZoneMatching</td> <td class=c>int8u</td> <td><span class=s><span class=n>(Sony models)</span> <br>0 = ISO Setting Used <br>1 = High Key <br>2 = Low Key</span></td></tr> <tr class=b> <td class=r title='76 = 0x4c'>76</td> <td>ColorTemperature</td> <td class=c>int8u</td> <td><span class=s><span class=n>(A100)</span></span></td></tr> <tr> <td class=r title='77 = 0x4d'>77</td> <td>ColorFilter</td> <td class=c>int8u</td> <td><span class=s><span class=n>(A100)</span></span></td></tr> <tr class=b> <td class=r title='78 = 0x4e'>78</td> <td>ColorTemperature</td> <td class=c>int8u</td> <td><span class=s><span class=n>(A200 and A700)</span></span></td></tr> <tr> <td class=r title='79 = 0x4f'>79</td> <td>ColorFilter</td> <td class=c>int8u</td> <td><span class=s><span class=n>(A200 and A700)</span></span></td></tr> <tr class=b> <td class=r title='80 = 0x50'>80</td> <td>RawDataLength</td> <td class=c>N</td> <td><span class=s><span class=n>(A100)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='WBG'>MinoltaRaw WBG Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>WBScale</td> <td class=c>int8u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>WB_GBRGLevels <br>WB_RGGBLevels</td> <td class=c>int16u[4]<br>int16u[4]</td> <td><span class=s><span class=n>(DiMAGE A200)</span> <br><span class=n>(other models)</span></span></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Mar 20, 2013</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/MNG.html���������������������������������������������������������000644 �000765 �000024 �00000053175 12527350231 020350� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>MNG Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>MNG Tags</h2> <p>This table contains definitions for tags found in MNG and JNG images. MNG is a superset of PNG and JNG, so a MNG image may contain any of these tags as well as any PNG tags. Conversely, only some of these tags are valid for JNG images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'BACK'</td> <td>Background</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#Background'>MNG Background Tags</a></td></tr> <tr class=b> <td>'BASI'</td> <td>BasisObject</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#BasisObject'>MNG BasisObject Tags</a></td></tr> <tr> <td>'CLIP'</td> <td>ClipObjects</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#ClipObjects'>MNG ClipObjects Tags</a></td></tr> <tr class=b> <td>'CLON'</td> <td>CloneObject</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#CloneObject'>MNG CloneObject Tags</a></td></tr> <tr> <td>'DBYK'</td> <td>DropByKeyword</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'DEFI'</td> <td>DefineObject</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#DefineObject'>MNG DefineObject Tags</a></td></tr> <tr> <td>'DHDR'</td> <td>DeltaPNGHeader</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#DeltaPNGHeader'>MNG DeltaPNGHeader Tags</a></td></tr> <tr class=b> <td>'DISC'</td> <td>DiscardObjects</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'DROP'</td> <td>DropChunks</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'FRAM'</td> <td>Frame</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'JHDR'</td> <td>JNGHeader</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#JNGHeader'>MNG JNGHeader Tags</a></td></tr> <tr class=b> <td>'LOOP'</td> <td>Loop</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#Loop'>MNG Loop Tags</a></td></tr> <tr> <td>'MAGN'</td> <td>MagnifyObject</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#MagnifyObject'>MNG MagnifyObject Tags</a></td></tr> <tr class=b> <td>'MHDR'</td> <td>MNGHeader</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#MNGHeader'>MNG MNGHeader Tags</a></td></tr> <tr> <td>'MOVE'</td> <td>MoveObjects</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#MoveObjects'>MNG MoveObjects Tags</a></td></tr> <tr class=b> <td>'ORDR'</td> <td>OrderingRestrictions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'PAST'</td> <td>PasteImage</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#PasteImage'>MNG PasteImage Tags</a></td></tr> <tr class=b> <td>'PPLT'</td> <td>PartialPalette</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'PROM'</td> <td>PromoteParent</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#PromoteParent'>MNG PromoteParent Tags</a></td></tr> <tr class=b> <td>'SAVE'</td> <td>SaveObjects</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'SEEK'</td> <td>SeekPoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'SHOW'</td> <td>ShowObjects</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#ShowObjects'>MNG ShowObjects Tags</a></td></tr> <tr> <td>'TERM'</td> <td>TerminationAction</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#TerminationAction'>MNG TerminationAction Tags</a></td></tr> <tr class=b> <td>'eXPi'</td> <td>ExportImage</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#ExportImage'>MNG ExportImage Tags</a></td></tr> <tr> <td>'fPRI'</td> <td>FramePriority</td> <td class=c>-</td> <td>--&gt; <a href='MNG.html#FramePriority'>MNG FramePriority Tags</a></td></tr> <tr class=b> <td>'nEED'</td> <td>ResourcesNeeded</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pHYg'</td> <td>GlobalPixelSize</td> <td class=c>-</td> <td>--&gt; <a href='PNG.html#PhysicalPixel'>PNG PhysicalPixel Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Background'>MNG Background Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>BackgroundColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>MandatoryBackground</td> <td class=c>N</td> <td><span class=s>0 = Color and Image Advisory <br>1 = Color Mandatory, Image Advisory <br>2 = Color Advisory, Image Mandatory <br>3 = Color and Image Mandatory</span></td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>BackgroundImageID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>BackgroundTiling</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='BasisObject'>MNG BasisObject Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>BitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>ColorType</td> <td class=c>N</td> <td><span class=s>0 = Grayscale <br>2 = RGB <br>3 = Palette <br>4 = Grayscale with Alpha <br>6 = RGB with Alpha</span></td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>Compression</td> <td class=c>N</td> <td><span class=s>0 = Deflate/Inflate</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>Filter</td> <td class=c>N</td> <td><span class=s>0 = Adaptive</span></td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>Interlace</td> <td class=c>N</td> <td><span class=s>0 = Noninterlaced <br>1 = Adam7 Interlace</span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>RedSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>GreenSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>BlueSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='25 = 0x19'>25</td> <td>AlphaSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>Viewable</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ClipObjects'>MNG ClipObjects Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FirstObject</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>LastObject</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>DeltaType</td> <td class=c>N</td> <td><span class=s>0 = Absolute <br>1 = Relative</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>ClipBoundary</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CloneObject'>MNG CloneObject Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>SourceID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>CloneID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>CloneType</td> <td class=c>N</td> <td><span class=s>0 = Full <br>1 = Parital <br>2 = Renumber object</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>DoNotShow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ConcreteFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>LocalDeltaType</td> <td class=c>N</td> <td><span class=s>0 = Absolute <br>1 = Relative</span></td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>DeltaXY</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='DefineObject'>MNG DefineObject Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ObjectID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>DoNotShow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>ConcreteFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>XYLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>ClippingBoundary</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='DeltaPNGHeader'>MNG DeltaPNGHeader Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ObjectID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>ImageType</td> <td class=c>N</td> <td><span class=s>0 = Unspecified <br>1 = PNG <br>2 = JNG</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>DeltaType</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Full Replacement <br>1 = Pixel Addition <br>2 = Alpha Addition <br>3 = Color Addition</td><td>&nbsp;&nbsp;</td> <td>4 = Pixel Replacement <br>5 = Alpha Replacement <br>6 = Color Replacement <br>7 = No Change</td></tr></table> </td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>BlockSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>BlockLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='JNGHeader'>MNG JNGHeader Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>ColorType</td> <td class=c>N</td> <td><span class=s>8 = Gray <br>10 = Color <br>12 = Gray Alpha <br>14 = Color Alpha</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>BitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>Compression</td> <td class=c>N</td> <td><span class=s>8 = Huffman-coded baseline JPEG</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>Interlace</td> <td class=c>N</td> <td><span class=s>0 = Sequential <br>8 = Progressive</span></td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>AlphaBitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>AlphaCompression</td> <td class=c>N</td> <td><span class=s>0 = MNG Grayscale IDAT <br>8 = JNG 8-bit Grayscale JDAA</span></td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>AlphaFilter</td> <td class=c>N</td> <td><span class=s>0 = Adaptive MNG (N/A for JPEG)</span></td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>AlphaInterlace</td> <td class=c>N</td> <td><span class=s>0 = Noninterlaced</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Loop'>MNG Loop Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>NestLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>IterationCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>TerminationCondition</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Deterministic, not cacheable <br>1 = Decoder discretion, not cacheable <br>2 = User discretion, not cacheable <br>3 = External signal, not cacheable <br>4 = Deterministic, cacheable <br>5 = Decoder discretion, cacheable <br>6 = User discretion, cacheable <br>7 = External signal, cacheable</td></tr></table> </td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>IterationMinMax</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>SignalNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MagnifyObject'>MNG MagnifyObject Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FirstObjectID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>LastObjectID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>XMethod</td> <td class=c>N</td> <td><span class=s>0 = No Magnification <br>1 = Pixel Replication <br>2 = Linear Interpolation <br>3 = Closest Pixel <br>4 = Color Linear Interpolation and Alpha Closest Pixel <br>5 = Color Closest Pixel and Alpha Linear Interpolation</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>XMag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>YMag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>LeftMag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>RightMag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>TopMag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>BottomMag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>YMethod</td> <td class=c>N</td> <td><span class=s>0 = No Magnification <br>1 = Pixel Replication <br>2 = Linear Interpolation <br>3 = Closest Pixel <br>4 = Color Linear Interpolation and Alpha Closest Pixel <br>5 = Color Closest Pixel and Alpha Linear Interpolation</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='MNGHeader'>MNG MNGHeader Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>TicksPerSecond</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>NominalLayerCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>NominalFrameCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>NominalPlayTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>SimplicityProfile</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MoveObjects'>MNG MoveObjects Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FirstObject</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>LastObject</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>DeltaType</td> <td class=c>N</td> <td><span class=s>0 = Absolute <br>1 = Relative</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>DeltaXY</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PasteImage'>MNG PasteImage Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>DestinationID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>TargetDeltaType</td> <td class=c>N</td> <td><span class=s>0 = Absolute <br>1 = Relative</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>TargetXY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>SourceID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>CompositionMode</td> <td class=c>N</td> <td><span class=s>0 = Over <br>1 = Replace <br>2 = Under</span></td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>Orientation</td> <td class=c>N</td> <td><span class=s>0 = Same as source <br>2 = Flipped left-right, then up-down <br>4 = Flipped left-right <br>6 = Flipped up-down <br>8 = Tiled</span></td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>OffsetOrigin</td> <td class=c>N</td> <td><span class=s>0 = Desination Origin <br>1 = Target Origin</span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>OffsetXY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>BoundaryOrigin</td> <td class=c>N</td> <td><span class=s>0 = Desination Origin <br>1 = Target Origin</span></td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>PastClippingBoundary</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PromoteParent'>MNG PromoteParent Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>NewColorType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>NewBitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>FillMethod</td> <td class=c>N</td> <td><span class=s>0 = Bit Replication <br>1 = Zero Fill</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShowObjects'>MNG ShowObjects Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FirstObject</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>LastObject</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ShowMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='TerminationAction'>MNG TerminationAction Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>TerminationAction</td> <td class=c>N</td> <td><span class=s>0 = Show Last Frame <br>1 = Display Nothing <br>2 = Show First Frame <br>3 = Repeat Sequence</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>IterationEndAction</td> <td class=c>N</td> <td><span class=s>0 = Show Last Frame <br>1 = Display Nothing <br>2 = Show First Frame</span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>Delay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>IterationMax</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ExportImage'>MNG ExportImage Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>SnapshotID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>SnapshotName</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FramePriority'>MNG FramePriority Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>DeltaType</td> <td class=c>N</td> <td><span class=s>0 = Absolute <br>1 = Relative</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>Priority</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Oct 25, 2006</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/MOI.html���������������������������������������������������������000644 �000765 �000024 �00000003124 12443566307 020352� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>MOI Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>MOI Tags</h2> <p>MOI files store information about associated MOD or TOD files, and are written by some JVC, Canon and Panasonic camcorders.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>MOIVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='128 = 0x80'>128</td> <td>AspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='132 = 0x84'>132</td> <td>AudioCodec</td> <td class=c>N</td> <td><span class=s>0xc1 = AC3 <br>0x4001 = MPEG</span></td></tr> <tr class=b> <td class=r title='134 = 0x86'>134</td> <td>AudioBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='218 = 0xda'>218</td> <td>VideoBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Dec 15, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Motorola.html����������������������������������������������������000644 �000765 �000024 �00000001643 12614670626 021526� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Motorola Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Motorola Tags</h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x665e = 26206'>0x665e</td> <td>Sensor</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x6705 = 26373'>0x6705</td> <td>ManufactureDate</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Oct 30, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/MPC.html���������������������������������������������������������000644 �000765 �000024 �00000004304 12527350231 020334� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>MPC Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>MPC Tags</h2> <p>Tags used in Musepack (MPC) audio files. ExifTool also extracts ID3 and APE information from these files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Bit032-063'</td> <td>TotalFrames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Bit080-081'</td> <td>SampleRate</td> <td class=c>N</td> <td><span class=s>0 = 44100 <br>1 = 48000 <br>2 = 37800 <br>3 = 32000</span></td></tr> <tr> <td>'Bit084-087'</td> <td>Quality</td> <td class=c>N</td> <td><table class=cols><tr> <td>1 = Unstable/Experimental <br>5 = 0 <br>6 = 1 <br>7 = 2 (Telephone) <br>8 = 3 (Thumb) <br>9 = 4 (Radio) <br>10 = 5 (Standard) <br>11 = 6 (Xtreme) <br>12 = 7 (Insane) <br>13 = 8 (BrainDead) <br>14 = 9 <br>15 = 10</td></tr></table> </td></tr> <tr class=b> <td>'Bit088-093'</td> <td>MaxBand</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Bit096-111'</td> <td>ReplayGainTrackPeak</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Bit112-127'</td> <td>ReplayGainTrackGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Bit128-143'</td> <td>ReplayGainAlbumPeak</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Bit144-159'</td> <td>ReplayGainAlbumGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Bit179'</td> <td>FastSeek</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td>'Bit191'</td> <td>Gapless</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td>'Bit216-223'</td> <td>EncoderVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Nov 20, 2006</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/MPEG.html��������������������������������������������������������000644 �000765 �000024 �00000014215 12535340443 020452� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>MPEG Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>MPEG Tags</h2> <p> The MPEG format doesn&#39;t specify any file-level meta information. In lieu of this, information is extracted from the first audio and video frame headers in the file. </p> <h2><a name='Audio'>MPEG Audio Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Bit11-12'</td> <td>MPEGAudioVersion</td> <td class=c>N</td> <td><span class=s>0 = 2.5 <br>2 = 2 <br>3 = 1</span></td></tr> <tr class=b> <td>'Bit13-14'</td> <td>AudioLayer</td> <td class=c>N</td> <td><span class=s>1 = 3 <br>2 = 2 <br>3 = 1</span></td></tr> <tr> <td>'Bit16-19'</td> <td>AudioBitrate</td> <td class=c>N</td> <td><span class=s><span class=n>(version 1, layer 1)</span> <br><span class=n>(version 1, layer 2)</span> <br><span class=n>(version 1, layer 3)</span> <br><span class=n>(version 2 or 2.5, layer 1)</span> <br><span class=n>(version 2 or 2.5, layer 2 or 3)</span></span></td></tr> <tr class=b> <td>'Bit20-21'</td> <td>SampleRate</td> <td class=c>N</td> <td><span class=s><span class=n>(version 1)</span> <br>0 = 44100 <br>1 = 48000 <br>2 = 32000 <br><span class=n>(version 2)</span> <br>0 = 22050 <br>1 = 24000 <br>2 = 16000 <br><span class=n>(version 2.5)</span> <br>0 = 11025 <br>1 = 12000 <br>2 = 8000</span></td></tr> <tr> <td>'Bit24-25'</td> <td>ChannelMode</td> <td class=c>N</td> <td><span class=s>0 = Stereo <br>1 = Joint Stereo <br>2 = Dual Channel <br>3 = Single Channel</span></td></tr> <tr class=b> <td>'Bit26'</td> <td>MSStereo</td> <td class=c>N</td> <td><span class=s><span class=n>(layer 3)</span> <br>0 = Off <br>1 = On</span></td></tr> <tr> <td>'Bit26-27'</td> <td>ModeExtension</td> <td class=c>N</td> <td><span class=s><span class=n>(layer 1 or 2)</span> <br>0 = Bands 4-31 <br>1 = Bands 8-31 <br>2 = Bands 12-31 <br>3 = Bands 16-31</span></td></tr> <tr class=b> <td>'Bit27'</td> <td>IntensityStereo</td> <td class=c>N</td> <td><span class=s><span class=n>(layer 3)</span> <br>0 = Off <br>1 = On</span></td></tr> <tr> <td>'Bit28'</td> <td>CopyrightFlag</td> <td class=c>N</td> <td><span class=s>0 = False <br>1 = True</span></td></tr> <tr class=b> <td>'Bit29'</td> <td>OriginalMedia</td> <td class=c>N</td> <td><span class=s>0 = False <br>1 = True</span></td></tr> <tr> <td>'Bit30-31'</td> <td>Emphasis</td> <td class=c>N</td> <td><span class=s>0 = None <br>1 = 50/15 ms <br>2 = reserved <br>3 = CCIT J.17</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Video'>MPEG Video Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Bit00-11'</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Bit12-23'</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Bit24-27'</td> <td>AspectRatio</td> <td class=c>N</td> <td><table class=cols><tr> <td>0.6735 = 0.6735 <br>0.7031 = 16:9, 625 line, PAL <br>0.7615 = 0.7615 <br>0.8055 = 0.8055 <br>0.8437 = 16:9, 525 line, NTSC <br>0.8935 = 0.8935 <br>0.9157 = 4:3, 625 line, PAL, CCIR601 <br>0.9815 = 0.9815 <br>1 = 1:1 <br>1.095 = 4:3, 525 line, NTSC, CCIR601 <br>1.0255 = 1.0255 <br>1.0695 = 1.0695 <br>1.1575 = 1.1575 <br>1.2015 = 1.2015</td></tr></table> </td></tr> <tr class=b> <td>'Bit28-31'</td> <td>FrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Bit32-49'</td> <td>VideoBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Xing'>MPEG Xing Tags</a></h2> <p>These tags are extracted from the Xing/Info frame.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Encoder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LameHeader</td> <td class=c>-</td> <td>--&gt; <a href='MPEG.html#Lame'>MPEG Lame Tags</a></td></tr> <tr> <td>LameQuality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LameVBRQuality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VBRBytes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VBRFrames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VBRScale</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Lame'>MPEG Lame Tags</a></h2> <p>Tags extracted from Lame 3.90 or later header.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>LameMethod</td> <td class=c>N</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>0x1 = CBR <br>0x2 = ABR <br>0x3 = VBR (old/rh) <br>0x4 = VBR (new/mtrh)</td><td>&nbsp;&nbsp;</td> <td>0x5 = VBR (old/rh) <br>0x6 = VBR <br>0x8 = CBR (2-pass) <br>0x9 = ABR (2-pass)</td></tr></table> </td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>LameLowPassFilter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>LameBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>LameStereoMode</td> <td class=c>N</td> <td><span class=s>[Mask 0x1c]</span><table class=cols><tr> <td>0x0 = Mono <br>0x1 = Stereo <br>0x2 = Dual Channels <br>0x3 = Joint Stereo <br>0x4 = Forced Joint Stereo <br>0x6 = Auto <br>0x7 = Intensity Stereo</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Aug 21, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/MPF.html���������������������������������������������������������000644 �000765 �000024 �00000013154 12547572571 020361� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>MPF Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>MPF Tags</h2> <p>These tags are part of the CIPA Multi-Picture Format specification, and are found in the APP2 &quot;MPF&quot; segment of JPEG images. MPImage data referenced from this segment is stored as a JPEG trailer. The MPF tags are not writable, however the MPF segment may be deleted as a group (with &quot;MPF:All&quot;) but then the JPEG trailer should also be deleted (with &quot;Trailer:All&quot;). See <a href="http://www.cipa.jp/std/documents/e/DC-007_E.pdf">http://www.cipa.jp/std/documents/e/DC-007_E.pdf</a> for the official specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0xb000 = 45056'>0xb000</td> <td>MPFVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb001 = 45057'>0xb001</td> <td>NumberOfImages</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xb002 = 45058'>0xb002</td> <td>MPImageList</td> <td class=c>-</td> <td>--&gt; <a href='MPF.html#MPImage'>MPF MPImage Tags</a></td></tr> <tr class=b> <td title='0xb003 = 45059'>0xb003</td> <td>ImageUIDList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xb004 = 45060'>0xb004</td> <td>TotalFrames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb101 = 45313'>0xb101</td> <td>MPIndividualNum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xb201 = 45569'>0xb201</td> <td>PanOrientation</td> <td class=c>N</td> <td><span class=s><span class=n>(long integer is split into 4 bytes)</span> <br>[Value 2] <br>0x0 = [unused] <br>0x1 = Start at top right <br>0x2 = Start at top left <br>0x3 = Start at bottom left <br>0x4 = Start at bottom right <br>[Value 3]</span><table class=cols><tr> <td>0x1 = Left to right <br>0x2 = Right to left <br>0x3 = Top to bottom <br>0x4 = Bottom to top <br>0x10 = Clockwise <br>0x20 = Counter clockwise <br>0x30 = Zigzag (row start) <br>0x40 = Zigzag (column start)</td></tr></table> </td></tr> <tr class=b> <td title='0xb202 = 45570'>0xb202</td> <td>PanOverlapH</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xb203 = 45571'>0xb203</td> <td>PanOverlapV</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb204 = 45572'>0xb204</td> <td>BaseViewpointNum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xb205 = 45573'>0xb205</td> <td>ConvergenceAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb206 = 45574'>0xb206</td> <td>BaselineLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xb207 = 45575'>0xb207</td> <td>VerticalDivergence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb208 = 45576'>0xb208</td> <td>AxisDistanceX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xb209 = 45577'>0xb209</td> <td>AxisDistanceY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb20a = 45578'>0xb20a</td> <td>AxisDistanceZ</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xb20b = 45579'>0xb20b</td> <td>YawAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb20c = 45580'>0xb20c</td> <td>PitchAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xb20d = 45581'>0xb20d</td> <td>RollAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MPImage'>MPF MPImage Tags</a></h2> <p>The first MPF &quot;Large Thumbnail&quot; image is extracted as PreviewImage, and the rest of the embedded MPF images are extracted as MPImage#. The ExtractEmbedded (-ee) option may be used to extract information from these embedded images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0.1</td> <td>MPImageFlags</td> <td class=c>N</td> <td><span class=s>[Mask 0xf8000000] <br>Bit 29 = Representative image <br>Bit 30 = Dependent child image <br>Bit 31 = Dependent parent image</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.2</td> <td>MPImageFormat</td> <td class=c>N</td> <td><span class=s>[Mask 0x7000000] <br>0x0 = JPEG</span></td></tr> <tr> <td class=r title='0 = 0x0'>0.3</td> <td>MPImageType</td> <td class=c>N</td> <td><span class=s>[Mask 0xffffff]</span><table class=cols><tr> <td>0x0 = Undefined <br>0x10001 = Large Thumbnail (VGA equivalent) <br>0x10002 = Large Thumbnail (full HD equivalent) <br>0x20001 = Multi-frame Panorama <br>0x20002 = Multi-frame Disparity <br>0x20003 = Multi-angle <br>0x30000 = Baseline MP Primary Image</td></tr></table> </td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>MPImageLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>MPImageStart</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>DependentImage1EntryNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>DependentImage2EntryNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jul 9, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/MWG.html���������������������������������������������������������000644 �000765 �000024 �00000051544 12535277375 020377� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>MWG Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>MWG Tags</h2> <p> The Metadata Working Group (MWG) recommends techniques to allow certain overlapping EXIF, IPTC and XMP tags to be reconciled when reading, and synchronized when writing. The MWG Composite tags below are designed to aid in the implementation of these recommendations. As well, the MWG defines new XMP tags which are listed in the subsequent tables below. See <a href="http://www.metadataworkinggroup.org/">http://www.metadataworkinggroup.org/</a> for the official MWG specification. </p> <h2><a name='Composite'>MWG Composite Tags</a></h2> <p>The table below lists special Composite tags which are used to access other tags based on the MWG 2.0 recommendations. These tags are only accessible when explicitly loaded, but this is done automatically by the exiftool application if MWG is specified as a group for any tag on the command line, or manually with the <code>-use MWG</code> option. Via the API, the MWG Composite tags are loaded by calling &quot;<code>Image::ExifTool::MWG::Load()</code>&quot;.</p> <p>When reading, the value of each MWG tag is <b>Derived From</b> the specified tags based on the MWG guidelines. When writing, the appropriate associated tags are written. The value of the IPTCDigest tag is updated automatically when the IPTC is changed if either the IPTCDigest tag didn&#39;t exist beforehand or its value agreed with the original IPTC digest (indicating that the XMP is synchronized with the IPTC). IPTC information is written only if the original file contained IPTC.</p> <p>Loading the MWG module activates &quot;strict MWG conformance mode&quot;, which has the effect of causing EXIF, IPTC and XMP in non-standard locations to be ignored when reading, as per the MWG recommendations. Instead, a &quot;Warning&quot; tag is generated when non-standard metadata is encountered. This feature may be disabled by setting <code>$Image::ExifTool::MWG::strict = 0</code> in the <a href="../config.html">ExifTool config file</a> (or from your Perl script when using the API). Note that the behaviour when writing is not changed: ExifTool always creates new records only in the standard location, but writes new tags to any EXIF/IPTC/XMP records that exist.</p> <p>Contrary to the EXIF specification, the MWG recommends that EXIF &quot;ASCII&quot; string values be stored as UTF-8. To honour this, the exiftool application sets the default internal EXIF string encoding to &quot;UTF8&quot; when the MWG module is loaded, but via the API this must be done manually by setting the CharsetEXIF option.</p> <p>A complication of the MWG specification is that although the MWG:Creator property may consist of multiple values, the associated EXIF tag (EXIF:Artist) is only a simple string. To resolve this discrepancy the MWG recommends a technique which allows a list of values to be stored in a string by using a semicolon-space separator (with quotes around values if necessary). When the MWG module is loaded, ExifTool automatically implements this policy and changes EXIF:Artist to a list-type tag.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Derived From</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>City</td> <td class=c>Y</td> <td class=n>IPTC:City <br>XMP-photoshop:City <br>XMP-iptcExt:LocationShownCity <br>CurrentIPTCDigest <br>IPTCDigest</td> <td>&nbsp;</td></tr> <tr class=b> <td>Copyright</td> <td class=c>Y</td> <td class=n>EXIF:Copyright <br>IPTC:CopyrightNotice <br>XMP-dc:Rights <br>CurrentIPTCDigest <br>IPTCDigest</td> <td>&nbsp;</td></tr> <tr> <td>Country</td> <td class=c>Y</td> <td class=n>IPTC:Country-PrimaryLocationName <br>XMP-photoshop:Country <br>XMP-iptcExt:LocationShownCountryName <br>CurrentIPTCDigest <br>IPTCDigest</td> <td>&nbsp;</td></tr> <tr class=b> <td>CreateDate</td> <td class=c>Y</td> <td class=n>EXIF:CreateDate <br>EXIF:SubSecTimeDigitized <br>IPTC:DigitalCreationDate <br>IPTC:DigitalCreationTime <br>XMP-xmp:CreateDate <br>CurrentIPTCDigest <br>IPTCDigest</td> <td><span class=s><span class=n>(&quot;creation date of the digital representation&quot; - MWG)</span></span></td></tr> <tr> <td>Creator</td> <td class=c title=' + = List'>Y+</td> <td class=n>EXIF:Artist <br>IPTC:By-line <br>XMP-dc:Creator <br>CurrentIPTCDigest <br>IPTCDigest</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateTimeOriginal</td> <td class=c>Y</td> <td class=n>EXIF:DateTimeOriginal <br>EXIF:SubSecTimeOriginal <br>IPTC:DateCreated <br>IPTC:TimeCreated <br>XMP-photoshop:DateCreated <br>CurrentIPTCDigest <br>IPTCDigest</td> <td><span class=s><span class=n>(&quot;creation date of the intellectual content being shown&quot; - MWG)</span></span></td></tr> <tr> <td>Description</td> <td class=c>Y</td> <td class=n>EXIF:ImageDescription <br>IPTC:Caption-Abstract <br>XMP-dc:Description <br>CurrentIPTCDigest <br>IPTCDigest</td> <td>&nbsp;</td></tr> <tr class=b> <td>Keywords</td> <td class=c title=' + = List'>Y+</td> <td class=n>IPTC:Keywords <br>XMP-dc:Subject <br>CurrentIPTCDigest <br>IPTCDigest</td> <td>&nbsp;</td></tr> <tr> <td>Location</td> <td class=c>Y</td> <td class=n>IPTC:Sub-location <br>XMP-iptcCore:Location <br>XMP-iptcExt:LocationShownSublocation <br>CurrentIPTCDigest <br>IPTCDigest</td> <td>&nbsp;</td></tr> <tr class=b> <td>ModifyDate</td> <td class=c>Y</td> <td class=n>EXIF:ModifyDate <br>EXIF:SubSecTime <br>XMP-xmp:ModifyDate <br>CurrentIPTCDigest <br>IPTCDigest</td> <td><span class=s><span class=n>(&quot;modification date of the digital image file&quot; - MWG)</span></span></td></tr> <tr> <td>Orientation</td> <td class=c>Y</td> <td class=n>EXIF:Orientation</td> <td><table class=cols><tr> <td>1 = Horizontal (normal) <br>2 = Mirror horizontal <br>3 = Rotate 180 <br>4 = Mirror vertical <br>5 = Mirror horizontal and rotate 270 CW <br>6 = Rotate 90 CW <br>7 = Mirror horizontal and rotate 90 CW <br>8 = Rotate 270 CW</td></tr></table> </td></tr> <tr class=b> <td>Rating</td> <td class=c>Y</td> <td class=n>XMP-xmp:Rating</td> <td>&nbsp;</td></tr> <tr> <td>State</td> <td class=c>Y</td> <td class=n>IPTC:Province-State <br>XMP-photoshop:State <br>XMP-iptcExt:LocationShownProvinceState <br>CurrentIPTCDigest <br>IPTCDigest</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Regions'>MWG Regions Tags</a></h2> <p>Image region metadata defined by the MWG 2.0 specification. These tags belong to the ExifTool XMP-mwg-rs group, and as such they may be accessed without the need to load the MWG Composite tags above. See <a href="http://www.metadataworkinggroup.org/">http://www.metadataworkinggroup.org/</a> for the official specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>RegionInfo</td> <td class=c>struct</td> <td>--&gt; <a href='MWG.html#RegionInfo'>MWG RegionInfo Struct</a> <br><span class='n s'>(called Regions by the spec)</span></td></tr> <tr class=b> <td>RegionAppliedToDimensions</td> <td class=c title=' _ = Flattened'>struct_</td> <td>--&gt; <a href='XMP.html#Dimensions'>Dimensions Struct</a> <br><span class='n s'>(RegionsAppliedToDimensions)</span></td></tr> <tr> <td>RegionAppliedToDimensionsH</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RegionsAppliedToDimensionsH)</span></span></td></tr> <tr class=b> <td>RegionAppliedToDimensionsUnit</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(RegionsAppliedToDimensionsUnit)</span></span></td></tr> <tr> <td>RegionAppliedToDimensionsW</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RegionsAppliedToDimensionsW)</span></span></td></tr> <tr class=b> <td>RegionList</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='MWG.html#RegionStruct'>MWG RegionStruct Struct</a> <br><span class='n s'>(RegionsRegionList)</span></td></tr> <tr> <td>RegionArea</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#Area'>Area Struct</a> <br><span class='n s'>(RegionsRegionListArea)</span></td></tr> <tr class=b> <td>RegionAreaD</td> <td class=c title=' _ = Flattened + = List'>real_+</td> <td><span class=s><span class=n>(RegionsRegionListAreaD)</span></span></td></tr> <tr> <td>RegionAreaH</td> <td class=c title=' _ = Flattened + = List'>real_+</td> <td><span class=s><span class=n>(RegionsRegionListAreaH)</span></span></td></tr> <tr class=b> <td>RegionAreaUnit</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(RegionsRegionListAreaUnit)</span></span></td></tr> <tr> <td>RegionAreaW</td> <td class=c title=' _ = Flattened + = List'>real_+</td> <td><span class=s><span class=n>(RegionsRegionListAreaW)</span></span></td></tr> <tr class=b> <td>RegionAreaX</td> <td class=c title=' _ = Flattened + = List'>real_+</td> <td><span class=s><span class=n>(RegionsRegionListAreaX)</span></span></td></tr> <tr> <td>RegionAreaY</td> <td class=c title=' _ = Flattened + = List'>real_+</td> <td><span class=s><span class=n>(RegionsRegionListAreaY)</span></span></td></tr> <tr class=b> <td>RegionBarCodeValue</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(RegionsRegionListBarCodeValue)</span></span></td></tr> <tr> <td>RegionDescription</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(RegionsRegionListDescription)</span></span></td></tr> <tr class=b> <td>RegionExtensions</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='MWG.html#Extensions'>MWG Extensions Struct</a> <br><span class='n s'>(RegionsRegionListExtensions)</span></td></tr> <tr> <td>RegionFocusUsage</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(RegionsRegionListFocusUsage)</span> <br>&#39;EvaluatedNotUsed&#39; = Evaluated, Not Used <br>&#39;EvaluatedUsed&#39; = Evaluated, Used <br>&#39;NotEvaluatedNotUsed&#39; = Not Evaluated, Not Used</span></td></tr> <tr class=b> <td>RegionName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(RegionsRegionListName)</span></span></td></tr> <tr> <td>RegionRotation</td> <td class=c title=' _ = Flattened + = List'>real_+</td> <td><span class=s><span class=n>(RegionsRegionListRotation, not part of MWG 2.0 spec)</span></span></td></tr> <tr class=b> <td>RegionSeeAlso</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(RegionsRegionListSeeAlso)</span></span></td></tr> <tr> <td>RegionType</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(RegionsRegionListType)</span> <br>&#39;BarCode&#39; = BarCode <br>&#39;Face&#39; = Face <br>&#39;Focus&#39; = Focus <br>&#39;Pet&#39; = Pet</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='RegionInfo'>MWG RegionInfo Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AppliedToDimensions</td> <td class=c>Dimensions</td> <td>--&gt; <a href='XMP.html#Dimensions'>Dimensions Struct</a></td></tr> <tr class=b> <td>RegionList</td> <td class=c title=' + = List'>MWG RegionStruct+</td> <td>--&gt; <a href='MWG.html#RegionStruct'>MWG RegionStruct Struct</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='RegionStruct'>MWG RegionStruct Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Area</td> <td class=c>Area</td> <td>--&gt; <a href='XMP.html#Area'>Area Struct</a></td></tr> <tr class=b> <td>BarCodeValue</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Description</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Extensions</td> <td class=c>MWG Extensions</td> <td>--&gt; <a href='MWG.html#Extensions'>MWG Extensions Struct</a></td></tr> <tr> <td>FocusUsage</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Name</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Rotation</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Type</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>SeeAlso</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Extensions'>MWG Extensions Struct</a></h2> <p>This structure may contain any top-level XMP tags, but none have been pre-defined in ExifTool. Since no flattened tags have been pre-defined, RegionExtensions is writable only as a structure (eg. <code>{xmp-dc:creator=me,rating=5}</code>). Fields for this structure are identified using the standard ExifTool tag name (with optional leading group name, and/or trailing language code, and/or trailing <code>#</code> symbol to disable print conversion).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=3 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='Keywords'>MWG Keywords Tags</a></h2> <p>Hierarchical keywords metadata defined by the MWG 2.0 specification. These tags belong to the ExifTool XMP-mwg-kw group. ExifTool unrolls keyword structures to an arbitrary depth of 6 to allow individual levels to be accessed with different tag names, and to avoid infinite recursion. See <a href="http://www.metadataworkinggroup.org/">http://www.metadataworkinggroup.org/</a> for the official specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>KeywordInfo</td> <td class=c>struct</td> <td>--&gt; <a href='MWG.html#KeywordInfo'>MWG KeywordInfo Struct</a> <br><span class='n s'>(called Keywords by the spec)</span></td></tr> <tr class=b> <td>HierarchicalKeywords</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='MWG.html#KeywordStruct'>MWG KeywordStruct Struct</a> <br><span class='n s'>(KeywordsHierarchy)</span></td></tr> <tr> <td>HierarchicalKeywords1Applied</td> <td class=c title=' _ = Flattened + = List'>boolean_+</td> <td><span class=s><span class=n>(KeywordsHierarchyApplied)</span></span></td></tr> <tr class=b> <td>HierarchicalKeywords1Children</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='MWG.html#KeywordStruct'>MWG KeywordStruct Struct</a> <br><span class='n s'>(KeywordsHierarchyChildren)</span></td></tr> <tr> <td>HierarchicalKeywords2Applied</td> <td class=c title=' _ = Flattened + = List'>boolean_+</td> <td><span class=s><span class=n>(KeywordsHierarchyChildrenApplied)</span></span></td></tr> <tr class=b> <td>HierarchicalKeywords2Children</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='MWG.html#KeywordStruct'>MWG KeywordStruct Struct</a> <br><span class='n s'>(KeywordsHierarchyChildrenChildren)</span></td></tr> <tr> <td>HierarchicalKeywords3Applied</td> <td class=c title=' _ = Flattened + = List'>boolean_+</td> <td><span class=s><span class=n>(KeywordsHierarchyChildrenChildrenApplied)</span></span></td></tr> <tr class=b> <td>HierarchicalKeywords3Children</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='MWG.html#KeywordStruct'>MWG KeywordStruct Struct</a> <br><span class='n s'>(KeywordsHierarchyChildrenChildrenChildren)</span></td></tr> <tr> <td>HierarchicalKeywords4Applied</td> <td class=c title=' _ = Flattened + = List'>boolean_+</td> <td><span class=s><span class=n>(KeywordsHierarchyChildrenChildrenChildrenApplied)</span></span></td></tr> <tr class=b> <td>HierarchicalKeywords4Children</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='MWG.html#KeywordStruct'>MWG KeywordStruct Struct</a> <br><span class='n s'>(KeywordsHierarchyChildrenChildrenChildrenChildren)</span></td></tr> <tr> <td>HierarchicalKeywords5Applied</td> <td class=c title=' _ = Flattened + = List'>boolean_+</td> <td><span class=s><span class=n>(KeywordsHierarchyChildrenChildrenChildrenChildrenApplied)</span></span></td></tr> <tr class=b> <td>HierarchicalKeywords5Children</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='MWG.html#KeywordStruct'>MWG KeywordStruct Struct</a> <br><span class='n s'>(KeywordsHierarchyChildrenChildrenChildrenChildrenChildren)</span></td></tr> <tr> <td>HierarchicalKeywords6Applied</td> <td class=c title=' _ = Flattened + = List'>boolean_+</td> <td><span class=s><span class=n>(KeywordsHierarchyChildrenChildrenChildrenChildrenChildrenApplied)</span></span></td></tr> <tr class=b> <td>HierarchicalKeywords6</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(KeywordsHierarchyChildrenChildrenChildrenChildrenChildrenKeyword)</span></span></td></tr> <tr> <td>HierarchicalKeywords5</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(KeywordsHierarchyChildrenChildrenChildrenChildrenKeyword)</span></span></td></tr> <tr class=b> <td>HierarchicalKeywords4</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(KeywordsHierarchyChildrenChildrenChildrenKeyword)</span></span></td></tr> <tr> <td>HierarchicalKeywords3</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(KeywordsHierarchyChildrenChildrenKeyword)</span></span></td></tr> <tr class=b> <td>HierarchicalKeywords2</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(KeywordsHierarchyChildrenKeyword)</span></span></td></tr> <tr> <td>HierarchicalKeywords1</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(KeywordsHierarchyKeyword)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='KeywordInfo'>MWG KeywordInfo Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Hierarchy</td> <td class=c title=' + = List'>MWG KeywordStruct+</td> <td>--&gt; <a href='MWG.html#KeywordStruct'>MWG KeywordStruct Struct</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='KeywordStruct'>MWG KeywordStruct Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Applied</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr class=b> <td>Children</td> <td class=c title=' + = List'>MWG KeywordStruct+</td> <td>--&gt; <a href='MWG.html#KeywordStruct'>MWG KeywordStruct Struct</a></td></tr> <tr> <td>Keyword</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Collections'>MWG Collections Tags</a></h2> <p>Collections metadata defined by the MWG 2.0 specification. These tags belong to the ExifTool XMP-mwg-coll group. See <a href="http://www.metadataworkinggroup.org/">http://www.metadataworkinggroup.org/</a> for the official specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Collections</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='MWG.html#CollectionInfo'>MWG CollectionInfo Struct</a></td></tr> <tr class=b> <td>CollectionName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(CollectionsCollectionName)</span></span></td></tr> <tr> <td>CollectionURI</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(CollectionsCollectionURI)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CollectionInfo'>MWG CollectionInfo Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CollectionName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CollectionURI</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jun 8, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/MXF.html���������������������������������������������������������000644 �000765 �000024 �00000377012 12543237017 020364� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>MXF Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>MXF Tags</h2> <p>Tags extracted from Material Exchange Format files. Tag ID&#39;s are not listed because they are bulky 16-byte binary values.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AAFManufacturerID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AES3PCMDescriptor</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>AFDAndBarData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AGICOAID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AICI?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AIFCSummary?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ANCPacketCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ANCPayloadByteArray</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ANCPayloadSampleCoding</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ANCPayloadSampleCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ANCWrappingType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Abstract</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Abstract</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AccountingReferenceNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ActiveFormatDescriptor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ActiveLinesperFrame</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ActiveSamplesperLine</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ActiveState</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Ad-ID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Address</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>AddressLine</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AddressLine</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AddressNameValueSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AddressSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AdvertisingMaterialReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AestheticValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AlphaMaximumRef</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AlphaMinimumRef</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AlphaSampleDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AlphaTransparency</td> <td class=c>N</td> <td><span class=s>0 = Not Inverted <br>1 = Inverted</span></td></tr> <tr> <td>AlternateName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AlternateName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Alternates?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AnalogDataCodingKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AnalogMetadataCarrier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AnalogMonitoringAndControlCodingKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AnalogSystem</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AnalogVideoSystemName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AnalogVideoSystemName?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AnamorphicLensCharacteristic</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AnchorOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AncillaryResourceID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AngleToNorth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AngularUnitKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Annotation?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Annotation</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>AnnotationCueWordsSet?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AnnotationDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AnnotationDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AnnotationKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AnnotationKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AnnotationParticipantSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AnnotationSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AnnotationSynopsis</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AnnotationSynopsis</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ApplicationEnvironmentID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ApplicationInformationArray?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ApplicationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ApplicationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ApplicationPlatform</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ApplicationPlatform</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ApplicationPlug-InBatch?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ApplicationPlug-InInstanceID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ApplicationProductID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ApplicationScheme?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ApplicationSchemeBatch?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ApplicationSupplierName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ApplicationSupplierName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ApplicationVersionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ApplicationVersionString</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ApplicationVersionString</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ApproximateImageContainerSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ArchiveID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AssetValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AssignedCategoryName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AssignedCategoryName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AssignedCategoryValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AssignedCategoryValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AssociatedMetadataDefinition?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AstronomicalBodyName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AstronomicalBodyName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudienceAppreciation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AudienceRating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudienceReach</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AudienceShare</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioAverageBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AudioCodingSchemeCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioCodingSchemeID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AudioCodingSchemeName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioCompressionAlgorithm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AudioDeviceKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioDeviceParameter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AudioDeviceParameterSetting</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioEnhancementOrModificationDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AudioFirstMix-DownProcess</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioFixedBitrateFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AudioMonoChannelCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioNoiseReductionAlgorithm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AudioReferenceLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioReferenceLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AudioSampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioSampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AudioStereoChannelCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioWatermarkKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AuthenticationFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AuxiliaryBitsMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AvailableRepresentations?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AverageBytesPerSecond</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Award</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>AwardCategory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AwardCategory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AwardName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AwardName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AwardParticipantSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AwardSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BICI?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BackgroundMusicFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BankDetailsSet?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BeginAnchor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BeginAnchor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BextCodingHistory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BextCodingHistory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Bitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BitsPerAudioSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BitsPerPixel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BitsPerPixel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BitsPerSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BlackReferenceLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BlockAlign</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BlockContinuityCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BlockStartOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BoundingRectangle?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BrandMainTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BrandMainTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BrandOriginalTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BrandOriginalTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Branding</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>BrandingSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BroadcastChannel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BroadcastDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BroadcastMediumCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BroadcastMediumKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BroadcastOrganizationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BroadcastOrganizationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BroadcastRegion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BroadcastRegion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BroadcastServiceName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BroadcastTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BroadcasterRightsToCopy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BufferDelay?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BuildingName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BuildingName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Bypass</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BypassOverride</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ByteOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ByteOrder</td> <td class=c>N</td> <td><span class=s>&#39;II&#39; = Little-endian (Intel, II) <br>&#39;MM&#39; = Big-endian (Motorola, MM)</span></td></tr> <tr> <td>CBEStartOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CDCIEssenceDescriptor</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>CISACLegalEntityID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CaptionDescription</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>CaptionDescriptionSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CaptionKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CaptionKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CaptionTitles</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CaptionsDescriptionParticipantSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CaptionsViaTeletext</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CaptureAspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CaptureFilmFrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CaptureGammaEquation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CaptureGammaEquation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CaptureGammaEquation?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CatalogDataStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CatalogDataStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CatalogPrefixNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CatalogingSystemName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CentralTelephoneNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ChannelAssignment?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ChannelCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ChannelHandle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ChannelID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ChannelIDs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ChannelStatusMode</td> <td class=c>N</td> <td><span class=s>[Value 0]</span><table class=cols><tr> <td>0 = No Channel Status Data <br>1 = AES3 Minimum <br>2 = AES3 Standard <br>3 = Fixed 24 Bytes in FixedChannelStatusData <br>4 = Stream of Data in MXF Header Metadata <br>5 = Stream of Data Multiplexed within MXF Body</td></tr></table> </td></tr> <tr> <td>CipherAlgorithm?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CipherAlgorithmAES128CBC?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Citizenship</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Citizenship</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CityName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CityName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ClassDefinitions?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Classification</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>ClassificationAndMarkingSystem</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ClassificationComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ClassificationComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ClassificationNameValueSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ClassificationReason</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ClassificationSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ClassifiedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ClassifyingCountryCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ClipCreationDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ClipFramework</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>ClipID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ClipIDArray?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ClipKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ClipNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ClipNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ClipShotSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CloneCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ClosedBodyPartition?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ClosedCaptionSubtitlesFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ClosedCompleteBodyPartition?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ClosedCompleteHeader</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html#Header'>MXF Header Tags</a></td></tr> <tr class=b> <td>ClosedGOPIndicator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ClosedHeader</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html#Header'>MXF Header Tags</a></td></tr> <tr class=b> <td>CodecDefinition?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CodecDefinition?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CodecDefinitions?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CodecEssenceDescriptor?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CodecEssenceKinds?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CodedContentScanningKind</td> <td class=c>N</td> <td><span class=s>0 = Unknown <br>1 = Progressive <br>2 = Interlaced <br>3 = Mixed</span></td></tr> <tr class=b> <td>CodingLawKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CodingLawName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CodingStyleDefault?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CollectionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CollectionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ColorDescriptor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ColorDescriptor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ColorFieldCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ColorPrimaries</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ColorPrimaries?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ColorRangeLevels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ColorSiting</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ColorimetryCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ColorimetryCode?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CommunicationSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Communications</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>CompleteFooter?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ComponentAttributes?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ComponentDataDefinition</td> <td class=c>N</td> <td><span class=s>&#39;060e2b34.0401.0101.01030201.01000000&#39; = SMPTE 12M Timecode Track <br>&#39;060e2b34.0401.0101.01030201.02000000&#39; = SMPTE 12M Timecode Track with active user bits <br>&#39;060e2b34.0401.0101.01030201.03000000&#39; = SMPTE 309M Timecode Track <br>&#39;060e2b34.0401.0101.01030201.10000000&#39; = Descriptive Metadata Track <br>&#39;060e2b34.0401.0101.01030202.01000000&#39; = Picture Essence Track <br>&#39;060e2b34.0401.0101.01030202.02000000&#39; = Sound Essence Track <br>&#39;060e2b34.0401.0101.01030202.03000000&#39; = Data Essence Track</span></td></tr> <tr> <td>ComponentDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ComponentKLVData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ComponentMaximumRef</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ComponentMinimumRef</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ComponentUserComments?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ComponentsInSequence?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CompositionRendering?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ComputedKeyData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ComputedKeyFrames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ComputedKeySounds</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ComputedKeywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ComputedKeywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ComputedObjectKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ComputedObjectKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ComputedStratumKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ConstantBPictureFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ConsumerRightsToCopy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContactDepartmentName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContactDepartmentName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContactID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContactKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContactKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContactNameValueSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContactsList</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>ContactsListSet?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContainerDefinitions?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContainerLastModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContainerVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContentClassification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContentClassification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContentCodingSystem</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContentMaturityDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContentMaturityGraphic</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContentMaturityRating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContentPackageIndexArray?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContentPackageMetadataLink</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContentStorage?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContentStorageSet</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>ContentValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContextDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContiguousDataFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Contract</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>ContractClauseDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContractClauseDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContractDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContractEntity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContractInstallmentPercentage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContractLineCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContractLineName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContractLineName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContractParticipantSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContractSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContractTermsOfBusiness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContractTermsOfBusiness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContractType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContractType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContractTypeCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContractTypeLink</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ContributionStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContributionStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ControlPointList?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ControlPointTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CopyCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CopyrightLicenseCountryCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CopyrightLicenseRegionCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CopyrightLicenseRegionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CopyrightOwnerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CopyrightOwnerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CopyrightStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CopyrightStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CornerLatitudePoint1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CornerLatitudePoint1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CornerLatitudePoint2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CornerLatitudePoint2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CornerLatitudePoint3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CornerLatitudePoint3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CornerLatitudePoint4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CornerLatitudePoint4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CornerLongitudePoint1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CornerLongitudePoint1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CornerLongitudePoint2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CornerLongitudePoint2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CornerLongitudePoint3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CornerLongitudePoint3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CornerLongitudePoint4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CornerLongitudePoint4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CountryCodeMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CountryCodeMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CountryName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CountryName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CountryName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CountryName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CryptographicContext</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>CryptographicContextID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CryptographicContextLink?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CryptographicContextObject?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CryptographicFramework</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>CryptographicFrameworkLabel?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CryptographicKeyID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Csiz</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Cue-InWords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Cue-InWords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Cue-OutWords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Cue-OutWords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CueWords</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>CulturalValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CurrencyCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CurrencyName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CurrentNumberInSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CurrentNumberInSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CurrentRepeatNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CutPoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DMFramework</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>DMSegment</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>DMSet</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>DMSourceClip</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>DOI?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DVBParentalRating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DataDefinition?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DataDefinitions?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DataDeviceKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DataDeviceParameterName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DataDeviceParameterSetting</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DataEnhancementOrModificationDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DataEssenceCoding</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DataEssenceCodingID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateTimeDropFrameFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DateTimeEmbeddedFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateTimeKind?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DateTimeRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeclassificationDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefaultDataValue?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefaultFadeDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefaultFadeEditRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefaultFadeType?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefaultNamespaceURI</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefaultNamespaceURI</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefaultObject?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefinedName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefinedName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefinitionObjectID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefinitionObjectName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefinitionObjectName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DegradedEffects?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeltaEntryArray?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DerivedFrom</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DescriptionKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DescriptionKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DescriptiveComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DescriptiveComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DescriptiveMetadataApplicationEnvironmentID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DescriptiveMetadataFramework?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DescriptiveMetadataPlug-InID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DescriptiveMetadataScheme?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DescriptiveMetadataSchemes?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DescriptiveMetadataSetReferences?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DescriptiveMetadataSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DescriptiveMetadataTrackIDs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceAbsoluteHeading</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceAbsolutePositionalAccuracy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceAbsoluteSpeed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceAltitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceAltitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceAssetNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceDesignation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceIDKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceKindCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceLatitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceLatitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceLatitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceLongitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceLongitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceLongitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceManufacturerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceManufacturerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceParameterNameValueSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceParameters</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>DeviceParametersSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceRelativeHeading</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceRelativePositionX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceRelativePositionY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceRelativePositionZ</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceRelativePositionalAccuracy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceRelativeSpeed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceUsageDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceUsageDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceXDimension</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DeviceYDimension</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DialNorm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Dictionary?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DictionaryDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DictionaryDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DictionaryIdentifier?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DigitalEncodingBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DigitalMetadataCarrier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DigitalOrAnalogOrigination</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DigitalVideoFileFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DirectorName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DiscPartitionCapacity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DisplayF2Offset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DisplayHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DisplayUnits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DisplayUnits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DisplayWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DisplayXOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DisplayYOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Dither</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DropFrame</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DynamicSourcePackageID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DynamicSourceTrackIDs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>E-mailAddress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>E-mailAddress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EPGProgramSynopsis</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EdgeCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EdgeCodeFilmGauge?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EdgeCodeFormat?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EdgeCodeHeader?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EdgeCodeStart</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EditHint?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EditRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EditUnitFlags</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EditUnitLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EditingEventComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EditingEventComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EffectRendering?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ElectrospatialFormulation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ElementCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ElementDelta</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ElementLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ElementNameList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Emphasis</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EncryptedContainerLabel?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EncryptedSourceValue?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EncryptedTrackFileID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EndAnchor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EndAnchor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EnhancementOrModificationDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EnumerationUnderlyingIntegerType?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EpisodeEndNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EpisodeNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EpisodeNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EpisodeStartNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EpisodicItemSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EssenceContainerArray?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EssenceContainerDataSet</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>EssenceContainerFormat?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EssenceContainerFormat?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EssenceContainers?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EssenceData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EssenceDescription?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EssenceIsIdentified</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EssenceLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EssenceLocators?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EssenceStreamID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Event</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>EventAbsoluteDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EventAbsoluteDuration?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventAbsoluteDurationFrameCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EventAnnotationSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventElapsedTimeToEnd</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EventElapsedTimeToStart</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventEndTimeOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EventEndTimecodeOffset?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventIndication</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EventIndication</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventOrigin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EventSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventStart</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EventStartTimeOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventStartTimecodeOffset?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EventTrack</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>EventTrackEditRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ExCCIData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ExposedAspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ExtendedCaptionsLanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ExtendedClipID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ExtendedClipIDArray?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ExtendedTextLanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ExtendibleElementNameList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Fade-InDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Fade-InType?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Fade-OutDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Fade-OutType?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FamilyName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FamilyName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FaxNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FaxNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FemaleLeadActressName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FestivalName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FestivalName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FieldDominance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FieldFrameTypeCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FieldOfViewHorizontal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FieldOfViewHorizontal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FieldOfViewVertical</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FieldOfViewVerticalFP</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FieldRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FileDescriptor</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>FileDescriptors?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FileSecurityReport</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FileSecurityWave</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FillerData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FilmBatchNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FilmBatchNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FilmCaptureAperture</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FilmColorProcess</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FilmFormatName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FilmFormatName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FilmFormatName?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FilmGauge?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FilmStockKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FilmStockKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FilmStockManufacturerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FilmStockManufacturerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FilmTestParameter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FilmTestResult</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FilmTestResult?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FilmToVideoTransferDirection?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FilmToVideoTransferKind?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FilmToVideoTransferPhase?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FilteringApplied</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FilteringCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FirstBroadcastFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FirstGivenName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FirstGivenName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FirstNumberInSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FirstNumberInSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FirstTransmissionInfo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FixedArrayElementType?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FixedChannelStatusData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FixedUserData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Footer?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FormatDescriptor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FormatDescriptor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FormerFamilyName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FormerFamilyName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FrameCenterElevation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FrameCenterLatitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FrameCenterLatitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FrameCenterLatitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FrameCenterLatitudeLongitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FrameCenterLongitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FrameCenterLongitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FrameCenterLongitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FrameCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FrameCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FrameCountOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FrameLayout</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FramePositionalAccuracy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FrameworkExtendedTextLanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FrameworkTextLanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FrameworkThesaurusName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FrameworkThesaurusName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>FrameworkTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FrameworkTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>GenerationCloneNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>GenerationCopyNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>GenerationID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>GenericDataEssenceDescriptor</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>GenericPackage</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>GenericPayloads?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>GenericPictureEssenceDescriptor</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>GenericSoundEssenceDescriptor</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>GenericTrack</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>GeographicAreaNorthwest?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>GeographicAreaSourceDatum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>GeographicAreaSoutheast?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>GeographicLocation?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>GeographicPolygonCoordinates?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>GeographicPolygonSourceDatum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>GeographicalCoordinates?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>GlobalNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>GraphicKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>GraphicUsageKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>GraphicUsageKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>GroupRelationship</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>GroupSet?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>GroupSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>GroupSynopsis</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>GroupSynopsis</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HMACAlgorithmSHA1128?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HTMLDOCTYPE</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HTMLDOCTYPE</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HTMLMetaDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HTMLMetaDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HardwareAcceleratorFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HasAudioWatermark</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HasVideoWatermark</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HeaderByteCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HistoricalValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HonorsAndQualifications</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HonorsAndQualifications</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HorizontalActionSafePercentage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HorizontalDatum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HorizontalGraphicsSafePercentage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HorizontalSubsampling</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IBTN?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IEEEDeviceID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IEEEManufacturerID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ISAN?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ISBD?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ISBN?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ISCI?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ISMN?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ISO3166CountryCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ISO639-1LanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ISO639-1LanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ISO639CaptionsLanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ISO639TextLanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ISRC?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ISRN?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ISSN?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ISTC?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ISWC?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IdenticalGOPIndicator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Identification</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>Identification</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>IdentificationList?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IdentificationSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IdentificationUL?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IdentifierIssuingAuthority</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IdentifierIssuingAuthority</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IdentifierKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IdentifierValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ImageAlignmentOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageCategory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ImageCoordinateSystem</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageEndOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ImageFormatSet?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ImageSourceDeviceKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageSourceDeviceKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ImageStartOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IncludeSync</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IndexByteCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IndexDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IndexEditRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IndexEntryArray?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IndexStreamID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IndexTableSegment?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IndexingStartPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IndividualAwardName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>InkNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>InputSegment?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>InputSegmentCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>InputSegments?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>InsertMusicFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>InstallmentNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>InstanceUID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IntegrationIndication</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IntegrationIndication</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IntellectualPropertyDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IntellectualPropertyDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IntellectualPropertyLicenseCountryCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IntellectualPropertyLicenseRegionCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IntellectualPropertyLicenseRegionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IntellectualPropertyRights</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IntellectualPropertyRights</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IntendedAFD</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IntentDescriptor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IntentDescriptor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>InterestedPartyName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Interpolation?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>InterpolationDefinitions?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IsConcrete</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IsDubbed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IsLiveProduction</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IsLiveTransmission</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IsOptional</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IsRecording</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IsRepeat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IsSearchable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IsSigned</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IsUniqueIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IsVoiceover</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ItemDesignatorID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ItemID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ItemName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ItemName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ItemValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ItemValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>JFIFMarkerDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>JFIFMarkerDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>JPEG2000PictureSubDescriptor</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>JPEGTableID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>JobFunctionCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>JobFunctionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>JobFunctionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>JobTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>JobTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Jurisdiction</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Jurisdiction</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>KAGSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>KLVDataDefinitions?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>KLVDataParentProperties?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>KLVDataType?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>KLVDataValue?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>KLVMetadataSequence?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>KeyCode?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>KeyData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>KeyDataOrProgram</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>KeyFrame</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>KeyFrameSampleCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>KeyFrames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>KeyPoint</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>KeyPointSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>KeySound</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>KeySounds</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>KeyText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>KeyTimePoint</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>KeypointKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>KeypointKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>KeypointValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>KeypointValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Keywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Keywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LanguageName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LanguageName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LastNumberInSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LastNumberInSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LayerNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LeadingLines</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LengthSystemName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LengthUnitKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LicenseOptionsDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LineNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LinkedApplicationPlug-InInstanceID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LinkedDescriptiveFrameworkPlug-InID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LinkedDescriptiveObjectPlug-InID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LinkedGenerationID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LinkedPackageID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LinkedTimecodeTrackID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LinkedTrackID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LinkingName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LinkingName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalCreationDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LocalDatumAbsolutePositionAccuracy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalDatumRelativePositionAccuracy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LocalEndDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalEventEndDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LocalEventEndDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalEventStartDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LocalEventStartDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalFestivalDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LocalFilePath</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalFilePath</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LocalID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalLastModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LocalModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalStartDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LocalTagEntries?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalTagUniqueID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LocalTagValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalTapeNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LocalTargetID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalTargetID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LocalUserDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Location</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>LocationDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocationDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LocationKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocationKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LocationSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LockedIndicator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LogoFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LowDelayIndicator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LumaEquation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LuminanceSampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MIC?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MICAlgorithm?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MIMECharSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MIMECharSet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MIMEEncoding</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MIMEEncoding</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MIMEMediaType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MIMEMediaType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MPEG2VideoDescriptor</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>MPEG7BiMAccessUnitFrame1?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MPEG7BiMAccessUnitFrame2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MPEG7BiMAccessUnitFrame3?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MPEG7BiMAccessUnitFrame4?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MPEG7BiMAccessUnitFrame5?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MPEG7BiMAccessUnitFrame6?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MPEG7BiMAccessUnitFrame7?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MPEG7BiMAccessUnitFrame8?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MPEG7BiMDecoderInitFrame1?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MPEG7BiMDecoderInitFrame2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MPEG7BiMDecoderInitFrame3?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MPEG7BiMDecoderInitFrame4?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MPEG7BiMDecoderInitFrame5?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MPEG7BiMDecoderInitFrame6?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MPEG7BiMDecoderInitFrame7?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MPEG7BiMDecoderInitFrame8?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MPEGAudioBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MPEGAudioRecodingDataset?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MPEGVideoRecodingDataset?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MagneticDiskNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MagneticTrack</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MainCatalogNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MainName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MainName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MainSponsorName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MainTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MainTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MajorVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MaleLeadActorName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ManufacturerID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManufacturerInformationObject?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MapDatumUsed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MarkIn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MarkOut</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MaterialAbsoluteDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MaterialAbsoluteDuration?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MaterialEndTimeOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MaterialEndTimecodeOffset?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MaterialPackage</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>MaximumAPIVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MaximumBPictureCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MaximumGOPSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MaximumSupportedEngineVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MaximumSupportedPlatformVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MaximumUseCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MediaLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MemberNameList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MemberTypes?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MetadataEncodingSchemeCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MetadataItemName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MetadataItemName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MetadataServerLocators?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MicrophonePlacementTechniques</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MinimumAPIVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MinimumSupportedEngineVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MinimumSupportedPlatformVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MinorVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MissionID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MissionID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MobileTelephoneNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MonoSourceTrackIDs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MultipleDescriptor</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>NITFLayerTargetID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>NITFLayerTargetID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>NMEADocumentText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>NOLACode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>NameSuffix</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>NameSuffix</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>NameValue</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>NamespacePrefix</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>NamespacePrefix</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>NamespacePrefixes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>NamespacePrefixes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>NamespaceURI</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>NamespaceURI</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>NamespaceURIs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>NamespaceURIs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Nationality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Nationality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>NatureOfPersonality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>NatureOfPersonality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>NetworkLocator</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>NextNumberInSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>NextNumberInSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>NielsenStreamIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>NominationCategory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>NominationCategory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Non-USClassifyingCountryCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ObjectAreaDimension</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ObjectClass?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ObjectClassDefinition?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ObjectCountryCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ObjectCountryCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ObjectCountryCodeMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ObjectDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ObjectDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ObjectDescriptionCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ObjectHorizontalAverageDimension</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ObjectIdentificationConfidence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ObjectKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ObjectKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ObjectModelVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ObjectName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ObjectRegionCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ObjectRegionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ObjectVerticalAverageDimension</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ObliquityAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OffsetToIndexTable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OffsetToIndexTable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OffsetToMetadata</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OffsetToMetadata</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OpenBodyPartition?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OpenCompleteBodyPartition?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OpenCompleteHeader</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html#Header'>MXF Header Tags</a></td></tr> <tr> <td>OpenHeader</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html#Header'>MXF Header Tags</a></td></tr> <tr class=b> <td>OperatingSystemInterpretations</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OperationCategory?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OperationDataDefinition?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OperationDefinitionID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OperationDefinitions?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OperationParameters?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OperationalPatternUL?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OpticalDiscNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OpticalTestParameterName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OpticalTestResult</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OpticalTestResult</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OpticalTrack</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Organisation</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>OrganizationCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OrganizationCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OrganizationID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OrganizationID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OrganizationIDKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OrganizationIDKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OrganizationKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OrganizationKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OrganizationMainName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OrganizationMainName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OrganizationSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OrganizationalProgramNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OrganizationalProgramNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Origin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OriginCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OriginalExtendedSpokenPrimaryLanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OriginalProducerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OriginalProducerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OriginalTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OriginalTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OtherGivenNames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OtherGivenNames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OtherValues</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PII?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>POSIXMicroseconds</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PackLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PackageAttributes?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PackageID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PackageKLVData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PackageLastModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PackageMarkInPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PackageMarkOutPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PackageMarker?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PackageName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PackageName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PackageTimelineMarkerRef?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PackageTracks?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PackageUsageKind?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PackageUserComments?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Packages?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PaddingBits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Palette?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PaletteLayout?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PanScanInformation?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ParameterDataType?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ParameterDefinition?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ParameterDefinitions?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Parameters?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ParentClass?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Participant</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>ParticipantID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ParticipantOrganizationSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PartitionMetadata?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Password</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Password</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PayeeAccountName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PayeeAccountNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PayeeAccountSortCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PayerAccountName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PayerAccountNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PayerAccountSortCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PaymentDueDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PaymentsSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PeakChannelCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PeakEnvelope</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PeakEnvelopeBlockSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PeakEnvelopeData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PeakEnvelopeData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PeakEnvelopeFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PeakEnvelopeTimestamp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PeakEnvelopeVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PeakFrameCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PeakOfPeaksPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PerceivedDisplayFormatCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PerceivedDisplayFormatName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PerforationsPerFrame</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PerforationsPerFrame</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Person</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>PersonDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PersonDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PersonOrganizationSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PersonSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PhysicalInstanceKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PhysicalMediaLength?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PhysicalMediaLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PictureComponentSizing?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PictureDisplayRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PictureFormat</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>PixelLayout?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PlaceKeyword</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PlaceKeyword</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PlaceName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PlaceName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PlaintextOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PlatformDesignation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PlatformDesignation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PlatformHeadingAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PlatformModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PlatformPitchAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PlatformRollAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PlatformSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Plug-InAPIID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Plug-InCategoryID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Plug-InDefinitions?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Plug-InEngineID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Plug-InLocatorSet?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Plug-InPlatformID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PointsPerPeakValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PolarCharacteristic</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PosTableArray?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PositionInSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PositionTable?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PositionTableCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PositionTableIndexing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PositionWithinViewportImageXCoordinate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PositionWithinViewportImageYCoordinate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PostCodeForPostbox</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PostalCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PostalCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PostalTown</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PostalTown</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PostboxNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Preface</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>PresentationAspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PresentationGammaEquation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PresentationGammaEquation?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PresenterName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PreviousNumberInSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PreviousNumberInSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PreviousRepeatNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PrimaryExtendedSpokenLanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PrimaryOriginalLanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PrimaryPackage?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PrimarySpokenLanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Primer</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>Processing</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>ProcessingSet?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProducerName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProductFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProductFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProductionFramework</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>ProductionOrganizationRole</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProductionOrganizationRole</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProductionScriptReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProductionScriptReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProductionSettingPeriodSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProfileAndLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProgramAwardName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProgramCommercialMaterialReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProgramIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProgramIdentifierString</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProgramKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProgramMaterialClassificationCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProgramNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProgramSupportMaterialReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProgrammingGroupKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProgrammingGroupKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProgrammingGroupTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProgrammingGroupTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProjectName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProjectName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ProjectNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProjectSet?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Projects</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>Properties?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PropertyType?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Publication</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>PublicationSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PublishingMediumName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PublishingMediumName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PublishingOrganizationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PublishingOrganizationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PublishingRegionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PublishingRegionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PublishingServiceName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PublishingServiceName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PulldownFieldDominance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PulldownSequence?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PurchaserAccountName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PurchaserAccountName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PurchaserAccountNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PurchaserIdentificationKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PurchaserIdentificationValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PurchasingDepartment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PurchasingOrganizationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Purpose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Purpose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>QltyBasicData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>QltyBasicData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>QltyCueSheet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>QltyCueSheet</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>QltyEndOfModulation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>QltyEndOfModulation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>QltyOperatorComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>QltyOperatorComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>QltyQualityEvent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>QltyQualityEvent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>QltyQualityParameter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>QltyQualityParameter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>QltyStartOfModulation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>QltyStartOfModulation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>QualityFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>QuantizationDefault?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RGBAEssenceDescriptor</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>RIFFChunkData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RIFFChunkID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RIFFChunkLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RP217DataStreamPID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RP217VideoStreamPID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RandomIndexMetadata?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RandomIndexMetadataV10?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Rating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RecordedFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RecordedFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RecordedTrackNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RecordingLabelName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RecordingLabelName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ReelOrRollNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegionCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RegionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RegisterAction</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegisterAdministrationArray?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RegisterAdministrationNotes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegisterAdministrationObject?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RegisterApproverName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegisterChildEntryArray?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RegisterCreationTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegisterEditorName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RegisterEntryAdministrationObject?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegisterEntryArray?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RegisterEntryStatus?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegisterItemDefiningDocumentName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RegisterItemDefinition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegisterItemHierarchyLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RegisterItemIntroductionVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegisterItemName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RegisterItemNotes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegisterItemOriginatorName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RegisterItemStatusChangeDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegisterItemSymbol?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RegisterItemUL?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegisterKind?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RegisterReleaseDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegisterStatusKind?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RegisterUserName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegisterUserTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RegisterVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegistrantName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RelatedMaterialDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RelatedMaterialDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RelatedMaterialLocators?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RelativePositionInSequenceName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RelativePositionInSequenceOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RelativeScope</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RelativeTrack</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ReleasableCountryCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ReleasableCountryCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RenamedType?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ResourceID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RestrictionsonUse</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ReversePlay</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ReversedByteOrder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Rights</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>RightsComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RightsComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RightsConditionDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RightsConditionDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RightsManagementAuthority</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RightsManagementAuthority</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RightsSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RightsStartDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RightsStopDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Rightsholder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Rightsholder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RoleName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RoleName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RoomNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RoomNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RoomOrSuiteName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RoomOrSuiteName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RootFormatVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RootMetaDictionary?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RootObjectDirectory?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RootPreface?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RoundedCaptureFilmFrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RoundedTimecodeTimebase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RoundingLaw</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RoundingMethodCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RoyaltyIncomeInformation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RoyaltyPaymentInformation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Rsiz</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SDKVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SICI?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SMPTE12MUserDateTime?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SMPTE309MUserDateTime?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SMPTE337MDataStreamNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SMPTEUL?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SalesContractNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Salutation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Salutation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SampleIndex?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SampledHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SampledWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SampledXOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SampledYOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SamplingHierarchyCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SamplingStructureCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ScanningDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SceneFramework</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>SceneNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SceneNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SceneSettingPeriodSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SceneShotSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ScramblingKeyKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ScramblingKeyValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Scripting</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>ScriptingKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ScriptingKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ScriptingLocators?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ScriptingSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ScriptingText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ScriptingText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SeasonEpisodeNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SeasonEpisodeTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SecondGivenName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SecondGivenName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SecondaryExtendedSpokenLanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SecondaryOriginalExtendedSpokenLanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SecondaryOriginalLanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SecondarySpokenLanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SecondaryTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SecondaryTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SectorSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SecurityClassification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SecurityClassification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SecurityClassificationCaveats</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SecurityClassificationCaveats</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Selected?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SensorMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SensorRollAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SensorSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SensorType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SensorTypeCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Sequence?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SequenceOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SequenceSet</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>SeriesNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SeriesNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SeriesinaSeriesGroupCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SetElementType?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SettingCityName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SettingCityName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SettingCountryCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SettingCountryName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SettingCountryName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SettingDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SettingDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SettingDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SettingPeriod</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>SettingPeriodDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SettingPeriodDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SettingPostalCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SettingPostalCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SettingRegionCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SettingRegionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SettingRoomNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SettingRoomNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SettingStateOrProvinceOrCountyName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SettingStateOrProvinceOrCountyName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SettingStreetName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SettingStreetName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SettingStreetNumberOrBuildingName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SettingStreetNumberOrBuildingName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SettingTownName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SettingTownName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ShimName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ShootingCountryCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ShootingRegionCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ShootingRegionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Shot</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>ShotComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ShotComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ShotCommentKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ShotCommentKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ShotCueWordsSet?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ShotDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ShotDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ShotDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ShotList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ShotLocationSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ShotParticipantRoleSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ShotPersonSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ShotStartPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ShotTrackIDs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SideNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Signal-to-NoiseRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SignalFormCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SignalStandard</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SignalStandard</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SignatureTuneFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SimpleFlaggingCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SingleSequenceFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Size</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SlantRange</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SlateInformation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SlateTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SliceCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SliceNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SliceOffsetList?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Software-OnlySupportFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SourceClip?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SourceContainerFormat?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SourceImageCenterXCoordinate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SourceImageCenterYCoordinate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SourceIndex?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SourceKey?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SourceLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SourceOrganization</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SourceOrganization</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SourcePackage</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>SourcePackageID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SourceSpecies?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SourceTrackID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SourceTrackIDs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SourceValue?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SpeedChangeEffectFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SplicingMetadata?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StartTimeRelativeToReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StartTimeRelativeToReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StartTimecode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StartTimecodeRelativeToReference?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StateOrProvinceOrCountyName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StateOrProvinceOrCountyName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StaticTrack</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>StillFrame?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StorageDeviceKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StorageKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StorageKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StorageKindCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StorageMediaID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StorageMediaKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StoredANCLineNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StoredF2Offset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StoredVBILineNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StratumKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StreamData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StreamElementType?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StreamID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StreamOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StreamPositionIndicator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StreamPositionIndicator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StreamPositionIndicator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StreamPositionIndicator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StreetName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StreetName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StreetNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StreetNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>StringElementType?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>StructuralComponent</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>Sub-descriptors?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SubDescriptor?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SubDescriptors?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SubjectAbsoluteHeading</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SubjectAbsoluteSpeed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SubjectDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SubjectName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SubjectName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SubjectRelativeHeading</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SubjectRelativePositionalAccuracy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SubjectRelativeSpeed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SubtitleDatafileFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SubtitlesPresent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SupplementaryName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SupplementaryName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SupplementaryOrganizationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SupplementaryOrganizationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SupplierAccountName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SupplierAccountName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SupplierAccountNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SupplierIdentificationKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SupplierIdentificationValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SupplyContractNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SupplyingDepartmentName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SupportOrAdministrationStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SupportOrAdministrationStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SupportOrganizationRole</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SupportOrganizationRole</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SystemNameOrNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TIFFSummary?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TaggedValueDefinitions?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TaggedValueParentProperties?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TakeNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TapeBatchNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TapeBatchNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TapeCapacity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TapeFormat?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TapeFormulation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TapeFormulation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TapeManufacturer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TapeManufacturer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TapePartitionCapacity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TapeShellKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TapeShellKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TapeStock</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TapeStock</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TargetAudience</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TargetAudience</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TargetClassOfStrongReference?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TargetClassOfWeakReference?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TargetSet?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TargetWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TechnicalValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TelephoneNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TelephoneNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TeletextSubtitlesAvailable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TeletextSubtitlesFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TemporalOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TerminatingFillerData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TextLocator</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>TextlessBlackDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TextlessMaterial</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TextualDescriptionKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TextualDescriptionKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Theme</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Theme</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ThemeMusicFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ThesaurusName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ThesaurusName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ThirdGivenName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ThirdGivenName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimePeriodName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TimePeriodName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimeSystemOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TimeUnitKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimebaseReferenceTrackID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TimecodeArray?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimecodeComponent</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>TimecodeCreationDateTime?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimecodeEndDateTime?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TimecodeEventEndDateTime?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimecodeEventStartDateTime?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TimecodeKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimecodeLastModifyDate?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TimecodeModifyDate?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimecodeSourceKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TimecodeStartDateTime?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimecodeStreamData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TimecodeTimebase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimecodeTimebase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TimecodeUserBitsFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimepointValue?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TimingBiasCorrection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimingBiasCorrectionDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TitleKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TitleKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Titles</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>TitlesSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ToleranceInterpolationMethod?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ToleranceMode?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ToleranceWindow?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ToolkitVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TotalCurrencyAmount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TotalEpisodeCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TotalIncome</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TotalLinesperFrame</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TotalNumberInSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TotalPayment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TotalSamplesperLine</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Track</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr> <td>TrackID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TrackName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TrackName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TrackNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TrackNumberBatch</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Tracks?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TrafficID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TrailingLines</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TranscriptReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TranscriptReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TransferFilmFrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TransitionEffect?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TransmissionID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TransportStreamID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TripletSequenceNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TypeDefinitionElementValueList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TypeDefinitionExtendibleElementValues?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TypeDefinitions?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UCSEncoding</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UPID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UPN?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>URL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>URL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>URL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>URL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>URN</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UTCEndDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UTCEventEndDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UTCEventEndDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UTCEventStartDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UTCEventStartDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UTCInstantDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UTCInstantDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UTCLastModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UTCLastModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UTCStartDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UTCStartDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UTCUserDateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UniformDataFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UnknownBWFChunks?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UpstreamAudioCompressionAlgorithm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UseDefaultValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UserDataMode?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UserName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>UserName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>UserPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>V10IndexTableSegment?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VBEEndOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VBIDataDescriptor</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>VBILineCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VBIPayloadByteArray</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VBIPayloadSampleCoding</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VBIPayloadSampleCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VBIWrappingType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VC-1AverageBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VC-1BPictureCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VC-1CodedContentType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VC-1IdenticalGOP</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VC-1InitializationMetadata?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VC-1Level</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VC-1MaximumBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VC-1MaximumGOP</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VC-1Profile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VC-1SingleSequence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Value?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VariableArrayElementType?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VersionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VersionNumberString</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VersionNumberString</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VersionTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VersionTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VerticalActionSafePercentage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VerticalDatum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VerticalGraphicsSafePercentage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VerticalSub-sampling</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoAndFilmFrameRelationship</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoAverageBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoClipDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoCodingSchemeID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoColorKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoCompressionAlgorithm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoDeviceKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoDeviceParameterName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoDeviceParameterSetting</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoFixedBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoIndexArray?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoLineMap</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoNoiseReductionAlgorithm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoOrImageCompressionAlgorithm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoPayloadIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoPayloadIdentifier2002</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoTestParameter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoTestResult</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoTestResult</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VideoWatermarkKind</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ViewportAspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ViewportHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ViewportImageCenterCCoordinate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ViewportImageCenterYCoordinate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ViewportWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>VoiceTalentName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>WAVESummary?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>WaveAudioDescriptor</td> <td class=c>-</td> <td>--&gt; <a href='MXF.html'>MXF Tags</a></td></tr> <tr class=b> <td>Weighting</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>WhiteReferenceLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Work-in-ProgressFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>WorkingTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>WorkingTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>XMLDocumentText?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>XMLDocumentText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>XMLDocumentText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>XMLDocumentText?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>XOsiz</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>XTOsiz</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>XTsiz</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Xsiz</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>YOsiz</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>YTOsiz</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>YTsiz</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Ysiz</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Header'>MXF Header Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>MXFVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>FooterPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>HeaderSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jun 26, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Nikon.html�������������������������������������������������������000644 �000765 �000024 �00000513175 12643477012 021014� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Nikon Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Nikon Tags</h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>MakerNoteVersion</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>ISO</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>ColorMode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>Quality</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>WhiteBalance</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0006 = 6'>0x0006</td> <td>Sharpness</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0007 = 7'>0x0007</td> <td>FocusMode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0008 = 8'>0x0008</td> <td>FlashSetting</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0009 = 9'>0x0009</td> <td>FlashType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000b = 11'>0x000b</td> <td>WhiteBalanceFineTune</td> <td class=c>int16s[n]</td> <td>&nbsp;</td></tr> <tr> <td title='0x000c = 12'>0x000c</td> <td>WB_RBLevels</td> <td class=c>rational64u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000d = 13'>0x000d</td> <td>ProgramShift</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x000e = 14'>0x000e</td> <td>ExposureDifference</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000f = 15'>0x000f</td> <td>ISOSelection</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>DataDump</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0011 = 17'>0x0011</td> <td>PreviewIFD</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#PreviewIFD'>Nikon PreviewIFD Tags</a></td></tr> <tr> <td title='0x0012 = 18'>0x0012</td> <td>FlashExposureComp</td> <td class=c>undef[4]</td> <td><span class=s><span class=n>(may be set even if flash does not fire. Does not include the effect of flash bracketing.)</span></span></td></tr> <tr class=b> <td title='0x0013 = 19'>0x0013</td> <td>ISOSetting</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0014 = 20'>0x0014</td> <td>ColorBalanceA <br>NRWData?</td> <td class=c>-<br>Y</td> <td>--&gt; <a href='Nikon.html#ColorBalanceA'>Nikon ColorBalanceA Tags</a> <br><span class=n>(large unknown block in NRW images, not copied to JPEG images)</span></td></tr> <tr class=b> <td title='0x0016 = 22'>0x0016</td> <td>ImageBoundary</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0017 = 23'>0x0017</td> <td>ExternalFlashExposureComp</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0018 = 24'>0x0018</td> <td>FlashExposureBracketValue</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0019 = 25'>0x0019</td> <td>ExposureBracketValue</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001a = 26'>0x001a</td> <td>ImageProcessing</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x001b = 27'>0x001b</td> <td>CropHiSpeed</td> <td class=c title=' ~ = Writable only with -n'>int16u[7]~</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001c = 28'>0x001c</td> <td>ExposureTuning</td> <td class=c>undef[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x001d = 29'>0x001d</td> <td>SerialNumber</td> <td class=c title=' ! = Unsafe'>string!</td> <td><span class=s><span class=n>(this value is used as a key to decrypt other information -- writing this tag causes the other information to be re-encrypted with the new key)</span></span></td></tr> <tr class=b> <td title='0x001e = 30'>0x001e</td> <td>ColorSpace</td> <td class=c>int16u</td> <td><span class=s>1 = sRGB <br>2 = Adobe RGB</span></td></tr> <tr> <td title='0x001f = 31'>0x001f</td> <td>VRInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#VRInfo'>Nikon VRInfo Tags</a></td></tr> <tr class=b> <td title='0x0020 = 32'>0x0020</td> <td>ImageAuthentication</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x0021 = 33'>0x0021</td> <td>FaceDetect</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#FaceDetect'>Nikon FaceDetect Tags</a></td></tr> <tr class=b> <td title='0x0022 = 34'>0x0022</td> <td>ActiveD-Lighting</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Low <br>3 = Normal <br>5 = High <br>7 = Extra High</td><td>&nbsp;&nbsp;</td> <td>8 = Extra High 1 <br>9 = Extra High 2 <br>10 = Extra High 3 <br>11 = Extra High 4 <br>65535 = Auto</td></tr></table> </td></tr> <tr> <td title='0x0023 = 35'>0x0023</td> <td>PictureControlData</td> <td class=c title=' ! = Unsafe'>undef!</td> <td>--&gt; <a href='Nikon.html#PictureControl'>Nikon PictureControl Tags</a></td></tr> <tr class=b> <td title='0x0024 = 36'>0x0024</td> <td>WorldTime</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#WorldTime'>Nikon WorldTime Tags</a></td></tr> <tr> <td title='0x0025 = 37'>0x0025</td> <td>ISOInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#ISOInfo'>Nikon ISOInfo Tags</a></td></tr> <tr class=b> <td title='0x002a = 42'>0x002a</td> <td>VignetteControl</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = Low <br>3 = Normal <br>5 = High</span></td></tr> <tr> <td title='0x002b = 43'>0x002b</td> <td>DistortInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#DistortInfo'>Nikon DistortInfo Tags</a></td></tr> <tr class=b> <td title='0x002c = 44'>0x002c</td> <td>UnknownInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#UnknownInfo'>Nikon UnknownInfo Tags</a></td></tr> <tr> <td title='0x0032 = 50'>0x0032</td> <td>UnknownInfo2</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#UnknownInfo2'>Nikon UnknownInfo2 Tags</a></td></tr> <tr class=b> <td title='0x0035 = 53'>0x0035</td> <td>HDRInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#HDRInfo'>Nikon HDRInfo Tags</a></td></tr> <tr> <td title='0x0039 = 57'>0x0039</td> <td>LocationInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#LocationInfo'>Nikon LocationInfo Tags</a></td></tr> <tr class=b> <td title='0x003d = 61'>0x003d</td> <td>BlackLevel</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0080 = 128'>0x0080</td> <td>ImageAdjustment</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0081 = 129'>0x0081</td> <td>ToneComp</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0082 = 130'>0x0082</td> <td>AuxiliaryLens</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0083 = 131'>0x0083</td> <td>LensType</td> <td class=c>int8u</td> <td><span class=s>Bit 0 = MF <br>Bit 1 = D <br>Bit 2 = G <br>Bit 3 = VR</span></td></tr> <tr> <td title='0x0084 = 132'>0x0084</td> <td>Lens</td> <td class=c>rational64u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0085 = 133'>0x0085</td> <td>ManualFocusDistance</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0086 = 134'>0x0086</td> <td>DigitalZoom</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0087 = 135'>0x0087</td> <td>FlashMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Did Not Fire <br>1 = Fired, Manual <br>3 = Not Ready <br>7 = Fired, External <br>8 = Fired, Commander Mode <br>9 = Fired, TTL Mode</td></tr></table> </td></tr> <tr> <td title='0x0088 = 136'>0x0088</td> <td>AFInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#AFInfo'>Nikon AFInfo Tags</a> <br>--&gt; <a href='Nikon.html#AFInfo'>Nikon AFInfo Tags</a></td></tr> <tr class=b> <td title='0x0089 = 137'>0x0089</td> <td>ShootingMode</td> <td class=c title=' ~ = Writable only with -n'>int16u~</td> <td><span class=s><span class=n>(for the D70, Bit 5 = Unused LE-NR Slowdown)</span> <br>Bit 0 = Continuous <br>Bit 1 = Delay <br>Bit 2 = PC Control <br>Bit 3 = Self-timer <br>Bit 4 = Exposure Bracketing <br>Bit 5 = Auto ISO <br>Bit 6 = White-Balance Bracketing <br>Bit 7 = IR Control <br>Bit 8 = D-Lighting Bracketing</span></td></tr> <tr> <td title='0x008b = 139'>0x008b</td> <td>LensFStops</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x008c = 140'>0x008c</td> <td>ContrastCurve</td> <td class=c title=' ! = Unsafe'>undef!</td> <td>&nbsp;</td></tr> <tr> <td title='0x008d = 141'>0x008d</td> <td>ColorHue</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x008f = 143'>0x008f</td> <td>SceneMode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0090 = 144'>0x0090</td> <td>LightSource</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0091 = 145'>0x0091</td> <td>ShotInfoD40 <br>ShotInfoD80 <br>ShotInfoD90 <br>ShotInfoD3a <br>ShotInfoD3b <br>ShotInfoD3X <br>ShotInfoD3S <br>ShotInfoD300a <br>ShotInfoD300b <br>ShotInfoD300S <br>ShotInfoD700 <br>ShotInfoD800 <br>ShotInfoD810 <br>ShotInfoD5000 <br>ShotInfoD5100 <br>ShotInfoD5200 <br>ShotInfoD7000 <br>ShotInfoD4 <br>ShotInfoD4S <br>ShotInfo02xx <br>ShotInfoUnknown</td> <td class=c>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-</td> <td>--&gt; <a href='Nikon.html#ShotInfoD40'>Nikon ShotInfoD40 Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD80'>Nikon ShotInfoD80 Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD90'>Nikon ShotInfoD90 Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD3a'>Nikon ShotInfoD3a Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD3b'>Nikon ShotInfoD3b Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD3X'>Nikon ShotInfoD3X Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD3S'>Nikon ShotInfoD3S Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD300a'>Nikon ShotInfoD300a Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD300b'>Nikon ShotInfoD300b Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD300S'>Nikon ShotInfoD300S Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD700'>Nikon ShotInfoD700 Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD800'>Nikon ShotInfoD800 Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD810'>Nikon ShotInfoD810 Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD5000'>Nikon ShotInfoD5000 Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD5100'>Nikon ShotInfoD5100 Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD5200'>Nikon ShotInfoD5200 Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD7000'>Nikon ShotInfoD7000 Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD4'>Nikon ShotInfoD4 Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfoD4S'>Nikon ShotInfoD4S Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfo'>Nikon ShotInfo Tags</a> <br>--&gt; <a href='Nikon.html#ShotInfo'>Nikon ShotInfo Tags</a></td></tr> <tr> <td title='0x0092 = 146'>0x0092</td> <td>HueAdjustment</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0093 = 147'>0x0093</td> <td>NEFCompression</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Lossy (type 1) <br>2 = Uncompressed <br>3 = Lossless <br>4 = Lossy (type 2) <br>6 = Uncompressed (reduced to 12 bit) <br>8 = Small</td></tr></table> </td></tr> <tr> <td title='0x0094 = 148'>0x0094</td> <td>Saturation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0095 = 149'>0x0095</td> <td>NoiseReduction</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0096 = 150'>0x0096</td> <td>NEFLinearizationTable</td> <td class=c title=' ! = Unsafe'>undef!</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0097 = 151'>0x0097</td> <td>ColorBalance0100 <br>ColorBalance0102 <br>ColorBalance0103 <br>ColorBalance0205 <br>ColorBalance0209 <br>ColorBalance02 <br>ColorBalance0211 <br>ColorBalance0213 <br>ColorBalance0215 <br>ColorBalanceUnknown02 <br>ColorBalanceUnknown04 <br>ColorBalanceUnknown</td> <td class=c>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-</td> <td>--&gt; <a href='Nikon.html#ColorBalance1'>Nikon ColorBalance1 Tags</a> <br>--&gt; <a href='Nikon.html#ColorBalance2'>Nikon ColorBalance2 Tags</a> <br>--&gt; <a href='Nikon.html#ColorBalance3'>Nikon ColorBalance3 Tags</a> <br>--&gt; <a href='Nikon.html#ColorBalance2'>Nikon ColorBalance2 Tags</a> <br>--&gt; <a href='Nikon.html#ColorBalance4'>Nikon ColorBalance4 Tags</a> <br>--&gt; <a href='Nikon.html#ColorBalance2'>Nikon ColorBalance2 Tags</a> <br>--&gt; <a href='Nikon.html#ColorBalance4'>Nikon ColorBalance4 Tags</a> <br>--&gt; <a href='Nikon.html#ColorBalance2'>Nikon ColorBalance2 Tags</a> <br>--&gt; <a href='Nikon.html#ColorBalance4'>Nikon ColorBalance4 Tags</a> <br>--&gt; <a href='Nikon.html#ColorBalanceUnknown'>Nikon ColorBalanceUnknown Tags</a> <br>--&gt; <a href='Nikon.html#ColorBalanceUnknown'>Nikon ColorBalanceUnknown Tags</a> <br>--&gt; <a href='Nikon.html#ColorBalanceUnknown'>Nikon ColorBalanceUnknown Tags</a></td></tr> <tr> <td title='0x0098 = 152'>0x0098</td> <td>LensData0100 <br>LensData0101 <br>LensData0201 <br>LensData0204 <br>LensData0400 <br>LensDataUnknown</td> <td class=c>-<br>-<br>-<br>-<br>-<br>-</td> <td>--&gt; <a href='Nikon.html#LensData00'>Nikon LensData00 Tags</a> <br>--&gt; <a href='Nikon.html#LensData01'>Nikon LensData01 Tags</a> <br>--&gt; <a href='Nikon.html#LensData01'>Nikon LensData01 Tags</a> <br>--&gt; <a href='Nikon.html#LensData0204'>Nikon LensData0204 Tags</a> <br>--&gt; <a href='Nikon.html#LensData0400'>Nikon LensData0400 Tags</a> <br>--&gt; <a href='Nikon.html#LensDataUnknown'>Nikon LensDataUnknown Tags</a></td></tr> <tr class=b> <td title='0x0099 = 153'>0x0099</td> <td>RawImageCenter</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x009a = 154'>0x009a</td> <td>SensorPixelSize</td> <td class=c>rational64u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x009c = 156'>0x009c</td> <td>SceneAssist</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x009e = 158'>0x009e</td> <td>RetouchHistory</td> <td class=c>int16u[10]</td> <td><span class=s>[Values 0-9]</span><table class=cols><tr> <td>0 = None <br>3 = B &amp; W <br>4 = Sepia <br>5 = Trim <br>6 = Small Picture <br>7 = D-Lighting <br>8 = Red Eye <br>9 = Cyanotype <br>10 = Sky Light <br>11 = Warm Tone <br>12 = Color Custom <br>13 = Image Overlay <br>14 = Red Intensifier <br>15 = Green Intensifier <br>16 = Blue Intensifier <br>17 = Cross Screen</td><td>&nbsp;&nbsp;</td> <td>18 = Quick Retouch <br>19 = NEF Processing <br>23 = Distortion Control <br>25 = Fisheye <br>26 = Straighten <br>29 = Perspective Control <br>30 = Color Outline <br>31 = Soft Filter <br>32 = Resize <br>33 = Miniature Effect <br>34 = Skin Softening <br>35 = Selected Frame <br>37 = Color Sketch <br>38 = Selective Color <br>40 = Drawing</td></tr></table> </td></tr> <tr class=b> <td title='0x00a0 = 160'>0x00a0</td> <td>SerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x00a2 = 162'>0x00a2</td> <td>ImageDataSize</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00a5 = 165'>0x00a5</td> <td>ImageCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x00a6 = 166'>0x00a6</td> <td>DeletedImageCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00a7 = 167'>0x00a7</td> <td>ShutterCount</td> <td class=c title=' ! = Unsafe'>int32u!</td> <td><span class=s><span class=n>(this value is used as a key to decrypt other information -- writing this tag causes the other information to be re-encrypted with the new key)</span></span></td></tr> <tr> <td title='0x00a8 = 168'>0x00a8</td> <td>FlashInfo0100 <br>FlashInfo0102 <br>FlashInfo0103 <br>FlashInfoUnknown</td> <td class=c>-<br>-<br>-<br>-</td> <td>--&gt; <a href='Nikon.html#FlashInfo0100'>Nikon FlashInfo0100 Tags</a> <br>--&gt; <a href='Nikon.html#FlashInfo0102'>Nikon FlashInfo0102 Tags</a> <br>--&gt; <a href='Nikon.html#FlashInfo0103'>Nikon FlashInfo0103 Tags</a> <br>--&gt; <a href='Nikon.html#FlashInfoUnknown'>Nikon FlashInfoUnknown Tags</a></td></tr> <tr class=b> <td title='0x00a9 = 169'>0x00a9</td> <td>ImageOptimization</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x00aa = 170'>0x00aa</td> <td>Saturation</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00ab = 171'>0x00ab</td> <td>VariProgram</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x00ac = 172'>0x00ac</td> <td>ImageStabilization</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00ad = 173'>0x00ad</td> <td>AFResponse</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x00b0 = 176'>0x00b0</td> <td>MultiExposure</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#MultiExposure'>Nikon MultiExposure Tags</a></td></tr> <tr class=b> <td title='0x00b1 = 177'>0x00b1</td> <td>HighISONoiseReduction</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Minimal <br>2 = Low <br>3 = Medium Low</td><td>&nbsp;&nbsp;</td> <td>4 = Normal <br>5 = Medium High <br>6 = High</td></tr></table> </td></tr> <tr> <td title='0x00b3 = 179'>0x00b3</td> <td>ToningEffect</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00b6 = 182'>0x00b6</td> <td>PowerUpTime</td> <td class=c>undef</td> <td><span class=s><span class=n>(date/time when camera was last powered up)</span></span></td></tr> <tr> <td title='0x00b7 = 183'>0x00b7</td> <td>AFInfo2</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#AFInfo2'>Nikon AFInfo2 Tags</a></td></tr> <tr class=b> <td title='0x00b8 = 184'>0x00b8</td> <td>FileInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#FileInfo'>Nikon FileInfo Tags</a> <br>--&gt; <a href='Nikon.html#FileInfo'>Nikon FileInfo Tags</a></td></tr> <tr> <td title='0x00b9 = 185'>0x00b9</td> <td>AFTune</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#AFTune'>Nikon AFTune Tags</a></td></tr> <tr class=b> <td title='0x00bb = 187'>0x00bb</td> <td>RetouchInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#RetouchInfo'>Nikon RetouchInfo Tags</a></td></tr> <tr> <td title='0x00bd = 189'>0x00bd</td> <td>PictureControlData</td> <td class=c title=' ! = Unsafe'>undef!</td> <td>--&gt; <a href='Nikon.html#PictureControl'>Nikon PictureControl Tags</a></td></tr> <tr class=b> <td title='0x00c3 = 195'>0x00c3</td> <td>BarometerInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#BarometerInfo'>Nikon BarometerInfo Tags</a></td></tr> <tr> <td title='0x0e00 = 3584'>0x0e00</td> <td>PrintIM</td> <td class=c>-</td> <td>--&gt; <a href='PrintIM.html'>PrintIM Tags</a></td></tr> <tr class=b> <td title='0x0e01 = 3585'>0x0e01</td> <td>NikonCaptureData</td> <td class=c title=' ! = Unsafe'>undef!</td> <td>--&gt; <a href='NikonCapture.html'>NikonCapture Tags</a> <br><span class='n s'>(this data is dropped when copying Nikon MakerNotes since it may be too large to fit in the EXIF segment of a JPEG image, but it may be copied as a block into existing Nikon MakerNotes later if desired)</span></td></tr> <tr> <td title='0x0e09 = 3593'>0x0e09</td> <td>NikonCaptureVersion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0e0e = 3598'>0x0e0e</td> <td>NikonCaptureOffsets</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#CaptureOffsets'>Nikon CaptureOffsets Tags</a></td></tr> <tr> <td title='0x0e10 = 3600'>0x0e10</td> <td>NikonScanIFD</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#Scan'>Nikon Scan Tags</a></td></tr> <tr class=b> <td title='0x0e13 = 3603'>0x0e13</td> <td>NikonCaptureEditVersions <br>NikonCaptureEditVersions</td> <td class=c title=' ! = Unsafe'>undef<br>undef!</td> <td><span class=n>(the ExtractEmbedded option may be used to decode settings from the stored edit versions, otherwise this is extracted as a binary data block)</span> <br>--&gt; <a href='NikonCapture.html'>NikonCapture Tags</a></td></tr> <tr> <td title='0x0e1d = 3613'>0x0e1d</td> <td>NikonICCProfile</td> <td class=c title=' ! = Unsafe'>undef!</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> <tr class=b> <td title='0x0e1e = 3614'>0x0e1e</td> <td>NikonCaptureOutput</td> <td class=c title=' ! = Unsafe'>undef!</td> <td>--&gt; <a href='Nikon.html#CaptureOutput'>Nikon CaptureOutput Tags</a></td></tr> <tr> <td title='0x0e22 = 3618'>0x0e22</td> <td>NEFBitDepth</td> <td class=c title=' ! = Unsafe'>int16u[4]!</td> <td><span class=s>&#39;0 0 0 0&#39; = n/a (JPEG) <br>&#39;8 8 8 0&#39; = 8 x 3 <br>&#39;12 0 0 0&#39; = 12 <br>&#39;14 0 0 0&#39; = 14 <br>&#39;16 16 16 0&#39; = 16 x 3</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='PreviewIFD'>Nikon PreviewIFD Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x00fe = 254'>0x00fe</td> <td>SubfileType</td> <td class=c>N</td> <td><span class=s>0x0 = Full-resolution Image <br>0x1 = Reduced-resolution image <br>0x2 = Single page of multi-page image <br>0x3 = Single page of multi-page reduced-resolution image <br>0x4 = Transparency mask <br>0x5 = Transparency mask of reduced-resolution image <br>0x6 = Transparency mask of multi-page image <br>0x7 = Transparency mask of reduced-resolution multi-page image <br>0x10001 = Alternate reduced-resolution image <br>0xffffffff = invalid <br>Bit 0 = Reduced resolution <br>Bit 1 = Single page <br>Bit 2 = Transparency mask <br>Bit 3 = TIFF/IT final page <br>Bit 4 = TIFF-FX mixed raster content</span></td></tr> <tr class=b> <td title='0x0103 = 259'>0x0103</td> <td>Compression</td> <td class=c>N</td> <td>--&gt; <a href='EXIF.html#Compression'>EXIF Compression Values</a></td></tr> <tr> <td title='0x011a = 282'>0x011a</td> <td>XResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x011b = 283'>0x011b</td> <td>YResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0128 = 296'>0x0128</td> <td>ResolutionUnit</td> <td class=c>N</td> <td><span class=s>1 = None <br>2 = inches <br>3 = cm</span></td></tr> <tr class=b> <td title='0x0201 = 513'>0x0201</td> <td>PreviewImageStart</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr> <td title='0x0202 = 514'>0x0202</td> <td>PreviewImageLength</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0213 = 531'>0x0213</td> <td>YCbCrPositioning</td> <td class=c>N</td> <td><span class=s>1 = Centered <br>2 = Co-sited</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorBalanceA'>Nikon ColorBalanceA Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='624 = 0x270'>624</td> <td>RedBalance</td> <td class=c title=' ! = Unsafe'>int16u!</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='625 = 0x271'>625</td> <td>BlueBalance</td> <td class=c title=' ! = Unsafe'>int16u!</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='VRInfo'>Nikon VRInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>VRInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>VibrationReduction</td> <td class=c>int8u</td> <td><span class=s>0 = n/a <br>1 = On <br>2 = Off</span></td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>VRMode</td> <td class=c>int8u</td> <td><span class=s>0 = Normal <br>2 = Active</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceDetect'>Nikon FaceDetect Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>FaceDetectFrameSize</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>FacesDetected</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>Face1Position</td> <td class=c>int16u[4]</td> <td><span class=s><span class=n>(top, left, width and height of face detect area in coordinates of FaceDetectFrameSize)</span></span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>Face2Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>Face3Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>Face4Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>Face5Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>Face6Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>Face7Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>Face8Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='36 = 0x24'>36</td> <td>Face9Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>Face10Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>Face11Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>Face12Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PictureControl'>Nikon PictureControl Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PictureControlVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>PictureControlName</td> <td class=c>string[20]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>PictureControlBase</td> <td class=c>string[20]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>PictureControlAdjust</td> <td class=c>int8u</td> <td><span class=s>0 = Default Settings <br>1 = Quick Adjust <br>2 = Full Control</span></td></tr> <tr> <td class=r title='49 = 0x31'>49</td> <td>PictureControlQuickAdjust</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>Sharpness</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='51 = 0x33'>51</td> <td>Contrast</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>Brightness</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='53 = 0x35'>53</td> <td>Saturation</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='54 = 0x36'>54</td> <td>HueAdjustment</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='55 = 0x37'>55</td> <td>FilterEffect</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0x80 = Off <br>0x81 = Yellow <br>0x82 = Orange</td><td>&nbsp;&nbsp;</td> <td>0x83 = Red <br>0x84 = Green <br>0xff = n/a</td></tr></table> </td></tr> <tr class=b> <td class=r title='56 = 0x38'>56</td> <td>ToningEffect</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0x80 = B&amp;W <br>0x81 = Sepia <br>0x82 = Cyanotype <br>0x83 = Red <br>0x84 = Yellow <br>0x85 = Green</td><td>&nbsp;&nbsp;</td> <td>0x86 = Blue-green <br>0x87 = Blue <br>0x88 = Purple-blue <br>0x89 = Red-purple <br>0xff = n/a</td></tr></table> </td></tr> <tr> <td class=r title='57 = 0x39'>57</td> <td>ToningSaturation</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='WorldTime'>Nikon WorldTime Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>TimeZone</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>DaylightSavings</td> <td class=c>int8u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>DateDisplayFormat</td> <td class=c>int8u</td> <td><span class=s>0 = Y/M/D <br>1 = M/D/Y <br>2 = D/M/Y</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ISOInfo'>Nikon ISOInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ISO</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 100 * 2**(raw/12-5))</span></span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ISOExpansion</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Off <br>0x101 = Hi 0.3 <br>0x102 = Hi 0.5 <br>0x103 = Hi 0.7 <br>0x104 = Hi 1.0 <br>0x105 = Hi 1.3 <br>0x106 = Hi 1.5 <br>0x107 = Hi 1.7 <br>0x108 = Hi 2.0 <br>0x109 = Hi 2.3 <br>0x10a = Hi 2.5</td><td>&nbsp;&nbsp;</td> <td>0x10b = Hi 2.7 <br>0x10c = Hi 3.0 <br>0x10d = Hi 3.3 <br>0x10e = Hi 3.5 <br>0x10f = Hi 3.7 <br>0x110 = Hi 4.0 <br>0x201 = Lo 0.3 <br>0x202 = Lo 0.5 <br>0x203 = Lo 0.7 <br>0x204 = Lo 1.0</td></tr></table> </td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISO2</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 100 * 2**(raw/12-5))</span></span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>ISOExpansion2</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Off <br>0x101 = Hi 0.3 <br>0x102 = Hi 0.5 <br>0x103 = Hi 0.7 <br>0x104 = Hi 1.0 <br>0x105 = Hi 1.3 <br>0x106 = Hi 1.5</td><td>&nbsp;&nbsp;</td> <td>0x107 = Hi 1.7 <br>0x108 = Hi 2.0 <br>0x201 = Lo 0.3 <br>0x202 = Lo 0.5 <br>0x203 = Lo 0.7 <br>0x204 = Lo 1.0</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='DistortInfo'>Nikon DistortInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>DistortionVersion?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>AutoDistortionControl</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On <br>2 = On (underwater)</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='UnknownInfo'>Nikon UnknownInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>UnknownInfoVersion?</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='UnknownInfo2'>Nikon UnknownInfo2 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>UnknownInfo2Version?</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='HDRInfo'>Nikon HDRInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>HDRInfoVersion</td> <td class=c>string[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>HDR</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On <br>48 = Auto</span></td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>HDRLevel</td> <td class=c>int8u</td> <td><span class=s>0 = Auto <br>1 = 1 EV <br>2 = 2 EV <br>3 = 3 EV <br>255 = n/a</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>HDRSmoothing</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Normal <br>2 = Low</td><td>&nbsp;&nbsp;</td> <td>3 = High <br>48 = Auto <br>255 = n/a</td></tr></table> </td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>HDRLevel2</td> <td class=c>int8u</td> <td><span class=s>0 = Auto <br>1 = 1 EV <br>2 = 2 EV <br>3 = 3 EV <br>255 = n/a</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='LocationInfo'>Nikon LocationInfo Tags</a></h2> <p>Tags written by some Nikon GPS-equipped cameras like the AW100.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>LocationInfoVersion</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>TextEncoding</td> <td class=c>int8u</td> <td><span class=s>0 = n/a <br>1 = UTF8 <br>2 = UTF16</span></td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>CountryCode</td> <td class=c>undef[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>POILevel</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>Location</td> <td class=c>undef[70]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AFInfo'>Nikon AFInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>AFAreaMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Single Area <br>1 = Dynamic Area <br>2 = Dynamic Area (closest subject) <br>3 = Group Dynamic <br>4 = Single Area (wide) <br>5 = Dynamic Area (wide)</td></tr></table> </td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>AFPoint</td> <td class=c>int8u</td> <td><span class=s><span class=n>(in some focus modes this value is not meaningful)</span></span><table class=cols><tr> <td>0 = Center <br>1 = Top <br>2 = Bottom <br>3 = Mid-left <br>4 = Mid-right <br>5 = Upper-left</td><td>&nbsp;&nbsp;</td> <td>6 = Upper-right <br>7 = Lower-left <br>8 = Lower-right <br>9 = Far Left <br>10 = Far Right</td></tr></table> </td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>AFPointsInFocus</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = (none) <br>0x7ff = All 11 Points <br>Bit 0 = Center <br>Bit 1 = Top <br>Bit 2 = Bottom <br>Bit 3 = Mid-left <br>Bit 4 = Mid-right</td><td>&nbsp;&nbsp;</td> <td>Bit 5 = Upper-left <br>Bit 6 = Upper-right <br>Bit 7 = Lower-left <br>Bit 8 = Lower-right <br>Bit 9 = Far Left <br>Bit 10 = Far Right</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD40'>Nikon ShotInfoD40 Tags</a></h2> <p>These tags are extracted from encrypted data in D40 and D40X images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='582 = 0x246'>582</td> <td>ShutterCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='586 = 0x24a'>586.1</td> <td>VibrationReduction</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = Off <br>0x8 = On</span></td></tr> <tr class=b> <td class=r title='729 = 0x2d9'>729</td> <td>CustomSettingsD40</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD40'>NikonCustom SettingsD40 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD80'>Nikon ShotInfoD80 Tags</a></h2> <p>These tags are extracted from encrypted data in D80 images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='586 = 0x24a'>586</td> <td>ShutterCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='590 = 0x24e'>590.1</td> <td>Rotation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07] <br>0x0 = Horizontal <br>0x1 = Rotated 270 CW <br>0x2 = Rotated 90 CW <br>0x3 = Rotated 180</span></td></tr> <tr class=b> <td class=r title='590 = 0x24e'>590.2</td> <td>VibrationReduction</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x18] <br>0x0 = Off <br>0x18 = On</span></td></tr> <tr> <td class=r title='590 = 0x24e'>590.3</td> <td>FlashFired</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>Bit 6 = Internal <br>Bit 7 = External</span></td></tr> <tr class=b> <td class=r title='708 = 0x2c4'>708</td> <td>NikonImageSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0] <br>0x0 = Large (10.0 M) <br>0x10 = Medium (5.6 M) <br>0x20 = Small (2.5 M)</span></td></tr> <tr> <td class=r title='708 = 0x2c4'>708.1</td> <td>ImageQuality</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>0x0 = NEF (RAW) <br>0x1 = JPEG Fine <br>0x2 = JPEG Normal <br>0x3 = JPEG Basic <br>0x4 = NEF (RAW) + JPEG Fine <br>0x5 = NEF (RAW) + JPEG Normal <br>0x6 = NEF (RAW) + JPEG Basic</td></tr></table> </td></tr> <tr class=b> <td class=r title='748 = 0x2ec'>748</td> <td>CustomSettingsD80</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD80'>NikonCustom SettingsD80 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD90'>Nikon ShotInfoD90 Tags</a></h2> <p>These tags are extracted from encrypted data in images from the D90 with firmware 1.00.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='693 = 0x2b5'>693</td> <td>ISO2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='725 = 0x2d5'>725</td> <td>ShutterCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='884 = 0x374'>884</td> <td>CustomSettingsD90</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD90'>NikonCustom SettingsD90 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD3a'>Nikon ShotInfoD3a Tags</a></h2> <p>These tags are extracted from encrypted data in images from the D3 with firmware 1.00 and earlier.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='598 = 0x256'>598</td> <td>ISO2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='630 = 0x276'>630</td> <td>ShutterCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='723 = 0x2d3'>723.1</td> <td>NikonImageSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x18] <br>0x0 = Large <br>0x8 = Medium <br>0x10 = Small</span></td></tr> <tr> <td class=r title='723 = 0x2d3'>723.2</td> <td>ImageQuality</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = NEF (RAW) + JPEG Fine <br>0x1 = NEF (RAW) + JPEG Norm <br>0x2 = NEF (RAW) + JPEG Basic <br>0x3 = NEF (RAW) <br>0x4 = TIF (RGB) <br>0x5 = JPEG Fine <br>0x6 = JPEG Normal <br>0x7 = JPEG Basic</td></tr></table> </td></tr> <tr class=b> <td class=r title='769 = 0x301'>769</td> <td>CustomSettingsD3</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD3'>NikonCustom SettingsD3 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD3b'>Nikon ShotInfoD3b Tags</a></h2> <p>These tags are extracted from encrypted data in images from the D3 with firmware 1.10, 2.00, 2.01 and 2.02.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>ImageArea</td> <td class=c>int8u</td> <td><span class=s>0 = FX (36.0 x 23.9 mm) <br>1 = DX (23.5 x 15.6 mm) <br>2 = 5:4 (30.0 x 23.9 mm)</span></td></tr> <tr class=b> <td class=r title='605 = 0x25d'>605</td> <td>ISO2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='637 = 0x27d'>637</td> <td>ShutterCount</td> <td class=c>int32u</td> <td><span class=s><span class=n>(firmware 1.10)</span></span></td></tr> <tr class=b> <td class=r title='639 = 0x27f'>639</td> <td>ShutterCount</td> <td class=c>int32u</td> <td><span class=s><span class=n>(firmware 2.00, 2.01 and 2.02)</span></span></td></tr> <tr> <td class=r title='650 = 0x28a'>650</td> <td>PreFlashReturnStrength</td> <td class=c>int8u</td> <td><span class=s><span class=n>(valid in TTL and TTL-BL flash control modes)</span></span></td></tr> <tr class=b> <td class=r title='732 = 0x2dc'>732.1</td> <td>NikonImageSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x18] <br>0x0 = Large <br>0x8 = Medium <br>0x10 = Small</span></td></tr> <tr> <td class=r title='732 = 0x2dc'>732.2</td> <td>ImageQuality</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = NEF (RAW) + JPEG Fine <br>0x1 = NEF (RAW) + JPEG Norm <br>0x2 = NEF (RAW) + JPEG Basic <br>0x3 = NEF (RAW) <br>0x4 = TIF (RGB) <br>0x5 = JPEG Fine <br>0x6 = JPEG Normal <br>0x7 = JPEG Basic</td></tr></table> </td></tr> <tr class=b> <td class=r title='778 = 0x30a'>778</td> <td>CustomSettingsD3</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD3'>NikonCustom SettingsD3 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD3X'>Nikon ShotInfoD3X Tags</a></h2> <p>These tags are extracted from encrypted data in images from the D3X with firmware 1.00.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='605 = 0x25d'>605</td> <td>ISO2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='640 = 0x280'>640</td> <td>ShutterCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='779 = 0x30b'>779</td> <td>CustomSettingsD3X</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD3'>NikonCustom SettingsD3 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD3S'>Nikon ShotInfoD3S Tags</a></h2> <p>These tags are extracted from encrypted data in images from the D3S with firmware 1.00 and earlier.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>ImageArea</td> <td class=c>int8u</td> <td><span class=s>0 = FX (36x24) <br>1 = DX (24x16) <br>2 = 5:4 (30x24) <br>3 = 1.2x (30x20)</span></td></tr> <tr class=b> <td class=r title='545 = 0x221'>545</td> <td>ISO2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='578 = 0x242'>578</td> <td>ShutterCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='718 = 0x2ce'>718</td> <td>CustomSettingsD3S</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD3'>NikonCustom SettingsD3 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD300a'>Nikon ShotInfoD300a Tags</a></h2> <p>These tags are extracted from encrypted data in images from the D300 with firmware 1.00 and earlier.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='604 = 0x25c'>604</td> <td>ISO2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='633 = 0x279'>633</td> <td>ShutterCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='721 = 0x2d1'>721</td> <td>AFFineTuneAdj</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = 0 <br>0x3a = +1 <br>0x3b = +2 <br>0x3c = +4 <br>0x3d = +8 <br>0x3e = +16 <br>0xc2 = -16 <br>0xc3 = -8 <br>0xc4 = -4 <br>0xc5 = -2 <br>0xc6 = -1 <br>0x103e = +17 <br>0x10c2 = -17 <br>0x203d = +9</td><td>&nbsp;&nbsp;</td> <td>0x203e = +18 <br>0x20c2 = -18 <br>0x20c3 = -9 <br>0x303e = +19 <br>0x30c2 = -19 <br>0x403c = +5 <br>0x403d = +10 <br>0x403e = +20 <br>0x40c2 = -20 <br>0x40c3 = -10 <br>0x40c4 = -5 <br>0x603d = +11 <br>0x60c3 = -11 <br>0x803b = +3</td><td>&nbsp;&nbsp;</td> <td>0x803c = +6 <br>0x803d = +12 <br>0x80c3 = -12 <br>0x80c4 = -6 <br>0x80c5 = -3 <br>0xa03d = +13 <br>0xa0c3 = -13 <br>0xc03c = +7 <br>0xc03d = +14 <br>0xc0c3 = -14 <br>0xc0c4 = -7 <br>0xe03d = +15 <br>0xe0c3 = -15</td></tr></table> </td></tr> <tr> <td class=r title='790 = 0x316'>790</td> <td>CustomSettingsD300</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD3'>NikonCustom SettingsD3 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD300b'>Nikon ShotInfoD300b Tags</a></h2> <p>These tags are extracted from encrypted data in images from the D300 with firmware 1.10.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='613 = 0x265'>613</td> <td>ISO2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='644 = 0x284'>644</td> <td>ShutterCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='732 = 0x2dc'>732</td> <td>AFFineTuneAdj</td> <td class=c>int16u</td> <td><span class=s><span class=n>(firmware version 1.10B)</span></span><table class=cols><tr> <td>0x0 = 0 <br>0x83e = +11 <br>0x8c2 = -11 <br>0x203c = +3 <br>0x203d = +6 <br>0x203e = +12 <br>0x20c2 = -12 <br>0x20c3 = -6 <br>0x20c4 = -3 <br>0x383e = +13 <br>0x38c2 = -13 <br>0x503d = +7 <br>0x503e = +14 <br>0x50c2 = -14</td><td>&nbsp;&nbsp;</td> <td>0x50c3 = -7 <br>0x683e = +15 <br>0x68c2 = -15 <br>0x803a = +1 <br>0x803b = +2 <br>0x803c = +4 <br>0x803d = +8 <br>0x803e = +16 <br>0x80c2 = -16 <br>0x80c3 = -8 <br>0x80c4 = -4 <br>0x80c5 = -2 <br>0x80c6 = -1 <br>0x983e = +17</td><td>&nbsp;&nbsp;</td> <td>0x98c2 = -17 <br>0xb03d = +9 <br>0xb03e = +18 <br>0xb0c2 = -18 <br>0xb0c3 = -9 <br>0xc83e = +19 <br>0xc8c2 = -19 <br>0xe03c = +5 <br>0xe03d = +10 <br>0xe03e = +20 <br>0xe0c2 = -20 <br>0xe0c3 = -10 <br>0xe0c4 = -5</td></tr></table> <span class=s><span class=n>(other versions)</span></span><table class=cols><tr> <td>0x0 = 0 <br>0x43e = +13 <br>0x4c2 = -13 <br>0x183d = +7 <br>0x183e = +14 <br>0x18c2 = -14 <br>0x18c3 = -7 <br>0x2c3e = +15 <br>0x2cc2 = -15 <br>0x403a = +1 <br>0x403b = +2 <br>0x403c = +4 <br>0x403d = +8 <br>0x403e = +16</td><td>&nbsp;&nbsp;</td> <td>0x40c2 = -16 <br>0x40c3 = -8 <br>0x40c4 = -4 <br>0x40c5 = -2 <br>0x40c6 = -1 <br>0x543e = +17 <br>0x54c2 = -17 <br>0x683d = +9 <br>0x683e = +18 <br>0x68c2 = -18 <br>0x68c3 = -9 <br>0x7c3e = +19 <br>0x7cc2 = -19 <br>0x903c = +5</td><td>&nbsp;&nbsp;</td> <td>0x903d = +10 <br>0x903e = +20 <br>0x90c2 = -20 <br>0x90c3 = -10 <br>0x90c4 = -5 <br>0xb83d = +11 <br>0xb8c3 = -11 <br>0xe03b = +3 <br>0xe03c = +6 <br>0xe03d = +12 <br>0xe0c3 = -12 <br>0xe0c4 = -6 <br>0xe0c5 = -3</td></tr></table> </td></tr> <tr class=b> <td class=r title='802 = 0x322'>802</td> <td>CustomSettingsD300</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD3'>NikonCustom SettingsD3 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD300S'>Nikon ShotInfoD300S Tags</a></h2> <p>These tags are extracted from encrypted data in images from the D300S with firmware 1.00.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='613 = 0x265'>613</td> <td>ISO2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='646 = 0x286'>646</td> <td>ShutterCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='804 = 0x324'>804</td> <td>CustomSettingsD300S</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD3'>NikonCustom SettingsD3 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD700'>Nikon ShotInfoD700 Tags</a></h2> <p>These tags are extracted from encrypted data in images from the D700 with firmware 1.02f.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='613 = 0x265'>613</td> <td>ISO2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='647 = 0x287'>647</td> <td>ShutterCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='804 = 0x324'>804</td> <td>CustomSettingsD700</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD700'>NikonCustom SettingsD700 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD800'>Nikon ShotInfoD800 Tags</a></h2> <p>These tags are extracted from encrypted data in images from the D800.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1216 = 0x4c0'>1216</td> <td>RepeatingFlashOutputExternal</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1218 = 0x4c2'>1218</td> <td>RepeatingFlashRateExternal</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1219 = 0x4c3'>1219</td> <td>RepeatingFlashCountExternal</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1234 = 0x4d2'>1234</td> <td>FlashExposureComp2</td> <td class=c>int8s</td> <td><span class=s><span class=n>(includes the effect of flash bracketing)</span></span></td></tr> <tr> <td class=r title='1242 = 0x4da'>1242</td> <td>RepeatingFlashRateBuilt-in</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1243 = 0x4db'>1243</td> <td>RepeatingFlashCountBuilt-in</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1308 = 0x51c'>1308</td> <td>SequenceNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1531 = 0x5fb'>1531</td> <td>ShutterCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1772 = 0x6ec'>1772</td> <td>CustomSettingsD800</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD800'>NikonCustom SettingsD800 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD810'>Nikon ShotInfoD810 Tags</a></h2> <p>These tags are extracted from encrypted data in images from the D810.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='64 = 0x40'>64</td> <td>CustomSettingsOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5982 = 0x175e'>5982</td> <td>D810MeteringMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = Matrix <br>0x1 = Center <br>0x2 = Spot <br>0x3 = Highlight</span></td></tr> <tr> <td class=r title='6315 = 0x18ab'>6315</td> <td>CustomSettingsD810</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD810'>NikonCustom SettingsD810 Tags</a> <br><span class='n s'>(actual offset determined by CustomSettingsOffset)</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD5000'>Nikon ShotInfoD5000 Tags</a></h2> <p>These tags are extracted from encrypted data in images from the D5000 with firmware 1.00.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='693 = 0x2b5'>693</td> <td>ISO2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='726 = 0x2d6'>726</td> <td>ShutterCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='888 = 0x378'>888</td> <td>CustomSettingsD5000</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD5000'>NikonCustom SettingsD5000 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD5100'>Nikon ShotInfoD5100 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='801 = 0x321'>801</td> <td>ShutterCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1031 = 0x407'>1031</td> <td>CustomSettingsD5100</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD5100'>NikonCustom SettingsD5100 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD5200'>Nikon ShotInfoD5200 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3032 = 0xbd8'>3032</td> <td>ShutterCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3285 = 0xcd5'>3285</td> <td>CustomSettingsD5200</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD5200'>NikonCustom SettingsD5200 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD7000'>Nikon ShotInfoD7000 Tags</a></h2> <p>These tags are extracted from encrypted data in images from the D7000 with firmware 1.01b.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='800 = 0x320'>800</td> <td>ShutterCount</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1028 = 0x404'>1028</td> <td>CustomSettingsD7000</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD7000'>NikonCustom SettingsD7000 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD4'>Nikon ShotInfoD4 Tags</a></h2> <p>These tags are extracted from encrypted data in images from the D4.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1873 = 0x751'>1873</td> <td>CustomSettingsD4</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD4'>NikonCustom SettingsD4 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfoD4S'>Nikon ShotInfoD4S Tags</a></h2> <p>These tags are extracted from encrypted data in images from the D4S.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6301 = 0x189d'>6301</td> <td>CustomSettingsD4S</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD4'>NikonCustom SettingsD4 Tags</a> <br><span class='n s'>(firmware version 1.00)</span></td></tr> <tr class=b> <td class=r title='6338 = 0x18c2'>6338</td> <td>MultiSelectorLiveViewMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Reset <br>0x40 = Zoom <br>0xc0 = None</span></td></tr> <tr> <td class=r title='6461 = 0x193d'>6461</td> <td>CustomSettingsD4S</td> <td class=c>-</td> <td>--&gt; <a href='NikonCustom.html#SettingsD4'>NikonCustom SettingsD4 Tags</a> <br><span class='n s'>(firmware version 1.01)</span></td></tr> <tr class=b> <td class=r title='13579 = 0x350b'>13579</td> <td>RollAngle</td> <td class=c>fixed32u</td> <td><span class=s><span class=n>(converted to degrees of clockwise camera rotation)</span></span></td></tr> <tr> <td class=r title='13583 = 0x350f'>13583</td> <td>PitchAngle</td> <td class=c>fixed32u</td> <td><span class=s><span class=n>(converted to degrees of upward camera tilt)</span></span></td></tr> <tr class=b> <td class=r title='13587 = 0x3513'>13587</td> <td>YawAngle</td> <td class=c>fixed32u</td> <td><span class=s><span class=n>(the camera pitch angle when shooting in portrait orientation)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfo'>Nikon ShotInfo Tags</a></h2> <p>This information is encrypted for ShotInfoVersion 02xx, and some tags are only valid for specific models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShotInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>DistortionControl</td> <td class=c>int8u</td> <td><span class=s><span class=n>(P6000)</span> <br>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='102 = 0x66'>102</td> <td>VR_0x66?</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D2X, D2Xs (unverified))</span> <br>0 = Off <br>1 = On (normal) <br>2 = On (active)</span></td></tr> <tr> <td class=r title='106 = 0x6a'>106</td> <td>ShutterCount</td> <td class=c>int32u</td> <td><span class=s><span class=n>(D2X, D2Xs)</span></span></td></tr> <tr class=b> <td class=r title='110 = 0x6e'>110</td> <td>DeletedImageCount</td> <td class=c>int32u</td> <td><span class=s><span class=n>(D2X, D2Xs)</span></span></td></tr> <tr> <td class=r title='117 = 0x75'>117</td> <td>VibrationReduction</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D200)</span> <br>0 = Off <br>1 = On (1) <br>2 = On (2) <br>3 = On (3)</span></td></tr> <tr class=b> <td class=r title='130 = 0x82'>130</td> <td>VibrationReduction</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D2X, D2Xs)</span> <br>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='343 = 0x157'>343</td> <td>ShutterCount</td> <td class=c>undef[2]</td> <td><span class=s><span class=n>(D50)</span></span></td></tr> <tr class=b> <td class=r title='430 = 0x1ae'>430</td> <td>VibrationReduction</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D50)</span> <br>0x0 = n/a <br>0xc = Off <br>0xf = On</span></td></tr> <tr> <td class=r title='589 = 0x24d'>589</td> <td>ShutterCount</td> <td class=c>int32u</td> <td><span class=s><span class=n>(D60)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorBalance1'>Nikon ColorBalance1 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>WB_RBGGLevels</td> <td class=c title=' ! = Unsafe'>int16u[4]!</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorBalance2'>Nikon ColorBalance2 Tags</a></h2> <p>This information is encrypted for most camera models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>WB_RGGBLevels</td> <td class=c title=' ! = Unsafe'>int16u[4]!</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorBalance3'>Nikon ColorBalance3 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>WB_RGBGLevels</td> <td class=c title=' ! = Unsafe'>int16u[4]!</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorBalance4'>Nikon ColorBalance4 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>WB_GRBGLevels</td> <td class=c title=' ! = Unsafe'>int16u[4]!</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorBalanceUnknown'>Nikon ColorBalanceUnknown Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ColorBalanceVersion</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LensData00'>Nikon LensData00 Tags</a></h2> <p>This structure is used by the D100, and D1X with firmware version 1.1.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>LensDataVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>LensIDNumber</td> <td class=c>int8u</td> <td><span class=s><span class=n>(see LensID values below)</span></span></td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>LensFStops</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>MinFocalLength</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>MaxFocalLength</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>MaxApertureAtMinFocal</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>MaxApertureAtMaxFocal</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>MCUVersion</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LensData01'>Nikon LensData01 Tags</a></h2> <p>Nikon encrypts the LensData information below if LensDataVersion is 0201 or higher, but the decryption algorithm is known so the information can be extracted.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>LensDataVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExitPupilPosition</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>AFAperture</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>FocusPosition</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>FocusDistance</td> <td class=c>int8u</td> <td><span class=s><span class=n>(this focus distance is approximate, and not very accurate for some lenses)</span></span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>FocalLength</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>LensIDNumber</td> <td class=c>int8u</td> <td><span class=s><span class=n>(see LensID values below)</span></span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>LensFStops</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>MinFocalLength</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>MaxFocalLength</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>MaxApertureAtMinFocal</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>MaxApertureAtMaxFocal</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>MCUVersion</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>EffectiveMaxAperture</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LensData0204'>Nikon LensData0204 Tags</a></h2> <p>Nikon encrypts the LensData information below if LensDataVersion is 0201 or higher, but the decryption algorithm is known so the information can be extracted.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>LensDataVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ExitPupilPosition</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>AFAperture</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>FocusPosition</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>FocusDistance</td> <td class=c>int8u</td> <td><span class=s><span class=n>(this focus distance is approximate, and not very accurate for some lenses)</span></span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>FocalLength</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>LensIDNumber</td> <td class=c>int8u</td> <td><span class=s><span class=n>(see LensID values below)</span></span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>LensFStops</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>MinFocalLength</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>MaxFocalLength</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>MaxApertureAtMinFocal</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>MaxApertureAtMaxFocal</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>MCUVersion</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>EffectiveMaxAperture</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LensData0400'>Nikon LensData0400 Tags</a></h2> <p>Tags extracted from the encrypted lens data of Nikon 1 models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>LensDataVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='394 = 0x18a'>394</td> <td>LensModel</td> <td class=c>string[64]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LensDataUnknown'>Nikon LensDataUnknown Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>LensDataVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FlashInfo0100'>Nikon FlashInfo0100 Tags</a></h2> <p>These tags are used by the D2H, D2Hs, D2X, D2Xs, D50, D70, D70s, D80 and D200.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FlashInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FlashSource</td> <td class=c>int8u</td> <td><span class=s>0 = None <br>1 = External <br>2 = Internal</span></td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ExternalFlashFirmware</td> <td class=c>int8u[2]</td> <td>--&gt; <a href='Nikon.html#FlashFirmware'>Nikon FlashFirmware Values</a></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ExternalFlashFlags</td> <td class=c>int8u</td> <td><span class=s>0x0 = (none) <br>Bit 0 = Fired <br>Bit 2 = Bounce Flash <br>Bit 4 = Wide Flash Adapter <br>Bit 5 = Dome Diffuser</span></td></tr> <tr> <td class=r title='9 = 0x9'>9.1</td> <td>FlashCommanderMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Off <br>0x80 = On</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9.2</td> <td>FlashControlMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x7f]</span> <br>--&gt; <a href='Nikon.html#FlashControlMode'>Nikon FlashControlMode Values</a></td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>FlashOutput <br>FlashCompensation</td> <td class=c>int8u<br>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>FlashFocalLength</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>RepeatingFlashRate</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>RepeatingFlashCount</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>FlashGNDistance</td> <td class=c>int8u</td> <td>--&gt; <a href='Nikon.html#FlashGNDistance'>Nikon FlashGNDistance Values</a></td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>FlashGroupAControlMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span> <br>--&gt; <a href='Nikon.html#FlashControlMode'>Nikon FlashControlMode Values</a></td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>FlashGroupBControlMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span> <br>--&gt; <a href='Nikon.html#FlashControlMode'>Nikon FlashControlMode Values</a></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>FlashGroupAOutput <br>FlashGroupACompensation</td> <td class=c>int8u<br>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>FlashGroupBOutput <br>FlashGroupBCompensation</td> <td class=c>int8u<br>int8s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FlashFirmware'>Nikon FlashFirmware Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>FlashFirmware</th><th>Value</th><th>FlashFirmware</th></tr> <tr><td>'0 0'</td><td>= n/a</td> <td class=b>'4 1'</td><td class=b>= 4.01 (SB-400)</td> </tr><tr><td>'1 1'</td><td>= 1.01 (SB-800 or Metz 58 AF-1)</td> <td class=b>'4 2'</td><td class=b>= 4.02 (SB-400)</td> </tr><tr><td>'1 3'</td><td>= 1.03 (SB-800)</td> <td class=b>'4 4'</td><td class=b>= 4.04 (SB-400)</td> </tr><tr><td>'2 1'</td><td>= 2.01 (SB-800)</td> <td class=b>'5 1'</td><td class=b>= 5.01 (SB-900)</td> </tr><tr><td>'2 4'</td><td>= 2.04 (SB-600)</td> <td class=b>'5 2'</td><td class=b>= 5.02 (SB-900)</td> </tr><tr><td>'2 5'</td><td>= 2.05 (SB-600)</td> <td class=b>'6 1'</td><td class=b>= 6.01 (SB-700)</td> </tr><tr><td>'3 1'</td><td>= 3.01 (SU-800 Remote Commander)</td> <td class=b>'7 1'</td><td class=b>= 7.01 (SB-910)</td> </tr></table></td></tr></table></blockquote> <h2><a name='FlashControlMode'>Nikon FlashControlMode Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>FlashControlMode</th><th>Value</th><th>FlashControlMode</th><th>Value</th><th>FlashControlMode</th></tr> <tr><td class=r>0x0</td><td>= Off</td> <td class='r b'>0x3</td><td class=b>= Auto Aperture</td> <td class=r>0x6</td><td>= Manual</td> </tr><tr><td class=r>0x1</td><td>= iTTL-BL</td> <td class='r b'>0x4</td><td class=b>= Automatic</td> <td class=r>0x7</td><td>= Repeating Flash</td> </tr><tr><td class=r>0x2</td><td>= iTTL</td> <td class='r b'>0x5</td><td class=b>= GN (distance priority)</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='FlashGNDistance'>Nikon FlashGNDistance Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>FlashGNDistance</th><th>Value</th><th>FlashGNDistance</th><th>Value</th><th>FlashGNDistance</th></tr> <tr><td class=r>0</td><td>= 0</td> <td class='r b'>13</td><td class=b>= 1.4 m</td> <td class=r>26</td><td>= 6.3 m</td> </tr><tr><td class=r>1</td><td>= 0.1 m</td> <td class='r b'>14</td><td class=b>= 1.6 m</td> <td class=r>27</td><td>= 7.1 m</td> </tr><tr><td class=r>2</td><td>= 0.2 m</td> <td class='r b'>15</td><td class=b>= 1.8 m</td> <td class=r>28</td><td>= 8.0 m</td> </tr><tr><td class=r>3</td><td>= 0.3 m</td> <td class='r b'>16</td><td class=b>= 2.0 m</td> <td class=r>29</td><td>= 9.0 m</td> </tr><tr><td class=r>4</td><td>= 0.4 m</td> <td class='r b'>17</td><td class=b>= 2.2 m</td> <td class=r>30</td><td>= 10.0 m</td> </tr><tr><td class=r>5</td><td>= 0.5 m</td> <td class='r b'>18</td><td class=b>= 2.5 m</td> <td class=r>31</td><td>= 11.0 m</td> </tr><tr><td class=r>6</td><td>= 0.6 m</td> <td class='r b'>19</td><td class=b>= 2.8 m</td> <td class=r>32</td><td>= 13.0 m</td> </tr><tr><td class=r>7</td><td>= 0.7 m</td> <td class='r b'>20</td><td class=b>= 3.2 m</td> <td class=r>33</td><td>= 14.0 m</td> </tr><tr><td class=r>8</td><td>= 0.8 m</td> <td class='r b'>21</td><td class=b>= 3.6 m</td> <td class=r>34</td><td>= 16.0 m</td> </tr><tr><td class=r>9</td><td>= 0.9 m</td> <td class='r b'>22</td><td class=b>= 4.0 m</td> <td class=r>35</td><td>= 18.0 m</td> </tr><tr><td class=r>10</td><td>= 1.0 m</td> <td class='r b'>23</td><td class=b>= 4.5 m</td> <td class=r>36</td><td>= 20.0 m</td> </tr><tr><td class=r>11</td><td>= 1.1 m</td> <td class='r b'>24</td><td class=b>= 5.0 m</td> <td class=r>255</td><td>= n/a</td> </tr><tr><td class=r>12</td><td>= 1.3 m</td> <td class='r b'>25</td><td class=b>= 5.6 m</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='FlashInfo0102'>Nikon FlashInfo0102 Tags</a></h2> <p>These tags are used by the D3 (firmware 1.x), D40, D40X, D60 and D300 (firmware 1.00).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FlashInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FlashSource</td> <td class=c>int8u</td> <td><span class=s>0 = None <br>1 = External <br>2 = Internal</span></td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ExternalFlashFirmware</td> <td class=c>int8u[2]</td> <td>--&gt; <a href='Nikon.html#FlashFirmware'>Nikon FlashFirmware Values</a></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ExternalFlashFlags</td> <td class=c>int8u</td> <td><span class=s>Bit 0 = Fired <br>Bit 2 = Bounce Flash <br>Bit 4 = Wide Flash Adapter <br>Bit 5 = Dome Diffuser</span></td></tr> <tr> <td class=r title='9 = 0x9'>9.1</td> <td>FlashCommanderMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Off <br>0x80 = On</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9.2</td> <td>FlashControlMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x7f]</span> <br>--&gt; <a href='Nikon.html#FlashControlMode'>Nikon FlashControlMode Values</a></td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>FlashOutput <br>FlashCompensation</td> <td class=c>int8u<br>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>FlashFocalLength</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>RepeatingFlashRate</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>RepeatingFlashCount</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>FlashGNDistance</td> <td class=c>int8u</td> <td>--&gt; <a href='Nikon.html#FlashGNDistance'>Nikon FlashGNDistance Values</a></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16.1</td> <td>FlashGroupAControlMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span> <br>--&gt; <a href='Nikon.html#FlashControlMode'>Nikon FlashControlMode Values</a> <br><span class='n s'>(note: group A tags may apply to the built-in flash settings for some models)</span></td></tr> <tr> <td class=r title='17 = 0x11'>17.1</td> <td>FlashGroupBControlMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span> <br>--&gt; <a href='Nikon.html#FlashControlMode'>Nikon FlashControlMode Values</a> <br><span class='n s'>(note: group B tags may apply to group A settings for some models)</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17.2</td> <td>FlashGroupCControlMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span> <br>--&gt; <a href='Nikon.html#FlashControlMode'>Nikon FlashControlMode Values</a> <br><span class='n s'>(note: group C tags may apply to group B settings for some models)</span></td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>FlashGroupAOutput <br>FlashGroupACompensation</td> <td class=c>int8u<br>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>FlashGroupBOutput <br>FlashGroupBCompensation</td> <td class=c>int8u<br>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>FlashGroupCOutput <br>FlashGroupCCompensation</td> <td class=c>int8u<br>int8s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FlashInfo0103'>Nikon FlashInfo0103 Tags</a></h2> <p>These tags are used by the D3 (firmware 2.x), D3X, D3S, D4, D90, D300 (firmware 1.10), D300S, D600, D700, D800, D3000, D3100, D3200, D5000, D5100, D5200, D7000.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FlashInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FlashSource</td> <td class=c>int8u</td> <td><span class=s>0 = None <br>1 = External <br>2 = Internal</span></td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ExternalFlashFirmware</td> <td class=c>int8u[2]</td> <td>--&gt; <a href='Nikon.html#FlashFirmware'>Nikon FlashFirmware Values</a></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ExternalFlashFlags</td> <td class=c>int8u</td> <td><span class=s>Bit 0 = Fired <br>Bit 2 = Bounce Flash <br>Bit 4 = Wide Flash Adapter <br>Bit 5 = Dome Diffuser</span></td></tr> <tr> <td class=r title='9 = 0x9'>9.1</td> <td>FlashCommanderMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Off <br>0x80 = On</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9.2</td> <td>FlashControlMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x7f]</span> <br>--&gt; <a href='Nikon.html#FlashControlMode'>Nikon FlashControlMode Values</a></td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>FlashOutput <br>FlashCompensation</td> <td class=c>int8u<br>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>FlashFocalLength</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>RepeatingFlashRate</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>RepeatingFlashCount</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>FlashGNDistance</td> <td class=c>int8u</td> <td>--&gt; <a href='Nikon.html#FlashGNDistance'>Nikon FlashGNDistance Values</a></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>FlashColorFilter</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = None <br>1 = FL-GL1 <br>2 = FL-GL2</td><td>&nbsp;&nbsp;</td> <td>9 = TN-A1 <br>10 = TN-A2 <br>65 = Red</td><td>&nbsp;&nbsp;</td> <td>66 = Blue <br>67 = Yellow <br>68 = Amber</td></tr></table> </td></tr> <tr> <td class=r title='17 = 0x11'>17.1</td> <td>FlashGroupAControlMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span> <br>--&gt; <a href='Nikon.html#FlashControlMode'>Nikon FlashControlMode Values</a> <br><span class='n s'>(note: group A tags may apply to the built-in flash settings for some models)</span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18.1</td> <td>FlashGroupBControlMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span> <br>--&gt; <a href='Nikon.html#FlashControlMode'>Nikon FlashControlMode Values</a> <br><span class='n s'>(note: group B tags may apply to group A settings for some models)</span></td></tr> <tr> <td class=r title='18 = 0x12'>18.2</td> <td>FlashGroupCControlMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span> <br>--&gt; <a href='Nikon.html#FlashControlMode'>Nikon FlashControlMode Values</a> <br><span class='n s'>(note: group C tags may apply to group B settings for some models)</span></td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>FlashGroupAOutput <br>FlashGroupACompensation</td> <td class=c>int8u<br>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>FlashGroupBOutput <br>FlashGroupBCompensation</td> <td class=c>int8u<br>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>FlashGroupCOutput <br>FlashGroupCCompensation</td> <td class=c>int8u<br>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='27 = 0x1b'>27</td> <td>ExternalFlashCompensation</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>FlashExposureComp3</td> <td class=c>int8s</td> <td><span class=s><span class=n>(does not include the effect of flash bracketing)</span></span></td></tr> <tr> <td class=r title='39 = 0x27'>39</td> <td>FlashExposureComp4</td> <td class=c>int8s</td> <td><span class=s><span class=n>(includes the effect of flash bracketing. Valid for repeating flash)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='FlashInfoUnknown'>Nikon FlashInfoUnknown Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FlashInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MultiExposure'>Nikon MultiExposure Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>MultiExposureVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>MultiExposureMode</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>1 = Multiple Exposure <br>2 = Image Overlay <br>3 = HDR</span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>MultiExposureShots</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>MultiExposureAutoGain</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='AFInfo2'>Nikon AFInfo2 Tags</a></h2> <p>These tags are written by Nikon DSLR&#39;s which have the live view feature.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>AFInfo2Version</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ContrastDetectAF</td> <td class=c>int8u</td> <td><span class=s><span class=n>(this is Off for the hybrid AF used in Nikon 1 models)</span> <br>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>AFAreaMode</td> <td class=c>int8u</td> <td><span class=s><span class=n>(ContrastDetectAF Off)</span></span><table class=cols><tr> <td>0 = Single Area <br>1 = Dynamic Area <br>2 = Dynamic Area (closest subject) <br>3 = Group Dynamic <br>4 = Dynamic Area (9 points) <br>5 = Dynamic Area (21 points) <br>6 = Dynamic Area (51 points) <br>7 = Dynamic Area (51 points, 3D-tracking) <br>8 = Auto-area <br>9 = Dynamic Area (3D-tracking) <br>10 = Single Area (wide) <br>11 = Dynamic Area (wide) <br>12 = Dynamic Area (wide, 3D-tracking) <br>128 = Single <br>129 = Auto (41 points) <br>130 = Subject Tracking (41 points) <br>131 = Face Priority (41 points)</td></tr></table> <span class=s><span class=n>(ContrastDetectAF On)</span></span><table class=cols><tr> <td>0 = Contrast-detect <br>1 = Contrast-detect (normal area) <br>2 = Contrast-detect (wide area) <br>3 = Contrast-detect (face priority) <br>4 = Contrast-detect (subject tracking) <br>128 = Single <br>129 = Auto (41 points) <br>130 = Subject Tracking (41 points) <br>131 = Face Priority (41 points)</td></tr></table> </td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>PhaseDetectAF</td> <td class=c>int8u</td> <td><span class=s><span class=n>(PrimaryAFPoint and AFPointsUsed below are only valid when this is On)</span></span><table class=cols><tr> <td>0 = Off <br>1 = On (51-point) <br>2 = On (11-point) <br>3 = On (39-point)</td><td>&nbsp;&nbsp;</td> <td>4 = On (73-point) <br>5 = On (5) <br>6 = On (105-point)</td></tr></table> </td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>PrimaryAFPoint</td> <td class=c>int8u</td> <td><span class=s><span class=n>(models with 51-point AF: D3, D3S, D3X, D300, D300S, D700 and D800)</span></span><table class=cols><tr> <td>0 = (none) <br>1 = C6 (Center) <br>2 = B6 <br>3 = A5 <br>4 = D6 <br>5 = E5 <br>6 = C7 <br>7 = B7 <br>8 = A6 <br>9 = D7 <br>10 = E6</td><td>&nbsp;&nbsp;</td> <td>11 = C5 <br>12 = B5 <br>13 = A4 <br>14 = D5 <br>15 = E4 <br>16 = C8 <br>17 = B8 <br>18 = A7 <br>19 = D8 <br>20 = E7 <br>21 = C9</td><td>&nbsp;&nbsp;</td> <td>22 = B9 <br>23 = A8 <br>24 = D9 <br>25 = E8 <br>26 = C10 <br>27 = B10 <br>28 = A9 <br>29 = D10 <br>30 = E9 <br>31 = C11 <br>32 = B11</td><td>&nbsp;&nbsp;</td> <td>33 = D11 <br>34 = C4 <br>35 = B4 <br>36 = A3 <br>37 = D4 <br>38 = E3 <br>39 = C3 <br>40 = B3 <br>41 = A2 <br>42 = D3 <br>43 = E2</td><td>&nbsp;&nbsp;</td> <td>44 = C2 <br>45 = B2 <br>46 = A1 <br>47 = D2 <br>48 = E1 <br>49 = C1 <br>50 = B1 <br>51 = D1</td></tr></table> <span class=s><span class=n>(models with 11-point AF: D90, D3000, D3100, D5000 and D5100)</span></span><table class=cols><tr> <td>0 = (none) <br>1 = Center <br>2 = Top <br>3 = Bottom <br>4 = Mid-left <br>5 = Upper-left</td><td>&nbsp;&nbsp;</td> <td>6 = Lower-left <br>7 = Far Left <br>8 = Mid-right <br>9 = Upper-right <br>10 = Lower-right <br>11 = Far Right</td></tr></table> <span class=s><span class=n>(models with 39-point AF: D600 and D7000)</span></span><table class=cols><tr> <td>0 = (none) <br>1 = C6 (Center) <br>2 = B6 <br>3 = A2 <br>4 = D6 <br>5 = E2 <br>6 = C7 <br>7 = B7</td><td>&nbsp;&nbsp;</td> <td>8 = A3 <br>9 = D7 <br>10 = E3 <br>11 = C5 <br>12 = B5 <br>13 = A1 <br>14 = D5 <br>15 = E1</td><td>&nbsp;&nbsp;</td> <td>16 = C8 <br>17 = B8 <br>18 = D8 <br>19 = C9 <br>20 = B9 <br>21 = D9 <br>22 = C10 <br>23 = B10</td><td>&nbsp;&nbsp;</td> <td>24 = D10 <br>25 = C11 <br>26 = B11 <br>27 = D11 <br>28 = C4 <br>29 = B4 <br>30 = D4 <br>31 = C3</td><td>&nbsp;&nbsp;</td> <td>32 = B3 <br>33 = D3 <br>34 = C2 <br>35 = B2 <br>36 = D2 <br>37 = C1 <br>38 = B1 <br>39 = D1</td></tr></table> <span class=s><span class=n>(Nikon 1 models with older 135-point AF and 73-point phase-detect AF)</span></span><table class=cols><tr> <td>0 = (none) <br>1 = E8 (Center) <br>2 = D8 <br>3 = C8 <br>4 = B8 <br>5 = A8 <br>6 = F8 <br>7 = G8 <br>8 = H8 <br>9 = I8 <br>10 = E9 <br>11 = D9 <br>12 = C9 <br>13 = B9 <br>14 = A9 <br>15 = F9 <br>16 = G9 <br>17 = H9 <br>18 = I9 <br>19 = E7 <br>20 = D7 <br>21 = C7 <br>22 = B7 <br>23 = A7 <br>24 = F7 <br>25 = G7 <br>26 = H7 <br>27 = I7</td><td>&nbsp;&nbsp;</td> <td>28 = E10 <br>29 = D10 <br>30 = C10 <br>31 = B10 <br>32 = A10 <br>33 = F10 <br>34 = G10 <br>35 = H10 <br>36 = I10 <br>37 = E11 <br>38 = D11 <br>39 = C11 <br>40 = B11 <br>41 = A11 <br>42 = F11 <br>43 = G11 <br>44 = H11 <br>45 = I11 <br>46 = E12 <br>47 = D12 <br>48 = C12 <br>49 = B12 <br>50 = A12 <br>51 = F12 <br>52 = G12 <br>53 = H12 <br>54 = I12 <br>55 = E13</td><td>&nbsp;&nbsp;</td> <td>56 = D13 <br>57 = C13 <br>58 = B13 <br>59 = A13 <br>60 = F13 <br>61 = G13 <br>62 = H13 <br>63 = I13 <br>64 = E14 <br>65 = D14 <br>66 = C14 <br>67 = B14 <br>68 = A14 <br>69 = F14 <br>70 = G14 <br>71 = H14 <br>72 = I14 <br>73 = E15 <br>74 = D15 <br>75 = C15 <br>76 = B15 <br>77 = A15 <br>78 = F15 <br>79 = G15 <br>80 = H15 <br>81 = I15 <br>82 = E6 <br>83 = D6</td><td>&nbsp;&nbsp;</td> <td>84 = C6 <br>85 = B6 <br>86 = A6 <br>87 = F6 <br>88 = G6 <br>89 = H6 <br>90 = I6 <br>91 = E5 <br>92 = D5 <br>93 = C5 <br>94 = B5 <br>95 = A5 <br>96 = F5 <br>97 = G5 <br>98 = H5 <br>99 = I5 <br>100 = E4 <br>101 = D4 <br>102 = C4 <br>103 = B4 <br>104 = A4 <br>105 = F4 <br>106 = G4 <br>107 = H4 <br>108 = I4 <br>109 = E3 <br>110 = D3 <br>111 = C3</td><td>&nbsp;&nbsp;</td> <td>112 = B3 <br>113 = A3 <br>114 = F3 <br>115 = G3 <br>116 = H3 <br>117 = I3 <br>118 = E2 <br>119 = D2 <br>120 = C2 <br>121 = B2 <br>122 = A2 <br>123 = F2 <br>124 = G2 <br>125 = H2 <br>126 = I2 <br>127 = E1 <br>128 = D1 <br>129 = C1 <br>130 = B1 <br>131 = A1 <br>132 = F1 <br>133 = G1 <br>134 = H1 <br>135 = I1</td></tr></table> <span class=s><span class=n>(Nikon 1 models with newer 135-point AF and 73-point phase-detect AF -- 9 rows (B-J) and 15 columns (1-15), inside a grid of 11 rows by 15 columns. The points are numbered sequentially, with F8 at the center)</span> <br>0 = (none) <br>82 = F8 (Center) <br><span class=n>(Nikon 1 models with 171-point AF and 105-point phase-detect AF -- 9 rows (B-J) and 19 columns (2-20), inside a grid of 11 rows by 21 columns. The points are numbered sequentially, with F11 at the center)</span> <br>0 = (none) <br>115 = F11 (Center) <br><span class=n>(future models?...)</span> <br>0 = (none) <br>1 = Center</span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>AFPointsUsed <br>AFPointsUsed <br>AFPointsUsed <br>AFPointsUsed <br>AFPointsUsed <br>AFPointsUsed <br>AFPointsUsed</td> <td class=c>undef[7]<br>undef[2]<br>undef[7]<br>undef[17]<br>undef[21]<br>undef[29]<br>undef[7]</td> <td><span class=s><span class=n>(models with 51-point AF -- 5 rows: A1-9, B1-11, C1-11, D1-11, E1-9. Center point is C6)</span> <br><span class=n>(models with 11-point AF)</span></span><table class=cols><tr> <td>0x0 = (none) <br>0x7ff = All 11 Points <br>Bit 0 = Center <br>Bit 1 = Top <br>Bit 2 = Bottom <br>Bit 3 = Mid-left <br>Bit 4 = Upper-left</td><td>&nbsp;&nbsp;</td> <td>Bit 5 = Lower-left <br>Bit 6 = Far Left <br>Bit 7 = Mid-right <br>Bit 8 = Upper-right <br>Bit 9 = Lower-right <br>Bit 10 = Far Right</td></tr></table> <span class=s><span class=n>(models with 39-point AF -- 5 rows: A1-3, B1-11, C1-11, D1-11, E1-3. Center point is C6)</span> <br><span class=n>(older models with 135-point AF -- 9 rows (A-I) and 15 columns (1-15). Center point is E8. The odd-numbered columns, columns 2 and 14, and the remaining corner points are not used for 41-point AF mode)</span> <br><span class=n>(newer models with 135-point AF -- 9 rows (B-J) and 15 colums (1-15). Center point is F8)</span> <br><span class=n>(models with 171-point AF -- 9 rows (B-J) and 19 columns (2-20). Center point is F10)</span></span></td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>AFImageWidth</td> <td class=c>int16u</td> <td><span class=s><span class=n>(this and the following tags are valid only for contrast-detect AF)</span></span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>AFImageHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>AFAreaXPosition</td> <td class=c>int16u</td> <td><span class=s><span class=n>(center of AF area in AFImage coordinates)</span></span></td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>AFAreaYPosition</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>AFAreaWidth</td> <td class=c>int16u</td> <td><span class=s><span class=n>(size of AF area in AFImage coordinates)</span></span></td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>AFAreaHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>ContrastDetectAFInFocus</td> <td class=c>int8u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='FileInfo'>Nikon FileInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FileInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>DirectoryNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>FileNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AFTune'>Nikon AFTune Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>AFFineTune</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On (1) <br>2 = On (2)</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>AFFineTuneIndex</td> <td class=c>int8u</td> <td><span class=s><span class=n>(index of saved lens)</span></span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>AFFineTuneAdj</td> <td class=c>int8s</td> <td><span class=s><span class=n>(may only be valid for saved lenses)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='RetouchInfo'>Nikon RetouchInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>RetouchInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>RetouchNEFProcessing</td> <td class=c>int8s</td> <td><span class=s>-1 = Off <br>1 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='BarometerInfo'>Nikon BarometerInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>BarometerInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>Altitude</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CaptureOffsets'>Nikon CaptureOffsets Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>IFD0_Offset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>PreviewIFD_Offset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>SubIFD_Offset</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Scan'>Nikon Scan Tags</a></h2> <p>This information is written by the Nikon Scan software.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>FilmType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0040 = 64'>0x0040</td> <td>MultiSample</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0041 = 65'>0x0041</td> <td>BitDepth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0050 = 80'>0x0050</td> <td>MasterGain</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0051 = 81'>0x0051</td> <td>ColorGain</td> <td class=c>rational64s[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0060 = 96'>0x0060</td> <td>ScanImageEnhancer</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x0100 = 256'>0x0100</td> <td>DigitalICE</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0110 = 272'>0x0110</td> <td>ROCInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#ROC'>Nikon ROC Tags</a></td></tr> <tr> <td title='0x0120 = 288'>0x0120</td> <td>GEMInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#GEM'>Nikon GEM Tags</a></td></tr> <tr class=b> <td title='0x0200 = 512'>0x0200</td> <td>DigitalDEEShadowAdj</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0201 = 513'>0x0201</td> <td>DigitalDEEThreshold</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0202 = 514'>0x0202</td> <td>DigitalDEEHighlightAdj</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ROC'>Nikon ROC Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>DigitalROC</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='GEM'>Nikon GEM Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>DigitalGEM</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CaptureOutput'>Nikon CaptureOutput Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>OutputImageWidth</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>OutputImageHeight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>OutputResolution</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Type2'>Nikon Type2 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>Quality</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>ColorMode</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>ImageAdjustment</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0006 = 6'>0x0006</td> <td>CCDSensitivity</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x0007 = 7'>0x0007</td> <td>WhiteBalance</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0008 = 8'>0x0008</td> <td>Focus</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x000a = 10'>0x000a</td> <td>DigitalZoom</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000b = 11'>0x000b</td> <td>Converter</td> <td class=c>Y</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='NCDT'>Nikon NCDT Tags</a></h2> <p>Nikon-specific QuickTime tags found in the NCDT atom of MOV videos from various Nikon models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'NCDB'</td> <td>NikonNCDB</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#NCDB'>Nikon NCDB Tags</a></td></tr> <tr class=b> <td>'NCHD'</td> <td>MakerNoteVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'NCTG'</td> <td>NikonTags</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#NCTG'>Nikon NCTG Tags</a></td></tr> <tr class=b> <td>'NCTH'</td> <td>ThumbnailImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'NCVW'</td> <td>PreviewImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='NCDB'>Nikon NCDB Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='NCTG'>Nikon NCTG Tags</a></h2> <p>These tags are found in proprietary-format records of the NCTG atom in MOV videos from some Nikon cameras.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>Software</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0011 = 17'>0x0011</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0012 = 18'>0x0012</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0013 = 19'>0x0013</td> <td>FrameCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0016 = 22'>0x0016</td> <td>FrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0022 = 34'>0x0022</td> <td>FrameWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0023 = 35'>0x0023</td> <td>FrameHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0032 = 50'>0x0032</td> <td>AudioChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0033 = 51'>0x0033</td> <td>AudioBitsPerSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0034 = 52'>0x0034</td> <td>AudioSampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x110829a = 17859226'>0x110829a</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x110829d = 17859229'>0x110829d</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1108822 = 17860642'>0x1108822</td> <td>ExposureProgram</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Not Defined <br>1 = Manual <br>2 = Program AE <br>3 = Aperture-priority AE <br>4 = Shutter speed priority AE <br>5 = Creative (Slow speed) <br>6 = Action (High speed) <br>7 = Portrait <br>8 = Landscape</td></tr></table> </td></tr> <tr class=b> <td title='0x1109204 = 17863172'>0x1109204</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1109207 = 17863175'>0x1109207</td> <td>MeteringMode</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Unknown <br>1 = Average <br>2 = Center-weighted average <br>3 = Spot <br>4 = Multi-spot <br>5 = Multi-segment <br>6 = Partial <br>255 = Other</td></tr></table> </td></tr> <tr class=b> <td title='0x110920a = 17863178'>0x110920a</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x110a434 = 17867828'>0x110a434</td> <td>LensModel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1200000 = 18874368'>0x1200000</td> <td>GPSVersionID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1200001 = 18874369'>0x1200001</td> <td>GPSLatitudeRef</td> <td class=c>N</td> <td><span class=s>&#39;N&#39; = North <br>&#39;S&#39; = South</span></td></tr> <tr class=b> <td title='0x1200002 = 18874370'>0x1200002</td> <td>GPSLatitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1200003 = 18874371'>0x1200003</td> <td>GPSLongitudeRef</td> <td class=c>N</td> <td><span class=s>&#39;E&#39; = East <br>&#39;W&#39; = West</span></td></tr> <tr class=b> <td title='0x1200004 = 18874372'>0x1200004</td> <td>GPSLongitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1200005 = 18874373'>0x1200005</td> <td>GPSAltitudeRef</td> <td class=c>N</td> <td><span class=s>0 = Above Sea Level <br>1 = Below Sea Level</span></td></tr> <tr class=b> <td title='0x1200006 = 18874374'>0x1200006</td> <td>GPSAltitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1200007 = 18874375'>0x1200007</td> <td>GPSTimeStamp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1200008 = 18874376'>0x1200008</td> <td>GPSSatellites</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1200010 = 18874384'>0x1200010</td> <td>GPSImgDirectionRef</td> <td class=c>N</td> <td><span class=s>&#39;M&#39; = Magnetic North <br>&#39;T&#39; = True North</span></td></tr> <tr class=b> <td title='0x1200011 = 18874385'>0x1200011</td> <td>GPSImgDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1200012 = 18874386'>0x1200012</td> <td>GPSMapDatum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x120001d = 18874397'>0x120001d</td> <td>GPSDateStamp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2000001 = 33554433'>0x2000001</td> <td>MakerNoteVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2000005 = 33554437'>0x2000005</td> <td>WhiteBalance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x2000007 = 33554439'>0x2000007</td> <td>FocusMode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x200000b = 33554443'>0x200000b</td> <td>WhiteBalanceFineTune</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x200001b = 33554459'>0x200001b</td> <td>CropHiSpeed</td> <td class=c title=' ~ = Writable only with -n'>int16u[7]~</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x200001e = 33554462'>0x200001e</td> <td>ColorSpace</td> <td class=c>N</td> <td><span class=s>1 = sRGB <br>2 = Adobe RGB</span></td></tr> <tr> <td title='0x200001f = 33554463'>0x200001f</td> <td>VRInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#VRInfo'>Nikon VRInfo Tags</a></td></tr> <tr class=b> <td title='0x2000023 = 33554467'>0x2000023</td> <td>PictureControlData</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#PictureControl'>Nikon PictureControl Tags</a></td></tr> <tr> <td title='0x2000024 = 33554468'>0x2000024</td> <td>WorldTime</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#WorldTime'>Nikon WorldTime Tags</a></td></tr> <tr class=b> <td title='0x2000025 = 33554469'>0x2000025</td> <td>ISOInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#ISOInfo'>Nikon ISOInfo Tags</a></td></tr> <tr> <td title='0x200002c = 33554476'>0x200002c</td> <td>UnknownInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#UnknownInfo'>Nikon UnknownInfo Tags</a></td></tr> <tr class=b> <td title='0x2000032 = 33554482'>0x2000032</td> <td>UnknownInfo2</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#UnknownInfo'>Nikon UnknownInfo Tags</a></td></tr> <tr> <td title='0x2000039 = 33554489'>0x2000039</td> <td>LocationInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#LocationInfo'>Nikon LocationInfo Tags</a></td></tr> <tr class=b> <td title='0x2000083 = 33554563'>0x2000083</td> <td>LensType</td> <td class=c>N</td> <td><span class=s>Bit 0 = MF <br>Bit 1 = D <br>Bit 2 = G <br>Bit 3 = VR</span></td></tr> <tr> <td title='0x2000084 = 33554564'>0x2000084</td> <td>Lens</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2000087 = 33554567'>0x2000087</td> <td>FlashMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Did Not Fire <br>1 = Fired, Manual <br>3 = Not Ready <br>7 = Fired, External <br>8 = Fired, Commander Mode <br>9 = Fired, TTL Mode</td></tr></table> </td></tr> <tr> <td title='0x20000ab = 33554603'>0x20000ab</td> <td>VariProgram</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x20000b1 = 33554609'>0x20000b1</td> <td>HighISONoiseReduction</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Minimal <br>2 = Low <br>3 = Medium Low</td><td>&nbsp;&nbsp;</td> <td>4 = Normal <br>5 = Medium High <br>6 = High</td></tr></table> </td></tr> <tr> <td title='0x20000b7 = 33554615'>0x20000b7</td> <td>AFInfo2</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#AFInfo2'>Nikon AFInfo2 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='MOV'>Nikon MOV Tags</a></h2> <p>This information is found in MOV and QT videos from some Nikon cameras.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='38 = 0x26'>38</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='50 = 0x32'>50</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='68 = 0x44'>68</td> <td>WhiteBalance</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Daylight <br>2 = Shade</td><td>&nbsp;&nbsp;</td> <td>3 = Fluorescent <br>4 = Tungsten <br>5 = Manual</td></tr></table> </td></tr> <tr> <td class=r title='72 = 0x48'>72</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='175 = 0xaf'>175</td> <td>Software</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='223 = 0xdf'>223</td> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AVI'>Nikon AVI Tags</a></h2> <p>Nikon-specific RIFF tags found in AVI videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'nctg'</td> <td>NikonTags</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#AVITags'>Nikon AVITags Tags</a></td></tr> <tr class=b> <td>'ncth'</td> <td>ThumbnailImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ncvr'</td> <td>NikonVers</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#AVIVers'>Nikon AVIVers Tags</a></td></tr> <tr class=b> <td>'ncvw'</td> <td>PreviewImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AVITags'>Nikon AVITags Tags</a></h2> <p>These tags and the AVIVer tags below are found in proprietary-format records of Nikon AVI videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>Software</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0006 = 6'>0x0006</td> <td>Equipment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0007 = 7'>0x0007</td> <td>Orientation</td> <td class=c>N</td> <td><table class=cols><tr> <td>1 = Horizontal (normal) <br>2 = Mirror horizontal <br>3 = Rotate 180 <br>4 = Mirror vertical <br>5 = Mirror horizontal and rotate 270 CW <br>6 = Rotate 90 CW <br>7 = Mirror horizontal and rotate 90 CW <br>8 = Rotate 270 CW</td></tr></table> </td></tr> <tr class=b> <td title='0x0008 = 8'>0x0008</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0009 = 9'>0x0009</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000a = 10'>0x000a</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000b = 11'>0x000b</td> <td>MaxApertureValue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000c = 12'>0x000c</td> <td>MeteringMode</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Unknown <br>1 = Average <br>2 = Center-weighted average <br>3 = Spot <br>4 = Multi-spot <br>5 = Multi-segment <br>6 = Partial <br>255 = Other</td></tr></table> </td></tr> <tr> <td title='0x000f = 15'>0x000f</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0010 = 16'>0x0010</td> <td>XResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0011 = 17'>0x0011</td> <td>YResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0012 = 18'>0x0012</td> <td>ResolutionUnit</td> <td class=c>N</td> <td><span class=s>1 = None <br>2 = inches <br>3 = cm</span></td></tr> <tr> <td title='0x0013 = 19'>0x0013</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0014 = 20'>0x0014</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0016 = 22'>0x0016</td> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0018 = 24'>0x0018</td> <td>FocusMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x001b = 27'>0x001b</td> <td>DigitalZoom</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001d = 29'>0x001d</td> <td>ColorMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x001e = 30'>0x001e</td> <td>Sharpness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001f = 31'>0x001f</td> <td>WhiteBalance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0020 = 32'>0x0020</td> <td>NoiseReduction</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AVIVers'>Nikon AVIVers Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>MakerNoteType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>MakerNoteVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LensID'>Nikon LensID Values</a></h2> <p>The Nikon LensID is constructed as a Composite tag from the raw hex values of 8 other tags: LensIDNumber, LensFStops, MinFocalLength, MaxFocalLength, MaxApertureAtMinFocal, MaxApertureAtMaxFocal, MCUVersion and LensType, in that order. (source: <a href="http://www.rottmerhusen.com/objektives/lensid/thirdparty.html">http://www.rottmerhusen.com/objektives/lensid/thirdparty.html</a>.) Multiple lenses with the same LensID are differentiated by decimal values in the list below. The user-defined &quot;Lenses&quot; list may be used to specify the lens for ExifTool to choose in these cases (see the <a href="../config.html">sample config file</a> for details).</p> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>LensID</th></tr> <tr><td>'00 00 00 00 00 00 00 01'</td><td>= Manual Lens No CPU</td> </tr><tr><td>'00 00 00 00 00 00 E1 12'</td><td>= TC-17E II</td> </tr><tr><td>'00 00 00 00 00 00 F1 0C'</td><td>= TC-14E [II] or Sigma APO Tele Converter 1.4x EX DG or Kenko Teleplus PRO 300 DG 1.4x</td> </tr><tr><td>'00 00 00 00 00 00 F2 18'</td><td>= TC-20E [II] or Sigma APO Tele Converter 2x EX DG or Kenko Teleplus PRO 300 DG 2.0x</td> </tr><tr><td>'00 00 48 48 53 53 00 01'</td><td>= Loreo 40mm F11-22 3D Lens in a Cap 9005</td> </tr><tr><td>'00 36 1C 2D 34 3C 00 06'</td><td>= Tamron SP AF 11-18mm f/4.5-5.6 Di II LD Aspherical (IF) (A13)</td> </tr><tr><td>'00 3C 1F 37 30 30 00 06'</td><td>= Tokina AT-X 124 AF PRO DX (AF 12-24mm f/4)</td> </tr><tr><td>'00 3C 2B 44 30 30 00 06'</td><td>= Tokina AT-X 17-35 F4 PRO FX (AF 17-35mm f/4)</td> </tr><tr><td>'00 3C 5C 80 30 30 00 0E'</td><td>= Tokina AT-X 70-200 F4 FX VCM-S (AF 70-200mm f/4)</td> </tr><tr><td>'00 3E 80 A0 38 3F 00 02'</td><td>= Tamron SP AF 200-500mm f/5-6.3 Di LD (IF) (A08)</td> </tr><tr><td>'00 3F 2D 80 2B 40 00 06'</td><td>= Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) (A14)</td> </tr><tr><td>'00 3F 2D 80 2C 40 00 06'</td><td>= Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14)</td> </tr><tr><td>'00 3F 80 A0 38 3F 00 02'</td><td>= Tamron SP AF 200-500mm f/5-6.3 Di (A08)</td> </tr><tr><td>'00 40 11 11 2C 2C 00 00'</td><td>= Samyang 8mm f/3.5 Fish-Eye</td> </tr><tr><td>'00 40 18 2B 2C 34 00 06'</td><td>= Tokina AT-X 107 AF DX Fisheye (AF 10-17mm f/3.5-4.5)</td> </tr><tr><td>'00 40 2A 72 2C 3C 00 06'</td><td>= Tokina AT-X 16.5-135 DX (AF 16.5-135mm F3.5-5.6)</td> </tr><tr><td>'00 40 2B 2B 2C 2C 00 02'</td><td>= Tokina AT-X 17 AF PRO (AF 17mm f/3.5)</td> </tr><tr><td>'00 40 2D 2D 2C 2C 00 00'</td><td>= Carl Zeiss Distagon T* 3.5/18 ZF.2</td> </tr><tr><td>'00 40 2D 80 2C 40 00 06'</td><td>= Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14NII)</td> </tr><tr><td>'00 40 2D 88 2C 40 00 06'</td><td>= Tamron AF 18-250mm f/3.5-6.3 Di II LD Aspherical (IF) Macro (A18NII)</td> </tr><tr><td>'00 40 2D 88 2C 40 62 06'</td><td>= Tamron AF 18-250mm f/3.5-6.3 Di II LD Aspherical (IF) Macro (A18)</td> </tr><tr><td>'00 40 31 31 2C 2C 00 00'</td><td>= Voigtlander Color Skopar 20mm F3.5 SLII Aspherical</td> </tr><tr><td>'00 40 37 80 2C 3C 00 02'</td><td>= Tokina AT-X 242 AF (AF 24-200mm f/3.5-5.6)</td> </tr><tr><td>'00 40 64 64 2C 2C 00 00'</td><td>= Voigtlander APO-Lanthar 90mm F3.5 SLII Close Focus</td> </tr><tr><td>'00 44 60 98 34 3C 00 02'</td><td>= Tokina AT-X 840 D (AF 80-400mm f/4.5-5.6)</td> </tr><tr><td>'00 47 10 10 24 24 00 00'</td><td>= Fisheye Nikkor 8mm f/2.8 AiS</td> </tr><tr><td>'00 47 25 25 24 24 00 02'</td><td>= Tamron SP AF 14mm f/2.8 Aspherical (IF) (69E)</td> </tr><tr><td>'00 47 3C 3C 24 24 00 00'</td><td>= Nikkor 28mm f/2.8 AiS</td> </tr><tr><td>'00 47 44 44 24 24 00 06'</td><td>= Tokina AT-X M35 PRO DX (AF 35mm f/2.8 Macro)</td> </tr><tr><td>'00 47 53 80 30 3C 00 06'</td><td>= Tamron AF 55-200mm f/4-5.6 Di II LD (A15)</td> </tr><tr><td>'00 48 1C 29 24 24 00 06'</td><td>= Tokina AT-X 116 PRO DX (AF 11-16mm f/2.8)</td> </tr><tr><td>'00 48 29 3C 24 24 00 06'</td><td>= Tokina AT-X 16-28 AF PRO FX (AF 16-28mm f/2.8)</td> </tr><tr><td>'00 48 29 50 24 24 00 06'</td><td>= Tokina AT-X 165 PRO DX (AF 16-50mm f/2.8)</td> </tr><tr><td>'00 48 32 32 24 24 00 00'</td><td>= Carl Zeiss Distagon T* 2.8/21 ZF.2</td> </tr><tr><td>'00 48 37 5C 24 24 00 06'</td><td>= Tokina AT-X 24-70 F2.8 PRO FX (AF 24-70mm f/2.8)</td> </tr><tr><td>'00 48 3C 3C 24 24 00 00'</td><td>= Voigtlander Color Skopar 28mm F2.8 SL II</td> </tr><tr><td>'00 48 3C 60 24 24 00 02'</td><td>= Tokina AT-X 280 AF PRO (AF 28-80mm f/2.8)</td> </tr><tr><td>'00 48 3C 6A 24 24 00 02'</td><td>= Tamron SP AF 28-105mm f/2.8 LD Aspherical IF (176D)</td> </tr><tr><td>'00 48 50 50 18 18 00 00'</td><td>= Nikkor H 50mm f/2</td> </tr><tr><td>'00 48 50 72 24 24 00 06'</td><td>= Tokina AT-X 535 PRO DX (AF 50-135mm f/2.8)</td> </tr><tr><td>'00 48 5C 80 30 30 00 0E'</td><td>= Tokina AT-X 70-200 F4 FX VCM-S (AF 70-200mm f/4)</td> </tr><tr><td>'00 48 5C 8E 30 3C 00 06'</td><td>= Tamron AF 70-300mm f/4-5.6 Di LD Macro 1:2 (A17NII)</td> </tr><tr><td>'00 48 68 68 24 24 00 00'</td><td>= Series E 100mm f/2.8</td> </tr><tr><td>'00 48 80 80 30 30 00 00'</td><td>= Nikkor 200mm f/4 AiS</td> </tr><tr><td>'00 49 30 48 22 2B 00 02'</td><td>= Tamron SP AF 20-40mm f/2.7-3.5 (166D)</td> </tr><tr><td>'00 4C 6A 6A 20 20 00 00'</td><td>= Nikkor 105mm f/2.5 AiS</td> </tr><tr><td>'00 4C 7C 7C 2C 2C 00 02'</td><td>= Tamron SP AF 180mm f/3.5 Di Model (B01)</td> </tr><tr><td>'00 53 2B 50 24 24 00 06'</td><td>= Tamron SP AF 17-50mm f/2.8 XR Di II LD Aspherical (IF) (A16)</td> </tr><tr><td>'00 54 2B 50 24 24 00 06'</td><td>= Tamron SP AF 17-50mm f/2.8 XR Di II LD Aspherical (IF) (A16NII)</td> </tr><tr><td>'00 54 3C 3C 18 18 00 00'</td><td>= Carl Zeiss Distagon T* 2/28 ZF.2</td> </tr><tr><td>'00 54 44 44 0C 0C 00 00'</td><td>= Carl Zeiss Distagon T* 1.4/35 ZF.2</td> </tr><tr><td>'00 54 44 44 18 18 00 00'</td><td>= Carl Zeiss Distagon T* 2/35 ZF.2</td> </tr><tr><td>'00 54 48 48 18 18 00 00'</td><td>= Voigtlander Ultron 40mm F2 SLII Aspherical</td> </tr><tr><td>'00 54 50 50 0C 0C 00 00'</td><td>= Carl Zeiss Planar T* 1.4/50 ZF.2</td> </tr><tr><td>'00 54 50 50 18 18 00 00'</td><td>= Carl Zeiss Makro-Planar T* 2/50 ZF.2</td> </tr><tr><td>'00 54 53 53 0C 0C 00 00'</td><td>= Zeiss Otus 1.4/55</td> </tr><tr><td>'00 54 55 55 0C 0C 00 00'</td><td>= Voigtlander Nokton 58mm F1.4 SLII</td> </tr><tr><td>'00 54 56 56 30 30 00 00'</td><td>= Coastal Optical Systems 60mm 1:4 UV-VIS-IR Macro Apo</td> </tr><tr><td>'00 54 62 62 0C 0C 00 00'</td><td>= Carl Zeiss Planar T* 1.4/85 ZF.2</td> </tr><tr><td>'00 54 68 68 18 18 00 00'</td><td>= Carl Zeiss Makro-Planar T* 2/100 ZF.2</td> </tr><tr><td>'00 54 68 68 24 24 00 02'</td><td>= Tokina AT-X M100 AF PRO D (AF 100mm f/2.8 Macro)</td> </tr><tr><td>'00 54 72 72 18 18 00 00'</td><td>= Carl Zeiss Apo Sonnar T* 2/135 ZF.2</td> </tr><tr><td>'00 54 8E 8E 24 24 00 02'</td><td>= Tokina AT-X 300 AF PRO (AF 300mm f/2.8)</td> </tr><tr><td>'00 57 50 50 14 14 00 00'</td><td>= Nikkor 50mm f/1.8 AI</td> </tr><tr><td>'00 58 64 64 20 20 00 00'</td><td>= Soligor C/D Macro MC 90mm f/2.5</td> </tr><tr><td>'01 00 00 00 00 00 02 00'</td><td>= TC-16A</td> </tr><tr><td>'01 00 00 00 00 00 08 00'</td><td>= TC-16A</td> </tr><tr><td>'01 54 62 62 0C 0C 00 00'</td><td>= Zeiss Otus 1.4/85</td> </tr><tr><td>'01 58 50 50 14 14 02 00'</td><td>= AF Nikkor 50mm f/1.8</td> </tr><tr><td>'01 58 50 50 14 14 05 00'</td><td>= AF Nikkor 50mm f/1.8</td> </tr><tr><td>'02 2F 98 98 3D 3D 02 00'</td><td>= Sigma APO 400mm F5.6</td> </tr><tr><td>'02 34 A0 A0 44 44 02 00'</td><td>= Sigma APO 500mm F7.2</td> </tr><tr><td>'02 37 5E 8E 35 3D 02 00'</td><td>= Sigma 75-300mm F4.5-5.6 APO</td> </tr><tr><td>'02 37 A0 A0 34 34 02 00'</td><td>= Sigma APO 500mm F4.5</td> </tr><tr><td>'02 3A 37 50 31 3D 02 00'</td><td>= Sigma 24-50mm F4-5.6 UC</td> </tr><tr><td>'02 3A 5E 8E 32 3D 02 00'</td><td>= Sigma 75-300mm F4.0-5.6</td> </tr><tr><td>'02 3B 44 61 30 3D 02 00'</td><td>= Sigma 35-80mm F4-5.6</td> </tr><tr><td>'02 3C B0 B0 3C 3C 02 00'</td><td>= Sigma APO 800mm F5.6</td> </tr><tr><td>'02 3F 24 24 2C 2C 02 00'</td><td>= Sigma 14mm F3.5</td> </tr><tr><td>'02 3F 3C 5C 2D 35 02 00'</td><td>= Sigma 28-70mm F3.5-4.5 UC</td> </tr><tr><td>'02 40 44 5C 2C 34 02 00'</td><td>= Exakta AF 35-70mm 1:3.5-4.5 MC</td> </tr><tr><td>'02 40 44 73 2B 36 02 00'</td><td>= Sigma 35-135mm F3.5-4.5 a</td> </tr><tr><td>'02 40 5C 82 2C 35 02 00'</td><td>= Sigma APO 70-210mm F3.5-4.5</td> </tr><tr><td>'02 42 44 5C 2A 34 02 00'</td><td>= AF Zoom-Nikkor 35-70mm f/3.3-4.5</td> </tr><tr><td>'02 42 44 5C 2A 34 08 00'</td><td>= AF Zoom-Nikkor 35-70mm f/3.3-4.5</td> </tr><tr><td>'02 46 37 37 25 25 02 00'</td><td>= Sigma 24mm F2.8 Super Wide II Macro</td> </tr><tr><td>'02 46 3C 5C 25 25 02 00'</td><td>= Sigma 28-70mm F2.8</td> </tr><tr><td>'02 46 5C 82 25 25 02 00'</td><td>= Sigma 70-210mm F2.8 APO</td> </tr><tr><td>'02 48 50 50 24 24 02 00'</td><td>= Sigma Macro 50mm F2.8</td> </tr><tr><td>'02 48 65 65 24 24 02 00'</td><td>= Sigma Macro 90mm F2.8</td> </tr><tr><td>'03 43 5C 81 35 35 02 00'</td><td>= Soligor AF C/D Zoom UMCS 70-210mm 1:4.5</td> </tr><tr><td>'03 48 5C 81 30 30 02 00'</td><td>= AF Zoom-Nikkor 70-210mm f/4</td> </tr><tr><td>'04 48 3C 3C 24 24 03 00'</td><td>= AF Nikkor 28mm f/2.8</td> </tr><tr><td>'05 54 50 50 0C 0C 04 00'</td><td>= AF Nikkor 50mm f/1.4</td> </tr><tr><td>'06 3F 68 68 2C 2C 06 00'</td><td>= Cosina AF 100mm F3.5 Macro</td> </tr><tr><td>'06 54 53 53 24 24 06 00'</td><td>= AF Micro-Nikkor 55mm f/2.8</td> </tr><tr><td>'07 36 3D 5F 2C 3C 03 00'</td><td>= Cosina AF Zoom 28-80mm F3.5-5.6 MC Macro</td> </tr><tr><td>'07 3E 30 43 2D 35 03 00'</td><td>= Soligor AF Zoom 19-35mm 1:3.5-4.5 MC</td> </tr><tr><td>'07 40 2F 44 2C 34 03 02'</td><td>= Tamron AF 19-35mm f/3.5-4.5 (A10)</td> </tr><tr><td>'07 40 30 45 2D 35 03 02'</td><td>= Tamron AF 19-35mm f/3.5-4.5 (A10)</td> </tr><tr><td>'07 40 3C 5C 2C 35 03 00'</td><td>= Tokina AF 270 II (AF 28-70mm f/3.5-4.5)</td> </tr><tr><td>'07 40 3C 62 2C 34 03 00'</td><td>= AF Zoom-Nikkor 28-85mm f/3.5-4.5</td> </tr><tr><td>'07 46 2B 44 24 30 03 02'</td><td>= Tamron SP AF 17-35mm f/2.8-4 Di LD Aspherical (IF) (A05)</td> </tr><tr><td>'07 46 3D 6A 25 2F 03 00'</td><td>= Cosina AF Zoom 28-105mm F2.8-3.8 MC</td> </tr><tr><td>'07 47 3C 5C 25 35 03 00'</td><td>= Tokina AF 287 SD (AF 28-70mm f/2.8-4.5)</td> </tr><tr><td>'07 48 3C 5C 24 24 03 00'</td><td>= Tokina AT-X 287 AF (AF 28-70mm f/2.8)</td> </tr><tr><td>'08 40 44 6A 2C 34 04 00'</td><td>= AF Zoom-Nikkor 35-105mm f/3.5-4.5</td> </tr><tr><td>'09 48 37 37 24 24 04 00'</td><td>= AF Nikkor 24mm f/2.8</td> </tr><tr><td>'0A 48 8E 8E 24 24 03 00'</td><td>= AF Nikkor 300mm f/2.8 IF-ED</td> </tr><tr><td>'0A 48 8E 8E 24 24 05 00'</td><td>= AF Nikkor 300mm f/2.8 IF-ED N</td> </tr><tr><td>'0B 3E 3D 7F 2F 3D 0E 00'</td><td>= Tamron AF 28-200mm f/3.8-5.6 (71D)</td> </tr><tr><td>'0B 3E 3D 7F 2F 3D 0E 02'</td><td>= Tamron AF 28-200mm f/3.8-5.6D (171D)</td> </tr><tr><td>'0B 48 7C 7C 24 24 05 00'</td><td>= AF Nikkor 180mm f/2.8 IF-ED</td> </tr><tr><td>'0D 40 44 72 2C 34 07 00'</td><td>= AF Zoom-Nikkor 35-135mm f/3.5-4.5</td> </tr><tr><td>'0E 48 5C 81 30 30 05 00'</td><td>= AF Zoom-Nikkor 70-210mm f/4</td> </tr><tr><td>'0E 4A 31 48 23 2D 0E 02'</td><td>= Tamron SP AF 20-40mm f/2.7-3.5 (166D)</td> </tr><tr><td>'0F 58 50 50 14 14 05 00'</td><td>= AF Nikkor 50mm f/1.8 N</td> </tr><tr><td>'10 3D 3C 60 2C 3C D2 02'</td><td>= Tamron AF 28-80mm f/3.5-5.6 Aspherical (177D)</td> </tr><tr><td>'10 48 8E 8E 30 30 08 00'</td><td>= AF Nikkor 300mm f/4 IF-ED</td> </tr><tr><td>'11 48 44 5C 24 24 08 00'</td><td>= AF Zoom-Nikkor 35-70mm f/2.8</td> </tr><tr><td>'12 36 5C 81 35 3D 09 00'</td><td>= Cosina AF Zoom 70-210mm F4.5-5.6 MC Macro</td> </tr><tr><td>'12 36 69 97 35 42 09 00'</td><td>= Soligor AF Zoom 100-400mm 1:4.5-6.7 MC</td> </tr><tr><td>'12 38 69 97 35 42 09 02'</td><td>= Promaster Spectrum 7 100-400mm F4.5-6.7</td> </tr><tr><td>'12 39 5C 8E 34 3D 08 02'</td><td>= Cosina AF Zoom 70-300mm F4.5-5.6 MC Macro</td> </tr><tr><td>'12 3B 68 8D 3D 43 09 02'</td><td>= Cosina AF Zoom 100-300mm F5.6-6.7 MC Macro</td> </tr><tr><td>'12 3B 98 98 3D 3D 09 00'</td><td>= Tokina AT-X 400 AF SD (AF 400mm f/5.6)</td> </tr><tr><td>'12 3D 3C 80 2E 3C DF 02'</td><td>= Tamron AF 28-200mm f/3.8-5.6 AF Aspherical LD (IF) (271D)</td> </tr><tr><td>'12 44 5E 8E 34 3C 09 00'</td><td>= Tokina AF 730 (AF 75-300mm F4.5-5.6)</td> </tr><tr><td>'12 48 5C 81 30 3C 09 00'</td><td>= AF Nikkor 70-210mm f/4-5.6</td> </tr><tr><td>'12 4A 5C 81 31 3D 09 00'</td><td>= Soligor AF C/D Auto Zoom+Macro 70-210mm 1:4-5.6 UMCS</td> </tr><tr><td>'13 42 37 50 2A 34 0B 00'</td><td>= AF Zoom-Nikkor 24-50mm f/3.3-4.5</td> </tr><tr><td>'14 48 60 80 24 24 0B 00'</td><td>= AF Zoom-Nikkor 80-200mm f/2.8 ED</td> </tr><tr><td>'14 48 68 8E 30 30 0B 00'</td><td>= Tokina AT-X 340 AF (AF 100-300mm f/4)</td> </tr><tr><td>'14 54 60 80 24 24 0B 00'</td><td>= Tokina AT-X 828 AF (AF 80-200mm f/2.8)</td> </tr><tr><td>'15 4C 62 62 14 14 0C 00'</td><td>= AF Nikkor 85mm f/1.8</td> </tr><tr><td>'17 3C A0 A0 30 30 0F 00'</td><td>= Nikkor 500mm f/4 P ED IF</td> </tr><tr><td>'17 3C A0 A0 30 30 11 00'</td><td>= Nikkor 500mm f/4 P ED IF</td> </tr><tr><td>'18 40 44 72 2C 34 0E 00'</td><td>= AF Zoom-Nikkor 35-135mm f/3.5-4.5 N</td> </tr><tr><td>'1A 54 44 44 18 18 11 00'</td><td>= AF Nikkor 35mm f/2</td> </tr><tr><td>'1B 44 5E 8E 34 3C 10 00'</td><td>= AF Zoom-Nikkor 75-300mm f/4.5-5.6</td> </tr><tr><td>'1C 48 30 30 24 24 12 00'</td><td>= AF Nikkor 20mm f/2.8</td> </tr><tr><td>'1D 42 44 5C 2A 34 12 00'</td><td>= AF Zoom-Nikkor 35-70mm f/3.3-4.5 N</td> </tr><tr><td>'1E 54 56 56 24 24 13 00'</td><td>= AF Micro-Nikkor 60mm f/2.8</td> </tr><tr><td>'1E 5D 64 64 20 20 13 00'</td><td>= Tamron SP AF 90mm f/2.5 (52E)</td> </tr><tr><td>'1F 54 6A 6A 24 24 14 00'</td><td>= AF Micro-Nikkor 105mm f/2.8</td> </tr><tr><td>'20 3C 80 98 3D 3D 1E 02'</td><td>= Tamron AF 200-400mm f/5.6 LD IF (75D)</td> </tr><tr><td>'20 48 60 80 24 24 15 00'</td><td>= AF Zoom-Nikkor 80-200mm f/2.8 ED</td> </tr><tr><td>'20 5A 64 64 20 20 14 00'</td><td>= Tamron SP AF 90mm f/2.5 Macro (152E)</td> </tr><tr><td>'21 40 3C 5C 2C 34 16 00'</td><td>= AF Zoom-Nikkor 28-70mm f/3.5-4.5</td> </tr><tr><td>'21 56 8E 8E 24 24 14 00'</td><td>= Tamron SP AF 300mm f/2.8 LD-IF (60E)</td> </tr><tr><td>'22 48 72 72 18 18 16 00'</td><td>= AF DC-Nikkor 135mm f/2</td> </tr><tr><td>'22 53 64 64 24 24 E0 02'</td><td>= Tamron SP AF 90mm f/2.8 Macro 1:1 (72E)</td> </tr><tr><td>'23 30 BE CA 3C 48 17 00'</td><td>= Zoom-Nikkor 1200-1700mm f/5.6-8 P ED IF</td> </tr><tr><td>'24 44 60 98 34 3C 1A 02'</td><td>= Tokina AT-X 840 AF-II (AF 80-400mm f/4.5-5.6)</td> </tr><tr><td>'24 48 60 80 24 24 1A 02'</td><td>= AF Zoom-Nikkor 80-200mm f/2.8D ED</td> </tr><tr><td>'24 54 60 80 24 24 1A 02'</td><td>= Tokina AT-X 828 AF PRO (AF 80-200mm f/2.8)</td> </tr><tr><td>'25 44 44 8E 34 42 1B 02'</td><td>= Tokina AF 353 (AF 35-300mm f/4.5-6.7)</td> </tr><tr><td>'25 48 3C 5C 24 24 1B 02.1'</td><td>= Tokina AT-X 270 AF PRO II (AF 28-70mm f/2.6-2.8)</td> </tr><tr><td>'25 48 3C 5C 24 24 1B 02.2'</td><td>= Tokina AT-X 287 AF PRO SV (AF 28-70mm f/2.8)</td> </tr><tr><td>'25 48 44 5C 24 24 1B 02'</td><td>= AF Zoom-Nikkor 35-70mm f/2.8D</td> </tr><tr><td>'25 48 44 5C 24 24 3A 02'</td><td>= AF Zoom-Nikkor 35-70mm f/2.8D</td> </tr><tr><td>'25 48 44 5C 24 24 52 02'</td><td>= AF Zoom-Nikkor 35-70mm f/2.8D</td> </tr><tr><td>'26 3C 54 80 30 3C 1C 06'</td><td>= Sigma 55-200mm F4-5.6 DC</td> </tr><tr><td>'26 3C 5C 82 30 3C 1C 02'</td><td>= Sigma 70-210mm F4-5.6 UC-II</td> </tr><tr><td>'26 3C 5C 8E 30 3C 1C 02'</td><td>= Sigma 70-300mm F4-5.6 DG Macro</td> </tr><tr><td>'26 3C 98 98 3C 3C 1C 02'</td><td>= Sigma APO Tele Macro 400mm F5.6</td> </tr><tr><td>'26 3D 3C 80 2F 3D 1C 02'</td><td>= Sigma 28-300mm F3.8-5.6 Aspherical</td> </tr><tr><td>'26 3E 3C 6A 2E 3C 1C 02'</td><td>= Sigma 28-105mm F3.8-5.6 UC-III Aspherical IF</td> </tr><tr><td>'26 40 27 3F 2C 34 1C 02'</td><td>= Sigma 15-30mm F3.5-4.5 EX DG Aspherical DF</td> </tr><tr><td>'26 40 2D 44 2B 34 1C 02'</td><td>= Sigma 18-35mm F3.5-4.5 Aspherical</td> </tr><tr><td>'26 40 2D 50 2C 3C 1C 06'</td><td>= Sigma 18-50mm F3.5-5.6 DC</td> </tr><tr><td>'26 40 2D 70 2B 3C 1C 06'</td><td>= Sigma 18-125mm F3.5-5.6 DC</td> </tr><tr><td>'26 40 2D 80 2C 40 1C 06'</td><td>= Sigma 18-200mm F3.5-6.3 DC</td> </tr><tr><td>'26 40 37 5C 2C 3C 1C 02'</td><td>= Sigma 24-70mm F3.5-5.6 Aspherical HF</td> </tr><tr><td>'26 40 3C 5C 2C 34 1C 02'</td><td>= AF Zoom-Nikkor 28-70mm f/3.5-4.5D</td> </tr><tr><td>'26 40 3C 60 2C 3C 1C 02'</td><td>= Sigma 28-80mm F3.5-5.6 Mini Zoom Macro II Aspherical</td> </tr><tr><td>'26 40 3C 65 2C 3C 1C 02'</td><td>= Sigma 28-90mm F3.5-5.6 Macro</td> </tr><tr><td>'26 40 3C 80 2B 3C 1C 02'</td><td>= Sigma 28-200mm F3.5-5.6 Compact Aspherical Hyperzoom Macro</td> </tr><tr><td>'26 40 3C 80 2C 3C 1C 02'</td><td>= Sigma 28-200mm F3.5-5.6 Compact Aspherical Hyperzoom Macro</td> </tr><tr><td>'26 40 3C 8E 2C 40 1C 02'</td><td>= Sigma 28-300mm F3.5-6.3 Macro</td> </tr><tr><td>'26 40 7B A0 34 40 1C 02'</td><td>= Sigma APO 170-500mm F5-6.3 Aspherical RF</td> </tr><tr><td>'26 41 3C 8E 2C 40 1C 02'</td><td>= Sigma 28-300mm F3.5-6.3 DG Macro</td> </tr><tr><td>'26 44 73 98 34 3C 1C 02'</td><td>= Sigma 135-400mm F4.5-5.6 APO Aspherical</td> </tr><tr><td>'26 48 11 11 30 30 1C 02'</td><td>= Sigma 8mm F4 EX Circular Fisheye</td> </tr><tr><td>'26 48 27 27 24 24 1C 02'</td><td>= Sigma 15mm F2.8 EX Diagonal Fisheye</td> </tr><tr><td>'26 48 2D 50 24 24 1C 06'</td><td>= Sigma 18-50mm F2.8 EX DC</td> </tr><tr><td>'26 48 31 49 24 24 1C 02'</td><td>= Sigma 20-40mm F2.8</td> </tr><tr><td>'26 48 37 56 24 24 1C 02'</td><td>= Sigma 24-60mm F2.8 EX DG</td> </tr><tr><td>'26 48 3C 5C 24 24 1C 06'</td><td>= Sigma 28-70mm F2.8 EX DG</td> </tr><tr><td>'26 48 3C 5C 24 30 1C 02'</td><td>= Sigma 28-70mm F2.8-4 DG</td> </tr><tr><td>'26 48 3C 6A 24 30 1C 02'</td><td>= Sigma 28-105mm F2.8-4 Aspherical</td> </tr><tr><td>'26 48 8E 8E 30 30 1C 02'</td><td>= Sigma APO Tele Macro 300mm F4</td> </tr><tr><td>'26 54 2B 44 24 30 1C 02'</td><td>= Sigma 17-35mm F2.8-4 EX Aspherical</td> </tr><tr><td>'26 54 37 5C 24 24 1C 02'</td><td>= Sigma 24-70mm F2.8 EX DG Macro</td> </tr><tr><td>'26 54 37 73 24 34 1C 02'</td><td>= Sigma 24-135mm F2.8-4.5</td> </tr><tr><td>'26 54 3C 5C 24 24 1C 02'</td><td>= Sigma 28-70mm F2.8 EX</td> </tr><tr><td>'26 58 31 31 14 14 1C 02'</td><td>= Sigma 20mm F1.8 EX DG Aspherical RF</td> </tr><tr><td>'26 58 37 37 14 14 1C 02'</td><td>= Sigma 24mm F1.8 EX DG Aspherical Macro</td> </tr><tr><td>'26 58 3C 3C 14 14 1C 02'</td><td>= Sigma 28mm F1.8 EX DG Aspherical Macro</td> </tr><tr><td>'27 48 8E 8E 24 24 1D 02'</td><td>= AF-I Nikkor 300mm f/2.8D IF-ED</td> </tr><tr><td>'27 48 8E 8E 24 24 E1 02'</td><td>= AF-I Nikkor 300mm f/2.8D IF-ED + TC-17E</td> </tr><tr><td>'27 48 8E 8E 24 24 F1 02'</td><td>= AF-I Nikkor 300mm f/2.8D IF-ED + TC-14E</td> </tr><tr><td>'27 48 8E 8E 24 24 F2 02'</td><td>= AF-I Nikkor 300mm f/2.8D IF-ED + TC-20E</td> </tr><tr><td>'27 48 8E 8E 30 30 1D 02'</td><td>= Tokina AT-X 304 AF (AF 300mm f/4.0)</td> </tr><tr><td>'27 54 8E 8E 24 24 1D 02'</td><td>= Tamron SP AF 300mm f/2.8 LD-IF (360E)</td> </tr><tr><td>'28 3C A6 A6 30 30 1D 02'</td><td>= AF-I Nikkor 600mm f/4D IF-ED</td> </tr><tr><td>'28 3C A6 A6 30 30 E1 02'</td><td>= AF-I Nikkor 600mm f/4D IF-ED + TC-17E</td> </tr><tr><td>'28 3C A6 A6 30 30 F1 02'</td><td>= AF-I Nikkor 600mm f/4D IF-ED + TC-14E</td> </tr><tr><td>'28 3C A6 A6 30 30 F2 02'</td><td>= AF-I Nikkor 600mm f/4D IF-ED + TC-20E</td> </tr><tr><td>'2A 54 3C 3C 0C 0C 26 02'</td><td>= AF Nikkor 28mm f/1.4D</td> </tr><tr><td>'2B 3C 44 60 30 3C 1F 02'</td><td>= AF Zoom-Nikkor 35-80mm f/4-5.6D</td> </tr><tr><td>'2C 48 6A 6A 18 18 27 02'</td><td>= AF DC-Nikkor 105mm f/2D</td> </tr><tr><td>'2D 48 80 80 30 30 21 02'</td><td>= AF Micro-Nikkor 200mm f/4D IF-ED</td> </tr><tr><td>'2E 48 5C 82 30 3C 22 02'</td><td>= AF Nikkor 70-210mm f/4-5.6D</td> </tr><tr><td>'2E 48 5C 82 30 3C 28 02'</td><td>= AF Nikkor 70-210mm f/4-5.6D</td> </tr><tr><td>'2F 40 30 44 2C 34 29 02.1'</td><td>= Tokina AF 235 II (AF 20-35mm f/3.5-4.5)</td> </tr><tr><td>'2F 40 30 44 2C 34 29 02.2'</td><td>= Tokina AF 193 (AF 19-35mm f/3.5-4.5)</td> </tr><tr><td>'2F 48 30 44 24 24 29 02.1'</td><td>= AF Zoom-Nikkor 20-35mm f/2.8D IF</td> </tr><tr><td>'2F 48 30 44 24 24 29 02.2'</td><td>= Tokina AT-X 235 AF PRO (AF 20-35mm f/2.8)</td> </tr><tr><td>'30 48 98 98 24 24 24 02'</td><td>= AF-I Nikkor 400mm f/2.8D IF-ED</td> </tr><tr><td>'30 48 98 98 24 24 E1 02'</td><td>= AF-I Nikkor 400mm f/2.8D IF-ED + TC-17E</td> </tr><tr><td>'30 48 98 98 24 24 F1 02'</td><td>= AF-I Nikkor 400mm f/2.8D IF-ED + TC-14E</td> </tr><tr><td>'30 48 98 98 24 24 F2 02'</td><td>= AF-I Nikkor 400mm f/2.8D IF-ED + TC-20E</td> </tr><tr><td>'31 54 56 56 24 24 25 02'</td><td>= AF Micro-Nikkor 60mm f/2.8D</td> </tr><tr><td>'32 53 64 64 24 24 35 02'</td><td>= Tamron SP AF 90mm f/2.8 [Di] Macro 1:1 (172E/272E)</td> </tr><tr><td>'32 54 50 50 24 24 35 02'</td><td>= Sigma Macro 50mm F2.8 EX DG</td> </tr><tr><td>'32 54 6A 6A 24 24 35 02.1'</td><td>= AF Micro-Nikkor 105mm f/2.8D</td> </tr><tr><td>'32 54 6A 6A 24 24 35 02.2'</td><td>= Sigma Macro 105mm F2.8 EX DG</td> </tr><tr><td>'33 48 2D 2D 24 24 31 02'</td><td>= AF Nikkor 18mm f/2.8D</td> </tr><tr><td>'33 54 3C 5E 24 24 62 02'</td><td>= Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical (IF) Macro (A09)</td> </tr><tr><td>'34 48 29 29 24 24 32 02'</td><td>= AF Fisheye Nikkor 16mm f/2.8D</td> </tr><tr><td>'35 3C A0 A0 30 30 33 02'</td><td>= AF-I Nikkor 500mm f/4D IF-ED</td> </tr><tr><td>'35 3C A0 A0 30 30 E1 02'</td><td>= AF-I Nikkor 500mm f/4D IF-ED + TC-17E</td> </tr><tr><td>'35 3C A0 A0 30 30 F1 02'</td><td>= AF-I Nikkor 500mm f/4D IF-ED + TC-14E</td> </tr><tr><td>'35 3C A0 A0 30 30 F2 02'</td><td>= AF-I Nikkor 500mm f/4D IF-ED + TC-20E</td> </tr><tr><td>'36 48 37 37 24 24 34 02'</td><td>= AF Nikkor 24mm f/2.8D</td> </tr><tr><td>'37 48 30 30 24 24 36 02'</td><td>= AF Nikkor 20mm f/2.8D</td> </tr><tr><td>'38 4C 62 62 14 14 37 02'</td><td>= AF Nikkor 85mm f/1.8D</td> </tr><tr><td>'3A 40 3C 5C 2C 34 39 02'</td><td>= AF Zoom-Nikkor 28-70mm f/3.5-4.5D</td> </tr><tr><td>'3B 48 44 5C 24 24 3A 02'</td><td>= AF Zoom-Nikkor 35-70mm f/2.8D N</td> </tr><tr><td>'3C 48 60 80 24 24 3B 02'</td><td>= AF Zoom-Nikkor 80-200mm f/2.8D ED</td> </tr><tr><td>'3D 3C 44 60 30 3C 3E 02'</td><td>= AF Zoom-Nikkor 35-80mm f/4-5.6D</td> </tr><tr><td>'3E 48 3C 3C 24 24 3D 02'</td><td>= AF Nikkor 28mm f/2.8D</td> </tr><tr><td>'3F 40 44 6A 2C 34 45 02'</td><td>= AF Zoom-Nikkor 35-105mm f/3.5-4.5D</td> </tr><tr><td>'41 48 7C 7C 24 24 43 02'</td><td>= AF Nikkor 180mm f/2.8D IF-ED</td> </tr><tr><td>'42 54 44 44 18 18 44 02'</td><td>= AF Nikkor 35mm f/2D</td> </tr><tr><td>'43 54 50 50 0C 0C 46 02'</td><td>= AF Nikkor 50mm f/1.4D</td> </tr><tr><td>'44 44 60 80 34 3C 47 02'</td><td>= AF Zoom-Nikkor 80-200mm f/4.5-5.6D</td> </tr><tr><td>'45 3D 3C 60 2C 3C 48 02'</td><td>= Tamron AF 28-80mm f/3.5-5.6 Aspherical (177D)</td> </tr><tr><td>'45 40 3C 60 2C 3C 48 02'</td><td>= AF Zoom-Nikkor 28-80mm f/3.5-5.6D</td> </tr><tr><td>'45 41 37 72 2C 3C 48 02'</td><td>= Tamron SP AF 24-135mm f/3.5-5.6 AD Aspherical (IF) Macro (190D)</td> </tr><tr><td>'46 3C 44 60 30 3C 49 02'</td><td>= AF Zoom-Nikkor 35-80mm f/4-5.6D N</td> </tr><tr><td>'47 42 37 50 2A 34 4A 02'</td><td>= AF Zoom-Nikkor 24-50mm f/3.3-4.5D</td> </tr><tr><td>'48 38 1F 37 34 3C 4B 06'</td><td>= Sigma 12-24mm F4.5-5.6 EX DG Aspherical HSM</td> </tr><tr><td>'48 3C 19 31 30 3C 4B 06'</td><td>= Sigma 10-20mm F4-5.6 EX DC HSM</td> </tr><tr><td>'48 3C 50 A0 30 40 4B 02'</td><td>= Sigma 50-500mm F4-6.3 EX APO RF HSM</td> </tr><tr><td>'48 3C 8E B0 3C 3C 4B 02'</td><td>= Sigma APO 300-800mm F5.6 EX DG HSM</td> </tr><tr><td>'48 3C B0 B0 3C 3C 4B 02'</td><td>= Sigma APO 800mm F5.6 EX HSM</td> </tr><tr><td>'48 44 A0 A0 34 34 4B 02'</td><td>= Sigma APO 500mm F4.5 EX HSM</td> </tr><tr><td>'48 48 24 24 24 24 4B 02'</td><td>= Sigma 14mm F2.8 EX Aspherical HSM</td> </tr><tr><td>'48 48 2B 44 24 30 4B 06'</td><td>= Sigma 17-35mm F2.8-4 EX DG Aspherical HSM</td> </tr><tr><td>'48 48 68 8E 30 30 4B 02'</td><td>= Sigma APO 100-300mm F4 EX IF HSM</td> </tr><tr><td>'48 48 76 76 24 24 4B 06'</td><td>= Sigma APO Macro 150mm F2.8 EX DG HSM</td> </tr><tr><td>'48 48 8E 8E 24 24 4B 02'</td><td>= AF-S Nikkor 300mm f/2.8D IF-ED</td> </tr><tr><td>'48 48 8E 8E 24 24 E1 02'</td><td>= AF-S Nikkor 300mm f/2.8D IF-ED + TC-17E</td> </tr><tr><td>'48 48 8E 8E 24 24 F1 02'</td><td>= AF-S Nikkor 300mm f/2.8D IF-ED + TC-14E</td> </tr><tr><td>'48 48 8E 8E 24 24 F2 02'</td><td>= AF-S Nikkor 300mm f/2.8D IF-ED + TC-20E</td> </tr><tr><td>'48 4C 7C 7C 2C 2C 4B 02'</td><td>= Sigma APO Macro 180mm F3.5 EX DG HSM</td> </tr><tr><td>'48 4C 7D 7D 2C 2C 4B 02'</td><td>= Sigma APO Macro 180mm F3.5 EX DG HSM</td> </tr><tr><td>'48 54 3E 3E 0C 0C 4B 06'</td><td>= Sigma 30mm F1.4 EX DC HSM</td> </tr><tr><td>'48 54 5C 80 24 24 4B 02'</td><td>= Sigma 70-200mm F2.8 EX APO IF HSM</td> </tr><tr><td>'48 54 6F 8E 24 24 4B 02'</td><td>= Sigma APO 120-300mm F2.8 EX DG HSM</td> </tr><tr><td>'48 54 8E 8E 24 24 4B 02'</td><td>= Sigma APO 300mm F2.8 EX DG HSM</td> </tr><tr><td>'49 3C A6 A6 30 30 4C 02'</td><td>= AF-S Nikkor 600mm f/4D IF-ED</td> </tr><tr><td>'49 3C A6 A6 30 30 E1 02'</td><td>= AF-S Nikkor 600mm f/4D IF-ED + TC-17E</td> </tr><tr><td>'49 3C A6 A6 30 30 F1 02'</td><td>= AF-S Nikkor 600mm f/4D IF-ED + TC-14E</td> </tr><tr><td>'49 3C A6 A6 30 30 F2 02'</td><td>= AF-S Nikkor 600mm f/4D IF-ED + TC-20E</td> </tr><tr><td>'4A 40 11 11 2C 0C 4D 02'</td><td>= Samyang 8mm f/3.5 Fish-Eye CS</td> </tr><tr><td>'4A 48 1E 1E 24 0C 4D 02'</td><td>= Samyang 12mm f/2.8 ED AS NCS Fish-Eye</td> </tr><tr><td>'4A 48 24 24 24 0C 4D 02'</td><td>= Samyang AE 14mm f/2.8 ED AS IF UMC</td> </tr><tr><td>'4A 54 29 29 18 0C 4D 02'</td><td>= Samyang 16mm F2.0 ED AS UMC CS</td> </tr><tr><td>'4A 54 62 62 0C 0C 4D 02'</td><td>= AF Nikkor 85mm f/1.4D IF</td> </tr><tr><td>'4A 60 44 44 0C 0C 4D 02'</td><td>= Samyang 35mm f/1.4 AS UMC</td> </tr><tr><td>'4A 60 62 62 0C 0C 4D 02'</td><td>= Samyang AE 85mm f/1.4 AS IF UMC</td> </tr><tr><td>'4B 3C A0 A0 30 30 4E 02'</td><td>= AF-S Nikkor 500mm f/4D IF-ED</td> </tr><tr><td>'4B 3C A0 A0 30 30 E1 02'</td><td>= AF-S Nikkor 500mm f/4D IF-ED + TC-17E</td> </tr><tr><td>'4B 3C A0 A0 30 30 F1 02'</td><td>= AF-S Nikkor 500mm f/4D IF-ED + TC-14E</td> </tr><tr><td>'4B 3C A0 A0 30 30 F2 02'</td><td>= AF-S Nikkor 500mm f/4D IF-ED + TC-20E</td> </tr><tr><td>'4C 40 37 6E 2C 3C 4F 02'</td><td>= AF Zoom-Nikkor 24-120mm f/3.5-5.6D IF</td> </tr><tr><td>'4D 3E 3C 80 2E 3C 62 02'</td><td>= Tamron AF 28-200mm F/3.8-5.6 XR Aspherical (IF) Macro (A03N)</td> </tr><tr><td>'4D 40 3C 80 2C 3C 62 02'</td><td>= AF Zoom-Nikkor 28-200mm f/3.5-5.6D IF</td> </tr><tr><td>'4D 41 3C 8E 2B 40 62 02'</td><td>= Tamron AF 28-300mm f/3.5-6.3 XR Di LD Aspherical (IF) (A061)</td> </tr><tr><td>'4D 41 3C 8E 2C 40 62 02'</td><td>= Tamron AF 28-300mm f/3.5-6.3 XR LD Aspherical (IF) (185D)</td> </tr><tr><td>'4E 48 72 72 18 18 51 02'</td><td>= AF DC-Nikkor 135mm f/2D</td> </tr><tr><td>'4F 40 37 5C 2C 3C 53 06'</td><td>= IX-Nikkor 24-70mm f/3.5-5.6</td> </tr><tr><td>'50 48 56 7C 30 3C 54 06'</td><td>= IX-Nikkor 60-180mm f/4-5.6</td> </tr><tr><td>'52 54 44 44 18 18 00 00'</td><td>= Zeiss Milvus 35mm f/2</td> </tr><tr><td>'53 48 60 80 24 24 57 02'</td><td>= AF Zoom-Nikkor 80-200mm f/2.8D ED</td> </tr><tr><td>'53 48 60 80 24 24 60 02'</td><td>= AF Zoom-Nikkor 80-200mm f/2.8D ED</td> </tr><tr><td>'53 54 50 50 0C 0C 00 00'</td><td>= Zeiss Milvus 50mm f/1.4</td> </tr><tr><td>'54 44 5C 7C 34 3C 58 02'</td><td>= AF Zoom-Micro Nikkor 70-180mm f/4.5-5.6D ED</td> </tr><tr><td>'54 44 5C 7C 34 3C 61 02'</td><td>= AF Zoom-Micro Nikkor 70-180mm f/4.5-5.6D ED</td> </tr><tr><td>'54 54 50 50 18 18 00 00'</td><td>= Zeiss Milvus 50mm f/2 Macro</td> </tr><tr><td>'55 54 62 62 0C 0C 00 00'</td><td>= Zeiss Milvus 85mm f/1.4</td> </tr><tr><td>'56 3C 5C 8E 30 3C 1C 02'</td><td>= Sigma 70-300mm F4-5.6 APO Macro Super II</td> </tr><tr><td>'56 48 5C 8E 30 3C 5A 02'</td><td>= AF Zoom-Nikkor 70-300mm f/4-5.6D ED</td> </tr><tr><td>'56 54 68 68 18 18 00 00'</td><td>= Zeiss Milvus 100mm f/2 Macro</td> </tr><tr><td>'59 48 98 98 24 24 5D 02'</td><td>= AF-S Nikkor 400mm f/2.8D IF-ED</td> </tr><tr><td>'59 48 98 98 24 24 E1 02'</td><td>= AF-S Nikkor 400mm f/2.8D IF-ED + TC-17E</td> </tr><tr><td>'59 48 98 98 24 24 F1 02'</td><td>= AF-S Nikkor 400mm f/2.8D IF-ED + TC-14E</td> </tr><tr><td>'59 48 98 98 24 24 F2 02'</td><td>= AF-S Nikkor 400mm f/2.8D IF-ED + TC-20E</td> </tr><tr><td>'5A 3C 3E 56 30 3C 5E 06'</td><td>= IX-Nikkor 30-60mm f/4-5.6</td> </tr><tr><td>'5B 44 56 7C 34 3C 5F 06'</td><td>= IX-Nikkor 60-180mm f/4.5-5.6</td> </tr><tr><td>'5D 48 3C 5C 24 24 63 02'</td><td>= AF-S Zoom-Nikkor 28-70mm f/2.8D IF-ED</td> </tr><tr><td>'5E 48 60 80 24 24 64 02'</td><td>= AF-S Zoom-Nikkor 80-200mm f/2.8D IF-ED</td> </tr><tr><td>'5F 40 3C 6A 2C 34 65 02'</td><td>= AF Zoom-Nikkor 28-105mm f/3.5-4.5D IF</td> </tr><tr><td>'60 40 3C 60 2C 3C 66 02'</td><td>= AF Zoom-Nikkor 28-80mm f/3.5-5.6D</td> </tr><tr><td>'61 44 5E 86 34 3C 67 02'</td><td>= AF Zoom-Nikkor 75-240mm f/4.5-5.6D</td> </tr><tr><td>'63 48 2B 44 24 24 68 02'</td><td>= AF-S Nikkor 17-35mm f/2.8D IF-ED</td> </tr><tr><td>'64 00 62 62 24 24 6A 02'</td><td>= PC Micro-Nikkor 85mm f/2.8D</td> </tr><tr><td>'65 44 60 98 34 3C 6B 0A'</td><td>= AF VR Zoom-Nikkor 80-400mm f/4.5-5.6D ED</td> </tr><tr><td>'66 40 2D 44 2C 34 6C 02'</td><td>= AF Zoom-Nikkor 18-35mm f/3.5-4.5D IF-ED</td> </tr><tr><td>'67 48 37 62 24 30 6D 02'</td><td>= AF Zoom-Nikkor 24-85mm f/2.8-4D IF</td> </tr><tr><td>'67 54 37 5C 24 24 1C 02'</td><td>= Sigma 24-70mm F2.8 EX DG Macro</td> </tr><tr><td>'68 42 3C 60 2A 3C 6E 06'</td><td>= AF Zoom-Nikkor 28-80mm f/3.3-5.6G</td> </tr><tr><td>'69 47 5C 8E 30 3C 00 02'</td><td>= Tamron AF 70-300mm f/4-5.6 Di LD Macro 1:2 (A17N)</td> </tr><tr><td>'69 48 5C 8E 30 3C 6F 02'</td><td>= Tamron AF 70-300mm f/4-5.6 LD Macro 1:2 (572D/772D)</td> </tr><tr><td>'69 48 5C 8E 30 3C 6F 06'</td><td>= AF Zoom-Nikkor 70-300mm f/4-5.6G</td> </tr><tr><td>'6A 48 8E 8E 30 30 70 02'</td><td>= AF-S Nikkor 300mm f/4D IF-ED</td> </tr><tr><td>'6B 48 24 24 24 24 71 02'</td><td>= AF Nikkor ED 14mm f/2.8D</td> </tr><tr><td>'6D 48 8E 8E 24 24 73 02'</td><td>= AF-S Nikkor 300mm f/2.8D IF-ED II</td> </tr><tr><td>'6E 48 98 98 24 24 74 02'</td><td>= AF-S Nikkor 400mm f/2.8D IF-ED II</td> </tr><tr><td>'6F 3C A0 A0 30 30 75 02'</td><td>= AF-S Nikkor 500mm f/4D IF-ED II</td> </tr><tr><td>'70 3C A6 A6 30 30 76 02'</td><td>= AF-S Nikkor 600mm f/4D IF-ED II</td> </tr><tr><td>'72 48 4C 4C 24 24 77 00'</td><td>= Nikkor 45mm f/2.8 P</td> </tr><tr><td>'74 40 37 62 2C 34 78 06'</td><td>= AF-S Zoom-Nikkor 24-85mm f/3.5-4.5G IF-ED</td> </tr><tr><td>'75 40 3C 68 2C 3C 79 06'</td><td>= AF Zoom-Nikkor 28-100mm f/3.5-5.6G</td> </tr><tr><td>'76 58 50 50 14 14 7A 02'</td><td>= AF Nikkor 50mm f/1.8D</td> </tr><tr><td>'77 44 61 98 34 3C 7B 0E'</td><td>= Sigma 80-400mm F4.5-5.6 EX OS</td> </tr><tr><td>'77 48 5C 80 24 24 7B 0E'</td><td>= AF-S VR Zoom-Nikkor 70-200mm f/2.8G IF-ED</td> </tr><tr><td>'78 40 37 6E 2C 3C 7C 0E'</td><td>= AF-S VR Zoom-Nikkor 24-120mm f/3.5-5.6G IF-ED</td> </tr><tr><td>'79 40 11 11 2C 2C 1C 06'</td><td>= Sigma 8mm F3.5 EX Circular Fisheye</td> </tr><tr><td>'79 40 3C 80 2C 3C 7F 06'</td><td>= AF Zoom-Nikkor 28-200mm f/3.5-5.6G IF-ED</td> </tr><tr><td>'79 48 3C 5C 24 24 1C 06'</td><td>= Sigma 28-70mm F2.8 EX DG</td> </tr><tr><td>'79 48 5C 5C 24 24 1C 06'</td><td>= Sigma Macro 70mm F2.8 EX DG</td> </tr><tr><td>'7A 3B 53 80 30 3C 4B 06'</td><td>= Sigma 55-200mm F4-5.6 DC HSM</td> </tr><tr><td>'7A 3C 1F 37 30 30 7E 06.1'</td><td>= AF-S DX Zoom-Nikkor 12-24mm f/4G IF-ED</td> </tr><tr><td>'7A 3C 1F 37 30 30 7E 06.2'</td><td>= Tokina AT-X 124 AF PRO DX II (AF 12-24mm f/4)</td> </tr><tr><td>'7A 3C 1F 3C 30 30 7E 06'</td><td>= Tokina AT-X 12-28 PRO DX (AF 12-28mm F/4)</td> </tr><tr><td>'7A 40 2D 50 2C 3C 4B 06'</td><td>= Sigma 18-50mm F3.5-5.6 DC HSM</td> </tr><tr><td>'7A 40 2D 80 2C 40 4B 0E'</td><td>= Sigma 18-200mm F3.5-6.3 DC OS HSM</td> </tr><tr><td>'7A 47 2B 5C 24 34 4B 06'</td><td>= Sigma 17-70mm F2.8-4.5 DC Macro Asp. IF HSM</td> </tr><tr><td>'7A 47 50 76 24 24 4B 06'</td><td>= Sigma 50-150mm F2.8 EX APO DC HSM</td> </tr><tr><td>'7A 48 1C 29 24 24 7E 06'</td><td>= Tokina AT-X 116 PRO DX II (AF 11-16mm f/2.8)</td> </tr><tr><td>'7A 48 1C 30 24 24 7E 06'</td><td>= Tokina AT-X 11-20 F2.8 PRO DX (AF 11-20mm f/2.8)</td> </tr><tr><td>'7A 48 2B 5C 24 34 4B 06'</td><td>= Sigma 17-70mm F2.8-4.5 DC Macro Asp. IF HSM</td> </tr><tr><td>'7A 48 2D 50 24 24 4B 06'</td><td>= Sigma 18-50mm F2.8 EX DC Macro</td> </tr><tr><td>'7A 48 5C 80 24 24 4B 06'</td><td>= Sigma 70-200mm F2.8 EX APO DG Macro HSM II</td> </tr><tr><td>'7A 54 6E 8E 24 24 4B 02'</td><td>= Sigma APO 120-300mm F2.8 EX DG HSM</td> </tr><tr><td>'7B 48 80 98 30 30 80 0E'</td><td>= AF-S VR Zoom-Nikkor 200-400mm f/4G IF-ED</td> </tr><tr><td>'7D 48 2B 53 24 24 82 06'</td><td>= AF-S DX Zoom-Nikkor 17-55mm f/2.8G IF-ED</td> </tr><tr><td>'7F 40 2D 5C 2C 34 84 06'</td><td>= AF-S DX Zoom-Nikkor 18-70mm f/3.5-4.5G IF-ED</td> </tr><tr><td>'7F 48 2B 5C 24 34 1C 06'</td><td>= Sigma 17-70mm F2.8-4.5 DC Macro Asp. IF</td> </tr><tr><td>'7F 48 2D 50 24 24 1C 06'</td><td>= Sigma 18-50mm F2.8 EX DC Macro</td> </tr><tr><td>'80 48 1A 1A 24 24 85 06'</td><td>= AF DX Fisheye-Nikkor 10.5mm f/2.8G ED</td> </tr><tr><td>'81 34 76 A6 38 40 4B 0E'</td><td>= Sigma 150-600mm F5-6.3 DG OS HSM | S</td> </tr><tr><td>'81 54 80 80 18 18 86 0E'</td><td>= AF-S VR Nikkor 200mm f/2G IF-ED</td> </tr><tr><td>'82 34 76 A6 38 40 4B 0E'</td><td>= Sigma 150-600mm F5-6.3 DG OS HSM | C</td> </tr><tr><td>'82 48 8E 8E 24 24 87 0E'</td><td>= AF-S VR Nikkor 300mm f/2.8G IF-ED</td> </tr><tr><td>'83 00 B0 B0 5A 5A 88 04'</td><td>= FSA-L2, EDG 65, 800mm F13 G</td> </tr><tr><td>'88 54 50 50 0C 0C 4B 06'</td><td>= Sigma 50mm F1.4 DG HSM | A</td> </tr><tr><td>'89 3C 53 80 30 3C 8B 06'</td><td>= AF-S DX Zoom-Nikkor 55-200mm f/4-5.6G ED</td> </tr><tr><td>'8A 3C 37 6A 30 30 4B 0E'</td><td>= Sigma 24-105mm F4 DG OS HSM</td> </tr><tr><td>'8A 54 6A 6A 24 24 8C 0E'</td><td>= AF-S VR Micro-Nikkor 105mm f/2.8G IF-ED</td> </tr><tr><td>'8B 40 2D 80 2C 3C 8D 0E'</td><td>= AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED</td> </tr><tr><td>'8B 40 2D 80 2C 3C FD 0E'</td><td>= AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED [II]</td> </tr><tr><td>'8B 4C 2D 44 14 14 4B 06'</td><td>= Sigma 18-35mm F1.8 DC HSM</td> </tr><tr><td>'8C 40 2D 53 2C 3C 8E 06'</td><td>= AF-S DX Zoom-Nikkor 18-55mm f/3.5-5.6G ED</td> </tr><tr><td>'8D 44 5C 8E 34 3C 8F 0E'</td><td>= AF-S VR Zoom-Nikkor 70-300mm f/4.5-5.6G IF-ED</td> </tr><tr><td>'8E 3C 2B 5C 24 30 4B 0E'</td><td>= Sigma 17-70mm F2.8-4 DC Macro OS HSM Contemporary</td> </tr><tr><td>'8F 40 2D 72 2C 3C 91 06'</td><td>= AF-S DX Zoom-Nikkor 18-135mm f/3.5-5.6G IF-ED</td> </tr><tr><td>'8F 48 2B 50 24 24 4B 0E'</td><td>= Sigma 17-50mm F2.8 EX DC OS HSM</td> </tr><tr><td>'90 3B 53 80 30 3C 92 0E'</td><td>= AF-S DX VR Zoom-Nikkor 55-200mm f/4-5.6G IF-ED</td> </tr><tr><td>'90 40 2D 80 2C 40 4B 0E'</td><td>= Sigma 18-200mm F3.5-6.3 II DC OS HSM</td> </tr><tr><td>'91 54 44 44 0C 0C 4B 06'</td><td>= Sigma 35mm F1.4 DG HSM</td> </tr><tr><td>'92 2C 2D 88 2C 40 4B 0E'</td><td>= Sigma 18-250mm F3.5-6.3 DC Macro OS HSM</td> </tr><tr><td>'92 48 24 37 24 24 94 06'</td><td>= AF-S Zoom-Nikkor 14-24mm f/2.8G ED</td> </tr><tr><td>'93 48 37 5C 24 24 95 06'</td><td>= AF-S Zoom-Nikkor 24-70mm f/2.8G ED</td> </tr><tr><td>'94 40 2D 53 2C 3C 96 06'</td><td>= AF-S DX Zoom-Nikkor 18-55mm f/3.5-5.6G ED II</td> </tr><tr><td>'95 00 37 37 2C 2C 97 06'</td><td>= PC-E Nikkor 24mm f/3.5D ED</td> </tr><tr><td>'95 4C 37 37 2C 2C 97 02'</td><td>= PC-E Nikkor 24mm f/3.5D ED</td> </tr><tr><td>'96 38 1F 37 34 3C 4B 06'</td><td>= Sigma 12-24mm F4.5-5.6 II DG HSM</td> </tr><tr><td>'96 48 98 98 24 24 98 0E'</td><td>= AF-S VR Nikkor 400mm f/2.8G ED</td> </tr><tr><td>'97 3C A0 A0 30 30 99 0E'</td><td>= AF-S VR Nikkor 500mm f/4G ED</td> </tr><tr><td>'97 48 6A 6A 24 24 4B 0E'</td><td>= Sigma Macro 105mm F2.8 EX DG OS HSM</td> </tr><tr><td>'98 3C A6 A6 30 30 9A 0E'</td><td>= AF-S VR Nikkor 600mm f/4G ED</td> </tr><tr><td>'98 48 50 76 24 24 4B 0E'</td><td>= Sigma 50-150mm F2.8 EX APO DC OS HSM</td> </tr><tr><td>'99 40 29 62 2C 3C 9B 0E'</td><td>= AF-S DX VR Zoom-Nikkor 16-85mm f/3.5-5.6G ED</td> </tr><tr><td>'99 48 76 76 24 24 4B 0E'</td><td>= Sigma APO Macro 150mm F2.8 EX DG OS HSM</td> </tr><tr><td>'9A 40 2D 53 2C 3C 9C 0E'</td><td>= AF-S DX VR Zoom-Nikkor 18-55mm f/3.5-5.6G</td> </tr><tr><td>'9B 00 4C 4C 24 24 9D 06'</td><td>= PC-E Micro Nikkor 45mm f/2.8D ED</td> </tr><tr><td>'9B 54 4C 4C 24 24 9D 02'</td><td>= PC-E Micro Nikkor 45mm f/2.8D ED</td> </tr><tr><td>'9B 54 62 62 0C 0C 4B 06'</td><td>= Sigma 85mm F1.4 EX DG HSM</td> </tr><tr><td>'9C 48 5C 80 24 24 4B 0E'</td><td>= Sigma 70-200mm F2.8 EX DG OS HSM</td> </tr><tr><td>'9C 54 56 56 24 24 9E 06'</td><td>= AF-S Micro Nikkor 60mm f/2.8G ED</td> </tr><tr><td>'9D 00 62 62 24 24 9F 06'</td><td>= PC-E Micro Nikkor 85mm f/2.8D</td> </tr><tr><td>'9D 48 2B 50 24 24 4B 0E'</td><td>= Sigma 17-50mm F2.8 EX DC OS HSM</td> </tr><tr><td>'9D 54 62 62 24 24 9F 02'</td><td>= PC-E Micro Nikkor 85mm f/2.8D</td> </tr><tr><td>'9E 38 11 29 34 3C 4B 06'</td><td>= Sigma 8-16mm F4.5-5.6 DC HSM</td> </tr><tr><td>'9E 40 2D 6A 2C 3C A0 0E'</td><td>= AF-S DX VR Zoom-Nikkor 18-105mm f/3.5-5.6G ED</td> </tr><tr><td>'9F 37 50 A0 34 40 4B 0E'</td><td>= Sigma 50-500mm F4.5-6.3 DG OS HSM</td> </tr><tr><td>'9F 58 44 44 14 14 A1 06'</td><td>= AF-S DX Nikkor 35mm f/1.8G</td> </tr><tr><td>'A0 40 2D 74 2C 3C BB 0E'</td><td>= AF-S DX Nikkor 18-140mm f/3.5-5.6G ED VR</td> </tr><tr><td>'A0 48 2A 5C 24 30 4B 0E'</td><td>= Sigma 17-70mm F2.8-4 DC Macro OS HSM</td> </tr><tr><td>'A0 54 50 50 0C 0C A2 06'</td><td>= AF-S Nikkor 50mm f/1.4G</td> </tr><tr><td>'A1 40 18 37 2C 34 A3 06'</td><td>= AF-S DX Nikkor 10-24mm f/3.5-4.5G ED</td> </tr><tr><td>'A1 41 19 31 2C 2C 4B 06'</td><td>= Sigma 10-20mm F3.5 EX DC HSM</td> </tr><tr><td>'A1 54 55 55 0C 0C BC 06'</td><td>= AF-S Nikkor 58mm f/1.4G</td> </tr><tr><td>'A2 40 2D 53 2C 3C BD 0E'</td><td>= AF-S DX VR Nikkor 18-55mm f/3.5-5.6G II</td> </tr><tr><td>'A2 48 5C 80 24 24 A4 0E'</td><td>= AF-S Nikkor 70-200mm f/2.8G ED VR II</td> </tr><tr><td>'A3 3C 29 44 30 30 A5 0E'</td><td>= AF-S Nikkor 16-35mm f/4G ED VR</td> </tr><tr><td>'A3 3C 5C 8E 30 3C 4B 0E'</td><td>= Sigma 70-300mm F4-5.6 DG OS</td> </tr><tr><td>'A4 40 2D 8E 2C 40 BF 0E'</td><td>= AF-S DX Nikkor 18-300mm f/3.5-6.3G ED VR</td> </tr><tr><td>'A4 47 2D 50 24 34 4B 0E'</td><td>= Sigma 18-50mm F2.8-4.5 DC OS HSM</td> </tr><tr><td>'A4 54 37 37 0C 0C A6 06'</td><td>= AF-S Nikkor 24mm f/1.4G ED</td> </tr><tr><td>'A5 40 2D 88 2C 40 4B 0E'</td><td>= Sigma 18-250mm F3.5-6.3 DC OS HSM</td> </tr><tr><td>'A5 40 3C 8E 2C 3C A7 0E'</td><td>= AF-S Nikkor 28-300mm f/3.5-5.6G ED VR</td> </tr><tr><td>'A5 4C 44 44 14 14 C0 06'</td><td>= AF-S Nikkor 35mm f/1.8G</td> </tr><tr><td>'A6 48 37 5C 24 24 4B 06'</td><td>= Sigma 24-70mm F2.8 IF EX DG HSM</td> </tr><tr><td>'A6 48 8E 8E 24 24 A8 0E'</td><td>= AF-S VR Nikkor 300mm f/2.8G IF-ED II</td> </tr><tr><td>'A7 3C 53 80 30 3C C2 0E'</td><td>= AF-S DX Nikkor 55-200mm f/4-5.6G ED VR II</td> </tr><tr><td>'A7 49 80 A0 24 24 4B 06'</td><td>= Sigma APO 200-500mm F2.8 EX DG</td> </tr><tr><td>'A7 4B 62 62 2C 2C A9 0E'</td><td>= AF-S DX Micro Nikkor 85mm f/3.5G ED VR</td> </tr><tr><td>'A8 48 80 98 30 30 AA 0E'</td><td>= AF-S VR Zoom-Nikkor 200-400mm f/4G IF-ED II</td> </tr><tr><td>'A8 48 8E 8E 30 30 C3 0E'</td><td>= AF-S Nikkor 300mm f/4E PF ED VR</td> </tr><tr><td>'A8 48 8E 8E 30 30 C3 4E'</td><td>= AF-S Nikkor 300mm f/4E PF ED VR</td> </tr><tr><td>'A9 4C 31 31 14 14 C4 06'</td><td>= AF-S Nikkor 20mm f/1.8G ED</td> </tr><tr><td>'A9 54 80 80 18 18 AB 0E'</td><td>= AF-S Nikkor 200mm f/2G ED VR II</td> </tr><tr><td>'AA 3C 37 6E 30 30 AC 0E'</td><td>= AF-S Nikkor 24-120mm f/4G ED VR</td> </tr><tr><td>'AA 48 37 5C 24 24 C5 4E'</td><td>= AF-S Nikkor 24-70mm f/2.8E ED VR</td> </tr><tr><td>'AC 38 53 8E 34 3C AE 0E'</td><td>= AF-S DX VR Nikkor 55-300mm f/4.5-5.6G ED</td> </tr><tr><td>'AC 3C A6 A6 30 30 C7 4E'</td><td>= AF-S Nikkor 600mm f/4E FL ED VR</td> </tr><tr><td>'AD 3C 2D 8E 2C 3C AF 0E'</td><td>= AF-S DX Nikkor 18-300mm f/3.5-5.6G ED VR</td> </tr><tr><td>'AD 48 28 60 24 30 C8 4E'</td><td>= AF-S VR DX 16-80mm f/2.8-4.0E ED</td> </tr><tr><td>'AE 3C 80 A0 3C 3C C9 0E'</td><td>= AF-S Nikkor 200-500mm f/5.6E ED VR</td> </tr><tr><td>'AE 3C 80 A0 3C 3C C9 4E'</td><td>= AF-S Nikkor 200-500mm f/5.6E ED VR</td> </tr><tr><td>'AE 54 62 62 0C 0C B0 06'</td><td>= AF-S Nikkor 85mm f/1.4G</td> </tr><tr><td>'AF 4C 37 37 14 14 CC 06'</td><td>= AF-S Nikkor 24mm f/1.8G ED</td> </tr><tr><td>'AF 54 44 44 0C 0C B1 06'</td><td>= AF-S Nikkor 35mm f/1.4G</td> </tr><tr><td>'B0 4C 50 50 14 14 B2 06'</td><td>= AF-S Nikkor 50mm f/1.8G</td> </tr><tr><td>'B1 48 48 48 24 24 B3 06'</td><td>= AF-S DX Micro Nikkor 40mm f/2.8G</td> </tr><tr><td>'B2 48 5C 80 30 30 B4 0E'</td><td>= AF-S Nikkor 70-200mm f/4G ED VR</td> </tr><tr><td>'B3 4C 62 62 14 14 B5 06'</td><td>= AF-S Nikkor 85mm f/1.8G</td> </tr><tr><td>'B4 40 37 62 2C 34 B6 0E'</td><td>= AF-S VR Zoom-Nikkor 24-85mm f/3.5-4.5G IF-ED</td> </tr><tr><td>'B5 4C 3C 3C 14 14 B7 06'</td><td>= AF-S Nikkor 28mm f/1.8G</td> </tr><tr><td>'B6 48 37 56 24 24 1C 02'</td><td>= Sigma 24-60mm F2.8 EX DG</td> </tr><tr><td>'B7 44 60 98 34 3C B9 0E'</td><td>= AF-S Nikkor 80-400mm f/4.5-5.6G ED VR</td> </tr><tr><td>'B8 40 2D 44 2C 34 BA 06'</td><td>= AF-S Nikkor 18-35mm f/3.5-4.5G ED</td> </tr><tr><td>'CD 3D 2D 70 2E 3C 4B 0E'</td><td>= Sigma 18-125mm F3.8-5.6 DC OS HSM</td> </tr><tr><td>'CE 34 76 A0 38 40 4B 0E'</td><td>= Sigma 150-500mm F5-6.3 DG OS APO HSM</td> </tr><tr><td>'CF 38 6E 98 34 3C 4B 0E'</td><td>= Sigma APO 120-400mm F4.5-5.6 DG OS HSM</td> </tr><tr><td>'DC 48 19 19 24 24 4B 06'</td><td>= Sigma 10mm F2.8 EX DC HSM Fisheye</td> </tr><tr><td>'DE 54 50 50 0C 0C 4B 06'</td><td>= Sigma 50mm F1.4 EX DG HSM</td> </tr><tr><td>'E0 3C 5C 8E 30 3C 4B 06'</td><td>= Sigma 70-300mm F4-5.6 APO DG Macro HSM</td> </tr><tr><td>'E1 58 37 37 14 14 1C 02'</td><td>= Sigma 24mm F1.8 EX DG Aspherical Macro</td> </tr><tr><td>'E3 54 50 50 24 24 35 02'</td><td>= Sigma Macro 50mm F2.8 EX DG</td> </tr><tr><td>'E5 54 6A 6A 24 24 35 02'</td><td>= Sigma Macro 105mm F2.8 EX DG</td> </tr><tr><td>'E6 41 3C 8E 2C 40 1C 02'</td><td>= Sigma 28-300mm F3.5-6.3 DG Macro</td> </tr><tr><td>'E8 4C 44 44 14 14 DF 0E'</td><td>= Tamron SP 35mm f/1.8 VC</td> </tr><tr><td>'E9 48 27 3E 24 24 DF 0E'</td><td>= Tamron SP 15-30mm f/2.8 Di VC USD (A012)</td> </tr><tr><td>'E9 54 37 5C 24 24 1C 02'</td><td>= Sigma 24-70mm F2.8 EX DG Macro</td> </tr><tr><td>'EA 40 29 8E 2C 40 DF 0E'</td><td>= Tamron AF 16-300mm f/3.5-6.3 Di II VC PZD (B016)</td> </tr><tr><td>'EA 48 27 27 24 24 1C 02'</td><td>= Sigma 15mm F2.8 EX Diagonal Fisheye</td> </tr><tr><td>'EB 40 76 A6 38 40 DF 0E'</td><td>= Tamron SP AF 150-600mm f/5-6.3 VC USD (A011)</td> </tr><tr><td>'ED 40 2D 80 2C 40 4B 0E'</td><td>= Sigma 18-200mm F3.5-6.3 DC OS HSM</td> </tr><tr><td>'EE 48 5C 80 24 24 4B 06'</td><td>= Sigma 70-200mm F2.8 EX APO DG Macro HSM II</td> </tr><tr><td>'F0 38 1F 37 34 3C 4B 06'</td><td>= Sigma 12-24mm F4.5-5.6 EX DG Aspherical HSM</td> </tr><tr><td>'F0 3F 2D 8A 2C 40 DF 0E'</td><td>= Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD (B008)</td> </tr><tr><td>'F1 44 A0 A0 34 34 4B 02'</td><td>= Sigma APO 500mm F4.5 EX DG HSM</td> </tr><tr><td>'F1 47 5C 8E 30 3C DF 0E'</td><td>= Tamron SP 70-300mm f/4-5.6 Di VC USD (A005)</td> </tr><tr><td>'F3 48 68 8E 30 30 4B 02'</td><td>= Sigma APO 100-300mm F4 EX IF HSM</td> </tr><tr><td>'F3 54 2B 50 24 24 84 0E'</td><td>= Tamron SP AF 17-50mm f/2.8 XR Di II VC LD Aspherical (IF) (B005)</td> </tr><tr><td>'F4 54 56 56 18 18 84 06'</td><td>= Tamron SP AF 60mm f/2.0 Di II Macro 1:1 (G005)</td> </tr><tr><td>'F5 40 2C 8A 2C 40 40 0E'</td><td>= Tamron AF 18-270mm f/3.5-6.3 Di II VC LD Aspherical (IF) Macro (B003)</td> </tr><tr><td>'F5 48 76 76 24 24 4B 06'</td><td>= Sigma APO Macro 150mm F2.8 EX DG HSM</td> </tr><tr><td>'F6 3F 18 37 2C 34 84 06'</td><td>= Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical (IF) (B001)</td> </tr><tr><td>'F6 3F 18 37 2C 34 DF 06'</td><td>= Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical (IF) (B001)</td> </tr><tr><td>'F6 48 2D 50 24 24 4B 06'</td><td>= Sigma 18-50mm F2.8 EX DC Macro</td> </tr><tr><td>'F7 53 5C 80 24 24 40 06'</td><td>= Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)</td> </tr><tr><td>'F7 53 5C 80 24 24 84 06'</td><td>= Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)</td> </tr><tr><td>'F8 54 3E 3E 0C 0C 4B 06'</td><td>= Sigma 30mm F1.4 EX DC HSM</td> </tr><tr><td>'F8 54 64 64 24 24 DF 06'</td><td>= Tamron SP AF 90mm f/2.8 Di Macro 1:1 (272NII)</td> </tr><tr><td>'F8 55 64 64 24 24 84 06'</td><td>= Tamron SP AF 90mm f/2.8 Di Macro 1:1 (272NII)</td> </tr><tr><td>'F9 3C 19 31 30 3C 4B 06'</td><td>= Sigma 10-20mm F4-5.6 EX DC HSM</td> </tr><tr><td>'F9 40 3C 8E 2C 40 40 0E'</td><td>= Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical (IF) Macro (A20)</td> </tr><tr><td>'FA 54 3C 5E 24 24 84 06'</td><td>= Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical (IF) Macro (A09NII)</td> </tr><tr><td>'FA 54 3C 5E 24 24 DF 06'</td><td>= Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical (IF) Macro (A09NII)</td> </tr><tr><td>'FA 54 6E 8E 24 24 4B 02'</td><td>= Sigma APO 120-300mm F2.8 EX DG HSM</td> </tr><tr><td>'FB 54 2B 50 24 24 84 06'</td><td>= Tamron SP AF 17-50mm f/2.8 XR Di II LD Aspherical (IF) (A16NII)</td> </tr><tr><td>'FB 54 8E 8E 24 24 4B 02'</td><td>= Sigma APO 300mm F2.8 EX DG HSM</td> </tr><tr><td>'FC 40 2D 80 2C 40 DF 06'</td><td>= Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14NII)</td> </tr><tr><td>'FD 47 50 76 24 24 4B 06'</td><td>= Sigma 50-150mm F2.8 EX APO DC HSM II</td> </tr><tr><td>'FE 47 00 00 24 24 4B 06'</td><td>= Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye</td> </tr><tr><td>'FE 48 37 5C 24 24 DF 0E'</td><td>= Tamron SP 24-70mm f/2.8 Di VC USD (A007)</td> </tr><tr><td>'FE 53 5C 80 24 24 84 06'</td><td>= Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)</td> </tr><tr><td>'FE 54 5C 80 24 24 DF 0E'</td><td>= Tamron SP 70-200mm f/2.8 Di VC USD (A009)</td> </tr><tr><td>'FE 54 64 64 24 24 DF 0E'</td><td>= Tamron SP 90mm f/2.8 Di VC USD Macro 1:1 (F004)</td> </tr><tr><td>'FF 40 2D 80 2C 40 4B 06'</td><td>= Sigma 18-200mm F3.5-6.3 DC</td> </tr></table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 7, 2016</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/NikonCapture.html������������������������������������������������000644 �000765 �000024 �00000053603 12527350232 022326� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>NikonCapture Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>NikonCapture Tags</h2> <p>This information is written by the Nikon Capture software in tag 0x0e01 of the maker notes of NEF images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x8ae85e = 9103454'>0x8ae85e</td> <td>LCHEditor</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x83a1a25 = 138025509'>0x83a1a25</td> <td>HistogramXML</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr> <td title='0xc89224b = 210313803'>0xc89224b</td> <td>ColorAberrationControl</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x116fea21 = 292547105'>0x116fea21</td> <td>HighlightData</td> <td class=c>-</td> <td>--&gt; <a href='NikonCapture.html#HighlightData'>NikonCapture HighlightData Tags</a></td></tr> <tr> <td title='0x2175eb78 = 561376120'>0x2175eb78</td> <td>D-LightingHQ</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x2fc08431 = 801145905'>0x2fc08431</td> <td>StraightenAngle</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td title='0x374233e0 = 927085536'>0x374233e0</td> <td>CropData</td> <td class=c>-</td> <td>--&gt; <a href='NikonCapture.html#CropData'>NikonCapture CropData Tags</a></td></tr> <tr class=b> <td title='0x39c456ac = 969168556'>0x39c456ac</td> <td>PictureCtrl</td> <td class=c>-</td> <td>--&gt; <a href='NikonCapture.html#PictureCtrl'>NikonCapture PictureCtrl Tags</a></td></tr> <tr> <td title='0x3cfc73c6 = 1023177670'>0x3cfc73c6</td> <td>RedEyeData</td> <td class=c>-</td> <td>--&gt; <a href='NikonCapture.html#RedEyeData'>NikonCapture RedEyeData Tags</a></td></tr> <tr class=b> <td title='0x3d136244 = 1024680516'>0x3d136244</td> <td>EditVersionName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x416391c6 = 1097044422'>0x416391c6</td> <td>QuickFix</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x56a54260 = 1453671008'>0x56a54260</td> <td>Exposure</td> <td class=c>-</td> <td>--&gt; <a href='NikonCapture.html#Exposure'>NikonCapture Exposure Tags</a></td></tr> <tr> <td title='0x5f0e7d23 = 1594785059'>0x5f0e7d23</td> <td>ColorBooster</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x6a6e36b6 = 1785607862'>0x6a6e36b6</td> <td>D-LightingHQSelected</td> <td class=c>int8u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td title='0x753dcbc0 = 1966984128'>0x753dcbc0</td> <td>NoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x76a43200 = 1990472192'>0x76a43200</td> <td>UnsharpMask</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x76a43201 = 1990472193'>0x76a43201</td> <td>Curves</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x76a43202 = 1990472194'>0x76a43202</td> <td>ColorBalanceAdj</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x76a43203 = 1990472195'>0x76a43203</td> <td>AdvancedRaw</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x76a43204 = 1990472196'>0x76a43204</td> <td>WhiteBalanceAdj</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x76a43205 = 1990472197'>0x76a43205</td> <td>VignetteControl</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x76a43206 = 1990472198'>0x76a43206</td> <td>FlipHorizontal</td> <td class=c>int8u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td title='0x76a43207 = 1990472199'>0x76a43207</td> <td>Rotation</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x84589434 = 2220397620'>0x84589434</td> <td>BrightnessData</td> <td class=c>-</td> <td>--&gt; <a href='NikonCapture.html#Brightness'>NikonCapture Brightness Tags</a></td></tr> <tr> <td title='0x890ff591 = 2299524497'>0x890ff591</td> <td>D-LightingHQData</td> <td class=c>-</td> <td>--&gt; <a href='NikonCapture.html#DLightingHQ'>NikonCapture DLightingHQ Tags</a></td></tr> <tr class=b> <td title='0x926f13e0 = 2456753120'>0x926f13e0</td> <td>NoiseReductionData</td> <td class=c>-</td> <td>--&gt; <a href='NikonCapture.html#NoiseReduction'>NikonCapture NoiseReduction Tags</a></td></tr> <tr> <td title='0x9ef5f6e0 = 2666919648'>0x9ef5f6e0</td> <td>IPTCData</td> <td class=c>-</td> <td>--&gt; <a href='IPTC.html'>IPTC Tags</a></td></tr> <tr class=b> <td title='0xab5eca5e = 2875116126'>0xab5eca5e</td> <td>PhotoEffects</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0xac6bd5c0 = 2892748224'>0xac6bd5c0</td> <td>VignetteControlIntensity</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb0384e1e = 2956480030'>0xb0384e1e</td> <td>PhotoEffectsData</td> <td class=c>-</td> <td>--&gt; <a href='NikonCapture.html#PhotoEffects'>NikonCapture PhotoEffects Tags</a></td></tr> <tr> <td title='0xb999a36f = 3113853807'>0xb999a36f</td> <td>ColorBoostData</td> <td class=c>-</td> <td>--&gt; <a href='NikonCapture.html#ColorBoost'>NikonCapture ColorBoost Tags</a></td></tr> <tr class=b> <td title='0xbf3c6c20 = 3208408096'>0xbf3c6c20</td> <td>WBAdjData</td> <td class=c>-</td> <td>--&gt; <a href='NikonCapture.html#WBAdjData'>NikonCapture WBAdjData Tags</a></td></tr> <tr> <td title='0xce5554aa = 3461698730'>0xce5554aa</td> <td>D-LightingHS</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0xe2173c47 = 3793173575'>0xe2173c47</td> <td>PictureControl</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0xe37b4337 = 3816506167'>0xe37b4337</td> <td>D-LightingHSData</td> <td class=c>-</td> <td>--&gt; <a href='NikonCapture.html#DLightingHS'>NikonCapture DLightingHS Tags</a></td></tr> <tr class=b> <td title='0xe42b5161 = 3828044129'>0xe42b5161</td> <td>UnsharpData</td> <td class=c>-</td> <td>--&gt; <a href='NikonCapture.html#UnsharpData'>NikonCapture UnsharpData Tags</a></td></tr> <tr> <td title='0xe9651831 = 3915716657'>0xe9651831</td> <td>PhotoEffectHistoryXML</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xfe28a44f = 4264076367'>0xfe28a44f</td> <td>AutoRedEye</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0xfe443a45 = 4265884229'>0xfe443a45</td> <td>ImageDustOff</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='HighlightData'>NikonCapture HighlightData Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShadowProtection</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>SaturationAdj</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>HighlightProtection</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CropData'>NikonCapture CropData Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>CropLeft</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>CropTop</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td class=r title='46 = 0x2e'>46</td> <td>CropRight</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='54 = 0x36'>54</td> <td>CropBottom</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td class=r title='142 = 0x8e'>142</td> <td>CropOutputWidthInches</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='150 = 0x96'>150</td> <td>CropOutputHeightInches</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td class=r title='158 = 0x9e'>158</td> <td>CropScaledResolution</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='174 = 0xae'>174</td> <td>CropSourceResolution</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td class=r title='182 = 0xb6'>182</td> <td>CropOutputResolution</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='190 = 0xbe'>190</td> <td>CropOutputScale</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td class=r title='198 = 0xc6'>198</td> <td>CropOutputWidth</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='206 = 0xce'>206</td> <td>CropOutputHeight</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td class=r title='214 = 0xd6'>214</td> <td>CropOutputPixels</td> <td class=c>double</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PictureCtrl'>NikonCapture PictureCtrl Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PictureControlActive</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>PictureControlMode</td> <td class=c>string[16]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='42 = 0x2a'>42</td> <td>QuickAdjust</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='43 = 0x2b'>43</td> <td>SharpeningAdj</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>ContrastAdj</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='45 = 0x2d'>45</td> <td>BrightnessAdj</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='46 = 0x2e'>46</td> <td>SaturationAdj</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='47 = 0x2f'>47</td> <td>HueAdj</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='RedEyeData'>NikonCapture RedEyeData Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>RedEyeCorrection</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Automatic <br>2 = Click on Eyes</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Exposure'>NikonCapture Exposure Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ExposureAdj</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>ExposureAdj2</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td class=r title='36 = 0x24'>36</td> <td>ActiveD-Lighting</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='37 = 0x25'>37</td> <td>ActiveD-LightingMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Unchanged <br>1 = Off <br>2 = Low <br>3 = Normal</td><td>&nbsp;&nbsp;</td> <td>4 = High <br>6 = Extra High <br>7 = Extra High 1 <br>8 = Extra High 2</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='Brightness'>NikonCapture Brightness Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>BrightnessAdj</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>EnhanceDarkTones</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='DLightingHQ'>NikonCapture DLightingHQ Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>D-LightingHQShadow</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>D-LightingHQHighlight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>D-LightingHQColorBoost</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='NoiseReduction'>NikonCapture NoiseReduction Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>EdgeNoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>ColorMoireReductionMode</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Low <br>2 = Medium <br>3 = High</span></td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>NoiseReductionIntensity</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>NoiseReductionSharpness</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>NoiseReductionMethod</td> <td class=c>int16u</td> <td><span class=s>0 = Faster <br>1 = Better Quality <br>2 = Better Quality 2013</span></td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>ColorMoireReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='23 = 0x17'>23</td> <td>NoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>ColorNoiseReductionIntensity</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>ColorNoiseReductionSharpness</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PhotoEffects'>NikonCapture PhotoEffects Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PhotoEffectsType</td> <td class=c>int8u</td> <td><span class=s>0 = None <br>1 = B&amp;W <br>2 = Sepia <br>3 = Tinted</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>PhotoEffectsRed</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>PhotoEffectsGreen</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>PhotoEffectsBlue</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorBoost'>NikonCapture ColorBoost Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ColorBoostType</td> <td class=c>int8u</td> <td><span class=s>0 = Nature <br>1 = People</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>ColorBoostLevel</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='WBAdjData'>NikonCapture WBAdjData Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>WBAdjRedBalance</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>WBAdjBlueBalance</td> <td class=c>double</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>WBAdjMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>1 = Use Gray Point <br>2 = Recorded Value <br>3 = Use Temperature <br>4 = Calculate Automatically <br>5 = Auto2 <br>6 = Underwater <br>7 = Auto1</td></tr></table> </td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>WBAdjLighting</td> <td class=c>int16u</td> <td><span class=s>0x0 = None <br>0x100 = Incandescent <br>0x200 = Daylight (direct sunlight) <br>0x201 = Daylight (shade) <br>0x202 = Daylight (cloudy) <br>0x300 = Standard Fluorescent (warm white) <br>0x301 = Standard Fluorescent (3700K) <br>0x302 = Standard Fluorescent (cool white) <br>0x303 = Standard Fluorescent (5000K) <br>0x304 = Standard Fluorescent (daylight) <br>0x305 = Standard Fluorescent (high temperature mercury vapor) <br>0x400 = High Color Rendering Fluorescent (warm white) <br>0x401 = High Color Rendering Fluorescent (3700K) <br>0x402 = High Color Rendering Fluorescent (cool white) <br>0x403 = High Color Rendering Fluorescent (5000K) <br>0x404 = High Color Rendering Fluorescent (daylight) <br>0x500 = Flash <br>0x501 = Flash (FL-G1 filter) <br>0x502 = Flash (FL-G2 filter) <br>0x503 = Flash (TN-A1 filter) <br>0x504 = Flash (TN-A2 filter) <br>0x600 = Sodium Vapor Lamps</span></td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>WBAdjTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='37 = 0x25'>37</td> <td>WBAdjTint</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='DLightingHS'>NikonCapture DLightingHS Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>D-LightingHSAdjustment</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>D-LightingHSColorBoost</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='UnsharpData'>NikonCapture UnsharpData Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>UnsharpCount</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>Unsharp1Color</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = RGB <br>1 = Red <br>2 = Green <br>3 = Blue</td><td>&nbsp;&nbsp;</td> <td>4 = Yellow <br>5 = Magenta <br>6 = Cyan</td></tr></table> </td></tr> <tr> <td class=r title='23 = 0x17'>23</td> <td>Unsharp1Intensity</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>Unsharp1HaloWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='27 = 0x1b'>27</td> <td>Unsharp1Threshold</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='46 = 0x2e'>46</td> <td>Unsharp2Color</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = RGB <br>1 = Red <br>2 = Green <br>3 = Blue</td><td>&nbsp;&nbsp;</td> <td>4 = Yellow <br>5 = Magenta <br>6 = Cyan</td></tr></table> </td></tr> <tr> <td class=r title='50 = 0x32'>50</td> <td>Unsharp2Intensity</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>Unsharp2HaloWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='54 = 0x36'>54</td> <td>Unsharp2Threshold</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='73 = 0x49'>73</td> <td>Unsharp3Color</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = RGB <br>1 = Red <br>2 = Green <br>3 = Blue</td><td>&nbsp;&nbsp;</td> <td>4 = Yellow <br>5 = Magenta <br>6 = Cyan</td></tr></table> </td></tr> <tr> <td class=r title='77 = 0x4d'>77</td> <td>Unsharp3Intensity</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='79 = 0x4f'>79</td> <td>Unsharp3HaloWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='81 = 0x51'>81</td> <td>Unsharp3Threshold</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='100 = 0x64'>100</td> <td>Unsharp4Color</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = RGB <br>1 = Red <br>2 = Green <br>3 = Blue</td><td>&nbsp;&nbsp;</td> <td>4 = Yellow <br>5 = Magenta <br>6 = Cyan</td></tr></table> </td></tr> <tr> <td class=r title='104 = 0x68'>104</td> <td>Unsharp4Intensity</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='106 = 0x6a'>106</td> <td>Unsharp4HaloWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='108 = 0x6c'>108</td> <td>Unsharp4Threshold</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised May 2, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/NikonCustom.html�������������������������������������������������000644 �000765 �000024 �00000454570 12527350231 022204� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>NikonCustom Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>NikonCustom Tags</h2> <p> Unfortunately, the NikonCustom settings are stored in a binary data block which changes from model to model. This means that significant effort must be spent in decoding these for each model, usually requiring hundreds of test images from a dedicated Nikon owner. For this reason, the NikonCustom settings have not been decoded for all models. The tables below list the custom settings for the currently supported models. </p> <h2><a name='SettingsD40'>NikonCustom SettingsD40 Tags</a></h2> <p>Custom settings for the Nikon D40.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0.1</td> <td>Beep</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = On <br>0x80 = Off</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.2</td> <td>AFAssist</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = On <br>0x40 = Off</span></td></tr> <tr> <td class=r title='0 = 0x0'>0.3</td> <td>NoMemoryCard</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Release Locked <br>0x20 = Enable Release</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.4</td> <td>ImageReview</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = On <br>0x10 = Off</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.1</td> <td>AutoISO</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Off <br>0x80 = On</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.2</td> <td>AutoISOMax</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x10 = 400 <br>0x20 = 800 <br>0x30 = 1600</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.3</td> <td>AutoISOMinShutterSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = 1/125 s <br>0x1 = 1/60 s <br>0x2 = 1/30 s <br>0x3 = 1/15 s</td><td>&nbsp;&nbsp;</td> <td>0x4 = 1/8 s <br>0x5 = 1/4 s <br>0x6 = 1/2 s <br>0x7 = 1 s</td></tr></table> </td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.1</td> <td>ImageReviewTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07] <br>0x0 = 4 s <br>0x1 = 8 s <br>0x2 = 20 s <br>0x3 = 1 min <br>0x4 = 10 min</span></td></tr> <tr> <td class=r title='3 = 0x3'>3.1</td> <td>MonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x0 = 4 s <br>0x20 = 8 s <br>0x40 = 20 s <br>0x60 = 1 min <br>0x80 = 10 min</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3.2</td> <td>MeteringTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c] <br>0x0 = 4 s <br>0x4 = 8 s <br>0x8 = 20 s <br>0xc = 1 min <br>0x10 = 30 min</span></td></tr> <tr> <td class=r title='3 = 0x3'>3.3</td> <td>SelfTimerTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = 2 s <br>0x1 = 5 s <br>0x2 = 10 s <br>0x3 = 20 s</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3.4</td> <td>RemoteOnDuration</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = 1 min <br>0x40 = 5 min <br>0x80 = 10 min <br>0xc0 = 15 min</span></td></tr> <tr> <td class=r title='4 = 0x4'>4.1</td> <td>AELockButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0e] <br>0x0 = AE/AF Lock <br>0x2 = AE Lock Only <br>0x4 = AF Lock Only <br>0x6 = AE Lock (hold) <br>0x8 = AF-ON</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.2</td> <td>AELock</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = Off <br>0x1 = On</span></td></tr> <tr> <td class=r title='5 = 0x5'>5.1</td> <td>ShootingModeSetting</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x70] <br>0x0 = Single Frame <br>0x10 = Continuous <br>0x20 = Self-timer <br>0x30 = Delayed Remote <br>0x40 = Quick-response Remote</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5.2</td> <td>TimerFunctionButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07] <br>0x0 = Shooting Mode <br>0x1 = Image Quality/Size <br>0x2 = ISO <br>0x3 = White Balance <br>0x4 = Self-timer</span></td></tr> <tr> <td class=r title='6 = 0x6'>6.1</td> <td>Metering</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = Matrix <br>0x1 = Center-weighted <br>0x2 = Spot</span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8.1</td> <td>InternalFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = TTL <br>0x10 = Manual</span></td></tr> <tr> <td class=r title='8 = 0x8'>8.2</td> <td>ManualFlashOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>FlashLevel</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10.1</td> <td>FocusModeSetting</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Manual <br>0x40 = AF-S <br>0x80 = AF-C <br>0xc0 = AF-A</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11.1</td> <td>AFAreaModeSetting</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = Single Area <br>0x10 = Dynamic Area <br>0x20 = Closest Subject</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='SettingsD80'>NikonCustom SettingsD80 Tags</a></h2> <p>Custom settings for the Nikon D80.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0.1</td> <td>Beep</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = On <br>0x80 = Off</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.2</td> <td>AFAssist</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = On <br>0x40 = Off</span></td></tr> <tr> <td class=r title='0 = 0x0'>0.3</td> <td>NoMemoryCard</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Release Locked <br>0x20 = Enable Release</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.4</td> <td>ImageReview</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = On <br>0x10 = Off</span></td></tr> <tr> <td class=r title='0 = 0x0'>0.5</td> <td>Illumination</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = Off <br>0x8 = On</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.6</td> <td>MainDialExposureComp</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Off <br>0x4 = On</span></td></tr> <tr> <td class=r title='0 = 0x0'>0.7</td> <td>EVStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = 1/3 EV <br>0x1 = 1/2 EV</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.1</td> <td>AutoISO</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = Off <br>0x40 = On</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.2</td> <td>AutoISOMax</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = 200 <br>0x10 = 400 <br>0x20 = 800 <br>0x30 = 1600</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.3</td> <td>AutoISOMinShutterSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>0x0 = 1/125 s <br>0x1 = 1/100 s <br>0x2 = 1/80 s <br>0x3 = 1/60 s <br>0x4 = 1/40 s <br>0x5 = 1/30 s</td><td>&nbsp;&nbsp;</td> <td>0x6 = 1/15 s <br>0x7 = 1/8 s <br>0x8 = 1/4 s <br>0x9 = 1/2 s <br>0xa = 1 s</td></tr></table> </td></tr> <tr> <td class=r title='2 = 0x2'>2.1</td> <td>AutoBracketSet</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = AE &amp; Flash <br>0x40 = AE Only <br>0x80 = Flash Only <br>0xc0 = WB Bracketing</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.2</td> <td>AutoBracketOrder</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = 0,-,+ <br>0x20 = -,0,+</span></td></tr> <tr> <td class=r title='3 = 0x3'>3.1</td> <td>MonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = 5 s <br>0x20 = 10 s <br>0x40 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x60 = 1 min <br>0x80 = 5 min <br>0xa0 = 10 min</td></tr></table> </td></tr> <tr class=b> <td class=r title='3 = 0x3'>3.2</td> <td>MeteringTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x4 = 6 s <br>0x8 = 8 s</td><td>&nbsp;&nbsp;</td> <td>0xc = 16 s <br>0x10 = 30 s <br>0x14 = 30 min</td></tr></table> </td></tr> <tr> <td class=r title='3 = 0x3'>3.3</td> <td>SelfTimerTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = 2 s <br>0x1 = 5 s <br>0x2 = 10 s <br>0x3 = 20 s</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.1</td> <td>AELockButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1e]</span><table class=cols><tr> <td>0x0 = AE/AF Lock <br>0x2 = AE Lock Only <br>0x4 = AF Lock Only <br>0x6 = AE Lock (hold) <br>0x8 = AF-ON <br>0xa = FV Lock <br>0xc = Focus Area Selection <br>0xe = AE-L/AF-L/AF Area <br>0x10 = AE-L/AF Area <br>0x12 = AF-L/AF Area <br>0x14 = AF-ON/AF Area</td></tr></table> </td></tr> <tr> <td class=r title='4 = 0x4'>4.2</td> <td>AELock</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = Off <br>0x1 = On</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.3</td> <td>RemoteOnDuration</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = 1 min <br>0x40 = 5 min <br>0x80 = 10 min <br>0xc0 = 15 min</span></td></tr> <tr> <td class=r title='5 = 0x5'>5.1</td> <td>CommandDials</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Standard (Main Shutter, Sub Aperture) <br>0x80 = Reversed (Main Aperture, Sub Shutter)</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5.2</td> <td>FunctionButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x78]</span><table class=cols><tr> <td>0x0 = ISO Display <br>0x8 = Framing Grid <br>0x10 = AF-area Mode <br>0x18 = Center AF Area <br>0x20 = FV Lock</td><td>&nbsp;&nbsp;</td> <td>0x28 = Flash Off <br>0x30 = Matrix Metering <br>0x38 = Center-weighted <br>0x40 = Spot Metering</td></tr></table> </td></tr> <tr> <td class=r title='6 = 0x6'>6.1</td> <td>GridDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Off <br>0x80 = On</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6.2</td> <td>ViewfinderWarning</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = On <br>0x40 = Off</span></td></tr> <tr> <td class=r title='6 = 0x6'>6.3</td> <td>CenterWeightedAreaSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0c] <br>0x0 = 6 mm <br>0x4 = 8 mm <br>0x8 = 10 mm</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6.4</td> <td>ExposureDelayMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Off <br>0x20 = On</span></td></tr> <tr> <td class=r title='6 = 0x6'>6.5</td> <td>MB-D80Batteries</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = LR6 (AA Alkaline) <br>0x1 = HR6 (AA Ni-MH) <br>0x2 = FR6 (AA Lithium) <br>0x3 = ZR6 (AA Ni-Mg)</span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7.1</td> <td>FlashWarning</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = On <br>0x80 = Off</span></td></tr> <tr> <td class=r title='7 = 0x7'>7.2</td> <td>FlashShutterSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x78]</span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7.3</td> <td>AutoFP</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Off <br>0x4 = On</span></td></tr> <tr> <td class=r title='7 = 0x7'>7.4</td> <td>ModelingFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = Off <br>0x2 = On</span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8.1</td> <td>InternalFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = TTL <br>0x40 = Manual <br>0x80 = Repeating Flash <br>0xc0 = Commander Mode</span></td></tr> <tr> <td class=r title='8 = 0x8'>8.2</td> <td>ManualFlashOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9.1</td> <td>RepeatingFlashOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x70]</span></td></tr> <tr> <td class=r title='9 = 0x9'>9.2</td> <td>RepeatingFlashCount</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10.1</td> <td>RepeatingFlashRate</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span></td></tr> <tr> <td class=r title='10 = 0xa'>10.2</td> <td>CommanderChannel</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03]</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11.1</td> <td>CommanderInternalFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = TTL <br>0x40 = Manual <br>0x80 = Off</span></td></tr> <tr> <td class=r title='11 = 0xb'>11.2</td> <td>CommanderGroupAMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = TTL <br>0x10 = Auto Aperture <br>0x20 = Manual <br>0x30 = Off</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11.3</td> <td>CommanderGroupBMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0c] <br>0x0 = TTL <br>0x4 = Auto Aperture <br>0x8 = Manual <br>0xc = Off</span></td></tr> <tr> <td class=r title='12 = 0xc'>12.1</td> <td>CommanderInternalTTLComp</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12.2</td> <td>CommanderInternalManualOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span></td></tr> <tr> <td class=r title='13 = 0xd'>13.1</td> <td>CommanderGroupA_TTL-AAComp</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13.2</td> <td>CommanderGroupAManualOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span></td></tr> <tr> <td class=r title='14 = 0xe'>14.1</td> <td>CommanderGroupB_TTL-AAComp</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='14 = 0xe'>14.2</td> <td>CommanderGroupBManualOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span></td></tr> <tr> <td class=r title='15 = 0xf'>15.1</td> <td>CenterAFArea</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Normal Zone <br>0x80 = Wide Zone</span></td></tr> <tr class=b> <td class=r title='15 = 0xf'>15.2</td> <td>FocusAreaSelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = No Wrap <br>0x4 = Wrap</span></td></tr> <tr> <td class=r title='15 = 0xf'>15.3</td> <td>AFAreaIllumination</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = Auto <br>0x1 = Off <br>0x2 = On</span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16.1</td> <td>AFAreaModeSetting</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Single Area <br>0x40 = Dynamic Area <br>0x80 = Auto-area</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='SettingsD90'>NikonCustom SettingsD90 Tags</a></h2> <p>Custom settings for the D90.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0.1</td> <td>LightSwitch</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = LCD Backlight <br>0x8 = LCD Backlight and Shooting Information</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.1</td> <td>AFAreaModeSetting</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x60] <br>0x0 = Single Area <br>0x20 = Dynamic Area <br>0x40 = Auto-area <br>0x60 = 3D-tracking (11 points)</span></td></tr> <tr> <td class=r title='2 = 0x2'>2.2</td> <td>CenterFocusPoint</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = Normal Zone <br>0x10 = Wide Zone</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.3</td> <td>AFAssist</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = On <br>0x1 = Off</span></td></tr> <tr> <td class=r title='2 = 0x2'>2.4</td> <td>AFPointIllumination</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x06] <br>0x0 = Auto <br>0x2 = On <br>0x4 = Off</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.5</td> <td>FocusPointWrap</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = No Wrap <br>0x8 = Wrap</span></td></tr> <tr> <td class=r title='3 = 0x3'>3.1</td> <td>AELockForMB-D80</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c]</span><table class=cols><tr> <td>0x0 = AE Lock Only <br>0x4 = AF Lock Only <br>0x8 = AE Lock (hold) <br>0xc = AF-On <br>0x10 = FV Lock <br>0x14 = Focus Point Selection <br>0x1c = AE/AF Lock</td></tr></table> </td></tr> <tr class=b> <td class=r title='3 = 0x3'>3.2</td> <td>MB-D80BatteryType</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = LR6 (AA alkaline) <br>0x1 = HR6 (AA Ni-MH) <br>0x2 = FR6 (AA lithium) <br>0x3 = ZR6 (AA Ni-Mn)</span></td></tr> <tr> <td class=r title='4 = 0x4'>4.1</td> <td>Beep</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = Off <br>0x40 = On</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.2</td> <td>GridDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = Off <br>0x2 = On</span></td></tr> <tr> <td class=r title='4 = 0x4'>4.3</td> <td>ISODisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0c] <br>0x0 = Show ISO/Easy ISO <br>0x4 = Show ISO Sensitivity <br>0xc = Show Frame Count</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.4</td> <td>ViewfinderWarning</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = On <br>0x1 = Off</span></td></tr> <tr> <td class=r title='4 = 0x4'>4.5</td> <td>NoMemoryCard</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Release Locked <br>0x20 = Enable Release</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5.1</td> <td>ScreenTips</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Off <br>0x4 = On</span></td></tr> <tr> <td class=r title='5 = 0x5'>5.2</td> <td>FileNumberSequence</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = On <br>0x8 = Off</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5.3</td> <td>ShootingInfoDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Auto <br>0x80 = Manual (dark on light) <br>0xc0 = Manual (light on dark)</span></td></tr> <tr> <td class=r title='5 = 0x5'>5.4</td> <td>LCDIllumination</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Off <br>0x20 = On</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6.1</td> <td>EasyExposureComp</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = Off <br>0x1 = On</span></td></tr> <tr> <td class=r title='6 = 0x6'>6.2</td> <td>ReverseIndicators</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = + 0 - <br>0x80 = - 0 +</span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7.1</td> <td>ExposureControlStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = 1/3 EV <br>0x40 = 1/2 EV</span></td></tr> <tr> <td class=r title='8 = 0x8'>8.1</td> <td>CenterWeightedAreaSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x60] <br>0x0 = 6 mm <br>0x20 = 8 mm <br>0x40 = 10 mm</span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8.2</td> <td>FineTuneOptMatrixMetering</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr> <td class=r title='9 = 0x9'>9.1</td> <td>FineTuneOptCenterWeighted</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9.2</td> <td>FineTuneOptSpotMetering</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr> <td class=r title='11 = 0xb'>11.1</td> <td>CLModeShootingSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11.2</td> <td>ExposureDelayMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = Off <br>0x40 = On</span></td></tr> <tr> <td class=r title='13 = 0xd'>13.1</td> <td>AutoBracketSet</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x0 = AE &amp; Flash <br>0x20 = AE Only <br>0x40 = Flash Only <br>0x60 = WB Bracketing <br>0x80 = Active D-Lighting</span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13.2</td> <td>AutoBracketOrder</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = 0,-,+ <br>0x10 = -,0,+</span></td></tr> <tr> <td class=r title='14 = 0xe'>14.1</td> <td>FuncButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x78]</span><table class=cols><tr> <td>0x8 = Framing Grid <br>0x10 = AF-area Mode <br>0x18 = Center Focus Point <br>0x20 = FV Lock <br>0x28 = Flash Off <br>0x30 = Matrix Metering <br>0x38 = Center-weighted Metering <br>0x40 = Spot Metering <br>0x48 = My Menu Top <br>0x50 = + NEF (RAW)</td></tr></table> </td></tr> <tr class=b> <td class=r title='16 = 0x10'>16.1</td> <td>OKButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x18] <br>0x0 = Not Used <br>0x8 = Select Center Focus Point <br>0x10 = Highlight Active Focus Point <br>0x18 = Not Used</span></td></tr> <tr> <td class=r title='17 = 0x11'>17.1</td> <td>AELockButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x38]</span><table class=cols><tr> <td>0x0 = AE/AF Lock <br>0x8 = AE Lock Only <br>0x10 = AF Lock Only</td><td>&nbsp;&nbsp;</td> <td>0x18 = AE Lock (hold) <br>0x20 = AF-ON <br>0x28 = FV Lock</td></tr></table> </td></tr> <tr class=b> <td class=r title='18 = 0x12'>18.1</td> <td>CommandDialsReverseRotation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = No <br>0x80 = Yes</span></td></tr> <tr> <td class=r title='18 = 0x12'>18.2</td> <td>ShutterReleaseButtonAE-L</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = Off <br>0x2 = On</span></td></tr> <tr class=b> <td class=r title='19 = 0x13'>19.1</td> <td>MeteringTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x10 = 6 s <br>0x20 = 8 s <br>0x30 = 16 s <br>0x40 = 30 s</td><td>&nbsp;&nbsp;</td> <td>0x50 = 1 min <br>0x60 = 5 min <br>0x70 = 10 min <br>0x80 = 30 min</td></tr></table> </td></tr> <tr> <td class=r title='19 = 0x13'>19.2</td> <td>RemoteOnDuration</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = 1 min <br>0x1 = 5 min <br>0x2 = 10 min <br>0x3 = 15 min</span></td></tr> <tr class=b> <td class=r title='20 = 0x14'>20.1</td> <td>SelfTimerTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = 2 s <br>0x40 = 5 s <br>0x80 = 10 s <br>0xc0 = 20 s</span></td></tr> <tr> <td class=r title='20 = 0x14'>20.2</td> <td>SelfTimerShotCount</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1e]</span></td></tr> <tr class=b> <td class=r title='21 = 0x15'>21.1</td> <td>PlaybackMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x4 = 10 s <br>0x8 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0xc = 1 min <br>0x10 = 5 min <br>0x14 = 10 min</td></tr></table> </td></tr> <tr> <td class=r title='21 = 0x15'>21.2</td> <td>ImageReviewTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x20 = 10 s <br>0x40 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x60 = 1 min <br>0x80 = 5 min <br>0xa0 = 10 min</td></tr></table> </td></tr> <tr class=b> <td class=r title='22 = 0x16'>22.1</td> <td>MenuMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x20 = 10 s <br>0x40 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x60 = 1 min <br>0x80 = 5 min <br>0xa0 = 10 min</td></tr></table> </td></tr> <tr> <td class=r title='22 = 0x16'>22.2</td> <td>ShootingInfoMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x4 = 10 s <br>0x8 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0xc = 1 min <br>0x10 = 5 min <br>0x14 = 10 min</td></tr></table> </td></tr> <tr class=b> <td class=r title='23 = 0x17'>23.1</td> <td>FlashShutterSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>0x0 = 1/60 s <br>0x1 = 1/30 s <br>0x2 = 1/15 s <br>0x3 = 1/8 s <br>0x4 = 1/4 s <br>0x5 = 1/2 s</td><td>&nbsp;&nbsp;</td> <td>0x6 = 1 s <br>0x7 = 2 s <br>0x8 = 4 s <br>0x9 = 8 s <br>0xa = 15 s <br>0xb = 30 s</td></tr></table> </td></tr> <tr> <td class=r title='24 = 0x18'>24.1</td> <td>InternalFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = TTL <br>0x40 = Manual <br>0x80 = Repeating Flash <br>0xc0 = Commander Mode</span></td></tr> <tr class=b> <td class=r title='24 = 0x18'>24.2</td> <td>ManualFlashOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr> <td class=r title='25 = 0x19'>25.1</td> <td>RepeatingFlashOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x70]</span></td></tr> <tr class=b> <td class=r title='25 = 0x19'>25.2</td> <td>RepeatingFlashCount</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr> <td class=r title='26 = 0x1a'>26.1</td> <td>RepeatingFlashRate</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span></td></tr> <tr class=b> <td class=r title='31 = 0x1f'>31.1</td> <td>FlashWarning</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = On <br>0x80 = Off</span></td></tr> <tr> <td class=r title='31 = 0x1f'>31.2</td> <td>CommanderInternalTTLComp</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='31 = 0x1f'>31.3</td> <td>ModelingFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = On <br>0x20 = Off</span></td></tr> <tr> <td class=r title='31 = 0x1f'>31.4</td> <td>AutoFP</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = Off <br>0x40 = On</span></td></tr> <tr class=b> <td class=r title='32 = 0x20'>32.1</td> <td>CommanderGroupA_TTLComp</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr> <td class=r title='33 = 0x21'>33.1</td> <td>CommanderGroupB_TTLComp</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='34 = 0x22'>34.1</td> <td>LiveViewAF</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Face Priority <br>0x40 = Wide Area <br>0x80 = Normal Area</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='SettingsD3'>NikonCustom SettingsD3 Tags</a></h2> <p>Custom settings for the D3, D3S, D3X, D300 and D300S.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0.1</td> <td>CustomSettingsBank</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = A <br>0x1 = B <br>0x2 = C <br>0x3 = D</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.2</td> <td>CustomSettingsAllDefault</td> <td class=c>int8u</td> <td><span class=s><span class=n>(&quot;No&quot; if any custom setting for this bank was changed from the default)</span> <br>[Mask 0x80] <br>0x0 = Yes <br>0x80 = No</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.1</td> <td>AF-CPrioritySelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Release <br>0x40 = Release + Focus <br>0x80 = Focus</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.2</td> <td>AF-SPrioritySelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Focus <br>0x20 = Release</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.3</td> <td>AFPointSelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = 51 Points <br>0x10 = 11 Points</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.4</td> <td>DynamicAFArea</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0c] <br>0x0 = 9 Points <br>0x4 = 21 Points <br>0x8 = 51 Points <br>0xc = 51 Points (3D-tracking)</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.5</td> <td>FocusTrackingLockOn</td> <td class=c>int8u</td> <td><span class=s><span class=n>(not D3S)</span> <br>[Mask 0x03] <br>0x0 = Long <br>0x1 = Normal <br>0x2 = Short <br>0x3 = Off</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.1</td> <td>AFActivation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Shutter/AF-On <br>0x80 = AF-On Only</span></td></tr> <tr> <td class=r title='2 = 0x2'>2.2</td> <td>FocusPointWrap</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = No Wrap <br>0x8 = Wrap</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.3</td> <td>AFPointIllumination</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3)</span> <br>[Mask 0x60] <br>0x0 = On in Continuous Shooting and Manual Focusing <br>0x20 = On During Manual Focusing <br>0x40 = On in Continuous Shooting Modes <br>0x60 = Off <br><span class=n>(D300)</span> <br>[Mask 0x06] <br>0x0 = Auto <br>0x2 = Off <br>0x4 = On</span></td></tr> <tr> <td class=r title='2 = 0x2'>2.4</td> <td>AFPointBrightness</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3 only)</span> <br>[Mask 0x06] <br>0x0 = Low <br>0x2 = Normal <br>0x4 = High <br>0x6 = Extra High</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.5</td> <td>AFAssist</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D300 only)</span> <br>[Mask 0x01] <br>0x0 = On <br>0x1 = Off</span></td></tr> <tr> <td class=r title='3 = 0x3'>3.1</td> <td>AFOnButton</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3 only)</span> <br>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = AF On <br>0x1 = AE/AF Lock <br>0x2 = AE Lock Only <br>0x3 = AE Lock (reset on release) <br>0x4 = AE Lock (hold) <br>0x5 = AF Lock Only</td></tr></table> </td></tr> <tr class=b> <td class=r title='3 = 0x3'>3.2</td> <td>VerticalAFOnButton</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3 only)</span> <br>[Mask 0x70]</span><table class=cols><tr> <td>0x0 = AF On <br>0x10 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x30 = AE Lock (reset on release) <br>0x40 = AE Lock (hold) <br>0x50 = AF Lock Only <br>0x70 = Same as AF On</td></tr></table> </td></tr> <tr> <td class=r title='3 = 0x3'>3.3</td> <td>AF-OnForMB-D10</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D300 only)</span> <br>[Mask 0x70]</span><table class=cols><tr> <td>0x0 = AF-On <br>0x10 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x30 = AE Lock (reset on release) <br>0x40 = AE Lock (hold) <br>0x50 = AF Lock Only <br>0x60 = Same as FUNC Button</td></tr></table> </td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.1</td> <td>FocusTrackingLockOn</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3S only)</span> <br>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = 5 (Long) <br>0x1 = 4 <br>0x2 = 3 (Normal)</td><td>&nbsp;&nbsp;</td> <td>0x3 = 2 <br>0x4 = 1 (Short) <br>0x5 = Off</td></tr></table> </td></tr> <tr> <td class=r title='4 = 0x4'>4.2</td> <td>AssignBktButton</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3S only)</span> <br>[Mask 0x08] <br>0x0 = Auto Bracketing <br>0x8 = Multiple Exposure</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.3</td> <td>MultiSelectorLiveView</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3S only)</span> <br>[Mask 0xc0] <br>0x0 = Reset <br>0x40 = Zoom On/Off <br>0x80 = Start Movie Recording <br>0xc0 = Not Used</span></td></tr> <tr> <td class=r title='4 = 0x4'>4.4</td> <td>InitialZoomLiveView</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3S only)</span> <br>[Mask 0x30] <br>0x0 = Low Magnification <br>0x10 = Medium Magnification <br>0x20 = High Magnification</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6.1</td> <td>ISOStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = 1/3 EV <br>0x40 = 1/2 EV <br>0x80 = 1 EV</span></td></tr> <tr> <td class=r title='6 = 0x6'>6.2</td> <td>ExposureControlStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = 1/3 EV <br>0x10 = 1/2 EV <br>0x20 = 1 EV</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6.3</td> <td>ExposureCompStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0c] <br>0x0 = 1/3 EV <br>0x4 = 1/2 EV <br>0x8 = 1 EV</span></td></tr> <tr> <td class=r title='6 = 0x6'>6.4</td> <td>EasyExposureCompensation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = Off <br>0x1 = On <br>0x2 = On (auto reset)</span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7.1</td> <td>CenterWeightedAreaSize</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3)</span> <br>[Mask 0xe0] <br>0x0 = 8 mm <br>0x20 = 12 mm <br>0x40 = 15 mm <br>0x60 = 20 mm <br>0x80 = Average <br><span class=n>(D300)</span> <br>[Mask 0xe0] <br>0x0 = 6 mm <br>0x20 = 8 mm <br>0x40 = 10 mm <br>0x60 = 13 mm <br>0x80 = Average</span></td></tr> <tr> <td class=r title='7 = 0x7'>7.2</td> <td>FineTuneOptCenterWeighted</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8.1</td> <td>FineTuneOptMatrixMetering</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span></td></tr> <tr> <td class=r title='8 = 0x8'>8.2</td> <td>FineTuneOptSpotMetering</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9.1</td> <td>MultiSelectorShootMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Select Center Focus Point <br>0x40 = Highlight Active Focus Point <br>0x80 = Not Used</span></td></tr> <tr> <td class=r title='9 = 0x9'>9.2</td> <td>MultiSelectorPlaybackMode</td> <td class=c>int8u</td> <td><span class=s><span class=n>(all models except D3S)</span> <br>[Mask 0x30] <br>0x0 = Thumbnail On/Off <br>0x10 = View Histograms <br>0x20 = Zoom On/Off <br>0x30 = Choose Folder</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9.3</td> <td>InitialZoomSetting</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3)</span> <br>[Mask 0x0c] <br>0x0 = High Magnification <br>0x4 = Medium Magnification <br>0x8 = Low Magnification <br><span class=n>(D300)</span> <br>[Mask 0x0c] <br>0x0 = Low Magnification <br>0x4 = Medium Magnification <br>0x8 = High Magnification</span></td></tr> <tr> <td class=r title='9 = 0x9'>9.4</td> <td>MultiSelector</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = Do Nothing <br>0x1 = Reset Meter-off Delay</span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10.1</td> <td>ExposureDelayMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = Off <br>0x40 = On</span></td></tr> <tr> <td class=r title='10 = 0xa'>10.2</td> <td>CLModeShootingSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10.3</td> <td>CHModeShootingSpeed</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3 only)</span> <br>[Mask 0x30] <br>0x0 = 9 fps <br>0x10 = 10 fps <br>0x20 = 11 fps</span></td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>MaxContinuousRelease</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12.1</td> <td>ReverseIndicators</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = + 0 - <br>0x20 = - 0 +</span></td></tr> <tr> <td class=r title='12 = 0xc'>12.2</td> <td>FileNumberSequence</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3)</span> <br>[Mask 0x02] <br>0x0 = On <br>0x2 = Off <br><span class=n>(D300)</span> <br>[Mask 0x08] <br>0x0 = On <br>0x8 = Off</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12.3</td> <td>RearDisplay</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3 only)</span> <br>[Mask 0x80] <br>0x0 = ISO <br>0x80 = Exposures Remaining</span></td></tr> <tr> <td class=r title='12 = 0xc'>12.4</td> <td>ViewfinderDisplay</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3 only)</span> <br>[Mask 0x40] <br>0x0 = Frame Count <br>0x40 = Exposures Remaining</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12.5</td> <td>BatteryOrder</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D300 only)</span> <br>[Mask 0x04] <br>0x0 = MB-D10 First <br>0x4 = Camera Battery First</span></td></tr> <tr> <td class=r title='12 = 0xc'>12.6</td> <td>MB-D10Batteries</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D300 only)</span> <br>[Mask 0x03] <br>0x0 = LR6 (AA alkaline) <br>0x1 = HR6 (AA Ni-MH) <br>0x2 = FR6 (AA lithium) <br>0x3 = ZR6 (AA Ni-Mn)</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12.7</td> <td>ScreenTips</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = On <br>0x10 = Off</span></td></tr> <tr> <td class=r title='13 = 0xd'>13.1</td> <td>Beep</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = High <br>0x40 = Low <br>0x80 = Off</span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13.2</td> <td>ShootingInfoDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = Auto <br>0x10 = Auto <br>0x20 = Manual (dark on light) <br>0x30 = Manual (light on dark)</span></td></tr> <tr> <td class=r title='13 = 0xd'>13.3</td> <td>GridDisplay</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D300 only)</span> <br>[Mask 0x02] <br>0x0 = Off <br>0x2 = On</span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13.4</td> <td>ViewfinderWarning</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D300 only)</span> <br>[Mask 0x01] <br>0x0 = On <br>0x1 = Off</span></td></tr> <tr> <td class=r title='13 = 0xd'>13.5</td> <td>MultiSelectorPlaybackMode</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3S only)</span> <br>[Mask 0x03] <br>0x0 = Thumbnail On/Off <br>0x1 = View Histograms <br>0x2 = Zoom On/Off</span></td></tr> <tr class=b> <td class=r title='14 = 0xe'>14.1</td> <td>PreviewButton <br>FuncButton</td> <td class=c>int8u<br>int8u</td> <td><span class=s><span class=n>(D3)</span> <br>[Mask 0xf8]</span><table class=cols><tr> <td>0x0 = None <br>0x8 = Preview <br>0x10 = FV Lock <br>0x18 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x28 = AE Lock (reset on release) <br>0x30 = AE Lock (hold) <br>0x38 = AF Lock Only <br>0x40 = Flash Off <br>0x48 = Bracketing Burst <br>0x50 = Matrix Metering <br>0x58 = Center-weighted Metering <br>0x60 = Spot Metering <br>0x68 = Virtual Horizon <br>0x78 = Playback <br>0x80 = My Menu Top</td></tr></table> <span class=s><span class=n>(D300)</span> <br>[Mask 0xf8]</span><table class=cols><tr> <td>0x0 = None <br>0x8 = Preview <br>0x10 = FV Lock <br>0x18 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x28 = AE Lock (reset on release) <br>0x30 = AE Lock (hold) <br>0x38 = AF Lock Only <br>0x48 = Flash Off <br>0x50 = Bracketing Burst <br>0x58 = Matrix Metering <br>0x60 = Center-weighted Metering <br>0x68 = Spot Metering <br>0x70 = Playback <br>0x78 = My Menu Top <br>0x80 = + NEF (RAW)</td></tr></table> </td></tr> <tr> <td class=r title='14 = 0xe'>14.2</td> <td>PreviewButtonPlusDials <br>FuncButtonPlusDials</td> <td class=c>int8u<br>int8u</td> <td><span class=s><span class=n>(D3)</span> <br>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = None <br>0x1 = Choose Image Area (FX/DX/5:4) <br>0x2 = One Step Speed/Aperture <br>0x3 = Choose Non-CPU Lens Number <br>0x5 = Choose Image Area (FX/DX) <br>0x6 = Shooting Bank Menu <br>0x7 = Dynamic AF Area</td></tr></table> <span class=s><span class=n>(D300)</span> <br>[Mask 0x07] <br>0x0 = None <br>0x2 = One Step Speed/Aperture <br>0x3 = Choose Non-CPU Lens Number <br>0x5 = Auto Bracketing <br>0x6 = Dynamic AF Area</span></td></tr> <tr class=b> <td class=r title='15 = 0xf'>15.1</td> <td>FuncButton <br>PreviewButton</td> <td class=c>int8u<br>int8u</td> <td><span class=s><span class=n>(D3)</span> <br>[Mask 0xf8]</span><table class=cols><tr> <td>0x0 = None <br>0x8 = Preview <br>0x10 = FV Lock <br>0x18 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x28 = AE Lock (reset on release) <br>0x30 = AE Lock (hold) <br>0x38 = AF Lock Only <br>0x40 = Flash Off <br>0x48 = Bracketing Burst <br>0x50 = Matrix Metering <br>0x58 = Center-weighted Metering <br>0x60 = Spot Metering <br>0x68 = Virtual Horizon <br>0x78 = Playback <br>0x80 = My Menu Top</td></tr></table> <span class=s><span class=n>(D300)</span> <br>[Mask 0xf8]</span><table class=cols><tr> <td>0x0 = None <br>0x8 = Preview <br>0x10 = FV Lock <br>0x18 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x28 = AE Lock (reset on release) <br>0x30 = AE Lock (hold) <br>0x38 = AF Lock Only <br>0x48 = Flash Off <br>0x50 = Bracketing Burst <br>0x58 = Matrix Metering <br>0x60 = Center-weighted Metering <br>0x68 = Spot Metering <br>0x70 = Playback <br>0x78 = My Menu Top <br>0x80 = + NEF (RAW)</td></tr></table> </td></tr> <tr> <td class=r title='15 = 0xf'>15.2</td> <td>FuncButtonPlusDials <br>PreviewButtonPlusDials</td> <td class=c>int8u<br>int8u</td> <td><span class=s><span class=n>(D3)</span> <br>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = None <br>0x1 = Choose Image Area (FX/DX/5:4) <br>0x2 = One Step Speed/Aperture <br>0x3 = Choose Non-CPU Lens Number <br>0x4 = Focus Point Selection <br>0x5 = Choose Image Area (FX/DX) <br>0x6 = Shooting Bank Menu <br>0x7 = Dynamic AF Area</td></tr></table> <span class=s><span class=n>(D300)</span> <br>[Mask 0x07] <br>0x0 = None <br>0x2 = One Step Speed/Aperture <br>0x3 = Choose Non-CPU Lens Number <br>0x5 = Auto Bracketing <br>0x6 = Dynamic AF Area</span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16.1</td> <td>AELockButton</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3)</span> <br>[Mask 0xf8]</span><table class=cols><tr> <td>0x0 = None <br>0x8 = Preview <br>0x10 = FV Lock <br>0x18 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x28 = AE Lock (reset on release) <br>0x30 = AE Lock (hold) <br>0x38 = AF Lock Only <br>0x40 = Flash Off <br>0x48 = Bracketing Burst <br>0x50 = Matrix Metering <br>0x58 = Center-weighted Metering <br>0x60 = Spot Metering <br>0x68 = Virtual Horizon <br>0x70 = AF On <br>0x78 = Playback <br>0x80 = My Menu Top</td></tr></table> <span class=s><span class=n>(D300)</span> <br>[Mask 0xf8]</span><table class=cols><tr> <td>0x0 = None <br>0x8 = Preview <br>0x10 = FV Lock <br>0x18 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x28 = AE Lock (reset on release) <br>0x30 = AE Lock (hold) <br>0x38 = AF Lock Only <br>0x40 = AF On <br>0x48 = Flash Off <br>0x50 = Bracketing Burst <br>0x58 = Matrix Metering <br>0x60 = Center-weighted Metering <br>0x68 = Spot Metering <br>0x70 = Playback <br>0x78 = My Menu Top <br>0x80 = + NEF (RAW)</td></tr></table> </td></tr> <tr> <td class=r title='16 = 0x10'>16.2</td> <td>AELockButtonPlusDials</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3)</span> <br>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = None <br>0x1 = Choose Image Area (FX/DX/5:4) <br>0x2 = One Step Speed/Aperture <br>0x3 = Choose Non-CPU Lens Number <br>0x5 = Choose Image Area (FX/DX) <br>0x6 = Shooting Bank Menu <br>0x7 = Dynamic AF Area</td></tr></table> <span class=s><span class=n>(D300)</span> <br>[Mask 0x07] <br>0x0 = None <br>0x3 = Choose Non-CPU Lens Number <br>0x5 = Auto Bracketing <br>0x6 = Dynamic AF Area</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17.1</td> <td>CommandDialsReverseRotation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = No <br>0x80 = Yes</span></td></tr> <tr> <td class=r title='17 = 0x11'>17.2</td> <td>CommandDialsChangeMainSub</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = Off <br>0x40 = On</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17.3</td> <td>CommandDialsApertureSetting</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Sub-command Dial <br>0x20 = Aperture Ring</span></td></tr> <tr> <td class=r title='17 = 0x11'>17.4</td> <td>CommandDialsMenuAndPlayback</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = Off <br>0x10 = On</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17.5</td> <td>LCDIllumination</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = Off <br>0x8 = On</span></td></tr> <tr> <td class=r title='17 = 0x11'>17.6</td> <td>PhotoInfoPlayback</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Info Up-down, Playback Left-right <br>0x4 = Info Left-right, Playback Up-down</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17.7</td> <td>ShutterReleaseButtonAE-L</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = Off <br>0x2 = On</span></td></tr> <tr> <td class=r title='17 = 0x11'>17.8</td> <td>ReleaseButtonToUseDial</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = No <br>0x1 = Yes</span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18.1</td> <td>SelfTimerTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x18] <br>0x0 = 2 s <br>0x8 = 5 s <br>0x10 = 10 s <br>0x18 = 20 s</span></td></tr> <tr> <td class=r title='18 = 0x12'>18.2</td> <td>MonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07] <br>0x0 = 10 s <br>0x1 = 20 s <br>0x2 = 1 min <br>0x3 = 5 min <br>0x4 = 10 min</span></td></tr> <tr class=b> <td class=r title='20 = 0x14'>20.1</td> <td>FlashSyncSpeed</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3)</span> <br>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = 1/250 s (auto FP) <br>0x20 = 1/250 s <br>0x40 = 1/200 s <br>0x60 = 1/160 s</td><td>&nbsp;&nbsp;</td> <td>0x80 = 1/125 s <br>0xa0 = 1/100 s <br>0xc0 = 1/80 s <br>0xe0 = 1/60 s</td></tr></table> <span class=s><span class=n>(D300)</span> <br>[Mask 0xf0]</span><table class=cols><tr> <td>0x0 = 1/320 s (auto FP) <br>0x10 = 1/250 s (auto FP) <br>0x20 = 1/250 s <br>0x30 = 1/200 s <br>0x40 = 1/160 s <br>0x50 = 1/125 s <br>0x60 = 1/100 s <br>0x70 = 1/80 s <br>0x80 = 1/60 s</td></tr></table> </td></tr> <tr> <td class=r title='20 = 0x14'>20.2</td> <td>FlashShutterSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>0x0 = 1/60 s <br>0x1 = 1/30 s <br>0x2 = 1/15 s <br>0x3 = 1/8 s <br>0x4 = 1/4 s <br>0x5 = 1/2 s</td><td>&nbsp;&nbsp;</td> <td>0x6 = 1 s <br>0x7 = 2 s <br>0x8 = 4 s <br>0x9 = 8 s <br>0xa = 15 s <br>0xb = 30 s</td></tr></table> </td></tr> <tr class=b> <td class=r title='21 = 0x15'>21.1</td> <td>AutoBracketSet</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3 and D300)</span> <br>[Mask 0xc0] <br>0x0 = AE &amp; Flash <br>0x40 = AE Only <br>0x80 = Flash Only <br>0xc0 = WB Bracketing <br><span class=n>(D3S and D300S)</span> <br>[Mask 0xe0] <br>0x0 = AE &amp; Flash <br>0x20 = AE Only <br>0x40 = Flash Only <br>0x60 = WB Bracketing <br>0x80 = ADL Bracketing</span></td></tr> <tr> <td class=r title='21 = 0x15'>21.2</td> <td>AutoBracketModeM</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3 and D300)</span> <br>[Mask 0x30] <br>0x0 = Flash/Speed <br>0x10 = Flash/Speed/Aperture <br>0x20 = Flash/Aperture <br>0x30 = Flash Only <br><span class=n>(D3S and D300S)</span> <br>[Mask 0x18] <br>0x0 = Flash/Speed <br>0x8 = Flash/Speed/Aperture <br>0x10 = Flash/Aperture <br>0x18 = Flash Only</span></td></tr> <tr class=b> <td class=r title='21 = 0x15'>21.3</td> <td>AutoBracketOrder</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D3 and D300)</span> <br>[Mask 0x08] <br>0x0 = 0,-,+ <br>0x8 = -,0,+ <br><span class=n>(D3S and D300S)</span> <br>[Mask 0x04] <br>0x0 = 0,-,+ <br>0x4 = -,0,+</span></td></tr> <tr> <td class=r title='21 = 0x15'>21.4</td> <td>ModelingFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = On <br>0x1 = Off</span></td></tr> <tr class=b> <td class=r title='22 = 0x16'>22.1</td> <td>NoMemoryCard</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Release Locked <br>0x80 = Enable Release</span></td></tr> <tr> <td class=r title='22 = 0x16'>22.2</td> <td>MeteringTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x1 = 6 s <br>0x2 = 8 s <br>0x3 = 16 s <br>0x4 = 30 s</td><td>&nbsp;&nbsp;</td> <td>0x5 = 1 min <br>0x6 = 5 min <br>0x7 = 10 min <br>0x8 = 30 min <br>0x9 = No Limit</td></tr></table> </td></tr> <tr class=b> <td class=r title='23 = 0x17'>23.1</td> <td>InternalFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = TTL <br>0x40 = Manual <br>0x80 = Repeating Flash <br>0xc0 = Commander Mode</span></td></tr> <tr> <td class=r title='25 = 0x19'>25.1</td> <td>ImageReviewTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x20 = 10 s <br>0x40 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x60 = 1 min <br>0x80 = 5 min <br>0xa0 = 10 min</td></tr></table> </td></tr> <tr class=b> <td class=r title='25 = 0x19'>25.2</td> <td>PlaybackMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x4 = 10 s <br>0x8 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0xc = 1 min <br>0x10 = 5 min <br>0x14 = 10 min</td></tr></table> </td></tr> <tr> <td class=r title='26 = 0x1a'>26.1</td> <td>MenuMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x20 = 10 s <br>0x40 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x60 = 1 min <br>0x80 = 5 min <br>0xa0 = 10 min</td></tr></table> </td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26.2</td> <td>ShootingInfoMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x4 = 10 s <br>0x8 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0xc = 1 min <br>0x10 = 5 min <br>0x14 = 10 min</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='SettingsD700'>NikonCustom SettingsD700 Tags</a></h2> <p>Custom settings for the D700.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0.1</td> <td>CustomSettingsBank</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = A <br>0x1 = B <br>0x2 = C <br>0x3 = D</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.2</td> <td>CustomSettingsAllDefault</td> <td class=c>int8u</td> <td><span class=s><span class=n>(&quot;No&quot; if any custom setting for this bank was changed from the default)</span> <br>[Mask 0x80] <br>0x0 = Yes <br>0x80 = No</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.1</td> <td>AF-CPrioritySelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Release <br>0x40 = Release + Focus <br>0x80 = Focus</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.2</td> <td>AF-SPrioritySelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Focus <br>0x20 = Release</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.3</td> <td>AFPointSelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = 51 Points <br>0x10 = 11 Points</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.4</td> <td>DynamicAFArea</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0c] <br>0x0 = 9 Points <br>0x4 = 21 Points <br>0x8 = 51 Points <br>0xc = 51 Points (3D-tracking)</span></td></tr> <tr> <td class=r title='2 = 0x2'>2.1</td> <td>AFActivation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Shutter/AF-On <br>0x80 = AF-On Only</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.2</td> <td>FocusPointWrap</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = No Wrap <br>0x8 = Wrap</span></td></tr> <tr> <td class=r title='2 = 0x2'>2.3</td> <td>AFPointIllumination</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x06] <br>0x0 = Auto <br>0x2 = Off <br>0x4 = On</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.4</td> <td>AFAssist</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = On <br>0x1 = Off</span></td></tr> <tr> <td class=r title='3 = 0x3'>3.1</td> <td>FocusTrackingLockOn</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = 3 Normal <br>0x1 = 4 <br>0x2 = 5 Long</td><td>&nbsp;&nbsp;</td> <td>0x3 = 2 <br>0x4 = 1 Short <br>0x5 = Off</td></tr></table> </td></tr> <tr class=b> <td class=r title='3 = 0x3'>3.2</td> <td>AF-OnForMB-D10</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x70]</span><table class=cols><tr> <td>0x0 = AF-On <br>0x10 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x30 = AE Lock (reset on release) <br>0x40 = AE Lock (hold) <br>0x50 = AF Lock Only <br>0x60 = Same as FUNC Button</td></tr></table> </td></tr> <tr> <td class=r title='4 = 0x4'>4.1</td> <td>ISOStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = 1/3 EV <br>0x40 = 1/2 EV <br>0x80 = 1 EV</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.2</td> <td>ExposureControlStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = 1/3 EV <br>0x10 = 1/2 EV <br>0x20 = 1 EV</span></td></tr> <tr> <td class=r title='4 = 0x4'>4.3</td> <td>ExposureCompStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0c] <br>0x0 = 1/3 EV <br>0x4 = 1/2 EV <br>0x8 = 1 EV</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.4</td> <td>EasyExposureCompensation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = Off <br>0x1 = On <br>0x2 = On (auto reset)</span></td></tr> <tr> <td class=r title='5 = 0x5'>5.1</td> <td>CenterWeightedAreaSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x70] <br>0x0 = 8 mm <br>0x10 = 12 mm <br>0x20 = 15 mm <br>0x30 = 20 mm <br>0x40 = Average</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6.1</td> <td>FineTuneOptMatrixMetering</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span></td></tr> <tr> <td class=r title='6 = 0x6'>6.2</td> <td>FineTuneOptSpotMetering</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7.1</td> <td>ShutterReleaseButtonAE-L</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Off <br>0x80 = On</span></td></tr> <tr> <td class=r title='7 = 0x7'>7.2</td> <td>SelfTimerTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = 2 s <br>0x10 = 5 s <br>0x20 = 10 s <br>0x30 = 20 s</span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7.3</td> <td>MeteringTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x1 = 6 s <br>0x2 = 8 s <br>0x3 = 16 s <br>0x4 = 30 s</td><td>&nbsp;&nbsp;</td> <td>0x5 = 1 min <br>0x6 = 5 min <br>0x7 = 10 min <br>0x8 = 30 min <br>0x9 = No Limit</td></tr></table> </td></tr> <tr> <td class=r title='8 = 0x8'>8.1</td> <td>PlaybackMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x38]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x8 = 10 s <br>0x10 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x18 = 1 min <br>0x20 = 5 min <br>0x28 = 10 min</td></tr></table> </td></tr> <tr class=b> <td class=r title='8 = 0x8'>8.2</td> <td>MenuMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x1 = 10 s <br>0x2 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x3 = 1 min <br>0x4 = 5 min <br>0x5 = 10 min</td></tr></table> </td></tr> <tr> <td class=r title='9 = 0x9'>9.1</td> <td>ShootingInfoMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x38]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x8 = 10 s <br>0x10 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x18 = 1 min <br>0x20 = 5 min <br>0x28 = 10 min</td></tr></table> </td></tr> <tr class=b> <td class=r title='9 = 0x9'>9.2</td> <td>ImageReviewTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x1 = 10 s <br>0x2 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x3 = 1 min <br>0x4 = 5 min <br>0x5 = 10 min</td></tr></table> </td></tr> <tr> <td class=r title='10 = 0xa'>10.1</td> <td>Beep</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = High <br>0x40 = Low <br>0x80 = Off</span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10.2</td> <td>ShootingInfoDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = Auto <br>0x10 = Auto <br>0x20 = Manual (dark on light) <br>0x30 = Manual (light on dark)</span></td></tr> <tr> <td class=r title='10 = 0xa'>10.3</td> <td>LCDIllumination</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = Off <br>0x8 = On</span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10.4</td> <td>ExposureDelayMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Off <br>0x4 = On</span></td></tr> <tr> <td class=r title='10 = 0xa'>10.5</td> <td>GridDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = Off <br>0x2 = On</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11.1</td> <td>FileNumberSequence</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = On <br>0x40 = Off</span></td></tr> <tr> <td class=r title='11 = 0xb'>11.2</td> <td>CLModeShootingSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>MaxContinuousRelease</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='13 = 0xd'>13.1</td> <td>ScreenTips</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = Off <br>0x8 = On</span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13.2</td> <td>BatteryOrder</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = MB-D10 First <br>0x4 = Camera Battery First</span></td></tr> <tr> <td class=r title='13 = 0xd'>13.3</td> <td>MB-D10BatteryType</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = LR6 (AA alkaline) <br>0x1 = HR6 (AA Ni-MH) <br>0x2 = FR6 (AA lithium) <br>0x3 = ZR6 (AA Ni-Mn)</span></td></tr> <tr class=b> <td class=r title='15 = 0xf'>15.1</td> <td>FlashSyncSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span><table class=cols><tr> <td>0x0 = 1/320 s (auto FP) <br>0x10 = 1/250 s (auto FP) <br>0x20 = 1/250 s <br>0x30 = 1/200 s <br>0x40 = 1/160 s <br>0x50 = 1/125 s <br>0x60 = 1/100 s <br>0x70 = 1/80 s <br>0x80 = 1/60 s</td></tr></table> </td></tr> <tr> <td class=r title='15 = 0xf'>15.2</td> <td>FlashShutterSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>0x0 = 1/60 s <br>0x1 = 1/30 s <br>0x2 = 1/15 s <br>0x3 = 1/8 s <br>0x4 = 1/4 s <br>0x5 = 1/2 s</td><td>&nbsp;&nbsp;</td> <td>0x6 = 1 s <br>0x7 = 2 s <br>0x8 = 4 s <br>0x9 = 8 s <br>0xa = 15 s <br>0xb = 30 s</td></tr></table> </td></tr> <tr class=b> <td class=r title='16 = 0x10'>16.1</td> <td>FlashControlBuilt-in</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = TTL <br>0x40 = Manual <br>0x80 = Repeating Flash <br>0xc0 = Commander Mode</span></td></tr> <tr> <td class=r title='16 = 0x10'>16.2</td> <td>ManualFlashOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17.1</td> <td>RepeatingFlashOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x70]</span></td></tr> <tr> <td class=r title='17 = 0x11'>17.2</td> <td>RepeatingFlashCount</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18.1</td> <td>RepeatingFlashRate</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span></td></tr> <tr> <td class=r title='18 = 0x12'>18.2</td> <td>CommanderInternalTTLChannel</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = 1 ch <br>0x1 = 2 ch <br>0x2 = 3 ch <br>0x3 = 4 ch</span></td></tr> <tr class=b> <td class=r title='20 = 0x14'>20.1</td> <td>CommanderInternalTTLCompBuiltin</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr> <td class=r title='21 = 0x15'>21.1</td> <td>CommanderInternalTTLCompGroupA</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='22 = 0x16'>22.1</td> <td>CommanderInternalTTLCompGroupB</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr> <td class=r title='26 = 0x1a'>26.1</td> <td>AutoBracketSet</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = AE &amp; Flash <br>0x40 = AE Only <br>0x80 = Flash Only <br>0xc0 = WB Bracketing</span></td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26.2</td> <td>AutoBracketModeM</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = Flash/Speed <br>0x10 = Flash/Speed/Aperture <br>0x20 = Flash/Aperture <br>0x30 = Flash Only</span></td></tr> <tr> <td class=r title='26 = 0x1a'>26.3</td> <td>AutoBracketOrder</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = 0,-,+ <br>0x8 = -,0,+</span></td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26.4</td> <td>ModelingFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = On <br>0x1 = Off</span></td></tr> <tr> <td class=r title='27 = 0x1b'>27.1</td> <td>MultiSelectorShootMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Select Center Focus Point <br>0x40 = Highlight Active Focus Point <br>0x80 = Not Used</span></td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27.2</td> <td>MultiSelectorPlaybackMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = Thumbnail On/Off <br>0x10 = View Histograms <br>0x20 = Zoom On/Off <br>0x30 = Choose Folder</span></td></tr> <tr> <td class=r title='27 = 0x1b'>27.3</td> <td>InitialZoomSetting</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0c] <br>0x0 = Low Magnification <br>0x4 = Medium Magnification <br>0x8 = High Magnification</span></td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27.4</td> <td>MultiSelector</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = Do Nothing <br>0x1 = Reset Meter-off Delay</span></td></tr> <tr> <td class=r title='28 = 0x1c'>28.1</td> <td>FuncButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf8]</span><table class=cols><tr> <td>0x0 = None <br>0x8 = Preview <br>0x10 = FV Lock <br>0x18 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x28 = AE Lock (reset on release) <br>0x30 = AE Lock (hold) <br>0x38 = AF Lock Only <br>0x48 = Flash Off <br>0x50 = Bracketing Burst <br>0x58 = Matrix Metering <br>0x60 = Center-weighted Metering <br>0x68 = Spot Metering <br>0x70 = My Menu Top <br>0x78 = Live View <br>0x80 = + NEF (RAW) <br>0x88 = Virtual Horizon</td></tr></table> </td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29.1</td> <td>PreviewButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf8]</span><table class=cols><tr> <td>0x0 = None <br>0x8 = Preview <br>0x10 = FV Lock <br>0x18 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x28 = AE Lock (reset on release) <br>0x30 = AE Lock (hold) <br>0x38 = AF Lock Only <br>0x40 = AF-ON <br>0x48 = Flash Off <br>0x50 = Bracketing Burst <br>0x58 = Matrix Metering <br>0x60 = Center-weighted Metering <br>0x68 = Spot Metering <br>0x70 = My Menu Top <br>0x78 = Live View <br>0x80 = + NEF (RAW) <br>0x88 = Virtual Horizon</td></tr></table> </td></tr> <tr> <td class=r title='30 = 0x1e'>30.1</td> <td>AELockButton</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D300)</span> <br>[Mask 0xf8]</span><table class=cols><tr> <td>0x0 = None <br>0x8 = Preview <br>0x10 = FV Lock <br>0x18 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x28 = AE Lock (reset on release) <br>0x30 = AE Lock (hold) <br>0x38 = AF Lock Only <br>0x40 = AF-ON <br>0x48 = Flash Off <br>0x50 = Bracketing Burst <br>0x58 = Matrix Metering <br>0x60 = Center-weighted Metering <br>0x68 = Spot Metering <br>0x70 = My Menu Top <br>0x78 = Live View <br>0x80 = + NEF (RAW) <br>0x88 = Virtual Horizon</td></tr></table> </td></tr> <tr class=b> <td class=r title='31 = 0x1f'>31.1</td> <td>FuncButtonPlusDials</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x70]</span><table class=cols><tr> <td>0x0 = None <br>0x10 = Choose Image Area <br>0x20 = One Step Speed/Aperture <br>0x30 = Choose Non-CPU Lens Number <br>0x50 = Auto bracketing <br>0x60 = Dynamic AF Area <br>0x70 = Shutter speed &amp; Aperture lock</td></tr></table> </td></tr> <tr> <td class=r title='31 = 0x1f'>31.2</td> <td>PreviewButtonPlusDials</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = None <br>0x1 = Choose Image Area <br>0x2 = One Step Speed/Aperture <br>0x3 = Choose Non-CPU Lens Number <br>0x5 = Auto bracketing <br>0x6 = Dynamic AF Area <br>0x7 = Shutter speed &amp; Aperture lock</td></tr></table> </td></tr> <tr class=b> <td class=r title='32 = 0x20'>32.1</td> <td>AELockButtonPlusDials</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x70]</span><table class=cols><tr> <td>0x0 = None <br>0x10 = Choose Image Area <br>0x20 = One Step Speed/Aperture <br>0x30 = Choose Non-CPU Lens Number <br>0x50 = Auto bracketing <br>0x60 = Dynamic AF Area <br>0x70 = Shutter speed &amp; Aperture lock</td></tr></table> </td></tr> <tr> <td class=r title='33 = 0x21'>33.1</td> <td>CommandDialsReverseRotation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = No <br>0x80 = Yes</span></td></tr> <tr class=b> <td class=r title='33 = 0x21'>33.2</td> <td>CommandDialsChangeMainSub</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = Off <br>0x40 = On</span></td></tr> <tr> <td class=r title='33 = 0x21'>33.3</td> <td>CommandDialsApertureSetting</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Sub-command Dial <br>0x20 = Aperture Ring</span></td></tr> <tr class=b> <td class=r title='33 = 0x21'>33.4</td> <td>CommandDialsMenuAndPlayback</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = Off <br>0x10 = On</span></td></tr> <tr> <td class=r title='33 = 0x21'>33.5</td> <td>ReverseIndicators</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = + 0 - <br>0x8 = - 0 +</span></td></tr> <tr class=b> <td class=r title='33 = 0x21'>33.6</td> <td>PhotoInfoPlayback</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Off <br>0x4 = On</span></td></tr> <tr> <td class=r title='33 = 0x21'>33.7</td> <td>NoMemoryCard</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = Release Locked <br>0x2 = Enable Release</span></td></tr> <tr class=b> <td class=r title='33 = 0x21'>33.8</td> <td>ReleaseButtonToUseDial</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = No <br>0x1 = Yes</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='SettingsD800'>NikonCustom SettingsD800 Tags</a></h2> <p>Custom settings for the D800 and D800E.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='12 = 0xc'>12.1</td> <td>AutoBracketingSet</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x0 = AE &amp; Flash <br>0x20 = AE Only <br>0x40 = Flash Only <br>0x60 = WB Bracketing <br>0x80 = Active D-Lighting</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12.2</td> <td>AutoBracketOrder</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = 0,-,+ <br>0x10 = -,0,+</span></td></tr> <tr> <td class=r title='12 = 0xc'>12.3</td> <td>AutoBracketingMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0c] <br>0x0 = Flash/Speed <br>0x4 = Flash/Speed/Aperture <br>0x8 = Flash/Aperture <br>0xc = Flash Only</span></td></tr> <tr class=b> <td class=r title='22 = 0x16'>22.1</td> <td>FlashSyncSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span><table class=cols><tr> <td>0x0 = 1/320 s (auto FP) <br>0x10 = 1/250 s (auto FP) <br>0x20 = 1/250 s <br>0x30 = 1/200 s <br>0x40 = 1/160 s <br>0x50 = 1/125 s <br>0x60 = 1/100 s <br>0x70 = 1/80 s <br>0x80 = 1/60 s</td></tr></table> </td></tr> <tr> <td class=r title='22 = 0x16'>22.2</td> <td>FlashShutterSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>0x0 = 1/60 s <br>0x1 = 1/30 s <br>0x2 = 1/15 s <br>0x3 = 1/8 s <br>0x4 = 1/4 s <br>0x5 = 1/2 s</td><td>&nbsp;&nbsp;</td> <td>0x6 = 1 s <br>0x7 = 2 s <br>0x8 = 4 s <br>0x9 = 8 s <br>0xa = 15 s <br>0xb = 30 s</td></tr></table> </td></tr> <tr class=b> <td class=r title='23 = 0x17'>23.1</td> <td>FlashControlBuilt-in</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = TTL <br>0x40 = Manual <br>0x80 = Repeating Flash <br>0xc0 = Commander Mode</span></td></tr> <tr> <td class=r title='23 = 0x17'>23.2</td> <td>ManualFlashOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='24 = 0x18'>24.1</td> <td>RepeatingFlashOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x70]</span></td></tr> <tr> <td class=r title='24 = 0x18'>24.2</td> <td>RepeatingFlashCount</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='25 = 0x19'>25.1</td> <td>RepeatingFlashRate</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span></td></tr> <tr> <td class=r title='25 = 0x19'>25.2</td> <td>CommanderChannel</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03]</span></td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27.1</td> <td>CommanderInternalFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = TTL <br>0x40 = Manual <br>0x80 = Off</span></td></tr> <tr> <td class=r title='27 = 0x1b'>27.2</td> <td>CommanderInternalManualOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28.1</td> <td>CommanderGroupAMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = TTL <br>0x40 = Auto Aperture <br>0x80 = Manual <br>0xc0 = Off</span></td></tr> <tr> <td class=r title='28 = 0x1c'>28.2</td> <td>CommanderGroupAManualOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29.1</td> <td>CommanderGroupBMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = TTL <br>0x40 = Auto Aperture <br>0x80 = Manual <br>0xc0 = Off</span></td></tr> <tr> <td class=r title='29 = 0x1d'>29.2</td> <td>CommanderGroupBManualOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30.1</td> <td>ModelingFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = On <br>0x20 = Off</span></td></tr> <tr> <td class=r title='30 = 0x1e'>30.2</td> <td>CommanderInternalTTLComp</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='31 = 0x1f'>31.1</td> <td>CommanderGroupA_TTL-AAComp</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr> <td class=r title='32 = 0x20'>32.1</td> <td>CommanderGroupB_TTL-AAComp</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='SettingsD810'>NikonCustom SettingsD810 Tags</a></h2> <p>Custom settings for the D810</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0.1</td> <td>LightSwitch</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = LCD Backlight <br>0x8 = LCD Backlight and Shooting Information</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.2</td> <td>CustomSettingsBank</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = A <br>0x1 = B <br>0x2 = C <br>0x3 = D</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.1</td> <td>AF-CPrioritySelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Release <br>0x40 = Release + Focus <br>0x80 = Focus</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.2</td> <td>AF-SPrioritySelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Focus <br>0x20 = Release</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.3</td> <td>AFPointSelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = 51 Points <br>0x10 = 11 Points</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.4</td> <td>FocusTrackingLockOn</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = Off <br>0x1 = 1 (Short) <br>0x2 = 2</td><td>&nbsp;&nbsp;</td> <td>0x3 = 3 (Normal) <br>0x4 = 4 <br>0x5 = 5 (Long)</td></tr></table> </td></tr> <tr> <td class=r title='2 = 0x2'>2.1</td> <td>AFActivation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Shutter/AF-On <br>0x80 = AF-On Only</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.2</td> <td>FocusPointWrap</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = No Wrap <br>0x8 = Wrap</span></td></tr> <tr> <td class=r title='2 = 0x2'>2.3</td> <td>AFPointBrightness</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x06] <br>0x0 = Auto <br>0x2 = On <br>0x4 = Off</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.4</td> <td>AFAssist</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = On <br>0x1 = Off</span></td></tr> <tr> <td class=r title='3 = 0x3'>3.1</td> <td>BatteryOrder</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = MB-D12 First <br>0x40 = Camera Battery First</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3.2</td> <td>MB-D12BatteryType</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = LR6 (AA alkaline) <br>0x1 = HR6 (AA Ni-MH) <br>0x2 = FR6 (AA lithium)</span></td></tr> <tr> <td class=r title='4 = 0x4'>4.1</td> <td>Pitch</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = High <br>0x40 = Low</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.2</td> <td>NoMemoryCard</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Release Locked <br>0x20 = Enable Release</span></td></tr> <tr> <td class=r title='4 = 0x4'>4.3</td> <td>ISODisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0c] <br>0x0 = Show ISO/Easy ISO <br>0x4 = Show ISO Sensitivity <br>0xc = Show Frame Count</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.4</td> <td>GridDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = On <br>0x2 = Off</span></td></tr> <tr> <td class=r title='5 = 0x5'>5.1</td> <td>ShootingInfoDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Not Set <br>0x40 = Auto <br>0x80 = Manual (dark on light) <br>0xc0 = Manual (light on dark)</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5.2</td> <td>LCDIllumination</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Off <br>0x20 = On</span></td></tr> <tr> <td class=r title='5 = 0x5'>5.3</td> <td>ElectronicFront-CurtainShutter</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = Off <br>0x8 = On</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5.4</td> <td>ScreenTips</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Off <br>0x4 = On</span></td></tr> <tr> <td class=r title='5 = 0x5'>5.5</td> <td>Beep</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = Off <br>0x1 = Low <br>0x2 = Medium <br>0x3 = High</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6.1</td> <td>ReverseIndicators</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = + 0 - <br>0x80 = - 0 +</span></td></tr> <tr> <td class=r title='6 = 0x6'>6.2</td> <td>CommandDialsReverseRotation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x18] <br>0x0 = No <br>0x8 = Shutter Speed &amp; Aperture <br>0x10 = Exposure Compensation <br>0x18 = Exposure Compensation, Shutter Speed &amp; Aperture</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6.3</td> <td>EasyExposureCompensation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = Off <br>0x1 = On <br>0x2 = On (auto reset)</span></td></tr> <tr> <td class=r title='7 = 0x7'>7.1</td> <td>ExposureControlStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = 1/3 EV <br>0x40 = 1/2 EV <br>0x80 = 1 EV</span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7.2</td> <td>ISOStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = 1/3 EV <br>0x10 = 1/2 EV <br>0x20 = 1 EV</span></td></tr> <tr> <td class=r title='7 = 0x7'>7.3</td> <td>ExposureCompStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0c] <br>0x0 = 1/3 EV <br>0x4 = 1/2 EV <br>0x8 = 1 EV</span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8.1</td> <td>CenterWeightedAreaSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x0 = 8 mm <br>0x20 = 12 mm <br>0x40 = 15 mm <br>0x60 = 20 mm <br>0x80 = Average</span></td></tr> <tr> <td class=r title='8 = 0x8'>8.2</td> <td>FineTuneOptMatrixMetering</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9.1</td> <td>FineTuneOptCenterWeighted</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span></td></tr> <tr> <td class=r title='9 = 0x9'>9.2</td> <td>FineTuneOptSpotMetering</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10.1</td> <td>MultiSelectorShootMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Select Center Focus Point (Reset) <br>0x40 = Highlight Active Focus Point <br>0x80 = Preset Focus Point (Pre) <br>0xc0 = Not Used (None)</span></td></tr> <tr> <td class=r title='10 = 0xa'>10.2</td> <td>MultiSelectorPlaybackMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = Thumbnail On/Off <br>0x10 = View Histograms <br>0x20 = Zoom On/Off <br>0x30 = Choose Folder</span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10.3</td> <td>MultiSelector</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = Do Nothing <br>0x1 = Reset Meter-off Delay</span></td></tr> <tr> <td class=r title='11 = 0xb'>11.1</td> <td>ExposureDelayMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Off <br>0x40 = 1 s <br>0x80 = 2 s <br>0xc0 = 3 s</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11.2</td> <td>CLModeShootingSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr> <td class=r title='12 = 0xc'>12.1</td> <td>MaxContinuousRelease</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13.1</td> <td>AutoBracketSet</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x0 = AE &amp; Flash <br>0x20 = AE Only <br>0x40 = Flash Only <br>0x60 = WB Bracketing <br>0x80 = Active D-Lighting</span></td></tr> <tr> <td class=r title='13 = 0xd'>13.2</td> <td>AutoBracketOrder</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = 0,-,+ <br>0x10 = -,0,+</span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13.3</td> <td>AutoBracketModeM</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0c] <br>0x0 = Flash/Speed <br>0x4 = Flash/Speed/Aperture <br>0x8 = Flash/Aperture <br>0xc = Flash Only</span></td></tr> <tr> <td class=r title='14 = 0xe'>14.1</td> <td>FuncButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span><table class=cols><tr> <td>0x0 = None <br>0x1 = Preview <br>0x2 = FV Lock <br>0x3 = AE/AF Lock <br>0x4 = AE Lock Only <br>0x5 = AE Lock (reset on release) <br>0x6 = AE Lock (hold) <br>0x7 = AF Lock Only <br>0x8 = AF-On <br>0xa = Bracketing Burst <br>0xb = Matrix Metering <br>0xc = Center-weighted Metering <br>0xd = Spot Metering <br>0xe = Playback <br>0xf = My Menu Top Item <br>0x10 = +NEF(RAW) <br>0x11 = Virtual Horizon <br>0x13 = Grid Display <br>0x14 = My Menu <br>0x15 = Disable Synchronized Release <br>0x16 = Remote Release Only <br>0x1a = Flash Disable/Enable <br>0x1b = Highlight-weighted Metering</td></tr></table> </td></tr> <tr class=b> <td class=r title='15 = 0xf'>15.1</td> <td>PreviewButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span><table class=cols><tr> <td>0x0 = None <br>0x1 = Preview <br>0x2 = FV Lock <br>0x3 = AE/AF Lock <br>0x4 = AE Lock Only <br>0x5 = AE Lock (reset on release) <br>0x6 = AE Lock (hold) <br>0x7 = AF Lock Only <br>0x8 = AF-On <br>0xa = Bracketing Burst <br>0xb = Matrix Metering <br>0xc = Center-weighted Metering <br>0xd = Spot Metering <br>0xe = Playback <br>0xf = My Menu Top Item <br>0x10 = +NEF(RAW) <br>0x11 = Virtual Horizon <br>0x13 = Grid Display <br>0x14 = My Menu <br>0x15 = Disable Synchronized Release <br>0x16 = Remote Release Only <br>0x1a = Flash Disable/Enable <br>0x1b = Highlight-weighted Metering</td></tr></table> </td></tr> <tr> <td class=r title='16 = 0x10'>16.1</td> <td>AssignBktButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07] <br>0x0 = Auto Bracketing <br>0x1 = Multiple Exposure <br>0x2 = HDR (high dynamic range) <br>0x3 = None</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17.1</td> <td>AELockButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span><table class=cols><tr> <td>0x0 = None <br>0x1 = Preview <br>0x2 = FV Lock <br>0x3 = AE/AF Lock <br>0x4 = AE Lock Only <br>0x5 = AE Lock (reset on release) <br>0x6 = AE Lock (hold) <br>0x7 = AF Lock Only <br>0x8 = AF-On <br>0xa = Bracketing Burst <br>0xb = Matrix Metering <br>0xc = Center-weighted Metering <br>0xd = Spot Metering <br>0xe = Playback <br>0xf = My Menu Top Item <br>0x10 = +NEF(RAW) <br>0x11 = Virtual Horizon <br>0x13 = Grid Display <br>0x14 = My Menu <br>0x15 = Disable Synchronized Release <br>0x16 = Remote Release Only <br>0x1a = Flash Disable/Enable <br>0x1b = Highlight-weighted Metering</td></tr></table> </td></tr> <tr> <td class=r title='18 = 0x12'>18.1</td> <td>CommandDialsChangeMainSub</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = Autofocus Off, Exposure Off <br>0x20 = Autofocus Off, Exposure On <br>0x40 = Autofocus Off, Exposure On (Mode A) <br>0x80 = Autofocus On, Exposure Off <br>0xa0 = Autofocus On, Exposure On <br>0xc0 = Autofocus On, Exposure On (Mode A)</td></tr></table> </td></tr> <tr class=b> <td class=r title='18 = 0x12'>18.2</td> <td>CommandDialsMenuAndPlayback</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x18] <br>0x0 = On <br>0x8 = Off <br>0x10 = On (Image Review Excluded)</span></td></tr> <tr> <td class=r title='18 = 0x12'>18.3</td> <td>CommandDialsApertureSetting</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Sub-command Dial <br>0x4 = Aperture Ring</span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18.4</td> <td>ShutterReleaseButtonAE-L</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = Off <br>0x2 = On</span></td></tr> <tr> <td class=r title='18 = 0x12'>18.5</td> <td>ReleaseButtonToUseDial</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = No <br>0x1 = Yes</span></td></tr> <tr class=b> <td class=r title='19 = 0x13'>19.1</td> <td>StandbyTimer</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x10 = 6 s <br>0x30 = 10 s <br>0x50 = 30 s</td><td>&nbsp;&nbsp;</td> <td>0x60 = 1 min <br>0x70 = 5 min <br>0x80 = 10 min <br>0x90 = 30 min</td></tr></table> </td></tr> <tr> <td class=r title='20 = 0x14'>20.1</td> <td>SelfTimerTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = 2 s <br>0x40 = 5 s <br>0x80 = 10 s <br>0xc0 = 20 s</span></td></tr> <tr class=b> <td class=r title='20 = 0x14'>20.2</td> <td>SelfTimerShotInterval</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = 0.5 s <br>0x10 = 1 s <br>0x20 = 2 s <br>0x30 = 3 s</span></td></tr> <tr> <td class=r title='20 = 0x14'>20.3</td> <td>SelfTimerShotCount</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='21 = 0x15'>21.1</td> <td>ImageReviewMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = 2 s <br>0x20 = 4 s <br>0x60 = 10 s <br>0x80 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0xa0 = 1 min <br>0xc0 = 5 min <br>0xe0 = 10 min</td></tr></table> </td></tr> <tr> <td class=r title='21 = 0x15'>21.2</td> <td>LiveViewMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c]</span><table class=cols><tr> <td>0x4 = 5 min <br>0x8 = 10 min <br>0xc = 15 min</td><td>&nbsp;&nbsp;</td> <td>0x10 = 20 min <br>0x14 = 30 min <br>0x18 = No Limit</td></tr></table> </td></tr> <tr class=b> <td class=r title='22 = 0x16'>22.1</td> <td>MenuMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x40 = 10 s <br>0x80 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0xa0 = 1 min <br>0xc0 = 5 min <br>0xe0 = 10 min</td></tr></table> </td></tr> <tr> <td class=r title='22 = 0x16'>22.2</td> <td>ShootingInfoMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x8 = 10 s <br>0x10 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x14 = 1 min <br>0x18 = 5 min <br>0x1c = 10 min</td></tr></table> </td></tr> <tr class=b> <td class=r title='23 = 0x17'>23.1</td> <td>FlashSyncSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span><table class=cols><tr> <td>0x0 = 1/320 s (auto FP) <br>0x20 = 1/250 s (auto FP) <br>0x30 = 1/250 s <br>0x50 = 1/200 s <br>0x60 = 1/160 s <br>0x70 = 1/125 s <br>0x80 = 1/100 s <br>0x90 = 1/80 s <br>0xa0 = 1/60 s</td></tr></table> </td></tr> <tr> <td class=r title='23 = 0x17'>23.2</td> <td>FlashShutterSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>0x0 = 1/60 s <br>0x1 = 1/30 s <br>0x2 = 1/15 s <br>0x3 = 1/8 s <br>0x4 = 1/4 s <br>0x5 = 1/2 s</td><td>&nbsp;&nbsp;</td> <td>0x6 = 1 s <br>0x7 = 2 s <br>0x8 = 4 s <br>0x9 = 8 s <br>0xa = 15 s <br>0xb = 30 s</td></tr></table> </td></tr> <tr class=b> <td class=r title='24 = 0x18'>24.1</td> <td>FlashControlBuilt-in</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = TTL <br>0x40 = Manual <br>0x80 = Repeating Flash <br>0xc0 = Commander Mode</span></td></tr> <tr> <td class=r title='31 = 0x1f'>31.1</td> <td>ModelingFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = On <br>0x20 = Off</span></td></tr> <tr class=b> <td class=r title='36 = 0x24'>36.1</td> <td>PlaybackMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x20 = 10 s <br>0x40 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x60 = 1 min <br>0x80 = 5 min <br>0xa0 = 10 min</td></tr></table> </td></tr> <tr> <td class=r title='37 = 0x25'>37.1</td> <td>MultiSelectorLiveView</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Reset <br>0x40 = Zoom <br>0xc0 = Not Used</span></td></tr> <tr class=b> <td class=r title='38 = 0x26'>38.1</td> <td>ShutterSpeedLock</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Off <br>0x80 = On</span></td></tr> <tr> <td class=r title='38 = 0x26'>38.2</td> <td>ApertureLock</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = Off <br>0x40 = On</span></td></tr> <tr class=b> <td class=r title='38 = 0x26'>38.3</td> <td>MovieShutterButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Take Photo <br>0x20 = Record Movies</span></td></tr> <tr> <td class=r title='38 = 0x26'>38.4</td> <td>FlashExposureCompArea</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Entire frame <br>0x4 = Background only</span></td></tr> <tr class=b> <td class=r title='40 = 0x28'>40.1</td> <td>MovieAELockButtonAssignment</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>0x0 = None <br>0x3 = Index Marking <br>0x4 = View Photo Shooting Info <br>0x5 = AE/AF Lock <br>0x6 = AE Lock Only <br>0x7 = AE Lock (hold) <br>0x8 = AF Lock Only</td></tr></table> </td></tr> <tr> <td class=r title='41 = 0x29'>41.1</td> <td>MovieFunctionButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x70] <br>0x0 = None <br>0x10 = Power Aperture (open) <br>0x30 = Index Marking <br>0x40 = View Photo Shooting Info</span></td></tr> <tr class=b> <td class=r title='41 = 0x29'>41.2</td> <td>MoviePreviewButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07] <br>0x0 = None <br>0x2 = Power Aperture (open) <br>0x3 = Index Marking <br>0x4 = View Photo Shooting Info</span></td></tr> <tr> <td class=r title='42 = 0x2a'>42.1</td> <td>FuncButtonPlusDials</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>0x0 = None <br>0x1 = Choose Image Area (FX/DX/5:4) <br>0x2 = Shutter Speed &amp; Aperture Lock <br>0x3 = One Step Speed / Aperture <br>0x4 = Choose Non-CPU Lens Number <br>0x5 = Active D-Lighting <br>0x8 = Exposure Delay Mode</td></tr></table> </td></tr> <tr class=b> <td class=r title='43 = 0x2b'>43.1</td> <td>PreviewButtonPlusDials</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>0x0 = None <br>0x1 = Choose Image Area (FX/DX/5:4) <br>0x2 = Shutter Speed &amp; Aperture Lock <br>0x3 = One Step Speed / Aperture <br>0x4 = Choose Non-CPU Lens Number <br>0x5 = Active D-Lighting <br>0x8 = Exposure Delay Mode</td></tr></table> </td></tr> <tr> <td class=r title='44 = 0x2c'>44.1</td> <td>AELockButtonPlusDials</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f] <br>0x0 = None <br>0x1 = Choose Image Area (FX/DX/5:4) <br>0x2 = Shutter Speed &amp; Aperture Lock <br>0x4 = Choose Non-CPU Lens Number <br>0x8 = Exposure Delay Mode</span></td></tr> <tr class=b> <td class=r title='45 = 0x2d'>45.1</td> <td>AssignMovieRecordButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f] <br>0x0 = None <br>0x1 = Choose Image Area (FX/DX/5:4) <br>0x2 = Shutter Speed &amp; Aperture Lock <br>0x9 = White Balance <br>0xa = ISO Sensitivity</span></td></tr> <tr> <td class=r title='46 = 0x2e'>46.1</td> <td>FineTuneOptHighlightWeighted</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='47 = 0x2f'>47.1</td> <td>DynamicAreaAFDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Off <br>0x80 = On</span></td></tr> <tr> <td class=r title='47 = 0x2f'>47.2</td> <td>AFPointIllumination</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = Off <br>0x40 = On During Manual Focusing</span></td></tr> <tr class=b> <td class=r title='47 = 0x2f'>47.3</td> <td>StoreByOrientation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x18] <br>0x0 = Off <br>0x8 = Focus Point <br>0x10 = Focus Point and AF-area mode</span></td></tr> <tr> <td class=r title='47 = 0x2f'>47.4</td> <td>GroupAreaAFIllumination</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Squares <br>0x4 = Dots</span></td></tr> <tr class=b> <td class=r title='48 = 0x30'>48.1</td> <td>MatrixMetering</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Face Detection On <br>0x80 = Face Detection Off</span></td></tr> <tr> <td class=r title='48 = 0x30'>48.2</td> <td>LiveViewButtonOptions</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = Enable <br>0x20 = Disable</span></td></tr> <tr class=b> <td class=r title='48 = 0x30'>48.3</td> <td>AFModeRestrictions</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = No Restrictions <br>0x1 = AF-C <br>0x2 = AF-S</span></td></tr> <tr> <td class=r title='49 = 0x31'>49.1</td> <td>LimitAFAreaModeSelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x7e]</span><table class=cols><tr> <td>0x0 = No Restrictions <br>Bit 1 = Auto-area <br>Bit 2 = Group-area <br>Bit 3 = 3D-tracking <br>Bit 4 = Dynamic area (51 points) <br>Bit 5 = Dynamic area (21 points) <br>Bit 6 = Dynamic area (9 points)</td></tr></table> </td></tr> <tr class=b> <td class=r title='50 = 0x32'>50.1</td> <td>AF-OnForMB-D12</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = AE/AF Lock <br>0x1 = AE Lock Only <br>0x2 = AF Lock Only <br>0x3 = AE Lock (hold)</td><td>&nbsp;&nbsp;</td> <td>0x4 = AE Lock (reset) <br>0x5 = AF-On <br>0x6 = FV Lock <br>0x7 = Same As Fn Button</td></tr></table> </td></tr> <tr> <td class=r title='51 = 0x33'>51.1</td> <td>AssignRemoteFnButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span><table class=cols><tr> <td>0x0 = None <br>0x1 = Preview <br>0x2 = FV Lock <br>0x3 = AE/AF Lock <br>0x4 = AE Lock Only <br>0x5 = AE Lock (reset on release) <br>0x7 = AF Lock Only <br>0x8 = AF-On <br>0x10 = +NEF(RAW) <br>0x19 = Live View <br>0x1a = Flash Disable/Enable</td></tr></table> </td></tr> <tr class=b> <td class=r title='52 = 0x34'>52.1</td> <td>LensFocusFunctionButtons</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x3f]</span><table class=cols><tr> <td>0x3 = AE/AF Lock <br>0x4 = AE Lock Only <br>0x7 = AF Lock Only <br>0x15 = Disable Synchronized Release <br>0x16 = Remote Release Only <br>0x18 = Preset focus Point <br>0x1a = Flash Disable/Enable <br>0x20 = AF-Area Mode: Single-point AF <br>0x21 = AF-Area Mode: Dynamic-area AF (9 points) <br>0x22 = AF-Area Mode: Dynamic-area AF (21 points) <br>0x23 = AF-Area Mode: Dynamic-area AF (51 points) <br>0x24 = AF-Area Mode: Group-area AF <br>0x25 = AF-Area Mode: Auto area AF</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='SettingsD5000'>NikonCustom SettingsD5000 Tags</a></h2> <p>Custom settings for the D5000.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0.1</td> <td>AFAreaModeSetting</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x60] <br>0x0 = Single Area <br>0x20 = Dynamic Area <br>0x40 = Auto-area <br>0x60 = 3D-tracking (11 points)</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.2</td> <td>AFAssist</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = On <br>0x1 = Off</span></td></tr> <tr> <td class=r title='2 = 0x2'>2.1</td> <td>Beep</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Off <br>0x40 = Low <br>0x80 = High</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.2</td> <td>GridDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = On <br>0x2 = Off</span></td></tr> <tr> <td class=r title='2 = 0x2'>2.3</td> <td>ISODisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = On <br>0x8 = Off</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.4</td> <td>NoMemoryCard</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Release Locked <br>0x20 = Enable Release</span></td></tr> <tr> <td class=r title='3 = 0x3'>3.1</td> <td>FileNumberSequence</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = On <br>0x8 = Off</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.1</td> <td>RangeFinder</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = Off <br>0x10 = On</span></td></tr> <tr> <td class=r title='4 = 0x4'>4.2</td> <td>DateImprint</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = Off <br>0x8 = On</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.3</td> <td>ReverseIndicators</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = + 0 - <br>0x80 = - 0 +</span></td></tr> <tr> <td class=r title='5 = 0x5'>5.1</td> <td>EVStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = 1/3 EV <br>0x40 = 1/2 EV</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9.1</td> <td>ExposureDelayMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = Off <br>0x40 = On</span></td></tr> <tr> <td class=r title='11 = 0xb'>11.1</td> <td>AutoBracketSet</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Exposure <br>0x40 = Active D-Lighting <br>0x80 = WB Bracketing</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12.1</td> <td>TimerFunctionButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x38]</span><table class=cols><tr> <td>0x0 = Self-timer <br>0x8 = Release Mode <br>0x10 = Image Quality/Size <br>0x18 = ISO <br>0x20 = White Balance <br>0x28 = Active D-Lighting <br>0x30 = + NEF (RAW) <br>0x38 = Auto Bracketing</td></tr></table> </td></tr> <tr> <td class=r title='15 = 0xf'>15.1</td> <td>AELockButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x38] <br>0x0 = AE/AF Lock <br>0x8 = AE Lock Only <br>0x10 = AF Lock Only <br>0x18 = AE Lock (hold) <br>0x20 = AF-ON</span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16.1</td> <td>ShutterReleaseButtonAE-L</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = Off <br>0x2 = On</span></td></tr> <tr> <td class=r title='16 = 0x10'>16.2</td> <td>CommandDialsReverseRotation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = No <br>0x80 = Yes</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17.1</td> <td>MeteringTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x70] <br>0x0 = 4 s <br>0x10 = 8 s <br>0x20 = 20 s <br>0x30 = 1 min <br>0x40 = 30 min</span></td></tr> <tr> <td class=r title='17 = 0x11'>17.2</td> <td>RemoteOnDuration</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = 1 min <br>0x1 = 5 min <br>0x2 = 10 min <br>0x3 = 15 min</span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18.1</td> <td>SelfTimerTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = 2 s <br>0x40 = 5 s <br>0x80 = 10 s <br>0xc0 = 20 s</span></td></tr> <tr> <td class=r title='18 = 0x12'>18.2</td> <td>SelfTimerShotCount</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1e]</span></td></tr> <tr class=b> <td class=r title='19 = 0x13'>19.1</td> <td>ImageReviewTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x0 = 4 s <br>0x20 = 8 s <br>0x40 = 20 s <br>0x60 = 1 min <br>0x80 = 10 min</span></td></tr> <tr> <td class=r title='20 = 0x14'>20.1</td> <td>PlaybackMenusTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x0 = 8 s <br>0x20 = 12 s <br>0x40 = 20 s <br>0x60 = 1 min <br>0x80 = 10 min</span></td></tr> <tr class=b> <td class=r title='22 = 0x16'>22.1</td> <td>InternalFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = TTL <br>0x40 = Manual</span></td></tr> <tr> <td class=r title='22 = 0x16'>22.2</td> <td>ManualFlashOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='32 = 0x20'>32.1</td> <td>LiveViewAF</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x60] <br>0x0 = Face Priority <br>0x20 = Wide Area <br>0x40 = Normal Area <br>0x60 = Subject Tracking</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='SettingsD5100'>NikonCustom SettingsD5100 Tags</a></h2> <p>Custom settings for the D5100.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0.1</td> <td>AF-CPrioritySelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Release <br>0x80 = Focus</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.1</td> <td>AFAssist</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = On <br>0x1 = Off</span></td></tr> <tr> <td class=r title='3 = 0x3'>3.1</td> <td>Beep</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Off <br>0x40 = Low <br>0x80 = High</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3.2</td> <td>NoMemoryCard</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Release Locked <br>0x20 = Enable Release</span></td></tr> <tr> <td class=r title='3 = 0x3'>3.3</td> <td>ISODisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = On <br>0x8 = Off</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.1</td> <td>FileNumberSequence</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = On <br>0x8 = Off</span></td></tr> <tr> <td class=r title='5 = 0x5'>5.1</td> <td>RangeFinder</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = Off <br>0x10 = On</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5.2</td> <td>ReverseIndicators</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = + 0 - <br>0x80 = - 0 +</span></td></tr> <tr> <td class=r title='6 = 0x6'>6.1</td> <td>EVStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = 1/3 EV <br>0x40 = 1/2 EV</span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10.1</td> <td>ExposureDelayMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = Off <br>0x40 = On</span></td></tr> <tr> <td class=r title='12 = 0xc'>12.1</td> <td>AutoBracketSet</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Exposure <br>0x40 = WB Bracketing <br>0x80 = Active D-Lighting</span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13.1</td> <td>TimerFunctionButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x38]</span><table class=cols><tr> <td>0x0 = Self-timer <br>0x8 = Release Mode <br>0x10 = Image Quality/Size <br>0x18 = ISO <br>0x20 = White Balance <br>0x28 = Active D-Lighting <br>0x30 = + NEF (RAW) <br>0x38 = Auto Bracketing</td></tr></table> </td></tr> <tr> <td class=r title='16 = 0x10'>16.1</td> <td>AELockButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x38] <br>0x0 = AE/AF Lock <br>0x8 = AE Lock Only <br>0x10 = AF Lock Only <br>0x18 = AE Lock (hold) <br>0x20 = AF-ON</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17.1</td> <td>ShutterReleaseButtonAE-L</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = Off <br>0x2 = On</span></td></tr> <tr> <td class=r title='17 = 0x11'>17.2</td> <td>CommandDialsReverseRotation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = No <br>0x80 = Yes</span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18.1</td> <td>MeteringTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x70] <br>0x0 = 4 s <br>0x10 = 8 s <br>0x20 = 20 s <br>0x30 = 1 min <br>0x40 = 30 min</span></td></tr> <tr> <td class=r title='18 = 0x12'>18.2</td> <td>RemoteOnDuration</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = 1 min <br>0x1 = 5 min <br>0x2 = 10 min <br>0x3 = 20 min</span></td></tr> <tr class=b> <td class=r title='19 = 0x13'>19.1</td> <td>SelfTimerTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = 2 s <br>0x40 = 5 s <br>0x80 = 10 s <br>0xc0 = 20 s</span></td></tr> <tr> <td class=r title='19 = 0x13'>19.2</td> <td>SelfTimerShotCount</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='20 = 0x14'>20.1</td> <td>ImageReviewTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x0 = 4 s <br>0x20 = 8 s <br>0x40 = 20 s <br>0x60 = 1 min <br>0x80 = 10 min</span></td></tr> <tr> <td class=r title='20 = 0x14'>20.2</td> <td>LiveViewMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c]</span><table class=cols><tr> <td>0x0 = 3 min <br>0x4 = 5 min <br>0x8 = 10 min</td><td>&nbsp;&nbsp;</td> <td>0xc = 15 min <br>0x10 = 20 min <br>0x14 = 30 min</td></tr></table> </td></tr> <tr class=b> <td class=r title='21 = 0x15'>21.1</td> <td>PlaybackMenusTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x0 = 8 s <br>0x20 = 12 s <br>0x40 = 20 s <br>0x60 = 1 min <br>0x80 = 10 min</span></td></tr> <tr> <td class=r title='23 = 0x17'>23.1</td> <td>ManualFlashOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='SettingsD5200'>NikonCustom SettingsD5200 Tags</a></h2> <p>Custom settings for the D5200.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0.1</td> <td>AF-CPrioritySelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Release <br>0x80 = Focus</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.2</td> <td>NumberOfFocusPoints</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = 39 Points <br>0x10 = 11 Points</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.1</td> <td>AFAssist</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = On <br>0x1 = Off</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3.1</td> <td>Beep</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Off <br>0x40 = Low <br>0x80 = High</span></td></tr> <tr> <td class=r title='3 = 0x3'>3.2</td> <td>NoMemoryCard</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Release Locked <br>0x20 = Enable Release</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3.3</td> <td>ISODisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = On <br>0x8 = Off</span></td></tr> <tr> <td class=r title='4 = 0x4'>4.1</td> <td>FileNumberSequence</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = On <br>0x8 = Off</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5.1</td> <td>RangeFinder</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Off <br>0x4 = On</span></td></tr> <tr> <td class=r title='5 = 0x5'>5.2</td> <td>ReverseExposureCompDial</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = No <br>0x10 = Yes</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5.3</td> <td>ReverseShutterSpeedAperture</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = No <br>0x8 = Yes</span></td></tr> <tr> <td class=r title='5 = 0x5'>5.4</td> <td>ReverseIndicators</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = + 0 - <br>0x80 = - 0 +</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6.1</td> <td>EVStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = 1/3 EV <br>0x40 = 1/2 EV</span></td></tr> <tr> <td class=r title='10 = 0xa'>10.1</td> <td>ExposureDelayMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = Off <br>0x40 = On</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12.1</td> <td>AutoBracketSet</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Exposure <br>0x40 = WB Bracketing <br>0x80 = Active D-Lighting</span></td></tr> <tr> <td class=r title='13 = 0xd'>13.1</td> <td>FunctionButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span><table class=cols><tr> <td>0x3 = AE/AF Lock <br>0x4 = AE Lock Only <br>0x6 = AE Lock (hold) <br>0x7 = AF Lock Only <br>0x8 = AF-ON <br>0x10 = + NEF (RAW) <br>0x12 = Active D-Lighting <br>0x19 = Live View <br>0x1a = Image Quality <br>0x1b = ISO <br>0x1c = White Balance <br>0x1d = HDR <br>0x1e = Auto Bracketing <br>0x1f = AF-area Mode</td></tr></table> </td></tr> <tr class=b> <td class=r title='16 = 0x10'>16.1</td> <td>AELockButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f] <br>0x3 = AE/AF Lock <br>0x4 = AE Lock Only <br>0x6 = AE Lock (hold) <br>0x7 = AF Lock Only <br>0x8 = AF-ON</span></td></tr> <tr> <td class=r title='17 = 0x11'>17.1</td> <td>ShutterReleaseButtonAE-L</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = Off <br>0x2 = On</span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18.1</td> <td>StandbyTimer</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x0 = 4 s <br>0x20 = 8 s <br>0x40 = 20 s <br>0x60 = 1 min <br>0x80 = 30 min</span></td></tr> <tr> <td class=r title='18 = 0x12'>18.2</td> <td>RemoteOnDuration</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = 1 min <br>0x1 = 5 min <br>0x2 = 10 min <br>0x3 = 15 min</span></td></tr> <tr class=b> <td class=r title='19 = 0x13'>19.1</td> <td>SelfTimerTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = 2 s <br>0x40 = 5 s <br>0x80 = 10 s <br>0xc0 = 20 s</span></td></tr> <tr> <td class=r title='19 = 0x13'>19.2</td> <td>SelfTimerShotCount</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='20 = 0x14'>20.1</td> <td>ImageReviewTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x20 = 4 s <br>0x40 = 8 s <br>0x80 = 20 s <br>0xa0 = 1 min <br>0xe0 = 10 min</span></td></tr> <tr> <td class=r title='20 = 0x14'>20.2</td> <td>LiveViewMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c] <br>0x4 = 5 min <br>0x8 = 10 min <br>0xc = 15 min <br>0x10 = 20 min <br>0x14 = 30 min</span></td></tr> <tr class=b> <td class=r title='21 = 0x15'>21.1</td> <td>PlaybackMenusTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x20 = 8 s <br>0x80 = 20 s <br>0xa0 = 1 min <br>0xc0 = 5 min <br>0xe0 = 10 min</span></td></tr> <tr> <td class=r title='23 = 0x17'>23.1</td> <td>InternalFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = TTL <br>0x40 = Manual</span></td></tr> <tr class=b> <td class=r title='23 = 0x17'>23.2</td> <td>ManualFlashOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='SettingsD7000'>NikonCustom SettingsD7000 Tags</a></h2> <p>Custom settings for the D7000.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0.1</td> <td>AF-CPrioritySelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Release <br>0x80 = Focus</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.2</td> <td>AF-SPrioritySelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Focus <br>0x20 = Release</span></td></tr> <tr> <td class=r title='0 = 0x0'>0.3</td> <td>NumberOfFocusPoints</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = 39 Points <br>0x10 = 11 Points</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.4</td> <td>FocusTrackingLockOn</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = Off <br>0x1 = 1 Short <br>0x2 = 2</td><td>&nbsp;&nbsp;</td> <td>0x3 = 3 Normal <br>0x4 = 4 <br>0x5 = 5 Long</td></tr></table> </td></tr> <tr> <td class=r title='1 = 0x1'>1.2</td> <td>FocusPointWrap</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = No Wrap <br>0x8 = Wrap</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.3</td> <td>AFPointIllumination</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x06] <br>0x0 = Auto <br>0x2 = On <br>0x4 = Off</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.4</td> <td>AFAssist</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = On <br>0x1 = Off</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.1</td> <td>BatteryOrder</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = MB-D11 First <br>0x40 = Camera Battery First</span></td></tr> <tr> <td class=r title='2 = 0x2'>2.2</td> <td>AF-OnForMB-D11</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c]</span><table class=cols><tr> <td>0x0 = AE/AF Lock <br>0x4 = AE Lock Only <br>0x8 = AF Lock Only <br>0xc = AE Lock (hold) <br>0x10 = AF-ON <br>0x14 = FV Lock <br>0x18 = Same as FUNC Button</td></tr></table> </td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.3</td> <td>MB-D11BatteryType</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = LR6 (AA alkaline) <br>0x1 = Ni-MH (AA Ni-MH) <br>0x2 = FR6 (AA lithium)</span></td></tr> <tr> <td class=r title='3 = 0x3'>3.1</td> <td>BeepPitch</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Off <br>0x40 = Low <br>0x80 = High</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3.2</td> <td>NoMemoryCard</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Release Locked <br>0x20 = Enable Release</span></td></tr> <tr> <td class=r title='3 = 0x3'>3.3</td> <td>ISODisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0c] <br>0x0 = Show ISO/Easy ISO <br>0x4 = Show ISO Sensitivity <br>0xc = Show Frame Count</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3.4</td> <td>GridDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = On <br>0x2 = Off</span></td></tr> <tr> <td class=r title='3 = 0x3'>3.5</td> <td>ViewfinderWarning</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = On <br>0x1 = Off</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.1</td> <td>ShootingInfoDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Auto <br>0x80 = Manual (dark on light) <br>0xc0 = Manual (light on dark)</span></td></tr> <tr> <td class=r title='4 = 0x4'>4.2</td> <td>LCDIllumination</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Off <br>0x20 = On</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.3</td> <td>FileNumberSequence</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = On <br>0x8 = Off</span></td></tr> <tr> <td class=r title='4 = 0x4'>4.4</td> <td>ScreenTips</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Off <br>0x4 = On</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.5</td> <td>BeepVolume</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = Off <br>0x1 = 1 <br>0x2 = 2 <br>0x3 = 3</span></td></tr> <tr> <td class=r title='5 = 0x5'>5.1</td> <td>ReverseIndicators</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = + 0 - <br>0x80 = - 0 +</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5.2</td> <td>EasyExposureCompensation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = Off <br>0x1 = On <br>0x2 = On Auto Reset</span></td></tr> <tr> <td class=r title='6 = 0x6'>6.1</td> <td>ExposureControlStep</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = 1/3 EV <br>0x40 = 1/2 EV</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6.2</td> <td>ISOSensitivityStep</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = 1/3 EV <br>0x10 = 1/2 EV</span></td></tr> <tr> <td class=r title='7 = 0x7'>7.1</td> <td>CenterWeightedAreaSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x0 = 6 mm <br>0x20 = 8 mm <br>0x40 = 10 mm <br>0x60 = 13 mm <br>0x80 = Average</span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10.1</td> <td>ExposureDelayMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = Off <br>0x40 = On</span></td></tr> <tr> <td class=r title='10 = 0xa'>10.2</td> <td>CLModeShootingSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>MaxContinuousRelease</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12.1</td> <td>AutoBracketSet</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x0 = AE &amp; Flash <br>0x20 = AE Only <br>0x40 = Flash Only <br>0x60 = WB Bracketing <br>0x80 = Active D-Lighting</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12.2</td> <td>AutoBracketOrder</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = 0,-,+ <br>0x10 = -,0,+</span></td></tr> <tr> <td class=r title='13 = 0xd'>13.1</td> <td>FuncButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf8]</span><table class=cols><tr> <td>0x0 = Grid Display <br>0x8 = FV Lock <br>0x10 = Flash Off <br>0x18 = Matrix Metering <br>0x20 = Center-weighted Metering <br>0x28 = Spot Metering <br>0x30 = My Menu Top <br>0x38 = + NEF (RAW) <br>0x40 = Active D-Lighting <br>0x48 = Preview <br>0x50 = AE/AF Lock <br>0x58 = AE Lock Only <br>0x60 = AF Lock Only <br>0x68 = AE Lock (hold) <br>0x70 = Bracketing Burst <br>0x78 = Playback <br>0x80 = 1EV Step Speed/Aperture <br>0x88 = Choose Non-CPU Lens <br>0x90 = Virtual Horizon <br>0x98 = Start Movie Recording</td></tr></table> </td></tr> <tr class=b> <td class=r title='14 = 0xe'>14.1</td> <td>PreviewButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf8]</span><table class=cols><tr> <td>0x0 = Grid Display <br>0x8 = FV Lock <br>0x10 = Flash Off <br>0x18 = Matrix Metering <br>0x20 = Center-weighted Metering <br>0x28 = Spot Metering <br>0x30 = My Menu Top <br>0x38 = + NEF (RAW) <br>0x40 = Active D-Lighting <br>0x48 = Preview <br>0x50 = AE/AF Lock <br>0x58 = AE Lock Only <br>0x60 = AF Lock Only <br>0x68 = AE Lock (hold) <br>0x70 = Bracketing Burst <br>0x78 = Playback <br>0x80 = 1EV Step Speed/Aperture <br>0x88 = Choose Non-CPU Lens <br>0x90 = Virtual Horizon <br>0x98 = Start Movie Recording</td></tr></table> </td></tr> <tr> <td class=r title='15 = 0xf'>15.1</td> <td>OKButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x18] <br>0x0 = Off <br>0x8 = Select Center Focus Point <br>0x10 = Highlight Active Focus Point <br>0x18 = Not Used</span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16.1</td> <td>AELockButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x38]</span><table class=cols><tr> <td>0x0 = AE/AF Lock <br>0x8 = AE Lock Only <br>0x10 = AF Lock Only</td><td>&nbsp;&nbsp;</td> <td>0x18 = AE Lock (hold) <br>0x20 = AF-ON <br>0x28 = FV Lock</td></tr></table> </td></tr> <tr> <td class=r title='17 = 0x11'>17.1</td> <td>CommandDialsReverseRotation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = No <br>0x80 = Yes</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17.2</td> <td>CommandDialsChangeMainSub</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x60] <br>0x0 = Off <br>0x20 = On <br>0x40 = On (A mode only)</span></td></tr> <tr> <td class=r title='17 = 0x11'>17.3</td> <td>CommandDialsApertureSetting</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Sub-command Dial <br>0x4 = Aperture Ring</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17.4</td> <td>CommandDialsMenuAndPlayback</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x18] <br>0x0 = On <br>0x8 = Off <br>0x10 = On (Image Review Exclude)</span></td></tr> <tr> <td class=r title='17 = 0x11'>17.5</td> <td>ShutterReleaseButtonAE-L</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = Off <br>0x2 = On</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17.6</td> <td>ReleaseButtonToUseDial</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = No <br>0x1 = Yes</span></td></tr> <tr> <td class=r title='18 = 0x12'>18.1</td> <td>MeteringTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x10 = 6 s <br>0x20 = 8 s <br>0x30 = 16 s <br>0x40 = 30 s</td><td>&nbsp;&nbsp;</td> <td>0x50 = 1 min <br>0x60 = 5 min <br>0x70 = 10 min <br>0x80 = 30 min <br>0x90 = No Limit</td></tr></table> </td></tr> <tr class=b> <td class=r title='18 = 0x12'>18.2</td> <td>RemoteOnDuration</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = 1 min <br>0x1 = 5 min <br>0x2 = 10 min <br>0x3 = 15 min</span></td></tr> <tr> <td class=r title='19 = 0x13'>19.1</td> <td>SelfTimerTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = 2 s <br>0x40 = 5 s <br>0x80 = 10 s <br>0xc0 = 20 s</span></td></tr> <tr class=b> <td class=r title='19 = 0x13'>19.2</td> <td>SelfTimerInterval</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = 0.5 s <br>0x10 = 1 s <br>0x20 = 2 s <br>0x30 = 3 s</span></td></tr> <tr> <td class=r title='19 = 0x13'>19.3</td> <td>SelfTimerShotCount</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='20 = 0x14'>20.1</td> <td>ImageReviewTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x20 = 10 s <br>0x40 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x60 = 1 min <br>0x80 = 5 min <br>0xa0 = 10 min</td></tr></table> </td></tr> <tr> <td class=r title='20 = 0x14'>20.2</td> <td>LiveViewMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x4 = 10 s <br>0x8 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0xc = 1 min <br>0x10 = 5 min <br>0x14 = 10 min</td></tr></table> </td></tr> <tr class=b> <td class=r title='21 = 0x15'>21.1</td> <td>MenuMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x20 = 10 s <br>0x40 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x60 = 1 min <br>0x80 = 5 min <br>0xa0 = 10 min</td></tr></table> </td></tr> <tr> <td class=r title='21 = 0x15'>21.2</td> <td>ShootingInfoMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x4 = 10 s <br>0x8 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0xc = 1 min <br>0x10 = 5 min <br>0x14 = 10 min</td></tr></table> </td></tr> <tr class=b> <td class=r title='22 = 0x16'>22.1</td> <td>FlashSyncSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span><table class=cols><tr> <td>0x0 = 1/320 s (auto FP) <br>0x10 = 1/250 s (auto FP) <br>0x20 = 1/250 s <br>0x30 = 1/200 s <br>0x40 = 1/160 s <br>0x50 = 1/125 s <br>0x60 = 1/100 s <br>0x70 = 1/80 s <br>0x80 = 1/60 s</td></tr></table> </td></tr> <tr> <td class=r title='22 = 0x16'>22.2</td> <td>FlashShutterSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>0x0 = 1/60 s <br>0x1 = 1/30 s <br>0x2 = 1/15 s <br>0x3 = 1/8 s <br>0x4 = 1/4 s <br>0x5 = 1/2 s</td><td>&nbsp;&nbsp;</td> <td>0x6 = 1 s <br>0x7 = 2 s <br>0x8 = 4 s <br>0x9 = 8 s <br>0xa = 15 s <br>0xb = 30 s</td></tr></table> </td></tr> <tr class=b> <td class=r title='23 = 0x17'>23.1</td> <td>FlashControlBuilt-in</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = TTL <br>0x40 = Manual <br>0x80 = Repeating Flash <br>0xc0 = Commander Mode</span></td></tr> <tr> <td class=r title='23 = 0x17'>23.2</td> <td>ManualFlashOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='24 = 0x18'>24.1</td> <td>RepeatingFlashOutput</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x70]</span></td></tr> <tr> <td class=r title='24 = 0x18'>24.2</td> <td>RepeatingFlashCount</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='25 = 0x19'>25.1</td> <td>RepeatingFlashRate</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span></td></tr> <tr> <td class=r title='26 = 0x1a'>26.1</td> <td>CommanderInternalTTLCompBuiltin</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27.1</td> <td>CommanderInternalTTLCompGroupA</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr> <td class=r title='28 = 0x1c'>28.1</td> <td>CommanderInternalTTLCompGroupB</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30.1</td> <td>FlashWarning</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = On <br>0x80 = Off</span></td></tr> <tr> <td class=r title='30 = 0x1e'>30.2</td> <td>ModelingFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = On <br>0x20 = Off</span></td></tr> <tr class=b> <td class=r title='34 = 0x22'>34.1</td> <td>LiveViewAFAreaMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x60] <br>0x0 = Face-Priority <br>0x20 = NormalArea <br>0x40 = WideArea <br>0x60 = SubjectTracking</span></td></tr> <tr> <td class=r title='34 = 0x22'>34.2</td> <td>LiveViewAFMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = AF-C <br>0x2 = AF-F</span></td></tr> <tr class=b> <td class=r title='35 = 0x23'>35.1</td> <td>PlaybackMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x20 = 10 s <br>0x40 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x60 = 1 min <br>0x80 = 5 min <br>0xa0 = 10 min</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='SettingsD4'>NikonCustom SettingsD4 Tags</a></h2> <p>Custom settings for the D4 and D4S.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0.1</td> <td>CustomSettingsBank</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = A <br>0x1 = B <br>0x2 = C <br>0x3 = D</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.1</td> <td>AF-CPrioritySelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Release <br>0x40 = Release + Focus <br>0x80 = Focus <br>0xc0 = Focus + Release</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.2</td> <td>AF-SPrioritySelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Focus <br>0x20 = Release</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.3</td> <td>AFPointSelection</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = 51 Points <br>0x10 = 11 Points</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.4</td> <td>FocusTrackingLockOn</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = Off <br>0x1 = 1 (Short) <br>0x2 = 2</td><td>&nbsp;&nbsp;</td> <td>0x3 = 3 (Normal) <br>0x4 = 4 <br>0x5 = 5 (Long)</td></tr></table> </td></tr> <tr class=b> <td class=r title='2 = 0x2'>2.1</td> <td>AFActivation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Shutter/AF-On <br>0x80 = AF-On Only</span></td></tr> <tr> <td class=r title='2 = 0x2'>2.2</td> <td>FocusPointWrap</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x08] <br>0x0 = No Wrap <br>0x8 = Wrap</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.1</td> <td>Pitch</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = High <br>0x40 = Low</span></td></tr> <tr> <td class=r title='4 = 0x4'>4.2</td> <td>NoMemoryCard</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Release Locked <br>0x20 = Enable Release</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4.3</td> <td>GridDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = On <br>0x2 = Off</span></td></tr> <tr> <td class=r title='5 = 0x5'>5.1</td> <td>ShootingInfoDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x40 = Auto <br>0x80 = Manual (dark on light) <br>0xc0 = Manual (light on dark)</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5.2</td> <td>LCDIllumination</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Off <br>0x20 = On</span></td></tr> <tr> <td class=r title='5 = 0x5'>5.3</td> <td>ScreenTips</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Off <br>0x4 = On</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5.4</td> <td>Beep</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = Off <br>0x1 = Low <br>0x2 = Medium <br>0x3 = High</span></td></tr> <tr> <td class=r title='6 = 0x6'>6.1</td> <td>ReverseIndicators</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = + 0 - <br>0x80 = - 0 +</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6.2</td> <td>RearDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = ISO <br>0x40 = Exposures Remaining</span></td></tr> <tr> <td class=r title='6 = 0x6'>6.3</td> <td>ViewfinderDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = Frame Count <br>0x20 = Exposures Remaining</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6.4</td> <td>CommandDialsReverseRotation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x18] <br>0x0 = No <br>0x8 = Shutter Speed &amp; Aperture <br>0x10 = Exposure Compensation <br>0x18 = Exposure Compensation, Shutter Speed &amp; Aperture</span></td></tr> <tr> <td class=r title='6 = 0x6'>6.5</td> <td>EasyExposureCompensation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = Off <br>0x1 = On <br>0x2 = On (auto reset)</span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7.1</td> <td>ExposureControlStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = 1/3 EV <br>0x40 = 1/2 EV <br>0x80 = 1 EV</span></td></tr> <tr> <td class=r title='7 = 0x7'>7.2</td> <td>ISOStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = 1/3 EV <br>0x10 = 1/2 EV <br>0x20 = 1 EV</span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7.3</td> <td>ExposureCompStepSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0c] <br>0x0 = 1/3 EV <br>0x4 = 1/2 EV <br>0x8 = 1 EV</span></td></tr> <tr> <td class=r title='8 = 0x8'>8.1</td> <td>CenterWeightedAreaSize</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x0 = 8 mm <br>0x20 = 12 mm <br>0x40 = 15 mm <br>0x60 = 20 mm <br>0x80 = Average</span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8.2</td> <td>FineTuneOptMatrixMetering</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr> <td class=r title='9 = 0x9'>9.1</td> <td>FineTuneOptCenterWeighted</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9.2</td> <td>FineTuneOptSpotMetering</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr> <td class=r title='10 = 0xa'>10.1</td> <td>MultiSelectorShootMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Select Center Focus Point (Reset) <br>0x80 = Preset Focus Point (Pre) <br>0xc0 = Not Used (None)</span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10.2</td> <td>MultiSelectorPlaybackMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = Thumbnail On/Off <br>0x10 = View Histograms <br>0x20 = Zoom On/Off <br>0x30 = Choose Folder</span></td></tr> <tr> <td class=r title='10 = 0xa'>10.3</td> <td>MultiSelector</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = Do Nothing <br>0x1 = Reset Meter-off Delay</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11.1</td> <td>ExposureDelayMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = Off <br>0x40 = 1 s <br>0x80 = 2 s <br>0xc0 = 3 s</span></td></tr> <tr> <td class=r title='11 = 0xb'>11.2</td> <td>CHModeShootingSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = 10 fps <br>0x10 = 11 fps</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11.3</td> <td>CLModeShootingSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>MaxContinuousRelease</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13.1</td> <td>AutoBracketSet</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0] <br>0x0 = AE &amp; Flash <br>0x20 = AE Only <br>0x40 = Flash Only <br>0x60 = WB Bracketing <br>0x80 = Active D-Lighting</span></td></tr> <tr> <td class=r title='13 = 0xd'>13.2</td> <td>AutoBracketOrder</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = 0,-,+ <br>0x10 = -,0,+</span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13.3</td> <td>AutoBracketModeM</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0c] <br>0x0 = Flash/Speed <br>0x4 = Flash/Speed/Aperture <br>0x8 = Flash/Aperture <br>0xc = Flash Only</span></td></tr> <tr> <td class=r title='14 = 0xe'>14.1</td> <td>FuncButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf8]</span><table class=cols><tr> <td>0x0 = None <br>0x8 = Preview <br>0x10 = FV Lock <br>0x18 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x28 = AE Lock (reset on release) <br>0x30 = AE Lock (hold) <br>0x38 = AF Lock Only <br>0x40 = AF-On <br>0x50 = Bracketing Burst <br>0x58 = Matrix Metering <br>0x60 = Center-weighted Metering <br>0x68 = Spot Metering <br>0x70 = Playback <br>0x78 = My Menu Top Item <br>0x80 = +NEF(RAW) <br>0x88 = Virtual Horizon <br>0x90 = My Menu <br>0xa0 = Grid Display <br>0xa8 = Disable Synchronized Release <br>0xb0 = Remote Release Only <br>0xd0 = Flash Disable/Enable</td></tr></table> </td></tr> <tr class=b> <td class=r title='14 = 0xe'>14.2</td> <td>FuncButtonPlusDials</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = None <br>0x1 = Choose Image Area (FX/DX/5:4) <br>0x2 = Shutter Speed &amp; Aperture Lock <br>0x3 = One Step Speed / Aperture <br>0x4 = Choose Non-CPU Lens Number <br>0x5 = Active D-Lighting <br>0x6 = Shooting Bank Menu</td></tr></table> </td></tr> <tr> <td class=r title='15 = 0xf'>15.1</td> <td>PreviewButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf8]</span><table class=cols><tr> <td>0x0 = None <br>0x8 = Preview <br>0x10 = FV Lock <br>0x18 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x28 = AE Lock (reset on release) <br>0x30 = AE Lock (hold) <br>0x38 = AF Lock Only <br>0x40 = AF-On <br>0x50 = Bracketing Burst <br>0x58 = Matrix Metering <br>0x60 = Center-weighted Metering <br>0x68 = Spot Metering <br>0x70 = Playback <br>0x78 = My Menu Top Item <br>0x80 = +NEF(RAW) <br>0x88 = Virtual Horizon <br>0x90 = My Menu <br>0xa0 = Grid Display <br>0xa8 = Disable Synchronized Release <br>0xb0 = Remote Release Only <br>0xd0 = Flash Disable/Enable</td></tr></table> </td></tr> <tr class=b> <td class=r title='15 = 0xf'>15.2</td> <td>PreviewButtonPlusDials</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = None <br>0x1 = Choose Image Area (FX/DX/5:4) <br>0x2 = Shutter Speed &amp; Aperture Lock <br>0x3 = One Step Speed / Aperture <br>0x4 = Choose Non-CPU Lens Number <br>0x5 = Active D-Lighting <br>0x6 = Shooting Bank Menu</td></tr></table> </td></tr> <tr> <td class=r title='16 = 0x10'>16.1</td> <td>AssignBktButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07] <br>0x0 = Auto Bracketing <br>0x1 = Multiple Exposure <br>0x2 = HDR (high dynamic range) <br>0x3 = None</span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18.1</td> <td>CommandDialsChangeMainSub</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = Autofocus Off, Exposure Off <br>0x20 = Autofocus Off, Exposure On <br>0x40 = Autofocus Off, Exposure On (Mode A) <br>0x80 = Autofocus On, Exposure Off <br>0xa0 = Autofocus On, Exposure On <br>0xc0 = Autofocus On, Exposure On (Mode A)</td></tr></table> </td></tr> <tr> <td class=r title='18 = 0x12'>18.2</td> <td>CommandDialsMenuAndPlayback</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x18] <br>0x0 = On <br>0x8 = Off <br>0x10 = On (Image Review Excluded)</span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18.3</td> <td>CommandDialsApertureSetting</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Sub-command Dial <br>0x4 = Aperture Ring</span></td></tr> <tr> <td class=r title='18 = 0x12'>18.4</td> <td>ShutterReleaseButtonAE-L</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = Off <br>0x2 = On</span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18.5</td> <td>ReleaseButtonToUseDial</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = No <br>0x1 = Yes</span></td></tr> <tr> <td class=r title='19 = 0x13'>19.1</td> <td>StandbyTimer</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x10 = 6 s <br>0x30 = 10 s <br>0x50 = 30 s</td><td>&nbsp;&nbsp;</td> <td>0x60 = 1 min <br>0x70 = 5 min <br>0x80 = 10 min <br>0x90 = 30 min</td></tr></table> </td></tr> <tr class=b> <td class=r title='20 = 0x14'>20.1</td> <td>SelfTimerTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xc0] <br>0x0 = 2 s <br>0x40 = 5 s <br>0x80 = 10 s <br>0xc0 = 20 s</span></td></tr> <tr> <td class=r title='20 = 0x14'>20.2</td> <td>SelfTimerShotCount</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='20 = 0x14'>20.3</td> <td>SelfTimerShotInterval</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = 0.5 s <br>0x10 = 1 s <br>0x20 = 2 s <br>0x30 = 3 s</span></td></tr> <tr> <td class=r title='21 = 0x15'>21.1</td> <td>ImageReviewMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = 2 s <br>0x20 = 4 s <br>0x40 = 10 s <br>0x60 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x80 = 1 min <br>0xa0 = 5 min <br>0xc0 = 10 min</td></tr></table> </td></tr> <tr class=b> <td class=r title='21 = 0x15'>21.2</td> <td>LiveViewMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c]</span><table class=cols><tr> <td>0x0 = 5 min <br>0x4 = 10 min <br>0x8 = 15 min</td><td>&nbsp;&nbsp;</td> <td>0xc = 20 min <br>0x10 = 30 min <br>0x14 = No Limit</td></tr></table> </td></tr> <tr> <td class=r title='22 = 0x16'>22.1</td> <td>MenuMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x20 = 10 s <br>0x40 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x60 = 1 min <br>0x80 = 5 min <br>0xa0 = 10 min</td></tr></table> </td></tr> <tr class=b> <td class=r title='22 = 0x16'>22.2</td> <td>ShootingInfoMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1c]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x4 = 10 s <br>0x8 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0xc = 1 min <br>0x10 = 5 min <br>0x14 = 10 min</td></tr></table> </td></tr> <tr> <td class=r title='23 = 0x17'>23.1</td> <td>FlashSyncSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span><table class=cols><tr> <td>0x10 = 1/250 s (auto FP) <br>0x20 = 1/250 s <br>0x30 = 1/200 s <br>0x40 = 1/160 s <br>0x50 = 1/125 s <br>0x60 = 1/100 s <br>0x70 = 1/80 s <br>0x80 = 1/60 s</td></tr></table> </td></tr> <tr class=b> <td class=r title='23 = 0x17'>23.2</td> <td>FlashShutterSpeed</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>0x0 = 1/60 s <br>0x1 = 1/30 s <br>0x2 = 1/15 s <br>0x3 = 1/8 s <br>0x4 = 1/4 s <br>0x5 = 1/2 s</td><td>&nbsp;&nbsp;</td> <td>0x6 = 1 s <br>0x7 = 2 s <br>0x8 = 4 s <br>0x9 = 8 s <br>0xa = 15 s <br>0xb = 30 s</td></tr></table> </td></tr> <tr> <td class=r title='31 = 0x1f'>31.1</td> <td>ModelingFlash</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = On <br>0x20 = Off</span></td></tr> <tr class=b> <td class=r title='36 = 0x24'>36.1</td> <td>PlaybackMonitorOffTime</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xe0]</span><table class=cols><tr> <td>0x0 = 4 s <br>0x20 = 10 s <br>0x40 = 20 s</td><td>&nbsp;&nbsp;</td> <td>0x60 = 1 min <br>0x80 = 5 min <br>0xa0 = 10 min</td></tr></table> </td></tr> <tr> <td class=r title='37 = 0x25'>37.1</td> <td>PlaybackZoom</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = Use Separate Zoom Buttons <br>0x1 = Use Either Zoom Button with Command Dial</span></td></tr> <tr class=b> <td class=r title='38 = 0x26'>38.1</td> <td>ShutterSpeedLock</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Off <br>0x80 = On</span></td></tr> <tr> <td class=r title='38 = 0x26'>38.2</td> <td>ApertureLock</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = Off <br>0x40 = On</span></td></tr> <tr class=b> <td class=r title='38 = 0x26'>38.3</td> <td>MovieShutterButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = Take Photo <br>0x10 = Record Movies <br>0x20 = Live Frame Grab</span></td></tr> <tr> <td class=r title='38 = 0x26'>38.4</td> <td>FlashExposureCompArea</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Entire frame <br>0x4 = Background only</span></td></tr> <tr class=b> <td class=r title='41 = 0x29'>41.1</td> <td>MovieFunctionButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x70] <br>0x0 = None <br>0x10 = Power Aperture (open) <br>0x30 = Index Marking <br>0x40 = View Photo Shooting Info</span></td></tr> <tr> <td class=r title='41 = 0x29'>41.2</td> <td>MoviePreviewButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07] <br>0x0 = None <br>0x2 = Power Aperture (open) <br>0x3 = Index Marking <br>0x4 = View Photo Shooting Info</span></td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42.1</td> <td>VerticalMultiSelector</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x60] <br>0x0 = Same as Multi-Selector with Info(U/D) &amp; Playback(R/L) <br>0x20 = Same as Multi-Selector with Info(R/L) &amp; Playback(U/D) <br>0x40 = Focus Point Selection</span></td></tr> <tr> <td class=r title='42 = 0x2a'>42.2</td> <td>VerticalFuncButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x1f]</span><table class=cols><tr> <td>0x0 = None <br>0x1 = Preview <br>0x2 = FV Lock <br>0x3 = AE/AF Lock <br>0x4 = AE Lock Only <br>0x5 = AE Lock (reset on release) <br>0x6 = AE Lock (hold) <br>0x7 = AF Lock Only <br>0xa = Bracketing Burst <br>0xb = Matrix Metering <br>0xc = Center-weighted Metering <br>0xd = Spot Metering <br>0xe = Playback <br>0xf = My Menu Top Item <br>0x10 = +NEF(RAW) <br>0x11 = Virtual Horizon <br>0x12 = My Menu <br>0x14 = Grid Display <br>0x1a = Flash Disable/Enable</td></tr></table> </td></tr> <tr class=b> <td class=r title='43 = 0x2b'>43.1</td> <td>VerticalFuncButtonPlusDials</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span><table class=cols><tr> <td>0x0 = None <br>0x10 = Choose Image Area (FX/DX/5:4) <br>0x20 = Shutter Speed &amp; Aperture Lock <br>0x30 = One Step Speed / Aperture <br>0x40 = Choose Non-CPU Lens Number <br>0x50 = Active D-Lighting <br>0x60 = Shooting Bank Menu <br>0x70 = ISO Sensitivity <br>0x80 = Exposure Mode <br>0x90 = Exposure Compensation <br>0xa0 = Metering</td></tr></table> </td></tr> <tr> <td class=r title='43 = 0x2b'>43.2</td> <td>AssignMovieRecordButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07] <br>0x0 = None <br>0x1 = Choose Image Area (FX/DX/5:4) <br>0x2 = Shutter Speed &amp; Aperture Lock <br>0x3 = ISO Sensitivity <br>0x4 = Shooting Bank Menu</span></td></tr> <tr class=b> <td class=r title='46 = 0x2e'>46.1</td> <td>DynamicAreaAFDisplay</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Off <br>0x80 = On</span></td></tr> <tr> <td class=r title='46 = 0x2e'>46.2</td> <td>AFPointIllumination</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x60] <br>0x0 = Off <br>0x20 = On in Continuous Shooting Modes <br>0x40 = On During Manual Focusing <br>0x60 = On in Continuous Shooting and Manual Focusing</span></td></tr> <tr class=b> <td class=r title='46 = 0x2e'>46.3</td> <td>StoreByOrientation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x18] <br>0x0 = Off <br>0x8 = Focus Point <br>0x10 = Focus Point and AF-area mode</span></td></tr> <tr> <td class=r title='46 = 0x2e'>46.4</td> <td>GroupAreaAFIllumination</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = Squares <br>0x4 = Dots</span></td></tr> <tr class=b> <td class=r title='46 = 0x2e'>46.5</td> <td>AFPointBrightness</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = Low <br>0x1 = Normal <br>0x2 = High <br>0x3 = Extra High</span></td></tr> <tr> <td class=r title='47 = 0x2f'>47.1</td> <td>AFOnButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x70]</span><table class=cols><tr> <td>0x0 = AF On <br>0x10 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x30 = AE Lock (reset on release) <br>0x40 = AE Lock (hold) <br>0x50 = AF Lock Only <br>0x60 = None</td></tr></table> </td></tr> <tr class=b> <td class=r title='47 = 0x2f'>47.2</td> <td>VerticalAFOnButton</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = Same as AF On <br>0x1 = AF On <br>0x2 = AE/AF Lock <br>0x3 = AE Lock Only <br>0x4 = AE Lock (reset on release) <br>0x5 = AE Lock (hold) <br>0x6 = AF Lock Only <br>0x7 = None</td></tr></table> </td></tr> <tr> <td class=r title='48 = 0x30'>48.1</td> <td>SubSelectorAssignment</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Focus Point Selection <br>0x80 = Same As Multi-selector</span></td></tr> <tr class=b> <td class=r title='48 = 0x30'>48.2</td> <td>MovieSubSelectorAssignment</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = None <br>0x1 = Index Marking <br>0x2 = AE/AF Lock <br>0x3 = AE Lock Only <br>0x4 = AE Lock (hold) <br>0x5 = AF Lock Only <br>0x6 = View Photo Shooting Info</td></tr></table> </td></tr> <tr> <td class=r title='49 = 0x31'>49.1</td> <td>SubSelector</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf8]</span><table class=cols><tr> <td>0x0 = None <br>0x8 = Preview <br>0x10 = FV Lock <br>0x18 = AE/AF Lock <br>0x20 = AE Lock Only <br>0x28 = AE Lock (reset on release) <br>0x30 = AE Lock (hold) <br>0x38 = AF Lock Only <br>0x40 = AF-On <br>0x50 = Bracketing Burst <br>0x58 = Matrix Metering <br>0x60 = Center-weighted Metering <br>0x68 = Spot Metering <br>0x70 = Playback <br>0x78 = My Menu Top Item <br>0x80 = +NEF(RAW) <br>0x88 = Virtual Horizon <br>0x90 = My Menu <br>0x98 = Reset <br>0xa0 = Grid Display <br>0xa8 = Disable Synchronized Release <br>0xb0 = Remote Release Only <br>0xb8 = Preview <br>0xd0 = Flash Disable/Enable</td></tr></table> </td></tr> <tr class=b> <td class=r title='49 = 0x31'>49.2</td> <td>SubSelectorPlusDials</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07] <br>0x0 = None <br>0x1 = Choose Image Area (FX/DX/5:4) <br>0x2 = Shutter Speed &amp; Aperture Lock <br>0x4 = Choose Non-CPU Lens Number <br>0x6 = Shooting Bank Menu</span></td></tr> <tr> <td class=r title='50 = 0x32'>50.1</td> <td>MatrixMetering</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D4S only)</span> <br>[Mask 0x80] <br>0x0 = Face Detection On <br>0x80 = Face Detection Off</span></td></tr> <tr class=b> <td class=r title='50 = 0x32'>50.2</td> <td>LiveViewButtonOptions</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D4S only)</span> <br>[Mask 0x30] <br>0x0 = Enable <br>0x10 = Enable (standby time active) <br>0x20 = Disable</span></td></tr> <tr> <td class=r title='50 = 0x32'>50.3</td> <td>AFModeRestrictions</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D4S only)</span> <br>[Mask 0x03] <br>0x0 = Off <br>0x1 = AF-C <br>0x2 = AF-S</span></td></tr> <tr class=b> <td class=r title='51 = 0x33'>51.1</td> <td>LimitAFAreaModeSelection</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D4S only)</span> <br>[Mask 0x7e]</span><table class=cols><tr> <td>0x0 = No Restrictions <br>Bit 1 = Auto-area <br>Bit 2 = Group-area <br>Bit 3 = 3D-tracking <br>Bit 4 = Dynamic area (51 points) <br>Bit 5 = Dynamic area (21 points) <br>Bit 6 = Dynamic area (9 points)</td></tr></table> </td></tr> <tr> <td class=r title='52 = 0x34'>52.1</td> <td>MovieFunctionButtonPlusDials</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = None <br>0x10 = Choose Image Area</span></td></tr> <tr class=b> <td class=r title='52 = 0x34'>52.2</td> <td>MoviePreviewButtonPlusDials</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = None <br>0x1 = Choose Image Area</span></td></tr> <tr> <td class=r title='53 = 0x35'>53.1</td> <td>MovieSubSelectorAssignmentPlusDials</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x10] <br>0x0 = None <br>0x10 = Choose Image Area</span></td></tr> <tr class=b> <td class=r title='54 = 0x36'>54.1</td> <td>AssignRemoteFnButton</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D4S only)</span> <br>[Mask 0x1f]</span><table class=cols><tr> <td>0x0 = None <br>0x1 = Preview <br>0x2 = FV Lock <br>0x3 = AE/AF Lock <br>0x4 = AE Lock Only <br>0x5 = AE Lock (reset on release) <br>0x7 = AF Lock Only <br>0x8 = AF-On <br>0x10 = +NEF(RAW) <br>0x19 = Live View <br>0x1a = Flash Disable/Enable</td></tr></table> </td></tr> <tr> <td class=r title='55 = 0x37'>55.1</td> <td>LensFocusFunctionButtons</td> <td class=c>int8u</td> <td><span class=s><span class=n>(D4S only)</span> <br>[Mask 0x3f]</span><table class=cols><tr> <td>0x3 = AE/AF Lock <br>0x4 = AE Lock Only <br>0x7 = AF Lock Only <br>0x15 = Disable Synchronized Release <br>0x16 = Remote Release Only <br>0x18 = Preset focus Point <br>0x1a = Flash Disable/Enable <br>0x20 = AF-Area Mode: Single-point AF <br>0x21 = AF-Area Mode: Dynamic-area AF (9 points) <br>0x22 = AF-Area Mode: Dynamic-area AF (21 points) <br>0x23 = AF-Area Mode: Dynamic-area AF (51 points) <br>0x24 = AF-Area Mode: Group-area AF <br>0x25 = AF-Area Mode: Auto area AF</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised May 11, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Nintendo.html����������������������������������������������������000644 �000765 �000024 �00000003407 12314327221 021473� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Nintendo Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Nintendo Tags</h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x1101 = 4353'>0x1101</td> <td>CameraInfo</td> <td class=c>-</td> <td>--&gt; <a href='Nintendo.html#CameraInfo'>Nintendo CameraInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo'>Nintendo CameraInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ModelID</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>TimeStamp</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>InternalSerialNumber</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>Parallax</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>Category</td> <td class=c>int16u</td> <td><span class=s>0x0 = (none) <br>0x1000 = Mii <br>0x2000 = Man <br>0x4000 = Woman</span></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Mar 25, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Ogg.html���������������������������������������������������������000644 �000765 �000024 �00000002500 11607360623 020431� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Ogg Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Ogg Tags</h2> <p>ExifTool extracts the following types of information from Ogg files. See <a href="http://www.xiph.org/vorbis/doc/">http://www.xiph.org/vorbis/doc/</a> for the Ogg specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'FLAC'</td> <td>FLAC</td> <td class=c>-</td> <td>--&gt; <a href='FLAC.html'>FLAC Tags</a></td></tr> <tr class=b> <td>'ID3'</td> <td>ID3</td> <td class=c>-</td> <td>--&gt; <a href='ID3.html'>ID3 Tags</a></td></tr> <tr> <td>'theora'</td> <td>Theora</td> <td class=c>-</td> <td>--&gt; <a href='Theora.html'>Theora Tags</a></td></tr> <tr class=b> <td>'vorbis'</td> <td>Vorbis</td> <td class=c>-</td> <td>--&gt; <a href='Vorbis.html'>Vorbis Tags</a></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jul 13, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Olympus.html�����������������������������������������������������000644 �000765 �000024 �00000323651 12643236640 021404� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Olympus Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Olympus Tags</h2> <p> Tags 0x0000 through 0x0103 are used by some older Olympus cameras, and are the same as Konica/Minolta tags. These tags are also used for some models from other brands such as Acer, BenQ, Epson, Hitachi, HP, Maginon, Minolta, Pentax, Ricoh, Samsung, Sanyo, SeaLife, Sony, Supra and Vivitar. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>MakerNoteVersion</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>MinoltaCameraSettingsOld</td> <td class=c>-</td> <td>--&gt; <a href='Minolta.html#CameraSettings'>Minolta CameraSettings Tags</a></td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>MinoltaCameraSettings</td> <td class=c>-</td> <td>--&gt; <a href='Minolta.html#CameraSettings'>Minolta CameraSettings Tags</a></td></tr> <tr class=b> <td title='0x0040 = 64'>0x0040</td> <td>CompressedImageSize</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0081 = 129'>0x0081</td> <td>PreviewImageData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0088 = 136'>0x0088</td> <td>PreviewImageStart</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0089 = 137'>0x0089</td> <td>PreviewImageLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0100 = 256'>0x0100</td> <td>ThumbnailImage</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr> <td title='0x0104 = 260'>0x0104</td> <td>BodyFirmwareVersion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0200 = 512'>0x0200</td> <td>SpecialMode</td> <td class=c title=' ~ = Writable only with -n'>int32u[3]~</td> <td><span class=s><span class=n>(3 numbers: 1. Shooting mode: 0=Normal, 2=Fast, 3=Panorama; 2. Sequence Number; 3. Panorama Direction: 1=Left-right, 2=Right-left, 3=Bottom-Top, 4=Top-Bottom)</span></span></td></tr> <tr> <td title='0x0201 = 513'>0x0201</td> <td>Quality</td> <td class=c title=' ~ = Writable only with -n'>int16u~</td> <td><span class=s><span class=n>(Quality values are decoded based on the CameraType tag. All types represent SQ, HQ and SHQ as sequential integers, but in general SX-type cameras start with a value of 0 for SQ while others start with 1)</span></span></td></tr> <tr class=b> <td title='0x0202 = 514'>0x0202</td> <td>Macro</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On <br>2 = Super Macro</span></td></tr> <tr> <td title='0x0203 = 515'>0x0203</td> <td>BWMode</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On <br>6 = (none)</span></td></tr> <tr class=b> <td title='0x0204 = 516'>0x0204</td> <td>DigitalZoom</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0205 = 517'>0x0205</td> <td>FocalPlaneDiagonal</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0206 = 518'>0x0206</td> <td>LensDistortionParams</td> <td class=c>int16s[6]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0207 = 519'>0x0207</td> <td>CameraType</td> <td class=c>string</td> <td>--&gt; <a href='Olympus.html#CameraType'>Olympus CameraType Values</a></td></tr> <tr class=b> <td title='0x0208 = 520'>0x0208</td> <td>TextInfo</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#TextInfo'>Olympus TextInfo Tags</a></td></tr> <tr> <td title='0x0209 = 521'>0x0209</td> <td>CameraID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x020b = 523'>0x020b</td> <td>EpsonImageWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x020c = 524'>0x020c</td> <td>EpsonImageHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x020d = 525'>0x020d</td> <td>EpsonSoftware</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0280 = 640'>0x0280</td> <td>PreviewImage</td> <td class=c>int8u</td> <td><span class=s><span class=n>(found in ERF and JPG images from some Epson models)</span></span></td></tr> <tr class=b> <td title='0x0300 = 768'>0x0300</td> <td>PreCaptureFrames</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0301 = 769'>0x0301</td> <td>WhiteBoard</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0302 = 770'>0x0302</td> <td>OneTouchWB</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On <br>2 = On (Preset)</span></td></tr> <tr> <td title='0x0303 = 771'>0x0303</td> <td>WhiteBalanceBracket</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0304 = 772'>0x0304</td> <td>WhiteBalanceBias</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0401 = 1025'>0x0401</td> <td>BlackLevel</td> <td class=c>int32u[4]</td> <td><span class=s><span class=n>(found in Epson ERF images)</span></span></td></tr> <tr class=b> <td title='0x0403 = 1027'>0x0403</td> <td>SceneMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Normal <br>1 = Standard <br>2 = Auto <br>3 = Intelligent Auto <br>4 = Portrait <br>5 = Landscape+Portrait <br>6 = Landscape <br>7 = Night Scene <br>8 = Night+Portrait <br>9 = Sport <br>10 = Self Portrait <br>11 = Indoor <br>12 = Beach &amp; Snow <br>13 = Beach <br>14 = Snow <br>15 = Self Portrait+Self Timer <br>16 = Sunset <br>17 = Cuisine <br>18 = Documents <br>19 = Candle</td><td>&nbsp;&nbsp;</td> <td>20 = Fireworks <br>21 = Available Light <br>22 = Vivid <br>23 = Underwater Wide1 <br>24 = Underwater Macro <br>25 = Museum <br>26 = Behind Glass <br>27 = Auction <br>28 = Shoot &amp; Select1 <br>29 = Shoot &amp; Select2 <br>30 = Underwater Wide2 <br>31 = Digital Image Stabilization <br>32 = Face Portrait <br>33 = Pet <br>34 = Smile Shot <br>35 = Quick Shutter <br>43 = Hand-held Starlight <br>100 = Panorama <br>101 = Magic Filter <br>103 = HDR</td></tr></table> </td></tr> <tr> <td title='0x0404 = 1028'>0x0404</td> <td>SerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0405 = 1029'>0x0405</td> <td>Firmware</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0e00 = 3584'>0x0e00</td> <td>PrintIM</td> <td class=c>-</td> <td>--&gt; <a href='PrintIM.html'>PrintIM Tags</a></td></tr> <tr class=b> <td title='0x0f00 = 3840'>0x0f00</td> <td>DataDump</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0f01 = 3841'>0x0f01</td> <td>DataDump2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0f04 = 3844'>0x0f04</td> <td>ZoomedPreviewStart</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr> <td title='0x0f05 = 3845'>0x0f05</td> <td>ZoomedPreviewLength</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0f06 = 3846'>0x0f06</td> <td>ZoomedPreviewSize</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x1000 = 4096'>0x1000</td> <td>ShutterSpeedValue</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1001 = 4097'>0x1001</td> <td>ISOValue</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x1002 = 4098'>0x1002</td> <td>ApertureValue</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1003 = 4099'>0x1003</td> <td>BrightnessValue</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x1004 = 4100'>0x1004</td> <td>FlashMode</td> <td class=c>int16u</td> <td><span class=s>2 = On <br>3 = Off</span></td></tr> <tr class=b> <td title='0x1005 = 4101'>0x1005</td> <td>FlashDevice</td> <td class=c>int16u</td> <td><span class=s>0 = None <br>1 = Internal <br>4 = External <br>5 = Internal + External</span></td></tr> <tr> <td title='0x1006 = 4102'>0x1006</td> <td>ExposureCompensation</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1007 = 4103'>0x1007</td> <td>SensorTemperature</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td title='0x1008 = 4104'>0x1008</td> <td>LensTemperature</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1009 = 4105'>0x1009</td> <td>LightCondition</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x100a = 4106'>0x100a</td> <td>FocusRange</td> <td class=c>int16u</td> <td><span class=s>0 = Normal <br>1 = Macro</span></td></tr> <tr class=b> <td title='0x100b = 4107'>0x100b</td> <td>FocusMode</td> <td class=c>int16u</td> <td><span class=s>0 = Auto <br>1 = Manual</span></td></tr> <tr> <td title='0x100c = 4108'>0x100c</td> <td>ManualFocusDistance</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x100d = 4109'>0x100d</td> <td>ZoomStepCount</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x100e = 4110'>0x100e</td> <td>FocusStepCount</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x100f = 4111'>0x100f</td> <td>Sharpness</td> <td class=c>int16u</td> <td><span class=s>0 = Normal <br>1 = Hard <br>2 = Soft</span></td></tr> <tr> <td title='0x1010 = 4112'>0x1010</td> <td>FlashChargeLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1011 = 4113'>0x1011</td> <td>ColorMatrix</td> <td class=c>int16u[9]</td> <td>&nbsp;</td></tr> <tr> <td title='0x1012 = 4114'>0x1012</td> <td>BlackLevel</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1013 = 4115'>0x1013</td> <td>ColorTemperatureBG?</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1014 = 4116'>0x1014</td> <td>ColorTemperatureRG?</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1015 = 4117'>0x1015</td> <td>WBMode</td> <td class=c>int16u[2]</td> <td><table class=cols><tr> <td>1 = Auto <br>&#39;1 0&#39; = Auto <br>&#39;1 2&#39; = Auto (2) <br>&#39;1 4&#39; = Auto (4) <br>&#39;2 2&#39; = 3000 Kelvin <br>&#39;2 3&#39; = 3700 Kelvin</td><td>&nbsp;&nbsp;</td> <td>&#39;2 4&#39; = 4000 Kelvin <br>&#39;2 5&#39; = 4500 Kelvin <br>&#39;2 6&#39; = 5500 Kelvin <br>&#39;2 7&#39; = 6500 Kelvin <br>&#39;2 8&#39; = 7500 Kelvin <br>&#39;3 0&#39; = One-touch</td></tr></table> </td></tr> <tr> <td title='0x1017 = 4119'>0x1017</td> <td>RedBalance</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1018 = 4120'>0x1018</td> <td>BlueBalance</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x1019 = 4121'>0x1019</td> <td>ColorMatrixNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x101a = 4122'>0x101a</td> <td>SerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x101b = 4123'>0x101b</td> <td>ExternalFlashAE1_0?</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x101c = 4124'>0x101c</td> <td>ExternalFlashAE2_0?</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x101d = 4125'>0x101d</td> <td>InternalFlashAE1_0?</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x101e = 4126'>0x101e</td> <td>InternalFlashAE2_0?</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x101f = 4127'>0x101f</td> <td>ExternalFlashAE1?</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1020 = 4128'>0x1020</td> <td>ExternalFlashAE2?</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1021 = 4129'>0x1021</td> <td>InternalFlashAE1?</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1022 = 4130'>0x1022</td> <td>InternalFlashAE2?</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1023 = 4131'>0x1023</td> <td>FlashExposureComp</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1024 = 4132'>0x1024</td> <td>InternalFlashTable</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1025 = 4133'>0x1025</td> <td>ExternalFlashGValue</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1026 = 4134'>0x1026</td> <td>ExternalFlashBounce</td> <td class=c>int16u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td title='0x1027 = 4135'>0x1027</td> <td>ExternalFlashZoom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1028 = 4136'>0x1028</td> <td>ExternalFlashMode</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1029 = 4137'>0x1029</td> <td>Contrast</td> <td class=c>int16u</td> <td><span class=s>0 = High <br>1 = Normal <br>2 = Low</span></td></tr> <tr class=b> <td title='0x102a = 4138'>0x102a</td> <td>SharpnessFactor</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x102b = 4139'>0x102b</td> <td>ColorControl</td> <td class=c>int16u[6]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x102c = 4140'>0x102c</td> <td>ValidBits</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x102d = 4141'>0x102d</td> <td>CoringFilter</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x102e = 4142'>0x102e</td> <td>OlympusImageWidth</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x102f = 4143'>0x102f</td> <td>OlympusImageHeight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1030 = 4144'>0x1030</td> <td>SceneDetect</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1031 = 4145'>0x1031</td> <td>SceneArea?</td> <td class=c>int32u[8]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1033 = 4147'>0x1033</td> <td>SceneDetectData?</td> <td class=c>int32u[720]</td> <td>&nbsp;</td></tr> <tr> <td title='0x1034 = 4148'>0x1034</td> <td>CompressionRatio</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1035 = 4149'>0x1035</td> <td>PreviewImageValid</td> <td class=c>int32u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td title='0x1036 = 4150'>0x1036</td> <td>PreviewImageStart</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1037 = 4151'>0x1037</td> <td>PreviewImageLength</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr> <td title='0x1038 = 4152'>0x1038</td> <td>AFResult</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1039 = 4153'>0x1039</td> <td>CCDScanMode</td> <td class=c>int16u</td> <td><span class=s>0 = Interlaced <br>1 = Progressive</span></td></tr> <tr> <td title='0x103a = 4154'>0x103a</td> <td>NoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x103b = 4155'>0x103b</td> <td>FocusStepInfinity</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x103c = 4156'>0x103c</td> <td>FocusStepNear</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x103d = 4157'>0x103d</td> <td>LightValueCenter</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x103e = 4158'>0x103e</td> <td>LightValuePeriphery</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x103f = 4159'>0x103f</td> <td>FieldCount?</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x2010 = 8208'>0x2010</td> <td>Equipment <br>EquipmentIFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#Equipment'>Olympus Equipment Tags</a> <br>--&gt; <a href='Olympus.html#Equipment'>Olympus Equipment Tags</a></td></tr> <tr class=b> <td title='0x2020 = 8224'>0x2020</td> <td>CameraSettings <br>CameraSettingsIFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#CameraSettings'>Olympus CameraSettings Tags</a> <br>--&gt; <a href='Olympus.html#CameraSettings'>Olympus CameraSettings Tags</a></td></tr> <tr> <td title='0x2030 = 8240'>0x2030</td> <td>RawDevelopment <br>RawDevelopmentIFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#RawDevelopment'>Olympus RawDevelopment Tags</a> <br>--&gt; <a href='Olympus.html#RawDevelopment'>Olympus RawDevelopment Tags</a></td></tr> <tr class=b> <td title='0x2031 = 8241'>0x2031</td> <td>RawDev2 <br>RawDev2IFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#RawDevelopment2'>Olympus RawDevelopment2 Tags</a> <br>--&gt; <a href='Olympus.html#RawDevelopment2'>Olympus RawDevelopment2 Tags</a></td></tr> <tr> <td title='0x2040 = 8256'>0x2040</td> <td>ImageProcessing <br>ImageProcessingIFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#ImageProcessing'>Olympus ImageProcessing Tags</a> <br>--&gt; <a href='Olympus.html#ImageProcessing'>Olympus ImageProcessing Tags</a></td></tr> <tr class=b> <td title='0x2050 = 8272'>0x2050</td> <td>FocusInfo <br>FocusInfoIFD <br>CameraParameters</td> <td class=c>-<br>-<br>undef</td> <td>--&gt; <a href='Olympus.html#FocusInfo'>Olympus FocusInfo Tags</a> <br>--&gt; <a href='Olympus.html#FocusInfo'>Olympus FocusInfo Tags</a></td></tr> <tr> <td title='0x2100 = 8448'>0x2100</td> <td>Olympus2100 <br>Olympus2100IFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a> <br>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a></td></tr> <tr class=b> <td title='0x2200 = 8704'>0x2200</td> <td>Olympus2200 <br>Olympus2200IFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a> <br>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a></td></tr> <tr> <td title='0x2300 = 8960'>0x2300</td> <td>Olympus2300 <br>Olympus2300IFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a> <br>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a></td></tr> <tr class=b> <td title='0x2400 = 9216'>0x2400</td> <td>Olympus2400 <br>Olympus2400IFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a> <br>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a></td></tr> <tr> <td title='0x2500 = 9472'>0x2500</td> <td>Olympus2500 <br>Olympus2500IFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a> <br>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a></td></tr> <tr class=b> <td title='0x2600 = 9728'>0x2600</td> <td>Olympus2600 <br>Olympus2600IFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a> <br>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a></td></tr> <tr> <td title='0x2700 = 9984'>0x2700</td> <td>Olympus2700 <br>Olympus2700IFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a> <br>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a></td></tr> <tr class=b> <td title='0x2800 = 10240'>0x2800</td> <td>Olympus2800 <br>Olympus2800IFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a> <br>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a></td></tr> <tr> <td title='0x2900 = 10496'>0x2900</td> <td>Olympus2900 <br>Olympus2900IFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a> <br>--&gt; <a href='Olympus.html#FE'>Olympus FE Tags</a></td></tr> <tr class=b> <td title='0x3000 = 12288'>0x3000</td> <td>RawInfo <br>RawInfoIFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#RawInfo'>Olympus RawInfo Tags</a> <br>--&gt; <a href='Olympus.html#RawInfo'>Olympus RawInfo Tags</a></td></tr> <tr> <td title='0x4000 = 16384'>0x4000</td> <td>MainInfo <br>MainInfoIFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html'>Olympus Tags</a> <br>--&gt; <a href='Olympus.html'>Olympus Tags</a></td></tr> <tr class=b> <td title='0x5000 = 20480'>0x5000</td> <td>UnknownInfo <br>UnknownInfoIFD</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Olympus.html#UnknownInfo'>Olympus UnknownInfo Tags</a> <br>--&gt; <a href='Olympus.html#UnknownInfo'>Olympus UnknownInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraType'>Olympus CameraType Values</a></h2> <p>These values are currently decoded only for Olympus models. Models with Olympus-style maker notes from other brands such as Acer, BenQ, Hitachi, HP, Premier, Konica-Minolta, Maginon, Ricoh, Rollei, SeaLife, Sony, Supra, Vivitar are not listed.</p> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>CameraType</th><th>Value</th><th>CameraType</th><th>Value</th><th>CameraType</th></tr> <tr><td>'D4028'</td><td>= X-2,C-50Z</td> <td class=b>'D4391'</td><td class=b>= u5000</td> <td>'S0009'</td><td>= E-400</td> </tr><tr><td>'D4029'</td><td>= E-20,E-20N,E-20P</td> <td class=b>'D4392'</td><td class=b>= u7000,S7000</td> <td>'S0010'</td><td>= E-510</td> </tr><tr><td>'D4034'</td><td>= C720UZ</td> <td class=b>'D4396'</td><td class=b>= FE5010,X915</td> <td>'S0011'</td><td>= E-3</td> </tr><tr><td>'D4040'</td><td>= E-1</td> <td class=b>'D4397'</td><td class=b>= FE25,X20</td> <td>'S0013'</td><td>= E-410</td> </tr><tr><td>'D4041'</td><td>= E-300</td> <td class=b>'D4398'</td><td class=b>= FE45,X40</td> <td>'S0016'</td><td>= E-420</td> </tr><tr><td>'D4083'</td><td>= C2Z,D520Z,C220Z</td> <td class=b>'D4401'</td><td class=b>= XZ-1</td> <td>'S0017'</td><td>= E-30</td> </tr><tr><td>'D4106'</td><td>= u20D,S400D,u400D</td> <td class=b>'D4402'</td><td class=b>= uT6010,ST6010</td> <td>'S0018'</td><td>= E-520</td> </tr><tr><td>'D4120'</td><td>= X-1</td> <td class=b>'D4406'</td><td class=b>= u7010,S7010 / u7020,S7020</td> <td>'S0019'</td><td>= E-P1</td> </tr><tr><td>'D4122'</td><td>= u10D,S300D,u300D</td> <td class=b>'D4407'</td><td class=b>= FE4010,X930</td> <td>'S0023'</td><td>= E-620</td> </tr><tr><td>'D4125'</td><td>= AZ-1</td> <td class=b>'D4408'</td><td class=b>= X560WP</td> <td>'S0026'</td><td>= E-P2</td> </tr><tr><td>'D4141'</td><td>= C150,D390</td> <td class=b>'D4409'</td><td class=b>= FE26,X21</td> <td>'S0027'</td><td>= E-PL1</td> </tr><tr><td>'D4193'</td><td>= C-5000Z</td> <td class=b>'D4410'</td><td class=b>= FE4000,X920,X925</td> <td>'S0029'</td><td>= E-450</td> </tr><tr><td>'D4194'</td><td>= X-3,C-60Z</td> <td class=b>'D4411'</td><td class=b>= FE46,X41,X42</td> <td>'S0030'</td><td>= E-600</td> </tr><tr><td>'D4199'</td><td>= u30D,S410D,u410D</td> <td class=b>'D4412'</td><td class=b>= FE5020,X935</td> <td>'S0032'</td><td>= E-P3</td> </tr><tr><td>'D4205'</td><td>= X450,D535Z,C370Z</td> <td class=b>'D4413'</td><td class=b>= uTough-3000</td> <td>'S0033'</td><td>= E-5</td> </tr><tr><td>'D4210'</td><td>= C160,D395</td> <td class=b>'D4414'</td><td class=b>= StylusTough-6020</td> <td>'S0034'</td><td>= E-PL2</td> </tr><tr><td>'D4211'</td><td>= C725UZ</td> <td class=b>'D4415'</td><td class=b>= StylusTough-8010</td> <td>'S0036'</td><td>= E-M5</td> </tr><tr><td>'D4213'</td><td>= FerrariMODEL2003</td> <td class=b>'D4417'</td><td class=b>= u5010,S5010</td> <td>'S0038'</td><td>= E-PL3</td> </tr><tr><td>'D4216'</td><td>= u15D</td> <td class=b>'D4418'</td><td class=b>= u7040,S7040</td> <td>'S0039'</td><td>= E-PM1</td> </tr><tr><td>'D4217'</td><td>= u25D</td> <td class=b>'D4419'</td><td class=b>= u9010,S9010</td> <td>'S0040'</td><td>= E-PL1s</td> </tr><tr><td>'D4220'</td><td>= u-miniD,Stylus V</td> <td class=b>'D4423'</td><td class=b>= FE4040</td> <td>'S0042'</td><td>= E-PL5</td> </tr><tr><td>'D4221'</td><td>= u40D,S500,uD500</td> <td class=b>'D4424'</td><td class=b>= FE47,X43</td> <td>'S0043'</td><td>= E-PM2</td> </tr><tr><td>'D4231'</td><td>= FerrariMODEL2004</td> <td class=b>'D4426'</td><td class=b>= FE4030,X950</td> <td>'S0044'</td><td>= E-P5</td> </tr><tr><td>'D4240'</td><td>= X500,D590Z,C470Z</td> <td class=b>'D4428'</td><td class=b>= FE5030,X965,X960</td> <td>'S0045'</td><td>= E-PL6</td> </tr><tr><td>'D4244'</td><td>= uD800,S800</td> <td class=b>'D4430'</td><td class=b>= u7030,S7030</td> <td>'S0046'</td><td>= E-PL7</td> </tr><tr><td>'D4256'</td><td>= u720SW,S720SW</td> <td class=b>'D4432'</td><td class=b>= SP600UZ</td> <td>'S0047'</td><td>= E-M1</td> </tr><tr><td>'D4261'</td><td>= X600,D630,FE5500</td> <td class=b>'D4434'</td><td class=b>= SP800UZ</td> <td>'S0051'</td><td>= E-M10</td> </tr><tr><td>'D4262'</td><td>= uD600,S600</td> <td class=b>'D4439'</td><td class=b>= FE4020,X940</td> <td>'S0052'</td><td>= E-M5MarkII</td> </tr><tr><td>'D4301'</td><td>= u810/S810</td> <td class=b>'D4442'</td><td class=b>= FE5035</td> <td>'S0059'</td><td>= E-M10MarkII</td> </tr><tr><td>'D4302'</td><td>= u710,S710</td> <td class=b>'D4448'</td><td class=b>= FE4050,X970</td> <td>'SR45'</td><td>= D220</td> </tr><tr><td>'D4303'</td><td>= u700,S700</td> <td class=b>'D4450'</td><td class=b>= FE5050,X985</td> <td>'SR55'</td><td>= D320L</td> </tr><tr><td>'D4304'</td><td>= FE100,X710</td> <td class=b>'D4454'</td><td class=b>= u-7050</td> <td>'SR83'</td><td>= D340L</td> </tr><tr><td>'D4305'</td><td>= FE110,X705</td> <td class=b>'D4464'</td><td class=b>= T10,X27</td> <td>'SR85'</td><td>= C830L,D340R</td> </tr><tr><td>'D4310'</td><td>= FE-130,X-720</td> <td class=b>'D4470'</td><td class=b>= FE5040,X980</td> <td>'SR852'</td><td>= C860L,D360L</td> </tr><tr><td>'D4311'</td><td>= FE-140,X-725</td> <td class=b>'D4472'</td><td class=b>= TG-310</td> <td>'SR872'</td><td>= C900Z,D400Z</td> </tr><tr><td>'D4312'</td><td>= FE150,X730</td> <td class=b>'D4474'</td><td class=b>= TG-610</td> <td>'SR874'</td><td>= C960Z,D460Z</td> </tr><tr><td>'D4313'</td><td>= FE160,X735</td> <td class=b>'D4476'</td><td class=b>= TG-810</td> <td>'SR951'</td><td>= C2000Z</td> </tr><tr><td>'D4314'</td><td>= u740,S740</td> <td class=b>'D4478'</td><td class=b>= VG145,VG140,D715</td> <td>'SR952'</td><td>= C21</td> </tr><tr><td>'D4315'</td><td>= u750,S750</td> <td class=b>'D4479'</td><td class=b>= VG130,D710</td> <td>'SR953'</td><td>= C21T.commu</td> </tr><tr><td>'D4316'</td><td>= u730/S730</td> <td class=b>'D4480'</td><td class=b>= VG120,D705</td> <td>'SR954'</td><td>= C2020Z</td> </tr><tr><td>'D4317'</td><td>= FE115,X715</td> <td class=b>'D4482'</td><td class=b>= VR310,D720</td> <td>'SR955'</td><td>= C990Z,D490Z</td> </tr><tr><td>'D4321'</td><td>= SP550UZ</td> <td class=b>'D4484'</td><td class=b>= VR320,D725</td> <td>'SR956'</td><td>= C211Z</td> </tr><tr><td>'D4322'</td><td>= SP510UZ</td> <td class=b>'D4486'</td><td class=b>= VR330,D730</td> <td>'SR959'</td><td>= C990ZS,D490Z</td> </tr><tr><td>'D4324'</td><td>= FE170,X760</td> <td class=b>'D4488'</td><td class=b>= VG110,D700</td> <td>'SR95A'</td><td>= C2100UZ</td> </tr><tr><td>'D4326'</td><td>= FE200</td> <td class=b>'D4490'</td><td class=b>= SP-610UZ</td> <td>'SR971'</td><td>= C100,D370</td> </tr><tr><td>'D4327'</td><td>= FE190/X750</td> <td class=b>'D4492'</td><td class=b>= SZ-10</td> <td>'SR973'</td><td>= C2,D230</td> </tr><tr><td>'D4328'</td><td>= u760,S760</td> <td class=b>'D4494'</td><td class=b>= SZ-20</td> <td>'SX151'</td><td>= E100RS</td> </tr><tr><td>'D4330'</td><td>= FE180/X745</td> <td class=b>'D4496'</td><td class=b>= SZ-30MR</td> <td>'SX351'</td><td>= C3000Z / C3030Z</td> </tr><tr><td>'D4331'</td><td>= u1000/S1000</td> <td class=b>'D4498'</td><td class=b>= SP-810UZ</td> <td>'SX354'</td><td>= C3040Z</td> </tr><tr><td>'D4332'</td><td>= u770SW,S770SW</td> <td class=b>'D4500'</td><td class=b>= SZ-11</td> <td>'SX355'</td><td>= C2040Z</td> </tr><tr><td>'D4333'</td><td>= FE240/X795</td> <td class=b>'D4504'</td><td class=b>= TG-615</td> <td>'SX357'</td><td>= C700UZ</td> </tr><tr><td>'D4334'</td><td>= FE210,X775</td> <td class=b>'D4508'</td><td class=b>= TG-620</td> <td>'SX358'</td><td>= C200Z,D510Z</td> </tr><tr><td>'D4336'</td><td>= FE230/X790</td> <td class=b>'D4510'</td><td class=b>= TG-820</td> <td>'SX374'</td><td>= C3100Z,C3020Z</td> </tr><tr><td>'D4337'</td><td>= FE220,X785</td> <td class=b>'D4512'</td><td class=b>= TG-1</td> <td>'SX552'</td><td>= C4040Z</td> </tr><tr><td>'D4338'</td><td>= u725SW,S725SW</td> <td class=b>'D4516'</td><td class=b>= SH-21</td> <td>'SX553'</td><td>= C40Z,D40Z</td> </tr><tr><td>'D4339'</td><td>= FE250/X800</td> <td class=b>'D4519'</td><td class=b>= SZ-14</td> <td>'SX556'</td><td>= C730UZ</td> </tr><tr><td>'D4341'</td><td>= u780,S780</td> <td class=b>'D4520'</td><td class=b>= SZ-31MR</td> <td>'SX558'</td><td>= C5050Z</td> </tr><tr><td>'D4343'</td><td>= u790SW,S790SW</td> <td class=b>'D4521'</td><td class=b>= SH-25MR</td> <td>'SX571'</td><td>= C120,D380</td> </tr><tr><td>'D4344'</td><td>= u1020,S1020</td> <td class=b>'D4523'</td><td class=b>= SP-720UZ</td> <td>'SX574'</td><td>= C300Z,D550Z</td> </tr><tr><td>'D4346'</td><td>= FE15,X10</td> <td class=b>'D4529'</td><td class=b>= VG170</td> <td>'SX575'</td><td>= C4100Z,C4000Z</td> </tr><tr><td>'D4348'</td><td>= FE280,X820,C520</td> <td class=b>'D4531'</td><td class=b>= XZ-2</td> <td>'SX751'</td><td>= X200,D560Z,C350Z</td> </tr><tr><td>'D4349'</td><td>= FE300,X830</td> <td class=b>'D4535'</td><td class=b>= SP-620UZ</td> <td>'SX752'</td><td>= X300,D565Z,C450Z</td> </tr><tr><td>'D4350'</td><td>= u820,S820</td> <td class=b>'D4536'</td><td class=b>= TG-320</td> <td>'SX753'</td><td>= C750UZ</td> </tr><tr><td>'D4351'</td><td>= u1200,S1200</td> <td class=b>'D4537'</td><td class=b>= VR340,D750</td> <td>'SX754'</td><td>= C740UZ</td> </tr><tr><td>'D4352'</td><td>= FE270,X815,C510</td> <td class=b>'D4538'</td><td class=b>= VG160,X990,D745</td> <td>'SX755'</td><td>= C755UZ</td> </tr><tr><td>'D4353'</td><td>= u795SW,S795SW</td> <td class=b>'D4541'</td><td class=b>= SZ-12</td> <td>'SX756'</td><td>= C5060WZ</td> </tr><tr><td>'D4354'</td><td>= u1030SW,S1030SW</td> <td class=b>'D4545'</td><td class=b>= VH410</td> <td>'SX757'</td><td>= C8080WZ</td> </tr><tr><td>'D4355'</td><td>= SP560UZ</td> <td class=b>'D4546'</td><td class=b>= XZ-10</td> <td>'SX758'</td><td>= X350,D575Z,C360Z</td> </tr><tr><td>'D4356'</td><td>= u1010,S1010</td> <td class=b>'D4547'</td><td class=b>= TG-2</td> <td>'SX759'</td><td>= X400,D580Z,C460Z</td> </tr><tr><td>'D4357'</td><td>= u830,S830</td> <td class=b>'D4548'</td><td class=b>= TG-830</td> <td>'SX75A'</td><td>= AZ-2ZOOM</td> </tr><tr><td>'D4359'</td><td>= u840,S840</td> <td class=b>'D4549'</td><td class=b>= TG-630</td> <td>'SX75B'</td><td>= D595Z,C500Z</td> </tr><tr><td>'D4360'</td><td>= FE350WIDE,X865</td> <td class=b>'D4550'</td><td class=b>= SH-50</td> <td>'SX75C'</td><td>= X550,D545Z,C480Z</td> </tr><tr><td>'D4361'</td><td>= u850SW,S850SW</td> <td class=b>'D4553'</td><td class=b>= SZ-16,DZ-105</td> <td>'SX75D'</td><td>= IR-300</td> </tr><tr><td>'D4362'</td><td>= FE340,X855,C560</td> <td class=b>'D4562'</td><td class=b>= SP-820UZ</td> <td>'SX75F'</td><td>= C55Z,C5500Z</td> </tr><tr><td>'D4363'</td><td>= FE320,X835,C540</td> <td class=b>'D4566'</td><td class=b>= SZ-15</td> <td>'SX75G'</td><td>= C170,D425</td> </tr><tr><td>'D4364'</td><td>= SP570UZ</td> <td class=b>'D4572'</td><td class=b>= STYLUS1</td> <td>'SX75J'</td><td>= C180,D435</td> </tr><tr><td>'D4366'</td><td>= FE330,X845,C550</td> <td class=b>'D4574'</td><td class=b>= TG-3</td> <td>'SX771'</td><td>= C760UZ</td> </tr><tr><td>'D4368'</td><td>= FE310,X840,C530</td> <td class=b>'D4575'</td><td class=b>= TG-850</td> <td>'SX772'</td><td>= C770UZ</td> </tr><tr><td>'D4370'</td><td>= u1050SW,S1050SW</td> <td class=b>'D4579'</td><td class=b>= SP-100EE</td> <td>'SX773'</td><td>= C745UZ</td> </tr><tr><td>'D4371'</td><td>= u1060,S1060</td> <td class=b>'D4580'</td><td class=b>= SH-60</td> <td>'SX774'</td><td>= X250,D560Z,C350Z</td> </tr><tr><td>'D4372'</td><td>= FE370,X880,C575</td> <td class=b>'D4581'</td><td class=b>= SH-1</td> <td>'SX775'</td><td>= X100,D540Z,C310Z</td> </tr><tr><td>'D4374'</td><td>= SP565UZ</td> <td class=b>'D4582'</td><td class=b>= TG-835</td> <td>'SX776'</td><td>= C460ZdelSol</td> </tr><tr><td>'D4377'</td><td>= u1040,S1040</td> <td class=b>'D4585'</td><td class=b>= SH-2</td> <td>'SX777'</td><td>= C765UZ</td> </tr><tr><td>'D4378'</td><td>= FE360,X875,C570</td> <td class=b>'D4586'</td><td class=b>= TG-4</td> <td>'SX77A'</td><td>= D555Z,C315Z</td> </tr><tr><td>'D4379'</td><td>= FE20,X15,C25</td> <td class=b>'D4587'</td><td class=b>= TG-860</td> <td>'SX851'</td><td>= C7070WZ</td> </tr><tr><td>'D4380'</td><td>= uT6000,ST6000</td> <td class=b>'D4809'</td><td class=b>= C2500L</td> <td>'SX852'</td><td>= C70Z,C7000Z</td> </tr><tr><td>'D4381'</td><td>= uT8000,ST8000</td> <td class=b>'D4842'</td><td class=b>= E-10</td> <td>'SX853'</td><td>= SP500UZ</td> </tr><tr><td>'D4382'</td><td>= u9000,S9000</td> <td class=b>'D4856'</td><td class=b>= C-1</td> <td>'SX854'</td><td>= SP310</td> </tr><tr><td>'D4384'</td><td>= SP590UZ</td> <td class=b>'D4857'</td><td class=b>= C-1Z,D-150Z</td> <td>'SX855'</td><td>= SP350</td> </tr><tr><td>'D4385'</td><td>= FE3010,X895</td> <td class=b>'DCHC'</td><td class=b>= D500L</td> <td>'SX873'</td><td>= SP320</td> </tr><tr><td>'D4386'</td><td>= FE3000,X890</td> <td class=b>'DCHT'</td><td class=b>= D600L / D620L</td> <td>'SX875'</td><td>= FE180/X745</td> </tr><tr><td>'D4387'</td><td>= FE35,X30</td> <td class=b>'K0055'</td><td class=b>= AIR-A01</td> <td>'SX876'</td><td>= FE190/X750</td> </tr><tr><td>'D4388'</td><td>= u550WP,S550WP</td> <td class=b>'S0003'</td><td class=b>= E-330</td> <td>&nbsp;</td><td>&nbsp;</td> </tr><tr><td>'D4390'</td><td>= FE5000,X905</td> <td class=b>'S0004'</td><td class=b>= E-500</td> <td>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='TextInfo'>Olympus TextInfo Tags</a></h2> <p>This information is in text format (similar to APP12 information, but with spaces instead of linefeeds). Below are tags which have been observed, but any information found here will be extracted, even if the tag is not listed.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Resolution'</td> <td>Resolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Type'</td> <td>CameraType</td> <td class=c>N</td> <td>--&gt; <a href='Olympus.html#CameraType'>Olympus CameraType Values</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Equipment'>Olympus Equipment Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>EquipmentVersion</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0100 = 256'>0x0100</td> <td>CameraType2</td> <td class=c>string[6]</td> <td>--&gt; <a href='Olympus.html#CameraType'>Olympus CameraType Values</a></td></tr> <tr> <td title='0x0101 = 257'>0x0101</td> <td>SerialNumber</td> <td class=c>string[32]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0102 = 258'>0x0102</td> <td>InternalSerialNumber</td> <td class=c>string[32]</td> <td><span class=s><span class=n>(16 digits: 0-3=model, 4=year, 5-6=month, 8-12=unit number)</span></span></td></tr> <tr> <td title='0x0103 = 259'>0x0103</td> <td>FocalPlaneDiagonal</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0104 = 260'>0x0104</td> <td>BodyFirmwareVersion</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0201 = 513'>0x0201</td> <td>LensType</td> <td class=c>int8u[6]</td> <td>--&gt; <a href='Olympus.html#LensType'>Olympus LensType Values</a> <br><span class='n s'>(6 numbers: 0. Make, 1. Unknown, 2. Model, 3. Sub-model, 4-5. Unknown. Only the Make, Model and Sub-model are used to identify the lens type)</span></td></tr> <tr class=b> <td title='0x0202 = 514'>0x0202</td> <td>LensSerialNumber</td> <td class=c>string[32]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0203 = 515'>0x0203</td> <td>LensModel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0204 = 516'>0x0204</td> <td>LensFirmwareVersion</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0205 = 517'>0x0205</td> <td>MaxApertureAtMinFocal</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0206 = 518'>0x0206</td> <td>MaxApertureAtMaxFocal</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0207 = 519'>0x0207</td> <td>MinFocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0208 = 520'>0x0208</td> <td>MaxFocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x020a = 522'>0x020a</td> <td>MaxAperture</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x020b = 523'>0x020b</td> <td>LensProperties</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0301 = 769'>0x0301</td> <td>Extender</td> <td class=c>int8u[6]</td> <td><span class=s><span class=n>(6 numbers: 0. Make, 1. Unknown, 2. Model, 3. Sub-model, 4-5. Unknown. Only the Make and Model are used to identify the extender)</span> <br>&#39;0 00&#39; = None <br>&#39;0 04&#39; = Olympus Zuiko Digital EC-14 1.4x Teleconverter <br>&#39;0 08&#39; = Olympus EX-25 Extension Tube <br>&#39;0 10&#39; = Olympus Zuiko Digital EC-20 2.0x Teleconverter</span></td></tr> <tr class=b> <td title='0x0302 = 770'>0x0302</td> <td>ExtenderSerialNumber</td> <td class=c>string[32]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0303 = 771'>0x0303</td> <td>ExtenderModel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0304 = 772'>0x0304</td> <td>ExtenderFirmwareVersion</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0403 = 1027'>0x0403</td> <td>ConversionLens</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1000 = 4096'>0x1000</td> <td>FlashType</td> <td class=c>int16u</td> <td><span class=s>0 = None <br>2 = Simple E-System <br>3 = E-System</span></td></tr> <tr> <td title='0x1001 = 4097'>0x1001</td> <td>FlashModel</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = None <br>1 = FL-20 <br>2 = FL-50 <br>3 = RF-11 <br>4 = TF-22</td><td>&nbsp;&nbsp;</td> <td>5 = FL-36 <br>6 = FL-50R <br>7 = FL-36R <br>9 = FL-14 <br>11 = FL-600R</td></tr></table> </td></tr> <tr class=b> <td title='0x1002 = 4098'>0x1002</td> <td>FlashFirmwareVersion</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1003 = 4099'>0x1003</td> <td>FlashSerialNumber</td> <td class=c>string[32]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LensType'>Olympus LensType Values</a></h2> <p>The numerical values below are given in hexadecimal. (Prior to ExifTool 9.15 these were in decimal.)</p> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>LensType</th></tr> <tr><td>'0 00 00'</td><td>= None</td> </tr><tr><td>'0 01 00'</td><td>= Olympus Zuiko Digital ED 50mm F2.0 Macro</td> </tr><tr><td>'0 01 01'</td><td>= Olympus Zuiko Digital 40-150mm F3.5-4.5</td> </tr><tr><td>'0 01 10'</td><td>= Olympus M.Zuiko Digital ED 14-42mm F3.5-5.6</td> </tr><tr><td>'0 02 00'</td><td>= Olympus Zuiko Digital ED 150mm F2.0</td> </tr><tr><td>'0 02 10'</td><td>= Olympus M.Zuiko Digital 17mm F2.8 Pancake</td> </tr><tr><td>'0 03 00'</td><td>= Olympus Zuiko Digital ED 300mm F2.8</td> </tr><tr><td>'0 03 10'</td><td>= Olympus M.Zuiko Digital ED 14-150mm F4.0-5.6 [II]</td> </tr><tr><td>'0 04 10'</td><td>= Olympus M.Zuiko Digital ED 9-18mm F4.0-5.6</td> </tr><tr><td>'0 05 00'</td><td>= Olympus Zuiko Digital 14-54mm F2.8-3.5</td> </tr><tr><td>'0 05 01'</td><td>= Olympus Zuiko Digital Pro ED 90-250mm F2.8</td> </tr><tr><td>'0 05 10'</td><td>= Olympus M.Zuiko Digital ED 14-42mm F3.5-5.6 L</td> </tr><tr><td>'0 06 00'</td><td>= Olympus Zuiko Digital ED 50-200mm F2.8-3.5</td> </tr><tr><td>'0 06 01'</td><td>= Olympus Zuiko Digital ED 8mm F3.5 Fisheye</td> </tr><tr><td>'0 06 10'</td><td>= Olympus M.Zuiko Digital ED 40-150mm F4.0-5.6</td> </tr><tr><td>'0 07 00'</td><td>= Olympus Zuiko Digital 11-22mm F2.8-3.5</td> </tr><tr><td>'0 07 01'</td><td>= Olympus Zuiko Digital 18-180mm F3.5-6.3</td> </tr><tr><td>'0 07 10'</td><td>= Olympus M.Zuiko Digital ED 12mm F2.0</td> </tr><tr><td>'0 08 01'</td><td>= Olympus Zuiko Digital 70-300mm F4.0-5.6</td> </tr><tr><td>'0 08 10'</td><td>= Olympus M.Zuiko Digital ED 75-300mm F4.8-6.7</td> </tr><tr><td>'0 09 10'</td><td>= Olympus M.Zuiko Digital 14-42mm F3.5-5.6 II</td> </tr><tr><td>'0 10 01'</td><td>= Kenko Tokina Reflex 300mm F6.3 MF Macro</td> </tr><tr><td>'0 10 10'</td><td>= Olympus M.Zuiko Digital ED 12-50mm F3.5-6.3 EZ</td> </tr><tr><td>'0 11 10'</td><td>= Olympus M.Zuiko Digital 45mm F1.8</td> </tr><tr><td>'0 12 10'</td><td>= Olympus M.Zuiko Digital ED 60mm F2.8 Macro</td> </tr><tr><td>'0 13 10'</td><td>= Olympus M.Zuiko Digital 14-42mm F3.5-5.6 II R</td> </tr><tr><td>'0 14 10'</td><td>= Olympus M.Zuiko Digital ED 40-150mm F4.0-5.6 R</td> </tr><tr><td>'0 15 00'</td><td>= Olympus Zuiko Digital ED 7-14mm F4.0</td> </tr><tr><td>'0 15 10'</td><td>= Olympus M.Zuiko Digital ED 75mm F1.8</td> </tr><tr><td>'0 16 10'</td><td>= Olympus M.Zuiko Digital 17mm F1.8</td> </tr><tr><td>'0 17 00'</td><td>= Olympus Zuiko Digital Pro ED 35-100mm F2.0</td> </tr><tr><td>'0 18 00'</td><td>= Olympus Zuiko Digital 14-45mm F3.5-5.6</td> </tr><tr><td>'0 18 10'</td><td>= Olympus M.Zuiko Digital ED 75-300mm F4.8-6.7 II</td> </tr><tr><td>'0 19 10'</td><td>= Olympus M.Zuiko Digital ED 12-40mm F2.8 Pro</td> </tr><tr><td>'0 20 00'</td><td>= Olympus Zuiko Digital 35mm F3.5 Macro</td> </tr><tr><td>'0 20 10'</td><td>= Olympus M.Zuiko Digital ED 40-150mm F2.8 Pro</td> </tr><tr><td>'0 21 10'</td><td>= Olympus M.Zuiko Digital ED 14-42mm F3.5-5.6 EZ</td> </tr><tr><td>'0 22 00'</td><td>= Olympus Zuiko Digital 17.5-45mm F3.5-5.6</td> </tr><tr><td>'0 22 10'</td><td>= Olympus M.Zuiko Digital 25mm F1.8</td> </tr><tr><td>'0 23 00'</td><td>= Olympus Zuiko Digital ED 14-42mm F3.5-5.6</td> </tr><tr><td>'0 23 10'</td><td>= Olympus M.Zuiko Digital ED 7-14mm F2.8 Pro</td> </tr><tr><td>'0 24 00'</td><td>= Olympus Zuiko Digital ED 40-150mm F4.0-5.6</td> </tr><tr><td>'0 24 10'</td><td>= Olympus M.Zuiko Digital ED 300mm F4.0 IS Pro</td> </tr><tr><td>'0 25 10'</td><td>= Olympus M.Zuiko Digital ED 8mm F1.8 Fisheye Pro</td> </tr><tr><td>'0 30 00'</td><td>= Olympus Zuiko Digital ED 50-200mm F2.8-3.5 SWD</td> </tr><tr><td>'0 31 00'</td><td>= Olympus Zuiko Digital ED 12-60mm F2.8-4.0 SWD</td> </tr><tr><td>'0 32 00'</td><td>= Olympus Zuiko Digital ED 14-35mm F2.0 SWD</td> </tr><tr><td>'0 33 00'</td><td>= Olympus Zuiko Digital 25mm F2.8</td> </tr><tr><td>'0 34 00'</td><td>= Olympus Zuiko Digital ED 9-18mm F4.0-5.6</td> </tr><tr><td>'0 35 00'</td><td>= Olympus Zuiko Digital 14-54mm F2.8-3.5 II</td> </tr><tr><td>'1 01 00'</td><td>= Sigma 18-50mm F3.5-5.6 DC</td> </tr><tr><td>'1 01 10'</td><td>= Sigma 30mm F2.8 EX DN</td> </tr><tr><td>'1 02 00'</td><td>= Sigma 55-200mm F4.0-5.6 DC</td> </tr><tr><td>'1 02 10'</td><td>= Sigma 19mm F2.8 EX DN</td> </tr><tr><td>'1 03 00'</td><td>= Sigma 18-125mm F3.5-5.6 DC</td> </tr><tr><td>'1 03 10'</td><td>= Sigma 30mm F2.8 DN | A</td> </tr><tr><td>'1 04 00'</td><td>= Sigma 18-125mm F3.5-5.6 DC</td> </tr><tr><td>'1 04 10'</td><td>= Sigma 19mm F2.8 DN | A</td> </tr><tr><td>'1 05 00'</td><td>= Sigma 30mm F1.4 EX DC HSM</td> </tr><tr><td>'1 05 10'</td><td>= Sigma 60mm F2.8 DN | A</td> </tr><tr><td>'1 06 00'</td><td>= Sigma APO 50-500mm F4.0-6.3 EX DG HSM</td> </tr><tr><td>'1 07 00'</td><td>= Sigma Macro 105mm F2.8 EX DG</td> </tr><tr><td>'1 08 00'</td><td>= Sigma APO Macro 150mm F2.8 EX DG HSM</td> </tr><tr><td>'1 09 00'</td><td>= Sigma 18-50mm F2.8 EX DC Macro</td> </tr><tr><td>'1 10 00'</td><td>= Sigma 24mm F1.8 EX DG Aspherical Macro</td> </tr><tr><td>'1 11 00'</td><td>= Sigma APO 135-400mm F4.5-5.6 DG</td> </tr><tr><td>'1 12 00'</td><td>= Sigma APO 300-800mm F5.6 EX DG HSM</td> </tr><tr><td>'1 13 00'</td><td>= Sigma 30mm F1.4 EX DC HSM</td> </tr><tr><td>'1 14 00'</td><td>= Sigma APO 50-500mm F4.0-6.3 EX DG HSM</td> </tr><tr><td>'1 15 00'</td><td>= Sigma 10-20mm F4.0-5.6 EX DC HSM</td> </tr><tr><td>'1 16 00'</td><td>= Sigma APO 70-200mm F2.8 II EX DG Macro HSM</td> </tr><tr><td>'1 17 00'</td><td>= Sigma 50mm F1.4 EX DG HSM</td> </tr><tr><td>'2 01 00'</td><td>= Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.</td> </tr><tr><td>'2 01 10'</td><td>= Lumix G Vario 14-45mm F3.5-5.6 Asph. Mega OIS</td> </tr><tr><td>'2 02 00'</td><td>= Leica D Summilux 25mm F1.4 Asph.</td> </tr><tr><td>'2 02 10'</td><td>= Lumix G Vario 45-200mm F4.0-5.6 Mega OIS</td> </tr><tr><td>'2 03 00'</td><td>= Leica D Vario Elmar 14-50mm F3.8-5.6 Asph. Mega OIS</td> </tr><tr><td>'2 03 01'</td><td>= Leica D Vario Elmar 14-50mm F3.8-5.6 Asph.</td> </tr><tr><td>'2 03 10'</td><td>= Lumix G Vario HD 14-140mm F4.0-5.8 Asph. Mega OIS</td> </tr><tr><td>'2 04 00'</td><td>= Leica D Vario Elmar 14-150mm F3.5-5.6</td> </tr><tr><td>'2 04 10'</td><td>= Lumix G Vario 7-14mm F4.0 Asph.</td> </tr><tr><td>'2 05 10'</td><td>= Lumix G 20mm F1.7 Asph.</td> </tr><tr><td>'2 06 10'</td><td>= Leica DG Macro-Elmarit 45mm F2.8 Asph. Mega OIS</td> </tr><tr><td>'2 07 10'</td><td>= Lumix G Vario 14-42mm F3.5-5.6 Asph. Mega OIS</td> </tr><tr><td>'2 08 10'</td><td>= Lumix G Fisheye 8mm F3.5</td> </tr><tr><td>'2 09 10'</td><td>= Lumix G Vario 100-300mm F4.0-5.6 Mega OIS</td> </tr><tr><td>'2 10 10'</td><td>= Lumix G 14mm F2.5 Asph.</td> </tr><tr><td>'2 11 10'</td><td>= Lumix G 12.5mm F12 3D</td> </tr><tr><td>'2 12 10'</td><td>= Leica DG Summilux 25mm F1.4 Asph.</td> </tr><tr><td>'2 13 10'</td><td>= Lumix G X Vario PZ 45-175mm F4.0-5.6 Asph. Power OIS</td> </tr><tr><td>'2 14 10'</td><td>= Lumix G X Vario PZ 14-42mm F3.5-5.6 Asph. Power OIS</td> </tr><tr><td>'2 15 10'</td><td>= Lumix G X Vario 12-35mm F2.8 Asph. Power OIS</td> </tr><tr><td>'2 16 10'</td><td>= Lumix G Vario 45-150mm F4.0-5.6 Asph. Mega OIS</td> </tr><tr><td>'2 17 10'</td><td>= Lumix G X Vario 35-100mm F2.8 Power OIS</td> </tr><tr><td>'2 18 10'</td><td>= Lumix G Vario 14-42mm F3.5-5.6 II Asph. Mega OIS</td> </tr><tr><td>'2 19 10'</td><td>= Lumix G Vario 14-140mm F3.5-5.6 Asph. Power OIS</td> </tr><tr><td>'2 20 10'</td><td>= Lumix G Vario 12-32mm F3.5-5.6 Asph. Mega OIS</td> </tr><tr><td>'2 21 10'</td><td>= Leica DG Nocticron 42.5mm F1.2 Asph. Power OIS</td> </tr><tr><td>'2 22 10'</td><td>= Leica DG Summilux 15mm F1.7 Asph.</td> </tr><tr><td>'2 24 10'</td><td>= Lumix G Macro 30mm F2.8 Asph. Mega OIS</td> </tr><tr><td>'2 25 10'</td><td>= Lumix G 42.5mm F1.7 Asph. Power OIS</td> </tr><tr><td>'3 01 00'</td><td>= Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.</td> </tr><tr><td>'3 02 00'</td><td>= Leica D Summilux 25mm F1.4 Asph.</td> </tr><tr><td>'5 01 10'</td><td>= Tamron 14-150mm F3.5-5.8 Di III</td> </tr></table></td></tr></table></blockquote> <h2><a name='CameraSettings'>Olympus CameraSettings Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>CameraSettingsVersion</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0100 = 256'>0x0100</td> <td>PreviewImageValid</td> <td class=c>int32u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td title='0x0101 = 257'>0x0101</td> <td>PreviewImageStart</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0102 = 258'>0x0102</td> <td>PreviewImageLength</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr> <td title='0x0200 = 512'>0x0200</td> <td>ExposureMode</td> <td class=c>int16u</td> <td><span class=s>1 = Manual <br>2 = Program <br>3 = Aperture-priority AE <br>4 = Shutter speed priority AE <br>5 = Program-shift</span></td></tr> <tr class=b> <td title='0x0201 = 513'>0x0201</td> <td>AELock</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x0202 = 514'>0x0202</td> <td>MeteringMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>2 = Center-weighted average <br>3 = Spot <br>5 = ESP <br>261 = Pattern+AF <br>515 = Spot+Highlight control <br>1027 = Spot+Shadow control</td></tr></table> </td></tr> <tr class=b> <td title='0x0203 = 515'>0x0203</td> <td>ExposureShift</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0204 = 516'>0x0204</td> <td>NDFilter</td> <td class=c>Y</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x0300 = 768'>0x0300</td> <td>MacroMode</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On <br>2 = Super Macro</span></td></tr> <tr> <td title='0x0301 = 769'>0x0301</td> <td>FocusMode</td> <td class=c>int16u[n]</td> <td><span class=s><span class=n>(1 or 2 values)</span> <br>[Value 0]</span><table class=cols><tr> <td>0 = Single AF <br>1 = Sequential shooting AF <br>2 = Continuous AF <br>3 = Multi AF <br>4 = Face detect <br>10 = MF</td></tr></table> <span class=s>[Value 1]</span><table class=cols><tr> <td>0x0 = (none) <br>Bit 0 = S-AF <br>Bit 2 = C-AF <br>Bit 4 = MF <br>Bit 5 = Face detect <br>Bit 6 = Imager AF <br>Bit 7 = Live View Magnification Frame <br>Bit 8 = AF sensor</td></tr></table> </td></tr> <tr class=b> <td title='0x0302 = 770'>0x0302</td> <td>FocusProcess</td> <td class=c>int16u[n]</td> <td><span class=s><span class=n>(1 or 2 values)</span> <br>[Value 0] <br>0 = AF Not Used <br>1 = AF Used</span></td></tr> <tr> <td title='0x0303 = 771'>0x0303</td> <td>AFSearch</td> <td class=c>int16u</td> <td><span class=s>0 = Not Ready <br>1 = Ready</span></td></tr> <tr class=b> <td title='0x0304 = 772'>0x0304</td> <td>AFAreas</td> <td class=c title=' ~ = Writable only with -n'>int32u[64]~</td> <td><span class=s><span class=n>(coordinates range from 0 to 255)</span></span></td></tr> <tr> <td title='0x0305 = 773'>0x0305</td> <td>AFPointSelected</td> <td class=c>rational64s[5]</td> <td><span class=s><span class=n>(coordinates expressed as a percent)</span></span></td></tr> <tr class=b> <td title='0x0306 = 774'>0x0306</td> <td>AFFineTune</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x0307 = 775'>0x0307</td> <td>AFFineTuneAdj</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0400 = 1024'>0x0400</td> <td>FlashMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Off <br>Bit 0 = On <br>Bit 1 = Fill-in <br>Bit 2 = Red-eye</td><td>&nbsp;&nbsp;</td> <td>Bit 3 = Slow-sync <br>Bit 4 = Forced On <br>Bit 5 = 2nd Curtain</td></tr></table> </td></tr> <tr> <td title='0x0401 = 1025'>0x0401</td> <td>FlashExposureComp</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0403 = 1027'>0x0403</td> <td>FlashRemoteControl</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Off <br>0x1 = Channel 1, Low <br>0x2 = Channel 2, Low <br>0x3 = Channel 3, Low <br>0x4 = Channel 4, Low <br>0x9 = Channel 1, Mid <br>0xa = Channel 2, Mid</td><td>&nbsp;&nbsp;</td> <td>0xb = Channel 3, Mid <br>0xc = Channel 4, Mid <br>0x11 = Channel 1, High <br>0x12 = Channel 2, High <br>0x13 = Channel 3, High <br>0x14 = Channel 4, High</td></tr></table> </td></tr> <tr> <td title='0x0404 = 1028'>0x0404</td> <td>FlashControlMode</td> <td class=c>int16u[n]</td> <td><span class=s><span class=n>(3 or 4 values)</span> <br>[Value 0] <br>0 = Off <br>3 = TTL <br>4 = Auto <br>5 = Manual</span></td></tr> <tr class=b> <td title='0x0405 = 1029'>0x0405</td> <td>FlashIntensity</td> <td class=c>rational64s[n]</td> <td><span class=s><span class=n>(3 or 4 values)</span> <br>&#39;undef undef undef&#39; = n/a <br>&#39;undef undef undef undef&#39; = n/a (x4)</span></td></tr> <tr> <td title='0x0406 = 1030'>0x0406</td> <td>ManualFlashStrength</td> <td class=c>rational64s[n]</td> <td><span class=s><span class=n>(3 or 4 values)</span> <br>&#39;undef undef undef&#39; = n/a <br>&#39;undef undef undef undef&#39; = n/a (x4)</span></td></tr> <tr class=b> <td title='0x0500 = 1280'>0x0500</td> <td>WhiteBalance2</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Auto (Keep Warm Color Off) <br>16 = 7500K (Fine Weather with Shade) <br>17 = 6000K (Cloudy) <br>18 = 5300K (Fine Weather) <br>20 = 3000K (Tungsten light) <br>21 = 3600K (Tungsten light-like) <br>22 = Auto Setup <br>23 = 5500K (Flash) <br>33 = 6600K (Daylight fluorescent) <br>34 = 4500K (Neutral white fluorescent) <br>35 = 4000K (Cool white fluorescent) <br>36 = White Fluorescent <br>48 = 3600K (Tungsten light-like) <br>67 = Underwater <br>256 = One Touch WB 1 <br>257 = One Touch WB 2 <br>258 = One Touch WB 3 <br>259 = One Touch WB 4 <br>512 = Custom WB 1 <br>513 = Custom WB 2 <br>514 = Custom WB 3 <br>515 = Custom WB 4</td></tr></table> </td></tr> <tr> <td title='0x0501 = 1281'>0x0501</td> <td>WhiteBalanceTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0502 = 1282'>0x0502</td> <td>WhiteBalanceBracket</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0503 = 1283'>0x0503</td> <td>CustomSaturation</td> <td class=c title=' ~ = Writable only with -n'>int16s[3]~</td> <td><span class=s><span class=n>(3 numbers: 1. CS Value, 2. Min, 3. Max)</span></span></td></tr> <tr class=b> <td title='0x0504 = 1284'>0x0504</td> <td>ModifiedSaturation</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = CM1 (Red Enhance) <br>2 = CM2 (Green Enhance) <br>3 = CM3 (Blue Enhance) <br>4 = CM4 (Skin Tones)</span></td></tr> <tr> <td title='0x0505 = 1285'>0x0505</td> <td>ContrastSetting</td> <td class=c>int16s[3]</td> <td><span class=s><span class=n>(value, min, max)</span></span></td></tr> <tr class=b> <td title='0x0506 = 1286'>0x0506</td> <td>SharpnessSetting</td> <td class=c>int16s[3]</td> <td><span class=s><span class=n>(value, min, max)</span></span></td></tr> <tr> <td title='0x0507 = 1287'>0x0507</td> <td>ColorSpace</td> <td class=c>int16u</td> <td><span class=s>0 = sRGB <br>1 = Adobe RGB <br>2 = Pro Photo RGB</span></td></tr> <tr class=b> <td title='0x0509 = 1289'>0x0509</td> <td>SceneMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Standard <br>6 = Auto <br>7 = Sport <br>8 = Portrait <br>9 = Landscape+Portrait <br>10 = Landscape <br>11 = Night Scene <br>12 = Self Portrait <br>13 = Panorama <br>14 = 2 in 1 <br>15 = Movie <br>16 = Landscape+Portrait <br>17 = Night+Portrait <br>18 = Indoor <br>19 = Fireworks <br>20 = Sunset <br>21 = Beauty Skin <br>22 = Macro <br>23 = Super Macro <br>24 = Food <br>25 = Documents <br>26 = Museum <br>27 = Shoot &amp; Select <br>28 = Beach &amp; Snow <br>29 = Self Protrait+Timer <br>30 = Candle <br>31 = Available Light <br>32 = Behind Glass <br>33 = My Mode</td><td>&nbsp;&nbsp;</td> <td>34 = Pet <br>35 = Underwater Wide1 <br>36 = Underwater Macro <br>37 = Shoot &amp; Select1 <br>38 = Shoot &amp; Select2 <br>39 = High Key <br>40 = Digital Image Stabilization <br>41 = Auction <br>42 = Beach <br>43 = Snow <br>44 = Underwater Wide2 <br>45 = Low Key <br>46 = Children <br>47 = Vivid <br>48 = Nature Macro <br>49 = Underwater Snapshot <br>50 = Shooting Guide <br>54 = Face Portrait <br>57 = Bulb <br>59 = Smile Shot <br>60 = Quick Shutter <br>63 = Slow Shutter <br>64 = Bird Watching <br>65 = Multiple Exposure <br>66 = e-Portrait <br>67 = Soft Background Shot <br>142 = Hand-held Starlight <br>154 = HDR</td></tr></table> </td></tr> <tr> <td title='0x050a = 1290'>0x050a</td> <td>NoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0x0 = (none) <br>Bit 0 = Noise Reduction <br>Bit 1 = Noise Filter <br>Bit 2 = Noise Filter (ISO Boost) <br>Bit 3 = Auto</span></td></tr> <tr class=b> <td title='0x050b = 1291'>0x050b</td> <td>DistortionCorrection</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x050c = 1292'>0x050c</td> <td>ShadingCompensation</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x050d = 1293'>0x050d</td> <td>CompressionFactor</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x050f = 1295'>0x050f</td> <td>Gradation</td> <td class=c>int16s[n]</td> <td><span class=s><span class=n>(3 or 4 values)</span> <br>[Values 0-2] <br>&#39;-1 -1 1&#39; = Low Key <br>&#39;0 -1 1&#39; = Normal <br>&#39;0 0 0&#39; = n/a <br>&#39;1 -1 1&#39; = High Key <br>[Value 3] <br>0 = User-Selected <br>1 = Auto-Override</span></td></tr> <tr class=b> <td title='0x0520 = 1312'>0x0520</td> <td>PictureMode</td> <td class=c>int16u[n]</td> <td><span class=s><span class=n>(1 or 2 values)</span> <br>[Value 0]</span><table class=cols><tr> <td>1 = Vivid <br>2 = Natural <br>3 = Muted <br>4 = Portrait</td><td>&nbsp;&nbsp;</td> <td>5 = i-Enhance <br>256 = Monotone <br>512 = Sepia</td></tr></table> </td></tr> <tr> <td title='0x0521 = 1313'>0x0521</td> <td>PictureModeSaturation</td> <td class=c>int16s[3]</td> <td><span class=s><span class=n>(value, min, max)</span></span></td></tr> <tr class=b> <td title='0x0522 = 1314'>0x0522</td> <td>PictureModeHue?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0523 = 1315'>0x0523</td> <td>PictureModeContrast</td> <td class=c>int16s[3]</td> <td><span class=s><span class=n>(value, min, max)</span></span></td></tr> <tr class=b> <td title='0x0524 = 1316'>0x0524</td> <td>PictureModeSharpness</td> <td class=c>int16s[3]</td> <td><span class=s><span class=n>(value, min, max)</span></span></td></tr> <tr> <td title='0x0525 = 1317'>0x0525</td> <td>PictureModeBWFilter</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = n/a <br>1 = Neutral <br>2 = Yellow</td><td>&nbsp;&nbsp;</td> <td>3 = Orange <br>4 = Red <br>5 = Green</td></tr></table> </td></tr> <tr class=b> <td title='0x0526 = 1318'>0x0526</td> <td>PictureModeTone</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>0 = n/a <br>1 = Neutral <br>2 = Sepia</td><td>&nbsp;&nbsp;</td> <td>3 = Blue <br>4 = Purple <br>5 = Green</td></tr></table> </td></tr> <tr> <td title='0x0527 = 1319'>0x0527</td> <td>NoiseFilter</td> <td class=c>int16s[3]</td> <td><span class=s>&#39;-1 -2 1&#39; = Low <br>&#39;-2 -2 1&#39; = Off <br>&#39;0 -2 1&#39; = Standard <br>&#39;0 0 0&#39; = n/a <br>&#39;1 -2 1&#39; = High</span></td></tr> <tr class=b> <td title='0x0529 = 1321'>0x0529</td> <td>ArtFilter</td> <td class=c>int16u[4]</td> <td><span class=s>[Value 0]</span><table class=cols><tr> <td>0 = Off <br>1 = Soft Focus <br>2 = Pop Art <br>3 = Pale &amp; Light Color <br>4 = Light Tone <br>5 = Pin Hole <br>6 = Grainy Film <br>9 = Diorama <br>10 = Cross Process <br>12 = Fish Eye <br>13 = Drawing <br>14 = Gentle Sepia <br>15 = Pale &amp; Light Color II <br>16 = Pop Art II <br>17 = Pin Hole II <br>18 = Pin Hole III <br>19 = Grainy Film II <br>20 = Dramatic Tone <br>21 = Punk</td><td>&nbsp;&nbsp;</td> <td>22 = Soft Focus 2 <br>23 = Sparkle <br>24 = Watercolor <br>25 = Key Line <br>26 = Key Line II <br>27 = Miniature <br>28 = Reflection <br>29 = Fragmented <br>31 = Cross Process II <br>32 = Dramatic Tone II <br>33 = Watercolor I <br>34 = Watercolor II <br>35 = Diorama II <br>36 = Vintage <br>37 = Vintage II <br>38 = Vintage III <br>39 = Partial Color <br>40 = Partial Color II <br>41 = Partial Color III</td></tr></table> </td></tr> <tr> <td title='0x052c = 1324'>0x052c</td> <td>MagicFilter</td> <td class=c>int16u[4]</td> <td><span class=s>[Value 0]</span><table class=cols><tr> <td>0 = Off <br>1 = Soft Focus <br>2 = Pop Art <br>3 = Pale &amp; Light Color <br>4 = Light Tone <br>5 = Pin Hole <br>6 = Grainy Film <br>9 = Diorama <br>10 = Cross Process <br>12 = Fish Eye <br>13 = Drawing <br>14 = Gentle Sepia <br>15 = Pale &amp; Light Color II <br>16 = Pop Art II <br>17 = Pin Hole II <br>18 = Pin Hole III <br>19 = Grainy Film II <br>20 = Dramatic Tone <br>21 = Punk</td><td>&nbsp;&nbsp;</td> <td>22 = Soft Focus 2 <br>23 = Sparkle <br>24 = Watercolor <br>25 = Key Line <br>26 = Key Line II <br>27 = Miniature <br>28 = Reflection <br>29 = Fragmented <br>31 = Cross Process II <br>32 = Dramatic Tone II <br>33 = Watercolor I <br>34 = Watercolor II <br>35 = Diorama II <br>36 = Vintage <br>37 = Vintage II <br>38 = Vintage III <br>39 = Partial Color <br>40 = Partial Color II <br>41 = Partial Color III</td></tr></table> </td></tr> <tr class=b> <td title='0x052d = 1325'>0x052d</td> <td>PictureModeEffect</td> <td class=c>int16s[3]</td> <td><span class=s>&#39;-1 -1 1&#39; = Low <br>&#39;0 -1 1&#39; = Standard <br>&#39;0 0 0&#39; = n/a <br>&#39;1 -1 1&#39; = High</span></td></tr> <tr> <td title='0x052e = 1326'>0x052e</td> <td>ToneLevel</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x052f = 1327'>0x052f</td> <td>ArtFilterEffect</td> <td class=c>int16u[20]</td> <td><span class=s>[Value 0]</span><table class=cols><tr> <td>0x0 = Off <br>0x1 = Soft Focus <br>0x2 = Pop Art <br>0x3 = Pale &amp; Light Color <br>0x4 = Light Tone <br>0x5 = Pin Hole <br>0x6 = Grainy Film <br>0x9 = Diorama <br>0xa = Cross Process <br>0xc = Fish Eye <br>0xd = Drawing <br>0xe = Gentle Sepia <br>0xf = Pale &amp; Light Color II <br>0x10 = Pop Art II <br>0x11 = Pin Hole II <br>0x12 = Pin Hole III <br>0x13 = Grainy Film II <br>0x14 = Dramatic Tone <br>0x15 = Punk</td><td>&nbsp;&nbsp;</td> <td>0x16 = Soft Focus 2 <br>0x17 = Sparkle <br>0x18 = Watercolor <br>0x19 = Key Line <br>0x1a = Key Line II <br>0x1b = Miniature <br>0x1c = Reflection <br>0x1d = Fragmented <br>0x1f = Cross Process II <br>0x20 = Dramatic Tone II <br>0x21 = Watercolor I <br>0x22 = Watercolor II <br>0x23 = Diorama II <br>0x24 = Vintage <br>0x25 = Vintage II <br>0x26 = Vintage III <br>0x27 = Partial Color <br>0x28 = Partial Color II <br>0x29 = Partial Color III</td></tr></table> <span class=s>[Value 4]</span><table class=cols><tr> <td>0x0 = No Effect <br>0x8010 = Star Light <br>0x8020 = Pin Hole <br>0x8030 = Frame</td><td>&nbsp;&nbsp;</td> <td>0x8040 = Soft Focus <br>0x8050 = White Edge <br>0x8060 = B&amp;W</td></tr></table> </td></tr> <tr> <td title='0x0600 = 1536'>0x0600</td> <td>DriveMode</td> <td class=c title=' ~ = Writable only with -n'>int16u[n]~</td> <td><span class=s><span class=n>(2 or 3 numbers: 1. Mode, 2. Shot number, 3. Mode bits)</span></span></td></tr> <tr class=b> <td title='0x0601 = 1537'>0x0601</td> <td>PanoramaMode</td> <td class=c title=' ~ = Writable only with -n'>int16u~</td> <td><span class=s><span class=n>(2 numbers: 1. Mode, 2. Shot number)</span></span></td></tr> <tr> <td title='0x0603 = 1539'>0x0603</td> <td>ImageQuality2</td> <td class=c>int16u</td> <td><span class=s>1 = SQ <br>2 = HQ <br>3 = SHQ <br>4 = RAW <br>5 = SQ (5)</span></td></tr> <tr class=b> <td title='0x0604 = 1540'>0x0604</td> <td>ImageStabilization</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>1 = On, Mode 1 <br>2 = On, Mode 2 <br>3 = On, Mode 3 <br>4 = On, Mode 4</span></td></tr> <tr> <td title='0x0804 = 2052'>0x0804</td> <td>StackedImage</td> <td class=c>int32u[2]</td> <td><span class=s>&#39;0 0&#39; = No <br>&#39;9 8&#39; = Focus-stacked (8 images)</span></td></tr> <tr class=b> <td title='0x0900 = 2304'>0x0900</td> <td>ManometerPressure</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0901 = 2305'>0x0901</td> <td>ManometerReading</td> <td class=c>int32s[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0902 = 2306'>0x0902</td> <td>ExtendedWBDetect</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x0903 = 2307'>0x0903</td> <td>RollAngle</td> <td class=c>int16s[2]</td> <td><span class=s><span class=n>(converted to degrees of clockwise camera rotation)</span></span></td></tr> <tr class=b> <td title='0x0904 = 2308'>0x0904</td> <td>PitchAngle</td> <td class=c>int16s[2]</td> <td><span class=s><span class=n>(converted to degrees of upward camera tilt)</span></span></td></tr> <tr> <td title='0x0908 = 2312'>0x0908</td> <td>DateTimeUTC</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='RawDevelopment'>Olympus RawDevelopment Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>RawDevVersion</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0100 = 256'>0x0100</td> <td>RawDevExposureBiasValue</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0101 = 257'>0x0101</td> <td>RawDevWhiteBalanceValue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0102 = 258'>0x0102</td> <td>RawDevWBFineAdjustment</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0103 = 259'>0x0103</td> <td>RawDevGrayPoint</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0104 = 260'>0x0104</td> <td>RawDevSaturationEmphasis</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0105 = 261'>0x0105</td> <td>RawDevMemoryColorEmphasis</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0106 = 262'>0x0106</td> <td>RawDevContrastValue</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0107 = 263'>0x0107</td> <td>RawDevSharpnessValue</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0108 = 264'>0x0108</td> <td>RawDevColorSpace</td> <td class=c>int16u</td> <td><span class=s>0 = sRGB <br>1 = Adobe RGB <br>2 = Pro Photo RGB</span></td></tr> <tr> <td title='0x0109 = 265'>0x0109</td> <td>RawDevEngine</td> <td class=c>int16u</td> <td><span class=s>0 = High Speed <br>1 = High Function <br>2 = Advanced High Speed <br>3 = Advanced High Function</span></td></tr> <tr class=b> <td title='0x010a = 266'>0x010a</td> <td>RawDevNoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0x0 = (none) <br>Bit 0 = Noise Reduction <br>Bit 1 = Noise Filter <br>Bit 2 = Noise Filter (ISO Boost)</span></td></tr> <tr> <td title='0x010b = 267'>0x010b</td> <td>RawDevEditStatus</td> <td class=c>int16u</td> <td><span class=s>0 = Original <br>1 = Edited (Landscape) <br>6 = Edited (Portrait) <br>8 = Edited (Portrait)</span></td></tr> <tr class=b> <td title='0x010c = 268'>0x010c</td> <td>RawDevSettings</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = (none) <br>Bit 0 = WB Color Temp <br>Bit 1 = WB Gray Point <br>Bit 2 = Saturation <br>Bit 3 = Contrast</td><td>&nbsp;&nbsp;</td> <td>Bit 4 = Sharpness <br>Bit 5 = Color Space <br>Bit 6 = High Function <br>Bit 7 = Noise Reduction</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='RawDevelopment2'>Olympus RawDevelopment2 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>RawDevVersion</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0100 = 256'>0x0100</td> <td>RawDevExposureBiasValue</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0101 = 257'>0x0101</td> <td>RawDevWhiteBalance</td> <td class=c>int16u</td> <td><span class=s>1 = Color Temperature <br>2 = Gray Point</span></td></tr> <tr class=b> <td title='0x0102 = 258'>0x0102</td> <td>RawDevWhiteBalanceValue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0103 = 259'>0x0103</td> <td>RawDevWBFineAdjustment</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0104 = 260'>0x0104</td> <td>RawDevGrayPoint</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0105 = 261'>0x0105</td> <td>RawDevContrastValue</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0106 = 262'>0x0106</td> <td>RawDevSharpnessValue</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0107 = 263'>0x0107</td> <td>RawDevSaturationEmphasis</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0108 = 264'>0x0108</td> <td>RawDevMemoryColorEmphasis</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0109 = 265'>0x0109</td> <td>RawDevColorSpace</td> <td class=c>int16u</td> <td><span class=s>0 = sRGB <br>1 = Adobe RGB <br>2 = Pro Photo RGB</span></td></tr> <tr class=b> <td title='0x010a = 266'>0x010a</td> <td>RawDevNoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0x0 = (none) <br>Bit 0 = Noise Reduction <br>Bit 1 = Noise Filter <br>Bit 2 = Noise Filter (ISO Boost)</span></td></tr> <tr> <td title='0x010b = 267'>0x010b</td> <td>RawDevEngine</td> <td class=c>int16u</td> <td><span class=s>0 = High Speed <br>1 = High Function</span></td></tr> <tr class=b> <td title='0x010c = 268'>0x010c</td> <td>RawDevPictureMode</td> <td class=c>int16u</td> <td><span class=s>1 = Vivid <br>2 = Natural <br>3 = Muted <br>256 = Monotone <br>512 = Sepia</span></td></tr> <tr> <td title='0x010d = 269'>0x010d</td> <td>RawDevPMSaturation</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x010e = 270'>0x010e</td> <td>RawDevPMContrast</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x010f = 271'>0x010f</td> <td>RawDevPMSharpness</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0110 = 272'>0x0110</td> <td>RawDevPM_BWFilter</td> <td class=c>int16u</td> <td><span class=s>1 = Neutral <br>2 = Yellow <br>3 = Orange <br>4 = Red <br>5 = Green</span></td></tr> <tr> <td title='0x0111 = 273'>0x0111</td> <td>RawDevPMPictureTone</td> <td class=c>int16u</td> <td><span class=s>1 = Neutral <br>2 = Sepia <br>3 = Blue <br>4 = Purple <br>5 = Green</span></td></tr> <tr class=b> <td title='0x0112 = 274'>0x0112</td> <td>RawDevGradation</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0113 = 275'>0x0113</td> <td>RawDevSaturation3</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0119 = 281'>0x0119</td> <td>RawDevAutoGradation</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x0120 = 288'>0x0120</td> <td>RawDevPMNoiseFilter</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0121 = 289'>0x0121</td> <td>RawDevArtFilter</td> <td class=c>int16u[4]</td> <td><span class=s>[Value 0]</span><table class=cols><tr> <td>0 = Off <br>1 = Soft Focus <br>2 = Pop Art <br>3 = Pale &amp; Light Color <br>4 = Light Tone <br>5 = Pin Hole <br>6 = Grainy Film <br>9 = Diorama <br>10 = Cross Process <br>12 = Fish Eye <br>13 = Drawing <br>14 = Gentle Sepia <br>15 = Pale &amp; Light Color II <br>16 = Pop Art II <br>17 = Pin Hole II <br>18 = Pin Hole III <br>19 = Grainy Film II <br>20 = Dramatic Tone <br>21 = Punk</td><td>&nbsp;&nbsp;</td> <td>22 = Soft Focus 2 <br>23 = Sparkle <br>24 = Watercolor <br>25 = Key Line <br>26 = Key Line II <br>27 = Miniature <br>28 = Reflection <br>29 = Fragmented <br>31 = Cross Process II <br>32 = Dramatic Tone II <br>33 = Watercolor I <br>34 = Watercolor II <br>35 = Diorama II <br>36 = Vintage <br>37 = Vintage II <br>38 = Vintage III <br>39 = Partial Color <br>40 = Partial Color II <br>41 = Partial Color III</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='ImageProcessing'>Olympus ImageProcessing Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>ImageProcessingVersion</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0100 = 256'>0x0100</td> <td>WB_RBLevels</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0102 = 258'>0x0102</td> <td>WB_RBLevels3000K</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0103 = 259'>0x0103</td> <td>WB_RBLevels3300K</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0104 = 260'>0x0104</td> <td>WB_RBLevels3600K</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0105 = 261'>0x0105</td> <td>WB_RBLevels3900K</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0106 = 262'>0x0106</td> <td>WB_RBLevels4000K</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0107 = 263'>0x0107</td> <td>WB_RBLevels4300K</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0108 = 264'>0x0108</td> <td>WB_RBLevels4500K</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0109 = 265'>0x0109</td> <td>WB_RBLevels4800K</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x010a = 266'>0x010a</td> <td>WB_RBLevels5300K</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x010b = 267'>0x010b</td> <td>WB_RBLevels6000K</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x010c = 268'>0x010c</td> <td>WB_RBLevels6600K</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x010d = 269'>0x010d</td> <td>WB_RBLevels7500K</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x010e = 270'>0x010e</td> <td>WB_RBLevelsCWB1</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x010f = 271'>0x010f</td> <td>WB_RBLevelsCWB2</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0110 = 272'>0x0110</td> <td>WB_RBLevelsCWB3</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0111 = 273'>0x0111</td> <td>WB_RBLevelsCWB4</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0113 = 275'>0x0113</td> <td>WB_GLevel3000K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0114 = 276'>0x0114</td> <td>WB_GLevel3300K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0115 = 277'>0x0115</td> <td>WB_GLevel3600K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0116 = 278'>0x0116</td> <td>WB_GLevel3900K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0117 = 279'>0x0117</td> <td>WB_GLevel4000K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0118 = 280'>0x0118</td> <td>WB_GLevel4300K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0119 = 281'>0x0119</td> <td>WB_GLevel4500K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x011a = 282'>0x011a</td> <td>WB_GLevel4800K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x011b = 283'>0x011b</td> <td>WB_GLevel5300K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x011c = 284'>0x011c</td> <td>WB_GLevel6000K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x011d = 285'>0x011d</td> <td>WB_GLevel6600K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x011e = 286'>0x011e</td> <td>WB_GLevel7500K</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x011f = 287'>0x011f</td> <td>WB_GLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0200 = 512'>0x0200</td> <td>ColorMatrix</td> <td class=c>int16u[9]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0300 = 768'>0x0300</td> <td>Enhancer</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0301 = 769'>0x0301</td> <td>EnhancerValues</td> <td class=c>int16u[7]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0310 = 784'>0x0310</td> <td>CoringFilter</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0311 = 785'>0x0311</td> <td>CoringValues</td> <td class=c>int16u[7]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0600 = 1536'>0x0600</td> <td>BlackLevel2</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0610 = 1552'>0x0610</td> <td>GainBase</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0611 = 1553'>0x0611</td> <td>ValidBits</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0612 = 1554'>0x0612</td> <td>CropLeft</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0613 = 1555'>0x0613</td> <td>CropTop</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0614 = 1556'>0x0614</td> <td>CropWidth</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0615 = 1557'>0x0615</td> <td>CropHeight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0635 = 1589'>0x0635</td> <td>UnknownBlock1?</td> <td class=c>undef</td> <td><span class=s><span class=n>(large unknown data block in ORF images but not JPG images)</span></span></td></tr> <tr> <td title='0x0636 = 1590'>0x0636</td> <td>UnknownBlock2?</td> <td class=c>undef</td> <td><span class=s><span class=n>(large unknown data block in ORF images but not JPG images)</span></span></td></tr> <tr class=b> <td title='0x0805 = 2053'>0x0805</td> <td>SensorCalibration</td> <td class=c>int16s[2]</td> <td><span class=s><span class=n>(2 numbers: 1. recommended maximum, 2. calibration midpoint)</span></span></td></tr> <tr> <td title='0x1010 = 4112'>0x1010</td> <td>NoiseReduction2</td> <td class=c>int16u</td> <td><span class=s>0x0 = (none) <br>Bit 0 = Noise Reduction <br>Bit 1 = Noise Filter <br>Bit 2 = Noise Filter (ISO Boost)</span></td></tr> <tr class=b> <td title='0x1011 = 4113'>0x1011</td> <td>DistortionCorrection2</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x1012 = 4114'>0x1012</td> <td>ShadingCompensation2</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x101c = 4124'>0x101c</td> <td>MultipleExposureMode</td> <td class=c>int16u[2]</td> <td><span class=s>[Value 0] <br>0 = Off <br>2 = On (2 frames) <br>3 = On (3 frames)</span></td></tr> <tr> <td title='0x1103 = 4355'>0x1103</td> <td>UnknownBlock3?</td> <td class=c>undef</td> <td><span class=s><span class=n>(large unknown data block in ORF images but not JPG images)</span></span></td></tr> <tr class=b> <td title='0x1104 = 4356'>0x1104</td> <td>UnknownBlock4?</td> <td class=c>undef</td> <td><span class=s><span class=n>(large unknown data block in ORF images but not JPG images)</span></span></td></tr> <tr> <td title='0x1112 = 4370'>0x1112</td> <td>AspectRatio</td> <td class=c>int8u[2]</td> <td><table class=cols><tr> <td>&#39;1 1&#39; = 4:3 <br>&#39;1 4&#39; = 1:1 <br>&#39;2 1&#39; = 3:2 (RAW) <br>&#39;2 2&#39; = 3:2 <br>&#39;3 1&#39; = 16:9 (RAW) <br>&#39;3 3&#39; = 16:9 <br>&#39;4 1&#39; = 1:1 (RAW)</td><td>&nbsp;&nbsp;</td> <td>&#39;4 4&#39; = 6:6 <br>&#39;5 5&#39; = 5:4 <br>&#39;6 6&#39; = 7:6 <br>&#39;7 7&#39; = 6:5 <br>&#39;8 8&#39; = 7:5 <br>&#39;9 1&#39; = 3:4 (RAW) <br>&#39;9 9&#39; = 3:4</td></tr></table> </td></tr> <tr class=b> <td title='0x1113 = 4371'>0x1113</td> <td>AspectFrame</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x1200 = 4608'>0x1200</td> <td>FacesDetected</td> <td class=c>int32u[n]</td> <td><span class=s><span class=n>(2 or 3 values)</span></span></td></tr> <tr class=b> <td title='0x1201 = 4609'>0x1201</td> <td>FaceDetectArea</td> <td class=c>int16s[n]</td> <td><span class=s><span class=n>(for models with 2 values in FacesDetected this gives X/Y coordinates in the FaceDetectFrame for all 4 corners of the face rectangle. For models with 3 values in FacesDetected this gives X/Y coordinates, size and rotation angle of the face detect square)</span></span></td></tr> <tr> <td title='0x1202 = 4610'>0x1202</td> <td>MaxFaces</td> <td class=c>int32u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1203 = 4611'>0x1203</td> <td>FaceDetectFrameSize</td> <td class=c>int16u[6]</td> <td><span class=s><span class=n>(width/height of the full face detect frame)</span></span></td></tr> <tr> <td title='0x1207 = 4615'>0x1207</td> <td>FaceDetectFrameCrop</td> <td class=c>int16s[12]</td> <td><span class=s><span class=n>(X/Y offset and width/height of the cropped face detect frame)</span></span></td></tr> <tr class=b> <td title='0x1306 = 4870'>0x1306</td> <td>CameraTemperature</td> <td class=c>N</td> <td><span class=s><span class=n>(this seems to be in degrees C only for some models)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='FocusInfo'>Olympus FocusInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>FocusInfoVersion</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0209 = 521'>0x0209</td> <td>AutoFocus?</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x0210 = 528'>0x0210</td> <td>SceneDetect</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0211 = 529'>0x0211</td> <td>SceneArea?</td> <td class=c>int32u[8]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0212 = 530'>0x0212</td> <td>SceneDetectData?</td> <td class=c>int32u[720]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0300 = 768'>0x0300</td> <td>ZoomStepCount</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0301 = 769'>0x0301</td> <td>FocusStepCount</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0303 = 771'>0x0303</td> <td>FocusStepInfinity</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0304 = 772'>0x0304</td> <td>FocusStepNear</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0305 = 773'>0x0305</td> <td>FocusDistance</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0308 = 776'>0x0308</td> <td>AFPoint</td> <td class=c>int16u</td> <td><span class=s><span class=n>(for the E-3, E-5 and E-30 the value is separated into 2 parts: low 5 bits give AF point, upper bits give AF target selection mode)</span> <br>[Value 0]</span><table class=cols><tr> <td>0x0 = (none) <br>0x1 = Top-left (horizontal) <br>0x2 = Top-center (horizontal) <br>0x3 = Top-right (horizontal) <br>0x4 = Left (horizontal) <br>0x5 = Mid-left (horizontal) <br>0x6 = Center (horizontal) <br>0x7 = Mid-right (horizontal) <br>0x8 = Right (horizontal) <br>0x9 = Bottom-left (horizontal) <br>0xa = Bottom-center (horizontal) <br>0xb = Bottom-right (horizontal)</td><td>&nbsp;&nbsp;</td> <td>0xc = Top-left (vertical) <br>0xd = Top-center (vertical) <br>0xe = Top-right (vertical) <br>0xf = Left (vertical) <br>0x10 = Mid-left (vertical) <br>0x11 = Center (vertical) <br>0x12 = Mid-right (vertical) <br>0x13 = Right (vertical) <br>0x14 = Bottom-left (vertical) <br>0x15 = Bottom-center (vertical) <br>0x16 = Bottom-right (vertical) <br>0x1f = n/a</td></tr></table> <span class=s>[Value 1]</span><table class=cols><tr> <td>0x0 = Single Target <br>0x40 = All Target</td><td>&nbsp;&nbsp;</td> <td>0x80 = Dynamic Single Target <br>0xe0 = n/a</td></tr></table> <span class=s><span class=n>(models with 7-point AF)</span> <br>[Value 0] <br>0x0 = (none) <br>0x1 = Center <br>[Value 1] <br>0x0 = Single Target <br>0x40 = All Target <br><span class=n>(other models)</span> <br>0 = Left (or n/a) <br>1 = Center (horizontal) <br>2 = Right <br>3 = Center (vertical) <br>255 = None</span></td></tr> <tr class=b> <td title='0x0328 = 808'>0x0328</td> <td>AFInfo</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#AFInfo'>Olympus AFInfo Tags</a></td></tr> <tr> <td title='0x1201 = 4609'>0x1201</td> <td>ExternalFlash</td> <td class=c>int16u[2]</td> <td><span class=s>&#39;0 0&#39; = Off <br>&#39;1 0&#39; = On</span></td></tr> <tr class=b> <td title='0x1203 = 4611'>0x1203</td> <td>ExternalFlashGuideNumber?</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x1204 = 4612'>0x1204</td> <td>ExternalFlashBounce</td> <td class=c>int16u</td> <td><span class=s>0 = Bounce or Off <br>1 = Direct</span></td></tr> <tr class=b> <td title='0x1205 = 4613'>0x1205</td> <td>ExternalFlashZoom</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1208 = 4616'>0x1208</td> <td>InternalFlash</td> <td class=c>int16u[n]</td> <td><span class=s>0 = Off <br>1 = On <br>&#39;0 0&#39; = Off <br>&#39;1 0&#39; = On</span></td></tr> <tr class=b> <td title='0x1209 = 4617'>0x1209</td> <td>ManualFlash</td> <td class=c title=' ~ = Writable only with -n'>int16u[2]~</td> <td><span class=s><span class=n>(2 numbers: 1. 0=Off, 1=On, 2. Flash strength)</span></span></td></tr> <tr> <td title='0x120a = 4618'>0x120a</td> <td>MacroLED</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x1500 = 5376'>0x1500</td> <td>SensorTemperature</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td title='0x1600 = 5632'>0x1600</td> <td>ImageStabilization</td> <td class=c title=' ~ = Writable only with -n'>undef~</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AFInfo'>Olympus AFInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='FE'>Olympus FE Tags</a></h2> <p>Some FE models write a large number of tags here, but most of this information remains unknown.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0100 = 256'>0x0100</td> <td>BodyFirmwareVersion</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='RawInfo'>Olympus RawInfo Tags</a></h2> <p>These tags are found only in ORF images of some models (eg. C8080WZ).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>RawInfoVersion</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0100 = 256'>0x0100</td> <td>WB_RBLevelsUsed</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0110 = 272'>0x0110</td> <td>WB_RBLevelsAuto</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0120 = 288'>0x0120</td> <td>WB_RBLevelsShade</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0121 = 289'>0x0121</td> <td>WB_RBLevelsCloudy</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0122 = 290'>0x0122</td> <td>WB_RBLevelsFineWeather</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0123 = 291'>0x0123</td> <td>WB_RBLevelsTungsten</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0124 = 292'>0x0124</td> <td>WB_RBLevelsEveningSunlight</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0130 = 304'>0x0130</td> <td>WB_RBLevelsDaylightFluor</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0131 = 305'>0x0131</td> <td>WB_RBLevelsDayWhiteFluor</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0132 = 306'>0x0132</td> <td>WB_RBLevelsCoolWhiteFluor</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0133 = 307'>0x0133</td> <td>WB_RBLevelsWhiteFluorescent</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0200 = 512'>0x0200</td> <td>ColorMatrix2</td> <td class=c>int16u[9]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0310 = 784'>0x0310</td> <td>CoringFilter</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0311 = 785'>0x0311</td> <td>CoringValues</td> <td class=c>int16u[11]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0600 = 1536'>0x0600</td> <td>BlackLevel2</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0601 = 1537'>0x0601</td> <td>YCbCrCoefficients</td> <td class=c>N</td> <td><span class=s><span class=n>(stored as int16u[6], but extracted as rational32u[3])</span></span></td></tr> <tr class=b> <td title='0x0611 = 1553'>0x0611</td> <td>ValidPixelDepth</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0612 = 1554'>0x0612</td> <td>CropLeft</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0613 = 1555'>0x0613</td> <td>CropTop</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0614 = 1556'>0x0614</td> <td>CropWidth</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0615 = 1557'>0x0615</td> <td>CropHeight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1000 = 4096'>0x1000</td> <td>LightSource</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Unknown <br>16 = Shade <br>17 = Cloudy <br>18 = Fine Weather <br>20 = Tungsten (Incandescent) <br>22 = Evening Sunlight <br>33 = Daylight Fluorescent <br>34 = Day White Fluorescent <br>35 = Cool White Fluorescent <br>36 = White Fluorescent <br>256 = One Touch White Balance <br>512 = Custom 1-4</td></tr></table> </td></tr> <tr class=b> <td title='0x1001 = 4097'>0x1001</td> <td>WhiteBalanceComp</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x1010 = 4112'>0x1010</td> <td>SaturationSetting</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1011 = 4113'>0x1011</td> <td>HueSetting</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x1012 = 4114'>0x1012</td> <td>ContrastSetting</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1013 = 4115'>0x1013</td> <td>SharpnessSetting</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x2000 = 8192'>0x2000</td> <td>CMExposureCompensation</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2001 = 8193'>0x2001</td> <td>CMWhiteBalance</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x2002 = 8194'>0x2002</td> <td>CMWhiteBalanceComp</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2010 = 8208'>0x2010</td> <td>CMWhiteBalanceGrayPoint</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x2020 = 8224'>0x2020</td> <td>CMSaturation</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2021 = 8225'>0x2021</td> <td>CMHue</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x2022 = 8226'>0x2022</td> <td>CMContrast</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2023 = 8227'>0x2023</td> <td>CMSharpness</td> <td class=c>int16s[3]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='UnknownInfo'>Olympus UnknownInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='DSS'>Olympus DSS Tags</a></h2> <p>Information extracted from DSS/DS2 files and the ID3 XOLY frame of MP3 files written by some Olympus voice recorders.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>StartTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='50 = 0x32'>50</td> <td>EndTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='62 = 0x3e'>62</td> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='798 = 0x31e'>798</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MOV1'>Olympus MOV1 Tags</a></h2> <p>This information is found in MOV videos from Olympus models such as the D540Z, D595Z, FE100, FE110, FE115, FE170 and FE200.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>Model</td> <td class=c>N</td> <td>--&gt; <a href='Olympus.html#CameraType'>Olympus CameraType Values</a></td></tr> <tr> <td class=r title='38 = 0x26'>38</td> <td>ExposureUnknown?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='50 = 0x32'>50</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='72 = 0x48'>72</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MOV2'>Olympus MOV2 Tags</a></h2> <p>This information is found in MOV videos from Olympus models such as the FE120, FE140 and FE190.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>Model</td> <td class=c>N</td> <td><span class=s><span class=n>(the actual model name, no decoding necessary)</span></span></td></tr> <tr> <td class=r title='54 = 0x36'>54</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='58 = 0x3a'>58</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='66 = 0x42'>66</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='88 = 0x58'>88</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='193 = 0xc1'>193</td> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MP4'>Olympus MP4 Tags</a></h2> <p>This information is found in MP4 videos from Olympus models such as the u7040 and u9010.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>Model</td> <td class=c>N</td> <td><span class=s><span class=n>(oddly different than CameraType values in JPEG images by the same camera)</span></span><table class=cols><tr> <td>&#39;SG472&#39; = u7040,S7040 <br>&#39;SG473&#39; = u9010,S9010 <br>&#39;SG475&#39; = SP800UZ <br>&#39;SG551&#39; = SZ-30MR <br>&#39;SG553&#39; = SP-610UZ</td><td>&nbsp;&nbsp;</td> <td>&#39;SG554&#39; = SZ-10 <br>&#39;SG555&#39; = SZ-20 <br>&#39;SG573&#39; = SZ-14 <br>&#39;SG575&#39; = SP-620UZ</td></tr></table> </td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='104 = 0x68'>104</td> <td>MovableInfo</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#MovableInfo'>Olympus MovableInfo Tags</a></td></tr> <tr class=b> <td class=r title='114 = 0x72'>114</td> <td>MovableInfo</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#MovableInfo'>Olympus MovableInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='MovableInfo'>Olympus MovableInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>EncoderVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='60 = 0x3c'>60</td> <td>DecoderVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='131 = 0x83'>131</td> <td>Thumbnail</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#Thumbnail'>Olympus Thumbnail Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Thumbnail'>Olympus Thumbnail Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>ThumbnailWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>ThumbnailHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>ThumbnailLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ThumbnailOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MOV3'>Olympus MOV3 Tags</a></h2> <p>QuickTime information found in the TAGS atom of MOV videos from the E-M5.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'OLYM'</td> <td>OlympusAtom</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#OLYM2'>Olympus OLYM2 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='OLYM2'>Olympus OLYM2 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'prms'</td> <td>MakerNotes</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#prms'>Olympus prms Tags</a></td></tr> <tr class=b> <td>'scrn'</td> <td>PreviewInfo</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#scrn2'>Olympus scrn2 Tags</a></td></tr> <tr> <td>'thmb'</td> <td>ThumbInfo</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#thmb2'>Olympus thmb2 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='prms'>Olympus prms Tags</a></h2> <p>Information extracted from the &quot;prms&quot; atom in MOV videos from Olympus models such as the OM E-M5.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>Model</td> <td class=c>N</td> <td>--&gt; <a href='Olympus.html#CameraType'>Olympus CameraType Values</a></td></tr> <tr> <td class=r title='131 = 0x83'>131</td> <td>DateTime1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='157 = 0x9d'>157</td> <td>DateTime2</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='scrn2'>Olympus scrn2 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>OlympusPreview</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#scrn'>Olympus scrn Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='scrn'>Olympus scrn Tags</a></h2> <p>Information extracted from the &quot;scrn&quot; atom of Olympus MP4 videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PreviewImageLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>PreviewImage</td> <td class=c>N</td> <td><span class=s><span class=n>(640x480 JPEG preview image)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='thmb2'>Olympus thmb2 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ThumbnailWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>ThumbnailHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ThumbnailLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ThumbnailImage</td> <td class=c>N</td> <td><span class=s><span class=n>(160x120 JPEG thumbnail image)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='thmb'>Olympus thmb Tags</a></h2> <p>Information extracted from the &quot;thmb&quot; atom of Olympus MP4 videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ThumbnailLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ThumbnailImage</td> <td class=c>N</td> <td><span class=s><span class=n>(160x120 JPEG thumbnail image)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='OLYM'>Olympus OLYM Tags</a></h2> <p>Tags found in the OLYM atom of MP4 videos from the TG-810.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>Model</td> <td class=c>N</td> <td>--&gt; <a href='Olympus.html#CameraType'>Olympus CameraType Values</a></td></tr> <tr> <td class=r title='90 = 0x5a'>90</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='127 = 0x7f'>127</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='153 = 0x99'>153</td> <td>DateTime2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='265 = 0x109'>265</td> <td>ThumbnailWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='267 = 0x10b'>267</td> <td>ThumbnailHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AVI'>Olympus AVI Tags</a></h2> <p>This information is found in Olympus AVI videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>Model</td> <td class=c>N</td> <td>--&gt; <a href='Olympus.html#CameraType'>Olympus CameraType Values</a></td></tr> <tr> <td class=r title='94 = 0x5e'>94</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='131 = 0x83'>131</td> <td>DateTime1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='157 = 0x9d'>157</td> <td>DateTime2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='297 = 0x129'>297</td> <td>ThumbInfo</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#thmb2'>Olympus thmb2 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='WAV'>Olympus WAV Tags</a></h2> <p>This information is found in WAV files from Olympus PCM linear recorders like the LS-5, LS-10, LS-11.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28</td> <td>FileNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='38 = 0x26'>38</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td><span class=s><span class=n>(time at start of recording)</span></span></td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>DateTimeEnd</td> <td class=c>N</td> <td><span class=s><span class=n>(time at end of recording)</span></span></td></tr> <tr> <td class=r title='62 = 0x3e'>62</td> <td>RecordingTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='512 = 0x200'>512</td> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='522 = 0x20a'>522</td> <td>Index01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='532 = 0x214'>532</td> <td>Index02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='542 = 0x21e'>542</td> <td>Index03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='552 = 0x228'>552</td> <td>Index04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='562 = 0x232'>562</td> <td>Index05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='572 = 0x23c'>572</td> <td>Index06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='582 = 0x246'>582</td> <td>Index07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='592 = 0x250'>592</td> <td>Index08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='602 = 0x25a'>602</td> <td>Index09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='612 = 0x264'>612</td> <td>Index10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='622 = 0x26e'>622</td> <td>Index11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='632 = 0x278'>632</td> <td>Index12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='642 = 0x282'>642</td> <td>Index13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='652 = 0x28c'>652</td> <td>Index14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='662 = 0x296'>662</td> <td>Index15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='672 = 0x2a0'>672</td> <td>Index16</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 6, 2016</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/OOXML.html�������������������������������������������������������000644 �000765 �000024 �00000013212 12535340444 020615� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>OOXML Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>OOXML Tags</h2> <p>The Office Open XML (OOXML) format was introduced with Microsoft Office 2007 and is used by file types such as DOCX, PPTX and XLSX. These are essentially ZIP archives containing XML files. The table below lists some tags which have been observed in OOXML documents, but ExifTool will extract any tags found from XML files of the OOXML document properties (&quot;docProps&quot;) directory.</p> <p><b>Tips:</b></p> <p>1) Structural ZIP tags may be ignored (if desired) with <code>--ZIP:all</code> on the command line.</p> <p>2) Tags may be grouped by their document number in the ZIP archive with the <code>-g3</code> or <code>-G3</code> option.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AppVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Application</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Category</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Characters</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CharactersWithSpaces</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CheckedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Client</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Company</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateCompleted</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Department</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Destination</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Disposition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Division</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DocSecurity</td> <td class=c>N</td> <td><span class=s>0 = None <br>1 = Password protected <br>2 = Read-only recommended <br>4 = Read-only enforced <br>8 = Locked for annotations</span></td></tr> <tr class=b> <td>DocumentNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Editor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ForwardTo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Group</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HeadingPairs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HiddenSlides</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HyperlinkBase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HyperlinksChanged</td> <td class=c>N</td> <td><span class=s>&#39;false&#39; = No <br>&#39;true&#39; = Yes</span></td></tr> <tr class=b> <td>Keywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Language</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LastModifiedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LastPrinted</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Lines</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LinksUpToDate</td> <td class=c>N</td> <td><span class=s>&#39;false&#39; = No <br>&#39;true&#39; = Yes</span></td></tr> <tr class=b> <td>MMClips</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Mailstop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Manager</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Matter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Notes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Office</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Owner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Pages</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Paragraphs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PresentationFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Project</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Publisher</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Purpose</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ReceivedFrom</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RecordedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RecordedDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Reference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RevisionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ScaleCrop</td> <td class=c>N</td> <td><span class=s>&#39;false&#39; = No <br>&#39;true&#39; = Yes</span></td></tr> <tr class=b> <td>SharedDoc</td> <td class=c>N</td> <td><span class=s>&#39;false&#39; = No <br>&#39;true&#39; = Yes</span></td></tr> <tr> <td>Slides</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Source</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Status</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TelephoneNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Template</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TitlesOfParts</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TotalEditTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Typist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Words</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jun 29, 2010</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/OpenEXR.html�����������������������������������������������������000644 �000765 �000024 �00000010766 12527350232 021207� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>OpenEXR Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>OpenEXR Tags</h2> <p>Information extracted from EXR images. See <a href="http://www.openexr.com/">http://www.openexr.com/</a> for the official specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'_lay'</td> <td>Layout</td> <td class=c>N</td> <td><span class=s>0x0 = Scan Lines <br>0x200 = Tiles</span></td></tr> <tr class=b> <td>'_ver'</td> <td>EXRVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'adoptedNeutral'</td> <td>AdoptedNeutral</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'altitude'</td> <td>GPSAltitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'aperture'</td> <td>Aperture</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'capDate'</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'channels'</td> <td>Channels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'chromaticities'</td> <td>Chromaticities</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'comments'</td> <td>Comments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'compression'</td> <td>Compression</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = None <br>1 = RLE <br>2 = ZIPS <br>3 = ZIP</td><td>&nbsp;&nbsp;</td> <td>4 = PIZ <br>5 = PXR24 <br>6 = B44 <br>7 = B44A</td></tr></table> </td></tr> <tr> <td>'dataWindow'</td> <td>DataWindow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'displayWindow'</td> <td>DisplayWindow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'envmap'</td> <td>EnvironmentMap</td> <td class=c>N</td> <td><span class=s>0 = Latitude/Longitude <br>1 = Cube</span></td></tr> <tr class=b> <td>'expTime'</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'focus'</td> <td>FocusDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'framesPerSecond'</td> <td>FramesPerSecond</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'isoSpeed'</td> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'keyCode'</td> <td>KeyCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'latitude'</td> <td>GPSLatitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'lineOrder'</td> <td>LineOrder</td> <td class=c>N</td> <td><span class=s>0 = Increasing Y <br>1 = Decreasing Y <br>2 = Random Y</span></td></tr> <tr> <td>'longitude'</td> <td>GPSLongitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'lookModTransform'</td> <td>LookModTransform</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'multiView'</td> <td>MultiView</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'owner'</td> <td>Owner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pixelAspectRatio'</td> <td>PixelAspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'preview'</td> <td>Preview</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'renderingTransform'</td> <td>RenderingTransform</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'screenWindowCenter'</td> <td>ScreenWindowCenter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'screenWindowWidth'</td> <td>ScreenWindowWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'tiles'</td> <td>Tiles</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'timeCode'</td> <td>TimeCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'utcOffset'</td> <td>TimeZone</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'whiteLuminance'</td> <td>WhiteLuminance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'worldToCamera'</td> <td>WorldToCamera</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'worldToNDC'</td> <td>WorldToNDC</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'wrapmodes'</td> <td>WrapModes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'xDensity'</td> <td>XResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Dec 14, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������Image-ExifTool-10.10/html/TagNames/Palm.html��������������������������������������������������������000644 �000765 �000024 �00000022623 12527350231 020612� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Palm Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Palm Tags</h2> <p>Information extracted from Palm database files (PDB and PRC extensions), Mobipocket electronic books (MOBI), and Amazon Kindle KF7 and KF8 books (AZW and AZW3).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>DatabaseName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>LastBackupDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>ModificationNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>PalmFileType</td> <td class=c>N</td> <td><table class=cols><tr> <td>&#39;.pdfADBE&#39; = Adobe Reader <br>&#39;BDOCWrdS&#39; = WordSmith <br>&#39;BOOKMOBI&#39; = Mobipocket <br>&#39;BVokBDIC&#39; = BDicty <br>&#39;DATALSdb&#39; = LIST <br>&#39;DB99DBOS&#39; = DB (Database program) <br>&#39;DataPPrs&#39; = eReader <br>&#39;DataPlkr&#39; = Plucker <br>&#39;DataSprd&#39; = QuickSheet <br>&#39;DataTlMl&#39; = TealMeal <br>&#39;DataTlPt&#39; = TealPaint <br>&#39;InfoINDB&#39; = InfoView <br>&#39;InfoTlIf&#39; = TealInfo <br>&#39;JbDbJBas&#39; = JFile <br>&#39;JfDbJFil&#39; = JFile Pro <br>&#39;Mdb1Mdb1&#39; = MobileDB <br>&#39;PNRdPPrs&#39; = eReader <br>&#39;PmDBPmDB&#39; = HanDBase <br>&#39;SDocSilX&#39; = iSilo 3 <br>&#39;SM01SMem&#39; = SuperMemo <br>&#39;TEXtREAd&#39; = PalmDOC <br>&#39;TEXtTlDc&#39; = TealDoc <br>&#39;TdatTide&#39; = Tides <br>&#39;ToGoToGo&#39; = iSilo <br>&#39;ToRaTRPW&#39; = TomeRaider <br>&#39;dataTDBP&#39; = ThinkDB <br>&#39;vIMGView&#39; = FireViewer (ImageViewer) <br>&#39;zTXTGPlm&#39; = Weasel</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='MOBI'>Palm MOBI Tags</a></h2> <p>Information extracted from the MOBI header of Mobipocket and Amazon Kindle KF7 and KF8 files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Compression</td> <td class=c>N</td> <td><span class=s>1 = None <br>2 = PalmDOC <br>17480 = HUFF/CDIC</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>UncompressedTextLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>Encryption</td> <td class=c>N</td> <td><span class=s>0 = None <br>1 = Old Mobipocket <br>2 = Mobipocket</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>MobiType</td> <td class=c>N</td> <td><table class=cols><tr> <td>2 = Mobipocket Book <br>3 = PalmDoc Book <br>4 = Audio <br>232 = mobipocket? generated by kindlegen1.2 <br>248 = KF8: generated by kindlegen2 <br>257 = News <br>258 = News_Feed <br>259 = News_Magazine <br>513 = PICS <br>514 = WORD <br>515 = XLS <br>516 = PPT <br>517 = TEXT <br>518 = HTML</td></tr></table> </td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>CodePage</td> <td class=c>N</td> <td><span class=s>1252 = Windows Latin 1 (Western European) <br>65001 = Unicode (UTF-8)</span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>MobiVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>BookName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>MinimumVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='EXTH'>Palm EXTH Tags</a></h2> <p>Information extracted from the MOBI extended header.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>DRMServerID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>DRMCommerceID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>DRM_E-BookBaseID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0064 = 100'>0x0064</td> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0065 = 101'>0x0065</td> <td>Publisher</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0066 = 102'>0x0066</td> <td>Imprint</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0067 = 103'>0x0067</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0068 = 104'>0x0068</td> <td>ISBN</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0069 = 105'>0x0069</td> <td>Subject</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x006a = 106'>0x006a</td> <td>PublishDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x006b = 107'>0x006b</td> <td>Review</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x006c = 108'>0x006c</td> <td>Contributor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x006d = 109'>0x006d</td> <td>Rights</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x006e = 110'>0x006e</td> <td>SubjectCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x006f = 111'>0x006f</td> <td>BookType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0070 = 112'>0x0070</td> <td>Source</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0071 = 113'>0x0071</td> <td>ASIN</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0072 = 114'>0x0072</td> <td>BookVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0073 = 115'>0x0073</td> <td>SampleFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0074 = 116'>0x0074</td> <td>StartReading</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0075 = 117'>0x0075</td> <td>Adult</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0076 = 118'>0x0076</td> <td>RetailPrice</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0077 = 119'>0x0077</td> <td>RetailPriceCurrency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x007d = 125'>0x007d</td> <td>ResourceCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0081 = 129'>0x0081</td> <td>KF8CoverURI</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00c8 = 200'>0x00c8</td> <td>DictionaryShortName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00cc = 204'>0x00cc</td> <td>CreatorSoftware</td> <td class=c>N</td> <td><span class=s>1 = Mobigen <br>2 = Mobipocket <br>200 = Kindlegen (Windows) <br>201 = Kindlegen (Linux) <br>202 = Kindlegen (Mac)</span></td></tr> <tr class=b> <td title='0x00cd = 205'>0x00cd</td> <td>CreatorMajorVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00ce = 206'>0x00ce</td> <td>CreatorMinorVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00cf = 207'>0x00cf</td> <td>CreatorBuildNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00d0 = 208'>0x00d0</td> <td>Watermark</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00d1 = 209'>0x00d1</td> <td>Tamper-proofKeys</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0191 = 401'>0x0191</td> <td>ClippingLimit</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0192 = 402'>0x0192</td> <td>PublisherLimit</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0194 = 404'>0x0194</td> <td>TextToSpeech</td> <td class=c>N</td> <td><span class=s>0 = Enabled <br>1 = Disabled</span></td></tr> <tr class=b> <td title='0x0195 = 405'>0x0195</td> <td>RentalFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0196 = 406'>0x0196</td> <td>RentalExpirationDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x01f5 = 501'>0x01f5</td> <td>CDEType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x01f6 = 502'>0x01f6</td> <td>LastUpdateTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x01f7 = 503'>0x01f7</td> <td>UpdatedTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x01f8 = 504'>0x01f8</td> <td>ASIN2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x020c = 524'>0x020c</td> <td>Language</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x020d = 525'>0x020d</td> <td>Alignment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0217 = 535'>0x0217</td> <td>CreatorBuildNumber2</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised May 31, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Panasonic.html���������������������������������������������������000644 �000765 �000024 �00000143510 12572071567 021647� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Panasonic Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Panasonic Tags</h2> <p> These tags are used in Panasonic/Leica cameras. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>ImageQuality</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = TIFF <br>2 = High <br>3 = Normal <br>6 = Very High</td><td>&nbsp;&nbsp;</td> <td>7 = Raw <br>9 = Motion Picture <br>11 = Full HD Movie <br>12 = 4k Movie</td></tr></table> </td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>FirmwareVersion</td> <td class=c>undef</td> <td><span class=s><span class=n>(for some camera models such as the FZ30 this may be an internal production reference number and not the actual firmware version)</span></span></td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Auto <br>2 = Daylight <br>3 = Cloudy <br>4 = Incandescent <br>5 = Manual</td><td>&nbsp;&nbsp;</td> <td>8 = Flash <br>10 = Black &amp; White <br>11 = Manual <br>12 = Shade <br>13 = Kelvin</td></tr></table> </td></tr> <tr class=b> <td title='0x0007 = 7'>0x0007</td> <td>FocusMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Auto <br>2 = Manual <br>4 = Auto, Focus button <br>5 = Auto, Continuous</td><td>&nbsp;&nbsp;</td> <td>6 = AF-S <br>7 = AF-C <br>8 = AF-F</td></tr></table> </td></tr> <tr> <td title='0x000f = 15'>0x000f</td> <td>AFAreaMode</td> <td class=c>int8u[2]</td> <td><span class=s><span class=n>(DMC-FZ10)</span> <br>&#39;0 1&#39; = Spot Mode On <br>&#39;0 16&#39; = Spot Mode Off <br><span class=n>(other models)</span></span><table class=cols><tr> <td>16 = Normal? <br>&#39;0 1&#39; = 9-area <br>&#39;0 16&#39; = 3-area (high speed) <br>&#39;0 23&#39; = 23-area <br>&#39;1 0&#39; = Spot Focusing <br>&#39;1 1&#39; = 5-area <br>&#39;16 0&#39; = 1-area <br>&#39;16 16&#39; = 1-area (high speed) <br>&#39;32 0&#39; = Tracking <br>&#39;32 1&#39; = 3-area (left)? <br>&#39;32 2&#39; = 3-area (center)? <br>&#39;32 3&#39; = 3-area (right)? <br>&#39;64 0&#39; = Face Detect <br>&#39;128 0&#39; = Spot Focusing 2</td></tr></table> </td></tr> <tr class=b> <td title='0x001a = 26'>0x001a</td> <td>ImageStabilization</td> <td class=c>int16u</td> <td><span class=s>2 = On, Mode 1 <br>3 = Off <br>4 = On, Mode 2 <br>5 = Panning <br>6 = On, Mode 3</span></td></tr> <tr> <td title='0x001c = 28'>0x001c</td> <td>MacroMode</td> <td class=c>int16u</td> <td><span class=s>1 = On <br>2 = Off <br>257 = Tele-Macro <br>513 = Macro Zoom</span></td></tr> <tr class=b> <td title='0x001f = 31'>0x001f</td> <td>ShootingMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Normal <br>2 = Portrait <br>3 = Scenery <br>4 = Sports <br>5 = Night Portrait <br>6 = Program <br>7 = Aperture Priority <br>8 = Shutter Priority <br>9 = Macro <br>10 = Spot <br>11 = Manual <br>12 = Movie Preview <br>13 = Panning <br>14 = Simple <br>15 = Color Effects <br>16 = Self Portrait <br>17 = Economy <br>18 = Fireworks <br>19 = Party <br>20 = Snow <br>21 = Night Scenery <br>22 = Food <br>23 = Baby <br>24 = Soft Skin <br>25 = Candlelight <br>26 = Starry Night <br>27 = High Sensitivity <br>28 = Panorama Assist <br>29 = Underwater <br>30 = Beach <br>31 = Aerial Photo <br>32 = Sunset <br>33 = Pet <br>34 = Intelligent ISO <br>35 = Clipboard <br>36 = High Speed Continuous Shooting <br>37 = Intelligent Auto <br>39 = Multi-aspect <br>41 = Transform</td><td>&nbsp;&nbsp;</td> <td>42 = Flash Burst <br>43 = Pin Hole <br>44 = Film Grain <br>45 = My Color <br>46 = Photo Frame <br>48 = Movie <br>51 = HDR <br>52 = Peripheral Defocus <br>55 = Handheld Night Shot <br>57 = 3D <br>59 = Creative Control <br>62 = Panorama <br>63 = Glass Through <br>64 = HDR <br>66 = Digital Filter <br>67 = Clear Portrait <br>68 = Silky Skin <br>69 = Backlit Softness <br>70 = Clear in Backlight <br>71 = Relaxing Tone <br>72 = Sweet Child&#39;s Face <br>73 = Distinct Scenery <br>74 = Bright Blue Sky <br>75 = Romantic Sunset Glow <br>76 = Vivid Sunset Glow <br>77 = Glistening Water <br>78 = Clear Nightscape <br>79 = Cool Night Sky <br>80 = Warm Glowing Nightscape <br>81 = Artistic Nightscape <br>82 = Glittering Illuminations <br>83 = Clear Night Portrait <br>84 = Soft Image of a Flower <br>85 = Appetizing Food <br>86 = Cute Desert <br>87 = Freeze Animal Motion <br>88 = Clear Sports Shot <br>89 = Monochrome <br>90 = Creative Control</td></tr></table> </td></tr> <tr> <td title='0x0020 = 32'>0x0020</td> <td>Audio</td> <td class=c>int16u</td> <td><span class=s>1 = Yes <br>2 = No <br>3 = Stereo</span></td></tr> <tr class=b> <td title='0x0021 = 33'>0x0021</td> <td>DataDump</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0023 = 35'>0x0023</td> <td>WhiteBalanceBias</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0024 = 36'>0x0024</td> <td>FlashBias</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0025 = 37'>0x0025</td> <td>InternalSerialNumber</td> <td class=c>undef[16]</td> <td><span class=s><span class=n>(this number is unique, and contains the date of manufacture, but is not the same as the number printed on the camera body)</span></span></td></tr> <tr class=b> <td title='0x0026 = 38'>0x0026</td> <td>PanasonicExifVersion</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr> <td title='0x0028 = 40'>0x0028</td> <td>ColorEffect</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Off <br>2 = Warm <br>3 = Cool <br>4 = Black &amp; White</td><td>&nbsp;&nbsp;</td> <td>5 = Sepia <br>6 = Happy <br>8 = Vivid</td></tr></table> </td></tr> <tr class=b> <td title='0x0029 = 41'>0x0029</td> <td>TimeSincePowerOn</td> <td class=c>int32u</td> <td><span class=s><span class=n>(time in 1/100 s from when the camera was powered on to when the image is written to memory card)</span></span></td></tr> <tr> <td title='0x002a = 42'>0x002a</td> <td>BurstMode</td> <td class=c>int16u</td> <td><span class=s><span class=n>(decoding may be different for some models)</span></span><table class=cols><tr> <td>0 = Off <br>1 = On <br>2 = Auto Exposure Bracketing (AEB) <br>4 = Unlimited <br>8 = White Balance Bracketing <br>17 = On (with flash)</td></tr></table> </td></tr> <tr class=b> <td title='0x002b = 43'>0x002b</td> <td>SequenceNumber</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x002c = 44'>0x002c</td> <td>ContrastMode</td> <td class=c>int16u</td> <td><span class=s><span class=n>(this decoding seems to work for some models such as the LC1, LX2, FZ7, FZ8, FZ18 and FZ50, but may not be correct for other models such as the FX10, G1, L1, L10 and LC80)</span></span><table class=cols><tr> <td>0x0 = Normal <br>0x1 = Low <br>0x2 = High <br>0x6 = Medium Low <br>0x7 = Medium High</td><td>&nbsp;&nbsp;</td> <td>0xd = High Dynamic <br>0x100 = Low <br>0x110 = Normal <br>0x120 = High</td></tr></table> <span class=s><span class=n>(these values are used by the G2, GF1, GF2, GF3, GF5 and GF6)</span> <br>0 = -2 <br>1 = -1 <br>2 = Normal <br>3 = +1 <br>4 = +2 <br>5 = Normal 2 <br>7 = Nature (Color Film) <br>9 = Expressive <br>12 = Smooth (Color Film) or Pure (My Color) <br>17 = Dynamic (B&amp;W Film) <br>22 = Smooth (B&amp;W Film) <br>25 = High Dynamic <br>26 = Retro <br>27 = Dynamic (Color Film) <br>28 = Low Key <br>29 = Toy Effect <br>32 = Vibrant (Color Film) or Expressive (My Color) <br>33 = Elegant (My Color) <br>37 = Nostalgic (Color Film) <br>41 = Dynamic Art (My Color) <br>42 = Retro (My Color) <br>45 = Cinema <br>47 = Dynamic Mono <br>50 = Impressive Art <br>51 = Cross Process <br>100 = High Dynamic 2 <br>101 = Retro 2 <br>102 = High Key 2 <br>103 = Low Key 2 <br>104 = Toy Effect 2 <br>107 = Expressive 2 <br>112 = Sepia <br>117 = Miniature <br>122 = Dynamic Monochrome <br>127 = Old Days <br>132 = Dynamic Monochrome 2 <br>135 = Impressive Art 2 <br>136 = Cross Process 2 <br>137 = Toy Pop <br>138 = Fantasy <br>256 = Normal 3 <br>272 = Standard <br>288 = High <br><span class=n>(these values are used by the TZ10 and ZS7)</span> <br>0 = Normal <br>1 = -2 <br>2 = +2 <br>5 = -1 <br>6 = +1</span></td></tr> <tr class=b> <td title='0x002d = 45'>0x002d</td> <td>NoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0 = Standard <br>1 = Low (-1) <br>2 = High (+1) <br>3 = Lowest (-2) <br>4 = Highest (+2)</span></td></tr> <tr> <td title='0x002e = 46'>0x002e</td> <td>SelfTimer</td> <td class=c>int16u</td> <td><span class=s>1 = Off <br>2 = 10 s <br>3 = 2 s <br>4 = 10 s / 3 pictures</span></td></tr> <tr class=b> <td title='0x0030 = 48'>0x0030</td> <td>Rotation</td> <td class=c>int16u</td> <td><span class=s>1 = Horizontal (normal) <br>3 = Rotate 180 <br>6 = Rotate 90 CW <br>8 = Rotate 270 CW</span></td></tr> <tr> <td title='0x0031 = 49'>0x0031</td> <td>AFAssistLamp</td> <td class=c>int16u</td> <td><span class=s>1 = Fired <br>2 = Enabled but Not Used <br>3 = Disabled but Required <br>4 = Disabled and Not Required</span></td></tr> <tr class=b> <td title='0x0032 = 50'>0x0032</td> <td>ColorMode</td> <td class=c>int16u</td> <td><span class=s>0 = Normal <br>1 = Natural <br>2 = Vivid</span></td></tr> <tr> <td title='0x0033 = 51'>0x0033</td> <td>BabyAge</td> <td class=c>string</td> <td><span class=s><span class=n>(or pet age)</span></span></td></tr> <tr class=b> <td title='0x0034 = 52'>0x0034</td> <td>OpticalZoomMode</td> <td class=c>int16u</td> <td><span class=s>1 = Standard <br>2 = Extended</span></td></tr> <tr> <td title='0x0035 = 53'>0x0035</td> <td>ConversionLens</td> <td class=c>int16u</td> <td><span class=s>1 = Off <br>2 = Wide <br>3 = Telephoto <br>4 = Macro</span></td></tr> <tr class=b> <td title='0x0036 = 54'>0x0036</td> <td>TravelDay</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0039 = 57'>0x0039</td> <td>Contrast</td> <td class=c>int16u</td> <td><span class=s>0 = Normal</span></td></tr> <tr class=b> <td title='0x003a = 58'>0x003a</td> <td>WorldTimeLocation</td> <td class=c>int16u</td> <td><span class=s>1 = Home <br>2 = Destination</span></td></tr> <tr> <td title='0x003b = 59'>0x003b</td> <td>TextStamp</td> <td class=c>int16u</td> <td><span class=s>1 = Off <br>2 = On</span></td></tr> <tr class=b> <td title='0x003c = 60'>0x003c</td> <td>ProgramISO</td> <td class=c>int16u</td> <td><span class=s>65534 = Intelligent ISO <br>65535 = n/a</span></td></tr> <tr> <td title='0x003d = 61'>0x003d</td> <td>AdvancedSceneType</td> <td class=c>int16u</td> <td><span class=s><span class=n>(used together with SceneMode to derive Composite AdvancedSceneMode)</span></span></td></tr> <tr class=b> <td title='0x003e = 62'>0x003e</td> <td>TextStamp</td> <td class=c>int16u</td> <td><span class=s>1 = Off <br>2 = On</span></td></tr> <tr> <td title='0x003f = 63'>0x003f</td> <td>FacesDetected</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0040 = 64'>0x0040</td> <td>Saturation</td> <td class=c>int16u</td> <td><span class=s>0 = Normal</span></td></tr> <tr> <td title='0x0041 = 65'>0x0041</td> <td>Sharpness</td> <td class=c>int16u</td> <td><span class=s>0 = Normal</span></td></tr> <tr class=b> <td title='0x0042 = 66'>0x0042</td> <td>FilmMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = n/a <br>1 = Standard (color) <br>2 = Dynamic (color) <br>3 = Nature (color) <br>4 = Smooth (color)</td><td>&nbsp;&nbsp;</td> <td>5 = Standard (B&amp;W) <br>6 = Dynamic (B&amp;W) <br>7 = Smooth (B&amp;W) <br>10 = Nostalgic <br>11 = Vibrant</td></tr></table> </td></tr> <tr> <td title='0x0044 = 68'>0x0044</td> <td>ColorTempKelvin</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0045 = 69'>0x0045</td> <td>BracketSettings</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = No Bracket <br>1 = 3 Images, Sequence 0/-/+ <br>2 = 3 Images, Sequence -/0/+ <br>3 = 5 Images, Sequence 0/-/+ <br>4 = 5 Images, Sequence -/0/+ <br>5 = 7 Images, Sequence 0/-/+ <br>6 = 7 Images, Sequence -/0/+</td></tr></table> </td></tr> <tr> <td title='0x0046 = 70'>0x0046</td> <td>WBShiftAB</td> <td class=c>int16u</td> <td><span class=s><span class=n>(positive is a shift toward blue)</span></span></td></tr> <tr class=b> <td title='0x0047 = 71'>0x0047</td> <td>WBShiftGM</td> <td class=c>int16u</td> <td><span class=s><span class=n>(positive is a shift toward green)</span></span></td></tr> <tr> <td title='0x0048 = 72'>0x0048</td> <td>FlashCurtain</td> <td class=c>int16u</td> <td><span class=s>0 = n/a <br>1 = 1st <br>2 = 2nd</span></td></tr> <tr class=b> <td title='0x0049 = 73'>0x0049</td> <td>LongExposureNoiseReduction</td> <td class=c>int16u</td> <td><span class=s>1 = Off <br>2 = On</span></td></tr> <tr> <td title='0x004b = 75'>0x004b</td> <td>PanasonicImageWidth</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x004c = 76'>0x004c</td> <td>PanasonicImageHeight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x004d = 77'>0x004d</td> <td>AFPointPosition</td> <td class=c>rational64u[2]</td> <td><span class=s><span class=n>(X Y coordinates of primary AF area center, in the range 0.0 to 1.0)</span></span></td></tr> <tr class=b> <td title='0x004e = 78'>0x004e</td> <td>FaceDetInfo</td> <td class=c>-</td> <td>--&gt; <a href='Panasonic.html#FaceDetInfo'>Panasonic FaceDetInfo Tags</a></td></tr> <tr> <td title='0x0051 = 81'>0x0051</td> <td>LensType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0052 = 82'>0x0052</td> <td>LensSerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0053 = 83'>0x0053</td> <td>AccessoryType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0054 = 84'>0x0054</td> <td>AccessorySerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0059 = 89'>0x0059</td> <td>Transform</td> <td class=c>undef[4]</td> <td><span class=s><span class=n>(decoded as two 16-bit signed integers)</span> <br>&#39;-1 1&#39; = Slim Low <br>&#39;-3 2&#39; = Slim High <br>&#39;0 0&#39; = Off <br>&#39;1 1&#39; = Stretch Low <br>&#39;3 2&#39; = Stretch High</span></td></tr> <tr class=b> <td title='0x005d = 93'>0x005d</td> <td>IntelligentExposure</td> <td class=c>int16u</td> <td><span class=s><span class=n>(not valid for some models)</span> <br>0 = Off <br>1 = Low <br>2 = Standard <br>3 = High</span></td></tr> <tr> <td title='0x0060 = 96'>0x0060</td> <td>LensFirmwareVersion</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0061 = 97'>0x0061</td> <td>FaceRecInfo</td> <td class=c>-</td> <td>--&gt; <a href='Panasonic.html#FaceRecInfo'>Panasonic FaceRecInfo Tags</a></td></tr> <tr> <td title='0x0062 = 98'>0x0062</td> <td>FlashWarning</td> <td class=c>int16u</td> <td><span class=s>0 = No <br>1 = Yes (flash required but disabled)</span></td></tr> <tr class=b> <td title='0x0063 = 99'>0x0063</td> <td>RecognizedFaceFlags?</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0065 = 101'>0x0065</td> <td>Title</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0066 = 102'>0x0066</td> <td>BabyName</td> <td class=c>undef</td> <td><span class=s><span class=n>(or pet name)</span></span></td></tr> <tr> <td title='0x0067 = 103'>0x0067</td> <td>Location</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0069 = 105'>0x0069</td> <td>Country</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr> <td title='0x006b = 107'>0x006b</td> <td>State</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x006d = 109'>0x006d</td> <td>City</td> <td class=c>undef</td> <td><span class=s><span class=n>(City/Town as stored by some models, or County/Township for others)</span></span></td></tr> <tr> <td title='0x006f = 111'>0x006f</td> <td>Landmark</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0070 = 112'>0x0070</td> <td>IntelligentResolution</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Low <br>2 = Standard <br>3 = High <br>4 = Extended</span></td></tr> <tr> <td title='0x0077 = 119'>0x0077</td> <td>BurstSpeed</td> <td class=c>int16u</td> <td><span class=s><span class=n>(images per second)</span></span></td></tr> <tr class=b> <td title='0x0079 = 121'>0x0079</td> <td>IntelligentD-Range</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = Low <br>2 = Standard <br>3 = High</span></td></tr> <tr> <td title='0x007c = 124'>0x007c</td> <td>ClearRetouch</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x0080 = 128'>0x0080</td> <td>City2</td> <td class=c>undef</td> <td><span class=s><span class=n>(City/Town/Village as stored by some models)</span></span></td></tr> <tr> <td title='0x0086 = 134'>0x0086</td> <td>ManometerPressure</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0089 = 137'>0x0089</td> <td>PhotoStyle</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Standard or Custom <br>2 = Vivid <br>3 = Natural</td><td>&nbsp;&nbsp;</td> <td>4 = Monochrome <br>5 = Scenery <br>6 = Portrait</td></tr></table> </td></tr> <tr> <td title='0x008a = 138'>0x008a</td> <td>ShadingCompensation</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x008c = 140'>0x008c</td> <td>AccelerometerZ</td> <td class=c>int16u</td> <td><span class=s><span class=n>(positive is acceleration upwards)</span></span></td></tr> <tr> <td title='0x008d = 141'>0x008d</td> <td>AccelerometerX</td> <td class=c>int16u</td> <td><span class=s><span class=n>(positive is acceleration to the left)</span></span></td></tr> <tr class=b> <td title='0x008e = 142'>0x008e</td> <td>AccelerometerY</td> <td class=c>int16u</td> <td><span class=s><span class=n>(positive is acceleration backwards)</span></span></td></tr> <tr> <td title='0x008f = 143'>0x008f</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Normal <br>1 = Rotate CW <br>2 = Rotate 180</td><td>&nbsp;&nbsp;</td> <td>3 = Rotate CCW <br>4 = Tilt Upwards <br>5 = Tilt Downwards</td></tr></table> </td></tr> <tr class=b> <td title='0x0090 = 144'>0x0090</td> <td>RollAngle</td> <td class=c>int16u</td> <td><span class=s><span class=n>(converted to degrees of clockwise camera rotation)</span></span></td></tr> <tr> <td title='0x0091 = 145'>0x0091</td> <td>PitchAngle</td> <td class=c>int16u</td> <td><span class=s><span class=n>(converted to degrees of upward camera tilt)</span></span></td></tr> <tr class=b> <td title='0x0093 = 147'>0x0093</td> <td>SweepPanoramaDirection</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Left to Right <br>2 = Right to Left <br>3 = Top to Bottom <br>4 = Bottom to Top</span></td></tr> <tr> <td title='0x0094 = 148'>0x0094</td> <td>SweepPanoramaFieldOfView</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0096 = 150'>0x0096</td> <td>TimerRecording</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Time Lapse <br>2 = Stop-motion Animation</span></td></tr> <tr> <td title='0x009d = 157'>0x009d</td> <td>InternalNDFilter</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x009e = 158'>0x009e</td> <td>HDR</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>100 = 1 EV <br>200 = 2 EV <br>300 = 3 EV</td><td>&nbsp;&nbsp;</td> <td>32868 = 1 EV (Auto) <br>32968 = 2 EV (Auto) <br>33068 = 3 EV (Auto)</td></tr></table> </td></tr> <tr> <td title='0x009f = 159'>0x009f</td> <td>ShutterType</td> <td class=c>int16u</td> <td><span class=s>0 = Mechanical <br>1 = Electronic <br>2 = Hybrid</span></td></tr> <tr class=b> <td title='0x00a3 = 163'>0x00a3</td> <td>ClearRetouchValue</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x00ab = 171'>0x00ab</td> <td>TouchAE</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x0e00 = 3584'>0x0e00</td> <td>PrintIM</td> <td class=c>-</td> <td>--&gt; <a href='PrintIM.html'>PrintIM Tags</a></td></tr> <tr> <td title='0x8000 = 32768'>0x8000</td> <td>MakerNoteVersion</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8001 = 32769'>0x8001</td> <td>SceneMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Normal <br>2 = Portrait <br>3 = Scenery <br>4 = Sports <br>5 = Night Portrait <br>6 = Program <br>7 = Aperture Priority <br>8 = Shutter Priority <br>9 = Macro <br>10 = Spot <br>11 = Manual <br>12 = Movie Preview <br>13 = Panning <br>14 = Simple <br>15 = Color Effects <br>16 = Self Portrait <br>17 = Economy <br>18 = Fireworks <br>19 = Party <br>20 = Snow <br>21 = Night Scenery <br>22 = Food <br>23 = Baby <br>24 = Soft Skin <br>25 = Candlelight <br>26 = Starry Night <br>27 = High Sensitivity <br>28 = Panorama Assist <br>29 = Underwater <br>30 = Beach <br>31 = Aerial Photo <br>32 = Sunset <br>33 = Pet <br>34 = Intelligent ISO <br>35 = Clipboard <br>36 = High Speed Continuous Shooting <br>37 = Intelligent Auto <br>39 = Multi-aspect <br>41 = Transform</td><td>&nbsp;&nbsp;</td> <td>42 = Flash Burst <br>43 = Pin Hole <br>44 = Film Grain <br>45 = My Color <br>46 = Photo Frame <br>48 = Movie <br>51 = HDR <br>52 = Peripheral Defocus <br>55 = Handheld Night Shot <br>57 = 3D <br>59 = Creative Control <br>62 = Panorama <br>63 = Glass Through <br>64 = HDR <br>66 = Digital Filter <br>67 = Clear Portrait <br>68 = Silky Skin <br>69 = Backlit Softness <br>70 = Clear in Backlight <br>71 = Relaxing Tone <br>72 = Sweet Child&#39;s Face <br>73 = Distinct Scenery <br>74 = Bright Blue Sky <br>75 = Romantic Sunset Glow <br>76 = Vivid Sunset Glow <br>77 = Glistening Water <br>78 = Clear Nightscape <br>79 = Cool Night Sky <br>80 = Warm Glowing Nightscape <br>81 = Artistic Nightscape <br>82 = Glittering Illuminations <br>83 = Clear Night Portrait <br>84 = Soft Image of a Flower <br>85 = Appetizing Food <br>86 = Cute Desert <br>87 = Freeze Animal Motion <br>88 = Clear Sports Shot <br>89 = Monochrome <br>90 = Creative Control</td></tr></table> </td></tr> <tr> <td title='0x8004 = 32772'>0x8004</td> <td>WBRedLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8005 = 32773'>0x8005</td> <td>WBGreenLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x8006 = 32774'>0x8006</td> <td>WBBlueLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8007 = 32775'>0x8007</td> <td>FlashFired</td> <td class=c>int16u</td> <td><span class=s>1 = No <br>2 = Yes</span></td></tr> <tr> <td title='0x8008 = 32776'>0x8008</td> <td>TextStamp</td> <td class=c>int16u</td> <td><span class=s>1 = Off <br>2 = On</span></td></tr> <tr class=b> <td title='0x8009 = 32777'>0x8009</td> <td>TextStamp</td> <td class=c>int16u</td> <td><span class=s>1 = Off <br>2 = On</span></td></tr> <tr> <td title='0x8010 = 32784'>0x8010</td> <td>BabyAge</td> <td class=c>string</td> <td><span class=s><span class=n>(or pet age)</span></span></td></tr> <tr class=b> <td title='0x8012 = 32786'>0x8012</td> <td>Transform</td> <td class=c>undef[4]</td> <td><span class=s><span class=n>(decoded as two 16-bit signed integers)</span> <br>&#39;-1 1&#39; = Slim Low <br>&#39;-3 2&#39; = Slim High <br>&#39;0 0&#39; = Off <br>&#39;1 1&#39; = Stretch Low <br>&#39;3 2&#39; = Stretch High</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceDetInfo'>Panasonic FaceDetInfo Tags</a></h2> <p>Face detection position information.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>NumFacePositions</td> <td class=c>int16u</td> <td><span class=s><span class=n>(number of detected face positions stored in this record. May be less than FacesDetected)</span></span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>Face1Position</td> <td class=c>int16u[4]</td> <td><span class=s><span class=n>(4 numbers: X/Y coordinates of the face center and width/height of face. Coordinates are relative to an image twice the size of the thumbnail, or 320 pixels wide)</span></span></td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>Face2Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>Face3Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>Face4Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>Face5Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceRecInfo'>Panasonic FaceRecInfo Tags</a></h2> <p>Tags written by cameras with facial recognition. These cameras not only detect faces in an image, but also recognize specific people based a user-supplied set of known faces.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FacesRecognized</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>RecognizedFace1Name</td> <td class=c>string[20]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>RecognizedFace1Position</td> <td class=c>int16u[4]</td> <td><span class=s><span class=n>(coordinates in same format as face detection tags above)</span></span></td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>RecognizedFace1Age</td> <td class=c>string[20]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='52 = 0x34'>52</td> <td>RecognizedFace2Name</td> <td class=c>string[20]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='72 = 0x48'>72</td> <td>RecognizedFace2Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='80 = 0x50'>80</td> <td>RecognizedFace2Age</td> <td class=c>string[20]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='100 = 0x64'>100</td> <td>RecognizedFace3Name</td> <td class=c>string[20]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='120 = 0x78'>120</td> <td>RecognizedFace3Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='128 = 0x80'>128</td> <td>RecognizedFace3Age</td> <td class=c>string[20]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Leica2'>Panasonic Leica2 Tags</a></h2> <p>These tags are used by the Leica M8.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0300 = 768'>0x0300</td> <td>Quality</td> <td class=c>int16u</td> <td><span class=s>1 = Fine <br>2 = Basic</span></td></tr> <tr class=b> <td title='0x0302 = 770'>0x0302</td> <td>UserProfile</td> <td class=c>int32u</td> <td><span class=s>1 = User Profile 1 <br>2 = User Profile 2 <br>3 = User Profile 3 <br>4 = User Profile 0 (Dynamic)</span></td></tr> <tr> <td title='0x0303 = 771'>0x0303</td> <td>SerialNumber</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0304 = 772'>0x0304</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td><span class=s><span class=n>(values above 0x8000 are converted to Kelvin color temperatures)</span></span><table class=cols><tr> <td>0 = Auto or Manual <br>1 = Daylight <br>2 = Fluorescent <br>3 = Tungsten</td><td>&nbsp;&nbsp;</td> <td>4 = Flash <br>10 = Cloudy <br>11 = Shade</td></tr></table> </td></tr> <tr> <td title='0x0310 = 784'>0x0310</td> <td>LensType</td> <td class=c>int32u</td> <td>--&gt; <a href='Panasonic.html#LensType'>Panasonic LensType Values</a></td></tr> <tr class=b> <td title='0x0311 = 785'>0x0311</td> <td>ExternalSensorBrightnessValue</td> <td class=c>rational64s</td> <td><span class=s><span class=n>(&quot;blue dot&quot; measurement)</span></span></td></tr> <tr> <td title='0x0312 = 786'>0x0312</td> <td>MeasuredLV</td> <td class=c>rational64s</td> <td><span class=s><span class=n>(imaging sensor or TTL exposure meter measurement)</span></span></td></tr> <tr class=b> <td title='0x0313 = 787'>0x0313</td> <td>ApproximateFNumber</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0320 = 800'>0x0320</td> <td>CameraTemperature</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0321 = 801'>0x0321</td> <td>ColorTemperature</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0322 = 802'>0x0322</td> <td>WBRedLevel</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0323 = 803'>0x0323</td> <td>WBGreenLevel</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0324 = 804'>0x0324</td> <td>WBBlueLevel</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0325 = 805'>0x0325</td> <td>UV-IRFilterCorrection</td> <td class=c>int32u</td> <td><span class=s>0 = Not Active <br>1 = Active</span></td></tr> <tr> <td title='0x0330 = 816'>0x0330</td> <td>CCDVersion</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0331 = 817'>0x0331</td> <td>CCDBoardVersion</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0332 = 818'>0x0332</td> <td>ControllerBoardVersion</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0333 = 819'>0x0333</td> <td>M16CVersion</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0340 = 832'>0x0340</td> <td>ImageIDNumber</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LensType'>Panasonic LensType Values</a></h2> <p>the LensType value is obtained by splitting the stored value into 2 integers: The stored value divided by 4, and its lower 2 bits. The second number is used only if necessary to identify certain manually coded lenses on the M9, or the focal length of some multi-focal lenses.</p> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>LensType</th><th>Value</th><th>LensType</th></tr> <tr><td>1</td><td>= Elmarit-M 21mm f/2.8</td> <td class=b>43</td><td class=b>= Summarit-M 35mm f/2.5</td> </tr><tr><td>3</td><td>= Elmarit-M 28mm f/2.8 (III)</td> <td class=b>44</td><td class=b>= Summarit-M 50mm f/2.5</td> </tr><tr><td>4</td><td>= Tele-Elmarit-M 90mm f/2.8 (II)</td> <td class=b>45</td><td class=b>= Summarit-M 75mm f/2.5</td> </tr><tr><td>5</td><td>= Summilux-M 50mm f/1.4 (II)</td> <td class=b>46</td><td class=b>= Summarit-M 90mm f/2.5</td> </tr><tr><td>6</td><td>= Summicron-M 35mm f/2 (IV)</td> <td class=b>47</td><td class=b>= Summilux-M 21mm f/1.4 ASPH.</td> </tr><tr><td>7</td><td>= Summicron-M 90mm f/2 (II)</td> <td class=b>48</td><td class=b>= Summilux-M 24mm f/1.4 ASPH.</td> </tr><tr><td>9</td><td>= Elmarit-M 135mm f/2.8 (I/II)</td> <td class=b>49</td><td class=b>= Noctilux-M 50mm f/0.95 ASPH.</td> </tr><tr><td>16</td><td>= Tri-Elmar-M 16-18-21mm f/4 ASPH.</td> <td class=b>50</td><td class=b>= Elmar-M 24mm f/3.8 ASPH.</td> </tr><tr><td>23</td><td>= Summicron-M 50mm f/2 (III)</td> <td class=b>51</td><td class=b>= Super-Elmar-M 21mm f/3.4 Asph</td> </tr><tr><td>24</td><td>= Elmarit-M 21mm f/2.8 ASPH.</td> <td class=b>52</td><td class=b>= Super-Elmar-M 18mm f/3.8 ASPH.</td> </tr><tr><td>25</td><td>= Elmarit-M 24mm f/2.8 ASPH.</td> <td class=b>'0 0'</td><td class=b>= Uncoded lens</td> </tr><tr><td>26</td><td>= Summicron-M 28mm f/2 ASPH.</td> <td class=b>'6 0'</td><td class=b>= Summilux-M 35mm f/1.4</td> </tr><tr><td>27</td><td>= Elmarit-M 28mm f/2.8 (IV)</td> <td class=b>'9 0'</td><td class=b>= Apo-Telyt-M 135mm f/3.4</td> </tr><tr><td>28</td><td>= Elmarit-M 28mm f/2.8 ASPH.</td> <td class=b>'16 1'</td><td class=b>= Tri-Elmar-M 16-18-21mm f/4 ASPH. (at 16mm)</td> </tr><tr><td>29</td><td>= Summilux-M 35mm f/1.4 ASPH.</td> <td class=b>'16 2'</td><td class=b>= Tri-Elmar-M 16-18-21mm f/4 ASPH. (at 18mm)</td> </tr><tr><td>30</td><td>= Summicron-M 35mm f/2 ASPH.</td> <td class=b>'16 3'</td><td class=b>= Tri-Elmar-M 16-18-21mm f/4 ASPH. (at 21mm)</td> </tr><tr><td>31</td><td>= Noctilux-M 50mm f/1</td> <td class=b>'29 0'</td><td class=b>= Summilux-M 35mm f/1.4 ASPHERICAL</td> </tr><tr><td>32</td><td>= Summilux-M 50mm f/1.4 ASPH.</td> <td class=b>'31 0'</td><td class=b>= Noctilux-M 50mm f/1.2</td> </tr><tr><td>33</td><td>= Summicron-M 50mm f/2 (IV, V)</td> <td class=b>'39 0'</td><td class=b>= Tele-Elmar-M 135mm f/4 (II)</td> </tr><tr><td>34</td><td>= Elmar-M 50mm f/2.8</td> <td class=b>'41 3'</td><td class=b>= Apo-Summicron-M 50mm f/2 Asph</td> </tr><tr><td>35</td><td>= Summilux-M 75mm f/1.4</td> <td class=b>'42 1'</td><td class=b>= Tri-Elmar-M 28-35-50mm f/4 ASPH. (at 28mm)</td> </tr><tr><td>36</td><td>= Apo-Summicron-M 75mm f/2 ASPH.</td> <td class=b>'42 2'</td><td class=b>= Tri-Elmar-M 28-35-50mm f/4 ASPH. (at 35mm)</td> </tr><tr><td>37</td><td>= Apo-Summicron-M 90mm f/2 ASPH.</td> <td class=b>'42 3'</td><td class=b>= Tri-Elmar-M 28-35-50mm f/4 ASPH. (at 50mm)</td> </tr><tr><td>38</td><td>= Elmarit-M 90mm f/2.8</td> <td class=b>'51 2'</td><td class=b>= Super-Elmar-M 14mm f/3.8 Asph</td> </tr><tr><td>39</td><td>= Macro-Elmar-M 90mm f/4</td> <td class=b>'53 2'</td><td class=b>= Apo-Telyt-M 135mm f/3.4</td> </tr><tr><td>40</td><td>= Macro-Adapter M</td> <td class=b>'53 3'</td><td class=b>= Apo-Summicron-M 50mm f/2 (VI)</td> </tr><tr><td>42</td><td>= Tri-Elmar-M 28-35-50mm f/4 ASPH.</td> <td class=b>&nbsp;</td><td class=b>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='Leica3'>Panasonic Leica3 Tags</a></h2> <p>These tags are used by the Leica R8 and R9 digital backs.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x000d = 13'>0x000d</td> <td>WB_RGBLevels</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Leica4'>Panasonic Leica4 Tags</a></h2> <p>This information is written by the M9.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x3000 = 12288'>0x3000</td> <td>Subdir3000</td> <td class=c>-</td> <td>--&gt; <a href='Panasonic.html#Subdir'>Panasonic Subdir Tags</a></td></tr> <tr class=b> <td title='0x3100 = 12544'>0x3100</td> <td>Subdir3100</td> <td class=c>-</td> <td>--&gt; <a href='Panasonic.html#Subdir'>Panasonic Subdir Tags</a></td></tr> <tr> <td title='0x3400 = 13312'>0x3400</td> <td>Subdir3400</td> <td class=c>-</td> <td>--&gt; <a href='Panasonic.html#Subdir'>Panasonic Subdir Tags</a></td></tr> <tr class=b> <td title='0x3900 = 14592'>0x3900</td> <td>Subdir3900</td> <td class=c>-</td> <td>--&gt; <a href='Panasonic.html#Subdir'>Panasonic Subdir Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Subdir'>Panasonic Subdir Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x300a = 12298'>0x300a</td> <td>Contrast</td> <td class=c>int32u</td> <td><span class=s>0 = Low <br>1 = Medium Low <br>2 = Normal <br>3 = Medium High <br>4 = High</span></td></tr> <tr class=b> <td title='0x300b = 12299'>0x300b</td> <td>Sharpening</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>1 = Low <br>2 = Normal <br>3 = Medium High <br>4 = High</span></td></tr> <tr> <td title='0x300d = 12301'>0x300d</td> <td>Saturation</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = Low <br>1 = Medium Low <br>2 = Normal <br>3 = Medium High</td><td>&nbsp;&nbsp;</td> <td>4 = High <br>5 = Black &amp; White <br>6 = Vintage B&amp;W</td></tr></table> </td></tr> <tr class=b> <td title='0x3033 = 12339'>0x3033</td> <td>WhiteBalance</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Tungsten <br>2 = Fluorescent <br>3 = Daylight Fluorescent <br>4 = Daylight <br>5 = Flash <br>6 = Cloudy <br>7 = Shade <br>8 = Manual <br>9 = Kelvin</td></tr></table> </td></tr> <tr> <td title='0x3034 = 12340'>0x3034</td> <td>JPEGQuality</td> <td class=c>int32u</td> <td><span class=s>94 = Basic <br>97 = Fine</span></td></tr> <tr class=b> <td title='0x3036 = 12342'>0x3036</td> <td>WB_RGBLevels</td> <td class=c>rational64u[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x3038 = 12344'>0x3038</td> <td>UserProfile</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x303a = 12346'>0x303a</td> <td>JPEGSize</td> <td class=c>int32u</td> <td><span class=s>0 = 5216x3472 <br>1 = 3840x2592 <br>2 = 2592x1728 <br>3 = 1728x1152 <br>4 = 1280x864</span></td></tr> <tr> <td title='0x3103 = 12547'>0x3103</td> <td>SerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3109 = 12553'>0x3109</td> <td>FirmwareVersion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x312a = 12586'>0x312a</td> <td>BaseISO</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x312b = 12587'>0x312b</td> <td>SensorWidth</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x312c = 12588'>0x312c</td> <td>SensorHeight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x312d = 12589'>0x312d</td> <td>SensorBitDepth</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x3402 = 13314'>0x3402</td> <td>CameraTemperature</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3405 = 13317'>0x3405</td> <td>LensType</td> <td class=c>int32u</td> <td>--&gt; <a href='Panasonic.html#LensType'>Panasonic LensType Values</a></td></tr> <tr> <td title='0x3406 = 13318'>0x3406</td> <td>ApproximateFNumber</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x3407 = 13319'>0x3407</td> <td>MeasuredLV</td> <td class=c>int32s</td> <td><span class=s><span class=n>(imaging sensor or TTL exposure meter measurement)</span></span></td></tr> <tr> <td title='0x3408 = 13320'>0x3408</td> <td>ExternalSensorBrightnessValue</td> <td class=c>int32s</td> <td><span class=s><span class=n>(&quot;blue dot&quot; measurement)</span></span></td></tr> <tr class=b> <td title='0x3901 = 14593'>0x3901</td> <td>Data1</td> <td class=c>-</td> <td>--&gt; <a href='Panasonic.html#Data1'>Panasonic Data1 Tags</a></td></tr> <tr> <td title='0x3902 = 14594'>0x3902</td> <td>Data2</td> <td class=c>-</td> <td>--&gt; <a href='Panasonic.html#Data2'>Panasonic Data2 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Data1'>Panasonic Data1 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>LensType</td> <td class=c>int32u[0.25]</td> <td>--&gt; <a href='Panasonic.html#LensType'>Panasonic LensType Values</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Data2'>Panasonic Data2 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='Leica5'>Panasonic Leica5 Tags</a></h2> <p>This information is written by the X1, X2, X VARIO and T.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0303 = 771'>0x0303</td> <td>LensModel</td> <td class=c>string</td> <td><span class=s><span class=n>(Leica T only)</span></span></td></tr> <tr class=b> <td title='0x0407 = 1031'>0x0407</td> <td>OriginalFileName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0408 = 1032'>0x0408</td> <td>OriginalDirectory</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x040d = 1037'>0x040d</td> <td>ExposureMode</td> <td class=c>int8u[4]</td> <td><span class=s>&#39;0 0 0 0&#39; = Program AE <br>&#39;1 0 0 0&#39; = Aperture-priority AE <br>&#39;1 1 0 0&#39; = Aperture-priority AE (1) <br>&#39;2 0 0 0&#39; = Shutter speed priority AE <br>&#39;3 0 0 0&#39; = Manual</span></td></tr> <tr> <td title='0x0410 = 1040'>0x0410</td> <td>ShotInfo</td> <td class=c>-</td> <td>--&gt; <a href='Panasonic.html#ShotInfo'>Panasonic ShotInfo Tags</a></td></tr> <tr class=b> <td title='0x0412 = 1042'>0x0412</td> <td>FilmMode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0413 = 1043'>0x0413</td> <td>WB_RGBLevels</td> <td class=c>rational64u[3]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfo'>Panasonic ShotInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FileIndex</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Leica6'>Panasonic Leica6 Tags</a></h2> <p>This information is written by the S2 and M (Typ 240), as a trailer in JPEG images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0300 = 768'>0x0300</td> <td>PreviewImage</td> <td class=c>undef</td> <td><span class=s><span class=n>(S2 and M (Typ 240))</span></span></td></tr> <tr class=b> <td title='0x0301 = 769'>0x0301</td> <td>UnknownBlock?</td> <td class=c>N</td> <td><span class=s><span class=n>(unknown 320kB block, not copied to JPEG images)</span></span></td></tr> <tr> <td title='0x0303 = 771'>0x0303</td> <td>LensType</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Leica9'>Panasonic Leica9 Tags</a></h2> <p>This information is written by the Leica S (Typ 007).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='Type2'>Panasonic Type2 Tags</a></h2> <p>This type of maker notes is used by models such as the NV-DS65, PV-D2002, PV-DC3000, PV-DV203, PV-DV401, PV-DV702, PV-L2001, PV-SD4090, PV-SD5000 and iPalm.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>MakerNoteType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>Gain</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PANA'>Panasonic PANA Tags</a></h2> <p>Tags extracted from the PANA and LEIC user data found in MP4 videos from various Panasonic and Leica models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='52 = 0x34'>52</td> <td>Version1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='62 = 0x3e'>62</td> <td>Version2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='80 = 0x50'>80</td> <td>MakerNoteLeica5</td> <td class=c>-</td> <td>--&gt; <a href='Panasonic.html#Leica5'>Panasonic Leica5 Tags</a></td></tr> <tr class=b> <td class=r title='88 = 0x58'>88</td> <td>ThumbnailWidth</td> <td class=c>N</td> <td><span class=s><span class=n>(Panasonic models)</span></span></td></tr> <tr> <td class=r title='90 = 0x5a'>90</td> <td>ThumbnailHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='92 = 0x5c'>92</td> <td>ThumbnailImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1334 = 0x536'>1334</td> <td>ThumbnailWidth</td> <td class=c>N</td> <td><span class=s><span class=n>(Leica X Vario)</span></span></td></tr> <tr class=b> <td class=r title='1338 = 0x53a'>1338</td> <td>ThumbnailHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1342 = 0x53e'>1342</td> <td>ThumbnailLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1350 = 0x546'>1350</td> <td>ThumbnailImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1358 = 0x54e'>1358</td> <td>ThumbnailWidth</td> <td class=c>N</td> <td><span class=s><span class=n>(Leica X Vario)</span></span></td></tr> <tr class=b> <td class=r title='1362 = 0x552'>1362</td> <td>ThumbnailHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1366 = 0x556'>1366</td> <td>ThumbnailLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1374 = 0x55e'>1374</td> <td>ThumbnailImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16488 = 0x4068'>16488</td> <td>ExifData</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> <tr class=b> <td class=r title='16512 = 0x4080'>16512</td> <td>ExifData</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='AdvancedSceneMode'>Panasonic AdvancedSceneMode Values</a></h2> <p>A Composite tag derived from Model, SceneMode and AdvancedSceneType.</p> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>AdvancedSceneMode</th><th>Value</th><th>AdvancedSceneMode</th></tr> <tr><td>'0 1'</td><td>= Off</td> <td class=b>'59 5'</td><td class=b>= High Dynamic</td> </tr><tr><td>'2 2'</td><td>= Outdoor Portrait</td> <td class=b>'59 6'</td><td class=b>= Miniature</td> </tr><tr><td>'2 3'</td><td>= Indoor Portrait</td> <td class=b>'59 9'</td><td class=b>= Low Key</td> </tr><tr><td>'2 4'</td><td>= Creative Portrait</td> <td class=b>'59 10'</td><td class=b>= Toy Effect</td> </tr><tr><td>'3 2'</td><td>= Nature</td> <td class=b>'59 11'</td><td class=b>= Dynamic Monochrome</td> </tr><tr><td>'3 3'</td><td>= Architecture</td> <td class=b>'59 12'</td><td class=b>= Soft</td> </tr><tr><td>'3 4'</td><td>= Creative Scenery</td> <td class=b>'66 1'</td><td class=b>= Impressive Art</td> </tr><tr><td>'4 2'</td><td>= Outdoor Sports</td> <td class=b>'66 2'</td><td class=b>= Cross Process</td> </tr><tr><td>'4 3'</td><td>= Indoor Sports</td> <td class=b>'66 3'</td><td class=b>= Color Select</td> </tr><tr><td>'4 4'</td><td>= Creative Sports</td> <td class=b>'66 4'</td><td class=b>= Star</td> </tr><tr><td>'9 2'</td><td>= Flower</td> <td class=b>'90 3'</td><td class=b>= Old Days</td> </tr><tr><td>'9 3'</td><td>= Objects</td> <td class=b>'90 4'</td><td class=b>= Sunshine</td> </tr><tr><td>'9 4'</td><td>= Creative Macro</td> <td class=b>'90 5'</td><td class=b>= Bleach Bypass</td> </tr><tr><td>'21 2'</td><td>= Illuminations</td> <td class=b>'90 6'</td><td class=b>= Toy Pop</td> </tr><tr><td>'21 4'</td><td>= Creative Night Scenery</td> <td class=b>'90 7'</td><td class=b>= Fantasy</td> </tr><tr><td>'45 2'</td><td>= Cinema</td> <td class=b>'90 8'</td><td class=b>= Monochrome</td> </tr><tr><td>'45 7'</td><td>= Expressive</td> <td class=b>'90 9'</td><td class=b>= Rough Monochrome</td> </tr><tr><td>'45 8'</td><td>= Retro</td> <td class=b>'90 10'</td><td class=b>= Silky Monochrome</td> </tr><tr><td>'45 9'</td><td>= Pure</td> <td class=b>'92 1'</td><td class=b>= Handheld Night Shot</td> </tr><tr><td>'45 10'</td><td>= Elegant</td> <td class=b>'DMC-TZ40 90 1'</td><td class=b>= Expressive</td> </tr><tr><td>'45 12'</td><td>= Monochrome</td> <td class=b>'DMC-TZ40 90 2'</td><td class=b>= Retro</td> </tr><tr><td>'45 13'</td><td>= Dynamic Art</td> <td class=b>'DMC-TZ40 90 3'</td><td class=b>= High Key</td> </tr><tr><td>'45 14'</td><td>= Silhouette</td> <td class=b>'DMC-TZ40 90 4'</td><td class=b>= Sepia</td> </tr><tr><td>'51 2'</td><td>= HDR Art</td> <td class=b>'DMC-TZ40 90 5'</td><td class=b>= High Dynamic</td> </tr><tr><td>'51 3'</td><td>= HDR B&amp;W</td> <td class=b>'DMC-TZ40 90 6'</td><td class=b>= Miniature</td> </tr><tr><td>'59 1'</td><td>= Expressive</td> <td class=b>'DMC-TZ40 90 9'</td><td class=b>= Low Key</td> </tr><tr><td>'59 2'</td><td>= Retro</td> <td class=b>'DMC-TZ40 90 10'</td><td class=b>= Toy Effect</td> </tr><tr><td>'59 3'</td><td>= High Key</td> <td class=b>'DMC-TZ40 90 11'</td><td class=b>= Dynamic Monochrome</td> </tr><tr><td>'59 4'</td><td>= Sepia</td> <td class=b>'DMC-TZ40 90 12'</td><td class=b>= Soft</td> </tr></table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Sep 3, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/PanasonicRaw.html������������������������������������������������000644 �000765 �000024 �00000030762 12574562734 022330� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>PanasonicRaw Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>PanasonicRaw Tags</h2> <p>These tags are found in IFD0 of Panasonic/Leica RAW, RW2 and RWL images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>PanasonicRawVersion</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>SensorWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>SensorHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>SensorTopBorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>SensorLeftBorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0006 = 6'>0x0006</td> <td>SensorBottomBorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0007 = 7'>0x0007</td> <td>SensorRightBorder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0008 = 8'>0x0008</td> <td>BlackLevel1</td> <td class=c>int16u</td> <td><span class=s><span class=n>(summing BlackLevel1+2+3 values gives the common bias that must be added to the BlackLevelRed/Green/Blue tags below)</span></span></td></tr> <tr> <td title='0x0009 = 9'>0x0009</td> <td>BlackLevel2</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000a = 10'>0x000a</td> <td>BlackLevel3</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x000e = 14'>0x000e</td> <td>LinearityLimitRed</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000f = 15'>0x000f</td> <td>LinearityLimitGreen</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>LinearityLimitBlue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0011 = 17'>0x0011</td> <td>RedBalance</td> <td class=c>int16u</td> <td><span class=s><span class=n>(found in Digilux 2 RAW images)</span></span></td></tr> <tr> <td title='0x0012 = 18'>0x0012</td> <td>BlueBalance</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0013 = 19'>0x0013</td> <td>WBInfo</td> <td class=c>-</td> <td>--&gt; <a href='PanasonicRaw.html#WBInfo'>PanasonicRaw WBInfo Tags</a></td></tr> <tr> <td title='0x0017 = 23'>0x0017</td> <td>ISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0018 = 24'>0x0018</td> <td>HighISOMultiplierRed</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0019 = 25'>0x0019</td> <td>HighISOMultiplierGreen</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001a = 26'>0x001a</td> <td>HighISOMultiplierBlue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x001c = 28'>0x001c</td> <td>BlackLevelRed</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001d = 29'>0x001d</td> <td>BlackLevelGreen</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x001e = 30'>0x001e</td> <td>BlackLevelBlue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0024 = 36'>0x0024</td> <td>WBRedLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0025 = 37'>0x0025</td> <td>WBGreenLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0026 = 38'>0x0026</td> <td>WBBlueLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0027 = 39'>0x0027</td> <td>WBInfo2</td> <td class=c>-</td> <td>--&gt; <a href='PanasonicRaw.html#WBInfo2'>PanasonicRaw WBInfo2 Tags</a></td></tr> <tr class=b> <td title='0x002e = 46'>0x002e</td> <td>JpgFromRaw</td> <td class=c title=' ! = Unsafe'>undef!</td> <td>--&gt; <a href='JPEG.html'>JPEG Tags</a> <br><span class='n s'>(processed as an embedded document because it contains full EXIF)</span></td></tr> <tr> <td title='0x002f = 47'>0x002f</td> <td>CropTop</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0030 = 48'>0x0030</td> <td>CropLeft</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0031 = 49'>0x0031</td> <td>CropBottom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0032 = 50'>0x0032</td> <td>CropRight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x010f = 271'>0x010f</td> <td>Make</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0110 = 272'>0x0110</td> <td>Model</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0111 = 273'>0x0111</td> <td>StripOffsets</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0112 = 274'>0x0112</td> <td>Orientation</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Horizontal (normal) <br>2 = Mirror horizontal <br>3 = Rotate 180 <br>4 = Mirror vertical <br>5 = Mirror horizontal and rotate 270 CW <br>6 = Rotate 90 CW <br>7 = Mirror horizontal and rotate 90 CW <br>8 = Rotate 270 CW</td></tr></table> </td></tr> <tr> <td title='0x0116 = 278'>0x0116</td> <td>RowsPerStrip</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0117 = 279'>0x0117</td> <td>StripByteCounts</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0118 = 280'>0x0118</td> <td>RawDataOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0119 = 281'>0x0119</td> <td>DistortionInfo</td> <td class=c>-</td> <td>--&gt; <a href='PanasonicRaw.html#DistortionInfo'>PanasonicRaw DistortionInfo Tags</a></td></tr> <tr> <td title='0x02bc = 700'>0x02bc</td> <td>ApplicationNotes</td> <td class=c title=' ! = Unsafe'>int8u!</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> <tr class=b> <td title='0x83bb = 33723'>0x83bb</td> <td>IPTC-NAA</td> <td class=c title=' ! = Unsafe'>int32u!</td> <td>--&gt; <a href='IPTC.html'>IPTC Tags</a></td></tr> <tr> <td title='0x8769 = 34665'>0x8769</td> <td>ExifOffset</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> <tr class=b> <td title='0x8825 = 34853'>0x8825</td> <td>GPSInfo</td> <td class=c>-</td> <td>--&gt; <a href='GPS.html'>GPS Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='WBInfo'>PanasonicRaw WBInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>NumWBEntries</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>WBType1</td> <td class=c>int16u</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>WB_RBLevels1</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>WBType2</td> <td class=c>int16u</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>WB_RBLevels2</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>WBType3</td> <td class=c>int16u</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>WB_RBLevels3</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>WBType4</td> <td class=c>int16u</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>WB_RBLevels4</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>WBType5</td> <td class=c>int16u</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>WB_RBLevels5</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>WBType6</td> <td class=c>int16u</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>WB_RBLevels6</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>WBType7</td> <td class=c>int16u</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>WB_RBLevels7</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='WBInfo2'>PanasonicRaw WBInfo2 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>NumWBEntries</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>WBType1</td> <td class=c>int16u</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>WB_RGBLevels1</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>WBType2</td> <td class=c>int16u</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>WB_RGBLevels2</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>WBType3</td> <td class=c>int16u</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>WB_RGBLevels3</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>WBType4</td> <td class=c>int16u</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>WB_RGBLevels4</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>WBType5</td> <td class=c>int16u</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>WB_RGBLevels5</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>WBType6</td> <td class=c>int16u</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>WB_RGBLevels6</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>WBType7</td> <td class=c>int16u</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td class=r title='26 = 0x1a'>26</td> <td>WB_RGBLevels7</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='DistortionInfo'>PanasonicRaw DistortionInfo Tags</a></h2> <p>Lens distortion correction information.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>DistortionParam02</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>DistortionParam04</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>DistortionScale</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7.1</td> <td>DistortionCorrection</td> <td class=c>int16s</td> <td><span class=s>[Mask 0x0f] <br>0x0 = Off <br>0x1 = On</span></td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>DistortionParam08</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0009 = 9'>0x0009</td> <td>DistortionParam09</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td title='0x000b = 11'>0x000b</td> <td>DistortionParam11</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000c = 12'>0x000c</td> <td>DistortionN?</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Sep 11, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������Image-ExifTool-10.10/html/TagNames/PDF.html���������������������������������������������������������000644 �000765 �000024 �00000055544 12527350231 020342� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>PDF Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>PDF Tags</h2> <p> The tags listed in the PDF tables below are those which are used by ExifTool to extract meta information, but they are only a small fraction of the total number of available PDF tags. See <a href="http://www.adobe.com/devnet/pdf/pdf_reference.html">http://www.adobe.com/devnet/pdf/pdf_reference.html</a> for the official PDF specification.</p> <p>ExifTool supports reading and writing PDF documents up to version 1.7 extension level 3, including support for RC4, AES-128 and AES-256 encryption. A Password option is provided to allow processing of password-protected PDF files.</p> <p>ExifTool may be used to write native PDF and XMP metadata to PDF files. It uses an incremental update technique that has the advantages of being both fast and reversible. The original PDF can be easily recovered by deleting the <code>PDF-update</code> pseudo-group (with <code>-PDF-update:all=</code> on the command line). However, there are two main disadvantages to this technique:</p> <p>1) A linearized PDF file is no longer linearized after the update, so it must be subsequently re-linearized if this is required.</p> <p>2) All metadata edits are reversible. While this would normally be considered an advantage, it is a potential security problem because old information is never actually deleted from the file. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Encrypt'</td> <td>Encrypt</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Encrypt'>PDF Encrypt Tags</a></td></tr> <tr class=b> <td>'Info'</td> <td>Info</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Info'>PDF Info Tags</a></td></tr> <tr> <td>'Root'</td> <td>Root</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Root'>PDF Root Tags</a></td></tr> <tr class=b> <td>'_linearized'</td> <td>Linearized</td> <td class=c>N</td> <td><span class=s><span class=n>(flag set if document is linearized for fast web display; not a real Tag ID)</span> <br>&#39;false&#39; = No <br>&#39;true&#39; = Yes</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Encrypt'>PDF Encrypt Tags</a></h2> <p>Tags extracted from the document Encrypt dictionary.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Filter'</td> <td>Encryption</td> <td class=c>N</td> <td><span class=s><span class=n>(extracted value is actually a combination of the Filter, SubFilter, V, R and Length information from the Encrypt dictionary)</span></span></td></tr> <tr class=b> <td>'P'</td> <td>UserAccess</td> <td class=c>N</td> <td><table class=cols><tr> <td>Bit 2 = Print <br>Bit 3 = Modify <br>Bit 4 = Copy <br>Bit 5 = Annotate</td><td>&nbsp;&nbsp;</td> <td>Bit 8 = Fill forms <br>Bit 9 = Extract <br>Bit 10 = Assemble <br>Bit 11 = Print high-res</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='Info'>PDF Info Tags</a></h2> <p>As well as the tags listed below, the PDF specification allows for user-defined tags to exist in the Info dictionary. These tags, which should have corresponding XMP-pdfx entries in the XMP of the PDF XML Metadata object, are also extracted by ExifTool.</p> <p><b>Writable</b> specifies the value format, and may be <code>string</code>, <code>date</code>, <code>integer</code>, <code>real</code>, <code>boolean</code> or <code>name</code> for PDF tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'AAPL:Keywords'</td> <td>AppleKeywords</td> <td class=c title=' + = List'>string+</td> <td><span class=s><span class=n>(keywords written by Apple utilities, although they seem to use PDF:Keywords when reading)</span></span></td></tr> <tr class=b> <td>'Author'</td> <td>Author</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'CreationDate'</td> <td>CreateDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Creator'</td> <td>Creator</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Keywords'</td> <td>Keywords</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ModDate'</td> <td>ModifyDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr> <td>'Producer'</td> <td>Producer</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Subject'</td> <td>Subject</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Title'</td> <td>Title</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Trapped'</td> <td>Trapped</td> <td class=c title=' ! = Unsafe'>string!</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Root'>PDF Root Tags</a></h2> <p>This is the PDF document catalog.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'AcroForm'</td> <td>AcroForm</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#AcroForm'>PDF AcroForm Tags</a></td></tr> <tr class=b> <td>'Lang'</td> <td>Language</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'MarkInfo'</td> <td>MarkInfo</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#MarkInfo'>PDF MarkInfo Tags</a></td></tr> <tr class=b> <td>'Metadata'</td> <td>Metadata</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Metadata'>PDF Metadata Tags</a></td></tr> <tr> <td>'PageLayout'</td> <td>PageLayout</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'PageMode'</td> <td>PageMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Pages'</td> <td>Pages</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Pages'>PDF Pages Tags</a></td></tr> <tr class=b> <td>'Perms'</td> <td>Perms</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Perms'>PDF Perms Tags</a></td></tr> <tr> <td>'Version'</td> <td>PDFVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AcroForm'>PDF AcroForm Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'_has_xfa'</td> <td>HasXFA</td> <td class=c>N</td> <td><span class=s><span class=n>(this tag is defined if a document contains form fields, and is true if it uses XML Forms Architecture; not a real Tag ID)</span> <br>&#39;false&#39; = No <br>&#39;true&#39; = Yes</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='MarkInfo'>PDF MarkInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Marked'</td> <td>TaggedPDF</td> <td class=c>N</td> <td><span class=s><span class=n>(not a Tagged PDF if this tag is missing)</span> <br>&#39;false&#39; = No <br>&#39;true&#39; = Yes</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Metadata'>PDF Metadata Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'XML_stream'</td> <td>XMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Pages'>PDF Pages Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Count'</td> <td>PageCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Kids'</td> <td>Kids</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Kids'>PDF Kids Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Kids'>PDF Kids Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Kids'</td> <td>Kids</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Kids'>PDF Kids Tags</a></td></tr> <tr class=b> <td>'Metadata'</td> <td>Metadata</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Metadata'>PDF Metadata Tags</a></td></tr> <tr> <td>'PieceInfo'</td> <td>PieceInfo</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#PieceInfo'>PDF PieceInfo Tags</a></td></tr> <tr class=b> <td>'Resources'</td> <td>Resources</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Resources'>PDF Resources Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='PieceInfo'>PDF PieceInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'AdobePhotoshop'</td> <td>AdobePhotoshop</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#AdobePhotoshop'>PDF AdobePhotoshop Tags</a></td></tr> <tr class=b> <td>'Illustrator'</td> <td>Illustrator</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Illustrator'>PDF Illustrator Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='AdobePhotoshop'>PDF AdobePhotoshop Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Private'</td> <td>Private</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Private'>PDF Private Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Private'>PDF Private Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'ImageResources'</td> <td>ImageResources</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#ImageResources'>PDF ImageResources Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ImageResources'>PDF ImageResources Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'_stream'</td> <td>_stream</td> <td class=c>-</td> <td>--&gt; <a href='Photoshop.html'>Photoshop Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Illustrator'>PDF Illustrator Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Private'</td> <td>Private</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#AIPrivate'>PDF AIPrivate Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='AIPrivate'>PDF AIPrivate Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'AIMetaData'</td> <td>AIMetaData</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#AIMetaData'>PDF AIMetaData Tags</a></td></tr> <tr class=b> <td>'AIPDFPrivateData'</td> <td>AIPDFPrivateData</td> <td class=c>-</td> <td>--&gt; <a href='PostScript.html'>PostScript Tags</a></td></tr> <tr> <td>'AIPrivateData'</td> <td>AIPrivateData</td> <td class=c>-</td> <td>--&gt; <a href='PostScript.html'>PostScript Tags</a> <br><span class='n s'>(the ExtractEmbedded option enables information to be extracted from embedded PostScript documents in the AIPrivateData# and AIPDFPrivateData# streams)</span></td></tr> <tr class=b> <td>'ContainerVersion'</td> <td>ContainerVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'CreatorVersion'</td> <td>CreatorVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'RoundTripVersion'</td> <td>RoundTripVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AIMetaData'>PDF AIMetaData Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'_stream'</td> <td>_stream</td> <td class=c>-</td> <td>--&gt; <a href='PostScript.html'>PostScript Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Resources'>PDF Resources Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'ColorSpace'</td> <td>ColorSpace</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#ColorSpace'>PDF ColorSpace Tags</a></td></tr> <tr class=b> <td>'Properties'</td> <td>Properties</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Properties'>PDF Properties Tags</a></td></tr> <tr> <td>'XObject'</td> <td>XObject</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#XObject'>PDF XObject Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorSpace'>PDF ColorSpace Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Cs1'</td> <td>Cs1</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Cs1'>PDF Cs1 Tags</a></td></tr> <tr class=b> <td>'DefaultRGB'</td> <td>DefaultRGB</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#DefaultRGB'>PDF DefaultRGB Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Cs1'>PDF Cs1 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'_stream'</td> <td>_stream</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='DefaultRGB'>PDF DefaultRGB Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'ICCBased'</td> <td>ICCBased</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#ICCBased'>PDF ICCBased Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ICCBased'>PDF ICCBased Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'_stream'</td> <td>_stream</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Properties'>PDF Properties Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'MC'</td> <td>MC</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#MC'>PDF MC Tags</a> <br><span class='n s'>(the ExtractEmbedded option enables information to be extracted from these embedded metadata dictionaries)</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='MC'>PDF MC Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Metadata'</td> <td>Metadata</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Metadata'>PDF Metadata Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='XObject'>PDF XObject Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Im'</td> <td>Im</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Im'>PDF Im Tags</a> <br><span class='n s'>(the ExtractEmbedded option enables information to be extracted from these embedded images)</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Im'>PDF Im Tags</a></h2> <p>Information extracted from embedded images with the ExtractEmbedded option. The EmbeddedImage and its metadata are extracted only for JPEG and Jpeg2000 image formats.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'ColorSpace'</td> <td>EmbeddedImageColorSpace</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Filter'</td> <td>EmbeddedImageFilter</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr> <td>'Height'</td> <td>EmbeddedImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Image_stream'</td> <td>EmbeddedImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Width'</td> <td>EmbeddedImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Perms'>PDF Perms Tags</a></h2> <p>Additional document permissions imposed by digital signatures.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'DocMDP'</td> <td>DocMDP</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Signature'>PDF Signature Tags</a></td></tr> <tr class=b> <td>'FieldMDP'</td> <td>FieldMDP</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Signature'>PDF Signature Tags</a></td></tr> <tr> <td>'UR3'</td> <td>UR3</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Signature'>PDF Signature Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Signature'>PDF Signature Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'ContactInfo'</td> <td>SignerContactInfo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Location'</td> <td>SigningLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'M'</td> <td>SigningDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Name'</td> <td>SigningAuthority</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Prop_AuthTime'</td> <td>AuthenticationTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Prop_AuthType'</td> <td>AuthenticationType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Reason'</td> <td>SigningReason</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Reference'</td> <td>Reference</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#Reference'>PDF Reference Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Reference'>PDF Reference Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'TransformParams'</td> <td>TransformParams</td> <td class=c>-</td> <td>--&gt; <a href='PDF.html#TransformParams'>PDF TransformParams Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='TransformParams'>PDF TransformParams Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Action'</td> <td>FieldPermissions</td> <td class=c>N</td> <td><span class=s><span class=n>(FieldMDP signatures only)</span> <br>&#39;All&#39; = Disallow changes to all form fields <br>&#39;Exclude&#39; = Allow changes to specified form fields <br>&#39;Include&#39; = Disallow changes to specified form fields</span></td></tr> <tr class=b> <td>'Annots'</td> <td>AnnotationUsageRights</td> <td class=c title=' + = List'>N+</td> <td><span class=s><span class=n>(possible values are Create, Delete, Modify, Copy, Import and Export; additional values for UR3 signatures are Online and SummaryView)</span></span></td></tr> <tr> <td>'Document'</td> <td>DocumentUsageRights</td> <td class=c title=' + = List'>N+</td> <td><span class=s><span class=n>(only possible value is FullSave)</span></span></td></tr> <tr class=b> <td>'EF'</td> <td>EmbeddedFileUsageRights</td> <td class=c title=' + = List'>N+</td> <td><span class=s><span class=n>(possible values are Create, Delete, Modify and Import)</span></span></td></tr> <tr> <td>'Fields'</td> <td>FormFields</td> <td class=c title=' + = List'>N+</td> <td><span class=s><span class=n>(FieldMDP signatures only)</span></span></td></tr> <tr class=b> <td>'Form'</td> <td>FormUsageRights</td> <td class=c title=' + = List'>N+</td> <td><span class=s><span class=n>(possible values are FillIn, Import, Export, SubmitStandalone and SpawnTemplate; additional values for UR3 signatures are BarcodePlaintext and Online)</span></span></td></tr> <tr> <td>'FormEX'</td> <td>FormExtraUsageRights</td> <td class=c title=' + = List'>N+</td> <td><span class=s><span class=n>(UR signatures only; only possible value is BarcodePlaintext)</span></span></td></tr> <tr class=b> <td>'Msg'</td> <td>UsageRightsMessage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'P'</td> <td>ModificationPermissions</td> <td class=c>N</td> <td><span class=s><span class=n>(1-3 for DocMDP signatures, default 2; true/false for UR3 signatures, default false)</span> <br>1 = No changes permitted <br>2 = Fill forms, Create page templates, Sign <br>3 = Fill forms, Create page templates, Sign, Create/Delete/Edit annotations <br>&#39;false&#39; = Do not restrict applications to reader permissions <br>&#39;true&#39; = Restrict all applications to reader permissions</span></td></tr> <tr class=b> <td>'Signature'</td> <td>SignatureUsageRights</td> <td class=c title=' + = List'>N+</td> <td><span class=s><span class=n>(only possible value is Modify)</span></span></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Oct 16, 2013</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Pentax.html������������������������������������������������������000644 �000765 �000024 �00000451551 12643477014 021176� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Pentax Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Pentax Tags</h2> <p> These tags are used in Pentax/Asahi cameras. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>PentaxVersion</td> <td class=c>int8u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>PentaxModelType</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>PreviewImageSize</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>PreviewImageLength</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>PreviewImageStart</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>PentaxModelID</td> <td class=c>int32u</td> <td>--&gt; <a href='Pentax.html#PentaxModelID'>Pentax PentaxModelID Values</a></td></tr> <tr> <td title='0x0006 = 6'>0x0006</td> <td>Date</td> <td class=c>undef[4]</td> <td><span class=s><span class=n>(changing either Date or Time will affect ShutterCount decryption)</span></span></td></tr> <tr class=b> <td title='0x0007 = 7'>0x0007</td> <td>Time</td> <td class=c>undef[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>Quality</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Good <br>1 = Better <br>2 = Best <br>3 = TIFF</td><td>&nbsp;&nbsp;</td> <td>4 = RAW <br>5 = Premium <br>7 = RAW (pixel shift enabled) <br>65535 = n/a</td></tr></table> </td></tr> <tr class=b> <td title='0x0009 = 9'>0x0009</td> <td>PentaxImageSize</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = 640x480 <br>1 = Full <br>2 = 1024x768 <br>3 = 1280x960 <br>4 = 1600x1200 <br>5 = 2048x1536 <br>8 = 2560x1920 or 2304x1728 <br>9 = 3072x2304 <br>10 = 3264x2448 <br>19 = 320x240 <br>20 = 2288x1712 <br>21 = 2592x1944 <br>22 = 2304x1728 or 2592x1944 <br>23 = 3056x2296 <br>25 = 2816x2212 or 2816x2112 <br>27 = 3648x2736</td><td>&nbsp;&nbsp;</td> <td>29 = 4000x3000 <br>30 = 4288x3216 <br>31 = 4608x3456 <br>129 = 1920x1080 <br>135 = 4608x2592 <br>257 = 3216x3216 <br>&#39;0 0&#39; = 2304x1728 <br>&#39;4 0&#39; = 1600x1200 <br>&#39;5 0&#39; = 2048x1536 <br>&#39;8 0&#39; = 2560x1920 <br>&#39;32 2&#39; = 960x640 <br>&#39;33 2&#39; = 1152x768 <br>&#39;34 2&#39; = 1536x1024 <br>&#39;35 1&#39; = 2400x1600 <br>&#39;36 0&#39; = 3008x2008 or 3040x2024 <br>&#39;37 0&#39; = 3008x2000</td></tr></table> </td></tr> <tr> <td title='0x000b = 11'>0x000b</td> <td>PictureMode</td> <td class=c>int16u[n]</td> <td><span class=s><span class=n>(1 or 2 values. Decimal values differentiate Optio 555 modes which are different from other models)</span> <br>[Value 0]</span><table class=cols><tr> <td>0 = Program <br>0.1 = Av <br>1 = Shutter Speed Priority <br>1.1 = M <br>2 = Program AE <br>2.1 = Tv <br>3 = Manual <br>3.1 = USER <br>5 = Portrait <br>6 = Landscape <br>8 = Sport <br>9 = Night Scene <br>11 = Soft <br>12 = Surf &amp; Snow <br>13 = Candlelight <br>14 = Autumn <br>15 = Macro <br>17 = Fireworks <br>18 = Text <br>19 = Panorama <br>20 = 3-D <br>21 = Black &amp; White <br>22 = Sepia <br>23 = Red <br>24 = Pink <br>25 = Purple <br>26 = Blue <br>27 = Green <br>28 = Yellow <br>30 = Self Portrait</td><td>&nbsp;&nbsp;</td> <td>31 = Illustrations <br>33 = Digital Filter <br>35 = Night Scene Portrait <br>37 = Museum <br>38 = Food <br>39 = Underwater <br>40 = Green Mode <br>49 = Light Pet <br>50 = Dark Pet <br>51 = Medium Pet <br>53 = Underwater <br>54 = Candlelight <br>55 = Natural Skin Tone <br>56 = Synchro Sound Record <br>58 = Frame Composite <br>59 = Report <br>60 = Kids <br>61 = Blur Reduction <br>63 = Panorama 2 <br>65 = Half-length Portrait <br>66 = Portrait 2 <br>74 = Digital Microscope <br>75 = Blue Sky <br>80 = Miniature <br>81 = HDR <br>83 = Fisheye <br>85 = Digital Filter 4 <br>221 = P <br>255 = PICT</td></tr></table> </td></tr> <tr class=b> <td title='0x000c = 12'>0x000c</td> <td>FlashMode</td> <td class=c>int16u[n]</td> <td><span class=s>[Value 0]</span><table class=cols><tr> <td>0x0 = Auto, Did not fire <br>0x1 = Off, Did not fire <br>0x2 = On, Did not fire <br>0x3 = Auto, Did not fire, Red-eye reduction <br>0x5 = On, Did not fire, Wireless (Master) <br>0x100 = Auto, Fired <br>0x102 = On, Fired <br>0x103 = Auto, Fired, Red-eye reduction <br>0x104 = On, Red-eye reduction <br>0x105 = On, Wireless (Master) <br>0x106 = On, Wireless (Control) <br>0x108 = On, Soft <br>0x109 = On, Slow-sync <br>0x10a = On, Slow-sync, Red-eye reduction <br>0x10b = On, Trailing-curtain Sync</td></tr></table> <span class=s>[Value 1]</span><table class=cols><tr> <td>0x0 = n/a - Off-Auto-Aperture <br>0x3f = Internal <br>0x100 = External, Auto <br>0x23f = External, Flash Problem <br>0x300 = External, Manual <br>0x304 = External, P-TTL Auto <br>0x305 = External, Contrast-control Sync <br>0x306 = External, High-speed Sync <br>0x30c = External, Wireless <br>0x30d = External, Wireless, High-speed Sync</td></tr></table> </td></tr> <tr> <td title='0x000d = 13'>0x000d</td> <td>FocusMode</td> <td class=c>int16u</td> <td><span class=s><span class=n>(Pentax models)</span></span><table class=cols><tr> <td>0 = Normal <br>1 = Macro <br>2 = Infinity <br>3 = Manual <br>4 = Super Macro <br>5 = Pan Focus <br>16 = AF-S (Focus-priority) <br>17 = AF-C (Focus-priority)</td><td>&nbsp;&nbsp;</td> <td>18 = AF-A (Focus-priority) <br>32 = Contrast-detect (Focus-priority) <br>33 = Tracking Contrast-detect (Focus-priority) <br>272 = AF-S (Release-priority) <br>273 = AF-C (Release-priority) <br>274 = AF-A (Release-priority) <br>288 = Contrast-detect (Release-priority)</td></tr></table> <span class=s><span class=n>(Asahi models)</span> <br>0 = Normal <br>1 = Macro (1) <br>2 = Macro (2) <br>3 = Infinity</span></td></tr> <tr class=b> <td title='0x000e = 14'>0x000e</td> <td>AFPointSelected</td> <td class=c>int16u</td> <td><span class=s><span class=n>(all models but the K-3)</span> <br>[Value 0]</span><table class=cols><tr> <td>0 = None <br>1 = Upper-left <br>2 = Top <br>3 = Upper-right <br>4 = Left <br>5 = Mid-left <br>6 = Center <br>7 = Mid-right <br>8 = Right</td><td>&nbsp;&nbsp;</td> <td>9 = Lower-left <br>10 = Bottom <br>11 = Lower-right <br>65531 = AF Select <br>65532 = Face Detect AF <br>65533 = Automatic Tracking AF <br>65534 = Fixed Center <br>65535 = Auto</td></tr></table> <span class=s><span class=n>(K-3)</span> <br>[Value 0]</span><table class=cols><tr> <td>0 = None <br>1 = Top-left <br>2 = Top Near-left <br>3 = Top <br>4 = Top Near-right <br>5 = Top-right <br>6 = Upper-left <br>7 = Upper Near-left <br>8 = Upper-middle <br>9 = Upper Near-right <br>10 = Upper-right <br>11 = Far Left <br>12 = Left <br>13 = Near-left <br>14 = Center <br>15 = Near-right <br>16 = Right <br>17 = Far Right <br>18 = Lower-left <br>19 = Lower Near-left <br>20 = Lower-middle <br>21 = Lower Near-right <br>22 = Lower-right <br>23 = Bottom-left <br>24 = Bottom Near-left <br>25 = Bottom <br>26 = Bottom Near-right <br>27 = Bottom-right <br>257 = Zone Select Top-left <br>258 = Zone Select Top Near-left</td><td>&nbsp;&nbsp;</td> <td>259 = Zone Select Top <br>260 = Zone Select Top Near-right <br>261 = Zone Select Top-right <br>262 = Zone Select Upper-left <br>263 = Zone Select Upper Near-left <br>264 = Zone Select Upper-middle <br>265 = Zone Select Upper Near-right <br>266 = Zone Select Upper-right <br>267 = Zone Select Far Left <br>268 = Zone Select Left <br>269 = Zone Select Near-left <br>270 = Zone Select Center <br>271 = Zone Select Near-right <br>272 = Zone Select Right <br>273 = Zone Select Far Right <br>274 = Zone Select Lower-left <br>275 = Zone Select Lower Near-left <br>276 = Zone Select Lower-middle <br>277 = Zone Select Lower Near-right <br>278 = Zone Select Lower-right <br>279 = Zone Select Bottom-left <br>280 = Zone Select Bottom Near-left <br>281 = Zone Select Bottom <br>282 = Zone Select Bottom Near-right <br>283 = Zone Select Bottom-right <br>65531 = AF Select <br>65532 = Face Detect AF <br>65533 = Automatic Tracking AF <br>65534 = Fixed Center <br>65535 = Auto</td></tr></table> <span class=s>[Value 1]</span><table class=cols><tr> <td>0 = Single Point <br>1 = Expanded Area 9-point (S)</td><td>&nbsp;&nbsp;</td> <td>3 = Expanded Area 25-point (M) <br>5 = Expanded Area 27-point (L)</td></tr></table> </td></tr> <tr> <td title='0x000f = 15'>0x000f</td> <td>AFPointsInFocus <br>AFPointsInFocus</td> <td class=c>int16u<br>int32u</td> <td><span class=s><span class=n>(models other than the K-3)</span></span><table class=cols><tr> <td>0x0 = Fixed Center or Multiple <br>0x1 = Top-left <br>0x2 = Top-center <br>0x3 = Top-right <br>0x4 = Left <br>0x5 = Center <br>0x6 = Right <br>0x7 = Bottom-left <br>0x8 = Bottom-center <br>0x9 = Bottom-right <br>0xffff = None</td></tr></table> <span class=s><span class=n>(K-3 only)</span></span><table class=cols><tr> <td>0x0 = (none) <br>Bit 0 = Top-left <br>Bit 1 = Top Near-left <br>Bit 2 = Top <br>Bit 3 = Top Near-right <br>Bit 4 = Top-right <br>Bit 5 = Upper-left <br>Bit 6 = Upper Near-left <br>Bit 7 = Upper-middle <br>Bit 8 = Upper Near-right <br>Bit 9 = Upper-right <br>Bit 10 = Far Left <br>Bit 11 = Left <br>Bit 12 = Near-left <br>Bit 13 = Center <br>Bit 14 = Near-right <br>Bit 15 = Right <br>Bit 16 = Far Right <br>Bit 17 = Lower-left <br>Bit 18 = Lower Near-left <br>Bit 19 = Lower-middle <br>Bit 20 = Lower Near-right <br>Bit 21 = Lower-right <br>Bit 22 = Bottom-left <br>Bit 23 = Bottom Near-left <br>Bit 24 = Bottom <br>Bit 25 = Bottom Near-right <br>Bit 26 = Bottom-right</td></tr></table> </td></tr> <tr class=b> <td title='0x0010 = 16'>0x0010</td> <td>FocusPosition</td> <td class=c>int16u</td> <td><span class=s><span class=n>(related to focus distance but affected by focal length)</span></span></td></tr> <tr> <td title='0x0012 = 18'>0x0012</td> <td>ExposureTime</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0013 = 19'>0x0013</td> <td>FNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0014 = 20'>0x0014</td> <td>ISO</td> <td class=c>int16u</td> <td><span class=s><span class=n>(may be different than EXIF:ISO, which can round to the nearest full stop)</span></span><table class=cols><tr> <td>3 = 50 <br>4 = 64 <br>5 = 80 <br>6 = 100 <br>7 = 125 <br>8 = 160 <br>9 = 200 <br>10 = 250 <br>11 = 320 <br>12 = 400 <br>13 = 500 <br>14 = 640 <br>15 = 800 <br>16 = 1000 <br>17 = 1250 <br>18 = 1600 <br>19 = 2000</td><td>&nbsp;&nbsp;</td> <td>20 = 2500 <br>21 = 3200 <br>22 = 4000 <br>23 = 5000 <br>24 = 6400 <br>25 = 8000 <br>26 = 10000 <br>27 = 12800 <br>28 = 16000 <br>29 = 20000 <br>30 = 25600 <br>31 = 32000 <br>32 = 40000 <br>33 = 51200 <br>34 = 64000 <br>35 = 80000 <br>36 = 102400</td><td>&nbsp;&nbsp;</td> <td>37 = 128000 <br>38 = 160000 <br>39 = 204800 <br>50 = 50 <br>100 = 100 <br>200 = 200 <br>258 = 50 <br>259 = 70 <br>260 = 100 <br>261 = 140 <br>262 = 200 <br>263 = 280 <br>264 = 400 <br>265 = 560 <br>266 = 800 <br>267 = 1100 <br>268 = 1600</td><td>&nbsp;&nbsp;</td> <td>269 = 2200 <br>270 = 3200 <br>271 = 4500 <br>272 = 6400 <br>273 = 9000 <br>274 = 12800 <br>275 = 18000 <br>276 = 25600 <br>277 = 36000 <br>278 = 51200 <br>400 = 400 <br>800 = 800 <br>1600 = 1600 <br>3200 = 3200</td></tr></table> </td></tr> <tr class=b> <td title='0x0015 = 21'>0x0015</td> <td>LightReading</td> <td class=c>int16u</td> <td><span class=s><span class=n>(calibrated differently for different models. For the Optio WP, add 6 to get approximate Light Value. May not be valid for some models, eg. Optio S)</span></span></td></tr> <tr> <td title='0x0016 = 22'>0x0016</td> <td>ExposureCompensation</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0017 = 23'>0x0017</td> <td>MeteringMode</td> <td class=c>int16u</td> <td><span class=s>0 = Multi-segment <br>1 = Center-weighted average <br>2 = Spot</span></td></tr> <tr> <td title='0x0018 = 24'>0x0018</td> <td>AutoBracketing</td> <td class=c>int16u[n]</td> <td><span class=s><span class=n>(1 or 2 values: exposure bracket step in EV, then extended bracket if available. Extended bracket values are printed as &#39;WB-BA&#39;, &#39;WB-GM&#39;, &#39;Saturation&#39;, &#39;Sharpness&#39;, &#39;Contrast&#39;, &#39;Hue&#39; or &#39;HighLowKey&#39; followed by &#39;+1&#39;, &#39;+2&#39; or &#39;+3&#39; for step size)</span></span></td></tr> <tr class=b> <td title='0x0019 = 25'>0x0019</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Daylight <br>2 = Shade <br>3 = Fluorescent <br>4 = Tungsten <br>5 = Manual <br>6 = Daylight Fluorescent <br>7 = Day White Fluorescent <br>8 = White Fluorescent</td><td>&nbsp;&nbsp;</td> <td>9 = Flash <br>10 = Cloudy <br>11 = Warm White Fluorescent <br>14 = Multi Auto <br>15 = Color Temperature Enhancement <br>17 = Kelvin <br>65534 = Unknown <br>65535 = User-Selected</td></tr></table> </td></tr> <tr> <td title='0x001a = 26'>0x001a</td> <td>WhiteBalanceMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Auto (Daylight) <br>2 = Auto (Shade) <br>3 = Auto (Flash) <br>4 = Auto (Tungsten) <br>6 = Auto (Daylight Fluorescent) <br>7 = Auto (Day White Fluorescent) <br>8 = Auto (White Fluorescent) <br>10 = Auto (Cloudy) <br>65534 = Unknown <br>65535 = User-Selected</td></tr></table> </td></tr> <tr class=b> <td title='0x001b = 27'>0x001b</td> <td>BlueBalance</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x001c = 28'>0x001c</td> <td>RedBalance</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001d = 29'>0x001d</td> <td>FocalLength</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x001e = 30'>0x001e</td> <td>DigitalZoom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001f = 31'>0x001f</td> <td>Saturation</td> <td class=c>int16u[n]</td> <td><span class=s><span class=n>(1 or 2 values)</span> <br>[Value 0]</span><table class=cols><tr> <td>0 = -2 (low) <br>1 = 0 (normal) <br>2 = +2 (high) <br>3 = -1 (med low) <br>4 = +1 (med high)</td><td>&nbsp;&nbsp;</td> <td>5 = -3 (very low) <br>6 = +3 (very high) <br>7 = -4 (minimum) <br>8 = +4 (maximum) <br>65535 = None</td></tr></table> </td></tr> <tr> <td title='0x0020 = 32'>0x0020</td> <td>Contrast</td> <td class=c>int16u[n]</td> <td><span class=s><span class=n>(1 or 2 values)</span> <br>[Value 0]</span><table class=cols><tr> <td>0 = -2 (low) <br>1 = 0 (normal) <br>2 = +2 (high) <br>3 = -1 (med low) <br>4 = +1 (med high)</td><td>&nbsp;&nbsp;</td> <td>5 = -3 (very low) <br>6 = +3 (very high) <br>7 = -4 (minimum) <br>8 = +4 (maximum) <br>65535 = n/a</td></tr></table> </td></tr> <tr class=b> <td title='0x0021 = 33'>0x0021</td> <td>Sharpness</td> <td class=c>int16u[n]</td> <td><span class=s><span class=n>(1 or 2 values)</span> <br>[Value 0]</span><table class=cols><tr> <td>0 = -2 (soft) <br>1 = 0 (normal) <br>2 = +2 (hard) <br>3 = -1 (med soft) <br>4 = +1 (med hard)</td><td>&nbsp;&nbsp;</td> <td>5 = -3 (very soft) <br>6 = +3 (very hard) <br>7 = -4 (minimum) <br>8 = +4 (maximum)</td></tr></table> </td></tr> <tr> <td title='0x0022 = 34'>0x0022</td> <td>WorldTimeLocation</td> <td class=c>int16u</td> <td><span class=s>0 = Hometown <br>1 = Destination</span></td></tr> <tr class=b> <td title='0x0023 = 35'>0x0023</td> <td>HometownCity</td> <td class=c>int16u</td> <td>--&gt; <a href='Pentax.html#City'>Pentax City Values</a></td></tr> <tr> <td title='0x0024 = 36'>0x0024</td> <td>DestinationCity</td> <td class=c>int16u</td> <td>--&gt; <a href='Pentax.html#City'>Pentax City Values</a></td></tr> <tr class=b> <td title='0x0025 = 37'>0x0025</td> <td>HometownDST</td> <td class=c>int16u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td title='0x0026 = 38'>0x0026</td> <td>DestinationDST</td> <td class=c>int16u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td title='0x0027 = 39'>0x0027</td> <td>DSPFirmwareVersion</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr> <td title='0x0028 = 40'>0x0028</td> <td>CPUFirmwareVersion</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0029 = 41'>0x0029</td> <td>FrameNumber</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x002d = 45'>0x002d</td> <td>EffectiveLV <br>EffectiveLV</td> <td class=c>int16u<br>int32u</td> <td><span class=s><span class=n>(camera-calculated light value, but includes exposure compensation)</span></span></td></tr> <tr class=b> <td title='0x0032 = 50'>0x0032</td> <td>ImageEditing</td> <td class=c>undef[4]</td> <td><table class=cols><tr> <td>&#39;0 0&#39; = None <br>&#39;0 0 0 0&#39; = None <br>&#39;0 0 0 4&#39; = Digital Filter <br>&#39;1 0 0 0&#39; = Resized <br>&#39;2 0 0 0&#39; = Cropped <br>&#39;4 0 0 0&#39; = Digital Filter 4 <br>&#39;6 0 0 0&#39; = Digital Filter 6 <br>&#39;8 0 0 0&#39; = Red-eye Correction <br>&#39;16 0 0 0&#39; = Frame Synthesis?</td></tr></table> </td></tr> <tr> <td title='0x0033 = 51'>0x0033</td> <td>PictureMode</td> <td class=c>int8u[3]</td> <td><span class=s>[Values 0-1]</span><table class=cols><tr> <td>&#39;0 0&#39; = Program <br>&#39;0 1&#39; = Hi-speed Program <br>&#39;0 2&#39; = DOF Program <br>&#39;0 3&#39; = MTF Program <br>&#39;0 4&#39; = Standard <br>&#39;0 5&#39; = Portrait <br>&#39;0 6&#39; = Landscape <br>&#39;0 7&#39; = Macro <br>&#39;0 8&#39; = Sport <br>&#39;0 9&#39; = Night Scene Portrait <br>&#39;0 10&#39; = No Flash <br>&#39;0 11&#39; = Night Scene <br>&#39;0 12&#39; = Surf &amp; Snow <br>&#39;0 13&#39; = Text <br>&#39;0 14&#39; = Sunset <br>&#39;0 15&#39; = Kids <br>&#39;0 16&#39; = Pet <br>&#39;0 17&#39; = Candlelight <br>&#39;0 18&#39; = Museum <br>&#39;0 19&#39; = Food <br>&#39;0 20&#39; = Stage Lighting <br>&#39;0 21&#39; = Night Snap <br>&#39;0 23&#39; = Blue Sky <br>&#39;0 24&#39; = Sunset <br>&#39;0 26&#39; = Night Scene HDR <br>&#39;0 27&#39; = HDR <br>&#39;0 28&#39; = Quick Macro <br>&#39;0 29&#39; = Forest <br>&#39;0 30&#39; = Backlight Silhouette <br>&#39;1 4&#39; = Auto PICT (Standard) <br>&#39;1 5&#39; = Auto PICT (Portrait)</td><td>&nbsp;&nbsp;</td> <td>&#39;1 6&#39; = Auto PICT (Landscape) <br>&#39;1 7&#39; = Auto PICT (Macro) <br>&#39;1 8&#39; = Auto PICT (Sport) <br>&#39;2 0&#39; = Program (HyP) <br>&#39;2 1&#39; = Hi-speed Program (HyP) <br>&#39;2 2&#39; = DOF Program (HyP) <br>&#39;2 3&#39; = MTF Program (HyP) <br>&#39;2 22&#39; = Shallow DOF (HyP) <br>&#39;3 0&#39; = Green Mode <br>&#39;4 0&#39; = Shutter Speed Priority <br>&#39;5 0&#39; = Aperture Priority <br>&#39;6 0&#39; = Program Tv Shift <br>&#39;7 0&#39; = Program Av Shift <br>&#39;8 0&#39; = Manual <br>&#39;9 0&#39; = Bulb <br>&#39;10 0&#39; = Aperture Priority, Off-Auto-Aperture <br>&#39;11 0&#39; = Manual, Off-Auto-Aperture <br>&#39;12 0&#39; = Bulb, Off-Auto-Aperture <br>&#39;13 0&#39; = Shutter &amp; Aperture Priority AE <br>&#39;15 0&#39; = Sensitivity Priority AE <br>&#39;16 0&#39; = Flash X-Sync Speed AE <br>&#39;18 0&#39; = Auto Program (Normal) <br>&#39;18 1&#39; = Auto Program (Hi-speed) <br>&#39;18 2&#39; = Auto Program (DOF) <br>&#39;18 3&#39; = Auto Program (MTF) <br>&#39;18 22&#39; = Auto Program (Shallow DOF) <br>&#39;20 22&#39; = Blur Control <br>&#39;254 0&#39; = Video <br>&#39;255 0&#39; = Video (Auto Aperture) <br>&#39;255 4&#39; = Video (4)</td></tr></table> <span class=s>[Value 2]</span><table class=cols><tr> <td>0 = 1/2 EV steps</td><td>&nbsp;&nbsp;</td> <td>1 = 1/3 EV steps</td></tr></table> </td></tr> <tr class=b> <td title='0x0034 = 52'>0x0034</td> <td>DriveMode</td> <td class=c>int8u[4]</td> <td><span class=s>[Value 0]</span><table class=cols><tr> <td>0 = Single-frame <br>1 = Continuous <br>2 = Continuous (Lo)</td><td>&nbsp;&nbsp;</td> <td>3 = Burst <br>4 = Continuous (Medium) <br>255 = Video</td></tr></table> <span class=s>[Value 1]</span><table class=cols><tr> <td>0 = No Timer <br>1 = Self-timer (12 s) <br>2 = Self-timer (2 s)</td><td>&nbsp;&nbsp;</td> <td>15 = Video <br>16 = Mirror Lock-up <br>255 = n/a</td></tr></table> <span class=s>[Value 2] <br>0 = Shutter Button <br>1 = Remote Control (3 s delay) <br>2 = Remote Control <br>4 = Remote Continuous Shooting <br>[Value 3]</span><table class=cols><tr> <td>0 = Single Exposure <br>1 = Multiple Exposure <br>15 = Interval Movie <br>16 = HDR <br>32 = HDR Strong 1</td><td>&nbsp;&nbsp;</td> <td>48 = HDR Strong 2 <br>64 = HDR Strong 3 <br>224 = HDR Auto <br>255 = Video</td></tr></table> </td></tr> <tr> <td title='0x0035 = 53'>0x0035</td> <td>SensorSize</td> <td class=c>int16u[2]</td> <td><span class=s><span class=n>(includes masked pixels)</span></span></td></tr> <tr class=b> <td title='0x0037 = 55'>0x0037</td> <td>ColorSpace</td> <td class=c>int16u</td> <td><span class=s>0 = sRGB <br>1 = Adobe RGB</span></td></tr> <tr> <td title='0x0038 = 56'>0x0038</td> <td>ImageAreaOffset</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0039 = 57'>0x0039</td> <td>RawImageSize</td> <td class=c title=' ~ = Writable only with -n'>int16u[2]~</td> <td>&nbsp;</td></tr> <tr> <td title='0x003c = 60'>0x003c</td> <td>AFPointsInFocus</td> <td class=c>N</td> <td><span class=s><span class=n>(*istD only)</span></span><table class=cols><tr> <td>0x0 = (none) <br>Bit 0 = Upper-left <br>Bit 1 = Top <br>Bit 2 = Upper-right <br>Bit 3 = Left <br>Bit 4 = Mid-left</td><td>&nbsp;&nbsp;</td> <td>Bit 5 = Center <br>Bit 6 = Mid-right <br>Bit 7 = Right <br>Bit 8 = Lower-left <br>Bit 9 = Bottom <br>Bit 10 = Lower-right</td></tr></table> </td></tr> <tr class=b> <td title='0x003d = 61'>0x003d</td> <td>DataScaling</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x003e = 62'>0x003e</td> <td>PreviewImageBorders</td> <td class=c>int8u[4]</td> <td><span class=s><span class=n>(top, bottom, left, right)</span></span></td></tr> <tr class=b> <td title='0x003f = 63'>0x003f</td> <td>LensRec</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#LensRec'>Pentax LensRec Tags</a></td></tr> <tr> <td title='0x0040 = 64'>0x0040</td> <td>SensitivityAdjust</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0041 = 65'>0x0041</td> <td>ImageEditCount</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0047 = 71'>0x0047</td> <td>CameraTemperature</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0048 = 72'>0x0048</td> <td>AELock</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x0049 = 73'>0x0049</td> <td>NoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x004d = 77'>0x004d</td> <td>FlashExposureComp <br>FlashExposureComp</td> <td class=c>int32s<br>int8s[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x004f = 79'>0x004f</td> <td>ImageTone</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Natural <br>1 = Bright <br>2 = Portrait <br>3 = Landscape <br>4 = Vibrant</td><td>&nbsp;&nbsp;</td> <td>5 = Monochrome <br>6 = Muted <br>7 = Reversal Film <br>8 = Bleach Bypass <br>9 = Radiant</td></tr></table> </td></tr> <tr class=b> <td title='0x0050 = 80'>0x0050</td> <td>ColorTemperature</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0053 = 83'>0x0053</td> <td>ColorTempDaylight</td> <td class=c>undef[4]</td> <td><span class=s><span class=n>(0x0053-0x005a are 3 numbers: Kelvin, shift AB, shift GM)</span></span></td></tr> <tr class=b> <td title='0x0054 = 84'>0x0054</td> <td>ColorTempShade</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0055 = 85'>0x0055</td> <td>ColorTempCloudy</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0056 = 86'>0x0056</td> <td>ColorTempTungsten</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0057 = 87'>0x0057</td> <td>ColorTempFluorescentD</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0058 = 88'>0x0058</td> <td>ColorTempFluorescentN</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0059 = 89'>0x0059</td> <td>ColorTempFluorescentW</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x005a = 90'>0x005a</td> <td>ColorTempFlash</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x005c = 92'>0x005c</td> <td>ShakeReductionInfo</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#SRInfo'>Pentax SRInfo Tags</a> <br>--&gt; <a href='Pentax.html#SRInfo2'>Pentax SRInfo2 Tags</a></td></tr> <tr class=b> <td title='0x005d = 93'>0x005d</td> <td>ShutterCount</td> <td class=c>undef[4]</td> <td><span class=s><span class=n>(Note: May be reset by servicing! Also, does not include shutter actuations for live view or video recording)</span></span></td></tr> <tr> <td title='0x0060 = 96'>0x0060</td> <td>FaceInfo</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#FaceInfo'>Pentax FaceInfo Tags</a></td></tr> <tr class=b> <td title='0x0062 = 98'>0x0062</td> <td>RawDevelopmentProcess</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = 1 (K10D,K200D,K2000,K-m) <br>3 = 3 (K20D) <br>4 = 4 (K-7) <br>5 = 5 (K-x) <br>6 = 6 (645D) <br>7 = 7 (K-r) <br>8 = 8 (K-5,K-5II,K-5IIs) <br>9 = 9 (Q) <br>10 = 10 (K-01,K-30) <br>11 = 11 (Q10) <br>12 = 12 (MX-1) <br>13 = 13 (K-3,K-3II) <br>14 = 14 (645Z) <br>15 = 15 (K-S1,K-S2)</td></tr></table> </td></tr> <tr> <td title='0x0067 = 103'>0x0067</td> <td>Hue</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = -2 <br>1 = Normal <br>2 = 2 <br>3 = -1 <br>4 = 1</td><td>&nbsp;&nbsp;</td> <td>5 = -3 <br>6 = 3 <br>7 = -4 <br>8 = 4 <br>65535 = None</td></tr></table> </td></tr> <tr class=b> <td title='0x0068 = 104'>0x0068</td> <td>AWBInfo</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#AWBInfo'>Pentax AWBInfo Tags</a></td></tr> <tr> <td title='0x0069 = 105'>0x0069</td> <td>DynamicRangeExpansion</td> <td class=c>undef[4]</td> <td><span class=s><span class=n>(called highlight correction by Pentax for the K20D, K-5, K-01 and maybe other models)</span> <br>[Value 0] <br>0 = Off <br>1 = On <br>[Value 1] <br>0 = 0 <br>1 = Enabled <br>2 = Auto</span></td></tr> <tr class=b> <td title='0x006b = 107'>0x006b</td> <td>TimeInfo</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#TimeInfo'>Pentax TimeInfo Tags</a></td></tr> <tr> <td title='0x006c = 108'>0x006c</td> <td>HighLowKeyAdj</td> <td class=c>int16s[2]</td> <td><table class=cols><tr> <td>&#39;-1 0&#39; = -1 <br>&#39;-2 0&#39; = -2 <br>&#39;-3 0&#39; = -3</td><td>&nbsp;&nbsp;</td> <td>&#39;-4 0&#39; = -4 <br>&#39;0 0&#39; = 0 <br>&#39;1 0&#39; = 1</td><td>&nbsp;&nbsp;</td> <td>&#39;2 0&#39; = 2 <br>&#39;3 0&#39; = 3 <br>&#39;4 0&#39; = 4</td></tr></table> </td></tr> <tr class=b> <td title='0x006d = 109'>0x006d</td> <td>ContrastHighlight</td> <td class=c>int16s[2]</td> <td><table class=cols><tr> <td>&#39;-1 0&#39; = -1 <br>&#39;-2 0&#39; = -2 <br>&#39;-3 0&#39; = -3</td><td>&nbsp;&nbsp;</td> <td>&#39;-4 0&#39; = -4 <br>&#39;0 0&#39; = 0 <br>&#39;1 0&#39; = 1</td><td>&nbsp;&nbsp;</td> <td>&#39;2 0&#39; = 2 <br>&#39;3 0&#39; = 3 <br>&#39;4 0&#39; = 4</td></tr></table> </td></tr> <tr> <td title='0x006e = 110'>0x006e</td> <td>ContrastShadow</td> <td class=c>int16s[2]</td> <td><table class=cols><tr> <td>&#39;-1 0&#39; = -1 <br>&#39;-2 0&#39; = -2 <br>&#39;-3 0&#39; = -3</td><td>&nbsp;&nbsp;</td> <td>&#39;-4 0&#39; = -4 <br>&#39;0 0&#39; = 0 <br>&#39;1 0&#39; = 1</td><td>&nbsp;&nbsp;</td> <td>&#39;2 0&#39; = 2 <br>&#39;3 0&#39; = 3 <br>&#39;4 0&#39; = 4</td></tr></table> </td></tr> <tr class=b> <td title='0x006f = 111'>0x006f</td> <td>ContrastHighlightShadowAdj</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x0070 = 112'>0x0070</td> <td>FineSharpness</td> <td class=c>int8u[n]</td> <td><span class=s>[Value 0] <br>0 = Off <br>1 = On <br>[Value 1] <br>0 = Normal <br>2 = Extra fine</span></td></tr> <tr class=b> <td title='0x0071 = 113'>0x0071</td> <td>HighISONoiseReduction</td> <td class=c>int8u</td> <td><span class=s>[Value 0]</span><table class=cols><tr> <td>0 = Off <br>1 = Weakest <br>2 = Weak</td><td>&nbsp;&nbsp;</td> <td>3 = Strong <br>4 = Medium <br>255 = Auto</td></tr></table> <span class=s>[Value 1] <br>0 = Inactive <br>1 = Active <br>2 = Active (Weak) <br>3 = Active (Strong) <br>4 = Active (Medium) <br>[Value 2] <br>48 = ISO&gt;400 <br>56 = ISO&gt;800 <br>64 = ISO&gt;1600 <br>72 = ISO&gt;3200</span></td></tr> <tr> <td title='0x0072 = 114'>0x0072</td> <td>AFAdjustment</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0073 = 115'>0x0073</td> <td>MonochromeFilterEffect</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Green <br>2 = Yellow <br>3 = Orange <br>4 = Red <br>5 = Magenta</td><td>&nbsp;&nbsp;</td> <td>6 = Blue <br>7 = Cyan <br>8 = Infrared <br>65535 = None</td></tr></table> </td></tr> <tr> <td title='0x0074 = 116'>0x0074</td> <td>MonochromeToning</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = -4 <br>1 = -3 <br>2 = -2 <br>3 = -1 <br>4 = 0</td><td>&nbsp;&nbsp;</td> <td>5 = 1 <br>6 = 2 <br>7 = 3 <br>8 = 4 <br>65535 = None</td></tr></table> </td></tr> <tr class=b> <td title='0x0076 = 118'>0x0076</td> <td>FaceDetect</td> <td class=c>int8u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0077 = 119'>0x0077</td> <td>FaceDetectFrameSize</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0079 = 121'>0x0079</td> <td>ShadowCorrection</td> <td class=c>int8u[n]</td> <td><table class=cols><tr> <td>0 = Off <br>1 = On <br>2 = Auto 2 <br>&#39;0 0&#39; = Off</td><td>&nbsp;&nbsp;</td> <td>&#39;1 1&#39; = Weak <br>&#39;1 2&#39; = Normal <br>&#39;1 3&#39; = Strong <br>&#39;2 4&#39; = Auto</td></tr></table> </td></tr> <tr> <td title='0x007a = 122'>0x007a</td> <td>ISOAutoParameters</td> <td class=c>int8u[2]</td> <td><span class=s>&#39;1 0&#39; = Slow <br>&#39;2 0&#39; = Standard <br>&#39;3 0&#39; = Fast</span></td></tr> <tr class=b> <td title='0x007b = 123'>0x007b</td> <td>CrossProcess</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Random <br>2 = Preset 1 <br>3 = Preset 2</td><td>&nbsp;&nbsp;</td> <td>4 = Preset 3 <br>33 = Favorite 1 <br>34 = Favorite 2 <br>35 = Favorite 3</td></tr></table> </td></tr> <tr> <td title='0x007d = 125'>0x007d</td> <td>LensCorr</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#LensCorr'>Pentax LensCorr Tags</a></td></tr> <tr class=b> <td title='0x007e = 126'>0x007e</td> <td>WhiteLevel</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x007f = 127'>0x007f</td> <td>BleachBypassToning</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Green <br>2 = Yellow <br>3 = Orange <br>4 = Red <br>5 = Magenta</td><td>&nbsp;&nbsp;</td> <td>6 = Purple <br>7 = Blue <br>8 = Cyan <br>65535 = Off</td></tr></table> </td></tr> <tr class=b> <td title='0x0080 = 128'>0x0080</td> <td>AspectRatio</td> <td class=c>Y</td> <td><span class=s>0 = 4:3 <br>1 = 3:2 <br>2 = 16:9 <br>3 = 1:1</span></td></tr> <tr> <td title='0x0082 = 130'>0x0082</td> <td>BlurControl</td> <td class=c>int8u[4]</td> <td><span class=s>[Value 0] <br>0 = Off <br>1 = Low <br>2 = Medium <br>3 = High</span></td></tr> <tr class=b> <td title='0x0085 = 133'>0x0085</td> <td>HDR</td> <td class=c>int8u[4]</td> <td><span class=s>[Value 0] <br>0 = Off <br>1 = HDR Auto <br>2 = HDR 1 <br>3 = HDR 2 <br>4 = HDR 3 <br>[Value 1] <br>0 = Auto-align Off <br>1 = Auto-align On <br>[Value 2] <br>0 = n/a <br>4 = 1 EV <br>8 = 2 EV <br>12 = 3 EV</span></td></tr> <tr> <td title='0x0088 = 136'>0x0088</td> <td>NeutralDensityFilter</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x008b = 139'>0x008b</td> <td>ISO</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0200 = 512'>0x0200</td> <td>BlackPoint</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0201 = 513'>0x0201</td> <td>WhitePoint</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0203 = 515'>0x0203</td> <td>ColorMatrixA</td> <td class=c>int16s[9]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0204 = 516'>0x0204</td> <td>ColorMatrixB</td> <td class=c>int16s[9]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0205 = 517'>0x0205</td> <td>CameraSettings <br>CameraSettingsUnknown</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Pentax.html#CameraSettings'>Pentax CameraSettings Tags</a> <br>--&gt; <a href='Pentax.html#CameraSettingsUnknown'>Pentax CameraSettingsUnknown Tags</a></td></tr> <tr class=b> <td title='0x0206 = 518'>0x0206</td> <td>AEInfo <br>AEInfo2 <br>AEInfo3 <br>AEInfoUnknown</td> <td class=c>-<br>-<br>-<br>-</td> <td>--&gt; <a href='Pentax.html#AEInfo'>Pentax AEInfo Tags</a> <br>--&gt; <a href='Pentax.html#AEInfo2'>Pentax AEInfo2 Tags</a> <br>--&gt; <a href='Pentax.html#AEInfo3'>Pentax AEInfo3 Tags</a> <br>--&gt; <a href='Pentax.html#AEInfoUnknown'>Pentax AEInfoUnknown Tags</a></td></tr> <tr> <td title='0x0207 = 519'>0x0207</td> <td>LensInfo</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#LensInfo'>Pentax LensInfo Tags</a> <br>--&gt; <a href='Pentax.html#LensInfo2'>Pentax LensInfo2 Tags</a> <br>--&gt; <a href='Pentax.html#LensInfo3'>Pentax LensInfo3 Tags</a> <br>--&gt; <a href='Pentax.html#LensInfo4'>Pentax LensInfo4 Tags</a> <br>--&gt; <a href='Pentax.html#LensInfo5'>Pentax LensInfo5 Tags</a></td></tr> <tr class=b> <td title='0x0208 = 520'>0x0208</td> <td>FlashInfo <br>FlashInfoUnknown</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Pentax.html#FlashInfo'>Pentax FlashInfo Tags</a> <br>--&gt; <a href='Pentax.html#FlashInfoUnknown'>Pentax FlashInfoUnknown Tags</a></td></tr> <tr> <td title='0x0209 = 521'>0x0209</td> <td>AEMeteringSegments</td> <td class=c>int8u[n]</td> <td><span class=s><span class=n>(measurements from each of the 16 AE metering segments for models such as the K10D, 77 metering segments for models such as the K-5, and 4050 metering segments for the K-3, converted to LV)</span></span></td></tr> <tr class=b> <td title='0x020a = 522'>0x020a</td> <td>FlashMeteringSegments</td> <td class=c>int8u[n]</td> <td>&nbsp;</td></tr> <tr> <td title='0x020b = 523'>0x020b</td> <td>SlaveFlashMeteringSegments</td> <td class=c>int8u[n]</td> <td><span class=s><span class=n>(used in wireless control mode)</span></span></td></tr> <tr class=b> <td title='0x020d = 525'>0x020d</td> <td>WB_RGGBLevelsDaylight</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x020e = 526'>0x020e</td> <td>WB_RGGBLevelsShade</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x020f = 527'>0x020f</td> <td>WB_RGGBLevelsCloudy</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0210 = 528'>0x0210</td> <td>WB_RGGBLevelsTungsten</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0211 = 529'>0x0211</td> <td>WB_RGGBLevelsFluorescentD</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0212 = 530'>0x0212</td> <td>WB_RGGBLevelsFluorescentN</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0213 = 531'>0x0213</td> <td>WB_RGGBLevelsFluorescentW</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0214 = 532'>0x0214</td> <td>WB_RGGBLevelsFlash</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0215 = 533'>0x0215</td> <td>CameraInfo</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#CameraInfo'>Pentax CameraInfo Tags</a></td></tr> <tr> <td title='0x0216 = 534'>0x0216</td> <td>BatteryInfo</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#BatteryInfo'>Pentax BatteryInfo Tags</a></td></tr> <tr class=b> <td title='0x021b = 539'>0x021b</td> <td>SaturationInfo?</td> <td class=c>N</td> <td><span class=s><span class=n>(only in PEF and DNG images)</span></span></td></tr> <tr> <td title='0x021f = 543'>0x021f</td> <td>AFInfo</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#AFInfo'>Pentax AFInfo Tags</a></td></tr> <tr class=b> <td title='0x0220 = 544'>0x0220</td> <td>HuffmanTable?</td> <td class=c>N</td> <td><span class=s><span class=n>(found in K10D, K20D and K2000D PEF images)</span></span></td></tr> <tr> <td title='0x0221 = 545'>0x0221</td> <td>KelvinWB</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#KelvinWB'>Pentax KelvinWB Tags</a></td></tr> <tr class=b> <td title='0x0222 = 546'>0x0222</td> <td>ColorInfo</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#ColorInfo'>Pentax ColorInfo Tags</a></td></tr> <tr> <td title='0x0224 = 548'>0x0224</td> <td>EVStepInfo</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#EVStepInfo'>Pentax EVStepInfo Tags</a></td></tr> <tr class=b> <td title='0x0226 = 550'>0x0226</td> <td>ShotInfo</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#ShotInfo'>Pentax ShotInfo Tags</a></td></tr> <tr> <td title='0x0227 = 551'>0x0227</td> <td>FacePos</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#FacePos'>Pentax FacePos Tags</a></td></tr> <tr class=b> <td title='0x0228 = 552'>0x0228</td> <td>FaceSize</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#FaceSize'>Pentax FaceSize Tags</a></td></tr> <tr> <td title='0x0229 = 553'>0x0229</td> <td>SerialNumber</td> <td class=c>string</td> <td><span class=s><span class=n>(left blank by some cameras)</span></span></td></tr> <tr class=b> <td title='0x022a = 554'>0x022a</td> <td>FilterInfo</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#FilterInfo'>Pentax FilterInfo Tags</a></td></tr> <tr> <td title='0x022b = 555'>0x022b</td> <td>LevelInfo</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#LevelInfo'>Pentax LevelInfo Tags</a></td></tr> <tr class=b> <td title='0x022d = 557'>0x022d</td> <td>WBLevels</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#WBLevels'>Pentax WBLevels Tags</a></td></tr> <tr> <td title='0x022e = 558'>0x022e</td> <td>Artist</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x022f = 559'>0x022f</td> <td>Copyright</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0230 = 560'>0x0230</td> <td>FirmwareVersion</td> <td class=c>string</td> <td><span class=s><span class=n>(only in AVI videos)</span></span></td></tr> <tr class=b> <td title='0x0231 = 561'>0x0231</td> <td>ContrastDetectAFArea</td> <td class=c>int16u[4]</td> <td><span class=s><span class=n>(AF area of the most recent contrast-detect focus operation. Coordinates are left, top, width and height in a 720x480 frame, with Y downwards)</span></span></td></tr> <tr> <td title='0x0235 = 565'>0x0235</td> <td>CrossProcessParams</td> <td class=c>undef[10]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0239 = 569'>0x0239</td> <td>LensInfoQ</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#LensInfoQ'>Pentax LensInfoQ Tags</a></td></tr> <tr> <td title='0x0243 = 579'>0x0243</td> <td>PixelShiftInfo</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#PixelShiftInfo'>Pentax PixelShiftInfo Tags</a></td></tr> <tr class=b> <td title='0x03fe = 1022'>0x03fe</td> <td>DataDump</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x03ff = 1023'>0x03ff</td> <td>TempInfo <br>UnknownInfo</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Pentax.html#TempInfo'>Pentax TempInfo Tags</a> <br>--&gt; <a href='Pentax.html#UnknownInfo'>Pentax UnknownInfo Tags</a></td></tr> <tr class=b> <td title='0x0402 = 1026'>0x0402</td> <td>ToneCurve</td> <td class=c title=' ~ = Writable only with -n'>Y~</td> <td>&nbsp;</td></tr> <tr> <td title='0x0403 = 1027'>0x0403</td> <td>ToneCurves</td> <td class=c title=' ~ = Writable only with -n'>Y~</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0405 = 1029'>0x0405</td> <td>UnknownBlock?</td> <td class=c>undef</td> <td><span class=s><span class=n>(large unknown data block in PEF/DNG images but not JPG images)</span></span></td></tr> <tr> <td title='0x0e00 = 3584'>0x0e00</td> <td>PrintIM</td> <td class=c>-</td> <td>--&gt; <a href='PrintIM.html'>PrintIM Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='PentaxModelID'>Pentax PentaxModelID Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>PentaxModelID</th><th>Value</th><th>PentaxModelID</th><th>Value</th><th>PentaxModelID</th></tr> <tr><td class=r>0xd</td><td>= Optio 330/430</td> <td class='r b'>0x12c1e</td><td class=b>= K10D</td> <td class=r>0x12e12</td><td>= Optio E80</td> </tr><tr><td class=r>0x12926</td><td>= Optio 230</td> <td class='r b'>0x12c20</td><td class=b>= Samsung GX10</td> <td class=r>0x12e30</td><td>= Optio W90</td> </tr><tr><td class=r>0x12958</td><td>= Optio 330GS</td> <td class='r b'>0x12c28</td><td class=b>= Optio S7</td> <td class=r>0x12e3a</td><td>= Optio I-10</td> </tr><tr><td class=r>0x12962</td><td>= Optio 450/550</td> <td class='r b'>0x12c2d</td><td class=b>= Optio L20</td> <td class=r>0x12e44</td><td>= Optio H90</td> </tr><tr><td class=r>0x1296c</td><td>= Optio S</td> <td class='r b'>0x12c32</td><td class=b>= Optio M20</td> <td class=r>0x12e4e</td><td>= Optio E90</td> </tr><tr><td class=r>0x12971</td><td>= Optio S V1.01</td> <td class='r b'>0x12c3c</td><td class=b>= Optio W20</td> <td class=r>0x12e58</td><td>= X90</td> </tr><tr><td class=r>0x12994</td><td>= *ist D</td> <td class='r b'>0x12c46</td><td class=b>= Optio A20</td> <td class=r>0x12e6c</td><td>= K-r</td> </tr><tr><td class=r>0x129b2</td><td>= Optio 33L</td> <td class='r b'>0x12c78</td><td class=b>= Optio E30</td> <td class=r>0x12e76</td><td>= K-5</td> </tr><tr><td class=r>0x129bc</td><td>= Optio 33LF</td> <td class='r b'>0x12c7d</td><td class=b>= Optio E35</td> <td class=r>0x12e8a</td><td>= Optio RS1000/RS1500</td> </tr><tr><td class=r>0x129c6</td><td>= Optio 33WR/43WR/555</td> <td class='r b'>0x12c82</td><td class=b>= Optio T30</td> <td class=r>0x12e94</td><td>= Optio RZ10</td> </tr><tr><td class=r>0x129d5</td><td>= Optio S4</td> <td class='r b'>0x12c8c</td><td class=b>= Optio M30</td> <td class=r>0x12e9e</td><td>= Optio LS1000</td> </tr><tr><td class=r>0x12a02</td><td>= Optio MX</td> <td class='r b'>0x12c91</td><td class=b>= Optio L30</td> <td class=r>0x12ebc</td><td>= Optio WG-1 GPS</td> </tr><tr><td class=r>0x12a0c</td><td>= Optio S40</td> <td class='r b'>0x12c96</td><td class=b>= Optio W30</td> <td class=r>0x12ed0</td><td>= Optio S1</td> </tr><tr><td class=r>0x12a16</td><td>= Optio S4i</td> <td class='r b'>0x12ca0</td><td class=b>= Optio A30</td> <td class=r>0x12ee4</td><td>= Q</td> </tr><tr><td class=r>0x12a34</td><td>= Optio 30</td> <td class='r b'>0x12cb4</td><td class=b>= Optio E40</td> <td class=r>0x12ef8</td><td>= K-01</td> </tr><tr><td class=r>0x12a52</td><td>= Optio S30</td> <td class='r b'>0x12cbe</td><td class=b>= Optio M40</td> <td class=r>0x12f0c</td><td>= Optio RZ18</td> </tr><tr><td class=r>0x12a66</td><td>= Optio 750Z</td> <td class='r b'>0x12cc3</td><td class=b>= Optio L40</td> <td class=r>0x12f16</td><td>= Optio VS20</td> </tr><tr><td class=r>0x12a70</td><td>= Optio SV</td> <td class='r b'>0x12cc5</td><td class=b>= Optio L36</td> <td class=r>0x12f2a</td><td>= Optio WG-2 GPS</td> </tr><tr><td class=r>0x12a75</td><td>= Optio SVi</td> <td class='r b'>0x12cc8</td><td class=b>= Optio Z10</td> <td class=r>0x12f48</td><td>= Optio LS465</td> </tr><tr><td class=r>0x12a7a</td><td>= Optio X</td> <td class='r b'>0x12cd2</td><td class=b>= K20D</td> <td class=r>0x12f52</td><td>= K-30</td> </tr><tr><td class=r>0x12a8e</td><td>= Optio S5i</td> <td class='r b'>0x12cd4</td><td class=b>= Samsung GX20</td> <td class=r>0x12f5c</td><td>= X-5</td> </tr><tr><td class=r>0x12a98</td><td>= Optio S50</td> <td class='r b'>0x12cdc</td><td class=b>= Optio S10</td> <td class=r>0x12f66</td><td>= Q10</td> </tr><tr><td class=r>0x12aa2</td><td>= *ist DS</td> <td class='r b'>0x12ce6</td><td class=b>= Optio A40</td> <td class=r>0x12f70</td><td>= K-5 II</td> </tr><tr><td class=r>0x12ab6</td><td>= Optio MX4</td> <td class='r b'>0x12cf0</td><td class=b>= Optio V10</td> <td class=r>0x12f71</td><td>= K-5 II s</td> </tr><tr><td class=r>0x12ac0</td><td>= Optio S5n</td> <td class='r b'>0x12cfa</td><td class=b>= K200D</td> <td class=r>0x12f7a</td><td>= Q7</td> </tr><tr><td class=r>0x12aca</td><td>= Optio WP</td> <td class='r b'>0x12d04</td><td class=b>= Optio S12</td> <td class=r>0x12f84</td><td>= MX-1</td> </tr><tr><td class=r>0x12afc</td><td>= Optio S55</td> <td class='r b'>0x12d0e</td><td class=b>= Optio E50</td> <td class=r>0x12f8e</td><td>= WG-3 GPS</td> </tr><tr><td class=r>0x12b10</td><td>= Optio S5z</td> <td class='r b'>0x12d18</td><td class=b>= Optio M50</td> <td class=r>0x12f98</td><td>= WG-3</td> </tr><tr><td class=r>0x12b1a</td><td>= *ist DL</td> <td class='r b'>0x12d22</td><td class=b>= Optio L50</td> <td class=r>0x12fa2</td><td>= WG-10</td> </tr><tr><td class=r>0x12b24</td><td>= Optio S60</td> <td class='r b'>0x12d2c</td><td class=b>= Optio V20</td> <td class=r>0x12fb6</td><td>= K-50</td> </tr><tr><td class=r>0x12b2e</td><td>= Optio S45</td> <td class='r b'>0x12d40</td><td class=b>= Optio W60</td> <td class=r>0x12fc0</td><td>= K-3</td> </tr><tr><td class=r>0x12b38</td><td>= Optio S6</td> <td class='r b'>0x12d4a</td><td class=b>= Optio M60</td> <td class=r>0x12fca</td><td>= K-500</td> </tr><tr><td class=r>0x12b4c</td><td>= Optio WPi</td> <td class='r b'>0x12d68</td><td class=b>= Optio E60/M90</td> <td class=r>0x12fde</td><td>= WG-4 GPS</td> </tr><tr><td class=r>0x12b56</td><td>= BenQ DC X600</td> <td class='r b'>0x12d72</td><td class=b>= K2000</td> <td class=r>0x12fe8</td><td>= WG-4</td> </tr><tr><td class=r>0x12b60</td><td>= *ist DS2</td> <td class='r b'>0x12d73</td><td class=b>= K-m</td> <td class=r>0x13006</td><td>= WG-20</td> </tr><tr><td class=r>0x12b62</td><td>= Samsung GX-1S</td> <td class='r b'>0x12d86</td><td class=b>= Optio P70</td> <td class=r>0x13010</td><td>= 645Z</td> </tr><tr><td class=r>0x12b6a</td><td>= Optio A10</td> <td class='r b'>0x12d90</td><td class=b>= Optio L70</td> <td class=r>0x1301a</td><td>= K-S1</td> </tr><tr><td class=r>0x12b7e</td><td>= *ist DL2</td> <td class='r b'>0x12d9a</td><td class=b>= Optio E70</td> <td class=r>0x13024</td><td>= K-S2</td> </tr><tr><td class=r>0x12b80</td><td>= Samsung GX-1L</td> <td class='r b'>0x12dae</td><td class=b>= X70</td> <td class=r>0x1302e</td><td>= Q-S1</td> </tr><tr><td class=r>0x12b9c</td><td>= K100D</td> <td class='r b'>0x12db8</td><td class=b>= K-7</td> <td class=r>0x13056</td><td>= WG-30</td> </tr><tr><td class=r>0x12b9d</td><td>= K110D</td> <td class='r b'>0x12dcc</td><td class=b>= Optio W80</td> <td class=r>0x1307e</td><td>= WG-30W</td> </tr><tr><td class=r>0x12ba2</td><td>= K100D Super</td> <td class='r b'>0x12dea</td><td class=b>= Optio P80</td> <td class=r>0x13088</td><td>= WG-5 GPS</td> </tr><tr><td class=r>0x12bb0</td><td>= Optio T10/T20</td> <td class='r b'>0x12df4</td><td class=b>= Optio WS80</td> <td class=r>0x1309c</td><td>= K-3 II</td> </tr><tr><td class=r>0x12be2</td><td>= Optio W10</td> <td class='r b'>0x12dfe</td><td class=b>= K-x</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr><tr><td class=r>0x12bf6</td><td>= Optio M10</td> <td class='r b'>0x12e08</td><td class=b>= 645D</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='City'>Pentax City Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>City</th><th>Value</th><th>City</th><th>Value</th><th>City</th><th>Value</th><th>City</th><th>Value</th><th>City</th></tr> <tr><td class=r>0</td><td>= Pago Pago</td> <td class='r b'>15</td><td class=b>= Halifax</td> <td class=r>30</td><td>= Jeddah</td> <td class='r b'>45</td><td class=b>= Phnom Penh</td> <td class=r>60</td><td>= Wellington</td> </tr><tr><td class=r>1</td><td>= Honolulu</td> <td class='r b'>16</td><td class=b>= Buenos Aires</td> <td class=r>31</td><td>= Tehran</td> <td class='r b'>46</td><td class=b>= Ho Chi Minh</td> <td class=r>61</td><td>= Auckland</td> </tr><tr><td class=r>2</td><td>= Anchorage</td> <td class='r b'>17</td><td class=b>= Sao Paulo</td> <td class=r>32</td><td>= Dubai</td> <td class='r b'>47</td><td class=b>= Jakarta</td> <td class=r>62</td><td>= Lima</td> </tr><tr><td class=r>3</td><td>= Vancouver</td> <td class='r b'>18</td><td class=b>= Rio de Janeiro</td> <td class=r>33</td><td>= Karachi</td> <td class='r b'>48</td><td class=b>= Hong Kong</td> <td class=r>63</td><td>= Dakar</td> </tr><tr><td class=r>4</td><td>= San Francisco</td> <td class='r b'>19</td><td class=b>= Madrid</td> <td class=r>34</td><td>= Kabul</td> <td class='r b'>49</td><td class=b>= Perth</td> <td class=r>64</td><td>= Algiers</td> </tr><tr><td class=r>5</td><td>= Los Angeles</td> <td class='r b'>20</td><td class=b>= London</td> <td class=r>35</td><td>= Male</td> <td class='r b'>50</td><td class=b>= Beijing</td> <td class=r>65</td><td>= Helsinki</td> </tr><tr><td class=r>6</td><td>= Calgary</td> <td class='r b'>21</td><td class=b>= Paris</td> <td class=r>36</td><td>= Delhi</td> <td class='r b'>51</td><td class=b>= Shanghai</td> <td class=r>66</td><td>= Athens</td> </tr><tr><td class=r>7</td><td>= Denver</td> <td class='r b'>22</td><td class=b>= Milan</td> <td class=r>37</td><td>= Colombo</td> <td class='r b'>52</td><td class=b>= Manila</td> <td class=r>67</td><td>= Nairobi</td> </tr><tr><td class=r>8</td><td>= Mexico City</td> <td class='r b'>23</td><td class=b>= Rome</td> <td class=r>38</td><td>= Kathmandu</td> <td class='r b'>53</td><td class=b>= Taipei</td> <td class=r>68</td><td>= Amsterdam</td> </tr><tr><td class=r>9</td><td>= Chicago</td> <td class='r b'>24</td><td class=b>= Berlin</td> <td class=r>39</td><td>= Dacca</td> <td class='r b'>54</td><td class=b>= Seoul</td> <td class=r>69</td><td>= Stockholm</td> </tr><tr><td class=r>10</td><td>= Miami</td> <td class='r b'>25</td><td class=b>= Johannesburg</td> <td class=r>40</td><td>= Yangon</td> <td class='r b'>55</td><td class=b>= Adelaide</td> <td class=r>70</td><td>= Lisbon</td> </tr><tr><td class=r>11</td><td>= Toronto</td> <td class='r b'>26</td><td class=b>= Istanbul</td> <td class=r>41</td><td>= Bangkok</td> <td class='r b'>56</td><td class=b>= Tokyo</td> <td class=r>71</td><td>= Copenhagen</td> </tr><tr><td class=r>12</td><td>= New York</td> <td class='r b'>27</td><td class=b>= Cairo</td> <td class=r>42</td><td>= Kuala Lumpur</td> <td class='r b'>57</td><td class=b>= Guam</td> <td class=r>72</td><td>= Warsaw</td> </tr><tr><td class=r>13</td><td>= Santiago</td> <td class='r b'>28</td><td class=b>= Jerusalem</td> <td class=r>43</td><td>= Vientiane</td> <td class='r b'>58</td><td class=b>= Sydney</td> <td class=r>73</td><td>= Prague</td> </tr><tr><td class=r>14</td><td>= Caracus</td> <td class='r b'>29</td><td class=b>= Moscow</td> <td class=r>44</td><td>= Singapore</td> <td class='r b'>59</td><td class=b>= Noumea</td> <td class=r>74</td><td>= Budapest</td> </tr></table></td></tr></table></blockquote> <h2><a name='LensRec'>Pentax LensRec Tags</a></h2> <p>This record stores the LensType, plus one or two unknown bytes for some models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>LensType</td> <td class=c>int8u[2]</td> <td>--&gt; <a href='Pentax.html#LensType'>Pentax LensType Values</a></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>ExtenderStatus</td> <td class=c>int8u</td> <td><span class=s><span class=n>(not valid if a non-AF lens is used)</span> <br>0 = Not attached <br>1 = Attached</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='LensType'>Pentax LensType Values</a></h2> <p>The first number gives the series of the lens, and the second identifies the lens model. Note that newer series numbers may not always be properly identified by cameras running older firmware versions. Decimal values have been added to differentiate lenses which would otherwise have the same LensType, and are used by the Composite LensID tag when attempting to identify the specific lens model.</p> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>LensType</th></tr> <tr><td>'0 0'</td><td>= M-42 or No Lens</td> </tr><tr><td>'1 0'</td><td>= K or M Lens</td> </tr><tr><td>'2 0'</td><td>= A Series Lens</td> </tr><tr><td>'3 0'</td><td>= Sigma</td> </tr><tr><td>'3 17'</td><td>= smc PENTAX-FA SOFT 85mm F2.8</td> </tr><tr><td>'3 18'</td><td>= smc PENTAX-F 1.7X AF ADAPTER</td> </tr><tr><td>'3 19'</td><td>= smc PENTAX-F 24-50mm F4</td> </tr><tr><td>'3 20'</td><td>= smc PENTAX-F 35-80mm F4-5.6</td> </tr><tr><td>'3 21'</td><td>= smc PENTAX-F 80-200mm F4.7-5.6</td> </tr><tr><td>'3 22'</td><td>= smc PENTAX-F FISH-EYE 17-28mm F3.5-4.5</td> </tr><tr><td>'3 23'</td><td>= smc PENTAX-F 100-300mm F4.5-5.6 or Sigma Lens</td> </tr><tr><td>'3 23.1'</td><td>= Sigma AF 28-300mm F3.5-5.6 DL IF</td> </tr><tr><td>'3 23.2'</td><td>= Sigma AF 28-300mm F3.5-6.3 DG IF Macro</td> </tr><tr><td>'3 23.3'</td><td>= Tokina 80-200mm F2.8 ATX-Pro</td> </tr><tr><td>'3 24'</td><td>= smc PENTAX-F 35-135mm F3.5-4.5</td> </tr><tr><td>'3 25'</td><td>= smc PENTAX-F 35-105mm F4-5.6 or Sigma or Tokina Lens</td> </tr><tr><td>'3 25.1'</td><td>= Sigma AF 28-300mm F3.5-5.6 DL IF</td> </tr><tr><td>'3 25.2'</td><td>= Sigma 55-200mm F4-5.6 DC</td> </tr><tr><td>'3 25.3'</td><td>= Sigma AF 28-300mm F3.5-6.3 DL IF</td> </tr><tr><td>'3 25.4'</td><td>= Sigma AF 28-300mm F3.5-6.3 DG IF Macro</td> </tr><tr><td>'3 25.5'</td><td>= Tokina 80-200mm F2.8 ATX-Pro</td> </tr><tr><td>'3 26'</td><td>= smc PENTAX-F* 250-600mm F5.6 ED[IF]</td> </tr><tr><td>'3 27'</td><td>= smc PENTAX-F 28-80mm F3.5-4.5 or Tokina Lens</td> </tr><tr><td>'3 27.1'</td><td>= Tokina AT-X Pro AF 28-70mm F2.6-2.8</td> </tr><tr><td>'3 28'</td><td>= smc PENTAX-F 35-70mm F3.5-4.5 or Tokina Lens</td> </tr><tr><td>'3 28.1'</td><td>= Tokina 19-35mm F3.5-4.5 AF</td> </tr><tr><td>'3 28.2'</td><td>= Tokina AT-X AF 400mm F5.6</td> </tr><tr><td>'3 29'</td><td>= PENTAX-F 28-80mm F3.5-4.5 or Sigma or Tokina Lens</td> </tr><tr><td>'3 29.1'</td><td>= Sigma AF 18-125mm F3.5-5.6 DC</td> </tr><tr><td>'3 29.2'</td><td>= Tokina AT-X PRO 28-70mm F2.6-2.8</td> </tr><tr><td>'3 30'</td><td>= PENTAX-F 70-200mm F4-5.6</td> </tr><tr><td>'3 31'</td><td>= smc PENTAX-F 70-210mm F4-5.6 or Tokina or Takumar Lens</td> </tr><tr><td>'3 31.1'</td><td>= Tokina AF 730 75-300mm F4.5-5.6</td> </tr><tr><td>'3 31.2'</td><td>= Takumar-F 70-210mm F4-5.6</td> </tr><tr><td>'3 32'</td><td>= smc PENTAX-F 50mm F1.4</td> </tr><tr><td>'3 33'</td><td>= smc PENTAX-F 50mm F1.7</td> </tr><tr><td>'3 34'</td><td>= smc PENTAX-F 135mm F2.8 [IF]</td> </tr><tr><td>'3 35'</td><td>= smc PENTAX-F 28mm F2.8</td> </tr><tr><td>'3 36'</td><td>= Sigma 20mm F1.8 EX DG Aspherical RF</td> </tr><tr><td>'3 38'</td><td>= smc PENTAX-F* 300mm F4.5 ED[IF]</td> </tr><tr><td>'3 39'</td><td>= smc PENTAX-F* 600mm F4 ED[IF]</td> </tr><tr><td>'3 40'</td><td>= smc PENTAX-F Macro 100mm F2.8</td> </tr><tr><td>'3 41'</td><td>= smc PENTAX-F Macro 50mm F2.8 or Sigma Lens</td> </tr><tr><td>'3 41.1'</td><td>= Sigma 50mm F2.8 Macro</td> </tr><tr><td>'3 42'</td><td>= Sigma 300mm F2.8 EX DG APO IF</td> </tr><tr><td>'3 44'</td><td>= Sigma or Tamron Lens (3 44)</td> </tr><tr><td>'3 44.1'</td><td>= Sigma AF 10-20mm F4-5.6 EX DC</td> </tr><tr><td>'3 44.2'</td><td>= Sigma 12-24mm F4.5-5.6 EX DG</td> </tr><tr><td>'3 44.3'</td><td>= Sigma 17-70mm F2.8-4.5 DC Macro</td> </tr><tr><td>'3 44.4'</td><td>= Sigma 18-50mm F3.5-5.6 DC</td> </tr><tr><td>'3 44.5'</td><td>= Tamron 35-90mm F4 AF</td> </tr><tr><td>'3 46'</td><td>= Sigma or Samsung Lens (3 46)</td> </tr><tr><td>'3 46.1'</td><td>= Sigma APO 70-200mm F2.8 EX</td> </tr><tr><td>'3 46.2'</td><td>= Sigma EX APO 100-300mm F4 IF</td> </tr><tr><td>'3 46.3'</td><td>= Samsung/Schneider D-XENON 50-200mm F4-5.6 ED</td> </tr><tr><td>'3 50'</td><td>= smc PENTAX-FA 28-70mm F4 AL</td> </tr><tr><td>'3 51'</td><td>= Sigma 28mm F1.8 EX DG Aspherical Macro</td> </tr><tr><td>'3 52'</td><td>= smc PENTAX-FA 28-200mm F3.8-5.6 AL[IF] or Tamron Lens</td> </tr><tr><td>'3 52.1'</td><td>= Tamron AF LD 28-200mm F3.8-5.6 [IF] Aspherical (171D)</td> </tr><tr><td>'3 53'</td><td>= smc PENTAX-FA 28-80mm F3.5-5.6 AL</td> </tr><tr><td>'3 247'</td><td>= smc PENTAX-DA FISH-EYE 10-17mm F3.5-4.5 ED[IF]</td> </tr><tr><td>'3 248'</td><td>= smc PENTAX-DA 12-24mm F4 ED AL[IF]</td> </tr><tr><td>'3 250'</td><td>= smc PENTAX-DA 50-200mm F4-5.6 ED</td> </tr><tr><td>'3 251'</td><td>= smc PENTAX-DA 40mm F2.8 Limited</td> </tr><tr><td>'3 252'</td><td>= smc PENTAX-DA 18-55mm F3.5-5.6 AL</td> </tr><tr><td>'3 253'</td><td>= smc PENTAX-DA 14mm F2.8 ED[IF]</td> </tr><tr><td>'3 254'</td><td>= smc PENTAX-DA 16-45mm F4 ED AL</td> </tr><tr><td>'3 255'</td><td>= Sigma Lens (3 255)</td> </tr><tr><td>'3 255.1'</td><td>= Sigma 18-200mm F3.5-6.3 DC</td> </tr><tr><td>'3 255.2'</td><td>= Sigma DL-II 35-80mm F4-5.6</td> </tr><tr><td>'3 255.3'</td><td>= Sigma DL Zoom 75-300mm F4-5.6</td> </tr><tr><td>'3 255.4'</td><td>= Sigma DF EX Aspherical 28-70mm F2.8</td> </tr><tr><td>'3 255.5'</td><td>= Sigma AF Tele 400mm F5.6 Multi-coated</td> </tr><tr><td>'3 255.6'</td><td>= Sigma 24-60mm F2.8 EX DG</td> </tr><tr><td>'3 255.7'</td><td>= Sigma 70-300mm F4-5.6 Macro</td> </tr><tr><td>'3 255.8'</td><td>= Sigma 55-200mm F4-5.6 DC</td> </tr><tr><td>'3 255.9'</td><td>= Sigma 18-50mm F2.8 EX DC</td> </tr><tr><td>'4 1'</td><td>= smc PENTAX-FA SOFT 28mm F2.8</td> </tr><tr><td>'4 2'</td><td>= smc PENTAX-FA 80-320mm F4.5-5.6</td> </tr><tr><td>'4 3'</td><td>= smc PENTAX-FA 43mm F1.9 Limited</td> </tr><tr><td>'4 6'</td><td>= smc PENTAX-FA 35-80mm F4-5.6</td> </tr><tr><td>'4 12'</td><td>= smc PENTAX-FA 50mm F1.4</td> </tr><tr><td>'4 15'</td><td>= smc PENTAX-FA 28-105mm F4-5.6 [IF]</td> </tr><tr><td>'4 16'</td><td>= Tamron AF 80-210mm F4-5.6 (178D)</td> </tr><tr><td>'4 19'</td><td>= Tamron SP AF 90mm F2.8 (172E)</td> </tr><tr><td>'4 20'</td><td>= smc PENTAX-FA 28-80mm F3.5-5.6</td> </tr><tr><td>'4 21'</td><td>= Cosina AF 100-300mm F5.6-6.7</td> </tr><tr><td>'4 22'</td><td>= Tokina 28-80mm F3.5-5.6</td> </tr><tr><td>'4 23'</td><td>= smc PENTAX-FA 20-35mm F4 AL</td> </tr><tr><td>'4 24'</td><td>= smc PENTAX-FA 77mm F1.8 Limited</td> </tr><tr><td>'4 25'</td><td>= Tamron SP AF 14mm F2.8</td> </tr><tr><td>'4 26'</td><td>= smc PENTAX-FA Macro 100mm F3.5 or Cosina Lens</td> </tr><tr><td>'4 26.1'</td><td>= Cosina 100mm F3.5 Macro</td> </tr><tr><td>'4 27'</td><td>= Tamron AF 28-300mm F3.5-6.3 LD Aspherical[IF] Macro (185D/285D)</td> </tr><tr><td>'4 28'</td><td>= smc PENTAX-FA 35mm F2 AL</td> </tr><tr><td>'4 29'</td><td>= Tamron AF 28-200mm F3.8-5.6 LD Super II Macro (371D)</td> </tr><tr><td>'4 34'</td><td>= smc PENTAX-FA 24-90mm F3.5-4.5 AL[IF]</td> </tr><tr><td>'4 35'</td><td>= smc PENTAX-FA 100-300mm F4.7-5.8</td> </tr><tr><td>'4 36'</td><td>= Tamron AF 70-300mm F4-5.6 LD Macro 1:2</td> </tr><tr><td>'4 37'</td><td>= Tamron SP AF 24-135mm F3.5-5.6 AD AL (190D)</td> </tr><tr><td>'4 38'</td><td>= smc PENTAX-FA 28-105mm F3.2-4.5 AL[IF]</td> </tr><tr><td>'4 39'</td><td>= smc PENTAX-FA 31mm F1.8 AL Limited</td> </tr><tr><td>'4 41'</td><td>= Tamron AF 28-200mm Super Zoom F3.8-5.6 Aspherical XR [IF] Macro (A03)</td> </tr><tr><td>'4 43'</td><td>= smc PENTAX-FA 28-90mm F3.5-5.6</td> </tr><tr><td>'4 44'</td><td>= smc PENTAX-FA J 75-300mm F4.5-5.8 AL</td> </tr><tr><td>'4 45'</td><td>= Tamron Lens (4 45)</td> </tr><tr><td>'4 45.1'</td><td>= Tamron 28-300mm F3.5-6.3 Ultra zoom XR</td> </tr><tr><td>'4 45.2'</td><td>= Tamron AF 28-300mm F3.5-6.3 XR Di LD Aspherical [IF] Macro</td> </tr><tr><td>'4 46'</td><td>= smc PENTAX-FA J 28-80mm F3.5-5.6 AL</td> </tr><tr><td>'4 47'</td><td>= smc PENTAX-FA J 18-35mm F4-5.6 AL</td> </tr><tr><td>'4 49'</td><td>= Tamron SP AF 28-75mm F2.8 XR Di LD Aspherical [IF] Macro</td> </tr><tr><td>'4 51'</td><td>= smc PENTAX-D FA 50mm F2.8 Macro</td> </tr><tr><td>'4 52'</td><td>= smc PENTAX-D FA 100mm F2.8 Macro</td> </tr><tr><td>'4 55'</td><td>= Samsung/Schneider D-XENOGON 35mm F2</td> </tr><tr><td>'4 56'</td><td>= Samsung/Schneider D-XENON 100mm F2.8 Macro</td> </tr><tr><td>'4 75'</td><td>= Tamron SP AF 70-200mm F2.8 Di LD [IF] Macro (A001)</td> </tr><tr><td>'4 214'</td><td>= smc PENTAX-DA 35mm F2.4 AL</td> </tr><tr><td>'4 229'</td><td>= smc PENTAX-DA 18-55mm F3.5-5.6 AL II</td> </tr><tr><td>'4 230'</td><td>= Tamron SP AF 17-50mm F2.8 XR Di II</td> </tr><tr><td>'4 231'</td><td>= smc PENTAX-DA 18-250mm F3.5-6.3 ED AL [IF]</td> </tr><tr><td>'4 237'</td><td>= Samsung/Schneider D-XENOGON 10-17mm F3.5-4.5</td> </tr><tr><td>'4 239'</td><td>= Samsung/Schneider D-XENON 12-24mm F4 ED AL [IF]</td> </tr><tr><td>'4 242'</td><td>= smc PENTAX-DA* 16-50mm F2.8 ED AL [IF] SDM (SDM unused)</td> </tr><tr><td>'4 243'</td><td>= smc PENTAX-DA 70mm F2.4 Limited</td> </tr><tr><td>'4 244'</td><td>= smc PENTAX-DA 21mm F3.2 AL Limited</td> </tr><tr><td>'4 245'</td><td>= Samsung/Schneider D-XENON 50-200mm F4-5.6</td> </tr><tr><td>'4 246'</td><td>= Samsung/Schneider D-XENON 18-55mm F3.5-5.6</td> </tr><tr><td>'4 247'</td><td>= smc PENTAX-DA FISH-EYE 10-17mm F3.5-4.5 ED[IF]</td> </tr><tr><td>'4 248'</td><td>= smc PENTAX-DA 12-24mm F4 ED AL [IF]</td> </tr><tr><td>'4 249'</td><td>= Tamron XR DiII 18-200mm F3.5-6.3 (A14)</td> </tr><tr><td>'4 250'</td><td>= smc PENTAX-DA 50-200mm F4-5.6 ED</td> </tr><tr><td>'4 251'</td><td>= smc PENTAX-DA 40mm F2.8 Limited</td> </tr><tr><td>'4 252'</td><td>= smc PENTAX-DA 18-55mm F3.5-5.6 AL</td> </tr><tr><td>'4 253'</td><td>= smc PENTAX-DA 14mm F2.8 ED[IF]</td> </tr><tr><td>'4 254'</td><td>= smc PENTAX-DA 16-45mm F4 ED AL</td> </tr><tr><td>'5 1'</td><td>= smc PENTAX-FA* 24mm F2 AL[IF]</td> </tr><tr><td>'5 2'</td><td>= smc PENTAX-FA 28mm F2.8 AL</td> </tr><tr><td>'5 3'</td><td>= smc PENTAX-FA 50mm F1.7</td> </tr><tr><td>'5 4'</td><td>= smc PENTAX-FA 50mm F1.4</td> </tr><tr><td>'5 5'</td><td>= smc PENTAX-FA* 600mm F4 ED[IF]</td> </tr><tr><td>'5 6'</td><td>= smc PENTAX-FA* 300mm F4.5 ED[IF]</td> </tr><tr><td>'5 7'</td><td>= smc PENTAX-FA 135mm F2.8 [IF]</td> </tr><tr><td>'5 8'</td><td>= smc PENTAX-FA Macro 50mm F2.8</td> </tr><tr><td>'5 9'</td><td>= smc PENTAX-FA Macro 100mm F2.8</td> </tr><tr><td>'5 10'</td><td>= smc PENTAX-FA* 85mm F1.4 [IF]</td> </tr><tr><td>'5 11'</td><td>= smc PENTAX-FA* 200mm F2.8 ED[IF]</td> </tr><tr><td>'5 12'</td><td>= smc PENTAX-FA 28-80mm F3.5-4.7</td> </tr><tr><td>'5 13'</td><td>= smc PENTAX-FA 70-200mm F4-5.6</td> </tr><tr><td>'5 14'</td><td>= smc PENTAX-FA* 250-600mm F5.6 ED[IF]</td> </tr><tr><td>'5 15'</td><td>= smc PENTAX-FA 28-105mm F4-5.6</td> </tr><tr><td>'5 16'</td><td>= smc PENTAX-FA 100-300mm F4.5-5.6</td> </tr><tr><td>'5 98'</td><td>= smc PENTAX-FA 100-300mm F4.5-5.6</td> </tr><tr><td>'6 1'</td><td>= smc PENTAX-FA* 85mm F1.4 [IF]</td> </tr><tr><td>'6 2'</td><td>= smc PENTAX-FA* 200mm F2.8 ED[IF]</td> </tr><tr><td>'6 3'</td><td>= smc PENTAX-FA* 300mm F2.8 ED[IF]</td> </tr><tr><td>'6 4'</td><td>= smc PENTAX-FA* 28-70mm F2.8 AL</td> </tr><tr><td>'6 5'</td><td>= smc PENTAX-FA* 80-200mm F2.8 ED[IF]</td> </tr><tr><td>'6 6'</td><td>= smc PENTAX-FA* 28-70mm F2.8 AL</td> </tr><tr><td>'6 7'</td><td>= smc PENTAX-FA* 80-200mm F2.8 ED[IF]</td> </tr><tr><td>'6 8'</td><td>= smc PENTAX-FA 28-70mm F4AL</td> </tr><tr><td>'6 9'</td><td>= smc PENTAX-FA 20mm F2.8</td> </tr><tr><td>'6 10'</td><td>= smc PENTAX-FA* 400mm F5.6 ED[IF]</td> </tr><tr><td>'6 13'</td><td>= smc PENTAX-FA* 400mm F5.6 ED[IF]</td> </tr><tr><td>'6 14'</td><td>= smc PENTAX-FA* Macro 200mm F4 ED[IF]</td> </tr><tr><td>'7 0'</td><td>= smc PENTAX-DA 21mm F3.2 AL Limited</td> </tr><tr><td>'7 58'</td><td>= smc PENTAX-D FA Macro 100mm F2.8 WR</td> </tr><tr><td>'7 75'</td><td>= Tamron SP AF 70-200mm F2.8 Di LD [IF] Macro (A001)</td> </tr><tr><td>'7 201'</td><td>= smc Pentax-DA L 50-200mm F4-5.6 ED WR</td> </tr><tr><td>'7 202'</td><td>= smc PENTAX-DA L 18-55mm F3.5-5.6 AL WR</td> </tr><tr><td>'7 203'</td><td>= HD PENTAX-DA 55-300mm F4-5.8 ED WR</td> </tr><tr><td>'7 204'</td><td>= HD PENTAX-DA 15mm F4 ED AL Limited</td> </tr><tr><td>'7 205'</td><td>= HD PENTAX-DA 35mm F2.8 Macro Limited</td> </tr><tr><td>'7 206'</td><td>= HD PENTAX-DA 70mm F2.4 Limited</td> </tr><tr><td>'7 207'</td><td>= HD PENTAX-DA 21mm F3.2 ED AL Limited</td> </tr><tr><td>'7 208'</td><td>= HD PENTAX-DA 40mm F2.8 Limited</td> </tr><tr><td>'7 212'</td><td>= smc PENTAX-DA 50mm F1.8</td> </tr><tr><td>'7 213'</td><td>= smc PENTAX-DA 40mm F2.8 XS</td> </tr><tr><td>'7 214'</td><td>= smc PENTAX-DA 35mm F2.4 AL</td> </tr><tr><td>'7 216'</td><td>= smc PENTAX-DA L 55-300mm F4-5.8 ED</td> </tr><tr><td>'7 217'</td><td>= smc PENTAX-DA 50-200mm F4-5.6 ED WR</td> </tr><tr><td>'7 218'</td><td>= smc PENTAX-DA 18-55mm F3.5-5.6 AL WR</td> </tr><tr><td>'7 220'</td><td>= Tamron SP AF 10-24mm F3.5-4.5 Di II LD Aspherical [IF]</td> </tr><tr><td>'7 221'</td><td>= smc PENTAX-DA L 50-200mm F4-5.6 ED</td> </tr><tr><td>'7 222'</td><td>= smc PENTAX-DA L 18-55mm F3.5-5.6</td> </tr><tr><td>'7 223'</td><td>= Samsung/Schneider D-XENON 18-55mm F3.5-5.6 II</td> </tr><tr><td>'7 224'</td><td>= smc PENTAX-DA 15mm F4 ED AL Limited</td> </tr><tr><td>'7 225'</td><td>= Samsung/Schneider D-XENON 18-250mm F3.5-6.3</td> </tr><tr><td>'7 226'</td><td>= smc PENTAX-DA* 55mm F1.4 SDM (SDM unused)</td> </tr><tr><td>'7 227'</td><td>= smc PENTAX-DA* 60-250mm F4 [IF] SDM (SDM unused)</td> </tr><tr><td>'7 228'</td><td>= Samsung 16-45mm F4 ED</td> </tr><tr><td>'7 229'</td><td>= smc PENTAX-DA 18-55mm F3.5-5.6 AL II</td> </tr><tr><td>'7 230'</td><td>= Tamron AF 17-50mm F2.8 XR Di-II LD (Model A16)</td> </tr><tr><td>'7 231'</td><td>= smc PENTAX-DA 18-250mm F3.5-6.3 ED AL [IF]</td> </tr><tr><td>'7 233'</td><td>= smc PENTAX-DA 35mm F2.8 Macro Limited</td> </tr><tr><td>'7 234'</td><td>= smc PENTAX-DA* 300mm F4 ED [IF] SDM (SDM unused)</td> </tr><tr><td>'7 235'</td><td>= smc PENTAX-DA* 200mm F2.8 ED [IF] SDM (SDM unused)</td> </tr><tr><td>'7 236'</td><td>= smc PENTAX-DA 55-300mm F4-5.8 ED</td> </tr><tr><td>'7 238'</td><td>= Tamron AF 18-250mm F3.5-6.3 Di II LD Aspherical [IF] Macro</td> </tr><tr><td>'7 241'</td><td>= smc PENTAX-DA* 50-135mm F2.8 ED [IF] SDM (SDM unused)</td> </tr><tr><td>'7 242'</td><td>= smc PENTAX-DA* 16-50mm F2.8 ED AL [IF] SDM (SDM unused)</td> </tr><tr><td>'7 243'</td><td>= smc PENTAX-DA 70mm F2.4 Limited</td> </tr><tr><td>'7 244'</td><td>= smc PENTAX-DA 21mm F3.2 AL Limited</td> </tr><tr><td>'8 0'</td><td>= Sigma 50-150mm F2.8 II APO EX DC HSM</td> </tr><tr><td>'8 3'</td><td>= Sigma AF 18-125mm F3.5-5.6 DC</td> </tr><tr><td>'8 4'</td><td>= Sigma 50mm F1.4 EX DG HSM</td> </tr><tr><td>'8 7'</td><td>= Sigma 24-70mm F2.8 IF EX DG HSM</td> </tr><tr><td>'8 8'</td><td>= Sigma 18-250mm F3.5-6.3 DC OS HSM</td> </tr><tr><td>'8 11'</td><td>= Sigma 10-20mm F3.5 EX DC HSM</td> </tr><tr><td>'8 12'</td><td>= Sigma 70-300mm F4-5.6 DG OS</td> </tr><tr><td>'8 13'</td><td>= Sigma 120-400mm F4.5-5.6 APO DG OS HSM</td> </tr><tr><td>'8 14'</td><td>= Sigma 17-70mm F2.8-4.0 DC Macro OS HSM</td> </tr><tr><td>'8 15'</td><td>= Sigma 150-500mm F5-6.3 APO DG OS HSM</td> </tr><tr><td>'8 16'</td><td>= Sigma 70-200mm F2.8 EX DG Macro HSM II</td> </tr><tr><td>'8 17'</td><td>= Sigma 50-500mm F4.5-6.3 DG OS HSM</td> </tr><tr><td>'8 18'</td><td>= Sigma 8-16mm F4.5-5.6 DC HSM</td> </tr><tr><td>'8 21'</td><td>= Sigma 17-50mm F2.8 EX DC OS HSM</td> </tr><tr><td>'8 22'</td><td>= Sigma 85mm F1.4 EX DG HSM</td> </tr><tr><td>'8 23'</td><td>= Sigma 70-200mm F2.8 APO EX DG OS HSM</td> </tr><tr><td>'8 25'</td><td>= Sigma 17-50mm F2.8 EX DC HSM</td> </tr><tr><td>'8 27'</td><td>= Sigma 18-200mm F3.5-6.3 II DC HSM</td> </tr><tr><td>'8 28'</td><td>= Sigma 18-250mm F3.5-6.3 DC Macro HSM</td> </tr><tr><td>'8 29'</td><td>= Sigma 35mm F1.4 DG HSM</td> </tr><tr><td>'8 30'</td><td>= Sigma 17-70mm F2.8-4 DC Macro HSM Contemporary</td> </tr><tr><td>'8 31'</td><td>= Sigma 18-35mm F1.8 DC HSM</td> </tr><tr><td>'8 32'</td><td>= Sigma 30mm F1.4 DC HSM | A</td> </tr><tr><td>'8 34'</td><td>= Sigma 18-300mm F3.5-6.3 DC Macro HSM</td> </tr><tr><td>'8 59'</td><td>= HD PENTAX-D FA 150-450mm F4.5-5.6 ED DC AW</td> </tr><tr><td>'8 60'</td><td>= HD PENTAX-D FA* 70-200mm F2.8 ED DC AW</td> </tr><tr><td>'8 62'</td><td>= HD PENTAX-D FA 24-70mm F2.8 ED SDM WR</td> </tr><tr><td>'8 198'</td><td>= smc PENTAX-DA L 18-50mm F4-5.6 DC WR RE</td> </tr><tr><td>'8 199'</td><td>= HD PENTAX-DA 18-50mm F4-5.6 DC WR RE</td> </tr><tr><td>'8 200'</td><td>= HD PENTAX-DA 16-85mm F3.5-5.6 ED DC WR</td> </tr><tr><td>'8 209'</td><td>= HD PENTAX-DA 20-40mm F2.8-4 ED Limited DC WR</td> </tr><tr><td>'8 210'</td><td>= smc PENTAX-DA 18-270mm F3.5-6.3 ED SDM</td> </tr><tr><td>'8 211'</td><td>= HD PENTAX-DA 560mm F5.6 ED AW</td> </tr><tr><td>'8 215'</td><td>= smc PENTAX-DA 18-135mm F3.5-5.6 ED AL [IF] DC WR</td> </tr><tr><td>'8 226'</td><td>= smc PENTAX-DA* 55mm F1.4 SDM</td> </tr><tr><td>'8 227'</td><td>= smc PENTAX-DA* 60-250mm F4 [IF] SDM</td> </tr><tr><td>'8 232'</td><td>= smc PENTAX-DA 17-70mm F4 AL [IF] SDM</td> </tr><tr><td>'8 234'</td><td>= smc PENTAX-DA* 300mm F4 ED [IF] SDM</td> </tr><tr><td>'8 235'</td><td>= smc PENTAX-DA* 200mm F2.8 ED [IF] SDM</td> </tr><tr><td>'8 241'</td><td>= smc PENTAX-DA* 50-135mm F2.8 ED [IF] SDM</td> </tr><tr><td>'8 242'</td><td>= smc PENTAX-DA* 16-50mm F2.8 ED AL [IF] SDM</td> </tr><tr><td>'8 255'</td><td>= Sigma Lens (8 255)</td> </tr><tr><td>'8 255.1'</td><td>= Sigma 70-200mm F2.8 EX DG Macro HSM II</td> </tr><tr><td>'8 255.2'</td><td>= Sigma 150-500mm F5-6.3 DG APO [OS] HSM</td> </tr><tr><td>'8 255.3'</td><td>= Sigma 50-150mm F2.8 II APO EX DC HSM</td> </tr><tr><td>'8 255.4'</td><td>= Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye</td> </tr><tr><td>'8 255.5'</td><td>= Sigma 50-200mm F4-5.6 DC OS</td> </tr><tr><td>'8 255.6'</td><td>= Sigma 24-70mm F2.8 EX DG HSM</td> </tr><tr><td>'9 0'</td><td>= 645 Manual Lens</td> </tr><tr><td>'10 0'</td><td>= 645 A Series Lens</td> </tr><tr><td>'11 1'</td><td>= smc PENTAX-FA 645 75mm F2.8</td> </tr><tr><td>'11 2'</td><td>= smc PENTAX-FA 645 45mm F2.8</td> </tr><tr><td>'11 3'</td><td>= smc PENTAX-FA* 645 300mm F4 ED [IF]</td> </tr><tr><td>'11 4'</td><td>= smc PENTAX-FA 645 45-85mm F4.5</td> </tr><tr><td>'11 5'</td><td>= smc PENTAX-FA 645 400mm F5.6 ED [IF]</td> </tr><tr><td>'11 7'</td><td>= smc PENTAX-FA 645 Macro 120mm F4</td> </tr><tr><td>'11 8'</td><td>= smc PENTAX-FA 645 80-160mm F4.5</td> </tr><tr><td>'11 9'</td><td>= smc PENTAX-FA 645 200mm F4 [IF]</td> </tr><tr><td>'11 10'</td><td>= smc PENTAX-FA 645 150mm F2.8 [IF]</td> </tr><tr><td>'11 11'</td><td>= smc PENTAX-FA 645 35mm F3.5 AL [IF]</td> </tr><tr><td>'11 12'</td><td>= smc PENTAX-FA 645 300mm F5.6 ED [IF]</td> </tr><tr><td>'11 14'</td><td>= smc PENTAX-FA 645 55-110mm F5.6</td> </tr><tr><td>'11 16'</td><td>= smc PENTAX-FA 645 33-55mm F4.5 AL</td> </tr><tr><td>'11 17'</td><td>= smc PENTAX-FA 645 150-300mm F5.6 ED [IF]</td> </tr><tr><td>'11 21'</td><td>= HD PENTAX-D FA 645 35mm F3.5 AL [IF]</td> </tr><tr><td>'13 18'</td><td>= smc PENTAX-D FA 645 55mm F2.8 AL [IF] SDM AW</td> </tr><tr><td>'13 19'</td><td>= smc PENTAX-D FA 645 25mm F4 AL [IF] SDM AW</td> </tr><tr><td>'13 20'</td><td>= HD PENTAX-D FA 645 90mm F2.8 ED AW SR</td> </tr><tr><td>'13 253'</td><td>= HD PENTAX-DA 645 28-45mm F4.5 ED AW SR</td> </tr><tr><td>'21 0'</td><td>= Pentax Q Manual Lens</td> </tr><tr><td>'21 1'</td><td>= 01 Standard Prime 8.5mm F1.9</td> </tr><tr><td>'21 2'</td><td>= 02 Standard Zoom 5-15mm F2.8-4.5</td> </tr><tr><td>'21 6'</td><td>= 06 Telephoto Zoom 15-45mm F2.8</td> </tr><tr><td>'21 7'</td><td>= 07 Mount Shield 11.5mm F9</td> </tr><tr><td>'21 8'</td><td>= 08 Wide Zoom 3.8-5.9mm F3.7-4</td> </tr><tr><td>'22 3'</td><td>= 03 Fish-eye 3.2mm F5.6</td> </tr><tr><td>'22 4'</td><td>= 04 Toy Lens Wide 6.3mm F7.1</td> </tr><tr><td>'22 5'</td><td>= 05 Toy Lens Telephoto 18mm F8</td> </tr></table></td></tr></table></blockquote> <h2><a name='SRInfo'>Pentax SRInfo Tags</a></h2> <p>Shake reduction information.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>SRResult</td> <td class=c>int8u</td> <td><span class=s>0x0 = Not stabilized <br>Bit 0 = Stabilized <br>Bit 6 = Not ready</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>ShakeReduction</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = On <br>4 = Off (4) <br>5 = On but Disabled <br>6 = On (Video)</td><td>&nbsp;&nbsp;</td> <td>7 = On (7) <br>15 = On (15) <br>39 = On (mode 2) <br>135 = On (135) <br>167 = On (mode 1)</td></tr></table> </td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>SRHalfPressTime</td> <td class=c>int8u</td> <td><span class=s><span class=n>(time from when the shutter button was half pressed to when the shutter was released, including time for focusing. Not valid for some models)</span></span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>SRFocalLength</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SRInfo2'>Pentax SRInfo2 Tags</a></h2> <p>Shake reduction information for the K-3.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>SRResult?</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>ShakeReduction</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = On <br>4 = Off (AA simulation off) <br>5 = On but Disabled <br>6 = On (Video) <br>7 = On (AA simulation off) <br>12 = Off (AA simulation type 1) <br>15 = On (AA simulation type 1) <br>20 = Off (AA simulation type 2) <br>23 = On (AA simulation type 2)</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceInfo'>Pentax FaceInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FacesDetected</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>FacePosition</td> <td class=c>int8u[2]</td> <td><span class=s><span class=n>(X/Y coordinates of the center of the main face in percent of frame size, with positive Y downwards)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='AWBInfo'>Pentax AWBInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>WhiteBalanceAutoAdjustment</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>TungstenAWB</td> <td class=c>int8u</td> <td><span class=s>0 = Subtle Correction <br>1 = Strong Correction</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='TimeInfo'>Pentax TimeInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0.1</td> <td>WorldTimeLocation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x01] <br>0x0 = Hometown <br>0x1 = Destination</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.2</td> <td>HometownDST</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x02] <br>0x0 = No <br>0x2 = Yes</span></td></tr> <tr> <td class=r title='0 = 0x0'>0.3</td> <td>DestinationDST</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x04] <br>0x0 = No <br>0x4 = Yes</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>HometownCity</td> <td class=c>int8u</td> <td>--&gt; <a href='Pentax.html#City'>Pentax City Values</a></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>DestinationCity</td> <td class=c>int8u</td> <td>--&gt; <a href='Pentax.html#City'>Pentax City Values</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='LensCorr'>Pentax LensCorr Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>DistortionCorrection</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>ChromaticAberrationCorrection</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>PeripheralIlluminationCorr</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>DiffractionCorrection</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>16 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraSettings'>Pentax CameraSettings Tags</a></h2> <p>Camera settings information written by Pentax DSLR cameras.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PictureMode2</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Scene Mode <br>1 = Auto PICT <br>2 = Program AE <br>3 = Green Mode <br>4 = Shutter Speed Priority <br>5 = Aperture Priority <br>6 = Program Tv Shift <br>7 = Program Av Shift <br>8 = Manual <br>9 = Bulb <br>10 = Aperture Priority, Off-Auto-Aperture <br>11 = Manual, Off-Auto-Aperture <br>12 = Bulb, Off-Auto-Aperture <br>13 = Shutter &amp; Aperture Priority AE <br>15 = Sensitivity Priority AE <br>16 = Flash X-Sync Speed AE</td></tr></table> </td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.1</td> <td>ProgramLine</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x03] <br>0x0 = Normal <br>0x1 = Hi Speed <br>0x2 = Depth <br>0x3 = MTF</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.2</td> <td>EVSteps</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x20] <br>0x0 = 1/2 EV Steps <br>0x20 = 1/3 EV Steps</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.3</td> <td>E-DialInProgram</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x40] <br>0x0 = Tv or Av <br>0x40 = P Shift</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.4</td> <td>ApertureRingUse</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Prohibited <br>0x80 = Permitted</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>FlashOptions</td> <td class=c>int8u</td> <td><span class=s><span class=n>(the camera flash options settings, set even if the flash is off)</span> <br>[Mask 0xf0]</span><table class=cols><tr> <td>0x0 = Normal <br>0x1 = Red-eye reduction <br>0x2 = Auto <br>0x3 = Auto, Red-eye reduction <br>0x5 = Wireless (Master) <br>0x6 = Wireless (Control) <br>0x8 = Slow-sync <br>0x9 = Slow-sync, Red-eye reduction <br>0xa = Trailing-curtain Sync</td></tr></table> </td></tr> <tr> <td class=r title='2 = 0x2'>2.1</td> <td>MeteringMode2</td> <td class=c>int8u</td> <td><span class=s><span class=n>(may not be valid for some models, eg. *ist D)</span> <br>[Mask 0x0f] <br>0x0 = Multi-segment <br>Bit 0 = Center-weighted average <br>Bit 1 = Spot</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>AFPointMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0] <br>0x0 = Auto <br>Bit 4 = Select <br>Bit 5 = Fixed Center</span></td></tr> <tr> <td class=r title='3 = 0x3'>3.1</td> <td>FocusMode2</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f] <br>0x0 = Manual <br>0x1 = AF-S <br>0x2 = AF-C <br>0x3 = AF-A</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>AFPointSelected2</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Auto <br>Bit 0 = Upper-left <br>Bit 1 = Top <br>Bit 2 = Upper-right <br>Bit 3 = Left <br>Bit 4 = Mid-left</td><td>&nbsp;&nbsp;</td> <td>Bit 5 = Center <br>Bit 6 = Mid-right <br>Bit 7 = Right <br>Bit 8 = Lower-left <br>Bit 9 = Bottom <br>Bit 10 = Lower-right</td></tr></table> </td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ISOFloor</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>DriveMode2</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0x0 = Single-frame <br>Bit 0 = Continuous <br>Bit 1 = Continuous (Lo) <br>Bit 2 = Self-timer (12 s) <br>Bit 3 = Self-timer (2 s) <br>Bit 4 = Remote Control (3 s delay) <br>Bit 5 = Remote Control <br>Bit 6 = Exposure Bracket <br>Bit 7 = Multiple Exposure</td></tr></table> </td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>ExposureBracketStepSize</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>3 = 0.3 <br>4 = 0.5 <br>5 = 0.7 <br>8 = 1.0</td><td>&nbsp;&nbsp;</td> <td>11 = 1.3 <br>12 = 1.5 <br>13 = 1.7 <br>16 = 2.0</td></tr></table> </td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>BracketShotNumber</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0x0 = n/a <br>0x2 = 1 of 2 <br>0x3 = 1 of 3 <br>0x5 = 1 of 5</td><td>&nbsp;&nbsp;</td> <td>0x12 = 2 of 2 <br>0x13 = 2 of 3 <br>0x15 = 2 of 5 <br>0x23 = 3 of 3</td><td>&nbsp;&nbsp;</td> <td>0x25 = 3 of 5 <br>0x35 = 4 of 5 <br>0x45 = 5 of 5</td></tr></table> </td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>WhiteBalanceSet</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span><table class=cols><tr> <td>0x0 = Auto <br>0x10 = Daylight <br>0x20 = Shade <br>0x30 = Cloudy <br>0x40 = Daylight Fluorescent <br>0x50 = Day White Fluorescent <br>0x60 = White Fluorescent <br>0x70 = Tungsten <br>0x80 = Flash <br>0x90 = Manual <br>0xc0 = Set Color Temperature 1 <br>0xd0 = Set Color Temperature 2 <br>0xe0 = Set Color Temperature 3</td></tr></table> </td></tr> <tr class=b> <td class=r title='10 = 0xa'>10.1</td> <td>MultipleExposureSet</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f] <br>0x0 = Off <br>0x1 = On</span></td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>RawAndJpgRecording</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K10D only)</span></span><table class=cols><tr> <td>0x1 = JPEG (Best) <br>0x4 = RAW (PEF, Best) <br>0x5 = RAW+JPEG (PEF, Best) <br>0x8 = RAW (DNG, Best) <br>0x9 = RAW+JPEG (DNG, Best) <br>0x21 = JPEG (Better) <br>0x24 = RAW (PEF, Better) <br>0x25 = RAW+JPEG (PEF, Better) <br>0x28 = RAW (DNG, Better) <br>0x29 = RAW+JPEG (DNG, Better) <br>0x41 = JPEG (Good) <br>0x44 = RAW (PEF, Good) <br>0x45 = RAW+JPEG (PEF, Good) <br>0x48 = RAW (DNG, Good) <br>0x49 = RAW+JPEG (DNG, Good)</td></tr></table> </td></tr> <tr class=b> <td class=r title='14 = 0xe'>14.1</td> <td>JpgRecordedPixels</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K10D only)</span> <br>[Mask 0x03] <br>0x0 = 10 MP <br>0x1 = 6 MP <br>0x2 = 2 MP</span></td></tr> <tr> <td class=r title='14 = 0xe'>14.2</td> <td>LinkAEToAFPoint</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K-5 only)</span> <br>[Mask 0x01] <br>0x0 = Off <br>0x1 = On</span></td></tr> <tr class=b> <td class=r title='14 = 0xe'>14.3</td> <td>SensitivitySteps</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K-5 only)</span> <br>[Mask 0x02] <br>0x0 = 1 EV Steps <br>0x2 = As EV Steps</span></td></tr> <tr> <td class=r title='14 = 0xe'>14.4</td> <td>ISOAuto</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K-5 only)</span> <br>[Mask 0x04] <br>0x0 = Off <br>0x4 = On</span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>FlashOptions2</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K10D only; set even if the flash is off)</span> <br>[Mask 0xf0]</span><table class=cols><tr> <td>0x0 = Normal <br>0x10 = Red-eye reduction <br>0x20 = Auto <br>0x30 = Auto, Red-eye reduction <br>0x50 = Wireless (Master) <br>0x60 = Wireless (Control) <br>0x80 = Slow-sync <br>0x90 = Slow-sync, Red-eye reduction <br>0xa0 = Trailing-curtain Sync</td></tr></table> </td></tr> <tr> <td class=r title='16 = 0x10'>16.1</td> <td>MeteringMode3</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K10D only)</span> <br>[Mask 0x0f] <br>0x0 = Multi-segment <br>Bit 0 = Center-weighted average <br>Bit 1 = Spot</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17.1</td> <td>SRActive</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K10D only; SR is active only when ShakeReduction is On, DriveMode is not Remote or Self-timer, and Internal/ExternalFlashMode is not &quot;On, Wireless&quot;)</span> <br>[Mask 0x80] <br>0x0 = No <br>0x80 = Yes</span></td></tr> <tr> <td class=r title='17 = 0x11'>17.2</td> <td>Rotation</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K10D only)</span> <br>[Mask 0x60] <br>0x0 = Horizontal (normal) <br>0x20 = Rotate 180 <br>0x40 = Rotate 90 CW <br>0x60 = Rotate 270 CW</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17.3</td> <td>ISOSetting</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K10D only)</span> <br>[Mask 0x04] <br>0x0 = Manual <br>0x4 = Auto</span></td></tr> <tr> <td class=r title='17 = 0x11'>17.4</td> <td>SensitivitySteps</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K10D only)</span> <br>[Mask 0x02] <br>0x0 = 1 EV Steps <br>0x2 = As EV Steps</span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>TvExposureTimeSetting</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K10D only)</span></span></td></tr> <tr> <td class=r title='19 = 0x13'>19</td> <td>AvApertureSetting</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K10D only)</span></span></td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>SvISOSetting</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K10D only)</span></span></td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>BaseExposureCompensation</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K10D only; exposure compensation without auto bracketing)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraSettingsUnknown'>Pentax CameraSettingsUnknown Tags</a></h2> <p>This information has not yet been decoded for models such as the K-01.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='AEInfo'>Pentax AEInfo Tags</a></h2> <p>Auto-exposure information for most Pentax models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>AEExposureTime</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 24 * 2**((32-raw)/8))</span></span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>AEAperture</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 2**((raw-68)/16))</span></span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>AE_ISO</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 100 * 2**((raw-32)/8))</span></span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>AEXv</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = (raw-64)/8)</span></span></td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>AEBXv</td> <td class=c>int8s</td> <td><span class=s><span class=n>(val = raw / 8)</span></span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>AEMinExposureTime</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 24 * 2**((32-raw)/8))</span></span></td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>AEProgramMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = M, P or TAv <br>1 = Av, B or X <br>2 = Tv <br>3 = Sv or Green Mode <br>8 = Hi-speed Program <br>11 = Hi-speed Program (P-Shift) <br>16 = DOF Program <br>19 = DOF Program (P-Shift) <br>24 = MTF Program <br>27 = MTF Program (P-Shift) <br>35 = Standard <br>43 = Portrait <br>51 = Landscape <br>59 = Macro <br>67 = Sport</td><td>&nbsp;&nbsp;</td> <td>75 = Night Scene Portrait <br>83 = No Flash <br>91 = Night Scene <br>99 = Surf &amp; Snow <br>104 = Night Snap <br>107 = Text <br>115 = Sunset <br>123 = Kids <br>131 = Pet <br>139 = Candlelight <br>144 = SCN <br>147 = Museum <br>160 = Program <br>184 = Shallow DOF Program <br>216 = HDR</td></tr></table> </td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>AEFlags</td> <td class=c>N</td> <td><span class=s><span class=n>(indices after this are incremented by 1 for some models)</span> <br>Bit 3 = AE lock <br>Bit 4 = Flash recommended? <br>Bit 7 = Aperture wide open</span></td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>AEApertureSteps</td> <td class=c>int8u</td> <td><span class=s><span class=n>(number of steps the aperture has been stopped down from wide open. There are roughly 8 steps per F-stop for most lenses, or 18 steps for 645D lenses, but it varies slightly by lens)</span></span></td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>AEMaxAperture</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 2**((raw-68)/16))</span></span></td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>AEMaxAperture2</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 2**((raw-68)/16))</span></span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>AEMinAperture</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 2**((raw-68)/16))</span></span></td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>AEMeteringMode</td> <td class=c>int8u</td> <td><span class=s>0x0 = Multi-segment <br>Bit 4 = Center-weighted average <br>Bit 5 = Spot</span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>AEWhiteBalance</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K7 and Kx)</span> <br>[Mask 0xf0]</span><table class=cols><tr> <td>0x0 = Standard <br>0x10 = Daylight <br>0x20 = Shade <br>0x30 = Cloudy <br>0x40 = Daylight Fluorescent <br>0x50 = Day White Fluorescent <br>0x60 = White Fluorescent <br>0x70 = Tungsten</td></tr></table> </td></tr> <tr> <td class=r title='13 = 0xd'>13.1</td> <td>AEMeteringMode2</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K7 and Kx, override for an incompatable metering mode setting)</span> <br>[Mask 0x0f] <br>0x0 = Multi-segment <br>Bit 0 = Center-weighted average <br>Bit 1 = Spot</span></td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>FlashExposureCompSet</td> <td class=c>int8s</td> <td><span class=s><span class=n>(reports the camera setting, unlike tag 0x004d which reports 0 in Green mode or if flash was on but did not fire. Both this tag and 0x004d report the setting even if the flash is off)</span></span></td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>LevelIndicator</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AEInfo2'>Pentax AEInfo2 Tags</a></h2> <p>Auto-exposure information for the K-01.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>AEExposureTime</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 24 * 2**((32-raw)/8))</span></span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>AEAperture</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 2**((raw-68)/16))</span></span></td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>AE_ISO</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 100 * 2**((raw-32)/8))</span></span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>AEXv</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = (raw-64)/8)</span></span></td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>AEBXv</td> <td class=c>int8s</td> <td><span class=s><span class=n>(val = raw / 8)</span></span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>AEError</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>AEApertureSteps</td> <td class=c>int8u</td> <td><span class=s><span class=n>(number of steps the aperture has been stopped down from wide open. There are roughly 8 steps per F-stop, but it varies slightly by lens)</span></span></td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>SceneMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = HDR <br>4 = Auto PICT <br>5 = Portrait <br>6 = Landscape <br>7 = Macro <br>8 = Sport <br>9 = Night Scene Portrait <br>10 = No Flash <br>11 = Night Scene <br>12 = Surf &amp; Snow <br>14 = Sunset</td><td>&nbsp;&nbsp;</td> <td>15 = Kids <br>16 = Pet <br>17 = Candlelight <br>18 = Museum <br>20 = Food <br>21 = Stage Lighting <br>22 = Night Snap <br>25 = Night Scene HDR <br>26 = Blue Sky <br>27 = Forest <br>29 = Backlight Silhouette</td></tr></table> </td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>AEMaxAperture</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 2**((raw-68)/16))</span></span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>AEMaxAperture2</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 2**((raw-68)/16))</span></span></td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>AEMinAperture</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 2**((raw-68)/16))</span></span></td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>AEMinExposureTime</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 24 * 2**((32-raw)/8))</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='AEInfo3'>Pentax AEInfo3 Tags</a></h2> <p>Auto-exposure information for the K-3, K-30, K-50 and K-500.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>AEExposureTime</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 24 * 2**((32-raw)/8))</span></span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>AEAperture</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 2**((raw-68)/16))</span></span></td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>AE_ISO</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 100 * 2**((raw-32)/8))</span></span></td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28</td> <td>AEMaxAperture</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 2**((raw-68)/16))</span></span></td></tr> <tr> <td class=r title='29 = 0x1d'>29</td> <td>AEMaxAperture2</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 2**((raw-68)/16))</span></span></td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>AEMinAperture</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 2**((raw-68)/16))</span></span></td></tr> <tr> <td class=r title='31 = 0x1f'>31</td> <td>AEMinExposureTime</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 24 * 2**((32-raw)/8))</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='AEInfoUnknown'>Pentax AEInfoUnknown Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='LensInfo'>Pentax LensInfo Tags</a></h2> <p>Pentax lens information structure for models such as the *istD.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>LensType</td> <td class=c>int8u[2]</td> <td>--&gt; <a href='Pentax.html#LensType'>Pentax LensType Values</a></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>LensData</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#LensData'>Pentax LensData Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='LensInfo2'>Pentax LensInfo2 Tags</a></h2> <p>Pentax lens information structure for models such as the K10D and K20D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>LensType</td> <td class=c>int8u[4]</td> <td>--&gt; <a href='Pentax.html#LensType'>Pentax LensType Values</a></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>LensData</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#LensData'>Pentax LensData Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='LensData'>Pentax LensData Tags</a></h2> <p>Pentax lens data information. Some of these tags require interesting binary gymnastics to decode them into useful values.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0.1</td> <td>AutoAperture</td> <td class=c>int8u</td> <td><span class=s><span class=n>(not valid for the K-r, K-5 or K-5II)</span> <br>[Mask 0x01] <br>0x0 = On <br>0x1 = Off</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.2</td> <td>MinAperture</td> <td class=c>int8u</td> <td><span class=s><span class=n>(not valid for the K-r, K-5 or K-5II)</span> <br>[Mask 0x06] <br>0x0 = 22 <br>0x2 = 32 <br>0x4 = 45 <br>0x6 = 16</span></td></tr> <tr> <td class=r title='0 = 0x0'>0.3</td> <td>LensFStops</td> <td class=c>int8u</td> <td><span class=s><span class=n>(not valid for the K-r, K-5 or K-5II)</span> <br>[Mask 0x70]</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>LensKind?</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>LC1?</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>MinFocusDistance</td> <td class=c>int8u</td> <td><span class=s><span class=n>(minimum focus distance for the lens)</span> <br>[Mask 0xf8]</span><table class=cols><tr> <td>0x0 = 0.13-0.19 m <br>0x8 = 0.20-0.24 m <br>0x10 = 0.25-0.28 m <br>0x18 = 0.28-0.30 m <br>0x20 = 0.35-0.38 m <br>0x28 = 0.40-0.45 m <br>0x30 = 0.49-0.50 m <br>0x38 = 0.6 m <br>0x40 = 0.7 m <br>0x48 = 0.8-0.9 m <br>0x50 = 1.0 m</td><td>&nbsp;&nbsp;</td> <td>0x58 = 1.1-1.2 m <br>0x60 = 1.4-1.5 m <br>0x68 = 1.5 m <br>0x70 = 2.0 m <br>0x78 = 2.0-2.1 m <br>0x80 = 2.1 m <br>0x88 = 2.2-2.9 m <br>0x90 = 3.0 m <br>0x98 = 4-5 m <br>0xa0 = 5.6 m</td></tr></table> </td></tr> <tr> <td class=r title='3 = 0x3'>3.1</td> <td>FocusRangeIndex</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x07]</span><table class=cols><tr> <td>0x0 = 5 <br>0x1 = 4 <br>0x2 = 6 (far) <br>0x3 = 7 (very far)</td><td>&nbsp;&nbsp;</td> <td>0x4 = 2 <br>0x5 = 3 <br>0x6 = 1 (close) <br>0x7 = 0 (very close)</td></tr></table> </td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>LC3?</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>LC4?</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>LC5?</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>LC6?</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>LC7?</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>LensFocalLength <br>LC8?</td> <td class=c>int8u<br>int8u</td> <td><span class=s><span class=n>(focal length of lens alone, without adapter)</span></span></td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>NominalMaxAperture</td> <td class=c>int8u</td> <td><span class=s>[Mask 0xf0]</span></td></tr> <tr> <td class=r title='10 = 0xa'>10.1</td> <td>NominalMinAperture</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>LC10?</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>LC11?</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>LC12?</td> <td class=c>int8u</td> <td><span class=s><span class=n>(ID&#39;s 13-16 are offset by 1 for the K-r, K-5 and K-5II)</span></span></td></tr> <tr> <td class=r title='14 = 0xe'>14.1</td> <td>MaxAperture</td> <td class=c>int8u</td> <td><span class=s><span class=n>(effective wide open aperture for current focal length)</span> <br>[Mask 0x7f]</span></td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>LC14?</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>LC15?</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LensInfo3'>Pentax LensInfo3 Tags</a></h2> <p>Pentax lens information structure for 645D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>LensType</td> <td class=c>int8u[4]</td> <td>--&gt; <a href='Pentax.html#LensType'>Pentax LensType Values</a></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>LensData</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#LensData'>Pentax LensData Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='LensInfo4'>Pentax LensInfo4 Tags</a></h2> <p>Pentax lens information structure for models such as the K-5 and K-r.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>LensType</td> <td class=c>int8u[4]</td> <td>--&gt; <a href='Pentax.html#LensType'>Pentax LensType Values</a></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>LensData</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#LensData'>Pentax LensData Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='LensInfo5'>Pentax LensInfo5 Tags</a></h2> <p>Pentax lens information structure for the K-01 and newer models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>LensType</td> <td class=c>int8u[5]</td> <td>--&gt; <a href='Pentax.html#LensType'>Pentax LensType Values</a></td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>LensData</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#LensData'>Pentax LensData Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='FlashInfo'>Pentax FlashInfo Tags</a></h2> <p>Flash information tags for the K10D, K20D and K200D.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FlashStatus</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0x0 = Off <br>0x1 = Off (1) <br>0x2 = External, Did not fire <br>0x6 = External, Fired <br>0x8 = Internal, Did not fire (0x08) <br>0x9 = Internal, Did not fire <br>0xd = Internal, Fired</td></tr></table> </td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>InternalFlashMode</td> <td class=c>int8u</td> <td><span class=s>0x0 = n/a - Off-Auto-Aperture <br>0x86 = Fired, Wireless (Control) <br>0x95 = Fired, Wireless (Master) <br>0xc0 = Fired <br>0xc1 = Fired, Red-eye reduction <br>0xc2 = Fired, Auto <br>0xc3 = Fired, Auto, Red-eye reduction <br>0xc6 = Fired, Wireless (Control), Fired normally not as control <br>0xc8 = Fired, Slow-sync <br>0xc9 = Fired, Slow-sync, Red-eye reduction <br>0xca = Fired, Trailing-curtain Sync <br>0xf0 = Did not fire, Normal <br>0xf1 = Did not fire, Red-eye reduction <br>0xf2 = Did not fire, Auto <br>0xf3 = Did not fire, Auto, Red-eye reduction <br>0xf4 = Did not fire, (Unknown 0xf4) <br>0xf5 = Did not fire, Wireless (Master) <br>0xf6 = Did not fire, Wireless (Control) <br>0xf8 = Did not fire, Slow-sync <br>0xf9 = Did not fire, Slow-sync, Red-eye reduction <br>0xfa = Did not fire, Trailing-curtain Sync</span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>ExternalFlashMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0x0 = n/a - Off-Auto-Aperture <br>0x3f = Off <br>0x40 = On, Auto <br>0xbf = On, Flash Problem <br>0xc0 = On, Manual <br>0xc4 = On, P-TTL Auto <br>0xc5 = On, Contrast-control Sync <br>0xc6 = On, High-speed Sync <br>0xcc = On, Wireless <br>0xcd = On, Wireless, High-speed Sync <br>0xf0 = Not Connected</td></tr></table> </td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>InternalFlashStrength</td> <td class=c>int8u</td> <td><span class=s><span class=n>(saved from the most recent flash picture, on a scale of about 0 to 100)</span></span></td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>TTL_DA_AUp</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>TTL_DA_ADown</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>TTL_DA_BUp</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>TTL_DA_BDown</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24.1</td> <td>ExternalFlashGuideNumber</td> <td class=c>int8u</td> <td><span class=s><span class=n>(val = 2**(raw/16 + 4), with a few exceptions)</span> <br>[Mask 0x1f]</span></td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>ExternalFlashExposureComp</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = n/a <br>144 = n/a (Manual Mode) <br>164 = -3.0 <br>167 = -2.5 <br>168 = -2.0 <br>171 = -1.5</td><td>&nbsp;&nbsp;</td> <td>172 = -1.0 <br>175 = -0.5 <br>176 = 0.0 <br>179 = 0.5 <br>180 = 1.0</td></tr></table> </td></tr> <tr> <td class=r title='26 = 0x1a'>26</td> <td>ExternalFlashBounce</td> <td class=c>int8u</td> <td><span class=s><span class=n>(saved from the most recent external flash picture)</span> <br>0 = n/a <br>16 = Direct <br>48 = Bounce</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='FlashInfoUnknown'>Pentax FlashInfoUnknown Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo'>Pentax CameraInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PentaxModelID</td> <td class=c>int32u</td> <td>--&gt; <a href='Pentax.html#PentaxModelID'>Pentax PentaxModelID Values</a></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>ManufactureDate</td> <td class=c>int32u</td> <td><span class=s><span class=n>(this value, and the values of the tags below, may change if the camera is serviced)</span></span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>ProductionCode</td> <td class=c>int32u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>InternalSerialNumber</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='BatteryInfo'>Pentax BatteryInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0.1</td> <td>PowerSource</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x0f] <br>0x2 = Body Battery <br>0x3 = Grip Battery <br>0x4 = External Power Supply</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1.1</td> <td>BodyBatteryState</td> <td class=c>int8u</td> <td><span class=s><span class=n>(*istD, K100D, K200D, K10D and K20D)</span> <br>[Mask 0xf0] <br>0x10 = Empty or Missing <br>0x20 = Almost Empty <br>0x30 = Running Low <br>0x40 = Full <br><span class=n>(other models except the K110D, K2000 and K-m)</span> <br>[Mask 0xf0] <br>0x10 = Empty or Missing <br>0x20 = Almost Empty <br>0x30 = Running Low <br>0x40 = Close to Full <br>0x50 = Full <br><span class=n>(decoding unknown for other models)</span> <br>[Mask 0xf0]</span></td></tr> <tr> <td class=r title='1 = 0x1'>1.2</td> <td>GripBatteryState <br>GripBatteryState?</td> <td class=c>int8u<br>int8u</td> <td><span class=s><span class=n>(K10D and K20D)</span> <br>[Mask 0x0f] <br>0x1 = Empty or Missing <br>0x2 = Almost Empty <br>0x3 = Running Low <br>0x4 = Full <br><span class=n>(decoding unknown for other models)</span> <br>[Mask 0x0f]</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>BodyBatteryADNoLoad <br>BodyBatteryVoltage1</td> <td class=c>int8u<br>int16u</td> <td><span class=s><span class=n>(roughly calibrated for K10D with a new Pentax battery)</span></span></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>BodyBatteryADLoad</td> <td class=c>int8u</td> <td><span class=s><span class=n>(roughly calibrated for K10D with a new Pentax battery)</span></span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>GripBatteryADNoLoad <br>BodyBatteryVoltage2</td> <td class=c>int8u<br>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>GripBatteryADLoad</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>BodyBatteryVoltage3</td> <td class=c>int16u</td> <td><span class=s><span class=n>(K-5, K-r and 645D only)</span></span></td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>BodyBatteryVoltage4</td> <td class=c>int16u</td> <td><span class=s><span class=n>(K-5 and K-r only)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='AFInfo'>Pentax AFInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>AFPointsUnknown1?</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = (none) <br>0x777 = Central 9 points <br>0x7ff = All <br>Bit 0 = Upper-left <br>Bit 1 = Top <br>Bit 2 = Upper-right <br>Bit 3 = Left</td><td>&nbsp;&nbsp;</td> <td>Bit 4 = Mid-left <br>Bit 5 = Center <br>Bit 6 = Mid-right <br>Bit 7 = Right <br>Bit 8 = Lower-left <br>Bit 9 = Bottom <br>Bit 10 = Lower-right</td></tr></table> </td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>AFPointsUnknown2?</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Auto <br>Bit 0 = Upper-left <br>Bit 1 = Top <br>Bit 2 = Upper-right <br>Bit 3 = Left <br>Bit 4 = Mid-left</td><td>&nbsp;&nbsp;</td> <td>Bit 5 = Center <br>Bit 6 = Mid-right <br>Bit 7 = Right <br>Bit 8 = Lower-left <br>Bit 9 = Bottom <br>Bit 10 = Lower-right</td></tr></table> </td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>AFPredictor</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>AFDefocus</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>AFIntegrationTime</td> <td class=c>int8u</td> <td><span class=s><span class=n>(times less than 2 ms give a value of 0)</span></span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>AFPointsInFocus</td> <td class=c>int8u</td> <td><span class=s><span class=n>(models other than the K-3 only. May report two points in focus even though a single AFPoint has been selected, in which case the selected AFPoint is the first reported)</span></span><table class=cols><tr> <td>0 = None <br>1 = Lower-left, Bottom <br>2 = Bottom <br>3 = Lower-right, Bottom <br>4 = Mid-left, Center <br>5 = Center (horizontal) <br>6 = Mid-right, Center <br>7 = Upper-left, Top <br>8 = Top <br>9 = Upper-right, Top <br>10 = Right</td><td>&nbsp;&nbsp;</td> <td>11 = Lower-left, Mid-left <br>12 = Upper-left, Mid-left <br>13 = Bottom, Center <br>14 = Top, Center <br>15 = Lower-right, Mid-right <br>16 = Upper-right, Mid-right <br>17 = Left <br>18 = Mid-left <br>19 = Center (vertical) <br>20 = Mid-right</td></tr></table> </td></tr> <tr> <td class=r title='509 = 0x1fd'>509</td> <td>AFHold</td> <td class=c>int8u</td> <td><span class=s><span class=n>(decoded only for the K-3 II)</span> <br>0 = Off <br>1 = Short <br>2 = Medium <br>3 = Long</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='KelvinWB'>Pentax KelvinWB Tags</a></h2> <p>White balance Blue/Red gains as a function of color temperature.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>KelvinWB_Daylight</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>KelvinWB_01</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>KelvinWB_02</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>KelvinWB_03</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>KelvinWB_04</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>KelvinWB_05</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='25 = 0x19'>25</td> <td>KelvinWB_06</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>KelvinWB_07</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='33 = 0x21'>33</td> <td>KelvinWB_08</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='37 = 0x25'>37</td> <td>KelvinWB_09</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='41 = 0x29'>41</td> <td>KelvinWB_10</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='45 = 0x2d'>45</td> <td>KelvinWB_11</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='49 = 0x31'>49</td> <td>KelvinWB_12</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='53 = 0x35'>53</td> <td>KelvinWB_13</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='57 = 0x39'>57</td> <td>KelvinWB_14</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='61 = 0x3d'>61</td> <td>KelvinWB_15</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='65 = 0x41'>65</td> <td>KelvinWB_16</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ColorInfo'>Pentax ColorInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>WBShiftAB</td> <td class=c>int8s</td> <td><span class=s><span class=n>(positive is a shift toward blue)</span></span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>WBShiftGM</td> <td class=c>int8s</td> <td><span class=s><span class=n>(positive is a shift toward green)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='EVStepInfo'>Pentax EVStepInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>EVSteps</td> <td class=c>int8u</td> <td><span class=s>0 = 1/2 EV Steps <br>1 = 1/3 EV Steps</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>SensitivitySteps</td> <td class=c>int8u</td> <td><span class=s>0 = 1 EV Steps <br>1 = As EV Steps</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfo'>Pentax ShotInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s><span class=n>(K-5, K-7, K-r and K-x)</span></span><table class=cols><tr> <td>0x10 = Horizontal (normal) <br>0x20 = Rotate 180 <br>0x30 = Rotate 90 CW <br>0x40 = Rotate 270 CW <br>0x50 = Upwards <br>0x60 = Downwards</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='FacePos'>Pentax FacePos Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Face1Position</td> <td class=c>int16u[2]</td> <td><span class=s><span class=n>(X/Y coordinates of face center in full-sized image)</span></span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>Face2Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>Face3Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>Face4Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>Face5Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>Face6Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>Face7Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>Face8Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>Face9Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>Face10Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>Face11Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>Face12Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>Face13Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>Face14Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>Face15Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>Face16Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>Face17Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='34 = 0x22'>34</td> <td>Face18Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='36 = 0x24'>36</td> <td>Face19Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>Face20Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>Face21Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>Face22Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>Face23Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='46 = 0x2e'>46</td> <td>Face24Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>Face25Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>Face26Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='52 = 0x34'>52</td> <td>Face27Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='54 = 0x36'>54</td> <td>Face28Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='56 = 0x38'>56</td> <td>Face29Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='58 = 0x3a'>58</td> <td>Face30Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='60 = 0x3c'>60</td> <td>Face31Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='62 = 0x3e'>62</td> <td>Face32Position</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceSize'>Pentax FaceSize Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Face1Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>Face2Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>Face3Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>Face4Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>Face5Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>Face6Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>Face7Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>Face8Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>Face9Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>Face10Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>Face11Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>Face12Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>Face13Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>Face14Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>Face15Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>Face16Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>Face17Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='34 = 0x22'>34</td> <td>Face18Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='36 = 0x24'>36</td> <td>Face19Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>Face20Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>Face21Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>Face22Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>Face23Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='46 = 0x2e'>46</td> <td>Face24Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>Face25Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>Face26Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='52 = 0x34'>52</td> <td>Face27Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='54 = 0x36'>54</td> <td>Face28Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='56 = 0x38'>56</td> <td>Face29Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='58 = 0x3a'>58</td> <td>Face30Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='60 = 0x3c'>60</td> <td>Face31Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='62 = 0x3e'>62</td> <td>Face32Size</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FilterInfo'>Pentax FilterInfo Tags</a></h2> <p>The parameters associated with each type of digital filter are unique, and these settings are also extracted with the DigitalFilter tag. Information is not extracted for filters that are &quot;Off&quot; unless the Unknown option is used.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>SourceDirectoryIndex</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>SourceFileIndex</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>DigitalFilter01</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>DigitalFilter02</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr> <td class=r title='39 = 0x27'>39</td> <td>DigitalFilter03</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr class=b> <td class=r title='56 = 0x38'>56</td> <td>DigitalFilter04</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr> <td class=r title='73 = 0x49'>73</td> <td>DigitalFilter05</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr class=b> <td class=r title='90 = 0x5a'>90</td> <td>DigitalFilter06</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr> <td class=r title='107 = 0x6b'>107</td> <td>DigitalFilter07</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr class=b> <td class=r title='124 = 0x7c'>124</td> <td>DigitalFilter08</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr> <td class=r title='141 = 0x8d'>141</td> <td>DigitalFilter09</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr class=b> <td class=r title='158 = 0x9e'>158</td> <td>DigitalFilter10</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr> <td class=r title='175 = 0xaf'>175</td> <td>DigitalFilter11</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr class=b> <td class=r title='192 = 0xc0'>192</td> <td>DigitalFilter12</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr> <td class=r title='209 = 0xd1'>209</td> <td>DigitalFilter13</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr class=b> <td class=r title='226 = 0xe2'>226</td> <td>DigitalFilter14</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr> <td class=r title='243 = 0xf3'>243</td> <td>DigitalFilter15</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr class=b> <td class=r title='260 = 0x104'>260</td> <td>DigitalFilter16</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr> <td class=r title='277 = 0x115'>277</td> <td>DigitalFilter17</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr class=b> <td class=r title='294 = 0x126'>294</td> <td>DigitalFilter18</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr> <td class=r title='311 = 0x137'>311</td> <td>DigitalFilter19</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> <tr class=b> <td class=r title='328 = 0x148'>328</td> <td>DigitalFilter20</td> <td class=c>undef[17]</td> <td>--&gt; <a href='Pentax.html#DigitalFilter'>Pentax DigitalFilter Values</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='DigitalFilter'>Pentax DigitalFilter Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>DigitalFilter</th><th>Value</th><th>DigitalFilter</th><th>Value</th><th>DigitalFilter</th></tr> <tr><td class=r>0</td><td>= Off</td> <td class='r b'>9</td><td class=b>= Fisheye</td> <td class=r>18</td><td>= Posterization</td> </tr><tr><td class=r>1</td><td>= Base Parameter Adjust</td> <td class='r b'>10</td><td class=b>= Toy Camera</td> <td class=r>19</td><td>= Sketch Filter</td> </tr><tr><td class=r>2</td><td>= Soft Focus</td> <td class='r b'>11</td><td class=b>= Retro</td> <td class=r>20</td><td>= Shading</td> </tr><tr><td class=r>3</td><td>= High Contrast</td> <td class='r b'>12</td><td class=b>= Pastel</td> <td class=r>21</td><td>= Invert Color</td> </tr><tr><td class=r>4</td><td>= Color Filter</td> <td class='r b'>13</td><td class=b>= Water Color</td> <td class=r>23</td><td>= Tone Expansion</td> </tr><tr><td class=r>5</td><td>= Extract Color</td> <td class='r b'>14</td><td class=b>= HDR</td> <td class=r>254</td><td>= Custom Filter</td> </tr><tr><td class=r>6</td><td>= Monochrome</td> <td class='r b'>16</td><td class=b>= Miniature</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr><tr><td class=r>7</td><td>= Slim</td> <td class='r b'>17</td><td class=b>= Starburst</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='LevelInfo'>Pentax LevelInfo Tags</a></h2> <p>Tags decoded from the electronic level information for the K-5. May not be valid for other models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>LevelOrientation</td> <td class=c>int8s</td> <td><span class=s>[Mask 0x0f]</span><table class=cols><tr> <td>1 = Horizontal (normal) <br>2 = Rotate 180 <br>3 = Rotate 90 CW <br>4 = Rotate 270 CW <br>9 = Horizontal; Off Level <br>10 = Rotate 180; Off Level <br>11 = Rotate 90 CW; Off Level <br>12 = Rotate 270 CW; Off Level <br>13 = Upwards <br>14 = Downwards</td></tr></table> </td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.1</td> <td>CompositionAdjust</td> <td class=c>int8s</td> <td><span class=s>[Mask 0xf0] <br>0x0 = Off <br>0x20 = Composition Adjust <br>0xa0 = Composition Adjust + Horizon Correction <br>0xc0 = Horizon Correction</span></td></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>RollAngle</td> <td class=c>int8s</td> <td><span class=s><span class=n>(converted to degrees of clockwise camera rotation)</span></span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>PitchAngle</td> <td class=c>int8s</td> <td><span class=s><span class=n>(converted to degrees of upward camera tilt)</span></span></td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>CompositionAdjustX</td> <td class=c>int8s</td> <td><span class=s><span class=n>(steps to the right, 1/16 mm per step)</span></span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>CompositionAdjustY</td> <td class=c>int8s</td> <td><span class=s><span class=n>(steps up, 1/16 mm per step)</span></span></td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>CompositionAdjustRotation</td> <td class=c>int8s</td> <td><span class=s><span class=n>(steps clockwise, 1/8 degree per step)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='WBLevels'>Pentax WBLevels Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>WB_RGGBLevelsDaylight</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>WB_RGGBLevelsShade</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>WB_RGGBLevelsCloudy</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>WB_RGGBLevelsTungsten</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='38 = 0x26'>38</td> <td>WB_RGGBLevelsFluorescentD</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='47 = 0x2f'>47</td> <td>WB_RGGBLevelsFluorescentN</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='56 = 0x38'>56</td> <td>WB_RGGBLevelsFluorescentW</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='65 = 0x41'>65</td> <td>WB_RGGBLevelsFlash</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='74 = 0x4a'>74</td> <td>WB_RGGBLevelsFluorescentL</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='83 = 0x53'>83</td> <td>WB_RGGBLevelsUnknown?</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='92 = 0x5c'>92</td> <td>WB_RGGBLevelsUserSelected</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LensInfoQ'>Pentax LensInfoQ Tags</a></h2> <p>More lens information stored by the Pentax Q.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>LensModel</td> <td class=c>string[30]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>LensInfo</td> <td class=c>string[20]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PixelShiftInfo'>Pentax PixelShiftInfo Tags</a></h2> <p>Pixel shift information stored by the K-3 II.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PixelShiftResolution</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='TempInfo'>Pentax TempInfo Tags</a></h2> <p>A number of additional temperature readings are extracted from this 256-byte binary-data block in images from models such as the K-01, K-3, K-5, K-50 and K-500. It is currently not known where the corresponding temperature sensors are located in the camera.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>SensorTemperature</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>SensorTemperature2</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>CameraTemperature4</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>CameraTemperature5</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='UnknownInfo'>Pentax UnknownInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='Type2'>Pentax Type2 Tags</a></h2> <p>These tags are used by the Pentax Optio 330 and 430, and are similar to the tags used by Casio.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>RecordingMode</td> <td class=c>int16u</td> <td><span class=s>0 = Auto <br>1 = Night Scene <br>2 = Manual</span></td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>Quality</td> <td class=c>int16u</td> <td><span class=s>0 = Good <br>1 = Better <br>2 = Best</span></td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>FocusMode</td> <td class=c>int16u</td> <td><span class=s>2 = Custom <br>3 = Auto</span></td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>FlashMode</td> <td class=c>int16u</td> <td><span class=s>1 = Auto <br>2 = On <br>4 = Off <br>6 = Red-eye reduction</span></td></tr> <tr> <td title='0x0007 = 7'>0x0007</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Daylight <br>2 = Shade</td><td>&nbsp;&nbsp;</td> <td>3 = Tungsten <br>4 = Fluorescent <br>5 = Manual</td></tr></table> </td></tr> <tr class=b> <td title='0x000a = 10'>0x000a</td> <td>DigitalZoom</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x000b = 11'>0x000b</td> <td>Sharpness</td> <td class=c>int16u</td> <td><span class=s>0 = Normal <br>1 = Soft <br>2 = Hard</span></td></tr> <tr class=b> <td title='0x000c = 12'>0x000c</td> <td>Contrast</td> <td class=c>int16u</td> <td><span class=s>0 = Normal <br>1 = Low <br>2 = High</span></td></tr> <tr> <td title='0x000d = 13'>0x000d</td> <td>Saturation</td> <td class=c>int16u</td> <td><span class=s>0 = Normal <br>1 = Low <br>2 = High</span></td></tr> <tr class=b> <td title='0x0014 = 20'>0x0014</td> <td>ISO</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>10 = 100 <br>16 = 200 <br>50 = 50</td><td>&nbsp;&nbsp;</td> <td>100 = 100 <br>200 = 200 <br>400 = 400</td><td>&nbsp;&nbsp;</td> <td>800 = 800 <br>1600 = 1600 <br>3200 = 3200</td></tr></table> </td></tr> <tr> <td title='0x0017 = 23'>0x0017</td> <td>ColorFilter</td> <td class=c>int16u</td> <td><span class=s>1 = Full <br>2 = Black &amp; White <br>3 = Sepia</span></td></tr> <tr class=b> <td title='0x0e00 = 3584'>0x0e00</td> <td>PrintIM</td> <td class=c>-</td> <td>--&gt; <a href='PrintIM.html'>PrintIM Tags</a></td></tr> <tr> <td title='0x1000 = 4096'>0x1000</td> <td>HometownCityCode</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1001 = 4097'>0x1001</td> <td>DestinationCityCode</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Type4'>Pentax Type4 Tags</a></h2> <p>The following few tags are extracted from the wealth of information available in maker notes of the Optio E20 and E25. These maker notes are stored as ASCII text in a format very similar to some HP models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'F/W Version'</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='S1'>Pentax S1 Tags</a></h2> <p>Tags extracted from the maker notes of AVI videos from the Optio S1.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>MakerNoteVersion</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PENT'>Pentax PENT Tags</a></h2> <p>Tags found in the PENT atom of MOV videos from the Optio WG-2 GPS.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='56 = 0x38'>56</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='60 = 0x3c'>60</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='68 = 0x44'>68</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='84 = 0x54'>84</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='113 = 0x71'>113</td> <td>DateTime1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='139 = 0x8b'>139</td> <td>DateTime2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='167 = 0xa7'>167</td> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='199 = 0xc7'>199</td> <td>GPSVersionID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='207 = 0xcf'>207</td> <td>GPSLatitudeRef</td> <td class=c>N</td> <td><span class=s>&#39;N&#39; = North <br>&#39;S&#39; = South</span></td></tr> <tr class=b> <td class=r title='209 = 0xd1'>209</td> <td>GPSLatitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='233 = 0xe9'>233</td> <td>GPSLongitudeRef</td> <td class=c>N</td> <td><span class=s>&#39;E&#39; = East <br>&#39;W&#39; = West</span></td></tr> <tr class=b> <td class=r title='235 = 0xeb'>235</td> <td>GPSLongitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='259 = 0x103'>259</td> <td>GPSAltitudeRef</td> <td class=c>N</td> <td><span class=s>0 = Above Sea Level <br>1 = Below Sea Level</span></td></tr> <tr class=b> <td class=r title='260 = 0x104'>260</td> <td>GPSAltitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='284 = 0x11c'>284</td> <td>GPSTimeStamp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='308 = 0x134'>308</td> <td>GPSSatellites</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='311 = 0x137'>311</td> <td>GPSStatus</td> <td class=c>N</td> <td><span class=s>&#39;A&#39; = Measurement Active <br>&#39;V&#39; = Measurement Void</span></td></tr> <tr class=b> <td class=r title='313 = 0x139'>313</td> <td>GPSMeasureMode</td> <td class=c>N</td> <td><span class=s>2 = 2-Dimensional Measurement <br>3 = 3-Dimensional Measurement</span></td></tr> <tr> <td class=r title='315 = 0x13b'>315</td> <td>GPSMapDatum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='322 = 0x142'>322</td> <td>GPSDateStamp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='371 = 0x173'>371</td> <td>AudioCodecID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2003 = 0x7d3'>2003</td> <td>PreviewImage</td> <td class=c>N</td> <td><span class=s><span class=n>(640x480 JPEG preview image)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='PXTH'>Pentax PXTH Tags</a></h2> <p>Tags found in the PXTH atom of MOV videos from the K-01.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PreviewImageLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>PreviewImage</td> <td class=c>N</td> <td><span class=s><span class=n>(640-pixel-wide JPEG preview)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='MOV'>Pentax MOV Tags</a></h2> <p>This information is found in MOV videos from cameras such as the Optio WP.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='42 = 0x2a'>42</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='68 = 0x44'>68</td> <td>WhiteBalance</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Daylight <br>2 = Shade</td><td>&nbsp;&nbsp;</td> <td>3 = Fluorescent <br>4 = Tungsten <br>5 = Manual</td></tr></table> </td></tr> <tr class=b> <td class=r title='72 = 0x48'>72</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='175 = 0xaf'>175</td> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Junk'>Pentax Junk Tags</a></h2> <p>Tags found in the JUNK chunk of AVI videos from the RS1000.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Junk2'>Pentax Junk2 Tags</a></h2> <p>This information is found in AVI videos from the Optio RZ18.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='94 = 0x5e'>94</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='131 = 0x83'>131</td> <td>DateTime1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='157 = 0x9d'>157</td> <td>DateTime2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='299 = 0x12b'>299</td> <td>ThumbnailWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='301 = 0x12d'>301</td> <td>ThumbnailHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='303 = 0x12f'>303</td> <td>ThumbnailLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='307 = 0x133'>307</td> <td>ThumbnailImage</td> <td class=c>N</td> <td><span class=s><span class=n>(160x120 JPEG thumbnail image)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='AVI'>Pentax AVI Tags</a></h2> <p>Pentax-specific RIFF tags found in AVI videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'hymn'</td> <td>MakerNotes</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html'>Pentax Tags</a></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 7, 2016</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/PGF.html���������������������������������������������������������000644 �000765 �000024 �00000004141 12527350232 020331� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>PGF Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>PGF Tags</h2> <p>The following table lists information extracted from the header of Progressive Graphics File (PGF) images. As well, information is extracted from the embedded PNG metadata image if it exists. See <a href="http://www.libpgf.org/">http://www.libpgf.org/</a> for the PGF specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>PGFVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>PyramidLevels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>Quality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>BitsPerPixel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='19 = 0x13'>19</td> <td>ColorComponents</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>ColorMode</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Bitmap <br>1 = Grayscale <br>2 = Indexed <br>3 = RGB</td><td>&nbsp;&nbsp;</td> <td>4 = CMYK <br>7 = Multichannel <br>8 = Duotone <br>9 = Lab</td></tr></table> </td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>BackgroundColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 26, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/PhaseOne.html����������������������������������������������������000644 �000765 �000024 �00000014267 12636263125 021436� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>PhaseOne Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>PhaseOne Tags</h2> <p>These tags are extracted from the maker notes of Phase One images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0100 = 256'>0x0100</td> <td>CameraOrientation</td> <td class=c>N</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW <br>3 = Rotate 180</span></td></tr> <tr class=b> <td title='0x0102 = 258'>0x0102</td> <td>SerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0105 = 261'>0x0105</td> <td>ISO</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0106 = 262'>0x0106</td> <td>ColorMatrix1</td> <td class=c>float[9]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0107 = 263'>0x0107</td> <td>WB_RGBLevels</td> <td class=c>float[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0108 = 264'>0x0108</td> <td>SensorWidth</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0109 = 265'>0x0109</td> <td>SensorHeight</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x010a = 266'>0x010a</td> <td>SensorLeftMargin</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x010b = 267'>0x010b</td> <td>SensorTopMargin</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x010c = 268'>0x010c</td> <td>ImageWidth</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x010d = 269'>0x010d</td> <td>ImageHeight</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x010e = 270'>0x010e</td> <td>RawFormat</td> <td class=c>int32s</td> <td><span class=s>1 = RAW 1 <br>2 = RAW 2 <br>3 = IIQ L <br>5 = IIQ S <br>6 = IIQ Sv2</span></td></tr> <tr> <td title='0x010f = 271'>0x010f</td> <td>RawData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0110 = 272'>0x0110</td> <td>SensorCalibration</td> <td class=c>-</td> <td>--&gt; <a href='PhaseOne.html#SensorCalibration'>PhaseOne SensorCalibration Tags</a></td></tr> <tr> <td title='0x0112 = 274'>0x0112</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td><span class=s><span class=n>(may be used as a key to encrypt the raw data)</span></span></td></tr> <tr class=b> <td title='0x0113 = 275'>0x0113</td> <td>ImageNumber</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0203 = 515'>0x0203</td> <td>Software</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0204 = 516'>0x0204</td> <td>System</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0210 = 528'>0x0210</td> <td>SensorTemperature</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0211 = 529'>0x0211</td> <td>SensorTemperature2</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr> <td title='0x0212 = 530'>0x0212</td> <td>UnknownDate?</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x021c = 540'>0x021c</td> <td>StripOffsets</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x021d = 541'>0x021d</td> <td>BlackLevel</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0222 = 546'>0x0222</td> <td>SplitColumn</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0223 = 547'>0x0223</td> <td>BlackLevelData</td> <td class=c>int16u[n]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0226 = 550'>0x0226</td> <td>ColorMatrix2</td> <td class=c>float[9]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0301 = 769'>0x0301</td> <td>FirmwareVersions</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0400 = 1024'>0x0400</td> <td>ShutterSpeedValue</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr> <td title='0x0401 = 1025'>0x0401</td> <td>ApertureValue</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0402 = 1026'>0x0402</td> <td>ExposureCompensation</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr> <td title='0x0403 = 1027'>0x0403</td> <td>FocalLength</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0410 = 1040'>0x0410</td> <td>CameraModel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0412 = 1042'>0x0412</td> <td>LensModel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0414 = 1044'>0x0414</td> <td>MaxApertureValue</td> <td class=c>float</td> <td>&nbsp;</td></tr> <tr> <td title='0x0415 = 1045'>0x0415</td> <td>MinApertureValue</td> <td class=c>float</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SensorCalibration'>PhaseOne SensorCalibration Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0400 = 1024'>0x0400</td> <td>SensorDefects</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0401 = 1025'>0x0401</td> <td>AllColorFlatField1?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0407 = 1031'>0x0407</td> <td>SerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x040b = 1035'>0x040b</td> <td>RedBlueFlatField?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0410 = 1040'>0x0410</td> <td>AllColorFlatField2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0416 = 1046'>0x0416</td> <td>AllColorFlatField3?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0419 = 1049'>0x0419</td> <td>LinearizationCoefficients1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x041a = 1050'>0x041a</td> <td>LinearizationCoefficients2</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Dec 22, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/PhotoCD.html�����������������������������������������������������000644 �000765 �000024 �00000032052 12527350232 021217� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>PhotoCD Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>PhotoCD Tags</h2> <p>Tags extracted from Kodak Photo CD Image Pac (PCD) files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>SpecificationVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>AuthoringSoftwareRelease</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>ImageMagnificationDescriptor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>ImageMedium</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Color negative <br>1 = Color reversal <br>2 = Color hard copy <br>3 = Thermal hard copy <br>4 = Black and white negative <br>5 = Black and white reversal <br>6 = Black and white hard copy <br>7 = Internegative <br>8 = Synthetic image</td></tr></table> </td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>ProductType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>ScannerVendorID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='62 = 0x3e'>62</td> <td>ScannerProductID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='78 = 0x4e'>78</td> <td>ScannerFirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='82 = 0x52'>82</td> <td>ScannerFirmwareDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='90 = 0x5a'>90</td> <td>ScannerSerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='110 = 0x6e'>110</td> <td>ScannerPixelSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='112 = 0x70'>112</td> <td>ImageWorkstationMake</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='132 = 0x84'>132</td> <td>CharacterSet</td> <td class=c>N</td> <td><table class=cols><tr> <td>1 = 38 characters ISO 646 <br>2 = 65 characters ISO 646 <br>3 = 95 characters ISO 646 <br>4 = 191 characters ISO 8850-1 <br>5 = ISO 2022 <br>6 = Includes characters not ISO 2375 registered</td></tr></table> </td></tr> <tr class=b> <td class=r title='133 = 0x85'>133</td> <td>CharacterEscapeSequence?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='165 = 0xa5'>165</td> <td>PhotoFinisherName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='228 = 0xe4'>228</td> <td>SceneBalanceAlgorithmRevision</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='230 = 0xe6'>230</td> <td>SceneBalanceAlgorithmCommand</td> <td class=c>N</td> <td><span class=s>0 = Neutral SBA On, Color SBA On <br>1 = Neutral SBA Off, Color SBA Off <br>2 = Neutral SBA On, Color SBA Off <br>3 = Neutral SBA Off, Color SBA On</span></td></tr> <tr class=b> <td class=r title='325 = 0x145'>325</td> <td>SceneBalanceAlgorithmFilmID</td> <td class=c>N</td> <td><table class=cols><tr> <td>1 = 3M ScotchColor AT 100 <br>2 = 3M ScotchColor AT 200 <br>3 = 3M ScotchColor HR2 400 <br>7 = 3M Scotch HR 200 Gen 2 <br>9 = 3M Scotch HR 400 Gen 2 <br>16 = Agfa Agfacolor XRS 400 Gen 1 <br>17 = Agfa Agfacolor XRG/XRS 400 <br>18 = Agfa Agfacolor XRG/XRS 200 <br>19 = Agfa Agfacolor XRS 1000 Gen 2 <br>20 = Agfa Agfacolor XRS 400 Gen 2 <br>21 = Agfa Agfacolor XRS/XRC 100 <br>26 = Fuji Reala 100 (JAPAN) <br>27 = Fuji Reala 100 Gen 1 <br>28 = Fuji Reala 100 Gen 2 <br>29 = Fuji SHR 400 Gen 2 <br>30 = Fuji Super HG 100 <br>31 = Fuji Super HG 1600 Gen 1 <br>32 = Fuji Super HG 200 <br>33 = Fuji Super HG 400 <br>34 = Fuji Super HG 100 Gen 2 <br>35 = Fuji Super HR 100 Gen 1 <br>36 = Fuji Super HR 100 Gen 2 <br>37 = Fuji Super HR 1600 Gen 2 <br>38 = Fuji Super HR 200 Gen 1 <br>39 = Fuji Super HR 200 Gen 2 <br>40 = Fuji Super HR 400 Gen 1 <br>43 = Fuji NSP 160S (Pro) <br>45 = Kodak Kodacolor VR 100 Gen 2 <br>47 = Kodak Gold 400 Gen 3 <br>55 = Kodak Ektar 100 Gen 1 <br>56 = Kodak Ektar 1000 Gen 1 <br>57 = Kodak Ektar 125 Gen 1 <br>58 = Kodak Royal Gold 25 RZ <br>60 = Kodak Gold 1600 Gen 1 <br>61 = Kodak Gold 200 Gen 2 <br>62 = Kodak Gold 400 Gen 2 <br>65 = Kodak Kodacolor VR 100 Gen 1 <br>66 = Kodak Kodacolor VR 1000 Gen 2 <br>67 = Kodak Kodacolor VR 1000 Gen 1 <br>68 = Kodak Kodacolor VR 200 Gen 1 <br>69 = Kodak Kodacolor VR 400 Gen 1 <br>70 = Kodak Kodacolor VR 200 Gen 2 <br>71 = Kodak Kodacolor VRG 100 Gen 1 <br>72 = Kodak Gold 100 Gen 2 <br>73 = Kodak Kodacolor VRG 200 Gen 1 <br>74 = Kodak Gold 400 Gen 1 <br>87 = Kodak Ektacolor Gold 160 <br>88 = Kodak Ektapress 1600 Gen 1 PPC <br>89 = Kodak Ektapress Gold 100 Gen 1 PPA <br>90 = Kodak Ektapress Gold 400 PPB-3 <br>92 = Kodak Ektar 25 Professional PHR <br>97 = Kodak T-Max 100 Professional <br>98 = Kodak T-Max 3200 Professional <br>99 = Kodak T-Max 400 Professional <br>101 = Kodak Vericolor 400 Prof VPH <br>102 = Kodak Vericolor III Pro <br>121 = Konika Konica Color SR-G 3200 <br>122 = Konika Konica Color Super SR100 <br>123 = Konika Konica Color Super SR 400 <br>138 = Kodak Gold Unknown <br>139 = Kodak Unknown Neg A- Normal SBA <br>143 = Kodak Ektar 100 Gen 2 <br>147 = Kodak Kodacolor CII <br>148 = Kodak Kodacolor II <br>149 = Kodak Gold Plus 200 Gen 3 <br>150 = Kodak Internegative +10% Contrast <br>151 = Agfa Agfacolor Ultra 50 <br>152 = Fuji NHG 400 <br>153 = Agfa Agfacolor XRG 100 <br>154 = Kodak Gold Plus 100 Gen 3 <br>155 = Konika Konica Color Super SR200 Gen 1 <br>156 = Konika Konica Color SR-G 160 <br>157 = Agfa Agfacolor Optima 125 <br>158 = Agfa Agfacolor Portrait 160 <br>162 = Kodak Kodacolor VRG 400 Gen 1 <br>163 = Kodak Gold 200 Gen 1 <br>164 = Kodak Kodacolor VRG 100 Gen 2 <br>174 = Kodak Internegative +20% Contrast <br>175 = Kodak Internegative +30% Contrast <br>176 = Kodak Internegative +40% Contrast <br>184 = Kodak TMax-100 D-76 CI = .40 <br>185 = Kodak TMax-100 D-76 CI = .50 <br>186 = Kodak TMax-100 D-76 CI = .55 <br>187 = Kodak TMax-100 D-76 CI = .70 <br>188 = Kodak TMax-100 D-76 CI = .80 <br>189 = Kodak TMax-100 TMax CI = .40 <br>190 = Kodak TMax-100 TMax CI = .50 <br>191 = Kodak TMax-100 TMax CI = .55 <br>192 = Kodak TMax-100 TMax CI = .70 <br>193 = Kodak TMax-100 TMax CI = .80 <br>195 = Kodak TMax-400 D-76 CI = .40 <br>196 = Kodak TMax-400 D-76 CI = .50 <br>197 = Kodak TMax-400 D-76 CI = .55 <br>198 = Kodak TMax-400 D-76 CI = .70 <br>214 = Kodak TMax-400 D-76 CI = .80 <br>215 = Kodak TMax-400 TMax CI = .40 <br>216 = Kodak TMax-400 TMax CI = .50 <br>217 = Kodak TMax-400 TMax CI = .55 <br>218 = Kodak TMax-400 TMax CI = .70 <br>219 = Kodak TMax-400 TMax CI = .80 <br>224 = 3M ScotchColor ATG 400/EXL 400 <br>266 = Agfa Agfacolor Optima 200 <br>267 = Konika Impressa 50 <br>268 = Polaroid Polaroid CP 200 <br>269 = Konika Konica Color Super SR200 Gen 2 <br>270 = ILFORD XP2 400 <br>271 = Polaroid Polaroid Color HD2 100 <br>272 = Polaroid Polaroid Color HD2 400 <br>273 = Polaroid Polaroid Color HD2 200 <br>282 = 3M ScotchColor ATG-1 200 <br>284 = Konika XG 400 <br>307 = Kodak Universal Reversal B/W <br>308 = Kodak RPC Copy Film Gen 1 <br>312 = Kodak Universal E6 <br>324 = Kodak Gold Ultra 400 Gen 4 <br>328 = Fuji Super G 100 <br>329 = Fuji Super G 200 <br>330 = Fuji Super G 400 Gen 2 <br>333 = Kodak Universal K14 <br>334 = Fuji Super G 400 Gen 1 <br>366 = Kodak Vericolor HC 6329 VHC <br>367 = Kodak Vericolor HC 4329 VHC <br>368 = Kodak Vericolor L 6013 VPL <br>369 = Kodak Vericolor L 4013 VPL <br>418 = Kodak Ektacolor Gold II 400 Prof <br>430 = Kodak Royal Gold 1000 <br>431 = Kodak Kodacolor VR 200 / 5093 <br>432 = Kodak Gold Plus 100 Gen 4 <br>443 = Kodak Royal Gold 100 <br>444 = Kodak Royal Gold 400 <br>445 = Kodak Universal E6 auto-balance <br>446 = Kodak Universal E6 illum. corr. <br>447 = Kodak Universal K14 auto-balance <br>448 = Kodak Universal K14 illum. corr. <br>449 = Kodak Ektar 100 Gen 3 SY <br>456 = Kodak Ektar 25 <br>457 = Kodak Ektar 100 Gen 3 CX <br>458 = Kodak Ektapress Plus 100 Prof PJA-1 <br>459 = Kodak Ektapress Gold II 100 Prof <br>460 = Kodak Pro 100 PRN <br>461 = Kodak Vericolor HC 100 Prof VHC-2 <br>462 = Kodak Prof Color Neg 100 <br>463 = Kodak Ektar 1000 Gen 2 <br>464 = Kodak Ektapress Plus 1600 Pro PJC-1 <br>465 = Kodak Ektapress Gold II 1600 Prof <br>466 = Kodak Super Gold 1600 GF Gen 2 <br>467 = Kodak Kodacolor 100 Print Gen 4 <br>468 = Kodak Super Gold 100 Gen 4 <br>469 = Kodak Gold 100 Gen 4 <br>470 = Kodak Gold III 100 Gen 4 <br>471 = Kodak Funtime 100 FA <br>472 = Kodak Funtime 200 FB <br>473 = Kodak Kodacolor VR 200 Gen 4 <br>474 = Kodak Gold Super 200 Gen 4 <br>475 = Kodak Kodacolor 200 Print Gen 4 <br>476 = Kodak Super Gold 200 Gen 4 <br>477 = Kodak Gold 200 Gen 4 <br>478 = Kodak Gold III 200 Gen 4 <br>479 = Kodak Gold Ultra 400 Gen 5 <br>480 = Kodak Super Gold 400 Gen 5 <br>481 = Kodak Gold 400 Gen 5 <br>482 = Kodak Gold III 400 Gen 5 <br>483 = Kodak Kodacolor 400 Print Gen 5 <br>484 = Kodak Ektapress Plus 400 Prof PJB-2 <br>485 = Kodak Ektapress Gold II 400 Prof G5 <br>486 = Kodak Pro 400 PPF-2 <br>487 = Kodak Ektacolor Gold II 400 EGP-4 <br>488 = Kodak Ektacolor Gold 400 Prof EGP-4 <br>489 = Kodak Ektapress Gold II Multspd PJM <br>490 = Kodak Pro 400 MC PMC <br>491 = Kodak Vericolor 400 Prof VPH-2 <br>492 = Kodak Vericolor 400 Plus Prof VPH-2 <br>493 = Kodak Unknown Neg Product Code 83 <br>505 = Kodak Ektacolor Pro Gold 160 GPX <br>508 = Kodak Royal Gold 200 <br>517 = Kodak 4050000000 <br>519 = Kodak Gold Plus 100 Gen 5 <br>520 = Kodak Gold 800 Gen 1 <br>521 = Kodak Gold Super 200 Gen 5 <br>522 = Kodak Ektapress Plus 200 Prof <br>523 = Kodak 4050 E6 auto-balance <br>524 = Kodak 4050 E6 ilum. corr. <br>525 = Kodak 4050 K14 <br>526 = Kodak 4050 K14 auto-balance <br>527 = Kodak 4050 K14 ilum. corr. <br>528 = Kodak 4050 Reversal B&amp;W <br>532 = Kodak Advantix 200 <br>533 = Kodak Advantix 400 <br>534 = Kodak Advantix 100 <br>535 = Kodak Ektapress Multspd Prof PJM-2 <br>536 = Kodak Kodacolor VR 200 Gen 5 <br>537 = Kodak Funtime 200 FB Gen 2 <br>538 = Kodak Commercial 200 <br>539 = Kodak Royal Gold 25 Copystand <br>540 = Kodak Kodacolor DA 100 Gen 5 <br>545 = Kodak Kodacolor VR 400 Gen 2 <br>546 = Kodak Gold 100 Gen 6 <br>547 = Kodak Gold 200 Gen 6 <br>548 = Kodak Gold 400 Gen 6 <br>549 = Kodak Royal Gold 100 Gen 2 <br>550 = Kodak Royal Gold 200 Gen 2 <br>551 = Kodak Royal Gold 400 Gen 2 <br>552 = Kodak Gold Max 800 Gen 2 <br>554 = Kodak 4050 E6 high contrast <br>555 = Kodak 4050 E6 low saturation high contrast <br>556 = Kodak 4050 E6 low saturation <br>557 = Kodak Universal E-6 Low Saturation <br>558 = Kodak T-Max T400 CN <br>563 = Kodak Ektapress PJ100 <br>564 = Kodak Ektapress PJ400 <br>565 = Kodak Ektapress PJ800 <br>567 = Kodak Portra 160NC <br>568 = Kodak Portra 160VC <br>569 = Kodak Portra 400NC <br>570 = Kodak Portra 400VC <br>575 = Kodak Advantix 100-2 <br>576 = Kodak Advantix 200-2 <br>577 = Kodak Advantix Black &amp; White + 400 <br>578 = Kodak Ektapress PJ800-2</td></tr></table> </td></tr> <tr> <td class=r title='331 = 0x14b'>331</td> <td>CopyrightStatus</td> <td class=c>N</td> <td><span class=s>1 = Restrictions apply <br>255 = Not specified</span></td></tr> <tr class=b> <td class=r title='332 = 0x14c'>332</td> <td>CopyrightFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1538 = 0x602'>1538</td> <td>Orientation</td> <td class=c>N</td> <td><span class=s>[Mask 0x03] <br>0x0 = Horizontal (normal) <br>0x1 = Rotate 270 CW <br>0x2 = Rotate 180 <br>0x3 = Rotate 90 CW</span></td></tr> <tr class=b> <td class=r title='1538 = 0x602'>1538.1</td> <td>ImageWidth</td> <td class=c>N</td> <td><span class=s>[Mask 0x0c]</span></td></tr> <tr> <td class=r title='1538 = 0x602'>1538.2</td> <td>ImageHeight</td> <td class=c>N</td> <td><span class=s>[Mask 0x0c]</span></td></tr> <tr class=b> <td class=r title='1538 = 0x602'>1538.3</td> <td>CompressionClass</td> <td class=c>N</td> <td><span class=s>[Mask 0x60] <br>0x0 = Class 1 - 35mm film; Pictoral hard copy <br>0x20 = Class 2 - Large format film <br>0x40 = Class 3 - Text and graphics, high resolution <br>0x60 = Class 4 - Text and graphics, high dynamic range</span></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised May 8, 2012</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/PhotoMechanic.html�����������������������������������������������000644 �000765 �000024 �00000012272 12527350231 022441� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>PhotoMechanic Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>PhotoMechanic Tags</h2> <p>The Photo Mechanic trailer contains data in an IPTC-format structure, with soft edit information stored under record number 2.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Record</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>SoftEdit</td> <td class=c>-</td> <td>--&gt; <a href='PhotoMechanic.html#SoftEdit'>PhotoMechanic SoftEdit Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='SoftEdit'>PhotoMechanic SoftEdit Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='209 = 0xd1'>209</td> <td>RawCropLeft</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='210 = 0xd2'>210</td> <td>RawCropTop</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='211 = 0xd3'>211</td> <td>RawCropRight</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='212 = 0xd4'>212</td> <td>RawCropBottom</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='213 = 0xd5'>213</td> <td>ConstrainedCropWidth</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='214 = 0xd6'>214</td> <td>ConstrainedCropHeight</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='215 = 0xd7'>215</td> <td>FrameNum</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='216 = 0xd8'>216</td> <td>Rotation</td> <td class=c>int32s</td> <td><span class=s>0 = 0 <br>1 = 90 <br>2 = 180 <br>3 = 270</span></td></tr> <tr> <td class=r title='217 = 0xd9'>217</td> <td>CropLeft</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='218 = 0xda'>218</td> <td>CropTop</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='219 = 0xdb'>219</td> <td>CropRight</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='220 = 0xdc'>220</td> <td>CropBottom</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='221 = 0xdd'>221</td> <td>Tagged</td> <td class=c>int32s</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td class=r title='222 = 0xde'>222</td> <td>ColorClass</td> <td class=c>int32s</td> <td><table class=cols><tr> <td>0 = 0 (None) <br>1 = 1 (Winner) <br>2 = 2 (Winner alt) <br>3 = 3 (Superior) <br>4 = 4 (Superior alt)</td><td>&nbsp;&nbsp;</td> <td>5 = 5 (Typical) <br>6 = 6 (Typical alt) <br>7 = 7 (Extras) <br>8 = 8 (Trash)</td></tr></table> </td></tr> <tr> <td class=r title='223 = 0xdf'>223</td> <td>Rating</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='236 = 0xec'>236</td> <td>PreviewCropLeft</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='237 = 0xed'>237</td> <td>PreviewCropTop</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='238 = 0xee'>238</td> <td>PreviewCropRight</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='239 = 0xef'>239</td> <td>PreviewCropBottom</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='XMP'>PhotoMechanic XMP Tags</a></h2> <p>Below is a list of the observed PhotoMechanic XMP tags. The actual namespace prefix is &quot;photomechanic&quot; but ExifTool shortens this in the &quot;XMP-photomech&quot; family 1 group name.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>ColorClass</td> <td class=c>integer</td> <td><table class=cols><tr> <td>0 = 0 (None) <br>1 = 1 (Winner) <br>2 = 2 (Winner alt) <br>3 = 3 (Superior) <br>4 = 4 (Superior alt)</td><td>&nbsp;&nbsp;</td> <td>5 = 5 (Typical) <br>6 = 6 (Typical alt) <br>7 = 7 (Extras) <br>8 = 8 (Trash)</td></tr></table> </td></tr> <tr class=b> <td>CountryCode</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>EditStatus</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>PMVersion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Prefs</td> <td class=c>string</td> <td><span class=s><span class=n>(format is &quot;Tagged:0, ColorClass:1, Rating:2, FrameNum:3&quot;)</span></span></td></tr> <tr class=b> <td>Tagged</td> <td class=c>boolean</td> <td><span class=s>&#39;False&#39; = No <br>&#39;True&#39; = Yes</span></td></tr> <tr> <td>TimeCreated</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Dec 29, 2012</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Photoshop.html���������������������������������������������������000644 �000765 �000024 �00000034702 12576526121 021714� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Photoshop Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Photoshop Tags</h2> <p> Photoshop tags are found in PSD and PSB files, as well as inside embedded Photoshop information in many other file types (JPEG, TIFF, PDF, PNG to name a few).</p> <p>Many Photoshop tags are marked as Unknown (indicated by a question mark after the tag name) because the information they provide is not very useful under normal circumstances. These unknown tags are not extracted unless the Unknown (-u) option is used. See <a href="http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/">http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/</a> for the official specification</p> <p>Photoshop path tags (Tag ID&#39;s 0x7d0 to 0xbb5) are not defined by default, but a config file included in the full ExifTool distribution (config_files/photoshop_paths.config) contains the tag definitions to allow access to this information. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x03e8 = 1000'>0x03e8</td> <td>Photoshop2Info?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x03e9 = 1001'>0x03e9</td> <td>MacintoshPrintInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x03ea = 1002'>0x03ea</td> <td>XMLData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x03eb = 1003'>0x03eb</td> <td>Photoshop2ColorTable?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x03ed = 1005'>0x03ed</td> <td>ResolutionInfo</td> <td class=c>-</td> <td>--&gt; <a href='Photoshop.html#Resolution'>Photoshop Resolution Tags</a></td></tr> <tr class=b> <td title='0x03ee = 1006'>0x03ee</td> <td>AlphaChannelsNames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x03ef = 1007'>0x03ef</td> <td>DisplayInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x03f0 = 1008'>0x03f0</td> <td>PStringCaption?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x03f1 = 1009'>0x03f1</td> <td>BorderInformation?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x03f2 = 1010'>0x03f2</td> <td>BackgroundColor?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x03f3 = 1011'>0x03f3</td> <td>PrintFlags?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x03f4 = 1012'>0x03f4</td> <td>BW_HalftoningInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x03f5 = 1013'>0x03f5</td> <td>ColorHalftoningInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x03f6 = 1014'>0x03f6</td> <td>DuotoneHalftoningInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x03f7 = 1015'>0x03f7</td> <td>BW_TransferFunc?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x03f8 = 1016'>0x03f8</td> <td>ColorTransferFuncs?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x03f9 = 1017'>0x03f9</td> <td>DuotoneTransferFuncs?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x03fa = 1018'>0x03fa</td> <td>DuotoneImageInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x03fb = 1019'>0x03fb</td> <td>EffectiveBW?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x03fc = 1020'>0x03fc</td> <td>ObsoletePhotoshopTag1?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x03fd = 1021'>0x03fd</td> <td>EPSOptions?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x03fe = 1022'>0x03fe</td> <td>QuickMaskInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x03ff = 1023'>0x03ff</td> <td>ObsoletePhotoshopTag2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0400 = 1024'>0x0400</td> <td>TargetLayerID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0401 = 1025'>0x0401</td> <td>WorkingPath?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0402 = 1026'>0x0402</td> <td>LayersGroupInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0403 = 1027'>0x0403</td> <td>ObsoletePhotoshopTag3?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0404 = 1028'>0x0404</td> <td>IPTCData</td> <td class=c>-</td> <td>--&gt; <a href='IPTC.html'>IPTC Tags</a></td></tr> <tr> <td title='0x0405 = 1029'>0x0405</td> <td>RawImageMode?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0406 = 1030'>0x0406</td> <td>JPEG_Quality</td> <td class=c>-</td> <td>--&gt; <a href='Photoshop.html#JPEG_Quality'>Photoshop JPEG_Quality Tags</a></td></tr> <tr> <td title='0x0408 = 1032'>0x0408</td> <td>GridGuidesInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0409 = 1033'>0x0409</td> <td>PhotoshopBGRThumbnail</td> <td class=c title=' ! = Unsafe'>undef!</td> <td><span class=s><span class=n>(this is a JPEG image, but in BGR format instead of RGB)</span></span></td></tr> <tr> <td title='0x040a = 1034'>0x040a</td> <td>CopyrightFlag</td> <td class=c>int8u</td> <td><span class=s>0 = False <br>1 = True</span></td></tr> <tr class=b> <td title='0x040b = 1035'>0x040b</td> <td>URL</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x040c = 1036'>0x040c</td> <td>PhotoshopThumbnail</td> <td class=c title=' ! = Unsafe'>undef!</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x040d = 1037'>0x040d</td> <td>GlobalAngle</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x040e = 1038'>0x040e</td> <td>ColorSamplersResource?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x040f = 1039'>0x040f</td> <td>ICC_Profile</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> <tr> <td title='0x0410 = 1040'>0x0410</td> <td>Watermark?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0411 = 1041'>0x0411</td> <td>ICC_Untagged?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0412 = 1042'>0x0412</td> <td>EffectsVisible?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0413 = 1043'>0x0413</td> <td>SpotHalftone?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0414 = 1044'>0x0414</td> <td>IDsBaseValue?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0415 = 1045'>0x0415</td> <td>UnicodeAlphaNames?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0416 = 1046'>0x0416</td> <td>IndexedColourTableCount?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0417 = 1047'>0x0417</td> <td>TransparentIndex?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0419 = 1049'>0x0419</td> <td>GlobalAltitude</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x041a = 1050'>0x041a</td> <td>Slices?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x041b = 1051'>0x041b</td> <td>WorkflowURL?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x041c = 1052'>0x041c</td> <td>JumpToXPEP?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x041d = 1053'>0x041d</td> <td>AlphaIdentifiers?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x041e = 1054'>0x041e</td> <td>URL_List?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0421 = 1057'>0x0421</td> <td>VersionInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0422 = 1058'>0x0422</td> <td>EXIFInfo</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> <tr> <td title='0x0423 = 1059'>0x0423</td> <td>ExifInfo2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0424 = 1060'>0x0424</td> <td>XMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> <tr> <td title='0x0425 = 1061'>0x0425</td> <td>IPTCDigest</td> <td class=c title=' ! = Unsafe'>string!</td> <td><span class=s><span class=n>(this tag indicates provides a way for XMP-aware applications to indicate that the XMP is synchronized with the IPTC. When writing, special values of &quot;new&quot; and &quot;old&quot; represent the digests of the IPTC from the edited and original files respectively, and are undefined if the IPTC does not exist in the respective file. Set this to &quot;new&quot; as an indication that the XMP is synchronized with the IPTC)</span></span></td></tr> <tr class=b> <td title='0x0426 = 1062'>0x0426</td> <td>PrintScale?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0428 = 1064'>0x0428</td> <td>PixelAspectRatio?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0429 = 1065'>0x0429</td> <td>LayerComps?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x042a = 1066'>0x042a</td> <td>AlternateDuotoneColors?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x042b = 1067'>0x042b</td> <td>AlternateSpotColors?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x042d = 1069'>0x042d</td> <td>LayerSelectionIDs?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x042e = 1070'>0x042e</td> <td>HDRToningInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x042f = 1071'>0x042f</td> <td>PrintInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0430 = 1072'>0x0430</td> <td>LayerGroupsEnabledID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0431 = 1073'>0x0431</td> <td>ColorSamplersResource2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0432 = 1074'>0x0432</td> <td>MeasurementScale?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0433 = 1075'>0x0433</td> <td>TimelineInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0434 = 1076'>0x0434</td> <td>SheetDisclosure?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0435 = 1077'>0x0435</td> <td>DisplayInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0436 = 1078'>0x0436</td> <td>OnionSkins?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0438 = 1080'>0x0438</td> <td>CountInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x043a = 1082'>0x043a</td> <td>PrintInfo2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x043b = 1083'>0x043b</td> <td>PrintStyle?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x043c = 1084'>0x043c</td> <td>MacintoshNSPrintInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x043d = 1085'>0x043d</td> <td>WindowsDEVMODE?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x043e = 1086'>0x043e</td> <td>AutoSaveFilePath?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x043f = 1087'>0x043f</td> <td>AutoSaveFormat?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0440 = 1088'>0x0440</td> <td>PathSelectionState?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0bb7 = 2999'>0x0bb7</td> <td>ClippingPathName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0bb8 = 3000'>0x0bb8</td> <td>OriginPathInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1b58 = 7000'>0x1b58</td> <td>ImageReadyVariables?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1b59 = 7001'>0x1b59</td> <td>ImageReadyDataSets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1f40 = 8000'>0x1f40</td> <td>LightroomWorkflow?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2710 = 10000'>0x2710</td> <td>PrintFlagsInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Resolution'>Photoshop Resolution Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>XResolution</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>DisplayedUnitsX</td> <td class=c>int16u</td> <td><span class=s>1 = inches <br>2 = cm</span></td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>YResolution</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>DisplayedUnitsY</td> <td class=c>int16u</td> <td><span class=s>1 = inches <br>2 = cm</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='JPEG_Quality'>Photoshop JPEG_Quality Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PhotoshopQuality</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>PhotoshopFormat</td> <td class=c>N</td> <td><span class=s>0 = Standard <br>1 = Optimised <br>257 = Progressive</span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>ProgressiveScans</td> <td class=c>N</td> <td><span class=s>1 = 3 Scans <br>2 = 4 Scans <br>3 = 5 Scans</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Header'>Photoshop Header Tags</a></h2> <p>This information is found in the PSD file header.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>NumChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>BitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>ColorMode</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Bitmap <br>1 = Grayscale <br>2 = Indexed <br>3 = RGB</td><td>&nbsp;&nbsp;</td> <td>4 = CMYK <br>7 = Multichannel <br>8 = Duotone <br>9 = Lab</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Sep 17, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/PICT.html��������������������������������������������������������000644 �000765 �000024 �00000037751 11271337424 020474� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>PICT Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>PICT Tags</h2> <p>The PICT format contains no true meta information, except for the possible exception of the LongComment opcode. By default, only ImageWidth, ImageHeight and X/YResolution are extracted from a PICT image. Tags in the following table represent image opcodes. Extraction of these tags is experimental, and is only enabled with the Verbose or Unknown options.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>Nop</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>ClipRgn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>BkPat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>TxFont</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>TxFace</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>TxMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0006 = 6'>0x0006</td> <td>SpExtra</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0007 = 7'>0x0007</td> <td>PnSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>PnMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0009 = 9'>0x0009</td> <td>PnPat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000a = 10'>0x000a</td> <td>FillPat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000b = 11'>0x000b</td> <td>OvSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000c = 12'>0x000c</td> <td>Origin</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000d = 13'>0x000d</td> <td>TxSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000e = 14'>0x000e</td> <td>FgColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000f = 15'>0x000f</td> <td>BkColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>TxRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0011 = 17'>0x0011</td> <td>VersionOp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0012 = 18'>0x0012</td> <td>BkPixPat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0013 = 19'>0x0013</td> <td>PnPixPat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0014 = 20'>0x0014</td> <td>FillPixPat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0015 = 21'>0x0015</td> <td>PnLocHFrac</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0016 = 22'>0x0016</td> <td>ChExtra</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0017 = 23'>0x0017</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x001a = 26'>0x001a</td> <td>RGBFgCol</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001b = 27'>0x001b</td> <td>RGBBkCol</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x001c = 28'>0x001c</td> <td>HiliteMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001d = 29'>0x001d</td> <td>HiliteColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x001e = 30'>0x001e</td> <td>DefHilite</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001f = 31'>0x001f</td> <td>OpColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0020 = 32'>0x0020</td> <td>Line</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0021 = 33'>0x0021</td> <td>LineFrom</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0022 = 34'>0x0022</td> <td>ShortLine</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0023 = 35'>0x0023</td> <td>ShortLineFrom</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0024 = 36'>0x0024</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0028 = 40'>0x0028</td> <td>LongText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0029 = 41'>0x0029</td> <td>DHText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x002a = 42'>0x002a</td> <td>DVText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x002b = 43'>0x002b</td> <td>DHDVText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x002c = 44'>0x002c</td> <td>FontName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x002d = 45'>0x002d</td> <td>LineJustify</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x002e = 46'>0x002e</td> <td>GlyphState</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x002f = 47'>0x002f</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0030 = 48'>0x0030</td> <td>FrameRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0031 = 49'>0x0031</td> <td>PaintRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0032 = 50'>0x0032</td> <td>EraseRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0033 = 51'>0x0033</td> <td>InvertRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0034 = 52'>0x0034</td> <td>FillRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0035 = 53'>0x0035</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0038 = 56'>0x0038</td> <td>FrameSameRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0039 = 57'>0x0039</td> <td>PaintSameRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x003a = 58'>0x003a</td> <td>EraseSameRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x003b = 59'>0x003b</td> <td>InvertSameRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x003c = 60'>0x003c</td> <td>FillSameRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x003d = 61'>0x003d</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0040 = 64'>0x0040</td> <td>FrameRRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0041 = 65'>0x0041</td> <td>PaintRRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0042 = 66'>0x0042</td> <td>EraseRRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0043 = 67'>0x0043</td> <td>InvertRRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0044 = 68'>0x0044</td> <td>FillRRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0045 = 69'>0x0045</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0048 = 72'>0x0048</td> <td>FrameSameRRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0049 = 73'>0x0049</td> <td>PaintSameRRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x004a = 74'>0x004a</td> <td>EraseSameRRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x004b = 75'>0x004b</td> <td>InvertSameRRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x004c = 76'>0x004c</td> <td>FillSameRRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x004d = 77'>0x004d</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0050 = 80'>0x0050</td> <td>FrameOval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0051 = 81'>0x0051</td> <td>PaintOval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0052 = 82'>0x0052</td> <td>EraseOval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0053 = 83'>0x0053</td> <td>InvertOval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0054 = 84'>0x0054</td> <td>FillOval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0055 = 85'>0x0055</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0058 = 88'>0x0058</td> <td>FrameSameOval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0059 = 89'>0x0059</td> <td>PaintSameOval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x005a = 90'>0x005a</td> <td>EraseSameOval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x005b = 91'>0x005b</td> <td>InvertSameOval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x005c = 92'>0x005c</td> <td>FillSameOval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x005d = 93'>0x005d</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0060 = 96'>0x0060</td> <td>FrameArc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0061 = 97'>0x0061</td> <td>PaintArc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0062 = 98'>0x0062</td> <td>EraseArc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0063 = 99'>0x0063</td> <td>InvertArc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0064 = 100'>0x0064</td> <td>FillArc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0065 = 101'>0x0065</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0068 = 104'>0x0068</td> <td>FrameSameArc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0069 = 105'>0x0069</td> <td>PaintSameArc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x006a = 106'>0x006a</td> <td>EraseSameArc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x006b = 107'>0x006b</td> <td>InvertSameArc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x006c = 108'>0x006c</td> <td>FillSameArc</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x006d = 109'>0x006d</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0070 = 112'>0x0070</td> <td>FramePoly</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0071 = 113'>0x0071</td> <td>PaintPoly</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0072 = 114'>0x0072</td> <td>ErasePoly</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0073 = 115'>0x0073</td> <td>InvertPoly</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0074 = 116'>0x0074</td> <td>FillPoly</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0075 = 117'>0x0075</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0078 = 120'>0x0078</td> <td>FrameSamePoly</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0079 = 121'>0x0079</td> <td>PaintSamePoly</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x007a = 122'>0x007a</td> <td>EraseSamePoly</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x007b = 123'>0x007b</td> <td>InvertSamePoly</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x007c = 124'>0x007c</td> <td>FillSamePoly</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x007d = 125'>0x007d</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0080 = 128'>0x0080</td> <td>FrameRgn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0081 = 129'>0x0081</td> <td>PaintRgn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0082 = 130'>0x0082</td> <td>EraseRgn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0083 = 131'>0x0083</td> <td>InvertRgn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0084 = 132'>0x0084</td> <td>FillRgn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0085 = 133'>0x0085</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0088 = 136'>0x0088</td> <td>FrameSameRgn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0089 = 137'>0x0089</td> <td>PaintSameRgn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x008a = 138'>0x008a</td> <td>EraseSameRgn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x008b = 139'>0x008b</td> <td>InvertSameRgn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x008c = 140'>0x008c</td> <td>FillSameRgn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x008d = 141'>0x008d</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0090 = 144'>0x0090</td> <td>BitsRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0091 = 145'>0x0091</td> <td>BitsRgn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0092 = 146'>0x0092</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0098 = 152'>0x0098</td> <td>PackBitsRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0099 = 153'>0x0099</td> <td>PackBitsRgn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x009a = 154'>0x009a</td> <td>DirectBitsRect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x009b = 155'>0x009b</td> <td>DirectBitsRgn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x009c = 156'>0x009c</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x009d = 157'>0x009d</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x009e = 158'>0x009e</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x009f = 159'>0x009f</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00a0 = 160'>0x00a0</td> <td>ShortComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00a1 = 161'>0x00a1</td> <td>LongComment</td> <td class=c>-</td> <td>--&gt; <a href='Photoshop.html'>Photoshop Tags</a> <br>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> <tr> <td title='0x00a2 = 162'>0x00a2</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00b0 = 176'>0x00b0</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00d0 = 208'>0x00d0</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00ff = 255'>0x00ff</td> <td>OpEndPic</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0100 = 256'>0x0100</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0200 = 512'>0x0200</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x02ff = 767'>0x02ff</td> <td>Version</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0300 = 768'>0x0300</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0bff = 3071'>0x0bff</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0c00 = 3072'>0x0c00</td> <td>HeaderOp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0c01 = 3073'>0x0c01</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x7f00 = 32512'>0x7f00</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x8000 = 32768'>0x8000</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8100 = 33024'>0x8100</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x8200 = 33280'>0x8200</td> <td>CompressedQuickTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8201 = 33281'>0x8201</td> <td>UncompressedQuickTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0xffff = 65535'>0xffff</td> <td>Reserved</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Oct 13, 2006</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������Image-ExifTool-10.10/html/TagNames/PLIST.html�������������������������������������������������������000644 �000765 �000024 �00000004514 12111746474 020622� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>PLIST Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>PLIST Tags</h2> <p>Apple Property List tags. ExifTool reads both XML and binary-format PLIST files, and will extract any existing tags even if they aren&#39;t listed below. These tags belong to the family 0 &quot;PLIST&quot; group, but family 1 group may be either &quot;XML&quot; or &quot;PLIST&quot; depending on whether the format is XML or binary.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'MetaDataList//DateTimeOriginal'</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'MetaDataList//Duration'</td> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'MetaDataList//Geolocation/Latitude'</td> <td>GPSLatitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'MetaDataList//Geolocation/Longitude'</td> <td>GPSLongitude</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'MetaDataList//Geolocation/MapDatum'</td> <td>GPSMapDatum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'XMLFileType'</td> <td>XMLFileType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'cast//name'</td> <td>Cast</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr class=b> <td>'codirectors//name'</td> <td>Codirectors</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr> <td>'directors//name'</td> <td>Directors</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr class=b> <td>'producers//name'</td> <td>Producers</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr> <td>'screenwriters//name'</td> <td>Screenwriters</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr class=b> <td>'studio//name'</td> <td>Studio</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Feb 22, 2013</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/PNG.html���������������������������������������������������������000644 �000765 �000024 �00000036451 12575565150 020364� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>PNG Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>PNG Tags</h2> <p>Tags extracted from PNG images. See <a href="http://www.libpng.org/pub/png/spec/1.2/">http://www.libpng.org/pub/png/spec/1.2/</a> for the official PNG 1.2 specification.</p> <p>According to the specification, a PNG file should end at the IEND chunk, however ExifTool will preserve any data found after this when writing unless it is specifically deleted with -Trailer:All=. When reading, a minor warning is issued if this trailer exists, and ExifTool will attempt to parse this data as additional PNG chunks.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'IHDR'</td> <td>ImageHeader</td> <td class=c>-</td> <td>--&gt; <a href='PNG.html#ImageHeader'>PNG ImageHeader Tags</a></td></tr> <tr class=b> <td>'PLTE'</td> <td>Palette</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'bKGD'</td> <td>BackgroundColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'cHRM'</td> <td>PrimaryChromaticities</td> <td class=c>-</td> <td>--&gt; <a href='PNG.html#PrimaryChromaticities'>PNG PrimaryChromaticities Tags</a></td></tr> <tr> <td>'dSIG'</td> <td>DigitalSignature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'fRAc'</td> <td>FractalParameters</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'gAMA'</td> <td>Gamma</td> <td class=c>N</td> <td><span class=s><span class=n>(ExifTool reports the gamma for decoding the image, which is consistent with the EXIF convention, but is the inverse of the stored encoding gamma)</span></span></td></tr> <tr class=b> <td>'gIFg'</td> <td>GIFGraphicControlExtension</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'gIFt'</td> <td>GIFPlainTextExtension</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'gIFx'</td> <td>GIFApplicationExtension</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'hIST'</td> <td>PaletteHistogram</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'iCCP'</td> <td>ICC_Profile</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a> <br><span class='n s'>(this is where ExifTool will write a new ICC_Profile)</span></td></tr> <tr> <td>'iCCP-name'</td> <td>ProfileName</td> <td class=c>N</td> <td><span class=s><span class=n>(not a real tag ID, this tag represents the iCCP profile name)</span></span></td></tr> <tr class=b> <td>'iTXt'</td> <td>InternationalText</td> <td class=c>-</td> <td>--&gt; <a href='PNG.html#TextualData'>PNG TextualData Tags</a></td></tr> <tr> <td>'oFFs'</td> <td>ImageOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'pCAL'</td> <td>PixelCalibration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pHYs'</td> <td>PhysicalPixel</td> <td class=c>-</td> <td>--&gt; <a href='PNG.html#PhysicalPixel'>PNG PhysicalPixel Tags</a></td></tr> <tr class=b> <td>'sBIT'</td> <td>SignificantBits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'sCAL'</td> <td>SubjectScale</td> <td class=c>-</td> <td>--&gt; <a href='PNG.html#SubjectScale'>PNG SubjectScale Tags</a></td></tr> <tr class=b> <td>'sPLT'</td> <td>SuggestedPalette</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'sRGB'</td> <td>SRGBRendering</td> <td class=c>N</td> <td><span class=s>0 = Perceptual <br>1 = Relative Colorimetric <br>2 = Saturation <br>3 = Absolute Colorimetric</span></td></tr> <tr class=b> <td>'sTER'</td> <td>StereoImage</td> <td class=c>-</td> <td>--&gt; <a href='PNG.html#StereoImage'>PNG StereoImage Tags</a></td></tr> <tr> <td>'tEXt'</td> <td>TextualData</td> <td class=c>-</td> <td>--&gt; <a href='PNG.html#TextualData'>PNG TextualData Tags</a></td></tr> <tr class=b> <td>'tIME'</td> <td>ModifyDate</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td>'tRNS'</td> <td>Transparency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'tXMP'</td> <td>XMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a> <br><span class='n s'>(obsolete location specified by a September 2001 XMP draft)</span></td></tr> <tr> <td>'vpAg'</td> <td>VirtualPage</td> <td class=c>-</td> <td>--&gt; <a href='PNG.html#VirtualPage'>PNG VirtualPage Tags</a></td></tr> <tr class=b> <td>'zTXt'</td> <td>CompressedText</td> <td class=c>-</td> <td>--&gt; <a href='PNG.html#TextualData'>PNG TextualData Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ImageHeader'>PNG ImageHeader Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>BitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>ColorType</td> <td class=c>N</td> <td><span class=s>0 = Grayscale <br>2 = RGB <br>3 = Palette <br>4 = Grayscale with Alpha <br>6 = RGB with Alpha</span></td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>Compression</td> <td class=c>N</td> <td><span class=s>0 = Deflate/Inflate</span></td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>Filter</td> <td class=c>N</td> <td><span class=s>0 = Adaptive</span></td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>Interlace</td> <td class=c>N</td> <td><span class=s>0 = Noninterlaced <br>1 = Adam7 Interlace</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='PrimaryChromaticities'>PNG PrimaryChromaticities Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>WhitePointX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>WhitePointY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>RedX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>RedY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>GreenX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>GreenY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>BlueX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>BlueY</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='TextualData'>PNG TextualData Tags</a></h2> <p>The PNG TextualData format allows arbitrary tag names to be used. The tags listed below are the only ones that can be written (unless new user-defined tags are added via the configuration file), however ExifTool will extract any other TextualData tags that are found. All TextualData tags (including tags not listed below) are removed when deleting all PNG tags.</p> <p>These tags may be stored as tEXt, zTXt or iTXt chunks in the PNG image. By default ExifTool writes new string-value tags as as uncompressed tEXt, or compressed zTXt if the Compress (-z) option is used and Compress::Zlib is available. Alternate language tags and values containing special characters (unless the Latin character set is used) are written as iTXt, and compressed if the Compress option is used and Compress::Zlib is available. Raw profile information is always created as compressed zTXt if Compress::Zlib is available, or tEXt otherwise. Standard XMP is written as uncompressed iTXt.</p> <p>Alternate languages are accessed by suffixing the tag name with a &#39;-&#39;, followed by an RFC 3066 language code (eg. &quot;PNG:Comment-fr&quot;, or &quot;Title-en-US&quot;). See <a href="http://www.ietf.org/rfc/rfc3066.txt">http://www.ietf.org/rfc/rfc3066.txt</a> for the RFC 3066 specification.</p> <p>Some of the tags below are not registered as part of the PNG specification, but are included here because they are generated by other software such as ImageMagick.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Artist'</td> <td>Artist</td> <td class=c>string</td> <td><span class=s><span class=n>(unregistered)</span></span></td></tr> <tr class=b> <td>'Author'</td> <td>Author</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Comment'</td> <td>Comment</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Copyright'</td> <td>Copyright</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Creation Time'</td> <td>CreationTime</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Description'</td> <td>Description</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Disclaimer'</td> <td>Disclaimer</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Document'</td> <td>Document</td> <td class=c>string</td> <td><span class=s><span class=n>(unregistered)</span></span></td></tr> <tr> <td>'Label'</td> <td>Label</td> <td class=c>string</td> <td><span class=s><span class=n>(unregistered)</span></span></td></tr> <tr class=b> <td>'Make'</td> <td>Make</td> <td class=c>string</td> <td><span class=s><span class=n>(unregistered)</span></span></td></tr> <tr> <td>'Model'</td> <td>Model</td> <td class=c>string</td> <td><span class=s><span class=n>(unregistered)</span></span></td></tr> <tr class=b> <td>'Raw profile type 8bim'</td> <td>Photoshop_Profile</td> <td class=c>-</td> <td>--&gt; <a href='Photoshop.html'>Photoshop Tags</a> <br><span class='n s'>(unregistered)</span></td></tr> <tr> <td>'Raw profile type APP1'</td> <td>APP1_Profile</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a> <br>--&gt; <a href='XMP.html'>XMP Tags</a> <br><span class='n s'>(unregistered. This is where ExifTool will create new EXIF)</span></td></tr> <tr class=b> <td>'Raw profile type exif'</td> <td>EXIF_Profile</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a> <br><span class='n s'>(unregistered)</span></td></tr> <tr> <td>'Raw profile type icc'</td> <td>ICC_Profile</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a> <br><span class='n s'>(unregistered)</span></td></tr> <tr class=b> <td>'Raw profile type icm'</td> <td>ICC_Profile</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a> <br><span class='n s'>(unregistered)</span></td></tr> <tr> <td>'Raw profile type iptc'</td> <td>IPTC_Profile</td> <td class=c>-</td> <td>--&gt; <a href='Photoshop.html'>Photoshop Tags</a> <br><span class='n s'>(unregistered. May be either IPTC IIM or Photoshop IRB format. This is where ExifTool will add new IPTC, inside a Photoshop IRB container)</span></td></tr> <tr class=b> <td>'Raw profile type xmp'</td> <td>XMP_Profile</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a> <br><span class='n s'>(unregistered)</span></td></tr> <tr> <td>'Software'</td> <td>Software</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Source'</td> <td>Source</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'TimeStamp'</td> <td>TimeStamp</td> <td class=c>string</td> <td><span class=s><span class=n>(unregistered)</span></span></td></tr> <tr class=b> <td>'Title'</td> <td>Title</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'URL'</td> <td>URL</td> <td class=c>string</td> <td><span class=s><span class=n>(unregistered)</span></span></td></tr> <tr class=b> <td>'Warning'</td> <td>PNGWarning</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'XML:com.adobe.xmp'</td> <td>XMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a> <br><span class='n s'>(unregistered, but this is the location according to the June 2002 or later XMP specification, and is where ExifTool will add a new XMP chunk if the image didn't already contain XMP)</span></td></tr> <tr class=b> <td>'create-date'</td> <td>CreateDate</td> <td class=c>string</td> <td><span class=s><span class=n>(unregistered)</span></span></td></tr> <tr> <td>'modify-date'</td> <td>ModDate</td> <td class=c>string</td> <td><span class=s><span class=n>(unregistered)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='PhysicalPixel'>PNG PhysicalPixel Tags</a></h2> <p>These tags are found in the PNG pHYs chunk and belong to the PNG-pHYs family 1 group. They are all created together with default values if necessary when any of these tags is written, and may only be deleted as a group.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PixelsPerUnitX</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>PixelsPerUnitY</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>PixelUnits</td> <td class=c>int8u</td> <td><span class=s>0 = Unknown <br>1 = meters</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='SubjectScale'>PNG SubjectScale Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>SubjectUnits</td> <td class=c>N</td> <td><span class=s>1 = meters <br>2 = radians</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>SubjectPixelWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>SubjectPixelHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='StereoImage'>PNG StereoImage Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>StereoMode</td> <td class=c>N</td> <td><span class=s>0 = Cross-fuse Layout <br>1 = Diverging-fuse Layout</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='VirtualPage'>PNG VirtualPage Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>VirtualImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>VirtualImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>VirtualPageUnits</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Sep 14, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/PostScript.html��������������������������������������������������000644 �000765 �000024 �00000006122 11636377633 022046� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>PostScript Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>PostScript Tags</h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Author'</td> <td>Author</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'BeginDocument'</td> <td>EmbeddedFile</td> <td class=c>-</td> <td>--&gt; <a href='PostScript.html'>PostScript Tags</a> <br><span class='n s'>(extracted with ExtractEmbedded option)</span></td></tr> <tr> <td>'BeginICCProfile'</td> <td>ICC_Profile</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> <tr class=b> <td>'BeginPhotoshop'</td> <td>PhotoshopData</td> <td class=c>-</td> <td>--&gt; <a href='Photoshop.html'>Photoshop Tags</a></td></tr> <tr> <td>'BoundingBox'</td> <td>BoundingBox</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Copyright'</td> <td>Copyright</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'CreationDate'</td> <td>CreateDate</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Creator'</td> <td>Creator</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'EmbeddedFileName'</td> <td>EmbeddedFileName</td> <td class=c>N</td> <td><span class=s><span class=n>(not a real tag ID, but the file name from a BeginDocument statement. Extracted with document metadata when ExtractEmbedded option is used)</span></span></td></tr> <tr class=b> <td>'For'</td> <td>For</td> <td class=c>string</td> <td><span class=s><span class=n>(for whom the document was prepared)</span></span></td></tr> <tr> <td>'ImageData'</td> <td>ImageData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Keywords'</td> <td>Keywords</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'ModDate'</td> <td>ModifyDate</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Pages'</td> <td>Pages</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Routing'</td> <td>Routing</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Subject'</td> <td>Subject</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'TIFFPreview'</td> <td>TIFFPreview</td> <td class=c>N</td> <td><span class=s><span class=n>(not a real tag ID, but used to represent the TIFF preview extracted from DOS EPS images)</span></span></td></tr> <tr class=b> <td>'Title'</td> <td>Title</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>'Version'</td> <td>Version</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>'begin_xml_packet'</td> <td>XMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Sep 21, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/PrintIM.html�����������������������������������������������������000644 �000765 �000024 �00000001676 11350726260 021252� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>PrintIM Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>PrintIM Tags</h2> <p> The format of the PrintIM information is known, however no PrintIM tags have been decoded. Use the Unknown (-u) option to extract PrintIM information. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'PrintIMVersion'</td> <td>PrintIMVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Mar 19, 2010</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/PSP.html���������������������������������������������������������000644 �000765 �000024 �00000010176 11663037140 020364� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>PSP Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>PSP Tags</h2> <p>Tags extracted from Paint Shop Pro images (PSP, PSPIMAGE, PSPFRAME, PSPSHAPE, PSPTUBE and TUB extensions).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'FileVersion'</td> <td>FileVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0000 = 0'>0x0000</td> <td>ImageInfo</td> <td class=c>-</td> <td>--&gt; <a href='PSP.html#Image'>PSP Image Tags</a> <br>--&gt; <a href='PSP.html#Image'>PSP Image Tags</a></td></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>CreatorInfo</td> <td class=c>-</td> <td>--&gt; <a href='PSP.html#Creator'>PSP Creator Tags</a></td></tr> <tr class=b> <td title='0x000a = 10'>0x000a</td> <td>ExtendedInfo</td> <td class=c>-</td> <td>--&gt; <a href='PSP.html#Ext'>PSP Ext Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Image'>PSP Image Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>ImageResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>ResolutionUnit</td> <td class=c>N</td> <td><span class=s>0 = None <br>1 = inches <br>2 = cm</span></td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>Compression</td> <td class=c>N</td> <td><span class=s>0 = None <br>1 = RLE <br>2 = LZ77 <br>3 = JPEG</span></td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>BitsPerSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>Planes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='23 = 0x17'>23</td> <td>NumColors</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Creator'>PSP Creator Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>Artist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0006 = 6'>0x0006</td> <td>CreatorAppID</td> <td class=c>N</td> <td><span class=s>0 = Unknown <br>1 = Paint Shop Pro</span></td></tr> <tr class=b> <td title='0x0007 = 7'>0x0007</td> <td>CreatorAppVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Ext'>PSP Ext Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>EXIFInfo</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Oct 12, 2010</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Qualcomm.html����������������������������������������������������000644 �000765 �000024 �00000253751 12535340444 021513� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Qualcomm Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Qualcomm Tags</h2> <p>The tags below have been observed in the JPEG APP7 &quot;Qualcomm Camera Attributes&quot; segment written by some cameras such as the HP iPAQ Voice Messenger. ExifTool will extract any information found from this segment, even if it is not listed in this table.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AECAggressiveness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AECCurrentExpIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AECCurrentSensorLuma</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AECEnable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AECExposureIndexAdjStep</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AECHighLumaRegionCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AECHighLumaRegionThreshold</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AECIndoorIdx</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AECLumaTarget</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AECLumaTolerance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AECMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AECOdoorIdx</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AECOutdoorBrightDiscarded</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AECOutdoorBrightEnable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AECOutdoorBrightReduction</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AECOutdoorBrightThresholdHI</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AECOutdoorBrightThresholdLO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AECOutdoorGammaIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AECSnapshotDigitalGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AECSnapshotExposureTimeMs</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AECSnapshotLineCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AECSnapshotSensorGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AECVfeLuma</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFBoundary</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFCollectEndStat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFEnable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFFarEnd</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFFineSrchPoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFFineStep</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFFocusTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFGrossStep</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFNearEnd</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFPosDefMacro</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFPosDefNorm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFPosition</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFProcess</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFREnable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFRFaster0ExpMod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFRFaster0Trigger</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFRFaster1ExpMod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFRFaster1Trigger</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFRFaster2ExpMod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFRFaster2Trigger</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFRFaster3ExpMod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFRFaster3Trigger</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFRFaster4ExpMod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFRFaster4Trigger</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFRPossibleFrameCnt</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFRSlower0ExpMod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFRSlower0Trigger</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFRSlower1ExpMod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFRSlower1Trigger</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFRSlower2ExpMod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFRSlower2Trigger</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFRSlower3ExpMod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFRSlower3Trigger</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFRSlower4ExpMod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFRSlower4Trigger</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFResetLensAfterSnap</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFStepsNearFar</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFStepsNearInfinity</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTestMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions32</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions33</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions34</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions35</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions36</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions37</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions38</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions39</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions40</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions41</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions42</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions43</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions44</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions45</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions46</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions47</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTracePositions48</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTracePositions49</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats32</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats33</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats34</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats35</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats36</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats37</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats38</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats39</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats40</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats41</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats42</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats43</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats44</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats45</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats46</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats47</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFTraceStats48</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFTraceStats49</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFUndershootProtect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFVfeHorzOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFVfeHorzWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFVfeMetricMax</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AFVfeVertHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AFVfeVertOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF3EdgeDetect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF3EdgeFilterA11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF3EdgeFilterA12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF3EdgeFilterA13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF3EdgeFilterA21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF3EdgeFilterA22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF3EdgeFilterA23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF3EdgeFilterA31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF3EdgeFilterA32</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF3EdgeFilterA33</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF3Enable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF3LowerThreshold</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF3NoiseFilterA11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF3NoiseFilterA12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF3NoiseFilterA13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF3NoiseFilterA21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF3NoiseFilterA22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF3NoiseFilterA23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF3NoiseFilterA31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF3NoiseFilterA32</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF3NoiseFilterA33</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF3UpperThreshold</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5BrtLoThres</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5BrtShrpDegF1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5BrtShrpDegF2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5BrtSmthPercent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5BrtUpThres</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Enable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5ExposureIndex1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5ExposureIndex2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter1A11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter1A12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter1A13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter1A14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter1A15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter1A21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter1A22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter1A23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter1A24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter1A25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter1A31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter1A32</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter1A33</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter1A34</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter1A35</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter1A41</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter1A42</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter1A43</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter1A44</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter1A45</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter1A51</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter1A52</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter1A53</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter1A54</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter1A55</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter2A11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter2A12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter2A13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter2A14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter2A15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter2A21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter2A22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter2A23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter2A24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter2A25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter2A31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter2A32</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter2A33</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter2A34</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter2A35</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter2A41</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter2A42</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter2A43</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter2A44</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter2A45</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter2A51</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter2A52</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter2A53</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5Filter2A54</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5Filter2A55</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5FilterMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5LowLoThres</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5LowShrpDegF1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5LowShrpDegF2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5LowSmthPrcnt</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5LowUpThres</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5LumaFilter00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5LumaFilter01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5LumaFilter02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5LumaFilter03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5LumaFilter04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5LumaFilter05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5LumaFilter06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5LumaFilter07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5LumaFilter08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5MaxExposureIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5NrmLoThres</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5NrmShrpDegF1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5NrmShrpDegF2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5NrmSmthPrcnt</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5NrmUpThres</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ASF5NrmizeFactor1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ASF5NrmizeFactor2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBAggressiveness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBAgwGridDist2Thresh</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBAlgorithm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBAveBgRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBAveRgRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBBlueGainAdjRef1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBBlueGainAdjRef2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBBlueGainAdjRef3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBBlueGainAdjRef4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBBlueGainAdjRef5</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBBlueGainAdjRef6</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBBlueGainAdjRef7</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBBlueGainAdjRef8</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBBlueGainRef1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBBlueGainRef2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBBlueGainRef3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBBlueGainRef4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBBlueGainRef5</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBBlueGainRef6</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBBlueGainRef7</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBBlueGainRef8</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBCcBias</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBCompactClusterR2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBEnable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBGreenOffsetBg</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBGreenOffsetRg</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBIndoorSampleInfluence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBLoVfeC1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBLoVfeC2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBLoVfeC3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBLoVfeC4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBLoVfeM1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBLoVfeM2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBLoVfeM3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBLoVfeM4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBLoVfeMaxY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBLoVfeMinY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBLowLigColCorEna</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBMaxBGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBMaxGGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBMaxRGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBMinBGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBMinGGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBMinRGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBNormVfeC1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBNormVfeC2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBNormVfeC3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBNormVfeC4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBNormVfeM1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBNormVfeM2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBNormVfeM3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBNormVfeM4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBNormVfeMaxY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBNormVfeMinY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBOudorVfeC1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBOudorVfeC2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBOudorVfeC3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBOudorVfeC4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBOudorVfeM1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBOudorVfeM2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBOudorVfeM3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBOudorVfeM4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBOudorVfeMaxY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBOudorVfeMinY</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBOutdoorSampleInfluence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBPrevWbBgain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBPrevWbGgain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBPrevWbRgain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBRedGainAdjRef1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBRedGainAdjRef2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBRedGainAdjRef3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBRedGainAdjRef4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBRedGainAdjRef5</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBRedGainAdjRef6</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBRedGainAdjRef7</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBRedGainAdjRef8</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBRedGainRef1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBRedGainRef2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBRedGainRef3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBRedGainRef4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBRedGainRef5</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBRedGainRef6</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBRedGainRef7</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBRedGainRef8</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBSampleDecision</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AWBSnapshotBGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AWBSnapshotRGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AntiBadingPixelClk</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>AntiBadingPixelClkPerLine</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>AntibandingEnable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>BlckLvlEvenCols</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>BlckLvlOddCols</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>CamMclkHz</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ChroSupChroThres1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ChroSupChroThres2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ChroSupLumaThres1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ChroSupLumaThres2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ChroSupLumaThres3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ChroSupLumaThres4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>ChromSupress</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>ClipToAfRato</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>CurrResol</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DayltConvChrmA_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DayltConvChrmA_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DayltConvChrmB_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DayltConvChrmB_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DayltConvChrmC_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DayltConvChrmC_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DayltConvChrmD_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DayltConvChrmD_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DayltConvChrmKCb</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DayltConvChrmKCr</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DayltConvLumaK</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DayltConvLumaV0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DayltConvLumaV1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DayltConvLumaV2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefConvChrmA_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefConvChrmA_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefConvChrmB_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefConvChrmB_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefConvChrmC_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefConvChrmC_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefConvChrmD_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefConvChrmD_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefConvChrmKCb</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefConvChrmKCr</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefConvLumaK</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefConvLumaV0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefConvLumaV1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefConvLumaV2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefCorC0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefCorC1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefCorC2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefCorC3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefCorC4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefCorC5</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefCorC6</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefCorC7</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefCorC8</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefCorK0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefCorK1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefCorK2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefLumaGammaMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefRgbGammaMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefectPixCorEnable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefectPixMaxThresh</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>DefectPixMinThresh</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>DiscardFrstFrm</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>FrmSkipPttrn</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>GammaEnable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HJREnable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HJRMaxNumFrames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HJROneToTwoOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HJRTextureThreshold</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>HJR_NReductionFlat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>HJR_NReductionTexture</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IncandConvChrmA_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IncandConvChrmA_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IncandConvChrmB_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IncandConvChrmB_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IncandConvChrmC_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IncandConvChrmC_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IncandConvChrmD_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IncandConvChrmD_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IncandConvChrmKCb</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IncandConvChrmKCr</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IncandConvLumaK</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IncandConvLumaV0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>IncandConvLumaV1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>IncandConvLumaV2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>LADetect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>LAEnable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>MaxPrviewFps</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>MaxVideoFps</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>NghtshtFps</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>NightshotMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OutlierDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PclkInvert</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>PrviewFps</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>PrviewResol</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueCtbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueCtbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ABlueStbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ABlueStbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ACx</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ACy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenCtbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenCtbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AGreenStbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AGreenStbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2AIntervals</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedCtbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedCtbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ARedStbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ARedStbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2ATbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2ATbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2AWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueCtbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueCtbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65BlueStbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65BlueStbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Cx</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Cy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenCtbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenCtbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65GreenStbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65GreenStbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Height</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Intervals</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedCtbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedCtbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65RedStbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65RedStbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Tbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2D65Tbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2D65Width</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueCtbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueCtbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84BlueStbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84BlueStbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Cx</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Cy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenCtbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenCtbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84GreenStbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84GreenStbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Height</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Intervals</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedCtbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedCtbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84RedStbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84RedStbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl00</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl01</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl02</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl03</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl04</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl05</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl06</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl07</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl08</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl09</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl10</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl11</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl12</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl13</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl14</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl15</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl16</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl17</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl18</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl19</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl20</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl21</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl22</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl23</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl24</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl25</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl26</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl27</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl28</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl29</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Tbl30</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>R2TL84Tbl31</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>R2TL84Width</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RolloffEnable</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SensorFmt</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SensorType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SensrFulHght</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SensrFulWdth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SensrQtrHght</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>SensrQtrWdth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>SnapshotResol</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TL84ConvChrmA_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TL84ConvChrmA_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TL84ConvChrmB_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TL84ConvChrmB_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TL84ConvChrmC_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TL84ConvChrmC_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TL84ConvChrmD_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TL84ConvChrmD_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TL84ConvChrmKCb</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TL84ConvChrmKCr</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TL84ConvLumaK</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TL84ConvLumaV0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>TL84ConvLumaV1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>TL84ConvLumaV2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoFps</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>YhiYloConvChrmA_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>YhiYloConvChrmA_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>YhiYloConvChrmB_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>YhiYloConvChrmB_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>YhiYloConvChrmC_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>YhiYloConvChrmC_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>YhiYloConvChrmD_M</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>YhiYloConvChrmD_P</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>YhiYloConvChrmKCb</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>YhiYloConvChrmKCr</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>YhiYloConvLumaK</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>YhiYloConvLumaV0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>YhiYloConvLumaV1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>YhiYloConvLumaV2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>YhiYloCorC0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>YhiYloCorC1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>YhiYloCorC2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>YhiYloCorC3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>YhiYloCorC4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>YhiYloCorC5</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>YhiYloCorC6</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>YhiYloCorC7</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>YhiYloCorC8</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>YhiYloCorK0</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>YhiYloCorK1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>YhiYloCorK2</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Feb 20, 2012</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������Image-ExifTool-10.10/html/TagNames/QuickTime.html���������������������������������������������������000644 �000765 �000024 �00001030502 12575545557 021634� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>QuickTime Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>QuickTime Tags</h2> <p>The QuickTime format is used for many different types of audio, video and image files (most commonly, MOV and MP4 videos). Exiftool extracts standard meta information a variety of audio, video and image parameters, as well as proprietary information written by many camera models. Tags with a question mark after their name are not extracted unless the Unknown option is set.</p> <p>ExifTool has the ability to write/create XMP, and edit some date/time tags in QuickTime-format files.</p> <p>According to the specification, many QuickTime date/time tags should be stored as UTC. Unfortunately, digital cameras often store local time values instead (presumably because they don&#39;t know the time zone). For this reason, by default ExifTool does not assume a time zone for these values. However, if the QuickTimeUTC API option is set, then ExifTool will assume these values are properly stored as UTC, and will convert them to local time when extracting.</p> <p>See <a href="http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html">http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html</a> for the official specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'PICT'</td> <td>PreviewPICT</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'_htc'</td> <td>HTCInfo</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#HTCInfo'>QuickTime HTCInfo Tags</a></td></tr> <tr> <td>'ardt'</td> <td>ARDroneFile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'frea'</td> <td>Kodak_frea</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#frea'>Kodak frea Tags</a></td></tr> <tr> <td>'free'</td> <td>KodakFree <br>Free?</td> <td class=c>-<br>N</td> <td>--&gt; <a href='Kodak.html#Free'>Kodak Free Tags</a></td></tr> <tr class=b> <td>'ftyp'</td> <td>FileType</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#FileType'>QuickTime FileType Tags</a></td></tr> <tr> <td>'junk'</td> <td>Junk?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'mdat'</td> <td>MovieData?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'mdat-offset'</td> <td>MovieDataOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'mdat-size'</td> <td>MovieDataSize</td> <td class=c>N</td> <td><span class=s><span class=n>(not a real tag ID, this tag represents the size of the &#39;mdat&#39; data in bytes and is used in the AvgBitrate calculation)</span></span></td></tr> <tr> <td>'meta'</td> <td>Meta</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Meta'>QuickTime Meta Tags</a></td></tr> <tr class=b> <td>'moov'</td> <td>Movie</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Movie'>QuickTime Movie Tags</a></td></tr> <tr> <td>'pict'</td> <td>PreviewPICT</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'pnot'</td> <td>Preview</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Preview'>QuickTime Preview Tags</a></td></tr> <tr> <td>'prrt'</td> <td>ARDroneTelemetry</td> <td class=c>N</td> <td><span class=s><span class=n>(telemetry information for each video frame: status1, status2, time, pitch, roll, yaw, speed, altitude)</span></span></td></tr> <tr class=b> <td>'skip'</td> <td>CanonSkip <br>Skip?</td> <td class=c>-<br>N</td> <td>--&gt; <a href='Canon.html#Skip'>Canon Skip Tags</a></td></tr> <tr> <td>'thum'</td> <td>ThumbnailImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'udta'</td> <td>UserData</td> <td class=c>-</td> <td>--&gt; <a href='FLIR.html#UserData'>FLIR UserData Tags</a></td></tr> <tr> <td>'uuid'</td> <td>XMP <br>UUID-PROF <br>UUID-Flip <br>UUID-Unknown?</td> <td class=c>-<br>-<br>-<br>N</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a> <br>--&gt; <a href='QuickTime.html#Profile'>QuickTime Profile Tags</a> <br>--&gt; <a href='QuickTime.html#Flip'>QuickTime Flip Tags</a></td></tr> <tr class=b> <td>'wide'</td> <td>Wide?</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='HTCInfo'>QuickTime HTCInfo Tags</a></h2> <p>Tags written by some HTC camera phones.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'slmt'</td> <td>Unknown_slmt?</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FileType'>QuickTime FileType Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>MajorBrand</td> <td class=c>N</td> <td><span class=s>&#39;3g2a&#39; = 3GPP2 Media (.3G2) compliant with 3GPP2 C.S0050-0 V1.0 <br>&#39;3g2b&#39; = 3GPP2 Media (.3G2) compliant with 3GPP2 C.S0050-A V1.0.0 <br>&#39;3g2c&#39; = 3GPP2 Media (.3G2) compliant with 3GPP2 C.S0050-B v1.0 <br>&#39;3ge6&#39; = 3GPP (.3GP) Release 6 MBMS Extended Presentations <br>&#39;3ge7&#39; = 3GPP (.3GP) Release 7 MBMS Extended Presentations <br>&#39;3gg6&#39; = 3GPP Release 6 General Profile <br>&#39;3gp1&#39; = 3GPP Media (.3GP) Release 1 (probably non-existent) <br>&#39;3gp2&#39; = 3GPP Media (.3GP) Release 2 (probably non-existent) <br>&#39;3gp3&#39; = 3GPP Media (.3GP) Release 3 (probably non-existent) <br>&#39;3gp4&#39; = 3GPP Media (.3GP) Release 4 <br>&#39;3gp5&#39; = 3GPP Media (.3GP) Release 5 <br>&#39;3gp6&#39; = 3GPP Media (.3GP) Release 6 Streaming Servers <br>&#39;3gs7&#39; = 3GPP Media (.3GP) Release 7 Streaming Servers <br>&#39;CAEP&#39; = Canon Digital Camera <br>&#39;CDes&#39; = Convergent Design <br>&#39;F4A &#39; = Audio for Adobe Flash Player 9+ (.F4A) <br>&#39;F4B &#39; = Audio Book for Adobe Flash Player 9+ (.F4B) <br>&#39;F4P &#39; = Protected Video for Adobe Flash Player 9+ (.F4P) <br>&#39;F4V &#39; = Video for Adobe Flash Player 9+ (.F4V) <br>&#39;JP2 &#39; = JPEG 2000 Image (.JP2) [ISO 15444-1 ?] <br>&#39;JP20&#39; = Unknown, from GPAC samples (prob non-existent) <br>&#39;KDDI&#39; = 3GPP2 EZmovie for KDDI 3G cellphones <br>&#39;M4A &#39; = Apple iTunes AAC-LC (.M4A) Audio <br>&#39;M4B &#39; = Apple iTunes AAC-LC (.M4B) Audio Book <br>&#39;M4P &#39; = Apple iTunes AAC-LC (.M4P) AES Protected Audio <br>&#39;M4V &#39; = Apple iTunes Video (.M4V) Video <br>&#39;M4VH&#39; = Apple TV (.M4V) <br>&#39;M4VP&#39; = Apple iPhone (.M4V) <br>&#39;MPPI&#39; = Photo Player, MAF [ISO/IEC 23000-3] <br>&#39;MSNV&#39; = MPEG-4 (.MP4) for SonyPSP <br>&#39;NDAS&#39; = MP4 v2 [ISO 14496-14] Nero Digital AAC Audio <br>&#39;NDSC&#39; = MPEG-4 (.MP4) Nero Cinema Profile <br>&#39;NDSH&#39; = MPEG-4 (.MP4) Nero HDTV Profile <br>&#39;NDSM&#39; = MPEG-4 (.MP4) Nero Mobile Profile <br>&#39;NDSP&#39; = MPEG-4 (.MP4) Nero Portable Profile <br>&#39;NDSS&#39; = MPEG-4 (.MP4) Nero Standard Profile <br>&#39;NDXC&#39; = H.264/MPEG-4 AVC (.MP4) Nero Cinema Profile <br>&#39;NDXH&#39; = H.264/MPEG-4 AVC (.MP4) Nero HDTV Profile <br>&#39;NDXM&#39; = H.264/MPEG-4 AVC (.MP4) Nero Mobile Profile <br>&#39;NDXP&#39; = H.264/MPEG-4 AVC (.MP4) Nero Portable Profile <br>&#39;NDXS&#39; = H.264/MPEG-4 AVC (.MP4) Nero Standard Profile <br>&#39;ROSS&#39; = Ross Video <br>&#39;XAVC&#39; = Sony XAVC <br>&#39;aax &#39; = Audible Enhanced Audiobook (.AAX) <br>&#39;avc1&#39; = MP4 Base w/ AVC ext [ISO 14496-12:2005] <br>&#39;caqv&#39; = Casio Digital Camera <br>&#39;da0a&#39; = DMB MAF w/ MPEG Layer II aud, MOT slides, DLS, JPG/PNG/MNG images <br>&#39;da0b&#39; = DMB MAF, extending DA0A, with 3GPP timed text, DID, TVA, REL, IPMP <br>&#39;da1a&#39; = DMB MAF audio with ER-BSAC audio, JPG/PNG/MNG images <br>&#39;da1b&#39; = DMB MAF, extending da1a, with 3GPP timed text, DID, TVA, REL, IPMP <br>&#39;da2a&#39; = DMB MAF aud w/ HE-AAC v2 aud, MOT slides, DLS, JPG/PNG/MNG images <br>&#39;da2b&#39; = DMB MAF, extending da2a, with 3GPP timed text, DID, TVA, REL, IPMP <br>&#39;da3a&#39; = DMB MAF aud with HE-AAC aud, JPG/PNG/MNG images <br>&#39;da3b&#39; = DMB MAF, extending da3a w/ BIFS, 3GPP timed text, DID, TVA, REL, IPMP <br>&#39;dmb1&#39; = DMB MAF supporting all the components defined in the specification <br>&#39;dmpf&#39; = Digital Media Project <br>&#39;drc1&#39; = Dirac (wavelet compression), encapsulated in ISO base media (MP4) <br>&#39;dv1a&#39; = DMB MAF vid w/ AVC vid, ER-BSAC aud, BIFS, JPG/PNG/MNG images, TS <br>&#39;dv1b&#39; = DMB MAF, extending dv1a, with 3GPP timed text, DID, TVA, REL, IPMP <br>&#39;dv2a&#39; = DMB MAF vid w/ AVC vid, HE-AAC v2 aud, BIFS, JPG/PNG/MNG images, TS <br>&#39;dv2b&#39; = DMB MAF, extending dv2a, with 3GPP timed text, DID, TVA, REL, IPMP <br>&#39;dv3a&#39; = DMB MAF vid w/ AVC vid, HE-AAC aud, BIFS, JPG/PNG/MNG images, TS <br>&#39;dv3b&#39; = DMB MAF, extending dv3a, with 3GPP timed text, DID, TVA, REL, IPMP <br>&#39;dvr1&#39; = DVB (.DVB) over RTP <br>&#39;dvt1&#39; = DVB (.DVB) over MPEG-2 Transport Stream <br>&#39;isc2&#39; = ISMACryp 2.0 Encrypted File <br>&#39;iso2&#39; = MP4 Base Media v2 [ISO 14496-12:2005] <br>&#39;isom&#39; = MP4 Base Media v1 [IS0 14496-12:2003] <br>&#39;jpm &#39; = JPEG 2000 Compound Image (.JPM) [ISO 15444-6] <br>&#39;jpx &#39; = JPEG 2000 with extensions (.JPX) [ISO 15444-2] <br>&#39;mj2s&#39; = Motion JPEG 2000 [ISO 15444-3] Simple Profile <br>&#39;mjp2&#39; = Motion JPEG 2000 [ISO 15444-3] General Profile <br>&#39;mmp4&#39; = MPEG-4/3GPP Mobile Profile (.MP4/3GP) (for NTT) <br>&#39;mp21&#39; = MPEG-21 [ISO/IEC 21000-9] <br>&#39;mp41&#39; = MP4 v1 [ISO 14496-1:ch13] <br>&#39;mp42&#39; = MP4 v2 [ISO 14496-14] <br>&#39;mp71&#39; = MP4 w/ MPEG-7 Metadata [per ISO 14496-12] <br>&#39;mqt &#39; = Sony / Mobile QuickTime (.MQV) US Patent 7,477,830 (Sony Corp) <br>&#39;odcf&#39; = OMA DCF DRM Format 2.0 (OMA-TS-DRM-DCF-V2_0-20060303-A) <br>&#39;opf2&#39; = OMA PDCF DRM Format 2.1 (OMA-TS-DRM-DCF-V2_1-20070724-C) <br>&#39;opx2&#39; = OMA PDCF DRM + XBS extensions (OMA-TS-DRM_XBS-V1_0-20070529-C) <br>&#39;pana&#39; = Panasonic Digital Camera <br>&#39;qt &#39; = Apple QuickTime (.MOV/QT) <br>&#39;sdv &#39; = SD Memory Card Video <br>&#39;ssc1&#39; = Samsung stereoscopic, single stream <br>&#39;ssc2&#39; = Samsung stereoscopic, dual stream</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>MinorVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>CompatibleBrands</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Meta'>QuickTime Meta Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'bxml'</td> <td>BinaryXML?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'dinf'</td> <td>DataInformation?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'free'</td> <td>Free?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'hdlr'</td> <td>Handler</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Handler'>QuickTime Handler Tags</a></td></tr> <tr> <td>'iinf'</td> <td>ItemInformation?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'iloc'</td> <td>ItemLocation?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ilst'</td> <td>ItemList</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#ItemList'>QuickTime ItemList Tags</a></td></tr> <tr class=b> <td>'ipmc'</td> <td>IPMPControl?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ipro'</td> <td>ItemProtection?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'keys'</td> <td>Keys</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Keys'>QuickTime Keys Tags</a></td></tr> <tr> <td>'pitm'</td> <td>PrimaryItemReference?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'xml '</td> <td>XML</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#XML'>XMP XML Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Handler'>QuickTime Handler Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>HandlerClass</td> <td class=c>N</td> <td><span class=s>&#39;dhlr&#39; = Data Handler <br>&#39;mhlr&#39; = Media Handler</span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>HandlerType</td> <td class=c>N</td> <td><table class=cols><tr> <td>&#39;alis&#39; = Alias Data <br>&#39;crsm&#39; = Clock Reference <br>&#39;hint&#39; = Hint Track <br>&#39;ipsm&#39; = IPMP <br>&#39;m7sm&#39; = MPEG-7 Stream <br>&#39;mdir&#39; = Metadata <br>&#39;mdta&#39; = Metadata Tags <br>&#39;meta&#39; = NRT Metadata <br>&#39;mjsm&#39; = MPEG-J <br>&#39;nrtm&#39; = Non-Real Time Metadata</td><td>&nbsp;&nbsp;</td> <td>&#39;ocsm&#39; = Object Content <br>&#39;odsm&#39; = Object Descriptor <br>&#39;priv&#39; = Private <br>&#39;sdsm&#39; = Scene Description <br>&#39;soun&#39; = Audio Track <br>&#39;subp&#39; = Subpicture <br>&#39;text&#39; = Text <br>&#39;tmcd&#39; = Time Code <br>&#39;url &#39; = URL <br>&#39;vide&#39; = Video Track</td></tr></table> </td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>HandlerVendorID</td> <td class=c>N</td> <td>--&gt; <a href='QuickTime.html#VendorID'>QuickTime VendorID Values</a></td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>HandlerDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='VendorID'>QuickTime VendorID Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>VendorID</th><th>Value</th><th>VendorID</th><th>Value</th><th>VendorID</th></tr> <tr><td>' KD '</td><td>= Kodak</td> <td class=b>'ZORA'</td><td class=b>= Zoran Corporation</td> <td>'olym'</td><td>= Olympus</td> </tr><tr><td>'AR.D'</td><td>= Parrot AR.Drone</td> <td class=b>'appl'</td><td class=b>= Apple</td> <td>'pana'</td><td>= Panasonic</td> </tr><tr><td>'FFMP'</td><td>= FFmpeg</td> <td class=b>'fe20'</td><td class=b>= Olympus (fe20)</td> <td>'pent'</td><td>= Pentax</td> </tr><tr><td>'GIC '</td><td>= General Imaging Co.</td> <td class=b>'kdak'</td><td class=b>= Kodak</td> <td>'pr01'</td><td>= Olympus (pr01)</td> </tr><tr><td>'KMPI'</td><td>= Konica-Minolta</td> <td class=b>'leic'</td><td class=b>= Leica</td> <td>'sany'</td><td>= Sanyo</td> </tr><tr><td>'NIKO'</td><td>= Nikon</td> <td class=b>'mino'</td><td class=b>= Minolta</td> <td>&nbsp;</td><td>&nbsp;</td> </tr><tr><td>'SMI '</td><td>= Sorenson Media Inc.</td> <td class=b>'niko'</td><td class=b>= Nikon</td> <td>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='ItemList'>QuickTime ItemList Tags</a></h2> <p>As well as these tags, the &#39;mdta&#39; handler uses numerical tag ID&#39;s which are added dynamically to this table after processing the Meta Keys information.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'----'</td> <td>iTunesInfo</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#iTunesInfo'>QuickTime iTunesInfo Tags</a></td></tr> <tr class=b> <td>'@PST'</td> <td>ParentShortTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'@ppi'</td> <td>ParentProductID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'@pti'</td> <td>ParentTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'@sti'</td> <td>ShortTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'AACR'</td> <td>Unknown_AACR?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'CDEK'</td> <td>Unknown_CDEK?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'CDET'</td> <td>Unknown_CDET?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'GUID'</td> <td>GUID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'VERS'</td> <td>ProductVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'aART'</td> <td>AlbumArtist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'akID'</td> <td>AppleStoreAccountType</td> <td class=c>N</td> <td><span class=s>0 = iTunes <br>1 = AOL</span></td></tr> <tr> <td>'albm'</td> <td>Album</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'apID'</td> <td>AppleStoreAccount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'atID'</td> <td>AlbumTitleID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'auth'</td> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'catg'</td> <td>Category</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'cnID'</td> <td>AppleStoreCatalogID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'covr'</td> <td>CoverArt</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'cpil'</td> <td>Compilation</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td>'cprt'</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'desc'</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'disk'</td> <td>DiskNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'dscp'</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'egid'</td> <td>EpisodeGlobalUniqueID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'geID'</td> <td>GenreID</td> <td class=c>N</td> <td>--&gt; <a href='QuickTime.html#GenreID'>QuickTime GenreID Values</a></td></tr> <tr> <td>'gnre'</td> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'grup'</td> <td>Grouping</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'gshh'</td> <td>GoogleHostHeader</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'gspm'</td> <td>GooglePingMessage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'gspu'</td> <td>GooglePingURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'gssd'</td> <td>GoogleSourceData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'gsst'</td> <td>GoogleStartTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'gstd'</td> <td>GoogleTrackDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'hdvd'</td> <td>HDVideo</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td>'itnu'</td> <td>iTunesU</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td>'keyw'</td> <td>Keyword</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ldes'</td> <td>LongDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pcst'</td> <td>Podcast</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td>'perf'</td> <td>Performer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pgap'</td> <td>PlayGap</td> <td class=c>N</td> <td><span class=s>0 = Insert Gap <br>1 = No Gap</span></td></tr> <tr class=b> <td>'plID'</td> <td>PlayListID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'prID'</td> <td>ProductID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'purd'</td> <td>PurchaseDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'purl'</td> <td>PodcastURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'rate'</td> <td>RatingPercent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'rldt'</td> <td>ReleaseDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'rtng'</td> <td>Rating</td> <td class=c>N</td> <td><span class=s>0 = none <br>1 = Explicit <br>2 = Clean <br>4 = Explicit (old)</span></td></tr> <tr> <td>'sfID'</td> <td>AppleStoreCountry</td> <td class=c>N</td> <td>--&gt; <a href='QuickTime.html#AppleStoreCountry'>QuickTime AppleStoreCountry Values</a></td></tr> <tr class=b> <td>'soaa'</td> <td>SortAlbumArtist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'soal'</td> <td>SortAlbum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'soar'</td> <td>SortArtist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'soco'</td> <td>SortComposer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'sonm'</td> <td>SortName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'sosn'</td> <td>SortShow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'stik'</td> <td>MediaType</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Movie <br>1 = Normal (Music) <br>2 = Audiobook <br>5 = Whacked Bookmark <br>6 = Music Video</td><td>&nbsp;&nbsp;</td> <td>9 = Short Film <br>10 = TV Show <br>11 = Booklet <br>14 = Ringtone <br>21 = Podcast</td></tr></table> </td></tr> <tr> <td>'titl'</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'tmpo'</td> <td>BeatsPerMinute</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'trkn'</td> <td>TrackNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'tven'</td> <td>TVEpisodeID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'tves'</td> <td>TVEpisode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'tvnn'</td> <td>TVNetworkName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'tvsh'</td> <td>TVShow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'tvsn'</td> <td>TVSeason</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'yrrc'</td> <td>Year</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;ART"</td> <td>Artist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;alb"</td> <td>Album</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;cmt"</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;com"</td> <td>Composer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;cpy"</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;day"</td> <td>ContentCreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;des"</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;enc"</td> <td>EncodedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;gen"</td> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;grp"</td> <td>Grouping</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;lyr"</td> <td>Lyrics</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;nam"</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;nrt"</td> <td>Narrator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;pub"</td> <td>Publisher</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;too"</td> <td>Encoder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;trk"</td> <td>Track</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;wrt"</td> <td>Composer</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='GenreID'>QuickTime GenreID Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>GenreID</th></tr> <tr><td class=r>2</td><td>= Music|Blues</td> </tr><tr><td class=r>3</td><td>= Music|Comedy</td> </tr><tr><td class=r>4</td><td>= Music|Children&#39;s Music</td> </tr><tr><td class=r>5</td><td>= Music|Classical</td> </tr><tr><td class=r>6</td><td>= Music|Country</td> </tr><tr><td class=r>7</td><td>= Music|Electronic</td> </tr><tr><td class=r>8</td><td>= Music|Holiday</td> </tr><tr><td class=r>9</td><td>= Music|Classical|Opera</td> </tr><tr><td class=r>10</td><td>= Music|Singer/Songwriter</td> </tr><tr><td class=r>11</td><td>= Music|Jazz</td> </tr><tr><td class=r>12</td><td>= Music|Latino</td> </tr><tr><td class=r>13</td><td>= Music|New Age</td> </tr><tr><td class=r>14</td><td>= Music|Pop</td> </tr><tr><td class=r>15</td><td>= Music|R&amp;B/Soul</td> </tr><tr><td class=r>16</td><td>= Music|Soundtrack</td> </tr><tr><td class=r>17</td><td>= Music|Dance</td> </tr><tr><td class=r>18</td><td>= Music|Hip-Hop/Rap</td> </tr><tr><td class=r>19</td><td>= Music|World</td> </tr><tr><td class=r>20</td><td>= Music|Alternative</td> </tr><tr><td class=r>21</td><td>= Music|Rock</td> </tr><tr><td class=r>22</td><td>= Music|Christian &amp; Gospel</td> </tr><tr><td class=r>23</td><td>= Music|Vocal</td> </tr><tr><td class=r>24</td><td>= Music|Reggae</td> </tr><tr><td class=r>25</td><td>= Music|Easy Listening</td> </tr><tr><td class=r>26</td><td>= Podcasts</td> </tr><tr><td class=r>27</td><td>= Music|J-Pop</td> </tr><tr><td class=r>28</td><td>= Music|Enka</td> </tr><tr><td class=r>29</td><td>= Music|Anime</td> </tr><tr><td class=r>30</td><td>= Music|Kayokyoku</td> </tr><tr><td class=r>31</td><td>= Music Videos</td> </tr><tr><td class=r>32</td><td>= TV Shows</td> </tr><tr><td class=r>33</td><td>= Movies</td> </tr><tr><td class=r>34</td><td>= Music</td> </tr><tr><td class=r>35</td><td>= iPod Games</td> </tr><tr><td class=r>36</td><td>= App Store</td> </tr><tr><td class=r>37</td><td>= Tones</td> </tr><tr><td class=r>38</td><td>= Books</td> </tr><tr><td class=r>39</td><td>= Mac App Store</td> </tr><tr><td class=r>40</td><td>= Textbooks</td> </tr><tr><td class=r>50</td><td>= Music|Fitness &amp; Workout</td> </tr><tr><td class=r>51</td><td>= Music|Pop|K-Pop</td> </tr><tr><td class=r>52</td><td>= Music|Karaoke</td> </tr><tr><td class=r>53</td><td>= Music|Instrumental</td> </tr><tr><td class=r>74</td><td>= Audiobooks|News</td> </tr><tr><td class=r>75</td><td>= Audiobooks|Programs &amp; Performances</td> </tr><tr><td class=r>1001</td><td>= Music|Alternative|College Rock</td> </tr><tr><td class=r>1002</td><td>= Music|Alternative|Goth Rock</td> </tr><tr><td class=r>1003</td><td>= Music|Alternative|Grunge</td> </tr><tr><td class=r>1004</td><td>= Music|Alternative|Indie Rock</td> </tr><tr><td class=r>1005</td><td>= Music|Alternative|New Wave</td> </tr><tr><td class=r>1006</td><td>= Music|Alternative|Punk</td> </tr><tr><td class=r>1007</td><td>= Music|Blues|Chicago Blues</td> </tr><tr><td class=r>1009</td><td>= Music|Blues|Classic Blues</td> </tr><tr><td class=r>1010</td><td>= Music|Blues|Contemporary Blues</td> </tr><tr><td class=r>1011</td><td>= Music|Blues|Country Blues</td> </tr><tr><td class=r>1012</td><td>= Music|Blues|Delta Blues</td> </tr><tr><td class=r>1013</td><td>= Music|Blues|Electric Blues</td> </tr><tr><td class=r>1014</td><td>= Music|Children&#39;s Music|Lullabies</td> </tr><tr><td class=r>1015</td><td>= Music|Children&#39;s Music|Sing-Along</td> </tr><tr><td class=r>1016</td><td>= Music|Children&#39;s Music|Stories</td> </tr><tr><td class=r>1017</td><td>= Music|Classical|Avant-Garde</td> </tr><tr><td class=r>1018</td><td>= Music|Classical|Baroque Era</td> </tr><tr><td class=r>1019</td><td>= Music|Classical|Chamber Music</td> </tr><tr><td class=r>1020</td><td>= Music|Classical|Chant</td> </tr><tr><td class=r>1021</td><td>= Music|Classical|Choral</td> </tr><tr><td class=r>1022</td><td>= Music|Classical|Classical Crossover</td> </tr><tr><td class=r>1023</td><td>= Music|Classical|Early Music</td> </tr><tr><td class=r>1024</td><td>= Music|Classical|Impressionist</td> </tr><tr><td class=r>1025</td><td>= Music|Classical|Medieval Era</td> </tr><tr><td class=r>1026</td><td>= Music|Classical|Minimalism</td> </tr><tr><td class=r>1027</td><td>= Music|Classical|Modern Era</td> </tr><tr><td class=r>1028</td><td>= Music|Classical|Opera</td> </tr><tr><td class=r>1029</td><td>= Music|Classical|Orchestral</td> </tr><tr><td class=r>1030</td><td>= Music|Classical|Renaissance</td> </tr><tr><td class=r>1031</td><td>= Music|Classical|Romantic Era</td> </tr><tr><td class=r>1032</td><td>= Music|Classical|Wedding Music</td> </tr><tr><td class=r>1033</td><td>= Music|Country|Alternative Country</td> </tr><tr><td class=r>1034</td><td>= Music|Country|Americana</td> </tr><tr><td class=r>1035</td><td>= Music|Country|Bluegrass</td> </tr><tr><td class=r>1036</td><td>= Music|Country|Contemporary Bluegrass</td> </tr><tr><td class=r>1037</td><td>= Music|Country|Contemporary Country</td> </tr><tr><td class=r>1038</td><td>= Music|Country|Country Gospel</td> </tr><tr><td class=r>1039</td><td>= Music|Country|Honky Tonk</td> </tr><tr><td class=r>1040</td><td>= Music|Country|Outlaw Country</td> </tr><tr><td class=r>1041</td><td>= Music|Country|Traditional Bluegrass</td> </tr><tr><td class=r>1042</td><td>= Music|Country|Traditional Country</td> </tr><tr><td class=r>1043</td><td>= Music|Country|Urban Cowboy</td> </tr><tr><td class=r>1044</td><td>= Music|Dance|Breakbeat</td> </tr><tr><td class=r>1045</td><td>= Music|Dance|Exercise</td> </tr><tr><td class=r>1046</td><td>= Music|Dance|Garage</td> </tr><tr><td class=r>1047</td><td>= Music|Dance|Hardcore</td> </tr><tr><td class=r>1048</td><td>= Music|Dance|House</td> </tr><tr><td class=r>1049</td><td>= Music|Dance|Jungle/Drum&#39;n&#39;bass</td> </tr><tr><td class=r>1050</td><td>= Music|Dance|Techno</td> </tr><tr><td class=r>1051</td><td>= Music|Dance|Trance</td> </tr><tr><td class=r>1052</td><td>= Music|Jazz|Big Band</td> </tr><tr><td class=r>1053</td><td>= Music|Jazz|Bop</td> </tr><tr><td class=r>1054</td><td>= Music|Easy Listening|Lounge</td> </tr><tr><td class=r>1055</td><td>= Music|Easy Listening|Swing</td> </tr><tr><td class=r>1056</td><td>= Music|Electronic|Ambient</td> </tr><tr><td class=r>1057</td><td>= Music|Electronic|Downtempo</td> </tr><tr><td class=r>1058</td><td>= Music|Electronic|Electronica</td> </tr><tr><td class=r>1060</td><td>= Music|Electronic|IDM/Experimental</td> </tr><tr><td class=r>1061</td><td>= Music|Electronic|Industrial</td> </tr><tr><td class=r>1062</td><td>= Music|Singer/Songwriter|Alternative Folk</td> </tr><tr><td class=r>1063</td><td>= Music|Singer/Songwriter|Contemporary Folk</td> </tr><tr><td class=r>1064</td><td>= Music|Singer/Songwriter|Contemporary Singer/Songwriter</td> </tr><tr><td class=r>1065</td><td>= Music|Singer/Songwriter|Folk-Rock</td> </tr><tr><td class=r>1066</td><td>= Music|Singer/Songwriter|New Acoustic</td> </tr><tr><td class=r>1067</td><td>= Music|Singer/Songwriter|Traditional Folk</td> </tr><tr><td class=r>1068</td><td>= Music|Hip-Hop/Rap|Alternative Rap</td> </tr><tr><td class=r>1069</td><td>= Music|Hip-Hop/Rap|Dirty South</td> </tr><tr><td class=r>1070</td><td>= Music|Hip-Hop/Rap|East Coast Rap</td> </tr><tr><td class=r>1071</td><td>= Music|Hip-Hop/Rap|Gangsta Rap</td> </tr><tr><td class=r>1072</td><td>= Music|Hip-Hop/Rap|Hardcore Rap</td> </tr><tr><td class=r>1073</td><td>= Music|Hip-Hop/Rap|Hip-Hop</td> </tr><tr><td class=r>1074</td><td>= Music|Hip-Hop/Rap|Latin Rap</td> </tr><tr><td class=r>1075</td><td>= Music|Hip-Hop/Rap|Old School Rap</td> </tr><tr><td class=r>1076</td><td>= Music|Hip-Hop/Rap|Rap</td> </tr><tr><td class=r>1077</td><td>= Music|Hip-Hop/Rap|Underground Rap</td> </tr><tr><td class=r>1078</td><td>= Music|Hip-Hop/Rap|West Coast Rap</td> </tr><tr><td class=r>1079</td><td>= Music|Holiday|Chanukah</td> </tr><tr><td class=r>1080</td><td>= Music|Holiday|Christmas</td> </tr><tr><td class=r>1081</td><td>= Music|Holiday|Christmas: Children&#39;s</td> </tr><tr><td class=r>1082</td><td>= Music|Holiday|Christmas: Classic</td> </tr><tr><td class=r>1083</td><td>= Music|Holiday|Christmas: Classical</td> </tr><tr><td class=r>1084</td><td>= Music|Holiday|Christmas: Jazz</td> </tr><tr><td class=r>1085</td><td>= Music|Holiday|Christmas: Modern</td> </tr><tr><td class=r>1086</td><td>= Music|Holiday|Christmas: Pop</td> </tr><tr><td class=r>1087</td><td>= Music|Holiday|Christmas: R&amp;B</td> </tr><tr><td class=r>1088</td><td>= Music|Holiday|Christmas: Religious</td> </tr><tr><td class=r>1089</td><td>= Music|Holiday|Christmas: Rock</td> </tr><tr><td class=r>1090</td><td>= Music|Holiday|Easter</td> </tr><tr><td class=r>1091</td><td>= Music|Holiday|Halloween</td> </tr><tr><td class=r>1092</td><td>= Music|Holiday|Holiday: Other</td> </tr><tr><td class=r>1093</td><td>= Music|Holiday|Thanksgiving</td> </tr><tr><td class=r>1094</td><td>= Music|Christian &amp; Gospel|CCM</td> </tr><tr><td class=r>1095</td><td>= Music|Christian &amp; Gospel|Christian Metal</td> </tr><tr><td class=r>1096</td><td>= Music|Christian &amp; Gospel|Christian Pop</td> </tr><tr><td class=r>1097</td><td>= Music|Christian &amp; Gospel|Christian Rap</td> </tr><tr><td class=r>1098</td><td>= Music|Christian &amp; Gospel|Christian Rock</td> </tr><tr><td class=r>1099</td><td>= Music|Christian &amp; Gospel|Classic Christian</td> </tr><tr><td class=r>1100</td><td>= Music|Christian &amp; Gospel|Contemporary Gospel</td> </tr><tr><td class=r>1101</td><td>= Music|Christian &amp; Gospel|Gospel</td> </tr><tr><td class=r>1103</td><td>= Music|Christian &amp; Gospel|Praise &amp; Worship</td> </tr><tr><td class=r>1104</td><td>= Music|Christian &amp; Gospel|Southern Gospel</td> </tr><tr><td class=r>1105</td><td>= Music|Christian &amp; Gospel|Traditional Gospel</td> </tr><tr><td class=r>1106</td><td>= Music|Jazz|Avant-Garde Jazz</td> </tr><tr><td class=r>1107</td><td>= Music|Jazz|Contemporary Jazz</td> </tr><tr><td class=r>1108</td><td>= Music|Jazz|Crossover Jazz</td> </tr><tr><td class=r>1109</td><td>= Music|Jazz|Dixieland</td> </tr><tr><td class=r>1110</td><td>= Music|Jazz|Fusion</td> </tr><tr><td class=r>1111</td><td>= Music|Jazz|Latin Jazz</td> </tr><tr><td class=r>1112</td><td>= Music|Jazz|Mainstream Jazz</td> </tr><tr><td class=r>1113</td><td>= Music|Jazz|Ragtime</td> </tr><tr><td class=r>1114</td><td>= Music|Jazz|Smooth Jazz</td> </tr><tr><td class=r>1115</td><td>= Music|Latino|Latin Jazz</td> </tr><tr><td class=r>1116</td><td>= Music|Latino|Contemporary Latin</td> </tr><tr><td class=r>1117</td><td>= Music|Latino|Latin Pop</td> </tr><tr><td class=r>1118</td><td>= Music|Latino|Raices</td> </tr><tr><td class=r>1119</td><td>= Music|Latino|Latin Urban</td> </tr><tr><td class=r>1120</td><td>= Music|Latino|Baladas y Boleros</td> </tr><tr><td class=r>1121</td><td>= Music|Latino|Latin Alternative &amp; Rock</td> </tr><tr><td class=r>1122</td><td>= Music|Brazilian</td> </tr><tr><td class=r>1123</td><td>= Music|Latino|Regional Mexicano</td> </tr><tr><td class=r>1124</td><td>= Music|Latino|Salsa y Tropical</td> </tr><tr><td class=r>1125</td><td>= Music|New Age|Environmental</td> </tr><tr><td class=r>1126</td><td>= Music|New Age|Healing</td> </tr><tr><td class=r>1127</td><td>= Music|New Age|Meditation</td> </tr><tr><td class=r>1128</td><td>= Music|New Age|Nature</td> </tr><tr><td class=r>1129</td><td>= Music|New Age|Relaxation</td> </tr><tr><td class=r>1130</td><td>= Music|New Age|Travel</td> </tr><tr><td class=r>1131</td><td>= Music|Pop|Adult Contemporary</td> </tr><tr><td class=r>1132</td><td>= Music|Pop|Britpop</td> </tr><tr><td class=r>1133</td><td>= Music|Pop|Pop/Rock</td> </tr><tr><td class=r>1134</td><td>= Music|Pop|Soft Rock</td> </tr><tr><td class=r>1135</td><td>= Music|Pop|Teen Pop</td> </tr><tr><td class=r>1136</td><td>= Music|R&amp;B/Soul|Contemporary R&amp;B</td> </tr><tr><td class=r>1137</td><td>= Music|R&amp;B/Soul|Disco</td> </tr><tr><td class=r>1138</td><td>= Music|R&amp;B/Soul|Doo Wop</td> </tr><tr><td class=r>1139</td><td>= Music|R&amp;B/Soul|Funk</td> </tr><tr><td class=r>1140</td><td>= Music|R&amp;B/Soul|Motown</td> </tr><tr><td class=r>1141</td><td>= Music|R&amp;B/Soul|Neo-Soul</td> </tr><tr><td class=r>1142</td><td>= Music|R&amp;B/Soul|Quiet Storm</td> </tr><tr><td class=r>1143</td><td>= Music|R&amp;B/Soul|Soul</td> </tr><tr><td class=r>1144</td><td>= Music|Rock|Adult Alternative</td> </tr><tr><td class=r>1145</td><td>= Music|Rock|American Trad Rock</td> </tr><tr><td class=r>1146</td><td>= Music|Rock|Arena Rock</td> </tr><tr><td class=r>1147</td><td>= Music|Rock|Blues-Rock</td> </tr><tr><td class=r>1148</td><td>= Music|Rock|British Invasion</td> </tr><tr><td class=r>1149</td><td>= Music|Rock|Death Metal/Black Metal</td> </tr><tr><td class=r>1150</td><td>= Music|Rock|Glam Rock</td> </tr><tr><td class=r>1151</td><td>= Music|Rock|Hair Metal</td> </tr><tr><td class=r>1152</td><td>= Music|Rock|Hard Rock</td> </tr><tr><td class=r>1153</td><td>= Music|Rock|Metal</td> </tr><tr><td class=r>1154</td><td>= Music|Rock|Jam Bands</td> </tr><tr><td class=r>1155</td><td>= Music|Rock|Prog-Rock/Art Rock</td> </tr><tr><td class=r>1156</td><td>= Music|Rock|Psychedelic</td> </tr><tr><td class=r>1157</td><td>= Music|Rock|Rock &amp; Roll</td> </tr><tr><td class=r>1158</td><td>= Music|Rock|Rockabilly</td> </tr><tr><td class=r>1159</td><td>= Music|Rock|Roots Rock</td> </tr><tr><td class=r>1160</td><td>= Music|Rock|Singer/Songwriter</td> </tr><tr><td class=r>1161</td><td>= Music|Rock|Southern Rock</td> </tr><tr><td class=r>1162</td><td>= Music|Rock|Surf</td> </tr><tr><td class=r>1163</td><td>= Music|Rock|Tex-Mex</td> </tr><tr><td class=r>1165</td><td>= Music|Soundtrack|Foreign Cinema</td> </tr><tr><td class=r>1166</td><td>= Music|Soundtrack|Musicals</td> </tr><tr><td class=r>1167</td><td>= Music|Comedy|Novelty</td> </tr><tr><td class=r>1168</td><td>= Music|Soundtrack|Original Score</td> </tr><tr><td class=r>1169</td><td>= Music|Soundtrack|Soundtrack</td> </tr><tr><td class=r>1171</td><td>= Music|Comedy|Standup Comedy</td> </tr><tr><td class=r>1172</td><td>= Music|Soundtrack|TV Soundtrack</td> </tr><tr><td class=r>1173</td><td>= Music|Vocal|Standards</td> </tr><tr><td class=r>1174</td><td>= Music|Vocal|Traditional Pop</td> </tr><tr><td class=r>1175</td><td>= Music|Jazz|Vocal Jazz</td> </tr><tr><td class=r>1176</td><td>= Music|Vocal|Vocal Pop</td> </tr><tr><td class=r>1177</td><td>= Music|World|Afro-Beat</td> </tr><tr><td class=r>1178</td><td>= Music|World|Afro-Pop</td> </tr><tr><td class=r>1179</td><td>= Music|World|Cajun</td> </tr><tr><td class=r>1180</td><td>= Music|World|Celtic</td> </tr><tr><td class=r>1181</td><td>= Music|World|Celtic Folk</td> </tr><tr><td class=r>1182</td><td>= Music|World|Contemporary Celtic</td> </tr><tr><td class=r>1183</td><td>= Music|Reggae|Modern Dancehall</td> </tr><tr><td class=r>1184</td><td>= Music|World|Drinking Songs</td> </tr><tr><td class=r>1185</td><td>= Music|Indian|Indian Pop</td> </tr><tr><td class=r>1186</td><td>= Music|World|Japanese Pop</td> </tr><tr><td class=r>1187</td><td>= Music|World|Klezmer</td> </tr><tr><td class=r>1188</td><td>= Music|World|Polka</td> </tr><tr><td class=r>1189</td><td>= Music|World|Traditional Celtic</td> </tr><tr><td class=r>1190</td><td>= Music|World|Worldbeat</td> </tr><tr><td class=r>1191</td><td>= Music|World|Zydeco</td> </tr><tr><td class=r>1192</td><td>= Music|Reggae|Roots Reggae</td> </tr><tr><td class=r>1193</td><td>= Music|Reggae|Dub</td> </tr><tr><td class=r>1194</td><td>= Music|Reggae|Ska</td> </tr><tr><td class=r>1195</td><td>= Music|World|Caribbean</td> </tr><tr><td class=r>1196</td><td>= Music|World|South America</td> </tr><tr><td class=r>1197</td><td>= Music|Arabic</td> </tr><tr><td class=r>1198</td><td>= Music|World|North America</td> </tr><tr><td class=r>1199</td><td>= Music|World|Hawaii</td> </tr><tr><td class=r>1200</td><td>= Music|World|Australia</td> </tr><tr><td class=r>1201</td><td>= Music|World|Japan</td> </tr><tr><td class=r>1202</td><td>= Music|World|France</td> </tr><tr><td class=r>1203</td><td>= Music|World|Africa</td> </tr><tr><td class=r>1204</td><td>= Music|World|Asia</td> </tr><tr><td class=r>1205</td><td>= Music|World|Europe</td> </tr><tr><td class=r>1206</td><td>= Music|World|South Africa</td> </tr><tr><td class=r>1207</td><td>= Music|Jazz|Hard Bop</td> </tr><tr><td class=r>1208</td><td>= Music|Jazz|Trad Jazz</td> </tr><tr><td class=r>1209</td><td>= Music|Jazz|Cool</td> </tr><tr><td class=r>1210</td><td>= Music|Blues|Acoustic Blues</td> </tr><tr><td class=r>1211</td><td>= Music|Classical|High Classical</td> </tr><tr><td class=r>1220</td><td>= Music|Brazilian|Axe</td> </tr><tr><td class=r>1221</td><td>= Music|Brazilian|Bossa Nova</td> </tr><tr><td class=r>1222</td><td>= Music|Brazilian|Choro</td> </tr><tr><td class=r>1223</td><td>= Music|Brazilian|Forro</td> </tr><tr><td class=r>1224</td><td>= Music|Brazilian|Frevo</td> </tr><tr><td class=r>1225</td><td>= Music|Brazilian|MPB</td> </tr><tr><td class=r>1226</td><td>= Music|Brazilian|Pagode</td> </tr><tr><td class=r>1227</td><td>= Music|Brazilian|Samba</td> </tr><tr><td class=r>1228</td><td>= Music|Brazilian|Sertanejo</td> </tr><tr><td class=r>1229</td><td>= Music|Brazilian|Baile Funk</td> </tr><tr><td class=r>1230</td><td>= Music|Alternative|Chinese Alt</td> </tr><tr><td class=r>1231</td><td>= Music|Alternative|Korean Indie</td> </tr><tr><td class=r>1232</td><td>= Music|Chinese</td> </tr><tr><td class=r>1233</td><td>= Music|Chinese|Chinese Classical</td> </tr><tr><td class=r>1234</td><td>= Music|Chinese|Chinese Flute</td> </tr><tr><td class=r>1235</td><td>= Music|Chinese|Chinese Opera</td> </tr><tr><td class=r>1236</td><td>= Music|Chinese|Chinese Orchestral</td> </tr><tr><td class=r>1237</td><td>= Music|Chinese|Chinese Regional Folk</td> </tr><tr><td class=r>1238</td><td>= Music|Chinese|Chinese Strings</td> </tr><tr><td class=r>1239</td><td>= Music|Chinese|Taiwanese Folk</td> </tr><tr><td class=r>1240</td><td>= Music|Chinese|Tibetan Native Music</td> </tr><tr><td class=r>1241</td><td>= Music|Hip-Hop/Rap|Chinese Hip-Hop</td> </tr><tr><td class=r>1242</td><td>= Music|Hip-Hop/Rap|Korean Hip-Hop</td> </tr><tr><td class=r>1243</td><td>= Music|Korean</td> </tr><tr><td class=r>1244</td><td>= Music|Korean|Korean Classical</td> </tr><tr><td class=r>1245</td><td>= Music|Korean|Korean Trad Song</td> </tr><tr><td class=r>1246</td><td>= Music|Korean|Korean Trad Instrumental</td> </tr><tr><td class=r>1247</td><td>= Music|Korean|Korean Trad Theater</td> </tr><tr><td class=r>1248</td><td>= Music|Rock|Chinese Rock</td> </tr><tr><td class=r>1249</td><td>= Music|Rock|Korean Rock</td> </tr><tr><td class=r>1250</td><td>= Music|Pop|C-Pop</td> </tr><tr><td class=r>1251</td><td>= Music|Pop|Cantopop/HK-Pop</td> </tr><tr><td class=r>1252</td><td>= Music|Pop|Korean Folk-Pop</td> </tr><tr><td class=r>1253</td><td>= Music|Pop|Mandopop</td> </tr><tr><td class=r>1254</td><td>= Music|Pop|Tai-Pop</td> </tr><tr><td class=r>1255</td><td>= Music|Pop|Malaysian Pop</td> </tr><tr><td class=r>1256</td><td>= Music|Pop|Pinoy Pop</td> </tr><tr><td class=r>1257</td><td>= Music|Pop|Original Pilipino Music</td> </tr><tr><td class=r>1258</td><td>= Music|Pop|Manilla Sound</td> </tr><tr><td class=r>1259</td><td>= Music|Pop|Indo Pop</td> </tr><tr><td class=r>1260</td><td>= Music|Pop|Thai Pop</td> </tr><tr><td class=r>1261</td><td>= Music|Vocal|Trot</td> </tr><tr><td class=r>1262</td><td>= Music|Indian</td> </tr><tr><td class=r>1263</td><td>= Music|Indian|Bollywood</td> </tr><tr><td class=r>1264</td><td>= Music|Indian|Tamil</td> </tr><tr><td class=r>1265</td><td>= Music|Indian|Telugu</td> </tr><tr><td class=r>1266</td><td>= Music|Indian|Regional Indian</td> </tr><tr><td class=r>1267</td><td>= Music|Indian|Devotional &amp; Spiritual</td> </tr><tr><td class=r>1268</td><td>= Music|Indian|Sufi</td> </tr><tr><td class=r>1269</td><td>= Music|Indian|Indian Classical</td> </tr><tr><td class=r>1270</td><td>= Music|World|Russian Chanson</td> </tr><tr><td class=r>1271</td><td>= Music|World|Dini</td> </tr><tr><td class=r>1272</td><td>= Music|World|Halk</td> </tr><tr><td class=r>1273</td><td>= Music|World|Sanat</td> </tr><tr><td class=r>1274</td><td>= Music|World|Dangdut</td> </tr><tr><td class=r>1275</td><td>= Music|World|Indonesian Religious</td> </tr><tr><td class=r>1276</td><td>= Music|World|Calypso</td> </tr><tr><td class=r>1277</td><td>= Music|World|Soca</td> </tr><tr><td class=r>1278</td><td>= Music|Indian|Ghazals</td> </tr><tr><td class=r>1279</td><td>= Music|Indian|Indian Folk</td> </tr><tr><td class=r>1280</td><td>= Music|World|Arabesque</td> </tr><tr><td class=r>1281</td><td>= Music|World|Afrikaans</td> </tr><tr><td class=r>1282</td><td>= Music|World|Farsi</td> </tr><tr><td class=r>1283</td><td>= Music|World|Israeli</td> </tr><tr><td class=r>1284</td><td>= Music|Arabic|Khaleeji</td> </tr><tr><td class=r>1285</td><td>= Music|Arabic|North African</td> </tr><tr><td class=r>1286</td><td>= Music|Arabic|Arabic Pop</td> </tr><tr><td class=r>1287</td><td>= Music|Arabic|Islamic</td> </tr><tr><td class=r>1288</td><td>= Music|Soundtrack|Sound Effects</td> </tr><tr><td class=r>1289</td><td>= Music|Folk</td> </tr><tr><td class=r>1290</td><td>= Music|Orchestral</td> </tr><tr><td class=r>1291</td><td>= Music|Marching</td> </tr><tr><td class=r>1293</td><td>= Music|Pop|Oldies</td> </tr><tr><td class=r>1294</td><td>= Music|Country|Thai Country</td> </tr><tr><td class=r>1295</td><td>= Music|World|Flamenco</td> </tr><tr><td class=r>1296</td><td>= Music|World|Tango</td> </tr><tr><td class=r>1297</td><td>= Music|World|Fado</td> </tr><tr><td class=r>1298</td><td>= Music|World|Iberia</td> </tr><tr><td class=r>1299</td><td>= Music|World|Russian</td> </tr><tr><td class=r>1300</td><td>= Music|World|Turkish</td> </tr><tr><td class=r>1301</td><td>= Podcasts|Arts</td> </tr><tr><td class=r>1302</td><td>= Podcasts|Society &amp; Culture|Personal Journals</td> </tr><tr><td class=r>1303</td><td>= Podcasts|Comedy</td> </tr><tr><td class=r>1304</td><td>= Podcasts|Education</td> </tr><tr><td class=r>1305</td><td>= Podcasts|Kids &amp; Family</td> </tr><tr><td class=r>1306</td><td>= Podcasts|Arts|Food</td> </tr><tr><td class=r>1307</td><td>= Podcasts|Health</td> </tr><tr><td class=r>1309</td><td>= Podcasts|TV &amp; Film</td> </tr><tr><td class=r>1310</td><td>= Podcasts|Music</td> </tr><tr><td class=r>1311</td><td>= Podcasts|News &amp; Politics</td> </tr><tr><td class=r>1314</td><td>= Podcasts|Religion &amp; Spirituality</td> </tr><tr><td class=r>1315</td><td>= Podcasts|Science &amp; Medicine</td> </tr><tr><td class=r>1316</td><td>= Podcasts|Sports &amp; Recreation</td> </tr><tr><td class=r>1318</td><td>= Podcasts|Technology</td> </tr><tr><td class=r>1320</td><td>= Podcasts|Society &amp; Culture|Places &amp; Travel</td> </tr><tr><td class=r>1321</td><td>= Podcasts|Business</td> </tr><tr><td class=r>1323</td><td>= Podcasts|Games &amp; Hobbies</td> </tr><tr><td class=r>1324</td><td>= Podcasts|Society &amp; Culture</td> </tr><tr><td class=r>1325</td><td>= Podcasts|Government &amp; Organizations</td> </tr><tr><td class=r>1337</td><td>= Music Videos|Classical|Piano</td> </tr><tr><td class=r>1401</td><td>= Podcasts|Arts|Literature</td> </tr><tr><td class=r>1402</td><td>= Podcasts|Arts|Design</td> </tr><tr><td class=r>1404</td><td>= Podcasts|Games &amp; Hobbies|Video Games</td> </tr><tr><td class=r>1405</td><td>= Podcasts|Arts|Performing Arts</td> </tr><tr><td class=r>1406</td><td>= Podcasts|Arts|Visual Arts</td> </tr><tr><td class=r>1410</td><td>= Podcasts|Business|Careers</td> </tr><tr><td class=r>1412</td><td>= Podcasts|Business|Investing</td> </tr><tr><td class=r>1413</td><td>= Podcasts|Business|Management &amp; Marketing</td> </tr><tr><td class=r>1415</td><td>= Podcasts|Education|K-12</td> </tr><tr><td class=r>1416</td><td>= Podcasts|Education|Higher Education</td> </tr><tr><td class=r>1417</td><td>= Podcasts|Health|Fitness &amp; Nutrition</td> </tr><tr><td class=r>1420</td><td>= Podcasts|Health|Self-Help</td> </tr><tr><td class=r>1421</td><td>= Podcasts|Health|Sexuality</td> </tr><tr><td class=r>1438</td><td>= Podcasts|Religion &amp; Spirituality|Buddhism</td> </tr><tr><td class=r>1439</td><td>= Podcasts|Religion &amp; Spirituality|Christianity</td> </tr><tr><td class=r>1440</td><td>= Podcasts|Religion &amp; Spirituality|Islam</td> </tr><tr><td class=r>1441</td><td>= Podcasts|Religion &amp; Spirituality|Judaism</td> </tr><tr><td class=r>1443</td><td>= Podcasts|Society &amp; Culture|Philosophy</td> </tr><tr><td class=r>1444</td><td>= Podcasts|Religion &amp; Spirituality|Spirituality</td> </tr><tr><td class=r>1446</td><td>= Podcasts|Technology|Gadgets</td> </tr><tr><td class=r>1448</td><td>= Podcasts|Technology|Tech News</td> </tr><tr><td class=r>1450</td><td>= Podcasts|Technology|Podcasting</td> </tr><tr><td class=r>1454</td><td>= Podcasts|Games &amp; Hobbies|Automotive</td> </tr><tr><td class=r>1455</td><td>= Podcasts|Games &amp; Hobbies|Aviation</td> </tr><tr><td class=r>1456</td><td>= Podcasts|Sports &amp; Recreation|Outdoor</td> </tr><tr><td class=r>1459</td><td>= Podcasts|Arts|Fashion &amp; Beauty</td> </tr><tr><td class=r>1460</td><td>= Podcasts|Games &amp; Hobbies|Hobbies</td> </tr><tr><td class=r>1461</td><td>= Podcasts|Games &amp; Hobbies|Other Games</td> </tr><tr><td class=r>1462</td><td>= Podcasts|Society &amp; Culture|History</td> </tr><tr><td class=r>1463</td><td>= Podcasts|Religion &amp; Spirituality|Hinduism</td> </tr><tr><td class=r>1464</td><td>= Podcasts|Religion &amp; Spirituality|Other</td> </tr><tr><td class=r>1465</td><td>= Podcasts|Sports &amp; Recreation|Professional</td> </tr><tr><td class=r>1466</td><td>= Podcasts|Sports &amp; Recreation|College &amp; High School</td> </tr><tr><td class=r>1467</td><td>= Podcasts|Sports &amp; Recreation|Amateur</td> </tr><tr><td class=r>1468</td><td>= Podcasts|Education|Educational Technology</td> </tr><tr><td class=r>1469</td><td>= Podcasts|Education|Language Courses</td> </tr><tr><td class=r>1470</td><td>= Podcasts|Education|Training</td> </tr><tr><td class=r>1471</td><td>= Podcasts|Business|Business News</td> </tr><tr><td class=r>1472</td><td>= Podcasts|Business|Shopping</td> </tr><tr><td class=r>1473</td><td>= Podcasts|Government &amp; Organizations|National</td> </tr><tr><td class=r>1474</td><td>= Podcasts|Government &amp; Organizations|Regional</td> </tr><tr><td class=r>1475</td><td>= Podcasts|Government &amp; Organizations|Local</td> </tr><tr><td class=r>1476</td><td>= Podcasts|Government &amp; Organizations|Non-Profit</td> </tr><tr><td class=r>1477</td><td>= Podcasts|Science &amp; Medicine|Natural Sciences</td> </tr><tr><td class=r>1478</td><td>= Podcasts|Science &amp; Medicine|Medicine</td> </tr><tr><td class=r>1479</td><td>= Podcasts|Science &amp; Medicine|Social Sciences</td> </tr><tr><td class=r>1480</td><td>= Podcasts|Technology|Software How-To</td> </tr><tr><td class=r>1481</td><td>= Podcasts|Health|Alternative Health</td> </tr><tr><td class=r>1602</td><td>= Music Videos|Blues</td> </tr><tr><td class=r>1603</td><td>= Music Videos|Comedy</td> </tr><tr><td class=r>1604</td><td>= Music Videos|Children&#39;s Music</td> </tr><tr><td class=r>1605</td><td>= Music Videos|Classical</td> </tr><tr><td class=r>1606</td><td>= Music Videos|Country</td> </tr><tr><td class=r>1607</td><td>= Music Videos|Electronic</td> </tr><tr><td class=r>1608</td><td>= Music Videos|Holiday</td> </tr><tr><td class=r>1609</td><td>= Music Videos|Classical|Opera</td> </tr><tr><td class=r>1610</td><td>= Music Videos|Singer/Songwriter</td> </tr><tr><td class=r>1611</td><td>= Music Videos|Jazz</td> </tr><tr><td class=r>1612</td><td>= Music Videos|Latin</td> </tr><tr><td class=r>1613</td><td>= Music Videos|New Age</td> </tr><tr><td class=r>1614</td><td>= Music Videos|Pop</td> </tr><tr><td class=r>1615</td><td>= Music Videos|R&amp;B/Soul</td> </tr><tr><td class=r>1616</td><td>= Music Videos|Soundtrack</td> </tr><tr><td class=r>1617</td><td>= Music Videos|Dance</td> </tr><tr><td class=r>1618</td><td>= Music Videos|Hip-Hop/Rap</td> </tr><tr><td class=r>1619</td><td>= Music Videos|World</td> </tr><tr><td class=r>1620</td><td>= Music Videos|Alternative</td> </tr><tr><td class=r>1621</td><td>= Music Videos|Rock</td> </tr><tr><td class=r>1622</td><td>= Music Videos|Christian &amp; Gospel</td> </tr><tr><td class=r>1623</td><td>= Music Videos|Vocal</td> </tr><tr><td class=r>1624</td><td>= Music Videos|Reggae</td> </tr><tr><td class=r>1625</td><td>= Music Videos|Easy Listening</td> </tr><tr><td class=r>1626</td><td>= Music Videos|Podcasts</td> </tr><tr><td class=r>1627</td><td>= Music Videos|J-Pop</td> </tr><tr><td class=r>1628</td><td>= Music Videos|Enka</td> </tr><tr><td class=r>1629</td><td>= Music Videos|Anime</td> </tr><tr><td class=r>1630</td><td>= Music Videos|Kayokyoku</td> </tr><tr><td class=r>1631</td><td>= Music Videos|Disney</td> </tr><tr><td class=r>1632</td><td>= Music Videos|French Pop</td> </tr><tr><td class=r>1633</td><td>= Music Videos|German Pop</td> </tr><tr><td class=r>1634</td><td>= Music Videos|German Folk</td> </tr><tr><td class=r>1635</td><td>= Music Videos|Alternative|Chinese Alt</td> </tr><tr><td class=r>1636</td><td>= Music Videos|Alternative|Korean Indie</td> </tr><tr><td class=r>1637</td><td>= Music Videos|Chinese</td> </tr><tr><td class=r>1638</td><td>= Music Videos|Chinese|Chinese Classical</td> </tr><tr><td class=r>1639</td><td>= Music Videos|Chinese|Chinese Flute</td> </tr><tr><td class=r>1640</td><td>= Music Videos|Chinese|Chinese Opera</td> </tr><tr><td class=r>1641</td><td>= Music Videos|Chinese|Chinese Orchestral</td> </tr><tr><td class=r>1642</td><td>= Music Videos|Chinese|Chinese Regional Folk</td> </tr><tr><td class=r>1643</td><td>= Music Videos|Chinese|Chinese Strings</td> </tr><tr><td class=r>1644</td><td>= Music Videos|Chinese|Taiwanese Folk</td> </tr><tr><td class=r>1645</td><td>= Music Videos|Chinese|Tibetan Native Music</td> </tr><tr><td class=r>1646</td><td>= Music Videos|Hip-Hop/Rap|Chinese Hip-Hop</td> </tr><tr><td class=r>1647</td><td>= Music Videos|Hip-Hop/Rap|Korean Hip-Hop</td> </tr><tr><td class=r>1648</td><td>= Music Videos|Korean</td> </tr><tr><td class=r>1649</td><td>= Music Videos|Korean|Korean Classical</td> </tr><tr><td class=r>1650</td><td>= Music Videos|Korean|Korean Trad Song</td> </tr><tr><td class=r>1651</td><td>= Music Videos|Korean|Korean Trad Instrumental</td> </tr><tr><td class=r>1652</td><td>= Music Videos|Korean|Korean Trad Theater</td> </tr><tr><td class=r>1653</td><td>= Music Videos|Rock|Chinese Rock</td> </tr><tr><td class=r>1654</td><td>= Music Videos|Rock|Korean Rock</td> </tr><tr><td class=r>1655</td><td>= Music Videos|Pop|C-Pop</td> </tr><tr><td class=r>1656</td><td>= Music Videos|Pop|Cantopop/HK-Pop</td> </tr><tr><td class=r>1657</td><td>= Music Videos|Pop|Korean Folk-Pop</td> </tr><tr><td class=r>1658</td><td>= Music Videos|Pop|Mandopop</td> </tr><tr><td class=r>1659</td><td>= Music Videos|Pop|Tai-Pop</td> </tr><tr><td class=r>1660</td><td>= Music Videos|Pop|Malaysian Pop</td> </tr><tr><td class=r>1661</td><td>= Music Videos|Pop|Pinoy Pop</td> </tr><tr><td class=r>1662</td><td>= Music Videos|Pop|Original Pilipino Music</td> </tr><tr><td class=r>1663</td><td>= Music Videos|Pop|Manilla Sound</td> </tr><tr><td class=r>1664</td><td>= Music Videos|Pop|Indo Pop</td> </tr><tr><td class=r>1665</td><td>= Music Videos|Pop|Thai Pop</td> </tr><tr><td class=r>1666</td><td>= Music Videos|Vocal|Trot</td> </tr><tr><td class=r>1671</td><td>= Music Videos|Brazilian</td> </tr><tr><td class=r>1672</td><td>= Music Videos|Brazilian|Axe</td> </tr><tr><td class=r>1673</td><td>= Music Videos|Brazilian|Baile Funk</td> </tr><tr><td class=r>1674</td><td>= Music Videos|Brazilian|Bossa Nova</td> </tr><tr><td class=r>1675</td><td>= Music Videos|Brazilian|Choro</td> </tr><tr><td class=r>1676</td><td>= Music Videos|Brazilian|Forro</td> </tr><tr><td class=r>1677</td><td>= Music Videos|Brazilian|Frevo</td> </tr><tr><td class=r>1678</td><td>= Music Videos|Brazilian|MPB</td> </tr><tr><td class=r>1679</td><td>= Music Videos|Brazilian|Pagode</td> </tr><tr><td class=r>1680</td><td>= Music Videos|Brazilian|Samba</td> </tr><tr><td class=r>1681</td><td>= Music Videos|Brazilian|Sertanejo</td> </tr><tr><td class=r>1682</td><td>= Music Videos|Classical|High Classical</td> </tr><tr><td class=r>1683</td><td>= Music Videos|Fitness &amp; Workout</td> </tr><tr><td class=r>1684</td><td>= Music Videos|Instrumental</td> </tr><tr><td class=r>1685</td><td>= Music Videos|Jazz|Big Band</td> </tr><tr><td class=r>1686</td><td>= Music Videos|Pop|K-Pop</td> </tr><tr><td class=r>1687</td><td>= Music Videos|Karaoke</td> </tr><tr><td class=r>1688</td><td>= Music Videos|Rock|Heavy Metal</td> </tr><tr><td class=r>1689</td><td>= Music Videos|Spoken Word</td> </tr><tr><td class=r>1690</td><td>= Music Videos|Indian</td> </tr><tr><td class=r>1691</td><td>= Music Videos|Indian|Bollywood</td> </tr><tr><td class=r>1692</td><td>= Music Videos|Indian|Tamil</td> </tr><tr><td class=r>1693</td><td>= Music Videos|Indian|Telugu</td> </tr><tr><td class=r>1694</td><td>= Music Videos|Indian|Regional Indian</td> </tr><tr><td class=r>1695</td><td>= Music Videos|Indian|Devotional &amp; Spiritual</td> </tr><tr><td class=r>1696</td><td>= Music Videos|Indian|Sufi</td> </tr><tr><td class=r>1697</td><td>= Music Videos|Indian|Indian Classical</td> </tr><tr><td class=r>1698</td><td>= Music Videos|World|Russian Chanson</td> </tr><tr><td class=r>1699</td><td>= Music Videos|World|Dini</td> </tr><tr><td class=r>1700</td><td>= Music Videos|World|Halk</td> </tr><tr><td class=r>1701</td><td>= Music Videos|World|Sanat</td> </tr><tr><td class=r>1702</td><td>= Music Videos|World|Dangdut</td> </tr><tr><td class=r>1703</td><td>= Music Videos|World|Indonesian Religious</td> </tr><tr><td class=r>1704</td><td>= Music Videos|Indian|Indian Pop</td> </tr><tr><td class=r>1705</td><td>= Music Videos|World|Calypso</td> </tr><tr><td class=r>1706</td><td>= Music Videos|World|Soca</td> </tr><tr><td class=r>1707</td><td>= Music Videos|Indian|Ghazals</td> </tr><tr><td class=r>1708</td><td>= Music Videos|Indian|Indian Folk</td> </tr><tr><td class=r>1709</td><td>= Music Videos|World|Arabesque</td> </tr><tr><td class=r>1710</td><td>= Music Videos|World|Afrikaans</td> </tr><tr><td class=r>1711</td><td>= Music Videos|World|Farsi</td> </tr><tr><td class=r>1712</td><td>= Music Videos|World|Israeli</td> </tr><tr><td class=r>1713</td><td>= Music Videos|Arabic</td> </tr><tr><td class=r>1714</td><td>= Music Videos|Arabic|Khaleeji</td> </tr><tr><td class=r>1715</td><td>= Music Videos|Arabic|North African</td> </tr><tr><td class=r>1716</td><td>= Music Videos|Arabic|Arabic Pop</td> </tr><tr><td class=r>1717</td><td>= Music Videos|Arabic|Islamic</td> </tr><tr><td class=r>1718</td><td>= Music Videos|Soundtrack|Sound Effects</td> </tr><tr><td class=r>1719</td><td>= Music Videos|Folk</td> </tr><tr><td class=r>1720</td><td>= Music Videos|Orchestral</td> </tr><tr><td class=r>1721</td><td>= Music Videos|Marching</td> </tr><tr><td class=r>1723</td><td>= Music Videos|Pop|Oldies</td> </tr><tr><td class=r>1724</td><td>= Music Videos|Country|Thai Country</td> </tr><tr><td class=r>1725</td><td>= Music Videos|World|Flamenco</td> </tr><tr><td class=r>1726</td><td>= Music Videos|World|Tango</td> </tr><tr><td class=r>1727</td><td>= Music Videos|World|Fado</td> </tr><tr><td class=r>1728</td><td>= Music Videos|World|Iberia</td> </tr><tr><td class=r>1729</td><td>= Music Videos|World|Russian</td> </tr><tr><td class=r>1730</td><td>= Music Videos|World|Turkish</td> </tr><tr><td class=r>1731</td><td>= Music Videos|Alternative|College Rock</td> </tr><tr><td class=r>1732</td><td>= Music Videos|Alternative|Goth Rock</td> </tr><tr><td class=r>1733</td><td>= Music Videos|Alternative|Grunge</td> </tr><tr><td class=r>1734</td><td>= Music Videos|Alternative|Indie Rock</td> </tr><tr><td class=r>1735</td><td>= Music Videos|Alternative|New Wave</td> </tr><tr><td class=r>1736</td><td>= Music Videos|Alternative|Punk</td> </tr><tr><td class=r>1737</td><td>= Music Videos|Blues|Acoustic Blues</td> </tr><tr><td class=r>1738</td><td>= Music Videos|Blues|Chicago Blues</td> </tr><tr><td class=r>1739</td><td>= Music Videos|Blues|Classic Blues</td> </tr><tr><td class=r>1740</td><td>= Music Videos|Blues|Contemporary Blues</td> </tr><tr><td class=r>1741</td><td>= Music Videos|Blues|Country Blues</td> </tr><tr><td class=r>1742</td><td>= Music Videos|Blues|Delta Blues</td> </tr><tr><td class=r>1743</td><td>= Music Videos|Blues|Electric Blues</td> </tr><tr><td class=r>1744</td><td>= Music Videos|Children&#39;s Music|Lullabies</td> </tr><tr><td class=r>1745</td><td>= Music Videos|Children&#39;s Music|Sing-Along</td> </tr><tr><td class=r>1746</td><td>= Music Videos|Children&#39;s Music|Stories</td> </tr><tr><td class=r>1747</td><td>= Music Videos|Christian &amp; Gospel|CCM</td> </tr><tr><td class=r>1748</td><td>= Music Videos|Christian &amp; Gospel|Christian Metal</td> </tr><tr><td class=r>1749</td><td>= Music Videos|Christian &amp; Gospel|Christian Pop</td> </tr><tr><td class=r>1750</td><td>= Music Videos|Christian &amp; Gospel|Christian Rap</td> </tr><tr><td class=r>1751</td><td>= Music Videos|Christian &amp; Gospel|Christian Rock</td> </tr><tr><td class=r>1752</td><td>= Music Videos|Christian &amp; Gospel|Classic Christian</td> </tr><tr><td class=r>1753</td><td>= Music Videos|Christian &amp; Gospel|Contemporary Gospel</td> </tr><tr><td class=r>1754</td><td>= Music Videos|Christian &amp; Gospel|Gospel</td> </tr><tr><td class=r>1755</td><td>= Music Videos|Christian &amp; Gospel|Praise &amp; Worship</td> </tr><tr><td class=r>1756</td><td>= Music Videos|Christian &amp; Gospel|Southern Gospel</td> </tr><tr><td class=r>1757</td><td>= Music Videos|Christian &amp; Gospel|Traditional Gospel</td> </tr><tr><td class=r>1758</td><td>= Music Videos|Classical|Avant-Garde</td> </tr><tr><td class=r>1759</td><td>= Music Videos|Classical|Baroque Era</td> </tr><tr><td class=r>1760</td><td>= Music Videos|Classical|Chamber Music</td> </tr><tr><td class=r>1761</td><td>= Music Videos|Classical|Chant</td> </tr><tr><td class=r>1762</td><td>= Music Videos|Classical|Choral</td> </tr><tr><td class=r>1763</td><td>= Music Videos|Classical|Classical Crossover</td> </tr><tr><td class=r>1764</td><td>= Music Videos|Classical|Early Music</td> </tr><tr><td class=r>1765</td><td>= Music Videos|Classical|Impressionist</td> </tr><tr><td class=r>1766</td><td>= Music Videos|Classical|Medieval Era</td> </tr><tr><td class=r>1767</td><td>= Music Videos|Classical|Minimalism</td> </tr><tr><td class=r>1768</td><td>= Music Videos|Classical|Modern Era</td> </tr><tr><td class=r>1769</td><td>= Music Videos|Classical|Orchestral</td> </tr><tr><td class=r>1770</td><td>= Music Videos|Classical|Renaissance</td> </tr><tr><td class=r>1771</td><td>= Music Videos|Classical|Romantic Era</td> </tr><tr><td class=r>1772</td><td>= Music Videos|Classical|Wedding Music</td> </tr><tr><td class=r>1773</td><td>= Music Videos|Comedy|Novelty</td> </tr><tr><td class=r>1774</td><td>= Music Videos|Comedy|Standup Comedy</td> </tr><tr><td class=r>1775</td><td>= Music Videos|Country|Alternative Country</td> </tr><tr><td class=r>1776</td><td>= Music Videos|Country|Americana</td> </tr><tr><td class=r>1777</td><td>= Music Videos|Country|Bluegrass</td> </tr><tr><td class=r>1778</td><td>= Music Videos|Country|Contemporary Bluegrass</td> </tr><tr><td class=r>1779</td><td>= Music Videos|Country|Contemporary Country</td> </tr><tr><td class=r>1780</td><td>= Music Videos|Country|Country Gospel</td> </tr><tr><td class=r>1781</td><td>= Music Videos|Country|Honky Tonk</td> </tr><tr><td class=r>1782</td><td>= Music Videos|Country|Outlaw Country</td> </tr><tr><td class=r>1783</td><td>= Music Videos|Country|Traditional Bluegrass</td> </tr><tr><td class=r>1784</td><td>= Music Videos|Country|Traditional Country</td> </tr><tr><td class=r>1785</td><td>= Music Videos|Country|Urban Cowboy</td> </tr><tr><td class=r>1786</td><td>= Music Videos|Dance|Breakbeat</td> </tr><tr><td class=r>1787</td><td>= Music Videos|Dance|Exercise</td> </tr><tr><td class=r>1788</td><td>= Music Videos|Dance|Garage</td> </tr><tr><td class=r>1789</td><td>= Music Videos|Dance|Hardcore</td> </tr><tr><td class=r>1790</td><td>= Music Videos|Dance|House</td> </tr><tr><td class=r>1791</td><td>= Music Videos|Dance|Jungle/Drum&#39;n&#39;bass</td> </tr><tr><td class=r>1792</td><td>= Music Videos|Dance|Techno</td> </tr><tr><td class=r>1793</td><td>= Music Videos|Dance|Trance</td> </tr><tr><td class=r>1794</td><td>= Music Videos|Easy Listening|Lounge</td> </tr><tr><td class=r>1795</td><td>= Music Videos|Easy Listening|Swing</td> </tr><tr><td class=r>1796</td><td>= Music Videos|Electronic|Ambient</td> </tr><tr><td class=r>1797</td><td>= Music Videos|Electronic|Downtempo</td> </tr><tr><td class=r>1798</td><td>= Music Videos|Electronic|Electronica</td> </tr><tr><td class=r>1799</td><td>= Music Videos|Electronic|IDM/Experimental</td> </tr><tr><td class=r>1800</td><td>= Music Videos|Electronic|Industrial</td> </tr><tr><td class=r>1801</td><td>= Music Videos|Hip-Hop/Rap|Alternative Rap</td> </tr><tr><td class=r>1802</td><td>= Music Videos|Hip-Hop/Rap|Dirty South</td> </tr><tr><td class=r>1803</td><td>= Music Videos|Hip-Hop/Rap|East Coast Rap</td> </tr><tr><td class=r>1804</td><td>= Music Videos|Hip-Hop/Rap|Gangsta Rap</td> </tr><tr><td class=r>1805</td><td>= Music Videos|Hip-Hop/Rap|Hardcore Rap</td> </tr><tr><td class=r>1806</td><td>= Music Videos|Hip-Hop/Rap|Hip-Hop</td> </tr><tr><td class=r>1807</td><td>= Music Videos|Hip-Hop/Rap|Latin Rap</td> </tr><tr><td class=r>1808</td><td>= Music Videos|Hip-Hop/Rap|Old School Rap</td> </tr><tr><td class=r>1809</td><td>= Music Videos|Hip-Hop/Rap|Rap</td> </tr><tr><td class=r>1810</td><td>= Music Videos|Hip-Hop/Rap|Underground Rap</td> </tr><tr><td class=r>1811</td><td>= Music Videos|Hip-Hop/Rap|West Coast Rap</td> </tr><tr><td class=r>1812</td><td>= Music Videos|Holiday|Chanukah</td> </tr><tr><td class=r>1813</td><td>= Music Videos|Holiday|Christmas</td> </tr><tr><td class=r>1814</td><td>= Music Videos|Holiday|Christmas: Children&#39;s</td> </tr><tr><td class=r>1815</td><td>= Music Videos|Holiday|Christmas: Classic</td> </tr><tr><td class=r>1816</td><td>= Music Videos|Holiday|Christmas: Classical</td> </tr><tr><td class=r>1817</td><td>= Music Videos|Holiday|Christmas: Jazz</td> </tr><tr><td class=r>1818</td><td>= Music Videos|Holiday|Christmas: Modern</td> </tr><tr><td class=r>1819</td><td>= Music Videos|Holiday|Christmas: Pop</td> </tr><tr><td class=r>1820</td><td>= Music Videos|Holiday|Christmas: R&amp;B</td> </tr><tr><td class=r>1821</td><td>= Music Videos|Holiday|Christmas: Religious</td> </tr><tr><td class=r>1822</td><td>= Music Videos|Holiday|Christmas: Rock</td> </tr><tr><td class=r>1823</td><td>= Music Videos|Holiday|Easter</td> </tr><tr><td class=r>1824</td><td>= Music Videos|Holiday|Halloween</td> </tr><tr><td class=r>1825</td><td>= Music Videos|Holiday|Thanksgiving</td> </tr><tr><td class=r>1826</td><td>= Music Videos|Jazz|Avant-Garde Jazz</td> </tr><tr><td class=r>1828</td><td>= Music Videos|Jazz|Bop</td> </tr><tr><td class=r>1829</td><td>= Music Videos|Jazz|Contemporary Jazz</td> </tr><tr><td class=r>1830</td><td>= Music Videos|Jazz|Cool</td> </tr><tr><td class=r>1831</td><td>= Music Videos|Jazz|Crossover Jazz</td> </tr><tr><td class=r>1832</td><td>= Music Videos|Jazz|Dixieland</td> </tr><tr><td class=r>1833</td><td>= Music Videos|Jazz|Fusion</td> </tr><tr><td class=r>1834</td><td>= Music Videos|Jazz|Hard Bop</td> </tr><tr><td class=r>1835</td><td>= Music Videos|Jazz|Latin Jazz</td> </tr><tr><td class=r>1836</td><td>= Music Videos|Jazz|Mainstream Jazz</td> </tr><tr><td class=r>1837</td><td>= Music Videos|Jazz|Ragtime</td> </tr><tr><td class=r>1838</td><td>= Music Videos|Jazz|Smooth Jazz</td> </tr><tr><td class=r>1839</td><td>= Music Videos|Jazz|Trad Jazz</td> </tr><tr><td class=r>1840</td><td>= Music Videos|Latin|Alternative &amp; Rock in Spanish</td> </tr><tr><td class=r>1841</td><td>= Music Videos|Latin|Baladas y Boleros</td> </tr><tr><td class=r>1842</td><td>= Music Videos|Latin|Contemporary Latin</td> </tr><tr><td class=r>1843</td><td>= Music Videos|Latin|Latin Jazz</td> </tr><tr><td class=r>1844</td><td>= Music Videos|Latin|Latin Urban</td> </tr><tr><td class=r>1845</td><td>= Music Videos|Latin|Pop in Spanish</td> </tr><tr><td class=r>1846</td><td>= Music Videos|Latin|Raices</td> </tr><tr><td class=r>1847</td><td>= Music Videos|Latin|Regional Mexicano</td> </tr><tr><td class=r>1848</td><td>= Music Videos|Latin|Salsa y Tropical</td> </tr><tr><td class=r>1849</td><td>= Music Videos|New Age|Healing</td> </tr><tr><td class=r>1850</td><td>= Music Videos|New Age|Meditation</td> </tr><tr><td class=r>1851</td><td>= Music Videos|New Age|Nature</td> </tr><tr><td class=r>1852</td><td>= Music Videos|New Age|Relaxation</td> </tr><tr><td class=r>1853</td><td>= Music Videos|New Age|Travel</td> </tr><tr><td class=r>1854</td><td>= Music Videos|Pop|Adult Contemporary</td> </tr><tr><td class=r>1855</td><td>= Music Videos|Pop|Britpop</td> </tr><tr><td class=r>1856</td><td>= Music Videos|Pop|Pop/Rock</td> </tr><tr><td class=r>1857</td><td>= Music Videos|Pop|Soft Rock</td> </tr><tr><td class=r>1858</td><td>= Music Videos|Pop|Teen Pop</td> </tr><tr><td class=r>1859</td><td>= Music Videos|R&amp;B/Soul|Contemporary R&amp;B</td> </tr><tr><td class=r>1860</td><td>= Music Videos|R&amp;B/Soul|Disco</td> </tr><tr><td class=r>1861</td><td>= Music Videos|R&amp;B/Soul|Doo Wop</td> </tr><tr><td class=r>1862</td><td>= Music Videos|R&amp;B/Soul|Funk</td> </tr><tr><td class=r>1863</td><td>= Music Videos|R&amp;B/Soul|Motown</td> </tr><tr><td class=r>1864</td><td>= Music Videos|R&amp;B/Soul|Neo-Soul</td> </tr><tr><td class=r>1865</td><td>= Music Videos|R&amp;B/Soul|Soul</td> </tr><tr><td class=r>1866</td><td>= Music Videos|Reggae|Modern Dancehall</td> </tr><tr><td class=r>1867</td><td>= Music Videos|Reggae|Dub</td> </tr><tr><td class=r>1868</td><td>= Music Videos|Reggae|Roots Reggae</td> </tr><tr><td class=r>1869</td><td>= Music Videos|Reggae|Ska</td> </tr><tr><td class=r>1870</td><td>= Music Videos|Rock|Adult Alternative</td> </tr><tr><td class=r>1871</td><td>= Music Videos|Rock|American Trad Rock</td> </tr><tr><td class=r>1872</td><td>= Music Videos|Rock|Arena Rock</td> </tr><tr><td class=r>1873</td><td>= Music Videos|Rock|Blues-Rock</td> </tr><tr><td class=r>1874</td><td>= Music Videos|Rock|British Invasion</td> </tr><tr><td class=r>1875</td><td>= Music Videos|Rock|Death Metal/Black Metal</td> </tr><tr><td class=r>1876</td><td>= Music Videos|Rock|Glam Rock</td> </tr><tr><td class=r>1877</td><td>= Music Videos|Rock|Hair Metal</td> </tr><tr><td class=r>1878</td><td>= Music Videos|Rock|Hard Rock</td> </tr><tr><td class=r>1879</td><td>= Music Videos|Rock|Jam Bands</td> </tr><tr><td class=r>1880</td><td>= Music Videos|Rock|Prog-Rock/Art Rock</td> </tr><tr><td class=r>1881</td><td>= Music Videos|Rock|Psychedelic</td> </tr><tr><td class=r>1882</td><td>= Music Videos|Rock|Rock &amp; Roll</td> </tr><tr><td class=r>1883</td><td>= Music Videos|Rock|Rockabilly</td> </tr><tr><td class=r>1884</td><td>= Music Videos|Rock|Roots Rock</td> </tr><tr><td class=r>1885</td><td>= Music Videos|Rock|Singer/Songwriter</td> </tr><tr><td class=r>1886</td><td>= Music Videos|Rock|Southern Rock</td> </tr><tr><td class=r>1887</td><td>= Music Videos|Rock|Surf</td> </tr><tr><td class=r>1888</td><td>= Music Videos|Rock|Tex-Mex</td> </tr><tr><td class=r>1889</td><td>= Music Videos|Singer/Songwriter|Alternative Folk</td> </tr><tr><td class=r>1890</td><td>= Music Videos|Singer/Songwriter|Contemporary Folk</td> </tr><tr><td class=r>1891</td><td>= Music Videos|Singer/Songwriter|Contemporary Singer/Songwriter</td> </tr><tr><td class=r>1892</td><td>= Music Videos|Singer/Songwriter|Folk-Rock</td> </tr><tr><td class=r>1893</td><td>= Music Videos|Singer/Songwriter|New Acoustic</td> </tr><tr><td class=r>1894</td><td>= Music Videos|Singer/Songwriter|Traditional Folk</td> </tr><tr><td class=r>1895</td><td>= Music Videos|Soundtrack|Foreign Cinema</td> </tr><tr><td class=r>1896</td><td>= Music Videos|Soundtrack|Musicals</td> </tr><tr><td class=r>1897</td><td>= Music Videos|Soundtrack|Original Score</td> </tr><tr><td class=r>1898</td><td>= Music Videos|Soundtrack|Soundtrack</td> </tr><tr><td class=r>1899</td><td>= Music Videos|Soundtrack|TV Soundtrack</td> </tr><tr><td class=r>1900</td><td>= Music Videos|Vocal|Standards</td> </tr><tr><td class=r>1901</td><td>= Music Videos|Vocal|Traditional Pop</td> </tr><tr><td class=r>1902</td><td>= Music Videos|Jazz|Vocal Jazz</td> </tr><tr><td class=r>1903</td><td>= Music Videos|Vocal|Vocal Pop</td> </tr><tr><td class=r>1904</td><td>= Music Videos|World|Africa</td> </tr><tr><td class=r>1905</td><td>= Music Videos|World|Afro-Beat</td> </tr><tr><td class=r>1906</td><td>= Music Videos|World|Afro-Pop</td> </tr><tr><td class=r>1907</td><td>= Music Videos|World|Asia</td> </tr><tr><td class=r>1908</td><td>= Music Videos|World|Australia</td> </tr><tr><td class=r>1909</td><td>= Music Videos|World|Cajun</td> </tr><tr><td class=r>1910</td><td>= Music Videos|World|Caribbean</td> </tr><tr><td class=r>1911</td><td>= Music Videos|World|Celtic</td> </tr><tr><td class=r>1912</td><td>= Music Videos|World|Celtic Folk</td> </tr><tr><td class=r>1913</td><td>= Music Videos|World|Contemporary Celtic</td> </tr><tr><td class=r>1914</td><td>= Music Videos|World|Europe</td> </tr><tr><td class=r>1915</td><td>= Music Videos|World|France</td> </tr><tr><td class=r>1916</td><td>= Music Videos|World|Hawaii</td> </tr><tr><td class=r>1917</td><td>= Music Videos|World|Japan</td> </tr><tr><td class=r>1918</td><td>= Music Videos|World|Klezmer</td> </tr><tr><td class=r>1919</td><td>= Music Videos|World|North America</td> </tr><tr><td class=r>1920</td><td>= Music Videos|World|Polka</td> </tr><tr><td class=r>1921</td><td>= Music Videos|World|South Africa</td> </tr><tr><td class=r>1922</td><td>= Music Videos|World|South America</td> </tr><tr><td class=r>1923</td><td>= Music Videos|World|Traditional Celtic</td> </tr><tr><td class=r>1924</td><td>= Music Videos|World|Worldbeat</td> </tr><tr><td class=r>1925</td><td>= Music Videos|World|Zydeco</td> </tr><tr><td class=r>1926</td><td>= Music Videos|Christian &amp; Gospel</td> </tr><tr><td class=r>1928</td><td>= Music Videos|Classical|Art Song</td> </tr><tr><td class=r>1929</td><td>= Music Videos|Classical|Brass &amp; Woodwinds</td> </tr><tr><td class=r>1930</td><td>= Music Videos|Classical|Solo Instrumental</td> </tr><tr><td class=r>1931</td><td>= Music Videos|Classical|Contemporary Era</td> </tr><tr><td class=r>1932</td><td>= Music Videos|Classical|Oratorio</td> </tr><tr><td class=r>1933</td><td>= Music Videos|Classical|Cantata</td> </tr><tr><td class=r>1934</td><td>= Music Videos|Classical|Electronic</td> </tr><tr><td class=r>1935</td><td>= Music Videos|Classical|Sacred</td> </tr><tr><td class=r>1936</td><td>= Music Videos|Classical|Guitar</td> </tr><tr><td class=r>1938</td><td>= Music Videos|Classical|Violin</td> </tr><tr><td class=r>1939</td><td>= Music Videos|Classical|Cello</td> </tr><tr><td class=r>1940</td><td>= Music Videos|Classical|Percussion</td> </tr><tr><td class=r>1941</td><td>= Music Videos|Electronic|Dubstep</td> </tr><tr><td class=r>1942</td><td>= Music Videos|Electronic|Bass</td> </tr><tr><td class=r>1943</td><td>= Music Videos|Hip-Hop/Rap|UK Hip-Hop</td> </tr><tr><td class=r>1944</td><td>= Music Videos|Reggae|Lovers Rock</td> </tr><tr><td class=r>1945</td><td>= Music Videos|Alternative|EMO</td> </tr><tr><td class=r>1946</td><td>= Music Videos|Alternative|Pop Punk</td> </tr><tr><td class=r>1947</td><td>= Music Videos|Alternative|Indie Pop</td> </tr><tr><td class=r>1948</td><td>= Music Videos|New Age|Yoga</td> </tr><tr><td class=r>1949</td><td>= Music Videos|Pop|Tribute</td> </tr><tr><td class=r>4000</td><td>= TV Shows|Comedy</td> </tr><tr><td class=r>4001</td><td>= TV Shows|Drama</td> </tr><tr><td class=r>4002</td><td>= TV Shows|Animation</td> </tr><tr><td class=r>4003</td><td>= TV Shows|Action &amp; Adventure</td> </tr><tr><td class=r>4004</td><td>= TV Shows|Classic</td> </tr><tr><td class=r>4005</td><td>= TV Shows|Kids</td> </tr><tr><td class=r>4006</td><td>= TV Shows|Nonfiction</td> </tr><tr><td class=r>4007</td><td>= TV Shows|Reality TV</td> </tr><tr><td class=r>4008</td><td>= TV Shows|Sci-Fi &amp; Fantasy</td> </tr><tr><td class=r>4009</td><td>= TV Shows|Sports</td> </tr><tr><td class=r>4010</td><td>= TV Shows|Teens</td> </tr><tr><td class=r>4011</td><td>= TV Shows|Latino TV</td> </tr><tr><td class=r>4401</td><td>= Movies|Action &amp; Adventure</td> </tr><tr><td class=r>4402</td><td>= Movies|Anime</td> </tr><tr><td class=r>4403</td><td>= Movies|Classics</td> </tr><tr><td class=r>4404</td><td>= Movies|Comedy</td> </tr><tr><td class=r>4405</td><td>= Movies|Documentary</td> </tr><tr><td class=r>4406</td><td>= Movies|Drama</td> </tr><tr><td class=r>4407</td><td>= Movies|Foreign</td> </tr><tr><td class=r>4408</td><td>= Movies|Horror</td> </tr><tr><td class=r>4409</td><td>= Movies|Independent</td> </tr><tr><td class=r>4410</td><td>= Movies|Kids &amp; Family</td> </tr><tr><td class=r>4411</td><td>= Movies|Musicals</td> </tr><tr><td class=r>4412</td><td>= Movies|Romance</td> </tr><tr><td class=r>4413</td><td>= Movies|Sci-Fi &amp; Fantasy</td> </tr><tr><td class=r>4414</td><td>= Movies|Short Films</td> </tr><tr><td class=r>4415</td><td>= Movies|Special Interest</td> </tr><tr><td class=r>4416</td><td>= Movies|Thriller</td> </tr><tr><td class=r>4417</td><td>= Movies|Sports</td> </tr><tr><td class=r>4418</td><td>= Movies|Western</td> </tr><tr><td class=r>4419</td><td>= Movies|Urban</td> </tr><tr><td class=r>4420</td><td>= Movies|Holiday</td> </tr><tr><td class=r>4421</td><td>= Movies|Made for TV</td> </tr><tr><td class=r>4422</td><td>= Movies|Concert Films</td> </tr><tr><td class=r>4423</td><td>= Movies|Music Documentaries</td> </tr><tr><td class=r>4424</td><td>= Movies|Music Feature Films</td> </tr><tr><td class=r>4425</td><td>= Movies|Japanese Cinema</td> </tr><tr><td class=r>4426</td><td>= Movies|Jidaigeki</td> </tr><tr><td class=r>4427</td><td>= Movies|Tokusatsu</td> </tr><tr><td class=r>4428</td><td>= Movies|Korean Cinema</td> </tr><tr><td class=r>4429</td><td>= Movies|Russian</td> </tr><tr><td class=r>4430</td><td>= Movies|Turkish</td> </tr><tr><td class=r>4431</td><td>= Movies|Bollywood</td> </tr><tr><td class=r>4432</td><td>= Movies|Regional Indian</td> </tr><tr><td class=r>4433</td><td>= Movies|Middle Eastern</td> </tr><tr><td class=r>4434</td><td>= Movies|African</td> </tr><tr><td class=r>6000</td><td>= App Store|Business</td> </tr><tr><td class=r>6001</td><td>= App Store|Weather</td> </tr><tr><td class=r>6002</td><td>= App Store|Utilities</td> </tr><tr><td class=r>6003</td><td>= App Store|Travel</td> </tr><tr><td class=r>6004</td><td>= App Store|Sports</td> </tr><tr><td class=r>6005</td><td>= App Store|Social Networking</td> </tr><tr><td class=r>6006</td><td>= App Store|Reference</td> </tr><tr><td class=r>6007</td><td>= App Store|Productivity</td> </tr><tr><td class=r>6008</td><td>= App Store|Photo &amp; Video</td> </tr><tr><td class=r>6009</td><td>= App Store|News</td> </tr><tr><td class=r>6010</td><td>= App Store|Navigation</td> </tr><tr><td class=r>6011</td><td>= App Store|Music</td> </tr><tr><td class=r>6012</td><td>= App Store|Lifestyle</td> </tr><tr><td class=r>6013</td><td>= App Store|Health &amp; Fitness</td> </tr><tr><td class=r>6014</td><td>= App Store|Games</td> </tr><tr><td class=r>6015</td><td>= App Store|Finance</td> </tr><tr><td class=r>6016</td><td>= App Store|Entertainment</td> </tr><tr><td class=r>6017</td><td>= App Store|Education</td> </tr><tr><td class=r>6018</td><td>= App Store|Books</td> </tr><tr><td class=r>6020</td><td>= App Store|Medical</td> </tr><tr><td class=r>6021</td><td>= App Store|Newsstand</td> </tr><tr><td class=r>6022</td><td>= App Store|Catalogs</td> </tr><tr><td class=r>6023</td><td>= App Store|Food &amp; Drink</td> </tr><tr><td class=r>7001</td><td>= App Store|Games|Action</td> </tr><tr><td class=r>7002</td><td>= App Store|Games|Adventure</td> </tr><tr><td class=r>7003</td><td>= App Store|Games|Arcade</td> </tr><tr><td class=r>7004</td><td>= App Store|Games|Board</td> </tr><tr><td class=r>7005</td><td>= App Store|Games|Card</td> </tr><tr><td class=r>7006</td><td>= App Store|Games|Casino</td> </tr><tr><td class=r>7007</td><td>= App Store|Games|Dice</td> </tr><tr><td class=r>7008</td><td>= App Store|Games|Educational</td> </tr><tr><td class=r>7009</td><td>= App Store|Games|Family</td> </tr><tr><td class=r>7011</td><td>= App Store|Games|Music</td> </tr><tr><td class=r>7012</td><td>= App Store|Games|Puzzle</td> </tr><tr><td class=r>7013</td><td>= App Store|Games|Racing</td> </tr><tr><td class=r>7014</td><td>= App Store|Games|Role Playing</td> </tr><tr><td class=r>7015</td><td>= App Store|Games|Simulation</td> </tr><tr><td class=r>7016</td><td>= App Store|Games|Sports</td> </tr><tr><td class=r>7017</td><td>= App Store|Games|Strategy</td> </tr><tr><td class=r>7018</td><td>= App Store|Games|Trivia</td> </tr><tr><td class=r>7019</td><td>= App Store|Games|Word</td> </tr><tr><td class=r>8001</td><td>= Tones|Ringtones|Alternative</td> </tr><tr><td class=r>8002</td><td>= Tones|Ringtones|Blues</td> </tr><tr><td class=r>8003</td><td>= Tones|Ringtones|Children&#39;s Music</td> </tr><tr><td class=r>8004</td><td>= Tones|Ringtones|Classical</td> </tr><tr><td class=r>8005</td><td>= Tones|Ringtones|Comedy</td> </tr><tr><td class=r>8006</td><td>= Tones|Ringtones|Country</td> </tr><tr><td class=r>8007</td><td>= Tones|Ringtones|Dance</td> </tr><tr><td class=r>8008</td><td>= Tones|Ringtones|Electronic</td> </tr><tr><td class=r>8009</td><td>= Tones|Ringtones|Enka</td> </tr><tr><td class=r>8010</td><td>= Tones|Ringtones|French Pop</td> </tr><tr><td class=r>8011</td><td>= Tones|Ringtones|German Folk</td> </tr><tr><td class=r>8012</td><td>= Tones|Ringtones|German Pop</td> </tr><tr><td class=r>8013</td><td>= Tones|Ringtones|Hip-Hop/Rap</td> </tr><tr><td class=r>8014</td><td>= Tones|Ringtones|Holiday</td> </tr><tr><td class=r>8015</td><td>= Tones|Ringtones|Inspirational</td> </tr><tr><td class=r>8016</td><td>= Tones|Ringtones|J-Pop</td> </tr><tr><td class=r>8017</td><td>= Tones|Ringtones|Jazz</td> </tr><tr><td class=r>8018</td><td>= Tones|Ringtones|Kayokyoku</td> </tr><tr><td class=r>8019</td><td>= Tones|Ringtones|Latin</td> </tr><tr><td class=r>8020</td><td>= Tones|Ringtones|New Age</td> </tr><tr><td class=r>8021</td><td>= Tones|Ringtones|Classical|Opera</td> </tr><tr><td class=r>8022</td><td>= Tones|Ringtones|Pop</td> </tr><tr><td class=r>8023</td><td>= Tones|Ringtones|R&amp;B/Soul</td> </tr><tr><td class=r>8024</td><td>= Tones|Ringtones|Reggae</td> </tr><tr><td class=r>8025</td><td>= Tones|Ringtones|Rock</td> </tr><tr><td class=r>8026</td><td>= Tones|Ringtones|Singer/Songwriter</td> </tr><tr><td class=r>8027</td><td>= Tones|Ringtones|Soundtrack</td> </tr><tr><td class=r>8028</td><td>= Tones|Ringtones|Spoken Word</td> </tr><tr><td class=r>8029</td><td>= Tones|Ringtones|Vocal</td> </tr><tr><td class=r>8030</td><td>= Tones|Ringtones|World</td> </tr><tr><td class=r>8050</td><td>= Tones|Alert Tones|Sound Effects</td> </tr><tr><td class=r>8051</td><td>= Tones|Alert Tones|Dialogue</td> </tr><tr><td class=r>8052</td><td>= Tones|Alert Tones|Music</td> </tr><tr><td class=r>8053</td><td>= Tones|Ringtones</td> </tr><tr><td class=r>8054</td><td>= Tones|Alert Tones</td> </tr><tr><td class=r>8055</td><td>= Tones|Ringtones|Alternative|Chinese Alt</td> </tr><tr><td class=r>8056</td><td>= Tones|Ringtones|Alternative|College Rock</td> </tr><tr><td class=r>8057</td><td>= Tones|Ringtones|Alternative|Goth Rock</td> </tr><tr><td class=r>8058</td><td>= Tones|Ringtones|Alternative|Grunge</td> </tr><tr><td class=r>8059</td><td>= Tones|Ringtones|Alternative|Indie Rock</td> </tr><tr><td class=r>8060</td><td>= Tones|Ringtones|Alternative|Korean Indie</td> </tr><tr><td class=r>8061</td><td>= Tones|Ringtones|Alternative|New Wave</td> </tr><tr><td class=r>8062</td><td>= Tones|Ringtones|Alternative|Punk</td> </tr><tr><td class=r>8063</td><td>= Tones|Ringtones|Anime</td> </tr><tr><td class=r>8064</td><td>= Tones|Ringtones|Arabic</td> </tr><tr><td class=r>8065</td><td>= Tones|Ringtones|Arabic|Arabic Pop</td> </tr><tr><td class=r>8066</td><td>= Tones|Ringtones|Arabic|Islamic</td> </tr><tr><td class=r>8067</td><td>= Tones|Ringtones|Arabic|Khaleeji</td> </tr><tr><td class=r>8068</td><td>= Tones|Ringtones|Arabic|North African</td> </tr><tr><td class=r>8069</td><td>= Tones|Ringtones|Blues|Acoustic Blues</td> </tr><tr><td class=r>8070</td><td>= Tones|Ringtones|Blues|Chicago Blues</td> </tr><tr><td class=r>8071</td><td>= Tones|Ringtones|Blues|Classic Blues</td> </tr><tr><td class=r>8072</td><td>= Tones|Ringtones|Blues|Contemporary Blues</td> </tr><tr><td class=r>8073</td><td>= Tones|Ringtones|Blues|Country Blues</td> </tr><tr><td class=r>8074</td><td>= Tones|Ringtones|Blues|Delta Blues</td> </tr><tr><td class=r>8075</td><td>= Tones|Ringtones|Blues|Electric Blues</td> </tr><tr><td class=r>8076</td><td>= Tones|Ringtones|Brazilian</td> </tr><tr><td class=r>8077</td><td>= Tones|Ringtones|Brazilian|Axe</td> </tr><tr><td class=r>8078</td><td>= Tones|Ringtones|Brazilian|Baile Funk</td> </tr><tr><td class=r>8079</td><td>= Tones|Ringtones|Brazilian|Bossa Nova</td> </tr><tr><td class=r>8080</td><td>= Tones|Ringtones|Brazilian|Choro</td> </tr><tr><td class=r>8081</td><td>= Tones|Ringtones|Brazilian|Forro</td> </tr><tr><td class=r>8082</td><td>= Tones|Ringtones|Brazilian|Frevo</td> </tr><tr><td class=r>8083</td><td>= Tones|Ringtones|Brazilian|MPB</td> </tr><tr><td class=r>8084</td><td>= Tones|Ringtones|Brazilian|Pagode</td> </tr><tr><td class=r>8085</td><td>= Tones|Ringtones|Brazilian|Samba</td> </tr><tr><td class=r>8086</td><td>= Tones|Ringtones|Brazilian|Sertanejo</td> </tr><tr><td class=r>8087</td><td>= Tones|Ringtones|Children&#39;s Music|Lullabies</td> </tr><tr><td class=r>8088</td><td>= Tones|Ringtones|Children&#39;s Music|Sing-Along</td> </tr><tr><td class=r>8089</td><td>= Tones|Ringtones|Children&#39;s Music|Stories</td> </tr><tr><td class=r>8090</td><td>= Tones|Ringtones|Chinese</td> </tr><tr><td class=r>8091</td><td>= Tones|Ringtones|Chinese|Chinese Classical</td> </tr><tr><td class=r>8092</td><td>= Tones|Ringtones|Chinese|Chinese Flute</td> </tr><tr><td class=r>8093</td><td>= Tones|Ringtones|Chinese|Chinese Opera</td> </tr><tr><td class=r>8094</td><td>= Tones|Ringtones|Chinese|Chinese Orchestral</td> </tr><tr><td class=r>8095</td><td>= Tones|Ringtones|Chinese|Chinese Regional Folk</td> </tr><tr><td class=r>8096</td><td>= Tones|Ringtones|Chinese|Chinese Strings</td> </tr><tr><td class=r>8097</td><td>= Tones|Ringtones|Chinese|Taiwanese Folk</td> </tr><tr><td class=r>8098</td><td>= Tones|Ringtones|Chinese|Tibetan Native Music</td> </tr><tr><td class=r>8099</td><td>= Tones|Ringtones|Christian &amp; Gospel</td> </tr><tr><td class=r>8100</td><td>= Tones|Ringtones|Christian &amp; Gospel|CCM</td> </tr><tr><td class=r>8101</td><td>= Tones|Ringtones|Christian &amp; Gospel|Christian Metal</td> </tr><tr><td class=r>8102</td><td>= Tones|Ringtones|Christian &amp; Gospel|Christian Pop</td> </tr><tr><td class=r>8103</td><td>= Tones|Ringtones|Christian &amp; Gospel|Christian Rap</td> </tr><tr><td class=r>8104</td><td>= Tones|Ringtones|Christian &amp; Gospel|Christian Rock</td> </tr><tr><td class=r>8105</td><td>= Tones|Ringtones|Christian &amp; Gospel|Classic Christian</td> </tr><tr><td class=r>8106</td><td>= Tones|Ringtones|Christian &amp; Gospel|Contemporary Gospel</td> </tr><tr><td class=r>8107</td><td>= Tones|Ringtones|Christian &amp; Gospel|Gospel</td> </tr><tr><td class=r>8108</td><td>= Tones|Ringtones|Christian &amp; Gospel|Praise &amp; Worship</td> </tr><tr><td class=r>8109</td><td>= Tones|Ringtones|Christian &amp; Gospel|Southern Gospel</td> </tr><tr><td class=r>8110</td><td>= Tones|Ringtones|Christian &amp; Gospel|Traditional Gospel</td> </tr><tr><td class=r>8111</td><td>= Tones|Ringtones|Classical|Avant-Garde</td> </tr><tr><td class=r>8112</td><td>= Tones|Ringtones|Classical|Baroque Era</td> </tr><tr><td class=r>8113</td><td>= Tones|Ringtones|Classical|Chamber Music</td> </tr><tr><td class=r>8114</td><td>= Tones|Ringtones|Classical|Chant</td> </tr><tr><td class=r>8115</td><td>= Tones|Ringtones|Classical|Choral</td> </tr><tr><td class=r>8116</td><td>= Tones|Ringtones|Classical|Classical Crossover</td> </tr><tr><td class=r>8117</td><td>= Tones|Ringtones|Classical|Early Music</td> </tr><tr><td class=r>8118</td><td>= Tones|Ringtones|Classical|High Classical</td> </tr><tr><td class=r>8119</td><td>= Tones|Ringtones|Classical|Impressionist</td> </tr><tr><td class=r>8120</td><td>= Tones|Ringtones|Classical|Medieval Era</td> </tr><tr><td class=r>8121</td><td>= Tones|Ringtones|Classical|Minimalism</td> </tr><tr><td class=r>8122</td><td>= Tones|Ringtones|Classical|Modern Era</td> </tr><tr><td class=r>8123</td><td>= Tones|Ringtones|Classical|Orchestral</td> </tr><tr><td class=r>8124</td><td>= Tones|Ringtones|Classical|Renaissance</td> </tr><tr><td class=r>8125</td><td>= Tones|Ringtones|Classical|Romantic Era</td> </tr><tr><td class=r>8126</td><td>= Tones|Ringtones|Classical|Wedding Music</td> </tr><tr><td class=r>8127</td><td>= Tones|Ringtones|Comedy|Novelty</td> </tr><tr><td class=r>8128</td><td>= Tones|Ringtones|Comedy|Standup Comedy</td> </tr><tr><td class=r>8129</td><td>= Tones|Ringtones|Country|Alternative Country</td> </tr><tr><td class=r>8130</td><td>= Tones|Ringtones|Country|Americana</td> </tr><tr><td class=r>8131</td><td>= Tones|Ringtones|Country|Bluegrass</td> </tr><tr><td class=r>8132</td><td>= Tones|Ringtones|Country|Contemporary Bluegrass</td> </tr><tr><td class=r>8133</td><td>= Tones|Ringtones|Country|Contemporary Country</td> </tr><tr><td class=r>8134</td><td>= Tones|Ringtones|Country|Country Gospel</td> </tr><tr><td class=r>8135</td><td>= Tones|Ringtones|Country|Honky Tonk</td> </tr><tr><td class=r>8136</td><td>= Tones|Ringtones|Country|Outlaw Country</td> </tr><tr><td class=r>8137</td><td>= Tones|Ringtones|Country|Thai Country</td> </tr><tr><td class=r>8138</td><td>= Tones|Ringtones|Country|Traditional Bluegrass</td> </tr><tr><td class=r>8139</td><td>= Tones|Ringtones|Country|Traditional Country</td> </tr><tr><td class=r>8140</td><td>= Tones|Ringtones|Country|Urban Cowboy</td> </tr><tr><td class=r>8141</td><td>= Tones|Ringtones|Dance|Breakbeat</td> </tr><tr><td class=r>8142</td><td>= Tones|Ringtones|Dance|Exercise</td> </tr><tr><td class=r>8143</td><td>= Tones|Ringtones|Dance|Garage</td> </tr><tr><td class=r>8144</td><td>= Tones|Ringtones|Dance|Hardcore</td> </tr><tr><td class=r>8145</td><td>= Tones|Ringtones|Dance|House</td> </tr><tr><td class=r>8146</td><td>= Tones|Ringtones|Dance|Jungle/Drum&#39;n&#39;bass</td> </tr><tr><td class=r>8147</td><td>= Tones|Ringtones|Dance|Techno</td> </tr><tr><td class=r>8148</td><td>= Tones|Ringtones|Dance|Trance</td> </tr><tr><td class=r>8149</td><td>= Tones|Ringtones|Disney</td> </tr><tr><td class=r>8150</td><td>= Tones|Ringtones|Easy Listening</td> </tr><tr><td class=r>8151</td><td>= Tones|Ringtones|Easy Listening|Lounge</td> </tr><tr><td class=r>8152</td><td>= Tones|Ringtones|Easy Listening|Swing</td> </tr><tr><td class=r>8153</td><td>= Tones|Ringtones|Electronic|Ambient</td> </tr><tr><td class=r>8154</td><td>= Tones|Ringtones|Electronic|Downtempo</td> </tr><tr><td class=r>8155</td><td>= Tones|Ringtones|Electronic|Electronica</td> </tr><tr><td class=r>8156</td><td>= Tones|Ringtones|Electronic|IDM/Experimental</td> </tr><tr><td class=r>8157</td><td>= Tones|Ringtones|Electronic|Industrial</td> </tr><tr><td class=r>8158</td><td>= Tones|Ringtones|Fitness &amp; Workout</td> </tr><tr><td class=r>8159</td><td>= Tones|Ringtones|Folk</td> </tr><tr><td class=r>8160</td><td>= Tones|Ringtones|Hip-Hop/Rap|Alternative Rap</td> </tr><tr><td class=r>8161</td><td>= Tones|Ringtones|Hip-Hop/Rap|Chinese Hip-Hop</td> </tr><tr><td class=r>8162</td><td>= Tones|Ringtones|Hip-Hop/Rap|Dirty South</td> </tr><tr><td class=r>8163</td><td>= Tones|Ringtones|Hip-Hop/Rap|East Coast Rap</td> </tr><tr><td class=r>8164</td><td>= Tones|Ringtones|Hip-Hop/Rap|Gangsta Rap</td> </tr><tr><td class=r>8165</td><td>= Tones|Ringtones|Hip-Hop/Rap|Hardcore Rap</td> </tr><tr><td class=r>8166</td><td>= Tones|Ringtones|Hip-Hop/Rap|Hip-Hop</td> </tr><tr><td class=r>8167</td><td>= Tones|Ringtones|Hip-Hop/Rap|Korean Hip-Hop</td> </tr><tr><td class=r>8168</td><td>= Tones|Ringtones|Hip-Hop/Rap|Latin Rap</td> </tr><tr><td class=r>8169</td><td>= Tones|Ringtones|Hip-Hop/Rap|Old School Rap</td> </tr><tr><td class=r>8170</td><td>= Tones|Ringtones|Hip-Hop/Rap|Rap</td> </tr><tr><td class=r>8171</td><td>= Tones|Ringtones|Hip-Hop/Rap|Underground Rap</td> </tr><tr><td class=r>8172</td><td>= Tones|Ringtones|Hip-Hop/Rap|West Coast Rap</td> </tr><tr><td class=r>8173</td><td>= Tones|Ringtones|Holiday|Chanukah</td> </tr><tr><td class=r>8174</td><td>= Tones|Ringtones|Holiday|Christmas</td> </tr><tr><td class=r>8175</td><td>= Tones|Ringtones|Holiday|Christmas: Children&#39;s</td> </tr><tr><td class=r>8176</td><td>= Tones|Ringtones|Holiday|Christmas: Classic</td> </tr><tr><td class=r>8177</td><td>= Tones|Ringtones|Holiday|Christmas: Classical</td> </tr><tr><td class=r>8178</td><td>= Tones|Ringtones|Holiday|Christmas: Jazz</td> </tr><tr><td class=r>8179</td><td>= Tones|Ringtones|Holiday|Christmas: Modern</td> </tr><tr><td class=r>8180</td><td>= Tones|Ringtones|Holiday|Christmas: Pop</td> </tr><tr><td class=r>8181</td><td>= Tones|Ringtones|Holiday|Christmas: R&amp;B</td> </tr><tr><td class=r>8182</td><td>= Tones|Ringtones|Holiday|Christmas: Religious</td> </tr><tr><td class=r>8183</td><td>= Tones|Ringtones|Holiday|Christmas: Rock</td> </tr><tr><td class=r>8184</td><td>= Tones|Ringtones|Holiday|Easter</td> </tr><tr><td class=r>8185</td><td>= Tones|Ringtones|Holiday|Halloween</td> </tr><tr><td class=r>8186</td><td>= Tones|Ringtones|Holiday|Thanksgiving</td> </tr><tr><td class=r>8187</td><td>= Tones|Ringtones|Indian</td> </tr><tr><td class=r>8188</td><td>= Tones|Ringtones|Indian|Bollywood</td> </tr><tr><td class=r>8189</td><td>= Tones|Ringtones|Indian|Devotional &amp; Spiritual</td> </tr><tr><td class=r>8190</td><td>= Tones|Ringtones|Indian|Ghazals</td> </tr><tr><td class=r>8191</td><td>= Tones|Ringtones|Indian|Indian Classical</td> </tr><tr><td class=r>8192</td><td>= Tones|Ringtones|Indian|Indian Folk</td> </tr><tr><td class=r>8193</td><td>= Tones|Ringtones|Indian|Indian Pop</td> </tr><tr><td class=r>8194</td><td>= Tones|Ringtones|Indian|Regional Indian</td> </tr><tr><td class=r>8195</td><td>= Tones|Ringtones|Indian|Sufi</td> </tr><tr><td class=r>8196</td><td>= Tones|Ringtones|Indian|Tamil</td> </tr><tr><td class=r>8197</td><td>= Tones|Ringtones|Indian|Telugu</td> </tr><tr><td class=r>8198</td><td>= Tones|Ringtones|Instrumental</td> </tr><tr><td class=r>8199</td><td>= Tones|Ringtones|Jazz|Avant-Garde Jazz</td> </tr><tr><td class=r>8201</td><td>= Tones|Ringtones|Jazz|Big Band</td> </tr><tr><td class=r>8202</td><td>= Tones|Ringtones|Jazz|Bop</td> </tr><tr><td class=r>8203</td><td>= Tones|Ringtones|Jazz|Contemporary Jazz</td> </tr><tr><td class=r>8204</td><td>= Tones|Ringtones|Jazz|Cool</td> </tr><tr><td class=r>8205</td><td>= Tones|Ringtones|Jazz|Crossover Jazz</td> </tr><tr><td class=r>8206</td><td>= Tones|Ringtones|Jazz|Dixieland</td> </tr><tr><td class=r>8207</td><td>= Tones|Ringtones|Jazz|Fusion</td> </tr><tr><td class=r>8208</td><td>= Tones|Ringtones|Jazz|Hard Bop</td> </tr><tr><td class=r>8209</td><td>= Tones|Ringtones|Jazz|Latin Jazz</td> </tr><tr><td class=r>8210</td><td>= Tones|Ringtones|Jazz|Mainstream Jazz</td> </tr><tr><td class=r>8211</td><td>= Tones|Ringtones|Jazz|Ragtime</td> </tr><tr><td class=r>8212</td><td>= Tones|Ringtones|Jazz|Smooth Jazz</td> </tr><tr><td class=r>8213</td><td>= Tones|Ringtones|Jazz|Trad Jazz</td> </tr><tr><td class=r>8214</td><td>= Tones|Ringtones|Pop|K-Pop</td> </tr><tr><td class=r>8215</td><td>= Tones|Ringtones|Karaoke</td> </tr><tr><td class=r>8216</td><td>= Tones|Ringtones|Korean</td> </tr><tr><td class=r>8217</td><td>= Tones|Ringtones|Korean|Korean Classical</td> </tr><tr><td class=r>8218</td><td>= Tones|Ringtones|Korean|Korean Trad Instrumental</td> </tr><tr><td class=r>8219</td><td>= Tones|Ringtones|Korean|Korean Trad Song</td> </tr><tr><td class=r>8220</td><td>= Tones|Ringtones|Korean|Korean Trad Theater</td> </tr><tr><td class=r>8221</td><td>= Tones|Ringtones|Latin|Alternative &amp; Rock in Spanish</td> </tr><tr><td class=r>8222</td><td>= Tones|Ringtones|Latin|Baladas y Boleros</td> </tr><tr><td class=r>8223</td><td>= Tones|Ringtones|Latin|Contemporary Latin</td> </tr><tr><td class=r>8224</td><td>= Tones|Ringtones|Latin|Latin Jazz</td> </tr><tr><td class=r>8225</td><td>= Tones|Ringtones|Latin|Latin Urban</td> </tr><tr><td class=r>8226</td><td>= Tones|Ringtones|Latin|Pop in Spanish</td> </tr><tr><td class=r>8227</td><td>= Tones|Ringtones|Latin|Raices</td> </tr><tr><td class=r>8228</td><td>= Tones|Ringtones|Latin|Regional Mexicano</td> </tr><tr><td class=r>8229</td><td>= Tones|Ringtones|Latin|Salsa y Tropical</td> </tr><tr><td class=r>8230</td><td>= Tones|Ringtones|Marching Bands</td> </tr><tr><td class=r>8231</td><td>= Tones|Ringtones|New Age|Healing</td> </tr><tr><td class=r>8232</td><td>= Tones|Ringtones|New Age|Meditation</td> </tr><tr><td class=r>8233</td><td>= Tones|Ringtones|New Age|Nature</td> </tr><tr><td class=r>8234</td><td>= Tones|Ringtones|New Age|Relaxation</td> </tr><tr><td class=r>8235</td><td>= Tones|Ringtones|New Age|Travel</td> </tr><tr><td class=r>8236</td><td>= Tones|Ringtones|Orchestral</td> </tr><tr><td class=r>8237</td><td>= Tones|Ringtones|Pop|Adult Contemporary</td> </tr><tr><td class=r>8238</td><td>= Tones|Ringtones|Pop|Britpop</td> </tr><tr><td class=r>8239</td><td>= Tones|Ringtones|Pop|C-Pop</td> </tr><tr><td class=r>8240</td><td>= Tones|Ringtones|Pop|Cantopop/HK-Pop</td> </tr><tr><td class=r>8241</td><td>= Tones|Ringtones|Pop|Indo Pop</td> </tr><tr><td class=r>8242</td><td>= Tones|Ringtones|Pop|Korean Folk-Pop</td> </tr><tr><td class=r>8243</td><td>= Tones|Ringtones|Pop|Malaysian Pop</td> </tr><tr><td class=r>8244</td><td>= Tones|Ringtones|Pop|Mandopop</td> </tr><tr><td class=r>8245</td><td>= Tones|Ringtones|Pop|Manilla Sound</td> </tr><tr><td class=r>8246</td><td>= Tones|Ringtones|Pop|Oldies</td> </tr><tr><td class=r>8247</td><td>= Tones|Ringtones|Pop|Original Pilipino Music</td> </tr><tr><td class=r>8248</td><td>= Tones|Ringtones|Pop|Pinoy Pop</td> </tr><tr><td class=r>8249</td><td>= Tones|Ringtones|Pop|Pop/Rock</td> </tr><tr><td class=r>8250</td><td>= Tones|Ringtones|Pop|Soft Rock</td> </tr><tr><td class=r>8251</td><td>= Tones|Ringtones|Pop|Tai-Pop</td> </tr><tr><td class=r>8252</td><td>= Tones|Ringtones|Pop|Teen Pop</td> </tr><tr><td class=r>8253</td><td>= Tones|Ringtones|Pop|Thai Pop</td> </tr><tr><td class=r>8254</td><td>= Tones|Ringtones|R&amp;B/Soul|Contemporary R&amp;B</td> </tr><tr><td class=r>8255</td><td>= Tones|Ringtones|R&amp;B/Soul|Disco</td> </tr><tr><td class=r>8256</td><td>= Tones|Ringtones|R&amp;B/Soul|Doo Wop</td> </tr><tr><td class=r>8257</td><td>= Tones|Ringtones|R&amp;B/Soul|Funk</td> </tr><tr><td class=r>8258</td><td>= Tones|Ringtones|R&amp;B/Soul|Motown</td> </tr><tr><td class=r>8259</td><td>= Tones|Ringtones|R&amp;B/Soul|Neo-Soul</td> </tr><tr><td class=r>8260</td><td>= Tones|Ringtones|R&amp;B/Soul|Soul</td> </tr><tr><td class=r>8261</td><td>= Tones|Ringtones|Reggae|Modern Dancehall</td> </tr><tr><td class=r>8262</td><td>= Tones|Ringtones|Reggae|Dub</td> </tr><tr><td class=r>8263</td><td>= Tones|Ringtones|Reggae|Roots Reggae</td> </tr><tr><td class=r>8264</td><td>= Tones|Ringtones|Reggae|Ska</td> </tr><tr><td class=r>8265</td><td>= Tones|Ringtones|Rock|Adult Alternative</td> </tr><tr><td class=r>8266</td><td>= Tones|Ringtones|Rock|American Trad Rock</td> </tr><tr><td class=r>8267</td><td>= Tones|Ringtones|Rock|Arena Rock</td> </tr><tr><td class=r>8268</td><td>= Tones|Ringtones|Rock|Blues-Rock</td> </tr><tr><td class=r>8269</td><td>= Tones|Ringtones|Rock|British Invasion</td> </tr><tr><td class=r>8270</td><td>= Tones|Ringtones|Rock|Chinese Rock</td> </tr><tr><td class=r>8271</td><td>= Tones|Ringtones|Rock|Death Metal/Black Metal</td> </tr><tr><td class=r>8272</td><td>= Tones|Ringtones|Rock|Glam Rock</td> </tr><tr><td class=r>8273</td><td>= Tones|Ringtones|Rock|Hair Metal</td> </tr><tr><td class=r>8274</td><td>= Tones|Ringtones|Rock|Hard Rock</td> </tr><tr><td class=r>8275</td><td>= Tones|Ringtones|Rock|Metal</td> </tr><tr><td class=r>8276</td><td>= Tones|Ringtones|Rock|Jam Bands</td> </tr><tr><td class=r>8277</td><td>= Tones|Ringtones|Rock|Korean Rock</td> </tr><tr><td class=r>8278</td><td>= Tones|Ringtones|Rock|Prog-Rock/Art Rock</td> </tr><tr><td class=r>8279</td><td>= Tones|Ringtones|Rock|Psychedelic</td> </tr><tr><td class=r>8280</td><td>= Tones|Ringtones|Rock|Rock &amp; Roll</td> </tr><tr><td class=r>8281</td><td>= Tones|Ringtones|Rock|Rockabilly</td> </tr><tr><td class=r>8282</td><td>= Tones|Ringtones|Rock|Roots Rock</td> </tr><tr><td class=r>8283</td><td>= Tones|Ringtones|Rock|Singer/Songwriter</td> </tr><tr><td class=r>8284</td><td>= Tones|Ringtones|Rock|Southern Rock</td> </tr><tr><td class=r>8285</td><td>= Tones|Ringtones|Rock|Surf</td> </tr><tr><td class=r>8286</td><td>= Tones|Ringtones|Rock|Tex-Mex</td> </tr><tr><td class=r>8287</td><td>= Tones|Ringtones|Singer/Songwriter|Alternative Folk</td> </tr><tr><td class=r>8288</td><td>= Tones|Ringtones|Singer/Songwriter|Contemporary Folk</td> </tr><tr><td class=r>8289</td><td>= Tones|Ringtones|Singer/Songwriter|Contemporary Singer/Songwriter</td> </tr><tr><td class=r>8290</td><td>= Tones|Ringtones|Singer/Songwriter|Folk-Rock</td> </tr><tr><td class=r>8291</td><td>= Tones|Ringtones|Singer/Songwriter|New Acoustic</td> </tr><tr><td class=r>8292</td><td>= Tones|Ringtones|Singer/Songwriter|Traditional Folk</td> </tr><tr><td class=r>8293</td><td>= Tones|Ringtones|Soundtrack|Foreign Cinema</td> </tr><tr><td class=r>8294</td><td>= Tones|Ringtones|Soundtrack|Musicals</td> </tr><tr><td class=r>8295</td><td>= Tones|Ringtones|Soundtrack|Original Score</td> </tr><tr><td class=r>8296</td><td>= Tones|Ringtones|Soundtrack|Sound Effects</td> </tr><tr><td class=r>8297</td><td>= Tones|Ringtones|Soundtrack|Soundtrack</td> </tr><tr><td class=r>8298</td><td>= Tones|Ringtones|Soundtrack|TV Soundtrack</td> </tr><tr><td class=r>8299</td><td>= Tones|Ringtones|Vocal|Standards</td> </tr><tr><td class=r>8300</td><td>= Tones|Ringtones|Vocal|Traditional Pop</td> </tr><tr><td class=r>8301</td><td>= Tones|Ringtones|Vocal|Trot</td> </tr><tr><td class=r>8302</td><td>= Tones|Ringtones|Jazz|Vocal Jazz</td> </tr><tr><td class=r>8303</td><td>= Tones|Ringtones|Vocal|Vocal Pop</td> </tr><tr><td class=r>8304</td><td>= Tones|Ringtones|World|Africa</td> </tr><tr><td class=r>8305</td><td>= Tones|Ringtones|World|Afrikaans</td> </tr><tr><td class=r>8306</td><td>= Tones|Ringtones|World|Afro-Beat</td> </tr><tr><td class=r>8307</td><td>= Tones|Ringtones|World|Afro-Pop</td> </tr><tr><td class=r>8308</td><td>= Tones|Ringtones|World|Arabesque</td> </tr><tr><td class=r>8309</td><td>= Tones|Ringtones|World|Asia</td> </tr><tr><td class=r>8310</td><td>= Tones|Ringtones|World|Australia</td> </tr><tr><td class=r>8311</td><td>= Tones|Ringtones|World|Cajun</td> </tr><tr><td class=r>8312</td><td>= Tones|Ringtones|World|Calypso</td> </tr><tr><td class=r>8313</td><td>= Tones|Ringtones|World|Caribbean</td> </tr><tr><td class=r>8314</td><td>= Tones|Ringtones|World|Celtic</td> </tr><tr><td class=r>8315</td><td>= Tones|Ringtones|World|Celtic Folk</td> </tr><tr><td class=r>8316</td><td>= Tones|Ringtones|World|Contemporary Celtic</td> </tr><tr><td class=r>8317</td><td>= Tones|Ringtones|World|Dangdut</td> </tr><tr><td class=r>8318</td><td>= Tones|Ringtones|World|Dini</td> </tr><tr><td class=r>8319</td><td>= Tones|Ringtones|World|Europe</td> </tr><tr><td class=r>8320</td><td>= Tones|Ringtones|World|Fado</td> </tr><tr><td class=r>8321</td><td>= Tones|Ringtones|World|Farsi</td> </tr><tr><td class=r>8322</td><td>= Tones|Ringtones|World|Flamenco</td> </tr><tr><td class=r>8323</td><td>= Tones|Ringtones|World|France</td> </tr><tr><td class=r>8324</td><td>= Tones|Ringtones|World|Halk</td> </tr><tr><td class=r>8325</td><td>= Tones|Ringtones|World|Hawaii</td> </tr><tr><td class=r>8326</td><td>= Tones|Ringtones|World|Iberia</td> </tr><tr><td class=r>8327</td><td>= Tones|Ringtones|World|Indonesian Religious</td> </tr><tr><td class=r>8328</td><td>= Tones|Ringtones|World|Israeli</td> </tr><tr><td class=r>8329</td><td>= Tones|Ringtones|World|Japan</td> </tr><tr><td class=r>8330</td><td>= Tones|Ringtones|World|Klezmer</td> </tr><tr><td class=r>8331</td><td>= Tones|Ringtones|World|North America</td> </tr><tr><td class=r>8332</td><td>= Tones|Ringtones|World|Polka</td> </tr><tr><td class=r>8333</td><td>= Tones|Ringtones|World|Russian</td> </tr><tr><td class=r>8334</td><td>= Tones|Ringtones|World|Russian Chanson</td> </tr><tr><td class=r>8335</td><td>= Tones|Ringtones|World|Sanat</td> </tr><tr><td class=r>8336</td><td>= Tones|Ringtones|World|Soca</td> </tr><tr><td class=r>8337</td><td>= Tones|Ringtones|World|South Africa</td> </tr><tr><td class=r>8338</td><td>= Tones|Ringtones|World|South America</td> </tr><tr><td class=r>8339</td><td>= Tones|Ringtones|World|Tango</td> </tr><tr><td class=r>8340</td><td>= Tones|Ringtones|World|Traditional Celtic</td> </tr><tr><td class=r>8341</td><td>= Tones|Ringtones|World|Turkish</td> </tr><tr><td class=r>8342</td><td>= Tones|Ringtones|World|Worldbeat</td> </tr><tr><td class=r>8343</td><td>= Tones|Ringtones|World|Zydeco</td> </tr><tr><td class=r>8345</td><td>= Tones|Ringtones|Classical|Art Song</td> </tr><tr><td class=r>8346</td><td>= Tones|Ringtones|Classical|Brass &amp; Woodwinds</td> </tr><tr><td class=r>8347</td><td>= Tones|Ringtones|Classical|Solo Instrumental</td> </tr><tr><td class=r>8348</td><td>= Tones|Ringtones|Classical|Contemporary Era</td> </tr><tr><td class=r>8349</td><td>= Tones|Ringtones|Classical|Oratorio</td> </tr><tr><td class=r>8350</td><td>= Tones|Ringtones|Classical|Cantata</td> </tr><tr><td class=r>8351</td><td>= Tones|Ringtones|Classical|Electronic</td> </tr><tr><td class=r>8352</td><td>= Tones|Ringtones|Classical|Sacred</td> </tr><tr><td class=r>8353</td><td>= Tones|Ringtones|Classical|Guitar</td> </tr><tr><td class=r>8354</td><td>= Tones|Ringtones|Classical|Piano</td> </tr><tr><td class=r>8355</td><td>= Tones|Ringtones|Classical|Violin</td> </tr><tr><td class=r>8356</td><td>= Tones|Ringtones|Classical|Cello</td> </tr><tr><td class=r>8357</td><td>= Tones|Ringtones|Classical|Percussion</td> </tr><tr><td class=r>8358</td><td>= Tones|Ringtones|Electronic|Dubstep</td> </tr><tr><td class=r>8359</td><td>= Tones|Ringtones|Electronic|Bass</td> </tr><tr><td class=r>8360</td><td>= Tones|Ringtones|Hip-Hop/Rap|UK Hip Hop</td> </tr><tr><td class=r>8361</td><td>= Tones|Ringtones|Reggae|Lovers Rock</td> </tr><tr><td class=r>8362</td><td>= Tones|Ringtones|Alternative|EMO</td> </tr><tr><td class=r>8363</td><td>= Tones|Ringtones|Alternative|Pop Punk</td> </tr><tr><td class=r>8364</td><td>= Tones|Ringtones|Alternative|Indie Pop</td> </tr><tr><td class=r>8365</td><td>= Tones|Ringtones|New Age|Yoga</td> </tr><tr><td class=r>8366</td><td>= Tones|Ringtones|Pop|Tribute</td> </tr><tr><td class=r>9002</td><td>= Books|Nonfiction</td> </tr><tr><td class=r>9003</td><td>= Books|Romance</td> </tr><tr><td class=r>9004</td><td>= Books|Travel &amp; Adventure</td> </tr><tr><td class=r>9007</td><td>= Books|Arts &amp; Entertainment</td> </tr><tr><td class=r>9008</td><td>= Books|Biographies &amp; Memoirs</td> </tr><tr><td class=r>9009</td><td>= Books|Business &amp; Personal Finance</td> </tr><tr><td class=r>9010</td><td>= Books|Children &amp; Teens</td> </tr><tr><td class=r>9012</td><td>= Books|Humor</td> </tr><tr><td class=r>9015</td><td>= Books|History</td> </tr><tr><td class=r>9018</td><td>= Books|Religion &amp; Spirituality</td> </tr><tr><td class=r>9019</td><td>= Books|Science &amp; Nature</td> </tr><tr><td class=r>9020</td><td>= Books|Sci-Fi &amp; Fantasy</td> </tr><tr><td class=r>9024</td><td>= Books|Lifestyle &amp; Home</td> </tr><tr><td class=r>9025</td><td>= Books|Health, Mind &amp; Body</td> </tr><tr><td class=r>9026</td><td>= Books|Comics &amp; Graphic Novels</td> </tr><tr><td class=r>9027</td><td>= Books|Computers &amp; Internet</td> </tr><tr><td class=r>9028</td><td>= Books|Cookbooks, Food &amp; Wine</td> </tr><tr><td class=r>9029</td><td>= Books|Professional &amp; Technical</td> </tr><tr><td class=r>9030</td><td>= Books|Parenting</td> </tr><tr><td class=r>9031</td><td>= Books|Fiction &amp; Literature</td> </tr><tr><td class=r>9032</td><td>= Books|Mysteries &amp; Thrillers</td> </tr><tr><td class=r>9033</td><td>= Books|Reference</td> </tr><tr><td class=r>9034</td><td>= Books|Politics &amp; Current Events</td> </tr><tr><td class=r>9035</td><td>= Books|Sports &amp; Outdoors</td> </tr><tr><td class=r>10001</td><td>= Books|Lifestyle &amp; Home|Antiques &amp; Collectibles</td> </tr><tr><td class=r>10002</td><td>= Books|Arts &amp; Entertainment|Art &amp; Architecture</td> </tr><tr><td class=r>10003</td><td>= Books|Religion &amp; Spirituality|Bibles</td> </tr><tr><td class=r>10004</td><td>= Books|Health, Mind &amp; Body|Spirituality</td> </tr><tr><td class=r>10005</td><td>= Books|Business &amp; Personal Finance|Industries &amp; Professions</td> </tr><tr><td class=r>10006</td><td>= Books|Business &amp; Personal Finance|Marketing &amp; Sales</td> </tr><tr><td class=r>10007</td><td>= Books|Business &amp; Personal Finance|Small Business &amp; Entrepreneurship</td> </tr><tr><td class=r>10008</td><td>= Books|Business &amp; Personal Finance|Personal Finance</td> </tr><tr><td class=r>10009</td><td>= Books|Business &amp; Personal Finance|Reference</td> </tr><tr><td class=r>10010</td><td>= Books|Business &amp; Personal Finance|Careers</td> </tr><tr><td class=r>10011</td><td>= Books|Business &amp; Personal Finance|Economics</td> </tr><tr><td class=r>10012</td><td>= Books|Business &amp; Personal Finance|Investing</td> </tr><tr><td class=r>10013</td><td>= Books|Business &amp; Personal Finance|Finance</td> </tr><tr><td class=r>10014</td><td>= Books|Business &amp; Personal Finance|Management &amp; Leadership</td> </tr><tr><td class=r>10015</td><td>= Books|Comics &amp; Graphic Novels|Graphic Novels</td> </tr><tr><td class=r>10016</td><td>= Books|Comics &amp; Graphic Novels|Manga</td> </tr><tr><td class=r>10017</td><td>= Books|Computers &amp; Internet|Computers</td> </tr><tr><td class=r>10018</td><td>= Books|Computers &amp; Internet|Databases</td> </tr><tr><td class=r>10019</td><td>= Books|Computers &amp; Internet|Digital Media</td> </tr><tr><td class=r>10020</td><td>= Books|Computers &amp; Internet|Internet</td> </tr><tr><td class=r>10021</td><td>= Books|Computers &amp; Internet|Network</td> </tr><tr><td class=r>10022</td><td>= Books|Computers &amp; Internet|Operating Systems</td> </tr><tr><td class=r>10023</td><td>= Books|Computers &amp; Internet|Programming</td> </tr><tr><td class=r>10024</td><td>= Books|Computers &amp; Internet|Software</td> </tr><tr><td class=r>10025</td><td>= Books|Computers &amp; Internet|System Administration</td> </tr><tr><td class=r>10026</td><td>= Books|Cookbooks, Food &amp; Wine|Beverages</td> </tr><tr><td class=r>10027</td><td>= Books|Cookbooks, Food &amp; Wine|Courses &amp; Dishes</td> </tr><tr><td class=r>10028</td><td>= Books|Cookbooks, Food &amp; Wine|Special Diet</td> </tr><tr><td class=r>10029</td><td>= Books|Cookbooks, Food &amp; Wine|Special Occasions</td> </tr><tr><td class=r>10030</td><td>= Books|Cookbooks, Food &amp; Wine|Methods</td> </tr><tr><td class=r>10031</td><td>= Books|Cookbooks, Food &amp; Wine|Reference</td> </tr><tr><td class=r>10032</td><td>= Books|Cookbooks, Food &amp; Wine|Regional &amp; Ethnic</td> </tr><tr><td class=r>10033</td><td>= Books|Cookbooks, Food &amp; Wine|Specific Ingredients</td> </tr><tr><td class=r>10034</td><td>= Books|Lifestyle &amp; Home|Crafts &amp; Hobbies</td> </tr><tr><td class=r>10035</td><td>= Books|Professional &amp; Technical|Design</td> </tr><tr><td class=r>10036</td><td>= Books|Arts &amp; Entertainment|Theater</td> </tr><tr><td class=r>10037</td><td>= Books|Professional &amp; Technical|Education</td> </tr><tr><td class=r>10038</td><td>= Books|Nonfiction|Family &amp; Relationships</td> </tr><tr><td class=r>10039</td><td>= Books|Fiction &amp; Literature|Action &amp; Adventure</td> </tr><tr><td class=r>10040</td><td>= Books|Fiction &amp; Literature|African American</td> </tr><tr><td class=r>10041</td><td>= Books|Fiction &amp; Literature|Religious</td> </tr><tr><td class=r>10042</td><td>= Books|Fiction &amp; Literature|Classics</td> </tr><tr><td class=r>10043</td><td>= Books|Fiction &amp; Literature|Erotica</td> </tr><tr><td class=r>10044</td><td>= Books|Sci-Fi &amp; Fantasy|Fantasy</td> </tr><tr><td class=r>10045</td><td>= Books|Fiction &amp; Literature|Gay</td> </tr><tr><td class=r>10046</td><td>= Books|Fiction &amp; Literature|Ghost</td> </tr><tr><td class=r>10047</td><td>= Books|Fiction &amp; Literature|Historical</td> </tr><tr><td class=r>10048</td><td>= Books|Fiction &amp; Literature|Horror</td> </tr><tr><td class=r>10049</td><td>= Books|Fiction &amp; Literature|Literary</td> </tr><tr><td class=r>10050</td><td>= Books|Mysteries &amp; Thrillers|Hard-Boiled</td> </tr><tr><td class=r>10051</td><td>= Books|Mysteries &amp; Thrillers|Historical</td> </tr><tr><td class=r>10052</td><td>= Books|Mysteries &amp; Thrillers|Police Procedural</td> </tr><tr><td class=r>10053</td><td>= Books|Mysteries &amp; Thrillers|Short Stories</td> </tr><tr><td class=r>10054</td><td>= Books|Mysteries &amp; Thrillers|British Detectives</td> </tr><tr><td class=r>10055</td><td>= Books|Mysteries &amp; Thrillers|Women Sleuths</td> </tr><tr><td class=r>10056</td><td>= Books|Romance|Erotic Romance</td> </tr><tr><td class=r>10057</td><td>= Books|Romance|Contemporary</td> </tr><tr><td class=r>10058</td><td>= Books|Romance|Paranormal</td> </tr><tr><td class=r>10059</td><td>= Books|Romance|Historical</td> </tr><tr><td class=r>10060</td><td>= Books|Romance|Short Stories</td> </tr><tr><td class=r>10061</td><td>= Books|Romance|Suspense</td> </tr><tr><td class=r>10062</td><td>= Books|Romance|Western</td> </tr><tr><td class=r>10063</td><td>= Books|Sci-Fi &amp; Fantasy|Science Fiction</td> </tr><tr><td class=r>10064</td><td>= Books|Sci-Fi &amp; Fantasy|Science Fiction &amp; Literature</td> </tr><tr><td class=r>10065</td><td>= Books|Fiction &amp; Literature|Short Stories</td> </tr><tr><td class=r>10066</td><td>= Books|Reference|Foreign Languages</td> </tr><tr><td class=r>10067</td><td>= Books|Arts &amp; Entertainment|Games</td> </tr><tr><td class=r>10068</td><td>= Books|Lifestyle &amp; Home|Gardening</td> </tr><tr><td class=r>10069</td><td>= Books|Health, Mind &amp; Body|Health &amp; Fitness</td> </tr><tr><td class=r>10070</td><td>= Books|History|Africa</td> </tr><tr><td class=r>10071</td><td>= Books|History|Americas</td> </tr><tr><td class=r>10072</td><td>= Books|History|Ancient</td> </tr><tr><td class=r>10073</td><td>= Books|History|Asia</td> </tr><tr><td class=r>10074</td><td>= Books|History|Australia &amp; Oceania</td> </tr><tr><td class=r>10075</td><td>= Books|History|Europe</td> </tr><tr><td class=r>10076</td><td>= Books|History|Latin America</td> </tr><tr><td class=r>10077</td><td>= Books|History|Middle East</td> </tr><tr><td class=r>10078</td><td>= Books|History|Military</td> </tr><tr><td class=r>10079</td><td>= Books|History|United States</td> </tr><tr><td class=r>10080</td><td>= Books|History|World</td> </tr><tr><td class=r>10081</td><td>= Books|Children &amp; Teens|Children&#39;s Fiction</td> </tr><tr><td class=r>10082</td><td>= Books|Children &amp; Teens|Children&#39;s Nonfiction</td> </tr><tr><td class=r>10083</td><td>= Books|Professional &amp; Technical|Law</td> </tr><tr><td class=r>10084</td><td>= Books|Fiction &amp; Literature|Literary Criticism</td> </tr><tr><td class=r>10085</td><td>= Books|Science &amp; Nature|Mathematics</td> </tr><tr><td class=r>10086</td><td>= Books|Professional &amp; Technical|Medical</td> </tr><tr><td class=r>10087</td><td>= Books|Arts &amp; Entertainment|Music</td> </tr><tr><td class=r>10088</td><td>= Books|Science &amp; Nature|Nature</td> </tr><tr><td class=r>10089</td><td>= Books|Arts &amp; Entertainment|Performing Arts</td> </tr><tr><td class=r>10090</td><td>= Books|Lifestyle &amp; Home|Pets</td> </tr><tr><td class=r>10091</td><td>= Books|Nonfiction|Philosophy</td> </tr><tr><td class=r>10092</td><td>= Books|Arts &amp; Entertainment|Photography</td> </tr><tr><td class=r>10093</td><td>= Books|Fiction &amp; Literature|Poetry</td> </tr><tr><td class=r>10094</td><td>= Books|Health, Mind &amp; Body|Psychology</td> </tr><tr><td class=r>10095</td><td>= Books|Reference|Almanacs &amp; Yearbooks</td> </tr><tr><td class=r>10096</td><td>= Books|Reference|Atlases &amp; Maps</td> </tr><tr><td class=r>10097</td><td>= Books|Reference|Catalogs &amp; Directories</td> </tr><tr><td class=r>10098</td><td>= Books|Reference|Consumer Guides</td> </tr><tr><td class=r>10099</td><td>= Books|Reference|Dictionaries &amp; Thesauruses</td> </tr><tr><td class=r>10100</td><td>= Books|Reference|Encyclopedias</td> </tr><tr><td class=r>10101</td><td>= Books|Reference|Etiquette</td> </tr><tr><td class=r>10102</td><td>= Books|Reference|Quotations</td> </tr><tr><td class=r>10103</td><td>= Books|Reference|Words &amp; Language</td> </tr><tr><td class=r>10104</td><td>= Books|Reference|Writing</td> </tr><tr><td class=r>10105</td><td>= Books|Religion &amp; Spirituality|Bible Studies</td> </tr><tr><td class=r>10106</td><td>= Books|Religion &amp; Spirituality|Buddhism</td> </tr><tr><td class=r>10107</td><td>= Books|Religion &amp; Spirituality|Christianity</td> </tr><tr><td class=r>10108</td><td>= Books|Religion &amp; Spirituality|Hinduism</td> </tr><tr><td class=r>10109</td><td>= Books|Religion &amp; Spirituality|Islam</td> </tr><tr><td class=r>10110</td><td>= Books|Religion &amp; Spirituality|Judaism</td> </tr><tr><td class=r>10111</td><td>= Books|Science &amp; Nature|Astronomy</td> </tr><tr><td class=r>10112</td><td>= Books|Science &amp; Nature|Chemistry</td> </tr><tr><td class=r>10113</td><td>= Books|Science &amp; Nature|Earth Sciences</td> </tr><tr><td class=r>10114</td><td>= Books|Science &amp; Nature|Essays</td> </tr><tr><td class=r>10115</td><td>= Books|Science &amp; Nature|History</td> </tr><tr><td class=r>10116</td><td>= Books|Science &amp; Nature|Life Sciences</td> </tr><tr><td class=r>10117</td><td>= Books|Science &amp; Nature|Physics</td> </tr><tr><td class=r>10118</td><td>= Books|Science &amp; Nature|Reference</td> </tr><tr><td class=r>10119</td><td>= Books|Health, Mind &amp; Body|Self-Improvement</td> </tr><tr><td class=r>10120</td><td>= Books|Nonfiction|Social Science</td> </tr><tr><td class=r>10121</td><td>= Books|Sports &amp; Outdoors|Baseball</td> </tr><tr><td class=r>10122</td><td>= Books|Sports &amp; Outdoors|Basketball</td> </tr><tr><td class=r>10123</td><td>= Books|Sports &amp; Outdoors|Coaching</td> </tr><tr><td class=r>10124</td><td>= Books|Sports &amp; Outdoors|Extreme Sports</td> </tr><tr><td class=r>10125</td><td>= Books|Sports &amp; Outdoors|Football</td> </tr><tr><td class=r>10126</td><td>= Books|Sports &amp; Outdoors|Golf</td> </tr><tr><td class=r>10127</td><td>= Books|Sports &amp; Outdoors|Hockey</td> </tr><tr><td class=r>10128</td><td>= Books|Sports &amp; Outdoors|Mountaineering</td> </tr><tr><td class=r>10129</td><td>= Books|Sports &amp; Outdoors|Outdoors</td> </tr><tr><td class=r>10130</td><td>= Books|Sports &amp; Outdoors|Racket Sports</td> </tr><tr><td class=r>10131</td><td>= Books|Sports &amp; Outdoors|Reference</td> </tr><tr><td class=r>10132</td><td>= Books|Sports &amp; Outdoors|Soccer</td> </tr><tr><td class=r>10133</td><td>= Books|Sports &amp; Outdoors|Training</td> </tr><tr><td class=r>10134</td><td>= Books|Sports &amp; Outdoors|Water Sports</td> </tr><tr><td class=r>10135</td><td>= Books|Sports &amp; Outdoors|Winter Sports</td> </tr><tr><td class=r>10136</td><td>= Books|Reference|Study Aids</td> </tr><tr><td class=r>10137</td><td>= Books|Professional &amp; Technical|Engineering</td> </tr><tr><td class=r>10138</td><td>= Books|Nonfiction|Transportation</td> </tr><tr><td class=r>10139</td><td>= Books|Travel &amp; Adventure|Africa</td> </tr><tr><td class=r>10140</td><td>= Books|Travel &amp; Adventure|Asia</td> </tr><tr><td class=r>10141</td><td>= Books|Travel &amp; Adventure|Specialty Travel</td> </tr><tr><td class=r>10142</td><td>= Books|Travel &amp; Adventure|Canada</td> </tr><tr><td class=r>10143</td><td>= Books|Travel &amp; Adventure|Caribbean</td> </tr><tr><td class=r>10144</td><td>= Books|Travel &amp; Adventure|Latin America</td> </tr><tr><td class=r>10145</td><td>= Books|Travel &amp; Adventure|Essays &amp; Memoirs</td> </tr><tr><td class=r>10146</td><td>= Books|Travel &amp; Adventure|Europe</td> </tr><tr><td class=r>10147</td><td>= Books|Travel &amp; Adventure|Middle East</td> </tr><tr><td class=r>10148</td><td>= Books|Travel &amp; Adventure|United States</td> </tr><tr><td class=r>10149</td><td>= Books|Nonfiction|True Crime</td> </tr><tr><td class=r>11001</td><td>= Books|Sci-Fi &amp; Fantasy|Fantasy|Contemporary</td> </tr><tr><td class=r>11002</td><td>= Books|Sci-Fi &amp; Fantasy|Fantasy|Epic</td> </tr><tr><td class=r>11003</td><td>= Books|Sci-Fi &amp; Fantasy|Fantasy|Historical</td> </tr><tr><td class=r>11004</td><td>= Books|Sci-Fi &amp; Fantasy|Fantasy|Paranormal</td> </tr><tr><td class=r>11005</td><td>= Books|Sci-Fi &amp; Fantasy|Fantasy|Short Stories</td> </tr><tr><td class=r>11006</td><td>= Books|Sci-Fi &amp; Fantasy|Science Fiction &amp; Literature|Adventure</td> </tr><tr><td class=r>11007</td><td>= Books|Sci-Fi &amp; Fantasy|Science Fiction &amp; Literature|High Tech</td> </tr><tr><td class=r>11008</td><td>= Books|Sci-Fi &amp; Fantasy|Science Fiction &amp; Literature|Short Stories</td> </tr><tr><td class=r>11009</td><td>= Books|Professional &amp; Technical|Education|Language Arts &amp; Disciplines</td> </tr><tr><td class=r>11010</td><td>= Books|Communications &amp; Media</td> </tr><tr><td class=r>11011</td><td>= Books|Communications &amp; Media|Broadcasting</td> </tr><tr><td class=r>11012</td><td>= Books|Communications &amp; Media|Digital Media</td> </tr><tr><td class=r>11013</td><td>= Books|Communications &amp; Media|Journalism</td> </tr><tr><td class=r>11014</td><td>= Books|Communications &amp; Media|Photojournalism</td> </tr><tr><td class=r>11015</td><td>= Books|Communications &amp; Media|Print</td> </tr><tr><td class=r>11016</td><td>= Books|Communications &amp; Media|Speech</td> </tr><tr><td class=r>11017</td><td>= Books|Communications &amp; Media|Writing</td> </tr><tr><td class=r>11018</td><td>= Books|Arts &amp; Entertainment|Art &amp; Architecture|Urban Planning</td> </tr><tr><td class=r>11019</td><td>= Books|Arts &amp; Entertainment|Dance</td> </tr><tr><td class=r>11020</td><td>= Books|Arts &amp; Entertainment|Fashion</td> </tr><tr><td class=r>11021</td><td>= Books|Arts &amp; Entertainment|Film</td> </tr><tr><td class=r>11022</td><td>= Books|Arts &amp; Entertainment|Interior Design</td> </tr><tr><td class=r>11023</td><td>= Books|Arts &amp; Entertainment|Media Arts</td> </tr><tr><td class=r>11024</td><td>= Books|Arts &amp; Entertainment|Radio</td> </tr><tr><td class=r>11025</td><td>= Books|Arts &amp; Entertainment|TV</td> </tr><tr><td class=r>11026</td><td>= Books|Arts &amp; Entertainment|Visual Arts</td> </tr><tr><td class=r>11027</td><td>= Books|Biographies &amp; Memoirs|Arts &amp; Entertainment</td> </tr><tr><td class=r>11028</td><td>= Books|Biographies &amp; Memoirs|Business</td> </tr><tr><td class=r>11029</td><td>= Books|Biographies &amp; Memoirs|Culinary</td> </tr><tr><td class=r>11030</td><td>= Books|Biographies &amp; Memoirs|Gay &amp; Lesbian</td> </tr><tr><td class=r>11031</td><td>= Books|Biographies &amp; Memoirs|Historical</td> </tr><tr><td class=r>11032</td><td>= Books|Biographies &amp; Memoirs|Literary</td> </tr><tr><td class=r>11033</td><td>= Books|Biographies &amp; Memoirs|Media &amp; Journalism</td> </tr><tr><td class=r>11034</td><td>= Books|Biographies &amp; Memoirs|Military</td> </tr><tr><td class=r>11035</td><td>= Books|Biographies &amp; Memoirs|Politics</td> </tr><tr><td class=r>11036</td><td>= Books|Biographies &amp; Memoirs|Religious</td> </tr><tr><td class=r>11037</td><td>= Books|Biographies &amp; Memoirs|Science &amp; Technology</td> </tr><tr><td class=r>11038</td><td>= Books|Biographies &amp; Memoirs|Sports</td> </tr><tr><td class=r>11039</td><td>= Books|Biographies &amp; Memoirs|Women</td> </tr><tr><td class=r>11040</td><td>= Books|Romance|New Adult</td> </tr><tr><td class=r>11042</td><td>= Books|Romance|Romantic Comedy</td> </tr><tr><td class=r>11043</td><td>= Books|Romance|Gay &amp; Lesbian</td> </tr><tr><td class=r>11044</td><td>= Books|Fiction &amp; Literature|Essays</td> </tr><tr><td class=r>11045</td><td>= Books|Fiction &amp; Literature|Anthologies</td> </tr><tr><td class=r>11046</td><td>= Books|Fiction &amp; Literature|Comparative Literature</td> </tr><tr><td class=r>11047</td><td>= Books|Fiction &amp; Literature|Drama</td> </tr><tr><td class=r>11049</td><td>= Books|Fiction &amp; Literature|Fairy Tales, Myths &amp; Fables</td> </tr><tr><td class=r>11050</td><td>= Books|Fiction &amp; Literature|Family</td> </tr><tr><td class=r>11051</td><td>= Books|Comics &amp; Graphic Novels|Manga|School Drama</td> </tr><tr><td class=r>11052</td><td>= Books|Comics &amp; Graphic Novels|Manga|Human Drama</td> </tr><tr><td class=r>11053</td><td>= Books|Comics &amp; Graphic Novels|Manga|Family Drama</td> </tr><tr><td class=r>11054</td><td>= Books|Sports &amp; Outdoors|Boxing</td> </tr><tr><td class=r>11055</td><td>= Books|Sports &amp; Outdoors|Cricket</td> </tr><tr><td class=r>11056</td><td>= Books|Sports &amp; Outdoors|Cycling</td> </tr><tr><td class=r>11057</td><td>= Books|Sports &amp; Outdoors|Equestrian</td> </tr><tr><td class=r>11058</td><td>= Books|Sports &amp; Outdoors|Martial Arts &amp; Self Defense</td> </tr><tr><td class=r>11059</td><td>= Books|Sports &amp; Outdoors|Motor Sports</td> </tr><tr><td class=r>11060</td><td>= Books|Sports &amp; Outdoors|Rugby</td> </tr><tr><td class=r>11061</td><td>= Books|Sports &amp; Outdoors|Running</td> </tr><tr><td class=r>11062</td><td>= Books|Health, Mind &amp; Body|Diet &amp; Nutrition</td> </tr><tr><td class=r>11063</td><td>= Books|Science &amp; Nature|Agriculture</td> </tr><tr><td class=r>11064</td><td>= Books|Science &amp; Nature|Atmosphere</td> </tr><tr><td class=r>11065</td><td>= Books|Science &amp; Nature|Biology</td> </tr><tr><td class=r>11066</td><td>= Books|Science &amp; Nature|Ecology</td> </tr><tr><td class=r>11067</td><td>= Books|Science &amp; Nature|Environment</td> </tr><tr><td class=r>11068</td><td>= Books|Science &amp; Nature|Geography</td> </tr><tr><td class=r>11069</td><td>= Books|Science &amp; Nature|Geology</td> </tr><tr><td class=r>11070</td><td>= Books|Nonfiction|Social Science|Anthropology</td> </tr><tr><td class=r>11071</td><td>= Books|Nonfiction|Social Science|Archaeology</td> </tr><tr><td class=r>11072</td><td>= Books|Nonfiction|Social Science|Civics</td> </tr><tr><td class=r>11073</td><td>= Books|Nonfiction|Social Science|Government</td> </tr><tr><td class=r>11074</td><td>= Books|Nonfiction|Social Science|Social Studies</td> </tr><tr><td class=r>11075</td><td>= Books|Nonfiction|Social Science|Social Welfare</td> </tr><tr><td class=r>11076</td><td>= Books|Nonfiction|Social Science|Society</td> </tr><tr><td class=r>11077</td><td>= Books|Nonfiction|Philosophy|Aesthetics</td> </tr><tr><td class=r>11078</td><td>= Books|Nonfiction|Philosophy|Epistemology</td> </tr><tr><td class=r>11079</td><td>= Books|Nonfiction|Philosophy|Ethics</td> </tr><tr><td class=r>11080</td><td>= Books|Nonfiction|Philosophy|Language</td> </tr><tr><td class=r>11081</td><td>= Books|Nonfiction|Philosophy|Logic</td> </tr><tr><td class=r>11082</td><td>= Books|Nonfiction|Philosophy|Metaphysics</td> </tr><tr><td class=r>11083</td><td>= Books|Nonfiction|Philosophy|Political</td> </tr><tr><td class=r>11084</td><td>= Books|Nonfiction|Philosophy|Religion</td> </tr><tr><td class=r>11085</td><td>= Books|Reference|Manuals</td> </tr><tr><td class=r>11086</td><td>= Books|Kids</td> </tr><tr><td class=r>11087</td><td>= Books|Kids|Animals</td> </tr><tr><td class=r>11088</td><td>= Books|Kids|Basic Concepts</td> </tr><tr><td class=r>11089</td><td>= Books|Kids|Basic Concepts|Alphabet</td> </tr><tr><td class=r>11090</td><td>= Books|Kids|Basic Concepts|Body</td> </tr><tr><td class=r>11091</td><td>= Books|Kids|Basic Concepts|Colors</td> </tr><tr><td class=r>11092</td><td>= Books|Kids|Basic Concepts|Counting &amp; Numbers</td> </tr><tr><td class=r>11093</td><td>= Books|Kids|Basic Concepts|Date &amp; Time</td> </tr><tr><td class=r>11094</td><td>= Books|Kids|Basic Concepts|General</td> </tr><tr><td class=r>11095</td><td>= Books|Kids|Basic Concepts|Money</td> </tr><tr><td class=r>11096</td><td>= Books|Kids|Basic Concepts|Opposites</td> </tr><tr><td class=r>11097</td><td>= Books|Kids|Basic Concepts|Seasons</td> </tr><tr><td class=r>11098</td><td>= Books|Kids|Basic Concepts|Senses &amp; Sensation</td> </tr><tr><td class=r>11099</td><td>= Books|Kids|Basic Concepts|Size &amp; Shape</td> </tr><tr><td class=r>11100</td><td>= Books|Kids|Basic Concepts|Sounds</td> </tr><tr><td class=r>11101</td><td>= Books|Kids|Basic Concepts|Words</td> </tr><tr><td class=r>11102</td><td>= Books|Kids|Biography</td> </tr><tr><td class=r>11103</td><td>= Books|Kids|Careers &amp; Occupations</td> </tr><tr><td class=r>11104</td><td>= Books|Kids|Computers &amp; Technology</td> </tr><tr><td class=r>11105</td><td>= Books|Kids|Cooking &amp; Food</td> </tr><tr><td class=r>11106</td><td>= Books|Kids|Arts &amp; Entertainment</td> </tr><tr><td class=r>11107</td><td>= Books|Kids|Arts &amp; Entertainment|Art</td> </tr><tr><td class=r>11108</td><td>= Books|Kids|Arts &amp; Entertainment|Crafts</td> </tr><tr><td class=r>11109</td><td>= Books|Kids|Arts &amp; Entertainment|Music</td> </tr><tr><td class=r>11110</td><td>= Books|Kids|Arts &amp; Entertainment|Performing Arts</td> </tr><tr><td class=r>11111</td><td>= Books|Kids|Family</td> </tr><tr><td class=r>11112</td><td>= Books|Kids|Fiction</td> </tr><tr><td class=r>11113</td><td>= Books|Kids|Fiction|Action &amp; Adventure</td> </tr><tr><td class=r>11114</td><td>= Books|Kids|Fiction|Animals</td> </tr><tr><td class=r>11115</td><td>= Books|Kids|Fiction|Classics</td> </tr><tr><td class=r>11116</td><td>= Books|Kids|Fiction|Comics &amp; Graphic Novels</td> </tr><tr><td class=r>11117</td><td>= Books|Kids|Fiction|Culture, Places &amp; People</td> </tr><tr><td class=r>11118</td><td>= Books|Kids|Fiction|Family &amp; Relationships</td> </tr><tr><td class=r>11119</td><td>= Books|Kids|Fiction|Fantasy</td> </tr><tr><td class=r>11120</td><td>= Books|Kids|Fiction|Fairy Tales, Myths &amp; Fables</td> </tr><tr><td class=r>11121</td><td>= Books|Kids|Fiction|Favorite Characters</td> </tr><tr><td class=r>11122</td><td>= Books|Kids|Fiction|Historical</td> </tr><tr><td class=r>11123</td><td>= Books|Kids|Fiction|Holidays &amp; Celebrations</td> </tr><tr><td class=r>11124</td><td>= Books|Kids|Fiction|Monsters &amp; Ghosts</td> </tr><tr><td class=r>11125</td><td>= Books|Kids|Fiction|Mysteries</td> </tr><tr><td class=r>11126</td><td>= Books|Kids|Fiction|Nature</td> </tr><tr><td class=r>11127</td><td>= Books|Kids|Fiction|Religion</td> </tr><tr><td class=r>11128</td><td>= Books|Kids|Fiction|Sci-Fi</td> </tr><tr><td class=r>11129</td><td>= Books|Kids|Fiction|Social Issues</td> </tr><tr><td class=r>11130</td><td>= Books|Kids|Fiction|Sports &amp; Recreation</td> </tr><tr><td class=r>11131</td><td>= Books|Kids|Fiction|Transportation</td> </tr><tr><td class=r>11132</td><td>= Books|Kids|Games &amp; Activities</td> </tr><tr><td class=r>11133</td><td>= Books|Kids|General Nonfiction</td> </tr><tr><td class=r>11134</td><td>= Books|Kids|Health</td> </tr><tr><td class=r>11135</td><td>= Books|Kids|History</td> </tr><tr><td class=r>11136</td><td>= Books|Kids|Holidays &amp; Celebrations</td> </tr><tr><td class=r>11137</td><td>= Books|Kids|Holidays &amp; Celebrations|Birthdays</td> </tr><tr><td class=r>11138</td><td>= Books|Kids|Holidays &amp; Celebrations|Christmas &amp; Advent</td> </tr><tr><td class=r>11139</td><td>= Books|Kids|Holidays &amp; Celebrations|Easter &amp; Lent</td> </tr><tr><td class=r>11140</td><td>= Books|Kids|Holidays &amp; Celebrations|General</td> </tr><tr><td class=r>11141</td><td>= Books|Kids|Holidays &amp; Celebrations|Halloween</td> </tr><tr><td class=r>11142</td><td>= Books|Kids|Holidays &amp; Celebrations|Hanukkah</td> </tr><tr><td class=r>11143</td><td>= Books|Kids|Holidays &amp; Celebrations|Other</td> </tr><tr><td class=r>11144</td><td>= Books|Kids|Holidays &amp; Celebrations|Passover</td> </tr><tr><td class=r>11145</td><td>= Books|Kids|Holidays &amp; Celebrations|Patriotic Holidays</td> </tr><tr><td class=r>11146</td><td>= Books|Kids|Holidays &amp; Celebrations|Ramadan</td> </tr><tr><td class=r>11147</td><td>= Books|Kids|Holidays &amp; Celebrations|Thanksgiving</td> </tr><tr><td class=r>11148</td><td>= Books|Kids|Holidays &amp; Celebrations|Valentine&#39;s Day</td> </tr><tr><td class=r>11149</td><td>= Books|Kids|Humor</td> </tr><tr><td class=r>11150</td><td>= Books|Kids|Humor|Jokes &amp; Riddles</td> </tr><tr><td class=r>11151</td><td>= Books|Kids|Poetry</td> </tr><tr><td class=r>11152</td><td>= Books|Kids|Learning to Read</td> </tr><tr><td class=r>11153</td><td>= Books|Kids|Learning to Read|Chapter Books</td> </tr><tr><td class=r>11154</td><td>= Books|Kids|Learning to Read|Early Readers</td> </tr><tr><td class=r>11155</td><td>= Books|Kids|Learning to Read|Intermediate Readers</td> </tr><tr><td class=r>11156</td><td>= Books|Kids|Nursery Rhymes</td> </tr><tr><td class=r>11157</td><td>= Books|Kids|Government</td> </tr><tr><td class=r>11158</td><td>= Books|Kids|Reference</td> </tr><tr><td class=r>11159</td><td>= Books|Kids|Religion</td> </tr><tr><td class=r>11160</td><td>= Books|Kids|Science &amp; Nature</td> </tr><tr><td class=r>11161</td><td>= Books|Kids|Social Issues</td> </tr><tr><td class=r>11162</td><td>= Books|Kids|Social Studies</td> </tr><tr><td class=r>11163</td><td>= Books|Kids|Sports &amp; Recreation</td> </tr><tr><td class=r>11164</td><td>= Books|Kids|Transportation</td> </tr><tr><td class=r>11165</td><td>= Books|Young Adult</td> </tr><tr><td class=r>11166</td><td>= Books|Young Adult|Animals</td> </tr><tr><td class=r>11167</td><td>= Books|Young Adult|Biography</td> </tr><tr><td class=r>11168</td><td>= Books|Young Adult|Careers &amp; Occupations</td> </tr><tr><td class=r>11169</td><td>= Books|Young Adult|Computers &amp; Technology</td> </tr><tr><td class=r>11170</td><td>= Books|Young Adult|Cooking &amp; Food</td> </tr><tr><td class=r>11171</td><td>= Books|Young Adult|Arts &amp; Entertainment</td> </tr><tr><td class=r>11172</td><td>= Books|Young Adult|Arts &amp; Entertainment|Art</td> </tr><tr><td class=r>11173</td><td>= Books|Young Adult|Arts &amp; Entertainment|Crafts</td> </tr><tr><td class=r>11174</td><td>= Books|Young Adult|Arts &amp; Entertainment|Music</td> </tr><tr><td class=r>11175</td><td>= Books|Young Adult|Arts &amp; Entertainment|Performing Arts</td> </tr><tr><td class=r>11176</td><td>= Books|Young Adult|Family</td> </tr><tr><td class=r>11177</td><td>= Books|Young Adult|Fiction</td> </tr><tr><td class=r>11178</td><td>= Books|Young Adult|Fiction|Action &amp; Adventure</td> </tr><tr><td class=r>11179</td><td>= Books|Young Adult|Fiction|Animals</td> </tr><tr><td class=r>11180</td><td>= Books|Young Adult|Fiction|Classics</td> </tr><tr><td class=r>11181</td><td>= Books|Young Adult|Fiction|Comics &amp; Graphic Novels</td> </tr><tr><td class=r>11182</td><td>= Books|Young Adult|Fiction|Culture, Places &amp; People</td> </tr><tr><td class=r>11183</td><td>= Books|Young Adult|Fiction|Dystopian</td> </tr><tr><td class=r>11184</td><td>= Books|Young Adult|Fiction|Family &amp; Relationships</td> </tr><tr><td class=r>11185</td><td>= Books|Young Adult|Fiction|Fantasy</td> </tr><tr><td class=r>11186</td><td>= Books|Young Adult|Fiction|Fairy Tales, Myths &amp; Fables</td> </tr><tr><td class=r>11187</td><td>= Books|Young Adult|Fiction|Favorite Characters</td> </tr><tr><td class=r>11188</td><td>= Books|Young Adult|Fiction|Historical</td> </tr><tr><td class=r>11189</td><td>= Books|Young Adult|Fiction|Holidays &amp; Celebrations</td> </tr><tr><td class=r>11190</td><td>= Books|Young Adult|Fiction|Horror, Monsters &amp; Ghosts</td> </tr><tr><td class=r>11191</td><td>= Books|Young Adult|Fiction|Crime &amp; Mystery</td> </tr><tr><td class=r>11192</td><td>= Books|Young Adult|Fiction|Nature</td> </tr><tr><td class=r>11193</td><td>= Books|Young Adult|Fiction|Religion</td> </tr><tr><td class=r>11194</td><td>= Books|Young Adult|Fiction|Romance</td> </tr><tr><td class=r>11195</td><td>= Books|Young Adult|Fiction|Sci-Fi</td> </tr><tr><td class=r>11196</td><td>= Books|Young Adult|Fiction|Coming of Age</td> </tr><tr><td class=r>11197</td><td>= Books|Young Adult|Fiction|Sports &amp; Recreation</td> </tr><tr><td class=r>11198</td><td>= Books|Young Adult|Fiction|Transportation</td> </tr><tr><td class=r>11199</td><td>= Books|Young Adult|Games &amp; Activities</td> </tr><tr><td class=r>11200</td><td>= Books|Young Adult|General Nonfiction</td> </tr><tr><td class=r>11201</td><td>= Books|Young Adult|Health</td> </tr><tr><td class=r>11202</td><td>= Books|Young Adult|History</td> </tr><tr><td class=r>11203</td><td>= Books|Young Adult|Holidays &amp; Celebrations</td> </tr><tr><td class=r>11204</td><td>= Books|Young Adult|Holidays &amp; Celebrations|Birthdays</td> </tr><tr><td class=r>11205</td><td>= Books|Young Adult|Holidays &amp; Celebrations|Christmas &amp; Advent</td> </tr><tr><td class=r>11206</td><td>= Books|Young Adult|Holidays &amp; Celebrations|Easter &amp; Lent</td> </tr><tr><td class=r>11207</td><td>= Books|Young Adult|Holidays &amp; Celebrations|General</td> </tr><tr><td class=r>11208</td><td>= Books|Young Adult|Holidays &amp; Celebrations|Halloween</td> </tr><tr><td class=r>11209</td><td>= Books|Young Adult|Holidays &amp; Celebrations|Hanukkah</td> </tr><tr><td class=r>11210</td><td>= Books|Young Adult|Holidays &amp; Celebrations|Other</td> </tr><tr><td class=r>11211</td><td>= Books|Young Adult|Holidays &amp; Celebrations|Passover</td> </tr><tr><td class=r>11212</td><td>= Books|Young Adult|Holidays &amp; Celebrations|Patriotic Holidays</td> </tr><tr><td class=r>11213</td><td>= Books|Young Adult|Holidays &amp; Celebrations|Ramadan</td> </tr><tr><td class=r>11214</td><td>= Books|Young Adult|Holidays &amp; Celebrations|Thanksgiving</td> </tr><tr><td class=r>11215</td><td>= Books|Young Adult|Holidays &amp; Celebrations|Valentine&#39;s Day</td> </tr><tr><td class=r>11216</td><td>= Books|Young Adult|Humor</td> </tr><tr><td class=r>11217</td><td>= Books|Young Adult|Humor|Jokes &amp; Riddles</td> </tr><tr><td class=r>11218</td><td>= Books|Young Adult|Poetry</td> </tr><tr><td class=r>11219</td><td>= Books|Young Adult|Politics &amp; Government</td> </tr><tr><td class=r>11220</td><td>= Books|Young Adult|Reference</td> </tr><tr><td class=r>11221</td><td>= Books|Young Adult|Religion</td> </tr><tr><td class=r>11222</td><td>= Books|Young Adult|Science &amp; Nature</td> </tr><tr><td class=r>11223</td><td>= Books|Young Adult|Coming of Age</td> </tr><tr><td class=r>11224</td><td>= Books|Young Adult|Social Studies</td> </tr><tr><td class=r>11225</td><td>= Books|Young Adult|Sports &amp; Recreation</td> </tr><tr><td class=r>11226</td><td>= Books|Young Adult|Transportation</td> </tr><tr><td class=r>11227</td><td>= Books|Communications &amp; Media</td> </tr><tr><td class=r>11228</td><td>= Books|Military &amp; Warfare</td> </tr><tr><td class=r>11229</td><td>= Books|Romance|Inspirational</td> </tr><tr><td class=r>11231</td><td>= Books|Romance|Holiday</td> </tr><tr><td class=r>11232</td><td>= Books|Romance|Wholesome</td> </tr><tr><td class=r>11233</td><td>= Books|Romance|Military</td> </tr><tr><td class=r>11234</td><td>= Books|Arts &amp; Entertainment|Art History</td> </tr><tr><td class=r>11236</td><td>= Books|Arts &amp; Entertainment|Design</td> </tr><tr><td class=r>11243</td><td>= Books|Business &amp; Personal Finance|Accounting</td> </tr><tr><td class=r>11244</td><td>= Books|Business &amp; Personal Finance|Hospitality</td> </tr><tr><td class=r>11245</td><td>= Books|Business &amp; Personal Finance|Real Estate</td> </tr><tr><td class=r>11246</td><td>= Books|Humor|Jokes &amp; Riddles</td> </tr><tr><td class=r>11247</td><td>= Books|Religion &amp; Spirituality|Comparative Religion</td> </tr><tr><td class=r>11255</td><td>= Books|Cookbooks, Food &amp; Wine|Culinary Arts</td> </tr><tr><td class=r>11259</td><td>= Books|Mysteries &amp; Thrillers|Cozy</td> </tr><tr><td class=r>11260</td><td>= Books|Politics &amp; Current Events|Current Events</td> </tr><tr><td class=r>11261</td><td>= Books|Politics &amp; Current Events|Foreign Policy &amp; International Relations</td> </tr><tr><td class=r>11262</td><td>= Books|Politics &amp; Current Events|Local Government</td> </tr><tr><td class=r>11263</td><td>= Books|Politics &amp; Current Events|National Government</td> </tr><tr><td class=r>11264</td><td>= Books|Politics &amp; Current Events|Political Science</td> </tr><tr><td class=r>11265</td><td>= Books|Politics &amp; Current Events|Public Administration</td> </tr><tr><td class=r>11266</td><td>= Books|Politics &amp; Current Events|World Affairs</td> </tr><tr><td class=r>11273</td><td>= Books|Nonfiction|Family &amp; Relationships|Family &amp; Childcare</td> </tr><tr><td class=r>11274</td><td>= Books|Nonfiction|Family &amp; Relationships|Love &amp; Romance</td> </tr><tr><td class=r>11275</td><td>= Books|Sci-Fi &amp; Fantasy|Fantasy|Urban</td> </tr><tr><td class=r>11276</td><td>= Books|Reference|Foreign Languages|Arabic</td> </tr><tr><td class=r>11277</td><td>= Books|Reference|Foreign Languages|Bilingual Editions</td> </tr><tr><td class=r>11278</td><td>= Books|Reference|Foreign Languages|African Languages</td> </tr><tr><td class=r>11279</td><td>= Books|Reference|Foreign Languages|Ancient Languages</td> </tr><tr><td class=r>11280</td><td>= Books|Reference|Foreign Languages|Chinese</td> </tr><tr><td class=r>11281</td><td>= Books|Reference|Foreign Languages|English</td> </tr><tr><td class=r>11282</td><td>= Books|Reference|Foreign Languages|French</td> </tr><tr><td class=r>11283</td><td>= Books|Reference|Foreign Languages|German</td> </tr><tr><td class=r>11284</td><td>= Books|Reference|Foreign Languages|Hebrew</td> </tr><tr><td class=r>11285</td><td>= Books|Reference|Foreign Languages|Hindi</td> </tr><tr><td class=r>11286</td><td>= Books|Reference|Foreign Languages|Italian</td> </tr><tr><td class=r>11287</td><td>= Books|Reference|Foreign Languages|Japanese</td> </tr><tr><td class=r>11288</td><td>= Books|Reference|Foreign Languages|Korean</td> </tr><tr><td class=r>11289</td><td>= Books|Reference|Foreign Languages|Linguistics</td> </tr><tr><td class=r>11290</td><td>= Books|Reference|Foreign Languages|Other Languages</td> </tr><tr><td class=r>11291</td><td>= Books|Reference|Foreign Languages|Portuguese</td> </tr><tr><td class=r>11292</td><td>= Books|Reference|Foreign Languages|Russian</td> </tr><tr><td class=r>11293</td><td>= Books|Reference|Foreign Languages|Spanish</td> </tr><tr><td class=r>11294</td><td>= Books|Reference|Foreign Languages|Speech Pathology</td> </tr><tr><td class=r>11295</td><td>= Books|Science &amp; Nature|Mathematics|Advanced Mathematics</td> </tr><tr><td class=r>11296</td><td>= Books|Science &amp; Nature|Mathematics|Algebra</td> </tr><tr><td class=r>11297</td><td>= Books|Science &amp; Nature|Mathematics|Arithmetic</td> </tr><tr><td class=r>11298</td><td>= Books|Science &amp; Nature|Mathematics|Calculus</td> </tr><tr><td class=r>11299</td><td>= Books|Science &amp; Nature|Mathematics|Geometry</td> </tr><tr><td class=r>11300</td><td>= Books|Science &amp; Nature|Mathematics|Statistics</td> </tr><tr><td class=r>11301</td><td>= Books|Professional &amp; Technical|Medical|Veterinary</td> </tr><tr><td class=r>11302</td><td>= Books|Professional &amp; Technical|Medical|Neuroscience</td> </tr><tr><td class=r>11303</td><td>= Books|Professional &amp; Technical|Medical|Immunology</td> </tr><tr><td class=r>11304</td><td>= Books|Professional &amp; Technical|Medical|Nursing</td> </tr><tr><td class=r>11305</td><td>= Books|Professional &amp; Technical|Medical|Pharmacology &amp; Toxicology</td> </tr><tr><td class=r>11306</td><td>= Books|Professional &amp; Technical|Medical|Anatomy &amp; Physiology</td> </tr><tr><td class=r>11307</td><td>= Books|Professional &amp; Technical|Medical|Dentistry</td> </tr><tr><td class=r>11308</td><td>= Books|Professional &amp; Technical|Medical|Emergency Medicine</td> </tr><tr><td class=r>11309</td><td>= Books|Professional &amp; Technical|Medical|Genetics</td> </tr><tr><td class=r>11310</td><td>= Books|Professional &amp; Technical|Medical|Psychiatry</td> </tr><tr><td class=r>11311</td><td>= Books|Professional &amp; Technical|Medical|Radiology</td> </tr><tr><td class=r>11312</td><td>= Books|Professional &amp; Technical|Medical|Alternative Medicine</td> </tr><tr><td class=r>11317</td><td>= Books|Nonfiction|Philosophy|Political Philosophy</td> </tr><tr><td class=r>11319</td><td>= Books|Nonfiction|Philosophy|Philosophy of Language</td> </tr><tr><td class=r>11320</td><td>= Books|Nonfiction|Philosophy|Philosophy of Religion</td> </tr><tr><td class=r>11327</td><td>= Books|Nonfiction|Social Science|Sociology</td> </tr><tr><td class=r>11329</td><td>= Books|Professional &amp; Technical|Engineering|Aeronautics</td> </tr><tr><td class=r>11330</td><td>= Books|Professional &amp; Technical|Engineering|Chemical &amp; Petroleum Engineering</td> </tr><tr><td class=r>11331</td><td>= Books|Professional &amp; Technical|Engineering|Civil Engineering</td> </tr><tr><td class=r>11332</td><td>= Books|Professional &amp; Technical|Engineering|Computer Science</td> </tr><tr><td class=r>11333</td><td>= Books|Professional &amp; Technical|Engineering|Electrical Engineering</td> </tr><tr><td class=r>11334</td><td>= Books|Professional &amp; Technical|Engineering|Environmental Engineering</td> </tr><tr><td class=r>11335</td><td>= Books|Professional &amp; Technical|Engineering|Mechanical Engineering</td> </tr><tr><td class=r>11336</td><td>= Books|Professional &amp; Technical|Engineering|Power Resources</td> </tr><tr><td class=r>11337</td><td>= Books|Comics &amp; Graphic Novels|Manga|Boys</td> </tr><tr><td class=r>11338</td><td>= Books|Comics &amp; Graphic Novels|Manga|Men</td> </tr><tr><td class=r>11339</td><td>= Books|Comics &amp; Graphic Novels|Manga|Girls</td> </tr><tr><td class=r>11340</td><td>= Books|Comics &amp; Graphic Novels|Manga|Women</td> </tr><tr><td class=r>11341</td><td>= Books|Comics &amp; Graphic Novels|Manga|Other</td> </tr><tr><td class=r>12001</td><td>= Mac App Store|Business</td> </tr><tr><td class=r>12002</td><td>= Mac App Store|Developer Tools</td> </tr><tr><td class=r>12003</td><td>= Mac App Store|Education</td> </tr><tr><td class=r>12004</td><td>= Mac App Store|Entertainment</td> </tr><tr><td class=r>12005</td><td>= Mac App Store|Finance</td> </tr><tr><td class=r>12006</td><td>= Mac App Store|Games</td> </tr><tr><td class=r>12007</td><td>= Mac App Store|Health &amp; Fitness</td> </tr><tr><td class=r>12008</td><td>= Mac App Store|Lifestyle</td> </tr><tr><td class=r>12010</td><td>= Mac App Store|Medical</td> </tr><tr><td class=r>12011</td><td>= Mac App Store|Music</td> </tr><tr><td class=r>12012</td><td>= Mac App Store|News</td> </tr><tr><td class=r>12013</td><td>= Mac App Store|Photography</td> </tr><tr><td class=r>12014</td><td>= Mac App Store|Productivity</td> </tr><tr><td class=r>12015</td><td>= Mac App Store|Reference</td> </tr><tr><td class=r>12016</td><td>= Mac App Store|Social Networking</td> </tr><tr><td class=r>12017</td><td>= Mac App Store|Sports</td> </tr><tr><td class=r>12018</td><td>= Mac App Store|Travel</td> </tr><tr><td class=r>12019</td><td>= Mac App Store|Utilities</td> </tr><tr><td class=r>12020</td><td>= Mac App Store|Video</td> </tr><tr><td class=r>12021</td><td>= Mac App Store|Weather</td> </tr><tr><td class=r>12022</td><td>= Mac App Store|Graphics &amp; Design</td> </tr><tr><td class=r>12201</td><td>= Mac App Store|Games|Action</td> </tr><tr><td class=r>12202</td><td>= Mac App Store|Games|Adventure</td> </tr><tr><td class=r>12203</td><td>= Mac App Store|Games|Arcade</td> </tr><tr><td class=r>12204</td><td>= Mac App Store|Games|Board</td> </tr><tr><td class=r>12205</td><td>= Mac App Store|Games|Card</td> </tr><tr><td class=r>12206</td><td>= Mac App Store|Games|Casino</td> </tr><tr><td class=r>12207</td><td>= Mac App Store|Games|Dice</td> </tr><tr><td class=r>12208</td><td>= Mac App Store|Games|Educational</td> </tr><tr><td class=r>12209</td><td>= Mac App Store|Games|Family</td> </tr><tr><td class=r>12210</td><td>= Mac App Store|Games|Kids</td> </tr><tr><td class=r>12211</td><td>= Mac App Store|Games|Music</td> </tr><tr><td class=r>12212</td><td>= Mac App Store|Games|Puzzle</td> </tr><tr><td class=r>12213</td><td>= Mac App Store|Games|Racing</td> </tr><tr><td class=r>12214</td><td>= Mac App Store|Games|Role Playing</td> </tr><tr><td class=r>12215</td><td>= Mac App Store|Games|Simulation</td> </tr><tr><td class=r>12216</td><td>= Mac App Store|Games|Sports</td> </tr><tr><td class=r>12217</td><td>= Mac App Store|Games|Strategy</td> </tr><tr><td class=r>12218</td><td>= Mac App Store|Games|Trivia</td> </tr><tr><td class=r>12219</td><td>= Mac App Store|Games|Word</td> </tr><tr><td class=r>13001</td><td>= App Store|Newsstand|News &amp; Politics</td> </tr><tr><td class=r>13002</td><td>= App Store|Newsstand|Fashion &amp; Style</td> </tr><tr><td class=r>13003</td><td>= App Store|Newsstand|Home &amp; Garden</td> </tr><tr><td class=r>13004</td><td>= App Store|Newsstand|Outdoors &amp; Nature</td> </tr><tr><td class=r>13005</td><td>= App Store|Newsstand|Sports &amp; Leisure</td> </tr><tr><td class=r>13006</td><td>= App Store|Newsstand|Automotive</td> </tr><tr><td class=r>13007</td><td>= App Store|Newsstand|Arts &amp; Photography</td> </tr><tr><td class=r>13008</td><td>= App Store|Newsstand|Brides &amp; Weddings</td> </tr><tr><td class=r>13009</td><td>= App Store|Newsstand|Business &amp; Investing</td> </tr><tr><td class=r>13010</td><td>= App Store|Newsstand|Children&#39;s Magazines</td> </tr><tr><td class=r>13011</td><td>= App Store|Newsstand|Computers &amp; Internet</td> </tr><tr><td class=r>13012</td><td>= App Store|Newsstand|Cooking, Food &amp; Drink</td> </tr><tr><td class=r>13013</td><td>= App Store|Newsstand|Crafts &amp; Hobbies</td> </tr><tr><td class=r>13014</td><td>= App Store|Newsstand|Electronics &amp; Audio</td> </tr><tr><td class=r>13015</td><td>= App Store|Newsstand|Entertainment</td> </tr><tr><td class=r>13017</td><td>= App Store|Newsstand|Health, Mind &amp; Body</td> </tr><tr><td class=r>13018</td><td>= App Store|Newsstand|History</td> </tr><tr><td class=r>13019</td><td>= App Store|Newsstand|Literary Magazines &amp; Journals</td> </tr><tr><td class=r>13020</td><td>= App Store|Newsstand|Men&#39;s Interest</td> </tr><tr><td class=r>13021</td><td>= App Store|Newsstand|Movies &amp; Music</td> </tr><tr><td class=r>13023</td><td>= App Store|Newsstand|Parenting &amp; Family</td> </tr><tr><td class=r>13024</td><td>= App Store|Newsstand|Pets</td> </tr><tr><td class=r>13025</td><td>= App Store|Newsstand|Professional &amp; Trade</td> </tr><tr><td class=r>13026</td><td>= App Store|Newsstand|Regional News</td> </tr><tr><td class=r>13027</td><td>= App Store|Newsstand|Science</td> </tr><tr><td class=r>13028</td><td>= App Store|Newsstand|Teens</td> </tr><tr><td class=r>13029</td><td>= App Store|Newsstand|Travel &amp; Regional</td> </tr><tr><td class=r>13030</td><td>= App Store|Newsstand|Women&#39;s Interest</td> </tr><tr><td class=r>15000</td><td>= Textbooks|Arts &amp; Entertainment</td> </tr><tr><td class=r>15001</td><td>= Textbooks|Arts &amp; Entertainment|Art &amp; Architecture</td> </tr><tr><td class=r>15002</td><td>= Textbooks|Arts &amp; Entertainment|Art &amp; Architecture|Urban Planning</td> </tr><tr><td class=r>15003</td><td>= Textbooks|Arts &amp; Entertainment|Art History</td> </tr><tr><td class=r>15004</td><td>= Textbooks|Arts &amp; Entertainment|Dance</td> </tr><tr><td class=r>15005</td><td>= Textbooks|Arts &amp; Entertainment|Design</td> </tr><tr><td class=r>15006</td><td>= Textbooks|Arts &amp; Entertainment|Fashion</td> </tr><tr><td class=r>15007</td><td>= Textbooks|Arts &amp; Entertainment|Film</td> </tr><tr><td class=r>15008</td><td>= Textbooks|Arts &amp; Entertainment|Games</td> </tr><tr><td class=r>15009</td><td>= Textbooks|Arts &amp; Entertainment|Interior Design</td> </tr><tr><td class=r>15010</td><td>= Textbooks|Arts &amp; Entertainment|Media Arts</td> </tr><tr><td class=r>15011</td><td>= Textbooks|Arts &amp; Entertainment|Music</td> </tr><tr><td class=r>15012</td><td>= Textbooks|Arts &amp; Entertainment|Performing Arts</td> </tr><tr><td class=r>15013</td><td>= Textbooks|Arts &amp; Entertainment|Photography</td> </tr><tr><td class=r>15014</td><td>= Textbooks|Arts &amp; Entertainment|Theater</td> </tr><tr><td class=r>15015</td><td>= Textbooks|Arts &amp; Entertainment|TV</td> </tr><tr><td class=r>15016</td><td>= Textbooks|Arts &amp; Entertainment|Visual Arts</td> </tr><tr><td class=r>15017</td><td>= Textbooks|Biographies &amp; Memoirs</td> </tr><tr><td class=r>15018</td><td>= Textbooks|Business &amp; Personal Finance</td> </tr><tr><td class=r>15019</td><td>= Textbooks|Business &amp; Personal Finance|Accounting</td> </tr><tr><td class=r>15020</td><td>= Textbooks|Business &amp; Personal Finance|Careers</td> </tr><tr><td class=r>15021</td><td>= Textbooks|Business &amp; Personal Finance|Economics</td> </tr><tr><td class=r>15022</td><td>= Textbooks|Business &amp; Personal Finance|Finance</td> </tr><tr><td class=r>15023</td><td>= Textbooks|Business &amp; Personal Finance|Hospitality</td> </tr><tr><td class=r>15024</td><td>= Textbooks|Business &amp; Personal Finance|Industries &amp; Professions</td> </tr><tr><td class=r>15025</td><td>= Textbooks|Business &amp; Personal Finance|Investing</td> </tr><tr><td class=r>15026</td><td>= Textbooks|Business &amp; Personal Finance|Management &amp; Leadership</td> </tr><tr><td class=r>15027</td><td>= Textbooks|Business &amp; Personal Finance|Marketing &amp; Sales</td> </tr><tr><td class=r>15028</td><td>= Textbooks|Business &amp; Personal Finance|Personal Finance</td> </tr><tr><td class=r>15029</td><td>= Textbooks|Business &amp; Personal Finance|Real Estate</td> </tr><tr><td class=r>15030</td><td>= Textbooks|Business &amp; Personal Finance|Reference</td> </tr><tr><td class=r>15031</td><td>= Textbooks|Business &amp; Personal Finance|Small Business &amp; Entrepreneurship</td> </tr><tr><td class=r>15032</td><td>= Textbooks|Children &amp; Teens</td> </tr><tr><td class=r>15033</td><td>= Textbooks|Children &amp; Teens|Fiction</td> </tr><tr><td class=r>15034</td><td>= Textbooks|Children &amp; Teens|Nonfiction</td> </tr><tr><td class=r>15035</td><td>= Textbooks|Comics &amp; Graphic Novels</td> </tr><tr><td class=r>15036</td><td>= Textbooks|Comics &amp; Graphic Novels|Graphic Novels</td> </tr><tr><td class=r>15037</td><td>= Textbooks|Comics &amp; Graphic Novels|Manga</td> </tr><tr><td class=r>15038</td><td>= Textbooks|Communications &amp; Media</td> </tr><tr><td class=r>15039</td><td>= Textbooks|Communications &amp; Media|Broadcasting</td> </tr><tr><td class=r>15040</td><td>= Textbooks|Communications &amp; Media|Digital Media</td> </tr><tr><td class=r>15041</td><td>= Textbooks|Communications &amp; Media|Journalism</td> </tr><tr><td class=r>15042</td><td>= Textbooks|Communications &amp; Media|Photojournalism</td> </tr><tr><td class=r>15043</td><td>= Textbooks|Communications &amp; Media|Print</td> </tr><tr><td class=r>15044</td><td>= Textbooks|Communications &amp; Media|Speech</td> </tr><tr><td class=r>15045</td><td>= Textbooks|Communications &amp; Media|Writing</td> </tr><tr><td class=r>15046</td><td>= Textbooks|Computers &amp; Internet</td> </tr><tr><td class=r>15047</td><td>= Textbooks|Computers &amp; Internet|Computers</td> </tr><tr><td class=r>15048</td><td>= Textbooks|Computers &amp; Internet|Databases</td> </tr><tr><td class=r>15049</td><td>= Textbooks|Computers &amp; Internet|Digital Media</td> </tr><tr><td class=r>15050</td><td>= Textbooks|Computers &amp; Internet|Internet</td> </tr><tr><td class=r>15051</td><td>= Textbooks|Computers &amp; Internet|Network</td> </tr><tr><td class=r>15052</td><td>= Textbooks|Computers &amp; Internet|Operating Systems</td> </tr><tr><td class=r>15053</td><td>= Textbooks|Computers &amp; Internet|Programming</td> </tr><tr><td class=r>15054</td><td>= Textbooks|Computers &amp; Internet|Software</td> </tr><tr><td class=r>15055</td><td>= Textbooks|Computers &amp; Internet|System Administration</td> </tr><tr><td class=r>15056</td><td>= Textbooks|Cookbooks, Food &amp; Wine</td> </tr><tr><td class=r>15057</td><td>= Textbooks|Cookbooks, Food &amp; Wine|Beverages</td> </tr><tr><td class=r>15058</td><td>= Textbooks|Cookbooks, Food &amp; Wine|Courses &amp; Dishes</td> </tr><tr><td class=r>15059</td><td>= Textbooks|Cookbooks, Food &amp; Wine|Culinary Arts</td> </tr><tr><td class=r>15060</td><td>= Textbooks|Cookbooks, Food &amp; Wine|Methods</td> </tr><tr><td class=r>15061</td><td>= Textbooks|Cookbooks, Food &amp; Wine|Reference</td> </tr><tr><td class=r>15062</td><td>= Textbooks|Cookbooks, Food &amp; Wine|Regional &amp; Ethnic</td> </tr><tr><td class=r>15063</td><td>= Textbooks|Cookbooks, Food &amp; Wine|Special Diet</td> </tr><tr><td class=r>15064</td><td>= Textbooks|Cookbooks, Food &amp; Wine|Special Occasions</td> </tr><tr><td class=r>15065</td><td>= Textbooks|Cookbooks, Food &amp; Wine|Specific Ingredients</td> </tr><tr><td class=r>15066</td><td>= Textbooks|Engineering</td> </tr><tr><td class=r>15067</td><td>= Textbooks|Engineering|Aeronautics</td> </tr><tr><td class=r>15068</td><td>= Textbooks|Engineering|Chemical &amp; Petroleum Engineering</td> </tr><tr><td class=r>15069</td><td>= Textbooks|Engineering|Civil Engineering</td> </tr><tr><td class=r>15070</td><td>= Textbooks|Engineering|Computer Science</td> </tr><tr><td class=r>15071</td><td>= Textbooks|Engineering|Electrical Engineering</td> </tr><tr><td class=r>15072</td><td>= Textbooks|Engineering|Environmental Engineering</td> </tr><tr><td class=r>15073</td><td>= Textbooks|Engineering|Mechanical Engineering</td> </tr><tr><td class=r>15074</td><td>= Textbooks|Engineering|Power Resources</td> </tr><tr><td class=r>15075</td><td>= Textbooks|Fiction &amp; Literature</td> </tr><tr><td class=r>15076</td><td>= Textbooks|Fiction &amp; Literature|Latino</td> </tr><tr><td class=r>15077</td><td>= Textbooks|Fiction &amp; Literature|Action &amp; Adventure</td> </tr><tr><td class=r>15078</td><td>= Textbooks|Fiction &amp; Literature|African American</td> </tr><tr><td class=r>15079</td><td>= Textbooks|Fiction &amp; Literature|Anthologies</td> </tr><tr><td class=r>15080</td><td>= Textbooks|Fiction &amp; Literature|Classics</td> </tr><tr><td class=r>15081</td><td>= Textbooks|Fiction &amp; Literature|Comparative Literature</td> </tr><tr><td class=r>15082</td><td>= Textbooks|Fiction &amp; Literature|Erotica</td> </tr><tr><td class=r>15083</td><td>= Textbooks|Fiction &amp; Literature|Gay</td> </tr><tr><td class=r>15084</td><td>= Textbooks|Fiction &amp; Literature|Ghost</td> </tr><tr><td class=r>15085</td><td>= Textbooks|Fiction &amp; Literature|Historical</td> </tr><tr><td class=r>15086</td><td>= Textbooks|Fiction &amp; Literature|Horror</td> </tr><tr><td class=r>15087</td><td>= Textbooks|Fiction &amp; Literature|Literary</td> </tr><tr><td class=r>15088</td><td>= Textbooks|Fiction &amp; Literature|Literary Criticism</td> </tr><tr><td class=r>15089</td><td>= Textbooks|Fiction &amp; Literature|Poetry</td> </tr><tr><td class=r>15090</td><td>= Textbooks|Fiction &amp; Literature|Religious</td> </tr><tr><td class=r>15091</td><td>= Textbooks|Fiction &amp; Literature|Short Stories</td> </tr><tr><td class=r>15092</td><td>= Textbooks|Health, Mind &amp; Body</td> </tr><tr><td class=r>15093</td><td>= Textbooks|Health, Mind &amp; Body|Fitness</td> </tr><tr><td class=r>15094</td><td>= Textbooks|Health, Mind &amp; Body|Self-Improvement</td> </tr><tr><td class=r>15095</td><td>= Textbooks|History</td> </tr><tr><td class=r>15096</td><td>= Textbooks|History|Africa</td> </tr><tr><td class=r>15097</td><td>= Textbooks|History|Americas</td> </tr><tr><td class=r>15098</td><td>= Textbooks|History|Americas|Canada</td> </tr><tr><td class=r>15099</td><td>= Textbooks|History|Americas|Latin America</td> </tr><tr><td class=r>15100</td><td>= Textbooks|History|Americas|United States</td> </tr><tr><td class=r>15101</td><td>= Textbooks|History|Ancient</td> </tr><tr><td class=r>15102</td><td>= Textbooks|History|Asia</td> </tr><tr><td class=r>15103</td><td>= Textbooks|History|Australia &amp; Oceania</td> </tr><tr><td class=r>15104</td><td>= Textbooks|History|Europe</td> </tr><tr><td class=r>15105</td><td>= Textbooks|History|Middle East</td> </tr><tr><td class=r>15106</td><td>= Textbooks|History|Military</td> </tr><tr><td class=r>15107</td><td>= Textbooks|History|World</td> </tr><tr><td class=r>15108</td><td>= Textbooks|Humor</td> </tr><tr><td class=r>15109</td><td>= Textbooks|Language Studies</td> </tr><tr><td class=r>15110</td><td>= Textbooks|Language Studies|African Languages</td> </tr><tr><td class=r>15111</td><td>= Textbooks|Language Studies|Ancient Languages</td> </tr><tr><td class=r>15112</td><td>= Textbooks|Language Studies|Arabic</td> </tr><tr><td class=r>15113</td><td>= Textbooks|Language Studies|Bilingual Editions</td> </tr><tr><td class=r>15114</td><td>= Textbooks|Language Studies|Chinese</td> </tr><tr><td class=r>15115</td><td>= Textbooks|Language Studies|English</td> </tr><tr><td class=r>15116</td><td>= Textbooks|Language Studies|French</td> </tr><tr><td class=r>15117</td><td>= Textbooks|Language Studies|German</td> </tr><tr><td class=r>15118</td><td>= Textbooks|Language Studies|Hebrew</td> </tr><tr><td class=r>15119</td><td>= Textbooks|Language Studies|Hindi</td> </tr><tr><td class=r>15120</td><td>= Textbooks|Language Studies|Indigenous Languages</td> </tr><tr><td class=r>15121</td><td>= Textbooks|Language Studies|Italian</td> </tr><tr><td class=r>15122</td><td>= Textbooks|Language Studies|Japanese</td> </tr><tr><td class=r>15123</td><td>= Textbooks|Language Studies|Korean</td> </tr><tr><td class=r>15124</td><td>= Textbooks|Language Studies|Linguistics</td> </tr><tr><td class=r>15125</td><td>= Textbooks|Language Studies|Other Language</td> </tr><tr><td class=r>15126</td><td>= Textbooks|Language Studies|Portuguese</td> </tr><tr><td class=r>15127</td><td>= Textbooks|Language Studies|Russian</td> </tr><tr><td class=r>15128</td><td>= Textbooks|Language Studies|Spanish</td> </tr><tr><td class=r>15129</td><td>= Textbooks|Language Studies|Speech Pathology</td> </tr><tr><td class=r>15130</td><td>= Textbooks|Lifestyle &amp; Home</td> </tr><tr><td class=r>15131</td><td>= Textbooks|Lifestyle &amp; Home|Antiques &amp; Collectibles</td> </tr><tr><td class=r>15132</td><td>= Textbooks|Lifestyle &amp; Home|Crafts &amp; Hobbies</td> </tr><tr><td class=r>15133</td><td>= Textbooks|Lifestyle &amp; Home|Gardening</td> </tr><tr><td class=r>15134</td><td>= Textbooks|Lifestyle &amp; Home|Pets</td> </tr><tr><td class=r>15135</td><td>= Textbooks|Mathematics</td> </tr><tr><td class=r>15136</td><td>= Textbooks|Mathematics|Advanced Mathematics</td> </tr><tr><td class=r>15137</td><td>= Textbooks|Mathematics|Algebra</td> </tr><tr><td class=r>15138</td><td>= Textbooks|Mathematics|Arithmetic</td> </tr><tr><td class=r>15139</td><td>= Textbooks|Mathematics|Calculus</td> </tr><tr><td class=r>15140</td><td>= Textbooks|Mathematics|Geometry</td> </tr><tr><td class=r>15141</td><td>= Textbooks|Mathematics|Statistics</td> </tr><tr><td class=r>15142</td><td>= Textbooks|Medicine</td> </tr><tr><td class=r>15143</td><td>= Textbooks|Medicine|Anatomy &amp; Physiology</td> </tr><tr><td class=r>15144</td><td>= Textbooks|Medicine|Dentistry</td> </tr><tr><td class=r>15145</td><td>= Textbooks|Medicine|Emergency Medicine</td> </tr><tr><td class=r>15146</td><td>= Textbooks|Medicine|Genetics</td> </tr><tr><td class=r>15147</td><td>= Textbooks|Medicine|Immunology</td> </tr><tr><td class=r>15148</td><td>= Textbooks|Medicine|Neuroscience</td> </tr><tr><td class=r>15149</td><td>= Textbooks|Medicine|Nursing</td> </tr><tr><td class=r>15150</td><td>= Textbooks|Medicine|Pharmacology &amp; Toxicology</td> </tr><tr><td class=r>15151</td><td>= Textbooks|Medicine|Psychiatry</td> </tr><tr><td class=r>15152</td><td>= Textbooks|Medicine|Psychology</td> </tr><tr><td class=r>15153</td><td>= Textbooks|Medicine|Radiology</td> </tr><tr><td class=r>15154</td><td>= Textbooks|Medicine|Veterinary</td> </tr><tr><td class=r>15155</td><td>= Textbooks|Mysteries &amp; Thrillers</td> </tr><tr><td class=r>15156</td><td>= Textbooks|Mysteries &amp; Thrillers|British Detectives</td> </tr><tr><td class=r>15157</td><td>= Textbooks|Mysteries &amp; Thrillers|Hard-Boiled</td> </tr><tr><td class=r>15158</td><td>= Textbooks|Mysteries &amp; Thrillers|Historical</td> </tr><tr><td class=r>15159</td><td>= Textbooks|Mysteries &amp; Thrillers|Police Procedural</td> </tr><tr><td class=r>15160</td><td>= Textbooks|Mysteries &amp; Thrillers|Short Stories</td> </tr><tr><td class=r>15161</td><td>= Textbooks|Mysteries &amp; Thrillers|Women Sleuths</td> </tr><tr><td class=r>15162</td><td>= Textbooks|Nonfiction</td> </tr><tr><td class=r>15163</td><td>= Textbooks|Nonfiction|Family &amp; Relationships</td> </tr><tr><td class=r>15164</td><td>= Textbooks|Nonfiction|Transportation</td> </tr><tr><td class=r>15165</td><td>= Textbooks|Nonfiction|True Crime</td> </tr><tr><td class=r>15166</td><td>= Textbooks|Parenting</td> </tr><tr><td class=r>15167</td><td>= Textbooks|Philosophy</td> </tr><tr><td class=r>15168</td><td>= Textbooks|Philosophy|Aesthetics</td> </tr><tr><td class=r>15169</td><td>= Textbooks|Philosophy|Epistemology</td> </tr><tr><td class=r>15170</td><td>= Textbooks|Philosophy|Ethics</td> </tr><tr><td class=r>15171</td><td>= Textbooks|Philosophy|Philosophy of Language</td> </tr><tr><td class=r>15172</td><td>= Textbooks|Philosophy|Logic</td> </tr><tr><td class=r>15173</td><td>= Textbooks|Philosophy|Metaphysics</td> </tr><tr><td class=r>15174</td><td>= Textbooks|Philosophy|Political Philosophy</td> </tr><tr><td class=r>15175</td><td>= Textbooks|Philosophy|Philosophy of Religion</td> </tr><tr><td class=r>15176</td><td>= Textbooks|Politics &amp; Current Events</td> </tr><tr><td class=r>15177</td><td>= Textbooks|Politics &amp; Current Events|Current Events</td> </tr><tr><td class=r>15178</td><td>= Textbooks|Politics &amp; Current Events|Foreign Policy &amp; International Relations</td> </tr><tr><td class=r>15179</td><td>= Textbooks|Politics &amp; Current Events|Local Governments</td> </tr><tr><td class=r>15180</td><td>= Textbooks|Politics &amp; Current Events|National Governments</td> </tr><tr><td class=r>15181</td><td>= Textbooks|Politics &amp; Current Events|Political Science</td> </tr><tr><td class=r>15182</td><td>= Textbooks|Politics &amp; Current Events|Public Administration</td> </tr><tr><td class=r>15183</td><td>= Textbooks|Politics &amp; Current Events|World Affairs</td> </tr><tr><td class=r>15184</td><td>= Textbooks|Professional &amp; Technical</td> </tr><tr><td class=r>15185</td><td>= Textbooks|Professional &amp; Technical|Design</td> </tr><tr><td class=r>15186</td><td>= Textbooks|Professional &amp; Technical|Language Arts &amp; Disciplines</td> </tr><tr><td class=r>15187</td><td>= Textbooks|Professional &amp; Technical|Engineering</td> </tr><tr><td class=r>15188</td><td>= Textbooks|Professional &amp; Technical|Law</td> </tr><tr><td class=r>15189</td><td>= Textbooks|Professional &amp; Technical|Medical</td> </tr><tr><td class=r>15190</td><td>= Textbooks|Reference</td> </tr><tr><td class=r>15191</td><td>= Textbooks|Reference|Almanacs &amp; Yearbooks</td> </tr><tr><td class=r>15192</td><td>= Textbooks|Reference|Atlases &amp; Maps</td> </tr><tr><td class=r>15193</td><td>= Textbooks|Reference|Catalogs &amp; Directories</td> </tr><tr><td class=r>15194</td><td>= Textbooks|Reference|Consumer Guides</td> </tr><tr><td class=r>15195</td><td>= Textbooks|Reference|Dictionaries &amp; Thesauruses</td> </tr><tr><td class=r>15196</td><td>= Textbooks|Reference|Encyclopedias</td> </tr><tr><td class=r>15197</td><td>= Textbooks|Reference|Etiquette</td> </tr><tr><td class=r>15198</td><td>= Textbooks|Reference|Quotations</td> </tr><tr><td class=r>15199</td><td>= Textbooks|Reference|Study Aids</td> </tr><tr><td class=r>15200</td><td>= Textbooks|Reference|Words &amp; Language</td> </tr><tr><td class=r>15201</td><td>= Textbooks|Reference|Writing</td> </tr><tr><td class=r>15202</td><td>= Textbooks|Religion &amp; Spirituality</td> </tr><tr><td class=r>15203</td><td>= Textbooks|Religion &amp; Spirituality|Bible Studies</td> </tr><tr><td class=r>15204</td><td>= Textbooks|Religion &amp; Spirituality|Bibles</td> </tr><tr><td class=r>15205</td><td>= Textbooks|Religion &amp; Spirituality|Buddhism</td> </tr><tr><td class=r>15206</td><td>= Textbooks|Religion &amp; Spirituality|Christianity</td> </tr><tr><td class=r>15207</td><td>= Textbooks|Religion &amp; Spirituality|Comparative Religion</td> </tr><tr><td class=r>15208</td><td>= Textbooks|Religion &amp; Spirituality|Hinduism</td> </tr><tr><td class=r>15209</td><td>= Textbooks|Religion &amp; Spirituality|Islam</td> </tr><tr><td class=r>15210</td><td>= Textbooks|Religion &amp; Spirituality|Judaism</td> </tr><tr><td class=r>15211</td><td>= Textbooks|Religion &amp; Spirituality|Spirituality</td> </tr><tr><td class=r>15212</td><td>= Textbooks|Romance</td> </tr><tr><td class=r>15213</td><td>= Textbooks|Romance|Contemporary</td> </tr><tr><td class=r>15214</td><td>= Textbooks|Romance|Erotic Romance</td> </tr><tr><td class=r>15215</td><td>= Textbooks|Romance|Paranormal</td> </tr><tr><td class=r>15216</td><td>= Textbooks|Romance|Historical</td> </tr><tr><td class=r>15217</td><td>= Textbooks|Romance|Short Stories</td> </tr><tr><td class=r>15218</td><td>= Textbooks|Romance|Suspense</td> </tr><tr><td class=r>15219</td><td>= Textbooks|Romance|Western</td> </tr><tr><td class=r>15220</td><td>= Textbooks|Sci-Fi &amp; Fantasy</td> </tr><tr><td class=r>15221</td><td>= Textbooks|Sci-Fi &amp; Fantasy|Fantasy</td> </tr><tr><td class=r>15222</td><td>= Textbooks|Sci-Fi &amp; Fantasy|Fantasy|Contemporary</td> </tr><tr><td class=r>15223</td><td>= Textbooks|Sci-Fi &amp; Fantasy|Fantasy|Epic</td> </tr><tr><td class=r>15224</td><td>= Textbooks|Sci-Fi &amp; Fantasy|Fantasy|Historical</td> </tr><tr><td class=r>15225</td><td>= Textbooks|Sci-Fi &amp; Fantasy|Fantasy|Paranormal</td> </tr><tr><td class=r>15226</td><td>= Textbooks|Sci-Fi &amp; Fantasy|Fantasy|Short Stories</td> </tr><tr><td class=r>15227</td><td>= Textbooks|Sci-Fi &amp; Fantasy|Science Fiction</td> </tr><tr><td class=r>15228</td><td>= Textbooks|Sci-Fi &amp; Fantasy|Science Fiction &amp; Literature</td> </tr><tr><td class=r>15229</td><td>= Textbooks|Sci-Fi &amp; Fantasy|Science Fiction &amp; Literature|Adventure</td> </tr><tr><td class=r>15230</td><td>= Textbooks|Sci-Fi &amp; Fantasy|Science Fiction &amp; Literature|High Tech</td> </tr><tr><td class=r>15231</td><td>= Textbooks|Sci-Fi &amp; Fantasy|Science Fiction &amp; Literature|Short Stories</td> </tr><tr><td class=r>15232</td><td>= Textbooks|Science &amp; Nature</td> </tr><tr><td class=r>15233</td><td>= Textbooks|Science &amp; Nature|Agriculture</td> </tr><tr><td class=r>15234</td><td>= Textbooks|Science &amp; Nature|Astronomy</td> </tr><tr><td class=r>15235</td><td>= Textbooks|Science &amp; Nature|Atmosphere</td> </tr><tr><td class=r>15236</td><td>= Textbooks|Science &amp; Nature|Biology</td> </tr><tr><td class=r>15237</td><td>= Textbooks|Science &amp; Nature|Chemistry</td> </tr><tr><td class=r>15238</td><td>= Textbooks|Science &amp; Nature|Earth Sciences</td> </tr><tr><td class=r>15239</td><td>= Textbooks|Science &amp; Nature|Ecology</td> </tr><tr><td class=r>15240</td><td>= Textbooks|Science &amp; Nature|Environment</td> </tr><tr><td class=r>15241</td><td>= Textbooks|Science &amp; Nature|Essays</td> </tr><tr><td class=r>15242</td><td>= Textbooks|Science &amp; Nature|Geography</td> </tr><tr><td class=r>15243</td><td>= Textbooks|Science &amp; Nature|Geology</td> </tr><tr><td class=r>15244</td><td>= Textbooks|Science &amp; Nature|History</td> </tr><tr><td class=r>15245</td><td>= Textbooks|Science &amp; Nature|Life Sciences</td> </tr><tr><td class=r>15246</td><td>= Textbooks|Science &amp; Nature|Nature</td> </tr><tr><td class=r>15247</td><td>= Textbooks|Science &amp; Nature|Physics</td> </tr><tr><td class=r>15248</td><td>= Textbooks|Science &amp; Nature|Reference</td> </tr><tr><td class=r>15249</td><td>= Textbooks|Social Science</td> </tr><tr><td class=r>15250</td><td>= Textbooks|Social Science|Anthropology</td> </tr><tr><td class=r>15251</td><td>= Textbooks|Social Science|Archaeology</td> </tr><tr><td class=r>15252</td><td>= Textbooks|Social Science|Civics</td> </tr><tr><td class=r>15253</td><td>= Textbooks|Social Science|Government</td> </tr><tr><td class=r>15254</td><td>= Textbooks|Social Science|Social Studies</td> </tr><tr><td class=r>15255</td><td>= Textbooks|Social Science|Social Welfare</td> </tr><tr><td class=r>15256</td><td>= Textbooks|Social Science|Society</td> </tr><tr><td class=r>15257</td><td>= Textbooks|Social Science|Society|African Studies</td> </tr><tr><td class=r>15258</td><td>= Textbooks|Social Science|Society|American Studies</td> </tr><tr><td class=r>15259</td><td>= Textbooks|Social Science|Society|Asia Pacific Studies</td> </tr><tr><td class=r>15260</td><td>= Textbooks|Social Science|Society|Cross-Cultural Studies</td> </tr><tr><td class=r>15261</td><td>= Textbooks|Social Science|Society|European Studies</td> </tr><tr><td class=r>15262</td><td>= Textbooks|Social Science|Society|Immigration &amp; Emigration</td> </tr><tr><td class=r>15263</td><td>= Textbooks|Social Science|Society|Indigenous Studies</td> </tr><tr><td class=r>15264</td><td>= Textbooks|Social Science|Society|Latin &amp; Caribbean Studies</td> </tr><tr><td class=r>15265</td><td>= Textbooks|Social Science|Society|Middle Eastern Studies</td> </tr><tr><td class=r>15266</td><td>= Textbooks|Social Science|Society|Race &amp; Ethnicity Studies</td> </tr><tr><td class=r>15267</td><td>= Textbooks|Social Science|Society|Sexuality Studies</td> </tr><tr><td class=r>15268</td><td>= Textbooks|Social Science|Society|Women&#39;s Studies</td> </tr><tr><td class=r>15269</td><td>= Textbooks|Social Science|Sociology</td> </tr><tr><td class=r>15270</td><td>= Textbooks|Sports &amp; Outdoors</td> </tr><tr><td class=r>15271</td><td>= Textbooks|Sports &amp; Outdoors|Baseball</td> </tr><tr><td class=r>15272</td><td>= Textbooks|Sports &amp; Outdoors|Basketball</td> </tr><tr><td class=r>15273</td><td>= Textbooks|Sports &amp; Outdoors|Coaching</td> </tr><tr><td class=r>15274</td><td>= Textbooks|Sports &amp; Outdoors|Equestrian</td> </tr><tr><td class=r>15275</td><td>= Textbooks|Sports &amp; Outdoors|Extreme Sports</td> </tr><tr><td class=r>15276</td><td>= Textbooks|Sports &amp; Outdoors|Football</td> </tr><tr><td class=r>15277</td><td>= Textbooks|Sports &amp; Outdoors|Golf</td> </tr><tr><td class=r>15278</td><td>= Textbooks|Sports &amp; Outdoors|Hockey</td> </tr><tr><td class=r>15279</td><td>= Textbooks|Sports &amp; Outdoors|Motor Sports</td> </tr><tr><td class=r>15280</td><td>= Textbooks|Sports &amp; Outdoors|Mountaineering</td> </tr><tr><td class=r>15281</td><td>= Textbooks|Sports &amp; Outdoors|Outdoors</td> </tr><tr><td class=r>15282</td><td>= Textbooks|Sports &amp; Outdoors|Racket Sports</td> </tr><tr><td class=r>15283</td><td>= Textbooks|Sports &amp; Outdoors|Reference</td> </tr><tr><td class=r>15284</td><td>= Textbooks|Sports &amp; Outdoors|Soccer</td> </tr><tr><td class=r>15285</td><td>= Textbooks|Sports &amp; Outdoors|Training</td> </tr><tr><td class=r>15286</td><td>= Textbooks|Sports &amp; Outdoors|Water Sports</td> </tr><tr><td class=r>15287</td><td>= Textbooks|Sports &amp; Outdoors|Winter Sports</td> </tr><tr><td class=r>15288</td><td>= Textbooks|Teaching &amp; Learning</td> </tr><tr><td class=r>15289</td><td>= Textbooks|Teaching &amp; Learning|Adult Education</td> </tr><tr><td class=r>15290</td><td>= Textbooks|Teaching &amp; Learning|Curriculum &amp; Teaching</td> </tr><tr><td class=r>15291</td><td>= Textbooks|Teaching &amp; Learning|Educational Leadership</td> </tr><tr><td class=r>15292</td><td>= Textbooks|Teaching &amp; Learning|Educational Technology</td> </tr><tr><td class=r>15293</td><td>= Textbooks|Teaching &amp; Learning|Family &amp; Childcare</td> </tr><tr><td class=r>15294</td><td>= Textbooks|Teaching &amp; Learning|Information &amp; Library Science</td> </tr><tr><td class=r>15295</td><td>= Textbooks|Teaching &amp; Learning|Learning Resources</td> </tr><tr><td class=r>15296</td><td>= Textbooks|Teaching &amp; Learning|Psychology &amp; Research</td> </tr><tr><td class=r>15297</td><td>= Textbooks|Teaching &amp; Learning|Special Education</td> </tr><tr><td class=r>15298</td><td>= Textbooks|Travel &amp; Adventure</td> </tr><tr><td class=r>15299</td><td>= Textbooks|Travel &amp; Adventure|Africa</td> </tr><tr><td class=r>15300</td><td>= Textbooks|Travel &amp; Adventure|Americas</td> </tr><tr><td class=r>15301</td><td>= Textbooks|Travel &amp; Adventure|Americas|Canada</td> </tr><tr><td class=r>15302</td><td>= Textbooks|Travel &amp; Adventure|Americas|Latin America</td> </tr><tr><td class=r>15303</td><td>= Textbooks|Travel &amp; Adventure|Americas|United States</td> </tr><tr><td class=r>15304</td><td>= Textbooks|Travel &amp; Adventure|Asia</td> </tr><tr><td class=r>15305</td><td>= Textbooks|Travel &amp; Adventure|Caribbean</td> </tr><tr><td class=r>15306</td><td>= Textbooks|Travel &amp; Adventure|Essays &amp; Memoirs</td> </tr><tr><td class=r>15307</td><td>= Textbooks|Travel &amp; Adventure|Europe</td> </tr><tr><td class=r>15308</td><td>= Textbooks|Travel &amp; Adventure|Middle East</td> </tr><tr><td class=r>15309</td><td>= Textbooks|Travel &amp; Adventure|Oceania</td> </tr><tr><td class=r>15310</td><td>= Textbooks|Travel &amp; Adventure|Specialty Travel</td> </tr><tr><td class=r>15311</td><td>= Textbooks|Comics &amp; Graphic Novels|Comics</td> </tr><tr><td class=r>15312</td><td>= Textbooks|Reference|Manuals</td> </tr><tr><td class=r>100000</td><td>= Music|Christian &amp; Gospel</td> </tr><tr><td class=r>100001</td><td>= Music|Classical|Art Song</td> </tr><tr><td class=r>100002</td><td>= Music|Classical|Brass &amp; Woodwinds</td> </tr><tr><td class=r>100003</td><td>= Music|Classical|Solo Instrumental</td> </tr><tr><td class=r>100004</td><td>= Music|Classical|Contemporary Era</td> </tr><tr><td class=r>100005</td><td>= Music|Classical|Oratorio</td> </tr><tr><td class=r>100006</td><td>= Music|Classical|Cantata</td> </tr><tr><td class=r>100007</td><td>= Music|Classical|Electronic</td> </tr><tr><td class=r>100008</td><td>= Music|Classical|Sacred</td> </tr><tr><td class=r>100009</td><td>= Music|Classical|Guitar</td> </tr><tr><td class=r>100010</td><td>= Music|Classical|Piano</td> </tr><tr><td class=r>100011</td><td>= Music|Classical|Violin</td> </tr><tr><td class=r>100012</td><td>= Music|Classical|Cello</td> </tr><tr><td class=r>100013</td><td>= Music|Classical|Percussion</td> </tr><tr><td class=r>100014</td><td>= Music|Electronic|Dubstep</td> </tr><tr><td class=r>100015</td><td>= Music|Electronic|Bass</td> </tr><tr><td class=r>100016</td><td>= Music|Hip-Hop/Rap|UK Hip-Hop</td> </tr><tr><td class=r>100017</td><td>= Music|Reggae|Lovers Rock</td> </tr><tr><td class=r>100018</td><td>= Music|Alternative|EMO</td> </tr><tr><td class=r>100019</td><td>= Music|Alternative|Pop Punk</td> </tr><tr><td class=r>100020</td><td>= Music|Alternative|Indie Pop</td> </tr><tr><td class=r>100021</td><td>= Music|New Age|Yoga</td> </tr><tr><td class=r>100022</td><td>= Music|Pop|Tribute</td> </tr><tr><td class=r>40000000</td><td>= iTunes U</td> </tr><tr><td class=r>40000001</td><td>= iTunes U|Business</td> </tr><tr><td class=r>40000002</td><td>= iTunes U|Business|Economics</td> </tr><tr><td class=r>40000003</td><td>= iTunes U|Business|Finance</td> </tr><tr><td class=r>40000004</td><td>= iTunes U|Business|Hospitality</td> </tr><tr><td class=r>40000005</td><td>= iTunes U|Business|Management</td> </tr><tr><td class=r>40000006</td><td>= iTunes U|Business|Marketing</td> </tr><tr><td class=r>40000007</td><td>= iTunes U|Business|Personal Finance</td> </tr><tr><td class=r>40000008</td><td>= iTunes U|Business|Real Estate</td> </tr><tr><td class=r>40000009</td><td>= iTunes U|Engineering</td> </tr><tr><td class=r>40000010</td><td>= iTunes U|Engineering|Chemical &amp; Petroleum Engineering</td> </tr><tr><td class=r>40000011</td><td>= iTunes U|Engineering|Civil Engineering</td> </tr><tr><td class=r>40000012</td><td>= iTunes U|Engineering|Computer Science</td> </tr><tr><td class=r>40000013</td><td>= iTunes U|Engineering|Electrical Engineering</td> </tr><tr><td class=r>40000014</td><td>= iTunes U|Engineering|Environmental Engineering</td> </tr><tr><td class=r>40000015</td><td>= iTunes U|Engineering|Mechanical Engineering</td> </tr><tr><td class=r>40000016</td><td>= iTunes U|Art &amp; Architecture</td> </tr><tr><td class=r>40000017</td><td>= iTunes U|Art &amp; Architecture|Architecture</td> </tr><tr><td class=r>40000019</td><td>= iTunes U|Art &amp; Architecture|Art History</td> </tr><tr><td class=r>40000020</td><td>= iTunes U|Art &amp; Architecture|Dance</td> </tr><tr><td class=r>40000021</td><td>= iTunes U|Art &amp; Architecture|Film</td> </tr><tr><td class=r>40000022</td><td>= iTunes U|Art &amp; Architecture|Design</td> </tr><tr><td class=r>40000023</td><td>= iTunes U|Art &amp; Architecture|Interior Design</td> </tr><tr><td class=r>40000024</td><td>= iTunes U|Art &amp; Architecture|Music</td> </tr><tr><td class=r>40000025</td><td>= iTunes U|Art &amp; Architecture|Theater</td> </tr><tr><td class=r>40000026</td><td>= iTunes U|Health &amp; Medicine</td> </tr><tr><td class=r>40000027</td><td>= iTunes U|Health &amp; Medicine|Anatomy &amp; Physiology</td> </tr><tr><td class=r>40000028</td><td>= iTunes U|Health &amp; Medicine|Behavioral Science</td> </tr><tr><td class=r>40000029</td><td>= iTunes U|Health &amp; Medicine|Dentistry</td> </tr><tr><td class=r>40000030</td><td>= iTunes U|Health &amp; Medicine|Diet &amp; Nutrition</td> </tr><tr><td class=r>40000031</td><td>= iTunes U|Health &amp; Medicine|Emergency Medicine</td> </tr><tr><td class=r>40000032</td><td>= iTunes U|Health &amp; Medicine|Genetics</td> </tr><tr><td class=r>40000033</td><td>= iTunes U|Health &amp; Medicine|Gerontology</td> </tr><tr><td class=r>40000034</td><td>= iTunes U|Health &amp; Medicine|Health &amp; Exercise Science</td> </tr><tr><td class=r>40000035</td><td>= iTunes U|Health &amp; Medicine|Immunology</td> </tr><tr><td class=r>40000036</td><td>= iTunes U|Health &amp; Medicine|Neuroscience</td> </tr><tr><td class=r>40000037</td><td>= iTunes U|Health &amp; Medicine|Pharmacology &amp; Toxicology</td> </tr><tr><td class=r>40000038</td><td>= iTunes U|Health &amp; Medicine|Psychiatry</td> </tr><tr><td class=r>40000039</td><td>= iTunes U|Health &amp; Medicine|Global Health</td> </tr><tr><td class=r>40000040</td><td>= iTunes U|Health &amp; Medicine|Radiology</td> </tr><tr><td class=r>40000041</td><td>= iTunes U|History</td> </tr><tr><td class=r>40000042</td><td>= iTunes U|History|Ancient History</td> </tr><tr><td class=r>40000043</td><td>= iTunes U|History|Medieval History</td> </tr><tr><td class=r>40000044</td><td>= iTunes U|History|Military History</td> </tr><tr><td class=r>40000045</td><td>= iTunes U|History|Modern History</td> </tr><tr><td class=r>40000046</td><td>= iTunes U|History|African History</td> </tr><tr><td class=r>40000047</td><td>= iTunes U|History|Asia-Pacific History</td> </tr><tr><td class=r>40000048</td><td>= iTunes U|History|European History</td> </tr><tr><td class=r>40000049</td><td>= iTunes U|History|Middle Eastern History</td> </tr><tr><td class=r>40000050</td><td>= iTunes U|History|North American History</td> </tr><tr><td class=r>40000051</td><td>= iTunes U|History|South American History</td> </tr><tr><td class=r>40000053</td><td>= iTunes U|Communications &amp; Media</td> </tr><tr><td class=r>40000054</td><td>= iTunes U|Philosophy</td> </tr><tr><td class=r>40000055</td><td>= iTunes U|Religion &amp; Spirituality</td> </tr><tr><td class=r>40000056</td><td>= iTunes U|Language</td> </tr><tr><td class=r>40000057</td><td>= iTunes U|Language|African Languages</td> </tr><tr><td class=r>40000058</td><td>= iTunes U|Language|Ancient Languages</td> </tr><tr><td class=r>40000061</td><td>= iTunes U|Language|English</td> </tr><tr><td class=r>40000063</td><td>= iTunes U|Language|French</td> </tr><tr><td class=r>40000064</td><td>= iTunes U|Language|German</td> </tr><tr><td class=r>40000065</td><td>= iTunes U|Language|Italian</td> </tr><tr><td class=r>40000066</td><td>= iTunes U|Language|Linguistics</td> </tr><tr><td class=r>40000068</td><td>= iTunes U|Language|Spanish</td> </tr><tr><td class=r>40000069</td><td>= iTunes U|Language|Speech Pathology</td> </tr><tr><td class=r>40000070</td><td>= iTunes U|Literature</td> </tr><tr><td class=r>40000071</td><td>= iTunes U|Literature|Anthologies</td> </tr><tr><td class=r>40000072</td><td>= iTunes U|Literature|Biography</td> </tr><tr><td class=r>40000073</td><td>= iTunes U|Literature|Classics</td> </tr><tr><td class=r>40000074</td><td>= iTunes U|Literature|Literary Criticism</td> </tr><tr><td class=r>40000075</td><td>= iTunes U|Literature|Fiction</td> </tr><tr><td class=r>40000076</td><td>= iTunes U|Literature|Poetry</td> </tr><tr><td class=r>40000077</td><td>= iTunes U|Mathematics</td> </tr><tr><td class=r>40000078</td><td>= iTunes U|Mathematics|Advanced Mathematics</td> </tr><tr><td class=r>40000079</td><td>= iTunes U|Mathematics|Algebra</td> </tr><tr><td class=r>40000080</td><td>= iTunes U|Mathematics|Arithmetic</td> </tr><tr><td class=r>40000081</td><td>= iTunes U|Mathematics|Calculus</td> </tr><tr><td class=r>40000082</td><td>= iTunes U|Mathematics|Geometry</td> </tr><tr><td class=r>40000083</td><td>= iTunes U|Mathematics|Statistics</td> </tr><tr><td class=r>40000084</td><td>= iTunes U|Science</td> </tr><tr><td class=r>40000085</td><td>= iTunes U|Science|Agricultural</td> </tr><tr><td class=r>40000086</td><td>= iTunes U|Science|Astronomy</td> </tr><tr><td class=r>40000087</td><td>= iTunes U|Science|Atmosphere</td> </tr><tr><td class=r>40000088</td><td>= iTunes U|Science|Biology</td> </tr><tr><td class=r>40000089</td><td>= iTunes U|Science|Chemistry</td> </tr><tr><td class=r>40000090</td><td>= iTunes U|Science|Ecology</td> </tr><tr><td class=r>40000091</td><td>= iTunes U|Science|Geography</td> </tr><tr><td class=r>40000092</td><td>= iTunes U|Science|Geology</td> </tr><tr><td class=r>40000093</td><td>= iTunes U|Science|Physics</td> </tr><tr><td class=r>40000094</td><td>= iTunes U|Psychology &amp; Social Science</td> </tr><tr><td class=r>40000095</td><td>= iTunes U|Law &amp; Politics|Law</td> </tr><tr><td class=r>40000096</td><td>= iTunes U|Law &amp; Politics|Political Science</td> </tr><tr><td class=r>40000097</td><td>= iTunes U|Law &amp; Politics|Public Administration</td> </tr><tr><td class=r>40000098</td><td>= iTunes U|Psychology &amp; Social Science|Psychology</td> </tr><tr><td class=r>40000099</td><td>= iTunes U|Psychology &amp; Social Science|Social Welfare</td> </tr><tr><td class=r>40000100</td><td>= iTunes U|Psychology &amp; Social Science|Sociology</td> </tr><tr><td class=r>40000101</td><td>= iTunes U|Society</td> </tr><tr><td class=r>40000103</td><td>= iTunes U|Society|Asia Pacific Studies</td> </tr><tr><td class=r>40000104</td><td>= iTunes U|Society|European Studies</td> </tr><tr><td class=r>40000105</td><td>= iTunes U|Society|Indigenous Studies</td> </tr><tr><td class=r>40000106</td><td>= iTunes U|Society|Latin &amp; Caribbean Studies</td> </tr><tr><td class=r>40000107</td><td>= iTunes U|Society|Middle Eastern Studies</td> </tr><tr><td class=r>40000108</td><td>= iTunes U|Society|Women&#39;s Studies</td> </tr><tr><td class=r>40000109</td><td>= iTunes U|Teaching &amp; Learning</td> </tr><tr><td class=r>40000110</td><td>= iTunes U|Teaching &amp; Learning|Curriculum &amp; Teaching</td> </tr><tr><td class=r>40000111</td><td>= iTunes U|Teaching &amp; Learning|Educational Leadership</td> </tr><tr><td class=r>40000112</td><td>= iTunes U|Teaching &amp; Learning|Family &amp; Childcare</td> </tr><tr><td class=r>40000113</td><td>= iTunes U|Teaching &amp; Learning|Learning Resources</td> </tr><tr><td class=r>40000114</td><td>= iTunes U|Teaching &amp; Learning|Psychology &amp; Research</td> </tr><tr><td class=r>40000115</td><td>= iTunes U|Teaching &amp; Learning|Special Education</td> </tr><tr><td class=r>40000116</td><td>= iTunes U|Art &amp; Architecture|Culinary Arts</td> </tr><tr><td class=r>40000117</td><td>= iTunes U|Art &amp; Architecture|Fashion</td> </tr><tr><td class=r>40000118</td><td>= iTunes U|Art &amp; Architecture|Media Arts</td> </tr><tr><td class=r>40000119</td><td>= iTunes U|Art &amp; Architecture|Photography</td> </tr><tr><td class=r>40000120</td><td>= iTunes U|Art &amp; Architecture|Visual Art</td> </tr><tr><td class=r>40000121</td><td>= iTunes U|Business|Entrepreneurship</td> </tr><tr><td class=r>40000122</td><td>= iTunes U|Communications &amp; Media|Broadcasting</td> </tr><tr><td class=r>40000123</td><td>= iTunes U|Communications &amp; Media|Digital Media</td> </tr><tr><td class=r>40000124</td><td>= iTunes U|Communications &amp; Media|Journalism</td> </tr><tr><td class=r>40000125</td><td>= iTunes U|Communications &amp; Media|Photojournalism</td> </tr><tr><td class=r>40000126</td><td>= iTunes U|Communications &amp; Media|Print</td> </tr><tr><td class=r>40000127</td><td>= iTunes U|Communications &amp; Media|Speech</td> </tr><tr><td class=r>40000128</td><td>= iTunes U|Communications &amp; Media|Writing</td> </tr><tr><td class=r>40000129</td><td>= iTunes U|Health &amp; Medicine|Nursing</td> </tr><tr><td class=r>40000130</td><td>= iTunes U|Language|Arabic</td> </tr><tr><td class=r>40000131</td><td>= iTunes U|Language|Chinese</td> </tr><tr><td class=r>40000132</td><td>= iTunes U|Language|Hebrew</td> </tr><tr><td class=r>40000133</td><td>= iTunes U|Language|Hindi</td> </tr><tr><td class=r>40000134</td><td>= iTunes U|Language|Indigenous Languages</td> </tr><tr><td class=r>40000135</td><td>= iTunes U|Language|Japanese</td> </tr><tr><td class=r>40000136</td><td>= iTunes U|Language|Korean</td> </tr><tr><td class=r>40000137</td><td>= iTunes U|Language|Other Languages</td> </tr><tr><td class=r>40000138</td><td>= iTunes U|Language|Portuguese</td> </tr><tr><td class=r>40000139</td><td>= iTunes U|Language|Russian</td> </tr><tr><td class=r>40000140</td><td>= iTunes U|Law &amp; Politics</td> </tr><tr><td class=r>40000141</td><td>= iTunes U|Law &amp; Politics|Foreign Policy &amp; International Relations</td> </tr><tr><td class=r>40000142</td><td>= iTunes U|Law &amp; Politics|Local Governments</td> </tr><tr><td class=r>40000143</td><td>= iTunes U|Law &amp; Politics|National Governments</td> </tr><tr><td class=r>40000144</td><td>= iTunes U|Law &amp; Politics|World Affairs</td> </tr><tr><td class=r>40000145</td><td>= iTunes U|Literature|Comparative Literature</td> </tr><tr><td class=r>40000146</td><td>= iTunes U|Philosophy|Aesthetics</td> </tr><tr><td class=r>40000147</td><td>= iTunes U|Philosophy|Epistemology</td> </tr><tr><td class=r>40000148</td><td>= iTunes U|Philosophy|Ethics</td> </tr><tr><td class=r>40000149</td><td>= iTunes U|Philosophy|Metaphysics</td> </tr><tr><td class=r>40000150</td><td>= iTunes U|Philosophy|Political Philosophy</td> </tr><tr><td class=r>40000151</td><td>= iTunes U|Philosophy|Logic</td> </tr><tr><td class=r>40000152</td><td>= iTunes U|Philosophy|Philosophy of Language</td> </tr><tr><td class=r>40000153</td><td>= iTunes U|Philosophy|Philosophy of Religion</td> </tr><tr><td class=r>40000154</td><td>= iTunes U|Psychology &amp; Social Science|Archaeology</td> </tr><tr><td class=r>40000155</td><td>= iTunes U|Psychology &amp; Social Science|Anthropology</td> </tr><tr><td class=r>40000156</td><td>= iTunes U|Religion &amp; Spirituality|Buddhism</td> </tr><tr><td class=r>40000157</td><td>= iTunes U|Religion &amp; Spirituality|Christianity</td> </tr><tr><td class=r>40000158</td><td>= iTunes U|Religion &amp; Spirituality|Comparative Religion</td> </tr><tr><td class=r>40000159</td><td>= iTunes U|Religion &amp; Spirituality|Hinduism</td> </tr><tr><td class=r>40000160</td><td>= iTunes U|Religion &amp; Spirituality|Islam</td> </tr><tr><td class=r>40000161</td><td>= iTunes U|Religion &amp; Spirituality|Judaism</td> </tr><tr><td class=r>40000162</td><td>= iTunes U|Religion &amp; Spirituality|Other Religions</td> </tr><tr><td class=r>40000163</td><td>= iTunes U|Religion &amp; Spirituality|Spirituality</td> </tr><tr><td class=r>40000164</td><td>= iTunes U|Science|Environment</td> </tr><tr><td class=r>40000165</td><td>= iTunes U|Society|African Studies</td> </tr><tr><td class=r>40000166</td><td>= iTunes U|Society|American Studies</td> </tr><tr><td class=r>40000167</td><td>= iTunes U|Society|Cross-cultural Studies</td> </tr><tr><td class=r>40000168</td><td>= iTunes U|Society|Immigration &amp; Emigration</td> </tr><tr><td class=r>40000169</td><td>= iTunes U|Society|Race &amp; Ethnicity Studies</td> </tr><tr><td class=r>40000170</td><td>= iTunes U|Society|Sexuality Studies</td> </tr><tr><td class=r>40000171</td><td>= iTunes U|Teaching &amp; Learning|Educational Technology</td> </tr><tr><td class=r>40000172</td><td>= iTunes U|Teaching &amp; Learning|Information/Library Science</td> </tr><tr><td class=r>40000173</td><td>= iTunes U|Language|Dutch</td> </tr><tr><td class=r>40000174</td><td>= iTunes U|Language|Luxembourgish</td> </tr><tr><td class=r>40000175</td><td>= iTunes U|Language|Swedish</td> </tr><tr><td class=r>40000176</td><td>= iTunes U|Language|Norwegian</td> </tr><tr><td class=r>40000177</td><td>= iTunes U|Language|Finnish</td> </tr><tr><td class=r>40000178</td><td>= iTunes U|Language|Danish</td> </tr><tr><td class=r>40000179</td><td>= iTunes U|Language|Polish</td> </tr><tr><td class=r>40000180</td><td>= iTunes U|Language|Turkish</td> </tr><tr><td class=r>40000181</td><td>= iTunes U|Language|Flemish</td> </tr><tr><td class=r>50000024</td><td>= Audiobooks</td> </tr><tr><td class=r>50000040</td><td>= Audiobooks|Fiction</td> </tr><tr><td class=r>50000041</td><td>= Audiobooks|Arts &amp; Entertainment</td> </tr><tr><td class=r>50000042</td><td>= Audiobooks|Biography &amp; Memoir</td> </tr><tr><td class=r>50000043</td><td>= Audiobooks|Business</td> </tr><tr><td class=r>50000044</td><td>= Audiobooks|Kids &amp; Young Adults</td> </tr><tr><td class=r>50000045</td><td>= Audiobooks|Classics</td> </tr><tr><td class=r>50000046</td><td>= Audiobooks|Comedy</td> </tr><tr><td class=r>50000047</td><td>= Audiobooks|Drama &amp; Poetry</td> </tr><tr><td class=r>50000048</td><td>= Audiobooks|Speakers &amp; Storytellers</td> </tr><tr><td class=r>50000049</td><td>= Audiobooks|History</td> </tr><tr><td class=r>50000050</td><td>= Audiobooks|Languages</td> </tr><tr><td class=r>50000051</td><td>= Audiobooks|Mystery</td> </tr><tr><td class=r>50000052</td><td>= Audiobooks|Nonfiction</td> </tr><tr><td class=r>50000053</td><td>= Audiobooks|Religion &amp; Spirituality</td> </tr><tr><td class=r>50000054</td><td>= Audiobooks|Science</td> </tr><tr><td class=r>50000055</td><td>= Audiobooks|Sci Fi &amp; Fantasy</td> </tr><tr><td class=r>50000056</td><td>= Audiobooks|Self Development</td> </tr><tr><td class=r>50000057</td><td>= Audiobooks|Sports</td> </tr><tr><td class=r>50000058</td><td>= Audiobooks|Technology</td> </tr><tr><td class=r>50000059</td><td>= Audiobooks|Travel &amp; Adventure</td> </tr><tr><td class=r>50000061</td><td>= Music|Spoken Word</td> </tr><tr><td class=r>50000063</td><td>= Music|Disney</td> </tr><tr><td class=r>50000064</td><td>= Music|French Pop</td> </tr><tr><td class=r>50000066</td><td>= Music|German Pop</td> </tr><tr><td class=r>50000068</td><td>= Music|German Folk</td> </tr><tr><td class=r>50000069</td><td>= Audiobooks|Romance</td> </tr><tr><td class=r>50000070</td><td>= Audiobooks|Audiobooks Latino</td> </tr><tr><td class=r>50000071</td><td>= Books|Comics &amp; Graphic Novels|Manga|Action</td> </tr><tr><td class=r>50000072</td><td>= Books|Comics &amp; Graphic Novels|Manga|Comedy</td> </tr><tr><td class=r>50000073</td><td>= Books|Comics &amp; Graphic Novels|Manga|Erotica</td> </tr><tr><td class=r>50000074</td><td>= Books|Comics &amp; Graphic Novels|Manga|Fantasy</td> </tr><tr><td class=r>50000075</td><td>= Books|Comics &amp; Graphic Novels|Manga|Four Cell Manga</td> </tr><tr><td class=r>50000076</td><td>= Books|Comics &amp; Graphic Novels|Manga|Gay &amp; Lesbian</td> </tr><tr><td class=r>50000077</td><td>= Books|Comics &amp; Graphic Novels|Manga|Hard-Boiled</td> </tr><tr><td class=r>50000078</td><td>= Books|Comics &amp; Graphic Novels|Manga|Heroes</td> </tr><tr><td class=r>50000079</td><td>= Books|Comics &amp; Graphic Novels|Manga|Historical Fiction</td> </tr><tr><td class=r>50000080</td><td>= Books|Comics &amp; Graphic Novels|Manga|Mecha</td> </tr><tr><td class=r>50000081</td><td>= Books|Comics &amp; Graphic Novels|Manga|Mystery</td> </tr><tr><td class=r>50000082</td><td>= Books|Comics &amp; Graphic Novels|Manga|Nonfiction</td> </tr><tr><td class=r>50000083</td><td>= Books|Comics &amp; Graphic Novels|Manga|Religious</td> </tr><tr><td class=r>50000084</td><td>= Books|Comics &amp; Graphic Novels|Manga|Romance</td> </tr><tr><td class=r>50000085</td><td>= Books|Comics &amp; Graphic Novels|Manga|Romantic Comedy</td> </tr><tr><td class=r>50000086</td><td>= Books|Comics &amp; Graphic Novels|Manga|Science Fiction</td> </tr><tr><td class=r>50000087</td><td>= Books|Comics &amp; Graphic Novels|Manga|Sports</td> </tr><tr><td class=r>50000088</td><td>= Books|Fiction &amp; Literature|Light Novels</td> </tr><tr><td class=r>50000089</td><td>= Books|Comics &amp; Graphic Novels|Manga|Horror</td> </tr><tr><td class=r>50000090</td><td>= Books|Comics &amp; Graphic Novels|Comics</td> </tr></table></td></tr></table></blockquote> <h2><a name='AppleStoreCountry'>QuickTime AppleStoreCountry Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>AppleStoreCountry</th><th>Value</th><th>AppleStoreCountry</th></tr> <tr><td class=r>143441</td><td>= United States</td> <td class='r b'>143523</td><td class=b>= Moldova</td> </tr><tr><td class=r>143442</td><td>= France</td> <td class='r b'>143524</td><td class=b>= Armenia</td> </tr><tr><td class=r>143443</td><td>= Germany</td> <td class='r b'>143525</td><td class=b>= Botswana</td> </tr><tr><td class=r>143444</td><td>= United Kingdom</td> <td class='r b'>143526</td><td class=b>= Bulgaria</td> </tr><tr><td class=r>143445</td><td>= Austria</td> <td class='r b'>143528</td><td class=b>= Jordan</td> </tr><tr><td class=r>143446</td><td>= Belgium</td> <td class='r b'>143529</td><td class=b>= Kenya</td> </tr><tr><td class=r>143447</td><td>= Finland</td> <td class='r b'>143530</td><td class=b>= Macedonia</td> </tr><tr><td class=r>143448</td><td>= Greece</td> <td class='r b'>143531</td><td class=b>= Madagascar</td> </tr><tr><td class=r>143449</td><td>= Ireland</td> <td class='r b'>143532</td><td class=b>= Mali</td> </tr><tr><td class=r>143450</td><td>= Italy</td> <td class='r b'>143533</td><td class=b>= Mauritius</td> </tr><tr><td class=r>143451</td><td>= Luxembourg</td> <td class='r b'>143534</td><td class=b>= Niger</td> </tr><tr><td class=r>143452</td><td>= Netherlands</td> <td class='r b'>143535</td><td class=b>= Senegal</td> </tr><tr><td class=r>143453</td><td>= Portugal</td> <td class='r b'>143536</td><td class=b>= Tunisia</td> </tr><tr><td class=r>143454</td><td>= Spain</td> <td class='r b'>143537</td><td class=b>= Uganda</td> </tr><tr><td class=r>143455</td><td>= Canada</td> <td class='r b'>143538</td><td class=b>= Anguilla</td> </tr><tr><td class=r>143456</td><td>= Sweden</td> <td class='r b'>143539</td><td class=b>= Bahamas</td> </tr><tr><td class=r>143457</td><td>= Norway</td> <td class='r b'>143540</td><td class=b>= Antigua and Barbuda</td> </tr><tr><td class=r>143458</td><td>= Denmark</td> <td class='r b'>143541</td><td class=b>= Barbados</td> </tr><tr><td class=r>143459</td><td>= Switzerland</td> <td class='r b'>143542</td><td class=b>= Bermuda</td> </tr><tr><td class=r>143460</td><td>= Australia</td> <td class='r b'>143543</td><td class=b>= British Virgin Islands</td> </tr><tr><td class=r>143461</td><td>= New Zealand</td> <td class='r b'>143544</td><td class=b>= Cayman Islands</td> </tr><tr><td class=r>143462</td><td>= Japan</td> <td class='r b'>143545</td><td class=b>= Dominica</td> </tr><tr><td class=r>143463</td><td>= Hong Kong</td> <td class='r b'>143546</td><td class=b>= Grenada</td> </tr><tr><td class=r>143464</td><td>= Singapore</td> <td class='r b'>143547</td><td class=b>= Montserrat</td> </tr><tr><td class=r>143465</td><td>= China</td> <td class='r b'>143548</td><td class=b>= St. Kitts and Nevis</td> </tr><tr><td class=r>143466</td><td>= Republic of Korea</td> <td class='r b'>143549</td><td class=b>= St. Lucia</td> </tr><tr><td class=r>143467</td><td>= India</td> <td class='r b'>143550</td><td class=b>= St. Vincent and The Grenadines</td> </tr><tr><td class=r>143468</td><td>= Mexico</td> <td class='r b'>143551</td><td class=b>= Trinidad and Tobago</td> </tr><tr><td class=r>143469</td><td>= Russia</td> <td class='r b'>143552</td><td class=b>= Turks and Caicos</td> </tr><tr><td class=r>143470</td><td>= Taiwan</td> <td class='r b'>143553</td><td class=b>= Guyana</td> </tr><tr><td class=r>143471</td><td>= Vietnam</td> <td class='r b'>143554</td><td class=b>= Suriname</td> </tr><tr><td class=r>143472</td><td>= South Africa</td> <td class='r b'>143555</td><td class=b>= Belize</td> </tr><tr><td class=r>143473</td><td>= Malaysia</td> <td class='r b'>143556</td><td class=b>= Bolivia</td> </tr><tr><td class=r>143474</td><td>= Philippines</td> <td class='r b'>143557</td><td class=b>= Cyprus</td> </tr><tr><td class=r>143475</td><td>= Thailand</td> <td class='r b'>143558</td><td class=b>= Iceland</td> </tr><tr><td class=r>143476</td><td>= Indonesia</td> <td class='r b'>143559</td><td class=b>= Bahrain</td> </tr><tr><td class=r>143477</td><td>= Pakistan</td> <td class='r b'>143560</td><td class=b>= Brunei Darussalam</td> </tr><tr><td class=r>143478</td><td>= Poland</td> <td class='r b'>143561</td><td class=b>= Nigeria</td> </tr><tr><td class=r>143479</td><td>= Saudi Arabia</td> <td class='r b'>143562</td><td class=b>= Oman</td> </tr><tr><td class=r>143480</td><td>= Turkey</td> <td class='r b'>143563</td><td class=b>= Algeria</td> </tr><tr><td class=r>143481</td><td>= United Arab Emirates</td> <td class='r b'>143564</td><td class=b>= Angola</td> </tr><tr><td class=r>143482</td><td>= Hungary</td> <td class='r b'>143565</td><td class=b>= Belarus</td> </tr><tr><td class=r>143483</td><td>= Chile</td> <td class='r b'>143566</td><td class=b>= Uzbekistan</td> </tr><tr><td class=r>143484</td><td>= Nepal</td> <td class='r b'>143568</td><td class=b>= Azerbaijan</td> </tr><tr><td class=r>143485</td><td>= Panama</td> <td class='r b'>143571</td><td class=b>= Yemen</td> </tr><tr><td class=r>143486</td><td>= Sri Lanka</td> <td class='r b'>143572</td><td class=b>= Tanzania</td> </tr><tr><td class=r>143487</td><td>= Romania</td> <td class='r b'>143573</td><td class=b>= Ghana</td> </tr><tr><td class=r>143489</td><td>= Czech Republic</td> <td class='r b'>143575</td><td class=b>= Albania</td> </tr><tr><td class=r>143491</td><td>= Israel</td> <td class='r b'>143576</td><td class=b>= Benin</td> </tr><tr><td class=r>143492</td><td>= Ukraine</td> <td class='r b'>143577</td><td class=b>= Bhutan</td> </tr><tr><td class=r>143493</td><td>= Kuwait</td> <td class='r b'>143578</td><td class=b>= Burkina Faso</td> </tr><tr><td class=r>143494</td><td>= Croatia</td> <td class='r b'>143579</td><td class=b>= Cambodia</td> </tr><tr><td class=r>143495</td><td>= Costa Rica</td> <td class='r b'>143580</td><td class=b>= Cape Verde</td> </tr><tr><td class=r>143496</td><td>= Slovakia</td> <td class='r b'>143581</td><td class=b>= Chad</td> </tr><tr><td class=r>143497</td><td>= Lebanon</td> <td class='r b'>143582</td><td class=b>= Republic of the Congo</td> </tr><tr><td class=r>143498</td><td>= Qatar</td> <td class='r b'>143583</td><td class=b>= Fiji</td> </tr><tr><td class=r>143499</td><td>= Slovenia</td> <td class='r b'>143584</td><td class=b>= Gambia</td> </tr><tr><td class=r>143501</td><td>= Colombia</td> <td class='r b'>143585</td><td class=b>= Guinea-Bissau</td> </tr><tr><td class=r>143502</td><td>= Venezuela</td> <td class='r b'>143586</td><td class=b>= Kyrgyzstan</td> </tr><tr><td class=r>143503</td><td>= Brazil</td> <td class='r b'>143587</td><td class=b>= Lao People&#39;s Democratic Republic</td> </tr><tr><td class=r>143504</td><td>= Guatemala</td> <td class='r b'>143588</td><td class=b>= Liberia</td> </tr><tr><td class=r>143505</td><td>= Argentina</td> <td class='r b'>143589</td><td class=b>= Malawi</td> </tr><tr><td class=r>143506</td><td>= El Salvador</td> <td class='r b'>143590</td><td class=b>= Mauritania</td> </tr><tr><td class=r>143507</td><td>= Peru</td> <td class='r b'>143591</td><td class=b>= Federated States of Micronesia</td> </tr><tr><td class=r>143508</td><td>= Dominican Republic</td> <td class='r b'>143592</td><td class=b>= Mongolia</td> </tr><tr><td class=r>143509</td><td>= Ecuador</td> <td class='r b'>143593</td><td class=b>= Mozambique</td> </tr><tr><td class=r>143510</td><td>= Honduras</td> <td class='r b'>143594</td><td class=b>= Namibia</td> </tr><tr><td class=r>143511</td><td>= Jamaica</td> <td class='r b'>143595</td><td class=b>= Palau</td> </tr><tr><td class=r>143512</td><td>= Nicaragua</td> <td class='r b'>143597</td><td class=b>= Papua New Guinea</td> </tr><tr><td class=r>143513</td><td>= Paraguay</td> <td class='r b'>143598</td><td class=b>= Sao Tome and Principe</td> </tr><tr><td class=r>143514</td><td>= Uruguay</td> <td class='r b'>143599</td><td class=b>= Seychelles</td> </tr><tr><td class=r>143515</td><td>= Macau</td> <td class='r b'>143600</td><td class=b>= Sierra Leone</td> </tr><tr><td class=r>143516</td><td>= Egypt</td> <td class='r b'>143601</td><td class=b>= Solomon Islands</td> </tr><tr><td class=r>143517</td><td>= Kazakhstan</td> <td class='r b'>143602</td><td class=b>= Swaziland</td> </tr><tr><td class=r>143518</td><td>= Estonia</td> <td class='r b'>143603</td><td class=b>= Tajikistan</td> </tr><tr><td class=r>143519</td><td>= Latvia</td> <td class='r b'>143604</td><td class=b>= Turkmenistan</td> </tr><tr><td class=r>143520</td><td>= Lithuania</td> <td class='r b'>143605</td><td class=b>= Zimbabwe</td> </tr><tr><td class=r>143521</td><td>= Malta</td> <td class='r b'>&nbsp;</td><td class=b>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='iTunesInfo'>QuickTime iTunesInfo Tags</a></h2> <p>ExifTool will extract any iTunesInfo tags that exist, even if they are not defined in this table.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'DISCNUMBER'</td> <td>DiscNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Encoding Params'</td> <td>EncodingParams</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#EncodingParams'>QuickTime EncodingParams Tags</a></td></tr> <tr> <td>'TRACKNUMBER'</td> <td>TrackNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'iTunEXTC'</td> <td>ContentRating</td> <td class=c>N</td> <td><span class=s><span class=n>(standard | rating | score | reasons)</span></span></td></tr> <tr> <td>'iTunMOVI'</td> <td>iTunMOVI</td> <td class=c>-</td> <td>--&gt; <a href='PLIST.html'>PLIST Tags</a></td></tr> <tr class=b> <td>'iTunNORM'</td> <td>VolumeNormalization</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'iTunSMPB'</td> <td>iTunSMPB</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'iTunes_CDDB_1'</td> <td>CDDB1Info</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'iTunes_CDDB_TrackNumber'</td> <td>CDDBTrackNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'popularimeter'</td> <td>Popularimeter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'tool'</td> <td>iTunTool</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='EncodingParams'>QuickTime EncodingParams Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'abrt'</td> <td>AudioAvailableBitRateRange</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'acbf'</td> <td>AudioBitRateControlMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'acef'</td> <td>AudioExtendFrequencies</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'brat'</td> <td>AudioCurrentTargetBitRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'cdcv'</td> <td>AudioComponentVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'cmnc'</td> <td>AudioAvailableNumberChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'init'</td> <td>AudioIsInitialized</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'lmrc'</td> <td>AudioDoesSampleRateConversion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'mdel'</td> <td>AudioMinimumDelayMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'mnip'</td> <td>AudioMinimumNumberInputPackets</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'mnop'</td> <td>AudioMinimumNumberOutputPackets</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'oppr'</td> <td>AudioOutputPrecedence</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pad0'</td> <td>AudioZeroFramesPadded</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'pakb'</td> <td>AudioMaximumPacketByteSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pakd'</td> <td>AudioRequiresPacketDescription</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'pakf'</td> <td>AudioPacketFrameSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'prmm'</td> <td>AudioCodecPrimeMethod</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'srcq'</td> <td>AudioQualitySetting</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'tbuf'</td> <td>AudioInputBufferSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ubuf'</td> <td>AudioUsedInputBufferSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ursr'</td> <td>AudioUseRecommendedSampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'vbrq'</td> <td>AudioVBRQuality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'vers'</td> <td>AudioEncodingParamsVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'vpk?'</td> <td>AudioHasVariablePacketByteSizes</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Keys'>QuickTime Keys Tags</a></h2> <p>This directory contains a list of key names which are used to decode ItemList tags written by the &quot;mdta&quot; handler. The prefix of &quot;com.apple.quicktime.&quot; has been removed from all TagID&#39;s below.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Encoded_With'</td> <td>EncodedWith</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'album'</td> <td>Album</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'artist'</td> <td>Artist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'artwork'</td> <td>Artwork</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'author'</td> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'camera.framereadouttimeinmicroseconds'</td> <td>FrameReadoutTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'camera.identifier'</td> <td>CameraIdentifier</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'collection.user'</td> <td>UserCollection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'comment'</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'copyright'</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'creationdate'</td> <td>CreationDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'description'</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'direction.facing'</td> <td>CameraDirection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'direction.motion'</td> <td>CameraMotion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'director'</td> <td>Director</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'genre'</td> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'information'</td> <td>Information</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'keywords'</td> <td>Keywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'location.ISO6709'</td> <td>GPSCoordinates</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'location.body'</td> <td>LocationBody</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'location.date'</td> <td>LocationDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'location.name'</td> <td>LocationName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'location.note'</td> <td>LocationNote</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'location.role'</td> <td>LocationRole</td> <td class=c>N</td> <td><span class=s>0 = Shooting Location <br>1 = Real Location <br>2 = Fictional Location</span></td></tr> <tr> <td>'make'</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'model'</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'player.movie.audio.balance'</td> <td>Balance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'player.movie.audio.bass'</td> <td>Bass</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'player.movie.audio.gain'</td> <td>AudioGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'player.movie.audio.mute'</td> <td>Mute</td> <td class=c>N</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td>'player.movie.audio.pitchshift'</td> <td>PitchShift</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'player.movie.audio.treble'</td> <td>Trebel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'player.movie.visual.brightness'</td> <td>Brightness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'player.movie.visual.color'</td> <td>Color</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'player.movie.visual.contrast'</td> <td>Contrast</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'player.movie.visual.tint'</td> <td>Tint</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'player.version'</td> <td>PlayerVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'producer'</td> <td>Producer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'publisher'</td> <td>Publisher</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'rating.user'</td> <td>UserRating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'software'</td> <td>Software</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'title'</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'version'</td> <td>Version</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'year'</td> <td>Year</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Movie'>QuickTime Movie Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'cmov'</td> <td>CompressedMovie</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#CMovie'>QuickTime CMovie Tags</a></td></tr> <tr class=b> <td>'htka'</td> <td>HTCTrack</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Track'>QuickTime Track Tags</a></td></tr> <tr> <td>'iods'</td> <td>InitialObjectDescriptor?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'meta'</td> <td>Meta</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Meta'>QuickTime Meta Tags</a></td></tr> <tr> <td>'mvhd'</td> <td>MovieHeader</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#MovieHeader'>QuickTime MovieHeader Tags</a></td></tr> <tr class=b> <td>'trak'</td> <td>Track</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Track'>QuickTime Track Tags</a></td></tr> <tr> <td>'udta'</td> <td>UserData</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#UserData'>QuickTime UserData Tags</a></td></tr> <tr class=b> <td>'uuid'</td> <td>UUID-USMT <br>UUID-Canon <br>UUID-Unknown?</td> <td class=c>-<br>-<br>N</td> <td>--&gt; <a href='QuickTime.html#UserMedia'>QuickTime UserMedia Tags</a> <br>--&gt; <a href='Canon.html#uuid'>Canon uuid Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='CMovie'>QuickTime CMovie Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'dcom'</td> <td>Compression</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Track'>QuickTime Track Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'mdia'</td> <td>Media</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Media'>QuickTime Media Tags</a></td></tr> <tr class=b> <td>'meta'</td> <td>Meta</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Meta'>QuickTime Meta Tags</a></td></tr> <tr> <td>'tapt'</td> <td>TrackAperture</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#TrackAperture'>QuickTime TrackAperture Tags</a></td></tr> <tr class=b> <td>'tkhd'</td> <td>TrackHeader</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#TrackHeader'>QuickTime TrackHeader Tags</a></td></tr> <tr> <td>'tref'</td> <td>TrackRef</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#TrackRef'>QuickTime TrackRef Tags</a></td></tr> <tr class=b> <td>'udta'</td> <td>UserData</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#UserData'>QuickTime UserData Tags</a></td></tr> <tr> <td>'uuid'</td> <td>UUID-USMT <br>UUID-Unknown?</td> <td class=c>-<br>N</td> <td>--&gt; <a href='QuickTime.html#UserMedia'>QuickTime UserMedia Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Media'>QuickTime Media Tags</a></h2> <p>MP4 media box.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'hdlr'</td> <td>Handler</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Handler'>QuickTime Handler Tags</a></td></tr> <tr class=b> <td>'mdhd'</td> <td>MediaHeader</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#MediaHeader'>QuickTime MediaHeader Tags</a></td></tr> <tr> <td>'minf'</td> <td>MediaInfo</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#MediaInfo'>QuickTime MediaInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='MediaHeader'>QuickTime MediaHeader Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>MediaHeaderVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>MediaCreateDate</td> <td class=c>int32u</td> <td><span class=s><span class=n>(converted from UTC to local time if the QuickTimeUTC option is set)</span></span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>MediaModifyDate</td> <td class=c>int32u</td> <td><span class=s><span class=n>(converted from UTC to local time if the QuickTimeUTC option is set)</span></span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>MediaTimeScale</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>MediaDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>MediaLanguageCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MediaInfo'>QuickTime MediaInfo Tags</a></h2> <p>MP4 media info box.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'dinf'</td> <td>DataInfo</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#DataInfo'>QuickTime DataInfo Tags</a></td></tr> <tr class=b> <td>'gmhd'</td> <td>GenMediaHeader</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#GenMediaHeader'>QuickTime GenMediaHeader Tags</a></td></tr> <tr> <td>'hdlr'</td> <td>Handler</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Handler'>QuickTime Handler Tags</a></td></tr> <tr class=b> <td>'hmhd'</td> <td>HintHeader</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#HintHeader'>QuickTime HintHeader Tags</a></td></tr> <tr> <td>'nmhd'</td> <td>NullMediaHeader?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'smhd'</td> <td>AudioHeader</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#AudioHeader'>QuickTime AudioHeader Tags</a></td></tr> <tr> <td>'stbl'</td> <td>SampleTable</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#SampleTable'>QuickTime SampleTable Tags</a></td></tr> <tr class=b> <td>'vmhd'</td> <td>VideoHeader</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#VideoHeader'>QuickTime VideoHeader Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='DataInfo'>QuickTime DataInfo Tags</a></h2> <p>MP4 data information box.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'dref'</td> <td>DataRef</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#DataRef'>QuickTime DataRef Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='DataRef'>QuickTime DataRef Tags</a></h2> <p>MP4 data reference box.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'url '</td> <td>URL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'urn '</td> <td>URN</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='GenMediaHeader'>QuickTime GenMediaHeader Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'gmin'</td> <td>GenMediaInfo</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#GenMediaInfo'>QuickTime GenMediaInfo Tags</a></td></tr> <tr class=b> <td>'text'</td> <td>Text?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'tmcd'</td> <td>TimeCode</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#TimeCode'>QuickTime TimeCode Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='GenMediaInfo'>QuickTime GenMediaInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>GenMediaVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>GenFlags</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>GenGraphicsMode</td> <td class=c>N</td> <td>--&gt; <a href='QuickTime.html#GraphicsMode'>QuickTime GraphicsMode Values</a></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>GenOpColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>GenBalance</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='GraphicsMode'>QuickTime GraphicsMode Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>GraphicsMode</th><th>Value</th><th>GraphicsMode</th><th>Value</th><th>GraphicsMode</th></tr> <tr><td class=r>0x0</td><td>= srcCopy</td> <td class='r b'>0xb</td><td class=b>= patBic</td> <td class=r>0x26</td><td>= subOver</td> </tr><tr><td class=r>0x1</td><td>= srcOr</td> <td class='r b'>0xc</td><td class=b>= notPatCopy</td> <td class=r>0x27</td><td>= addMin</td> </tr><tr><td class=r>0x2</td><td>= srcXor</td> <td class='r b'>0xd</td><td class=b>= notPatOr</td> <td class=r>0x31</td><td>= grayishTextOr</td> </tr><tr><td class=r>0x3</td><td>= srcBic</td> <td class='r b'>0xe</td><td class=b>= notPatXor</td> <td class=r>0x32</td><td>= hilite</td> </tr><tr><td class=r>0x4</td><td>= notSrcCopy</td> <td class='r b'>0xf</td><td class=b>= notPatBic</td> <td class=r>0x40</td><td>= ditherCopy</td> </tr><tr><td class=r>0x5</td><td>= notSrcOr</td> <td class='r b'>0x20</td><td class=b>= blend</td> <td class=r>0x100</td><td>= Alpha</td> </tr><tr><td class=r>0x6</td><td>= notSrcXor</td> <td class='r b'>0x21</td><td class=b>= addPin</td> <td class=r>0x101</td><td>= White Alpha</td> </tr><tr><td class=r>0x7</td><td>= notSrcBic</td> <td class='r b'>0x22</td><td class=b>= addOver</td> <td class=r>0x102</td><td>= Pre-multiplied Black Alpha</td> </tr><tr><td class=r>0x8</td><td>= patCopy</td> <td class='r b'>0x23</td><td class=b>= subPin</td> <td class=r>0x110</td><td>= Component Alpha</td> </tr><tr><td class=r>0x9</td><td>= patOr</td> <td class='r b'>0x24</td><td class=b>= transparent</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr><tr><td class=r>0xa</td><td>= patXor</td> <td class='r b'>0x25</td><td class=b>= addMax</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='TimeCode'>QuickTime TimeCode Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'tcmi'</td> <td>TCMediaInfo</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#TCMediaInfo'>QuickTime TCMediaInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='TCMediaInfo'>QuickTime TCMediaInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>TextFont</td> <td class=c>N</td> <td><span class=s>0 = System</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>TextFace</td> <td class=c>N</td> <td><table class=cols><tr> <td>0x0 = Plain <br>Bit 0 = Bold <br>Bit 1 = Italic <br>Bit 2 = Underline</td><td>&nbsp;&nbsp;</td> <td>Bit 3 = Outline <br>Bit 4 = Shadow <br>Bit 5 = Condense <br>Bit 6 = Extend</td></tr></table> </td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>TextSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>TextColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>BackgroundColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>FontName</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='HintHeader'>QuickTime HintHeader Tags</a></h2> <p>MP4 hint media header.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>MaxPDUSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>AvgPDUSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>MaxBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>AvgBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AudioHeader'>QuickTime AudioHeader Tags</a></h2> <p>MP4 audio media header.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>Balance</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SampleTable'>QuickTime SampleTable Tags</a></h2> <p>MP4 sample table box.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'co64'</td> <td>ChunkOffset64?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'cslg'</td> <td>CompositionToDecodeTimelineMapping?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ctts'</td> <td>CompositionTimeToSample?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'padb'</td> <td>SamplePaddingBits?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'sbgp'</td> <td>SampleToGroup?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'sdtp'</td> <td>IdependentAndDisposableSamples?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'sgpd'</td> <td>SampleGroupDescription?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'stco'</td> <td>ChunkOffset?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'stdp'</td> <td>SampleDegradationPriority?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'stps'</td> <td>PartialSyncSamples</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'stsc'</td> <td>SampleToChunk?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'stsd'</td> <td>AudioSampleDesc <br>VideoSampleDesc <br>HintSampleDesc <br>OtherSampleDesc</td> <td class=c>-<br>-<br>-<br>-</td> <td>--&gt; <a href='QuickTime.html#AudioSampleDesc'>QuickTime AudioSampleDesc Tags</a> <br>--&gt; <a href='QuickTime.html#ImageDesc'>QuickTime ImageDesc Tags</a> <br>--&gt; <a href='QuickTime.html#HintSampleDesc'>QuickTime HintSampleDesc Tags</a> <br>--&gt; <a href='QuickTime.html#OtherSampleDesc'>QuickTime OtherSampleDesc Tags</a></td></tr> <tr> <td>'stsh'</td> <td>ShadowSyncSampleTable?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'stss'</td> <td>SyncSampleTable?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'stsz'</td> <td>SampleSizes?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'stts'</td> <td>VideoFrameRate <br>TimeToSampleTable?</td> <td class=c>N<br>N</td> <td><span class=s><span class=n>(average rate calculated from time-to-sample table for video media)</span></span></td></tr> <tr> <td>'stz2'</td> <td>CompactSampleSizes?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'subs'</td> <td>Sub-sampleInformation?</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AudioSampleDesc'>QuickTime AudioSampleDesc Tags</a></h2> <p>MP4 audio sample description. This hybrid atom contains both data and child atoms.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>ID/Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>AudioFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>AudioVendorID</td> <td class=c>N</td> <td>--&gt; <a href='QuickTime.html#VendorID'>QuickTime VendorID Values</a></td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>AudioChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>AudioBitsPerSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>AudioSampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'damr'</td> <td>DecodeConfig</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#DecodeConfig'>QuickTime DecodeConfig Tags</a></td></tr> <tr> <td>'pinf'</td> <td>PurchaseInfo</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#ProtectionInfo'>QuickTime ProtectionInfo Tags</a></td></tr> <tr class=b> <td>'sinf'</td> <td>ProtectionInfo</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#ProtectionInfo'>QuickTime ProtectionInfo Tags</a></td></tr> <tr> <td>'wave'</td> <td>Wave</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Wave'>QuickTime Wave Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='DecodeConfig'>QuickTime DecodeConfig Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>EncoderVendor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>EncoderVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ProtectionInfo'>QuickTime ProtectionInfo Tags</a></h2> <p>Child atoms found in &quot;sinf&quot; and/or &quot;pinf&quot; atoms.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'frma'</td> <td>OriginalFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'schi'</td> <td>SchemeInfo</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#SchemeInfo'>QuickTime SchemeInfo Tags</a></td></tr> <tr> <td>'schm'</td> <td>SchemeType</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#SchemeType'>QuickTime SchemeType Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='SchemeInfo'>QuickTime SchemeInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'cert'</td> <td>Certificate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'iviv'</td> <td>InitializationVector</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'key '</td> <td>KeyID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'name'</td> <td>UserName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'righ'</td> <td>Rights</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Rights'>QuickTime Rights Tags</a></td></tr> <tr class=b> <td>'user'</td> <td>UserID</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Rights'>QuickTime Rights Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'aver'</td> <td>VersionRestrictions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'medi'</td> <td>MediaFlags</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'mode'</td> <td>ModeFlags</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'plat'</td> <td>Platform</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'song'</td> <td>ItemID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'tool'</td> <td>ItemTool</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'tran'</td> <td>TransactionID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'veID'</td> <td>ItemVendorID</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SchemeType'>QuickTime SchemeType Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>SchemeType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>SchemeVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>SchemeURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Wave'>QuickTime Wave Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'frma'</td> <td>PurchaseFileFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ImageDesc'>QuickTime ImageDesc Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>ID/Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>CompressorID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>VendorID</td> <td class=c>N</td> <td>--&gt; <a href='QuickTime.html#VendorID'>QuickTime VendorID Values</a></td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>SourceImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>SourceImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>XResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>YResolution</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='25 = 0x19'>25</td> <td>CompressorName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='41 = 0x29'>41</td> <td>BitDepth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'btrt'</td> <td>BitrateInfo</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Bitrate'>QuickTime Bitrate Tags</a></td></tr> <tr class=b> <td>'clap'</td> <td>CleanAperture</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#CleanAperture'>QuickTime CleanAperture Tags</a></td></tr> <tr> <td>'colr'</td> <td>ColorRepresentation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'fiel'</td> <td>VideoFieldOrder</td> <td class=c>N</td> <td><span class=s>[Value 0] <br>1 = Progressive <br>2 = 2:1 Interlaced</span></td></tr> <tr> <td>'gama'</td> <td>Gamma</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'pasp'</td> <td>PixelAspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Bitrate'>QuickTime Bitrate Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>BufferSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>MaxBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>AverageBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CleanAperture'>QuickTime CleanAperture Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index8</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>CleanApertureWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>CleanApertureHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>CleanApertureOffsetX</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>CleanApertureOffsetY</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='HintSampleDesc'>QuickTime HintSampleDesc Tags</a></h2> <p>MP4 hint sample description.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>ID/Index</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>HintFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>HintTrackVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>MaxPacketSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'snro'</td> <td>SequenceNumberRandomOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'tims'</td> <td>RTPTimeScale</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'tsro'</td> <td>TimestampRandomOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='OtherSampleDesc'>QuickTime OtherSampleDesc Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>OtherFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ftab'</td> <td>FontTable</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='VideoHeader'>QuickTime VideoHeader Tags</a></h2> <p>MP4 video media header.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>GraphicsMode</td> <td class=c>N</td> <td>--&gt; <a href='QuickTime.html#GraphicsMode'>QuickTime GraphicsMode Values</a></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>OpColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='TrackAperture'>QuickTime TrackAperture Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'clef'</td> <td>CleanApertureDimensions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'enof'</td> <td>EncodedPixelsDimensions</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'prof'</td> <td>ProductionApertureDimensions</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='TrackHeader'>QuickTime TrackHeader Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>TrackHeaderVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>TrackCreateDate</td> <td class=c>int32u</td> <td><span class=s><span class=n>(converted from UTC to local time if the QuickTimeUTC option is set)</span></span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>TrackModifyDate</td> <td class=c>int32u</td> <td><span class=s><span class=n>(converted from UTC to local time if the QuickTimeUTC option is set)</span></span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>TrackID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>TrackDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>TrackLayer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>TrackVolume</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>MatrixStructure</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='19 = 0x13'>19</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='TrackRef'>QuickTime TrackRef Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'chap'</td> <td>ChapterListTrackID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'mpod'</td> <td>ElementaryStreamTrack</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'tmcd'</td> <td>TimeCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='UserData'>QuickTime UserData Tags</a></h2> <p>Tag ID&#39;s beginning with the copyright symbol (hex 0xa9) are multi-language text. Alternate language tags are accessed by adding a dash followed by the language/country code to the tag name. ExifTool will extract any multi-language user data tags found, even if they don&#39;t exist in this table.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'@sec'</td> <td>SamsungSec</td> <td class=c>-</td> <td>--&gt; <a href='Samsung.html#sec'>Samsung sec Tags</a></td></tr> <tr class=b> <td>'AllF'</td> <td>PlayAllFrames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'CNCV'</td> <td>CompressorVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'CNFV'</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'CNMN'</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'CNOP'</td> <td>CanonCNOP</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#CNOP'>Canon CNOP Tags</a></td></tr> <tr> <td>'CNTH'</td> <td>CanonCNTH</td> <td class=c>-</td> <td>--&gt; <a href='Canon.html#CNTH'>Canon CNTH Tags</a></td></tr> <tr class=b> <td>'DcMD'</td> <td>KodakDcMD</td> <td class=c>-</td> <td>--&gt; <a href='Kodak.html#DcMD'>Kodak DcMD Tags</a></td></tr> <tr> <td>'FFMV'</td> <td>FujiFilmFFMV</td> <td class=c>-</td> <td>--&gt; <a href='FujiFilm.html#FFMV'>FujiFilm FFMV Tags</a></td></tr> <tr class=b> <td>'GoPr'</td> <td>GoProType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'INFO'</td> <td>SamsungINFO</td> <td class=c>-</td> <td>--&gt; <a href='Samsung.html#INFO'>Samsung INFO Tags</a></td></tr> <tr class=b> <td>'LEIC'</td> <td>LeicaLEIC</td> <td class=c>-</td> <td>--&gt; <a href='Panasonic.html#PANA'>Panasonic PANA Tags</a></td></tr> <tr> <td>'LOOP'</td> <td>LoopStyle</td> <td class=c>N</td> <td><span class=s>1 = Normal <br>2 = Palindromic</span></td></tr> <tr class=b> <td>'MMA0'</td> <td>MinoltaMMA0</td> <td class=c>-</td> <td>--&gt; <a href='Minolta.html#MMA'>Minolta MMA Tags</a></td></tr> <tr> <td>'MMA1'</td> <td>MinoltaMMA1</td> <td class=c>-</td> <td>--&gt; <a href='Minolta.html#MMA'>Minolta MMA Tags</a></td></tr> <tr class=b> <td>'MVTG'</td> <td>FujiFilmMVTG</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> <tr> <td>'NCDT'</td> <td>NikonNCDT</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#NCDT'>Nikon NCDT Tags</a></td></tr> <tr class=b> <td>'PANA'</td> <td>PanasonicPANA</td> <td class=c>-</td> <td>--&gt; <a href='Panasonic.html#PANA'>Panasonic PANA Tags</a></td></tr> <tr> <td>'PENT'</td> <td>PentaxPENT</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#PENT'>Pentax PENT Tags</a></td></tr> <tr class=b> <td>'PXMN'</td> <td>MakerNotePentax5b <br>MakerNotePentax5c <br>MakerNotePentaxUnknown</td> <td class=c>-<br>-<br>N</td> <td>--&gt; <a href='Pentax.html'>Pentax Tags</a> <br>--&gt; <a href='Pentax.html'>Pentax Tags</a></td></tr> <tr> <td>'PXTH'</td> <td>PentaxPreview</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#PXTH'>Pentax PXTH Tags</a></td></tr> <tr class=b> <td>'QVMI'</td> <td>CasioQVMI</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> <tr> <td>'RMKN'</td> <td>RicohRMKN</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> <tr class=b> <td>'RTHU'</td> <td>PreviewImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'SDLN'</td> <td>PlayMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'SelO'</td> <td>PlaySelection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TAGS'</td> <td>FujiFilmTags <br>KodakTags <br>KonicaMinoltaTags <br>MinoltaTags <br>NikonTags <br>OlympusTags1 <br>OlympusTags2 <br>OlympusTags3 <br>OlympusTags4 <br>PentaxTags <br>SamsungTags <br>SanyoMOV <br>SanyoMP4 <br>UnknownTags?</td> <td class=c>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-<br>N</td> <td>--&gt; <a href='FujiFilm.html#MOV'>FujiFilm MOV Tags</a> <br>--&gt; <a href='Kodak.html#MOV'>Kodak MOV Tags</a> <br>--&gt; <a href='Minolta.html#MOV1'>Minolta MOV1 Tags</a> <br>--&gt; <a href='Minolta.html#MOV2'>Minolta MOV2 Tags</a> <br>--&gt; <a href='Nikon.html#MOV'>Nikon MOV Tags</a> <br>--&gt; <a href='Olympus.html#MOV1'>Olympus MOV1 Tags</a> <br>--&gt; <a href='Olympus.html#MOV2'>Olympus MOV2 Tags</a> <br>--&gt; <a href='Olympus.html#MP4'>Olympus MP4 Tags</a> <br>--&gt; <a href='Olympus.html#MOV3'>Olympus MOV3 Tags</a> <br>--&gt; <a href='Pentax.html#MOV'>Pentax MOV Tags</a> <br>--&gt; <a href='Samsung.html#MP4'>Samsung MP4 Tags</a> <br>--&gt; <a href='Sanyo.html#MOV'>Sanyo MOV Tags</a> <br>--&gt; <a href='Sanyo.html#MP4'>Sanyo MP4 Tags</a></td></tr> <tr class=b> <td>'WLOC'</td> <td>WindowLocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'XMP_'</td> <td>XMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a></td></tr> <tr class=b> <td>'Xtra'</td> <td>MicrosoftXtra</td> <td class=c>-</td> <td>--&gt; <a href='Microsoft.html#Xtra'>Microsoft Xtra Tags</a></td></tr> <tr> <td>'albm'</td> <td>Album</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'albr'</td> <td>AlbumArtist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'angl'</td> <td>CameraAngle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'apmd'</td> <td>ApertureMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'auth'</td> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ccid'</td> <td>ContentID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'cdis'</td> <td>ContentDistributorID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'chpl'</td> <td>ChapterList</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'clfn'</td> <td>ClipFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'clid'</td> <td>ClipID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'clsf'</td> <td>Classification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'cmid'</td> <td>CameraID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'cmnm'</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'coll'</td> <td>CollectionName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'cprt'</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'cver'</td> <td>CodeVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'cvru'</td> <td>CoverURI</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'date'</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'dscp'</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'gnre'</td> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'hinf'</td> <td>HintTrackInfo</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#HintTrackInfo'>QuickTime HintTrackInfo Tags</a></td></tr> <tr class=b> <td>'hinv'</td> <td>HintVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'hnti'</td> <td>HintInfo</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#HintInfo'>QuickTime HintInfo Tags</a></td></tr> <tr class=b> <td>'htcb'</td> <td>HTCBinary</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#HTCBinary'>QuickTime HTCBinary Tags</a></td></tr> <tr> <td>'icnu'</td> <td>IconURI</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'infu'</td> <td>InfoURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'kgtt'</td> <td>TrackType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'kywd'</td> <td>Keywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'loci'</td> <td>LocationInformation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'lrcu'</td> <td>LyricsURI</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'manu'</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'meta'</td> <td>Meta</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Meta'>QuickTime Meta Tags</a></td></tr> <tr> <td>'modl'</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'name'</td> <td>Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'perf'</td> <td>Performer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ptv '</td> <td>PrintToVideo</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#Video'>QuickTime Video Tags</a></td></tr> <tr> <td>'reel'</td> <td>ReelName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'rtng'</td> <td>Rating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'scen'</td> <td>Scene</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'scrn'</td> <td>OlympusPreview</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#scrn'>Olympus scrn Tags</a></td></tr> <tr> <td>'shot'</td> <td>ShotName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'slno'</td> <td>SerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'smta'</td> <td>SamsungSmta</td> <td class=c>-</td> <td>--&gt; <a href='Samsung.html#smta'>Samsung smta Tags</a></td></tr> <tr class=b> <td>'tags'</td> <td>Audible_tags</td> <td class=c>-</td> <td>--&gt; <a href='Audible.html#tags'>Audible tags Tags</a></td></tr> <tr> <td>'thmb'</td> <td>MakerNotePentax5a <br>OlympusThumbnail <br>ThumbnailImage <br>ThumbnailPNG <br>UnknownThumbnail</td> <td class=c>-<br>-<br>N<br>N<br>N</td> <td>--&gt; <a href='Pentax.html'>Pentax Tags</a> <br>--&gt; <a href='Olympus.html#thmb'>Olympus thmb Tags</a></td></tr> <tr class=b> <td>'titl'</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'urat'</td> <td>UserRating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'vndr'</td> <td>Vendor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'yrrc'</td> <td>Year</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;ART"</td> <td>Artist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;alb"</td> <td>Album</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;arg"</td> <td>Arranger</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;ark"</td> <td>ArrangerKeywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;cmt"</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;cok"</td> <td>ComposerKeywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;com"</td> <td>Composer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;cpy"</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;day"</td> <td>ContentCreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;dir"</td> <td>Director</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;ed1"</td> <td>Edit1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;ed2"</td> <td>Edit2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;ed3"</td> <td>Edit3</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;ed4"</td> <td>Edit4</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;ed5"</td> <td>Edit5</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;ed6"</td> <td>Edit6</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;ed7"</td> <td>Edit7</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;ed8"</td> <td>Edit8</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;ed9"</td> <td>Edit9</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;fmt"</td> <td>Format</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;gen"</td> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;grp"</td> <td>Grouping</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;inf"</td> <td>Information</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;isr"</td> <td>ISRCCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;lab"</td> <td>RecordLabelName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;lal"</td> <td>RecordLabelURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;lyr"</td> <td>Lyrics</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;mak"</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;mal"</td> <td>MakerURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;mod"</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;nam"</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;pdk"</td> <td>ProducerKeywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;phg"</td> <td>RecordingCopyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;prd"</td> <td>Producer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;prf"</td> <td>Performers</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;prk"</td> <td>PerformerKeywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;prl"</td> <td>PerformerURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;req"</td> <td>Requirements</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;snk"</td> <td>SubtitleKeywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;snm"</td> <td>Subtitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;src"</td> <td>SourceCredits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;swf"</td> <td>SongWriter</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;swk"</td> <td>SongWriterKeywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;swr"</td> <td>SoftwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;too"</td> <td>Encoder</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;trk"</td> <td>Track</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>"&copy;wrt"</td> <td>Composer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>"&copy;xyz"</td> <td>GPSCoordinates</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='HintTrackInfo'>QuickTime HintTrackInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'dimm'</td> <td>ImmediateDataBytes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'dmax'</td> <td>LargestPacketDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'dmed'</td> <td>MediaTrackBytes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'drep'</td> <td>RepeatedDataBytes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'maxr'</td> <td>MaxDataRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'npck'</td> <td>NumPackets</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'nump'</td> <td>NumPackets</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'payt'</td> <td>PayloadType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pmax'</td> <td>LargestPacketSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'tmax'</td> <td>MaxTransmissionTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'tmin'</td> <td>MinTransmissionTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'totl'</td> <td>TotalBytes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'tpaY'</td> <td>TotalBytesNoRTPHeaders</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'tpay'</td> <td>TotalBytesNoRTPHeaders</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'tpyl'</td> <td>TotalBytesNoRTPHeaders</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'trpY'</td> <td>TotalBytes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'trpy'</td> <td>TotalBytes</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='HintInfo'>QuickTime HintInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'rtp '</td> <td>RealtimeStreamingProtocol</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'sdp '</td> <td>StreamingDataProtocol</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='HTCBinary'>QuickTime HTCBinary Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='Video'>QuickTime Video Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>DisplaySize</td> <td class=c>N</td> <td><span class=s>0 = Normal <br>1 = Double Size <br>2 = Half Size <br>3 = Full Screen <br>4 = Current Size</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>SlideShow</td> <td class=c>N</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='UserMedia'>QuickTime UserMedia Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'MTDT'</td> <td>MetaData</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#MetaData'>QuickTime MetaData Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='MetaData'>QuickTime MetaData Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>ProductionDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>Software</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>Product</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000a = 10'>0x000a</td> <td>TrackProperty</td> <td class=c>N</td> <td><span class=s>[Value 0] <br>0x0 = No presentation <br>Bit 0 = Main track <br>[Value 1] <br>0x0 = No attributes <br>Bit 15 = Read only</span></td></tr> <tr class=b> <td title='0x000b = 11'>0x000b</td> <td>TimeZone</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000c = 12'>0x000c</td> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MovieHeader'>QuickTime MovieHeader Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>MovieHeaderVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>CreateDate</td> <td class=c>int32u</td> <td><span class=s><span class=n>(converted from UTC to local time if the QuickTimeUTC option is set)</span></span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>ModifyDate</td> <td class=c>int32u</td> <td><span class=s><span class=n>(converted from UTC to local time if the QuickTimeUTC option is set)</span></span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>TimeScale</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>PreferredRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>PreferredVolume</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>MatrixStructure</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>PreviewTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>PreviewDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>PosterTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>SelectionTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>SelectionDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='23 = 0x17'>23</td> <td>CurrentTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>NextTrackID</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Preview'>QuickTime Preview Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PreviewDate</td> <td class=c>int32u</td> <td><span class=s><span class=n>(converted from UTC to local time if the QuickTimeUTC option is set)</span></span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>PreviewVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>PreviewAtomType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>PreviewAtomIndex</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Profile'>QuickTime Profile Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'APRF'</td> <td>AudioProfile</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#AudioProf'>QuickTime AudioProf Tags</a></td></tr> <tr class=b> <td>'FPRF'</td> <td>FileGlobalProfile</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#FileProf'>QuickTime FileProf Tags</a></td></tr> <tr> <td>'OLYM'</td> <td>OlympusOLYM</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#OLYM'>Olympus OLYM Tags</a></td></tr> <tr class=b> <td>'VPRF'</td> <td>VideoProfile</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#VideoProf'>QuickTime VideoProf Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='AudioProf'>QuickTime AudioProf Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>AudioProfileVersion?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>AudioTrackID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>AudioCodec</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>AudioCodecInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>AudioAttributes</td> <td class=c>N</td> <td><span class=s>Bit 0 = Encrypted <br>Bit 1 = Variable bitrate <br>Bit 2 = Dual mono</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>AudioAvgBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>AudioMaxBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>AudioSampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>AudioChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FileProf'>QuickTime FileProf Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FileProfileVersion?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>FileFunctionFlags</td> <td class=c>N</td> <td><span class=s>Bit 28 = Fragmented <br>Bit 29 = Additional tracks <br>Bit 30 = Edited</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='VideoProf'>QuickTime VideoProf Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>VideoProfileVersion?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>VideoTrackID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>VideoCodec</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>VideoCodecInfo?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>VideoAttributes</td> <td class=c>N</td> <td><span class=s>Bit 0 = Encrypted <br>Bit 1 = Variable bitrate <br>Bit 2 = Variable frame rate <br>Bit 3 = Interlaced</span></td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>VideoAvgBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>VideoMaxBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>VideoAvgFrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>VideoMaxFrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>VideoSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>PixelAspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Flip'>QuickTime Flip Tags</a></h2> <p>Found in MP4 files from Flip Video cameras.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>PreviewImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>PreviewImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>PreviewImageLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>SerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>PreviewImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ImageFile'>QuickTime ImageFile Tags</a></h2> <p>Tags used in QTIF QuickTime Image Files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'idat'</td> <td>ImageData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'idsc'</td> <td>ImageDescription</td> <td class=c>-</td> <td>--&gt; <a href='QuickTime.html#ImageDesc'>QuickTime ImageDesc Tags</a></td></tr> <tr> <td>'iicc'</td> <td>ICC_Profile</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Sep 14, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Radiance.html����������������������������������������������������000644 �000765 �000024 �00000004765 12527350231 021436� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Radiance Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Radiance Tags</h2> <p>Information extracted from Radiance RGBE HDR images. Tag ID&#39;s are all uppercase as stored in the file, but converted to lowercase by when extracting to avoid conflicts with internal ExifTool variables. See <a href="http://radsite.lbl.gov/radiance/refer/filefmts.pdf">http://radsite.lbl.gov/radiance/refer/filefmts.pdf</a> and <a href="http://www.graphics.cornell.edu/online/formats/rgbe/">http://www.graphics.cornell.edu/online/formats/rgbe/</a> for the specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'_command'</td> <td>Command</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'_orient'</td> <td>Orientation</td> <td class=c>N</td> <td><table class=cols><tr> <td>&#39;+X +Y&#39; = Rotate 90 CW <br>&#39;+X -Y&#39; = Mirror horizontal and rotate 270 CW <br>&#39;+Y +X&#39; = Mirror vertical <br>&#39;+Y -X&#39; = Rotate 180 <br>&#39;-X +Y&#39; = Mirror horizontal and rotate 90 CW <br>&#39;-X -Y&#39; = Rotate 270 CW <br>&#39;-Y +X&#39; = Horizontal (normal) <br>&#39;-Y -X&#39; = Mirror horizontal</td></tr></table> </td></tr> <tr> <td>'colorcorr'</td> <td>ColorCorrection</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'exposure'</td> <td>Exposure</td> <td class=c>N</td> <td><span class=s><span class=n>(divide pixel values by this to get watts/steradian/meter^2)</span></span></td></tr> <tr> <td>'format'</td> <td>Format</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'gamma'</td> <td>Gamma</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pixaspect'</td> <td>PixelAspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'primaries'</td> <td>ColorPrimaries</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'software'</td> <td>Software</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'view'</td> <td>View</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Dec 14, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������Image-ExifTool-10.10/html/TagNames/Rawzor.html������������������������������������������������������000644 �000765 �000024 �00000002334 11403447640 021205� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Rawzor Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Rawzor Tags</h2> <p>Rawzor files store compressed images of other formats. As well as the information listed below, exiftool uncompresses and extracts the meta information from the original image.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CompressionFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>OriginalFileSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>OriginalFileType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>RawzorCreatorVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>RawzorRequiredVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jun 8, 2010</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Real.html��������������������������������������������������������000644 �000765 �000024 �00000044414 12527350232 020607� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Real Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Real Tags</h2> <p> ExifTool recognizes three basic types of Real audio/video files: 1) RealMedia (RM, RV and RMVB), 2) RealAudio (RA), and 3) Real Metafile (RAM and RPM). </p> <h2><a name='Media'>Real Media Tags</a></h2> <p>These <b>Tag ID</b>&#39;s are Chunk ID&#39;s used in RealMedia and RealVideo (RM, RV and RMVB) files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'CONT'</td> <td>CONT</td> <td class=c>-</td> <td>--&gt; <a href='Real.html#ContentDescr'>Real ContentDescr Tags</a></td></tr> <tr class=b> <td>'MDPR'</td> <td>MDPR</td> <td class=c>-</td> <td>--&gt; <a href='Real.html#MediaProps'>Real MediaProps Tags</a></td></tr> <tr> <td>'PROP'</td> <td>PROP</td> <td class=c>-</td> <td>--&gt; <a href='Real.html#Properties'>Real Properties Tags</a></td></tr> <tr class=b> <td>'RJMD'</td> <td>RJMD</td> <td class=c>-</td> <td>--&gt; <a href='Real.html#Metadata'>Real Metadata Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ContentDescr'>Real ContentDescr Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Sequence</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>TitleLen?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>AuthorLen?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>CopyrightLen?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>CommentLen?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MediaProps'>Real MediaProps Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Sequence</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>StreamNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>StreamMaxBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>StreamAvgBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>StreamMaxPacketSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>StreamAvgPacketSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>StreamStartTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>StreamPreroll</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>StreamDuration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>StreamNameLen?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>StreamName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>StreamMimeLen?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>StreamMimeType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>FileInfoLen?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>FileInfoLen2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>FileInfoVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>PhysicalStreams?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>PhysicalStreamNumbers?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>DataOffsets?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>NumRules?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>PhysicalStreamNumberMap?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>NumProperties?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>FileInfoProperties</td> <td class=c>-</td> <td>--&gt; <a href='Real.html#FileInfo'>Real FileInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='FileInfo'>Real FileInfo Tags</a></h2> <p>The following tags have been observed in the FileInfo properties, but any other existing information will also be extracted.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Audiences'</td> <td>Audiences</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Audio Format'</td> <td>AudioFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Content Rating'</td> <td>ContentRating</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = No Rating <br>1 = All Ages <br>2 = Older Children <br>3 = Younger Teens <br>4 = Older Teens <br>5 = Adult Supervision Recommended <br>6 = Adults Only</td></tr></table> </td></tr> <tr class=b> <td>'Creation Date'</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Description'</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'File ID'</td> <td>FileID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Generated By'</td> <td>Software</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Indexable'</td> <td>Indexable</td> <td class=c>N</td> <td><span class=s>0 = False <br>1 = True</span></td></tr> <tr> <td>'Keywords'</td> <td>Keywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Modification Date'</td> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Target Audiences'</td> <td>TargetAudiences</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Video Quality'</td> <td>VideoQuality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'audioMode'</td> <td>AudioMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'videoMode'</td> <td>VideoMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Properties'>Real Properties Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Sequence</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>MaxBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>AvgBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>MaxPacketSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>AvgPacketSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>NumPackets</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>Preroll</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>IndexOffset?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>DataOffset?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>NumStreams</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>Flags</td> <td class=c>N</td> <td><span class=s>Bit 0 = Allow Recording <br>Bit 1 = Perfect Play <br>Bit 2 = Live <br>Bit 3 = Allow Download</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Metadata'>Real Metadata Tags</a></h2> <p>The tags below represent information which has been observed in the Real Metadata format, but ExifTool will extract any information it finds in this format. (As far as I can tell from the referenced documentation, string values should be plain text, but this is not the case for the only sample file I have been able to obtain containing this information. These tags could also be split into separate sub-directories, but this will wait until I have better documentation or a more complete set of samples.)</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Album/Name'</td> <td>AlbumName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Track/Category'</td> <td>TrackCategory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Track/Comments'</td> <td>TrackComments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Track/Lyrics'</td> <td>TrackLyrics</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Audio'>Real Audio Tags</a></h2> <p>Tags in the following table reference information extracted from various versions of RealAudio (RA) files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'.ra3'</td> <td>RA3</td> <td class=c>-</td> <td>--&gt; <a href='Real.html#AudioV3'>Real AudioV3 Tags</a></td></tr> <tr class=b> <td>'.ra4'</td> <td>RA4</td> <td class=c>-</td> <td>--&gt; <a href='Real.html#AudioV4'>Real AudioV4 Tags</a></td></tr> <tr> <td>'.ra5'</td> <td>RA5</td> <td class=c>-</td> <td>--&gt; <a href='Real.html#AudioV5'>Real AudioV5 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='AudioV3'>Real AudioV3 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Sequence</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Channels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>Unknown?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>BytesPerMinute</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>AudioBytes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>TitleLen?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ArtistLen?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>Artist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>CopyrightLen?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>CommentLen?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AudioV4'>Real AudioV4 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Sequence</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FourCC1?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>AudioFileSize?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>Version2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>HeaderSize?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>CodecFlavorID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>CodedFrameSize?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>AudioBytes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>BytesPerMinute</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>Unknown?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>SubPacketH?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>AudioFrameSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>SubPacketSize?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>Unknown?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>SampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>Unknown?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>BitsPerSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>Channels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>FourCC2Len?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>FourCC2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>FourCC3Len?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>FourCC3?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>Unknown?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>Unknown?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='23 = 0x17'>23</td> <td>TitleLen?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>ArtistLen?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='26 = 0x1a'>26</td> <td>Artist</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>CopyrightLen?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>CommentLen?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AudioV5'>Real AudioV5 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Sequence</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FourCC1?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>AudioFileSize?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>Version2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>HeaderSize?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>CodecFlavorID?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>CodedFrameSize?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>AudioBytes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>BytesPerMinute</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>Unknown?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>SubPacketH?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>FrameSize?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>SubPacketSize?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>SampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>SampleRate2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>BitsPerSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>Channels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>Genr?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>FourCC3?</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Metafile'>Real Metafile Tags</a></h2> <p>Tags representing information extracted from Real Audio Metafile and RealMedia Plug-in Metafile (RAM and RPM) files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'txt'</td> <td>Text</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'url'</td> <td>URL</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jul 29, 2010</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Reconyx.html�����������������������������������������������������000644 �000765 �000024 �00000006536 12527350232 021356� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Reconyx Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Reconyx Tags</h2> <p>The following tags are extracted from the maker notes of Reconyx Hyperfire cameras such as the HC500, HC600 and PC900.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>MakerNoteVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>FirmwareDate</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>TriggerMode</td> <td class=c>string[2]</td> <td><span class=s>&#39;C&#39; = CodeLoc Not Entered <br>&#39;E&#39; = External Sensor <br>&#39;M&#39; = Motion Detection <br>&#39;T&#39; = Time Lapse</span></td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>Sequence</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>EventNumber</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>DateTimeOriginal</td> <td class=c>int16u[6]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>MoonPhase</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = New <br>1 = New Crescent <br>2 = First Quarter <br>3 = Waxing Gibbous</td><td>&nbsp;&nbsp;</td> <td>4 = Full <br>5 = Waning Gibbous <br>6 = Last Quarter <br>7 = Old Crescent</td></tr></table> </td></tr> <tr> <td class=r title='19 = 0x13'>19</td> <td>AmbientTemperatureFahrenheit</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>AmbientTemperature</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>SerialNumber</td> <td class=c>undef[30]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='36 = 0x24'>36</td> <td>Contrast</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='37 = 0x25'>37</td> <td>Brightness</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>Sharpness</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='39 = 0x27'>39</td> <td>Saturation</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>InfraredIlluminator</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='41 = 0x29'>41</td> <td>MotionSensitivity</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>BatteryVoltage</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='43 = 0x2b'>43</td> <td>UserLabel</td> <td class=c>string[22]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Oct 21, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Ricoh.html�������������������������������������������������������000644 �000765 �000024 �00000052277 12612450132 020771� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Ricoh Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Ricoh Tags</h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>MakerNoteType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>FirmwareVersion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>SerialNumber <br>InternalSerialNumber</td> <td class=c>undef[16]<br>undef[16]</td> <td><span class=s><span class=n>(the serial number stamped on the camera begins with 2 model-specific letters followed by the last 8 digits of this value. For the GXR, this is the serial number of the lens unit)</span></span></td></tr> <tr class=b> <td title='0x0e00 = 3584'>0x0e00</td> <td>PrintIM</td> <td class=c>-</td> <td>--&gt; <a href='PrintIM.html'>PrintIM Tags</a></td></tr> <tr> <td title='0x1000 = 4096'>0x1000</td> <td>RecordingFormat</td> <td class=c>int16u</td> <td><span class=s>2 = JPEG <br>3 = DNG</span></td></tr> <tr class=b> <td title='0x1001 = 4097'>0x1001</td> <td>ImageInfo <br>ExposureProgram</td> <td class=c>-<br>int16u</td> <td>--&gt; <a href='Ricoh.html#ImageInfo'>Ricoh ImageInfo Tags</a> <br><span class=n>(GR)</span> <br><table class=cols><tr> <td>1 = Auto <br>2 = Program AE <br>3 = Aperture-priority AE <br>4 = Shutter speed priority AE <br>5 = Shutter/aperture priority AE <br>6 = Manual <br>7 = Movie</td></tr></table> </td></tr> <tr> <td title='0x1002 = 4098'>0x1002</td> <td>DriveMode</td> <td class=c>int16u</td> <td><span class=s><span class=n>(valid only for some models)</span> <br>0 = Single-frame <br>1 = Continuous <br>8 = AF-priority Continuous</span></td></tr> <tr class=b> <td title='0x1003 = 4099'>0x1003</td> <td>Sharpness <br>WhiteBalance</td> <td class=c>int32u<br>int16u</td> <td><span class=s>0 = Sharp <br>1 = Normal <br>2 = Soft <br><span class=n>(GR)</span></span><table class=cols><tr> <td>0 = Auto <br>1 = Multi-P Auto <br>2 = Daylight <br>3 = Cloudy <br>4 = Incandescent 1 <br>5 = Incandescent 2 <br>6 = Daylight Fluorescent <br>7 = Neutral White Fluorescent <br>8 = Cool White Fluorescent <br>9 = Warm White Fluorescent <br>10 = Manual <br>11 = Kelvin <br>12 = Shade</td></tr></table> </td></tr> <tr> <td title='0x1004 = 4100'>0x1004</td> <td>WhiteBalanceFineTune</td> <td class=c>int16u</td> <td><span class=s><span class=n>(2 numbers: amount of adjustment towards Amber and Green. Not valid for all models)</span></span></td></tr> <tr class=b> <td title='0x1006 = 4102'>0x1006</td> <td>FocusMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Manual <br>2 = Multi AF <br>3 = Spot AF <br>4 = Snap <br>5 = Infinity</td><td>&nbsp;&nbsp;</td> <td>7 = Face Detect <br>8 = Subject Tracking <br>9 = Pinpoint AF <br>10 = Movie</td></tr></table> </td></tr> <tr> <td title='0x1007 = 4103'>0x1007</td> <td>AutoBracketing</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>9 = AE <br>11 = WB <br>16 = DR</td><td>&nbsp;&nbsp;</td> <td>17 = Contrast <br>18 = WB2 <br>19 = Effect</td></tr></table> </td></tr> <tr class=b> <td title='0x1009 = 4105'>0x1009</td> <td>MacroMode</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x100a = 4106'>0x100a</td> <td>FlashMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto, Fired <br>2 = On <br>3 = Auto, Fired, Red-eye reduction <br>4 = Slow Sync <br>5 = Manual <br>6 = On, Red-eye reduction <br>7 = Synchro, Red-eye reduction <br>8 = Auto, Did not fire</td></tr></table> </td></tr> <tr class=b> <td title='0x100b = 4107'>0x100b</td> <td>FlashExposureComp</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x100c = 4108'>0x100c</td> <td>ManualFlashOutput</td> <td class=c>rational64s</td> <td><table class=cols><tr> <td>-288 = 1/64 <br>-240 = 1/32 <br>-216 = 1/22 <br>-192 = 1/16</td><td>&nbsp;&nbsp;</td> <td>-168 = 1/11 <br>-144 = 1/8 <br>-120 = 1/5.6 <br>-96 = 1/4</td><td>&nbsp;&nbsp;</td> <td>-72 = 1/2.8 <br>-48 = 1/2 <br>-24 = 1/1.4 <br>0 = Full</td></tr></table> </td></tr> <tr class=b> <td title='0x100d = 4109'>0x100d</td> <td>FullPressSnap</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x100e = 4110'>0x100e</td> <td>DynamicRangeExpansion</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>3 = Weak <br>4 = Medium <br>5 = Strong</span></td></tr> <tr class=b> <td title='0x100f = 4111'>0x100f</td> <td>NoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = Weak <br>2 = Medium <br>3 = Strong</span></td></tr> <tr> <td title='0x1010 = 4112'>0x1010</td> <td>ImageEffects</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Standard <br>1 = Vivid <br>3 = Black &amp; White <br>5 = B&amp;W Toning Effect <br>6 = Setting 1 <br>7 = Setting 2 <br>9 = High-contrast B&amp;W</td><td>&nbsp;&nbsp;</td> <td>10 = Cross Process <br>11 = Positive Film <br>12 = Bleach Bypass <br>13 = Retro <br>15 = Miniature <br>17 = High Key</td></tr></table> </td></tr> <tr class=b> <td title='0x1011 = 4113'>0x1011</td> <td>Vignetting</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = Low <br>2 = Medium <br>3 = High</span></td></tr> <tr> <td title='0x1012 = 4114'>0x1012</td> <td>Contrast</td> <td class=c>int32u</td> <td><span class=s>2147483647 = MAX</span></td></tr> <tr class=b> <td title='0x1013 = 4115'>0x1013</td> <td>Saturation</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1014 = 4116'>0x1014</td> <td>Sharpness</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1015 = 4117'>0x1015</td> <td>ToningEffect</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Sepia <br>2 = Red <br>3 = Green</td><td>&nbsp;&nbsp;</td> <td>4 = Blue <br>5 = Purple <br>6 = B&amp;W <br>7 = Color</td></tr></table> </td></tr> <tr> <td title='0x1016 = 4118'>0x1016</td> <td>HueAdjust</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Basic <br>2 = Magenta <br>3 = Yellow</td><td>&nbsp;&nbsp;</td> <td>4 = Normal <br>5 = Warm <br>6 = Cool</td></tr></table> </td></tr> <tr class=b> <td title='0x1017 = 4119'>0x1017</td> <td>WideAdapter</td> <td class=c>int16u</td> <td><span class=s>0 = Not Attached <br>2 = Attached</span></td></tr> <tr> <td title='0x1018 = 4120'>0x1018</td> <td>CropMode35mm</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x1019 = 4121'>0x1019</td> <td>NDFilter</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x101a = 4122'>0x101a</td> <td>WBBracketShotNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1200 = 4608'>0x1200</td> <td>AFStatus</td> <td class=c>int16u</td> <td><span class=s>0 = Out of Focus <br>1 = In Focus</span></td></tr> <tr> <td title='0x1201 = 4609'>0x1201</td> <td>AFAreaXPosition1</td> <td class=c>int32u</td> <td><span class=s><span class=n>(manual AF area position in a 1280x864 image)</span></span></td></tr> <tr class=b> <td title='0x1202 = 4610'>0x1202</td> <td>AFAreaYPosition1</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1203 = 4611'>0x1203</td> <td>AFAreaXPosition</td> <td class=c>int32u</td> <td><span class=s><span class=n>(manual AF area position in the full image)</span></span></td></tr> <tr class=b> <td title='0x1204 = 4612'>0x1204</td> <td>AFAreaYPosition</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1205 = 4613'>0x1205</td> <td>AFAreaMode</td> <td class=c>int16u</td> <td><span class=s>0 = Auto <br>2 = Manual</span></td></tr> <tr class=b> <td title='0x1307 = 4871'>0x1307</td> <td>ColorTempKelvin</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1308 = 4872'>0x1308</td> <td>ColorTemperature</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1500 = 5376'>0x1500</td> <td>FocalLength</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1601 = 5633'>0x1601</td> <td>SensorWidth</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1602 = 5634'>0x1602</td> <td>SensorHeight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1603 = 5635'>0x1603</td> <td>CroppedImageWidth</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1604 = 5636'>0x1604</td> <td>CroppedImageHeight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x2001 = 8193'>0x2001</td> <td>RicohSubdir <br>RicohSubdirIFD <br>RicohRR1Subdir</td> <td class=c>-<br>-<br>-</td> <td>--&gt; <a href='Ricoh.html#Subdir'>Ricoh Subdir Tags</a> <br>--&gt; <a href='Ricoh.html#Subdir'>Ricoh Subdir Tags</a> <br>--&gt; <a href='Ricoh.html#Subdir'>Ricoh Subdir Tags</a></td></tr> <tr class=b> <td title='0x4001 = 16385'>0x4001</td> <td>ThetaSubdir</td> <td class=c>-</td> <td>--&gt; <a href='Ricoh.html#ThetaSubdir'>Ricoh ThetaSubdir Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ImageInfo'>Ricoh ImageInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>RicohImageWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>RicohImageHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>RicohDate</td> <td class=c>int8u[7]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28</td> <td>PreviewImageStart</td> <td class=c title=' * = Protected'>int16u*</td> <td>&nbsp;</td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>PreviewImageLength</td> <td class=c title=' * = Protected'>int16u*</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>FlashMode</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Auto <br>2 = On</span></td></tr> <tr> <td class=r title='33 = 0x21'>33</td> <td>Macro</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='34 = 0x22'>34</td> <td>Sharpness</td> <td class=c>int8u</td> <td><span class=s>0 = Sharp <br>1 = Normal <br>2 = Soft</span></td></tr> <tr> <td class=r title='38 = 0x26'>38</td> <td>WhiteBalance</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Daylight <br>2 = Cloudy <br>3 = Tungsten</td><td>&nbsp;&nbsp;</td> <td>4 = Fluorescent <br>5 = Manual <br>7 = Detail <br>9 = Multi-pattern Auto</td></tr></table> </td></tr> <tr class=b> <td class=r title='39 = 0x27'>39</td> <td>ISOSetting</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = 64 <br>2 = 100 <br>4 = 200</td><td>&nbsp;&nbsp;</td> <td>6 = 400 <br>7 = 800 <br>8 = 1600 <br>9 = Auto</td><td>&nbsp;&nbsp;</td> <td>10 = 3200 <br>11 = 100 (Low)</td></tr></table> </td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>Saturation</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = High <br>1 = Normal <br>2 = Low <br>3 = B&amp;W</td><td>&nbsp;&nbsp;</td> <td>6 = Toning Effect <br>9 = Vivid <br>10 = Natural</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='Subdir'>Ricoh Subdir Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>ManufactureDate1</td> <td class=c>string[20]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>ManufactureDate2</td> <td class=c>string[20]</td> <td>&nbsp;</td></tr> <tr> <td title='0x001a = 26'>0x001a</td> <td>FaceInfo</td> <td class=c>-</td> <td>--&gt; <a href='Ricoh.html#FaceInfo'>Ricoh FaceInfo Tags</a></td></tr> <tr class=b> <td title='0x0029 = 41'>0x0029</td> <td>FirmwareInfo</td> <td class=c>-</td> <td>--&gt; <a href='Ricoh.html#FirmwareInfo'>Ricoh FirmwareInfo Tags</a></td></tr> <tr> <td title='0x002a = 42'>0x002a</td> <td>NoiseReduction</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>1 = Weak <br>2 = Strong <br>3 = Max</span></td></tr> <tr class=b> <td title='0x002c = 44'>0x002c</td> <td>SerialInfo</td> <td class=c>-</td> <td>--&gt; <a href='Ricoh.html#SerialInfo'>Ricoh SerialInfo Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceInfo'>Ricoh FaceInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='181 = 0xb5'>181</td> <td>FacesDetected</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='182 = 0xb6'>182</td> <td>FaceDetectFrameSize</td> <td class=c>int16u[2]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='188 = 0xbc'>188</td> <td>Face1Position</td> <td class=c>int16u[4]</td> <td><span class=s><span class=n>(left, top, width and height of detected face in coordinates of FaceDetectFrameSize with increasing Y downwards)</span></span></td></tr> <tr class=b> <td class=r title='200 = 0xc8'>200</td> <td>Face2Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='212 = 0xd4'>212</td> <td>Face3Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='224 = 0xe0'>224</td> <td>Face4Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='236 = 0xec'>236</td> <td>Face5Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='248 = 0xf8'>248</td> <td>Face6Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='260 = 0x104'>260</td> <td>Face7Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='272 = 0x110'>272</td> <td>Face8Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FirmwareInfo'>Ricoh FirmwareInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FirmwareRevision</td> <td class=c>string[12]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>FirmwareRevision2</td> <td class=c>string[12]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SerialInfo'>Ricoh SerialInfo Tags</a></h2> <p>This information is found in images from the GXR.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>BodyFirmware</td> <td class=c>string[16]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>BodySerialNumber</td> <td class=c>string[16]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>LensFirmware</td> <td class=c>string[16]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>LensSerialNumber</td> <td class=c>string[16]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ThetaSubdir'>Ricoh ThetaSubdir Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>Accelerometer</td> <td class=c>rational64s[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>Compass</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x000a = 10'>0x000a</td> <td>TimeZone</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Type2'>Ricoh Type2 Tags</a></h2> <p>Tags written by models such as the Ricoh HZ15 and the Pentax XG-1. These are not writable due to numerous formatting errors as written by these cameras.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0207 = 519'>0x0207</td> <td>RicohModel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0300 = 768'>0x0300</td> <td>RicohMake</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Text'>Ricoh Text Tags</a></h2> <p>Some Ricoh DC and RDC models use a text-based format for their maker notes instead of the IFD format used by the Caplio models. Below is a list of known tags in this information.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Bg'</td> <td>BlueGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Gg'</td> <td>GreenGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Rev'</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Rg'</td> <td>RedGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Rv'</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='RMETA'>Ricoh RMETA Tags</a></h2> <p>The Ricoh Caplio Pro G3 has the ability to add custom fields to the APP5 &quot;RMETA&quot; segment of JPEG images. While only a few observed tags have been defined below, ExifTool will extract any information found here.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Azimuth'</td> <td>Azimuth</td> <td class=c>N</td> <td><table class=cols><tr> <td>1 = N <br>2 = NNE <br>3 = NE <br>4 = ENE</td><td>&nbsp;&nbsp;</td> <td>5 = E <br>6 = ESE <br>7 = SE <br>8 = SSE</td><td>&nbsp;&nbsp;</td> <td>9 = S <br>10 = SSW <br>11 = SW <br>12 = WSW</td><td>&nbsp;&nbsp;</td> <td>13 = W <br>14 = WNW <br>15 = NW <br>16 = NNW</td></tr></table> </td></tr> <tr class=b> <td>'Condition'</td> <td>Condition</td> <td class=c>N</td> <td><span class=s>1 = Good <br>2 = Fair <br>3 = Poor <br>4 = Damaged</span></td></tr> <tr> <td>'Lit'</td> <td>Lit</td> <td class=c>N</td> <td><span class=s>1 = Yes <br>2 = No</span></td></tr> <tr class=b> <td>'Location'</td> <td>Location</td> <td class=c>N</td> <td><span class=s>1 = Verge <br>2 = Gantry <br>3 = Central reservation <br>4 = Roundabout</span></td></tr> <tr> <td>'Sign type'</td> <td>SignType</td> <td class=c>N</td> <td><span class=s>1 = Directional <br>2 = Warning <br>3 = Information</span></td></tr> <tr class=b> <td>'_audio'</td> <td>SoundFile</td> <td class=c>N</td> <td><span class=s><span class=n>(audio data recorded in JPEG images by the G700SE)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='AVI'>Ricoh AVI Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'mnrt'</td> <td>MakerNoteRicoh</td> <td class=c>-</td> <td>--&gt; <a href='Ricoh.html'>Ricoh Tags</a></td></tr> <tr class=b> <td>'rdc2'</td> <td>RicohRDC2?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'thum'</td> <td>ThumbnailImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ucmt'</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LensID'>Ricoh LensID Values</a></h2> <p>Lens units available for the GXR, used by the Ricoh Composite LensID tag. Note that unlike lenses for all other makes of cameras, the focal lengths in these model names have already been scaled to include the 35mm crop factor.</p> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>LensID</th><th>Value</th><th>LensID</th></tr> <tr><td>'RL1'</td><td>= GR Lens A12 50mm F2.5 Macro</td> <td class=b>'RL5'</td><td class=b>= GR Lens A12 28mm F2.5</td> </tr><tr><td>'RL2'</td><td>= Ricoh Lens S10 24-70mm F2.5-4.4 VC</td> <td class=b>'RL6'</td><td class=b>= Ricoh Lens A16 24-85mm F3.5-5.5</td> </tr><tr><td>'RL3'</td><td>= Ricoh Lens P10 28-300mm F3.5-5.6 VC</td> <td class=b>'RL8'</td><td class=b>= Mount A12</td> </tr></table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Oct 23, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/RIFF.html��������������������������������������������������������000644 �000765 �000024 �00000121442 12556674104 020460� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>RIFF Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>RIFF Tags</h2> <p>The RIFF container format is used various types of fines including WAV, AVI, WEBP, LA, OFR, PAC and WV. According to the EXIF specification, Meta information is embedded in two types of RIFF <code>LIST</code> chunks: <code>INFO</code> and <code>exif</code>, and information about the audio content is stored in the <code>fmt </code> chunk. As well as this information, some video information and proprietary manufacturer-specific information is also extracted.</p> <p>Large AVI videos may be a concatenation of two or more RIFF chunks. For these files, information is extracted from subsequent RIFF chunks as sub-documents, but the Duration is calculated for the full video.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'ALPH'</td> <td>ALPH</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#ALPH'>RIFF ALPH Tags</a></td></tr> <tr class=b> <td>'ANIM'</td> <td>ANIM</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#ANIM'>RIFF ANIM Tags</a></td></tr> <tr> <td>'ANMF'</td> <td>ANMF</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#ANMF'>RIFF ANMF Tags</a></td></tr> <tr class=b> <td>'EXIF'</td> <td>EXIF</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a> <br><span class='n s'>(WebP files)</span></td></tr> <tr> <td>'ICCP'</td> <td>ICC_Profile</td> <td class=c>-</td> <td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a> <br><span class='n s'>(WebP files)</span></td></tr> <tr class=b> <td>'IDIT'</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'JUNK'</td> <td>OlympusJunk <br>CasioJunk <br>RicohJunk <br>PentaxJunk <br>PentaxJunk2 <br>TextJunk</td> <td class=c>-<br>-<br>-<br>-<br>-<br>N</td> <td>--&gt; <a href='Olympus.html#AVI'>Olympus AVI Tags</a> <br>--&gt; <a href='EXIF.html'>EXIF Tags</a> <br>--&gt; <a href='Ricoh.html#AVI'>Ricoh AVI Tags</a> <br>--&gt; <a href='Pentax.html#Junk'>Pentax Junk Tags</a> <br>--&gt; <a href='Pentax.html#Junk2'>Pentax Junk2 Tags</a></td></tr> <tr class=b> <td>'JUNQ'</td> <td>OldXMP</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'LIST_INFO'</td> <td>Info</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#Info'>RIFF Info Tags</a></td></tr> <tr class=b> <td>'LIST_Tdat'</td> <td>Tdat</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#Tdat'>RIFF Tdat Tags</a></td></tr> <tr> <td>'LIST_exif'</td> <td>Exif</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#Exif'>RIFF Exif Tags</a></td></tr> <tr class=b> <td>'LIST_hdrl'</td> <td>Hdrl</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#Hdrl'>RIFF Hdrl Tags</a></td></tr> <tr> <td>'LIST_hydt'</td> <td>PentaxData</td> <td class=c>-</td> <td>--&gt; <a href='Pentax.html#AVI'>Pentax AVI Tags</a></td></tr> <tr class=b> <td>'LIST_ncdt'</td> <td>NikonData</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#AVI'>Nikon AVI Tags</a></td></tr> <tr> <td>'VP8 '</td> <td>VP8Bitstream</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#VP8'>RIFF VP8 Tags</a></td></tr> <tr class=b> <td>'VP8L'</td> <td>VP8L</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#VP8L'>RIFF VP8L Tags</a></td></tr> <tr> <td>'VP8X'</td> <td>VP8X</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#VP8X'>RIFF VP8X Tags</a></td></tr> <tr class=b> <td>'XMP '</td> <td>XMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a> <br><span class='n s'>(WebP files)</span></td></tr> <tr> <td>'_PMX'</td> <td>XMP</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html'>XMP Tags</a> <br><span class='n s'>(AVI and WAV files)</span></td></tr> <tr class=b> <td>'afsp'</td> <td>Afsp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'bext'</td> <td>BroadcastExtension</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#BroadcastExt'>RIFF BroadcastExt Tags</a></td></tr> <tr class=b> <td>'cue '</td> <td>CuePoints</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'fact'</td> <td>NumberOfSamples</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'fmt '</td> <td>AudioFormat</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#AudioFormat'>RIFF AudioFormat Tags</a></td></tr> <tr> <td>'olym'</td> <td>Olym</td> <td class=c>-</td> <td>--&gt; <a href='Olympus.html#WAV'>Olympus WAV Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ALPH'>RIFF ALPH Tags</a></h2> <p>WebP alpha chunk.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>AlphaPreprocessing</td> <td class=c>N</td> <td><span class=s>[Mask 0x03] <br>0x0 = none <br>0x1 = Level Reduction</span></td></tr> <tr class=b> <td class=r title='0 = 0x0'>0.1</td> <td>AlphaFiltering</td> <td class=c>N</td> <td><span class=s>[Mask 0x03] <br>0x0 = none <br>0x1 = Horizontal <br>0x2 = Vertical <br>0x3 = Gradient</span></td></tr> <tr> <td class=r title='0 = 0x0'>0.2</td> <td>AlphaCompression</td> <td class=c>N</td> <td><span class=s>[Mask 0x03] <br>0x0 = none <br>0x1 = Lossless</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ANIM'>RIFF ANIM Tags</a></h2> <p>WebP animation chunk.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>BackgroundColor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>AnimationLoopCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ANMF'>RIFF ANMF Tags</a></h2> <p>WebP animation frame chunk.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>Duration</td> <td class=c>N</td> <td><span class=s><span class=n>(extracted as the sum of durations of all animation frames)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Info'>RIFF Info Tags</a></h2> <p>RIFF INFO tags found in WAV audio and AVI video files. Tags which are part of the EXIF 2.3 specification have an underlined Tag Name in the HTML version of this documentation. Other tags are found in AVI files generated by some software.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'AGES'</td> <td>Rated</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'CMNT'</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'CODE'</td> <td>EncodedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'COMM'</td> <td>Comments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'DIRC'</td> <td>Directory</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'DISP'</td> <td>SoundSchemeTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'DTIM'</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'GENR'</td> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IARL'</td> <td><u>ArchivalLocation</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IART'</td> <td><u>Artist</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IAS1'</td> <td>FirstLanguage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IAS2'</td> <td>SecondLanguage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IAS3'</td> <td>ThirdLanguage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IAS4'</td> <td>FourthLanguage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IAS5'</td> <td>FifthLanguage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IAS6'</td> <td>SixthLanguage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IAS7'</td> <td>SeventhLanguage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IAS8'</td> <td>EighthLanguage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IAS9'</td> <td>NinthLanguage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IBSU'</td> <td>BaseURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ICAS'</td> <td>DefaultAudioStream</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ICDS'</td> <td>CostumeDesigner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ICMS'</td> <td><u>Commissioned</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ICMT'</td> <td><u>Comment</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ICNM'</td> <td>Cinematographer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ICNT'</td> <td>Country</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ICOP'</td> <td><u>Copyright</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ICRD'</td> <td><u>DateCreated</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ICRP'</td> <td><u>Cropped</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IDIM'</td> <td><u>Dimensions</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IDIT'</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IDPI'</td> <td><u>DotsPerInch</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IDST'</td> <td>DistributedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IEDT'</td> <td>EditedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IENC'</td> <td>EncodedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IENG'</td> <td><u>Engineer</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IGNR'</td> <td><u>Genre</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IKEY'</td> <td><u>Keywords</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ILGT'</td> <td><u>Lightness</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ILGU'</td> <td>LogoURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ILIU'</td> <td>LogoIconURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ILNG'</td> <td>Language</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IMBI'</td> <td>MoreInfoBannerImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IMBU'</td> <td>MoreInfoBannerURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IMED'</td> <td><u>Medium</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IMIT'</td> <td>MoreInfoText</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IMIU'</td> <td>MoreInfoURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IMUS'</td> <td>MusicBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'INAM'</td> <td><u>Title</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IPDS'</td> <td>ProductionDesigner</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IPLT'</td> <td><u>NumColors</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IPRD'</td> <td><u>Product</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IPRO'</td> <td>ProducedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IRIP'</td> <td>RippedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IRTD'</td> <td>Rating</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ISBJ'</td> <td><u>Subject</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ISFT'</td> <td><u>Software</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ISGN'</td> <td>SecondaryGenre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ISHP'</td> <td><u>Sharpness</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ISMP'</td> <td>TimeCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ISRC'</td> <td><u>Source</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ISRF'</td> <td><u>SourceForm</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ISTD'</td> <td>ProductionStudio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ISTR'</td> <td>Starring</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ITCH'</td> <td><u>Technician</u></td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IWMU'</td> <td>WatermarkURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IWRI'</td> <td>WrittenBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'LANG'</td> <td>Language</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'LOCA'</td> <td>Location</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'PRT1'</td> <td>Part</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'PRT2'</td> <td>NumberOfParts</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'RATE'</td> <td>Rate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'STAR'</td> <td>Starring</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'STAT'</td> <td>Statistics</td> <td class=c>N</td> <td><span class=s>[Value 3] <br>0 = Bad <br>1 = OK</span></td></tr> <tr> <td>'TAPE'</td> <td>TapeName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TCDO'</td> <td>EndTimecode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TCOD'</td> <td>StartTimecode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TITL'</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TLEN'</td> <td>Length</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TORG'</td> <td>Organization</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TRCK'</td> <td>TrackNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TURL'</td> <td>URL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TVER'</td> <td>Version</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'VMAJ'</td> <td>VegasVersionMajor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'VMIN'</td> <td>VegasVersionMinor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'YEAR'</td> <td>Year</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tdat'>RIFF Tdat Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='Exif'>RIFF Exif Tags</a></h2> <p>These tags are part of the EXIF 2.3 specification for WAV audio files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'ecor'</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'emdl'</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'emnt'</td> <td>MakerNotes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'erel'</td> <td>RelatedImageFile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'etim'</td> <td>TimeCreated</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'eucm'</td> <td>UserComment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ever'</td> <td>ExifVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Hdrl'>RIFF Hdrl Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'IDIT'</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ISMP'</td> <td>TimeCode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'LIST_odml'</td> <td>OpenDML</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#OpenDML'>RIFF OpenDML Tags</a></td></tr> <tr class=b> <td>'LIST_strl'</td> <td>Stream</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#Stream'>RIFF Stream Tags</a></td></tr> <tr> <td>'avih'</td> <td>AVIHeader</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#AVIHeader'>RIFF AVIHeader Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='OpenDML'>RIFF OpenDML Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'dmlh'</td> <td>ExtendedAVIHeader</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#ExtAVIHdr'>RIFF ExtAVIHdr Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ExtAVIHdr'>RIFF ExtAVIHdr Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>TotalFrameCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Stream'>RIFF Stream Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'strd'</td> <td>StreamData</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#StreamData'>RIFF StreamData Tags</a></td></tr> <tr class=b> <td>'strf'</td> <td>AudioFormat <br>VideoFormat</td> <td class=c>-<br>-</td> <td>--&gt; <a href='RIFF.html#AudioFormat'>RIFF AudioFormat Tags</a> <br>--&gt; <a href='BMP.html'>BMP Tags</a></td></tr> <tr> <td>'strh'</td> <td>StreamHeader</td> <td class=c>-</td> <td>--&gt; <a href='RIFF.html#StreamHeader'>RIFF StreamHeader Tags</a></td></tr> <tr class=b> <td>'strn'</td> <td>StreamName</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='StreamData'>RIFF StreamData Tags</a></h2> <p>This chunk is used to store proprietary information in AVI videos from some cameras. The first 4 characters of the data are used as the Tag ID below.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'AVIF'</td> <td>AVIF</td> <td class=c>-</td> <td>--&gt; <a href='EXIF.html'>EXIF Tags</a></td></tr> <tr class=b> <td>'CASI'</td> <td>CasioData</td> <td class=c>-</td> <td>--&gt; <a href='Casio.html#AVI'>Casio AVI Tags</a></td></tr> <tr> <td>'Zora'</td> <td>VendorName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'unknown'</td> <td>UnknownData</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AudioFormat'>RIFF AudioFormat Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Encoding</td> <td class=c>N</td> <td>--&gt; <a href='RIFF.html#AudioEncoding'>RIFF AudioEncoding Values</a></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>NumChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>SampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>AvgBytesPerSec</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>BitsPerSample</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AudioEncoding'>RIFF AudioEncoding Values</a></h2> <p>These &quot;TwoCC&quot; audio encoding codes are used in RIFF and ASF files.</p> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>AudioEncoding</th></tr> <tr><td class=r>0x1</td><td>= Microsoft PCM</td> </tr><tr><td class=r>0x2</td><td>= Microsoft ADPCM</td> </tr><tr><td class=r>0x3</td><td>= Microsoft IEEE float</td> </tr><tr><td class=r>0x4</td><td>= Compaq VSELP</td> </tr><tr><td class=r>0x5</td><td>= IBM CVSD</td> </tr><tr><td class=r>0x6</td><td>= Microsoft a-Law</td> </tr><tr><td class=r>0x7</td><td>= Microsoft u-Law</td> </tr><tr><td class=r>0x8</td><td>= Microsoft DTS</td> </tr><tr><td class=r>0x9</td><td>= DRM</td> </tr><tr><td class=r>0xa</td><td>= WMA 9 Speech</td> </tr><tr><td class=r>0xb</td><td>= Microsoft Windows Media RT Voice</td> </tr><tr><td class=r>0x10</td><td>= OKI-ADPCM</td> </tr><tr><td class=r>0x11</td><td>= Intel IMA/DVI-ADPCM</td> </tr><tr><td class=r>0x12</td><td>= Videologic Mediaspace ADPCM</td> </tr><tr><td class=r>0x13</td><td>= Sierra ADPCM</td> </tr><tr><td class=r>0x14</td><td>= Antex G.723 ADPCM</td> </tr><tr><td class=r>0x15</td><td>= DSP Solutions DIGISTD</td> </tr><tr><td class=r>0x16</td><td>= DSP Solutions DIGIFIX</td> </tr><tr><td class=r>0x17</td><td>= Dialoic OKI ADPCM</td> </tr><tr><td class=r>0x18</td><td>= Media Vision ADPCM</td> </tr><tr><td class=r>0x19</td><td>= HP CU</td> </tr><tr><td class=r>0x1a</td><td>= HP Dynamic Voice</td> </tr><tr><td class=r>0x20</td><td>= Yamaha ADPCM</td> </tr><tr><td class=r>0x21</td><td>= SONARC Speech Compression</td> </tr><tr><td class=r>0x22</td><td>= DSP Group True Speech</td> </tr><tr><td class=r>0x23</td><td>= Echo Speech Corp.</td> </tr><tr><td class=r>0x24</td><td>= Virtual Music Audiofile AF36</td> </tr><tr><td class=r>0x25</td><td>= Audio Processing Tech.</td> </tr><tr><td class=r>0x26</td><td>= Virtual Music Audiofile AF10</td> </tr><tr><td class=r>0x27</td><td>= Aculab Prosody 1612</td> </tr><tr><td class=r>0x28</td><td>= Merging Tech. LRC</td> </tr><tr><td class=r>0x30</td><td>= Dolby AC2</td> </tr><tr><td class=r>0x31</td><td>= Microsoft GSM610</td> </tr><tr><td class=r>0x32</td><td>= MSN Audio</td> </tr><tr><td class=r>0x33</td><td>= Antex ADPCME</td> </tr><tr><td class=r>0x34</td><td>= Control Resources VQLPC</td> </tr><tr><td class=r>0x35</td><td>= DSP Solutions DIGIREAL</td> </tr><tr><td class=r>0x36</td><td>= DSP Solutions DIGIADPCM</td> </tr><tr><td class=r>0x37</td><td>= Control Resources CR10</td> </tr><tr><td class=r>0x38</td><td>= Natural MicroSystems VBX ADPCM</td> </tr><tr><td class=r>0x39</td><td>= Crystal Semiconductor IMA ADPCM</td> </tr><tr><td class=r>0x3a</td><td>= Echo Speech ECHOSC3</td> </tr><tr><td class=r>0x3b</td><td>= Rockwell ADPCM</td> </tr><tr><td class=r>0x3c</td><td>= Rockwell DIGITALK</td> </tr><tr><td class=r>0x3d</td><td>= Xebec Multimedia</td> </tr><tr><td class=r>0x40</td><td>= Antex G.721 ADPCM</td> </tr><tr><td class=r>0x41</td><td>= Antex G.728 CELP</td> </tr><tr><td class=r>0x42</td><td>= Microsoft MSG723</td> </tr><tr><td class=r>0x43</td><td>= IBM AVC ADPCM</td> </tr><tr><td class=r>0x45</td><td>= ITU-T G.726</td> </tr><tr><td class=r>0x50</td><td>= Microsoft MPEG</td> </tr><tr><td class=r>0x51</td><td>= RT23 or PAC</td> </tr><tr><td class=r>0x52</td><td>= InSoft RT24</td> </tr><tr><td class=r>0x53</td><td>= InSoft PAC</td> </tr><tr><td class=r>0x55</td><td>= MP3</td> </tr><tr><td class=r>0x59</td><td>= Cirrus</td> </tr><tr><td class=r>0x60</td><td>= Cirrus Logic</td> </tr><tr><td class=r>0x61</td><td>= ESS Tech. PCM</td> </tr><tr><td class=r>0x62</td><td>= Voxware Inc.</td> </tr><tr><td class=r>0x63</td><td>= Canopus ATRAC</td> </tr><tr><td class=r>0x64</td><td>= APICOM G.726 ADPCM</td> </tr><tr><td class=r>0x65</td><td>= APICOM G.722 ADPCM</td> </tr><tr><td class=r>0x66</td><td>= Microsoft DSAT</td> </tr><tr><td class=r>0x67</td><td>= Micorsoft DSAT DISPLAY</td> </tr><tr><td class=r>0x69</td><td>= Voxware Byte Aligned</td> </tr><tr><td class=r>0x70</td><td>= Voxware AC8</td> </tr><tr><td class=r>0x71</td><td>= Voxware AC10</td> </tr><tr><td class=r>0x72</td><td>= Voxware AC16</td> </tr><tr><td class=r>0x73</td><td>= Voxware AC20</td> </tr><tr><td class=r>0x74</td><td>= Voxware MetaVoice</td> </tr><tr><td class=r>0x75</td><td>= Voxware MetaSound</td> </tr><tr><td class=r>0x76</td><td>= Voxware RT29HW</td> </tr><tr><td class=r>0x77</td><td>= Voxware VR12</td> </tr><tr><td class=r>0x78</td><td>= Voxware VR18</td> </tr><tr><td class=r>0x79</td><td>= Voxware TQ40</td> </tr><tr><td class=r>0x7a</td><td>= Voxware SC3</td> </tr><tr><td class=r>0x7b</td><td>= Voxware SC3</td> </tr><tr><td class=r>0x80</td><td>= Soundsoft</td> </tr><tr><td class=r>0x81</td><td>= Voxware TQ60</td> </tr><tr><td class=r>0x82</td><td>= Microsoft MSRT24</td> </tr><tr><td class=r>0x83</td><td>= AT&amp;T G.729A</td> </tr><tr><td class=r>0x84</td><td>= Motion Pixels MVI MV12</td> </tr><tr><td class=r>0x85</td><td>= DataFusion G.726</td> </tr><tr><td class=r>0x86</td><td>= DataFusion GSM610</td> </tr><tr><td class=r>0x88</td><td>= Iterated Systems Audio</td> </tr><tr><td class=r>0x89</td><td>= Onlive</td> </tr><tr><td class=r>0x8a</td><td>= Multitude, Inc. FT SX20</td> </tr><tr><td class=r>0x8b</td><td>= Infocom ITS A/S G.721 ADPCM</td> </tr><tr><td class=r>0x8c</td><td>= Convedia G729</td> </tr><tr><td class=r>0x8d</td><td>= Not specified congruency, Inc.</td> </tr><tr><td class=r>0x91</td><td>= Siemens SBC24</td> </tr><tr><td class=r>0x92</td><td>= Sonic Foundry Dolby AC3 APDIF</td> </tr><tr><td class=r>0x93</td><td>= MediaSonic G.723</td> </tr><tr><td class=r>0x94</td><td>= Aculab Prosody 8kbps</td> </tr><tr><td class=r>0x97</td><td>= ZyXEL ADPCM</td> </tr><tr><td class=r>0x98</td><td>= Philips LPCBB</td> </tr><tr><td class=r>0x99</td><td>= Studer Professional Audio Packed</td> </tr><tr><td class=r>0xa0</td><td>= Malden PhonyTalk</td> </tr><tr><td class=r>0xa1</td><td>= Racal Recorder GSM</td> </tr><tr><td class=r>0xa2</td><td>= Racal Recorder G720.a</td> </tr><tr><td class=r>0xa3</td><td>= Racal G723.1</td> </tr><tr><td class=r>0xa4</td><td>= Racal Tetra ACELP</td> </tr><tr><td class=r>0xb0</td><td>= NEC AAC NEC Corporation</td> </tr><tr><td class=r>0xff</td><td>= AAC</td> </tr><tr><td class=r>0x100</td><td>= Rhetorex ADPCM</td> </tr><tr><td class=r>0x101</td><td>= IBM u-Law</td> </tr><tr><td class=r>0x102</td><td>= IBM a-Law</td> </tr><tr><td class=r>0x103</td><td>= IBM ADPCM</td> </tr><tr><td class=r>0x111</td><td>= Vivo G.723</td> </tr><tr><td class=r>0x112</td><td>= Vivo Siren</td> </tr><tr><td class=r>0x120</td><td>= Philips Speech Processing CELP</td> </tr><tr><td class=r>0x121</td><td>= Philips Speech Processing GRUNDIG</td> </tr><tr><td class=r>0x123</td><td>= Digital G.723</td> </tr><tr><td class=r>0x125</td><td>= Sanyo LD ADPCM</td> </tr><tr><td class=r>0x130</td><td>= Sipro Lab ACEPLNET</td> </tr><tr><td class=r>0x131</td><td>= Sipro Lab ACELP4800</td> </tr><tr><td class=r>0x132</td><td>= Sipro Lab ACELP8V3</td> </tr><tr><td class=r>0x133</td><td>= Sipro Lab G.729</td> </tr><tr><td class=r>0x134</td><td>= Sipro Lab G.729A</td> </tr><tr><td class=r>0x135</td><td>= Sipro Lab Kelvin</td> </tr><tr><td class=r>0x136</td><td>= VoiceAge AMR</td> </tr><tr><td class=r>0x140</td><td>= Dictaphone G.726 ADPCM</td> </tr><tr><td class=r>0x150</td><td>= Qualcomm PureVoice</td> </tr><tr><td class=r>0x151</td><td>= Qualcomm HalfRate</td> </tr><tr><td class=r>0x155</td><td>= Ring Zero Systems TUBGSM</td> </tr><tr><td class=r>0x160</td><td>= Microsoft Audio1</td> </tr><tr><td class=r>0x161</td><td>= Windows Media Audio V2 V7 V8 V9 / DivX audio (WMA) / Alex AC3 Audio</td> </tr><tr><td class=r>0x162</td><td>= Windows Media Audio Professional V9</td> </tr><tr><td class=r>0x163</td><td>= Windows Media Audio Lossless V9</td> </tr><tr><td class=r>0x164</td><td>= WMA Pro over S/PDIF</td> </tr><tr><td class=r>0x170</td><td>= UNISYS NAP ADPCM</td> </tr><tr><td class=r>0x171</td><td>= UNISYS NAP ULAW</td> </tr><tr><td class=r>0x172</td><td>= UNISYS NAP ALAW</td> </tr><tr><td class=r>0x173</td><td>= UNISYS NAP 16K</td> </tr><tr><td class=r>0x174</td><td>= MM SYCOM ACM SYC008 SyCom Technologies</td> </tr><tr><td class=r>0x175</td><td>= MM SYCOM ACM SYC701 G726L SyCom Technologies</td> </tr><tr><td class=r>0x176</td><td>= MM SYCOM ACM SYC701 CELP54 SyCom Technologies</td> </tr><tr><td class=r>0x177</td><td>= MM SYCOM ACM SYC701 CELP68 SyCom Technologies</td> </tr><tr><td class=r>0x178</td><td>= Knowledge Adventure ADPCM</td> </tr><tr><td class=r>0x180</td><td>= Fraunhofer IIS MPEG2AAC</td> </tr><tr><td class=r>0x190</td><td>= Digital Theater Systems DTS DS</td> </tr><tr><td class=r>0x200</td><td>= Creative Labs ADPCM</td> </tr><tr><td class=r>0x202</td><td>= Creative Labs FASTSPEECH8</td> </tr><tr><td class=r>0x203</td><td>= Creative Labs FASTSPEECH10</td> </tr><tr><td class=r>0x210</td><td>= UHER ADPCM</td> </tr><tr><td class=r>0x215</td><td>= Ulead DV ACM</td> </tr><tr><td class=r>0x216</td><td>= Ulead DV ACM</td> </tr><tr><td class=r>0x220</td><td>= Quarterdeck Corp.</td> </tr><tr><td class=r>0x230</td><td>= I-Link VC</td> </tr><tr><td class=r>0x240</td><td>= Aureal Semiconductor Raw Sport</td> </tr><tr><td class=r>0x241</td><td>= ESST AC3</td> </tr><tr><td class=r>0x250</td><td>= Interactive Products HSX</td> </tr><tr><td class=r>0x251</td><td>= Interactive Products RPELP</td> </tr><tr><td class=r>0x260</td><td>= Consistent CS2</td> </tr><tr><td class=r>0x270</td><td>= Sony SCX</td> </tr><tr><td class=r>0x271</td><td>= Sony SCY</td> </tr><tr><td class=r>0x272</td><td>= Sony ATRAC3</td> </tr><tr><td class=r>0x273</td><td>= Sony SPC</td> </tr><tr><td class=r>0x280</td><td>= TELUM Telum Inc.</td> </tr><tr><td class=r>0x281</td><td>= TELUMIA Telum Inc.</td> </tr><tr><td class=r>0x285</td><td>= Norcom Voice Systems ADPCM</td> </tr><tr><td class=r>0x300</td><td>= Fujitsu FM TOWNS SND</td> </tr><tr><td class=r>0x301</td><td>= Fujitsu (not specified)</td> </tr><tr><td class=r>0x302</td><td>= Fujitsu (not specified)</td> </tr><tr><td class=r>0x303</td><td>= Fujitsu (not specified)</td> </tr><tr><td class=r>0x304</td><td>= Fujitsu (not specified)</td> </tr><tr><td class=r>0x305</td><td>= Fujitsu (not specified)</td> </tr><tr><td class=r>0x306</td><td>= Fujitsu (not specified)</td> </tr><tr><td class=r>0x307</td><td>= Fujitsu (not specified)</td> </tr><tr><td class=r>0x308</td><td>= Fujitsu (not specified)</td> </tr><tr><td class=r>0x350</td><td>= Micronas Semiconductors, Inc. Development</td> </tr><tr><td class=r>0x351</td><td>= Micronas Semiconductors, Inc. CELP833</td> </tr><tr><td class=r>0x400</td><td>= Brooktree Digital</td> </tr><tr><td class=r>0x401</td><td>= Intel Music Coder (IMC)</td> </tr><tr><td class=r>0x402</td><td>= Ligos Indeo Audio</td> </tr><tr><td class=r>0x450</td><td>= QDesign Music</td> </tr><tr><td class=r>0x500</td><td>= On2 VP7 On2 Technologies</td> </tr><tr><td class=r>0x501</td><td>= On2 VP6 On2 Technologies</td> </tr><tr><td class=r>0x680</td><td>= AT&amp;T VME VMPCM</td> </tr><tr><td class=r>0x681</td><td>= AT&amp;T TCP</td> </tr><tr><td class=r>0x700</td><td>= YMPEG Alpha (dummy for MPEG-2 compressor)</td> </tr><tr><td class=r>0x8ae</td><td>= ClearJump LiteWave (lossless)</td> </tr><tr><td class=r>0x1000</td><td>= Olivetti GSM</td> </tr><tr><td class=r>0x1001</td><td>= Olivetti ADPCM</td> </tr><tr><td class=r>0x1002</td><td>= Olivetti CELP</td> </tr><tr><td class=r>0x1003</td><td>= Olivetti SBC</td> </tr><tr><td class=r>0x1004</td><td>= Olivetti OPR</td> </tr><tr><td class=r>0x1100</td><td>= Lernout &amp; Hauspie</td> </tr><tr><td class=r>0x1101</td><td>= Lernout &amp; Hauspie CELP codec</td> </tr><tr><td class=r>0x1102</td><td>= Lernout &amp; Hauspie SBC codec</td> </tr><tr><td class=r>0x1103</td><td>= Lernout &amp; Hauspie SBC codec</td> </tr><tr><td class=r>0x1104</td><td>= Lernout &amp; Hauspie SBC codec</td> </tr><tr><td class=r>0x1400</td><td>= Norris Comm. Inc.</td> </tr><tr><td class=r>0x1401</td><td>= ISIAudio</td> </tr><tr><td class=r>0x1500</td><td>= AT&amp;T Soundspace Music Compression</td> </tr><tr><td class=r>0x181c</td><td>= VoxWare RT24 speech codec</td> </tr><tr><td class=r>0x181e</td><td>= Lucent elemedia AX24000P Music codec</td> </tr><tr><td class=r>0x1971</td><td>= Sonic Foundry LOSSLESS</td> </tr><tr><td class=r>0x1979</td><td>= Innings Telecom Inc. ADPCM</td> </tr><tr><td class=r>0x1c07</td><td>= Lucent SX8300P speech codec</td> </tr><tr><td class=r>0x1c0c</td><td>= Lucent SX5363S G.723 compliant codec</td> </tr><tr><td class=r>0x1f03</td><td>= CUseeMe DigiTalk (ex-Rocwell)</td> </tr><tr><td class=r>0x1fc4</td><td>= NCT Soft ALF2CD ACM</td> </tr><tr><td class=r>0x2000</td><td>= FAST Multimedia DVM</td> </tr><tr><td class=r>0x2001</td><td>= Dolby DTS (Digital Theater System)</td> </tr><tr><td class=r>0x2002</td><td>= RealAudio 1 / 2 14.4</td> </tr><tr><td class=r>0x2003</td><td>= RealAudio 1 / 2 28.8</td> </tr><tr><td class=r>0x2004</td><td>= RealAudio G2 / 8 Cook (low bitrate)</td> </tr><tr><td class=r>0x2005</td><td>= RealAudio 3 / 4 / 5 Music (DNET)</td> </tr><tr><td class=r>0x2006</td><td>= RealAudio 10 AAC (RAAC)</td> </tr><tr><td class=r>0x2007</td><td>= RealAudio 10 AAC+ (RACP)</td> </tr><tr><td class=r>0x2500</td><td>= Reserved range to 0x2600 Microsoft</td> </tr><tr><td class=r>0x3313</td><td>= makeAVIS (ffvfw fake AVI sound from AviSynth scripts)</td> </tr><tr><td class=r>0x4143</td><td>= Divio MPEG-4 AAC audio</td> </tr><tr><td class=r>0x4201</td><td>= Nokia adaptive multirate</td> </tr><tr><td class=r>0x4243</td><td>= Divio G726 Divio, Inc.</td> </tr><tr><td class=r>0x434c</td><td>= LEAD Speech</td> </tr><tr><td class=r>0x564c</td><td>= LEAD Vorbis</td> </tr><tr><td class=r>0x5756</td><td>= WavPack Audio</td> </tr><tr><td class=r>0x674f</td><td>= Ogg Vorbis (mode 1)</td> </tr><tr><td class=r>0x6750</td><td>= Ogg Vorbis (mode 2)</td> </tr><tr><td class=r>0x6751</td><td>= Ogg Vorbis (mode 3)</td> </tr><tr><td class=r>0x676f</td><td>= Ogg Vorbis (mode 1+)</td> </tr><tr><td class=r>0x6770</td><td>= Ogg Vorbis (mode 2+)</td> </tr><tr><td class=r>0x6771</td><td>= Ogg Vorbis (mode 3+)</td> </tr><tr><td class=r>0x7000</td><td>= 3COM NBX 3Com Corporation</td> </tr><tr><td class=r>0x706d</td><td>= FAAD AAC</td> </tr><tr><td class=r>0x7a21</td><td>= GSM-AMR (CBR, no SID)</td> </tr><tr><td class=r>0x7a22</td><td>= GSM-AMR (VBR, including SID)</td> </tr><tr><td class=r>0xa100</td><td>= Comverse Infosys Ltd. G723 1</td> </tr><tr><td class=r>0xa101</td><td>= Comverse Infosys Ltd. AVQSBC</td> </tr><tr><td class=r>0xa102</td><td>= Comverse Infosys Ltd. OLDSBC</td> </tr><tr><td class=r>0xa103</td><td>= Symbol Technologies G729A</td> </tr><tr><td class=r>0xa104</td><td>= VoiceAge AMR WB VoiceAge Corporation</td> </tr><tr><td class=r>0xa105</td><td>= Ingenient Technologies Inc. G726</td> </tr><tr><td class=r>0xa106</td><td>= ISO/MPEG-4 advanced audio Coding</td> </tr><tr><td class=r>0xa107</td><td>= Encore Software Ltd G726</td> </tr><tr><td class=r>0xa109</td><td>= Speex ACM Codec xiph.org</td> </tr><tr><td class=r>0xdfac</td><td>= DebugMode SonicFoundry Vegas FrameServer ACM Codec</td> </tr><tr><td class=r>0xe708</td><td>= Unknown -</td> </tr><tr><td class=r>0xf1ac</td><td>= Free Lossless Audio Codec FLAC</td> </tr><tr><td class=r>0xfffe</td><td>= Extensible</td> </tr><tr><td class=r>0xffff</td><td>= Development</td> </tr></table></td></tr></table></blockquote> <h2><a name='StreamHeader'>RIFF StreamHeader Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>StreamType</td> <td class=c>N</td> <td><span class=s>&#39;auds&#39; = Audio <br>&#39;iavs&#39; = Interleaved Audio+Video <br>&#39;mids&#39; = MIDI <br>&#39;txts&#39; = Text <br>&#39;vids&#39; = Video</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>AudioCodec <br>VideoCodec <br>Codec</td> <td class=c>N<br>N<br>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>AudioSampleRate <br>VideoFrameRate <br>StreamSampleRate</td> <td class=c>N<br>N<br>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>AudioSampleCount <br>VideoFrameCount <br>StreamSampleCount</td> <td class=c>N<br>N<br>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>Quality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>SampleSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AVIHeader'>RIFF AVIHeader Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>MaxDataRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>FrameCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>StreamCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='VP8'>RIFF VP8 Tags</a></h2> <p>This chunk is found in simple-format (lossy) WebP files. See <a href="https://developers.google.com/speed/webp/docs/riff_container">https://developers.google.com/speed/webp/docs/riff_container</a> for the WebP container specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>VP8Version</td> <td class=c>N</td> <td><span class=s>[Mask 0x0e] <br>0x0 = 0 (bicubic reconstruction, normal loop) <br>0x1 = 1 (bilinear reconstruction, simple loop) <br>0x2 = 2 (bilinear reconstruction, no loop) <br>0x3 = 3 (no reconstruction, no loop)</span></td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>ImageWidth</td> <td class=c>N</td> <td><span class=s>[Mask 0x3fff]</span></td></tr> <tr> <td class=r title='6 = 0x6'>6.1</td> <td>HorizontalScale</td> <td class=c>N</td> <td><span class=s>[Mask 0xc000]</span></td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ImageHeight</td> <td class=c>N</td> <td><span class=s>[Mask 0x3fff]</span></td></tr> <tr> <td class=r title='8 = 0x8'>8.1</td> <td>VerticalScale</td> <td class=c>N</td> <td><span class=s>[Mask 0xc000]</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='VP8L'>RIFF VP8L Tags</a></h2> <p>This chunk is found in lossless WebP files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='VP8X'>RIFF VP8X Tags</a></h2> <p>This chunk is found in extended WebP files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='BroadcastExt'>RIFF BroadcastExt Tags</a></h2> <p>Information found in the Broadcast Audio Extension chunk (see <a href="http://tech.ebu.ch/docs/tech/tech3285.pdf">http://tech.ebu.ch/docs/tech/tech3285.pdf</a>).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='256 = 0x100'>256</td> <td>Originator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='288 = 0x120'>288</td> <td>OriginatorReference</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='320 = 0x140'>320</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='338 = 0x152'>338</td> <td>TimeReference</td> <td class=c>N</td> <td><span class=s><span class=n>(first sample count since midnight)</span></span></td></tr> <tr class=b> <td class=r title='346 = 0x15a'>346</td> <td>BWFVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='602 = 0x25a'>602</td> <td>CodingHistory</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jul 31, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/RSRC.html��������������������������������������������������������000644 �000765 �000024 �00000004171 11727370622 020477� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>RSRC Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>RSRC Tags</h2> <p>Tags extracted from Mac OS resource files and DFONT files. These tags may also be extracted from the resource fork of any file in OS X, either by adding &quot;/..namedfork/rsrc&quot; to the filename to process the resource fork alone, or by using the ExtractEmbedded (-ee) option to process the resource fork as a sub-document of the main file. When writing, ExifTool preserves the Mac OS resource fork by default, but it may deleted with <code>-rsrc:all=</code> on the command line.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'8BIM'</td> <td>PhotoshopInfo</td> <td class=c>-</td> <td>--&gt; <a href='Photoshop.html'>Photoshop Tags</a></td></tr> <tr class=b> <td>'POST_0x01f5'</td> <td>PostscriptFont</td> <td class=c>-</td> <td>--&gt; <a href='PostScript.html'>PostScript Tags</a></td></tr> <tr> <td>'STR _0xbff3'</td> <td>ApplicationMissingMsg</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'STR _0xbff4'</td> <td>CreatorApplication</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'STR#_0x0080'</td> <td>Keywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TEXT_0x0080'</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'sfnt'</td> <td>Font</td> <td class=c>-</td> <td>--&gt; <a href='Font.html#Name'>Font Name Tags</a></td></tr> <tr class=b> <td>'usro_0x0000'</td> <td>OpenWithApplication</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'vers_0x0001'</td> <td>ApplicationVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Mar 12, 2012</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/RTF.html���������������������������������������������������������000644 �000765 �000024 �00000006601 11773560206 020361� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>RTF Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>RTF Tags</h2> <p>This table lists standard tags of the RTF information group, but ExifTool will also extract any non-standard tags found in this group. As well, ExifTool will extract any custom properties that are found. See <a href="http://www.microsoft.com/en-ca/download/details.aspx?id=10725">http://www.microsoft.com/en-ca/download/details.aspx?id=10725</a> for the specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'author'</td> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'buptim'</td> <td>BackupTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'category'</td> <td>Category</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'comment'</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'company'</td> <td>Company</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'copyright'</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'creatim'</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'doccomm'</td> <td>Comments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'edmins'</td> <td>TotalEditTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'hlinkbase'</td> <td>HyperlinkBase</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'id'</td> <td>InternalIDNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'keywords'</td> <td>Keywords</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'manager'</td> <td>Manager</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'nofchars'</td> <td>Characters</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'nofcharsws'</td> <td>CharactersWithSpaces</td> <td class=c>N</td> <td><span class=s><span class=n>(according to the 2007 Microsoft RTF specification this is clearly the number of characters NOT including spaces, but Microsoft Word writes this as the number WITH spaces, so ExifTool names this tag according to the de facto standard)</span></span></td></tr> <tr class=b> <td>'nofpages'</td> <td>Pages</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'nofwords'</td> <td>Words</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'operator'</td> <td>LastModifiedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'printim'</td> <td>LastPrinted</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'revtim'</td> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'subject'</td> <td>Subject</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'title'</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'vern'</td> <td>InternalVersionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'version'</td> <td>RevisionNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jun 30, 2012</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Samsung.html�����������������������������������������������������000644 �000765 �000024 �00000042504 12535340443 021341� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Samsung Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Samsung Tags</h2> <p>Tags found in the binary &quot;STMN&quot; format maker notes written by a number of Samsung models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>MakerNoteVersion</td> <td class=c>undef[8]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>PreviewImageStart</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>PreviewImageLength</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>SamsungIFD</td> <td class=c>-</td> <td>--&gt; <a href='Samsung.html#IFD'>Samsung IFD Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='IFD'>Samsung IFD Tags</a></h2> <p>This is a standard-format IFD found in the maker notes of some Samsung models, except that the entry count is a 4-byte integer and the offsets are relative to the end of the IFD. Currently, no tags in this IFD are known, so the Unknown (-u) or Verbose (-v) option must be used to see this information.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='Type2'>Samsung Type2 Tags</a></h2> <p>Tags found in the EXIF-format maker notes of newer Samsung models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>MakerNoteVersion</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>DeviceType</td> <td class=c>int32u</td> <td><span class=s>0x1000 = Compact Digital Camera <br>0x2000 = High-end NX Camera <br>0x3000 = HXM Video Camera <br>0x12000 = Cell Phone <br>0x300000 = SMX Video Camera</span></td></tr> <tr> <td title='0x0003 = 3'>0x0003</td> <td>SamsungModelID</td> <td class=c>int32u</td> <td><span class=s>0x100101c = NX10 <br>0x1001226 = HMX-S15BP <br>0x1001233 = HMX-Q10 <br>0x1001234 = HMX-H304 <br>0x100130c = NX100 <br>0x1001327 = NX11 <br>0x170104e = ES70, ES71 / VLUU ES70, ES71 / SL600 <br>0x1701052 = ES73 / VLUU ES73 / SL605 <br>0x1701300 = ES28 / VLUU ES28 <br>0x1701303 = ES74,ES75,ES78 / VLUU ES75,ES78 <br>0x2001046 = PL150 / VLUU PL150 / TL210 / PL151 <br>0x2001311 = PL120,PL121 / VLUU PL120,PL121 <br>0x2001315 = PL170,PL171 / VLUUPL170,PL171 <br>0x200131e = PL210, PL211 / VLUU PL210, PL211 <br>0x2701317 = PL20,PL21 / VLUU PL20,PL21 <br>0x2a0001b = WP10 / VLUU WP10 / AQ100 <br>0x3000000 = Various Models (0x3000000) <br>0x3a00018 = Various Models (0x3a00018) <br>0x400101f = ST1000 / ST1100 / VLUU ST1000 / CL65 <br>0x4001022 = ST550 / VLUU ST550 / TL225 <br>0x4001025 = Various Models (0x4001025) <br>0x400103e = VLUU ST5500, ST5500, CL80 <br>0x4001041 = VLUU ST5000, ST5000, TL240 <br>0x4001043 = ST70 / VLUU ST70 / ST71 <br>0x400130a = Various Models (0x400130a) <br>0x400130e = ST90,ST91 / VLUU ST90,ST91 <br>0x4001313 = VLUU ST95, ST95 <br>0x4a00015 = VLUU ST60 <br>0x4a0135b = ST30, ST65 / VLUU ST65 / ST67 <br>0x5000000 = Various Models (0x5000000) <br>0x5001038 = Various Models (0x5001038) <br>0x500103a = WB650 / VLUU WB650 / WB660 <br>0x500103c = WB600 / VLUU WB600 / WB610 <br>0x500133e = WB150 / WB150F / WB152 / WB152F / WB151 <br>0x5a0000f = WB5000 / HZ25W <br>0x6001036 = EX1 <br>0x700131c = VLUU SH100, SH100 <br>0x27127002 = SMX-C20N</span></td></tr> <tr class=b> <td title='0x0021 = 33'>0x0021</td> <td>PictureWizard</td> <td class=c>int16u</td> <td>--&gt; <a href='Samsung.html#PictureWizard'>Samsung PictureWizard Tags</a></td></tr> <tr> <td title='0x0030 = 48'>0x0030</td> <td>LocalLocationName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0031 = 49'>0x0031</td> <td>LocationName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0035 = 53'>0x0035</td> <td>PreviewIFD</td> <td class=c>-</td> <td>--&gt; <a href='Nikon.html#PreviewIFD'>Nikon PreviewIFD Tags</a></td></tr> <tr class=b> <td title='0x0043 = 67'>0x0043</td> <td>CameraTemperature</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0045 = 69'>0x0045</td> <td>RawCompressionMode</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0100 = 256'>0x0100</td> <td>FaceDetect</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x0120 = 288'>0x0120</td> <td>FaceRecognition</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x0123 = 291'>0x0123</td> <td>FaceName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0xa001 = 40961'>0xa001</td> <td>FirmwareName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa003 = 40963'>0xa003</td> <td>LensType</td> <td class=c>int16u[n]</td> <td><span class=s>[Value 0] <br>0 = Built-in or Manual Lens <br>1 = Samsung NX 30mm F2 Pancake <br>2 = Samsung NX 18-55mm F3.5-5.6 OIS <br>3 = Samsung NX 50-200mm F4-5.6 ED OIS <br>4 = Samsung NX 20-50mm F3.5-5.6 ED <br>5 = Samsung NX 20mm F2.8 Pancake <br>6 = Samsung NX 18-200mm F3.5-6.3 ED OIS <br>7 = Samsung NX 60mm F2.8 Macro ED OIS SSA <br>8 = Samsung NX 16mm F2.4 Pancake <br>9 = Samsung NX 85mm F1.4 ED SSA <br>10 = Samsung NX 45mm F1.8 <br>11 = Samsung NX 45mm F1.8 2D/3D <br>12 = Samsung NX 12-24mm F4-5.6 ED <br>13 = Saumsun NX 16-50mm F2-2.8 S ED OIS <br>14 = Samsung NX 10mm F3.5 Fisheye <br>15 = Samsung NX 16-50mm F3.5-5.6 Power Zoom ED OIS <br>20 = Samsung NX 50-150mm F2.8 S ED OIS <br>21 = Samsung NX 300mm F2.8 ED OIS</span></td></tr> <tr> <td title='0xa004 = 40964'>0xa004</td> <td>LensFirmware</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa005 = 40965'>0xa005</td> <td>InternalLensSerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0xa010 = 40976'>0xa010</td> <td>SensorAreas</td> <td class=c>int32u[8]</td> <td><span class=s><span class=n>(full and valid sensor areas)</span></span></td></tr> <tr class=b> <td title='0xa011 = 40977'>0xa011</td> <td>ColorSpace</td> <td class=c>int16u</td> <td><span class=s>0 = sRGB <br>1 = Adobe RGB</span></td></tr> <tr> <td title='0xa012 = 40978'>0xa012</td> <td>SmartRange</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0xa013 = 40979'>0xa013</td> <td>ExposureCompensation</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0xa014 = 40980'>0xa014</td> <td>ISO</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa018 = 40984'>0xa018</td> <td>ExposureTime</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0xa019 = 40985'>0xa019</td> <td>FNumber</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa01a = 40986'>0xa01a</td> <td>FocalLengthIn35mmFormat</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0xa020 = 40992'>0xa020</td> <td>EncryptionKey</td> <td class=c title=' ! = Unsafe'>int32u[11]!</td> <td><span class=s><span class=n>(key used to decrypt the tags below)</span></span></td></tr> <tr class=b> <td title='0xa021 = 40993'>0xa021</td> <td>WB_RGGBLevelsUncorrected</td> <td class=c>int32u[4]</td> <td><span class=s><span class=n>(these tags not corrected for WB_RGGBLevelsBlack)</span></span></td></tr> <tr> <td title='0xa022 = 40994'>0xa022</td> <td>WB_RGGBLevelsAuto</td> <td class=c>int32u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa023 = 40995'>0xa023</td> <td>WB_RGGBLevelsIlluminator1</td> <td class=c>int32u[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0xa024 = 40996'>0xa024</td> <td>WB_RGGBLevelsIlluminator2</td> <td class=c>int32u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa028 = 41000'>0xa028</td> <td>WB_RGGBLevelsBlack</td> <td class=c>int32s[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0xa030 = 41008'>0xa030</td> <td>ColorMatrix</td> <td class=c>int32s[9]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa031 = 41009'>0xa031</td> <td>ColorMatrixSRGB</td> <td class=c>int32s[9]</td> <td>&nbsp;</td></tr> <tr> <td title='0xa032 = 41010'>0xa032</td> <td>ColorMatrixAdobeRGB</td> <td class=c>int32s[9]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa033 = 41011'>0xa033</td> <td>CbCrMatrixDefault</td> <td class=c>int32s[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0xa034 = 41012'>0xa034</td> <td>CbCrMatrix</td> <td class=c>int32s[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa035 = 41013'>0xa035</td> <td>CbCrGainDefault</td> <td class=c>int32u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0xa036 = 41014'>0xa036</td> <td>CbCrGain</td> <td class=c>int32u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa040 = 41024'>0xa040</td> <td>ToneCurveSRGBDefault</td> <td class=c>int32u[23]</td> <td><span class=s><span class=n>(first value gives the number of tone curve entries. This is followed by an array of X coordinates then an array of Y coordinates)</span></span></td></tr> <tr> <td title='0xa041 = 41025'>0xa041</td> <td>ToneCurveAdobeRGBDefault</td> <td class=c>int32u[23]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa042 = 41026'>0xa042</td> <td>ToneCurveSRGB</td> <td class=c>int32u[23]</td> <td>&nbsp;</td></tr> <tr> <td title='0xa043 = 41027'>0xa043</td> <td>ToneCurveAdobeRGB</td> <td class=c>int32u[23]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa048 = 41032'>0xa048</td> <td>RawData?</td> <td class=c>int32s[12]</td> <td>&nbsp;</td></tr> <tr> <td title='0xa050 = 41040'>0xa050</td> <td>Distortion?</td> <td class=c>int32s[8]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa051 = 41041'>0xa051</td> <td>ChromaticAberration?</td> <td class=c>int16u[22]</td> <td>&nbsp;</td></tr> <tr> <td title='0xa052 = 41042'>0xa052</td> <td>Vignetting?</td> <td class=c>int16u[15]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xa053 = 41043'>0xa053</td> <td>VignettingCorrection?</td> <td class=c>int16u[15]</td> <td>&nbsp;</td></tr> <tr> <td title='0xa054 = 41044'>0xa054</td> <td>VignettingSetting?</td> <td class=c>int16u[15]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PictureWizard'>Samsung PictureWizard Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>PictureWizardMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Standard <br>1 = Vivid <br>2 = Portrait <br>3 = Landscape <br>4 = Forest</td><td>&nbsp;&nbsp;</td> <td>5 = Retro <br>6 = Cool <br>7 = Calm <br>8 = Classic <br>9 = Custom1</td><td>&nbsp;&nbsp;</td> <td>10 = Custom2 <br>11 = Custom3 <br>255 = n/a</td></tr></table> </td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>PictureWizardColor</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>PictureWizardSaturation</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>PictureWizardSharpness</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>PictureWizardContrast</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Trailer'>Samsung Trailer Tags</a></h2> <p>Tags extracted from the trailer of JPEG images written when using certain features (such as &quot;Sound &amp; Shot&quot; or &quot;Shot &amp; More&quot;) from Samsung models such as the Galaxy S4 and Tab S.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>EmbeddedAudioFile</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EmbeddedAudioFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>EmbeddedImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>EmbeddedImageName</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='sec'>Samsung sec Tags</a></h2> <p>This information is found in the @sec atom of Samsung MP4 videos from models such as the WB30F.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='512 = 0x200'>512</td> <td>ThumbnailWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='516 = 0x204'>516</td> <td>ThumbnailHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='520 = 0x208'>520</td> <td>ThumbnailLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='524 = 0x20c'>524</td> <td>ThumbnailImage</td> <td class=c>N</td> <td><span class=s><span class=n>(the THM image, embedded metadata is extracted as the first sub-document)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='INFO'>Samsung INFO Tags</a></h2> <p>This information is found in MP4 videos from Samsung models such as the SMX-C20N.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'EFCT'</td> <td>Effect</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'QLTY'</td> <td>Quality</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MP4'>Samsung MP4 Tags</a></h2> <p>This information is found in Samsung MP4 videos from models such as the WP10.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='46 = 0x2e'>46</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='58 = 0x3a'>58</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='106 = 0x6a'>106</td> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='125 = 0x7d'>125</td> <td>Software</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='244 = 0xf4'>244</td> <td>Thumbnail</td> <td class=c>-</td> <td>--&gt; <a href='Samsung.html#Thumbnail'>Samsung Thumbnail Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Thumbnail'>Samsung Thumbnail Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>ThumbnailWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>ThumbnailHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>ThumbnailLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ThumbnailOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='smta'>Samsung smta Tags</a></h2> <p>This information is found in the smta atom of Samsung MP4 videos from models such as the Galaxy S4.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'svss'</td> <td>SamsungSvss</td> <td class=c>-</td> <td>--&gt; <a href='Samsung.html#svss'>Samsung svss Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='svss'>Samsung svss Tags</a></h2> <p>This information is found in the svss atom of Samsung MP4 videos from models such as the Galaxy S4.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Mar 17, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Sanyo.html�������������������������������������������������������000644 �000765 �000024 �00000022572 12527350232 021016� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Sanyo Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Sanyo Tags</h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x00ff = 255'>0x00ff</td> <td>MakerNoteOffset</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0100 = 256'>0x0100</td> <td>SanyoThumbnail</td> <td class=c>undef</td> <td>&nbsp;</td></tr> <tr> <td title='0x0200 = 512'>0x0200</td> <td>SpecialMode</td> <td class=c>int32u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0201 = 513'>0x0201</td> <td>SanyoQuality</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0x0 = Normal/Very Low <br>0x1 = Normal/Low <br>0x2 = Normal/Medium Low <br>0x3 = Normal/Medium <br>0x4 = Normal/Medium High <br>0x5 = Normal/High <br>0x6 = Normal/Very High <br>0x7 = Normal/Super High <br>0x100 = Fine/Very Low <br>0x101 = Fine/Low <br>0x102 = Fine/Medium Low <br>0x103 = Fine/Medium <br>0x104 = Fine/Medium High <br>0x105 = Fine/High <br>0x106 = Fine/Very High <br>0x107 = Fine/Super High <br>0x200 = Super Fine/Very Low <br>0x201 = Super Fine/Low <br>0x202 = Super Fine/Medium Low <br>0x203 = Super Fine/Medium <br>0x204 = Super Fine/Medium High <br>0x205 = Super Fine/High <br>0x206 = Super Fine/Very High <br>0x207 = Super Fine/Super High</td></tr></table> </td></tr> <tr> <td title='0x0202 = 514'>0x0202</td> <td>Macro</td> <td class=c>int16u</td> <td><span class=s>0 = Normal <br>1 = Macro <br>2 = View <br>3 = Manual</span></td></tr> <tr class=b> <td title='0x0204 = 516'>0x0204</td> <td>DigitalZoom</td> <td class=c>rational64u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0207 = 519'>0x0207</td> <td>SoftwareVersion</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0208 = 520'>0x0208</td> <td>PictInfo</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr> <td title='0x0209 = 521'>0x0209</td> <td>CameraID</td> <td class=c>Y</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x020e = 526'>0x020e</td> <td>SequentialShot</td> <td class=c>int16u</td> <td><span class=s>0 = None <br>1 = Standard <br>2 = Best <br>3 = Adjust Exposure</span></td></tr> <tr> <td title='0x020f = 527'>0x020f</td> <td>WideRange</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x0210 = 528'>0x0210</td> <td>ColorAdjustmentMode</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x0213 = 531'>0x0213</td> <td>QuickShot</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x0214 = 532'>0x0214</td> <td>SelfTimer</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x0216 = 534'>0x0216</td> <td>VoiceMemo</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x0217 = 535'>0x0217</td> <td>RecordShutterRelease</td> <td class=c>int16u</td> <td><span class=s>0 = Record while down <br>1 = Press start, press stop</span></td></tr> <tr> <td title='0x0218 = 536'>0x0218</td> <td>FlickerReduce</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x0219 = 537'>0x0219</td> <td>OpticalZoomOn</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x021b = 539'>0x021b</td> <td>DigitalZoomOn</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x021d = 541'>0x021d</td> <td>LightSourceSpecial</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td title='0x021e = 542'>0x021e</td> <td>Resaved</td> <td class=c>int16u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr class=b> <td title='0x021f = 543'>0x021f</td> <td>SceneSelect</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Sport <br>2 = TV <br>3 = Night</td><td>&nbsp;&nbsp;</td> <td>4 = User 1 <br>5 = User 2 <br>6 = Lamp</td></tr></table> </td></tr> <tr> <td title='0x0223 = 547'>0x0223</td> <td>ManualFocusDistance <br>FaceInfo</td> <td class=c>rational64u<br>-</td> <td><span class=s>Sanyo FaceInfo</span></td></tr> <tr class=b> <td title='0x0224 = 548'>0x0224</td> <td>SequenceShotInterval</td> <td class=c>int16u</td> <td><span class=s>0 = 5 frames/s <br>1 = 10 frames/s <br>2 = 15 frames/s <br>3 = 20 frames/s</span></td></tr> <tr> <td title='0x0225 = 549'>0x0225</td> <td>FlashMode</td> <td class=c>int16u</td> <td><span class=s>0 = Auto <br>1 = Force <br>2 = Disabled <br>3 = Red eye</span></td></tr> <tr class=b> <td title='0x0e00 = 3584'>0x0e00</td> <td>PrintIM</td> <td class=c>-</td> <td>--&gt; <a href='PrintIM.html'>PrintIM Tags</a></td></tr> <tr> <td title='0x0f00 = 3840'>0x0f00</td> <td>DataDump</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceInfo'>Sanyo FaceInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FacesDetected</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>FacePosition</td> <td class=c>int32u[4]</td> <td><span class=s><span class=n>(left, top, right and bottom coordinates of detected face in an unrotated 640-pixel-wide image, with increasing Y downwards)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='MOV'>Sanyo MOV Tags</a></h2> <p>This information is found in Sanyo MOV videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='38 = 0x26'>38</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='50 = 0x32'>50</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='68 = 0x44'>68</td> <td>WhiteBalance</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Daylight <br>2 = Shade</td><td>&nbsp;&nbsp;</td> <td>3 = Fluorescent <br>4 = Tungsten <br>5 = Manual</td></tr></table> </td></tr> <tr> <td class=r title='72 = 0x48'>72</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MP4'>Sanyo MP4 Tags</a></h2> <p>This information is found in Sanyo MP4 videos.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='50 = 0x32'>50</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='58 = 0x3a'>58</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='106 = 0x6a'>106</td> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='209 = 0xd1'>209</td> <td>Software</td> <td class=c>N</td> <td><span class=s><span class=n>(these tags are shifted up by 1 byte for some models like the HD1A)</span></span></td></tr> <tr> <td class=r title='210 = 0xd2'>210</td> <td>Software</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='241 = 0xf1'>241</td> <td>Thumbnail</td> <td class=c>-</td> <td>--&gt; <a href='Sanyo.html#Thumbnail'>Sanyo Thumbnail Tags</a></td></tr> <tr> <td class=r title='242 = 0xf2'>242</td> <td>Thumbnail</td> <td class=c>-</td> <td>--&gt; <a href='Sanyo.html#Thumbnail'>Sanyo Thumbnail Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Thumbnail'>Sanyo Thumbnail Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>ThumbnailWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>ThumbnailHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>ThumbnailLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>ThumbnailOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Nov 22, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Scalado.html�����������������������������������������������������000644 �000765 �000024 �00000002415 12214651724 021270� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Scalado Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Scalado Tags</h2> <p>Tags extracted from the JPEG APP4 &quot;SCALADO&quot; segment found in images from HTC, LG and Samsung phones. (Presumably written by Scalado mobile software, <a href="http://www.scalado.com/">http://www.scalado.com/</a>.)</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'HGHT'</td> <td>PreviewImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'QUAL'</td> <td>PreviewQuality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'SPMO'</td> <td>DataLength?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'WDTH'</td> <td>PreviewImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Sep 13, 2013</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Shortcuts.html���������������������������������������������������000644 �000765 �000024 �00000015705 12615707345 021734� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Shortcuts Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Shortcuts Tags</h2> <p> Shortcut tags are convenience tags that represent one or more other tag names. They are used like regular tags to read and write the information for a specified set of tags.</p> <p>The shortcut tags below have been pre-defined, but user-defined shortcuts may be added via the %Image::ExifTool::UserDefined::Shortcuts lookup in the ~/.ExifTool_config file. See the Image::ExifTool::Shortcuts documentation for more details. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Refers To</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AllDates</td> <td class=c>Y</td> <td class=n>DateTimeOriginal <br>CreateDate <br>ModifyDate</td> <td><span class=s><span class=n>(contrary to the shortcut name, this represents only the common EXIF date/time tags. To access all date/time tags, use Time:All instead)</span></span></td></tr> <tr class=b> <td>Canon</td> <td class=c>Y</td> <td class=n>FileName <br>Model <br>DateTimeOriginal <br>ShootingMode <br>ShutterSpeed <br>Aperture <br>MeteringMode <br>ExposureCompensation <br>ISO <br>Lens <br>FocalLength <br>ImageSize <br>Quality <br>Flash <br>FlashType <br>ConditionalFEC <br>RedEyeReduction <br>ShutterCurtainHack <br>WhiteBalance <br>FocusMode <br>Contrast <br>Sharpness <br>Saturation <br>ColorTone <br>ColorSpace <br>LongExposureNoiseReduction <br>FileSize <br>FileNumber <br>DriveMode <br>OwnerName <br>SerialNumber</td> <td>&nbsp;</td></tr> <tr> <td>ColorSpaceTags</td> <td class=c>Y</td> <td class=n>ExifIFD:ColorSpace <br>ExifIFD:Gamma <br>InteropIFD:InteropIndex <br>ICC_Profile</td> <td><span class=s><span class=n>(standard tags which carry color space information. Useful for preserving color space when deleting all other metadata)</span></span></td></tr> <tr class=b> <td>Common</td> <td class=c>Y</td> <td class=n>FileName <br>FileSize <br>Model <br>DateTimeOriginal <br>ImageSize <br>Quality <br>FocalLength <br>ShutterSpeed <br>Aperture <br>ISO <br>WhiteBalance <br>Flash</td> <td>&nbsp;</td></tr> <tr> <td>CommonIFD0</td> <td class=c>Y</td> <td class=n>IFD0:ImageDescription <br>IFD0:Make <br>IFD0:Model <br>IFD0:Software <br>IFD0:ModifyDate <br>IFD0:Artist <br>IFD0:Copyright <br>IFD0:Rating <br>IFD0:RatingPercent <br>IFD0:DNGLensInfo <br>IFD0:PanasonicTitle <br>IFD0:PanasonicTitle2 <br>IFD0:XPTitle <br>IFD0:XPComment <br>IFD0:XPAuthor <br>IFD0:XPKeywords <br>IFD0:XPSubject</td> <td><span class=s><span class=n>(common metadata tags found in IFD0 of TIFF-format images. Used to simpify deletion of all metadata from these images. See <a href="../faq.html#Q7">FAQ number 7</a> for details)</span></span></td></tr> <tr class=b> <td>LargeTags</td> <td class=c>Y</td> <td class=n>CanonVRD <br>DLOData <br>EXIF <br>ICC_Profile <br>IDCPreviewImage <br>ImageData <br>IPTC <br>JpgFromRaw <br>OriginalRawImage <br>OtherImage <br>PreviewImage <br>ThumbnailImage <br>TIFFPreview <br>XML <br>XMP <br>ZoomedPreviewImage</td> <td><span class=s><span class=n>(large binary data tags which may be excluded to reduce memory usage if memory limitations are a problem)</span></span></td></tr> <tr> <td>MakerNotes</td> <td class=c>Y</td> <td class=n>MakerNotes <br>MakerNoteApple <br>MakerNoteCanon <br>MakerNoteCasio <br>MakerNoteCasio2 <br>MakerNoteFLIR <br>MakerNoteFujiFilm <br>MakerNoteGE <br>MakerNoteGE2 <br>MakerNoteHasselblad <br>MakerNoteHP <br>MakerNoteHP2 <br>MakerNoteHP4 <br>MakerNoteHP6 <br>MakerNoteISL <br>MakerNoteJVC <br>MakerNoteJVCText <br>MakerNoteKodak1a <br>MakerNoteKodak1b <br>MakerNoteKodak2 <br>MakerNoteKodak3 <br>MakerNoteKodak4 <br>MakerNoteKodak5 <br>MakerNoteKodak6a <br>MakerNoteKodak6b <br>MakerNoteKodak7 <br>MakerNoteKodak8a <br>MakerNoteKodak8b <br>MakerNoteKodak8c <br>MakerNoteKodak9 <br>MakerNoteKodak10 <br>MakerNoteKodak11 <br>MakerNoteKodakUnknown <br>MakerNoteKyocera <br>MakerNoteMinolta <br>MakerNoteMinolta2 <br>MakerNoteMinolta3 <br>MakerNoteMotorola <br>MakerNoteNikon <br>MakerNoteNikon2 <br>MakerNoteNikon3 <br>MakerNoteNintendo <br>MakerNoteOlympus <br>MakerNoteOlympus2 <br>MakerNoteLeica <br>MakerNoteLeica2 <br>MakerNoteLeica3 <br>MakerNoteLeica4 <br>MakerNoteLeica5 <br>MakerNoteLeica6 <br>MakerNoteLeica7 <br>MakerNoteLeica8 <br>MakerNoteLeica9 <br>MakerNotePanasonic <br>MakerNotePanasonic2 <br>MakerNotePentax <br>MakerNotePentax2 <br>MakerNotePentax3 <br>MakerNotePentax4 <br>MakerNotePentax5 <br>MakerNotePentax6 <br>MakerNotePhaseOne <br>MakerNoteReconyx <br>MakerNoteRicoh <br>MakerNoteRicoh2 <br>MakerNoteRicohText <br>MakerNoteSamsung1a <br>MakerNoteSamsung1b <br>MakerNoteSamsung2 <br>MakerNoteSanyo <br>MakerNoteSanyoC4 <br>MakerNoteSanyoPatch <br>MakerNoteSigma <br>MakerNoteSony <br>MakerNoteSony2 <br>MakerNoteSony3 <br>MakerNoteSony4 <br>MakerNoteSony5 <br>MakerNoteSonyEricsson <br>MakerNoteSonySRF <br>MakerNoteUnknownText <br>MakerNoteUnknownBinary <br>MakerNoteUnknown</td> <td><span class=s><span class=n>(useful when copying tags between files to either copy the maker notes as a block or prevent it from being copied)</span></span></td></tr> <tr class=b> <td>Nikon</td> <td class=c>Y</td> <td class=n>Model <br>SubSecDateTimeOriginal <br>ShutterCount <br>LensSpec <br>FocalLength <br>ImageSize <br>ShutterSpeed <br>Aperture <br>ISO <br>NoiseReduction <br>ExposureProgram <br>ExposureCompensation <br>WhiteBalance <br>WhiteBalanceFineTune <br>ShootingMode <br>Quality <br>MeteringMode <br>FocusMode <br>ImageOptimization <br>ToneComp <br>ColorHue <br>ColorSpace <br>HueAdjustment <br>Saturation <br>Sharpness <br>Flash <br>FlashMode <br>FlashExposureComp</td> <td>&nbsp;</td></tr> <tr> <td>Unsafe</td> <td class=c>Y</td> <td class=n>IFD0:YCbCrPositioning <br>IFD0:YCbCrCoefficients <br>IFD0:TransferFunction <br>ExifIFD:ComponentsConfiguration <br>ExifIFD:CompressedBitsPerPixel <br>InteropIFD:InteropIndex <br>InteropIFD:InteropVersion <br>InteropIFD:RelatedImageWidth <br>InteropIFD:RelatedImageHeight</td> <td><span class=s><span class=n>(&quot;unsafe&quot; tags in JPEG images which are normally not copied. Defined here as a shortcut to use when rebuilding JPEG EXIF from scratch. See <a href="../faq.html#Q20">FAQ number 20</a> for more information)</span></span></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Nov 2, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Sigma.html�������������������������������������������������������000644 �000765 �000024 �00000046157 12542527555 021005� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Sigma Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Sigma Tags</h2> <p>These tags are written by Sigma/Foveon cameras. In the early days Sigma was a class leader by releasing their maker note specification to the public, but since then they have deviated from this standard and newer camera models are less than consistent about their metadata formats.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>SerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>DriveMode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>ResolutionMode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>AFMode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0006 = 6'>0x0006</td> <td>FocusSetting</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0007 = 7'>0x0007</td> <td>WhiteBalance</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>ExposureMode</td> <td class=c>string</td> <td><span class=s>&#39;A&#39; = Aperture-priority AE <br>&#39;M&#39; = Manual <br>&#39;P&#39; = Program AE <br>&#39;S&#39; = Shutter speed priority AE</span></td></tr> <tr class=b> <td title='0x0009 = 9'>0x0009</td> <td>MeteringMode</td> <td class=c>string</td> <td><span class=s>8 = Multi-segment <br>&#39;A&#39; = Average <br>&#39;C&#39; = Center-weighted average</span></td></tr> <tr> <td title='0x000a = 10'>0x000a</td> <td>LensFocalRange</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000b = 11'>0x000b</td> <td>ColorSpace</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x000c = 12'>0x000c</td> <td>ExposureCompensation <br>ExposureAdjust?</td> <td class=c>string<br>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000d = 13'>0x000d</td> <td>Contrast <br>Contrast</td> <td class=c>string<br>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x000e = 14'>0x000e</td> <td>Shadow <br>Shadow</td> <td class=c>string<br>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000f = 15'>0x000f</td> <td>Highlight <br>Highlight</td> <td class=c>string<br>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>Saturation <br>Saturation</td> <td class=c>string<br>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0011 = 17'>0x0011</td> <td>Sharpness <br>Sharpness</td> <td class=c>string<br>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0012 = 18'>0x0012</td> <td>X3FillLight <br>X3FillLight</td> <td class=c>string<br>rational64s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0014 = 20'>0x0014</td> <td>ColorAdjustment <br>ColorAdjustment</td> <td class=c>string<br>rational64s[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0015 = 21'>0x0015</td> <td>AdjustmentMode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0016 = 22'>0x0016</td> <td>Quality</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0017 = 23'>0x0017</td> <td>Firmware</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0018 = 24'>0x0018</td> <td>Software</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td title='0x0019 = 25'>0x0019</td> <td>AutoBracket</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001a = 26'>0x001a</td> <td>PreviewImageStart <br>ChrominanceNoiseReduction</td> <td class=c title=' * = Protected'>int32u*<br>string</td> <td><span class=s><span class=n>(Sigma Photo Pro writes ChrominanceNoiseReduction here, but various models use this for PreviewImageStart)</span></span></td></tr> <tr> <td title='0x001b = 27'>0x001b</td> <td>PreviewImageLength <br>LuminanceNoiseReduction</td> <td class=c title=' * = Protected'>int32u*<br>string</td> <td><span class=s><span class=n>(Sigma Photo Pro writes LuminanceNoiseReduction here, but various models use this for PreviewImageLength)</span></span></td></tr> <tr class=b> <td title='0x001c = 28'>0x001c</td> <td>PreviewImageSize <br>PreviewImageStart</td> <td class=c title=' * = Protected'>int16u[2]<br>int32u*</td> <td><span class=s><span class=n>(PreviewImageStart for the SD1 and Merrill/Quattro models, and PreviewImageSize for others)</span></span></td></tr> <tr> <td title='0x001d = 29'>0x001d</td> <td>MakerNoteVersion <br>PreviewImageLength</td> <td class=c title=' * = Protected'>undef<br>int32u*</td> <td><span class=s><span class=n>(PreviewImageLength for the SD1 and Merrill/Quattro models, and MakerNoteVersion for others)</span></span></td></tr> <tr class=b> <td title='0x001e = 30'>0x001e</td> <td>PreviewImageSize</td> <td class=c>int16u[2]</td> <td><span class=s><span class=n>(only valid for some models)</span></span></td></tr> <tr> <td title='0x001f = 31'>0x001f</td> <td>AFPoint <br>MakerNoteVersion</td> <td class=c>string<br>undef</td> <td><span class=s><span class=n>(MakerNoteVersion for the SD1 and Merrill/Quattro models, and AFPoint for others)</span></span></td></tr> <tr class=b> <td title='0x0022 = 34'>0x0022</td> <td>FileFormat</td> <td class=c>string</td> <td><span class=s><span class=n>(models other than the SD1 and Merrill/Quattro models)</span></span></td></tr> <tr> <td title='0x0024 = 36'>0x0024</td> <td>Calibration</td> <td class=c>string</td> <td><span class=s><span class=n>(models other than the SD1 and Merrill/Quattro models)</span></span></td></tr> <tr class=b> <td title='0x0026 = 38'>0x0026</td> <td>FileFormat</td> <td class=c>string</td> <td><span class=s><span class=n>(SD1 and Merrill/Quattro models only)</span></span></td></tr> <tr> <td title='0x0027 = 39'>0x0027</td> <td>LensType</td> <td class=c>string</td> <td>--&gt; <a href='Sigma.html#LensType'>Sigma LensType Values</a> <br><span class='n s'>(SD1 and Merrill/Quattro models only)</span></td></tr> <tr class=b> <td title='0x002a = 42'>0x002a</td> <td>LensFocalRange</td> <td class=c>rational64u[2]</td> <td><span class=s><span class=n>(SD1 and Merrill/Quattro models only)</span></span></td></tr> <tr> <td title='0x002b = 43'>0x002b</td> <td>LensMaxApertureRange</td> <td class=c>rational64u[2]</td> <td><span class=s><span class=n>(SD1 and Merrill/Quattro models only)</span></span></td></tr> <tr class=b> <td title='0x002c = 44'>0x002c</td> <td>ColorMode</td> <td class=c>int32u</td> <td><span class=s><span class=n>(not valid for some models)</span></span><table class=cols><tr> <td>0 = n/a <br>1 = Sepia <br>2 = B&amp;W <br>3 = Standard <br>4 = Vivid</td><td>&nbsp;&nbsp;</td> <td>5 = Neutral <br>6 = Portrait <br>7 = Landscape <br>8 = FOV Classic Blue</td></tr></table> </td></tr> <tr> <td title='0x0030 = 48'>0x0030</td> <td>LensApertureRange <br>Calibration</td> <td class=c>string<br>string</td> <td><span class=s><span class=n>(Calibration for the SD1 and Merrill/Quattro models, and LensApertureRange for others. Note that LensApertureRange changes with focal length, and some models report the maximum aperture here)</span></span></td></tr> <tr class=b> <td title='0x0031 = 49'>0x0031</td> <td>FNumber</td> <td class=c>rational64u</td> <td><span class=s><span class=n>(models other than the SD1 and Merrill/Quattro models)</span></span></td></tr> <tr> <td title='0x0032 = 50'>0x0032</td> <td>ExposureTime</td> <td class=c>rational64u</td> <td><span class=s><span class=n>(models other than the SD1 and Merrill/Quattro models)</span></span></td></tr> <tr class=b> <td title='0x0033 = 51'>0x0033</td> <td>ExposureTime2</td> <td class=c>string</td> <td><span class=s><span class=n>(models other than the SD1, SD9, SD15 and Merrill/Quattro models)</span></span></td></tr> <tr> <td title='0x0034 = 52'>0x0034</td> <td>BurstShot</td> <td class=c>int32u</td> <td><span class=s><span class=n>(models other than the SD1 and Merrill/Quattro models)</span></span></td></tr> <tr class=b> <td title='0x0035 = 53'>0x0035</td> <td>ExposureCompensation</td> <td class=c>rational64s</td> <td><span class=s><span class=n>(models other than the SD1 and Merrill/Quattro models)</span></span></td></tr> <tr> <td title='0x0039 = 57'>0x0039</td> <td>SensorTemperature</td> <td class=c>string</td> <td><span class=s><span class=n>(models other than the SD1 and Merrill/Quattro models)</span></span></td></tr> <tr class=b> <td title='0x003a = 58'>0x003a</td> <td>FlashExposureComp</td> <td class=c>rational64s</td> <td><span class=s><span class=n>(models other than the SD1 and Merrill/Quattro models)</span></span></td></tr> <tr> <td title='0x003b = 59'>0x003b</td> <td>Firmware</td> <td class=c>string</td> <td><span class=s><span class=n>(models other than the SD1 and Merrill/Quattro models)</span></span></td></tr> <tr class=b> <td title='0x003c = 60'>0x003c</td> <td>WhiteBalance</td> <td class=c>string</td> <td><span class=s><span class=n>(models other than the SD1 and Merrill/Quattro models)</span></span></td></tr> <tr> <td title='0x003d = 61'>0x003d</td> <td>PictureMode</td> <td class=c>string</td> <td><span class=s><span class=n>(same as ColorMode, but &quot;Standard&quot; when ColorMode is Sepia or B&amp;W)</span></span></td></tr> <tr class=b> <td title='0x0048 = 72'>0x0048</td> <td>LensApertureRange</td> <td class=c>string</td> <td><span class=s><span class=n>(SD1 and Merrill/Quattro models only)</span></span></td></tr> <tr> <td title='0x0049 = 73'>0x0049</td> <td>FNumber</td> <td class=c>rational64u</td> <td><span class=s><span class=n>(SD1 and Merrill/Quattro models only)</span></span></td></tr> <tr class=b> <td title='0x004a = 74'>0x004a</td> <td>ExposureTime</td> <td class=c>rational64u</td> <td><span class=s><span class=n>(SD1 and Merrill/Quattro models only)</span></span></td></tr> <tr> <td title='0x004b = 75'>0x004b</td> <td>ExposureTime2</td> <td class=c>string</td> <td><span class=s><span class=n>(SD1 and Merrill/Quattro models only)</span> <br><span class=n>(SD1 and Merrill/Quattro models only)</span></span></td></tr> <tr class=b> <td title='0x004d = 77'>0x004d</td> <td>ExposureCompensation</td> <td class=c>rational64s</td> <td><span class=s><span class=n>(SD1 and Merrill/Quattro models only)</span></span></td></tr> <tr> <td title='0x0055 = 85'>0x0055</td> <td>SensorTemperature</td> <td class=c>string</td> <td><span class=s><span class=n>(SD1 and Merrill/Quattro models only)</span></span></td></tr> <tr class=b> <td title='0x0056 = 86'>0x0056</td> <td>FlashExposureComp</td> <td class=c>rational64s</td> <td><span class=s><span class=n>(SD1 and Merrill/Quattro models only)</span></span></td></tr> <tr> <td title='0x0057 = 87'>0x0057</td> <td>Firmware</td> <td class=c>string</td> <td><span class=s><span class=n>(SD1 and Merrill/Quattro models only)</span></span></td></tr> <tr class=b> <td title='0x0058 = 88'>0x0058</td> <td>WhiteBalance</td> <td class=c>string</td> <td><span class=s><span class=n>(SD1 and Merrill/Quattro models only)</span></span></td></tr> <tr> <td title='0x0059 = 89'>0x0059</td> <td>DigitalFilter</td> <td class=c>string</td> <td><span class=s><span class=n>(SD1 and Merrill/Quattro models only)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='LensType'>Sigma LensType Values</a></h2> <p>Decimal values have been added to differentiate lenses which would otherwise have the same LensType, and are used by the Composite LensID tag when attempting to identify the specific lens model.</p> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>LensType</th><th>Value</th><th>LensType</th></tr> <tr><td>16</td><td>= Sigma 18-50mm F3.5-5.6 DC</td> <td class=b>486</td><td class=b>= Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye</td> </tr><tr><td>103</td><td>= Sigma 180mm F3.5 EX IF HSM APO Macro</td> <td class=b>506</td><td class=b>= Sigma 70-300mm F4-5.6 APO Macro Super II</td> </tr><tr><td>104</td><td>= Sigma 150mm F2.8 EX DG HSM APO Macro</td> <td class=b>507</td><td class=b>= Sigma 70-300mm F4-5.6 DL Macro Super II</td> </tr><tr><td>105</td><td>= Sigma 180mm F3.5 EX DG HSM APO Macro</td> <td class=b>508</td><td class=b>= Sigma 70-300mm F4-5.6 DG APO Macro</td> </tr><tr><td>106</td><td>= Sigma 150mm F2.8 EX DG OS HSM APO Macro</td> <td class=b>509</td><td class=b>= Sigma 70-300mm F4-5.6 DG Macro</td> </tr><tr><td>107</td><td>= Sigma 180mm F2.8 EX DG OS HSM APO Macro</td> <td class=b>510</td><td class=b>= Sigma 17-35 F2.8-4 EX DG ASP</td> </tr><tr><td>129</td><td>= Sigma 14mm F2.8 EX Aspherical</td> <td class=b>512</td><td class=b>= Sigma 15-30mm F3.5-4.5 EX DG ASP DF</td> </tr><tr><td>131</td><td>= Sigma 17-70mm F2.8-4.5 DC Macro</td> <td class=b>513</td><td class=b>= Sigma 20-40mm F2.8 EX DG</td> </tr><tr><td>134</td><td>= Sigma 100-300mm F4 EX DG HSM APO</td> <td class=b>519</td><td class=b>= Sigma 17-35 F2.8-4 EX ASP HSM</td> </tr><tr><td>135</td><td>= Sigma 120-300mm F2.8 EX DG HSM APO</td> <td class=b>520</td><td class=b>= Sigma 100-300mm F4.5-6.7 DL</td> </tr><tr><td>136</td><td>= Sigma 120-300mm F2.8 EX DG OS HSM APO</td> <td class=b>521</td><td class=b>= Sigma 18-50mm F3.5-5.6 DC Macro</td> </tr><tr><td>137</td><td>= Sigma 120-300mm F2.8 DG OS HSM | S</td> <td class=b>527</td><td class=b>= Sigma 100-300mm F4 EX IF HSM</td> </tr><tr><td>143</td><td>= Sigma 600mm F8 Mirror</td> <td class=b>529</td><td class=b>= Sigma 120-300mm F2.8 EX HSM IF APO</td> </tr><tr><td>145</td><td>= Sigma Lens (145)</td> <td class=b>547</td><td class=b>= Sigma 24-60mm F2.8 EX DG</td> </tr><tr><td>145.1</td><td>= Sigma 15-30mm F3.5-4.5 EX DG Aspherical</td> <td class=b>548</td><td class=b>= Sigma 24-70mm F2.8 EX DG Macro</td> </tr><tr><td>145.2</td><td>= Sigma 18-50mm F2.8 EX DG</td> <td class=b>549</td><td class=b>= Sigma 28-70mm F2.8 EX DG</td> </tr><tr><td>145.3</td><td>= Sigma 20-40mm F2.8 EX DG</td> <td class=b>566</td><td class=b>= Sigma 70-200mm F2.8 EX IF APO</td> </tr><tr><td>152</td><td>= Sigma APO 800mm F5.6 EX DG HSM</td> <td class=b>567</td><td class=b>= Sigma 70-200mm F2.8 EX IF HSM APO</td> </tr><tr><td>165</td><td>= Sigma 70-200mm F2.8 EX</td> <td class=b>568</td><td class=b>= Sigma 70-200mm F2.8 EX DG IF HSM APO</td> </tr><tr><td>169</td><td>= Sigma 18-50mm F2.8 EX DC</td> <td class=b>569</td><td class=b>= Sigma 70-200 F2.8 EX DG HSM APO Macro</td> </tr><tr><td>183</td><td>= Sigma 500mm F4.5 EX HSM APO</td> <td class=b>571</td><td class=b>= Sigma 24-70mm F2.8 IF EX DG HSM</td> </tr><tr><td>184</td><td>= Sigma 500mm F4.5 EX DG HSM APO</td> <td class=b>572</td><td class=b>= Sigma 70-300mm F4-5.6 DG OS</td> </tr><tr><td>194</td><td>= Sigma 300mm F2.8 EX HSM APO</td> <td class=b>579</td><td class=b>= Sigma 70-200mm F2.8 EX DG HSM APO Macro</td> </tr><tr><td>195</td><td>= Sigma 300mm F2.8 EX DG HSM APO</td> <td class=b>580</td><td class=b>= Sigma 18-50mm F2.8 EX DC</td> </tr><tr><td>200</td><td>= Sigma 12-24mm F4.5-5.6 EX DG ASP HSM</td> <td class=b>581</td><td class=b>= Sigma 18-50mm F2.8 EX DC Macro</td> </tr><tr><td>201</td><td>= Sigma 10-20mm F4-5.6 EX DC HSM</td> <td class=b>582</td><td class=b>= Sigma 18-50mm F2.8 EX DC HSM Macro</td> </tr><tr><td>202</td><td>= Sigma 10-20mm F3.5 EX DC HSM</td> <td class=b>583</td><td class=b>= Sigma 17-50mm F2.8 EX DC OS HSM</td> </tr><tr><td>203</td><td>= Sigma 8-16mm F4.5-5.6 DC HSM</td> <td class=b>589</td><td class=b>= Sigma APO 70-200mm F2.8 EX DG OS HSM</td> </tr><tr><td>204</td><td>= Sigma 12-24mm F4.5-5.6 DG HSM II</td> <td class=b>595</td><td class=b>= Sigma 300-800mm F5.6 EX DG APO HSM</td> </tr><tr><td>210</td><td>= Sigma 18-35mm F1.8 DC HSM | A</td> <td class=b>597</td><td class=b>= Sigma 200-500mm F2.8 APO EX DG</td> </tr><tr><td>256</td><td>= Sigma 105mm F2.8 EX Macro</td> <td class=b>668</td><td class=b>= Sigma 17-70mm F2.8-4 DC Macro OS HSM</td> </tr><tr><td>257</td><td>= Sigma 105mm F2.8 EX DG Macro</td> <td class=b>686</td><td class=b>= Sigma 50-200mm F4-5.6 DC OS HSM</td> </tr><tr><td>258</td><td>= Sigma 105mm F2.8 EX DG OS HSM Macro</td> <td class=b>691</td><td class=b>= Sigma 50-150mm F2.8 EX DC APO HSM II</td> </tr><tr><td>270</td><td>= Sigma 70mm F2.8 EX DG Macro</td> <td class=b>692</td><td class=b>= Sigma APO 50-150mm F2.8 EX DC OS HSM</td> </tr><tr><td>300</td><td>= Sigma 30mm F1.4 EX DC HSM</td> <td class=b>728</td><td class=b>= Sigma 120-400mm F4.5-5.6 DG APO OS HSM</td> </tr><tr><td>301</td><td>= Sigma 30mm F1.4 DC HSM | A</td> <td class=b>737</td><td class=b>= Sigma 150-500mm F5-6.3 APO DG OS HSM</td> </tr><tr><td>310</td><td>= Sigma 50mm F1.4 EX DG HSM</td> <td class=b>738</td><td class=b>= Sigma 50-500mm F4.5-6.3 APO DG OS HSM</td> </tr><tr><td>311</td><td>= Sigma 50mm F1.4 DG HSM | A</td> <td class=b>824</td><td class=b>= Sigma 1.4X Teleconverter EX APO DG</td> </tr><tr><td>320</td><td>= Sigma 85mm F1.4 EX DG HSM</td> <td class=b>853</td><td class=b>= Sigma 18-125mm F3.8-5.6 DC OS HSM</td> </tr><tr><td>330</td><td>= Sigma 30mm F2.8 EX DN</td> <td class=b>861</td><td class=b>= Sigma 18-50mm F2.8-4.5 DC OS HSM</td> </tr><tr><td>340</td><td>= Sigma 35mm F1.4 DG HSM</td> <td class=b>876</td><td class=b>= Sigma 2.0X Teleconverter EX APO DG</td> </tr><tr><td>345</td><td>= Sigma 50mm F2.8 EX Macro</td> <td class=b>880</td><td class=b>= Sigma 18-250mm F3.5-6.3 DC OS HSM</td> </tr><tr><td>346</td><td>= Sigma 50mm F2.8 EX DG Macro</td> <td class=b>882</td><td class=b>= Sigma 18-200mm F3.5-6.3 II DC OS HSM</td> </tr><tr><td>400</td><td>= Sigma 9mm F2.8 EX DN</td> <td class=b>883</td><td class=b>= Sigma 18-250mm F3.5-6.3 DC Macro OS HSM</td> </tr><tr><td>401</td><td>= Sigma 24mm F1.4 DG HSM | A</td> <td class=b>1003</td><td class=b>= Sigma 19mm F2.8</td> </tr><tr><td>411</td><td>= Sigma 20mm F1.8 EX DG ASP RF</td> <td class=b>1004</td><td class=b>= Sigma 30mm F2.8</td> </tr><tr><td>432</td><td>= Sigma 24mm F1.8 EX DG ASP Macro</td> <td class=b>1005</td><td class=b>= Sigma 50mm F2.8 Macro</td> </tr><tr><td>440</td><td>= Sigma 28mm F1.8 EX DG ASP Macro</td> <td class=b>1006</td><td class=b>= Sigma 19mm F2.8</td> </tr><tr><td>461</td><td>= Sigma 14mm F2.8 EX ASP HSM</td> <td class=b>1007</td><td class=b>= Sigma 30mm F2.8</td> </tr><tr><td>475</td><td>= Sigma 15mm F2.8 EX Diagonal FishEye</td> <td class=b>1008</td><td class=b>= Sigma 50mm F2.8 Macro</td> </tr><tr><td>476</td><td>= Sigma 15mm F2.8 EX DG Diagonal Fisheye</td> <td class=b>1009</td><td class=b>= Sigma 14mm F4</td> </tr><tr><td>477</td><td>= Sigma 10mm F2.8 EX DC HSM Fisheye</td> <td class=b>8900</td><td class=b>= Sigma 70-300mm F4-5.6 DG OS</td> </tr><tr><td>483</td><td>= Sigma 8mm F4 EX Circular Fisheye</td> <td class=b>'5A8'</td><td class=b>= Sigma 70-300mm F4-5.6 APO DG Macro (Motorized)</td> </tr><tr><td>484</td><td>= Sigma 8mm F4 EX DG Circular Fisheye</td> <td class=b>'5A9'</td><td class=b>= Sigma 70-300mm F4-5.6 DG Macro (Motorized)</td> </tr><tr><td>485</td><td>= Sigma 8mm F3.5 EX DG Circular Fisheye</td> <td class=b>'A100'</td><td class=b>= Sigma 24-70mm F2.8 DG Macro</td> </tr></table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jun 24, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/SigmaRaw.html����������������������������������������������������000644 �000765 �000024 �00000023627 12527350232 021441� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SigmaRaw Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>SigmaRaw Tags</h2> <p>These tags are used in Sigma and Foveon RAW (.X3F) images. Metadata is also extracted from the JpgFromRaw image if it exists (all models but the SD9 and SD10). Currently, metadata may only be written to the embedded JpgFromRaw.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Header'</td> <td>Header</td> <td class=c>-</td> <td>--&gt; <a href='SigmaRaw.html#Header'>SigmaRaw Header Tags</a></td></tr> <tr class=b> <td>'Header4'</td> <td>Header4</td> <td class=c>-</td> <td>--&gt; <a href='SigmaRaw.html#Header4'>SigmaRaw Header4 Tags</a></td></tr> <tr> <td>'HeaderExt'</td> <td>HeaderExt</td> <td class=c>-</td> <td>--&gt; <a href='SigmaRaw.html#HeaderExt'>SigmaRaw HeaderExt Tags</a></td></tr> <tr class=b> <td>'IMA2'</td> <td>PreviewImage <br>JpgFromRaw</td> <td class=c>N<br>N</td> <td>&nbsp;</td></tr> <tr> <td>'IMAG'</td> <td>PreviewImage</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'PROP'</td> <td>Properties</td> <td class=c>-</td> <td>--&gt; <a href='SigmaRaw.html#Properties'>SigmaRaw Properties Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Header'>SigmaRaw Header Tags</a></h2> <p>Information extracted from the header of an X3F file.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>FileVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>ImageUniqueID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0006 = 6'>0x0006</td> <td>MarkBits</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0007 = 7'>0x0007</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0009 = 9'>0x0009</td> <td>Rotation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000a = 10'>0x000a</td> <td>WhiteBalance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0012 = 18'>0x0012</td> <td>SceneCaptureType</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Header4'>SigmaRaw Header4 Tags</a></h2> <p>Header information for version 4.0 or greater X3F.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>FileVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>Rotation</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='HeaderExt'>SigmaRaw HeaderExt Tags</a></h2> <p>Extended header data found in version 2.1 and 2.2 files</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>Unused</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>ExposureAdjust</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>Contrast</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>Shadow</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>Highlight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>Saturation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0006 = 6'>0x0006</td> <td>Sharpness</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0007 = 7'>0x0007</td> <td>RedAdjust</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>GreenAdjust</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0009 = 9'>0x0009</td> <td>BlueAdjust</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000a = 10'>0x000a</td> <td>X3FillLight</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Properties'>SigmaRaw Properties Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'AEMODE'</td> <td>MeteringMode</td> <td class=c>N</td> <td><span class=s>8 = 8-segment <br>&#39;A&#39; = Average <br>&#39;C&#39; = Center-weighted average</span></td></tr> <tr class=b> <td>'AFAREA'</td> <td>AFArea</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'AFINFOCUS'</td> <td>AFInFocus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'AFMODE'</td> <td>FocusMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'APERTURE'</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'AP_DESC'</td> <td>ApertureDisplayed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'BRACKET'</td> <td>BracketShot</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'BURST'</td> <td>BurstShot</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'CAMMANUF'</td> <td>Make</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'CAMMODEL'</td> <td>Model</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'CAMNAME'</td> <td>CameraName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'CAMSERIAL'</td> <td>SerialNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'CM_DESC'</td> <td>SceneCaptureType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'COLORSPACE'</td> <td>ColorSpace</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'DRIVE'</td> <td>DriveMode</td> <td class=c>N</td> <td><table class=cols><tr> <td>&#39;10S&#39; = 10 s Timer <br>&#39;2S&#39; = 2 s Timer <br>&#39;AB&#39; = Auto Bracket <br>&#39;MULTI&#39; = Multi Shot</td><td>&nbsp;&nbsp;</td> <td>&#39;OFF&#39; = Off <br>&#39;SINGLE&#39; = Single Shot <br>&#39;UP&#39; = Mirror Up</td></tr></table> </td></tr> <tr class=b> <td>'EVAL_STATE'</td> <td>EvalState</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'EXPCOMP'</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'EXPNET'</td> <td>NetExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'EXPTIME'</td> <td>IntegrationTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'FIRMVERS'</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'FLASH'</td> <td>FlashMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'FLASHEXPCOMP'</td> <td>FlashExpComp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'FLASHPOWER'</td> <td>FlashPower</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'FLASHTTLMODE'</td> <td>FlashTTLMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'FLASHTYPE'</td> <td>FlashType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'FLENGTH'</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'FLEQ35MM'</td> <td>FocalLengthIn35mmFormat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'FOCUS'</td> <td>Focus</td> <td class=c>N</td> <td><span class=s>&#39;AF&#39; = Auto-focus Locked <br>&#39;M&#39; = Manual <br>&#39;NO LOCK&#39; = Auto-focus Didn&#39;t Lock</span></td></tr> <tr> <td>'IMAGEBOARDID'</td> <td>ImageBoardID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'IMAGERBOARDID'</td> <td>ImagerBoardID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IMAGERTEMP'</td> <td>SensorTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ISO'</td> <td>ISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'LENSARANGE'</td> <td>LensApertureRange</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'LENSFRANGE'</td> <td>LensFocalRange</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'LENSMODEL'</td> <td>LensType</td> <td class=c>N</td> <td>--&gt; <a href='Sigma.html#LensType'>Sigma LensType Values</a></td></tr> <tr class=b> <td>'PMODE'</td> <td>ExposureProgram</td> <td class=c>N</td> <td><span class=s>&#39;A&#39; = Aperture Priority <br>&#39;M&#39; = Manual <br>&#39;P&#39; = Program <br>&#39;S&#39; = Shutter Priority</span></td></tr> <tr> <td>'RESOLUTION'</td> <td>Quality</td> <td class=c>N</td> <td><span class=s>&#39;HI&#39; = High <br>&#39;LOW&#39; = Low <br>&#39;MED&#39; = Medium</span></td></tr> <tr class=b> <td>'SENSORID'</td> <td>SensorID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'SHUTTER'</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'SH_DESC'</td> <td>ShutterSpeedDisplayed</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TIME'</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'VERSION_BF'</td> <td>VersionBF</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'WB_DESC'</td> <td>WhiteBalance</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jul 2, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Sony.html��������������������������������������������������������000644 �000765 �000024 �00001110327 12650436604 020657� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Sony Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Sony Tags</h2> <p>The following information has been decoded from the MakerNotes of Sony cameras. Some of these tags have been inherited from the Minolta MakerNotes.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>CameraInfo <br>CameraInfo2 <br>CameraInfo3 <br>CameraInfoUnknown</td> <td class=c>-<br>-<br>-<br>-</td> <td>--&gt; <a href='Sony.html#CameraInfo'>Sony CameraInfo Tags</a> <br>--&gt; <a href='Sony.html#CameraInfo2'>Sony CameraInfo2 Tags</a> <br>--&gt; <a href='Sony.html#CameraInfo3'>Sony CameraInfo3 Tags</a> <br>--&gt; <a href='Sony.html#CameraInfoUnknown'>Sony CameraInfoUnknown Tags</a></td></tr> <tr class=b> <td title='0x0020 = 32'>0x0020</td> <td>FocusInfo <br>MoreInfo</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Sony.html#FocusInfo'>Sony FocusInfo Tags</a> <br>--&gt; <a href='Sony.html#MoreInfo'>Sony MoreInfo Tags</a></td></tr> <tr> <td title='0x0102 = 258'>0x0102</td> <td>Quality</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = RAW <br>1 = Super Fine <br>2 = Fine <br>3 = Standard <br>4 = Economy <br>5 = Extra Fine <br>6 = RAW + JPEG <br>7 = Compressed RAW <br>8 = Compressed RAW + JPEG <br>4294967295 = n/a</td></tr></table> </td></tr> <tr class=b> <td title='0x0104 = 260'>0x0104</td> <td>FlashExposureComp</td> <td class=c>rational64s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0105 = 261'>0x0105</td> <td>Teleconverter</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0x0 = None <br>0x4 = Minolta/Sony AF 1.4x APO (D) (0x04) <br>0x5 = Minolta/Sony AF 2x APO (D) (0x05) <br>0x48 = Minolta/Sony AF 2x APO (D) <br>0x50 = Minolta AF 2x APO II <br>0x60 = Minolta AF 2x APO <br>0x88 = Minolta/Sony AF 1.4x APO (D) <br>0x90 = Minolta AF 1.4x APO II <br>0xa0 = Minolta AF 1.4x APO</td></tr></table> </td></tr> <tr class=b> <td title='0x0112 = 274'>0x0112</td> <td>WhiteBalanceFineTune</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0114 = 276'>0x0114</td> <td>CameraSettings <br>CameraSettings2 <br>CameraSettings3 <br>CameraSettingsUnknown</td> <td class=c>-<br>-<br>-<br>-</td> <td>--&gt; <a href='Sony.html#CameraSettings'>Sony CameraSettings Tags</a> <br>--&gt; <a href='Sony.html#CameraSettings2'>Sony CameraSettings2 Tags</a> <br>--&gt; <a href='Sony.html#CameraSettings3'>Sony CameraSettings3 Tags</a> <br>--&gt; <a href='Sony.html#CameraSettingsUnknown'>Sony CameraSettingsUnknown Tags</a></td></tr> <tr class=b> <td title='0x0115 = 277'>0x0115</td> <td>WhiteBalance</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0x0 = Auto <br>0x1 = Color Temperature/Color Filter <br>0x10 = Daylight <br>0x20 = Cloudy <br>0x30 = Shade <br>0x40 = Tungsten <br>0x50 = Flash <br>0x60 = Fluorescent <br>0x70 = Custom <br>0x80 = Underwater</td></tr></table> </td></tr> <tr> <td title='0x0116 = 278'>0x0116</td> <td>ExtraInfo <br>ExtraInfo2 <br>ExtraInfo3</td> <td class=c>-<br>-<br>-</td> <td>--&gt; <a href='Sony.html#ExtraInfo'>Sony ExtraInfo Tags</a> <br>--&gt; <a href='Sony.html#ExtraInfo2'>Sony ExtraInfo2 Tags</a> <br>--&gt; <a href='Sony.html#ExtraInfo3'>Sony ExtraInfo3 Tags</a></td></tr> <tr class=b> <td title='0x0e00 = 3584'>0x0e00</td> <td>PrintIM</td> <td class=c>-</td> <td>--&gt; <a href='PrintIM.html'>PrintIM Tags</a></td></tr> <tr> <td title='0x1000 = 4096'>0x1000</td> <td>MultiBurstMode</td> <td class=c>undef</td> <td><span class=s><span class=n>(MultiBurst tags valid only for models with this feature, like the F88)</span> <br>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x1001 = 4097'>0x1001</td> <td>MultiBurstImageWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1002 = 4098'>0x1002</td> <td>MultiBurstImageHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1003 = 4099'>0x1003</td> <td>Panorama</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#Panorama'>Sony Panorama Tags</a></td></tr> <tr> <td title='0x2001 = 8193'>0x2001</td> <td>PreviewImage</td> <td class=c>undef</td> <td><span class=s><span class=n>(HD-size preview in JPEG images from almost all DSLR/SLT/ILCA/NEX/ILCE.)</span></span></td></tr> <tr class=b> <td title='0x2002 = 8194'>0x2002</td> <td>Rating</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x2004 = 8196'>0x2004</td> <td>Contrast</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2005 = 8197'>0x2005</td> <td>Saturation</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x2006 = 8198'>0x2006</td> <td>Sharpness</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x2007 = 8199'>0x2007</td> <td>Brightness</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x2008 = 8200'>0x2008</td> <td>LongExposureNoiseReduction</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0x0 = Off <br>0x1 = On (unused) <br>0x10001 = On (dark subtracted) <br>0xffff0000 = Off (65535) <br>0xffff0001 = On (65535) <br>0xffffffff = n/a</td></tr></table> </td></tr> <tr class=b> <td title='0x2009 = 8201'>0x2009</td> <td>HighISONoiseReduction</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Low <br>2 = Normal</td><td>&nbsp;&nbsp;</td> <td>3 = High <br>256 = Auto <br>65535 = n/a</td></tr></table> </td></tr> <tr> <td title='0x200a = 8202'>0x200a</td> <td>HDR</td> <td class=c>int32u</td> <td><span class=s><span class=n>(stored as a 32-bit integer, but read as two 16-bit integers)</span> <br>[Value 0]</span><table class=cols><tr> <td>0x0 = Off <br>0x1 = Auto <br>0x10 = 1.0 EV <br>0x11 = 1.5 EV <br>0x12 = 2.0 EV</td><td>&nbsp;&nbsp;</td> <td>0x13 = 2.5 EV <br>0x14 = 3.0 EV <br>0x15 = 3.5 EV <br>0x16 = 4.0 EV <br>0x17 = 4.5 EV</td><td>&nbsp;&nbsp;</td> <td>0x18 = 5.0 EV <br>0x19 = 5.5 EV <br>0x1a = 6.0 EV</td></tr></table> <span class=s>[Value 1] <br>0x0 = Uncorrected image <br>0x1 = HDR image (good) <br>0x2 = HDR image (fail 1) <br>0x3 = HDR image (fail 2)</span></td></tr> <tr class=b> <td title='0x200b = 8203'>0x200b</td> <td>MultiFrameNoiseReduction</td> <td class=c>int32u</td> <td><span class=s><span class=n>(may not be valid for RS100)</span> <br>0 = Off <br>1 = On <br>255 = n/a</span></td></tr> <tr> <td title='0x200e = 8206'>0x200e</td> <td>PictureEffect</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Toy Camera <br>2 = Pop Color <br>3 = Posterization <br>4 = Posterization B/W <br>5 = Retro Photo <br>6 = Soft High Key <br>7 = Partial Color (red) <br>8 = Partial Color (green) <br>9 = Partial Color (blue) <br>10 = Partial Color (yellow) <br>13 = High Contrast Monochrome <br>16 = Toy Camera (normal) <br>17 = Toy Camera (cool) <br>18 = Toy Camera (warm) <br>19 = Toy Camera (green) <br>20 = Toy Camera (magenta) <br>32 = Soft Focus (low) <br>33 = Soft Focus <br>34 = Soft Focus (high) <br>48 = Miniature (auto) <br>49 = Miniature (top) <br>50 = Miniature (middle horizontal) <br>51 = Miniature (bottom) <br>52 = Miniature (left) <br>53 = Miniature (middle vertical) <br>54 = Miniature (right) <br>64 = HDR Painting (low) <br>65 = HDR Painting <br>66 = HDR Painting (high) <br>80 = Rich-tone Monochrome <br>97 = Water Color <br>98 = Water Color 2 <br>112 = Illustration (low) <br>113 = Illustration <br>114 = Illustration (high)</td></tr></table> </td></tr> <tr class=b> <td title='0x200f = 8207'>0x200f</td> <td>SoftSkinEffect</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>1 = Low <br>2 = Mid <br>3 = High <br>4294967295 = n/a</span></td></tr> <tr> <td title='0x2010 = 8208'>0x2010</td> <td>Tag2010a <br>Tag2010b <br>Tag2010c <br>Tag2010d <br>Tag2010e <br>Tag2010f <br>Tag2010g <br>Tag2010h</td> <td class=c>-<br>-<br>-<br>-<br>-<br>-<br>-<br>-</td> <td>--&gt; <a href='Sony.html#Tag2010a'>Sony Tag2010a Tags</a> <br>--&gt; <a href='Sony.html#Tag2010b'>Sony Tag2010b Tags</a> <br>--&gt; <a href='Sony.html#Tag2010c'>Sony Tag2010c Tags</a> <br>--&gt; <a href='Sony.html#Tag2010d'>Sony Tag2010d Tags</a> <br>--&gt; <a href='Sony.html#Tag2010e'>Sony Tag2010e Tags</a> <br>--&gt; <a href='Sony.html#Tag2010f'>Sony Tag2010f Tags</a> <br>--&gt; <a href='Sony.html#Tag2010g'>Sony Tag2010g Tags</a> <br>--&gt; <a href='Sony.html#Tag2010h'>Sony Tag2010h Tags</a></td></tr> <tr class=b> <td title='0x2011 = 8209'>0x2011</td> <td>VignettingCorrection</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>2 = Auto <br>4294967295 = n/a</span></td></tr> <tr> <td title='0x2012 = 8210'>0x2012</td> <td>LateralChromaticAberration</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>2 = Auto <br>4294967295 = n/a</span></td></tr> <tr class=b> <td title='0x2013 = 8211'>0x2013</td> <td>DistortionCorrectionSetting</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>2 = Auto <br>4294967295 = n/a</span></td></tr> <tr> <td title='0x2014 = 8212'>0x2014</td> <td>WBShiftAB_GM</td> <td class=c>int32s[2]</td> <td><span class=s><span class=n>(2 numbers: 1. positive is a shift toward amber, 2. positive is a shift toward magenta)</span></span></td></tr> <tr class=b> <td title='0x2016 = 8214'>0x2016</td> <td>AutoPortraitFramed</td> <td class=c>int16u</td> <td><span class=s><span class=n>(&quot;Yes&quot; if this image was created by the Auto Portrait Framing feature)</span> <br>0 = No <br>1 = Yes</span></td></tr> <tr> <td title='0x2017 = 8215'>0x2017</td> <td>FlashAction</td> <td class=c>int32u</td> <td><span class=s>0 = Did not fire <br>1 = Flash Fired <br>2 = External Flash Fired</span></td></tr> <tr class=b> <td title='0x201b = 8219'>0x201b</td> <td>FocusMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Manual <br>2 = AF-S <br>3 = AF-C</td><td>&nbsp;&nbsp;</td> <td>4 = AF-A <br>6 = DMF <br>7 = AF-D</td></tr></table> </td></tr> <tr> <td title='0x201c = 8220'>0x201c</td> <td>AFAreaModeSetting</td> <td class=c>int8u</td> <td><span class=s><span class=n>(SLT models)</span> <br>0 = Wide <br>4 = Local <br>8 = Zone <br>9 = Spot <br><span class=n>(NEX and ILCE models)</span> <br>0 = Multi <br>1 = Center <br>3 = Flexible Spot <br>11 = Zone <br><span class=n>(ILCA models)</span> <br>0 = Wide <br>4 = Flexible Spot <br>8 = Zone <br>9 = Center <br>12 = Expanded Flexible Spot</span></td></tr> <tr class=b> <td title='0x201d = 8221'>0x201d</td> <td>FlexibleSpotPosition</td> <td class=c>int16u[2]</td> <td><span class=s><span class=n>(X and Y coordinages of the AF point. Valid only when AFAreaMode is Flexible Spot)</span></span></td></tr> <tr> <td title='0x201e = 8222'>0x201e</td> <td>AFPointSelected <br>AFZoneSelected</td> <td class=c>int8u<br>int8u</td> <td><span class=s><span class=n>(SLT models)</span></span><table class=cols><tr> <td>0 = Auto <br>1 = Center <br>2 = Top <br>3 = Upper-right <br>4 = Right <br>5 = Lower-right <br>6 = Bottom <br>7 = Lower-left <br>8 = Left <br>9 = Upper-left</td><td>&nbsp;&nbsp;</td> <td>10 = Far Right <br>11 = Far Left <br>12 = Upper-middle <br>13 = Near Right <br>14 = Lower-middle <br>15 = Near Left <br>16 = Upper Far Right <br>17 = Lower Far Right <br>18 = Lower Far Left <br>19 = Upper Far Left</td></tr></table> <span class=s><span class=n>(ILCA models)</span></span><table class=cols><tr> <td>-1 = Auto <br>0 = A5 <br>1 = A6 <br>2 = A7 <br>3 = B2 <br>4 = B3 <br>5 = B4 <br>6 = B5 <br>7 = B6 <br>8 = B7 <br>9 = B8 <br>10 = B9 <br>11 = B10 <br>12 = C1 <br>13 = C2 <br>14 = C3 <br>15 = C4 <br>16 = C5 <br>17 = C6 <br>18 = C7 <br>19 = C8 <br>20 = C9 <br>21 = C10 <br>22 = C11 <br>23 = D1 <br>24 = D2 <br>25 = D3</td><td>&nbsp;&nbsp;</td> <td>26 = D4 <br>27 = D5 <br>28 = D6 <br>29 = D7 <br>30 = D8 <br>31 = D9 <br>32 = D10 <br>33 = D11 <br>34 = E1 <br>35 = E2 <br>36 = E3 <br>37 = E4 <br>38 = E5 <br>39 = E6 (Center) <br>40 = E7 <br>41 = E8 <br>42 = E9 <br>43 = E10 <br>44 = E11 <br>45 = F1 <br>46 = F2 <br>47 = F3 <br>48 = F4 <br>49 = F5 <br>50 = F6 <br>51 = F7 <br>52 = F8</td><td>&nbsp;&nbsp;</td> <td>53 = F9 <br>54 = F10 <br>55 = F11 <br>56 = G1 <br>57 = G2 <br>58 = G3 <br>59 = G4 <br>60 = G5 <br>61 = G6 <br>62 = G7 <br>63 = G8 <br>64 = G9 <br>65 = G10 <br>66 = G11 <br>67 = H2 <br>68 = H3 <br>69 = H4 <br>70 = H5 <br>71 = H6 <br>72 = H7 <br>73 = H8 <br>74 = H9 <br>75 = H10 <br>76 = I5 <br>77 = I6 <br>78 = I7</td></tr></table> <span class=s><span class=n>(NEX and ILCE models)</span> <br>0 = n/a <br>1 = Zone 1 <br>4 = Zone 4 <br>5 = Zone 5</span></td></tr> <tr class=b> <td title='0x2020 = 8224'>0x2020</td> <td>AFPointsUsed</td> <td class=c>N</td> <td><span class=s><span class=n>(SLT models only)</span></span><table class=cols><tr> <td>0x0 = (none) <br>Bit 0 = Center <br>Bit 1 = Top <br>Bit 2 = Upper-right <br>Bit 3 = Right <br>Bit 4 = Lower-right <br>Bit 5 = Bottom <br>Bit 6 = Lower-left <br>Bit 7 = Left <br>Bit 8 = Upper-left</td><td>&nbsp;&nbsp;</td> <td>Bit 9 = Far Right <br>Bit 10 = Far Left <br>Bit 11 = Upper-middle <br>Bit 12 = Near Right <br>Bit 13 = Lower-middle <br>Bit 14 = Near Left <br>Bit 15 = Upper Far Right <br>Bit 16 = Lower Far Right <br>Bit 17 = Lower Far Left <br>Bit 18 = Upper Far Left</td></tr></table> <span class=s><span class=n>(ILCA models)</span></span><table class=cols><tr> <td>0x0 = (none) <br>Bit 0 = A5 <br>Bit 1 = A6 <br>Bit 2 = A7 <br>Bit 3 = B2 <br>Bit 4 = B3 <br>Bit 5 = B4 <br>Bit 6 = B5 <br>Bit 7 = B6 <br>Bit 8 = B7 <br>Bit 9 = B8 <br>Bit 10 = B9 <br>Bit 11 = B10 <br>Bit 12 = C1 <br>Bit 13 = C2 <br>Bit 14 = C3 <br>Bit 15 = C4 <br>Bit 16 = C5 <br>Bit 17 = C6 <br>Bit 18 = C7 <br>Bit 19 = C8 <br>Bit 20 = C9 <br>Bit 21 = C10 <br>Bit 22 = C11 <br>Bit 23 = D1 <br>Bit 24 = D2 <br>Bit 25 = D3</td><td>&nbsp;&nbsp;</td> <td>Bit 26 = D4 <br>Bit 27 = D5 <br>Bit 28 = D6 <br>Bit 29 = D7 <br>Bit 30 = D8 <br>Bit 31 = D9 <br>Bit 32 = D10 <br>Bit 33 = D11 <br>Bit 34 = E1 <br>Bit 35 = E2 <br>Bit 36 = E3 <br>Bit 37 = E4 <br>Bit 38 = E5 <br>Bit 39 = E6 <br>Bit 40 = E7 <br>Bit 41 = E8 <br>Bit 42 = E9 <br>Bit 43 = E10 <br>Bit 44 = E11 <br>Bit 45 = F1 <br>Bit 46 = F2 <br>Bit 47 = F3 <br>Bit 48 = F4 <br>Bit 49 = F5 <br>Bit 50 = F6 <br>Bit 51 = F7 <br>Bit 52 = F8</td><td>&nbsp;&nbsp;</td> <td>Bit 53 = F9 <br>Bit 54 = F10 <br>Bit 55 = F11 <br>Bit 56 = G1 <br>Bit 57 = G2 <br>Bit 58 = G3 <br>Bit 59 = G4 <br>Bit 60 = G5 <br>Bit 61 = G6 <br>Bit 62 = G7 <br>Bit 63 = G8 <br>Bit 64 = G9 <br>Bit 65 = G10 <br>Bit 66 = G11 <br>Bit 67 = H2 <br>Bit 68 = H3 <br>Bit 69 = H4 <br>Bit 70 = H5 <br>Bit 71 = H6 <br>Bit 72 = H7 <br>Bit 73 = H8 <br>Bit 74 = H9 <br>Bit 75 = H10 <br>Bit 76 = I5 <br>Bit 77 = I6 <br>Bit 78 = I7</td></tr></table> </td></tr> <tr> <td title='0x2022 = 8226'>0x2022</td> <td>FocalPlaneAFPointsUsed</td> <td class=c>N</td> <td><span class=s><span class=n>(On-sensor/focal-plane phase AF points for ILCE with hybrid AF)</span> <br>0x0 = (none) <br>0x0 = (none)</span></td></tr> <tr class=b> <td title='0x2026 = 8230'>0x2026</td> <td>WBShiftAB_GM_Precise</td> <td class=c>int32s[2]</td> <td><span class=s><span class=n>(2 numbers: 1. positive is a shift toward amber, 2. positive is a shift toward magenta (tbc))</span></span></td></tr> <tr> <td title='0x2028 = 8232'>0x2028</td> <td>VariableLowPassFilter</td> <td class=c>N</td> <td><span class=s>0 = n/a <br>1 = Off <br>65537 = Standard <br>131073 = High</span></td></tr> <tr class=b> <td title='0x3000 = 12288'>0x3000</td> <td>ShotInfo</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#ShotInfo'>Sony ShotInfo Tags</a></td></tr> <tr> <td title='0x900b = 36875'>0x900b</td> <td>Tag900b</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#Tag900b'>Sony Tag900b Tags</a></td></tr> <tr class=b> <td title='0x9050 = 36944'>0x9050</td> <td>Tag9050</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#Tag9050'>Sony Tag9050 Tags</a></td></tr> <tr> <td title='0x9400 = 37888'>0x9400</td> <td>Tag9400a <br>Tag9400b <br>Tag9400c</td> <td class=c>-<br>-<br>-</td> <td>--&gt; <a href='Sony.html#Tag9400a'>Sony Tag9400a Tags</a> <br>--&gt; <a href='Sony.html#Tag9400b'>Sony Tag9400b Tags</a> <br>--&gt; <a href='Sony.html#Tag9400c'>Sony Tag9400c Tags</a></td></tr> <tr class=b> <td title='0x9402 = 37890'>0x9402</td> <td>Tag9402</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#Tag9402'>Sony Tag9402 Tags</a></td></tr> <tr> <td title='0x9403 = 37891'>0x9403</td> <td>Tag9403</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#Tag9403'>Sony Tag9403 Tags</a></td></tr> <tr class=b> <td title='0x9404 = 37892'>0x9404</td> <td>Tag9404a <br>Tag9404b</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Sony.html#Tag9404a'>Sony Tag9404a Tags</a> <br>--&gt; <a href='Sony.html#Tag9404b'>Sony Tag9404b Tags</a></td></tr> <tr> <td title='0x9405 = 37893'>0x9405</td> <td>Tag9405a <br>Tag9405b</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Sony.html#Tag9405a'>Sony Tag9405a Tags</a> <br>--&gt; <a href='Sony.html#Tag9405b'>Sony Tag9405b Tags</a></td></tr> <tr class=b> <td title='0x9406 = 37894'>0x9406</td> <td>Tag9406</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#Tag9406'>Sony Tag9406 Tags</a></td></tr> <tr> <td title='0x940a = 37898'>0x940a</td> <td>Tag940a</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#Tag940a'>Sony Tag940a Tags</a></td></tr> <tr class=b> <td title='0x940c = 37900'>0x940c</td> <td>Tag940c</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#Tag940c'>Sony Tag940c Tags</a></td></tr> <tr> <td title='0x940e = 37902'>0x940e</td> <td>AFInfo <br>Tag940e</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Sony.html#AFInfo'>Sony AFInfo Tags</a> <br>--&gt; <a href='Sony.html#Tag940e'>Sony Tag940e Tags</a></td></tr> <tr class=b> <td title='0xb000 = 45056'>0xb000</td> <td>FileFormat</td> <td class=c>int8u[4]</td> <td><table class=cols><tr> <td>&#39;0 0 0 2&#39; = JPEG <br>&#39;1 0 0 0&#39; = SR2 <br>&#39;2 0 0 0&#39; = ARW 1.0 <br>&#39;3 0 0 0&#39; = ARW 2.0 <br>&#39;3 1 0 0&#39; = ARW 2.1</td><td>&nbsp;&nbsp;</td> <td>&#39;3 2 0 0&#39; = ARW 2.2 <br>&#39;3 3 0 0&#39; = ARW 2.3 <br>&#39;3 3 1 0&#39; = ARW 2.3.1 <br>&#39;3 3 2 0&#39; = ARW 2.3.2</td></tr></table> </td></tr> <tr> <td title='0xb001 = 45057'>0xb001</td> <td>SonyModelID</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>2 = DSC-R1 <br>256 = DSLR-A100 <br>257 = DSLR-A900 <br>258 = DSLR-A700 <br>259 = DSLR-A200 <br>260 = DSLR-A350 <br>261 = DSLR-A300 <br>262 = DSLR-A900 (APS-C mode) <br>263 = DSLR-A380/A390 <br>264 = DSLR-A330 <br>265 = DSLR-A230 <br>266 = DSLR-A290 <br>269 = DSLR-A850 <br>270 = DSLR-A850 (APS-C mode) <br>273 = DSLR-A550 <br>274 = DSLR-A500 <br>275 = DSLR-A450 <br>278 = NEX-5 <br>279 = NEX-3 <br>280 = SLT-A33 <br>281 = SLT-A55 / SLT-A55V <br>282 = DSLR-A560 <br>283 = DSLR-A580 <br>284 = NEX-C3 <br>285 = SLT-A35 <br>286 = SLT-A65 / SLT-A65V <br>287 = SLT-A77 / SLT-A77V <br>288 = NEX-5N <br>289 = NEX-7 <br>290 = NEX-VG20E <br>291 = SLT-A37</td><td>&nbsp;&nbsp;</td> <td>292 = SLT-A57 <br>293 = NEX-F3 <br>294 = SLT-A99 / SLT-A99V <br>295 = NEX-6 <br>296 = NEX-5R <br>297 = DSC-RX100 <br>298 = DSC-RX1 <br>299 = NEX-VG900 <br>300 = NEX-VG30E <br>302 = ILCE-3000 / ILCE-3500 <br>303 = SLT-A58 <br>305 = NEX-3N <br>306 = ILCE-7 <br>307 = NEX-5T <br>308 = DSC-RX100M2 <br>309 = DSC-RX10 <br>310 = DSC-RX1R <br>311 = ILCE-7R <br>312 = ILCE-6000 <br>313 = ILCE-5000 <br>317 = DSC-RX100M3 <br>318 = ILCE-7S <br>319 = ILCA-77M2 <br>339 = ILCE-5100 <br>340 = ILCE-7M2 <br>341 = DSC-RX100M4 <br>342 = DSC-RX10M2 <br>344 = DSC-RX1RM2 <br>346 = ILCE-QX1 <br>347 = ILCE-7RM2 <br>350 = ILCE-7SM2</td></tr></table> </td></tr> <tr class=b> <td title='0xb020 = 45088'>0xb020</td> <td>CreativeStyle</td> <td class=c>string</td> <td><table class=cols><tr> <td>&#39;AdobeRGB&#39; = Adobe RGB <br>&#39;Autumnleaves&#39; = Autumn Leaves <br>&#39;BW&#39; = B&amp;W <br>&#39;Clear&#39; = Clear <br>&#39;Deep&#39; = Deep <br>&#39;Landscape&#39; = Landscape <br>&#39;Light&#39; = Light <br>&#39;Neutral&#39; = Neutral <br>&#39;Nightview&#39; = Night View/Portrait <br>&#39;None&#39; = None <br>&#39;Portrait&#39; = Portrait <br>&#39;Real&#39; = Real <br>&#39;Sepia&#39; = Sepia <br>&#39;Standard&#39; = Standard <br>&#39;Sunset&#39; = Sunset <br>&#39;Vivid&#39; = Vivid</td></tr></table> </td></tr> <tr> <td title='0xb021 = 45089'>0xb021</td> <td>ColorTemperature</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb022 = 45090'>0xb022</td> <td>ColorCompensationFilter</td> <td class=c>int32u</td> <td><span class=s><span class=n>(negative is green, positive is magenta)</span></span></td></tr> <tr> <td title='0xb023 = 45091'>0xb023</td> <td>SceneMode</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = Standard <br>1 = Portrait <br>2 = Text <br>3 = Night Scene <br>4 = Sunset <br>5 = Sports <br>6 = Landscape <br>7 = Night Portrait <br>8 = Macro <br>9 = Super Macro <br>16 = Auto <br>17 = Night View/Portrait <br>18 = Sweep Panorama</td><td>&nbsp;&nbsp;</td> <td>19 = Handheld Night Shot <br>20 = Anti Motion Blur <br>21 = Cont. Priority AE <br>22 = Auto+ <br>23 = 3D Sweep Panorama <br>24 = Superior Auto <br>25 = High Sensitivity <br>26 = Fireworks <br>27 = Food <br>28 = Pet <br>33 = HDR <br>65535 = n/a</td></tr></table> </td></tr> <tr class=b> <td title='0xb024 = 45092'>0xb024</td> <td>ZoneMatching</td> <td class=c>int32u</td> <td><span class=s>0 = ISO Setting Used <br>1 = High Key <br>2 = Low Key</span></td></tr> <tr> <td title='0xb025 = 45093'>0xb025</td> <td>DynamicRangeOptimizer</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Standard <br>2 = Advanced Auto <br>3 = Auto <br>8 = Advanced Lv1 <br>9 = Advanced Lv2 <br>10 = Advanced Lv3</td><td>&nbsp;&nbsp;</td> <td>11 = Advanced Lv4 <br>12 = Advanced Lv5 <br>16 = Lv1 <br>17 = Lv2 <br>18 = Lv3 <br>19 = Lv4 <br>20 = Lv5</td></tr></table> </td></tr> <tr class=b> <td title='0xb026 = 45094'>0xb026</td> <td>ImageStabilization</td> <td class=c>int32u</td> <td><span class=s>0 = Off <br>1 = On <br>4294967295 = n/a</span></td></tr> <tr> <td title='0xb027 = 45095'>0xb027</td> <td>LensType</td> <td class=c>int32u</td> <td>--&gt; <a href='Sony.html#LensType'>Sony LensType Values</a></td></tr> <tr class=b> <td title='0xb028 = 45096'>0xb028</td> <td>MinoltaMakerNote</td> <td class=c>-</td> <td>--&gt; <a href='Minolta.html'>Minolta Tags</a></td></tr> <tr> <td title='0xb029 = 45097'>0xb029</td> <td>ColorMode</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0 = Standard <br>1 = Vivid <br>2 = Portrait <br>3 = Landscape <br>4 = Sunset <br>5 = Night View/Portrait <br>6 = B&amp;W <br>7 = Adobe RGB <br>12 = Neutral <br>13 = Clear <br>14 = Deep</td><td>&nbsp;&nbsp;</td> <td>15 = Light <br>16 = Autumn Leaves <br>17 = Sepia <br>100 = Neutral <br>101 = Clear <br>102 = Deep <br>103 = Light <br>104 = Night View <br>105 = Autumn Leaves <br>4294967295 = n/a</td></tr></table> </td></tr> <tr class=b> <td title='0xb02a = 45098'>0xb02a</td> <td>LensSpec</td> <td class=c>int8u[8]</td> <td><span class=s><span class=n>(like LensInfo, but also specifies lens features: DT, E, ZA, G, SSM, SAM, OSS, STF, Reflex, Macro and Fisheye)</span></span></td></tr> <tr> <td title='0xb02b = 45099'>0xb02b</td> <td>FullImageSize</td> <td class=c>int32u[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xb02c = 45100'>0xb02c</td> <td>PreviewImageSize</td> <td class=c>int32u[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0xb040 = 45120'>0xb040</td> <td>Macro</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On <br>2 = Close Focus <br>65535 = n/a</span></td></tr> <tr class=b> <td title='0xb041 = 45121'>0xb041</td> <td>ExposureMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Program AE <br>1 = Portrait <br>2 = Beach <br>3 = Sports <br>4 = Snow <br>5 = Landscape <br>6 = Auto <br>7 = Aperture-priority AE <br>8 = Shutter speed priority AE <br>9 = Night Scene / Twilight <br>10 = Hi-Speed Shutter <br>11 = Twilight Portrait <br>12 = Soft Snap/Portrait <br>13 = Fireworks <br>14 = Smile Shutter <br>15 = Manual</td><td>&nbsp;&nbsp;</td> <td>18 = High Sensitivity <br>19 = Macro <br>20 = Advanced Sports Shooting <br>29 = Underwater <br>33 = Food <br>34 = Sweep Panorama <br>35 = Handheld Night Shot <br>36 = Anti Motion Blur <br>37 = Pet <br>38 = Backlight Correction HDR <br>39 = Superior Auto <br>40 = Background Defocus <br>41 = Soft Skin <br>42 = 3D Image <br>65535 = n/a</td></tr></table> </td></tr> <tr> <td title='0xb042 = 45122'>0xb042</td> <td>FocusMode</td> <td class=c>int16u</td> <td><span class=s><span class=n>(not valid for all models)</span> <br>1 = AF-S <br>2 = AF-C <br>4 = Permanent-AF <br>65535 = n/a</span></td></tr> <tr class=b> <td title='0xb043 = 45123'>0xb043</td> <td>AFAreaMode</td> <td class=c>int16u</td> <td><span class=s><span class=n>(older models)</span></span><table class=cols><tr> <td>0 = Default <br>1 = Multi <br>2 = Center <br>3 = Spot <br>4 = Flexible Spot</td><td>&nbsp;&nbsp;</td> <td>6 = Touch <br>14 = Tracking <br>15 = Face Tracking <br>65535 = n/a</td></tr></table> <span class=s><span class=n>(DSC-HX9V generation cameras)</span></span><table class=cols><tr> <td>0 = Multi <br>1 = Center <br>2 = Spot <br>3 = Flexible Spot <br>10 = Selective (for Miniature effect) <br>14 = Tracking <br>15 = Face Tracking <br>255 = Manual</td></tr></table> </td></tr> <tr> <td title='0xb044 = 45124'>0xb044</td> <td>AFIlluminator</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = Auto <br>65535 = n/a</span></td></tr> <tr class=b> <td title='0xb047 = 45127'>0xb047</td> <td>JPEGQuality</td> <td class=c>int16u</td> <td><span class=s>0 = Standard <br>1 = Fine <br>2 = Extra Fine <br>65535 = n/a</span></td></tr> <tr> <td title='0xb048 = 45128'>0xb048</td> <td>FlashLevel</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Low <br>-9 = -9/3 <br>-6 = -6/3 <br>-5 = -5/3 <br>-4 = -4/3 <br>-3 = -3/3</td><td>&nbsp;&nbsp;</td> <td>-2 = -2/3 <br>-1 = -1/3 <br>0 = Normal <br>1 = +1/3 <br>2 = +2/3 <br>3 = +3/3</td><td>&nbsp;&nbsp;</td> <td>4 = +4/3 <br>5 = +5/3 <br>6 = +6/3 <br>128 = n/a <br>32767 = High</td></tr></table> </td></tr> <tr class=b> <td title='0xb049 = 45129'>0xb049</td> <td>ReleaseMode</td> <td class=c>int16u</td> <td><span class=s>0 = Normal <br>2 = Continuous <br>5 = Exposure Bracketing <br>6 = White Balance Bracketing <br>65535 = n/a</span></td></tr> <tr> <td title='0xb04a = 45130'>0xb04a</td> <td>SequenceNumber</td> <td class=c>int16u</td> <td><span class=s><span class=n>(shot number in continuous burst)</span> <br>0 = Single <br>65535 = n/a</span></td></tr> <tr class=b> <td title='0xb04b = 45131'>0xb04b</td> <td>Anti-Blur</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On (Continuous) <br>2 = On (Shooting) <br>65535 = n/a</span></td></tr> <tr> <td title='0xb04e = 45134'>0xb04e</td> <td>FocusMode</td> <td class=c>int16u</td> <td><span class=s><span class=n>(valid for DSC-HX9V generation and newer)</span> <br>0 = Manual <br>2 = AF-S <br>3 = AF-C <br>5 = Semi-manual <br>6 = DMF</span></td></tr> <tr class=b> <td title='0xb04f = 45135'>0xb04f</td> <td>DynamicRangeOptimizer</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = Standard <br>2 = Plus</span></td></tr> <tr> <td title='0xb050 = 45136'>0xb050</td> <td>HighISONoiseReduction2</td> <td class=c>int16u</td> <td><span class=s><span class=n>(DSC models only)</span> <br>0 = Normal <br>1 = High <br>2 = Low <br>3 = Off <br>65535 = n/a</span></td></tr> <tr class=b> <td title='0xb052 = 45138'>0xb052</td> <td>IntelligentAuto</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On <br>2 = Advanced</span></td></tr> <tr> <td title='0xb054 = 45140'>0xb054</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td><span class=s><span class=n>(decoding of the Fluorescent settings matches the EXIF standard, which is different than the names used by Sony for some models)</span></span><table class=cols><tr> <td>0 = Auto <br>4 = Custom <br>5 = Daylight <br>6 = Cloudy <br>7 = Cool White Fluorescent <br>8 = Day White Fluorescent <br>9 = Daylight Fluorescent <br>10 = Incandescent2 <br>11 = Warm White Fluorescent <br>14 = Incandescent <br>15 = Flash <br>17 = Underwater 1 (Blue Water) <br>18 = Underwater 2 (Green Water) <br>19 = Underwater Auto</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='LensType'>Sony LensType Values</a></h2> <p>Decimal values have been added to differentiate lenses which would otherwise have the same LensType, and are used by the Composite LensID tag when attempting to identify the specific lens model. &quot;New&quot; or &quot;II&quot; appear in brackets if the original version of the lens has the same LensType. Special logic is employed to identify the attached lens when a Metabones Canon EF adapter is used.</p> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>LensType</th></tr> <tr><td>0</td><td>= Minolta AF 28-85mm F3.5-4.5 New</td> </tr><tr><td>1</td><td>= Minolta AF 80-200mm F2.8 HS-APO G</td> </tr><tr><td>2</td><td>= Minolta AF 28-70mm F2.8 G</td> </tr><tr><td>3</td><td>= Minolta AF 28-80mm F4-5.6</td> </tr><tr><td>4</td><td>= Minolta AF 85mm F1.4G</td> </tr><tr><td>5</td><td>= Minolta AF 35-70mm F3.5-4.5 [II]</td> </tr><tr><td>6</td><td>= Minolta AF 24-85mm F3.5-4.5 [New]</td> </tr><tr><td>7</td><td>= Minolta AF 100-300mm F4.5-5.6 APO [New] or 100-400mm or Sigma Lens</td> </tr><tr><td>7.1</td><td>= Minolta AF 100-400mm F4.5-6.7 APO</td> </tr><tr><td>7.2</td><td>= Sigma AF 100-300mm F4 EX DG IF</td> </tr><tr><td>8</td><td>= Minolta AF 70-210mm F4.5-5.6 [II]</td> </tr><tr><td>9</td><td>= Minolta AF 50mm F3.5 Macro</td> </tr><tr><td>10</td><td>= Minolta AF 28-105mm F3.5-4.5 [New]</td> </tr><tr><td>11</td><td>= Minolta AF 300mm F4 HS-APO G</td> </tr><tr><td>12</td><td>= Minolta AF 100mm F2.8 Soft Focus</td> </tr><tr><td>13</td><td>= Minolta AF 75-300mm F4.5-5.6 (New or II)</td> </tr><tr><td>14</td><td>= Minolta AF 100-400mm F4.5-6.7 APO</td> </tr><tr><td>15</td><td>= Minolta AF 400mm F4.5 HS-APO G</td> </tr><tr><td>16</td><td>= Minolta AF 17-35mm F3.5 G</td> </tr><tr><td>17</td><td>= Minolta AF 20-35mm F3.5-4.5</td> </tr><tr><td>18</td><td>= Minolta AF 28-80mm F3.5-5.6 II</td> </tr><tr><td>19</td><td>= Minolta AF 35mm F1.4 G</td> </tr><tr><td>20</td><td>= Minolta/Sony 135mm F2.8 [T4.5] STF</td> </tr><tr><td>22</td><td>= Minolta AF 35-80mm F4-5.6 II</td> </tr><tr><td>23</td><td>= Minolta AF 200mm F4 Macro APO G</td> </tr><tr><td>24</td><td>= Minolta/Sony AF 24-105mm F3.5-4.5 (D) or Sigma or Tamron Lens</td> </tr><tr><td>24.1</td><td>= Sigma 18-50mm F2.8</td> </tr><tr><td>24.2</td><td>= Sigma 17-70mm F2.8-4.5 (D)</td> </tr><tr><td>24.3</td><td>= Sigma 20-40mm F2.8 EX DG Aspherical IF</td> </tr><tr><td>24.4</td><td>= Sigma 18-200mm F3.5-6.3 DC</td> </tr><tr><td>24.5</td><td>= Sigma DC 18-125mm F4-5,6 D</td> </tr><tr><td>24.6</td><td>= Tamron SP AF 28-75mm F2.8 XR Di LD Aspherical [IF] Macro</td> </tr><tr><td>25</td><td>= Minolta AF 100-300mm F4.5-5.6 APO (D) or Sigma Lens</td> </tr><tr><td>25.1</td><td>= Sigma 100-300mm F4 EX (APO (D) or D IF)</td> </tr><tr><td>25.2</td><td>= Sigma 70mm F2.8 EX DG Macro</td> </tr><tr><td>25.3</td><td>= Sigma 20mm F1.8 EX DG Aspherical RF</td> </tr><tr><td>25.4</td><td>= Sigma 30mm F1.4 EX DC</td> </tr><tr><td>25.5</td><td>= Sigma 24mm F1.8 EX DG ASP Macro</td> </tr><tr><td>27</td><td>= Minolta AF 85mm F1.4 G (D)</td> </tr><tr><td>28</td><td>= Minolta/Sony AF 100mm F2.8 Macro (D) or Tamron Lens</td> </tr><tr><td>28.1</td><td>= Tamron SP AF 90mm F2.8 Di Macro</td> </tr><tr><td>28.2</td><td>= Tamron SP AF 180mm F3.5 Di LD [IF] Macro</td> </tr><tr><td>29</td><td>= Minolta/Sony AF 75-300mm F4.5-5.6 (D)</td> </tr><tr><td>30</td><td>= Minolta AF 28-80mm F3.5-5.6 (D) or Sigma Lens</td> </tr><tr><td>30.1</td><td>= Sigma AF 10-20mm F4-5.6 EX DC</td> </tr><tr><td>30.2</td><td>= Sigma AF 12-24mm F4.5-5.6 EX DG</td> </tr><tr><td>30.3</td><td>= Sigma 28-70mm EX DG F2.8</td> </tr><tr><td>30.4</td><td>= Sigma 55-200mm F4-5.6 DC</td> </tr><tr><td>31</td><td>= Minolta/Sony AF 50mm F2.8 Macro (D) or F3.5</td> </tr><tr><td>31.1</td><td>= Minolta/Sony AF 50mm F3.5 Macro</td> </tr><tr><td>32</td><td>= Minolta/Sony AF 300mm F2.8 G or 1.5x Teleconverter</td> </tr><tr><td>33</td><td>= Minolta/Sony AF 70-200mm F2.8 G</td> </tr><tr><td>35</td><td>= Minolta AF 85mm F1.4 G (D) Limited</td> </tr><tr><td>36</td><td>= Minolta AF 28-100mm F3.5-5.6 (D)</td> </tr><tr><td>38</td><td>= Minolta AF 17-35mm F2.8-4 (D)</td> </tr><tr><td>39</td><td>= Minolta AF 28-75mm F2.8 (D)</td> </tr><tr><td>40</td><td>= Minolta/Sony AF DT 18-70mm F3.5-5.6 (D)</td> </tr><tr><td>41</td><td>= Minolta/Sony AF DT 11-18mm F4.5-5.6 (D) or Tamron Lens</td> </tr><tr><td>41.1</td><td>= Tamron SP AF 11-18mm F4.5-5.6 Di II LD Aspherical IF</td> </tr><tr><td>42</td><td>= Minolta/Sony AF DT 18-200mm F3.5-6.3 (D)</td> </tr><tr><td>43</td><td>= Sony 35mm F1.4 G (SAL35F14G)</td> </tr><tr><td>44</td><td>= Sony 50mm F1.4 (SAL50F14)</td> </tr><tr><td>45</td><td>= Carl Zeiss Planar T* 85mm F1.4 ZA (SAL85F14Z)</td> </tr><tr><td>46</td><td>= Carl Zeiss Vario-Sonnar T* DT 16-80mm F3.5-4.5 ZA (SAL1680Z)</td> </tr><tr><td>47</td><td>= Carl Zeiss Sonnar T* 135mm F1.8 ZA (SAL135F18Z)</td> </tr><tr><td>48</td><td>= Carl Zeiss Vario-Sonnar T* 24-70mm F2.8 ZA SSM (SAL2470Z) or ZA SSM II</td> </tr><tr><td>48.1</td><td>= Carl Zeiss Vario-Sonnar T* 24-70mm F2.8 ZA SSM II (SAL2470Z2)</td> </tr><tr><td>49</td><td>= Sony DT 55-200mm F4-5.6 (SAL55200)</td> </tr><tr><td>50</td><td>= Sony DT 18-250mm F3.5-6.3 (SAL18250)</td> </tr><tr><td>51</td><td>= Sony DT 16-105mm F3.5-5.6 (SAL16105)</td> </tr><tr><td>52</td><td>= Sony 70-300mm F4.5-5.6 G SSM (SAL70300G) or G SSM II or Tamron Lens</td> </tr><tr><td>52.1</td><td>= Sony 70-300mm F4.5-5.6 G SSM II (SAL70300G2)</td> </tr><tr><td>52.2</td><td>= Tamron SP 70-300mm F4-5.6 Di USD</td> </tr><tr><td>53</td><td>= Sony 70-400mm F4-5.6 G SSM (SAL70400G)</td> </tr><tr><td>54</td><td>= Carl Zeiss Vario-Sonnar T* 16-35mm F2.8 ZA SSM (SAL1635Z) or ZA SSM II</td> </tr><tr><td>54.1</td><td>= Carl Zeiss Vario-Sonnar T* 16-35mm F2.8 ZA SSM II (SAL1635Z2)</td> </tr><tr><td>55</td><td>= Sony DT 18-55mm F3.5-5.6 SAM (SAL1855) or SAM II</td> </tr><tr><td>55.1</td><td>= Sony DT 18-55mm F3.5-5.6 SAM II (SAL18552)</td> </tr><tr><td>56</td><td>= Sony DT 55-200mm F4-5.6 SAM (SAL55200-2)</td> </tr><tr><td>57</td><td>= Sony DT 50mm F1.8 SAM (SAL50F18) or Tamron Lens or Commlite CM-EF-NEX adapter</td> </tr><tr><td>57.1</td><td>= Tamron SP AF 60mm F2 Di II LD [IF] Macro 1:1</td> </tr><tr><td>57.2</td><td>= Tamron 18-270mm F3.5-6.3 Di II PZD</td> </tr><tr><td>58</td><td>= Sony DT 30mm F2.8 Macro SAM (SAL30M28)</td> </tr><tr><td>59</td><td>= Sony 28-75mm F2.8 SAM (SAL2875)</td> </tr><tr><td>60</td><td>= Carl Zeiss Distagon T* 24mm F2 ZA SSM (SAL24F20Z)</td> </tr><tr><td>61</td><td>= Sony 85mm F2.8 SAM (SAL85F28)</td> </tr><tr><td>62</td><td>= Sony DT 35mm F1.8 SAM (SAL35F18)</td> </tr><tr><td>63</td><td>= Sony DT 16-50mm F2.8 SSM (SAL1650)</td> </tr><tr><td>64</td><td>= Sony 500mm F4 G SSM (SAL500F40G)</td> </tr><tr><td>65</td><td>= Sony DT 18-135mm F3.5-5.6 SAM (SAL18135)</td> </tr><tr><td>66</td><td>= Sony 300mm F2.8 G SSM II (SAL300F28G2)</td> </tr><tr><td>67</td><td>= Sony 70-200mm F2.8 G SSM II (SAL70200G2)</td> </tr><tr><td>68</td><td>= Sony DT 55-300mm F4.5-5.6 SAM (SAL55300)</td> </tr><tr><td>69</td><td>= Sony 70-400mm F4-5.6 G SSM II (SAL70400G2)</td> </tr><tr><td>70</td><td>= Carl Zeiss Planar T* 50mm F1.4 ZA SSM (SAL50F14Z)</td> </tr><tr><td>128</td><td>= Tamron or Sigma Lens (128)</td> </tr><tr><td>128.1</td><td>= Tamron AF 18-200mm F3.5-6.3 XR Di II LD Aspherical [IF] Macro</td> </tr><tr><td>128.2</td><td>= Tamron AF 28-300mm F3.5-6.3 XR Di LD Aspherical [IF] Macro</td> </tr><tr><td>128.3</td><td>= Tamron 80-300mm F3.5-6.3</td> </tr><tr><td>128.4</td><td>= Tamron AF 28-200mm F3.8-5.6 XR Di Aspherical [IF] Macro</td> </tr><tr><td>128.5</td><td>= Tamron SP AF 17-35mm F2.8-4 Di LD Aspherical IF</td> </tr><tr><td>128.6</td><td>= Sigma AF 50-150mm F2.8 EX DC APO HSM II</td> </tr><tr><td>128.7</td><td>= Sigma 10-20mm F3.5 EX DC HSM</td> </tr><tr><td>128.8</td><td>= Sigma 70-200mm F2.8 II EX DG APO MACRO HSM</td> </tr><tr><td>128.9</td><td>= Sigma 10mm F2.8 EX DC HSM Fisheye</td> </tr><tr><td>128.10</td><td>= Sigma 50mm F1.4 EX DG HSM</td> </tr><tr><td>128.11</td><td>= Sigma 85mm F1.4 EX DG HSM</td> </tr><tr><td>128.12</td><td>= Sigma 24-70mm F2.8 IF EX DG HSM</td> </tr><tr><td>128.13</td><td>= Sigma 18-250mm F3.5-6.3 DC OS HSM</td> </tr><tr><td>128.14</td><td>= Sigma 17-50mm F2.8 EX DC HSM</td> </tr><tr><td>128.15</td><td>= Sigma 17-70mm F2.8-4 DC Macro HSM</td> </tr><tr><td>128.16</td><td>= Sigma 150mm F2.8 EX DG OS HSM APO Macro</td> </tr><tr><td>128.17</td><td>= Sigma 150-500mm F5-6.3 APO DG OS HSM</td> </tr><tr><td>128.18</td><td>= Tamron AF 28-105mm F4-5.6 [IF]</td> </tr><tr><td>128.19</td><td>= Sigma 35mm F1.4 DG HSM</td> </tr><tr><td>128.20</td><td>= Sigma 18-35mm F1.8 DC HSM</td> </tr><tr><td>129</td><td>= Tamron Lens (129)</td> </tr><tr><td>129.1</td><td>= Tamron 200-400mm F5.6 LD</td> </tr><tr><td>129.2</td><td>= Tamron 70-300mm F4-5.6 LD</td> </tr><tr><td>131</td><td>= Tamron 20-40mm F2.7-3.5 SP Aspherical IF</td> </tr><tr><td>135</td><td>= Vivitar 28-210mm F3.5-5.6</td> </tr><tr><td>136</td><td>= Tokina EMZ M100 AF 100mm F3.5</td> </tr><tr><td>137</td><td>= Cosina 70-210mm F2.8-4 AF</td> </tr><tr><td>138</td><td>= Soligor 19-35mm F3.5-4.5</td> </tr><tr><td>139</td><td>= Tokina AF 28-300mm F4-6.3</td> </tr><tr><td>142</td><td>= Voigtlander 70-300mm F4.5-5.6</td> </tr><tr><td>146</td><td>= Voigtlander Macro APO-Lanthar 125mm F2.5 SL</td> </tr><tr><td>194</td><td>= Tamron SP AF 17-50mm F2.8 XR Di II LD Aspherical [IF]</td> </tr><tr><td>203</td><td>= Tamron SP 70-200mm F2.8 Di USD</td> </tr><tr><td>204</td><td>= Tamron SP 24-70mm F2.8 Di USD</td> </tr><tr><td>213</td><td>= Tamron 16-300mm F3.5-6.3 Di II PZD</td> </tr><tr><td>214</td><td>= Tamron SP 150-600mm F5-6.3 Di USD</td> </tr><tr><td>224</td><td>= Tamron SP 90mm F2.8 Di Macro 1:1 USD</td> </tr><tr><td>255</td><td>= Tamron Lens (255)</td> </tr><tr><td>255.1</td><td>= Tamron SP AF 17-50mm F2.8 XR Di II LD Aspherical</td> </tr><tr><td>255.2</td><td>= Tamron AF 18-250mm F3.5-6.3 XR Di II LD</td> </tr><tr><td>255.3</td><td>= Tamron AF 55-200mm F4-5.6 Di II LD Macro</td> </tr><tr><td>255.4</td><td>= Tamron AF 70-300mm F4-5.6 Di LD Macro 1:2</td> </tr><tr><td>255.5</td><td>= Tamron SP AF 200-500mm F5.0-6.3 Di LD IF</td> </tr><tr><td>255.6</td><td>= Tamron SP AF 10-24mm F3.5-4.5 Di II LD Aspherical IF</td> </tr><tr><td>255.7</td><td>= Tamron SP AF 70-200mm F2.8 Di LD IF Macro</td> </tr><tr><td>255.8</td><td>= Tamron SP AF 28-75mm F2.8 XR Di LD Aspherical IF</td> </tr><tr><td>255.9</td><td>= Tamron AF 90-300mm F4.5-5.6 Telemacro</td> </tr><tr><td>2550</td><td>= Minolta AF 50mm F1.7</td> </tr><tr><td>2551</td><td>= Minolta AF 35-70mm F4 or Other Lens</td> </tr><tr><td>2551.1</td><td>= Sigma UC AF 28-70mm F3.5-4.5</td> </tr><tr><td>2551.2</td><td>= Sigma AF 28-70mm F2.8</td> </tr><tr><td>2551.3</td><td>= Sigma M-AF 70-200mm F2.8 EX Aspherical</td> </tr><tr><td>2551.4</td><td>= Quantaray M-AF 35-80mm F4-5.6</td> </tr><tr><td>2551.5</td><td>= Tokina 28-70mm F2.8-4.5 AF</td> </tr><tr><td>2552</td><td>= Minolta AF 28-85mm F3.5-4.5 or Other Lens</td> </tr><tr><td>2552.1</td><td>= Tokina 19-35mm F3.5-4.5</td> </tr><tr><td>2552.2</td><td>= Tokina 28-70mm F2.8 AT-X</td> </tr><tr><td>2552.3</td><td>= Tokina 80-400mm F4.5-5.6 AT-X AF II 840</td> </tr><tr><td>2552.4</td><td>= Tokina AF PRO 28-80mm F2.8 AT-X 280</td> </tr><tr><td>2552.5</td><td>= Tokina AT-X PRO [II] AF 28-70mm F2.6-2.8 270</td> </tr><tr><td>2552.6</td><td>= Tamron AF 19-35mm F3.5-4.5</td> </tr><tr><td>2552.7</td><td>= Angenieux AF 28-70mm F2.6</td> </tr><tr><td>2552.8</td><td>= Tokina AT-X 17 AF 17mm F3.5</td> </tr><tr><td>2552.9</td><td>= Tokina 20-35mm F3.5-4.5 II AF</td> </tr><tr><td>2553</td><td>= Minolta AF 28-135mm F4-4.5 or Sigma Lens</td> </tr><tr><td>2553.1</td><td>= Sigma ZOOM-alpha 35-135mm F3.5-4.5</td> </tr><tr><td>2553.2</td><td>= Sigma 28-105mm F2.8-4 Aspherical</td> </tr><tr><td>2553.3</td><td>= Sigma 28-105mm F4-5.6 UC</td> </tr><tr><td>2554</td><td>= Minolta AF 35-105mm F3.5-4.5</td> </tr><tr><td>2555</td><td>= Minolta AF 70-210mm F4 Macro or Sigma Lens</td> </tr><tr><td>2555.1</td><td>= Sigma 70-210mm F4-5.6 APO</td> </tr><tr><td>2555.2</td><td>= Sigma M-AF 70-200mm F2.8 EX APO</td> </tr><tr><td>2555.3</td><td>= Sigma 75-200mm F2.8-3.5</td> </tr><tr><td>2556</td><td>= Minolta AF 135mm F2.8</td> </tr><tr><td>2557</td><td>= Minolta/Sony AF 28mm F2.8</td> </tr><tr><td>2558</td><td>= Minolta AF 24-50mm F4</td> </tr><tr><td>2560</td><td>= Minolta AF 100-200mm F4.5</td> </tr><tr><td>2561</td><td>= Minolta AF 75-300mm F4.5-5.6 or Sigma Lens</td> </tr><tr><td>2561.1</td><td>= Sigma 70-300mm F4-5.6 DL Macro</td> </tr><tr><td>2561.2</td><td>= Sigma 300mm F4 APO Macro</td> </tr><tr><td>2561.3</td><td>= Sigma AF 500mm F4.5 APO</td> </tr><tr><td>2561.4</td><td>= Sigma AF 170-500mm F5-6.3 APO Aspherical</td> </tr><tr><td>2561.5</td><td>= Tokina AT-X AF 300mm F4</td> </tr><tr><td>2561.6</td><td>= Tokina AT-X AF 400mm F5.6 SD</td> </tr><tr><td>2561.7</td><td>= Tokina AF 730 II 75-300mm F4.5-5.6</td> </tr><tr><td>2561.8</td><td>= Sigma 800mm F5.6 APO</td> </tr><tr><td>2561.9</td><td>= Sigma AF 400mm F5.6 APO Macro</td> </tr><tr><td>2562</td><td>= Minolta AF 50mm F1.4 [New]</td> </tr><tr><td>2563</td><td>= Minolta AF 300mm F2.8 APO or Sigma Lens</td> </tr><tr><td>2563.1</td><td>= Sigma AF 50-500mm F4-6.3 EX DG APO</td> </tr><tr><td>2563.2</td><td>= Sigma AF 170-500mm F5-6.3 APO Aspherical</td> </tr><tr><td>2563.3</td><td>= Sigma AF 500mm F4.5 EX DG APO</td> </tr><tr><td>2563.4</td><td>= Sigma 400mm F5.6 APO</td> </tr><tr><td>2564</td><td>= Minolta AF 50mm F2.8 Macro or Sigma Lens</td> </tr><tr><td>2564.1</td><td>= Sigma 50mm F2.8 EX Macro</td> </tr><tr><td>2565</td><td>= Minolta AF 600mm F4</td> </tr><tr><td>2566</td><td>= Minolta AF 24mm F2.8 or Sigma Lens</td> </tr><tr><td>2566.1</td><td>= Sigma 17-35mm F2.8-4 EX Aspherical</td> </tr><tr><td>2572</td><td>= Minolta/Sony AF 500mm F8 Reflex</td> </tr><tr><td>2578</td><td>= Minolta/Sony AF 16mm F2.8 Fisheye or Sigma Lens</td> </tr><tr><td>2578.1</td><td>= Sigma 8mm F4 EX [DG] Fisheye</td> </tr><tr><td>2578.2</td><td>= Sigma 14mm F3.5</td> </tr><tr><td>2578.3</td><td>= Sigma 15mm F2.8 Fisheye</td> </tr><tr><td>2579</td><td>= Minolta/Sony AF 20mm F2.8 or Tokina Lens</td> </tr><tr><td>2579.1</td><td>= Tokina AT-X Pro DX 11-16mm F2.8</td> </tr><tr><td>2581</td><td>= Minolta AF 100mm F2.8 Macro [New] or Sigma or Tamron Lens</td> </tr><tr><td>2581.1</td><td>= Sigma AF 90mm F2.8 Macro</td> </tr><tr><td>2581.2</td><td>= Sigma AF 105mm F2.8 EX [DG] Macro</td> </tr><tr><td>2581.3</td><td>= Sigma 180mm F5.6 Macro</td> </tr><tr><td>2581.4</td><td>= Sigma 180mm F3.5 EX DG Macro</td> </tr><tr><td>2581.5</td><td>= Tamron 90mm F2.8 Macro</td> </tr><tr><td>2585</td><td>= Minolta AF 35-105mm F3.5-4.5 New or Tamron Lens</td> </tr><tr><td>2585.1</td><td>= Beroflex 35-135mm F3.5-4.5</td> </tr><tr><td>2585.2</td><td>= Tamron 24-135mm F3.5-5.6</td> </tr><tr><td>2588</td><td>= Minolta AF 70-210mm F3.5-4.5</td> </tr><tr><td>2589</td><td>= Minolta AF 80-200mm F2.8 APO or Tokina Lens</td> </tr><tr><td>2589.1</td><td>= Tokina 80-200mm F2.8</td> </tr><tr><td>2590</td><td>= Minolta AF 200mm F2.8 G APO + Minolta AF 1.4x APO or Other Lens + 1.4x</td> </tr><tr><td>2590.1</td><td>= Minolta AF 600mm F4 HS-APO G + Minolta AF 1.4x APO</td> </tr><tr><td>2591</td><td>= Minolta AF 35mm F1.4</td> </tr><tr><td>2592</td><td>= Minolta AF 85mm F1.4 G (D)</td> </tr><tr><td>2593</td><td>= Minolta AF 200mm F2.8 G APO</td> </tr><tr><td>2594</td><td>= Minolta AF 3x-1x F1.7-2.8 Macro</td> </tr><tr><td>2596</td><td>= Minolta AF 28mm F2</td> </tr><tr><td>2597</td><td>= Minolta AF 35mm F2 [New]</td> </tr><tr><td>2598</td><td>= Minolta AF 100mm F2</td> </tr><tr><td>2601</td><td>= Minolta AF 200mm F2.8 G APO + Minolta AF 2x APO or Other Lens + 2x</td> </tr><tr><td>2601.1</td><td>= Minolta AF 600mm F4 HS-APO G + Minolta AF 2x APO</td> </tr><tr><td>2604</td><td>= Minolta AF 80-200mm F4.5-5.6</td> </tr><tr><td>2605</td><td>= Minolta AF 35-80mm F4-5.6</td> </tr><tr><td>2606</td><td>= Minolta AF 100-300mm F4.5-5.6</td> </tr><tr><td>2607</td><td>= Minolta AF 35-80mm F4-5.6</td> </tr><tr><td>2608</td><td>= Minolta AF 300mm F2.8 HS-APO G</td> </tr><tr><td>2609</td><td>= Minolta AF 600mm F4 HS-APO G</td> </tr><tr><td>2612</td><td>= Minolta AF 200mm F2.8 HS-APO G</td> </tr><tr><td>2613</td><td>= Minolta AF 50mm F1.7 New</td> </tr><tr><td>2615</td><td>= Minolta AF 28-105mm F3.5-4.5 xi</td> </tr><tr><td>2616</td><td>= Minolta AF 35-200mm F4.5-5.6 xi</td> </tr><tr><td>2618</td><td>= Minolta AF 28-80mm F4-5.6 xi</td> </tr><tr><td>2619</td><td>= Minolta AF 80-200mm F4.5-5.6 xi</td> </tr><tr><td>2620</td><td>= Minolta AF 28-70mm F2.8 G</td> </tr><tr><td>2621</td><td>= Minolta AF 100-300mm F4.5-5.6 xi</td> </tr><tr><td>2624</td><td>= Minolta AF 35-80mm F4-5.6 Power Zoom</td> </tr><tr><td>2628</td><td>= Minolta AF 80-200mm F2.8 G</td> </tr><tr><td>2629</td><td>= Minolta AF 85mm F1.4 New</td> </tr><tr><td>2631</td><td>= Minolta/Sony AF 100-300mm F4.5-5.6 APO</td> </tr><tr><td>2632</td><td>= Minolta AF 24-50mm F4 New</td> </tr><tr><td>2638</td><td>= Minolta AF 50mm F2.8 Macro New</td> </tr><tr><td>2639</td><td>= Minolta AF 100mm F2.8 Macro</td> </tr><tr><td>2641</td><td>= Minolta/Sony AF 20mm F2.8 New</td> </tr><tr><td>2642</td><td>= Minolta AF 24mm F2.8 New</td> </tr><tr><td>2644</td><td>= Minolta AF 100-400mm F4.5-6.7 APO</td> </tr><tr><td>2662</td><td>= Minolta AF 50mm F1.4 New</td> </tr><tr><td>2667</td><td>= Minolta AF 35mm F2 New</td> </tr><tr><td>2668</td><td>= Minolta AF 28mm F2 New</td> </tr><tr><td>2672</td><td>= Minolta AF 24-105mm F3.5-4.5 (D)</td> </tr><tr><td>3046</td><td>= Metabones Canon EF Speed Booster</td> </tr><tr><td>4567</td><td>= Tokina 70-210mm F4-5.6</td> </tr><tr><td>4571</td><td>= Vivitar 70-210mm F4.5-5.6</td> </tr><tr><td>4574</td><td>= 2x Teleconverter or Tamron or Tokina Lens</td> </tr><tr><td>4574.1</td><td>= Tamron SP AF 90mm F2.5</td> </tr><tr><td>4574.2</td><td>= Tokina RF 500mm F8.0 x2</td> </tr><tr><td>4574.3</td><td>= Tokina 300mm F2.8 x2</td> </tr><tr><td>4575</td><td>= 1.4x Teleconverter</td> </tr><tr><td>4585</td><td>= Tamron SP AF 300mm F2.8 LD IF</td> </tr><tr><td>4586</td><td>= Tamron SP AF 35-105mm F2.8 LD Aspherical IF</td> </tr><tr><td>4587</td><td>= Tamron AF 70-210mm F2.8 SP LD</td> </tr><tr><td>4812</td><td>= Metabones Canon EF Speed Booster Ultra</td> </tr><tr><td>6118</td><td>= Metabones Canon EF Adapter or Other Adapter</td> </tr><tr><td>6553</td><td>= E-Mount, T-Mount, Other Lens or no lens</td> </tr><tr><td>6553.1</td><td>= Sony E 16mm F2.8</td> </tr><tr><td>6553.2</td><td>= Sony E 18-55mm F3.5-5.6 OSS</td> </tr><tr><td>6553.3</td><td>= Sony E 55-210mm F4.5-6.3 OSS</td> </tr><tr><td>6553.4</td><td>= Sony E 18-200mm F3.5-6.3 OSS</td> </tr><tr><td>6553.5</td><td>= Sony E 30mm F3.5 Macro</td> </tr><tr><td>6553.6</td><td>= Sony E 24mm F1.8 ZA</td> </tr><tr><td>6553.7</td><td>= Sony E 50mm F1.8 OSS</td> </tr><tr><td>6553.8</td><td>= Sony E 16-70mm F4 ZA OSS</td> </tr><tr><td>6553.9</td><td>= Sony E 10-18mm F4 OSS</td> </tr><tr><td>6553.10</td><td>= Sony E PZ 16-50mm F3.5-5.6 OSS</td> </tr><tr><td>6553.11</td><td>= Sony FE 35mm F2.8 ZA</td> </tr><tr><td>6553.12</td><td>= Sony FE 24-70mm F4 ZA OSS</td> </tr><tr><td>6553.13</td><td>= Sony E 18-200mm F3.5-6.3 OSS LE</td> </tr><tr><td>6553.14</td><td>= Sony E 20mm F2.8</td> </tr><tr><td>6553.15</td><td>= Sony E 35mm F1.8 OSS</td> </tr><tr><td>6553.16</td><td>= Sony E PZ 18-105mm F4 G OSS</td> </tr><tr><td>6553.17</td><td>= Sony FE 90mm F2.8 Macro G OSS</td> </tr><tr><td>6553.18</td><td>= Sony E 18-50mm F4-5.6</td> </tr><tr><td>6553.19</td><td>= Sony E PZ 18-200mm F3.5-6.3 OSS</td> </tr><tr><td>6553.20</td><td>= Sony FE 55mm F1.8 ZA</td> </tr><tr><td>6553.21</td><td>= Sony FE 70-200mm F4 G OSS</td> </tr><tr><td>6553.22</td><td>= Sony FE 16-35mm F4 ZA OSS</td> </tr><tr><td>6553.23</td><td>= Sony FE 28-70mm F3.5-5.6 OSS</td> </tr><tr><td>6553.24</td><td>= Sony FE 35mm F1.4 ZA</td> </tr><tr><td>6553.25</td><td>= Sony FE 24-240mm F3.5-6.3 OSS</td> </tr><tr><td>6553.26</td><td>= Sony FE 28mm F2</td> </tr><tr><td>6553.27</td><td>= Sony FE PZ 28-135mm F4 G OSS</td> </tr><tr><td>6553.28</td><td>= Sony FE 21mm F2.8 (SEL28F20 + SEL075UWC)</td> </tr><tr><td>6553.29</td><td>= Sony FE 16mm F3.5 Fisheye (SEL28F20 + SEL057FEC)</td> </tr><tr><td>6553.30</td><td>= Sigma 19mm F2.8 [EX] DN</td> </tr><tr><td>6553.31</td><td>= Sigma 30mm F2.8 [EX] DN</td> </tr><tr><td>6553.32</td><td>= Sigma 60mm F2.8 DN</td> </tr><tr><td>6553.33</td><td>= Tamron 18-200mm F3.5-6.3 Di III VC</td> </tr><tr><td>6553.34</td><td>= Zeiss Batis 25mm F2</td> </tr><tr><td>6553.35</td><td>= Zeiss Batis 85mm F1.8</td> </tr><tr><td>6553.36</td><td>= Zeiss Loxia 21mm F2.8</td> </tr><tr><td>6553.37</td><td>= Zeiss Loxia 35mm F2</td> </tr><tr><td>6553.38</td><td>= Zeiss Loxia 50mm F2</td> </tr><tr><td>6553.39</td><td>= Zeiss Touit 12mm F2.8</td> </tr><tr><td>6553.40</td><td>= Zeiss Touit 32mm F1.8</td> </tr><tr><td>6553.41</td><td>= Zeiss Touit 50mm F2.8 Macro</td> </tr><tr><td>6553.42</td><td>= Arax MC 35mm F2.8 Tilt+Shift</td> </tr><tr><td>6553.43</td><td>= Arax MC 80mm F2.8 Tilt+Shift</td> </tr><tr><td>6553.44</td><td>= Zenitar MF 16mm F2.8 Fisheye M42</td> </tr><tr><td>6553.45</td><td>= Samyang 500mm Mirror F8.0</td> </tr><tr><td>6553.46</td><td>= Pentacon Auto 135mm F2.8</td> </tr><tr><td>6553.47</td><td>= Pentacon Auto 29mm F2.8</td> </tr><tr><td>6553.48</td><td>= Helios 44-2 58mm F2.0</td> </tr><tr><td>25501</td><td>= Minolta AF 50mm F1.7</td> </tr><tr><td>25511</td><td>= Minolta AF 35-70mm F4 or Other Lens</td> </tr><tr><td>25511.1</td><td>= Sigma UC AF 28-70mm F3.5-4.5</td> </tr><tr><td>25511.2</td><td>= Sigma AF 28-70mm F2.8</td> </tr><tr><td>25511.3</td><td>= Sigma M-AF 70-200mm F2.8 EX Aspherical</td> </tr><tr><td>25511.4</td><td>= Quantaray M-AF 35-80mm F4-5.6</td> </tr><tr><td>25511.5</td><td>= Tokina 28-70mm F2.8-4.5 AF</td> </tr><tr><td>25521</td><td>= Minolta AF 28-85mm F3.5-4.5 or Other Lens</td> </tr><tr><td>25521.1</td><td>= Tokina 19-35mm F3.5-4.5</td> </tr><tr><td>25521.2</td><td>= Tokina 28-70mm F2.8 AT-X</td> </tr><tr><td>25521.3</td><td>= Tokina 80-400mm F4.5-5.6 AT-X AF II 840</td> </tr><tr><td>25521.4</td><td>= Tokina AF PRO 28-80mm F2.8 AT-X 280</td> </tr><tr><td>25521.5</td><td>= Tokina AT-X PRO [II] AF 28-70mm F2.6-2.8 270</td> </tr><tr><td>25521.6</td><td>= Tamron AF 19-35mm F3.5-4.5</td> </tr><tr><td>25521.7</td><td>= Angenieux AF 28-70mm F2.6</td> </tr><tr><td>25521.8</td><td>= Tokina AT-X 17 AF 17mm F3.5</td> </tr><tr><td>25521.9</td><td>= Tokina 20-35mm F3.5-4.5 II AF</td> </tr><tr><td>25531</td><td>= Minolta AF 28-135mm F4-4.5 or Sigma Lens</td> </tr><tr><td>25531.1</td><td>= Sigma ZOOM-alpha 35-135mm F3.5-4.5</td> </tr><tr><td>25531.2</td><td>= Sigma 28-105mm F2.8-4 Aspherical</td> </tr><tr><td>25531.3</td><td>= Sigma 28-105mm F4-5.6 UC</td> </tr><tr><td>25541</td><td>= Minolta AF 35-105mm F3.5-4.5</td> </tr><tr><td>25551</td><td>= Minolta AF 70-210mm F4 Macro or Sigma Lens</td> </tr><tr><td>25551.1</td><td>= Sigma 70-210mm F4-5.6 APO</td> </tr><tr><td>25551.2</td><td>= Sigma M-AF 70-200mm F2.8 EX APO</td> </tr><tr><td>25551.3</td><td>= Sigma 75-200mm F2.8-3.5</td> </tr><tr><td>25561</td><td>= Minolta AF 135mm F2.8</td> </tr><tr><td>25571</td><td>= Minolta/Sony AF 28mm F2.8</td> </tr><tr><td>25581</td><td>= Minolta AF 24-50mm F4</td> </tr><tr><td>25601</td><td>= Minolta AF 100-200mm F4.5</td> </tr><tr><td>25611</td><td>= Minolta AF 75-300mm F4.5-5.6 or Sigma Lens</td> </tr><tr><td>25611.1</td><td>= Sigma 70-300mm F4-5.6 DL Macro</td> </tr><tr><td>25611.2</td><td>= Sigma 300mm F4 APO Macro</td> </tr><tr><td>25611.3</td><td>= Sigma AF 500mm F4.5 APO</td> </tr><tr><td>25611.4</td><td>= Sigma AF 170-500mm F5-6.3 APO Aspherical</td> </tr><tr><td>25611.5</td><td>= Tokina AT-X AF 300mm F4</td> </tr><tr><td>25611.6</td><td>= Tokina AT-X AF 400mm F5.6 SD</td> </tr><tr><td>25611.7</td><td>= Tokina AF 730 II 75-300mm F4.5-5.6</td> </tr><tr><td>25611.8</td><td>= Sigma 800mm F5.6 APO</td> </tr><tr><td>25611.9</td><td>= Sigma AF 400mm F5.6 APO Macro</td> </tr><tr><td>25621</td><td>= Minolta AF 50mm F1.4 [New]</td> </tr><tr><td>25631</td><td>= Minolta AF 300mm F2.8 APO or Sigma Lens</td> </tr><tr><td>25631.1</td><td>= Sigma AF 50-500mm F4-6.3 EX DG APO</td> </tr><tr><td>25631.2</td><td>= Sigma AF 170-500mm F5-6.3 APO Aspherical</td> </tr><tr><td>25631.3</td><td>= Sigma AF 500mm F4.5 EX DG APO</td> </tr><tr><td>25631.4</td><td>= Sigma 400mm F5.6 APO</td> </tr><tr><td>25641</td><td>= Minolta AF 50mm F2.8 Macro or Sigma Lens</td> </tr><tr><td>25641.1</td><td>= Sigma 50mm F2.8 EX Macro</td> </tr><tr><td>25651</td><td>= Minolta AF 600mm F4</td> </tr><tr><td>25661</td><td>= Minolta AF 24mm F2.8 or Sigma Lens</td> </tr><tr><td>25661.1</td><td>= Sigma 17-35mm F2.8-4 EX Aspherical</td> </tr><tr><td>25721</td><td>= Minolta/Sony AF 500mm F8 Reflex</td> </tr><tr><td>25781</td><td>= Minolta/Sony AF 16mm F2.8 Fisheye or Sigma Lens</td> </tr><tr><td>25781.1</td><td>= Sigma 8mm F4 EX [DG] Fisheye</td> </tr><tr><td>25781.2</td><td>= Sigma 14mm F3.5</td> </tr><tr><td>25781.3</td><td>= Sigma 15mm F2.8 Fisheye</td> </tr><tr><td>25791</td><td>= Minolta/Sony AF 20mm F2.8 or Tokina Lens</td> </tr><tr><td>25791.1</td><td>= Tokina AT-X Pro DX 11-16mm F2.8</td> </tr><tr><td>25811</td><td>= Minolta AF 100mm F2.8 Macro [New] or Sigma or Tamron Lens</td> </tr><tr><td>25811.1</td><td>= Sigma AF 90mm F2.8 Macro</td> </tr><tr><td>25811.2</td><td>= Sigma AF 105mm F2.8 EX [DG] Macro</td> </tr><tr><td>25811.3</td><td>= Sigma 180mm F5.6 Macro</td> </tr><tr><td>25811.4</td><td>= Sigma 180mm F3.5 EX DG Macro</td> </tr><tr><td>25811.5</td><td>= Tamron 90mm F2.8 Macro</td> </tr><tr><td>25851</td><td>= Beroflex 35-135mm F3.5-4.5</td> </tr><tr><td>25858</td><td>= Minolta AF 35-105mm F3.5-4.5 New or Tamron Lens</td> </tr><tr><td>25858.1</td><td>= Tamron 24-135mm F3.5-5.6</td> </tr><tr><td>25881</td><td>= Minolta AF 70-210mm F3.5-4.5</td> </tr><tr><td>25891</td><td>= Minolta AF 80-200mm F2.8 APO or Tokina Lens</td> </tr><tr><td>25891.1</td><td>= Tokina 80-200mm F2.8</td> </tr><tr><td>25901</td><td>= Minolta AF 200mm F2.8 G APO + Minolta AF 1.4x APO or Other Lens + 1.4x</td> </tr><tr><td>25901.1</td><td>= Minolta AF 600mm F4 HS-APO G + Minolta AF 1.4x APO</td> </tr><tr><td>25911</td><td>= Minolta AF 35mm F1.4</td> </tr><tr><td>25921</td><td>= Minolta AF 85mm F1.4 G (D)</td> </tr><tr><td>25931</td><td>= Minolta AF 200mm F2.8 G APO</td> </tr><tr><td>25941</td><td>= Minolta AF 3x-1x F1.7-2.8 Macro</td> </tr><tr><td>25961</td><td>= Minolta AF 28mm F2</td> </tr><tr><td>25971</td><td>= Minolta AF 35mm F2 [New]</td> </tr><tr><td>25981</td><td>= Minolta AF 100mm F2</td> </tr><tr><td>26011</td><td>= Minolta AF 200mm F2.8 G APO + Minolta AF 2x APO or Other Lens + 2x</td> </tr><tr><td>26011.1</td><td>= Minolta AF 600mm F4 HS-APO G + Minolta AF 2x APO</td> </tr><tr><td>26041</td><td>= Minolta AF 80-200mm F4.5-5.6</td> </tr><tr><td>26051</td><td>= Minolta AF 35-80mm F4-5.6</td> </tr><tr><td>26061</td><td>= Minolta AF 100-300mm F4.5-5.6</td> </tr><tr><td>26071</td><td>= Minolta AF 35-80mm F4-5.6</td> </tr><tr><td>26081</td><td>= Minolta AF 300mm F2.8 HS-APO G</td> </tr><tr><td>26091</td><td>= Minolta AF 600mm F4 HS-APO G</td> </tr><tr><td>26121</td><td>= Minolta AF 200mm F2.8 HS-APO G</td> </tr><tr><td>26131</td><td>= Minolta AF 50mm F1.7 New</td> </tr><tr><td>26151</td><td>= Minolta AF 28-105mm F3.5-4.5 xi</td> </tr><tr><td>26161</td><td>= Minolta AF 35-200mm F4.5-5.6 xi</td> </tr><tr><td>26181</td><td>= Minolta AF 28-80mm F4-5.6 xi</td> </tr><tr><td>26191</td><td>= Minolta AF 80-200mm F4.5-5.6 xi</td> </tr><tr><td>26201</td><td>= Minolta AF 28-70mm F2.8 G</td> </tr><tr><td>26211</td><td>= Minolta AF 100-300mm F4.5-5.6 xi</td> </tr><tr><td>26241</td><td>= Minolta AF 35-80mm F4-5.6 Power Zoom</td> </tr><tr><td>26281</td><td>= Minolta AF 80-200mm F2.8 G</td> </tr><tr><td>26291</td><td>= Minolta AF 85mm F1.4 New</td> </tr><tr><td>26311</td><td>= Minolta/Sony AF 100-300mm F4.5-5.6 APO</td> </tr><tr><td>26321</td><td>= Minolta AF 24-50mm F4 New</td> </tr><tr><td>26381</td><td>= Minolta AF 50mm F2.8 Macro New</td> </tr><tr><td>26391</td><td>= Minolta AF 100mm F2.8 Macro</td> </tr><tr><td>26411</td><td>= Minolta/Sony AF 20mm F2.8 New</td> </tr><tr><td>26421</td><td>= Minolta AF 24mm F2.8 New</td> </tr><tr><td>26441</td><td>= Minolta AF 100-400mm F4.5-6.7 APO</td> </tr><tr><td>26621</td><td>= Minolta AF 50mm F1.4 New</td> </tr><tr><td>26671</td><td>= Minolta AF 35mm F2 New</td> </tr><tr><td>26681</td><td>= Minolta AF 28mm F2 New</td> </tr><tr><td>26721</td><td>= Minolta AF 24-105mm F3.5-4.5 (D)</td> </tr><tr><td>30464</td><td>= Metabones Canon EF Speed Booster</td> </tr><tr><td>45671</td><td>= Tokina 70-210mm F4-5.6</td> </tr><tr><td>45711</td><td>= Vivitar 70-210mm F4.5-5.6</td> </tr><tr><td>45741</td><td>= 2x Teleconverter or Tamron or Tokina Lens</td> </tr><tr><td>45741.1</td><td>= Tamron SP AF 90mm F2.5</td> </tr><tr><td>45741.2</td><td>= Tokina RF 500mm F8.0 x2</td> </tr><tr><td>45741.3</td><td>= Tokina 300mm F2.8 x2</td> </tr><tr><td>45751</td><td>= 1.4x Teleconverter</td> </tr><tr><td>45851</td><td>= Tamron SP AF 300mm F2.8 LD IF</td> </tr><tr><td>45861</td><td>= Tamron SP AF 35-105mm F2.8 LD Aspherical IF</td> </tr><tr><td>45871</td><td>= Tamron AF 70-210mm F2.8 SP LD</td> </tr><tr><td>48128</td><td>= Metabones Canon EF Speed Booster Ultra</td> </tr><tr><td>61184</td><td>= Metabones Canon EF Adapter or Other Adapter</td> </tr><tr><td>65535</td><td>= E-Mount, T-Mount, Other Lens or no lens</td> </tr><tr><td>65535.1</td><td>= Sony E 16mm F2.8</td> </tr><tr><td>65535.2</td><td>= Sony E 18-55mm F3.5-5.6 OSS</td> </tr><tr><td>65535.3</td><td>= Sony E 55-210mm F4.5-6.3 OSS</td> </tr><tr><td>65535.4</td><td>= Sony E 18-200mm F3.5-6.3 OSS</td> </tr><tr><td>65535.5</td><td>= Sony E 30mm F3.5 Macro</td> </tr><tr><td>65535.6</td><td>= Sony E 24mm F1.8 ZA</td> </tr><tr><td>65535.7</td><td>= Sony E 50mm F1.8 OSS</td> </tr><tr><td>65535.8</td><td>= Sony E 16-70mm F4 ZA OSS</td> </tr><tr><td>65535.9</td><td>= Sony E 10-18mm F4 OSS</td> </tr><tr><td>65535.10</td><td>= Sony E PZ 16-50mm F3.5-5.6 OSS</td> </tr><tr><td>65535.11</td><td>= Sony FE 35mm F2.8 ZA</td> </tr><tr><td>65535.12</td><td>= Sony FE 24-70mm F4 ZA OSS</td> </tr><tr><td>65535.13</td><td>= Sony E 18-200mm F3.5-6.3 OSS LE</td> </tr><tr><td>65535.14</td><td>= Sony E 20mm F2.8</td> </tr><tr><td>65535.15</td><td>= Sony E 35mm F1.8 OSS</td> </tr><tr><td>65535.16</td><td>= Sony E PZ 18-105mm F4 G OSS</td> </tr><tr><td>65535.17</td><td>= Sony FE 90mm F2.8 Macro G OSS</td> </tr><tr><td>65535.18</td><td>= Sony E 18-50mm F4-5.6</td> </tr><tr><td>65535.19</td><td>= Sony E PZ 18-200mm F3.5-6.3 OSS</td> </tr><tr><td>65535.20</td><td>= Sony FE 55mm F1.8 ZA</td> </tr><tr><td>65535.21</td><td>= Sony FE 70-200mm F4 G OSS</td> </tr><tr><td>65535.22</td><td>= Sony FE 16-35mm F4 ZA OSS</td> </tr><tr><td>65535.23</td><td>= Sony FE 28-70mm F3.5-5.6 OSS</td> </tr><tr><td>65535.24</td><td>= Sony FE 35mm F1.4 ZA</td> </tr><tr><td>65535.25</td><td>= Sony FE 24-240mm F3.5-6.3 OSS</td> </tr><tr><td>65535.26</td><td>= Sony FE 28mm F2</td> </tr><tr><td>65535.27</td><td>= Sony FE PZ 28-135mm F4 G OSS</td> </tr><tr><td>65535.28</td><td>= Sony FE 21mm F2.8 (SEL28F20 + SEL075UWC)</td> </tr><tr><td>65535.29</td><td>= Sony FE 16mm F3.5 Fisheye (SEL28F20 + SEL057FEC)</td> </tr><tr><td>65535.30</td><td>= Sigma 19mm F2.8 [EX] DN</td> </tr><tr><td>65535.31</td><td>= Sigma 30mm F2.8 [EX] DN</td> </tr><tr><td>65535.32</td><td>= Sigma 60mm F2.8 DN</td> </tr><tr><td>65535.33</td><td>= Tamron 18-200mm F3.5-6.3 Di III VC</td> </tr><tr><td>65535.34</td><td>= Zeiss Batis 25mm F2</td> </tr><tr><td>65535.35</td><td>= Zeiss Batis 85mm F1.8</td> </tr><tr><td>65535.36</td><td>= Zeiss Loxia 21mm F2.8</td> </tr><tr><td>65535.37</td><td>= Zeiss Loxia 35mm F2</td> </tr><tr><td>65535.38</td><td>= Zeiss Loxia 50mm F2</td> </tr><tr><td>65535.39</td><td>= Zeiss Touit 12mm F2.8</td> </tr><tr><td>65535.40</td><td>= Zeiss Touit 32mm F1.8</td> </tr><tr><td>65535.41</td><td>= Zeiss Touit 50mm F2.8 Macro</td> </tr><tr><td>65535.42</td><td>= Arax MC 35mm F2.8 Tilt+Shift</td> </tr><tr><td>65535.43</td><td>= Arax MC 80mm F2.8 Tilt+Shift</td> </tr><tr><td>65535.44</td><td>= Zenitar MF 16mm F2.8 Fisheye M42</td> </tr><tr><td>65535.45</td><td>= Samyang 500mm Mirror F8.0</td> </tr><tr><td>65535.46</td><td>= Pentacon Auto 135mm F2.8</td> </tr><tr><td>65535.47</td><td>= Pentacon Auto 29mm F2.8</td> </tr><tr><td>65535.48</td><td>= Helios 44-2 58mm F2.0</td> </tr></table></td></tr></table></blockquote> <h2><a name='CameraInfo'>Sony CameraInfo Tags</a></h2> <p>Camera information for the A700, A850 and A900.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>LensSpec</td> <td class=c>undef[8]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>FocusModeSetting</td> <td class=c>int8u</td> <td><span class=s><span class=n>(FocusModeSetting for the A700, A850 and A900)</span> <br>0 = Manual <br>1 = AF-S <br>2 = AF-C <br>3 = AF-A <br>4 = DMF</span></td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>AFPointSelected</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Center <br>2 = Top <br>3 = Upper-right <br>4 = Right <br>5 = Lower-right</td><td>&nbsp;&nbsp;</td> <td>6 = Bottom <br>7 = Lower-left <br>8 = Left <br>9 = Upper-left <br>10 = Far Right <br>11 = Far Left</td></tr></table> </td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>AFPoint</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Upper-left <br>1 = Left <br>2 = Lower-left <br>3 = Far Left <br>4 = Bottom Assist-left <br>5 = Bottom <br>6 = Bottom Assist-right <br>7 = Center (7) <br>8 = Center (horizontal) <br>9 = Center (9) <br>10 = Center (10) <br>11 = Center (11)</td><td>&nbsp;&nbsp;</td> <td>12 = Center (12) <br>13 = Center (vertical) <br>14 = Center (14) <br>15 = Top Assist-left <br>16 = Top <br>17 = Top Assist-right <br>18 = Far Right <br>19 = Upper-right <br>20 = Right <br>21 = Lower-right <br>22 = Center F2.8</td></tr></table> </td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>AFStatusActiveSensor</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>AFStatusUpper-left</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='34 = 0x22'>34</td> <td>AFStatusLeft</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='36 = 0x24'>36</td> <td>AFStatusLower-left</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='38 = 0x26'>38</td> <td>AFStatusFarLeft</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>AFStatusBottomAssist-left</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='42 = 0x2a'>42</td> <td>AFStatusBottom</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>AFStatusBottomAssist-right</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='46 = 0x2e'>46</td> <td>AFStatusCenter-7</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>AFStatusCenter-horizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='50 = 0x32'>50</td> <td>AFStatusCenter-9</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>AFStatusCenter-10</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='54 = 0x36'>54</td> <td>AFStatusCenter-11</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='56 = 0x38'>56</td> <td>AFStatusCenter-12</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='58 = 0x3a'>58</td> <td>AFStatusCenter-vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='60 = 0x3c'>60</td> <td>AFStatusCenter-14</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='62 = 0x3e'>62</td> <td>AFStatusTopAssist-left</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='64 = 0x40'>64</td> <td>AFStatusTop</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='66 = 0x42'>66</td> <td>AFStatusTopAssist-right</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='68 = 0x44'>68</td> <td>AFStatusFarRight</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='70 = 0x46'>70</td> <td>AFStatusUpper-right</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='72 = 0x48'>72</td> <td>AFStatusRight</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='74 = 0x4a'>74</td> <td>AFStatusLower-right</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='76 = 0x4c'>76</td> <td>AFStatusCenterF2-8</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='304 = 0x130'>304</td> <td>AFMicroAdjValue</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='305 = 0x131'>305</td> <td>AFMicroAdjMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x80] <br>0x0 = Off <br>0x80 = On</span></td></tr> <tr> <td class=r title='305 = 0x131'>305.1</td> <td>AFMicroAdjRegisteredLenses</td> <td class=c>int8u</td> <td><span class=s><span class=n>(number of registered lenses with a non-zero AFMicroAdjValue)</span> <br>[Mask 0x7f]</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo2'>Sony CameraInfo2 Tags</a></h2> <p>Camera information for the DSLR-A200, A230, A290, A300, A330, A350, A380 and A390.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>LensSpec</td> <td class=c>undef[8]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>AFPointSelected</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Center <br>2 = Top <br>3 = Upper-right <br>4 = Right</td><td>&nbsp;&nbsp;</td> <td>5 = Lower-right <br>6 = Bottom <br>7 = Lower-left <br>8 = Left <br>9 = Upper-left</td></tr></table> </td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>FocusModeSetting</td> <td class=c>int8u</td> <td><span class=s><span class=n>(FocusModeSetting for other models)</span> <br>0 = Manual <br>1 = AF-S <br>2 = AF-C <br>3 = AF-A <br>4 = DMF</span></td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>AFPoint</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Top-right <br>1 = Bottom-right <br>2 = Bottom <br>3 = Middle Horizontal</td><td>&nbsp;&nbsp;</td> <td>4 = Center Vertical <br>5 = Top <br>6 = Top-left <br>7 = Bottom-left</td></tr></table> </td></tr> <tr> <td class=r title='27 = 0x1b'>27</td> <td>AFStatusActiveSensor</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>AFStatusTop-right</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='31 = 0x1f'>31</td> <td>AFStatusBottom-right</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='33 = 0x21'>33</td> <td>AFStatusBottom</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='35 = 0x23'>35</td> <td>AFStatusMiddleHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='37 = 0x25'>37</td> <td>AFStatusCenterVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='39 = 0x27'>39</td> <td>AFStatusTop</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='41 = 0x29'>41</td> <td>AFStatusTop-left</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='43 = 0x2b'>43</td> <td>AFStatusBottom-left</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='45 = 0x2d'>45</td> <td>AFStatusLeft</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='47 = 0x2f'>47</td> <td>AFStatusCenterHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='49 = 0x31'>49</td> <td>AFStatusRight</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfo3'>Sony CameraInfo3 Tags</a></h2> <p>Camera information stored by the A33, A35, A55, A450, A500, A550, A560, A580, NEX-3/5/5C/C3 and VG10E. Some tags are valid only for some of these models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>LensSpec</td> <td class=c>undef[8]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>FocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>FocalLengthTeleZoom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>AFPointSelected</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Auto <br>1 = Center <br>2 = Top <br>3 = Upper-right <br>4 = Right</td><td>&nbsp;&nbsp;</td> <td>5 = Lower-right <br>6 = Bottom <br>7 = Lower-left <br>8 = Left <br>9 = Upper-left</td></tr></table> </td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>FocusMode</td> <td class=c>int8u</td> <td><span class=s>0 = Manual <br>1 = AF-S <br>2 = AF-C <br>3 = AF-A</span></td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>AFPoint</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Top-right <br>1 = Bottom-right <br>2 = Bottom <br>3 = Middle Horizontal</td><td>&nbsp;&nbsp;</td> <td>4 = Center Vertical <br>5 = Top <br>6 = Top-left <br>7 = Bottom-left</td></tr></table> </td></tr> <tr> <td class=r title='25 = 0x19'>25</td> <td>FocusStatus</td> <td class=c>int8u</td> <td><span class=s><span class=n>(not valid with Contrast AF or for NEX models)</span> <br>0 = Manual - Not confirmed (0) <br>4 = Manual - Not confirmed (4) <br>16 = AF-C - Confirmed <br>24 = AF-C - Not Confirmed <br>64 = AF-S - Confirmed</span></td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>AFStatusActiveSensor</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>AFPointSelected</td> <td class=c>int8u</td> <td><span class=s><span class=n>(not valid for Contrast AF)</span></span><table class=cols><tr> <td>0 = Auto <br>1 = Center <br>2 = Top <br>3 = Upper-right <br>4 = Right <br>5 = Lower-right <br>6 = Bottom <br>7 = Lower-left</td><td>&nbsp;&nbsp;</td> <td>8 = Left <br>9 = Upper-left <br>10 = Far Right <br>11 = Far Left <br>12 = Upper-middle <br>13 = Near Right <br>14 = Lower-middle <br>15 = Near Left</td></tr></table> </td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>FocusMode <br>AFStatusTop-right</td> <td class=c>int8u<br>int16s</td> <td><span class=s>0 = Manual <br>1 = AF-S <br>2 = AF-C <br>3 = AF-A</span><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='31 = 0x1f'>31</td> <td>AFStatusBottom-right</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>AFPoint</td> <td class=c>int8u</td> <td><span class=s><span class=n>(the AF sensor used for focusing. Not valid for Contrast AF)</span></span><table class=cols><tr> <td>0 = Upper-left <br>1 = Left <br>2 = Lower-left <br>3 = Far Left <br>4 = Top (horizontal) <br>5 = Near Right <br>6 = Center (horizontal) <br>7 = Near Left <br>8 = Bottom (horizontal) <br>9 = Top (vertical)</td><td>&nbsp;&nbsp;</td> <td>10 = Center (vertical) <br>11 = Bottom (vertical) <br>12 = Far Right <br>13 = Upper-right <br>14 = Right <br>15 = Lower-right <br>16 = Upper-middle <br>17 = Lower-middle <br>255 = (none)</td></tr></table> </td></tr> <tr> <td class=r title='33 = 0x21'>33</td> <td>AFStatusActiveSensor <br>AFStatusBottom</td> <td class=c>int16s<br>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> <table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='35 = 0x23'>35</td> <td>AFStatus15 <br>AFStatusMiddleHorizontal</td> <td class=c>-<br>int16s</td> <td>--&gt; <a href='Sony.html#AFStatus15'>Sony AFStatus15 Tags</a> <br><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='37 = 0x25'>37</td> <td>AFStatusCenterVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='39 = 0x27'>39</td> <td>AFStatusTop</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='41 = 0x29'>41</td> <td>AFStatusTop-left</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='43 = 0x2b'>43</td> <td>AFStatusBottom-left</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='45 = 0x2d'>45</td> <td>AFStatusLeft</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='47 = 0x2f'>47</td> <td>AFStatusCenterHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='49 = 0x31'>49</td> <td>AFStatusRight</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='AFStatus15'>Sony AFStatus15 Tags</a></h2> <p>AF Status information for models with 15-point AF.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>AFStatusUpper-left</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>AFStatusLeft</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>AFStatusLower-left</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>AFStatusFarLeft</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>AFStatusTopHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>AFStatusNearRight</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>AFStatusCenterHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>AFStatusNearLeft</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>AFStatusBottomHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>AFStatusTopVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>AFStatusCenterVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>AFStatusBottomVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>AFStatusFarRight</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>AFStatusUpper-right</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>AFStatusRight</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>AFStatusLower-right</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>AFStatusUpper-middle</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='34 = 0x22'>34</td> <td>AFStatusLower-middle</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraInfoUnknown'>Sony CameraInfoUnknown Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='FocusInfo'>Sony FocusInfo Tags</a></h2> <p>More camera settings and focus information decoded for models such as the A200, A230, A290, A300, A330, A350, A380, A390, A700, A850 and A900.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>DriveMode2</td> <td class=c>int8u</td> <td><span class=s><span class=n>(A230, A290, A330, A380 and A390)</span></span><table class=cols><tr> <td>0x1 = Single Frame <br>0x2 = Continuous High <br>0x4 = Self-timer 10 sec <br>0x5 = Self-timer 2 sec, Mirror Lock-up <br>0x7 = Continuous Bracketing <br>0xa = Remote Commander <br>0xb = Continuous Self-timer</td></tr></table> <span class=s><span class=n>(A200, A300, A350, A700, A850 and A900)</span></span><table class=cols><tr> <td>0x1 = Single Frame <br>0x2 = Continuous High <br>0x4 = Self-timer 10 sec <br>0x5 = Self-timer 2 sec, Mirror Lock-up <br>0x6 = Single-frame Bracketing <br>0x7 = Continuous Bracketing <br>0xa = Remote Commander <br>0xb = Mirror Lock-up <br>0x12 = Continuous Low <br>0x18 = White Balance Bracketing Low <br>0x19 = D-Range Optimizer Bracketing Low <br>0x28 = White Balance Bracketing High <br>0x29 = D-Range Optimizer Bracketing High</td></tr></table> </td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>Rotation</td> <td class=c>int8u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 270 CW <br>2 = Rotate 90 CW</span></td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>ImageStabilizationSetting</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>DynamicRangeOptimizerMode</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Standard <br>2 = Advanced Auto <br>3 = Advanced Level</span></td></tr> <tr> <td class=r title='43 = 0x2b'>43</td> <td>BracketShotNumber</td> <td class=c>int8u</td> <td><span class=s><span class=n>(WB and DRO bracketing)</span></span></td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>WhiteBalanceBracketing</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Low <br>2 = High</span></td></tr> <tr> <td class=r title='45 = 0x2d'>45</td> <td>BracketShotNumber2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='46 = 0x2e'>46</td> <td>DynamicRangeOptimizerBracket</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Low <br>2 = High</span></td></tr> <tr> <td class=r title='47 = 0x2f'>47</td> <td>ExposureBracketShotNumber</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='63 = 0x3f'>63</td> <td>ExposureProgram</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ExposureProgram'>Sony ExposureProgram Values</a></td></tr> <tr> <td class=r title='65 = 0x41'>65</td> <td>CreativeStyle</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>1 = Standard <br>2 = Vivid <br>3 = Portrait <br>4 = Landscape <br>5 = Sunset <br>6 = Night View/Portrait <br>8 = B&amp;W</td><td>&nbsp;&nbsp;</td> <td>9 = Adobe RGB <br>11 = Neutral <br>12 = Clear <br>13 = Deep <br>14 = Light <br>15 = Autumn Leaves <br>16 = Sepia</td></tr></table> </td></tr> <tr class=b> <td class=r title='109 = 0x6d'>109</td> <td>ISOSetting</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='111 = 0x6f'>111</td> <td>ISO</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='119 = 0x77'>119</td> <td>DynamicRangeOptimizerMode</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Standard <br>2 = Advanced Auto <br>3 = Advanced Level</span></td></tr> <tr> <td class=r title='121 = 0x79'>121</td> <td>DynamicRangeOptimizerLevel</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2118 = 0x846'>2118</td> <td>ShutterCount</td> <td class=c>int32u</td> <td><span class=s><span class=n>(only valid for some DSLR models)</span></span></td></tr> <tr> <td class=r title='2491 = 0x9bb'>2491</td> <td>FocusPosition</td> <td class=c>int8u</td> <td><span class=s><span class=n>(only valid for some DSLR models)</span></span></td></tr> <tr class=b> <td class=r title='4368 = 0x1110'>4368</td> <td>TiffMeteringImage</td> <td class=c>N</td> <td><span class=s><span class=n>(13-bit RBGG (?) 40x30 pixels, presumably metering info, extracted as a 16-bit TIFF image;)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ExposureProgram'>Sony ExposureProgram Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>ExposureProgram</th><th>Value</th><th>ExposureProgram</th><th>Value</th><th>ExposureProgram</th></tr> <tr><td class=r>0</td><td>= Auto</td> <td class='r b'>8</td><td class=b>= Program Shift A</td> <td class=r>19</td><td>= Night Portrait</td> </tr><tr><td class=r>1</td><td>= Manual</td> <td class='r b'>9</td><td class=b>= Program Shift S</td> <td class=r>20</td><td>= Landscape</td> </tr><tr><td class=r>2</td><td>= Program AE</td> <td class='r b'>16</td><td class=b>= Portrait</td> <td class=r>21</td><td>= Macro</td> </tr><tr><td class=r>3</td><td>= Aperture-priority AE</td> <td class='r b'>17</td><td class=b>= Sports</td> <td class=r>35</td><td>= Auto No Flash</td> </tr><tr><td class=r>4</td><td>= Shutter speed priority AE</td> <td class='r b'>18</td><td class=b>= Sunset</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='MoreInfo'>Sony MoreInfo Tags</a></h2> <p>More camera settings information decoded for the A450, A500, A550, A560, A580, A33, A35, A55, NEX-3/5/C3 and VG10E.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>MoreSettings</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#MoreSettings'>Sony MoreSettings Tags</a></td></tr> <tr class=b> <td title='0x0002 = 2'>0x0002</td> <td>FaceInfo <br>FaceInfoA</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Sony.html#FaceInfo'>Sony FaceInfo Tags</a> <br>--&gt; <a href='Sony.html#FaceInfoA'>Sony FaceInfoA Tags</a></td></tr> <tr> <td title='0x0107 = 263'>0x0107</td> <td>TiffMeteringImage</td> <td class=c>N</td> <td><span class=s><span class=n>(10-bit RGB data from the 1200 AE metering segments, extracted as a 16-bit TIFF image)</span></span></td></tr> <tr class=b> <td title='0x0201 = 513'>0x0201</td> <td>MoreInfo0201</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#MoreInfo0201'>Sony MoreInfo0201 Tags</a></td></tr> <tr> <td title='0x0401 = 1025'>0x0401</td> <td>MoreInfo0401</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#MoreInfo0401'>Sony MoreInfo0401 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='MoreSettings'>Sony MoreSettings Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>DriveMode2</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0x10 = Single Frame <br>0x21 = Continuous High <br>0x22 = Continuous Low <br>0x30 = Speed Priority Continuous <br>0x51 = Self-timer 10 sec <br>0x52 = Self-timer 2 sec, Mirror Lock-up <br>0x71 = Continuous Bracketing 0.3 EV <br>0x75 = Continuous Bracketing 0.7 EV <br>0x91 = White Balance Bracketing Low <br>0x92 = White Balance Bracketing High <br>0xc0 = Remote Commander</td></tr></table> </td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>ExposureProgram</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ExposureProgram2'>Sony ExposureProgram2 Values</a></td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>MeteringMode</td> <td class=c>int8u</td> <td><span class=s>1 = Multi-segment <br>2 = Center-weighted average <br>3 = Spot</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>DynamicRangeOptimizerSetting</td> <td class=c>int8u</td> <td><span class=s>1 = Off <br>16 = On (Auto) <br>17 = On (Manual)</span></td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>DynamicRangeOptimizerLevel</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>ColorSpace</td> <td class=c>int8u</td> <td><span class=s>1 = sRGB <br>2 = Adobe RGB</span></td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>CreativeStyleSetting</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>16 = Standard <br>32 = Vivid <br>64 = Portrait</td><td>&nbsp;&nbsp;</td> <td>80 = Landscape <br>96 = B&amp;W <br>160 = Sunset</td></tr></table> </td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ContrastSetting</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>SaturationSetting</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>SharpnessSetting</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>WhiteBalanceSetting</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#WhiteBalanceSetting'>Sony WhiteBalanceSetting Values</a></td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>ColorTemperatureSetting</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>ColorCompensationFilterSet</td> <td class=c>int8s</td> <td><span class=s><span class=n>(negative is green, positive is magenta)</span></span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>FlashMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>1 = Flash Off <br>16 = Autoflash <br>17 = Fill-flash</td><td>&nbsp;&nbsp;</td> <td>18 = Slow Sync <br>19 = Rear Sync <br>20 = Wireless</td></tr></table> </td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>LongExposureNoiseReduction</td> <td class=c>int8u</td> <td><span class=s>1 = Off <br>16 = On</span></td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>HighISONoiseReduction</td> <td class=c>int8u</td> <td><span class=s>16 = Low <br>19 = Auto</span></td></tr> <tr> <td class=r title='19 = 0x13'>19</td> <td>FocusMode</td> <td class=c>int8u</td> <td><span class=s>17 = AF-S <br>18 = AF-C <br>19 = AF-A <br>32 = Manual <br>48 = DMF</span></td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>MultiFrameNoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = n/a <br>1 = Off <br>16 = On <br>255 = None</span></td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>HDRSetting</td> <td class=c>int8u</td> <td><span class=s>1 = Off <br>16 = On (Auto) <br>17 = On (Manual)</span></td></tr> <tr class=b> <td class=r title='23 = 0x17'>23</td> <td>HDRLevel</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>33 = 1 EV <br>34 = 1.5 EV <br>35 = 2 EV</td><td>&nbsp;&nbsp;</td> <td>36 = 2.5 EV <br>37 = 3 EV <br>38 = 3.5 EV</td><td>&nbsp;&nbsp;</td> <td>39 = 4 EV <br>40 = 5 EV <br>41 = 6 EV</td></tr></table> </td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>ViewingMode</td> <td class=c>int8u</td> <td><span class=s>16 = ViewFinder <br>33 = Focus Check Live View <br>34 = Quick AF Live View</span></td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>FaceDetection</td> <td class=c>int8u</td> <td><span class=s>1 = Off <br>16 = On</span></td></tr> <tr> <td class=r title='26 = 0x1a'>26</td> <td>CustomWB_RBLevels</td> <td class=c>int16uRev[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>BrightnessValue <br>ExposureCompensationSet</td> <td class=c>int8u<br>int8u</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br><span class=n>(other models)</span></span></td></tr> <tr> <td class=r title='31 = 0x1f'>31</td> <td>ISO <br>FlashExposureCompSet</td> <td class=c>int8u<br>int8u</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br><span class=n>(other models)</span></span></td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>FNumber <br>LiveViewAFMethod</td> <td class=c>int8u<br>int8u</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br><span class=n>(other models except the NEX-3/5/5C)</span> <br>0 = n/a <br>1 = Phase-detect AF <br>2 = Contrast AF</span></td></tr> <tr> <td class=r title='33 = 0x21'>33</td> <td>ExposureTime <br>ISO</td> <td class=c>int8u<br>int8u</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br><span class=n>(NEX-3/5/5C)</span></span></td></tr> <tr class=b> <td class=r title='34 = 0x22'>34</td> <td>FNumber</td> <td class=c>int8u</td> <td><span class=s><span class=n>(NEX-3/5/5C only)</span></span></td></tr> <tr> <td class=r title='35 = 0x23'>35</td> <td>FocalLength2 <br>ExposureTime</td> <td class=c>int8u<br>int8u</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br><span class=n>(NEX-3/5/5C)</span></span></td></tr> <tr class=b> <td class=r title='36 = 0x24'>36</td> <td>ExposureCompensation2</td> <td class=c>int16s</td> <td><span class=s><span class=n>(A450, A500 and A550)</span></span></td></tr> <tr> <td class=r title='37 = 0x25'>37</td> <td>FocalLength2 <br>ISO</td> <td class=c>int8u<br>int8u</td> <td><span class=s><span class=n>(NEX-3/5/5C)</span> <br><span class=n>(other models except the A450, A500 and A550)</span></span></td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>FlashExposureCompSet2 <br>ExposureCompensation2 <br>FNumber</td> <td class=c>int16s<br>int16s<br>int8u</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br><span class=n>(NEX-3/5/5C)</span> <br><span class=n>(other models)</span></span></td></tr> <tr> <td class=r title='39 = 0x27'>39</td> <td>ExposureTime</td> <td class=c>int8u</td> <td><span class=s><span class=n>(models other than the A450, A500, A550 and NEX-3/5/5C)</span></span></td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>Orientation2</td> <td class=c>int8u</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br>1 = Horizontal (normal) <br>2 = Rotate 180 <br>6 = Rotate 90 CW <br>8 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='41 = 0x29'>41</td> <td>FocusPosition2 <br>FocalLength2</td> <td class=c>int8u<br>int8u</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br><span class=n>(other models except the NEX-3/5/5C)</span></span></td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>FlashAction <br>ExposureCompensation2</td> <td class=c>int8u<br>int16s</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br>0 = Did not fire <br>1 = Fired <br><span class=n>(other models except the NEX-3/5/5C)</span></span></td></tr> <tr> <td class=r title='43 = 0x2b'>43</td> <td>FocusPosition2</td> <td class=c>int8u</td> <td><span class=s><span class=n>(NEX-3/5/5C only)</span></span></td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>FocusMode2 <br>FlashAction <br>FlashExposureCompSet2</td> <td class=c>int8u<br>int8u<br>int16s</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br>0 = AF <br>1 = MF <br><span class=n>(NEX-3/5/5C FlashAction2)</span> <br>0 = Did not fire <br>1 = Fired <br><span class=n>(other models FlashExposureCompSet2)</span></span></td></tr> <tr> <td class=r title='46 = 0x2e'>46</td> <td>FocusMode2 <br>Orientation2</td> <td class=c>int8u<br>int8u</td> <td><span class=s><span class=n>(NEX-3/5/5C)</span> <br>0 = AF <br>1 = MF <br><span class=n>(other models except the A450, A500 and A550)</span> <br>1 = Horizontal (normal) <br>2 = Rotate 180 <br>6 = Rotate 90 CW <br>8 = Rotate 270 CW</span></td></tr> <tr class=b> <td class=r title='47 = 0x2f'>47</td> <td>FocusPosition2</td> <td class=c>int8u</td> <td><span class=s><span class=n>(models other than the A450, A500, A550 and NEX-3/5/5C)</span></span></td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>FlashAction</td> <td class=c>int8u</td> <td><span class=s><span class=n>(models other than the A450, A500, A550 and NEX-3/5/5C)</span> <br>0 = Did not fire <br>1 = Fired</span></td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>FocusMode2</td> <td class=c>int8u</td> <td><span class=s><span class=n>(models other than the A450, A500, A550 and NEX-3/5/5C)</span> <br>0 = AF <br>1 = MF</span></td></tr> <tr> <td class=r title='119 = 0x77'>119</td> <td>FlashAction2</td> <td class=c>int8u</td> <td><span class=s>0 = Did not fire <br>2 = External Flash fired (2) <br>3 = Built-in Flash fired <br>4 = External Flash fired (4)</span></td></tr> <tr class=b> <td class=r title='120 = 0x78'>120</td> <td>FlashActionExternal</td> <td class=c>int8u</td> <td><span class=s>122 = Fired <br>136 = Did not fire</span></td></tr> <tr> <td class=r title='124 = 0x7c'>124</td> <td>FlashActionExternal</td> <td class=c>int8u</td> <td><span class=s>136 = Did not fire <br>167 = Fired <br>182 = Fired, HSS</span></td></tr> <tr class=b> <td class=r title='130 = 0x82'>130</td> <td>FlashStatus</td> <td class=c>int8u</td> <td><span class=s>0 = None <br>2 = External</span></td></tr> <tr> <td class=r title='134 = 0x86'>134</td> <td>FlashStatus</td> <td class=c>int8u</td> <td><span class=s>0 = None <br>1 = Built-in <br>2 = External</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ExposureProgram2'>Sony ExposureProgram2 Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>ExposureProgram2</th><th>Value</th><th>ExposureProgram2</th><th>Value</th><th>ExposureProgram2</th></tr> <tr><td class=r>1</td><td>= Program AE</td> <td class='r b'>52</td><td class=b>= Sports</td> <td class=r>129</td><td>= Pop Color</td> </tr><tr><td class=r>2</td><td>= Aperture-priority AE</td> <td class='r b'>53</td><td class=b>= Sunset</td> <td class=r>130</td><td>= Posterization</td> </tr><tr><td class=r>3</td><td>= Shutter speed priority AE</td> <td class='r b'>54</td><td class=b>= Night view</td> <td class=r>131</td><td>= Posterization B/W</td> </tr><tr><td class=r>4</td><td>= Manual</td> <td class='r b'>55</td><td class=b>= Night view/portrait</td> <td class=r>132</td><td>= Retro Photo</td> </tr><tr><td class=r>5</td><td>= Cont. Priority AE</td> <td class='r b'>56</td><td class=b>= Handheld Night Shot</td> <td class=r>133</td><td>= High-key</td> </tr><tr><td class=r>16</td><td>= Auto</td> <td class='r b'>57</td><td class=b>= 3D Sweep Panorama</td> <td class=r>134</td><td>= Partial Color Red</td> </tr><tr><td class=r>17</td><td>= Auto (no flash)</td> <td class='r b'>64</td><td class=b>= Auto 2</td> <td class=r>135</td><td>= Partial Color Green</td> </tr><tr><td class=r>18</td><td>= Auto+</td> <td class='r b'>65</td><td class=b>= Auto 2 (no flash)</td> <td class=r>136</td><td>= Partial Color Blue</td> </tr><tr><td class=r>49</td><td>= Portrait</td> <td class='r b'>80</td><td class=b>= Sweep Panorama</td> <td class=r>137</td><td>= Partial Color Yellow</td> </tr><tr><td class=r>50</td><td>= Landscape</td> <td class='r b'>96</td><td class=b>= Anti Motion Blur</td> <td class=r>138</td><td>= High Contrast Monochrome</td> </tr><tr><td class=r>51</td><td>= Macro</td> <td class='r b'>128</td><td class=b>= Toy Camera</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='WhiteBalanceSetting'>Sony WhiteBalanceSetting Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>WhiteBalanceSetting</th><th>Value</th><th>WhiteBalanceSetting</th></tr> <tr><td class=r>0x10</td><td>= Auto (-3)</td> <td class='r b'>0x45</td><td class=b>= Cloudy (+2)</td> </tr><tr><td class=r>0x11</td><td>= Auto (-2)</td> <td class='r b'>0x46</td><td class=b>= Cloudy (+3)</td> </tr><tr><td class=r>0x12</td><td>= Auto (-1)</td> <td class='r b'>0x50</td><td class=b>= Tungsten (-3)</td> </tr><tr><td class=r>0x13</td><td>= Auto (0)</td> <td class='r b'>0x51</td><td class=b>= Tungsten (-2)</td> </tr><tr><td class=r>0x14</td><td>= Auto (+1)</td> <td class='r b'>0x52</td><td class=b>= Tungsten (-1)</td> </tr><tr><td class=r>0x15</td><td>= Auto (+2)</td> <td class='r b'>0x53</td><td class=b>= Tungsten (0)</td> </tr><tr><td class=r>0x16</td><td>= Auto (+3)</td> <td class='r b'>0x54</td><td class=b>= Tungsten (+1)</td> </tr><tr><td class=r>0x20</td><td>= Daylight (-3)</td> <td class='r b'>0x55</td><td class=b>= Tungsten (+2)</td> </tr><tr><td class=r>0x21</td><td>= Daylight (-2)</td> <td class='r b'>0x56</td><td class=b>= Tungsten (+3)</td> </tr><tr><td class=r>0x22</td><td>= Daylight (-1)</td> <td class='r b'>0x60</td><td class=b>= Fluorescent (-3)</td> </tr><tr><td class=r>0x23</td><td>= Daylight (0)</td> <td class='r b'>0x61</td><td class=b>= Fluorescent (-2)</td> </tr><tr><td class=r>0x24</td><td>= Daylight (+1)</td> <td class='r b'>0x62</td><td class=b>= Fluorescent (-1)</td> </tr><tr><td class=r>0x25</td><td>= Daylight (+2)</td> <td class='r b'>0x63</td><td class=b>= Fluorescent (0)</td> </tr><tr><td class=r>0x26</td><td>= Daylight (+3)</td> <td class='r b'>0x64</td><td class=b>= Fluorescent (+1)</td> </tr><tr><td class=r>0x30</td><td>= Shade (-3)</td> <td class='r b'>0x65</td><td class=b>= Fluorescent (+2)</td> </tr><tr><td class=r>0x31</td><td>= Shade (-2)</td> <td class='r b'>0x66</td><td class=b>= Fluorescent (+3)</td> </tr><tr><td class=r>0x32</td><td>= Shade (-1)</td> <td class='r b'>0x70</td><td class=b>= Flash (-3)</td> </tr><tr><td class=r>0x33</td><td>= Shade (0)</td> <td class='r b'>0x71</td><td class=b>= Flash (-2)</td> </tr><tr><td class=r>0x34</td><td>= Shade (+1)</td> <td class='r b'>0x72</td><td class=b>= Flash (-1)</td> </tr><tr><td class=r>0x35</td><td>= Shade (+2)</td> <td class='r b'>0x73</td><td class=b>= Flash (0)</td> </tr><tr><td class=r>0x36</td><td>= Shade (+3)</td> <td class='r b'>0x74</td><td class=b>= Flash (+1)</td> </tr><tr><td class=r>0x40</td><td>= Cloudy (-3)</td> <td class='r b'>0x75</td><td class=b>= Flash (+2)</td> </tr><tr><td class=r>0x41</td><td>= Cloudy (-2)</td> <td class='r b'>0x76</td><td class=b>= Flash (+3)</td> </tr><tr><td class=r>0x42</td><td>= Cloudy (-1)</td> <td class='r b'>0xa3</td><td class=b>= Custom</td> </tr><tr><td class=r>0x43</td><td>= Cloudy (0)</td> <td class='r b'>0xf3</td><td class=b>= Color Temperature/Color Filter</td> </tr><tr><td class=r>0x44</td><td>= Cloudy (+1)</td> <td class='r b'>&nbsp;</td><td class=b>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='FaceInfo'>Sony FaceInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>FacesDetected</td> <td class=c>int16s</td> <td><span class=s>-1 = n/a</span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>Face1Position</td> <td class=c>int16u[4]</td> <td><span class=s><span class=n>(re-ordered and scaled to return the top, left, height and width of detected face, with coordinates relative to the full-sized unrotated image and increasing Y downwards)</span></span></td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>Face2Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>Face3Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>Face4Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>Face5Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='26 = 0x1a'>26</td> <td>Face6Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='31 = 0x1f'>31</td> <td>Face7Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='36 = 0x24'>36</td> <td>Face8Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceInfoA'>Sony FaceInfoA Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>FacesDetected</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>PotentialFace1Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='21 = 0x15'>21</td> <td>PotentialFace2Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='31 = 0x1f'>31</td> <td>PotentialFace3Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='41 = 0x29'>41</td> <td>PotentialFace4Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='51 = 0x33'>51</td> <td>PotentialFace5Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='61 = 0x3d'>61</td> <td>PotentialFace6Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='71 = 0x47'>71</td> <td>PotentialFace7Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='81 = 0x51'>81</td> <td>PotentialFace8Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='91 = 0x5b'>91</td> <td>Face1Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='101 = 0x65'>101</td> <td>Face2Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='111 = 0x6f'>111</td> <td>Face3Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='121 = 0x79'>121</td> <td>Face4Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MoreInfo0201'>Sony MoreInfo0201 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='283 = 0x11b'>283</td> <td>ImageCount</td> <td class=c>int32u</td> <td><span class=s><span class=n>(not valid for the A450, A500 or A550)</span></span></td></tr> <tr class=b> <td class=r title='293 = 0x125'>293</td> <td>ShutterCount</td> <td class=c>int32u</td> <td><span class=s><span class=n>(not valid for the A450, A500 or A550)</span></span></td></tr> <tr> <td class=r title='330 = 0x14a'>330</td> <td>ShutterCount</td> <td class=c>int32u</td> <td><span class=s><span class=n>(A450, A500 and A550 only)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='MoreInfo0401'>Sony MoreInfo0401 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1102 = 0x44e'>1102</td> <td>ShotNumberSincePowerUp</td> <td class=c>int32u</td> <td><span class=s><span class=n>(Not valid for the NEX-3 or NEX-5)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraSettings'>Sony CameraSettings Tags</a></h2> <p>Camera settings for the A200, A300, A350, A700, A850 and A900.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ExposureTime</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>FNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>HighSpeedSync</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>ExposureCompensationSet</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>DriveMode</td> <td class=c>int16u</td> <td><span class=s>[Mask 0xff]</span><table class=cols><tr> <td>0x1 = Single Frame <br>0x2 = Continuous High <br>0x4 = Self-timer 10 sec <br>0x5 = Self-timer 2 sec, Mirror Lock-up <br>0x6 = Single-frame Bracketing <br>0x7 = Continuous Bracketing <br>0xa = Remote Commander <br>0xb = Mirror Lock-up <br>0x12 = Continuous Low <br>0x18 = White Balance Bracketing Low <br>0x19 = D-Range Optimizer Bracketing Low <br>0x28 = White Balance Bracketing High <br>0x29 = D-Range Optimizer Bracketing High</td></tr></table> </td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>WhiteBalanceSetting</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>2 = Auto <br>4 = Daylight <br>5 = Fluorescent <br>6 = Tungsten <br>7 = Flash <br>16 = Cloudy <br>17 = Shade <br>18 = Color Temperature/Color Filter <br>32 = Custom 1 <br>33 = Custom 2 <br>34 = Custom 3</td></tr></table> </td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>WhiteBalanceFineTune</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>ColorTemperatureSet</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>ColorCompensationFilterSet</td> <td class=c>int16u</td> <td><span class=s><span class=n>(negative is green, positive is magenta)</span></span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>ColorTemperatureCustom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>ColorCompensationFilterCustom</td> <td class=c>int16u</td> <td><span class=s><span class=n>(negative is green, positive is magenta)</span></span></td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>2 = Auto <br>4 = Daylight <br>5 = Fluorescent <br>6 = Tungsten <br>7 = Flash</td><td>&nbsp;&nbsp;</td> <td>12 = Color Temperature <br>13 = Color Filter <br>14 = Custom <br>16 = Cloudy <br>17 = Shade</td></tr></table> </td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>FocusModeSetting</td> <td class=c>int16u</td> <td><span class=s>0 = Manual <br>1 = AF-S <br>2 = AF-C <br>3 = AF-A <br>4 = DMF</span></td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>AFAreaMode</td> <td class=c>int16u</td> <td><span class=s>0 = Wide <br>1 = Local <br>2 = Spot</span></td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>AFPointSetting</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Center <br>2 = Top <br>3 = Upper-right <br>4 = Right <br>5 = Lower-right <br>6 = Bottom</td><td>&nbsp;&nbsp;</td> <td>7 = Lower-left <br>8 = Left <br>9 = Upper-left <br>10 = Far Right <br>11 = Far Left</td></tr></table> </td></tr> <tr class=b> <td class=r title='19 = 0x13'>19</td> <td>FlashMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Autoflash <br>2 = Rear Sync <br>3 = Wireless</td><td>&nbsp;&nbsp;</td> <td>4 = Fill-flash <br>5 = Flash Off <br>6 = Slow Sync</td></tr></table> </td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>FlashExposureCompSet</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='21 = 0x15'>21</td> <td>MeteringMode</td> <td class=c>int16u</td> <td><span class=s>1 = Multi-segment <br>2 = Center-weighted Average <br>4 = Spot</span></td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>ISOSetting</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>DynamicRangeOptimizerMode</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = Standard <br>2 = Advanced Auto <br>3 = Advanced Level</span></td></tr> <tr> <td class=r title='25 = 0x19'>25</td> <td>DynamicRangeOptimizerLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>CreativeStyle</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Standard <br>2 = Vivid <br>3 = Portrait <br>4 = Landscape <br>5 = Sunset <br>6 = Night View/Portrait <br>8 = B&amp;W</td><td>&nbsp;&nbsp;</td> <td>9 = Adobe RGB <br>11 = Neutral <br>12 = Clear <br>13 = Deep <br>14 = Light <br>15 = Autumn Leaves <br>16 = Sepia</td></tr></table> </td></tr> <tr> <td class=r title='27 = 0x1b'>27</td> <td>ColorSpace</td> <td class=c>int16u</td> <td><span class=s>0 = sRGB <br>1 = Adobe RGB <br>5 = Adobe RGB (A700)</span></td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28</td> <td>Sharpness</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='29 = 0x1d'>29</td> <td>Contrast</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>Saturation</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='31 = 0x1f'>31</td> <td>ZoneMatchingValue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='34 = 0x22'>34</td> <td>Brightness</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='35 = 0x23'>35</td> <td>FlashControl</td> <td class=c>int16u</td> <td><span class=s>0 = ADI <br>1 = Pre-flash TTL <br>2 = Manual</span></td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>PrioritySetupShutterRelease</td> <td class=c>int16u</td> <td><span class=s>0 = AF <br>1 = Release</span></td></tr> <tr> <td class=r title='41 = 0x29'>41</td> <td>AFIlluminator</td> <td class=c>int16u</td> <td><span class=s>0 = Auto <br>1 = Off</span></td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>AFWithShutter</td> <td class=c>int16u</td> <td><span class=s>0 = On <br>1 = Off</span></td></tr> <tr> <td class=r title='43 = 0x2b'>43</td> <td>LongExposureNoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='44 = 0x2c'>44</td> <td>HighISONoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0 = Normal <br>1 = Low <br>2 = High <br>3 = Off</span></td></tr> <tr> <td class=r title='45 = 0x2d'>45</td> <td>ImageStyle</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Standard <br>2 = Vivid <br>3 = Portrait <br>4 = Landscape <br>5 = Sunset <br>7 = Night View/Portrait <br>8 = B&amp;W <br>9 = Adobe RGB</td><td>&nbsp;&nbsp;</td> <td>11 = Neutral <br>129 = StyleBox1 <br>130 = StyleBox2 <br>131 = StyleBox3 <br>132 = StyleBox4 <br>133 = StyleBox5 <br>134 = StyleBox6</td></tr></table> </td></tr> <tr class=b> <td class=r title='46 = 0x2e'>46</td> <td>FocusModeSwitch</td> <td class=c>int16u</td> <td><span class=s>0 = AF <br>1 = Manual</span></td></tr> <tr> <td class=r title='47 = 0x2f'>47</td> <td>ShutterSpeedSetting</td> <td class=c>int16u</td> <td><span class=s><span class=n>(used in M, S and Program Shift S modes)</span></span></td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>ApertureSetting</td> <td class=c>int16u</td> <td><span class=s><span class=n>(used in M, A and Program Shift A modes)</span></span></td></tr> <tr> <td class=r title='60 = 0x3c'>60</td> <td>ExposureProgram</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#ExposureProgram'>Sony ExposureProgram Values</a></td></tr> <tr class=b> <td class=r title='61 = 0x3d'>61</td> <td>ImageStabilizationSetting</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='62 = 0x3e'>62</td> <td>FlashAction</td> <td class=c>int16u</td> <td><span class=s>0 = Did not fire <br>1 = Fired <br>2 = External Flash, Did not fire <br>3 = External Flash, Fired</span></td></tr> <tr class=b> <td class=r title='63 = 0x3f'>63</td> <td>Rotation</td> <td class=c>int16u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='64 = 0x40'>64</td> <td>AELock</td> <td class=c>int16u</td> <td><span class=s>1 = Off <br>2 = On</span></td></tr> <tr class=b> <td class=r title='76 = 0x4c'>76</td> <td>FlashAction2</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Fired, Autoflash <br>2 = Fired, Fill-flash <br>3 = Fired, Rear Sync <br>4 = Fired, Wireless <br>5 = Did not fire <br>6 = Fired, Slow Sync <br>17 = Fired, Autoflash, Red-eye reduction <br>18 = Fired, Fill-flash, Red-eye reduction <br>34 = Fired, Fill-flash, HSS</td></tr></table> </td></tr> <tr> <td class=r title='77 = 0x4d'>77</td> <td>FocusMode</td> <td class=c>int16u</td> <td><span class=s>0 = Manual <br>1 = AF-S <br>2 = AF-C <br>3 = AF-A <br>4 = DMF</span></td></tr> <tr class=b> <td class=r title='80 = 0x50'>80</td> <td>BatteryState</td> <td class=c>int16u</td> <td><span class=s>2 = Empty <br>3 = Very Low <br>4 = Low <br>5 = Sufficient <br>6 = Full</span></td></tr> <tr> <td class=r title='81 = 0x51'>81</td> <td>BatteryLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='83 = 0x53'>83</td> <td>FocusStatus</td> <td class=c>int16u</td> <td><span class=s>0x0 = Not confirmed <br>0x4 = Not confirmed, Tracking <br>Bit 0 = Confirmed <br>Bit 1 = Failed <br>Bit 2 = Tracking</span></td></tr> <tr> <td class=r title='84 = 0x54'>84</td> <td>SonyImageSize</td> <td class=c>int16u</td> <td><span class=s>1 = Large <br>2 = Medium <br>3 = Small</span></td></tr> <tr class=b> <td class=r title='85 = 0x55'>85</td> <td>AspectRatio</td> <td class=c>int16u</td> <td><span class=s>1 = 3:2 <br>2 = 16:9</span></td></tr> <tr> <td class=r title='86 = 0x56'>86</td> <td>Quality</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = RAW <br>2 = CRAW <br>16 = Extra Fine <br>32 = Fine</td><td>&nbsp;&nbsp;</td> <td>34 = RAW + JPEG <br>35 = CRAW + JPEG <br>48 = Standard</td></tr></table> </td></tr> <tr class=b> <td class=r title='88 = 0x58'>88</td> <td>ExposureLevelIncrements</td> <td class=c>int16u</td> <td><span class=s>33 = 1/3 EV <br>50 = 1/2 EV</span></td></tr> <tr> <td class=r title='106 = 0x6a'>106</td> <td>RedEyeReduction</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='154 = 0x9a'>154</td> <td>FolderNumber</td> <td class=c>int16u</td> <td><span class=s>[Mask 0x3ff]</span></td></tr> <tr> <td class=r title='155 = 0x9b'>155</td> <td>ImageNumber</td> <td class=c>int16u</td> <td><span class=s>[Mask 0x3fff]</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraSettings2'>Sony CameraSettings2 Tags</a></h2> <p>Camera settings for the A230, A290, A330, A380 and A390.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ExposureTime</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>FNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>HighSpeedSync</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>ExposureCompensationSet</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>WhiteBalanceSetting</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>2 = Auto <br>4 = Daylight <br>5 = Fluorescent <br>6 = Tungsten <br>7 = Flash <br>16 = Cloudy <br>17 = Shade <br>18 = Color Temperature/Color Filter <br>32 = Custom 1 <br>33 = Custom 2 <br>34 = Custom 3</td></tr></table> </td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>WhiteBalanceFineTune</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>ColorTemperatureSet</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>ColorCompensationFilterSet</td> <td class=c>int16u</td> <td><span class=s><span class=n>(negative is green, positive is magenta)</span></span></td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>CustomWB_RGBLevels</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='11 = 0xb'>11</td> <td>ColorTemperatureCustom</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>ColorCompensationFilterCustom</td> <td class=c>int16u</td> <td><span class=s><span class=n>(negative is green, positive is magenta)</span></span></td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>WhiteBalance</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>2 = Auto <br>4 = Daylight <br>5 = Fluorescent <br>6 = Tungsten <br>7 = Flash</td><td>&nbsp;&nbsp;</td> <td>12 = Color Temperature <br>13 = Color Filter <br>14 = Custom <br>16 = Cloudy <br>17 = Shade</td></tr></table> </td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>FocusModeSetting</td> <td class=c>int16u</td> <td><span class=s>0 = Manual <br>1 = AF-S <br>2 = AF-C <br>3 = AF-A</span></td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>AFAreaMode</td> <td class=c>int16u</td> <td><span class=s>0 = Wide <br>1 = Local <br>2 = Spot</span></td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>AFPointSetting</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Center <br>2 = Top <br>3 = Upper-right <br>4 = Right <br>5 = Lower-right</td><td>&nbsp;&nbsp;</td> <td>6 = Bottom <br>7 = Lower-left <br>8 = Left <br>9 = Upper-left</td></tr></table> </td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>FlashExposureCompSet</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='19 = 0x13'>19</td> <td>MeteringMode</td> <td class=c>int16u</td> <td><span class=s>1 = Multi-segment <br>2 = Center-weighted Average <br>4 = Spot</span></td></tr> <tr class=b> <td class=r title='20 = 0x14'>20</td> <td>ISOSetting</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>DynamicRangeOptimizerMode</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = Standard <br>2 = Advanced Auto <br>3 = Advanced Level</span></td></tr> <tr class=b> <td class=r title='23 = 0x17'>23</td> <td>DynamicRangeOptimizerLevel</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>CreativeStyle</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Standard <br>2 = Vivid <br>3 = Portrait <br>4 = Landscape</td><td>&nbsp;&nbsp;</td> <td>5 = Sunset <br>6 = Night View/Portrait <br>8 = B&amp;W</td></tr></table> </td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>Sharpness</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='26 = 0x1a'>26</td> <td>Contrast</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='27 = 0x1b'>27</td> <td>Saturation</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='31 = 0x1f'>31</td> <td>FlashControl</td> <td class=c>int16u</td> <td><span class=s>0 = ADI <br>1 = Pre-flash TTL <br>2 = Manual</span></td></tr> <tr class=b> <td class=r title='37 = 0x25'>37</td> <td>LongExposureNoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='38 = 0x26'>38</td> <td>HighISONoiseReduction</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = Low <br>2 = Normal <br>3 = High</span></td></tr> <tr class=b> <td class=r title='39 = 0x27'>39</td> <td>ImageStyle</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Standard <br>2 = Vivid <br>3 = Portrait <br>4 = Landscape</td><td>&nbsp;&nbsp;</td> <td>5 = Sunset <br>7 = Night View/Portrait <br>8 = B&amp;W</td></tr></table> </td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>ShutterSpeedSetting</td> <td class=c>int16u</td> <td><span class=s><span class=n>(used in M, S and Program Shift S modes)</span></span></td></tr> <tr class=b> <td class=r title='41 = 0x29'>41</td> <td>ApertureSetting</td> <td class=c>int16u</td> <td><span class=s><span class=n>(used in M, A and Program Shift A modes)</span></span></td></tr> <tr> <td class=r title='60 = 0x3c'>60</td> <td>ExposureProgram</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#ExposureProgram'>Sony ExposureProgram Values</a></td></tr> <tr class=b> <td class=r title='61 = 0x3d'>61</td> <td>ImageStabilizationSetting</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td class=r title='62 = 0x3e'>62</td> <td>FlashAction</td> <td class=c>int16u</td> <td><span class=s>0 = Did not fire <br>1 = Fired <br>2 = External Flash, Did not fire <br>3 = External Flash, Fired</span></td></tr> <tr class=b> <td class=r title='63 = 0x3f'>63</td> <td>Rotation</td> <td class=c>int16u</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 90 CW <br>2 = Rotate 270 CW</span></td></tr> <tr> <td class=r title='64 = 0x40'>64</td> <td>AELock</td> <td class=c>int16u</td> <td><span class=s>1 = Off <br>2 = On</span></td></tr> <tr class=b> <td class=r title='76 = 0x4c'>76</td> <td>FlashAction2</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>1 = Fired, Autoflash <br>2 = Fired, Fill-flash <br>3 = Fired, Rear Sync <br>4 = Fired, Wireless <br>5 = Did not fire <br>6 = Fired, Slow Sync <br>17 = Fired, Autoflash, Red-eye reduction <br>18 = Fired, Fill-flash, Red-eye reduction <br>34 = Fired, Fill-flash, HSS</td></tr></table> </td></tr> <tr> <td class=r title='77 = 0x4d'>77</td> <td>FocusMode</td> <td class=c>int16u</td> <td><span class=s>0 = Manual <br>1 = AF-S <br>2 = AF-C <br>3 = AF-A</span></td></tr> <tr class=b> <td class=r title='83 = 0x53'>83</td> <td>FocusStatus</td> <td class=c>int16u</td> <td><span class=s>0x0 = Not confirmed <br>0x4 = Not confirmed, Tracking <br>Bit 0 = Confirmed <br>Bit 1 = Failed <br>Bit 2 = Tracking</span></td></tr> <tr> <td class=r title='84 = 0x54'>84</td> <td>SonyImageSize</td> <td class=c>int16u</td> <td><span class=s>1 = Large <br>2 = Medium <br>3 = Small</span></td></tr> <tr class=b> <td class=r title='85 = 0x55'>85</td> <td>AspectRatio</td> <td class=c>int16u</td> <td><span class=s>1 = 3:2 <br>2 = 16:9</span></td></tr> <tr> <td class=r title='86 = 0x56'>86</td> <td>Quality</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = RAW <br>2 = CRAW <br>16 = Extra Fine <br>32 = Fine</td><td>&nbsp;&nbsp;</td> <td>34 = RAW + JPEG <br>35 = CRAW + JPEG <br>48 = Standard</td></tr></table> </td></tr> <tr class=b> <td class=r title='88 = 0x58'>88</td> <td>ExposureLevelIncrements</td> <td class=c>int16u</td> <td><span class=s>33 = 1/3 EV <br>50 = 1/2 EV</span></td></tr> <tr> <td class=r title='126 = 0x7e'>126</td> <td>DriveMode</td> <td class=c>int16u</td> <td><span class=s>[Mask 0xff]</span><table class=cols><tr> <td>0x1 = Single Frame <br>0x2 = Continuous High <br>0x4 = Self-timer 10 sec <br>0x5 = Self-timer 2 sec, Mirror Lock-up <br>0x7 = Continuous Bracketing <br>0xa = Remote Commander <br>0xb = Continuous Self-timer</td></tr></table> </td></tr> <tr class=b> <td class=r title='127 = 0x7f'>127</td> <td>FlashMode</td> <td class=c>int16u</td> <td><table class=cols><tr> <td>0 = Autoflash <br>2 = Rear Sync <br>3 = Wireless</td><td>&nbsp;&nbsp;</td> <td>4 = Fill-flash <br>5 = Flash Off <br>6 = Slow Sync</td></tr></table> </td></tr> <tr> <td class=r title='131 = 0x83'>131</td> <td>ColorSpace</td> <td class=c>int16u</td> <td><span class=s>5 = Adobe RGB <br>6 = sRGB</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CameraSettings3'>Sony CameraSettings3 Tags</a></h2> <p>Camera settings for models such as the A33, A35, A55, A450, A500, A550, A560, A580, NEX-3, NEX-5, NEX-C3 and NEX-VG10E.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>ShutterSpeedSetting</td> <td class=c>int8u</td> <td><span class=s><span class=n>(used only in M and S exposure modes)</span></span></td></tr> <tr class=b> <td class=r title='1 = 0x1'>1</td> <td>ApertureSetting</td> <td class=c>int8u</td> <td><span class=s><span class=n>(used only in M and A exposure modes)</span></span></td></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>ISOSetting</td> <td class=c>int8u</td> <td><span class=s>0 = Auto <br>254 = n/a</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>ExposureCompensationSet</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>DriveModeSetting</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0x10 = Single Frame <br>0x21 = Continuous High <br>0x22 = Continuous Low <br>0x30 = Speed Priority Continuous <br>0x51 = Self-timer 10 sec <br>0x52 = Self-timer 2 sec, Mirror Lock-up <br>0x71 = Continuous Bracketing 0.3 EV <br>0x75 = Continuous Bracketing 0.7 EV <br>0x91 = White Balance Bracketing Low <br>0x92 = White Balance Bracketing High <br>0xc0 = Remote Commander</td></tr></table> </td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>ExposureProgram</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ExposureProgram2'>Sony ExposureProgram2 Values</a></td></tr> <tr> <td class=r title='6 = 0x6'>6</td> <td>FocusModeSetting</td> <td class=c>int8u</td> <td><span class=s>17 = AF-S <br>18 = AF-C <br>19 = AF-A <br>32 = Manual <br>48 = DMF</span></td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>MeteringMode</td> <td class=c>int8u</td> <td><span class=s>1 = Multi-segment <br>2 = Center-weighted average <br>3 = Spot</span></td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>SonyImageSize</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>21 = Large (3:2) <br>22 = Medium (3:2) <br>23 = Small (3:2)</td><td>&nbsp;&nbsp;</td> <td>25 = Large (16:9) <br>26 = Medium (16:9) <br>27 = Small (16:9)</td></tr></table> </td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>AspectRatio</td> <td class=c>int8u</td> <td><span class=s>4 = 3:2 <br>8 = 16:9</span></td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>Quality</td> <td class=c>int8u</td> <td><span class=s>2 = RAW <br>4 = RAW + JPEG <br>6 = Fine <br>7 = Standard</span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>DynamicRangeOptimizerSetting</td> <td class=c>int8u</td> <td><span class=s>1 = Off <br>16 = On (Auto) <br>17 = On (Manual)</span></td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>DynamicRangeOptimizerLevel</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>ColorSpace</td> <td class=c>int8u</td> <td><span class=s>1 = sRGB <br>2 = Adobe RGB</span></td></tr> <tr> <td class=r title='15 = 0xf'>15</td> <td>CreativeStyleSetting</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>16 = Standard <br>32 = Vivid <br>64 = Portrait</td><td>&nbsp;&nbsp;</td> <td>80 = Landscape <br>96 = B&amp;W <br>160 = Sunset</td></tr></table> </td></tr> <tr class=b> <td class=r title='16 = 0x10'>16</td> <td>ContrastSetting</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='17 = 0x11'>17</td> <td>SaturationSetting</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>SharpnessSetting</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>WhiteBalanceSetting</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#WhiteBalanceSetting'>Sony WhiteBalanceSetting Values</a></td></tr> <tr class=b> <td class=r title='23 = 0x17'>23</td> <td>ColorTemperatureSetting</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>ColorCompensationFilterSet</td> <td class=c>int8s</td> <td><span class=s><span class=n>(negative is green, positive is magenta)</span></span></td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>CustomWB_RGBLevels</td> <td class=c>int16uRev[3]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>FlashMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>1 = Flash Off <br>16 = Autoflash <br>17 = Fill-flash</td><td>&nbsp;&nbsp;</td> <td>18 = Slow Sync <br>19 = Rear Sync <br>20 = Wireless</td></tr></table> </td></tr> <tr class=b> <td class=r title='33 = 0x21'>33</td> <td>FlashControl</td> <td class=c>int8u</td> <td><span class=s>1 = ADI Flash <br>2 = Pre-flash TTL</span></td></tr> <tr> <td class=r title='35 = 0x23'>35</td> <td>FlashExposureCompSet</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='36 = 0x24'>36</td> <td>AFAreaMode</td> <td class=c>int8u</td> <td><span class=s>1 = Wide <br>2 = Spot <br>3 = Local <br>4 = Flexible</span></td></tr> <tr> <td class=r title='37 = 0x25'>37</td> <td>LongExposureNoiseReduction</td> <td class=c>int8u</td> <td><span class=s>1 = Off <br>16 = On</span></td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>HighISONoiseReduction</td> <td class=c>int8u</td> <td><span class=s>16 = Low <br>19 = Auto</span></td></tr> <tr> <td class=r title='39 = 0x27'>39</td> <td>SmileShutterMode</td> <td class=c>int8u</td> <td><span class=s>17 = Slight Smile <br>18 = Normal Smile <br>19 = Big Smile</span></td></tr> <tr class=b> <td class=r title='40 = 0x28'>40</td> <td>RedEyeReduction</td> <td class=c>int8u</td> <td><span class=s>1 = Off <br>16 = On</span></td></tr> <tr> <td class=r title='45 = 0x2d'>45</td> <td>HDRSetting</td> <td class=c>int8u</td> <td><span class=s>1 = Off <br>16 = On (Auto) <br>17 = On (Manual)</span></td></tr> <tr class=b> <td class=r title='46 = 0x2e'>46</td> <td>HDRLevel</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>33 = 1 EV <br>34 = 1.5 EV <br>35 = 2 EV</td><td>&nbsp;&nbsp;</td> <td>36 = 2.5 EV <br>37 = 3 EV <br>38 = 3.5 EV</td><td>&nbsp;&nbsp;</td> <td>39 = 4 EV <br>40 = 5 EV <br>41 = 6 EV</td></tr></table> </td></tr> <tr> <td class=r title='47 = 0x2f'>47</td> <td>ViewingMode</td> <td class=c>int8u</td> <td><span class=s>16 = ViewFinder <br>33 = Focus Check Live View <br>34 = Quick AF Live View</span></td></tr> <tr class=b> <td class=r title='48 = 0x30'>48</td> <td>FaceDetection</td> <td class=c>int8u</td> <td><span class=s>1 = Off <br>16 = On</span></td></tr> <tr> <td class=r title='49 = 0x31'>49</td> <td>SmileShutter</td> <td class=c>int8u</td> <td><span class=s>1 = Off <br>16 = On</span></td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>SweepPanoramaSize</td> <td class=c>int8u</td> <td><span class=s>1 = Standard <br>2 = Wide</span></td></tr> <tr> <td class=r title='51 = 0x33'>51</td> <td>SweepPanoramaDirection</td> <td class=c>int8u</td> <td><span class=s>1 = Right <br>2 = Left <br>3 = Up <br>4 = Down</span></td></tr> <tr class=b> <td class=r title='52 = 0x34'>52</td> <td>DriveMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0x10 = Single Frame <br>0x21 = Continuous High <br>0x22 = Continuous Low <br>0x30 = Speed Priority Continuous <br>0x51 = Self-timer 10 sec <br>0x52 = Self-timer 2 sec, Mirror Lock-up <br>0x71 = Continuous Bracketing 0.3 EV <br>0x75 = Continuous Bracketing 0.7 EV <br>0x91 = White Balance Bracketing Low <br>0x92 = White Balance Bracketing High <br>0xc0 = Remote Commander <br>0xd1 = Continuous - HDR <br>0xd2 = Continuous - Multi Frame NR <br>0xd3 = Continuous - Handheld Night Shot <br>0xd4 = Continuous - Anti Motion Blur <br>0xd5 = Continuous - Sweep Panorama <br>0xd6 = Continuous - 3D Sweep Panorama</td></tr></table> </td></tr> <tr> <td class=r title='53 = 0x35'>53</td> <td>MultiFrameNoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = n/a <br>1 = Off <br>16 = On <br>255 = None</span></td></tr> <tr class=b> <td class=r title='54 = 0x36'>54</td> <td>LiveViewAFSetting</td> <td class=c>int8u</td> <td><span class=s>0 = n/a <br>1 = Phase-detect AF <br>2 = Contrast AF</span></td></tr> <tr> <td class=r title='56 = 0x38'>56</td> <td>PanoramaSize3D</td> <td class=c>int8u</td> <td><span class=s>0 = n/a <br>1 = Standard <br>2 = Wide <br>3 = 16:9</span></td></tr> <tr class=b> <td class=r title='131 = 0x83'>131</td> <td>AFButtonPressed</td> <td class=c>int8u</td> <td><span class=s>1 = No <br>16 = Yes</span></td></tr> <tr> <td class=r title='132 = 0x84'>132</td> <td>LiveViewMetering</td> <td class=c>int8u</td> <td><span class=s>0 = n/a <br>16 = 40 Segment <br>32 = 1200-zone Evaluative</span></td></tr> <tr class=b> <td class=r title='133 = 0x85'>133</td> <td>ViewingMode2</td> <td class=c>int8u</td> <td><span class=s>0 = n/a <br>16 = Viewfinder <br>33 = Focus Check Live View <br>34 = Quick AF Live View</span></td></tr> <tr> <td class=r title='134 = 0x86'>134</td> <td>AELock</td> <td class=c>int8u</td> <td><span class=s>1 = On <br>2 = Off</span></td></tr> <tr class=b> <td class=r title='135 = 0x87'>135</td> <td>FlashStatusBuilt-in</td> <td class=c>int8u</td> <td><span class=s>1 = Off <br>2 = On</span></td></tr> <tr> <td class=r title='136 = 0x88'>136</td> <td>FlashStatusExternal</td> <td class=c>int8u</td> <td><span class=s>1 = None <br>2 = Off <br>3 = On</span></td></tr> <tr class=b> <td class=r title='139 = 0x8b'>139</td> <td>LiveViewFocusMode</td> <td class=c>int8u</td> <td><span class=s>0 = n/a <br>1 = AF <br>16 = Manual</span></td></tr> <tr> <td class=r title='153 = 0x99'>153</td> <td>LensMount</td> <td class=c>int8u</td> <td><span class=s>1 = Unknown <br>16 = A-mount <br>17 = E-mount</span></td></tr> <tr class=b> <td class=r title='268 = 0x10c'>268</td> <td>SequenceNumber</td> <td class=c>int8u</td> <td><span class=s>0 = Single <br>255 = n/a</span></td></tr> <tr> <td class=r title='276 = 0x114'>276</td> <td>FolderNumber</td> <td class=c>int32u</td> <td><span class=s>[Mask 0xffc000]</span></td></tr> <tr class=b> <td class=r title='276 = 0x114'>276.1</td> <td>ImageNumber</td> <td class=c>int32u</td> <td><span class=s>[Mask 0x3fff]</span></td></tr> <tr> <td class=r title='512 = 0x200'>512</td> <td>ShotNumberSincePowerUp2</td> <td class=c>int32u</td> <td><span class=s><span class=n>(same as ShotNumberSincePowerUp for single-shot images, but includes all shots of the current image in multi-shot modes like HDR, panorama, and multi-frame noise reduction)</span></span></td></tr> <tr class=b> <td class=r title='643 = 0x283'>643</td> <td>AFButtonPressed</td> <td class=c>int8u</td> <td><span class=s>1 = No <br>16 = Yes</span></td></tr> <tr> <td class=r title='644 = 0x284'>644</td> <td>LiveViewMetering</td> <td class=c>int8u</td> <td><span class=s>0 = n/a <br>16 = 40 Segment <br>32 = 1200-zone Evaluative</span></td></tr> <tr class=b> <td class=r title='645 = 0x285'>645</td> <td>ViewingMode2</td> <td class=c>int8u</td> <td><span class=s>0 = n/a <br>16 = Viewfinder <br>33 = Focus Check Live View <br>34 = Quick AF Live View</span></td></tr> <tr> <td class=r title='646 = 0x286'>646</td> <td>AELock</td> <td class=c>int8u</td> <td><span class=s>1 = On <br>2 = Off</span></td></tr> <tr class=b> <td class=r title='647 = 0x287'>647</td> <td>FlashStatusBuilt-in</td> <td class=c>int8u</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br>1 = Off <br>2 = On</span></td></tr> <tr> <td class=r title='648 = 0x288'>648</td> <td>FlashStatusExternal</td> <td class=c>int8u</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br>1 = None <br>2 = Off <br>3 = On</span></td></tr> <tr class=b> <td class=r title='651 = 0x28b'>651</td> <td>LiveViewFocusMode</td> <td class=c>int8u</td> <td><span class=s>0 = n/a <br>1 = AF <br>16 = Manual</span></td></tr> <tr> <td class=r title='780 = 0x30c'>780</td> <td>SequenceNumber</td> <td class=c>int8u</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br>0 = Single <br>255 = n/a</span></td></tr> <tr class=b> <td class=r title='788 = 0x314'>788</td> <td>ImageNumber</td> <td class=c>int16u</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br>[Mask 0x3fff]</span></td></tr> <tr> <td class=r title='790 = 0x316'>790</td> <td>FolderNumber</td> <td class=c>int16u</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br>[Mask 0x3ff]</span></td></tr> <tr class=b> <td class=r title='1008 = 0x3f0'>1008</td> <td>LensE-mountVersion</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1012 = 0x3f4'>1012</td> <td>LensFirmwareVersion</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1015 = 0x3f7'>1015</td> <td>LensType2</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#LensType2'>Sony LensType2 Values</a></td></tr> <tr> <td class=r title='1024 = 0x400'>1024</td> <td>ImageNumber</td> <td class=c>int16u</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br>[Mask 0x3fff]</span></td></tr> <tr class=b> <td class=r title='1026 = 0x402'>1026</td> <td>FolderNumber</td> <td class=c>int16u</td> <td><span class=s><span class=n>(A450, A500 and A550)</span> <br>[Mask 0x3ff]</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='LensType2'>Sony LensType2 Values</a></h2> <p>Lens type numbers for Sony E-mount lenses used by NEX models.</p> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>LensType2</th></tr> <tr><td class=r>0</td><td>= Unknown E-mount lens or other lens</td> </tr><tr><td class=r>1</td><td>= Sony LA-EA1 Adapter</td> </tr><tr><td class=r>2</td><td>= Sony LA-EA2 Adapter</td> </tr><tr><td class=r>3</td><td>= Sony LA-EA3 Adapter</td> </tr><tr><td class=r>6</td><td>= Sony LA-EA4 Adapter</td> </tr><tr><td class=r>44</td><td>= Metabones Canon EF Smart Adapter</td> </tr><tr><td class=r>78</td><td>= Metabones Canon EF Smart Adapter Mark III or Other Adapter</td> </tr><tr><td class=r>234</td><td>= Metabones Canon EF Smart Adapter Mark IV</td> </tr><tr><td class=r>239</td><td>= Metabones Canon EF Speed Booster</td> </tr><tr><td class=r>32784</td><td>= Sony E 16mm F2.8</td> </tr><tr><td class=r>32785</td><td>= Sony E 18-55mm F3.5-5.6 OSS</td> </tr><tr><td class=r>32786</td><td>= Sony E 55-210mm F4.5-6.3 OSS</td> </tr><tr><td class=r>32787</td><td>= Sony E 18-200mm F3.5-6.3 OSS</td> </tr><tr><td class=r>32788</td><td>= Sony E 30mm F3.5 Macro</td> </tr><tr><td class=r>32789</td><td>= Sony E 24mm F1.8 ZA</td> </tr><tr><td class=r>32790</td><td>= Sony E 50mm F1.8 OSS</td> </tr><tr><td class=r>32791</td><td>= Sony E 16-70mm F4 ZA OSS</td> </tr><tr><td class=r>32792</td><td>= Sony E 10-18mm F4 OSS</td> </tr><tr><td class=r>32793</td><td>= Sony E PZ 16-50mm F3.5-5.6 OSS</td> </tr><tr><td class=r>32794</td><td>= Sony FE 35mm F2.8 ZA</td> </tr><tr><td class=r>32795</td><td>= Sony FE 24-70mm F4 ZA OSS</td> </tr><tr><td class=r>32797</td><td>= Sony E 18-200mm F3.5-6.3 OSS LE</td> </tr><tr><td class=r>32798</td><td>= Sony E 20mm F2.8</td> </tr><tr><td class=r>32799</td><td>= Sony E 35mm F1.8 OSS</td> </tr><tr><td class=r>32800</td><td>= Sony E PZ 18-105mm F4 G OSS</td> </tr><tr><td class=r>32802</td><td>= Sony FE 90mm F2.8 Macro G OSS</td> </tr><tr><td class=r>32803</td><td>= Sony E 18-50mm F4-5.6</td> </tr><tr><td class=r>32807</td><td>= Sony E PZ 18-200mm F3.5-6.3 OSS</td> </tr><tr><td class=r>32808</td><td>= Sony FE 55mm F1.8 ZA</td> </tr><tr><td class=r>32810</td><td>= Sony FE 70-200mm F4 G OSS</td> </tr><tr><td class=r>32811</td><td>= Sony FE 16-35mm F4 ZA OSS</td> </tr><tr><td class=r>32813</td><td>= Sony FE 28-70mm F3.5-5.6 OSS</td> </tr><tr><td class=r>32814</td><td>= Sony FE 35mm F1.4 ZA</td> </tr><tr><td class=r>32815</td><td>= Sony FE 24-240mm F3.5-6.3 OSS</td> </tr><tr><td class=r>32816</td><td>= Sony FE 28mm F2</td> </tr><tr><td class=r>32817</td><td>= Sony FE PZ 28-135mm F4 G OSS</td> </tr><tr><td class=r>32826</td><td>= Sony FE 21mm F2.8 (SEL28F20 + SEL075UWC)</td> </tr><tr><td class=r>32827</td><td>= Sony FE 16mm F3.5 Fisheye (SEL28F20 + SEL057FEC)</td> </tr><tr><td class=r>49216</td><td>= Zeiss Batis 25mm F2</td> </tr><tr><td class=r>49217</td><td>= Zeiss Batis 85mm F1.8</td> </tr><tr><td class=r>49234</td><td>= Zeiss Loxia 21mm F2.8</td> </tr></table></td></tr></table></blockquote> <h2><a name='CameraSettingsUnknown'>Sony CameraSettingsUnknown Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=4 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='ExtraInfo'>Sony ExtraInfo Tags</a></h2> <p>Extra hardware information for the A850 and A900.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>BatteryTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>BatteryUnknown?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>BatteryVoltage?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>ImageStabilization2?</td> <td class=c>int8u</td> <td><span class=s>191 = On (191) <br>207 = On (207) <br>210 = On (210) <br>213 = On <br>246 = Off</span></td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>BatteryLevel</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>ExtraInfoVersion</td> <td class=c>int8u[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ExtraInfo2'>Sony ExtraInfo2 Tags</a></h2> <p>Extra hardware information for the A230/290/330/380/390.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>BatteryLevel</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>ImageStabilization</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>64 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='ExtraInfo3'>Sony ExtraInfo3 Tags</a></h2> <p>Extra hardware information for the A33, A35, A55, A450, A500, A550, A560, A580 and NEX-3/5/C3/VG10.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>BatteryUnknown?</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>BatteryTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>BatteryLevel</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>BatteryVoltage1</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>BatteryVoltage2</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>ImageStabilization</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>64 = On</span></td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>BatteryState <br>ExposureProgram <br>ModeDialPosition</td> <td class=c>int8u<br>int8u<br>int8u</td> <td><span class=s><span class=n>(BatteryState for SLT models)</span> <br>1 = Empty <br>2 = Low <br>3 = Half full <br>4 = Almost full <br>5 = Full <br><span class=n>(ExposureProgram for the A450, A500 and A550)</span></span><table class=cols><tr> <td>241 = Landscape <br>243 = Aperture-priority AE <br>245 = Portrait <br>246 = Auto <br>247 = Program AE <br>249 = Macro <br>252 = Sunset <br>253 = Sports <br>255 = Manual</td></tr></table> <span class=s><span class=n>(ModeDialPosition for other DSLR models)</span></span><table class=cols><tr> <td>248 = No Flash <br>249 = Aperture-priority AE <br>250 = SCN <br>251 = Shutter speed priority AE <br>252 = Auto <br>253 = Program AE <br>254 = Panorama <br>255 = Manual</td></tr></table> </td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>MemoryCardConfiguration <br>CameraOrientation</td> <td class=c>int8u<br>int8u</td> <td><span class=s>244 = MemoryStick in use, SD card present <br>245 = MemoryStick in use, SD slot empty <br>252 = SD card in use, MemoryStick present <br>254 = SD card in use, MemoryStick slot empty <br>[Mask 0xc0] <br>0x0 = Horizontal (normal) <br>0x40 = Rotate 90 CW <br>0x80 = Rotate 270 CW <br>0xc0 = Rotate 180</span></td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x30] <br>0x0 = Horizontal (normal) <br>0x10 = Rotate 90 CW <br>0x20 = Rotate 270 CW <br>0x30 = Rotate 180</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Panorama'>Sony Panorama Tags</a></h2> <p>Tags found in panorama images from various Sony DSC, NEX, SLT and DSLR cameras. The width/height values of these tags are not affected by camera rotation -- the width is always the longer dimension.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index4</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='1 = 0x1'>1</td> <td>PanoramaFullWidth</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>PanoramaFullHeight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>PanoramaDirection</td> <td class=c>int32u</td> <td><span class=s>0 = Left or Up <br>1 = Right or Down</span></td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>PanoramaCropLeft</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>PanoramaCropTop</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>PanoramaCropRight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>PanoramaCropBottom</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>PanoramaFrameWidth</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>PanoramaFrameHeight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>PanoramaSourceWidth</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>PanoramaSourceHeight</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag2010a'>Sony Tag2010a Tags</a></h2> <p>Valid for NEX-5N.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x04b0 = 1200'>0x04b0</td> <td>MeterInfo?</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#MeterInfo'>Sony MeterInfo Tags</a></td></tr> <tr class=b> <td title='0x1128 = 4392'>0x1128</td> <td>ReleaseMode3</td> <td class=c>int8u</td> <td><span class=s>0 = Normal <br>1 = Continuous <br>2 = Bracketing <br>4 = Continuous - Burst <br>5 = Continuous - Speed/Advance Priority</span></td></tr> <tr> <td title='0x112c = 4396'>0x112c</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x1138 = 4408'>0x1138</td> <td>FlashMode</td> <td class=c>int8u</td> <td><span class=s>0 = Autoflash <br>1 = Fill-flash <br>2 = Flash Off <br>3 = Slow Sync <br>4 = Rear Sync</span></td></tr> <tr> <td title='0x113e = 4414'>0x113e</td> <td>StopsAboveBaseISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1140 = 4416'>0x1140</td> <td>BrightnessValue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1144 = 4420'>0x1144</td> <td>DynamicRangeOptimizer</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>3 = Lv1 <br>4 = Lv2</td><td>&nbsp;&nbsp;</td> <td>5 = Lv3 <br>6 = Lv4 <br>7 = Lv5 <br>8 = n/a</td></tr></table> </td></tr> <tr class=b> <td title='0x1148 = 4424'>0x1148</td> <td>HDRSetting</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = HDR Auto <br>3 = HDR 1 EV <br>5 = HDR 2 EV</td><td>&nbsp;&nbsp;</td> <td>7 = HDR 3 EV <br>9 = HDR 4 EV <br>11 = HDR 5 EV <br>13 = HDR 6 EV</td></tr></table> </td></tr> <tr> <td title='0x114c = 4428'>0x114c</td> <td>ExposureCompensation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x115e = 4446'>0x115e</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr> <td title='0x115f = 4447'>0x115f</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr class=b> <td title='0x1163 = 4451'>0x1163</td> <td>PictureEffect2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#PictureEffect2'>Sony PictureEffect2 Values</a></td></tr> <tr> <td title='0x1170 = 4464'>0x1170</td> <td>Quality2</td> <td class=c>int8u</td> <td><span class=s>0 = JPEG <br>1 = RAW <br>2 = RAW + JPEG</span></td></tr> <tr class=b> <td title='0x1174 = 4468'>0x1174</td> <td>MeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = Multi-segment <br>2 = Center-weighted average <br>3 = Spot</span></td></tr> <tr> <td title='0x1175 = 4469'>0x1175</td> <td>ExposureProgram</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ExposureProgram3'>Sony ExposureProgram3 Values</a></td></tr> <tr class=b> <td title='0x117c = 4476'>0x117c</td> <td>WB_RGBLevels</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ReleaseMode2'>Sony ReleaseMode2 Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>ReleaseMode2</th><th>Value</th><th>ReleaseMode2</th></tr> <tr><td class=r>0</td><td>= Normal</td> <td class='r b'>15</td><td class=b>= Continuous - High Resolution Sweep Panorama</td> </tr><tr><td class=r>1</td><td>= Continuous</td> <td class='r b'>16</td><td class=b>= Continuous - 3D Image</td> </tr><tr><td class=r>2</td><td>= Continuous - Exposure Bracketing</td> <td class='r b'>17</td><td class=b>= Continuous - Burst 2</td> </tr><tr><td class=r>3</td><td>= Continuous - White Balance Bracketing</td> <td class='r b'>19</td><td class=b>= Continuous - Speed/Advance Priority</td> </tr><tr><td class=r>5</td><td>= Continuous - Burst</td> <td class='r b'>20</td><td class=b>= Continuous - Multi Frame NR</td> </tr><tr><td class=r>6</td><td>= Single Frame - Capture During Movie</td> <td class='r b'>23</td><td class=b>= Single-frame - Exposure Bracketing</td> </tr><tr><td class=r>7</td><td>= Continuous - Sweep Panorama</td> <td class='r b'>26</td><td class=b>= Continuous Low</td> </tr><tr><td class=r>8</td><td>= Continuous - Anti-Motion Blur, Hand-held Twilight</td> <td class='r b'>27</td><td class=b>= Continuous - High Sensitivity</td> </tr><tr><td class=r>9</td><td>= Continuous - HDR</td> <td class='r b'>28</td><td class=b>= Smile Shutter</td> </tr><tr><td class=r>10</td><td>= Continuous - Background defocus</td> <td class='r b'>29</td><td class=b>= Continuous - Tele-zoom Advance Priority</td> </tr><tr><td class=r>13</td><td>= Continuous - 3D Sweep Panorama</td> <td class='r b'>146</td><td class=b>= Single Frame - Movie Capture</td> </tr></table></td></tr></table></blockquote> <h2><a name='PictureEffect2'>Sony PictureEffect2 Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>PictureEffect2</th><th>Value</th><th>PictureEffect2</th><th>Value</th><th>PictureEffect2</th></tr> <tr><td class=r>0</td><td>= Off</td> <td class='r b'>5</td><td class=b>= Soft High Key</td> <td class=r>10</td><td>= Rich-tone Monochrome</td> </tr><tr><td class=r>1</td><td>= Toy Camera</td> <td class='r b'>6</td><td class=b>= Partial Color</td> <td class=r>11</td><td>= Miniature</td> </tr><tr><td class=r>2</td><td>= Pop Color</td> <td class='r b'>7</td><td class=b>= High Contrast Monochrome</td> <td class=r>12</td><td>= Water Color</td> </tr><tr><td class=r>3</td><td>= Posterization</td> <td class='r b'>8</td><td class=b>= Soft Focus</td> <td class=r>13</td><td>= Illustration</td> </tr><tr><td class=r>4</td><td>= Retro Photo</td> <td class='r b'>9</td><td class=b>= HDR Painting</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='ExposureProgram3'>Sony ExposureProgram3 Values</a></h2> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>ExposureProgram3</th><th>Value</th><th>ExposureProgram3</th><th>Value</th><th>ExposureProgram3</th></tr> <tr><td class=r>0</td><td>= Program AE</td> <td class='r b'>11</td><td class=b>= Twilight Portrait</td> <td class=r>27</td><td>= Gourmet</td> </tr><tr><td class=r>1</td><td>= Aperture-priority AE</td> <td class='r b'>12</td><td class=b>= Sunset</td> <td class=r>28</td><td>= Pet</td> </tr><tr><td class=r>2</td><td>= Shutter speed priority AE</td> <td class='r b'>14</td><td class=b>= Action (High speed)</td> <td class=r>29</td><td>= Macro</td> </tr><tr><td class=r>3</td><td>= Manual</td> <td class='r b'>16</td><td class=b>= Sports</td> <td class=r>30</td><td>= Backlight Correction HDR</td> </tr><tr><td class=r>4</td><td>= Auto</td> <td class='r b'>17</td><td class=b>= Handheld Night Shot</td> <td class=r>33</td><td>= Sweep Panorama</td> </tr><tr><td class=r>5</td><td>= iAuto</td> <td class='r b'>18</td><td class=b>= Anti Motion Blur</td> <td class=r>36</td><td>= Background Defocus</td> </tr><tr><td class=r>6</td><td>= Superior Auto</td> <td class='r b'>19</td><td class=b>= High Sensitivity</td> <td class=r>37</td><td>= Soft Skin</td> </tr><tr><td class=r>7</td><td>= iAuto+</td> <td class='r b'>21</td><td class=b>= Beach</td> <td class=r>42</td><td>= 3D Image</td> </tr><tr><td class=r>8</td><td>= Portrait</td> <td class='r b'>22</td><td class=b>= Snow</td> <td class=r>43</td><td>= Cont. Priority AE</td> </tr><tr><td class=r>9</td><td>= Landscape</td> <td class='r b'>23</td><td class=b>= Fireworks</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr><tr><td class=r>10</td><td>= Twilight</td> <td class='r b'>26</td><td class=b>= Underwater</td> <td class=r>&nbsp;</td><td>&nbsp;</td> </tr></table></td></tr></table></blockquote> <h2><a name='MeterInfo'>Sony MeterInfo Tags</a></h2> <p>Information possibly related to metering. Extracted only if the Unknown option is used.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>MeterInfo1Row1</td> <td class=c>int32u[27]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='108 = 0x6c'>108</td> <td>MeterInfo1Row2</td> <td class=c>int32u[27]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='216 = 0xd8'>216</td> <td>MeterInfo1Row3</td> <td class=c>int32u[27]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='324 = 0x144'>324</td> <td>MeterInfo1Row4</td> <td class=c>int32u[27]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='432 = 0x1b0'>432</td> <td>MeterInfo1Row5</td> <td class=c>int32u[27]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='540 = 0x21c'>540</td> <td>MeterInfo1Row6</td> <td class=c>int32u[27]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='648 = 0x288'>648</td> <td>MeterInfo1Row7</td> <td class=c>int32u[27]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='756 = 0x2f4'>756</td> <td>MeterInfo2Row1</td> <td class=c>int32u[33]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='888 = 0x378'>888</td> <td>MeterInfo2Row2</td> <td class=c>int32u[33]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1020 = 0x3fc'>1020</td> <td>MeterInfo2Row3</td> <td class=c>int32u[33]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1152 = 0x480'>1152</td> <td>MeterInfo2Row4</td> <td class=c>int32u[33]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1284 = 0x504'>1284</td> <td>MeterInfo2Row5</td> <td class=c>int32u[33]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1416 = 0x588'>1416</td> <td>MeterInfo2Row6</td> <td class=c>int32u[33]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1548 = 0x60c'>1548</td> <td>MeterInfo2Row7</td> <td class=c>int32u[33]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='1680 = 0x690'>1680</td> <td>MeterInfo2Row8</td> <td class=c>int32u[33]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='1812 = 0x714'>1812</td> <td>MeterInfo2Row9</td> <td class=c>int32u[33]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag2010b'>Sony Tag2010b Tags</a></h2> <p>Valid for SLT-A65/A77, NEX-7/VG20E.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>SequenceImageNumber</td> <td class=c>int32u</td> <td><span class=s><span class=n>(number of images captured in burst sequence)</span></span></td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>SequenceFileNumber</td> <td class=c>int32u</td> <td><span class=s><span class=n>(file number in burst sequence)</span></span></td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>ReleaseMode2</td> <td class=c>int32u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x01b6 = 438'>0x01b6</td> <td>SonyDateTime</td> <td class=c>undef[7]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0324 = 804'>0x0324</td> <td>DynamicRangeOptimizer</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>3 = Lv1 <br>4 = Lv2</td><td>&nbsp;&nbsp;</td> <td>5 = Lv3 <br>6 = Lv4 <br>7 = Lv5 <br>8 = n/a</td></tr></table> </td></tr> <tr class=b> <td title='0x04b4 = 1204'>0x04b4</td> <td>MeterInfo?</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#MeterInfo'>Sony MeterInfo Tags</a></td></tr> <tr> <td title='0x1128 = 4392'>0x1128</td> <td>ReleaseMode3</td> <td class=c>int8u</td> <td><span class=s>0 = Normal <br>1 = Continuous <br>2 = Bracketing <br>4 = Continuous - Burst <br>5 = Continuous - Speed/Advance Priority</span></td></tr> <tr class=b> <td title='0x112c = 4396'>0x112c</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr> <td title='0x1138 = 4408'>0x1138</td> <td>FlashMode</td> <td class=c>int8u</td> <td><span class=s>0 = Autoflash <br>1 = Fill-flash <br>2 = Flash Off <br>3 = Slow Sync <br>4 = Rear Sync</span></td></tr> <tr class=b> <td title='0x113e = 4414'>0x113e</td> <td>StopsAboveBaseISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1140 = 4416'>0x1140</td> <td>BrightnessValue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1144 = 4420'>0x1144</td> <td>DynamicRangeOptimizer</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>3 = Lv1 <br>4 = Lv2</td><td>&nbsp;&nbsp;</td> <td>5 = Lv3 <br>6 = Lv4 <br>7 = Lv5 <br>8 = n/a</td></tr></table> </td></tr> <tr> <td title='0x1148 = 4424'>0x1148</td> <td>HDRSetting</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = HDR Auto <br>3 = HDR 1 EV <br>5 = HDR 2 EV</td><td>&nbsp;&nbsp;</td> <td>7 = HDR 3 EV <br>9 = HDR 4 EV <br>11 = HDR 5 EV <br>13 = HDR 6 EV</td></tr></table> </td></tr> <tr class=b> <td title='0x114c = 4428'>0x114c</td> <td>ExposureCompensation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td title='0x1162 = 4450'>0x1162</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr class=b> <td title='0x1163 = 4451'>0x1163</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr> <td title='0x1167 = 4455'>0x1167</td> <td>PictureEffect2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#PictureEffect2'>Sony PictureEffect2 Values</a></td></tr> <tr class=b> <td title='0x1174 = 4468'>0x1174</td> <td>Quality2</td> <td class=c>int8u</td> <td><span class=s>0 = JPEG <br>1 = RAW <br>2 = RAW + JPEG</span></td></tr> <tr> <td title='0x1178 = 4472'>0x1178</td> <td>MeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = Multi-segment <br>2 = Center-weighted average <br>3 = Spot</span></td></tr> <tr class=b> <td title='0x1179 = 4473'>0x1179</td> <td>ExposureProgram</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ExposureProgram3'>Sony ExposureProgram3 Values</a></td></tr> <tr> <td title='0x1180 = 4480'>0x1180</td> <td>WB_RGBLevels</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1218 = 4632'>0x1218</td> <td>SonyISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1a23 = 6691'>0x1a23</td> <td>LensParameters</td> <td class=c title=' ~ = Writable only with -n'>int16s[16]~</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag2010c'>Sony Tag2010c Tags</a></h2> <p>Valid for SLT-A37/A57 and NEX-F3.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>SequenceImageNumber</td> <td class=c>int32u</td> <td><span class=s><span class=n>(number of images captured in burst sequence)</span></span></td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>SequenceFileNumber</td> <td class=c>int32u</td> <td><span class=s><span class=n>(file number in burst sequence)</span></span></td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>ReleaseMode2</td> <td class=c>int32u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x0200 = 512'>0x0200</td> <td>DigitalZoomRatio</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0210 = 528'>0x0210</td> <td>SonyDateTime</td> <td class=c>undef[7]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0300 = 768'>0x0300</td> <td>DynamicRangeOptimizer</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>3 = Lv1 <br>4 = Lv2</td><td>&nbsp;&nbsp;</td> <td>5 = Lv3 <br>6 = Lv4 <br>7 = Lv5 <br>8 = n/a</td></tr></table> </td></tr> <tr> <td title='0x0490 = 1168'>0x0490</td> <td>MeterInfo?</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#MeterInfo'>Sony MeterInfo Tags</a></td></tr> <tr class=b> <td title='0x1104 = 4356'>0x1104</td> <td>ReleaseMode3</td> <td class=c>int8u</td> <td><span class=s>0 = Normal <br>1 = Continuous <br>2 = Bracketing <br>4 = Continuous - Burst <br>5 = Continuous - Speed/Advance Priority</span></td></tr> <tr> <td title='0x1108 = 4360'>0x1108</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x1114 = 4372'>0x1114</td> <td>FlashMode</td> <td class=c>int8u</td> <td><span class=s>0 = Autoflash <br>1 = Fill-flash <br>2 = Flash Off <br>3 = Slow Sync <br>4 = Rear Sync</span></td></tr> <tr> <td title='0x111a = 4378'>0x111a</td> <td>StopsAboveBaseISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x111c = 4380'>0x111c</td> <td>BrightnessValue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1120 = 4384'>0x1120</td> <td>DynamicRangeOptimizer</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>3 = Lv1 <br>4 = Lv2</td><td>&nbsp;&nbsp;</td> <td>5 = Lv3 <br>6 = Lv4 <br>7 = Lv5 <br>8 = n/a</td></tr></table> </td></tr> <tr class=b> <td title='0x1124 = 4388'>0x1124</td> <td>HDRSetting</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = HDR Auto <br>3 = HDR 1 EV <br>5 = HDR 2 EV</td><td>&nbsp;&nbsp;</td> <td>7 = HDR 3 EV <br>9 = HDR 4 EV <br>11 = HDR 5 EV <br>13 = HDR 6 EV</td></tr></table> </td></tr> <tr> <td title='0x1128 = 4392'>0x1128</td> <td>ExposureCompensation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x113e = 4414'>0x113e</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr> <td title='0x113f = 4415'>0x113f</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr class=b> <td title='0x1143 = 4419'>0x1143</td> <td>PictureEffect2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#PictureEffect2'>Sony PictureEffect2 Values</a></td></tr> <tr> <td title='0x1150 = 4432'>0x1150</td> <td>Quality2</td> <td class=c>int8u</td> <td><span class=s>0 = JPEG <br>1 = RAW <br>2 = RAW + JPEG</span></td></tr> <tr class=b> <td title='0x1154 = 4436'>0x1154</td> <td>MeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = Multi-segment <br>2 = Center-weighted average <br>3 = Spot</span></td></tr> <tr> <td title='0x1155 = 4437'>0x1155</td> <td>ExposureProgram</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ExposureProgram3'>Sony ExposureProgram3 Values</a></td></tr> <tr class=b> <td title='0x115c = 4444'>0x115c</td> <td>WB_RGBLevels</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x11f4 = 4596'>0x11f4</td> <td>SonyISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag2010d'>Sony Tag2010d Tags</a></h2> <p>Valid for DSC-HX10V/HX20V/HX200V/TX66/TX200V/TX300V/WX50/WX100/WX150, but not valid for panorama images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>SequenceImageNumber</td> <td class=c>int32u</td> <td><span class=s><span class=n>(number of images captured in burst sequence)</span></span></td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>SequenceFileNumber</td> <td class=c>int32u</td> <td><span class=s><span class=n>(file number in burst sequence)</span></span></td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>ReleaseMode2</td> <td class=c>int32u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x01fe = 510'>0x01fe</td> <td>SonyDateTime</td> <td class=c>undef[7]</td> <td>&nbsp;</td></tr> <tr> <td title='0x037c = 892'>0x037c</td> <td>DynamicRangeOptimizer</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>3 = Lv1 <br>4 = Lv2</td><td>&nbsp;&nbsp;</td> <td>5 = Lv3 <br>6 = Lv4 <br>7 = Lv5 <br>8 = n/a</td></tr></table> </td></tr> <tr class=b> <td title='0x050c = 1292'>0x050c</td> <td>MeterInfo?</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#MeterInfo'>Sony MeterInfo Tags</a></td></tr> <tr> <td title='0x1180 = 4480'>0x1180</td> <td>ReleaseMode3</td> <td class=c>int8u</td> <td><span class=s>0 = Normal <br>1 = Continuous <br>2 = Bracketing <br>4 = Continuous - Burst <br>5 = Continuous - Speed/Advance Priority</span></td></tr> <tr class=b> <td title='0x1184 = 4484'>0x1184</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr> <td title='0x1190 = 4496'>0x1190</td> <td>FlashMode</td> <td class=c>int8u</td> <td><span class=s>0 = Autoflash <br>1 = Fill-flash <br>2 = Flash Off <br>3 = Slow Sync <br>4 = Rear Sync</span></td></tr> <tr class=b> <td title='0x1196 = 4502'>0x1196</td> <td>StopsAboveBaseISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1198 = 4504'>0x1198</td> <td>BrightnessValue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x119c = 4508'>0x119c</td> <td>DynamicRangeOptimizer</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>3 = Lv1 <br>4 = Lv2</td><td>&nbsp;&nbsp;</td> <td>5 = Lv3 <br>6 = Lv4 <br>7 = Lv5 <br>8 = n/a</td></tr></table> </td></tr> <tr> <td title='0x11a0 = 4512'>0x11a0</td> <td>HDRSetting</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = HDR Auto <br>3 = HDR 1 EV <br>5 = HDR 2 EV</td><td>&nbsp;&nbsp;</td> <td>7 = HDR 3 EV <br>9 = HDR 4 EV <br>11 = HDR 5 EV <br>13 = HDR 6 EV</td></tr></table> </td></tr> <tr class=b> <td title='0x11ba = 4538'>0x11ba</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr> <td title='0x11bb = 4539'>0x11bb</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr class=b> <td title='0x11bf = 4543'>0x11bf</td> <td>PictureEffect2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#PictureEffect2'>Sony PictureEffect2 Values</a></td></tr> <tr> <td title='0x11d0 = 4560'>0x11d0</td> <td>MeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = Multi-segment <br>2 = Center-weighted average <br>3 = Spot</span></td></tr> <tr class=b> <td title='0x11d1 = 4561'>0x11d1</td> <td>ExposureProgram</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ExposureProgram3'>Sony ExposureProgram3 Values</a></td></tr> <tr> <td title='0x11d8 = 4568'>0x11d8</td> <td>WB_RGBLevels</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1270 = 4720'>0x1270</td> <td>SonyISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag2010e'>Sony Tag2010e Tags</a></h2> <p>Valid for SLT-A58/A99, ILCE-3000/3500, NEX-3N/5R/5T/6/VG30E/VG900, DSC-RX100, DSC-RX1/RX1R. Also valid for DSC-HX300/HX50V/TX30/WX60/WX200/WX300, but not for panorama images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>SequenceImageNumber</td> <td class=c>int32u</td> <td><span class=s><span class=n>(number of images captured in burst sequence)</span></span></td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>SequenceFileNumber</td> <td class=c>int32u</td> <td><span class=s><span class=n>(file number in burst sequence)</span></span></td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>ReleaseMode2</td> <td class=c>int32u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x021c = 540'>0x021c</td> <td>DigitalZoomRatio</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td title='0x022c = 556'>0x022c</td> <td>SonyDateTime</td> <td class=c>undef[7]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0328 = 808'>0x0328</td> <td>DynamicRangeOptimizer</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>3 = Lv1 <br>4 = Lv2</td><td>&nbsp;&nbsp;</td> <td>5 = Lv3 <br>6 = Lv4 <br>7 = Lv5 <br>8 = n/a</td></tr></table> </td></tr> <tr> <td title='0x04b8 = 1208'>0x04b8</td> <td>MeterInfo?</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#MeterInfo'>Sony MeterInfo Tags</a></td></tr> <tr class=b> <td title='0x115c = 4444'>0x115c</td> <td>ReleaseMode3</td> <td class=c>int8u</td> <td><span class=s>0 = Normal <br>1 = Continuous <br>2 = Bracketing <br>4 = Continuous - Burst <br>5 = Continuous - Speed/Advance Priority</span></td></tr> <tr> <td title='0x1160 = 4448'>0x1160</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x116c = 4460'>0x116c</td> <td>FlashMode</td> <td class=c>int8u</td> <td><span class=s>0 = Autoflash <br>1 = Fill-flash <br>2 = Flash Off <br>3 = Slow Sync <br>4 = Rear Sync</span></td></tr> <tr> <td title='0x1172 = 4466'>0x1172</td> <td>StopsAboveBaseISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1174 = 4468'>0x1174</td> <td>BrightnessValue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1178 = 4472'>0x1178</td> <td>DynamicRangeOptimizer</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>3 = Lv1 <br>4 = Lv2</td><td>&nbsp;&nbsp;</td> <td>5 = Lv3 <br>6 = Lv4 <br>7 = Lv5 <br>8 = n/a</td></tr></table> </td></tr> <tr class=b> <td title='0x117c = 4476'>0x117c</td> <td>HDRSetting</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = HDR Auto <br>3 = HDR 1 EV <br>5 = HDR 2 EV</td><td>&nbsp;&nbsp;</td> <td>7 = HDR 3 EV <br>9 = HDR 4 EV <br>11 = HDR 5 EV <br>13 = HDR 6 EV</td></tr></table> </td></tr> <tr> <td title='0x1180 = 4480'>0x1180</td> <td>ExposureCompensation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1196 = 4502'>0x1196</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr> <td title='0x1197 = 4503'>0x1197</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr class=b> <td title='0x119b = 4507'>0x119b</td> <td>PictureEffect2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#PictureEffect2'>Sony PictureEffect2 Values</a></td></tr> <tr> <td title='0x11a8 = 4520'>0x11a8</td> <td>Quality2</td> <td class=c>int8u</td> <td><span class=s>0 = JPEG <br>1 = RAW <br>2 = RAW + JPEG</span></td></tr> <tr class=b> <td title='0x11ac = 4524'>0x11ac</td> <td>MeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = Multi-segment <br>2 = Center-weighted average <br>3 = Spot</span></td></tr> <tr> <td title='0x11ad = 4525'>0x11ad</td> <td>ExposureProgram</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ExposureProgram3'>Sony ExposureProgram3 Values</a></td></tr> <tr class=b> <td title='0x11b4 = 4532'>0x11b4</td> <td>WB_RGBLevels</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x1254 = 4692'>0x1254</td> <td>SonyISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1258 = 4696'>0x1258</td> <td>SonyISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1278 = 4728'>0x1278</td> <td>FocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x127a = 4730'>0x127a</td> <td>MinFocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x127c = 4732'>0x127c</td> <td>MaxFocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1280 = 4736'>0x1280</td> <td>SonyISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1870 = 6256'>0x1870</td> <td>LensParameters?</td> <td class=c title=' ~ = Writable only with -n'>int16s[16]~</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1891 = 6289'>0x1891</td> <td>LensFormat</td> <td class=c>int8u</td> <td><span class=s>0 = Unknown <br>1 = APS-C <br>2 = Full-frame</span></td></tr> <tr> <td title='0x1892 = 6290'>0x1892</td> <td>LensMount</td> <td class=c>int8u</td> <td><span class=s>0 = Unknown <br>1 = A-mount <br>2 = E-mount</span></td></tr> <tr class=b> <td title='0x1893 = 6291'>0x1893</td> <td>LensType2</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#LensType2'>Sony LensType2 Values</a></td></tr> <tr> <td title='0x1896 = 6294'>0x1896</td> <td>LensType</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#LensType'>Sony LensType Values</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag2010f'>Sony Tag2010f Tags</a></h2> <p>Valid for DSC-RX100M2, DSC-QX10/QX100.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>ReleaseMode2</td> <td class=c>int32u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x0050 = 80'>0x0050</td> <td>DynamicRangeOptimizer</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>3 = Lv1 <br>4 = Lv2</td><td>&nbsp;&nbsp;</td> <td>5 = Lv3 <br>6 = Lv4 <br>7 = Lv5 <br>8 = n/a</td></tr></table> </td></tr> <tr> <td title='0x01e0 = 480'>0x01e0</td> <td>MeterInfo?</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#MeterInfo'>Sony MeterInfo Tags</a></td></tr> <tr class=b> <td title='0x1014 = 4116'>0x1014</td> <td>ReleaseMode3</td> <td class=c>int8u</td> <td><span class=s>0 = Normal <br>1 = Continuous <br>2 = Bracketing <br>4 = Continuous - Burst <br>5 = Continuous - Speed/Advance Priority</span></td></tr> <tr> <td title='0x1018 = 4120'>0x1018</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x1024 = 4132'>0x1024</td> <td>FlashMode</td> <td class=c>int8u</td> <td><span class=s>0 = Autoflash <br>1 = Fill-flash <br>2 = Flash Off <br>3 = Slow Sync <br>4 = Rear Sync</span></td></tr> <tr> <td title='0x102a = 4138'>0x102a</td> <td>StopsAboveBaseISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x102c = 4140'>0x102c</td> <td>BrightnessValue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1030 = 4144'>0x1030</td> <td>DynamicRangeOptimizer</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>3 = Lv1 <br>4 = Lv2</td><td>&nbsp;&nbsp;</td> <td>5 = Lv3 <br>6 = Lv4 <br>7 = Lv5 <br>8 = n/a</td></tr></table> </td></tr> <tr class=b> <td title='0x1034 = 4148'>0x1034</td> <td>HDRSetting</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = HDR Auto <br>3 = HDR 1 EV <br>5 = HDR 2 EV</td><td>&nbsp;&nbsp;</td> <td>7 = HDR 3 EV <br>9 = HDR 4 EV <br>11 = HDR 5 EV <br>13 = HDR 6 EV</td></tr></table> </td></tr> <tr> <td title='0x1038 = 4152'>0x1038</td> <td>ExposureCompensation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x104e = 4174'>0x104e</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr> <td title='0x104f = 4175'>0x104f</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr class=b> <td title='0x1053 = 4179'>0x1053</td> <td>PictureEffect2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#PictureEffect2'>Sony PictureEffect2 Values</a></td></tr> <tr> <td title='0x1060 = 4192'>0x1060</td> <td>Quality2</td> <td class=c>int8u</td> <td><span class=s>0 = JPEG <br>1 = RAW <br>2 = RAW + JPEG</span></td></tr> <tr class=b> <td title='0x1064 = 4196'>0x1064</td> <td>MeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = Multi-segment <br>2 = Center-weighted average <br>3 = Spot</span></td></tr> <tr> <td title='0x1065 = 4197'>0x1065</td> <td>ExposureProgram</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ExposureProgram3'>Sony ExposureProgram3 Values</a></td></tr> <tr class=b> <td title='0x106c = 4204'>0x106c</td> <td>WB_RGBLevels</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr> <td title='0x1134 = 4404'>0x1134</td> <td>FocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1136 = 4406'>0x1136</td> <td>MinFocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x1138 = 4408'>0x1138</td> <td>MaxFocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x113c = 4412'>0x113c</td> <td>SonyISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag2010g'>Sony Tag2010g Tags</a></h2> <p>Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350, ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>ReleaseMode2</td> <td class=c>int32u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x0050 = 80'>0x0050</td> <td>DynamicRangeOptimizer</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>3 = Lv1 <br>4 = Lv2</td><td>&nbsp;&nbsp;</td> <td>5 = Lv3 <br>6 = Lv4 <br>7 = Lv5 <br>8 = n/a</td></tr></table> </td></tr> <tr> <td title='0x020c = 524'>0x020c</td> <td>ReleaseMode3</td> <td class=c>int8u</td> <td><span class=s>0 = Normal <br>1 = Continuous <br>2 = Bracketing <br>4 = Continuous - Burst <br>5 = Continuous - Speed/Advance Priority</span></td></tr> <tr class=b> <td title='0x0210 = 528'>0x0210</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr> <td title='0x021c = 540'>0x021c</td> <td>FlashMode</td> <td class=c>int8u</td> <td><span class=s>0 = Autoflash <br>1 = Fill-flash <br>2 = Flash Off <br>3 = Slow Sync <br>4 = Rear Sync</span></td></tr> <tr class=b> <td title='0x0222 = 546'>0x0222</td> <td>StopsAboveBaseISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0224 = 548'>0x0224</td> <td>BrightnessValue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0228 = 552'>0x0228</td> <td>DynamicRangeOptimizer</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>3 = Lv1 <br>4 = Lv2</td><td>&nbsp;&nbsp;</td> <td>5 = Lv3 <br>6 = Lv4 <br>7 = Lv5 <br>8 = n/a</td></tr></table> </td></tr> <tr> <td title='0x022c = 556'>0x022c</td> <td>HDRSetting</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = HDR Auto <br>3 = HDR 1 EV <br>5 = HDR 2 EV</td><td>&nbsp;&nbsp;</td> <td>7 = HDR 3 EV <br>9 = HDR 4 EV <br>11 = HDR 5 EV <br>13 = HDR 6 EV</td></tr></table> </td></tr> <tr class=b> <td title='0x0230 = 560'>0x0230</td> <td>ExposureCompensation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0246 = 582'>0x0246</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr class=b> <td title='0x0247 = 583'>0x0247</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr> <td title='0x024b = 587'>0x024b</td> <td>PictureEffect2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#PictureEffect2'>Sony PictureEffect2 Values</a></td></tr> <tr class=b> <td title='0x0258 = 600'>0x0258</td> <td>Quality2</td> <td class=c>int8u</td> <td><span class=s>0 = JPEG <br>1 = RAW <br>2 = RAW + JPEG</span></td></tr> <tr> <td title='0x025c = 604'>0x025c</td> <td>MeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = Multi-segment <br>2 = Center-weighted average <br>3 = Spot</span></td></tr> <tr class=b> <td title='0x025d = 605'>0x025d</td> <td>ExposureProgram</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ExposureProgram3'>Sony ExposureProgram3 Values</a></td></tr> <tr> <td title='0x0264 = 612'>0x0264</td> <td>WB_RGBLevels</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x032c = 812'>0x032c</td> <td>FocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x032e = 814'>0x032e</td> <td>MinFocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0330 = 816'>0x0330</td> <td>MaxFocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0344 = 836'>0x0344</td> <td>SonyISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0388 = 904'>0x0388</td> <td>MeterInfo?</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#MeterInfo'>Sony MeterInfo Tags</a></td></tr> <tr> <td title='0x189c = 6300'>0x189c</td> <td>LensParameters?</td> <td class=c title=' ~ = Writable only with -n'>int16s[16]~</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x18bd = 6333'>0x18bd</td> <td>LensFormat</td> <td class=c>int8u</td> <td><span class=s>0 = Unknown <br>1 = APS-C <br>2 = Full-frame</span></td></tr> <tr> <td title='0x18be = 6334'>0x18be</td> <td>LensMount</td> <td class=c>int8u</td> <td><span class=s>0 = Unknown <br>1 = A-mount <br>2 = E-mount</span></td></tr> <tr class=b> <td title='0x18bf = 6335'>0x18bf</td> <td>LensType2</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#LensType2'>Sony LensType2 Values</a></td></tr> <tr> <td title='0x18c2 = 6338'>0x18c2</td> <td>LensType</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#LensType'>Sony LensType Values</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag2010h'>Sony Tag2010h Tags</a></h2> <p>Valid for DSC-HX90V/RX1RM2/RX10M2/RX100M4/WX500, ILCE-7RM2/7SM2.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>ReleaseMode2</td> <td class=c>int32u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x0050 = 80'>0x0050</td> <td>DynamicRangeOptimizer</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>3 = Lv1 <br>4 = Lv2</td><td>&nbsp;&nbsp;</td> <td>5 = Lv3 <br>6 = Lv4 <br>7 = Lv5 <br>8 = n/a</td></tr></table> </td></tr> <tr> <td title='0x020c = 524'>0x020c</td> <td>ReleaseMode3</td> <td class=c>int8u</td> <td><span class=s>0 = Normal <br>1 = Continuous <br>2 = Bracketing <br>4 = Continuous - Burst <br>5 = Continuous - Speed/Advance Priority</span></td></tr> <tr class=b> <td title='0x0210 = 528'>0x0210</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr> <td title='0x021c = 540'>0x021c</td> <td>FlashMode</td> <td class=c>int8u</td> <td><span class=s>0 = Autoflash <br>1 = Fill-flash <br>2 = Flash Off <br>3 = Slow Sync <br>4 = Rear Sync</span></td></tr> <tr class=b> <td title='0x0222 = 546'>0x0222</td> <td>StopsAboveBaseISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0224 = 548'>0x0224</td> <td>BrightnessValue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0228 = 552'>0x0228</td> <td>DynamicRangeOptimizer</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = Auto <br>3 = Lv1 <br>4 = Lv2</td><td>&nbsp;&nbsp;</td> <td>5 = Lv3 <br>6 = Lv4 <br>7 = Lv5 <br>8 = n/a</td></tr></table> </td></tr> <tr> <td title='0x022c = 556'>0x022c</td> <td>HDRSetting</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Off <br>1 = HDR Auto <br>3 = HDR 1 EV <br>5 = HDR 2 EV</td><td>&nbsp;&nbsp;</td> <td>7 = HDR 3 EV <br>9 = HDR 4 EV <br>11 = HDR 5 EV <br>13 = HDR 6 EV</td></tr></table> </td></tr> <tr class=b> <td title='0x0230 = 560'>0x0230</td> <td>ExposureCompensation</td> <td class=c>int16s</td> <td>&nbsp;</td></tr> <tr> <td title='0x0246 = 582'>0x0246</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr class=b> <td title='0x0247 = 583'>0x0247</td> <td>PictureProfile</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard/Neutral - Gamma Still (PP2) <br>1 = Portrait <br>3 = Night View/Portrait <br>4 = B&amp;W/Sepia <br>5 = Clear <br>6 = Deep <br>7 = Light <br>8 = Vivid <br>9 = Real <br>10 = Gamma Movie (PP1) <br>22 = Gamma ITU709 (PP3) <br>23 = ColorTone ITU709 (PP4) <br>24 = Gamma Cine1 (PP5) <br>25 = Gamma Cine2 (PP6) <br>26 = Gamma Cine3 <br>27 = Gamma Cine4 <br>28 = Gamma S-Log2 (PP7) <br>29 = Gamma ITU709(800%)</td></tr></table> </td></tr> <tr> <td title='0x024b = 587'>0x024b</td> <td>PictureEffect2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#PictureEffect2'>Sony PictureEffect2 Values</a></td></tr> <tr class=b> <td title='0x0258 = 600'>0x0258</td> <td>Quality2</td> <td class=c>int8u</td> <td><span class=s>0 = JPEG <br>1 = RAW <br>2 = RAW + JPEG</span></td></tr> <tr> <td title='0x025c = 604'>0x025c</td> <td>MeteringMode</td> <td class=c>int8u</td> <td><span class=s>0 = Multi-segment <br>2 = Center-weighted average <br>3 = Spot</span></td></tr> <tr class=b> <td title='0x025d = 605'>0x025d</td> <td>ExposureProgram</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ExposureProgram3'>Sony ExposureProgram3 Values</a></td></tr> <tr> <td title='0x0264 = 612'>0x0264</td> <td>WB_RGBLevels</td> <td class=c>int16u[3]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x032c = 812'>0x032c</td> <td>FocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x032e = 814'>0x032e</td> <td>MinFocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0330 = 816'>0x0330</td> <td>MaxFocalLength</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0346 = 838'>0x0346</td> <td>SonyISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0388 = 904'>0x0388</td> <td>MeterInfo?</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#MeterInfo'>Sony MeterInfo Tags</a></td></tr> <tr> <td title='0x18cc = 6348'>0x18cc</td> <td>LensParameters?</td> <td class=c title=' ~ = Writable only with -n'>int16s[16]~</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x18ed = 6381'>0x18ed</td> <td>LensFormat</td> <td class=c>int8u</td> <td><span class=s>0 = Unknown <br>1 = APS-C <br>2 = Full-frame</span></td></tr> <tr> <td title='0x18ee = 6382'>0x18ee</td> <td>LensMount</td> <td class=c>int8u</td> <td><span class=s>0 = Unknown <br>1 = A-mount <br>2 = E-mount</span></td></tr> <tr class=b> <td title='0x18ef = 6383'>0x18ef</td> <td>LensType2</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#LensType2'>Sony LensType2 Values</a></td></tr> <tr> <td title='0x18f2 = 6386'>0x18f2</td> <td>LensType</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#LensType'>Sony LensType Values</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='ShotInfo'>Sony ShotInfo Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>FaceInfoOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>SonyDateTime</td> <td class=c>string[20]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='26 = 0x1a'>26</td> <td>SonyImageHeight</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='28 = 0x1c'>28</td> <td>SonyImageWidth</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>FacesDetected</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>FaceInfoLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='52 = 0x34'>52</td> <td>MetaVersion</td> <td class=c>string[16]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='72 = 0x48'>72</td> <td>FaceInfo1</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#FaceInfo1'>Sony FaceInfo1 Tags</a></td></tr> <tr> <td class=r title='94 = 0x5e'>94</td> <td>FaceInfo2</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#FaceInfo2'>Sony FaceInfo2 Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceInfo1'>Sony FaceInfo1 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Face1Position</td> <td class=c>int16u[4]</td> <td><span class=s><span class=n>(top, left, height and width of detected face. Coordinates are relative to the full-sized unrotated image, with increasing Y downwards)</span></span></td></tr> <tr class=b> <td class=r title='32 = 0x20'>32</td> <td>Face2Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='64 = 0x40'>64</td> <td>Face3Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='96 = 0x60'>96</td> <td>Face4Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='128 = 0x80'>128</td> <td>Face5Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='160 = 0xa0'>160</td> <td>Face6Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='192 = 0xc0'>192</td> <td>Face7Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='224 = 0xe0'>224</td> <td>Face8Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='FaceInfo2'>Sony FaceInfo2 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>Face1Position</td> <td class=c>int16u[4]</td> <td><span class=s><span class=n>(top, left, height and width of detected face. Coordinates are relative to the full-sized unrotated image, with increasing Y downwards)</span></span></td></tr> <tr class=b> <td class=r title='37 = 0x25'>37</td> <td>Face2Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='74 = 0x4a'>74</td> <td>Face3Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='111 = 0x6f'>111</td> <td>Face4Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='148 = 0x94'>148</td> <td>Face5Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='185 = 0xb9'>185</td> <td>Face6Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td class=r title='222 = 0xde'>222</td> <td>Face7Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='259 = 0x103'>259</td> <td>Face8Position</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag900b'>Sony Tag900b Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>FacesDetected</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = 0 <br>33 = 5 <br>57 = 2</td><td>&nbsp;&nbsp;</td> <td>77 = 4 <br>93 = 3 <br>98 = 1</td><td>&nbsp;&nbsp;</td> <td>115 = 8 <br>168 = 6 <br>241 = 7</td></tr></table> </td></tr> <tr class=b> <td title='0x00bd = 189'>0x00bd</td> <td>FaceDetection</td> <td class=c>N</td> <td><span class=s>0 = Off <br>98 = On</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag9050'>Sony Tag9050 Tags</a></h2> <p>Data for tags 0x9050, 0x94xx and 0x2010 is encrypted by a simple substitution cipher, but the deciphered values are listed below.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>MaxAperture</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>MinAperture</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0031 = 49'>0x0031</td> <td>FlashStatus</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = No Flash present <br>2 = Flash Inhibited <br>64 = Built-in Flash present <br>65 = Built-in Flash Fired <br>66 = Built-in Flash Inhibited <br>128 = External Flash present <br>129 = External Flash Fired</td></tr></table> </td></tr> <tr class=b> <td title='0x0032 = 50'>0x0032</td> <td>ImageCount</td> <td class=c>int32u</td> <td><span class=s><span class=n>(total number of image exposures made by the camera)</span></span></td></tr> <tr> <td title='0x0039 = 57'>0x0039</td> <td>FlashStatus</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = No Flash present <br>2 = Flash Inhibited <br>64 = Built-in Flash present <br>65 = Built-in Flash Fired <br>66 = Built-in Flash Inhibited <br>128 = External Flash present <br>129 = External Flash Fired</td></tr></table> </td></tr> <tr class=b> <td title='0x003a = 58'>0x003a</td> <td>ImageCount</td> <td class=c>int32u</td> <td><span class=s><span class=n>(total number of image exposures made by the camera)</span></span></td></tr> <tr> <td title='0x003c = 60'>0x003c</td> <td>SonyFNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x003f = 63'>0x003f</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr> <td title='0x0046 = 70'>0x0046</td> <td>SonyExposureTime</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0048 = 72'>0x0048</td> <td>SonyFNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x004b = 75'>0x004b</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x004c = 76'>0x004c</td> <td>ImageCount2</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0051 = 81'>0x0051</td> <td>SonyDateTime2</td> <td class=c>undef[6]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0058 = 88'>0x0058</td> <td>ImageCount2</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x005d = 93'>0x005d</td> <td>SonyDateTime2</td> <td class=c>undef[6]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0067 = 103'>0x0067</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr> <td title='0x0073 = 115'>0x0073</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x007c = 124'>0x007c</td> <td>InternalSerialNumber</td> <td class=c title=' ~ = Writable only with -n'>int8u[4]~</td> <td>&nbsp;</td></tr> <tr> <td title='0x0088 = 136'>0x0088</td> <td>InternalSerialNumber</td> <td class=c title=' ~ = Writable only with -n'>int8u[6]~</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00f0 = 240'>0x00f0</td> <td>InternalSerialNumber</td> <td class=c>int8u[5]</td> <td>&nbsp;</td></tr> <tr> <td title='0x0105 = 261'>0x0105</td> <td>LensMount</td> <td class=c>int8u</td> <td><span class=s>0 = Unknown <br>1 = A-mount <br>2 = E-mount</span></td></tr> <tr class=b> <td title='0x0106 = 262'>0x0106</td> <td>LensFormat</td> <td class=c>int8u</td> <td><span class=s>0 = Unknown <br>1 = APS-C <br>2 = Full-frame</span></td></tr> <tr> <td title='0x0107 = 263'>0x0107</td> <td>LensType2</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#LensType2'>Sony LensType2 Values</a></td></tr> <tr class=b> <td title='0x0109 = 265'>0x0109</td> <td>LensType</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#LensType'>Sony LensType Values</a> <br><span class='n s'>(SLT models, and NEX with A-mount lenses)</span></td></tr> <tr> <td title='0x0115 = 277'>0x0115</td> <td>LensSpecFeatures</td> <td class=c>undef[2]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0116 = 278'>0x0116</td> <td>LensSpecFeatures</td> <td class=c>undef[2]</td> <td>&nbsp;</td></tr> <tr> <td title='0x01a0 = 416'>0x01a0</td> <td>ImageCount3</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x01aa = 426'>0x01aa</td> <td>ImageCount3</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x01bd = 445'>0x01bd</td> <td>ImageCount3</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x01cb = 459'>0x01cb</td> <td>ImageCount3</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag9400a'>Sony Tag9400a Tags</a></h2> <p>Valid for many DSC, NEX and SLT models</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>SequenceImageNumber</td> <td class=c>int32u</td> <td><span class=s><span class=n>(number of images captured in burst sequence)</span></span></td></tr> <tr class=b> <td title='0x000c = 12'>0x000c</td> <td>SequenceFileNumber</td> <td class=c>int32u</td> <td><span class=s><span class=n>(file number in burst sequence)</span></span></td></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x0012 = 18'>0x0012</td> <td>DigitalZoom</td> <td class=c>int8u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td title='0x001a = 26'>0x001a</td> <td>ShotNumberSincePowerUp</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0022 = 34'>0x0022</td> <td>SequenceLength</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Continuous <br>1 = 1 shot <br>2 = 2 shots <br>3 = 3 shots <br>4 = 4 shots <br>5 = 5 shots <br>6 = 6 shots <br>10 = 10 shots <br>100 = Continuous - iSweep Panorama <br>200 = Continuous - Sweep Panorama</td></tr></table> </td></tr> <tr> <td title='0x0028 = 40'>0x0028</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>1 = Horizontal (normal) <br>3 = Rotate 180 <br>6 = Rotate 90 CW <br>8 = Rotate 270 CW</span></td></tr> <tr class=b> <td title='0x0029 = 41'>0x0029</td> <td>Quality2</td> <td class=c>int8u</td> <td><span class=s>0 = JPEG <br>1 = RAW <br>2 = RAW + JPEG <br>3 = JPEG + MPO</span></td></tr> <tr> <td title='0x0044 = 68'>0x0044</td> <td>SonyImageHeight</td> <td class=c title=' ~ = Writable only with -n'>int16u~</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0052 = 82'>0x0052</td> <td>ModelReleaseYear</td> <td class=c title=' ~ = Writable only with -n'>int8u~</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag9400b'>Sony Tag9400b Tags</a></h2> <p>Valid for NEX-3N, ILCE-3000/3500, SLT-A58, DSC-WX60, DSC-WX300, DSC-RX100M2, DSC-HX50V, DSC-QX10/QX100.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>SequenceImageNumber</td> <td class=c>int32u</td> <td><span class=s><span class=n>(number of images captured in burst sequence)</span></span></td></tr> <tr class=b> <td title='0x000c = 12'>0x000c</td> <td>SequenceFileNumber</td> <td class=c>int32u</td> <td><span class=s><span class=n>(file number in burst sequence)</span></span></td></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x0012 = 18'>0x0012</td> <td>DigitalZoom</td> <td class=c>int8u</td> <td><span class=s>0 = No <br>1 = Yes</span></td></tr> <tr> <td title='0x0016 = 22'>0x0016</td> <td>ShotNumberSincePowerUp</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x001e = 30'>0x001e</td> <td>SequenceLength</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Continuous <br>1 = 1 shot <br>2 = 2 shots <br>3 = 3 shots <br>4 = 4 shots <br>5 = 5 shots <br>6 = 6 shots <br>10 = 10 shots <br>100 = Continuous - iSweep Panorama <br>200 = Continuous - Sweep Panorama</td></tr></table> </td></tr> <tr> <td title='0x0024 = 36'>0x0024</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>1 = Horizontal (normal) <br>3 = Rotate 180 <br>6 = Rotate 90 CW <br>8 = Rotate 270 CW</span></td></tr> <tr class=b> <td title='0x0025 = 37'>0x0025</td> <td>Quality2</td> <td class=c>int8u</td> <td><span class=s>0 = JPEG <br>1 = RAW <br>2 = RAW + JPEG <br>3 = JPEG + MPO</span></td></tr> <tr> <td title='0x003f = 63'>0x003f</td> <td>SonyImageHeight</td> <td class=c title=' ~ = Writable only with -n'>int16u~</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0046 = 70'>0x0046</td> <td>ModelReleaseYear</td> <td class=c title=' ~ = Writable only with -n'>int8u~</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag9400c'>Sony Tag9400c Tags</a></h2> <p>Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350, ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0009 = 9'>0x0009</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x000a = 10'>0x000a</td> <td>ShotNumberSincePowerUp</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0012 = 18'>0x0012</td> <td>SequenceImageNumber</td> <td class=c>int32u</td> <td><span class=s><span class=n>(number of images captured in burst sequence)</span></span></td></tr> <tr class=b> <td title='0x0016 = 22'>0x0016</td> <td>SequenceLength</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Continuous <br>1 = 1 shot <br>2 = 2 shots <br>3 = 3 shots <br>4 = 4 shots <br>5 = 5 shots <br>6 = 6 shots <br>10 = 10 shots <br>100 = Continuous - iSweep Panorama <br>200 = Continuous - Sweep Panorama</td></tr></table> </td></tr> <tr> <td title='0x001a = 26'>0x001a</td> <td>SequenceFileNumber</td> <td class=c>int32u</td> <td><span class=s><span class=n>(file number in burst sequence)</span></span></td></tr> <tr class=b> <td title='0x001e = 30'>0x001e</td> <td>SequenceLength</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Continuous <br>1 = 1 file <br>2 = 2 files</td><td>&nbsp;&nbsp;</td> <td>3 = 3 files <br>5 = 5 files <br>10 = 10 files</td></tr></table> </td></tr> <tr> <td title='0x0029 = 41'>0x0029</td> <td>CameraOrientation</td> <td class=c>int8u</td> <td><span class=s>1 = Horizontal (normal) <br>3 = Rotate 180 <br>6 = Rotate 90 CW <br>8 = Rotate 270 CW</span></td></tr> <tr class=b> <td title='0x002a = 42'>0x002a</td> <td>Quality2</td> <td class=c>int8u</td> <td><span class=s>0 = JPEG <br>1 = RAW <br>2 = RAW + JPEG <br>3 = JPEG + MPO</span></td></tr> <tr> <td title='0x0047 = 71'>0x0047</td> <td>SonyImageHeight</td> <td class=c title=' ~ = Writable only with -n'>int16u~</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0053 = 83'>0x0053</td> <td>ModelReleaseYear</td> <td class=c title=' ~ = Writable only with -n'>int8u~</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag9402'>Sony Tag9402 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>AmbientTemperature</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0016 = 22'>0x0016</td> <td>FocusMode</td> <td class=c>int8u</td> <td><span class=s>[Mask 0x7f] <br>0x0 = Manual <br>0x2 = AF-S <br>0x3 = AF-C <br>0x4 = AF-A <br>0x6 = DMF</span></td></tr> <tr> <td title='0x0017 = 23'>0x0017</td> <td>AFAreaMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Multi <br>1 = Center <br>2 = Spot <br>3 = Flexible Spot <br>10 = Selective (for Miniature effect) <br>11 = Zone <br>12 = Expanded Flexible Spot <br>14 = Tracking <br>15 = Face Tracking <br>255 = Manual</td></tr></table> </td></tr> <tr class=b> <td title='0x002d = 45'>0x002d</td> <td>FocusPosition2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag9403'>Sony Tag9403 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>CameraTemperature</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag9404a'>Sony Tag9404a Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0019 = 25'>0x0019</td> <td>LensZoomPosition</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag9404b'>Sony Tag9404b Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x001e = 30'>0x001e</td> <td>LensZoomPosition</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0020 = 32'>0x0020</td> <td>FocusPosition2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag9405a'>Sony Tag9405a Tags</a></h2> <p>Valid for SLT, NEX, ILCE-3000/3500 and several DSC models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0601 = 1537'>0x0601</td> <td>DistortionCorrection</td> <td class=c>int8u</td> <td><span class=s>0 = None <br>1 = Applied</span></td></tr> <tr class=b> <td title='0x0603 = 1539'>0x0603</td> <td>LensFormat</td> <td class=c>int8u</td> <td><span class=s>0 = Unknown <br>1 = APS-C <br>2 = Full-frame</span></td></tr> <tr> <td title='0x0604 = 1540'>0x0604</td> <td>LensMount</td> <td class=c>int8u</td> <td><span class=s>0 = Unknown <br>1 = A-mount <br>2 = E-mount</span></td></tr> <tr class=b> <td title='0x0605 = 1541'>0x0605</td> <td>LensType2</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#LensType2'>Sony LensType2 Values</a> <br><span class='n s'>(E-mount lenses)</span></td></tr> <tr> <td title='0x0608 = 1544'>0x0608</td> <td>LensType</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#LensType'>Sony LensType Values</a> <br><span class='n s'>(A-mount lenses on SLT and NEX)</span></td></tr> <tr class=b> <td title='0x06ca = 1738'>0x06ca</td> <td>LensParameters?</td> <td class=c title=' ~ = Writable only with -n'>int16s[16]~</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag9405b'>Sony Tag9405b Tags</a></h2> <p>Valid for DSC-HX400V/HX60V/QX30/RX10/RX100M3/WX220/WX350, ILCE-7/7R/7S/7M2/5000/5100/6000/QX1, ILCA-77M2.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>SonyISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0006 = 6'>0x0006</td> <td>BaseISO</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000a = 10'>0x000a</td> <td>StopsAboveBaseISO</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000e = 14'>0x000e</td> <td>SonyExposureTime2</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>ExposureTime</td> <td class=c>rational32u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0014 = 20'>0x0014</td> <td>SonyFNumber</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0016 = 22'>0x0016</td> <td>SonyMaxApertureValue</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0024 = 36'>0x0024</td> <td>SequenceImageNumber</td> <td class=c>int32u</td> <td><span class=s><span class=n>(number of images captured in burst sequence)</span></span></td></tr> <tr> <td title='0x0034 = 52'>0x0034</td> <td>ReleaseMode2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ReleaseMode2'>Sony ReleaseMode2 Values</a></td></tr> <tr class=b> <td title='0x0042 = 66'>0x0042</td> <td>HighISONoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = Low <br>2 = Normal <br>3 = High</span></td></tr> <tr> <td title='0x0044 = 68'>0x0044</td> <td>LongExposureNoiseReduction</td> <td class=c>int8u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x0046 = 70'>0x0046</td> <td>PictureEffect2</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#PictureEffect2'>Sony PictureEffect2 Values</a></td></tr> <tr> <td title='0x0048 = 72'>0x0048</td> <td>ExposureProgram</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ExposureProgram3'>Sony ExposureProgram3 Values</a></td></tr> <tr class=b> <td title='0x004a = 74'>0x004a</td> <td>CreativeStyle</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Standard <br>1 = Vivid <br>2 = Neutral <br>3 = Portrait <br>4 = Landscape <br>5 = B&amp;W <br>6 = Clear <br>7 = Deep <br>8 = Light <br>9 = Sunset <br>10 = Night View/Portrait <br>11 = Autumn Leaves <br>13 = Sepia</td></tr></table> </td></tr> <tr> <td title='0x0052 = 82'>0x0052</td> <td>Sharpness</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x005b = 91'>0x005b</td> <td>DistortionCorrection</td> <td class=c>int8u</td> <td><span class=s>0 = None <br>1 = Applied</span></td></tr> <tr> <td title='0x005d = 93'>0x005d</td> <td>LensFormat</td> <td class=c>int8u</td> <td><span class=s>0 = Unknown <br>1 = APS-C <br>2 = Full-frame</span></td></tr> <tr class=b> <td title='0x005e = 94'>0x005e</td> <td>LensMount</td> <td class=c>int8u</td> <td><span class=s>0 = Unknown <br>1 = A-mount <br>2 = E-mount</span></td></tr> <tr> <td title='0x0060 = 96'>0x0060</td> <td>LensType2</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#LensType2'>Sony LensType2 Values</a> <br><span class='n s'>(E-mount lenses)</span></td></tr> <tr class=b> <td title='0x0062 = 98'>0x0062</td> <td>LensType</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#LensType'>Sony LensType Values</a> <br><span class='n s'>(A-mount lenses on SLT and NEX)</span></td></tr> <tr> <td title='0x0064 = 100'>0x0064</td> <td>LensParameters?</td> <td class=c title=' ~ = Writable only with -n'>int16s[16]~</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0342 = 834'>0x0342</td> <td>LensZoomPosition</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x035a = 858'>0x035a</td> <td>LensZoomPosition</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag9406'>Sony Tag9406 Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>BatteryTemperature</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0006 = 6'>0x0006</td> <td>BatteryLevelGrip1</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0007 = 7'>0x0007</td> <td>BatteryLevel</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0008 = 8'>0x0008</td> <td>BatteryLevelGrip2</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag940a'>Sony Tag940a Tags</a></h2> <p>These tags are currently extracted for SLT models only.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>AFPointsSelected</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>0x0 = (none) <br>0x7801 = Center Zone <br>0x1821c = Right Zone <br>0x605c0 = Left Zone <br>0x7fffffff = (all) <br>Bit 0 = Center <br>Bit 1 = Top <br>Bit 2 = Upper-right <br>Bit 3 = Right <br>Bit 4 = Lower-right <br>Bit 5 = Bottom <br>Bit 6 = Lower-left</td><td>&nbsp;&nbsp;</td> <td>Bit 7 = Left <br>Bit 8 = Upper-left <br>Bit 9 = Far Right <br>Bit 10 = Far Left <br>Bit 11 = Upper-middle <br>Bit 12 = Near Right <br>Bit 13 = Lower-middle <br>Bit 14 = Near Left <br>Bit 15 = Upper Far Right <br>Bit 16 = Lower Far Right <br>Bit 17 = Lower Far Left <br>Bit 18 = Upper Far Left</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag940c'>Sony Tag940c Tags</a></h2> <p>NEX and ILCE models only.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>LensMount2</td> <td class=c>int8u</td> <td><span class=s>0 = Unknown <br>1 = A-mount (1) <br>4 = E-mount <br>5 = A-mount (5)</span></td></tr> <tr class=b> <td title='0x0009 = 9'>0x0009</td> <td>LensType3</td> <td class=c>int16u</td> <td>--&gt; <a href='Sony.html#LensType3'>Sony LensType3 Values</a></td></tr> <tr> <td title='0x000b = 11'>0x000b</td> <td>CameraE-mountVersion</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000d = 13'>0x000d</td> <td>LensE-mountVersion</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x0015 = 21'>0x0015</td> <td>LensFirmwareVersion</td> <td class=c>int8u</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LensType3'>Sony LensType3 Values</a></h2> <p>Lens type numbers for Sony E-mount lenses used by NEX models.</p> <blockquote> <table class=frame><tr><td> <table class='inner sep' cellspacing=1> <tr class=h><th>Value</th><th>LensType3</th></tr> <tr><td class=r>0</td><td>= Unknown E-mount lens or other lens</td> </tr><tr><td class=r>1</td><td>= Sony LA-EA1 Adapter</td> </tr><tr><td class=r>2</td><td>= Sony LA-EA2 Adapter</td> </tr><tr><td class=r>3</td><td>= Sony LA-EA3 Adapter</td> </tr><tr><td class=r>6</td><td>= Sony LA-EA4 Adapter</td> </tr><tr><td class=r>44</td><td>= Metabones Canon EF Smart Adapter</td> </tr><tr><td class=r>78</td><td>= Metabones Canon EF Smart Adapter Mark III or Other Adapter</td> </tr><tr><td class=r>234</td><td>= Metabones Canon EF Smart Adapter Mark IV</td> </tr><tr><td class=r>239</td><td>= Metabones Canon EF Speed Booster</td> </tr><tr><td class=r>32784</td><td>= Sony E 16mm F2.8</td> </tr><tr><td class=r>32785</td><td>= Sony E 18-55mm F3.5-5.6 OSS</td> </tr><tr><td class=r>32786</td><td>= Sony E 55-210mm F4.5-6.3 OSS</td> </tr><tr><td class=r>32787</td><td>= Sony E 18-200mm F3.5-6.3 OSS</td> </tr><tr><td class=r>32788</td><td>= Sony E 30mm F3.5 Macro</td> </tr><tr><td class=r>32789</td><td>= Sony E 24mm F1.8 ZA</td> </tr><tr><td class=r>32790</td><td>= Sony E 50mm F1.8 OSS</td> </tr><tr><td class=r>32791</td><td>= Sony E 16-70mm F4 ZA OSS</td> </tr><tr><td class=r>32792</td><td>= Sony E 10-18mm F4 OSS</td> </tr><tr><td class=r>32793</td><td>= Sony E PZ 16-50mm F3.5-5.6 OSS</td> </tr><tr><td class=r>32794</td><td>= Sony FE 35mm F2.8 ZA</td> </tr><tr><td class=r>32795</td><td>= Sony FE 24-70mm F4 ZA OSS</td> </tr><tr><td class=r>32797</td><td>= Sony E 18-200mm F3.5-6.3 OSS LE</td> </tr><tr><td class=r>32798</td><td>= Sony E 20mm F2.8</td> </tr><tr><td class=r>32799</td><td>= Sony E 35mm F1.8 OSS</td> </tr><tr><td class=r>32800</td><td>= Sony E PZ 18-105mm F4 G OSS</td> </tr><tr><td class=r>32802</td><td>= Sony FE 90mm F2.8 Macro G OSS</td> </tr><tr><td class=r>32803</td><td>= Sony E 18-50mm F4-5.6</td> </tr><tr><td class=r>32807</td><td>= Sony E PZ 18-200mm F3.5-6.3 OSS</td> </tr><tr><td class=r>32808</td><td>= Sony FE 55mm F1.8 ZA</td> </tr><tr><td class=r>32810</td><td>= Sony FE 70-200mm F4 G OSS</td> </tr><tr><td class=r>32811</td><td>= Sony FE 16-35mm F4 ZA OSS</td> </tr><tr><td class=r>32813</td><td>= Sony FE 28-70mm F3.5-5.6 OSS</td> </tr><tr><td class=r>32814</td><td>= Sony FE 35mm F1.4 ZA</td> </tr><tr><td class=r>32815</td><td>= Sony FE 24-240mm F3.5-6.3 OSS</td> </tr><tr><td class=r>32816</td><td>= Sony FE 28mm F2</td> </tr><tr><td class=r>32817</td><td>= Sony FE PZ 28-135mm F4 G OSS</td> </tr><tr><td class=r>32826</td><td>= Sony FE 21mm F2.8 (SEL28F20 + SEL075UWC)</td> </tr><tr><td class=r>32827</td><td>= Sony FE 16mm F3.5 Fisheye (SEL28F20 + SEL057FEC)</td> </tr><tr><td class=r>49216</td><td>= Zeiss Batis 25mm F2</td> </tr><tr><td class=r>49217</td><td>= Zeiss Batis 85mm F1.8</td> </tr><tr><td class=r>49234</td><td>= Zeiss Loxia 21mm F2.8</td> </tr></table></td></tr></table></blockquote> <h2><a name='AFInfo'>Sony AFInfo Tags</a></h2> <p>These tags are currently extracted for SLT models only.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>AFType</td> <td class=c>int8u</td> <td><span class=s>1 = 15-point <br>2 = 19-point <br>3 = 79-point</span></td></tr> <tr class=b> <td title='0x0004 = 4'>0x0004</td> <td>AFStatusActiveSensor</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td title='0x0005 = 5'>0x0005</td> <td>FocusMode</td> <td class=c>int8u</td> <td><span class=s><span class=n>(ILCA models only)</span> <br>0 = Manual <br>2 = AF-S <br>3 = AF-C <br>4 = AF-A</span></td></tr> <tr class=b> <td title='0x0007 = 7'>0x0007</td> <td>AFPoint</td> <td class=c>int8u</td> <td><span class=s><span class=n>(models with 15-point AF)</span></span><table class=cols><tr> <td>0 = Upper-left <br>1 = Left <br>2 = Lower-left <br>3 = Far Left <br>4 = Top (horizontal) <br>5 = Near Right <br>6 = Center (horizontal) <br>7 = Near Left <br>8 = Bottom (horizontal)</td><td>&nbsp;&nbsp;</td> <td>9 = Top (vertical) <br>10 = Center (vertical) <br>11 = Bottom (vertical) <br>12 = Far Right <br>13 = Upper-right <br>14 = Right <br>15 = Lower-right <br>16 = Upper-middle <br>17 = Lower-middle</td></tr></table> <span class=s><span class=n>(models with 19-point AF)</span></span><table class=cols><tr> <td>0 = Upper Far Left <br>1 = Upper-left (horizontal) <br>2 = Far Left (horizontal) <br>3 = Left (horizontal) <br>4 = Lower Far Left <br>5 = Lower-left (horizontal) <br>6 = Upper-left (vertical) <br>7 = Left (vertical) <br>8 = Lower-left (vertical) <br>9 = Far Left (vertical) <br>10 = Top (horizontal) <br>11 = Near Right <br>12 = Center (horizontal) <br>13 = Near Left <br>14 = Bottom (horizontal)</td><td>&nbsp;&nbsp;</td> <td>15 = Top (vertical) <br>16 = Upper-middle <br>17 = Center (vertical) <br>18 = Lower-middle <br>19 = Bottom (vertical) <br>20 = Upper Far Right <br>21 = Upper-right (horizontal) <br>22 = Far Right (horizontal) <br>23 = Right (horizontal) <br>24 = Lower Far Right <br>25 = Lower-right (horizontal) <br>26 = Far Right (vertical) <br>27 = Upper-right (vertical) <br>28 = Right (vertical) <br>29 = Lower-right (vertical)</td></tr></table> </td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>AFPointInFocus</td> <td class=c>int8u</td> <td><span class=s><span class=n>(models with 15-point AF)</span></span><table class=cols><tr> <td>0 = Upper-left <br>1 = Left <br>2 = Lower-left <br>3 = Far Left <br>4 = Top (horizontal) <br>5 = Near Right <br>6 = Center (horizontal) <br>7 = Near Left <br>8 = Bottom (horizontal) <br>9 = Top (vertical)</td><td>&nbsp;&nbsp;</td> <td>10 = Center (vertical) <br>11 = Bottom (vertical) <br>12 = Far Right <br>13 = Upper-right <br>14 = Right <br>15 = Lower-right <br>16 = Upper-middle <br>17 = Lower-middle <br>255 = (none)</td></tr></table> <span class=s><span class=n>(models with 19-point AF)</span></span><table class=cols><tr> <td>0 = Upper Far Left <br>1 = Upper-left (horizontal) <br>2 = Far Left (horizontal) <br>3 = Left (horizontal) <br>4 = Lower Far Left <br>5 = Lower-left (horizontal) <br>6 = Upper-left (vertical) <br>7 = Left (vertical) <br>8 = Lower-left (vertical) <br>9 = Far Left (vertical) <br>10 = Top (horizontal) <br>11 = Near Right <br>12 = Center (horizontal) <br>13 = Near Left <br>14 = Bottom (horizontal) <br>15 = Top (vertical)</td><td>&nbsp;&nbsp;</td> <td>16 = Upper-middle <br>17 = Center (vertical) <br>18 = Lower-middle <br>19 = Bottom (vertical) <br>20 = Upper Far Right <br>21 = Upper-right (horizontal) <br>22 = Far Right (horizontal) <br>23 = Right (horizontal) <br>24 = Lower Far Right <br>25 = Lower-right (horizontal) <br>26 = Far Right (vertical) <br>27 = Upper-right (vertical) <br>28 = Right (vertical) <br>29 = Lower-right (vertical) <br>255 = (none)</td></tr></table> </td></tr> <tr class=b> <td title='0x0009 = 9'>0x0009</td> <td>AFPointAtShutterRelease</td> <td class=c>int8u</td> <td><span class=s><span class=n>(models with 15-point AF)</span></span><table class=cols><tr> <td>0 = Upper-left <br>1 = Left <br>2 = Lower-left <br>3 = Far Left <br>4 = Top (horizontal) <br>5 = Near Right <br>6 = Center (horizontal) <br>7 = Near Left <br>8 = Bottom (horizontal) <br>9 = Top (vertical)</td><td>&nbsp;&nbsp;</td> <td>10 = Center (vertical) <br>11 = Bottom (vertical) <br>12 = Far Right <br>13 = Upper-right <br>14 = Right <br>15 = Lower-right <br>16 = Upper-middle <br>17 = Lower-middle <br>30 = (out of focus)</td></tr></table> <span class=s><span class=n>(models with 19-point AF)</span></span><table class=cols><tr> <td>0 = Upper Far Left <br>1 = Upper-left (horizontal) <br>2 = Far Left (horizontal) <br>3 = Left (horizontal) <br>4 = Lower Far Left <br>5 = Lower-left (horizontal) <br>6 = Upper-left (vertical) <br>7 = Left (vertical) <br>8 = Lower-left (vertical) <br>9 = Far Left (vertical) <br>10 = Top (horizontal) <br>11 = Near Right <br>12 = Center (horizontal) <br>13 = Near Left <br>14 = Bottom (horizontal) <br>15 = Top (vertical)</td><td>&nbsp;&nbsp;</td> <td>16 = Upper-middle <br>17 = Center (vertical) <br>18 = Lower-middle <br>19 = Bottom (vertical) <br>20 = Upper Far Right <br>21 = Upper-right (horizontal) <br>22 = Far Right (horizontal) <br>23 = Right (horizontal) <br>24 = Lower Far Right <br>25 = Lower-right (horizontal) <br>26 = Far Right (vertical) <br>27 = Upper-right (vertical) <br>28 = Right (vertical) <br>29 = Lower-right (vertical) <br>30 = (out of focus)</td></tr></table> </td></tr> <tr> <td title='0x000a = 10'>0x000a</td> <td>AFAreaMode</td> <td class=c>int8u</td> <td><span class=s>0 = Wide <br>1 = Spot <br>2 = Local <br>3 = Zone</span></td></tr> <tr class=b> <td title='0x000b = 11'>0x000b</td> <td>FocusMode</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = Manual <br>2 = AF-S <br>3 = AF-C</td><td>&nbsp;&nbsp;</td> <td>4 = AF-A <br>6 = DMF <br>7 = AF-D</td></tr></table> </td></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>AFPointsUsed</td> <td class=c>int8u[10]</td> <td><table class=cols><tr> <td>0x0 = (none) <br>Bit 0 = A5 <br>Bit 1 = A6 <br>Bit 2 = A7 <br>Bit 3 = B2 <br>Bit 4 = B3 <br>Bit 5 = B4 <br>Bit 6 = B5 <br>Bit 7 = B6 <br>Bit 8 = B7 <br>Bit 9 = B8 <br>Bit 10 = B9 <br>Bit 11 = B10 <br>Bit 12 = C1 <br>Bit 13 = C2 <br>Bit 14 = C3 <br>Bit 15 = C4 <br>Bit 16 = C5 <br>Bit 17 = C6 <br>Bit 18 = C7 <br>Bit 19 = C8 <br>Bit 20 = C9 <br>Bit 21 = C10 <br>Bit 22 = C11 <br>Bit 23 = D1 <br>Bit 24 = D2 <br>Bit 25 = D3</td><td>&nbsp;&nbsp;</td> <td>Bit 26 = D4 <br>Bit 27 = D5 <br>Bit 28 = D6 <br>Bit 29 = D7 <br>Bit 30 = D8 <br>Bit 31 = D9 <br>Bit 32 = D10 <br>Bit 33 = D11 <br>Bit 34 = E1 <br>Bit 35 = E2 <br>Bit 36 = E3 <br>Bit 37 = E4 <br>Bit 38 = E5 <br>Bit 39 = E6 <br>Bit 40 = E7 <br>Bit 41 = E8 <br>Bit 42 = E9 <br>Bit 43 = E10 <br>Bit 44 = E11 <br>Bit 45 = F1 <br>Bit 46 = F2 <br>Bit 47 = F3 <br>Bit 48 = F4 <br>Bit 49 = F5 <br>Bit 50 = F6 <br>Bit 51 = F7 <br>Bit 52 = F8</td><td>&nbsp;&nbsp;</td> <td>Bit 53 = F9 <br>Bit 54 = F10 <br>Bit 55 = F11 <br>Bit 56 = G1 <br>Bit 57 = G2 <br>Bit 58 = G3 <br>Bit 59 = G4 <br>Bit 60 = G5 <br>Bit 61 = G6 <br>Bit 62 = G7 <br>Bit 63 = G8 <br>Bit 64 = G9 <br>Bit 65 = G10 <br>Bit 66 = G11 <br>Bit 67 = H2 <br>Bit 68 = H3 <br>Bit 69 = H4 <br>Bit 70 = H5 <br>Bit 71 = H6 <br>Bit 72 = H7 <br>Bit 73 = H8 <br>Bit 74 = H9 <br>Bit 75 = H10 <br>Bit 76 = I5 <br>Bit 77 = I6 <br>Bit 78 = I7</td></tr></table> </td></tr> <tr class=b> <td title='0x0011 = 17'>0x0011</td> <td>AFStatus15 <br>AFStatus19</td> <td class=c>-<br>-</td> <td>--&gt; <a href='Sony.html#AFStatus15'>Sony AFStatus15 Tags</a> <br>--&gt; <a href='Sony.html#AFStatus19'>Sony AFStatus19 Tags</a></td></tr> <tr> <td title='0x0037 = 55'>0x0037</td> <td>AFPoint</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = B4 <br>1 = C4 <br>2 = D4 <br>3 = E4 <br>4 = F4 <br>5 = G4 <br>6 = H4 <br>7 = B3 <br>8 = C3 <br>9 = D3 <br>10 = E3 <br>11 = F3 <br>12 = G3 <br>13 = H3 <br>14 = B2 <br>15 = C2 <br>16 = D2 <br>17 = E2 <br>18 = F2 <br>19 = G2 <br>20 = H2 <br>21 = C1 <br>22 = D1 <br>23 = E1 <br>24 = F1 <br>25 = G1 <br>26 = A7 Vertical <br>27 = A6 Vertical <br>28 = A5 Vertical <br>29 = C7 Vertical <br>30 = C6 Vertical <br>31 = C5 Vertical <br>32 = E7 Vertical <br>33 = E6 Center Vertical <br>34 = E5 Vertical <br>35 = G7 Vertical <br>36 = G6 Vertical <br>37 = G5 Vertical <br>38 = I7 Vertical <br>39 = I6 Vertical <br>40 = I5 Vertical <br>41 = A7 <br>42 = B7 <br>43 = C7 <br>44 = D7 <br>45 = E7 <br>46 = F7 <br>47 = G7</td><td>&nbsp;&nbsp;</td> <td>48 = H7 <br>49 = I7 <br>50 = A6 <br>51 = B6 <br>52 = C6 <br>53 = D6 <br>54 = E6 Center <br>55 = F6 <br>56 = G6 <br>57 = H6 <br>58 = I6 <br>59 = A5 <br>60 = B5 <br>61 = C5 <br>62 = D5 <br>63 = E5 <br>64 = F5 <br>65 = G5 <br>66 = H5 <br>67 = I5 <br>68 = C11 <br>69 = D11 <br>70 = E11 <br>71 = F11 <br>72 = G11 <br>73 = B10 <br>74 = C10 <br>75 = D10 <br>76 = E10 <br>77 = F10 <br>78 = G10 <br>79 = H10 <br>80 = B9 <br>81 = C9 <br>82 = D9 <br>83 = E9 <br>84 = F9 <br>85 = G9 <br>86 = H9 <br>87 = B8 <br>88 = C8 <br>89 = D8 <br>90 = E8 <br>91 = F8 <br>92 = G8 <br>93 = H8 <br>94 = E6 Center F2.8 <br>255 = (none)</td></tr></table> </td></tr> <tr class=b> <td title='0x0038 = 56'>0x0038</td> <td>AFPointInFocus</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = B4 <br>1 = C4 <br>2 = D4 <br>3 = E4 <br>4 = F4 <br>5 = G4 <br>6 = H4 <br>7 = B3 <br>8 = C3 <br>9 = D3 <br>10 = E3 <br>11 = F3 <br>12 = G3 <br>13 = H3 <br>14 = B2 <br>15 = C2 <br>16 = D2 <br>17 = E2 <br>18 = F2 <br>19 = G2 <br>20 = H2 <br>21 = C1 <br>22 = D1 <br>23 = E1 <br>24 = F1 <br>25 = G1 <br>26 = A7 Vertical <br>27 = A6 Vertical <br>28 = A5 Vertical <br>29 = C7 Vertical <br>30 = C6 Vertical <br>31 = C5 Vertical <br>32 = E7 Vertical <br>33 = E6 Center Vertical <br>34 = E5 Vertical <br>35 = G7 Vertical <br>36 = G6 Vertical <br>37 = G5 Vertical <br>38 = I7 Vertical <br>39 = I6 Vertical <br>40 = I5 Vertical <br>41 = A7 <br>42 = B7 <br>43 = C7 <br>44 = D7 <br>45 = E7 <br>46 = F7 <br>47 = G7</td><td>&nbsp;&nbsp;</td> <td>48 = H7 <br>49 = I7 <br>50 = A6 <br>51 = B6 <br>52 = C6 <br>53 = D6 <br>54 = E6 Center <br>55 = F6 <br>56 = G6 <br>57 = H6 <br>58 = I6 <br>59 = A5 <br>60 = B5 <br>61 = C5 <br>62 = D5 <br>63 = E5 <br>64 = F5 <br>65 = G5 <br>66 = H5 <br>67 = I5 <br>68 = C11 <br>69 = D11 <br>70 = E11 <br>71 = F11 <br>72 = G11 <br>73 = B10 <br>74 = C10 <br>75 = D10 <br>76 = E10 <br>77 = F10 <br>78 = G10 <br>79 = H10 <br>80 = B9 <br>81 = C9 <br>82 = D9 <br>83 = E9 <br>84 = F9 <br>85 = G9 <br>86 = H9 <br>87 = B8 <br>88 = C8 <br>89 = D8 <br>90 = E8 <br>91 = F8 <br>92 = G8 <br>93 = H8 <br>94 = E6 Center F2.8 <br>255 = (none)</td></tr></table> </td></tr> <tr> <td title='0x0039 = 57'>0x0039</td> <td>AFPointAtShutterRelease</td> <td class=c>int8u</td> <td><table class=cols><tr> <td>0 = B4 <br>1 = C4 <br>2 = D4 <br>3 = E4 <br>4 = F4 <br>5 = G4 <br>6 = H4 <br>7 = B3 <br>8 = C3 <br>9 = D3 <br>10 = E3 <br>11 = F3 <br>12 = G3 <br>13 = H3 <br>14 = B2 <br>15 = C2 <br>16 = D2 <br>17 = E2 <br>18 = F2 <br>19 = G2 <br>20 = H2 <br>21 = C1 <br>22 = D1 <br>23 = E1 <br>24 = F1 <br>25 = G1 <br>26 = A7 Vertical <br>27 = A6 Vertical <br>28 = A5 Vertical <br>29 = C7 Vertical <br>30 = C6 Vertical <br>31 = C5 Vertical <br>32 = E7 Vertical <br>33 = E6 Center Vertical <br>34 = E5 Vertical <br>35 = G7 Vertical <br>36 = G6 Vertical <br>37 = G5 Vertical <br>38 = I7 Vertical <br>39 = I6 Vertical <br>40 = I5 Vertical <br>41 = A7 <br>42 = B7 <br>43 = C7 <br>44 = D7 <br>45 = E7 <br>46 = F7 <br>47 = G7</td><td>&nbsp;&nbsp;</td> <td>48 = H7 <br>49 = I7 <br>50 = A6 <br>51 = B6 <br>52 = C6 <br>53 = D6 <br>54 = E6 Center <br>55 = F6 <br>56 = G6 <br>57 = H6 <br>58 = I6 <br>59 = A5 <br>60 = B5 <br>61 = C5 <br>62 = D5 <br>63 = E5 <br>64 = F5 <br>65 = G5 <br>66 = H5 <br>67 = I5 <br>68 = C11 <br>69 = D11 <br>70 = E11 <br>71 = F11 <br>72 = G11 <br>73 = B10 <br>74 = C10 <br>75 = D10 <br>76 = E10 <br>77 = F10 <br>78 = G10 <br>79 = H10 <br>80 = B9 <br>81 = C9 <br>82 = D9 <br>83 = E9 <br>84 = F9 <br>85 = G9 <br>86 = H9 <br>87 = B8 <br>88 = C8 <br>89 = D8 <br>90 = E8 <br>91 = F8 <br>92 = G8 <br>93 = H8 <br>94 = E6 Center F2.8 <br>95 = (none)</td></tr></table> </td></tr> <tr class=b> <td title='0x003a = 58'>0x003a</td> <td>AFAreaMode</td> <td class=c>int8u</td> <td><span class=s>0 = Wide <br>1 = Center <br>2 = Flexible Spot <br>3 = Zone <br>4 = Expanded Flexible Spot</span></td></tr> <tr> <td title='0x003b = 59'>0x003b</td> <td>AFStatusActiveSensor</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td title='0x0043 = 67'>0x0043</td> <td>ExposureProgram</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ExposureProgram3'>Sony ExposureProgram3 Values</a></td></tr> <tr> <td title='0x0050 = 80'>0x0050</td> <td>AFMicroAdj</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x007d = 125'>0x007d</td> <td>AFStatus79</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#AFStatus79'>Sony AFStatus79 Tags</a></td></tr> <tr> <td title='0x016e = 366'>0x016e</td> <td>AFPointsUsed</td> <td class=c>int32u</td> <td><span class=s><span class=n>(SLT models only)</span></span><table class=cols><tr> <td>0x0 = (none) <br>Bit 0 = Center <br>Bit 1 = Top <br>Bit 2 = Upper-right <br>Bit 3 = Right <br>Bit 4 = Lower-right <br>Bit 5 = Bottom <br>Bit 6 = Lower-left <br>Bit 7 = Left <br>Bit 8 = Upper-left</td><td>&nbsp;&nbsp;</td> <td>Bit 9 = Far Right <br>Bit 10 = Far Left <br>Bit 11 = Upper-middle <br>Bit 12 = Near Right <br>Bit 13 = Lower-middle <br>Bit 14 = Near Left <br>Bit 15 = Upper Far Right <br>Bit 16 = Lower Far Right <br>Bit 17 = Lower Far Left <br>Bit 18 = Upper Far Left</td></tr></table> </td></tr> <tr class=b> <td title='0x017d = 381'>0x017d</td> <td>AFMicroAdj</td> <td class=c>int8s</td> <td>&nbsp;</td></tr> <tr> <td title='0x017e = 382'>0x017e</td> <td>ExposureProgram</td> <td class=c>int8u</td> <td>--&gt; <a href='Sony.html#ExposureProgram3'>Sony ExposureProgram3 Values</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='AFStatus19'>Sony AFStatus19 Tags</a></h2> <p>AF Status information for models with 19-point AF.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>AFStatusUpperFarLeft</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>AFStatusUpper-leftHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>AFStatusFarLeftHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>AFStatusLeftHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>AFStatusLowerFarLeft</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>AFStatusLower-leftHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>AFStatusUpper-leftVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>AFStatusLeftVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>AFStatusLower-leftVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>AFStatusFarLeftVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>AFStatusTopHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>AFStatusNearRight</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>AFStatusCenterHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>AFStatusNearLeft</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>AFStatusBottomHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>AFStatusTopVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>AFStatusUpper-middle</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='34 = 0x22'>34</td> <td>AFStatusCenterVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='36 = 0x24'>36</td> <td>AFStatusLower-middle</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>AFStatusBottomVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>AFStatusUpperFarRight</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>AFStatusUpper-rightHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>AFStatusFarRightHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='46 = 0x2e'>46</td> <td>AFStatusRightHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>AFStatusLowerFarRight</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>AFStatusLower-rightHorizontal</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='52 = 0x34'>52</td> <td>AFStatusFarRightVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='54 = 0x36'>54</td> <td>AFStatusUpper-rightVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='56 = 0x38'>56</td> <td>AFStatusRightVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='58 = 0x3a'>58</td> <td>AFStatusLower-rightVertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='AFStatus79'>Sony AFStatus79 Tags</a></h2> <p>AF Status information for models with 79-point AF.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>AFStatus_00_B4</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>AFStatus_01_C4</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>AFStatus_02_D4</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='6 = 0x6'>6</td> <td>AFStatus_03_E4</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>AFStatus_04_F4</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>AFStatus_05_G4</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='12 = 0xc'>12</td> <td>AFStatus_06_H4</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='14 = 0xe'>14</td> <td>AFStatus_07_B3</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='16 = 0x10'>16</td> <td>AFStatus_08_C3</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='18 = 0x12'>18</td> <td>AFStatus_09_D3</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='20 = 0x14'>20</td> <td>AFStatus_10_E3</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='22 = 0x16'>22</td> <td>AFStatus_11_F3</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='24 = 0x18'>24</td> <td>AFStatus_12_G3</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='26 = 0x1a'>26</td> <td>AFStatus_13_H3</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='28 = 0x1c'>28</td> <td>AFStatus_14_B2</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='30 = 0x1e'>30</td> <td>AFStatus_15_C2</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='32 = 0x20'>32</td> <td>AFStatus_16_D2</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='34 = 0x22'>34</td> <td>AFStatus_17_E2</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='36 = 0x24'>36</td> <td>AFStatus_18_F2</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='38 = 0x26'>38</td> <td>AFStatus_19_G2</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='40 = 0x28'>40</td> <td>AFStatus_20_H2</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='42 = 0x2a'>42</td> <td>AFStatus_21_C1</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='44 = 0x2c'>44</td> <td>AFStatus_22_D1</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='46 = 0x2e'>46</td> <td>AFStatus_23_E1</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='48 = 0x30'>48</td> <td>AFStatus_24_F1</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='50 = 0x32'>50</td> <td>AFStatus_25_G1</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='52 = 0x34'>52</td> <td>AFStatus_26_A7_Vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='54 = 0x36'>54</td> <td>AFStatus_27_A6_Vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='56 = 0x38'>56</td> <td>AFStatus_28_A5_Vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='58 = 0x3a'>58</td> <td>AFStatus_29_C7_Vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='60 = 0x3c'>60</td> <td>AFStatus_30_C6_Vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='62 = 0x3e'>62</td> <td>AFStatus_31_C5_Vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='64 = 0x40'>64</td> <td>AFStatus_32_E7_Vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='66 = 0x42'>66</td> <td>AFStatus_33_E6_Center_Vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='68 = 0x44'>68</td> <td>AFStatus_34_E5_Vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='70 = 0x46'>70</td> <td>AFStatus_35_G7_Vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='72 = 0x48'>72</td> <td>AFStatus_36_G6_Vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='74 = 0x4a'>74</td> <td>AFStatus_37_G5_Vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='76 = 0x4c'>76</td> <td>AFStatus_38_I7_Vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='78 = 0x4e'>78</td> <td>AFStatus_39_I6_Vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='80 = 0x50'>80</td> <td>AFStatus_40_I5_Vertical</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='82 = 0x52'>82</td> <td>AFStatus_41_A7</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='84 = 0x54'>84</td> <td>AFStatus_42_B7</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='86 = 0x56'>86</td> <td>AFStatus_43_C7</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='88 = 0x58'>88</td> <td>AFStatus_44_D7</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='90 = 0x5a'>90</td> <td>AFStatus_45_E7</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='92 = 0x5c'>92</td> <td>AFStatus_46_F7</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='94 = 0x5e'>94</td> <td>AFStatus_47_G7</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='96 = 0x60'>96</td> <td>AFStatus_48_H7</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='98 = 0x62'>98</td> <td>AFStatus_49_I7</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='100 = 0x64'>100</td> <td>AFStatus_50_A6</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='102 = 0x66'>102</td> <td>AFStatus_51_B6</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='104 = 0x68'>104</td> <td>AFStatus_52_C6</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='106 = 0x6a'>106</td> <td>AFStatus_53_D6</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='108 = 0x6c'>108</td> <td>AFStatus_54_E6_Center</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='110 = 0x6e'>110</td> <td>AFStatus_55_F6</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='112 = 0x70'>112</td> <td>AFStatus_56_G6</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='114 = 0x72'>114</td> <td>AFStatus_57_H6</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='116 = 0x74'>116</td> <td>AFStatus_58_I6</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='118 = 0x76'>118</td> <td>AFStatus_59_A5</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='120 = 0x78'>120</td> <td>AFStatus_60_B5</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='122 = 0x7a'>122</td> <td>AFStatus_61_C5</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='124 = 0x7c'>124</td> <td>AFStatus_62_D5</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='126 = 0x7e'>126</td> <td>AFStatus_63_E5</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='128 = 0x80'>128</td> <td>AFStatus_64_F5</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='130 = 0x82'>130</td> <td>AFStatus_65_G5</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='132 = 0x84'>132</td> <td>AFStatus_66_H5</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='134 = 0x86'>134</td> <td>AFStatus_67_I5</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='136 = 0x88'>136</td> <td>AFStatus_68_C11</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='138 = 0x8a'>138</td> <td>AFStatus_69_D11</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='140 = 0x8c'>140</td> <td>AFStatus_70_E11</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='142 = 0x8e'>142</td> <td>AFStatus_71_F11</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='144 = 0x90'>144</td> <td>AFStatus_72_G11</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='146 = 0x92'>146</td> <td>AFStatus_73_B10</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='148 = 0x94'>148</td> <td>AFStatus_74_C10</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='150 = 0x96'>150</td> <td>AFStatus_75_D10</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='152 = 0x98'>152</td> <td>AFStatus_76_E10</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='154 = 0x9a'>154</td> <td>AFStatus_77_F10</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='156 = 0x9c'>156</td> <td>AFStatus_78_G10</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='158 = 0x9e'>158</td> <td>AFStatus_79_H10</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='160 = 0xa0'>160</td> <td>AFStatus_80_B9</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='162 = 0xa2'>162</td> <td>AFStatus_81_C9</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='164 = 0xa4'>164</td> <td>AFStatus_82_D9</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='166 = 0xa6'>166</td> <td>AFStatus_83_E9</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='168 = 0xa8'>168</td> <td>AFStatus_84_F9</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='170 = 0xaa'>170</td> <td>AFStatus_85_G9</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='172 = 0xac'>172</td> <td>AFStatus_86_H9</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='174 = 0xae'>174</td> <td>AFStatus_87_B8</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='176 = 0xb0'>176</td> <td>AFStatus_88_C8</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='178 = 0xb2'>178</td> <td>AFStatus_89_D8</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='180 = 0xb4'>180</td> <td>AFStatus_90_E8</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='182 = 0xb6'>182</td> <td>AFStatus_91_F8</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='184 = 0xb8'>184</td> <td>AFStatus_92_G8</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr class=b> <td class=r title='186 = 0xba'>186</td> <td>AFStatus_93_H8</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> <tr> <td class=r title='188 = 0xbc'>188</td> <td>AFStatus_94_E6_Center_F2-8</td> <td class=c>int16s</td> <td><table class=cols><tr> <td>-32768 = Out of Focus</td><td>&nbsp;&nbsp;</td> <td>0 = In Focus</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='Tag940e'>Sony Tag940e Tags</a></h2> <p>E-mount models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x1a06 = 6662'>0x1a06</td> <td>TiffMeteringImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x1a07 = 6663'>0x1a07</td> <td>TiffMeteringImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x1a08 = 6664'>0x1a08</td> <td>TiffMeteringImage</td> <td class=c>N</td> <td><span class=s><span class=n>(13(?)-bit intensity data from 1320 (1200) metering segments, extracted as a 16-bit TIFF image)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='PIC'>Sony PIC Tags</a></h2> <p>The TextInfo data is extracted as a block to preserve the formatting, and some of the more interesting information is extracted as separate tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'BC:'</td> <td>Barcode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'BarCode:'</td> <td>Barcode</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Capt:'</td> <td>SensorTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'FWVer:'</td> <td>FirmwareVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'IFD'</td> <td>PIC_IFD</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html'>Sony Tags</a></td></tr> <tr class=b> <td>'Temp:'</td> <td>CameraTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Temp:Clbt:'</td> <td>BoardTemperature</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TextInfo1'</td> <td>TextInfo1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TextInfo2'</td> <td>TextInfo2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'VR Enable C:'</td> <td>VibrationReduction</td> <td class=c>N</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr> <td>'barcode:'</td> <td>Barcode</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Ericsson'>Sony Ericsson Tags</a></h2> <p>Maker notes found in images from some Sony Ericsson phones.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0201 = 513'>0x0201</td> <td>PreviewImageStart</td> <td class=c title=' * = Protected'>int32u*</td> <td><span class=s><span class=n>(a small 320x200 preview image)</span></span></td></tr> <tr class=b> <td title='0x0202 = 514'>0x0202</td> <td>PreviewImageLength</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr> <td title='0x2000 = 8192'>0x2000</td> <td>MakerNoteVersion</td> <td class=c>undef[4]</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SRF'>Sony SRF Tags</a></h2> <p>The maker notes in SRF (Sony Raw Format) images contain 7 IFD&#39;s with family 1 group names SRF0 through SRF6. SRF0 and SRF1 use the tags in this table, while SRF2 through SRF5 use the tags in the next table, and SRF6 uses standard EXIF tags. All information other than SRF0 is encrypted, but thanks to Dave Coffin the decryption algorithm is known. SRF images are written by the Sony DSC-F828 and DSC-V3.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>SRF2Key</td> <td class=c>N</td> <td><span class=s><span class=n>(key to decrypt maker notes from the start of SRF2)</span></span></td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>DataKey</td> <td class=c>N</td> <td><span class=s><span class=n>(key to decrypt the rest of the file from the end of the maker notes)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='SRF2'>Sony SRF2 Tags</a></h2> <p>These tags are found in the SRF2 through SRF5 IFD&#39;s.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>SRF6Offset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>SRFDataOffset?</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>RawDataOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>RawDataLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0043 = 67'>0x0043</td> <td>MaxApertureAtMaxFocal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0044 = 68'>0x0044</td> <td>MaxApertureAtMinFocal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0045 = 69'>0x0045</td> <td>MinFocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0046 = 70'>0x0046</td> <td>MaxFocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00c0 = 192'>0x00c0</td> <td>WBRedDaylight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00c1 = 193'>0x00c1</td> <td>WBGreenDaylight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00c2 = 194'>0x00c2</td> <td>WBBlueDaylight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00c3 = 195'>0x00c3</td> <td>WBRedCloudy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00c4 = 196'>0x00c4</td> <td>WBGreenCloudy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00c5 = 197'>0x00c5</td> <td>WBBlueCloudy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00c9 = 201'>0x00c9</td> <td>WBRedTungsten</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00ca = 202'>0x00ca</td> <td>WBGreenTungsten</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00cb = 203'>0x00cb</td> <td>WBBlueTungsten</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00cc = 204'>0x00cc</td> <td>WBRedFlash</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00cd = 205'>0x00cd</td> <td>WBGreenFlash</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00ce = 206'>0x00ce</td> <td>WBBlueFlash</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00d0 = 208'>0x00d0</td> <td>WBRedAsShot</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x00d1 = 209'>0x00d1</td> <td>WBGreenAsShot</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x00d2 = 210'>0x00d2</td> <td>WBBlueAsShot</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SR2Private'>Sony SR2Private Tags</a></h2> <p>The SR2 format uses the DNGPrivateData tag to reference a private IFD containing these tags. SR2 images are written by the Sony DSC-R1, but this information is also written to ARW images by other models.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x7200 = 29184'>0x7200</td> <td>SR2SubIFDOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x7201 = 29185'>0x7201</td> <td>SR2SubIFDLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x7221 = 29217'>0x7221</td> <td>SR2SubIFDKey</td> <td class=c>N</td> <td><span class=s><span class=n>(key to decrypt SR2SubIFD)</span></span></td></tr> <tr class=b> <td title='0x7240 = 29248'>0x7240</td> <td>IDC_IFD</td> <td class=c>-</td> <td>--&gt; <a href='SonyIDC.html'>SonyIDC Tags</a></td></tr> <tr> <td title='0x7241 = 29249'>0x7241</td> <td>IDC2_IFD</td> <td class=c>-</td> <td>--&gt; <a href='SonyIDC.html'>SonyIDC Tags</a></td></tr> <tr class=b> <td title='0x7250 = 29264'>0x7250</td> <td>MRWInfo</td> <td class=c>-</td> <td>--&gt; <a href='MinoltaRaw.html'>MinoltaRaw Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='SR2SubIFD'>Sony SR2SubIFD Tags</a></h2> <p>Tags in the encrypted SR2SubIFD</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x7300 = 29440'>0x7300</td> <td>BlackLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x7302 = 29442'>0x7302</td> <td>WB_GRBGLevelsAuto</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x7303 = 29443'>0x7303</td> <td>WB_GRBGLevels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x7310 = 29456'>0x7310</td> <td>BlackLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x7313 = 29459'>0x7313</td> <td>WB_RGGBLevels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x7480 = 29824'>0x7480</td> <td>WB_RGBLevelsDaylight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x7481 = 29825'>0x7481</td> <td>WB_RGBLevelsCloudy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x7482 = 29826'>0x7482</td> <td>WB_RGBLevelsTungsten</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x7483 = 29827'>0x7483</td> <td>WB_RGBLevelsFlash</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x7484 = 29828'>0x7484</td> <td>WB_RGBLevels4500K</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x7486 = 29830'>0x7486</td> <td>WB_RGBLevelsFluorescent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x74a0 = 29856'>0x74a0</td> <td>MaxApertureAtMaxFocal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x74a1 = 29857'>0x74a1</td> <td>MaxApertureAtMinFocal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x74a2 = 29858'>0x74a2</td> <td>MaxFocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x74a3 = 29859'>0x74a3</td> <td>MinFocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x74c0 = 29888'>0x74c0</td> <td>SR2DataIFD</td> <td class=c>-</td> <td>--&gt; <a href='Sony.html#SR2DataIFD'>Sony SR2DataIFD Tags</a></td></tr> <tr> <td title='0x7800 = 30720'>0x7800</td> <td>ColorMatrix</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x7820 = 30752'>0x7820</td> <td>WB_RGBLevelsDaylight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x7821 = 30753'>0x7821</td> <td>WB_RGBLevelsCloudy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x7822 = 30754'>0x7822</td> <td>WB_RGBLevelsTungsten</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x7823 = 30755'>0x7823</td> <td>WB_RGBLevelsFlash</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x7824 = 30756'>0x7824</td> <td>WB_RGBLevels4500K</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x7825 = 30757'>0x7825</td> <td>WB_RGBLevelsShade</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x7826 = 30758'>0x7826</td> <td>WB_RGBLevelsFluorescent</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x7827 = 30759'>0x7827</td> <td>WB_RGBLevelsFluorescentP1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x7828 = 30760'>0x7828</td> <td>WB_RGBLevelsFluorescentP2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x7829 = 30761'>0x7829</td> <td>WB_RGBLevelsFluorescentM1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x782a = 30762'>0x782a</td> <td>WB_RGBLevels8500K</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x782b = 30763'>0x782b</td> <td>WB_RGBLevels6000K</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x782c = 30764'>0x782c</td> <td>WB_RGBLevels3200K</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x782d = 30765'>0x782d</td> <td>WB_RGBLevels2500K</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x787f = 30847'>0x787f</td> <td>WhiteLevel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x7980 = 31104'>0x7980</td> <td>ChromaticAberrationCorrParams</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x7982 = 31106'>0x7982</td> <td>DistortionCorrParams</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SR2DataIFD'>Sony SR2DataIFD Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x7770 = 30576'>0x7770</td> <td>ColorMode</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PMP'>Sony PMP Tags</a></h2> <p>These tags are written in the proprietary-format header of PMP images from the DSC-F1.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>JpgFromRawStart</td> <td class=c>N</td> <td><span class=s><span class=n>(OK, not really a RAW file, but this mechanism is used to allow extraction of the JPEG image from a PMP file)</span></span></td></tr> <tr class=b> <td class=r title='12 = 0xc'>12</td> <td>JpgFromRawLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='22 = 0x16'>22</td> <td>SonyImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='24 = 0x18'>24</td> <td>SonyImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='27 = 0x1b'>27</td> <td>Orientation</td> <td class=c>N</td> <td><span class=s>0 = Horizontal (normal) <br>1 = Rotate 270 CW <br>2 = Rotate 180 <br>3 = Rotate 90 CW</span></td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>ImageQuality</td> <td class=c>N</td> <td><span class=s>8 = Snap Shot <br>23 = Standard <br>51 = Fine</span></td></tr> <tr> <td class=r title='52 = 0x34'>52</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='76 = 0x4c'>76</td> <td>DateTimeOriginal</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='84 = 0x54'>84</td> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='102 = 0x66'>102</td> <td>ExposureTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='106 = 0x6a'>106</td> <td>FNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='108 = 0x6c'>108</td> <td>ExposureCompensation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='112 = 0x70'>112</td> <td>FocalLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='118 = 0x76'>118</td> <td>Flash</td> <td class=c>N</td> <td><span class=s>0 = No Flash <br>1 = Fired</span></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 22, 2016</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/SonyIDC.html�����������������������������������������������������000644 �000765 �000024 �00000015532 12527350232 021173� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SonyIDC Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>SonyIDC Tags</h2> <p>Tags written by the Sony Image Data Converter utility in ARW images.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0201 = 513'>0x0201</td> <td>IDCPreviewStart</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0202 = 514'>0x0202</td> <td>IDCPreviewLength</td> <td class=c title=' * = Protected'>int32u*</td> <td>&nbsp;</td></tr> <tr> <td title='0x8000 = 32768'>0x8000</td> <td>IDCCreativeStyle</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>1 = Camera Setting <br>2 = Standard <br>3 = Real <br>4 = Vivid <br>5 = Adobe RGB <br>6 = A100 Standard <br>7 = Neutral <br>8 = Portrait <br>9 = Landscape</td><td>&nbsp;&nbsp;</td> <td>10 = Clear <br>11 = Deep <br>12 = Light <br>13 = Sunset <br>14 = Night View <br>15 = Autumn Leaves <br>16 = B&amp;W <br>17 = Sepia</td></tr></table> </td></tr> <tr class=b> <td title='0x8001 = 32769'>0x8001</td> <td>CreativeStyleWasChanged</td> <td class=c>int32u</td> <td><span class=s><span class=n>(set if the creative style was ever changed)</span> <br>0 = No <br>1 = Yes</span></td></tr> <tr> <td title='0x8002 = 32770'>0x8002</td> <td>PresetWhiteBalance</td> <td class=c>int32u</td> <td><table class=cols><tr> <td>1 = Camera Setting <br>2 = Color Temperature <br>3 = Specify Gray Point <br>4 = Daylight <br>5 = Cloudy <br>6 = Shade <br>7 = Cool White Fluorescent <br>8 = Day Light Fluorescent <br>9 = Day White Fluorescent <br>10 = Warm White Fluorescent <br>11 = Tungsten <br>12 = Flash <br>13 = Auto</td></tr></table> </td></tr> <tr class=b> <td title='0x8013 = 32787'>0x8013</td> <td>ColorTemperatureAdj</td> <td class=c>int16u</td> <td>&nbsp;</td></tr> <tr> <td title='0x8014 = 32788'>0x8014</td> <td>PresetWhiteBalanceAdj</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8015 = 32789'>0x8015</td> <td>ColorCorrection</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x8016 = 32790'>0x8016</td> <td>SaturationAdj</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8017 = 32791'>0x8017</td> <td>ContrastAdj</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x8018 = 32792'>0x8018</td> <td>BrightnessAdj</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8019 = 32793'>0x8019</td> <td>HueAdj</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x801a = 32794'>0x801a</td> <td>SharpnessAdj</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x801b = 32795'>0x801b</td> <td>SharpnessOvershoot</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x801c = 32796'>0x801c</td> <td>SharpnessUndershoot</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x801d = 32797'>0x801d</td> <td>SharpnessThreshold</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x801e = 32798'>0x801e</td> <td>NoiseReductionMode</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x8021 = 32801'>0x8021</td> <td>GrayPoint</td> <td class=c>int16u[4]</td> <td>&nbsp;</td></tr> <tr> <td title='0x8022 = 32802'>0x8022</td> <td>D-RangeOptimizerMode</td> <td class=c>int16u</td> <td><span class=s>0 = Off <br>1 = Auto <br>2 = Manual</span></td></tr> <tr class=b> <td title='0x8023 = 32803'>0x8023</td> <td>D-RangeOptimizerValue</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x8024 = 32804'>0x8024</td> <td>D-RangeOptimizerHighlight</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8026 = 32806'>0x8026</td> <td>HighlightColorDistortReduct</td> <td class=c>int16u</td> <td><span class=s>0 = Standard <br>1 = Advanced</span></td></tr> <tr> <td title='0x8027 = 32807'>0x8027</td> <td>NoiseReductionValue</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8028 = 32808'>0x8028</td> <td>EdgeNoiseReduction</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x8029 = 32809'>0x8029</td> <td>ColorNoiseReduction</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x802d = 32813'>0x802d</td> <td>D-RangeOptimizerShadow</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x8030 = 32816'>0x8030</td> <td>PeripheralIllumCentralRadius</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x8031 = 32817'>0x8031</td> <td>PeripheralIllumCentralValue</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr> <td title='0x8032 = 32818'>0x8032</td> <td>PeripheralIllumPeriphValue</td> <td class=c>int32s</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x9000 = 36864'>0x9000</td> <td>ToneCurveBrightnessX</td> <td class=c>int16u[n]</td> <td>&nbsp;</td></tr> <tr> <td title='0x9001 = 36865'>0x9001</td> <td>ToneCurveRedX</td> <td class=c>int16u[n]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x9002 = 36866'>0x9002</td> <td>ToneCurveGreenX</td> <td class=c>int16u[n]</td> <td>&nbsp;</td></tr> <tr> <td title='0x9003 = 36867'>0x9003</td> <td>ToneCurveBlueX</td> <td class=c>int16u[n]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x9004 = 36868'>0x9004</td> <td>ToneCurveBrightnessY</td> <td class=c>int16u[n]</td> <td>&nbsp;</td></tr> <tr> <td title='0x9005 = 36869'>0x9005</td> <td>ToneCurveRedY</td> <td class=c>int16u[n]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x9006 = 36870'>0x9006</td> <td>ToneCurveGreenY</td> <td class=c>int16u[n]</td> <td>&nbsp;</td></tr> <tr> <td title='0x9007 = 36871'>0x9007</td> <td>ToneCurveBlueY</td> <td class=c>int16u[n]</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0xd000 = 53248'>0xd000</td> <td>CurrentVersion</td> <td class=c>int32u</td> <td>&nbsp;</td></tr> <tr> <td title='0xd001 = 53249'>0xd001</td> <td>VersionIFD</td> <td class=c>-</td> <td>--&gt; <a href='SonyIDC.html'>SonyIDC Tags</a> <br><span class='n s'>(there is one VersionIFD for each entry in the "Version Stack")</span></td></tr> <tr class=b> <td title='0xd100 = 53504'>0xd100</td> <td>VersionCreateDate</td> <td class=c>string</td> <td><span class=s><span class=n>(date/time when this entry was created in the &quot;Version Stack&quot;)</span></span></td></tr> <tr> <td title='0xd101 = 53505'>0xd101</td> <td>VersionModifyDate</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jan 8, 2010</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Stim.html��������������������������������������������������������000644 �000765 �000024 �00000012452 12406274435 020643� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Stim Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Stim Tags</h2> <p>These tags are part of the CIPA Stereo Still Image specification, and are found in the APP3 &quot;Stim&quot; segment of JPEG images. See <a href="http://www.cipa.jp/std/documents/e/DC-006_E.pdf">http://www.cipa.jp/std/documents/e/DC-006_E.pdf</a> for the official specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0000 = 0'>0x0000</td> <td>StimVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0001 = 1'>0x0001</td> <td>ApplicationData</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0002 = 2'>0x0002</td> <td>ImageArrangement</td> <td class=c>N</td> <td><span class=s>0 = Parallel View Alignment <br>1 = Cross View Alignment</span></td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>ImageRotation</td> <td class=c>N</td> <td><span class=s>1 = None</span></td></tr> <tr> <td title='0x0004 = 4'>0x0004</td> <td>ScalingFactor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0005 = 5'>0x0005</td> <td>CropXSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0006 = 6'>0x0006</td> <td>CropYSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0007 = 7'>0x0007</td> <td>CropX</td> <td class=c>-</td> <td>--&gt; <a href='Stim.html#CropX'>Stim CropX Tags</a></td></tr> <tr> <td title='0x0008 = 8'>0x0008</td> <td>CropY</td> <td class=c>-</td> <td>--&gt; <a href='Stim.html#CropY'>Stim CropY Tags</a></td></tr> <tr class=b> <td title='0x0009 = 9'>0x0009</td> <td>ViewType</td> <td class=c>N</td> <td><span class=s>0 = No Pop-up Effect <br>1 = Pop-up Effect</span></td></tr> <tr> <td title='0x000a = 10'>0x000a</td> <td>RepresentativeImage</td> <td class=c>N</td> <td><span class=s>0 = Left Viewpoint <br>1 = Right Viewpoint</span></td></tr> <tr class=b> <td title='0x000b = 11'>0x000b</td> <td>ConvergenceBaseImage</td> <td class=c>N</td> <td><span class=s>0 = Left Viewpoint <br>1 = Right Viewpoint <br>255 = Equivalent for Both Viewpoints</span></td></tr> <tr> <td title='0x000c = 12'>0x000c</td> <td>AssumedDisplaySize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000d = 13'>0x000d</td> <td>AssumedDistanceView</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x000e = 14'>0x000e</td> <td>RepresentativeDisparityNear</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x000f = 15'>0x000f</td> <td>RepresentativeDisparityFar</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0010 = 16'>0x0010</td> <td>InitialDisplayEffect</td> <td class=c>N</td> <td><span class=s>0 = Off <br>1 = On</span></td></tr> <tr class=b> <td title='0x0011 = 17'>0x0011</td> <td>ConvergenceDistance</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td title='0x0012 = 18'>0x0012</td> <td>CameraArrangementInterval</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td title='0x0013 = 19'>0x0013</td> <td>ShootingCount</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CropX'>Stim CropX Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>CropXCommonOffset</td> <td class=c>N</td> <td><span class=s>0 = Common Offset Setting <br>1 = Individual Offset Setting</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>CropXViewpointNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>CropXOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>CropXViewpointNumber2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>CropXOffset2</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CropY'>Stim CropY Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>CropYCommonOffset</td> <td class=c>N</td> <td><span class=s>0 = Common Offset Setting <br>1 = Individual Offset Setting</span></td></tr> <tr class=b> <td class=r title='2 = 0x2'>2</td> <td>CropYViewpointNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='3 = 0x3'>3</td> <td>CropYOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>CropYViewpointNumber2</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>CropYOffset2</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Sep 17, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/style.css��������������������������������������������������������000644 �000765 �000024 �00000003121 11342267201 020673� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������body { color: black; background: white; margin-top: 0; font-family: helvetica; font-size: .9em } code { color: #840; font-family: monospace; white-space: nowrap } table.frame { background: #fb7 } /* frame color */ table.frame td { padding: 0 } /* frame padding */ table.frame tr { background: white }/* main cell color */ table.inner { background: white } /* table cell borders */ table.inner th { padding: 2px } /* header padding */ table.inner td { padding: 2px } /* cell padding */ table.sep td { padding: 0 2px; /* separate table values */ font-size: smaller } table.cols tr { background: transparent } table.cols td { padding: 0; /* PrintConvColumns table */ font-size: smaller } table tr { vertical-align: top } /* universal text alignment */ table tr.b { background: #feb } /* alternate cell color */ table td.b { background: #feb } /* alternate cell color */ table tr.h { background: #fb7 } /* table header */ table td.c { text-align: center } /* centered text cells */ table td.r { text-align: right } /* numerical tag ID's */ table td.n { white-space: nowrap } /* to avoid wrapping some tag names */ h2 { margin: .6em 0 .6em 0 }/* table headings */ h2.top { margin: .3em 0 .6em 0 }/* top heading */ p { margin: 1em 1em } /* paragraph text */ p.lf { margin: 1em 0 } /* text footer */ span.n { color: #666 } /* notes text color */ span.s { font-size: smaller } /* small values/notes text */ span.l { font-size: larger } /* index table heading */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Theora.html������������������������������������������������������000644 �000765 �000024 �00000005525 11663037151 021150� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Theora Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Theora Tags</h2> <p>Information extracted from Ogg Theora video files. See <a href="http://www.theora.org/doc/Theora.pdf">http://www.theora.org/doc/Theora.pdf</a> for the Theora specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0080 = 128'>0x0080</td> <td>Identification</td> <td class=c>-</td> <td>--&gt; <a href='Theora.html#Identification'>Theora Identification Tags</a></td></tr> <tr class=b> <td title='0x0081 = 129'>0x0081</td> <td>Comments</td> <td class=c>-</td> <td>--&gt; <a href='Vorbis.html#Comments'>Vorbis Comments Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Identification'>Theora Identification Tags</a></h2> <p>Tags extracted from the Theora identification header.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>TheoraVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='7 = 0x7'>7</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='10 = 0xa'>10</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>XOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='14 = 0xe'>14</td> <td>YOffset</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>FrameRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='23 = 0x17'>23</td> <td>PixelAspectRatio</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='29 = 0x1d'>29</td> <td>ColorSpace</td> <td class=c>N</td> <td><span class=s>0 = Undefined <br>1 = Rec. 470M <br>2 = Rec. 470BG</span></td></tr> <tr> <td class=r title='30 = 0x1e'>30</td> <td>NominalVideoBitrate</td> <td class=c>N</td> <td><span class=s>0 = Unspecified</span></td></tr> <tr class=b> <td class=r title='33 = 0x21'>33</td> <td>Quality</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='34 = 0x22'>34</td> <td>PixelFormat</td> <td class=c>N</td> <td><span class=s>0 = 4:2:0 <br>2 = 4:2:2 <br>3 = 4:4:4</span></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jul 16, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Torrent.html�����������������������������������������������������000644 �000765 �000024 �00000011015 12213607056 021351� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Torrent Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Torrent Tags</h2> <p>Below are tags commonly found in BitTorrent files. As well as these tags, any other existing tags will be extracted. For convenience, list items are expanded into individual tags with an index in the tag name, but only the tags with index &quot;1&quot; are listed in the tables below. See <a href="https://wiki.theory.org/BitTorrentSpecification">https://wiki.theory.org/BitTorrentSpecification</a> for the BitTorrent specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'announce'</td> <td>Announce</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'announce-list'</td> <td>AnnounceList1</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'comment'</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'created by'</td> <td>Creator</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'creation date'</td> <td>CreateDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'encoding'</td> <td>Encoding</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'info'</td> <td>Info</td> <td class=c>-</td> <td>--&gt; <a href='Torrent.html#Info'>Torrent Info Tags</a></td></tr> <tr class=b> <td>'url-list'</td> <td>URLList1</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Info'>Torrent Info Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'file-duration'</td> <td>File1Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'file-media'</td> <td>File1Media</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'files'</td> <td>Files</td> <td class=c>-</td> <td>--&gt; <a href='Torrent.html#Files'>Torrent Files Tags</a></td></tr> <tr class=b> <td>'length'</td> <td>Length</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'md5sum'</td> <td>MD5Sum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'name'</td> <td>Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'name.utf-8'</td> <td>NameUTF-8</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'piece length'</td> <td>PieceLength</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'pieces'</td> <td>Pieces</td> <td class=c>N</td> <td><span class=s><span class=n>(concatenation of 20-byte SHA-1 digests for each piece)</span></span></td></tr> <tr class=b> <td>'private'</td> <td>Private</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'profiles'</td> <td>Profiles</td> <td class=c>-</td> <td>--&gt; <a href='Torrent.html#Profiles'>Torrent Profiles Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Files'>Torrent Files Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'length'</td> <td>File1Length</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'md5sum'</td> <td>File1MD5Sum</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'path'</td> <td>File1Path</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'path.utf-8'</td> <td>File1PathUTF-8</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Profiles'>Torrent Profiles Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'acodec'</td> <td>Profile1AudioCodec</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'height'</td> <td>Profile1Height</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'vcodec'</td> <td>Profile1VideoCodec</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'width'</td> <td>Profile1Width</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Sep 10, 2013</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Unknown.html�����������������������������������������������������000644 �000765 �000024 �00000001712 11271337424 021360� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Unknown Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Unknown Tags</h2> <p> The following tags are decoded in unsupported maker notes. Use the Unknown (-u) option to display other unknown tags. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0e00 = 3584'>0x0e00</td> <td>PrintIM</td> <td class=c>-</td> <td>--&gt; <a href='PrintIM.html'>PrintIM Tags</a></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Apr 11, 2006</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ������������������������������������������������������Image-ExifTool-10.10/html/TagNames/VCard.html�������������������������������������������������������000644 �000765 �000024 �00000021151 12524130215 020706� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>VCard Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>VCard Tags</h2> <p>This table lists common vCard tags, but ExifTool will also extract any other vCard tags found. Tag names may have &quot;Pref&quot; added to indicate the preferred instance of a vCard property, and other &quot;TYPE&quot; parameters may also added to the tag name. VCF files may contain multiple vCard entries which are distinguished by the ExifTool family 3 group name (document number). See <a href="http://tools.ietf.org/html/rfc6350">http://tools.ietf.org/html/rfc6350</a> for the vCard 4.0 specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Adr'</td> <td>Address</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Anniversary'</td> <td>Anniversary</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Bday'</td> <td>Birthday</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Email'</td> <td>Email</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Fn'</td> <td>FormattedName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Gender'</td> <td>Gender</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Geo'</td> <td>Geolocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Impp'</td> <td>IMPP</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Lang'</td> <td>Language</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Logo'</td> <td>Logo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'N'</td> <td>Name</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Nickname'</td> <td>Nickname</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Note'</td> <td>Note</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Org'</td> <td>Organization</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Photo'</td> <td>Photo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Prodid'</td> <td>Software</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Rev'</td> <td>Revision</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Sound'</td> <td>Sound</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Tel'</td> <td>Telephone</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Title'</td> <td>JobTitle</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Tz'</td> <td>TimeZone</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Uid'</td> <td>UID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Url'</td> <td>URL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Version'</td> <td>VCardVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'X-abdate'</td> <td>ABDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'X-ablabel'</td> <td>ABLabel</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'X-abrelatednames'</td> <td>ABRelatedNames</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'X-abuid'</td> <td>AB_UID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'X-aim'</td> <td>AIM</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'X-icq'</td> <td>ICQ</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'X-socialprofile'</td> <td>SocialProfile</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='VCalendar'>VCard VCalendar Tags</a></h2> <p>The VCard module is also used to process iCalendar ICS files since they use a format similar to vCard. The following table lists standard iCalendar tags, but any existing tags will be extracted. Top-level iCalendar components (eg. Event, Todo, Timezone, etc.) are used for the family 1 group names, and embedded components (eg. Alarm) are added as a prefix to the tag name. See <a href="http://tools.ietf.org/html/rfc5545">http://tools.ietf.org/html/rfc5545</a> for the official iCalendar 2.0 specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'Acknowledged'</td> <td>Acknowledged</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Action'</td> <td>Action</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Attach'</td> <td>Attachment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Attendee'</td> <td>Attendee</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Calscale'</td> <td>CalendarScale</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Categories'</td> <td>Categories</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Class'</td> <td>Classification</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Comment'</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Completed'</td> <td>DateTimeCompleted</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Contact'</td> <td>Contact</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Created'</td> <td>DateCreated</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Description'</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Dtend'</td> <td>DateTimeEnd</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Dtstamp'</td> <td>DateTimeStamp</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Dtstart'</td> <td>DateTimeStart</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Due'</td> <td>DateTimeDue</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Duration'</td> <td>Duration</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Exdate'</td> <td>ExceptionDateTimes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Freebusy'</td> <td>FreeBusyTime</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Geo'</td> <td>Geolocation</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Last-modified'</td> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Location'</td> <td>Location</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Method'</td> <td>Method</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Organizer'</td> <td>Organizer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Percent-complete'</td> <td>PercentComplete</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Priority'</td> <td>Priority</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Prodid'</td> <td>Software</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Rdate'</td> <td>RecurrenceDateTimes</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Recurrence-id'</td> <td>RecurrenceID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Related-to'</td> <td>RelatedTo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Repeat'</td> <td>Repeat</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Request-status'</td> <td>RequestStatus</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Resources'</td> <td>Resources</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Rrule'</td> <td>RecurrenceRule</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Sequence'</td> <td>SequenceNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Status'</td> <td>Status</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Summary'</td> <td>Summary</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Transp'</td> <td>TimeTransparency</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Trigger'</td> <td>Trigger</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Tzid'</td> <td>TimezoneID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Tzname'</td> <td>TimezoneName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Tzoffsetfrom'</td> <td>TimezoneOffsetFrom</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Tzoffsetto'</td> <td>TimezoneOffsetTo</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Tzurl'</td> <td>TimeZoneURL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Uid'</td> <td>UID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'Url'</td> <td>URL</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'Version'</td> <td>VCalendarVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised May 11, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/Vorbis.html������������������������������������������������������000644 �000765 �000024 �00000012441 11663037137 021171� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Vorbis Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>Vorbis Tags</h2> <p>Information extracted from Ogg Vorbis files. See <a href="http://www.xiph.org/vorbis/doc/">http://www.xiph.org/vorbis/doc/</a> for the Vorbis specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td title='0x0001 = 1'>0x0001</td> <td>Identification</td> <td class=c>-</td> <td>--&gt; <a href='Vorbis.html#Identification'>Vorbis Identification Tags</a></td></tr> <tr class=b> <td title='0x0003 = 3'>0x0003</td> <td>Comments</td> <td class=c>-</td> <td>--&gt; <a href='Vorbis.html#Comments'>Vorbis Comments Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='Identification'>Vorbis Identification Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>VorbisVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>AudioChannels</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='5 = 0x5'>5</td> <td>SampleRate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>MaximumBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='13 = 0xd'>13</td> <td>NominalBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='17 = 0x11'>17</td> <td>MinimumBitrate</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Comments'>Vorbis Comments Tags</a></h2> <p>The tags below are only some common tags found in the Vorbis comments of Ogg Vorbis and Ogg FLAC audio files, however ExifTool will extract values from any tag found, even if not listed here.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'ACTOR'</td> <td>Actor</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ALBUM'</td> <td>Album</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ARTIST'</td> <td>Artist</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr class=b> <td>'COMMENT'</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'COMPOSER'</td> <td>Composer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'CONTACT'</td> <td>Contact</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr> <td>'COPYRIGHT'</td> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'COVERART'</td> <td>CoverArt</td> <td class=c>N</td> <td><span class=s><span class=n>(base64-encoded image)</span></span></td></tr> <tr> <td>'COVERARTMIME'</td> <td>CoverArtMIMEType</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'DATE'</td> <td>Date</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'DESCRIPTION'</td> <td>Description</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'DIRECTOR'</td> <td>Director</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ENCODED_BY'</td> <td>EncodedBy</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ENCODED_USING'</td> <td>EncodedUsing</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'GENRE'</td> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'ISRC'</td> <td>ISRCNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'LICENSE'</td> <td>License</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'LOCATION'</td> <td>Location</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'ORGANIZATION'</td> <td>Organization</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'PERFORMER'</td> <td>Performer</td> <td class=c title=' + = List'>N+</td> <td>&nbsp;</td></tr> <tr> <td>'PRODUCER'</td> <td>Producer</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'REPLAYGAIN_ALBUM_GAIN'</td> <td>ReplayGainAlbumGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'REPLAYGAIN_ALBUM_PEAK'</td> <td>ReplayGainAlbumPeak</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'REPLAYGAIN_TRACK_GAIN'</td> <td>ReplayGainTrackGain</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'REPLAYGAIN_TRACK_PEAK'</td> <td>ReplayGainTrackPeak</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'TITLE'</td> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'TRACKNUMBER'</td> <td>TrackNumber</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'VERSION'</td> <td>Version</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'vendor'</td> <td>Vendor</td> <td class=c>N</td> <td><span class=s><span class=n>(from comment header)</span></span></td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Jul 13, 2011</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/XMP.html���������������������������������������������������������000644 �000765 �000024 �00000775226 12623347002 020402� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>XMP Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>XMP Tags</h2> <p> XMP stands for &quot;Extensible Metadata Platform&quot;, an XML/RDF-based metadata format which is being pushed by Adobe. Information in this format can be embedded in many different image file types including JPG, JP2, TIFF, GIF, EPS, PDF, PSD, IND, INX, PNG, DJVU, SVG, PGF, MIFF, XCF, CRW, DNG and a variety of proprietary TIFF-based RAW images, as well as MOV, AVI, ASF, WMV, FLV, SWF and MP4 videos, and WMA and audio formats supporting ID3v2 information.</p> <p>The XMP <b>Tag ID</b>&#39;s aren&#39;t listed because in most cases they are identical to the <b>Tag Name</b> (aside from differences in case). Tags with different ID&#39;s are mentioned in the <b>Notes</b> column of the HTML version of this document.</p> <p>All XMP information is stored as character strings. The <b>Writable</b> column specifies the information format: <code>string</code> is an unformatted string, <code>integer</code> is a string of digits (possibly beginning with a &#39;+&#39; or &#39;-&#39;), <code>real</code> is a floating point number, <code>rational</code> is entered as a floating point number but stored as two <code>integer</code> strings separated by a &#39;/&#39; character, <code>date</code> is a date/time string entered in the format &quot;YYYY:mm:dd HH:MM:SS[.ss][+/-HH:MM]&quot;, <code>boolean</code> is either &quot;True&quot; or &quot;False&quot;, <code>struct</code> indicates a structured tag, and <code>lang-alt</code> is a tag that supports alternate languages.</p> <p>When reading, <code>struct</code> tags are extracted only if the Struct (-struct) option is used. Otherwise the corresponding &quot;flattened&quot; tags, indicated by an underline (<code>_</code>) after the <b>Writable</b> type, are extracted. When copying, by default both structured and flattened tags are available, but the flattened tags are considered &quot;unsafe&quot; so they they aren&#39;t copied unless specified explicitly. The Struct option may be disabled by setting Struct to 0 via the API or with --struct on the command line to copy only flattened tags, or enabled by setting Struct to 1 via the API or with -struct on the command line to copy only as structures. When writing, the Struct option has no effect, and both structured and flattened tags may be written. See <a href="../struct.html">struct.html</a> for more details.</p> <p>Individual languages for <code>lang-alt</code> tags are accessed by suffixing the tag name with a &#39;-&#39;, followed by an RFC 3066 language code (eg. &quot;XMP:Title-fr&quot;, or &quot;Rights-en-US&quot;). (See <a href="http://www.ietf.org/rfc/rfc3066.txt">http://www.ietf.org/rfc/rfc3066.txt</a> for the RFC 3066 specification.) A <code>lang-alt</code> tag with no language code accesses the &quot;x-default&quot; language, but causes other languages for this tag to be deleted when writing. The &quot;x-default&quot; language code may be specified when writing to preserve other existing languages (eg. &quot;XMP-dc:Description-x-default&quot;). When reading, &quot;x-default&quot; is not specified.</p> <p>The XMP tags are organized according to schema <b>Namespace</b> in the following tables. Note that a few of the longer namespace prefixes given below have been shortened for convenience (since the family 1 group names are derived from these by adding a leading &quot;XMP-&quot;). In cases where a tag name exists in more than one namespace, less common namespaces are avoided when writing. However, any namespace may be written by specifying a family 1 group name for the tag, eg) XMP-exif:Contrast or XMP-crs:Contrast. When deciding on which tags to add to an image, using standard schemas such as <a href="#dc">dc</a>, <a href="#xmp">xmp</a>, <a href="#iptcCore">iptcCore</a> and <a href="#iptcExt">iptcExt</a> is recommended if possible.</p> <p>For structures, the heading of the first column is <b>Field Name</b>. Field names are very similar to tag names, except they are used to identify fields inside structures instead of stand-alone tags. See <a href="../struct.html#Fields">the Field Name section of the Structured Information documentation</a> for more details.</p> <p>ExifTool will extract XMP information even if it is not listed in these tables, but other tags are not writable unless added as user-defined tags in the <a href="../config.html">ExifTool config file</a>. For example, the <code>pdfx</code> namespace doesn&#39;t have a predefined set of tag names because it is used to store application-defined PDF information, so although this information will be extracted, it is only writable if the corresponding user-defined tags have been created.</p> <p>The tables below list tags from the official XMP specification (with an underlined <b>Namespace</b> in the HTML version of this documentation), as well as extensions from various other sources. See <a href="http://www.adobe.com/devnet/xmp/">http://www.adobe.com/devnet/xmp/</a> for the official XMP specification. </p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Namespace</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>aas</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#aas'>XMP aas Tags</a></td></tr> <tr class=b> <td>acdsee</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#acdsee'>XMP acdsee Tags</a></td></tr> <tr> <td>album</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#Album'>XMP Album Tags</a></td></tr> <tr class=b> <td>apple-fi</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#apple_fi'>XMP apple_fi Tags</a></td></tr> <tr> <td><u>aux</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#aux'>XMP aux Tags</a></td></tr> <tr class=b> <td>cc</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#cc'>XMP cc Tags</a></td></tr> <tr> <td>cell</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#cell'>XMP cell Tags</a></td></tr> <tr class=b> <td>creatorAtom</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#creatorAtom'>XMP creatorAtom Tags</a></td></tr> <tr> <td><u>crs</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#crs'>XMP crs Tags</a></td></tr> <tr class=b> <td><u>dc</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#dc'>XMP dc Tags</a></td></tr> <tr> <td>dex</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#dex'>XMP dex Tags</a></td></tr> <tr class=b> <td>DICOM</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#DICOM'>XMP DICOM Tags</a></td></tr> <tr> <td>digiKam</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#digiKam'>XMP digiKam Tags</a></td></tr> <tr class=b> <td>dwc</td> <td class=c>-</td> <td>--&gt; <a href='DarwinCore.html'>DarwinCore Tags</a></td></tr> <tr> <td><u>exif</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#exif'>XMP exif Tags</a></td></tr> <tr class=b> <td>exifEX</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#exifEX'>XMP exifEX Tags</a></td></tr> <tr> <td>expressionmedia</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#ExpressionMedia'>XMP ExpressionMedia Tags</a></td></tr> <tr class=b> <td>extensis</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#extensis'>XMP extensis Tags</a></td></tr> <tr> <td>fpv</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#fpv'>XMP fpv Tags</a></td></tr> <tr class=b> <td>getty</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#GettyImages'>XMP GettyImages Tags</a></td></tr> <tr> <td>GPano</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#GPano'>XMP GPano Tags</a></td></tr> <tr class=b> <td>ics</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#ics'>XMP ics Tags</a></td></tr> <tr> <td>iptcCore</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#iptcCore'>XMP iptcCore Tags</a></td></tr> <tr class=b> <td>iptcExt</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#iptcExt'>XMP iptcExt Tags</a></td></tr> <tr> <td>lr</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#Lightroom'>XMP Lightroom Tags</a></td></tr> <tr class=b> <td>mediapro</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#MediaPro'>XMP MediaPro Tags</a></td></tr> <tr> <td>microsoft</td> <td class=c>-</td> <td>--&gt; <a href='Microsoft.html#XMP'>Microsoft XMP Tags</a></td></tr> <tr class=b> <td>MP</td> <td class=c>-</td> <td>--&gt; <a href='Microsoft.html#MP'>Microsoft MP Tags</a></td></tr> <tr> <td>MP1</td> <td class=c>-</td> <td>--&gt; <a href='Microsoft.html#MP1'>Microsoft MP1 Tags</a></td></tr> <tr class=b> <td>mwg-coll</td> <td class=c>-</td> <td>--&gt; <a href='MWG.html#Collections'>MWG Collections Tags</a></td></tr> <tr> <td>mwg-kw</td> <td class=c>-</td> <td>--&gt; <a href='MWG.html#Keywords'>MWG Keywords Tags</a></td></tr> <tr class=b> <td>mwg-rs</td> <td class=c>-</td> <td>--&gt; <a href='MWG.html#Regions'>MWG Regions Tags</a></td></tr> <tr> <td><u>pdf</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#pdf'>XMP pdf Tags</a></td></tr> <tr class=b> <td><u>pdfx</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#pdfx'>XMP pdfx Tags</a></td></tr> <tr> <td>photomech</td> <td class=c>-</td> <td>--&gt; <a href='PhotoMechanic.html#XMP'>PhotoMechanic XMP Tags</a></td></tr> <tr class=b> <td><u>photoshop</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#photoshop'>XMP photoshop Tags</a></td></tr> <tr> <td>PixelLive</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#PixelLive'>XMP PixelLive Tags</a></td></tr> <tr class=b> <td>plus</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#plus'>XMP plus Tags</a></td></tr> <tr> <td>pmi</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#pmi'>XMP pmi Tags</a></td></tr> <tr class=b> <td>prism</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#prism'>XMP prism Tags</a></td></tr> <tr> <td>prl</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#prl'>XMP prl Tags</a></td></tr> <tr class=b> <td>prm</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#prm'>XMP prm Tags</a></td></tr> <tr> <td>pur</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#pur'>XMP pur Tags</a></td></tr> <tr class=b> <td>rdf</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#rdf'>XMP rdf Tags</a></td></tr> <tr> <td>swf</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#swf'>XMP swf Tags</a></td></tr> <tr class=b> <td><u>tiff</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#tiff'>XMP tiff Tags</a></td></tr> <tr> <td><u>x</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#x'>XMP x Tags</a></td></tr> <tr class=b> <td><u>xmp</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#xmp'>XMP xmp Tags</a></td></tr> <tr> <td><u>xmpBJ</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#xmpBJ'>XMP xmpBJ Tags</a></td></tr> <tr class=b> <td><u>xmpDM</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#xmpDM'>XMP xmpDM Tags</a></td></tr> <tr> <td><u>xmpMM</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#xmpMM'>XMP xmpMM Tags</a></td></tr> <tr class=b> <td><u>xmpNote</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#xmpNote'>XMP xmpNote Tags</a></td></tr> <tr> <td>xmpPLUS</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#xmpPLUS'>XMP xmpPLUS Tags</a></td></tr> <tr class=b> <td><u>xmpRights</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#xmpRights'>XMP xmpRights Tags</a></td></tr> <tr> <td><u>xmpTPg</u></td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#xmpTPg'>XMP xmpTPg Tags</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='aas'>XMP aas Tags</a></h2> <p>Apple Adjustment Settings used by iPhone/iPad.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AffineA</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>AffineB</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>AffineC</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>AffineD</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>AffineX</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>AffineY</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>CropH</td> <td class=c title=' / = Avoided'>integer/</td> <td>&nbsp;</td></tr> <tr class=b> <td>CropW</td> <td class=c title=' / = Avoided'>integer/</td> <td>&nbsp;</td></tr> <tr> <td>CropX</td> <td class=c title=' / = Avoided'>integer/</td> <td>&nbsp;</td></tr> <tr class=b> <td>CropY</td> <td class=c title=' / = Avoided'>integer/</td> <td>&nbsp;</td></tr> <tr> <td>Curve0x</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Curve0y</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Curve1x</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Curve1y</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Curve2x</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Curve2y</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Curve3x</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Curve3y</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Curve4x</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Curve4y</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Highlights</td> <td class=c title=' / = Avoided'>real/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Shadows</td> <td class=c title=' / = Avoided'>real/</td> <td>&nbsp;</td></tr> <tr> <td>Vibrance</td> <td class=c title=' / = Avoided'>real/</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='acdsee'>XMP acdsee Tags</a></h2> <p>ACD Systems ACDSee namespace tags.</p> <p>(A note to software developers: Re-inventing your own private tags instead of using the equivalent tags in standard XMP namespaces defeats one of the most valuable features of metadata: interoperability. Your applications mumble to themselves instead of speaking out for the rest of the world to hear.)</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Author</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Caption</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Categories</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Collections</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>DateTime</td> <td class=c title=' / = Avoided'>date/</td> <td>&nbsp;</td></tr> <tr class=b> <td>DPP</td> <td class=c>lang-alt</td> <td><span class=s><span class=n>(newer version of XML raw processing settings)</span></span></td></tr> <tr> <td>Keywords</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Notes</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Rating</td> <td class=c title=' / = Avoided'>real/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Rawrppused</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>RPP</td> <td class=c>lang-alt</td> <td><span class=s><span class=n>(raw processing settings in XML format)</span></span></td></tr> <tr class=b> <td>Tagged</td> <td class=c title=' / = Avoided'>boolean/</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Album'>XMP Album Tags</a></h2> <p>Adobe Album namespace tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Notes</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='apple_fi'>XMP apple_fi Tags</a></h2> <p>Face information tags written by the Apple iPhone 5 inside the mwg-rs RegionExtensions.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AngleInfoRoll</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>AngleInfoYaw</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>ConfidenceLevel</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>FaceID</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>TimeStamp</td> <td class=c>integer</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='aux'>XMP aux Tags</a></h2> <p>Adobe-defined auxiliary EXIF tags. This namespace existed in the XMP specification until it was dropped in 2012, presumably due to the introduction of the EXIF 2.3 for XMP specification and the exifEX namespace at this time. For this reason, tags below with equivalents in the <a href="#exifEX">exifEX namespace</a> are avoided when writing.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>ApproximateFocusDistance</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr class=b> <td>DistortionCorrectionAlreadyApplied</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>Firmware</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>FlashCompensation</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr> <td>ImageNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>IsMergedHDR</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>IsMergedPanorama</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr class=b> <td>LateralChromaticAberrationCorrectionAlreadyApplied</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>Lens</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LensID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LensInfo</td> <td class=c title=' / = Avoided'>string/</td> <td><span class=s><span class=n>(4 rational values giving focal and aperture ranges)</span></span></td></tr> <tr class=b> <td>LensSerialNumber</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>OwnerName</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>SerialNumber</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>VignetteCorrectionAlreadyApplied</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='cc'>XMP cc Tags</a></h2> <p>Creative Commons namespace tags. Note that the CC specification for XMP is non-existent, so ExifTool must make some assumptions about the format of the specific properties in XMP (see <a href="http://creativecommons.org/ns">http://creativecommons.org/ns</a>).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AttributionName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>AttributionURL</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>DeprecatedOn</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>Jurisdiction</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LegalCode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>License</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>MorePermissions</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Permits</td> <td class=c title=' + = List'>string+</td> <td><span class=s>&#39;cc:DerivativeWorks&#39; = Derivative Works <br>&#39;cc:Distribution&#39; = Distribution <br>&#39;cc:Reproduction&#39; = Reproduction <br>&#39;cc:Sharing&#39; = Sharing</span></td></tr> <tr> <td>Prohibits</td> <td class=c title=' + = List'>string+</td> <td><span class=s>&#39;cc:CommercialUse&#39; = Commercial Use <br>&#39;cc:HighIncomeNationUse&#39; = High Income Nation Use</span></td></tr> <tr class=b> <td>Requires</td> <td class=c title=' + = List'>string+</td> <td><table class=cols><tr> <td>&#39;cc:Attribution&#39; = Attribution <br>&#39;cc:Copyleft&#39; = Copyleft <br>&#39;cc:LesserCopyleft&#39; = Lesser Copyleft <br>&#39;cc:Notice&#39; = Notice <br>&#39;cc:ShareAlike&#39; = Share Alike <br>&#39;cc:SourceCode&#39; = Source Code</td></tr></table> </td></tr> <tr> <td>UseGuidelines</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='cell'>XMP cell Tags</a></h2> <p>Location tags written by some Sony Ericsson phones.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CellTowerID</td> <td class=c>string</td> <td><span class=s><span class=n>(called cellid by the spec)</span></span></td></tr> <tr class=b> <td>CellGlobalID</td> <td class=c>string</td> <td><span class=s><span class=n>(called cgi by the spec)</span></span></td></tr> <tr> <td>LocationAreaCode</td> <td class=c>string</td> <td><span class=s><span class=n>(called lac by the spec)</span></span></td></tr> <tr class=b> <td>MobileCountryCode</td> <td class=c>string</td> <td><span class=s><span class=n>(called mcc by the spec)</span></span></td></tr> <tr> <td>MobileNetworkCode</td> <td class=c>string</td> <td><span class=s><span class=n>(called mnc by the spec)</span></span></td></tr> <tr class=b> <td>CellR</td> <td class=c>string</td> <td><span class=s><span class=n>(called r by the spec)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='creatorAtom'>XMP creatorAtom Tags</a></h2> <p>Adobe creatorAtom tags, written by After Effects.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AeProjectLink</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#AEProjectLink'>AEProjectLink Struct</a></td></tr> <tr class=b> <td>AeProjectLinkCompositionID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>AeProjectLinkFullPath</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>AeProjectLinkRenderOutputModuleIndex</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>AeProjectLinkRenderQueueItemID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>AeProjectLinkRenderTimeStamp</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr> <td>MacAtom</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#MacAtom'>MacAtom Struct</a></td></tr> <tr class=b> <td>MacAtomApplicationCode</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>MacAtomInvocationAppleEvent</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>MacAtomPosixProjectPath</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>WindowsAtom</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#WindowsAtom'>WindowsAtom Struct</a></td></tr> <tr class=b> <td>WindowsAtomExtension</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>WindowsAtomInvocationFlags</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>WindowsAtomUncProjectPath</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='AEProjectLink'>XMP AEProjectLink Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CompositionID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>FullPath</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>RenderOutputModuleIndex</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>RenderQueueItemID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>RenderTimeStamp</td> <td class=c>integer</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MacAtom'>XMP MacAtom Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>ApplicationCode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>InvocationAppleEvent</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>PosixProjectPath</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='WindowsAtom'>XMP WindowsAtom Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Extension</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>InvocationFlags</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>UncProjectPath</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='crs'>XMP crs Tags</a></h2> <p>Photoshop Camera Raw namespace tags. It is a shame that Adobe pollutes the metadata space with these incredibly bulky image editing parameters.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AlreadyApplied</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr class=b> <td>AutoBrightness</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>AutoContrast</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr class=b> <td>AutoExposure</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>AutoLateralCA</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>AutoShadows</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>AutoWhiteVersion</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>Blacks2012</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>BlueHue</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>BlueSaturation</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>Brightness</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>CameraProfile</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>CameraProfileDigest</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ChromaticAberrationB</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>ChromaticAberrationR</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>CircularGradientBasedCorrections</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#Correction'>Correction Struct</a></td></tr> <tr> <td>CircGradBasedCorrActive</td> <td class=c title=' _ = Flattened'>boolean_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionActive)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrAmount</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionAmount)</span></span></td></tr> <tr> <td>CircGradBasedCorrMasks</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#CorrectionMask'>CorrectionMask Struct</a> <br><span class='n s'>(CircularGradientBasedCorrectionsCorrectionMasks)</span></td></tr> <tr class=b> <td>CircGradBasedCorrMaskAlpha</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksAlpha)</span></span></td></tr> <tr> <td>CircGradBasedCorrMaskAngle</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksAngle)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrMaskBottom</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksBottom)</span></span></td></tr> <tr> <td>CircGradBasedCorrMaskCenterValue</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksCenterValue)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrMaskCenterWeight</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksCenterWeight)</span></span></td></tr> <tr> <td>CircGradBasedCorrMaskDabs</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksDabs)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrMaskFeather</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksFeather)</span></span></td></tr> <tr> <td>CircGradBasedCorrMaskFlipped</td> <td class=c title=' _ = Flattened'>boolean_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksFlipped)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrMaskFlow</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksFlow)</span></span></td></tr> <tr> <td>CircGradBasedCorrMaskFullX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksFullX)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrMaskFullY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksFullY)</span></span></td></tr> <tr> <td>CircGradBasedCorrMaskLeft</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksLeft)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrMaskValue</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksMaskValue)</span></span></td></tr> <tr> <td>CircGradBasedCorrMaskMidpoint</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksMidpoint)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrMaskPerimeterValue</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksPerimeterValue)</span></span></td></tr> <tr> <td>CircGradBasedCorrMaskRadius</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksRadius)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrMaskRight</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksRight)</span></span></td></tr> <tr> <td>CircGradBasedCorrMaskRoundness</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksRoundness)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrMaskSizeX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksSizeX)</span></span></td></tr> <tr> <td>CircGradBasedCorrMaskSizeY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksSizeY)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrMaskTop</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksTop)</span></span></td></tr> <tr> <td>CircGradBasedCorrMaskVersion</td> <td class=c title=' _ = Flattened'>integer_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksVersion)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrMaskWhat</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksWhat)</span></span></td></tr> <tr> <td>CircGradBasedCorrMaskX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksX)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrMaskY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksY)</span></span></td></tr> <tr> <td>CircGradBasedCorrMaskZeroX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksZeroX)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrMaskZeroY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsCorrectionMasksZeroY)</span></span></td></tr> <tr> <td>CircGradBasedCorrBrightness</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalBrightness)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrClarity</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalClarity)</span></span></td></tr> <tr> <td>CircGradBasedCorrClarity2012</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalClarity2012)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrContrast</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalContrast)</span></span></td></tr> <tr> <td>CircGradBasedCorrContrast2012</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalContrast2012)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrDefringe</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalDefringe)</span></span></td></tr> <tr> <td>CircGradBasedCorrExposure</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalExposure)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrExposure2012</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalExposure2012)</span></span></td></tr> <tr> <td>CircGradBasedCorrHighlights2012</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalHighlights2012)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrLuminanceNoise</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalLuminanceNoise)</span></span></td></tr> <tr> <td>CircGradBasedCorrMoire</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalMoire)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrSaturation</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalSaturation)</span></span></td></tr> <tr> <td>CircGradBasedCorrShadows2012</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalShadows2012)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrSharpness</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalSharpness)</span></span></td></tr> <tr> <td>CircGradBasedCorrTemperature</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalTemperature)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrTint</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalTint)</span></span></td></tr> <tr> <td>CircGradBasedCorrHue</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalToningHue)</span></span></td></tr> <tr class=b> <td>CircGradBasedCorrSaturation</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsLocalToningSaturation)</span></span></td></tr> <tr> <td>CircGradBasedCorrWhat</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(CircularGradientBasedCorrectionsWhat)</span></span></td></tr> <tr class=b> <td>Clarity</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>Clarity2012</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>ColorNoiseReduction</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>ColorNoiseReductionDetail</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>ColorNoiseReductionSmoothness</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>Contrast</td> <td class=c title=' / = Avoided'>integer/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Contrast2012</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>Converter</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ConvertToGrayscale</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>CropAngle</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>CropBottom</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>CropConstrainToWarp</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>CropHeight</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>CropLeft</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>CropRight</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>CropTop</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>CropUnit</td> <td class=c>integer</td> <td><span class=s>0 = pixels <br>1 = inches <br>2 = cm</span></td></tr> <tr> <td>CropUnits</td> <td class=c>integer</td> <td><span class=s>0 = pixels <br>1 = inches <br>2 = cm</span></td></tr> <tr class=b> <td>CropWidth</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Defringe</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefringeGreenAmount</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>DefringeGreenHueHi</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefringeGreenHueLo</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>DefringePurpleAmount</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>DefringePurpleHueHi</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>DefringePurpleHueLo</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>Exposure</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Exposure2012</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>FillLight</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>GradientBasedCorrections</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#Correction'>Correction Struct</a></td></tr> <tr class=b> <td>GradientBasedCorrActive</td> <td class=c title=' _ = Flattened'>boolean_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionActive)</span></span></td></tr> <tr> <td>GradientBasedCorrAmount</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionAmount)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrMasks</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#CorrectionMask'>CorrectionMask Struct</a> <br><span class='n s'>(GradientBasedCorrectionsCorrectionMasks)</span></td></tr> <tr> <td>GradientBasedCorrMaskAlpha</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksAlpha)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrMaskAngle</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksAngle)</span></span></td></tr> <tr> <td>GradientBasedCorrMaskBottom</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksBottom)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrMaskCenterValue</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksCenterValue)</span></span></td></tr> <tr> <td>GradientBasedCorrMaskCenterWeight</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksCenterWeight)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrMaskDabs</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksDabs)</span></span></td></tr> <tr> <td>GradientBasedCorrMaskFeather</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksFeather)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrMaskFlipped</td> <td class=c title=' _ = Flattened'>boolean_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksFlipped)</span></span></td></tr> <tr> <td>GradientBasedCorrMaskFlow</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksFlow)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrMaskFullX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksFullX)</span></span></td></tr> <tr> <td>GradientBasedCorrMaskFullY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksFullY)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrMaskLeft</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksLeft)</span></span></td></tr> <tr> <td>GradientBasedCorrMaskValue</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksMaskValue)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrMaskMidpoint</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksMidpoint)</span></span></td></tr> <tr> <td>GradientBasedCorrMaskPerimeterValue</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksPerimeterValue)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrMaskRadius</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksRadius)</span></span></td></tr> <tr> <td>GradientBasedCorrMaskRight</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksRight)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrMaskRoundness</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksRoundness)</span></span></td></tr> <tr> <td>GradientBasedCorrMaskSizeX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksSizeX)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrMaskSizeY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksSizeY)</span></span></td></tr> <tr> <td>GradientBasedCorrMaskTop</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksTop)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrMaskVersion</td> <td class=c title=' _ = Flattened'>integer_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksVersion)</span></span></td></tr> <tr> <td>GradientBasedCorrMaskWhat</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksWhat)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrMaskX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksX)</span></span></td></tr> <tr> <td>GradientBasedCorrMaskY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksY)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrMaskZeroX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksZeroX)</span></span></td></tr> <tr> <td>GradientBasedCorrMaskZeroY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsCorrectionMasksZeroY)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrBrightness</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalBrightness)</span></span></td></tr> <tr> <td>GradientBasedCorrClarity</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalClarity)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrClarity2012</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalClarity2012)</span></span></td></tr> <tr> <td>GradientBasedCorrContrast</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalContrast)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrContrast2012</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalContrast2012)</span></span></td></tr> <tr> <td>GradientBasedCorrDefringe</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalDefringe)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrExposure</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalExposure)</span></span></td></tr> <tr> <td>GradientBasedCorrExposure2012</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalExposure2012)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrHighlights2012</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalHighlights2012)</span></span></td></tr> <tr> <td>GradientBasedCorrLuminanceNoise</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalLuminanceNoise)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrMoire</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalMoire)</span></span></td></tr> <tr> <td>GradientBasedCorrSaturation</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalSaturation)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrShadows2012</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalShadows2012)</span></span></td></tr> <tr> <td>GradientBasedCorrSharpness</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalSharpness)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrTemperature</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalTemperature)</span></span></td></tr> <tr> <td>GradientBasedCorrTint</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalTint)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrHue</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalToningHue)</span></span></td></tr> <tr> <td>GradientBasedCorrSaturation</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsLocalToningSaturation)</span></span></td></tr> <tr class=b> <td>GradientBasedCorrWhat</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(GradientBasedCorrectionsWhat)</span></span></td></tr> <tr> <td>GrainAmount</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>GrainFrequency</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>GrainSize</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>GrayMixerAqua</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>GrayMixerBlue</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>GrayMixerGreen</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>GrayMixerMagenta</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>GrayMixerOrange</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>GrayMixerPurple</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>GrayMixerRed</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>GrayMixerYellow</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>GreenHue</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>GreenSaturation</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>HasCrop</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>HasSettings</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr class=b> <td>HighlightRecovery</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>Highlights2012</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>HueAdjustmentAqua</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>HueAdjustmentBlue</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>HueAdjustmentGreen</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>HueAdjustmentMagenta</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>HueAdjustmentOrange</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>HueAdjustmentPurple</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>HueAdjustmentRed</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>HueAdjustmentYellow</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>IncrementalTemperature</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>IncrementalTint</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>LensManualDistortionAmount</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>LensProfileChromaticAberrationScale</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>LensProfileDigest</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LensProfileDistortionScale</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>LensProfileEnable</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>LensProfileFilename</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LensProfileMatchKeyCameraModelName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LensProfileMatchKeyExifMake</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LensProfileMatchKeyExifModel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LensProfileMatchKeyIsRaw</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr class=b> <td>LensProfileMatchKeyLensID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LensProfileMatchKeyLensInfo</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LensProfileMatchKeyLensName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LensProfileMatchKeySensorFormatFactor</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>LensProfileName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LensProfileSetup</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LensProfileVignettingScale</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>LuminanceAdjustmentAqua</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>LuminanceAdjustmentBlue</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>LuminanceAdjustmentGreen</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>LuminanceAdjustmentMagenta</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>LuminanceAdjustmentOrange</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>LuminanceAdjustmentPurple</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>LuminanceAdjustmentRed</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>LuminanceAdjustmentYellow</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>LuminanceNoiseReductionContrast</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>LuminanceNoiseReductionDetail</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>LuminanceSmoothing</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>MoireFilter</td> <td class=c>string</td> <td><span class=s>&#39;Off&#39; = Off <br>&#39;On&#39; = On</span></td></tr> <tr> <td>PaintBasedCorrections</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#Correction'>Correction Struct</a></td></tr> <tr class=b> <td>PaintCorrectionActive</td> <td class=c title=' _ = Flattened'>boolean_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionActive)</span></span></td></tr> <tr> <td>PaintCorrectionAmount</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionAmount)</span></span></td></tr> <tr class=b> <td>PaintBasedCorrectionMasks</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#CorrectionMask'>CorrectionMask Struct</a> <br><span class='n s'>(PaintBasedCorrectionsCorrectionMasks)</span></td></tr> <tr> <td>PaintCorrectionMaskAlpha</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksAlpha)</span></span></td></tr> <tr class=b> <td>PaintCorrectionMaskAngle</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksAngle)</span></span></td></tr> <tr> <td>PaintCorrectionMaskBottom</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksBottom)</span></span></td></tr> <tr class=b> <td>PaintCorrectionMaskCenterValue</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksCenterValue)</span></span></td></tr> <tr> <td>PaintCorrectionMaskCenterWeight</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksCenterWeight)</span></span></td></tr> <tr class=b> <td>PaintCorrectionMaskDabs</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksDabs)</span></span></td></tr> <tr> <td>PaintCorrectionMaskFeather</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksFeather)</span></span></td></tr> <tr class=b> <td>PaintCorrectionMaskFlipped</td> <td class=c title=' _ = Flattened'>boolean_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksFlipped)</span></span></td></tr> <tr> <td>PaintCorrectionMaskFlow</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksFlow)</span></span></td></tr> <tr class=b> <td>PaintCorrectionMaskFullX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksFullX)</span></span></td></tr> <tr> <td>PaintCorrectionMaskFullY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksFullY)</span></span></td></tr> <tr class=b> <td>PaintCorrectionMaskLeft</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksLeft)</span></span></td></tr> <tr> <td>PaintCorrectionMaskValue</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksMaskValue)</span></span></td></tr> <tr class=b> <td>PaintCorrectionMaskMidpoint</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksMidpoint)</span></span></td></tr> <tr> <td>PaintCorrectionMaskPerimeterValue</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksPerimeterValue)</span></span></td></tr> <tr class=b> <td>PaintCorrectionMaskRadius</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksRadius)</span></span></td></tr> <tr> <td>PaintCorrectionMaskRight</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksRight)</span></span></td></tr> <tr class=b> <td>PaintCorrectionMaskRoundness</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksRoundness)</span></span></td></tr> <tr> <td>PaintCorrectionMaskSizeX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksSizeX)</span></span></td></tr> <tr class=b> <td>PaintCorrectionMaskSizeY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksSizeY)</span></span></td></tr> <tr> <td>PaintCorrectionMaskTop</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksTop)</span></span></td></tr> <tr class=b> <td>PaintCorrectionMaskVersion</td> <td class=c title=' _ = Flattened'>integer_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksVersion)</span></span></td></tr> <tr> <td>PaintCorrectionMaskWhat</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksWhat)</span></span></td></tr> <tr class=b> <td>PaintCorrectionMaskX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksX)</span></span></td></tr> <tr> <td>PaintCorrectionMaskY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksY)</span></span></td></tr> <tr class=b> <td>PaintCorrectionMaskZeroX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksZeroX)</span></span></td></tr> <tr> <td>PaintCorrectionMaskZeroY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsCorrectionMasksZeroY)</span></span></td></tr> <tr class=b> <td>PaintCorrectionBrightness</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalBrightness)</span></span></td></tr> <tr> <td>PaintCorrectionClarity</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalClarity)</span></span></td></tr> <tr class=b> <td>PaintCorrectionClarity2012</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalClarity2012)</span></span></td></tr> <tr> <td>PaintCorrectionContrast</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalContrast)</span></span></td></tr> <tr class=b> <td>PaintCorrectionContrast2012</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalContrast2012)</span></span></td></tr> <tr> <td>PaintCorrectionDefringe</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalDefringe)</span></span></td></tr> <tr class=b> <td>PaintCorrectionExposure</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalExposure)</span></span></td></tr> <tr> <td>PaintCorrectionExposure2012</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalExposure2012)</span></span></td></tr> <tr class=b> <td>PaintCorrectionHighlights2012</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalHighlights2012)</span></span></td></tr> <tr> <td>PaintCorrectionLuminanceNoise</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalLuminanceNoise)</span></span></td></tr> <tr class=b> <td>PaintCorrectionMoire</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalMoire)</span></span></td></tr> <tr> <td>PaintCorrectionSaturation</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalSaturation)</span></span></td></tr> <tr class=b> <td>PaintCorrectionShadows2012</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalShadows2012)</span></span></td></tr> <tr> <td>PaintCorrectionSharpness</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalSharpness)</span></span></td></tr> <tr class=b> <td>PaintCorrectionTemperature</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalTemperature)</span></span></td></tr> <tr> <td>PaintCorrectionTint</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalTint)</span></span></td></tr> <tr class=b> <td>PaintCorrectionHue</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalToningHue)</span></span></td></tr> <tr> <td>PaintCorrectionSaturation</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsLocalToningSaturation)</span></span></td></tr> <tr class=b> <td>PaintCorrectionWhat</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(PaintBasedCorrectionsWhat)</span></span></td></tr> <tr> <td>ParametricDarks</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>ParametricHighlights</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>ParametricHighlightSplit</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>ParametricLights</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>ParametricMidtoneSplit</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>ParametricShadows</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>ParametricShadowSplit</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>PerspectiveAspect</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>PerspectiveHorizontal</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>PerspectiveRotate</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>PerspectiveScale</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>PerspectiveUpright</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>PerspectiveVertical</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>PostCropVignetteAmount</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>PostCropVignetteFeather</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>PostCropVignetteHighlightContrast</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>PostCropVignetteMidpoint</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>PostCropVignetteRoundness</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>PostCropVignetteStyle</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProcessVersion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>RawFileName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>RedEyeInfo</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>RedHue</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>RedSaturation</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>RetouchAreas</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#RetouchArea'>RetouchArea Struct</a></td></tr> <tr class=b> <td>RetouchAreaFeather</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasFeather)</span></span></td></tr> <tr> <td>RetouchAreaMasks</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#CorrectionMask'>CorrectionMask Struct</a> <br><span class='n s'>(RetouchAreasMasks)</span></td></tr> <tr class=b> <td>RetouchAreaMaskAlpha</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksAlpha)</span></span></td></tr> <tr> <td>RetouchAreaMaskAngle</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksAngle)</span></span></td></tr> <tr class=b> <td>RetouchAreaMaskBottom</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksBottom)</span></span></td></tr> <tr> <td>RetouchAreaMaskCenterValue</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksCenterValue)</span></span></td></tr> <tr class=b> <td>RetouchAreaMaskCenterWeight</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksCenterWeight)</span></span></td></tr> <tr> <td>RetouchAreaMaskDabs</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(RetouchAreasMasksDabs)</span></span></td></tr> <tr class=b> <td>RetouchAreaMaskFeather</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksFeather)</span></span></td></tr> <tr> <td>RetouchAreaMaskFlipped</td> <td class=c title=' _ = Flattened'>boolean_</td> <td><span class=s><span class=n>(RetouchAreasMasksFlipped)</span></span></td></tr> <tr class=b> <td>RetouchAreaMaskFlow</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksFlow)</span></span></td></tr> <tr> <td>RetouchAreaMaskFullX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksFullX)</span></span></td></tr> <tr class=b> <td>RetouchAreaMaskFullY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksFullY)</span></span></td></tr> <tr> <td>RetouchAreaMaskLeft</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksLeft)</span></span></td></tr> <tr class=b> <td>RetouchAreaMaskValue</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksMaskValue)</span></span></td></tr> <tr> <td>RetouchAreaMaskMidpoint</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksMidpoint)</span></span></td></tr> <tr class=b> <td>RetouchAreaMaskPerimeterValue</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksPerimeterValue)</span></span></td></tr> <tr> <td>RetouchAreaMaskRadius</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksRadius)</span></span></td></tr> <tr class=b> <td>RetouchAreaMaskRight</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksRight)</span></span></td></tr> <tr> <td>RetouchAreaMaskRoundness</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksRoundness)</span></span></td></tr> <tr class=b> <td>RetouchAreaMaskSizeX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksSizeX)</span></span></td></tr> <tr> <td>RetouchAreaMaskSizeY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksSizeY)</span></span></td></tr> <tr class=b> <td>RetouchAreaMaskTop</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksTop)</span></span></td></tr> <tr> <td>RetouchAreaMaskVersion</td> <td class=c title=' _ = Flattened'>integer_</td> <td><span class=s><span class=n>(RetouchAreasMasksVersion)</span></span></td></tr> <tr class=b> <td>RetouchAreaMaskWhat</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(RetouchAreasMasksWhat)</span></span></td></tr> <tr> <td>RetouchAreaMaskX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksX)</span></span></td></tr> <tr class=b> <td>RetouchAreaMaskY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksY)</span></span></td></tr> <tr> <td>RetouchAreaMaskZeroX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksZeroX)</span></span></td></tr> <tr class=b> <td>RetouchAreaMaskZeroY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasMasksZeroY)</span></span></td></tr> <tr> <td>RetouchAreaMethod</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(RetouchAreasMethod)</span></span></td></tr> <tr class=b> <td>RetouchAreaOffsetY</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasOffsetY)</span></span></td></tr> <tr> <td>RetouchAreaOpacity</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasOpacity)</span></span></td></tr> <tr class=b> <td>RetouchAreaSeed</td> <td class=c title=' _ = Flattened'>integer_</td> <td><span class=s><span class=n>(RetouchAreasSeed)</span></span></td></tr> <tr> <td>RetouchAreaSourceState</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(RetouchAreasSourceState)</span></span></td></tr> <tr class=b> <td>RetouchAreaSourceX</td> <td class=c title=' _ = Flattened'>real_</td> <td><span class=s><span class=n>(RetouchAreasSourceX)</span></span></td></tr> <tr> <td>RetouchAreaSpotType</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(RetouchAreasSpotType)</span></span></td></tr> <tr class=b> <td>RetouchInfo</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>Saturation</td> <td class=c title=' / = Avoided'>integer/</td> <td>&nbsp;</td></tr> <tr class=b> <td>SaturationAdjustmentAqua</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>SaturationAdjustmentBlue</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>SaturationAdjustmentGreen</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>SaturationAdjustmentMagenta</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>SaturationAdjustmentOrange</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>SaturationAdjustmentPurple</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>SaturationAdjustmentRed</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>SaturationAdjustmentYellow</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>Shadows</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>Shadows2012</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>ShadowTint</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>SharpenDetail</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>SharpenEdgeMasking</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>SharpenRadius</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Sharpness</td> <td class=c title=' / = Avoided'>integer/</td> <td>&nbsp;</td></tr> <tr> <td>Smoothness</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>SplitToningBalance</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>SplitToningHighlightHue</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>SplitToningHighlightSaturation</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>SplitToningShadowHue</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>SplitToningShadowSaturation</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>ColorTemperature</td> <td class=c title=' / = Avoided'>integer/</td> <td><span class=s><span class=n>(called Temperature by the spec)</span></span></td></tr> <tr class=b> <td>Tint</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>ToneCurve</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ToneCurveBlue</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>ToneCurveGreen</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ToneCurveName</td> <td class=c>string</td> <td><span class=s>&#39;Custom&#39; = Custom <br>&#39;Linear&#39; = Linear <br>&#39;Medium Contrast&#39; = Medium Contrast <br>&#39;Strong Contrast&#39; = Strong Contrast</span></td></tr> <tr> <td>ToneCurveName2012</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ToneCurvePV2012</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>ToneCurvePV2012Blue</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ToneCurvePV2012Green</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>ToneCurvePV2012Red</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ToneCurveRed</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>UprightCenterMode</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>UprightCenterNormX</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>UprightCenterNormY</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>UprightDependentDigest</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>UprightFocalLength35mm</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>UprightFocalMode</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>UprightPreview</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr class=b> <td>UprightTransform_0</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>UprightTransform_1</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>UprightTransform_2</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>UprightTransform_3</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>UprightTransform_4</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>UprightTransformCount</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>UprightVersion</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>Version</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Vibrance</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>VignetteAmount</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>VignetteMidpoint</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>What</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>WhiteBalance</td> <td class=c title=' / = Avoided'>string/</td> <td><table class=cols><tr> <td>&#39;As Shot&#39; = As Shot <br>&#39;Auto&#39; = Auto <br>&#39;Cloudy&#39; = Cloudy <br>&#39;Custom&#39; = Custom <br>&#39;Daylight&#39; = Daylight <br>&#39;Flash&#39; = Flash <br>&#39;Fluorescent&#39; = Fluorescent <br>&#39;Shade&#39; = Shade <br>&#39;Tungsten&#39; = Tungsten</td></tr></table> </td></tr> <tr> <td>Whites2012</td> <td class=c>integer</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Correction'>XMP Correction Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CorrectionActive</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr class=b> <td>CorrectionAmount</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>CorrectionMasks</td> <td class=c title=' + = List'>CorrectionMask+</td> <td>--&gt; <a href='XMP.html#CorrectionMask'>CorrectionMask Struct</a></td></tr> <tr class=b> <td>LocalBrightness</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>LocalClarity</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalClarity2012</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>LocalContrast</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalContrast2012</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>LocalDefringe</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalExposure</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>LocalExposure2012</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalHighlights2012</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>LocalLuminanceNoise</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalMoire</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>LocalSaturation</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalShadows2012</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>LocalSharpness</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalTemperature</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>LocalTint</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocalToningHue</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>LocalToningSaturation</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>What</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CorrectionMask'>XMP CorrectionMask Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Alpha</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Angle</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Bottom</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>CenterValue</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>CenterWeight</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Dabs</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>Feather</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Flipped</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>Flow</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>FullX</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>FullY</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Left</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>MaskValue</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Midpoint</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>PerimeterValue</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Radius</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Right</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Roundness</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>SizeX</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>SizeY</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Top</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Version</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>What</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>X</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Y</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>ZeroX</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>ZeroY</td> <td class=c>real</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='RetouchArea'>XMP RetouchArea Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Feather</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Masks</td> <td class=c title=' + = List'>CorrectionMask+</td> <td>--&gt; <a href='XMP.html#CorrectionMask'>CorrectionMask Struct</a></td></tr> <tr> <td>Method</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>OffsetY</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Opacity</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Seed</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>SourceState</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>SourceX</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>SpotType</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='dc'>XMP dc Tags</a></h2> <p>Dublin Core namespace tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Contributor</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Coverage</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Creator</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Date</td> <td class=c title=' + = List'>date+</td> <td>&nbsp;</td></tr> <tr> <td>Description</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>Format</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Identifier</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Language</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>Publisher</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Relation</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>Rights</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>Source</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Subject</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Title</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr> <td>Type</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='dex'>XMP dex Tags</a></h2> <p>Description Explorer namespace tags. These tags are not very common. The Source and Rating tags are avoided when writing due to name conflicts with other XMP tags. (see <a href="http://www.optimasc.com/products/fileid/">http://www.optimasc.com/products/fileid/</a>)</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CRC32</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>FFID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LicenseType</td> <td class=c>string</td> <td><table class=cols><tr> <td>&#39;adware&#39; = Adware <br>&#39;commercial&#39; = Commercial <br>&#39;demo&#39; = Demo <br>&#39;freeware&#39; = Freeware <br>&#39;open source&#39; = Open Source <br>&#39;public domain&#39; = Public Domain <br>&#39;shareware&#39; = Shareware <br>&#39;unknown&#39; = Unknown</td></tr></table> </td></tr> <tr class=b> <td>OS</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>Rating</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Revision</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ShortDescription</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>Source</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='DICOM'>XMP DICOM Tags</a></h2> <p>DICOM namespace tags. These XMP tags allow some DICOM information to be stored in files of other than DICOM format. See the <a href="DICOM.html">DICOM Tags documentation</a> for a list of tags available in DICOM-format files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>EquipmentInstitution</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>EquipmentManufacturer</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>PatientBirthDate</td> <td class=c>date</td> <td><span class=s><span class=n>(called PatientDOB by the spec)</span></span></td></tr> <tr class=b> <td>PatientID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>PatientName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>PatientSex</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>SeriesDateTime</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>SeriesDescription</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>SeriesModality</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>SeriesNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>StudyDateTime</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>StudyDescription</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>StudyID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>StudyPhysician</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='digiKam'>XMP digiKam Tags</a></h2> <p>DigiKam namespace tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CaptionsAuthorNames</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>CaptionsDateTimeStamps</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr> <td>ColorLabel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageHistory</td> <td class=c title=' / = Avoided'>string/</td> <td><span class=s><span class=n>(different format from EXIF:ImageHistory)</span></span></td></tr> <tr> <td>LensCorrectionSettings</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>PickLabel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>TagsList</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='exif'>XMP exif Tags</a></h2> <p>EXIF namespace for EXIF tags. See <a href="http://www.cipa.jp/std/documents/e/DC-010-2012_E.pdf">http://www.cipa.jp/std/documents/e/DC-010-2012_E.pdf</a> for the specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>ApertureValue</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr class=b> <td>BrightnessValue</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr> <td>CFAPattern</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#CFAPattern'>CFAPattern Struct</a></td></tr> <tr class=b> <td>CFAPatternColumns</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr> <td>CFAPatternRows</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr class=b> <td>CFAPatternValues</td> <td class=c title=' _ = Flattened + = List'>integer_+</td> <td>&nbsp;</td></tr> <tr> <td>ColorSpace</td> <td class=c>integer</td> <td><span class=s>1 = sRGB <br>2 = Adobe RGB <br>65535 = Uncalibrated</span></td></tr> <tr class=b> <td>ComponentsConfiguration</td> <td class=c title=' + = List'>integer+</td> <td><table class=cols><tr> <td>0 = - <br>1 = Y <br>2 = Cb <br>3 = Cr</td><td>&nbsp;&nbsp;</td> <td>4 = R <br>5 = G <br>6 = B</td></tr></table> </td></tr> <tr> <td>CompressedBitsPerPixel</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr class=b> <td>Contrast</td> <td class=c>integer</td> <td><span class=s>0 = Normal <br>1 = Low <br>2 = High</span></td></tr> <tr> <td>CustomRendered</td> <td class=c>integer</td> <td><span class=s>0 = Normal <br>1 = Custom</span></td></tr> <tr class=b> <td>DateTimeDigitized</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr> <td>DateTimeOriginal</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceSettingDescription</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#DeviceSettings'>DeviceSettings Struct</a></td></tr> <tr> <td>DeviceSettingDescriptionColumns</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr class=b> <td>DeviceSettingDescriptionRows</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr> <td>DeviceSettingDescriptionSettings</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>DigitalZoomRatio</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr> <td>ExifVersion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ExposureCompensation</td> <td class=c>rational</td> <td><span class=s><span class=n>(called ExposureBiasValue by the spec)</span></span></td></tr> <tr> <td>ExposureIndex</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr class=b> <td>ExposureMode</td> <td class=c>integer</td> <td><span class=s>0 = Auto <br>1 = Manual <br>2 = Auto bracket</span></td></tr> <tr> <td>ExposureProgram</td> <td class=c>integer</td> <td><table class=cols><tr> <td>0 = Not Defined <br>1 = Manual <br>2 = Program AE <br>3 = Aperture-priority AE <br>4 = Shutter speed priority AE <br>5 = Creative (Slow speed) <br>6 = Action (High speed) <br>7 = Portrait <br>8 = Landscape</td></tr></table> </td></tr> <tr class=b> <td>ExposureTime</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr> <td>FileSource</td> <td class=c>integer</td> <td><span class=s>1 = Film Scanner <br>2 = Reflection Print Scanner <br>3 = Digital Camera</span></td></tr> <tr class=b> <td>Flash</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#Flash'>Flash Struct</a></td></tr> <tr> <td>FlashEnergy</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr class=b> <td>FlashFired</td> <td class=c title=' _ = Flattened'>boolean_</td> <td><span class=s>&#39;False&#39; = False <br>&#39;True&#39; = True</span></td></tr> <tr> <td>FlashFunction</td> <td class=c title=' _ = Flattened'>boolean_</td> <td><span class=s>&#39;False&#39; = False <br>&#39;True&#39; = True</span></td></tr> <tr class=b> <td>FlashMode</td> <td class=c title=' _ = Flattened'>integer_</td> <td><span class=s>0 = Unknown <br>1 = On <br>2 = Off <br>3 = Auto</span></td></tr> <tr> <td>FlashpixVersion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>FlashRedEyeMode</td> <td class=c title=' _ = Flattened'>boolean_</td> <td><span class=s>&#39;False&#39; = False <br>&#39;True&#39; = True</span></td></tr> <tr> <td>FlashReturn</td> <td class=c title=' _ = Flattened'>integer_</td> <td><span class=s>0 = No return detection <br>2 = Return not detected <br>3 = Return detected</span></td></tr> <tr class=b> <td>FNumber</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr> <td>FocalLength</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr class=b> <td>FocalLengthIn35mmFormat</td> <td class=c>integer</td> <td><span class=s><span class=n>(called FocalLengthIn35mmFilm by the spec)</span></span></td></tr> <tr> <td>FocalPlaneResolutionUnit</td> <td class=c>integer</td> <td><span class=s><span class=n>(values 1, 4 and 5 are not standard EXIF)</span> <br>1 = None <br>2 = inches <br>3 = cm <br>4 = mm <br>5 = um</span></td></tr> <tr class=b> <td>FocalPlaneXResolution</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr> <td>FocalPlaneYResolution</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr class=b> <td>GainControl</td> <td class=c>integer</td> <td><span class=s>0 = None <br>1 = Low gain up <br>2 = High gain up <br>3 = Low gain down <br>4 = High gain down</span></td></tr> <tr> <td>GPSAltitude</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr class=b> <td>GPSAltitudeRef</td> <td class=c>integer</td> <td><span class=s>0 = Above Sea Level <br>1 = Below Sea Level</span></td></tr> <tr> <td>GPSAreaInformation</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>GPSDestBearing</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr> <td>GPSDestBearingRef</td> <td class=c>string</td> <td><span class=s>&#39;M&#39; = Magnetic North <br>&#39;T&#39; = True North</span></td></tr> <tr class=b> <td>GPSDestDistance</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr> <td>GPSDestDistanceRef</td> <td class=c>string</td> <td><span class=s>&#39;K&#39; = Kilometers <br>&#39;M&#39; = Miles <br>&#39;N&#39; = Nautical Miles</span></td></tr> <tr class=b> <td>GPSDestLatitude</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>GPSDestLongitude</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>GPSDifferential</td> <td class=c>integer</td> <td><span class=s>0 = No Correction <br>1 = Differential Corrected</span></td></tr> <tr> <td>GPSDOP</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr class=b> <td>GPSHPositioningError</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr> <td>GPSImgDirection</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr class=b> <td>GPSImgDirectionRef</td> <td class=c>string</td> <td><span class=s>&#39;M&#39; = Magnetic North <br>&#39;T&#39; = True North</span></td></tr> <tr> <td>GPSLatitude</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>GPSLongitude</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>GPSMapDatum</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>GPSMeasureMode</td> <td class=c>integer</td> <td><span class=s>2 = 2-Dimensional <br>3 = 3-Dimensional</span></td></tr> <tr> <td>GPSProcessingMethod</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>GPSSatellites</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>GPSSpeed</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr class=b> <td>GPSSpeedRef</td> <td class=c>string</td> <td><span class=s>&#39;K&#39; = km/h <br>&#39;M&#39; = mph <br>&#39;N&#39; = knots</span></td></tr> <tr> <td>GPSStatus</td> <td class=c>string</td> <td><span class=s>&#39;A&#39; = Measurement Active <br>&#39;V&#39; = Measurement Void</span></td></tr> <tr class=b> <td>GPSDateTime</td> <td class=c>date</td> <td><span class=s><span class=n>(a date/time tag called GPSTimeStamp by the XMP specification. This tag is renamed here to prevent direct copy from EXIF:GPSTimeStamp which is a time-only tag. Instead, the value of this tag should be taken from Composite:GPSDateTime when copying from EXIF)</span></span></td></tr> <tr> <td>GPSTrack</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr class=b> <td>GPSTrackRef</td> <td class=c>string</td> <td><span class=s>&#39;M&#39; = Magnetic North <br>&#39;T&#39; = True North</span></td></tr> <tr> <td>GPSVersionID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageUniqueID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ISO</td> <td class=c title=' + = List'>integer+</td> <td><span class=s><span class=n>(called ISOSpeedRatings by the spec)</span></span></td></tr> <tr class=b> <td>LightSource</td> <td class=c>string</td> <td>--&gt; <a href='EXIF.html#LightSource'>EXIF LightSource Values</a></td></tr> <tr> <td>MakerNote</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>MaxApertureValue</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr> <td>MeteringMode</td> <td class=c>integer</td> <td><table class=cols><tr> <td>1 = Average <br>2 = Center-weighted average <br>3 = Spot <br>4 = Multi-spot <br>5 = Multi-segment <br>6 = Partial <br>255 = Other</td></tr></table> </td></tr> <tr class=b> <td>NativeDigest</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Opto-ElectricConvFactor</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#OECF'>OECF Struct</a> <br><span class='n s'>(called OECF by the spec)</span></td></tr> <tr class=b> <td>OECFColumns</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr> <td>OECFNames</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>OECFRows</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr> <td>OECFValues</td> <td class=c title=' _ = Flattened + = List'>rational_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ExifImageWidth</td> <td class=c>integer</td> <td><span class=s><span class=n>(called PixelXDimension by the spec)</span></span></td></tr> <tr> <td>ExifImageHeight</td> <td class=c>integer</td> <td><span class=s><span class=n>(called PixelYDimension by the spec)</span></span></td></tr> <tr class=b> <td>RelatedSoundFile</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Saturation</td> <td class=c>integer</td> <td><span class=s>0 = Normal <br>1 = Low <br>2 = High</span></td></tr> <tr class=b> <td>SceneCaptureType</td> <td class=c>integer</td> <td><span class=s>0 = Standard <br>1 = Landscape <br>2 = Portrait <br>3 = Night</span></td></tr> <tr> <td>SceneType</td> <td class=c>integer</td> <td><span class=s>1 = Directly photographed</span></td></tr> <tr class=b> <td>SensingMethod</td> <td class=c>integer</td> <td><span class=s><span class=n>(values 1 and 6 are not standard EXIF)</span></span><table class=cols><tr> <td>1 = Monochrome area <br>2 = One-chip color area <br>3 = Two-chip color area <br>4 = Three-chip color area <br>5 = Color sequential area <br>6 = Monochrome linear <br>7 = Trilinear <br>8 = Color sequential linear</td></tr></table> </td></tr> <tr> <td>Sharpness</td> <td class=c>integer</td> <td><span class=s>0 = Normal <br>1 = Soft <br>2 = Hard</span></td></tr> <tr class=b> <td>ShutterSpeedValue</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr> <td>SpatialFrequencyResponse</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#OECF'>OECF Struct</a></td></tr> <tr class=b> <td>SpatialFrequencyResponseColumns</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr> <td>SpatialFrequencyResponseNames</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>SpatialFrequencyResponseRows</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr> <td>SpatialFrequencyResponseValues</td> <td class=c title=' _ = Flattened + = List'>rational_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>SpectralSensitivity</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>SubjectArea</td> <td class=c title=' + = List'>integer+</td> <td>&nbsp;</td></tr> <tr class=b> <td>SubjectDistance</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr> <td>SubjectDistanceRange</td> <td class=c>integer</td> <td><span class=s>0 = Unknown <br>1 = Macro <br>2 = Close <br>3 = Distant</span></td></tr> <tr class=b> <td>SubjectLocation</td> <td class=c title=' + = List'>integer+</td> <td>&nbsp;</td></tr> <tr> <td>UserComment</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>WhiteBalance</td> <td class=c>integer</td> <td><span class=s>0 = Auto <br>1 = Manual</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CFAPattern'>XMP CFAPattern Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Columns</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>Rows</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>Values</td> <td class=c title=' + = List'>integer+</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='DeviceSettings'>XMP DeviceSettings Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Columns</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>Rows</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>Settings</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Flash'>XMP Flash Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Fired</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr class=b> <td>Function</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>Mode</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>RedEyeMode</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>Return</td> <td class=c>integer</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='OECF'>XMP OECF Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Columns</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>Names</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>Rows</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>Values</td> <td class=c title=' + = List'>rational+</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='exifEX'>XMP exifEX Tags</a></h2> <p>EXIF tags added by the EXIF 2.3 for XMP specification (see <a href="http://www.cipa.jp/std/documents/e/DC-010-2012_E.pdf">http://www.cipa.jp/std/documents/e/DC-010-2012_E.pdf</a>).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>SerialNumber</td> <td class=c>string</td> <td><span class=s><span class=n>(called BodySerialNumber by the spec)</span></span></td></tr> <tr class=b> <td>OwnerName</td> <td class=c>string</td> <td><span class=s><span class=n>(called CameraOwnerName by the spec)</span></span></td></tr> <tr> <td>Gamma</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr class=b> <td>InteropIndex</td> <td class=c>string</td> <td><span class=s><span class=n>(called InteroperabilityIndex by the spec)</span> <br>&#39;R03&#39; = R03 - DCF option file (Adobe RGB) <br>&#39;R98&#39; = R98 - DCF basic file (sRGB) <br>&#39;THM&#39; = THM - DCF thumbnail file</span></td></tr> <tr> <td>ISOSpeed</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>ISOSpeedLatitudeyyy</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>ISOSpeedLatitudezzz</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>LensMake</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LensModel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LensSerialNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LensInfo</td> <td class=c title=' + = List'>rational+</td> <td><span class=s><span class=n>(called LensSpecification by the spec. Unfortunately the EXIF 2.3 for XMP specification defined this new tag instead of using the existing XMP-aux:LensInfo)</span></span></td></tr> <tr class=b> <td>PhotographicSensitivity</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>RecommendedExposureIndex</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>SensitivityType</td> <td class=c>integer</td> <td><span class=s>0 = Unknown <br>1 = Standard Output Sensitivity <br>2 = Recommended Exposure Index <br>3 = ISO Speed <br>4 = Standard Output Sensitivity and Recommended Exposure Index <br>5 = Standard Output Sensitivity and ISO Speed <br>6 = Recommended Exposure Index and ISO Speed <br>7 = Standard Output Sensitivity, Recommended Exposure Index and ISO Speed</span></td></tr> <tr> <td>StandardOutputSensitivity</td> <td class=c>integer</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ExpressionMedia'>XMP ExpressionMedia Tags</a></h2> <p>Microsoft Expression Media namespace tags. These tags are avoided when writing due to name conflicts with tags in other schemas.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CatalogSets</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Event</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>People</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Status</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='extensis'>XMP extensis Tags</a></h2> <p>Tags used by Extensis Portfolio.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Approved</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr class=b> <td>ApprovedBy</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ClientName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>JobName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>JobStatus</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>RoutedTo</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>RoutingNotes</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>WorkToDo</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='fpv'>XMP fpv Tags</a></h2> <p>Fast Picture Viewer tags (see <a href="http://www.fastpictureviewer.com/help/#rtfcomments">http://www.fastpictureviewer.com/help/#rtfcomments</a>).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>RichTextComment</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='GettyImages'>XMP GettyImages Tags</a></h2> <p>The actual Getty Images namespace prefix is &quot;GettyImagesGIFT&quot;, which is the prefix recorded in the file, but ExifTool shortens this for the &quot;XMP-getty&quot; family 1 group name.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>OriginalFileName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ParentMEID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Personality</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='GPano'>XMP GPano Tags</a></h2> <p>Panorama tags written by Google Photosphere. See <a href="https://developers.google.com/panorama/metadata/">https://developers.google.com/panorama/metadata/</a> for the specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CaptureSoftware</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CroppedAreaImageHeightPixels</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>CroppedAreaImageWidthPixels</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>CroppedAreaLeftPixels</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>CroppedAreaTopPixels</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>ExposureLockUsed</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>FirstPhotoDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>FullPanoHeightPixels</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>FullPanoWidthPixels</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>InitialHorizontalFOVDegrees</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>InitialViewHeadingDegrees</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>InitialViewPitchDegrees</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>InitialViewRollDegrees</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>LargestValidInteriorRectHeight</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>LargestValidInteriorRectLeft</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>LargestValidInteriorRectTop</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>LargestValidInteriorRectWidth</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>LastPhotoDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr> <td>PoseHeadingDegrees</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>PosePitchDegrees</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>PoseRollDegrees</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProjectionType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>SourcePhotosCount</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>StitchingSoftware</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>UsePanoramaViewer</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ics'>XMP ics Tags</a></h2> <p>Tags used by IDimager. Nested TagStructure structures are unrolled to an arbitrary depth of 6 to avoid infinite recursion.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>ImageRef</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>SubVersions</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#SubVersion'>SubVersion Struct</a></td></tr> <tr> <td>SubVersionFileName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(SubVersionsFileName)</span></span></td></tr> <tr class=b> <td>SubVersionReference</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(SubVersionsVersRef)</span></span></td></tr> <tr> <td>TagStructure</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#TagStructure'>TagStructure Struct</a></td></tr> <tr class=b> <td>LabelName1</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureLabelName)</span></span></td></tr> <tr> <td>ParentReference1</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureParentReference)</span></span></td></tr> <tr class=b> <td>Reference1</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureReference)</span></span></td></tr> <tr> <td>SubLables1</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#TagStructure'>TagStructure Struct</a> <br><span class='n s'>(TagStructureSubLabels)</span></td></tr> <tr class=b> <td>LabelName2</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureSubLabelsLabelName)</span></span></td></tr> <tr> <td>ParentReference2</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureSubLabelsParentReference)</span></span></td></tr> <tr class=b> <td>Reference2</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureSubLabelsReference)</span></span></td></tr> <tr> <td>SubLables2</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#TagStructure'>TagStructure Struct</a> <br><span class='n s'>(TagStructureSubLabelsSubLabels)</span></td></tr> <tr class=b> <td>LabelName3</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureSubLabelsSubLabelsLabelName)</span></span></td></tr> <tr> <td>ParentReference3</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureSubLabelsSubLabelsParentReference)</span></span></td></tr> <tr class=b> <td>Reference3</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureSubLabelsSubLabelsReference)</span></span></td></tr> <tr> <td>SubLables3</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#TagStructure'>TagStructure Struct</a> <br><span class='n s'>(TagStructureSubLabelsSubLabelsSubLabels)</span></td></tr> <tr class=b> <td>LabelName4</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureSubLabelsSubLabelsSubLabelsLabelName)</span></span></td></tr> <tr> <td>ParentReference4</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureSubLabelsSubLabelsSubLabelsParentReference)</span></span></td></tr> <tr class=b> <td>Reference4</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureSubLabelsSubLabelsSubLabelsReference)</span></span></td></tr> <tr> <td>SubLabels4</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#TagStructure'>TagStructure Struct</a> <br><span class='n s'>(TagStructureSubLabelsSubLabelsSubLabelsSubLabels)</span></td></tr> <tr class=b> <td>LabelName5</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureSubLabelsSubLabelsSubLabelsSubLabelsLabelName)</span></span></td></tr> <tr> <td>ParentReference5</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureSubLabelsSubLabelsSubLabelsSubLabelsParentReference)</span></span></td></tr> <tr class=b> <td>Reference5</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureSubLabelsSubLabelsSubLabelsSubLabelsReference)</span></span></td></tr> <tr> <td>SubLabels5</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#TagStructure'>TagStructure Struct</a> <br><span class='n s'>(TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabels)</span></td></tr> <tr class=b> <td>LabelName6</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsLabelName)</span></span></td></tr> <tr> <td>ParentReference6</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsParentReference)</span></span></td></tr> <tr class=b> <td>Reference6</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TagStructureSubLabelsSubLabelsSubLabelsSubLabelsSubLabelsReference)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='SubVersion'>XMP SubVersion Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>FileName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>VersRef</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='TagStructure'>XMP TagStructure Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>LabelName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ParentReference</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Reference</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>SubLabels</td> <td class=c title=' + = List'>TagStructure+</td> <td>--&gt; <a href='XMP.html#TagStructure'>TagStructure Struct</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='iptcCore'>XMP iptcCore Tags</a></h2> <p>IPTC Core namespace tags. The actual IPTC Core namespace prefix is &quot;Iptc4xmpCore&quot;, which is the prefix recorded in the file, but ExifTool shortens this for the &quot;XMP-iptcCore&quot; family 1 group name. (see <a href="http://www.iptc.org/IPTC4XMP/">http://www.iptc.org/IPTC4XMP/</a>)</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CountryCode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CreatorContactInfo</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#ContactInfo'>ContactInfo Struct</a></td></tr> <tr> <td>CreatorCity</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(CreatorContactInfoCiAdrCity)</span></span></td></tr> <tr class=b> <td>CreatorCountry</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(CreatorContactInfoCiAdrCtry)</span></span></td></tr> <tr> <td>CreatorAddress</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(CreatorContactInfoCiAdrExtadr)</span></span></td></tr> <tr class=b> <td>CreatorPostalCode</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(CreatorContactInfoCiAdrPcode)</span></span></td></tr> <tr> <td>CreatorRegion</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(CreatorContactInfoCiAdrRegion)</span></span></td></tr> <tr class=b> <td>CreatorWorkEmail</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(CreatorContactInfoCiEmailWork)</span></span></td></tr> <tr> <td>CreatorWorkTelephone</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(CreatorContactInfoCiTelWork)</span></span></td></tr> <tr class=b> <td>CreatorWorkURL</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s><span class=n>(CreatorContactInfoCiUrlWork)</span></span></td></tr> <tr> <td>IntellectualGenre</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Location</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Scene</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>SubjectCode</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ContactInfo'>XMP ContactInfo Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CiAdrCity</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CiAdrCtry</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>CiAdrExtadr</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CiAdrPcode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>CiAdrRegion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CiEmailWork</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>CiTelWork</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CiUrlWork</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='iptcExt'>XMP iptcExt Tags</a></h2> <p>IPTC Extension namespace tags. The actual namespace prefix is &quot;Iptc4xmpExt&quot;, but ExifTool shortens this for the &quot;XMP-iptcExt&quot; family 1 group name. (see <a href="http://www.iptc.org/IPTC4XMP/">http://www.iptc.org/IPTC4XMP/</a>)</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AboutCvTerm</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#CVTermDetails'>CVTermDetails Struct</a></td></tr> <tr class=b> <td>AboutCvTermCvId</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>AboutCvTermId</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(AboutCvTermCvTermId)</span></span></td></tr> <tr class=b> <td>AboutCvTermName</td> <td class=c title=' _ = Flattened + = List'>lang-alt_+</td> <td><span class=s><span class=n>(AboutCvTermCvTermName)</span></span></td></tr> <tr> <td>AboutCvTermRefinedAbout</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(AboutCvTermCvTermRefinedAbout)</span></span></td></tr> <tr class=b> <td>AdditionalModelInformation</td> <td class=c>string</td> <td><span class=s><span class=n>(called AddlModelInfo by the spec)</span></span></td></tr> <tr> <td>ArtworkOrObject</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#ArtworkOrObjectDetails'>ArtworkOrObjectDetails Struct</a></td></tr> <tr class=b> <td>ArtworkCircaDateCreated</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOCircaDateCreated)</span></span></td></tr> <tr> <td>ArtworkSContentDescription</td> <td class=c title=' _ = Flattened + = List'>lang-alt_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOContentDescription)</span></span></td></tr> <tr class=b> <td>ArtworkContributionDescription</td> <td class=c title=' _ = Flattened + = List'>lang-alt_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOContributionDescription)</span></span></td></tr> <tr> <td>ArtworkCopyrightNotice</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOCopyrightNotice)</span></span></td></tr> <tr class=b> <td>ArtworkCreator</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOCreator)</span></span></td></tr> <tr> <td>ArtworkCreatorID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOCreatorId)</span></span></td></tr> <tr class=b> <td>ArtworkCopyrightOwnerID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOCurrentCopyrightOwnerId)</span></span></td></tr> <tr> <td>ArtworkCopyrightOwnerName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOCurrentCopyrightOwnerName)</span></span></td></tr> <tr class=b> <td>ArtworkLicensorID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOCurrentLicensorId)</span></span></td></tr> <tr> <td>ArtworkLicensorName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOCurrentLicensorName)</span></span></td></tr> <tr class=b> <td>ArtworkDateCreated</td> <td class=c title=' _ = Flattened + = List'>date_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAODateCreated)</span></span></td></tr> <tr> <td>ArtworkPhysicalDescription</td> <td class=c title=' _ = Flattened + = List'>lang-alt_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOPhysicalDescription)</span></span></td></tr> <tr class=b> <td>ArtworkSource</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOSource)</span></span></td></tr> <tr> <td>ArtworkSourceInventoryNo</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOSourceInvNo)</span></span></td></tr> <tr class=b> <td>ArtworkSourceInvURL</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOSourceInvURL)</span></span></td></tr> <tr> <td>ArtworkStylePeriod</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOStylePeriod)</span></span></td></tr> <tr class=b> <td>ArtworkTitle</td> <td class=c title=' _ = Flattened + = List'>lang-alt_+</td> <td><span class=s><span class=n>(ArtworkOrObjectAOTitle)</span></span></td></tr> <tr> <td>ControlledVocabularyTerm</td> <td class=c title=' + = List'>string+</td> <td><span class=s><span class=n>(deprecated by version 1.2)</span></span></td></tr> <tr class=b> <td>DigitalImageGUID</td> <td class=c>string</td> <td><span class=s><span class=n>(called DigImageGUID by the spec)</span></span></td></tr> <tr> <td>DigitalSourceFileType</td> <td class=c>string</td> <td><span class=s><span class=n>(now deprecated -- replaced by DigitalSourceType)</span></span></td></tr> <tr class=b> <td>DigitalSourceType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>EmbdEncRightsExpr</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#EEREDetails'>EEREDetails Struct</a></td></tr> <tr class=b> <td>EmbeddedEncodedRightsExpr</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(EmbdEncRightsExprEncRightsExpr)</span></span></td></tr> <tr> <td>EmbeddedEncodedRightsExprType</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(EmbdEncRightsExprRightsExprEncType)</span></span></td></tr> <tr class=b> <td>EmbeddedEncodedRightsExprLangID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(EmbdEncRightsExprRightsExprLangId)</span></span></td></tr> <tr> <td>Event</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>IPTCLastEdited</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr> <td>LinkedEncRightsExpr</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#LEREDetails'>LEREDetails Struct</a></td></tr> <tr class=b> <td>LinkedEncodedRightsExpr</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LinkedEncRightsExprLinkedRightsExpr)</span></span></td></tr> <tr> <td>LinkedEncodedRightsExprType</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LinkedEncRightsExprRightsExprEncType)</span></span></td></tr> <tr class=b> <td>LinkedEncodedRightsExprLangID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LinkedEncRightsExprRightsExprLangId)</span></span></td></tr> <tr> <td>LocationCreated</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#LocationDetails'>LocationDetails Struct</a></td></tr> <tr class=b> <td>LocationCreatedCity</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>LocationCreatedCountryCode</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocationCreatedCountryName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>LocationCreatedLocationId</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocationCreatedProvinceState</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>LocationCreatedSublocation</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocationCreatedWorldRegion</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>LocationShown</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#LocationDetails'>LocationDetails Struct</a></td></tr> <tr class=b> <td>LocationShownCity</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>LocationShownCountryCode</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocationShownCountryName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>LocationShownLocationId</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocationShownProvinceState</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>LocationShownSublocation</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocationShownWorldRegion</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>MaxAvailHeight</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>MaxAvailWidth</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>ModelAge</td> <td class=c title=' + = List'>integer+</td> <td>&nbsp;</td></tr> <tr class=b> <td>OrganisationInImageCode</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>OrganisationInImageName</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>PersonInImage</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>PersonInImageWDetails</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#PersonDetails'>PersonDetails Struct</a></td></tr> <tr class=b> <td>PersonInImageCharacteristic</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#CVTermDetails'>CVTermDetails Struct</a> <br><span class='n s'>(PersonInImageWDetailsPersonCharacteristic)</span></td></tr> <tr> <td>PersonInImageCvTermCvId</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(PersonInImageWDetailsPersonCharacteristicCvId)</span></span></td></tr> <tr class=b> <td>PersonInImageCvTermId</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(PersonInImageWDetailsPersonCharacteristicCvTermId)</span></span></td></tr> <tr> <td>PersonInImageCvTermName</td> <td class=c title=' _ = Flattened + = List'>lang-alt_+</td> <td><span class=s><span class=n>(PersonInImageWDetailsPersonCharacteristicCvTermName)</span></span></td></tr> <tr class=b> <td>PersonInImageCvTermRefinedAbout</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(PersonInImageWDetailsPersonCharacteristicCvTermRefinedAbout)</span></span></td></tr> <tr> <td>PersonInImageDescription</td> <td class=c title=' _ = Flattened + = List'>lang-alt_+</td> <td><span class=s><span class=n>(PersonInImageWDetailsPersonDescription)</span></span></td></tr> <tr class=b> <td>PersonInImageId</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(PersonInImageWDetailsPersonId)</span></span></td></tr> <tr> <td>PersonInImageName</td> <td class=c title=' _ = Flattened + = List'>lang-alt_+</td> <td><span class=s><span class=n>(PersonInImageWDetailsPersonName)</span></span></td></tr> <tr class=b> <td>ProductInImage</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#ProductDetails'>ProductDetails Struct</a></td></tr> <tr> <td>ProductInImageDescription</td> <td class=c title=' _ = Flattened + = List'>lang-alt_+</td> <td><span class=s><span class=n>(ProductInImageProductDescription)</span></span></td></tr> <tr class=b> <td>ProductInImageGTIN</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ProductInImageProductGTIN)</span></span></td></tr> <tr> <td>ProductInImageName</td> <td class=c title=' _ = Flattened + = List'>lang-alt_+</td> <td><span class=s><span class=n>(ProductInImageProductName)</span></span></td></tr> <tr class=b> <td>RegistryID</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#RegistryEntryDetails'>RegistryEntryDetails Struct</a></td></tr> <tr> <td>RegistryItemID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(RegistryIdRegItemId)</span></span></td></tr> <tr class=b> <td>RegistryOrganisationID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(RegistryIdRegOrgId)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CVTermDetails'>XMP CVTermDetails Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CvId</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CvTermId</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>CvTermName</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>CvTermRefinedAbout</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ArtworkOrObjectDetails'>XMP ArtworkOrObjectDetails Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AOCircaDateCreated</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>AOContentDescription</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr> <td>AOContributionDescription</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>AOCopyrightNotice</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>AOCreator</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>AOCreatorId</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>AOCurrentCopyrightOwnerId</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>AOCurrentCopyrightOwnerName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>AOCurrentLicensorId</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>AOCurrentLicensorName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>AODateCreated</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>AOPhysicalDescription</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr> <td>AOSource</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>AOSourceInvNo</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>AOSourceInvURL</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>AOStylePeriod</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>AOTitle</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='EEREDetails'>XMP EEREDetails Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>EncRightsExpr</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>RightsExprEncType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>RightsExprLangId</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LEREDetails'>XMP LEREDetails Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>LinkedRightsExpr</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>RightsExprEncType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>RightsExprLangId</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='LocationDetails'>XMP LocationDetails Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>City</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CountryCode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>CountryName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LocationId</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>ProvinceState</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Sublocation</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>WorldRegion</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PersonDetails'>XMP PersonDetails Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>PersonCharacteristic</td> <td class=c title=' + = List'>CVTermDetails+</td> <td>--&gt; <a href='XMP.html#CVTermDetails'>CVTermDetails Struct</a></td></tr> <tr class=b> <td>PersonDescription</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr> <td>PersonId</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>PersonName</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ProductDetails'>XMP ProductDetails Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>ProductDescription</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProductGTIN</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ProductName</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='RegistryEntryDetails'>XMP RegistryEntryDetails Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>RegItemId</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>RegOrgId</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Lightroom'>XMP Lightroom Tags</a></h2> <p>Adobe Lightroom &quot;lr&quot; namespace tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>HierarchicalSubject</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>PrivateRTKInfo</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='MediaPro'>XMP MediaPro Tags</a></h2> <p>iView MediaPro namespace tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CatalogSets</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Event</td> <td class=c title=' / = Avoided'>string/</td> <td><span class=s><span class=n>(avoided due to conflict with XMP-iptcExt:Event)</span></span></td></tr> <tr> <td>Location</td> <td class=c title=' / = Avoided'>string/</td> <td><span class=s><span class=n>(avoided due to conflict with XMP-iptcCore:Location)</span></span></td></tr> <tr class=b> <td>People</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>Status</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>UserFields</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='pdf'>XMP pdf Tags</a></h2> <p>Adobe PDF namespace tags. The official XMP specification defines only Keywords, PDFVersion, Producer and Trapped. The other tags are included because they have been observed in PDF files, but some are avoided when writing due to name conflicts with other XMP namespaces.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Author</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Copyright</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>CreationDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>Creator</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Keywords</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Marked</td> <td class=c title=' / = Avoided'>boolean/</td> <td>&nbsp;</td></tr> <tr> <td>ModDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>PDFVersion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Producer</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Subject</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Title</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Trapped</td> <td class=c>string</td> <td><span class=s>&#39;False&#39; = False <br>&#39;True&#39; = True <br>&#39;Unknown&#39; = Unknown</span></td></tr> </table></td></tr></table></blockquote> <h2><a name='pdfx'>XMP pdfx Tags</a></h2> <p>PDF extension tags. This namespace is used to store application-defined PDF information, so there are no pre-defined tags. User-defined tags must be created to enable writing of XMP-pdfx information.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr><td colspan=3 class=c><i>[no tags known]</i></td></tr> </table></td></tr></table></blockquote> <h2><a name='photoshop'>XMP photoshop Tags</a></h2> <p>Adobe Photoshop namespace tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AuthorsPosition</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CaptionWriter</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Category</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>City</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ColorMode</td> <td class=c>integer</td> <td><table class=cols><tr> <td>0 = Bitmap <br>1 = Grayscale <br>2 = Indexed <br>3 = RGB</td><td>&nbsp;&nbsp;</td> <td>4 = CMYK <br>7 = Multichannel <br>8 = Duotone <br>9 = Lab</td></tr></table> </td></tr> <tr class=b> <td>Country</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Credit</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateCreated</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr> <td>DocumentAncestors</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>EmbeddedXMPDigest</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Headline</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>History</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ICCProfileName</td> <td class=c>string</td> <td><span class=s><span class=n>(called ICCProfile by the spec)</span></span></td></tr> <tr class=b> <td>Instructions</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LegacyIPTCDigest</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>SidecarForExtension</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Source</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>State</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>SupplementalCategories</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>TextLayers</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#Layer'>Layer Struct</a></td></tr> <tr> <td>TextLayerName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TextLayersLayerName)</span></span></td></tr> <tr class=b> <td>TextLayerText</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(TextLayersLayerText)</span></span></td></tr> <tr> <td>TransmissionReference</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Urgency</td> <td class=c>integer</td> <td><span class=s><span class=n>(should be in the range 1-8 to conform with the XMP spec)</span></span><table class=cols><tr> <td>0 = 0 (reserved) <br>1 = 1 (most urgent) <br>2 = 2 <br>3 = 3 <br>4 = 4 <br>5 = 5 (normal urgency) <br>6 = 6 <br>7 = 7 <br>8 = 8 (least urgent) <br>9 = 9 (user-defined priority)</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='Layer'>XMP Layer Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>LayerName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LayerText</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='PixelLive'>XMP PixelLive Tags</a></h2> <p>PixelLive namespace tags. These tags are not writable becase they are very uncommon and I haven&#39;t been able to locate a reference which gives the namespace URI.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Author</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Comments</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Copyright</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Date</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>Genre</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>Title</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='plus'>XMP plus Tags</a></h2> <p>PLUS License Data Format 1.2.1 namespace tags. Note that all controlled-vocabulary tags in this table (ie. tags with a fixed set of values) have raw values which begin with &quot;http://ns.useplus.org/ldf/vocab/&quot;, but to reduce clutter this prefix has been removed from the values shown below. (see <a href="http://ns.useplus.org/">http://ns.useplus.org/</a>)</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AdultContentWarning</td> <td class=c>string</td> <td><span class=s>&#39;CW-AWR&#39; = Adult Content Warning Required <br>&#39;CW-NRQ&#39; = Not Required <br>&#39;CW-UNK&#39; = Unknown</span></td></tr> <tr class=b> <td>CopyrightOwner</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#CopyrightOwner'>CopyrightOwner Struct</a></td></tr> <tr> <td>CopyrightOwnerID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(CopyrightOwnerCopyrightOwnerID)</span></span></td></tr> <tr class=b> <td>CopyrightOwnerName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(CopyrightOwnerCopyrightOwnerName)</span></span></td></tr> <tr> <td>CopyrightOwnerImageID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CopyrightRegistrationNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>CopyrightStatus</td> <td class=c>string</td> <td><span class=s>&#39;CS-PRO&#39; = Protected <br>&#39;CS-PUB&#39; = Public Domain <br>&#39;CS-UNK&#39; = Unknown</span></td></tr> <tr class=b> <td>CreditLineRequired</td> <td class=c>string</td> <td><span class=s>&#39;CR-CAI&#39; = Credit Adjacent To Image <br>&#39;CR-CCA&#39; = Credit in Credits Area <br>&#39;CR-COI&#39; = Credit on Image <br>&#39;CR-NRQ&#39; = Not Required</span></td></tr> <tr> <td>Custom1</td> <td class=c title=' + = List'>lang-alt+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Custom10</td> <td class=c title=' + = List'>lang-alt+</td> <td>&nbsp;</td></tr> <tr> <td>Custom2</td> <td class=c title=' + = List'>lang-alt+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Custom3</td> <td class=c title=' + = List'>lang-alt+</td> <td>&nbsp;</td></tr> <tr> <td>Custom4</td> <td class=c title=' + = List'>lang-alt+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Custom5</td> <td class=c title=' + = List'>lang-alt+</td> <td>&nbsp;</td></tr> <tr> <td>Custom6</td> <td class=c title=' + = List'>lang-alt+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Custom7</td> <td class=c title=' + = List'>lang-alt+</td> <td>&nbsp;</td></tr> <tr> <td>Custom8</td> <td class=c title=' + = List'>lang-alt+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Custom9</td> <td class=c title=' + = List'>lang-alt+</td> <td>&nbsp;</td></tr> <tr> <td>EndUser</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#EndUser'>EndUser Struct</a></td></tr> <tr class=b> <td>EndUserID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(EndUserEndUserID)</span></span></td></tr> <tr> <td>EndUserName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(EndUserEndUserName)</span></span></td></tr> <tr class=b> <td>FileNameAsDelivered</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>FirstPublicationDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageAlterationConstraints</td> <td class=c title=' + = List'>string+</td> <td><table class=cols><tr> <td>&#39;AL-CLR&#39; = No Colorization <br>&#39;AL-CRP&#39; = No Cropping <br>&#39;AL-DCL&#39; = No De-Colorization <br>&#39;AL-FLP&#39; = No Flipping <br>&#39;AL-MRG&#39; = No Merging <br>&#39;AL-RET&#39; = No Retouching</td></tr></table> </td></tr> <tr> <td>ImageCreator</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#ImageCreator'>ImageCreator Struct</a></td></tr> <tr class=b> <td>ImageCreatorID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ImageCreatorImageCreatorID)</span></span></td></tr> <tr> <td>ImageCreatorName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ImageCreatorImageCreatorName)</span></span></td></tr> <tr class=b> <td>ImageCreatorImageID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ImageDuplicationConstraints</td> <td class=c>string</td> <td><span class=s>&#39;DP-LIC&#39; = Duplication Only as Necessary Under License <br>&#39;DP-NDC&#39; = No Duplication Constraints <br>&#39;DP-NOD&#39; = No Duplication</span></td></tr> <tr class=b> <td>ImageFileConstraints</td> <td class=c title=' + = List'>string+</td> <td><span class=s>&#39;IF-MFN&#39; = Maintain File Name <br>&#39;IF-MFT&#39; = Maintain File Type <br>&#39;IF-MID&#39; = Maintain ID in File Name <br>&#39;IF-MMD&#39; = Maintain Metadata</span></td></tr> <tr> <td>ImageFileFormatAsDelivered</td> <td class=c>string</td> <td><span class=s>&#39;FF-BMP&#39; = Windows Bitmap (BMP) <br>&#39;FF-DNG&#39; = Digital Negative (DNG) <br>&#39;FF-EPS&#39; = Encapsulated PostScript (EPS) <br>&#39;FF-GIF&#39; = Graphics Interchange Format (GIF) <br>&#39;FF-JPG&#39; = JPEG Interchange Formats (JPG, JIF, JFIF) <br>&#39;FF-OTR&#39; = Other <br>&#39;FF-PIC&#39; = Macintosh Picture (PICT) <br>&#39;FF-PNG&#39; = Portable Network Graphics (PNG) <br>&#39;FF-PSD&#39; = Photoshop Document (PSD) <br>&#39;FF-RAW&#39; = Proprietary RAW Image Format <br>&#39;FF-TIF&#39; = Tagged Image File Format (TIFF) <br>&#39;FF-WMP&#39; = Windows Media Photo (HD Photo)</span></td></tr> <tr class=b> <td>ImageFileSizeAsDelivered</td> <td class=c>string</td> <td><span class=s>&#39;SZ-G50&#39; = Greater than 50 MB <br>&#39;SZ-U01&#39; = Up to 1 MB <br>&#39;SZ-U10&#39; = Up to 10 MB <br>&#39;SZ-U30&#39; = Up to 30 MB <br>&#39;SZ-U50&#39; = Up to 50 MB</span></td></tr> <tr> <td>ImageSupplier</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#ImageSupplier'>ImageSupplier Struct</a></td></tr> <tr class=b> <td>ImageSupplierImageID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ImageSupplierID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ImageSupplierImageSupplierID)</span></span></td></tr> <tr class=b> <td>ImageSupplierName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ImageSupplierImageSupplierName)</span></span></td></tr> <tr> <td>ImageType</td> <td class=c>string</td> <td><span class=s>&#39;TY-ILL&#39; = Illustrated Image <br>&#39;TY-MCI&#39; = Multimedia or Composited Image <br>&#39;TY-OTR&#39; = Other <br>&#39;TY-PHO&#39; = Photographic Image <br>&#39;TY-VID&#39; = Video</span></td></tr> <tr class=b> <td>Licensee</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#Licensee'>Licensee Struct</a></td></tr> <tr> <td>LicenseeImageID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LicenseeImageNotes</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr> <td>LicenseeID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicenseeLicenseeID)</span></span></td></tr> <tr class=b> <td>LicenseeName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicenseeLicenseeName)</span></span></td></tr> <tr> <td>LicenseEndDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>LicenseeProjectReference</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>LicenseeTransactionID</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>LicenseID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LicenseStartDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>LicenseTransactionDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr> <td>Licensor</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#Licensor'>Licensor Struct</a></td></tr> <tr class=b> <td>LicensorImageID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LicensorCity</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicensorLicensorCity)</span></span></td></tr> <tr class=b> <td>LicensorCountry</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicensorLicensorCountry)</span></span></td></tr> <tr> <td>LicensorEmail</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicensorLicensorEmail)</span></span></td></tr> <tr class=b> <td>LicensorExtendedAddress</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicensorLicensorExtendedAddress)</span></span></td></tr> <tr> <td>LicensorID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicensorLicensorID)</span></span></td></tr> <tr class=b> <td>LicensorName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicensorLicensorName)</span></span></td></tr> <tr> <td>LicensorPostalCode</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicensorLicensorPostalCode)</span></span></td></tr> <tr class=b> <td>LicensorRegion</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicensorLicensorRegion)</span></span></td></tr> <tr> <td>LicensorStreetAddress</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicensorLicensorStreetAddress)</span></span></td></tr> <tr class=b> <td>LicensorTelephone1</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicensorLicensorTelephone1)</span></span></td></tr> <tr> <td>LicensorTelephone2</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicensorLicensorTelephone2)</span></span></td></tr> <tr class=b> <td>LicensorTelephoneType1</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicensorLicensorTelephoneType1)</span> <br>&#39;cell&#39; = Cell <br>&#39;fax&#39; = FAX <br>&#39;home&#39; = Home <br>&#39;pager&#39; = Pager <br>&#39;work&#39; = Work</span></td></tr> <tr> <td>LicensorTelephoneType2</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicensorLicensorTelephoneType2)</span> <br>&#39;cell&#39; = Cell <br>&#39;fax&#39; = FAX <br>&#39;home&#39; = Home <br>&#39;pager&#39; = Pager <br>&#39;work&#39; = Work</span></td></tr> <tr class=b> <td>LicensorURL</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(LicensorLicensorURL)</span></span></td></tr> <tr> <td>LicensorNotes</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>LicensorTransactionID</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>MediaConstraints</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>MediaSummaryCode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>MinorModelAgeDisclosure</td> <td class=c>string</td> <td><table class=cols><tr> <td>&#39;AG-A15&#39; = Age 15 <br>&#39;AG-A16&#39; = Age 16 <br>&#39;AG-A17&#39; = Age 17 <br>&#39;AG-A18&#39; = Age 18 <br>&#39;AG-A19&#39; = Age 19 <br>&#39;AG-A20&#39; = Age 20 <br>&#39;AG-A21&#39; = Age 21 <br>&#39;AG-A22&#39; = Age 22 <br>&#39;AG-A23&#39; = Age 23 <br>&#39;AG-A24&#39; = Age 24 <br>&#39;AG-A25&#39; = Age 25 or Over <br>&#39;AG-U14&#39; = Age 14 or Under <br>&#39;AG-UNK&#39; = Age Unknown</td></tr></table> </td></tr> <tr class=b> <td>ModelReleaseID</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr> <td>ModelReleaseStatus</td> <td class=c>string</td> <td><span class=s>&#39;MR-LMR&#39; = Limited or Incomplete Model Releases <br>&#39;MR-NAP&#39; = Not Applicable <br>&#39;MR-NON&#39; = None <br>&#39;MR-UMR&#39; = Unlimited Model Releases</span></td></tr> <tr class=b> <td>OtherConditions</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr> <td>OtherConstraints</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>OtherImageInfo</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr> <td>OtherLicenseDocuments</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>OtherLicenseInfo</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr> <td>OtherLicenseRequirements</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProductOrServiceConstraints</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr> <td>PropertyReleaseID</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>PropertyReleaseStatus</td> <td class=c>string</td> <td><span class=s>&#39;PR-LPR&#39; = Limited or Incomplete Property Releases <br>&#39;PR-NAP&#39; = Not Applicable <br>&#39;PR-NON&#39; = None <br>&#39;PR-UPR&#39; = Unlimited Property Releases</span></td></tr> <tr> <td>RegionConstraints</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>Reuse</td> <td class=c>string</td> <td><span class=s>&#39;RE-NAP&#39; = Not Applicable <br>&#39;RE-REU&#39; = Repeat Use</span></td></tr> <tr> <td>TermsAndConditionsText</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr class=b> <td>TermsAndConditionsURL</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>PLUSVersion</td> <td class=c>string</td> <td><span class=s><span class=n>(called Version by the spec)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='CopyrightOwner'>XMP CopyrightOwner Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CopyrightOwnerID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CopyrightOwnerName</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='EndUser'>XMP EndUser Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>EndUserID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>EndUserName</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ImageCreator'>XMP ImageCreator Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>ImageCreatorID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageCreatorName</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ImageSupplier'>XMP ImageSupplier Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>ImageSupplierID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageSupplierName</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Licensee'>XMP Licensee Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>LicenseeID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LicenseeName</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Licensor'>XMP Licensor Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>LicensorCity</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LicensorCountry</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LicensorEmail</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LicensorExtendedAddress</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LicensorID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LicensorName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LicensorPostalCode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LicensorRegion</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LicensorStreetAddress</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LicensorTelephone1</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LicensorTelephone2</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LicensorTelephoneType1</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>LicensorTelephoneType2</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LicensorURL</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='pmi'>XMP pmi Tags</a></h2> <p>PRISM Metadata for Images 3.0 namespace tags. (see <a href="http://www.prismstandard.org/">http://www.prismstandard.org/</a>)</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Color</td> <td class=c title=' / = Avoided'>string/</td> <td><table class=cols><tr> <td>&#39;bw&#39; = BW <br>&#39;color&#39; = Color <br>&#39;duotone&#39; = Duotone</td><td>&nbsp;&nbsp;</td> <td>&#39;quadtone&#39; = Quadtone <br>&#39;sepia&#39; = Sepia <br>&#39;tritone&#39; = Tritone</td></tr></table> </td></tr> <tr class=b> <td>ContactInfo</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>DisplayName</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>DistributorProductID</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>EventAlias</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventEnd</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>EventStart</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>EventSubtype</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>EventType</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Field</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Framing</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Location</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Make</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Manufacturer</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Model</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>ModelYear</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>ObjectDescription</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>ObjectSubtype</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>ObjectType</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Orientation</td> <td class=c title=' / = Avoided'>string/</td> <td><span class=s>&#39;horizontal&#39; = Horizontal <br>&#39;vertical&#39; = Vertical</span></td></tr> <tr> <td>PositionDescriptor</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProductID</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>ProductIDType</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Season</td> <td class=c title=' / = Avoided'>string/</td> <td><span class=s>&#39;fall&#39; = Fall <br>&#39;spring&#39; = Spring <br>&#39;summer&#39; = Summer <br>&#39;winter&#39; = Winter</span></td></tr> <tr> <td>SequenceName</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>SequenceNumber</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>SequenceTotalNumber</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Setting</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>ShootID</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>SlideshowName</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>SlideshowNumber</td> <td class=c title=' / = Avoided'>integer/</td> <td>&nbsp;</td></tr> <tr class=b> <td>SlideshowTotalNumber</td> <td class=c title=' / = Avoided'>integer/</td> <td>&nbsp;</td></tr> <tr> <td>Viewpoint</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>VisualTechnique</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='prism'>XMP prism Tags</a></h2> <p>Publishing Requirements for Industry Standard Metadata 3.0 namespace tags. (see <a href="http://www.prismstandard.org/">http://www.prismstandard.org/</a>)</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AcedemicField</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>AggregateIssueNumber</td> <td class=c title=' / = Avoided'>integer/</td> <td>&nbsp;</td></tr> <tr> <td>AggregationType</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>AlternateTitle</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#prismAlternateTitle'>prismAlternateTitle Struct</a></td></tr> <tr> <td>AlternateTitleA-lang</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>AlternateTitleA-platform</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>AlternateTitleText</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>BlogTitle</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>BlogURL</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>BookEdition</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>ByteCount</td> <td class=c title=' / = Avoided'>integer/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Channel</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#prismChannel'>prismChannel Struct</a></td></tr> <tr> <td>ChannelA-lang</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ChannelChannel</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>ChannelSubchannel1</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ChannelSubchannel2</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>ChannelSubchannel3</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ChannelSubchannel4</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>ComplianceProfile</td> <td class=c title=' / = Avoided'>string/</td> <td><span class=s>&#39;three&#39; = Three</span></td></tr> <tr class=b> <td>ContentType</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>CopyrightYear</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>CorporateEntity</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr> <td>CoverDate</td> <td class=c title=' / = Avoided'>date/</td> <td>&nbsp;</td></tr> <tr class=b> <td>CoverDisplayDate</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>CreationDate</td> <td class=c title=' / = Avoided'>date/</td> <td>&nbsp;</td></tr> <tr class=b> <td>DateRecieved</td> <td class=c title=' / = Avoided'>date/</td> <td>&nbsp;</td></tr> <tr> <td>Device</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Distributor</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>DOI</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Edition</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>EIssn</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>EndingPage</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Event</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Genre</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr> <td>HasAlternative</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>HasCorrection</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#prismHasCorrection'>prismHasCorrection Struct</a></td></tr> <tr> <td>HasCorrectionA-lang</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>HasCorrectionA-platform</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>HasCorrectionText</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>HasTranslation</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr> <td>Industry</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>IsAlternativeOf</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr> <td>ISBN</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>IsCorrectionOf</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr> <td>ISSN</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>IssueIdentifier</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>IssueName</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>IssueTeaser</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>IssueType</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>IsTranslationOf</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Keyword</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>KillDate</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#prismKillDate'>prismKillDate Struct</a></td></tr> <tr> <td>KillDateA-platform</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>KillDateDate</td> <td class=c title=' _ = Flattened'>date_</td> <td>&nbsp;</td></tr> <tr> <td>Link</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Location</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr> <td>ModificationDate</td> <td class=c title=' / = Avoided'>date/</td> <td>&nbsp;</td></tr> <tr class=b> <td>NationalCatalogNumber</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Number</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Object</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr> <td>OffSaleDate</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#prismOffSaleDate'>prismOffSaleDate Struct</a></td></tr> <tr class=b> <td>OffSaleDateA-platform</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>OffSaleDateDate</td> <td class=c title=' _ = Flattened + = List'>date_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>OnSaleDate</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#prismOnSaleDate'>prismOnSaleDate Struct</a></td></tr> <tr> <td>OnSaleDateA-platform</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>OnSaleDateDate</td> <td class=c title=' _ = Flattened + = List'>date_+</td> <td>&nbsp;</td></tr> <tr> <td>OnSaleDay</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#prismOnSaleDay'>prismOnSaleDay Struct</a></td></tr> <tr class=b> <td>OnSaleDayA-platform</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>OnSaleDayDay</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Organization</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr> <td>OriginPlatform</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td><table class=cols><tr> <td>&#39;broadcast&#39; = Broadcast <br>&#39;email&#39; = E-Mail <br>&#39;mobile&#39; = Mobile <br>&#39;other&#39; = Other <br>&#39;print&#39; = Print <br>&#39;recordableMedia&#39; = Recordable Media <br>&#39;web&#39; = Web</td></tr></table> </td></tr> <tr class=b> <td>PageCount</td> <td class=c title=' / = Avoided'>integer/</td> <td>&nbsp;</td></tr> <tr> <td>PageProgressionDirection</td> <td class=c title=' / = Avoided'>string/</td> <td><span class=s>&#39;LTR&#39; = Left to Right <br>&#39;RTL&#39; = Right to Left</span></td></tr> <tr class=b> <td>PageRange</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr> <td>Person</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Platform</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>ProductCode</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Profession</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>PublicationDate</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#prismPublicationDate'>prismPublicationDate Struct</a></td></tr> <tr class=b> <td>PublicationDateA-platform</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>PublicationDateDate</td> <td class=c title=' _ = Flattened + = List'>date_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>PublicationDisplayDate</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#prismPublicationDate'>prismPublicationDate Struct</a></td></tr> <tr> <td>PublicationDisplayDateA-platform</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>PublicationDisplayDateDate</td> <td class=c title=' _ = Flattened + = List'>date_+</td> <td>&nbsp;</td></tr> <tr> <td>PublicationName</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>PublishingFrequency</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Rating</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>SamplePageRange</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Section</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>SellingAgency</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>SeriesNumber</td> <td class=c title=' / = Avoided'>integer/</td> <td>&nbsp;</td></tr> <tr class=b> <td>SeriesTitle</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Sport</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>StartingPage</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Subsection1</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Subsection2</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Subsection3</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Subsection4</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Subtitle</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>SupplementDisplayID</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>SupplementStartingPage</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>SupplementTitle</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Teaser</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Ticker</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr> <td>TimePeriod</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>URL</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#prismUrl'>prismUrl Struct</a></td></tr> <tr> <td>URLA-platform</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>URLUrl</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>UspsNumber</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>VersionIdentifier</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Volume</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>WordCount</td> <td class=c title=' / = Avoided'>integer/</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='prismAlternateTitle'>XMP prismAlternateTitle Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>A-lang</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>A-platform</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Text</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='prismChannel'>XMP prismChannel Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>A-lang</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Channel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Subchannel1</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Subchannel2</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Subchannel3</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Subchannel4</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='prismHasCorrection'>XMP prismHasCorrection Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>A-lang</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>A-platform</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Text</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='prismKillDate'>XMP prismKillDate Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>A-platform</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Date</td> <td class=c>date</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='prismOffSaleDate'>XMP prismOffSaleDate Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>A-platform</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Date</td> <td class=c>date</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='prismOnSaleDate'>XMP prismOnSaleDate Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>A-platform</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Date</td> <td class=c>date</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='prismOnSaleDay'>XMP prismOnSaleDay Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>A-platform</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Day</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='prismPublicationDate'>XMP prismPublicationDate Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>A-platform</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Date</td> <td class=c>date</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='prismUrl'>XMP prismUrl Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>A-platform</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Url</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='prl'>XMP prl Tags</a></h2> <p>PRISM Rights Language 2.1 namespace tags. These tags have been deprecated since the release of the PRISM Usage Rights 3.0. (see <a href="http://www.prismstandard.org/">http://www.prismstandard.org/</a>)</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Geography</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Industry</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr> <td>Usage</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='prm'>XMP prm Tags</a></h2> <p>PRISM Recipe Metadata 3.0 namespace tags. (see <a href="http://www.prismstandard.org/">http://www.prismstandard.org/</a>)</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CookingEquipment</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>CookingMethod</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Course</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Cuisine</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>DietaryNeeds</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>DishType</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Duration</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>IngredientExclusion</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>MainIngredient</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>Meal</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>RecipeEndingPage</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>RecipePageRange</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>RecipeSource</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>RecipeStartingPage</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>RecipeTitle</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>ServingSize</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>SkillLevel</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>SpecialOccasion</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Yield</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='pur'>XMP pur Tags</a></h2> <p>PRISM Usage Rights 3.0 namespace tags. (see <a href="http://www.prismstandard.org/">http://www.prismstandard.org/</a>)</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AdultContentWarning</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Agreement</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr> <td>Copyright</td> <td class=c title=' / = Avoided'>lang-alt/</td> <td>&nbsp;</td></tr> <tr class=b> <td>CreditLine</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr> <td>EmbargoDate</td> <td class=c title=' / = Avoided + = List'>date/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ExclusivityEndDate</td> <td class=c title=' / = Avoided + = List'>date/+</td> <td>&nbsp;</td></tr> <tr> <td>ExpirationDate</td> <td class=c title=' / = Avoided + = List'>date/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageSizeRestriction</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>OptionEndDate</td> <td class=c title=' / = Avoided + = List'>date/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Permissions</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr> <td>Restrictions</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ReuseProhibited</td> <td class=c title=' / = Avoided'>boolean/</td> <td>&nbsp;</td></tr> <tr> <td>RightsAgent</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr class=b> <td>RightsOwner</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='rdf'>XMP rdf Tags</a></h2> <p>Most RDF attributes are handled internally, but the &quot;about&quot; attribute is treated specially to allow it to be set to a specific value if required.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>About</td> <td class=c title=' ! = Unsafe'>string!</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='swf'>XMP swf Tags</a></h2> <p>Adobe SWF namespace tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>BackgroundAlpha</td> <td class=c>integer</td> <td><span class=s><span class=n>(called bgalpha by the spec)</span></span></td></tr> <tr class=b> <td>ForwardLock</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>MaxStorage</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>Type</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='tiff'>XMP tiff Tags</a></h2> <p>EXIF namespace for TIFF tags. See <a href="http://www.cipa.jp/std/documents/e/DC-010-2012_E.pdf">http://www.cipa.jp/std/documents/e/DC-010-2012_E.pdf</a> for the specification.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Artist</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>BitsPerSample</td> <td class=c title=' + = List'>integer+</td> <td>&nbsp;</td></tr> <tr> <td>Compression</td> <td class=c>integer</td> <td>--&gt; <a href='EXIF.html#Compression'>EXIF Compression Values</a></td></tr> <tr class=b> <td>Copyright</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr> <td>DateTime</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>ImageDescription</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr> <td>ImageHeight</td> <td class=c>integer</td> <td><span class=s><span class=n>(called ImageLength by the spec)</span></span></td></tr> <tr class=b> <td>ImageWidth</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>Make</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Model</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>NativeDigest</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Orientation</td> <td class=c>integer</td> <td><table class=cols><tr> <td>1 = Horizontal (normal) <br>2 = Mirror horizontal <br>3 = Rotate 180 <br>4 = Mirror vertical <br>5 = Mirror horizontal and rotate 270 CW <br>6 = Rotate 90 CW <br>7 = Mirror horizontal and rotate 90 CW <br>8 = Rotate 270 CW</td></tr></table> </td></tr> <tr> <td>PhotometricInterpretation</td> <td class=c>integer</td> <td><table class=cols><tr> <td>0 = WhiteIsZero <br>1 = BlackIsZero <br>2 = RGB <br>3 = RGB Palette <br>4 = Transparency Mask <br>5 = CMYK <br>6 = YCbCr <br>8 = CIELab <br>9 = ICCLab <br>10 = ITULab <br>32803 = Color Filter Array <br>32844 = Pixar LogL <br>32845 = Pixar LogLuv <br>34892 = Linear Raw</td></tr></table> </td></tr> <tr class=b> <td>PlanarConfiguration</td> <td class=c>integer</td> <td><span class=s>1 = Chunky <br>2 = Planar</span></td></tr> <tr> <td>PrimaryChromaticities</td> <td class=c title=' + = List'>rational+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ReferenceBlackWhite</td> <td class=c title=' + = List'>rational+</td> <td>&nbsp;</td></tr> <tr> <td>ResolutionUnit</td> <td class=c>integer</td> <td><span class=s><span class=n>(the value 1 is not standard EXIF)</span> <br>1 = None <br>2 = inches <br>3 = cm</span></td></tr> <tr class=b> <td>SamplesPerPixel</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>Software</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>TransferFunction</td> <td class=c title=' + = List'>integer+</td> <td>&nbsp;</td></tr> <tr> <td>WhitePoint</td> <td class=c title=' + = List'>rational+</td> <td>&nbsp;</td></tr> <tr class=b> <td>XResolution</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr> <td>YCbCrCoefficients</td> <td class=c title=' + = List'>rational+</td> <td>&nbsp;</td></tr> <tr class=b> <td>YCbCrPositioning</td> <td class=c>integer</td> <td><span class=s>1 = Centered <br>2 = Co-sited</span></td></tr> <tr> <td>YCbCrSubSampling</td> <td class=c title=' + = List'>integer+</td> <td><span class=s><span class=n>(while technically this is a list-type tag, for compatibility with its EXIF counterpart it is written and read as a simple string)</span></span><table class=cols><tr> <td>&#39;1 1&#39; = YCbCr4:4:4 (1 1) <br>&#39;1 2&#39; = YCbCr4:4:0 (1 2) <br>&#39;1 4&#39; = YCbCr4:4:1 (1 4) <br>&#39;2 1&#39; = YCbCr4:2:2 (2 1) <br>&#39;2 2&#39; = YCbCr4:2:0 (2 2) <br>&#39;2 4&#39; = YCbCr4:2:1 (2 4) <br>&#39;4 1&#39; = YCbCr4:1:1 (4 1) <br>&#39;4 2&#39; = YCbCr4:1:0 (4 2)</td></tr></table> </td></tr> <tr class=b> <td>YResolution</td> <td class=c>rational</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='x'>XMP x Tags</a></h2> <p>The &quot;x&quot; namespace is used for the &quot;xmpmeta&quot; wrapper, and may contain an &quot;xmptk&quot; attribute that is extracted as the XMPToolkit tag. When writing, the XMPToolkit tag is generated automatically by ExifTool unless specifically set to another value.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>XMPToolkit</td> <td class=c title=' ! = Unsafe'>string!</td> <td><span class=s><span class=n>(called xmptk by the spec)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='xmp'>XMP xmp Tags</a></h2> <p>XMP namespace tags. If the older &quot;xap&quot;, &quot;xapBJ&quot;, &quot;xapMM&quot; or &quot;xapRights&quot; namespace prefixes are found, they are translated to the newer &quot;xmp&quot;, &quot;xmpBJ&quot;, &quot;xmpMM&quot; and &quot;xmpRights&quot; prefixes for use in family 1 group names.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Advisory</td> <td class=c title=' + = List'>string+</td> <td><span class=s><span class=n>(deprecated)</span></span></td></tr> <tr class=b> <td>Author</td> <td class=c title=' / = Avoided'>string/</td> <td><span class=s><span class=n>(non-standard)</span></span></td></tr> <tr> <td>BaseURL</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CreateDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr> <td>CreatorTool</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Description</td> <td class=c title=' / = Avoided'>lang-alt/</td> <td><span class=s><span class=n>(non-standard)</span></span></td></tr> <tr> <td>Format</td> <td class=c title=' / = Avoided'>string/</td> <td><span class=s><span class=n>(non-standard)</span></span></td></tr> <tr class=b> <td>Identifier</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td>&nbsp;</td></tr> <tr> <td>Keywords</td> <td class=c title=' / = Avoided'>string/</td> <td><span class=s><span class=n>(non-standard)</span></span></td></tr> <tr class=b> <td>Label</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>MetadataDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>ModifyDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr> <td>Nickname</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>PageInfo</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#PageInfo'>PageInfo Struct</a></td></tr> <tr> <td>PageImageFormat</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(PageInfoFormat)</span></span></td></tr> <tr class=b> <td>PageImageHeight</td> <td class=c title=' _ = Flattened + = List'>integer_+</td> <td><span class=s><span class=n>(PageInfoHeight)</span></span></td></tr> <tr> <td>PageImage</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(PageInfoImage)</span></span></td></tr> <tr class=b> <td>PageImagePageNumber</td> <td class=c title=' _ = Flattened + = List'>integer_+</td> <td><span class=s><span class=n>(PageInfoPageNumber)</span></span></td></tr> <tr> <td>PageImageWidth</td> <td class=c title=' _ = Flattened + = List'>integer_+</td> <td><span class=s><span class=n>(PageInfoWidth)</span></span></td></tr> <tr class=b> <td>Rating</td> <td class=c>real</td> <td><span class=s><span class=n>(a value from 0 to 5, or -1 for &quot;rejected&quot;)</span></span></td></tr> <tr> <td>Thumbnails</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#Thumbnail'>Thumbnail Struct</a></td></tr> <tr class=b> <td>ThumbnailFormat</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ThumbnailsFormat)</span></span></td></tr> <tr> <td>ThumbnailHeight</td> <td class=c title=' _ = Flattened + = List'>integer_+</td> <td><span class=s><span class=n>(ThumbnailsHeight)</span></span></td></tr> <tr class=b> <td>ThumbnailImage</td> <td class=c title=' / = Avoided _ = Flattened + = List'>string/_+</td> <td><span class=s><span class=n>(ThumbnailsImage)</span></span></td></tr> <tr> <td>ThumbnailWidth</td> <td class=c title=' _ = Flattened + = List'>integer_+</td> <td><span class=s><span class=n>(ThumbnailsWidth)</span></span></td></tr> <tr class=b> <td>Title</td> <td class=c title=' / = Avoided'>lang-alt/</td> <td><span class=s><span class=n>(non-standard)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='PageInfo'>XMP PageInfo Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>PageNumber</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>Format</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Height</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>Image</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Width</td> <td class=c>integer</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Thumbnail'>XMP Thumbnail Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Format</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Height</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>Image</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Width</td> <td class=c>integer</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='xmpBJ'>XMP xmpBJ Tags</a></h2> <p>XMP Basic Job Ticket namespace tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>JobRef</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#JobRef'>JobRef Struct</a></td></tr> <tr class=b> <td>JobRefId</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>JobRefName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>JobRefUrl</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='JobRef'>XMP JobRef Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Id</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Name</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Url</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='xmpDM'>XMP xmpDM Tags</a></h2> <p>XMP Dynamic Media namespace tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AbsPeakAudioFilePath</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Album</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>AltTapeName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>AltTimecode</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#Timecode'>Timecode Struct</a></td></tr> <tr> <td>AltTimecodeTimeFormat</td> <td class=c title=' _ = Flattened'>string_</td> <td><table class=cols><tr> <td>&#39;23976Timecode&#39; = 23.976 fps <br>&#39;24Timecode&#39; = 24 fps <br>&#39;25Timecode&#39; = 25 fps <br>&#39;2997DropTimecode&#39; = 29.97 fps (drop) <br>&#39;2997NonDropTimecode&#39; = 29.97 fps (non-drop) <br>&#39;30Timecode&#39; = 30 fps <br>&#39;50Timecode&#39; = 50 fps <br>&#39;5994DropTimecode&#39; = 59.94 fps (drop) <br>&#39;5994NonDropTimecode&#39; = 59.94 fps (non-drop) <br>&#39;60Timecode&#39; = 60 fps</td></tr></table> </td></tr> <tr class=b> <td>AltTimecodeTimeValue</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>AltTimecodeValue</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr class=b> <td>Artist</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>AudioChannelType</td> <td class=c>string</td> <td><table class=cols><tr> <td>5.1 = 5.1 <br>7.1 = 7.1 <br>&#39;16 Channel&#39; = 16 Channel <br>&#39;Mono&#39; = Mono <br>&#39;Other&#39; = Other <br>&#39;Stereo&#39; = Stereo</td></tr></table> </td></tr> <tr class=b> <td>AudioCompressor</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>AudioModDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>AudioSampleRate</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>AudioSampleType</td> <td class=c>string</td> <td><table class=cols><tr> <td>&#39;16Int&#39; = 16-bit integer <br>&#39;24Int&#39; = 24-bit integer <br>&#39;32Float&#39; = 32-bit float <br>&#39;32Int&#39; = 32-bit integer <br>&#39;8Int&#39; = 8-bit integer <br>&#39;Compressed&#39; = Compressed <br>&#39;Other&#39; = Other <br>&#39;Packed&#39; = Packed</td></tr></table> </td></tr> <tr class=b> <td>BeatSpliceParams</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#BeatSpliceStretch'>BeatSpliceStretch Struct</a></td></tr> <tr> <td>BeatSpliceParamsRiseInDecibel</td> <td class=c title=' _ = Flattened'>real_</td> <td>&nbsp;</td></tr> <tr class=b> <td>BeatSpliceParamsRiseInTimeDuration</td> <td class=c title=' _ = Flattened'>struct_</td> <td>--&gt; <a href='XMP.html#Time'>Time Struct</a></td></tr> <tr> <td>BeatSpliceParamsRiseInTimeDurationScale</td> <td class=c title=' _ = Flattened'>rational_</td> <td>&nbsp;</td></tr> <tr class=b> <td>BeatSpliceParamsRiseInTimeDurationValue</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr> <td>BeatSpliceParamsUseFileBeatsMarker</td> <td class=c title=' _ = Flattened'>boolean_</td> <td>&nbsp;</td></tr> <tr class=b> <td>CameraAngle</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>CameraLabel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CameraModel</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>CameraMove</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Client</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>DMComment</td> <td class=c>string</td> <td><span class=s><span class=n>(called comment by the spec)</span></span></td></tr> <tr class=b> <td>Composer</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ContributedMedia</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#Media'>Media Struct</a></td></tr> <tr class=b> <td>ContributedMediaDuration</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#Time'>Time Struct</a></td></tr> <tr> <td>ContributedMediaDurationScale</td> <td class=c title=' _ = Flattened + = List'>rational_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContributedMediaDurationValue</td> <td class=c title=' _ = Flattened + = List'>integer_+</td> <td>&nbsp;</td></tr> <tr> <td>ContributedMediaManaged</td> <td class=c title=' _ = Flattened + = List'>boolean_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContributedMediaPath</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>ContributedMediaStartTime</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#Time'>Time Struct</a></td></tr> <tr class=b> <td>ContributedMediaStartTimeScale</td> <td class=c title=' _ = Flattened + = List'>rational_+</td> <td>&nbsp;</td></tr> <tr> <td>ContributedMediaStartTimeValue</td> <td class=c title=' _ = Flattened + = List'>integer_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ContributedMediaTrack</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>ContributedMediaWebStatement</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Copyright</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>Director</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>DirectorPhotography</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>DiscNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Duration</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#Time'>Time Struct</a></td></tr> <tr> <td>DurationScale</td> <td class=c title=' _ = Flattened'>rational_</td> <td>&nbsp;</td></tr> <tr class=b> <td>DurationValue</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr> <td>Engineer</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>FileDataRate</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr> <td>Genre</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Good</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>Instrument</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>IntroTime</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#Time'>Time Struct</a></td></tr> <tr> <td>IntroTimeScale</td> <td class=c title=' _ = Flattened'>rational_</td> <td>&nbsp;</td></tr> <tr class=b> <td>IntroTimeValue</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr> <td>Key</td> <td class=c>string</td> <td><table class=cols><tr> <td>&#39;A&#39; = A <br>&#39;A#&#39; = A# <br>&#39;B&#39; = B <br>&#39;C&#39; = C</td><td>&nbsp;&nbsp;</td> <td>&#39;C#&#39; = C# <br>&#39;D&#39; = D <br>&#39;D#&#39; = D# <br>&#39;E&#39; = E</td><td>&nbsp;&nbsp;</td> <td>&#39;F&#39; = F <br>&#39;F#&#39; = F# <br>&#39;G&#39; = G <br>&#39;G#&#39; = G#</td></tr></table> </td></tr> <tr class=b> <td>LogComment</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Loop</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr class=b> <td>Lyrics</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Markers</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#Marker'>Marker Struct</a></td></tr> <tr class=b> <td>MarkersComment</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>MarkersCuePointParams</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#CuePointParam'>CuePointParam Struct</a></td></tr> <tr class=b> <td>MarkersCuePointParamsKey</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>MarkersCuePointParamsValue</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>MarkersCuePointType</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>MarkersDuration</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>MarkersLocation</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>MarkersName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>MarkersProbability</td> <td class=c title=' _ = Flattened + = List'>real_+</td> <td>&nbsp;</td></tr> <tr> <td>MarkersSpeaker</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>MarkersStartTime</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>MarkersTarget</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>MarkersType</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>MetadataModDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>NumberOfBeats</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>OutCue</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#Time'>Time Struct</a></td></tr> <tr class=b> <td>OutCueScale</td> <td class=c title=' _ = Flattened'>rational_</td> <td>&nbsp;</td></tr> <tr> <td>OutCueValue</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr class=b> <td>PartOfCompilation</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>ProjectName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProjectRef</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#ProjectLink'>ProjectLink Struct</a></td></tr> <tr> <td>ProjectRefPath</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>ProjectRefType</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s>&#39;audio&#39; = Audio <br>&#39;custom&#39; = Custom <br>&#39;movie&#39; = Movie <br>&#39;still&#39; = Still Image</span></td></tr> <tr> <td>PullDown</td> <td class=c>string</td> <td><table class=cols><tr> <td>&#39;SSWWW&#39; = SSWWW <br>&#39;SWWWS&#39; = SWWWS <br>&#39;SWWWW&#39; = SWWWW <br>&#39;WSSWW&#39; = WSSWW <br>&#39;WSWWW&#39; = WSWWW</td><td>&nbsp;&nbsp;</td> <td>&#39;WWSSW&#39; = WWSSW <br>&#39;WWSWW&#39; = WWSWW <br>&#39;WWWSS&#39; = WWWSS <br>&#39;WWWSW&#39; = WWWSW <br>&#39;WWWWS&#39; = WWWWS</td></tr></table> </td></tr> <tr class=b> <td>RelativePeakAudioFilePath</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>RelativeTimestamp</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#Time'>Time Struct</a></td></tr> <tr class=b> <td>RelativeTimestampScale</td> <td class=c title=' _ = Flattened'>rational_</td> <td>&nbsp;</td></tr> <tr> <td>RelativeTimestampValue</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr class=b> <td>ReleaseDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr> <td>ResampleParams</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#ResampleStretch'>ResampleStretch Struct</a></td></tr> <tr class=b> <td>ResampleParamsQuality</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s>&#39;High&#39; = High <br>&#39;Low&#39; = Low <br>&#39;Medium&#39; = Medium</span></td></tr> <tr> <td>ScaleType</td> <td class=c>string</td> <td><span class=s>&#39;Both&#39; = Both <br>&#39;Major&#39; = Major <br>&#39;Minor&#39; = Minor <br>&#39;Neither&#39; = Neither</span></td></tr> <tr class=b> <td>Scene</td> <td class=c title=' / = Avoided'>string/</td> <td>&nbsp;</td></tr> <tr> <td>ShotDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>ShotDay</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ShotLocation</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ShotName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ShotNumber</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ShotSize</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>SpeakerPlacement</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>StartTimecode</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#Timecode'>Timecode Struct</a></td></tr> <tr> <td>StartTimecodeTimeFormat</td> <td class=c title=' _ = Flattened'>string_</td> <td><table class=cols><tr> <td>&#39;23976Timecode&#39; = 23.976 fps <br>&#39;24Timecode&#39; = 24 fps <br>&#39;25Timecode&#39; = 25 fps <br>&#39;2997DropTimecode&#39; = 29.97 fps (drop) <br>&#39;2997NonDropTimecode&#39; = 29.97 fps (non-drop) <br>&#39;30Timecode&#39; = 30 fps <br>&#39;50Timecode&#39; = 50 fps <br>&#39;5994DropTimecode&#39; = 59.94 fps (drop) <br>&#39;5994NonDropTimecode&#39; = 59.94 fps (non-drop) <br>&#39;60Timecode&#39; = 60 fps</td></tr></table> </td></tr> <tr class=b> <td>StartTimecodeTimeValue</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>StartTimecodeValue</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr class=b> <td>StartTimeSampleSize</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>StartTimeScale</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>StretchMode</td> <td class=c>string</td> <td><span class=s>&#39;Beat Splice&#39; = Beat Splice <br>&#39;Fixed length&#39; = Fixed length <br>&#39;Hybrid&#39; = Hybrid <br>&#39;Resample&#39; = Resample <br>&#39;Time-Scale&#39; = Time-Scale</span></td></tr> <tr> <td>TakeNumber</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>TapeName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Tempo</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimeScaleParams</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#TimeScaleStretch'>TimeScaleStretch Struct</a></td></tr> <tr> <td>TimeScaleParamsFrameOverlappingPercentage</td> <td class=c title=' _ = Flattened'>real_</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimeScaleParamsFrameSize</td> <td class=c title=' _ = Flattened'>real_</td> <td>&nbsp;</td></tr> <tr> <td>TimeScaleParamsQuality</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s>&#39;High&#39; = High <br>&#39;Low&#39; = Low <br>&#39;Medium&#39; = Medium</span></td></tr> <tr class=b> <td>TimeSignature</td> <td class=c>string</td> <td><table class=cols><tr> <td>&#39;12/8&#39; = 12/8 <br>&#39;2/4&#39; = 2/4 <br>&#39;3/4&#39; = 3/4</td><td>&nbsp;&nbsp;</td> <td>&#39;4/4&#39; = 4/4 <br>&#39;5/4&#39; = 5/4 <br>&#39;6/8&#39; = 6/8</td><td>&nbsp;&nbsp;</td> <td>&#39;7/4&#39; = 7/4 <br>&#39;9/8&#39; = 9/8 <br>&#39;other&#39; = other</td></tr></table> </td></tr> <tr> <td>TrackNumber</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>Tracks</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#Track'>Track Struct</a></td></tr> <tr> <td>TracksFrameRate</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>TracksMarkers</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#Marker'>Marker Struct</a></td></tr> <tr> <td>TracksMarkersComment</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>TracksMarkersCuePointParams</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#CuePointParam'>CuePointParam Struct</a></td></tr> <tr> <td>TracksMarkersCuePointParamsKey</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>TracksMarkersCuePointParamsValue</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>TracksMarkersCuePointType</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>TracksMarkersDuration</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>TracksMarkersLocation</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>TracksMarkersName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>TracksMarkersProbability</td> <td class=c title=' _ = Flattened + = List'>real_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>TracksMarkersSpeaker</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>TracksMarkersStartTime</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>TracksMarkersTarget</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>TracksMarkersType</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>TracksTrackName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>TracksTrackType</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoAlphaMode</td> <td class=c>string</td> <td><span class=s>&#39;none&#39; = None <br>&#39;pre-multiplied&#39; = Pre-multiplied <br>&#39;straight&#39; = Straight</span></td></tr> <tr> <td>VideoAlphaPremultipleColor</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#Colorant'>Colorant Struct</a></td></tr> <tr class=b> <td>VideoAlphaPremultipleColorA</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr> <td>VideoAlphaPremultipleColorB</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoAlphaPremultipleColorBlack</td> <td class=c title=' _ = Flattened'>real_</td> <td>&nbsp;</td></tr> <tr> <td>VideoAlphaPremultipleColorBlue</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoAlphaPremultipleColorCyan</td> <td class=c title=' _ = Flattened'>real_</td> <td>&nbsp;</td></tr> <tr> <td>VideoAlphaPremultipleColorGreen</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoAlphaPremultipleColorL</td> <td class=c title=' _ = Flattened'>real_</td> <td>&nbsp;</td></tr> <tr> <td>VideoAlphaPremultipleColorMagenta</td> <td class=c title=' _ = Flattened'>real_</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoAlphaPremultipleColorMode</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s>&#39;CMYK&#39; = CMYK <br>&#39;LAB&#39; = Lab <br>&#39;RGB&#39; = RGB</span></td></tr> <tr> <td>VideoAlphaPremultipleColorRed</td> <td class=c title=' _ = Flattened'>integer_</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoAlphaPremultipleColorSwatchName</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>VideoAlphaPremultipleColorTint</td> <td class=c title=' _ = Flattened'>integer_</td> <td><span class=s><span class=n>(not part of 2010 XMP specification)</span></span></td></tr> <tr class=b> <td>VideoAlphaPremultipleColorType</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>VideoAlphaPremultipleColorYellow</td> <td class=c title=' _ = Flattened'>real_</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoAlphaUnityIsTransparent</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>VideoColorSpace</td> <td class=c>string</td> <td><span class=s>&#39;CCIR-601&#39; = CCIR-601 <br>&#39;CCIR-709&#39; = CCIR-709 <br>&#39;sRGB&#39; = sRGB</span></td></tr> <tr class=b> <td>VideoCompressor</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>VideoFieldOrder</td> <td class=c>string</td> <td><span class=s>&#39;Lower&#39; = Lower <br>&#39;Progressive&#39; = Progressive <br>&#39;Upper&#39; = Upper</span></td></tr> <tr class=b> <td>VideoFrameRate</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>VideoFrameSize</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#Dimensions'>Dimensions Struct</a></td></tr> <tr class=b> <td>VideoFrameSizeH</td> <td class=c title=' _ = Flattened'>real_</td> <td>&nbsp;</td></tr> <tr> <td>VideoFrameSizeUnit</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoFrameSizeW</td> <td class=c title=' _ = Flattened'>real_</td> <td>&nbsp;</td></tr> <tr> <td>VideoModDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr class=b> <td>VideoPixelAspectRatio</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr> <td>VideoPixelDepth</td> <td class=c>string</td> <td><table class=cols><tr> <td>&#39;16Int&#39; = 16-bit integer <br>&#39;24Int&#39; = 24-bit integer <br>&#39;32Float&#39; = 32-bit float <br>&#39;32Int&#39; = 32-bit integer <br>&#39;8Int&#39; = 8-bit integer <br>&#39;Other&#39; = Other</td></tr></table> </td></tr> </table></td></tr></table></blockquote> <h2><a name='Timecode'>XMP Timecode Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>TimeFormat</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>TimeValue</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Value</td> <td class=c>integer</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='BeatSpliceStretch'>XMP BeatSpliceStretch Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>RiseInDecibel</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>RiseInTimeDuration</td> <td class=c>Time</td> <td>--&gt; <a href='XMP.html#Time'>Time Struct</a></td></tr> <tr> <td>UseFileBeatsMarker</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Time'>XMP Time Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Scale</td> <td class=c>rational</td> <td>&nbsp;</td></tr> <tr class=b> <td>Value</td> <td class=c>integer</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Media'>XMP Media Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Duration</td> <td class=c>Time</td> <td>--&gt; <a href='XMP.html#Time'>Time Struct</a></td></tr> <tr class=b> <td>Managed</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>Path</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>StartTime</td> <td class=c>Time</td> <td>--&gt; <a href='XMP.html#Time'>Time Struct</a></td></tr> <tr> <td>Track</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>WebStatement</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Marker'>XMP Marker Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Comment</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>CuePointParams</td> <td class=c title=' + = List'>CuePointParam+</td> <td>--&gt; <a href='XMP.html#CuePointParam'>CuePointParam Struct</a></td></tr> <tr> <td>CuePointType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Duration</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Location</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Name</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Probability</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Speaker</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>StartTime</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Target</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Type</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='CuePointParam'>XMP CuePointParam Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Key</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Value</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ProjectLink'>XMP ProjectLink Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Path</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Type</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ResampleStretch'>XMP ResampleStretch Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Quality</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='TimeScaleStretch'>XMP TimeScaleStretch Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>FrameOverlappingPercentage</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>FrameSize</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Quality</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Track'>XMP Track Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>FrameRate</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Markers</td> <td class=c title=' + = List'>Marker+</td> <td>--&gt; <a href='XMP.html#Marker'>Marker Struct</a></td></tr> <tr> <td>TrackName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>TrackType</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Colorant'>XMP Colorant Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>A</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>B</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>L</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Black</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Blue</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>Cyan</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Green</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>Magenta</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Mode</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Red</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>SwatchName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Tint</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr> <td>Type</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Yellow</td> <td class=c>real</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Dimensions'>XMP Dimensions Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>H</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Unit</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>W</td> <td class=c>real</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Area'>XMP Area Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>D</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>H</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Unit</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>W</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>X</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>Y</td> <td class=c>real</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='xmpMM'>XMP xmpMM Tags</a></h2> <p>XMP Media Management namespace tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>DerivedFrom</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#ResourceRef'>ResourceRef Struct</a></td></tr> <tr class=b> <td>DerivedFromAlternatePaths</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>DerivedFromDocumentID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>DerivedFromFilePath</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>DerivedFromFromPart</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>DerivedFromInstanceID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>DerivedFromLastModifyDate</td> <td class=c title=' _ = Flattened'>date_</td> <td>&nbsp;</td></tr> <tr class=b> <td>DerivedFromManager</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>DerivedFromManagerVariant</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>DerivedFromManageTo</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>DerivedFromManageUI</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>DerivedFromMaskMarkers</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s>&#39;All&#39; = All <br>&#39;None&#39; = None</span></td></tr> <tr> <td>DerivedFromOriginalDocumentID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>DerivedFromPartMapping</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>DerivedFromRenditionClass</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>DerivedFromRenditionParams</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>DerivedFromToPart</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>DerivedFromVersionID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>DocumentID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>History</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#ResourceEvent'>ResourceEvent Struct</a></td></tr> <tr> <td>HistoryAction</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>HistoryChanged</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>HistoryInstanceID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>HistoryParameters</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>HistorySoftwareAgent</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>HistoryWhen</td> <td class=c title=' _ = Flattened + = List'>date_+</td> <td>&nbsp;</td></tr> <tr> <td>Ingredients</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#ResourceRef'>ResourceRef Struct</a></td></tr> <tr class=b> <td>IngredientsAlternatePaths</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>IngredientsDocumentID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>IngredientsFilePath</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>IngredientsFromPart</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>IngredientsInstanceID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>IngredientsLastModifyDate</td> <td class=c title=' _ = Flattened + = List'>date_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>IngredientsManager</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>IngredientsManagerVariant</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>IngredientsManageTo</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>IngredientsManageUI</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>IngredientsMaskMarkers</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s>&#39;All&#39; = All <br>&#39;None&#39; = None</span></td></tr> <tr> <td>IngredientsOriginalDocumentID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>IngredientsPartMapping</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>IngredientsRenditionClass</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>IngredientsRenditionParams</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>IngredientsToPart</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>IngredientsVersionID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>InstanceID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LastURL</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ManagedFrom</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#ResourceRef'>ResourceRef Struct</a></td></tr> <tr class=b> <td>ManagedFromAlternatePaths</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>ManagedFromDocumentID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManagedFromFilePath</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>ManagedFromFromPart</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManagedFromInstanceID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>ManagedFromLastModifyDate</td> <td class=c title=' _ = Flattened'>date_</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManagedFromManager</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>ManagedFromManagerVariant</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManagedFromManageTo</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>ManagedFromManageUI</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManagedFromMaskMarkers</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s>&#39;All&#39; = All <br>&#39;None&#39; = None</span></td></tr> <tr> <td>ManagedFromOriginalDocumentID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManagedFromPartMapping</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>ManagedFromRenditionClass</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManagedFromRenditionParams</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>ManagedFromToPart</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManagedFromVersionID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>Manager</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManagerVariant</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>ManageTo</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManageUI</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Manifest</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#ManifestItem'>ManifestItem Struct</a></td></tr> <tr class=b> <td>ManifestLinkForm</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>ManifestPlacedResolutionUnit</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManifestPlacedXResolution</td> <td class=c title=' _ = Flattened + = List'>real_+</td> <td>&nbsp;</td></tr> <tr> <td>ManifestPlacedYResolution</td> <td class=c title=' _ = Flattened + = List'>real_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManifestReference</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#ResourceRef'>ResourceRef Struct</a></td></tr> <tr> <td>ManifestReferenceAlternatePaths</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManifestReferenceDocumentID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>ManifestReferenceFilePath</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManifestReferenceFromPart</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>ManifestReferenceInstanceID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManifestReferenceLastModifyDate</td> <td class=c title=' _ = Flattened + = List'>date_+</td> <td>&nbsp;</td></tr> <tr> <td>ManifestReferenceManager</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManifestReferenceManagerVariant</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>ManifestReferenceManageTo</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManifestReferenceManageUI</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>ManifestReferenceMaskMarkers</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s>&#39;All&#39; = All <br>&#39;None&#39; = None</span></td></tr> <tr class=b> <td>ManifestReferenceOriginalDocumentID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>ManifestReferencePartMapping</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManifestReferenceRenditionClass</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>ManifestReferenceRenditionParams</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManifestReferenceToPart</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>ManifestReferenceVersionID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>OriginalDocumentID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Pantry</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#PantryItem'>PantryItem Struct</a></td></tr> <tr class=b> <td>PreservedFileName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>RenditionClass</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>RenditionOf</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#ResourceRef'>ResourceRef Struct</a></td></tr> <tr> <td>RenditionOfAlternatePaths</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>RenditionOfDocumentID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>RenditionOfFilePath</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>RenditionOfFromPart</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>RenditionOfInstanceID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>RenditionOfLastModifyDate</td> <td class=c title=' _ = Flattened'>date_</td> <td>&nbsp;</td></tr> <tr> <td>RenditionOfManager</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>RenditionOfManagerVariant</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>RenditionOfManageTo</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>RenditionOfManageUI</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>RenditionOfMaskMarkers</td> <td class=c title=' _ = Flattened'>string_</td> <td><span class=s>&#39;All&#39; = All <br>&#39;None&#39; = None</span></td></tr> <tr class=b> <td>RenditionOfOriginalDocumentID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>RenditionOfPartMapping</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>RenditionOfRenditionClass</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>RenditionOfRenditionParams</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>RenditionOfToPart</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr> <td>RenditionOfVersionID</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>RenditionParams</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>SaveID</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>Subject</td> <td class=c title=' / = Avoided + = List'>string/+</td> <td><span class=s><span class=n>(undocumented)</span></span></td></tr> <tr> <td>VersionID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Versions</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#Version'>Version Struct</a></td></tr> <tr> <td>VersionsComments</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>VersionsEvent</td> <td class=c title=' _ = Flattened + = List'>struct_+</td> <td>--&gt; <a href='XMP.html#ResourceEvent'>ResourceEvent Struct</a></td></tr> <tr> <td>VersionsEventAction</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>VersionsEventChanged</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>VersionsEventInstanceID</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>VersionsEventParameters</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr> <td>VersionsEventSoftwareAgent</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>VersionsEventWhen</td> <td class=c title=' _ = Flattened + = List'>date_+</td> <td>&nbsp;</td></tr> <tr> <td>VersionsModifier</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> <tr class=b> <td>VersionsModifyDate</td> <td class=c title=' _ = Flattened + = List'>date_+</td> <td>&nbsp;</td></tr> <tr> <td>VersionsVersion</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ResourceRef'>XMP ResourceRef Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>AlternatePaths</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>DocumentID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>FilePath</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>FromPart</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>InstanceID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>LastModifyDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr> <td>ManageTo</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManageUI</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>Manager</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ManagerVariant</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>MaskMarkers</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>OriginalDocumentID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>PartMapping</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>RenditionClass</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>RenditionParams</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ToPart</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>VersionID</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ResourceEvent'>XMP ResourceEvent Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Action</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Changed</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>InstanceID</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Parameters</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>SoftwareAgent</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>When</td> <td class=c>date</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='ManifestItem'>XMP ManifestItem Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>LinkForm</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>PlacedResolutionUnit</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>PlacedXResolution</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr class=b> <td>PlacedYResolution</td> <td class=c>real</td> <td>&nbsp;</td></tr> <tr> <td>Reference</td> <td class=c>ResourceRef</td> <td>--&gt; <a href='XMP.html#ResourceRef'>ResourceRef Struct</a></td></tr> </table></td></tr></table></blockquote> <h2><a name='PantryItem'>XMP PantryItem Struct</a></h2> <p>This structure must have an InstanceID field, but may also contain any other XMP properties.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>InstanceID</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Version'>XMP Version Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Comments</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Event</td> <td class=c>ResourceEvent</td> <td>--&gt; <a href='XMP.html#ResourceEvent'>ResourceEvent Struct</a></td></tr> <tr> <td>Modifier</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>ModifyDate</td> <td class=c>date</td> <td>&nbsp;</td></tr> <tr> <td>Version</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='xmpNote'>XMP xmpNote Tags</a></h2> <p>XMP Note namespace tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>HasExtendedXMP</td> <td class=c title=' * = Protected'>string*</td> <td><span class=s><span class=n>(this tag is protected so it is not writable directly. Instead, it is set automatically to the GUID of the extended XMP when writing extended XMP to a JPEG image)</span></span></td></tr> </table></td></tr></table></blockquote> <h2><a name='xmpPLUS'>XMP xmpPLUS Tags</a></h2> <p>XMP Picture Licensing Universal System (PLUS) namespace tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>CreditLineReq</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr class=b> <td>ReuseAllowed</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='xmpRights'>XMP xmpRights Tags</a></h2> <p>XMP Rights Management namespace tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Certificate</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>Marked</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>Owner</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>UsageTerms</td> <td class=c>lang-alt</td> <td>&nbsp;</td></tr> <tr> <td>WebStatement</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='xmpTPg'>XMP xmpTPg Tags</a></h2> <p>XMP Paged-Text namespace tags.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>Colorants</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#Colorant'>Colorant Struct</a></td></tr> <tr class=b> <td>ColorantA</td> <td class=c title=' _ = Flattened + = List'>integer_+</td> <td><span class=s><span class=n>(ColorantsA)</span></span></td></tr> <tr> <td>ColorantB</td> <td class=c title=' _ = Flattened + = List'>integer_+</td> <td><span class=s><span class=n>(ColorantsB)</span></span></td></tr> <tr class=b> <td>ColorantBlack</td> <td class=c title=' _ = Flattened + = List'>real_+</td> <td><span class=s><span class=n>(ColorantsBlack)</span></span></td></tr> <tr> <td>ColorantBlue</td> <td class=c title=' _ = Flattened + = List'>integer_+</td> <td><span class=s><span class=n>(ColorantsBlue)</span></span></td></tr> <tr class=b> <td>ColorantCyan</td> <td class=c title=' _ = Flattened + = List'>real_+</td> <td><span class=s><span class=n>(ColorantsCyan)</span></span></td></tr> <tr> <td>ColorantGreen</td> <td class=c title=' _ = Flattened + = List'>integer_+</td> <td><span class=s><span class=n>(ColorantsGreen)</span></span></td></tr> <tr class=b> <td>ColorantL</td> <td class=c title=' _ = Flattened + = List'>real_+</td> <td><span class=s><span class=n>(ColorantsL)</span></span></td></tr> <tr> <td>ColorantMagenta</td> <td class=c title=' _ = Flattened + = List'>real_+</td> <td><span class=s><span class=n>(ColorantsMagenta)</span></span></td></tr> <tr class=b> <td>ColorantMode</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ColorantsMode)</span> <br>&#39;CMYK&#39; = CMYK <br>&#39;LAB&#39; = Lab <br>&#39;RGB&#39; = RGB</span></td></tr> <tr> <td>ColorantRed</td> <td class=c title=' _ = Flattened + = List'>integer_+</td> <td><span class=s><span class=n>(ColorantsRed)</span></span></td></tr> <tr class=b> <td>ColorantSwatchName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ColorantsSwatchName)</span></span></td></tr> <tr> <td>ColorantTint</td> <td class=c title=' _ = Flattened + = List'>integer_+</td> <td><span class=s><span class=n>(not part of 2010 XMP specification)</span></span></td></tr> <tr class=b> <td>ColorantType</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(ColorantsType)</span></span></td></tr> <tr> <td>ColorantYellow</td> <td class=c title=' _ = Flattened + = List'>real_+</td> <td><span class=s><span class=n>(ColorantsYellow)</span></span></td></tr> <tr class=b> <td>Fonts</td> <td class=c title=' + = List'>struct+</td> <td>--&gt; <a href='XMP.html#Font'>Font Struct</a></td></tr> <tr> <td>ChildFontFiles</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(FontsChildFontFiles)</span></span></td></tr> <tr class=b> <td>FontComposite</td> <td class=c title=' _ = Flattened + = List'>boolean_+</td> <td><span class=s><span class=n>(FontsComposite)</span></span></td></tr> <tr> <td>FontFace</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(FontsFontFace)</span></span></td></tr> <tr class=b> <td>FontFamily</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(FontsFontFamily)</span></span></td></tr> <tr> <td>FontFileName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(FontsFontFileName)</span></span></td></tr> <tr class=b> <td>FontName</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(FontsFontName)</span></span></td></tr> <tr> <td>FontType</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(FontsFontType)</span></span></td></tr> <tr class=b> <td>FontVersion</td> <td class=c title=' _ = Flattened + = List'>string_+</td> <td><span class=s><span class=n>(FontsVersionString)</span></span></td></tr> <tr> <td>MaxPageSize</td> <td class=c>struct</td> <td>--&gt; <a href='XMP.html#Dimensions'>Dimensions Struct</a></td></tr> <tr class=b> <td>MaxPageSizeH</td> <td class=c title=' _ = Flattened'>real_</td> <td>&nbsp;</td></tr> <tr> <td>MaxPageSizeUnit</td> <td class=c title=' _ = Flattened'>string_</td> <td>&nbsp;</td></tr> <tr class=b> <td>MaxPageSizeW</td> <td class=c title=' _ = Flattened'>real_</td> <td>&nbsp;</td></tr> <tr> <td>NPages</td> <td class=c>integer</td> <td>&nbsp;</td></tr> <tr class=b> <td>PlateNames</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='Font'>XMP Font Struct</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Field Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>ChildFontFiles</td> <td class=c title=' + = List'>string+</td> <td>&nbsp;</td></tr> <tr class=b> <td>Composite</td> <td class=c>boolean</td> <td>&nbsp;</td></tr> <tr> <td>FontFace</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>FontFamily</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>FontFileName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>FontName</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr> <td>FontType</td> <td class=c>string</td> <td>&nbsp;</td></tr> <tr class=b> <td>VersionString</td> <td class=c>string</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='XML'>XMP XML Tags</a></h2> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'dc'</td> <td>dc</td> <td class=c>-</td> <td>--&gt; <a href='XMP.html#dc'>XMP dc Tags</a></td></tr> <tr class=b> <td>'lastUpdate'</td> <td>LastUpdate</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='SVG'>XMP SVG Tags</a></h2> <p>SVG (Scalable Vector Graphics) image tags. By default, only the top-level SVG and Metadata tags are extracted from these images, but all graphics tags may be extracted by setting the Unknown option to 2 (-U on the command line). The SVG tags are not part of XMP as such, but are included with the XMP module for convenience. (see <a href="http://www.w3.org/TR/SVG11/">http://www.w3.org/TR/SVG11/</a>)</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Tag&nbsp;ID</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td>'height'</td> <td>ImageHeight</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'id'</td> <td>ID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'metadataId'</td> <td>MetadataID</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td>'version'</td> <td>SVGVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td>'width'</td> <td>ImageWidth</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised Nov 19, 2015</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/html/TagNames/ZIP.html���������������������������������������������������������000644 �000765 �000024 �00000013037 12527350231 020362� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>ZIP Tags</title> <link rel=stylesheet type='text/css' href='style.css' title='Style'> </head> <body> <h2 class=top>ZIP Tags</h2> <p>The following tags are extracted from ZIP archives. ExifTool also extracts additional meta information from compressed documents inside some ZIP-based files such Office Open XML (DOCX, PPTX and XLSX), Open Document (ODB, ODC, ODF, ODG, ODI, ODP, ODS and ODT), iWork (KEY, PAGES, NUMBERS), Capture One Enhanced Image Package (EIP), Adobe InDesign Markup Language (IDML), and Electronic Publication (EPUB). The ExifTool family 3 groups may be used to organize ZIP tags by embedded document number (ie. the exiftool <code>-g3</code> option).</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index2</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>ZipRequiredVersion</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>ZipBitFlag</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ZipCompression</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = None <br>1 = Shrunk <br>2 = Reduced with compression factor 1 <br>3 = Reduced with compression factor 2 <br>4 = Reduced with compression factor 3 <br>5 = Reduced with compression factor 4 <br>6 = Imploded <br>7 = Tokenized <br>8 = Deflated <br>9 = Enhanced Deflate using Deflate64(tm) <br>10 = Imploded (old IBM TERSE) <br>12 = BZIP2 <br>14 = LZMA (EFS) <br>18 = IBM TERSE (new) <br>19 = IBM LZ77 z Architecture (PFS) <br>96 = JPEG recompressed <br>97 = WavPack compressed <br>98 = PPMd version I, Rev 1</td></tr></table> </td></tr> <tr class=b> <td class=r title='5 = 0x5'>5</td> <td>ZipModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='7 = 0x7'>7</td> <td>ZipCRC</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='9 = 0x9'>9</td> <td>ZipCompressedSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>ZipUncompressedSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='15 = 0xf'>15</td> <td>ZipFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='GZIP'>ZIP GZIP Tags</a></h2> <p>These tags are extracted from GZIP (GNU ZIP) archives, but currently only for the first file in the archive.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='2 = 0x2'>2</td> <td>Compression</td> <td class=c>N</td> <td><span class=s>8 = Deflated</span></td></tr> <tr class=b> <td class=r title='3 = 0x3'>3</td> <td>Flags</td> <td class=c>N</td> <td><span class=s>Bit 0 = Text <br>Bit 1 = CRC16 <br>Bit 2 = ExtraFields <br>Bit 3 = FileName <br>Bit 4 = Comment</span></td></tr> <tr> <td class=r title='4 = 0x4'>4</td> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='8 = 0x8'>8</td> <td>ExtraFlags</td> <td class=c>N</td> <td><span class=s>0 = (none) <br>2 = Maximum Compression <br>4 = Fastest Algorithm</span></td></tr> <tr> <td class=r title='9 = 0x9'>9</td> <td>OperatingSystem</td> <td class=c>N</td> <td><table class=cols><tr> <td>0 = FAT filesystem (MS-DOS, OS/2, NT/Win32) <br>1 = Amiga <br>2 = VMS (or OpenVMS) <br>3 = Unix <br>4 = VM/CMS <br>5 = Atari TOS <br>6 = HPFS filesystem (OS/2, NT) <br>7 = Macintosh <br>8 = Z-System <br>9 = CP/M <br>10 = TOPS-20 <br>11 = NTFS filesystem (NT) <br>12 = QDOS <br>13 = Acorn RISCOS <br>255 = unknown</td></tr></table> </td></tr> <tr class=b> <td class=r title='10 = 0xa'>10</td> <td>ArchivedFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='11 = 0xb'>11</td> <td>Comment</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <h2><a name='RAR'>ZIP RAR Tags</a></h2> <p>These tags are extracted from RAR archive files.</p> <blockquote> <table class=frame><tr><td> <table class=inner cellspacing=1> <tr class=h><th>Index1</th><th>Tag Name</th> <th>Writable</th><th>Values / <span class=n>Notes</span></th></tr> <tr> <td class=r title='0 = 0x0'>0</td> <td>CompressedSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr class=b> <td class=r title='4 = 0x4'>4</td> <td>UncompressedSize</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='8 = 0x8'>8</td> <td>OperatingSystem</td> <td class=c>N</td> <td><span class=s>0 = MS-DOS <br>1 = OS/2 <br>2 = Win32 <br>3 = Unix</span></td></tr> <tr class=b> <td class=r title='13 = 0xd'>13</td> <td>ModifyDate</td> <td class=c>N</td> <td>&nbsp;</td></tr> <tr> <td class=r title='18 = 0x12'>18</td> <td>PackingMethod</td> <td class=c>N</td> <td><table class=cols><tr> <td>0x30 = Stored <br>0x31 = Fastest <br>0x32 = Fast</td><td>&nbsp;&nbsp;</td> <td>0x33 = Normal <br>0x34 = Good Compression <br>0x35 = Best Compression</td></tr></table> </td></tr> <tr class=b> <td class=r title='25 = 0x19'>25</td> <td>ArchivedFileName</td> <td class=c>N</td> <td>&nbsp;</td></tr> </table></td></tr></table></blockquote> <hr> (This document generated automatically by Image::ExifTool::BuildTagLookup) <br><i>Last revised May 26, 2014</i> <p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p> </body> </html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/fmt_files/gpx.fmt��������������������������������������������������������������000644 �000765 �000024 �00000002276 12250727301 017647� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: gpx.fmt # # Description: Example ExifTool print format file to generate a GPX track log # # Usage: exiftool -p gpx.fmt -d %Y-%m-%dT%H:%M:%SZ FILE [...] > out.gpx # # Requires: ExifTool version 8.10 or later # # Revisions: 2010/02/05 - P. Harvey created # # Notes: 1) All input files must contain GPSLatitude and GPSLongitude. # 2) The -fileOrder option may be used to control the order of the # generated track points. #------------------------------------------------------------------------------ #[HEAD]<?xml version="1.0" encoding="utf-8"?> #[HEAD]<gpx version="1.0" #[HEAD] creator="ExifTool $ExifToolVersion" #[HEAD] xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" #[HEAD] xmlns="http://www.topografix.com/GPX/1/0" #[HEAD] xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd"> #[HEAD]<trk> #[HEAD]<number>1</number> #[HEAD]<trkseg> #[BODY]<trkpt lat="$gpslatitude#" lon="$gpslongitude#"> #[BODY] <ele>$gpsaltitude#</ele> #[BODY] <time>$gpsdatetime</time> #[BODY]</trkpt> #[TAIL]</trkseg> #[TAIL]</trk> #[TAIL]</gpx> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/fmt_files/gpx_wpt.fmt����������������������������������������������������������000644 �000765 �000024 �00000002775 12250727301 020545� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: gpx_wpt.fmt # # Description: Example ExifTool print format file to generate GPX waypoints # with pictures # # Usage: exiftool -p gpx_wpt.fmt -d %Y-%m-%dT%H:%M:%SZ FILE [...] > out.gpx # # Requires: ExifTool version 8.10 or later # # Revisons: 2010/03/13 - Peter Grimm created # # Notes: 1) All input files must contain GPSLatitude and GPSLongitude. # 2) The -fileOrder option may be used to control the order of the # generated track points. #------------------------------------------------------------------------------ #[HEAD]<?xml version="1.0" encoding="UTF-8" standalone="no" ?> #[HEAD]<gpx version="1.1" #[HEAD] creator="ExifTool $ExifToolVersion" #[HEAD] xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" #[HEAD] xmlns="http://www.topografix.com/GPX/1/1" #[HEAD] xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"> #[BODY]<wpt lat="$gpslatitude#" lon="$gpslongitude#"> #[BODY] <ele>$gpsaltitude#</ele> #[BODY] <time>$gpsdatetime</time> #[BODY] <name>$filename</name> #[BODY] <link href="$directory/$filename"/> #[BODY] <sym>Scenic Area</sym> #[BODY] <extensions> #[BODY] <gpxx:WaypointExtension xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3"> #[BODY] <gpxx:DisplayMode>SymbolAndName</gpxx:DisplayMode> #[BODY] </gpxx:WaypointExtension> #[BODY] </extensions> #[BODY]</wpt> #[TAIL]</gpx>���Image-ExifTool-10.10/fmt_files/kml.fmt��������������������������������������������������������������000644 �000765 �000024 �00000004421 12250727301 017626� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: kml.fmt # # Description: Example ExifTool print format file for generating a # Google Earth KML file from a collection of geotagged images # # Usage: exiftool -p kml.fmt FILE [...] > out.kml # # Requires: ExifTool version 8.10 or later # # Revisions: 2010/02/05 - P. Harvey created # 2013/02/05 - PH Fixed camera icon to work with new Google Earth # # Notes: 1) All input files must contain GPSLatitude and GPSLongitude. # 2) For Google Earth to be able to find the images, the input # images must be specified using relative paths, and "out.kml" # must stay in the same directory as where the command was run. # 3) Google Earth is picky about the case of the image file extension, # and may not be able to display the image if an upper-case # extension is used. # 4) The -fileOrder option may be used to control the order of the # generated placemarks. #------------------------------------------------------------------------------ #[HEAD]<?xml version="1.0" encoding="UTF-8"?> #[HEAD]<kml xmlns="http://earth.google.com/kml/2.0"> #[HEAD] <Document> #[HEAD] <name>My Photos</name> #[HEAD] <open>1</open> #[HEAD] <Style id="Photo"> #[HEAD] <IconStyle> #[HEAD] <Icon> #[HEAD] <href>http://maps.google.com/mapfiles/kml/pal4/icon38.png</href> #[HEAD] <scale>1.0</scale> #[HEAD] </Icon> #[HEAD] </IconStyle> #[HEAD] </Style> #[HEAD] <Folder> #[HEAD] <name>Waypoints</name> #[HEAD] <open>0</open> #[BODY] <Placemark> #[BODY] <description><![CDATA[<br/><table><tr><td> #[BODY] <img src='$directory/$filename' #[BODY] width='$imagewidth' height='$imageheight'> #[BODY] </td></tr></table>]]></description> #[BODY] <Snippet/> #[BODY] <name>$filename</name> #[BODY] <styleUrl>#Photo</styleUrl> #[BODY] <Point> #[BODY] <altitudeMode>clampedToGround</altitudeMode> #[BODY] <coordinates>$gpslongitude#,$gpslatitude#,0</coordinates> #[BODY] </Point> #[BODY] </Placemark> #[TAIL] </Folder> #[TAIL] </Document> #[TAIL]</kml> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/config_files/convert_regions.config��������������������������������������������000644 �000765 �000024 �00000005702 12506226156 023420� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: convert_regions.config # # Description: User-defined Composite tag definitions to allow conversion of # face regions between Microsoft Windows Live Photo Gallery (WLPG) # and Metadata Working Group (MWG) formats # # Usage: 1) Convert from MP WLPG regions to MWG regions: # # exiftool -config convert_regions.config "-regioninfo<myregion" FILE # # 2) Convert from MWG to WLPG regions: # # exiftool -config convert_regions.config "-regioninfomp<myregionmp" FILE # # Requires: ExifTool version 8.82 or later # # Revisions: 2012/12/27 - P. Harvey Created # 2013/02/20 - PH Don't add ignored MP faces # # References: http://www.metadataworkinggroup.org/specs/ #------------------------------------------------------------------------------ %Image::ExifTool::UserDefined = ( 'Image::ExifTool::Composite' => { # create an MWG RegionInfo structure from a Microsoft RegionInfoMP structure MyRegion => { Require => { 0 => 'RegionInfoMP', 1 => 'ImageWidth', 2 => 'ImageHeight', }, ValueConv => q{ my ($rgn, @newRgns); foreach $rgn (@{$val[0]{Regions}}) { # don't add ignored faces next if $$rgn{PersonDisplayName} eq 'ffffffffffffffff'; my @rect = split /\s*,\s*/, $$rgn{Rectangle}; my %newRgn = ( Area => { X => $rect[0] + $rect[2]/2, Y => $rect[1] + $rect[3]/2, W => $rect[2], H => $rect[3], Unit => 'normalized', }, Name => $$rgn{PersonDisplayName}, Type => 'Face', ); push @newRgns, \%newRgn; } return { AppliedToDimensions => { W => $val[1], H => $val[2], Unit => 'pixel' }, RegionList => \@newRgns, }; }, }, # create a Microsoft RegionInfoMP structure from an MWG RegionInfo structure MyRegionMP => { Require => 'RegionInfo', ValueConv => q{ my ($rgn, @newRgns); foreach $rgn (@{$val[0]{RegionList}}) { my @rect = @{$$rgn{Area}}{'X','Y','W','H'}; $rect[0] -= $rect[2]/2; $rect[1] -= $rect[3]/2; push @newRgns, { PersonDisplayName => $$rgn{Name}, Rectangle => join(', ', @rect), }; } return { Regions => \@newRgns }; }, }, }, ); 1; #end ��������������������������������������������������������������Image-ExifTool-10.10/config_files/example.config����������������������������������������������������000644 �000765 �000024 �00000035035 12546457267 021664� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: ExifTool_config --> ~/.ExifTool_config # # Description: Sample user configuration file for Image::ExifTool # # Notes: This example file shows how to define your own shortcuts and # add new EXIF, IPTC, XMP, PNG, MIE and Composite tags, as well # as how to specify preferred lenses for the LensID tag, and # define new file types and default ExifTool option values. # # Note that unknown tags may be extracted even if they aren't # defined, but tags must be defined to be written. Also note # that it is possible to override an existing tag definition # with a user-defined tag. # # To activate this file, rename it to ".ExifTool_config" and # place it in your home directory or the exiftool application # directory. (On Windows and Mac systems this must be done via # the command line since the GUI's don't allow filenames to begin # with a dot. Use the "rename" command in Windows or "mv" on the # Mac.) This causes ExifTool to automatically load the file when # run. Your home directory is determined by the first defined of # the following environment variables: # # 1. EXIFTOOL_HOME # 2. HOME # 3. HOMEDRIVE + HOMEPATH # 4. (the current directory) # # Alternatively, the -config option of the exiftool application # may be used to load a specific configuration file (note that # this must be the first option on the command line): # # exiftool -config example.config ... # # This example file defines the following 16 new tags as well as # a number of Shortcut and Composite tags: # # 1. EXIF:NewEXIFTag # 2. GPS:GPSPitch # 3. GPS:GPSRoll # 4. IPTC:NewIPTCTag # 5. XMP-xmp:NewXMPxmpTag # 6. XMP-exif:GPSPitch # 7. XMP-exif:GPSRoll # 8. XMP-xxx:NewXMPxxxTag1 # 9. XMP-xxx:NewXMPxxxTag2 # 10. XMP-xxx:NewXMPxxxTag3 # 11. XMP-xxx:NewXMPxxxStruct # 12. PNG:NewPngTag1 # 13. PNG:NewPngTag2 # 14. PNG:NewPngTag3 # 15. MIE-Meta:NewMieTag1 # 16. MIE-Test:NewMieTag2 # # For detailed information on the definition of tag tables and # tag information hashes, see lib/Image/ExifTool/README. #------------------------------------------------------------------------------ # Shortcut tags are used when extracting information to simplify # commonly used commands. They can be used to represent groups # of tags, or to provide an alias for a tag name. %Image::ExifTool::UserDefined::Shortcuts = ( MyShortcut => ['exif:createdate','exposuretime','aperture'], MyAlias => 'FocalLengthIn35mmFormat', ); # NOTE: All tag names used in the following tables are case sensitive. # The %Image::ExifTool::UserDefined hash defines new tags to be added # to existing tables. %Image::ExifTool::UserDefined = ( # All EXIF tags are added to the Main table, and WriteGroup is used to # specify where the tag is written (default is ExifIFD if not specified): 'Image::ExifTool::Exif::Main' => { # Example 1. EXIF:NewEXIFTag 0xd000 => { Name => 'NewEXIFTag', Writable => 'int16u', WriteGroup => 'IFD0', }, # add more user-defined EXIF tags here... }, # the Geotag feature writes these additional GPS tags if available: 'Image::ExifTool::GPS::Main' => { # Example 2. GPS:GPSPitch 0xd000 => { Name => 'GPSPitch', Writable => 'rational64s', }, # Example 3. GPS:GPSRoll 0xd001 => { Name => 'GPSRoll', Writable => 'rational64s', }, }, # IPTC tags are added to a specific record type (eg. application record): # (Note: IPTC tag ID's are limited to the range 0-255) 'Image::ExifTool::IPTC::ApplicationRecord' => { # Example 4. IPTC:NewIPTCTag 160 => { Name => 'NewIPTCTag', Format => 'string[0,16]', }, # add more user-defined IPTC ApplicationRecord tags here... }, # XMP tags may be added to existing namespaces: 'Image::ExifTool::XMP::xmp' => { # Example 5. XMP-xmp:NewXMPxmpTag NewXMPxmpTag => { Groups => { 2 => 'Author' } }, # add more user-defined XMP-xmp tags here... }, # special Geotag tags for XMP-exif: 'Image::ExifTool::XMP::exif' => { # Example 6. XMP-exif:GPSPitch GPSPitch => { Writable => 'rational', Groups => { 2 => 'Location' } }, # Example 7. XMP-exif:GPSRoll GPSRoll => { Writable => 'rational', Groups => { 2 => 'Location' } }, }, # new XMP namespaces (eg. xxx) must be added to the Main XMP table: 'Image::ExifTool::XMP::Main' => { # namespace definition for examples 8 to 11 xxx => { # <-- must be the same as the NAMESPACE prefix SubDirectory => { TagTable => 'Image::ExifTool::UserDefined::xxx', # (see the definition of this table below) }, }, # add more user-defined XMP namespaces here... }, # new PNG tags are added to the PNG::TextualData table: 'Image::ExifTool::PNG::TextualData' => { # Example 12. PNG:NewPngTag1 NewPngTag1 => { }, # Example 13. PNG:NewPngTag2 NewPngTag2 => { }, # Example 14. PNG:NewPngTag3 NewPngTag3 => { }, }, # add a new MIE tag (NewMieTag1) and group (MIE-Test) to MIE-Meta # (Note: MIE group names must NOT end with a number) 'Image::ExifTool::MIE::Meta' => { # Example 15. MIE-Meta:NewMieTag1 NewMieTag1 => { Writable => 'rational64u', Units => [ 'cm', 'in' ], }, # new MIE "Test" group for example 16 Test => { SubDirectory => { TagTable => 'Image::ExifTool::UserDefined::MIETest', DirName => 'MIE-Test', }, }, }, # Composite tags are added to the Composite table: 'Image::ExifTool::Composite' => { # Composite tags are unique: The Require/Desire elements specify # tags that must/may exist, and the keys of these hashes are used as # indices in the @val array of the ValueConv expression to access # the numerical (-n) values of these tags. All Require'd tags must # exist for the Composite tag to be evaluated. If no Require'd tags # are specified, then at least one of the Desire'd tags must exist. # See the Composite table in Image::ExifTool::Exif for more examples, # and lib/Image/ExifTool/README for all of the details. BaseName => { Require => { 0 => 'FileName', }, # remove the extension from FileName ValueConv => '$val[0] =~ /(.*)\./ ? $1 : $val[0]', }, # the next few examples demonstrate simplifications which may be # used if only one tag is Require'd or Desire'd: # 1) the Require lookup may be replaced with a simple tag name # 2) "$val" may be used to represent "$val[0]" in the expression FileExtension => { Require => 'FileName', ValueConv => '$val=~/\.([^.]*)$/; $1', }, # override CircleOfConfusion tag to use D/1750 instead of D/1440 CircleOfConfusion => { Require => 'ScaleFactor35efl', Groups => { 2 => 'Camera' }, ValueConv => 'sqrt(24*24+36*36) / ($val * 1750)', # an optional PrintConv may be used to format the value PrintConv => 'sprintf("%.3f mm",$val)', }, # generate a description for this file type FileTypeDescription => { Require => 'FileType', ValueConv => 'GetFileType($val,1) || $val', }, # calculate physical image size based on resolution PhysicalImageSize => { Require => { 0 => 'ImageWidth', 1 => 'ImageHeight', 2 => 'XResolution', 3 => 'YResolution', 4 => 'ResolutionUnit', }, ValueConv => '$val[0]/$val[2] . " " . $val[1]/$val[3]', # (the @prt array contains print-formatted values) PrintConv => 'sprintf("%.1fx%.1f $prt[4]", split(" ",$val))', }, # [advanced] select largest JPEG preview image BigImage => { Groups => { 2 => 'Preview' }, Desire => { 0 => 'JpgFromRaw', 1 => 'PreviewImage', 2 => 'OtherImage', # (DNG and A100 ARW may be have 2 PreviewImage's) 3 => 'PreviewImage (1)', }, # ValueConv may also be a code reference # Inputs: 0) reference to list of values, 1) ExifTool object ValueConv => sub { my $val = shift; my ($image, $bigImage, $len, $bigLen); foreach $image (@$val) { next unless ref $image eq 'SCALAR'; # check for JPEG image (or "Binary data" if -b not used) next unless $$image =~ /^(\xff\xd8\xff|Binary data (\d+))/; $len = $2 || length $$image; # get image length # save largest image next if defined $bigLen and $bigLen >= $len; $bigLen = $len; $bigImage = $image; } return $bigImage; }, }, # **** ADD ADDITIONAL COMPOSITE TAG DEFINITIONS HERE **** }, ); # This is a basic example of the definition for a new XMP namespace. # This table is referenced through a SubDirectory tag definition # in the %Image::ExifTool::UserDefined definition above. # The namespace prefix for these tags is 'xxx', which corresponds to # an ExifTool family 1 group name of 'XMP-xxx'. %Image::ExifTool::UserDefined::xxx = ( GROUPS => { 0 => 'XMP', 1 => 'XMP-xxx', 2 => 'Image' }, NAMESPACE => { 'xxx' => 'http://ns.myname.com/xxx/1.0/' }, WRITABLE => 'string', # Example 8. XMP-xxx:NewXMPxxxTag1 # - replace "NewXMPxxxTag1" with your own tag name (eg. "MyTag") NewXMPxxxTag1 => { Writable => 'lang-alt' }, # Example 9. XMP-xxx:NewXMPxxxTag2 NewXMPxxxTag2 => { Groups => { 2 => 'Author' } }, # Example 10. XMP-xxx:NewXMPxxxTag3 NewXMPxxxTag3 => { List => 'Bag' }, # Example 11. XMP-xxx:NewXMPxxxStruct # - example structured XMP tag NewXMPxxxStruct => { # the "Struct" entry defines the structure fields Struct => { # optional namespace prefix and URI for structure fields # (required only if different than NAMESPACE above) NAMESPACE => { 'test' => 'http://x.y.z/test/' }, # optional structure name (used for warning messages only) STRUCT_NAME => 'MyStruct', # optional rdf:type property for the structure TYPE => 'http://x.y.z/test/xystruct', # structure field definitions (very similar to tag definitions) X => { Writable => 'integer' }, Y => { Writable => 'integer' }, # a nested structure... Things => { List => 'Bag', Struct => { NAMESPACE => { thing => 'http://x.y.z/thing/' }, What => { }, Where => { }, }, }, }, List => 'Seq', # structures may also be elements of a list }, # Each field in the structure has an automatically-generated # corresponding flattened tag with an ID that is the concatenation # of the original structure tag ID and the field name (after # capitalizing the first letter of the field name if necessary). # The Name and/or Description of these flattened tags may be changed # if desired, but all other tag properties are taken from the # structure field definition. When this is done, the "Flat" flag # must also be set in the tag definition. For example: NewXMPxxxStructX => { Name => 'SomeOtherName', Flat => 1 }, ); # Adding a new MIE group requires a few extra definitions use Image::ExifTool::MIE; %Image::ExifTool::UserDefined::MIETest = ( %Image::ExifTool::MIE::tableDefaults, # default MIE table entries GROUPS => { 0 => 'MIE', 1 => 'MIE-Test', 2 => 'Document' }, WRITE_GROUP => 'MIE-Test', # Example 16. MIE-Test:NewMieTag2 NewMieTag2 => { }, # new user-defined tag in MIE-Test group ); # A special 'Lenses' list can be defined to give priority to specific lenses # in the logic to determine a lens model for the Composite:LensID tag @Image::ExifTool::UserDefined::Lenses = ( 'Sigma AF 10-20mm F4-5.6 EX DC', 'Tokina AF193-2 19-35mm f/3.5-4.5', ); # User-defined file types to recognize %Image::ExifTool::UserDefined::FileTypes = ( XXX => { # <-- the extension of the new file type (case insensitive) # BaseType specifies the format upon which this file is based. # If BaseType is defined, then the file will be fully supported, # and in this case the Magic pattern should not be defined BaseType => 'TIFF', MIMEType => 'image/x-xxx', Description => 'My XXX file type', }, YYY => { # without BaseType, the file will be recognized but not supported Magic => '0123abcd', # regular expression to match at start of file MIMEType => 'application/test', Description => 'My YYY file type', }, ZZZ => { # if neither BaseType nor Magic are defined, the file will be # recognized by extension only Descripton => 'My ZZZ file type', }, ); # Specify default ExifTool option values # (see the Options function documentation for available options) %Image::ExifTool::UserDefined::Options = ( CoordFormat => '%.6f', # change default GPS coordinate format Duplicates => 1, # make -a default for the exiftool app GeoMaxHDOP => 4, # ignore GPS fixes with HDOP > 4 SystemTags => 1, # extract additional File System tags ); #------------------------------------------------------------------------------ 1; #end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/config_files/photoshop_paths.config��������������������������������������������000644 �000765 �000024 �00000004042 12522660346 023431� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: photoshop_paths.config # # Description: This config file generates user-defined tags for Photoshop # paths, and may be used to extract path names or copy path # information from one file to another. # # An "AllPaths" shortcut tag is also provided represent all # Photoshop path tags. This shortcut must be used when copying # because these tags are marked as "Protected" so they won't be # copied by default. # # Note: Print conversion must be disabled to be able to copy these tags # (via either the -n option, or by adding a "#" to the tag name, # eg. "-tagsfromfile SRC -allpaths#"). # # Usage: # # 1) Extract Photoshop path names: # # exiftool -config photoshop_paths.config -allpaths FILE # # 2) Copy all Photoshop paths from one file (SRC) to another (DST): # # exiftool -config photoshop_paths.config -tagsfromfile SRC -allpaths# DST # # Requires: ExifTool version 9.95 or later # # Revisions: 2015/05/07 - P. Harvey Created # # References: http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,1621.0.html # http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3910.0.html #------------------------------------------------------------------------------ %Image::ExifTool::Shortcuts::UserDefined = ( # create "AllPaths" shortcut for all Photoshop path tags AllPaths => [ map { sprintf "Path%x", $_ } (0x7d0 .. 0xbb5), ], ); %Image::ExifTool::UserDefined = ( 'Image::ExifTool::Photoshop::Main' => { # generate tags for each of the 998 possible Photoshop paths map { $_ => { Name => sprintf('Path%x', $_), Description => sprintf('Path %x', $_), Flags => [ qw(Writable Protected Binary ConvertBinary SetResourceName) ], PrintConv => '$$val =~ m{/#(.*?)#/$}s ? $1 : "<none>"', } } (0x7d0 .. 0xbb5), }, ); 1; #end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/config_files/picasa_faces.config�����������������������������������������������000644 �000765 �000024 �00000040342 12650434566 022620� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: picasa_faces.config # # Description: User-defined Composite tag definitions to convert face regions # in .picasa.ini files to MWG region tags (Metadata Working Group # region, used by Picasa) and MP region tags (used by Microsoft # Photo Library). # # Tag definitions and examples: # # PicasaToMWGRegion # This will create the MWG region tag but will filter out the regions # that are still unnamed in Picasa. Picasa defaults to naming these # regions 'ffffffffffffffff' but normally will not save these to file. # Example: # exiftool -config picasa_faces.config "-RegionInfo<PicasaToMWGRegion" FILE # # PicasaToMPRegion # This will create the MP region tag but will filter out the regions that # are still unnamed in Picasa. Picasa defaults to naming these regions # 'ffffffffffffffff' but normally will not save these to file. # Example: # exiftool -config picasa_faces.config "-RegionInfoMP<PicasaToMPRegion" FILE # # PicasaRegionNames # Returns a list of the region names associated with the file. This # allows copying of the region names to XMP:Subject and/or IPTC:Keywords. # It also allows checking to see if regions need to be updated. # Example: # exiftool -config picasa_faces.config "-XMP:Subject<PicasaRegionNames" FILE # # PicasaToMWGRegionUnfiltered # This will create the MWG region tag. This version does not filter out # the unnamed regions. Picasa normally will filter out unnamed regions # when it saves regions in the file. # Example: # exiftool -config picasa_faces.config "-RegionInfo<PicasaToMWGRegionUnfiltered" FILE # # PicasaToMPRegionUnfiltered # This will create the MP region tag. This version does not filter out # the unnamed regions. Picasa normally will filter out unnamed regions # when it saves regions in the file. # Example: # exiftool -config picasa_faces.config "-RegionInfoMP<PicasaToMPRegionUnfiltered" FILE # # Notes: The face names are loaded from the Picasa contacts file, which # defaults to: # # C:/Users/MainUser/AppData/Local/PicasaData/Google/Picasa2/contacts/contacts.xml # # The default contacts file may be changed by editing the value # of $contactXML below, or on the command line with ExifTool 9.90 # or later via the -userParam option, eg: # -userparam PicasaContactsFile=/path/to/contacts.xml # # Requires: ExifTool version 8.82 or later (9.90 or later for -userparam) # # Revisions: 2015/03/07 - Bryan K. Williams (aka StarGeek) Created # 2015/03/12 - PH Minor changes, optimizations and reformatting # 2015/05/11 - BKW Fix bug where Picasa writes region data for # rotated NEF and CR2 images as if the orientation # is not rotated. # 2015/05/12 - PH Minor code tweaks # 2015/10/26 - BKW Round off area sizes to 7 decimal places # 2016/01/18 - BKW Improved rounding algorithm # # References: http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,6354.0.html #------------------------------------------------------------------------------ # Picasa contacts file name my $contactXML = 'C:/Users/MainUser/AppData/Local/PicasaData/Google/Picasa2/contacts/contacts.xml'; # local variables my $lastIniFile = ''; # path of last .picasa.ini file loaded my $lastContactFile = ''; # path of last contacts.xml file loaded # raw file types that need additional processing to get regions correct my %isRawFile = map { $_ => 1 } qw( 3FR ARW CR2 CRW CS1 DCR DNG EIP ERF IIQ K25 KDC MEF MOS MRW NEF NRW ORF PEF RAF RAW RW2 RWL SR2 SRF SRW X3F), 'Canon 1D RAW'; my %contactHash; # lookup for loaded contacts.xml entries my %fileHash; # lookup for loaded .picasa.ini entries #------------------------------------------------------------------------------ # Load Picasa's contacts.xml and .picasa.ini files. # Inputs: 0) ExifTool object reference, 1) .picasa.ini directory # Returns: 1 if files were loaded and parsed, undef on error # Notes: If file has already been loaded, it isn't reloaded sub LoadPicasaFiles($$) { local (*CONTACTS, *INI); my ($et, $iniDir) = @_; # check ExifTool version to see if there might be # a command line setting for the contact file my $contactFile = ($Image::ExifTool::VERSION >= 9.89 and defined($et->Options(UserParam => 'PicasaContactsFile'))) ? $et->Options(UserParam => 'PicasaContactsFile') : $contactXML; # load Picasa contacts.xml file unless done already unless ($contactFile eq $lastContactFile) { $lastContactFile = $contactFile; undef %contactHash; # Picasa's default setting for unnamed faces. $contactHash{'ffffffffffffffff'} = 'unnamed'; if (open(CONTACTS, $contactFile)) { require Image::ExifTool::HTML; while (<CONTACTS>) { /name="(.*?)"/ or next; my $name = $1; /id="([a-f0-9]+)"/ or next; my $id = $1; $contactHash{$id} = Image::ExifTool::HTML::UnescapeHTML($name); } close(CONTACTS); } else { local $SIG{'__WARN__'} = undef; # stop ExifTool from catching the warning warn "Error reading contacts file $contactFile\n"; } } # load .picasa.ini file from the specified directory my $iniFile = "$iniDir/.picasa.ini"; if ($iniFile eq $lastIniFile) { return %fileHash ? 1 : undef; } $lastIniFile = $iniFile; open(INI, $iniFile) or return undef; my $section = ''; while (<INI>) { # Process New Section /^\s*\[(.+)\][\n\r]*$/ and $section = $1, next; # process entry (all we care about are the "faces" lines) /^faces=(.*)$/ or next; my @temp = split /;/, $1; foreach (@temp) { /rect64\(([\da-f]{1,16})\),([\da-f]{1,16})/ or next; # the string in parens after "rect64" is a 64 bit number in hex, # but Picasa doesn't add leading zeroes, so the length of the string # cannot be assumed to be 16 bytes. Handle this as two 32-bit numbers # for compatibility with 32-bit systems. my $hi = hex(substr($1, 0, -8)); my $lo = hex(substr($1, -8)); my $x0 = ($hi >> 16) /65535; my $y0 = ($hi & 0xffff)/65535; my $x1 = ($lo >> 16) /65535; my $y1 = ($lo & 0xffff)/65535; push @{ $fileHash{$section} }, { ContactID => $2, # round to 8 decimals (Picasa will ignore regions with greater than 10 decimals) X => int($x0*100000000+.5)/100000000, Y => int($y0*100000000+.5)/100000000, W => int(($x1 - $x0)*100000000+.5)/100000000, H => int(($y1 - $y0)*100000000+.5)/100000000, }; } } close(INI); return %fileHash ? 1 : undef; } #------------------------------------------------------------------------------ # Rotate region to specified orientation (for RAW file types only) # Input: 0) rectangle array ref (x,y,w,h), 1) EXIF orientation value, 2) file type sub RotateRegion($$$) { my ($rect, $orientation, $fileType) = @_; if ($orientation and $fileType and $isRawFile{$fileType}) { my ($x,$y,$w,$h) = @$rect; if ($orientation == 8) { # CW 90 @$rect = (1-$h-$y, $x, $h, $w); } elsif ($orientation == 3) { # CW 180 @$rect = (1-$x-$w, 1-$y-$h, $w, $h); } elsif ($orientation == 6) { # CW 270 @$rect = ($y, 1-$x-$w, $h, $w); } } } #------------------------------------------------------------------------------ # User-defined tag definitions # %Image::ExifTool::UserDefined = ( 'Image::ExifTool::Composite' => { # # Versions that filter out unnamed regions (ContactID=ffffffffffffffff) # PicasaToMWGRegion => { Require => { 0 => 'Directory', 1 => 'FileName', 2 => 'ImageWidth', 3 => 'ImageHeight', }, Desire => { 4 => 'Orientation', 5 => 'FileType', }, ValueConv => sub { my ($val, $et) = @_; LoadPicasaFiles($et, $$val[0]) or return undef; # load contacts.xml and Picasa.ini my $filename = $$val[1]; my @regList; # convert to local variables for readability, and make # sure there is a region associated with the current file my $contactHashRef = \%contactHash; my $tempArrayRef = $fileHash{$filename} or return undef; foreach my $tempHash (@$tempArrayRef) { next if $$tempHash{ContactID} eq 'ffffffffffffffff'; my $name = $$contactHashRef{$$tempHash{ContactID}}; next unless defined $name; my @rect = @$tempHash{'X','Y','W','H'}; RotateRegion(\@rect, $$val[4], $$val[5]); push @regList, { Area => { X => $rect[0] + $rect[2] / 2, Y => $rect[1] + $rect[3] / 2, W => $rect[2], H => $rect[3], Unit => 'normalized', }, Name => $name, Type => 'Face', }; } # make sure a region exists, otherwise return undef return @regList ? { AppliedToDimensions => { W => $$val[2], H => $$val[3], Unit => 'pixel' }, RegionList => \@regList, } : undef; }, }, PicasaToMPRegion => { Require => { 0 => 'Directory', 1 => 'FileName', }, Desire => { 2 => 'Orientation', 3 => 'FileType', }, ValueConv => sub { my ($val, $et) = @_; LoadPicasaFiles($et, $$val[0]) or return undef; # load contacts.xml and Picasa.ini my $filename = $$val[1]; my @regList; # convert to local variables for readability, and make # sure there is a region associated with the current file my $contactHashRef = \%contactHash; my $tempArrayRef = $fileHash{$filename} or return undef; foreach my $tempHash (@$tempArrayRef) { next if $$tempHash{ContactID} eq 'ffffffffffffffff'; my $name = $$contactHashRef{$$tempHash{ContactID}}; next unless defined $name; my @rect = @$tempHash{'X','Y','W','H'}; RotateRegion(\@rect, $$val[2], $$val[3]); push @regList, { PersonDisplayName => $name, Rectangle => join(', ', @rect), }; } # make sure a region exists, otherwise return undef return @regList ? { Regions => \@regList } : undef; }, }, PicasaRegionNames => { Require => { 0 => 'Directory', 1 => 'FileName', }, ValueConv => sub { my ($val, $et) = @_; LoadPicasaFiles($et, $$val[0]) or return undef; # load contacts.xml and Picasa.ini my $filename = $$val[1]; my @regList; # convert to local variables for readability, and make # sure there is a region associated with the current file my $contactHashRef = \%contactHash; my $tempArrayRef = $fileHash{$filename} or return undef; foreach my $tempHash (@$tempArrayRef) { next if $$tempHash{ContactID} eq 'ffffffffffffffff'; my $name = $$contactHashRef{$$tempHash{ContactID}}; push @regList, $name if defined $name; } # make sure a region exists, otherwise return undef return @regList ? \@regList : undef; }, }, # # Versions that do not filter out unnamed regions (ContactID=ffffffffffffffff) # Picasa normally does not add these regions when it saves names to the file. # PicasaToMWGRegionUnfiltered => { Require => { 0 => 'Directory', 1 => 'FileName', 2 => 'ImageWidth', 3 => 'ImageHeight', }, Desire => { 4 => 'Orientation', 5 => 'FileType', }, ValueConv => sub { my ($val, $et) = @_; LoadPicasaFiles($et, $$val[0]) or return undef; # load contacts.xml and Picasa.ini my $filename = $$val[1]; my @regList; # convert to local variables for readability, and make # sure there is a region associated with the current file my $contactHashRef = \%contactHash; my $tempArrayRef = $fileHash{$filename} or return undef; foreach my $tempHash (@$tempArrayRef) { my @rect = @$tempHash{'X','Y','W','H'}; RotateRegion(\@rect, $$val[4], $$val[5]); push @regList, { Area => { X => $rect[0] + $rect[2] / 2, Y => $rect[1] + $rect[3] / 2, W => $rect[2], H => $rect[3], Unit => 'normalized', }, Name => $$contactHashRef{$$tempHash{ContactID}} || 'unnamed', Type => 'Face', }; } # make sure a region exists, otherwise return undef return @regList ? { AppliedToDimensions => { W => $$val[2], H => $$val[3], Unit => 'pixel' }, RegionList => \@regList, } : undef; }, }, PicasaToMPRegionUnfiltered => { Require => { 0 => 'Directory', 1 => 'FileName', }, Desire => { 2 => 'Orientation', 3 => 'FileType', }, ValueConv => sub { my ($val, $et) = @_; LoadPicasaFiles($et, $$val[0]) or return undef; # load contacts.xml and Picasa.ini my $filename = $$val[1]; my @regList; # convert to local variables for readability, and make # sure there is a region associated with the current file my $contactHashRef = \%contactHash; my $tempArrayRef = $fileHash{$filename} or return undef; foreach my $tempHash (@$tempArrayRef) { my @rect = @$tempHash{'X','Y','W','H'}; RotateRegion(\@rect, $$val[2], $$val[3]); push @regList, { PersonDisplayName => $$contactHashRef{$$tempHash{ContactID}} || 'unnamed', Rectangle => join(', ', @rect), } } # make sure a region exists, otherwise return undef return @regList ? { Regions => \@regList } : undef; }, }, }, ); #------------------------------------------------------------------------------ 1; #end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/arg_files/exif2iptc.args�������������������������������������������������������000644 �000765 �000024 �00000002245 12213342255 021073� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: exif2iptc.args # # Description: Tag name translations for converting EXIF to IPTC # # Usage: exiftool -tagsFromFile SRCFILE -@ exif2iptc.args DSTFILE # # Requires: ExifTool version 6.51 or later # # Revisions: 2011/09/13 - P. Harvey Created # # Notes: 1) IPTC requires a timezone but EXIF does not support one, so # the local timezone is assumed when writing the IPTC times # # 2) These arguments will not delete IPTC tags which are missing # from the EXIF. The IPTC tags should be deleted beforehand if # required. #------------------------------------------------------------------------------ -IPTC:By-line < EXIF:Artist -IPTC:CopyrightNotice < EXIF:Copyright -IPTC:Caption-Abstract < EXIF:ImageDescription # the inverse IPTC date and time conversions automagically pull the # appropriate date or time part out of the EXIF date/time value -IPTC:DateCreated < EXIF:DateTimeOriginal -IPTC:TimeCreated < EXIF:DateTimeOriginal -IPTC:DigitalCreationDate < EXIF:CreateDate -IPTC:DigitalCreationTime < EXIF:CreateDate # end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/arg_files/exif2xmp.args��������������������������������������������������������000644 �000765 �000024 �00000003704 12454763447 020762� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: exif2xmp.args # # Description: Tag name translations for converting EXIF to XMP # # Usage: exiftool -tagsFromFile SRCFILE -@ exif2xmp.args DSTFILE # # Requires: ExifTool version 8.60 or later # # Revisions: 2009/01/20 - P. Harvey Created # 2011/06/22 - PH Copy flash information via Composite:Flash # 2013/06/12 - PH Additions for the Exif 2.3 for XMP spec # 2015/01/12 - PH Avoid copying to non-standard namespaces # # References: http://www.metadataworkinggroup.org/specs/ # # Notes: 1) The first three arguments copy most of the EXIF and GPS tags to # XMP-exif/XMP-tiff, and the remaining arguments handle tags # which have different names and/or formats in EXIF and XMP. # # 2) These arguments will not delete XMP tags which are missing # from the EXIF. The XMP tags should be deleted beforehand if # required. #------------------------------------------------------------------------------ -XMP-exif:all < EXIF:all -XMP-exifEX:all < EXIF:all -XMP-tiff:all < EXIF:all -XMP-dc:Description < EXIF:ImageDescription # overwrite date/time values to include sub-second information if available -XMP-photoshop:DateCreated < EXIF:DateTimeOriginal -XMP-photoshop:DateCreated < Composite:SubSecDateTimeOriginal -XMP-xmp:CreateDate < EXIF:CreateDate -XMP-xmp:CreateDate < Composite:SubSecCreateDate -XMP-xmp:ModifyDate < EXIF:ModifyDate -XMP-xmp:ModifyDate < Composite:SubSecModifyDate -XMP-xmp:CreatorTool < EXIF:Software -XMP-dc:Rights < EXIF:Copyright -XMP-dc:Creator < EXIF:Artist # XMP flash information is translated by the Composite Flash tag -Composite:Flash < EXIF:Flash # overwrite GPS tags which have different formats in XMP -XMP:GPSLatitude < Composite:GPSLatitude -XMP:GPSLongitude < Composite:GPSLongitude -XMP:GPSDateTime < Composite:GPSDateTime # end ������������������������������������������������������������Image-ExifTool-10.10/arg_files/gps2xmp.args���������������������������������������������������������000644 �000765 �000024 �00000001743 12213342156 020600� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: gps2xmp.args # # Description: Argument file for copying GPS information from EXIF to XMP # # Usage: exiftool -tagsFromFile SRCFILE -@ gps2xmp.args DSTFILE # # Requires: ExifTool version 6.75 or later # # Revisions: 2009/01/09 - P. Harvey Created # # Notes: 1) Most of the GPS tags are copied by the first argument, but # the XMP GPS coordinate and date/time tags are composites of # more than one EXIF GPS tag, so they are handled separately. # # 2) These arguments will not delete XMP tags which are missing # from the GPS. The XMP tags should be deleted beforehand if # required. #------------------------------------------------------------------------------ -XMP:all < GPS:all -XMP:GPSLatitude < Composite:GPSLatitude -XMP:GPSLongitude < Composite:GPSLongitude -XMP:GPSDateTime < Composite:GPSDateTime # end �����������������������������Image-ExifTool-10.10/arg_files/iptc2exif.args�������������������������������������������������������000644 �000765 �000024 �00000001506 12213342125 021066� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: iptc2exif.args # # Description: Tag name translations for converting IPTC to EXIF # # Usage: exiftool -tagsFromFile SRCFILE -@ iptc2exif.args DSTFILE # # Requires: ExifTool version 7.98 or later # # Revisions: 2011/09/13 - P. Harvey Created # # Notes: These arguments will not delete EXIF tags which are missing # from the IPTC. The EXIF tags should be deleted beforehand if # required. #------------------------------------------------------------------------------ -EXIF:Artist < IPTC:By-line -EXIF:Copyright < IPTC:CopyrightNotice -EXIF:ImageDescription < IPTC:Caption-Abstract -EXIF:DateTimeOriginal < Composite:DateTimeCreated -EXIF:CreateDate < Composite:DigitalCreationDateTime # end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/arg_files/iptc2xmp.args��������������������������������������������������������000644 �000765 �000024 �00000005123 12213342053 020736� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: iptc2xmp.args # # Description: Tag name translations for converting from IPTC to XMP # # Usage: exiftool -tagsFromFile SRCFILE -@ iptc2xmp.args DSTFILE # # Requires: ExifTool version 7.45 or later # # Revisions: 2005/05/14 - P. Harvey Created # 2008/03/04 - PH Changed Location translation and added # IntellectualGenre and SubjectCode # 2008/09/30 - PH Added writing of Photoshop:IPTCDigest # 2009/01/20 - PH Updated to conform with MWG spec # 2009/10/21 - PH Write XMP-xmp:CreateDate as per MWG 1.01 spec # # References: http://www.iptc.org/IPTC4XMP/ # http://www.iptc.org/IIM/ # http://www.adobe.com/products/xmp/pdfs/xmpspec.pdf # http://www.metadataworkinggroup.org/specs/ # # Notes: 1) Also updates Photoshop:IPTCDigest as per MWG recommendation. # # 2) These arguments will not delete XMP tags which are missing # from the IPTC. The XMP tags should be deleted beforehand if # required. #------------------------------------------------------------------------------ -XMP-dc:Creator < IPTC:By-line -XMP-dc:Description < IPTC:Caption-Abstract -XMP-dc:Rights < IPTC:CopyrightNotice -XMP-dc:Subject < IPTC:Keywords -XMP-dc:Title < IPTC:ObjectName -XMP-photoshop:AuthorsPosition < IPTC:By-lineTitle -XMP-photoshop:CaptionWriter < IPTC:Writer-Editor -XMP-photoshop:Category < IPTC:Category -XMP-photoshop:City < IPTC:City -XMP-photoshop:Country < IPTC:Country-PrimaryLocationName -XMP-photoshop:Credit < IPTC:Credit -XMP-photoshop:DateCreated < IPTC:DateCreated # overwrite XMP DateCreated to include date and time if available -XMP-photoshop:DateCreated < Composite:DateTimeCreated -XMP-photoshop:Headline < IPTC:Headline -XMP-photoshop:Instructions < IPTC:SpecialInstructions -XMP-photoshop:Source < IPTC:Source -XMP-photoshop:State < IPTC:Province-State -XMP-photoshop:SupplementalCategories < IPTC:SupplementalCategories -XMP-photoshop:TransmissionReference < IPTC:OriginalTransmissionReference -XMP-photoshop:Urgency < IPTC:Urgency -XMP-iptcCore:CountryCode < IPTC:Country-PrimaryLocationCode -XMP-iptcCore:Location < IPTC:Sub-location -XMP-xmp:CreateDate < IPTC:DigitalCreationDate -XMP-xmp:CreateDate < Composite:DigitalCreationDateTime # these tags are not free-form text, and may need special handling: #-XMP-iptcCore:IntellectualGenre < IPTC:ObjectAttributeReference #-XMP-iptcCore:SubjectCode < IPTC:SubjectReference -Photoshop:IPTCDigest=new # end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/arg_files/iptcCore.args��������������������������������������������������������000644 �000765 �000024 �00000012645 12515507304 020756� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: iptcCore.args # # Description: ExifTool arguments for IPTC Core and Extension tags # # Usage: exiftool -@ iptcCore.args FILE # # Requires: ExifTool version 8.44 or later # # Revisions: 2011/12/28 - P. Harvey Created (IPTC Core version 1.1) # 2015/04/21 - PH Updated to IPTC Extension version 1.2 # # References: http://www.iptc.org/IPTC4XMP/ # # Notes: Both flattened and structured tags are included #------------------------------------------------------------------------------ # # dc schema # -XMP-dc:Creator -XMP-dc:Description -XMP-dc:Rights -XMP-dc:Subject -XMP-dc:Title # # photoshop schema # -XMP-photoshop:AuthorsPosition -XMP-photoshop:CaptionWriter -XMP-photoshop:City -XMP-photoshop:Country -XMP-photoshop:Credit -XMP-photoshop:DateCreated -XMP-photoshop:Headline -XMP-photoshop:Instructions -XMP-photoshop:Source -XMP-photoshop:State -XMP-photoshop:TransmissionReference # # xmpRights schema # -XMP-xmpRights:UsageTerms # # Iptc4xmpCore schema # -XMP-iptcCore:CountryCode # ContactInfo struct -XMP-iptcCore:CreatorContactInfo -XMP-iptcCore:CreatorAddress -XMP-iptcCore:CreatorCity -XMP-iptcCore:CreatorCountry -XMP-iptcCore:CreatorPostalCode -XMP-iptcCore:CreatorRegion -XMP-iptcCore:CreatorWorkEmail -XMP-iptcCore:CreatorWorkTelephone -XMP-iptcCore:CreatorWorkURL -XMP-iptcCore:IntellectualGenre -XMP-iptcCore:Location -XMP-iptcCore:Scene -XMP-iptcCore:SubjectCode # # Iptc4xmpExt schema # -XMP-iptcExt:AdditionalModelInformation # CVTermDetails struct -XMP-iptcExt:AboutCvTerm -XMP-iptcExt:AboutCvTermCvId -XMP-iptcExt:AboutCvTermId -XMP-iptcExt:AboutCvTermName -XMP-iptcExt:AboutCvTermRefinedAbout # ArtworkOrObjectDetails struct -XMP-iptcExt:ArtworkOrObject -XMP-iptcExt:ArtworkCopyrightNotice -XMP-iptcExt:ArtworkCreator -XMP-iptcExt:ArtworkDateCreated -XMP-iptcExt:ArtworkSource -XMP-iptcExt:ArtworkSourceInventoryNo -XMP-iptcExt:ArtworkTitle -XMP-iptcExt:ArtworkCopyrightOwnerName -XMP-iptcExt:ArtworkCopyrightOwnerID -XMP-iptcExt:ArtworkLicensorName -XMP-iptcExt:ArtworkLicensorID -XMP-iptcExt:ArtworkCreatorID -XMP-iptcExt:ArtworkCircaDateCreated -XMP-iptcExt:ArtworkStylePeriod -XMP-iptcExt:ArtworkSourceInvURL -XMP-iptcExt:ArtworkSContentDescription -XMP-iptcExt:ArtworkContributionDescription -XMP-iptcExt:ArtworkPhysicalDescription -XMP-iptcExt:ControlledVocabularyTerm -XMP-iptcExt:DigitalImageGUID -XMP-iptcExt:DigitalSourcefileType -XMP-iptcExt:DigitalSourceType # EEREDetails struct -XMP-iptcExt:EmbdEncRightsExpr -XMP-iptcExt:EmbeddedEncodedRightsExpr -XMP-iptcExt:EmbeddedEncodedRightsExprType -XMP-iptcExt:EmbeddedEncodedRightsExprLangID -XMP-iptcExt:Event -XMP-iptcExt:IPTCLastEdited # LEREDetails struct -XMP-iptcExt:LinkedEncRightsExpr -XMP-iptcExt:LinkedEncodedRightsExpr -XMP-iptcExt:LinkedEncodedRightsExprType -XMP-iptcExt:LinkedEncodedRightsExprLangID # LocationDetails struct -XMP-iptcExt:LocationCreated -XMP-iptcExt:LocationCreatedCity -XMP-iptcExt:LocationCreatedCountryCode -XMP-iptcExt:LocationCreatedCountryName -XMP-iptcExt:LocationCreatedProvinceState -XMP-iptcExt:LocationCreatedSublocation -XMP-iptcExt:LocationCreatedWorldRegion -XMP-iptcExt:LocationCreatedLocationId # LocationDetails struct -XMP-iptcExt:LocationShown -XMP-iptcExt:LocationShownCity -XMP-iptcExt:LocationShownCountryCode -XMP-iptcExt:LocationShownCountryName -XMP-iptcExt:LocationShownProvinceState -XMP-iptcExt:LocationShownSublocation -XMP-iptcExt:LocationShownWorldRegion -XMP-iptcExt:LocationShownLocationId -XMP-iptcExt:MaxAvailHeight -XMP-iptcExt:MaxAvailWidth -XMP-iptcExt:ModelAge -XMP-iptcExt:OrganisationInImageCode -XMP-iptcExt:OrganisationInImageName -XMP-iptcExt:PersonInImage # PersonDetails struct -XMP-iptcExt:PersonInImageWDetails -XMP-iptcExt:PersonInImageId -XMP-iptcExt:PersonInImageName -XMP-iptcExt:PersonInImageDescription # CVTermDetails struct #-XMP-iptcExt:PersonInImageCharacteristic -XMP-iptcExt:PersonInImageCvTermCvId -XMP-iptcExt:PersonInImageCvTermId -XMP-iptcExt:PersonInImageCvTermName -XMP-iptcExt:PersonInImageCvTermRefinedAbout # ProductDetails struct -XMP-iptcExt:ProductInImage -XMP-iptcExt:ProductInImageName -XMP-iptcExt:ProductInImageGTIN -XMP-iptcExt:ProductInImageDescription # RegistryEntryDetails struct -XMP-iptcExt:RegistryID -XMP-iptcExt:RegistryItemID -XMP-iptcExt:RegistryOrganisationID # # plus schema # # CopyrightOwnerDetail struct -XMP-plus:CopyrightOwner -XMP-plus:CopyrightOwnerID -XMP-plus:CopyrightOwnerImageID -XMP-plus:CopyrightOwnerName # ImageCreatorDetail struct -XMP-plus:ImageCreator -XMP-plus:ImageCreatorID -XMP-plus:ImageCreatorImageID -XMP-plus:ImageCreatorName # ImageSupplierDetail struct -XMP-plus:ImageSupplier -XMP-plus:ImageSupplierID -XMP-plus:ImageSupplierImageID -XMP-plus:ImageSupplierName # LicensorDetail struct -XMP-plus:Licensor -XMP-plus:LicensorCity -XMP-plus:LicensorCountry -XMP-plus:LicensorEmail -XMP-plus:LicensorExtendedAddress -XMP-plus:LicensorID -XMP-plus:LicensorImageID -XMP-plus:LicensorName -XMP-plus:LicensorNotes -XMP-plus:LicensorPostalCode -XMP-plus:LicensorRegion -XMP-plus:LicensorStreetAddress -XMP-plus:LicensorTelephone1 -XMP-plus:LicensorTelephone2 -XMP-plus:LicensorTelephoneType1 -XMP-plus:LicensorTelephoneType2 -XMP-plus:LicensorTransactionID -XMP-plus:LicensorURL -XMP-plus:MinorModelAgeDisclosure -XMP-plus:ModelReleaseID -XMP-plus:ModelReleaseStatus -XMP-plus:PLUSVersion -XMP-plus:PropertyReleaseID -XMP-plus:PropertyReleaseStatus # end �������������������������������������������������������������������������������������������Image-ExifTool-10.10/arg_files/pdf2xmp.args���������������������������������������������������������000644 �000765 �000024 �00000001712 12213342443 020553� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: pdf2xmp.args # # Description: Tag name translations for converting from PDF DocInfo to XMP # # Usage: exiftool -tagsFromFile SRCFILE -@ pdf2xmp.args DSTFILE # # Requires: ExifTool version 7.07 or later # # Revisions: 2011/01/23 - P. Harvey Created # # References: http://www.adobe.com/devnet/xmp/ # # Notes: These arguments will not delete XMP tags which are missing # from the PDF. The XMP tags should be deleted beforehand if # required. #------------------------------------------------------------------------------ -XMP-dc:Title < PDF:Title -XMP-dc:Creator < PDF:Author -XMP-dc:Description < PDF:Subject -XMP-pdf:Keywords < PDF:Keywords -XMP-xmp:CreatorTool < PDF:Creator -XMP-pdf:Producer < PDF:Producer -XMP-xmp:CreateDate < PDF:CreateDate -XMP-xmp:ModifyDate < PDF:ModifyDate -XMP-pdf:Trapped < PDF:Trapped # end ������������������������������������������������������Image-ExifTool-10.10/arg_files/xmp2exif.args��������������������������������������������������������000644 �000765 �000024 �00000003740 12454763606 020757� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: xmp2exif.args # # Description: Tag name translations for converting XMP to EXIF # # Usage: exiftool -tagsFromFile SRCFILE -@ xmp2exif.args DSTFILE # # Requires: ExifTool version 8.60 or later # # Revisions: 2009/01/20 - P. Harvey Created # 2011/06/22 - PH Copy flash information via Composite:Flash # 2013/06/12 - PH Additions for the Exif 2.3 for XMP spec # 2015/01/12 - PH Avoid copying from non-standard namespaces # # References: http://www.metadataworkinggroup.org/specs/ # # Notes: 1) The first three arguments copy the bulk of the EXIF and GPS # information, and the remaining arguments handle the tags # which have different names and/or formats in XMP and EXIF. # # 2) These arguments will not delete EXIF tags which are missing # from the XMP. The EXIF tags should be deleted beforehand if # required. #------------------------------------------------------------------------------ -EXIF:all < XMP-exif:all -EXIF:all < XMP-exifEX:all -EXIF:all < XMP-tiff:all -EXIF:ImageDescription < XMP-dc:Description -EXIF:DateTimeOriginal < XMP-photoshop:DateCreated # magically extracts sub-seconds from date/time value if available -EXIF:SubSecTimeOriginal < XMP-photoshop:DateCreated -EXIF:CreateDate < XMP-xmp:CreateDate -EXIF:SubSecTimeDigitized < XMP-xmp:CreateDate -EXIF:ModifyDate < XMP-xmp:ModifyDate -EXIF:SubSecTime < XMP-xmp:ModifyDate -EXIF:Software < -XMP-xmp:CreatorTool -EXIF:Copyright < XMP-dc:Rights -EXIF:Artist < XMP-dc:Creator # XMP flash information is translated by the Composite Flash tag -EXIF:Flash < Composite:Flash # generate GPS tags which have been combined into other XMP tags -GPS:GPSLatitudeRef < Composite:GPSLatitudeRef -GPS:GPSLongitudeRef < Composite:GPSLongitudeRef -GPS:GPSDatestamp < XMP-exif:GPSDateTime -GPS:GPSTimestamp < XMP-exif:GPSDateTime # end ��������������������������������Image-ExifTool-10.10/arg_files/xmp2gps.args���������������������������������������������������������000644 �000765 �000024 �00000002340 12213342424 020570� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: xmp2gps.args # # Description: Argument file for copying GPS information from XMP to EXIF # # Usage: exiftool -tagsFromFile SRCFILE -@ xmp2gps.args DSTFILE # # Requires: ExifTool version 6.75 or later # # Revisions: 2009/01/09 - P. Harvey Created # # Notes: 1) Most of the GPS tags are copied by the first argument, but # the coordinate references and date/time values are stored # separately in EXIF, so they must be handled separately. # A bit of magic is employed by ExifTool to extract the date # and time parts respectively when writing date-only and # time-only tags with a date/time value. # # 2) These arguments will not delete GPS tags which are missing # from the XMP. The GPS tags should be deleted beforehand if # required. #------------------------------------------------------------------------------ -GPS:all < XMP-exif:all -GPS:GPSLatitudeRef < Composite:GPSLatitudeRef -GPS:GPSLongitudeRef < Composite:GPSLongitudeRef -GPS:GPSDateStamp < XMP-exif:GPSDateTime -GPS:GPSTimeStamp < XMP-exif:GPSDateTime # end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/arg_files/xmp2iptc.args��������������������������������������������������������000644 �000765 �000024 �00000006217 12213341577 020755� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: xmp2iptc.args # # Description: Tag name translations for converting from XMP to IPTC # # Usage: exiftool -tagsFromFile SRCFILE -@ xmp2iptc.args DSTFILE # # Requires: ExifTool version 7.45 or later # # Revisions: 2005/05/14 - P. Harvey Created # 2008/03/04 - PH Changed Location translation and added # IntellectualGenre and SubjectCode # 2008/09/30 - PH Added writing of Photoshop:IPTCDigest # 2009/01/20 - PH Updated to conform with MWG spec # 2009/10/21 - PH Write IPTC:DigitalCreationDate/Time tags # # References: http://www.iptc.org/IPTC4XMP/ # http://www.iptc.org/IIM/ # http://www.adobe.com/products/xmp/pdfs/xmpspec.pdf # http://www.metadataworkinggroup.org/specs/ # # Notes: 1) Also updates Photoshop:IPTCDigest as per MWG recommendation. # # 2) For special characters in the XMP to be preserved, the IPTC # encoding must be UTF-8: Either IPTC:CodedCharacterSet must # already be "UTF8", or it must be set to "UTF8" when copying the # XMP. This is not done automatically by this argfile because it # could invalidate the encoding of existing IPTC if there were # any values containing special characters. See FAQ number 10 # for more information about converting the IPTC encoding: # http://owl.phy.queensu.ca/~phil/exiftool/faq.html#Q10 # # 3) These arguments will not delete IPTC tags which are missing # from the XMP. The IPTC tags should be deleted beforehand if # required. #------------------------------------------------------------------------------ -IPTC:By-line < XMP-dc:Creator -IPTC:Caption-Abstract < XMP-dc:Description -IPTC:CopyrightNotice < XMP-dc:Rights -IPTC:Keywords < XMP-dc:Subject -IPTC:ObjectName < XMP-dc:Title -IPTC:By-lineTitle < XMP-photoshop:AuthorsPosition -IPTC:Writer-Editor < XMP-photoshop:CaptionWriter -IPTC:Category < XMP-photoshop:Category -IPTC:City < XMP-photoshop:City -IPTC:Country-PrimaryLocationName < XMP-photoshop:Country -IPTC:Credit < XMP-photoshop:Credit -IPTC:DateCreated < XMP-photoshop:DateCreated # magically extracts time from a date/time value -IPTC:TimeCreated < XMP-photoshop:DateCreated -IPTC:Headline < XMP-photoshop:Headline -IPTC:SpecialInstructions < XMP-photoshop:Instructions -IPTC:Source < XMP-photoshop:Source -IPTC:Province-State < XMP-photoshop:State -IPTC:SupplementalCategories < XMP-photoshop:SupplementalCategories -IPTC:OriginalTransmissionReference < XMP-photoshop:TransmissionReference -IPTC:Urgency < XMP-photoshop:Urgency -IPTC:Country-PrimaryLocationCode < XMP-iptcCore:CountryCode -IPTC:Sub-location < XMP-iptcCore:Location -IPTC:DigitalCreationDate < XMP-xmp:CreateDate -IPTC:DigitalCreationTime < XMP-xmp:CreateDate # these tags are not free-form text, and may need special handling: #-IPTC:ObjectAttributeReference < XMP-iptcCore:IntellectualGenre #-IPTC:SubjectReference < XMP-iptcCore:SubjectCode -Photoshop:IPTCDigest=new # end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Image-ExifTool-10.10/arg_files/xmp2pdf.args���������������������������������������������������������000644 �000765 �000024 �00000001712 12213342403 020547� 0����������������������������������������������������������������������������������������������������ustar�00phil����������������������������staff���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#------------------------------------------------------------------------------ # File: xmp2pdf.args # # Description: Tag name translations for converting from XMP to PDF DocInfo # # Usage: exiftool -tagsFromFile SRCFILE -@ xmp2pdf.args DSTFILE # # Requires: ExifTool version 7.07 or later # # Revisions: 2011/01/23 - P. Harvey Created # # References: http://www.adobe.com/devnet/xmp/ # # Notes: These arguments will not delete PDF tags which are missing # from the XMP. The PDF tags should be deleted beforehand if # required. #------------------------------------------------------------------------------ -PDF:Title < XMP-dc:Title -PDF:Author < XMP-dc:Creator -PDF:Subject < XMP-dc:Description -PDF:Keywords < XMP-pdf:Keywords -PDF:Creator < XMP-xmp:CreatorTool -PDF:Producer < XMP-pdf:Producer -PDF:CreateDate < XMP-xmp:CreateDate -PDF:ModifyDate < XMP-xmp:ModifyDate -PDF:Trapped < XMP-pdf:Trapped # end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������